atomes_1.3.1/0000775000175000017500000000000015212624223012505 5ustar lerouxlerouxatomes_1.3.1/metadata/0000775000175000017500000000000015212624223014265 5ustar lerouxlerouxatomes_1.3.1/metadata/atomes.desktop0000664000175000017500000000150515212624223017151 0ustar lerouxleroux[Desktop Entry] Type=Application Name=atomes GenericName=atomes Comment=An atomic scale modeling toolbox Comment[fr]=Une boite à outils pour la modélisation à l'échelle atomique Keywords=chemistry;physics;atom;molecule;crystal;coordination;polyedra;measure;volume;builder;material; Keywords[fr]=chimie;physique;atome;molécule;cristal;coordination;polyèdre;mesure;volume;constructeur;matériau; Keywords[es]=química;física;átomo;molécula;cristal;coordinación;poliedro;medida;volumen;constructor;material; Icon=atomes Exec=atomes %F Terminal=false MimeType=application/x-awf;application/x-apf;application/x-ipf;application/x-xyz;application/x-pdb;application/x-ent;application/x-cif;application/x-trj;application/x-xdatcar;application/x-c3d;application/x-hist; StartupNotify=true Categories=Education;Science;Chemistry;Physics; atomes_1.3.1/metadata/icons/0000775000175000017500000000000015212624223015400 5ustar lerouxlerouxatomes_1.3.1/metadata/icons/atomes-workspace.png0000664000175000017500000000602115212624223021371 0ustar lerouxlerouxPNG  IHDR00WiCCPICC profile(}=H@HE* vqP,U(BP+`r4iHR\ׂ?Ug]\AIEJ.)ޗT38 edRI!_BD (9]gy9@`J<\urI!ׯ@i{\^{۶msEJ 5 ( 3g>K>@+ mi|עv+ Ytoo+CBwX,ZӁVdhFPP-[[o h\@"4Q!( bQ[fͯnI:^MO:l&}ڵohiJ~&i)%H$֭{W_}nHZlx. LAH) x<뺴Y==={_~_!j!! S]ױmuioo@z$d-nEO0H&7w}vڵhCc" Ybx"TۂR>UU1M۶mٸq;w8w`t)גod2|{7bÚ-[bi҂mAP!iRJ\Mnݺ0grT;;}yڎ 8q6:"ĶmVXaxfŧ8p(Ew~~r7n UkFCDQT4Mt]Uj\Xlikkkp\nDuLgSo/T Y\K5w6CbnN6Ǧ\DN޸A4dնS)7 ٚ͒J&+^50Whjuu,;5(Iɹ.*.ttp=fE:}+3Dzʳ傺--Dem0D^*EAq t߯䆢iO&).!wYÃD`H g(d,aHd`|+##,mnF8p*cr0fOݢ̬x Yp]ut#u/nuA@dY`eɏxͅukfilxYN:MiNN&_xKcYUbj0[$J%}} `0j|LTf2I&5jr⩆|/2ɍA~7xϑn.LN޺OJhlD#&Mf^48̩D.) rh'& )%D˲q:ǧNqqXe  ؚˑ$f{13 򃃬`ݩS=Jj/5Mc>ar16S}څi`,Q:53 L@JEcضaD4v*}؜pƲxqXjYEܲuchUUQUW8C(W]Ѫ*e'd3%KX88aT@͜M1j`>JmJZIjʅjBI)Bڵtu!Xl^M`l|$[(ztd"&}pe%19s"\ Hp9Bv]r7๖H$tvv.J-Q8X5 ^Qu}ҥKg/Z ( ؀Q :Rc >@m=M-?!UpIENDB`atomes_1.3.1/metadata/icons/atomes.png0000664000175000017500000000631415212624223017402 0ustar lerouxlerouxPNG  IHDR00WiCCPICC profile(}=H@HE* vqP,U(BP+`r4iHR\ׂ?Ug]\AIEJ.)ޗT38 edRI!_BD (9]gy9@s, O p($,= [߼9  T6Eh Ȏz >? b(j{(c<0Fzh#JMTXsbtZ8sFu}jgNR871:Xqg>Y^?> ?MQzC,h0s}ʗ ;EwrzZ?oݱ?*E>GF6/8@~ri"72RmK_i-rkއg`vD.G<ò҇SO|ziC|_d4w䈬W/tl{fQܹZm O:;I!t/i\Zi<˛ ak`տyĮ%Meb3r?҉xy3G$N W<:\`ζֶ XBkdրR1 ;Id|6~B-*?{}ܕ3!vB /%zü6Zb>Ϫn]9QԀq`(&{%}hQBT,(pVB S'Ä.N;]a6 HJ|ķmZ i$ _iE]mKeWt={ NNb8JQ Cv ލ8K\(.CCyDH۞'?ږ ]rQ !ơCtz9B$!p]PXBJA04t%a~+(ƒ[ϿK UI5? 2aWۧk\b(J!uij(J/Jf 0`l,e)IQ.P^tRo)xuxY\"%iJRqm;n/%JPB\zxb}5qoLF@˵dQfP,B.`xȡC -D.mZWŋR66orӕUn: v[Rv_|)Q@+Is_7Էud@RK;{˦yf$Z`#IӕiRWV7/w{zhfo@xٳ3b6E)HMc>#4Hn7msFnaTF/K >n?6q Tp-Wak,:/\ XY&l-kͼnݑ3|iϞZCJJ4a->2$ DæI%c%ȮaPn6gg]mcjY)x{??7XRGo60OHB*2QDuY(} 5 to7rxzyjt4TE1Rr&=jrY}LàxJ!BftHóG,ORa7l/ k:J,M4 nGʭ,ˢZlk408|q`& )Zolp ߍ>Gn|ø$aTMj&~ű1VX/%#N;c4jI46 !;+Bd,00HŵӆM)Ӵ,e1q%G= R: L zkB)JA>OIMGIws:8'}en7uk7 ŁR>b& nc( o^yTu3\> 3O=u^ER]M@vu6s4y[q`+'OPva_ϣTo4Nv~'jn6 Y aa{ ~VW#| 9<|xŋ,>M.#G8p͜gЋRq~piiv󋯾Ϟ{ɣaR`B :̖.#pw'|@> k$ v{&hVΝ/vnky]HSa\w$>5=_ X8+a[wx:/| _y=P[4# B?2\ή&^58: }vw/YkUlp`oeՌ@i-3h/eҠ2x9 jل:)knE`N;UM"*N,xӂ;cͺ3 ådž^ ȕHxA̍{k[ihXbN[;6\` -iYֱ| >g-]6\ >$iMZ "<v+s IENDB`atomes_1.3.1/metadata/icons/atomes.ico0000664000175000017500000017017615212624223017400 0ustar lerouxlerouxx| h(x      !$'))*)(%"  %).134441.+&" "(.37;>?@><94/)$ ")07=BFIKKJGC>82+% !)18@FLQTVVURNIB;4,%&/8@IPV[_aa`]XSLD;3+# #+5>H=@2ikkjgb\ULD;2)"&0:Rfpturj[6spke]ULB8/'   )@gx|nSwsle\SI@6.& "EmtYysldZPG=5,&   &jsOyrjaXOE<4-'"  \|jwph_VMD=5/*%"  nxR}vng^VMF?94/+(%"  Nxb{tmf^VPIC>:52.+)&$" Y}iztmg`YSNIEA=:741.+)&%"  ]kzuojd^YUPMIFB?<:741/,*(%#! Z}i|wrmhd`\YUROLIFC@=:852/-+(&#! Pxb~zvrnkgda^[XUROLIFDA>;8530.+(&$"   3oxT3333~{xuroligda^[XVSPMJGDA>;9631.+)&%"    _}k133333333}{yvtqnljgdb_\YVSQNKHEB?<:741/,*(%#!  "%'(((&$" :ltTvv333333333333}zyvtqomjheb`]ZWTQNKHFC@=:852/-+(&#!   %(,/12220.*&" Mov]qvv333333333333333}{ywtspnkhfc`^[XUROLIFDA>;8530.+(&$"!%).26:<=>=;84/)# Kjy}pYvv33333333333333333333}|zwvsqnkifda^[XVSPMJGDA>;9631.+)'%#" "#&*.38=ADGIIIFB=81+$ .Yirvwtm`Fvvvv33333333333333333333333~|zxvsqnljgdb_\YVSQNKHEB?<:742/-+*)))+-048=CGLPSUUSQMGA:2+#(@KMFTT vv vvvv333333333333333333333333333|zxvtqomjheb`]ZWTQNKHFC@=;87544458;>CIMSX[^``^[WQJB:1)  &333^^ ^^ S{TTvv vv vv vvvvvvvv333333333333333333333333333333}{ywtspnkhfc`^[XUROLIGDCA@@@ACFJOSY'4%ijjheaZRJA7.%%^^ ^^ ^^ ^^ fTTTTvv vv vv vvvvvvvv3333333333333333333333333333333333}|zwvsqnkifda^[XVSQOMLLLMORU<\iprpj]<qmhbYPF=2)  %^^ ^^ ^^ ^^ TT sTTTTvv vv vv vvvvvvvv33333333333333333333333333333333333333~|zxvsqnljgdb_][YXXXY[]Wo|~qYtnh_VLA6,# %^^ ^^ ^^ ^^ ^^ TTTTTTvvvv vv vv vvvvvvvv33333333333333333333333333333333333333333|zxvtqpmkigeddddf]vy`tmdZOD9.% &^^ ^^ ^^ ^^ ^^ ^^ TTTTTTvvvv vv vv vvvvvvvv33333333333333333333333333333333333333333333}{ywusqponnoVvyYpg\RF;0&333^^ ^^ ^^ ^^ ^^ ^^ TT TTTTvvvv vv vv vvvvvvvv3333333333333333333333333333333333333333333333333~}{zyxx:nq:g]RG;1&333^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTTTvvvv vv vv vvvvvvvv3333333333333333333333333333333333333333333333333333Y{~\g\RF;0&!^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTvvvvvv vv vv vvvvvvvv 3333333333333333333333333333333333333333333333333333333fjdZOD9.% "^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ VV TTXXvvvv vv vv vvvvvvss(33333333333333333333333333333333333333333333333333333vvvvvvp_VKA6," $^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ UUSSiivvvv vv vv vvvvvv||3333333333333333333333333333333333333333333333333333vv vvvvr,PF<2) &^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ZZ SSUUuuvv vv vv vv vvvvuu5333333333333333333333333333333333333333333333333vvvvvvvvpSJ@7.%333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __ WWTTllvvvv vv vv vvvvvvuu'3333333333333333333333333333333333333333333333vvvvvvvvvvvv iJB:1(   ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ]] TTXXxxvvvv vv vv vvvv63333333333333333333333333333333333333333333vvvvvvvvvvvv vv!|ZA:2*#"^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ZZ RRjjvvvv vv vv vv xx33333333333333333333333333333333333333333vvvvvvvvvvvv vv!vv"vv"o581+$ #^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ VVYYvvvvvv uu!yy-33333333333333333333333333333333333333vvvvvvvvvvvv vv!vv"vv"vv#vv#vV5/)# %^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ]] RRnnvvvv333333333333333333333333333333333331vvvvvvvvvvvv vv!vv"vv"vv#vv#vv#vv"vv"vv!vvvvvvvvv\1,&" 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __gg35333333333333333334,uuvvvvvvvv vv!vv"vv"vv#vv#vv#vv"vv"vv!vvvvvvvvvvvvy{mU,(# 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ dd*433333333333334,ttvvvvvvvv vv!vv"vv"vv#vv#vv#vv"vv!vv!vvvvvvvvvvvv3vv WelomfX3(#  ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ oo 333333333333-vvvvvv vv!vv"vv"vv#vv#vv#vv"vv!vv!vvvvvvvvvvvv333j`VL:2+%   "^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^"53333335% uu"vv"vv"vv#vv#vv#vv"vv!vv!vvvvvvvvvv333333dYOE;2+$ $^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ jj43334' {{vv#vv#vv"vv"vv!vv!vvvvvvvvvv33333333^SI>4+$ &^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^43-vv#vv"vv!vv vvvvvvvvvv333333333dYMC8.& 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ff ww!vv vvvvvvvvvv33333333333^SG=2)   ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ]]cchhvvvvvvvv333333333333dYMB7-$"^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aaggjjttvvvv33333333333333_TH=2( #^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^eeiillll~~ 333333333333333eZOC8-$ %^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^cchhkkmmooyy6333333333333333aUI>3) 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ffjjllnnppqq 433333333333333333[PD8.%333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ bbhhkkmmooqqrryy!1433333333333333333bVJ?4* !^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^eeiimmnnpprrrrtt633333333333333333333\QF:/% #^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __ffjjmmooqqrrsstt 4333333333333333333333cXL@5+" &^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aahhkknnooqqssssuutt 43333333333333333333333^RG;1&(^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ bbhhllnnppqqssttuuvv3333333333333333333333dYMA7," #333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ cciilloopprrssttuuvvvv3333333333333333333333_TH=2(&^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ cciilloopprrssttuuvvvv333333333333333333333eZOC7-# #+^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ cciilloopprrssttuuvvwwvv333333333333333333333aUI>3)  (1^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ cciilloopprrssttuuvvvvww333333333333333333333[PD8.% '.7^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ bbhhllnnppqqssttuuvvvvwwww33333333333333333333bVJ?4*  '.6333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aahhkknnooqqssssuuuuvvwwww33333333333333333333\QF:/%!(/6>^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ccbbffjjmmooqqrrssttuuvvvvwwyy3333333333333333333cXL@5+" ")/7?G^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __ddhhkkeeeeiimmnnpprrrrttuuuuvvwwvv3333333333333333333^RG;1&")08@HP^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ]] YY ZZ iikkmmnnooaahhkkmmooqqrrssttuuvvvvwwvv3333333333333333333dYMA7,"  (08@IQY^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ WW TTSSeemmoooopprreeffjjllnnppqqrrttttuuvvvvvv4333333333333333333_TH=2(&.7@IRZb^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ]] WW TTTTTTSSllppppqqqqqqmmcchhkkmmooqqqqssttttuuuuvvvv*333333333333333333eZOC7-# "+4>GQZb333^^ ^^ ^^ ^^ ^^ ^^ ^^ WW SSTTTTTTTTSSiiqqqqqqqqqqqqbbeeiillnnooqqqqssttttuuuuuu 4333333333333333333aUI>3) &/: LX\YTTTT^^ ^^ ^^ ^^ TTTTTTTTTTTTTTTTTT``qqqqqqqqppoonnbbggjjllnnooqqqqrrssttttuuxx33333333333333333333[PD8.% )3Ylv|}|TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUqqqqppoonnllkkcccchhjjmmnnooqqqqrrrrssssss"3333333333333333333bVJ?4*  "9fyTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTYYnnnnlljjggbb^^^^ddhhjjllnnooppqqrrrrssssss53333333333333333333\QF:/% +h~TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUeeffaa^^ ^^ ^^ ^^ ^^ddhhjjllmmnnooppqqqqqqrr43333333333333333333cXL@5+" _{|TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTXX \\ ^^ ^^ ^^ ^^ ^^ ^^ ^^ccggiikkllmmnnooooppppss433333333333333333333^RG;1& ArTTTTTTTTTTTTTTTTTTTTTTTTXX ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ]]aaffhhjjkkmmmmnnnnoonn"533333333333333333333dYMA7," [}TTTTTTTTTTTTTTTTTTYY ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ccffhhiijjkklllllloo4333333333333333333333_TH=2( fTTTTTTTTTTTTUUZZ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^^bbeeffhhhhiiiihh233333333333333333333eZOC7-# jTTTTTTTTVVZZ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^__aabbccccccbb'33333333333333333333aUI>3) jTTTTTTTT]] ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ 43333333333333333333[PD9.%eTTTTTTTT^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ cc3333333333333333333bVJ?4* Y|TTTTTT^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ 3333333333333333333\QF:/%:pTT^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ hh33333333333333333cXL@5+" \z}c@333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ccvv!vv!vv vvvvvv33333333333333333^SG;1&e|~j<421^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ kkvvvvvv vv!vv vvvvvv3333333333333333dYMB7,# bwygA+)(&%$^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ggvvvvvv vv!vv!vvvvvvvv333333333333333_TI=2(Rhsy{ztkX"! 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTvvvvvv!vv!vv vvvvvv33333333333333f[OC8.$ @PURE 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTvvvvvv vv!vv vvvvvv33333333333333aVJ>4)   333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTvvvv vv!vv!vvvvvvvv3333333333333]QF:/% ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TT TTvvvvvv vv!vv vvvvvv333333333333dXLA5+"  ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTvvvv vv!vv vvvvvv333333333333_SH<1'333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTvvvv vv!vv!vv vvvvvv3333333333g[PD8.# 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TT TTTTvvvv vv!vv vvvvvv3333333333cXL@5*!333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTvvvv vv!vv vvvvvv333333333kaUI=2( ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTTTvv vv!vv!vv vvvvvv33333333j^RF;/% ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TT TTTTvvvv vv!vv vvvvvv33333333h]QE9.$ 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTTTvv vv!vv vvvvvvvv333333qg\PD8.$ 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTTTvv vv!vv!vv vvvvvv333333rh\QE9.% 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TT TTTTTTvv vv!vv vv33333{si^RF;/& 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTTTvv vv!vv xvv 3333|tk`UI=2( ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTTTTT vv!vv333~vmbXL@5+! 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTvvv m333ype[OC8-# 333^^ ^^ ^^ ^^ ^^ ^^ ^^ hT^b`YH{si^SG;0& 333^^ ^^ ^^ ^^ ^^ R^ox~{sfL}ukaVJ>3( 333^^ ^^ ^^ ^^ Gi{qX~wncXL@5+! ^^ ^^ AktWxoeZNB7,"  "+d}pDoeZOC7,# Nt~andYNC7," a~o2bXLA5+" jwL^TI>3) -ozTYOD:0&.o{TRI?5,# kxMJB90'bp4B:2*" Pvc@92+#frG50*# EnwZ1,(" Lm~u\*'# >cs}xjQ#!CZcge^N  ????????????atomes_1.3.1/metadata/icons/atomes.svg0000664000175000017500000002542715212624223017423 0ustar lerouxleroux atomes_1.3.1/metadata/icons/atomes-project.svg0000664000175000017500000002513515212624223021063 0ustar lerouxleroux atomes_1.3.1/metadata/icons/atomes-workspace.svg0000664000175000017500000003117715212624223021416 0ustar lerouxleroux atomes_1.3.1/metadata/icons/atomes-workspace.ico0000664000175000017500000020407615212624223021371 0ustar lerouxleroux ((     #&())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(&"  '19?BCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCB>91' )8GSZ_abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba_YRF8) $6J]mw}}vk]J6$  ,BA+ 2KK26QP6 8TT7  :VU9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :Wtt|}00mV9  :W00s""wV9  :W||--fV9  :W22t""yV9  :W55y""|V9  :W>>p!!o{V9  :W~BBP23=CV9  :W{{|y-33333=CV9  :Wmmdp++f== xx(233333333:=gV9  :W[[22[==dmm(tt-vv 333333333333:=g11ecc~V9  :Wrr|}//l^^ ZZJJ=ffvv vvww,3333333333333333=C((wbbV9  :W//s""w{{j^^ ^^ YYVVttvv vvzz23333333333333333333=C~%%vdd~V9  :Wzz,,e\\0^^ ^^ ^^ WWggvv vv vv 23333333333333333333333:=ezzq %%xV9  :W22s""ybb%^^ ^^ ^^ \\ WWrrvv vvvv*3333333333333333333333333,uu(<<V9  :W44x""{``^^ ^^ ^^ ^^ YYddvvvv vv}}03333333333333333333333, wwUUv((V9  :W==p ovV^^ ^^ ^^ ^^ ^^ ]] XXrrvv vv33333333333333333333, wwvvtt155oV9  :W~BBP0"^^ ^^ ^^ ^^ ^^ ^^ \\ ffww)22222233333333332, wwvvvv!vv"uu,WW}UU{SSt ++{V9  :Wyy|y+VV#^^ ^^ ^^ ^^ ^^ ^^ ^^ dd %03333332, wwvvvv!vv"vv#vv"vv vvzz.,,t~++~88oV9  :Wlldp++f== qq%aa^^ ^^ ^^ ^^ ^^ ^^ ^^ __ zz'3332({{vv!vv"vv#vv"vv ww"&2zV9  :W[[22[==dmm(rr,mm`` ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ dd2* ww"vv!vv ww"-338V9  :Wqq|}..l^^ ZZJJ=ffssaa ]] ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ``yy {{ww"-3333[V9  :W..r!!w{{i^^ ^^ YYVVppgg^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^eeoo-333334V9  :Wxx++e\\/^^ ^^ ^^ WWbb[[^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ bbjjoo&33333336V9  :W11s!!ybb%^^ ^^ ^^ [[ RRWW^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ffmmppvv(233333333}}RV9  :W33x!!{``^^ ^^ ^^ \\ TT ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __iinnrrtt2333333333:44fV9  :W<]]//XyzYYwO3 :W!!i]]xI.  :WxA)  :Wtt7! :Wyy___i+  :Wzfff}2   :W99vqqhhh7$  :W99tttppp<'  :W}}}}}}}}}}}}~~~nnn@+ :W~~~{{{yyywwwwwwvvvwwwxxxzzz|||~~~oooC- :WrrrF. :WwwwG/ :WzzzI0 :WJ1 :WL3 :WM4  :WN5   :WO5!  :WP6!  :WQ6!  :WQ6"  :WQ8#  :WR8$  :WR7$  :WS8#  :WS9#  :WR9$  :VU9$  8TT9$ 6QT9% 2K U9%  ,BU9%  $6R7% )$$$M2#  gggC^^^LVVVSPPPYNNN[NNN\MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]NNN\NNN[MMMYPPPV7*  #&())))))))))))))))))))))))))))))))))))))))))))))))('#    ????atomes_1.3.1/metadata/icons/atomes-coordinates.ico0000664000175000017500000020407615212624223021705 0ustar lerouxleroux ((     #&())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(&"  '19?BCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCB>91' )8GSZ_abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba_YRF8) $6J]mw}}vk]J6$  ,BA+ 2KK26QP6 8TT7  :VU9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WVVV+++III JJJ ***###***  {{{777OOO,,, QQQ tttNNN===V9  :Wkkk)))VVV;;;JJJ XXX!!!{{{&&&===888GGG///###DDD666444OOO hhh nnn???000iii ___V9  :W222lll///@@@sssccc ***$$$LLL 000GGG RRRLLL""""""^^^ XXXQQQ ???V9  :W&&&fff 777FFFggg333333555{{{666HHH '''sss KKK111 &&&V9  :W---333zzz444===)))mmm{{{"""!!!TTT<<<---&&&ZZZJJJ///CCC)))@@@777V9  :WTTTlllWWW==={{{%%%"""vvvEEEjjj$$$000gggwww"""ddd^^^ AAAqqq'''(((bbb~~~,,, $$$ooouuu )))uuuDDDooo 333lll555V9  :WXXX |||""" BBB???%%% 000111+++UUU... |||333 SSSGGG### @@@{{{ V9  :Wvvv###|||hhhuuu QQQVVVV9  :W|||!!!444,,,V9  :WhhhgggNNNV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WPPP%%%+++>>>222'''bbbbbb###111 $$$lll444EEEKKK222---!!!???V9  :W 999 :::!!!<<mm*55~ V9  :W~~1zzzzzzzzzzzzzz{{=?@@@@@?@@V9  :WGzzzzzzzzzzlljj)[['zz1@]V9  :W}})zzzzzzssjj&cc(PPW@|V9  :W||zzyyLLmPPm""IU8  :WzzQQZ~ xllS6 :W½00ckkO3 :W77}I.  :WTTA)  :W]]}}7! :Wxx|y___i+  :Wfff}2   :Whhh7$  :Wppp<'  :W}}}}}}}}}}}}~~~nnn@+ :W~~~{{{yyywwwwwwvvvwwwxxxzzz|||~~~oooC- :WrrrF. :WwwwG/ :WzzzI0 :WJ1 :WL3 :WM4  :WN5   :WO5!  :WP6!  :WQ6!  :WQ6"  :WQ8#  :WR8$  :WR7$  :WS8#  :WS9#  :WR9$  :VU9$  8TT9$ 6QT9% 2K U9%  ,BU9%  $6R7% )$$$M2#  gggC^^^LVVVSPPPYNNN[NNN\MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]NNN\NNN[MMMYPPPV7*  #&())))))))))))))))))))))))))))))))))))))))))))))))('#    ????atomes_1.3.1/metadata/icons/atomes-coordinates.png0000664000175000017500000002153715212624223021716 0ustar lerouxlerouxPNG  IHDR>a pHYsodtEXtSoftwarewww.inkscape.org< IDATx{tT?gg2I&7IHB0/ ^ ꯊ/V[K}. iUuշڋ?@E"H=;sr2LB$_Jf}y~$ Y$I‡D2+lHJh-D "|Eк%E]N"r"CEAo+#".  "WJ n#\`ILFHeR7r[ A4"|3`;uww[<Cpw $IV!Y7o>rĉvN,cڵQB QP@l(t^,HD(eٹv?ɲ $R(,s$ {$2z>=A ڵke9Ȣ; HP(LJf}z=:P(jb2{?y d !h.eYV/ lhhj* ^vAAR0XIéE V+6 tƟ? #E؃! P1x@$B 8R6aY,B[+@.j*I&BgykD =BRǯFҕ+4{׶^׶~mYB,PHv eee&u=nݺr­OxW+0g_|`0hd5#K8 n# |W_hT)C~_}VAB< Ҳg֬Y+ȡxgW KB0j**?YTڲWL!@p\c743aDL]i#b8x8He<& S$O&im?mw~Lx[+>dyEs3ł}ƝI`k0+G?HX &=[}kG dZroUn)RN[|ꏛCd ?煽{ ռGz9{$].AFE\@Y ȗ0+4DR[Jwt"! H#̔(D O>2x|>__ 1BI `VѺKJ*oh،eX\{>~|>@tӸw)Db }dPV|t_[ģ1ib j?ޏR) q?45 ONGd%/#6Y  ۩߱^ZY睇,4?UU lɄhXFt:uu\~u0L #Pi˩܄}&ŋCN,$,jt:Z1^#? j?YsR""_8f^O@at:|0@XrscJ'Nr 1d`Hw9tmJJ;=Jfw7mmX;;1zi_nNg?-FBí="p_z=ITQoLln74*~F);*!~`+^1 CBJj+WQ,7$a[V&.8X~?؃A.;;騪BXtcܕ |w!0 HOEF Ə>9 B!,atvBg'Y~?3*/ѣD._躻)|:ONk)%h#*:5®;l?Ρ@3 Bi&EE Lf3Yf3&|( y`")Cʮ\?9[}_T>C0S,GB wdKDff&F(A)ɤ ?_IF"lit@ܹ'> !AÒ6I`n7ȦN5^"+k ]TMuu@ ! f#ƴ2z=v#;|j/Eimx@LD(x0y@sjj )`!pz6UYYlX"[*CJWZxMd(xyNR*<м5h4fd\RSĪ*F9s DBӍF&\84*j_YkX4/w0R[uH@Ӕ)u:.XȱZV|eOE(Sza@Z@N C_~#@W8"[j7p _ۺ+Y+C!?1$UCᅬ1 ;x^;x[VkWk5ɤM ÍJ i7qVZvǩT~xhȎ'=ߺj thZ;RU+*?zWy:Uz,J9#Ԓ$I>Ly;>3x 1=soJpaD,A1)86 F#$'|)q><*֍MPp%}0Ծ*U)a,$ׁ~xh RbBH"j' `߱Z~yhzʇaxm);r3̾^n, VvvБ N~KIH~_ߦSohg'!Tu0T.h('ZV>/ 4FRw$*o鉢!=94t%{ҏ?NudO KO~rKxhěݻ+W׿{-p7'=t!Il0 tRuO> Bzz:7n$//>.֯_OUUW^y%&MR^^NII ~)[n!??-[G|S`2x$rpÇywikk㪫b ơrd́#c_%K0w\y ?'>}:]]]f$IbҤI,] ܌h1o<|A>C͛F tR\\ݻxU~mxw{wAeu{3z7R;vQG>9$ 8R Z\>N'!p8}ȲC=Ė-[xꩧXh`UVqFF͛ogӦM!3f ߸멫5kO xv?oy믿kLhݤ/_NMM #== hnn/pp멮[o+ //Billd߾}n?RVVFvv6z 2{lB`BDff&B6nHqq1Wfرlٲ ]E)1%7xIxg6m'PSS$//m۶ܹsZZZZ\.ʢIIOO.~!ӧsQZZZgϞ=4662~xV렿kܽhhŋә0aeee;`0Hyy9$܌RqR^R~>|}onn&++K/$n݊`̙x^fΜn,I`ϗ:xh{vb۶muY⋪jjjK8x ofʔ)̙3rnvFͧ~^gѢE|WV{0BjN'|8f̘Ann.999s]w صkEEE X^@@0=jik1zh/Y<ioood޼ytvv{nrssYr%3gsE.f15r: (&Kf,X@GGj~G]]}Ӗ!>[Z}}=B%IĉsZ[[)((@$~rނR^]]6rJ磺ZuڰaSkk+]16BبNnU_Isp  C;&Wuu;vn[m۶բ\lٲETUU";;[XV'x5ߓO>)ƌ#l6p:/UUUZ\x"33Syfɓ'?Xs9pt1qDĊ+Į]7x8v옘4iEEEjl1erbn[̝;WTWW/\8a2DFFp:bǎ'%%%n )fϞzQF *v(((vRuQ:x kgupȻ˗W_M~%%%xb^uƍǢEYZo}cM|ˁpƭ_μy󨩩ᦛnka3c nJss3'N$ HWWyzuHN:/^Lnn.6l૯ꫯnSPPmwΝ;/~h䮻bԩ|G\#Gc˒%K?>qH!{t2?O&NȺu0L!Xl[n套^bRZZJ0dԩ|tvvBII *6˗s1/^w Gj*v;f0uT֭[,˼x^$I"77zz;v 2>*.Rz!Xd ^z)VoLƍݻٽ{7tvv )--E `͈:@ټy3MMM,\SؖǏc6qTWWSXX BGvX,|gp 73}>#?~/rss1 9rIQQ?<@믿^̨QX`|XVHKKcĉرV&O @CC~~azƕW^ɓ`Μ9zj&MtĐwvNu"Bݻ#radddpgxz׮]Kww73gdƍf.b~ww oAcc:xHFFf;v@UU:{.M6op896mj϶zk(//W͛7rJf3ׯW^+e˖%!,zƌsmo[oh"."\,<w|><|9rDO[[:[W_eԨQ8NmFEEg?C3g`2% RTT4H릛nd2 (222ĉŮ]Dmm+EZZzoΜ9СC^XB(l60aذahhh%%%b„ A466Fo38CFaۅ.K_~Yvq'=\kFdffm۶qYg (,5jp\wEEEt -'~󟫼fr=IDATe~f{"ڃ:vXҼ :tY$g}㡴Ȏ/J(--=kCC۷ot2m4K8p$QRR}lݺFEcc#&Lo>ٳѣ@YYjm޼Y6mG%;;l 8vݔ;v `"2'N`Ν2fԹ pr>?f̘9'@iu/:-Yy |H&а Q!ցjTx4 ;NZ9ζ: $HBkQ<.(CS C"5"$ICMC5$ꝧ*#Rz nJfw#ND0H#HD ;†:N DRDt^x# I+ dF~[#e`d#c @'phD}@P!DPf F4H7)ZGANX o QPE3~ޭ D Ӱk BDaF ]?x6, =Q8 = PVF %iCޚ@ =x@P#HD]@C*da#(Z@W % 1 nkBv,`mPBIENDB`atomes_1.3.1/metadata/icons/atomes-coordinates.svg0000664000175000017500000002641415212624223021730 0ustar lerouxleroux Atomic CoordinatesAtomic Coordinates atomes_1.3.1/metadata/icons/atomes-project.png0000664000175000017500000000467215212624223021053 0ustar lerouxlerouxPNG  IHDR00WiCCPICC profile(}=H@HE* vqP,U(BP+`r4iHR\ׂ?Ug]\AIEJ.)ޗT38 edRI!_BD (9]gy9@ʃSbțC`Bo)%N D44NDVlIڝݝ>H6]Xfww9߬:kuyH6M I!_l5sӧ9rO+@Bu)J8==GA@ZTcV[NxGZ%… 'O՜8@^$%D4J266vv h3B !4 EQpG۷o߯Ϟ=K!ĮnI/ʷ躎mr9}=s/]w:򍤥(BP L200OLLԩS? f+tBH)q]x-px_<&­[wc(?|Ege"BEi$i^Zoϛss(y4%i<~ӸA@pu-0ָ:;˛׮a&tqnD<GQӳd4{*E^wpqv !(&ia H|:@W/$W,˟|’m#n AY)idm߶MXlP|o>0|K\-(** ew6x0Zʧg qq> ɺSuoHeP4>[}wX 0kUU%TTP)AQ htؾ^- jSѮĚF}u0MTGe۞ǍuJRAQHvS)cryS:2.Tpe|vPt#P{⠛$-xmwD.!x2&#%kka/.m!k;HzNd74,ﮬ |D,FZe0@`&Be]XRw7_\dyas{f H}ssRJ񁈔D`XӰqdb${O`W0y&|U< =Y`0#Y(E4 \*tycc|}6ַRU jJ/x)8 %&0HɈKUa`fE::oDQTUݑz.Z9|c󘝘`*aL4 bA4kZ J}rG&ڱF{dedFuԻ 1,\zP1S\;~2=G.#Dꀃ| +`6L&F-~>#kKFQRDo)lGߜx\뤵*;\3 NRZ0>lL҇,5o‚kEBxHBub0bcG8(5 3h^"6]V!*n0Zm ^Qu󫫫K@),0 0!Pc} @}HnfkNIENDB`atomes_1.3.1/metadata/icons/atomes-project.ico0000664000175000017500000020407615212624223021041 0ustar lerouxleroux ((     #&())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(&"  '19?BCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCB>91' )8GSZ_abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba_YRF8) $6J]mw}}vk]J6$  ,BA+ 2KK26QP6 8TT7  :VU9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :Wrr|}//lV9  :W//s""wV9  :Wzz,,eV9  :W11s""yV9  :W44x""{V9  :W==p oz~V9  :W~BBP23=C~V9  :W|y-33333=CV9  :Wrrdp++f== xx(233333333:=fV9  :W[[22[==dmm(tt-vv 333333333333:=f11ecc~V9  :W^^ ZZJJ=ffvv vvww,3333333333333333=C~((wbbV9  :Wy^^ ^^ YYVVttvv vvzz23333333333333333333=C~%%vdd~V9  :W``7^^ ^^ ^^ WWggvv vv vv 23333333333333333333333:=ezzq %%xV9  :Wgg1^^ ^^ ^^ \\ WWrrvv vvvv*3333333333333333333333333,uu(<<V9  :Wbb&^^ ^^ ^^ ^^ YYddvvvv vv}}03333333333333333333333, wwUUv((V9  :W^^ ^^ ^^ ^^ ^^ ]] XXrrvv vv33333333333333333333, wwvvtt155oV9  :W^^ ^^ ^^ ^^ ^^ ^^ \\ ffww)22222233333333332, wwvvvv!vv"uu,WW}UU{SSt ++{V9  :W__D^^ ^^ ^^ ^^ ^^ ^^ ^^ dd %03333332, wwvvvv!vv"vv#vv"vv vvzz.//t~++~88oV9  :Wff1^^ ^^ ^^ ^^ ^^ ^^ ^^ __ zz'3332({{vv!vv"vv#vv"vv ww"&2V9  :Wgg1^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ dd2* ww"vv!vv ww"-33:V9  :W]] ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ``yy {{ww"-3333lV9  :W^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^eeoo-33333:V9  :Wx^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ bbjjoo&3333333FV9  :W``6^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ffmmppvv(233333333V9  :Wgg0^^ ^^ ^^ ^^ ^^ ^^ ^^ __iinnrrtt2333333333DV9  :Waa!^^ ^^ ^^ ^^ ^^ ^^ ^^ aajjoorrttzz#3333333333V9  :W^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aajjoorruuvv#333333333?V9  :W^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aajjoorrttvv}}#333333333mV9  :Wcc<^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aaiinnrrttvvww%33333333:V9  :Wdd*^^ ^^ ^^ ^^ ^^ \\ aaiikkffmmppssuuvv}}.33333333kV9  :Wcc'^^ ^^ ^^ \\ XXUUkkppqqggjjnnqqttuuvv333333339V9  :Woop[[ ^^ [[ WWTTTTUUjjqqqqllfflloorrsstt{{,33333333EV9  :Wpp|;;aTTTTTTTTTTTTTT^^nnmmhhaaggllooqqrrtt!333333333V9  :W77n))HHISS"TTTTTTTTTTTT[[aa^^ ^^ ``ggkknnooppyy233333333DV9  :W--}SS$TTTTTTVVZZ ^^ ^^ ^^ ^^ ^^ __ddiikkmmnn 3333333333V9  :WRR'TTVV[[ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __bbeeffnn333333333?V9  :W::mTTYY^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __  233333333lV9  :W))OO)]] ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ oo+33333339V9  :W{{|jj9^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aa xx ww&3333333kV9  :W{{ ~--xww|bb%^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ccuuvv!vvzz2333339V9  :W|bb%^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ZZnnvv vv ww,33333EV9  :Wz]] ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ [[ __uuvv vv'33333V9  :WeeA]] ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ VVnnvv!vvzz2333CV9  :Wll=^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ YY__uu vv ww-333V9  :Wbb%^^ ^^ ^^ ^^ ^^ ^^ [[ UUnnvv vv239V9  :W}bb%^^ ^^ ^^ ^^ ^^ UU__uu!ggTiiM23dV9  :Wy]] ^^ ^^ ^^ YYSS'll/??19V9  :WeeA]] ^^ ZZz;; |ZZZaV9  :Wdd?]]//XyzZZxV9  :W""i]]yV9  :WxV9  :WuuV9  :WzzV9  :WzV9  :W::vrrV9  :W::tvvV9  :WU8  :WS6 :WO3 :WI.  :WA)  :W7! :W___i+  :Wfff}2   :Whhh7$  :Wppp<'  :W}}}}}}}}}}}}~~~nnn@+ :W~~~{{{yyywwwwwwvvvwwwxxxzzz|||~~~oooC- :WrrrF. :WwwwG/ :WzzzI0 :WJ1 :WL3 :WM4  :WN5   :WO5!  :WP6!  :WQ6!  :WQ6"  :WQ8#  :WR8$  :WR7$  :WS8#  :WS9#  :WR9$  :VU9$  8TT9$ 6QT9% 2K U9%  ,BU9%  $6R7% )$$$M2#  gggC^^^LVVVSPPPYNNN[NNN\MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]NNN\NNN[MMMYPPPV7*  #&())))))))))))))))))))))))))))))))))))))))))))))))('#    ????atomes_1.3.1/metadata/fr.ipcms.atomes.appdata.xml0000664000175000017500000002745015212624223021440 0ustar lerouxleroux fr.ipcms.atomes atomes An atomic scale modeling toolbox Une boite à outils pour la modélisation à l'échelle atomique FSFAP AGPL-3.0-or-later

atomes: a toolbox to analyze, to visualize and to create/edit 3D atomic scale models. The software interface offers a workspace that allows to have many projects opened simultaneously. The different projects in the workspace can exchange data: analysis results, atomic coordinates...

atomes: une boîte à outils pour analyser, visualiser et créer/éditer des modèles 3D à l'échelle atomique. L'interface du logiciel offre un espace de travail qui permet d'avoir plusieurs projets ouvert simultanément. Les différents projets de l'espace de travail peuvent échanger des données: résultats d'analyses, coordonnées atomiques...

atomes also provides an advanced input preparation system for further calculations using well known Molecular Dynamics codes:

atomes propose également un système avancé de préparation de fichiers d'entrée pour des calculs externes avec des codes de Dynamique Moléculaire bien connus:

  • Classical MD: DLPOLY and LAMMPS
  • ab-initio MD: CPMD and CP2K
  • Hybrid MD (QM-MM): CPMD and CP2K
  • DM classique: DLPOLY et LAMMPS
  • DM ab-initio: CPMD et CP2K
  • DM hybride (QM-MM): CPMD et CP2K

To prepare the input files for these calculations is likely to be the key, and most complicated step towards MD simulations. atomes offers a user-friendly assistant to help and guide the scientist step by step to achieve this crucial step.

Préparer les fichiers d'entrée pour ces calculs est généralement le point clef, et l'étape la plus complexe pour réaliser des calculs de DM. atomes propose des assistants à l'interface utilisateur conviviale pour aider et guider le scientifique pas à pas pour réaliser cette étape cruciale.

atomes.desktop A powerful program for 3D atomic scale modeling Overview of the atomes program https://atomes.ipcms.fr/wp-content/uploads/2022/10/atomes-16-9.png Physico-chemical analysis in the atomes program https://atomes.ipcms.fr/wp-content/uploads/2022/10/calc-16-9.png Visualization tools in the atomes program https://atomes.ipcms.fr/wp-content/uploads/2022/10/Ni-Phth-16-9.png https://atomes.ipcms.fr/ https://github.com/Slookeur/atomes/issues/new/choose Dr. Sébastien Le Roux atomes_AT_ipcms.unistra.fr atomes.desktop chemistry physics atom molecule crystal coordination polyhedra measure volume builder material chimie physique atome molécule cristal coordination polyhèdre mesure volume constructeur matériau química física átomo molécula cristal ccoordinación poliedro medida volumen constructor material

Release of version 1.3.1:

- Bug correction, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.3.1

Release of version 1.3.0:

- New features, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.3.0

- Improvements, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.3.0

- Bug correction, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.3.0

Release of version 1.2.1:

- Bug correction, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.2.1

Release of version 1.2.0:

- New features, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.2.0

Release of version 1.1.18:

- Bug corrections, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.18

Release of version 1.1.17:

- Bug corrections, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.17

- Improvements, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.17

Release of version 1.1.16:

- Bug corrections, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.16

Release of version 1.1.15:

- Bug corrections, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.15

- Improvements, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.15

Release of version 1.1.14:

- Bug corrections, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.14

- Improvements, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.14

Release of version 1.1.13:

- Bug corrections, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.13

- Improvements, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.13

Release of version 1.1.12:

- Bug corrections, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.12

- Improvements, see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.12

Release of version 1.1.11:

- Bug corrections: see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.11

Release of version 1.1.10:

- Bug corrections: see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.10

Release of version 1.1.9:

- Bug corrections: see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.9

Release of version 1.1.8:

- Bug corrections: see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.8

Release of version 1.1.7:

- Bug corrections: see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.7

Release of version 1.1.6:

- Bug corrections: see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.6

Release of version 1.1.5:

- Bug correction:

  • w_search.c: selection not to crash if atom_win is closed

Release of version 1.1.4:

- Bug corrections:

  • read_coord.c: Windows to handle properly EOL symbols
  • m_curve.c: Windows to not crash when destroying label widget
  • glview.c: correct GWARNING messages on widget scale

Release of version 1.1.3:

- Bug corrections:

  • read_opengl.c: correct 'read_atom_b'
  • initring.c: correct 'send_rings_opengl_'

Release of version 1.1.2:

- Bug corrections:

  • atom_action.c: recompute bonding on passivate
  • bdcall.c: do not trigger menu init on passivate

Release of version 1.1.1:

- Bug correction:

  • workspace.c: double click on workspace

Initial release of the atomes program v1.1.0 !

atomes_1.3.1/metadata/atomes-mime.xml0000664000175000017500000000504615212624223017231 0ustar lerouxleroux atomes Workspace atomes Project I.S.A.A.C.S. project file XYZ atomic coordinates Protein Data Bank file Protein Data Bank file Crystallographic information CPMD trajectory VASP trajectory Chem3D atomic coordinates DL-POLY History file atomes_1.3.1/CONTRIBUTING.md0000664000175000017500000000164415212624223014743 0ustar lerouxleroux# How to contribute to atomes [atomes][atomes] development relies on voluntary contributions and everyone is invited to help. If your are interested in helping to improve [atomes][atomes] you are welcome to contact the developper(s): [https://atomes.ipcms.fr/about/](https://atomes.ipcms.fr/about/) ## Software development To get started with [atomes][atomes] development give a look to the [DEVELOPER.md](./DEVELOPER.md) file. ## Contributions other than software development There are many possible task: - Translate in your native language - Testing the features, reporting any bugs you find. - Improving the documentation. - Graphics design. - Sharing news and tips about [atomes][atomes] in your native language / local community. - Etc ## Bug tracking: - Bugs should be filled on the GitHub issue tracker: [issue](https://github.com/Slookeur/atomes-GNU/issues) [atomes]:https://atomes.ipcms.fr/ atomes_1.3.1/src/0000775000175000017500000000000015212624223013274 5ustar lerouxlerouxatomes_1.3.1/src/project/0000775000175000017500000000000015212624223014742 5ustar lerouxlerouxatomes_1.3.1/src/project/save_bond.c0000664000175000017500000001072015212624223017046 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file save_bond.c * @short Functions to save bonding information in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'save_bond.c' * * Contains: * - The functions to save bonding information in the atomes project file format * * List of functions: int save_bonding (FILE * fp, project * this_proj); */ #include "global.h" #include "project.h" #include "glview.h" #include "initcoord.h" /*! \fn int save_bonding (FILE * fp, project * this_proj) \brief save bonding information to file \param fp the file pointer \param this_proj the target project */ int save_bonding (FILE * fp, project * this_proj) { int i, j, k; image * img = this_proj -> modelgl -> anim -> last -> img; if (! this_proj -> modelgl -> bonding || ! this_proj -> modelgl -> adv_bonding[1] || this_proj -> natomes > ATOM_LIMIT || this_proj -> steps > STEP_LIMIT) { for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (fwrite (this_proj -> atoms[i][j].coord, sizeof(int), 5, fp) != 5) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (fwrite (& this_proj -> atoms[i][j].numv, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (this_proj -> atoms[i][j].numv) { if (fwrite (this_proj -> atoms[i][j].vois, sizeof(int), this_proj -> atoms[i][j].numv, fp) != this_proj -> atoms[i][j].numv) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); } } if (fwrite (this_proj -> modelgl -> bonds[i], sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); for (j=0; j<2; j++) { for (k=0; k modelgl -> bonds[i][j]; k++) { if (fwrite (this_proj -> modelgl -> bondid[i][j][k], sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); } } } coord_info * coord = this_proj -> coord; for (i=0; i<2; i++) { if (fwrite (coord -> ntg[i], sizeof(int), coord -> species, fp) != coord -> species) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); for (j=0; j species; j++) { if (fwrite (coord -> geolist[i][j], sizeof(int), coord -> ntg[i][j], fp) != coord -> ntg[i][j]) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (i == 1) { for (k=0; k ntg[i][j]; k++) { if (fwrite (coord -> partial_geo[j][k], sizeof(int), coord -> species, fp) != coord -> species) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); } } } } } for (i=0; i<10; i++) { if (fwrite (& this_proj -> coord -> totcoord[i], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (i < 2) { if (fwrite (img -> show_atom[i], sizeof(gboolean), this_proj -> nspec, fp) != this_proj -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (fwrite (img -> show_label[i], sizeof(gboolean), this_proj -> nspec, fp) != this_proj -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); } if (this_proj -> coord -> totcoord[i]) { if (fwrite (img -> show_coord[i], sizeof(gboolean), this_proj -> coord -> totcoord[i], fp) != this_proj -> coord -> totcoord[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (i < 2 || (i > 3 && i < 9)) { if (fwrite (img -> show_poly[i], sizeof(gboolean), this_proj -> coord -> totcoord[i], fp) != this_proj -> coord -> totcoord[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); } } } return OK; } atomes_1.3.1/src/project/close_p.c0000664000175000017500000003450115212624223016535 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file close_p.c * @short Functions to close an atomes project \n Callbacks to close an atomes project * @author Sébastien Le Roux */ /* * This file: 'close_p.c' * * Contains: * - the functions to close an atomes project - the callbacks to close an atomes project * * List of functions: glwin * free_glwin (project * to_close, glwin * to_clow); void update_insert_combos (); void close_project (project * to_close); void to_close_this_project (int to_activate, project * this_proj); G_MODULE_EXPORT void on_close_activate (GtkWidget * widg, gpointer cdata); */ #include "global.h" #include "bind.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" #include "curve.h" #include "glview.h" extern GtkTreeStore * tool_model; extern GtkTreeModel * replace_combo_tree (gboolean insert, int proj); extern G_MODULE_EXPORT void spin_stop (GtkButton * but, gpointer data); extern void clean_animation (project * proj, glwin * view); extern void free_glwin_spec_data (project * this_proj, int spec); /*! \fn void update_insert_combos () \brief update some GtkComboBox in the workspace if a project is removed */ void update_insert_combos () { GtkTreeModel * model; project * this_proj; GtkWidget * box; int i; for (i=0; i modelgl) { if ((this_proj -> modelgl -> atom_win && this_proj -> modelgl -> atom_win -> visible) || this_proj -> modelgl -> builder_win) { model = replace_combo_tree (TRUE, i); box = (this_proj -> modelgl -> builder_win) ? this_proj -> modelgl -> builder_win -> add_combo : this_proj -> modelgl -> atom_win -> atom_combo[3]; gtk_combo_box_set_model (GTK_COMBO_BOX(box), model); combo_set_active (box, 0); combo_set_markup (box); g_object_unref (model); } } } } /*! \fn glwin * free_glwin (project * to_close, glwin * to_clow) \brief free all memory related to a gliwn data structure \param to_close the target project \param to_clow the target gliwn to free */ glwin * free_glwin (project * to_close, glwin * to_clow) { int i, j, k; if (to_clow -> color_to_pick != NULL) { g_free (to_clow -> color_to_pick); to_clow -> color_to_pick = NULL; } #ifdef GTK3 for (i=0; i<2; i++) { g_free (to_clow -> ogl_box_axis[i]); for (j=0; j<10; j++) { if (to_clow -> ogl_geom[i][j]) g_free (to_clow -> ogl_geom[i][j]); if (to_clow -> oglmv[i][j]) g_free (to_clow -> oglmv[i][j]); if (j < 9) { if (to_clow -> ogl_poly[i][j]) g_free (to_clow -> ogl_poly[i][j]); if (to_clow -> oglmc[i][j]) g_free (to_clow -> oglmc[i][j]); } } } #endif for (i=0; i<10; i++) { if (to_clow -> gcid[i]) { for (j=0; j < to_close -> coord -> totcoord[i]; j++) { if (to_clow -> gcid[i][j]) { g_free (to_clow -> gcid[i][j]); } } g_free (to_clow -> gcid[i]); } } for (i=0; i steps; i++) { if (to_clow -> bondid[i]) { for (j=0; j<2; j++) { if (to_clow -> bondid[i][j]) { for (k=0; k bonds[i][j]; k++) { if (to_clow -> bondid[i][j][k]) g_free(to_clow -> bondid[i][j][k]); } g_free(to_clow -> bondid[i][j]); } } g_free(to_clow -> bondid[i]); } if (to_clow -> clones[i]) g_free(to_clow -> clones[i]); } if (to_clow -> bondid) g_free(to_clow -> bondid); if (to_clow -> clones) g_free(to_clow -> clones); free_glwin_spec_data (to_close, to_close -> nspec); if (to_clow -> rep_win) { to_clow -> rep_win -> win = destroy_this_widget (to_clow -> rep_win -> win); g_free (to_clow -> rep_win); } if (to_clow -> gradient_win) { to_clow -> gradient_win -> win = destroy_this_widget (to_clow -> gradient_win -> win); g_free (to_clow -> gradient_win); } if (to_clow -> box_win) { to_clow -> box_win -> win = destroy_this_widget (to_clow -> box_win -> win); g_free (to_clow -> box_win); } if (to_clow -> axis_win) { to_clow -> axis_win -> win = destroy_this_widget (to_clow -> axis_win -> win); g_free (to_clow -> axis_win); } if (to_clow -> measure_win) { to_clow -> measure_win -> win = destroy_this_widget (to_clow -> measure_win -> win); g_free (to_clow -> measure_win); } if (to_clow -> volume_win) { to_clow -> volume_win -> win = destroy_this_widget (to_clow -> volume_win -> win); g_free (to_clow -> volume_win); } if (to_clow -> player) { to_clow -> player -> win = destroy_this_widget (to_clow -> player -> win); g_free (to_clow -> player); } // Stop the spinning if any spin_stop (NULL, to_clow); if (to_clow -> spiner) { to_clow -> spiner -> win = destroy_this_widget (to_clow -> spiner -> win); g_free (to_clow -> spiner); } if (to_clow -> rec) { to_clow -> rec -> win = destroy_this_widget (to_clow -> rec -> win); g_free (to_clow -> rec); } if (to_clow -> atom_win) { to_clow -> atom_win -> win = destroy_this_widget (to_clow -> atom_win -> win); g_free (to_clow -> atom_win); } if (to_clow -> cell_win) { to_clow -> cell_win -> win = destroy_this_widget (to_clow -> cell_win -> win); g_free (to_clow -> cell_win); } if (to_clow -> builder_win) { to_clow -> builder_win -> win = destroy_this_widget (to_clow -> builder_win -> win); g_free (to_clow -> builder_win); } if (to_clow -> coord_win) { to_clow -> coord_win -> win = destroy_this_widget (to_clow -> coord_win -> win); g_free (to_clow -> coord_win); } for (i=0; i<2; i++) { if (to_clow -> model_win[i]) { to_clow -> model_win[i] -> win = destroy_this_widget (to_clow -> model_win[i] -> win); g_free (to_clow -> model_win[i]); } } if (to_clow -> opengl_win) { to_clow -> opengl_win -> win = destroy_this_widget (to_clow -> opengl_win -> win); g_free (to_clow -> opengl_win); } to_clow -> win = destroy_this_widget (to_clow -> win); for (i=0; i ogl_glsl[i]); g_free (to_clow -> n_shaders[i]); } clean_animation (to_close, to_clow); g_free (to_clow); return NULL; } /*! \fn void close_project (project * to_close) \brief close a project \param to_close the project to close */ void close_project (project * to_close) { int i, j, k, l; #ifdef DEBUG g_debug ("CLOSE_PROJECT: proj to close= %d", to_close -> id); g_debug ("CLOSE_PROJECT: nprojects = %d", nprojects); g_debug ("CLOSE_PROJECT: activep = %d", activep); if (to_close -> pixels) { for (i=0; i pix[0]*active_project -> pix[1]*active_project -> pix[2]; i++) { g_free (to_close -> pixels[i]); } g_free (to_close -> pixels); } #endif if (to_close -> modelgl) { to_close -> modelgl = free_glwin (to_close, to_close -> modelgl); if (to_close -> modelfc) { if (to_close -> modelfc -> mols) { for (i=0; i< to_close -> steps; i++) { if (to_close -> modelfc -> mols[i]) { for (j=0; j modelfc -> mol_by_step[i]; j++) { g_free (to_close -> modelfc -> mols[i][j].fragments); g_free (to_close -> modelfc -> mols[i][j].species); } g_free (to_close -> modelfc -> mols[i]); } } g_free (to_close -> modelfc -> mols); } } } if (to_close -> atoms) { for (i=0; i steps; i++) { for (j=0; j natomes; j++) { g_free (to_close -> atoms[i][j].vois); } if (to_close -> atoms[i]) g_free (to_close -> atoms[i]); } g_free (to_close -> atoms); } if (to_close -> cell.box) g_free (to_close -> cell.box); if (to_close -> cell.sp_group) g_free (to_close -> cell.sp_group); if (to_close -> run) { if (to_close -> analysis) { for (i=0 ; i analysis[i]) { to_close -> analysis[i] -> calc_ok = FALSE; if (to_close -> analysis[i] -> name) g_free (to_close -> analysis[i] -> name); if (to_close -> analysis[i] -> x_title) g_free (to_close -> analysis[i] -> x_title); if (to_close -> analysis[i] -> compat_id) g_free (to_close -> analysis[i] -> compat_id); if (to_close -> analysis[i] -> curves) { hide_curves (to_close, i); erase_curves (to_close, i); g_free (to_close -> analysis[i] -> idcc); g_free (to_close -> analysis[i] -> curves); } g_free (to_close -> analysis[i]); } } g_free (to_close -> analysis); } } if (! atomes_render_image) clean_view (); g_free (to_close -> projfile); if (nprojects > 1) { if (to_close == workzone.first) { workzone.first = workzone.first -> next; workzone.first -> prev = NULL; } else if (to_close == workzone.last) { workzone.last = workzone.last -> prev; workzone.last -> next = NULL; } else { to_close -> prev -> next = to_close -> next; to_close -> next -> prev = to_close -> prev; } } else if (! atomes_render_image) { // if (workzone.first) g_free (workzone.first); workzone.first = NULL; // if (workzone.last) g_free (workzone.last); workzone.last = NULL; activep = -1; correct_this_window_title (MainWindow, g_strdup_printf ("%s", PACKAGE)); correct_this_window_title (curvetoolbox, g_strdup_printf (_("Toolboxes"))); if (workspacefile != NULL) { g_free (workspacefile); workspacefile = NULL; } newspace = TRUE; } g_free (to_close); nprojects --; if (nprojects) { project * this_proj = workzone.first; for (i=0 ; i id = i; if (this_proj -> initgl && this_proj -> modelgl) { this_proj -> modelgl -> proj = i; for (j=0; j nspec*2; k++) { this_proj -> modelgl -> colorp[j][k].a = i; } } for (j=0; j<10; j++) { if (this_proj -> modelgl -> gcid[j] != NULL) { for (k=0; k coord -> totcoord[j]; k++) { for (l=0; l modelgl -> gcid[j][k][l].a = i; } } } } if (this_proj -> modelgl -> atom_win) { for (j=0; j<8; j++) { if (this_proj -> modelgl -> search_widg[j]) { for (k=0; k<3; k++) this_proj -> modelgl -> search_widg[j] -> pointer[k].a = i; } } } } if (this_proj -> analysis) { for (j=0; j analysis[j]) { if (this_proj -> analysis[j] -> idcc != NULL) { for (k=0; k analysis[j] -> numc; k++) { this_proj -> analysis[j] -> idcc[k].a = i; } } } } } if (this_proj -> next != NULL) this_proj = this_proj -> next; } this_proj = workzone.first; for (i=0 ; i id = i; if (this_proj -> analysis) { for (j=0; j analysis[j]) { for (k=0; k analysis[j] -> numc; k++) { if (this_proj -> analysis[j] -> curves[k] -> window) { curve_window_add_menu_bar (& this_proj -> analysis[j] -> idcc[k]); if (is_the_widget_visible(this_proj -> analysis[j] -> curves[k] -> plot)) { gtk_widget_queue_draw (this_proj -> analysis[j] -> curves[k] -> plot); } } } } } } if (this_proj -> next != NULL) this_proj = this_proj -> next; } } if (! atomes_render_image) update_insert_combos (); } /*! \fn void to_close_this_project (int to_activate, project * this_proj) \brief to close this project \param to_activate If the workspace is not empty, activate first another project \param this_proj the target project */ void to_close_this_project (int to_activate, project * this_proj) { if (nprojects > 0) close_project (this_proj); if (nprojects > 0) { int new_p = (to_activate >= nprojects) ? nprojects - 1 : to_activate; activate_project (NULL, GINT_TO_POINTER(new_p)); } else if (! atomes_render_image || atomes_from_libreoffice) { remove_edition_and_analyze_actions (); active_project = NULL; fill_tool_model (); } } /*! \fn G_MODULE_EXPORT void on_close_activate (GtkWidget * widg, gpointer cdata) \brief signal to close a project \param widg the GtkWidget sending the signal \param cdata the associated data pointer */ G_MODULE_EXPORT void on_close_activate (GtkWidget * widg, gpointer cdata) { if (nprojects > 0) { int i = GPOINTER_TO_INT(cdata); int j = activep; if (j >= i && j > 0) j--; gtk_tree_store_clear (tool_model); remove_project_from_workspace (i); close_project (get_project_by_id(i)); if (nprojects > 0) { activate_project (NULL, GINT_TO_POINTER(j)); } else { remove_edition_and_analyze_actions (); active_project = NULL; fill_tool_model (); } } else { show_warning (_("No project to be closed"), MainWindow); } } atomes_1.3.1/src/project/read_curve.c0000664000175000017500000003277015212624223017236 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_curve.c * @short Functions to read curve data in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'read_curve.c' * * Contains: * - The functions to read curve data in the atomes project file format * * List of functions: int read_data_layout (FILE * fp, DataLayout * layout); int read_project_curve (FILE * fp, int wid, int pid); */ #include "global.h" #include "project.h" extern gboolean version_2_9_and_above; // Project reading flag, required for project files < v2.9 gboolean reading_project = FALSE; /*! \fn int read_data_layout (FILE * fp, DataLayout * layout) \brief read data layout from file \param fp the file pointer \param layout the data layout to store the data */ int read_data_layout (FILE * fp, DataLayout * layout) { if (fread (& layout -> datacolor, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& layout -> thickness, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& layout -> dash, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& layout -> glyph, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& layout -> gsize, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& layout -> gfreq, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& layout -> hwidth, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& layout -> hopac, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& layout -> hpos, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& layout -> aspect, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); return OK; } /*! \fn int read_project_curve (FILE * fp, int wid, int pid) \brief read a project curve from file \param fp the file pointer \param wid reading workspace (1/0) \param pid the active project id */ int read_project_curve (FILE * fp, int wid, int pid) { int i, j; int rid, cid; if (! version_2_9_and_above && ! reading_project) { if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } project * this_proj = get_project_by_id (pid); if (fread (& rid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& cid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); Curve * this_curve = this_proj -> analysis[rid] -> curves[cid]; if (version_2_9_and_above) { // curve name can be NULL, so do not test for emptyness this_curve -> name = read_this_string (fp); } if (fread (& this_curve -> displayed, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> ndata, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); this_curve -> data[0] = allocdouble (this_curve -> ndata); if (fread (this_curve -> data[0], sizeof(double), this_curve -> ndata, fp) != this_curve -> ndata) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); this_curve -> data[1] = allocdouble (this_curve -> ndata); if (fread (this_curve -> data[1], sizeof(double), this_curve -> ndata, fp) != this_curve -> ndata) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (i) { this_curve -> err = allocdouble (this_curve -> ndata); if (fread (this_curve -> err, sizeof(double), this_curve -> ndata, fp) != this_curve -> ndata) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } if (this_curve -> displayed) { if (fread (this_curve -> wsize, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> cmin, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> cmax, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Title if (fread (& this_curve -> show_title, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> default_title, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (! this_curve -> default_title) { this_curve -> title = read_this_string (fp); if (this_curve -> title == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } if (fread (this_curve -> title_pos, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); this_curve -> title_font = read_this_string (fp); if (this_curve -> title_font == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> title_color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Axis if (fread (this_curve -> axmin, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> axmax, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); for (j=0; j<2; j++) { this_curve -> axis_title[j] = read_this_string (fp); if (this_curve -> axis_title[j] == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); this_curve -> axis_title_font[j] = read_this_string (fp); if (this_curve -> axis_title_font[j] == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } if (fread (this_curve -> axis_title_x, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> axis_title_y, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> scale, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> axis_defaut_title, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> autoscale, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> majt, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> mint, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> ticks_io, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> ticks_pos, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> majt_size, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> mint_size, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> labels_pos, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> labels_digit, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); for (j=0; j<2; j++) { this_curve -> labels_font[j] = read_this_string (fp); if (this_curve -> labels_font[j] == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } if (fread (this_curve -> labels_angle, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> labels_shift_x, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> labels_shift_y, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> show_grid, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> show_axis, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Legend if (fread (& this_curve -> show_legend, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); this_curve -> legend_font = read_this_string (fp); if (this_curve -> legend_font == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> legend_pos, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> legend_color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> show_legend_box, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> legend_box_dash, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> legend_box_thickness, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> legend_box_color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Frame if (fread (& this_curve -> show_frame, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> frame_type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> frame_dash, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> frame_thickness, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> frame_color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (this_curve -> frame_pos, sizeof(this_curve -> frame_pos), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> backcolor, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Data this_curve -> layout = g_malloc0(sizeof*this_curve -> layout); if (read_data_layout (fp, this_curve -> layout) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_CURVE; } if (fread (& this_curve -> draw_id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& this_curve -> bshift, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); this_curve -> extrac = g_malloc0(sizeof*this_curve -> extrac); if (fread (& this_curve -> extrac -> extras, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (this_curve -> extrac -> extras > 0) { this_curve -> extrac -> first = g_malloc0(sizeof*this_curve -> extrac -> first); this_curve -> extrac -> last = g_malloc0(sizeof*this_curve -> extrac -> last); CurveExtra * ctmp = this_curve -> extrac -> first; for (i=0; i extrac -> extras; i++) { if (fread (& ctmp -> id.a, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (! wid) ctmp -> id.a += (nprojects - 1); if (fread (& ctmp -> id.b, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fread (& ctmp -> id.c, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); ctmp -> layout = g_malloc0(sizeof*ctmp -> layout); if (read_data_layout (fp, ctmp -> layout) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_CURVE; } if (i < this_curve -> extrac -> extras - 1) { ctmp -> next = g_malloc0(sizeof*ctmp -> next); ctmp -> next -> prev = ctmp; ctmp = ctmp -> next; } else if (i == this_curve -> extrac -> extras - 1) { this_curve -> extrac -> last = ctmp; } } } this_curve -> cfile = read_this_string (fp); } #ifdef DEBUG // debugiocurve (this_proj, FALSE, rid, cid, "READ"); #endif return OK; } atomes_1.3.1/src/project/save_mol.c0000664000175000017500000001342315212624223016716 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file save_mol.c * @short Functions to save molecules information in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'save_mol.c' * * Contains: * - The functions to save molecules information in the atomes project file format * * List of functions: int save_atom_m (FILE * fp, project * this_proj, int s, int a); int save_this_mol (FILE * fp, project * this_proj, molecule * tmp); int save_mol (FILE * fp, project * this_proj); */ #include "global.h" #include "project.h" /*molecule { int id; // Molecule id number int md; // MD step int multiplicity; // Multiplicity int * fragments; // Fragments list int natoms; // Number of atoms int nspec; // Number of chemical species int * species; // Number of atom by species atom ** atoms; // The list of all atoms int nbonds; // Number of chemical bonds int ** pbonds; // Number of chemical bonds by geometries int nangles; // Number of bond angles int *** pangles; // Number of bond angles by geometries int ** lgeo; // list of coordination spheres (by species) molecule * next; molecule * prev; };*/ /*! \fn int save_atom_m (FILE * fp, project * this_proj, int s, int a) \brief save atom data to file \param fp the file pointer \param this_proj the target project \param s the MD step \param a the atom number */ int save_atom_m (FILE * fp, project * this_proj, int s, int a) { if (fwrite (& this_proj -> atoms[s][a].coord[2], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, signal_error (__FILE__, __func__, __LINE__, ERROR_MOL)); if (fwrite (& this_proj -> atoms[s][a].coord[3], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, signal_error (__FILE__, __func__, __LINE__, ERROR_MOL)); return OK; } /*! \fn int save_this_mol (FILE * fp, project * this_proj, molecule * tmp) \brief save this molecule data to file \param fp the file pointer \param this_proj the target project \param tmp the molecule that contains the data */ int save_this_mol (FILE * fp, project * this_proj, molecule * tmp) { if (fwrite (& tmp -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, signal_error (__FILE__, __func__, __LINE__, ERROR_MOL)); if (fwrite (& tmp -> md, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, signal_error (__FILE__, __func__, __LINE__, ERROR_MOL));; if (fwrite (& tmp -> multiplicity, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, signal_error (__FILE__, __func__, __LINE__, ERROR_MOL)); if (fwrite (tmp -> fragments, sizeof(int), tmp -> multiplicity, fp) != tmp -> multiplicity) return signal_error (__FILE__, __func__, __LINE__, signal_error (__FILE__, __func__, __LINE__, ERROR_MOL)); if (fwrite (& tmp -> natoms, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, signal_error (__FILE__, __func__, __LINE__, ERROR_MOL)); if (fwrite (& tmp -> nspec, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, signal_error (__FILE__, __func__, __LINE__, ERROR_MOL)); if (fwrite (tmp -> species, sizeof(int), this_proj -> nspec, fp) != this_proj -> nspec) return signal_error (__FILE__, __func__, __LINE__, signal_error (__FILE__, __func__, __LINE__, ERROR_MOL)); return OK; } /*! \fn int save_mol (FILE * fp, project * this_proj) \brief save molecule information to file \param fp the file pointer \param this_proj the target project */ int save_mol (FILE * fp, project * this_proj) { int i, j; i = 0; if (! this_proj -> modelfc) { if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); return OK; } i = 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); for (i=1; i<4; i++) { if (fwrite (& this_proj -> coord -> totcoord[i], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); } if (fwrite (this_proj -> modelfc -> mol_by_step, sizeof(int), this_proj -> steps, fp) != this_proj -> steps) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); for (i=0; i steps; i++) { for (j=0; j modelfc -> mol_by_step[i]; j++) { if (save_this_mol (fp, this_proj, & this_proj -> modelfc -> mols[i][j]) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_MOL; } } } for (i=0; i steps; i++) { for (j=0; j< this_proj -> natomes; j++) { if (save_atom_m (fp, this_proj, i, j) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_MOL; } } } return OK; } atomes_1.3.1/src/project/save_field.c0000664000175000017500000005760615212624223017225 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file save_field.c * @short Functions to save force field information in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'save_field.c' * * Contains: * - The functions to save force field information in the atomes project file format * * List of functions: int save_field_atom (FILE * fp); int save_field_shell (FILE * fp); int save_field_constraint (FILE * fp); int save_field_pmf (FILE * fp); int save_field_rigid (FILE * fp); int save_field_tethered (FILE * fp, int fid); int save_field_prop (FILE * fp, int fid, int pid); int save_field_struct (FILE * fp, int fid); int save_field_molecule (FILE * fp, int fid); int save_field_body (FILE * fp, int fid); int save_field_external (FILE * fp, int fid); int save_dlp_field_data (FILE * fp, project * this_proj); int save_lmp_field_data (FILE * fp, project * this_proj); */ #include "global.h" #include "project.h" #include "dlp_field.h" /* typedef struct field field struct field { gboolean prepare_file[2]; // Field and Config files gboolean afp[MAXDATC+MAXDATA]; int type; int energy_unit; int atom_init; int molecules; field_molecule * first_molecule; int nbody[5]; field_nth_body * first_body[5]; // Tersoff potential cross terms double ** cross; int extern_fields; field_external * first_external; // Control file double sys_opts[17]; double io_opts[23]; double ana_opts[17]; double elec_opts[11]; double vdw_opts[6]; double met_opts[2]; double equi_opts[17]; int ensemble; int thermostat; double thermo_opts[10]; double md_opts[20]; double out_opts[31]; }; */ /*! \fn int save_field_atom (FILE * fp) \brief save field atom data to file \param fp the file pointer */ int save_field_atom (FILE * fp) { if (fwrite (& tmp_fat -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fat -> fid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fat -> afid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fat -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (save_this_string (fp, tmp_fat -> name) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fat -> num, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fat -> sp, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fat -> mass, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fat -> charge, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fat -> frozen, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fat -> frozen_id, sizeof(gboolean), tmp_fat -> num, fp) != tmp_fat -> num) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fat -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fat -> list, sizeof(int), tmp_fat -> num, fp) != tmp_fat -> num) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fat -> list_id, sizeof(int), tmp_fat -> num, fp) != tmp_fat -> num) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int save_field_shell (FILE * fp) \brief save field core shell data to file \param fp the file pointer */ int save_field_shell (FILE * fp) { if (fwrite (& tmp_fshell -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fshell -> ia, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fshell -> m, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fshell -> z, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fshell -> k2, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fshell -> k4, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fshell -> vdw, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fshell -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fshell -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int save_field_constraint (FILE * fp) \brief save field constraint data to file \param fp the file pointer */ int save_field_constraint (FILE * fp) { if (fwrite (& tmp_fcons -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fcons -> ia, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fcons -> av, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fcons -> length, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fcons -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fcons -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int save_field_pmf (FILE * fp) \brief save field mean force potential data to file \param fp the file pointer */ int save_field_pmf (FILE * fp) { if (fwrite (& tmp_fpmf -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fpmf -> av, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fpmf -> length, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fpmf -> num, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i; for (i=0; i<2; i++) { if (fwrite (tmp_fpmf -> list[i], sizeof(int), tmp_fpmf -> num[i], fp) != tmp_fpmf -> num[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fpmf -> weight[i], sizeof(float), tmp_fpmf -> num[i], fp) != tmp_fpmf -> num[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); } if (fwrite (& tmp_fpmf -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fpmf -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int save_field_rigid (FILE * fp) \brief save field rigid constraints data to file \param fp the file pointer */ int save_field_rigid (FILE * fp) { if (fwrite (& tmp_frig -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_frig -> num, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_frig -> list, sizeof(int), tmp_frig -> num, fp) != tmp_frig -> num) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_frig -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_frig -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int save_field_tethered (FILE * fp, int fid) \brief save field tethered data to file \param fp the file pointer \param fid */ int save_field_tethered (FILE * fp, int fid) { if (fwrite (& tmp_ftet -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_ftet -> num, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_ftet -> key, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i = fvalues[fid][0][tmp_ftet -> key]; if (fwrite (tmp_ftet -> val, sizeof(float), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_ftet -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_ftet -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int save_field_prop (FILE * fp, int fid, int pid) \brief save field property data to file \param fp the file pointer \param fid the field id \param pid the property id */ int save_field_prop (FILE * fp, int fid, int pid) { if (fwrite (& tmp_fprop -> pid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fprop -> fpid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fprop -> key, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i = struct_id(pid+7); if (fwrite (tmp_fprop -> aid, sizeof(int), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); i = fvalues[fid][pid+1][tmp_fprop -> key]; if (fwrite (tmp_fprop -> val, sizeof(float), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fprop -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fprop -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int save_field_struct (FILE * fp, int fid) \brief save field structural properties to file \param fp the file pointer \param fid the field id */ int save_field_struct (FILE * fp, int fid) { if (fwrite (& tmp_fstr -> st, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fstr -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fstr -> num, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i = struct_id(tmp_fstr -> st + 7); if (fwrite (tmp_fstr -> aid, sizeof(int), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fstr-> av, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fprop = tmp_fstr -> def; if (save_field_prop(fp, fid, tmp_fstr -> st) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fprop = tmp_fstr -> other; i = 0; while (tmp_fprop) { i ++; tmp_fprop = tmp_fprop -> next; } if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (tmp_fstr -> other) { tmp_fprop = tmp_fstr -> other; while (tmp_fprop) { if (save_field_prop(fp, fid, tmp_fstr -> st) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fprop = tmp_fprop -> next; } } return OK; } /*! \fn int save_field_molecule (FILE * fp, int fid) \brief save field molecule data to file \param fp the file pointer \param fid the field id */ int save_field_molecule (FILE * fp, int fid) { if (fwrite (& tmp_fmol -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fmol -> mol -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (save_this_string (fp, tmp_fmol -> name) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fmol -> multi, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fmol -> fragments, sizeof(int), tmp_fmol -> multi, fp) != tmp_fmol -> multi) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i; for (i=0; i mol -> natoms; i++) { if (fwrite (tmp_fmol -> atoms_id[i], sizeof(dint), tmp_fmol -> multi, fp) != tmp_fmol -> multi) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); } if (fwrite (& tmp_fmol -> atoms, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { if (save_field_atom(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fat = tmp_fat -> next; } if (fwrite (& tmp_fmol -> shells, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fshell = tmp_fmol -> first_shell; while (tmp_fshell) { if (save_field_shell(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fshell = tmp_fshell -> next; } if (fwrite (& tmp_fmol -> constraints, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fcons = tmp_fmol -> first_constraint; while (tmp_fcons) { if (save_field_constraint(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fcons = tmp_fcons -> next; } if (fwrite (& tmp_fmol -> pmfs, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fpmf = tmp_fmol -> first_pmf; while (tmp_fpmf) { if (save_field_pmf(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fpmf = tmp_fpmf -> next; } if (fwrite (& tmp_fmol -> rigids, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_frig = tmp_fmol -> first_rigid; while (tmp_frig) { if (save_field_rigid(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_frig = tmp_frig -> next; } if (fwrite (& tmp_fmol -> tethered, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_ftet = tmp_fmol -> first_tethered; while (tmp_ftet) { if (save_field_tethered(fp, fid) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_ftet = tmp_ftet -> next; } if (fwrite (tmp_fmol -> nstruct, sizeof(int), 8, fp) != 8) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); for (i=0; i<8; i++) { tmp_fstr = tmp_fmol -> first_struct[i]; while (tmp_fstr) { if (save_field_struct (fp, fid) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fstr = tmp_fstr -> next; } } return OK; } /*! \fn int save_field_body (FILE * fp, int fid) \brief save field nth body data to file \param fp the file pointer \param fid the field id */ int save_field_body (FILE * fp, int fid) { if (fwrite (& tmp_fbody -> bd, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fbody -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fbody -> key, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (tmp_fbody -> bd == 0) if (fwrite (tmp_fbody -> fpid, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fbody -> na, sizeof(int), body_at(tmp_fbody -> bd), fp) != body_at(tmp_fbody -> bd)) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i; for (i=0; i bd); i++) { if (fwrite (tmp_fbody -> ma[i], sizeof(int), tmp_fbody -> na[i], fp) != tmp_fbody -> na[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (tmp_fbody -> a[i], sizeof(int), tmp_fbody -> na[i], fp) != tmp_fbody -> na[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); } i = fvalues[fid][9+tmp_fbody -> bd][tmp_fbody -> key]; if (fwrite (tmp_fbody -> val, sizeof(float), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fbody -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fbody -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int save_field_external (FILE * fp, int fid) \brief save field external data to file \param fp the file pointer \param fid the field id */ int save_field_external (FILE * fp, int fid) { if (fwrite (& tmp_fext -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fext -> key, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i = fvalues[fid][14][tmp_fext -> key]; if (fwrite (tmp_fext -> val, sizeof(float), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& tmp_fext -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int save_dlp_field_data (FILE * fp, project * this_proj) \brief save force field data to file \param fp the file pointer \param this_proj the target project */ int save_dlp_field_data (FILE * fp, project * this_proj) { int i, j; if (this_proj -> force_field[0] == NULL) { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } i = 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); // CONTROL file if (fwrite (this_proj -> force_field[0] -> sys_opts, sizeof(double), 17, fp) != 17) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> io_opts, sizeof(double), 23, fp) != 23) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> ana_opts, sizeof(double), 17, fp) != 17) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> elec_opts, sizeof(double), 11, fp) != 11) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> vdw_opts, sizeof(double), 6, fp) != 6) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> met_opts, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> equi_opts, sizeof(double), 17, fp) != 17) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& this_proj -> force_field[0] -> ensemble, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& this_proj -> force_field[0] -> thermostat, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> thermo_opts, sizeof(double), 10, fp) != 10) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> md_opts, sizeof(double), 20, fp) != 20) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> out_opts, sizeof(double), 31, fp) != 31) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); // FIELD file if (fwrite (this_proj -> force_field[0] -> prepare_file, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (this_proj -> force_field[0] -> afp, sizeof(gboolean), MAXDATC+MAXDATA, fp) != MAXDATC+MAXDATA) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& this_proj -> force_field[0] -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& this_proj -> force_field[0] -> energy_unit, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& this_proj -> force_field[0] -> atom_init, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fwrite (& this_proj -> force_field[0] -> molecules, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (! this_proj -> force_field[0] -> molecules) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fmol = this_proj -> force_field[0] -> first_molecule; while (tmp_fmol) { if (save_field_molecule (fp, 0) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fmol = tmp_fmol -> next; } if (fwrite (this_proj -> force_field[0] -> nbody, sizeof(int), 5, fp) != 5) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); for (i=0; i<5; i++) { if (this_proj -> force_field[0] -> nbody[i]) { tmp_fbody = this_proj -> force_field[0] -> first_body[i]; while (tmp_fbody) { if (save_field_body (fp, 0) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fbody = tmp_fbody -> next; } } } // Tersoff potential cross terms i = (this_proj -> force_field[0] -> cross) ? 1 : 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (this_proj -> force_field[0] -> cross) { i = this_proj -> force_field[0] -> nbody[2] * (this_proj -> force_field[0] -> nbody[2] - 1) / 2; for (j=0; j force_field[0] -> cross[j], sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); } } if (fwrite (& this_proj -> force_field[0] -> extern_fields, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fext = this_proj -> force_field[0] -> first_external; while (tmp_fext) { if (save_field_external(fp, 0) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } tmp_fext = tmp_fext -> next; } return OK; } /*! \fn int save_lmp_field_data (FILE * fp, project * this_proj) \brief save LAMMPS force field data to file \param fp the file pointer \param this_proj the target project */ int save_lmp_field_data (FILE * fp, project * this_proj) { int i; if (this_proj -> force_field[1] == NULL) { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } return OK; } atomes_1.3.1/src/project/read_mol.c0000664000175000017500000001331715212624223016675 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_mol.c * @short Functions to read molecule(s) data in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'read_mol.c' * * Contains: * - The functions to read molecule(s) data in the atomes project file format * * List of functions: int read_atom_m (FILE * fp, int s, int a); int read_this_mol (FILE * fp, molecule * tmp); int read_mol (FILE * fp); */ #include "global.h" #include "project.h" #include "initcoord.h" #include "submenus.h" extern void duplicate_molecule (molecule * new_mol, molecule * old_mol); /*! \fn int read_atom_m (FILE * fp, int s, int a) \brief read atom fragment and molecule data \param fp the file pointer \param s the MD step \param a the atom number */ int read_atom_m (FILE * fp, int s, int a) { if (fread (& active_project -> atoms[s][a].coord[2], sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& active_project -> atoms[s][a].coord[3], sizeof(int), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int read_this_mol (FILE * fp, molecule * tmp) \brief read molecule data \param fp the file pointer \param tmp the molecule to store the data */ int read_this_mol (FILE * fp, molecule * tmp) { if (fread (& tmp -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); if (fread (& tmp -> md, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); if (fread (& tmp -> multiplicity, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); if (! tmp -> multiplicity) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); tmp -> fragments = allocint (tmp -> multiplicity); if (fread (tmp -> fragments, sizeof(int), tmp -> multiplicity, fp) != tmp -> multiplicity) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); if (fread (& tmp -> natoms, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); if (fread (& tmp -> nspec, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); tmp -> species = allocint (active_project -> nspec); if (fread (tmp -> species, sizeof(int), active_project -> nspec, fp) != active_project -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); return OK; } /*! \fn int read_mol (FILE * fp) \brief read molecule(s) information from file \param fp the file pointer */ int read_mol (FILE * fp) { int i, j; if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); if (! i) return OK; active_project -> modelfc = g_malloc0(sizeof*active_project -> modelfc); for (i=1; i<4; i++) { if (fread (& j, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); if (i == 1 && j != active_coord -> totcoord[1]) return signal_error (__FILE__, __func__, __LINE__, ERROR_MOL); if (i > 1) active_coord -> totcoord[i] = j; } active_project -> modelfc -> mol_by_step = allocint (active_project -> steps); if (fread (active_project -> modelfc -> mol_by_step, sizeof(int), active_project -> steps, fp) != active_project -> steps) return ERROR_MOL; active_project -> modelfc -> mols = g_malloc0(active_project -> steps*sizeof*active_project -> modelfc -> mols); for (i=0; i steps; i++) { active_project -> modelfc -> mols[i] = g_malloc0(active_project -> modelfc -> mol_by_step[i]*sizeof*active_project -> modelfc -> mols[i]); } molecule * tmp = g_malloc0(sizeof*tmp); for (i=0; i steps; i++) { for (j=0; j modelfc -> mol_by_step[i]; j++) { if (read_this_mol(fp, & active_project -> modelfc -> mols[i][j]) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_MOL; } } } for (i=0; i steps; i++) { for (j=0; j< active_project -> natomes; j++) { if (read_atom_m (fp, i, j) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_MOL; } } } #ifdef GTK3 // Now recreate menus for (i=2; i<4; i++) { init_opengl_coords (i, active_coord -> totcoord[i], 1); init_menu_fragmol_ (& i); active_glwin -> adv_bonding[i-2] = TRUE; for (j=2; j<4; j++) { detach_frag_mol_menu (active_glwin, i, j); } active_glwin -> ogl_coord[i+1] = destroy_this_widget (active_glwin -> ogl_coord[i+1]); if (i == 2) active_glwin -> ogl_coord[3] = menu_item_new_with_submenu (_("Fragment(s)"), active_project -> coord -> totcoord[2], add_menu_coord (active_glwin, 0, 2)); if (i == 3) active_glwin -> ogl_coord[4] = menu_item_new_with_submenu (_("Molecule(s)"), active_project -> coord -> totcoord[2], add_menu_coord (active_glwin, 0, 3)); GtkWidget * cmenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (active_glwin -> ogl_coord[0])); gtk_menu_shell_insert (GTK_MENU_SHELL(cmenu), active_glwin -> ogl_coord[i+1], i+2); } #endif return OK; } atomes_1.3.1/src/project/readers/0000775000175000017500000000000015212624223016367 5ustar lerouxlerouxatomes_1.3.1/src/project/readers/read_hist.c0000664000175000017500000003253515212624223020505 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_hist.c * @short Functions to read DL-POLY history file * @author Sébastien Le Roux */ /* * This file: 'read_hist.c' * * Contains: * - The functions to read DL-POLY history file * * List of functions: int hist_get_data (int linec); int hist_get_content (); int open_hist_file (int linec); */ #include "global.h" #include "bind.h" #include "interface.h" #include "project.h" #include #include "cbuild_edit.h" #include "readers.h" #ifdef OPENMP # include #endif extern void check_for_species (double v, int ato); /*! \fn int hist_get_data (int linec) \brief read data from the DL-POLY history file \param linec Total number of lines */ int hist_get_data (int linec) { int i; if (linec < 7) return 0; #ifdef OPENMP this_line = g_strdup_printf ("%s", coord_line[1]); #else line_node * tmp_line; tail = head; tmp_line = tail; tail = tail -> next; g_free (tmp_line); this_line = g_strdup_printf ("%s", tail -> line); #endif // OPENMP this_word = strtok (this_line, " "); this_reader -> traj = (int)string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { add_reader_info (_("Wrong file format - record ii line is corrupted !"), 0); return 0; } this_reader -> lattice.pbc = (int)string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { add_reader_info (_("Wrong file format - record ii line is corrupted !"), 0); return 0; } this_reader -> natomes = (int)string_to_double ((gpointer)this_word); i = linec - 2; if (i%(4 + (2+this_reader -> traj)*this_reader -> natomes)) return 0; this_reader -> steps = i/(4 + (2+this_reader -> traj)*this_reader -> natomes); return 1; } /*! \fn int hist_get_content () \brief read the content of the DL-POLY history file */ int hist_get_content () { gchar * lil[3] = {"ii", "iii", "iv"}; int i, j, k, l; double v; this_reader -> nspec = 0; active_project -> steps = this_reader -> steps; active_project -> natomes = this_reader -> natomes; allocatoms (active_project); this_reader -> z = allocdouble (1); this_reader -> nsps = allocint (1); this_reader -> lattice.box = g_malloc0(this_reader -> steps*sizeof*this_reader -> lattice.box); int res = 1; #ifdef OPENMP int numth = omp_get_max_threads (); gboolean doatoms = FALSE; gchar * saved_line; if (this_reader -> steps < numth) { if (numth >= 2*(this_reader -> steps-1)) { doatoms = TRUE; } else { numth = this_reader -> steps; } } if (doatoms) { // OpenMP on atoms for (i=0; i steps; i++) { k = 3 + i*(this_reader -> natomes*(2+this_reader -> traj) + 4); for (j=0; j<3; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); for (l=0; l<3; l++) { if (! this_word) { format_error (i+1, -1, lil[l], k+j); return 0; } this_reader -> lattice.box[i].vect[j][l] = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); } } k += 3; #pragma omp parallel for num_threads(numth) private(j,l,v,this_line,saved_line,this_word) shared(i,k,lil,coord_line,this_reader,active_project,res) for (j=0; j natomes; j++) { if (res == 2) goto enda; this_line = g_strdup_printf ("%s", coord_line[k+j*(2+this_reader -> traj)]); this_word = strtok_r (this_line, " ", & saved_line); for (l=0; l<3; l++) { if (! this_word) { format_error (i+1, j+1, lil[l], k+j*(2+this_reader -> traj)); res = 0; goto enda; } if (l < 2) this_word = strtok_r (NULL, " ", & saved_line); } v = string_to_double ((gpointer)this_word); if (v > 0.0) { if (! i) { #pragma omp critical check_for_species (v, j); } g_free (this_line); this_line = g_strdup_printf ("%s", coord_line[k+j*(2+this_reader -> traj)+1]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lil[0], k+j*(2+this_reader -> traj)); res = 0; goto enda; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lil[1], k+j*(2+this_reader -> traj)); res = 0; goto enda; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lil[2], k+j*(2+this_reader -> traj)); res = 0; goto enda; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); } else { format_error (i+1, j+1, lil[2], k+j*(2+this_reader -> traj)); res = 0; goto enda; } g_free (this_line); enda:; } if (res == 0) break; } } else { // OpenMP on MD steps #pragma omp parallel for num_threads(numth) private(i,j,k,l,v,this_line,saved_line,this_word) shared(lil,coord_line,this_reader,active_project,res) for (i=0; i steps; i++) { if (! res) goto ends; k = 3 + i*(this_reader -> natomes*(2+this_reader -> traj)+4); for (j=0; j<3; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); for (l=0; l<3; l++) { if (! this_word) { format_error (i+1, -1, lil[l], k+j); res = 0; goto ends; } this_reader -> lattice.box[i].vect[j][l] = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); } } k += 3; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j*(2+this_reader -> traj)]); this_word = strtok_r (this_line, " ", & saved_line); for (l=0; l<3; l++) { if (! this_word) { format_error (i+1, j+1, lil[l], k+j*(2+this_reader -> traj)); res = 0; goto ends; } if (l < 2) this_word = strtok_r (NULL, " ", & saved_line); } v = string_to_double ((gpointer)this_word); if (v > 0.0) { if (! i) check_for_species (v, j); g_free (this_line); this_line = g_strdup_printf ("%s", coord_line[k+j*(2+this_reader -> traj)+1]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lil[0], k+j*(2+this_reader -> traj)+1); res = 0; goto ends; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lil[1], k+j*(2+this_reader -> traj)+1); res = 0; goto ends; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lil[2], k+j*(2+this_reader -> traj)+1); res = 0; goto ends; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); } else { format_error (i+1, j+1, lil[2], k+j*(2+this_reader -> traj)); res = 0; goto ends; } g_free (this_line); } ends:; } } #else line_node * tmp_line; tmp_line = tail; tail = tail -> next; g_free (tmp_line); for (i=0; i steps; i++) { tmp_line = tail; tail = tail -> next; g_free (tmp_line); k = 3 + i*(this_reader -> natomes*(2+this_reader -> traj) + 4); for (j=0; j<3; j++) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); for (l=0; l<3; l++) { if (! this_word) { format_error (i+1, -1, lil[l], k+j); return 0; } this_reader -> lattice.box[i].vect[j][l] = string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); } tmp_line = tail; tail = tail -> next; g_free (tmp_line); } k += 3; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); for (l=0; l<3; l++) { if (! this_word) { format_error (i+1, j+1, lil[l], k+2*j); return 0; } if (l < 2) this_word = strtok (NULL, " "); } v = string_to_double ((gpointer)this_word); if (v > 0.0) { if (! i) check_for_species (v, j); tmp_line = tail; tail = tail -> next; g_free (tmp_line); this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); if (! this_word) { format_error (i+1, j+1, lil[0], k+2*j+1); return 0; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lil[1], k+2*j+1); return 0; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lil[2], k+2*j+1); return 0; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); } else { format_error (i+1, j+1, lil[l], k+2*j+1); return 0; } tmp_line = tail; tail = tail -> next; g_free (tmp_line); } } #endif if (! res) return res; gboolean add_spec; for (i=0; i nspec; i++) { add_spec = FALSE; for (j=1; j<120; j++) { if (fabs(periodic_table_info[j].M - this_reader -> z[i]) < 0.1) { this_reader -> z[i] = (float)j; add_spec = TRUE; break; } } if (! add_spec) { gchar * str = g_strdup_printf (_("Cannot find species with a mass of %f !"), this_reader -> z[i]); add_reader_info (str, 0); g_free (str); return 0; } } for (i=1; i steps; i++) { for (j=0; j natomes; j++) { active_project -> atoms[i][j].sp = active_project -> atoms[0][j].sp; } } this_reader -> lattice.npt = FALSE; for (i=1; i steps; i++) { for (j=0; j<3; j++) { for (k=0; k<3; k++) { if (this_reader -> lattice.box[i].vect[j][k] != this_reader -> lattice.box[0].vect[j][k]) { this_reader -> lattice.npt = TRUE; break; } } if (this_reader -> lattice.npt) break; } if (this_reader -> lattice.npt) break; } return 1; } /*! \fn int open_hist_file (int linec) \brief open DL-POLY history file \param linec Number of lines in the file */ int open_hist_file (int linec) { int res; int i, j, k, l; if (hist_get_data(linec)) { reader_info ("hist", _("Number of atoms"), this_reader -> natomes); reader_info ("hist", _("Number of steps"), this_reader -> steps); if (hist_get_content()) { active_cell -> ltype = 2; active_cell -> pbc = this_reader -> lattice.pbc; active_cell -> npt = this_reader -> lattice.npt; i = (active_cell -> npt) ? this_reader -> steps : 1; if (active_cell -> npt) { g_free (active_cell -> box); active_cell -> box = g_malloc0(i*sizeof*active_cell -> box); active_box = & active_cell -> box[0]; } for (j=0; j box[j].vect[k][l] = this_reader -> lattice.box[j].vect[k][l]; } } } active_cell -> has_a_box = TRUE; active_cell -> crystal = FALSE; res = 0; } else { // Content error res = 2; } } else { // Data error res = 2; } return res; } atomes_1.3.1/src/project/readers/read_pdb.c0000664000175000017500000001371015212624223020275 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_pdb.c * @short Functions to read PDB files * @author Sébastien Le Roux */ /* * This file: 'read_pdb.c' * * Contains: * - The functions to read PDB files * * List of functions: int pdb_get_atoms_data (int linec); int open_pdb_file (int linec); double get_z_from_pdb_name (char * name); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "bind.h" #include "readers.h" #include #ifdef OPENMP # include #endif /*! \fn double get_z_from_pdb_name (char * name) \brief get Z from the PDB atom string \param name the string from the PDB file */ double get_z_from_pdb_name (char * name) { if (strlen(name) == 2) name[1] = tolower ((unsigned char)name[1]); return get_z_from_periodic_table (name); } /*! \fn int pdb_get_atoms_data (int linec) \brief get the atomic data from the PDB file \param linec Total number of lines */ int pdb_get_atoms_data (int linec) { typedef struct pdb_atom pdb_atom; struct pdb_atom { int id; int sp; double nz; double x, y, z; pdb_atom * prev; pdb_atom * next; }; #ifdef OPENMP int h, i, j, k, l; int res; int numth = omp_get_max_threads (); pdb_atom ** first_at = g_malloc0(numth*sizeof*first_at); pdb_atom * other_at = NULL; gchar * saved_line; gboolean add_spec; h = 0; res = 1; #pragma omp parallel for num_threads(numth) private(i,j,k,l,this_line,saved_line,this_word,other_at,add_spec) shared(h,this_reader,res,coord_line,first_at) for (i=0; i next = g_malloc0(sizeof*other_at -> next); other_at -> prev = g_malloc0(sizeof*other_at -> prev); other_at -> next -> prev = other_at; other_at = other_at -> next; } for (k=0; k<13; k++) { this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { add_reader_info (g_strdup_printf (_("Wrong file format - record %d on line %d is corrupted !"), k+2, i+1), 0); res = 0; goto ends; } if (k == 8) other_at -> x = string_to_double ((gpointer)this_word); if (k == 9) other_at -> y = string_to_double ((gpointer)this_word); if (k == 10) other_at -> z = string_to_double ((gpointer)this_word); if (k == 12) { other_at -> nz = get_z_from_pdb_name (this_word); add_spec = TRUE; #pragma omp critical if (other_at -> nz) { if (this_reader -> z) { for (l=0; l nspec; l++) { if (active_chem -> chem_prop[CHEM_Z][l] == other_at -> nz) { other_at -> sp = l; if (! i) this_reader -> nsps[l] ++; add_spec = FALSE; break; } } } else { this_reader -> z = allocdouble (1); this_reader -> nsps = allocint (1); } if (add_spec) { if (this_reader -> nspec) { this_reader -> z = g_realloc (this_reader -> z, (this_reader -> nspec+1)*sizeof*this_reader -> z); this_reader -> nsps = g_realloc (this_reader -> nsps, (this_reader -> nspec+1)*sizeof*this_reader -> nsps); } other_at -> sp = this_reader -> nspec; this_reader -> nsps[this_reader -> nspec] ++; this_reader -> nspec ++; } } } } } } ends:; } if (! res) { g_free (first_at); g_free (other_at); return 0; } active_project -> natomes = h; active_project -> steps = 1; active_project -> nspec = this_reader -> nspec; if (active_project -> natomes) return 0; alloc_proj_data (active_project, 1); active_project_changed (activep); j = 0; for (i=0; i atoms[0][j].id = j; active_project -> atoms[0][j].sp = other_at -> sp; active_project -> atoms[0][j].x = other_at -> x; active_project -> atoms[0][j].y = other_at -> y; active_project -> atoms[0][j].z = other_at -> z; j ++; other_at = other_at -> next; g_free (other_at -> prev); } // Get back results } #else #endif return active_project -> natomes; } /*! \fn int open_pdb_file (int linec) \brief open PDB file \param linec Number of lines in the file */ int open_pdb_file (int linec) { if (! pdb_get_atoms_data (linec)) return 2; return 0; } atomes_1.3.1/src/project/readers/readers.h0000664000175000017500000000321115212624223020162 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file readers.h * @short Functions declaration to read atomic coordinates * @author Sébastien Le Roux */ /* * This header file: 'readers.h' * * Contains: - Functions declaration to read atomic coordinates */ #ifndef READERS_H_ #define READERS_H_ #include "read_isaacs.h" extern int set_v_dummy (gchar * this_word); extern double get_z_from_periodic_table (gchar * lab); extern void allocatoms (project * this_proj); extern chemical_data * alloc_chem_data (int spec); extern FILE * coordf; extern coord_file * this_reader; extern gchar * this_line; extern char * this_word; extern gchar ** coord_line; extern line_node * head; extern line_node * tail; extern void add_reader_info (gchar * info, int mid); extern void reader_info (gchar * type, gchar * sinf, int val); extern void format_error (int stp, int ato, gchar * mot, int line); extern void check_for_species (double v, int ato); #endif atomes_1.3.1/src/project/readers/read_trj.c0000664000175000017500000001572615212624223020340 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_trj.c * @short Functions to read CPMD atomic coordinates * @author Sébastien Le Roux */ /* * This file: 'read_trj.c' * * Contains: * - The functions to read CPMD atomic coordinates * * List of functions: int trj_get_atom_coordinates (); int open_trj_file (int linec); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "bind.h" #include "readers.h" #ifdef OPENMP # include #endif /*! \fn int trj_get_atom_coordinates () \brief get the atomic coordinates from the CPMD file */ int trj_get_atom_coordinates () { int i, j, k, l; gchar * lia[4] = {"a", "b", "c", "d"}; allocatoms (active_project); #ifdef OPENMP int res; int numth = omp_get_max_threads (); gboolean doatoms = FALSE; gchar * saved_line; if (active_project -> steps < numth) { if (numth >= 2*(active_project -> steps-1)) { doatoms = TRUE; } else { numth = active_project -> steps; } } if (doatoms) { // OpenMP on atoms res = 0; for (i=0; i steps; i++) { k = i*active_project -> natomes; #pragma omp parallel for num_threads(numth) private(j,this_line,saved_line,this_word) shared(i,k,lia,coord_line,active_project,res) for (j=0; j natomes; j++) { if (res == 2) goto enda; this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto enda; } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto enda; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto enda; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); res = 2; goto enda; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); g_free (this_line); enda:; } if (res == 2) break; } } else { res = 0; #pragma omp parallel for num_threads(numth) private(i,j,k,this_line,saved_line,this_word) shared(lia,coord_line,active_project,res) for (i=0; i steps; i++) { if (res == 2) goto ends; k = i*active_project -> natomes; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto ends; } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto ends; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word) * 0.52917721; this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto ends; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word) * 0.52917721; this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); res = 2; goto ends; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word) * 0.52917721; g_free (this_line); } ends:; } } g_free (coord_line); if (res == 2) return 2; for (i=1; i steps; i++) { for (j=0; j natomes; j++) { if (active_project -> atoms[i-1][j].sp != active_project -> atoms[i][j].sp) { add_reader_info (g_strdup_printf (_("Error - chemical species changes between steps %d and %d, for atom %d !"), i, i+1, j+1), 0); return 2; } } } #else line_node * tmp_line; tail = head; k = 0; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); if (! this_word) { format_error (i+1, j+1, lia[0], k); return 2; } this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[1], k); return 2; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word) * 0.52917721; this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[2], k); return 2; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word) * 0.52917721; this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[3], k); return 2; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word) * 0.52917721; tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; } } #endif i = 0; for (j=0; j nspec; j++) { for (k=0; k nsps[j]; k++) { for (l=0; l steps; l++) { active_project -> atoms[l][i].sp = j; } i ++; } } return 0; } /*! \fn int open_trj_file (int linec) \brief open CPMD file \param linec Number of lines in the file */ int open_trj_file (int linec) { if (linec%(this_reader -> natomes) != 0) return 2; reader_info ("trj", _("Number of atoms"), this_reader -> natomes); active_project -> steps = linec / this_reader -> natomes; reader_info ("trj", _("Number of steps"), active_project -> steps); active_project -> natomes = this_reader -> natomes; return trj_get_atom_coordinates (); } atomes_1.3.1/src/project/readers/read_xyz.c0000664000175000017500000002245415212624223020367 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_xyz.c * @short Functions to read XYZ atomic coordinates * @author Sébastien Le Roux */ /* * This file: 'read_xyz.c' * * Contains: * - The functions to read XYZ atomic coordinates * * List of functions: int xyz_get_atom_coordinates (); int open_xyz_file (int linec); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "bind.h" #include "readers.h" #ifdef OPENMP # include #endif /*! \fn int xyz_get_atom_coordinates () \brief get the atomic coordinates from the XYZ file */ int xyz_get_atom_coordinates () { int i, j, k; double v; gchar * lia[4] = {"a", "b", "c", "d"}; this_reader -> nspec = 0; active_project -> steps = this_reader -> steps; active_project -> natomes = this_reader -> natomes; allocatoms (active_project); this_reader -> z = allocdouble (1); this_reader -> nsps = allocint (1); #ifdef OPENMP int v_dummy; int res; int numth = omp_get_max_threads (); gboolean doatoms = FALSE; gchar * saved_line; if (this_reader -> steps < numth) { if (numth >= 2*(this_reader -> steps-1)) { doatoms = TRUE; } else { numth = this_reader -> steps; } } if (doatoms) { // OpenMP on atoms res = 0; for (i=0; i steps; i++) { k = i*(this_reader -> natomes + 2) + 2; #pragma omp parallel for num_threads(numth) private(j,v,v_dummy,this_line,saved_line,this_word) shared(i,k,lia,coord_line,this_reader,active_project,res) for (j=0; j natomes; j++) { if (res == 2) goto enda; this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto enda; } v = get_z_from_periodic_table (this_word); v_dummy = 0; if (! v) { #pragma omp critical v_dummy = set_v_dummy (this_word); } if (v || v_dummy) { if (! i) { v = v + v_dummy * 0.1; #pragma omp critical check_for_species (v, j); } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto enda; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto enda; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); res = 2; goto enda; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); } else { format_error (i+1, j+1, lia[0], k+j); res = 2; goto enda; } g_free (this_line); enda:; } if (res == 2) break; } } else { res = 0; #pragma omp parallel for num_threads(numth) private(i,j,k,v,v_dummy,this_line,saved_line,this_word) shared(lia,coord_line,this_reader,active_project,res) for (i=0; i steps; i++) { if (res == 2) goto ends; k = i*(this_reader -> natomes + 2) + 2; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto ends; } v = get_z_from_periodic_table (this_word); v_dummy = 0; if (! v) { #pragma omp critical v_dummy = set_v_dummy (this_word); } if (v || v_dummy) { if (! i) { v = v + v_dummy * 0.1; check_for_species (v, j); } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto ends; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto ends; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto ends; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); } else { format_error (i+1, j+1, lia[3], k+j); res = 2; goto ends; } g_free (this_line); } ends:; } } g_free (coord_line); if (res == 2) return 2; #else line_node * tmp_line; tail = head; k = 0; for (i=0; i steps; i++) { for (j=0; j<2; j++) { tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; } for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); return 2; } v = get_z_from_periodic_table (this_word); if (v) { if (! i) check_for_species (v, j); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); return 2; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); return 2; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); return 2; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); } else { format_error (i+1, j+1, lia[0], k+j); return 2; } tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; } } #endif for (i=1; i steps; i++) { for (j=0; j natomes; j++) { active_project -> atoms[i][j].sp = active_project -> atoms[0][j].sp; } } return 0; } /*! \fn int open_xyz_file (int linec) \brief open XYZ file \param linec Number of lines in the file */ int open_xyz_file (int linec) { int res; #ifdef OPENMP this_line = g_strdup_printf ("%s", coord_line[0]); this_word = strtok (this_line, " "); if (! this_word) { add_reader_info (_("Wrong file format - cannot find the number of atoms !"), 0); add_reader_info (_("Wrong file format - first line is corrupted !"), 0); res = 2; goto end; } this_reader -> natomes = (int)string_to_double ((gpointer)this_word); reader_info ("xyz", _("Number of atoms"), this_reader -> natomes); g_free (this_line); if (linec%(this_reader -> natomes + 2) != 0) { res = 2; } else { this_reader -> steps = linec / (this_reader -> natomes + 2); reader_info ("xyz", _("Number of steps"), this_reader -> steps); res = xyz_get_atom_coordinates (); } #else this_line = g_strdup_printf ("%s", head -> line); this_word = strtok (this_line, " "); if (! this_word) { add_reader_info (_("Wrong file format - cannot find the number of atoms !"), 0); add_reader_info (_("Wrong file format - first line is corrupted !"), 0); res = 2; goto end; } this_reader -> natomes = (int)string_to_double ((gpointer)this_word); reader_info ("xyz", _("Number of atoms"), this_reader -> natomes); g_free (this_line); if (linec%(this_reader -> natomes + 2) != 0) { res = 2; } else { this_reader -> steps = linec / (this_reader -> natomes + 2); reader_info ("xyz", _("Number of steps"), this_reader -> steps); res = xyz_get_atom_coordinates (); } #endif end: return res; } atomes_1.3.1/src/project/readers/read_c3d.c0000664000175000017500000002366615212624223020214 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_c3d.c * @short Functions to read Chem3d atomic coordinates * @author Sébastien Le Roux */ /* * This file: 'read_c3d.c' * * Contains: * - The functions to read Chem3d atomic coordinates * * List of functions: int c3d_get_atom_coordinates (); int open_c3d_file (int linec); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "bind.h" #include "readers.h" #ifdef OPENMP # include #endif extern void check_for_species (double v, int ato); /*! \fn int c3d_get_atom_coordinates () \brief get the atomic coordinates from the C3D file */ int c3d_get_atom_coordinates () { int i, j, k; double v; gchar * lia[5] = {"a", "b", "c", "d", "e"}; this_reader -> nspec = 0; active_project -> steps = this_reader -> steps; active_project -> natomes = this_reader -> natomes; allocatoms (active_project); this_reader -> z = allocdouble (1); this_reader -> nsps = allocint (1); #ifdef OPENMP int v_dummy; int res; int numth = omp_get_max_threads (); gboolean doatoms = FALSE; gchar * saved_line; if (this_reader -> steps < numth) { if (numth >= 2*(this_reader -> steps-1)) { doatoms = TRUE; } else { numth = this_reader -> steps; } } if (doatoms) { // OpenMP on atoms res = 0; for (i=0; i steps; i++) { k = i*(this_reader -> natomes + 1) + 1; #pragma omp parallel for num_threads(numth) private(j,v,v_dummy,this_line,saved_line,this_word) shared(i,k,lia,coord_line,this_reader,active_project,res) for (j=0; j natomes; j++) { if (res == 2) goto enda; this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto enda; } v = get_z_from_periodic_table (this_word); v_dummy = 0; if (! v) { #pragma omp critical v_dummy = set_v_dummy (this_word); } if (v || v_dummy) { if (! i) { v = v + v_dummy * 0.1; #pragma omp critical check_for_species (v, j); } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto enda; } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto enda; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); res = 2; goto enda; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[4], k+j); res = 2; goto enda; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); } else { format_error (i+1, j+1, lia[0], k+j); res = 2; goto enda; } g_free (this_line); enda:; } if (res == 2) break; } } else { res = 0; #pragma omp parallel for num_threads(numth) private(i,j,k,v,v_dummy,this_line,saved_line,this_word) shared(lia,coord_line,this_reader,active_project,res) for (i=0; i steps; i++) { if (res == 2) goto ends; k = i*(this_reader -> natomes + 1) + 1; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto ends; } v = get_z_from_periodic_table (this_word); v_dummy = 0; if (! v) { #pragma omp critical v_dummy = set_v_dummy (this_word); } if (v || v_dummy) { if (! i) { v = v + v_dummy * 0.1; check_for_species (v, j); } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto ends; } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto ends; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); res = 2; goto ends; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[4], k+j); res = 2; goto ends; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); } else { format_error (i+1, j+1, lia[0], k+j); res = 2; goto ends; } g_free (this_line); } ends:; } } g_free (coord_line); if (res == 2) return 2; #else line_node * tmp_line; tail = head; k = 0; for (i=0; i steps; i++) { tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); return 2; } v = get_z_from_periodic_table (this_word); if (v) { if (! i) check_for_species (v, j); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); return 2; } this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); return 2; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); return 2; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[4], k+j); return 2; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); } else { format_error (i+1, j+1, lia[0], k+j); return 2; } tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; } } #endif for (i=1; i steps; i++) { for (j=0; j natomes; j++) { active_project -> atoms[i][j].sp = active_project -> atoms[0][j].sp; } } return 0; } /*! \fn int open_c3d_file (int linec) \brief open C3D file \param linec Number of lines in the file */ int open_c3d_file (int linec) { int res; #ifdef OPENMP this_line = g_strdup_printf ("%s", coord_line[0]); this_word = strtok (this_line, " "); if (! this_word) { add_reader_info (_("Wrong file format - cannot find the number of atoms !"), 0); add_reader_info (_("Wrong file format - first line is corrupted !"), 0); res = 2; goto end; } this_reader -> natomes = (int)string_to_double ((gpointer)this_word); reader_info ("c3d", _("Number of atoms"), this_reader -> natomes); g_free (this_line); if (linec%(this_reader -> natomes + 1) != 0) { res = 2; } else { this_reader -> steps = linec / (this_reader -> natomes + 1); reader_info ("c3d", _("Number of steps"), this_reader -> steps); res = (this_reader -> steps > 1) ? 2 : c3d_get_atom_coordinates (); } #else this_line = g_strdup_printf ("%s", head -> line); this_word = strtok (this_line, " "); if (! this_word) { add_reader_info (_("Wrong file format - cannot find the number of atoms !"), 0); add_reader_info (_("Wrong file format - first line is corrupted !"), 0); res = 2; goto end; } this_reader -> natomes = (int)string_to_double ((gpointer)this_word); reader_info ("chem3d", _("Number of atoms"), this_reader -> natomes); g_free (this_line); if (linec%(this_reader -> natomes + 1) != 0) { res = 2; } else { this_reader -> steps = linec / (this_reader -> natomes + 1); reader_info ("chem3d", _("Number of steps"), this_reader -> steps); res = (this_reader -> steps > 1) ? 2 : c3d_get_atom_coordinates (); } #endif end: return res; } atomes_1.3.1/src/project/readers/read_isaacs.h0000664000175000017500000000327115212624223021001 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_isaacs.h * @short Function declarations to read / write ISAACS XML file * @author Sébastien Le Roux */ /* * This header file: 'read_isaacs.h' * * Contains: - Function declarations to read / write ISAACS XML file */ #ifndef ISAACSRW_H_ #define ISAACSRW_H_ #include #include #include #include size_t strfind (int * ida); int XmlwriterFilename (const char *uri); int write_xml (const char * filetosave); gboolean file_exists (const char * filename); xmlNodePtr findnode (xmlNodePtr startnode, char * nname); int setprop (xmlNodePtr pnode); int testopening (char * tdata, char * tfichier); int setchemistry (xmlNodePtr xsnode); int setbox (xmlNodePtr boxnode); int setpbc (xmlNodePtr pbcnode); int setcutoffs (xmlNodePtr cutnode); int settime(xmlNodePtr timenode); int check_xml (const char * filetocheck); gchar * open_xml (const char * filetoread); #endif atomes_1.3.1/src/project/readers/read_cif.c0000664000175000017500000024651715212624223020306 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_cif.c * @short Functions to read CIF files * @author Sébastien Le Roux */ /* * This file: 'read_cif.c' * * Contains: * - The functions to read CIF files * * List of functions: int get_atom_wyckoff (gchar * line, int wid); int cif_get_value int cif_get_value (gchar * kroot, gchar * keyw, int lstart, int linec, gchar ** cif_word, gboolean rec_val, gboolean all_ligne, gboolean total_num, gboolean record_position, int * line_position) int cif_file_get_data_in_loop (int linec, int lid); int cif_file_get_number_of_atoms (int linec, int lid, int nelem); int get_loop_line_id (int lid); int get_loop_line_for_key (int linec, int conf, gchar * key_a, gchar * key_b); int cif_file_get_number_of_positions (int lid); int get_space_group_from_hm (gchar * hmk); int get_setting_from_hm (gchar * hmk, int end); int group_info_from_hm_key (int spg, gchar * key_hm); int cif_get_space_group (int linec); int open_cif_configuration (int linec, int conf); int open_cif_file (int linec); float get_atom_coord (gchar * line, int mid); gboolean get_missing_object_from_user (); gboolean cif_file_get_atoms_data (int conf, int lin, int cid[8]); gboolean cif_get_atomic_coordinates (int linec); gboolean cif_get_symmetry_positions (int linec); gboolean cif_get_cell_data (int linec, int conf); gchar * get_cif_word (gchar * mot); gchar * get_atom_label (gchar * line, int lid); gchar * get_atom_disorder (gchar * line, int lid); gchar * get_string_from_origin (space_group * spg); gchar * cif_retrieve_value (int linec, int conf, gchar * key_a, gchar * key_b, gboolean all_ligne, gboolean in_loop, gboolean warning); G_MODULE_EXPORT void set_cif_to_insert (GtkComboBox * box, gpointer data); void file_get_to_line (int line_id); void check_for_to_lab (int ato, gchar * stlab); */ #include "global.h" #include "bind.h" #include "interface.h" #include "project.h" #include "atom_edit.h" #include "cbuild_edit.h" #include "readers.h" #include #ifdef OPENMP # include #endif extern int get_atom_id_from_periodic_table (atom_search * asearch); extern double get_z_from_periodic_table (gchar * lab); extern void get_origin (space_group * spg); extern void compute_lattice_properties (cell_info * cell, int box_id); extern int test_lattice (builder_edition * cbuilder, cell_info * cif_cell); extern int read_space_group (builder_edition * cbuilder, int spg); extern gchar * wnpos[3]; extern void get_wyck_char (float val, int ax, int bx); extern space_group * duplicate_space_group (space_group * spg); extern distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt); extern void sort (int dim, int * tab); extern gchar * tmp_pos; FILE * cifp; char * line_ptr; int * keylines = NULL; int saved_group; int cif_atoms; int cif_nspec; int * cif_lot = NULL; int * cif_nsps = NULL; gboolean cif_multiple = FALSE; gchar ** cif_strings = NULL; gchar * cif_coord_opts[40][2] = {{"b1", "Monoclinic unique axis b, cell choice 1, abc"}, // 0 {"b2", "Monoclinic unique axis b, cell choice 2, abc"}, // 1 {"b3", "Monoclinic unique axis b, cell choice 3, abc"}, // 2 {"-b1", "Monoclinic unique axis b, cell choice 1, c-ba"}, // 3 {"-b2", "Monoclinic unique axis b, cell choice 2, c-ba"}, // 4 {"-b3", "Monoclinic unique axis b, cell choice 3, c-ba"}, // 5 {"c1", "Monoclinic unique axis c, cell choice 1, abc"}, // 6 {"c2", "Monoclinic unique axis c, cell choice 2, abc"}, // 7 {"c3", "Monoclinic unique axis c, cell choice 3, abc"}, // 8 {"-c1", "Monoclinic unique axis c, cell choice 1, ba-c"}, // 9 {"-c2", "Monoclinic unique axis c, cell choice 2, ba-c"}, // 10 {"-c3", "Monoclinic unique axis c, cell choice 3, ba-c"}, // 11 {"a1", "Monoclinic unique axis a, cell choice 1, abc"}, // 12 {"a2", "Monoclinic unique axis a, cell choice 2, abc"}, // 13 {"a3", "Monoclinic unique axis a, cell choice 3, abc"}, // 14 {"-a1", "Monoclinic unique axis a, cell choice 1, -acb"}, // 15 {"-a2", "Monoclinic unique axis a, cell choice 2, -acb"}, // 16 {"-a3", "Monoclinic unique axis a, cell choice 3, -acb"}, // 17 {"abc", "Orthorhombic"}, // 18 {"ba-c", "Orthorhombic"}, // 10 {"cab", "Orthorhombic"}, // 20 {"-cba", "Orthorhombic"}, // 21 {"bca", "Orthorhombic"}, // 22 {"a-cb", "Orthorhombic"}, // 23 {"1abc", "Orthorhombic origin choice 1"}, // 24 {"1ba-c", "Orthorhombic origin choice 1"}, // 25 {"1cab", "Orthorhombic origin choice 1"}, // 26 {"1-cba", "Orthorhombic origin choice 1"}, // 27 {"1bca", "Orthorhombic origin choice 1"}, // 28 {"1a-cb", "rthorhombic origin choice 1"}, // 29 {"2abc", "Orthorhombic origin choice 2"}, // 30 {"2ba-c", "Orthorhombic origin choice 2"}, // 31 {"2cab", "Orthorhombic origin choice 2"}, // 32 {"2-cba", "Orthorhombic origin choice 2"}, // 33 {"2bca", "Orthorhombic origin choice 2"}, // 34 {"2a-cb", "Orthorhombic origin choice 2"}, // 35 {"1", "Tetragonal or cubic origin choice 1"}, // 36 {"2", "Tetragonal or cubic origin choice 2"}, // 37 {"h", "Trigonal using hexagonal axes"}, // 38 {"r", "Trigonal using rhombohedral axes "}}; // 39 #ifdef G_OS_WIN32 typedef intptr_t ssize_t; ssize_t getline(char **lineptr, size_t *n, FILE *stream) { size_t pos; int c; if (lineptr == NULL || stream == NULL || n == NULL) { errno = EINVAL; return -1; } c = getc(stream); if (c == EOF) return -1; if (*lineptr == NULL) { *lineptr = malloc(128); if (*lineptr == NULL) return -1; *n = 128; } pos = 0; while(c != EOF) { if (pos + 1 >= *n) { size_t new_size = *n + (*n >> 2); if (new_size < 128) { new_size = 128; } char *new_ptr = realloc(*lineptr, new_size); if (new_ptr == NULL) return -1; *n = new_size; *lineptr = new_ptr; } ((unsigned char *)(*lineptr))[pos ++] = c; if (c == '\n') break; c = getc(stream); } (*lineptr)[pos] = '\0'; return pos; } #endif // G_OS_WIN_32 /*! \fn gchar * get_cif_word (gchar * mot) \brief get string from CIF file, EOL can be ugly \param mot the string that was read in the file */ gchar * get_cif_word (gchar * mot) { gchar * word = substitute_string (mot, "\n", NULL); word = substitute_string (word, "\r", NULL); return word; } /*! \fn float get_atom_coord (gchar * line, int mid) \brief read atom coordinates from CIF file \param line the string that contains the data \param mid the position to reach on the line */ float get_atom_coord (gchar * line, int mid) { gchar * co_line; gchar * init = g_strdup_printf ("%s", line); char * co_word = strtok_r (init, " ", & co_line); int i; for (i=0; i lattice.sp_group -> numw; i++) { if (g_strcmp0(get_cif_word(wy_word), this_reader -> lattice.sp_group -> wyckoff[i].let) == 0) { j = i; break; } } g_free (init); return j; } /*! \fn gchar * get_atom_disorder (gchar * line, int lid) \brief read atom disorder group from CIF file \param line the string that contains the data \param lid the position to reach on the line */ gchar * get_atom_disorder (gchar * line, int lid) { gchar * at_line; gchar * init = g_strdup_printf ("%s", line); char * at_word = strtok_r (init, " ", & at_line); int i; for (i=0; i 0) { gtk_tree_store_set (GTK_TREE_STORE(cmodel), & iter, 0, periodic_table_info[j].lab, -1); } cif_search -> todo[i] = (! j) ? 0 : 1; if (! j) done = FALSE; cif_search -> in_selection = 0; for (k=0; k object_to_insert; k++) cif_search -> in_selection += cif_search -> todo[k]; } str = (done) ? g_strdup_printf (APPLY) : g_strdup_printf (DELETEB); set_image_from_icon_name (img_cif[i], str); g_free (str); if (! done) combo_set_active ((GtkWidget *)box, 0); } /*! \fn gboolean get_missing_object_from_user () \brief get missing atomic number in CIF file from the user */ gboolean get_missing_object_from_user () { cif_search = allocate_atom_search (activep, REPLACE, 0, this_reader -> object_to_insert); cif_object = NULL; GtkWidget * info = dialogmodal (_("Error while reading CIF file"), GTK_WINDOW(MainWindow)); GtkWidget * vbox, * hbox; gchar * str; vbox = dialog_get_content_area (info); gchar * labpick = _("To continue and build the crystal according to the information of the CIF file\n" "it is required to provide a suitable value for each and every missing parameter(s)." "\n\nPlease select an atom type for the following object(s):"); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label (labpick, 200, -1, 0.5, 0.5), FALSE, FALSE, 10); img_cif = g_malloc0(this_reader -> object_to_insert*sizeof*img_cif); GtkWidget * but; GtkCellRenderer * renderer; GtkTreeModel * model; int i; for (i=0; i object_to_insert; i++) { hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); str = g_strdup_printf (_("Type N°%d:\t%s"), i+1, this_reader -> label[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 150, -1, 0.0, 0.5), FALSE, FALSE, 20); g_free (str); img_cif[i] = stock_image (DELETEB); model = replace_combo_tree (TRUE, activep); but = gtk_combo_box_new_with_model (model); g_object_unref (model); renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (but), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (but), renderer, "text", 0, NULL); combo_set_active (but, 0); g_signal_connect (G_OBJECT(but), "changed", G_CALLBACK(set_cif_to_insert), GINT_TO_POINTER(i)); combo_set_markup (but); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_cif[i], FALSE, FALSE, 30); } gchar * endpick = _("In case of a molecule: insert an extra type of atom and run a substitution afterwards."); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label (endpick, 200, -1, 0.5, 0.5), FALSE, FALSE, 10); run_this_gtk_dialog (info, G_CALLBACK(run_destroy_dialog), NULL); g_free (img_cif); return (cif_search -> in_selection == this_reader -> object_to_insert) ? TRUE : FALSE; } #ifndef OPENMP /*! \fn void file_get_to_line (int line_id) \brief reach line in CIF file \param line_id Line to reach */ void file_get_to_line (int line_id) { int i; tail = head; for (i=0; i next; } #endif /*! \fn int cif_get_value (gchar * kroot, gchar * keyw, int lstart, int linec, gchar ** cif_word, gboolean rec_val, gboolean all_ligne, gboolean total_num, gboolean record_position, int * line_position) \brief read pattern in CIF file \param kroot string key (first part) \param keyw string key (second part) \param lstart starting line to reach \param lend final line \param cif_word pointer to store the data to read \param rec_val record position on the line \param all_ligne browse all line (1/0) \param total_num get the total number of occurrences \param record_position record line position of each occurrences \param line_position line position of each occurrences */ int cif_get_value (gchar * kroot, gchar * keyw, int lstart, int lend, gchar ** cif_word, gboolean rec_val, gboolean all_ligne, gboolean total_num, gboolean record_position, int * line_position) { int res = 0; int i; size_t j, k, l, m; gchar * str; gchar * str_w, * str_a, * str_b; gchar * mot; gchar * saved_line; gchar * the_line; gchar * the_word; j = strlen(kroot); k = strlen(keyw); l = j+k+1; #ifdef OPENMP int numth = omp_get_max_threads (); #pragma omp parallel for num_threads(numth) private(i,m,the_line,saved_line,the_word,mot,str_a,str_b,str_w) shared(j,k,l,this_reader,coord_line,cif_word,rec_val,all_ligne,kroot,keyw,total_num,record_position,line_position,res) for (i=lstart; i%s - error at line %d !\n"), keyw, i+1); add_reader_info (str, 0); g_free (str); g_free (str_w); g_free (str_a); g_free (str_b); res = -1; goto endi; } } if (total_num) { #pragma omp critical { if (record_position) { line_position[res] = i + 1; } res ++; if (this_reader -> steps && res == this_reader -> steps) total_num = FALSE; } } else { res = i + 1; } if (all_ligne) { mot = g_strdup_printf ("%s", the_word); the_word = strtok_r (NULL, " ", & saved_line); while (the_word) { mot = g_strdup_printf ("%s%s", mot, the_word); the_word = strtok_r (NULL, " ", & saved_line); } the_word = g_strdup_printf ("%s", mot); g_free (mot); } if (the_word && rec_val) { * cif_word = get_cif_word (the_word); } g_free (str_w); g_free (str_a); g_free (str_b); goto endi; } g_free (str_a); g_free (str_b); } g_free (str_w); the_word = strtok_r (NULL, " ", & saved_line); } endi:; g_free (the_line); } if (res < 0) res = 0; #else file_get_to_line (lstart); res = 0; i = lstart; while (tail) { the_line = g_strdup_printf ("%s", tail -> line); the_word = strtok_r (the_line, " ", & saved_line); while (the_word) { str_w = get_cif_word (the_word); str_w = g_ascii_strdown (str_w, strlen(str_w)); if (strlen(str_w) == l) { str_a = g_strdup_printf ("%c", str_w[0]); for (m=1; m%s - error at line %d !\n"), keyw, i+1); add_reader_info (str, 0); g_free (str); g_free (str_w); g_free (str_a); g_free (str_b); g_free (the_line); return 0; } } if (all_ligne) { mot = g_strdup_printf ("%s", the_word); the_word = strtok_r (NULL, " ", & saved_line); while (the_word) { mot = g_strdup_printf ("%s%s", mot, the_word); the_word = strtok_r (NULL, " ", & saved_line); } the_word = g_strdup_printf ("%s", mot); g_free (mot); } if (the_word && rec_val) { * cif_word = get_cif_word (the_word); } if (total_num) { if (record_position) { line_position[res] = i + 1; } res ++; if (this_reader -> steps && res == this_reader -> steps) { g_free (str_a); g_free (str_b); g_free (str_w); g_free (the_line); return res; } } else { g_free (str_a); g_free (str_b); g_free (str_w); g_free (the_line); return i + 1; } } g_free (str_a); g_free (str_b); } g_free (str_w); the_word = strtok_r (NULL, " ", & saved_line); } g_free (the_line); tail = tail -> next; i ++; } #endif return res; } /*! \fn int cif_file_get_data_in_loop (int linec, int lid) \brief get the number of "_" motifs in a line \param linec total number of lines \param lid line to reach */ int cif_file_get_data_in_loop (int linec, int lid) { gboolean res = FALSE; int i = 0; gchar * the_word; gchar * the_line; gchar * saved_line; #ifdef OPENMP while (! res) { if (lid+i < linec) { the_line = g_strdup_printf ("%s", coord_line[lid+i]); the_word = strtok_r (the_line, " ", & saved_line); if (the_word[0] == '_') { i ++; } else { res = TRUE; } g_free (the_line); } else { res = TRUE; } } #else file_get_to_line (lid); while (! res) { if (tail) { the_line = g_strdup_printf ("%s", tail -> line); the_word = strtok_r (the_line, " ", & saved_line); if (the_word[0] == '_') { i ++; tail = tail -> next; } else { res = TRUE; } g_free (the_line); } else { res = TRUE; } } #endif return i; } /*! \fn int get_loop_line_id (int lid) \brief reach a line in the CIF file \param lid line to reach */ int get_loop_line_id (int lid) { int i; gchar * the_word; gchar * the_line; gchar * saved_line; gchar * str_w; #ifdef OPENMP for (i=lid-1; i>-1; i--) { the_line = g_strdup_printf ("%s", coord_line[i]); the_word = strtok_r (the_line, " ", & saved_line); if (the_word) { str_w = g_ascii_strdown (the_word, strlen(the_word)); if (g_strcmp0 ("loop_", get_cif_word(str_w)) == 0) { g_free (str_w); return i+1; } g_free (str_w); } } #else file_get_to_line (lid); i = lid; while (tail) { the_line = g_strdup_printf ("%s", tail -> line); the_word = strtok_r (the_line, " ", & saved_line); if (the_word) { str_w = g_ascii_strdown (the_word, strlen(the_word)); if (g_strcmp0 ("loop_", get_cif_word(str_w)) == 0) { g_free (str_w); return i+1; } g_free (str_w); } i --; tail = tail -> prev; } #endif return 0; } /*! \fn int get_loop_line_for_key (int linec, int conf, gchar * key_a, gchar * key_b) \brief search a string \param linec total number of lines \param conf configuration to read \param key_a string root (first part) \param key_b string end (second part) */ int get_loop_line_for_key (int linec, int conf, gchar * key_a, gchar * key_b) { int lli = 0; int * line_numbers; int steps; if (this_reader -> steps > 1) { line_numbers = allocint (this_reader -> steps); steps = cif_get_value (key_a, key_b, 0, linec, NULL, FALSE, FALSE, TRUE, TRUE, line_numbers); if (steps) { if (steps != this_reader -> steps) { gchar * str = g_strdup_printf (_("CIF get loop line: something is wrong for keyword: %s_%s\n" " -> keyword found= %d times\n" " -> configurations in CIF file= %d !\n"), key_a, key_b, steps, this_reader -> steps); add_reader_info (str, 0); g_free (str); g_free (line_numbers); return 0; } sort (steps, line_numbers); lli = line_numbers[conf]; g_free (line_numbers); } } else { lli = cif_get_value (key_a, key_b, 0, linec, NULL, FALSE, FALSE, FALSE, FALSE, NULL); } return (lli) ? get_loop_line_id (lli) : 0; } /*! \fn gchar * cif_retrieve_value (int linec, int conf, gchar * key_a, gchar * key_b, gboolean all_ligne, gboolean in_loop, gboolean warning) \brief retrieve a field value as string in the CIF file \param linec total number of lines \param conf configuration to read \param keya string key (first part) \param keyb string key (second part) \param all_ligne browse all line (1/0) \param in_loop is field in a loop (1/0) \param warning show warning (1/0) */ gchar * cif_retrieve_value (int linec, int conf, gchar * key_a, gchar * key_b, gboolean all_ligne, gboolean in_loop, gboolean warning) { gchar * str; gchar * cif_value = NULL; int loop_pos[2]; int * line_numbers; int steps; if (this_reader -> steps > 1) { line_numbers = allocint (this_reader -> steps); // g_debug ("CIF:: retrieve:: linec= %d, conf= %d, key_a= %s, key_b= %s, this_reader -> steps= %d", linec, conf, key_a, key_b, this_reader -> steps); steps = cif_get_value (key_a, key_b, 0, linec, NULL, FALSE, FALSE, TRUE, TRUE, line_numbers); // g_debug ("CIF:: retrieve:: steps= %d", steps); if (steps) { if (steps != this_reader -> steps) { str = g_strdup_printf (_("CIF retrieved value: keyword: %s_%s\n" " -> keyword found= %d times\n" " -> configurations in CIF file= %d !\n"), key_a, key_b, steps, this_reader -> steps); add_reader_info (str, 0); g_free (str); str = NULL; g_free (line_numbers); line_numbers = NULL; return NULL; } sort (steps, line_numbers); if (in_loop) { // Considering that the loop has not more than a thousand keys loop_pos[0] = get_loop_line_id (line_numbers[conf]); loop_pos[1] = (loop_pos[0] + 1000) > linec ? linec : (loop_pos[0] + 1000); } else { loop_pos[0] = (! line_numbers[conf]) ? line_numbers[conf] : line_numbers[conf] - 1; loop_pos[1] = (loop_pos[0] + 1000) > linec ? linec : (loop_pos[0] + 1000); // loop_pos[1] = (conf == this_reader -> steps - 1) ? linec : line_numbers[conf + 1]; } g_free (line_numbers); line_numbers = NULL; } } else { loop_pos[0] = 0; loop_pos[1] = linec; } if (! cif_get_value (key_a, key_b, loop_pos[0], loop_pos[1], & cif_value, TRUE, all_ligne, FALSE, FALSE, NULL) && warning) { #ifdef DEBUG g_debug ("CIF:: retrieve:: keyword: %s_%s not found for conf %d between loop_pos[0]= %d and loop_pos[1]= %d\n", key_a, key_b, conf, loop_pos[0], loop_pos[1]); #endif str = g_strdup_printf (_("Key positions: keyword: %s_%s\n" " -> not found for conf %d between loop_pos[0]= %d and loop_pos[1]= %d\n"), key_a, key_b, conf, loop_pos[0], loop_pos[1]); add_reader_info (str, 0); g_free (str); return NULL; } return cif_value; } /*! \fn int cif_file_get_number_of_atoms (int linec, int lid, int nelem) \brief get the number of atom(s) in a CIF file \param linec total number of lines \param lid line to reach \param nelem number of element(s) the line */ int cif_file_get_number_of_atoms (int linec, int lid, int nelem) { gboolean res = FALSE; int i, j; char init; gchar * the_word; gchar * the_line; gchar * saved_line; i = 0; #ifdef OPENMP while (! res && (lid+i) < linec) { the_line = g_strdup_printf ("%s", coord_line[lid+i]); the_word = strtok_r (the_line, " ", & saved_line); j = 0; while (the_word) { if (! j) init = the_word[0]; j ++; the_word = strtok_r (NULL, " ", & saved_line); } if (j == nelem && init != '_') { i ++; } else { res = TRUE; } g_free (the_line); } #else file_get_to_line (lid); while (! res && tail) { the_line = g_strdup_printf ("%s", tail -> line); the_word = strtok_r (the_line, " ", & saved_line); j = 0; while (the_word) { if (j == 0) init = the_word[0]; j ++; the_word = strtok_r (NULL, " ", & saved_line); } if (j == nelem && init != '_') { i ++; } else { res = TRUE; } g_free (the_line); tail = tail -> next; } #endif return i; } /*! \fn void check_for_to_lab (int ato, gchar * stlab) \brief check atom label \param ato atom id \param stlab label to read in the CIF file */ void check_for_to_lab (int ato, gchar * stlab) { int i, j; j = -1; // First is the label of 'ato' already listed for (i=0; i object_to_insert; i++) { if (g_strcmp0(this_reader -> label[i], stlab) == 0) { j = i; break; } } if (j < 0) { if (this_reader -> label) { this_reader -> label = g_realloc (this_reader -> label, (this_reader -> object_to_insert+1)*sizeof*this_reader -> label); } else { this_reader -> label = g_malloc0(1*sizeof*this_reader -> label); } this_reader -> label[this_reader -> object_to_insert] = g_strdup_printf ("%s", stlab); this_reader -> object_to_insert ++; j = this_reader -> object_to_insert-1; } if (this_reader -> object_list) { this_reader -> object_list = g_realloc (this_reader -> object_list, (this_reader -> atom_unlabelled+1)*sizeof*this_reader -> object_list); this_reader -> u_atom_list = g_realloc (this_reader -> u_atom_list, (this_reader -> atom_unlabelled+1)*sizeof*this_reader -> u_atom_list); } else { this_reader -> object_list = g_malloc0(1*sizeof*this_reader -> object_list); this_reader -> u_atom_list = g_malloc0(1*sizeof*this_reader -> u_atom_list); } this_reader -> object_list[this_reader -> atom_unlabelled] = j; this_reader -> u_atom_list[this_reader -> atom_unlabelled] = ato; this_reader -> atom_unlabelled ++; } /*! \fn gboolean cif_file_get_atoms_data (int conf, int lin, int cid[8]) \brief get atoms data from the CIF file \param conf the configuration to read \param lin line to reach \param cid positions on the line for the data to read */ gboolean cif_file_get_atoms_data (int conf, int lin, int cid[9]) { int i, j; double v; gchar * str; gboolean done = TRUE; gchar * cline; int at_step = (active_project -> steps == 1) ? 0 : conf; #ifdef OPENMP int numth = omp_get_max_threads (); #pragma omp parallel for num_threads(numth) private(i,j,v,cline,str) shared(this_reader,coord_line,at_step,done,lin,cid) for (i=0; i natomes; i++) { cline = g_strdup_printf ("%s", coord_line[i+lin]); str = get_atom_label (cline, (cid[0]) ? cid[0] : cid[1]); v = get_z_from_periodic_table (str); #pragma omp critical { if (v) { check_for_species (v, i); } else { done = FALSE; check_for_to_lab (i, str); } } if (this_reader -> cartesian) { active_project -> atoms[at_step][i].x = get_atom_coord (cline, cid[2]); active_project -> atoms[at_step][i].y = get_atom_coord (cline, cid[3]); active_project -> atoms[at_step][i].z = get_atom_coord (cline, cid[4]); } else { for (j=0; j<3; j++) this_reader -> coord[i][j] = get_atom_coord (cline, cid[j+2]); } if (! this_reader -> cartesian) { this_reader -> wyckoff[i] = (cid[5]) ? get_atom_wyckoff (cline, cid[5]) : 0; this_reader -> occupancy[i] = (cid[6]) ? get_atom_coord (cline, cid[6]) : 1.0; this_reader -> multi[i] = (cid[7]) ? get_atom_coord (cline, cid[7]) : 0.0; this_reader -> disorder[i] = (cid[8]) ? (int) get_atom_coord (cline, cid[8]) : 0; } if (cline) { g_free (cline); cline = NULL; } if (str) { g_free (str); str = NULL; } } #else file_get_to_line (lin); for (i=0; i natomes; i++) { cline = g_strdup_printf ("%s", tail -> line); str = get_atom_label (cline, (cid[0]) ? cid[0] : cid[1]); v = get_z_from_periodic_table (str); if (v) { check_for_species (v, i); } else { done = FALSE; check_for_to_lab (i, str); } if (this_reader -> cartesian) { active_project -> atoms[at_step][i].x = get_atom_coord (cline, cid[2]); active_project -> atoms[at_step][i].y = get_atom_coord (cline, cid[3]); active_project -> atoms[at_step][i].z = get_atom_coord (cline, cid[4]); } else { for (j=0; j<3; j++) this_reader -> coord[i][j] = get_atom_coord (cline, cid[j+2]); } if (! this_reader -> cartesian) { this_reader -> wyckoff[i] = (cid[5]) ? get_atom_wyckoff (cline, cid[5]) : 0; this_reader -> occupancy[i] = (cid[6]) ? get_atom_coord (cline, cid[6]) : 1.0; this_reader -> multi[i] = (cid[7]) ? get_atom_coord (cline, cid[7]) : 0.0; this_reader -> disorder[i] = (cid[8]) ? get_atom_coord (cline, cid[8]) : 0; } /* #ifdef DEBUG j = this_reader -> wyckoff[i]; g_debug ("CIF:: At= %s, w_letter[%d]= %s, occ= %f, x= %f, y= %f, z= %f", this_reader -> label[i], j, this_reader -> lattice.sp_group -> wyckoff[j].let, this_reader -> occupancy[i], this_reader -> coord[i][0], this_reader -> coord[i][1], this_reader -> coord[i][2]); #endif */ tail = tail -> next; } #endif if (! done) { done = (cif_search) ? TRUE : get_missing_object_from_user (); } return done; } /*! \fn gboolean cif_get_atomic_coordinates (int linec) \brief read the atomic coordinates from the CIF file \param linec total number of lines \param conf configuration to read */ gboolean cif_get_atomic_coordinates (int linec, int conf) { gchar * labkeys[2] = {"type_symbol", "label"}; gchar * frackeys[3] = {"fract_x", "fract_y", "fract_z"}; gchar * cartkeys[3] = {"cartn_x", "cartn_y", "cartn_z"}; gchar * symkeys[4] = {"wyckoff_symbol", "occupancy", "symmetry_multiplicity", "disorder_group"}; gchar * str = NULL; int cid[9]; int loop_line; int loop_max; int i, j, k; double u, v; int * tmp_nsps; double * tmp_z; if (cif_multiple) { loop_line = get_loop_line_for_key (linec, conf, "_atom_site", (this_reader -> cartesian) ? cartkeys[0] : frackeys[0]); if (! loop_line) { return FALSE; } } else { loop_line = get_loop_line_for_key (linec, 0, "_atom_site", cartkeys[0]); if (! loop_line) { loop_line = get_loop_line_for_key (linec, 0, "_atom_site", frackeys[0]); if (! loop_line) { return FALSE; } } else { this_reader -> cartesian = TRUE; } } loop_max = (loop_line + 1000 > linec) ? linec : loop_line + 1000; i = 0; for (j=0; j<2; j++) { cid[j] = cif_get_value ("_atom_site", labkeys[j], loop_line, loop_max, NULL, FALSE, FALSE, FALSE, FALSE, NULL); if (cid[j]) { i ++; cid[j] -= loop_line; } } if (! i) { add_reader_info (_("Atomic coordinates: impossible to find atomic label(s) ..."), 0); return FALSE; } for (i=0; i<3; i++) { cid[i+2] = cif_get_value ("_atom_site", (this_reader -> cartesian) ? cartkeys[i] : frackeys[i], loop_line, loop_max, NULL, FALSE, FALSE, FALSE, FALSE, NULL); if (cid[i+2]) { cid[i+2] -= loop_line; } else { str = g_strdup_printf (_("Atomic coordinates: impossible to find '%s' ..."), (this_reader -> cartesian) ? cartkeys[i] : frackeys[i]); add_reader_info (str, 1); g_free (str); this_reader -> cartesian = FALSE; } } if (! this_reader -> cartesian) { for (i=0; i<4; i++) { cid[i+5] = cif_get_value ("_atom_site", symkeys[i], loop_line, loop_max, NULL, FALSE, FALSE, FALSE, FALSE, NULL); if (cid[i+5]) { cid[i+5] -= loop_line; if (i == 1 && this_reader -> rounding < 0) { this_reader -> rounding = iask (_("Please select how to handle occupancy"), _("Select how to handle occupancy"), 5, MainWindow); if (this_reader -> rounding < 0 || this_reader -> rounding > 2) this_reader -> rounding = 2; if (! cif_use_symmetry_positions) { str = g_strdup_printf (_("Occupancy %s\n\t%s\n"), cif_occ[this_reader -> rounding], cif_sites[cif_use_symmetry_positions]); add_reader_info (str, 1); g_free (str); } } } } } i = cif_file_get_data_in_loop (linec, loop_line); this_reader -> natomes = cif_file_get_number_of_atoms (linec, loop_line+i, i); if (! this_reader -> natomes) return FALSE; if (conf && active_project -> steps > 1 && this_reader -> natomes != cif_atoms) { // Not the same number of atoms between each configuration str = g_strdup_printf (_("Atomic coordinates: the number of atom(s) changes !\n" " - configuration N°%d\t :: atoms= %d\n" " - initialization \t\t :: atoms= %d\n"), conf, this_reader -> natomes, cif_atoms); add_reader_info (str, 0); g_free (str); return FALSE; } if (this_reader -> cartesian) { if (! conf) { active_project -> natomes = this_reader -> natomes; allocatoms (active_project); } } else { this_reader -> coord = allocddouble (this_reader -> natomes*this_reader -> steps, 3); } if (! this_reader -> cartesian) { this_reader -> lot = allocint (this_reader -> natomes); this_reader -> wyckoff = allocint (this_reader -> natomes); this_reader -> occupancy = allocdouble (this_reader -> natomes); this_reader -> multi = allocint (this_reader -> natomes); this_reader -> disorder = allocint (this_reader -> natomes); } this_reader -> z = allocdouble (1); this_reader -> nsps = allocint (1); if (! cif_file_get_atoms_data (conf, loop_line+i, cid)) return FALSE; if (active_project -> steps > 1) { tmp_nsps = duplicate_int (this_reader -> nspec, this_reader -> nsps); tmp_z = duplicate_double (this_reader -> nspec, this_reader -> z); for (i=1; i nspec; i++) { v = tmp_z[i]; j = tmp_nsps[i]; for (k=i-1; k>-1; k--) { if (tmp_z[k] <= v) break; tmp_z[k+1] = tmp_z[k]; tmp_nsps[k+1] = tmp_nsps[k]; } tmp_z[k+1] = v; tmp_nsps[k+1] = j; } g_free (tmp_z); if (! conf) { cif_atoms = this_reader -> natomes; cif_nspec = this_reader -> nspec; cif_nsps = duplicate_int (this_reader -> nspec, tmp_nsps); } } if (conf && active_project -> steps > 1) { if (this_reader -> nspec != cif_nspec) { // Not the same number of chemical species between each configuration str = g_strdup_printf (_("Atomic coordinates: the number of chemical species changes !\n" " - configuration N°%d\t :: species= %d\n" " - initialization \t\t :: species= %d\n"), conf, this_reader -> nspec, cif_nspec); add_reader_info (str, 0); g_free (str); return FALSE; } for (i=0; i nspec; i++) { if (tmp_nsps[i] != cif_nsps[i]) { // Not the same number of atom(s) by chemical species between each configuration str = g_strdup_printf (_("Atomic coordinates: the number of atom(s) for species %d changes !\n" " - configuration N°%d\t :: atom(s)= %d\n" " - initialization \t\t :: atom(s)= %d\n"), conf, i+1, this_reader -> nsps[i], cif_nsps[i]); add_reader_info (str, 0); g_free (str); return FALSE; } } g_free (tmp_nsps); } if (! this_reader -> cartesian && cif_use_symmetry_positions) { // Testing site multiplicity, to ensure that occupancy is not > 1.0 for (i=0; i natomes; i++) { v = this_reader -> occupancy[i]; for (j=0; j natomes; j++) { if (j != i) { if (this_reader -> coord[i][0] == this_reader -> coord[j][0] && this_reader -> coord[i][1] == this_reader -> coord[j][1] && this_reader -> coord[i][2] == this_reader -> coord[j][2]) { v += this_reader -> occupancy[j]; if (v > 1.00001) { add_reader_info (_("Atomic coordinates: a site has an occupancy > 1.0 !\n"), 0); return FALSE; } } } } } } if (! this_reader -> cartesian && this_reader -> chemical) { // Testing the different number of occupancies double * test_occ = allocdouble (1); int * num_occ = allocint (1); int * test_order = allocint (1); int * num_order = allocint (1); gboolean new_occ, new_order; int occupancies = 1; int disorders = 1; u = v = test_occ[0] = this_reader -> occupancy[0]; test_order[0] = this_reader -> disorder[0]; num_occ[0] = num_order[0] = 1; for (i=1; i natomes; i++) { new_occ = new_order = TRUE; for (j=0; j occupancy[i]) { num_occ[j] ++; new_occ = FALSE; break; } } if (new_occ) { test_occ = g_realloc (test_occ, (occupancies+1)*sizeof*test_occ); test_occ[occupancies] = this_reader -> occupancy[i]; u = min (u, test_occ[occupancies]); v = max (v, test_occ[occupancies]); num_occ = g_realloc (num_occ, (occupancies+1)*sizeof*num_occ); num_occ[occupancies] = 1; occupancies ++; } for (j=0; j disorder[i]) { num_order[j] ++; new_order = FALSE; break; } } if (new_order) { test_order = g_realloc (test_order, (disorders+1)*sizeof*test_order); test_order[disorders] = this_reader -> disorder[i]; num_order = g_realloc (num_order, (disorders+1)*sizeof*num_order); num_order[disorders] = 1; disorders ++; } } if (this_reader -> natomes%occupancies == 0 || this_reader -> natomes%disorders == 0) { // Atoms can be separated based on site occupancy or site disorder // We can consider this as a chemical reaction or trajectory // As many lattices near by as occupancies or disorders new_occ = TRUE; for (i=0; i natomes/occupancies) { new_occ = FALSE; break; } } // if (new_occ) add_reader_info (_("CIF file is compatible with a chemical reaction: \n\t Reactants can be separated using occupancy\n"), 1); // g_debug ("min= %f, max= %f, max/min= %f", u, v, v/u); new_order = TRUE; for (i=0; i natomes/disorders) { new_order = FALSE; break; } } // if (new_order) add_reader_info (_("CIF file is compatible with a chemical reaction: \n\t Reactants can be separated using disorder site\n"), 1); } } return TRUE; } /*! \fn int cif_file_get_number_of_positions (int lid) \brief get the number of symmetry positions \param lid line to reach */ int cif_file_get_number_of_positions (int lid) { gboolean res = FALSE; gchar * saved_line; gchar * the_line; gchar * the_word; int i = 0; while (! res) { #ifdef OPENMP the_line = g_strdup_printf ("%s", coord_line[lid+i]); #else file_get_to_line (lid+i); the_line = g_strdup_printf ("%s", tail -> line); #endif the_word = strtok_r (the_line, " ", & saved_line); if (the_word[0] == '_' || g_strcmp0(the_word, "loop_") == 0) { res = TRUE; break; } else { i ++; } } if (i) { this_reader -> sym_pos = g_malloc0(i*sizeof*this_reader -> sym_pos); int j, k; gchar * str; gchar * k_word; gchar * sym_pos_line; for (j=0; j sym_pos[j] = g_malloc0(3*sizeof*this_reader -> sym_pos[j]); #ifdef OPENMP sym_pos_line = g_strdup_printf ("%s", coord_line[lid+j]); #else file_get_to_line (lid+j); sym_pos_line = g_strdup_printf ("%s", tail -> line); #endif the_line = g_strdup_printf ("%s", sym_pos_line); the_word = strtok_r (the_line, " ", & saved_line); k_word = g_strdup_printf ("%s", the_word); str = g_strdup_printf ("%d", j+1); if (g_strcmp0(k_word, str) == 0) { g_free (the_line); the_line = NULL; for (k=strlen(k_word); k sym_pos[j][k] = g_strdup_printf ("%s", the_word); the_word = strtok_r (NULL, " ", & saved_line); } #ifdef DEBUG g_debug ("SYM_POS:: pos= %d, x= %s, y= %s, z= %s", j+1, this_reader -> sym_pos[j][0], this_reader -> sym_pos[j][1], this_reader -> sym_pos[j][2]); #endif // DEBUG } } return i; } /*! \fn gboolean cif_get_symmetry_positions (int linec, int conf) \brief read the symmetry positions from the CIF file \param linec total number of lines \param conf configuration to read */ gboolean cif_get_symmetry_positions (int linec, int conf) { gchar * pos_key[2]={"_symmetry_equiv_pos_as", "_space_group_symop_operation"}; int loop_line; int line_id; int i; for (i=0; i<2; i++) { loop_line = get_loop_line_for_key (linec, conf, pos_key[i], "xyz"); if (loop_line) { line_id = cif_get_value (pos_key[i], "xyz", loop_line, linec, NULL, FALSE, FALSE, FALSE, FALSE, NULL); break; } } if (! loop_line) return FALSE; // Read lines after the instruction, as many positions as line until _ or loop this_reader -> num_sym_pos = cif_file_get_number_of_positions (line_id); return TRUE; } /*! \fn int get_space_group_from_hm (gchar * hmk) \brief retrieve space group using the HM Key \param hmk */ int get_space_group_from_hm (gchar * hmk) { int i; gchar * str; gchar * hm = replace_markup (hmk, "S", NULL); for (i=0; i<230; i++) { str = substitute_string (hmsymbols[i], " ", NULL); if (g_strcmp0(str, hm) == 0) { g_free (str); g_free (hm); return i+1; } g_free (str); str = substitute_string (groups[i], "", NULL); str = substitute_string (str, "", NULL); if (g_strcmp0(str, hm) == 0) { g_free (str); g_free (hm); return i+1; } g_free (str); } // Cross checking for erroneus writting in the CIF file // ie. Fm3m in place of Fm-3m for (i=0; i<230; i++) { str = substitute_string (groups[i], "", NULL); str = substitute_string (str, "", NULL); if (g_strrstr(str, "-")) { str = substitute_string (str, "-", NULL); if (g_strcmp0(str, hm) == 0) { g_free (str); g_free (hm); return i+1; } } g_free (str); } g_free (hm); return 0; } /*! \fn gchar * get_string_from_origin (space_group * spg) \brief get the space group origin from its name \param spg space group */ gchar * get_string_from_origin (space_group * spg) { gchar * str = NULL; if (wnpos[1]) { g_free (wnpos[1]); wnpos[1] = NULL; } get_wyck_char (spg -> coord_origin.m01, 1, 0); get_wyck_char (spg -> coord_origin.m11, 1, 1); get_wyck_char (spg -> coord_origin.m21, 1, 2); if (wnpos[1]) { str = g_strdup_printf ("%s", wnpos[1]); g_free (wnpos[1]); wnpos[1] = NULL; } return str; } /*! \fn int get_setting_from_hm (gchar * hmk, int end) \brief Getting the space group parameters using the HM Key \param hmk the HM key \param end use origin (number of possible SP origins), or not (-1) */ int get_setting_from_hm (gchar * hmk, int end) { int i, j; gchar * str; if (this_reader -> lattice.sp_group) { i = this_reader -> lattice.sp_group -> nums; for (j=0; j lattice.sp_group -> settings[j].name, "s", "/"); str = substitute_string (str, "_", NULL); if (end < 0) { if (g_strcmp0(str, hmk) == 0) { g_free (str); return j; } } else { if (g_strcmp0(str, hmk) == 0 && this_reader -> lattice.sp_group -> settings[j].origin == end+1) { g_free (str); return j; } } g_free (str); } if (this_reader -> lattice.sp_group -> id > 2 && this_reader -> lattice.sp_group -> id < 16) { // This is a way around the way this familly of SG is often written, // using incomplete or inexact hmk keyword, ex: P21/a instead of P121/a1 for (j=0; j lattice.sp_group -> settings[j].name, "s", "/"); str = substitute_string (str, "_", NULL); str = substitute_string (str, "12", "2"); str = substitute_string (str, "/a1", "/a"); str = substitute_string (str, "/b1", "/b"); str = substitute_string (str, "/c1", "/c"); str = substitute_string (str, "/m1", "/m"); str = substitute_string (str, "/n1", "/n"); if (end < 0) { if (g_strcmp0(str, hmk) == 0) { g_free (str); str = g_strdup_printf (_("Space group: CIF file information could be inaccurate !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n"), groups[this_reader -> lattice.sp_group -> id-1], hmk); add_reader_info (str, 1); g_free (str); return j; } } else { if (g_strcmp0(str, hmk) == 0 && this_reader -> lattice.sp_group -> settings[j].origin == end+1) { g_free (str); str = g_strdup_printf (_("Space group: CIF file information could be inaccurate !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n"), groups[this_reader -> lattice.sp_group -> id-1], hmk); add_reader_info (str, 1); g_free (str); return j; } } g_free (str); } } return -1; } else { return -1; } } /*! \fn int group_info_from_hm_key (int spg, gchar * key_hm) \brief get the space group information using the HM key from the CIF file \param spg space group \param key_hm HM key */ int group_info_from_hm_key (int spg, gchar * key_hm) { int i, j; gchar * str; gchar * exts[2] = {"h", "r"}; gchar * orig[2] = {"1", "2"}; gchar * key = NULL; gchar * hmk = NULL; gchar * hma, * hmb; gchar * hmkey = substitute_string (key_hm, "'", NULL); //hmkey = substitute_string (hmkey, "/", "s"); this_reader -> setting = -1; if (strstr(hmkey,":")) { key = g_strdup_printf ("%s", hmkey); hmk = g_strdup_printf ("%s", strtok (key, ":")); hma = g_strdup_printf ("%s:", hmk); hmb = replace_markup (hmkey, hma, NULL); i = strlen(hmb); hmb = g_ascii_strdown (hmb, i); for (i=0; i<2; i++) { if (g_strcmp0(hmb, exts[i]) == 0) { this_reader -> setting = i; break; } } g_free (hma); g_free (key); if (this_reader -> setting < 0) { for (i=0; i<2; i++) { if (g_strcmp0(hmb, orig[i]) == 0) { j = get_space_group_from_hm (hmk); this_reader -> setting = (spg) ? get_setting_from_hm (hmk, i) : 0; if (! j && this_reader -> setting < 0) { this_reader -> setting = 0; str = g_strdup_printf (_("Space group: CIF file information could be inaccurate !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n"), groups[this_reader -> lattice.sp_group -> id-1], key_hm); add_reader_info (str, 1); g_free (str); } if (this_reader -> setting < 0) this_reader -> setting = 0; g_free (hmk); g_free (hmb); return j; } } } g_free (hmb); } else { hmk = g_strdup_printf ("%s", hmkey); } j = get_space_group_from_hm (hmk); this_reader -> setting = (spg || j) ? get_setting_from_hm (hmk, -1) : 0; g_free (hmk); if (! j && this_reader -> setting < 0) { str = g_strdup_printf (_("Space group: CIF file information could be inaccurate !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n"), groups[this_reader -> lattice.sp_group -> id-1], key_hm); add_reader_info (str, 1); g_free (str); } if (this_reader -> setting < 0) this_reader -> setting = 0; return (spg) ? (j) ? j : spg : j; } /*! \fn gboolean cif_get_cell_data (int linec, int conf) \brief get the cell data from the CIF file \param linec total number of lines \param conf configuration to read */ gboolean cif_get_cell_data (int linec, int conf) { gchar * cellkeys[3] = {"length_a", "length_b", "length_c"}; gchar * cellangs[3] = {"angle_alpha", "angle_beta", "angle_gamma",}; int i, j; gchar * str = NULL; if (! conf || (conf && active_project -> steps == 1)) { this_reader -> lattice.box = g_malloc0(active_project -> steps*sizeof*this_reader -> lattice.box); } i = (conf && active_project -> steps == 1) ? 0 : conf; for (j=0; j<3; j++) { str = cif_retrieve_value (linec, conf, "_cell", cellkeys[j], TRUE, TRUE, TRUE); if (! str) { str = g_strdup_printf (_("Lattice parameters: impossible to retrieve the '%s' parameter !\n"), box_prop[0][j]); add_reader_info (str, 0); g_free (str); return FALSE; } this_reader -> lattice.box[i].param[0][j] = string_to_double ((gpointer)str); if (i) { if (this_reader -> lattice.box[i].param[0][j] != this_reader -> lattice.box[i-1].param[0][j]) active_cell -> npt = TRUE; } #ifdef DEBUG g_debug ("CIF:: box[%d][%d]= %f", i, j, this_reader -> lattice.box[i].param[0][j]); #endif g_free (str); str = cif_retrieve_value (linec, conf, "_cell", cellangs[j], TRUE, TRUE, TRUE); if (! str) { str = g_strdup_printf (_("Lattice parameters: impossible to retrieve the '%s' parameter !\n"), box_prop[1][j]); add_reader_info (str, 0); g_free (str); return FALSE; } this_reader -> lattice.box[i].param[1][j] = string_to_double ((gpointer)str); g_free (str); if (i) { if (this_reader -> lattice.box[i].param[1][j] != this_reader -> lattice.box[i-1].param[1][j]) active_cell -> npt = TRUE; } #ifdef DEBUG g_debug ("CIF:: angle[%d][%d]= %f", i, j, this_reader -> lattice.box[i].param[1][j]); #endif } this_reader -> lattice.ltype = 0; compute_lattice_properties (& this_reader -> lattice, i); for (i=0; i<3; i++) this_reader -> lattice.cextra[i] = 1; return TRUE; } /*! \fn int cif_get_space_group (int linec, int conf) \brief get the space group from the CIF file \param linec total number of lines \param conf configuration to read */ int cif_get_space_group (int linec, int conf) { gchar * symkey[2] = {"int_tables_number", "group_it_number"}; gchar * str = NULL; int spg = 0; int i, j, k, l; for (i=0; i<2; i++) { str = cif_retrieve_value (linec, conf, "_symmetry", symkey[i], TRUE, FALSE, FALSE); if (str) { spg = (int)string_to_double ((gpointer)str); break; } } if (! spg) { str = cif_retrieve_value (linec, conf, "_space_group", "it_number", TRUE, FALSE, FALSE); if (str) { spg = (int)string_to_double ((gpointer)str); } } gchar * hmkey = NULL; hmkey = cif_retrieve_value (linec, conf, "_symmetry", "space_group_name_h-m", TRUE, FALSE, FALSE); if (! hmkey) { hmkey = cif_retrieve_value (linec, conf, "_symmetry", "name_h-m_alt", TRUE, FALSE, FALSE); } if (! hmkey && ! spg) { add_reader_info (_("Space group: no space group and no H-M symbol found !\n"), 1); return FALSE; } #ifdef DEBUG if (spg) g_debug ("CIF:: Space group:: N°= %d, name= %s", spg, groups[spg-1]); if (hmkey) g_debug ("CIF:: H-M symbol:: %s", hmkey); #endif if (spg) { if (! read_space_group (NULL, spg-1)) return FALSE; } if (hmkey) { i = group_info_from_hm_key (spg, hmkey); if (! spg && ! i) { add_reader_info (_("Space group: no space group found, unknown H-M symbol !\n"), 1); #ifdef DEBUG g_debug ("CIF:: No space group found, unknown H-M symbol !"); #endif } else if (spg && ! i) { str = g_strdup_printf (_("Space group: space group and H-M symbol do not match !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n"), groups[spg-1], hmkey); add_reader_info (str, 1); g_free (str); #ifdef DEBUG g_debug ("CIF:: Space group and H-M symbol do not match:: spg= %d, hm= %d", spg, i); #endif } else if (i && ! spg) { spg = i; } if (! this_reader -> lattice.sp_group) { if (! read_space_group (NULL, spg-1)) return FALSE; } } gchar * lat; int res = spg; if (spg > 1) { str = cif_retrieve_value (linec, conf, "_space_group", "it_coordinate_system_code", TRUE, FALSE, FALSE); if (str) { str = substitute_string (str, "'", NULL); for (i=0; i<40; i++) { if (g_strcmp0(str, cif_coord_opts[i][0]) == 0) { if (i < 18) { if (spg < 3 || spg > 15) { res = 0; break; } if (str[0] == '-') { k = (int) string_to_double ((gpointer)g_strdup_printf ("%c", str[2])); str = g_strdup_printf ("%c%c", str[0], str[1]); } else { k = (int) string_to_double ((gpointer)g_strdup_printf ("%c", str[1])); str = g_strdup_printf ("%c", str[0]); } l = 0; for (j=0; j< this_reader -> lattice.sp_group -> nums; j++) { this_reader -> lattice.sp_group -> sid = j; get_origin (this_reader -> lattice.sp_group); lat = get_string_from_origin (this_reader -> lattice.sp_group); if (g_strcmp0(lat, str) == 0) l ++; if (l == k) { if (j < this_reader -> setting) add_reader_info (_("Space group: ambiguous space group setting !\n"), 1); this_reader -> setting = j; break; } } } else if (i < 36) { if (spg < 16 || spg > 74) { res = 0; break; } k = 0; if (str[0] == '1' || str[0]=='2') { k = (int) string_to_double ((gpointer)g_strdup_printf ("%c", str[0])); str = replace_markup (str, g_strdup_printf("%d", k), NULL); } l = 0; for (j=0; j< this_reader -> lattice.sp_group -> nums; j++) { lat = g_strdup_printf ("%s%s%s", this_reader -> lattice.sp_group -> settings[j].pos[0], this_reader -> lattice.sp_group -> settings[j].pos[1], this_reader -> lattice.sp_group -> settings[j].pos[2]); if (g_strcmp0(lat, str) == 0) { if (j < this_reader -> setting || this_reader -> lattice.sp_group -> settings[j].origin != k) { add_reader_info (_("Space group: ambiguous space group setting !\n"), 1); } this_reader -> setting = j; l = 1; break; } } if (! l) add_reader_info (_("Space group: ambiguous space group setting !\n"), 1); } else if (i < 38) { if (spg < 75 || (spg > 142 && spg < 195)) { res = 0; break; } j = i - 36; if (j < this_reader -> setting) add_reader_info (_("Space group: ambiguous space group setting !\n"), 1); this_reader -> setting = j; } else { if (spg < 143 || spg > 165) { res = 0; break; } j = i - 38; if (j < this_reader -> setting) add_reader_info (_("Space group: ambiguous space group setting !\n"), 1); this_reader -> setting = j; } } } g_free (str); } if (spg > 142 && spg < 168) { // Trigonal space group gboolean correct_this = FALSE; box_info * box = (conf && active_project -> steps == 1) ? & this_reader -> lattice.box[0] : & this_reader -> lattice.box[conf]; switch (this_reader -> setting) { case 0: if (box -> param[0][0] == box -> param[0][1] && box -> param[0][0] == box -> param[0][2]) { if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == box -> param[1][2]) { correct_this = TRUE; } } break; case 1: if (box -> param[0][0] == box -> param[0][1] && box -> param[0][0] != box -> param[0][2]) { if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == 90.0 && box -> param[1][2] == 120.0) { correct_this = TRUE; } } break; } if (correct_this) { gchar * setc[2] = {i18n("hexagonal"), i18n("rhombohedral")}; str = g_strdup_printf (_("Space group: found trigonal space group N°%d-%s, %s setting\n" "but the lattice parameters were found in %s format ...\n" "\t ... the space group setting was modified accordingly !\n"), spg, groups[spg-1], _(setc[this_reader -> setting]), _(setc[! this_reader -> setting])); add_reader_info (str, 1); g_free (str); this_reader -> setting = ! this_reader -> setting; } } // Test space group vs. box parameters: this_reader -> lattice.sp_group -> sid = this_reader -> setting; if (! test_lattice (NULL, & this_reader -> lattice)) { str = g_strdup_printf (_("Space group and lattice parameters are not compatible !\n" "\nCheck a, b, c, and α, β, ɣ, with the type of crystal system.\n")); add_reader_info (str, 0); g_free (str); res = -1; } } this_reader -> lattice.sp_group -> sid = this_reader -> setting; get_origin (this_reader -> lattice.sp_group); return res; } /*! \fn int open_cif_configuration (int line_start, int line_end, int cif_step) \brief open CIF configuration in CIF file \param linec total number of lines \param conf configuration to read */ int open_cif_configuration (int linec, int conf) { int res; int i, j, k, l, m, n; int cid; if (cif_get_cell_data (linec, conf)) { i = cif_get_space_group (linec, conf); if (conf && active_project -> steps > 1 && i != saved_group) { #ifdef DEBUG g_debug ("CIF:: SP group changes between configuration:: conf= %d, saved_group= %d, new_group= %d", conf, saved_group, i); #endif add_reader_info (_("Space group changes between configurations !\n"), 0); return 3; } else if (i > 0) { saved_group = i; #ifdef DEBUG g_debug ("CIF:: SP setting:: %d, name= %s", this_reader -> setting+1, this_reader -> lattice.sp_group -> settings[this_reader -> setting].name); #endif if (this_reader -> lattice.sp_group) get_origin (this_reader -> lattice.sp_group); } else if (i == 0) { // No space group found #ifdef DEBUG g_debug ("CIF:: Impossible to retrieve space group information !"); #endif } else if (cif_multiple && ! this_reader -> cartesian) { // Error in space group return 3; } } else if (! this_reader -> cartesian) { // Error no cell data using fractional coordinates return 3; } // Reading positions if (cif_get_symmetry_positions (linec, conf)) { if (! cif_use_symmetry_positions && this_reader -> num_sym_pos) { add_reader_info (_("Symmetry position(s) in CIF file\n"), 1); } } if (cif_use_symmetry_positions && ! this_reader -> num_sym_pos) { add_reader_info (_("No symmetry position(s) in CIF file\n"), 0); return 3; } if (cif_get_atomic_coordinates (linec, conf)) { cid = (conf && active_project -> steps == 1) ? 0 : conf; if (! this_reader -> cartesian) { for (i=0; i<3; i++) { for (j=0; j<3; j++) { if (i < 2) { active_cell -> box[cid].param[i][j] = this_reader -> lattice.box[cid].param[i][j]; } active_cell -> box[cid].vect[i][j] = this_reader -> lattice.box[cid].vect[i][j]; } } active_cell -> ltype = 1; active_cell -> pbc = TRUE; active_cell -> has_a_box = TRUE; if (this_reader -> lattice.sp_group) { active_cell -> crystal = TRUE; active_cell -> sp_group = duplicate_space_group (this_reader -> lattice.sp_group); } } res = 0; if (cif_use_symmetry_positions) { gchar * str = g_strdup_printf (_("Building crystal using symmetry positions: \n" " 1) evaluate candidate atomic positions using data in CIF file: \n" " - symmetry positions\n" " - atomic coordinates + occupancy\n" " 2) fill each candidate position using the associated occupancy: \n" " - occupancy %s\n" " - %s\n"), cif_occ[this_reader -> rounding], cif_sites[1]); add_reader_info (str, 1); g_free (str); this_reader -> cartesian = TRUE; compute_lattice_properties (active_cell, cid); double spgpos[3][4]; int max_pos = this_reader -> num_sym_pos * this_reader -> natomes; gboolean dist_message = FALSE; gboolean low_occ = FALSE; gboolean save_it; vec3_t f_pos, c_pos; gboolean * save_pos = allocbool (max_pos); mat4_t pos_mat; atom at, bt; distance dist; double u; vec3_t * all_pos = g_malloc0(max_pos*sizeof*all_pos); int * all_origin = allocint (max_pos); int * cif_pos = allocint (this_reader -> natomes); double ** cryst_pos = allocddouble (this_reader -> natomes, 3); double ** occ_pos = g_malloc0(sizeof*occ_pos); int ** lot_pos = g_malloc0(sizeof*lot_pos); double * list_occ = allocdouble (this_reader -> natomes); double val; int vbl; int * list_pos = allocint (this_reader -> natomes); for (i=0; i natomes; i++) { list_pos[i] = i; list_occ[i] = this_reader -> occupancy[i]; } for (i=1; i natomes; i++) { val = list_occ[i]; vbl = list_pos[i]; for (j=i-1; j>-1; j--) { if (list_occ[j] >= val) break; list_occ[j+1] = list_occ[j]; list_pos[j+1] = list_pos[j]; } list_occ[j+1] = val; list_pos[j+1] = vbl; } int num_pos = 0; int pos_max = 0; // The following might be modified for reaction CIF: // - this_reader -> coord[i] and this_readaer -> coord[j] are not necessarily equal // - both the disorder group and the occupancy matters in place of the coordinates for (i=0; i<2; i++) { for (j=0; j natomes; j++) { k = list_pos[j]; if (! j) { num_pos = 0; for (l=0; l<3; l++) cryst_pos[num_pos][l] = this_reader -> coord[k][l]; cif_pos[num_pos] = 1; if (i) { occ_pos[num_pos][0] = this_reader -> occupancy[k]; lot_pos[num_pos][0] = this_reader -> lot[k]; } num_pos ++; pos_max = 1; } else { save_it = TRUE; for (l=0; l coord[k][0] == cryst_pos[l][0] && this_reader -> coord[k][1] == cryst_pos[l][1] && this_reader -> coord[k][2] == cryst_pos[l][2]) { save_it = FALSE; break; } } if (save_it) { for (l=0; l<3; l++) cryst_pos[num_pos][l] = this_reader -> coord[k][l]; cif_pos[num_pos] = 1; if (i) { occ_pos[num_pos][0] = this_reader -> occupancy[k]; lot_pos[num_pos][0] = this_reader -> lot[k]; } num_pos ++; } else { if (i) { occ_pos[l][cif_pos[l]] = this_reader -> occupancy[k]; lot_pos[l][cif_pos[l]] = this_reader -> lot[k]; } cif_pos[l] ++; pos_max = max (pos_max, cif_pos[l]); } } } if (! i) { occ_pos = allocddouble (num_pos, pos_max); lot_pos = allocdint (num_pos, pos_max); } } g_free (list_occ); g_free (list_pos); for (i=0; i num_sym_pos; i++) { for (j=0; j<3; j++) { tmp_pos = g_strdup_printf ("%s", this_reader -> sym_pos[i][j]); for (k=0; k<3; k++) { spgpos[j][k] = get_val_from_wyckoff (vect_comp[k], this_reader -> sym_pos[i][j]); } if (tmp_pos) { spgpos[j][3] = get_value_from_pos (tmp_pos); g_free (tmp_pos); tmp_pos = NULL; } else { spgpos[j][3] = 0.0; } } pos_mat = mat4 (spgpos[0][0], spgpos[0][1], spgpos[0][2], spgpos[0][3], spgpos[1][0], spgpos[1][1], spgpos[1][2], spgpos[1][3], spgpos[2][0], spgpos[2][1], spgpos[2][2], spgpos[2][3], 0.0, 0.0, 0.0, 1.0); for (j=0; j lattice.box[cid].frac_to_cart, f_pos); all_pos[l].x = c_pos.x; all_pos[l].y = c_pos.y; all_pos[l].z = c_pos.z; all_origin[l] = j; save_it = TRUE; if (l) { at.x = all_pos[l].x; at.y = all_pos[l].y; at.z = all_pos[l].z; for (k=0; k rounding)) { CPU_time = clock (); m = (CPU_time - (j+17)*all_id[i]); prob = random3_(& m); m = round (prob * (all_id[i]-1)); pick_it = ! taken_pos[i][m]; if (pick_it) { site_lot[i][m] = k; taken_pos[i][m] = TRUE; l ++; tot_pos ++; } } } } crystal_data * cryst = allocate_crystal_data (tot_pos, this_reader -> nspec + this_reader -> object_to_insert); i = 0; int * cryst_lot = allocint (cryst -> objects); int * from_origin = allocint (num_pos); for (j=0; j coord[i] = g_malloc0(sizeof*cryst -> coord[i]); cryst -> coord[i][0].x = all_pos[j].x; cryst -> coord[i][0].y = all_pos[j].y; cryst -> coord[i][0].z = all_pos[j].z; cryst -> pos_by_object[i] = 1; cryst_lot[i] = site_lot[k][l]; if (cryst_lot[i] < 0) { cryst -> at_by_object[i] = get_atomic_object_by_origin (cif_object, - cryst_lot[i] - 1, 0) -> atoms; } else { cryst -> at_by_object[i] = 1; } i ++; } from_origin[k] ++; } } g_free (site_lot); g_free (all_origin); g_free (from_origin); g_free (all_pos); g_free (save_pos); g_free (taken_pos); g_free (all_id); i = 0; for (j=0; j objects; j++) { i += cryst -> at_by_object[j] * cryst -> pos_by_object[j]; } if (! conf || active_project -> steps == 1) { active_project -> natomes = i; allocatoms (active_project); } atomic_object * c_obj; int * spec_num = allocint (120); i = 0; for (j=0; j objects; j++) { if (cryst_lot[j] < 0) { k = - cryst_lot[j] - 1; c_obj = get_atomic_object_by_origin (cif_object, k, 0); for (l=0; l atoms; l++) { m = c_obj -> at_list[l].sp; n = c_obj -> old_z[m]; spec_num[n] ++; active_project -> atoms[cid][i].sp = n; active_project -> atoms[cid][i].x = cryst -> coord[j][0].x + c_obj -> at_list[l].x; active_project -> atoms[cid][i].y = cryst -> coord[j][0].y + c_obj -> at_list[l].y; active_project -> atoms[cid][i].z = cryst -> coord[j][0].z + c_obj -> at_list[l].z; i ++; } } else { k = (int)this_reader -> z[cryst_lot[j]]; spec_num[k] ++; active_project -> atoms[cid][i].sp = k; active_project -> atoms[cid][i].x = cryst -> coord[j][0].x; active_project -> atoms[cid][i].y = cryst -> coord[j][0].y; active_project -> atoms[cid][i].z = cryst -> coord[j][0].z; i ++; } } g_free (this_reader -> nsps); int * tmp_nsps = allocint (120); int * tmp_spid = allocint (120); i = 0; for (j=0; j<120; j++) { if (spec_num[j]) { tmp_nsps[i] = spec_num[j]; tmp_spid[j] = i; i++; } } this_reader -> nspec = i; this_reader -> nsps = allocint (i); for (i=0; i nspec; i++) this_reader -> nsps[i] = tmp_nsps[i]; g_free (tmp_nsps); g_free (this_reader -> z); this_reader -> z = allocdouble (i); i = 0; for (j=0; j<120; j++) { if (spec_num[j]) { this_reader -> z[i] = (double)j; i ++; } } for (i=0; i natomes; i++) { j = active_project -> atoms[cid][i].sp; k = tmp_spid[j]; active_project -> atoms[cid][i].sp = k; } g_free (tmp_spid); if (low_occ) { add_reader_info (_("The crystal will be created however some objects might be missing,\n" "Occupancy is too low compared to the number of site(s) per cell.\n\n" "To build a crystal matching the defined occupancy:\n" "\t 1) If you are trying to read a CIF file, use the crystal builder instead.\n" "\t 2) Modify the occupancy set-up to 'Completely random'.\n" "\t 3) Increase the number of unit cells up to get rid of this message.\n\n"), 1); } if (dist_message) { add_reader_info (_("Object(s) at equivalent positions have been removed\n" "to ensure the consistency of the model\n" "when using Periodic Boundary Conditions\n "), 1); } } } else { // No coordinates found #ifdef DEBUG g_debug ("CIF:: Impossible to retrieve atomic coordinates !"); #endif res = 2; } return res; } /*! \fn int open_cif_file (int linec) \brief open CIF file \param linec Total number of lines */ int open_cif_file (int linec) { gchar * frackeys[3] = {"fract_x", "fract_y", "fract_z"}; gchar * cartkeys[3] = {"cartn_x", "cartn_y", "cartn_z"}; gchar * str = NULL; int cif_action = 0; int cif_step = 1; int cif_site; int cif_occup = 0; int i, j; cif_multiple = TRUE; // Determine the number of configuration(s) by checking the presence // of the instruction used to declare atomic coordinates this_reader -> steps = cif_get_value ("_atom_site", frackeys[0], 0, linec, NULL, FALSE, FALSE, TRUE, FALSE, NULL); if (! this_reader -> steps) { this_reader -> steps = cif_get_value ("_atom_site", cartkeys[0], 0, linec, NULL, FALSE, FALSE, TRUE, FALSE, NULL); this_reader -> cartesian = TRUE; } else { // How to treat occupancy cif_occup = cif_get_value ("_atom_site", _("occupancy"), 0, linec, NULL, FALSE, FALSE, TRUE, FALSE, NULL); if (cif_occup) { this_reader -> rounding = iask (_("Please select how to handle occupancy"), _("Select how to handle occupancy"), 5, MainWindow); if (this_reader -> rounding < 0 || this_reader -> rounding > 2) this_reader -> rounding = 2; if (! cif_use_symmetry_positions) { str = g_strdup_printf (_("Occupancy %s\n\t%s\n"), cif_occ[this_reader -> rounding], cif_sites[cif_use_symmetry_positions]); add_reader_info (str, 1); g_free (str); } } } if (this_reader -> steps > 1) { str = g_strdup_printf (_("It seems the CIF file contains %d distinct configurations\n"), this_reader -> steps); add_reader_info (str, 1); g_free (str); if (cif_use_symmetry_positions) { str = g_strdup_printf (_("Impossible to use symmetry positions with multiple configurations\n")); add_reader_info (str, 1); g_free (str); } } if (this_reader -> steps > 1 && ! cif_use_symmetry_positions) { cif_site = cif_get_value ("_atom_site", "disorder_group", 0, linec, NULL, FALSE, FALSE, TRUE, FALSE, NULL); if (cif_occup == this_reader -> steps && cif_occup == cif_site) { add_reader_info (_("This CIF file could be describing a trajectory or a chemical reaction.\n"), 1); // This is where to ask what to do ! // Read like a chemical reaction: read one configuration sort coordinates by occupancy // Read all as trajectory CIF file: forget about using occupancy to sort coordinates // - possible if the number of atom(s) by configuration remains constant // Read only a selected configuration and: // - read as normal CIF file, forget about using occupancy to sort coordinates // Because what follow will depend on this choice /* cif_action = iask ("Please select how to process the data in the CIF file", "Select how to process data", 3, MainWindow); this_reader -> chemical = ! cif_action; cif_action = (cif_action == 1) ? 0 : 1; */ cif_action = iask (_("Please select how to process the data in the CIF file"), _("Select how to process data"), 4, MainWindow); } else { add_reader_info (_("This CIF file could be describing a trajectory.\n"), 1); cif_action = iask (_("Please select how to process the data in the CIF file"), _("Select how to process data"), 4, MainWindow); } } else { cif_action = 1; } if (cif_action && this_reader -> steps > 1) { // We need to select the step to work on str = g_strdup_printf (_("Select the configuration c, c ∈ [1-%d]"), this_reader -> steps); cif_step = 0; while (! cif_step) { cif_step = iask (_("Please select the configuration to work on"), str, 0, MainWindow); if (cif_step < 1 || cif_step > this_reader -> steps) cif_step = 0; } g_free (str); } if (cif_action) { active_project -> steps = 1; if (this_reader -> steps > 1) { str = g_strdup_printf (_("Working on configuration N°%d\n"), cif_step); add_reader_info (str, 1); g_free (str); } } if (cif_action) { return open_cif_configuration (linec, cif_step - 1); } else { active_project -> steps = this_reader -> steps; g_free (active_cell -> box); active_cell -> box = g_malloc0(this_reader -> steps*sizeof*active_cell -> box); // For each configuration open it: i = 0; for (j=0; j steps; j++) { this_reader -> nspec = 0; if (this_reader -> nsps) { g_free (this_reader -> nsps); this_reader -> nsps = NULL; } i = open_cif_configuration (linec, j); if (i) return i; } return 0; } } atomes_1.3.1/src/project/readers/read_vas.c0000664000175000017500000001544215212624223020325 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_vas.c * @short Functions to read VASP atomic coordinates * @author Sébastien Le Roux */ /* * This file: 'read_vas.c' * * Contains: * - The functions to read VASP atomic coordinates * * List of functions: int vas_get_atom_coordinates (int sli); int open_vas_file (int linec); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "bind.h" #include "readers.h" #ifdef OPENMP # include #endif /*! \fn int vas_get_atom_coordinates (int sli) \brief get the atomic coordinates from the VASP file \param sli Correction parameters depending on the VASP file version */ int vas_get_atom_coordinates (int sli) { int i, j, k, l; gchar * lia[4] = {"a", "b", "c", "d"}; allocatoms (active_project); #ifdef OPENMP int res; int numth = omp_get_max_threads (); gboolean doatoms = FALSE; gchar * saved_line; if (active_project -> steps < numth) { if (numth >= 2*(active_project -> steps-1)) { doatoms = TRUE; } else { numth = active_project -> steps; } } if (doatoms) { // OpenMP on atoms res = 0; for (i=0; i steps; i++) { k = 1 + i*(active_project -> natomes + 1) + sli; #pragma omp parallel for num_threads(numth) private(j,this_line,saved_line,this_word) shared(i,k,lia,coord_line,active_project,res) for (j=0; j natomes; j++) { if (res == 2) goto enda; this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto enda; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto enda; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto enda; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); g_free (this_line); enda:; } if (res == 2) break; } } else { res = 0; #pragma omp parallel for num_threads(numth) private(i,j,k,this_line,saved_line,this_word) shared(lia,coord_line,active_project,res) for (i=0; i steps; i++) { if (res == 2) goto ends; k = 1 + i*(active_project -> natomes + 1) + sli; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j]); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto ends; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto ends; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto ends; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); g_free (this_line); } ends:; } } g_free (coord_line); if (res == 2) return 2; for (i=1; i steps; i++) { for (j=0; j natomes; j++) { if (active_project -> atoms[i-1][j].sp != active_project -> atoms[i][j].sp) { add_reader_info (g_strdup_printf (_("Error - chemical species changes between steps %d and %d, for atom %d !"), i, i+1, j+1), 0); return 2; } } } #else line_node * tmp_line; tail = head; k = 0; for (i=0; i next; g_free (tmp_line); k ++; } for (i=0; i steps; i++) { tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); if (! this_word) { format_error (i+1, j+1, lia[0], k); return 2; } active_project -> atoms[i][j].x = string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[1], k); return 2; } active_project -> atoms[i][j].y = string_to_double ((gpointer)this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[2], k); return 2; } active_project -> atoms[i][j].z = string_to_double ((gpointer)this_word); tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; } } #endif i = 0; for (j=0; j nspec; j++) { for (k=0; k nsps[j]; k++) { for (l=0; l steps; l++) { active_project -> atoms[l][i].sp = j; } i ++; } } return 0; } /*! \fn int open_vas_file (int linec) \brief open VASP file \param linec Number of lines in the file */ int open_vas_file (int linec) { int i, j; j = 0; for (i=5; i<8; i++) { if ((linec - i)%(this_reader -> natomes + 1) == 0) j = i; } if (! j) return 2; reader_info ("xdatcar", _("Number of atoms"), this_reader -> natomes); active_project -> steps = (linec-j) / (this_reader -> natomes + 1); reader_info ("xdatcar", _("Number of steps"), active_project -> steps); active_project -> natomes = this_reader -> natomes; return vas_get_atom_coordinates (j); } atomes_1.3.1/src/project/readers/read_isaacs.c0000664000175000017500000011142715212624223020777 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_isaacs.c * @short Functions to read an ISAACS XML file \n Functions to write an ISAACS XML file * @author Sébastien Le Roux */ /* * This file: 'read_isaacs.c' * * Contains: * - The functions to read an ISAACS XML file - The functions to write an ISAACS XML file * * List of functions: int XmlwriterFilename (const char *uri); int write_xml (const char * filetosave); int get_spec_from_data (xmlChar * data); int setprop (xmlNodePtr pnode); int testopening (char * tdata, char * tfichier); int setchemistry (xmlNodePtr xsnode); int setbox (xmlNodePtr boxnode); int setpbc (xmlNodePtr pbcnode); int setcutoffs (xmlNodePtr cutnode); int settime(xmlNodePtr timenode); int check_xml (const char * filetocheck); size_t strfind (char * ida); gboolean file_exists(const char * filename); gchar * open_xml (const char * filetoread); xmlNodePtr findnode (xmlNodePtr startnode, char * nname); */ #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" extern int open_coordinate_file (int id); #define NFORMATS 7 char * reg_types[NFORMATS] = {"XYZ file", "Chem3D file", "CPMD trajectory", "VASP trajectory", "multiple XYZ file", "multiple Chem3D file", "PDB file"}; /*! \fn size_t strfind (char * ida) \brief size of a string without spaces \param ida */ size_t strfind (char * ida) { size_t a, b, c; a = strlen(ida); b = 0; for ( c=0 ; c < a ; c++) { if (ida[c] != ' ') { b ++; } } return b; } /*! \fn int XmlwriterFilename (const char * uri) \brief write ISAACS XML file \param uri the file name */ int XmlwriterFilename (const char * uri) { int rc; int i, j; xmlTextWriterPtr writer; char * val; char * ncut; size_t lgt; /* Create a new XmlWriter for uri, with no compression. */ writer = xmlNewTextWriterFilename(uri, 0); if (writer == NULL) return 0; rc = xmlTextWriterSetIndent(writer, 1); if (rc < 0) return 0; /* Start the document with the xml default for the version, * encoding MY_ENCODING and the default for the standalone * declaration. */ rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL); if (rc < 0) return 0; rc = xmlTextWriterWriteComment(writer, (const xmlChar *)_(" I.S.A.A.C.S. v1.0 XML file ")); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST "isaacs-xml"); if (rc < 0) return 0; /* Start the "data" element. Since this is the first * element, this will be the root element of the document. */ rc = xmlTextWriterWriteComment(writer, (const xmlChar *)_(" Data format and file containing the configuration(s) ")); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"data"); if (rc < 0) return 0; int reg = 0; if (active_project -> tfile < 2) { reg = (active_project -> steps > 1) ? 4 : 0; } else if (active_project -> tfile == 2) { reg = (active_project -> steps > 1) ? 5 : 1; } else if (active_project -> tfile < 5) { reg = 2; } else if (active_project -> tfile < 6) { reg = 3; } else if (active_project -> tfile < 9) { reg = 6; } else { return 0; } rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"type", "%s", reg_types[reg]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"file", "%s", active_project -> coordfile); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; /* Start the "chemistry" element. label id="0"> label> ... */ rc = xmlTextWriterWriteComment(writer, (const xmlChar *)_(" Chemistry information ")); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"chemistry"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"atoms", "%d", active_project -> natomes); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"species"); if (rc < 0) return 0; val = g_strdup_printf("%d",active_project -> nspec); rc = xmlTextWriterWriteAttribute(writer, BAD_CAST (const xmlChar *)"number", BAD_CAST val); g_free (val); if (rc < 0) return 0; for ( i=0 ; i nspec ; i++) { rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"label"); if (rc < 0) return 0; val = g_strdup_printf("%d",i); rc = xmlTextWriterWriteAttribute(writer, BAD_CAST (const xmlChar *)"id", BAD_CAST val); g_free (val); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatString (writer, "%s", active_chem -> label[i]); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; } rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; for ( i=0 ; i nspec ; i++) { rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"element"); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute(writer, BAD_CAST (const xmlChar *)"symbol", BAD_CAST active_chem -> label[i]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"name", "%s ", active_chem -> element[i]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"z", "%d", (int)active_chem -> chem_prop[CHEM_Z][i]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"mass", "%f", active_chem -> chem_prop[CHEM_M][i]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"rad", "%d", 0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"radius", "%f", active_chem -> chem_prop[CHEM_R][i]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"nscatt", "%f", active_chem -> chem_prop[CHEM_N][i]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"xscatt", "%f", active_chem -> chem_prop[CHEM_Z][i]); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; } rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; /* Start the "box" element. */ rc = xmlTextWriterWriteComment(writer, (const xmlChar *)_(" Box information ")); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"box"); if (rc < 0) return 0; if (active_cell -> ltype == 1) { rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"edges"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a", "%f", active_box -> param[0][0]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b", "%f", active_box -> param[0][1]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c", "%f", active_box -> param[0][2]); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"angles"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"alpha", "%f", active_box -> param[1][0]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"beta", "%f", active_box -> param[1][1]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"gamma", "%f", active_box -> param[1][2]); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; } else { rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"edges"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"angles"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"alpha", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"beta", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"gamma", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; } rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"vectors"); if (rc < 0) return 0; if (active_cell -> ltype == 2) { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a.x", "%f", active_box -> vect[0][0]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a.y", "%f", active_box -> vect[0][1]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a.z", "%f", active_box -> vect[0][2]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b.x", "%f", active_box -> vect[1][0]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b.y", "%f", active_box -> vect[1][1]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b.z", "%f", active_box -> vect[1][2]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c.x", "%f", active_box -> vect[2][0]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c.y", "%f", active_box -> vect[2][1]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c.z", "%f", active_box -> vect[2][2]); if (rc < 0) return 0; } else { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a.x", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a.y", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a.z", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b.x", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b.y", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b.z", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c.x", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c.y", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c.z", "%f", 0.0); if (rc < 0) return 0; } rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; /* Start the "pbc" element. */ rc = xmlTextWriterWriteComment(writer, (const xmlChar *)_(" PBC information ")); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"pbc"); if (rc < 0) return 0; if (active_cell -> pbc) { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"apply", "%s", "TRUE"); } else { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"apply", "%s", "FALSE"); } if (rc < 0) return 0; if (active_cell -> frac) { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"fractional", "%s", "TRUE"); } else { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"fractional", "%s", "FALSE"); } if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"fractype", "%d", active_cell -> frac); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; /* Start the "cutoffs" element. label[spi]-active_chem -> label[spj]> label[spi]-active_chem -> label[spj]> */ rc = xmlTextWriterWriteComment(writer, (const xmlChar *)_(" Cutoffs information ")); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"cutoffs"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"total", "%f", active_chem -> grtotcutoff); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"partials"); if (rc < 0) return 0; for ( i=0 ; i nspec ; i++ ) { for ( j=0 ; j nspec ; j++ ) { lgt = 10; lgt += strfind (active_chem -> label[i]) + strlen("-") + strfind(active_chem -> label[j]); ncut = g_malloc0(lgt*sizeof*ncut); strncpy (ncut, active_chem -> label[i], strfind(active_chem -> label[i])); strcat (ncut, "-"); strncat (ncut, active_chem -> label[j], strfind(active_chem -> label[j])); rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST ncut, "%f", active_chem -> cutoffs[i][j]); if (rc < 0) return 0; g_free (ncut); ncut=NULL; } } rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; /* Start the "time series" element.
*/ if (active_project -> steps > 1) { rc = xmlTextWriterWriteComment(writer, (const xmlChar *)_(" Time series ")); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"time-series"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"dt", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"unit", "t [%s]", untime[active_project -> tunit]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"ndt", "%d", 1); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; } /* Start the "project" element. */ rc = xmlTextWriterWriteComment(writer, (const xmlChar *)_(" Apply project ")); if (rc < 0) return 0; if (active_project -> run) { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"project", "%s", "TRUE"); } else { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"project", "%s", "FALSE"); } if (rc < 0) return 0; // Closing "" rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; rc = xmlTextWriterEndDocument(writer); if (rc < 0) return 0; xmlFreeTextWriter(writer); return 1; } /*! \fn int write_xml (const char * filetosave) \brief write XML file \param filetosave File to write */ int write_xml (const char * filetosave) { /* first, the file version */ int res=XmlwriterFilename(filetosave); /* * Cleanup function for the XML library. */ xmlCleanupParser(); /* * this is to debug memory for regression tests */ xmlMemoryDump(); return res; } /*! \fn gboolean file_exists(const char * filename) \brief file exists ? \param filename File name */ gboolean file_exists(const char * filename) { FILE * file; if ((file = fopen(filename, "r"))) { fclose(file); return TRUE; } return FALSE; } /*! \fn xmlNodePtr findnode (xmlNodePtr startnode, char * nname) \brief find XML node \param startnode Starting node \param nname Node name to find */ xmlNodePtr findnode (xmlNodePtr startnode, char * nname) { xmlNodePtr tmp; tmp = startnode; while (g_strcmp0 ((char *)(tmp -> name), nname) != 0) { if (tmp -> next == NULL) { return NULL; } tmp = tmp -> next; } return tmp; } /*! \fn int get_spec_from_data (xmlChar * data) \brief get atomic species from data \param data the data */ int get_spec_from_data (xmlChar * data) { int i; for ( i=0 ; i nspec ; i++) { if (g_strcmp0 (exact_name((char *)data), active_chem -> label[i]) == 0) { return i; } } return -1; } /*! \fn int setprop (xmlNodePtr pnode) \brief read chemical properties from XML node \param pnode the XML node */ int setprop (xmlNodePtr pnode) { int i, res; xmlAttrPtr pspec; xmlNodePtr idn, ptnode, ptn; xmlChar * data; ptnode=pnode; for ( i=0 ; i nspec ; i++) { ptnode = findnode(ptnode, "element"); if (ptnode == NULL) { res=6; goto pend; } pspec = ptnode -> properties; idn = pspec -> children; data = xmlNodeGetContent(idn); res = get_spec_from_data(data); xmlFree (data); if (res < 0) { res=6; goto pend; } ptnode = ptnode -> children; ptn = findnode(ptnode, "name"); if (ptn == NULL) { res=6; goto pend; } data = xmlNodeGetContent(ptn); if (g_strcmp0 (exact_name((char *)data), active_chem -> element[res]) != 0) { xmlFree (data); res=6; goto pend; } xmlFree (data); ptn = findnode(ptnode, "z"); if (ptn == NULL) { res=6; goto pend; } data = xmlNodeGetContent(ptn); if ((int)active_chem -> chem_prop[CHEM_Z][res] != (int)string_to_double ((gpointer)data)) { xmlFree (data); res=6; goto pend; } xmlFree (data); ptn = findnode(ptnode, "mass"); if (ptn == NULL) { res=6; goto pend; } data = xmlNodeGetContent(ptn); active_chem -> chem_prop[CHEM_M][res] = string_to_double ((gpointer)data); xmlFree (data); ptn = findnode(ptnode, "rad"); if (ptn == NULL) { res=6; goto pend; } data = xmlNodeGetContent(ptn); // val = string_to_double ((gpointer)data); xmlFree (data); ptn = findnode(ptnode, "radius"); if (ptn == NULL) { res=6; goto pend; } data = xmlNodeGetContent(ptn); active_chem -> chem_prop[CHEM_R][res] = string_to_double ((gpointer)data); xmlFree (data); ptn = findnode(ptnode, "nscatt"); if (ptn == NULL) { res=6; goto pend; } data = xmlNodeGetContent(ptn); active_chem -> chem_prop[CHEM_N][res] = string_to_double ((gpointer)data); xmlFree (data); ptn = findnode(ptnode, "xscatt"); if (ptn == NULL) { res=6; goto pend; } data = xmlNodeGetContent(ptn); active_chem -> chem_prop[CHEM_X][res] = string_to_double ((gpointer)data); xmlFree (data); ptnode = ptnode -> parent; ptnode = ptnode -> next; } res = 0; pend: return res; } /*! \fn int testopening (char * tdata, char * tfichier) \brief test atomic coordinates file opening \param tdata Type of coordinates \param tfichier File name */ int testopening (char * tdata, char * tfichier) { int i, j; char * err; j = -1; for ( i=0 ; i -1) { if (file_exists (tfichier)) { switch (j) { case 0: active_project -> tfile = 0; break; case 1: active_project -> tfile = 2; break; case 2: active_project -> tfile = 3; break; case 3: active_project -> tfile = 5; break; case 4: active_project -> tfile = 0; break; case 5: active_project -> tfile = 2; break; case 6: active_project -> tfile = 7; break; } active_project -> coordfile = tfichier; if (open_coordinate_file (active_project -> tfile) == 0) { return 0; } else { return 11; } } else { j=4; err=g_strdup_printf(_("The %s\n %s\n from the XML file does not exist\n"), tdata, tfichier); show_error (err, 0, MainWindow); g_free (err); return j; } } else { show_error (_("Unknown data format in XML file\n"), 0, MainWindow); j=4; return j; } } /*! \fn int setchemistry (xmlNodePtr xsnode) \brief read chemistry data from node \param xsnode the XML node */ int setchemistry (xmlNodePtr xsnode) { xmlNodePtr idn, cs, xnode; xmlAttrPtr xspec; xmlChar * data; int ats, res, i; double val; xnode = xsnode -> children; cs = findnode(xnode, "atoms"); if (cs == NULL) { res=5; goto xend; } data = xmlNodeGetContent(cs); val = string_to_double ((gpointer)data); ats = val; if (ats != active_project -> natomes) { show_warning (_("The number of atoms in the XML file\n" "is not the same that the number of atoms\n" "in the file containing the coordinates.\n" "Other information from the XML file\n" "will be ignored\n"), MainWindow); res=5; goto xend; } else { cs = findnode(xnode, "species"); if (cs == NULL) { res=5; goto xend; } xspec = cs -> properties; idn = xspec -> children; data = xmlNodeGetContent(idn); val = string_to_double ((gpointer)data); ats = val; if (ats != active_project -> nspec) { show_warning (_("The number of chemical species in the XML file\n" "is not the same that the number of chemical species\n" "in the file that contains the atomic coordinates.\n"), MainWindow); res = 5; goto xend; } else { cs = cs -> children; ats = 0; for ( i=0 ; i nspec ; i++) { cs = findnode(cs, "label"); if (cs == NULL) { res=5; goto xend; } data = xmlNodeGetContent(cs); res = get_spec_from_data (data); if (res < 0) { res=5; goto xend; } else { ats ++; } } if (ats != active_project -> nspec) { res=5; goto xend; } xnode = xsnode -> children; res = setprop (xnode); } } xend: return res; } /*! \fn int setbox (xmlNodePtr boxnode) \brief read box properties from node \param boxnode the XML node */ int setbox (xmlNodePtr boxnode) { int box; xmlNodePtr bnode, ba, bb; xmlChar * data; double val; bnode = boxnode -> children; ba=findnode(bnode, "edges"); if (ba == NULL) { box=7; goto bend; } ba = ba -> children; bb=findnode(ba, "a"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> param[0][0]= val; bb=findnode(ba, "b"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> param[0][1]= val; bb=findnode(ba, "c"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> param[0][2]= val; ba=findnode(bnode, "angles"); if (ba == NULL) { box=7; goto bend; } ba = ba -> children; bb=findnode(ba, "alpha"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> param[1][0] = val; bb=findnode(ba, "beta"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> param[1][1]= val; bb=findnode(ba, "gamma"); if (bb == NULL) { box=7; goto bend; } if (active_box -> param[0][0] != 0.0 && active_box -> param[0][1] != 0.0 && active_box -> param[0][2] != 0.0 && active_box -> param[1][0] != 0.0 && active_box -> param[1][1] != 0.0 && active_box -> param[1][2] != 0.0) { active_cell -> ltype = 1; } else { active_cell -> ltype = 0; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> param[1][2]= val; ba=findnode(bnode, "vectors"); if (ba == NULL) { box=7; goto bend; } ba = ba -> children; bb=findnode(ba, "a.x"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> vect[0][0]= val; bb=findnode(ba, "a.y"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> vect[0][1]= val; bb=findnode(ba, "a.z"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> vect[0][2]= val; bb=findnode(ba, "b.x"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> vect[1][0]= val; bb=findnode(ba, "b.y"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> vect[1][1]= val; bb=findnode(ba, "b.z"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> vect[1][2]= val; bb=findnode(ba, "c.x"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> vect[2][0]= val; bb=findnode(ba, "c.y"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> vect[2][1]= val; bb=findnode(ba, "c.z"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = string_to_double ((gpointer)data); active_box -> vect[2][2]= val; if (active_box -> vect[0][0] != 0.0 && active_box -> vect[0][1] != 0.0 && active_box -> vect[0][2] != 0.0 && active_box -> vect[1][0] != 0.0 && active_box -> vect[1][1] != 0.0 && active_box -> vect[1][2] != 0.0 && active_box -> vect[2][0] != 0.0 && active_box -> vect[2][1] != 0.0 && active_box -> vect[2][2] != 0.0) { active_cell -> ltype = 2; } box = 0; bend: return box; } /*! \fn int setpbc (xmlNodePtr pbcnode) \brief read the PBC information from node \param pbcnode the XML node */ int setpbc (xmlNodePtr pbcnode) { int pbc;//, j; xmlNodePtr pnode, bnode; xmlChar * data; //double val; pnode = pbcnode -> children; bnode=findnode(pnode, "apply"); if (bnode == NULL) { pbc=8; goto pend; } data = xmlNodeGetContent(bnode); active_cell -> pbc = 0; if (g_strcmp0 ((char *)data, (char *)"TRUE") == 0) { active_cell -> pbc = 1; } xmlFree (data); bnode=findnode(pnode, "fractional"); if (bnode == NULL) { pbc=8; goto pend; } data = xmlNodeGetContent(bnode); active_cell -> frac = 0; if (g_strcmp0 ((char *)data, (char *)"TRUE") == 0) { xmlFree (data); bnode=findnode(pnode, "fractype"); if (bnode == NULL) { pbc=8; goto pend; } data = xmlNodeGetContent(bnode); //val=string_to_double ((gpointer)data); //j = val; xmlFree (data); active_cell -> frac = 1; } pbc=0; pend: return pbc; } /*! \fn int setcutoffs (xmlNodePtr cutnode) \brief read bond cutoffs from node \param cutnode the XML node */ int setcutoffs (xmlNodePtr cutnode) { int cut; int i, j; xmlNodePtr cnode, cn; xmlChar * data; double val; char * ncut; size_t lgt; cnode = cutnode -> children; cn = findnode(cnode, "total"); if (cn == NULL) { cut=9; goto cend; } data = xmlNodeGetContent(cn); val=string_to_double ((gpointer)data); xmlFree (data); active_chem -> grtotcutoff = val; cn = findnode(cnode, "partials"); if (cn == NULL) { cut=9; goto cend; } cnode = cn -> children; for ( i=0 ; i nspec ; i++ ) { for ( j=0 ; j nspec ; j++ ) { lgt=10; lgt+=strfind(active_chem -> label[i]) + strlen("-") + strfind(active_chem -> label[j]); ncut = g_malloc0(lgt*sizeof*ncut); strncpy (ncut, active_chem -> label[i], strfind(active_chem -> label[i])); strcat (ncut, "-"); strncat (ncut, active_chem -> label[j], strfind(active_chem -> label[j])); cn = findnode(cnode, ncut); if (cn == NULL) { cut=9; goto cend; } data = xmlNodeGetContent(cn); val = string_to_double ((gpointer)data); xmlFree (data); active_chem -> cutoffs[i][j] = val; g_free (ncut); ncut = NULL; } } cut=0; cend: return cut; } /*! \fn int settime(xmlNodePtr timenode) \brief read MD information from node \param timenode the XML node */ int settime(xmlNodePtr timenode) { int i, j; //double val, delta_t; //int tunit, ndtbs; int tps; xmlChar * data; xmlNodePtr tnode, tn; tnode = timenode -> children; tn = findnode(tnode, "dt"); if (tn == NULL) { tps=10; goto tend; } data = xmlNodeGetContent(tn); //val = string_to_double ((gpointer)data); //delta_t = val; xmlFree (data); tn = findnode(tnode, "unit"); if (tn == NULL) { tps=10; goto tend; } data = xmlNodeGetContent(tn); j=-1; for ( i=0 ; i<5 ; i++) { if (g_strcmp0 ((char *)data, g_strdup_printf ("t [%s]", untime[i])) == 0) j=i; } xmlFree (data); if (j == -1) { tps=10; goto tend; } if (j < 5) { //tunit = j+1; } tn = findnode(tnode, "ndt"); if (tn != NULL) { data = xmlNodeGetContent(tn); //val = string_to_double ((gpointer)data); //ndtbs = val; xmlFree (data); } tps=0; tend: return tps; } /*! \fn int check_xml (const char * filetocheck) \brief check the opening of ISAACS XML file \param filetocheck File name */ int check_xml (const char * filetocheck) { int res; xmlDoc * doc; xmlTextReaderPtr reader; xmlChar * cdata, * cfichier; xmlNodePtr racine, node; /* * build an xmlReader for that file */ reader = xmlReaderForFile(filetocheck, NULL, 0); if (reader != NULL) { res = 0; doc = xmlParseFile(filetocheck); if (doc == NULL) { res=1; goto end; } else { racine = xmlDocGetRootElement(doc); if (g_strcmp0 ((char *)(racine->name), "isaacs-xml") != 0) { res=2; goto end; } else { node = racine -> children; node = findnode(node, "data"); if (node == NULL) { res=3; goto end; } node = node -> children; node = findnode(node, "type"); if (node == NULL) { res=3; goto end; } cdata = xmlNodeGetContent(node); node = findnode(node, "file"); if (node == NULL) { xmlFree (cdata); res=3; goto end; } cfichier = xmlNodeGetContent(node); res= testopening((char *)cdata, (char *)cfichier); xmlFree (cdata); xmlFree (cfichier); if (res != 0) { goto end; } else { node = racine -> children; node = findnode(node, "chemistry"); if (node == NULL) { res=3; goto end; } res= setchemistry(node); if (res != 0) { goto end; } node = racine -> children; node = findnode(node, "pbc"); if (node == NULL) { res=3; goto end; } res=setpbc (node); if (res != 0) { goto end; } node = racine -> children; node = findnode(node, "box"); if (node == NULL) { res=3; goto end; } active_cell -> box = g_malloc0(sizeof*active_cell -> box); active_box = & active_cell -> box[0]; res=setbox (node); if (res != 0) { goto end; } node = racine -> children; node = findnode(node, "cutoffs"); if (node == NULL) { res=3; goto end; } active_chem -> cutoffs = allocddouble (active_project -> nspec, active_project -> nspec); res=setcutoffs (node); if (res != 0) { goto end; } if (active_project -> steps > 1) { node = racine -> children; node = findnode(node, "time-series"); if (node == NULL) { res=3; goto end; } res=settime (node); if (res != 0) { goto end; } } node = racine -> children; node = findnode(node, "project"); if (node == NULL) { res=3; goto end; } cdata = xmlNodeGetContent(node); if (g_strcmp0 ((char *)cdata, (char *)"TRUE") == 0) { active_project -> run = 1; } else { active_project -> run = 0; } xmlFree (cdata); } } } } else { res=1; } end: /* * Cleanup function for the XML library. */ if (reader != NULL) xmlFreeTextReader(reader); /* *Free the global variables that may *have been allocated by the parser. */ xmlCleanupParser(); return res; } /*! \fn gchar * open_xml (const char * filetoread) \brief Open ISAACS XML file \param filetoread File name */ gchar * open_xml (const char * filetoread) { int oxml; oxml = check_xml(filetoread); switch(oxml) { case 1: return (_("Impossible to open the ISAACS project file (XML) file\n")); break; case 2: return (_("The file is not a valid ISAACS project file (XML) file\n")); break; case 3: return (_("The ISAACS project file (XML) file is incomplete\n")); break; case 4: return (_("Problem(s) in the <data> section of the ISAACS project file (XML)\n")); break; case 5: return (_("Problem(s) in the <chemistry> section of the ISAACS project file (XML)\n")); break; case 6: return (_("Problem(s) in the <element> section of the ISAACS project file (XML)\n")); break; case 7: return (_("Problem(s) in the <box> section of the ISAACS project file (XML)\n")); break; case 8: return (_("Problem(s) in the <pbc> section of the ISAACS project file (XML)\n")); break; case 9: return (_("Problem(s) in the <cutoffs> section of the ISAACS project file (XML)\n")); break; case 10: return (_("Problem(s) in the <time-series> section of the ISAACS project file (XML)\n")); break; default: return NULL; break; } } atomes_1.3.1/src/project/readers/read_coord.c0000664000175000017500000003605015212624223020640 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_coord.c * @short General functions to import atomic coordinates * @author Sébastien Le Roux */ /* * This file: 'read_coord.c' * * Contains: * - The general functions to import atomic coordinates * * List of functions: gboolean set_dummy_in_use (gchar * this_word); int open_coord_file (gchar * filename, int fti); void add_reader_info (gchar * info, int mid); void reader_info (gchar * type, gchar * sinf, int val); void format_error (int stp, int ato, gchar * mot, int line); void check_for_species (double v, int ato); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "bind.h" #include "cbuild_edit.h" #ifdef OPENMP # include #endif extern int open_xyz_file (int linec); extern int open_c3d_file (int linec); extern int open_pdb_file (int linec); extern int open_trj_file (int linec); extern int open_vas_file (int linec); extern int open_cif_configuration (int linec, int conf); extern int open_cif_file (int linec); extern int open_hist_file (int linec); extern void allocatoms (project * this_proj); extern chemical_data * alloc_chem_data (int spec); extern int build_crystal (gboolean visible, project * this_proj, int c_step, gboolean to_wrap, gboolean show_clones, cell_info * cell, GtkWidget * widg); extern const gchar * dfi[2]; extern atom_search * cif_search; extern atomic_object * cif_object; extern gboolean cif_multiple; FILE * coordf; coord_file * this_reader; gchar ** coord_line = NULL; gchar * this_line = NULL; char * this_word; line_node * head = NULL; line_node * tail = NULL; /*! \fn void add_reader_info (gchar * info, int mid) \brief append information message to the reader information \param info the reader information message \param mid message type (0 = error, 1 = warning) */ void add_reader_info (gchar * info, int mid) { int i; gboolean append = TRUE; for (i=0; i msg; i++) { if (g_strcmp0(this_reader -> info[i], info) == 0) { append = FALSE; break; } } if (append) { if (! this_reader -> msg) { this_reader -> info = g_malloc0(sizeof*this_reader -> info); } else { this_reader -> info = g_realloc (this_reader -> info, (this_reader -> msg+1)*sizeof*this_reader -> info); } this_reader -> info[this_reader -> msg] = g_strdup_printf ("%s", info); this_reader -> msg ++; } if (! mid) this_reader -> mid = 0; } /*! \fn void reader_info (gchar * type, gchar * sinf, int val) \brief display reader information \param type File type \param sinf Information message \param val Value to present */ void reader_info (gchar * type, gchar * sinf, int val) { g_print ("Reading coordinates [%s]: %s = %d\n", type, sinf, val); } /*! \fn void format_error (int stp, int ato, gchar * mot, int line) \brief Message to display an error message \param stp the MD step id \param ato Atom id \param mot Message \param line Line with the error */ void format_error (int stp, int ato, gchar * mot, int line) { gchar * str; if (ato < 0) { str = g_strdup_printf (_("Wrong file format: error at step %d !\n" "Wrong file format: record %s on line %d is corrupted !"), stp, mot, line); } else { str = g_strdup_printf (_("Wrong file format: error at step %d, atom %d !\n" "Wrong file format: record %s on line %d is corrupted !"), stp, ato, mot, line+1); } add_reader_info (str, 0); g_free (str); } /*! \fn int set_v_dummy (gchar * this_word) \brief check if dummy is used for unknown species, if not then ask what to do \param this_word the chemical species label */ int set_v_dummy (gchar * this_word) { int i; for (i=0; i ndummy; i++) { if (g_strcmp0(this_reader -> dummy[i], this_word) == 0) { return i+1; } } gchar ** dummy = NULL; if (this_reader -> ndummy) { dummy = duplicate_strings (this_reader -> ndummy, this_reader -> dummy); g_free (this_reader -> dummy); } this_reader -> ndummy ++; this_reader -> dummy = g_malloc0(this_reader -> ndummy*sizeof*this_reader -> dummy); if (dummy) { for (i=0; i ndummy-1; i++) { this_reader -> dummy[i] = g_strdup_printf ("%s", dummy[i]); } } this_reader -> dummy[this_reader -> ndummy-1] = g_strdup_printf ("%s", this_word); // Dummy added, then do we use this dummy ? gchar * str = g_strdup_printf (_("Use dummy atom(s) for unknown %s species ?"), this_word); gboolean use_dummy = ask_yes_no (_("Use dummy atom(s) ?"), str, GTK_MESSAGE_QUESTION, MainWindow); g_free (str); if (use_dummy) { str = g_strdup_printf (_("Using dummy atom(s) for unknown %s species"), this_word); add_reader_info (str, 1); g_free (str); return this_reader -> ndummy; } else { str = g_strdup_printf (_("No dummy atom(s) for unknown %s species"), this_word); add_reader_info (str, 1); g_free (str); return 0; } } /*! \fn void check_for_species (double v, int ato) \brief Fill the species for each atom and the associated data \param v Z \param ato the atom id */ void check_for_species (double v, int ato) { int i; gboolean add_spec; add_spec = TRUE; if (this_reader -> nspec) { for (i=0; i nspec; i++) { if (this_reader -> z[i] == v) { if (this_reader -> cartesian) { active_project -> atoms[0][ato].sp = i; } else { this_reader -> lot[ato] = i; } this_reader -> nsps[i] ++; add_spec = FALSE; break; } } } if (add_spec) { if (this_reader -> nspec) { this_reader -> z = g_realloc (this_reader -> z, (this_reader -> nspec+1)*sizeof*this_reader -> z); this_reader -> nsps = g_realloc (this_reader -> nsps, (this_reader -> nspec+1)*sizeof*this_reader -> nsps); } if (this_reader -> cartesian) { active_project -> atoms[0][ato].sp = this_reader -> nspec; } else { this_reader -> lot[ato] = this_reader -> nspec; } this_reader -> nsps[this_reader -> nspec] = 1; this_reader -> z[this_reader -> nspec] = v; this_reader -> nspec ++; } } /*! \fn int open_coord_file (gchar * filename, int fti) \brief open atomic coordinates file \param filename the file name \param fti the type of coordinates */ int open_coord_file (gchar * filename, int fti) { int res = 0; #ifdef OPENMP struct stat status; res = stat (filename, & status); if (res == -1) { add_reader_info (_("Error - cannot get file statistics !\n"), 0); return 1; } int fsize = status.st_size; #endif coordf = fopen (filename, dfi[0]); if (! coordf) { add_reader_info (_("Error - cannot open coordinates file !\n"), 0); return 1; } int i, j, k, l; #ifdef OPENMP gchar * coord_content = g_malloc0(fsize*sizeof*coord_content); fread (coord_content, fsize, 1, coordf); fclose (coordf); int linecount = 0; for (j=0; j next = g_malloc0(sizeof*tail -> next); if (fti == 9 || fti == 10) { tail -> next -> prev = g_malloc0(sizeof*tail -> next -> prev); tail -> next -> prev = tail; } tail = tail -> next; } tail -> line = g_strdup_printf ("%s", buf); tail -> line = substitute_string (tail -> line, "\n", "\0"); i ++; } g_free (buf); fclose (coordf); #endif if (i) { this_reader -> cartesian = TRUE; if (fti < 2) { res = open_xyz_file (i); } else if (fti == 2) { res = open_c3d_file (i); } else if (fti < 5) { res = open_trj_file (i); } else if (fti < 7) { res = open_vas_file (i); } else if (fti > 6 && fti < 9) { res = open_pdb_file (i); } else if (fti > 8 && fti < 12) { if (fti == 11) cif_use_symmetry_positions = TRUE; this_reader -> cartesian = FALSE; if (fti == 10) { res = open_cif_file (i); } else { active_project -> steps = this_reader -> steps = 1; this_reader -> rounding = -1; cif_multiple = FALSE; res = open_cif_configuration (i, 0); } } else if (fti == 12) { res = open_hist_file (i); } } else { res = 1; } #ifndef OPENMP if (tail) g_free (tail); #endif if (! res) { if (fti == 9 && ! this_reader -> cartesian) { // this_reader -> lattice.sp_group -> sid = 2; // get_origin (this_reader -> lattice.sp_group); if (! cif_use_symmetry_positions) { // Test for all configurations, do build each: // - a single trajectory ? // - each in a single project ? i = 1; crystal_dist_chk = TRUE; crystal_crowded = FALSE; crystal_low_warning = TRUE; for (j=0; j steps; j++) { k = build_crystal (FALSE, active_project, j, TRUE, FALSE, & this_reader -> lattice, MainWindow); if (! k) { add_reader_info (_("Error(s) trying to build crystal using the CIF file parameters !\n" "This usually comes from: \n" "\t - incorrect space group description\n" "\t - incomplete space group description\n" "\t - missing space group setting\n" "\t - incorrect space group setting\n"), 0); res = 3; goto end; } else if (k < 0) { add_reader_info (_("Error(s) trying to build crystal using the CIF file parameters !\n" "Information lead to change(s) between each configuration\n"), 0); res = 3; goto end; } else if (k > 1 && i) { add_reader_info (_("Potential issue(s) when building crystal !\n" "This usually comes from: \n" "\t - incorrect space group description\n" "\t - incomplete space group description\n" "\t - missing space group setting\n" "\t - incorrect space group setting\n"), 1); if (this_reader -> num_sym_pos && active_project -> steps == 1) { add_reader_info (_("\nAnother model will be built using included symmetry positions\n"), 1); cif_use_symmetry_positions = TRUE; } i = 0; } } } } for (i=0; i steps; i++) { for (j=0; j natomes; j++) { active_project -> atoms[i][j].id = j; active_project -> atoms[i][j].show[0] = TRUE; active_project -> atoms[i][j].show[1] = TRUE; active_project -> atoms[i][j].label[0] = FALSE; active_project -> atoms[i][j].label[1] = FALSE; active_project -> atoms[i][j].pick[0] = FALSE; active_project -> atoms[i][j].cloned = FALSE; } } if (active_project -> steps > 1) { active_project -> skt_corr_threshold = (active_project -> steps < 20) ? 1 : 10; active_project -> skt_n_data_sets = min (5, active_project -> steps); active_project -> sqw_n_data_sets = 5; } if (fti != 9 || this_reader -> cartesian) { active_project -> nspec = this_reader -> nspec; active_project -> chemistry = alloc_chem_data (active_project -> nspec); active_project_changed (activep); k = l = 0; reader_info (coord_files_ext[fti], _("Number of species"), active_project -> nspec); for (i=0; i nspec; i++) { active_chem -> chem_prop[CHEM_Z][i] = this_reader -> z[i]; j = (int)this_reader -> z[i]; if (this_reader -> z[i] < 1.0) { active_chem -> label[i] = g_strdup_printf ("%s", this_reader -> dummy[l]); active_chem -> element[i] = g_strdup_printf (_("Dummy %s"), this_reader -> dummy[l]); active_chem -> chem_prop[CHEM_M][i] = 1.0; active_chem -> chem_prop[CHEM_R][i] = 0.5; l ++; } else { active_chem -> label[i] = g_strdup_printf ("%s", periodic_table_info[j].lab); active_chem -> element[i] = g_strdup_printf ("%s", periodic_table_info[j].name); active_chem -> chem_prop[CHEM_M][i] = set_mass_ (& j); active_chem -> chem_prop[CHEM_R][i] = set_radius_ (& j, & k); if (! active_chem -> chem_prop[CHEM_R][i]) { gchar * str = g_strdup_printf (_("For species %s, radius is equal to 0.0 !\n"), active_chem -> label[i]); add_reader_info (str, 1); g_free (str); } active_chem -> chem_prop[CHEM_N][i] = set_neutron_ (& j); active_chem -> chem_prop[CHEM_X][i] = active_chem -> chem_prop[CHEM_Z][i]; } active_chem -> nsps[i] = this_reader -> nsps[i]; g_print ("Reading coordinates [%s]:\t %s, nsps[%d]= %d\n", coord_files_ext[fti], active_chem -> label[i], i+1, active_chem -> nsps[i]); } } else { reader_info (coord_files_ext[fti], _("Number of species"), active_project -> nspec); for (i=0; i nspec; i++) { g_print ("Reading coordinates [%s]:\t %s, nsps[%d]= %d\n", coord_files_ext[fti], active_chem -> label[i], i+1, active_chem -> nsps[i]); } } } end:; if (! (fti == 9 && cif_use_symmetry_positions) || res) { if (cif_search) { g_free (cif_search); cif_search = NULL; } if (cif_object) { g_free (cif_object); cif_object = NULL; } cif_use_symmetry_positions = FALSE; } return res; } atomes_1.3.1/src/project/readers/read_npt.c0000664000175000017500000001737115212624223020340 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_npt.c * @short Functions to read NPT data * @author Sébastien Le Roux */ /* * This file: 'read_npt.c' * * Contains: * - The functions to read NPT data * * List of functions: int cell_get_lattice (int format); int open_cell_file (int format, gchar * filename); void add_cell_info (gchar * info); */ #include "global.h" #include "bind.h" #include "interface.h" #include "project.h" #include #include "cbuild_edit.h" #include "readers.h" #ifdef G_OS_WIN32 typedef intptr_t ssize_t; extern ssize_t getline(char **lineptr, size_t *n, FILE *stream); #endif FILE * cellp; typedef struct cell_file cell_file; struct cell_file { cell_info lattice; gchar * info; }; cell_file * this_cell; /*! \fn void add_cell_info (gchar * info) \brief append information message to the cell information \param info the cell information message */ void add_cell_info (gchar * info) { this_cell -> info = (this_cell -> info) ? g_strdup_printf ("%s\n%s", this_cell -> info, info) : g_strdup_printf ("%s", info); } /*! \fn int cell_get_lattice (int format) \brief get the lattice parameters format from the file \param format File format */ int cell_get_lattice (int format) { size_t length = 0; gchar * line = NULL; int i, j, k; char c; i = 0; for (c = getc(cellp); c != EOF; c = getc(cellp)) if (c == '\n') i ++; j = (format == 0 || format == 2) ? 1 : (format == 1) ? 2 : 3; k = i / j; i = i - k * j; if (i) return 0; if (k != active_project -> steps) { add_cell_info (g_strdup_printf (_("Wrong file format - %d steps in coordinates file"), active_project -> steps)); add_cell_info (g_strdup_printf (_("Wrong file format - %d steps found in cell file"), k)); return 0; } rewind (cellp); this_cell -> lattice.box = g_malloc0(k*sizeof*this_cell -> lattice.box); for (i=0; i steps; i++) { if (format < 2) { for (j=0; j<2; j++) { if (! j || format == 1) { getline (& line, & length, cellp); this_line = g_strdup_printf ("%s", line); this_word = strtok (this_line, " "); } else { this_word = strtok (NULL, " "); } k = 0; if (! this_word) { add_cell_info (g_strdup_printf (_("Wrong file format - error at step %d !"), i+1)); return 0; } this_cell -> lattice.box[i].param[j][k] = string_to_double ((gpointer)this_word); k ++; this_word = strtok (NULL, " "); if (! this_word) { add_cell_info (g_strdup_printf (_("Wrong file format - error at step %d !"), i+1)); return 0; } this_cell -> lattice.box[i].param[j][k] = string_to_double ((gpointer)this_word); k ++; this_word = strtok (NULL, " "); if (! this_word) { add_cell_info (g_strdup_printf (_("Wrong file format - error at step %d !"), i+1)); return 0; } this_cell -> lattice.box[i].param[j][k] = string_to_double ((gpointer)this_word); } } else { for (j=0; j<3; j++) { if (! j || format == 3) { getline (& line, & length, cellp); this_line = g_strdup_printf ("%s", line); this_word = strtok (this_line, " "); } else { this_word = strtok (NULL, " "); } k = 0; if (! this_word) { add_cell_info (g_strdup_printf (_("Wrong file format - error at step %d !"), i+1)); return 0; } this_cell -> lattice.box[i].vect[j][k] = string_to_double ((gpointer)this_word); k ++; this_word = strtok (NULL, " "); if (! this_word) { add_cell_info (g_strdup_printf (_("Wrong file format - error at step %d !"), i+1)); return 0; } this_cell -> lattice.box[i].vect[j][k] = string_to_double ((gpointer)this_word); k ++; this_word = strtok (NULL, " "); if (! this_word) { add_cell_info (g_strdup_printf (_("Wrong file format - error at step %d !"), i+1)); return 0; } this_cell -> lattice.box[i].vect[j][k] = string_to_double ((gpointer)this_word); } } } this_cell -> lattice.npt = FALSE; for (i=1; i steps; i++) { if (format < 2) { for (j=0; j<2; j++) { for (k=0; k<3; k++) { if (this_cell -> lattice.box[i].param[j][k] != this_cell -> lattice.box[0].param[j][k]) { this_cell -> lattice.npt = TRUE; break; } } if (this_cell -> lattice.npt) break; } if (this_cell -> lattice.npt) break; } else { for (j=0; j<3; j++) { for (k=0; k<3; k++) { if (this_cell -> lattice.box[i].vect[j][k] != this_cell -> lattice.box[0].vect[j][k]) { this_cell -> lattice.npt = TRUE; break; } } if (this_cell -> lattice.npt) break; } if (this_cell -> lattice.npt) break; } } return 1; } /*! \fn int open_cell_file (int format, gchar * filename) \brief open the file that contains the cell parameters \param format File format \param filename File name */ int open_cell_file (int format, gchar * filename) { int res; int i, j, k, l; cellp = fopen (filename, "r"); if (cellp) { this_cell = g_malloc0(sizeof*this_cell); if (cell_get_lattice(format)) { active_cell -> ltype = format/2 + 1; active_cell -> pbc = TRUE; active_cell -> npt = this_cell -> lattice.npt; i = (active_cell -> npt) ? active_project -> steps : 1; if (active_cell -> npt) { g_free (active_cell -> box); active_cell -> box = g_malloc0(i*sizeof*active_cell -> box); active_box = & active_cell -> box[0]; } for (j=0; j box[j].param[k][l] = this_cell -> lattice.box[j].param[k][l]; } } } else { for (k=0; k<3; k++) { for (l=0; l<3; l++) { active_cell -> box[j].vect[k][l] = this_cell -> lattice.box[j].vect[k][l]; } } } } active_cell -> has_a_box = TRUE; active_cell -> crystal = FALSE; res = 0; } else { // No or wrong cell data found #ifdef DEBUG g_debug ("CELL-NPT:: Impossible to retrieve cell parameters !"); #endif res = 2; } } else { // Cannot open file res = 1; } if (this_cell) { if (this_cell -> info) { show_error (this_cell -> info, 0, MainWindow); } if (this_cell) { if (this_cell -> info) g_free (this_cell -> info); if (this_cell -> lattice.box) g_free (this_cell -> lattice.box); g_free (this_cell); this_cell = NULL; } } return res; } atomes_1.3.1/src/project/project.c0000664000175000017500000000663415212624223016565 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file project.c * @short Project management functions * @author Sébastien Le Roux */ /* * This file: 'project.c' * * Contains: * - Project management functions * * List of functions: void save_pos_ (int * nat, int lot[* nat], int * num, double xpos[* num], double ypos[* num], double zpos[* num]); void send_steps_ (int * steps); project * get_project_by_id (int p); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "bind.h" workspace workzone; project * active_project = NULL; chemical_data * active_chem = NULL; coord_info * active_coord = NULL; cell_info * active_cell = NULL; box_info * active_box = NULL; image * active_image = NULL; glwin * active_glwin = NULL; project * opengl_project = NULL; /*! \fn void save_pos_ (int * nat, int lot[*nat], int * num, double xpos[*num], double ypos[*num], double zpos[*num]) \brief retrieve atomic coordinates from Fortran90 \param nat Number of atoms \param lot List of chemical species by atoms \param num Number of coordinates (NA x NS) \param xpos x coordinates \param ypos y coordinates \param zpos z coordinates */ void save_pos_ (int * nat, int lot[* nat], int * num, double xpos[* num], double ypos[* num], double zpos[* num]) { int i, j, k; k = 0; for ( i=0 ; i < active_project -> steps ; i++ ) { for (j=0; j < active_project -> natomes; j++) { active_project -> atoms[i][j].x = xpos[k]; active_project -> atoms[i][j].y = ypos[k]; active_project -> atoms[i][j].z = zpos[k]; active_project -> atoms[i][j].sp = lot[j]-1; active_project -> atoms[i][j].id = j; active_project -> atoms[i][j].show[0] = TRUE; active_project -> atoms[i][j].show[1] = TRUE; active_project -> atoms[i][j].label[0] = FALSE; active_project -> atoms[i][j].label[1] = FALSE; if (active_glwin == NULL) { active_project -> atoms[i][j].pick[0] = FALSE; } else if (! active_image -> selected[0] -> selected) { active_project -> atoms[i][j].pick[0] = FALSE; } active_project -> atoms[i][j].cloned = FALSE; k++; } } } /*! \fn void send_steps_ (int * steps) \brief retrieve the number of MD steps from Fortran90 \param steps the number of MD steps */ void send_steps_ (int * steps) { active_project -> steps = * steps; } /*! \fn project * get_project_by_id (int p) \brief get project pointer using id number \param p the id number */ project * get_project_by_id (int p) { project * tmp = workzone.first; int i; for (i=0; i id == p) return tmp; if (tmp -> next != NULL) tmp = tmp -> next; } return NULL; } atomes_1.3.1/src/project/project.h0000664000175000017500000001041415212624223016561 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file project.h * @short Function declarations for reading atomes project file \n Function declarations for saving atomes project file * @author Sébastien Le Roux */ /* * This header file: 'project.h' * * Contains: - Function declarations for reading atomes project file - Function declarations for saving atomes project file */ #ifndef PROJECT_H_ #define PROJECT_H_ extern float project_file_version; extern gboolean reading_project; extern atomes_error * project_error; #define IODEBUG FALSE extern int num_bonds (int i); extern int num_angles (int i); extern int num_dihedrals (int i); // Read extern int read_atom_a (FILE * fp, project * this_proj, int s, int a); extern int read_atom_b (FILE * fp, project * this_proj, int s, int a); extern int read_opengl_image (FILE * fp, project * this_proj, image * img, int sid); extern int read_project_curve (FILE * fp, int wid, int pid); extern int read_mol (FILE * fp); extern int read_bonding (FILE * fp); extern int read_dlp_field_data (FILE * fp, project * this_proj); extern int read_lmp_field_data (FILE * fp, project * this_proj); extern int read_cpmd_data (FILE * fp, int cid, project * this_proj); extern int read_cp2k_data (FILE * fp, int cid, project * this_proj); extern gchar * read_this_string (FILE * fp); extern void alloc_proj_data (project * this_proj, int cid); extern int open_project (FILE * fp, int wid); // Save extern int save_atom_a (FILE * fp, project * this_proj, int s, int a); extern int save_opengl_image (FILE * fp, project * this_proj, image * img, int sid); extern int save_project_curve (FILE * fp, project * this_proj, int wid, int rid, int cid); extern int save_dlp_field_data (FILE * fp, project * this_proj); extern int save_lmp_field_data (FILE * fp, project * this_proj); extern int save_cpmd_data (FILE * fp, int cid, project * this_proj); extern int save_cp2k_data (FILE * fp, int cid, project * this_proj); extern int save_this_string (FILE * fp, gchar * string); extern int save_mol (FILE * fp, project * this_proj); extern int save_bonding (FILE * fp, project * this_proj); extern int save_project (FILE * fp, project * this_proj, int wid); extern G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data); extern int * save_color_map (glwin * view); extern void restore_color_map (glwin * view, int * colm); extern colormap * allocate_color_map (int pts, project * this_proj); extern gboolean setup_custom_color_map (float * data, project * this_proj, gboolean init); #ifdef GTK4 extern G_MODULE_EXPORT gboolean edit_tab (GtkWidget * widget, GdkEvent * event, gpointer fdata); #else extern G_MODULE_EXPORT gboolean edit_tab (GtkWidget * widget, GdkEventButton * event, gpointer fdata); #endif extern void init_curves_and_calc (project * this_proj); extern void init_project (gboolean alloc_box); extern void update_analysis_availability (project * this_proj); extern int update_project (); extern void clean_view (); extern void view_buffer (GtkTextBuffer * buffer); extern void update_insert_combos (); extern void close_project (project * to_close); extern void to_close_this_project (int to_activate, project * this_proj); extern void hide_current_project (project * to_hide); extern void active_project_changed (int id); extern void opengl_project_changed (int id); extern G_MODULE_EXPORT void on_close_activate (GtkWidget * widg, gpointer cdata); extern void add_project (GtkTreeStore * store, int i); extern void debugiocurve (project * this_proj, gboolean win, int rid, int cid, gchar * iost); extern void debugioproj (project * this_proj, gchar * iost); #endif atomes_1.3.1/src/project/update_p.c0000664000175000017500000002054115212624223016711 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file update_p.c * @short Functions to update a project \n Functions to activate a project * @author Sébastien Le Roux */ /* * This file: 'update_p.c' * * Contains: * - The functions to update a project - The functions to activate a project * * List of functions: int update_project (); void prep_calc_actions (); void active_project_changed (int id); void opengl_project_changed (int id); void update_analysis_availability (project * this_proj); */ #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "workspace.h" extern GtkWidget * work_menu (int p, int c); extern GtkTreeStore * tool_model; /*! \fn void prep_calc_actions () \brief prepare analysis widgets */ void prep_calc_actions () { int i; gchar * str; // Depends on the number of calculations available for (i=0; i analysis) { remove_action (str); } else { if (i < ANG) { if (active_project -> analysis[i]) { if (active_project -> analysis[i] -> avail_ok) { add_analysis_action (i); } else { remove_action (str); } } else { remove_action (str); } } else { if (active_project -> analysis[i+1]) { if (active_project -> analysis[i+1] -> avail_ok) { add_analysis_action (i); } else { remove_action (str); } } else { remove_action (str); } } } g_free (str); } } /*! \fn void update_analysis_availability (project * this_proj) \brief update analysis availability for a target projet \param this_proj the target project */ void update_analysis_availability (project * this_proj) { if (this_proj -> natomes && this_proj -> analysis) { if (this_proj -> cell.has_a_box) { if (this_proj -> analysis[GDR]) this_proj -> analysis[GDR] -> avail_ok = TRUE; if (this_proj -> analysis[SKD]) this_proj -> analysis[SKD] -> avail_ok = TRUE; if (this_proj -> analysis[SQD] && this_proj -> analysis[GDR]) this_proj -> analysis[SQD] -> avail_ok = this_proj -> analysis[GDR] -> calc_ok; if (this_proj -> analysis[GDK] && this_proj -> analysis[SKD]) this_proj -> analysis[GDK] -> avail_ok = this_proj -> analysis[SKD] -> calc_ok; if (this_proj -> steps > 1 && this_proj -> analysis[SKT]) this_proj -> analysis[SKT] -> avail_ok = TRUE; } else { if (this_proj -> analysis[GDR]) this_proj -> analysis[GDR] -> avail_ok = FALSE; if (this_proj -> analysis[SQD]) this_proj -> analysis[SQD] -> avail_ok = FALSE; if (this_proj -> analysis[SKD]) this_proj -> analysis[SKD] -> avail_ok = FALSE; if (this_proj -> analysis[GDK]) this_proj -> analysis[GDK] -> avail_ok = FALSE; } if (this_proj -> analysis[BND]) this_proj -> analysis[BND] -> avail_ok = TRUE; if (this_proj -> analysis[ANG]) this_proj -> analysis[ANG] -> avail_ok = TRUE; if (this_proj -> analysis[RIN]) this_proj -> analysis[RIN] -> avail_ok = TRUE; if (this_proj -> analysis[CHA]) this_proj -> analysis[CHA] -> avail_ok = TRUE; if (this_proj -> analysis[SPH]) this_proj -> analysis[SPH] -> avail_ok = TRUE; if (this_proj -> steps > 1 && this_proj -> analysis[MSD]) this_proj -> analysis[MSD] -> avail_ok = TRUE; } else if (this_proj -> analysis) { int i; for (i=0; i analysis[i]) this_proj -> analysis[i] -> avail_ok = FALSE; } } } /*! \fn int update_project () \brief update project: send data to Fortran90, and update calculation interactors */ int update_project () { #ifdef DEBUG g_debug ("UPDATE_PROJECT: to update"); #endif int i, j; if (! active_project -> newproj && active_project -> natomes) { i = alloc_data_ (& active_project -> natomes, & active_project -> nspec, & active_project -> steps); if (i == 1) { to_read_pos (); int * lot = allocint (active_project -> natomes); for (j=0; j natomes; j++) lot[j] = active_project -> atoms[0][j].sp; read_data_ (lot, active_chem -> nsps); g_free (lot); read_chem_ (active_chem -> chem_prop[CHEM_M], active_chem -> chem_prop[CHEM_R], active_chem -> chem_prop[CHEM_N], active_chem -> chem_prop[CHEM_X]); j = 0; prep_spec_ (active_chem -> chem_prop[CHEM_Z], active_chem -> nsps, & j); } else { return 0; } if (active_project -> run) { j = (active_cell -> npt) ? active_project -> steps : 1; for (i=0; i box[i].vect, active_cell -> box[i].param[0], active_cell -> box[i].param[1], & active_cell -> ltype, & active_cell -> frac, & active_cell -> pbc); } cutoffsend (); } } if (! atomes_render_image) update_analysis_availability (active_project); #ifdef DEBUG g_debug ("UPDATE_PROJECT: updated"); #endif return 1; } /*! \fn void active_project_changed (int id) \brief change the active project \param id the id of the new active project */ void active_project_changed (int id) { char * errp = NULL; if (! atomes_render_image) { if (id != inactep && inactep < nprojects && ! atomes_logo) clean_view (); gtk_tree_store_clear (tool_model); } activep = id; active_project = get_project_by_id (id); active_chem = active_project -> chemistry; active_coord = active_project -> coord; active_cell = & active_project -> cell; active_box = NULL; active_glwin = NULL; active_image = NULL; if (active_project -> modelgl != NULL) { active_glwin = active_project -> modelgl; if (active_glwin -> anim != NULL) { active_image = active_glwin -> anim -> last -> img; } } if (active_cell -> box) { if (active_project -> steps == 1 || ! active_cell -> npt || ! active_image) { active_box = & active_cell -> box[0]; } else if (active_cell -> npt) { active_box = & active_cell -> box[active_image -> step]; } } if (update_project() == 0) { errp = g_strdup_printf (_("Impossible to update project: %s\n"), active_project -> name); show_error (errp, 0, MainWindow); g_free (errp); } else { if (! atomes_render_image) { if (active_project -> analysis) { prep_calc_actions (); g_action_map_add_action (G_ACTION_MAP(AtomesApp), G_ACTION(edition_actions[0])); if (active_cell -> npt) { remove_action (edition_acts[1].action_name); } else { g_action_map_add_action (G_ACTION_MAP(AtomesApp), G_ACTION(edition_actions[1])); } g_action_map_add_action (G_ACTION_MAP(AtomesApp), G_ACTION(edition_actions[2])); fill_tool_model (); correct_this_window_title (curvetoolbox, g_strdup_printf (_("Toolboxes - %s"), prepare_for_title(active_project -> name))); correct_this_window_title (MainWindow, g_strdup_printf ("%s - %s", PACKAGE, prepare_for_title (active_project -> name))); } } inactep = activep; } activew = activep; } /*! \fn void opengl_project_changed (int id) \brief change the OpenGL project \param id the id of the new OpenGL project */ void opengl_project_changed (int id) { activev = id; opengl_project = get_project_by_id(id); } atomes_1.3.1/src/project/read_field.c0000664000175000017500000007041215212624223017170 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_field.c * @short Functions to read DLPOLY force field data in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'read_field.c' * * Contains: * - The functions to read DLPOLY force field data in the atomes project file format * * List of functions: int read_field_atom (FILE * fp); int read_field_shell (FILE * fp); int read_field_constraint (FILE * fp); int read_field_pmf (FILE * fp); int read_field_rigid (FILE * fp); int read_field_tethered (FILE * fp, int fid); int read_field_prop (FILE * fp, int fid, int pid); int read_field_struct (FILE * fp, int fid); int read_field_molecule (FILE * fp, int fid); int read_field_body (FILE * fp, int fid); int read_field_external (FILE * fp, int fid); int read_dlp_field_data (FILE * fp, project * this_proj); int read_lmp_field_data (FILE * fp, project * this_proj); */ #include "global.h" #include "project.h" #include "dlp_field.h" /*! \fn int read_field_atom (FILE * fp) \brief read field atom properties from file \param fp the file pointer */ int read_field_atom (FILE * fp) { if (fread (& tmp_fat -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fat -> fid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fat -> afid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fat -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fat -> name = read_this_string (fp); if (tmp_fat -> name == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fat -> num, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fat -> sp, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fat -> mass, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fat -> charge, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fat -> frozen, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fat -> frozen_id = allocbool(tmp_fat -> num); if (fread (tmp_fat -> frozen_id, sizeof(gboolean), tmp_fat -> num, fp) != tmp_fat -> num) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fat -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fat -> list = allocint (tmp_fat -> num); if (fread (tmp_fat -> list, sizeof(int), tmp_fat -> num, fp) != tmp_fat -> num) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fat -> list_id = allocint (tmp_fat -> num); if (fread (tmp_fat -> list_id, sizeof(int), tmp_fat -> num, fp) != tmp_fat -> num) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int read_field_shell (FILE * fp) \brief read field core shell data from file \param fp the file pointer */ int read_field_shell (FILE * fp) { if (fread (& tmp_fshell -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (tmp_fshell -> ia, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fshell -> m, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fshell -> z, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fshell -> k2, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fshell -> k4, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fshell -> vdw, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fshell -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fshell -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int read_field_constraint (FILE * fp) \brief read field constraint data from file \param fp the file pointer */ int read_field_constraint (FILE * fp) { if (fread (& tmp_fcons -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (tmp_fcons -> ia, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fcons -> av, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fcons -> length, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fcons -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fcons -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int read_field_pmf (FILE * fp) \brief read field mean force potential data from file \param fp the file pointer */ int read_field_pmf (FILE * fp) { if (fread (& tmp_fpmf -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fpmf -> av, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fpmf -> length, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (tmp_fpmf -> num, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i; for (i=0; i<2; i++) { tmp_fpmf -> list[i] = allocint (tmp_fpmf -> num[i]); if (fread (tmp_fpmf -> list[i], sizeof(int), tmp_fpmf -> num[i], fp) != tmp_fpmf -> num[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fpmf -> weight[i] = allocfloat (tmp_fpmf -> num[i]); if (fread (tmp_fpmf -> weight[i], sizeof(float), tmp_fpmf -> num[i], fp) != tmp_fpmf -> num[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); } if (fread (& tmp_fpmf -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fpmf -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int read_field_rigid (FILE * fp) \brief read field rigid constraints data from file \param fp the file pointer */ int read_field_rigid (FILE * fp) { if (fread (& tmp_frig -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_frig -> num, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_frig -> list = allocint (tmp_frig -> num); if (fread (tmp_frig -> list, sizeof(int), tmp_frig -> num, fp) != tmp_frig -> num) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_frig -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_frig -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int read_field_tethered (FILE * fp, int fid) \brief read field tethered data from file \param fp the file pointer \param fid the field id */ int read_field_tethered (FILE * fp, int fid) { if (fread (& tmp_ftet -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_ftet -> num, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_ftet -> key, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i = fvalues[fid][0][tmp_ftet -> key]; tmp_ftet -> val = allocfloat (i); if (fread (tmp_ftet -> val, sizeof(float), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_ftet -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_ftet -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int read_field_prop (FILE * fp, int fid, int pid) \brief read field property from file \param fp the file pointer \param fid the field id \param pid the property id */ int read_field_prop (FILE * fp, int fid, int pid) { if (fread (& tmp_fprop -> pid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fprop -> fpid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fprop -> key, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i = struct_id(pid+7); tmp_fprop -> aid = allocint (i); if (fread (tmp_fprop -> aid, sizeof(int), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); i = fvalues[fid][pid+1][tmp_fprop -> key]; tmp_fprop -> val = allocfloat (i); if (fread (tmp_fprop -> val, sizeof(float), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fprop -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fprop -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int read_field_struct (FILE * fp, int fid) \brief read field structural properties from file \param fp the file pointer \param fid the field id */ int read_field_struct (FILE * fp, int fid) { if (fread (& tmp_fstr -> st, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fstr -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fstr -> num, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i, j; i = struct_id(tmp_fstr -> st + 7); tmp_fstr -> aid = allocint (i); if (fread (tmp_fstr -> aid, sizeof(int), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fstr-> av, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fstr -> def = g_malloc0(sizeof*tmp_fstr -> def); tmp_fprop = tmp_fstr -> def; if (read_field_prop(fp, fid, tmp_fstr -> st) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (i) { tmp_fstr -> other = g_malloc0(sizeof*tmp_fstr -> other); tmp_fprop = tmp_fstr -> other; for (j=0; j st) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (j < i-1) { tmp_fprop -> next = g_malloc0(sizeof*tmp_fprop -> next); tmp_fprop = tmp_fprop -> next; } } } return OK; } /*! \fn int read_field_molecule (FILE * fp, int fid) \brief read field molecule from file \param fp the file pointer \param fid the field id */ int read_field_molecule (FILE * fp, int fid) { if (fread (& tmp_fmol -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); //tmp_fmol -> mol = g_malloc0(sizeof*tmp_fmol -> mol); int i, j; if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); // if (i == 20) i = 1; tmp_fmol -> mol = & active_project -> modelfc -> mols[0][i]; tmp_fmol -> name = read_this_string (fp); if (tmp_fmol -> name == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fmol -> multi, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fmol -> fragments = allocint (tmp_fmol -> multi); if (fread (tmp_fmol -> fragments, sizeof(int), tmp_fmol -> multi, fp) != tmp_fmol -> multi) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fmol -> atoms_id = g_malloc0(tmp_fmol -> mol -> natoms*sizeof*tmp_fmol -> atoms_id); for (i=0; i mol -> natoms; i++) { tmp_fmol -> atoms_id[i] = g_malloc0(tmp_fmol -> multi*sizeof*tmp_fmol -> atoms_id[i]); if (fread (tmp_fmol -> atoms_id[i], sizeof(dint), tmp_fmol -> multi, fp) != tmp_fmol -> multi) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); } if (fread (& tmp_fmol -> atoms, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fmol -> first_atom = g_malloc0(sizeof*tmp_fmol -> first_atom); tmp_fat = tmp_fmol -> first_atom; for (i=0; i atoms; i++) { if (read_field_atom(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (i < tmp_fmol -> atoms-1) { tmp_fat -> next = g_malloc0(sizeof*tmp_fat -> next); tmp_fat = tmp_fat -> next; } } if (fread (& tmp_fmol -> shells, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (tmp_fmol -> shells) { tmp_fmol -> first_shell = g_malloc0(sizeof*tmp_fmol -> first_shell); tmp_fshell = tmp_fmol -> first_shell; for (i=0; i shells; i++) { if (read_field_shell(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (i < tmp_fmol -> shells - 1) { tmp_fshell -> next = g_malloc0(sizeof*tmp_fshell -> next); tmp_fshell = tmp_fshell -> next; } } } if (fread (& tmp_fmol -> constraints, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (tmp_fmol -> constraints) { tmp_fmol -> first_constraint = g_malloc0(sizeof*tmp_fmol -> first_constraint); tmp_fcons = tmp_fmol -> first_constraint; for (i=0; i constraints; i++) { if (read_field_constraint(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (i < tmp_fmol -> constraints - 1) { tmp_fcons -> next = g_malloc0(sizeof*tmp_fcons -> next); tmp_fcons = tmp_fcons -> next; } } } if (fread (& tmp_fmol -> pmfs, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (tmp_fmol -> pmfs) { tmp_fmol -> first_pmf = g_malloc0(sizeof*tmp_fmol -> first_pmf); tmp_fpmf = tmp_fmol -> first_pmf; for (i=0; i pmfs; i++) { if (read_field_pmf(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (i < tmp_fmol -> pmfs - 1) { tmp_fpmf -> next = g_malloc0(sizeof*tmp_fpmf -> next); tmp_fpmf = tmp_fpmf -> next; } } } if (fread (& tmp_fmol -> rigids, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (tmp_fmol -> rigids) { tmp_fmol -> first_rigid = g_malloc0(sizeof*tmp_fmol -> first_rigid); tmp_frig = tmp_fmol -> first_rigid; for (i=0; i rigids; i++) { if (read_field_rigid(fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (i < tmp_fmol -> rigids - 1) { tmp_frig -> next = g_malloc0(sizeof*tmp_frig -> next); tmp_frig = tmp_frig -> next; } } } if (fread (& tmp_fmol -> tethered, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (tmp_fmol -> tethered) { tmp_fmol -> first_tethered = g_malloc0(sizeof*tmp_fmol -> first_tethered); tmp_ftet = tmp_fmol -> first_tethered; for (i=0; i tethered; i++) { if (read_field_tethered(fp, fid) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (i < tmp_fmol -> tethered - 1) { tmp_ftet -> next = g_malloc0(sizeof*tmp_ftet -> next); tmp_ftet = tmp_ftet -> next; } } } if (fread (tmp_fmol -> nstruct, sizeof(int), 8, fp) != 8) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); for (i=0; i<8; i++) { if (tmp_fmol -> nstruct[i]) { tmp_fmol -> first_struct[i] = g_malloc0(sizeof*tmp_fmol -> first_struct[i]); tmp_fstr = tmp_fmol -> first_struct[i]; for (j=0; j nstruct[i]; j++) { if (read_field_struct (fp, fid)!= OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (j < tmp_fmol -> nstruct[i]-1) { tmp_fstr -> next = g_malloc0(sizeof*tmp_fstr -> next); tmp_fstr = tmp_fstr -> next; } } } } return OK; } /*! \fn int read_field_body (FILE * fp, int fid) \brief read field nth body data from file \param fp the file pointer \param fid the field id */ int read_field_body (FILE * fp, int fid) { if (fread (& tmp_fbody -> bd, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fbody -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fbody -> key, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (tmp_fbody -> bd == 0) { tmp_fbody -> fpid = allocint (2); if (fread (tmp_fbody -> fpid, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); } int i, j; i = body_at(tmp_fbody -> bd); tmp_fbody -> na = allocint (i); if (fread (tmp_fbody -> na, sizeof(int), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fbody -> ma = g_malloc0(i*sizeof*tmp_fbody -> ma); tmp_fbody -> a = g_malloc0(i*sizeof*tmp_fbody -> a); for (j=0; j ma[j] = allocint (tmp_fbody -> na[j]); if (fread (tmp_fbody -> ma[j], sizeof(int), tmp_fbody -> na[j], fp) != tmp_fbody -> na[j]) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); tmp_fbody -> a[j] = allocint (tmp_fbody -> na[j]); if (fread (tmp_fbody -> a[j], sizeof(int), tmp_fbody -> na[j], fp) != tmp_fbody -> na[j]) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); } i = fvalues[fid][9+tmp_fbody -> bd][tmp_fbody -> key]; tmp_fbody -> val = allocfloat (i); if (fread (tmp_fbody -> val, sizeof(float), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fbody -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fbody -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int read_field_external (FILE * fp, int fid) \brief read field external data from file \param fp the file pointer \param fid the field id */ int read_field_external (FILE * fp, int fid) { if (fread (& tmp_fext -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fext -> key, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); int i = fvalues[fid][14][tmp_fext -> key]; tmp_fext -> val = allocfloat (i); if (fread (tmp_fext -> val, sizeof(float), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& tmp_fext -> use, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); return OK; } /*! \fn int read_dlp_field_data (FILE * fp, project * this_proj) \brief read force field data from file \param fp the file pointer \param this_proj the target project */ int read_dlp_field_data (FILE * fp, project * this_proj) { int i, j, k, l, m, n; if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (! i) return OK; this_proj -> force_field[0] = g_malloc0(sizeof*this_proj -> force_field[0]); // Allocate force field data this_proj -> force_field[0] -> sys_opts = allocdouble (17); this_proj -> force_field[0] -> io_opts = allocdouble (23); this_proj -> force_field[0] -> ana_opts = allocdouble (17); this_proj -> force_field[0] -> elec_opts = allocdouble (11); this_proj -> force_field[0] -> vdw_opts = allocdouble (6); this_proj -> force_field[0] -> met_opts = allocdouble (2); this_proj -> force_field[0] -> equi_opts = allocdouble (17); this_proj -> force_field[0] -> thermo_opts= allocdouble (10); this_proj -> force_field[0] -> md_opts = allocdouble (20); this_proj -> force_field[0] -> out_opts = allocdouble (31); // CONTROL file if (fread (this_proj -> force_field[0] -> sys_opts, sizeof(double), 17, fp) != 17) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> io_opts, sizeof(double), 23, fp) != 23) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> ana_opts, sizeof(double), 17, fp) != 17) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> elec_opts, sizeof(double), 11, fp) != 11) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> vdw_opts, sizeof(double), 6, fp) != 6) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> met_opts, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> equi_opts, sizeof(double), 17, fp) != 17) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& this_proj -> force_field[0] -> ensemble, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& this_proj -> force_field[0] -> thermostat, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> thermo_opts, sizeof(double), 10, fp) != 10) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> md_opts, sizeof(double), 20, fp) != 20) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> out_opts, sizeof(double), 31, fp) != 31) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); // FIELD file if (fread (this_proj -> force_field[0] -> prepare_file, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (this_proj -> force_field[0] -> afp, sizeof(gboolean), MAXDATC+MAXDATA, fp) != MAXDATC+MAXDATA) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& this_proj -> force_field[0] -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& this_proj -> force_field[0] -> energy_unit, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& this_proj -> force_field[0] -> atom_init, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (fread (& this_proj -> force_field[0] -> molecules, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (! this_proj -> force_field[0] -> molecules) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); this_proj -> force_field[0] -> first_molecule = g_malloc0(sizeof*this_proj -> force_field[0] -> first_molecule); tmp_fmol = this_proj -> force_field[0] -> first_molecule; for (i=0; i force_field[0] -> molecules; i++) { if (read_field_molecule (fp, 0) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } // setup_field_molecule_neighbors (i, this_proj); for (j=0; j mol -> natoms; j++) { for (k=0; k multi; k++) { l = tmp_fmol -> atoms_id[j][k].a; m = tmp_fmol -> atoms_id[j][k].b; tmp_fat = tmp_fmol -> first_atom; while (tmp_fat -> id < l) tmp_fat = tmp_fat -> next; n = tmp_fat -> list[m]; this_proj -> atoms[0][n].fid = j; this_proj -> atoms[0][n].faid = l; } } if (i < this_proj -> force_field[0] -> molecules-1) { tmp_fmol -> next = g_malloc0(sizeof*tmp_fmol -> next); tmp_fmol = tmp_fmol -> next; } } if (fread (this_proj -> force_field[0] -> nbody, sizeof(int), 5, fp) != 5) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); for (i=0; i<5; i++) { if (this_proj -> force_field[0] -> nbody[i]) { this_proj -> force_field[0] -> first_body[i] = g_malloc0(sizeof*this_proj -> force_field[0] -> first_body[i]); tmp_fbody = this_proj -> force_field[0] -> first_body[i]; for (j=0; j force_field[0] -> nbody[i]; j++) { if (read_field_body (fp, 0) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (j < this_proj -> force_field[0] -> nbody[i]-1) { tmp_fbody -> next = g_malloc0(sizeof*tmp_fbody -> next); tmp_fbody = tmp_fbody -> next; } } } } // Tersoff potential cross terms if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (i) { j = this_proj -> force_field[0] -> nbody[2] * (this_proj -> force_field[0] -> nbody[2] - 1) / 2; this_proj -> force_field[0] -> cross = g_malloc0(j*sizeof*this_proj -> force_field[0] -> cross); for (k=0; k force_field[0] -> cross[k] = g_malloc0(3*sizeof*this_proj -> force_field[0] -> cross[k]); if (fread (& this_proj -> force_field[0] -> cross[k], sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); } } if (fread (& this_proj -> force_field[0] -> extern_fields, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (this_proj -> force_field[0] -> extern_fields) { this_proj -> force_field[0] -> first_external = g_malloc0(sizeof*this_proj -> force_field[0] -> first_external); tmp_fext = this_proj -> force_field[0] -> first_external; for (i=0; i force_field[0] -> extern_fields; i++) { if (read_field_external(fp, 0) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (i < this_proj -> force_field[0] -> extern_fields-1) { tmp_fext -> next = g_malloc0(sizeof*tmp_fext -> next); tmp_fext = tmp_fext -> next; } } } return OK; } /*! \fn int read_lmp_field_data (FILE * fp, project * this_proj) \brief read LAMMPS field data from file \param fp the file pointer \param this_proj the target project */ int read_lmp_field_data (FILE * fp, project * this_proj) { int i; if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_FIELD); if (! i) return OK; return OK; } atomes_1.3.1/src/project/read_opengl.c0000664000175000017500000012016615212624223017373 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_opengl.c * @short Functions to read the OpenGL window data in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'read_opengl.c' * * Contains: * - The functions to read the OpenGL window data in the atomes project file format * * List of functions: int read_atom_a (FILE * fp, project * this_proj, int s, int a); int read_atom_b (FILE * fp, project * this_proj, int s, int a); int read_rings_chains_data (FILE * fp, glwin * view, int type, int rid, int size, int steps); int read_this_image_label (FILE * fp, screen_label * label); int read_this_box (FILE * fp, box * abc); int read_this_axis (FILE * fp, axis * xyz); int read_opengl_image (FILE * fp, project * this_proj, image * img, int sid); */ #include "global.h" #include "project.h" #include "glview.h" #include "initcoord.h" #include "preferences.h" extern gboolean version_2_8_and_above; extern gboolean version_2_9_and_above; /*! \fn int read_atom_a (FILE * fp, project * this_proj, int s, int a) \brief read atom properties from file (a) \param fp the file pointer \param this_proj the target project \param s the MD step \param a the atom number */ int read_atom_a (FILE * fp, project * this_proj, int s, int a) { if (fread (& this_proj -> atoms[s][a].id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); if (fread (& this_proj -> atoms[s][a].sp, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); if (fread (& this_proj -> atoms[s][a].x, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); if (fread (& this_proj -> atoms[s][a].y, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); if (fread (& this_proj -> atoms[s][a].z, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); //g_debug ("Reading:: step= %d, at= %d, sp[%d]= %d, x[%d]= %f, y[%d]= %f, z[%d]= %f", // s, a+1, a, this_proj -> atoms[s][a].sp, a, this_proj -> atoms[s][a].x, a, this_proj -> atoms[s][a].y, a, this_proj -> atoms[s][a].z); return OK; } /*! \fn int read_atom_b (FILE * fp, project * this_proj, int s, int a) \brief read atom properties from file (b) \param fp the file pointer \param this_proj the target project \param s the MD step \param a the atom number */ int read_atom_b (FILE * fp, project * this_proj, int s, int a) { if (fread (this_proj -> atoms[s][a].show, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_B); if (fread (this_proj -> atoms[s][a].label, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_B); if (fread (& this_proj -> atoms[s][a].style, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_B); int i, j, k, l, m; int * rings_ij; if (this_proj -> modelgl -> rings) { for (i=0; i<5; i++) { if (this_proj -> modelgl -> ring_max[i]) { this_proj -> atoms[s][a].rings[i] = g_malloc0(this_proj -> rsparam[i][1]*sizeof*this_proj -> atoms[s][a].rings[i]); for (j=0; j rsparam[i][1]; j++) { rings_ij = allocint (this_proj -> modelgl -> num_rings[i][s][j]); m = 0; for (k=0; k modelgl -> num_rings[i][s][j]; k++) { for (l=0; l modelgl -> all_rings[i][s][j][k][l] == a) { rings_ij[m] = k; m ++; break; } } } this_proj -> atoms[s][a].rings[i][j] = allocint (m+1); this_proj -> atoms[s][a].rings[i][j][0] = m; for (k=0; k atoms[s][a].rings[i][j][k+1] = rings_ij[k]; g_free (rings_ij); } } } } if (this_proj -> modelgl -> chains) { if (this_proj -> modelgl -> chain_max) { this_proj -> atoms[s][a].chain = g_malloc0(this_proj -> csparam[5]*sizeof*this_proj -> atoms[s][a].chain); for (j=0; j csparam[5]; j++) { rings_ij = allocint (this_proj -> modelgl -> num_chains[s][j]); m = 0; for (k=0; k modelgl -> num_chains[s][j]; k++) { for (l=0; l modelgl -> all_chains[s][j][k][l] == a) { m ++; rings_ij[m] = k; break; } } } this_proj -> atoms[s][a].chain[j] = allocint (m + 1); this_proj -> atoms[s][a].chain[j][0] = m; for (k=0; k atoms[s][a].chain[j][k+1] = rings_ij[k]; g_free (rings_ij); } } } return OK; } /*! \fn int read_rings_chains_data (FILE * fp, glwin * view, int type, int rid, int size, int steps) \brief read rings and chains statistics data from file \param fp the file pointer \param view the glwin to store the data \param type Rings (0) or chains (1) \param rid the ring id or 0 \param size the size of the ring or chain \param steps the number of MD steps */ int read_rings_chains_data (FILE * fp, glwin * view, int type, int rid, int size, int steps) { int i, j, k; int * tmpcoo, * tmpcoord; if (! type) { if (fread (& view -> ring_max[rid], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_RINGS); if (view -> ring_max[rid]) { view -> num_rings[rid] = allocdint (steps, size); view -> show_rpoly[rid] = g_malloc0(steps*sizeof*view -> show_rpoly[rid]); view -> all_rings[rid] = g_malloc0(steps*sizeof*view -> all_rings[rid]); tmpcoo = allocint (size); for (i=0; i num_rings[rid][i], sizeof(int), size, fp) != size) return signal_error (__FILE__, __func__, __LINE__, ERROR_RINGS); view -> all_rings[rid][i] = g_malloc0(size*sizeof*view -> all_rings[rid][i]); view -> show_rpoly[rid][i] = g_malloc0(size*sizeof*view -> show_rpoly[rid][i]); for (j=0; j num_rings[rid][i][j]; if (view -> num_rings[rid][i][j]) { view -> all_rings[rid][i][j] = allocdint (view -> num_rings[rid][i][j], j+1); view -> show_rpoly[rid][i][j] = allocbool (view -> num_rings[rid][i][j]); if (fread (view -> show_rpoly[rid][i][j], sizeof(int), view -> num_rings[rid][i][j], fp) != view -> num_rings[rid][i][j]) return signal_error (__FILE__, __func__, __LINE__, ERROR_RINGS); for (k=0; k num_rings[rid][i][j]; k++) { if (fread (view -> all_rings[rid][i][j][k], sizeof(int), j+1, fp) != j+1) return signal_error (__FILE__, __func__, __LINE__, ERROR_RINGS); } } } } i = 0; for (j=0; j anim -> last -> img -> show_coord[j]); init_opengl_coords (4+rid, i, 1); k = 0; init_menurings_ (& j, & rid, & i, tmpcoord, & k); g_free (tmpcoo); g_free (tmpcoord); view -> anim -> last -> img -> show_coord[j] = duplicate_bool(i, show_rings); g_free (show_rings); } } else { if (fread (& view -> chain_max, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CHAINS); if (view -> chain_max) { view -> num_chains = allocdint (steps, size); view -> all_chains = g_malloc0(steps*sizeof*view -> all_rings[rid]); tmpcoo = allocint (size); for (i=0; i num_chains[i], sizeof(int), size, fp) != size) return signal_error (__FILE__, __func__, __LINE__, ERROR_CHAINS); view -> all_chains[i] = g_malloc0(size*sizeof*view -> all_chains[i]); for (j=0; j num_chains[i][j]; if (view -> num_chains[i][j]) { view -> all_chains[i][j] = allocdint (view -> num_chains[i][j], j+1); for (k=0; k num_chains[i][j]; k++) { if (fread (view -> all_chains[i][j][k], sizeof(int), j+1, fp) != j+1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CHAINS); } } } } i = 0; for (j=0; j anim -> last -> img -> show_coord[j]); init_opengl_coords (j, i, 1); init_menurings_ (& j, & k , & i, tmpcoord, & k); g_free (tmpcoo); g_free (tmpcoord); view -> anim -> last -> img -> show_coord[j] = duplicate_bool(i, show_chains); g_free (show_chains); } } return OK; } /*! \fn int read_this_image_label (FILE * fp, screen_label label) \brief read image label from file \param fp the file pointer \param label the target label */ int read_this_image_label (FILE * fp, screen_label * label) { if (fread (& label -> position, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& label -> render, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& label -> scale, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& label -> shift, sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& label -> n_colors, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (label -> n_colors) { label -> color = g_malloc0(label -> n_colors*sizeof*label -> color); if (fread (label -> color, sizeof(ColRGBA), label -> n_colors, fp) != label -> n_colors) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } else if (label -> color) { g_free (label -> color); label -> color = NULL; } label -> font = read_this_string (fp); if (label -> font == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); return OK; } /*! \fn int read_this_box (FILE * fp, box * abc) \brief read OpenGL image box properties to file \param fp the file pointer \param box the target box data */ int read_this_box (FILE * fp, box * abc) { if (fread (& abc -> box, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& abc -> rad, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& abc -> line, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& abc -> color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (abc -> extra_cell, sizeof(int), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); return OK; } /*! \fn int read_this_axis (FILE * fp, axis * xyz) \brief read OpenGL image axis properties to file \param fp the file pointer \param axis the target axis data */ int read_this_axis (FILE * fp, axis * xyz) { if (fread (& xyz -> axis, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& xyz -> rad, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& xyz -> line, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (! version_2_9_and_above) { xyz -> color = g_malloc0(sizeof*xyz -> color); if (fread (& xyz -> color[0], sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); g_free (xyz -> color); xyz -> color = NULL; } if (fread (& xyz -> t_pos, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& xyz -> length, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (xyz -> c_pos, sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); gboolean val; int i; if (fread (& val, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (val) { xyz -> color = g_malloc0(3*sizeof*xyz -> color); for (i=0; i<3; i++) { if (fread (& xyz -> color[i], sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } if (fread (& xyz -> labels, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i<3; i++) { xyz -> title[i] = read_this_string (fp); if (xyz -> title[i] == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } return OK; } /*! \fn int read_opengl_image (FILE * fp, project * this_proj, image * img, int sid) \brief read OpenGL image properties from file \param fp the file pointer \param this_proj the target project \param img the latest image to store the data \param sid the number of chemical species */ int read_opengl_image (FILE * fp, project * this_proj, image * img, int sid) { int i, j, k, l, m, n; gboolean val; duplicate_background_data (img -> back, & default_background); if (version_2_8_and_above) { if (fread (& img -> back -> gradient, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (img -> back -> gradient) { if (fread (& img -> back -> direction, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> back -> position, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> back -> gradient_color, sizeof(ColRGBA), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } else { if (fread (& img -> back -> color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } else { img -> back -> gradient = 0; img -> back -> position = 0.5; if (fread (& img -> back -> color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fread (img -> color_map, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (img -> color_map[0] > ATOM_MAPS-1) { img -> color_map[0] -= 10; if (fread (& j, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); this_proj -> modelgl -> custom_map = allocate_color_map (j, this_proj); this_proj -> modelgl -> custom_map -> points = j; if (fread (& this_proj -> modelgl -> custom_map -> cmax, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& this_proj -> modelgl -> custom_map -> cmin, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); this_proj -> modelgl -> custom_map -> positions = allocfloat (j); this_proj -> modelgl -> custom_map -> values = g_malloc0(j*sizeof*this_proj -> modelgl -> custom_map -> values); if (fread (this_proj -> modelgl -> custom_map -> positions, sizeof(float), j, fp) != j) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (this_proj -> modelgl -> custom_map -> values, sizeof(ColRGBA), j, fp) != j) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); j = this_proj -> steps*this_proj -> natomes; for (i=0; i steps; i++) { if (fread (this_proj -> modelgl -> custom_map -> data[i], sizeof(float), this_proj -> natomes, fp) != this_proj -> natomes) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } setup_custom_color_map (NULL, this_proj, FALSE); } if (fread (& img -> cloned_poly, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> at_color, sizeof(ColRGBA), sid*2, fp) != sid*2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> sphererad, sizeof(double), sid*2, fp) != sid*2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> pointrad, sizeof(double), sid*2, fp) != sid*2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> atomicrad, sizeof(double), sid*2, fp) != sid*2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i bondrad[i], sizeof(double), 2*sid, fp) != 2*sid) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> linerad[i], sizeof(double), 2*sid, fp) != 2*sid) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fread (img -> radall, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> draw_clones, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (! version_2_8_and_above) { for (i=0; i<5; i++) { if (fread (& img -> labels[i].position, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } for (i=0; i<5; i++) { if (fread (& img -> labels[i].render, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } for (i=0; i<5; i++) { if (fread (& img -> labels[i].scale, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fread (img -> acl_format, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i<5; i++) { if (fread (img -> labels[i].shift, sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& val, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (val) { if (i < 2) { j = 2*sid; } else if (i == 2) { j = 3; } else { j = 1; } img -> labels[i].n_colors = j; img -> labels[i].color = g_malloc0(j*sizeof*img -> labels[i].color); for (k=0; k labels[i].color[k], sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } else { img -> labels[i].n_colors = 0; if (img -> labels[i].color) { g_free (img -> labels[i].color); img -> labels[i].color = NULL; } } img -> labels[i].font = read_this_string (fp); if (img -> labels[i].font == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fread (& img -> mtilt[0], sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); img -> mtilt[1] = img -> mtilt[0]; if (fread (& img -> mpattern[0], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); img -> mpattern[1] = img -> mpattern[0]; if (fread (& img -> mfactor[0], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); img -> mfactor[1] = img -> mfactor[0]; if (fread (& img -> mwidth[0], sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); img -> mwidth[1] = img -> mwidth[0]; } else { for (i=0; i<5; i++) { if (read_this_image_label (fp, & img -> labels[i]) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_IMAGE; } } if (fread (img -> acl_format, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> mtilt, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> mpattern, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> mfactor, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> mwidth, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fread (& img -> m_is_pressed, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); // Model box and axis if (! version_2_8_and_above) { if (fread (& img -> abc -> box, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> xyz -> axis, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> abc -> rad, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> xyz -> rad, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> abc -> line, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> xyz -> line, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> abc -> color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> abc -> extra_cell, sizeof(int), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); // Axis if (fread (& img -> xyz -> t_pos, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> xyz -> length, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> xyz -> c_pos, sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& val, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (val) { img -> xyz -> color = g_malloc0(3*sizeof*img -> xyz -> color); for (i=0; i<3; i++) { if (fread (& img -> xyz -> color[i], sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } if (fread (& img -> xyz -> labels, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i<3; i++) { img -> xyz -> title[i] = read_this_string (fp); if (img -> xyz -> title[i] == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } else { // Model box if (read_this_box (fp, img -> abc) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_IMAGE; } // Axis if (read_this_axis (fp, img -> xyz) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_IMAGE; } } // OpenGL if (fread (& img -> p_depth, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> gnear, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> gfar, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> gleft, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> gright, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> gtop, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> gbottom, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> rotation_quaternion, sizeof(vec4_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> rotation_mode, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> zoom, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> c_shift, sizeof(GLdouble), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> style, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> quality, sizeof(GLint), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (version_2_9_and_above) { if (fread (& img -> ray_tracing, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fread (& img -> render, sizeof(GLint), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> l_ghtning.lights, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (img -> l_ghtning.spot != NULL) { g_free (img -> l_ghtning.spot); img -> l_ghtning.spot = NULL; } img -> l_ghtning.spot = g_malloc0(img -> l_ghtning.lights*sizeof*img -> l_ghtning.spot); for (i=0; i l_ghtning.lights; i++) { img -> l_ghtning.spot[i] = g_malloc0(sizeof*img -> l_ghtning.spot[i]); if (fread (& img -> l_ghtning.spot[i] -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> l_ghtning.spot[i] -> fix, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> l_ghtning.spot[i] -> show, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> l_ghtning.spot[i] -> position, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> l_ghtning.spot[i] -> direction, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> l_ghtning.spot[i] -> intensity, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> l_ghtning.spot[i] -> attenuation, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> l_ghtning.spot[i] -> spot_data, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fread (& img -> m_terial.predefine, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> m_terial.albedo, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (img -> m_terial.param, sizeof(GLfloat), 6, fp) != 6) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> f_g.mode, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> f_g.based, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> f_g.density, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> f_g.depth, sizeof(float), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> f_g.color, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> filled_type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> step, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& img -> rep, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i<4; i++) { if (i < 2) { for (j=0; j spcolor[i][j], sizeof(ColRGBA), this_proj -> coord -> ntg[i][j], fp) != this_proj -> coord -> ntg[i][j]) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } else { if (fread (& j, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (j) { if (j != this_proj -> coord -> totcoord[i]) { return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fread (img -> spcolor[i][0], sizeof(ColRGBA), this_proj -> coord -> totcoord[i], fp) != this_proj -> coord -> totcoord[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } } active_glwin = this_proj -> modelgl; active_image = this_proj -> modelgl -> anim -> last -> img; active_coord = this_proj -> coord; if (fread (& this_proj -> modelgl -> rings, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (this_proj -> modelgl -> rings) { for (i=0; i<5; i++) { if (read_rings_chains_data (fp, this_proj -> modelgl, 0, i, this_proj -> rsparam[i][1], this_proj -> steps) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_RINGS; } } } if (fread (& this_proj -> modelgl -> chains, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (this_proj -> modelgl -> chains) { if (read_rings_chains_data (fp, this_proj -> modelgl, 1, 0, this_proj -> csparam[5], this_proj -> steps) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_CHAINS; } } if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (i) { this_proj -> modelgl -> create_shaders[VOLMS] = TRUE; this_proj -> modelgl -> volumes = TRUE; for (i=0; i modelgl -> atoms_volume[i] = allocdouble (this_proj -> steps); this_proj -> modelgl -> atoms_ppvolume[i] = allocdouble (this_proj -> steps); if (fread (this_proj -> modelgl -> atoms_volume[i], sizeof(double), this_proj -> steps, fp) != this_proj -> steps) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (this_proj -> modelgl -> atoms_ppvolume[i], sizeof(double), this_proj -> steps, fp) != this_proj -> steps) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); this_proj -> modelgl -> volume_box[i] = allocddouble (this_proj -> steps, 9); for (j=0; j steps; j++) { if (fread (this_proj -> modelgl -> volume_box[i][j], sizeof(double), 9, fp) != 9) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } if (fread (this_proj -> modelgl -> comp_vol, sizeof(gboolean), FILLED_STYLES, fp) != FILLED_STYLES) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (active_image -> show_vol, sizeof(gboolean), FILLED_STYLES, fp) != FILLED_STYLES) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (active_image -> vol_col, sizeof(ColRGBA), FILLED_STYLES, fp) != FILLED_STYLES) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (i) { for (j=0; j modelgl -> frag_mol_volume[0][j] = allocddouble (this_proj -> steps, i); this_proj -> modelgl -> frag_mol_ppvolume[0][j] = allocddouble (this_proj -> steps, i); this_proj -> modelgl -> fm_comp_vol[0][j] = allocdbool (this_proj -> steps, i); active_image -> fm_show_vol[0][j] = allocbool (i); this_proj -> modelgl -> frag_box[j] = alloctdouble (this_proj -> steps, i, 9); for (l=0; l modelgl -> frag_mol_ppvolume[0][j][m][n], sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (this_proj -> modelgl -> frag_box[j][m][n], sizeof(double), 9, fp) != 9) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); this_proj -> modelgl -> fm_comp_vol[0][j][m][n] = TRUE; } active_image -> fm_vol_col[0][j] = g_malloc0(i*sizeof*active_image -> fm_vol_col[0][j]); if (fread (active_image -> fm_show_vol[0][j], sizeof(gboolean), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fread (active_image -> fm_vol_col[0][j], sizeof(ColRGBA), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (i) { for (j=0; j modelgl -> frag_mol_volume[1][j] = allocddouble (this_proj -> steps, i); this_proj -> modelgl -> frag_mol_ppvolume[1][j] = allocddouble (this_proj -> steps, i); this_proj -> modelgl -> fm_comp_vol[1][j] = allocdbool (this_proj -> steps, i); active_image -> fm_show_vol[1][j] = allocbool (i); for (l=0; l modelgl -> frag_mol_ppvolume[1][j][m][n], sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); this_proj -> modelgl -> fm_comp_vol[1][j][m][n] = TRUE; } if (fread (active_image -> fm_show_vol[1][j], sizeof(gboolean), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); active_image -> fm_vol_col[1][j] = g_malloc0(i*sizeof*active_image -> fm_vol_col[1][j]); if (fread (active_image -> fm_vol_col[1][j], sizeof(ColRGBA), i, fp) != i) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } } } } for (i=0; i steps; i++) { for (j=0; j< this_proj -> natomes; j++) { if (read_atom_b (fp, this_proj, i, j) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_ATOM_B; } } } // Finally selection lists, bonds, angles and dihedrals for (i=0; i<2; i++) { if (fread (& j, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (j) { for (k=0; k modelgl, l, 0, 0, i); } update_all_selections (this_proj -> modelgl, i); if (img -> selected[i] -> selected >= 2 && img -> selected[i] -> selected <= 20) { j = num_bonds (img -> selected[i] -> selected); if (fread (img -> selected[i] -> selected_bonds, sizeof(int), j, fp) != j) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (img -> selected[i] -> selected >= 3) { j = num_angles (img -> selected[i] -> selected); if (fread (img -> selected[i] -> selected_angles, sizeof(int), j, fp) != j) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (img -> selected[i] -> selected >= 4 && img -> selected[i] -> selected <= 10) { j = num_dihedrals (img -> selected[i] -> selected); if (fread (img -> selected[i] -> selected_dihedrals, sizeof(int), j, fp) != j) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } } } } this_proj -> modelgl -> labelled = check_label_numbers (this_proj, 2); #ifdef GTK3 // GTK3 Menu Action To Check for (i=0; i<2; i++) { for (j=0; j modelgl -> ogl_spec[i][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_spec[i][j]) != img -> show_atom[i][j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_spec[i][j], img -> show_atom[i][j]); } } } } for (i=0; i<10; i++) { if (this_proj -> modelgl -> ogl_poly[0][i] != NULL) { for (j=0; j coord -> totcoord[i]; j++) { if (i < 2 || (i > 3 && i < 9)) { if (this_proj -> modelgl -> ogl_poly[0][i][j] != NULL) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_poly[0][i][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[0][i][j]) != img -> show_poly[i][j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[0][i][j], img -> show_poly[i][j]); } } } } } } if (this_proj -> modelgl -> ogl_geom[0][i] != NULL) { for (j=0; j coord -> totcoord[i]; j++) { if (this_proj -> modelgl -> ogl_geom[0][i][j] != NULL) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_geom[0][i][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][i][j]) != img -> show_coord[i][j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][i][j], img -> show_coord[i][j]); } } } } } } show_the_widgets (this_proj -> modelgl -> ogl_coord[0]); update_all_menus (this_proj -> modelgl, this_proj -> natomes); #endif this_proj -> modelgl -> labelled = check_label_numbers (this_proj, 2); #ifdef GTK4 for (i=0; i<2; i++) { for (j=0; j show_atom[i][j]) { show_hide_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[i][j]); } } } for (i=0; i<10; i++) { for (j=0; j coord -> totcoord[i]; j++) { if (i < 2 || (i > 3 && i < 9)) { if (img -> show_poly[i][j]) { show_hide_poly (NULL, NULL, & this_proj -> modelgl -> gcid[i][j][i]); } } } for (j=0; j coord -> totcoord[i]; j++) { if (! img -> show_coord[i][j]) { show_hide_coord (NULL, NULL, & this_proj -> modelgl -> gcid[i][j][i]); } } } update_menu_bar (this_proj -> modelgl); #endif return OK; } atomes_1.3.1/src/project/read_bond.c0000664000175000017500000002000615212624223017021 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_bond.c * @short Function to read bonding information in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'read_bond.c' * * Contains: * - The function to read bonding information in the atomes project file format * * List of functions: int read_bonding (FILE * fp); */ #include "global.h" #include "project.h" #include "glview.h" extern void new_coord_menus (project * this_proj, coord_info * coord, int new_spec, int nmols, gboolean * showcoord[2], gboolean * showpoly[2], gboolean * showfrag, gboolean update_it, gboolean update_mol); /*! \fn int read_bonding (FILE * fp) \brief read bonding information from file \param fp the file pointer */ int read_bonding (FILE * fp) { int i, j, k, l, m; distance clo; coord_info * coord = g_malloc0(sizeof*coord); coord -> species = active_project -> nspec; image * img = active_glwin -> anim -> last -> img; gboolean read_bond = FALSE; if (! active_glwin -> bonding || ! active_glwin -> adv_bonding[1] || active_project -> natomes > ATOM_LIMIT || active_project -> steps > reading_step_limit) { read_bond = TRUE; } if (read_bond) { active_glwin -> bonds = allocdint (active_project -> steps, 2); active_glwin -> bondid = g_malloc0(active_project -> steps*sizeof*active_glwin -> bondid); for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (fread (active_project -> atoms[i][j].coord, sizeof(int), 5, fp) != 5) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (fread (& active_project -> atoms[i][j].numv, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (active_project -> atoms[i][j].numv) { active_project -> atoms[i][j].vois = allocint (active_project -> atoms[i][j].numv); if (fread (active_project -> atoms[i][j].vois, sizeof(int), active_project -> atoms[i][j].numv, fp) != active_project -> atoms[i][j].numv) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); } } if (fread (active_glwin -> bonds[i], sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); active_glwin -> bondid[i] = g_malloc0(2*sizeof*active_glwin -> bondid[i]); for (j=0; j<2; j++) { if (active_glwin -> bonds[i][j]) { active_glwin -> allbonds[j] += active_glwin -> bonds[i][j]; active_glwin -> bondid[i][j] = allocdint (active_glwin -> bonds[i][j], 2); if (j) active_glwin -> clones[i] = g_malloc0(active_glwin -> bonds[i][1]*sizeof*active_glwin -> clones[i]); for (k=0; k bonds[i][j]; k++) { if (fread (active_glwin -> bondid[i][j][k], sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (j) { l = active_glwin -> bondid[i][j][k][0]; m = active_glwin -> bondid[i][j][k][1]; clo = distance_3d (active_cell, (active_cell -> npt) ? i : 0, & active_project -> atoms[i][l], & active_project -> atoms[i][m]); active_glwin -> clones[i][k].x = clo.x; active_glwin -> clones[i][k].y = clo.y; active_glwin -> clones[i][k].z = clo.z; } } } } } for (i=0; i<2; i++) { coord -> ntg[i] = allocint (coord -> species); if (fread (coord -> ntg[i], sizeof(int), coord -> species, fp) != coord -> species) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); coord -> geolist[i] = g_malloc0(coord -> species*sizeof*coord -> geolist[i]); if (i == 1) coord -> partial_geo = g_malloc0(coord -> species*sizeof*coord -> partial_geo); for (j=0; j species; j++) { coord -> geolist[i][j] = g_malloc0(coord -> ntg[i][j]*sizeof*coord -> geolist[i][j]); if (fread (coord -> geolist[i][j], sizeof(int), coord -> ntg[i][j], fp) != coord -> ntg[i][j]) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (i == 1) { coord -> partial_geo[j] = g_malloc0(coord -> ntg[i][j]*sizeof*coord -> partial_geo[j]); for (k=0; k ntg[i][j]; k++) { coord -> partial_geo[j][k] = g_malloc0(coord -> species*sizeof*coord -> partial_geo[j][k]); if (fread (coord -> partial_geo[j][k], sizeof(int), coord -> species, fp) != coord -> species) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); } } } } coord -> cmax = 0; coord -> cmin = 20; for (i=0; i species; i++) { for (j=0; j ntg[1][i]; j++) { coord -> cmax = max(coord -> cmax, coord -> geolist[1][i][j]); coord -> cmin = min(coord -> cmin, coord -> geolist[1][i][j]); } } } for (i=0; i<10; i++) { if (fread (& j, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (i < 2 && active_glwin -> bonding && j != active_project -> coord -> totcoord[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (i > 1 && i < 4 && active_glwin -> adv_bonding[i-2] && j != active_project -> coord -> totcoord[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (i < 2) { if (fread (img -> show_atom[i], sizeof(gboolean), active_project -> nspec, fp) != active_project -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); if (fread (img -> show_label[i], sizeof(gboolean), active_project -> nspec, fp) != active_project -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_COORD); } if (active_project -> coord -> totcoord[i]) { if (! img -> show_poly[i] && (i < 2 || (i > 3 && i < 9))) img -> show_poly[i] = allocbool(active_project -> coord -> totcoord[i]); if (! img -> show_coord[i]) img -> show_coord[i] = allocbool(active_project -> coord -> totcoord[i]); if (fread (img -> show_coord[i], sizeof(gboolean), active_project -> coord -> totcoord[i], fp) != active_project -> coord -> totcoord[i]) return ERROR_RW; if (i < 2 || (i > 3 && i < 9)) { if (fread (img -> show_poly[i], sizeof(gboolean), active_project -> coord -> totcoord[i], fp) != active_project -> coord -> totcoord[i]) return ERROR_RW; } } } if (! active_glwin -> bonding || ! active_glwin -> adv_bonding[1] || active_project -> natomes > ATOM_LIMIT || active_project -> steps > reading_step_limit) { gboolean * showfrag = duplicate_bool (active_project -> coord -> totcoord[2], img -> show_coord[2]); gboolean * showcoord[2]; gboolean * showpoly[2]; for (i=0; i<2; i++) { showcoord[i] = duplicate_bool (active_project -> coord -> totcoord[i], img -> show_coord[i]); showpoly[i] = duplicate_bool (active_project -> coord -> totcoord[i], img -> show_poly[i]); } for (i=0; i<10; i++) coord -> totcoord[i] = active_project -> coord -> totcoord[i]; active_project -> coord -> cmax = coord -> cmax; active_project -> coord -> cmin = coord -> cmin; new_coord_menus (active_project, coord, active_project -> nspec, 0, showcoord, showpoly, showfrag, TRUE, TRUE); } g_free (coord); return OK; } atomes_1.3.1/src/project/save_qm.c0000664000175000017500000002310715212624223016544 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file save_qm.c * @short Functions to save ab-initio (CPMD/CP2K) calculation parameters in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'save_qm.c' * * Contains: * - The functions to save ab-initio (CPMD/CP2K) calculation parameters in the atomes project file format * * List of functions: int save_thermo (FILE * fp, thermostat * thermo); int save_fixed_atoms (FILE * fp, int fixatoms, int * fixlist, int ** fixcoord); int save_cpmd_data (FILE * fp, int cid, project * this_proj); int save_cp2k_data (FILE * fp, int cid, project * this_proj); */ #include "global.h" #include "project.h" /*! \fn int save_thermo (FILE * fp, thermostat * thermo) \brief save thermostat to file \param fp the file pointer \param thermo the thermostat to save */ int save_thermo (FILE * fp, thermostat * thermo) { if (fwrite (& thermo -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& thermo -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& thermo -> sys, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& thermo -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (thermo -> params, sizeof(double), 4, fp) != 4) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& thermo -> natoms, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); return OK; } /*! \fn int save_fixed_atoms (FILE * fp, int fixatoms, int * fixlist, int ** fixcoord) \brief save fixed atom(s) to file \param fp the file pointer \param fixatoms the number of fixed atom(s) \param fixlist the list of fixed atom(s) \param fixcoord the list of fixed coordinate(s) for the fix atom(s) */ int save_fixed_atoms (FILE * fp, int fixatoms, int * fixlist, int ** fixcoord) { int i; if (fwrite (& fixatoms, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fixatoms) { if (fixlist) { if (fwrite (fixlist, sizeof(int), fixatoms, fp) != fixatoms) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } if (fixcoord) { for (i=0; i cpmd_input[cid] == NULL) { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); return OK; } i = 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& this_proj -> cpmd_input[cid] -> calc_type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (this_proj -> cpmd_input[cid] -> default_opts, sizeof(double), 17, fp) != 17) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (this_proj -> cpmd_input[cid] -> calc_opts, sizeof(double), 24, fp) != 24) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& this_proj -> cpmd_input[cid] -> thermostats, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (this_proj -> cpmd_input[cid] -> thermostats) { thermostat * thermo = this_proj -> cpmd_input[cid] -> ions_thermostat; i = 0; while (thermo) { if (save_thermo (fp, thermo) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } i ++; thermo = thermo -> next; } i = (this_proj -> cpmd_input[cid] -> elec_thermostat) ? 1 : 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (this_proj -> cpmd_input[cid] -> elec_thermostat) { if (save_thermo (fp, this_proj -> cpmd_input[cid] -> elec_thermostat) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } } } if (save_fixed_atoms (fp, this_proj -> cpmd_input[cid] -> fixat, this_proj -> cpmd_input[cid] -> fixlist, this_proj -> cpmd_input[cid] -> fixcoord) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } if (fwrite (& this_proj -> cpmd_input[cid] -> dummies, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (this_proj -> cpmd_input[cid] -> dummies) { dummy_atom * dummy = this_proj -> cpmd_input[cid] -> dummy; while (dummy) { if (fwrite (& dummy -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& dummy -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& dummy -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (dummy -> xyz, sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (dummy -> coord, sizeof(int), 4, fp) != 4) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& dummy -> natoms, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (dummy -> natoms) { if (fwrite (dummy -> list, sizeof(int), dummy -> natoms, fp) != dummy -> natoms) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } dummy = dummy -> next; } } for (i=0; i nspec; i++) { if (fwrite (this_proj -> cpmd_input[cid] -> pp[i], sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } return save_this_string (fp, this_proj -> cpmd_input[cid] -> info); } /*! \fn int save_cp2k_data (FILE * fp, int cid, project * this_proj) \brief save CP2K data to file \param fp the file pointer \param cid the CP2K id (0 = ab-initio, 1 = QM-MM) \param this_proj the target project */ int save_cp2k_data (FILE * fp, int cid, project * this_proj) { int i, j; if (this_proj -> cp2k_input[cid] == NULL) { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); return OK; } i = 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (& this_proj -> cp2k_input[cid] -> input_type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fwrite (this_proj -> cp2k_input[cid] -> opts, sizeof(double), 42, fp) != 42) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); for (i=0; i<3; i++) { if (fwrite (this_proj -> cp2k_input[cid] -> extra_opts[i], sizeof(double), 4, fp) != 4) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } if (fwrite (& this_proj -> cp2k_input[cid] -> thermostats, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (this_proj -> cp2k_input[cid] -> thermostats) { thermostat * thermo = this_proj -> cp2k_input[cid] -> ions_thermostat; while (thermo) { if (save_thermo (fp, thermo) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } thermo = thermo -> next; } } for (i=0; i<2; i++) { if (save_fixed_atoms (fp, this_proj -> cp2k_input[cid] -> fixat[i], this_proj -> cp2k_input[cid] -> fixlist[i], this_proj -> cp2k_input[cid] -> fixcoord[i]) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } } for (i=0; i nspec; i++) { if (fwrite (this_proj -> cp2k_input[cid] -> spec_data[i], sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); for (j=0; j<2; j++) { if (save_this_string (fp, this_proj -> cp2k_input[cid] -> spec_files[i][j]) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } } for (i=0; i<5; i++) { if (save_this_string (fp, this_proj -> cp2k_input[cid] -> files[i]) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } return save_this_string (fp, this_proj -> cp2k_input[cid] -> info); } atomes_1.3.1/src/project/save_p.c0000664000175000017500000004070315212624223016367 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file save_p.c * @short Functions to start saving an atomes project file * @author Sébastien Le Roux */ /* * This file: 'save_p.c' * * Contains: * - The functions to start saving an atomes project file * * List of functions: int save_this_string (FILE * fp, gchar * string); int save_analysis (FILE * fp, project * this_proj, atomes_analysis * this_analysis, int wid); int save_project (FILE * fp, project * this_proj, int wid); */ #include "global.h" #include "project.h" /*! \fn int save_this_string (FILE * fp, gchar * string) \brief save string to file \param fp the file pointer \param string the string to save */ int save_this_string (FILE * fp, gchar * string) { int i; if (string) { i = strlen (string); if (i > 0) { i ++; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (string, sizeof(char), i, fp) != i) return ERROR_RW; } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; } } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; } return OK; } /*! \fn int save_analysis (FILE * fp, project * this_proj, atomes_analysis * this_analysis, int wid) \brief saving analysis parameter(s) and result(s) to project file \param fp the file pointer \param this_proj the target project \param this_analysis the target analysis \param wid saving workspace (1/0) */ int save_analysis (FILE * fp, project * this_proj, atomes_analysis * this_analysis, int wid) { int i, j; if (fwrite (& this_analysis -> aid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (save_this_string (fp, this_analysis -> name) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> avail_ok, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> init_ok, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> calc_ok, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> requires_md, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> num_delta, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> delta, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> min, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> max, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> fact, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> graph_res, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (this_analysis -> graph_res) { if (fwrite (& this_analysis -> numc, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (& this_analysis -> c_sets, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fwrite (this_analysis -> compat_id, sizeof(int), this_analysis -> c_sets, fp) != this_analysis -> c_sets) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); i = (this_analysis -> x_title) ? 1 : 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (this_analysis -> x_title) { if (save_this_string (fp, this_analysis -> x_title) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); } if (this_analysis -> curves) { i = 0; for (j=0; j numc; j++) { if (this_analysis -> curves[j] -> ndata) i ++; } if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (i) { for (j=0; j numc; j++) { if (this_analysis -> curves[j] -> ndata) { if (save_project_curve (fp, this_proj, wid, this_analysis -> aid, j) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_CURVE; } } } } } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); } } return OK; } /*! \fn int save_project (FILE * fp, project * this_proj, int wid) \brief save project to file \param fp the file pointer \param this_proj the target project \param wid saving workspace (1/0) */ int save_project (FILE * fp, project * this_proj, int wid) { int i, j, k; gchar * ver; // First 2 lines for compatibility issues i = 2; j = 9; ver = g_strdup_printf ("%%\n%% project file v-%1d.%1d\n%%\n", i, j); if (save_this_string (fp, ver) != OK) { g_free (ver); return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } g_free (ver); if (save_this_string (fp, this_proj -> name) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (& this_proj -> tfile, sizeof(this_proj -> tfile), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (this_proj -> tfile > -1) { if (save_this_string (fp, this_proj -> coordfile) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (this_proj -> bondfile != NULL) { if (save_this_string (fp, this_proj -> bondfile) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } else { i = -1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } //Note: we now save the number of analysis available at this version of the project file i = NCALCS; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (& this_proj -> nspec, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (& this_proj -> natomes, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (& this_proj -> steps, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (& this_proj -> cell.pbc, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (& this_proj -> cell.frac, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (& this_proj -> cell.ltype, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); i = (this_proj -> cell.npt) ? this_proj -> steps : 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); for (j=0; j cell.box[j].vect[k], sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fwrite (this_proj -> cell.box[j].param[0], sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (this_proj -> cell.box[j].param[1], sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fwrite (& this_proj -> cell.crystal, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (this_proj -> cell.sp_group) { if (fwrite (& this_proj -> cell.sp_group -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (save_this_string (fp, this_proj -> cell.sp_group -> bravais) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (save_this_string (fp, this_proj -> cell.sp_group -> hms) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (save_this_string (fp, this_proj -> cell.sp_group -> setting) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fwrite (& this_proj -> run, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (& this_proj -> initgl, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (this_proj -> modelgl -> pixels, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); // Analysis data for k-points sampling for (i=0; i<2; i++) { if (fwrite (this_proj -> sk_advanced[i], sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } // Next lines are calculation data related to rings and chains statistics if (fwrite (this_proj -> rsearch, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); for (i=0; i<5; i++) { if (fwrite (this_proj -> rsparam[i], sizeof(int), 6, fp) != 6) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (this_proj -> rsdata[i], sizeof(double), 5, fp) != 5) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fwrite (& this_proj -> csearch, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (this_proj -> csparam, sizeof(int), 7, fp) != 7) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (this_proj -> csdata, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); // Time unit for dynamical calculations, delta t and steps are stored in MSD analysis if (fwrite (& this_proj -> tunit, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (this_proj -> steps) { if (fwrite (& this_proj -> skt_corr_threshold, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (& this_proj -> skt_all_sets, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (! this_proj -> skt_all_sets) { i = (this_proj -> skt_step_id) ? this_proj -> skt_n_data_sets : 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (i) { if (fwrite (this_proj -> skt_step_id, sizeof(int), this_proj -> skt_n_data_sets, fp) != this_proj -> skt_n_data_sets) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } } i = (this_proj -> sqw_q_id) ? this_proj -> sqw_n_data_sets : 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (i) { if (fwrite (this_proj -> sqw_q_id, sizeof(double), this_proj -> sqw_n_data_sets, fp) != this_proj -> sqw_n_data_sets) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fwrite (& this_proj -> sqw_freq, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (this_proj -> natomes == 0 || this_proj -> nspec == 0) { // error return signal_error (__FILE__, __func__, __LINE__, ERROR_NO_WAY); } else { for (i=0; i nspec; i++) { if (save_this_string (fp, this_proj -> chemistry -> label[i]) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (save_this_string (fp, this_proj -> chemistry -> element[i]) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fwrite (this_proj -> chemistry -> nsps, sizeof(int), this_proj -> nspec, fp) != this_proj -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fwrite (this_proj -> chemistry -> formula, sizeof(int), this_proj -> nspec, fp) != this_proj -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); for (i=0; i chemistry -> chem_prop[i], sizeof(double), this_proj -> nspec, fp) != this_proj -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fwrite (& this_proj -> chemistry -> grtotcutoff, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); for (i=0; i nspec; i++) { if (fwrite (this_proj -> chemistry -> cutoffs[i], sizeof(double), this_proj -> nspec, fp) != this_proj -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (save_atom_a (fp, this_proj, i, j) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_ATOM_A; } } } if (this_proj -> run) { if (this_proj -> analysis) { for (i=0; i analysis[i]) { if (save_analysis (fp, this_proj, this_proj -> analysis[i], wid) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_ANA; } } } } if (this_proj -> initgl) { if (fwrite (& this_proj -> modelgl -> bonding, sizeof(gboolean), 1, fp) != 1) return ERROR_COORD; if (fwrite (this_proj -> modelgl -> adv_bonding, sizeof(gboolean), 2, fp) != 2) return ERROR_COORD; // for (i=0; i<10; i++) g_debug ("SAVING :: i= %d, this_proj -> coord -> totcoord[%d]= %d", i, i, this_proj -> coord -> totcoord[i]); if (fwrite (this_proj -> coord -> totcoord, sizeof(int), 10, fp) != 10) return ERROR_COORD; // Save molecule if ((this_proj -> natomes > ATOM_LIMIT || this_proj -> steps > STEP_LIMIT) && this_proj -> modelgl -> adv_bonding[1]) { if (save_mol (fp, this_proj) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_MOL; } } // saving bonding info if (save_bonding (fp, this_proj) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_COORD; } // saving glwin info if (save_opengl_image (fp, this_proj, this_proj -> modelgl -> anim -> last -> img, this_proj -> nspec) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_IMAGE; } if (save_dlp_field_data (fp, this_proj) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (save_lmp_field_data (fp, this_proj) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } for (i=0; i<2; i++) { if (save_cpmd_data (fp, i, this_proj) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } } for (i=0; i<2; i++) { if (save_cp2k_data (fp, i, this_proj) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } } } } } #ifdef DEBUG // debugioproj (this_proj, "WRITE"); #endif return OK; } atomes_1.3.1/src/project/save_opengl.c0000664000175000017500000006624115212624223017421 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file save_opengl.c * @short Functions to save OpenGL information in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'save_opengl.c' * * Contains: * - The functions to save OpenGL information in the atomes project file format * * List of functions: int save_atom_a (FILE * fp, project * this_proj, int s, int a); int save_atom_b (FILE * fp, project * this_proj, int s, int a); int save_rings_chains_data (FILE * fp, int type, int size, int steps, int data_max, int ** num_data, gboolean *** show, int **** all_data); int write_this_image_label (FILE * fp, screen_label label); int write_this_box (FILE * fp, box * abc); int write_this_axis (FILE * fp, axis * xyz); int save_opengl_image (FILE * fp, project * this_proj, image * img, int sid); */ #include "global.h" #include "project.h" #include "glwin.h" /*! \fn int save_atom_a (FILE * fp, project * this_proj, int s, int a) \brief save atom data to file (a) \param fp the file pointer \param this_proj the target project \param s the MD step \param a the atom number */ int save_atom_a (FILE * fp, project * this_proj, int s, int a) { if (fwrite (& this_proj -> atoms[s][a].id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); if (fwrite (& this_proj -> atoms[s][a].sp, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); if (fwrite (& this_proj -> atoms[s][a].x, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); if (fwrite (& this_proj -> atoms[s][a].y, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); if (fwrite (& this_proj -> atoms[s][a].z, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_A); //g_debug ("Saving:: step= %d, at= %d, sp[%d]= %d, x[%d]= %f, y[%d]= %f, z[%d]= %f", // s, a+1, a, this_proj -> atoms[s][a].sp, a, this_proj -> atoms[s][a].x, a, this_proj -> atoms[s][a].y, a, this_proj -> atoms[s][a].z); return OK; } /*! \fn int save_atom_b (FILE * fp, project * this_proj, int s, int a) \brief save atom data to file (b) \param fp the file pointer \param this_proj the target project \param s the MD step \param a the atom number */ int save_atom_b (FILE * fp, project * this_proj, int s, int a) { if (fwrite (this_proj -> atoms[s][a].show, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_B); if (fwrite (this_proj -> atoms[s][a].label, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_B); if (fwrite (& this_proj -> atoms[s][a].style, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ATOM_B); return OK; } /*! \fn int save_rings_chains_data (FILE * fp, int type, int size, int steps, int data_max, int ** num_data, gboolean *** show, int **** all_data) \brief saving rings and chains statistics data to file \param fp the file pointer \param type Rings (0) or chains (1) \param size the number of data to save \param steps the MD step \param data_max the maximum size of \param num_data Id of the objects to save \param show Display information pointer \param all_data Atoms id of the objects to save */ int save_rings_chains_data (FILE * fp, int type, int size, int steps, int data_max, int ** num_data, gboolean *** show, int **** all_data) { int i, j, k; if (fwrite (& data_max, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_RW); if (data_max) { for (i=0; i box, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& abc -> rad, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& abc -> line, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& abc -> color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (abc -> extra_cell, sizeof(int), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); return OK; } /*! \fn int write_this_axis (FILE * fp, axis * xyz) \brief save OpenGL image axis properties to file \param fp the file pointer \param axis the target axis data */ int write_this_axis (FILE * fp, axis * xyz) { if (fwrite (& xyz -> axis, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& xyz -> rad, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& xyz -> line, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); // if (fwrite (& xyz -> color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& xyz -> t_pos, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& xyz -> length, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (xyz -> c_pos, sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); gboolean val; int i; if (xyz -> color != NULL) { val = TRUE; } else { val = FALSE; } if (fwrite (& val, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (val) { for (i=0; i<3; i++) { if (fwrite (& xyz -> color[i], sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } if (fwrite (& xyz -> labels, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i<3; i++) { if (save_this_string (fp, xyz -> title[i]) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } return OK; } /*! \fn int save_opengl_image (FILE * fp, project * this_proj, image * img, int sid) \brief save OpenGL image properties to file \param fp the file pointer \param this_proj the target project \param img the image that contains the data \param sid the number of chemical species */ int save_opengl_image (FILE * fp, project * this_proj, image * img, int sid) { int i, j, k, l; if (fwrite (& img -> back -> gradient, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (img -> back -> gradient) { if (fwrite (& img -> back -> direction, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> back -> position, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> back -> gradient_color, sizeof(ColRGBA), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } else { if (fwrite (& img -> back -> color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (this_proj -> modelgl -> custom_map != NULL) img -> color_map[0] += 10; if (fwrite (img -> color_map, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (this_proj -> modelgl -> custom_map != NULL) { img -> color_map[0] -= 10; colormap * map = this_proj -> modelgl -> custom_map; if (fwrite (& map -> points, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& map -> cmax, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& map -> cmin, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (map -> positions, sizeof(float), map -> points, fp) != map -> points) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (map -> values, sizeof(ColRGBA), map -> points, fp) != map -> points) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i steps; i++) { if (fwrite (map -> data[i], sizeof(float), this_proj -> natomes, fp) != this_proj -> natomes) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } if (fwrite (& img -> cloned_poly, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> at_color, sizeof(ColRGBA), sid*2, fp) != sid*2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> sphererad, sizeof(double), sid*2, fp) != sid*2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> pointrad, sizeof(double), sid*2, fp) != sid*2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> atomicrad, sizeof(double), sid*2, fp) != sid*2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i bondrad[i], sizeof(double), 2*sid, fp) != 2*sid) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> linerad[i], sizeof(double), 2*sid, fp) != 2*sid) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fwrite (img -> radall, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> draw_clones, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i<5; i++) { if (write_this_image_label(fp, img -> labels[i]) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_IMAGE; } } if (fwrite (img -> acl_format, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); // Measures if (fwrite (img -> mtilt, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> mpattern, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> mfactor, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> mwidth, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> m_is_pressed, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); // Model box if (write_this_box (fp, img -> abc) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_IMAGE; } // Axis if (write_this_axis (fp, img -> xyz) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_IMAGE; } // OpenGL if (fwrite (& img -> p_depth, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> gnear, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> gfar, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> gleft, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> gright, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> gtop, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> gbottom, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> rotation_quaternion, sizeof(vec4_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> rotation_mode, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> zoom, sizeof(GLdouble), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> c_shift, sizeof(GLdouble), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> style, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> quality, sizeof(GLint), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> ray_tracing, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> render, sizeof(GLint), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> l_ghtning.lights, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i l_ghtning.lights; i++) { if (fwrite (& img -> l_ghtning.spot[i] -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> l_ghtning.spot[i] -> fix, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> l_ghtning.spot[i] -> show, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> l_ghtning.spot[i] -> position, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> l_ghtning.spot[i] -> direction, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> l_ghtning.spot[i] -> intensity, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> l_ghtning.spot[i] -> attenuation, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> l_ghtning.spot[i] -> spot_data, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } if (fwrite (& img -> m_terial.predefine, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> m_terial.albedo, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> m_terial.param, sizeof(GLfloat), 6, fp) != 6) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> f_g.mode, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> f_g.based, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> f_g.density, sizeof(float), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> f_g.depth, sizeof(float), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> f_g.color, sizeof(vec3_t), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> filled_type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> step, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& img -> rep, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i<4; i++) { if (i < 2) { for (j=0; j spcolor[i][j], sizeof(ColRGBA), this_proj -> coord -> ntg[i][j], fp) != this_proj -> coord -> ntg[i][j]) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } else { j = (this_proj -> modelgl -> adv_bonding[i-2] && this_proj -> coord -> totcoord[i]) ? this_proj -> coord -> totcoord[i] : 0; if (fwrite (& j, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (j) { if (fwrite (img -> spcolor[i][0], sizeof(ColRGBA), this_proj -> coord -> totcoord[i], fp) != this_proj -> coord -> totcoord[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } } if (fwrite (& this_proj -> modelgl -> rings, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (this_proj -> modelgl -> rings) { for (i=0; i<5; i++) { if (save_rings_chains_data (fp, 0, this_proj -> rsparam[i][1], this_proj -> steps, this_proj -> modelgl -> ring_max[i], this_proj -> modelgl -> num_rings[i], this_proj -> modelgl -> show_rpoly[i], this_proj -> modelgl -> all_rings[i]) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_RINGS; } } } if (fwrite (& this_proj -> modelgl -> chains, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (this_proj -> modelgl -> chains) { if (save_rings_chains_data (fp, 1, this_proj -> csparam[5], this_proj -> steps, this_proj -> modelgl -> chain_max, this_proj -> modelgl -> num_chains, NULL, this_proj -> modelgl -> all_chains) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_CHAINS; } } if (this_proj -> modelgl -> volumes) { i = 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i modelgl -> atoms_volume[i], sizeof(double), this_proj -> steps, fp) != this_proj -> steps) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (this_proj -> modelgl -> atoms_ppvolume[i], sizeof(double), this_proj -> steps, fp) != this_proj -> steps) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (j=0; j steps; j++) { if (fwrite (this_proj -> modelgl -> volume_box[i][j], sizeof(double), 9, fp) != 9) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } if (fwrite (this_proj -> modelgl -> comp_vol, sizeof(gboolean), FILLED_STYLES, fp) != FILLED_STYLES) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> show_vol, sizeof(gboolean), FILLED_STYLES, fp) != FILLED_STYLES) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> vol_col, sizeof(ColRGBA), FILLED_STYLES, fp) != FILLED_STYLES) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (this_proj -> modelgl -> adv_bonding[0]) { if (fwrite (& this_proj -> coord -> totcoord[2], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i steps; k++) { for (l=0; l coord -> totcoord[2]; l++) { if (this_proj -> modelgl -> fm_comp_vol[0][i][k][l]) j++; } } if (fwrite (& j, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (j) { for (k=0; k steps; k++) { for (l=0; l coord -> totcoord[2]; l++) { if (this_proj -> modelgl -> fm_comp_vol[0][i][k][l]) { if (fwrite (& k, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& l, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& this_proj -> modelgl -> frag_mol_ppvolume[0][i][k][l], sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (this_proj -> modelgl -> frag_box[i][k][l], sizeof(double), 9, fp) != 9) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } } if (fwrite (img -> fm_show_vol[0][i], sizeof(gboolean), this_proj -> coord -> totcoord[2], fp) != this_proj -> coord -> totcoord[2]) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> fm_vol_col[0][i], sizeof(ColRGBA), this_proj -> coord -> totcoord[2], fp) != this_proj -> coord -> totcoord[2]) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } if (this_proj -> modelgl -> adv_bonding[1]) { if (fwrite (& this_proj -> coord -> totcoord[3], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); for (i=0; i steps; k++) { for (l=0; l coord -> totcoord[3]; l++) { if (this_proj -> modelgl -> fm_comp_vol[1][i][k][l]) j++; } } if (fwrite (& j, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (j) { for (k=0; k steps; k++) { for (l=0; l coord -> totcoord[3]; l++) { if (this_proj -> modelgl -> fm_comp_vol[1][i][k][l]) { if (fwrite (& k, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& l, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (& this_proj -> modelgl -> frag_mol_ppvolume[1][i][k][l], sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } } if (fwrite (img -> fm_show_vol[1][i], sizeof(gboolean), this_proj -> coord -> totcoord[3], fp) != this_proj -> coord -> totcoord[3]) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (fwrite (img -> fm_vol_col[1][i], sizeof(ColRGBA), this_proj -> coord -> totcoord[3], fp) != this_proj -> coord -> totcoord[3]) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } for (i=0; i steps; i++) { for (j=0; j< this_proj -> natomes; j++) { if (save_atom_b (fp, this_proj, i, j) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_ATOM_B; } } } // Finally selection lists, bonds, angles and dihedrals for (i=0; i<2; i++) { if (fwrite (& img -> selected[i] -> selected, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (img -> selected[i] -> selected) { atom_in_selection * at = img -> selected[i] -> first; for (j=0; j selected[i] -> selected; j++) { if (fwrite (& at -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (at -> next) at = at -> next; } if (img -> selected[i] -> selected >= 2 && img -> selected[i] -> selected <= 20) { j = num_bonds (img -> selected[i] -> selected); if (fwrite (img -> selected[i] -> selected_bonds, sizeof(int), j, fp) != j) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (img -> selected[i] -> selected >= 3) { j = num_angles (img -> selected[i] -> selected); if (fwrite (img -> selected[i] -> selected_angles, sizeof(int), j, fp) != j) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); if (img -> selected[i] -> selected >= 4 && img -> selected[i] -> selected <= 10) { j = num_dihedrals (img -> selected[i] -> selected); if (fwrite (img -> selected[i] -> selected_dihedrals, sizeof(int), j, fp) != j) return signal_error (__FILE__, __func__, __LINE__, ERROR_IMAGE); } } } } } return OK; } atomes_1.3.1/src/project/open_p.c0000664000175000017500000007034215212624223016374 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file open_p.c * @short Functions to start the reading of an atomes project file * @author Sébastien Le Roux */ /* * This file: 'open_p.c' * * Contains: * - The functions to start the reading of an atomes project file * * List of functions: int read_analysis (FILE * fp, project * this_proj, atomes_analysis * this_analysis, int wid); int open_project (FILE * fp, int wid); char * read_string (int i, FILE * fp); gchar * read_this_string (FILE * fp); void initcnames (project * this_proj, int rid); void allocatoms (project * this_proj); void alloc_proj_data (project * this_proj, int cid); chemical_data * alloc_chem_data (int spec); */ #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" #include "glview.h" #include "movie.h" #include "preferences.h" extern void init_box_calc (); extern void set_color_map_sensitive (glwin * view); extern void init_gr (project * this_proj, int rdf); extern void init_sq (project * this_proj, int sqk); extern void init_bond (project * this_proj); extern void init_ang (project * this_proj); extern void init_ring (project * this_proj); extern void init_chain (project * this_proj); extern void init_msd (project * this_proj); extern void init_sph (project * this_proj, int opening); extern void init_skt (project * this_proj, int opening); extern void alloc_analysis_curves (int pid, atomes_analysis * this_analysis); extern void add_curve_widgets (project * this_proj, int rid); extern G_MODULE_EXPORT void run_render_image (GtkDialog * info, gint response_id, gpointer data); float project_file_version; gboolean version_2_5_and_bellow; gboolean version_2_6_and_above; gboolean version_2_7_and_above; gboolean version_2_8_and_above; gboolean version_2_9_and_above; /*! \fn char * read_string (int i, FILE * fp) \brief read a string from a file \param i the size of the string to read \param fp the file pointer */ char * read_string (int i, FILE * fp) { char * tmp = NULL; tmp = g_malloc0(i*sizeof*tmp); int j; for (j=0; j 0) { gchar * str = read_string (i, fp); return str; } return NULL; } /*! \fn void initcnames (project * this_proj, int rid) \brief initialize curve names \param project the target project \param rid calculation id */ void initcnames (project * this_proj, int rid) { switch (rid) { case GDR: init_gr (this_proj, rid); break; case SQD: init_sq (this_proj, rid); break; case SKD: init_sq (this_proj, rid); break; case GDK: init_gr (this_proj, rid); break; case BND: init_bond (this_proj); break; case ANG: init_ang (this_proj); break; case RIN: init_ring (this_proj); break; case CHA: init_chain (this_proj); break; case SPH: init_sph (this_proj, 1); break; case MSD: init_msd (this_proj); break; case SKT: init_skt (this_proj, 1); break; } } /*! \fn void allocatoms (project * this_proj) \brief allocate project data \param this_proj the target project */ void allocatoms (project * this_proj) { int i, j; if (this_proj -> atoms != NULL) { g_free (this_proj -> atoms); this_proj -> atoms = NULL; } this_proj -> atoms = g_malloc0(this_proj -> steps*sizeof*this_proj -> atoms); for (i=0; i < this_proj -> steps; i++) { this_proj -> atoms[i] = g_malloc0(this_proj -> natomes*sizeof*this_proj -> atoms[i]); for (j=0; j natomes; j++) { this_proj -> atoms[i][j].style = NONE; } } } /*! \fn chemical_data * alloc_chem_data (int spec) \brief allocate chemistry data \param spec the number of chemical species */ chemical_data * alloc_chem_data (int spec) { chemical_data * chem = g_malloc0(sizeof*chem); chem -> label = g_malloc0(spec*sizeof*chem -> label); chem -> element = g_malloc0(spec*sizeof*chem -> element); chem -> nsps = allocint (spec); chem -> formula = allocint (spec); chem -> grtotcutoff = default_totcut; chem -> cutoffs = allocddouble (spec, spec); chem -> chem_prop = allocddouble (CHEM_PARAMS, spec); return chem; } /*! \fn void alloc_proj_data (project * this_proj, int cid) \brief allocate data \param this_proj the target project \param cid Allocate chemistry data (1/0) */ void alloc_proj_data (project * this_proj, int cid) { if (cid) this_proj -> chemistry = alloc_chem_data (this_proj -> nspec); allocatoms (this_proj); } /*! \fn int read_analysis (FILE * fp, project * this_proj, atomes_analysis * this_analysis, int wid) \brief saving analysis parameter(s) and result(s) to project file \param fp the file pointer \param this_proj the target project \param this_analysis the target analysis \param wid reading workspace (1/0) */ int read_analysis (FILE * fp, project * this_proj, atomes_analysis * this_analysis, int wid) { int i, j; if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (i != this_analysis -> aid) { // This is not supposed to happen return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); } this_analysis -> name = read_this_string (fp); if (! this_analysis -> name) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> avail_ok, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> init_ok, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> calc_ok, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> requires_md, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> num_delta, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> delta, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> min, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> max, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> fact, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& this_analysis -> graph_res, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (this_analysis -> graph_res) { if (fread (& this_analysis -> numc, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (i != this_analysis -> c_sets) { // This is not supposed to happen return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); } if (fread (this_analysis -> compat_id, sizeof(int), this_analysis -> c_sets, fp) != this_analysis -> c_sets) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (i) { this_analysis -> x_title = read_this_string (fp); if (! this_analysis -> x_title) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); } if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_ANA); if (i) { initcnames (this_proj, this_analysis -> aid); for (j=0; j name, this_analysis -> aid, j); if (read_project_curve (fp, wid, this_proj -> id) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); // g_debug ("Error :: analysis= %s, aid= %d, j= %d", this_analysis -> name, this_analysis -> aid, j); return ERROR_CURVE; } if (this_analysis -> aid == SPH) { init_curve_title (this_proj, SPH, j); } } } } return OK; } /*! \fn int open_project (FILE * fp, int wid) \brief open atomes project file \param fp the file pointer \param wid reading workspace (1/0) */ int open_project (FILE * fp, int wid) { int i, j, k; gchar * version; version = read_this_string (fp); if (! version) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); project_file_version = 0.0; if (sscanf(version, "%*[^0-9]%f", & project_file_version) != 1) { return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } version_2_6_and_above = FALSE; version_2_7_and_above = FALSE; version_2_8_and_above = FALSE; version_2_9_and_above = FALSE; int calcs_to_read; // Start version related tests if (g_strcmp0(version, "%\n% project file v-2.6\n%\n") == 0) { version_2_6_and_above = TRUE; } else if (g_strcmp0(version, "%\n% project file v-2.7\n%\n") == 0) { version_2_6_and_above = TRUE; version_2_7_and_above = TRUE; } else if (g_strcmp0(version, "%\n% project file v-2.8\n%\n") == 0) { version_2_6_and_above = TRUE; version_2_7_and_above = TRUE; version_2_8_and_above = TRUE; } else if (g_strcmp0(version, "%\n% project file v-2.9\n%\n") == 0) { version_2_6_and_above = TRUE; version_2_7_and_above = TRUE; version_2_8_and_above = TRUE; version_2_9_and_above = TRUE; } // End version related tests // Ensure file compatibility with STEP_LIMIT for atomes version < 1.3.0 reading_step_limit = (version_2_9_and_above) ? STEP_LIMIT : STEP_LIMIT*10; // Temporary buffers for version compatibility < 2.9 gboolean * tmp_avail, * tmp_init, * tmp_calc; int * tmp_num_delta; double * tmp_delta; double * tmp_min; double * tmp_max; #ifdef DEBUG g_debug ("%s", version); #endif // DEBUG g_free (version); // After that we read the data active_project -> name = read_this_string (fp); if (active_project -> name == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); #ifdef DEBUG g_debug ("OPEN_PROJECT: Project name= %s",active_project -> name); #endif if (fread (& active_project -> tfile, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (active_project -> tfile > -1) { active_project -> coordfile = read_this_string (fp); if (active_project -> coordfile == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (i > -1) { active_project -> bondfile = read_this_string (fp); if (active_project -> bondfile == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (version_2_9_and_above) { if (fread (& calcs_to_read, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } else { // NCALCS was first set to 10 calcs_to_read = 10; // We need temporary buffers to read this data tmp_avail = allocbool (calcs_to_read); tmp_init = allocbool (calcs_to_read); tmp_calc = allocbool (calcs_to_read); if (fread (tmp_avail, sizeof(gboolean), calcs_to_read, fp) != calcs_to_read) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (tmp_init, sizeof(gboolean), calcs_to_read, fp) != calcs_to_read) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (tmp_calc, sizeof(gboolean), calcs_to_read, fp) != calcs_to_read) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fread (& active_project -> nspec, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (& active_project -> natomes, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (& active_project -> steps, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (& active_cell -> pbc, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (& active_cell -> frac, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (& active_cell -> ltype, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (i > 1 && i != active_project -> steps) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (i > 1) active_cell -> npt = TRUE; active_cell -> box = g_malloc0(i*sizeof*active_cell -> box); active_box = & active_cell -> box[0]; for (j=0; j box[j].vect[k], sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fread (active_cell -> box[j].param[0], sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (active_cell -> box[j].param[1], sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fread (& active_cell -> crystal, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (active_cell -> crystal && i) { active_cell -> sp_group = g_malloc0(sizeof*active_cell -> sp_group); active_cell -> sp_group -> id = i; active_cell -> sp_group -> bravais = read_this_string (fp); if (! active_cell -> sp_group -> bravais) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); active_cell -> sp_group -> hms = read_this_string (fp); if (! active_cell -> sp_group -> hms) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); active_cell -> sp_group -> setting = read_this_string (fp); if (! active_cell -> sp_group -> setting) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fread (& active_project -> run, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (& active_project -> initgl, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (active_project -> tmp_pixels, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (atomes_render_image && ! render_image_pixels) render_image_pixels = duplicate_int (2, active_project -> tmp_pixels); if (! version_2_9_and_above) { // Temporary buffers again tmp_num_delta = allocint (calcs_to_read); tmp_delta = allocdouble (calcs_to_read); if (fread (tmp_num_delta, sizeof(int), calcs_to_read, fp) != calcs_to_read) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (tmp_delta, sizeof(double), calcs_to_read, fp) != calcs_to_read) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } else { // Analysis data for k-points sampling for (i=0; i<2; i++) { if (fread (active_project -> sk_advanced[i], sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } } if (fread (active_project -> rsearch, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); for (i=0; i<5; i++) { if (fread (active_project -> rsparam[i], sizeof(int), 6, fp) != 6) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (active_project -> rsdata[i], sizeof(double), 5, fp) != 5) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fread (& active_project -> csearch, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (active_project -> csparam, sizeof(int), 7, fp) != 7) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (active_project -> csdata, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (! version_2_9_and_above) { // Temporary buffers again tmp_min = allocdouble (calcs_to_read); tmp_max = allocdouble (calcs_to_read); if (fread (tmp_min, sizeof(double), calcs_to_read, fp) != calcs_to_read) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (tmp_max, sizeof(double), calcs_to_read, fp) != calcs_to_read) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fread (& active_project -> tunit, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (version_2_9_and_above) { if (active_project -> steps) { if (fread (& active_project -> skt_corr_threshold, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (& active_project -> skt_all_sets, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (! active_project -> skt_all_sets) { if (fread (& active_project -> skt_n_data_sets, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (active_project -> skt_n_data_sets) { active_project -> skt_step_id = allocint (active_project -> skt_n_data_sets); if (fread (active_project -> skt_step_id, sizeof(int), active_project -> skt_n_data_sets, fp) != active_project -> skt_n_data_sets) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } } if (fread (& active_project -> sqw_n_data_sets, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (active_project -> sqw_n_data_sets) { active_project -> sqw_q_id = allocdouble (active_project -> sqw_n_data_sets); if (fread (active_project -> sqw_q_id, sizeof(double), active_project -> sqw_n_data_sets, fp) != active_project -> sqw_n_data_sets) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (fread (& active_project -> sqw_freq, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } } if (! active_project -> natomes || ! active_project -> nspec) { return signal_error (__FILE__, __func__, __LINE__-2, ERROR_NO_WAY); } else { alloc_proj_data (active_project, 1); active_chem = active_project -> chemistry; if (version_2_6_and_above) { for (i=0; i nspec; i++) { active_chem -> label[i] = read_this_string (fp); if (! active_chem -> label[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); active_chem -> element[i] = read_this_string (fp); if (! active_chem -> element[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } } if (fread (active_chem -> nsps, sizeof(int), active_project -> nspec, fp) != active_project -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (active_chem -> formula, sizeof(int), active_project -> nspec, fp) != active_project -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); j = 0; for (i=0; i nspec; i++) j+= active_chem -> nsps[i]; if (j != active_project -> natomes) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); for (i=0; i chem_prop[i], sizeof(double), active_project -> nspec, fp) != active_project -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } if (! version_2_7_and_above) { for (i=0; i nspec; i++) { active_chem -> chem_prop[CHEM_X][i] = active_chem -> chem_prop[CHEM_Z][i]; } } if (fread (& active_chem -> grtotcutoff, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); for ( i = 0 ; i < active_project -> nspec ; i ++ ) { if (fread (active_chem -> cutoffs[i], sizeof(double), active_project -> nspec, fp) != active_project -> nspec) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } for (i=0; i steps; i++) { for (j=0; j< active_project -> natomes; j++) { if (read_atom_a (fp, active_project, i, j) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_ATOM_A; } } } init_box_calc (); if (active_project -> run) { #ifdef DEBUG g_debug ("OPEN_PROJECT:: So far so good ... still"); g_debug ("OPEN_PROJECT:: RUN PROJECT\n"); #endif i = alloc_data_ (& active_project -> natomes, & active_project -> nspec, & active_project -> steps); if (i == 1) { if (! version_2_6_and_above) { j = 1; prep_spec_ (active_chem -> chem_prop[CHEM_Z], active_chem -> nsps, & j); } // Read curves init_atomes_analysis (active_project, FALSE); if (version_2_9_and_above) { for (i=0; i analysis[i]) { if (read_analysis (fp, active_project, active_project -> analysis[i], wid) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_ANA; } } } } else { for (i=0; i analysis[i]) { active_project -> analysis[i] -> avail_ok = tmp_avail[i]; active_project -> analysis[i] -> init_ok = tmp_init[i]; active_project -> analysis[i] -> calc_ok = tmp_calc[i]; active_project -> analysis[i] -> delta = tmp_delta[i]; active_project -> analysis[i] -> num_delta = tmp_num_delta[i]; active_project -> analysis[i] -> min = tmp_min[i]; active_project -> analysis[i] -> max = tmp_max[i]; if (active_project -> analysis[i] -> init_ok) { initcnames (active_project, i); } } } g_free (tmp_avail); g_free (tmp_init); g_free (tmp_calc); g_free (tmp_delta); g_free (tmp_num_delta); g_free (tmp_min); g_free (tmp_max); if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); #ifdef DEBUG g_debug ("\n**********************************************\n curves to read= %d\n**********************************************\n", i); #endif if (i != 0) { j = 0; if (fread (& j, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (j) { active_project -> analysis[SPH] -> numc = j; alloc_analysis_curves (active_project -> id, active_project -> analysis[SPH]); add_curve_widgets (active_project, SPH); active_project -> analysis[SPH] -> avail_ok = TRUE; for (k=0; k analysis[SPH] -> curves[k] -> name = read_this_string (fp); if (active_project -> analysis[SPH] -> curves[k] -> name == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } } for (j=0; j initgl) { gboolean tmp_bonding; if (fread (& tmp_bonding, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (fread (tmp_adv_bonding, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); apply_project (TRUE); if (! atomes_render_image) fill_tool_model (); int tmpcoord[10]; if (fread (tmpcoord, sizeof(int), 10, fp) != 10) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); if (active_glwin -> bonding) { // for (i=0; i<10; i++) g_debug ("READING :: i= %d, tmpcoord[%d]= %d, active_coord -> totcoord[%d]= %d", i, i, tmpcoord[i], i, active_coord -> totcoord[i]); for (i=0; i<2; i++) if (tmpcoord[i] != active_coord -> totcoord[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); for (i=2; i<4; i++) { if (active_glwin -> adv_bonding[i-2]) { if (tmpcoord[i] != active_coord -> totcoord[i]) return signal_error (__FILE__, __func__, __LINE__, ERROR_PROJECT); } } } for (i=0; i<10; i++) active_coord -> totcoord[i] = tmpcoord[i]; // Read molecule info if ((active_project -> natomes > ATOM_LIMIT || active_project -> steps > reading_step_limit) && tmp_adv_bonding[1]) { if (read_mol (fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_MOL; } } for (i=0; i<2; i++) active_glwin -> adv_bonding[i] = tmp_adv_bonding[i]; active_glwin -> bonding = tmp_bonding; if (read_bonding (fp) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_COORD; } if (read_opengl_image (fp, active_project, active_glwin -> anim -> last -> img, active_project -> nspec) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_IMAGE; } if (read_dlp_field_data (fp, active_project) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } if (read_lmp_field_data (fp, active_project) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_FIELD; } for (i=0; i<2; i++) { if (read_cpmd_data (fp, i, active_project) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } } for (i=0; i<2; i++) { if (read_cp2k_data (fp, i, active_project) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } } #ifdef GTK3 // GTK3 Menu Action To Check set_color_map_sensitive (active_glwin); #endif return OK; } return OK; } } atomes_1.3.1/src/project/save_curve.c0000664000175000017500000003140715212624223017255 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file save_curve.c * @short Functions to save curves information in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'save_curve.c' * * Contains: * - The functions to save curves information in the atomes project file format * * List of functions: int write_data_layout (FILE * fp, DataLayout * layout); int save_project_curve (FILE * fp, project * this_proj, int wid, int rid, int cid); */ #include "global.h" #include "project.h" /*! \fn int write_data_layout (FILE * fp, DataLayout * layout) \brief save curve data layout to file \param fp the file pointer \param layout the data layout to save */ int write_data_layout (FILE * fp, DataLayout * layout) { if (fwrite (& layout -> datacolor, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& layout -> thickness, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& layout -> dash, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& layout -> glyph, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& layout -> gsize, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& layout -> gfreq, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& layout -> hwidth, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& layout -> hopac, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& layout -> hpos, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& layout -> aspect, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); return OK; } /*! \fn int save_project_curve (FILE * fp, project * this_proj, int wid, int rid, int cid) \brief save project curve to file \param fp the file pointer \param this_proj the target project \param wid saving workspace (1/0) \param rid the calculation to save \param cid the curve id to save */ int save_project_curve (FILE * fp, project * this_proj, int wid, int rid, int cid) { int i, j, k; if (fwrite (& rid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& cid, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); Curve * this_curve = this_proj -> analysis[rid] -> curves[cid]; if (save_this_string (fp, this_curve -> name) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> displayed, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> ndata, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> data[0], sizeof(double), this_curve -> ndata, fp) != this_curve -> ndata) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> data[1], sizeof(double), this_curve -> ndata, fp) != this_curve -> ndata) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); i = 0; if (this_curve -> err != NULL) i = 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (this_curve -> err != NULL) { if (fwrite (this_curve -> err, sizeof(double), this_curve -> ndata, fp) != this_curve -> ndata) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } if (this_curve -> displayed) { if (fwrite (this_curve -> wsize, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> cmin, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> cmax, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Title if (fwrite (& this_curve -> show_title, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> default_title, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (! this_curve -> default_title) { if (save_this_string (fp, this_curve -> title) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } if (fwrite (this_curve -> title_pos, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (save_this_string (fp, this_curve -> title_font) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> title_color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Axis if (fwrite (this_curve -> axmin, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> axmax, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); for (j=0; j<2; j++) { if (save_this_string (fp, this_curve -> axis_title[j]) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (save_this_string (fp, this_curve -> axis_title_font[j]) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } if (fwrite (this_curve -> axis_title_x, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> axis_title_y, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> scale, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> axis_defaut_title, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> autoscale, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> majt, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> mint, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> ticks_io, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> ticks_pos, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> majt_size, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> mint_size, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> labels_pos, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> labels_digit, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); for (j=0; j<2; j++) { if (save_this_string (fp, this_curve -> labels_font[j]) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } if (fwrite (this_curve -> labels_angle, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> labels_shift_x, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> labels_shift_y, sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> show_grid, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> show_axis, sizeof(gboolean), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Legend if (fwrite (& this_curve -> show_legend, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (save_this_string (fp, this_curve -> legend_font) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> legend_pos, sizeof(double), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> legend_color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> show_legend_box, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> legend_box_dash, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> legend_box_thickness, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> legend_box_color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Frame if (fwrite (& this_curve -> show_frame, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> frame_type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> frame_dash, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> frame_thickness, sizeof(double), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> frame_color, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (this_curve -> frame_pos, sizeof(this_curve -> frame_pos), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); // Data if (fwrite (& this_curve -> backcolor, sizeof(ColRGBA), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (write_data_layout (fp, this_curve -> layout) != OK ) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_CURVE; } if (fwrite (& this_curve -> draw_id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& this_curve -> bshift, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); i = 0; CurveExtra * ctmp; if (this_curve -> extrac -> extras > 0) { ctmp = this_curve -> extrac -> first; for (j=0; j extrac -> extras; j++) { if (ctmp -> id.a == this_proj -> id || wid) { i ++; } if (ctmp -> next != NULL) ctmp = ctmp -> next; } } if (fwrite (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (i > 0) { ctmp = this_curve -> extrac -> first; for (j=0; j extrac -> extras; j++) { if (ctmp -> id.a == this_proj -> id || wid) { k = (wid) ? ctmp -> id.a : 0; if (fwrite (& k, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& ctmp -> id.b, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (fwrite (& ctmp -> id.c, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); if (write_data_layout (fp, ctmp -> layout) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } if (ctmp -> next != NULL) ctmp = ctmp -> next; } } if (save_this_string (fp, this_curve -> cfile) != OK) return signal_error (__FILE__, __func__, __LINE__, ERROR_CURVE); } #ifdef DEBUG // debugiocurve (this_proj, win, rid, cid, "WRITE"); #endif return OK; } atomes_1.3.1/src/project/init_p.c0000664000175000017500000002445115212624223016376 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file init_p.c * @short Functions to initialize an atomes project * @author Sébastien Le Roux */ /* * This file: 'init_p.c' * * Contains: * - The functions to initialize an atomes project * * List of functions: void init_curves_and_calc (project * this_proj); void apply_analysis_default_parameters_to_project (project * this_proj, gboolean with_analysis); void apply_default_parameters_to_project (project * this_proj); void init_project (gboolean alloc_box); */ #include "global.h" #include "bind.h" #include "callbacks.h" #include "interface.h" #include "preferences.h" #include "project.h" #include "curve.h" #include "glview.h" #include "glwindow.h" extern void init_camera (project * this_proj); extern void setup_default_image (project * this_proj, image * img); extern void clean_atom_style (project * this_proj); extern void setup_default_species_parameters_for_image (project * this_proj, image * img); extern void init_shaders (glwin * view); extern G_MODULE_EXPORT void box_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void axis_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void representation_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void opengl_advanced (GtkWidget * widg, gpointer data); extern void update_gradient_widgets (gradient_edition * gradient_win, background * back); extern G_MODULE_EXPORT void gradient_advanced (GtkWidget * widg, gpointer data); /*! \fn void init_curves_and_calc (project * this_proj) \brief for a project reset analysis, curves, data to not performed \param this_proj the target project */ void init_curves_and_calc (project * this_proj) { int i; if (this_proj -> analysis) { for (i=0; i analysis[i]) { this_proj -> analysis[i] -> avail_ok = FALSE; this_proj -> analysis[i] -> init_ok = FALSE; this_proj -> analysis[i] -> calc_ok = FALSE; } } } } /*! \fn void apply_analysis_default_parameters_to_project (project * this_proj) \brief apply default analysis parameters to project \param this_proj the target project */ void apply_analysis_default_parameters_to_project (project * this_proj) { int i, j; for (i=0; i<6; i++) { if (this_proj -> analysis[i]) this_proj -> analysis[i] -> num_delta = default_num_delta[i]; } if (this_proj -> analysis[RIN]) { active_project -> analysis[RIN] -> delta = 1.0; active_project -> analysis[RIN] -> min = 1.0; } if (this_proj -> analysis[CHA]) { active_project -> analysis[CHA] -> delta = 1.0; active_project -> analysis[CHA] -> min = 1.0; } if (this_proj -> analysis[SPH]) { active_project -> analysis[SPH] -> delta = 2.0; this_proj -> analysis[SPH] -> num_delta = default_num_delta[6]; } if (this_proj -> analysis[MSD]) this_proj -> analysis[MSD] -> num_delta = default_num_delta[7]; if (this_proj -> analysis[MSD]) this_proj -> analysis[MSD] -> delta = default_delta_t[0]; // Other analysis parameters for (i=0; i<5; i++) { this_proj -> rsparam[i][0] = default_rsparam[1]; this_proj -> rsparam[i][1] = default_rsparam[2]; for (j=2; j<5; j++) this_proj -> rsparam[i][j] = default_rsparam[j+2]; } this_proj -> rsearch[0] = default_rsparam[0]; this_proj -> rsearch[1] = default_rsparam[3]; this_proj -> csparam[0] = default_csparam[0]; for (i=1; i<4; i++) this_proj -> csparam[i]= default_csparam[i+2]; this_proj -> csparam[5] = default_csparam[1]; this_proj -> csearch = default_csparam[2]; this_proj -> tunit = default_delta_t[1]; this_proj -> skt_all_sets = default_skt_sets; this_proj -> skt_n_data_sets = default_skt_n_sets; this_proj -> sqw_n_data_sets = default_sqw_n_sets; this_proj -> sqw_freq = default_sqw_freq; } /*! \fn void apply_default_parameters_to_project (project * this_proj, gboolean with_analysis) \brief apply default parameters to project \param this_proj the target project */ void apply_default_parameters_to_project (project * this_proj, gboolean with_analysis) { int i, j, k, l; if (with_analysis) { // Calc parameters if (this_proj -> chemistry) { this_proj -> chemistry -> grtotcutoff = default_totcut; bond_cutoff * cut = default_bond_cutoff; gboolean cupdate = FALSE; while (cut) { i = cut -> Z[0]; j = cut -> Z[1]; for (k=0; k nspec; k++) { if ((int)this_proj -> chemistry -> chem_prop[CHEM_Z][k] == i) { cupdate = TRUE; break; } } if (cupdate) { cupdate = FALSE; for (l=0; l nspec; l++) { if ((int)this_proj -> chemistry -> chem_prop[CHEM_Z][l] == j) { cupdate = TRUE; break; } } } if (cupdate) { this_proj -> chemistry -> cutoffs[k][l] = this_proj -> chemistry -> cutoffs[l][k] = cut -> cutoff; } cut = cut -> next; } if (this_proj -> analysis) { apply_analysis_default_parameters_to_project (this_proj); } } // Other analysis parameters for (i=0; i<5; i++) { this_proj -> rsparam[i][0] = default_rsparam[1]; this_proj -> rsparam[i][1] = default_rsparam[2]; for (j=2; j<5; j++) this_proj -> rsparam[i][j] = default_rsparam[j+2]; } this_proj -> rsearch[0] = default_rsparam[0]; this_proj -> rsearch[1] = default_rsparam[3]; this_proj -> csparam[0] = default_csparam[0]; for (i=1; i<4; i++) this_proj -> csparam[i]= default_csparam[i+2]; this_proj -> csparam[5] = default_csparam[1]; this_proj -> csearch = default_csparam[2]; this_proj -> tunit = default_delta_t[1]; this_proj -> skt_all_sets = default_skt_sets; this_proj -> skt_n_data_sets = default_skt_n_sets; this_proj -> sqw_n_data_sets = default_sqw_n_sets; this_proj -> sqw_freq = default_sqw_freq; } if (this_proj -> modelgl) { image * img = this_proj -> modelgl -> anim -> last -> img; if (img) { preferences = FALSE; setup_default_image (this_proj, img); preferences = TRUE; i = -1; if (this_proj -> id != activep) { i = activep; active_project_changed (this_proj -> id); } init_camera (this_proj); if (i != -1) active_project_changed (i); setup_default_species_parameters_for_image (this_proj, img); clean_atom_style (this_proj); init_shaders (this_proj -> modelgl); update (this_proj -> modelgl); if (this_proj -> modelgl -> box_win) { if (this_proj -> modelgl -> box_win -> win) this_proj -> modelgl -> box_win -> win = destroy_this_widget (this_proj -> modelgl -> box_win -> win); g_free (this_proj -> modelgl -> box_win); this_proj -> modelgl -> box_win = NULL; box_advanced (NULL, this_proj -> modelgl); } if (this_proj -> modelgl -> axis_win) { if (this_proj -> modelgl -> axis_win -> win) this_proj -> modelgl -> axis_win -> win = destroy_this_widget (this_proj -> modelgl -> axis_win -> win); g_free (this_proj -> modelgl -> axis_win); this_proj -> modelgl -> axis_win = NULL; axis_advanced (NULL, this_proj -> modelgl); } if (this_proj -> modelgl -> rep_win) { if (this_proj -> modelgl -> rep_win -> win) this_proj -> modelgl -> rep_win -> win = destroy_this_widget (this_proj -> modelgl -> rep_win -> win); g_free (this_proj -> modelgl -> rep_win); this_proj -> modelgl -> rep_win = NULL; representation_advanced (NULL, this_proj -> modelgl); } if (this_proj -> modelgl -> opengl_win) { if (this_proj -> modelgl -> opengl_win -> win) this_proj -> modelgl -> opengl_win -> win = destroy_this_widget (this_proj -> modelgl -> opengl_win -> win); g_free (this_proj -> modelgl -> opengl_win); this_proj -> modelgl -> opengl_win = NULL; opengl_advanced (NULL, this_proj -> modelgl); } if (this_proj -> modelgl -> gradient_win) update_gradient_widgets (this_proj -> modelgl -> gradient_win, img -> back); } } } /*! \fn void init_project (gboolean alloc_box) \brief initialize a new project \param alloc_box allocate data for the MD box (1/0) */ void init_project (gboolean alloc_box) { project * new_proj = g_malloc0(sizeof*new_proj); nprojects ++; activep = nprojects - 1; new_proj -> id = activep; new_proj -> name = g_strdup_printf("%s%2d", _("Project N°"), activep); apply_default_parameters_to_project (new_proj, TRUE); new_proj -> tfile = -1; new_proj -> newproj = TRUE; new_proj -> steps = 1; new_proj -> tunit = (int)default_delta_t[1]; // Other calculation related parameters : to be added to user preferences new_proj -> xcor = 1; new_proj -> sk_advanced[0][0] = new_proj -> sk_advanced[1][0] = 1.0; new_proj -> sk_advanced[0][1] = new_proj -> sk_advanced[1][1] = 15.0; // new_proj -> skt_corr_threshold = 10; // new_proj -> skt_n_data_sets = 5; // new_proj -> sqw_n_data_sets = 5; // new_proj -> coord = g_malloc0(sizeof*new_proj -> coord); if (alloc_box) new_proj -> cell.box = g_malloc0(sizeof*new_proj -> cell.box); remove_edition_actions (); if (nprojects == 1) { workzone.first = g_malloc0(sizeof*workzone.first); workzone.first = new_proj; workzone.last = g_malloc0(sizeof*workzone.last); } else { new_proj -> prev = workzone.last; workzone.last -> next = new_proj; } workzone.last = new_proj; active_project_changed (new_proj -> id); prep_calc_actions (); new_proj -> newproj = FALSE; } atomes_1.3.1/src/project/read_qm.c0000664000175000017500000003032215212624223016516 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file read_qm.c * @short Functions to read ab-intio (CPMD/CP2K) calculation parameters in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'read_qm.c' * * Contains: * - Functions to read ab-intio (CPMD/CP2K) calculation parameters in the atomes project file format * * List of functions: int read_thermo (FILE * fp, thermostat * thermo); int read_fixed_atoms_cpmd (FILE * fp, cpmd * cpmd_input); int read_fixed_atoms_cp2k (FILE * fp, cp2k * cp2k_input, int idf); int read_cpmd_data (FILE * fp, int cid, project * this_proj); int read_cp2k_data (FILE * fp, int cid, project * this_proj); */ #include "global.h" #include "project.h" /*! \fn int read_thermo (FILE * fp, thermostat * thermo) \brief read thermostat information from file \param fp the file pointer \param thermo the thermostat to store the data */ int read_thermo (FILE * fp, thermostat * thermo) { if (fread (& thermo -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (& thermo -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (& thermo -> sys, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (& thermo -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (thermo -> params, sizeof(double), 4, fp) != 4) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (& thermo -> natoms, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); return OK; } /*! \fn int read_fixed_atoms_cpmd (FILE * fp, cpmd * cpmd_input) \brief read fixed CPMD atom(s) from file \param fp the file pointer \param cpmd_input the CPMD input structure to store the data */ int read_fixed_atoms_cpmd (FILE * fp, cpmd * cpmd_input) { int i; if (fread (& cpmd_input -> fixat, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (cpmd_input -> fixat) { if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (i) { cpmd_input -> fixlist = allocint (cpmd_input -> fixat); if (fread (cpmd_input -> fixlist, sizeof(int), cpmd_input -> fixat, fp) != cpmd_input -> fixat) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (i) { cpmd_input -> fixcoord = allocdint (cpmd_input -> fixat, 3); for (i=0; i fixat; i++) if (fread (cpmd_input -> fixcoord[i], sizeof(int), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } } return OK; } /*! \fn int read_fixed_atoms_cp2k (FILE * fp, cp2k * cp2k_input, int idf) \brief read fixed CP2K from file \param fp the file pointer \param cp2k_input the CP2K input structure to store the data \param idf the fixed atom(s) format */ int read_fixed_atoms_cp2k (FILE * fp, cp2k * cp2k_input, int idf) { int i; if (fread (& cp2k_input -> fixat[idf], sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (cp2k_input -> fixat[idf]) { if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (i) { cp2k_input -> fixlist[idf] = allocint (cp2k_input -> fixat[idf]); if (fread (cp2k_input -> fixlist[idf], sizeof(int), cp2k_input -> fixat[idf], fp) != cp2k_input -> fixat[idf]) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (i) { cp2k_input -> fixcoord[idf] = allocdint (cp2k_input -> fixat[idf], 3); for (i=0; i fixat[idf]; i++) if (fread (cp2k_input -> fixcoord[idf][i], sizeof(int), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } } return OK; } /*! \fn int read_cpmd_data (FILE * fp, int cid, project * this_proj) \brief read CPMD data from file \param fp the file pointer \param cid CPMD id (0 = ab-initio, 1 = QM-MM) \param this_proj the target project */ int read_cpmd_data (FILE * fp, int cid, project * this_proj) { int i; if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (! i) return OK; this_proj -> cpmd_input[cid] = g_malloc0(sizeof*this_proj -> cpmd_input[cid]); if (fread (& this_proj -> cpmd_input[cid] -> calc_type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (this_proj -> cpmd_input[cid] -> default_opts, sizeof(double), 17, fp) != 17) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (this_proj -> cpmd_input[cid] -> calc_opts, sizeof(double), 24, fp) != 24) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (& this_proj -> cpmd_input[cid] -> thermostats, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (this_proj -> cpmd_input[cid] -> thermostats) { this_proj -> cpmd_input[cid] -> ions_thermostat = g_malloc0(sizeof*this_proj -> cpmd_input[cid] -> ions_thermostat); thermostat * thermo = this_proj -> cpmd_input[cid] -> ions_thermostat; for (i=0; i cpmd_input[cid] -> thermostats; i++) { if (read_thermo (fp, thermo) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } if (i < this_proj -> cpmd_input[cid] -> thermostats - 1) { thermo -> next = g_malloc0(sizeof*thermo -> next); thermo -> next -> prev = thermo; thermo = thermo -> next; } } if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (i) { this_proj -> cpmd_input[cid] -> elec_thermostat = g_malloc0(sizeof*this_proj -> cpmd_input[cid] -> elec_thermostat); if (read_thermo (fp, this_proj -> cpmd_input[cid] -> elec_thermostat) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } } } if (read_fixed_atoms_cpmd (fp, this_proj -> cpmd_input[cid]) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } if (fread (& this_proj -> cpmd_input[cid] -> dummies, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (this_proj -> cpmd_input[cid] -> dummies) { this_proj -> cpmd_input[cid] -> dummy = g_malloc0(sizeof*this_proj -> cpmd_input[cid] -> dummy); dummy_atom * dummy = this_proj -> cpmd_input[cid] -> dummy; for (i=0; i < this_proj -> cpmd_input[cid] -> dummies; i ++) { if (fread (& dummy -> id, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (& dummy -> type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (& dummy -> show, sizeof(gboolean), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (dummy -> xyz, sizeof(double), 3, fp) != 3) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (dummy -> coord, sizeof(int), 4, fp) != 4) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (& dummy -> natoms, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (dummy -> natoms) { dummy -> list = allocint (dummy -> natoms); if (fread (dummy -> list, sizeof(int), dummy -> natoms, fp) != dummy -> natoms) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } if (i < this_proj -> cpmd_input[cid] -> dummies - 1) { dummy -> next = g_malloc0(sizeof*dummy -> next); dummy -> next -> prev = dummy; dummy = dummy -> next; } } } this_proj -> cpmd_input[cid] -> pp = allocdint (this_proj -> nspec, 2); for (i=0; i nspec; i++) { if (fread (this_proj -> cpmd_input[cid] -> pp[i], sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } this_proj -> cpmd_input[cid] -> info = read_this_string (fp); /*g_debug (" ********************* CPMD INFO *********************"); g_debug ("\n%s\n", this_proj -> cpmd_input[cid] -> info); g_debug (" *****************************************************");*/ if (this_proj -> cpmd_input[cid] -> info == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); return OK; } /*! \fn int read_cp2k_data (FILE * fp, int cid, project * this_proj) \brief read CP2K data from file \param fp the file pointer \param cid CP2K id (0 = ab-initio, 1 = QM-MM) \param this_proj the target project */ int read_cp2k_data (FILE * fp, int cid, project * this_proj) { int i, j; if (fread (& i, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (! i) return OK; this_proj -> cp2k_input[cid] = g_malloc0(sizeof*this_proj -> cp2k_input[cid]); if (fread (& this_proj -> cp2k_input[cid] -> input_type, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (fread (this_proj -> cp2k_input[cid] -> opts, sizeof(double), 42, fp) != 42) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); for (i=0; i<3; i++) { if (fread (this_proj -> cp2k_input[cid] -> extra_opts[i], sizeof(double), 4, fp) != 4) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); } if (fread (& this_proj -> cp2k_input[cid] -> thermostats, sizeof(int), 1, fp) != 1) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); if (this_proj -> cp2k_input[cid] -> thermostats) { this_proj -> cp2k_input[cid] -> ions_thermostat = g_malloc0(sizeof*this_proj -> cp2k_input[cid] -> ions_thermostat); thermostat * thermo = this_proj -> cp2k_input[cid] -> ions_thermostat; for (i=0; i cp2k_input[cid] -> thermostats; i++) { if (read_thermo (fp, thermo) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } if (i < this_proj -> cp2k_input[cid] -> thermostats - 1) { thermo -> next = g_malloc0(sizeof*thermo -> next); thermo -> next -> prev = thermo; thermo = thermo -> next; } } } for (i=0; i<2; i++) { if (read_fixed_atoms_cp2k (fp, this_proj -> cp2k_input[cid], i) != OK) { update_error_trace (__FILE__, __func__, __LINE__-2); return ERROR_QM; } } this_proj -> cp2k_input[cid] -> spec_data = allocdint (this_proj -> nspec, 2); this_proj -> cp2k_input[cid] -> spec_files = g_malloc0(this_proj -> nspec*sizeof*this_proj -> cp2k_input[cid] -> spec_files); for (i=0; i nspec; i++) { if (fread (this_proj -> cp2k_input[cid] -> spec_data[i], sizeof(int), 2, fp) != 2) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); this_proj -> cp2k_input[cid] -> spec_files[i] = g_malloc0(2*sizeof*this_proj -> cp2k_input[cid] -> spec_files[i]); for (j=0; j<2; j++) { this_proj -> cp2k_input[cid] -> spec_files[i][j] = read_this_string (fp); } } for (i=0; i<5; i++) { this_proj -> cp2k_input[cid] -> files[i] = read_this_string (fp); } this_proj -> cp2k_input[cid] -> info = read_this_string (fp); if (this_proj -> cp2k_input[cid] -> info == NULL) return signal_error (__FILE__, __func__, __LINE__, ERROR_QM); return OK; } atomes_1.3.1/src/project/debugio.c0000664000175000017500000003660715212624223016540 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file debugio.c * @short Some debugging and printing functions * @author Sébastien Le Roux */ /* * This file: 'debugio.c' * * Contains: * - Some debugging and printing functions * * List of functions: void debugiocurve (project * this_proj, gboolean win, int rid, int cid, gchar * iost); void debug_lattice_info (project * this_proj, gchar * iost); void debugioproj (project * this_proj, gchar * iost); void debug_chemical_information (project * this_proj); */ #include "global.h" #include "project.h" /*! \fn void debugiocurve (project * this_proj, gboolean win, int rid, int cid, gchar * iost) \brief debug and print some info about the curves in a project \param this_proj the target project \param win curve window exists (1/0) \param rid analysis id \param cid curve id \param iost input or output information */ void debugiocurve (project * this_proj, gboolean win, int rid, int cid, gchar * iost) { Curve * this_curve = this_proj -> analysis[rid] -> curves[cid]; g_debug (" "); g_debug ("IODEBUG: %s: pid= %d, rid= %d, cid= %d", iost, this_proj -> id, rid, cid); g_debug ("IODEBUG: %s: ndata= %d", iost, this_curve -> ndata); if (this_curve -> data[0] == NULL) { g_debug ("IODEBUG: %s: data[0] == NULL", iost); } g_debug ("IODEBUG: %s: x[0]= %f", iost, this_curve -> data[0][0]); g_debug ("IODEBUG: %s: y[0]= %f", iost, this_curve -> data[1][0]); g_debug ("IODEBUG: %s: x[ndata-1]= %f", iost, this_curve -> data[0][this_curve -> ndata - 1]); g_debug ("IODEBUG: %s: y[ndata-1]= %f", iost, this_curve -> data[1][this_curve -> ndata - 1]); if (win) { g_debug ("IODEBUG: %s: cmax[0]= %f, cmax[1]= %f", iost, this_curve -> cmax[0], this_curve -> cmax[1]); g_debug ("IODEBUG: %s: name= %s", iost, this_curve -> name); g_debug ("IODEBUG: %s: show_title= %d", iost, this_curve -> show_title); g_debug ("IODEBUG: %s: default_title= %d", iost, this_curve -> default_title); g_debug ("IODEBUG: %s: title= %s", iost, this_curve -> title); g_debug ("IODEBUG: %s: title_font= %s", iost, this_curve -> title_font); g_debug ("IODEBUG: %s: title_pos[0]= %f, title_pos[1]= %f", iost, this_curve -> title_pos[0], this_curve -> title_pos[1]); g_debug ("IODEBUG: %s: title.red= %f, title.green= %f, title.blue= %f", iost, this_curve -> title_color.red, this_curve -> title_color.green, this_curve -> title_color.blue); // Axis g_debug ("IODEBUG: %s: axmin[0]= %f, axmin[1]= %f", iost, this_curve -> axmin[0], this_curve -> axmin[1]); g_debug ("IODEBUG: %s: axmax[0]= %f, axmax[1]= %f", iost, this_curve -> axmax[0], this_curve -> axmax[1]); g_debug ("IODEBUG: %s: x_axis_title= %s", iost, this_curve -> axis_title[0]); g_debug ("IODEBUG: %s: x_axis_title_font= %s", iost, this_curve -> axis_title_font[0]); g_debug ("IODEBUG: %s: x_axis_title_pos[0]= %d, x_axis_title_pos[1]= %d", iost, this_curve -> axis_title_x[0], this_curve -> axis_title_y[0]); g_debug ("IODEBUG: %s: y_axis_title= %s", iost, this_curve -> axis_title[1]); g_debug ("IODEBUG: %s: y_axis_title_font= %s", iost, this_curve -> axis_title_font[1]); g_debug ("IODEBUG: %s: y_axis_title_pos[0]= %d, y_axis_title_pos[1]= %d", iost, this_curve -> axis_title_x[1], this_curve -> axis_title_y[1]); g_debug ("IODEBUG: %s: scale[0]= %d, scale[1]= %d", iost, this_curve -> scale[0], this_curve -> scale[1]); g_debug ("IODEBUG: %s: x_axis_defaut_title= %d", iost, this_curve -> axis_defaut_title[0]); g_debug ("IODEBUG: %s: y_axis_defaut_title= %d", iost, this_curve -> axis_defaut_title[1]); g_debug ("IODEBUG: %s: grid[0]= %d, grid[1]= %d", iost, this_curve -> show_grid[0], this_curve -> show_grid[1]); g_debug ("IODEBUG: %s: show_axis[0]= %d, show_axis[1]= %d", iost, this_curve -> show_axis[0], this_curve -> show_axis[1]); g_debug ("IODEBUG: %s: autoscale[0]= %d, autoscale[1]= %d", iost, this_curve -> autoscale[0], this_curve -> autoscale[1]); g_debug ("IODEBUG: %s: majt[0]= %f, majt[1]= %f", iost, this_curve -> majt[0], this_curve -> majt[1]); g_debug ("IODEBUG: %s: mint[0]= %d, mint[1]= %d", iost, this_curve -> mint[0], this_curve -> mint[1]); g_debug ("IODEBUG: %s: ticks_io[0]= %d, ticks_io[1]= %d", iost, this_curve -> ticks_io[0], this_curve -> ticks_io[1]); g_debug ("IODEBUG: %s: ticks_pos[0]= %d, ticks_pos[1]= %d", iost, this_curve -> ticks_pos[0], this_curve -> ticks_pos[1]); g_debug ("IODEBUG: %s: majt_size[0]= %d, majt_size[1]= %d", iost, this_curve -> majt_size[0], this_curve -> majt_size[1]); g_debug ("IODEBUG: %s: mint_size[0]= %d, mint_size[1]= %d", iost, this_curve -> mint_size[0], this_curve -> mint_size[1]); g_debug ("IODEBUG: %s: labels_pos[0]= %d, labels_pos[1]= %d", iost, this_curve -> labels_pos[0], this_curve -> labels_pos[1]); g_debug ("IODEBUG: %s: labels_digit[0]= %d, labels_digit[1]= %d", iost, this_curve -> labels_digit[0], this_curve -> labels_digit[1]); g_debug ("IODEBUG: %s: labels_font[0]= %s, labels_font[1]= %s", iost, this_curve -> labels_font[0], this_curve -> labels_font[1]); g_debug ("IODEBUG: %s: labels_angle[0]= %f, labels_angle[1]= %f", iost, this_curve -> labels_angle[0], this_curve -> labels_angle[1]); g_debug ("IODEBUG: %s: labels_shift_x[0]= %d, labels_shift_y[0]= %d", iost, this_curve -> labels_shift_x[0], this_curve -> labels_shift_y[0]); g_debug ("IODEBUG: %s: labels_shift_x[1]= %d, labels_shift_y[1]= %d", iost, this_curve -> labels_shift_x[1], this_curve -> labels_shift_y[1]); // Legend g_debug ("IODEBUG: %s: show_legend= %d", iost, this_curve -> show_legend); g_debug ("IODEBUG: %s: legend_pos[0]= %f, legend_pos[1]= %f", iost, this_curve -> legend_pos[0], this_curve -> legend_pos[1]); g_debug ("IODEBUG: %s: legend_font= %s", iost, this_curve -> legend_font); g_debug ("IODEBUG: %s: legend.red= %f, legend.green= %f, legend.blue= %f", iost, this_curve -> legend_color.red, this_curve -> legend_color.green, this_curve -> legend_color.blue); g_debug ("IODEBUG: %s: show_legend_box= %d", iost, this_curve -> show_legend_box); g_debug ("IODEBUG: %s: legend_box_dash= %d", iost, this_curve -> legend_box_dash); g_debug ("IODEBUG: %s: legend_box_thickness= %f", iost, this_curve -> legend_box_thickness); g_debug ("IODEBUG: %s: legend_box.red= %f, legend_box.green= %f, legend_box.blue= %f", iost, this_curve -> legend_box_color.red, this_curve -> legend_box_color.green, this_curve -> legend_box_color.blue); // Frame g_debug ("IODEBUG: %s: show_frame= %d", iost, this_curve -> show_frame); g_debug ("IODEBUG: %s: frame_type= %d", iost, this_curve -> frame_type); g_debug ("IODEBUG: %s: frame_dash= %d", iost, this_curve -> frame_dash); g_debug ("IODEBUG: %s: frame_thickness= %f", iost, this_curve -> frame_thickness); g_debug ("IODEBUG: %s: frame.red= %f, frame.green= %f, frame.blue= %f", iost, this_curve -> frame_color.red, this_curve -> frame_color.green, this_curve -> frame_color.blue); g_debug ("IODEBUG: %s: frame.xmin= %f, frame.xmax= %f", iost, this_curve -> frame_pos[0][0], this_curve -> frame_pos[0][1]); g_debug ("IODEBUG: %s: frame.ymin= %f, frame.ymax= %f", iost, this_curve -> frame_pos[1][0], this_curve -> frame_pos[1][1]); // Data g_debug ("IODEBUG: %s: backc.red= %f, backc.green= %f, backc.blue= %f", iost, this_curve -> backcolor.red, this_curve -> backcolor.green, this_curve -> backcolor.blue); g_debug ("IODEBUG: %s: legend_font= %s", iost, this_curve -> legend_font); if (this_curve -> cfile != NULL) { g_debug ("IODEBUG: %s: cfile= %s", iost, this_curve -> cfile); } } else { g_debug ("IODEBUG: %s: No curve window", iost); } } /*! \fn void debug_lattice_info (project * this_proj, gchar * iost) \brief debug lattice data \param this_proj the target project \param iost input or output information */ void debug_lattice_info (project * this_proj, gchar * iost) { g_debug ("IODEBUG::%s:: lattice debug", iost); cell_info * debug_cell = & this_proj -> cell; g_debug ("IODEBUG::%s:: pbc= %d, frac= %d, ltype= %d", iost, debug_cell -> pbc, debug_cell -> frac, debug_cell -> ltype); g_debug ("IODEBUG::%s:: npt= %d, has_a_box= %d, crystal= %d", iost, debug_cell -> npt, debug_cell -> has_a_box, debug_cell -> crystal); g_debug ("IODEBUG::%s:: volumec= %f, density= %f", iost, debug_cell -> volume, debug_cell -> density); g_debug ("IODEBUG::%s:: cextra[0]= %d, cextra[1]= %d, cextra[2]= %d", iost, debug_cell -> cextra[0], debug_cell -> cextra[1], debug_cell -> cextra[2]); if (debug_cell -> box) { box_info * debug_box = debug_cell -> box; int i; for (i=0; i<2; i++) g_debug ("IODEBUG::%s:: i= %d, param[%d][0]= %f, param[%d][1]= %f, param[%d][2]= %f", iost, i, i, debug_box -> param[i][0], i, debug_box -> param[i][1], i, debug_box -> param[i][2]); for (i=0; i<3; i++) g_debug ("IODEBUG::%s:: i= %d, vect[%d][0]= %f, vect[%d][1]= %f, vect[%d][2]= %f", iost, i, i, debug_box -> vect[i][0], i, debug_box -> vect[i][1], i, debug_box -> vect[i][2]); for (i=0; i<3; i++) g_debug ("IODEBUG::%s:: i= %d, rvect[%d][0]= %f, rvect[%d][1]= %f, rvect[%d][2]= %f", iost, i, i, debug_box -> rvect[i][0], i, debug_box -> rvect[i][1], i, debug_box -> rvect[i][2]); } } /*! \fn void debugioproj (project * this_proj, gchar * iost) \brief debug project info \param this_proj the target project \param iost input or output information */ void debugioproj (project * this_proj, gchar * iost) { int i, j; g_debug ("IODEBUG::%s: name= %s", iost, this_proj -> name); if (this_proj -> coordfile != NULL) { g_debug ("IODEBUG::%s: coordfile= %s", iost, this_proj -> coordfile); g_debug ("IODEBUG::%s: tfile= %d", iost, this_proj -> tfile); } if (this_proj -> bondfile != NULL) { g_debug ("IODEBUG::%s: bondfile= %s", iost, this_proj -> bondfile); } g_debug ("IODEBUG::%s: newproj= %d", iost, this_proj -> newproj); g_debug ("IODEBUG::%s: pbc= %d", iost, this_proj -> cell.pbc); g_debug ("IODEBUG::%s: frac= %d", iost, this_proj -> cell.frac); g_debug ("IODEBUG::%s: run= %d", iost, this_proj -> run); g_debug ("IODEBUG::%s: dmtx= %d", iost, this_proj -> dmtx); g_debug ("IODEBUG::%s: nspec= %d", iost, this_proj -> nspec); g_debug ("IODEBUG::%s: natomes= %d", iost, this_proj -> natomes); g_debug ("IODEBUG::%s: steps= %d", iost, this_proj -> steps); g_debug ("IODEBUG::%s: grtotcutoff= %f", iost, this_proj -> chemistry -> grtotcutoff); g_debug ("IODEBUG::%s: cvect[0][0]= %f, cvect[0][1]= %f, cvect[0][2]= %f", iost, this_proj -> cell.box[0].vect[0][0], this_proj -> cell.box[0].vect[0][1], this_proj -> cell.box[0].vect[0][2]); g_debug ("IODEBUG::%s: cvect[1][0]= %f, cvect[1][1]= %f, cvect[1][2]= %f", iost, this_proj -> cell.box[0].vect[1][0], this_proj -> cell.box[0].vect[1][1], this_proj -> cell.box[0].vect[1][2]); g_debug ("IODEBUG::%s: cvect[2][0]= %f, cvect[2][1]= %f, cvect[2][2]= %f", iost, this_proj -> cell.box[0].vect[2][0], this_proj -> cell.box[0].vect[2][1], this_proj -> cell.box[0].vect[2][2]); g_debug ("IODEBUG::%s: langles[0]= %f, langles[1]= %f, langles[2]= %f", iost, this_proj -> cell.box[0].param[1][0], this_proj -> cell.box[0].param[1][1], this_proj -> cell.box[0].param[1][2]); g_debug ("IODEBUG::%s: vmod[0]= %f, vmod[1]= %f, vmod[2]= %f", iost, this_proj -> cell.box[0].param[0][0], this_proj -> cell.box[0].param[0][1], this_proj -> cell.box[0].param[0][2]); for (i=0; i analysis[i] -> calc_ok); g_debug ("IODEBUG::%s: i= %d, initok[i]= %d", iost, i, this_proj -> analysis[i] -> init_ok); g_debug ("IODEBUG::%s: i= %d, num_delta[i]= %d", iost, i, this_proj -> analysis[i] -> num_delta); g_debug ("IODEBUG::%s: i= %d, delta[i]= %f", iost, i, this_proj -> analysis[i] -> delta); g_debug ("IODEBUG::%s: i= %d, min[i]= %f", iost, i, this_proj -> analysis[i] -> min); g_debug ("IODEBUG::%s: i= %d, max[i]= %f", iost, i, this_proj -> analysis[i] -> max); } if (this_proj -> natomes != 0 && this_proj -> nspec != 0) { for (i=0; i steps; i++) { g_debug ("IODEBUG::%s: proj.atom[%d][%d].x= %f, proj.atom[%d][%d].x= %f", iost, i, 0, this_proj -> atoms[i][0].x, i, this_proj -> natomes-1, this_proj -> atoms[i][this_proj -> natomes - 1].x); g_debug ("IODEBUG::%s: proj.atom[%d][%d].y= %f, proj.atom[%d][%d].y= %f", iost, i, 0, this_proj -> atoms[i][0].y, i, this_proj -> natomes - 1, this_proj -> atoms[i][this_proj -> natomes - 1].y); g_debug ("IODEBUG::%s: proj.atom[%d][%d].z= %f, proj.atom[%d][%d].z= %f", iost, i, 0, this_proj -> atoms[i][0].z, i, this_proj -> natomes - 1, this_proj -> atoms[i][this_proj -> natomes - 1].z); } for (i=0; i nspec; i++) { g_debug ("IODEBUG::%s: i= %d, nsps[i]= %d", iost, i, this_proj -> chemistry -> nsps[i]); g_debug ("IODEBUG::%s: i= %d, atid[i]= %d", iost, i, (int)this_proj -> chemistry -> chem_prop[CHEM_Z][i]); g_debug ("IODEBUG::%s: i= %d, mass[i]= %f", iost, i, this_proj -> chemistry -> chem_prop[CHEM_M][i]); g_debug ("IODEBUG::%s: i= %d, rad[i]= %f", iost, i, this_proj -> chemistry -> chem_prop[CHEM_R][i]); } for (i=0; i nspec; i++) { for (j=0; j nspec; j++) { g_debug ("IODEBUG::%s: i= %d, j= %d, cutoffs[i][j]= %f", iost, i, j, this_proj -> chemistry -> cutoffs[i][j]); } } } debug_lattice_info (this_proj, iost); } /*! \fn void debug_chemical_information (project * this_proj) \brief debug chemical data info \param this_proj the target project */ void debug_chemical_information (project * this_proj) { g_debug ("Number of species: %d", this_proj -> nspec); int i; for (i=0; i nspec; i++) { g_debug ("Spec= %d, label= %s, element= %s ", i+1, this_proj -> chemistry -> label[i], this_proj -> chemistry -> element[i]); g_debug (" nsps[%d]= %d, formula[%d]= %d", i+1, this_proj -> chemistry -> nsps[i], i+1, this_proj -> chemistry -> formula[i]); } g_debug ("Number of atoms: %d", this_proj -> natomes); for (i=0; i natomes; i++) { g_debug (" at= %d, lot[%d]= %d", i+1, i+1, this_proj -> atoms[0][i].sp); } } atomes_1.3.1/src/curve/0000775000175000017500000000000015212624223014420 5ustar lerouxlerouxatomes_1.3.1/src/curve/show.c0000664000175000017500000002540115212624223015546 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file show.c * @short Functions to draw the complete graph * @author Sébastien Le Roux */ /* * This file: 'show.c' * * Contains: * - The functions to draw the complete graph * * List of functions: gboolean show_curve (GtkWidget * grwdget, cairo_t * cr, gpointer curve); G_MODULE_EXPORT gboolean to_hide_curve (GtkWindow * thecurve, gpointer data); G_MODULE_EXPORT gboolean to_hide_curve (GtkWidget * thecurve, GdkEvent * event, gpointer data); void show_curve (GtkDrawingArea * area, cairo_t * cr, int width, int height, gpointer curve); void hide_curve (gpointer data); */ #include #include #include #include #include #include "global.h" #include "curve.h" extern void adjust_tool_model (int calc, int curve, gchar * string_path); #ifdef GTK3 /*! \fn gboolean show_curve (GtkWidget * grwdget, cairo_t * cr, gpointer curve) \brief show curve callback GTK4 \param grwdget the GtkWidget sending the signal \param cr the cairo drawing context to use for the draw \param curve the associated data pointer */ gboolean show_curve (GtkWidget * grwdget, cairo_t * cr, gpointer curve) #else /*! \fn void show_curve (GtkDrawingArea * area, cairo_t * cr, int width, int height, gpointer curve) \brief show curve callback GTK3 \param area the GtkDrawingArea sending the signal \param cr the cairo drawing context to use for the draw \param width drawing area width \param height drawing area height \param curve the associated pointer data */ void show_curve (GtkDrawingArea * area, cairo_t * cr, int width, int height, gpointer curve) #endif { int pid, rid, cid; int where; int i, j, k; double alp; gboolean upm; Curve * this_curve = get_curve_from_pointer (curve); pid = ((tint *)curve) -> a; rid = ((tint *)curve) -> b; cid = ((tint *)curve) -> c; cairo_surface_t * surface = NULL; project * this_proj = get_project_by_id(pid); where = this_curve -> format; // g_print ("where= %d, width = %d, height= %d\n", where, width, height); this_curve -> format = 0; if (where == 0) { alp=1.0; #ifdef GTK3 this_curve -> wsize[0] = get_widget_width (grwdget); this_curve -> wsize[1] = get_widget_height (grwdget); #else this_curve -> wsize[0] = width; this_curve -> wsize[1] = height; #endif for (j=0; j<2; j++) { resol[j] = this_curve -> wsize[j]; if (this_curve -> curve_edit) { if (this_curve -> curve_edit -> xyp[j] != NULL) update_entry_int (GTK_ENTRY(this_curve -> curve_edit -> xyp[j]), this_curve -> wsize[j]); } } } else { alp=0.0; if (where == 1) { alp = back_alpha; surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, resol[0], resol[1]); } else if (where == 2) { alp=1.0; surface = cairo_pdf_surface_create (curve_image_file, (double)resol[0], (double)resol[1]); } else if (where == 3) { alp = back_alpha; surface = cairo_svg_surface_create (curve_image_file, (double)resol[0], (double)resol[1]); } else if (where == 4) { surface = cairo_ps_surface_create (curve_image_file, (double)resol[0], (double)resol[1]); } cr = cairo_create (surface); } // Painting the background cairo_set_source_rgba (cr, this_curve -> backcolor.red, this_curve -> backcolor.green, this_curve -> backcolor.blue, alp); cairo_paint (cr); cairo_set_source_rgba (cr, this_curve -> backcolor.red, this_curve -> backcolor.green, this_curve -> backcolor.blue, 1.0); // Creating Pango Font Layout layout = pango_cairo_create_layout (cr); upm = FALSE; // Autoscale and autoticking for X and or Y axis for (j=0; j<2; j++) { if (this_curve -> autoscale[j]) { // Autoscale autoscale_axis (this_proj, this_curve, rid, cid, j); this_curve -> autoscale[j] = FALSE; // Autoticking this_curve -> majt[j] = scale (this_curve -> axmax[j] - this_curve -> axmin[j]); this_curve -> mint[j] = 2; upm = TRUE; } cxy[j] = this_curve -> axmin[j]; } xmax = this_curve -> axmax[0] - cxy[0]; ymax = this_curve -> axmax[1] - cxy[1]; // Ensuring no log scale issuesthis_curve -> extrac if (this_curve -> scale[0]) setup_xaxis_log (cr, this_curve, rid, cid, FALSE); if (this_curve -> scale[1]) setup_yaxis_log (cr, this_curve, FALSE); if (upm) { if (this_curve -> curve_edit) { if (this_curve -> curve_edit -> axischoice != NULL) { j = combo_get_active (this_curve -> curve_edit -> axischoice); update_entry_double (GTK_ENTRY(this_curve -> curve_edit -> vmin), this_curve -> axmin[j]); update_entry_double (GTK_ENTRY(this_curve -> curve_edit -> vmax), this_curve -> axmax[j]); update_entry_double (GTK_ENTRY(this_curve -> curve_edit -> majt), this_curve -> majt[j]); update_entry_int (GTK_ENTRY(this_curve -> curve_edit -> nmi[j]), this_curve -> mint[j] - 1); } } } prep_plot (this_curve); // let's go for the plot // first we start by the possible extra curves i = 0; CurveExtra * ctmp = this_curve -> extrac -> last; for ( j=0 ; j < this_curve -> extrac -> extras + 1; j++ ) { if (this_curve -> draw_id == j) { if (this_curve -> bshift && this_curve -> layout -> aspect && this_curve -> extrac -> extras) i ++; k = (this_curve -> layout -> aspect) ? i : 0; draw_curve (cr, cid, rid, this_proj, this_curve -> ndata, this_curve -> layout -> datacolor, this_curve -> scale[0], this_curve -> scale[1], this_curve -> layout -> aspect, this_curve -> layout -> dash, this_curve -> layout -> thickness, this_curve -> layout -> glyph, this_curve -> layout -> gsize, this_curve -> layout -> gfreq, this_curve -> layout -> hwidth, this_curve -> layout -> hopac, this_curve -> layout -> hpos, this_curve -> extrac -> extras, k); } else { if (this_curve -> bshift && ctmp -> layout -> aspect) i++; k = (ctmp -> layout -> aspect) ? i : 0; draw_curve (cr, ctmp -> id.c, ctmp -> id.b, get_project_by_id(ctmp -> id.a), get_project_by_id(ctmp -> id.a) -> analysis[ctmp -> id.b] -> curves[ctmp -> id.c] -> ndata, ctmp -> layout -> datacolor, this_curve -> scale[0], this_curve -> scale[1], ctmp -> layout -> aspect, ctmp -> layout -> dash, ctmp -> layout -> thickness, ctmp -> layout -> glyph, ctmp -> layout -> gsize, ctmp -> layout -> gfreq, ctmp -> layout -> hwidth, ctmp -> layout -> hopac, ctmp -> layout -> hpos, this_curve -> extrac -> extras, k); if (ctmp -> prev != NULL) ctmp = ctmp -> prev; } } // Draw the axis bars - in option if (this_curve -> show_axis[1]) { if (this_curve -> axmin[0] < 0.0 && this_curve -> axmax[0] > 0.0) { cairo_set_line_width (cr, 1.0); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 1.0); cairo_move_to (cr, x_min - this_curve -> axmin[0] * XDRAW / xmax, y_min); cairo_line_to (cr, x_min - this_curve -> axmin[0] * XDRAW / xmax, y_max); cairo_stroke (cr); } } if (this_curve -> show_axis[0]) { if (this_curve -> axmin[1] < 0.0 && this_curve -> axmax[1] > 0.0) { cairo_set_line_width (cr, 1.0); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 1.0); cairo_move_to (cr, x_min, y_min - this_curve -> axmin[1] * YDRAW / ymax); cairo_line_to (cr, x_max, y_min - this_curve -> axmin[1] * YDRAW / ymax); cairo_stroke (cr); } } // Maybe show the frame if (this_curve -> show_frame) draw_frame (cr, this_curve, rid, cid); // maybe for the title if (this_curve -> show_title) show_title (cr, this_curve); // and maybe for the legend if (this_curve -> show_legend) show_legend (cr, this_proj, rid, cid); // and we plot the complete curve if (where == 0) { this_curve -> surface = cairo_surface_reference (cairo_get_target (cr)); } else if (where == 1) { cairo_surface_write_to_png (surface, curve_image_file); cairo_surface_destroy (surface); } else if (where == 2 || where == 4) { cairo_show_page (cr); cairo_surface_destroy (surface); } else if (where == 3) { cairo_surface_destroy (surface); } if (where > 0) cairo_destroy (cr); this_curve -> displayed = TRUE; #ifdef GTK3 return TRUE; #endif } /*! \fn void hide_curve (gpointer data) \brief hide curve \param data the associated data pointer */ void hide_curve (gpointer data) { tint * idc = (tint *)data; Curve * this_curve = get_curve_from_pointer (data); hide_the_widgets (this_curve -> window); if (idc -> a == activep) { adjust_tool_model (idc -> b, idc -> c, this_curve -> path); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean to_hide_curve (GtkWindow * thecurve, gpointer data) \brief hide curve callback GTK4 \param thecurve the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean to_hide_curve (GtkWindow * thecurve, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean to_hide_curve (GtkWidget * thecurve, GdkEvent * event, gpointer data) \brief hide curve callback GTK3 \param thecurve the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean to_hide_curve (GtkWidget * thecurve, GdkEvent * event, gpointer data) #endif { hide_curve (data); return TRUE; } atomes_1.3.1/src/curve/cedit.c0000664000175000017500000003525415212624223015665 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cedit.c * @short Initialization of the curve layout edition dialog * @author Sébastien Le Roux */ /* * This file: 'cedit.c' * * Contains: * - The initialization of the curve layout edition dialog * * List of functions: void prepbox (gpointer data); void set_set (int a, int b, int c, gpointer data); void set_visible_curve_data (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void edit_curve (gpointer data); static void fill_proj_model (curve_edition * cedit, GtkTreeStore * store, gpointer data); G_MODULE_EXPORT void run_curve_edit (GtkDialog * dial, gint response_id, gpointer data); GtkWidget * create_projects_tree (gpointer data); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" extern G_MODULE_EXPORT void set_data_aspect (GtkComboBox * box, gpointer data); extern G_MODULE_EXPORT void update_axis (GtkComboBox * widg, gpointer data); extern void action_to_plot (gpointer data); extern gboolean was_not_added (ExtraSets * sets, int a, int b, int c); extern G_MODULE_EXPORT void choose_set (GtkComboBox * box, gpointer data); extern GtkWidget * create_org_list (gpointer data); extern GtkWidget * create_tab_1 (curve_edition * cedit, gpointer data); extern GtkWidget * create_tab_2 (curve_edition * cedit, gpointer data); extern GtkWidget * create_tab_3 (curve_edition * cedit, gpointer data); extern GtkWidget * create_tab_4 (curve_edition * cedit, gpointer data); int activeg = 0; int activec = 0; int activer = 0; char * lapos[2]={"x: ", "y: "}; /*! \fn void prepbox (gpointer data) \brief prepare the curve selection combo box \param data the associate data pointer */ void prepbox (gpointer data) { int i, n, o, p; gchar * str; project * extra_proj; project * this_proj = get_project_by_id(((tint *)data) -> a); Curve * this_curve = get_curve_from_pointer (data); curve_edition * cedit = this_curve -> curve_edit; str = g_strdup_printf ("%s - %s", prepare_for_title(this_proj -> name), this_curve -> name); combo_text_append (cedit -> setcolorbox, str); g_free (str); CurveExtra * ctmp = this_curve -> extrac -> first; for ( i=0 ; i < this_curve -> extrac -> extras ; i++ ) { n = ctmp -> id.a; o = ctmp -> id.b; p = ctmp -> id.c; extra_proj = get_project_by_id(n); str = g_strdup_printf ("%s - %s", prepare_for_title(extra_proj -> name), extra_proj -> analysis[o] -> curves[p] -> name); combo_text_append (cedit -> setcolorbox, str); g_free (str); if (ctmp -> next != NULL) ctmp = ctmp -> next; } if (this_curve -> extrac -> extras > 0) { widget_set_sensitive (cedit -> setcolorbox, 1); } else { widget_set_sensitive (cedit -> setcolorbox, 0); } gtk_widget_set_size_request (cedit -> setcolorbox, -1, 30); combo_set_active (cedit -> setcolorbox, 0); g_signal_connect (G_OBJECT(cedit -> setcolorbox), "changed", G_CALLBACK(choose_set), data); } /*! \fn void set_set (int a, int b, int c, gpointer data) \brief addjust widgets to handle the new curve \param a project id \param b calculation id \param c curve id \param data the associated data pointer */ void set_set (int a, int b, int c, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); curve_edition * cedit = this_curve -> curve_edit; cedit -> setcolorbox = destroy_this_widget (cedit -> setcolorbox); cedit -> setcolorbox = create_combo (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> thesetbox, cedit -> setcolorbox, FALSE, FALSE, 0); show_the_widgets (cedit -> setcolorbox); activeg = ((tint *)data) -> a; action_to_plot (& get_project_by_id(a) -> analysis[b] -> idcc[c]); prepbox (data); choose_set (GTK_COMBO_BOX(cedit -> setcolorbox), data); cedit -> orgtree = destroy_this_widget (cedit -> orgtree); add_container_child (CONTAINER_SCR, cedit -> datascroll, create_org_list(data)); show_the_widgets (cedit -> orgtree); widget_set_sensitive (cedit -> orgtree, this_curve -> extrac -> extras); } /*! \fn static void fill_proj_model (curve_edition * cedit, GtkTreeStore * store, gpointer data) \brief fill project(s) / curves tree store \param cedit the target curve_edition pointer \param store the GtkTreeStore to fill \param data the associated data pointer */ static void fill_proj_model (curve_edition * cedit, GtkTreeStore * store, gpointer data) { GtkTreeIter projlevel; GtkTreeIter calclevel; GtkTreeIter curvelevel; project * this_proj; int i, j, k, l; gboolean append; int pid = ((tint *)data) -> a; int rid = ((tint *)data) -> b; int cid = ((tint *)data) -> c; /* Append a top level row and leave it empty */ if (cedit -> ppath != NULL) g_free (cedit -> ppath); if (cedit -> cpath != NULL) g_free (cedit -> cpath); cedit -> ppath = g_malloc0(nprojects*sizeof*cedit -> ppath); cedit -> cpath = g_malloc0(nprojects*sizeof*cedit -> cpath); project * the_proj = get_project_by_id (pid); for (i=0; i name), 2, TRUE, 3, -1, -1); cedit -> ppath[i] = gtk_tree_model_get_path ((GtkTreeModel *)store, & projlevel); for (j=0; j analysis[rid] -> c_sets; j++) { k = the_proj -> analysis[rid] -> compat_id[j]; if (this_proj -> analysis[k] -> calc_ok) { gtk_tree_store_append (store, & calclevel, & projlevel); gtk_tree_store_set (store, & calclevel, 0, 0, 1, graph_name[k], 2, TRUE, 3, -1, -1); if (j == 0) { cedit -> cpath[i] = gtk_tree_model_get_path ((GtkTreeModel *)store, & calclevel); } for (l = 0 ; l < this_proj -> analysis[k] -> numc ; l++) { append = FALSE; if (i != pid && this_proj -> analysis[k] -> curves[l] -> ndata != 0) { append = TRUE; } else if (((i != pid) || (k != rid || l != cid)) && this_proj -> analysis[k] -> curves[l] -> ndata != 0) { append = TRUE; } if (append) { // Special condition for the F(k,t) and S(q,w) if (rid == SKT) { if (cid < the_proj -> skt_sets && l > this_proj -> skt_sets-1) { append = FALSE; } else if (cid > the_proj -> skt_sets-1 && l < this_proj -> skt_sets) { append = FALSE; } } } if (append) { gtk_tree_store_append (store, & curvelevel, & calclevel); gtk_tree_store_set (store, & curvelevel, 0, 1, 1, this_proj -> analysis[k] -> curves[l] -> name, 2, ! was_not_added (get_curve_from_pointer(data) -> extrac, i, k, l), 3, i, 4, k, 5, l, -1); } } } } } } GtkTreeStore * projmodel; /*! \fn void toggle_curve (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief show / hide curve cellrenderer toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void toggle_curve (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, j, k; gboolean status; GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(projmodel), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(projmodel), & iter, 2, & status, 3, & i, 4, & j, 5, & k, -1); gtk_tree_store_set (projmodel, & iter, 2, ! status, -1); set_set (i, j, k, data); } /*! \fn void set_visible_curve_data (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer \param col the tree view column \param renderer the cell renderer \param mod the tree model \param iter the tree iter \param data the associated data pointer */ void set_visible_curve_data (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int m; gtk_tree_model_get (mod, iter, 0, & m, -1); gtk_cell_renderer_set_visible (renderer, m); } /*! \fn GtkWidget * create_projects_tree (curve_edition * cedit, gpointer data) \brief curve edition create the project(s) / curves tree model \param cedit the target curve_edition pointer \param data the associated data pointer */ GtkWidget * create_projects_tree (curve_edition * cedit, gpointer data) { int i; GtkTreeViewColumn * projcol[6]; GtkCellRenderer * projcell[6]; gchar * col_title[6] = {" ", i18n("Data sets"), i18n("Select"), " ", " ", " "}; gchar * ctype[6]={"text", "text", "active", "text", "text", "text"}; GType col_type[6] = {G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}; projmodel = gtk_tree_store_newv (6, col_type); cedit -> projtree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(projmodel)); for (i=0; i<6; i++) { if (i == 2) { projcell[i] = gtk_cell_renderer_toggle_new (); projcol[i] = gtk_tree_view_column_new_with_attributes(_(col_title[i]), projcell[i], ctype[i], i, NULL); g_signal_connect (G_OBJECT(projcell[i]), "toggled", G_CALLBACK(toggle_curve), data); gtk_tree_view_column_set_cell_data_func (projcol[i], projcell[i], set_visible_curve_data, NULL, NULL); } else { projcell[i] = gtk_cell_renderer_text_new(); projcol[i] = gtk_tree_view_column_new_with_attributes(_(col_title[i]), projcell[i], ctype[i], i, NULL); } gtk_tree_view_append_column(GTK_TREE_VIEW(cedit -> projtree), projcol[i]); if (i == 0 || i > 2) gtk_tree_view_column_set_visible (projcol[i], FALSE); } fill_proj_model (cedit, projmodel, data); g_object_unref (projmodel); gtk_tree_view_expand_all (GTK_TREE_VIEW(cedit -> projtree)); return cedit -> projtree; } /*! \fn G_MODULE_EXPORT void run_curve_edit (GtkDialog * dial, gint response_id, gpointer data) \brief curve edition dialog callback \param dial the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_curve_edit (GtkDialog * dial, gint response_id, gpointer data) { destroy_this_dialog (dial); if (get_curve_from_pointer(data) -> curve_edit) { g_free (get_curve_from_pointer(data) -> curve_edit); get_curve_from_pointer(data) -> curve_edit = NULL; } } /*! \fn void edit_curve (gpointer data) \brief create the curve edition dialog \param data the associated data pointer */ void edit_curve (gpointer data) { GtkWidget * ebox; GtkWidget * enoote; GtkWidget * dbox; GtkWidget * scrollsets; activer = ((tint *)data) -> b; activec = ((tint *)data) -> c; // Axis data Curve * this_curve = get_curve_from_pointer (data); this_curve -> curve_edit = g_malloc0(sizeof*this_curve -> curve_edit); curve_edition * this_cedit = this_curve -> curve_edit; this_cedit -> win = dialogmodal (_("Edit curve"), GTK_WINDOW(this_curve -> window)); gtk_window_set_resizable (GTK_WINDOW (this_cedit -> win), FALSE); #ifndef GTK4 gtk_window_set_icon (GTK_WINDOW (this_cedit -> win), THETD); #endif ebox = dialog_get_content_area (this_cedit -> win); enoote = gtk_notebook_new (); add_box_child_start (GTK_ORIENTATION_VERTICAL, ebox, enoote, FALSE, FALSE, 0); // The first tab of the notebook gtk_notebook_append_page (GTK_NOTEBOOK(enoote), create_tab_1 (this_cedit, data), gtk_label_new (_("Graph"))); // gtk_notebook_set_tab_label (GTK_NOTEBOOK (enoote), gtk_notebook_get_nth_page (GTK_NOTEBOOK (enoote), 0), gtk_label_new (_("Graph"))); // The second tab of the notebook gtk_notebook_append_page (GTK_NOTEBOOK(enoote), create_tab_2 (this_cedit, data), gtk_label_new (_("Data"))); // gtk_notebook_set_tab_label (GTK_NOTEBOOK (enoote), gtk_notebook_get_nth_page (GTK_NOTEBOOK (enoote), 1), gtk_label_new (_("Data"))); // The third tab of the notebook gtk_notebook_append_page (GTK_NOTEBOOK(enoote), create_tab_3 (this_cedit, data), gtk_label_new (_("Legend"))); // gtk_notebook_set_tab_label (GTK_NOTEBOOK (enoote), gtk_notebook_get_nth_page (GTK_NOTEBOOK (enoote), 2), gtk_label_new (_("Legend"))); // The fourth tab of the notebook gtk_notebook_append_page (GTK_NOTEBOOK(enoote), create_tab_4 (this_cedit, data), gtk_label_new (_("Axis"))); // gtk_notebook_set_tab_label (GTK_NOTEBOOK (enoote), gtk_notebook_get_nth_page (GTK_NOTEBOOK (enoote), 3), gtk_label_new (_("Axis"))); // The fifth tab of the notebook dbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, dbox, markup_label(_("Add data set(s) to the active window"), -1, 30, 0.5, 0.5), FALSE, FALSE, 0); scrollsets = create_scroll (dbox, 250, 525, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, create_projects_tree (this_cedit, data)); gtk_notebook_append_page (GTK_NOTEBOOK(enoote), dbox, gtk_label_new (_("Add data set"))); // gtk_notebook_set_tab_label (GTK_NOTEBOOK (enoote), gtk_notebook_get_nth_page (GTK_NOTEBOOK (enoote), 4), gtk_label_new (_("Add data set"))); add_gtk_close_event (this_cedit -> win, G_CALLBACK(destroy_this_window), NULL); g_signal_connect (G_OBJECT(this_cedit -> win), "response", G_CALLBACK(run_curve_edit), data); show_the_widgets (this_cedit -> win); set_data_aspect (GTK_COMBO_BOX(this_cedit -> data_aspect), data); update_axis (GTK_COMBO_BOX(this_cedit -> axischoice), data); dialog_id ++; Event_loop[dialog_id] = g_main_loop_new (NULL, FALSE); g_main_loop_run (Event_loop[dialog_id]); } atomes_1.3.1/src/curve/cedit.h0000664000175000017500000000543715212624223015672 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cedit.h * @short Variable declarations for the curve layout edition window * @author Sébastien Le Roux */ /* * This header file: 'cedit.h' * * Contains: - Variable declarations for the curve layout edition window */ #ifndef CEDIT_H_ #define CEDIT_H_ typedef struct curve_edition curve_edition; struct curve_edition { GtkWidget * win; tint prc; GtkTreePath ** ppath; GtkTreePath ** cpath; GtkWidget * projtree; GtkWidget * xyp[2]; // tab 1 GtkWidget * title_box; GtkWidget * frame[11]; GtkWidget * frame_box; GtkWidget * frame_style_area; GtkWidget * frame_pix_box; qint dataxe[2]; qint framxe[4]; GtkWidget * custom_title; // tab 2 GtkWidget * setcolorbox; GtkWidget * thesetbox; GtkWidget * data_color; GtkWidget * data_aspect; GtkWidget * data_thickness; GtkWidget * data_glyph; GtkWidget * data_glyph_size; GtkWidget * data_glyph_freq; GtkWidget * data_hist_width; GtkWidget * data_hist_opac; GtkWidget * data_hist_pos; GtkWidget * data_dash; GtkWidget * stylearea; GtkWidget * pixarea; GtkWidget * Glyph_box; GtkWidget * Hist_box; GtkWidget * xyl[2]; GtkWidget * orgtree; GtkWidget * datascroll; // tab 3 GtkWidget * legend_box; GtkWidget * legend_box_style; GtkWidget * legend_style_area; // tab 4 GtkWidget * axischoice; GtkWidget * scale_box; GtkWidget * ticks_inout_box; GtkWidget * ticks_pos_box; GtkWidget * labels_pos_box; GtkWidget * ticks_labels_angle; GtkWidget * ticks_labels_font; GtkWidget * show_axis; GtkWidget * show_grid; GtkWidget * auto_scale; GtkWidget * axis_default_title; GtkWidget * axis_title; GtkWidget * axis_title_font; GtkWidget * majt; GtkWidget * vmin; GtkWidget * vmax; GtkWidget * nmi[2], * ndi[2]; GtkWidget * mats[2]; GtkWidget * mits[2]; GtkWidget * nptx[2], * npty[2]; GtkWidget * tptx[2], * tpty[2]; int handler_id; }; extern int activeg; extern int activec; extern int activer; extern char * lapos[2]; extern char * ctext[2]; void prepbox (gpointer data); void edit_curve (gpointer cdata); #endif atomes_1.3.1/src/curve/datab.c0000664000175000017500000010233015212624223015636 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file datab.c * @short Curve data edition window and associated callbacks * @author Sébastien Le Roux */ /* * This file: 'datab.c' * * Contains: * - The curve data edition window and associated callbacks * * List of functions: G_MODULE_EXPORT gboolean on_data_button_event (GtkWidget * widget, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean cancel_win (GtkWindow * win, gpointer data); G_MODULE_EXPORT gboolean cancel_win (GtkWidget * win, GdkEvent * event, gpointer data); void get_tree_data (GtkWidget * tree); void save_row (gpointer data, gpointer user_data); void update_first_row (gpointer data, gpointer user_data); void update_first_col (); void add_to_last_row (gpointer data, gpointer user_data); void add_to_last_col (double cte, gpointer data); void multiply_last_row (gpointer data, gpointer user_data); void multiply_last_col (double cte, gpointer data); void select_row (gpointer data, gpointer user_data); void copy_row (gpointer data, gpointer user_data); void copy_content (gpointer data); void add_row (gpointer data, gpointer user_data); void delete_row (gpointer data, gpointer user_data); void insert_cell (gpointer data); void delete_cell (gpointer data); void add_to_column (gpointer data); void multiply_column (gpointer data); void data_popup_menu (GtkWidget * top_level, double x, double y, gpointer data); void data_popup_menu (GtkWidget * top_level, GdkEvent * event, gpointer data); void data_button_event (GtkWidget * data_tree, double event_x, double event_y, guint event_button, guint event_type, gpointer data); void data_button_event (GtkWidget * data_tree, GdkEvent * event, guint event_button, guint event_type, gpointer data); void cancel_changes (GtkWidget * widg, gpointer data); void edit_data (gpointer data); static void fill_data_model (GtkListStore * store, project * this_proj, int b, int c); G_MODULE_EXPORT void edit_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer user_data); G_MODULE_EXPORT void adjust_value (GtkEntry * res, gpointer data); G_MODULE_EXPORT void run_add_to_column (GtkDialog * wind, gint response_id, gpointer data); G_MODULE_EXPORT void run_multiply_column (GtkDialog * wind, gint response_id, gpointer data); G_MODULE_EXPORT void data_pop_action (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void on_data_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_data_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void cancel_but (GtkButton * but, gpointer data); G_MODULE_EXPORT void validate_changes (GtkButton * but, gpointer data); GtkWidget * setview (project * this_proj, int b, int c); GMenu * insert_place (); GMenu * insert_data (); GMenu * delete_data (); GMenu* cell_actions (); GMenu * cell_title (); GMenu * column_actions (); GMenu * column_title (); GMenu * data_menu (); */ #include #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" int nrows; GtkTreeModel * curve_model; GList * lrows; GList * rows; GtkTreeSelection * sel; GtkTreePath * path; GtkTreeIter row; gchar * text; /*! \fn void get_tree_data (GtkWidget * tree) \brief get information on location in a GtkTreeView \param tree the GtkTreeView */ void get_tree_data (GtkWidget * tree) { sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(tree)); curve_model = gtk_tree_view_get_model(GTK_TREE_VIEW(tree)); lrows = gtk_tree_selection_get_selected_rows (sel, & curve_model); nrows = gtk_tree_selection_count_selected_rows (sel); } /*! \fn void save_row (gpointer data, gpointer user_data) \brief save row data and udpate calculation result accordingly \param data the path in the tree model \param user_data the associated data pointer */ void save_row (gpointer data, gpointer user_data) { path = data; Curve * this_curve = get_curve_from_pointer (user_data); if (gtk_tree_model_get_iter (curve_model, & row, path)) { gtk_tree_model_get (curve_model, & row, 1, & this_curve -> data[0][nrows], 2, & this_curve -> data[1][nrows], -1); } nrows = nrows + 1; } /*! \fn void update_first_row (gpointer data, gpointer user_data) \brief update row in the first column \param data the path in the tree model \param user_data the associated data pointer */ void update_first_row (gpointer data, gpointer user_data) { path = data; if (gtk_tree_model_get_iter (curve_model, & row, path)) { nrows = nrows + 1; gtk_list_store_set (GTK_LIST_STORE(curve_model), & row, 0, nrows, -1); } } /*! \fn void update_first_col () \brief update all rows in the first column * */ void update_first_col () { gtk_tree_selection_select_all (sel); lrows = gtk_tree_selection_get_selected_rows (sel, & curve_model); nrows = 0; g_list_foreach (lrows, (GFunc)update_first_row, NULL); gtk_tree_selection_unselect_all (sel); } /*! \fn void add_to_last_row (gpointer data, gpointer user_data) \brief add constant to last row \param data the path in the tree model \param user_data the constant */ void add_to_last_row (gpointer data, gpointer user_data) { path = data; double vold; double * cte = (double *)user_data; if (gtk_tree_model_get_iter (curve_model, & row, path)) { gtk_tree_model_get (curve_model, & row, 2, & vold, -1); gtk_list_store_set (GTK_LIST_STORE(curve_model), & row, 2, * cte + vold, -1); } } /*! \fn void add_to_last_col (double cte, gpointer data) \brief add constant value to selected rows \param cte the constant to add \param data the associated data pointer */ void add_to_last_col (double cte, gpointer data) { qint * dat = (qint *)data; Curve * this_curve; this_curve = get_project_by_id (((tint *)data) -> a) -> analysis[dat -> b] -> curves[dat -> c]; curve_model = gtk_tree_view_get_model (GTK_TREE_VIEW(this_curve -> datatree)); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(this_curve -> datatree)); gtk_tree_selection_select_all (sel); get_tree_data (this_curve -> datatree); g_list_foreach (lrows, (GFunc)add_to_last_row, & cte); gtk_tree_selection_unselect_all (sel); } /*! \fn void multiply_last_row (gpointer data, gpointer user_data) \brief multiply last row by constant \param data the path in the tree model \param user_data the constant */ void multiply_last_row (gpointer data, gpointer user_data) { path = data; double vold; double * cte = (double *) user_data; if (gtk_tree_model_get_iter (curve_model, & row, path)) { gtk_tree_model_get (curve_model, & row, 2, & vold, -1); gtk_list_store_set (GTK_LIST_STORE(curve_model), & row, 2, * cte * vold, -1); } } /*! \fn void multiply_last_col (double cte, gpointer data) \brief multiply last colum by constant value \param cte the constant value \param data the associated data pointer */ void multiply_last_col (double cte, gpointer data) { qint * dat = (qint *)data; Curve * this_curve; this_curve = get_project_by_id (dat -> a) -> analysis[dat -> b] -> curves[dat -> c]; curve_model = gtk_tree_view_get_model (GTK_TREE_VIEW(this_curve -> datatree)); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(this_curve -> datatree)); gtk_tree_selection_select_all (sel); get_tree_data (this_curve -> datatree); g_list_foreach (lrows, (GFunc)multiply_last_row, & cte); gtk_tree_selection_unselect_all (sel); } /*! \fn void select_row (gpointer data, gpointer user_data) \brief select row \param data the path in the tree model \param user_data the associated data pointer */ void select_row (gpointer data, gpointer user_data) { path = data; if (gtk_tree_model_get_iter (curve_model, & row, path)) { gtk_tree_selection_select_iter (sel, & row); } } /*! \fn void copy_row (gpointer data, gpointer user_data) \brief copy row \param data the path in the tree model \param user_data the associated data pointer */ void copy_row (gpointer data, gpointer user_data) { path = data; int v1; double v2, v3; gchar * tmp; if (gtk_tree_model_get_iter (curve_model, & row, path)) { gtk_tree_model_get (curve_model, & row, 0, & v1, 1, & v2, 2, & v3, -1); if (text == NULL) { text = g_strdup_printf ("%d\t%f\t%f\n", v1, v2, v3); } else { tmp = g_strdup_printf ("%s%d\t%f\t%f\n", text, v1, v2, v3); g_free (text); text = g_strdup_printf ("%s", tmp); g_free (tmp); } } } /*! \fn void copy_content (gpointer data) \brief copy selection \param data the associated data pointer */ void copy_content (gpointer data) { text = NULL; g_list_foreach (lrows, (GFunc)copy_row, NULL); #ifdef GTK3 gtk_clipboard_set_text (gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), text, -1); gtk_clipboard_store (gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)); #endif g_free (text); } /*! \fn void add_row (gpointer data, gpointer user_data) \brief add row \param data the path in the tree model \param user_data the associated data pointer */ void add_row (gpointer data, gpointer user_data) { GtkTreeIter newrow; if (gtk_tree_model_get_iter (curve_model, & row, path)) { if (GPOINTER_TO_INT(user_data) == 0) { gtk_list_store_insert_before (GTK_LIST_STORE(curve_model), & newrow, & row); } else { gtk_list_store_insert_after (GTK_LIST_STORE(curve_model), & newrow, & row); } gtk_list_store_set (GTK_LIST_STORE(curve_model), & newrow, 0, 0, 1, 0.00000, 2, 0.00000, -1); } } /*! \fn void delete_row (gpointer data, gpointer user_data) \brief delete row \param data the path in the tree model \param user_data the associated data pointer */ void delete_row (gpointer data, gpointer user_data) { path = data; if (gtk_tree_model_get_iter (curve_model, & row, path)) { gtk_list_store_remove (GTK_LIST_STORE(curve_model), & row); } } /*! \fn void insert_cell (gpointer data) \brief insert row \param data the associated data pointer */ void insert_cell (gpointer data) { if (GPOINTER_TO_INT(data) == 0) { path = (GtkTreePath *) g_list_nth_data (lrows, 0); } else { path = (GtkTreePath *) g_list_nth_data (lrows, nrows-1); } g_list_foreach (lrows, (GFunc)add_row, data); update_first_col (); } /*! \fn void delete_cell (gpointer data) \brief delete row \param data the associated data pointer */ void delete_cell (gpointer data) { g_list_foreach (g_list_reverse (lrows), (GFunc)delete_row, NULL); update_first_col (); } /*! \fn G_MODULE_EXPORT void edit_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer user_data) \brief edit cell in the curve data edition tree model \param cell the GtkCellRendererText sending the signal \param path_string the path in the tree model \param new_text the string describing the new value \param user_data the associated data pointer */ G_MODULE_EXPORT void edit_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer user_data) { qint * id = (qint *)user_data; project * this_proj = get_project_by_id (id -> a); curve_model = gtk_tree_view_get_model(GTK_TREE_VIEW(this_proj -> analysis[id -> b] -> curves[id -> c] -> datatree)); gtk_tree_model_get_iter_from_string (curve_model, & row, path_string); double val = string_to_double ((gpointer)new_text); gtk_list_store_set (GTK_LIST_STORE(curve_model), & row, id -> d, val, -1); } GtkWidget * col_entry; /*! \fn G_MODULE_EXPORT void adjust_value (GtkEntry * res, gpointer data) \brief adjust constant value entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void adjust_value (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); update_entry_double (res, v); } /*! \fn G_MODULE_EXPORT void run_add_to_column (GtkDialog * wind, gint response_id, gpointer data) \brief add constant to column - running the dialog \param wind the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_add_to_column (GtkDialog * wind, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { const gchar * p = entry_get_text (GTK_ENTRY(col_entry)); double c = string_to_double ((gpointer)p); update_entry_double (GTK_ENTRY(col_entry), c); add_to_last_col (c, data); } destroy_this_dialog (wind); } /*! \fn void add_to_column (gpointer data) \brief add constant to column - creating the dialog \param data the associated data pointer */ void add_to_column (gpointer data) { GtkWidget * wind; GtkWidget * box; GtkWidget * hbox; GtkWidget * lab; gchar * str; qint * dat = (qint *)data; wind = dialogmodal (_("Add Constant to Column"), GTK_WINDOW(get_project_by_id(dat -> a) -> analysis[dat -> b] -> curves[dat -> c] -> window)); gtk_dialog_add_button (GTK_DIALOG (wind), _("Apply"), GTK_RESPONSE_APPLY); box = dialog_get_content_area (wind); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, TRUE, TRUE, 0); str = g_strdup_printf (_("Add Constant to Last Column")); lab = gtk_label_new (str); gtk_widget_set_size_request (lab, 200, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, TRUE, FALSE, 0); col_entry = create_entry (G_CALLBACK(adjust_value), 100, 15, FALSE, NULL); gtk_entry_set_alignment (GTK_ENTRY(col_entry), 1.0); update_entry_double (GTK_ENTRY(col_entry), 1.0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, col_entry, FALSE, FALSE, 0); run_this_gtk_dialog (wind, G_CALLBACK(run_add_to_column), data); } /*! \fn G_MODULE_EXPORT void run_multiply_column (GtkDialog * wind, gint response_id, gpointer data) \brief multiply column by constant - running the dialog \param wind the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_multiply_column (GtkDialog * wind, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { const gchar * p = entry_get_text (GTK_ENTRY(col_entry)); double c = string_to_double ((gpointer)p); update_entry_double (GTK_ENTRY(col_entry), c); multiply_last_col (c, data); } destroy_this_dialog (wind); } /*! \fn void multiply_column (gpointer data) \brief multiply column by constant - creating dialog \param data the associated data pointer */ void multiply_column (gpointer data) { GtkWidget * wind; GtkWidget * box; GtkWidget * hbox; GtkWidget * lab; gchar * str; qint * dat = (qint *)data; wind = dialogmodal (_("Multiply Column by Constant"), GTK_WINDOW(get_project_by_id(dat -> a) -> analysis[dat -> b] -> curves[dat -> c] -> window)); gtk_dialog_add_button (GTK_DIALOG (wind), _("Apply"), GTK_RESPONSE_APPLY); box = dialog_get_content_area (wind); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, TRUE, TRUE, 0); str = g_strdup_printf (_("Multiply Last Column by Constant")); lab = gtk_label_new (str); gtk_widget_set_size_request (lab, 200, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, TRUE, FALSE, 0); col_entry = create_entry (G_CALLBACK(adjust_value), 100, 15, FALSE, NULL); gtk_entry_set_alignment (GTK_ENTRY(col_entry), 1.0); update_entry_double (GTK_ENTRY(col_entry), 1.0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, col_entry, FALSE, FALSE, 0); run_this_gtk_dialog (wind, G_CALLBACK(run_multiply_column), data); } /*! \fn GMenu * insert_place () \brief create the insertion submenu */ GMenu * insert_place () { GMenu * menu = g_menu_new (); append_menu_item (menu, _("Before"), "data-pop.insert.before", NULL, NULL, IMG_STOCK, (gpointer)GO_UP, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, _("After"), "data-pop.insert.after", NULL, NULL, IMG_STOCK, (gpointer)GO_DOWN, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * insert_data () \brief create the insert data submenu */ GMenu * insert_data () { GMenu * menu = g_menu_new (); append_submenu (menu, _("Insert Row(s)"), insert_place()); return menu; } /*! \fn GMenu * delete_data () \brief create the delete data submenu */ GMenu * delete_data () { GMenu * menu = g_menu_new (); append_menu_item (menu, _("Delete Row(s)"), "data-pop.delete", NULL, NULL, IMG_STOCK, (gpointer)LIST_REM, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu* cell_actions () \brief create the cell actions submenu */ GMenu* cell_actions () { GMenu * menu = g_menu_new (); append_menu_item (menu, _("Copy Selected Row(s)"), "data-pop.copy", NULL, NULL, IMG_STOCK, (gpointer)EDITC, FALSE, FALSE, FALSE, NULL); g_menu_append_section (menu, NULL, (GMenuModel*)insert_data()); g_menu_append_section (menu, NULL, (GMenuModel*)delete_data()); return menu; } /*! \fn GMenu * cell_title () \brief create the cell based operations subemu */ GMenu * cell_title () { GMenu * menu = g_menu_new (); append_menu_item (menu, _("Cell Based Operations"), "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * column_actions () \brief create the column actions submenu */ GMenu * column_actions () { GMenu * menu = g_menu_new (); append_menu_item (menu, _("Add Constant to Last Column"), "data-pop.add", NULL, NULL, IMG_STOCK, (gpointer)LIST_ADD, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, _("Multiply Last Column by Constant"), "data-pop.mul", NULL, NULL, IMG_STOCK, (gpointer)FCLOSE, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * column_title () \brief create the column based operations submenu */ GMenu * column_title () { GMenu * menu = g_menu_new (); append_menu_item (menu, _("Column Based Operations"), "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * data_menu () \brief create the curve data edition popup menu elements */ GMenu * data_menu () { GMenu * menu = g_menu_new (); g_menu_append_section (menu, NULL, (GMenuModel*)cell_title()); g_menu_append_section (menu, NULL, (GMenuModel*)cell_actions()); g_menu_append_section (menu, NULL, (GMenuModel*)column_title()); g_menu_append_section (menu, NULL, (GMenuModel*)column_actions()); return menu; } /*! \fn G_MODULE_EXPORT void data_pop_action (GSimpleAction * action, GVariant * parameter, gpointer data) \brief curve data edition popup menu actions callbacks \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void data_pop_action (GSimpleAction * action, GVariant * parameter, gpointer data) { gchar * name = g_strdup_printf ("%s", g_action_get_name(G_ACTION(action))); if (g_strcmp0 (name, "copy") == 0) { copy_content (data); } else if (g_strcmp0 (name, "insert.before") == 0) { insert_cell (data); } else if (g_strcmp0 (name, "insert.after") == 0) { insert_cell (data); } else if (g_strcmp0 (name, "delete") == 0) { delete_cell (data); } else if (g_strcmp0 (name, "add") == 0) { add_to_column (data); } else if (g_strcmp0 (name, "mul") == 0) { multiply_column (data); } } #ifdef GTK4 /*! \fn void data_popup_menu (GtkWidget * top_level, double x, double y, gpointer data) \brief create curve data edition popup menu GTK4 \param top_level the top level widget \param x x position \param y y position \param data the associated data pointer */ void data_popup_menu (GtkWidget * top_level, double x, double y, gpointer data) #else /*! \fn void data_popup_menu (GtkWidget * top_level, GdkEvent * event, gpointer data) \brief create curve data edition popup menu GTK3 \param top_level the top level widget \param event the GdkEvent triggering the signal \param data the associated data pointer */ void data_popup_menu (GtkWidget * top_level, GdkEvent * event, gpointer data) #endif { GSimpleActionGroup * data_popup = g_simple_action_group_new (); GSimpleAction * pop_data[6]; pop_data[0] = g_simple_action_new ("copy", NULL); pop_data[1] = g_simple_action_new ("insert.before", NULL); pop_data[2] = g_simple_action_new ("insert.after", NULL); pop_data[3] = g_simple_action_new ("delete", NULL); pop_data[4] = g_simple_action_new ("add", NULL); pop_data[5] = g_simple_action_new ("mul", NULL); g_signal_connect (pop_data[0], "activate", G_CALLBACK(data_pop_action), NULL); g_signal_connect (pop_data[1], "activate", G_CALLBACK(data_pop_action), GINT_TO_POINTER(0)); g_signal_connect (pop_data[2], "activate", G_CALLBACK(data_pop_action), GINT_TO_POINTER(1)); g_signal_connect (pop_data[3], "activate", G_CALLBACK(data_pop_action), NULL); g_signal_connect (pop_data[4], "activate", G_CALLBACK(data_pop_action), data); g_signal_connect (pop_data[5], "activate", G_CALLBACK(data_pop_action), data); int i; for (i=0; i<6; i++) g_action_map_add_action (G_ACTION_MAP(data_popup), G_ACTION(pop_data[i])); GtkWidget * menu; #ifdef GTK4 menu = gtk_popover_menu_new_from_model_full ((GMenuModel *)data_menu(), GTK_POPOVER_MENU_NESTED); gtk_widget_set_parent (menu, top_level); #else menu = gtk_menu_new_from_model ((GMenuModel *)data_menu ()); #endif gtk_widget_insert_action_group (menu, "data-pop", G_ACTION_GROUP(data_popup)); #ifdef GTK4 gtk_widget_set_size_request (menu, -1, 240); pop_menu_at_pointer (menu, x, y); #else pop_menu_at_pointer (menu, event); #endif } #ifdef GTK4 /*! \fn void data_button_event (GtkWidget * data_tree, double event_x, double event_y, guint event_button, guint event_type, gpointer data) \brief curve data edition mouse button event GTK4 \param data_tree the GtkWidget sending the signal \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param data the associated data pointer */ void data_button_event (GtkWidget * data_tree, double event_x, double event_y, guint event_button, guint event_type, gpointer data) #else /*! \fn void data_button_event (GtkWidget * data_tree, GdkEvent * event, guint event_button, guint event_type, gpointer data) \brief curve data edition mouse button event GTK3 \param data_tree the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param event_button event button \param event_type event type \param data the associated data pointer */ void data_button_event (GtkWidget * data_tree, GdkEvent * event, guint event_button, guint event_type, gpointer data) #endif { if (event_type == GDK_BUTTON_PRESS) { get_tree_data (data_tree); if (event_button == 3) { #ifdef GTK4 data_popup_menu ((GtkWidget *)get_top_level(data_tree), event_x, event_y, data); #else data_popup_menu (data_tree, event, data); #endif } } else if (event_type == GDK_BUTTON_RELEASE) { g_list_foreach (lrows, (GFunc)gtk_tree_path_free, NULL); g_list_free (lrows); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_data_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button pressed callback GTK4 \param gesture the GtkGesture sending the signal \param n_press the number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_data_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { data_button_event (gtk_event_controller_get_widget ((GtkEventController*)gesture), x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_PRESS, data); } /*! \fn G_MODULE_EXPORT void on_data_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button released callback GTK4 \param gesture the GtkGesture sending the signal \param n_press the number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_data_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { data_button_event (gtk_event_controller_get_widget ((GtkEventController*)gesture), x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_RELEASE, data); } #else /*! \fn G_MODULE_EXPORT gboolean on_data_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) \brief on button event in the curve data edition window \param widget the GtkWidget sending the signal \param event \param data */ G_MODULE_EXPORT gboolean on_data_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) { GdkEventButton * bevent = (GdkEventButton*)event; data_button_event (widget, event, bevent -> button, bevent -> type, data); return FALSE; } #endif /*! \fn static void fill_data_model (GtkListStore * store, project * this_proj, int b, int c) \brief fill curve data list store \param store the GtkListStore to fill \param this_proj the target project \param b the calculation id \param c the curve id */ static void fill_data_model (GtkListStore * store, project * this_proj, int b, int c) { GtkTreeIter datalevel; int i; for (i=0; i analysis[b] -> curves[c] -> ndata; i++) { gtk_list_store_append (store, & datalevel); gtk_list_store_set (store, & datalevel, 0, i+1, 1, this_proj -> analysis[b] -> curves[c] -> data[0][i], 2, this_proj -> analysis[b] -> curves[c] -> data[1][i], -1); } } /*! \fn GtkWidget * setview (project * this_proj, int b, int c) \brief create the curve data tree store \param this_proj the target project \param b the target calculation \param c the target curve */ GtkWidget * setview (project * this_proj, int b, int c) { GtkWidget * dataview; GtkListStore * datamodel; GType type[3]={G_TYPE_INT, G_TYPE_DOUBLE, G_TYPE_DOUBLE}; GtkTreeViewColumn * datacol[3]; GtkCellRenderer * datacel[3]; GtkTreeSelection * dataselect; // ColRGBA col[3]; gchar * name[3]; int i; Curve * this_curve = this_proj -> analysis[b] -> curves[c]; name[0]=g_strdup_printf (" "); name[1]=g_strdup_printf ("%s", this_curve -> axis_title[0]); name[2]=g_strdup_printf ("%s\n%s", prepare_for_title(this_proj -> name), this_curve -> name); datamodel = gtk_list_store_newv (3, type); fill_data_model (datamodel, this_proj, b, c); dataview = gtk_tree_view_new_with_model (GTK_TREE_MODEL(datamodel)); //gtk_tree_view_set_rules_hint (GTK_TREE_VIEW(dataview), TRUE); for (i=0; i<3; i++) { datacel[i] = gtk_cell_renderer_text_new(); /* if (i == 1) { col[i].red = 62965; col[i].green = 62965; col[i].blue = 62965; } else { col[i].red = 51914; col[i].green = 57825; col[i].blue = 65535; } g_object_set (datacel[i], "cell-background-gdk", & col[i], "cell-background-set", TRUE, NULL); */ if (i > 0) { g_object_set (datacel[i], "editable", TRUE, NULL); gtk_cell_renderer_set_alignment (datacel[i], 0.5, 0.5); this_curve -> idcol[i-1].a = this_proj -> id; this_curve -> idcol[i-1].b = b; this_curve -> idcol[i-1].c = c; this_curve -> idcol[i-1].d = i; g_signal_connect (G_OBJECT(datacel[i]), "edited", G_CALLBACK(edit_cell), & this_curve -> idcol[i-1]); } datacol[i] = gtk_tree_view_column_new_with_attributes(name[i], datacel[i], "text", i, NULL); gtk_tree_view_column_set_alignment (datacol[i], 0.5); gtk_tree_view_column_set_resizable (datacol[i], TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(dataview), datacol[i]); if (i > 0) { gtk_tree_view_column_set_min_width (datacol[i], 100); } } g_object_unref (datamodel); dataselect = gtk_tree_view_get_selection (GTK_TREE_VIEW(dataview)); gtk_tree_selection_set_mode (dataselect, GTK_SELECTION_MULTIPLE); #ifdef GTK3 g_signal_connect (G_OBJECT(dataview), "button_press_event", G_CALLBACK(on_data_button_event), & this_curve -> idcol[1]); #else add_widget_gesture_and_key_action (dataview, "datab-context-click", G_CALLBACK(on_data_button_pressed), & this_curve -> idcol[1], "datab-context-release", G_CALLBACK(on_data_button_released), & this_curve -> idcol[1], NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #endif gtk_tree_view_expand_all (GTK_TREE_VIEW(dataview)); return dataview; } /*! \fn void cancel_changes (GtkWidget * widg, gpointer data) \brief cancel curve data edition \param widg the GtkWidget sending the signal \param data the associated data pointer */ void cancel_changes (GtkWidget * widg, gpointer data) { destroy_this_widget (widg); get_curve_from_pointer (data) -> datatree = NULL; } /*! \fn G_MODULE_EXPORT void cancel_but (GtkButton * but, gpointer data) \brief cancel curve data edition button callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void cancel_but (GtkButton * but, gpointer data) { cancel_changes (get_top_level(GTK_WIDGET(but)), data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean cancel_win (GtkWindow * win, gpointer data) \brief cancel curve data edition callback GTK4 \param win the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean cancel_win (GtkWindow * win, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean cancel_win (GtkWidget * win, GdkEvent * event, gpointer data) \brief cancel curve data edition callback GTK3 \param win the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean cancel_win (GtkWidget * win, GdkEvent * event, gpointer data) #endif { cancel_changes ((GtkWidget *)win, data); return TRUE; } /*! \fn G_MODULE_EXPORT void validate_changes (GtkButton * but, gpointer data) \brief apply data edition changes \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void validate_changes (GtkButton * but, gpointer data) { tint * id = (tint *)data; project * this_proj = get_project_by_id(id -> a); Curve * this_curve = this_proj -> analysis[id -> b] -> curves[id -> c]; curve_model = gtk_tree_view_get_model(GTK_TREE_VIEW(this_curve -> datatree)); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(this_curve -> datatree)); gtk_tree_selection_select_all (sel); get_tree_data (this_curve -> datatree); if (nrows != this_curve -> ndata) { this_curve -> ndata = nrows; g_free (this_curve -> data[0]); this_curve -> data[0] = allocdouble (nrows); g_free (this_curve -> data[1]); this_curve -> data[1] = allocdouble (nrows); } nrows = 0; g_list_foreach (lrows, (GFunc)save_row, data); cancel_changes (get_top_level(GTK_WIDGET(but)), data); update_curves (); } /*! \fn void edit_data (gpointer data) \brief create edit curve data dialog \param data the associated data pointer */ void edit_data (gpointer data) { GtkWidget * win; tint * id = (tint *)data; project * this_proj = get_project_by_id(id -> a); Curve * this_curve = this_proj -> analysis[id -> b] -> curves[id -> c]; if (this_curve -> datatree != NULL) { win = get_top_level(GTK_WIDGET(this_curve -> datatree)); } else { gchar * str = g_strdup_printf ("%s - %s", prepare_for_title (this_proj -> name), this_curve -> name); win = create_win (str, MainWindow, FALSE, TRUE); g_free (str); gtk_window_set_default_size (GTK_WINDOW(win), 300, 600); GtkWidget * vbox = create_vbox (BSEP); this_curve -> datatree = setview (this_proj, id -> b, id -> c); GtkWidget * scrol = create_scroll (vbox, -1, 570, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrol, this_curve -> datatree); GtkWidget * hbox = create_hbox (0); GtkWidget * butc = create_button (_("Cancel"), IMG_STOCK, CANCEL, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(cancel_but), data); GtkWidget * butv = create_button (_("Apply"), IMG_STOCK, EXECUTE, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(validate_changes), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, butc, TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, butv, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox, -1, 40); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, TRUE, 0); add_container_child (CONTAINER_WIN, win, vbox); add_gtk_close_event (win, G_CALLBACK(cancel_win), data); } show_the_widgets (win); } atomes_1.3.1/src/curve/w_curve.c0000664000175000017500000005721515212624223016250 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_curve.c * @short Functions to create the graph/curve window * @author Sébastien Le Roux */ /* * This file: 'w_curve.c' * * Contains: * - The functions to create the graph/curve window * * List of functions: int get_curve_shift (Curve * this_curve); G_MODULE_EXPORT gboolean view_curve_popup (GtkWidget * widget, gpointer data); G_MODULE_EXPORT gboolean on_motion_notify_event (GtkWidget * widget, GdkEventMotion * event, gpointer data); G_MODULE_EXPORT gboolean on_curve_button_event (GtkWidget * widget, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data); G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data); void curve_zoom_in_out (gboolean state, gdouble event_x, gdouble event_y, gpointer data); void curve_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void curve_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void curve_key_pressed (guint keyval, GdkModifierType state, gpointer data); static void on_curve_pointer_motion (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data); G_MODULE_EXPORT void on_curve_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_curve_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_curve_realize (GtkWidget * widg, gpointer data); GtkWidget * create_curve (tint * data); */ #include #include #include #include #include #include "global.h" #include "callbacks.h" #include "curve.h" #include "cedit.h" #include "datab.h" extern void autoscale (gpointer data); extern void curve_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data); int curve_action_id = -1; #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean view_curve_popup (GtkWidget * widget, gpointer data) \brief show curve popup menu GTK3 \param widget the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean view_curve_popup (GtkWidget * widget, gpointer data) { pop_menu_at_pointer (curve_popup_menu(data), NULL); return TRUE; } #endif /*! \fn void curve_zoom_in_out (gboolean state, gdouble event_x, gdouble event_y, gpointer data) \brief curve zoom in or out \param state mouse button state (pressed or released) \param event_x x position \param event_y y position \param data the associated data pointer */ void curve_zoom_in_out (gboolean state, gdouble event_x, gdouble event_y, gpointer data) { int x, y; double r, g, d; double tmp, xp, yp; gchar * str; gint width, height; CurveState * cstate = (CurveState *)data; Curve * this_curve = get_curve_from_pointer ((gpointer)(cstate -> id)); int curve_shift = get_curve_shift (this_curve); #ifdef GTK4 event_y -= (double) curve_shift; #endif if (state && cstate -> mouseState.MouseIsDown) { cairo_t * rec; cairo_region_t * reg; #ifdef GTK3 GdkWindow * win = gtk_widget_get_window (this_curve -> plot); reg = gdk_window_get_visible_region (win); GdkDrawingContext * curve_context = gdk_window_begin_draw_frame (win, reg); if (gdk_drawing_context_is_valid (curve_context)) { rec = gdk_drawing_context_get_cairo_context (curve_context); if (event_x >= x_min && event_x <= x_max && event_y <= y_min && event_y >= y_max) #else GtkNative * native = gtk_widget_get_native (this_curve -> plot); GdkSurface * surf = gtk_native_get_surface (native); cairo_surface_t * csurf = cairo_surface_create_for_rectangle (this_curve -> surface, 0.0, (double)curve_shift, (double)gtk_widget_get_width(this_curve -> plot), (double)gtk_widget_get_height(this_curve -> plot)); reg = gdk_cairo_region_create_from_surface (csurf); GdkDrawContext * curve_context = (GdkDrawContext *) gdk_surface_create_cairo_context (surf); gdk_draw_context_begin_frame (curve_context, reg); if (gdk_draw_context_is_in_frame (curve_context)) { rec = gdk_cairo_context_cairo_create ((GdkCairoContext *)curve_context); if (event_x >= x_min && event_x <= x_max && event_y <= y_min+(double)curve_shift && event_y >= y_max) #endif { width = event_x - cstate -> mouseState.start_x; height = event_y - cstate -> mouseState.start_y; #ifdef GTK3 cairo_set_source_surface (rec, this_curve -> surface, 0, -curve_shift); #else height += (double) curve_shift; cairo_set_source_surface (rec, this_curve -> surface, 0, +curve_shift); #endif cairo_paint (rec); if (event_x < cstate -> mouseState.start_x) { r=0.0; x = cstate -> mouseState.start_x + 2; if (event_y < cstate -> mouseState.start_y) { g=0.0; d=1.0; y = cstate -> mouseState.start_y + 8; str = g_strdup_printf (_("zoom: out (x) / in (y)")); } else { g=1.0; d=0.0; y = cstate -> mouseState.start_y - 4; str = g_strdup_printf (_("zoom: out (x) / out (y)")); } } else { r=1.0; x = cstate -> mouseState.start_x - 100; if (event_y < cstate -> mouseState.start_y) { g=0.0; d=0.0; y = cstate -> mouseState.start_y + 8; str = g_strdup_printf (_("zoom: in (x) / in (y)")); } else { g=0.0; d=1.0; y = cstate -> mouseState.start_y - 4; str = g_strdup_printf (_("zoom: in (x) / out (y)")); } } cairo_set_source_rgba (rec, r, g, d, 0.05); cairo_rectangle (rec, cstate -> mouseState.start_x, cstate -> mouseState.start_y, width, height); cairo_fill (rec); cairo_set_source_rgba (rec, r, g, d, 1.0); cairo_set_line_width (rec, 1.0); cairo_move_to (rec, cstate -> mouseState.start_x, cstate -> mouseState.start_y); #ifdef GTK4 event_y += (double) curve_shift; #endif cairo_line_to (rec, cstate -> mouseState.start_x, event_y); cairo_line_to (rec, event_x, event_y); cairo_line_to (rec, event_x, cstate -> mouseState.start_y); cairo_line_to (rec, cstate -> mouseState.start_x, cstate -> mouseState.start_y); cairo_stroke (rec); if (abs(width) > 10 && abs(height) > 5) { cairo_move_to (rec, x, y); cairo_show_text (rec, str); } g_free (str); width = event_x - x_min; tmp = this_curve -> axmax[0] - this_curve -> axmin[0]; xp = this_curve -> axmin[0] + width * tmp / XDRAW; #ifdef GTK4 event_y -= (double) curve_shift; #endif height = event_y - y_max; tmp = this_curve -> axmax[1] - this_curve -> axmin[1]; yp = this_curve -> axmax[1] + height * tmp / YDRAW; str = g_strdup_printf ("(x= %f, y= %f)", xp, yp); } else { str = g_strdup_printf (_("(Not in plot)")); } gtk_label_set_text (GTK_LABEL(this_curve -> pos), str); g_free (str); } #ifdef GTK3 gdk_window_end_draw_frame (win, curve_context); #else gdk_draw_context_end_frame (curve_context); #endif } else if (! cstate -> mouseState.MouseIsDown) { #ifdef GTK3 // gtk_widget_get_size_request (this_curve -> plot, & this_curve -> wsize[0], & this_curve -> wsize[1]); gtk_window_get_size (GTK_WINDOW(this_curve -> window), & this_curve -> wsize[0], & y); this_curve -> wsize[1] = y - curve_shift; #else this_curve -> wsize[0] = gtk_widget_get_width (this_curve -> plot); this_curve -> wsize[1] = gtk_widget_get_height (this_curve -> plot); #endif prep_plot (this_curve); #ifdef GTK4 if (event_x >= x_min && event_x <= x_max && event_y <= y_min+(double)curve_shift && event_y >= y_max) #else if (event_x >= x_min && event_x <= x_max && event_y <= y_min && event_y >= y_max) #endif { width = event_x - x_min; tmp = this_curve -> axmax[0] - this_curve -> axmin[0]; xp = this_curve -> axmin[0] + width * tmp / XDRAW; height = event_y - y_max; tmp = this_curve -> axmax[1] - this_curve -> axmin[1]; yp = this_curve -> axmax[1] + height * tmp / YDRAW; str = g_strdup_printf ("(x= %f, y= %f)", xp, yp); } else { str = g_strdup_printf (_("Not in plot")); } gtk_label_set_text (GTK_LABEL(this_curve -> pos), str); g_free (str); } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_motion_notify_event (GtkWidget * widget, GdkEventMotion * event, gpointer data) \brief handle mouse motion event in the OpenGL window GTK3 \param widget the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_motion_notify_event (GtkWidget * widget, GdkEventMotion * event, gpointer data) { curve_zoom_in_out ((event -> state & GDK_BUTTON1_MASK) ? TRUE : FALSE, event -> x, event -> y, data); return TRUE; } #else /*! \fn static void on_curve_pointer_motion (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data) \brief handle mouse motion event in the curve window GTK4 \param motion The GtkEvenController sending the signal \param x x position \param y y position \param data the associated data pointer */ static void on_curve_pointer_motion (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data) { curve_zoom_in_out (((CurveState *)data) -> mouseState.MouseIsDown, x, y, data); } #endif #ifdef GTK4 /*! \fn void curve_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief handle mouse button event on the curve window GTK4 \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void curve_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) #else /*! \fn void curve_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief handle mouse button event on the curve window GTK3 \param event the GdkEvent triggering the signal \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void curve_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) #endif { int x1, x2, y1, y2; double tmp; CurveState * cstate = (CurveState *)data; Curve * this_curve = get_curve_from_pointer ((gpointer)cstate -> id); #ifdef GTK4 int curve_shift = get_curve_shift (this_curve); #endif if (event_type == GDK_BUTTON_PRESS) { if (event_button == 1) { #ifdef GTK3 /* The following is not working: gtk_widget_get_size_request (this_curve -> plot, & this_curve -> wsize[0], & this_curve -> wsize[1]); */ gtk_window_get_size (GTK_WINDOW(this_curve -> window), & this_curve -> wsize[0], & y1); this_curve -> wsize[1] = y1 - get_curve_shift (this_curve); #else this_curve -> wsize[0] = gtk_widget_get_width (this_curve -> plot); this_curve -> wsize[1] = gtk_widget_get_height (this_curve -> plot); #endif prep_plot (this_curve); #ifdef GTK4 if (event_x >= x_min && event_x <= x_max && event_y <= y_min+(double)curve_shift && event_y >= y_max) #else if (event_x >= x_min && event_x <= x_max && event_y <= y_min && event_y >= y_max) #endif { cstate -> mouseState.start_x = event_x; cstate -> mouseState.start_y = event_y; cstate -> mouseState.time = event_time; cstate -> mouseState.MouseIsDown = TRUE; } } else if (event_button == 3) { #ifdef GTK4 pop_menu_at_pointer (curve_popup_menu(data), event_x, event_y); #else pop_menu_at_pointer (curve_popup_menu(data), event); #endif } } else if (event_type == GDK_BUTTON_RELEASE) { cstate -> mouseState.MouseIsDown = FALSE; if (event_button == 1) { etime = event_time - cstate -> mouseState.time; if (event_x >= x_min && event_x <= x_max && event_y <= y_min && event_y >= y_max) { if (event_x != cstate -> mouseState.start_x && event_y != cstate -> mouseState.start_y) { if (etime > 500 && etime < 50000) { x1 = cstate -> mouseState.start_x - x_min; y1 = cstate -> mouseState.start_y - y_max; x2 = event_x - x_min; y2 = event_y - y_max; #ifdef GTK4 y1 -= curve_shift; y2 -= curve_shift; #endif tmp = this_curve -> axmax[0] - this_curve -> axmin[0]; if (x2 > x1) { // zoom-in on X this_curve -> axmax[0] = this_curve -> axmin[0] + x2 * tmp / XDRAW; this_curve -> axmin[0] = this_curve -> axmin[0] + x1 * tmp / XDRAW; } else { // zoom-out on X this_curve -> axmin[0] = this_curve -> axmin[0] - (x1 - x2) * tmp / XDRAW; this_curve -> axmax[0] = this_curve -> axmax[0] + (x1 - x2) * tmp / XDRAW; } tmp = this_curve -> axmax[1] - this_curve -> axmin[1]; if (y1 > y2) { // zoom-in on Y this_curve -> axmin[1] = this_curve -> axmax[1] + y1 * tmp / YDRAW; this_curve -> axmax[1] = this_curve -> axmax[1] + y2 * tmp / YDRAW; } else { // zoom-out on Y this_curve -> axmin[1] = this_curve -> axmin[1] + (y2 - y1) * tmp / YDRAW; this_curve -> axmax[1] = this_curve -> axmax[1] - (y2 - y1) * tmp / YDRAW; } } } } update_curve ((gpointer)cstate -> id); } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_curve_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button pressed signal on the curve window \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_curve_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { curve_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_PRESS, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } /*! \fn G_MODULE_EXPORT void on_curve_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button released signal on the curve window \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_curve_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { curve_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_RELEASE, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } #else /*! \fn G_MODULE_EXPORT gboolean on_curve_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) \brief mouse button event on the curve window \param widget the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_curve_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) { GdkEventButton * bevent = (GdkEventButton *)event; curve_button_event (event, bevent -> x, bevent -> y, bevent -> button, bevent -> type, bevent -> time, data); return TRUE; } #endif /*! \fn void curve_key_pressed (guint keyval, GdkModifierType state, gpointer data) \brief the keyboard shortcut actions for the curve window \param keyval the key pressed \param state the keyboard modifier \param data the associated data pointer */ void curve_key_pressed (guint keyval, GdkModifierType state, gpointer data) { if (state & GDK_CONTROL_MASK) { switch (keyval) { case GDK_KEY_a: autoscale (data); break; case GDK_KEY_c: hide_curve (data); break; case GDK_KEY_e: edit_curve (data); break; case GDK_KEY_i: save_image (data); break; case GDK_KEY_s: write_curve (data); break; } } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data) \brief keyboard key press event for the curve window GTK3 \param widg the GtkWidget sending the signal \param event the GdkEventKey triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data) { if (event -> type == GDK_KEY_PRESS) { //GdkModifierType accel_mask = gtk_accelerator_get_default_mod_mask (); // if ((event -> state & accel_mask) == GDK_CONTROL_MASK) curve_key_pressed (event -> keyval, event -> state, data); } return FALSE; } #else /*! \fn G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) \brief keyboard key press event for the curve window GTK4 \param self the GtkEventControllerKey sending the signal \param keyval number of times it was pressed \param keycode the key pressed \param state the keyboard modifier \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) { curve_key_pressed (keyval, state, data); return TRUE; } #endif /*! \fn int get_curve_shift (Curve * this_curve) \brief get cruve window size shift \param this_curve the target curve */ int get_curve_shift (Curve * this_curve) { return get_widget_height (this_curve -> window) - get_widget_height (this_curve -> plot); } /*! \fn G_MODULE_EXPORT void on_curve_realize (GtkWidget * widg, gpointer data) \brief curve window realize callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_curve_realize (GtkWidget * widg, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); resize_this_window (this_curve -> window, this_curve -> wsize[0], this_curve -> wsize[1] + get_curve_shift (this_curve)); } /*! \fn GtkWidget * create_curve (tint * data) \brief create the curve data plot window \param data the associated data pointer */ GtkWidget * create_curve (tint * data) { GtkWidget * curve_win, * vbox; activeg = data -> a; activer = data -> b; activec = data -> c; Curve * this_curve = get_curve_from_pointer ((gpointer)data); gchar * str = g_strdup_printf ("%s - %s", prepare_for_title (get_project_by_id(data -> a) -> name), this_curve -> name); curve_win = create_win (str, MainWindow, FALSE, TRUE); g_free (str); vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, curve_win, vbox); this_curve -> curve_vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, this_curve -> curve_vbox, FALSE, FALSE, 0); curve_action_id ++; this_curve -> action_id = curve_action_id; this_curve -> action_group = g_simple_action_group_new (); GSimpleAction * curve_action[5]; curve_action[0] = g_simple_action_new ("save.data", NULL); curve_action[1] = g_simple_action_new ("close.curve", NULL); curve_action[2] = g_simple_action_new ("edit.curve", NULL); curve_action[3] = g_simple_action_new ("save.image", NULL); curve_action[4] = g_simple_action_new ("shortcuts.curve", NULL); int i; for (i=0; i<5; i++) { g_action_map_add_action (G_ACTION_MAP(this_curve -> action_group), G_ACTION(curve_action[i])); g_signal_connect (curve_action[i], "activate", G_CALLBACK(curve_menu_bar_action), data); } str = g_strdup_printf ("c-%d", this_curve -> action_id); gtk_widget_insert_action_group (curve_win, str, G_ACTION_GROUP(this_curve -> action_group)); g_free (str); curve_window_add_menu_bar (data); this_curve -> datatree = NULL; this_curve -> state.id = data; this_curve -> plot = gtk_drawing_area_new (); gtk_widget_set_size_request (this_curve -> plot, 100, 100); gtk_widget_set_hexpand (this_curve -> plot, TRUE); gtk_widget_set_vexpand (this_curve -> plot, TRUE); #ifdef GTK3 gtk_widget_add_events (GTK_WIDGET (this_curve -> plot), GDK_EXPOSURE_MASK | GDK_SMOOTH_SCROLL_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); g_signal_connect (G_OBJECT(this_curve -> plot), "motion_notify_event", G_CALLBACK(on_motion_notify_event), & this_curve -> state); g_signal_connect (G_OBJECT(this_curve -> plot), "button_press_event", G_CALLBACK(on_curve_button_event), & this_curve -> state); g_signal_connect (G_OBJECT(this_curve -> plot), "button_release_event", G_CALLBACK(on_curve_button_event),& this_curve -> state); g_signal_connect (G_OBJECT(this_curve -> plot), "popup-menu", G_CALLBACK(view_curve_popup), & this_curve -> state); #else add_widget_gesture_and_key_action (curve_win, "curve-button-pressed", G_CALLBACK(on_curve_button_pressed), & this_curve -> state, "curve-button-released", G_CALLBACK(on_curve_button_released), & this_curve -> state, "curve-key-pressed", G_CALLBACK(on_curve_key_pressed), data, "curve-pointer-motion", G_CALLBACK(on_curve_pointer_motion), & this_curve -> state, NULL, NULL, NULL); #endif add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, this_curve -> plot, FALSE, TRUE, 0); #ifdef GTK3 g_signal_connect (G_OBJECT(this_curve -> plot), "draw", G_CALLBACK(show_curve), data); g_signal_connect (G_OBJECT(curve_win), "key-press-event", G_CALLBACK(on_curve_key_pressed), data); #else gtk_drawing_area_set_draw_func (GTK_DRAWING_AREA(this_curve -> plot), (GtkDrawingAreaDrawFunc)show_curve, data, NULL); #endif g_signal_connect (G_OBJECT(curve_win), "realize", G_CALLBACK(on_curve_realize), data); add_gtk_close_event (curve_win, G_CALLBACK(to_hide_curve), data); return curve_win; } atomes_1.3.1/src/curve/curve.h0000664000175000017500000001334015212624223015716 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file curve.h * @short Variable declarations for the curve widget \n Functions for interactions with the curve widget * @author Sébastien Le Roux */ /* * This header file: 'curve.h' * * Contains: - Variable declarations for the curve widget - Functions for interactions with the curve widget */ #ifndef CURVE_H_ #define CURVE_H_ #include "global.h" // Grid lines width in pixels #define GRIDSIZE 0.1 // Default position of the legend on the curve #define LEGX 0.65 #define LEGY 0.15 // Default color of the data from 0 to 65535 #define RED 1.0 #define GREEN 0.0 #define BLUE 0.0 // Default linewidth of the data line #define DTHICK 1.0 // Number of dash types #define NDASHS 11 // Number of glyph types #define NGLYPHS 37 // The marges between the windows border and the axes #define MARGX 100 #define MARGY 70 extern GtkWidget * axischoice; extern GtkWidget * vmin, * vmax; extern GtkWidget * majt; extern GtkWidget * nmi[2]; extern GtkWidget * xyp[2]; extern int resol[2]; extern int originp; extern int ndash; extern int nglyph; extern double back_alpha; typedef struct curve_dash curve_dash; struct curve_dash { const double * a; int b; }; extern gint32 etime; extern double XDRAW, YDRAW; extern double DXDRAW, DYDRAW; extern double xmax, ymax; extern double x_min, x_max; extern double y_max, y_min; extern double ax, ay; extern double cxy[2]; extern double mticks; extern int nticks; extern int xlog, ylog; extern int dxlog, dylog; extern char * sca; extern PangoLayout * layout; extern gboolean dogrid; extern int x_shift, y_shift; extern int amint, amajt; extern int tickpos, labpos; // Marge sur X et Y dans les graphs extern int xmarge; extern int ymarge; extern char * curve_image_file; extern int get_curve_shift (Curve * this_curve); // Number of dash formats extern int ndash; extern int nglyph; extern const double dashed1[]; extern int len1; extern const double pdashed[]; extern int lenp; extern curve_dash * selectdash (int iddash); extern double scale (double axe); extern Curve * get_curve_from_pointer (gpointer data); extern void prep_plot (Curve * this_curve); extern void hide_curves (project * this_proj, int c); extern void erase_curves (project * this_proj, int c); extern void update_curves (); extern void update_curve (gpointer curve); #ifdef GTK3 extern gboolean show_curve (GtkWidget * grwdget, cairo_t * cr, gpointer curve); #else extern void show_curve (GtkDrawingArea * area, cairo_t * cr, int width, int height, gpointer curve); #endif extern void hide_curve (gpointer data); #ifdef GTK3 extern G_MODULE_EXPORT gboolean to_hide_curve (GtkWidget * thecurve, GdkEvent * event, gpointer data); #else extern G_MODULE_EXPORT gboolean to_hide_curve (GtkWindow * thecurve, gpointer data); #endif extern void clean_curves_data (int calc, int start, int end); extern void initcurve (project * pid, int rid, int cid); extern void init_curve_title (project * this_proj, int rid, int cid); extern void add_curve_widgets (project * this_proj, int rid); extern void allocextra (int a, int b, int c); extern void label_curve (cairo_t * cr, double val, int axe, int p, Curve * this_curve); extern void show_frame (cairo_t * cd, int tf, int da, int res[2], double ti, double x[2], double y[2], ColRGBA dcol); extern void prep_frame (cairo_t * fr, int da, double ti, ColRGBA dcol); extern void draw_frame (cairo_t * cr, Curve * this_curve, int rid, int cid); extern void draw_glyph (cairo_t * in, int theglyph, double x, double y, ColRGBA gcolor, double size); extern const gchar * default_title (int ax, gpointer data); extern void show_title (cairo_t * cr, Curve * this_curve); extern void autoscale_axis (project * this_proj, Curve * this_curve, int rid, int cid, int aid); extern void setup_xaxis_linear (cairo_t * cr, Curve * this_curve); extern void setup_xaxis_log (cairo_t * cr, Curve * this_curve, int rid, int cid, gboolean draw_it); extern void setup_yaxis_linear (cairo_t * cr, Curve * this_curve); extern void setup_yaxis_log (cairo_t * cr, Curve * this_curve, gboolean draw_it); extern void write_curve (gpointer idata); extern void save_image (gpointer cdata); extern void remove_extra (ExtraSets * sets, CurveExtra * ctmp); extern void curve_window_add_menu_bar (tint * data); extern GtkWidget * curve_popup_menu (gpointer data); extern void show_curve_popup_menu (GdkEvent * event, gpointer data); void draw_curve (cairo_t * cr, int cid, int rid, project * this_proj, int points, ColRGBA withcolor, int xscale, int yscale, int asp, int vdash, double thick, int glyp, double gize, int freq, double hwidth, double hopac, int hpos, int extra, int pid); extern void show_legend (cairo_t * cr, project * this_proj, int rid, int cid); #endif atomes_1.3.1/src/curve/w_data.c0000664000175000017500000001563315212624223016033 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_data.c * @short Functions to export curve data * @author Sébastien Le Roux */ /* * This file: 'w_data.c' * * Contains: * - The functions to export curve data * * List of functions: void write_curve (gpointer idata); G_MODULE_EXPORT void run_write_curve (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_write_curve (GtkDialog * info, gint response_id, gpointer data); */ #include #include #include #include "global.h" #include "interface.h" #include "project.h" #include "curve.h" void save_to_file_ (int *, char *, int *, double *, double *, int *, int *, int *, double *, int *, int *, int *, int *, int *, char *); void prep_file_ (int *, char *, int *, int *, int *, int *, double *, int *, int *); void append_to_file_ (int *, double *, double *, double *, int *, int *, int *, int *, int *, int *, int *, int *, char *); GtkFileFilter * filter1, * filter2; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_write_curve (GtkNativeDialog * info, gint response_id, gpointer data) \brief save curve data - running the dialog GTK4 \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_write_curve (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_write_curve (GtkDialog * info, gint response_id, gpointer data) \brief save curve data - running the dialog GTK3 \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_write_curve (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif int a, b, c, i, j, k, l, m, n, o, p, q; tint * cd = (tint *)data; Curve * this_curve = get_curve_from_pointer (data); a = cd -> a; b = cd -> b; c = cd -> c; if (response_id == GTK_RESPONSE_ACCEPT) { project * this_proj = get_project_by_id(a); double delta = this_proj -> analysis[b] -> delta; this_curve -> cfile = file_chooser_get_file_name (chooser); GtkFileFilter * tmp = gtk_file_chooser_get_filter (chooser); if (tmp == filter1) { l = 0; } else if (tmp == filter2) { l = 1; } k = strlen (this_curve -> cfile); j = strlen (this_curve -> title); // Get n if (this_curve -> extrac -> extras == 0) { m = activep; active_project_changed (a); save_to_file_ (& k, this_curve -> cfile, & this_curve -> ndata, this_curve -> data[0], this_curve -> data[1], & this_curve -> scale[0], & this_curve -> scale[1], & this_curve -> layout -> aspect, & delta, & b, & c, & this_proj -> nspec, & l, & j, this_curve -> title); active_project_changed (m); } else { p = this_curve -> extrac -> extras + 1; m = 0; prep_file_ (& k, this_curve -> cfile, & this_proj -> nspec, & l, & this_curve -> scale[0], & this_curve -> scale[1], & delta, & b, & c); append_to_file_ (& this_curve -> ndata, this_curve -> data[0], this_curve -> data[1], & delta, & this_curve -> layout -> aspect, & b, & c, & this_proj -> nspec, & l, & m, & p, & j, this_curve -> title); j = this_curve -> extrac -> extras; CurveExtra * ctmp = this_curve -> extrac -> first; for (i=0 ; i < j ; i++ ) { m = m + 1; q = ctmp -> id.a; o = ctmp -> id.b; n = ctmp -> id.c; this_proj = get_project_by_id(q); j = strlen (this_proj -> analysis[o] -> curves[n] -> title); append_to_file_ (& this_proj -> analysis[o] -> curves[n] -> ndata, this_proj -> analysis[o] -> curves[n] -> data[0], this_proj -> analysis[o] -> curves[n] -> data[1], & this_proj -> analysis[o] -> delta, & ctmp -> layout -> aspect, & o, & n, & this_proj -> nspec, & l, & m, & p, & j, this_proj -> analysis[o] -> curves[n] -> title); if (ctmp -> next) ctmp = ctmp -> next; } } } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } /*! \fn void write_curve (gpointer idata) \brief save curve data - creating the dialog \param idata the associated data pointer */ void write_curve (gpointer idata) { #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif Curve * this_curve = get_curve_from_pointer (idata); info = create_file_chooser (_("Save Data"), GTK_WINDOW(this_curve -> window), GTK_FILE_CHOOSER_ACTION_SAVE, _("Save")); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif filter1 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter1), _("Xmgrace file (*.agr)")); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter1), "*.agr"); gtk_file_chooser_add_filter (chooser, filter1); filter2 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter2), _("x/y ASCII file (*.dat)")); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter2), "*.dat"); gtk_file_chooser_add_filter (chooser, filter2); if (this_curve -> cfile != NULL) { if (! file_chooser_set_file_name (chooser, this_curve -> cfile)) goto end; } else { file_chooser_set_current_folder (chooser); gtk_file_chooser_set_current_name (chooser, this_curve -> name); } #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_write_curve), idata); #else run_this_gtk_dialog (info, G_CALLBACK(run_write_curve), idata); #endif end:; } atomes_1.3.1/src/curve/tab-1.c0000664000175000017500000006143415212624223015500 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file tab-1.c * @short 1st tab of the curve layout edition dialog * @author Sébastien Le Roux */ /* * This file: 'tab-1.c' * * Contains: * - The 1st tab of the curve layout edition dialog * * List of functions: void set_frame_style (gpointer data); G_MODULE_EXPORT void set_window_size (GtkEntry * maj, gpointer data); G_MODULE_EXPORT void set_title (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_title (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_title_default (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_title_default (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_title_custom (GtkEntry * tit, gpointer data); G_MODULE_EXPORT void set_title_font (GtkFontButton * fontb, gpointer data); G_MODULE_EXPORT void set_title_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_title_pos (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_show_frame (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_show_frame (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_background_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_frame_type (GtkComboBox * fbox, gpointer data); G_MODULE_EXPORT void set_frame_line (GtkComboBox * fbox, gpointer data); G_MODULE_EXPORT void set_frame_thickness (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_frame_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_frame_pos (GtkEntry * fen, gpointer data); cairo_surface_t * draw_frame_surface (int tf, int da, double ti, double x[2], double y[2], ColRGBA dcol, ColRGBA bcol); GtkWidget * create_tab_1 (gpointer data); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" extern void set_data_style (gpointer data); char * ctext[2] = {"x ∈ [0.0, 1.0]", "y ∈ [0.0, 1.0]"}; /*! \fn G_MODULE_EXPORT void set_window_size (GtkEntry * maj, gpointer data) \brief change window size entry callback \param maj the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_window_size (GtkEntry * maj, gpointer data) { const gchar *m; char * text[2]; int i; qint * ad = (qint *)data; Curve * this_curve = get_project_by_id (ad -> a) -> analysis[ad -> b] -> curves[ad -> c]; int shift = get_curve_shift (this_curve); text[0] = i18n("X size must be > 0"); text[1] = i18n("Y size must be > 0"); m = entry_get_text (maj); i = string_to_double ((gpointer)m); if (i > 0) { switch (ad -> d) { case 0: resize_this_window (this_curve -> window, i, this_curve -> wsize[1] + shift); break; case 1: resize_this_window (this_curve -> window, this_curve -> wsize[0], i + shift); break; } this_curve -> wsize[ad -> d] = i; } else { show_warning (_(text[ad -> d]), this_curve -> window); } update_entry_int (maj, this_curve -> wsize[ad -> d]); } /*! \fn cairo_surface_t * draw_frame_surface (int tf, int da, double ti, double x[2], double y[2], ColRGBA dcol, ColRGBA bcol) \brief draw frame preview \param tf frame type \param da frame dash \param ti frame thickness \param x x positions (min / max) \param y y positions (min / max) \param dcol frame color \param bcol background color */ cairo_surface_t * draw_frame_surface (int tf, int da, double ti, double x[2], double y[2], ColRGBA dcol, ColRGBA bcol) { cairo_surface_t * cst; cairo_t * tcst; int r[2]; r[0] = 100; r[1] = 100; cst = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 100, 100); tcst = cairo_create (cst); cairo_set_source_rgb (tcst, bcol.red, bcol.green, bcol.blue); cairo_paint (tcst); show_frame (tcst, tf, da, r, ti, x, y, dcol); cairo_destroy (tcst); return cst; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_title (GtkCheckButton * but, gpointer data) \brief show / hide title toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_title (GtkToggleButton * but, gpointer data) \brief show / hide title toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title (GtkToggleButton * but, gpointer data) #endif { Curve * this_curve = get_curve_from_pointer (data); this_curve -> show_title = button_get_status ((GtkWidget *)but); widget_set_sensitive (this_curve -> curve_edit -> title_box, this_curve -> show_title); update_curve (data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_title_default (GtkCheckButton * but, gpointer data) \brief use / not default title toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title_default (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_title_default (GtkToggleButton * but, gpointer data) \brief use / not default title toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title_default (GtkToggleButton * but, gpointer data) #endif { Curve * this_curve = get_curve_from_pointer (data); this_curve -> default_title = button_get_status ((GtkWidget *)but); widget_set_sensitive (this_curve -> curve_edit -> custom_title, ! this_curve -> default_title); if (this_curve -> default_title) { g_free (this_curve -> title); this_curve -> title = g_strdup_printf ("%s - %s", prepare_for_title(get_project_by_id(((tint *)data) -> a) -> name), this_curve -> name); } update_entry_text (GTK_ENTRY(this_curve -> curve_edit -> custom_title), this_curve -> title); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_title_custom (GtkEntry * tit, gpointer data) \brief set custom title entry callback \param tit the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title_custom (GtkEntry * tit, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); g_free (this_curve -> title); this_curve -> title = g_strdup_printf ("%s", entry_get_text (tit)); update_entry_text (tit, this_curve -> title); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_title_font (GtkFontButton * fontb, gpointer data) \brief set title font \param fontb the GtkFontButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title_font (GtkFontButton * fontb, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); g_free (this_curve -> title_font); this_curve -> title_font = g_strdup_printf ("%s", gtk_font_chooser_get_font (GTK_FONT_CHOOSER(fontb))); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_title_color (GtkColorChooser * colob, gpointer data) \brief set title color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title_color (GtkColorChooser * colob, gpointer data) { get_curve_from_pointer (data) -> title_color = get_button_color (colob); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_title_pos (GtkEntry * entry, gpointer data) \brief set axis title position entry callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title_pos (GtkEntry * entry, gpointer data) { const gchar * p; double v; qint * ad = (qint *)data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; Curve * this_curve = get_curve_from_pointer ((gpointer)& cd); p = entry_get_text (entry); v = string_to_double ((gpointer)p); if (v >= 0.0 && v <= 1.0) { this_curve -> title_pos[ad -> d] = v; } else { show_warning (ctext[ad -> d], this_curve -> window); } update_entry_double (entry, this_curve -> title_pos[ad -> d]); update_curve ((gpointer)& cd); } /*! \fn void set_frame_style (gpointer data) \brief create frame preview \param data the associated data pointer */ void set_frame_style (gpointer data) { cairo_surface_t * surf; Curve * this_curve = get_curve_from_pointer (data); surf = draw_frame_surface (this_curve -> frame_type, this_curve -> frame_dash, this_curve -> frame_thickness, this_curve -> frame_pos[0], this_curve -> frame_pos[1], this_curve -> frame_color, this_curve -> backcolor); this_curve -> curve_edit -> frame_style_area = destroy_this_widget (this_curve -> curve_edit -> frame_style_area); this_curve -> curve_edit -> frame_style_area = create_image_from_data (IMG_SURFACE, (gpointer)surf); cairo_surface_destroy (surf); widget_set_sensitive (this_curve -> curve_edit -> frame_style_area, this_curve -> show_frame); show_the_widgets (this_curve -> curve_edit -> frame_style_area); #ifdef GTK4 gtk_widget_set_hexpand (this_curve -> curve_edit -> frame_style_area, TRUE); #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, this_curve -> curve_edit -> frame_pix_box, this_curve -> curve_edit -> frame_style_area, TRUE, TRUE, 20); update_curve (data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_show_frame (GtkCheckButton * but, gpointer data) \brief show / hide frame toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_frame (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_show_frame (GtkToggleButton * but, gpointer data) \brief show / hide frame toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_frame (GtkToggleButton * but, gpointer data) #endif { Curve * this_curve = get_curve_from_pointer (data); this_curve -> show_frame = button_get_status ((GtkWidget *)but); widget_set_sensitive (this_curve -> curve_edit -> frame_box, this_curve -> show_frame); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_background_color (GtkColorChooser * colob, gpointer data) \brief change background color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_background_color (GtkColorChooser * colob, gpointer data) { get_curve_from_pointer (data) -> backcolor = get_button_color (colob); set_data_style (data); } /*! \fn G_MODULE_EXPORT void set_frame_type (GtkComboBox * fbox, gpointer data) \brief change frame type \param fbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_frame_type (GtkComboBox * fbox, gpointer data) { get_curve_from_pointer (data) -> frame_type = combo_get_active ((GtkWidget *)fbox); set_frame_style (data); } /*! \fn G_MODULE_EXPORT void set_frame_line (GtkComboBox * fbox, gpointer data) \brief change frame line type \param fbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_frame_line (GtkComboBox * fbox, gpointer data) { get_curve_from_pointer (data) -> frame_dash = combo_get_active ((GtkWidget *)fbox) + 1; set_frame_style (data); } /*! \fn G_MODULE_EXPORT void set_frame_thickness (GtkEntry * entry, gpointer data) \brief set frame thickness entry callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_frame_thickness (GtkEntry * entry, gpointer data) { const gchar * str; str = entry_get_text (entry); Curve * this_curve = get_curve_from_pointer (data); this_curve -> frame_thickness = string_to_double ((gpointer)str); update_entry_double (entry, this_curve -> frame_thickness); set_frame_style (data); } /*! \fn G_MODULE_EXPORT void set_frame_color (GtkColorChooser * colob, gpointer data) \brief set frame color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_frame_color (GtkColorChooser * colob, gpointer data) { get_curve_from_pointer (data) -> frame_color = get_button_color (colob); set_frame_style (data); } /*! \fn G_MODULE_EXPORT void set_frame_pos (GtkEntry * fen, gpointer data) \brief set frame position entry callback \param fen the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_frame_pos (GtkEntry * fen, gpointer data) { qint * cd = (qint *)data; int k; const gchar * m; double z; Curve * this_curve = get_curve_from_pointer (data); m = entry_get_text (fen); z = string_to_double ((gpointer)m); if (cd -> d < 2) { if (cd -> d == 0) { k = 0; if (z < this_curve -> frame_pos[0][1]) { this_curve -> frame_pos[0][0] = z; } else { show_warning (_("Frame x min must be < to frame x max"), this_curve -> window); } } else if (cd -> d == 1) { k = 1; if (z > this_curve -> frame_pos[0][0]) { this_curve -> frame_pos[0][1] = z; } else { show_warning (_("Frame x max must be > to frame x min"), this_curve -> window); } } update_entry_double (fen, this_curve -> frame_pos[0][k]); } else { if (cd -> d == 2) { k = 0; if (z > this_curve -> frame_pos[1][1]) { this_curve -> frame_pos[1][0] = z; } else { show_warning (_("Frame y min must be > to frame y max"), this_curve -> window); } } else { k = 1; if (z < this_curve -> frame_pos[1][0]) { this_curve -> frame_pos[1][1] = z; } else { show_warning (_("Frame y max must be < to frame y min"), this_curve -> window); } } update_entry_double (fen, this_curve -> frame_pos[1][k]); } set_frame_style (data); } /*! \fn GtkWidget * create_tab_1 (curve_edition * cedit, gpointer data) \brief handle the creation of the 1st tab of the curve edition dialog \param cedit the target curve_edition pointer \param data the associated data pointer */ GtkWidget * create_tab_1 (curve_edition * cedit, gpointer data) { GtkWidget * graphbox; GtkWidget * fbox; GtkWidget * ghbox; GtkWidget * gvbox; GtkWidget * frame_style_box; GtkWidget * frame_thickness; GtkWidget * xyf; gchar * str[2]; str[0] = "min"; str[1] = "max"; gchar * axl[2]; axl[0] = "x"; axl[1] = "y"; gchar * ftb[5] = {i18n("Closed"), i18n("Top Open"), i18n("Right Open"), i18n("Left Open"), i18n("Open ")}; int xlgt, ylgt; int i, j, k; Curve * this_curve = get_curve_from_pointer (data); // Axis related signals for ( i=0 ; i < 2 ; i++ ) { cedit -> dataxe[i].a = ((tint *)data) -> a; cedit -> dataxe[i].b = ((tint *)data) -> b; cedit -> dataxe[i].c = ((tint *)data) -> c; cedit -> dataxe[i].d = i; cedit -> xyp[i] = create_entry (G_CALLBACK(set_window_size), 100, 10, FALSE, (gpointer)& cedit -> dataxe[i]); } graphbox = create_vbox (BSEP); ghbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, ghbox, FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, markup_label(_("Size:"), 50, 35, 1.0, 0.5), FALSE, FALSE, 20); xlgt = get_widget_width (this_curve -> plot); ylgt = get_widget_height (this_curve -> plot); update_entry_int (GTK_ENTRY(cedit -> xyp[0]), xlgt); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, cedit -> xyp[0], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, markup_label("x", -1, -1, 0.5, 0.5), FALSE, FALSE, 10); update_entry_int (GTK_ENTRY(cedit -> xyp[1]), ylgt); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, cedit -> xyp[1], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, markup_label(_("pixels"), -1, -1, 0.0, 0.5), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, check_button (_("Insert title"), -1, -1, this_curve -> show_title, G_CALLBACK(set_title), data), FALSE, FALSE, 10); cedit -> title_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, cedit -> title_box, FALSE, FALSE, 0); ghbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cedit -> title_box, ghbox, FALSE, FALSE, 2); gvbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, gvbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, gvbox, check_button (_("Default title"), 100, 35, this_curve -> default_title, G_CALLBACK(set_title_default), data), FALSE, FALSE, 40); cedit -> custom_title = create_entry (G_CALLBACK(set_title_custom), 200, 15, TRUE, data); gtk_entry_set_alignment (GTK_ENTRY(cedit -> custom_title), 0.0); if (this_curve -> show_title) { widget_set_sensitive (cedit -> custom_title, ! this_curve -> default_title); } else { widget_set_sensitive (cedit -> custom_title, 0); } update_entry_text (GTK_ENTRY(cedit -> custom_title), this_curve -> title); add_box_child_end (gvbox, cedit -> custom_title, FALSE, FALSE, 0); add_box_child_end (bbox (cedit -> title_box, _("Font:")), font_button (this_curve -> title_font, 150, 35, G_CALLBACK(set_title_font), data), FALSE, FALSE, 0); add_box_child_end (bbox (cedit -> title_box, _("Color:")), color_button (this_curve -> title_color, TRUE, 150, 30, G_CALLBACK(set_title_color), data), FALSE, FALSE, 0); ghbox = bbox (cedit -> title_box, _("Position:")); GtkWidget * txyc; for ( i=0 ; i < 2 ; i++ ) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, markup_label(lapos[i], (i==0)?10:30, -1, 1.0, 0.5), FALSE, FALSE, 5); txyc = create_entry (G_CALLBACK(set_title_pos), 100, 10, FALSE, (gpointer)& cedit -> dataxe[i]); update_entry_double (GTK_ENTRY(txyc), this_curve -> title_pos[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, txyc, FALSE, FALSE, 5); } widget_set_sensitive (cedit -> title_box, this_curve -> show_title); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 10); ghbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, ghbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, markup_label(_("Background color:"), 120, 30, 0.0, 0.5), FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, color_button (this_curve -> backcolor, TRUE, 100, -1, G_CALLBACK(set_background_color), data), FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 10); // Frame add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, check_button (_("Show/Hide frame"), -1, -1, this_curve -> show_frame, G_CALLBACK(set_show_frame), data), FALSE, FALSE, 10); cedit -> frame_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, cedit -> frame_box, FALSE, FALSE, 0); cedit -> frame_pix_box = create_hbox (0); frame_style_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, cedit -> frame_box, cedit -> frame_pix_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> frame_pix_box, frame_style_box, FALSE, FALSE, 0); // Frame style fbox = create_combo (); for (i=0; i<5; i++) { combo_text_append (fbox, _(ftb[i])); } gtk_widget_set_size_request (fbox, 150, 30); combo_set_active (fbox, this_curve -> frame_type); g_signal_connect (G_OBJECT(fbox), "changed", G_CALLBACK(set_frame_type), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (frame_style_box, _("Type:")), fbox, FALSE, FALSE, 0); // Frame line style fbox = create_combo (); for ( i=1 ; i < ndash ; i++) { combo_text_append (fbox, g_strdup_printf("%d", i)); } gtk_widget_set_size_request (fbox, 150, 30); combo_set_active (fbox, this_curve -> frame_dash - 1); g_signal_connect (G_OBJECT(fbox), "changed", G_CALLBACK(set_frame_line), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (frame_style_box, _("Line style:")), fbox, FALSE, FALSE, 0); // Frame line width frame_thickness = create_entry (G_CALLBACK(set_frame_thickness), -1, 10, FALSE, data); update_entry_double (GTK_ENTRY(frame_thickness), this_curve -> frame_thickness); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (frame_style_box, _("Line width:")), frame_thickness, FALSE, FALSE, 0); // Frame color add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (frame_style_box, _("Color:")), color_button (this_curve -> frame_color, TRUE, 150, 30, G_CALLBACK(set_frame_color), data), FALSE, FALSE, 0); // Frame pix cairo_surface_t * frame = draw_frame_surface (this_curve -> frame_type, this_curve -> frame_dash, this_curve -> frame_thickness, this_curve -> frame_pos[0], this_curve -> frame_pos[1], this_curve -> frame_color, this_curve -> backcolor); cedit -> frame_style_area = create_image_from_data (IMG_SURFACE, (gpointer)frame); cairo_surface_destroy (frame); gtk_widget_set_size_request (cedit -> frame_pix_box, -1, 150); #ifdef GTK4 add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> frame_pix_box, markup_label(" ", 20, -1, 0.0, 0.0), FALSE, FALSE, 0); gtk_widget_set_hexpand (cedit -> frame_style_area, TRUE); #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> frame_pix_box, cedit -> frame_style_area, FALSE, FALSE, 20); bbox (cedit -> frame_box, _("Position: ")); GtkWidget * fxyc; k = -1; for (i=0; i<2; i++) { ghbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cedit -> frame_box, ghbox, FALSE, FALSE, 0); for (j=0; j<2; j++) { k = k + 1; cedit -> framxe[k].a = ((tint *)data) -> a; cedit -> framxe[k].b = ((tint *)data) -> b; cedit -> framxe[k].c = ((tint *)data) -> c; cedit -> framxe[k].d = k; xyf = markup_label (g_strdup_printf ("%s %s: ",axl[i], str[j]), 70, -1, 1.0, 0.5); widget_set_sensitive (xyf, this_curve -> show_frame); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, xyf, FALSE, FALSE, 20); fxyc = create_entry (G_CALLBACK(set_frame_pos), 100, 10, FALSE, (gpointer)& cedit -> framxe[k]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, fxyc, FALSE, FALSE, 0); update_entry_double (GTK_ENTRY(fxyc), this_curve -> frame_pos[i][j]); } } widget_set_sensitive (cedit -> frame_box, this_curve -> show_frame); return graphbox; } atomes_1.3.1/src/curve/labels.c0000664000175000017500000000560315212624223016032 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file labels.c * @short Function to draw the axis labels * @author Sébastien Le Roux */ /* * This file: 'labels.c' * * Contains: * - Function to draw the axis labels * * List of functions: void label_curve (cairo_t * cr, double val, int axe, int p, project * this_proj); */ #include #include #include #include #include "global.h" #include "curve.h" /*! \fn void label_curve (cairo_t * cr, double val, int axe, int p, Curve * this_curve) \brief draw axis label \param cr the cairo drawing context to use for the draw \param val the value to display \param axe axis (0 = x, 1 = y) \param p label position (0 = bottom, 1 = top) \param this_curve the target curve */ void label_curve (cairo_t * cr, double val, int axe, int p, Curve * this_curve) { gchar * label; gchar * lab; gchar * tmp; int i, j; double u, v; lab = g_strdup_printf ("%.10lf", val); for (i=0; i < strlen(lab); i++) { tmp = g_strdup_printf ("%c", lab[i]); if (g_strcmp0 ((char *)tmp, ".") == 0) j = i; g_free (tmp); } for (i=0; i < j + this_curve -> labels_digit[axe] + 1; i++) { if (i == 0) { label = g_strdup_printf ("%c", lab[i]); } else { tmp = g_strdup_printf ("%s%c", label, lab[i]); g_free (label); label = g_strdup_printf ("%s", tmp); g_free (tmp); } } pango_layout_set_markup (layout, label, -1); if (p == 1) { pango_layout_get_size (layout, & i, & j); if (axe == 0) { u = sin (this_curve -> labels_angle[axe]) * (double)i; v = sin (pi / 2.0 - this_curve -> labels_angle[axe]) * (double)j; ay = ay - (u + v)/PANGO_SCALE; } else { u = sqrt (1.0*i*i + 1.0*j*j); v = atan ((1.0*j) / (1.0*i)); u = u * cos (this_curve -> labels_angle[axe] + v); ax = ax - u / PANGO_SCALE; } } cairo_move_to (cr, ax, ay); cairo_rotate (cr, this_curve -> labels_angle[axe]); pango_cairo_update_layout (cr, layout); pango_cairo_show_layout (cr, layout); cairo_stroke (cr); cairo_rotate (cr, -this_curve -> labels_angle[axe]); pango_cairo_update_layout (cr, layout); } atomes_1.3.1/src/curve/tab-2.c0000664000175000017500000010272315212624223015476 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file tab-2.c * @short 2nd tab of the curve layout edition dialog * @author Sébastien Le Roux */ /* * This file: 'tab-2.c' * * Contains: * - The 2nd tab of the curve layout edition dialog * * List of functions: void set_data_style (gpointer data); static void fill_org_model (GtkListStore * store, gpointer data); G_MODULE_EXPORT void set_data_glyph (GtkComboBox * gbox, gpointer data); G_MODULE_EXPORT void set_data_dash (GtkComboBox * gbox, gpointer data); G_MODULE_EXPORT void set_data_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_data_thickness (GtkEntry * thickd, gpointer data); G_MODULE_EXPORT void set_data_glyph_size (GtkEntry * glsize, gpointer data); G_MODULE_EXPORT void set_data_hist_width (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_data_hist_opac (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_data_hist_pos (GtkComboBox * gbox, gpointer data); G_MODULE_EXPORT void set_data_glyph_freq (GtkEntry * glfreq, gpointer data); G_MODULE_EXPORT void choose_set (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_data_aspect (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void move_back_front (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data); G_MODULE_EXPORT void set_bshift (GtkCheckButton * shift, gpointer data); G_MODULE_EXPORT void set_bshift (GtkToggleButton * shift, gpointer data); GtkWidget * create_org_list (gpointer data); GtkWidget * create_tab_2 (gpointer data); DataLayout * get_extra_layout (gpointer data, int i); DataLayout * duplicate_curve_layout (DataLayout * old_layout); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" GtkTreeModel * orgmodel; /*! \fn cairo_surface_t * draw_surface (int aspect, double hwidth, double hopac, int da, double ti, ColRGBA dcol, ColRGBA bcol, int tglyph, double tgsize) \brief draw the data set preview \param aspect the data aspect (x/y or bars) \param hwidth the histogram bar width \param hopac the histogram bar opacity \param da the dash type \param ti the thickness \param dcol the data color \param bcol the background color \param tglyph the glyphe type \param tgsize the glyph size */ cairo_surface_t * draw_surface (int aspect, double hwidth, double hopac, int da, double ti, ColRGBA dcol, ColRGBA bcol, int tglyph, double tgsize) { cairo_surface_t * cst; cairo_t * tcst; curve_dash * tdash; double x, y; double x1, x2, y1, y2; switch (aspect) { case 1: cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 100, 100); tcst = cairo_create(cst); cairo_set_source_rgb (tcst, bcol.red, bcol.green, bcol.blue); cairo_paint (tcst); cairo_stroke (tcst); cairo_set_source_rgba (tcst, dcol.red, dcol.green, dcol.blue, hopac); x1 = (100.0-hwidth*50.0)/2.0; x2 = hwidth*50.0; y1 = 15.0; y2 = 70.0; cairo_rectangle (tcst, x1, y1, x2, y2); cairo_fill (tcst); cairo_set_source_rgba (tcst, dcol.red, dcol.green, dcol.blue, 1.0); cairo_stroke (tcst); if (da > 0) { tdash = selectdash (da); cairo_set_dash (tcst, tdash -> a, tdash -> b, 0); cairo_set_line_width (tcst, ti); x2 += x1; y2 = 100 - y1; cairo_move_to (tcst, x1, y2); cairo_line_to (tcst, x1, y1); cairo_move_to (tcst, x1, y1); cairo_line_to (tcst, x2, y1); cairo_move_to (tcst, x2, y1); cairo_line_to (tcst, x2, y2); cairo_stroke (tcst); g_free (tdash); } break; default: cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 100, 30); tcst = cairo_create(cst); cairo_set_source_rgb (tcst, bcol.red, bcol.green, bcol.blue); cairo_paint (tcst); cairo_stroke (tcst); if (da > 0) { tdash = selectdash (da); cairo_set_dash (tcst, tdash -> a, tdash -> b, 0); cairo_set_source_rgb (tcst, dcol.red, dcol.green, dcol.blue); cairo_set_line_width (tcst, ti); cairo_move_to (tcst, 0, 15); cairo_line_to (tcst, 100, 15); cairo_stroke (tcst); g_free (tdash); } x = 25.0; y = 15.0; draw_glyph (tcst, tglyph, x, y, dcol, tgsize); x = 75.0; draw_glyph (tcst, tglyph, x, y, dcol, tgsize); break; } cairo_destroy (tcst); return cst; } /*! \fn DataLayout * get_extra_layout (gpointer data, int i) \brief retrieve the i data layout \param data the target data pointer \param i the id of data layout to retrieve */ DataLayout * get_extra_layout (gpointer data, int i) { int j; CurveExtra * ctmp = get_curve_from_pointer (data) -> extrac -> first; for (j=0; j next; } return ctmp -> layout; } /*! \fn void set_data_style (gpointer data) \brief update the data style widgets \param data the associated data pointer */ void set_data_style (gpointer data) { int i; cairo_surface_t * pix; Curve * this_curve = get_curve_from_pointer (data); i = combo_get_active (this_curve -> curve_edit -> setcolorbox); DataLayout * layout; if (i > 0) { layout = get_extra_layout (data, i-1); } else { layout = this_curve -> layout; } pix = draw_surface (layout -> aspect, layout -> hwidth, layout -> hopac, layout -> dash, layout -> thickness, layout -> datacolor, this_curve -> backcolor, layout -> glyph, layout -> gsize); this_curve -> curve_edit -> stylearea = destroy_this_widget (this_curve -> curve_edit -> stylearea); this_curve -> curve_edit -> stylearea = create_image_from_data (IMG_SURFACE, pix); cairo_surface_destroy (pix); show_the_widgets (this_curve -> curve_edit -> stylearea); #ifdef GTK4 gtk_widget_set_hexpand (this_curve -> curve_edit -> stylearea, TRUE); #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, this_curve -> curve_edit -> pixarea, this_curve -> curve_edit -> stylearea, TRUE, TRUE, 0); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_data_glyph (GtkComboBox * gbox, gpointer data) \brief change glyph type \param gbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_glyph (GtkComboBox * gbox, gpointer data) { int i, j; curve_edition * cedit = get_curve_from_pointer(data) -> curve_edit; i = combo_get_active (cedit -> setcolorbox); j = combo_get_active ((GtkWidget *)gbox); if (i > 0) { get_extra_layout (data, i-1) -> glyph = j; } else { get_curve_from_pointer (data) -> layout -> glyph = j; } if (j == 0) { widget_set_sensitive (cedit -> data_glyph_size, 0); widget_set_sensitive (cedit -> data_glyph_freq, 0); } else { widget_set_sensitive (cedit -> data_glyph_size, 1); widget_set_sensitive (cedit -> data_glyph_freq, 1); } set_data_style (data); } /*! \fn G_MODULE_EXPORT void set_data_dash (GtkComboBox * gbox, gpointer data) \brief change data dash style \param gbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_dash (GtkComboBox * gbox, gpointer data) { int i, j; curve_edition * cedit = get_curve_from_pointer(data) -> curve_edit; i = combo_get_active (cedit -> setcolorbox); j = combo_get_active ((GtkWidget *)gbox); if (i > 0) { get_extra_layout (data, i-1) -> dash = j; } else { get_curve_from_pointer (data) -> layout -> dash = j; } if (j == 0) { widget_set_sensitive (cedit -> data_thickness, 0); } else { widget_set_sensitive (cedit -> data_thickness, 1); } set_data_style (data); } /*! \fn G_MODULE_EXPORT void set_data_color (GtkColorChooser * colob, gpointer data) \brief set data color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_color (GtkColorChooser * colob, gpointer data) { int i; i = combo_get_active (get_curve_from_pointer(data) -> curve_edit -> setcolorbox); if (i > 0) { get_extra_layout (data, i-1) -> datacolor = get_button_color (colob); } else { get_curve_from_pointer (data) -> layout -> datacolor = get_button_color (colob); } set_data_style (data); } /*! \fn G_MODULE_EXPORT void set_data_thickness (GtkEntry * thickd, gpointer data) \brief set data thickness entry callback \param thickd the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_thickness (GtkEntry * thickd, gpointer data) { int i; double k; const gchar * wid; Curve * this_curve = get_curve_from_pointer (data); wid = entry_get_text (thickd); k = string_to_double ((gpointer)wid); i = combo_get_active (this_curve -> curve_edit -> setcolorbox); if (k > 0.0) { if (i > 0) { get_extra_layout (data, i-1) -> thickness = k; } else { this_curve -> layout -> thickness = k; } update_entry_double (thickd, k); set_data_style (data); } else { show_warning (_("Line width must be > 0.0"), this_curve -> window); if (i > 0) { update_entry_double (thickd, get_extra_layout (data, i-1) -> thickness); } else { update_entry_double (thickd, this_curve -> layout -> thickness); } } } /*! \fn G_MODULE_EXPORT void set_data_glyph_size (GtkEntry * glsize, gpointer data) \brief set glyph size entry callback \param glsize the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_glyph_size (GtkEntry * glsize, gpointer data) { int i; double k; const gchar * wid; Curve * this_curve = get_curve_from_pointer (data); wid = entry_get_text (glsize); k = string_to_double ((gpointer)wid); i = combo_get_active (this_curve -> curve_edit -> setcolorbox); if (k > 0.0) { if (i > 0) { get_extra_layout (data, i-1) -> gsize = k; } else { this_curve -> layout -> gsize = k; } update_entry_double (glsize, k); set_data_style (data); } else { show_warning (_("Glyph size must be > 0.0"), this_curve -> window); if (i > 0) { update_entry_double (glsize, get_extra_layout (data, i-1) -> gsize); } else { update_entry_double (glsize, this_curve -> layout -> gsize); } } } /*! \fn G_MODULE_EXPORT void set_data_hist_width (GtkEntry * entry, gpointer data) \brief set histogram bar width entry callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_hist_width (GtkEntry * entry, gpointer data) { int i; double k; const gchar * wid; Curve * this_curve = get_curve_from_pointer (data); wid = entry_get_text (entry); k = string_to_double ((gpointer)wid); i = combo_get_active (this_curve -> curve_edit -> setcolorbox); if (k > 0.0) { if (i > 0) { get_extra_layout (data, i-1) -> hwidth = k; } else { this_curve -> layout -> hwidth = k; } update_entry_double (entry, k); set_data_style (data); } else { show_warning (_("Bar width must be > 0.0"), this_curve -> window); if (i > 0) { update_entry_double (entry, get_extra_layout (data, i-1) -> hwidth); } else { update_entry_double (entry, this_curve -> layout -> hwidth); } } } /*! \fn G_MODULE_EXPORT void set_data_hist_opac (GtkEntry * entry, gpointer data) \brief set histogram bar opacity entry callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_hist_opac (GtkEntry * entry, gpointer data) { int i; double k; const gchar * wid; Curve * this_curve = get_curve_from_pointer (data); wid = entry_get_text (entry); k = string_to_double ((gpointer)wid); i = combo_get_active (this_curve -> curve_edit -> setcolorbox); if (k >= 0.0 && k <= 1.0) { if (i > 0) { get_extra_layout (data, i-1) -> hopac = k; } else { this_curve -> layout -> hopac = k; } update_entry_double (entry, k); set_data_style (data); } else { show_warning (_("Bar opacity must ∈ [0.0 - 1.0]"), this_curve -> window); if (i > 0) { update_entry_double (entry, get_extra_layout (data, i-1) -> hopac); } else { update_entry_double (entry, this_curve -> layout -> hopac); } } } /*! \fn G_MODULE_EXPORT void set_data_hist_pos (GtkComboBox * gbox, gpointer data) \brief change histogram bar position \param gbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_hist_pos (GtkComboBox * gbox, gpointer data) { int i, j; i = combo_get_active (get_curve_from_pointer (data) -> curve_edit -> setcolorbox); j = combo_get_active ((GtkWidget *)gbox); if (i > 0) { get_extra_layout (data, i-1) -> hpos = j; } else { get_curve_from_pointer (data) -> layout -> hpos = j; } set_data_style (data); } /*! \fn G_MODULE_EXPORT void set_data_glyph_freq (GtkEntry * glfreq, gpointer data) \brief set glyph frequency entry callback \param glfreq the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_glyph_freq (GtkEntry * glfreq, gpointer data) { int i, j; const gchar * wid; wid = entry_get_text (glfreq); j = string_to_double ((gpointer)wid); Curve * this_curve = get_curve_from_pointer (data); i = combo_get_active (this_curve -> curve_edit -> setcolorbox); if (j > 0) { if (i > 0) { get_extra_layout (data, i-1) -> gfreq = j; } else { this_curve -> layout -> gfreq = j; } update_entry_int (glfreq, j); set_data_style (data); } else { show_warning (_("Glyph frequency must be > 0"), this_curve -> window); if (i > 0) { update_entry_int (glfreq, get_extra_layout (data, i-1) -> thickness); } else { update_entry_int (glfreq, this_curve -> layout -> gfreq); } } } /*! \fn G_MODULE_EXPORT void choose_set (GtkComboBox * box, gpointer data) \brief change the data set to customize \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void choose_set (GtkComboBox * box, gpointer data) { int i; i = combo_get_active ((GtkWidget *)box); DataLayout * layout; if (i > 0) { layout = get_extra_layout (data, i-1); } else { layout = get_curve_from_pointer (data) -> layout; } curve_edition * cedit = get_curve_from_pointer (data) -> curve_edit; GdkRGBA col = colrgba_togtkrgba (layout -> datacolor); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(cedit -> data_color), & col); combo_set_active (cedit -> data_dash, layout -> dash); update_entry_double (GTK_ENTRY(cedit -> data_thickness), layout -> thickness); combo_set_active (cedit -> data_glyph, layout -> glyph); update_entry_double (GTK_ENTRY(cedit -> data_glyph_size), layout -> gsize); update_entry_int (GTK_ENTRY(cedit -> data_glyph_freq), layout -> gfreq); update_entry_double (GTK_ENTRY(cedit -> data_hist_width), layout -> hwidth); update_entry_double (GTK_ENTRY(cedit -> data_hist_opac), layout -> hopac); combo_set_active (cedit -> data_hist_pos, layout -> hpos); combo_set_active (cedit -> data_aspect, layout -> aspect); set_data_style (data); } /*! \fn G_MODULE_EXPORT void set_data_aspect (GtkComboBox * box, gpointer data) \brief change data aspect (x/y or histogram bars) \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_aspect (GtkComboBox * box, gpointer data) { int i, j; curve_edition * cedit = get_curve_from_pointer (data) -> curve_edit; i = combo_get_active (cedit -> setcolorbox); j = combo_get_active ((GtkWidget *)box); if (j == 1) { combo_set_active (cedit -> data_glyph, 0); widget_set_sensitive (cedit -> data_glyph, 0); hide_the_widgets (cedit -> Glyph_box); show_the_widgets (cedit -> Hist_box); } else { widget_set_sensitive (cedit -> data_glyph, 1); hide_the_widgets (cedit -> Hist_box); show_the_widgets (cedit -> Glyph_box); } if (i > 0) { get_extra_layout (data, i-1) -> aspect = j; } else { get_curve_from_pointer (data) -> layout -> aspect = j; } set_data_style (data); update_curve (data); } /*! \fn static void fill_org_model (GtkListStore * store, gpointer data) \brief fill the data set list store \param store the data set list store to fill \param data the associated data pointer */ static void fill_org_model (GtkListStore * store, gpointer data) { GtkTreeIter curvelevel; int i, j, k, l; Curve * this_curve = get_curve_from_pointer (data); gchar * str; CurveExtra * ctmp; ctmp = this_curve -> extrac -> first; if (this_curve -> draw_id == this_curve -> extrac -> extras) { gtk_list_store_append (store, & curvelevel); str = g_strdup_printf ("%s - %s", get_project_by_id(((tint *)data) -> a) -> name, this_curve -> name); gtk_list_store_set (store, & curvelevel, 0, ((tint *)data) -> a, 1, ((tint *)data) -> b, 2, ((tint *)data) -> c, 3, str, -1); g_free (str); } i = this_curve -> extrac -> extras; while (ctmp) { gtk_list_store_append (store, & curvelevel); j = ctmp -> id.a; k = ctmp -> id.b; l = ctmp -> id.c; str = g_strdup_printf ("%s - %s", get_project_by_id(j) -> name, get_project_by_id(j) -> analysis[k] -> curves[l] -> name); gtk_list_store_set (store, & curvelevel, 0, j, 1, k, 2, l, 3, str, -1); g_free (str); i --; if (this_curve -> draw_id == i) { gtk_list_store_append (store, & curvelevel); str = g_strdup_printf ("%s - %s", get_project_by_id(((tint *)data) -> a) -> name, this_curve -> name); gtk_list_store_set (store, & curvelevel, 0, ((tint *)data) -> a, 1, ((tint *)data) -> b, 2, ((tint *)data) -> c, 3, str, -1); g_free (str); } ctmp = ctmp -> next; } } /*! \fn DataLayout * duplicate_curve_layout (DataLayout * old_layout) \brief duplicate a curve layout \param old_layout the layout to duplicate */ DataLayout * duplicate_curve_layout (DataLayout * old_layout) { DataLayout * new_layout = g_malloc0(sizeof*new_layout); new_layout -> datacolor.red = old_layout -> datacolor.red; new_layout -> datacolor.green = old_layout -> datacolor.green; new_layout -> datacolor.blue = old_layout -> datacolor.blue; new_layout -> datacolor.alpha = 1.0; new_layout -> thickness = old_layout -> thickness; new_layout -> hwidth = old_layout -> hwidth; new_layout -> hopac = old_layout -> hopac; new_layout -> hpos = old_layout -> hpos; new_layout -> dash = old_layout -> dash; new_layout -> gfreq = old_layout -> gfreq; new_layout -> aspect = old_layout -> aspect; new_layout -> glyph = old_layout -> glyph; new_layout -> gsize = old_layout -> gsize; return new_layout; } /*! \fn G_MODULE_EXPORT void move_back_front (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data) \brief move up or down data set in the tree model to move it front or back in the data plot \param tree_model the GtkTreeModel sending the signal \param path the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void move_back_front (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data) { tint * cid = (tint *) data; GtkTreeIter iter; gboolean valid; gboolean done; int i, j, k, l, m; tint cbid; CurveExtra * ctmpa = NULL; Curve * this_curve = get_curve_from_pointer (data); curve_edition * cedit = this_curve -> curve_edit; m = combo_get_active (cedit -> setcolorbox); if (m > 0) { ctmpa = this_curve -> extrac -> first; for (i=0; i next; cbid = ctmpa -> id; } l = this_curve -> extrac -> extras; valid = gtk_tree_model_get_iter_first (tree_model, & iter); CurveExtra * new_extra = NULL; CurveExtra * tmp_extra; while (valid) { gtk_tree_model_get (tree_model, & iter, 0, & i, 1, & j, 2, & k, -1); if (i == cid -> a && j == cid -> b && k == cid -> c) { // To set the draw order for the host curve this_curve -> draw_id = l; } else { l --; ctmpa = this_curve -> extrac -> first; done = FALSE; while (! done && ctmpa) { if (ctmpa -> id.a == i && ctmpa -> id.b == j && ctmpa -> id.c == k) { done = TRUE; } else { ctmpa = ctmpa -> next; done = FALSE; } } if (ctmpa) { if (new_extra == NULL) { new_extra = g_malloc0(sizeof*tmp_extra); tmp_extra = new_extra; } else { tmp_extra -> next = g_malloc0(sizeof*tmp_extra -> next); tmp_extra -> next -> prev = tmp_extra; tmp_extra = tmp_extra -> next; } tmp_extra -> id = ctmpa -> id; tmp_extra -> layout = duplicate_curve_layout (ctmpa -> layout); } } valid = gtk_tree_model_iter_next (tree_model, & iter); } ctmpa = this_curve -> extrac -> first -> next; while (ctmpa) { if (ctmpa -> prev) g_free (ctmpa -> prev); ctmpa = ctmpa -> next; } this_curve -> extrac -> first = new_extra; this_curve -> extrac -> last = tmp_extra; if (m > 0) { ctmpa = this_curve -> extrac -> first; m = 0; while (ctmpa) { if (cbid.a == ctmpa -> id.a && cbid.b == ctmpa -> id.b && cbid.c == ctmpa -> id.c) break; m ++; ctmpa = ctmpa -> next; } } cedit -> setcolorbox = destroy_this_widget (cedit -> setcolorbox); cedit -> setcolorbox = create_combo (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> thesetbox, cedit -> setcolorbox, FALSE, FALSE, 0); show_the_widgets (cedit -> setcolorbox); prepbox (data); combo_set_active (cedit -> setcolorbox, m); choose_set (GTK_COMBO_BOX(cedit -> setcolorbox), data); update_curve (data); } /*! \fn void curve_set_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief Curve edit window, tab-2, Pango markup in tree view \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void curve_set_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { set_renderer_markup (mod, iter, renderer, 3); } /*! \fn GtkWidget * create_org_list (gpointer data) \brief create the data set organisation widget \param data the associated data pointer */ GtkWidget * create_org_list (gpointer data) { int i; GtkTreeViewColumn * orgcol[4]; GtkCellRenderer * orgcell[4]; gchar * ctype[4] = {"text", "text", "text", "text"}; GType col_type[4] = {G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING}; GtkListStore * orglist = gtk_list_store_newv (4, col_type); orgmodel = GTK_TREE_MODEL(orglist); curve_edition * cedit = get_curve_from_pointer (data) -> curve_edit; cedit -> orgtree = gtk_tree_view_new_with_model(orgmodel); for (i=0; i<4; i++) { orgcell[i] = gtk_cell_renderer_text_new(); orgcol[i] = gtk_tree_view_column_new_with_attributes((i<3) ? " " : _("Data set(s)"), orgcell[i], ctype[i], i, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(cedit -> orgtree), orgcol[i]); if (i < 3) { gtk_tree_view_column_set_visible (orgcol[i], FALSE); } else { gtk_tree_view_column_set_cell_data_func (orgcol[i], orgcell[i], curve_set_markup, NULL, NULL); } } fill_org_model (orglist, data); g_object_unref (orglist); g_signal_connect (G_OBJECT(orgmodel), "row-deleted", G_CALLBACK(move_back_front), data); gtk_tree_view_expand_all (GTK_TREE_VIEW(cedit -> orgtree)); gtk_tree_view_set_activate_on_single_click (GTK_TREE_VIEW(cedit -> orgtree), TRUE); /* #ifdef GTK4 add_widget_gesture_and_key_action (cedit -> orgtree, "orgtree-pressed", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #endif */ gtk_tree_view_set_reorderable (GTK_TREE_VIEW(cedit -> orgtree), TRUE); return cedit -> orgtree; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_bshift (GtkCheckButton * shift, gpointer data) \brief shift / not histogram bars toggle callback GTK4 \param shift the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_bshift (GtkCheckButton * shift, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_bshift (GtkToggleButton * shift, gpointer data) \brief shift / not histogram bars toggle callback GTK3 \param shift the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_bshift (GtkToggleButton * shift, gpointer data) #endif { get_curve_from_pointer (data) -> bshift = button_get_status ((GtkWidget *)shift); update_curve (data); } /*! \fn GtkWidget * create_tab_2 (curve_edition * cedit, gpointer data) \brief handle the creation of the 2nd tab of the curve edition dialog \param cedit the target curve_edition pointer \param data the associated data pointer */ GtkWidget * create_tab_2 (curve_edition * cedit, gpointer data) { GtkWidget * dhbox; Curve * this_curve = get_curve_from_pointer (data); int i; GtkWidget * databox = create_vbox (BSEP); cedit -> thesetbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, cedit -> thesetbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> thesetbox, markup_label(_("Select set: "), -1, -1, 0.0, 0.5), FALSE, FALSE, 20); cedit -> setcolorbox = create_combo (); prepbox (data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> thesetbox, cedit -> setcolorbox, FALSE, FALSE, 10); cedit -> pixarea = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, cedit -> pixarea, FALSE, FALSE, 10); dhbox = create_vbox (BSEP); gtk_widget_set_size_request (dhbox, -1, 270); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> pixarea, dhbox, FALSE, FALSE, 0); cedit -> data_aspect = create_combo (); combo_text_append (cedit -> data_aspect, "x/y"); combo_text_append (cedit -> data_aspect, _("Bar")); combo_set_active (cedit -> data_aspect, this_curve -> layout -> aspect); gtk_widget_set_size_request (cedit -> data_aspect, 120, -1); g_signal_connect (G_OBJECT(cedit -> data_aspect), "changed", G_CALLBACK(set_data_aspect), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (dhbox, _("Plot type:")), cedit -> data_aspect, FALSE, FALSE, 0); if (((tint *)data) -> b == MSD) { widget_set_sensitive (cedit -> data_aspect, 0); } // Data color cedit -> data_color = color_button (this_curve -> layout -> datacolor, TRUE, 120, -1, G_CALLBACK(set_data_color), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (dhbox, _("Data color:")), cedit -> data_color, FALSE, FALSE, 0); // Line style cedit -> data_dash = create_combo (); combo_text_append (cedit -> data_dash, _("No Line")); for ( i=1 ; i < ndash ; i++) { combo_text_append (cedit -> data_dash, g_strdup_printf("%d", i)); } gtk_widget_set_size_request (cedit -> data_dash, 120, -1); combo_set_active (cedit -> data_dash, this_curve -> layout -> dash); g_signal_connect (G_OBJECT(cedit -> data_dash), "changed", G_CALLBACK(set_data_dash), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (dhbox, _("Line style:")), cedit -> data_dash, FALSE, FALSE, 0); // Line line width cedit -> data_thickness = create_entry (G_CALLBACK(set_data_thickness), 120, 10, FALSE, data); update_entry_double (GTK_ENTRY(cedit -> data_thickness), this_curve -> layout -> thickness); if (this_curve -> layout -> dash == 0) { widget_set_sensitive (cedit -> data_thickness, 0); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (dhbox, _("Line width:")), cedit -> data_thickness, FALSE, FALSE, 0); GtkWidget * data_shape = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, dhbox, data_shape, FALSE, FALSE, 0); cedit -> Glyph_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, data_shape, cedit -> Glyph_box, FALSE, FALSE, 0); // Glyph type cedit -> data_glyph = create_combo (); combo_text_append (cedit -> data_glyph, _("No Glyph")); for ( i=1 ; i < nglyph ; i++) { combo_text_append (cedit -> data_glyph, g_strdup_printf("%d", i)); } gtk_widget_set_size_request (cedit -> data_glyph, 120, -1); combo_set_active (cedit -> data_glyph, this_curve -> layout -> glyph); g_signal_connect (G_OBJECT(cedit -> data_glyph), "changed", G_CALLBACK(set_data_glyph), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (cedit -> Glyph_box, _("Glyph type:")), cedit -> data_glyph, FALSE, FALSE, 0); // Glyph size cedit -> data_glyph_size = create_entry (G_CALLBACK(set_data_glyph_size), 120, 10, FALSE, data); update_entry_double (GTK_ENTRY(cedit -> data_glyph_size), this_curve -> layout -> gsize); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (cedit -> Glyph_box, _("Glyph size:")), cedit -> data_glyph_size, FALSE, FALSE, 0); // Glyph frequency cedit -> data_glyph_freq = create_entry (G_CALLBACK(set_data_glyph_freq), 120, 10, FALSE, data); update_entry_int (GTK_ENTRY(cedit -> data_glyph_freq), this_curve -> layout -> gfreq); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (cedit -> Glyph_box, _("Glyph freq.:")), cedit -> data_glyph_freq, FALSE, FALSE, 0); if (this_curve -> layout -> glyph == 0) { widget_set_sensitive (cedit -> data_glyph_size, 0); widget_set_sensitive (cedit -> data_glyph_freq, 0); } cedit -> Hist_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, data_shape, cedit -> Hist_box, FALSE, FALSE, 0); // Histogram width cedit -> data_hist_width = create_entry (G_CALLBACK(set_data_hist_width), 120, 10, FALSE, data); update_entry_double (GTK_ENTRY(cedit -> data_hist_width), this_curve -> layout -> hwidth); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (cedit -> Hist_box, _("Bar width:")), cedit -> data_hist_width, FALSE, FALSE, 0); // Histogram opacity cedit -> data_hist_opac = create_entry (G_CALLBACK(set_data_hist_opac), 120, 10, FALSE, data); update_entry_double (GTK_ENTRY(cedit -> data_hist_opac), this_curve -> layout -> hopac); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (cedit -> Hist_box, _("Color opacity:")), cedit -> data_hist_opac, FALSE, FALSE, 0); cedit -> data_hist_pos = create_combo (); combo_text_append (cedit -> data_hist_pos, _("Transparent")); combo_text_append (cedit -> data_hist_pos, _("Plain")); gtk_widget_set_size_request (cedit -> data_hist_pos, 120, -1); combo_set_active (cedit -> data_hist_pos, this_curve -> layout -> hpos); g_signal_connect (G_OBJECT(cedit -> data_hist_pos), "changed", G_CALLBACK(set_data_hist_pos), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (cedit -> Hist_box, _("Bar opacity:")), cedit -> data_hist_pos, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 5); GtkWidget * hbox; if (((tint *)data) -> b != MSD) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Automatic x axis shift for bar diagram (to improve visibility)"), -1, -1, this_curve -> bshift, G_CALLBACK(set_bshift), data), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 5); } hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, hbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Layers organization: "), -1, -1, 0.0, 0.5), FALSE, FALSE, 20); GtkWidget * shbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, shbox, FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, shbox, hbox, FALSE, FALSE, 75); cedit -> datascroll = create_scroll (hbox, 350, 200, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, cedit -> datascroll, create_org_list(data)); widget_set_sensitive (cedit -> orgtree, this_curve -> extrac -> extras); #ifndef GTK4 gchar * str = _("\tMove up/down to adjust layer position (up to front, down to back)"); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 5); #endif return databox; } atomes_1.3.1/src/curve/cwidget.c0000664000175000017500000002053715212624223016221 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cwidget.c * @short Initialization of the curve widget * @author Sébastien Le Roux */ /* * This file: 'cwidget.c' * * Contains: * - The initialization of the curve widget * * List of functions: void curve_default_scale (project * this_proj, int rid, int cid, Curve * this_curve); void initcurve (project * pid, int rid, int cid); void init_curve_title (project * this_proj, int rid, int cid); void add_curve_widgets (project * this_proj, int rid); DataLayout * curve_default_layout (project * pid, int rid, int cid); */ #include #include #include "global.h" #include "interface.h" #include "curve.h" /*! \fn DataLayout * curve_default_layout (project * pid, int rid, int cid) \brief prepare the default layout for a curve \param pid the project id \param rid the analysis id \param cid the curve id */ DataLayout * curve_default_layout (project * pid, int rid, int cid) { DataLayout * layout = g_malloc0(sizeof*layout); layout -> datacolor.red = RED; layout -> datacolor.green = GREEN; layout -> datacolor.blue = BLUE; layout -> datacolor.alpha = 1.0; layout -> thickness = DTHICK; layout -> hwidth = (rid == SPH) ? 1.0 : pid -> analysis[rid] -> delta; layout -> hopac = 0.25; layout -> hpos = 1; layout -> dash = 1; layout -> gfreq = 1; if (rid < RIN) { layout -> aspect = 0; layout -> glyph = 0; layout -> gsize = 10; } else if (rid == RIN) { if ( cid%4 == 0 || cid%4 == 1 ) { layout -> aspect = 1; layout -> glyph = 0; layout -> gsize = 10; } else { layout -> aspect = 0; layout -> glyph = 13; layout -> gsize = 5.0; } } else if (rid < MSD) { layout -> aspect = 1; layout -> glyph = 0; layout -> gsize = 10; } else { layout -> aspect = 0; layout -> glyph = 0; layout -> gsize = 10; } return layout; } /*! \fn void curve_default_scale (project * this_proj, int rid, int cid, Curve * this_curve) \brief pick appropriate scale based on the type of analysis \param this_proj the target project \param rid analysis id \param cid curve id \param this_curve the target curve */ void curve_default_scale (project * this_proj, int rid, int cid, Curve * this_curve) { if (rid < RIN || rid == MSD || rid == SKT) { this_curve -> cmin[0] = this_proj -> analysis[rid] -> min; this_curve -> cmax[0] = this_proj -> analysis[rid] -> max; } else { this_curve -> cmin[0] = 1.0; this_curve -> cmax[0] = this_curve -> ndata; } if (rid != MSD) { this_curve -> scale[0] = 0; this_curve -> scale[1] = 0; } else { if (cid < active_project -> analysis[MSD] -> numc - 6 ) { this_curve -> scale[0] = 1; this_curve -> scale[1] = 1; } else { this_curve -> scale[0] = 0; this_curve -> scale[1] = 0; } } } /*! \fn void initcurve (project * pid, int rid, int cid) \brief initialize curve widget \param pid the target project \param rid the analysis id \param cid the curve id */ void initcurve (project * pid, int rid, int cid) { int k; Curve * this_curve = pid -> analysis[rid] -> curves[cid]; this_curve -> window = NULL; this_curve -> plot = NULL; this_curve -> wsize[0] = 800; this_curve -> wsize[1] = 600; this_curve -> show_title = FALSE; this_curve -> default_title = TRUE; this_curve -> title_font = g_strdup_printf ("Sans Bold 12"); this_curve -> title_pos[0] = 0.4; this_curve -> title_pos[1] = 0.05; this_curve -> title_color.red = 0.0; this_curve -> title_color.blue = 0.0; this_curve -> title_color.green = 0.0; this_curve -> title_color.alpha = 1.0; this_curve -> format = 0; for (k=0 ; k<2; k++) { if (this_curve -> data[k] != NULL) { g_free (this_curve -> data[k]); this_curve -> data[k] = NULL; } this_curve -> autoscale[k] = TRUE; this_curve -> show_grid[k] = FALSE; this_curve -> show_axis[k] = TRUE; this_curve -> labels_digit[k] = 1; this_curve -> ticks_io[k] = 0; this_curve -> labels_angle[k] = 0.0; this_curve -> labels_font[k] = g_strdup_printf ("Sans 12"); this_curve -> mint_size[k] = 5; this_curve -> majt_size[k] = 10; this_curve -> axis_defaut_title[k] = TRUE; this_curve -> axis_title_font[k] = g_strdup_printf ("Sans 12"); } if (this_curve -> err != NULL) { g_free (this_curve -> err); this_curve -> err = NULL; } this_curve -> labels_shift_x[0] = 10; this_curve -> labels_shift_y[0] = 20; this_curve -> labels_shift_x[1] = 50; this_curve -> labels_shift_y[1] = 10; this_curve -> axis_title_x[0] = -20; this_curve -> axis_title_y[0] = 45; this_curve -> axis_title_x[1] = MARGX - 10; this_curve -> axis_title_y[1] = -50; this_curve -> frame_type = 2; this_curve -> frame_dash = 1; this_curve -> frame_thickness = 1.0; this_curve -> frame_color.red = 0.0; this_curve -> frame_color.green = 0.0; this_curve -> frame_color.blue = 0.0; this_curve -> frame_color.alpha = 1.0; this_curve -> frame_pos[0][0] = 100.0/840.0; this_curve -> frame_pos[0][1] = 1.0; this_curve -> frame_pos[1][0] = 530.0/600.0; this_curve -> frame_pos[1][1] = 0.0; this_curve -> legend_font = g_strdup_printf ("Sans 10"); this_curve -> show_legend = FALSE; this_curve -> show_frame = TRUE; this_curve -> legend_color.red = 0.0; this_curve -> legend_color.blue = 0.0; this_curve -> legend_color.green = 0.0; this_curve -> legend_color.alpha = 1.0; this_curve -> legend_pos[0] = LEGX; this_curve -> legend_pos[1] = LEGY; this_curve -> show_legend_box = FALSE; this_curve -> legend_box_dash = 1; this_curve -> legend_box_color.red = 0.0; this_curve -> legend_box_color.green = 0.0; this_curve -> legend_box_color.blue = 0.0; this_curve -> legend_box_color.alpha = 1.0; this_curve -> legend_box_thickness = 1.0; this_curve -> backcolor.red = 1.0; this_curve -> backcolor.green = 1.0; this_curve -> backcolor.blue = 1.0; this_curve -> backcolor.alpha = 1.0; this_curve -> layout = curve_default_layout (pid, rid, cid); this_curve -> extrac = NULL; this_curve -> extrac = g_malloc0(sizeof*this_curve -> extrac); this_curve -> extrac -> extras = 0; if (this_curve -> cfile != NULL) { g_free (this_curve -> cfile); } curve_default_scale (pid, rid, cid, this_curve); } /*! \fn void init_curve_title (project * this_proj, int rid, int cid) \brief init curve title and axis titles \param this_proj the target project \param rid the analysis id \param cid the curve id */ void init_curve_title (project * this_proj, int rid, int cid) { if (this_proj -> analysis[rid] -> curves[cid] -> default_title) { this_proj -> analysis[rid] -> curves[cid] -> title = g_strdup_printf ("%s - %s", prepare_for_title(this_proj -> name), this_proj -> analysis[rid] -> curves[cid] -> name); } int i; for (i=0; i<2; i++) { if (this_proj -> analysis[rid] -> curves[cid] -> axis_defaut_title[i]) { this_proj -> analysis[rid] -> curves[cid] -> axis_title[i] = g_strdup_printf ("%s", default_title(i, & this_proj -> analysis[rid] -> idcc[cid])); } } } /*! \fn void add_curve_widgets (project * this_proj, int rid) \brief add curve widgets to the project \param this_proj the target project \param rid the analysis id */ void add_curve_widgets (project * this_proj, int rid) { int i; for (i=0; i analysis[rid] -> numc; i++) { this_proj -> analysis[rid] -> curves[i] -> cid = i; if (this_proj -> analysis[rid] -> curves[i] -> ndata == 0) { initcurve (this_proj, rid, i); } if (this_proj -> analysis[rid] -> curves[i] -> name) { init_curve_title (this_proj, rid, i); } } } atomes_1.3.1/src/curve/datab.h0000664000175000017500000000206015212624223015642 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file datab.h * @short Variable declarations for the curve data edition window * @author Sébastien Le Roux */ /* * This header file: 'datab.h' * * Contains: - Variable declarations for the curve data edition window */ #ifndef DATAB_H_ #define DATAB_H_ extern void edit_data (gpointer data); #endif atomes_1.3.1/src/curve/xaxis.c0000664000175000017500000002123415212624223015722 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file xaxis.c * @short Functions to draw the x axis * @author Sébastien Le Roux */ /* * This file: 'xaxis.c' * * Contains: * - The functions to draw the x axis * * List of functions: void setup_xaxis_linear (cairo_t * cr, Curve * this_curve); void setup_xaxis_log (cairo_t * cr, Curve * this_curve, gboolean draw_it); */ #include #include #include "global.h" #include "curve.h" /*! \fn void setup_xaxis_linear (cairo_t * cr, Curve * this_curve) \brief setup x axis using a linear scale \param cr the cairo drawing context \param this_curve the target curve */ void setup_xaxis_linear (cairo_t * cr, Curve * this_curve) { int k; double u, v; k = cxy[0] / mticks; v = cxy[0] - k * mticks; if (k * mticks < cxy[0]) v = mticks - v; v = fabs(v); for ( u = 0.0 ; u < xmax; u = u + mticks ) { if (x_min + (u + v) * XDRAW / xmax <= x_max) { switch (labpos) { case 0: ax = x_min - x_shift + (u + v) * XDRAW / xmax; ay = y_min + y_shift; label_curve (cr, cxy[0] + u + v, 0, 0, this_curve); break; case 1: ax = x_min - x_shift + (u + v) * XDRAW / xmax; ay = y_max - y_shift; label_curve (cr, cxy[0] + u + v, 0, 1, this_curve); break; case 2: ax = x_min - x_shift + (u + v) * XDRAW / xmax; ay = y_min + y_shift; label_curve (cr, cxy[0] + u + v, 0, 0, this_curve); ax = x_min - x_shift + (u + v) * XDRAW / xmax; ay = y_max - y_shift; label_curve (cr, cxy[0] + u + v, 0, 1, this_curve); break; } switch (tickpos) { case 0: cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_min); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_min + amajt); break; case 1: cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_max); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_max - amajt); break; case 2: cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_min); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_min + amajt); cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_max); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_max - amajt); break; } } } cairo_stroke (cr); for (u = v ; u > mticks / nticks ; u -= mticks / nticks); v = u; for ( u = 0.0 ; u < xmax ; u = u + mticks / nticks ) { if (x_min + (u + v) * XDRAW / xmax <= x_max) { if (dogrid) { cairo_stroke(cr); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_set_line_width (cr, GRIDSIZE); cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_min); cairo_line_to(cr, x_min + (u + v)* XDRAW / xmax, y_max); cairo_stroke(cr); prep_frame (cr, this_curve -> frame_dash, this_curve -> frame_thickness, this_curve -> frame_color); } if (fmod(u+v, mticks) != 0.0) { switch (tickpos) { case 0: cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_min); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_min + amint); break; case 1: cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_max); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_max - amint); break; case 2: cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_min); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_min + amint); cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_max); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_max - amint); break; } } } cairo_stroke(cr); } } /*! \fn void setup_xaxis_log (cairo_t * cr, Curve * this_curve, int rid, int cid, gboolean draw_it) \brief setup x axis using a log scale \param cr the cairo drawing context \param this_curve the target curve \param rid the analysis id \param cid the curve id \param draw_it 1/0 draw or not */ void setup_xaxis_log (cairo_t * cr, Curve * this_curve, int rid, int cid, gboolean draw_it) { int i, k, l; gboolean istrue; double v; istrue = TRUE; xlog = 1; if (cxy[0] != 0.0) { k = (xmax+cxy[0])/cxy[0]; } while (istrue) { k = k/10; if (k > 0) { xlog ++; } else { istrue = FALSE; } } istrue = TRUE; dxlog = 0; i = 100; while (istrue) { if (cxy[0] >= pow(10, i)) { istrue = FALSE; dxlog --; } else { dxlog ++; i=i-1; } } dxlog = dxlog - 100; if (draw_it) { for ( l = 0 ; l < xlog ; l = l + 1 ) { v = pow (10, l-dxlog); if (dogrid) { cairo_stroke(cr); cairo_set_line_width (cr, GRIDSIZE); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_move_to(cr, x_min + l * XDRAW / xlog, y_min); cairo_line_to(cr, x_min + l * XDRAW / xlog, y_max); cairo_stroke(cr); prep_frame (cr, this_curve -> frame_dash, this_curve -> frame_thickness, this_curve -> frame_color); } switch (labpos) { case 0: ax = x_min - x_shift + l * XDRAW / xlog; ay = y_min + y_shift; label_curve (cr, v, 0, 0, this_curve); break; case 1: ax = x_min - x_shift + l * XDRAW / xlog; ay = y_max - y_shift; label_curve (cr, v, 0, 1, this_curve); break; case 2: ax = x_min - x_shift + l * XDRAW / xlog; ay = y_min + y_shift; label_curve (cr, v, 0, 0, this_curve); ax = x_min - x_shift + l * XDRAW / xlog; ay = y_max - y_shift; label_curve (cr, v, 0, 1, this_curve); break; } switch (tickpos) { case 0: cairo_move_to(cr, x_min + l * XDRAW / xlog, y_min); cairo_line_to(cr, x_min + l * XDRAW / xlog, y_min + amajt); break; case 1: cairo_move_to(cr, x_min + l * XDRAW / xlog, y_max); cairo_line_to(cr, x_min + l * XDRAW / xlog, y_max - amajt); break; case 2: cairo_move_to(cr, x_min + l * XDRAW / xlog, y_min); cairo_line_to(cr, x_min + l * XDRAW / xlog, y_min + amajt); cairo_move_to(cr, x_min + l * XDRAW / xlog, y_max); cairo_line_to(cr, x_min + l * XDRAW / xlog, y_max - amajt); break; } for ( k = 2 ; k < 10 ; k = k + 1 ) { if (dogrid) { cairo_stroke(cr); cairo_set_line_width (cr, GRIDSIZE); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_move_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_min); cairo_line_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_max); cairo_stroke(cr); prep_frame (cr, this_curve -> frame_dash, this_curve -> frame_thickness, this_curve -> frame_color); } switch (tickpos) { case 0: cairo_move_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_min); cairo_line_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_min + amint); break; case 1: cairo_move_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_max); cairo_line_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_max - amint); break; case 2: cairo_move_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_min); cairo_line_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_min + amint); cairo_move_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_max); cairo_line_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_max - amint); break; } } } cairo_stroke (cr); } } atomes_1.3.1/src/curve/title.c0000664000175000017500000000613015212624223015705 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file title.c * @short Functions to draw the title * @author Sébastien Le Roux */ /* * This file: 'title.c' * * Contains: * - The functions to draw the curve title * * List of functions: const gchar * default_title (int ax, gpointer data); void show_title (cairo_t * cr, Curve * this_curve); */ #include #include #include #include "global.h" #include "curve.h" /*! \fn const gchar * default_title (int ax, gpointer data) \brief default title string \param ax axis \param data the associated data pointer */ const gchar * default_title (int ax, gpointer data) { tint * pcc = (tint *)data; project * this_proj = get_project_by_id (pcc -> a); gchar * freq_unit[5]={" THz", " THz", " MHz", " KHz", " Hz"}; if (ax == 0) { int rid = pcc -> b; int cid = pcc -> c; if (rid == MSD) { if (this_proj -> tunit > -1) { return g_strdup_printf ("t [%s]", untime[this_proj -> tunit]); } else { return NULL; } } else if (rid == SKT) { if (cid < this_proj -> skt_sets) { return g_strdup_printf ("q [Å-1]"); } else { return g_strdup_printf ("ω %s", freq_unit[this_proj -> tunit]); } } else { return this_proj -> analysis[rid] -> x_title; } } else { return get_curve_from_pointer (data) -> name; } } /*! \fn void show_title (cairo_t * cr, Curve * this_curve) \brief draw title \param cr the cairo drawing context to use for the draw \param this_curve the target curve */ void show_title (cairo_t * cr, Curve * this_curve) { double x, y; x = this_curve -> title_pos[0] * resol[0]; y = this_curve -> title_pos[1] * resol[1]; cairo_set_source_rgba (cr, this_curve -> title_color.red, this_curve -> title_color.green, this_curve -> title_color.blue, this_curve -> title_color.alpha); pango_layout_set_font_description (layout, pango_font_description_from_string (this_curve -> title_font)); pango_layout_set_markup (layout, this_curve -> title, -1); // pango_layout_set_text (layout, this_curve -> title, -1); cairo_move_to (cr, x, y); pango_cairo_update_layout (cr, layout); pango_cairo_show_layout (cr, layout); cairo_stroke (cr); } atomes_1.3.1/src/curve/tab-3.c0000664000175000017500000003452215212624223015500 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file tab-3.c * @short 3rd tab of the curve layout edition dialog * @author Sébastien Le Roux */ /* * This file: 'tab-3.c' * * Contains: * - The 3rd tab of the curve layout edition dialog * * List of functions: void set_legend_box_style (gpointer data); G_MODULE_EXPORT void show_data_legend (GtkCheckButton * leg, gpointer data); G_MODULE_EXPORT void show_data_legend (GtkToggleButton * leg, gpointer data); G_MODULE_EXPORT void show_data_legend_box (GtkCheckButton * bleg, gpointer data); G_MODULE_EXPORT void show_data_legend_box (GtkToggleButton * bleg, gpointer data); G_MODULE_EXPORT void set_legend_font (GtkFontButton * fontb, gpointer data); G_MODULE_EXPORT void set_legend_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_legend_pos (GtkEntry * p, gpointer data); G_MODULE_EXPORT void set_legend_box_line (GtkComboBox * fbox, gpointer data); G_MODULE_EXPORT void set_legend_box_thickness (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_legend_box_color (GtkColorChooser * colob, gpointer data); GtkWidget * create_tab_3 (gpointer data); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" /*! \fn cairo_surface_t * draw_legend_surface (int da, double ti, ColRGBA dcol, ColRGBA bcol) \brief draw legend preview \param da the dash type \param ti the thickness \param dcol the legend color \param bcol the background color */ cairo_surface_t * draw_legend_surface (int da, double ti, ColRGBA dcol, ColRGBA bcol) { cairo_surface_t * cst; cairo_t * tcst; curve_dash * tdash; cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 80, 80); tcst = cairo_create (cst); tdash = selectdash (da); cairo_set_dash (tcst, tdash -> a, tdash -> b, 0); cairo_set_source_rgb (tcst, bcol.red, bcol.green, bcol.blue); cairo_paint (tcst); cairo_set_source_rgb (tcst, dcol.red, dcol.green, dcol.blue); cairo_set_line_width (tcst, ti); cairo_move_to (tcst, 10, 10); cairo_line_to (tcst, 70, 10); cairo_line_to (tcst, 70, 70); cairo_line_to (tcst, 10, 70); cairo_line_to (tcst, 10, 10); cairo_stroke (tcst); g_free (tdash); cairo_destroy (tcst); return cst; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_data_legend (GtkCheckButton * leg, gpointer data) \brief show / hide legend toggle callback GTK4 \param leg the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_data_legend (GtkCheckButton * leg, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_data_legend (GtkToggleButton * leg, gpointer data) \brief show / hide legend toggle callback GTK3 \param leg the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_data_legend (GtkToggleButton * leg, gpointer data) #endif { Curve * this_curve = get_curve_from_pointer (data); this_curve -> show_legend = button_get_status ((GtkWidget *)leg); widget_set_sensitive (this_curve -> curve_edit -> legend_box, this_curve -> show_legend); if (! this_curve -> show_legend) { widget_set_sensitive (this_curve -> curve_edit -> legend_box_style, 0); } else { widget_set_sensitive (this_curve -> curve_edit -> legend_box_style, this_curve -> show_legend_box); } update_curve (data); } /*! \fn void set_legend_box_style (gpointer data) \brief update legend style widgets \param data the associated data pointer */ void set_legend_box_style (gpointer data) { cairo_surface_t * pix; Curve * this_curve = get_curve_from_pointer (data); curve_edition * cedit = this_curve -> curve_edit; pix = draw_legend_surface (this_curve -> legend_box_dash, this_curve -> legend_box_thickness, this_curve -> legend_box_color, this_curve -> backcolor); cedit -> legend_style_area = destroy_this_widget (cedit -> legend_style_area); cedit -> legend_style_area = create_image_from_data (IMG_SURFACE, (gpointer)pix); cairo_surface_destroy (pix); widget_set_sensitive (cedit -> legend_style_area, this_curve -> show_legend_box); show_the_widgets (cedit -> legend_style_area); #ifdef GTK4 gtk_widget_set_hexpand (cedit -> legend_style_area, TRUE); #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> legend_box_style, cedit -> legend_style_area, TRUE, TRUE, 0); update_curve (data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_data_legend_box (GtkCheckButton * bleg, gpointer data) \brief show / hide legend box toggle callback GTK4 \param bleg the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_data_legend_box (GtkCheckButton * bleg, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_data_legend_box (GtkToggleButton * bleg, gpointer data) \brief show / hide legend box toggle callback GTK3 \param bleg the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_data_legend_box (GtkToggleButton * bleg, gpointer data) #endif { get_curve_from_pointer (data) -> show_legend_box = button_get_status ((GtkWidget *)bleg); widget_set_sensitive (get_curve_from_pointer (data) -> curve_edit -> legend_box_style, get_curve_from_pointer (data) -> show_legend_box); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_legend_font (GtkFontButton * fontb, gpointer data) \brief change legend font \param fontb the GtkFontButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_legend_font (GtkFontButton * fontb, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); g_free (this_curve -> legend_font); this_curve -> legend_font = g_strdup_printf ("%s", gtk_font_chooser_get_font (GTK_FONT_CHOOSER(fontb))); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_legend_color (GtkColorChooser * colob, gpointer data) \brief change legend color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_legend_color (GtkColorChooser * colob, gpointer data) { get_curve_from_pointer (data) -> legend_color = get_button_color (colob); set_legend_box_style (data); } /*! \fn G_MODULE_EXPORT void set_legend_pos (GtkEntry * entry, gpointer data) \brief set the legend position entry callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_legend_pos (GtkEntry * entry, gpointer data) { const gchar *f; double z; qint * ad = (qint *)data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; f = entry_get_text (entry); z = string_to_double ((gpointer)f); Curve * this_curve = get_curve_from_pointer ((gpointer)& cd); if (z >= 0.0 && z <= 1.0) { this_curve -> legend_pos[ad -> d] = z; } else { show_warning (ctext[ad -> d], this_curve -> window); } update_entry_double (entry, this_curve -> legend_pos[ad -> d]); update_curve (& cd); } /*! \fn G_MODULE_EXPORT void set_legend_box_line (GtkComboBox * fbox, gpointer data) \brief change the legend box line type \param fbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_legend_box_line (GtkComboBox * fbox, gpointer data) { get_curve_from_pointer (data) -> legend_box_dash = combo_get_active ((GtkWidget *)fbox) + 1; set_legend_box_style (data); } /*! \fn G_MODULE_EXPORT void set_legend_box_thickness (GtkEntry * entry, gpointer data) \brief set legend box thickness entry callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_legend_box_thickness (GtkEntry * entry, gpointer data) { const gchar * str; Curve * this_curve = get_curve_from_pointer (data); str = entry_get_text (entry); this_curve -> legend_box_thickness = string_to_double ((gpointer)str); update_entry_double (entry, this_curve -> legend_box_thickness); set_legend_box_style (data); } /*! \fn G_MODULE_EXPORT void set_legend_box_color (GtkColorChooser * colob, gpointer data) \brief set legend color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_legend_box_color (GtkColorChooser * colob, gpointer data) { get_curve_from_pointer (data) -> legend_box_color = get_button_color (colob); set_legend_box_style (data); } /*! \fn GtkWidget * create_tab_3 (curve_edition * cedit, gpointer data) \brief handle the creation of the 3rd tab of the curve edition dialog \param cedit the target curve_edition pointer \param data the associated data pointer */ GtkWidget * create_tab_3 (curve_edition * cedit, gpointer data) { GtkWidget * dhbox; GtkWidget * legend_area; GtkWidget * legend_style_box; GtkWidget * legend_dash_box; GtkWidget * legend_thickness; int i; Curve * this_curve = get_curve_from_pointer (data); GtkWidget * legendbox = create_vbox (BSEP); GtkWidget * leghbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, legendbox, leghbox, FALSE, FALSE, 10); GtkWidget * legvbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, leghbox, legvbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, legvbox, check_button (_("Show/Hide legend"), -1, -1, this_curve -> show_legend, G_CALLBACK(show_data_legend), data), FALSE, TRUE, 5); legend_area = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, legvbox, legend_area, FALSE, FALSE, 10); cedit -> legend_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, legend_area, cedit -> legend_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (cedit -> legend_box, _("Font:")), font_button (this_curve -> legend_font, 150, -1, G_CALLBACK(set_legend_font), data), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (cedit -> legend_box, _("Color:")), color_button (this_curve -> legend_color, TRUE, 150, 30, G_CALLBACK(set_legend_color), data), FALSE, FALSE, 0); dhbox = bbox (cedit -> legend_box, _("Position:")); GtkWidget * lxyc; for ( i=0 ; i < 2 ; i++ ) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, dhbox, markup_label(lapos[i], (i==0)?10:30, -1, 1.0, 0.5), FALSE, FALSE, 5); lxyc = create_entry (G_CALLBACK(set_legend_pos), 100, 10, FALSE, (gpointer)& cedit -> dataxe[i]); update_entry_double (GTK_ENTRY(lxyc), this_curve -> legend_pos[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, dhbox, lxyc, FALSE, FALSE, 5); } dhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cedit -> legend_box, dhbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, dhbox, check_button (_("Show/Hide legend box"), -1, -1, this_curve -> show_legend_box, G_CALLBACK(show_data_legend_box), data), FALSE, FALSE, 40); cedit -> legend_box_style = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cedit -> legend_box, cedit -> legend_box_style, FALSE, FALSE, 0); legend_style_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> legend_box_style, legend_style_box, FALSE, FALSE, 0); // Legend box style legend_dash_box = create_combo (); for ( i=1 ; i < ndash ; i++) { combo_text_append (legend_dash_box, g_strdup_printf("%d", i)); } gtk_widget_set_size_request (legend_dash_box, 120, -1); combo_set_active (legend_dash_box, this_curve -> legend_box_dash - 1); g_signal_connect (G_OBJECT(legend_dash_box), "changed", G_CALLBACK(set_legend_box_line), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbox (legend_style_box, _("Line style:")), legend_dash_box, FALSE, FALSE, 0); // Legend box linewidth legend_thickness = create_entry (G_CALLBACK(set_legend_box_thickness), 120, 10, FALSE, data); update_entry_double (GTK_ENTRY(legend_thickness), this_curve -> legend_box_thickness); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbox (legend_style_box, _("Line width:")), legend_thickness, FALSE, FALSE, 0); // Legend box line color add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbox (legend_style_box, _("Color:")), color_button (this_curve -> legend_box_color, TRUE, 120, -1, G_CALLBACK(set_legend_box_color), data), FALSE, FALSE, 0); // Legend box pix cairo_surface_t * legend_pix = draw_legend_surface (this_curve -> legend_box_dash, this_curve -> legend_box_thickness, this_curve -> legend_box_color, this_curve -> backcolor); cedit -> legend_style_area = create_image_from_data (IMG_SURFACE, (gpointer)legend_pix); cairo_surface_destroy (legend_pix); #ifdef GTK4 add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> legend_box_style, markup_label(" ", 20, -1, 0.0, 0.0), FALSE, FALSE, 0); gtk_widget_set_hexpand (cedit -> legend_style_area, TRUE); #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cedit -> legend_box_style, cedit -> legend_style_area, FALSE, FALSE, 0); widget_set_sensitive (cedit -> legend_box_style, this_curve -> show_legend_box); widget_set_sensitive (cedit -> legend_box, this_curve -> show_legend); return legendbox; } atomes_1.3.1/src/curve/legend.c0000664000175000017500000001321215212624223016021 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file legend.c * @short Function to draw the legend * @author Sébastien Le Roux */ /* * This file: 'legend.c' * * Contains: * - The function to draw the legend * * List of functions: void show_legend (cairo_t * cr, project * this_proj, int rid, int cid); */ #include #include #include #include "global.h" #include "curve.h" extern DataLayout * get_extra_layout (int i); /*! \fn void show_legend (cairo_t * cr, project * this_proj, int rid, int cid) \brief draw legend \param cr the cairo drawing context to use for the draw \param this_proj the target project \param rid the calculation id \param cid the curve id */ void show_legend (cairo_t * cr, project * this_proj, int rid, int cid) { double x, y, z; double ih, fh; double tw, th; int w, h; int j, k, l, m; gchar * str; curve_dash * dasht; Curve * this_curve = this_proj -> analysis[rid] -> curves[cid]; x = this_curve -> legend_pos[0] * resol[0]; y = this_curve -> legend_pos[1] * resol[1]; pango_layout_set_font_description (layout, pango_font_description_from_string (this_curve -> legend_font)); CurveExtra * ctmp; ctmp = this_curve -> extrac -> first; for ( j=this_curve -> extrac -> extras ; j >= 0 ; j-- ) { y = y + 4.0*z/3.0; if (this_curve -> draw_id == j) { if (this_curve -> layout -> dash > 0) { dasht = selectdash (this_curve -> layout -> dash); cairo_set_dash(cr, dasht -> a, dasht -> b, 0.0); cairo_set_source_rgba (cr, this_curve -> layout -> datacolor.red, this_curve -> layout -> datacolor.green, this_curve -> layout -> datacolor.blue, this_curve -> layout -> datacolor.alpha); cairo_set_line_width (cr, this_curve -> layout -> thickness); cairo_move_to (cr, x-5, y); cairo_line_to (cr, x+20, y); cairo_stroke(cr); g_free (dasht); } z = x-5; draw_glyph (cr, this_curve -> layout -> glyph, z, y, this_curve -> layout -> datacolor, this_curve -> layout -> gsize); z = x+20; draw_glyph (cr, this_curve -> layout -> glyph, z, y, this_curve -> layout -> datacolor, this_curve -> layout -> gsize); cairo_set_source_rgba (cr, this_curve -> legend_color.red, this_curve -> legend_color.green, this_curve -> legend_color.blue, this_curve -> legend_color.alpha); str = g_strdup_printf ("%s - %s", prepare_for_title(this_proj -> name), this_curve -> name); } else { DataLayout * lay = ctmp -> layout; if (lay -> dash > 0) { dasht = selectdash (lay -> dash); cairo_set_dash(cr, dasht -> a, dasht -> b, 0.0); cairo_set_source_rgba (cr, lay -> datacolor.red, lay -> datacolor.green, lay -> datacolor.blue, lay -> datacolor.alpha); cairo_set_line_width (cr, lay -> thickness); cairo_move_to (cr, x-5, y); cairo_line_to (cr, x+20, y); cairo_stroke(cr); g_free (dasht); } z = x-5; draw_glyph (cr, lay -> glyph, z, y, lay -> datacolor, lay -> gsize); z = x+20; draw_glyph (cr, lay -> glyph, z, y, lay -> datacolor, lay -> gsize); cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 1.0); k = ctmp -> id.a; l = ctmp -> id.b; m = ctmp -> id.c; str = g_strdup_printf ("%s - %s", get_project_by_id(k) -> name, get_project_by_id(k) -> analysis[l] -> curves[m] -> name); if (ctmp -> next != NULL) ctmp = ctmp -> next; } pango_layout_set_markup (layout, str, -1); pango_layout_get_size (layout, & w, & h); z = (double) h / PANGO_SCALE; if (j == 0) ih = z; fh = z; tw = max(tw, (double) w / PANGO_SCALE); cairo_move_to (cr, x + 35.0, y - z/2); pango_cairo_update_layout (cr, layout); pango_cairo_show_layout (cr, layout); cairo_stroke (cr); g_free (str); } if (this_curve -> show_legend_box) { dasht = selectdash (this_curve -> legend_box_dash); cairo_set_dash(cr, dasht -> a, dasht -> b, 0.0); cairo_set_source_rgba (cr, this_curve -> legend_box_color.red, this_curve -> legend_box_color.green, this_curve -> legend_box_color.blue, this_curve -> legend_box_color.alpha); cairo_set_line_width (cr, this_curve -> legend_box_thickness); x = this_curve -> legend_pos[0] * resol[0] - 25; th = ih + fh + (y - this_curve -> legend_pos[1] * resol[1]); y = this_curve -> legend_pos[1] * resol[1] - ih; tw = tw + 80; cairo_rectangle (cr, x, y, tw, th); cairo_stroke(cr); g_free (dasht); } } atomes_1.3.1/src/curve/draw.c0000664000175000017500000002232215212624223015522 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file draw.c * @short Function to draw a curve * @author Sébastien Le Roux */ /* * This file: 'draw.c' * * Contains: * - The function to draw a curve * */ #include #include #include #include #include #include "global.h" #include "curve.h" /*! \fn void draw_curve (cairo_t * cr, int cid, int rid, project * this_proj, int points, ColRGBA withcolor, int xscale, int yscale, int asp, int vdash, double thick, int glyp, double gize, int freq, double hwidth, double hopac, int hpos, int extra, int pid) \brief draw target curve to the cairo drawing context \param cr the cairo drawing context to use for the draw \param cid the target curve id \param rid the target calculation id \param this_proj the target project \param points the number of data point(s) \param withcolor the data color \param xscale x axis scale type (0 = linear, 1 = log) \param yscale y axis scale type (0 = linear, 1 = log) \param asp data aspect (0 = x/y normal, 1 = historgram) \param vdash dash type \param thick line tthickness \param glyp glyph type \param gize glyph size \param freq glyph frequency \param hwidth histogram bar width \param hopac histogram bar opacity value \param hpos histogram opacity treatment (0 = no opacity, 1 = use opacity) \param extra the number of extra data sets \param pid 0 (x/y plot) or plot id number (historgram) */ void draw_curve (cairo_t * cr, int cid, int rid, project * this_proj, int points, ColRGBA withcolor, int xscale, int yscale, int asp, int vdash, double thick, int glyp, double gize, int freq, double hwidth, double hopac, int hpos, int extra, int pid) { int i, j, k; double x, y; double x1, x2, y1, y2; double dx1, dx2, dy1, dy2; double slope, bval; double ** plotdata; gboolean plot; gboolean dglyp; curve_dash * dasht; Curve * this_curve = this_proj -> analysis[rid] -> curves[cid]; plotdata = allocddouble (points, 2); for ( i=0 ; i < points; i++ ) { if (xscale == 0) { plotdata[i][0] = x_min + XDRAW * (this_curve -> data[0][i] - cxy[0]) / xmax; } else { x = (i+1) * this_proj -> analysis[rid] -> num_delta * this_proj -> analysis[rid] -> delta * pow(10, dxlog); x = log(x) / log(pow(10, xlog)); plotdata[i][0] = x_min + XDRAW * x; } if (yscale == 0) { plotdata[i][1] = y_min + YDRAW * (this_curve -> data[1][i] - cxy[1]) / ymax; } else { y = this_curve -> data[1][i] * pow(10, dylog); y = log(y) / log(pow(10, ylog)); plotdata[i][1] = y_min + YDRAW * y; } #ifdef DEBUG // g_debug ("CURVE: DRAWCURVE: x= %f, y= %f", plotdata[i][0], plotdata[i][1]); #endif } if (vdash > 0) { dasht = selectdash (vdash); cairo_set_dash(cr, dasht -> a, dasht -> b, 0.0); cairo_set_line_width (cr, thick); g_free (dasht); } else { cairo_set_line_width (cr, 0.0); } cairo_set_source_rgba (cr, withcolor.red, withcolor.green, withcolor.blue, 1.0); if (asp == 0) { j = 0; k = 1; if (rid == RIN) j = 2; for ( i = j ; i < points - k ; i ++) { plot = TRUE; dglyp = FALSE; slope = (plotdata[i+k][1] - plotdata[i][1])/ (plotdata[i+k][0] - plotdata[i][0]); bval = plotdata[i][1] - slope*plotdata[i][0]; dy1 = slope*x_min + bval; dy2 = slope*x_max + bval; if (slope < 0) { dx1 = (y_min - bval) / slope; dx2 = (y_max - bval) / slope; } else { dx1 = (y_max - bval) / slope; dx2 = (y_min - bval) / slope; } if (plotdata[i][0] < x_min && plotdata[i+k][0] < x_min) { plot = FALSE; } else if (plotdata[i][0] > x_max && plotdata[i+k][0] > x_max) { plot = FALSE; } if (plotdata[i][1] < y_max && plotdata[i+k][1] < y_max) { plot = FALSE; } else if (plotdata[i][1] > y_min && plotdata[i+k][1] > y_min) { plot = FALSE; } if (plot) { if (plotdata[i][0] >= x_min && plotdata[i][0] <= x_max) { if(plotdata[i][1] >= y_max && plotdata[i][1] <= y_min) { x1 = plotdata[i][0]; y1 = plotdata[i][1]; dglyp = TRUE; } else { x1 = dx1; y1 = (slope < 0) ? y_min : y_max; } } else { x1 = x_min; y1 = dy1; } if (plotdata[i+k][0] >= x_min && plotdata[i+k][0] <= x_max) { if (plotdata[i+k][1] >= y_max && plotdata[i+k][1] <= y_min) { x2 = plotdata[i+k][0]; y2 = plotdata[i+k][1]; } else { x2 = dx2; y2 = (slope < 0) ? y_max : y_min; } } else { x2 = x_max; y2 = dy2; } cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_stroke (cr); if (i % freq == 0 && dglyp) draw_glyph (cr, glyp, x1, y1, withcolor, gize); if (i == points - 2 && (i+k) % freq == 0 && dglyp) { draw_glyph (cr, glyp, x2, y2, withcolor, gize); } } } } else if (asp == 1) { j = 0; k = 1; if (rid == RIN) j = 2; // g_debug ("x_min= %f, x_max= %f, y_min= %f, y_max= %f", x_min, x_max, y_min, y_max); for ( i = j ; i < points ; i ++) { if (this_curve -> data[1][i] != 0.0) { if (plotdata[i][0] >= x_min && plotdata[i][0] <= x_max) { if (plotdata[i][1] <= y_min || (cxy[1] <= 0.0 && plotdata[i][1] > y_min)) { x1 = plotdata[i][0] - hwidth * 0.5 * XDRAW / xmax; if (pid) x1 -= hwidth * 0.5 * ((float)pid / (float)extra) * XDRAW / xmax; x2 = hwidth * XDRAW / xmax; if (x1 < x_min) { x2 -= (x_min - x1); x1 = x_min; } if (x1+x2 > x_max) { x2 = x_max - x1; } y1 = plotdata[i][1]; if (plotdata[i][1] > y_min) { y1 = y_min; } else if (plotdata[i][1] < y_max) { y1 = y_max; } y2 = y_min - y1; if (cxy[1] <= 0.0) { y2 = y2 - cxy[1] * YDRAW / ymax; } if (hpos) { cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 1.0); cairo_rectangle (cr, x1, y1, x2, y2); cairo_fill(cr); } cairo_set_source_rgba (cr, withcolor.red, withcolor.green, withcolor.blue, hopac); cairo_rectangle (cr, x1, y1, x2, y2); cairo_fill(cr); cairo_set_source_rgba (cr, withcolor.red, withcolor.green, withcolor.blue, 1.0); y2 = y_min; if (cxy[1] <= 0.0) { y2 = y2 - cxy[1] * YDRAW / ymax; } cairo_move_to (cr, x1, y2); cairo_line_to (cr, x1, y1); cairo_move_to (cr, x1, y1); x2 = plotdata[i][0] + hwidth * 0.5 * XDRAW / xmax; if (pid) x2 -= hwidth * 0.5 * ((float)pid / (float)extra) * XDRAW / xmax; if (x2 > x_max) { x2 = x_max; cairo_line_to(cr, x2, y1); cairo_move_to(cr, x2, y1); } else { cairo_line_to(cr, x2, y1); cairo_move_to(cr, x2, y1); cairo_line_to(cr, x2, y2); } cairo_stroke(cr); } } } } } cairo_stroke(cr); g_free (plotdata); } atomes_1.3.1/src/curve/yaxis.c0000664000175000017500000002547015212624223015731 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file yaxis.c * @short Functions to draw the y axis * @author Sébastien Le Roux */ /* * This file: 'yaxis.c' * * Contains: * - The functions to draw the y axis * * List of functions: void autoscale_axis (project * this_proj, int rid, int cid, int aid); void setup_yaxis_linear (cairo_t * cr, Curve * this_curve); void setup_yaxis_log (cairo_t * cr, Curve * this_curve, gboolean draw_it); */ #include #include #include "global.h" #include "curve.h" /*! \fn void autoscale_axis (project * this_proj, Curve * this_curve, int rid, int cid, int aid) \brief autoscale axis \param this_proj the target project \param this_curve the target curve \param rid the analysis id \param cid the curve id \param aid the axis id */ void autoscale_axis (project * this_proj, Curve * this_curve, int rid, int cid, int aid) { int i, j, k, l, m, n; if (! aid && (rid == RIN ||rid == CHA)) { i = cid / ((this_proj -> nspec+1) * 4); this_curve -> axmax[aid] = (rid == RIN) ? this_proj -> rsparam[i][1]: this_proj -> csparam[5]; this_curve -> axmax[aid] += 1.0; this_curve -> axmin[aid] = (rid == RIN) ? 2 : 1; } else { n = (rid == SPH && aid == 1) ? 1 : 0; this_curve -> axmax[aid] = this_curve -> data[aid][n]; this_curve -> axmin[aid] = this_curve -> data[aid][n]; for ( i=n ; i < this_curve -> ndata ; i++ ) { this_curve -> axmax[aid] = max(this_curve -> axmax[aid], this_curve -> data[aid][i]); this_curve -> axmin[aid] = min(this_curve -> axmin[aid], this_curve -> data[aid][i]); } if (this_curve -> extrac) { CurveExtra * ctmp = this_curve -> extrac -> first; project * that_proj; for ( j=0 ; j < this_curve -> extrac -> extras ; j++ ) { m = ctmp -> id.a; k = ctmp -> id.b; l = ctmp -> id.c; that_proj = get_project_by_id(m); for ( i=n ; i < that_proj -> analysis[k] -> curves[l] -> ndata ; i++ ) { this_curve -> axmax[aid] = max(this_curve -> axmax[aid], that_proj -> analysis[k] -> curves[l] -> data[aid][i]); this_curve -> axmin[aid] = min(this_curve -> axmin[aid], that_proj -> analysis[k] -> curves[l] -> data[aid][i]); } if (ctmp -> next != NULL) ctmp = ctmp -> next; } } } if (aid == 1) { this_curve -> cmin[aid] = this_curve -> axmin[aid]; this_curve -> cmax[aid] = this_curve -> axmax[aid]; this_curve -> axmin[aid] = this_curve -> cmin[aid] - fabs(this_curve -> cmin[aid]) / 10.0; this_curve -> axmax[aid] = this_curve -> cmax[aid] + fabs(this_curve -> cmax[aid]) / 10.0; // Adjust autoscale information if required if (rid > GDK && rid < MSD) { this_curve -> axmin[aid] = 0.0; } } } /*! \fn void setup_yaxis_linear (cairo_t * cr, Curve * this_curve) \brief setup y axis using a linear scale \param cr the cairo drawing context \param this_curve the target curve */ void setup_yaxis_linear (cairo_t * cr, Curve * this_curve) { int k; double u, v; k = cxy[1] / mticks; v = cxy[1] - k * mticks; if (k * mticks < cxy[1]) v = mticks - v; v = fabs(v); if (k * mticks > fabs(cxy[1])) v = mticks - v; for ( u = 0.0 ; u < ymax ; u = u + mticks ) { if (y_min + (u + v) * YDRAW / ymax >= y_max) { switch (labpos) { case 0: ax = x_min - x_shift; ay = y_min - y_shift + (u + v) * YDRAW / ymax; label_curve (cr, cxy[1] + v + u, 1, 0, this_curve); break; case 1: ax = x_max + x_shift; ay = y_min - y_shift + (u + v) * YDRAW / ymax; label_curve (cr, cxy[1] + v + u, 1, 1, this_curve); break; case 2: ax = x_min - x_shift; ay = y_min - y_shift + (u + v) * YDRAW / ymax; label_curve (cr, cxy[1] + v + u, 1, 0, this_curve); ax = x_max + x_shift; ay = y_min - y_shift + (u + v) * YDRAW / ymax; label_curve (cr, cxy[1] + v + u, 1, 1, this_curve); break; } switch (tickpos) { case 0: cairo_move_to(cr, x_min, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_min - amajt, y_min + (u + v) * YDRAW / ymax); break; case 1: cairo_move_to(cr, x_max, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_max + amajt, y_min + (u + v) * YDRAW / ymax); break; case 2: cairo_move_to(cr, x_min, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_min - amajt, y_min + (u + v) * YDRAW / ymax); cairo_move_to(cr, x_max, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_max + amajt, y_min + (u + v) * YDRAW / ymax); break; } } } cairo_stroke (cr); for (u = v ; u > mticks / nticks ; u -= mticks / nticks); v = u; for (u = 0.0 ; u < ymax ; u = u + mticks / nticks) { if (y_min + (u + v) * YDRAW / ymax >= y_max) { if (dogrid) { cairo_stroke(cr); cairo_set_line_width (cr, GRIDSIZE); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_move_to(cr, x_min, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_max, y_min + (u + v) * YDRAW / ymax); cairo_stroke(cr); prep_frame (cr, this_curve -> frame_dash, this_curve -> frame_thickness, this_curve -> frame_color); } if (fmod(u+v, mticks) != 0.0) { switch (tickpos) { case 0: cairo_move_to(cr, x_min, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_min - amint, y_min + (u + v) * YDRAW / ymax); break; case 1: cairo_move_to(cr, x_max, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_max + amint, y_min + (u + v) * YDRAW / ymax); break; case 2: cairo_move_to(cr, x_min, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_min - amint, y_min + (u + v) * YDRAW / ymax); cairo_move_to(cr, x_max, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_max + amint, y_min + (u + v) * YDRAW / ymax); break; } } } cairo_stroke (cr); } } /*! \fn void setup_yaxis_log (cairo_t * cr, Curve * this_curve, gboolean draw_it) \brief setup y axis using a log scale \param cr the cairo drawing context \param this_curve the target curve \param draw_it 1/0 draw or not */ void setup_yaxis_log (cairo_t * cr, Curve * this_curve, gboolean draw_it) { int i, k, l; gboolean istrue; double v; istrue = TRUE; ylog = 1; if (cxy[1] != 0.0) { k = (ymax+cxy[1])/cxy[1]; } while (istrue) { k = k/10; if (k > 0) { ylog ++; } else { ylog ++; istrue = FALSE; } } istrue = TRUE; dylog = 0; i = 100; while (istrue) { if (cxy[1] >= pow(10, i)) { istrue = FALSE; } else { dylog ++; i=i-1; } } dylog = dylog - 100; if (draw_it) { for ( l = 0 ; l < ylog ; l ++ ) { v = pow (10, l-dylog); if (dogrid) { cairo_stroke(cr); cairo_set_line_width (cr, GRIDSIZE); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_move_to(cr, x_min, y_min + YDRAW * l / ylog); cairo_line_to(cr, x_max, y_min + YDRAW * l / ylog); cairo_stroke(cr); prep_frame (cr, this_curve -> frame_dash, this_curve -> frame_thickness, this_curve -> frame_color); } switch (labpos) { case 0: ax = x_min - x_shift; ay = y_min - y_shift + YDRAW *l / ylog; label_curve (cr, v, 1, 0, this_curve); break; case 1: ax = x_max + x_shift; ay = y_min - y_shift + YDRAW *l / ylog; label_curve (cr, v, 1, 1, this_curve); break; case 2: ax = x_min - x_shift; ay = y_min - y_shift + YDRAW *l / ylog; label_curve (cr, v, 1, 0, this_curve); ax = x_max + x_shift; ay = y_min - y_shift + YDRAW *l / ylog; label_curve (cr, v, 1, 1, this_curve); break; } switch (tickpos) { case 0: cairo_move_to(cr, x_min, y_min + YDRAW * l / ylog); cairo_line_to(cr, x_min - amajt, y_min + YDRAW * l / ylog); break; case 1: cairo_move_to(cr, x_max, y_min + YDRAW * l / ylog); cairo_line_to(cr, x_max - amajt, y_min + YDRAW * l / ylog); break; case 2: cairo_move_to(cr, x_min, y_min + YDRAW * l / ylog); cairo_line_to(cr, x_min - amajt, y_min + YDRAW * l / ylog); cairo_move_to(cr, x_max, y_min + YDRAW * l / ylog); cairo_line_to(cr, x_max - amajt, y_min + YDRAW * l / ylog); break; } for ( k = 2 ; k < 10 ; k ++ ) { if (dogrid) { cairo_stroke(cr); cairo_set_line_width (cr, GRIDSIZE); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_move_to(cr, x_min, y_min + YDRAW * (l + log(k) / log(10.0)) / ylog); cairo_line_to(cr, x_max, y_min + YDRAW * (l + log(k) / log(10.0)) / ylog); cairo_stroke(cr); prep_frame (cr, this_curve -> frame_dash, this_curve -> frame_thickness, this_curve -> frame_color); } switch (tickpos) { case 0: cairo_move_to(cr, x_min, y_min + YDRAW * (l + log(k) / log(10.0)) / ylog); cairo_line_to(cr, x_min - amint, y_min + YDRAW *(l + log(k) / log(10.0)) / ylog); break; case 1: cairo_move_to(cr, x_max, y_min + YDRAW * (l + log(k) / log(10.0)) / ylog); cairo_line_to(cr, x_max + amint, y_min + YDRAW *(l + log(k) / log(10.0)) / ylog); break; case 2: cairo_move_to(cr, x_min, y_min + YDRAW * (l + log(k) / log(10.0)) / ylog); cairo_line_to(cr, x_min - amint, y_min + YDRAW *(l + log(k) / log(10.0)) / ylog); cairo_move_to(cr, x_max, y_min + YDRAW * (l + log(k) / log(10.0)) / ylog); cairo_line_to(cr, x_max + amint, y_min + YDRAW *(l + log(k) / log(10.0)) / ylog); break; } } } cairo_stroke (cr); } } atomes_1.3.1/src/curve/frame.c0000664000175000017500000001377615212624223015674 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file frame.c * @short Functions to draw the frame * @author Sébastien Le Roux */ /* * This file: 'frame.c' * * Contains: * - The functions to draw the frame * * List of functions: void prep_frame (cairo_t * fr, int da, double ti, ColRGBA dcol); void prep_axis_data (project * this_proj, int rid, int cid, int ax); void draw_frame (cairo_t * cr, project * this_proj, int rid, int cid); */ #include #include #include #include "global.h" #include "curve.h" /*! \fn void prep_frame (cairo_t * fr, int da, double ti, ColRGBA dcol) \brief draw frame line \param fr the cairo drawing context to use for the draw \param da dash type \param ti line width \param dcol color */ void prep_frame (cairo_t * fr, int da, double ti, ColRGBA dcol) { curve_dash * tdash; tdash = selectdash (da); cairo_set_dash (fr, tdash -> a, tdash -> b, 0.0); cairo_set_source_rgba (fr, dcol.red, dcol.green, dcol.blue, dcol.alpha); cairo_set_line_width (fr, ti); g_free (tdash); } /*! \fn void show_frame (cairo_t * cd, int tf, int da, int res[2], double ti, double x[2], double y[2], ColRGBA dcol) \brief draw frame \param cd the cairo drawing context to use for the draw \param tf frame type \param da dash type \param res image size \param ti line width \param x x positions (right, left) \param y y positions (top, bottom) \param dcol color */ void show_frame (cairo_t * cd, int tf, int da, int res[2], double ti, double x[2], double y[2], ColRGBA dcol) { double x1, x2; double y1, y2; prep_frame (cd, da, ti, dcol); x1 = x[0] * res[0]; x2 = x[1] * res[0]; y1 = y[0] * res[1]; y2 = y[1] * res[1]; switch (tf) { case 0: cairo_move_to (cd, x1, y2); cairo_line_to (cd, x2, y2); cairo_line_to (cd, x2, y1); cairo_line_to (cd, x1, y1); cairo_line_to (cd, x1, y2); break; case 1: cairo_move_to (cd, x1, y2); cairo_line_to (cd, x1, y1); cairo_line_to (cd, x2, y1); cairo_line_to (cd, x2, y2); break; case 2: cairo_move_to (cd, x1, y2); cairo_line_to (cd, x1, y1); cairo_line_to (cd, x2, y1); break; case 3: cairo_move_to (cd, x2, y2); cairo_line_to (cd, x2, y1); cairo_line_to (cd, x1, y1); break; case 4: cairo_move_to (cd, x1, y1); cairo_line_to (cd, x2, y1); break; } cairo_stroke (cd); } /*! \fn void prep_axis_data (Curve * this_curve, int ax) \brief prepare axis data \param this_curve the target Curve \param ax the axis */ void prep_axis_data (Curve * this_curve, int ax) { dogrid = this_curve -> show_grid[ax]; x_shift = this_curve -> labels_shift_x[ax]; y_shift = this_curve -> labels_shift_y[ax]; mticks = this_curve -> majt[ax]; nticks = this_curve -> mint[ax]; if (this_curve -> ticks_io[ax] == 1) { amint = this_curve -> mint_size[ax]; amajt = this_curve -> majt_size[ax]; } else { amint = - this_curve -> mint_size[ax]; amajt = - this_curve -> majt_size[ax]; } tickpos = this_curve -> ticks_pos[ax]; labpos = this_curve -> labels_pos[ax]; } /*! \fn void draw_frame (cairo_t * cr, Curve * this_curve, int rid, int cid) \brief draw frame and axis data \param cr the cairo drawing context to use for the draw \param this_curve the target curve \param rid the calculation id \param cid the curve id */ void draw_frame (cairo_t * cr, Curve * this_curve, int rid, int cid) { show_frame (cr, this_curve -> frame_type, this_curve -> frame_dash, resol, this_curve -> frame_thickness, this_curve -> frame_pos[0], this_curve -> frame_pos[1], this_curve -> frame_color); // X axis // Draw X axis ticks and labels pango_layout_set_font_description (layout, pango_font_description_from_string (this_curve -> labels_font[0])); prep_axis_data (this_curve, 0); if (this_curve -> scale[0] == 0) { setup_xaxis_linear (cr, this_curve); } else { setup_xaxis_log (cr, this_curve, rid, cid, TRUE); } // Draw X axis title cairo_move_to (cr, x_min + XDRAW / 2.0 + this_curve -> axis_title_x[0], y_min + this_curve -> axis_title_y[0]); pango_layout_set_font_description (layout, pango_font_description_from_string (this_curve -> axis_title_font[0])); pango_layout_set_markup (layout, this_curve -> axis_title[0], -1); // pango_layout_set_text (layout, this_curve -> axis_title[0], -1); pango_cairo_update_layout (cr, layout); pango_cairo_show_layout (cr, layout); cairo_stroke(cr); // Y axis // Draw Y axis ticks and labels pango_layout_set_font_description (layout, pango_font_description_from_string (this_curve -> labels_font[1])); prep_axis_data (this_curve, 1); if (this_curve -> scale[1] == 0) { setup_yaxis_linear (cr, this_curve); } else { setup_yaxis_log (cr, this_curve, TRUE); } cairo_move_to (cr, x_min - this_curve -> axis_title_x[1], y_min + YDRAW/2 - this_curve -> axis_title_y[1]); pango_layout_set_font_description (layout, pango_font_description_from_string (this_curve -> axis_title_font[1])); pango_layout_set_markup (layout, this_curve -> axis_title[1], -1); cairo_rotate (cr, -pi/2.0); pango_cairo_update_layout (cr, layout); pango_cairo_show_layout (cr, layout); cairo_stroke (cr); cairo_rotate (cr, pi/2.0); pango_cairo_update_layout (cr, layout); } atomes_1.3.1/src/curve/m_curve.c0000664000175000017500000006142715212624223016236 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_curve.c * @short Curve context menu (mouse right click) * @author Sébastien Le Roux */ /* * This file: 'm_curve.c' * * Contains: * - The curve context menu (mouse right click) * * List of functions: gboolean was_not_added (ExtraSets * sets, int a, int b, int c); void autoscale (gpointer data); void action_to_plot (pointer data); void add_extra (ExtraSets * sets, tint * id); void remove_extra (ExtraSets * sets, CurveExtra * ctmp); void prep_extra_rid (tint * data); void curve_window_add_menu_bar (tint * data); G_MODULE_EXPORT void curve_edit_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void curve_add_remove_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void curve_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * curve_popup_menu (gpointer data); GMenu * curve_section (GSimpleActionGroup * action_group, gchar * act, ExtraSets * sets, gboolean add, int edit, int a, int b, tint * data); GMenu * create_curve_submenu (GSimpleActionGroup * action_group, gchar * act, tint * data, gboolean add, int edit); GMenu * create_curve_menu (gchar * str); GMenu * edit_data_section (GSimpleActionGroup * action_group, gchar * str, tint * data); GMenu * curve_close_section (gchar * str); GMenu * create_data_menu (GSimpleActionGroup * action_group, int pop, gchar * str, tint * data); GMenu * curve_menu_bar (project * this_proj, GSimpleActionGroup * action_group, gchar * str, tint * data); GMenu * create_add_remove_section (GSimpleActionGroup * action_group, gchar * act, int num, tint * data); GMenu * autoscale_section (gchar * str); CurveExtra * init_extra (tint * id); */ #include #include #include "global.h" #include "callbacks.h" #include "curve.h" #include "cedit.h" #include "datab.h" extern DataLayout * curve_default_layout (project * pid, int rid, int cid); extern GtkWidget * shortcuts_window (int sections, int group_by_section[sections], int groups, int shortcut_by_group[groups], gchar * section_names[sections], gchar * group_names[groups], shortcuts shortcs[]); int ** extrarid; gchar * curve_section_names[]={i18n("Curve window")}; int curve_group_by_section[] = { 2 }; gchar * curve_group_names[]={i18n("Edition "), i18n("Export")}; int curve_shortcut_by_group[] = { 3, 2 }; shortcuts curve_shortcuts[] = { // // Global // { i18n("Autoscale"), i18n("Autoscale"), GDK_KEY_a, "a" }, { i18n("Edit curve"), i18n("Edit curve"), GDK_KEY_e, "e" }, { i18n("Close curve"), i18n("Close curve"), GDK_KEY_c, "c" }, { i18n("Export data"), i18n("Export data"), GDK_KEY_s, "s" }, { i18n("Save image"), i18n("Save image"), GDK_KEY_i, "i" } }; /*! \fn void autoscale (gpointer data) \brief autoscale callback \param data the associated data pointer */ void autoscale (gpointer data) { Curve * this_curve = get_curve_from_pointer (data); this_curve -> autoscale[0] = TRUE; this_curve -> autoscale[1] = TRUE; update_curve (data); } /*! \fn CurveExtra * init_extra (tint * id) \brief create extra data set \param id the associated data pointer */ CurveExtra * init_extra (tint * id) { CurveExtra * ctmp = g_malloc0(sizeof*ctmp); ctmp -> id.a = id -> a; ctmp -> id.b = id -> b; ctmp -> id.c = id -> c; ctmp -> layout = curve_default_layout (get_project_by_id(id -> a), id -> b, id -> c); ctmp -> layout -> datacolor.red = 0.0; ctmp -> layout -> datacolor.green = 0.0; ctmp -> layout -> datacolor.blue = 0.0; return ctmp; } /*! \fn void add_extra (ExtraSets * sets, tint * id) \brief add set to the extra set(s) \param sets the extra set(s) \param id the associated data pointer */ void add_extra (ExtraSets * sets, tint * id) { if (sets -> extras == 0) { sets -> first = init_extra (id); sets -> last = sets -> first; } else { sets -> last -> next = init_extra (id); sets -> last -> next -> prev = sets -> last; sets -> last = sets -> last -> next; } sets -> extras ++; } /*! \fn void remove_extra (ExtraSets * sets, CurveExtra * ctmp) \brief remove data from extra set(s) \param sets the extra set(s) \param ctmp the data set to remove from the extra set(s) */ void remove_extra (ExtraSets * sets, CurveExtra * ctmp) { if (sets -> extras == 1) { g_free (ctmp); sets -> first = NULL; sets -> last = NULL; } else { if (ctmp -> prev == NULL) { sets -> first = ctmp -> next; g_free (ctmp); sets -> first -> prev = NULL; } else if (ctmp -> next == NULL) { ctmp = ctmp -> prev; g_free (ctmp -> next); ctmp -> next = NULL; sets -> last = ctmp; } else { ctmp -> prev -> next = ctmp -> next; ctmp -> next -> prev = ctmp -> prev; g_free (ctmp); } } sets -> extras --; } void curve_window_add_menu_bar (tint * data); /*! \fn void prep_extra_rid (tint * data) \brief look up extra data set(s) for curve \param data the associated data pointer */ void prep_extra_rid (tint * data) { int i; extrarid = allocdint (nprojects, NCALCS); Curve * this_curve = get_curve_from_pointer (data); if (this_curve -> extrac) { if (this_curve -> extrac -> extras > 0) { CurveExtra * ctmp = this_curve -> extrac -> first; for (i=0; i extrac -> extras; i++) { extrarid[ctmp -> id.a][ctmp -> id.b] ++; if (ctmp -> next != NULL) ctmp = ctmp -> next; } } } } /*! \fn void action_to_plot (gpointer data) \brief add to plot, or, remove curve from plot \param data the associated data pointer */ void action_to_plot (gpointer data) { int i; tint * id = (tint *)data; gboolean remove = FALSE; project * this_proj = get_project_by_id (activeg); Curve * this_curve = this_proj -> analysis[activer] -> curves[activec]; if (this_curve -> extrac > 0) { CurveExtra * ctmp = this_curve -> extrac -> first; for (i=0; i extrac -> extras; i++) { if (ctmp -> id.a == id -> a && ctmp -> id.b == id -> b && ctmp -> id.c == id -> c) { remove = TRUE; break; } if (ctmp -> next != NULL) ctmp = ctmp -> next; } if (! remove) { add_extra (this_curve -> extrac, id); } else { remove_extra (this_curve -> extrac, ctmp); } } else { add_extra (this_curve -> extrac, id); } curve_window_add_menu_bar (& this_proj -> analysis[activer] -> idcc[activec]); update_curve ((gpointer)& this_proj -> analysis[activer] -> idcc[activec]); } /*! \fn G_MODULE_EXPORT void curve_edit_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data) \brief curve menu edit action callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void curve_edit_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data) { edit_data (data); } /*! \fn G_MODULE_EXPORT void curve_add_remove_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data) \brief curve menu add / remove action callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void curve_add_remove_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data) { action_to_plot (data); } /*! \fn G_MODULE_EXPORT void curve_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data) \brief curve menu action callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void curve_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data) { gchar * name = g_strdup_printf ("%s", g_action_get_name(G_ACTION(action))); if (g_strcmp0 (name, "save.data") == 0) { write_curve (data); } else if (g_strcmp0 (name, "close.curve") == 0) { hide_curve (data); } else if (g_strcmp0 (name, "edit.curve") == 0) { edit_curve (data); } else if (g_strcmp0 (name, "save.image") == 0) { save_image (data); } else if (g_strcmp0 (name, "autoscale.curve") == 0) { autoscale (data); } else if (g_strcmp0 (name, "shortcuts.curve") == 0) { Curve * this_curve = get_curve_from_pointer (data); this_curve -> shortcuts = destroy_this_widget (this_curve -> shortcuts); this_curve -> shortcuts = shortcuts_window (G_N_ELEMENTS(curve_group_by_section), curve_group_by_section, G_N_ELEMENTS(curve_shortcut_by_group), curve_shortcut_by_group, curve_section_names, curve_group_names, curve_shortcuts); } } /*! \fn gboolean was_not_added (ExtraSets * sets, int a, int b, int c) \brief test if already in the menu or not \param sets the target extra sets \param a the target project \param b the target calculation \param c the target curve */ gboolean was_not_added (ExtraSets * sets, int a, int b, int c) { int i, j; CurveExtra * ctmp = sets -> first; for (i=0; i extras; i++) { if (ctmp -> id.a == a && ctmp -> id.b == b) { for (j=0; j analysis[b] -> numc; j++) { if (ctmp -> id.c == c) return FALSE; } } if (ctmp -> next != NULL) ctmp = ctmp -> next; } return TRUE; } /*! \fn GMenu * curve_section (GSimpleActionGroup * action_group, gchar * act, ExtraSets * sets, gboolean add, int edit, int a, int b, tint * data) \brief create curve submenu \param action_group the menu action group \param act the action string \param sets the target extra sets \param add remove (0) or add (1) menu \param edit data edition (1 / 0) \param a target project \param b target calculation \param data the associated data pointer */ GMenu * curve_section (GSimpleActionGroup * action_group, gchar * act, ExtraSets * sets, gboolean add, int edit, int a, int b, tint * data) { GMenu * menu = g_menu_new (); gchar * str_a, * str_b, * str_c; gchar * text[2] = {"curve.action", "edit.data"}; project * this_proj = get_project_by_id(a); int g, h, i; if (b == SKT) { g = (data -> c < get_project_by_id(data -> a) -> skt_sets) ? this_proj -> skt_sets : this_proj -> sqw_sets; h = (data -> c < get_project_by_id(data -> a) -> skt_sets) ? 0 : this_proj -> skt_sets; } else { g = this_proj -> analysis[b] -> numc; h = 0; } for (i=0; i analysis[b] -> curves[i+h] -> ndata > 0) { if (((a != data -> a || b != data -> b || i+h != data -> c) && add == was_not_added(sets, a, b, i+h)) || (a == data -> a && b == data -> b && i+h == data -> c && edit)) { #ifdef GTK3 str_a = g_strdup_printf ("%s", prepare_for_title(this_proj -> analysis[b] -> curves[i+h] -> name)); #else str_a = g_strdup_printf ("%s", this_proj -> analysis[b] -> curves[i+h] -> name); #endif str_b = g_strdup_printf ("%s.%d-%d-%d", text[edit], a, b, i+h); str_c = g_strdup_printf ("%s.%s", act, str_b); append_menu_item (menu, (const gchar *)str_a, (const gchar *)str_c, NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); g_free (str_a); g_free (str_c); if (edit) { widget_add_action (action_group, (const gchar *)str_b, G_CALLBACK(curve_edit_menu_action), & this_proj -> analysis[b] -> idcc[i+h], FALSE, FALSE, FALSE, NULL); } else { widget_add_action (action_group, (const gchar *)str_b, G_CALLBACK(curve_add_remove_menu_action), & this_proj -> analysis[b] -> idcc[i+h], FALSE, FALSE, FALSE, NULL); } g_free (str_b); } } } return menu; } /*! \fn GMenu * create_curve_submenu (GSimpleActionGroup * action_group, gchar * act, tint * data, gboolean add, int edit) \brief create curve add / remove submenus \param action_group the menu action group \param act the action string \param data the associated data pointer \param add remove (0) or add (1) menu \param edit data edition (1 / 0) */ GMenu * create_curve_submenu (GSimpleActionGroup * action_group, gchar * act, tint * data, gboolean add, int edit) { project * this_proj; GMenu * menu = g_menu_new (); int i, j, k, l; gboolean * create_proj = allocbool (nprojects); gboolean ** create_menu = allocdbool (nprojects, NCALCS); for (i=0; i analysis[data -> b]) { for (j=0; j analysis[data -> b] -> c_sets; j++) { k = this_proj -> analysis[data -> b] -> compat_id[j]; create_menu[i][k] = FALSE; if (data -> b == SKT) { l = (data -> c < get_project_by_id(data -> a) -> skt_sets) ? this_proj -> skt_sets : this_proj -> sqw_sets; } else { l = this_proj -> analysis[k] -> numc; } if (((add && extrarid[i][k] < l) || (! add && extrarid[i][k] > 0)) && this_proj -> analysis[k] -> calc_ok) { create_menu[i][k] = TRUE; create_proj[i] = TRUE; } } } } if (edit) { create_menu[data -> a][data -> b] = TRUE; create_proj[data -> a] = TRUE; } Curve * this_curve = get_curve_from_pointer (data); GMenu * smenu; for (i=0; i extrac, add, edit, i, j, data)); } // This way GTK3 will not be able to apply markup #ifdef GTK3 append_submenu (menu, prepare_for_title(get_project_by_id(i) -> name), smenu); #else append_submenu (menu, get_project_by_id(i) -> name, smenu); #endif g_object_unref (smenu); } } g_free (create_proj); g_free (create_menu); return menu; } extern GIcon * get_gicon_from_data (int format, const gchar * icon); /*! \fn GMenu * create_curve_menu (gchar * str) \brief create the curve submenu \param str the action string */ GMenu * create_curve_menu (gchar * str) { GMenu * menu = g_menu_new (); gchar * act = g_strdup_printf ("%s.edit.curve", str); append_menu_item (menu, _("Edit Curve"), (const gchar *)act, "E", NULL, IMG_STOCK, PAGE_SETUP, FALSE, FALSE, FALSE, NULL); g_free (act); act = g_strdup_printf ("%s.save.image", str); append_menu_item (menu, _("Export Image"), (const gchar *)act, "I", NULL, IMG_FILE, PACKAGE_IMG, FALSE, FALSE, FALSE, NULL); g_free (act); return menu; } /*! \fn GMenu * edit_data_section (GSimpleActionGroup * action_group, gchar * str, tint * data) \brief create the edit data submenu \param action_group the menu action group \param str the action string \param data the associated data pointer */ GMenu * edit_data_section (GSimpleActionGroup * action_group, gchar * str, tint * data) { GMenu * menu = g_menu_new (); GMenuItem * item = g_menu_item_new (_("Edit Data"), NULL); gchar * str_edit = g_strdup_printf ("%s-win-edit", str); g_menu_item_set_attribute (item, "custom", "s", str_edit, NULL); g_free (str_edit); #ifdef MENU_ICONS GIcon * gicon = get_gicon_from_data (IMG_STOCK, EDITA); g_menu_item_set_icon (item, gicon); g_object_unref (gicon); #endif g_menu_item_set_submenu (item, (GMenuModel *)create_curve_submenu (action_group, str, data, FALSE, 1)); g_menu_append_item (menu, item); g_object_unref (item); return menu; } /*! \fn GMenu * curve_close_section (gchar * str) \brief create the close menu item \param str the action string */ GMenu * curve_close_section (gchar * str) { GMenu * menu = g_menu_new (); gchar * act = g_strdup_printf ("%s.close.curve", str); append_menu_item (menu, _("Close"), (const gchar *)act, "C", NULL, IMG_STOCK, FCLOSE, FALSE, FALSE, FALSE, NULL); g_free (act); return menu; } /*! \fn GMenu * curve_help_menu (gchar * str) \brief create the help menu item \param str the action string */ GMenu * curve_help_menu (gchar * str) { GMenu * menu = g_menu_new (); gchar * act = g_strdup_printf ("%s.shortcuts.curve", str); append_menu_item (menu, _("Shortcuts"), (const gchar *)act, NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); g_free (act); return menu; } /*! \fn GMenu * create_data_menu (GSimpleActionGroup * action_group, int pop, gchar * str, tint * data) \brief create the save data submenu \param action_group the menu action group \param pop 0 = menu bar, 1 = popup menu \param str the action string \param data the associated data pointer */ GMenu * create_data_menu (GSimpleActionGroup * action_group, int pop, gchar * str, tint * data) { GMenu * menu = g_menu_new (); g_menu_append_section (menu, NULL, (GMenuModel*)edit_data_section(action_group, str, data)); gchar * act = g_strdup_printf ("%s.save.data", str); append_menu_item (menu, _("Save Data"), (const gchar *)act, "S", NULL, IMG_STOCK, FSAVEAS, FALSE, FALSE, FALSE, NULL); g_free (act); if (! pop) g_menu_append_section (menu, NULL, (GMenuModel *)curve_close_section(str)); return menu; } /*! \fn GMenu * curve_menu_bar (GSimpleActionGroup * action_group, gchar * str, tint * data) \brief create the curve window menu bar \param action_group the menu action group \param str the action string \param data the associated data pointer */ GMenu * curve_menu_bar (GSimpleActionGroup * action_group, gchar * str, tint * data) { GMenu * menu = g_menu_new (); prep_extra_rid (data); append_submenu (menu, _("Data"), create_data_menu(action_group, 0, str, data)); g_free (extrarid); append_submenu (menu, _("Curve"), create_curve_menu(str)); append_submenu (menu, _("Help"), curve_help_menu(str)); return menu; } /*! \fn void curve_window_add_menu_bar (tint * data) \brief add menu bar to the curve window \param data the associated data pointer */ void curve_window_add_menu_bar (tint * data) { Curve * this_curve = get_curve_from_pointer (data); this_curve -> pos = destroy_this_widget (this_curve -> pos); this_curve -> pos = gtk_label_new (" "); this_curve -> curve_hbox = destroy_this_widget (this_curve -> curve_hbox); this_curve -> curve_hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_curve -> curve_vbox, this_curve -> curve_hbox, FALSE, FALSE, 0); gchar * str = g_strdup_printf ("c-%d", this_curve -> action_id); #ifdef GTK3 GtkWidget * menu = gtk_menu_bar_new_from_model ((GMenuModel *)curve_menu_bar(this_curve -> action_group, str, data)); #else GtkWidget * menu = gtk_popover_menu_bar_new_from_model ((GMenuModel *)curve_menu_bar(this_curve -> action_group, str, data)); #endif g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, this_curve -> curve_hbox, menu, TRUE, TRUE, 0); gtk_label_align (this_curve -> pos, 1.0, 0.5); add_box_child_end (this_curve -> curve_hbox, this_curve -> pos, FALSE, FALSE, 0); show_the_widgets (this_curve -> curve_hbox); } /*! \fn GMenu * create_add_remove_section (GSimpleActionGroup * action_group, gchar * act, int num, tint * data) \brief create the add / remove curve submenus \param action_group the menu action group \param act the action string \param num the number of curve(s) to add \param data the associatec data pointer */ GMenu * create_add_remove_section (GSimpleActionGroup * action_group, gchar * act, int num, tint * data) { GMenu * menu = g_menu_new (); GMenuItem * item = g_menu_item_new (_("Add Data Set"), NULL); #ifdef MENU_ICONS GIcon * gicon = get_gicon_from_data (IMG_STOCK, LIST_ADD); g_menu_item_set_icon (item, gicon); g_object_unref (gicon); #endif Curve * this_curve = get_curve_from_pointer (data); if (this_curve -> extrac -> extras < num) { g_menu_item_set_submenu (item, (GMenuModel *)create_curve_submenu (action_group, act, data, TRUE, 0)); } else { g_menu_item_set_attribute (item, "action", "s", "None", NULL); } g_menu_append_item (menu, item); g_object_unref (item); item = g_menu_item_new (_("Remove Data Set"), NULL); #ifdef MENU_ICONS gicon = get_gicon_from_data (IMG_STOCK, LIST_REM); g_menu_item_set_icon (item, gicon); g_object_unref (gicon); #endif if (this_curve -> extrac -> extras > 0) { g_menu_item_set_submenu (item, (GMenuModel *)create_curve_submenu (action_group, act, data, FALSE, 0)); } else { g_menu_item_set_attribute (item, "action", "s", "None", NULL); } g_menu_append_item (menu, item); g_object_unref (item); return menu; } /*! \fn GMenu * autoscale_section (gchar * str) \brief create autoscale menu item \param str the action string id */ GMenu * autoscale_section (gchar * str) { GMenu * menu = g_menu_new (); gchar * act = g_strdup_printf ("%s.autoscale.curve", str); append_menu_item (menu, _("Autoscale"), (const gchar *)act, "A", NULL, IMG_STOCK, FITBEST, FALSE, FALSE, FALSE, NULL); g_free (act); return menu; } /*! \fn GtkWidget * curve_popup_menu (gpointer data) \brief create curve popup menu \param data the associated data pointer */ GtkWidget * curve_popup_menu (gpointer data) { GtkWidget * curve_pop_menu; int i, j, k, l; CurveState * cstate = (CurveState *)data; activeg = cstate -> id -> a; activer = cstate -> id -> b; activec = cstate -> id -> c; GSimpleActionGroup * curve_popup_actions = g_simple_action_group_new (); GSimpleAction * curve_popup_action[6]; curve_popup_action[0] = g_simple_action_new ("save.data", NULL); curve_popup_action[1] = g_simple_action_new ("close.curve", NULL); curve_popup_action[2] = g_simple_action_new ("edit.curve", NULL); curve_popup_action[3] = g_simple_action_new ("save.image", NULL); curve_popup_action[4] = g_simple_action_new ("autoscale.curve", NULL); curve_popup_action[5] = g_simple_action_new ("shortcuts.curve", NULL); for (i=0; i<6; i++) { g_action_map_add_action (G_ACTION_MAP(curve_popup_actions), G_ACTION(curve_popup_action[i])); g_signal_connect (curve_popup_action[i], "activate", G_CALLBACK(curve_menu_bar_action), cstate -> id); } prep_extra_rid (cstate -> id); Curve * this_curve = get_project_by_id(cstate -> id -> a) -> analysis[cstate -> id -> b] -> curves[cstate -> id -> c]; gchar * str = g_strdup_printf ("mc-%d", this_curve -> action_id); GMenu * menu = g_menu_new (); g_menu_append_section (menu, NULL, (GMenuModel *)create_data_menu(curve_popup_actions, 1, str, cstate -> id)); g_menu_append_section (menu, NULL, (GMenuModel *)create_curve_menu(str)); i = -1; project * this_proj = get_project_by_id (activeg); for ( j=0 ; j < this_proj -> analysis[activer] -> c_sets; j++) { k = this_proj -> analysis[activer] -> compat_id[j]; for ( l=0 ; l < nprojects; l++ ) { if (get_project_by_id(l) -> analysis) { if (get_project_by_id(l) -> analysis[k]) { if (activer == SKT) { i += (activec < this_proj -> skt_sets) ? get_project_by_id(l) -> skt_sets : get_project_by_id(l) -> sqw_sets; } else { i += get_project_by_id(l) -> analysis[k] -> numc; } } } } } // i is the potential number of extra curves, skt is messing with that g_menu_append_section (menu, NULL, (GMenuModel *)create_add_remove_section(curve_popup_actions, str, i, cstate -> id)); g_menu_append_section (menu, NULL, (GMenuModel *)autoscale_section(str)); g_menu_append_section (menu, NULL, (GMenuModel *)curve_close_section(str)); g_menu_append_section (menu, NULL, (GMenuModel *)curve_help_menu(str)); g_free (extrarid); #ifdef GTK4 curve_pop_menu = gtk_popover_menu_new_from_model_full ((GMenuModel *)menu, GTK_POPOVER_MENU_NESTED); gtk_widget_set_parent (curve_pop_menu, this_curve -> window); gtk_widget_set_size_request (curve_pop_menu, -1, 305); #else curve_pop_menu = gtk_menu_new_from_model ((GMenuModel *)menu); #endif // Finally adding actions to the menu gtk_widget_insert_action_group (curve_pop_menu, str, G_ACTION_GROUP(curve_popup_actions)); g_free (str); return curve_pop_menu; } atomes_1.3.1/src/curve/glyph.c0000664000175000017500000001647015212624223015717 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file glyph.c * @short Functions to draw the glyphs * @author Sébastien Le Roux */ /* * This file: 'glyph.c' * * Contains: * - Functions to draw the glyphs * * List of functions: void draw_poly (cairo_t * to, double x, double y, double size, double step, double initp); void draw_glyph (cairo_t * in, int theglyph, double x, double y, ColRGBA gcolor, double size); */ #include #include #include "global.h" #include "curve.h" /*! \fn void draw_poly (cairo_t * to, double x, double y, double size, double step, double initp) \brief draw polyhedra glyph \param to the cairo drawing context to use for the draw \param x x position \param y y position \param size glyph size \param step number of points \param initp starting position */ void draw_poly (cairo_t * to, double x, double y, double size, double step, double initp) { double px, py; double alpha; double astep; double astart; astart = 2*pi / initp; px = x + size * cos (astart); py = y + size * sin (astart); astep = 2 * pi / step; cairo_move_to (to, px, py); for (alpha =0.0 ; alpha <= 2*pi ; alpha += astep) { px = x + size * cos (astart + alpha); py = y + size *sin (astart + alpha); cairo_line_to (to, px, py); } } /*! \fn void draw_glyph (cairo_t * in, int theglyph, double x, double y, ColRGBA gcolor, double size) \brief draw glyph at (x,y) \param in the cairo drawing context to use for the draw \param theglyph the type of glyph \param x x position \param y y position \param gcolor the glyph color \param size the glyph size */ void draw_glyph (cairo_t * in, int theglyph, double x, double y, ColRGBA gcolor, double size) { double step; double start; double width; double cdash[3]; double offset; int dcount; int idglyph; double starttab[] = {1.0, 4.0, 2.0, 1.33333}; dcount = cairo_get_dash_count (in); cairo_get_dash (in, cdash, & offset); cairo_set_dash (in, dashed1, len1, 0.0); width = cairo_get_line_width (in); cairo_set_line_width (in, 1.0); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 1.0); if (theglyph == 1) { cairo_move_to (in, x + size/2.0, y - size/2.0); cairo_line_to (in, x - size/2.0, y + size/2.0); cairo_move_to (in, x + size/2.0, y + size/2.0); cairo_line_to (in, x - size/2.0, y - size/2.0); cairo_stroke (in); } if (theglyph > 1 && theglyph < 7) { cairo_move_to (in, x, y); cairo_rectangle (in, x - size/2.0, y - size/2.0, size, size); if (theglyph == 2) { cairo_fill(in); } else if (theglyph == 3) { cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); cairo_move_to (in, x, y); cairo_rectangle (in, x - size/2.0, y - size/2.0, size, size); cairo_fill (in); } else if (theglyph == 4) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); cairo_move_to (in, x, y); cairo_rectangle (in, x - size/2.0, y - size/2.0, size, size); cairo_fill (in); cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); cairo_move_to (in, x, y); cairo_rectangle (in, x - size/2.0, y - size/2.0, size, size); cairo_fill (in); } else if (theglyph == 5) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); cairo_move_to (in, x, y); cairo_rectangle (in, x - size/2.0, y - size/2.0, size, size); cairo_fill (in); } cairo_stroke (in); } else if (theglyph >= 7 && theglyph < 12) { step = 4.0; start = 1.0; draw_poly (in, x, y, size, step, start); if (theglyph == 7) { cairo_fill(in); } else if (theglyph == 8) { cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); draw_poly (in, x, y, size, step, start); cairo_fill (in); } else if (theglyph == 9) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); draw_poly (in, x, y, size, step, start); cairo_fill (in); cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); draw_poly (in, x, y, size, step, start); cairo_fill (in); } else if (theglyph == 10) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); draw_poly (in, x, y, size, step, start); cairo_fill (in); } cairo_stroke (in); } else if (theglyph >= 12 && theglyph < 17) { cairo_arc (in, x, y, size, 0.0, 2*pi); if (theglyph == 12) { cairo_fill(in); } else if (theglyph == 13) { cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); cairo_arc (in, x, y, size, 0.0, 2*pi); cairo_fill (in); } else if (theglyph == 14) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); cairo_arc (in, x, y, size, 0.0, 2*pi); cairo_fill (in); cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); cairo_arc (in, x, y, size, 0.0, 2*pi); cairo_fill (in); } else if (theglyph == 15) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); cairo_arc (in, x, y, size, 0.0, 2*pi); cairo_fill (in); } cairo_stroke (in); } else if (theglyph > 16) { step = 3.0; idglyph = (theglyph - 17) / 5; start = starttab[idglyph]; draw_poly (in, x, y, size, step, start); if (theglyph == 18 + idglyph*5) { cairo_fill(in); } else if (theglyph == 19 + idglyph*5) { cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); draw_poly (in, x, y, size, step, start); cairo_fill (in); } else if (theglyph == 20 + idglyph*5) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); draw_poly (in, x, y, size, step, start); cairo_fill (in); cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); draw_poly (in, x, y, size, step, start); cairo_fill (in); } else if (theglyph == 21 + idglyph*5) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); draw_poly (in, x, y, size, step, start); cairo_fill (in); } cairo_stroke (in); } cairo_set_dash (in, cdash, dcount, offset); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 1.0); cairo_set_line_width (in, width); } atomes_1.3.1/src/curve/tab-4.c0000664000175000017500000010044515212624223015477 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file tab-4.c * @short 4th tab of the curve layout edition dialog * @author Sébastien Le Roux */ /* * This file: 'tab-4.c' * * Contains: * - The 4th tab of the curve layout edition dialog * * List of functions: int get_active_axis (this_curve -> curve_edit); G_MODULE_EXPORT gboolean scroll_set_ticks_angle (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void ticks_angle_has_changed (gpointer data, double value); G_MODULE_EXPORT void set_axis_min (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_axis_max (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_max_div (GtkEntry * maj, gpointer data); G_MODULE_EXPORT void set_min_div_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_ticks_size_major_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_ticks_size_minor_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_lab_digit_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_lab_shift_x_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_lab_shift_y_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_axis_title_x_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_axis_title_y_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_io_ticks (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_pos_ticks (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_pos_labels (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_ticks_labels_font (GtkFontButton * fontb, gpointer data); G_MODULE_EXPORT void set_ticks_angle (GtkRange * range, gpointer data); G_MODULE_EXPORT void to_axis_title (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void to_axis_title (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_grid (GtkCheckButton * grid, gpointer data); G_MODULE_EXPORT void set_grid (GtkToggleButton * grid, gpointer data); G_MODULE_EXPORT void set_autoscale (GtkButton * autosc, gpointer data); G_MODULE_EXPORT void set_axis (GtkCheckButton * axis, gpointer data); G_MODULE_EXPORT void set_axis (GtkToggleButton * axis, gpointer data); G_MODULE_EXPORT void set_axis_legend (GtkEntry * xtit, gpointer data); G_MODULE_EXPORT void set_axis_title_font (GtkFontButton * fontb, gpointer data); G_MODULE_EXPORT void set_scale (GtkComboBox * sbox, gpointer data); G_MODULE_EXPORT void update_axis (GtkComboBox * widg, gpointer data); GtkWidget * create_tab_4 (gpointer data); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" /*! \fn int get_active_axis (curve_edition * cedit) \brief get active axis \param cedit the target curve_edition pointer */ int get_active_axis (curve_edition * cedit) { return combo_get_active (cedit -> axischoice); } /*! \fn G_MODULE_EXPORT void set_axis_min (GtkEntry * res, gpointer data) \brief set axis min \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_min (GtkEntry * res, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); if (i > -1) { const gchar * m; m = entry_get_text (res); if (string_to_double ((gpointer)m) < this_curve -> axmax[i]) { this_curve -> axmin[i] = string_to_double ((gpointer)m); } else { show_warning (_("Axis min must be < to axis max"), this_curve -> window); } update_entry_double (res, this_curve -> axmin[i]); update_curve (data); } } /*! \fn G_MODULE_EXPORT void set_axis_max (GtkEntry * res, gpointer data) \brief set axis max \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_max (GtkEntry * res, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); const gchar * m; m = entry_get_text (res); if (string_to_double ((gpointer)m) > this_curve -> axmin[i]) { this_curve -> axmax[i] = string_to_double ((gpointer)m); } else { show_warning (_("Axis max must be > to axis min"), this_curve -> window); } update_entry_double (res, this_curve -> axmax[i]); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_max_div (GtkEntry * maj, gpointer data) \brief set number of major tick divisions \param maj the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_max_div (GtkEntry * maj, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); double tmp; const gchar * m; m = entry_get_text (maj); tmp = string_to_double ((gpointer)m); if (tmp != 0.0) { this_curve -> majt[i] = tmp; update_curve (data); } else { show_warning (_("Major tick must be > 0.0"), this_curve -> window); } update_entry_double (maj, this_curve -> majt[i]); } /*! \fn G_MODULE_EXPORT void set_min_div_spin (GtkSpinButton * res, gpointer data) \brief set number of minor tick division(s) \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_min_div_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; get_curve_from_pointer ((gpointer)& cd) -> mint[ad -> d] = gtk_spin_button_get_value_as_int(res) + 1; update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_ticks_size_major_spin (GtkSpinButton * res, gpointer data) \brief set major ticks size \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_ticks_size_major_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; get_curve_from_pointer ((gpointer)& cd) -> majt_size[ad -> d] = gtk_spin_button_get_value_as_int(res); update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_ticks_size_minor_spin (GtkSpinButton * res, gpointer data) \brief set minor ticks size \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_ticks_size_minor_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; Curve * this_curve = get_curve_from_pointer ((gpointer)& cd); this_curve -> mint_size[ad -> d] = gtk_spin_button_get_value_as_int(res); update_entry_int (GTK_ENTRY(res), this_curve -> mint_size[ad -> d]); update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_lab_digit_spin (GtkSpinButton * res, gpointer data) \brief set ticks label number of digit(s) \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_lab_digit_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; Curve * this_curve = get_curve_from_pointer ((gpointer)& cd); this_curve -> labels_digit[ad -> d] = gtk_spin_button_get_value_as_int(res); update_entry_int (GTK_ENTRY(res), this_curve -> labels_digit[ad -> d]); update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_lab_shift_x_spin (GtkSpinButton * res, gpointer data) \brief set ticks label position shift on x axis \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_lab_shift_x_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; Curve * this_curve = get_curve_from_pointer ((gpointer)& cd); this_curve -> labels_shift_x[ad -> d] = gtk_spin_button_get_value_as_int(res); update_entry_int (GTK_ENTRY(res), this_curve -> labels_shift_x[ad -> d]); update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_lab_shift_y_spin (GtkSpinButton * res, gpointer data) \brief set ticks label position shift on y axis \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_lab_shift_y_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; Curve * this_curve = get_curve_from_pointer ((gpointer)& cd); this_curve -> labels_shift_y[ad -> d] = gtk_spin_button_get_value_as_int(res); update_entry_int (GTK_ENTRY(res), this_curve -> labels_shift_y[ad -> d]); update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_axis_title_x_spin (GtkSpinButton * res, gpointer data) \brief set axis title position shift on x axis \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_title_x_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; get_curve_from_pointer ((gpointer)& cd) -> axis_title_x[ad -> d] = gtk_spin_button_get_value_as_int(res); update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_axis_title_y_spin (GtkSpinButton * res, gpointer data) \brief set axis title position shift on y axis \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_title_y_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; tint cd; cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; get_curve_from_pointer ((gpointer)& cd) -> axis_title_y[ad -> d] = gtk_spin_button_get_value_as_int(res); update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_io_ticks (GtkComboBox * box, gpointer data) \brief change tick marks location \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_io_ticks (GtkComboBox * box, gpointer data) { Curve * this_curve = get_curve_from_pointer(data); int i = get_active_axis (this_curve -> curve_edit); this_curve -> ticks_io[i] = combo_get_active ((GtkWidget *)box); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_pos_ticks (GtkComboBox * box, gpointer data) \brief change tick marks position \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_pos_ticks (GtkComboBox * box, gpointer data) { Curve * this_curve = get_curve_from_pointer(data); int i = get_active_axis (this_curve -> curve_edit); this_curve -> ticks_pos[i] = combo_get_active ((GtkWidget *)box); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_pos_labels (GtkComboBox * box, gpointer data) \brief change ticks labels position \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_pos_labels (GtkComboBox * box, gpointer data) { Curve * this_curve = get_curve_from_pointer(data); int i = get_active_axis (this_curve -> curve_edit); this_curve -> labels_pos[i] = combo_get_active ((GtkWidget *)box); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_ticks_labels_font (GtkFontButton * fontb, gpointer data) \brief set ticks labels font \param fontb the GtkFontButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_ticks_labels_font (GtkFontButton * fontb, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); g_free (this_curve -> labels_font[i]); this_curve -> labels_font[i] = g_strdup_printf ("%s", gtk_font_chooser_get_font (GTK_FONT_CHOOSER(fontb))); update_curve (data); } /*! \fn void ticks_angle_has_changed (gpointer data, double value) \brief set ticks angle \param data the associated data pointer \param value the new ticks angle */ void ticks_angle_has_changed (gpointer data, double value) { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); this_curve -> labels_angle[i] = value * (pi/180.0); update_curve (data); } /*! \fn G_MODULE_EXPORT gboolean scroll_set_ticks_angle (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief set ticks angle callback - scroll \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_ticks_angle (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { ticks_angle_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_ticks_angle (GtkRange * range, gpointer data) \brief set ticks angle callback - range \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_ticks_angle (GtkRange * range, gpointer data) { ticks_angle_has_changed (data, gtk_range_get_value (range)); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_axis_title (GtkCheckButton * but, gpointer data) \brief show / hide axis title toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_axis_title (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void to_axis_title (GtkToggleButton * but, gpointer data) \brief show / hide axis title toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_axis_title (GtkToggleButton * but, gpointer data) #endif { Curve * this_curve = get_curve_from_pointer (data); curve_edition * cedit = this_curve -> curve_edit; int i = get_active_axis (cedit); if (button_get_status ((GtkWidget *)but)) { widget_set_sensitive (cedit -> axis_title, 0); g_free (this_curve -> axis_title[i]); this_curve -> axis_title[i] = g_strdup_printf ("%s", default_title (i, data)); update_entry_text (GTK_ENTRY(cedit -> axis_title), this_curve -> axis_title[i]); } else { widget_set_sensitive (cedit -> axis_title, 1); } update_curve (data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_grid (GtkCheckButton * grid, gpointer data) \brief show / hide grid toggle callback GTK4 \param grid the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_grid (GtkCheckButton * grid, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_grid (GtkToggleButton * grid, gpointer data) \brief show / hide grid toggle callback GTK3 \param grid the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_grid (GtkToggleButton * grid, gpointer data) #endif { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); this_curve -> show_grid[i] = button_get_status ((GtkWidget *)grid); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_autoscale (GtkButton * autosc, gpointer data) \brief autoscale axis \param autosc the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_autoscale (GtkButton * autosc, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); this_curve -> autoscale[i] = TRUE; update_curve (data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_axis (GtkCheckButton * axis, gpointer data) \brief show / hide axis toggle callback GTK4 \param axis the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis (GtkCheckButton * axis, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_axis (GtkToggleButton * axis, gpointer data) \brief show / hide axis toggle callback GTK3 \param axis the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis (GtkToggleButton * axis, gpointer data) #endif { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); this_curve -> show_axis[i] = button_get_status ((GtkWidget *)axis); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_axis_legend (GtkEntry * xtit, gpointer data) \brief set axis legend entry callback \param xtit the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_legend (GtkEntry * xtit, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); g_free (this_curve -> axis_title[i]); this_curve -> axis_title[i] = g_strdup_printf ("%s", entry_get_text (xtit)); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_axis_title_font (GtkFontButton * fontb, gpointer data) \brief set axis title font \param fontb the GtkFontButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_title_font (GtkFontButton * fontb, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); g_free (this_curve -> axis_title_font[i]); this_curve -> axis_title_font[i] = g_strdup_printf ("%s", gtk_font_chooser_get_font (GTK_FONT_CHOOSER(fontb))); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_scale (GtkComboBox * sbox, gpointer data) \brief change the axis scale \param sbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_scale (GtkComboBox * sbox, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); int i = get_active_axis (this_curve -> curve_edit); int j = combo_get_active((GtkWidget *)sbox); this_curve -> scale[i] = j; widget_set_sensitive (this_curve -> curve_edit -> majt, ! j); widget_set_sensitive (this_curve -> curve_edit -> nmi[i], ! j); this_curve -> autoscale[i] = TRUE; update_curve (data); } /*! \fn G_MODULE_EXPORT void update_axis (GtkComboBox * box, gpointer data) \brief change the axis \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_axis (GtkComboBox * box, gpointer data) { int i; Curve * this_curve = get_curve_from_pointer (data); curve_edition * cedit = this_curve -> curve_edit; i = combo_get_active ((GtkWidget *)box); update_entry_double (GTK_ENTRY(cedit -> vmin), this_curve -> axmin[i]); update_entry_double (GTK_ENTRY(cedit -> vmax), this_curve -> axmax[i]); update_entry_double (GTK_ENTRY(cedit -> majt), this_curve -> majt[i]); combo_set_active (cedit -> ticks_inout_box, this_curve -> ticks_io[i]); combo_set_active (cedit -> ticks_pos_box, this_curve -> ticks_pos[i]); combo_set_active (cedit -> labels_pos_box, this_curve -> labels_pos[i]); gtk_font_chooser_set_font (GTK_FONT_CHOOSER(cedit -> ticks_labels_font), this_curve -> labels_font[i]); gtk_range_set_value (GTK_RANGE(cedit -> ticks_labels_angle), this_curve -> labels_angle[i] * (180.0/pi)); if (((tint *)data) -> b < MSD) { widget_set_sensitive (cedit -> scale_box, 0); } else { g_signal_handler_disconnect (G_OBJECT(cedit -> scale_box), cedit -> handler_id); combo_set_active (cedit -> scale_box, this_curve -> scale[i]); cedit -> handler_id = g_signal_connect (G_OBJECT(cedit -> scale_box), "changed", G_CALLBACK(set_scale), data); widget_set_sensitive (cedit -> scale_box, 1); /* widget_set_sensitive (cedit -> vmax, ! this_curve -> scale[i]); widget_set_sensitive (cedit -> vmin, ! this_curve -> scale[i]); */ widget_set_sensitive (cedit -> majt, ! this_curve -> scale[i]); widget_set_sensitive (cedit -> nmi[i], ! this_curve -> scale[i]); } hide_the_widgets (cedit -> nmi[! i]); hide_the_widgets (cedit -> ndi[! i]); hide_the_widgets (cedit -> mats[! i]); hide_the_widgets (cedit -> mits[! i]); hide_the_widgets (cedit -> nptx[! i]); hide_the_widgets (cedit -> npty[! i]); hide_the_widgets (cedit -> tptx[! i]); hide_the_widgets (cedit -> tpty[! i]); show_the_widgets (cedit -> nmi[i]); show_the_widgets (cedit -> ndi[i]); show_the_widgets (cedit -> mats[i]); show_the_widgets (cedit -> mits[i]); show_the_widgets (cedit -> nptx[i]); show_the_widgets (cedit -> npty[i]); show_the_widgets (cedit -> tptx[i]); show_the_widgets (cedit -> tpty[i]); button_set_status (cedit -> show_axis, this_curve -> show_axis[i]); button_set_status (cedit -> show_grid, this_curve -> show_grid[i]); button_set_status (cedit -> axis_default_title, this_curve -> axis_defaut_title[i]); widget_set_sensitive (cedit -> axis_title, ! this_curve -> axis_defaut_title[i]); update_entry_text (GTK_ENTRY(cedit -> axis_title), this_curve -> axis_title[i]); gtk_font_chooser_set_font (GTK_FONT_CHOOSER(cedit -> axis_title_font), this_curve -> axis_title_font[i]); } /*! \fn GtkWidget * create_tab_4 (curve_edition * cedit, gpointer data) \brief handle the creation of the 4th tab of the curve edition dialog \param cedit the target curve_edition pointer \param data the associated data pointer */ GtkWidget * create_tab_4 (curve_edition * cedit, gpointer data) { Curve * this_curve = get_curve_from_pointer (data); int i; GtkWidget * axisbox; #ifdef GTK4 axisbox = create_vbox (3); #else axisbox = create_vbox (BSEP); #endif GtkWidget * ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label(_("Select axis:"), 175, -1, 1.0, 0.5), FALSE, FALSE, 0); cedit -> axischoice = create_combo (); combo_text_append (cedit -> axischoice, _("X axis")); combo_text_append (cedit -> axischoice, _("Y axis")); combo_set_active (cedit -> axischoice, 0); gtk_widget_set_size_request (cedit -> axischoice, 80, 35); g_signal_connect (G_OBJECT(cedit -> axischoice), "changed", G_CALLBACK(update_axis), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> axischoice, FALSE, FALSE, 25); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 5); ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label(_("Scale type:"), 100, -1, 0.0, 0.5), FALSE, FALSE, 0); cedit -> scale_box = create_combo (); combo_text_append (cedit -> scale_box, _("Linear")); combo_text_append (cedit -> scale_box, "Log"); combo_set_active (cedit -> scale_box, this_curve -> scale[0]); gtk_widget_set_size_request (cedit -> scale_box, 80, -1); cedit -> handler_id = g_signal_connect (G_OBJECT(cedit -> scale_box), "changed", G_CALLBACK(set_scale), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> scale_box, FALSE, FALSE, 0); cedit -> auto_scale = create_button (_("Autoscale axis"), IMG_NONE, NULL, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(set_autoscale), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> auto_scale, FALSE, FALSE, 30); // Axis min and max ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label(_("Min:"), 30, -1, 0.5, 0.5), FALSE, FALSE, 20); cedit -> vmin = create_entry (G_CALLBACK(set_axis_min), 100, 15, FALSE, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> vmin, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label(_("Max:"), 30, -1, 0.5, 0.5), FALSE, FALSE, 20); cedit -> vmax = create_entry (G_CALLBACK(set_axis_max), 100, 15, FALSE, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> vmax, FALSE, FALSE, 0); // Major ticks spacing ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label(_("Major ticks spacing:"), 160, -1, 0.0, 0.5), FALSE, FALSE, 10); cedit -> majt = create_entry (G_CALLBACK(set_max_div), 100, 15, FALSE, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> majt, FALSE, FALSE, 0); // Number of minors ticks ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label(_("Number of minor ticks:"), 160, -1, 0.0, 0.5), FALSE, FALSE, 10); for (i=0; i<2; i++) { cedit -> nmi[i] = spin_button (G_CALLBACK(set_min_div_spin), (double)this_curve -> mint[i]-1.0, 0.0, 100.0, 1.0, 0, 50, & cedit -> dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> nmi[i], FALSE, FALSE, 0); } // Ticks ... ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label(_("Tick marks:"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); // ... position ... ahbox = abox (axisbox, _("Location:"), 1); cedit -> ticks_inout_box = create_combo (); combo_text_append (cedit -> ticks_inout_box, _("In")); combo_text_append (cedit -> ticks_inout_box, _("Out")); gtk_widget_set_size_request (cedit -> ticks_inout_box, 60, -1); g_signal_connect (G_OBJECT(cedit -> ticks_inout_box), "changed", G_CALLBACK(set_io_ticks), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> ticks_inout_box, FALSE, FALSE, 3); cedit -> ticks_pos_box = create_combo (); combo_text_append (cedit -> ticks_pos_box, _("Normal")); combo_text_append (cedit -> ticks_pos_box, _("Opposite")); combo_text_append (cedit -> ticks_pos_box, _("Both")); combo_text_append (cedit -> ticks_pos_box, _("None")); gtk_widget_set_size_request (cedit -> ticks_pos_box, 100, -1); g_signal_connect (G_OBJECT(cedit -> ticks_pos_box), "changed", G_CALLBACK(set_pos_ticks), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> ticks_pos_box, FALSE, FALSE, 3); // ... sizes ... ahbox = abox (axisbox, _("Major ticks size:"), 1); for (i=0; i<2; i++) { cedit -> mats[i] = spin_button (G_CALLBACK(set_ticks_size_major_spin), (double)this_curve -> majt_size[i], 0.0, 100.0, 1.0, 0, 50, & cedit -> dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> mats[i], FALSE, FALSE, 0); } ahbox = abox (axisbox, _("Minor ticks size:"), 1); for (i=0; i<2; i++) { cedit -> mits[i] = spin_button (G_CALLBACK(set_ticks_size_minor_spin), (double)this_curve -> mint_size[i], 0.0, 100.0, 1.0, 0, 50, & cedit -> dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> mits[i], FALSE, FALSE, 0); } // Ticks labels ... ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label(_("Tick labels:"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); // ... position ... ahbox = abox (axisbox, _("Location:"), 1); cedit -> labels_pos_box = create_combo (); combo_text_append (cedit -> labels_pos_box, _("Normal")); combo_text_append (cedit -> labels_pos_box, _("Opposite")); combo_text_append (cedit -> labels_pos_box, _("Both")); combo_text_append (cedit -> labels_pos_box, _("None")); gtk_widget_set_size_request (cedit -> labels_pos_box, 150, -1); g_signal_connect (G_OBJECT(cedit -> labels_pos_box), "changed", G_CALLBACK(set_pos_labels), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> labels_pos_box, FALSE, FALSE, 0); // ... significant digits ... ahbox = abox (axisbox, _("Significant digits:"), 1); for (i=0; i<2; i++) { cedit -> ndi[i] = spin_button (G_CALLBACK(set_lab_digit_spin), (double)this_curve -> labels_digit[i], 0.0, 100.0, 1.0, 0, 50, & cedit -> dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> ndi[i], FALSE, FALSE, 0); } // ... font ... cedit -> ticks_labels_font = font_button (this_curve -> labels_font[0], 150, 35, G_CALLBACK(set_ticks_labels_font), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, abox (axisbox, _("Font:"), 1), cedit -> ticks_labels_font, FALSE, FALSE, 5); // ... angle .. cedit -> ticks_labels_angle = create_hscale (-180.0, 180.0, 1.0, 0.0, GTK_POS_LEFT, 0, 150, G_CALLBACK(set_ticks_angle), G_CALLBACK(scroll_set_ticks_angle), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, abox (axisbox, _("Angle:"), 1), cedit -> ticks_labels_angle, FALSE, FALSE, 5); // ...distance to axis ahbox = abox (axisbox, _("Position: "), 1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("x:", -1, -1, 0.9, 0.5), FALSE, FALSE, 10); for (i=0; i<2; i++) { cedit -> nptx[i] = spin_button (G_CALLBACK(set_lab_shift_x_spin), (double)this_curve -> labels_shift_x[i], -100.0, 100.0, 1.0, 0, 50, & cedit -> dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> nptx[i], FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("y:", -1, -1, 0.9, 0.5), FALSE, FALSE, 10); for (i=0; i<2; i++) { cedit -> npty[i] = spin_button (G_CALLBACK(set_lab_shift_y_spin), (double) this_curve -> labels_shift_y[i], -100.0, 100.0, 1.0, 0, 50, & cedit -> dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> npty[i], FALSE, FALSE, 0); } cedit -> show_axis = check_button (_("Show/Hide axis (if min[axis] < 0.0 < max[axis])"), 100, 30, FALSE, G_CALLBACK(set_axis), data); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, cedit -> show_axis, FALSE, FALSE, 3); cedit -> show_grid = check_button (_("Show/Hide axis grid"), 100, 30, FALSE, G_CALLBACK(set_grid), data); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, cedit -> show_grid, FALSE, FALSE, 1); // Axis title ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE,3); cedit -> axis_default_title = check_button (_("Use default axis title"), 175, -1, FALSE, G_CALLBACK(to_axis_title), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> axis_default_title, FALSE, FALSE, 0); cedit -> axis_title = create_entry (G_CALLBACK(set_axis_legend), 150, 15, FALSE, data); gtk_entry_set_alignment (GTK_ENTRY(cedit -> axis_title), 0.0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> axis_title, FALSE, FALSE, 0); cedit -> axis_title_font = font_button (this_curve -> axis_title_font[0], 150, 35, G_CALLBACK(set_axis_title_font), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, abox (axisbox, _("Font:"), 3), cedit -> axis_title_font, FALSE, FALSE, 0); ahbox = abox (axisbox, _("Position: "), 3); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("x:", -1, -1, 0.9, 0.5), FALSE, FALSE, 10); for (i=0; i<2; i++) { cedit -> tptx[i] = spin_button (G_CALLBACK(set_axis_title_x_spin), (double)this_curve -> axis_title_x[i], -500.0, 500.0, 1.0, 0, 50, & cedit -> dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> tptx[i], FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("y:", -1, -1, 0.9, 0.5), FALSE, FALSE, 10); for (i=0; i<2; i++) { cedit -> tpty[i] = spin_button (G_CALLBACK(set_axis_title_y_spin), (double)this_curve -> axis_title_y[i], -500.0, 500.0, 1.0, 0, 50, & cedit -> dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, cedit -> tpty[i], FALSE, FALSE, 0); } return axisbox; } atomes_1.3.1/src/curve/curve.c0000664000175000017500000003641015212624223015714 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file curve.c * @short Functions to manage curves * @author Sébastien Le Roux */ /* * This file: 'curve.c' * * Contains: * - Functions to manage curves * * List of functions: double scale (double axe); void prep_plot (Curve * this_curve); void clean_this_curve_window (int cid, int rid); void set_curve_data_zero (int rid, int cid, int interv); void save_curve_ (int * interv, double datacurve[* interv], int * cid, int * rid); void hide_curves (project * this_proj, int c); void remove_this_curve_from_extras (int a, int b, int c); void erase_curves (project * this_proj, int c); void update_curves (); void update_curve (gpointer data); curve_dash * selectdash (int iddash); Curve * get_curve_from_pointer (gpointer data); */ #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "cedit.h" #include "curve.h" extern void adjust_tool_model (int calc, int curve, gchar * string_path); gint32 etime; int resol[2]; double XDRAW, YDRAW; double DXDRAW, DYDRAW; double xmax, ymax; double x_min, x_max; double y_max, y_min; double ax, ay; double cxy[2]; double mticks; int nticks; int xlog, ylog; int dxlog, dylog; char * sca; int originp; PangoLayout * layout; gboolean dogrid; int x_shift, y_shift; int amint, amajt; int tickpos, labpos; // Marge sur X et Y dans les graphs int xmarge = MARGX; int ymarge = MARGY; char * curve_image_file = NULL; // Number of dash formats int ndash = NDASHS; int nglyph = NGLYPHS; const double dashed0[] = {0.0, 0.0}; int len0 = sizeof(dashed0) / sizeof(dashed0[0]); const double dashed1[] = {1.0, 0.0}; int len1 = sizeof(dashed1) / sizeof(dashed1[0]); const double dashed2[] = {5.0, 2.5}; int len2 = sizeof(dashed2) / sizeof(dashed2[0]); const double dashed3[] = {4.0, 6.0}; int len3 = sizeof(dashed3) / sizeof(dashed3[0]); const double dashed4[] = {2.0, 5.0}; int len4 = sizeof(dashed4) / sizeof(dashed4[0]); const double dashed5[] = {10.0, 5.0}; int len5 = sizeof(dashed5) / sizeof(dashed5[0]);; const double dashed6[] = {10.0, 10.0}; int len6 = sizeof(dashed6) / sizeof(dashed6[0]);; const double dashed7[] = {4.0, 1.0, 4.0}; int len7 = sizeof(dashed7) / sizeof(dashed7[0]); const double dashed8[] = {10.0, 2.5, 10.0}; int len8 = sizeof(dashed8) / sizeof(dashed8[0]);; const double dashed9[] = {10.0, 5.0, 2.0}; int len9 = sizeof(dashed9) / sizeof(dashed9[0]);; const double pdashed[] = {1.0}; int lenp = 1; /*! \fn curve_dash * selectdash (int iddash) \brief setup dash pointer \param iddash the target dash */ curve_dash * selectdash (int iddash) { curve_dash * dashtab; dashtab = g_malloc0(sizeof*dashtab); if (iddash == 0) { dashtab -> a = dashed0; dashtab -> b = len0; } if (iddash == 1) { dashtab -> a = dashed1; dashtab -> b = len1; } if (iddash == 2) { dashtab -> a = dashed2; dashtab -> b = len2; } if (iddash == 3) { dashtab -> a = dashed3; dashtab -> b = len3; } if (iddash == 4) { dashtab -> a = dashed4; dashtab -> b = len4; } if (iddash == 5) { dashtab -> a = dashed5; dashtab -> b = len5; } if (iddash == 6) { dashtab -> a = dashed6; dashtab -> b = len6; } if (iddash == 7) { dashtab -> a = dashed7; dashtab -> b = len7; } if (iddash == 8) { dashtab -> a = dashed8; dashtab -> b = len8; } if (iddash == 9) { dashtab -> a = dashed9; dashtab -> b = len9; } if (iddash == 10) { dashtab -> a = pdashed; dashtab -> b = lenp; } return dashtab; } /*! \fn double scale (double axe) \brief find appropriate major tick spacing based on axis length \param axe axis length */ double scale (double axe) { double xs; double axis; axis = fabs(axe); if (axis < 0.0005) { xs=0.00005; } else if (axis < 0.0025) { xs=0.00025; } else if (axis < 0.005) { xs=0.0005; } else if (axis < 0.025) { xs=0.0025; } else if (axis < 0.05) { xs=0.005; } else if (axis < 0.25) { xs=0.025; } else if (axis < 0.5 ) { xs=0.05; } else if (axis < 1.5 ) { xs=0.1; } else if (axis < 2.5) { xs=0.25; } else if (axis < 5) { xs=0.5; } else if (axis < 15) { xs = 1.0; } else if (axis < 30) { xs = 2.0; } else if (axis < 50) { xs = 5.0; } else if (axis < 100) { xs = 10.0; } else if (axis < 250) { xs = 25.0; } else if (axis < 500) { xs = 50.0; } else if (axis < 1000) { xs = 100.0; } else if (axis < 5000) { xs = 500.0; } else if (axis < 10000) { xs = 1000.0; } else if (axis < 50000) { xs = 5000.0; } else if (axis < 100000) { xs = 10000.0; } else if (axis < 500000) { xs = 50000.0; } else if (axis < 1000000) { xs = 100000.0; } return xs; } /*! \fn Curve * get_curve_from_pointer (gpointer data) \brief get Curve pointer from pointer \param data the target pointer */ Curve * get_curve_from_pointer (gpointer data) { tint * ad = (tint *)data; return get_project_by_id(ad -> a) -> analysis[ad -> b] -> curves[ad -> c]; } /*! \fn void prep_plot (Curve * this_curve) \brief prepare curve plot (setting up variables for the plot) \param this_curve the target curve */ void prep_plot (Curve * this_curve) { x_min = resol[0] * this_curve -> frame_pos[0][0]; x_max = resol[0] * this_curve -> frame_pos[0][1]; y_max = resol[1] * (1.0 - this_curve -> frame_pos[1][1]); y_max = resol[1] - y_max; y_min = resol[1] * (1.0 - this_curve -> frame_pos[1][0]); y_min = resol[1] - y_min; // The x size of the graph in pixels XDRAW = x_max - x_min; // The y size of the graph in pixels YDRAW = y_max - y_min; } /*! \fn void clean_this_curve_window (int cid, int rid) \brief free curve window data \param cid the curve id \param rid the calculation id */ void clean_this_curve_window (int cid, int rid) { /*if (active_project -> analysis[rid] -> curves[cid] -> window != NULL) { active_project -> analysis[rid] -> curves[cid] -> window = destroy_this_widget (active_project -> analysis[rid] -> curves[cid] -> window); active_project -> analysis[rid] -> curves[cid] -> plot = destroy_this_widget (active_project -> analysis[rid] -> curves[cid] -> plot); }*/ if (active_project -> analysis[rid] -> curves[cid] -> ndata > 0) { int i; for (i=0; i<2; i++) { if (active_project -> analysis[rid] -> curves[cid] -> data[i] != NULL) { g_free (active_project -> analysis[rid] -> curves[cid] -> data[i]); active_project -> analysis[rid] -> curves[cid] -> data[i] = NULL; } } } active_project -> analysis[rid] -> curves[cid] -> ndata = 0; } /*! \fn void set_curve_data_zero (int rid, int cid, int interv) \brief initialize curve data \param rid the calculation id \param cid the curve id \param interv the number of data point(s) */ void set_curve_data_zero (int rid, int cid, int interv) { active_project -> analysis[rid] -> curves[cid] -> ndata = interv; active_project -> analysis[rid] -> curves[cid] -> data[0] = allocdouble (interv); int i; if (rid != SKT) { for (i=0; i analysis[rid] -> curves[cid] -> data[0][i] = active_project -> analysis[rid] -> min + i*active_project -> analysis[rid] -> delta; } } else { double delta_omega = (pi/(active_project -> analysis[MSD] -> delta*active_project -> analysis[MSD] -> num_delta)) / active_project -> sqw_freq; for (i=0; i analysis[rid] -> curves[cid] -> data[0][i] = i*delta_omega; } } } /*! \fn void save_curve_ (int * interv, double datacurve[*interv], int * cid, int * rid) \brief save calculation results from Fortran90 \param interv number of data point(s) \param datacurve calculation result(s) to save \param cid curve id \param rid calculation id */ void save_curve_ (int * interv, double datacurve[* interv], int * cid, int * rid) { int i, j; Curve * this_curve = active_project -> analysis[* rid] -> curves[* cid]; #ifdef DEBUG // g_debug ("SAVE_CURVE:: rid= %d, cid= %d, name= %s, interv= %d", * rid, * cid, this_curve -> name, * interv); /*for ( i=0 ; i < *interv ; i++ ) { g_debug ("SAVECURVE:: i= %d, data[i]= %f", i, datacurve[i]); }*/ #endif // DEBUG clean_this_curve_window (* cid, * rid); if (* interv != 0) { int inter = (* rid == SPH) ? * interv/2 + 1: * interv; if (* rid == SKD || (* rid == SKT && * cid < active_project -> skt_sets)) { this_curve -> ndata = inter; this_curve -> data[0] = duplicate_double (inter, xsk); } else { set_curve_data_zero (* rid, * cid, inter); } if (* rid != SPH) { this_curve -> data[1] = duplicate_double (inter, datacurve); } else { this_curve -> data[1] = allocdouble (inter); for (i=0; i data[1][i] = datacurve[i*2]; } } for (i=0; i<2; i++) { j = (this_curve -> extrac) ? this_curve -> extrac -> extras : 0; if (this_curve -> extrac) this_curve -> extrac -> extras = 0; autoscale_axis (active_project, this_curve, * rid, * cid, i); if (this_curve -> extrac) this_curve -> extrac -> extras = j; this_curve -> majt[i] = scale (this_curve -> axmax[i] - this_curve -> axmin[i]); this_curve -> mint[i] = 2; } } else { this_curve -> ndata = 0; } } /*! \fn void hide_curves (project * this_proj, int c) \brief for project hide all curves for a calculation \param this_proj the target project \param c the target calculation */ void hide_curves (project * this_proj, int c) { int i; for ( i = 0 ; i < this_proj -> analysis[c] -> numc ; i ++ ) { if (this_proj -> analysis[c] -> curves[i]) { if (this_proj -> analysis[c] -> curves[i] -> window) { if (is_the_widget_visible(this_proj -> analysis[c] -> curves[i] -> window)) { hide_the_widgets (this_proj -> analysis[c] -> curves[i] -> window); adjust_tool_model (c, i, this_proj -> analysis[c] -> curves[i] -> path); g_free (this_proj -> analysis[c] -> curves[i] -> path); this_proj -> analysis[c] -> curves[i] -> path = NULL; } } } } } /*! \fn void remove_this_curve_from_extras (int a, int b, int c) \brief free all target (a,b,c) curve from other curve(s) extra(s) \param a the target project \param b the target calculation \param c the target curve */ void remove_this_curve_from_extras (int a, int b, int c) { int i, j, k, l; project * this_proj; CurveExtra * ctmp; for (i=0; i analysis) { for (j=0; j analysis[j]) { if (this_proj -> analysis[j] -> idcc != NULL) { for (k=0; k analysis[j] -> numc; k++) { if (this_proj -> analysis[j] -> curves[k] -> extrac > 0) { ctmp = this_proj -> analysis[j] -> curves[k] -> extrac -> first; for (l=0; l analysis[j] -> curves[k] -> extrac -> extras; l++) { if (ctmp -> id.a == a && ctmp -> id.b == b && ctmp -> id.c == c) { remove_extra (this_proj -> analysis[j] -> curves[k] -> extrac, ctmp); break; } if (ctmp -> next != NULL) ctmp = ctmp -> next; } } } } } } } } } } /*! \fn void erase_curves (project * this_proj, int c) \brief free all curve(s) data \param this_proj the target project \param c the target calculation */ void erase_curves (project * this_proj, int c) { int i, j; for (i=0 ; i analysis[c] -> numc; i ++) { if (this_proj -> analysis[c] -> curves[i]) { remove_this_curve_from_extras (this_proj -> id, c, i); for (j=0; j<2; j++) { if (this_proj -> analysis[c] -> curves[i] -> data[j]) { g_free (this_proj -> analysis[c] -> curves[i] -> data[j]); this_proj -> analysis[c] -> curves[i] -> data[j] = NULL; } if (this_proj -> analysis[c] -> curves[i] -> axis_title[j]) { g_free (this_proj -> analysis[c] -> curves[i] -> axis_title[j]); } g_free (this_proj -> analysis[c] -> curves[i] -> labels_font[j]); this_proj -> analysis[c] -> curves[i] -> labels_font[j] = NULL; g_free (this_proj -> analysis[c] -> curves[i] -> axis_title_font[j]); this_proj -> analysis[c] -> curves[i] -> axis_title_font[j] = NULL; } if (this_proj -> analysis[c] -> curves[i] -> name) { g_free (this_proj -> analysis[c] -> curves[i] -> name); this_proj -> analysis[c] -> curves[i] -> name = NULL; } if (this_proj -> analysis[c] -> curves[i] -> title) { g_free (this_proj -> analysis[c] -> curves[i] -> title); this_proj -> analysis[c] -> curves[i] -> title = NULL; } if (this_proj -> analysis[c] -> curves[i] -> title_font) { g_free (this_proj -> analysis[c] -> curves[i] -> title_font); this_proj -> analysis[c] -> curves[i] -> title_font = NULL; } g_free (this_proj -> analysis[c] -> curves[i] -> legend_font); g_free (this_proj -> analysis[c] -> curves[i] -> layout); g_free (this_proj -> analysis[c] -> curves[i] -> extrac); g_free (this_proj -> analysis[c] -> curves[i]); this_proj -> analysis[c] -> curves[i] = NULL; } } } /*! \fn void update_curves () \brief update all curve(s) rendering for all project(s) in the workspace */ void update_curves () { int i, j, k; project * this_proj; for (i=0; i analysis[j] -> numc; k++) { if (this_proj -> analysis[j] -> curves[k] -> plot != NULL) { if (is_the_widget_visible(this_proj -> analysis[j] -> curves[k] -> plot)) { gtk_widget_queue_draw (this_proj -> analysis[j] -> curves[k] -> plot); } } } } } } /*! \fn void update_curve (gpointer data) \brief update curve rendering \param data the associated data pointer */ void update_curve (gpointer data) { gtk_widget_queue_draw (get_curve_from_pointer(data) -> plot); } atomes_1.3.1/src/curve/w_img.c0000664000175000017500000002614715212624223015700 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_img.c * @short Functions to save screenshot from graph / curve(s) * @author Sébastien Le Roux */ /* * This file: 'w_img.c' * * Contains: * - The functions to save screenshot from graph / curve(s) * * List of functions: void write_image (gpointer curetow); void save_image (gpointer cdata); G_MODULE_EXPORT void set_size (GtkEntry * val, gpointer data); G_MODULE_EXPORT void set_background (GtkCheckButton * backb); G_MODULE_EXPORT void set_background (GtkToggleButton * backb); G_MODULE_EXPORT void choose_format (GtkComboBox * box, gpointer cid); G_MODULE_EXPORT void run_write_image (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_write_image (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_save_image (GtkDialog * save_img, gint response_id, gpointer data); */ #include #include #include "global.h" #include "interface.h" #include "curve.h" typedef struct { GtkWidget * a; GtkWidget * b; } dwidget; double back_alpha; dwidget thedata; int forme; /*! \fn G_MODULE_EXPORT void set_size (GtkEntry * val, gpointer data) \brief set image size entry callback \param val the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_size (GtkEntry * val, gpointer data) { const gchar * m; int i, j; j = GPOINTER_TO_INT(data); m = entry_get_text (val); i = string_to_double ((gpointer)m); if (i > 0) { resol[j] = i; } else { show_warning ((j) ? _("Y size must be > 0") : _("X size must be > 0"), NULL); } update_entry_int (val, resol[j]); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_background (GtkCheckButton * backb, gpointer data) \brief show / hide image background toggle callback GTK4 \param backb the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_background (GtkCheckButton * backb, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_background (GtkToggleButton * backb, gpointer data) \brief show / hide image background toggle callback GTK3 \param backb the GtkTogglekButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_background (GtkToggleButton * backb, gpointer data) #endif { if (button_get_status ((GtkWidget *)backb)) { back_alpha = 0.0; } else { back_alpha = 1.0; } } /*! \fn G_MODULE_EXPORT void choose_format (GtkComboBox * box, gpointer cid) \brief change image format \param box the GtkComboBox sending the signal \param cid the associated data pointer */ G_MODULE_EXPORT void choose_format (GtkComboBox * box, gpointer cid) { forme = combo_get_active ((GtkWidget *)box); if (forme != -1) { dwidget * imf = (dwidget *) cid; button_set_status (imf -> a, 0); if (forme == 1 || forme == 3) { widget_set_sensitive(imf -> a, 0); } else { widget_set_sensitive(imf -> a, 1); } switch (forme) { case 0: gtk_image_set_from_file (GTK_IMAGE(imf -> b), PACKAGE_PNG); break; case 1: gtk_image_set_from_file (GTK_IMAGE(imf -> b), PACKAGE_PDF); break; case 2: gtk_image_set_from_file (GTK_IMAGE(imf -> b), PACKAGE_SVG); break; case 3: gtk_image_set_from_file (GTK_IMAGE(imf -> b), PACKAGE_EPS); break; } } } gchar * i_title[4]={"Portable Network Graphics", "Portable Document File", "Scalable Vector Graphics", "Encapsulated Post-Script Image"}; gchar * i_pattern[4]={"*.png", "*.pdf", "*.svg", "*.eps"}; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_write_image (GtkNativeDialog * info, gint response_id, gpointer data) \brief write image - running the dialog GTK4 \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_write_image (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_write_image (GtkDialog * info, gint response_id, gpointer data) \brief write image - running the dialog GTK3 \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_write_image (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { curve_image_file = file_chooser_get_file_name (chooser); Curve * this_curve = get_curve_from_pointer (data); this_curve -> format = forme + 1; #ifdef GTK3 show_curve (NULL, NULL, data); #else GdkSurface * surf = gtk_native_get_surface ((GtkNative *)this_curve -> plot); cairo_t * rec = (cairo_t *)gdk_cairo_context_cairo_create (gdk_surface_create_cairo_context (surf)); show_curve (NULL, rec, resol[0], resol[1], data); #endif } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } /*! \fn void write_image (gpointer curetow) \brief write image - creating the file chooser dialog \param curetow the associated data pointer */ void write_image (gpointer curetow) { gchar * i_filter[4]={i18n("PNG file (*.png)"), i18n("PDF file (*.pdf)"), i18n("SVG file (*.svg)"), i18n("EPS file (*.eps)")}; GtkFileFilter * filter; Curve * this_curve = get_curve_from_pointer (curetow); if (forme == -1) { show_warning (_("To save an image please enter a file format"), this_curve -> window); } else if (resol[0] == 0 || resol[1] == 0) { show_warning (_("You need to specify the size of the image"), this_curve -> window); } else { #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif info = create_file_chooser (_(i_title[forme]), GTK_WINDOW(this_curve -> window), GTK_FILE_CHOOSER_ACTION_SAVE, _("Save")); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif filter = gtk_file_filter_new(); gtk_file_filter_set_name(GTK_FILE_FILTER(filter), _(i_filter[forme])); gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), i_pattern[forme]); gtk_file_chooser_add_filter (chooser, filter); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_write_image), curetow); #else run_this_gtk_dialog (info, G_CALLBACK(run_write_image), curetow); #endif } } /*! \fn G_MODULE_EXPORT void run_save_image (GtkDialog * save_img, gint response_id, gpointer data) \brief export curve window plot to image - running the dialog \param save_img the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_save_image (GtkDialog * save_img, gint response_id, gpointer data) { gboolean done = FALSE; while (! done) { switch (response_id) { case GTK_RESPONSE_APPLY: if (forme > -1) { write_image (data); done = TRUE; } else { done = FALSE; } break; default: done = TRUE; break; } } if (done) destroy_this_dialog (save_img); } /*! \fn void save_image (gpointer cdata) \brief export curve window plot to image - creating the dialog \param cdata the associated data pointer */ void save_image (gpointer cdata) { GtkWidget * save_img; GtkWidget * hbox; GtkWidget * comboformat; GtkWidget * x; GtkWidget * y; GtkWidget * background; GtkWidget * log; int xlgt, ylgt; int i; gchar * str; Curve * this_curve = get_curve_from_pointer (cdata); save_img = dialog_cancel_apply (_("Export image"), this_curve -> window, FALSE); gtk_window_set_resizable (GTK_WINDOW (save_img), FALSE); #ifndef GTK4 gtk_window_set_icon (GTK_WINDOW (save_img), THETD); #endif GtkWidget * vbox = dialog_get_content_area (save_img); gtk_box_set_spacing (GTK_BOX(vbox), 15); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("Format: "), -1, 50, 0.0, 0.5), TRUE, TRUE, 0); GtkWidget * fixed = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, TRUE, TRUE, 10); comboformat = create_combo (); for (i=0; i<4; i++) { str = g_strdup_printf ("%s - (%s)", _(i_title[i]), i_pattern[i]); combo_text_append (comboformat, str); g_free (str); } gtk_fixed_put (GTK_FIXED(fixed), comboformat, -1, 10); gtk_widget_set_size_request (comboformat, -1, 30); log = gtk_image_new_from_file (PACKAGE_VOID); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, log, TRUE, TRUE, 0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Size: "), 100, -1, 0.0, 0.5), FALSE, TRUE, 0); xlgt = get_widget_width (this_curve -> plot); ylgt = get_widget_height (this_curve -> plot); x = create_entry (G_CALLBACK(set_size), 50, 15, FALSE, GINT_TO_POINTER(0)); update_entry_int (GTK_ENTRY(x), xlgt); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, x, TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new ("x"), TRUE, TRUE, 5); y = create_entry (G_CALLBACK(set_size), 50, 15, FALSE, GINT_TO_POINTER(1)); update_entry_int (GTK_ENTRY(y), ylgt); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, y, TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new (_("pixels")), TRUE, TRUE, 0); background = check_button (_("Make background transparent"), -1, -1, FALSE, G_CALLBACK(set_background), NULL); widget_set_sensitive (background, FALSE); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, background, TRUE, TRUE, 0); forme = -1; back_alpha = 1.0; thedata.a = background; thedata.b = log; g_signal_connect (G_OBJECT(comboformat), "changed", G_CALLBACK(choose_format), & thedata); run_this_gtk_dialog (save_img, G_CALLBACK(run_save_image), cdata); } atomes_1.3.1/src/affero.h0000664000175000017500000010517415212624223014717 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file affero.h * @short The text of the Affero GPL v3 license * @author Sébastien Le Roux */ /* * This header file: 'affero.h' * * Contains: - The text of the Affero GPL v3 license */ gchar * affero_license="\n" " GNU AFFERO GENERAL PUBLIC LICENSE\n\n" " Version 3, 19 November 2007\n" "\n" " Copyright (C) 2007 Free Software Foundation, Inc. \n" " Everyone is permitted to copy and distribute verbatim copies\n" " of this license document, but changing it is not allowed.\n" "\n" " Preamble\n" "\n" " The GNU Affero General Public License is a free, copyleft license for\n" "software and other kinds of works, specifically designed to ensure\n" "cooperation with the community in the case of network server software.\n" "\n" " The licenses for most software and other practical works are designed\n" "to take away your freedom to share and change the works. By contrast,\n" "our General Public Licenses are intended to guarantee your freedom to\n" "share and change all versions of a program--to make sure it remains free\n" "software for all its users.\n" "\n" " When we speak of free software, we are referring to freedom, not\n" "price. Our General Public Licenses are designed to make sure that you\n" "have the freedom to distribute copies of free software (and charge for\n" "them if you wish), that you receive source code or can get it if you\n" "want it, that you can change the software or use pieces of it in new\n" "free programs, and that you know you can do these things.\n" "\n" " Developers that use our General Public Licenses protect your rights\n" "with two steps: (1) assert copyright on the software, and (2) offer\n" "you this License which gives you legal permission to copy, distribute\n" "and/or modify the software.\n" "\n" " A secondary benefit of defending all users' freedom is that\n" "improvements made in alternate versions of the program, if they\n" "receive widespread use, become available for other developers to\n" "incorporate. Many developers of free software are heartened and\n" "encouraged by the resulting cooperation. However, in the case of\n" "software used on network servers, this result may fail to come about.\n" "The GNU General Public License permits making a modified version and\n" "letting the public access it on a server without ever releasing its\n" "source code to the public.\n" "\n" " The GNU Affero General Public License is designed specifically to\n" "ensure that, in such cases, the modified source code becomes available\n" "to the community. It requires the operator of a network server to\n" "provide the source code of the modified version running there to the\n" "users of that server. Therefore, public use of a modified version, on\n" "a publicly accessible server, gives the public access to the source\n" "code of the modified version.\n" "\n" " An older license, called the Affero General Public License and\n" "published by Affero, was designed to accomplish similar goals. This is\n" "a different license, not a version of the Affero GPL, but Affero has\n" "released a new version of the Affero GPL which permits relicensing under\n" "this license.\n" "\n" " The precise terms and conditions for copying, distribution and\n" "modification follow.\n" "\n" " TERMS AND CONDITIONS\n" "\n" " 0. Definitions.\n" "\n" " ""This License"" refers to version 3 of the GNU Affero General Public License.\n" "\n" " ""Copyright"" also means copyright-like laws that apply to other kinds of\n" "works, such as semiconductor masks.\n" "\n" " ""The Program"" refers to any copyrightable work licensed under this\n" "License. Each licensee is addressed as ""you"". ""Licensees"" and\n" """recipients"" may be individuals or organizations.\n" "\n" " To ""modify"" a work means to copy from or adapt all or part of the work\n" "in a fashion requiring copyright permission, other than the making of an\n" "exact copy. The resulting work is called a ""modified version"" of the\n" "earlier work or a work ""based on"" the earlier work.\n" "\n" " A ""covered work"" means either the unmodified Program or a work based\n" "on the Program.\n" "\n" " To ""propagate"" a work means to do anything with it that, without\n" "permission, would make you directly or secondarily liable for\n" "infringement under applicable copyright law, except executing it on a\n" "computer or modifying a private copy. Propagation includes copying,\n" "distribution (with or without modification), making available to the\n" "public, and in some countries other activities as well.\n" "\n" " To ""convey"" a work means any kind of propagation that enables other\n" "parties to make or receive copies. Mere interaction with a user through\n" "a computer network, with no transfer of a copy, is not conveying.\n" "\n" " An interactive user interface displays ""Appropriate Legal Notices""\n" "to the extent that it includes a convenient and prominently visible\n" "feature that (1) displays an appropriate copyright notice, and (2)\n" "tells the user that there is no warranty for the work (except to the\n" "extent that warranties are provided), that licensees may convey the\n" "work under this License, and how to view a copy of this License. If\n" "the interface presents a list of user commands or options, such as a\n" "menu, a prominent item in the list meets this criterion.\n" "\n" " 1. Source Code.\n" "\n" " The ""source code"" for a work means the preferred form of the work\n" "for making modifications to it. ""Object code"" means any non-source\n" "form of a work.\n" "\n" " A ""Standard Interface"" means an interface that either is an official\n" "standard defined by a recognized standards body, or, in the case of\n" "interfaces specified for a particular programming language, one that\n" "is widely used among developers working in that language.\n" "\n" " The ""System Libraries"" of an executable work include anything, other\n" "than the work as a whole, that (a) is included in the normal form of\n" "packaging a Major Component, but which is not part of that Major\n" "Component, and (b) serves only to enable use of the work with that\n" "Major Component, or to implement a Standard Interface for which an\n" "implementation is available to the public in source code form. A\n" """Major Component"", in this context, means a major essential component\n" "(kernel, window system, and so on) of the specific operating system\n" "(if any) on which the executable work runs, or a compiler used to\n" "produce the work, or an object code interpreter used to run it.\n" "\n" " The ""Corresponding Source"" for a work in object code form means all\n" "the source code needed to generate, install, and (for an executable\n" "work) run the object code and to modify the work, including scripts to\n" "control those activities. However, it does not include the work's\n" "System Libraries, or general-purpose tools or generally available free\n" "programs which are used unmodified in performing those activities but\n" "which are not part of the work. For example, Corresponding Source\n" "includes interface definition files associated with source files for\n" "the work, and the source code for shared libraries and dynamically\n" "linked subprograms that the work is specifically designed to require,\n" "such as by intimate data communication or control flow between those\n" "subprograms and other parts of the work.\n" "\n" " The Corresponding Source need not include anything that users\n" "can regenerate automatically from other parts of the Corresponding\n" "Source.\n" "\n" " The Corresponding Source for a work in source code form is that\n" "same work.\n" "\n" " 2. Basic Permissions.\n" "\n" " All rights granted under this License are granted for the term of\n" "copyright on the Program, and are irrevocable provided the stated\n" "conditions are met. This License explicitly affirms your unlimited\n" "permission to run the unmodified Program. The output from running a\n" "covered work is covered by this License only if the output, given its\n" "content, constitutes a covered work. This License acknowledges your\n" "rights of fair use or other equivalent, as provided by copyright law.\n" "\n" " You may make, run and propagate covered works that you do not\n" "convey, without conditions so long as your license otherwise remains\n" "in force. You may convey covered works to others for the sole purpose\n" "of having them make modifications exclusively for you, or provide you\n" "with facilities for running those works, provided that you comply with\n" "the terms of this License in conveying all material for which you do\n" "not control copyright. Those thus making or running the covered works\n" "for you must do so exclusively on your behalf, under your direction\n" "and control, on terms that prohibit them from making any copies of\n" "your copyrighted material outside their relationship with you.\n" "\n" " Conveying under any other circumstances is permitted solely under\n" "the conditions stated below. Sublicensing is not allowed; section 10\n" "makes it unnecessary.\n" "\n" " 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n" "\n" " No covered work shall be deemed part of an effective technological\n" "measure under any applicable law fulfilling obligations under article\n" "11 of the WIPO copyright treaty adopted on 20 December 1996, or\n" "similar laws prohibiting or restricting circumvention of such\n" "measures.\n" "\n" " When you convey a covered work, you waive any legal power to forbid\n" "circumvention of technological measures to the extent such circumvention\n" "is effected by exercising rights under this License with respect to\n" "the covered work, and you disclaim any intention to limit operation or\n" "modification of the work as a means of enforcing, against the work's\n" "users, your or third parties' legal rights to forbid circumvention of\n" "technological measures.\n" "\n" " 4. Conveying Verbatim Copies.\n" "\n" " You may convey verbatim copies of the Program's source code as you\n" "receive it, in any medium, provided that you conspicuously and\n" "appropriately publish on each copy an appropriate copyright notice;\n" "keep intact all notices stating that this License and any\n" "non-permissive terms added in accord with section 7 apply to the code;\n" "keep intact all notices of the absence of any warranty; and give all\n" "recipients a copy of this License along with the Program.\n" "\n" " You may charge any price or no price for each copy that you convey,\n" "and you may offer support or warranty protection for a fee.\n" "\n" " 5. Conveying Modified Source Versions.\n" "\n" " You may convey a work based on the Program, or the modifications to\n" "produce it from the Program, in the form of source code under the\n" "terms of section 4, provided that you also meet all of these conditions:\n" "\n" " a) The work must carry prominent notices stating that you modified\n" " it, and giving a relevant date.\n" "\n" " b) The work must carry prominent notices stating that it is\n" " released under this License and any conditions added under section\n" " 7. This requirement modifies the requirement in section 4 to\n" " ""keep intact all notices"".\n" "\n" " c) You must license the entire work, as a whole, under this\n" " License to anyone who comes into possession of a copy. This\n" " License will therefore apply, along with any applicable section 7\n" " additional terms, to the whole of the work, and all its parts,\n" " regardless of how they are packaged. This License gives no\n" " permission to license the work in any other way, but it does not\n" " invalidate such permission if you have separately received it.\n" "\n" " d) If the work has interactive user interfaces, each must display\n" " Appropriate Legal Notices; however, if the Program has interactive\n" " interfaces that do not display Appropriate Legal Notices, your\n" " work need not make them do so.\n" "\n" " A compilation of a covered work with other separate and independent\n" "works, which are not by their nature extensions of the covered work,\n" "and which are not combined with it such as to form a larger program,\n" "in or on a volume of a storage or distribution medium, is called an\n" """aggregate"" if the compilation and its resulting copyright are not\n" "used to limit the access or legal rights of the compilation's users\n" "beyond what the individual works permit. Inclusion of a covered work\n" "in an aggregate does not cause this License to apply to the other\n" "parts of the aggregate.\n" "\n" " 6. Conveying Non-Source Forms.\n" "\n" " You may convey a covered work in object code form under the terms\n" "of sections 4 and 5, provided that you also convey the\n" "machine-readable Corresponding Source under the terms of this License,\n" "in one of these ways:\n" "\n" " a) Convey the object code in, or embodied in, a physical product\n" " (including a physical distribution medium), accompanied by the\n" " Corresponding Source fixed on a durable physical medium\n" " customarily used for software interchange.\n" "\n" " b) Convey the object code in, or embodied in, a physical product\n" " (including a physical distribution medium), accompanied by a\n" " written offer, valid for at least three years and valid for as\n" " long as you offer spare parts or customer support for that product\n" " model, to give anyone who possesses the object code either (1) a\n" " copy of the Corresponding Source for all the software in the\n" " product that is covered by this License, on a durable physical\n" " medium customarily used for software interchange, for a price no\n" " more than your reasonable cost of physically performing this\n" " conveying of source, or (2) access to copy the\n" " Corresponding Source from a network server at no charge.\n" "\n" " c) Convey individual copies of the object code with a copy of the\n" " written offer to provide the Corresponding Source. This\n" " alternative is allowed only occasionally and noncommercially, and\n" " only if you received the object code with such an offer, in accord\n" " with subsection 6b.\n" "\n" " d) Convey the object code by offering access from a designated\n" " place (gratis or for a charge), and offer equivalent access to the\n" " Corresponding Source in the same way through the same place at no\n" " further charge. You need not require recipients to copy the\n" " Corresponding Source along with the object code. If the place to\n" " copy the object code is a network server, the Corresponding Source\n" " may be on a different server (operated by you or a third party)\n" " that supports equivalent copying facilities, provided you maintain\n" " clear directions next to the object code saying where to find the\n" " Corresponding Source. Regardless of what server hosts the\n" " Corresponding Source, you remain obligated to ensure that it is\n" " available for as long as needed to satisfy these requirements.\n" "\n" " e) Convey the object code using peer-to-peer transmission, provided\n" " you inform other peers where the object code and Corresponding\n" " Source of the work are being offered to the general public at no\n" " charge under subsection 6d.\n" "\n" " A separable portion of the object code, whose source code is excluded\n" "from the Corresponding Source as a System Library, need not be\n" "included in conveying the object code work.\n" "\n" " A ""User Product"" is either (1) a ""consumer product"", which means any\n" "tangible personal property which is normally used for personal, family,\n" "or household purposes, or (2) anything designed or sold for incorporation\n" "into a dwelling. In determining whether a product is a consumer product,\n" "doubtful cases shall be resolved in favor of coverage. For a particular\n" "product received by a particular user, ""normally used"" refers to a\n" "typical or common use of that class of product, regardless of the status\n" "of the particular user or of the way in which the particular user\n" "actually uses, or expects or is expected to use, the product. A product\n" "is a consumer product regardless of whether the product has substantial\n" "commercial, industrial or non-consumer uses, unless such uses represent\n" "the only significant mode of use of the product.\n" "\n" " ""Installation Information"" for a User Product means any methods,\n" "procedures, authorization keys, or other information required to install\n" "and execute modified versions of a covered work in that User Product from\n" "a modified version of its Corresponding Source. The information must\n" "suffice to ensure that the continued functioning of the modified object\n" "code is in no case prevented or interfered with solely because\n" "modification has been made.\n" "\n" " If you convey an object code work under this section in, or with, or\n" "specifically for use in, a User Product, and the conveying occurs as\n" "part of a transaction in which the right of possession and use of the\n" "User Product is transferred to the recipient in perpetuity or for a\n" "fixed term (regardless of how the transaction is characterized), the\n" "Corresponding Source conveyed under this section must be accompanied\n" "by the Installation Information. But this requirement does not apply\n" "if neither you nor any third party retains the ability to install\n" "modified object code on the User Product (for example, the work has\n" "been installed in ROM).\n" "\n" " The requirement to provide Installation Information does not include a\n" "requirement to continue to provide support service, warranty, or updates\n" "for a work that has been modified or installed by the recipient, or for\n" "the User Product in which it has been modified or installed. Access to a\n" "network may be denied when the modification itself materially and\n" "adversely affects the operation of the network or violates the rules and\n" "protocols for communication across the network.\n" "\n" " Corresponding Source conveyed, and Installation Information provided,\n" "in accord with this section must be in a format that is publicly\n" "documented (and with an implementation available to the public in\n" "source code form), and must require no special password or key for\n" "unpacking, reading or copying.\n" "\n" " 7. Additional Terms.\n" "\n" " ""Additional permissions"" are terms that supplement the terms of this\n" "License by making exceptions from one or more of its conditions.\n" "Additional permissions that are applicable to the entire Program shall\n" "be treated as though they were included in this License, to the extent\n" "that they are valid under applicable law. If additional permissions\n" "apply only to part of the Program, that part may be used separately\n" "under those permissions, but the entire Program remains governed by\n" "this License without regard to the additional permissions.\n" "\n" " When you convey a copy of a covered work, you may at your option\n" "remove any additional permissions from that copy, or from any part of\n" "it. (Additional permissions may be written to require their own\n" "removal in certain cases when you modify the work.) You may place\n" "additional permissions on material, added by you to a covered work,\n" "for which you have or can give appropriate copyright permission.\n" "\n" " Notwithstanding any other provision of this License, for material you\n" "add to a covered work, you may (if authorized by the copyright holders of\n" "that material) supplement the terms of this License with terms:\n" "\n" " a) Disclaiming warranty or limiting liability differently from the\n" " terms of sections 15 and 16 of this License; or\n" "\n" " b) Requiring preservation of specified reasonable legal notices or\n" " author attributions in that material or in the Appropriate Legal\n" " Notices displayed by works containing it; or\n" "\n" " c) Prohibiting misrepresentation of the origin of that material, or\n" " requiring that modified versions of such material be marked in\n" " reasonable ways as different from the original version; or\n" "\n" " d) Limiting the use for publicity purposes of names of licensors or\n" " authors of the material; or\n" "\n" " e) Declining to grant rights under trademark law for use of some\n" " trade names, trademarks, or service marks; or\n" "\n" " f) Requiring indemnification of licensors and authors of that\n" " material by anyone who conveys the material (or modified versions of\n" " it) with contractual assumptions of liability to the recipient, for\n" " any liability that these contractual assumptions directly impose on\n" " those licensors and authors.\n" "\n" " All other non-permissive additional terms are considered ""further\n" "restrictions"" within the meaning of section 10. If the Program as you\n" "received it, or any part of it, contains a notice stating that it is\n" "governed by this License along with a term that is a further\n" "restriction, you may remove that term. If a license document contains\n" "a further restriction but permits relicensing or conveying under this\n" "License, you may add to a covered work material governed by the terms\n" "of that license document, provided that the further restriction does\n" "not survive such relicensing or conveying.\n" "\n" " If you add terms to a covered work in accord with this section, you\n" "must place, in the relevant source files, a statement of the\n" "additional terms that apply to those files, or a notice indicating\n" "where to find the applicable terms.\n" "\n" " Additional terms, permissive or non-permissive, may be stated in the\n" "form of a separately written license, or stated as exceptions;\n" "the above requirements apply either way.\n" "\n" " 8. Termination.\n" "\n" " You may not propagate or modify a covered work except as expressly\n" "provided under this License. Any attempt otherwise to propagate or\n" "modify it is void, and will automatically terminate your rights under\n" "this License (including any patent licenses granted under the third\n" "paragraph of section 11).\n" "\n" " However, if you cease all violation of this License, then your\n" "license from a particular copyright holder is reinstated (a)\n" "provisionally, unless and until the copyright holder explicitly and\n" "finally terminates your license, and (b) permanently, if the copyright\n" "holder fails to notify you of the violation by some reasonable means\n" "prior to 60 days after the cessation.\n" "\n" " Moreover, your license from a particular copyright holder is\n" "reinstated permanently if the copyright holder notifies you of the\n" "violation by some reasonable means, this is the first time you have\n" "received notice of violation of this License (for any work) from that\n" "copyright holder, and you cure the violation prior to 30 days after\n" "your receipt of the notice.\n" "\n" " Termination of your rights under this section does not terminate the\n" "licenses of parties who have received copies or rights from you under\n" "this License. If your rights have been terminated and not permanently\n" "reinstated, you do not qualify to receive new licenses for the same\n" "material under section 10.\n" "\n" " 9. Acceptance Not Required for Having Copies.\n" "\n" " You are not required to accept this License in order to receive or\n" "run a copy of the Program. Ancillary propagation of a covered work\n" "occurring solely as a consequence of using peer-to-peer transmission\n" "to receive a copy likewise does not require acceptance. However,\n" "nothing other than this License grants you permission to propagate or\n" "modify any covered work. These actions infringe copyright if you do\n" "not accept this License. Therefore, by modifying or propagating a\n" "covered work, you indicate your acceptance of this License to do so.\n" "\n" " 10. Automatic Licensing of Downstream Recipients.\n" "\n" " Each time you convey a covered work, the recipient automatically\n" "receives a license from the original licensors, to run, modify and\n" "propagate that work, subject to this License. You are not responsible\n" "for enforcing compliance by third parties with this License.\n" "\n" " An ""entity transaction"" is a transaction transferring control of an\n" "organization, or substantially all assets of one, or subdividing an\n" "organization, or merging organizations. If propagation of a covered\n" "work results from an entity transaction, each party to that\n" "transaction who receives a copy of the work also receives whatever\n" "licenses to the work the party's predecessor in interest had or could\n" "give under the previous paragraph, plus a right to possession of the\n" "Corresponding Source of the work from the predecessor in interest, if\n" "the predecessor has it or can get it with reasonable efforts.\n" "\n" " You may not impose any further restrictions on the exercise of the\n" "rights granted or affirmed under this License. For example, you may\n" "not impose a license fee, royalty, or other charge for exercise of\n" "rights granted under this License, and you may not initiate litigation\n" "(including a cross-claim or counterclaim in a lawsuit) alleging that\n" "any patent claim is infringed by making, using, selling, offering for\n" "sale, or importing the Program or any portion of it.\n" "\n" " 11. Patents.\n" "\n" " A ""contributor"" is a copyright holder who authorizes use under this\n" "License of the Program or a work on which the Program is based. The\n" "work thus licensed is called the contributor's ""contributor version"".\n" "\n" " A contributor's ""essential patent claims"" are all patent claims\n" "owned or controlled by the contributor, whether already acquired or\n" "hereafter acquired, that would be infringed by some manner, permitted\n" "by this License, of making, using, or selling its contributor version,\n" "but do not include claims that would be infringed only as a\n" "consequence of further modification of the contributor version. For\n" "purposes of this definition, ""control"" includes the right to grant\n" "patent sublicenses in a manner consistent with the requirements of\n" "this License.\n" "\n" " Each contributor grants you a non-exclusive, worldwide, royalty-free\n" "patent license under the contributor's essential patent claims, to\n" "make, use, sell, offer for sale, import and otherwise run, modify and\n" "propagate the contents of its contributor version.\n" "\n" " In the following three paragraphs, a ""patent license"" is any express\n" "agreement or commitment, however denominated, not to enforce a patent\n" "(such as an express permission to practice a patent or covenant not to\n" "sue for patent infringement). To ""grant"" such a patent license to a\n" "party means to make such an agreement or commitment not to enforce a\n" "patent against the party.\n" "\n" " If you convey a covered work, knowingly relying on a patent license,\n" "and the Corresponding Source of the work is not available for anyone\n" "to copy, free of charge and under the terms of this License, through a\n" "publicly available network server or other readily accessible means,\n" "then you must either (1) cause the Corresponding Source to be so\n" "available, or (2) arrange to deprive yourself of the benefit of the\n" "patent license for this particular work, or (3) arrange, in a manner\n" "consistent with the requirements of this License, to extend the patent\n" "license to downstream recipients. ""Knowingly relying"" means you have\n" "actual knowledge that, but for the patent license, your conveying the\n" "covered work in a country, or your recipient's use of the covered work\n" "in a country, would infringe one or more identifiable patents in that\n" "country that you have reason to believe are valid.\n" "\n" " If, pursuant to or in connection with a single transaction or\n" "arrangement, you convey, or propagate by procuring conveyance of, a\n" "covered work, and grant a patent license to some of the parties\n" "receiving the covered work authorizing them to use, propagate, modify\n" "or convey a specific copy of the covered work, then the patent license\n" "you grant is automatically extended to all recipients of the covered\n" "work and works based on it.\n" "\n" " A patent license is ""discriminatory"" if it does not include within\n" "the scope of its coverage, prohibits the exercise of, or is\n" "conditioned on the non-exercise of one or more of the rights that are\n" "specifically granted under this License. You may not convey a covered\n" "work if you are a party to an arrangement with a third party that is\n" "in the business of distributing software, under which you make payment\n" "to the third party based on the extent of your activity of conveying\n" "the work, and under which the third party grants, to any of the\n" "parties who would receive the covered work from you, a discriminatory\n" "patent license (a) in connection with copies of the covered work\n" "conveyed by you (or copies made from those copies), or (b) primarily\n" "for and in connection with specific products or compilations that\n" "contain the covered work, unless you entered into that arrangement,\n" "or that patent license was granted, prior to 28 March 2007.\n" "\n" " Nothing in this License shall be construed as excluding or limiting\n" "any implied license or other defenses to infringement that may\n" "otherwise be available to you under applicable patent law.\n" "\n" " 12. No Surrender of Others' Freedom.\n" "\n" " If conditions are imposed on you (whether by court order, agreement or\n" "otherwise) that contradict the conditions of this License, they do not\n" "excuse you from the conditions of this License. If you cannot convey a\n" "covered work so as to satisfy simultaneously your obligations under this\n" "License and any other pertinent obligations, then as a consequence you may\n" "not convey it at all. For example, if you agree to terms that obligate you\n" "to collect a royalty for further conveying from those to whom you convey\n" "the Program, the only way you could satisfy both those terms and this\n" "License would be to refrain entirely from conveying the Program.\n" "\n" " 13. Remote Network Interaction; Use with the GNU General Public License.\n" "\n" " Notwithstanding any other provision of this License, if you modify the\n" "Program, your modified version must prominently offer all users\n" "interacting with it remotely through a computer network (if your version\n" "supports such interaction) an opportunity to receive the Corresponding\n" "Source of your version by providing access to the Corresponding Source\n" "from a network server at no charge, through some standard or customary\n" "means of facilitating copying of software. This Corresponding Source\n" "shall include the Corresponding Source for any work covered by version 3\n" "of the GNU General Public License that is incorporated pursuant to the\n" "following paragraph.\n" "\n" " Notwithstanding any other provision of this License, you have\n" "permission to link or combine any covered work with a work licensed\n" "under version 3 of the GNU General Public License into a single\n" "combined work, and to convey the resulting work. The terms of this\n" "License will continue to apply to the part which is the covered work,\n" "but the work with which it is combined will remain governed by version\n" "3 of the GNU General Public License.\n" "\n" " 14. Revised Versions of this License.\n" "\n" " The Free Software Foundation may publish revised and/or new versions of\n" "the GNU Affero General Public License from time to time. Such new versions\n" "will be similar in spirit to the present version, but may differ in detail to\n" "address new problems or concerns.\n" "\n" " Each version is given a distinguishing version number. If the\n" "Program specifies that a certain numbered version of the GNU Affero General\n" "Public License ""or any later version"" applies to it, you have the\n" "option of following the terms and conditions either of that numbered\n" "version or of any later version published by the Free Software\n" "Foundation. If the Program does not specify a version number of the\n" "GNU Affero General Public License, you may choose any version ever published\n" "by the Free Software Foundation.\n" "\n" " If the Program specifies that a proxy can decide which future\n" "versions of the GNU Affero General Public License can be used, that proxy's\n" "public statement of acceptance of a version permanently authorizes you\n" "to choose that version for the Program.\n" "\n" " Later license versions may give you additional or different\n" "permissions. However, no additional obligations are imposed on any\n" "author or copyright holder as a result of your choosing to follow a\n" "later version.\n" "\n" " 15. Disclaimer of Warranty.\n" "\n" " THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\n" "APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\n" "HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ""AS IS"" WITHOUT WARRANTY\n" "OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\n" "THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n" "PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\n" "IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\n" "ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n" "\n" " 16. Limitation of Liability.\n" "\n" " IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n" "WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\n" "THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\n" "GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\n" "USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\n" "DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\n" "PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\n" "EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\n" "SUCH DAMAGES.\n" "\n" " 17. Interpretation of Sections 15 and 16.\n" "\n" " If the disclaimer of warranty and limitation of liability provided\n" "above cannot be given local legal effect according to their terms,\n" "reviewing courts shall apply local law that most closely approximates\n" "an absolute waiver of all civil liability in connection with the\n" "Program, unless a warranty or assumption of liability accompanies a\n" "copy of the Program in return for a fee.\n" "\n" " END OF TERMS AND CONDITIONS\n"; atomes_1.3.1/src/bind.h0000664000175000017500000001370615212624223014370 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file bind.h * @short Binding to the Fortran90 subroutines * @author Sébastien Le Roux */ /* * This header file: 'bind.h' * * Contains: - Binding to the Fortran90 subroutines */ #ifndef BIND_H_ #define BIND_H_ extern void send_label_ (int *, int *, char *); extern int write_xyz_ (char *, int *, int *, int *); extern int read_xyz_ (char *, int *, int *); extern int read_c3d_ (char *, int *); extern int write_c3d_ (char *, int *, int *, int *); extern int read_pdb_ (char *, int *); extern int read_trj_ (char *, int *, int *, int *, int *); extern int read_vas_ (char *, int *, int *, int *, int *); extern double fdmax_ (int *); extern double fkmin_ (int *); extern double oglmax_ (); extern double random3_ (int *); extern int smooth_and_save_ (double *, double *, double *, int *, int *, int *); extern double set_mass_ (int *); extern double set_radius_ (int *, int *); extern double set_neutron_ (int *); extern void profree_ (); extern int chemistry_ (); extern void prep_pos_ (int *, int *); extern void prep_spec_ (double *, int *, int *); extern int prep_data_ (); extern int bonds_ (int *, int *, int *); extern int alloc_data_ (int *, int *, int *); extern void read_pos_ (double *, double *, double *); extern void read_data_ (int *, int *); extern void read_chem_ (double *, double *, double *, double *); extern int add_cells_ (int *, int *, int *); extern int shift_box_center_ (int *, int *, double[3], int *); extern void lattice_ (int *, int *, double[3][3], double[3], double[3], int *, int *, int *); extern void sendcuts_ (int *, int *, double *); extern int rundmtx_ (int *, int *, int *); extern void free_contj_voisj_ (); extern void read_contj_ (int *, int *, int *); extern void read_voisj_ (int *, int *, int *, int *); extern int alloc_contj_voisj_ (int *, int *); extern int bonding_ (int *, int *, int *, int *, double *, double *, char *); extern int molecules_ (int *, int *); extern int bond_angles_ (int *); extern int bond_diedrals_ (int *); extern int dihedrals_for_mol_ (); extern int initrings_ (int *, int *, int *, int *, int *, int *); extern int initchains_ (int *, int *, int *, int *, int *, int *, int *); extern int g_of_r_ (int *, double *, int *); extern int s_of_q_ (double *, double *, int *); extern int cqvf_ (double *, double *, int *, double *, double *); extern int s_of_k_ (int *, int *); extern int s_of_k_t_ (int *, int *, int *, int *, int *, double *, int *, double *, int *); extern int send_gr_ (int *, int *, double *, double *, double *); extern int send_sq_ (int *, int *, double *, double *, double *); extern int g_of_r_fft_ (int *, double *, double *); extern int msd_ (double *, int *); extern int sphericals_ (int *, int *, int *, int *, int *); #endif atomes_1.3.1/src/startup-testing/0000775000175000017500000000000015212624223016451 5ustar lerouxlerouxatomes_1.3.1/src/startup-testing/startup_testing.c0000664000175000017500000002734115212624223022063 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file startup_testing.c * @short Startup testing of OpenGL configuration for the atomes program * @author Sébastien Le Roux */ #ifdef HAVE_CONFIG_H # include #endif #include #include #ifdef GTK3 # include #endif #ifdef G_OS_WIN32 # include # include # include # include #else # include # include # ifdef OSX # include # else # include # endif #endif #ifdef G_OS_WIN32 #define APP_EXTENSION ".exe" #else #include #define APP_EXTENSION #endif int opengl_visual = 1; // OpenGL visual: 1 = GTK default, 0 = X11 default (GTK3 + GtkGLArea only), -1 = no OpenGL /*! \fn void printhelp() \brief print basic help */ void printhelp() { char * help = "\nUsage: ATOMES_OPENGL_TESTING\n\n" " atomes OpenGL setup utility\n\n" "options:\n" " -v, --version version information\n" " -h, --help display this help message\n\n"; char bug[20] = "\nReport a bug to <"; char eh[4] = ">\n"; printf("%s", help); printf("%s", bug); printf("%s", PACKAGE_BUGREPORT); printf("%s\n", eh); } /*! \fn void printversion () \brief print version information */ void printversion () { char scanid[80]="\natomes OpenGL setup utility\n"; char bug[20] = "\nReport a bug to <"; char eh[4] = ">\n"; printf ("%s", scanid); printf ("\n%s version : %s\n", PACKAGE, VERSION); printf ("\nGTK+ version : %1d.%1d.%1d\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf ("%s", bug); printf ("%s", PACKAGE_BUGREPORT); printf ("%s\n", eh); } /*! \fn void show_the_widgets (GtkWidget * widg) \brief show GtkWidget \param widg the GtkWidget to show */ void show_the_widgets (GtkWidget * widg) { #ifdef GTK4 gtk_widget_set_visible (widg, TRUE); #else gtk_widget_show_all (widg); #endif } /*! \fn void hide_the_widgets (GtkWidget * widg) \brief hide GtkWidget \param widg the GtkWidget to show */ void hide_the_widgets (GtkWidget * widg) { #ifdef GTK4 gtk_widget_set_visible (widg, FALSE); #else gtk_widget_hide (widg); #endif } /*! \fn gboolean is_the_widget_visible (GtkWidget * widg) \brief test if a GtkWidget exist, then return if it is visible or not \param widg the GtkWidget */ gboolean is_the_widget_visible (GtkWidget * widg) { if (GTK_IS_WIDGET(widg)) { return gtk_widget_is_visible (widg); } else { return FALSE; } } /*! \fn GtkWidget * destroy_this_widget (GtkWidget * widg) \brief destroy a GtkWidget \param widg the GtkWidget to destroy */ GtkWidget * destroy_this_widget (GtkWidget * widg) { if (widg != NULL) { if (GTK_IS_WIDGET(widg)) { if (is_the_widget_visible(widg)) hide_the_widgets (widg); #ifdef GTK3 gtk_widget_destroy (widg); #endif } } return NULL; } /*! \fn gboolean is_GLExtension_Supported (const char * extension) \brief test if this GLExtension is support \param extension the target GLExtension */ gboolean is_GLExtension_Supported (const char * extension) { int i, j; i = j = 0; glGetIntegerv (GL_NUM_EXTENSIONS, & i); for (j=0; j 3.15.1 uses an X11 visual optimized for GTK+'s OpenGL stuff // since revid dae447728d: https://github.com/GNOME/gtk/commit/dae447728d // However, in some cases it simply cannot start an OpenGL context. // This changes to the default X11 visual instead the GTK's default. GdkScreen * screen = gdk_screen_get_default (); GList * visuals = gdk_screen_list_visuals (screen); // printf("n visuals: %u\n", g_list_length(visuals)); GdkX11Screen* x11_screen = GDK_X11_SCREEN (screen); g_assert (x11_screen != NULL); Visual * default_xvisual = DefaultVisual (GDK_SCREEN_XDISPLAY(x11_screen), GDK_SCREEN_XNUMBER(x11_screen)); GdkVisual * default_visual = NULL; // int i = 0; while (visuals != NULL) { GdkVisual * visual = GDK_X11_VISUAL (visuals -> data); if (default_xvisual -> visualid == gdk_x11_visual_get_xvisual(GDK_X11_VISUAL (visuals -> data)) -> visualid) { // printf("Default visual %d\n", i); default_visual = visual; } // i++; visuals = visuals -> next; } gtk_widget_set_visual (win, default_visual); } #endif #endif /*! \fn GtkWidget * create_opengl_window (GApplication * app) \brief create the test OpenGL window \param app the target GApplication */ GtkWidget * create_opengl_window (GApplication * app) { GtkWidget * win = gtk_application_window_new (GTK_APPLICATION(app)); #ifdef GTK3 #ifdef GTKGLAREA #ifdef LINUX if (! opengl_visual) gtk_window_change_gdk_visual (win); #endif #endif #endif GtkWidget * area; #ifdef GTKGLAREA area = gtk_gl_area_new (); #else area = gtk_drawing_area_new (); #endif #ifdef GTK3 gtk_container_add (GTK_CONTAINER(win), area); #else gtk_window_set_child (GTK_WINDOW(win), area); #endif g_signal_connect (G_OBJECT (area), "realize", G_CALLBACK(on_realize), NULL); show_the_widgets (win); return win; } /*! \fn void test_opengl_window (GApplication * app) \brief test possibility to create an OpenGL context \param app the application */ void test_opengl_window (GApplication * app) { GtkWidget * win = create_opengl_window (app); #ifdef GTK3 #ifdef GTKGLAREA #ifndef G_OS_WIN32 if (! opengl_visual) { win = destroy_this_widget (win); win = create_opengl_window (app); } #endif // G_OS_WIN32 #endif // GTKGLAREA #endif // GTK3 win = destroy_this_widget (win); } /*! \fn G_MODULE_EXPORT void run_opengl_test (GApplication * app, gpointer data) \brief run the OpenGL testing \param app the application to run \param data the associated data pointer */ G_MODULE_EXPORT void run_opengl_test (GApplication * app, gpointer data) { test_opengl_window (app); g_application_quit (app); } int main (int argc, char * argv[]) { gboolean RUNC = TRUE; switch (argc) { case 2: if (g_strcmp0 (argv[1], "-h") == 0 || g_strcmp0 (argv[1], "--help") == 0) { printhelp(); RUNC=FALSE; } else if (g_strcmp0 (argv[1], "-v") == 0 || g_strcmp0 (argv[1], "--version") == 0) { printversion(); RUNC=FALSE; } break; default: break; } #ifdef G_OS_WIN32 #ifndef DEBUG FreeConsole (); #endif #endif if (RUNC) { GtkApplication * TestOpenGLApp; #if GLIB_MINOR_VERSION < 74 TestOpenGLApp = gtk_application_new (g_strdup_printf ("fr.ipcms.atomes.ogl-%d", (int)clock()), G_APPLICATION_FLAGS_NONE); #else TestOpenGLApp = gtk_application_new (g_strdup_printf ("fr.ipcms.atomes.ogl-%d", (int)clock()), G_APPLICATION_DEFAULT_FLAGS); #endif GError * error = NULL; g_application_register (G_APPLICATION(TestOpenGLApp), NULL, & error); g_signal_connect (G_OBJECT(TestOpenGLApp), "activate", G_CALLBACK(run_opengl_test), NULL); int status = g_application_run (G_APPLICATION (TestOpenGLApp), 0, NULL); g_object_unref (TestOpenGLApp); #ifdef DEBUG g_debug ("open_visual = %d, status= %d", opengl_visual, status); #endif switch (opengl_visual) { case 0: // X11 default return -1; break; case -1: // Impossible return -2; break; default: // Gtk default (0) or impossible with fatal error (1) return status; break; } } return 0; } atomes_1.3.1/src/startup-testing/Makefile.am0000664000175000017500000000231415212624223020505 0ustar lerouxleroux# Setup the name of the program to be generated, using: libexec_PROGRAMS = atomes_startup_testing atomes_startup_testing_LDADD = $(LGTK_LIBS) $(GLU_LIBS) $(EPOXY_LIBS) if WINDOWS atomes_startup_testing_LDADD += win_startup.o win_startup.o: ../../misc/win/startup.rc $(WINDRES) $< $@ endif # Create a variable to store the CFLAGS for all the required libraries LIBS_CFLAGS = $(LGTK_CFLAGS) $(GLU_CFLAGS) $(EPOXY_CFLAGS) if GTK3 GTK_VERSION=-DGTK3 else GTK_VERSION=-DGTK4 endif # Use AM_CPPFLAGS to define additional preprocessor flags: if WINDOWS AM_CPPFLAGS = $(GTK_VERSION) -DGTKGLAREA else PACKAGE_CPPFLAGS = -DPACKAGE_PREFIX=\""$(datadir)/atomes"\" if LINUX AM_CPPFLAGS = -DLINUX $(GTK_VERSION) -DGTKGLAREA $(PACKAGE_CPPFLAGS) else AM_CPPFLAGS = -DOSX $(GTK_VERSION) -DGTKGLAREA $(PACKAGE_CPPFLAGS) endif endif inc = -I../../ -I../ -I../opengl/ includes = $(inc) -DGTK_DISABLE_DEPRECATED # Use AM_CFLAGS to define additional C flags: AM_CFLAGS = $(includes) $(LIBS_CFLAGS) atomes_startup_testing_src = startup_testing.c atomes_startup_testing_includes = config.h version.h clean: -rm -f *.o # List the files required to build the program atomes_startup_testing_SOURCES = $(atomes_startup_testing_src) atomes_1.3.1/src/startup-testing/Makefile.in0000664000175000017500000004760415212624223020531 0ustar lerouxleroux# Makefile.in generated by automake 1.18.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2025 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__rm_f = rm -f $(am__rm_f_notfound) am__rm_rf = rm -rf $(am__rm_f_notfound) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ libexec_PROGRAMS = atomes_startup_testing$(EXEEXT) @WINDOWS_TRUE@am__append_1 = win_startup.o subdir = src/startup-testing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(libexecdir)" PROGRAMS = $(libexec_PROGRAMS) am__objects_1 = startup_testing.$(OBJEXT) am_atomes_startup_testing_OBJECTS = $(am__objects_1) atomes_startup_testing_OBJECTS = $(am_atomes_startup_testing_OBJECTS) am__DEPENDENCIES_1 = atomes_startup_testing_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) $(am__append_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/startup_testing.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(atomes_startup_testing_SOURCES) DIST_SOURCES = $(atomes_startup_testing_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ATOMES_MAJOR_VERSION = @ATOMES_MAJOR_VERSION@ ATOMES_MINOR_VERSION = @ATOMES_MINOR_VERSION@ ATOMES_PATCH_VERSION = @ATOMES_PATCH_VERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EPOXY_CFLAGS = @EPOXY_CFLAGS@ EPOXY_LIBS = @EPOXY_LIBS@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCFLAGS_F90 = @FCFLAGS_F90@ FCFLAGS_f90 = @FCFLAGS_f90@ FCLIBS = @FCLIBS@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTEGRATION_CFLAGS = @INTEGRATION_CFLAGS@ INTEGRATION_LIBS = @INTEGRATION_LIBS@ LDFLAGS = @LDFLAGS@ LGTK_CFLAGS = @LGTK_CFLAGS@ LGTK_LIBS = @LGTK_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIBS = @LIBXML2_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENMP_CFLAGS = @OPENMP_CFLAGS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UP_APPSTREAM = @UP_APPSTREAM@ UP_DESKTOP = @UP_DESKTOP@ UP_MIME = @UP_MIME@ VERSION = @VERSION@ WINDRES = @WINDRES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__rm_f_notfound = @am__rm_f_notfound@ am__tar = @am__tar@ am__untar = @am__untar@ am__xargs_n = @am__xargs_n@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ atomes_startup_testing_LDADD = $(LGTK_LIBS) $(GLU_LIBS) $(EPOXY_LIBS) \ $(am__append_1) # Create a variable to store the CFLAGS for all the required libraries LIBS_CFLAGS = $(LGTK_CFLAGS) $(GLU_CFLAGS) $(EPOXY_CFLAGS) @GTK3_FALSE@GTK_VERSION = -DGTK4 @GTK3_TRUE@GTK_VERSION = -DGTK3 @LINUX_FALSE@@WINDOWS_FALSE@AM_CPPFLAGS = -DOSX $(GTK_VERSION) -DGTKGLAREA $(PACKAGE_CPPFLAGS) @LINUX_TRUE@@WINDOWS_FALSE@AM_CPPFLAGS = -DLINUX $(GTK_VERSION) -DGTKGLAREA $(PACKAGE_CPPFLAGS) # Use AM_CPPFLAGS to define additional preprocessor flags: @WINDOWS_TRUE@AM_CPPFLAGS = $(GTK_VERSION) -DGTKGLAREA @WINDOWS_FALSE@PACKAGE_CPPFLAGS = -DPACKAGE_PREFIX=\""$(datadir)/atomes"\" inc = -I../../ -I../ -I../opengl/ includes = $(inc) -DGTK_DISABLE_DEPRECATED # Use AM_CFLAGS to define additional C flags: AM_CFLAGS = $(includes) $(LIBS_CFLAGS) atomes_startup_testing_src = startup_testing.c atomes_startup_testing_includes = config.h version.h # List the files required to build the program atomes_startup_testing_SOURCES = $(atomes_startup_testing_src) all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/startup-testing/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/startup-testing/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libexecPROGRAMS: $(libexec_PROGRAMS) @$(NORMAL_INSTALL) @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(libexecdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libexecdir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(libexecdir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(libexecdir)$$dir" || exit $$?; \ } \ ; done uninstall-libexecPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(libexec_PROGRAMS)'; test -n "$(libexecdir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(libexecdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(libexecdir)" && $(am__rm_f) $$files clean-libexecPROGRAMS: -$(am__rm_f) $(libexec_PROGRAMS) atomes_startup_testing$(EXEEXT): $(atomes_startup_testing_OBJECTS) $(atomes_startup_testing_DEPENDENCIES) $(EXTRA_atomes_startup_testing_DEPENDENCIES) @rm -f atomes_startup_testing$(EXEEXT) $(AM_V_CCLD)$(LINK) $(atomes_startup_testing_OBJECTS) $(atomes_startup_testing_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/startup_testing.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @: >>$@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(libexecdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -$(am__rm_f) $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean-am: clean-generic clean-libexecPROGRAMS mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/startup_testing.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libexecPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/startup_testing.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libexecPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libexecPROGRAMS cscopelist-am ctags \ ctags-am distclean distclean-compile distclean-generic \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am \ install-libexecPROGRAMS install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-libexecPROGRAMS .PRECIOUS: Makefile @WINDOWS_TRUE@win_startup.o: ../../misc/win/startup.rc @WINDOWS_TRUE@ $(WINDRES) $< $@ clean: -rm -f *.o # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Tell GNU make to disable its built-in pattern rules. %:: %,v %:: RCS/%,v %:: RCS/% %:: s.% %:: SCCS/s.% atomes_1.3.1/src/opengl/0000775000175000017500000000000015212624223014560 5ustar lerouxlerouxatomes_1.3.1/src/opengl/glview.h0000664000175000017500000002705315212624223016235 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file glview.h * @short Variable declarations related to the OpenGL window \n Function declarations related to the OpenGL window * @author Sébastien Le Roux */ /* * This header file: 'glview.h' * * Contains: - Variable declarations related to the OpenGL window - Function declaration related to the OpenGL window */ #ifndef GL_VIEW_H_ #define GL_VIEW_H_ /*! \def QUALITY \brief Default OpenGL quality (number of polygons) */ #define QUALITY 30 /*! \def DEFAULT_STYLE \brief Default OpenGL style: ball and stick */ #define DEFAULT_STYLE 1 #define DEFAULT_SIZE 1 /*! \def DEFAULT_LIGHTNING \brief Default OpenGL material ligthning */ #define DEFAULT_LIGHTNING 5.00 /*! \def DEFAULT_METALLIC \brief Default OpenGL material metallic */ #define DEFAULT_METALLIC 0.35 /*! \def DEFAULT_ROUGHNESS \brief Default OpenGL material roughness */ #define DEFAULT_ROUGHNESS 0.15 /*! \def DEFAULT_AMBIANT_OCCLUSION \brief Default OpenGL material ambiant occlusion */ #define DEFAULT_AMBIANT_OCCLUSION 0.99 /*! \def DEFAULT_GAMMA_CORRECTION \brief Default OpenGL material gamma correction */ #define DEFAULT_GAMMA_CORRECTION 1.50 /*! \def DEFAULT_OPACITY \brief Default OpenGL opacity */ #define DEFAULT_OPACITY 1.00 /*! \def TEMPLATES \brief Number of material templates */ #define TEMPLATES 7 extern gchar * material_template[TEMPLATES]; extern GLfloat template_parameters[TEMPLATES][5]; // default light data /*! \def MAX_LIGHTS \brief Maximum number of light sources */ #define MAX_LIGHTS 10 /*! \def DEFAULT_INTENSITY \brief Default light intensity */ #define DEFAULT_INTENSITY 30.0 /*! \def NEAR_PLANE \brief Default value for the OpenGL near plane */ #define NEAR_PLANE 1.0 /*! \def FAR_PLANE \brief Default value for the OpenGL far plane */ #define FAR_PLANE 10.0 /*! \def CAMERA_ANGLE_X \brief Default value for the OpenGL camera pitch in ° */ #define CAMERA_ANGLE_X 5.0 // Pitch in degree /*! \def CAMERA_ANGLE_Y \brief Default value for the OpenGL camera heading in ° */ #define CAMERA_ANGLE_Y -25.0 // Heading in degree /*! \def CAMERA_ANGLE_Z \brief Default value for the OpenGL camera toll in ° */ #define CAMERA_ANGLE_Z 0.0 /*! \def ZOOM \brief Default value for the OpenGL zoom */ #define ZOOM 1.5 /*! \def ZOOM_FACTOR \brief Default value for the OpenGL zoom factor */ #define ZOOM_FACTOR 0.05 /*! \def ZOOM_MAX \brief Maximum value for the OpenGL zoom factor */ #define ZOOM_MAX 0.001 /*! \def REFRESH \brief Refresh time for spinning the OpenGL window in milliseconds */ #define REFRESH 10 /*! \def MAX_IN_SELECTION \brief Maximum number of atoms in selection to display measure information */ #define MAX_IN_SELECTION 21 /*! \def COORD_MAX_MENU \brief Maximum number of fragments or molecules to build the related menu items */ #define COORD_MAX_MENU 20 /*! \enum radii */ enum radii { VDW = 0, /*!< 0 */ INC = 1, /*!< 1 */ COV = 2, /*!< 2 */ ION = 3 /*!< 3 */ }; /*! \enum representation */ enum representation { ORTHOGRAPHIC = 0, /*!< 0 */ PERSPECTIVE = 1 /*!< 1 */ }; /*! \enum modes */ enum modes { ANALYZE = 0, /*!< 0 */ EDITION = 1, /*!< 1 */ MOTION = 2, /*!< 2 */ DL_POLY = 3, /*!< 3 */ LAAMPS = 4, /*!< 4 */ CPMD_AI = 5, /*!< 5 */ CP2K_AI = 6, /*!< 6 */ CP2K_QMMM = 7, /*!< 7 */ CP2K_MM = 8 /*!< 8 */ }; #define NUM_STYLES OGL_STYLES+FILLED_STYLES+1 /*! \enum styles */ enum styles { NONE = -1, /*!< -1 */ BALL_AND_STICK = 0, /*!< 0 */ WIREFRAME = 1, /*!< 1 */ SPACEFILL = 2, /*!< 2 */ SPHERES = 3, /*!< 3 */ CYLINDERS = 4, /*!< 4 */ PUNT = 5 /*!< 5 */ }; /*! \enum render */ enum render { FILL = 0, /*!< 0 */ LINE = 1, /*!< 1 */ PTS = 2 /*!< 2 */ }; /*! \enum action */ enum action { ROTATE = 0, /*!< 0 */ MOVE = 1, /*!< 1 */ SELECT = 2, /*!< 2 */ ZOOM_IN_OUT = 3, /*!< 3 */ SPIN = 4 /*!< 4 */ }; /*! \enum mouse_status */ enum mouse_status { CLICKED = 0, /*!< 0 */ RELEASED = 1 /*!< 1 */ }; /*! \enum axisposition */ enum axisposition { TOP_RIGHT = 0, /*!< 0 */ TOP_LEFT = 1, /*!< 1 */ BOTTOM_RIGHT = 2, /*!< 2 */ BOTTOM_LEFT = 3, /*!< 3 */ CENTER = 4, /*!< 4 */ CUSTOM = 5 /*!< 5 */ }; /*! \enum labels */ enum labels { ELEMENT_NAME = 0, /*!< 0 Element name */ SYMBOL = 1, /*!< 1 Element symbol */ SYMBOL_AND_NUM = 2, /*!< 2 Element symbol and ID number */ SYMBOL_AND_IND = 3, /*!< 3 Element symbol and ID number in subscript font */ NUM = 4, /*!< 4 ID number */ ID_IN_MOLECULE = 5 /*!< 5 ID number in molecule */ }; /*! \enum actions */ enum actions { DISPL = 2, /*!< 2 */ REPLACE = 3, /*!< 3 */ REMOVE = 4, /*!< 4 */ INSERT = 5, /*!< 5 */ RANMOVE = 6 /*!< 6 */ }; /*! \enum texts */ enum texts { SIMPLE_TEXT = 0, /*!< 0 */ BETTER_TEXT = 1 /*!< 1 */ }; /*enum material { AMBIENT = 0, DIFFUSE = 1, SPECULAR = 2, EMISSION = 3, OPACITY = 4 };*/ extern GLfloat ** allocdGLfloat (int xal, int yal); extern GLfloat initlights[4][4]; extern gboolean pick; extern glwin * wingl; extern project * proj_gl; extern coord_info * coord_gl; extern box_info * box_gl; extern cell_info * cell_gl; extern int proj_sp; extern int proj_at; extern image * plot; extern int qual; extern int acolorm; extern int pcolorm; extern int step; extern int gColorID[3]; extern int field_object; extern GLenum ogl_texture; extern int get_filled_id (int sid); extern gboolean create_bond (int ac, int bid, int ba, int bb, int sel, double length); extern void draw_cylinder_bond (atom a, atom b, int bid, int ci, int bi); extern void draw_cylinder_bond_to_pick (atom a, atom b, int bid); extern void draw_wireframe_bond (atom a, atom b, int ci, int bi); extern gboolean create_atom (GLUquadricObj * quadric, int aid, int ac, int sp, int sel); extern void draw_vertices (int id); extern void draw_atom_to_pick (atom at); extern void draw_atom (atom at, double al); extern void draw_rings_gl (int se, int ge, int ta, int id); extern void draw_box (); extern void prepare_cuboid (vec3_t position, int id); extern void prepare_axis (); extern void draw (glwin * view); extern void render_all_strings (int glsl, int id); extern void prepare_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct); ColRGBA init_color (int id, int numid); ColRGBA set_default_color (int z); extern void sort (int dim, int * tab); extern vec3_t get_insertion_coordinates (glwin * view); void setup_bonds (glwin * view); void update (glwin * view); void center_this_molecule (glwin * view); G_MODULE_EXPORT void to_center_this_molecule (GtkWidget * widg, gpointer data); #ifdef GTK3 G_MODULE_EXPORT gboolean on_lib_pressed (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_glwin_button_event (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_motion (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_scrolled (GtkWidget * widg, GdkEvent * event, gpointer data); #else G_MODULE_EXPORT void on_lib_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_lib_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_glwin_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_glwin_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_glwin_pointer_motion (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data); G_MODULE_EXPORT gboolean on_glwin_pointer_scoll (GtkEventControllerScroll * event, gdouble dx, gdouble dy, gpointer data); #endif void reshape (glwin * view, int width, int height, gboolean use_ratio); void zoom (glwin * view, int delta); void init_opengl (); void init_camera (project * this_proj); #ifdef GTKGLAREA G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data); G_MODULE_EXPORT gboolean on_expose (GtkGLArea * area, GdkGLContext * context, gpointer data); #else G_MODULE_EXPORT void on_realize (GtkWidget * area, gpointer data); G_MODULE_EXPORT gboolean on_expose (GtkWidget * widg, cairo_t * cr, gpointer data); #endif extern void debug_image (image img, int i); extern distance distance_2d (atom * at, atom * bt); extern distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt); extern angle angle_2d (atom * at, atom * bt, atom * ct); extern angle angle_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct); extern angle dihedral_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt); extern atom * duplicate_atom (atom * at); extern atom * free_atom (atom * at); extern void at_shift (atom * at, float * shift); extern void at_unshift (atom * at, float * shift); extern int check_label_numbers (project * this_proj, int types); extern mat4_t create_axis_matrices (int type); extern mat4_t create_label_matrices (); extern int nbs, nbl, nba; extern void re_create_all_md_shaders (glwin * view); extern void re_create_md_shaders (int nshaders, int shaders[nshaders], project * this_proj); extern void cleaning_shaders (glwin * view, int shader); extern void init_default_shaders (glwin * view); extern void init_shaders(glwin * view); extern object_3d * free_object_3d (object_3d * obj); extern glsl_program * init_shader_program (int object, int object_id, const GLchar * vertex, const GLchar * geometry, const GLchar * fragment, GLenum type_of_vertices, int narray, int nunif, gboolean lightning, object_3d * obj); extern void update_selection_list (atom_selection * at_list, atom * at, gboolean add); extern void update_all_selections (glwin * view, int pi); extern void save_all_selections (glwin * view, int pi); extern void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi); extern void update_selection_tree (glwin * view, int pi, int id); extern void update_all_menus (glwin * view, int nats); extern gboolean is_coord_in_menu (int id, project * this_proj); extern atom_search * free_this_search_data (atom_search * this_search); #ifdef GTK3 extern G_MODULE_EXPORT void show_hide_clones (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void set_rep (GtkWidget * widg, gpointer data); #else extern G_MODULE_EXPORT void show_hide_clones (GSimpleAction * action, GVariant * state, gpointer data); #endif extern void popup_selection (glwin * view, double ptx, double pty, int se, int pe, int ai, int bi, int ac); extern void popup_main_menu (glwin * view, double ptx, double pty); typedef struct gl_pop_info gl_pop_info; struct gl_pop_info { int action; double x, y; int pts[5]; }; extern gl_pop_info to_pop; #endif atomes_1.3.1/src/opengl/ogl_shaders.c0000664000175000017500000016660215212624223017231 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file ogl_shaders.c * @short OpenGL shaders for the atomes program * @author Sébastien Le Roux */ /* * This file: 'ogl_shaders.c' * * Contains: * - The OpenGL shaders for the atomes program * * Notes: * LLM tools (ChatGPT, Gemini via Antigravity, Claude) were used at few occasions to prepare some sections of this file, including: - To write parts of the ray-tracing shaders - To write parts the gradient background shaders */ #include "global.h" // Point shaders: // const GLchar * point_vertex; // const GLchar * point_colors; //#define GLSL(src) "#version 430 core\n" #src #define GLSL(src) "#version 150\n" #src const GLchar * point_vertex = GLSL( uniform mat4 mvp; in vec3 vert; in vec3 offset; in float size; in vec4 vertColor; out vec4 vert_color; void main() { vert_color = vertColor; gl_PointSize = size; gl_Position = mvp * vec4(vert + offset, 1.0); } ); const GLchar * point_color = GLSL( in vec4 vert_color; out vec4 fragment_color; void main() { fragment_color = vert_color; } ); // Basic line shaders // const GLchar * line_vertex; // const GLchar * line_colors; const GLchar * line_vertex = GLSL( uniform mat4 mvp; in vec3 vert; in vec4 vertColor; out vec4 vert_color; void main() { vert_color = vertColor; gl_Position = mvp * vec4(vert, 1.0); } ); const GLchar * line_color = GLSL( in vec4 vert_color; out vec4 fragment_color; void main() { fragment_color = vert_color; } ); const GLchar * line_stipple = GLSL( layout(lines) in; layout(line_strip, max_vertices=2) out; in vec4 vert_color[]; uniform float depth; out float line_pos; out vec4 v_color; void main() { vec2 win_pos_0 = gl_in[0].gl_Position.xy; vec2 win_pos_1 = gl_in[1].gl_Position.xy; gl_Position = gl_in[0].gl_Position; line_pos = 0.0; v_color = vert_color[0]; EmitVertex(); gl_Position = gl_in[1].gl_Position; float psize = 3.0; // No particular reason, just seems right line_pos = psize * length(win_pos_1 - win_pos_0); line_pos *= depth; v_color = vert_color[1]; EmitVertex(); EndPrimitive(); } ); const GLchar * angle_vertex = GLSL( uniform mat4 mvp; in vec3 vert; in vec4 vertColor; out vec4 vert_color; void main() { vert_color = vertColor; gl_Position = vec4(vert, 1.0); } ); const GLchar * angle_stipple = GLSL( layout(triangles) in; layout(line_strip, max_vertices=20) out; in vec4 vert_color[]; uniform float depth; uniform mat4 mvp; uniform mat4 un_view; uniform mat4 text_proj; uniform vec4 viewp; out float line_pos; out vec4 v_color; const float PI = 3.14159265359; mat4 translate_this (in vec3 coord) { mat4 translate; translate[0] = vec4(1.0, 0.0, 0.0, 0.0); translate[1] = vec4(0.0, 1.0, 0.0, 0.0); translate[2] = vec4(0.0, 0.0, 1.0, 0.0); translate[3][0] = coord.x; translate[3][1] = coord.y; translate[3][2] = coord.z; translate[3][3] = 1.0; return translate; } vec3 project (in vec3 coord) { mat4 n_mvp = (mvp * translate_this (coord)); vec4 res = n_mvp * vec4(vec3(0.0), 1.0); if (res.w != 0.0) { res.w = 1.0 / res.w; res.x = res.w * res.x + 1.0; res.y = res.w * res.y + 1.0; res.z = res.w * res.z + 1.0; return vec3 (res.x*viewp.z+viewp.x, res.y*viewp.w+viewp.y, res.z); } else { return vec3 (0.0, 0.0, -1.0); } } float angle2d (in vec2 at, in vec2 bt, in vec2 ct) { vec2 ab = bt - at; vec2 bc = bt - ct; float theta = dot(ab,bc) / (length(ab) * length(bc)); if (theta < -1.0) { return acos (-2.0 - theta); } else if (theta > 1.0) { return acos (2.0 - theta); } else { return acos (theta); } } void main() { vec3 pa = project (gl_in[0].gl_Position.xyz); vec3 pb = project (gl_in[1].gl_Position.xyz); vec3 pc = project (gl_in[2].gl_Position.xyz); vec2 pd; pd.x = pb.x + 100.0; pd.y = pb.y; float alpha = angle2d (pa.xy, pb.xy, pd); float beta = angle2d (pc.xy, pb.xy, pd); float theta = angle2d (pa.xy, pb.xy, pc.xy); if (pa.y > pb.y && pc.y > pb.y) { beta = min (alpha, beta); } else if (pa.y < pb.y && pc.y < pb.y) { beta = min (-alpha, -beta); // or beta = - max (alpha, beta); } else { vec2 pe; vec2 pf; pe.y = max(pa.y, pc.y); if (pe.y == pa.y) { pe.x = pa.x; pf.y = pc.y; pf.x = pc.x; } else { pe.x = pc.x; pf.y = pa.y; pf.x = pa.x; } beta = angle2d (pe, pb.xy, pd); alpha = angle2d (pf, pb.xy, pd); if (beta + alpha < PI) { beta -= theta; } } float psize = 3.0; // No particular reason, just seems right float tan_factor = tan(theta/10.0); float radial_factor = cos(theta/10.0); float dist = min(length(pb-pa), length(pb-pc)) / 3.0; float x = dist * cos(beta); float y = dist * sin(beta); float tx; float ty; vec2 apos; vec2 bpos; v_color = vert_color[0]; vec4 pos_s = mvp * gl_in[0].gl_Position; vec4 pos_e = mvp * gl_in[1].gl_Position; line_pos = 0.0; gl_Position = pos_s; EmitVertex(); float line_save = psize * length(pos_e.xy - pos_s.xy); line_pos = line_save; line_pos *= depth; gl_Position = pos_e; EmitVertex(); int i; line_pos = -1.0; EmitVertex(); for (i = 0; i < 11; i++) { apos = vec2(x,y); gl_Position = text_proj * (vec4(pb, 1.0) + vec4(apos.x, apos.y, 0.0, 1.0)); EmitVertex(); if (i == 0) { line_pos = line_save; EmitVertex(); } tx = -y; ty = x; x += tx * tan_factor; y += ty * tan_factor; x *= radial_factor; y *= radial_factor; bpos = vec2(x,y); line_pos += psize * length(bpos - apos) / 20.0; } EmitVertex(); line_save = line_pos; line_pos = -1.0; EmitVertex(); gl_Position = pos_e; EmitVertex(); line_pos = line_save; line_pos *= depth; EmitVertex(); pos_s = mvp * gl_in[2].gl_Position; line_pos += depth * psize * length(pos_s.xy - pos_e.xy); gl_Position = pos_s; EmitVertex(); EndPrimitive(); } ); const GLchar * line_stipple_color = GLSL( uniform int factor; uniform uint pattern; in float line_pos; in vec4 v_color; out vec4 fragment_color; void main() { fragment_color = v_color; if (line_pos == -1.0) discard; uint bit = uint(round(line_pos/factor)) % 16U; if ((pattern & (1U< light.cone_angle) { float epsilon = light.spot_inner - light.spot_outer; I = saturate((theta - light.spot_outer) / epsilon); } else { return vec3(0.0001); } } } vec3 V = normalize(-v_pos); vec3 H = normalize(L + V); vec3 N = surfaceNormal; // compute material reflectance float NdL = max(0.0, dot(N, L)); float NdV = max(0.001, dot(N, V)); float NdH = max(0.001, dot(N, H)); float HdV = max(0.001, dot(H, V)); float LdV = max(0.001, dot(L, V)); // fresnel term is common for any, except phong // so it will be calculated inside ifdefs vec3 specfresnel; vec3 specref; if (model == PHONG) { // specular reflectance with PHONG specfresnel = fresnel_factor (specular, NdV); specref = phong_specular (V, L, N, specfresnel, mat.roughness); } else if (model == BLINN) { // specular reflectance with BLINN specfresnel = fresnel_factor (specular, HdV); specref = blinn_specular (NdH, specfresnel, mat.roughness); } else { // specular reflectance with COOK-TORRANCE specfresnel = fresnel_factor(specular, HdV); specref = cooktorrance_specular(model, NdL, NdV, NdH, specfresnel, mat.roughness); } specref *= vec3(NdL); // diffuse is common for any model vec3 diffref = (vec3(1.0) - specfresnel) * phong_diffuse() * NdL; // compute lighting vec3 reflected_light = vec3(0); vec3 diffuse_light = vec3(0); // initial value == constant ambient light // point light vec3 light_color = light.intensity * A * I; reflected_light += specref * light_color; diffuse_light += diffref * light_color; // final result return diffuse_light * mix(mat.albedo, vec3(0.0), mat.metallic) + reflected_light; } vec3 Apply_fog (in vec3 lightColor) { //distance float dist = 0.0; float fogFactor = 0.0; //compute distance used in fog equations if (fog.based == 0) { //plane based dist = abs (surfacePosition.z); } else { //range based dist = length (surfacePosition); } if (fog.mode == 1) // linear fog { fogFactor = (fog.depth.x - dist)/(fog.depth.y - fog.depth.x); } else if (fog.mode == 2) // exponential fog { fogFactor = 1.0 / exp (dist * fog.density); } else { fogFactor = 1.0 / exp((dist * fog.density)* (dist * fog.density)); } fogFactor = saturate (fogFactor); return mix (fog.color, lightColor, fogFactor); } float computeAO(vec3 N) { float ao = 0.5 + 0.5 * N.y; // plage 0.0 -> 1.0 ao = pow(ao, 1.0); // gamma pour adoucir ao *= mat.ambient_occlusion; return saturate(ao); } void main () { // Properties vec3 color; float alpha; if (lights_on == 0) { color = vec3(1.0); alpha = surfaceColor.w; } else { // mix between metal and non-metal material, for non-metal // constant base specular factor of 0.04 grey is used vec3 specular = mix(vec3(0.04), mat.albedo, mat.metallic); color = vec3(0.0); for(int i = 0; i < numLights; i++) { color += Apply_lighting_model (lights_on, AllLights[i], specular); } color = pow(color, vec3(1.0/mat.gamma)); float ao = computeAO(surfaceNormal); color *= ao; alpha = surfaceColor.w * mat.alpha; } if (fog.mode > 0) { vec3 col = Apply_fog(surfaceColor.rgb*color); fragment_color = vec4 (col * alpha, alpha); } else { fragment_color = vec4 ((surfaceColor.rgb*color) * alpha, alpha); } } ); /* =========================================================================== * Perfect-impostor shaders (plot -> ray_tracing). * * Principle: each primitive (sphere, cylinder, cone, cap) is rendered as a * camera-aligned billboard quad (4 vertices, GL_TRIANGLE_STRIP). * The fragment shader performs an exact analytic ray intersection * and additionally writes gl_FragDepth with the depth of the actual hit point, * giving pixel-perfect silhouettes AND correct depth-buffer occlusion between * overlapping atoms / bonds. * * Billboard proxy geometry (draw_billboard_quad, see d_atoms.c): * vertices[0] = (-1,-1, 0) GL_TRIANGLE_STRIP layout: * vertices[1] = (-1,+1, 0) tri 0: verts 0-1-2 * vertices[2] = (+1,-1, 0) tri 1: verts 1-2-3 * vertices[3] = (+1,+1, 0) * indices: 0 1 2 3 * * Instance buffer layouts are IDENTICAL to the non-impostor counterparts * (ATOM_BUFF_SIZE, CYLI_BUFF_SIZE, CAPS_BUFF_SIZE) so no changes are needed * to the buffer-filling code in d_*.c. * ===========================================================================*/ /* -------------------------------------------------------------------------- * Sphere impostor – vertex shader * Build a camera-aligned billboard quad that tightly covers the projected * sphere footprint. All work is done in view space; m_proj is used for * the final clip-space position. * --------------------------------------------------------------------------*/ const GLchar * sphere_vertex_ray = GLSL( uniform mat4 m_view; uniform mat4 m_proj; uniform int view_is_ortho; in vec3 vert; /* billboard corner: (-1,-1,0)…(+1,+1,0) */ in vec3 offset; /* sphere center, world space (from instance data) */ in float radius; /* sphere radius (from instance data) */ in vec4 vertColor; /* RGBA color (from instance data) */ out vec4 surfaceColor; out vec3 surfacePosition; out vec3 imp_a; /* sphere center, view space */ out vec3 imp_b; /* unused for sphere – set to 0 */ out float imp_r; /* sphere radius (world-space units) */ flat out int form_type; /* 0 = sphere */ flat out float clip_r_a; /* sphere clip radius at imp_a endpoint (0 for non-cylinders) */ flat out float clip_r_b; /* sphere clip radius at imp_b endpoint (0 for non-cylinders) */ void main () { surfaceColor = vertColor; /* Sphere centre in view space */ vec3 center_vs = vec3(m_view * vec4(offset, 1.0)); /* View-space radius with scale correction */ float r_vs = radius * length(mat3(m_view) * vec3(1.0, 0.0, 0.0)); /* Billboard quad shifted forward to be in front of the sphere focal plane, and inflated by 2.0x to cover perspective distortion at screen edges. */ // vec3 billboard_vs = center_vs + (2.0 * r_vs) * vec3(vert.x, vert.y, 1.0); float inflation = (view_is_ortho == 0) ? 1.05 : 2.0; vec3 billboard_vs = center_vs + (inflation * r_vs) * vec3(vert.x, vert.y, 1.0); surfacePosition = billboard_vs; imp_a = center_vs; imp_b = vec3(0.0); imp_r = r_vs; form_type = 0; clip_r_a = 0.0; /* spheres have no clipping */ clip_r_b = 0.0; gl_Position = m_proj * vec4(billboard_vs, 1.0); gl_Position.z = max(gl_Position.z, -gl_Position.w); } ); /* -------------------------------------------------------------------------- * Cylinder impostor – vertex shader * Build a tight axis-aligned bounding-box billboard from the two cylinder * endpoints (reconstructed from instance data). * --------------------------------------------------------------------------*/ const GLchar * cylinder_vertex_ray = GLSL( uniform mat4 m_view; uniform mat4 m_proj; uniform int view_is_ortho; in vec4 quat; /* rotation quaternion {w,x,y,z} */ in float height; /* full cylinder length (from instance data) */ in float radius; /* cylinder radius */ in vec3 offset; /* cylinder midpoint, world space */ in vec3 vert; /* billboard corner: (-1,-1,0)…(+1,+1,0) */ in vec4 vertColor; /* Sphere clip radii at the two cylinder endpoints (CYLI_BUFF_SIZE+2 layout). r_sphere_a = sphere radius at the atom-side endpoint (imp_a / local z=+0.5h). r_sphere_b = sphere radius at the midpoint-side endpoint (0.0 for half-bonds). */ in float r_sphere_a; in float r_sphere_b; out vec4 surfaceColor; out vec3 surfacePosition; out vec3 imp_a; /* endpoint p1, view space */ out vec3 imp_b; /* endpoint p2, view space */ out float imp_r; /* view-space radius */ flat out int form_type; /* 1 = cylinder */ flat out float clip_r_a; /* passed through to fragment for endpoint clipping */ flat out float clip_r_b; vec3 rotate_this (in vec3 v, in vec4 q) { vec3 u = vec3(q.x, q.y, q.z); float s = q.w; return 2.0 * dot(u, v) * u + (s*s - dot(u, u)) * v + 2.0 * s * cross(u, v); } void main () { surfaceColor = vertColor; /* Reconstruct world-space endpoints from instance data */ vec3 local_p1 = vec3(0.0, 0.0, 0.5 * height); vec3 local_p2 = vec3(0.0, 0.0, -0.5 * height); if (quat.w != 0.0) { local_p1 = rotate_this(local_p1, quat); local_p2 = rotate_this(local_p2, quat); } vec3 p1_vs = vec3(m_view * vec4(offset + local_p1, 1.0)); vec3 p2_vs = vec3(m_view * vec4(offset + local_p2, 1.0)); /* View-space radius with scale correction */ float r_vs = radius * length(mat3(m_view) * vec3(1.0, 0.0, 0.0)); /* Dual-endpoint perspective-aware inflation */ float inflation = (view_is_ortho == 0) ? 1.05 : 2.0; float r_vs_bb = inflation * r_vs; /* View-space AABB of both endpoint discs */ float xmin = min(p1_vs.x, p2_vs.x) - r_vs_bb; float xmax = max(p1_vs.x, p2_vs.x) + r_vs_bb; float ymin = min(p1_vs.y, p2_vs.y) - r_vs_bb; float ymax = max(p1_vs.y, p2_vs.y) + r_vs_bb; float z_bb = max(p1_vs.z, p2_vs.z) + r_vs_bb; float bx = mix(xmin, xmax, (vert.x + 1.0) * 0.5); float by = mix(ymin, ymax, (vert.y + 1.0) * 0.5); vec3 billboard_vs = vec3(bx, by, z_bb); surfacePosition = billboard_vs; imp_a = p1_vs; imp_b = p2_vs; imp_r = r_vs; form_type = 1; /* Pass sphere clip radii to the fragment shader. clip_r_a is scaled to view space the same way as imp_r. */ float r_scale = length(mat3(m_view) * vec3(1.0, 0.0, 0.0)); clip_r_a = r_sphere_a * r_scale; clip_r_b = r_sphere_b * r_scale; gl_Position = m_proj * vec4(billboard_vs, 1.0); gl_Position.z = max(gl_Position.z, -gl_Position.w); } ); /* -------------------------------------------------------------------------- * Cone impostor – vertex shader * Same as cylinder impostor but accounts for the asymmetric radii: * ra = 0 at p1 (apex, local z = +0.5·height), rb = radius at p2 (base). * --------------------------------------------------------------------------*/ const GLchar * cone_vertex_ray = GLSL( uniform mat4 m_view; uniform mat4 m_proj; uniform int view_is_ortho; in vec4 quat; in float height; in float radius; /* base radius; apex radius is 0 */ in vec3 offset; in vec3 vert; in vec4 vertColor; out vec4 surfaceColor; out vec3 surfacePosition; out vec3 imp_a; /* apex, view space */ out vec3 imp_b; /* base center, view space */ out float imp_r; /* base radius, view space */ flat out int form_type; /* 3 = cone */ flat out float clip_r_a; /* 0.0 – cones are arrowheads, no sphere junction */ flat out float clip_r_b; vec3 rotate_this (in vec3 v, in vec4 q) { vec3 u = vec3(q.x, q.y, q.z); float s = q.w; return 2.0 * dot(u, v) * u + (s*s - dot(u, u)) * v + 2.0 * s * cross(u, v); } void main () { surfaceColor = vertColor; /* p1 = apex (ra=0, local z=+0.5h), p2 = base (rb=radius, local z=-0.5h) */ vec3 local_apex = vec3(0.0, 0.0, 0.5 * height); vec3 local_base = vec3(0.0, 0.0, -0.5 * height); if (quat.w != 0.0) { local_apex = rotate_this(local_apex, quat); local_base = rotate_this(local_base, quat); } vec3 p_apex_vs = vec3(m_view * vec4(offset + local_apex, 1.0)); vec3 p_base_vs = vec3(m_view * vec4(offset + local_base, 1.0)); float r_vs = radius * length(mat3(m_view) * vec3(1.0, 0.0, 0.0)); float inflation = (view_is_ortho == 0) ? 1.05 : 2.0; float r_vs_bb = inflation * r_vs; /* Asymmetric AABB: apex contributes radius 0, base contributes r_vs_bb */ float xmin = min(p_apex_vs.x, p_base_vs.x - r_vs_bb); float xmax = max(p_apex_vs.x, p_base_vs.x + r_vs_bb); float ymin = min(p_apex_vs.y, p_base_vs.y - r_vs_bb); float ymax = max(p_apex_vs.y, p_base_vs.y + r_vs_bb); /* z: front face = closest of apex/base z + base radius (conservative bound). */ float z_bb = max(p_apex_vs.z, p_base_vs.z) + r_vs_bb; // float bx = (vert.x > 0.0) ? xmax : xmin; // float by = (vert.y > 0.0) ? ymax : ymin; float bx = mix(xmin, xmax, (vert.x + 1.0) * 0.5); float by = mix(ymin, ymax, (vert.y + 1.0) * 0.5); vec3 billboard_vs = vec3(bx, by, z_bb); surfacePosition = billboard_vs; /* imp_a = apex, imp_b = base centre (matches intersect_cone convention) */ imp_a = p_apex_vs; imp_b = p_base_vs; imp_r = r_vs; form_type = 3; clip_r_a = 0.0; clip_r_b = 0.0; gl_Position = m_proj * vec4(billboard_vs, 1.0); gl_Position.z = max(gl_Position.z, -gl_Position.w); } ); /* -------------------------------------------------------------------------- * Cap impostor – vertex shader * A cap is a flat disk; its impostor is a square billboard centered on the * disk center with half-side = radius. * --------------------------------------------------------------------------*/ const GLchar * cap_vertex_ray = GLSL( uniform mat4 m_view; uniform mat4 m_proj; uniform int view_is_ortho; in vec4 quat; in float radius; in vec3 offset; /* cap center, world space */ in vec3 vert; /* billboard corner */ in vec4 vertColor; out vec4 surfaceColor; out vec3 surfacePosition; out vec3 imp_a; /* cap center, view space */ out vec3 imp_b; /* cap normal, view space */ out float imp_r; /* cap radius */ flat out int form_type; /* 2 = cap */ flat out float clip_r_a; /* 0.0 – caps are at midpoints, no sphere junction */ flat out float clip_r_b; vec3 rotate_this (in vec3 v, in vec4 q) { vec3 u = vec3(q.x, q.y, q.z); float s = q.w; return 2.0 * dot(u, v) * u + (s*s - dot(u, u)) * v + 2.0 * s * cross(u, v); } void main () { surfaceColor = vertColor; vec3 center_vs = vec3(m_view * vec4(offset, 1.0)); /* Normal of the disk in view space */ vec3 norm_local = vec3(0.0, 0.0, -1.0); if (quat.w != 0.0) norm_local = rotate_this(norm_local, quat); vec3 norm_vs = normalize (mat3(m_view) * norm_local); float r_vs = radius * length(mat3(m_view) * vec3(1.0, 0.0, 0.0)); float inflation = (view_is_ortho == 0) ? 1.05 : 2.0; /* Camera-aligned square billboard, inflated for robustness. */ vec3 billboard_vs = center_vs + (inflation * r_vs) * vec3(vert.x, vert.y, 1.0); surfacePosition = billboard_vs; imp_a = center_vs; imp_b = norm_vs; imp_r = r_vs; form_type = 2; clip_r_a = 0.0; clip_r_b = 0.0; gl_Position = m_proj * vec4(billboard_vs, 1.0); gl_Position.z = max(gl_Position.z, -gl_Position.w); } ); /* -------------------------------------------------------------------------- * Perfect-impostor fragment shader. * --------------------------------------------------------------------------*/ const GLchar * full_color_ray = GLSL( int PHONG = 1; int BLINN = 2; int COOK_BLINN = 3; int COOK_BECKMANN = 4; int COOK_GGX = 5; struct Light { int type; vec3 position; vec3 direction; vec3 intensity; float constant; float linear; float quadratic; float cone_angle; float spot_inner; float spot_outer; }; struct Material { vec3 albedo; float metallic; float roughness; float ambient_occlusion; float gamma; float alpha; }; struct Fog { int mode; int based; float density; vec2 depth; vec3 color; }; struct Hit { vec3 pos; vec3 normal; }; uniform Light AllLights[10]; uniform Material mat; uniform Fog fog; uniform int lights_on; uniform int numLights; uniform int view_is_ortho; uniform mat4 m_proj; in vec4 surfaceColor; in vec3 surfacePosition; // Standardized Raytracing parameters in vec3 imp_a; in vec3 imp_b; in float imp_r; flat in int form_type; /* Sphere clip radii at the two cylinder endpoints (passed from cylinder_vertex_ray). Non-zero only for cylinders (form_type==1). When a cylinder hit lies inside the sphere at either endpoint, the fragment is discarded — the sphere impostor handles that region. This eliminates z-fighting at sphere/cylinder junctions without any depth bias, which would break 3D depth perception. */ flat in float clip_r_a; flat in float clip_r_b; out vec4 fragment_color; const float PI = 3.14159265359; const float EPS = 1e-5; // clamping to 0 - 1 range float saturate (in float value) { return clamp(value, 0.0, 1.0); } // phong (lambertian) diffuse term float phong_diffuse() { return (1.0 / PI); } // compute Fresnel specular factor for given base specular and product // product could be NdV or VdH depending on used technique vec3 fresnel_factor (in vec3 f0, in float product) { return mix(f0, vec3(1.0), pow(1.01 - product, 5.0)); } // following functions are copies of UE4 // for computing Cook-Torrance specular lighting terms float D_blinn(in float roughness, in float NdH) { float m = roughness * roughness; float m2 = m * m; float n = 2.0 / m2 - 2.0; return (n + 2.0) / (2.0 * PI) * pow(NdH, n); } float D_beckmann(in float roughness, in float NdH) { float m = roughness * roughness; float m2 = m * m; float NdH2 = NdH * NdH; return exp((NdH2 - 1.0) / (m2 * NdH2)) / (PI * m2 * NdH2 * NdH2); } float D_GGX(in float roughness, in float NdH) { float m = roughness * roughness; float m2 = m * m; float d = (NdH * m2 - NdH) * NdH + 1.0; return m2 / (PI * d * d); } float G_schlick(in float roughness, in float NdV, in float NdL) { float k = roughness * roughness * 0.5; float V = NdV * (1.0 - k) + k; float L = NdL * (1.0 - k) + k; return 0.25 / (V * L); } // simple Phong specular calculation with normalization vec3 phong_specular(in vec3 V, in vec3 L, in vec3 N, in vec3 specular, in float roughness) { vec3 R = reflect(-L, N); float spec = max(0.0, dot(V, R)); float k = 1.999 / (roughness * roughness); return min(1.0, 3.0 * 0.0398 * k) * pow(spec, min(10000.0, k)) * specular; } // simple Blinn specular calculation with normalization vec3 blinn_specular(in float NdH, in vec3 specular, in float roughness) { float k = 1.999 / (roughness * roughness); return min(1.0, 3.0 * 0.0398 * k) * pow(NdH, min(10000.0, k)) * specular; } // Cook-Torrance specular calculation vec3 cooktorrance_specular (in int cook, in float NdL, in float NdV, in float NdH, in vec3 specular, in float roughness) { float D; if (cook == COOK_BLINN) { D = D_blinn(roughness, NdH); } else if (cook == COOK_BECKMANN) { D = D_beckmann(roughness, NdH); } else if (cook == COOK_GGX) { D = D_GGX(roughness, NdH); } float G = G_schlick(roughness, NdV, NdL); float rim = mix(1.0 - roughness * 0.9, 1.0, NdV); return (1.0 / rim) * specular * G * D; } vec3 Apply_lighting_model (in int model, in Light light, in vec3 specular, in vec3 v_pos, in vec3 N) { // L, V, H vectors vec3 L; float A; float I = 1.0; if (light.type == 0) { // Directional light L = normalize (-light.direction); A = 1.0; } else { L = light.position - v_pos; float dist = length (L); L = normalize(L); A = 1.0 / (light.constant + light.linear*dist + light.quadratic*dist*dist); if (light.type == 2) { float theta = dot(L, normalize(light.position-light.direction)); if(theta > light.cone_angle) { float epsilon = light.spot_inner - light.spot_outer; I = saturate((theta - light.spot_outer) / epsilon); } else { return vec3(0.0001); } } } vec3 V = normalize(-v_pos); vec3 H = normalize(L + V); // compute material reflectance float NdL = max(0.0, dot(N, L)); float NdV = max(0.001, dot(N, V)); float NdH = max(0.001, dot(N, H)); float HdV = max(0.001, dot(H, V)); float LdV = max(0.001, dot(L, V)); // Fresnel term is common for any, except Phong // so it will be calculated inside ifdefs vec3 specfresnel; vec3 specref; if (model == PHONG) { // specular reflectance with Phong specfresnel = fresnel_factor (specular, NdV); specref = phong_specular (V, L, N, specfresnel, mat.roughness); } else if (model == BLINN) { // specular reflectance with Blinn specfresnel = fresnel_factor (specular, HdV); specref = blinn_specular (NdH, specfresnel, mat.roughness); } else { // specular reflectance with Cook-Torrance specfresnel = fresnel_factor(specular, HdV); specref = cooktorrance_specular (model, NdL, NdV, NdH, specfresnel, mat.roughness); } specref *= vec3(NdL); // diffuse is common for any model vec3 diffref = (vec3(1.0) - specfresnel) * phong_diffuse() * NdL; // compute lighting vec3 reflected_light = vec3(0); vec3 diffuse_light = vec3(0); // initial value == constant ambient light // point light vec3 light_color = light.intensity * A * I; reflected_light += specref * light_color; diffuse_light += diffref * light_color; // final result return diffuse_light * mix(mat.albedo, vec3(0.0), mat.metallic) + reflected_light; } vec3 Apply_fog (in vec3 lightColor, in vec3 v_pos, in vec3 normal) { // distance float dist = 0.0; float fogFactor = 0.0; // compute distance used in fog equations if (fog.based == 0) { // plane based dist = abs (v_pos.z); } else { // range based dist = length (v_pos); } if (fog.mode == 1) // linear fog { fogFactor = (fog.depth.x - dist)/(fog.depth.y - fog.depth.x); } else if (fog.mode == 2) // exponential fog { fogFactor = 1.0 / exp (dist * fog.density); } else { fogFactor = 1.0 / exp((dist * fog.density)* (dist * fog.density)); } fogFactor = saturate (fogFactor); //float viewAngle = dot(normalize(-v_pos), normalize(normal)); // fogFactor *= mix(0.7, 1.0, viewAngle); return mix (fog.color, lightColor, fogFactor); } bool intersect_sphere(vec3 ro, vec3 rd, vec3 c, float r, out Hit hit) { vec3 oc = ro - c; vec3 cr = cross(rd, oc); float d2 = dot(cr, cr); float r2 = r*r; if (d2 > r2) return false; float tca = -dot(oc, rd); float thc = sqrt(r2 - d2); float t = tca - thc; if (t < EPS) t = tca + thc; if (t < EPS) return false; hit.pos = ro + rd*t; hit.normal = normalize(hit.pos - c); return true; } // Numerically stable cylinder intersection via cross products. bool intersect_cylinder(vec3 ro, vec3 rd, vec3 pa, vec3 pb, float ra, out Hit hit) { vec3 ba = pb - pa; vec3 oc = ro - pa; float baba = dot(ba, ba); float bard = dot(ba, rd); float baoc = dot(ba, oc); vec3 vb = cross(rd, ba); vec3 va = cross(oc, ba); float k2 = dot(vb, vb); if (k2 < 1e-10) return false; // Parallel to axis off-center float k1 = dot(va, vb); float k0 = dot(va, va) - ra * ra * baba; float h = k1 * k1 - k2 * k0; if (h < 0.0) return false; h = sqrt(h); float t = (-k1 - h) / k2; if (t < EPS) t = (-k1 + h) / k2; if (t < EPS) return false; float y = baoc + t * bard; if (y > -EPS && y < baba + EPS) { hit.pos = ro + t * rd; hit.normal = normalize((hit.pos - pa) * baba - ba * y); return true; } return false; } bool intersect_cone(vec3 ro, vec3 rd, vec3 pa, vec3 pb, float ra, out Hit hit) { vec3 ba = pb - pa; vec3 oa = ro - pa; float m0 = dot(ba,ba); float m1 = dot(oa,ba); float m2 = dot(rd,ba); if (m0 < 1e-6) return false; float k = (ra*ra) / m0; float m = dot(rd,ba)/m0; // ~ cos angle of ray with axis float n = dot(oa,ba)/m0; float a = dot(rd,rd) - m2*m2*(1.0+k)/m0; float b = dot(rd,oa) - m2*m1*(1.0+k)/m0; float c = dot(oa,oa) - m1*m1*(1.0+k)/m0; float h = b*b - a*c; if (h < 0.0) return false; h = sqrt(h); float t1 = (-b - h)/a; float t2 = (-b + h)/a; float t = 1e20; if (t1 > EPS) t = t1; if (t2 > EPS && t2 < t) t = t2; if (t == 1e20) return false; float y = m1 + t*m2; if (y > -EPS && y < m0 + EPS) { hit.pos = ro + t * rd; hit.normal = normalize(m0*(hit.pos-pa) - ba*(1.0+k)*y); return true; } return false; } bool intersect_cap(vec3 ro, vec3 rd, vec3 center, vec3 normal, float radius, out Hit hit) { float denom = dot(normal, rd); if (abs(denom) < 1e-6) return false; float t = dot(center - ro, normal) / denom; if (t < EPS) return false; vec3 p = ro + t * rd; vec3 v = p - center; if (dot(v, v) > radius * radius) return false; hit.pos = p; hit.normal = normal; // Orient normal towards ray if (dot(hit.normal, rd) > 0.0) hit.normal = -hit.normal; return true; } bool intersect_scene(vec3 ro, vec3 rd, out Hit hit) { if (form_type == 0) // Sphere { return intersect_sphere(ro, rd, imp_a, imp_r, hit); } else if (form_type == 1) // Cylinder { return intersect_cylinder(ro, rd, imp_a, imp_b, imp_r, hit); } else if (form_type == 2) // Cap { return intersect_cap(ro, rd, imp_a, imp_b, imp_r, hit); } else if (form_type == 3) // Cone { return intersect_cone(ro, rd, imp_a, imp_b, imp_r, hit); } return false; } float computeAO(vec3 pos, vec3 N) { const int AO_SAMPLES = 16; const float EPS_AO = 0.001; float maxDist = imp_r * 8.0; float occlusion = 0.0; vec3 tangent = normalize(abs(N.x) > 0.5 ? cross(N, vec3(0,1,0)) : cross(N, vec3(1,0,0))); vec3 bitangent = cross(N, tangent); for(int i = 0; i < AO_SAMPLES; i++) { float u = float(i)/float(AO_SAMPLES); float v = fract(sin(float(i)*91.345) * 47453.545); float phi = 2.0 * PI * v; float cosTheta = sqrt(1.0 - u); float sinTheta = sqrt(u); vec3 dir = vec3(cos(phi) * sinTheta, sin(phi) * sinTheta, cosTheta); // passage dans l’espace du tangent dir = normalize(dir.x*tangent + dir.y*bitangent + dir.z*N); Hit tmp; if(intersect_scene(pos + N * EPS_AO, dir, tmp)) { float dist = length(tmp.pos - pos); // float weight = 1.0 - saturate(dist / maxDist); float weight = exp(-dist * 2.0 / maxDist); occlusion += weight; } } float ao = 1.0 - (occlusion / float(AO_SAMPLES)); ao = pow(ao, mat.gamma); // softening // Safety clamp between 0.0 and 1.0 return saturate(ao); } float ray_computeAO(vec3 N) { // Up orientation (Y is the up vector) float ao = 0.5 + 0.5 * N.y; // Softening ao = pow(ao, mat.gamma); // Safety clamp between 0.0 and 1.0 return saturate(ao); } void main () { /* Ray from camera origin through billboard fragment (view space) */ vec3 surfaceToCamera = normalize(-surfacePosition); vec3 ray_origin = surfacePosition; vec3 ray_dir; if (view_is_ortho == 0) { ray_dir = vec3(0.0, 0.0, -1.0); // Parallel rays (Orthographic) } else { ray_dir = normalize(surfacePosition); // Perspective } Hit the_hit; bool hit = false; hit = intersect_scene (ray_origin, ray_dir, the_hit); if (! hit) discard; if (dot(the_hit.normal, surfaceToCamera) < 0.0) the_hit.normal = -the_hit.normal; /* Sphere-entry clipping for cylinders (form_type == 1): discard cylinder pixels that lie inside the sphere at each endpoint, so the sphere impostor has exclusive ownership of those pixels. This eliminates z-fighting at sphere/cylinder junctions analytically, with no depth bias that would break 3D depth perception. */ const float CLIP_MARGIN = 1.00f; // Optional extra margin if (clip_r_a > 0.0) { float r_clip = clip_r_a * CLIP_MARGIN; if (dot(the_hit.pos - imp_a, the_hit.pos - imp_a) < r_clip * r_clip) discard; } if (clip_r_b > 0.0) { float r_clip = clip_r_b * CLIP_MARGIN; if (dot(the_hit.pos - imp_b, the_hit.pos - imp_b) < r_clip * r_clip) discard; } vec4 hit_clip = m_proj * vec4(the_hit.pos, 1.0); if (hit_clip.w <= 0.0) discard; gl_FragDepth = clamp((hit_clip.z / hit_clip.w + 1.0) * 0.5, 0.0, 1.0); /* Lighting */ vec3 color; float alpha; if (lights_on == 0) { color = vec3(1.0); alpha = surfaceColor.w; } else { // mix between metal and non-metal material, for non-metal // constant base specular factor of 0.04 grey is used vec3 specular = mix(vec3(0.04), mat.albedo, mat.metallic); color = vec3(0.0); vec3 diffuse = vec3(0.0); int i; for(i = 0; i < numLights; i++) { diffuse += Apply_lighting_model (lights_on, AllLights[i], specular, the_hit.pos, the_hit.normal); } float ao = computeAO (the_hit.pos, the_hit.normal) * ray_computeAO (the_hit.normal); diffuse *= (ao * mat.ambient_occlusion); vec3 lit_color = pow(diffuse,vec3(1.0/mat.gamma)); color = surfaceColor.rgb*lit_color; alpha = surfaceColor.w*mat.alpha; } if (fog.mode > 0) { vec3 col = Apply_fog(color, the_hit.pos, the_hit.normal); fragment_color = vec4 (col * alpha, alpha); } else { fragment_color = vec4 (color * alpha, alpha); } } ); /* =========================================================================== * End of perfect-impostor shaders * ===========================================================================*/ const GLchar * angstrom_vertex = GLSL( uniform mat4 mvp; uniform mat4 un_view; uniform mat4 text_proj; uniform vec4 viewp; uniform vec4 pos_shift; uniform int tilted; in vec2 vert; in vec2 tcoord; in vec3 offset; in vec3 at_a; in vec3 at_b; out vec2 text_coords; float angle2d (in vec2 at, in vec2 bt, in vec2 ct) { vec2 ab = bt - at; vec2 bc = bt - ct; float theta = dot(ab,bc) / (length(ab) * length(bc)); if (theta < -1.0) { return acos (-2.0 - theta); } else if (theta > 1.0) { return acos (2.0 - theta); } else { return acos (theta); } } mat4 rotate_this_z (in float theta) { return mat4 ( vec4( cos(theta), sin(theta), 0.0, 0.0), vec4(-sin(theta), cos(theta), 0.0, 0.0), vec4( 0.0, 0.0, 1.0, 0.0), vec4( 0.0, 0.0, 0.0, 1.0)); } mat4 translate_this (in vec3 coord) { mat4 translate; translate[0] = vec4(1.0, 0.0, 0.0, 0.0); translate[1] = vec4(0.0, 1.0, 0.0, 0.0); translate[2] = vec4(0.0, 0.0, 1.0, 0.0); translate[3][0] = coord.x; translate[3][1] = coord.y; translate[3][2] = coord.z; translate[3][3] = 1.0; return translate; } vec4 project (in vec3 coord, vec4 shift) { mat4 n_mvp = mvp * translate_this (coord) * un_view; vec4 res = n_mvp * vec4(vec3(0.0), 1.0); res = translate_this (vec3(shift.x/viewp.z, shift.y/viewp.w, shift.z)) * res; if (res.w != 0.0) { res.w = 1.0 / res.w; res.x = res.w * res.x + 1.0; res.y = res.w * res.y + 1.0; res.z = res.w * res.z + 1.0; return vec4 (res.x*viewp.z+viewp.x, res.y*viewp.w+viewp.y, shift.w*res.z, 1.0); } else { return vec4 (0.0, 0.0, -1.0, 0.0); } } void main() { text_coords = tcoord; float rot_angle = 0.0; vec4 shift = pos_shift; if (tilted > 0) { vec3 pos_a = project (at_a, vec4(0.0)).xyz; vec3 pos_b = project (at_b, vec4(0.0)).xyz; vec2 pa; vec2 pb; vec2 pc; pa.y = max(pos_a.y, pos_b.y); if (pa.y == pos_a.y) { pa.x = pos_a.x; pb.x = pos_b.x; pb.y = pos_b.y; } else { pa.x = pos_b.x; pb.x = pos_a.x; pb.y = pos_a.y; } pc.x = pa.x; pc.y = pb.y; rot_angle = - angle2d (pa, pb, pc); if (pa.x < pb.x) { rot_angle = -rot_angle; shift.x = -shift.x; } } vec4 pos; if (rot_angle != 0.0) { pos = project(offset, shift) + vec4(vert, 0.0, 1.0) * rotate_this_z(rot_angle); } else { pos = project(offset, shift) + vec4(vert, 0.0, 1.0); } gl_Position = text_proj * pos; } ); const GLchar * degree_vertex = GLSL( uniform mat4 mvp; uniform mat4 un_view; uniform mat4 text_proj; uniform vec4 viewp; uniform vec4 pos_shift; uniform int tilted; in vec2 vert; in vec2 tcoord; in vec3 offset; in vec3 at_a; in vec3 at_b; in vec3 at_c; const float PI = 3.14159265359; out vec2 text_coords; float angle2d (in vec2 at, in vec2 bt, in vec2 ct) { vec2 ab = bt - at; vec2 bc = bt - ct; float theta = dot(ab,bc) / (length(ab) * length(bc)); if (theta < -1.0) { return acos (-2.0 - theta); } else if (theta > 1.0) { return acos (2.0 - theta); } else { return acos (theta); } } mat4 rotate_this_z (in float theta) { return mat4 ( vec4( cos(theta), sin(theta), 0.0, 0.0), vec4(-sin(theta), cos(theta), 0.0, 0.0), vec4( 0.0, 0.0, 1.0, 0.0), vec4( 0.0, 0.0, 0.0, 1.0)); } mat4 translate_this (in vec3 coord) { mat4 translate; translate[0] = vec4(1.0, 0.0, 0.0, 0.0); translate[1] = vec4(0.0, 1.0, 0.0, 0.0); translate[2] = vec4(0.0, 0.0, 1.0, 0.0); translate[3][0] = coord.x; translate[3][1] = coord.y; translate[3][2] = coord.z; translate[3][3] = 1.0; return translate; } vec4 project (in vec3 coord, vec4 shift) { mat4 n_mvp = mvp * translate_this (coord) * un_view; vec4 res = n_mvp * vec4(vec3(0.0), 1.0); res = translate_this (vec3(shift.x/viewp.z, shift.y/viewp.w, shift.z)) * res; if (res.w != 0.0) { res.w = 1.0 / res.w; res.x = res.w * res.x + 1.0; res.y = res.w * res.y + 1.0; res.z = res.w * res.z + 1.0; return vec4 (res.x*viewp.z+viewp.x, res.y*viewp.w+viewp.y, shift.w*res.z, 1.0); } else { return vec4 (0.0, 0.0, -1.0, 0.0); } } void main() { text_coords = tcoord; float rot_angle = 0.0; vec4 shift = pos_shift; vec3 pos_a = project (at_a, vec4(0.0)).xyz; vec3 pos_b = project (at_b, vec4(0.0)).xyz; vec3 pos_c = project (at_c, vec4(0.0)).xyz; vec2 pa = pos_a.xy; vec2 pb = pos_b.xy; vec2 pc = pos_c.xy; vec2 pd; float theta = angle2d (pa, pb, pc); pd.x = pb.x + 100.0; pd.y = pb.y; float alpha; float beta; float gamma; vec2 sign; sign.x = 1.0; sign.y = 1.0; beta = angle2d (pa, pb, pd); alpha = angle2d (pc, pb, pd); if (pa.y > pb.y && pc.y > pb.y) { gamma = min (alpha, beta); } else if (pa.y < pb.y && pc.y < pb.y) { gamma = min (-alpha, -beta); } else { vec2 pe; vec2 pf; pe.y = max(pa.y, pc.y); if (pe.y == pa.y) { pe.x = pa.x; pf.y = pc.y; pf.x = pc.x; } else { pe.x = pc.x; pf.y = pa.y; pf.x = pa.x; } beta = angle2d (pe, pb, pd); gamma = beta; alpha = angle2d (pf, pb, pd); if (beta + alpha < PI) { gamma -= theta; } } rot_angle = PI/2.0 - gamma - theta/2.0; vec3 a = at_b + ((at_a - at_b)/3.0 + (at_c - at_b)/3.0)/2.0; vec4 b = project (a, shift); float dist = min(length(pb-pa), length(pb-pc)) / 3.0; float x = pb.x + (shift.x+dist) * sin(rot_angle); float y = pb.y + (shift.y+dist) * cos(rot_angle); if (pa.y < pb.y && pc.y < pb.y) { gamma = - max (alpha, beta); } else if (pa.y > pb.y || pc.y > pb.y) { gamma += PI; } rot_angle = PI/2.0 - gamma - theta/2.0; vec3 c = vec3(x, y, b.z); vec4 pos = vec4(c, 1.0); if (tilted > 0) { rot_angle += PI; pos += vec4(vert, 0.0, 1.0) * rotate_this_z(rot_angle); } else { pos += vec4(vert, 0.0, 1.0); } gl_Position = text_proj * pos; } ); const GLchar * string_color = GLSL( uniform sampler2DRect tex; uniform vec4 vert_color; uniform vec4 viewp; uniform int tilted; in vec2 text_coords; out vec4 fragment_color; void main() { vec2 coords = text_coords; vec4 color = vert_color * vec4(1.0, 1.0, 1.0, texture (tex, text_coords).r); fragment_color = vec4(color.rgb * color.a, color.a); } ); const GLchar * string_color_2d = GLSL( uniform sampler2DRect tex; uniform vec4 vert_color; in vec2 text_coords; out vec4 fragment_color; void main() { vec4 sampled = vec4(1.0, 1.0, 1.0, texture (tex, text_coords).r); vec4 color = vert_color * sampled; fragment_color = vec4(color.rgb * color.a, color.a); } ); const GLchar * background_vertex = GLSL( in vec2 vert; out vec2 fragment_coord; void main () { fragment_coord = 0.5*vert + 0.5; gl_Position = vec4(vert, 0.0, 1.0); } ); const GLchar * background_linear = GLSL( in vec2 fragment_coord; uniform vec4 first_color; uniform vec4 second_color; uniform int gradient; uniform float position; out vec4 fragment_color; void main () { float horizontal = 1.0 - fragment_coord.x; float vertical = fragment_coord.y; float factor; switch (gradient) { case 1: // Linear right to left factor = clamp ((horizontal - position) * 2.0 + 0.5, 0.0, 1.0); break; case 2: // Linear bottom right to top left factor = clamp ((0.5*(horizontal + vertical) - position) * 2.0 + 0.5, 0.0, 1.0); break; case 3: // Linear bottom left to top right factor = clamp ((0.5*(fragment_coord.x + vertical) - position) * 2.0 + 0.5, 0.0, 1.0); break; default: // Linear top to bottom factor = clamp ((vertical - position) * 2.0 + 0.5, 0.0, 1.0); break; } fragment_color = mix(first_color, second_color, factor); } ); const GLchar * background_circular = GLSL( in vec2 fragment_coord; uniform vec4 first_color; uniform vec4 second_color; uniform int gradient; uniform float position; out vec4 fragment_color; void main () { float dist; float factor; vec2 center; switch (gradient) { case 0: // Circular right to left center = vec2 (0.0, 0.5); // left side centered vertically dist = distance (fragment_coord, center) + position - 0.5; // sqrt((1.0 - 0.0)^2 + (1.0 - 0.5)^2) ~ 1.118 factor = clamp (dist / 1.118, 0.0, 1.0); break; case 1: // Circular left to right center = vec2 (1.0, 0.5); // right side centered vertically dist = distance (fragment_coord, center) + position - 0.5; factor = clamp (dist / 1.118, 0.0, 1.0); break; case 2: // Top to bottom center = vec2 (0.5, 1.0); // right side centered vertically dist = distance (fragment_coord, center) + position - 0.5; factor = clamp (dist / 1.118, 0.0, 1.0); break; case 3: // Bottom to top center = vec2 (0.5, 0.0); // right side centered vertically dist = distance (fragment_coord, center) + position - 0.5; factor = clamp (dist / 1.118, 0.0, 1.0); break; case 4: // Circular bottom right to top left center = vec2 (1.0, 0.0); // bottom right corner dist = distance (fragment_coord, center) + position - 0.5; factor = clamp (dist / 1.4142, 0.0, 1.0); break; case 5: // Circular bottom left to top right center = vec2 (0.0, 0.0); // bottom right corner dist = distance (fragment_coord, center) + position - 0.5; factor = clamp (dist / 1.4142, 0.0, 1.0); break; case 6: // Circular top right to bottom left center = vec2 (1.0, 1.0); // top right corner dist = distance (fragment_coord, center) + position - 0.5; factor = clamp (dist / 1.4142, 0.0, 1.0); break; case 7: // Circular top left to bottom right center = vec2 (0.0, 1.0); // top left corner dist = distance (fragment_coord, center) + position - 0.5; factor = clamp (dist / 1.4142, 0.0, 1.0); break; default: center = vec2 (0.5, 0.5); // from the center dist = distance (fragment_coord, center) + position - 0.5; factor = clamp (dist / 0.707, 0.0, 1.0); break; } fragment_color = mix (first_color, second_color, factor); } ); atomes_1.3.1/src/opengl/ogl_shading.h0000664000175000017500000001206415212624223017212 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file ogl_shading.h * @short Variable declarations related to GLSL programs \n Data structure declarations related to GLSL programs * @author Sébastien Le Roux */ /* * This header file: 'ogl_shading.h' * * Contains: - Variable declarations related to GLSL programs - Data structure declarations related to GLSL programs */ #ifndef OGL_SHADING_H_ #define OGL_SHADING_H_ /*! \enum glsl_styles */ enum glsl_styles { GLSL_POINTS = 0, /*!< 0 */ GLSL_SPHERES = 1, /*!< 1 */ GLSL_LINES = 2, /*!< 2 */ GLSL_CYLINDERS = 3, /*!< 3 */ GLSL_CAPS = 4, /*!< 4 */ GLSL_POLYEDRA = 5, /*!< 5 */ GLSL_STRING = 6, /*!< 6 */ GLSL_LIGHT = 7, /*!< 7 */ GLSL_BACK = 8 /*!< 8 */ }; #define POLY_BUFF_SIZE 10 // p(x,y,z), n(x,y,z), color (r,g,b,a) #define LINE_BUFF_SIZE 7 // p(x,y,z), color (r,g,b,a) #define CYLI_BUFF_SIZE 13 // p(x,y,z), length, rad, quat(w,x,y,z), color (r,g,b,a) #define CAPS_BUFF_SIZE 12 // p(x,y,z), rad, quat(w,x,y,z), color (r,g,b,a) #define ATOM_BUFF_SIZE 8 // p(x,y,z), rad, color (r,g,b,a) #define CHAR_BUFF_SIZE 4 // p(x,y), t(x,y) // Points extern const GLchar * point_vertex; extern const GLchar * point_color; // Basic lines extern const GLchar * line_vertex; extern const GLchar * line_color; extern const GLchar * line_stipple; extern const GLchar * line_stipple_color; extern const GLchar * angle_vertex; extern const GLchar * angle_stipple; extern const GLchar * angle_color; extern const GLchar * angstrom_vertex; extern const GLchar * degree_vertex; // Triangles: Multiple lights + Materials + Transparency shaders extern const GLchar * full_vertex; extern const GLchar * full_color; extern const GLchar * full_color_ray; // Sphere extern const GLchar * sphere_vertex; extern const GLchar * sphere_vertex_ray; // Cylinder and caps extern const GLchar * cylinder_vertex; extern const GLchar * cylinder_vertex_ray; extern const GLchar * cone_vertex; extern const GLchar * cone_vertex_ray; extern const GLchar * cap_vertex; extern const GLchar * cap_vertex_ray; extern const GLchar * string_vertex; extern const GLchar * string_color; extern const GLchar * string_color_2d; extern const GLchar * background_vertex; extern const GLchar * background_linear; extern const GLchar * background_circular; /*! \typedef object_3d */ typedef struct object_3d object_3d; struct object_3d { int quality; /*!< OpenGL rendering quality */ int num_vertices; /*!< Number of vertices to render, if any */ int vert_buffer_size; /*!< Buffer size for the vertices, if any */ float * vertices; /*!< Vertices to render, if any */ int num_indices; /*!< Number of indices, if any */ int ind_buffer_size; /*!< Buffer size for the indices, if any */ int * indices; /*!< Indices to render, if any */ int num_instances; /*!< Number of instances, if any */ int inst_buffer_size; /*!< Buffer size for the instances, if any */ float * instances; /*!< Instances to render, if any */ GLuint texture; /*!< Texture ID, if any */ float shift[4]; /*!< 0 to 2, texture position shift, if any: \n (0 = x_shift, 1 = y_shift, 2 = z_shift), \n 3 visibility (0 = normal, 1 = always) */ }; /*! \typedef glsl_program */ typedef struct glsl_program glsl_program; struct glsl_program { int id; /*!< The GLSL program ID */ int object; /*!< The number of 3D object(s) to render */ GLuint vertex_shader; /*!< The vertex shader ID */ GLuint geometry_shader; /*!< The geometry shader ID */ GLuint fragment_shader; /*!< The fragment shader ID */ GLenum vert_type; /*!< The type of vertex */ int draw_type; /*!< In \enum glsl_styles */ gboolean draw_instanced; /*!< 0 = single instance, 1 = multiple instances */ GLuint vao; /*!< Vertex object array ID */ GLuint * vbo; /*!< Binding buffer(s) */ GLuint * array_pointer; /*!< Vertex pointer(s) */ GLuint * uniform_loc; /*!< Uniform location pointer(s) */ GLuint * light_uniform; /*!< Light(s) uniform */ object_3d * obj; /*!< The 3D object(s) to render */ float line_width; /*!< Wireframe line width */ ColRGBA * col; /*!< String color */ }; extern void allocate_instances (object_3d * object); #endif atomes_1.3.1/src/opengl/ogl_utils.c0000664000175000017500000001620515212624223016731 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file ogl_utils.c * @short 2D and 3D calculations utilities for distances and angles * @author Sébastien Le Roux */ /* * This file: 'ogl_utils.c' * * Contains: * - 2D and 3D calculations utilities for distances and angles * * List of functions: double arc_cos (double val); distance distance_2d (atom * at, atom * bt); distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt); angle angle_2d (atom * at, atom * bt, atom * ct); angle angle_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct); angle dihedral_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt); angle inversion_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt); */ #include "global.h" #include "interface.h" #include "glview.h" #include "dlp_field.h" extern gboolean field_color; extern ColRGBA init_color (int id, int numid); /*! \fn distance distance_2d (atom * at, atom * bt) \brief distance between atom a and b in 2D \param at atom a \param bt atom b */ distance distance_2d (atom * at, atom * bt) { distance dist; dist.pbc = FALSE; dist.x = at -> x - bt -> x; dist.y = at -> y - bt -> y; dist.z = 0.0; dist.length = sqrt(dist.x*dist.x + dist.y*dist.y); return dist; } /*! \fn distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt) \brief distance between atom a and b in 3D \param cell unit cell \param mdstep the MD step \param at atom a \param bt atom b */ distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt) { distance dist; double tmp; vec3_t dij; dist.pbc = FALSE; dist.x = at -> x - bt -> x; dist.y = at -> y - bt -> y; dist.z = at -> z - bt -> z; dist.length = sqrt(dist.x*dist.x + dist.y*dist.y + dist.z*dist.z); if (cell -> pbc) { if (cell -> box[mdstep].param[1][0] == 90.0 && cell -> box[mdstep].param[1][1] == 90.0 && cell -> box[mdstep].param[1][2] == 90.0) { dij.x = dist.x - round((at -> x-bt -> x)/cell -> box[mdstep].param[0][0]) * cell -> box[mdstep].param[0][0]; dij.y = dist.y - round((at -> y-bt -> y)/cell -> box[mdstep].param[0][1]) * cell -> box[mdstep].param[0][1]; dij.z = dist.z - round((at -> z-bt -> z)/cell -> box[mdstep].param[0][2]) * cell -> box[mdstep].param[0][2]; } else { vec3_t a = vec3(at -> x, at -> y, at -> z); vec3_t b = vec3(bt -> x, bt -> y, bt -> z); vec3_t af = m4_mul_coord (cell -> box[mdstep].cart_to_frac, a); vec3_t bf = m4_mul_coord (cell -> box[mdstep].cart_to_frac, b); vec3_t nij = v3_sub(af, bf); nij.x -= round(nij.x); nij.y -= round(nij.y); nij.z -= round(nij.z); dij = m4_mul_coord (cell -> box[mdstep].frac_to_cart, nij); } tmp = v3_length(dij); if (dist.length - tmp > 0.001) { dist.pbc = TRUE; dist.x = dij.x; dist.y = dij.y; dist.z = dij.z; dist.length = tmp; } } return dist; } /*! \fn double arc_cos (double val) \brief compute arc cosinus \param val the angle */ double arc_cos (double val) { if (val < -1.0) { return acos(-2.0 - val) * 180.0 / pi; } else if (val > 1.0) { return acos(2.0 - val) * 180.0 / pi; } else { return acos(val) * 180.0 / pi; } } /*! \fn angle angle_2d (atom * at, atom * bt, atom * ct) \brief angle between atom a, b and c in 2D \param at atom a \param bt atom b \param ct atom c */ angle angle_2d (atom * at, atom * bt, atom * ct) { angle theta; distance dist_a = distance_2d (bt, at); distance dist_b = distance_2d (bt, ct); theta.pbc = FALSE; double v = 0.0; v = dist_a.x*dist_b.x + dist_a.y*dist_b.y; theta.angle = arc_cos(v/(dist_a.length*dist_b.length)); return theta; } /*! \fn angle angle_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct) \brief angle between atom a, b and c in 3D \param cell unit cell \param mdstep the MD step \param at atom a \param bt atom b \param ct atom c */ angle angle_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct) { angle theta; distance dist_a = distance_3d (cell, mdstep, bt, at); distance dist_b = distance_3d (cell, mdstep, bt, ct); theta.pbc = FALSE; if (dist_a.pbc || dist_b.pbc) theta.pbc = TRUE; double v = 0.0; v = dist_a.x*dist_b.x + dist_a.y*dist_b.y + dist_a.z*dist_b.z; theta.angle = arc_cos(v/(dist_a.length*dist_b.length)); return theta; } /*! \fn angle dihedral_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt) \brief dihedral between atom a, b, c and d in 3D \param cell unit cell \param mdstep the MD step \param at atom a \param bt atom b \param ct atom c \param dt atom d */ angle dihedral_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt) { angle phi; distance dist_a = distance_3d (cell, mdstep, at, bt); distance dist_b = distance_3d (cell, mdstep, bt, ct); distance dist_c = distance_3d (cell, mdstep, ct, dt); vec3_t u, v; if (dist_a.pbc || dist_b.pbc || dist_c.pbc) phi.pbc = TRUE; u = vec3(dist_a.y*dist_b.z - dist_a.z*dist_b.y, dist_a.z*dist_b.x - dist_a.x*dist_b.z, dist_a.x*dist_b.y - dist_a.y*dist_b.x); v = vec3(dist_b.y*dist_c.z - dist_b.z*dist_c.y, dist_b.z*dist_c.x - dist_b.x*dist_c.z, dist_b.x*dist_c.y - dist_b.y*dist_c.x); if (v3_length(u) == 0.0 || v3_length(v) == 0.0) { phi.angle = 0.0; } else { phi.angle = arc_cos(v3_dot(u, v)/(v3_length(u)*v3_length(v))); } return phi; } /*! \fn angle inversion_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt) \brief inversion angle between atom a, b, c and d in 3D \param cell unit cell \param mdstep the MD step \param at atom a \param bt atom b \param ct atom c \param dt atom d */ angle inversion_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt) { angle inv; distance dist_a = distance_3d (cell, mdstep, bt, at); distance dist_b = distance_3d (cell, mdstep, ct, at); distance dist_c = distance_3d (cell, mdstep, at, dt); vec3_t u, v, w, x; if (dist_a.pbc || dist_b.pbc || dist_c.pbc) inv.pbc = TRUE; u = vec3(dist_b.x, dist_b.y, dist_b.z); v = vec3(dist_c.x, dist_c.y, dist_c.z); w = v3_cross (u, v); x = vec3(dist_a.x, dist_a.y, dist_a.z); if (v3_length(w) == 0.0 || v3_length(x) == 0.0) { inv.angle = 0.0; } else { inv.angle = fabs(90.0 - arc_cos(v3_dot(w, x)/(v3_length(w)*v3_length(x)))); } return inv; } atomes_1.3.1/src/opengl/glwin.h0000664000175000017500000011605415212624223016060 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file glwin.h * @short Variable declarations related the OpenGL window \n Data structure declarations related the OpenGL window * @author Sébastien Le Roux */ /* * This header file: 'glwin.h' * * Contains: - Variable declarations related the OpenGL window - Data structure declarations related the OpenGL window */ #ifndef GLWIN_H_ #define GLWIN_H_ #include "ogl_shading.h" #ifndef GL_COLOR_SUM_EXT # define GL_COLOR_SUM_EXT 0x8458 #endif #ifndef GL_LIGHT_MODEL_COLOR_CONTROL_EXT # define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 #endif #ifndef GL_SEPARATE_SPECULAR_COLOR_EXT # define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA #endif #ifndef GL_TEXTURE_RECTANGLE_ARB # define GL_TEXTURE_RECTANGLE_ARB 0x84F5 #endif #define BOX 0 #define AXIS 1 #define OGL_RENDERS 3 #define OGL_BOX 8 #define OGL_AXIS 13 #define OGL_REPS 2 #define ATOM_MAPS 7 #define POLY_MAPS 7 #define OGL_COORDS 5 #define OGL_RINGS 12 #define NUM_COLORS 64 #define NINPUTS 6 #define NSELECTION 7 #define NGLOBAL_SHADERS 15 /*! \enum object_types */ enum object_types { FROM_DATA = -8, /*!< -8 */ FROM_SPEC = -7, /*!< -7 */ FROM_MOL = -6, /*!< -6 */ FROM_FRAG = -5, /*!< -5 */ FROM_COORD_P = -4, /*!< -4 */ FROM_COORD_T = -3, /*!< -3 */ FROM_LIBRARY = -2, /*!< -2 */ FROM_PROJECT = -1 /*!< -1 */ }; /*! \enum shaders \brief The different types of shaders in the atomes program */ enum shaders { ATOMS = 0, /*!< 0 */ BONDS = 1, /*!< 1 */ SELEC = 2, /*!< 2 */ POLYS = 3, /*!< 3 */ MDBOX = 4, /*!< 4 */ MAXIS = 5, /*!< 5 */ ARROW = 6, /*!< 6 */ RINGS = 7, /*!< 7 */ PICKS = 8, /*!< 8 */ LABEL = 9, /*!< 9 */ MEASU = 10, /*!< 10 */ LIGHT = 11, /*!< 11 */ SLABS = 12, /*!< 12 */ VOLMS = 13, /*!< 13 */ BACKG = 14 /*!< 14 */ }; #define FILLED_STYLES 4 #define OGL_STYLES 6 extern char * text_styles[OGL_STYLES]; extern char * text_filled[FILLED_STYLES]; /*! \typedef angle */ typedef struct angle angle; struct angle { double angle; /*!< the angle value */ gboolean pbc; /*!< are PBC used ? 1 = yes, 0 = no */ }; /*! \typedef distance */ typedef struct distance distance; struct distance { double length; /*!< the distance value */ double x; /*!< x vector component */ double y; /*!< y vector component */ double z; /*!< z vector component */ gboolean pbc; /*!< are PBC used ? 1 = yes, 0 = no */ }; typedef struct atom_data atom_data; struct atom_data { gboolean show[2]; gboolean label[2]; gboolean pick[2]; gboolean cloned; int style; }; typedef struct spinner spinner; struct spinner { GtkWidget * win; GtkWidget * right; GtkWidget * left; GtkWidget * up; GtkWidget * down; GtkWidget * stop; }; typedef struct sequencer sequencer; struct sequencer { GtkWidget * win; GtkWidget * first; GtkWidget * last; GtkWidget * prev; GtkWidget * next; GtkWidget * jump; GtkWidget * play; GtkWidget * stop; GtkWidget * loop; GtkWidget * fast; GtkWidget * slow; }; typedef struct recorder recorder; struct recorder { GtkWidget * win; GtkWidget * rec; GtkWidget * stop; }; /*! \typedef Light \brief Light parameters for OpenGL rendering */ typedef struct Light Light; struct Light { int type; /*!< Light type: 0 = directional, 1 = point, 2 = spot light */ int fix; /*!< Light fix: 0 = fix for the view, 1 = fix for the molecule */ int show; /*!< Show (1) or hide light (0) */ vec3_t position; /*!< Light position */ vec3_t direction; /*!< Light direction for directional and spot lights */ vec3_t intensity; /*!< Light colors */ vec3_t attenuation; /*!< Constant, linear and quadratic attenuation */ vec3_t spot_data; /*!< Angle, inner and outer spot light cutoff */ }; /*! \typedef Lightning \brief Lightning data for OpenGL rendering */ typedef struct Lightning Lightning; struct Lightning { int lights; /*!< The number of lights */ Light ** spot; /*!< The lights */ }; /*! \typedef Material \brief Material parameters for OpenGL rendering */ typedef struct Material Material; struct Material { int predefine; /*!< Cutsom (0) or template (1) */ vec3_t albedo; /*!< Albedo components */ // 0 = lightning model // 2 = metallic // 3 = roughness // 4 = ambient occlusion // 5 = gamma // 6 = opacity GLfloat param[6]; /*!< Material parameters \n 0 = lightning model, \n 1 = metallic, \n 2 = roughness, \n 3 = ambient occlusion, \n 4 = gamma, \n 5 = opacity*/ }; /*! \typedef Fog \brief Fog parameters for OpenGL rendering */ typedef struct Fog Fog; struct Fog { int mode; /*!< Fog mode in: none, linear (LINEAR), exponential (EXP) and exponential squared (EXP2) */ int based; /*!< Fog type: plane based (0) or range based (1) */ float density; /*!< Fog density */ float depth[2]; /*!< Fog depth: 0 = start value, 1 = end value */ vec3_t color; /*!< Fog color */ }; /*! \typedef screen_string \brief OpenGL string rendering */ typedef struct screen_string screen_string; struct screen_string { int id; /*!< The string unique ID */ int type; /*!< The type of string (3= labels, 4 = bonds, 5= angles) */ char * word; /*!< The text to be displayed */ ColRGBA col; /*!< Color of the string */ float shift[4]; /*!< The shifts (if any) on x, y, z, then visibility */ int num_instances; /*!< The number of instances for that string */ float * instances; /*!< The list of instances for that string */ screen_string * prev; screen_string * last; }; typedef struct screen_label screen_label; struct screen_label { int position; int render; int scale; gchar * font; int n_colors; ColRGBA * color; double shift[3]; screen_string * list; }; typedef struct atom_in_selection atom_in_selection; struct atom_in_selection { int id; int sp; atom_in_selection * prev; atom_in_selection * next; }; typedef struct atom_selection atom_selection; struct atom_selection { int selected; int * selected_bonds; ColRGBA * bond_colors; int * selected_angles; ColRGBA * angle_colors; int * selected_dihedrals; ColRGBA * dihedral_colors; atom_in_selection * first; atom_in_selection * last; }; /*! \typedef background \brief a background data structure */ typedef struct background background; struct background { int gradient; /*!< 0 = none \n 1 = linear \n 2 = circular */ int direction; /*!< If linear: \n 0 = right to left \n 1 = top to bottom \n 2 = bottom right to top left \n 3 = top right to bottom left \n If circular: \n 0 = right to left \n 1 = left to right \n 2 = top to bottom \n 3 = bottom to top \n 4 = bottom right to top left \n 5 = bottom left to top right \n 6 = top right to bottom left \n 7 = top left to bottom right \n 8 = center */ float position; /*!< Equal mixed position */ ColRGBA color; ColRGBA gradient_color[2]; }; /*! \typedef axis \brief axis layout data structure */ typedef struct axis axis; struct axis { int axis; /*!< 0 = NONE (hide), 1 = wireframe, 4 = cylinders */ double line; /*!< Width for wireframe */ double rad; /*!< Radius for cylinders */ double length; /*!< Axis length */ int t_pos; /*!< Axis template position */ GLfloat c_pos[3]; /*!< Axis custom positions */ int labels; /*!< Show / hide axis labels */ gchar * title[3]; /*!< Axis titles */ ColRGBA * color; /*!< Associated color */ }; /*! \typedef box \brief box layout data structure */ typedef struct box box; struct box { int box; /*!< 0 = NONE (hide), 1 = wireframe, 4 = cylinders */ double line; /*!< Width for wireframe */ double rad; /*!< Radius for cylinders */ ColRGBA color; /*!< Associated color */ int extra_cell[3]; /*!< Extra cells (if any) on x, y and z */ }; /*! \typedef image \brief a structure to describe the visual content of the OpenGL rendering */ typedef struct image image; struct image { background * back; /*!< Background data structure */ axis * xyz; /*!< Axis layout data structure */ box * abc; /*!< Box layout data structure */ // Color maps for atoms [0] and polyhedra [1] int color_map[2]; /*!< Color maps, 0= atoms, 1 = polyhedra */ gboolean * show_atom[2]; /*!< Daw or not the atom(s), 0 = atoms, 1 = clones */ gboolean * show_label[2]; /*!< Draw or not the label(s), 0 = atoms, 1 = clones */ gboolean * show_poly[9]; /*!< Draw or not the polyhedra */ gboolean * show_coord[10]; /*!< Draw or not the coordination(s) */ // Atoms ColRGBA * at_color; /*!< Atomic species color(s) */ double * sphererad; /*!< Sphere radii (spheres or ball and stick used as style) */ double * pointrad; /*!< Point size (points or wireframe used as style) */ double * atomicrad; /*!< Sphere radii (spacefilled used as style) */ // Bonds double ** bondrad; /*!< Cylinder radii (ball and stick used as style) */ double ** linerad; /*!< Line width (wireframe used as style) */ double radall[2]; /*!< Cylinder radii (cylinders used as style) */ // Clones gboolean draw_clones; /*!< Draw clones: 0 = no, 1 = yes */ gboolean cloned_poly; /*!< Draw cloned ployhedra: 0 = no, 1 = yes */ // Labels // 0 = atoms, 1 = clones, 2 = axis, 3 = measures, 4 = measure edition screen_label labels[5]; /*!< Labels: \n 0 = atom(s), \n 1 = clone(s), \n 2 = axis, \n 3 = measure(s), \n 4 = measure(s) in edition mode */ // 0 = Element name, 1 = Atomic symbol, 2 = Atomic symbol + ID number, 3 = ID number int acl_format[2]; /*!< Label format for the atom(s) and clone(s): \n 0 = element name, \n 1 = atomic symbol, \n 2 = atomic symbol + ID number (default), \n 3 = ID number */ // In the following: 0 = measure in analysis mode, 1 = measure in edition mode gboolean mtilt[2]; /*!< Measure tilt, if any */ int mpattern[2]; /*!< Measure line pattern */ int mfactor[2]; /*!< Measure */ double mwidth[2]; /*!< Measure line width */ int m_is_pressed; /*!< is the key m pressed ? */ // Atom selection: 0 = normal mode, 1 = edition mode atom_selection * selected[2]; /*!< atom(s) selection lists \n 0 = analysis mode, \n 1 = edition mode */ // Colors for atom selections ColRGBA sel_color[2]; // Coordination(s) ColRGBA ** spcolor[10]; /*!< Coordination sphere colors */ GLdouble p_depth; /*!< Camera depth */ GLdouble m_depth; /*!< Maximum camera depth */ GLdouble c_angle[2]; /*!< Camera angle: pitch and heading */ GLdouble c_shift[2]; /*!< Camera position: x and y */ GLdouble gnear; /*!< Near plane position */ GLdouble gfar; /*!< Far plane position */ GLdouble gleft; /*!< Left plane position */ GLdouble gright; /*!< Right plane position */ GLdouble gtop; /*!< Top plane position */ GLdouble gbottom; /*!< Bottom plane position */ GLdouble zoom; /*!< Zoom factor */ vec4_t rotation_quaternion; /*!< Rotation quaternion */ // Only for recording int ** i_rings[5]; /*!< Ring(s) visual information, temporary buffer for movie encoding */ atom_data * at_data; /*!< Atom visual information, temporary buffer for movie encoding */ // Volumes gboolean show_vol[FILLED_STYLES]; /*!< Show (1) or hide (0) overall molecular volumes, calculated using: \n 0 = covalent radii, \n 1 = ionic radii, \n 2 = van der Waals radii, \n 3 = in crystal radii */ ColRGBA vol_col[FILLED_STYLES]; /*!< Overall molecular volume colors, calculated using: \n 0 = covalent radii, \n 1 = ionic radii, \n 2 = van der Waals radii, \n 3 = in crystal radii */ gboolean * fm_show_vol[2][FILLED_STYLES]; /*!< Show (1) or hide (0) isolated fragment(s) and molecule(s) volumes, calculated using: \n 0 = covalent radii, \n 1 = ionic radii, \n 2 = van der Waals radii, \n 3 = in crystal radii */ ColRGBA * fm_vol_col[2][FILLED_STYLES]; /*!< Isolated fragment(s) and molecule(s) volume colors: \n 0 = covalent radii, \n 1 = ionic radii, \n 2 = van der Waals radii, \n 3 = in crystal radii */ int rotation_mode; /*!< Not used anymore, should be removed */ int style; /*!< Default style, in: \n 0 = ball and stick, \n 1 = wireframe, \n 2 = spacefilled, \n 2 = spheres, \n 3 = cylinders, \n 4 = dots */ int filled_type; /*!< Spacefilled type, in: \n 0 = covalent radii, \n 1 = ionic radii, \n 2 = van der Waals radii, \n 3 = in crystal radii */ GLint quality; /*!< Quality of the rendering */ GLint render; /*!< OpenGL render type, in \n 0 = filled (default), \n 1 = lines, \n 2 = points */ int * light_loc; /*!< Lights locations (only used when drawing light spots), in \n 0 = ambient light, not in the model, \n 1 = spot or directional light, in the model */ Lightning l_ghtning; /*!< Lightning description */ Material m_terial; /*!< Material description, if any */ Fog f_g; /*!< Fog description, if any*/ gboolean ray_tracing; /*!< Use or not raytracing rendering with quad billboards, default = TRUE */ int step; /*!< The MD step, in case of trajectory */ int rep; /*!< Representation: 0 = orthographic, 1 = perspective */ int id; /*!< Image ID */ }; /*! \typedef snapshot */ typedef struct snapshot snapshot; struct snapshot { image * img; /*!< The image structure for this snapshot */ snapshot * prev; snapshot * next; }; /*! \typedef animation */ typedef struct animation animation; struct animation { int frames; /*!< Number of frames or snapshots */ snapshot * first; snapshot * last; }; /*! \typedef colormap */ typedef struct colormap colormap; struct colormap { float ** data; /*!< Data to use as custom color map, value per MD step x atom */ int points; /*!< Number of color(s) to build the custom color map */ ColRGBA ** colors; /*!< Color(s) to use to build the custom color map */ float * positions; /*!< Point positions, in the overall value range */ float cmin; /*!< Minimum value */ float cmax; /*!< Maximum value */ ColRGBA * values; /*!< The atom(s) colors calculated using the custom color map information */ }; /*! \typedef atom_search \brief a data structure to search for atom(s) and edit the model */ typedef struct atom_search atom_search; struct atom_search { int proj; /*!< Target project */ int action; /*!< Action to be performed */ GtkWidget * atom_tree; GtkWidget * mode_box; GtkWidget * object_box; GtkWidget * filter_box; GtkWidget * atom_box; GtkWidget * id_box; GtkWidget * big_box; GtkTreeStore * atom_model; GtkListStore * obj_model; GtkTreePath * path; GtkWidget * info[2]; GtkWidget * preview[2]; // 0 = Unselected // 1 = Selected // 2 = All int status; /*!< Atom(s) status for the search, in: \n 0 = unselected, \n 1 = selected, \n 2 = all */ // O = Normal // 1 = Random int mode; /*!< Search mode, in: \n 0 = normal, \n 1 = random */ // 0 = Atoms // 1 = Groups int object; /*!< Search object, in: \n 0 = isolated atom(s), \n 1 = group of atoms */ int filter; /*!< Search filter, in: \n 0 = chemical species, \n 1 = total coordination(s), \n 2 = partial coordination(s), \n 3 = fragment(s), \n 4 = molecule(s) */ int spec; /*!< Target chemical species, if any */ int search_digit; int spec_to_add; int num_to_add; int in_selection; GtkWidget * entry_a, * entry_b; GtkWidget * but_a, * but_b; GtkWidget * img_a, * img_b; // Passivating = for all atoms of that type but not as a group gboolean passivating; gboolean was_selected; gboolean recompute_bonding; int set_for_all; int int_b; int * lab; int * pick; int todo_size; int * todo; tint pointer[6]; }; /*! \typedef atomic_object \brief a data structure to describe an object to work on. \n the object can be one or more: \n - atom(s) \n - chemical species \n - coordination sphere(s) (total or partial) \n - fragment(s) \n - molecule(s) \n - selection(s) of atom(s) from any project in the workspace */ typedef struct atomic_object atomic_object; struct atomic_object { int id; /*!< Object ID */ int origin; /*!< Origin project for the object */ float dim; /*!< Maximum size in x, y or z for the object */ gchar * name; /*!< Name of the object */ int type; /*!< Type of object */ int atoms; /*!< Number of atom(s) */ int species; /*!< Number of chemical species */ int * old_z; /*!< Temporary buffer to preserve the atomic numbers */ struct atom * at_list; /*!< List of atom(s) in the object */ int ifcl; /*!< Number of clone(s), if any */ int * bcid; /*!< Cloned bonds ID */ double occ; /*!< Occupancy (for crystal building purposes) */ double * baryc; /*!< Position barycenter for the object */ int bonds; /*!< Number of chemical bonds */ int ** ibonds; /*!< List of bonds */ coord_info * coord; /*!< coordination information */ atomic_object * prev; atomic_object * next; }; /*! \typedef wyckoff_position \brief a structure to describe a Wyckoff position in crystallography */ typedef struct wyckoff_position wyckoff_position; struct wyckoff_position { int multi; /*!< Multiplicity */ gchar * let; /*!< Letter */ gchar * site; /*!< Symmetry */ gchar *** pos; /*!< Coordinate(s) */ }; /*! \typedef spg_setting \brief a structure to describe the settings of a space group in crystallography */ typedef struct spg_setting spg_setting; struct spg_setting { int origin; /*!< Origin */ gchar * name; /*!< Name of the setting */ gchar * pos[3]; /*!< Lattice orientation modification(s) */ int nump; /*!< Number of Wyckoff position modification(s) */ gchar *** points; /*!< Wyckoff position modification(s) */ }; /*! \typedef space_group \brief a structure to described a space group in crystallography */ typedef struct space_group space_group; struct space_group { int id; /*!< ID number, in [1-230] */ gchar * name; /*!< Name */ gchar * hms; /*!< Hermann-Mauguin symbol */ gchar * bravais; /*!< Type of Bravais lattice */ gchar * setting; /*!< Available setting(s), if any*/ int sid; /*!< Selected setting, if any */ int nums; /*!< Number of possible setting(s) */ spg_setting * settings; /*!< Space group settings */ int numw; /*!< Number of Wyckoff position(s) */ wyckoff_position * wyckoff; /*!< Wyckoff position(s) */ mat4_t coord_origin; /*!< Origin of the atomic coordinates */ mat4_t wyck_origin; /*!< Origin of the Wyckoff positions */ }; /*! \typedef box_info \brief model box information */ typedef struct box_info box_info; struct box_info { double param[2][3]; /*!< Box parameters: \n 0: a, b, c \n 1: alpha, beta, gamma */ double vect[3][3]; /*!< Box vectors */ double rvect[3][3]; /*!< Reciprocal vectors */ mat4_t frac_to_cart; /*!< Fractional to Cartesian matrix */ mat4_t cart_to_frac; /*!< Cartesian to fractional matrix */ double vol; /*!< Volume */ double dens; /*!< Density */ }; /*! \typedef cell_info \brief Description of the periodicity */ typedef struct cell_info cell_info; struct cell_info { box_info * box; /*!< Model box description \n In the case of NPT calculation as many boxes as MD steps are described */ int cextra[3]; /*!< Extra boxes (if any), on x, y and z*/ int pbc; /*!< Apply PBC */ int frac; /*!< Are the initial coordinates fractional ? */ int ltype; /*!< Lattice type, in \n 0 = isolated, \n 1 = a,b,c + angles, \n 2 = vectors */ double volume; /*!< Volume, average if NPT */ double density; /*!< Density, average if NPT */ gboolean npt; /*!< NPT trajectory (0 = no, 1 = yes) */ gboolean has_a_box; /*!< Is there a model box ? (0 = no, 1 = yes) */ gboolean crystal; /*!< Is this a crystal ? (0 = no, 1 = yes) */ space_group * sp_group; /*!< Space group in the case of a crystal */ }; typedef struct builder_edition builder_edition; struct builder_edition { GtkWidget * win; GtkWidget * bh_box; GtkWidget * bv_box[2]; GtkWidget * cs_combo; GtkWidget * bl_box; GtkWidget * ltc_box; GtkWidget * ltc_cons; GtkWidget * bv_img; GtkWidget * bl_combo; GtkWidget * sg_box; GtkWidget * sg_combo; GtkWidget * sg_but; GtkWidget * so_box; GtkWidget * so_combo; GtkWidget * so_info; GtkWidget * la_combo; GtkWidget * lattice_grid; GtkWidget * lattice_box; GtkWidget * bentry[2][3]; GtkWidget * ventry[3][3]; GtkWidget * add_combo; GtkWidget * pbut; cell_info cell; int occupancy; int rounding; gboolean overlapping; gboolean wrap; gboolean clones; int extrac[3]; tint pointers[3][3]; }; typedef struct atom_edition atom_edition; struct atom_edition { GtkWidget * win; GtkWidget * vbox; GtkWidget * notebook; GtkWidget * atom_combo[5]; GtkWidget * axis_combo[2]; GtkWidget * axis_but[2]; GtkWidget * edit_entry[6]; GtkWidget * edit_scale[6]; GtkWidget * at_expand[3]; GtkWidget * edition_but[2]; GtkTreePath ** replace_nodes[2]; gboolean visible; int active; int axis[2]; gboolean show_axis[2]; gboolean rebuilt[2]; gboolean old_axis; float new_param[3][2][6]; float old_param[3][2][6]; int repeat_move; float * msd; float * msd_all; // 0 = REPLACE // 1 = INSERT // 2 = CBUILD // 3 = PASSIVATE atomic_object * to_be_inserted[4]; atomic_object * to_be_moved[2]; int adv_bonding[2]; coord_info * coord; int add_spec; double * new_z; }; typedef struct cell_edition cell_edition; struct cell_edition { GtkWidget * win; GtkWidget * notebook; GtkWidget * put_in_box; GtkWidget * passivate; GtkWidget * superbut; GtkWidget * shift_box[2]; GtkWidget * ax_cell[3]; GtkWidget * edit_entry[21]; GtkWidget * edit_scale[21]; GtkWidget * density_box; GtkWidget * density; gboolean slab_show; gboolean slab_pbc; gboolean cut_this_slab; gboolean slab_passivate; int slab_type; int slab_act; int slab_out; double slab_vol; float slab_alpha; int slab_atoms; int * slab_lot; GtkWidget * slab_opts; GtkWidget * slab_hbox[3]; GtkWidget * slab_param[3]; GtkWidget * slab_box[6]; GtkWidget * slab_info_box; GtkWidget * slab_info; gboolean homo_density; double cparam[21]; double initbox[3]; dint slab_pointer[5]; }; typedef struct opengl_edition opengl_edition; struct opengl_edition { GtkWidget * win; GtkWidget * templates; GtkWidget * param_mat; GtkWidget * m_entry[5]; GtkWidget * m_scale[5]; GtkWidget * lights; GtkWidget * lights_box; GtkWidget * render_fix; GtkWidget * basic[2]; GtkWidget * base_ogl[2][5]; GtkWidget * entogl[5][3]; GtkWidget * advanced_light_box; GtkWidget * light_type; GtkWidget * light_type_box; GtkWidget * light_fix; GtkWidget * light_show; GtkWidget * light_b_entry[2]; GtkWidget * light_entry[6]; GtkWidget * light_b_coord[2]; GtkWidget * dens_box; GtkWidget * depth_box; GtkWidget * fog_range[3]; GtkWidget * param_fog; int proj; dint pointer[6]; tint pos_pointer[5][3]; }; typedef struct coord_edition coord_edition; struct coord_edition { GtkWidget * win; GtkWidget * notebook; GtkTreeStore * rings_model[5]; GtkTreeStore * chains_model; GtkListStore * frag_mol_model[2]; int rst[5], rsz[5], ri[5]; GtkWidget * rilab[5][3]; int cst, csz, ch; GtkWidget * chlab[3]; }; typedef struct measures measures; struct measures { GtkWidget * win; GtkWidget * label; GtkWidget * selection_tree[3]; }; typedef struct volumes volumes; struct volumes { GtkWidget * win; // All model GtkWidget * compb[FILLED_STYLES]; GtkWidget * hboxv[FILLED_STYLES]; GtkWidget * hbvol[FILLED_STYLES]; GtkWidget * lab_vol[FILLED_STYLES]; double angp; // Fragments and molecules int sid[2]; GtkWidget ** fm_compb[2][FILLED_STYLES]; GtkWidget ** fm_hboxv[2][FILLED_STYLES]; GtkWidget ** fm_hbvol[2][FILLED_STYLES]; GtkWidget ** fm_lab_vol[2][FILLED_STYLES]; GtkWidget * fm_vbox[2]; GtkWidget * fm_vvbox[2]; int ngeov[2]; int * geov_id[2]; }; typedef struct model_edition model_edition; struct model_edition { GtkWidget * win; GtkWidget * notebook; }; typedef struct box_edition box_edition; struct box_edition { GtkWidget * win; GtkWidget * show_hide; GtkWidget * styles; GtkWidget * width_box; GtkWidget * width; GtkWidget * radius_box; GtkWidget * radius; GtkWidget * box_data; }; typedef struct axis_edition axis_edition; struct axis_edition { GtkWidget * win; GtkWidget * show_hide; GtkWidget * styles; GtkWidget * width_box; GtkWidget * width; GtkWidget * radius_box; GtkWidget * radius; GtkWidget * length; GtkWidget * axis_data; GtkWidget * templates; GtkWidget * axis_position_box; GtkWidget * axis_label_box[2]; GtkWidget * axis_color_title[3]; }; typedef struct rep_edition rep_edition; struct rep_edition { GtkWidget * win; GtkWidget * camera_widg[7]; }; typedef struct gradient_edition gradient_edition; struct gradient_edition { GtkWidget * win; GtkWidget * g_box; GtkWidget * dir; GtkWidget * d_box[2]; GtkWidget * color_box[2]; GtkWidget * p_box; GtkWidget * p_scale; GtkWidget * col_but; GtkWidget * grad_but[2]; }; /*! \typedef glwin \brief OpenGL window widget structure */ typedef struct glwin glwin; struct glwin { gboolean init; /*!< Was rendering initialized (0 = no, 1 = yes) */ int proj; /*!< Target project */ // The entire OpenGL window GtkWidget * win; // The menu bar GtkWidget * menu_box; GtkWidget * menu_bar; #ifdef GTK3 // OpenGL menus GtkWidget * ogl_styles[OGL_STYLES]; GtkWidget * filled_styles[FILLED_STYLES]; GtkWidget * color_styles[ATOM_MAPS+POLY_MAPS]; GtkWidget * ogl_rep[OGL_REPS]; GtkWidget ** ogl_box_axis[2]; GtkWidget * ogl_box[8]; GtkWidget * ogl_mouse[3]; GtkWidget * ogl_atoms[8]; GtkWidget ** ogl_spec[2]; GtkWidget ** ogl_lab[2]; GtkWidget * ogl_bonds[14]; GtkWidget * ogl_clones[6]; GtkWidget * ogl_coord[OGL_COORDS]; GtkWidget * ogl_rings[OGL_RINGS]; GtkWidget * ogl_chains[2]; GtkWidget ** ogl_geom[2][10]; GtkWidget ** ogl_poly[2][9]; GtkWidget ** oglmv[2][10]; // Coordination sphere show/hide menus GtkWidget ** oglmc[2][9]; // Coordination sphere color menus GtkWidget ** oglmpv[2][9]; // Polyhedra view/hide menus GtkWidget * ogl_mode[2+2*NINPUTS]; GtkWidget * ogl_smode[NSELECTION]; GtkWidget * ogl_anim[2]; #endif GtkWidget * rbuild[2]; GtkWidget * cbuilder; // Matrices et OpenGL vec3_t model_position; vec4_t view_port; mat4_t projection_matrix; mat4_t model_matrix; mat4_t view_matrix; mat4_t un_view_matrix; mat4_t model_view_matrix; mat4_t view_model_matrix; mat4_t proj_model_matrix; mat4_t proj_model_view_matrix; mat4_t proj_view_matrix; mat4_t normal_matrix; mat4_t axis_proj_model_view_matrix; mat4_t label_projection_matrix; gboolean create_shaders[NGLOBAL_SHADERS]; glsl_program *** ogl_glsl[NGLOBAL_SHADERS]; int * n_shaders[NGLOBAL_SHADERS]; opengl_edition * opengl_win; model_edition * model_win[2]; builder_edition * builder_win; box_edition * box_win; axis_edition * axis_win; rep_edition * rep_win; gradient_edition * gradient_win; // OpenGL plot GtkWidget * plot; #ifndef GTKGLAREA GLXContext glcontext; #endif int pixels[2]; int mouseX; int mouseY; int mouseButton; int mouseAction; int mouseStatus; int nth_copy; gboolean to_pick; // Action mode // 0 = analyze (normal), 1 = edit structure int mode; /*!< Mouse mode, in: \n 0 = analyze (default), \n 1 = edition (default for new project) */ // Selection mode int selection_mode; /*!< Mouse selection mode, in: \n 0 = atom / bond, \n 1 = total coordination sphere, \n 2 = partial coordination sphere, \n 3 = fragment, \n 4 = molecule, \n 5 = single fragment, \n 6 = single molecule, \n 7 = selection in edition mode */ // For temporary backup purposes only: atom_selection * tmp_sel[2]; int * stored_labels[2]; int other_status; coord_edition * coord_win; int cmap[ATOM_MAPS]; atom_edition * atom_win; double ** saved_coord[3]; cell_edition * cell_win; // 0 = atoms // 1 = clones // 2 = MOVE // 3 = REPLACE // 4 = REMOVE // 5 = INSERT // 6 = RANMOVE // 7 = CBUILDER // 8 = PASSIVATE atom_search * search_widg[9]; vec3_t baryc[3]; vec3_t insert_coords; // 0 = Status // 1 = Translation / Rotation // 3 = x_t, y_t, z_t, x_r, y_r, z_r float edition_param[3][2][6]; // 0-2 translation, 3-5 rotation // Color pointers, these are used to deal with the // Callbacks for the OpenGL window menus, and are used // for atoms / box / axis ... tint * colorp[64]; /*!< Color pointers \n these are used to deal with the Callbacks for the OpenGL window, \n and are used for atoms / box / axis ... */ colormap * custom_map; /*!< User defined color map, if any */ int allbonds[2]; /*!< Total number of chemical bond(s): \n 0 = normal bond(s), \n 1 = cloned bonds */ int ** bonds; /*!< Number of bond(s) by MD step, then 0/1=normal/cloned */ int **** bondid; /*!< Atoms ID in bonds, by MD step, then 0/1=norm/clones, then bond ID */ // Clones vec3_t ** clones; /*!< List of cloned atomic coordiantes */ gboolean prepare_motion; gboolean was_moved; // Rebuild trigger switch on edition // [0] = on move: // [0] atom_win active: 0/1 to turn off/on // [1] atom_win inactive: 0/1 to turn off/on // [1] = on copy: // [0] atom_win active: 0/1 to turn off/on // [1] atom_win inactive: 0/1 to turn off/on gboolean rebuild[2][2]; /*!< Rebuild trigger switch on edition: \n [0] = on move: \n [0] atom_win active: 0/1 to turn off/on \n [1] atom_win inactive: 0/1 to turn off/on \n [1] = on copy: \n [0] atom_win active: 0/1 to turn off/on \n [1] atom_win inactive: 0/1 to turn off/on */ gboolean bonding; gboolean adv_bonding[2]; /*!< Is advanced bonding information available, \n 0 = Fragments, \n 1 = Molecules */ qint ** gcid[10]; /*!< Geom colors pointers */ gboolean rings; int ring_max[5]; /*!< The largest ring size */ int ** num_rings[5]; /*!< The number of rings (search type, step, ring size) */ int **** all_rings[5]; /*!< The ring(s) of atoms */ gboolean *** show_rpoly[5]; /*!< Show polyhedra of selected rings */ gboolean chains; int chain_max; /*!< The largest chain size */ int ** num_chains; /*!< The number of chains (chain size, step) */ int **** all_chains; /*!< The chain(s) of atoms */ // Volumes data gboolean volumes; double * atoms_volume[FILLED_STYLES]; double * atoms_ppvolume[FILLED_STYLES]; // [9] : a,b,c,alpha,beta,gama,p.x,p.y,p.z double ** volume_box[FILLED_STYLES]; gboolean comp_vol[FILLED_STYLES]; double ** frag_mol_volume[2][FILLED_STYLES]; double ** frag_mol_ppvolume[2][FILLED_STYLES]; double *** frag_box[FILLED_STYLES]; gboolean ** fm_comp_vol[2][FILLED_STYLES]; int labelled; int picked; // Color picking int to_be_picked; /*!< Total number of objects that can be picked */ int atoms_to_be_picked; /*!< Number of atoms that can be picked */ int clones_to_be_picked; /*!< Number of clones that can be picked */ int bonds_to_be_picked; /*!< Number of bonds that can be picked (do not include clones) */ int * color_to_pick; /*!< The different colors that can be picked */ // Spinner, player sequencer * player; gboolean play; gboolean stop; gboolean loop; int speed; spinner * spiner; gboolean spin[4]; int spin_speed[4]; recorder * rec; gboolean record; int frames; animation * anim; double cshift[3]; gboolean wrapped; measures * measure_win; volumes * volume_win; float zoom_factor; GLdouble p_moy; gboolean fullscreen; int action_id; GSimpleActionGroup * action_group; GtkWidget * shortcuts; }; #endif atomes_1.3.1/src/opengl/win/0000775000175000017500000000000015212624223015355 5ustar lerouxlerouxatomes_1.3.1/src/opengl/win/w_bonds.c0000664000175000017500000004177015212624223017165 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_bonds.c * @short Functions to create the bond (legnth/radius) edition window(s) * @author Sébastien Le Roux */ /* * This file: 'w_bonds.c' * * Contains: * - The functions to create the bond (legnth/radius) edition window(s) * * List of functions: void bonds_input_win (GtkWidget * win, project * this_proj, int nspec, int aoc, double ** val) G_MODULE_EXPORT void update_bond_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_bond_parameter (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void set_bond_parameter (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void window_bonds (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void window_bonds (GtkWidget * widg, gpointer data); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #include "color_box.h" extern gchar * label_cutrab (project * this_proj, glwin * view, int id); /*! \fn G_MODULE_EXPORT void update_bond_parameter (GtkEntry * res, gpointer data) \brief update bond parameter callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_bond_parameter (GtkEntry * res, gpointer data) { int id = GPOINTER_TO_INT(data); const gchar * n = entry_get_text (res); double v = string_to_double ((gpointer)n); int j, k, l, m; int a, b, s; s = opengl_project -> nspec; #ifdef GTK3 // GTK3 Menu Action To Check int c; gchar * str; #endif switch (id) { case -5: if (v > 0.0) opengl_project -> modelgl -> anim -> last -> img -> xyz -> length = v; v = opengl_project -> modelgl -> anim -> last -> img -> xyz -> length; #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Axis length [ %f Å ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_box_axis[1][7]), str); g_free (str); #endif if (opengl_project -> modelgl -> axis_win -> length) { update_entry_double (GTK_ENTRY(opengl_project -> modelgl -> axis_win -> length), v); } opengl_project -> modelgl -> create_shaders[MAXIS] = TRUE; break; case -4: if (opengl_project -> modelgl -> anim -> last -> img -> xyz -> axis == CYLINDERS) { if (v > 0.0) opengl_project -> modelgl -> anim -> last -> img -> xyz -> rad = v; v = opengl_project -> modelgl -> anim -> last -> img -> xyz -> rad; #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Radius [ %f Å ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_box_axis[1][6]), str); g_free (str); #endif if (opengl_project -> modelgl -> axis_win) { if (opengl_project -> modelgl -> axis_win -> radius && GTK_IS_WIDGET(opengl_project -> modelgl -> axis_win -> radius)) { update_entry_double (GTK_ENTRY(opengl_project -> modelgl -> axis_win -> radius), v); } } } else { if (v > 0.0) opengl_project -> modelgl -> anim -> last -> img -> xyz -> line = v; v = opengl_project -> modelgl -> anim -> last -> img -> xyz -> line; #ifdef GTK3 str = g_strdup_printf (_("Width [ %f pts ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_box_axis[1][4]), str); g_free (str); #endif } if (opengl_project -> modelgl -> axis_win) { if (opengl_project -> modelgl -> axis_win -> width && GTK_IS_WIDGET(opengl_project -> modelgl -> axis_win -> width)) { update_entry_double (GTK_ENTRY(opengl_project -> modelgl -> axis_win -> width), v); } } opengl_project -> modelgl -> create_shaders[MAXIS] = TRUE; break; case -3: if (opengl_project -> modelgl -> anim -> last -> img -> abc -> box == CYLINDERS) { if (v > 0.0) opengl_project -> modelgl -> anim -> last -> img -> abc -> rad = v; v = opengl_project -> modelgl -> anim -> last -> img -> abc -> rad; #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Radius [ %f Å ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_box_axis[0][6]), str); g_free (str); #endif if (opengl_project -> modelgl -> box_win) { if (opengl_project -> modelgl -> box_win -> radius && GTK_IS_WIDGET(opengl_project -> modelgl -> box_win -> radius)) { update_entry_double (GTK_ENTRY(opengl_project -> modelgl -> box_win -> radius), v); } } } else { if (v > 0.0) opengl_project -> modelgl -> anim -> last -> img -> abc -> line = v; v = opengl_project -> modelgl -> anim -> last -> img -> abc -> line; #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Width [ %f pts ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_box_axis[0][4]), str); g_free (str); #endif if (opengl_project -> modelgl -> box_win) { if (opengl_project -> modelgl -> box_win -> width && GTK_IS_WIDGET(opengl_project -> modelgl -> box_win -> width)) { update_entry_double (GTK_ENTRY(opengl_project -> modelgl -> box_win -> width), v); } } } opengl_project -> modelgl -> create_shaders[MDBOX] = TRUE; break; case -2: if (v > 0.0) { opengl_project -> modelgl -> anim -> last -> img -> radall[1] = v; } v = opengl_project -> modelgl -> anim -> last -> img -> radall[1]; #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Cylinder(s) [ %f Å ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_bonds[8]), str); g_free (str); #endif init_default_shaders (opengl_project -> modelgl); break; case -1: if (v > 0.0) { opengl_project -> modelgl -> anim -> last -> img -> radall[0] = v; } v = opengl_project -> modelgl -> anim -> last -> img -> radall[0]; #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Cylinder(s) [ %f Å ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_bonds[1]), str); g_free (str); #endif init_default_shaders (opengl_project -> modelgl); break; default: k = s*(s + 1)/2; if (id < k) { j = id; m = 0; #ifdef GTK3 // GTK3 Menu Action To Check c = 0; #endif } else { j = id - k; m = s; #ifdef GTK3 // GTK3 Menu Action To Check c = 1; #endif } if (j < s) { a = j + m; b = j + m; } else { j -= s; for (k=0; k modelgl -> anim -> last -> img -> style == WIREFRAME) { if (v > 0.0) { opengl_project -> modelgl -> anim -> last -> img -> linerad[a][b] = opengl_project -> modelgl -> anim -> last -> img -> linerad[b][a] = v; } v = opengl_project -> modelgl -> anim -> last -> img -> linerad[a][b]; #ifdef GTK3 // GTK3 Menu Action To Check gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_bonds[5+8*c]), label_cutrab (opengl_project, opengl_project -> modelgl, 3+c)); #endif } else { if (v > 0.0) { opengl_project -> modelgl -> anim -> last -> img -> bondrad[a][b] = opengl_project -> modelgl -> anim -> last -> img -> bondrad[b][a] = v; } v = opengl_project -> modelgl -> anim -> last -> img -> bondrad[a][b]; #ifdef GTK3 // GTK3 Menu Action To Check gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_bonds[3+8*c]), label_cutrab (opengl_project, opengl_project -> modelgl, 1+c)); #endif } init_default_shaders (opengl_project -> modelgl); break; } update_entry_double (res, v); update (opengl_project -> modelgl); } /*! \fn void bonds_input_win (GtkWidget * win, project * this_proj, int nspec, int aoc, double ** val) \brief prepare bond property entry list \param win the GtkWidget sending the signal \param this_proj the target project \param nspec total number of chemical species \param aoc atom(s) (0) or clone(s) (1) \param val the list of value(s) to display */ void bonds_input_win (GtkWidget * win, project * this_proj, int nspec, int aoc, double ** val) { int i, j, k, l, m, n; gchar * dim[2]={" pts"," Å "}; GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbo; GtkWidget * rad; gchar * str; if (this_proj -> modelgl -> anim -> last -> img -> style == WIREFRAME) { n = 0; } else { n = 1; } for (i=0, k=aoc*nspec; i chemistry -> label[i], this_proj -> chemistry -> label[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(str, 100, -1, 0.2, 0.5), FALSE, FALSE, 0); g_free (str); rad = create_entry (G_CALLBACK(update_bond_parameter), 120, 15, FALSE, GINT_TO_POINTER(j)); update_entry_double (GTK_ENTRY(rad), val[k][k]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, rad, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(dim[n], 40, -1, 0.0, 0.5), FALSE, FALSE, 0); } k = j+1; for (i=0; i chemistry -> label[i], this_proj -> chemistry -> label[j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(str, 100, -1, 0.2, 0.5), FALSE, FALSE, 0); g_free (str); rad = create_entry (G_CALLBACK(update_bond_parameter), 120, 15, FALSE, GINT_TO_POINTER(k)); update_entry_double (GTK_ENTRY(rad), val[l][m]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, rad, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(dim[n], 40, -1, 0.0, 0.5), FALSE, FALSE, 0); } } show_the_widgets (vbox); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_bond_parameter (GSimpleAction * action, GVariant * parameter, gpointer data) \brief update bond parameter callback - creating the dialog GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void set_bond_parameter (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_bond_parameter (GtkWidget * widg, gpointer data) \brief update bond parameter callback - creating the dialog GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_bond_parameter (GtkWidget * widg, gpointer data) #endif { tint * the_data = (tint *)data; gchar * title[2][2] = {{i18n("Adjust atomic bond radius(ii)"), i18n("Adjust clone bond radius(ii)")}, {i18n("Adjust atomic line width(s)"), i18n("Adjust clone line width(s)")}}; int p = the_data -> a; opengl_project_changed (p); int s = opengl_project -> nspec; double ** val; int id = the_data -> b; int jd = the_data -> c; if (jd) { val = opengl_project -> modelgl -> anim -> last -> img -> linerad; } else { val = opengl_project -> modelgl -> anim -> last -> img -> bondrad; } GtkWidget * win = dialogmodal (_(title[jd][id]), GTK_WINDOW(opengl_project -> modelgl -> win)); bonds_input_win (win, opengl_project, s, id, val); run_this_gtk_dialog (win, G_CALLBACK(run_destroy_dialog), NULL); #ifdef GTK4 update_menu_bar (opengl_project -> modelgl); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void window_bonds (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create bond(s) configuration window(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void window_bonds (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void window_bonds (GtkWidget * widg, gpointer data) \brief create bond(s) configuration window(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_bonds (GtkWidget * widg, gpointer data) #endif { int id; tint * bid = (tint *)data; gchar * obj[4] = {i18n("box"), i18n("axis"), i18n("bond"), i18n("clone bond")}; gchar * Nobj[4] = {i18n("Box"), i18n("Axis"), i18n("Bond"), i18n("Clone bond")}; gchar * str; switch (bid -> b) { case 0: id = -5; str = g_strdup_printf (_("Adjust axis length")); break; case 1: id = -3 - bid -> c; str = g_strdup_printf (_("Adjust %s line width"), _(obj[bid -> c])); break; case 4: id = -3 - bid -> c; str = g_strdup_printf (_("Adjust %s cylinders radius"), _(obj[bid -> c])); break; default: id = - bid -> b + 1; str = g_strdup_printf (_("Adjust %s cylinders radius"), _(obj[bid -> b])); break; } opengl_project_changed (bid -> a); GtkWidget * win = dialogmodal (str, GTK_WINDOW(opengl_project -> modelgl -> win)); g_free (str); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbox = create_hbox (0); gtk_widget_set_size_request (hbox, 300, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); switch (bid -> b) { case 0: str = g_strdup_printf (_("Axis length")); break; case 1: str = g_strdup_printf (_("%s line width"), _(Nobj[bid -> c])); break; case 4: str = g_strdup_printf (_("%s cylinders radius"), _(Nobj[bid -> c])); break; default: str = g_strdup_printf (_("%s cylinders radius"), _(Nobj[bid -> b])); break; } GtkWidget * label = gtk_label_new (str); g_free (str); gtk_widget_set_size_request (label, 150, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, label, FALSE, FALSE, 0); GtkWidget * rad = create_entry (G_CALLBACK(update_bond_parameter), 120, -1, FALSE, GINT_TO_POINTER(id)); switch (bid -> b) { case 0: update_entry_double (GTK_ENTRY(rad), opengl_project -> modelgl -> anim -> last -> img -> xyz -> length); break; case 1: update_entry_double (GTK_ENTRY(rad), (bid -> c) ? opengl_project -> modelgl -> anim -> last -> img -> xyz -> line : opengl_project -> modelgl -> anim -> last -> img -> abc -> line); break; case 4: update_entry_double (GTK_ENTRY(rad), (bid -> c) ? opengl_project -> modelgl -> anim -> last -> img -> xyz -> rad : opengl_project -> modelgl -> anim -> last -> img -> abc -> rad); break; default: update_entry_double (GTK_ENTRY(rad), opengl_project -> modelgl -> anim -> last -> img -> radall[bid -> b-2]); break; } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, rad, FALSE, FALSE, 0); switch (bid -> b) { case 1: add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(" [pts]"), 40, -1, 0.0, 0.5), FALSE, FALSE, 0); break; default: add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(" [Å]", 30, -1, 0.0, 0.5), FALSE, FALSE, 0); break; } gtk_widget_set_size_request (win, 350, 100); show_the_widgets (vbox); run_this_gtk_dialog (win, G_CALLBACK(run_destroy_dialog), NULL); #ifdef GTK4 update_menu_bar (opengl_project -> modelgl); #endif } atomes_1.3.1/src/opengl/win/m_quality.c0000664000175000017500000000420315212624223017524 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_quality.c * @short Functions to create the 'OengGL -> Quality' submenu * @author Sébastien Le Roux */ /* * This file: 'm_quality.c' * * Contains: * - The functions to create the 'OengGL -> Quality' submenu * * List of functions: void set_quality (int q, glwin * view); G_MODULE_EXPORT void set_quality_spin (GtkSpinButton * res, gpointer data); */ #include "global.h" #include "interface.h" #include "preferences.h" #include "project.h" #include "glwindow.h" #include "glview.h" /*! \fn void set_quality (int q, glwin * view) \brief set OpenGL quality \param q new OpenGL quality \param view the target glwin */ void set_quality (int q, glwin * view) { if (! preferences) { view -> anim -> last -> img -> quality = q; init_default_shaders (view); view -> create_shaders[MDBOX] = TRUE; view -> create_shaders[MAXIS] = TRUE; update (view); } else { tmp_opengl[3] = q; } } /*! \fn G_MODULE_EXPORT void set_quality_spin (GtkSpinButton * res, gpointer data) \brief set quality spin button callback \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_quality_spin (GtkSpinButton * res, gpointer data) { glwin * view = (glwin *)data; set_quality (gtk_spin_button_get_value_as_int(res), view); update_entry_int (GTK_ENTRY(res), view -> anim -> last -> img -> quality); } atomes_1.3.1/src/opengl/win/m_anim.c0000664000175000017500000001230115212624223016756 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_anim.c * @short Functions to create the 'Animate' submenu * @author Sébastien Le Roux */ /* * This file: 'm_anim.c' * * Contains: * - The functions to create the 'Animate' submenu * * List of functions: G_MODULE_EXPORT void to_spin (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_seq (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_rec (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * menu_anim (glwin * view, int id); GMenu * menu_anim (glwin * view, int popm); */ #include "global.h" #include "glwindow.h" extern G_MODULE_EXPORT void window_spinner (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_recorder (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_sequencer (GtkWidget * widg, gpointer data); #ifdef GTK3 /*! \fn GtkWidget * menu_anim (glwin * view, int id) \brief create the 'Animate' submenu elements GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_anim (glwin * view, int id) { GtkWidget * menuanim = create_menu_item (FALSE, _("Animate")); GtkWidget * menua = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)menuanim, menua); if (id == 0) { view -> ogl_anim[0] = gtk3_menu_item (menua, _("Spin"), IMG_STOCK, (gpointer)MEDIA_LOOP, G_CALLBACK(window_spinner), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); } else { gtk3_menu_item (menua, _("Spin"), IMG_STOCK, (gpointer)MEDIA_LOOP, G_CALLBACK(window_spinner), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); } GtkWidget * item = gtk3_menu_item (menua, _("Sequencer"), IMG_STOCK, (gpointer)MEDIA_PLAY, G_CALLBACK(window_sequencer), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); if (get_project_by_id(view -> proj) -> steps == 1) { widget_set_sensitive (item, 0); } if (id == 0) { view -> ogl_anim[1] = gtk3_menu_item (menua, _("Recorder"), IMG_STOCK, (gpointer)RECORD, G_CALLBACK(window_recorder), (gpointer)view, TRUE, GDK_KEY_r, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); } else { gtk3_menu_item (menua, _("Recorder"), IMG_STOCK, (gpointer)RECORD, G_CALLBACK(window_recorder), (gpointer)view, TRUE, GDK_KEY_r, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); } widget_set_sensitive (menuanim, get_project_by_id(view -> proj) -> natomes); return (menuanim); } #else /*! \fn G_MODULE_EXPORT void to_spin (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the spinner window creation signal \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_spin (GSimpleAction * action, GVariant * parameter, gpointer data) { window_spinner (NULL, data); } /*! \fn G_MODULE_EXPORT void to_seq (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the sequencer window creation signal \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_seq (GSimpleAction * action, GVariant * parameter, gpointer data) { window_sequencer (NULL, data); } /*! \fn G_MODULE_EXPORT void to_rec (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the recorder window creation signal \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_rec (GSimpleAction * action, GVariant * parameter, gpointer data) { window_recorder (NULL, data); } /*! \fn GMenu * menu_anim (glwin * view, int popm) \brief create the 'Animate' submenu elements \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_anim (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, _("Spin"), "spin", popm, popm, NULL, IMG_STOCK, (gpointer)MEDIA_LOOP, FALSE, G_CALLBACK(to_spin), (gpointer)view, FALSE, FALSE, FALSE, TRUE); append_opengl_item (view, menu, _("Sequencer"), "seq", popm, popm, NULL, IMG_STOCK, (gpointer)MEDIA_PLAY, FALSE, G_CALLBACK(to_seq), (gpointer)view, FALSE, FALSE, FALSE, TRUE); append_opengl_item (view, menu, _("Recorder"), "rec", popm, popm, "R", IMG_STOCK, (gpointer)RECORD, FALSE, G_CALLBACK(to_rec), (gpointer)view, FALSE, FALSE, FALSE, TRUE); return menu; } #endif atomes_1.3.1/src/opengl/win/w_volumes.c0000664000175000017500000013336215212624223017551 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_volumes.c * @short Functions to create the 'Volumes' window \n Functions to compute system / fragment / molecular volumes * @author Sébastien Le Roux */ /* * This file: 'w_volumes.c' * * Contains: * - The functions to create the 'Volumes' window - The functions to compute system / fragment / molecular volumes * * List of functions: double cap_volume (double ht, double dh); double get_sphere_caps_volume (double dab, double rad, double rbd); double sphere_volume (double rad); double get_atoms_volume (project * this_proj, int rid, int sid, int gid, int gcid); double molecular_volume (int nats, atom * ats_vol, double baryc[3], double * rvdws, double a_ang, double b_ang, double c_ang); double get_atoms_box (project * this_proj, int rid, int sid, int geo, int gid); void clean_volumes_data (glwin * view); void adjust_vol_md_step (project * this_proj, int geo); void add_frag_mol_vol_data (GtkWidget * vbox, project * this_proj, glwin * view, int geo); G_MODULE_EXPORT void molecular_volumes (GtkButton * but, gpointer data); G_MODULE_EXPORT void fm_molecular_volumes (GtkButton * but, gpointer data); G_MODULE_EXPORT void show_volumes (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void show_volumes (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void fm_show_volumes (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void fm_show_volumes (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_volume_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void fm_set_volume_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_md_step_vol (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void update_vol_frag_mol_search (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_angular_precision (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void window_volumes (GtkWidget * widg, gpointer data); GtkWidget * frag_mol_volume_search (project * this_proj, int g); GtkWidget * frag_mol_volume_tab (glwin * view, int geo); GtkWidget * vol_model_tab (glwin * view); */ #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "glview.h" #include "atom_edit.h" extern void center_this_molecule (glwin * view); extern double draw_cuboid (gboolean draw, int SHADID, int shadnum, mat4_t rot, vec3_t cpos, double paral[3][3], ColRGBA col, double slab_alpha); /*! \fn void clean_volumes_data (glwin * view) \brief clean volume data \param view the target glwin */ void clean_volumes_data (glwin * view) { if (view -> volume_win) { if (view -> volume_win -> win) { destroy_this_widget (view -> volume_win -> win); } g_free (view -> volume_win); view -> volume_win = NULL; } int i, j; for (i=0; i atoms_volume[i]) g_free (view -> atoms_volume[i]); view -> atoms_volume[i] = NULL; if (view -> atoms_ppvolume[i]) g_free (view -> atoms_ppvolume[i]); view -> atoms_ppvolume[i] = NULL; if (view -> volume_box[i]) g_free (view -> volume_box[i]); view -> volume_box[i] = NULL; view -> comp_vol[i] = FALSE; view -> anim -> last -> img -> show_vol[i] = FALSE; } for (i=0; i<2; i++) { for (j=0; j frag_mol_volume[i][j]) g_free (view -> frag_mol_volume[i][j]); view -> frag_mol_volume[i][j] = NULL; if (view -> frag_mol_ppvolume[i][j]) g_free (view -> frag_mol_ppvolume[i][j]); view -> frag_mol_ppvolume[i][j] = NULL; if (! i) { if (view -> frag_box[j]) g_free (view -> frag_box[j]); view -> frag_box[j] = NULL; } if (view -> fm_comp_vol[i][j]) g_free (view -> fm_comp_vol[i][j]); view -> fm_comp_vol[i][j] = NULL; if (view -> anim -> last -> img -> fm_show_vol[i][j]) g_free (view -> anim -> last -> img -> fm_show_vol[i][j]); view -> anim -> last -> img -> fm_show_vol[i][j] = NULL; if (view -> anim -> last -> img -> fm_vol_col[i][j]) g_free (view -> anim -> last -> img -> fm_vol_col[i][j]); view -> anim -> last -> img -> fm_vol_col[i][j] = NULL; } } int shaders[1] = {VOLMS}; re_create_md_shaders (1, shaders, get_project_by_id(view -> proj)); } /*! \fn double cap_volume (double ht, double dh) \brief compute cap volume \param ht cap height \param dh sphere radius */ double cap_volume (double ht, double dh) { return (pi/3.0)*ht*ht*(3*dh-ht); } /*! \fn double get_sphere_caps_volume (double dab, double rad, double rbd) \brief compute sphere cap volume \param dab distance between the center of the 2 spheres \param rad sphere a radius \param rbd sphere b radius */ double get_sphere_caps_volume (double dab, double rad, double rbd) { double h1, h2; double px; double rmi, rma; rmi = min (rad, rbd); rma = max (rad, rbd); px = (dab*dab - rmi*rmi + rma*rma) / (2.0*dab); h1 = rma - px; h2 = rmi - (dab - px); return cap_volume (h1, rma) + cap_volume (h2, rmi); } /*! \fn double sphere_volume (double rad) \brief compute sphere volume \param rad sphere radius */ double sphere_volume (double rad) { return ((4.0*pi)/3.0)*rad*rad*rad; } /*! \fn double get_atoms_volume (project * this_proj, int rid, int sid, int gid, int gcid) \brief compute exact atomic volume for all system or fragment or molecule \param this_proj the target project \param rid the type of atomic radius(ii) \param sid the MD step \param gid -1 = all system, 2 = fragment(s), 3 = molecule(s) \param gcid fragment or molecule id number */ double get_atoms_volume (project * this_proj, int rid, int sid, int gid, int gcid) { int i, j, k, l, m, n, o; double vol = 0.0; double cap_vol = 0.0; double * rvdws = allocdouble (this_proj -> nspec); distance dist; for (i=0; i nspec; i++) { j = (int)this_proj -> chemistry -> chem_prop[CHEM_Z][i]; rvdws[i] = set_radius_ (& j, & rid); } for (j=0; j<2; j++) { for (k=0; k modelgl -> bonds[sid][j]; k++) { l = this_proj -> modelgl -> bondid[sid][j][k][0]; m = this_proj -> atoms[sid][l].sp; n = this_proj -> modelgl -> bondid[sid][j][k][1]; o = this_proj -> atoms[sid][n].sp; if (gid < 0 || this_proj -> atoms[sid][l].coord[gid] == gcid) { dist = distance_3d (& this_proj -> cell, (this_proj -> cell.npt) ? sid : 0, & this_proj -> atoms[sid][l], & this_proj -> atoms[sid][n]); if (dist.length < rvdws[m]+rvdws[o]) cap_vol += get_sphere_caps_volume (dist.length, rvdws[m], rvdws[o]); } } } vol = 0.0; if (gid < 0) { for (i=0; i nspec; i++) { vol += this_proj -> chemistry -> nsps[i] * sphere_volume (rvdws[i]); } vol -= cap_vol; } else { if (gid == 3) { for (i=0; i nspec; i++) { vol += this_proj -> modelfc -> mols[sid][gcid].species[i] * sphere_volume (rvdws[i]); } vol *= this_proj -> modelfc -> mols[sid][gcid].multiplicity; vol -= cap_vol; vol /= this_proj -> modelfc -> mols[sid][gcid].multiplicity; } else { for (i=0; i natomes; i++) { if (this_proj -> atoms[sid][i].coord[gid] == gcid) { j = this_proj -> atoms[sid][i].sp; vol += sphere_volume (rvdws[j]); } } vol -= cap_vol; } } g_free (rvdws); return vol; } double vamin[3], vamax[3]; /*! \fn double molecular_volume (int nats, atom * ats_vol, double baryc[3], double * rvdws, double a_ang, double b_ang, double c_ang) \brief compute volume \param nats number of atoms \param ats_vol the list of atom(s) \param baryc barycenter of the atomic coordinates \param rvdws the list of atomic radius (ii) \param a_ang x axis rotation angle \param b_ang y axis rotation angle \param c_ang z axis rotation angle */ double molecular_volume (int nats, atom * ats_vol, double baryc[3], double * rvdws, double a_ang, double b_ang, double c_ang) { double paral[3][3]; mat4_t rot; vec3_t c_old, c_new; rot = m4_rotation_xyz (a_ang, b_ang, c_ang); int i, j, k; k = 0; for (i=0; i nspec); for (i=0; i nspec; i++) { j = (int)this_proj -> chemistry -> chem_prop[CHEM_Z][i]; rvdws[i] = set_radius_ (& j, & rid); } if (geo < 0) center_this_molecule (this_proj -> modelgl); int a_ang, b_ang, c_ang; double val, vbl; int finess = pow (10, this_proj -> modelgl -> volume_win -> angp); int nats; atom * ats_vol = NULL; atomic_object * object = NULL; gboolean rtmp; double * baryc; switch (geo) { case 2: object_motion = TRUE; rtmp = this_proj -> modelgl -> rebuild[0][0]; this_proj -> modelgl -> rebuild[0][0] = TRUE; object = create_object_from_frag_mol (this_proj, geo, gid, NULL); object_motion = FALSE; this_proj -> modelgl -> rebuild[0][0] = rtmp; nats = object -> atoms; baryc = duplicate_double (3, object -> baryc); ats_vol = object -> at_list; break; default: nats = this_proj -> natomes; ats_vol = this_proj -> atoms[sid]; baryc = allocdouble (3); break; } for (a_ang=0; a_ang < 90*finess; a_ang ++) { for (b_ang=0; b_ang < 90*finess; b_ang ++) { for (c_ang=0; c_ang < 90*finess; c_ang ++) { val = molecular_volume (nats, ats_vol, baryc, rvdws, a_ang/finess, b_ang/finess, c_ang/finess); if (a_ang == 0 && b_ang == 0 && c_ang == 0) { vbl = val; if (geo < 0) { for (i=0; i<3; i++) { this_proj -> modelgl -> volume_box[rid][sid][i] = vamax[i] - vamin[i]; this_proj -> modelgl -> volume_box[rid][sid][i+6] = (vamax[i] + vamin[i]) / 2.0; } this_proj -> modelgl -> volume_box[rid][sid][3] = a_ang/finess; this_proj -> modelgl -> volume_box[rid][sid][4] = b_ang/finess; this_proj -> modelgl -> volume_box[rid][sid][5] = c_ang/finess; } else { for (i=0; i<3; i++) { this_proj -> modelgl -> frag_box[rid][sid][gid][i] = vamax[i] - vamin[i]; this_proj -> modelgl -> frag_box[rid][sid][gid][i+6] = (vamax[i] + vamin[i]) / 2.0; } this_proj -> modelgl -> frag_box[rid][sid][gid][3] = a_ang/finess; this_proj -> modelgl -> frag_box[rid][sid][gid][4] = b_ang/finess; this_proj -> modelgl -> frag_box[rid][sid][gid][5] = c_ang/finess; } } else if (val < vbl) { vbl = val; if (geo < 0) { for (i=0; i<3; i++) { this_proj -> modelgl -> volume_box[rid][sid][i] = vamax[i] - vamin[i]; this_proj -> modelgl -> volume_box[rid][sid][i+6] = (vamax[i] + vamin[i]) / 2.0; } this_proj -> modelgl -> volume_box[rid][sid][3] = a_ang/finess; this_proj -> modelgl -> volume_box[rid][sid][4] = b_ang/finess; this_proj -> modelgl -> volume_box[rid][sid][5] = c_ang/finess; } else { for (i=0; i<3; i++) { this_proj -> modelgl -> frag_box[rid][sid][gid][i] = vamax[i] - vamin[i]; this_proj -> modelgl -> frag_box[rid][sid][gid][i+6] = (vamax[i] + vamin[i]) / 2.0; } this_proj -> modelgl -> frag_box[rid][sid][gid][3] = a_ang/finess; this_proj -> modelgl -> frag_box[rid][sid][gid][4] = b_ang/finess; this_proj -> modelgl -> frag_box[rid][sid][gid][5] = c_ang/finess; } } else { break; } } } } ats_vol = NULL; g_free (rvdws); g_free (baryc); if (geo == 2) g_free (object); return vbl; } /*! \fn G_MODULE_EXPORT void molecular_volumes (GtkButton * but, gpointer data) \brief compute volume \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void molecular_volumes (GtkButton * but, gpointer data) { tint * dat = (tint *)data; project * this_proj = get_project_by_id (dat -> a); int i; for (i=0; i steps; i++) this_proj -> modelgl -> atoms_ppvolume[dat -> b][i] = get_atoms_box (this_proj, dat -> b, i, -1, 0); this_proj -> modelgl -> comp_vol[dat -> b] = TRUE; widget_set_sensitive (this_proj -> modelgl -> volume_win -> hbvol[dat -> b], this_proj -> modelgl -> comp_vol[dat -> b]); double movol = 0.0; for (i=0; i steps; i++) movol += this_proj -> modelgl -> atoms_ppvolume[dat -> b][i]; movol /= this_proj -> steps; gchar * str = g_strdup_printf ("%15.3f", movol); gtk_label_set_text ((GtkLabel *)this_proj -> modelgl -> volume_win -> lab_vol[dat -> b], str); g_free (str); if (this_proj -> modelgl -> comp_vol[dat -> b]) { hide_the_widgets (this_proj -> modelgl -> volume_win -> compb[dat -> b]); show_the_widgets (this_proj -> modelgl -> volume_win -> hboxv[dat -> b]); } this_proj -> modelgl -> volumes = TRUE; } /*! \fn void adjust_vol_md_step (project * this_proj, int geo) \brief update volume value labels \param this_proj the target project \param geo 2 = fragment(s), 3 = molecule(s) */ void adjust_vol_md_step (project * this_proj, int geo) { int i, j, k; k = this_proj -> modelgl -> volume_win -> sid[geo-2]; gchar * str; if (this_proj -> coord -> totcoord[geo] < GTK_LIMIT) { for (i=0; i coord -> totcoord[geo]; j++) { if (this_proj -> modelgl -> fm_comp_vol[geo-2][i][k][j]) { hide_the_widgets (this_proj -> modelgl -> volume_win -> fm_compb[geo-2][i][j]); str = g_strdup_printf ("%15.3f", this_proj -> modelgl -> frag_mol_ppvolume[geo-2][i][k][j]); gtk_label_set_text ((GtkLabel *)this_proj -> modelgl -> volume_win -> fm_lab_vol[geo-2][i][j], str); g_free (str); show_the_widgets (this_proj -> modelgl -> volume_win -> fm_hboxv[geo-2][i][j]); } else { show_the_widgets (this_proj -> modelgl -> volume_win -> fm_compb[geo-2][i][j]); hide_the_widgets (this_proj -> modelgl -> volume_win -> fm_hboxv[geo-2][i][j]); } } } } else { for (i=0; i modelgl -> volume_win -> ngeov[geo-2]; j++) { k = this_proj -> modelgl -> volume_win -> geov_id[geo-2][j]; if (this_proj -> modelgl -> fm_comp_vol[geo-2][i][0][k]) { hide_the_widgets (this_proj -> modelgl -> volume_win -> fm_compb[geo-2][i][k]); str = g_strdup_printf ("%15.3f", this_proj -> modelgl -> frag_mol_ppvolume[geo-2][i][0][k]); gtk_label_set_text ((GtkLabel *)this_proj -> modelgl -> volume_win -> fm_lab_vol[geo-2][i][k], str); g_free (str); show_the_widgets (this_proj -> modelgl -> volume_win -> fm_hboxv[geo-2][i][k]); } else { show_the_widgets (this_proj -> modelgl -> volume_win -> fm_compb[geo-2][i][k]); hide_the_widgets (this_proj -> modelgl -> volume_win -> fm_hboxv[geo-2][i][k]); } } } } } /*! \fn G_MODULE_EXPORT void fm_molecular_volumes (GtkButton * but, gpointer data) \brief compute fragment / molecule volume \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void fm_molecular_volumes (GtkButton * but, gpointer data) { int i, j; qint * dat = (qint *)data; project * this_proj = get_project_by_id (dat -> a); int sid = this_proj -> modelgl -> volume_win -> sid[dat -> b-2]; if (dat -> b == 2) { this_proj -> modelgl -> frag_mol_ppvolume[dat -> b-2][dat -> d][sid][dat -> c] = get_atoms_box (this_proj, dat -> d, sid, dat -> b, dat -> c); } else { this_proj -> modelgl -> frag_mol_ppvolume[dat -> b-2][dat -> d][sid][dat -> c] = 0.0; for (i=0; i modelfc -> mols[sid][dat -> c].multiplicity; i++) { j = this_proj -> modelfc -> mols[sid][dat -> c].fragments[i]; if (! this_proj -> modelgl -> fm_comp_vol[0][dat -> d][sid][j]) { this_proj -> modelgl -> frag_mol_ppvolume[0][dat -> d][sid][j] = get_atoms_box (this_proj, dat -> d, sid, 2, j); this_proj -> modelgl -> fm_comp_vol[0][dat -> d][sid][j] = TRUE; widget_set_sensitive (this_proj -> modelgl -> volume_win -> fm_hbvol[0][dat -> d][j], this_proj -> modelgl -> fm_comp_vol[0][dat -> d][sid][j]); } this_proj -> modelgl -> frag_mol_ppvolume[dat -> b-2][dat -> d][sid][dat -> c] += this_proj -> modelgl -> frag_mol_ppvolume[0][dat -> d][sid][j]; } this_proj -> modelgl -> frag_mol_ppvolume[dat -> b-2][dat -> d][sid][dat -> c] /= this_proj -> modelfc -> mols[sid][dat -> c].multiplicity; } center_molecule (this_proj); for (i=0; i<2; i++) this_proj -> modelgl -> saved_coord[i] = save_coordinates (this_proj, i); init_default_shaders (this_proj -> modelgl); update (this_proj -> modelgl); this_proj -> modelgl -> fm_comp_vol[dat -> b-2][dat -> d][sid][dat -> c] = TRUE; widget_set_sensitive (this_proj -> modelgl -> volume_win -> fm_hbvol[dat -> b-2][dat -> d][dat -> c], this_proj -> modelgl -> fm_comp_vol[dat -> b-2][dat -> d][sid][dat -> c]); gchar * str = g_strdup_printf ("%15.3f", this_proj -> modelgl -> frag_mol_ppvolume[dat -> b-2][dat -> d][sid][dat -> c]); gtk_label_set_text ((GtkLabel *)this_proj -> modelgl -> volume_win -> fm_lab_vol[dat -> b-2][dat -> d][dat -> c], str); g_free (str); if (this_proj -> modelgl -> fm_comp_vol[dat -> b-2][dat -> d][sid][dat -> c]) { hide_the_widgets (this_proj -> modelgl -> volume_win -> fm_compb[dat -> b-2][dat -> d][dat -> c]); show_the_widgets (this_proj -> modelgl -> volume_win -> fm_hboxv[dat -> b-2][dat -> d][dat -> c]); } if (dat -> b == 3) { adjust_vol_md_step (this_proj, 2); } this_proj -> modelgl -> volumes = TRUE; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_volumes (GtkCheckButton * but, gpointer data) \brief toggle show / hide volume callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_volumes (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_volumes (GtkToggleButton * but, gpointer data) \brief toggle show / hide volume callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_volumes (GtkToggleButton * but, gpointer data) #endif { tint * dat = (tint *)data; project * this_proj = get_project_by_id (dat -> a); this_proj -> modelgl -> anim -> last -> img -> show_vol[dat -> b] = button_get_status ((GtkWidget *)but); int shaders[1] = {VOLMS}; re_create_md_shaders (1, shaders, this_proj); update (this_proj -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void fm_show_volumes (GtkCheckButton * but, gpointer data) \brief toggle show / hide fragment / molecule volume callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void fm_show_volumes (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void fm_show_volumes (GtkToggleButton * but, gpointer data) \brief toggle show / hide fragment / molecule volume callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void fm_show_volumes (GtkToggleButton * but, gpointer data) #endif { qint * dat = (qint *)data; project * this_proj = get_project_by_id (dat -> a); this_proj -> modelgl -> anim -> last -> img -> fm_show_vol[dat -> b-2][dat -> d][dat -> c] = button_get_status ((GtkWidget *)but); int shaders[1] = {VOLMS}; re_create_md_shaders (1, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_volume_color (GtkColorChooser * colob, gpointer data) \brief change volume color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_volume_color (GtkColorChooser * colob, gpointer data) { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); this_proj -> modelgl -> anim -> last -> img -> vol_col[id -> b] = get_button_color (colob); int shaders[1] = {VOLMS}; re_create_md_shaders (1, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void fm_set_volume_color (GtkColorChooser * colob, gpointer data) \brief change fragment / molecule volume color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void fm_set_volume_color (GtkColorChooser * colob, gpointer data) { qint * dat = (qint *)data; project * this_proj = get_project_by_id (dat -> a); this_proj -> modelgl -> anim -> last -> img -> fm_vol_col[dat -> b-2][dat -> d][dat -> c] = get_button_color (colob); int shaders[1] = {VOLMS}; re_create_md_shaders (1, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_md_step_vol (GtkSpinButton * res, gpointer data) \brief change MD step spin callback \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_md_step_vol (GtkSpinButton * res, gpointer data) { qint * dat = (qint *)data; project * this_proj = get_project_by_id (dat -> a); this_proj -> modelgl -> volume_win -> sid[dat -> b-2] = gtk_spin_button_get_value_as_int(res); adjust_vol_md_step (this_proj, dat -> b); } /*! \fn void add_frag_mol_vol_data (GtkWidget * vbox, project * this_proj, glwin * view, int geo) \brief add fragment / molecule volume data to the search tab \param vbox the GtkWidget sending the signal \param this_proj the target project \param view the target glwin \param geo 2 = fragment(s), 3 = molecule(s) */ void add_frag_mol_vol_data (GtkWidget * vbox, project * this_proj, glwin * view, int geo) { gchar * name_geo[2] = {i18n("fragment"), i18n("molecule")}; gchar * fmo[2] = {i18n("Fragment"), i18n("Molecule")}; GtkWidget * hbox; GtkWidget * hhbox; GtkWidget * fragtab; gchar * str; int i, j; int ngeov = (this_proj -> coord -> totcoord[geo] >= GTK_LIMIT) ? view -> volume_win -> ngeov[geo-2] : this_proj -> coord -> totcoord[geo]; if (geo == 3) { str = g_strdup_printf (_("Mean volume(s) occupied by the atom(s) for each %s:"), _(name_geo[geo-2])); } else { str = g_strdup_printf (_("Volume(s) occupied by the atom(s) for each %s:"), _(name_geo[geo-2])); } abox (vbox, str, 5); g_free (str); fragtab = create_scroll (vbox, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (fragtab, TRUE); gtk_widget_set_vexpand (fragtab, TRUE); GtkWidget * vvbox = create_vbox (BSEP); add_container_child (CONTAINER_SCR, fragtab, vvbox); double vof; int geoid; for (i=0; i coord -> totcoord[geo] >= GTK_LIMIT) ? view -> volume_win -> geov_id[geo-2][i] : i; str = g_strdup_printf ("%s N°%d", _(fmo[geo-2]), geoid+1); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 200, -1, 0.0, 0.5), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 5); g_free (str); for (j=0; j%s: "), _(text_filled[j])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 200, -1, 0.0, 0.5), FALSE, FALSE, 30); g_free (str); view -> frag_mol_volume[geo-2][j][0][geoid] = get_atoms_volume (this_proj, j, 0, geo, i); str = g_strdup_printf ("%15.3f", view -> frag_mol_volume[geo-2][j][0][geoid]); hhbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 100, -1, 1.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label ("Å3", 50, -1, 0.0, 0.5), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 5); } } if (geo == 3) { str = g_strdup_printf (_("Mean smallest rectangle parallepiped volume(s) to englobe the atom(s) for each %s:"), _(name_geo[geo-2])); } else { str = g_strdup_printf (_("Smallest rectangle parallepiped volume(s) to englobe the atom(s) for each %s:"), _(name_geo[geo-2])); } abox (vbox, str, 5); g_free (str); fragtab = create_scroll (vbox, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (fragtab, TRUE); gtk_widget_set_vexpand (fragtab, TRUE); vvbox = create_vbox (BSEP); add_container_child (CONTAINER_SCR, fragtab, vvbox); for (i=0; i coord -> totcoord[geo] >= GTK_LIMIT) ? view -> volume_win -> geov_id[geo-2][i] : i; str = g_strdup_printf ("%s N°%d", fmo[geo-2], geoid+1); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 200, -1, 0.0, 0.5), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 5); g_free (str); for (j=0; j%s: "), _(text_filled[j])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 200, -1, 0.0, 0.5), FALSE, FALSE, 30); g_free (str); hhbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 0); view -> volume_win -> fm_compb[geo-2][j][geoid] = create_button (_("Compute"), IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(fm_molecular_volumes), & view -> gcid[geo][geoid][j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, view -> volume_win -> fm_compb[geo-2][j][geoid], FALSE, FALSE, 20); vof = 0.0; if (view -> frag_mol_ppvolume[geo-2][j]) vof = view -> frag_mol_ppvolume[geo-2][j][0][geoid]; str = g_strdup_printf ("%15.3f", vof); view -> volume_win -> fm_hboxv[geo-2][j][geoid] = create_hbox (BSEP); view -> volume_win -> fm_lab_vol[geo-2][j][geoid] = markup_label (str, 100, -1, 1.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> fm_hboxv[geo-2][j][geoid] , view -> volume_win -> fm_lab_vol[geo-2][j][geoid], FALSE, FALSE, 20); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> fm_hboxv[geo-2][j][geoid] , markup_label ("Å3", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, view -> volume_win -> fm_hboxv[geo-2][j][geoid] , FALSE, FALSE, 0); view -> volume_win -> fm_hbvol[geo-2][j][geoid] = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> fm_hbvol[geo-2][j][geoid], check_button (_("Show/Hide"), 100, -1, view -> anim -> last -> img -> fm_show_vol[geo-2][j][geoid], G_CALLBACK(fm_show_volumes), & view -> gcid[geo][geoid][j]), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> fm_hbvol[geo-2][j][geoid], color_button (view -> anim -> last -> img -> fm_vol_col[geo-2][j][geoid], TRUE, 50, -1, G_CALLBACK(fm_set_volume_color), & view -> gcid[geo][geoid][j]), FALSE, FALSE, 5); widget_set_sensitive (view -> volume_win -> fm_hbvol[geo-2][j][geoid], view -> fm_comp_vol[geo-2][j][0][geoid]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, view -> volume_win -> fm_hbvol[geo-2][j][geoid], FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 0); } } } /*! \fn G_MODULE_EXPORT void update_vol_frag_mol_search (GtkEntry * res, gpointer data) \brief update fragment / molecule search entry \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_vol_frag_mol_search (GtkEntry * res, gpointer data) { tint * dat = (tint * )data; const gchar * m = entry_get_text (res); int v = (int)string_to_double ((gpointer)m); project * this_proj = get_project_by_id(dat -> a); int g = dat -> b; if (v > 0 && v <= this_proj -> coord -> totcoord[g]) { int i; gboolean update = TRUE; for (i=0; i modelgl -> volume_win -> ngeov[g-2]; i++) { if (this_proj -> modelgl -> volume_win -> geov_id[g-2][i] == v-1) { update = FALSE; break; } } if (update) { int * sdata = duplicate_int (this_proj -> modelgl -> volume_win -> ngeov[g-2], this_proj -> modelgl -> volume_win -> geov_id[g-2]); g_free (this_proj -> modelgl -> volume_win -> geov_id[g-2]); this_proj -> modelgl -> volume_win -> geov_id[g-2] = allocint (this_proj -> modelgl -> volume_win -> ngeov[g-2]+1); for (i=0; i modelgl -> volume_win -> ngeov[g-2]; i++) { this_proj -> modelgl -> volume_win -> geov_id[g-2][i] = sdata[i]; } this_proj -> modelgl -> volume_win -> geov_id[g-2][i] = v-1; this_proj -> modelgl -> volume_win -> ngeov[g-2] ++; destroy_this_widget (this_proj -> modelgl -> volume_win -> fm_vvbox[g-2]); this_proj -> modelgl -> volume_win -> fm_vvbox[g-2] = create_vbox (BSEP); add_frag_mol_vol_data (this_proj -> modelgl -> volume_win -> fm_vvbox[g-2], this_proj, this_proj -> modelgl, g); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> volume_win -> fm_vbox[g-2], this_proj -> modelgl -> volume_win -> fm_vvbox[g-2], TRUE, TRUE, 0); show_the_widgets (this_proj -> modelgl -> volume_win -> fm_vvbox[g-2]); adjust_vol_md_step (this_proj, g); } } else { update_entry_text (res, ""); } } /*! \fn GtkWidget * frag_mol_volume_search (project * this_proj, int g) \brief create the fragment(s) / molecule(s) search widget \param this_proj the target project \param g 2 = fragment(s), 3 = molecule(s) */ GtkWidget * frag_mol_volume_search (project * this_proj, int g) { GtkWidget * frag_mol_search = create_vbox (BSEP); gchar * obj[2] = {i18n("fragment"), i18n("molecule")}; gchar * str = g_strdup_printf (_("Too many %ss in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for %s(s) individually:\n"), _(obj[g-2]), _(obj[g-2])); add_box_child_start (GTK_ORIENTATION_VERTICAL, frag_mol_search, markup_label(str, 200, -1, 0.5, 0.5), FALSE, FALSE, 10); g_free (str); gchar * search_item[2]={i18n("Fragment Id.:"), i18n("Molecule Id.:")}; GtkWidget * hbox; GtkWidget * entry; GtkWidget * label; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, frag_mol_search, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(search_item[g-2]), 100, -1, 0.0, 0.5), FALSE, FALSE, 20); entry = create_entry (G_CALLBACK(update_vol_frag_mol_search), 100, 15, FALSE, & this_proj -> modelgl -> colorp[g][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox,entry, FALSE, FALSE, 0); str = g_strdup_printf ("∈ [%d - %d]", 1, this_proj -> coord -> totcoord[g]); label = markup_label (str, 50, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox,label, FALSE, FALSE, 20); g_free (str); return frag_mol_search; } /*! \fn GtkWidget * frag_mol_volume_tab (glwin * view, int geo) \brief create the fragment(s) / molecule(s) tab \param view the target glwin \param geo 2 = fragment(s), 3 = molecule(s) */ GtkWidget * frag_mol_volume_tab (glwin * view, int geo) { GtkWidget * vbox = create_vbox (BSEP); project * this_proj = get_project_by_id (view -> proj); GtkWidget * hbox; gchar * str; if (this_proj -> steps > 1) { // MD step box GtkWidget * sbut = spin_button (G_CALLBACK(set_md_step_vol), view -> volume_win -> sid[geo-2], 1.0, this_proj -> steps, 1.0, 0, 1000, & view -> gcid[geo][0][geo]); gtk_widget_set_size_request (sbut, 25, -1); GtkWidget * fix = gtk_fixed_new (); gtk_fixed_put (GTK_FIXED (fix), sbut, 0, 10); str = g_strdup_printf (_("Select MD step [1-%d]:"), this_proj -> steps); hbox = abox (vbox, str, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fix, FALSE, FALSE, 20); } int i, j; for (i=0; i fm_comp_vol[geo-2][i]) { view -> fm_comp_vol[geo-2][i] = allocdbool (this_proj -> steps, this_proj -> coord -> totcoord[geo]); } if (! view -> anim -> last -> img -> fm_show_vol[geo-2][i]) { view -> anim -> last -> img -> fm_show_vol[geo-2][i] = allocbool (this_proj -> coord -> totcoord[geo]); } if (! view -> anim -> last -> img -> fm_vol_col[geo-2][i]) { view -> anim -> last -> img -> fm_vol_col[geo-2][i] = g_malloc0(this_proj -> coord -> totcoord[geo]*sizeof*view -> anim -> last -> img -> fm_vol_col[geo-2][i]); for (j=0; j coord -> totcoord[geo]; j++) { view -> anim -> last -> img -> fm_vol_col[geo-2][i][j] = init_color (j+i*this_proj -> coord -> totcoord[geo], FILLED_STYLES*this_proj -> coord -> totcoord[geo]); view -> anim -> last -> img -> fm_vol_col[geo-2][i][j].alpha = 0.75; } } if (! view -> frag_box[i]) { view -> frag_box[i] = alloctdouble (this_proj -> steps, this_proj -> coord -> totcoord[geo], 9); } if (! view -> frag_mol_volume[geo-2][i]) { view -> frag_mol_volume[geo-2][i] = allocddouble (this_proj -> steps, this_proj -> coord -> totcoord[geo]); } if (! view -> frag_mol_ppvolume[geo-2][i]) { view -> frag_mol_ppvolume[geo-2][i] = allocddouble (this_proj -> steps, this_proj -> coord -> totcoord[geo]); } if (! view -> volume_win -> fm_compb[geo-2][i]) { view -> volume_win -> fm_compb[geo-2][i] = g_malloc0(this_proj -> coord -> totcoord[geo]*sizeof*view -> volume_win ->fm_compb[geo-2][i]); } if (! view -> volume_win -> fm_hbvol[geo-2][i]) { view -> volume_win -> fm_hbvol[geo-2][i] = g_malloc0(this_proj -> coord -> totcoord[geo]*sizeof*view -> volume_win -> fm_hbvol[geo-2][i]); } if (! view -> volume_win -> fm_hboxv[geo-2][i]) { view -> volume_win -> fm_hboxv[geo-2][i] = g_malloc0(this_proj -> coord -> totcoord[geo]*sizeof*view -> volume_win -> fm_hboxv[geo-2][i]); } if (! view -> volume_win -> fm_lab_vol[geo-2][i]) { view -> volume_win -> fm_lab_vol[geo-2][i] = g_malloc0(this_proj -> coord -> totcoord[geo]*sizeof*view -> volume_win -> fm_lab_vol[geo-2][i]); } } GtkWidget * fragtab; if (this_proj -> coord -> totcoord[geo] >= GTK_LIMIT) { fragtab = create_scroll (vbox, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (fragtab, TRUE); gtk_widget_set_vexpand (fragtab, TRUE); add_container_child (CONTAINER_SCR, fragtab, frag_mol_volume_search(this_proj, geo)); } view -> volume_win -> fm_vbox[geo-2] = create_vbox (BSEP); view -> volume_win -> fm_vvbox[geo-2] = create_vbox (BSEP); add_frag_mol_vol_data (view -> volume_win -> fm_vvbox[geo-2], this_proj, view, geo); add_box_child_start (GTK_ORIENTATION_VERTICAL, view -> volume_win -> fm_vbox[geo-2], view -> volume_win -> fm_vvbox[geo-2], TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, view -> volume_win -> fm_vbox[geo-2], TRUE, TRUE, 0); return vbox; } /*! \fn G_MODULE_EXPORT void set_angular_precision (GtkComboBox * box, gpointer data) \brief change angular precision \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_angular_precision (GtkComboBox * box, gpointer data) { glwin * view = (glwin *)data; int i = combo_get_active ((GtkWidget *)box); if (i != view -> volume_win -> angp) { project * this_proj = get_project_by_id (view -> proj); view -> volume_win -> angp = i; int j, k; for (i=0; i volume_win -> compb[i]); hide_the_widgets (view -> volume_win -> hboxv[i]); view -> comp_vol[i] = FALSE; widget_set_sensitive (view -> volume_win -> hbvol[i], view -> comp_vol[i]); view -> anim -> last -> img -> show_vol[i] = FALSE; for (j=0; j<2; j++) { for (k=0; k coord -> totcoord[j+2]; k++) { show_the_widgets (view -> volume_win -> fm_compb[j][i][k]); hide_the_widgets (view -> volume_win -> fm_hboxv[j][i][k]); view -> fm_comp_vol[j][i][0][k] = FALSE; widget_set_sensitive (view -> volume_win -> fm_hbvol[j][i][k], view -> fm_comp_vol[j][i][0][k]); view -> anim -> last -> img -> fm_show_vol[j][i][k] = FALSE; } } } this_proj -> modelgl -> volumes = FALSE; int shaders[1] = {VOLMS}; re_create_md_shaders (1, shaders, this_proj); update (view); } } /*! \fn GtkWidget * vol_model_tab (glwin * view) \brief create the 'Model' volume tab \param view the target glwin */ GtkWidget * vol_model_tab (glwin * view) { GtkWidget * vbox = create_vbox (BSEP); abox (vbox, _("Volume(s) occupied by all the atom(s):"), 5); GtkWidget * hbox; int i, j; project * this_proj = get_project_by_id (view -> proj); GtkWidget * hhbox; gchar * str; double vof; for (i=0; i%s: "), _(text_filled[i])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 200, -1, 0.0, 0.5), FALSE, FALSE, 30); g_free (str); if (! view -> atoms_volume[i]) view -> atoms_volume[i] = allocdouble (this_proj -> steps); for (j=0; j steps; j++) view -> atoms_volume[i][j] = get_atoms_volume (this_proj, i, j, -1, 0); vof = 0.0; for (j=0; j steps; j++) vof += view -> atoms_volume[i][j]; vof /= this_proj -> steps; str = g_strdup_printf ("%15.3f", vof); hhbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 100, -1, 1.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label ("Å3", 50, -1, 0.0, 0.5), FALSE, FALSE, 20); if (this_proj -> steps > 1) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("average by MD step"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); } abox (vbox, _("Smallest rectangle parallepiped volume(s) to englobe all atom(s):"), 5); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new(_("Angular precision: ")), FALSE, FALSE, 10); GtkWidget * ang_combo = create_combo (); gchar * angpr[4] = {"°", "°/10", "°/100", "°/1000"}; for (i=0; i<4; i++) combo_text_append (ang_combo, angpr[i]); combo_set_active (ang_combo, view -> volume_win -> angp); g_signal_connect (G_OBJECT (ang_combo), "changed", G_CALLBACK(set_angular_precision), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ang_combo, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); for (i=0; i%s: "), _(text_filled[i])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 200, -1, 0.0, 0.5), FALSE, FALSE, 30); g_free (str); hhbox = create_hbox (BSEP); if (! view -> comp_vol[i]) { view -> anim -> last -> img -> vol_col[i].red = (i+1.0)/FILLED_STYLES; view -> anim -> last -> img -> vol_col[i].green = 1.0; view -> anim -> last -> img -> vol_col[i].blue = 0.0; view -> anim -> last -> img -> vol_col[i].alpha = 0.75; } if (! view -> atoms_ppvolume[i]) view -> atoms_ppvolume[i] = allocdouble (this_proj -> steps); if (! view -> volume_box[i]) view -> volume_box[i] = allocddouble (this_proj -> steps, 9); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 0); view -> volume_win -> compb[i] = create_button (_("Compute"), IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(molecular_volumes), & view -> colorp[i][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, view -> volume_win -> compb[i], FALSE, FALSE, 20); vof = 0.0; for (j=0; j steps; j++) vof += view -> atoms_ppvolume[i][j]; vof /= this_proj -> steps; str = g_strdup_printf ("%15.3f", vof); view -> volume_win -> hboxv[i] = create_hbox (BSEP); view -> volume_win -> lab_vol[i] = markup_label (str, 100, -1, 1.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> hboxv[i], view -> volume_win -> lab_vol[i], FALSE, FALSE, 20); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> hboxv[i], markup_label ("Å3", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, view -> volume_win -> hboxv[i], FALSE, FALSE, 0); view -> volume_win -> hbvol[i] = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> hbvol[i], check_button (_("Show/Hide"), 100, -1, view -> anim -> last -> img -> show_vol[i], G_CALLBACK(show_volumes), & view -> colorp[i][0]), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> hbvol[i], color_button (view -> anim -> last -> img -> vol_col[i], TRUE, 50, -1, G_CALLBACK(set_volume_color), & view -> colorp[i][0]), FALSE, FALSE, 5); widget_set_sensitive (view -> volume_win -> hbvol[i], view -> comp_vol[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, view -> volume_win -> hbvol[i], FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } return vbox; } /*! \fn G_MODULE_EXPORT void window_volumes (GtkWidget * widg, gpointer data) \brief create the 'Volumes' window callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_volumes (GtkWidget * widg, gpointer data) { glwin * view = (glwin *) data; if (view -> volume_win == NULL) { view -> volume_win = g_malloc0(sizeof*view -> volume_win); project * this_proj = get_project_by_id (view -> proj); gchar * str = g_strdup_printf (_("%s - volumes"), this_proj -> name); view -> volume_win -> win = create_win (str, view -> win, FALSE, FALSE); gtk_widget_set_size_request (view -> volume_win -> win, 450, 420); g_free (str); GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, view -> volume_win -> win, vbox); GtkWidget * notebook = gtk_notebook_new (); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, notebook, TRUE, TRUE, 0); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vol_model_tab (view), gtk_label_new (_("Model"))); if (view -> adv_bonding[0]) gtk_notebook_append_page (GTK_NOTEBOOK(notebook), frag_mol_volume_tab (view, 2), gtk_label_new (_("Fragment(s)"))); if (view -> adv_bonding[1]) gtk_notebook_append_page (GTK_NOTEBOOK(notebook), frag_mol_volume_tab (view, 3), gtk_label_new (_("Molecule(s)"))); add_gtk_close_event (view -> volume_win -> win, G_CALLBACK(hide_this_window), NULL); show_the_widgets (view -> volume_win -> win); int i; for (i=0; i comp_vol[i]) { hide_the_widgets (view -> volume_win -> compb[i]); } else { hide_the_widgets (view -> volume_win -> hboxv[i]); } } if (view -> adv_bonding[0]) adjust_vol_md_step (this_proj, 2); if (view -> adv_bonding[1]) adjust_vol_md_step (this_proj, 3); } else { show_the_widgets (view -> volume_win -> win); } } atomes_1.3.1/src/opengl/win/m_clones.c0000664000175000017500000001426615212624223017331 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_clones.c * @short Functions to create the 'Model -> Clone(s)' submenu * @author Sébastien Le Roux */ /* * This file: 'm_clones.c' * * Contains: * - The functions to create the 'Model -> Clone(s)' submenu * * List of functions: G_MODULE_EXPORT void show_hide_clones (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_clones (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * create_clone_widget (char * name, gboolean clone, GtkWidget * menu, glwin * view); GtkWidget * menu_clones (glwin * view, int id); GMenu * menu_clones (glwin * view, int popm); */ #include "global.h" #include "glview.h" #include "glwindow.h" #include "submenus.h" #ifdef GTK3 /*! \fn G_MODULE_EXPORT void show_hide_clones (GtkWidget * widg, gpointer data) \brief show/hide clone(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_clones (GtkWidget * widg, gpointer data) { glwin * view = (glwin *)data; gboolean j; j = gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg); if (widg != view -> ogl_clones[0]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_clones[0], j); } view -> anim -> last -> img -> draw_clones = j; widget_set_sensitive (view -> ogl_atoms[5], j); widget_set_sensitive (view -> ogl_atoms[7], j); widget_set_sensitive (view -> ogl_bonds[9], j); widget_set_sensitive (view -> ogl_bonds[11], j); widget_set_sensitive (view -> ogl_bonds[13], j); widget_set_sensitive (view -> ogl_clones[1], j); widget_set_sensitive (view -> ogl_clones[2], j); widget_set_sensitive (view -> ogl_clones[3], j); widget_set_sensitive (view -> ogl_clones[4], j); int i; for (i=0; i proj) -> nspec; i++) { widget_set_sensitive (view -> ogl_spec[1][i], j); widget_set_sensitive (view -> ogl_lab[1][i], j); } init_default_shaders (view); update (view); } /*! \fn GtkWidget * create_clone_widget (char * name, gboolean clone, GtkWidget * menu, glwin * view) \brief create the 'Show/Hide clone(s)' menu item GTK3 \param name label of the new menu item \param clone draw clones (1) or not (0) \param menu the GtkMenu to attach the new item to \param view the target glwin */ GtkWidget * create_clone_widget (char * name, gboolean clone, GtkWidget * menu, glwin * view) { GtkWidget * clone_widget = gtk3_menu_item (menu, name, IMG_NONE, NULL, G_CALLBACK(show_hide_clones), view, FALSE, 0, 0, TRUE, FALSE, clone); widget_set_sensitive (clone_widget, view -> allbonds[1]); return clone_widget; } /*! \fn GtkWidget * menu_clones (glwin * view, int id) \brief create the 'Clone(s)' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_clones (glwin * view, int id) { GtkWidget * menu = gtk_menu_new (); if (id == 0) { view -> ogl_clones[0] = create_clone_widget (_("Show/Hide"), view -> anim -> last -> img -> draw_clones, menu, view); } else { create_clone_widget (_("Show/Hide"), view -> anim -> last -> img -> draw_clones, menu, view); } gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Atom(s)"), TRUE, menu_atoms (view, id, 1))); if ((id == 0) || (view -> anim -> last -> img -> style != SPHERES && view -> anim -> last -> img -> style != PUNT)) { gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Bond(s)"), TRUE, menu_bonds (view, id, 1))); } return menu; } #else /*! \fn G_MODULE_EXPORT void show_hide_clones (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show/hide clones menu item callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_clones (GSimpleAction * action, GVariant * parameter, gpointer data) { glwin * view = (glwin *)data; const gchar * name = g_action_get_name ((GAction *)action); if (g_strcmp0(name, "set-show-clones.1.1") == 0) { g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-show-clones.0.0", NULL); } else { GVariant * state; gboolean show; if (action) { state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); } else { show = ! view -> anim -> last -> img -> draw_clones; } view -> anim -> last -> img -> draw_clones = show; init_default_shaders (view); update (view); // Update the menu bar is reqiured to udpate the clone(s) submenus update_menu_bar (view); if (action) { g_variant_unref (state); } } } /*! \fn GMenu * menu_clones (glwin * view, int popm) \brief create the 'Clone(s)' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_clones (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, _("Show/Hide"), "show-clones", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_clones), (gpointer)view, TRUE, view -> anim -> last -> img -> draw_clones, FALSE, (view -> allbonds[1]) ? TRUE : FALSE); append_submenu (menu, _("Atom(s)"), menu_atoms(view, popm, 1)); if (view -> anim -> last -> img -> style != SPHERES && view -> anim -> last -> img -> style != PUNT) { append_submenu (menu, _("Bonds(s)"), menu_bonds(view, popm, 1)); } return menu; } #endif atomes_1.3.1/src/opengl/win/m_tools.c0000664000175000017500000006453415212624223017211 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_tools.c * @short Functions to create the 'Tools' submenu * @author Sébastien Le Roux */ /* * This file: 'm_tools.c' * * Contains: * - The functions to create the 'Tools' submenu * * List of functions: void set_motion_sensitive (glwin * view, int status); void invert_visible (project * this_proj); G_MODULE_EXPORT void set_selection_mode (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void invert_this (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_window_measures (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_window_volumes (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void change_mouse_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void change_sel_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_create_field (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_invert_this (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * menu_tools (glwin * view, int id); GMenu * measure_section (glwin * view, int popm); GMenu * volume_section (glwin * view, int popm); GMenu * edit_section (glwin * view, int popm); GMenu * mouse_mode_menu (glwin * view, int popm); GMenu * selection_mode_menu (glwin * view, int popm); GMenu * modes_section (glwin * view, int popm); GMenu * md_menu (glwin * view, int popm); GMenu * inv_menu (glwin * view, int popm); GMenu * add_section_item_with_menu (glwin * view, gchar * item_name, GMenu * men); GMenu * menu_tools (glwin * view, int popm); */ #include "cell_edit.h" #include "atom_edit.h" #include "submenus.h" extern G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_volumes (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void create_field (GtkWidget * widg, gpointer data); extern gboolean spin (gpointer data); extern void check_hidden_visible (project * this_proj); char * input_types[NINPUTS] = {i18n("Classical: DL-POLY"), i18n("Classical: LAMMPS"), i18n("First-Principles: CPMD"), i18n("First-Principles: CP2K"), i18n("QM-MM: CPMD - [Soon]"), i18n("QM-MM: CP2K - [Soon]")}; gchar * modes[3]={i18n("Analysis "), i18n("Edition "), i18n("Input(s)")}; gchar * smodes[NSELECTION]={i18n("Atom/Bond"), i18n("Coordination Sphere"), i18n("Fragment"), i18n("Molecule"), i18n("Single Fragment"), i18n("Single Molecule"), i18n("Measures (Edition Mode Only)")}; gchar * invl[2]={i18n("Selection"), i18n("Visible/Hidden")}; /*! \fn void set_motion_sensitive (glwin * view, int status) \brief change motion parameters following a change in the mouse mode \param view the target glwin \param status initialize or restore spin */ void set_motion_sensitive (glwin * view, int status) { int i; #ifdef GTK3 // GTK3 Menu Action To Check for (i=0; i<2; i++) widget_set_sensitive (view -> ogl_anim[i], status); #endif if (view -> player != NULL) widget_set_sensitive (view -> player -> win, status); if (view -> spiner != NULL) widget_set_sensitive (view -> spiner -> win, status); if (view -> rec != NULL) widget_set_sensitive (view -> rec -> win, status); if (! status) { if (view -> spin[0] || view -> spin[1]) { for (i=0; i<2; i++) { view -> spin[i+2] = view -> spin[i]; view -> spin_speed[i+2] = view -> spin_speed[i]; view -> spin[i] = FALSE; } } } else if (view -> spin[2] || view -> spin[3]) { for (i=0; i<2; i++) { view -> spin[i] = view -> spin[i+2]; view -> spin_speed[i] = view -> spin_speed[i+2]; g_timeout_add (REFRESH, (GSourceFunc) spin, & view -> colorp[0][i]); view -> spin[i+2] = FALSE; view -> spin_speed[i+2] = 0; } } } /*! \fn G_MODULE_EXPORT void set_selection_mode (GtkWidget * widg, gpointer data) \brief set selection mode callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_selection_mode (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); int i = this_proj -> modelgl -> selection_mode; int j = the_data -> b; #ifdef GTK4 if (i != j) { #else // GTK3 Menu Action To Check if (i != j && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { this_proj -> modelgl -> selection_mode = NONE; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_smode[i], FALSE); if (widg != this_proj -> modelgl -> ogl_smode[j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_smode[j], TRUE); } #endif this_proj -> modelgl -> selection_mode = j; } #ifdef GTK3 // GTK3 Menu Action To Check else if (i == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_smode[j], TRUE); } #endif } /*! \fn G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data) \brief set mouse mode callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); int i = this_proj -> modelgl -> mode; int j = the_data -> b; if (! (j == EDITION && is_atom_win_active(this_proj -> modelgl))) { #ifdef GTK4 if (i != j) #else if (i != j && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) #endif { this_proj -> modelgl -> mode = NONE; #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_mode[i], FALSE); if (widg != this_proj -> modelgl -> ogl_mode[j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_mode[j], TRUE); } #endif this_proj -> modelgl -> mode = j; if (this_proj -> modelgl -> mode == EDITION) { for (i=1; i<3; i++) init_coordinates (this_proj, i, FALSE, TRUE); set_motion_sensitive (this_proj -> modelgl, 0); } else { for (i=1; i<3; i++) { if (this_proj -> modelgl -> saved_coord[i] != NULL) { g_free (this_proj -> modelgl -> saved_coord[i]); this_proj -> modelgl -> saved_coord[i] = NULL; } } set_motion_sensitive (this_proj -> modelgl, 1); if (this_proj -> modelgl -> selection_mode == NSELECTION-1) { #ifdef GTK4 set_selection_mode (NULL, & this_proj -> modelgl -> colorp[0][0]); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_smode[0], TRUE); set_selection_mode (this_proj -> modelgl -> ogl_smode[0], & this_proj -> modelgl -> colorp[0][0]); #endif } } i = activep; active_project_changed (this_proj -> id); active_project_changed (i); #ifdef GTK3 // GTK3 Menu Action To Check widget_set_sensitive (this_proj -> modelgl -> ogl_smode[NSELECTION-1], (this_proj -> modelgl -> mode == EDITION) ? 1 : 0); #endif i = (this_proj -> modelgl -> mode == EDITION) ? EDITION : ANALYZE; gchar * str = g_strdup_printf (_("%s - 3D view - [%s mode]"), prepare_for_title(this_proj -> name), _(mode_name[i])); gtk_window_set_title (GTK_WINDOW (this_proj -> modelgl -> win), str); g_free (str); this_proj -> modelgl -> create_shaders[MEASU] = TRUE; update (this_proj -> modelgl); } #ifdef GTK3 // GTK3 Menu Action To Check else if (i == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_mode[j], TRUE); } #endif } } /*! \fn void invert_visible (project * this_proj) \brief invert visible atom(s) \param this_proj the target project */ void invert_visible (project * this_proj) { int i, j, k; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { for (k=0; k<2; k++) this_proj -> atoms[i][j].show[k] = ! this_proj -> atoms[i][j].show[k]; } } check_hidden_visible (this_proj); init_default_shaders (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void invert_this (GtkWidget * widg, gpointer data) \brief invert selection or visible callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void invert_this (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); switch (the_data -> b) { case 0: invert_selection (this_proj); init_default_shaders (this_proj -> modelgl); break; case 1: invert_visible (this_proj); break; } } #ifdef GTK3 extern G_MODULE_EXPORT void window_volumes (GtkWidget * widg, gpointer data); /*! \fn GtkWidget * menu_tools (glwin * view, int id) \brief create the 'Tools' submenu - GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_tools (glwin * view, int id) { int i; GtkWidget * menut = gtk_menu_new (); gtk3_menu_item (menut, _("Measures"), IMG_NONE, NULL, G_CALLBACK(window_measures), (gpointer)view, TRUE, GDK_KEY_m, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); GtkWidget * widg = gtk3_menu_item (menut, _("Volumes"), IMG_NONE, NULL, G_CALLBACK(window_volumes), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); widget_set_sensitive (widg, (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1); add_menu_separator (menut); gtk_menu_shell_append ((GtkMenuShell *)menut, menu_item_new_with_submenu(_("Edit"), TRUE, menu_edit(view, id))); add_menu_separator (menut); widg = create_menu_item (FALSE, _("Mouse Mode")); gtk_menu_shell_append ((GtkMenuShell *)menut, widg); GtkWidget * menum = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menum); guint accel[3]={GDK_KEY_a, GDK_KEY_e, GDK_KEY_i}; guint acces[4]={GDK_KEY_A, GDK_KEY_C, GDK_KEY_F, GDK_KEY_M}; if (id == 0) { for (i=0; i<2; i++) { view -> ogl_mode[i] = gtk3_menu_item (menum, _(modes[i]), IMG_NONE, NULL, G_CALLBACK(set_mode), & view -> colorp[i][0], TRUE, accel[i], GDK_MOD1_MASK, TRUE, TRUE, (i == view -> mode) ? TRUE : FALSE); widget_set_sensitive (view -> ogl_mode[i], (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1); } } else { for (i=0; i<2; i++) { widg = gtk3_menu_item (menum, _(modes[i]), IMG_NONE, NULL, G_CALLBACK(set_mode), & view -> colorp[i][0], TRUE, accel[i], GDK_MOD1_MASK, TRUE, TRUE, (i == view -> mode) ? TRUE : FALSE); widget_set_sensitive (widg, (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1); } } /*widg = create_menu_item (TRUE, _(modes[2])); gtk_menu_shell_append ((GtkMenuShell *)menum, widg); GtkWidget * menui = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menui); widget_set_sensitive (widg, (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1); if (id == 0) { for (i=0; i ogl_mode[i+2] = gtk3_menu_item (menum, _(modes[i]), IMG_NONE, NULL, G_CALLBACK(set_mode), & view -> colorp[2+i][0], FALSE, 0, 0, TRUE, TRUE, (i+2 == view -> mode) ? TRUE : FALSE); widget_set_sensitive (view -> ogl_mode[i+2], 0); } } else { for (i=0; i colorp[2+i][0], FALSE, 0, 0, TRUE, TRUE, (i+2 == view -> mode) ? TRUE : FALSE); widget_set_sensitive (widg, 0); } }*/ widg = create_menu_item (FALSE, _("Selection Mode")); gtk_menu_shell_append ((GtkMenuShell *)menut, widg); GtkWidget * menusm = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menusm); if (id == 0) { for (i=0; i ogl_smode[i] = gtk3_menu_item (menusm, _(smodes[i]), IMG_NONE, NULL, G_CALLBACK(set_selection_mode), & view -> colorp[i][0], TRUE, acces[i], GDK_SHIFT_MASK, TRUE, TRUE, (i == view -> selection_mode) ? TRUE : FALSE); } else { view -> ogl_smode[i] = gtk3_menu_item (menusm, _(smodes[i]), IMG_NONE, NULL, G_CALLBACK(set_selection_mode), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (i == view -> selection_mode) ? TRUE : FALSE); } if (i == NSELECTION-1) widget_set_sensitive (view -> ogl_smode[i], (view -> mode == EDITION) ? 1 : 0); } } else { for (i=0; i colorp[i][0], TRUE, acces[i], GDK_SHIFT_MASK, TRUE, TRUE, (i == view -> selection_mode) ? TRUE : FALSE); } else { widg = gtk3_menu_item (menusm, _(smodes[i]), IMG_NONE, NULL, G_CALLBACK(set_selection_mode), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (i == view -> selection_mode) ? TRUE : FALSE); } if (i == NSELECTION-1) widget_set_sensitive (widg, (view -> mode == EDITION) ? 1 : 0); } } add_menu_separator (menut); GtkWidget * menuf = NULL; widg = create_menu_item (FALSE, _("Molecular Dynamics")); widget_set_sensitive (widg, get_project_by_id(view -> proj) -> nspec); gtk_menu_shell_append ((GtkMenuShell *)menut, widg); menuf = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menuf); if (id == 0) { for (i=0; i ogl_mode[i+2+NINPUTS] = create_menu_item (TRUE, _(input_types[i])); gtk_menu_shell_append ((GtkMenuShell *)menuf, view -> ogl_mode[i+2+NINPUTS]); g_signal_connect (G_OBJECT (view -> ogl_mode[i+2+NINPUTS]), "activate", G_CALLBACK(create_field), & view -> colorp[i][0]); if (i > 3) widget_set_sensitive (view -> ogl_mode[i+2+NINPUTS], 0); } set_advanced_bonding_menus (view); } else { for (i=0; i colorp[i][0]); // if (i < 2 || i > 3) widget_set_sensitive (widg, view -> adv_bonding[1]); if (i < 2) widget_set_sensitive (widg, view -> adv_bonding[1]); if (i > 3) widget_set_sensitive (widg, 0); } } add_menu_separator (menut); GtkWidget * menuin = NULL; widg = create_menu_item (FALSE, _("Invert")); gtk_menu_shell_append ((GtkMenuShell *)menut, widg); menuin = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menuin); for (i=0; i<2; i++) { widg = create_menu_item (FALSE, _(invl[i])); gtk_menu_shell_append ((GtkMenuShell *)menuin, widg); g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(invert_this), & view -> colorp[i][0]); } return menut; } #else /*! \fn G_MODULE_EXPORT void to_window_measures (GSimpleAction * action, GVariant * parameter, gpointer data) \brief open the measurement window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_window_measures (GSimpleAction * action, GVariant * parameter, gpointer data) { window_measures (NULL, data); } /*! \fn GMenu * measure_section (glwin * view, int popm) \brief create the 'Tools -> Measures' menu item GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * measure_section (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, _("Measures"), "measures", popm, popm, "M", IMG_NONE, NULL, FALSE, G_CALLBACK(to_window_measures), (gpointer)view, FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn G_MODULE_EXPORT void to_window_volumes (GSimpleAction * action, GVariant * parameter, gpointer data) \brief open the volumes window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_window_volumes (GSimpleAction * action, GVariant * parameter, gpointer data) { window_volumes (NULL, data); } /*! \fn GMenu * volume_section (glwin * view, int popm) \brief create the 'Tools -> Volumes' menu item GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * volume_section (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, _("Volumes"), "volumes", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_window_volumes), (gpointer)view, FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * edit_section (glwin * view, int popm) \brief create the 'Tools -> Edit' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * edit_section (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Edit"), menu_edit(view, popm)); return menu; } /*! \fn G_MODULE_EXPORT void change_mouse_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change mouse radio menu item callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void change_mouse_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { glwin * view = (glwin *)data; const gchar * mode = g_variant_get_string (parameter, NULL); int lgt = strlen (mode); gchar * name = g_strdup_printf ("%c%c", mode[lgt-2], mode[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, mode); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-mouse-mode", g_variant_new_string((const gchar *)name)); g_free (name); } else { gchar * mode_name = NULL; int i; for (i=0; i<2; i++) { mode_name = g_strdup_printf ("set-mouse-mode.%d.0", i); if (g_strcmp0(mode, (const gchar *)mode_name) == 0) { set_mode (NULL, & view -> colorp[i][0]); g_free (mode_name); mode_name = NULL; break; } g_free (mode_name); mode_name = NULL; } // Update the menu bar is required to activate / deactivate the selection mode option update_menu_bar (view); } } /*! \fn GMenu * mouse_mode_menu (glwin * view, int popm) \brief create the 'Tools -> Mouse Mode' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * mouse_mode_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); gchar * accel[3] = {"A", "E", "I"}; int i, j; j = (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1; for (i=0; i<2; i++) { append_opengl_item (view, menu, _(modes[i]), "mouse-mode", popm, i, accel[i], IMG_NONE, NULL, FALSE, G_CALLBACK(change_mouse_mode_radio), (gpointer)view, FALSE, (i == view -> mode) ? TRUE : FALSE, TRUE, j); } return menu; } /*! \fn G_MODULE_EXPORT void change_sel_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change selection mode callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void change_sel_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { glwin * view = (glwin *)data; const gchar * mode = g_variant_get_string (parameter, NULL); int lgt = strlen (mode); gchar * name = g_strdup_printf ("%c%c", mode[lgt-2], mode[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, mode); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-sel-mode", g_variant_new_string((const gchar *)name)); g_free (name); } else { gchar * mode_name = NULL; int i; for (i=0; i colorp[i][0]); g_free (mode_name); mode_name = NULL; break; } g_free (mode_name); mode_name = NULL; } g_action_change_state (G_ACTION (action), parameter); } } /*! \fn GMenu * selection_mode_menu (glwin * view, int popm) \brief create the 'Tools -> Selection Mode' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * selection_mode_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); gchar * acces[4]={"A", "C", "F", "M"}; gchar * str; int i, j; for (i=0; i mode == EDITION) ? 1 : 0 : TRUE; if (i < 4) { str = g_strdup_printf ("%s", acces[i]); append_opengl_item (view, menu, _(smodes[i]), "sel-mode", popm, i, str, IMG_NONE, NULL, FALSE, G_CALLBACK(change_sel_mode_radio), (gpointer)view, FALSE, (i == view -> selection_mode) ? TRUE : FALSE, TRUE, j); g_free (str); } else { append_opengl_item (view, menu, _(smodes[i]), "sel-mode", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_sel_mode_radio), (gpointer)view, FALSE, (i == view -> selection_mode) ? TRUE : FALSE, TRUE, j); } } return menu; } /*! \fn GMenu * modes_section (glwin * view, int popm) \brief create the 'Tools -> * Modes' submenus GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * modes_section (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Mouse Mode"), mouse_mode_menu(view, popm)); append_submenu (menu, _("Selection Mode"), selection_mode_menu(view, popm)); return menu; } /*! \fn G_MODULE_EXPORT void to_create_field (GSimpleAction * action, GVariant * parameter, gpointer data) \brief run MD input assistant callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_create_field (GSimpleAction * action, GVariant * parameter, gpointer data) { create_field (NULL, data); } /*! \fn GMenu * md_menu (glwin * view, int popm) \brief create the 'Molecular Dynamics' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * md_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); int i; for (i=0; i colorp[i][0], FALSE, FALSE, FALSE, (i < 2) ? view -> adv_bonding[1] : (i > 3) ? FALSE : TRUE); } return menu; } /*! \fn G_MODULE_EXPORT void to_invert_this (GSimpleAction * action, GVariant * parameter, gpointer data) \brief invert this callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_invert_this (GSimpleAction * action, GVariant * parameter, gpointer data) { invert_this (NULL, data); } /*! \fn GMenu * inv_menu (glwin * view, int popm) \brief create the 'Tools -> Invert' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * inv_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); int i; for (i=0; i<2; i++) { append_opengl_item (view, menu, _(invl[i]), "inv", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_invert_this), & view -> colorp[i][0], FALSE, FALSE, FALSE, TRUE); } return menu; } /*! \fn GMenu * add_section_item_with_menu (glwin * view, gchar * item_name, GMenu * men) \brief append a new menu item with a new submenu \param view the target glwin \param item_name the new menu item label \param men the menu item new submenu */ GMenu * add_section_item_with_menu (glwin * view, gchar * item_name, GMenu * men) { GMenu * menu = g_menu_new (); append_submenu (menu, item_name, men); return menu; } /*! \fn GMenu * menu_tools (glwin * view, int popm) \brief create the 'Tools' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_tools (glwin * view, int popm) { GMenu * menu = g_menu_new (); g_menu_append_section (menu, NULL, (GMenuModel*)measure_section(view, popm)); g_menu_append_section (menu, NULL, (GMenuModel*)volume_section(view, popm)); g_menu_append_section (menu, NULL, (GMenuModel*)edit_section(view, popm)); g_menu_append_section (menu, NULL, (GMenuModel*)modes_section(view, popm)); g_menu_append_section (menu, NULL, (GMenuModel*)add_section_item_with_menu(view, _("Molecular Dynamics"), md_menu(view, popm))); g_menu_append_section (menu, NULL, (GMenuModel*)add_section_item_with_menu(view, _("Invert"), inv_menu(view, popm))); return menu; } #endif atomes_1.3.1/src/opengl/win/m_back.c0000664000175000017500000000572615212624223016747 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_back.c * @short Function to create the background color menu item * @author Sébastien Le Roux */ /* * This file: 'm_back.c' * * Contains: * - The function to create the background color menu item * * List of functions: GtkWidget * menu_back (glwin * view); GMenu * menu_back (glwin * view, int popm); */ #include "global.h" #include "color_box.h" #include "glwindow.h" extern G_MODULE_EXPORT void gradient_advanced (GtkWidget * widg, gpointer data); #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_gradient_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) \brief to run background gradient color selection window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_gradient_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) { gradient_advanced (NULL, data); } #endif #ifdef GTK3 /*! \fn GtkWidget * menu_back (glwin * view) \brief create the background color menu item GTK3 \param view the target glwin */ GtkWidget * menu_back (glwin * view) { GtkWidget * menub = gtk_menu_new (); GtkWidget * bc = create_menu_item (FALSE, _("Color")); gtk_menu_shell_append ((GtkMenuShell *)menub, bc); gtk_menu_item_set_submenu ((GtkMenuItem *)bc, color_box(view, -2, 0, 0)); GtkWidget * gc = create_menu_item (FALSE, _("Gradient color")); g_signal_connect (G_OBJECT (gc), "activate", G_CALLBACK(gradient_advanced), view); gtk_menu_shell_append ((GtkMenuShell *)menub, gc); return menub; } #else /*! \fn GMenu * menu_back (glwin * view, int popm) \brief create the background color menu item GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_back (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, _("More Colors ..."), "back-color", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_run_back_color_window), view, FALSE, FALSE, FALSE, TRUE); append_opengl_item (view, menu, _("Gradient colors"), "back-gradient", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_gradient_advanced), view, FALSE, FALSE, FALSE, TRUE); return menu; } #endif atomes_1.3.1/src/opengl/win/w_box.c0000664000175000017500000002756215212624223016653 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_box.c * @short Functions to create the box properties window * @author Sébastien Le Roux */ /* * This file: 'w_box.c' * * Contains: * - The functions to create the box properties window * * List of functions: G_MODULE_EXPORT void update_box_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_box_combo_style (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_show_box_toggle (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_show_box_toggle (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_color_box (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void box_advanced (GtkWidget * widg, gpointer data); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #include "preferences.h" gboolean from_box_or_axis = FALSE; /*! \fn G_MODULE_EXPORT void update_box_parameter (GtkEntry * res, gpointer data) \brief update box parameter callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_box_parameter (GtkEntry * res, gpointer data) { glwin * view; int box_type; double box_line; double box_rad; const gchar * n = entry_get_text (res); #ifdef GTK3 gchar * str; #endif // GTK3 double v = string_to_double ((gpointer)n); if (preferences) { box_type = tmp_box -> box; box_line = tmp_box -> line; box_rad = tmp_box -> rad; } else { view = (glwin *)data; box_type = view -> anim -> last -> img -> abc -> box; box_line = view -> anim -> last -> img -> abc -> line; box_rad = view -> anim -> last -> img -> abc -> rad; } if (box_type == CYLINDERS) { if (v > 0.0) box_rad = v; v = box_rad; if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Radius [ %f Å ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_box_axis[0][6]), str); g_free (str); #endif view -> anim -> last -> img -> abc -> rad = v; } else { tmp_box -> rad = v; } } else { if (v > 0.0) box_line = v; v = box_line; if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Width [ %f pts ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_box_axis[0][4]), str); g_free (str); #endif view -> anim -> last -> img -> abc -> line = v; } else { tmp_box -> line = v; } } update_entry_double (res, v); if (! preferences) { view -> create_shaders[MDBOX] = TRUE; update (view); } } /*! \fn G_MODULE_EXPORT void set_box_combo_style (GtkWidget * widg, gpointer data) \brief set box style callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_box_combo_style (GtkWidget * widg, gpointer data) { int i = combo_get_active (widg); glwin * view; box_edition * box_win; if (! preferences) { view = (glwin *)data; box_win = view -> box_win; } else { box_win = pref_box_win; } #ifdef GTK4 if (! preferences) { view -> anim -> last -> img -> abc -> box = (i < 0) ? (NONE) : (i == 0) ? WIREFRAME : CYLINDERS; view -> create_shaders[MDBOX] = TRUE; update (view); } #else from_box_or_axis = TRUE; #endif if (i == 1) { hide_the_widgets (box_win -> width_box); show_the_widgets (box_win -> radius_box); if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[0][2], TRUE); #endif } else { tmp_box -> box = CYLINDERS; } } else if (i == 0) { hide_the_widgets (box_win -> radius_box); show_the_widgets (box_win -> width_box); if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[0][1], TRUE); #endif } else { tmp_box -> box = WIREFRAME; } } if (! preferences) { view -> create_shaders[MDBOX] = TRUE; update (view); #ifdef GTK4 update_menu_bar (view); #endif } #ifdef GTK3 from_box_or_axis = FALSE; #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_show_box_toggle (GtkCheckButton * but, gpointer data) \brief toggle show / hide box callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_box_toggle (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_show_box_toggle (GtkToggleButton * but, gpointer data) \brief toggle show / hide box callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_box_toggle (GtkToggleButton * but, gpointer data) #endif { gboolean val = button_get_status ((GtkWidget *)but); glwin * view; box_edition * box_win; if (! preferences) { view = (glwin *)data; box_win = view -> box_win; } else { box_win = pref_box_win; } #ifdef GTK3 from_box_or_axis = TRUE; #endif // GTK3 if (val) { if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[0][0], TRUE); #endif } combo_set_active (box_win -> styles, WIREFRAME-1); } else { if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[0][0], FALSE); #endif } combo_set_active (box_win -> styles, NONE); } #ifdef GTK3 from_box_or_axis = FALSE; #endif // GTK3 widget_set_sensitive (box_win -> box_data, val); #ifdef GTK4 if (! preferences) update_menu_bar (view); #endif } /*! \fn G_MODULE_EXPORT void set_color_box (GtkColorChooser * colob, gpointer data) \brief set box color callback \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_color_box (GtkColorChooser * colob, gpointer data) { if (preferences) { tmp_box -> color = get_button_color (colob); } else { glwin * view = (glwin *)data; view -> anim -> last -> img -> abc -> color = get_button_color (colob); view -> create_shaders[MDBOX] = TRUE; update (view); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean on_box_delete (GtkWindow * widg, gpointer data) \brief box window delete event - GTK4 \param widg \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_box_delete (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_box_delete (GtkWidget * widg, GdkEvent * event, gpointer data) \brief box window delete event - GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_box_delete (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { glwin * view = (glwin *)data; view -> box_win -> win = destroy_this_widget (view -> box_win -> win); g_free (view -> box_win); view -> box_win = NULL; return TRUE; } /*! \fn G_MODULE_EXPORT void box_advanced (GtkWidget * widg, gpointer data) \brief create the box edition window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void box_advanced (GtkWidget * widg, gpointer data) { int i; glwin * view; box_edition * the_box; int box_type; double box_line; double box_rad; ColRGBA box_color; if (preferences) { the_box = pref_box_win; box_type = tmp_box -> box; box_color = tmp_box -> color; box_line = tmp_box -> line; box_rad = tmp_box -> rad; } else { view = (glwin *)data; view -> box_win = g_malloc0(sizeof*view -> box_win); the_box = view -> box_win; box_type = view -> anim -> last -> img -> abc -> box; box_color = view -> anim -> last -> img -> abc -> color; box_line = view -> anim -> last -> img -> abc -> line; box_rad = view -> anim -> last -> img -> abc -> rad; } GtkWidget * vbox = create_vbox (BSEP); if (preferences) { the_box -> win = create_vbox (BSEP); adv_box (the_box -> win, _("Box settings"), 5, 120, 0.0); GtkWidget * hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_box -> win, hbox, FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbox, FALSE, FALSE, 60); } else { gchar * str = g_strdup_printf (_("%s - box settings"), get_project_by_id(view -> proj)->name); the_box -> win = create_win (str, view -> win, FALSE, FALSE); g_free (str); add_container_child (CONTAINER_WIN, the_box -> win, vbox); } GtkWidget * box; gboolean ac; if (box_type != NONE) { ac = TRUE; } else { ac = FALSE; } the_box -> show_hide = check_button (_("Show/Hide box"), 100, 40, ac, G_CALLBACK(set_show_box_toggle), data); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, the_box -> show_hide, FALSE, FALSE, 0); the_box -> box_data = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, the_box -> box_data, TRUE, TRUE, 10); widget_set_sensitive (the_box -> box_data, ac); GtkWidget * pos_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_box -> box_data, pos_box, TRUE, TRUE, 0); box = abox (the_box -> box_data, _("Style "), 5); the_box -> styles = create_combo (); combo_text_append (the_box -> styles, _("Wireframes")); combo_text_append (the_box -> styles, _("Cylinders")); if (box_type == NONE) i = NONE; if (box_type == WIREFRAME) i = 0; if (box_type == CYLINDERS) i = 1; combo_set_active (the_box -> styles, i); gtk_widget_set_size_request (the_box -> styles, 120, -1); g_signal_connect (G_OBJECT (the_box -> styles), "changed", G_CALLBACK(set_box_combo_style), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, the_box -> styles, FALSE, FALSE, 10); the_box -> width_box = abox (the_box -> box_data, _("Line width [pts] "), 0); the_box -> width = create_entry (G_CALLBACK(update_box_parameter), 120, 10, FALSE, data); update_entry_double (GTK_ENTRY(the_box -> width), box_line); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, the_box -> width_box, the_box -> width, FALSE, FALSE, 10); the_box -> radius_box = abox (the_box -> box_data, _("Cylinder radius [Å] "), 0); the_box -> radius = create_entry (G_CALLBACK(update_box_parameter), 120, 10, FALSE, data); update_entry_double (GTK_ENTRY(the_box -> radius), box_rad); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, the_box -> radius_box, the_box -> radius, FALSE, FALSE, 10); // Colors add_box_child_start (GTK_ORIENTATION_HORIZONTAL, abox (the_box -> box_data, _("Color "), 5), color_button(box_color, TRUE, 120, -1, G_CALLBACK(set_color_box), data), FALSE, FALSE, 10); if (! preferences) { add_global_option (vbox, & view -> colorp[1][0]); add_gtk_close_event (the_box -> win, G_CALLBACK(on_box_delete), view); show_the_widgets (the_box -> win); if (box_type) { hide_the_widgets (the_box -> width_box); } else { hide_the_widgets (the_box -> radius_box); } } } atomes_1.3.1/src/opengl/win/m_atoms.c0000664000175000017500000006761715212624223017201 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_atoms.c * @short Functions to create the 'Model -> Atom(s)' submenu * @author Sébastien Le Roux */ /* * This file: 'm_atoms.c' * * Contains: * - The functions to create the 'Model -> Atom(s)' submenu * * List of functions: gchar * label_atpts (project * this_proj, glwin * view, int id); G_MODULE_EXPORT void show_hide_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_labels (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_all_atom_labels (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_labels (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_all_atom_labels (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * create_spec_menu (char * name, gboolean va, gboolean vb, GtkWidget * menu, GCallback handler, tint * data); GtkWidget * create_atom_layout_widget (gchar * str, GtkWidget * widg, tint * data); GtkWidget * show_atoms_submenu (glwin * view, int id, int at); GtkWidget * color_atoms_submenu (glwin * view, int id, int at); GtkWidget * label_atoms_submenu (glwin * view, int id, int at); GtkWidget * menu_atoms (glwin * view, int id, int at); GMenu * label_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive); GMenu * color_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive); GMenu * show_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive); GMenu * menu_atoms (glwin * view, int popm, int at); */ #include "global.h" #include "glview.h" #include "glwindow.h" #include "color_box.h" extern void check_hidden_visible (project * this_proj); extern G_MODULE_EXPORT void set_atom_parameter (GtkWidget * widg, gpointer data); /*! \fn gchar * label_atpts (project * this_proj, glwin * view, int id) \brief prepare the text of a menu item in the 'Model -> Atom(s)' submenu \param this_proj the target project \param view the target glwin \param id the type of label to prepare */ gchar * label_atpts (project * this_proj, glwin * view, int id) { int i; gchar * mot; gchar * tmp; gchar * str; for (i=0; i < this_proj -> nspec; i++) { switch (id) { case 0: str = g_strdup_printf ("%s [ %f Å ]", this_proj -> chemistry -> label[i], view -> anim -> last -> img -> sphererad[i]); break; case 1: str = g_strdup_printf ("%s [ %f pts ]", this_proj -> chemistry -> label[i], view -> anim -> last -> img -> pointrad[i]); break; case 2: str = g_strdup_printf ("%s [ %f pts ]", this_proj -> chemistry -> label[i], view -> anim -> last -> img -> sphererad[i+this_proj -> nspec]); break; case 3: str = g_strdup_printf ("%s [ %f pts ]", this_proj -> chemistry -> label[i], view -> anim -> last -> img -> pointrad[i+this_proj -> nspec]); break; default: str = g_strdup_printf ("%s [ %f Å ]", this_proj -> chemistry -> label[i], view -> anim -> last -> img -> atomicrad[i]); break; } if (i == 0) { mot = g_strdup_printf ("%s", str); } else { tmp = g_strdup_printf ("%s", mot); g_free (mot); mot = g_strdup_printf ("%s\n%s", tmp, str); g_free (tmp); } g_free (str); } return mot; } #ifdef GTK3 extern G_MODULE_EXPORT void set_show_hide_all_atom_labels (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void atom_properties (GtkWidget * widg, gpointer data); /*! \fn G_MODULE_EXPORT void show_hide_atoms (GtkWidget * widg, gpointer data) \brief handle the show / hide atomic species signal \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_atoms (GtkWidget * widg, gpointer data) { tint * the_data = (tint *) data; int j = the_data -> b; int k = the_data -> c; int l, m; project * this_proj = get_project_by_id(the_data -> a); gboolean v = gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg); if (widg != this_proj -> modelgl -> ogl_spec[j][k]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_spec[j][k], v); } for (l=0; l steps; l++) { for (m=0; m natomes; m++) { if (this_proj -> atoms[l][m].sp == k) this_proj -> atoms[l][m].show[j] = v; } } this_proj -> modelgl -> anim -> last -> img -> show_atom[j][k] = v; check_hidden_visible (this_proj); init_default_shaders (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void show_hide_labels (GtkWidget * widg, gpointer data) \brief handle the show / hide atomic species label signal \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_labels (GtkWidget * widg, gpointer data) { int l, m; tint * id = (tint *) data; int j = id -> b; int k = id -> c; project * this_proj = get_project_by_id(id -> a); gboolean v = gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg); if (widg != this_proj -> modelgl -> ogl_lab[j][k]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[j][k], v); } for (l=0; l steps; l++) { for (m=0; m natomes; m++) { if (this_proj -> atoms[l][m].sp == k) { if (this_proj -> atoms[l][m].label[j] != v) { this_proj -> atoms[l][m].label[j] = v; } } } } this_proj -> modelgl -> labelled = check_label_numbers (this_proj, j); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void show_hide_all_atom_labels (GtkWidget * widg, gpointer data) \brief handle the show / hide all atomic labels signal \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_all_atom_labels (GtkWidget * widg, gpointer data) { tint * id = (tint *) data; int j = id -> b; int k; gboolean show = TRUE; project * this_proj = get_project_by_id(id -> a); for (k=0; k nspec; k++) { if (plot -> show_label[j][k]) show = FALSE; } for (k=0; k nspec; k++) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[j][k], show); } } /*! \fn GtkWidget * create_spec_menu (char * name, gboolean va, gboolean vb, GtkWidget * menu, GCallback handler, tint * data) \brief create a chemical species related check menu item GTK3 \param name menu item name \param va check menu item status \param vb menu item sensitivity \param menu the GtkWidget sending the signal \param handler the associated callback \param data the associated data pointer */ GtkWidget * create_spec_menu (char * name, gboolean va, gboolean vb, GtkWidget * menu, GCallback handler, tint * data) { GtkWidget * spec_widget = gtk3_menu_item (menu, name, IMG_NONE, NULL, handler, data, FALSE, 0, 0, TRUE, FALSE, va); widget_set_sensitive (spec_widget, vb); return spec_widget; } /*! \fn GtkWidget * create_atom_layout_widget (gchar * str, GtkWidget * widg, tint * data) \brief create a 'Model -> Atom(s)' menu item GTK3 \param str the label for the menu item \param widg the menu GtkWidget to attach the menu item to \param data the associated data pointer */ GtkWidget * create_atom_layout_widget (gchar * str, GtkWidget * widg, tint * data) { GtkWidget * menu = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menu); GtkWidget * layout = create_menu_item (TRUE, str); gtk_menu_shell_append ((GtkMenuShell *)menu, layout); g_signal_connect (G_OBJECT (layout), "activate", G_CALLBACK(set_atom_parameter), data); return layout; } /*! \fn GtkWidget * show_atoms_submenu (glwin * view, int id, int at) \brief create the 'Atom(s) -> show' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) \param at atoms (0) or clones (1) */ GtkWidget * show_atoms_submenu (glwin * view, int id, int at) { GtkWidget * mshow = gtk_menu_new (); gchar * str; gboolean sensitive = (! at) ? TRUE : view -> anim -> last -> img -> draw_clones; project * this_proj = get_project_by_id (view -> proj); if (id == 0) { view -> ogl_spec[at] = g_malloc0(this_proj -> nspec*sizeof*view -> ogl_spec[at]); } int i; for (i=0; i< this_proj -> nspec; i++) { if (at == 0) { str = g_strdup_printf ("%s", this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s*", this_proj -> chemistry -> label[i]); } if (id == 0) { view -> ogl_spec[at][i] = create_spec_menu (str, view -> anim -> last -> img -> show_atom[at][i], sensitive, mshow, G_CALLBACK(show_hide_atoms), & view -> colorp[at][i]); } else { create_spec_menu (str, view -> anim -> last -> img -> show_atom[at][i], sensitive, mshow, G_CALLBACK(show_hide_atoms), & view -> colorp[at][i]); } g_free (str); } return mshow; } /*! \fn GtkWidget * color_atoms_submenu (glwin * view, int id, int at) \brief create the 'Atom(s) -> Color(s)' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) \param at atoms (0) or clones (1) */ GtkWidget * color_atoms_submenu (glwin * view, int id, int at) { GtkWidget * menuc = gtk_menu_new (); project * this_proj = get_project_by_id (view -> proj); gchar * str; GtkWidget * sp; int i, j; if (at == 0) { j = 0; } else { j = this_proj -> nspec; } for (i=0; i< this_proj -> nspec; i++) { if (at == 0) { str = g_strdup_printf ("%s", this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s*", this_proj -> chemistry -> label[i]); } sp = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menuc, sp); gtk_menu_item_set_submenu ((GtkMenuItem *)sp, color_box(view, i+j, 0, 0)); } if (at == 1) widget_set_sensitive (menuc, view -> anim -> last -> img -> draw_clones); return menuc; } /*! \fn GtkWidget * label_atoms_submenu (glwin * view, int id, int at) \brief create the 'Atom(s) -> Label(s)' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) \param at atoms (0) or clones (1) */ GtkWidget * label_atoms_submenu (glwin * view, int id, int at) { GtkWidget * menul = gtk_menu_new (); GtkWidget * all = create_menu_item (FALSE, _("Show/Hide All")); g_signal_connect (G_OBJECT (all), "activate", G_CALLBACK(show_hide_all_atom_labels), & view -> colorp[at][0]); gtk_menu_shell_append ((GtkMenuShell *)menul, all); GtkWidget * l_show = create_menu_item (FALSE, _("Show")); gtk_menu_shell_append ((GtkMenuShell *)menul, l_show); GtkWidget * mshow = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)l_show, mshow); project * this_proj = get_project_by_id (view -> proj); gchar * str; gboolean sensitive = (! at) ? TRUE : view -> anim -> last -> img -> draw_clones; if (id == 0) { view -> ogl_lab[at] = g_malloc0(this_proj -> nspec*sizeof*view -> ogl_lab[at]); } int i; for (i=0; i< this_proj -> nspec; i++) { if (at == 0) { str = g_strdup_printf ("%s", this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s*", this_proj -> chemistry -> label[i]); } if (id == 0) { view -> ogl_lab[at][i] = create_spec_menu (str, view -> anim -> last -> img -> show_label[at][i], sensitive, mshow, G_CALLBACK(show_hide_labels), & view -> colorp[at][i]); } else { create_spec_menu (str, view -> anim -> last -> img -> show_label[at][i], sensitive, mshow, G_CALLBACK(show_hide_labels), & view -> colorp[at][i]); } g_free (str); } if (at == 0 || id == 1) { GtkWidget * l_sel = create_menu_item (FALSE, _("Select atom(s)")); gtk_menu_shell_append ((GtkMenuShell *)menul, l_sel); g_signal_connect (G_OBJECT (l_sel), "activate",G_CALLBACK(atom_properties), & view -> colorp[at][2]); if (id == 1) widget_set_sensitive (l_sel, sensitive); GtkWidget * l_adv = add_advanced_item (menul, G_CALLBACK(atom_properties), (gpointer)& view -> colorp[at][1], FALSE, 0, 0); if (id == 1) widget_set_sensitive (l_adv, sensitive); } else { view -> ogl_clones[2] = create_menu_item (FALSE, _("Select atom(s)")); gtk_menu_shell_append ((GtkMenuShell *)menul, view -> ogl_clones[2]); g_signal_connect (G_OBJECT (view -> ogl_clones[2]), "activate",G_CALLBACK(atom_properties), & view -> colorp[at][2]); widget_set_sensitive (view -> ogl_clones[2], sensitive); view -> ogl_clones[3] = add_advanced_item (menul, G_CALLBACK(atom_properties), (gpointer)& view -> colorp[at][1], FALSE, 0, 0); widget_set_sensitive (view -> ogl_clones[3], sensitive); } return menul; } /*! \fn GtkWidget * menu_atoms (glwin * view, int id, int at) \brief create the 'Atom(s)' submenu elements GTK3 \param view the target glwin \param id main app (0) or popup (1) \param at atoms (0) or clones (1) */ GtkWidget * menu_atoms (glwin * view, int id, int at) { int i; GtkWidget * widg; gchar * str; project * this_proj = get_project_by_id(view -> proj); GtkWidget * menua = gtk_menu_new (); gtk_menu_shell_append ((GtkMenuShell *)menua, menu_item_new_with_submenu (_("Show"), TRUE, show_atoms_submenu (view, id, at))); if (at == 1 && id == 0) { view -> ogl_clones[1] = color_atoms_submenu (view, id, at); gtk_menu_shell_append ((GtkMenuShell *)menua, menu_item_new_with_submenu (_("Color(s)"), ! (view -> anim -> last -> img -> color_map[0] != 0), view -> ogl_clones[1])); } else { gtk_menu_shell_append ((GtkMenuShell *)menua, menu_item_new_with_submenu (_("Color(s)"), ! (view -> anim -> last -> img -> color_map[0] != 0), color_atoms_submenu (view, id, at))); } gtk_menu_shell_append ((GtkMenuShell *)menua, menu_item_new_with_submenu (_("Label(s)"), TRUE, label_atoms_submenu (view, id, at))); i = view -> anim -> last -> img -> style; str = label_atpts (this_proj, view, 2*at); if (id == 0) { view -> ogl_atoms[4*at] = create_menu_item(FALSE, _("Radius(ii)")); gtk_menu_shell_append ((GtkMenuShell *)menua, view -> ogl_atoms[4*at]); view -> ogl_atoms[4*at+1] = create_atom_layout_widget (str, view -> ogl_atoms[4*at], & view -> colorp[at][0]); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (view -> ogl_atoms[4*at+1], 0); } } else if (i == SPHERES || i == BALL_AND_STICK) { widg = create_menu_item (FALSE, _("Radius(ii)")); gtk_menu_shell_append ((GtkMenuShell *)menua, widg); widg = create_atom_layout_widget (str, widg, & view -> colorp[at][0]); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (widg, 0); } } g_free (str); str = label_atpts (this_proj, view, 1+2*at); if (id == 0) { view -> ogl_atoms[4*at+2] = create_menu_item(FALSE, _("Dot Size(s)")); gtk_menu_shell_append ((GtkMenuShell *)menua, view -> ogl_atoms[4*at+2]); view -> ogl_atoms[4*at+3] = create_atom_layout_widget (str, view -> ogl_atoms[4*at+2], & view -> colorp[at][1]); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (view -> ogl_atoms[4*at+3], 0); } } else if (i == WIREFRAME || i == PUNT) { widg = create_menu_item (FALSE, _("Dot Size(s)")); gtk_menu_shell_append ((GtkMenuShell *)menua, widg); widg = create_atom_layout_widget (str, widg, & view -> colorp[at][1]); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (widg, 0); } } g_free (str); if (id == 0 && at == 1) { view -> ogl_clones[4] = add_advanced_item (menua, G_CALLBACK(atom_properties), (gpointer)& view -> colorp[at][0], FALSE, 0, 0); if (at == 1) { widget_set_sensitive (view -> ogl_clones[4], view -> anim -> last -> img -> draw_clones); } } else { GtkWidget * advanced = add_advanced_item (menua, G_CALLBACK(atom_properties), (gpointer)& view -> colorp[at][0], FALSE, 0, 0); if (at == 1) { widget_set_sensitive (advanced, view -> anim -> last -> img -> draw_clones); } } return menua; } #else extern G_MODULE_EXPORT void atom_properties (GSimpleAction * action, GVariant * state, gpointer data); /*! \fn G_MODULE_EXPORT void show_hide_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the show/hide signal GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) { tint * the_data = (tint *) data; int j = the_data -> b; int k = the_data -> c; int l, m; gboolean doit = TRUE; gboolean show; project * this_proj = get_project_by_id (the_data -> a); GVariant * state; if (action) { state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); const gchar * atom = g_action_get_name ((GAction *)action); int lgt = strlen (atom); gchar * name = g_strdup_printf ("%c%c", atom[lgt-2], atom[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, atom); g_action_group_activate_action ((GActionGroup *)this_proj -> modelgl -> action_group, (const gchar *)name, NULL); g_free (name); doit = FALSE; } } else { show = this_proj -> modelgl -> anim -> last -> img -> show_atom[j][k]; } if (doit) { for (l=0; l steps; l++) { for (m=0; m natomes; m++) { if (this_proj -> atoms[l][m].sp == k) this_proj -> atoms[l][m].show[j] = show; } } this_proj -> modelgl -> anim -> last -> img -> show_atom[j][k] = show; init_default_shaders (this_proj -> modelgl); if (action) { g_action_change_state (G_ACTION (action), g_variant_new_boolean (show)); g_variant_unref (state); } } } /*! \fn G_MODULE_EXPORT void show_hide_labels (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the show/hide label signal GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_labels (GSimpleAction * action, GVariant * parameter, gpointer data) { tint * the_data = (tint *) data; int j = the_data -> b; int k = the_data -> c; gboolean doit = TRUE; gboolean show; project * this_proj = get_project_by_id (the_data -> a); GVariant * state; if (action) { state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); const gchar * label = g_action_get_name ((GAction *)action); int lgt = strlen (label); gchar * name = g_strdup_printf ("%c%c", label[lgt-2], label[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, label); g_action_group_activate_action ((GActionGroup *)this_proj -> modelgl -> action_group, (const gchar *)name, NULL); g_free (name); doit = FALSE; } } else { show = ! this_proj -> modelgl -> anim -> last -> img -> show_label[j][k]; } if (doit) { int l, m; for (l=0; l steps; l++) { for (m=0; m natomes; m++) { if (this_proj -> atoms[l][m].sp == k) { if (this_proj -> atoms[l][m].label[j] != show) { this_proj -> atoms[l][m].label[j] = show; } } } } this_proj -> modelgl -> labelled = check_label_numbers (this_proj, j); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); if (action) { g_action_change_state (G_ACTION (action), g_variant_new_boolean (show)); g_variant_unref (state); } } } /*! \fn G_MODULE_EXPORT void show_hide_all_atom_labels (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the show/hide all labels GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_all_atom_labels (GSimpleAction * action, GVariant * parameter, gpointer data) { // Neither check, nor radio tint * id = (tint *) data; int i, j, k; project * this_proj = get_project_by_id(id -> a); i = id -> b; gboolean show = ! this_proj -> atoms[0][0].label[i]; for (j=0; j steps; j++) { for (k=0; k natomes; k++) { this_proj -> atoms[j][k].label[i] = show; } } this_proj -> modelgl -> labelled = check_label_numbers (this_proj, i); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); update_menu_bar (this_proj -> modelgl); } /*! \fn GMenu * label_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) \brief create the 'Atom(s) -> Label(s)' submenu elements \param view the target glwin \param popm main app (0) or popup (1) \param at atoms (0) or clones (1) \param sensitive menu item sensitivity */ GMenu * label_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, _("Show/Hide All"), (at) ? "clones-labels-all" : "atoms-labels-all", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_all_atom_labels), & view -> colorp[at][0], FALSE, FALSE, FALSE, sensitive); GMenu * smenu = g_menu_new (); project * this_proj = get_project_by_id (view -> proj); gchar * str; int i; for (i=0; i< this_proj -> nspec; i++) { if (at == 0) { str = g_strdup_printf ("%s", this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s*", this_proj -> chemistry -> label[i]); } append_opengl_item (view, smenu, str, (! at) ? "atom-label" : "clone-label", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_labels), & view -> colorp[at][i], TRUE, view -> anim -> last -> img -> show_label[at][i], FALSE, sensitive); } append_submenu (menu, _("Show"), smenu); append_opengl_item (view, menu, _("Select atom(s)"), (! at) ? "atom-select" : "clone-select", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(atom_properties), & view -> colorp[at][2], FALSE, FALSE, FALSE, sensitive); append_opengl_item (view, menu, _("Advanced"), (! at) ? "atom-lab-adv" : "clone-lab-adv", popm, i, NULL, IMG_STOCK, DPROPERTIES, FALSE, G_CALLBACK(atom_properties), & view -> colorp[at][1], FALSE, FALSE, FALSE, sensitive); return menu; } /*! \fn GMenu * color_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) \brief create the 'Atom(s) -> Color(s)' submenu elements \param view the target glwin \param popm main app (0) or popup (1) \param at atoms (0) or clones (1) \param sensitive menu item sensitivity */ GMenu * color_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) { GMenu * menu = g_menu_new (); GMenu * menuc; project * this_proj = get_project_by_id (view -> proj); gchar * stra, * strb; int i; for (i=0; i< this_proj -> nspec; i++) { if (at == 0) { stra = g_strdup_printf ("%s", this_proj -> chemistry -> label[i]); } else { stra = g_strdup_printf ("%s*", this_proj -> chemistry -> label[i]); } strb = g_strdup_printf ("%s", (! at) ? "atom-color" : "clone-color"); menuc = g_menu_new (); append_opengl_item (view, menuc, strb, strb, popm, i, NULL, IMG_NONE, NULL, TRUE, NULL, NULL, FALSE, FALSE, FALSE, FALSE); append_opengl_item (view, menuc, _("More Colors ..."), strb, popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_run_atom_color_window), & view -> colorp[0][i+at*this_proj -> nspec], FALSE, FALSE, FALSE, sensitive); append_submenu (menu, stra, menuc); g_free (stra); g_free (strb); g_object_unref (menuc); } return menu; } /*! \fn GMenu * show_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) \brief create the 'Atom(s) -> Show' submenu elements \param view the target glwin \param popm main app (0) or popup (1) \param at atoms (0) or clones (1) \param sensitive menu item sensitivity */ GMenu * show_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) { GMenu * menu = g_menu_new (); gchar * str; project * this_proj = get_project_by_id (view -> proj); int i; for (i=0; i nspec; i++) { if (at == 0) { str = g_strdup_printf ("%s", this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s*", this_proj -> chemistry -> label[i]); } append_opengl_item (view, menu, str, (! at) ? "show-atom" : "show-clone", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_atoms), & view -> colorp[at][i], TRUE, view -> anim -> last -> img -> show_atom[at][i], FALSE, sensitive); g_free (str); } return menu; } /*! \fn GMenu * menu_atoms (glwin * view, int popm, int at) \brief create the 'Atom(s)' submenu elements \param view the target glwin \param popm main app (0) or popup (1) \param at atoms (0) or clones (1) */ GMenu * menu_atoms (glwin * view, int popm, int at) { int i = view -> anim -> last -> img -> style; gboolean sensitive = (at) ? view -> anim -> last -> img -> draw_clones : TRUE; GMenu * menu = g_menu_new (); append_submenu (menu, _("Show"), show_atoms_submenu(view, popm, at, sensitive)); append_submenu (menu, _("Color(s)"), color_atoms_submenu (view, popm, at, sensitive)); append_submenu (menu, _("Label(s)"), label_atoms_submenu (view, popm, at, sensitive)); GMenuItem * item; if (i == SPHERES || i == BALL_AND_STICK) { item = g_menu_item_new (_("Radius(ii)"), (sensitive) ? NULL : "None"); g_menu_item_set_attribute (item, "custom", "s", (at) ? "clone-radii" : "atom-radii", NULL); g_menu_append_item (menu, item); } if (i == WIREFRAME || i == PUNT) { item = g_menu_item_new (_("Dot Size(s)"), (sensitive) ? NULL : "None"); g_menu_item_set_attribute (item, "custom", "s", (at) ? "clone-pts" : "atom-pts", NULL); g_menu_append_item (menu, item); } append_opengl_item (view, menu, _("Advanced"), (! at) ? "atom-advanced" : "clone-advanced", popm, popm, NULL, IMG_STOCK, DPROPERTIES, FALSE, G_CALLBACK(atom_properties), & view -> colorp[at][0], FALSE, FALSE, FALSE, sensitive); return menu; } #endif atomes_1.3.1/src/opengl/win/color_box.h0000664000175000017500000000423615212624223017521 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file color_box.h * @short Structure definitions for color management \n Function declarations for color management * @author Sébastien Le Roux */ /* * This header file: 'color_box.h' * * Contains: - Structure definitions for color management - Function declarations for color management */ typedef struct { double red; double green; double blue; } color; extern color colorp[64]; #ifdef GTK4 extern void color_box (glwin * view, int ideo, int spec, int geo); extern G_MODULE_EXPORT void to_run_back_color_window (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void to_run_box_color_window (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void to_run_atom_color_window (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern GtkWidget * color_box (glwin * view, int ideo, int spec, int geo); extern G_MODULE_EXPORT void window_color_coord (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void to_run_back_color_window (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void to_run_box_color_window (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void to_run_atom_color_window (GtkWidget * widg, gpointer data); #endif extern G_MODULE_EXPORT void window_color_total_poly (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_color_partial_poly (GtkWidget * widg, gpointer data); atomes_1.3.1/src/opengl/win/m_rep.c0000664000175000017500000006431615212624223016635 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_rep.c * @short Functions to create the 'View -> Representation' submenu * @author Sébastien Le Roux */ /* * This file: 'm_rep.c' * * Contains: * - The functions to create the 'View -> Representation' submenu * * List of functions: G_MODULE_EXPORT gboolean scroll_set_camera (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean on_rep_delete (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean on_rep_delete (GtkWidget * widg, GdkEvent * event, gpointer data); void update_labels (glwin * view); void camera_has_changed (gdouble value, gpointer data); G_MODULE_EXPORT void reset_view (GtkButton * but, gpointer data); G_MODULE_EXPORT void to_reset_view (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_reset_view (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_camera (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_camera_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void representation_advanced (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_rep (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void change_rep_radio (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_rep_advanced (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_center_molecule (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * menu_rep (glwin * view, int id); GMenu * menu_rep (glwin * view, int popm); GMenu * menu_reset (glwin * view, int popm); GMenu * menu_fullscreen (glwin * view, int popm); GMenu * menu_view (glwin * view, int popm); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #include "submenus.h" #include "preferences.h" extern void save_rotation_quaternion (glwin * view); extern void rotate_x_y (glwin * view, double angle_x, double angle_y); extern G_MODULE_EXPORT void set_camera_pos (GtkWidget * widg, gpointer data); #ifdef GTK4 extern G_MODULE_EXPORT void set_full_screen (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern G_MODULE_EXPORT void set_full_screen (GtkWidget * widg, gpointer data); #endif gchar * text_reps[OGL_REPS] = {i18n("Orthographic"), i18n("Perspective")}; /*! \fn void update_labels (glwin * view) \brief update labels (on representation data update) \param view the target glwin */ void update_labels (glwin * view) { int i; for (i=0; i<2; i++) if (view -> anim -> last -> img -> labels[i].scale) view -> create_shaders[LABEL] = TRUE; if (view -> anim -> last -> img -> labels[2].scale) view -> create_shaders[MAXIS] = TRUE; if (view -> anim -> last -> img -> labels[3].scale) view -> create_shaders[MEASU] = TRUE; } /*! \fn void camera_has_changed (gdouble value, gpointer data) \brief update camera data \param value the new value \param data the associated data pointer */ void camera_has_changed (gdouble value, gpointer data) { tint * cid = (tint *)data; glwin * view; rep_edition * the_rep; GLdouble * p_depth; GLdouble * c_angle; GLdouble * c_shift; GLdouble * gnear; GLdouble * zoom; if (preferences) { the_rep = pref_rep_win; GLdouble val = 10000.0; p_depth = & val; c_angle = tmp_rep -> c_angle; c_shift = tmp_rep -> c_shift; gnear = & tmp_rep -> gnear; zoom = & tmp_rep -> zoom; } else { view = get_project_by_id(cid -> a) -> modelgl; the_rep = view -> rep_win; p_depth = & view -> anim -> last -> img -> p_depth; c_angle = view -> anim -> last -> img -> c_angle; c_shift = view -> anim -> last -> img -> c_shift; gnear = & view -> anim -> last -> img -> gnear; zoom = & view -> anim -> last -> img -> zoom; } double v; switch (cid -> b) { case 0: * zoom = 2.0*(1.0-value); // gtk_spin_button_set_increments ((GtkSpinButton *)view -> rep_win -> camera_widg[0], view -> zoom_factor, view -> zoom_factor); break; case 1: // > camera depth if (value > * gnear) { * p_depth = value; } else { * p_depth = * gnear + 0.01; gtk_spin_button_set_value ((GtkSpinButton *)the_rep -> camera_widg[1], * p_depth); } break; case 2: // < perspective depth if (value < * p_depth) { * gnear = value; } else { * gnear = * p_depth - 0.01; gtk_spin_button_set_value ((GtkSpinButton *)the_rep -> camera_widg[2], * gnear); } break; default: if (cid -> b < 5) { if (value != c_angle[cid -> b - 3]) { if (preferences) { c_angle[cid -> b - 3] = value; } else { v = c_angle[cid -> b - 3] - value; save_rotation_quaternion (view); if (cid -> b == 3) { rotate_x_y (view, v, 0.0); } else { rotate_x_y (view, 0.0, v); } } gtk_spin_button_set_value ((GtkSpinButton *)the_rep -> camera_widg[cid -> b], value); } } else { c_shift[cid -> b - 5] = (value == 0.0) ? value : - value; } break; } if (! preferences) { update_labels (view); if (view -> anim -> last -> img -> xyz -> axis != NONE) view -> create_shaders[MAXIS] = TRUE; update (view); } } /*! \fn G_MODULE_EXPORT void reset_view (GtkButton * but, gpointer data) \brief reset view callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void reset_view (GtkButton * but, gpointer data) { int i; if (preferences) { tmp_rep -> proj = -1; tmp_rep -> zoom = ZOOM; tmp_rep -> c_angle[0] = - CAMERA_ANGLE_X; tmp_rep -> c_angle[1] = - CAMERA_ANGLE_Y; for (i=0; i<2; i++) tmp_rep -> c_shift[i] = 0.0; tmp_rep -> gnear = 6.0; if (pref_rep_win) { if (pref_rep_win -> camera_widg[2] && GTK_IS_WIDGET(pref_rep_win -> camera_widg[2])) { gtk_spin_button_set_value ((GtkSpinButton *)pref_rep_win -> camera_widg[2], tmp_rep -> gnear); } for (i=0; i<2; i++) { if (pref_rep_win -> camera_widg[i+3] && GTK_IS_WIDGET(pref_rep_win -> camera_widg[i+3])) { gtk_spin_button_set_value ((GtkSpinButton *)pref_rep_win -> camera_widg[i+3], tmp_rep -> c_angle[i]); } if (pref_rep_win -> camera_widg[i+5] && GTK_IS_WIDGET(pref_rep_win -> camera_widg[i+5])) { gtk_spin_button_set_value ((GtkSpinButton *)pref_rep_win -> camera_widg[i+5], tmp_rep -> c_shift[i]); } } if (pref_rep_win -> camera_widg[0] && GTK_IS_WIDGET(pref_rep_win -> camera_widg[0])) { gtk_spin_button_set_value ((GtkSpinButton *)pref_rep_win -> camera_widg[0], 1.0 - 0.5*tmp_rep -> zoom); } } } else { glwin * view = (glwin *)data; i = view -> mode; view -> mode = ANALYZE; init_camera (get_project_by_id(view -> proj)); view -> mode = i; update_labels (view); update (view); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_reset_view (GSimpleAction * action, GVariant * parameter, gpointer data) \brief reset view callback - GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_reset_view (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void to_reset_view (GtkWidget * widg, gpointer data) \brief reset view callback - GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_reset_view (GtkWidget * widg, gpointer data) #endif { reset_view (NULL, data); } /*! \fn G_MODULE_EXPORT gboolean scroll_set_camera (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief update camera data callback - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_camera (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { camera_has_changed (value, data); return FALSE; } /*! \fn G_MODULE_EXPORT void set_camera (GtkRange * range, gpointer data) \brief update camera data callback - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_camera (GtkRange * range, gpointer data) { camera_has_changed (gtk_range_get_value (range), data); } /*! \fn G_MODULE_EXPORT void set_camera_spin (GtkSpinButton * res, gpointer data) \brief update camera data callback - spin button \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_camera_spin (GtkSpinButton * res, gpointer data) { camera_has_changed (gtk_spin_button_get_value(res), data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean on_rep_delete (GtkWindow * widg, gpointer data) \brief representation window delete event - GTK4 \param widg \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_rep_delete (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_rep_delete (GtkWidget * widg, GdkEvent * event, gpointer data) \brief representation window delete event - GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_rep_delete (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { glwin * view = (glwin *)data; int i; for (i=0; i<7; i++) { if (view -> rep_win -> camera_widg[i]) view -> rep_win -> camera_widg[i] = destroy_this_widget(view -> rep_win -> camera_widg[i]); } destroy_this_widget ((GtkWidget *)widg); return TRUE; } /*! \fn G_MODULE_EXPORT void set_rep_combo (GtkComboBox * box, gpointer data) \brief change representation combo callback \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_rep_combo (GtkComboBox * box, gpointer data) { int rep = combo_get_active ((GtkWidget *)box); rep_edition * the_rep; glwin * view; if (preferences) { tmp_rep -> rep = rep; the_rep = pref_rep_win; } else { view = (glwin *)data; the_rep = view -> rep_win; view -> anim -> last -> img -> rep = rep; update (view); } int i; for (i=1; i<3; i++) { if (the_rep) { if (the_rep -> camera_widg[i] && GTK_IS_WIDGET(the_rep -> camera_widg[i])) { widget_set_sensitive (the_rep -> camera_widg[i], rep); } } } } /*! \fn G_MODULE_EXPORT void set_projection_combo (GtkComboBox * box, gpointer data) \brief change projection combo callback \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_projection_combo (GtkComboBox * box, gpointer data) { int proj = combo_get_active ((GtkWidget *)box); if (preferences) { tmp_rep -> proj = proj; set_camera_pos (NULL, & pref_pointer[proj]); } else { glwin * view = (glwin *)data; set_camera_pos (NULL, & view -> colorp[proj][0]); } } /*! \fn G_MODULE_EXPORT void representation_advanced (GtkWidget * widg, gpointer data) \brief open advanced representation dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void representation_advanced (GtkWidget * widg, gpointer data) { gchar * cam_opts[7]={_("Zoom"), _("Perspective depth"), _("Camera depth"), _("Camera pitch"), _("Camera heading"), _("Camera right/left"), _("Camera up/down")}; gchar * str; double smax[7] = {1.0, 100.0, 100.0, 180.0, 180.0, 100.0, 100.0}; double smin[7] = {-2.0, 0.0, 0.0, -180.0, -180.0, -100.0, -100.0}; double sdel[7] = {0.001, 0.01, 0.01, 0.1, 0.1, 0.01, 0.01}; int sdig[7] = {3, 2, 2, 1, 1, 2, 2}; int i; double max_depth; double v, v_max; glwin * view; rep_edition * the_rep; GtkWidget * hbox; GtkWidget * phbox, * pvbox; GtkWidget * vbox = create_vbox (BSEP); int rep; gboolean build_win = TRUE; if (preferences) { the_rep = pref_rep_win; the_rep -> win = create_vbox (BSEP); rep = tmp_rep -> rep; max_depth = 100.0; add_box_child_start (GTK_ORIENTATION_VERTICAL, the_rep -> win, vbox, FALSE, FALSE, 10); } else { view = (glwin *)data; max_depth = view -> anim -> last -> img -> m_depth; if (view -> rep_win) { if (view -> rep_win -> win && GTK_IS_WIDGET(view -> rep_win -> win)) { build_win = FALSE; show_the_widgets (view -> rep_win -> win); } } if (build_win) { view -> rep_win = g_malloc0(sizeof*view -> rep_win); the_rep = view -> rep_win; str = g_strdup_printf (_("%s - OpenGL scene set-up"), get_project_by_id(view -> proj)->name); the_rep -> win = create_win (str, view -> win, FALSE, FALSE); g_free (str); add_container_child (CONTAINER_WIN, the_rep -> win, vbox); rep = view -> anim -> last -> img -> rep; } } if (build_win) { adv_box (vbox, _("Projection"), 10, 120, 0.0); if (preferences) { phbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, phbox, FALSE, FALSE, 0); pvbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, phbox, pvbox, FALSE, FALSE, 30); } gchar * projection[6]={_("Right [1, 0, 0]"), _("Left [-1, 0, 0]"), _("Top [0, 1, 0]"), _("Bottom [0, -1, 0]"), _("Front [0, 0, 1]"), _("Back [0, 0, -1]")}; hbox = abox ((preferences) ? pvbox : vbox, _("Select"), 0); GtkWidget * combo = create_combo (); combo = create_combo (); for (i=0; i<6; i++) combo_text_append (combo, projection[i]); combo_set_active (combo, (preferences) ? tmp_rep -> proj : -1); gtk_widget_set_size_request (combo, 150, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 10); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_projection_combo), (preferences) ? NULL : view); adv_box (vbox, _("Representation"), 10, 120, 0.0); if (preferences) { phbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, phbox, FALSE, FALSE, 0); pvbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, phbox, pvbox, FALSE, FALSE, 30); } hbox = abox ((preferences) ? pvbox : vbox, _("Mode"), 0); combo = create_combo (); for (i=0; iOpenGL camera set-up"), 10, 120, 0.0); if (preferences) { phbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, phbox, FALSE, FALSE, 0); pvbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, phbox, pvbox, FALSE, FALSE, 30); } for (i=0; i<7; i++) { if (! preferences || i != 1) { hbox = abox ((preferences) ? pvbox : vbox, cam_opts[i], 0); switch (i) { case 0: v = 1.0-0.5*((preferences) ? tmp_rep -> zoom : view -> anim -> last -> img -> zoom); break; case 1: v = view -> anim -> last -> img -> p_depth; break; case 2: v = (preferences) ? tmp_rep -> gnear : view -> anim -> last -> img -> gnear; break; default: if (i < 5) { v = (preferences) ? tmp_rep -> c_angle[i-3] : view -> anim -> last -> img -> c_angle[i-3]; } else { if (preferences) { v = (tmp_rep -> c_shift[i-5] == 0.0) ? 0.0 : - tmp_rep -> c_shift[i-5]; } else { v = (view -> anim -> last -> img -> c_shift[i-5] == 0.0) ? 0.0 : - view -> anim -> last -> img -> c_shift[i-5]; } } break; } if (the_rep -> camera_widg[i]) the_rep -> camera_widg[i] = destroy_this_widget (the_rep -> camera_widg[i]); v_max = (i == 1) ? max_depth : (preferences && i == 2) ? 1000.0 : smax[i]; the_rep -> camera_widg[i] = spin_button (G_CALLBACK(set_camera_spin), v, smin[i], v_max, sdel[i], sdig[i], 150, (preferences) ? & pref_pointer[i] : & view -> colorp[i][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, the_rep -> camera_widg[i], FALSE, FALSE, 10); if (i > 2 || i == 0) { str = g_strdup_printf ("∈ [%.1f, %.1f]", smin[i], smax[i]); } else if (i == 1) { str = g_strdup_printf (_("∈ [C. depth, %.1f]"), max_depth); } else { str = (preferences) ? g_strdup_printf (_("∈ [%.1f, P. depth*]"), smin[i]) : g_strdup_printf (_("∈ [%.1f, P. depth]"), smin[i]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 25, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); if ((i == 1 || i == 2) && rep == ORTHOGRAPHIC) widget_set_sensitive (the_rep -> camera_widg[i], 0); } } hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_button((preferences) ? _("Reset") : _("Reset View"), IMG_NONE, NULL, 100, 25, GTK_RELIEF_NORMAL, G_CALLBACK(reset_view), view), FALSE, FALSE, 200); if (! preferences) { add_gtk_close_event (the_rep -> win, G_CALLBACK(on_rep_delete), view); show_the_widgets (the_rep -> win); } else { append_comments (the_rep -> win, "*", _("Perspective depth evaluated from the model")); } } } /*! \fn G_MODULE_EXPORT void set_rep (GtkWidget * widg, gpointer data) \brief change representation callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_rep (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); int i, j; i = this_proj -> modelgl -> anim -> last -> img -> rep; j = the_data -> b; #ifdef GTK4 if (i != j) #else if (i != j && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) #endif { this_proj -> modelgl -> anim -> last -> img -> rep = NONE; #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_rep[i], FALSE); if (widg != this_proj -> modelgl -> ogl_rep[j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_rep[j], TRUE); } #endif this_proj -> modelgl -> anim -> last -> img -> rep = j; for (i=1; i<3; i++) { if (this_proj -> modelgl -> rep_win) { if (this_proj -> modelgl -> rep_win -> camera_widg[i] && GTK_IS_WIDGET(this_proj -> modelgl -> rep_win -> camera_widg[i])) { widget_set_sensitive (this_proj -> modelgl -> rep_win -> camera_widg[i], j); } } } this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; update (this_proj -> modelgl); } #ifdef GTK3 // GTK3 Menu Action To Check else if (i == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_rep[j], TRUE); } #endif } #ifdef GTK3 /*! \fn GtkWidget * menu_rep (glwin * view, int id) \brief create the 'View' submenu - GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_rep (glwin * view, int id) { int i, j; GtkWidget * menur = gtk_menu_new (); j = view -> anim -> last -> img -> rep; if (id == 0) { for (i=0; i ogl_rep[i] = gtk3_menu_item (menur, _(text_reps[i]), IMG_NONE, NULL, G_CALLBACK(set_rep), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (i == j) ? TRUE : FALSE); } } else { for (i=0; i colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (i == j) ? TRUE : FALSE); } } add_advanced_item (menur, G_CALLBACK(representation_advanced), (gpointer)view, FALSE, 0, 0); return menur; } #else /*! \fn G_MODULE_EXPORT void change_rep_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change representation radio items callback - GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void change_rep_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { glwin * view = (glwin *)data; const gchar * rep = g_variant_get_string (parameter, NULL); int lgt = strlen (rep); gchar * name = g_strdup_printf ("%c%c", rep[lgt-2], rep[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, rep); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-rep", g_variant_new_string((const gchar *)name)); g_free (name); } else { const gchar * rep = g_variant_get_string (parameter, NULL); gchar * rep_name = NULL; int i; for (i=0; i colorp[i][0]); g_free (rep_name); rep_name = NULL; break; } g_free (rep_name); rep_name = NULL; } g_action_change_state (G_ACTION (action), parameter); } } /*! \fn G_MODULE_EXPORT void to_rep_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change representation callback - GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_rep_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) { representation_advanced (NULL, data); } /*! \fn GMenu * menu_rep (glwin * view, int popm) \brief create 'View -> Representation' submenu items - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_rep (glwin * view, int popm) { GMenu * menu = g_menu_new (); int i, j; i = view -> anim -> last -> img -> rep; for (j=0; jF", IMG_STOCK, (gpointer)FULLSCREEN, FALSE, G_CALLBACK(set_full_screen), (gpointer)view, FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * menu_view (glwin * view, int popm) \brief create the 'View' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_view (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Representation"), menu_rep(view, popm)); append_submenu (menu, _("Projection"), menu_proj(view, popm)); append_submenu (menu, _("Background"), menu_back(view, popm)); if (get_project_by_id(view -> proj) -> nspec) g_menu_append_item (menu, menu_box_axis (view, popm, 1)); if (! popm) { g_menu_append_section (menu, NULL, (GMenuModel*)menu_reset(view, popm)); g_menu_append_section (menu, NULL, (GMenuModel*)menu_fullscreen(view, popm)); } return menu; } #endif atomes_1.3.1/src/opengl/win/m_bonds.c0000664000175000017500000003171015212624223017144 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_bonds.c * @short Functions to create the 'Model -> Bond(s)' submenu * @author Sébastien Le Roux */ /* * This file: 'm_bonds.c' * * Contains: * - The functions to create the 'Model -> Bond(s)' submenu * * List of functions: gchar * label_cutrab (project * this_proj, glwin * view, int id); GtkWidget * create_bond_menu_item (gchar * str, GtkWidget * menu); GtkWidget * create_bond_layout_widget (gchar * str, GtkWidget * widg, int va, tint * data); GtkWidget * menu_bonds (glwin * view, int id, int at); GMenu * create_bond_layout_section (glwin * view, gchar * str, gchar * key, int popm, int id, GCallback handler, gpointer data, gboolean sensitive); GMenu * menu_bonds (glwin * view, int popm, int at); */ #include "global.h" #include "glview.h" #include "glwindow.h" #ifdef GTK4 extern G_MODULE_EXPORT void window_bonds (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void window_cuts (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void set_bond_parameter (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern G_MODULE_EXPORT void window_bonds (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_cuts (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void set_bond_parameter (GtkWidget * widg, gpointer data); #endif /*! \fn gchar * label_cutrab (project * this_proj, glwin * view, int id) \brief prepare the text of a menu item in the 'Model -> Bond(s)' submenu \param this_proj the target project \param view the target glwin \param id the type of label to prepare */ gchar * label_cutrab (project * this_proj, glwin * view, int id) { int i, j, k, m; gchar * mot; gchar * tmp; gchar * str; chemical_data * chem = this_proj -> chemistry; k = 0; m = this_proj -> nspec; for (i=0; i < m; i++) { if (id == 0) { str = g_strdup_printf ("%s-%s [ %f Å ]", chem -> label[i], chem -> label[i], chem -> cutoffs[i][i]); } else { if (id == 1) { str = g_strdup_printf ("%s-%s [ %f Å ]", chem -> label[i], chem -> label[i], view -> anim -> last -> img -> bondrad[i][i]); } else if (id == 2) { str = g_strdup_printf ("%s-%s [ %f Å ]", chem -> label[i], chem -> label[i], view -> anim -> last -> img -> bondrad[i+m][i+m]); } else if (id == 3) { str = g_strdup_printf ("%s-%s [ %f pts ]", chem -> label[i], chem -> label[i], view -> anim -> last -> img -> linerad[i][i]); } else { str = g_strdup_printf ("%s-%s [ %f pts ]", chem -> label[i], chem -> label[i], view -> anim -> last -> img -> linerad[i+m][i+m]); } } if (i == 0) { mot = g_strdup_printf ("%s", str); } else { tmp = g_strdup_printf ("%s", mot); g_free (mot); mot = g_strdup_printf ("%s\n%s", tmp, str); g_free (tmp); } g_free (str); k+=1; } for (i=0; i < m-1; i++) { for (j=i+1; j < m; j++) { if (id == 0) { str = g_strdup_printf ("%s-%s [ %f Å ]", chem -> label[i], chem -> label[j], chem -> cutoffs[i][j]); } else { if (id == 1) { str = g_strdup_printf ("%s-%s [ %f Å ]", chem -> label[i], chem -> label[j], view -> anim -> last -> img -> bondrad[i][j]); } else if (id == 2) { str = g_strdup_printf ("%s-%s [ %f Å ]", chem -> label[i], chem -> label[j], view -> anim -> last -> img -> bondrad[i+m][j+m]); } else if (id == 3) { str = g_strdup_printf ("%s-%s [ %f pts ]", chem -> label[i], chem -> label[j], view -> anim -> last -> img -> linerad[i][j]); } else { str = g_strdup_printf ("%s-%s [ %f pts ]", chem -> label[i], chem -> label[j], view -> anim -> last -> img -> linerad[i+m][j+m]); } } if (k == 0) { mot = g_strdup_printf ("%s", str); } else { tmp = g_strdup_printf ("%s", mot); g_free (mot); mot = g_strdup_printf ("%s\n%s", tmp, str); g_free (tmp); } g_free (str); k += 1; } } if (id == 0) { str = g_strdup_printf (_("Total [ %f Å ]"), chem -> grtotcutoff); tmp = g_strdup_printf ("%s", mot); g_free (mot); mot = g_strdup_printf ("%s\n%s", tmp, str); g_free (tmp); g_free (str); } return mot; } #ifdef GTK3 /*! \fn GtkWidget * create_bond_menu_item (gchar * str, GtkWidget * menu) \brief create a menu item, and attach it to menu \param str the label of the menu item \param menu the GtkWidget menu to attach the menu item to */ GtkWidget * create_bond_menu_item (gchar * str, GtkWidget * menu) { GtkWidget * layout = create_menu_item (FALSE, str); gtk_menu_shell_append ((GtkMenuShell *)menu, layout); return layout; } /*! \fn GtkWidget * create_bond_layout_widget (gchar * str, GtkWidget * widg, int va, tint * data) \brief create a 'Model -> Bond(s)' menu item GTK3 \param str the menu item name \param widg the menu GtkWidget to attach the menu item to \param va the type of bond item to set the appropriate action \param data the associated data pointer */ GtkWidget * create_bond_layout_widget (gchar * str, GtkWidget * widg, int va, tint * data) { GtkWidget * menu = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menu); GtkWidget * layout = create_menu_item (FALSE, str); gtk_menu_shell_append ((GtkMenuShell *)menu, layout); switch (va) { case 0: g_signal_connect (G_OBJECT (layout), "activate", G_CALLBACK(window_bonds), data); break; case 1: g_signal_connect (G_OBJECT (layout), "activate", G_CALLBACK(set_bond_parameter), data); break; default: g_signal_connect (G_OBJECT (layout), "activate", G_CALLBACK(window_cuts), data); break; } return layout; } /*! \fn GtkWidget * menu_bonds (glwin * view, int id, int at) \brief create the 'Bond(s)' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) \param at atoms (0) or clones (1) */ GtkWidget * menu_bonds (glwin * view, int id, int at) { GtkWidget * widg; gchar * str; int i; GtkWidget * menub = gtk_menu_new (); i = view -> anim -> last -> img -> style; if (id == 0) { if (at == 0) { str = g_strdup_printf (_("Cylinder(s) [ %f Å ]"), view -> anim -> last -> img -> radall[0]); } else { str = g_strdup_printf (_("Cylinder(s) [ %f Å ]"), view -> anim -> last -> img -> radall[1]); } view -> ogl_bonds[8*at] = create_bond_menu_item (_("Radius"), menub); view -> ogl_bonds[1+8*at] = create_bond_layout_widget (str, view -> ogl_bonds[8*at], 0, & view -> colorp[2+at][0]); g_free (str); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (view -> ogl_bonds[1+8*at], 0); } } else if (i == CYLINDERS) { if (at == 0) { str = g_strdup_printf (_("Cylinder(s) [ %f Å ]"), view -> anim -> last -> img -> radall[0]); } else { str = g_strdup_printf (_("Cylinder(s) [ %f Å ]"), view -> anim -> last -> img -> radall[1]); } widg = create_bond_menu_item (_("Cylinder Radius(ii)"), menub); widg = create_bond_layout_widget (str, widg, 0, & view -> colorp[2+at][0]); g_free (str); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (widg, 0); } } if (id == 0) { str = label_cutrab (get_project_by_id(view -> proj), view, 1+at); view -> ogl_bonds[2+8*at] = create_bond_menu_item (_("Radius(ii)"), menub); view -> ogl_bonds[3+8*at] = create_bond_layout_widget (str, view -> ogl_bonds[2+8*at], 1, & view -> colorp[at][0]); g_free (str); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (view -> ogl_bonds[3+8*at], 0); } } else if (i == BALL_AND_STICK) { str = label_cutrab (get_project_by_id(view -> proj), view, 1+at); widg = create_bond_menu_item (_("Radius(ii)"), menub); widg = create_bond_layout_widget (str, widg, 1, & view -> colorp[at][0]); g_free (str); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (widg, 0); } } if (id == 0) { str = label_cutrab (get_project_by_id(view -> proj), view, 3+at); view -> ogl_bonds[4+8*at] = create_bond_menu_item (_("Line Width(s)"), menub); view -> ogl_bonds[5+8*at] = create_bond_layout_widget (str, view -> ogl_bonds[4+8*at], 1, & view -> colorp[at][1]); g_free (str); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (view -> ogl_bonds[5+8*at], 0); } } else if (i == WIREFRAME) { str = label_cutrab (get_project_by_id(view -> proj), view, 3+at); widg = create_bond_menu_item (_("Line Width(s)"), menub);; widg = create_bond_layout_widget (str, widg, 1, & view -> colorp[at][1]); g_free (str); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (widg, 0); } } if (at == 0) { str = label_cutrab (get_project_by_id(view -> proj), view, 0); if (id == 0) { view -> ogl_bonds[6] = create_bond_menu_item (_("Cutoffs"), menub); view -> ogl_bonds[7] = create_bond_layout_widget (str, view -> ogl_bonds[6], 2, & view -> colorp[at][0]); } else { widg = create_bond_menu_item (_("Cutoffs"), menub); widg = create_bond_layout_widget (str, widg, 2, & view -> colorp[at][0]); } g_free (str); } return menub; } #else /*! \fn GMenu * create_bond_layout_section (glwin * view, gchar * str, gchar * key, int popm, int id, GCallback handler, gpointer data, gboolean sensitive) \brief create a bond menu item GTK4 \param view the target glwin \param str menu item name \param key menu item action key \param popm main app (0) or popup (1) \param id menu item action id \param handler the associated callback \param data the associated data pointer \param sensitive menu item sensitivity */ GMenu * create_bond_layout_section (glwin * view, gchar * str, gchar * key, int popm, int id, GCallback handler, gpointer data, gboolean sensitive) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, str, key, popm, id, NULL, IMG_NONE, NULL, FALSE, handler, data, FALSE, FALSE, FALSE, sensitive); return menu; } /*! \fn GMenu * menu_bonds (glwin * view, int popm, int at) \brief create the 'Bond(s)' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param at atoms (0) or clones (1) */ GMenu * menu_bonds (glwin * view, int popm, int at) { gchar * str; gboolean sensitive = (at == 1 && ! view -> anim -> last -> img -> draw_clones) ? FALSE : TRUE; GMenu * menu = g_menu_new (); switch (view -> anim -> last -> img -> style) { case CYLINDERS: if (at == 0) { str = g_strdup_printf (_("Cylinder(s) [ %f Å ]"), view -> anim -> last -> img -> radall[0]); } else { str = g_strdup_printf (_("Cylinder(s) [ %f Å ]"), view -> anim -> last -> img -> radall[1]); } append_submenu (menu, _("Cylinder Radius(ii)"), create_bond_layout_section (view, str, (at) ? "clone-cyl-rad" : "atom-cyl-rad", popm, at, G_CALLBACK(window_bonds), & view -> colorp[2+at][0], sensitive)); g_free (str); break; case BALL_AND_STICK: str = label_cutrab (get_project_by_id(view -> proj), view, 1+at); append_submenu (menu, _("Radius(ii)"), create_bond_layout_section (view, str, (at) ? "clone-rad" : "atom-rad", popm, at+1, G_CALLBACK(set_bond_parameter), & view -> colorp[at][0], sensitive)); g_free (str); break; case WIREFRAME: str = label_cutrab (get_project_by_id(view -> proj), view, 3+at); append_submenu (menu, _("Line Width(s)"), create_bond_layout_section (view, str, (at) ? "clone-line" : "atom-line", popm, at+2, G_CALLBACK(set_bond_parameter), & view -> colorp[at][1], sensitive)); g_free (str); break; } if (! at) { str = label_cutrab (get_project_by_id(view -> proj), view, 0); append_submenu (menu, _("Cutoffs"), create_bond_layout_section (view, str, "bond-cutoffs", popm, at+3, G_CALLBACK(window_cuts), & view -> colorp[at][0], sensitive)); g_free (str); } return menu; } #endif atomes_1.3.1/src/opengl/win/glwindow.h0000664000175000017500000000343015212624223017360 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file glwindow.h * @short Function declarations for the creation of the OpenGL window * @author Sébastien Le Roux */ /* * This header file: 'glwindow.h' * * Contains: - Function declarations for the creation of the OpenGL window */ extern void set_this_style (glwin * view, int style); extern void update_menus (glwin * view); extern void prep_model (int p); extern void append_opengl_item (glwin * view, GMenu * menu, const gchar * name, gchar * key, int mpop, int item_id, gchar * accel, int image_format, gpointer icon, gboolean custom, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, gboolean sensitive); #ifdef GTK4 extern G_MODULE_EXPORT void to_reset_view (GSimpleAction * action, GVariant * parameter, gpointer data); extern void activate_glwin_action (gchar * action_string, gchar * action_name, glwin * view); #else extern G_MODULE_EXPORT void to_reset_view (GtkWidget * widg, gpointer data); #endif atomes_1.3.1/src/opengl/win/initcoord.h0000664000175000017500000000316515212624223017525 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file initcoord.h * @short Function declarations to handle the atomic coordination data * @author Sébastien Le Roux */ /* * This header file: 'initcoord.h' * * Contains: - Function declarations to handle the atomic coordination data */ #ifdef GTK3 void prep_all_coord_menus (glwin * view); void prep_all_ring_menus (glwin * view); #endif // GTK3 void set_advanced_bonding_menus (glwin * view); void partial_geo_out_ (int * sp, int * id, int * ngsp, int coord[* ngsp]); void allocate_partial_geo_ (int * sp, int * ngsp); void init_menu_coordinations_ (int * id, int * sp, int * ngsp, int coordt[* ngsp]); void init_menu_fragmol_ (int * id); void init_menurings_ (int * coo, int * ids, int * ngsp, int coordt[* ngsp], int * init); void init_opengl_coords (int id, int nt, int init); void send_coord_opengl_ (int * id, int * num, int * cmin, int * cmax, int * nt, int coord[* num]); atomes_1.3.1/src/opengl/win/w_measures.c0000664000175000017500000007275215212624223017710 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_measures.c * @short Functions to create the measurement(s) window * @author Sébastien Le Roux */ /* * This file: 'w_measures.c' * * Contains: * - The functions to create the measurement(s) window * * List of functions: int get_selection_type (glwin * view); G_MODULE_EXPORT gboolean measure_tree_selection_event (GtkWidget * widget, GdkEventButton * event, gpointer data); G_MODULE_EXPORT gboolean close_measure_event (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean close_measure_event (GtkWidget * widg, GdkEvent * event, gpointer data); gchar * create_measure_label (glwin * view, int sid); void measure_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void measure_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void dihedral_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void measure_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void fill_bond_model_row (int p, int a, int b, GtkTreeStore * store); void fill_angle_model_row (int p, int a, int b, int c, GtkTreeStore * store); void fill_dihedral_model_row (int p, int a, int b, int c, int d, GtkTreeStore * store); void update_selection_tree (glwin * view, int sid, int mid); void update_label_selection (glwin * view, int sid); void measure_tree_button_event (GtkWidget * widget, double event_x, double event_y, guint event_button, gpointer data); G_MODULE_EXPORT void measure_tree_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void close_ml (GtkButton * but, gpointer data); G_MODULE_EXPORT void measure_labels (GtkButton * but, gpointer data); G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data); GtkWidget * create_selection_tree (glwin * view, int sid, int mid); GtkWidget * measurment_tab (glwin * view, int sid, int mid); */ #include "global.h" #include "glview.h" extern void bonds_loop (glwin * view, int id, int pi, GtkTreeStore * store); extern void angles_loop (glwin * view, int id, int pi, GtkTreeStore * store); extern void dihedrals_loop (glwin * view, int id, int pi, GtkTreeStore * store); extern int num_bonds (int i); extern int num_angles (int i); extern int num_dihedrals (int i); int bond_id; int angle_id; int dihedral_id; /*! \fn int get_selection_type (glwin * view) \brief get selection type \param view the target glwin */ int get_selection_type (glwin * view) { if (view -> mode == EDITION && view -> selection_mode == NSELECTION-1) { return 1; } else if (view -> atom_win) { return 1; } else { return 0; } } /*! \fn void fill_bond_model_row (int p, int a, int b, GtkTreeStore * store) \brief fill bond tree store row \param p the project id \param a 1st atom id \param b 2nd atom id \param store the GtkTreeStore to fill */ void fill_bond_model_row (int p, int a, int b, GtkTreeStore * store) { GtkTreeIter bond_level; gchar * str_a, * str_b, * str_c; project * this_proj = get_project_by_id(p); atom * at, * bt; gboolean pbc = this_proj -> cell.pbc; distance dist; int s = this_proj -> modelgl -> anim -> last -> img -> step; at = & this_proj -> atoms[s][a]; bt = & this_proj -> atoms[s][b]; bond_id ++; dist = distance_3d (& this_proj -> cell, (this_proj -> cell.npt) ? s : 0, at, bt); str_a = g_strdup_printf("%s%d", this_proj -> chemistry -> label[at -> sp], a+1); str_b = g_strdup_printf("%s%d", this_proj -> chemistry -> label[bt -> sp], b+1); str_c = g_strdup_printf("%.3lf", dist.length); if (pbc) { gtk_tree_store_append (store, & bond_level, NULL); gtk_tree_store_set (store, & bond_level, 0, bond_id, 1, str_a, 2, str_b, 3, str_c, 4, dist.pbc, -1); } else { gtk_tree_store_append (store, & bond_level, NULL); gtk_tree_store_set (store, & bond_level, 0, bond_id, 1, str_a, 2, str_b, 3, str_c, -1); } g_free (str_a); g_free (str_b); g_free (str_c); } /*! \fn void fill_angle_model_row (int p, int a, int b, int c, GtkTreeStore * store) \brief fill angle tree store row \param p the project id \param a 1st atom id \param b 2nd atom id \param c 3rd atom id \param store the GtkTreeStore to fill */ void fill_angle_model_row (int p, int a, int b, int c, GtkTreeStore * store) { GtkTreeIter angle_level; gchar * str_a, * str_b, * str_c, * str_d; project * this_proj = get_project_by_id(p); atom * at, * bt, * ct; gboolean pbc = this_proj -> cell.pbc; angle theta; int s = this_proj -> modelgl -> anim -> last -> img -> step; at = & this_proj -> atoms[s][a]; bt = & this_proj -> atoms[s][b]; ct = & this_proj -> atoms[s][c]; angle_id ++; theta = angle_3d (& this_proj -> cell, (this_proj -> cell.npt) ? s : 0, at, bt, ct); str_a = g_strdup_printf("%s%d", this_proj -> chemistry -> label[at -> sp], a+1); str_b = g_strdup_printf("%s%d", this_proj -> chemistry -> label[bt -> sp], b+1); str_c = g_strdup_printf("%s%d", this_proj -> chemistry -> label[ct -> sp], c+1); str_d = g_strdup_printf("%.2lf", theta.angle); if (pbc) { gtk_tree_store_append (store, & angle_level, NULL); gtk_tree_store_set (store, & angle_level, 0, angle_id, 1, str_a, 2, str_b, 3, str_c, 4, str_d, 5, theta.pbc, -1); } else { gtk_tree_store_append (store, & angle_level, NULL); gtk_tree_store_set (store, & angle_level, 0, angle_id, 1, str_a, 2, str_b, 3, str_c, 4, str_d, -1); } g_free (str_a); g_free (str_b); g_free (str_c); g_free (str_d); } /*! \fn void fill_dihedral_model_row (int p, int a, int b, int c, int d, GtkTreeStore * store) \brief fill dihedral tree store row \param p the project id \param a 1st atom id \param b 2nd atom id \param c 3rd atom id \param d 4th atom id \param store the GtkTreeStore to fill */ void fill_dihedral_model_row (int p, int a, int b, int c, int d, GtkTreeStore * store) { GtkTreeIter dihedral_level; gchar * str_a, * str_b, * str_c, * str_d, * str_e; project * this_proj = get_project_by_id(p); atom * at, * bt, * ct, * dt; gboolean pbc = this_proj -> cell.pbc; angle phi; int s = this_proj -> modelgl -> anim -> last -> img -> step; at = & this_proj -> atoms[s][a]; bt = & this_proj -> atoms[s][b]; ct = & this_proj -> atoms[s][c]; dt = & this_proj -> atoms[s][d]; dihedral_id ++; phi = dihedral_3d (& this_proj -> cell, (this_proj -> cell.npt) ? s : 0, at, bt, ct, dt); str_a = g_strdup_printf("%s%d", this_proj -> chemistry -> label[at -> sp], a+1); str_b = g_strdup_printf("%s%d", this_proj -> chemistry -> label[bt -> sp], b+1); str_c = g_strdup_printf("%s%d", this_proj -> chemistry -> label[ct -> sp], c+1); str_d = g_strdup_printf("%s%d", this_proj -> chemistry -> label[dt -> sp], d+1); str_e = g_strdup_printf("%.2lf", phi.angle); if (pbc) { gtk_tree_store_append (store, & dihedral_level, NULL); gtk_tree_store_set (store, & dihedral_level, 0, dihedral_id, 1, str_a, 2, str_b, 3, str_c, 4, str_d, 5, str_e, 6, phi.pbc, -1); } else { gtk_tree_store_append (store, & dihedral_level, NULL); gtk_tree_store_set (store, & dihedral_level, 0, dihedral_id, 1, str_a, 2, str_b, 3, str_c, 4, str_d, 5, str_e, -1); } g_free (str_a); g_free (str_b); g_free (str_c); g_free (str_d); g_free (str_e); } extern ColRGBA init_color (int id, int numid); /*! \fn void measure_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer in the measures tree store \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void measure_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i; tint * dat = (tint *)data; gtk_tree_model_get (mod, iter, dat -> b, & i, -1); gtk_cell_renderer_set_visible (renderer, i); } /*! \fn void measure_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the measures tree store \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void measure_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; j = 0; tint * dat = (tint *) data; gboolean docolor = FALSE; gtk_tree_model_get (mod, iter, 0, & i, -1); project * this_proj = get_project_by_id(dat -> a); image * img = this_proj -> modelgl -> anim -> last -> img; int pi = get_selection_type (this_proj -> modelgl); if (img -> selected[pi] -> selected) { if ((dat -> c == 2 && img -> selected[pi] -> selected < MAX_IN_SELECTION-10) || (dat -> c < 2 && img -> selected[pi] -> selected < MAX_IN_SELECTION)) { switch (dat -> c) { case 0: j = num_bonds (img -> selected[pi] -> selected); if (img -> selected[pi] -> selected_bonds[i]) docolor = TRUE; break; case 1: j = num_angles (img -> selected[pi] -> selected); if (img -> selected[pi] -> selected_angles[i]) docolor = TRUE; break; case 2: j = num_dihedrals (img -> selected[pi] -> selected); if (img -> selected[pi] -> selected_dihedrals[i]) docolor = TRUE; break; } } } set_renderer_color (docolor, renderer, init_color (i, j)); } /*! \fn void dihedral_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void dihedral_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { tint * dat = (tint *)data; dat -> c = 2; measure_set_color (col, renderer, mod, iter, data); set_renderer_markup (mod, iter, renderer, dat -> b); } /*! \fn void measure_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief Measure window set color and Pango markup in tree view \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void measure_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { tint * dat = (tint *)data; measure_set_color (col, renderer, mod, iter, dat); set_renderer_markup (mod, iter, renderer, dat -> b); } GtkWidget * create_selection_tree (glwin * view, int sid, int mid); /*! \fn void update_selection_tree (glwin * view, int sid, int mid) \brief update measurements tree view \param view the target glwin \param sid the type of selection (0 = analysis mode, 1 = edition mode) \param mid the type of measurement (0 = bonds, 1 = angles, 2 = dihedrals) */ void update_selection_tree (glwin * view, int sid, int mid) { GtkWidget * cont = gtk_widget_get_parent (view -> measure_win -> selection_tree[mid]); view -> measure_win -> selection_tree[mid] = destroy_this_widget (view -> measure_win -> selection_tree[mid]); view -> measure_win -> selection_tree[mid] = create_selection_tree (view, sid, mid); add_container_child (CONTAINER_SCR, cont, view -> measure_win -> selection_tree[mid]); show_the_widgets (cont); } /*! \fn void measure_tree_button_event (GtkWidget * widget, double event_x, double event_y, guint event_button, gpointer data) \brief measure tree button event \param widget the GtkWidget sending the signal \param event_x x position \param event_y y position \param event_button event buttton \param data the associated data pointer */ void measure_tree_button_event (GtkWidget * widget, double event_x, double event_y, guint event_button, gpointer data) { if (event_button == 1) { tint * dat = (tint *)data; glwin * view = get_project_by_id(dat -> a) -> modelgl; int pi = get_selection_type (view); GtkTreeModel * measure_model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); GtkTreePath * path; GtkTreeViewColumn * column; int i, j; #ifdef GTK4 int e_x, e_y; gtk_tree_view_convert_widget_to_bin_window_coords (GTK_TREE_VIEW(widget), event_x, event_y, & e_x, & e_y); if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(widget), e_x, e_y, & path, & column, & i, & j)) #else if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(widget), event_x, event_y, & path, & column, & i, & j)) #endif { GtkTreeIter row; if (gtk_tree_model_get_iter (measure_model, & row, path)) { gtk_tree_model_get (measure_model, & row, 0, & j, -1); // select bonds, angles or dihedrals: switch (dat -> c) { case 0: view -> anim -> last -> img -> selected[pi] -> selected_bonds[j] = ! view -> anim -> last -> img -> selected[pi] -> selected_bonds[j]; break; case 1: view -> anim -> last -> img -> selected[pi] -> selected_angles[j] = ! view -> anim -> last -> img -> selected[pi] -> selected_angles[j]; break; case 2: view -> anim -> last -> img -> selected[pi] -> selected_dihedrals[j] = ! view -> anim -> last -> img -> selected[pi] -> selected_dihedrals[j]; break; } } } view -> create_shaders[MEASU] = TRUE; update (view); } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean measure_tree_selection_event (GtkWidget * widget, GdkEventButton * event, gpointer data) \brief measures tree view button press callback GTK3 \param widget the GtkWidget sending the signal \param event the GtkEventButton triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean measure_tree_selection_event (GtkWidget * widget, GdkEventButton * event, gpointer data) { if (event -> type == GDK_BUTTON_PRESS) { GdkEventButton * bevent = (GdkEventButton*)event; measure_tree_button_event (widget, bevent -> x, bevent -> y, bevent -> button, data); } return FALSE; } #else /*! \fn G_MODULE_EXPORT void measure_tree_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief measures tree view button press callback GTK4 \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void measure_tree_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { measure_tree_button_event (gtk_event_controller_get_widget ((GtkEventController*)gesture), x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), data); } #endif /*! \fn GtkWidget * create_selection_tree (glwin * view, int sid, int mid) \brief create the measurements selection tree \param view the target glwin \param sid the type of selection (0 = analysis mode, 1 = edition mode) \param mid the type of measurement (0 = bonds, 1 = angles, 2 = dihedrals) */ GtkWidget * create_selection_tree (glwin * view, int sid, int mid) { int i, j; GtkTreeViewColumn * sel_col[7]; GtkCellRenderer * sel_cell[7]; GtkTreeStore * sel_model; gchar * ctitle[3][7]={{i18n("Id."), i18n("Atom 1"), i18n("Atom 2"), i18n("Distance [Å]"), i18n("Using PBC"), "NULL", "NULL"}, {i18n("Id."), i18n("Atom 1"), i18n("Atom 2"), i18n("Atom 3"), "θ [°]", i18n("Using PBC"), "NULL"}, {i18n("Id."), i18n("Atom 1"), i18n("Atom 2"), i18n("Atom 3"), i18n("Atom 4"), "ϕ [°]", i18n("Using PBC")}}; gchar * ctype[3][7]={{"text", "text", "text", "text", "active", "text", "text"}, {"text", "text", "text", "text", "text", "active", "text"}, {"text", "text", "text", "text", "text", "text", "active"}}; int tree_dim[3]={4, 5, 6}; GType col_type[3][7]= {{G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING}, {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING}, {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN}}; if (get_project_by_id(view -> proj) -> cell.pbc) { sel_model = gtk_tree_store_newv (tree_dim[mid]+1, col_type[mid]); j = 1; } else { sel_model = gtk_tree_store_newv (tree_dim[mid], col_type[mid]); j = 0; } GtkWidget * selection_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(sel_model)); for (i=0; i<4+j+mid; i++) { if ((mid == 0 && i < 4) || (mid == 1 && i < 5) || (mid == 2 && i < 6)) { sel_cell[i] = gtk_cell_renderer_text_new(); sel_col[i] = gtk_tree_view_column_new_with_attributes (_(ctitle[mid][i]), sel_cell[i], ctype[mid][i], i, NULL); if (i == 0) gtk_tree_view_column_set_visible (sel_col[i], FALSE); } else if ((mid == 0 && i == 4) || (mid == 1 && i == 5) || (mid == 2 && i == 6)) { sel_cell[i] = gtk_cell_renderer_toggle_new (); sel_col[i] = gtk_tree_view_column_new_with_attributes (_(ctitle[mid][i]), sel_cell[i], ctype[mid][i], i, NULL); } gtk_tree_view_column_set_alignment (sel_col[i], 0.5); gtk_tree_view_append_column (GTK_TREE_VIEW(selection_tree), sel_col[i]); if (i > 0 && i < 4+mid) { if (mid < 2) { gtk_tree_view_column_set_cell_data_func (sel_col[i], sel_cell[i], measure_set_color_and_markup, & view -> colorp[i][mid], NULL); } else { gtk_tree_view_column_set_cell_data_func (sel_col[i], sel_cell[i], dihedral_set_color_and_markup, & view -> colorp[i][0], NULL); } } else if (i > 0) { gtk_tree_view_column_set_cell_data_func (sel_col[i], sel_cell[i], measure_set_visible, & view -> colorp[i][0], NULL); } } image * img = view -> anim -> last -> img; if (img -> selected[sid] -> selected < MAX_IN_SELECTION) { if ( (mid == 0 && img -> selected[sid] -> selected > 1) || (mid == 1 && img -> selected[sid] -> selected > 2) || (mid == 2 && img -> selected[sid] -> selected > 3 && img -> selected[sid] -> selected < MAX_IN_SELECTION-10)) { if (mid == 0) { bond_id = -1; bonds_loop (view, 2, sid, GTK_TREE_STORE(sel_model)); #ifdef GTK4 add_widget_gesture_and_key_action (selection_tree, "bond-tree-pressed", G_CALLBACK(measure_tree_button_pressed), & view -> colorp[0][mid], NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #else g_signal_connect (G_OBJECT(selection_tree), "button_press_event", G_CALLBACK(measure_tree_selection_event), & view -> colorp[0][mid]); #endif } else if (mid == 1) { angle_id = -1; angles_loop (view, 2, sid, GTK_TREE_STORE(sel_model)); #ifdef GTK4 add_widget_gesture_and_key_action (selection_tree, "angle-tree-pressed", G_CALLBACK(measure_tree_button_pressed), & view -> colorp[0][mid], NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #else g_signal_connect (G_OBJECT(selection_tree), "button_press_event", G_CALLBACK(measure_tree_selection_event), & view -> colorp[0][mid]); #endif } else if (mid == 2) { dihedral_id = -1; dihedrals_loop (view, 2, sid, GTK_TREE_STORE(sel_model)); /*#ifdef GTK4 add_widget_gesture_and_key_action (selection_tree, "dihedral-tree-pressed", G_CALLBACK(measure_tree_button_pressed), & view -> colorp[0][mid], NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #else g_signal_connect (G_OBJECT(selection_tree), "button_press_event", G_CALLBACK(measure_tree_selection_event), & view -> colorp[0][mid]); #endif*/ } } } GtkTreeSelection * selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(selection_tree)); gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE); gtk_tree_view_expand_all (GTK_TREE_VIEW(selection_tree)); return selection_tree; } /*! \fn GtkWidget * measurment_tab (glwin * view, int sid, mid) \brief create measurement tab \param view the target glwin \param sid the type of selection (0 = analysis mode, 1 = edition mode) \param mid the type of measurement (0 = bonds, 1 = angles, 2 = dihedrals) */ GtkWidget * measurment_tab (glwin * view, int sid, int mid) { GtkWidget * scrollsets = create_scroll (NULL, 350+50*mid, 350, GTK_SHADOW_NONE); view -> measure_win -> selection_tree[mid] = create_selection_tree (view, sid, mid); add_container_child (CONTAINER_SCR, scrollsets, view -> measure_win -> selection_tree[mid]); return scrollsets; } /*! \fn gchar * create_measure_label (glwin * view, int sid) \brief create the text information for the number of atom(s) in selection \param view the target glwin \param sid the type of selection (0 = analysis mode, 1 = edition mode) */ gchar * create_measure_label (glwin * view, int sid) { gchar * str; image * img = view -> anim -> last -> img; if (img -> selected[sid] -> selected < MAX_IN_SELECTION) { str = g_strdup_printf (_("\tAtom(s) in selection* :\t%d"), img -> selected[sid] -> selected); } else { str = g_strdup_printf (_("\tSorry too many [%d] atoms in selection*"), img -> selected[sid] -> selected); } return str; } /*! \fn void update_label_selection (glwin * view, int sid) \brief update the text information for the number of atoms/measures in selection \param view the target glwin \param sid the type of selection (0 = analysis mode, 1 = edition mode) */ void update_label_selection (glwin * view, int sid) { gtk_label_set_text (GTK_LABEL(view -> measure_win -> label), create_measure_label(view, sid)); gtk_label_set_use_markup (GTK_LABEL(view -> measure_win -> label), TRUE); } extern GtkWidget * labels_tab (glwin * view, int id); /*! \fn G_MODULE_EXPORT void close_ml (GtkButton * but, gpointer data) \brief measurements style edition window close button \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void close_ml (GtkButton * but, gpointer data) { destroy_this_widget (GTK_WIDGET(data)); } /*! \fn G_MODULE_EXPORT void measure_labels (GtkButton * but, gpointer data) \brief measurements style edition window \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void measure_labels (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; gchar * str = g_strdup_printf (_("%s - measures - style"), get_project_by_id(view -> proj) -> name); GtkWidget * win = create_win (str, view -> measure_win -> win, TRUE, FALSE); //gtk_widget_set_size_request (win, -1, -1480); g_free (str); GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, win, vbox); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, labels_tab (view, (is_atom_win_active(view) || (view -> mode == EDITION && view -> selection_mode == NSELECTION-1)) ? 4 : 3), FALSE, FALSE, 0); GtkWidget * hbox = create_hbox (0); GtkWidget * close_but = create_button (_("Close"), IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(close_ml), win); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, close_but, FALSE, TRUE, 150); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 20); add_gtk_close_event (win, G_CALLBACK(hide_this_window), NULL); show_the_widgets (win); gtk_window_set_resizable (GTK_WINDOW(win), FALSE); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean close_measure_event (GtkWindow * widg, gpointer data) \brief measurements window close event callback GTK4 \param data the associated data pointer \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_measure_event (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean close_measure_event (GtkWidget * widg, GdkEvent * event, gpointer data) \brief measurements window close event callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_measure_event (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { glwin * view = (glwin *) data; view -> measure_win -> win = destroy_this_widget (view -> measure_win -> win); int i; for (i=0; i<3; i++) { view -> measure_win -> selection_tree[i] = NULL; } g_free (view -> measure_win); view -> measure_win = NULL; return FALSE; } /*! \fn G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data) \brief create the measurements window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data) { glwin * view = (glwin *) data; if (view -> measure_win == NULL) { view -> measure_win = g_malloc0(sizeof*view -> measure_win); gchar * str = g_strdup_printf (_("%s - measures"), get_project_by_id(view -> proj) -> name); int pi = get_selection_type (view); view -> measure_win -> win = create_win (str, view -> win, FALSE, FALSE); gtk_widget_set_size_request (view -> measure_win -> win, 450, 500); g_free (str); GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, view -> measure_win -> win, vbox); GtkWidget * notebook = gtk_notebook_new (); view -> measure_win -> label = markup_label(create_measure_label(view, pi), -1, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, view -> measure_win -> label, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, notebook, FALSE, FALSE, 0); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), measurment_tab (view, pi, 0), gtk_label_new (_("Distances"))); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), measurment_tab (view, pi, 1), gtk_label_new (_("Angles"))); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), measurment_tab (view, pi, 2), gtk_label_new (_("Dihedrals"))); str = g_strdup_printf (_("You can select up to %d atoms for both inter-atomic distance(s) and angle(s),"), MAX_IN_SELECTION-1); append_comments (vbox, "*", str); g_free (str); str = g_strdup_printf (_("and up to %d atoms for dihedral angle(s) measurement(s)"), MAX_IN_SELECTION-11); append_comments (vbox, " ", str); g_free (str); GtkWidget * hbox = create_hbox (0); GtkWidget * but = create_button (_("Font and style"), IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(measure_labels), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, TRUE, 150); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); add_gtk_close_event (view -> measure_win -> win, G_CALLBACK(close_measure_event), view); show_the_widgets (view -> measure_win -> win); } else { show_the_widgets (view -> measure_win -> win); } } atomes_1.3.1/src/opengl/win/w_search.c0000664000175000017500000044512315212624223017325 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_search.c * @short Functions to create the object search widgets, for: - The atom(s) / clone(s) advanced window \n - The model edition window (move, remove, replace, insert, random move) \n - The crystal builder window * @author Sébastien Le Roux */ /* * This file: 'w_search.c' * * Contains: * - The functions to create the object search widgets, for: - The atom(s) / clone(s) advanced window - The model edition window (move, remove, replace, insert, random move) - The crystal builder window * * List of functions: int get_asearch_num_objects (atom_search * asearch); int get_asearch_object (atom_search * asearch); int get_asearch_filter (atom_search * asearch); int get_selected_object_id (gboolean visible, int p, gchar * str, atom_search * asearch); int get_todo_size (atom_search * asearch); gboolean get_asearch_is_object (atom_search * asearch); gboolean fill_for_action (atom_search * asearch, int i, int j, project * this_proj); gboolean append (atom_search * asearch, project * this_proj, int i, int j); gboolean update_this_search (atom_search * asearch); gboolean remove_from_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data); gboolean atom_is_in_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data); gboolean update_search_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data); gchar * adjust_picked (gchar * picked, atomic_object * object, gboolean init); gchar * get_node_name (int node, atom_search * asearch, project * this_proj); void check_tree_for_this_search (project * this_proj, atom_search * asearch); void check_all_trees (project * this_proj); void motion_to_zero (atom_search * asearch); void adjust_object_to_move (project * this_proj, atom_search * asearch, int mv, int id); void append_to_model (GtkTreeIter * atom_level, atom_search * asearch, gboolean is_object, int h, int i, project * this_proj); void fill_atom_model (atom_search * asearch, project * this_proj); void update_search_tree (atom_search * asearch); void clear_fields (atom_search * asearch); void re_populate_tree_search (atom_search * asearch); void adjust_search_param (atom_search * asearch, project * this_proj, int a, int s, int c, gboolean status); void adjust_this_tree_branch (atom_search * asearch, project * this_proj, int oid, int sid, GtkTreeIter iter); void adjust_this_tree_leaf (atom_search * asearch, project * this_proj, int oid, int aid, int new_status, GtkTreeIter iter); void adjust_data_model_to_replace (project * this_proj, atom_search * asearch, int sid, int vid); void search_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void get_coord_iter_and_edit (gchar * path_string, gpointer data, GtkWidget * widg); void allocate_todo (atom_search * asearch, int tsize); void clean_todo (atom_search * asearch); void clean_picked_and_labelled (atom_search * asearch); void add_random_column (atom_search * asearch); void prep_search_box (GtkWidget * vbox, GtkWidget * lab, GtkWidget * combo); G_MODULE_EXPORT void set_atom (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void remove_atom (GtkButton * but, gpointer data); G_MODULE_EXPORT void add_atom (GtkButton * but, gpointer data); G_MODULE_EXPORT void set_id (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void select_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void changed_action_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data); G_MODULE_EXPORT void set_occupancy (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_i_coord (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_max_msd (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_max_action (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_max_msd_for_all (GtkEntry * res, gpointer data); G_MODULE_EXPORT void to_edit_coords (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data); G_MODULE_EXPORT void markup_action_renderer (GtkCellRendererCombo * cell, GtkCellEditable * editable, gchar * path_string, gpointer data); G_MODULE_EXPORT void select_all_atoms (GtkTreeViewColumn * col, gpointer data); G_MODULE_EXPORT void move_up_down (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data); G_MODULE_EXPORT void set_spec_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_object_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_search_mode (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_search_digit (GtkEntry * res, gpointer data); GtkWidget * create_atoms_tree (atom_search * asearch, project * this_proj, int nats); GtkWidget * prepare_box_too_much (atom_search * asearch); GtkWidget * selection_tab (atom_search * asearch, int nats); GtkTreeModel * replace_combo_tree (gboolean insert, int proj); atomic_object * get_atomic_object_by_origin (atomic_object * first, int oid, int aid); */ #include "atom_edit.h" extern int check_label_numbers (project * this_proj, int types); extern int selected_aspec; extern int select_from_library (gboolean visible, project * this_proj, atom_search * asearch); extern atom_selection * preserve_ogl_selection (glwin * view); extern void create_slab_lists (project * this_proj); extern int get_to_be_selected (glwin * view); extern void restore_ogl_selection (glwin * view); /*! \fn int get_asearch_num_objects (atom_search * asearch) \brief the number of type of object(s) in this atom search \param asearch the target atom search */ int get_asearch_num_objects (atom_search * asearch) { int filter = get_asearch_filter (asearch); switch (filter) { case 0: return get_project_by_id (asearch -> proj) -> nspec; break; case 1: return get_project_by_id (asearch -> proj) -> coord -> cmax+1; break; default: return get_project_by_id (asearch -> proj) -> coord -> totcoord[filter -1]; break; } } /*! \fn int get_asearch_object (atom_search * asearch) \brief get the number of object(s) in this atom search \param asearch the target atom search */ int get_asearch_object (atom_search * asearch) { if (asearch -> object < 0) return 0; if (asearch -> mode) return asearch -> object; if (get_project_by_id(asearch -> proj) -> natomes >= GTK_LIMIT) { return (asearch -> object > 1) ? 2 : asearch -> object; } else { return asearch -> object; } } /*! \fn int get_asearch_filter (atom_search * asearch) \brief get asearch filter \param asearch the target atom search */ int get_asearch_filter (atom_search * asearch) { if (asearch -> object < 0 || asearch -> filter < 0) return 0; if (asearch -> mode) { return asearch -> object + asearch -> filter; } else if (get_project_by_id(asearch -> proj) -> natomes >= GTK_LIMIT) { return (asearch -> object > 1) ? 1 + asearch -> filter : asearch -> filter; } else { return asearch -> object + asearch -> filter; } } /*! \fn gboolean get_asearch_is_object (atom_search * asearch) \brief get asearch object \param asearch the target atom search */ gboolean get_asearch_is_object (atom_search * asearch) { if (asearch -> passivating) { return (asearch -> object > 1) ? TRUE : FALSE; } else { return (asearch -> object) ? TRUE : FALSE; } } /*! \fn void check_tree_for_this_search (project * this_proj, atom_search * asearch) \brief check, and adjust if needed, the tree construction for this atom search \param this_proj the target project \param asearch the target atom search */ void check_tree_for_this_search (project * this_proj, atom_search * asearch) { int j, k, l, m, n, o, p; double u, v; gchar * str; GtkTreeIter iter; GtkTreeIter child; GtkTreeModel * atom_model; gboolean dothis, dothat, is_first; int obj = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); int is_clone = (asearch -> action == 1) ? 1 : 0; int status = (asearch -> action < 2) ? 2 : asearch -> status; int val = get_asearch_num_objects (asearch); int step = this_proj -> modelgl -> anim -> last -> img -> step; atom_model = GTK_TREE_MODEL(asearch -> atom_model); if (gtk_tree_model_get_iter_first (atom_model, & iter)) { dothis = TRUE; if (! filter && status == 2) { while (dothis) { gtk_tree_model_get (atom_model, & iter, IDCOL, & j, -1); j = abs(j) -1; if (j > -1) { gtk_tree_store_set (asearch -> atom_model, & iter, TOLAB, this_proj -> modelgl -> anim -> last -> img -> show_label[is_clone][j], -1); if (gtk_tree_model_iter_children (atom_model, & child, & iter)) { dothat = is_first = TRUE; u = v = 0.0; l = 0; m = 1; while (dothat) { gtk_tree_model_get (atom_model, & child, IDCOL, & k, TOPIC, & l, -1); if (k > 0) { k --; if (asearch -> action == RANMOVE) { v = this_proj -> modelgl -> atom_win -> msd[k]; if (! is_first && u != v) v = 0.0; is_first = FALSE; u = v; } m = (l && m) ? 1 : 0; gtk_tree_store_set (asearch -> atom_model, & child, TOLAB, this_proj -> atoms[step][k].label[is_clone], -1); if (asearch -> action == RANMOVE) { if (this_proj -> modelgl -> atom_win -> msd[k] > 0.0) { str = g_strdup_printf (_("MSDmax= %f"), this_proj -> modelgl -> atom_win -> msd[k]); } else { str = g_strdup_printf (_("Set MSDmax for ...")); } gtk_tree_store_set (asearch -> atom_model, & child, TOPIC+2, str, -1); g_free (str); } is_first = FALSE; } dothat = gtk_tree_model_iter_next (atom_model, & child); } asearch -> pick[j] = m; if (asearch -> action == RANMOVE) { if (v > 0.0) { str = g_strdup_printf (_("For all: MSDmax= %f"), v); } else { str = g_strdup_printf (_("Set MSDmax for all ...")); } gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC+2, str, -1); g_free (str); } } gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC, asearch -> pick[j], -1); } dothis = gtk_tree_model_iter_next (atom_model, & iter); } } else { while (dothis) { gtk_tree_model_get (atom_model, & iter, IDCOL, & j, -1); j = abs(j) - 1; if (j > -1 && j < val) { k = l = 0; switch (filter) { case 0: for (m=0; m natomes; m++) { n = this_proj -> atoms[step][m].sp; if (n == j && (this_proj -> atoms[step][m].pick[is_clone] == status || status == 2)) { k ++; l += (this_proj -> atoms[step][m].label[is_clone]) ? 1 : 0; } } break; case 1: for (m=0; m natomes; m++) { n = this_proj -> atoms[step][m].sp; o = this_proj -> atoms[step][m].coord[filter-1]; if (this_proj -> atoms[step][m].numv == j && (this_proj -> atoms[step][m].pick[is_clone] == status || status == 2)) { k ++; l += (this_proj -> atoms[step][m].label[is_clone]) ? 1 : 0; } } break; default: for (m=0; m natomes; m++) { n = this_proj -> atoms[step][m].sp; o = this_proj -> atoms[step][m].coord[filter-1]; if (filter == 2) { for (p=0; p coord -> ntg[1][p]; } } if (o == j && (this_proj -> atoms[step][m].pick[is_clone] == status || status == 2)) { k ++; l += (this_proj -> atoms[step][m].label[is_clone]) ? 1 : 0; } } break; } gtk_tree_store_set (asearch -> atom_model, & iter, TOLAB, (k == l && k != 0) ? 1 : 0, -1); if (gtk_tree_model_iter_children (atom_model, & child, & iter)) { dothat = TRUE; u = v = 0.0; l = n = 0; m = o = 1; while (dothat) { gtk_tree_model_get (atom_model, & child, IDCOL, & k, TOPIC, & l, -1); if (asearch -> action == RANMOVE && obj) { gtk_tree_model_get (atom_model, & child, TOPIC+1, & n, -1); } if (k > 0) { k --; if (asearch -> action == RANMOVE) { v = this_proj -> modelgl -> atom_win -> msd[k]; if (! is_first && u != v) v = 0.0; is_first = FALSE; u = v; } m = (m && l) ? 1 : 0; o = (o && n) ? 1 : 0; gtk_tree_store_set (asearch -> atom_model, & child, TOLAB, this_proj -> atoms[step][k].label[is_clone], -1); if (asearch -> action == RANMOVE) { if (this_proj -> modelgl -> atom_win -> msd[k] > 0.0) { str = g_strdup_printf (_("MSDmax= %f"), this_proj -> modelgl -> atom_win -> msd[k]); } else { str = g_strdup_printf (_("Set MSDmax for ...")); } gtk_tree_store_set (asearch -> atom_model, & child, TOPIC+2, str, -1); g_free (str); } } dothat = gtk_tree_model_iter_next (atom_model, & child); } if (asearch -> action == RANMOVE) { asearch -> pick[j] = (m && o) ? 3 : (o) ? 2 : (m) ? 1 : 0; } else { asearch -> pick[j] = m; } gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC, m, -1); if (asearch -> action == RANMOVE && v != 0) { if (v > 0.0) { if (filter > 2) { str = g_strdup_printf (_("For all: MSDmax= %f"), v); } else { str = g_strdup_printf (_("MSDmax= %f"), v); } } else { if (obj && filter > 2) { str = g_strdup_printf (_("Set MSDmax for ...")); } else { str = g_strdup_printf (_("Set MSDmax for all ...")); } } gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC+2, str, -1); g_free (str); if (obj) gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC+1, o, -1); } } } dothis = gtk_tree_model_iter_next (atom_model, & iter); } } } } /*! \fn void check_all_trees (project * this_proj) \brief check all search trees \param this_proj the target project */ void check_all_trees (project * this_proj) { int i; for (i=0; i<7; i++) { if (i != 5 && this_proj -> modelgl -> search_widg[i] != NULL) { if (this_proj -> modelgl -> search_widg[i] -> atom_model && this_proj -> modelgl -> search_widg[i] -> todo_size < GTK_LIMIT) { check_tree_for_this_search (this_proj, this_proj -> modelgl -> search_widg[i]); } } } } /*! \fn atomic_object * get_atomic_object_by_origin (atomic_object * first, int oid, int aid) \brief get insert object from a list by id \param first the first insert object of the list \param oid object origin id (type of origin) \param aid object id */ atomic_object * get_atomic_object_by_origin (atomic_object * first, int oid, int aid) { atomic_object * object = first; while (object) { if (! aid && object -> origin == oid) return object; if (aid && object -> id == aid-1) return object; object = object -> next; } return NULL; } /*! \fn void motion_to_zero (atom_search * asearch) \brief reset motion to 0.0 \param asearch the target atom search */ void motion_to_zero (atom_search * asearch) { project * this_proj = get_project_by_id (asearch -> proj); int i, j; for (i=0; i<2; i++) { for (j=0; j<6; j++) { this_proj -> modelgl -> atom_win -> old_param[asearch -> status][i][j] = this_proj -> modelgl -> atom_win -> new_param[asearch -> status][i][j] = 0.0; } } for (i=0; i<2; i++) { for (j=0; j<6; j++) { update_range_and_entry (this_proj, asearch -> status, i, j); } } } /*! \fn void adjust_object_to_move (project * this_proj, atom_search * asearch, int mv, int id) \brief adjust atom search parameters for motion cases \param this_proj the target project \param asearch the target atom search \param mv motion id (0 = standard, 1 = random) \param id object id */ void adjust_object_to_move (project * this_proj, atom_search * asearch, int mv, int id) { gboolean adjust_mv = FALSE; int filter = get_asearch_filter (asearch); if (this_proj -> modelgl -> atom_win -> to_be_moved[mv]) { atomic_object * object = this_proj -> modelgl -> atom_win -> to_be_moved[mv]; gboolean check_it = TRUE; gboolean remove_it = FALSE; gboolean add_it = FALSE; while (check_it) { if (object -> id == id) { if (! asearch -> todo[id]) remove_it = TRUE; check_it = FALSE; } else { if (object -> next) { object = object -> next; } else { check_it = FALSE; add_it = TRUE; } } } if (remove_it) { adjust_mv = TRUE; if (object -> ibonds) g_free (object -> ibonds); if (object -> baryc) g_free (object -> baryc); if (object -> at_list) g_free (object -> at_list); if (object -> coord) g_free (object -> coord); if (object -> bcid) g_free (object -> bcid); object -> atoms = object -> bonds = 0; if (object -> next && object -> prev) { object -> prev -> next = object -> next; object -> next -> prev = object -> prev; g_free (object); } else if (! object -> prev && object -> next) { object = object -> next; object -> prev = NULL; g_free (this_proj -> modelgl -> atom_win -> to_be_moved[mv]); this_proj -> modelgl -> atom_win -> to_be_moved[mv] = object; } else if (object -> prev) { object -> prev -> next = NULL; g_free (object); } else { g_free (this_proj -> modelgl -> atom_win -> to_be_moved[mv]); this_proj -> modelgl -> atom_win -> to_be_moved[mv] = NULL; } } else if (add_it) { adjust_mv = TRUE; object_motion = TRUE; if (! filter) { object -> next = create_object_from_species (this_proj, id, NULL); } else if (filter < 3) { object -> next = create_object_from_atom_coordination (this_proj, filter-1, id, NULL); } else { object -> next = create_object_from_frag_mol (this_proj, filter-1, id, NULL); } object -> next -> id = id; object_motion = FALSE; this_proj -> modelgl -> atom_win -> rebuilt[mv] = FALSE; object -> next -> prev = object; } } else { adjust_mv = TRUE; object_motion = TRUE; if (! filter) { this_proj -> modelgl -> atom_win -> to_be_moved[mv] = create_object_from_species (this_proj, id, NULL); } else if (filter < 3) { this_proj -> modelgl -> atom_win -> to_be_moved[mv] = create_object_from_atom_coordination (this_proj, filter-1, id, NULL); } else { this_proj -> modelgl -> atom_win -> to_be_moved[mv] = create_object_from_frag_mol (this_proj, filter-1, id, NULL); } this_proj -> modelgl -> atom_win -> to_be_moved[mv] -> id = id; this_proj -> modelgl -> atom_win -> rebuilt[mv] = FALSE; object_motion = FALSE; } if (adjust_mv && ! mv && this_proj -> modelgl -> atom_win) motion_to_zero (asearch); } /*! \fn void append_to_model (GtkTreeIter * atom_level, atom_search * asearch, gboolean is_object, int h, int i, project * this_proj) \brief append data to the search tree store \param atom_level the iter to insert the data to \param asearch the target atom search \param is_object the atom search object (atom or group of atoms) \param h the object type id \param i the object id \param this_proj the target project */ void append_to_model (GtkTreeIter * atom_level, atom_search * asearch, gboolean is_object, int h, int i, project * this_proj) { int j, k, l; int step = this_proj -> modelgl -> anim -> last -> img -> step; gchar * str; j = this_proj -> atoms[0][i].sp; str = g_strdup_printf ("%s%d", this_proj -> chemistry -> label[j], i+1); int aobj = get_asearch_object (asearch); if (aobj == 2) str = g_strdup_printf (_("%s + neighbor(s)"), str); gboolean is_clone = (asearch -> pointer[0].c == 1) ? 1 : 0; gtk_tree_store_set (asearch -> atom_model, atom_level, IDCOL, i+1, 1, " ", 2, str, TOLAB, this_proj -> atoms[step][i].label[is_clone], -1); g_free (str); atomic_object * object; switch (asearch -> action) { case 0: gtk_tree_store_set (asearch -> atom_model, atom_level, TOPIC, this_proj -> atoms[step][i].pick[0], -1); break; case 1: gtk_tree_store_set (asearch -> atom_model, atom_level, TOPIC, this_proj -> atoms[step][i].pick[0], -1); break; case RANMOVE: if (asearch -> set_for_all > 0) { asearch -> todo[i] = asearch -> set_for_all; if (aobj) { adjust_object_to_move (this_proj, asearch, 1, i); } } k = (asearch -> todo[i] == 1 || asearch -> todo[i] == 3) ? 1 : 0; l = (asearch -> todo[i] == 2 || asearch -> todo[i] == 3) ? 1 : 0; if (this_proj -> modelgl -> atom_win -> msd[i] > 0.0) { str = g_strdup_printf (_("MSDmax= %f"), this_proj -> modelgl -> atom_win -> msd[i]); } else { str = g_strdup_printf (_("Set MSDmax for ...")); } gtk_tree_store_set (asearch -> atom_model, atom_level, TOPIC, k, TOPIC+2, str, -1); if (is_object) { gtk_tree_store_set (asearch -> atom_model, atom_level, TOPIC+1, l, -1); } g_free (str); break; default: if (asearch -> set_for_all > 0) { asearch -> todo[i] = asearch -> set_for_all; if (asearch -> action == DISPL) { if (aobj) { adjust_object_to_move (this_proj, asearch, 0, i); } } } gtk_tree_store_set (asearch -> atom_model, atom_level, TOPIC, asearch -> todo[i], -1); if (asearch -> action == REPLACE) { object = get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[0], i, 0); gtk_tree_store_set (asearch -> atom_model, atom_level, TOPIC+1, (object) ? object -> name : _("Select ..."), TOPIC+3, h, -1); } break; } } /*! \fn gboolean fill_for_action (atom_search * asearch, int i, int j, project * this_proj) \brief test if the atom 'i' of species 'j' matches requirement(s) to be in the tree store \param asearch the target atom search \param i the atom id \param j the chemical species id (or type id) \param this_proj the target project */ gboolean fill_for_action (atom_search * asearch, int i, int j, project * this_proj) { gboolean append = FALSE; if (asearch -> spec == 0 || asearch -> spec == j+1) { if (asearch -> action > 1) { if (asearch -> status == 2) { append = TRUE; } else { append = (this_proj -> atoms[0][i].pick[0] == asearch -> status) ? TRUE : FALSE; } } else { append = TRUE; } } return append; } /*! \fn gboolean append (atom_search * asearch, project * this_proj, int i, int j) \brief test if the atom 'i' of species 'j' must be added to the tree store or not \param asearch the target atom search \param this_proj the target project \param i the atom id \param j the chemical species id */ gboolean append (atom_search * asearch, project * this_proj, int i, int j) { int k; gchar * str_a, * str_b; k = this_proj -> modelgl -> anim -> last -> img -> step; gboolean append = FALSE; if (fill_for_action (asearch, i, j, this_proj)) { if (asearch -> search_digit == -1) { if (asearch -> pointer[0].c == 1) { append = this_proj -> atoms[k][i].cloned; } else { append = TRUE; } } else { str_a = g_strdup_printf ("%d", i+1); str_b = g_strdup_printf ("%d", asearch -> search_digit); if (strlen (str_b) > strlen (str_a)) { append = FALSE; } else { k = 0; append = TRUE; while (k < strlen (str_b)) { if (str_a[k] != str_b[k]) { append = FALSE; break; } k++; } } g_free (str_a); g_free (str_b); } } return append; } /*! \fn gchar * adjust_picked (gchar * picked, atomic_object * object, gboolean init) \brief adjust the name of the replacement object to use for a type of object if any \param picked type name (species, coordination, fragment, molecule name) \param object the target insert object \param init 1 / 0 depending on the atom search filter */ gchar * adjust_picked (gchar * picked, atomic_object * object, gboolean init) { if (object) { if (init && ! picked) { return g_strdup_printf ("%s", object -> name); } else { if (g_strcmp0(picked, object -> name) == 0) { return g_strdup_printf ("%s", picked); } else { return NULL; } } } else { return NULL; } } /*! \fn gchar * get_node_name (int node, atom_search * asearch, project * this_proj) \brief get node label in the atom search tree store \param node the node id \param asearch the target atom search \param this_proj the target project */ gchar * get_node_name (int node, atom_search * asearch, project * this_proj) { int i, j, k, l; int filter = get_asearch_filter (asearch); gchar * str; if (! filter) { str = g_strdup_printf ("%s", this_proj -> chemistry -> label[node]); } else if (filter == 1) { str = (node) ? g_strdup_printf (_("%d-fold"), node) : g_strdup_printf (_("Isolated")); } else if (filter == 2) { i = 0; for (j=0; j nspec; j++) { i += this_proj -> coord -> ntg[1][j]; if (i > node) break; } k = 0; for (l=0; l coord -> ntg[filter - 1][l]; str = g_strdup_printf ("%s", env_name(this_proj, node-k, j, 1, NULL)); } else if (filter == 3) { str = g_strdup_printf (_("Fragment N°%d"), node+1); } else { str = g_strdup_printf (_("Molecule N°%d"), node+1); } if (filter < 3 && asearch -> pointer[0].c == 1) str = g_strdup_printf ("%s*", str); return str; } /*! \fn void fill_atom_model (atom_search * asearch, project * this_proj) \brief fill atom search tree store \param asearch the target atom search \param this_proj the target project */ void fill_atom_model (atom_search * asearch, project * this_proj) { GtkTreeIter spec_level, atom_level; int g, h, i, j, k, l, m, n; gchar * str; gboolean do_append; gboolean doit; gboolean * to_insert; gboolean is_object = get_asearch_is_object (asearch); gchar ** picked_names; int obj = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); int step = this_proj -> modelgl -> anim -> last -> img -> step; if (asearch -> action != INSERT) { if (asearch -> todo_size >= GTK_LIMIT && ! asearch -> passivating && ! asearch -> mode) { show_the_widgets (asearch -> info[1]); hide_the_widgets (asearch -> id_box); } else { hide_the_widgets (asearch -> info[1]); if (asearch -> mode) { hide_the_widgets (asearch -> id_box); } else { if (asearch -> passivating || (filter > 2 && obj == 2)) { hide_the_widgets (asearch -> id_box); } else { show_the_widgets (asearch -> id_box); } } int val = get_asearch_num_objects (asearch); to_insert = allocbool(val); n = 0; if (asearch -> action == REPLACE) { picked_names = g_malloc0(val*sizeof*picked_names); n = (asearch -> pointer[0].c == 3) ? 0 : 3; } switch (filter) { case 0: for (h=0; h spec || asearch -> spec == h+1) { for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].sp; if (j == h) { to_insert[h] = append (asearch, this_proj, i, j); if (to_insert[h]) { if (asearch -> action == REPLACE && asearch -> in_selection) { picked_names[h] = adjust_picked (picked_names[h], get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[n], (asearch -> mode) ? -(h+3) : (asearch -> passivating) ? h : i, 0), doit); doit = FALSE; } if (asearch -> action != REPLACE || n || ! picked_names[h] || asearch -> mode) break; } } } } } break; case 1: for (h=0; h natomes; i++) { if (this_proj -> atoms[0][i].numv == h) { j = this_proj -> atoms[0][i].sp; to_insert[h] = append (asearch, this_proj, i, j); if (to_insert[h]) { if (asearch -> action == REPLACE && asearch -> in_selection) { picked_names[h] = adjust_picked (picked_names[h], get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[n], (asearch -> mode) ? -(h+3) : (asearch -> passivating) ? h : i, 0), doit); } if (asearch -> action != REPLACE || n || ! picked_names[h] || asearch -> mode) break; } } } } break; default: if (val >= GTK_LIMIT && (obj == 1 || asearch -> object == 3)) { // Improbable: more than 10 000 fragments or molecules // Note: so far the selection and the test case functions are not ready yet to_insert[0] = TRUE; picked_names[0] = g_strdup_printf (_("All %s(s)"), (filter == 2) ? _("fragment") : _("molecule")); val = 1; } else { for (h=0; h natomes; i++) { if (asearch -> spec == 0 || asearch -> spec == this_proj -> atoms[0][i].sp + 1) { j = this_proj -> atoms[step][i].coord[filter - 1]; if (filter == 2) { for (k=0; k atoms[0][i].sp; k++) j += this_proj -> coord -> ntg[filter - 1][k]; } if (j == h) { to_insert[h] = append (asearch, this_proj, i, this_proj -> atoms[0][i].sp); if (to_insert[h]) { if (asearch -> action == REPLACE && asearch -> in_selection) { picked_names[h] = adjust_picked (picked_names[h], get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[n], (asearch -> mode) ? -(h+3) : (asearch -> passivating) ? h : i, 0), doit); } if (asearch -> action != REPLACE || n || ! picked_names[h] || asearch -> mode) break; } } } } } } break; } if ((asearch -> action == REPLACE || asearch -> action == REMOVE) && asearch -> mode && obj && filter > 2) { if (filter == 3 && this_proj -> coord -> totcoord[2] > 1) { str = g_strdup_printf (_("Fragments")); gtk_tree_store_append (asearch -> atom_model, & spec_level, NULL); if (asearch -> set_for_all > 0) asearch -> pick[0] = asearch -> set_for_all; gtk_tree_store_set (asearch -> atom_model, & spec_level, IDCOL, -1, 1, str, TOPIC, asearch -> pick[0], -1); g_free (str); str = g_strdup_printf ("%d", asearch -> todo[0]); j = (asearch -> action == REMOVE) ? 1 : 2; gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+j, str, -1); g_free (str); if (asearch -> action == REPLACE) { if (picked_names[0]) { str = g_strdup_printf (_("For all: %s"), picked_names[0]); gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, str, -1); g_free (str); } else { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, _("Select for all ..."), -1); } } } else if (filter == 4 && this_proj -> modelfc) { for (k=0; k modelfc -> mol_by_step[0]; k++) { if (this_proj -> modelfc -> mols[0][k].multiplicity > 1) { str = g_strdup_printf (_("Molecule N°%d"), k+1); gtk_tree_store_append (asearch -> atom_model, & spec_level, NULL); if (asearch -> set_for_all > 0) asearch -> pick[k] = asearch -> set_for_all; gtk_tree_store_set (asearch -> atom_model, & spec_level, IDCOL, -(k+1), 1, str, TOPIC, asearch -> pick[k], -1); g_free (str); str = g_strdup_printf ("%d", asearch -> todo[k]); gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+2, str, -1); g_free (str); if (asearch -> action == REPLACE) { if (picked_names[k]) { str = g_strdup_printf (_("For all: %s"), picked_names[k]); gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, str, -1); g_free (str); } else { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, _("Select for all ..."), -1); } } } } } } else { for (h=0; h atom_model, & spec_level, NULL); if (asearch -> action == REPLACE && ! asearch -> mode) { g = (asearch -> pointer[0].c == 3) ? 0 : 1; this_proj -> modelgl -> atom_win -> replace_nodes[g][h] = gtk_tree_model_get_path (GTK_TREE_MODEL(asearch -> atom_model), & spec_level); } str = get_node_name (h, asearch, this_proj); if (asearch -> set_for_all > 0) asearch -> pick[h] = asearch -> set_for_all; if (asearch -> action < RANMOVE || asearch -> action > RANMOVE) { gtk_tree_store_set (asearch -> atom_model, & spec_level, IDCOL, -(h+1), 1, str, TOPIC, asearch -> pick[h], -1); if (asearch -> passivating) { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOLAB, asearch -> lab[h], -1); } if (asearch -> set_for_all > 0 && asearch -> action == DISPL && filter > 2) { asearch -> todo[h] = asearch -> set_for_all; adjust_object_to_move (this_proj, asearch, 0, h); } if (asearch -> mode) { g_free (str); str = g_strdup_printf ("%d", asearch -> todo[h]); gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+5-asearch -> action, str, -1); } } else if (asearch -> action == RANMOVE) { i = (asearch -> pick[h] == 1 || asearch -> pick[h] == 3) ? 1 : 0; gtk_tree_store_set (asearch -> atom_model, & spec_level, IDCOL, -(h+1), 1, str, TOPIC, i, -1); if (is_object) { i = (asearch -> pick[h] == 2 || asearch -> pick[h] == 3) ? 1 : 0; gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, i, -1); if (asearch -> set_for_all > 0) { if (filter > 2) { asearch -> todo[h] = asearch -> set_for_all; adjust_object_to_move (this_proj, asearch, 1, h); } } } } g_free (str); if (asearch -> action == REPLACE) { if (picked_names[h]) { if (asearch -> mode || (obj && filter > 2)) { str = g_strdup_printf ("%s", picked_names[h]); } else { str = g_strdup_printf (_("For all: %s"), picked_names[h]); } gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, str, -1); g_free (str); } else { if (asearch -> mode || (obj && filter > 2)) { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, _("Select ..."), -1); } else { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, _("Select for all ..."), -1); } } } else if (asearch -> action == RANMOVE) { if (this_proj -> modelgl -> atom_win -> msd_all[h] > 0.0) { if (obj && filter > 2) { str = g_strdup_printf (_("MSDmax= %f"), this_proj -> modelgl -> atom_win -> msd_all[h]); } else { str = g_strdup_printf (_("For all: MSDmax= %f"), this_proj -> modelgl -> atom_win -> msd_all[h]); } gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+2, str, -1); g_free (str); } else { if (obj && filter > 2) { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+2, _("Set MSDmax for ..."), -1); } else { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+2, _("Set MSDmax for all ..."), -1); } } } doit = FALSE; if (asearch -> action > REMOVE && asearch -> action != RANMOVE) { doit = TRUE; } else { doit = (asearch -> passivating) ? FALSE : ! asearch -> mode; } if (doit && (! obj || (filter > 0 && filter < 3))) { for (i=0; i natomes; i++) { do_append = FALSE; j = this_proj -> atoms[0][i].sp; if (! filter) { if (j == h && append (asearch, this_proj, i, j)) do_append=TRUE; } else { k = filter - 1; l = this_proj -> atoms[step][i].coord[k]; if (filter == 1) { m = this_proj -> coord -> geolist[0][j][l]; if (m == h && append (asearch, this_proj, i, j)) do_append=TRUE; } else { if (filter == 2) for (m=0; m coord -> ntg[1][m]; if (l == h && append (asearch, this_proj, i, j)) do_append=TRUE; } } if (do_append) { gtk_tree_store_append (asearch -> atom_model, & atom_level, & spec_level); append_to_model (& atom_level, asearch, is_object, h, i, this_proj); } } } } } g_free (to_insert); if (asearch -> action == DISPL) check_motion_interactors (this_proj, asearch); if (asearch -> action == REPLACE) g_free (picked_names); } //if (asearch -> passivating) check_tree_for_this_search (this_proj, asearch); } } else { i = (asearch -> pointer[0].c == 7) ? 2 : 1; atomic_object * iobj = this_proj -> modelgl -> atom_win -> to_be_inserted[i]; j = 0; while (iobj) { gtk_list_store_append (asearch -> obj_model, & atom_level); str = g_strdup_printf ("x= %f, y= %f, z= %f", iobj -> baryc[0], iobj -> baryc[1], iobj -> baryc[2]); gtk_list_store_set (asearch -> obj_model, & atom_level, IDCOL, j+1, 1, g_strdup_printf ("%d", j+1), 2, iobj -> name, TOLAB, asearch -> todo[j], TOPIC, str, -1); g_free (str); if (i == 2) { str = g_strdup_printf ("%f", iobj -> occ); gtk_list_store_set (asearch -> obj_model, & atom_level, TOPIC+1, str, -1); g_free (str); } j ++; iobj = iobj -> next; } } if (asearch -> set_for_all > 0) asearch -> set_for_all = -asearch -> set_for_all; } G_MODULE_EXPORT void move_up_down (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data); void add_random_column (atom_search * asearch); /*! \fn void update_search_tree (atom_search * asearch) \brief update search tree \param asearch the target atom search */ void update_search_tree (atom_search * asearch) { if (asearch -> pointer[0].c == 7 && asearch -> obj_model) { g_signal_handler_disconnect (G_OBJECT(GTK_TREE_MODEL(asearch -> obj_model)), asearch -> filter); gtk_list_store_clear (asearch -> obj_model); asearch -> filter = g_signal_connect_data (G_OBJECT(GTK_TREE_MODEL(asearch -> obj_model)), "row-deleted", G_CALLBACK(move_up_down), asearch, NULL, (GConnectFlags) 0); } else { if (asearch -> atom_model) gtk_tree_store_clear (asearch -> atom_model); if (asearch -> obj_model) gtk_list_store_clear (asearch -> obj_model); } fill_atom_model (asearch, get_project_by_id(asearch -> proj)); //if (asearch -> action) gtk_tree_view_expand_all (GTK_TREE_VIEW(asearch -> atom_tree)); } /*! \fn gboolean update_this_search (atom_search * asearch) \brief test if it is required to update the search tree or not \param asearch the target atom search */ gboolean update_this_search (atom_search * asearch) { int object = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); if (asearch -> passivating) { return FALSE; } else if (! asearch -> passivating && asearch -> todo_size >= GTK_LIMIT) { return FALSE; } else if (! (object && filter > 2)) { return TRUE; } return FALSE; } /*! \fn G_MODULE_EXPORT void set_atom (GtkEntry * entry, gpointer data) \brief adjust atom search parameters if >= 10 000 atoms \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_atom (GtkEntry * entry, gpointer data) { atom_search * asearch = (atom_search *)data; int i; project * this_proj = get_project_by_id(asearch -> proj); gchar * str_a, * str_b; str_a = g_strdup_printf ("%s", entry_get_text (GTK_ENTRY(asearch -> entry_a))); asearch -> spec_to_add = -1; for (i = 0; i < this_proj -> nspec; i++) { str_b = g_strdup_printf ("%s", exact_name(this_proj -> chemistry -> label[i])); if (g_strcmp0 (str_a, str_b) == 0) { asearch -> spec_to_add = i; } g_free (str_b); } g_free (str_a); if (asearch -> spec_to_add != -1) { widget_set_sensitive (asearch -> entry_b, 1); set_image_from_icon_name (asearch -> img_a, APPLY); } else { widget_set_sensitive (asearch -> entry_b, 0); widget_set_sensitive (asearch -> but_a, 0); widget_set_sensitive (asearch -> but_b, 0); update_entry_text (GTK_ENTRY(asearch -> entry_b), ""); set_image_from_icon_name (asearch -> img_a, DIAL_ERROR); } } /*! \fn void clear_fields (atom_search * asearch) \brief clear all search fields if >= 10 000 atoms \param asearch the target atom search */ void clear_fields (atom_search * asearch) { int i = combo_get_active (asearch -> atom_box); if (i) { update_entry_text (GTK_ENTRY(asearch -> entry_a), exact_name(get_project_by_id(asearch -> proj) -> chemistry -> label[i-1])); } else { update_entry_text (GTK_ENTRY(asearch -> entry_a), ""); } set_atom (GTK_ENTRY(asearch -> entry_a), asearch); update_entry_text (GTK_ENTRY(asearch -> entry_b), ""); set_image_from_icon_name (asearch -> img_b, DIAL_ERROR); } /*! \fn gboolean remove_from_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) \brief remove from the tree model \param model the tree model \param path the path in the tree model \param iter the tree iter \param data the associated data pointer */ gboolean remove_from_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) { int i, j; GtkTreeIter parent; atom_search * asearch = (atom_search *)data; project * this_proj; if (gtk_tree_model_get_iter (model, iter, path)) { gtk_tree_model_get (model, iter, IDCOL, & i, -1); if (i == asearch -> int_b) { j = (i > 0) ? i -- : abs(i) - 1; asearch -> todo[j] = 0; if (asearch -> action == REPLACE) { j = (i > 0) ? i -- : i - 2; this_proj = get_project_by_id(asearch -> proj); clean_this_object (j, 0, this_proj, asearch); asearch -> in_selection --; } if (gtk_tree_model_iter_parent (model, & parent, iter)) { gtk_tree_store_remove (GTK_TREE_STORE(model), iter); if (! gtk_tree_model_iter_has_child(model, & parent)) { gtk_tree_store_remove (GTK_TREE_STORE(model), & parent); if (asearch -> action == REPLACE) { j = abs(i) - 1; gtk_tree_path_free (this_proj -> modelgl -> atom_win -> replace_nodes[0][j]); this_proj -> modelgl -> atom_win -> replace_nodes[0][j] = NULL; } } } else { gtk_tree_store_remove (GTK_TREE_STORE(model), iter); } return TRUE; } } return FALSE; } /*! \fn G_MODULE_EXPORT void remove_atom (GtkButton * but, gpointer data) \brief remove atom (or object) from the search tree if >= 10 000 atoms \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void remove_atom (GtkButton * but, gpointer data) { atom_search * asearch = (atom_search *)data; asearch -> int_b = (int )string_to_double ((gpointer)entry_get_text (GTK_ENTRY(asearch -> entry_b))); gtk_tree_model_foreach (GTK_TREE_MODEL(asearch -> atom_model), remove_from_model, asearch); clear_fields (asearch); } /*! \fn gboolean atom_is_in_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) \brief is this atom already in the tree model if >= 10 000 atoms \param model the target tree model \param path the path in the tree model \param iter the tree iter \param data the associated data pointer */ gboolean atom_is_in_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) { int b; atom_search * asearch = (atom_search *)data; if (gtk_tree_model_get_iter (model, iter, path)) { gtk_tree_model_get (model, iter, IDCOL, & b, -1); if (b == asearch -> int_b) { asearch -> was_selected = TRUE; asearch -> path = gtk_tree_model_get_path (model, iter); return TRUE; } } return FALSE; } /*! \fn G_MODULE_EXPORT void add_atom (GtkButton * but, gpointer data) \brief add atom (or object) to the search tree if >= 10 000 atoms \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_atom (GtkButton * but, gpointer data) { atom_search * asearch = (atom_search *)data; project * this_proj = get_project_by_id(asearch -> proj); GtkTreeIter spec_level, atom_level, new_level; int i, j, k, l, m; i = this_proj -> modelgl -> anim -> last -> img -> step; j = asearch -> spec_to_add; int filter = get_asearch_filter (asearch); gboolean is_object = get_asearch_is_object (asearch); if (! asearch -> mode) { if (append (asearch, this_proj, -1, j)) { asearch -> was_selected = FALSE; m = asearch -> int_b; asearch -> int_b = j+1; gtk_tree_model_foreach (GTK_TREE_MODEL(asearch -> atom_model), atom_is_in_model, asearch); if (! asearch -> was_selected) { switch (filter) { case 0: l = j; break; case 1: l = this_proj -> atoms[i][asearch -> num_to_add].numv; break; case 2: l = this_proj -> atoms[i][asearch -> num_to_add].coord[filter - 1]; for (k=0; k coord -> ntg[filter - 1][k]; break; default: l = this_proj -> atoms[i][asearch -> num_to_add].coord[filter - 1]; break; } asearch -> int_b = -(l+1); gchar * str = get_node_name (l, asearch, this_proj); asearch -> was_selected = FALSE; gtk_tree_model_foreach (GTK_TREE_MODEL(asearch -> atom_model), atom_is_in_model, asearch); if (! asearch -> was_selected) { gtk_tree_store_append (asearch -> atom_model, & spec_level, NULL); if (asearch -> action == REPLACE) { this_proj -> modelgl -> atom_win -> replace_nodes[0][l] = gtk_tree_model_get_path (GTK_TREE_MODEL(asearch -> atom_model), & spec_level); } gtk_tree_store_set (asearch -> atom_model, & spec_level, IDCOL, -(l+1), 1, str, -1); gtk_tree_store_append (asearch -> atom_model, & atom_level, & spec_level); append_to_model (& atom_level, asearch, is_object, l, asearch -> num_to_add, this_proj); } else { // Find out where to insert that node ! gtk_tree_model_get_iter (GTK_TREE_MODEL(asearch -> atom_model), & spec_level, asearch -> path); if (gtk_tree_model_iter_children (GTK_TREE_MODEL(asearch -> atom_model), & atom_level, & spec_level)) { gboolean append = FALSE; gboolean dothat = TRUE; k = 0; while (dothat) { gtk_tree_model_get (GTK_TREE_MODEL(asearch -> atom_model), & atom_level, IDCOL, & k, -1); if (k > asearch -> num_to_add) { dothat = FALSE; } else { dothat = gtk_tree_model_iter_next (GTK_TREE_MODEL(asearch -> atom_model), & atom_level); append = TRUE; } } gtk_tree_store_insert_before (asearch -> atom_model, & new_level, & spec_level, (append) ? NULL : & atom_level); append_to_model (& new_level, asearch, l, is_object, asearch -> num_to_add, this_proj); } } g_free (str); asearch -> int_b = m; if (asearch -> action == REPLACE) { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, _("Select for all ..."), -1); } else if (asearch -> action == RANMOVE) { str = g_strdup_printf (_("Set MSDmax for all ...")); gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+2, str, -1); g_free (str); } } } } clear_fields (asearch); } /*! \fn void re_populate_tree_search (atom_search * asearch) \brief re populate search tree after atom action if >= 10 000 atoms \param asearch the target atom search */ void re_populate_tree_search (atom_search * asearch) { project * this_proj = get_project_by_id (asearch -> proj); GtkTreeIter spec_level, atom_level, new_level; int i, j, k, l, m; i = this_proj -> modelgl -> anim -> last -> img -> step; int filter = get_asearch_filter (asearch); gboolean is_object = get_asearch_is_object (asearch); int s_int_b = asearch -> int_b; for (j=0; j todo_size; j++) { if (asearch -> todo[j]) { k = this_proj -> atoms[i][j].sp; if (append (asearch, this_proj, -1, k)) { asearch -> was_selected = FALSE; switch (filter) { case 0: l = k; break; case 1: l = this_proj -> atoms[i][j].numv; break; case 2: l = this_proj -> atoms[i][j].coord[filter - 1]; for (m=0; m coord -> ntg[filter - 1][m]; break; default: l = this_proj -> atoms[i][j].coord[filter - 1]; break; } asearch -> int_b = -(l+1); gtk_tree_model_foreach (GTK_TREE_MODEL(asearch -> atom_model), atom_is_in_model, asearch); if (! asearch -> was_selected) { gchar * str = get_node_name (l, asearch, this_proj); gtk_tree_store_append (asearch -> atom_model, & spec_level, NULL); gtk_tree_store_set (asearch -> atom_model, & spec_level, IDCOL, asearch -> int_b, 1, str, -1); if (asearch -> action == RANMOVE) { str = g_strdup_printf (_("Set MSDmax for all ...")); gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+2, str, -1); g_free (str); } gtk_tree_store_append (asearch -> atom_model, & atom_level, & spec_level); append_to_model (& atom_level, asearch, is_object, l, j, this_proj); } else { // Find out where to insert that node ! gtk_tree_model_get_iter (GTK_TREE_MODEL(asearch -> atom_model), & spec_level, asearch -> path); if (gtk_tree_model_iter_children (GTK_TREE_MODEL(asearch -> atom_model), & atom_level, & spec_level)) { gboolean append = FALSE; gboolean dothat = TRUE; k = 0; while (dothat) { gtk_tree_model_get (GTK_TREE_MODEL(asearch -> atom_model), & atom_level, IDCOL, & k, -1); if (k > j) { dothat = FALSE; } else { dothat = gtk_tree_model_iter_next (GTK_TREE_MODEL(asearch -> atom_model), & atom_level); append = TRUE; } } gtk_tree_store_insert_before (asearch -> atom_model, & new_level, & spec_level, (append) ? NULL : & atom_level); append_to_model (& new_level, asearch, is_object, l, j, this_proj); } } } } } asearch -> int_b = s_int_b; } /*! \fn G_MODULE_EXPORT void set_id (GtkEntry * entry, gpointer data) \brief set search id if >= 10 000 atoms \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_id (GtkEntry * entry, gpointer data) { atom_search * asearch = (atom_search *)data; project * this_proj = get_project_by_id(asearch -> proj); asearch -> int_b = (int )string_to_double ((gpointer)entry_get_text (GTK_ENTRY(asearch -> entry_b))); if (asearch -> int_b > 0 && asearch -> int_b < this_proj -> natomes+1) { asearch -> was_selected = FALSE; gtk_tree_model_foreach (GTK_TREE_MODEL(asearch -> atom_model), atom_is_in_model, asearch); int s = this_proj -> modelgl -> anim -> last -> img -> step; asearch -> int_b --; if (asearch -> was_selected && this_proj -> atoms[s][asearch -> int_b].sp == asearch -> spec_to_add) { widget_set_sensitive (asearch -> but_a, 0); widget_set_sensitive (asearch -> but_b, 1); set_image_from_icon_name (asearch -> img_b, APPLY); } else { if (this_proj -> atoms[s][asearch -> int_b].sp == asearch -> spec_to_add) { asearch -> num_to_add = asearch -> int_b; widget_set_sensitive (asearch -> but_a, 1); widget_set_sensitive (asearch -> but_b, 0); set_image_from_icon_name (asearch -> img_b, APPLY); } else { widget_set_sensitive (asearch -> but_a, 0); widget_set_sensitive (asearch -> but_b, 0); set_image_from_icon_name (asearch -> img_b, DIAL_ERROR); } } } } /*! \fn void adjust_search_param (atom_search * asearch, project * this_proj, int a, int s, int c, gboolean status) \brief adjust parameters for this atom search \param asearch the target atom search \param this_proj the target project \param a the atom id \param s the chemical species, or object id \param c the column id \param status the new toogle status */ void adjust_search_param (atom_search * asearch, project * this_proj, int a, int s, int c, gboolean status) { int i, j, k, l, m; opengl_project_changed (asearch -> proj); i = (a < 0) ? 0 : a; for (j=i; j natomes; j++) { k = this_proj -> atoms[0][j].pick[0]; l = this_proj -> atoms[0][j].sp; m = this_proj -> atoms[0][j].label[0]; if (s < 0 || l == s) { if (asearch -> status == 2 || asearch -> status == k) { if (a == j || a < 0) { switch (c) { case TOLAB: #ifdef GTK4 if (m != status) label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(j)); #else if (m != status) label_unlabel_this_atom (NULL, GINT_TO_POINTER(j)); #endif break; default: if (asearch -> action != RANMOVE) { asearch -> todo[j] = status; if (asearch -> action == DISPL && asearch -> object) adjust_object_to_move (this_proj, asearch, 0, j); } else { switch (asearch -> todo[j]) { case 0: asearch -> todo[j] += (c-TOLAB); break; case 1: if (c == TOPIC) { asearch -> todo[j] -= (c-TOLAB); } else { asearch -> todo[j] += (c-TOLAB); } break; case 2: if (c == TOPIC) { asearch -> todo[j] += (c-TOLAB); } else { asearch -> todo[j] -= (c-TOLAB); } break; case 3: asearch -> todo[j] -= (c-TOLAB); break; } if (asearch -> object) adjust_object_to_move (this_proj, asearch, 1, j); } break; } } if (a == j) break; } } } } G_MODULE_EXPORT void set_spec_changed (GtkComboBox * box, gpointer data); /*! \fn void adjust_this_tree_branch (atom_search * asearch, project * this_proj, int oid, int sid, GtkTreeIter iter) \brief adjust tree branch (for an entire type of object) \param asearch the target atom search \param this_proj the target project \param oid the column id \param sid the chemical species or object type id \param iter the tree iter */ void adjust_this_tree_branch (atom_search * asearch, project * this_proj, int oid, int sid, GtkTreeIter iter) { int k, l, m, n, o, p, q; int status; int * to_label = NULL; int is_clone = (asearch -> action == 1) ? 1 : 0; int object = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); gboolean doit; GtkTreeModel * model = (asearch -> action == INSERT) ? GTK_TREE_MODEL(asearch -> obj_model) : GTK_TREE_MODEL(asearch -> atom_model); opengl_project_changed (this_proj -> id); gtk_tree_model_get (model, & iter, oid, & status, -1); atom_in_selection * selected; if (asearch -> action < 2 && oid == TOPIC) { selected_status = ! status; switch (filter) { case 0: selected_aspec = sid; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[0][! status]); #else select_unselect_atoms (NULL, & this_proj -> modelgl -> colorp[0][! status]); #endif break; default: if (filter < 3) { k = this_proj -> modelgl -> selection_mode; this_proj -> modelgl -> selection_mode = object; } p = this_proj -> modelgl -> anim -> last -> img -> step; for (l=0; l natomes; l++) { n = this_proj -> atoms[p][l].sp; o = this_proj -> atoms[p][l].coord[filter-1]; doit = FALSE; if (filter == 1) { if (this_proj -> atoms[p][l].numv == sid && append (asearch, this_proj, l, n)) doit = TRUE; } else { if (filter == 2) { for (m=0; m coord -> ntg[1][m]; } } if (o == sid && append (asearch, this_proj, l, n)) doit = TRUE; } if (doit) { o = get_to_be_selected (this_proj -> modelgl); #ifdef GTK4 if (this_proj -> atoms[p][l].pick[o] != status) { select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(l)); } select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(l)); #else if (this_proj -> atoms[p][l].pick[o] != status) { select_unselect_this_atom (NULL, GINT_TO_POINTER(l)); } select_unselect_this_atom (NULL, GINT_TO_POINTER(l)); #endif } } if (filter < 3) this_proj -> modelgl -> selection_mode = k; break; } } else { if (asearch -> action != INSERT) { if (oid == TOLAB) { if (asearch -> pointer[0].c == 8) { preserve_ogl_selection (this_proj -> modelgl); this_proj -> modelgl -> cell_win -> cut_this_slab = TRUE; save_all_selections (this_proj -> modelgl, 0); create_slab_lists (this_proj); update_all_selections (this_proj -> modelgl, 0); q = 0; if (this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected) { to_label = allocint (this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected); } } p = this_proj -> modelgl -> anim -> last -> img -> step; switch (filter) { case 0: if (asearch -> pointer[0].c == 8) { if (this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected) { selected = this_proj -> modelgl -> anim -> last -> img -> selected[0] -> first; while (selected) { if (selected -> sp == sid) { to_label[q] = selected -> id; q ++; } selected = selected -> next; } } } else { #ifdef GTK4 show_hide_labels (NULL, NULL, & this_proj -> modelgl -> colorp[is_clone][sid]); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[is_clone][sid], ! status); show_hide_labels (this_proj -> modelgl -> ogl_lab[is_clone][sid], & this_proj -> modelgl -> colorp[is_clone][sid]); #endif } break; default: if (filter < 3) { k = this_proj -> modelgl -> selection_mode; this_proj -> modelgl -> selection_mode = object; } for (l=0; l natomes; l++) { n = this_proj -> atoms[p][l].sp; o = this_proj -> atoms[p][l].coord[filter-1]; doit = FALSE; if (filter == 1) { if (this_proj -> atoms[p][l].numv == sid && append (asearch, this_proj, l, n)) doit = TRUE; } else if (filter == 2 || filter == 4) { if (filter == 2) { for (m=0; m coord -> ntg[1][m]; } } if (o == sid && append (asearch, this_proj, l, n)) doit = TRUE; } else if (filter == 3) { if (asearch -> mode && object) { doit = TRUE; } else { if (o == sid && append (asearch, this_proj, l, n)) doit = TRUE; } } if (doit) { if (asearch -> pointer[0].c == 8) { if (this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected) { selected = this_proj -> modelgl -> anim -> last -> img -> selected[0] -> first; while (selected) { if (selected -> id == l) { to_label[q] = l; q ++; } selected = selected -> next; } } } else { this_proj -> atoms[p][l].label[0] = status; #ifdef GTK4 label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(l)); #else label_unlabel_this_atom (NULL, GINT_TO_POINTER(l)); #endif } } } if (filter < 3) this_proj -> modelgl -> selection_mode = k; break; } if (asearch -> pointer[0].c == 8) { restore_ogl_selection (this_proj -> modelgl); if (q) { for (l=0; l atoms[0][m].label[0] = ! status; this_proj -> atoms[0][m].label[1] = ! status; } g_free (to_label); } this_proj -> modelgl -> cell_win -> cut_this_slab = FALSE; this_proj -> modelgl -> create_shaders[SLABS] = TRUE; gtk_tree_store_set (asearch -> atom_model, & iter, TOLAB, ! status, -1); } } else { if (asearch -> passivating || (object && filter > 2)) { if (asearch -> action == RANMOVE) { if (! status) { asearch -> todo[sid] += (oid-TOLAB); } else { asearch -> todo[sid] -= (oid-TOLAB); } if (object && ! asearch -> passivating) adjust_object_to_move (this_proj, asearch, 1, sid); } else { asearch -> todo[sid] = ! status; if (asearch -> action == DISPL) { if (object && ! asearch -> passivating) adjust_object_to_move (this_proj, asearch, 0, sid); motion_to_zero (asearch); } } } else if (! asearch -> mode) { switch (filter) { case 0: for (l=0; l natomes; l++) { n = this_proj -> atoms[0][l].sp; if (n == sid && append (asearch, this_proj, l, n)) { if (asearch -> action == RANMOVE) { if (! status) { asearch -> todo[l] += (oid-TOLAB); } else { asearch -> todo[l] -= (oid-TOLAB); } if (object) adjust_object_to_move (this_proj, asearch, 1, l); } else { asearch -> todo[l] = ! status; if (asearch -> action == DISPL && object) adjust_object_to_move (this_proj, asearch, 0, l); } } } break; case 1: for (l=0; l natomes; l++) { n = this_proj -> atoms[0][l].sp; if (this_proj -> atoms[0][l].numv == sid && append (asearch, this_proj, l, n)) { if (asearch -> action == RANMOVE) { if (! status) { asearch -> todo[l] += (oid-TOLAB); } else { asearch -> todo[l] -= (oid-TOLAB); } if (object) adjust_object_to_move (this_proj, asearch, 1, l); } else { asearch -> todo[l] = ! status; if (asearch -> action == DISPL && object) adjust_object_to_move (this_proj, asearch, 0, l); } } } break; case 2: for (l=0; l natomes; l++) { n = this_proj -> atoms[0][l].sp; o = this_proj -> atoms[0][l].coord[filter-1]; for (m=0; m coord -> ntg[1][m]; } if (o == sid && append (asearch, this_proj, l, n)) { if (asearch -> action == RANMOVE) { if (! status) { asearch -> todo[l] += (oid-TOLAB); } else { asearch -> todo[l] -= (oid-TOLAB); } if (object) adjust_object_to_move (this_proj, asearch, 1, l); } else { asearch -> todo[l] = ! status; if (asearch -> action == DISPL && object) adjust_object_to_move (this_proj, asearch, 0, l); } } } break; default: for (l=0; l natomes; l++) { n = this_proj -> atoms[0][l].sp; o = this_proj -> atoms[0][l].coord[filter-1]; if (o == sid && append (asearch, this_proj, l, n)) { if (asearch -> action == RANMOVE) { if (! status) { asearch -> todo[l] += (oid-TOLAB); } else { asearch -> todo[l] -= (oid-TOLAB); } if (object) adjust_object_to_move (this_proj, asearch, 1, l); } else { asearch -> todo[l] = ! status; if (asearch -> action == DISPL && object) adjust_object_to_move (this_proj, asearch, 0, l); } } } break; } } } } else { for (k=0; k in_selection; k++) { asearch -> todo[k] = ! status; } } } switch (oid) { case TOLAB: if (asearch -> action == INSERT) asearch -> pick[sid] = ! status; asearch -> lab[sid] = ! status; break; default: if (asearch -> action == RANMOVE) { if (! status) { asearch -> pick[sid] += (oid-TOLAB); } else { asearch -> pick[sid] -= (oid-TOLAB); } } else { asearch -> pick[sid] = ! status; } break; } if (asearch -> todo_size < GTK_LIMIT || asearch -> passivating || (object == 2 && filter > 2)) update_search_tree (asearch); } /*! \fn void adjust_this_tree_leaf (atom_search * asearch, project * this_proj, int oid, int aid, int new_status, GtkTreeIter iter) \brief adjust tree leaf (for a single object) \param asearch the target atom search \param this_proj the target project \param oid the column id \param aid the atom id \param new_status the new toggle status \param iter the tree iter */ void adjust_this_tree_leaf (atom_search * asearch, project * this_proj, int oid, int aid, int new_status, GtkTreeIter iter) { int status; int k, l, p; opengl_project_changed (this_proj -> id); int sel = this_proj -> modelgl -> selection_mode; int is_clone = (asearch -> action == 1) ? 1 : 0; int object = (asearch -> object) ? 1 : 0; this_proj -> modelgl -> selection_mode = object; p = this_proj -> modelgl -> anim -> last -> img -> step; // For atom i if (oid == TOLAB) { if (asearch -> action == INSERT) { if (asearch -> todo[aid] != new_status || new_status < 0) { status = ! asearch -> todo[aid]; asearch -> todo[aid] = status; } } else if (this_proj -> atoms[p][aid].label[is_clone] != new_status || new_status < 0) { #ifdef GTK4 label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(aid)); #else label_unlabel_this_atom (NULL, GINT_TO_POINTER(aid)); #endif status = this_proj -> atoms[p][aid].label[is_clone]; } } else { if (asearch -> action < 2) { if (this_proj -> atoms[p][aid].pick[0] != new_status || new_status < 0) { // selected_status = ! this_proj -> atoms[p][aid].pick[get_to_be_selected (this_proj -> modelgl)]; selected_status = ! this_proj -> atoms[p][aid].pick[0]; #ifdef GTK4 select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(aid)); #else select_unselect_this_atom (NULL, GINT_TO_POINTER(aid)); #endif status = this_proj -> atoms[p][aid].pick[0]; } } else { if (asearch -> todo[aid] != new_status || new_status < 0) { status = ! asearch -> todo[aid]; adjust_search_param (asearch, this_proj, aid, this_proj -> atoms[p][aid].sp, oid, status); } } } status = (new_status < 0) ? status : new_status; if (asearch -> action == RANMOVE && oid != TOLAB) { k = (asearch -> todo[aid] == 1 || asearch -> todo[aid] == 3) ? 1 : 0; l = (asearch -> todo[aid] == 2 || asearch -> todo[aid] == 3) ? 1 : 0; // Check 'for all' gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC, k, -1); if (object) gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC+1, l, -1); } else if (asearch -> action == INSERT) { gtk_list_store_set (asearch -> obj_model, & iter, oid, status, -1); } else { if (asearch -> action == DISPL && oid != TOLAB) motion_to_zero (asearch); gtk_tree_store_set (asearch -> atom_model, & iter, oid, status, -1); } this_proj -> modelgl -> selection_mode = sel; check_all_trees (this_proj); } /*! \fn G_MODULE_EXPORT void select_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief toggle select / unselect object in the atom search tree model \param cell_renderer the cell renderer toggle button \param string_path the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void select_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, j, k; GtkTreeIter iter; tint * dat = (tint *)data; project * this_proj = get_project_by_id(dat -> a); atom_search * asearch = this_proj -> modelgl -> search_widg[dat -> c]; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); GtkTreeModel * model = (asearch -> action == INSERT) ? GTK_TREE_MODEL(asearch -> obj_model) : GTK_TREE_MODEL(asearch -> atom_model); gtk_tree_model_get_iter (model, & iter, path); gtk_tree_model_get (model, & iter, IDCOL, & i, -1); check_label = FALSE; if (this_proj -> modelgl -> atom_win) { this_proj -> modelgl -> atom_win -> rebuilt[(asearch -> action == RANMOVE) ? 1 : 0] = FALSE; } if (i > 0) { i --; // For atom i adjust_this_tree_leaf (asearch, this_proj, dat -> b, i, -1, iter); } else { // For spec i if (asearch -> todo_size >= GTK_LIMIT && ! asearch -> passivating) { GtkTreeIter child; gtk_tree_model_get (GTK_TREE_MODEL(asearch -> atom_model), & iter, dat -> b, & j, -1); gtk_tree_store_set (asearch -> atom_model, & iter, dat -> b, ! j, -1); if (gtk_tree_model_iter_children (GTK_TREE_MODEL(asearch -> atom_model), & child, & iter)) { gboolean dothis = TRUE; while (dothis) { gtk_tree_model_get (GTK_TREE_MODEL(asearch -> atom_model), & child, IDCOL, & k, -1); k --; adjust_this_tree_leaf (asearch, this_proj, dat -> b, k, ! j, child); dothis = gtk_tree_model_iter_next (GTK_TREE_MODEL(asearch -> atom_model), & child); } } } else { adjust_this_tree_branch (asearch, this_proj, dat -> b, abs(i) - 1, iter); } } if (asearch -> action == DISPL) check_motion_interactors (this_proj, asearch); check_label = TRUE; this_proj -> modelgl -> labelled = check_label_numbers (this_proj, 2); update (this_proj -> modelgl); } /*! \fn int get_selected_object_id (gboolean visible, int p, gchar * str, atom_search * asearch) \brief get the id of the object selected (in contextual menu, or in combo box) \param visible is the 'model edition' window visible (1/0) \param p the target project id \param str the string that describing the selection \param asearch the target atom search */ int get_selected_object_id (gboolean visible, int p, gchar * str, atom_search * asearch) { int i, j; gchar * word, * name; gchar * cmp; for (i = 1; mol[i].type || mol[i].object; i++) { if (mol[i].object != NULL) { cmp = g_strdup_printf ("%s", (i == 9 || i == 13 || i == 16 || i == 17) ? _(mol[i].object) : mol[i].object); if (g_strcmp0 (cmp, str) == 0) { g_free (cmp); if (i < 9) { return (int) mol[i].Z; } else if (i == 9) { return get_atom_id_from_periodic_table (asearch); } else if (i > 10 && i < 17) { return insert_this_project_from_lib (i-11, visible, get_project_by_id(p), asearch); } else if (i == 17) { return select_from_library (visible, get_project_by_id(p), asearch); } } g_free (cmp); } } for (i=0; i name, i+1); for (j=0; j<3; j++) { word = g_strdup_printf (_("%s in %s"), _(action_atoms[j]), name); if (g_strcmp0 (word, str) == 0) { g_free (word); g_free (name); get_project_by_id(p) -> modelgl -> other_status = j; return create_object_from_open_project (get_project_by_id(p), i); } else { g_free (word); } } g_free (name); } if (g_strcmp0 (_("Copied data"), str) == 0) { return FROM_DATA; } if (g_strcmp0 (_("Empty position"), str) == 0) return 120; return 0; } /*! \fn void adjust_data_model_to_replace (project * this_proj, atom_search * asearch, int sid, int vid) \brief adjust the data of the tree model to insert 'vid' \param this_proj the target project \param asearch the target atom search \param sid the chemical species \param vid id of the object to insert */ void adjust_data_model_to_replace (project * this_proj, atom_search * asearch, int sid, int vid) { int i, j, k, l; int filter = get_asearch_filter (asearch); switch (filter) { case 0: for (i=0; i natomes; i++) { if (this_proj -> atoms[0][i].sp == sid && append (asearch, this_proj, i, this_proj -> atoms[0][i].sp)) { to_insert_in_project (vid, i, this_proj, asearch, TRUE); } } break; case 1: for (i=0; i natomes; i++) { if (this_proj -> atoms[0][i].numv == sid) { j = this_proj -> atoms[0][i].sp; if (append (asearch, this_proj, i, j)) { to_insert_in_project (vid, i, this_proj, asearch, TRUE); } } } break; case 2: for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].sp; k = this_proj -> atoms[0][i].coord[1]; for (l=0; l coord -> ntg[1][l]; if (k == sid && append (asearch, this_proj, i, j)) { to_insert_in_project (vid, i, this_proj, asearch, TRUE); } } break; default: for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].sp; k = this_proj -> atoms[0][i].coord[filter-1]; if (k == sid && append (asearch, this_proj, i, j)) { to_insert_in_project (vid, i, this_proj, asearch, TRUE); } } break; } } /*! \fn G_MODULE_EXPORT void changed_action_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data) \brief change combo box in atom search tree model \param combo the cell renderer combo box \param path_string the path in the tree model \param iter the tree iter \param data the associated data pointer */ G_MODULE_EXPORT void changed_action_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data) { tint * dat = (tint *)data; project * this_proj = get_project_by_id(dat -> a); int h, i, j, k; atom_search * asearch = this_proj -> modelgl -> search_widg[dat -> c]; GValue val = {0, }; GObject * cmodel; g_object_get (combo, "model", & cmodel, NULL); gtk_tree_model_get_value ((GtkTreeModel *)cmodel, iter, 0, & val); GtkTreeIter child; gboolean dothis; GtkTreeModel * model = (asearch -> action == INSERT) ? GTK_TREE_MODEL(asearch -> obj_model) : GTK_TREE_MODEL(asearch -> atom_model); if (gtk_tree_model_get_iter_from_string (model, iter, path_string)) { gtk_tree_model_get (model, iter, IDCOL, & h, -1); gchar * str = g_strdup_printf ("%s", (char *)g_value_get_string (& val)); i = get_selected_object_id (TRUE, this_proj -> id, str, asearch); g_free (str); int object = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); k = (asearch -> pointer[0].c == 3) ? 0 : (asearch -> pointer[0].c == 5) ? 1 : 3; if (h > 0 || (object && ! asearch -> passivating && filter > 2) || asearch -> passivating || asearch -> mode) { // Single atom or object if (i) { j = (asearch -> mode) ? h - 2 : abs(h) - 1; to_insert_in_project (i, j, this_proj, asearch, TRUE); str = (asearch -> mode) ? g_strdup_printf ("%s", get_atomic_object_by_origin(this_proj -> modelgl -> atom_win -> to_be_inserted[k], j, 0) -> name) : g_strdup_printf (_("For all: %s"), get_atomic_object_by_origin(this_proj -> modelgl -> atom_win -> to_be_inserted[k], j, 0) -> name); gtk_tree_store_set (asearch -> atom_model, iter, TOPIC+1, str, -1); g_free (str); } else { gtk_tree_store_set (asearch -> atom_model, iter, TOPIC+1, (h > 0) ? _("Select ...") : _("Select for all ..."), -1); } } else { // The entire species if (i) { if (! asearch -> passivating && this_proj -> natomes >= GTK_LIMIT) { if (gtk_tree_model_iter_children (GTK_TREE_MODEL(asearch -> atom_model), & child, iter)) { dothis = TRUE; while (dothis) { gtk_tree_model_get (GTK_TREE_MODEL(asearch -> atom_model), & child, IDCOL, & j, -1); j --; to_insert_in_project (i, j, this_proj, asearch, TRUE); gtk_tree_store_set (asearch -> atom_model, & child, TOPIC+1, get_atomic_object_by_origin(this_proj -> modelgl -> atom_win -> to_be_inserted[k], j, 0) -> name, -1); dothis = gtk_tree_model_iter_next (GTK_TREE_MODEL(asearch -> atom_model), & child); } } str = g_strdup_printf (_("For all: %s"), get_atomic_object_by_origin(this_proj -> modelgl -> atom_win -> to_be_inserted[k], j, 0) -> name); gtk_tree_store_set (asearch -> atom_model, iter, TOPIC+1, str, -1); g_free (str); } else { adjust_data_model_to_replace (this_proj, asearch, abs(h)-1, i); } } else { if (! asearch -> passivating && this_proj -> natomes >= GTK_LIMIT) { gtk_tree_store_set (asearch -> atom_model, iter, 5, _("Select for all ..."), -1); if (gtk_tree_model_iter_children (GTK_TREE_MODEL(asearch -> atom_model), & child, iter)) { dothis = TRUE; while (dothis) { gtk_tree_store_set (asearch -> atom_model, & child, TOPIC+1, _("Select ..."), -1); dothis = gtk_tree_model_iter_next (GTK_TREE_MODEL(asearch -> atom_model), & child); } } } else { gtk_tree_store_set (asearch -> atom_model, iter, 5, _("Select ..."), -1); } } } if (update_this_search(asearch)) update_search_tree (asearch); } } /*! \fn GtkTreeModel * replace_combo_tree (gboolean insert, int proj) \brief replace combo box in the tree view \param insert add 'Select ...' combo box item \param proj target crystal builder project id */ GtkTreeModel * replace_combo_tree (gboolean insert, int proj) { GtkTreeIter iter, iter2, iter3; GtkTreeStore *store; int i, j; gchar * name, * word; store = gtk_tree_store_new (1, G_TYPE_STRING); if (insert) { gtk_tree_store_append (store, & iter, NULL); gtk_tree_store_set (store, & iter, 0, _("Select ..."), -1); } for (i=0; mol[i].type || mol[i].object; i++) { if (mol[i].type) { gtk_tree_store_append (store, & iter, NULL); gtk_tree_store_set (store, & iter, 0, _(mol[i].type), -1); } else if (mol[i].object) { gtk_tree_store_append (store, & iter2, & iter); if (i == 9 || i == 13 || i == 16 || i == 17) { gtk_tree_store_set (store, & iter2, 0, _(mol[i].object), -1); } else { gtk_tree_store_set (store, & iter2, 0, mol[i].object, -1); } } } gboolean doit = FALSE; for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { doit = TRUE; break; } } if (doit) { gtk_tree_store_append (store, & iter, NULL); gtk_tree_store_set (store, & iter, 0, _("Import From Project"), -1); for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { gtk_tree_store_append (store, & iter2, & iter); name = g_strdup_printf ("%s (%d)", get_project_by_id(i) -> name, i+1); gtk_tree_store_set (store, & iter2, 0, name, -1); for (j=0; j<3; j++) { gtk_tree_store_append (store, & iter3, & iter2); word = g_strdup_printf (_("%s in %s"), _(action_atoms[j]), name); gtk_tree_store_set (store, & iter3, 0, word, -1); g_free (word); } g_free (name); } } } if (copied_object) { gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, & iter, 0, _("Copied data"), -1); } if (get_project_by_id(proj) -> modelgl) { if (get_project_by_id(proj) -> modelgl -> builder_win) { gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, & iter, 0, _("Empty position"), -1); } } return GTK_TREE_MODEL (store); } /*! \fn void search_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer, if visible then add or not pango markup \param col the tree view column \param renderer the cell renderer \param mod the tree model \param iter the tree iter \param data the associated data pointer */ void search_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); i ++; gtk_tree_model_get (mod, iter, IDCOL, & j, -1); gboolean vis = (j < 0 && i == 2) ? FALSE : TRUE; gtk_cell_renderer_set_visible (renderer, vis); if (vis && (i < TOLAB || i > TOPIC)) { set_renderer_markup (mod, iter, renderer, i); } } int atom_to_edit; atom_search * csearch; /*! \fn G_MODULE_EXPORT void set_occupancy (GtkEntry * res, gpointer data) \brief set occupancy entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_occupancy (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); atomic_object * object = (atomic_object *)data; if (v > 0.0 && v<= 1.0) { object -> occ = v; } update_entry_double (res, object -> occ); } /*! \fn G_MODULE_EXPORT void set_i_coord (GtkEntry * res, gpointer data) \brief set insertion coordinate(s) for the object to be inserted entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_i_coord (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); int ax = GPOINTER_TO_INT (data); project * this_proj = get_project_by_id (csearch -> proj); int oid = (csearch -> pointer[0].c == 5) ? 1 : 2; atomic_object * object = get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[oid], 0, atom_to_edit+1); object -> baryc[ax] = v; update_entry_double (res, object -> baryc[ax]); } /*! \fn G_MODULE_EXPORT void set_max_msd (GtkEntry * res, gpointer data) \brief set MSD max entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_max_msd (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); int ax = GPOINTER_TO_INT (data); project * this_proj = get_project_by_id (csearch -> proj); if (! (v < 0.0)) { if (ax > 0) { if (this_proj -> modelgl -> atom_win -> msd[ax-1] != v) csearch -> pick[this_proj -> atoms[0][ax-1].sp] = 0; this_proj -> modelgl -> atom_win -> msd[ax-1] = v; } else { ax = -ax-1; this_proj -> modelgl -> atom_win -> msd_all[ax] = v; if (! csearch -> passivating) { int object = get_asearch_object (csearch); int filter = get_asearch_filter (csearch); int i, j, k, l; switch (filter) { case 0: for (i=0; i natomes; i++) { if (this_proj -> atoms[0][i].sp == ax) this_proj -> modelgl -> atom_win -> msd[i] = v; } break; case 1: for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].sp; if (this_proj -> atoms[0][i].numv == ax) this_proj -> modelgl -> atom_win -> msd[i] = v; } break; case 2: for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].sp; k = this_proj -> atoms[0][i].coord[filter-1]; for (l=0; l coord -> ntg[1][l]; if (k == ax) this_proj -> modelgl -> atom_win -> msd[i] = v; } break; default: if (! object) { for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].coord[filter-1]; if (j == ax) this_proj -> modelgl -> atom_win -> msd[i] = v; } } break; } } } update_entry_double (res, v); } else { //show_error (_("MSDmax must be > 0.0 !"), 1, this_proj -> modelgl -> atom_win -> win); if (ax > 0) { v = this_proj -> modelgl -> atom_win -> msd[ax-1]; } else { v = this_proj -> modelgl -> atom_win -> msd_all[-ax-1]; } update_entry_double (res, v); } } int max_random; /*! \fn G_MODULE_EXPORT void set_max_action (GtkEntry * res, gpointer data) \brief set how many time(s) to re-do the action \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_max_action (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); int v = (int)string_to_double ((gpointer)m); int ax = GPOINTER_TO_INT (data); if (v > -1 && v <= max_random) { csearch -> todo[-ax-1] = v; } update_entry_int (res, csearch -> todo[-ax-1]); } /*! \fn void get_coord_iter_and_edit (gchar * path_string, gpointer data, GtkWidget * widg) \brief find iter in the tree model using path string, then edit the data \param path_string the path in the tree model \param data the associated data pointer \param widg the GtkWidget sending the signal */ void get_coord_iter_and_edit (gchar * path_string, gpointer data, GtkWidget * widg) { tint * cid = (tint *)data; project * this_proj = get_project_by_id (cid -> a); csearch = this_proj -> modelgl -> search_widg[cid -> c]; GtkTreeIter iter; GtkTreeModel * model = (csearch -> action == INSERT) ? GTK_TREE_MODEL(csearch -> obj_model) : GTK_TREE_MODEL(csearch -> atom_model); if (gtk_tree_model_get_iter (model, & iter, gtk_tree_path_new_from_string (path_string))) { int h, i, j, k, l; gtk_tree_model_get (model, & iter, IDCOL, & h, -1); if (h > 0 || csearch -> action == REPLACE || csearch -> action == REMOVE || csearch -> action == RANMOVE) { atom_to_edit = h-1; GtkWidget * win = gtk_dialog_new (); if (this_proj -> modelgl -> builder_win) { gtk_window_set_transient_for (GTK_WINDOW (win), GTK_WINDOW(this_proj -> modelgl -> builder_win -> win)); } else { gtk_window_set_transient_for (GTK_WINDOW (win), GTK_WINDOW(this_proj -> modelgl -> atom_win -> win)); } gtk_window_set_resizable (GTK_WINDOW (win), FALSE); gchar * str; atomic_object * iobj; gchar * obj[5]={_("atom(s)"), _("total coordination(s)"), _("partial coordination(s)"), _("in fragment"), _("in molecule")}; gchar * act[2]={_("Replace"), _("Remove")}; int object = get_asearch_object (csearch); int filter = get_asearch_filter (csearch); switch (csearch -> action) { case REPLACE: str = g_strdup_printf (_("%s %s randomly"), _("Replace"), obj[(object) ? filter : 0]); break; case REMOVE: str = g_strdup_printf (_("%s %s randomly"), _("Remove"), obj[(object) ? filter : 0]); break; case RANMOVE: str = g_strdup_printf (_("Maximum Mean Square Displacement")); break; default: i = (csearch -> pointer[0].c == 5) ? 1 : 2; iobj = get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[i], 0, atom_to_edit+1); if (cid -> b - TOLAB) { str = g_strdup_printf (_("Site occupancy for %s"), prepare_for_title(iobj -> name)); } else { str = g_strdup_printf (_("Insert %s at"), prepare_for_title(iobj -> name)); } break; } gtk_window_set_title (GTK_WINDOW(win), str); g_free (str); gtk_window_set_modal (GTK_WINDOW (win), TRUE); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbox; GtkWidget * entry; gchar * axis[3]={"x", "y", "z"}; gchar * nran = NULL; switch (csearch -> action) { case INSERT: if (cid -> b - TOLAB && csearch -> pointer[0].c == 7) { hbox = create_hbox (5); str = g_strdup_printf (_("Occupancy= ")); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); entry = create_entry (G_CALLBACK(set_occupancy), 100, 15, FALSE, iobj); update_entry_double (GTK_ENTRY(entry), iobj -> occ); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); } else { for (i=0; i<3; i++) { hbox = create_hbox (5); str = g_strdup_printf ("%s =", axis[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); entry = create_entry (G_CALLBACK(set_i_coord), 100, 15, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), iobj -> baryc[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); } } break; case RANMOVE: hbox = create_hbox (5); entry = create_entry (G_CALLBACK(set_max_msd), 100, 15, FALSE, GINT_TO_POINTER(h)); if (h > 0) { j = this_proj -> atoms[0][atom_to_edit].sp; if (object) { str = g_strdup_printf (_("MSDmax for %s%d + neighbors = "), this_proj -> chemistry -> label[j], atom_to_edit+1); } else { str = g_strdup_printf (_("MSDmax for %s%d = "), this_proj -> chemistry -> label[j], atom_to_edit+1); } update_entry_double (GTK_ENTRY(entry), this_proj -> modelgl -> atom_win -> msd[atom_to_edit]); } else { switch (filter) { case 0: str = g_strdup_printf (_("MSDmax for all %s atom(s) = "), this_proj -> chemistry -> label[-h-1]); break; case 1: if (-h-1 == 0) { str = g_strdup_printf (_("MSDmax for all isolated atom(s) = ")); } else if (object) { str = g_strdup_printf (_("MSDmax for all %d-fold atom(s) + neighbors = "), -h-1); } else { str = g_strdup_printf (_("MSDmax for all %d-fold atom(s) = "), -h-1); } break; case 2: i = 0; for (j=0; j nspec; j++) { i += this_proj -> coord -> ntg[1][j]; if (i > -h-1) break; } k = 0; for (l=0; l coord -> ntg[1][l]; i = (-h-1) - k; nran = env_name(this_proj, i, j, 1, NULL); if (object) { str = g_strdup_printf (_("MSDmax for all %s + neighbors = "), nran); } else { str = g_strdup_printf (_("MSDmax for all %s = "), nran); } break; case 3: if (object) { str = g_strdup_printf (_("MSDmax for fragment N°%d = "), -h); } else { str = g_strdup_printf (_("MSDmax for the atom(s) in fragment N°%d = "), -h); } break; case 4: if (object) { str = g_strdup_printf (_("MSDmax for molecule N°%d = "), -h); } else { str = g_strdup_printf (_("MSDmax for the atom(s) in molecule N°%d = "), -h); } break; } update_entry_double (GTK_ENTRY(entry), this_proj -> modelgl -> atom_win -> msd_all[-h-1]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 15); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("[Å2]", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); break; default: max_random = 0; switch (filter) { case 0: if (csearch -> status == 2) { max_random = this_proj -> chemistry -> nsps[-h-1]; nran = g_strdup_printf ("%s", this_proj -> chemistry -> label[-h-1]); } else { max_random = 0; for (i=0; i natomes; i++) { if (this_proj -> atoms[0][i].sp == -h-1 && this_proj -> atoms[0][i].pick[0] == csearch -> status) max_random ++; } } break; case 1: for (i=0; i natomes; i++) { if (this_proj -> atoms[0][i].numv == -h-1 && (this_proj -> atoms[0][i].pick[0] == csearch -> status || csearch -> status == 2)) max_random ++; } if (-h-1 > 0) { nran = g_strdup_printf (_("%d-fold"), -h-1); } else { nran = g_strdup_printf (_("isolated")); } break; case 2: i = 0; for (j=0; j nspec; j++) { i += this_proj -> coord -> ntg[1][j]; if (i > -h-1) break; } k = 0; for (l=0; l coord -> ntg[1][l]; i = (-h-1) - k; for (k=0; k natomes; k++) { if (this_proj -> atoms[0][k].sp == j && this_proj -> atoms[0][k].coord[1] == i) { if (this_proj -> atoms[0][k].pick[0] == csearch -> status || csearch -> status == 2) max_random ++; } } if (csearch -> action != RANMOVE) nran = env_name(this_proj, i, j, 1, NULL); break; default: if (object) { i = (-h-1); if (filter == 3) { max_random = this_proj -> coord -> totcoord[2]; } else if (filter == 4) { max_random = this_proj -> modelfc -> mols[0][i].multiplicity; } } else { i = (-h-1); for (k=0; k natomes; k++) { if (this_proj -> atoms[0][k].coord[filter-1] == i) { if (this_proj -> atoms[0][k].pick[0] == csearch -> status || csearch -> status == 2) max_random ++; } } nran = g_strdup_printf (_("atom(s)")); } break; } hbox = create_hbox (5); entry = create_entry (G_CALLBACK(set_max_action), 100, 15, FALSE, GINT_TO_POINTER(h)); if (object) { if (filter == 3) { str = g_strdup_printf (_("%s randomly n fragment(s) in all fragments, n= "), act[csearch -> action - 3]); } else if (filter == 4) { str = g_strdup_printf (_("%s randomly n fragment(s) in molecule N°%d, n= "), act[csearch -> action - 3], -h); } else { str = g_strdup_printf (_("%s randomly n %s coordinations, n= "), act[csearch -> action - 3], nran); } } else { if (filter < 3) { str = g_strdup_printf (_("%s randomly n %s %s, n= "), act[csearch -> action - 3], nran, obj[0]); } else { str = g_strdup_printf (_("%s randomly n %s %s N°%d, n= "), act[csearch -> action - 3], nran, obj[filter], -h); } } if (nran) g_free (nran); update_entry_int (GTK_ENTRY(entry), csearch -> todo[-h-1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 15); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); str = g_strdup_printf (_(" with nmax = %d"), max_random); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 50, -1, 0.0, 0.5), FALSE, FALSE, 15); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); break; } run_this_gtk_dialog (win, G_CALLBACK(run_destroy_dialog), NULL); if (csearch -> action != RANMOVE) { update_search_tree (csearch); } else { if (h > 0) { if (this_proj -> modelgl -> atom_win -> msd[atom_to_edit] > 0.0) { str = g_strdup_printf (_("MSDmax= %f"), this_proj -> modelgl -> atom_win -> msd[atom_to_edit]); } else { str = g_strdup_printf (_("Set MSDmax for ...")); } gtk_tree_store_set (csearch -> atom_model, & iter, TOPIC+2, str, -1); g_free (str); } else { if (this_proj -> modelgl -> atom_win -> msd_all[-h-1] > 0.0) { if (object && filter > 2) { str = g_strdup_printf (_("MSDmax= %f"), this_proj -> modelgl -> atom_win -> msd_all[-h-1]); } else { str = g_strdup_printf (_("For all: MSDmax= %f"), this_proj -> modelgl -> atom_win -> msd_all[-h-1]); } gtk_tree_store_set (csearch -> atom_model, & iter, TOPIC+2, str, -1); g_free (str); } else { if (object && filter > 2) { gtk_tree_store_set (csearch -> atom_model, &iter, TOPIC+2, _("Set MSDmax for ..."), -1); } else { gtk_tree_store_set (csearch -> atom_model, & iter, TOPIC+2, _("Set MSDmax for all ..."), -1); } } } check_all_trees (this_proj); } } } } /*! \fn G_MODULE_EXPORT void to_edit_coords (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) \brief to edit data in the atom search tree model \param cell the GtkCellRenderer \param editable the editable \param path_string the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void to_edit_coords (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) { destroy_this_widget (GTK_WIDGET(editable)); get_coord_iter_and_edit (path_string, data, NULL); } /*! \fn G_MODULE_EXPORT void markup_action_renderer (GtkCellRendererCombo * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) \brief add pango markup to a combo box inserted in the cell of a tree view \param cell the GtkCellRendererCombo \param editable the editable \param path_string the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void markup_action_renderer (GtkCellRendererCombo * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) { combo_set_markup ((GtkWidget *)editable); } /*! \fn G_MODULE_EXPORT void set_max_msd_for_all (GtkEntry * res, gpointer data) \brief set the maximum MSD for all atom(s) / object(s) of the search \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_max_msd_for_all (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); project * this_proj = get_project_by_id (csearch -> proj); int i, j; if (v <= 0.0) { // show_error (_("MSDmax must be > 0.0 !"), 1, this_proj -> modelgl -> atom_win -> win); v = this_proj -> modelgl -> atom_win -> msd[0]; } i = csearch -> todo_size; for (j=0; j modelgl -> atom_win -> msd[j] = v; } i = get_asearch_num_objects (csearch); for (j=0; j modelgl -> atom_win -> msd_all[j] = v; } update_entry_double (res, v); } /*! \fn gboolean update_search_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) \brief update tree model for each iter \param model the tree model \param path the path in the tree model \param iter the tree it \param data the associated data pointer */ gboolean update_search_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) { int i; tint * dat = (tint *)data; project * this_proj = get_project_by_id(dat -> a); atom_search * asearch = this_proj -> modelgl -> search_widg[dat -> c]; if (gtk_tree_model_get_iter (model, iter, path)) { gtk_tree_model_get (model, iter, IDCOL, & i, -1); gtk_tree_store_set (GTK_TREE_STORE(model), iter, dat -> b, asearch -> int_b, -1); if (i > 0) { i --; adjust_this_tree_leaf (asearch, this_proj, dat -> b, i, asearch -> int_b, * iter); } else if (asearch -> object) { adjust_this_tree_branch (asearch, this_proj, dat -> b, abs(i) - 1, * iter); } return FALSE; } else { return TRUE; } } /*! \fn G_MODULE_EXPORT void select_all_atoms (GtkTreeViewColumn * col, gpointer data) \brief select all element(s) in the tree view column \param col the target tree view column \param data the associated data pointer */ G_MODULE_EXPORT void select_all_atoms (GtkTreeViewColumn * col, gpointer data) { tint * dat = (tint *)data; project * this_proj = get_project_by_id(dat -> a); csearch = this_proj -> modelgl -> search_widg[dat -> c]; int i, j, k; opengl_project_changed (dat -> a); if (dat -> b == TOPIC+2) { GtkWidget * win = gtk_dialog_new (); gtk_window_set_transient_for (GTK_WINDOW (win), GTK_WINDOW(this_proj -> modelgl -> atom_win -> win)); gtk_window_set_resizable (GTK_WINDOW (win), FALSE); gchar * str = g_strdup_printf (_("Maximum Mean Square Displacement")); gtk_window_set_title (GTK_WINDOW(win), str); g_free (str); gtk_window_set_modal (GTK_WINDOW (win), TRUE); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbox = create_hbox (5); GtkWidget * entry = create_entry (G_CALLBACK(set_max_msd_for_all), 100, 15, FALSE, NULL); update_entry_double (GTK_ENTRY(entry), 0.0); str = g_strdup_printf (_("MSDmax for all objects = ")); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 15); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); str = g_strdup_printf ("[Å2]"); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 50, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); run_this_gtk_dialog (win, G_CALLBACK(run_destroy_dialog), NULL); update_search_tree (csearch); } else { if (dat -> b == TOLAB) { if (csearch -> action == INSERT) { k = (csearch -> pointer[0].c == 5) ? 1 : 2; if (this_proj -> modelgl -> atom_win -> to_be_inserted[k]) { j = ! csearch -> todo[0]; for (i=0; i in_selection; i++) csearch -> todo[i] = j; } } else { k = this_proj -> modelgl -> anim -> last -> img -> step; if (csearch -> action < 2) { is_selected = -1; i = 0; } else { if (csearch -> status < 2) { is_selected = csearch -> status; for (i=0; i natomes; i++) { if (this_proj -> atoms[k][i].pick[0] == is_selected) break; } } else { is_selected = -1; i = 0; } } j = ! this_proj -> atoms[k][i].label[0]; selected_aspec = -1; column_label = TRUE; #ifdef GTK4 label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][j]); #else label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][j]); #endif column_label = FALSE; } } else { k = this_proj -> modelgl -> anim -> last -> img -> step; if (csearch -> action < 2) { j = ! this_proj -> atoms[k][0].pick[0]; selected_aspec = is_selected = -1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][j]); #else select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[0][j]); #endif } else { if (csearch -> action != RANMOVE) { j = (csearch -> set_for_all < 0) ? 0 : 1; } else { // The value depends on both translation (1), rotation (2), or both (3) switch (abs(csearch -> set_for_all)) { case 0: if (dat -> b == TOPIC) { j = 1; } else { j = 2; } break; case 1: if (dat -> b == TOPIC) { j = 0; } else { j = 3; } break; case 2: if (dat -> b == TOPIC) { j = 3; } else { j = 0; } break; case 3: if (dat -> b == TOPIC) { j = 2; } else { j = 1; } break; } } } } if (csearch -> action > 1 && dat -> c != 7) { clean_picked_and_labelled (csearch, FALSE); if (dat -> b != TOLAB) clean_todo (csearch); } csearch -> set_for_all = (dat -> b == TOLAB) ? 0 : j; update_search_tree (csearch); } /*else { GtkTreeIter iter; if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL(csearch -> atom_model), & iter)) { gtk_tree_model_get (GTK_TREE_MODEL(csearch -> atom_model), & iter, dat -> b, & j, -1); g_debug ("j= %d,", j); g_debug ("a= %d, b= %d, c= %d, aa= %d, bb= %d, cc= %d", dat -> a, dat -> b, dat -> c, csearch -> pointer[dat -> b-TOLAB].a, csearch -> pointer[dat -> b-TOLAB].b, csearch -> pointer[dat -> b-TOLAB].c); csearch -> int_b = ! j; gtk_tree_model_foreach (GTK_TREE_MODEL(csearch -> atom_model), update_search_model, & csearch -> pointer[dat -> b-TOLAB]); } }*/ } /*! \fn G_MODULE_EXPORT void move_up_down (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data) \brief Move row up or down in the tree model using the mouse \param tree_model the target tree model \param path the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void move_up_down (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data) { atom_search * asearch = (atom_search *)data; project * this_proj = get_project_by_id(asearch -> proj); atomic_object * obja, * objb, * objc; GtkTreeIter iter; gboolean valid; int i, j; int * old_todo = duplicate_int (asearch -> in_selection, asearch -> todo); obja = duplicate_atomic_object (this_proj -> modelgl -> atom_win -> to_be_inserted[2]); obja -> next = this_proj -> modelgl -> atom_win -> to_be_inserted[2] -> next; g_free (this_proj -> modelgl -> atom_win -> to_be_inserted[2]); objb = NULL; valid = gtk_tree_model_get_iter_first (tree_model, & iter); j = 0; while (valid) { gtk_tree_model_get (tree_model, & iter, 0, & i, -1); i --; objc = obja; while (objc -> id != i) objc = objc -> next; if (objc) { if (! objb) { this_proj -> modelgl -> atom_win -> to_be_inserted[2] = duplicate_atomic_object (objc); objb = this_proj -> modelgl -> atom_win -> to_be_inserted[2]; } else { objb -> next = duplicate_atomic_object (objc); objb -> next -> prev = objb; objb = objb -> next; } objb -> id = j; asearch -> todo[j] = old_todo[i]; j ++; } valid = gtk_tree_model_iter_next (tree_model, & iter); } g_free (old_todo); i = 0; valid = gtk_tree_model_get_iter_first (tree_model, & iter); while (valid) { gtk_list_store_set (GTK_LIST_STORE(tree_model), & iter, IDCOL, i+1, 1, g_strdup_printf ("%d", i+1), -1); i ++; valid = gtk_tree_model_iter_next (tree_model, & iter); } } /*! \fn GtkWidget * create_atoms_tree (atom_search * asearch, project * this_proj, int nats) \brief create atom search tree view \param asearch the target atom search \param this_proj the target project \param nats the total number of atom(s) */ GtkWidget * create_atoms_tree (atom_search * asearch, project * this_proj, int nats) { int i, j, k, l; GtkTreeViewColumn * atom_col[5]; GtkCellRenderer * atom_cell[5]; gchar * ctitle[6][5]={{i18n("Object"), i18n("Name"), i18n("Label"), i18n("Pick"), " "}, {i18n("Object"), i18n("Name"), i18n("Label"), i18n("Move"), " "}, {i18n("Object"), i18n("Name"), i18n("Label"), i18n("Replace"), i18n("By")}, {i18n("Object"), i18n("Name"), i18n("Label"), i18n("Remove"), " "}, {i18n("Object"), i18n("Name"), i18n("Insert"), i18n("Position"), i18n("Occupancy")}, {i18n("Object"), i18n("Name"), i18n("Label"), i18n("Translate"), i18n("Max. MSD")}}; gchar * ctype[3][5]={{"text", "text", "active", "active", "text"}, {"text", "text", "active", "text", "text"}, {"text", "text", "active", "active", "text"}}; j = (asearch -> action == REPLACE || asearch -> action == RANMOVE) ? 1 : 0; k = (asearch -> action == RANMOVE) ? 2 : (asearch -> action == INSERT) ? 1 : 0; if (asearch -> action == INSERT && asearch -> pointer[0].c == 7) j ++; gboolean toggle; GType coltype[3][8] = {{G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT}, {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT}, {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_INT}}; if (asearch -> action == INSERT) { asearch -> obj_model = gtk_list_store_newv (8, coltype[k]); } else { asearch -> atom_model = gtk_tree_store_newv (8, coltype[k]); } if (! (nats >= GTK_LIMIT) || asearch -> action == INSERT) { fill_atom_model (asearch, this_proj); } if (asearch -> action == INSERT) { asearch -> atom_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(asearch -> obj_model)); } else { asearch -> atom_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(asearch -> atom_model)); } for (i=0; i<4+j; i++) { toggle = FALSE; if (i < 2 || (asearch -> action == INSERT && i > 2) || (asearch -> action == RANMOVE && i == 4)) { atom_cell[i] = gtk_cell_renderer_text_new (); if ((asearch -> action == INSERT && i > 2) || (asearch -> action == RANMOVE && i == 4)) { g_object_set (atom_cell[i], "editable", TRUE, NULL); g_signal_connect (G_OBJECT(atom_cell[i]), "editing-started", G_CALLBACK(to_edit_coords), & asearch -> pointer[i-3]); if (asearch -> action == RANMOVE) toggle = TRUE; } } else if (i < 4) { atom_cell[i] = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(atom_cell[i]), "toggled", G_CALLBACK(select_atom), & asearch -> pointer[i-2]); toggle = TRUE; } else { atom_cell[i] = gtk_cell_renderer_combo_new (); GtkTreeModel * model = replace_combo_tree (FALSE, this_proj -> id); g_object_set (atom_cell[i], "model", model, "text-column", 0, "has-entry", FALSE, "editable", TRUE, NULL); g_object_unref (model); g_signal_connect (G_OBJECT(atom_cell[i]), "editing-started", G_CALLBACK(markup_action_renderer), & asearch -> pointer[i-4]); g_signal_connect (G_OBJECT(atom_cell[i]), "changed", G_CALLBACK(changed_action_renderer), & asearch -> pointer[i-4]); } gtk_cell_renderer_set_fixed_size (atom_cell[i], -1, 25); l = (asearch -> action == RANMOVE && i == 4) ? i+1 : i; atom_col[i] = gtk_tree_view_column_new_with_attributes (_(ctitle[(asearch -> action < 2) ? 0 : asearch -> action - 1][i]), atom_cell[i], ctype[k][i], l+1, NULL); if (toggle && ! asearch -> passivating) { gtk_tree_view_column_set_clickable (atom_col[i], TRUE); g_signal_connect (G_OBJECT(atom_col[i]), "clicked", G_CALLBACK(select_all_atoms), & asearch -> pointer[l-2]); } gtk_tree_view_append_column(GTK_TREE_VIEW(asearch -> atom_tree), atom_col[i]); gtk_tree_view_column_set_alignment (atom_col[i], 0.5); gtk_tree_view_column_set_cell_data_func (atom_col[i], atom_cell[i], search_set_visible, GINT_TO_POINTER(l), NULL); } if (asearch -> pointer[0].c == 7) { asearch -> filter = g_signal_connect_data (G_OBJECT(GTK_TREE_MODEL(asearch -> obj_model)), "row-deleted", G_CALLBACK(move_up_down), asearch, NULL, (GConnectFlags) 0); gtk_tree_view_set_reorderable (GTK_TREE_VIEW(asearch -> atom_tree), TRUE); } return asearch -> atom_tree; } /*! \fn int get_todo_size (atom_search * asearch) \brief get the size of the atom search selection list \param asearch the target atom search */ int get_todo_size (atom_search * asearch) { int object = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); project * this_proj = get_project_by_id (asearch -> proj); int tsize = 0; switch (filter) { case 0: tsize = (asearch -> mode || asearch -> passivating) ? this_proj -> nspec : this_proj -> natomes; break; case 1: tsize = (asearch -> mode || asearch -> passivating) ? this_proj -> coord -> cmax+1 : this_proj -> natomes; break; default: if (asearch -> mode || asearch -> passivating) { tsize = this_proj -> coord -> totcoord[filter -1]; } else { tsize = (object && filter > 2) ? this_proj -> coord -> totcoord[filter -1] : this_proj -> natomes; } break; } return tsize; } /*! \fn void allocate_todo (atom_search * asearch, int tsize) \brief allocate the selection list data buffer \param asearch the target atom search \param tsize the target size */ void allocate_todo (atom_search * asearch, int tsize) { asearch -> todo = allocint (tsize); asearch -> todo_size = tsize; } /*! \fn void clean_todo (atom_search * asearch) \brief clean atom search selection list \param asearch the target atom search */ void clean_todo (atom_search * asearch) { project * this_proj = get_project_by_id (asearch -> proj); if (asearch -> todo) g_free (asearch -> todo); allocate_todo (asearch, get_todo_size(asearch)); atomic_object * object; switch (asearch -> action) { case DISPL: if (this_proj -> modelgl -> atom_win -> to_be_moved[0]) { object = this_proj -> modelgl -> atom_win -> to_be_moved[0]; while (object -> next) { object = object -> next; g_free (object -> prev); } g_free (object); this_proj -> modelgl -> atom_win -> to_be_moved[0] = NULL; } break; case RANMOVE: if (this_proj -> modelgl -> atom_win -> to_be_moved[1]) { object = this_proj -> modelgl -> atom_win -> to_be_moved[1]; while (object -> next) { object = object -> next; g_free (object -> prev); } g_free (object); this_proj -> modelgl -> atom_win -> to_be_moved[1] = NULL; } g_free (this_proj -> modelgl -> atom_win -> msd); this_proj -> modelgl -> atom_win -> msd = allocfloat (asearch -> todo_size); break; case REPLACE: if (this_proj -> modelgl -> atom_win -> to_be_inserted[0]) { object = this_proj -> modelgl -> atom_win -> to_be_inserted[0]; while (object -> next) { object = object -> next; g_free (object -> prev); } g_free (object); this_proj -> modelgl -> atom_win -> to_be_inserted[0] = NULL; } asearch -> in_selection = 0; break; } } /*! \fn void clean_picked_and_labelled (atom_search * asearch, gboolean clean_msd) \brief initialize atom search data buffers \param asearch the target atom search \param clean_msd clean msd all data (1) or not (0) */ void clean_picked_and_labelled (atom_search * asearch, gboolean clean_msd) { project * this_proj; int val = get_asearch_num_objects (asearch); asearch -> lab = allocint (val); asearch -> pick = allocint (val); if (asearch -> action == RANMOVE) { this_proj = get_project_by_id (asearch -> proj); if (this_proj -> modelgl -> atom_win && clean_msd) { g_free (this_proj -> modelgl -> atom_win -> msd_all); this_proj -> modelgl -> atom_win -> msd_all = allocfloat (val); } } else if (asearch -> action == REPLACE) { this_proj = get_project_by_id (asearch -> proj); int i = (asearch -> pointer[0].c == 3) ? 0 : 1; if (this_proj -> modelgl -> atom_win) { if (this_proj -> modelgl -> atom_win -> win && this_proj -> modelgl -> atom_win -> replace_nodes[i]) { g_free (this_proj -> modelgl -> atom_win -> replace_nodes[i]); } this_proj -> modelgl -> atom_win -> replace_nodes[i] = g_malloc0(val*sizeof*this_proj -> modelgl -> atom_win -> replace_nodes[i]); } } } /*! \fn G_MODULE_EXPORT void set_spec_changed (GtkComboBox * box, gpointer data) \brief change the search chemical species \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_spec_changed (GtkComboBox * box, gpointer data) { atom_search * asearch = (atom_search *) data; int i = combo_get_active ((GtkWidget *)box); asearch -> spec = i; update_search_tree (asearch); if (get_project_by_id(asearch -> proj) -> natomes >= GTK_LIMIT) { if (i > 0) { update_entry_text (GTK_ENTRY(asearch -> entry_a), exact_name(get_project_by_id(asearch -> proj) -> chemistry -> label[i-1])); } else { update_entry_text (GTK_ENTRY(asearch -> entry_a), ""); } set_atom (GTK_ENTRY(asearch -> entry_a), asearch); widget_set_sensitive (asearch -> entry_a, ! i); } } /*! \fn G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data) \brief change the search filter \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data) { atom_search * asearch = (atom_search *) data; asearch -> filter = combo_get_active ((GtkWidget *)box); int object = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); widget_set_sensitive (asearch -> atom_box, (object && filter > 2) ? 0 : 1); widget_set_sensitive (asearch -> id_box, (object && filter > 2) ? 0 : 1); if (object && filter > 2) { combo_set_active (asearch -> atom_box, 0); } if (asearch -> action == DISPL) motion_to_zero (asearch); clean_todo (asearch); clean_picked_and_labelled (asearch, TRUE); set_spec_changed (GTK_COMBO_BOX(asearch -> atom_box), asearch); } /*! \fn G_MODULE_EXPORT void set_object_changed (GtkComboBox * box, gpointer data) \brief change the search object \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_object_changed (GtkComboBox * box, gpointer data) { atom_search * asearch = (atom_search *) data; GtkTreeViewColumn * rot_c; int was_object; int object; int filter; if (get_project_by_id(asearch -> proj) -> natomes >= GTK_LIMIT) { was_object = ((! asearch -> mode && asearch -> object > 1) || (asearch -> mode && asearch -> object)) ? 1 : 0; asearch -> object = combo_get_active ((GtkWidget *)box); filter = get_asearch_filter (asearch); object = ((! asearch -> mode && asearch -> object > 1) || (asearch -> mode && asearch -> object)) ? 1 : 0; if ((! asearch -> mode && (asearch -> object == 1 || asearch -> object == 3)) || (asearch -> mode && asearch -> object)) { if (! asearch -> mode) asearch -> passivating = TRUE; hide_the_widgets (asearch -> id_box); hide_the_widgets (asearch -> info[1]); } else { asearch -> passivating = FALSE; if (((! asearch -> mode && asearch -> object == 2) || (asearch -> mode && asearch -> object)) && filter > 2) { hide_the_widgets (asearch -> id_box); hide_the_widgets (asearch -> info[1]); } else { show_the_widgets (asearch -> id_box); show_the_widgets (asearch -> info[1]); } } } else { was_object = (asearch -> object) ? 1 : 0; asearch -> object = combo_get_active ((GtkWidget *)box); filter = get_asearch_filter (asearch); object = (asearch -> object) ? 1 : 0; hide_the_widgets (asearch -> id_box); hide_the_widgets (asearch -> info[1]); } if (was_object) { combo_text_prepend (asearch -> filter_box, _("Chemical Species")); if (asearch -> action == RANMOVE) { rot_c = gtk_tree_view_get_column (GTK_TREE_VIEW(asearch -> atom_tree), 4); gtk_tree_view_remove_column (GTK_TREE_VIEW(asearch -> atom_tree), rot_c); } } if (object) { gtk_combo_box_text_remove ((GtkComboBoxText *)asearch -> filter_box, 0); if (asearch -> action == RANMOVE) { GtkCellRenderer * rot = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(rot), "toggled", G_CALLBACK(select_atom), & asearch -> pointer[2]); int i = 5; rot_c = gtk_tree_view_column_new_with_attributes (_("Rotate"), rot, "active", i, NULL); gtk_tree_view_column_set_clickable (rot_c, TRUE); g_signal_connect (G_OBJECT(rot_c), "clicked", G_CALLBACK(select_all_atoms), & asearch -> pointer[2]); gtk_tree_view_column_set_alignment (rot_c, 0.5); gtk_tree_view_insert_column (GTK_TREE_VIEW(asearch -> atom_tree), rot_c, i-1); } } if (asearch -> action == DISPL) widget_set_sensitive (get_project_by_id(asearch -> proj) -> modelgl -> atom_win -> at_expand[2], object); combo_set_active (asearch -> filter_box, 0); set_filter_changed (GTK_COMBO_BOX(asearch -> filter_box), asearch); } /*! \fn void add_random_column (atom_search * asearch) \brief add a column to the search tree model for the case of random search \param asearch the target atom search */ void add_random_column (atom_search * asearch) { int i = 8 - asearch -> action; GtkCellRenderer * num = gtk_cell_renderer_text_new (); g_object_set (num, "editable", TRUE, NULL); g_signal_connect (G_OBJECT(num), "editing-started", G_CALLBACK(to_edit_coords), & asearch -> pointer[0]); GtkTreeViewColumn * num_c = gtk_tree_view_column_new_with_attributes (_("Number"), num, "text", i, NULL); gtk_tree_view_column_set_cell_data_func (num_c, num, search_set_visible, GINT_TO_POINTER(i), NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(asearch -> atom_tree), num_c); } /*! \fn G_MODULE_EXPORT void set_search_mode (GtkComboBox * box, gpointer data) \brief change search mode \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_search_mode (GtkComboBox * box, gpointer data) { atom_search * asearch = (atom_search *)data; project * this_proj = get_project_by_id(asearch -> proj); asearch -> mode = combo_get_active ((GtkWidget *)box); if ((asearch -> action == REPLACE || asearch -> action == REMOVE) && asearch -> atom_tree) { if (! asearch -> mode) { GtkTreeViewColumn * num_c; num_c = gtk_tree_view_get_column (GTK_TREE_VIEW(asearch -> atom_tree), 8 - asearch -> action); gtk_tree_view_remove_column (GTK_TREE_VIEW(asearch -> atom_tree), num_c); } else { add_random_column (asearch); } } if (this_proj -> natomes >= GTK_LIMIT) { if (asearch -> object_box) { if (asearch -> mode) { gtk_combo_box_text_remove ((GtkComboBoxText *)asearch -> object_box, 3); gtk_combo_box_text_remove ((GtkComboBoxText *)asearch -> object_box, 1); } else { gtk_combo_box_text_insert ((GtkComboBoxText *)asearch -> object_box, 1, NULL, _("Atom(s): All")); combo_text_append (asearch -> object_box, _("Group of Atoms: All")); } } } else { gtk_combo_box_text_remove_all ((GtkComboBoxText *)asearch -> object_box); combo_text_append (asearch -> object_box, _("Atom(s)")); combo_text_append (asearch -> object_box, _("Group of Atoms")); } /*if (asearch -> filter_box) { if (! this_proj -> modelgl -> adv_bonding[1] && this_proj -> modelgl -> atom_win -> adv_bonding[1]) { gtk_combo_box_text_remove ((GtkComboBoxText *)asearch -> filter_box, 3+i); } if (! this_proj -> modelgl -> adv_bonding[0] && this_proj -> modelgl -> atom_win -> adv_bonding[0]) { gtk_combo_box_text_remove ((GtkComboBoxText *)asearch -> filter_box, 2+i); } combo_set_active (asearch -> filter_box, 0); set_filter_changed (GTK_COMBO_BOX(asearch -> filter_box), asearch); }*/ combo_set_active (asearch -> object_box, 0); set_object_changed (GTK_COMBO_BOX(asearch -> object_box), asearch); } /*! \fn G_MODULE_EXPORT void set_search_digit (GtkEntry * res, gpointer data) \brief update search entry \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_search_digit (GtkEntry * res, gpointer data) { atom_search * asearch = (atom_search *) data; const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); asearch -> search_digit = (int)v; if (asearch -> search_digit <= 0) { asearch -> search_digit --; update_entry_text (res, ""); } else { update_entry_int (res, asearch -> search_digit); } set_spec_changed (GTK_COMBO_BOX(asearch -> atom_box), data); } /*! \fn void prep_search_box (GtkWidget * vbox, GtkWidget * lab, GtkWidget * combo) \brief prepare some search widgets \param vbox the box to insert the search box in \param lab the GtkWidget sending the signal \param combo the GtkWidget sending the signal */ void prep_search_box (GtkWidget * vbox, GtkWidget * lab, GtkWidget * combo) { GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 2); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); GtkWidget * fixed = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, FALSE, FALSE, 10); gtk_widget_set_size_request (combo, 175, -1); gtk_fixed_put (GTK_FIXED(fixed), combo, 0, 0); } /*! \fn GtkWidget * prepare_box_too_much (atom_search * asearch) \brief if too many atoms, then individual search \param asearch the target atom search */ GtkWidget * prepare_box_too_much (atom_search * asearch) { GtkWidget * box; GtkWidget * widg; GtkWidget * too_box = create_vbox (BSEP); widg = bbox (too_box, _("\t Atom species: ")); gtk_widget_set_size_request (widg, 200, -1); asearch -> entry_a = create_entry (G_CALLBACK(set_atom), 90, 15, TRUE, asearch); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, widg, asearch -> entry_a, FALSE, FALSE, 0); asearch -> img_a = stock_image (DIAL_ERROR); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, widg, asearch -> img_a, FALSE, FALSE, 5); widg = bbox (too_box, _("\t Atom Id: ")); gtk_widget_set_size_request (widg, 200, -1); asearch -> entry_b = create_entry (G_CALLBACK(set_id), 90, 15, TRUE, asearch); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, widg, asearch -> entry_b, FALSE, FALSE, 0); asearch -> img_b = stock_image (DIAL_ERROR); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, widg, asearch -> img_b, FALSE, FALSE, 5); box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, too_box, box, FALSE, FALSE, 5); asearch -> but_a = create_button (_("Add"), IMG_NONE, NULL, 75, -1, GTK_RELIEF_NORMAL, G_CALLBACK(add_atom), asearch); widget_set_sensitive (asearch -> but_a, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, asearch -> but_a, FALSE, FALSE, 75); asearch -> but_b = create_button (_("Remove"), IMG_NONE, NULL, 75, -1, GTK_RELIEF_NORMAL, G_CALLBACK(remove_atom), asearch); widget_set_sensitive (asearch -> but_b, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, asearch -> but_b, FALSE, FALSE, 0); return too_box; } /*! \fn GtkWidget * selection_tab (atom_search * asearch, int nats) \brief create the search widget \param asearch the target atom search \param nats the total number of atoms */ GtkWidget * selection_tab (atom_search * asearch, int nats) { project * this_proj = get_project_by_id (asearch -> proj); int i, j; i = (nats < GTK_LIMIT) ? 1 : 0; j = (asearch -> action == 5) ? 300 : -1; GtkWidget * selection = create_layout (j, 390 + (! i)*60 - i*100); GtkWidget * vbox = add_vbox_to_layout (selection, 0, (asearch -> action > 1) ? 0 : 10); GtkWidget * hbox, * vvbox; GtkWidget * lab; if (asearch -> action != 5) { // Later on simply hide info[1] (to much atoms info) if needed for (j=0; j<2; j++) { asearch -> info[j] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, asearch -> info[j], FALSE, FALSE, 0); } hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, asearch -> info[0], hbox, FALSE, FALSE, 2); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(".", 5, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Search "), 50, -1, 0.0, 0.5), FALSE, FALSE, 0); asearch -> object_box = create_combo (); combo_text_append (asearch -> object_box, _("Atom(s)")); if (! i) combo_text_append (asearch -> object_box, _("Atom(s): All")); combo_text_append (asearch -> object_box, _("Group of Atoms")); if (! i) combo_text_append (asearch -> object_box, _("Group of Atoms: All")); combo_set_active (asearch -> object_box, asearch -> object); asearch -> filter_box = create_combo (); gchar * filters[5]={i18n("Chemical Species"), i18n("Total Coordination"), i18n("Partial Coordination"), i18n("Fragment"), i18n("Molecule")}; for (j=0; j<3; j++) combo_text_append (asearch -> filter_box, _(filters[j])); if (this_proj -> modelgl -> adv_bonding[0]) combo_text_append (asearch -> filter_box, _(filters[3])); if (this_proj -> modelgl -> adv_bonding[1]) combo_text_append (asearch -> filter_box, _(filters[4])); combo_set_active (asearch -> filter_box, asearch -> filter); asearch -> atom_box = create_combo (); combo_text_append (asearch -> atom_box, _("All")); for (j=0; j nspec; j++) combo_text_append (asearch -> atom_box, this_proj -> chemistry -> label[j]); combo_set_active (asearch -> atom_box, asearch -> spec); g_signal_connect (G_OBJECT (asearch -> object_box), "changed", G_CALLBACK(set_object_changed), asearch); g_signal_connect (G_OBJECT (asearch -> filter_box), "changed", G_CALLBACK(set_filter_changed), asearch); g_signal_connect (G_OBJECT (asearch -> atom_box), "changed", G_CALLBACK(set_spec_changed), asearch); GtkWidget * entry = create_entry (G_CALLBACK(set_search_digit), 90, 15, TRUE, asearch); if (asearch -> action < 2) { prep_search_box (asearch -> info[0], markup_label(_("For "), 100, -1, 0.0, 0.5), asearch -> object_box); prep_search_box (asearch -> info[0], markup_label(_("Filter by "), 100, -1, 0.0, 0.5), asearch -> filter_box); prep_search_box (asearch -> info[0], markup_label(_("Species "), 100, -1, 0.0, 0.5), asearch -> atom_box); asearch -> id_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, asearch -> info[0], asearch -> id_box, FALSE, FALSE, 0); prep_search_box (asearch -> id_box, markup_label(_("Atom Id."), 100, -1, 0.0, 0.5), entry); } else { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, asearch -> info[0], hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("For "), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, asearch -> object_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Filter by "), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, asearch -> filter_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Species "), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, asearch -> atom_box, FALSE, FALSE, 0); asearch -> id_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, asearch -> id_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, asearch -> id_box, markup_label(_("Atom Id "), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, asearch -> id_box, entry, FALSE, FALSE, 0); } // If more than 10 000 atoms: if (asearch -> action < 2) { lab = markup_label(_("\tThe number of atoms in the model is too large\n" "\t\tto display and browse the entire list !\n" "\tYou need to search for object(s) individually:"), -1, -1, 0.5, 0.5); } else { lab = markup_label(_("The number of atoms in the model is too large to display and browse the entire list !\n" "\t\t\t\tYou need to search for object(s) individually:"), -1, -1, 0.5, 0.5); } add_box_child_start (GTK_ORIENTATION_VERTICAL, asearch -> info[1], lab, FALSE, FALSE, 10); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, asearch -> info[1], hbox, FALSE, FALSE, 0); /* vvbox = create_vbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vvbox, FALSE, FALSE, 80); cbox = create_combo (); combo_text_append (cbox, _("All objects")); combo_text_append (cbox, _("Selection")); g_signal_connect (G_OBJECT(cbox), "changed", G_CALLBACK(set_too_much_type), asearch); combo_set_active (cbox, asearch -> too_much); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, cbox, FALSE, FALSE, 30); // asearch -> big_box = // Combo box with _("All objects"), _("Selection") */ vvbox = create_vbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vvbox, FALSE, FALSE, 120); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, prepare_box_too_much (asearch), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, asearch -> info[1], markup_label(_("The search must be performed using species and/or Id.\n" "Use the filters above to define the object(s) of the search"), -1, -1, 0.5, 0.5), FALSE, FALSE, 5); } abox (vbox, _("Selection "), 2); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); GtkWidget * scrollsets = create_scroll (NULL, -1, -1, GTK_SHADOW_ETCHED_IN); i = (asearch -> action < 2) ? 0 : 1; j = (asearch -> action < 2) ? 1 : 0; if (asearch -> action < 2) { gtk_widget_set_size_request (scrollsets, 400+i*100, 270); } else { gtk_widget_set_size_request (scrollsets, 400+i*100, 290-i*120); } gtk_widget_set_hexpand (scrollsets, TRUE); add_container_child (CONTAINER_SCR, scrollsets, create_atoms_tree (asearch, this_proj, nats)); check_all_trees (this_proj); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, scrollsets, FALSE, FALSE, 100-j*75); return selection; } atomes_1.3.1/src/opengl/win/m_edit.c0000664000175000017500000002776415212624223017002 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_edit.c * @short Functions to create the 'Tools -> Edit' submenu * @author Sébastien Le Roux */ /* * This file: 'm_edit.c' * * Contains: * - The functions to create the 'Tools -> Edit' submenu * * List of functions: G_MODULE_EXPORT void wrapping_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void wrapping_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_run_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * menu_cell_edit (glwin * view , int id, int j); GtkWidget * menu_edit (glwin * view, int id); GMenu * menu_cell_edit (glwin * view, int popm, int sensitive); GMenu * menu_atom_edit (glwin * view, int popm); GMenu * extract_section (glwin * view, int popm); GMenu * menu_edit (glwin * view, int popm); */ #include "cell_edit.h" #include "atom_edit.h" #ifdef GTK4 extern G_MODULE_EXPORT void crystal_window (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void turn_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern G_MODULE_EXPORT void crystal_window (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void turn_rebuild (GtkWidget * widg, gpointer data); #endif #ifdef GTK4 /*! \fn G_MODULE_EXPORT void wrapping_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief wrapp coordinates callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void wrapping_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void wrapping_coord (GtkWidget * widg, gpointer data) \brief wrapp coordinates callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void wrapping_coord (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; wrapping (view); } #ifdef GTK3 /*! \fn GtkWidget * menu_cell_edit (glwin * view , int id, int j) \brief create the 'Edit -> Cell' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) \param j menu items sensitivity (cell + single MD step) */ GtkWidget * menu_cell_edit (glwin * view , int id, int j) { int i, k, l; GtkWidget * menu = gtk_menu_new (); if (id == 0) { for (i=0; i<6; i++) { view -> ogl_box[2+i] = create_menu_item (FALSE, _(edit_names[i])); if (i == 0) { g_signal_connect (G_OBJECT (view -> ogl_box[2+i]), "activate", G_CALLBACK(wrapping_coord), view); } else if (i == 3) { g_signal_connect (G_OBJECT (view -> ogl_box[2+i]), "activate", G_CALLBACK(super_cell), view); } else { k = (i < 3) ? i-1 : i-2; g_signal_connect (G_OBJECT (view -> ogl_box[2+i]), "activate", G_CALLBACK(edition_win), & view -> colorp[k][0]); } if (i > 2) widget_set_sensitive (view -> ogl_box[2+i], j); if (i == 0) widget_set_sensitive (view -> ogl_box[2+i], ! view -> wrapped); if (i == 3) { k = 0; for (l=0; l<3; l++) k += view -> anim -> last -> img-> abc -> extra_cell[l]; widget_set_sensitive (view -> ogl_box[2+i], k); } gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_box[2+i]); } } else { for (i=0; i<6; i++) { GtkWidget * widg = create_menu_item (FALSE, _(edit_names[i])); if (i == 0) { g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(wrapping_coord), view); } else if (i == 3) { g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(super_cell), view); } else { k = (i < 3) ? i-1 : i-2; g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(edition_win), & view -> colorp[k][0]); } if (i > 2) widget_set_sensitive (widg, j); if (i == 0) widget_set_sensitive (widg, ! view -> wrapped); if (i == 3) { k = 0; for (l=0; l<3; l++) k += view -> anim -> last -> img-> abc -> extra_cell[l]; widget_set_sensitive (widg, k); } gtk_menu_shell_append ((GtkMenuShell *)menu, widg); } } return menu; } /*! \fn GtkWidget * menu_edit (glwin * view, int id) \brief create the 'Edit' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_edit (glwin * view, int id) { int i, j; project * this_proj = get_project_by_id(view -> proj); GtkWidget * menu = gtk_menu_new (); GtkWidget * widg; if (id == 0) { view -> cbuilder = create_menu_item (FALSE, _("Crystal Builder")); g_signal_connect (G_OBJECT (view -> cbuilder), "activate", G_CALLBACK(crystal_window), & view -> colorp[0][0]); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> cbuilder); } else { widg = create_menu_item (FALSE, _("Crystal Builder")); g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(crystal_window), & view -> colorp[0][0]); gtk_menu_shell_append ((GtkMenuShell *)menu, widg); } j = (this_proj -> cell.ltype && this_proj -> steps == 1) ? 1 : 0; if (id == 0) { view -> ogl_box[1] = menu_item_new_with_submenu (_("Cell"), (this_proj -> natomes) ? this_proj -> cell.ltype : 0, menu_cell_edit(view, id, j)); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_box[1]); } else { gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Cell"), (this_proj -> natomes) ? this_proj -> cell.ltype : 0, menu_cell_edit(view, id, j))); } GtkWidget * ats = create_menu_item (FALSE, _("Atoms")); gtk_menu_shell_append ((GtkMenuShell *)menu, ats); GtkWidget * menua = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)ats, menua); j = (this_proj -> steps == 1) ? 1 : 0; for (i=0; i<5; i++) { widg = create_menu_item (TRUE, _(action_name[i])); g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(action_window), & view -> colorp[i][0]); gtk_menu_shell_append ((GtkMenuShell *)menua, widg); widget_set_sensitive (widg, this_proj -> nspec); widget_set_sensitive (widg, (i == 3) ? j : (this_proj -> natomes) ? j : 0); } if (id == 0) { gchar * rtext[2] = {i18n("Extract/Rebuild on Motion"), i18n("Extract/Rebuild on Copy")}; for (i=0; i<2; i++) { view -> rbuild[i] = gtk3_menu_item (menu, _(rtext[i]), IMG_STOCK, (gpointer)ECUT, G_CALLBACK(turn_rebuild), & view -> colorp[i][0], FALSE, 0, 0, TRUE, FALSE, view -> rebuild[i][0]); widget_set_sensitive (view -> rbuild[i], (this_proj -> steps == 1) ? 1 : 0); } } return menu; } #else /*! \fn GMenu * menu_cell_edit (glwin * view, int popm, int sensitive) \brief create the 'Edit -> Cell' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param sensitive menu items sensitivity (cell + single MD step) */ GMenu * menu_cell_edit (glwin * view, int popm, int sensitive) { GMenu * menu = g_menu_new (); gboolean sens; GCallback edit_handler[3] = {G_CALLBACK(wrapping_coord), G_CALLBACK(super_cell), G_CALLBACK(edition_win)}; int i, j, k, l; gchar * act; for (i=0; i<6; i++) { j = (i == 0) ? i : (i == 3) ? 1 : 2; if (i > 2) sens = sensitive; if (i == 0) sens = ! view -> wrapped; if (i == 3) { k = 0; for (l=0; l<3; l++) k += view -> anim -> last -> img-> abc -> extra_cell[l]; sens = k; } act = g_strdup_printf ("ceed-%d", i); if (i == 0 || i == 3) { append_opengl_item (view, menu, _(edit_names[i]), act, popm, i, NULL, IMG_NONE, NULL, FALSE, edit_handler[j], (gpointer)view, FALSE, FALSE, FALSE, sens); } else { k = (i < 3) ? i-1 : i-2; append_opengl_item (view, menu, _(edit_names[i]), act, popm, i, NULL, IMG_NONE, NULL, FALSE, edit_handler[j], & view -> colorp[k][0], FALSE, FALSE, FALSE, sens); } g_free (act); } return menu; } /*! \fn GMenu * menu_atom_edit (glwin * view, int popm) \brief create the 'Edit -> Atom(s)' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_atom_edit (glwin * view, int popm) { GMenu * menu = g_menu_new (); gchar * act; int i, j; project * this_proj = get_project_by_id(view -> proj); j = (this_proj -> steps == 1) ? 1 : 0; for (i=0; i<5; i++) { act = g_strdup_printf ("ated-%d", i); append_opengl_item (view, menu, _(action_name[i]), act, popm, 0, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(action_window), & view -> colorp[i][0], FALSE, FALSE, FALSE, (i == 3) ? j : (this_proj -> natomes) ? j : 0); g_free (act); } return menu; } /*! \fn G_MODULE_EXPORT void to_run_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data) \brief Extract/Rebuild menu items callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_run_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data) { tint * dat =(tint *)data; glwin * view = get_project_by_id(dat -> a) -> modelgl; gboolean doit = TRUE; GVariant * state = g_action_get_state (G_ACTION (action)); const gchar * rebuild = g_action_get_name ((GAction *)action); int lgt = strlen (rebuild); gchar * name = g_strdup_printf ("%c%c", rebuild[lgt-2], rebuild[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, rebuild); g_action_group_activate_action ((GActionGroup *)view -> action_group, (const gchar *)name, NULL); g_free (name); doit = FALSE; } if (doit) { turn_rebuild (NULL, NULL, data); g_action_change_state (G_ACTION (action), g_variant_new_boolean (! g_variant_get_boolean (state))); g_variant_unref (state); } } /*! \fn GMenu * extract_section (glwin * view, int popm) \brief create the 'Extract/Rebuild' menu items GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * extract_section (glwin * view, int popm) { int i; project * this_proj = get_project_by_id(view -> proj); GMenu * menu = g_menu_new (); gchar * rtext[2] = {i18n("Extract/Rebuild on Motion"), i18n("Extract/Rebuild on Copy")}; for (i=0; i<2; i++) { append_opengl_item (view, menu, _(rtext[i]), "aext", popm, i, NULL, IMG_STOCK, (gpointer)ECUT, FALSE, G_CALLBACK(to_run_rebuild), & view -> colorp[i][0], TRUE, view -> rebuild[i][0], FALSE, (this_proj -> steps == 1) ? 1 : 0); } return menu; } /*! \fn GMenu * menu_edit (glwin * view, int popm) \brief create the 'Edit' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_edit (glwin * view, int popm) { project * this_proj = get_project_by_id(view -> proj); GMenu * menu = g_menu_new (); append_opengl_item (view, menu, _("Crystal Builder"), "cbuilder", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(crystal_window), & view -> colorp[0][0], FALSE, FALSE, FALSE, TRUE); append_submenu (menu, _("Cell"), menu_cell_edit(view, popm, (this_proj -> cell.ltype && this_proj -> steps == 1) ? 1 : 0)); append_submenu (menu, _("Atom(s)"), menu_atom_edit(view, popm)); if (! popm) g_menu_append_section (menu, NULL, (GMenuModel*)extract_section(view, popm)); return menu; } #endif atomes_1.3.1/src/opengl/win/m_proj.c0000664000175000017500000001417115212624223017013 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_proj.c * @short Functions to create the 'View -> Projection' submenu * @author Sébastien Le Roux */ /* * This file: 'm_proj.c' * * Contains: * - The functions to create the 'View -> Projection' submenu * * List of functions: G_MODULE_EXPORT void set_camera_pos (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_set_camera_pos (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * menu_proj (glwin * view); GMenu * menu_proj (glwin * view, int popm); */ #include "global.h" #include "glview.h" #include "glwindow.h" #include "preferences.h" /*! \enum position */ enum position { RIGHT = 0, /*!< 0 */ LEFT = 1, /*!< 1 */ TOP = 2, /*!< 2 */ BOTTOM = 3, /*!< 3 */ FRONT = 4, /*!< 4 */ BACK = 5 /*!< 5 */ }; extern void camera_has_changed (gdouble value, gpointer data); /*! \fn G_MODULE_EXPORT void set_camera_pos (GtkWidget * widg, gpointer data) \brief set camera position callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_camera_pos (GtkWidget * widg, gpointer data) { tint * id = (tint *)data; double angle_x, angle_y; switch (id -> b) { case RIGHT: angle_x = 0.0; angle_y = -90.0; break; case LEFT: angle_x = 0.0; angle_y = 90.0; break; case TOP: angle_x = 90.0; angle_y = 0.0; break; case BOTTOM: angle_x = -90.0; angle_y = 0.0; break; case FRONT: angle_x = 0.0; angle_y = 0.0; break; case BACK: angle_x = 0.0; angle_y = 180.0; break; } if (preferences) { camera_has_changed (angle_x, & pref_pointer[3]); camera_has_changed (angle_y, & pref_pointer[4]); } else { vec4_t q_a, q_b; vec3_t axis; axis.x = 0.0; axis.y = 1.0; axis.z = 0.0; q_a = axis_to_quat (axis, -pi*angle_y/180.0); axis.x = 1.0; axis.y = 0.0; axis.z = 0.0; q_b = axis_to_quat (axis, -pi*angle_x/180.0); glwin * view = get_project_by_id(id -> a) -> modelgl; view -> anim -> last -> img -> rotation_quaternion = q4_mul (q_a, q_b); update (view); view -> anim -> last -> img -> c_angle[0] = - angle_x; view -> anim -> last -> img -> c_angle[1] = - angle_y; int i; for (i=0; i<2; i++) { if (view -> rep_win) { if (view -> rep_win -> camera_widg[i+3] && GTK_IS_WIDGET(view -> rep_win -> camera_widg[i+3])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> rep_win -> camera_widg[i+3], view -> anim -> last -> img -> c_angle[i]); } } } } } #ifdef GTK3 /*! \fn GtkWidget * menu_proj (glwin * view) \brief create the 'View -> Projection' submenu - GTK3 \param view the target glwin */ GtkWidget * menu_proj (glwin * view) { GtkWidget * menup = gtk_menu_new (); GtkWidget * r = create_menu_item (FALSE, _("Right [1, 0, 0]")); g_signal_connect (G_OBJECT (r), "activate", G_CALLBACK(set_camera_pos), & view -> colorp[RIGHT][0]); gtk_menu_shell_append ((GtkMenuShell *)menup, r); GtkWidget * l = create_menu_item (FALSE, _("Left [-1, 0, 0]")); g_signal_connect (G_OBJECT (l), "activate", G_CALLBACK(set_camera_pos), & view -> colorp[LEFT][0]); gtk_menu_shell_append ((GtkMenuShell *)menup, l); GtkWidget * t = create_menu_item (FALSE, _("Top [0, 1, 0]")); g_signal_connect (G_OBJECT (t), "activate", G_CALLBACK(set_camera_pos), & view -> colorp[TOP][0]); gtk_menu_shell_append ((GtkMenuShell *)menup, t); GtkWidget * b = create_menu_item (FALSE, _("Bottom [0, -1, 0]")); g_signal_connect (G_OBJECT (b), "activate", G_CALLBACK(set_camera_pos), & view -> colorp[BOTTOM][0]); gtk_menu_shell_append ((GtkMenuShell *)menup, b); GtkWidget * f = create_menu_item (FALSE, _("Front [0, 0, 1]")); g_signal_connect (G_OBJECT (f), "activate", G_CALLBACK(set_camera_pos), & view -> colorp[FRONT][0]); gtk_menu_shell_append ((GtkMenuShell *)menup, f); GtkWidget * a = create_menu_item (FALSE, _("Back [0, 0, -1]")); g_signal_connect (G_OBJECT (a), "activate", G_CALLBACK(set_camera_pos), & view -> colorp[BACK][0]); gtk_menu_shell_append ((GtkMenuShell *)menup, a); return menup; } #else /*! \fn G_MODULE_EXPORT void to_set_camera_pos (GSimpleAction * action, GVariant * parameter, gpointer data) \brief set camera position callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_set_camera_pos (GSimpleAction * action, GVariant * parameter, gpointer data) { set_camera_pos (NULL, data); } /*! \fn GMenu * menu_proj (glwin * view, int popm) \brief create the 'View -> Projection' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_proj (glwin * view, int popm) { GMenu * menu = g_menu_new (); gchar * projection[6]={i18n("Right [1, 0, 0]"), i18n("Left [-1, 0, 0]"), i18n("Top [0, 1, 0]"), i18n("Bottom [0, -1, 0]"), i18n("Front [0, 0, 1]"), i18n("Back [0, 0, -1]")}; int i; for (i=0; i<6; i++) { append_opengl_item (view, menu, _(projection[i]), "proj", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_set_camera_pos), & view -> colorp[i][0], FALSE, FALSE, FALSE, TRUE); } return menu; } #endif atomes_1.3.1/src/opengl/win/w_labels.c0000664000175000017500000006667715212624223017337 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_labels.c * @short Functions to create the 'atomic labels' tab of the atom(s) / clone(s) advanced configuration window \n Functions to create the measure labels window of the 'Measures' window * @author Sébastien Le Roux */ /* * This file: 'w_labels.c' * * Contains: * - The functions to create the 'atomic labels' tab of the atom(s) / clone(s) advanced configuration window - The functions to create the measure labels window of the 'Measures' window * * List of functions: G_MODULE_EXPORT gboolean scroll_set_label_shift (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean scroll_set_measure_factor (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean scroll_set_measure_width (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void init_labels_colors (image * img, int sp, int id); void label_shift_has_changed (gpointer data, double value); void mesure_factor_has_changed (gpointer data, double value); void measure_width_has_changed (gpointer data, double value); G_MODULE_EXPORT void set_measure_style (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_labels_format (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_labels_render (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void use_atom_default_colors (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void use_atom_default_colors (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_labels_font (GtkFontButton * fontb, gpointer data); G_MODULE_EXPORT void set_label_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_labels_position (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_label_shift (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_labels_scale (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_labels_scale (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_labels_tilt (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_measure_factor (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_measure_width (GtkRange * range, gpointer data); G_MODULE_EXPORT void enable_lines (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void enable_lines (GtkToggleButton * but, gpointer data); GtkWidget * labels_tab (glwin * view, int id); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #include "preferences.h" #define LABEL_FORMATS 5 gchar * lab_formats[LABEL_FORMATS] = {i18n("Element Name"), i18n("Atomic Symbol"), i18n("Atomic Symbol + Id. Number"), i18n("Sym. + Id. Num. Subscript"), i18n("Id. Number")}; GtkWidget * atom_color_box; GtkWidget ** color_title; GtkWidget * tilt; /*! \fn G_MODULE_EXPORT void set_measure_style (GtkComboBox * box, gpointer data) \brief change measure style \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_measure_style (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; if (id -> a != -1) { glwin * view = get_project_by_id(id -> a) -> modelgl; view -> anim -> last -> img -> mpattern[id -> b] = combo_get_active ((GtkWidget *)box); view -> create_shaders[MEASU] = TRUE; update (view); } else { tmp_mpattern[id -> b] = combo_get_active ((GtkWidget *)box); } } /*! \fn G_MODULE_EXPORT void set_labels_format (GtkComboBox * box, gpointer data) \brief change label(s) format \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_format (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; int i = combo_get_active ((GtkWidget *)box); if (! preferences) { glwin * view = get_project_by_id(id -> a) -> modelgl; if (i != view -> anim -> last -> img -> acl_format[id -> b]) { view -> anim -> last -> img -> acl_format[id -> b] = i; if (id -> b < 2) view -> create_shaders[LABEL] = TRUE; if (id -> b == 3 || id -> b == 4) view -> create_shaders[MEASU] = TRUE; update (view); } } else { tmp_acl_format[id -> b] = i; } } /*! \fn G_MODULE_EXPORT void set_labels_render (GtkComboBox * box, gpointer data) \brief change label(s) rendering mode \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_render (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; int i = combo_get_active ((GtkWidget *)box); if (! preferences) { glwin * view = get_project_by_id(id -> a) -> modelgl; if (i != view -> anim -> last -> img -> labels[id -> b].render) { view -> anim -> last -> img -> labels[id -> b].render = i; if (id -> b < 2) { view -> create_shaders[LABEL] = TRUE; } else if (id -> b == 2) { view -> create_shaders[MAXIS] = TRUE; } else if (id -> b == 3 || id -> b == 4) { combo_set_active (tilt, view -> anim -> last -> img -> mtilt[id -> b-3]); view -> create_shaders[MEASU] = TRUE; } update (view); } } else { tmp_label[id -> b] -> render = i; } } /*! \fn void init_labels_colors (image * img, int sp, int id) \brief initialize atomic labels colors \param img the target image \param sp the total number of chemical species \param id atom(s) 0 or clone(s) 1 */ void init_labels_colors (image * img, int sp, int id) { int i; for (i = 0; i < sp; i++) { img -> labels[id].color[i].red = img -> at_color[i+id*sp].red; img -> labels[id].color[i].green = img -> at_color[i+id*sp].green; img -> labels[id].color[i].blue = img -> at_color[i+id*sp].blue; img -> labels[id].color[i].alpha = 1.0; GdkRGBA col = colrgba_togtkrgba (img -> labels[id].color[i]); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(color_title[i]), & col); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void use_atom_default_colors (GtkCheckButton * but, gpointer data) \brief use default atom colors - toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void use_atom_default_colors (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void use_atom_default_colors (GtkToggleButton * but, gpointer data) \brief use default atom colors - toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void use_atom_default_colors (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *) data; gboolean val = button_get_status ((GtkWidget *)but); int b = id -> b; project * this_proj = get_project_by_id(id -> a); if (val) { if (this_proj -> modelgl -> anim -> last -> img -> labels[b].color != NULL) { init_labels_colors (this_proj -> modelgl -> anim -> last -> img, this_proj -> nspec, b); g_free (this_proj -> modelgl -> anim -> last -> img -> labels[b].color); } this_proj -> modelgl -> anim -> last -> img -> labels[b].color = NULL; this_proj -> modelgl -> anim -> last -> img -> labels[b].n_colors = 0; } else { this_proj -> modelgl -> anim -> last -> img -> labels[b].color = g_malloc0(2*this_proj -> nspec*sizeof*this_proj -> modelgl -> anim -> last -> img -> labels[b].color); init_labels_colors (this_proj -> modelgl -> anim -> last -> img, this_proj -> nspec, b); this_proj -> modelgl -> anim -> last -> img -> labels[b].n_colors = 2*this_proj -> nspec; } widget_set_sensitive (atom_color_box, ! val); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_labels_font (GtkFontButton * fontb, gpointer data) \brief change label(s) font \param fontb the GtkFontButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_font (GtkFontButton * fontb, gpointer data) { tint * id = (tint *) data; if (id -> a != -1) { glwin * view = get_project_by_id(id -> a) -> modelgl; g_free (view -> anim -> last -> img -> labels[id -> b].font); view -> anim -> last -> img -> labels[id -> b].font = g_strdup_printf ("%s", gtk_font_chooser_get_font (GTK_FONT_CHOOSER(fontb))); if (id -> b < 2) { view -> create_shaders[LABEL] = TRUE; } else if (id -> b == 2) { view -> create_shaders[MAXIS] = TRUE; } else if (id -> b == 3 || id -> b == 4) { view -> create_shaders[MEASU] = TRUE; } update (view); } else { tmp_label[id -> b] -> font = g_strdup_printf ("%s", gtk_font_chooser_get_font (GTK_FONT_CHOOSER(fontb))); } } /*! \fn G_MODULE_EXPORT void set_label_color (GtkColorChooser * colob, gpointer data) \brief change label(s) color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_label_color (GtkColorChooser * colob, gpointer data) { tint * id = (tint *) data; if (id -> a != -1) { glwin * view = get_project_by_id(id -> a) -> modelgl; view -> anim -> last -> img -> labels[id -> b].color[id -> c] = get_button_color (colob); if (id -> b < 2) view -> create_shaders[LABEL] = TRUE; if (id -> b == 3 || id -> b == 4) view -> create_shaders[MEASU] = TRUE; update (view); } else { tmp_label[id -> b] -> color[0] = get_button_color (colob); } } /*! \fn G_MODULE_EXPORT void set_labels_position (GtkComboBox * box, gpointer data) \brief change label(s) position \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_position (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; int i = combo_get_active ((GtkWidget *)box); if (id -> a != -1) { glwin * view = get_project_by_id(id -> a) -> modelgl; view -> anim -> last -> img -> labels[id -> b].position = i; if (id -> b < 2) view -> create_shaders[LABEL] = TRUE; if (id -> b == 3 || id -> b == 4) view -> create_shaders[MEASU] = TRUE; update (view); } else { tmp_label[id -> b] -> position = i; } } /*! \fn void label_shift_has_changed (gpointer data, double value) \brief change label(s) shift \param data the associated data pointer \param value the new label(s) shift */ void label_shift_has_changed (gpointer data, double value) { tint * id = (tint *) data; int i = id -> b / 10; int j = id -> b - i * 10; if (id -> a != -1) { glwin * view = get_project_by_id(id -> a) -> modelgl; view -> anim -> last -> img -> labels[i].shift[j] = value; if (id -> b < 2) view -> create_shaders[LABEL] = TRUE; update (view); } else { tmp_label[i] -> shift[j] = value; } } /*! \fn G_MODULE_EXPORT gboolean scroll_set_label_shift (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief change label(s) shift - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_label_shift (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { label_shift_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_label_shift (GtkRange * range, gpointer data) \brief change label(s) shift - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_label_shift (GtkRange * range, gpointer data) { label_shift_has_changed (data, gtk_range_get_value (range)); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_labels_scale (GtkCheckButton * but, gpointer data) \brief change label(s) scale - toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_scale (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_labels_scale (GtkToggleButton * but, gpointer data) \brief change label(s) scale - toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_scale (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *) data; int i = button_get_status ((GtkWidget *)but); if (id -> a != -1) { glwin * view = get_project_by_id(id -> a) -> modelgl; view -> anim -> last -> img -> labels[id -> b].scale = i; if (id -> b < 2) view -> create_shaders[LABEL] = TRUE; if (id -> b == 2) view -> create_shaders[MAXIS] = TRUE; if (id -> b == 3 || id -> b == 4) view -> create_shaders[MEASU] = TRUE; update (view); } else { tmp_label[id -> b] -> scale = i; } } /*! \fn G_MODULE_EXPORT void set_labels_tilt (GtkComboBox * box, gpointer data) \brief change label(s) tilt \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_tilt (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; int i = combo_get_active ((GtkWidget *)box); if (id -> a != -1) { glwin * view = get_project_by_id(id -> a) -> modelgl; view -> anim -> last -> img -> mtilt[id -> b] = i; if (id -> b < 2) view -> create_shaders[LABEL] = TRUE; if (id -> b == 3 || id -> b == 4) view -> create_shaders[MEASU] = TRUE; update (view); } else { tmp_mtilt[id -> b] = i; } } /*! \fn void mesure_factor_has_changed (gpointer data, double value) \brief change measure scale factor \param data the associated data pointer \param value the new scale factor */ void mesure_factor_has_changed (gpointer data, double value) { tint * id = (tint *) data; if (id -> a != -1) { glwin * view = get_project_by_id(id -> a) -> modelgl; view -> anim -> last -> img -> mfactor[id -> b] = (int)value; view -> create_shaders[MEASU] = TRUE; update (view); } else { tmp_mfactor[id -> b] = (int)value; } } /*! \fn G_MODULE_EXPORT gboolean scroll_set_measure_factor (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief change measure scall factor - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_measure_factor (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { mesure_factor_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_measure_factor (GtkRange * range, gpointer data) \brief change measure scall factor - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_measure_factor (GtkRange * range, gpointer data) { mesure_factor_has_changed (data, gtk_range_get_value (range)); } /*! \fn void measure_width_has_changed (gpointer data, double value) \brief change measure width \param data the associated data pointer \param value the new width value */ void measure_width_has_changed (gpointer data, double value) { tint * id = (tint *) data; if (id -> a != -1) { glwin * view = get_project_by_id(id -> a) -> modelgl; view -> anim -> last -> img -> mwidth[id -> b] = value; view -> create_shaders[MEASU] = TRUE; update (view); } else { tmp_mwidth[id -> b] = value; } } /*! \fn G_MODULE_EXPORT gboolean scroll_set_measure_width (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief change measure width - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_measure_width (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { measure_width_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_measure_width (GtkRange * range, gpointer data) \brief change measure width - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_measure_width (GtkRange * range, gpointer data) { measure_width_has_changed (data, gtk_range_get_value (range)); } GtkWidget * line_box; GtkWidget * lstyle; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void enable_lines (GtkCheckButton * but, gpointer data) \brief toggle enable measure lines callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void enable_lines (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void enable_lines (GtkToggleButton * but, gpointer data) \brief toggle enable measure lines callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void enable_lines (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *) data; glwin * view; if (id -> a != -1) view = get_project_by_id(id -> a) -> modelgl; int i, j; i = button_get_status ((GtkWidget *)but); widget_set_sensitive (line_box, i); if (i) { if (id -> a != -1) { j = view -> anim -> last -> img -> mpattern[id -> b] = 0; } else { j = tmp_mpattern[id -> b] = 0; } } else { if (id -> a != -1) { j = view -> anim -> last -> img -> mpattern[id -> b] = -1; } else { j = tmp_mpattern[id -> b] = -1; } } combo_set_active (lstyle, j); if (id -> a != -1) { view -> create_shaders[MEASU] = TRUE; update (view); } } /*! \fn GtkWidget * labels_tab (glwin * view, int lid) \brief create atomic label(s) tab for the atom(s) / clone(s) window \param view the target glwin \param lid label type (0 = atoms, 1 = clones, 3 = analysis measures, 4 = edition mode measures) */ GtkWidget * labels_tab (glwin * view, int lid) { int i; gchar * lpos[3] = {"x", "y", "z"}; project * this_proj; screen_label * label; int acl_format; gboolean mtilt; int mpattern; int mfactor; double mwidth; tint * lab_pointer; tint * measure_pointer; tint * shift_pointer[2]; if (! preferences) { this_proj = get_project_by_id (view -> proj); label = & view -> anim -> last -> img -> labels[lid]; lab_pointer = & view -> colorp[lid][0]; measure_pointer = (lid > 2) ? & view -> colorp[lid-3][0] : NULL; for (i=0; i<2; i++) shift_pointer[i] = & view -> colorp[lid*10+i][0]; if (lid < 2) { acl_format = view -> anim -> last -> img -> acl_format[lid]; } else { mtilt = view -> anim -> last -> img -> mtilt[lid-3]; mpattern = view -> anim -> last -> img -> mpattern[lid-3]; mfactor = view -> anim -> last -> img -> mfactor[lid-3]; mwidth = view -> anim -> last -> img -> mwidth[lid-3]; } } else { label = tmp_label[lid]; lab_pointer = & pref_pointer[lid]; measure_pointer = (lid > 2) ? & pref_pointer[lid-3] : NULL; for (i=0; i<2; i++) shift_pointer[i] = & pref_pointer[lid*10+i]; if (lid < 2) { acl_format = tmp_acl_format[lid]; } else { mtilt = tmp_mtilt[lid-3]; mpattern = tmp_mpattern[lid-3]; mfactor = tmp_mfactor[lid-3]; mwidth = tmp_mwidth[lid-3]; } } GtkWidget * tbox = create_vbox (BSEP); GtkWidget * vbox = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, tbox, vbox, FALSE, FALSE, 5); GtkWidget * box; if (lid < 2) { box = abox (vbox, _("Templates "), 0); GtkWidget * formats = create_combo (); for (i=0; iLabel(s):"), -1, 40, 0.0, 0.5), FALSE, FALSE, 0); } // Rendering box = abox (vbox, _("Rendering "), 0); GtkWidget * config = create_combo (); combo_text_append (config, _("Basic Text")); combo_text_append (config, _("Highlighted")); combo_set_active (config, label -> render); gtk_widget_set_size_request (config, 220, -1); g_signal_connect (G_OBJECT (config), "changed", G_CALLBACK(set_labels_render), lab_pointer); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, config, FALSE, FALSE, 10); // Font box = abox (vbox, _("Font"), 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, font_button (label -> font, 220, -1, G_CALLBACK(set_labels_font), lab_pointer), FALSE, FALSE, 10); if (lid == 3 || lid == 4) { box = abox (vbox, _("Font color"), 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, color_button (label -> color[0], TRUE, 220, -1, G_CALLBACK(set_label_color), lab_pointer), FALSE, FALSE, 10); } // Position box = abox (vbox, _("Position"), 0); GtkWidget * position = create_combo (); combo_text_append (position, _("Always Visible")); combo_text_append (position, _("Normal")); combo_set_active (position, label -> position); gtk_widget_set_size_request (position, 220, -1); g_signal_connect (G_OBJECT (position), "changed", G_CALLBACK(set_labels_position), lab_pointer); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, position, FALSE, FALSE, 10); // Size / scale box = abox (vbox, _("Size"), 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, check_button (_("Scale with zoom in/out"), 220, -1, label -> scale, G_CALLBACK(set_labels_scale), lab_pointer), FALSE, FALSE, 10); if (lid == 3 || lid == 4) { // Tilt box = abox (vbox, _("Tilt"), 0); tilt = create_combo (); combo_text_append (tilt, _("None")); combo_text_append (tilt, _("Adapted")); combo_set_active (tilt, mtilt); gtk_widget_set_size_request (tilt, 220, -1); g_signal_connect (G_OBJECT (tilt), "changed", G_CALLBACK(set_labels_tilt), measure_pointer); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, tilt, FALSE, FALSE, 10); } GtkWidget * chbox; if (lid < 3) { box = abox (vbox, _("Distance to atom [Å]"), 0); chbox = create_hbox (0); for (i=0; i<2; i++) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, markup_label(lpos[i], 30, -1, 0.5, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, create_hscale(-5.0, 5.0, 0.01, label -> shift[i], (preferences) ? GTK_POS_RIGHT : GTK_POS_TOP, 3, 100, G_CALLBACK(set_label_shift), G_CALLBACK(scroll_set_label_shift), shift_pointer[i]), FALSE, FALSE, 0); } if (preferences) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, chbox, FALSE, FALSE, 0); } else { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, chbox, FALSE, FALSE, 0); } } // Colors gboolean ac; if (label -> color == NULL) { ac = TRUE; } else { ac = FALSE; } if (lid < 3 && ! preferences) { box = abox (vbox, _("Color(s)"), 0); GtkWidget * col_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, col_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, col_box, check_button (_("Use atom colors"), 100, 40, ac, G_CALLBACK(use_atom_default_colors), (gpointer)lab_pointer), FALSE, FALSE, 0); atom_color_box = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, col_box, atom_color_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, atom_color_box, markup_label (_("Please select atom label colors:"), -1, -1, 0.25, 0.5), FALSE, FALSE, 5); color_title = g_malloc0(this_proj -> nspec*sizeof*color_title); for (i=0; i< this_proj -> nspec; i++) { chbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, markup_label(this_proj -> chemistry -> label[i], 120, -1, 0.5, 0.5), FALSE, FALSE, 20); if (label -> color == NULL) { color_title[i] = color_button(view -> anim -> last -> img -> at_color[i], TRUE, 80, -1, G_CALLBACK(set_label_color), & view -> colorp[lid][i]); } else { color_title[i] = color_button(label -> color[i], TRUE, 80, -1, G_CALLBACK(set_label_color), & view -> colorp[lid][i]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, color_title[i], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, atom_color_box, chbox, FALSE, FALSE, 0); } widget_set_sensitive (atom_color_box, ! ac); } else if (lid >= 3) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Line(s):"), -1, 40, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Show/Hide"), -1, 40, mpattern+1, G_CALLBACK(enable_lines), measure_pointer), FALSE, FALSE, 30); line_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, line_box, TRUE, TRUE, 0); box = abox (line_box, _("Pattern"), 0); GtkListStore * store = gtk_list_store_new (1, GDK_TYPE_PIXBUF); GtkTreeIter iter; for (i=0; i Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_crystal.c * @short Functions to create a crystal database window \n This is a project and not in use for the time being * @author Sébastien Le Roux */ /* * This file: 'w_crystal.c' * * Contains: * - The functions to create a crystal database window - This is a project and not in use for the time being * * List of functions: int cif_preview (const char * filetoread); int get_cgroup (gchar * str); int get_cif_files (); int get_num_cif (); int get_num_group (); int get_cif_info_from_cif_node (xmlNodePtr * cnode); int open_cif_database (gchar * filetoread); int prepare_data_base (int db); int build_crystal_from_cif_database (project * this_proj); void sort_crystal_files (int num_c); void fill_cif_tree (GtkListStore * store); void fill_group_tree (GtkListStore * store); void fill_symmetry_tree (GtkListStore * store); void fill_database_tree (GtkListStore * store); void insert_cif_preview (); void prepare_cif_preview (int id); void prepare_cif_list (int dba, int sym, int spg); GtkWidget * cif_tree (GtkListStore * store, int id, gchar * name); */ /* Crystal database window, project not in use for the time being */ #include "global.h" #include "interface.h" #include "project.h" #include "glview.h" #include "glwindow.h" #include "bind.h" #define DATABASE 1 gchar * database_list[DATABASE] = {"American Mineralogist Crystal Structure Database"}; /*"Crystallography Open Database", "Database of Zeolite Structures"};*/ gchar * database_dir[DATABASE] = {"AMCSD"};//, "COD", "DZC"}; #define SYMMETRIES 8 gchar * sym_list[SYMMETRIES]= {"Triclinic", "Monoclinic", "Orthorhombic", "Tetragonal", "Trigonal", "Hexagonal", " Cubic", "Other"}; extern G_MODULE_EXPORT void on_calc_bonds_released (GtkWidget * widg, gpointer data); #ifdef GTK3 #ifndef G_OS_WIN32 extern void gtk_window_change_gdk_visual (GtkWidget * win); #endif // G_OS_WIN32 #endif // GTK3 extern gboolean create_3d_model (int p, gboolean load); extern G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data); extern void init_camera (project * this_proj); extern void alloc_proj_data (project * this_proj, int cid); extern int action_atoms_from_project (project * this_proj, atom_search * asearch, int status, gboolean visible); extern void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible); extern void create_object_from_library (int p); GtkListStore * database_store; GtkTreeIter first_database_iter; GtkListStore * symmetry_store; GtkTreeIter first_symmetry_iter; GtkListStore * group_store; GtkTreeIter first_group_iter; GtkListStore * cif_store; GtkTreeIter first_cif_iter; GtkTreeSelection * cifselect[3]; int the_database; int the_symmetry; int the_group; gchar * the_crystal; gchar ** cif_file_name; gchar ** cif_name; GtkWidget * cif_preview_box = NULL; GtkWidget * cif_preview_plot = NULL; project * cif_proj = NULL; gchar * other_name[5]; int o_names; /*! \fn int cif_preview (const char * filetoread) \brief NOT USED ! \param filetoread */ int cif_preview (const char * filetoread) { int i, j, k; if (cif_proj != NULL) close_project (cif_proj); init_project (TRUE); cif_proj = active_project; cif_proj -> coordfile = g_strdup_print ("%s", filetoread); if (open_coordinate_file (6)) { // Cif error return 0; } return 1; } /*! \fn int get_cgroup (gchar * str) \brief NOT USED ! \param str */ int get_cgroup (gchar * str) { int i; for (i=0; i0) { str = g_strdup_printf ("%s", cif_name[i]); cif_name[i] = g_strdup_printf ("%s", cif_name[j]); cif_name[j] = g_strdup_printf ("%s", str); str = g_strdup_printf ("%s", cif_file_name[i]); cif_file_name[i] = g_strdup_printf ("%s", cif_file_name[j]); cif_file_name[j] = g_strdup_printf ("%s", str); } } } for(i=0;i d_type == DT_REG) { str = g_strdup_printf ("%s/%s", libdir, dir -> d_name); if (open_cif_file(str) != NULL) val ++; g_free (str); } } closedir(d); } #endif if (val > 0) { cif_file_name = calloc(val, sizeof*cif_file_name); cif_name = calloc(val, sizeof*cif_name); val = 0; #ifdef G_OS_WIN32 hFind = FindFirstFile (libwin32, & ffd); if (hFind != INVALID_HANDLE_VALUE) { if (ffd.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY) { str = g_strdup_printf ("%s\\%s", libdir, (char *)ffd.cFileName); fcif = open_cif_file(str); if (fcif != NULL) { cif_file_name[val] = g_strdup_printf ("%s", str); cif_name[val] = g_strdup_printf ("%s", fcif); val ++; g_free (fcif); } g_free (str); } while (FindNextFile(hFind, &ffd) != 0) { if (ffd.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY) { str = g_strdup_printf ("%s\\%s", libdir, (char *)ffd.cFileName); fcif = open_cif_file(str); if (fcif != NULL) { cif_file_name[val] = g_strdup_printf ("%s", str); cif_name[val] = g_strdup_printf ("%s", fcif); val ++; g_free (fcif); } g_free (str); } } FindClose(hFind); } #else d = opendir (libdir); if (d) { while ((dir = readdir(d)) != NULL) { if (dir -> d_type == DT_REG) { str = g_strdup_printf ("%s/%s", libdir, dir -> d_name); fcif = open_cif_file(str); if (fcif != NULL) { cif_file_name[val] = g_strdup_printf ("%s", str); cif_name[val] = g_strdup_printf ("%s", fcif); val ++; g_free (fcif); } g_free (str); } } closedir(d); } #endif sort_crystal_files (val); } return val; } /*! \fn int get_num_cif () \brief NOT USED ! */ int get_num_cif () { return num_cif[the_symmetry][the_group]; } /*! \fn int get_num_group () \brief NOT USED ! */ int get_num_group () { return num_group[the_symmetry]; } /*! \fn void fill_cif_tree (GtkListStore * store) \brief NOT USED ! \param store */ void fill_cif_tree (GtkListStore * store) { GtkTreeIter cif_level; int i; for (i=0; i modelgl -> plot, 0, 0, 4, 4); gtk_grid_attach (GTK_GRID (grid), markup_label(_("Formula:"), 100, -1, 0.0, 0.5), 5, 1, 3, 1); int i; for (i=0; i nspec; i++) { if (i > 0) { str = g_strdup_printf ("%s %s", str, cif_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s", cif_proj -> chemistry -> label[i]); } if (cif_proj -> chemistry -> nsps[i] > 1) { str = g_strdup_printf ("%s%d", str, cif_proj -> chemistry -> nsps[i]); } str = g_strdup_printf ("%s", str); } gtk_grid_attach (GTK_GRID (grid), markup_label(str, 100, -1, 0.0, 0.5), 8, 1, 3, 1); g_free (str); gtk_grid_attach (GTK_GRID (grid),markup_label(_("Density:"), 100, -1, 0.0, 0.5), 5, 2, 3, 1); str = g_strdup_printf ("%.3f g/cm3", cif_proj -> density); gtk_grid_attach (GTK_GRID (grid), markup_label(str, 100, -1, 0.0, 0.5), 8, 2, 3, 1); g_free (str); gtk_grid_attach (GTK_GRID (grid), markup_label(_("Name:"), 100, -1, 0.0, 0.5), 0, 5, 3, 1); str = g_strdup_printf ("%s", ); gtk_grid_attach (GTK_GRID (grid), markup_label(str, 100, 30, 0.0, 0.5), 3, 5, 11, 1); show_the_widgets_all (cif_preview_box); } /*! \fn void prepare_cif_preview (int id) \brief NOT USED ! \param id */ void prepare_cif_preview (int id) { if (cif_file_name != NULL) { if (cif_preview (cif_file_name[id])) { if (cif_preview_plot != NULL) gtk_widget_destroy (cif_preview_plot); cif_proj -> run = TRUE; active_project_changed (cif_proj -> id); create_3d_model (cif_proj -> id, FALSE); insert_cif_preview (); bonds_update = 0; active_glwin = cif_proj -> modelgl; active_glwin -> init = FALSE; active_image = & active_glwin -> anim -> last -> img; on_calc_bonds_released (NULL, NULL); cif_proj -> modelgl -> anim -> last -> img.quality = 30; cif_proj -> modelgl -> anim -> last -> img.rep = ORTHOGRAPHIC; gtk_widget_set_size_request (cif_proj -> modelgl -> plot, 150, 150); update (cif_proj -> modelgl); } } } /*! \fn int get_cif_info_from_cif_node (xmlNodePtr * cnode) \brief NOT USED ! \param cnode */ int get_cif_info_from_cif_node (xmlNodePtr * cnode) { return 1; } /*! \fn void prepare_cif_list (int dba, int sym, int spg) \brief NOT USED ! \param dba \param sym \param spg */ void prepare_cif_list (int dba, int sym, int spg) { #ifdef G_OS_WIN32 data_xml = g_strdup_printf ("%s\\crystals\\%s_list.xml", PACKAGE_LIB_DIR, database_dir[dba]); #else data_xml = g_strdup_printf ("%s/crystals/%s_list.xml", PACKAGE_LIB_DIR, database_dir[dba]); #endif xmlDoc * doc; xmlTextReaderPtr reader; const xmlChar cif_base[8]="cif-database"; xmlChar * cdata; xmlNodePtr racine, node, sym_node, group_node, cif_node; reader = xmlReaderForFile(filetoread, NULL, 0); if (reader == NULL) { return 0; } else { doc = xmlParseFile(filetoread); if (doc == NULL) return 0; racine = xmlDocGetRootElement(doc); if (strcmp((char *)(racine -> name), (char *)cif_base) != 0) return clean_xml_data (doc, reader); node = findnode (racine -> children, "cif-list"); if (node == NULL) return clean_xml_data (doc, reader); sym_node = findnode (sym_node, sym_list[sym]); if (sym_node == NULL) return clean_xml_data (doc, reader); group_node = findnode (sym_node, group_names_by_sym[sym][spg]); cif_file_name = calloc(num_cif_by_sym_group[sym][spg], sizeof*cif_file_name); file_node = group_node -> properties; while (file_node) { cif_node = file_node -> children; if (cif_node == NULL) return clean_xml_data (doc, reader); if (! get_cif_info_from_cif_node (cif_node)) return 0; } xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); } } /*! \fn int open_cif_database (gchar * filetoread) \brief NOT USED ! \param filetoread */ int open_cif_database (gchar * filetoread) { xmlDoc * doc; xmlTextReaderPtr reader; const xmlChar cif_base[8]="cif-database"; xmlChar * cdata; xmlNodePtr racine, node, sym_node, group_node, cif_node; gchar * str; /* * build an xmlReader for that file */ reader = xmlReaderForFile(filetoread, NULL, 0); if (reader == NULL) { return 0; } else { doc = xmlParseFile(filetoread); if (doc == NULL) return 0; racine = xmlDocGetRootElement(doc); if (strcmp((char *)(racine -> name), (char *)cif_base) != 0) return clean_xml_data (doc, reader); node = racine -> children; node = findnode (racine -> children, "num-cif"); if (node == NULL) return clean_xml_data (doc, reader); cdata = xmlNodeGetContent(node); total_num_cif = (int)string_to_double ((gpointer)cdata); xmlFree (cdata); sym_node = findnode (racine -> children, "sym-cif"); if (sym_node == NULL) return clean_xml_data (doc, reader); int i, j; for (i=0; i properties; while (group_spec) { cif_node = group_spec -> children; if (cif_node == NULL) return clean_xml_data (doc, reader); if (strcmp("num_cif", (char *)cif_node -> name) == 0) { cdata = xmlNodeGetContent(cif_node); num_cif_by_sym_group[i][j] = (int)string_to_double ((gpointer)cdata); xmlFree (cdata); } } cdata = xmlNodeGetContent(group); group_names_by_sym[i][j] = g_strdup_printf ("%s", content); } } sym_node = findnode (racine -> children, "cif-list"); if (sym_node == NULL) return clean_xml_data (doc, reader); for (i=0; i modelgl -> win)); #ifdef GTK3 #ifdef GTKGLAREA #ifndef G_OS_WIN32 if (! atomes_visual) gtk_window_change_gdk_visual (clib); #endif // G_OS_WIN32 #endif // GTKGLAREA #endif // GTK3 gtk_dialog_add_button (GTK_DIALOG(clib), _("Build"), GTK_RESPONSE_APPLY); GtkWidget * vbox = gtk_dialog_get_content_area(GTK_DIALOG (clib)); GtkWidget * hbox = create_hbox (5); gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0); cif_file_name = cif_name = NULL; database_store = gtk_list_store_new (3, G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING); gtk_box_pack_start (GTK_BOX(hbox), cif_tree (database_store, 0, _("Database")), FALSE, FALSE, 0); group_store = gtk_list_store_new (3, G_TYPE_INT, G_TYPE_INT,G_TYPE_STRING); gtk_box_pack_start (GTK_BOX(hbox), cif_tree (database_store, 1, _("Symmetry")), FALSE, FALSE, 0); group_store = gtk_list_store_new (3, G_TYPE_INT, G_TYPE_INT,G_TYPE_STRING); gtk_box_pack_start (GTK_BOX(hbox), cif_tree (group_store, 2, _("Group")), FALSE, FALSE, 0); cif_store = gtk_list_store_new (3, G_TYPE_INT, G_TYPE_INT,G_TYPE_STRING); gtk_box_pack_start (GTK_BOX(hbox), cif_tree (cif_store, 3, _("Crystal")), FALSE, FALSE, 0); fill_database_store (database_store); cif_preview_box = create_hbox(0); gtk_box_pack_start (GTK_BOX(hbox), cif_preview_box, FALSE, FALSE, 0); cif_preview_plot = NULL; the_database = the_group = 0; gtk_tree_selection_select_iter (cifselect[0], & first_database_iter); gtk_tree_selection_select_iter (cifselect[1], & first_symmetry_iter); gtk_tree_selection_select_iter (cifselect[2], & first_group_iter); gtk_list_store_clear (cif_store); fill_cif_tree (cif_store); gtk_tree_selection_select_iter (cifselect[3], & first_cif_iter); show_the_widgets_all (clib); prepare_cif_preview (0); this_proj -> modelgl -> nth_copy = 0; switch (gtk_dialog_run (GTK_DIALOG(clib))) { case GTK_RESPONSE_APPLY: gtk_widget_set_sensitive (vbox, 0); this_proj -> modelgl -> other_status = 2; create_object_from_library (cif_proj -> id); gtk_widget_set_sensitive (vbox, 1); break; default: res = 0; break; } gtk_widget_destroy (clib); active_project_changed (active); if (cif_file_name != NULL) free (cif_file_name); if (cif_name != NULL) free (cif_name); if (cif_proj != NULL) close_project (cif_proj); cif_proj = NULL; return res; } atomes_1.3.1/src/opengl/win/initcoord.c0000664000175000017500000005537115212624223017526 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file initcoord.c * @short Coordinations and polyhedra menus initialization \n Coordinations and polyhedra GTK3 menus and menu items creation \n Initialization of coordinations and polyhedra related data from Fortran90 information * @author Sébastien Le Roux */ /* * This file: 'initcoord.c' * * Contains: * - Coordinations and polyhedra menu initialization - Coordinations and polyhedra GTK3 menus and menu items creation - Initialization of coordinations and polyhedra related data from Fortran90 information * * List of functions: void gcid_spcolor_setup (int sp, int id); void set_color_map_sensitive (glwin * view); void set_advanced_bonding_menus (glwin * view); void prep_all_coord_menus (glwin * view); void partial_geo_out_ (int * sp, int * id, int * ngsp, int coord[* ngsp]); void allocate_partial_geo_ (int * sp, int * ngsp); void init_menu_coordinations_ (int * id, int * sp, int * ngsp, int coordt[* ngsp]); void init_menu_fragmol_ (int * id); void init_menurings_ (int * coo, int * ids, int * ngsp, int coordt[* ngsp], int * init); void init_opengl_coords (int id, int nt, int init); void send_coord_opengl_ (int * id, int * num, int * cmin, int * cmax, int * nt, int coord[* num]); GtkWidget * coord_view_setup (int * sp, int id, int jd); GtkWidget * coord_color_setup (int * sp, int id, int jd); GtkWidget * poly_show_setup (int * sp, int id, int jd); GtkWidget * create_coord_menu (int p, char * name, gboolean va, GtkWidget * menu, qint * data); ColRGBA init_color (int id, int numid); */ #include "global.h" #include "interface.h" #include "bind.h" #include "color_box.h" #include "glwindow.h" #include "glview.h" extern GtkWidget * coord_menu (glwin * view); extern cairo_surface_t * col_surface (double r, double g, double b, int x, int y); extern G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data); extern void setup_molecules (); extern int * duplicate_int (int num, int * old_val); int ** idgeo = NULL; /*! \fn ColRGBA init_color (int id, int numid) \brief initialize color based id number over total number of elements \param id the id number \param numid the total number of elements */ ColRGBA init_color (int id, int numid) { float a, b; ColRGBA col; if (numid > 5) { a = (float)id; b = (float)numid / 4.0; if (a < b) { col.red = 1.0; col.green = a / b; col.blue = 0.0; } else if (a < 2*b) { col.red = 1.0 - (1.0 * (a-b)/b); col.green = 1.0; col.blue = 0.0; } else if (a < 3*b) { col.red = 0.0; col.green = 1.0; col.blue = (1.0 * (a-2.0*b)/b); } else { col.red = 0.0; col.green = 1.0 - (1.0 * (a-3.0*b)/b); col.blue = 1.0; } col.alpha = 1.0; } else { col = std[id]; col.alpha = 1.0; } return col; } /*! \fn void gcid_spcolor_setup (int sp, int id) \brief prepare color pointers \param sp the chemical species \param id the coordination id */ void gcid_spcolor_setup (int sp, int id) { int i; if (active_glwin -> gcid[id] == NULL) { active_glwin -> gcid[id] = g_malloc0(active_coord -> totcoord[id]*sizeof*active_glwin -> gcid[id]); for (i=0; i totcoord[id]; i++) { active_glwin -> gcid[id][i] = g_malloc0(64*sizeof*active_glwin -> gcid[id][i]); } } active_image -> spcolor[id][sp] = g_malloc0(active_coord -> totcoord[id]*sizeof*active_image -> spcolor[id][sp]); } #ifdef GTK3 // GTK3 Menu Action To Check /*! \fn void set_color_map_sensitive (glwin * view) \brief set color map menu items sensitivity GTK3 \param view the target glwin */ void set_color_map_sensitive (glwin * view) { int i, j; for (i=0; i color_styles[i], 1); if (j == 3) widget_set_sensitive (view -> color_styles[i], view -> adv_bonding[0]); if (j == 4) widget_set_sensitive (view -> color_styles[i], view -> adv_bonding[1]); if (j == 5) widget_set_sensitive (view -> color_styles[i], (get_project_by_id(view -> proj) -> force_field[0]) ? 1 : 0); if (j == 6) widget_set_sensitive (view -> color_styles[i], (! (i/ATOM_MAPS) || view -> custom_map) ? 1 : 0); } } /*! \fn void set_advanced_bonding_menus (glwin * view) \brief set sensitivity of advanced bonding menus GTK3 \param view the target glwin */ void set_advanced_bonding_menus (glwin * view) { int i; for (i=0; i<2; i++) { widget_set_sensitive (view -> ogl_smode[2*i+2], view -> adv_bonding[0]); widget_set_sensitive (view -> ogl_smode[2*i+3], view -> adv_bonding[1]); widget_set_sensitive (view -> ogl_mode[2+i+NINPUTS], view -> adv_bonding[1]); } } /*! \fn void prep_all_coord_menus (glwin * view) \brief prepare coordination menus GTK3 \param view the target glwin */ void prep_all_coord_menus (glwin * view) { // GTK3 Menu Action To Check set_color_map_sensitive (view); gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_coord[0], coord_menu (view)); widget_set_sensitive (view -> ogl_coord[3], view -> adv_bonding[0]); widget_set_sensitive (view -> ogl_coord[4], view -> adv_bonding[1]); show_the_widgets (view -> ogl_coord[0]); set_advanced_bonding_menus (view); } /*! \fn GtkWidget * coord_view_setup (int * sp, int id, int jd) \brief create coordination menu elements GTK3 \param sp the chemical species \param id the coordination (0=total, 1=partial, >1 rings) \param jd pop menu or main app menu */ GtkWidget * coord_view_setup (int * sp, int id, int jd) { GtkWidget * menuv = gtk_menu_new (); if (id < 2) { active_glwin -> oglmv[jd][id][* sp] = NULL; active_glwin -> oglmv[jd][id][* sp] = create_menu_item (TRUE, active_chem -> label[* sp]); gtk_menu_item_set_submenu ((GtkMenuItem *)active_glwin -> oglmv[jd][id][* sp], menuv); } return menuv; } /*! \fn GtkWidget * coord_color_setup (int * sp, int id, int jd) \brief create coordination color menu elements GTK3 \param sp the chemical species \param id the coordination (0=total, 1=partial, >1 rings) \param jd pop menu or main app menu */ GtkWidget * coord_color_setup (int * sp, int id, int jd) { if (! jd) gcid_spcolor_setup (* sp, id); GtkWidget * menuc = NULL; menuc = gtk_menu_new (); if (id < 2) { active_glwin -> oglmc[jd][id][* sp] = NULL; active_glwin -> oglmc[jd][id][* sp] = create_menu_item (TRUE, active_chem -> label[* sp]); gtk_menu_item_set_submenu ((GtkMenuItem *)active_glwin -> oglmc[jd][id][* sp], menuc); } return menuc; } /*! \fn GtkWidget * poly_show_setup (int * sp, int id, int jd) \brief create polyhedra menu item elements GTK3 \param sp the chemical species \param id the coordination (0=total, 1=partial, >1 rings) \param jd pop menu or main app menu */ GtkWidget * poly_show_setup (int * sp, int id, int jd) { GtkWidget * menup = gtk_menu_new (); active_glwin -> oglmpv[jd][id][* sp] = NULL; if (id < 2) { active_glwin -> oglmpv[jd][id][* sp] = create_menu_item (TRUE, active_chem -> label[* sp]); } else { active_glwin -> oglmpv[jd][id][* sp] = create_menu_item (TRUE, _("Show/Hide")); } gtk_menu_item_set_submenu ((GtkMenuItem *)active_glwin -> oglmpv[jd][id][* sp], menup); return menup; } /*! \fn GtkWidget * create_coord_menu (int p, char * name, gboolean va, GtkWidget * menu, qint * data) \brief create coordination/polyhedra menu widget GTK3 \param p coordination (0), or polyhedra (1) \param name text of the menu item \param va status, coordination or polyhedra visible or not (1/0) \param menu the GtkWidget menu to attach the menu item to \param data the associated data pointer */ GtkWidget * create_coord_menu (int p, char * name, gboolean va, GtkWidget * menu, qint * data) { GtkWidget * coord_widget = gtk3_menu_item (menu, name, IMG_NONE, NULL, NULL, NULL, FALSE, 0, 0, TRUE, FALSE, va); if (p == 0) { g_signal_connect (G_OBJECT (coord_widget), "activate", G_CALLBACK(show_hide_coord), data); } else { g_signal_connect (G_OBJECT (coord_widget), "activate", G_CALLBACK(show_hide_poly), data); } return coord_widget; } #endif /*! \fn void partial_geo_out_ (int * sp, int * id, int * ngsp, int coord[* ngsp]) \brief partial coordination data from Fortran90 \param sp the chemical species \param id the partial coordination id \param ngsp the number of chemical species \param coord the list of partial coordination(s) for that chemical species and coordination id */ void partial_geo_out_ (int * sp, int * id, int * ngsp, int coord[* ngsp]) { active_coord -> partial_geo[* sp][* id] = duplicate_int (* ngsp, coord); } /*! \fn void allocate_partial_geo_ (int * sp, int * ngsp) \brief allocate partial coordination(s) data \param sp the chemical species \param ngsp the number of distinct coordination(s) for that chemical species */ void allocate_partial_geo_ (int * sp, int * ngsp) { if (active_coord -> partial_geo[* sp] != NULL) { g_free (active_coord -> partial_geo[* sp]); active_coord -> partial_geo[* sp] = NULL; } active_coord -> partial_geo[* sp] = g_malloc0(* ngsp * sizeof*active_coord -> partial_geo[* sp]); } /*! \fn void init_menu_coordinations_ (int * id, int * sp, int * ngsp, int coordt[*ngsp]) \brief getting atomic coordinations data from Fortran90, and related GTK3 menu elements creation \param id 0 for total coordination(s), 1 for partial coordination(s) \param sp the chemical species \param ngsp the number of distinct coordination(s) for that chemical species \param coordt the list of coordination(s) for that chemical species */ void init_menu_coordinations_ (int * id, int * sp, int * ngsp, int coordt[* ngsp]) { int i, j, k, l, m, n, o; #ifdef GTK3 // GTK3 Menu Action To Check gchar * str, * env; GtkWidget * spm; GtkWidget * menupv; GtkWidget * menuc; GtkWidget * menuv; #endif i = 0; for (j=0; j < * sp; j++) { i += active_coord -> ntg[* id][j]; } j = 2*active_project -> nspec; for (l=0; l < * id; l++) { j += active_coord -> totcoord[l]; } k = i + j; if (active_coord -> geolist[* id][* sp] != NULL) { g_free (active_coord -> geolist[* id][* sp]); active_coord -> geolist[* id][* sp] = NULL; } active_coord -> geolist[* id][* sp] = duplicate_int (* ngsp, coordt); active_coord -> ntg[* id][* sp] = * ngsp; l = 0; for (m=0; m < * ngsp; m++) { if (* id) { n = 0; for (o=0; o nspec; o++) { n += active_coord -> partial_geo[* sp][m][o]; } } else { n = coordt[m]; } if (n > 2) { l ++; active_image -> show_poly[* id][m+i] = TRUE; } else { active_image -> show_poly[* id][m+i] = FALSE; } } #ifdef GTK4 gcid_spcolor_setup (* sp, * id); for (m=0; m < * ngsp; m++) { active_image -> show_coord[* id][m+i] = TRUE; active_coord -> geolist[* id][* sp][m] = coordt[m]; if (* id) { active_image -> spcolor[* id][* sp][m] = init_color (m+i, active_coord -> totcoord[* id]); } else { active_image -> spcolor[* id][* sp][m] = init_color (coordt[m]-active_coord -> cmin, active_coord -> cmax-active_coord -> cmin); } active_image -> show_poly[* id][m+i] = FALSE; active_image -> spcolor[* id][* sp][m].alpha = DEFAULT_ALPHA; color_box (active_glwin, k+m, * sp, m); } #else // GTK3 Menu Action To Check for (m=0; m<2; m++) { menuc = coord_color_setup (sp, * id, m); menuv = coord_view_setup (sp, * id, m); if (l > 0) { menupv = poly_show_setup (sp, * id, m); } else { active_glwin -> oglmpv[m][* id][* sp] = NULL; } for (n=0; n < * ngsp; n++) { if (* id) { env = env_name (active_project, n, * sp, 1, NULL); str = exact_name (env); g_free (env); spm = create_menu_item_from_widget (markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); } else { str = g_strdup_printf ("%d", coordt[n]); spm = create_menu_item (TRUE, str); } if (! m) { active_image -> show_coord[* id][n+i] = TRUE; active_coord -> geolist[* id][* sp][n] = coordt[n]; if (* id) { active_image -> spcolor[* id][* sp][n] = init_color (n+i, active_coord -> totcoord[* id]); } else { active_image -> spcolor[* id][* sp][n] = init_color (coordt[n]-active_coord -> cmin, active_coord -> cmax-active_coord -> cmin); } active_image -> spcolor[* id][* sp][n].alpha = DEFAULT_ALPHA; } active_glwin -> ogl_geom[m][* id][n+i] = create_coord_menu (0, str, TRUE, menuv, & active_glwin -> gcid[* id][n+i][* id]); gtk_menu_shell_append ((GtkMenuShell *)menuc, spm); gtk_menu_item_set_submenu ((GtkMenuItem *)spm, color_box (active_glwin, k+n, * sp, n)); if (active_image -> show_poly[* id][n+i]) { // The polyhedra show/hide menu active_glwin -> ogl_poly[m][* id][n+i] = create_coord_menu (1, str, FALSE, menupv, & active_glwin -> gcid[* id][n+i][* id]); if (m) active_image -> show_poly[* id][n+i] = FALSE; } g_free (str); } } #endif } /*! \fn void init_menu_fragmol_ (int * id) \brief getting fragment(s)/molecule(s) data from Fortran90, and related GTK3 menu elements creation \param id 2 for fragments, 3 for molecules */ void init_menu_fragmol_ (int * id) { #ifdef DEBUG gchar * keyw[2] = {i18n("fragment(s)"), i18n("molecule(s)")}; if (active_project -> steps > 1) { gchar * str = g_strdup_printf (_("Maximum number of %s per MD step: %d"), _(keyw[* id -2]), active_coord -> totcoord[* id]); g_debug ("%s", str); } #endif // DEBUG if (* id == 3) { if (active_image -> show_coord[3]) g_free (active_image -> show_coord[3]); active_image -> show_coord[3] = allocbool (active_coord -> totcoord[3]); #ifdef GTK3 // GTK3 Menu Action To Check if (active_coord -> totcoord[3] <= COORD_MAX_MENU) { active_glwin -> ogl_geom[0][3] = g_malloc0(active_coord -> totcoord[3]*sizeof*active_glwin -> ogl_geom[0][3]); active_glwin -> ogl_geom[1][3] = g_malloc0(active_coord -> totcoord[3]*sizeof*active_glwin -> ogl_geom[1][3]); } #endif } int i, j; j = 2 * active_project -> nspec; for (i=0; i < * id; i++) { j += active_coord -> totcoord[i]; } #ifdef GTK4 gcid_spcolor_setup (0, * id); for (i=0; i < active_coord -> totcoord[* id]; i++) { color_box (active_glwin, j+i, * id, i); active_image -> spcolor[* id][0][i] = init_color (i, active_coord -> totcoord[* id]); active_image -> spcolor[* id][0][i].alpha = DEFAULT_ALPHA; active_image -> show_coord[* id][i] = TRUE; } #else int k; gchar * str; GtkWidget * spm; for (k=0; k<2; k++) { i = 0; active_glwin -> oglmv[k][* id][0] = coord_view_setup (& i, * id, k); active_glwin -> oglmc[k][* id][0] = coord_color_setup (& i, * id, k); for (i=0; i < active_coord -> totcoord[* id]; i++) { if (! k) active_image -> show_coord[* id][i] = TRUE; if (active_coord -> totcoord[* id] <= COORD_MAX_MENU) { if (* id == 2) { str = g_strdup_printf (_("Fragment N°%d"), i+1); } else { str = g_strdup_printf (_("Molecule N°%d"), i+1); } active_glwin -> ogl_geom[k][* id][i] = create_coord_menu (0, str, TRUE, active_glwin -> oglmv[k][* id][0], & active_glwin -> gcid[* id][i][* id]); spm = create_menu_item (TRUE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)active_glwin -> oglmc[k][* id][0], spm); gtk_menu_item_set_submenu ((GtkMenuItem *)spm, color_box (active_glwin, j+i, * id, i)); } else { active_glwin -> gcid[* id][i][* id].a = active_glwin -> proj; active_glwin -> gcid[* id][i][* id].b = * id; active_glwin -> gcid[* id][i][* id].c = i; active_glwin -> gcid[* id][i][* id].d = * id; } active_image -> spcolor[* id][0][i] = init_color (i, active_coord -> totcoord[* id]); active_image -> spcolor[* id][0][i].alpha = DEFAULT_ALPHA; } } #endif } /*! \fn void init_menurings_ (int * coo, int * ids, int * ngsp, int coordt[*ngsp], int * init) \brief getting rings statistics data from Fortran90, and related GTK3 menu elements creation \param coo the coord type \param ids the ring(s) type in [0-4], or 0 for the chains \param ngsp the total number of distinct ring size(s) \param coordt the list of ring size(s) with rings \param init initialize some visual information (1/0) */ void init_menurings_ (int * coo, int * ids, int * ngsp, int coordt[* ngsp], int * init) { int j; if (active_coord -> geolist[* coo][0] != NULL) { g_free (active_coord -> geolist[* coo][0]); active_coord -> geolist[* coo][0] = NULL; } active_coord -> geolist[* coo][0] = allocint (* ngsp); #ifdef GTK4 gcid_spcolor_setup (0, * coo); for ( j=0 ; j < * ngsp ; j++ ) { active_coord -> geolist[* coo][0][j] = coordt[j]; active_image -> show_coord[* coo][j] = TRUE; if ( * coo < 9) { color_box (active_glwin, -3, * ids, j); if (* init) active_image -> show_poly[* coo][j] = FALSE; active_image -> spcolor[* coo][0][j] = init_color (coordt[j]-3, active_glwin -> ring_max[* ids]); active_image -> spcolor[* coo][0][j].alpha = DEFAULT_ALPHA; } else { active_glwin -> gcid[9][j][9].a = active_glwin -> proj; active_glwin -> gcid[9][j][9].b = 0; active_glwin -> gcid[9][j][9].c = j; active_glwin -> gcid[9][j][9].d = 9; } } #else gchar * str; GtkWidget * spm; GtkWidget * allt; int i; for (i=0 ; i < 2 ; i++) { j = 0; active_glwin -> oglmc[i][* coo][j] = NULL; active_glwin -> oglmc[i][* coo][j] = coord_color_setup (& j, * coo, i); if (! * init) active_glwin -> ogl_poly[i][* coo] = g_malloc0(*ngsp*sizeof*active_glwin -> ogl_poly[i][* coo]); for ( j=0 ; j < * ngsp ; j++ ) { if (i == 0) { active_image -> show_coord[* coo][j] = TRUE; if (* coo < 9) { if (* init) active_image -> show_poly[* coo][j] = FALSE; active_image -> spcolor[* coo][0][j] = init_color (coordt[j]-3, active_glwin -> ring_max[* ids]); active_image -> spcolor[* coo][0][j].alpha = DEFAULT_ALPHA; } active_coord -> geolist[* coo][0][j] = coordt[j]; } str = g_strdup_printf ("%d", coordt[j]); spm = create_menu_item (TRUE, str); active_glwin -> ogl_geom[i][* coo][j] = create_coord_menu (0, str, TRUE, NULL, & active_glwin -> gcid[* coo][j][* coo]); gtk_menu_shell_append ((GtkMenuShell *)active_glwin -> oglmc[i][* coo][0], spm); if (* coo < 9) { gtk_menu_item_set_submenu ((GtkMenuItem *)spm, color_box (active_glwin, -3, * ids, j)); active_glwin -> ogl_poly[i][* coo][j] = create_coord_menu (1, str, active_image -> show_poly[* coo][j], NULL, & active_glwin -> gcid[* coo][j][* coo]); } else { active_glwin -> gcid[9][j][9].a = active_glwin -> proj; active_glwin -> gcid[9][j][9].b = 0; active_glwin -> gcid[9][j][9].c = j; active_glwin -> gcid[9][j][9].d = 9; } g_free (str); } allt = create_menu_item (TRUE, _("All")); g_signal_connect (G_OBJECT (allt), "activate", G_CALLBACK(coord_properties), & active_glwin -> colorp[* coo][1]); gtk_menu_shell_append ((GtkMenuShell *)active_glwin -> oglmc[i][* coo][0], allt); } #endif } /*! \fn void init_opengl_coords (int id, int nt, int init) \brief initialize data to store the coordination data \param id the geometry id, in: [0-9] \param nt total number of distinct coordination \param init initialize some visual information (1/0) */ void init_opengl_coords (int id, int nt, int init) { int k; active_coord -> species = active_project -> nspec; active_coord -> totcoord[id] = nt; if (active_image -> show_coord[id]) { g_free (active_image -> show_coord[id]); active_image -> show_coord[id] = NULL; } active_image -> show_coord[id] = allocbool (nt); #ifdef GTK3 int i, j; for (i=0; i<2; i++) { if (active_glwin -> ogl_geom[i][id]) g_free (active_glwin -> ogl_geom[i][id]); active_glwin -> ogl_geom[i][id] = g_malloc0(nt*sizeof*active_glwin -> ogl_geom[i][id]); for (j=0; j < nt; j++) { active_glwin -> ogl_geom[i][id][j] = NULL; } } #endif if (id < 2 || id > 3) { k = (id > 3) ? 1 : active_project -> nspec; if (active_coord -> ntg[id]) g_free (active_coord -> ntg[id]); active_coord -> ntg[id] = g_malloc0(k*sizeof*active_coord -> ntg[id]); if (id > 3) active_coord -> ntg[id][0] = nt; if (id < 9) { if (! init) { if (active_image -> show_poly[id]) g_free (active_image -> show_poly[id]); active_image -> show_poly[id] = allocbool (nt); } #ifdef GTK3 for (i=0; i<2; i++) { if (active_glwin -> ogl_poly[i][id]) g_free (active_glwin -> ogl_poly[i][id]); active_glwin -> ogl_poly[i][id] = g_malloc0(nt*sizeof*active_glwin -> ogl_poly[i][id]); for (j=0; j < nt; j++) { active_glwin -> ogl_poly[i][id][j] = NULL; } } #endif } } } /*! \fn void send_coord_opengl_ (int * id, int * num, int * cmin, int * cmax, int * nt, int coord[*num]) \brief coordination information from Fortran90 \param id the geometry id, in: [0-9] \param num number of atom(s) \param cmin min value for the total coordination \param cmax max value for the total coordination \param nt total number of distinct coordination \param coord the values for each atom */ void send_coord_opengl_ (int * id, int * num, int * cmin, int * cmax, int * nt, int coord[* num]) { int i, j, k; if (* nt) init_opengl_coords (* id, * nt, 0); if (* id < 2) { if (* id == 0) { // Total coordination active_coord -> cmax = * cmax; active_coord -> cmin = * cmin; } if (coord != NULL) { for (i=0, k=0; i < active_project -> steps; i++) { for (j=0; j < active_project -> natomes; j++, k++) { active_project -> atoms[i][j].coord[* id] = coord[k] - 1; } } } } } atomes_1.3.1/src/opengl/win/w_library.c0000664000175000017500000011705015212624223017517 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_library.c * @short Functions to create the molecular library \n Functions to read the 'Simple chemical XML' files * @author Sébastien Le Roux */ /* * This file: 'w_library.c' * * Contains: * - The functions to create the molecular library - The functions to read the 'Simple chemical XML' files * * List of functions: int clean_xml_data (xmlDoc * doc, xmlTextReaderPtr reader); int sml_preview (const char * filetoread); int get_family (gchar * str); int get_sml_files (); int select_from_library (gboolean visible, project * this_proj, atom_search * asearch); int insert_this_project_from_lib (int id, gboolean visible, project * this_proj, atom_search * asearch); double get_z_from_periodic_table (gchar * lab); gchar * replace_markup (char * init, char * key, char * rep); gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); gchar * check_xml_string (gchar * init); gchar * open_sml_file (const char * filetoread, int fam); void sort_files (int num_f); void fill_molecule_tree (GtkListStore * store); void fill_family_tree (GtkListStore * store); void insert_preview (); void prepare_preview (int active, int id, gboolean visible); G_MODULE_EXPORT void select_library_data (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data); G_MODULE_EXPORT void set_library_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); G_MODULE_EXPORT void run_select_from_library (GtkDialog * lib, gint response_id, gpointer data); GtkWidget * library_tree (GtkListStore * store, int id, gchar * name); */ #include "global.h" #include "bind.h" #include "interface.h" #include "project.h" #include "glview.h" #include "glwindow.h" #include element_data periodic_table_info[] = { {"X", i18n("Unknown"), 0, 0}, {"H", i18n("Hydrogen"), 1, 1.008}, {"He", i18n("Helium"), 2, 4.003}, {"Li", i18n("Lithium"), 3, 6.94}, {"Be", i18n("Beryllium"), 4, 9.012}, {"B", i18n("Boron"), 5, 10.81}, {"C", i18n("Carbon"), 6, 12.011}, {"N", i18n("Nitrogen"), 7, 14.007}, {"O", i18n("Oxygen"), 8, 15.999}, {"F", i18n("Fluorine"), 9, 18.998}, {"Ne", i18n("Neon"), 10, 20.18}, {"Na", i18n("Sodium"), 11, 22.99}, {"Mg", i18n("Magnesium"), 12, 24.305}, {"Al", i18n("Aluminium"), 13, 26.982}, {"Si", i18n("Silicon"), 14, 28.085}, {"P", i18n("Phosphorus"), 15, 30.974}, {"S", i18n("Sulfur"), 16, 32.06}, {"Cl", i18n("Chlorine"), 17, 35.45}, {"Ar", i18n("Argon"), 18, 39.948}, {"K", i18n("Potassium"), 19, 39.098}, {"Ca", i18n("Calcium"), 20, 40.078}, {"Sc", i18n("Scandium"), 21, 44.956}, {"Ti", i18n("Titanium"), 22, 47.867}, {"V", i18n("Vanadium"), 23, 50.942}, {"Cr", i18n("Chromium"), 24, 51.996}, {"Mn", i18n("Manganese"), 25, 54.938}, {"Fe", i18n("Iron"), 26, 55.845}, {"Co", i18n("Cobalt"), 27, 58.933}, {"Ni", i18n("Nickel"), 28, 58.693}, {"Cu", i18n("Copper"), 29, 63.546}, {"Zn", i18n("Zinc"), 30, 65.38}, {"Ga", i18n("Gallium"), 31, 69.723}, {"Ge", i18n("Germanium"), 32, 72.63}, {"As", i18n("Arsenic"), 33, 74.922}, {"Se", i18n("Selenium"), 34, 78.971}, {"Br", i18n("Bromine"), 35, 79.904}, {"Kr", i18n("Krypton"), 36, 83.798}, {"Rb", i18n("Rubidium"), 37, 85.468}, {"Sr", i18n("Strontium"), 38, 87.62}, {"Y", i18n("Yttrium"), 39, 88.906}, {"Zr", i18n("Zirconium"), 40, 91.224}, {"Nb", i18n("Niobium"), 41, 92.906}, {"Mo", i18n("Molybdenum"), 42, 95.95}, {"Tc", i18n("Technetium"), 43, 98}, {"Ru", i18n("Ruthenium"), 44, 101.07}, {"Rh", i18n("Rhodium"), 45, 102.906}, {"Pd", i18n("Palladium"), 46, 106.42}, {"Ag", i18n("Silver"), 47, 107.868}, {"Cd", i18n("Cadmium"), 48, 112.414}, {"In", i18n("Indium"), 49, 114.818}, {"Sn", i18n("Tin"), 50, 118.71}, {"Sb", i18n("Antimony"), 51, 121.76}, {"Te", i18n("Tellurium"), 52, 127.6}, {"I", i18n("Iodine"), 53, 126.904}, {"Xe", i18n("Xenon"), 54, 131.293}, {"Cs", i18n("Caesium"), 55, 132.905}, {"Ba", i18n("Barium"), 56, 137.327}, {"La", i18n("Lanthanum"), 57, 138.905}, {"Ce", i18n("Cerium"), 58, 140.116}, {"Pr", i18n("Praseodymium"), 59, 140.908}, {"Nd", i18n("Neodymium"), 60, 144.242}, {"Pm", i18n("Promethium"), 61, 145}, {"Sm", i18n("Samarium"), 62, 150.36}, {"Eu", i18n("Europium"), 63, 151.964}, {"Gd", i18n("Gadolinium"), 64, 157.25}, {"Tb", i18n("Terbium"), 65, 158.925}, {"Dy", i18n("Dysprosium"), 66, 162.5}, {"Ho", i18n("Holmium"), 67, 164.93}, {"Er", i18n("Erbium"), 68, 167.259}, {"Tm", i18n("Thulium"), 69, 168.934}, {"Yb", i18n("Ytterbium"), 70, 173.045}, {"Lu", i18n("Lutetium"), 71, 174.967}, {"Hf", i18n("Hafnium"), 72, 178.49}, {"Ta", i18n("Tantalum"), 73, 180.948}, {"W", i18n("Tungsten"), 74, 183.84}, {"Re", i18n("Rhenium"), 75, 186.207}, {"Os", i18n("Osmium"), 76, 190.23}, {"Ir", i18n("Iridium"), 77, 192.217}, {"Pt", i18n("Platinum"), 78, 195.084}, {"Au", i18n("Gold"), 79, 196.967}, {"Hg", i18n("Mercury"), 80, 200.592}, {"Tl", i18n("Thallium"), 81, 204.38}, {"Pb", i18n("Lead"), 82, 207.2}, {"Bi", i18n("Bismuth"), 83, 208.98}, {"Po", i18n("Polonium"), 84, 209}, {"At", i18n("Astatine"), 85, 210}, {"Rn", i18n("Radon"), 86, 222}, {"Fr", i18n("Francium"), 87, 223}, {"Ra", i18n("Radium"), 88, 226}, {"Ac", i18n("Actinium"), 89, 227}, {"Th", i18n("Thorium"), 90, 232.038}, {"Pa", i18n("Protactinium"), 91, 231.036}, {"U", i18n("Uranium"), 92, 238.029}, {"Np", i18n("Neptunium"), 93, 237}, {"Pu", i18n("Plutonium"), 94, 244}, {"Am", i18n("Americium"), 95, 243}, {"Cm", i18n("Curium"), 96, 247}, {"Bk", i18n("Berkelium"), 97, 247}, {"Cf", i18n("Californium"), 98, 251}, {"Es", i18n("Einsteinium"), 99, 252}, {"Fm", i18n("Fermium"), 100, 257}, {"Md", i18n("Mendelevium"), 101, 258}, {"No", i18n("Nobelium"), 102, 258}, {"Lr", i18n("Lawrencium"), 103, 262}, {"Rf", i18n("Rutherfordium"), 104, 267}, {"Db", i18n("Dubnium"), 105, 268}, {"Sg", i18n("Seaborgium"), 106, 269}, {"Bh", i18n("Bohrium"), 107, 270}, {"Hs", i18n("Hassium"), 108, 277}, {"Mt", i18n("Meitnerium"), 109, 278}, {"Ds", i18n("Darmstadtium"), 110, 281}, {"Rg", i18n("Roentgenium"), 111, 282}, {"Cn", i18n("Copernicium"), 112, 285}, {"Nh", i18n("Nihonium"), 113, 286}, {"Fl", i18n("Flerovium"), 114, 289}, {"Mc", i18n("Moscovium"), 115, 289}, {"Lv", i18n("Livermorium"), 116, 293}, {"Ts", i18n("Tennessine"), 117, 294}, {"Og", i18n("Oganesson"), 118, 294}, {"D", i18n("Deuterium"), 1, 2.014000}}; insertion_menu mol[] = { { i18n("Atom"), NULL, -1, 0 }, { NULL, "H", 1, 1 }, { NULL, "B", 5, 1 }, { NULL, "C", 6, 1 }, { NULL, "N", 7, 1 }, { NULL, "O", 8, 1 }, { NULL, "F", 9, 1 }, { NULL, "S", 16, 1 }, { NULL, "Cl", 17, 1 }, { NULL, i18n("Other ..."), -1, 1 }, { i18n("Library"), NULL, -1, 0 }, { NULL, "H2O", -1, 3 }, { NULL, "CH4", -1, 5 }, { NULL, i18n("Toluene"), -1, 15 }, { NULL, "Cp", -1, 10 }, { NULL, "C60", -1, 60}, { NULL, i18n("Ni-Phthalocyanine"), -1, 57 }, { NULL, i18n("More ..."), -1, -1 }, { NULL, NULL, -1, 0 }}; #define FAMILY 26 gchar * family_list[FAMILY]={i18n("Misc"), i18n("Alcohols"), i18n("Aldehydes"), i18n("Alkanes"), i18n("Alkenes"), i18n("Alkynes"), i18n("Amides"), i18n("Amines"), i18n("Amino acids"), i18n("Aromatics"), i18n("Carboxylic acids"), i18n("Cyclic alkanes"), i18n("Cyclic alkenes"), i18n("Ethers"), i18n("Fatty acids"), i18n("Fullerenes"), i18n("Heterocyclics"), i18n("Macrocycles"), i18n("Ketones"), i18n("Nitriles"), i18n("Nucleobases"), i18n("Steroids"), i18n("Sugars (Linears)"), i18n("Sugars (Cyclics)"), i18n("Sulfoxides"), i18n("Thiols")}; gchar * family_dir[FAMILY]={"Misc", "Alcohols", "Aldehydes", "Alkanes", "Alkenes", "Alkynes", "Amides", "Amines", "Amino_acids", "Aromatics", "Carboxylic_acids", "Cyclic_alkanes", "Cyclic_alkenes", "Ethers", "Fatty_acids", "Fullerenes", "Heterocyclics", "Macrocycles", "Ketones", "Nitriles", "Nucleobases", "Steroids", "Linear_sugars", "Cyclic_sugars", "Sulfoxides", "Thiols"}; #ifdef GTK3 #ifndef G_OS_WIN32 extern void gtk_window_change_gdk_visual (GtkWidget * win); #endif // G_OS_WIN32 #endif // GTK3 extern gboolean create_3d_model (int p, gboolean load); extern G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data); extern xmlNodePtr findnode (xmlNodePtr startnode, char * nname); extern int action_atoms_from_project (project * this_proj, atom_search * asearch, gboolean visible); extern void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible); extern void create_object_from_library (int p); extern atom_search * remove_search; GtkListStore * family_store; GtkTreeIter first_family_iter; GtkListStore * molecule_store; GtkTreeIter first_mol_iter; GtkTreeSelection * libselect[2]; int the_family; gchar * the_molecule; gchar ** sml_file_name; gchar ** mol_name; GtkWidget * lib_preview_box = NULL; GtkWidget * lib_preview_plot = NULL; project * lib_proj = NULL; gchar * other_name[5]; int o_names; int inserted_from_lib; /*! \fn double get_z_from_periodic_table (gchar * lab) \brief get Z from atom label \param lab the atomic label */ double get_z_from_periodic_table (gchar * lab) { int i; for (i=0; i<120; i++) { if (g_strcmp0 (periodic_table_info[i].lab, lab) == 0) return periodic_table_info[i].Z; } return 0.0; } /*! \fn int clean_xml_data (xmlDoc * doc, xmlTextReaderPtr reader) \brief free XML data \param doc the XML doc pointer to free \param reader the XML reader to free */ int clean_xml_data (xmlDoc * doc, xmlTextReaderPtr reader) { xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); return 0; } /*! \fn gchar * replace_markup (char * init, char * key, char * rep) \brief replace pattern in string \param init the string \param key the pattern to replace \param rep the new pattern */ gchar * replace_markup (char * init, char * key, char * rep) { gchar * buffer = NULL; char * p = NULL; int inilen = strlen(init); int oldlen = strlen(key); int newlen = (rep) ? strlen(rep) : 0; // Is key in init p = strstr(init, key); if (! p) return g_strdup(init); buffer = g_malloc0 ((inilen+newlen-oldlen+1)*sizeof*buffer); buffer[0] = '\0'; // Copy what is before the pattern strncat(buffer, init, p - init); // Replace if (rep) strcat(buffer, rep); // Add the rest of the key strcat(buffer, p+oldlen); return buffer; } /*! \fn gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif) \brief substitute all patterns in string \param init the initial string \param o_motif the pattern to replace \param n_motif the new pattern */ gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif) { gchar * str_a, * str_b; str_a = replace_markup (init, o_motif, n_motif); str_b = g_strdup_printf ("%s", init); while (g_strcmp0 (str_a, str_b)) { g_free (str_b); str_b = g_strdup_printf ("%s", str_a); g_free (str_a); str_a = replace_markup (str_b, o_motif, n_motif); } g_free (str_b); return str_a; } /*! \fn gchar * check_xml_string (gchar * init) \brief check for, and correct tags in XML string \param init the XML string to check / correct */ gchar * check_xml_string (gchar * init) { gchar * str = g_strdup_printf ("%s", substitute_string (init, "--i--", "")); str = g_strdup_printf ("%s", substitute_string (str, "--I--", "")); str = g_strdup_printf ("%s", substitute_string (str, "--b--", "")); str = g_strdup_printf ("%s", substitute_string (str, "--e--", "")); str = g_strdup_printf ("%s", substitute_string (str, "--c--", "")); str = g_strdup_printf ("%s", substitute_string (str, "--f--", "")); return str; } /*! \fn int sml_preview (const char * filetoread) \brief retrieve preview information from 'Simple chemical library XML' file \param filetoread the name of the file to read */ int sml_preview (const char * filetoread) { int i, j, k; xmlDoc * doc; xmlTextReaderPtr reader; xmlNodePtr racine, name_node, chem_node; xmlNodePtr n_node, at_node, sp_node, coord_node; xmlNodePtr spec_node, lab_node, lot_node, pbc_node; xmlAttrPtr xspec; xmlChar * content; if (lib_proj != NULL) close_project (lib_proj); init_project (TRUE); lib_proj = active_project; reader = xmlReaderForFile(filetoread, NULL, 0); doc = xmlParseFile(filetoread); racine = xmlDocGetRootElement(doc); name_node = findnode (racine -> children, "names"); if (name_node == NULL) return clean_xml_data (doc, reader); n_node = findnode (name_node -> children, "library-name"); if (n_node == NULL) return clean_xml_data (doc, reader); content = xmlNodeGetContent(n_node); lib_proj -> name = g_strdup_printf ("%s", content); xmlFree (content); lib_proj -> name = check_xml_string (lib_proj -> name); n_node = findnode (name_node -> children, "iupac-name"); if (n_node == NULL) return clean_xml_data (doc, reader); o_names = 0; content = xmlNodeGetContent(n_node); other_name[0] = g_strdup_printf ("%s", content); xmlFree (content); o_names ++; n_node = findnode (name_node -> children, "other-names"); if (n_node == NULL) return clean_xml_data (doc, reader); n_node = n_node -> children; for (name_node = n_node; name_node && o_names < 5; name_node = name_node->next) { if (name_node -> type == XML_ELEMENT_NODE) { content = xmlNodeGetContent(name_node); other_name[o_names] = g_strdup_printf ("%s", content); xmlFree (content); o_names ++; } } chem_node = findnode(racine -> children, "chemistry"); if (chem_node == NULL) return clean_xml_data (doc, reader); at_node = findnode (chem_node -> children, "atoms"); if (at_node == NULL) return clean_xml_data (doc, reader); content = xmlNodeGetContent(at_node); lib_proj -> natomes = (int)string_to_double ((gpointer)content); xmlFree (content); sp_node = findnode (chem_node -> children, "species"); if (sp_node == NULL) return clean_xml_data (doc, reader); spec_node = sp_node -> properties -> children; if (spec_node == NULL) return clean_xml_data (doc, reader); content = xmlNodeGetContent(spec_node); lib_proj -> nspec = (int)string_to_double ((gpointer)content); xmlFree (content); if (lib_proj -> natomes < 1 || lib_proj -> nspec < 1) return clean_xml_data (doc, reader); alloc_proj_data (lib_proj, 1); lab_node = sp_node -> children; if (lab_node == NULL) return clean_xml_data (doc, reader); j = 0; for (i=0; i nspec; i++) { lab_node = findnode (lab_node, "label"); if (lab_node == NULL) return clean_xml_data (doc, reader); content = xmlNodeGetContent(lab_node); lib_proj -> chemistry -> label[i] = g_strdup_printf ("%s", content); xmlFree (content); xspec = lab_node -> properties; if (xspec == NULL) return clean_xml_data (doc, reader); while (xspec) { lot_node = xspec -> children; if (lot_node == NULL) return clean_xml_data (doc, reader); if (g_strcmp0 ("num",(char *)xspec -> name) == 0) { content = xmlNodeGetContent(lot_node); lib_proj -> chemistry -> nsps[i] = (int)string_to_double ((gpointer)content); xmlFree (content); lib_proj -> chemistry -> chem_prop[CHEM_Z][i] = get_z_from_periodic_table (lib_proj -> chemistry -> label[i]); k = (int)lib_proj -> chemistry -> chem_prop[CHEM_Z][i]; lib_proj -> chemistry -> chem_prop[CHEM_M][i] = periodic_table_info[k].M; lib_proj -> chemistry -> chem_prop[CHEM_R][i] = set_radius_ (& k, & j); } xspec = xspec -> next; } lab_node = lab_node -> next; } active_chem = lib_proj -> chemistry; initcutoffs (active_chem, lib_proj -> nspec); at_node = findnode (racine -> children, "coordinates"); if (at_node == NULL) return clean_xml_data (doc, reader); coord_node = at_node -> children; if (coord_node == NULL) return clean_xml_data (doc, reader); for (i=0; i natomes; i++) { coord_node = findnode (coord_node, "atom"); if (coord_node == NULL) return clean_xml_data (doc, reader); xspec = coord_node -> properties; if (xspec == NULL) return clean_xml_data (doc, reader); while (xspec) { lot_node = xspec -> children; if (lot_node == NULL) return clean_xml_data (doc, reader); content = xmlNodeGetContent(lot_node); if (g_strcmp0 ("x",(char *)xspec -> name) == 0) { lib_proj -> atoms[0][i].x = string_to_double ((gpointer)content); } else if (g_strcmp0 ("y",(char *)xspec -> name) == 0) { lib_proj -> atoms[0][i].y = string_to_double ((gpointer)content); } else if (g_strcmp0 ("z",(char *)xspec -> name) == 0) { lib_proj -> atoms[0][i].z = string_to_double ((gpointer)content); } else if (g_strcmp0 ("sp",(char *)xspec -> name) == 0) { lib_proj -> atoms[0][i].sp = (int)string_to_double ((gpointer)content); lib_proj -> atoms[0][i].show[0] = TRUE; } xmlFree (content); xspec = xspec -> next; } coord_node = coord_node -> next; } pbc_node = findnode (racine -> children, "lattice"); if (pbc_node != NULL) { } xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); return 1; } /*! \fn gchar * open_sml_file (const char * filetoread, int fam) \brief open 'Simple chemical library XML' file \param filetoread the name of the file to open \param fam the molecular family */ gchar * open_sml_file (const char * filetoread, int fam) { xmlDoc * doc; xmlTextReaderPtr reader; const xmlChar sml[8]="scl-xml"; xmlChar * cdata; xmlNodePtr racine, node; /* * build an xmlReader for that file */ reader = xmlReaderForFile(filetoread, NULL, 0); if (reader == NULL) { return NULL; } else { doc = xmlParseFile(filetoread); if (doc == NULL) return NULL; racine = xmlDocGetRootElement(doc); if (g_strcmp0 ((char *)(racine -> name), (char *)sml) != 0) { clean_xml_data (doc, reader); return NULL; } node = racine -> children; node = findnode(node, "class"); cdata = xmlNodeGetContent(node); if (g_strcmp0 ((gchar *)cdata, family_list[fam]) != 0) { xmlFree (cdata); clean_xml_data (doc, reader); return NULL; } xmlFree (cdata); node = findnode (racine -> children, "names"); if (node == NULL) { clean_xml_data (doc, reader); return NULL; } node = findnode (node -> children, "library-name"); if (node == NULL) { clean_xml_data (doc, reader); return NULL; } cdata = xmlNodeGetContent(node); xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); return (gchar *)cdata; } } /*! \fn int get_family (gchar * str) \brief get molecular family id \param str the moecular family */ int get_family (gchar * str) { int i; for (i=0; i0) { str = g_strdup_printf ("%s", mol_name[i]); mol_name[i] = g_strdup_printf ("%s", mol_name[j]); mol_name[j] = g_strdup_printf ("%s", str); str = g_strdup_printf ("%s", sml_file_name[i]); sml_file_name[i] = g_strdup_printf ("%s", sml_file_name[j]); sml_file_name[j] = g_strdup_printf ("%s", str); } } } for(i=0;i d_type == DT_REG) { str = g_strdup_printf ("%s/%s", libdir, dir -> d_name); if (open_sml_file(str, the_family) != NULL) val ++; g_free (str); } } closedir(d); } #endif if (val > 0) { sml_file_name = g_malloc0(val*sizeof*sml_file_name); mol_name = g_malloc0(val*sizeof*mol_name); val = 0; #ifdef G_OS_WIN32 hFind = FindFirstFile (libwin32, & ffd); if (hFind != INVALID_HANDLE_VALUE) { if (ffd.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY) { str = g_strdup_printf ("%s\\%s", libdir, (char *)ffd.cFileName); fsml = open_sml_file(str, the_family); if (fsml != NULL) { sml_file_name[val] = g_strdup_printf ("%s", str); mol_name[val] = g_strdup_printf ("%s", fsml); val ++; g_free (fsml); } g_free (str); } while (FindNextFile(hFind, &ffd) != 0) { if (ffd.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY) { str = g_strdup_printf ("%s\\%s", libdir, (char *)ffd.cFileName); fsml = open_sml_file(str, the_family); if (fsml != NULL) { sml_file_name[val] = g_strdup_printf ("%s", str); mol_name[val] = g_strdup_printf ("%s", fsml); val ++; g_free (fsml); } g_free (str); } } FindClose(hFind); } #else d = opendir (libdir); if (d) { while ((dir = readdir(d)) != NULL) { if (dir -> d_type == DT_REG) { str = g_strdup_printf ("%s/%s", libdir, dir -> d_name); fsml = open_sml_file(str, the_family); if (fsml != NULL) { sml_file_name[val] = g_strdup_printf ("%s", str); mol_name[val] = g_strdup_printf ("%s", fsml); val ++; g_free (fsml); } g_free (str); } } closedir(d); } #endif sort_files (val); } return val; } /*! \fn void fill_molecule_tree (GtkListStore * store) \brief fill molecule list store \param store the list store to fill */ void fill_molecule_tree (GtkListStore * store) { GtkTreeIter mol_level; int i; for (i=0; i modelgl -> plot, 0, 0, 4, 4); gtk_grid_attach (GTK_GRID (grid), markup_label(_("Formula:"), 100, -1, 0.0, 0.5), 5, 1, 3, 1); int i; for (i=0; i nspec; i++) { if (i > 0) { str = g_strdup_printf ("%s %s", str, lib_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s", lib_proj -> chemistry -> label[i]); } if (lib_proj -> chemistry -> nsps[i] > 1) { str = g_strdup_printf ("%s%d", str, lib_proj -> chemistry -> nsps[i]); } str = g_strdup_printf ("%s", str); } gtk_grid_attach (GTK_GRID (grid), markup_label(str, 100, -1, 0.0, 0.5), 8, 1, 3, 1); gtk_grid_attach (GTK_GRID (grid),markup_label(_("Molecular mass:"), 100, -1, 0.0, 0.5), 5, 2, 3, 1); g_free (str); double mass = 0.0; for (i=0; i nspec; i++) { mass += (lib_proj -> chemistry -> nsps[i]*lib_proj -> chemistry -> chem_prop[CHEM_M][i]); } str = g_strdup_printf ("%.3f g/mol", mass); gtk_grid_attach (GTK_GRID (grid), markup_label(str, 100, -1, 0.0, 0.5), 8, 2, 3, 1); g_free (str); gtk_grid_attach (GTK_GRID (grid), markup_label(_("IUPAC name:"), 100, -1, 0.0, 0.5), 0, 5, 3, 1); str = g_strdup_printf ("%s", check_xml_string(other_name[0])); gtk_grid_attach (GTK_GRID (grid), markup_label(str, 100, 30, 0.0, 0.5), 3, 5, 11, 1); if (o_names > 1) { GtkWidget * hbox = create_hbox (0); gtk_fixed_put (GTK_FIXED(lib_preview_plot), hbox, 0, 230); GtkWidget * vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Other name(s):"), 100, 30, 0.0, 0.5), FALSE, FALSE, 0); for (i=1; i 1) { str = g_strdup_printf ("%s\n%s", str, check_xml_string(other_name[i])); } else { str = g_strdup_printf ("%s", check_xml_string(other_name[i])); } } vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbox, FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, 100, 30+20*(o_names-2), 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } show_the_widgets (lib_preview_box); } /*! \fn void prepare_preview (int active, int id, gboolean visible) \brief prepare library molecule preview \param active active project id \param id molecule id number \param visible is the 'model edition' window visible */ void prepare_preview (int active, int id, gboolean visible) { if (sml_file_name != NULL) { if (sml_preview (sml_file_name[id])) { lib_preview_plot = destroy_this_widget (lib_preview_plot); lib_proj -> run = TRUE; active_project_changed (lib_proj -> id); create_3d_model (lib_proj -> id, FALSE); if (visible) { insert_preview (); } else { on_realize (NULL, lib_proj -> modelgl); } bonds_update = 0; active_glwin = lib_proj -> modelgl; active_glwin -> init = FALSE; active_image = active_glwin -> anim -> last -> img; lib_proj -> runc[0] = TRUE; init_atomes_analysis (lib_proj, TRUE); on_calc_bonds_released (NULL, NULL); lib_proj -> modelgl -> anim -> last -> img -> quality = 30; lib_proj -> modelgl -> anim -> last -> img -> rep = ORTHOGRAPHIC; lib_proj -> modelgl -> anim -> last -> img -> xyz -> axis = NONE; lib_proj -> modelgl -> anim -> last -> img -> abc -> box = NONE; if (visible) { gtk_widget_set_size_request (lib_proj -> modelgl -> plot, 150, 150); update (lib_proj -> modelgl); } active_project_changed (active); } } } /*! \fn G_MODULE_EXPORT void select_library_data (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data) \brief select library element callback \param tree_view the GtkTreeView sending the signal \param path the path in the tree view \param column the column in the tree view \param data the associated data pointer */ G_MODULE_EXPORT void select_library_data (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data) { GtkTreeIter row; GtkTreeModel * model = gtk_tree_view_get_model(tree_view); if (gtk_tree_model_get_iter (model, & row, path)) { GValue val = {0, }; GValue vbl = {0, }; gtk_tree_model_get_value (model, & row, 0, & val); gtk_tree_model_get_value (model, & row, 1, & vbl); int i = (int)g_value_get_int (& val); if (i > -1) { the_family = i; gtk_list_store_clear (molecule_store); fill_molecule_tree (molecule_store); gtk_tree_selection_select_iter (libselect[1], & first_mol_iter); prepare_preview (activep, 0, TRUE); } else { the_molecule = g_strdup_printf ("%s", (char *)g_value_get_string (& vbl)); prepare_preview (activep, -i-1, TRUE); } } } /*! \fn G_MODULE_EXPORT void set_library_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set font markup in the molecular library tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ G_MODULE_EXPORT void set_library_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { set_renderer_markup (mod, iter, renderer, 1); } /*! \fn GtkWidget * library_tree (GtkListStore * store, int id, gchar * name) \brief create library tree store widget \param store the list store model to use \param id selection id (0 = family, 1 = molecule) \param name column label */ GtkWidget * library_tree (GtkListStore * store, int id, gchar * name) { GtkWidget * scrol = create_scroll (NULL, 150, 300, GTK_SHADOW_ETCHED_IN); GtkTreeViewColumn * datacol; GtkCellRenderer * datacel; GtkWidget * dataview = gtk_tree_view_new_with_model (GTK_TREE_MODEL(store)); datacel = gtk_cell_renderer_text_new (); datacol = gtk_tree_view_column_new_with_attributes (name, datacel, "text", 1, NULL); gtk_tree_view_column_set_cell_data_func (datacol, datacel, set_library_markup, NULL, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(dataview), datacol); gtk_tree_view_column_set_alignment (datacol, 0.5); gtk_tree_view_set_activate_on_single_click (GTK_TREE_VIEW(dataview), TRUE); g_signal_connect (G_OBJECT(dataview), "row-activated", G_CALLBACK(select_library_data), NULL); g_object_unref (store); libselect[id] = gtk_tree_view_get_selection (GTK_TREE_VIEW(dataview)); gtk_tree_selection_set_mode (libselect[id], GTK_SELECTION_SINGLE); add_container_child (CONTAINER_SCR, scrol, dataview); return scrol; } gboolean lib_res; gboolean lib_visible; /*! \fn G_MODULE_EXPORT void run_select_from_library (GtkDialog * lib, gint response_id, gpointer data) \brief select from library - running the dialog \param lib the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_select_from_library (GtkDialog * lib, gint response_id, gpointer data) { gboolean done = FALSE; atom_search * asearch = (atom_search *)data; project * this_proj = get_project_by_id (asearch -> proj); GtkWidget * vbox; switch (response_id) { case GTK_RESPONSE_APPLY: vbox = dialog_get_content_area ((GtkWidget *)lib); widget_set_sensitive (vbox, FALSE); if (this_proj -> modelgl) this_proj -> modelgl -> other_status = 2; create_object_from_library (lib_proj -> id); active_project_changed (activep); if (asearch -> action == INSERT) { to_insert_in_project (FROM_LIBRARY, -1, this_proj, asearch, lib_visible); if (! lib_visible) { gboolean vis; if (this_proj -> modelgl) { vis = (this_proj -> modelgl -> atom_win) ? this_proj -> modelgl -> atom_win -> visible : FALSE; } else { vis = FALSE; } inserted_from_lib += action_atoms_from_project (this_proj, asearch, vis); } if (this_proj -> modelgl) this_proj -> modelgl -> nth_copy ++; } lib_res = FROM_LIBRARY; widget_set_sensitive (vbox, TRUE); if (asearch -> action == REPLACE) done = TRUE; break; default: if (this_proj -> modelgl) { if (this_proj -> modelgl -> mode == EDITION) asearch -> todo[0] = 0; } lib_res = 0; done = TRUE; break; } if (done) destroy_this_dialog (lib); } /*! \fn int select_from_library (gboolean visible, project * this_proj, atom_search * asearch) \brief select object to insert from the library \param visible is the 'model edition' window visible \param this_proj the target project \param asearch the target atom search */ int select_from_library (gboolean visible, project * this_proj, atom_search * asearch) { int active = activep; int nats = this_proj -> natomes; lib_visible = visible; GtkWidget * lib = dialogmodal (_("Library"), GTK_WINDOW((this_proj -> modelgl) ? this_proj -> modelgl -> win : MainWindow)); #ifdef GTK3 #ifdef GTKGLAREA #ifndef OSX #ifndef G_OS_WIN32 if (! atomes_visual) gtk_window_change_gdk_visual (lib); #endif // G_OS_WIN32 #endif // OSX #endif // GTKGLAREA #endif // GTK3 gtk_dialog_add_button (GTK_DIALOG(lib), (asearch -> action == REPLACE) ? _("Replace") : _("Insert"), GTK_RESPONSE_APPLY); GtkWidget * vbox = dialog_get_content_area (lib); GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); sml_file_name = mol_name = NULL; family_store = gtk_list_store_new (2, G_TYPE_INT, G_TYPE_STRING); fill_family_tree (family_store); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, library_tree (family_store, 0, _("Family")), FALSE, FALSE, 0); molecule_store = gtk_list_store_new (2, G_TYPE_INT, G_TYPE_STRING); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, library_tree (molecule_store, 1, _("Molecule")), FALSE, FALSE, 0); lib_preview_box = create_hbox(0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lib_preview_box, FALSE, FALSE, 10); lib_preview_plot = NULL; the_family = 0; gtk_tree_selection_select_iter (libselect[0], & first_family_iter); gtk_list_store_clear (molecule_store); fill_molecule_tree (molecule_store); gtk_tree_selection_select_iter (libselect[1], & first_mol_iter); show_the_widgets (lib); prepare_preview (active, 0, TRUE); if (this_proj -> modelgl) this_proj -> modelgl -> nth_copy = 0; inserted_from_lib = 0; run_this_gtk_dialog (lib, G_CALLBACK(run_select_from_library), asearch); active_project_changed (active); if (! nats && active_project -> natomes) { int i; if (active_image -> style == SPACEFILL) { i = OGL_STYLES + active_image -> filled_type; set_this_style (active_glwin, WIREFRAME); } else { i = active_image -> style; set_this_style (active_glwin, OGL_STYLES); } set_this_style (active_glwin, i); } if (sml_file_name != NULL) g_free (sml_file_name); if (mol_name != NULL) g_free (mol_name); if (lib_proj != NULL) close_project (lib_proj); lib_proj = NULL; lib_preview_plot = NULL; return lib_res; } /*! \fn int insert_this_project_from_lib (int id, gboolean visible, project * this_proj, atom_search * asearch) \brief insert object from the library \param id object id to insert \param visible is the 'model edition window' visible \param this_proj the target project \param asearch the target atom search */ int insert_this_project_from_lib (int id, gboolean visible, project * this_proj, atom_search * asearch) { sml_file_name = mol_name = NULL; int family[6] = {0, 3, 9, 9, 15, 17}; int molec[6] = {0, 8, 36, 21, 11, 0}; int active = activep; int nats = this_proj -> natomes; the_family = family[id]; if (get_sml_files ()) { prepare_preview (active, molec[id], FALSE); if (this_proj -> modelgl) this_proj -> modelgl -> other_status = 2; create_object_from_library (lib_proj -> id); if (asearch -> action == INSERT) { to_insert_in_project (FROM_LIBRARY, -1, this_proj, asearch, visible); } } active_project_changed (active); if (! nats && active_project -> natomes) { int i; if (active_image -> style == SPACEFILL) { i = OGL_STYLES + active_image -> filled_type; set_this_style (active_glwin, WIREFRAME); } else { i = active_image -> style; set_this_style (active_glwin, OGL_STYLES); } set_this_style (active_glwin, i); } if (sml_file_name != NULL) g_free (sml_file_name); if (mol_name != NULL) g_free (mol_name); if (lib_proj != NULL) close_project (lib_proj); lib_proj = NULL; return FROM_LIBRARY; } atomes_1.3.1/src/opengl/win/m_box.c0000664000175000017500000005327015212624223016634 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_box.c * @short Functions to create the 'Model -> Box' submenu * @author Sébastien Le Roux */ /* * This file: 'm_box.c' * * Contains: * - The functions to create the 'Model -> Box' submenu * * List of functions: void update_show_hide_box_axis (glwin * view, int box_or_axis, int status); G_MODULE_EXPORT void set_box_axis_style (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_box_axis (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void change_box_axis_radio (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * create_box_axis_menu (char * name, int val, int box, GtkWidget * menu, tint * data); GtkWidget * create_color_widget (GtkWidget * widg, glwin * view, int va); GtkWidget * create_layout_widget (gchar * str, GtkWidget * menu, int vab, gpointer data); GtkWidget * menu_box_axis (glwin * view, int id, int ab); GMenuItem * menu_box_axis (glwin * view, int popm, int ab); GMenu * axis_box_style (glwin * view, int popm, int ab, int abs); GMenu * axis_box_param (glwin * view, int popm, int ab, int style); GMenuItem * menu_box_axis (glwin * view, int popm, int ab); */ #include "global.h" #include "glview.h" #include "glwindow.h" #include "color_box.h" #include "submenus.h" G_MODULE_EXPORT void box_advanced (GtkWidget * widg, gpointer data); #ifdef GTK4 extern G_MODULE_EXPORT void window_bonds (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern G_MODULE_EXPORT void window_bonds (GtkWidget * widg, gpointer data); #endif extern gboolean from_box_or_axis; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_box_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) \brief open box configuration window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_box_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) { box_advanced (NULL, data); } #endif /*! \fn void update_show_hide_box_axis (glwin * view, int box_or_axis, int status) \brief update edition buttons with menu show / hide status */ void update_show_hide_box_axis (glwin * view, int box_or_axis, int status) { switch (box_or_axis) { case 0: if (view -> box_win) { if (view -> box_win -> show_hide && GTK_IS_WIDGET(view -> box_win -> show_hide)) { button_set_status (view -> box_win -> show_hide, ! status); } } break; case 1: if (view -> axis_win) { if (view -> axis_win -> show_hide && GTK_IS_WIDGET(view -> axis_win -> show_hide)) { button_set_status (view -> axis_win -> show_hide, ! status); } } break; } } #ifdef GTK3 // GTK3 Menu Action To Check /*! \fn G_MODULE_EXPORT void set_box_axis_style (GtkWidget * widg, gpointer data) \brief set box/axis style \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_box_axis_style (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; int i, j, k, l, m, n; j = the_data -> b; n = the_data -> c; glwin * view = get_project_by_id(the_data -> a) -> modelgl; k = (n) ? view -> anim -> last -> img -> xyz -> axis : view -> anim -> last -> img -> abc -> box; int dim[2]={OGL_BOX, OGL_AXIS}; l = (k == NONE) ? 2 : (j == WIREFRAME) ? 2 : 1; m = (k == NONE) ? 0 : (j == WIREFRAME) ? 1 : 2; if (k != j && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { if (n) { view -> anim -> last -> img -> xyz -> axis = NONE - 1; } else { view -> anim -> last -> img -> abc -> box = NONE - 1; } gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[n][l], FALSE); show_the_widgets (view -> ogl_box_axis[n][3+2*(m-1)]); hide_the_widgets (view -> ogl_box_axis[n][3+2*(l-1)]); if (widg != view -> ogl_box_axis[n][(k == NONE) ? 1 : m]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[n][(k == NONE) ? 1 : m], TRUE); } for (i=1; i ogl_box_axis[n][i], 1); if (n) { view -> anim -> last -> img -> xyz -> axis = (k == NONE) ? WIREFRAME : j; } else { view -> anim -> last -> img -> abc -> box = (k == NONE) ? WIREFRAME : j; } } else if (k == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[n][(k == NONE) ? 1 : m], TRUE); } else if (j == 0) { for (i=1; i<3; i++) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[n][i], FALSE); widget_set_sensitive (view -> ogl_box_axis[n][i], 0); widget_set_sensitive (view -> ogl_box_axis[n][i], 0); } widget_set_sensitive (view -> ogl_box_axis[n][4], 0); for (i=6; i ogl_box_axis[n][i], 0); } if (widg != view -> ogl_box_axis[n][0]) gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[n][0], FALSE); if (n) { view -> anim -> last -> img -> xyz -> axis = NONE; } else { view -> anim -> last -> img -> abc -> box = NONE; } } if (n) { i = (view -> anim -> last -> img -> xyz -> axis == NONE) ? NONE : (view -> anim -> last -> img -> xyz -> axis == WIREFRAME) ? 0 : 1; } else { i = (view -> anim -> last -> img -> abc -> box == NONE) ? NONE : (view -> anim -> last -> img -> abc -> box == WIREFRAME) ? 0 : 1; } switch (n) { case 0: if (view -> box_win) { if (view -> box_win -> styles && GTK_IS_WIDGET(view -> box_win -> styles)) { combo_set_active (view -> box_win -> styles, i); } } break; case 1: if (view -> axis_win) { if (view -> axis_win -> styles && GTK_IS_WIDGET(view -> axis_win -> styles)) { combo_set_active (view -> axis_win -> styles, i); } } break; } if (! from_box_or_axis) update_show_hide_box_axis (view, n, (i == NONE) ? 1 : 0); view -> create_shaders[n+MDBOX] = TRUE; update (view); } /*! \fn GtkWidget * create_box_axis_menu (char * name, int val, int box, GtkWidget * menu, tint * data) \brief create a menu item for box/axis style \param name the new menu item label \param val box/axis active style \param box menu item style type \param menu the GtkMenu to attach the new item to \param data the pointer associated with the callback */ GtkWidget * create_box_axis_menu (char * name, int val, int box, GtkWidget * menu, tint * data) { GtkWidget * box_widget = gtk3_menu_item (menu, name, IMG_NONE, NULL, G_CALLBACK(set_box_axis_style), data, FALSE, 0, 0, TRUE, (data -> b != 0) ? TRUE : FALSE, (box == val && val != NONE) ? TRUE : FALSE); if (data -> b != 0) { if (val == NONE) { widget_set_sensitive (box_widget, 0); } } return box_widget; } /*! \fn GtkWidget * create_color_widget (GtkWidget * widg, glwin * view, int va) \brief create box color selection menu item \param widg the GtkMenuItem to attach the color palette to \param view the target glwin \param va box style */ GtkWidget * create_color_widget (GtkWidget * widg, glwin * view, int va) { GtkWidget * color_widget = color_box(view, -1, 0, 0); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, color_widget); if (va == NONE) { widget_set_sensitive (color_widget, 0); } return color_widget; } /*! \fn GtkWidget * create_layout_widget (gchar * str, GtkWidget * menu, int vab, gpointer data) \brief create box/axis style menu widget \param str menu item label \param menu the GtkMenu to attach the new item to \param vab box/axis style \param data the associated data pointer */ GtkWidget * create_layout_widget (gchar * str, GtkWidget * menu, int vab, gpointer data) { GtkWidget * layout = create_menu_item (TRUE, str); gtk_menu_shell_append ((GtkMenuShell *)menu, layout); g_signal_connect (G_OBJECT (layout), "activate", G_CALLBACK(window_bonds), data); if (vab == NONE) widget_set_sensitive (layout, 0); return layout; } /*! \fn GtkWidget * menu_box_axis (glwin * view, int id, int ab) \brief create the 'Model -> Box' and 'View -> Axis' submenus GTK3 \param view the target glwin \param id main app (0) or popup (1) \param ab box (0) or axis (1) */ GtkWidget * menu_box_axis (glwin * view, int id, int ab) { GtkWidget * widg; gchar * menu_title[2]={i18n("Box"), i18n("Axis")}; GtkWidget * ab_menu; GtkWidget * menu_ab = gtk_menu_new (); if (id == 0 && ab == 0) { view -> ogl_box[0] = create_menu_item (TRUE, _(menu_title[ab])); gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_box[0], menu_ab); widget_set_sensitive (view -> ogl_box[0], get_project_by_id(view -> proj) -> cell.ltype); } else { ab_menu = create_menu_item (TRUE, _(menu_title[ab])); gtk_menu_item_set_submenu ((GtkMenuItem *)ab_menu, menu_ab); if (ab == 0) widget_set_sensitive (ab_menu, get_project_by_id(view -> proj) -> cell.ltype); } GtkWidget * menul; int i = (ab) ? view -> anim -> last -> img -> xyz -> axis : view -> anim -> last -> img -> abc -> box; if (id == 0) { view -> ogl_box_axis[ab][0] = create_box_axis_menu (_("Show/Hide"), i, i, menu_ab, & view -> colorp[0][ab]); } else { widg = create_box_axis_menu (_("Show/Hide"), i, i, menu_ab, & view -> colorp[0][ab]); } widg = create_menu_item (FALSE, _("Style")); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, widg); GtkWidget * menus = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menus); gchar * str; str = g_strdup_printf (_("Width [ %f pts ]"), (ab) ? view -> anim -> last -> img -> xyz -> line : view -> anim -> last -> img -> abc -> line); int box_axis = (ab) ? view -> anim -> last -> img -> xyz -> axis : view -> anim -> last -> img -> abc -> box; if (id == 0) { view -> ogl_box_axis[ab][1] = create_box_axis_menu (_(text_styles[1]), i, 1, menus, & view -> colorp[1][ab]); view -> ogl_box_axis[ab][2] = create_box_axis_menu (_(text_styles[4]), i, 4, menus, & view -> colorp[4][ab]); view -> ogl_box_axis[ab][3] = create_menu_item (TRUE, _("Lines")); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, view -> ogl_box_axis[ab][3]); menul = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_box_axis[ab][3], menul); view -> ogl_box_axis[ab][4] = create_layout_widget (str, menul, box_axis, & view -> colorp[WIREFRAME][ab]); } else { create_box_axis_menu (_(text_styles[1]), i, 1, menus, & view -> colorp[1][ab]); create_box_axis_menu (_(text_styles[4]), i, 4, menus, & view -> colorp[4][ab]); if (i == WIREFRAME) { widg = create_menu_item (FALSE, _("Lines")); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, widg); menul = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menul); widg = create_layout_widget (str, menul, box_axis, & view -> colorp[WIREFRAME][ab]); } } g_free (str); str = g_strdup_printf (_("Radius [ %f Å ]"), (ab) ? view -> anim -> last -> img -> xyz -> rad : view -> anim -> last -> img -> abc -> rad); if (id == 0) { view -> ogl_box_axis[ab][5] = create_menu_item (FALSE, _("Cylinders")); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, view -> ogl_box_axis[ab][5]); menul = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_box_axis[ab][5], menul); view -> ogl_box_axis[ab][6] = create_layout_widget (str, menul, box_axis, & view -> colorp[CYLINDERS][ab]); } else if (i == CYLINDERS) { widg = create_menu_item (FALSE, _("Cylinders")); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, widg); menul = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menul); widg = create_layout_widget (str, menul, box_axis, & view -> colorp[CYLINDERS][ab]); } g_free (str); if (ab == 0) { widg = create_menu_item (FALSE, _("Color")); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, widg); if (id == 0) { view -> ogl_box_axis[ab][7] = create_color_widget (widg, view, i); } else { widg = create_color_widget (widg, view, i); } add_advanced_item (menu_ab, G_CALLBACK(box_advanced), (gpointer)view, FALSE, 0, 0); } else { menu_axis (menu_ab, view, id); } if (id == 0 && ab == 0) { return view -> ogl_box[0]; } else { return ab_menu; } } #else /*! \fn G_MODULE_EXPORT void show_hide_box_axis (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the 'box/axis' show/hide signal GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_box_axis (GSimpleAction * action, GVariant * parameter, gpointer data) { tint * the_data = (tint *)data; glwin * view = get_project_by_id(the_data -> a) -> modelgl; const gchar * name = g_action_get_name ((GAction *)action); int lgt = strlen (name); gchar * str = g_strdup_printf ("%c%c", name[lgt-2], name[lgt-1]); if (g_strcmp0(str, ".1") == 0) { g_free (str); str = g_strdup_printf ("%.*s.0.0", lgt-4, name); g_action_group_activate_action ((GActionGroup *)view -> action_group, (const gchar *)str, NULL); g_free (str); } else { GVariant * state; gboolean show; state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); if (show) { switch (the_data -> c) { case 0: view -> anim -> last -> img -> abc -> box = WIREFRAME; break; case 1: view -> anim -> last -> img -> xyz -> axis = WIREFRAME; break; } } else { switch (the_data -> c) { case 0: view -> anim -> last -> img -> abc -> box = NONE; break; case 1: view -> anim -> last -> img -> xyz -> axis = NONE; break; } } view -> create_shaders[the_data -> c+MDBOX] = TRUE; update_menu_bar (view); update (view); g_action_change_state (G_ACTION (action), g_variant_new_boolean (show)); g_variant_unref (state); update_show_hide_box_axis (view, the_data -> c, ! show); } } /*! \fn G_MODULE_EXPORT void change_box_axis_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle a box/axis radio menu item signal GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void change_box_axis_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { tint * the_data = (tint *)data; int i, j; i = the_data -> c; glwin * view = get_project_by_id (the_data -> a) -> modelgl; const gchar * style = g_variant_get_string (parameter, NULL); int lgt = strlen (style); gchar * name = g_strdup_printf ("%c%c", style[lgt-2], style[lgt-1]); if (g_strcmp0(name, ".1") == 0) { name = g_strdup_printf ("%.*s.0", lgt-2, style); gchar * str = g_strdup_printf ("set-%s-style", (i) ? "axis" : "box"); g_action_group_activate_action ((GActionGroup *)view -> action_group, (const gchar *)str, g_variant_new_string((const gchar *)name)); g_free (str); g_free (name); } else { gchar * style_name = NULL; gchar * str = g_strdup_printf ("set-%s-style", (i) ? "axis" : "box"); for (j=0; j<2; j++) { style_name = g_strdup_printf ("%s.%d.0", str, j); if (g_strcmp0(style, (const gchar *)style_name) == 0) { if (i) { view -> anim -> last -> img -> xyz -> axis = (j == 0) ? WIREFRAME : CYLINDERS; } else { view -> anim -> last -> img -> abc -> box = (j == 0) ? WIREFRAME : CYLINDERS; } view -> create_shaders[i+MDBOX] = TRUE; update (view); update_menu_bar (view); g_free (style_name); style_name = NULL; break; } g_free (style_name); style_name = NULL; } g_free (str); g_action_change_state (G_ACTION (action), parameter); } } /*! \fn GMenu * axis_box_style (glwin * view, int popm, int ab, int abs) \brief create the box/axis '-> Style' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param ab box (0) or axis (1) \param abs the active box/axis style */ GMenu * axis_box_style (glwin * view, int popm, int ab, int abs) { GMenu * menu = g_menu_new (); gchar * str = g_strdup_printf ("%s-style", (ab) ? "axis" : "box"); append_opengl_item (view, menu, _(text_styles[1]), str, popm, 0, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_box_axis_radio), & view -> colorp[1][ab], FALSE, (abs == WIREFRAME) ? TRUE : FALSE, TRUE, (abs != NONE) ? TRUE : FALSE); g_free (str); str = g_strdup_printf (_("%s-style"), (ab) ? "axis" : "box"); append_opengl_item (view, menu, _(text_styles[4]), str, popm, 1, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_box_axis_radio), & view -> colorp[4][ab], FALSE, (abs == CYLINDERS) ? TRUE : FALSE, TRUE, (abs != NONE) ? TRUE : FALSE); g_free (str); return menu; } /*! \fn GMenu * axis_box_param (glwin * view, int popm, int ab, int style) \brief create the box/axis '-> Length/Width/Radius' submenus GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param ab box (0) or axis (1) \param style the active box/axis style */ GMenu * axis_box_param (glwin * view, int popm, int ab, int style) { gchar * str, * key; if (style == WIREFRAME) { str = g_strdup_printf (_("Width [ %f pts ]"), (ab) ? view -> anim -> last -> img -> xyz -> line : view -> anim -> last -> img -> abc -> line); key = g_strdup_printf ("%s-width", (ab) ? "axis" : "box"); } else if (style == CYLINDERS) { str = g_strdup_printf (_("Radius [ %f Å ]"), (ab) ? view -> anim -> last -> img -> xyz -> rad : view -> anim -> last -> img -> abc -> rad); key = g_strdup_printf ("%s-radius", (ab) ? "axis" : "box"); } else { str = g_strdup_printf (_(" length [ %f Å ]"), view -> anim -> last -> img -> xyz -> length); key = g_strdup_printf ("axis-legnth"); } GMenu * menu = g_menu_new (); append_opengl_item (view, menu, str, key, popm, ab, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(window_bonds), & view -> colorp[style][ab], FALSE, FALSE, FALSE, TRUE); g_free (str); g_free (key); return menu; } /*! \fn GMenuItem * menu_box_axis (glwin * view, int popm, int ab) \brief create the 'Model -> Box' and 'View -> Axis' submenus GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param ab box (0) or axis (1) */ GMenuItem * menu_box_axis (glwin * view, int popm, int ab) { GMenuItem * ab_item = g_menu_item_new ((ab) ? _("Axis") : _("Box"), (ab) ? NULL : (get_project_by_id(view -> proj) -> cell.ltype) ? NULL : "None"); int i = (ab) ? view -> anim -> last -> img -> xyz -> axis : view -> anim -> last -> img -> abc -> box; GMenu * menu = g_menu_new (); append_opengl_item (view, menu, "Show/Hide", (ab) ? "show-axis" : "show-box", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_box_axis), & view -> colorp[0][ab], TRUE, (i != NONE) ? TRUE : FALSE, FALSE, (ab) ? TRUE : get_project_by_id(view -> proj) -> cell.ltype); append_submenu (menu, _("Style"), axis_box_style (view, popm, ab, i)); GMenuItem * item ; if (i == WIREFRAME) { item = g_menu_item_new (_("Lines"), NULL); g_menu_item_set_attribute (item, "custom", "s", (ab) ? "axis-lines" : "box-lines", NULL); g_menu_item_set_submenu (item, (GMenuModel *)axis_box_param (view, popm, ab, WIREFRAME)); g_menu_append_item (menu, item); } if (i == CYLINDERS) { item = g_menu_item_new (_("Cylinders"), NULL); g_menu_item_set_attribute (item, "custom", "s", (ab) ? "axis-cylinders" : "box-cylinders", NULL); g_menu_item_set_submenu (item, (GMenuModel *)axis_box_param (view, popm, ab, CYLINDERS)); g_menu_append_item (menu, item); } if (ab == 0) { GMenu * menuc = g_menu_new (); append_opengl_item (view, menuc, "box-color", "box-color", popm, popm, NULL, IMG_NONE, NULL, TRUE, NULL, NULL, FALSE, FALSE, FALSE, FALSE); append_opengl_item (view, menuc, _("More Colors ..."), "box-color", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_run_box_color_window), view, FALSE, FALSE, FALSE, get_project_by_id(view -> proj) -> cell.ltype); append_submenu (menu, _("Color"), menuc); g_object_unref (menuc); append_opengl_item (view, menu, _("Advanced"), "box-advanced", popm, popm, NULL, IMG_STOCK, DPROPERTIES, FALSE, G_CALLBACK(to_box_advanced), (gpointer)view, FALSE, FALSE, FALSE, TRUE); } else { menu_axis (menu, view, popm); } g_menu_item_set_submenu (ab_item, (GMenuModel *)menu); return ab_item; } #endif atomes_1.3.1/src/opengl/win/w_rings.c0000664000175000017500000012474615212624223017207 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_rings.c * @short Functions to create the ring(s) tab for the advanced environments window * @author Sébastien Le Roux */ /* * This file: 'w_rings.c' * * Contains: * - The functions to create the ring(s) tab for the advanced environments window * * List of functions: gchar * ring_atoms (project * this_proj, int ring, int step, int size, int rid, gboolean to_file); int get_rmin (project * this_proj, int rid, int step); int get_rmax (project * this_proj, int rid, int step); void rings_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void fill_rings_model (GtkTreeStore * store, project * this_proj, int rid); void rings_set_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void add_this_ring_to_search_tree (project * this_proj, int rid); G_MODULE_EXPORT void on_select_rings (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void update_rings_search (GtkEntry * res, gpointer data); G_MODULE_EXPORT void run_save_rings_to_file (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_save_rings_to_file (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void save_rings_to_file (GtkButton * but, gpointer data); GtkWidget * create_rings_tree (project * this_proj, int rid, gboolean fill_this); GtkWidget * create_rings_search (project * this_proj, int rid); GtkWidget * rings_tab (glwin * view, int rid); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" extern const gchar * dfi[2]; gchar * rtype[5] = {i18n("all"), i18n("King"), i18n("Guttman"), i18n("primtive"), i18n("strong")}; /*! \fn G_MODULE_EXPORT void on_select_rings (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select ring toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void on_select_rings (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { tint * dat = (tint * )data; gboolean saved_label[2]; int i, j, g, c, s, v, u, a, b; opengl_project_changed(dat -> a); coord_edition * coord = opengl_project -> modelgl -> coord_win; b = (opengl_project -> steps > 1) ? 1: 0; for (i=0; i<5; i++) { if (i*10 > dat -> b) break; } g = i - 1; for (i=2+b; i<5+b; i++) { if (10*g+i == dat -> b) break; } c = i; if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { v = 0; } else { v = 1; } GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(coord -> rings_model[g]), & iter, path); gtk_tree_store_set (coord -> rings_model[g], & iter, c, v, -1); if (b) { gtk_tree_model_get (GTK_TREE_MODEL(coord -> rings_model[g]), & iter, 0, & s, -1); s = - s - 1; } else { s = 0; } gtk_tree_model_get (GTK_TREE_MODEL(coord -> rings_model[g]), & iter, b, & i, -1); i = -i; gtk_tree_model_get (GTK_TREE_MODEL(coord -> rings_model[g]), & iter, b+1, & j, -1); switch (c-b) { case 2: // Viz for (u=0; u modelgl -> all_rings[g][s][i-1][j-1][u]; #ifdef GTK4 if (opengl_project -> atoms[s][a].show[0] != v) show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(a)); #else if (opengl_project -> atoms[s][a].show[0] != v) show_hide_this_atom (NULL, GINT_TO_POINTER(a)); #endif // GTK4 } break; case 3: // Show poly opengl_project -> modelgl -> show_rpoly[g][s][i-1][j-1] = v; int shaders[1] = {RINGS}; re_create_md_shaders (1, shaders, opengl_project); break; case 4: // Label for (u=0; u modelgl -> all_rings[g][s][i-1][j-1][u]; opengl_project -> atoms[s][a].label[0] = opengl_project -> atoms[s][a].label[1] = v; } opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; break; case 5: // Pick for (u=0; u modelgl -> all_rings[g][s][i-1][j-1][u]; saved_label[0] = opengl_project -> atoms[s][a].label[0]; saved_label[1] = opengl_project -> atoms[s][a].label[1]; #ifdef GTK4 if (opengl_project -> atoms[s][a].pick[0] != v) select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(a)); #else if (opengl_project -> atoms[s][a].pick[0] != v) select_unselect_this_atom (NULL, GINT_TO_POINTER(a)); #endif // GTK4 opengl_project -> atoms[s][a].label[0] = saved_label[0]; opengl_project -> atoms[s][a].label[1] = saved_label[1]; } break; } update (opengl_project -> modelgl); } /*! \fn void rings_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer in the ring search tree store \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void rings_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { tint * id = (tint *)data; int i, j, k; project * this_proj = get_project_by_id(id -> a); i = id -> b; j = (this_proj -> steps > 1) ? 1: 0; gtk_tree_model_get (mod, iter, j, & k, -1); if (j) { gtk_tree_model_get (mod, iter, 0, & k, -1); if (i == 0) { if (k > 0) { gtk_cell_renderer_set_visible (renderer, 1); } else { gtk_cell_renderer_set_visible (renderer, 0); } } else if (k > 0) { gtk_cell_renderer_set_visible (renderer, 0); } else { gtk_tree_model_get (mod, iter, j, & k, -1); if (i == 1) { if (k > 0) { gtk_cell_renderer_set_visible (renderer, 1); } else { gtk_cell_renderer_set_visible (renderer, 0); } } else { if (k > 0) { gtk_cell_renderer_set_visible (renderer, 0); } else { gtk_cell_renderer_set_visible (renderer, 1); } } } } else { if (i == 0) { if (k > 0) { gtk_cell_renderer_set_visible (renderer, 1); } else { gtk_cell_renderer_set_visible (renderer, 0); } } else { if (k > 0) { gtk_cell_renderer_set_visible (renderer, 0); } else { gtk_cell_renderer_set_visible (renderer, 1); } } } } /*! \fn gchar * ring_atoms (project * this_proj, int ring, int step, int size, int rid) \brief create a string containing the list of atoms in a ring \param this_proj the target project \param ring the type of ring \param step the configuration \param size the size of the ring \param rid the id number of the ring \param to_file type of output */ gchar * ring_atoms (project * this_proj, int ring, int step, int size, int rid, gboolean to_file) { gchar * str; int aid, sid; aid = this_proj -> modelgl -> all_rings[ring][step][size][rid][0]; sid = this_proj -> atoms[step][aid].sp; int i; if (to_file) { str = g_strdup_printf ("%s%d", exact_name(this_proj -> chemistry -> label[sid]), aid+1); for (i=1; i modelgl -> all_rings[ring][step][size][rid][i]; sid = this_proj -> atoms[step][aid].sp; str = g_strdup_printf ("%s - %s%d", str, exact_name(this_proj -> chemistry -> label[sid]), aid+1); } } else { str = g_strdup_printf ("%s%d", exact_name(this_proj -> chemistry -> label[sid]), aid+1); for (i=1; i modelgl -> all_rings[ring][step][size][rid][i]; sid = this_proj -> atoms[step][aid].sp; str = g_strdup_printf ("%s-%s%d", str, exact_name(this_proj -> chemistry -> label[sid]), aid+1); } } return str; } /*! \fn void fill_rings_model (GtkTreeStore * store, project * this_proj, int rid) \brief fill the entire ring(s) tree store \param store the GtkTreeStore to fill \param this_proj the target project \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong */ void fill_rings_model (GtkTreeStore * store, project * this_proj, int rid) { GtkTreeIter step_level, size_level, ring_level; gchar * str; int h, i, j, k, l; if (this_proj -> coord -> totcoord[rid+4]) { for (h=0; h < this_proj -> steps; h++) { if (this_proj -> steps > 1) { gtk_tree_store_append (store, & step_level, NULL); gtk_tree_store_set (store, & step_level, 0, h+1, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); } for (i=0; i < this_proj -> coord -> totcoord[rid+4]; i++) { j = this_proj -> coord -> geolist[rid+4][0][i]; k = this_proj -> modelgl -> num_rings[rid][h][j-1]; if (this_proj -> steps > 1 && k > 0) { gtk_tree_store_append (store, & size_level, & step_level); gtk_tree_store_set (store, & size_level, 0, 0, 1, j, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); } else if (this_proj -> steps == 1) { gtk_tree_store_append (store, & size_level, NULL); gtk_tree_store_set (store, & size_level, 0, j, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, -1); } for (l=0; l steps > 1) { gtk_tree_store_set (store, & ring_level, 0, -(h+1), 1, -j, 2, l+1, 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][h][j-1][l], 5, FALSE, 6, FALSE, 7, str, -1); } else { gtk_tree_store_set (store, & ring_level, 0, -j, 1, l+1, 2, FALSE, 3, this_proj -> modelgl -> show_rpoly[rid][h][j-1][l], 4, FALSE, 5, FALSE, 6, str, -1); } g_free (str); } } } } } /*! \fn void rings_set_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief Rings tree view set color and Pango markup in tree view \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void rings_set_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int steps = GPOINTER_TO_INT(data); set_renderer_markup (mod, iter, renderer, (steps) ? 7 : 6); } /*! \fn GtkWidget * create_rings_tree (project * this_proj, int rid, gboolean fill_this) \brief create the ring(s) search tree store \param this_proj the target project \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong \param fill_this 1 = yes, 0 = no */ GtkWidget * create_rings_tree (project * this_proj, int rid, gboolean fill_this) { int i, j, k; GtkTreeViewColumn * rings_col[7]; GtkCellRenderer * rings_cell[7]; gchar * ctitle[8]={i18n("MD step"), i18n("Ring(s) size"), i18n("Id."), i18n("Show"), i18n("Poly."), i18n("Label"), i18n("Pick"), i18n("Atoms")}; gchar * ctype[8]={"text", "text", "text", "active", "active", "active", "active", "text"}; GType col_type_ms[8]={G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING}; GType col_type_ss[7]={G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING}; coord_edition * coord = this_proj -> modelgl -> coord_win; j = (this_proj -> steps > 1) ? 1: 0; k = (this_proj -> steps > 1) ? 0: 1; coord -> rings_model[rid] = gtk_tree_store_newv (7+j, (j) ? col_type_ms : col_type_ss); if (fill_this) fill_rings_model (coord -> rings_model[rid], this_proj, rid); GtkWidget * rings_tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL(coord -> rings_model[rid])); for (i=0; i<7+j; i++) { if (i < 2+j || i > 5+j) { rings_cell[i] = gtk_cell_renderer_text_new (); } else { rings_cell[i] = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(rings_cell[i]), "toggled", G_CALLBACK(on_select_rings), & this_proj -> modelgl -> colorp[rid*10+i][0]); } gtk_cell_renderer_set_fixed_size (rings_cell[i], -1, 25); rings_col[i] = gtk_tree_view_column_new_with_attributes (_(ctitle[i+k]), rings_cell[i], ctype[i+k], i, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(rings_tree), rings_col[i]); gtk_tree_view_column_set_alignment (rings_col[i], 0.5); gtk_tree_view_column_set_cell_data_func (rings_col[i], rings_cell[i], rings_set_visible, & this_proj -> modelgl -> colorp[i][0], NULL); if (i > 5+j) gtk_tree_view_column_set_cell_data_func (rings_col[i], rings_cell[i], rings_set_markup, GINT_TO_POINTER(j), NULL); } return rings_tree; } /*! \fn void add_this_ring_to_search_tree (project * this_proj, int rid) \brief add ring in the search tree based on ring size and id \param this_proj the target project \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong */ void add_this_ring_to_search_tree (project * this_proj, int rid) { GtkTreeIter step_level, size_level, ring_level; GtkTreeIter new_level; coord_edition * coord = this_proj -> modelgl -> coord_win; GtkTreeStore * store = (GtkTreeStore *) coord -> rings_model[rid]; GtkTreeModel * mod = GTK_TREE_MODEL(coord -> rings_model[rid]); gboolean valid; gboolean insert = TRUE; gchar * str; int f, h, i, j, k, l, m; int prepend = 0; if (this_proj -> steps > 1) { valid = gtk_tree_model_get_iter_first(mod, & step_level); while (valid) { gtk_tree_model_get (mod, & step_level, 0, & f, -1); if (f > coord -> rst[rid]) { prepend = 1; valid = FALSE; } else if (f == coord -> rst[rid]) { if (gtk_tree_model_iter_has_child (mod, &step_level)) { h = gtk_tree_model_iter_n_children (mod, &step_level); for (i=0; i coord -> rsz[rid]) { prepend = 3; valid = FALSE; break; } else if (j == coord -> rsz[rid]) { if (gtk_tree_model_iter_has_child (mod, &size_level)) { k = gtk_tree_model_iter_n_children (mod, &size_level); for (l=0; l coord -> ri[rid]) { prepend = 5; valid = FALSE; break; } else if (m == coord -> ri[rid]) { insert = valid = FALSE; break; } } } if (valid) { prepend = 4; valid = FALSE; break; } } } } } if (valid) { prepend = 2; valid = FALSE; } } } else { valid = gtk_tree_model_iter_next(mod, & step_level); } } if (insert) { str = ring_atoms (this_proj, rid, coord -> rst[rid]-1, coord -> rsz[rid]-1, coord -> ri[rid]-1, FALSE); switch (prepend) { case 0: gtk_tree_store_append (store, & step_level, NULL); gtk_tree_store_set (store, & step_level, 0, coord -> rst[rid], 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); gtk_tree_store_append (store, & size_level, & step_level); gtk_tree_store_set (store, & size_level, 0, 0, 1, coord -> rsz[rid], 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); gtk_tree_store_append (store, & ring_level, & size_level); gtk_tree_store_set (store, & ring_level, 0, -coord -> rst[rid], 1, -coord -> rsz[rid], 2, coord -> ri[rid], 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 5, FALSE, 6, FALSE, 7, str, -1); break; case 1: gtk_tree_store_insert_before (store, & new_level, NULL, & step_level); gtk_tree_store_set (store, & new_level, 0, coord -> rst[rid], 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); gtk_tree_store_append (store, & size_level, & new_level); gtk_tree_store_set (store, & size_level, 0, 0, 1, coord -> rsz[rid], 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); gtk_tree_store_append (store, & ring_level, & size_level); gtk_tree_store_set (store, & ring_level, 0, -coord -> rst[rid], 1, -coord -> rsz[rid], 2, coord -> ri[rid], 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 5, FALSE, 6, FALSE, 7, str, -1); break; case 2: gtk_tree_store_insert_after (store, & new_level, & step_level, & size_level); gtk_tree_store_set (store, & new_level, 0, 0, 1, coord -> rsz[rid], 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); gtk_tree_store_append (store, & ring_level, & new_level); gtk_tree_store_set (store, & ring_level, 0, -coord -> rst[rid], 1, -coord -> rsz[rid], 2, coord -> ri[rid], 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 5, FALSE, 6, FALSE, 7, str, -1); break; case 3: gtk_tree_store_insert_before (store, & new_level, & step_level, & size_level); gtk_tree_store_set (store, & new_level, 0, 0, 1, coord -> rsz[rid], 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); gtk_tree_store_append (store, & ring_level, & new_level); gtk_tree_store_set (store, & ring_level, 0, -coord -> rst[rid], 1, -coord -> rsz[rid], 2, coord -> ri[rid], 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 5, FALSE, 6, FALSE, 7, str, -1); break; case 4: gtk_tree_store_insert_after (store, & new_level, & size_level, & ring_level); gtk_tree_store_set (store, & new_level, 0, -coord -> rst[rid], 1, -coord -> rsz[rid], 2, coord -> ri[rid], 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 5, FALSE, 6, FALSE, 7, str, -1); break; case 5: gtk_tree_store_insert_before (store, & new_level, & size_level, & ring_level); gtk_tree_store_set (store, & new_level, 0, -coord -> rst[rid], 1, -coord -> rsz[rid], 2, coord -> ri[rid], 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 5, FALSE, 6, FALSE, 7, str, -1); break; } g_free (str); } } else { valid = gtk_tree_model_get_iter_first(mod, & size_level); while (valid) { gtk_tree_model_get (mod, & size_level, 0, & i, -1); if (i > coord -> rsz[rid]) { prepend = 1; valid = FALSE; } else if (i == coord -> rsz[rid]) { if (gtk_tree_model_iter_has_child (mod, &size_level)) { j = gtk_tree_model_iter_n_children (mod, &size_level); for (k=0; k coord -> ri[rid]) { prepend = 2; valid = FALSE; break; } else if (l == coord -> ri[rid]) { insert = valid = FALSE; break; } } } if (valid) { prepend = 3; valid = FALSE; } } } else { valid = gtk_tree_model_iter_next(mod, & step_level); } } if (insert) { str = ring_atoms (this_proj, rid, coord -> rst[rid]-1, coord -> rsz[rid]-1, coord -> ri[rid]-1, FALSE); switch (prepend) { case 0: gtk_tree_store_append (store, & size_level, NULL); gtk_tree_store_set (store, & size_level, 0, coord -> rsz[rid], 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & ring_level, & size_level); gtk_tree_store_set (store, & ring_level, 0, -coord -> rsz[rid], 1, coord -> ri[rid], 2, FALSE, 3, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 4, FALSE, 5, FALSE, 6, str, -1); break; case 1: gtk_tree_store_insert_before (store, & new_level, NULL, & size_level); gtk_tree_store_set (store, & new_level, 0, coord -> rsz[rid], 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & ring_level, & new_level); gtk_tree_store_set (store, & ring_level, 0, -coord -> rsz[rid], 1, coord -> ri[rid], 2, FALSE, 3, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 4, FALSE, 5, FALSE, 6, str, -1); break; case 2: gtk_tree_store_insert_before (store, & new_level, & size_level, & ring_level); gtk_tree_store_set (store, & new_level, 0, -coord -> rsz[rid], 1, coord -> ri[rid], 2, FALSE, 3, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 4, FALSE, 5, FALSE, 6, str, -1); break; case 3: gtk_tree_store_insert_after (store, & new_level, & size_level, & ring_level); gtk_tree_store_set (store, & new_level, 0, -coord -> rsz[rid], 1, coord -> ri[rid], 2, FALSE, 3, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 4, FALSE, 5, FALSE, 6, str, -1); break; } g_free (str); } } } /*! \fn int get_rmin (project * this_proj, int rid, int step) \brief get ring(s) max size for the MD step \param this_proj the target project \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong \param step the MD step */ int get_rmin (project * this_proj, int rid, int step) { int i, j; for (i=0; i coord -> totcoord[rid+4]; i++) { j = this_proj -> coord -> geolist[rid+4][0][i]; if (this_proj -> modelgl -> num_rings[rid][step-1][j-1]) break; } return j; } /*! \fn int get_rmax (project * this_proj, int rid, int step) \brief get ring(s) min size for the MD step \param this_proj the target project \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong \param step the MD step */ int get_rmax (project * this_proj, int rid, int step) { int i, j; for (i=this_proj -> coord -> totcoord[rid+4]-1; i>-1; i--) { j = this_proj -> coord -> geolist[rid+4][0][i]; if (this_proj -> modelgl -> num_rings[rid][step-1][j-1]) break; } return j; } /*! \fn G_MODULE_EXPORT void update_rings_search (GtkEntry * res, gpointer data) \brief update the ring(s) search widget \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_rings_search (GtkEntry * res, gpointer data) { tint * dat = (tint * )data; gchar * str; int i, j, k, v; int rid; const gchar * m = entry_get_text (res); v = (int)string_to_double ((gpointer)m); project * this_proj = get_project_by_id(dat -> a); coord_edition * coord = this_proj -> modelgl -> coord_win; for (i=0; i<5; i++) { if (i*10 > dat -> b) break; } rid = i - 1; for (i=0; i<3; i++) { if (10*rid+i == dat -> b) break; } switch (i) { case 0: if (v > 0 && v < this_proj -> steps+1) { if (v != coord -> rst[rid]) { coord -> rst[rid] = v; coord -> rsz[rid] = coord -> ri[rid] = -1; for (j=1; j<3; j++) gtk_label_set_text (GTK_LABEL(coord -> rilab[rid][j]), ""); } } else { coord -> rst[rid] = coord -> rsz[rid] = coord -> ri[rid] = -1; } if (coord -> rst[rid] > 0) { update_entry_int(res, coord -> rst[rid]); str = g_strdup_printf ("∈ [%d - %d]", get_rmin(this_proj, rid, coord -> rst[rid]), get_rmax(this_proj, rid, coord -> rst[rid])); gtk_label_set_text (GTK_LABEL(coord -> rilab[rid][1]), str); g_free (str); } else { update_entry_text (res, ""); } break; case 1: if (coord -> rst[rid] > -1) { j = get_rmin(this_proj, rid, coord -> rst[rid]); k = get_rmax(this_proj, rid, coord -> rst[rid]); if (v >= j && v <= k) { if (v != coord -> rsz[rid]) { if (this_proj -> modelgl -> num_rings[rid][coord -> rst[rid]-1][v-1]) { coord -> rsz[rid] = v; coord -> ri[rid] = -1; } else { coord -> rsz[rid] = -1; } } } } else { coord -> rsz[rid] = coord -> ri[rid] = -1; } if (coord -> rsz[rid] > 0) { update_entry_int(res, coord -> rsz[rid]); str = g_strdup_printf ("∈ [1 - %d]", this_proj -> modelgl -> num_rings[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1]); gtk_label_set_text (GTK_LABEL(coord -> rilab[rid][2]), str); g_free (str); } else { update_entry_text (res, ""); gtk_label_set_text (GTK_LABEL(coord -> rilab[rid][2]), ""); } break; case 2: if (coord -> rst[rid] > -1 && coord -> rsz[rid] > -1) { if (v > 0 && v < this_proj -> modelgl -> num_rings[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1]+1) { coord -> ri[rid] = v; } else { coord -> ri[rid] = -1; } } else { coord -> ri[rid] = -1; } if (coord -> ri[rid] > 0) { update_entry_int(res, coord -> ri[rid]); } else { update_entry_text (res, ""); } break; } if (coord -> rst[rid] > 0 && coord -> rsz[rid] > 0 && coord -> ri[rid] > 0) { add_this_ring_to_search_tree (this_proj, rid); } } /*! \fn GtkWidget * create_rings_search (project * this_proj, int rid) \brief create the ring(s) search widget \param this_proj the target project \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong */ GtkWidget * create_rings_search (project * this_proj, int rid) { GtkWidget * rings_search = create_vbox (BSEP); gchar * str = g_strdup_printf (_("Too many %s rings in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for ring(s) individually:\n"), _(rings_type[rid])); add_box_child_start (GTK_ORIENTATION_VERTICAL, rings_search, markup_label(str, 200, -1, 0.5, 0.5), FALSE, FALSE, 10); g_free (str); gchar * search_item[3]={i18n("MD step:"), i18n("Ring size:"), i18n("Ring Id.:")}; int i, j; GtkWidget * hbox; GtkWidget * entry; j = (this_proj -> steps) > 1 ? 0 : 1; coord_edition * coord = this_proj -> modelgl -> coord_win; coord -> rst[rid] = 1; for (i=j; i<3; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, rings_search, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(search_item[i]), 100, -1, 0.0, 0.5), FALSE, FALSE, 20); entry = create_entry (G_CALLBACK(update_rings_search), 100, 15, FALSE, & this_proj -> modelgl -> colorp[rid*10+i][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox,entry, FALSE, FALSE, 0); if (i==0) { str = g_strdup_printf ("∈ [1 - %d]", this_proj -> steps); coord -> rilab[rid][i] = markup_label(str, 50, -1, 0.0, 0.5); g_free (str); } else if (i == 1) { str = g_strdup_printf ("∈ [%d - %d]", get_rmin(this_proj, rid, coord -> rst[rid]), get_rmax(this_proj, rid, coord -> rst[rid])); coord -> rilab[rid][i] = markup_label(str, 50, -1, 0.0, 0.5); g_free (str); } else { coord -> rilab[rid][i] = markup_label("", 50, -1, 0.0, 0.5); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, coord -> rilab[rid][i], FALSE, FALSE, 5); } add_box_child_start (GTK_ORIENTATION_VERTICAL, rings_search, markup_label(_("Search result(s)"), 200, -1, 0.5, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, rings_search, create_rings_tree (this_proj, rid, FALSE), FALSE, FALSE, 0); return rings_search; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_save_rings_to_file (GtkNativeDialog * info, gint response_id, gpointer data) \brief save rings data to file: run the dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_save_rings_to_file (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_save_rings_to_file (GtkDialog * info, gint response_id, gpointer data) \brief save rings data to file: run the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_save_rings_to_file (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { gchar * rings_file = file_chooser_get_file_name (chooser); // Save data to file here ! if (rings_file) { tint * dat = (tint *)data; project * this_proj = get_project_by_id (dat -> a); int rid = dat -> b; if (this_proj -> coord -> totcoord[rid+4]) { FILE * fp = fopen (rings_file, dfi[1]); gchar * str; if (fp) { if (! rid) { fprintf (fp, _("# This file contains the list of all rings in the %s model\n\n"), prepare_for_title(this_proj -> name)); } else { fprintf (fp, _("# This file contains the list of all %s rings in the %s model\n\n"), _(rtype[rid]), prepare_for_title(this_proj -> name)); } int h, i, j, k, l; for (h=0; h < this_proj -> steps; h++) { i = h+1; if (this_proj -> steps > 1) fprintf (fp, _("Step N°%d\n"), i); for (i=0; i < this_proj -> coord -> totcoord[rid+4]; i++) { j = this_proj -> coord -> geolist[rid+4][0][i]; fprintf (fp, (this_proj -> steps > 1) ? _("\n\tRing(s) of size %d atoms\n") : _("\nRing(s) of size %d atoms\n"), j); k = this_proj -> modelgl -> num_rings[rid][h][j-1]; // ring size for (l=0; l steps > 1) ? "\t\tN°%d\t:\t%s\n" : "\tN°%d\t:\t%s\n", l+1, str); g_free (str); } } } fclose (fp); } else { str = g_strdup_printf (_("Impossible to open file: %s"), rings_file); show_error (str, 0, this_proj -> modelgl -> coord_win -> win); g_free (str); } } } } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } /*! \fn G_MODULE_EXPORT void save_rings_to_file (GtkButton * but, gpointer data) \brief save rings data to file \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void save_rings_to_file (GtkButton * but, gpointer data) { tint * dat = (tint *) data; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif gchar * crname = g_strdup_printf (_("Save atoms in %s rings to file"), _(rtype[dat -> b])); info = create_file_chooser (crname, GTK_WINDOW(MainWindow), GTK_FILE_CHOOSER_ACTION_SAVE, _("Save")); g_free (crname); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif file_chooser_set_current_folder (chooser); gchar * rings_file = g_strdup_printf ("%s-rings.dat", _(rtype[dat -> b])); gtk_file_chooser_set_current_name (chooser, rings_file); // g_free (rings_file); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_save_rings_to_file), data); #else run_this_gtk_dialog (info, G_CALLBACK(run_save_rings_to_file), data); #endif } /*! \fn GtkWidget * rings_tab (glwin * view, int rid) \brief create the ring(s) tab for the advanced environments window \param view the target glwin \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong */ GtkWidget * rings_tab (glwin * view, int rid) { GtkWidget * rings = create_vbox (0); GtkWidget * scroll = create_scroll (rings, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (rings, TRUE); gtk_widget_set_vexpand (rings, TRUE); int h, i, j, k; project * this_proj = get_project_by_id(view -> proj); k = 0; for (h=0; h < this_proj -> steps; h++) { for (i=0; i < this_proj -> coord -> totcoord[rid+4]; i++) { j = this_proj -> coord -> geolist[rid+4][0][i]; k += this_proj -> modelgl -> num_rings[rid][h][j-1]; } } if (k < GTK_LIMIT) { add_container_child (CONTAINER_SCR, scroll, create_rings_tree (this_proj, rid, TRUE)); } else { add_container_child (CONTAINER_SCR, scroll, create_rings_search (this_proj, rid)); } GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, rings, hbox, FALSE, FALSE, 2); GtkWidget * hhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, TRUE, TRUE, 100); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, create_button(_("Save to file"), IMG_NONE, NULL, 50, -1, GTK_RELIEF_NORMAL, G_CALLBACK(save_rings_to_file), & view -> colorp[rid][0]), TRUE, TRUE, 40); return rings; } atomes_1.3.1/src/opengl/win/color_box.c0000664000175000017500000003731615212624223017521 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file color_box.c * @short Functions to create the color palettes for the menus of the OpenGL window \n Callbacks to set the color using the color palettes * @author Sébastien Le Roux */ /* * This file: 'color_box.c' * * Contains: * - The functions to create the color palettes for the menus of the OpenGL window - The callbacks to set the color using the color palettes * * List of functions: void get_color (ColRGBA * but, int cid); void color_box (glwin * view, int ideo, int spec, int geo); G_MODULE_EXPORT void set_back_color (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_box_color (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_at_color (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_rings_color (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_total_coord_color (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_partial_coord_color (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_frag_mol_color (GtkWidget * widg, gpointer data); GtkWidget * color_box (glwin * view, int ideo, int spec, int geo); GtkWidget * color_palette (glwin * view, int ideo, int spec, int geo); */ #include "global.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "color_box.h" #include "glview.h" extern void update_gradient_widgets (gradient_edition * gradient_win, background * back); /*! \fn void get_color (ColRGBA * but, int cid) \brief get color from the color palette id \param but the color to prepare \param cid the color palette id, in [0-63] */ void get_color (ColRGBA * but, int cid) { int rid = cid / 4; int bid = cid - rid*4; but -> red = (rid < 6) ? 0.0 : (rid < 11) ? 0.2 * (rid - 5) : 1.0; but -> green = (rid < 6) ? 0.2*rid : (rid < 11) ? 1.0 - 0.2 * (rid - 5) : 0.2 * (rid - 10); but -> blue = bid * 0.333; if (bid == 3) but -> blue = 1.0; } /*! \fn cairo_surface_t * col_surface (double r, double g, double b, int x, int y) \brief create a cairo sufrace painted with the appropriate color \param r red value \param g green value \param b blue value \param x surface x size \param y surface y size */ cairo_surface_t * col_surface (double r, double g, double b, int x, int y) { cairo_surface_t * cst; cairo_t * tcst; cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, x, y); tcst = cairo_create (cst); cairo_set_source_rgb (tcst, r, g, b); cairo_paint (tcst); cairo_destroy (tcst); return cst; } /*! \fn G_MODULE_EXPORT void set_back_color (GtkWidget * widg, gpointer data) \brief set background color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_back_color (GtkWidget * widg, gpointer data) { tint * col = (tint *) data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> back -> color, col -> b); this_proj -> modelgl -> anim -> last -> img -> back -> gradient = 0; cleaning_shaders (this_proj -> modelgl, BACKG); if (this_proj -> modelgl -> gradient_win) update_gradient_widgets (this_proj -> modelgl -> gradient_win, this_proj -> modelgl -> anim -> last -> img -> back); this_proj -> modelgl -> create_shaders[MEASU] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_box_color (GtkWidget * widg, gpointer data) \brief set box color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_box_color (GtkWidget * widg, gpointer data) { tint * col = (tint *) data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> abc -> color, col -> b); this_proj -> modelgl -> create_shaders[MDBOX] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_at_color (GtkWidget * widg, gpointer data) \brief set atomic species color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_at_color (GtkWidget * widg, gpointer data) { tint * col = (tint *) data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> at_color[col -> c], col -> b); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; if (this_proj -> modelgl -> anim -> last -> img -> color_map[1] == 0) this_proj -> modelgl -> create_shaders[POLYS] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_rings_color (GtkWidget * widg, gpointer data) \brief set ring polyhedra color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_rings_color (GtkWidget * widg, gpointer data) { qint * col = (qint *)data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> spcolor[4+col -> b][0][col -> c], col -> d); int shaders[1] = {RINGS}; re_create_md_shaders (1, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_total_coord_color (GtkWidget * widg, gpointer data) \brief set total coordination color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_total_coord_color (GtkWidget * widg, gpointer data) { qint * col = (qint *)data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> spcolor[0][col -> b][col -> c], col -> d); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; if (this_proj -> modelgl -> anim -> last -> img -> color_map[1] == 1) this_proj -> modelgl -> create_shaders[POLYS] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_partial_coord_color (GtkWidget * widg, gpointer data) \brief set partial coordination color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_partial_coord_color (GtkWidget * widg, gpointer data) { qint * col = (qint *)data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> spcolor[1][col -> b][col -> c], col -> d); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; if (this_proj -> modelgl -> anim -> last -> img -> color_map[1] == 2) this_proj -> modelgl -> create_shaders[POLYS] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_frag_mol_color (GtkWidget * widg, gpointer data) \brief set fragment color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_frag_mol_color (GtkWidget * widg, gpointer data) { qint * col = (qint *)data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> spcolor[col -> b][0][col -> c], col -> d); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; if (this_proj -> modelgl -> anim -> last -> img -> color_map[1] == col -> b + 1) this_proj -> modelgl -> create_shaders[POLYS] = TRUE; update (this_proj -> modelgl); } #ifdef GTK4 /*! \fn void color_box (glwin * view, int ideo, int spec, int geo) \brief create the color palette menus data pointers GTK4 \param view the target glwin \param ideo geometry id or else \param spec species or else \param geo geometry or else */ void color_box (glwin * view, int ideo, int spec, int geo) #else /*! \fn GtkWidget * color_box (glwin * view, int ideo, int spec, int geo) \brief create the color palette pointers and menus GTK3 version \param view the target glwin \param ideo geometry id or else \param spec species or else \param geo geometry or else */ GtkWidget * color_box (glwin * view, int ideo, int spec, int geo) #endif { int l, m, n, p; p = view -> proj; #ifdef GTK3 GtkWidget * but; GtkWidget * coltable; // #ifdef GTK3 coltable = gtk_menu_new (); // #else // coltable = gtk_grid_new (); // #endif ColRGBA but_col; #endif project * this_proj = get_project_by_id(p); l = 0; for (l=0; l<64; l++) { #ifdef GTK3 get_color (& but_col, l); cairo_surface_t * surface = col_surface (but_col.red, but_col.green, but_col.blue, 12, 12); // #ifdef GTK3 but = gtk3_menu_item (NULL, NULL, IMG_SURFACE, (gpointer)surface, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE); /* #else GtkWidget * but_img = create_image_from_data (IMG_SURFACE, surface); show_the_widgets (but_img); but = gtk_button_new (); add_container_child (CONTAINER_BUT, but, but_img); gtk_button_set_has_frame ((GtkButton *)but, FALSE); show_the_widgets (but); #endif */ cairo_surface_destroy (surface); #endif if (ideo < -2) { view -> gcid[4+spec][geo][l].a = p; view -> gcid[4+spec][geo][l].b = spec; view -> gcid[4+spec][geo][l].c = geo; view -> gcid[4+spec][geo][l].d = l; #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_rings_color), & view -> gcid[4+spec][geo][l]); #endif } else if (ideo == -2) { #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_back_color), & view -> colorp[l][0]); #endif } else if (ideo == -1) { #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_box_color), & view -> colorp[l][0]); #endif } else if (ideo < this_proj -> nspec*2) { #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_at_color), & view -> colorp[l][ideo]); #endif } else if (ideo < 2*this_proj -> nspec + this_proj -> coord -> totcoord[0]) { n = ideo - 2*this_proj -> nspec; view -> gcid[0][n][l].a = p; view -> gcid[0][n][l].b = spec; view -> gcid[0][n][l].c = geo; view -> gcid[0][n][l].d = l; #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_total_coord_color), & view -> gcid[0][n][l]); #endif } else if (ideo < 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1]) { n = ideo - 2*this_proj -> nspec - this_proj -> coord -> totcoord[0]; view -> gcid[1][n][l].a = p; view -> gcid[1][n][l].b = spec; view -> gcid[1][n][l].c = geo; view -> gcid[1][n][l].d = l; #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_partial_coord_color), & view -> gcid[1][n][l]); #endif } else { n = ideo - 2*this_proj -> nspec; for (m= 0; m coord -> totcoord[m]; } view -> gcid[spec][n][l].a = p; view -> gcid[spec][n][l].b = spec; view -> gcid[spec][n][l].c = geo; view -> gcid[spec][n][l].d = l; #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_frag_mol_color), & view -> gcid[spec][n][l]); #endif } m = l/4; #ifdef GTK3 gtk_menu_attach (GTK_MENU(coltable), but, l-m*4, l+1-m*4, m, m+1); // #else // gtk_grid_attach (GTK_GRID(coltable), but, l-m*4, m, 1, 1); #endif } #ifdef GTK3 but = create_menu_item (FALSE, _("More Colors ...")); gtk_menu_shell_append ((GtkMenuShell *)coltable, but); if (ideo < -2) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(window_color_coord), & view -> gcid[4+spec][geo][4+spec]); } else if (ideo == -2) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(to_run_back_color_window), view); } else if (ideo == -1) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(to_run_box_color_window), view); } else if (ideo < this_proj -> nspec*2) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(to_run_atom_color_window), & view -> colorp[0][ideo]); } else if (ideo < this_proj -> nspec*2 + this_proj -> coord -> totcoord[0]) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(window_color_coord), & view -> gcid[0][n][0]); } else if (ideo < 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1]) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(window_color_coord), & view -> gcid[1][n][1]); } else { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(window_color_coord), & view -> gcid[spec][n][spec]); } show_the_widgets (coltable); return coltable; #endif } #ifdef GTK4 /*! \fn GtkWidget * color_palette (glwin * view, int ideo, int spec, int geo) \brief create the color palette menus GTK4 version \param view the target glwin \param ideo geometry id or else \param spec species or else \param geo geometry or else */ GtkWidget * color_palette (glwin * view, int ideo, int spec, int geo) { int l, m, n, p; p = view -> proj; GtkWidget * but; GtkWidget * coltable = gtk_grid_new (); ColRGBA but_col; project * this_proj = get_project_by_id(p); l = 0; for (l=0; l<64; l++) { get_color (& but_col, l); cairo_surface_t * surface = col_surface (but_col.red, but_col.green, but_col.blue, 12, 12); GtkWidget * but_img = create_image_from_data (IMG_SURFACE, surface); show_the_widgets (but_img); but = gtk_button_new (); add_container_child (CONTAINER_BUT, but, but_img); gtk_button_set_has_frame ((GtkButton *)but, FALSE); show_the_widgets (but); cairo_surface_destroy (surface); if (ideo < -2) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_rings_color), & view -> gcid[4+spec][geo][l]); } else if (ideo == -2) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_back_color), & view -> colorp[l][0]); } else if (ideo == -1) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_box_color), & view -> colorp[l][0]); } else if (ideo < this_proj -> nspec*2) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_at_color), & view -> colorp[l][ideo]); } else if (ideo < 2*this_proj -> nspec + this_proj -> coord -> totcoord[0]) { n = ideo - 2*this_proj -> nspec; g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_total_coord_color), & view -> gcid[0][n][l]); } else if (ideo < 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1]) { n = ideo - 2*this_proj -> nspec - this_proj -> coord -> totcoord[0]; g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_partial_coord_color), & view -> gcid[1][n][l]); } else { n = ideo - 2*this_proj -> nspec; for (m= 0; m coord -> totcoord[m]; } g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_frag_mol_color), & view -> gcid[spec][n][l]); } m = l/4; gtk_grid_attach (GTK_GRID(coltable), but, l-m*4, m, 1, 1); } show_the_widgets (coltable); return coltable; } #endif atomes_1.3.1/src/opengl/win/w_periodic.c0000664000175000017500000005326015212624223017653 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_periodic.c * @short Functions to create the periodic table of the elements \n Functions to select element from the periodic table * @author Sébastien Le Roux */ /* * This file: 'w_periodic.c' * * Contains: * - The functions to create the periodic table of the elements - The functions to select element from the periodic table * * List of functions: int is_in_table (int i, int j); int get_atom_id_from_periodic_table (atom_search * asearch); G_MODULE_EXPORT gboolean on_element_focus (GtkWidget * widget, GdkEvent * event, gpointer data); gchar * get_electronic_structure (int r, int c); G_MODULE_EXPORT void on_element_focus (GtkEventControllerFocus * focus, gpointer data); G_MODULE_EXPORT void on_element_motion_enter (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data); G_MODULE_EXPORT void run_periodic_table (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void get_element (GtkButton * but, gpointer data); GtkWidget * create_el_preview (int p, int a, int r, int c); GtkWidget * el_preview (int p, int a); GtkWidget * create_css_button (int p, int id, int r, int c); GtkWidget * create_css_group (int p, int i); GtkWidget * css_element (int p, int i, int j); GtkWidget * periodic_table (int p, int a); */ #include "global.h" extern insertion_menu mol[]; atom_search * periodic_search; int element; dint table_p[118]; ColRGBA rtcolo[11] = {{142, 255, 142, 1.0}, // #8EFF8E {245, 255, 83, 1.0}, // #F5FF53 {255, 184, 83, 1.0}, // #FFB853 {255, 108, 125, 1.0}, // #FF6C7D {244, 167, 255, 1.0}, // #F4A7FF {64, 133, 56}, // #408538 {177, 94, 255}, // #B15EFF {142, 227, 255, 1.0}, // #8EE3FF {80, 93, 253, 1.0}, // #505DFD {126, 255, 235, 1.0}, // #7EFFEB {95, 192, 176, 1.0}}; // #5FC0B0 gchar * ptcolo[11] = {"#8EFF8E", "#F5FF53", "#FFB853", "#FF6C7D", "#F4A7FF", "#408538", "#B15EFF", "#8EE3FF", "#505DFD", "#7EFFEB", "#5FC0B0"}; /*! \fn gchar * get_electronic_structure (int r, int c) \brief get electronic structure for this (row,column) combination \param r row \param c column */ gchar * get_electronic_structure (int r, int c) { gchar * str = NULL; gchar * prev[10]={" ", "He", "Ne", "Ar", "Kr", "Xe", "Rn", " ", "Xe", "Rn"}; if (r == -1 && c == -1) return g_strdup_printf (_("Electronic structure: [%s]"), _("None")); if (r > 0) { str = g_strdup_printf (_("Electronic structure:\t [%s]"), prev[r]); } else { str = g_strdup_printf (_("Electronic structure:\t ")); } if (c < 2) { str = g_strdup_printf ("%s %ds%d", str, r+1, c+1); } else { if (r < 3) { str = g_strdup_printf ("%s %ds%d %dp%d", str, r+1, 2, r+1, c-11); } else if (r < 5) { if (c == 5 || c == 10) { str = g_strdup_printf ("%s %dd%d %ds%d", str, r, c, r+1, 1); } else if (r == 4 && (c == 4 || c == 7 ||c == 8)) { str = g_strdup_printf ("%s %dd%d %ds%d", str, r, c, r+1, 1); } else if (r == 4 && c == 9) { str = g_strdup_printf ("%s %dd%d", str, r, 10); } else if (c < 12) { str = g_strdup_printf ("%s %dd%d %ds%d", str, r, c-1, r+1, 2); } else { str = g_strdup_printf ("%s %dd%d %ds%d %dp%d", str, r, 10, r+1, 2, r+1, c-11); } } else if (r < 7) { if (c == 9 || c == 10) { str = g_strdup_printf ("%s %df%d %dd%d %ds%d", str, r-1, 14, r, c, r+1, 1); } else if (c < 12) { str = g_strdup_printf ("%s %df%d %dd%d %ds%d", str, r-1, 14, r, c-1, r+1, 2); } else { str = g_strdup_printf ("%s %df%d %dd%d %ds%d %dp%d", str, r-1, 14, r, 10, r+1, 2, r+1, c-11); } } else if (c == 3) { str = g_strdup_printf ("%s %dd%d %ds%d", str, r-3, c-2, r-2, 2); } else if ((c > 7 && c < 10) || (c > 10 && c < 17)) { str = g_strdup_printf ("%s %df%d %ds%d", str, r-4, c-2, r-2, 2); } else if (r == 8) { if (c > 4 && c < 8) { str = g_strdup_printf ("%s %df%d %ds%d", str, r-4, c-2, r-2, 2); } else { str = g_strdup_printf ("%s 4f%d 5d1 6s2", str, c-3); } } else { if (c == 4) { str = g_strdup_printf ("%s %dd%d %ds%d", str, r-3, c-2, r-2, 2); } else if (c == 17) { str = g_strdup_printf ("%s %df%d %ds%d %dp%d", str, r-4, c-3, r-2, 2, r-2, 1); } else { str = g_strdup_printf ("%s %df%d %dd%d %ds%d", str, r-4, c-3, r-3, 1, r-2, 2); } } } return str; } /*! \fn int is_in_table (int i, int j) \brief is this (row,column) combination a chemical element ? \param i row \param j column */ int is_in_table (int i, int j) { if (i == 7) return 0; if (i == 0 && (j > 0 && j < 17)) return 0; if ((i == 1 || i == 2) && (j > 1 && j < 12)) return 0; if ((i == 5 || i == 6) && j ==2) return 0; if (i > 7 && j< 3) return 0; if (i > 2 && i < 5) return 19 + (i-3)*18 + j; if (i == 0) { if (j==0) { return 1; } else { return 2; } } if (i > 0 && i < 3) return 2 + j+1 - 10 * (j/11) + 8 * (i/2); if (i == 5 && j < 2) return 55 + j; if (i == 6 && j < 2) return 87 + j; if (i == 5 && j > 2) return 72 + j-3; if (i == 6 && j > 2) return 104 + j-3; if (i == 8) return 57 + j-3; if (i == 9) return 89 + j-3; return -1; } /*! \fn GtkWidget * create_el_preview (int p, int a, int r, int c) \brief create element preview \param p the target project id \param a target atom search id \param r row \param c column */ GtkWidget * create_el_preview (int p, int a, int r, int c) { GtkWidget * preview = create_vbox (5); GtkWidget * hbox; GtkWidget * lab[5]; int i, id; int size[5] = {125, 30, 15, 15, 15}; gchar * backcol; gchar * name; gchar * str; if (r < 0 && c < 0) { id = 0; } else { id = is_in_table (r, c); } for (i=0; i<5; i++) { backcol = g_strdup_printf ("label#prev-%d-%d-%d {\n" " color: black;\n" " font-weight: bold;\n" " font-size: %dpx;\n" "}\n", i, p, a, size[i]); provide_gtk_css (backcol); g_free (backcol); if (i == 2 || i == 4) hbox = create_hbox (0); name = g_strdup_printf ("prev-%d-%d-%d", i, p, a); switch (i) { case 0: lab[i] = gtk_label_new (periodic_table_info[id].lab); break; case 1: lab[i] = gtk_label_new (_(periodic_table_info[id].name)); break; case 2: str = g_strdup_printf ("Z= %d", periodic_table_info[id].Z); lab[i] = gtk_label_new (str); g_free (str); break; case 3: str = g_strdup_printf ("M= %.3f g/mol", periodic_table_info[id].M); lab[i] = gtk_label_new (str); g_free (str); break; case 4: lab[i] = markup_label(get_electronic_structure (r, c), -1, -1, 0.0, 0.5); break; } gtk_widget_set_name (lab[i], name); g_free (name); if (i < 2) { add_box_child_start (GTK_ORIENTATION_VERTICAL, preview, lab[i], FALSE, FALSE, 0); } else { if (i == 2 || i == 4) add_box_child_start (GTK_ORIENTATION_VERTICAL, preview, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab[i], FALSE, FALSE, 30); } } show_the_widgets (preview); return preview; } /*! \fn GtkWidget * el_preview (int p, int a) \brief create element preview CSS widget \param p the target project id \param a target atom search id */ GtkWidget * el_preview (int p, int a) { GtkWidget * preview = create_vbox (BSEP); gchar * backcol = g_strdup_printf ("box#preview-%d-%d {\n" "border: 3px solid black;\n" "background-color: white;\n" "border-top-left-radius: 60px 90px;\n" "border-bottom-right-radius: 60px 90px;\n" #ifdef GTK3 "box-shadow: 5px 5px 5px 5px rgba(0,0,0,0.4), 2px 2px 0px 1px rgba(0,0,0,0.4) inset;\n" #endif // GTK3 "}\n", p, a); provide_gtk_css (backcol); g_free (backcol); gchar * str = g_strdup_printf ("preview-%d-%d", p, a); gtk_widget_set_name (preview, str); g_free (str); periodic_search -> preview[1] = create_el_preview (p, a, -1, -1); gtk_widget_set_size_request (preview, 400, 275); add_box_child_start (GTK_ORIENTATION_VERTICAL, preview, periodic_search -> preview[1], FALSE, FALSE, 0); return preview; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_element_focus (GtkEventControllerFocus * focus, gpointer data) \brief periodic table focus event callback GTK4 \param focus the GtkEventControllerFocus sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_element_focus (GtkEventControllerFocus * focus, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_element_focus (GtkWidget * widget, GdkEvent * event, gpointer data) \brief periodic table focus event callback GTK3 \param widget the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_element_focus (GtkWidget * widget, GdkEvent * event, gpointer data) #endif { dint * id = (dint *)data; periodic_search -> preview[1] = destroy_this_widget (periodic_search -> preview[1]); periodic_search -> preview[1] = create_el_preview (periodic_search -> proj, periodic_search -> action, id -> a, id -> b); add_box_child_start (GTK_ORIENTATION_VERTICAL, periodic_search -> preview[0], periodic_search -> preview[1], FALSE, FALSE, 0); #ifdef GTK3 return FALSE; #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_element_motion_enter (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data) \brief periodic table motion event callback GTK4 \param motion the GtkEventControllerMotion sending the signal \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_element_motion_enter (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data) { dint * id = (dint *)data; periodic_search -> preview[1] = destroy_this_widget (periodic_search -> preview[1]); periodic_search -> preview[1] = create_el_preview (periodic_search -> proj, periodic_search -> action, id -> a, id -> b); add_box_child_start (GTK_ORIENTATION_VERTICAL, periodic_search -> preview[0], periodic_search -> preview[1], FALSE, FALSE, 0); } #endif /*! \fn G_MODULE_EXPORT void run_periodic_table (GtkDialog * info, gint response_id, gpointer data) \brief periodic table - running the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_periodic_table (GtkDialog * info, gint response_id, gpointer data) { destroy_this_dialog (info); } /*! \fn G_MODULE_EXPORT void get_element (GtkButton * but, gpointer data) \brief get element from periodic table button \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void get_element (GtkButton * but, gpointer data) { element = GPOINTER_TO_INT(data); run_periodic_table (GTK_DIALOG(get_top_level(GTK_WIDGET(but))), 0, NULL); // g_signal_emit_by_name (G_OBJECT(get_top_level(but)), "activate", data); } /*! \fn GtkWidget * create_css_button (int p, int id, int r, int c) \brief create CSS periodic table element button \param p the target project id \param id is element table (1 / 0) \param r row \param c column */ GtkWidget * create_css_button (int p, int id, int r, int c) { int i; switch (r) { case 8: i = 9; break; case 9: i = 10; break; default: switch (c) { case 1: i = 2; break; case 2: i = 3; break; case 11: i = 4; break; case 12: i = 4; if (r == 1) i = 7; if (r == 6) i = 6; break; case 17: i = 6; if (r < 6) i = 8; break; default: if ((r == 0 && c == 0) || (r==1 && (c > 13 && c < 17)) || ((r>1 && r <5) && c == 16)) { i = 0; } else if (c == 0) { i = 1; } else if (c > 2 && c < 8) { i = 3; } else if ((c > 7 && c <11) && r < 6) { i = 3; } else if (r==6 && ((c > 7 && c < 11) || c > 11)) { i = 6; } else if (c==13 && (r == 4 || r == 5)) { i = 4; } else if ((c == 14 || c == 15) && r == 5) { i = 4; } else if ((r==1 && c==13) || (r==2 && (c==14||c==15)) || (r==3 && c==15)) { i = 5; } else { i = 7; } break; } } if (c == 2 && r == 5) i = 9; if (c == 2 && r ==6) i = 10; GtkWidget * but; if (p != -1) { but = create_button (NULL, IMG_NONE, NULL, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(get_element), GINT_TO_POINTER(id)); } else { but = create_button (NULL, IMG_NONE, NULL, -1, -1, GTK_RELIEF_NONE, NULL, NULL); } gchar * butcol = g_strdup_printf ("button#element-%d-%d {\n" //" border-radius: 10px;\n" " background-color: %s;\n" " border-color: black;\n" " border-width: 1px;\n" " color: black;\n" " font-weight: bold;\n" "}\n" "button#element-%d-%d:hover {\n" " background-color: rgba(255,255,255,0.3);\n" " color: %s;\n" " font-weight: bold;\n" "}\n", p, id, ptcolo[i], p, id, ptcolo[i]); provide_gtk_css (butcol); g_free (butcol); gchar * str = g_strdup_printf ("element-%d-%d", p, id); gtk_widget_set_name (but, str); g_free (str); GtkWidget * lab; if (id > 0) { GtkWidget * vbox = create_vbox (BSEP); lab = gtk_label_new (periodic_table_info[id].lab); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, lab, FALSE, FALSE, 0); gchar * labcol = g_strdup_printf ("label#mass-%d-%d {\n" " font-size: 10px;" "}\n", p, id); str = g_strdup_printf ("%d", periodic_table_info[id].Z); lab = gtk_label_new (str); provide_gtk_css (labcol); g_free (labcol); str = g_strdup_printf ("mass-%d-%d", p, id); gtk_widget_set_name (lab, str); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, lab, FALSE, FALSE, 0); add_container_child (CONTAINER_BUT, but, vbox); table_p[id-1].a = r; table_p[id-1].b = c; #ifdef GTK3 g_signal_connect (G_OBJECT (but), "enter-notify-event", G_CALLBACK(on_element_focus), & table_p[id-1]); #endif } else { lab = gtk_label_new (" "); gtk_label_align (lab, 0.5, 0.5); add_container_child (CONTAINER_BUT, but, lab); } #ifdef GTK4 GtkEventController * focus = gtk_event_controller_focus_new (); g_signal_connect (G_OBJECT (focus), "enter", G_CALLBACK(on_element_focus), & table_p[id-1]); gtk_widget_add_controller (but, GTK_EVENT_CONTROLLER (focus)); GtkEventController * motion = gtk_event_controller_motion_new (); g_signal_connect (motion, "enter", G_CALLBACK(on_element_motion_enter), & table_p[id-1]); gtk_widget_add_controller (but, GTK_EVENT_CONTROLLER (motion)); #endif show_the_widgets (but); return but; } /*! \fn GtkWidget * create_css_group (int p, int i) \brief create group CSS \param p the target project id \param i the group */ GtkWidget * create_css_group (int p, int i) { gchar * backcol = g_strdup_printf ("label#group-%d-%d {\n" " border-radius: 25px;\n" " border-color: black;\n" " border-width: 1px;\n" " background-color: %s;\n" " color: black;\n" " font-weight: bold;\n" "}\n", p, i, ptcolo[i]); provide_gtk_css (backcol); g_free (backcol); GtkWidget * lab = gtk_label_new (" "); gtk_widget_set_size_request (lab, 50, 40); gtk_label_align (lab, 0.5, 0.5); gchar * str = g_strdup_printf ("group-%d-%d", p, i); gtk_widget_set_name (lab, str); g_free (str); show_the_widgets (lab); return lab; } /*! \fn GtkWidget * css_element (int p, int i, int j) \brief create CSS for the periodic table elements \param p target project id \param i row \param j column */ GtkWidget * css_element (int p, int i, int j) { int k = is_in_table (i, j); if (k) { return create_css_button (p, k, i, j); } else if (j == 2 && (i == 5 || i == 6)) { return create_css_button (p, i-7, i, j); } else { return gtk_label_new (" "); } } /*! \fn GtkWidget * periodic_table (int p, int a) \brief create periodic table \param p target project id \param a target atom search id */ GtkWidget * periodic_table (int p, int a) { GtkWidget * ptable = gtk_grid_new (); gtk_grid_set_row_homogeneous (GTK_GRID (ptable), TRUE); gtk_grid_set_column_homogeneous (GTK_GRID (ptable), TRUE); gtk_grid_set_row_spacing (GTK_GRID (ptable), 2); gtk_grid_set_column_spacing (GTK_GRID (ptable), 2); int i, j; periodic_search -> preview[0] = el_preview (p, a); gtk_grid_attach (GTK_GRID (ptable), periodic_search -> preview[0], 3, 0, 8, 5); for (i=0; i<10; i++) { for (j=0; j<18; j++) { gtk_grid_attach (GTK_GRID (ptable), css_element(p, i, j), j, i+3, 1, 1); } } gchar * groups[11] = {i18n(" Alkali metal"), i18n(" Alkaline earth metal"), i18n(" Lanthanide"), i18n(" Actinide"), i18n(" Transition metal"), i18n(" Post-transition metal"), i18n(" Metalloid"), i18n(" Polyatomic non-metal"), i18n(" Diatomic non-metal"), i18n(" Noble gas"), i18n(" Unknown")}; gtk_grid_attach (GTK_GRID (ptable), gtk_label_new (" "), 18, 0, 1, 1); int colid[11] = {1, 2, 9, 10, 3, 4, 7, 5, 0, 8, 6}; for (i=0; i<11; i++) { gtk_grid_attach (GTK_GRID (ptable), create_css_group (p, colid[i]), 19, 1+i, 1, 1); gtk_grid_attach (GTK_GRID (ptable), markup_label(_(groups[i]), 120, -1, 0.0, 0.5), 20, 1+i, 3, 1); } return ptable; } /*! \fn int get_atom_id_from_periodic_table (atom_search * asearch) \brief get atom Z from selection in the periodic table \param asearch target atom search, if any */ int get_atom_id_from_periodic_table (atom_search * asearch) { GtkWidget * win = gtk_dialog_new (); gchar * str; if (asearch != NULL) { str = g_strdup_printf (_("Element selection from the periodic table")); periodic_search = asearch; #ifdef GTK3 if (get_project_by_id (asearch -> proj) -> modelgl) { gtk_window_set_attached_to (GTK_WINDOW (win), get_project_by_id (asearch -> proj) -> modelgl -> win); } else { gtk_window_set_attached_to (GTK_WINDOW (win), MainWindow); } #endif } else { str = g_strdup_printf (_("Periodic table of the elements")); periodic_search = g_malloc0(sizeof*periodic_search); periodic_search -> proj = -1; periodic_search -> action = -1; #ifdef GTK3 gtk_window_set_attached_to (GTK_WINDOW (win), MainWindow); #endif } gtk_window_set_resizable (GTK_WINDOW (win), FALSE); gtk_window_set_title (GTK_WINDOW(win), str); g_free (str); gtk_window_set_modal (GTK_WINDOW (win), TRUE); GtkWidget * vbox = dialog_get_content_area (win); element = 0; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, periodic_table (periodic_search -> proj, periodic_search -> action), FALSE, FALSE, 0); run_this_gtk_dialog (win, G_CALLBACK(run_periodic_table), NULL); if (asearch == NULL) g_free (periodic_search); periodic_search = NULL; return element; } atomes_1.3.1/src/opengl/win/submenus.h0000664000175000017500000000743715212624223017402 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file submenus.h * @short Function declarations for the creation of the OpenGL window menus * @author Sébastien Le Roux */ /* * This header file: 'submenus.h' * * Contains: - Function declarations for the creation of the OpenGL window menus */ #ifndef SUBMENUS_H_ #define SUBMENUS_H_ #ifdef GTK3 extern void menu_items_opengl (GtkWidget * menu, glwin * view, int popm); extern GtkWidget * menu_style (glwin * view, int id); extern GtkWidget * menu_map (glwin * view, int id); extern GtkWidget * menu_atoms ( glwin * view, int id, int at); extern GtkWidget * menu_bonds (glwin * view, int id, int at); extern GtkWidget * menu_clones (glwin * view, int id); extern GtkWidget * menu_box_axis (glwin * view, int id, int ab); extern void detach_frag_mol_menu (glwin * view, int id, int jd); extern GtkWidget * menu_coord (glwin * view, int id); extern GtkWidget * add_menu_coord (glwin * view, int id, int jd); extern GtkWidget * menu_poly (glwin * view, int id); extern GtkWidget * menu_rings (glwin * view, int id); extern GtkWidget * menu_edit (glwin * view, int id); extern GtkWidget * menu_tools (glwin * view, int id); extern GtkWidget * menu_rep (glwin * view, int id); extern GtkWidget * menu_proj (glwin * view); extern GtkWidget * menu_back (glwin * view); extern void menu_axis (GtkWidget * menu_ab, glwin * view, int id); extern GtkWidget * menu_anim (glwin * view, int id); extern void menu_items_view (GtkWidget * menu, glwin * view, int popm); #else extern GMenu * menu_style (glwin * view, int popm); extern GMenu * menu_map (glwin * view, int popm); extern GMenu * menu_atoms ( glwin * view, int popm, int at); extern GMenu * menu_bonds (glwin * view, int popm, int at); extern GMenu * menu_clones (glwin * view, int popm); extern GMenu * axis_box_param (glwin * view, int popm, int ab, int style); extern GMenuItem * menu_box_axis (glwin * view, int popm, int ab); extern GMenu * color_item (glwin * view, gchar * act, int id, GCallback handler, gpointer data); extern GMenu * menu_coord (glwin * view, int popm); extern GMenu * add_menu_coord (glwin * view, int popm, int id); extern GMenu * menu_poly (glwin * view, int popm); extern GMenu * menu_rings (glwin * view, int popm); extern GMenu * extract_section (glwin * view, int popm); extern GMenu * menu_edit (glwin * view, int popm); extern GMenu * menu_tools (glwin * view, int popm); extern GMenu * menu_reset (glwin * view, int popm); extern GMenu * menu_fullscreen (glwin * view, int popm); extern GMenu * menu_rep (glwin * view, int popm); extern GMenu * menu_proj (glwin * view, int popm); extern GMenu * menu_back (glwin * view, int popm); extern void menu_axis (GMenu * menu, glwin * view, int popm); extern void menu_items_view (GMenu * menu, glwin * view, int popm); extern GMenu * prepare_opengl_menu (glwin * view, int popm); extern GMenu * prepare_model_menu (glwin * view, int popm); extern GMenu * prepare_coord_menu (glwin * view, int popm); extern GMenu * menu_view (glwin * view, int id); extern GMenu * menu_anim (glwin * view, int popm); extern GMenu * menu_shortcuts (glwin * view, int popm); #endif #endif atomes_1.3.1/src/opengl/win/w_colors.c0000664000175000017500000006220215212624223017352 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_colors.c * @short Functions to create the color selection dialogs * @author Sébastien Le Roux */ /* * This file: 'w_colors.c' * * Contains: * - The functions to create the color selection dialogs * * List of functions: void update_gradient_widgets (gradient_edition * gradient_win, background * back); void window_color (project * this_proj, glwin * view); void back_position_has_changed (gpointer data, GLfloat v); G_MODULE_EXPORT void run_window_color (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void to_run_back_color_window (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_run_back_color_window (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_run_box_color_window (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_run_box_color_window (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_run_atom_color_window (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_run_atom_color_window (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void run_window_color_coord (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void window_color_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void window_color_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_gradient_parameter (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_gradient_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_back_position (GtkRange * range, gpointer data); G_MODULE_EXPORT void gradient_advanced (GtkWidget * widg, gpointer data); G_MODULE_EXPORT gboolean scroll_set_back_position (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean on_gradient_delete (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean on_gradient_delete (GtkWidget * widg, GdkEvent * event, gpointer data); */ #include "global.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "color_box.h" #include "preferences.h" /* The object type for color change -2 : background -1 : box > -1 : coordination */ int wc_cid; /*! \fn void update_gradient_widgets (gradient_edition * gradient_win, , background * back) \brief update the widgets of the gradient window \param gradient_win the target gradient edition \param back the target background information */ void update_gradient_widgets (gradient_edition * gradient_win, background * back) { combo_set_active (gradient_win -> g_box, back -> gradient); int i; GdkRGBA col = colrgba_togtkrgba (back -> color); gtk_color_chooser_set_rgba ((GtkColorChooser *)gradient_win -> col_but, & col); for (i=0; i<2; i++) { col = colrgba_togtkrgba (back -> gradient_color[i]); gtk_color_chooser_set_rgba ((GtkColorChooser *)gradient_win -> grad_but[i], & col); } combo_set_active (gradient_win -> g_box, back -> gradient); if (back -> gradient) { show_the_widgets (gradient_win -> dir); hide_the_widgets (gradient_win -> color_box[0]); show_the_widgets (gradient_win -> color_box[1]); hide_the_widgets (gradient_win -> d_box[(back -> gradient == 2) ? 0 : 1]); show_the_widgets (gradient_win -> d_box[back -> gradient - 1]); combo_set_active (gradient_win -> d_box[back -> gradient - 1], back -> direction); show_the_widgets (gradient_win -> p_box); } else { hide_the_widgets (gradient_win -> dir); show_the_widgets (gradient_win -> color_box[0]); hide_the_widgets (gradient_win -> color_box[1]); for (i=0; i<2; i++) hide_the_widgets (gradient_win -> d_box[i]); hide_the_widgets (gradient_win -> p_box); } } /*! \fn G_MODULE_EXPORT void run_window_color (GtkDialog * win, gint response_id, gpointer data) \brief window color chooser - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_window_color (GtkDialog * win, gint response_id, gpointer data) { project * this_proj = (project *)data; if (response_id == GTK_RESPONSE_OK) { ColRGBA colo = get_window_color (GTK_WIDGET(win)); if (wc_cid == -2) { this_proj -> modelgl -> anim -> last -> img -> back -> color = colo; this_proj -> modelgl -> anim -> last -> img -> back -> gradient = 0; cleaning_shaders (this_proj -> modelgl, BACKG); this_proj -> modelgl -> create_shaders[MEASU] = TRUE; if (this_proj -> modelgl -> gradient_win) { update_gradient_widgets (this_proj -> modelgl -> gradient_win, this_proj -> modelgl -> anim -> last -> img -> back); } } else if (wc_cid == -1) { this_proj -> modelgl -> anim -> last -> img -> abc -> color = colo; this_proj -> modelgl -> create_shaders[MDBOX] = TRUE; } else { this_proj -> modelgl -> anim -> last -> img -> at_color[wc_cid] = colo; int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); int shader[1] = {POLYS}; if (this_proj -> modelgl -> anim -> last -> img -> color_map[1] == 0) re_create_md_shaders (1, shader, this_proj); } update (this_proj -> modelgl); } destroy_this_dialog (win); } /*! \fn void window_color (project * this_proj, glwin * view) \brief window color chooser - creating the dialog \param this_proj the target project \param view the target glwin */ void window_color (project * this_proj, glwin * view) { gchar * str; GdkRGBA col; if (wc_cid == -2) { str = g_strdup_printf (_("Background color")); col = colrgba_togtkrgba (view -> anim -> last -> img -> back -> color); } else if (wc_cid == -1) { str = g_strdup_printf (_("Model box color")); col = colrgba_togtkrgba (view -> anim -> last -> img -> abc -> color); } else { if (wc_cid < this_proj -> nspec) { str = g_strdup_printf (_("%s - atom(s) color"), this_proj -> chemistry -> label[wc_cid]); } else { str = g_strdup_printf (_("%s* - clone(s) color"), this_proj -> chemistry -> label[wc_cid-this_proj -> nspec]); } col = colrgba_togtkrgba (view -> anim -> last -> img -> at_color[wc_cid]); } GtkWidget * win = gtk_color_chooser_dialog_new (str, GTK_WINDOW(view -> win)); gtk_window_set_modal (GTK_WINDOW(win), TRUE); gtk_color_chooser_set_use_alpha (GTK_COLOR_CHOOSER(win), TRUE); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(win), & col); g_free (str); run_this_gtk_dialog (win, G_CALLBACK(run_window_color), this_proj); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_run_back_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) \brief to run background color selection window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_run_back_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void to_run_back_color_window (GtkWidget * widg, gpointer data) \brief to run background color selection window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_run_back_color_window (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *) data; wc_cid = -2; window_color (get_project_by_id(view -> proj), view); update (view); } /*! \fn G_MODULE_EXPORT void set_gradient_color (GtkColorChooser * colob, gpointer data) \brief change background color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_gradient_color (GtkColorChooser * colob, gpointer data) { tint * bid = (tint *)data; glwin * view; if (preferences) { switch (bid -> b) { case 0: tmp_background -> color = get_button_color (colob); break; default: tmp_background -> gradient_color[bid -> b -1] = get_button_color (colob); break; } } else { view = get_project_by_id(bid -> a) -> modelgl; switch (bid -> b) { case 0: view -> anim -> last -> img -> back -> color = get_button_color (colob); break; default: view -> anim -> last -> img -> back -> gradient_color[bid -> b -1] = get_button_color (colob); break; } } if (! preferences) { if (bid -> b) { view -> create_shaders[BACKG] = TRUE; } view -> create_shaders[MEASU] = TRUE; update (view); } } /*! \fn G_MODULE_EXPORT void set_gradient_parameter (GtkWidget * widg, gpointer data) \brief set gradient parameter callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_gradient_parameter (GtkWidget * widg, gpointer data) { tint * bid = (tint *)data; glwin * view; gradient_edition * the_gradient; background * the_back; int i = combo_get_active (widg); if (preferences) { the_gradient = pref_gradient_win; the_back = tmp_background; switch (bid -> b) { case 0: tmp_background -> gradient = i; tmp_background -> direction = 0; break; case 1: tmp_background -> direction = i; break; } } else { view = get_project_by_id(bid -> a) -> modelgl; the_gradient = view -> gradient_win; the_back = view -> anim -> last -> img -> back; switch (bid -> b) { case 0: view -> anim -> last -> img -> back -> gradient = i; view -> anim -> last -> img -> back -> direction = 0; break; default: view -> anim -> last -> img -> back -> direction = i; break; } } update_gradient_widgets (the_gradient, the_back); if (! preferences) { if (! bid -> b && ! i) { cleaning_shaders (view, BACKG); } else { view -> create_shaders[BACKG] = TRUE; } view -> create_shaders[MEASU] = TRUE; update (view); } } /*! \fn void back_position_has_changed (gpointer data, GLfloat v) \brief change gradient mixed position \param data the associated data pointer \param v the new position value */ void back_position_has_changed (gpointer data, GLfloat v) { tint * bid = (tint *)data; if (preferences) { if (v >= 0.0 && v <= 1.0) tmp_background -> position = v; } else { glwin * view = get_project_by_id (bid -> a) -> modelgl; if (v >= 0.0 && v <= 1.0) view -> anim -> last -> img -> back -> position = v; view -> create_shaders[BACKG] = TRUE; update (view); } } /*! \fn G_MODULE_EXPORT gboolean scroll_set_back_position (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief set gradient mixed position - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_back_position (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { back_position_has_changed (data, (GLfloat) value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_back_position (GtkRange * range, gpointer data) \brief set gradient mixed position - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_back_position (GtkRange * range, gpointer data) { back_position_has_changed (data, (GLfloat) gtk_range_get_value (range)); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean on_gradient_delete (GtkWindow * widg, gpointer data) \brief gradient window delete event - GTK4 \param widg \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_gradient_delete (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_gradient_delete (GtkWidget * widg, GdkEvent * event, gpointer data) \brief gradient window delete event - GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_gradient_delete (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { glwin * view = (glwin *)data; view -> gradient_win -> win = destroy_this_widget (view -> gradient_win -> win); g_free (view -> gradient_win); view -> gradient_win = NULL; return TRUE; } /*! \fn G_MODULE_EXPORT void gradient_advanced (GtkWidget * widg, gpointer data) \brief Background configuration window \param widg the widget sending the signal, if any \param the associated data pointer */ G_MODULE_EXPORT void gradient_advanced (GtkWidget * widg, gpointer data) { GtkWidget * hbox, * vbox; GtkWidget * hhbox, * vvbox; gradient_edition * the_gradient; int back_gradient; int back_direction; float back_position; ColRGBA back_color; ColRGBA * gradient_color; glwin * view; vbox = create_vbox (BSEP); if (preferences) { the_gradient = pref_gradient_win; back_gradient = tmp_background -> gradient; back_direction = tmp_background -> direction; back_position = tmp_background -> position; back_color = tmp_background -> color; gradient_color = tmp_background -> gradient_color; } else { view = (glwin *)data; view -> gradient_win = g_malloc0(sizeof*view -> gradient_win); the_gradient = view -> gradient_win; back_gradient = view -> anim -> last -> img -> back -> gradient; back_direction = view -> anim -> last -> img -> back -> direction; back_position = view -> anim -> last -> img -> back -> position; back_color = view -> anim -> last -> img -> back -> color; gradient_color = view -> anim -> last -> img -> back -> gradient_color; } if (preferences) { the_gradient -> win = create_vbox (BSEP); adv_box (the_gradient -> win, _("Background settings"), 5, 120, 0.0); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_gradient -> win, hbox, FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbox, FALSE, FALSE, 60); } else { gchar * str = g_strdup_printf (_("%s - background settings"), get_project_by_id(view -> proj)->name); the_gradient -> win = create_win (str, view -> win, FALSE, FALSE); g_free (str); add_container_child (CONTAINER_WIN, the_gradient -> win, vbox); } int i, j; gchar * g_direction[2][9] = {{i18n("Top to Bottom"), i18n("Right to Left"), i18n("Bottom Right to Top Left"), i18n("Top Right to Bottom Left"), "", "", "", "", ""}, {i18n("Right to Left"), i18n("Left to Right"), i18n("Top to Bottom"), i18n("Bottom to Top"), i18n("Bottom Right to Top Left"), i18n("Bottom Left to Top Right"), i18n("Top Right to Bottom Left"), i18n("Top Left to Bottom Right"), i18n("Center")}}; int n_val[2] = {4, 9}; hbox = abox (vbox, _("Gradient type"), 5); the_gradient -> g_box = create_combo (); combo_text_append (the_gradient -> g_box, _("No Gradient")); combo_text_append (the_gradient -> g_box, _("Linear")); combo_text_append (the_gradient -> g_box, _("Circular")); combo_set_active (the_gradient -> g_box, back_gradient); gtk_widget_set_size_request (the_gradient -> g_box, 200, -1); g_signal_connect (G_OBJECT (the_gradient -> g_box), "changed", G_CALLBACK(set_gradient_parameter), (preferences) ? & pref_pointer[0] : & view -> colorp[0][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, the_gradient -> g_box, FALSE, FALSE, 20); the_gradient -> dir = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, the_gradient -> dir, FALSE, FALSE, 0); hbox = abox (the_gradient -> dir, _("Gradient direction"), 5); for (i=0; i<2; i++) { the_gradient -> d_box[i] = create_combo (); for (j=0; j d_box[i], _(g_direction[i][j])); } gtk_widget_set_size_request (the_gradient -> d_box[i], 200, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, the_gradient -> d_box[i], FALSE, FALSE, 20); } if (back_gradient) { combo_set_active (the_gradient -> d_box[back_gradient-1], back_direction); } for (i=0; i<2; i++) { g_signal_connect (G_OBJECT (the_gradient -> d_box[i]), "changed", G_CALLBACK(set_gradient_parameter), (preferences) ? & pref_pointer[1] : & view -> colorp[1][0]); } the_gradient -> color_box[0] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, the_gradient -> color_box[0], FALSE, FALSE, 20); abox (the_gradient -> color_box[0], _("Background color"), 5); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_gradient -> color_box[0], hbox, FALSE, FALSE, 5); vvbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vvbox, FALSE, FALSE, 60); hhbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hhbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label (_("Single color"), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); the_gradient -> col_but = color_button (back_color, FALSE, 100, -1, G_CALLBACK(set_gradient_color), (preferences) ? & pref_pointer[0] : & view -> colorp[0][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, the_gradient -> col_but, FALSE, FALSE, 0); the_gradient -> color_box[1] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, the_gradient -> color_box[1], FALSE, FALSE, 20); abox (the_gradient -> color_box[1], _("Gradient colors"), 5); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_gradient -> color_box[1], hbox, FALSE, FALSE, 5); vvbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vvbox, FALSE, FALSE, 60); gchar * c_name[2] = {i18n("First color"), i18n("Second color")}; for (i=0; i<2; i++) { hhbox = create_hbox (BSEP); // g_print ("col.r= %f, col.g= %f, col.b= %f\n", gradient_color[i].red, gradient_color[i].green, gradient_color[i].blue); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hhbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label (_(c_name[i]), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); the_gradient -> grad_but[i] = color_button (gradient_color[i], FALSE, 100, -1, G_CALLBACK(set_gradient_color), (preferences) ? & pref_pointer[i+1] : & view -> colorp[i+1][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, the_gradient -> grad_but[i], FALSE, FALSE, 0); } the_gradient -> p_box = abox (the_gradient -> color_box[1], _("Mixed position"), 5); the_gradient -> p_scale = create_hscale (0.0, 1.0, 0.001, back_position, GTK_POS_TOP, 3, 150, G_CALLBACK(set_back_position), G_CALLBACK(scroll_set_back_position), (preferences) ? & pref_pointer[0] : & view -> colorp[0][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, the_gradient -> p_box, the_gradient -> p_scale, FALSE, FALSE, 20); if (! preferences) { add_global_option (vbox, & view -> colorp[3][0]); add_gtk_close_event (the_gradient -> win, G_CALLBACK(on_gradient_delete), view); show_the_widgets (the_gradient -> win); update_gradient_widgets (the_gradient, view -> anim -> last -> img -> back); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_run_box_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) \brief to run box color selection window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_run_box_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void to_run_box_color_window (GtkWidget * widg, gpointer data) \brief to run box color selection window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_run_box_color_window (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *) data; wc_cid = -1; window_color (get_project_by_id(view -> proj), view); view -> create_shaders[MDBOX] = TRUE; update (view); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_run_atom_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) \brief to run atom color selection window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_run_atom_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void to_run_atom_color_window (GtkWidget * widg, gpointer data) \brief to run atom color selection window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_run_atom_color_window (GtkWidget * widg, gpointer data) #endif { tint * id = (tint *) data; // g_debug ("Atom color:: proj= %d, id -> b= %d, id -> c= %d", id -> a, id -> b, id -> c); project * this_proj = get_project_by_id(id -> a); wc_cid = id -> c; window_color (this_proj, this_proj -> modelgl); int shaders[3] = {ATOMS, BONDS, SELEC}; re_create_md_shaders (3, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void run_window_color_coord (GtkDialog * win, gint response_id, gpointer data) \brief window to select a color - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_window_color_coord (GtkDialog * win, gint response_id, gpointer data) { qint * cid = (qint *)data; int c, g, s; project * this_proj = get_project_by_id(cid -> a); s = cid -> b; c = cid -> c; g = cid -> d; if (response_id == GTK_RESPONSE_OK) { if (g > 1) s = 0; this_proj -> modelgl -> anim -> last -> img -> spcolor[g][s][c] = get_window_color (GTK_WIDGET(win)); int shaders[4] = {ATOMS, BONDS, POLYS, RINGS}; re_create_md_shaders (4, shaders, this_proj); update (this_proj -> modelgl); } destroy_this_dialog (win); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void window_color_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create a window to select a color callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void window_color_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void window_color_coord (GtkWidget * widg, gpointer data) \brief create a window to select a color callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_color_coord (GtkWidget * widg, gpointer data) #endif { qint * cid = (qint *)data; gchar * str, * env; int c, g, s; project * this_proj = get_project_by_id(cid -> a); s = cid -> b; c = cid -> c; g = cid -> d; switch (g) { case 0: str = g_strdup_printf (_("%s atom(s) %d fold coordination sphere color"), this_proj -> chemistry -> label[s], this_proj -> coord -> geolist[0][s][c]); break; case 1: env = env_name (this_proj, c, s, 1, NULL); str = g_strdup_printf (_("%s - %s coordination sphere color"), this_proj -> chemistry -> label[s], prepare_for_title(exact_name(env))); g_free (env); break; case 2: str = g_strdup_printf (_("Fragment N°%d color"), c); g = s; s = 0; break; case 3: str = g_strdup_printf (_("Molecule N°%d color"), c); g = s; s = 0; break; case 9: str = g_strdup_printf (_("%d atom chain(s) color"), this_proj -> coord -> geolist[g][0][c]); s = 0; break; default: str = g_strdup_printf (_("%s - %d atom ring(s) color"), _(rings_type[s]), this_proj -> coord -> geolist[g][0][c]); s = 0; break; } GtkWidget * win = gtk_color_chooser_dialog_new (str, GTK_WINDOW(this_proj -> modelgl -> win)); g_free (str); set_color_chooser_color (win, this_proj -> modelgl -> anim -> last -> img -> spcolor[g][s][c]); gtk_color_chooser_set_use_alpha (GTK_COLOR_CHOOSER(win), TRUE); gtk_window_set_modal ((GtkWindow *)win, TRUE); run_this_gtk_dialog (win, G_CALLBACK(run_window_color_coord), data); } atomes_1.3.1/src/opengl/win/w_atoms.c0000664000175000017500000005144415212624223017202 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_atoms.c * @short Functions to create the atom(s) / clone(s) advanced configuration window * @author Sébastien Le Roux */ /* * This file: 'w_atoms.c' * * Contains: * - The functions to create the atom(s) / clone(s) advanced configuration window * * List of functions: G_MODULE_EXPORT gboolean close_event_model (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean close_event_model (GtkWidget * widg, GdkEvent * event, gpointer data); void atoms_input_win (GtkWidget * win, project * this_proj, int nspec, int aoc, double * val); G_MODULE_EXPORT void update_atom_size (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_atom_parameter (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_atom_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void toggled_show_hide_atom (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggled_show_hide_atom (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void toggled_show_hide_label (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggled_show_hide_label (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void close_model (GtkButton * but, gpointer data); G_MODULE_EXPORT void atom_properties (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void atom_properties (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * prop_tab (glwin * view, int aoc); GtkWidget * advance_atom_notebook (glwin * view, int atom_or_clone); GtkWidget * advanced_atom_properties (int atom_or_clone, glwin * view); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #include "color_box.h" extern atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); extern void check_hidden_visible (project * this_proj); extern gchar * label_atpts (project * this_proj, glwin * view, int id); extern GtkWidget * labels_tab (glwin * view, int id); extern GtkWidget * selection_tab (atom_search * asearch, int nats); extern GtkTreeStore * atom_model; /*! \fn G_MODULE_EXPORT void update_atom_size (GtkEntry * res, gpointer data) \brief update atom radius callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_atom_size (GtkEntry * res, gpointer data) { int j; gchar * str; tint * the_data = (tint *)data; int a, t; a = the_data -> c; project * this_proj = get_project_by_id (the_data -> a); j = this_proj -> modelgl -> anim -> last -> img -> style; const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); int s = this_proj -> nspec; if (j == WIREFRAME || j == PUNT) { if (v > 0.0) { this_proj -> modelgl -> anim -> last -> img -> pointrad[a] = v; int shaders[2] = {ATOMS, SELEC}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[PICKS] = TRUE; this_proj -> modelgl -> create_shaders[LABEL] = TRUE; } v = this_proj -> modelgl -> anim -> last -> img -> pointrad[a]; t = PUNT; } else { if (v > 0.0) { this_proj -> modelgl -> anim -> last -> img -> sphererad[a] = v; int shaders[2] = {ATOMS, SELEC}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[PICKS] = TRUE; this_proj -> modelgl -> create_shaders[LABEL] = TRUE; } v = this_proj -> modelgl -> anim -> last -> img -> sphererad[a]; t = SPHERES; } update_entry_double (res, v); if (a < s) { str = label_atpts (this_proj, this_proj -> modelgl, t/PUNT); #ifdef GTK3 gtk_menu_item_set_label (GTK_MENU_ITEM(this_proj -> modelgl -> ogl_atoms[t-2]), str); #endif } else { str = label_atpts (opengl_project, opengl_project -> modelgl, 2+t/PUNT); #ifdef GTK3 gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_atoms[t+2]), str); #endif } g_free (str); update (this_proj -> modelgl); } /*! \fn void atoms_input_win (GtkWidget * win, project * this_proj, int nspec, int aoc, double * val) \brief prepare atom radii entry list \param win the GtkWidget sending the signal \param this_proj the target project \param nspec total number of chemical species \param aoc atom(s) (0) or clone(s) (1) \param val radii list */ void atoms_input_win (GtkWidget * win, project * this_proj, int nspec, int aoc, double * val) { int i, j, k; GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbo; GtkWidget * rad; gchar * dim[2]={" pts"," Å "}; gchar * str; if (this_proj -> modelgl -> anim -> last -> img -> style == WIREFRAME || this_proj -> modelgl -> anim -> last -> img -> style == PUNT) { k = 0; } else { k = 1; } for (i=0; i chemistry -> label[i]); } else { str = g_strdup_printf (" %s*", this_proj -> chemistry -> label[i]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(str, 100, -1, 0.2, 0.5), FALSE, FALSE, 0); g_free (str); j = i + aoc*nspec; rad = create_entry (G_CALLBACK(update_atom_size), 120, 15, FALSE, (gpointer)& this_proj -> modelgl -> colorp[0][j]); update_entry_double (GTK_ENTRY(rad), val[j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, rad, FALSE, FALSE, 0); if (this_proj -> modelgl -> anim -> last -> img -> style == SPACEFILL) widget_set_sensitive (rad, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(dim[k], 30, -1, 0.0, 0.5), FALSE, FALSE, 0); } show_the_widgets (vbox); } /*! \fn G_MODULE_EXPORT void set_atom_parameter (GtkWidget * widg, gpointer data) \brief set atom parameter - creating the dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_atom_parameter (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; gchar * title[2][2] = {{i18n("Adjust atom sphere radius"), i18n("Adjust clone sphere radius")}, {i18n("Adjust atom point size"), i18n("Adjust clone point size")}}; opengl_project_changed (the_data -> a); int s = opengl_project -> nspec; double * val; int id = the_data -> b; int jd = the_data -> c; if (jd) { val = opengl_project -> modelgl -> anim -> last -> img -> pointrad; } else if (opengl_project -> modelgl -> anim -> last -> img -> style == SPACEFILL) { val = opengl_project -> modelgl -> anim -> last -> img -> atomicrad; } else { val = opengl_project -> modelgl -> anim -> last -> img -> sphererad; } GtkWidget * win = dialogmodal (_(title[jd][id]), GTK_WINDOW(opengl_project -> modelgl -> win)); atoms_input_win (win, opengl_project, s, id, val); run_this_gtk_dialog (win, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn G_MODULE_EXPORT void set_atom_color (GtkColorChooser * colob, gpointer data) \brief set atom color callback \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_atom_color (GtkColorChooser * colob, gpointer data) { tint * the_data = (tint *)data; int a; project * this_proj = get_project_by_id(the_data -> a); a = the_data -> c; this_proj -> modelgl -> anim -> last -> img -> at_color[a] = get_button_color (colob); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); update (this_proj -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_show_hide_atom (GtkCheckButton * but, gpointer data) \brief toggle show/hide atom(s) callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_atom (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_show_hide_atom (GtkToggleButton * but, gpointer data) \brief toggle show/hide atom(s) callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_atom (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *)data; int i, j, k; i = id -> a; j = id -> b; k = id -> c; gboolean show = button_get_status ((GtkWidget *)but); #ifdef GTK4 project * this_proj = get_project_by_id (i); int l, m; for (l=0; l steps; l++) { for (m=0; m natomes; m++) { if (this_proj -> atoms[l][m].sp == k) { this_proj -> atoms[l][m].show[j] = show; } } } this_proj -> modelgl -> anim -> last -> img -> show_atom[j][k] = show; check_hidden_visible (this_proj); init_default_shaders (this_proj -> modelgl); update_menu_bar (this_proj -> modelgl); #else gtk_check_menu_item_set_active ((GtkCheckMenuItem *)get_project_by_id(i) -> modelgl -> ogl_spec[j][k], show); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_show_hide_label (GtkCheckButton * but, gpointer data) \brief toggle show/hide label(s) callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_label (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_show_hide_label (GtkToggleButton * but, gpointer data) \brief toggle show/hide label(s) callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_label (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *)data; int i, j, k; i = id -> a; j = id -> b; k = id -> c; gboolean show = button_get_status ((GtkWidget *)but); project * this_proj = get_project_by_id (i); #ifdef GTK4 int l, m; for (l=0; l steps; l++) { for (m=0; m natomes; m++) { if (this_proj -> atoms[l][m].sp == k) { this_proj -> atoms[l][m].label[j] = show; } } } this_proj -> modelgl -> labelled = check_label_numbers (this_proj, j); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); update_menu_bar (this_proj -> modelgl); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[j][k], show); #endif } /*! \fn GtkWidget * prop_tab (glwin * view, int aoc) \brief create atom(s)/clone(s) properties tab \param view the target glwin \param aoc atom(s) (0) or clone(s) (1) */ GtkWidget * prop_tab (glwin * view, int aoc) { int i, j, k; gchar * str; GtkWidget * lab; GtkWidget * prop_box; GtkWidget * hbox; GtkWidget * but; GtkWidget * entry; project * this_proj = get_project_by_id(view -> proj); gchar * coln[5] = {i18n("Color"), i18n("Radius [Å]"), i18n("Show"), i18n("Label"), i18n("Size [pts]")}; int csize[5] = {60, 0, 25, 0, 0}; GtkWidget * prop = create_layout (-1, -1); GtkWidget * vbox = add_vbox_to_layout (prop, -1, -1); k = view -> anim -> last -> img -> style; prop_box = create_hbox (0); gtk_widget_set_size_request (prop_box, -1, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, prop_box, FALSE, TRUE, 0); for (i=0; i<4; i++) { if (i == 1 && (k == WIREFRAME || k == PUNT)) { str = g_strdup_printf ("%s", _(coln[4])); } else { str = g_strdup_printf ("%s", _(coln[i])); } lab = markup_label(str, -1, -1, 0.0, 0.0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, prop_box, lab, FALSE, FALSE, csize[i]); } for (i=0; i< this_proj -> nspec; i++) { hbox = create_hbox (0); //gtk_widget_set_size_request (hbox, -1, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, TRUE, 0); j = i + aoc * this_proj -> nspec; if (aoc == 0) { str = g_strdup_printf (" %s", this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf (" %s*", this_proj -> chemistry -> label[i]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 30, -1, 0.0, 0.5), FALSE, FALSE, 10); g_free (str); but = color_button (view -> anim -> last -> img -> at_color[j], TRUE, 80, -1, G_CALLBACK(set_atom_color), & view -> colorp[0][j]); if (aoc == 0) { str = g_strdup_printf (_("%s atom(s) color"), this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf (_("%s clone(s) color"), this_proj -> chemistry -> label[i]); } gtk_color_button_set_title (GTK_COLOR_BUTTON(but), str); g_free (str); if (this_proj -> modelgl -> anim -> last -> img -> color_map[0] != 0) { widget_set_sensitive (but, 0); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 5); // Raduis entry entry = create_entry (G_CALLBACK(update_atom_size), 80, 10, FALSE, (gpointer)& this_proj -> modelgl -> colorp[0][j]); if (k == WIREFRAME || k == PUNT) { update_entry_double (GTK_ENTRY(entry), view -> anim -> last -> img -> pointrad[j]); } else if (k == BALL_AND_STICK || k == SPHERES) { update_entry_double (GTK_ENTRY(entry), view -> anim -> last -> img -> sphererad[j]); } else if (k == SPACEFILL) { update_entry_double (GTK_ENTRY(entry), view -> anim -> last -> img -> atomicrad[j]); widget_set_sensitive (entry, 0); } else { if (k == CYLINDERS) { update_entry_double (GTK_ENTRY(entry), view -> anim -> last -> img -> radall[aoc]); } widget_set_sensitive (entry, 0); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); // Show/Hide check button add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (NULL, -1, -1, view -> anim -> last -> img -> show_atom[aoc][i], G_CALLBACK(toggled_show_hide_atom), & view -> colorp[aoc][i]), FALSE, FALSE, 30); // Show/Hide label check button add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (NULL, -1, -1, view -> anim -> last -> img -> show_label[aoc][i], G_CALLBACK(toggled_show_hide_label), & view -> colorp[aoc][i]), FALSE, FALSE, 5); } return prop; } /*! \fn G_MODULE_EXPORT void close_model (GtkButton * but, gpointer data) \brief free 'model_win' data \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void close_model (GtkButton * but, gpointer data) { tint * dat = (tint *)data; project * this_proj = get_project_by_id(dat -> a); this_proj -> modelgl -> model_win[dat -> b] -> win = destroy_this_widget (this_proj -> modelgl -> model_win[dat -> b] -> win); g_free (this_proj -> modelgl -> model_win[dat -> b]); this_proj -> modelgl -> model_win[dat -> b] = NULL; g_free (this_proj -> modelgl -> search_widg[dat -> b]); this_proj -> modelgl -> search_widg[dat -> b] = NULL; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean close_event_model (GtkWindow * widg, gpointer data) \brief close event callback GTK4 \param widg the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_event_model (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean close_event_model (GtkWidget * widg, GdkEvent * event, gpointer data) \brief close event callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_event_model (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { close_model (NULL, data); return FALSE; } /*! \fn GtkWidget * advance_atom_notebook (glwin * view, int atom_or_clone) \brief create atom(s) advanced properties notebook \param view the target glwin \param atom_or_clone atom(s) or clone(s) (0/1) */ GtkWidget * advance_atom_notebook (glwin * view, int atom_or_clone) { GtkWidget * notebook = gtk_notebook_new (); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), prop_tab (view, atom_or_clone), gtk_label_new (_("Display properties"))); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), labels_tab (view, atom_or_clone), gtk_label_new (_("Label properties"))); if (view -> search_widg[atom_or_clone] == NULL) { view -> search_widg[atom_or_clone] = allocate_atom_search (view -> proj, atom_or_clone, atom_or_clone, get_project_by_id(view -> proj) -> natomes); } gtk_notebook_append_page (GTK_NOTEBOOK(notebook), selection_tab (view -> search_widg[atom_or_clone], get_project_by_id(view -> proj) -> natomes), gtk_label_new ((atom_or_clone) ? _("Clone(s) selection") : _("Atom(s) selection"))); return notebook; } /*! \fn GtkWidget * advanced_atom_properties (int atom_or_clone, glwin * view) \brief create atom advanced properties window 'model_win' \param atom_or_clone atom(s) (0) or clone(s) (1) \param view the target glwin */ GtkWidget * advanced_atom_properties (int atom_or_clone, glwin * view) { GtkWidget * aprop; gchar * win_title[2]={i18n("Atom(s) configuration - "), i18n("Clone(s) configuration - ")}; gchar * str = g_strdup_printf ("%s%s", _(win_title[atom_or_clone]), prepare_for_title(get_project_by_id(view -> proj)->name)); aprop = create_win (str, view -> win, FALSE, FALSE); int i = (get_project_by_id(view -> proj)-> natomes >= GTK_LIMIT) ? 170 : 0; gtk_widget_set_size_request (aprop, -1, 580+i); GtkWidget * vbox = create_vbox (5); add_container_child (CONTAINER_WIN, aprop, vbox); view -> model_win[atom_or_clone] -> notebook = advance_atom_notebook (view, atom_or_clone); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, view -> model_win[atom_or_clone] -> notebook, TRUE, TRUE, 0); GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); GtkWidget * but = create_button (_("Close"), IMG_STOCK, FCLOSE, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(close_model), & view -> colorp[atom_or_clone][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 5); add_gtk_close_event (aprop, G_CALLBACK(close_event_model), & view -> colorp[atom_or_clone][0]); return aprop; } #ifdef GTK3 /*! \fn G_MODULE_EXPORT void atom_properties (GtkWidget * widg, gpointer data) \brief atom(s) property callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void atom_properties (GtkWidget * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT void atom_properties (GSimpleAction * action, GVariant * parameter, gpointer data) \brief atom(s) property callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void atom_properties (GSimpleAction * action, GVariant * parameter, gpointer data) #endif { tint * the_data = (tint *) data; int atom_or_clone = the_data -> b; project * this_proj = get_project_by_id (the_data -> a); if (this_proj -> modelgl -> model_win[atom_or_clone] == NULL) { this_proj -> modelgl -> model_win[atom_or_clone] = g_malloc0(sizeof*this_proj -> modelgl -> model_win[atom_or_clone]); this_proj -> modelgl -> model_win[atom_or_clone] -> win = advanced_atom_properties (atom_or_clone, this_proj -> modelgl); show_the_widgets (this_proj -> modelgl -> model_win[atom_or_clone] -> win); if (this_proj -> natomes < GTK_LIMIT) { hide_the_widgets (this_proj -> modelgl -> search_widg[atom_or_clone] -> info[1]); } else { hide_the_widgets (this_proj -> modelgl -> search_widg[atom_or_clone] -> id_box); } } if (GTK_IS_WIDGET(this_proj -> modelgl -> model_win[atom_or_clone] -> win)) { gtk_notebook_set_current_page (GTK_NOTEBOOK (this_proj -> modelgl -> model_win[atom_or_clone] -> notebook), the_data -> c); } else { show_warning (g_strdup_printf (_("Error impossible to display the model window for %s !"), (atom_or_clone) ? _("clones") : _("atoms")), this_proj -> modelgl -> win); } } atomes_1.3.1/src/opengl/win/w_spiner.c0000664000175000017500000001425315212624223017354 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_spiner.c * @short Functions to create the 'Spin' window * @author Sébastien Le Roux */ /* * This file: 'w_spiner.c' * * Contains: * - The functions to create the 'Spin' window * * List of functions: gboolean spin (gpointer data); static gboolean spin_wait_for_stop (gpointer data); G_MODULE_EXPORT void spin_go (GtkButton * but, gpointer data); G_MODULE_EXPORT void spin_stop (GtkButton * but, gpointer data); G_MODULE_EXPORT void window_spinner (GtkWidget * widg, gpointer data); */ #include "global.h" #include "glview.h" extern void save_rotation_quaternion (glwin * view); extern void rotate_x_y (glwin * view, double angle_x, double angle_y); /*! \fn gboolean spin (gpointer data) \brief spin \param data the associated data pointer */ gboolean spin (gpointer data) { tint * val = (tint *) data; project * this_proj = get_project_by_id(val -> a); #ifdef DEBUG // g_debug (":: SPIN:: a= %d, c= %d", val -> a, val -> c); // g_debug (":: SPIN:: speed[c]= %d", this_proj -> modelgl -> spin_speed[val -> c]); #endif // The next 2 tests are required if a spinning project is closed // For some reason even after ending the spin the signal is not // terminated before deleting the project's glwin. if (this_proj) { if (this_proj -> modelgl) { if (this_proj -> modelgl -> spin[val -> c]) { save_rotation_quaternion (this_proj -> modelgl); double cameraAngle[2] = {0.0, 0.0}; cameraAngle[val -> c] = 0.1 * this_proj -> modelgl -> spin_speed[val -> c]; rotate_x_y (this_proj -> modelgl, cameraAngle[0], cameraAngle[1]); update (this_proj -> modelgl); return TRUE; } else { return FALSE; } } else { return FALSE; } } else { return FALSE; } } /*! \fn static gboolean spin_wait_for_stop (gpointer data) \brief spin and wait for stop \param data the associated data pointer */ static gboolean spin_wait_for_stop (gpointer data) { tint * val = (tint *) data; if (get_project_by_id(val -> a) -> modelgl -> spin[val -> c]) { return TRUE; } else { return FALSE; } } /*! \fn G_MODULE_EXPORT void spin_go (GtkButton * but, gpointer data) \brief start spin \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void spin_go (GtkButton * but, gpointer data) { tint * val = (tint *) data; glwin * view = get_project_by_id(val -> a) -> modelgl; int s = val -> b - 2; #ifdef DEBUG // g_debug (":: SPIN_GO:: a= %d, b= %d, c= %d, d=%d", val -> a, val -> b, val -> c, s); // g_debug (":: SPIN_GO:: speed[b]= %d", view -> spin_speed[val -> c]); #endif view -> spin_speed[val -> c] += s; if (view -> spin_speed[val -> c] == 0) { view -> spin[val -> c] = FALSE; g_timeout_add (REFRESH, (GSourceFunc) spin_wait_for_stop, data); } else if (! view -> spin[val -> c]) { view -> spin[val -> c] = TRUE; g_timeout_add (REFRESH, (GSourceFunc) spin, data); } } /*! \fn G_MODULE_EXPORT void spin_stop (GtkButton * but, gpointer data) \brief stop spin \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void spin_stop (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; int i; for (i=0; i<2; i++) { view -> spin[i] = FALSE; view -> spin_speed[i] = 0; } //set_sensitive_coord_menu (view, TRUE); } /*! \fn G_MODULE_EXPORT void window_spinner (GtkWidget * widg, gpointer data) \brief create the spin window callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_spinner (GtkWidget * widg, gpointer data) { glwin * view = (glwin *) data; if (view -> spiner == NULL) { view -> spiner = g_malloc0(sizeof*view -> spiner); gchar * str = g_strdup_printf (_("%s - spin"), prepare_for_title(get_project_by_id(view -> proj) -> name)); view -> spiner -> win = create_win (str, view -> win, FALSE, FALSE); g_free (str); GtkWidget * table = gtk_grid_new (); add_container_child (CONTAINER_WIN, view -> spiner -> win, table); view -> spiner -> right = create_button (_("Right"), IMG_STOCK, GO_RIGHT, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(spin_go), & view -> colorp[1][1]); view -> spiner -> left = create_button (_("Left"), IMG_STOCK, GO_LEFT, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(spin_go), & view -> colorp[3][1]); view -> spiner -> stop = create_button (_("Stop"), IMG_STOCK, MEDIA_STOP, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(spin_stop), view); view -> spiner -> up = create_button (_("Up"), IMG_STOCK, GO_UP, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(spin_go), & view -> colorp[3][0]); view -> spiner -> down = create_button (_("Down"), IMG_STOCK, GO_DOWN, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(spin_go), & view -> colorp[1][0]); gtk_grid_attach (GTK_GRID (table), view -> spiner -> right, 2,1,1,1); gtk_grid_attach (GTK_GRID (table), view -> spiner -> left, 0,1,1,1); gtk_grid_attach (GTK_GRID (table), view -> spiner -> stop, 1,1,1,1); gtk_grid_attach (GTK_GRID (table), view -> spiner -> up, 1,0,1,1); gtk_grid_attach (GTK_GRID (table), view -> spiner -> down, 1,2,1,1); add_gtk_close_event (view -> spiner -> win, G_CALLBACK(hide_this_window), NULL); show_the_widgets (view -> spiner -> win); gtk_window_set_resizable (GTK_WINDOW(view -> spiner -> win), FALSE); } else { show_the_widgets (view -> spiner -> win); } } atomes_1.3.1/src/opengl/win/glwindow.c0000664000175000017500000016236415212624223017367 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file glwindow.c * @short Functions to create a project OpenGL window * @author Sébastien Le Roux */ /* * This file: 'glwindow.c' * * Contains: * - The functions to create a project OpenGL window * * List of functions: gboolean create_3d_model (int p, gboolean load); G_MODULE_EXPORT gboolean on_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data); G_MODULE_EXPORT gboolean on_glwin_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data); void update_all_menus (glwin * view, int nats); void menu_items_opengl (GtkWidget * menu, glwin * view, int pop); void menu_items_model (GtkWidget * menu, glwin * view, int pop); void menu_items_view (GtkWidget * menu, glwin * view, int popm); void prepare_opengl_menu_bar (glwin * view); void change_color_map (glwin * view, int col); void set_motion (glwin * view, int axis, int da, int db, gboolean UpDown, GdkModifierType state); void activate_glwin_action (gchar * action_string, gchar * action_name, glwin * view); void glwin_key_pressed (guint keyval, GdkModifierType state, gpointer data); void prep_model (int p); G_MODULE_EXPORT void render_gl_image (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_win_realize (GtkWidget * widg, gpointer data); GtkWidget * prep_rings_menu (glwin * view, int id); GtkWidget * coord_menu (glwin * view); GtkWidget * menu_opengl (glwin * view, int pop); GtkWidget * menu_model (glwin * view, int pop); GtkWidget * menu_view (glwin * view, int popm); mat4_t insert_projection (glwin * view); vec3_t get_insertion_coordinates (glwin * view); */ #include "global.h" #include "project.h" #include "calc.h" #include "glview.h" #include "initcoord.h" #include "submenus.h" #include "color_box.h" #include "movie.h" extern G_MODULE_EXPORT void opengl_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void set_style (GtkWidget * widg, gpointer data); extern void set_render (gpointer data); extern G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data); extern void set_sensitive_coord_menu (glwin * view, gboolean status); extern void set_color_map_sensitive (glwin * view); extern G_MODULE_EXPORT void set_selection_mode (GtkWidget * widg, gpointer data); extern gboolean spin (gpointer data); extern G_MODULE_EXPORT void spin_stop (GtkButton * but, gpointer data); extern G_MODULE_EXPORT void spin_go (GtkWidget * widg, gpointer data); extern void update_menus (glwin * view); extern void set_this_style (glwin * view, int style); extern G_MODULE_EXPORT void set_box_axis_style (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_recorder (GtkWidget * widg, gpointer data); extern void window_encode (glwin * view, gboolean video); extern GtkWidget * menupoly (glwin * view, int jd, int id, gchar * poln); extern G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data); #ifdef GTK4 extern void update_menu_bar (glwin * view); extern G_MODULE_EXPORT void set_full_screen (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void add_object (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void label_unlabel_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void select_unselect_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void edit_in_new_project (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void remove_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void copy_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern G_MODULE_EXPORT void set_full_screen (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void to_reset_view (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void add_object (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void label_unlabel_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void select_unselect_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void remove_the_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void copy_the_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void edit_in_new_project (GtkWidget * widg, gpointer data); #endif extern void save_rotation_quaternion (glwin * view); extern void rotate_x_y (glwin * view, double angle_x, double angle_y); extern void translate (project * this_proj, int status, int axis, vec3_t trans); extern int selected_aspec; extern int is_selected; extern int is_labelled; extern G_MODULE_EXPORT void on_create_new_project (GtkWidget * widg, gpointer data); extern gchar * action_atoms[3]; extern int get_selection_type (glwin * view); extern GtkWidget * shortcuts_window (int sections, int group_by_section[sections], int groups, int shortcut_by_group[groups], gchar * section_names[sections], gchar * group_names[groups], shortcuts shortcs[]); atomic_object * copied_object = NULL; gchar * opengl_section_names[]={ i18n("General"), i18n("Analysis mode"), i18n("Edition mode") }; int opengl_group_by_section[] = { 5, 4, 3 }; gchar * opengl_group_names[]={i18n("Styles"), i18n("Measures"), i18n("Selection mode"), i18n("Window management"), i18n("Mouse mode"), i18n("Camera rotation"), i18n("Camera motion"), i18n("Camera spin"), i18n("Model interaction"), i18n("Coordinates rotation"), i18n("Coordinates translation"), i18n("Model interaction")}; int opengl_shortcut_by_group[] = { 10, 1, 4, 6, 2, // Global 4, 6, 6, 3, // Analysis 4, 6, 6 }; // Edition shortcuts opengl_shortcuts[] = { // // Global // { i18n("Atom(s) color map"), i18n("change atom(s) color map"), GDK_KEY_a, "a" }, { i18n("Polyhedra color map"), i18n("change polyhedra color map"), GDK_KEY_p, "p" }, { i18n("Balls and Sticks"), i18n("change global style to balls and sticks"), GDK_KEY_b, "b" }, { i18n("Cylinders"), i18n("change global style to cylinders"), GDK_KEY_c, "c" }, { i18n("Spheres"), i18n("change global style to spheres"), GDK_KEY_s, "s" }, { i18n("Covalent Radii"), i18n("change global style to covalent radii"), GDK_KEY_o, "o" }, { i18n("Ionic Radii"), i18n("change global style to ionic radii"), GDK_KEY_i, "i" }, { i18n("van der Waals Radii"), i18n("change global style to van der Waals radii"), GDK_KEY_v, "v" }, { i18n("In Crystal Radii"), i18n("change global style to in crystal radii"), GDK_KEY_r, "r" }, { i18n("Wireframes"), i18n("change global style to wireframes"), GDK_KEY_w, "w" }, // { i18n("All measures for the selection, pressed:\n\n" "\t- 1st time: show inter-atomic distances\n" "\t- 2nd time: show inter-atomic angles\n" "\t- 3rd time: hide measures"), i18n("Show measures"), GDK_KEY_m, "m" }, // { i18n("Atom"), i18n("atom selection mode"), GDK_KEY_a, "a" }, { i18n("Coordination"), i18n("coordination sphere selection mode"), GDK_KEY_c, "c" }, { i18n("Fragment"), i18n("fragment selection mode"), GDK_KEY_f, "f" }, { i18n("Molecule"), i18n("molecule selection mode"), GDK_KEY_m, "m" }, // { i18n("Environments"), i18n("Environments window"), GDK_KEY_e, "e" }, { i18n("Measures"), i18n("Measures window"), GDK_KEY_m, "m" }, { i18n("Recorder"), i18n("Recorder window"), GDK_KEY_r, "r" }, { i18n("Create new project"), i18n("Create new project"), GDK_KEY_n, "n" }, { i18n("Enter fullscreen"), i18n("Enter fullscreen"), GDK_KEY_f, "f" }, { i18n("Exit fullscreen"), i18n("Exit fullscreen"), GDK_KEY_Escape, "Escape" }, // #ifdef OSX { i18n("Analysis mode"), i18n("Analysis mode"), GDK_KEY_a, "a" }, { i18n("Edition mode"), i18n("Edition mode"), GDK_KEY_e, "e" }, #else { i18n("Analysis mode"), i18n("Analysis mode"), GDK_KEY_a, "a" }, { i18n("Edition mode"), i18n("Edition mode"), GDK_KEY_e, "e" }, #endif // // Analysis // { i18n("Rotate right"), i18n("rotate right"), GDK_KEY_Right, "Right" }, { i18n("Rotate left"), i18n("rotate left"), GDK_KEY_Left, "Left" }, { i18n("Rotate up"), i18n("rotate up"), GDK_KEY_Up, "Up" }, { i18n("Rotate down"), i18n("rotate down"), GDK_KEY_Down, "Down" }, // { i18n("Move right"), i18n("move camera right"), GDK_KEY_Right, "Right" }, { i18n("Move left"), i18n("move camera left"), GDK_KEY_Left, "Left" }, { i18n("Move up"), i18n("move camera up"), GDK_KEY_Up, "Up" }, { i18n("Move down"), i18n("move camera down"), GDK_KEY_Down, "Down" }, { i18n("Zoom in"), i18n("zoom camera in"), GDK_KEY_Down, "Up" }, { i18n("Zoom out"), i18n("zoom camera out"), GDK_KEY_Down, "Down" }, // { i18n("Spin right"), i18n("rotate right"), GDK_KEY_Right, "Right" }, { i18n("Spin left"), i18n("rotate left"), GDK_KEY_Left, "Left" }, { i18n("Spin up"), i18n("rotate up"), GDK_KEY_Up, "Up" }, { i18n("Spin down"), i18n("rotate down"), GDK_KEY_Down, "Down" }, { i18n("Pause / restart"), i18n("pause / restart spinning"), GDK_KEY_space, "space" }, { i18n("Stop"), i18n("stop spinning"), GDK_KEY_s, "s" }, // { i18n("Label / unlabel all atom(s)"), i18n("Label / unlabel all atom(s)"), GDK_KEY_l, "l" }, { i18n("Select / unselect all atom(s)"), i18n("Select / unselect all atom(s)"), GDK_KEY_a, "a" }, { i18n("Copy selection"), i18n("Copy selection"), GDK_KEY_c, "c" }, // // Edition // { i18n("Rotate right"), i18n("rotate right"), GDK_KEY_Right, "Right" }, { i18n("Rotate left"), i18n("rotate left"), GDK_KEY_Left, "Left" }, { i18n("Rotate up"), i18n("rotate up"), GDK_KEY_Up, "Up" }, { i18n("Rotate down"), i18n("rotate down"), GDK_KEY_Down, "Down" }, // { i18n("Translate right"), i18n("move camera right"), GDK_KEY_Right, "Right" }, { i18n("Translate left"), i18n("move camera left"), GDK_KEY_Left, "Left" }, { i18n("Translate up"), i18n("move camera up"), GDK_KEY_Up, "Up" }, { i18n("Translate down"), i18n("move camera down"), GDK_KEY_Down, "Down" }, { i18n("Zoom in"), i18n("zoom camera in"), GDK_KEY_Up, "Up" }, { i18n("Zoom out"), i18n("zoom camera out"), GDK_KEY_Down, "Down" }, // { i18n("Label / unlabel all atom(s)"), i18n("Label / unlabel all atom(s)"), GDK_KEY_l, "l" }, { i18n("Select / unselect all atom(s)"), i18n("Select / unselect all atom(s)"), GDK_KEY_a, "a" }, { i18n("Copy selection"), i18n("Copy selection"), GDK_KEY_c, "c" }, { i18n("Cut selection"), i18n("Cut selection"), GDK_KEY_x, "x" }, { i18n("Paste selection"), i18n("Paste selection"), GDK_KEY_v, "v" }, { i18n("Delete selection"), i18n("Delete selection"), GDK_KEY_Delete, "Delete" } }; #ifdef GTK3 /*! \fn GtkWidget * prep_rings_menu (glwin * view, int id) \brief create the 'Rings' submenu GTK3 \param view the target glwin \param id atoms in ring(s) (0) or polyhedra from rings (1) */ GtkWidget * prep_rings_menu (glwin * view, int id) { if (id == 0) { return menu_rings (view, 0); } else { return menupoly (view, 0, 2, NULL); } } /*! \fn GtkWidget * coord_menu (glwin * view) \brief create the 'Coordination' submenu GTK3 \param view the target glwin */ GtkWidget * coord_menu (glwin * view) { int i, j, k; GtkWidget * widg; for (j=4; j<10; j++) { if (j<9) { if (view -> ogl_poly[0][j] != NULL) { for (k=0; k proj) -> coord -> totcoord[j]; k++) { if (view -> ogl_poly[0][j][k] != NULL) { if (GTK_IS_WIDGET(view -> ogl_poly[0][j][k])) { widg = gtk_widget_get_parent (view -> ogl_poly[0][j][k]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> ogl_poly[0][j][k]); gtk_container_remove (GTK_CONTAINER(widg), view -> ogl_poly[0][j][k]); } } } } } } if (view -> ogl_geom[0][j] != NULL) { for (k=0; k proj) -> coord -> totcoord[j]; k++) { if (view -> ogl_geom[0][j][k] != NULL) { if (GTK_IS_WIDGET(view -> ogl_geom[0][j][k])) { widg = gtk_widget_get_parent (view -> ogl_geom[0][j][k]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> ogl_geom[0][j][k]); gtk_container_remove (GTK_CONTAINER(widg), view -> ogl_geom[0][j][k]); } } } } } } if (view -> ogl_chains[0]) view -> ogl_chains[0] = destroy_this_widget (view -> ogl_chains[0]); for (i=0; i<2; i++) { for (j=2; j<4; j++) { detach_frag_mol_menu (view, i, j); } } for (i=1; i ogl_coord[i] = destroy_this_widget (view -> ogl_coord[i]); } for (i=0; i<2; i++) { view -> ogl_rings[i*6] = menu_item_new_with_submenu (_("Ring(s)"), view -> rings, prep_rings_menu (view, i*6)); } view -> ogl_chains[0] = menu_item_new_with_submenu (_("Chain(s)"), view -> chains, add_menu_coord (view, 0, 9)); view -> ogl_coord[1] = menu_coord (view, 0); view -> ogl_coord[2] = menu_item_new_with_submenu (_("Polyhedra"), TRUE, menu_poly (view, 0)); view -> ogl_coord[3] = menu_item_new_with_submenu (_("Fragment(s)"), get_project_by_id(view -> proj) -> coord -> totcoord[2], add_menu_coord (view, 0, 2)); view -> ogl_coord[4] = menu_item_new_with_submenu (_("Molecule(s)"), get_project_by_id(view -> proj) -> coord -> totcoord[3], add_menu_coord (view, 0, 3)); GtkWidget * menu = gtk_menu_new (); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_coord[1]); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_coord[2]); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_rings[0]); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_chains[0]); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_coord[3]); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_coord[4]); gtk3_menu_item (menu, _("Advanced"), IMG_NONE, NULL, G_CALLBACK(coord_properties), (gpointer)& view -> colorp[30][0], TRUE, GDK_KEY_e, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); // add_advanced_item (menu, G_CALLBACK(coord_properties), (gpointer)& view -> colorp[30][0], TRUE, GDK_KEY_e, GDK_CONTROL_MASK); return menu; } #endif /*! \fn void update_all_menus (glwin * view, int nats) \brief update all menus of the OpenGL window \param view the target glwin \param nats the total number of atoms */ void update_all_menus (glwin * view, int nats) { #ifdef GTK3 int i, j, k, l; i = view -> anim -> last -> img -> style; j = (nats <= 10000) ? BALL_AND_STICK : DEFAULT_STYLE; if (i != j) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_styles[j], FALSE); if (i != SPACEFILL) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_styles[i], TRUE); set_style (view -> ogl_styles[i], & view -> colorp[i][0]); } else { i = view -> anim -> last -> img -> filled_type; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> filled_styles[i], TRUE); set_style (view -> filled_styles[i], & view -> colorp[OGL_STYLES+i][0]); } } i = view -> anim -> last -> img -> render; j = FILL; if (i != j) { set_render (& view -> colorp[i][0]); } update_menus (view); widget_set_sensitive (view -> ogl_box[0], active_cell -> ltype); if (view -> anim -> last -> img -> abc -> box == NONE) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[0][0], FALSE); set_box_axis_style (view -> ogl_box_axis[0][0], & view -> colorp[0][0]); } else { j = (view -> anim -> last -> img -> abc -> box == WIREFRAME) ? 1 : 2; k = j*j; l = (view -> anim -> last -> img -> abc -> box == WIREFRAME) ? CYLINDERS : WIREFRAME; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[0][0], TRUE); set_box_axis_style (view -> ogl_box_axis[0][0], & view -> colorp[0][0]); view -> anim -> last -> img -> abc -> box = l; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[i][j], TRUE); set_box_axis_style (view -> ogl_box_axis[0][j], & view -> colorp[k][0]); } if (view -> anim -> last -> img -> xyz -> axis == NONE) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][0], FALSE); set_box_axis_style (view -> ogl_box_axis[i][0], & view -> colorp[0][1]); } else { j = (view -> anim -> last -> img -> xyz -> axis == WIREFRAME) ? 1 : 2; k = j*j; l = (view -> anim -> last -> img -> xyz -> axis == WIREFRAME) ? CYLINDERS : WIREFRAME; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][0], TRUE); set_box_axis_style (view -> ogl_box_axis[1][0], & view -> colorp[0][1]); view -> anim -> last -> img -> xyz -> axis = l; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][j], TRUE); set_box_axis_style (view -> ogl_box_axis[1][j], & view -> colorp[k][1]); } gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_rep[view -> anim -> last -> img -> rep], TRUE); gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_rep[! view -> anim -> last -> img -> rep], FALSE); for (i=0; i<5; i++) gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][8+i], FALSE); if (view -> anim -> last -> img -> xyz -> t_pos != CUSTOM) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][8+view -> anim -> last -> img -> xyz -> t_pos], TRUE); } set_advanced_bonding_menus (view); widget_set_sensitive (view -> ogl_clones[0], view -> allbonds[1]); update_rings_menus (view); update_chains_menus (view); gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_clones[0], view -> anim -> last -> img -> draw_clones); gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_clones[5], view -> anim -> last -> img -> cloned_poly); int * cmap = save_color_map (view); set_color_map_sensitive (view); if (view -> color_styles[0]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[0], TRUE); set_color_map (view -> color_styles[0], & view -> colorp[0][0]); } if (view -> color_styles[ATOM_MAPS]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[ATOM_MAPS], TRUE); set_color_map (view -> color_styles[ATOM_MAPS], & view -> colorp[ATOM_MAPS][0]); } restore_color_map (view, cmap); g_free (cmap); #else update_menu_bar (view); #endif } /*! \fn G_MODULE_EXPORT void render_gl_image (GtkWidget * widg, gpointer data) \brief render image from the OpenGL window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void render_gl_image (GtkWidget * widg, gpointer data) { glwin * view = (glwin *) data; window_encode (view, FALSE); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void view_shortcuts (GSimpleAction * action, GVariant * parameter, gpointer data) \brief view OpenGL window shortcuts callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void view_shortcuts (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void view_shortcuts (GtkWidget * widg, gpointer data) \brief OpenGL window shortcuts callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void view_shortcuts (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; view -> shortcuts = destroy_this_widget (view -> shortcuts); view -> shortcuts = shortcuts_window (G_N_ELEMENTS(opengl_group_by_section), opengl_group_by_section, G_N_ELEMENTS(opengl_shortcut_by_group), opengl_shortcut_by_group, opengl_section_names, opengl_group_names, opengl_shortcuts); } #ifdef GTK3 /*! \fn void menu_items_opengl (GtkWidget * menu, glwin * view, int pop) \brief create the 'OpenGL' submenu items GTK3 \param menu the GtkWidget sending the signal \param view the target glwin \param pop main app (0) or popup (1) */ void menu_items_opengl (GtkWidget * menu, glwin * view, int pop) { GtkWidget * style = gtk3_menu_item (menu, _("Style"), IMG_FILE, (gpointer)PACKAGE_MOL, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, get_project_by_id(view -> proj) -> nspec); gtk_menu_item_set_submenu ((GtkMenuItem *)style, menu_style(view, pop)); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Color Maps"), get_project_by_id(view -> proj) -> nspec, menu_map(view, pop))); gtk3_menu_item (menu, _("Material and Light(s)"), IMG_NONE, NULL, G_CALLBACK(opengl_advanced), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Render Image"), IMG_FILE, (gpointer)PACKAGE_IMG, G_CALLBACK(render_gl_image), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); } /*! \fn GtkWidget * menu_opengl (glwin * view, int pop) \brief create the 'OpenGL' submenu GTK3 \param view the target glwin \param pop main app (0) or popup (1) */ GtkWidget * menu_opengl (glwin * view, int pop) { GtkWidget * menu = gtk_menu_new (); menu_items_opengl (menu, view, pop); return menu; } /*! \fn void menu_items_model (GtkWidget * menu, glwin * view, int pop) \brief create the 'Model' submenu items GTK3 \param menu the GtkWidget sending the signal \param view the target glwin \param pop main app (0) or popup (1) */ void menu_items_model (GtkWidget * menu, glwin * view, int pop) { if (get_project_by_id(view -> proj) -> nspec) { gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Atom(s)"), TRUE, menu_atoms (view, pop, 0))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Bond(s)"), TRUE, menu_bonds (view, pop, 0))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Clone(s)"), TRUE, menu_clones (view, pop))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_box_axis (view, 0, 0)); } } /*! \fn GtkWidget * menu_model (glwin * view, int pop) \brief create the 'Model' submenu GTK3 \param view the target glwin \param pop main app (0) or popup (1) */ GtkWidget * menu_model (glwin * view, int pop) { GtkWidget * menu = gtk_menu_new (); menu_items_model (menu, view, pop); return menu; } /*! \fn void menu_items_view (GtkWidget * menu, glwin * view, int popm) \brief create the 'View' menu items GTK3 \param menu the GtkWidget sending the signal \param view the target glwin \param popm main app (0) or popup (1) */ void menu_items_view (GtkWidget * menu, glwin * view, int popm) { gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Representation"), TRUE, menu_rep (view, popm))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Projection"), TRUE, menu_proj (view))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Background"), TRUE, menu_back (view))); if (get_project_by_id(view -> proj) -> nspec) gtk_menu_shell_append ((GtkMenuShell *)menu, menu_box_axis (view, popm, 1)); if (! popm) { add_menu_separator (menu); gtk3_menu_item (menu, _("Reset View"), IMG_STOCK, (gpointer)FITBEST, G_CALLBACK(to_reset_view), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Center Molecule"), IMG_STOCK, (gpointer)FITBEST, G_CALLBACK(to_center_this_molecule), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); add_menu_separator (menu); gtk3_menu_item (menu, _("Fullscreen"), IMG_STOCK, (gpointer)FULLSCREEN, G_CALLBACK(set_full_screen), (gpointer)view, TRUE, GDK_KEY_f, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); } } /*! \fn GtkWidget * menu_view (glwin * view, int popm) \brief create the 'View' submenu GTK3 \param view the target glwin \param popm main app (0) or popup (1) */ GtkWidget * menu_view (glwin * view, int popm) { GtkWidget * menu = gtk_menu_new (); menu_items_view (menu, view, popm); return menu; } /*! \fn GtkWidget * menu_help (glwin * view, int popm) \brief create the 'Help' submenu GTK3 \param view the target glwin \param popm main app (0) or popup (1) */ GtkWidget * menu_help (glwin * view, int popm) { GtkWidget * menu; menu = gtk_menu_new (); gtk3_menu_item (menu, _("Shortcuts"), IMG_NONE, NULL, G_CALLBACK(view_shortcuts), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); return menu; } #endif /*! \fn void prepare_opengl_menu_bar (glwin * view) \brief update the OpenGL window menu bar \param view the target glwin */ void prepare_opengl_menu_bar (glwin * view) { #ifdef GTK3 // clean_all_menu_bar_widgets (view); view -> ogl_coord[0] = destroy_this_widget (view -> ogl_coord[0]); #endif view -> menu_bar = destroy_this_widget (view -> menu_bar); #ifdef GTK3 view -> menu_bar = gtk_menu_bar_new (); gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar, menu_item_new_with_submenu ("OpenGL", TRUE, menu_opengl(view, 0))); project * this_proj = get_project_by_id (view -> proj); gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar, menu_item_new_with_submenu (_("Model"), this_proj -> nspec, menu_model(view, 0))); view -> ogl_coord[0] = create_menu_item (FALSE, _("Chemistry")); gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar, view -> ogl_coord[0]); widget_set_sensitive (view -> ogl_coord[0], this_proj -> nspec); if (this_proj -> nspec) { gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_coord[0], coord_menu (view)); } gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar, menu_item_new_with_submenu (_("Tools"), TRUE, menu_tools(view, 0))); gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar, menu_item_new_with_submenu (_("View"), TRUE, menu_view(view, 0))); gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar, menu_anim (view, 0)); show_the_widgets (view -> menu_bar); if (this_proj -> nspec) update_all_menus (view, this_proj -> natomes); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> menu_box, view -> menu_bar, TRUE, TRUE, 0); /* GtkWidget * menu = gtk_menu_bar_new (); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Help"), TRUE, menu_help(view, 0))); add_box_child_end (view -> menu_box, menu, FALSE, FALSE, 0); show_the_widgets (menu);*/ show_the_widgets (view -> menu_bar); #else update_menu_bar (view); #endif } /*! \fn void change_color_map (glwin * view, int col) \brief change atom / polyhedra color map \param view the target glwin \param col the color id */ void change_color_map (glwin * view, int col) { int i, j; i = ATOM_MAPS-1; if (view -> custom_map) i++; if (view -> anim -> last -> img -> color_map[col] < i-1) { if (view -> anim -> last -> img -> color_map[col] < 2) { j = col*ATOM_MAPS + view -> anim -> last -> img -> color_map[col] + 1; } else if (view -> anim -> last -> img -> color_map[col] == 2 && view -> adv_bonding[0]) { j = col*ATOM_MAPS + view -> anim -> last -> img -> color_map[col] + 1; } else if (view -> anim -> last -> img -> color_map[col] == 3 && view -> adv_bonding[1]) { j = col*ATOM_MAPS + view -> anim -> last -> img -> color_map[col] + 1; } else if (view -> anim -> last -> img -> color_map[col] == 4 && get_project_by_id(view -> proj) -> force_field[0]) { j = col*ATOM_MAPS + view -> anim -> last -> img -> color_map[col] + 1; } else { j = col*ATOM_MAPS + ((view -> custom_map) ? 6 : 0); } } else { j = col*ATOM_MAPS; } gboolean was_input = reading_input; reading_input = TRUE; #ifdef GTK3 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[j], TRUE); set_color_map (view -> color_styles[j], & view -> colorp[j][0]); #else gchar * variant = g_strdup_printf ("set-%s.%d.0", (col) ? "pmap" : "amap", j); g_action_group_activate_action ((GActionGroup *)view -> action_group, (col) ? "set-pmap" : "set-amap", g_variant_new_string((const gchar *)variant)); g_free (variant); #endif reading_input = was_input; } /*! \fn void set_motion (glwin * view, int axis, int da, int db, gboolean UpDown, GdkModifierType state) \brief handle keyboard motion event on the OpenGL window \param view the target glwin \param axis axis \param da direction (-1/1) \param db zoom out (1) or zoom in (3) \param UpDown up or down key motion (TRUE), or else (FALSE) \param state keyboard modifier */ void set_motion (glwin * view, int axis, int da, int db, gboolean UpDown, GdkModifierType state) { if (state & GDK_CONTROL_MASK) { if (view -> mode == EDITION) { vec3_t trans; if (axis) { trans = vec3(view -> anim -> last -> img -> p_depth*(double) da / view -> pixels[axis], 0.0, 0.0); } else { trans = vec3(0.0, view -> anim -> last -> img -> p_depth*(double) da / view -> pixels[axis], 0.0); } translate (get_project_by_id(view -> proj), 1, 1, trans); init_default_shaders (view); update (view); } else if (state & GDK_SHIFT_MASK) { spin_go (NULL, & view -> colorp[db][axis]); } else { view -> anim -> last -> img -> c_shift[! axis] += (double) da / view -> pixels[axis]; if (view -> rep_win) { if (view -> rep_win -> camera_widg[! axis + 5] && GTK_IS_WIDGET(view -> rep_win -> camera_widg[! axis + 5])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> rep_win -> camera_widg[! axis + 5], - view -> anim -> last -> img -> c_shift[! axis]); } } update (view); } } else if ((state & GDK_SHIFT_MASK) && UpDown) { if (db == 1 && view -> anim -> last -> img -> zoom > ZOOM_MAX) zoom (view, -1); if (db == 3) zoom (view, 1); update (view); } else if (state != GDK_SHIFT_MASK) { save_rotation_quaternion (view); double cameraAngle[2] = {0.0, 0.0}; cameraAngle[axis] = 0.5*da; rotate_x_y (view, cameraAngle[0], cameraAngle[1]); update (view); } } /*! \fn mat4_t insert_projection (glwin * view) \brief calculate the insertion projection matrix to insert object in the 3D window \param view the target glwin */ mat4_t insert_projection (glwin * view) { GLdouble w, h; GLdouble dw, dh; double gleft, gright, gbottom, gtop; double zoom = view -> anim -> last -> img -> zoom; zoom *= (view -> anim -> last -> img -> p_depth / view -> anim -> last -> img -> gnear); dw = view -> anim -> last -> img -> c_shift[0]*2.0*zoom; dh = view -> anim -> last -> img -> c_shift[1]*2.0*zoom; double aspect = (double)view -> pixels[0] / (double)view -> pixels[1]; if (aspect > 1.0) { w = zoom * aspect; h = zoom; } else { w = zoom; h = zoom / aspect; } gleft = -w + dw; gright = w + dw; gbottom = -h + dh; gtop = h + dh; return m4_ortho (gleft, gright, gbottom, gtop, -view -> anim -> last -> img -> gfar, view -> anim -> last -> img -> gfar); } /*! \fn vec3_t get_insertion_coordinates (glwin * view) \brief get the insertion coordinates to insert object in the 3D window \param view the target glwin */ vec3_t get_insertion_coordinates (glwin * view) { vec3_t pos; mat4_t insert_pmv_matrix; insert_pmv_matrix = m4_mul (insert_projection (view), view -> model_view_matrix); pos = vec3 (view -> mouseX, view -> mouseY, 0.75); return v3_un_project (pos, view -> view_port, insert_pmv_matrix); } /*! \fn void activate_glwin_action (gchar * action_string, gchar * action_name, glwin * view) \brief the keyboard shortcut actions for the OpenGL window \param action_string the variant string \param action_name the action name \param view the target glwin */ void activate_glwin_action (gchar * action_string, gchar * action_name, glwin * view) { GVariant * action_state = g_variant_new_string (action_string); g_action_group_activate_action ((GActionGroup *)view -> action_group, action_name, action_state); // g_variant_unref (action_state); } /*! \fn void glwin_key_pressed (guint keyval, GdkModifierType state, gpointer data) \brief the keyboard shortcut actions for the OpenGL window \param keyval the key pressed \param state the keyboard modifier \param data the associated data pointer */ void glwin_key_pressed (guint keyval, GdkModifierType state, gpointer data) { glwin * view = (glwin *)data; int i; switch (keyval) { case GDK_KEY_Escape: if (view -> fullscreen) { #ifdef GTK4 set_full_screen (NULL, NULL, view); #else set_full_screen (NULL, view); #endif } break; case GDK_KEY_Delete: if (get_project_by_id(view -> proj) -> natomes && ! is_atom_win_active(view) && get_project_by_id(view -> proj) -> steps == 1 && view -> mode == EDITION) { opengl_project_changed (view -> proj); is_selected = 1; selected_aspec = -1; #ifdef GTK4 remove_the_atoms (NULL, NULL, & cut_sel); #else remove_the_atoms (NULL, & cut_sel); #endif } break; case GDK_KEY_space: if (get_project_by_id(view -> proj) -> natomes) { if (view -> spin[0] || view -> spin[1]) { for (i=0; i<2; i++) { view -> spin[i+2] = view -> spin[i]; view -> spin_speed[i+2] = view -> spin_speed[i]; view -> spin[i] = FALSE; } } else if (view -> spin[2] || view -> spin[3]) { for (i=0; i<2; i++) { view -> spin[i] = view -> spin[i+2]; view -> spin_speed[i] = view -> spin_speed[i+2]; g_timeout_add (REFRESH, (GSourceFunc) spin, & view -> colorp[0][i]); view -> spin[i+2] = FALSE; view -> spin_speed[i+2] = 0; } } } break; case GDK_KEY_a: if ((state & GDK_CONTROL_MASK) && get_project_by_id(view -> proj) -> natomes) { opengl_project_changed (view -> proj); selected_aspec = -1; i = get_selection_type (view); if (view -> anim -> last -> img -> selected[i] -> selected == opengl_project -> natomes) { #ifdef GTK4 select_unselect_atoms (NULL, NULL, & view -> colorp[0][0]); #else select_unselect_atoms (NULL, & view -> colorp[0][0]); #endif } else { #ifdef GTK4 select_unselect_atoms (NULL, NULL, & view -> colorp[0][1]); #else select_unselect_atoms (NULL, & view -> colorp[0][1]); #endif } } #ifdef GTK4 #ifdef OSX else if (state & GDK_META_MASK) #else else if (state & GDK_ALT_MASK) #endif #else else if (state & GDK_MOD1_MASK) #endif { if (view -> mode == EDITION) { #ifdef GTK4 activate_glwin_action ("set-mouse-mode.0.0", "set-mouse-mode", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_mode[0], TRUE); set_mode (view -> ogl_mode[0], & view -> colorp[0][0]); #endif } } else if (get_project_by_id(view -> proj) -> natomes) { change_color_map (view, 0); update (view); } break; case GDK_KEY_A: if (get_project_by_id(view -> proj) -> natomes) { // selection mode to coordination sphere #ifdef GTK4 activate_glwin_action ("set-sel-mode.0.0", "set-sel-mode", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_smode[0], TRUE); set_selection_mode (view -> ogl_smode[0], & view -> colorp[0][0]); #endif } break; case GDK_KEY_b: set_this_style (view, BALL_AND_STICK); break; case GDK_KEY_c: if (get_project_by_id(view -> proj) -> natomes) { if (state & GDK_CONTROL_MASK) { if (view -> anim -> last -> img -> selected[0] -> selected) { opengl_project_changed (view -> proj); selected_aspec = -1; is_selected = 1; view -> nth_copy = 1; view -> insert_coords = get_insertion_coordinates (view); #ifdef GTK4 copy_the_atoms (NULL, NULL, & cut_sel); #else copy_the_atoms (NULL, & cut_sel); #endif update_insert_combos (); } else { if (copied_object) { g_free (copied_object); copied_object = NULL; } } } else { set_this_style (view, CYLINDERS); } } break; case GDK_KEY_C: if (get_project_by_id(view -> proj) -> natomes) { // selection mode to coordination sphere #ifdef GTK4 activate_glwin_action ("set-sel-mode.1.0", "set-sel-mode", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_smode[1], TRUE); set_selection_mode (view -> ogl_smode[1], & view -> colorp[1][0]); #endif } break; case GDK_KEY_d: set_this_style (view, PUNT); break; case GDK_KEY_e: if (get_project_by_id(view -> proj) -> natomes) { if (state & GDK_CONTROL_MASK) { coord_properties (NULL, & view -> colorp[30][0]); } #ifdef GTK4 #ifdef OSX else if (state & GDK_META_MASK) #else else if (state & GDK_ALT_MASK) #endif #else else if (state & GDK_MOD1_MASK) #endif { if (view -> mode == ANALYZE && get_project_by_id(view -> proj) -> steps == 1) { #ifdef GTK4 activate_glwin_action ("set-mouse-mode.1.0", "set-mouse-mode", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_mode[1], TRUE); set_mode (view -> ogl_mode[1], & view -> colorp[1][0]); #endif } } } break; case GDK_KEY_f: #ifdef GTK4 if (state & GDK_CONTROL_MASK) set_full_screen (NULL, NULL, view); #else if (state & GDK_CONTROL_MASK) set_full_screen (NULL, view); #endif break; case GDK_KEY_F: if (get_project_by_id(view -> proj) -> natomes) { // selection mode to coordination sphere #ifdef GTK4 activate_glwin_action ("set-sel-mode.2.0", "set-sel-mode", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_smode[2], TRUE); set_selection_mode (view -> ogl_smode[2], & view -> colorp[2][0]); #endif } break; case GDK_KEY_i: set_this_style (view, OGL_STYLES+1); break; case GDK_KEY_l: if ((state & GDK_CONTROL_MASK) && get_project_by_id(view -> proj) -> natomes) { opengl_project_changed (view -> proj); selected_aspec = is_selected = -1; if (view -> labelled == opengl_project -> natomes*opengl_project -> steps) { #ifdef GTK4 label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); #else label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); #endif } else { #ifdef GTK4 label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][1]); #else label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][1]); #endif } } break; case GDK_KEY_m: if (get_project_by_id(view -> proj) -> natomes) { if (state & GDK_CONTROL_MASK) { view -> anim -> last -> img -> m_is_pressed = 0; window_measures (NULL, view); } else if (view -> anim -> last -> img -> m_is_pressed < 2) { view -> anim -> last -> img -> m_is_pressed ++; } else { view -> anim -> last -> img -> m_is_pressed = 0; } view -> create_shaders[MEASU] = TRUE; update (view); } break; case GDK_KEY_M: if (get_project_by_id(view -> proj) -> natomes) { // selection mode to coordination sphere #ifdef GTK4 activate_glwin_action ("set-sel-mode.3.0", "set-sel-mode", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_smode[3], TRUE); set_selection_mode (view -> ogl_smode[3], & view -> colorp[3][0]); #endif } break; case GDK_KEY_n: if (state & GDK_CONTROL_MASK && ! atomes_from_libreoffice) on_create_new_project (NULL, NULL); break; case GDK_KEY_o: set_this_style (view, OGL_STYLES); break; case GDK_KEY_p: if (get_project_by_id(view -> proj) -> natomes) change_color_map (view, 1); break; case GDK_KEY_r: if (get_project_by_id(view -> proj) -> natomes) { if (state & GDK_CONTROL_MASK) { window_recorder (NULL, (gpointer)view); } else { set_this_style (view, OGL_STYLES+3); } } break; if ((state & GDK_CONTROL_MASK) && get_project_by_id(view -> proj) -> natomes) window_recorder (NULL, (gpointer)view); break; case GDK_KEY_s: if (get_project_by_id(view -> proj) -> natomes) { if (state & GDK_CONTROL_MASK) { spin_stop (NULL, data); } else { set_this_style (view, SPHERES); } } break; case GDK_KEY_v: if (state & GDK_CONTROL_MASK) { if (copied_object && ! is_atom_win_active(view) && get_project_by_id(view -> proj) -> steps == 1 && view -> mode == EDITION) { //i = (! get_project_by_id(view -> proj) -> natomes) ? 1 : 0; opengl_project_changed (view -> proj); #ifdef GTK4 add_object (NULL, NULL, & view -> colorp[0][0]); #else add_object (NULL, & view -> colorp[0][0]); #endif view -> nth_copy ++; /*if (i) { i = activep; active_project_changed (view -> proj); frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; bonds_update = 1; on_calc_bonds_released (NULL, NULL); active_project_changed (i); }*/ } } else { set_this_style (view, OGL_STYLES+2); } break; case GDK_KEY_w: set_this_style (view, WIREFRAME); break; case GDK_KEY_x: if ((state & GDK_CONTROL_MASK) && get_project_by_id(view -> proj) -> natomes) { if (! is_atom_win_active(view) && get_project_by_id(view -> proj) -> steps == 1 && view -> mode == EDITION) { if (view -> anim -> last -> img -> selected[0] -> selected) { opengl_project_changed (view -> proj); selected_aspec = -1; is_selected = 1; #ifdef GTK4 copy_the_atoms (NULL, NULL, & cut_sel); remove_the_atoms (NULL, NULL, & cut_sel); #else copy_the_atoms (NULL, & cut_sel); remove_the_atoms (NULL, & cut_sel); #endif } } } break; case GDK_KEY_Right: if (get_project_by_id(view -> proj) -> natomes) set_motion (view, 1, 1, 1, FALSE, state); break; case GDK_KEY_Left: if (get_project_by_id(view -> proj) -> natomes) set_motion (view, 1, -1, 3, FALSE, state); break; case GDK_KEY_Up: if (get_project_by_id(view -> proj) -> natomes) set_motion (view, 0, 1, 3, TRUE, state); break; case GDK_KEY_Down: if (get_project_by_id(view -> proj) -> natomes) set_motion (view, 0, -1, 1, TRUE, state); break; } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data) \brief keyboard key press event for the OpenGL window GTK3 \param widg the GtkWidget sending the signal \param event the GdkEventKey triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data) { if (event -> type == GDK_KEY_PRESS) { glwin_key_pressed (event -> keyval, event -> state, data); } return FALSE; } #else /*! \fn G_MODULE_EXPORT gboolean on_glwin_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) \brief keyboard key press event for the OpenGL window GTK4 \param self the GtkEventControllerKey sending the signal \param keyval number of times it was pressed \param keycode the key pressed \param state the keyboard modifier \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_glwin_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) { glwin_key_pressed (keyval, state, data); return TRUE; } #endif /*! \fn G_MODULE_EXPORT void on_win_realize (GtkWidget * widg, gpointer data) \brief realize event for the OpenGL window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_win_realize (GtkWidget * widg, gpointer data) { glwin * view = (glwin *)data; int * pix = get_project_by_id(view -> proj) -> tmp_pixels; int shift = 0; if (GTK_IS_WIDGET(view -> menu_bar)) shift = get_widget_height (view -> menu_bar); if (pix[0] > 0 && pix[1] > 0) { resize_this_window (view -> win, pix[0], pix[1]+shift); pix[0] = pix[1] = -1; } else { resize_this_window (view -> win, 500, 500); } } #ifdef GTK3 #ifdef LINUX /*! \fn void gtk_window_change_gdk_visual (GtkWidget * win) \brief change the Gdk visual \param win the GtkWidget sending the signal */ void gtk_window_change_gdk_visual (GtkWidget * win) { // GTK+ > 3.15.1 uses an X11 visual optimized for GTK+'s OpenGL stuff // since revid dae447728d: https://github.com/GNOME/gtk/commit/dae447728d // However, in some cases it simply cannot start an OpenGL context. // This changes to the default X11 visual instead the GTK's default. GdkScreen * screen = gdk_screen_get_default (); GList * visuals = gdk_screen_list_visuals (screen); // printf("n visuals: %u\n", g_list_length(visuals)); GdkX11Screen* x11_screen = GDK_X11_SCREEN (screen); g_assert (x11_screen != NULL); Visual * default_xvisual = DefaultVisual (GDK_SCREEN_XDISPLAY(x11_screen), GDK_SCREEN_XNUMBER(x11_screen)); GdkVisual * default_visual = NULL; // int i = 0; while (visuals != NULL) { GdkVisual * visual = GDK_X11_VISUAL (visuals -> data); if (default_xvisual -> visualid == gdk_x11_visual_get_xvisual(GDK_X11_VISUAL (visuals -> data)) -> visualid) { // printf("Default visual %d\n", i); default_visual = visual; } // i++; visuals = visuals -> next; } gtk_widget_set_visual (win, default_visual); } #endif #endif #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean do_not_hide (GtkWindow * win, gpointer data) \brief prevent to hide the OpenGL window in LibreOffice mode \param win the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean do_not_hide (GtkWindow * win, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean do_not_hide (GtkWidget * win, GdkEvent * event, gpointer data) \brief revent to hide the OpenGL window in LibreOffice mode \param win the GtkWindow sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean do_not_hide (GtkWidget * win, GdkEvent * event, gpointer data) #endif { return TRUE; } gboolean create_3d_model (int p, gboolean load) { project * this_proj = get_project_by_id (p); #ifndef GTKGLAREA if (! glXQueryExtension (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), NULL, NULL)) { g_warning (_("Sorry OpenGL is not supported !")); return FALSE; } else #endif { if (this_proj -> modelgl) { g_free (this_proj -> modelgl); this_proj -> modelgl = NULL; } this_proj -> modelgl = g_malloc0(sizeof*this_proj -> modelgl); this_proj -> modelgl -> init = FALSE; this_proj -> modelgl -> proj = this_proj -> id; GtkWidget * gl_vbox; if (load) { gchar * str = g_strdup_printf (_("%s - 3D view - [%s mode]"), this_proj -> name, _(mode_name[0])); this_proj -> modelgl -> win = create_win (str, MainWindow, FALSE, TRUE); #ifdef GTK3 #ifdef GTKGLAREA #ifdef LINUX if (! atomes_visual) gtk_window_change_gdk_visual (this_proj -> modelgl -> win); #endif #endif #endif // this_proj -> modelgl -> accel_group = gtk_accel_group_new (); // gtk_window_add_accel_group (GTK_WINDOW (this_proj -> modelgl -> win), this_proj -> modelgl -> accel_group); g_free (str); gl_vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, this_proj -> modelgl -> win, gl_vbox); this_proj -> modelgl -> menu_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, gl_vbox, this_proj -> modelgl -> menu_box, FALSE, FALSE, 0); #ifdef GTK3 this_proj -> modelgl -> menu_bar = gtk_menu_bar_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, this_proj -> modelgl -> menu_box, this_proj -> modelgl -> menu_bar, TRUE, TRUE, 0); #endif } #ifdef GTKGLAREA this_proj -> modelgl -> plot = gtk_gl_area_new (); gtk_widget_set_can_focus (this_proj -> modelgl -> plot, TRUE); #ifdef GTK4 gtk_widget_set_focusable (this_proj -> modelgl -> plot, TRUE); #endif #else this_proj -> modelgl -> plot = gtk_drawing_area_new (); #endif gtk_widget_set_size_request (this_proj -> modelgl -> plot, 100, 100); #ifndef GTKGLAREA gtk_widget_set_double_buffered (this_proj -> modelgl -> plot, FALSE); this_proj -> modelgl -> glcontext = NULL; #endif gtk_widget_set_hexpand (this_proj -> modelgl -> plot, TRUE); gtk_widget_set_vexpand (this_proj -> modelgl -> plot, TRUE); #ifdef GTKGLAREA #ifdef GTK3 gtk_widget_add_events (GTK_WIDGET (this_proj -> modelgl -> plot), GDK_SCROLL_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); #endif #else gtk_widget_add_events (GTK_WIDGET (this_proj -> modelgl -> plot), GDK_SMOOTH_SCROLL_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); #endif #ifdef GTK4 if (load) { add_widget_gesture_and_key_action (this_proj -> modelgl -> win, NULL, NULL, NULL, NULL, NULL, NULL, "glwin-key-pressed", G_CALLBACK(on_glwin_key_pressed), this_proj -> modelgl, NULL, NULL, NULL, NULL, NULL, NULL); add_widget_gesture_and_key_action (this_proj -> modelgl -> plot, "glwin-button-pressed", G_CALLBACK(on_glwin_button_pressed), this_proj -> modelgl, "glwin-button-released", G_CALLBACK(on_glwin_button_released), this_proj -> modelgl, NULL, NULL, NULL, "glwin-pointer-motion", G_CALLBACK(on_glwin_pointer_motion), this_proj -> modelgl, "glwin-pointer-scroll", G_CALLBACK(on_glwin_pointer_scoll), this_proj -> modelgl); } else { add_widget_gesture_and_key_action (this_proj -> modelgl -> plot, "glwin-button-pressed", G_CALLBACK(on_lib_button_pressed), this_proj -> modelgl, "glwin-button-released", G_CALLBACK(on_lib_button_released), this_proj -> modelgl, NULL, NULL, NULL, "glwin-pointer-motion", G_CALLBACK(on_glwin_pointer_motion), this_proj -> modelgl, NULL, NULL, NULL); } #else g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "motion-notify-event", G_CALLBACK(on_motion), this_proj -> modelgl); g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "button-release-event", G_CALLBACK(on_glwin_button_event), this_proj -> modelgl); if (load) { g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "button-press-event", G_CALLBACK(on_glwin_button_event), this_proj -> modelgl); g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "scroll-event", G_CALLBACK(on_scrolled), this_proj -> modelgl); } else { g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "button-press-event", G_CALLBACK(on_lib_pressed), this_proj -> modelgl); } #endif if (load) { add_box_child_start (GTK_ORIENTATION_VERTICAL, gl_vbox, this_proj -> modelgl -> plot, FALSE, TRUE, 0); #ifdef GTK3 g_signal_connect (G_OBJECT (this_proj -> modelgl -> win), "key-press-event", G_CALLBACK(on_key_pressed), this_proj -> modelgl); #endif g_signal_connect (G_OBJECT (this_proj -> modelgl -> win), "realize", G_CALLBACK(on_win_realize), this_proj -> modelgl); if (atomes_from_libreoffice) { #ifdef GTK4 g_signal_connect (G_OBJECT (this_proj -> modelgl -> win), "close-request", G_CALLBACK(do_not_hide), NULL); #else g_signal_connect (G_OBJECT (this_proj -> modelgl -> win), "delete-event", G_CALLBACK(do_not_hide), NULL); #endif } else { add_gtk_close_event (this_proj -> modelgl -> win, G_CALLBACK(hide_this_window), NULL); } } g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "realize", G_CALLBACK(on_realize), this_proj -> modelgl); #ifdef GTKGLAREA g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "render", G_CALLBACK(on_expose), this_proj -> modelgl); #else g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "draw", G_CALLBACK(on_expose), this_proj -> modelgl); #endif return TRUE; } } /*! \fn void prep_model (int p) \brief prepare, or display, the OpenGL model window \param p the project id */ void prep_model (int p) { project * this_proj = get_project_by_id (p); gboolean adv_bonding[2]; if (this_proj -> modelgl == NULL) { if (create_3d_model (p, TRUE)) { /*GtkWidget * dummy = create_menu_item (FALSE, "Dummy"); gtk_menu_shell_append ((GtkMenuShell *)this_proj -> modelgl -> menu_bar, dummy); show_the_widgets (this_proj -> modelgl -> win); destroy_this_widget (dummy);*/ show_the_widgets (this_proj -> modelgl -> win); } if (this_proj -> initgl) { active_project_changed (p); #ifdef GTK3 // GTK3 Menu Action To Check active_glwin -> ogl_box_axis[0] = g_malloc0(OGL_BOX*sizeof*active_glwin -> ogl_box_axis[0]); active_glwin -> ogl_box_axis[1] = g_malloc0(OGL_AXIS*sizeof*active_glwin -> ogl_box_axis[1]); #endif prepare_opengl_menu_bar (active_glwin); #ifdef GTK3 GtkWidget * menu = gtk_menu_bar_new (); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Help"), TRUE, menu_help(active_glwin, 0))); add_box_child_end (active_glwin -> menu_box, menu, FALSE, FALSE, 0); show_the_widgets (menu); #endif if (reading_input) { adv_bonding[0] = (active_project -> natomes > ATOM_LIMIT) ? 0 : tmp_adv_bonding[0]; adv_bonding[1] = (active_project -> steps > reading_step_limit) ? 0 : tmp_adv_bonding[1]; frag_update = (active_project -> natomes > ATOM_LIMIT || trigger_fragment_analysis) ? 0 : 1; mol_update = (trigger_molecule_analysis) ? 1 : (frag_update) ? ((active_project -> steps > reading_step_limit) ? 0 : 1) : 0; } else { frag_update = (force_mol || trigger_fragment_analysis) ? 1 : (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (force_mol || trigger_molecule_analysis) ? 1 : (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; adv_bonding[0] = adv_bonding[1] = TRUE; } if (active_project -> natomes && adv_bonding[0] && adv_bonding[1]) { bonds_update = 1; active_project -> runc[0] = FALSE; on_calc_bonds_released (NULL, NULL); } } } else { if (gtk_widget_get_visible(this_proj -> modelgl -> win)) { hide_the_widgets (this_proj -> modelgl -> win); } else { show_the_widgets (this_proj -> modelgl -> win); } } } atomes_1.3.1/src/opengl/win/w_cutoffs.c0000664000175000017500000002271415212624223017526 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_cutoffs.c * @short Functions to create the bond cutoffs update dialog * @author Sébastien Le Roux */ /* * This file: 'w_cutoffs.c' * * Contains: * - The functions to create the bond cutoffs update dialog * * List of functions: void update_cutoffs (project * this_proj); void cut_box (project * this_proj, GtkWidget * vbox); G_MODULE_EXPORT void set_cut (GtkEntry * res, gpointer data); G_MODULE_EXPORT void run_window_cuts (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void window_cuts (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void window_cuts (GtkWidget * widg, gpointer data); */ #include "global.h" #include "interface.h" #include "project.h" #include "glview.h" #include "glwindow.h" extern gchar * label_cutrab (project * this_proj, glwin * view, int id); double * tmpcut; /*! \fn void update_cutoffs (project * this_proj) \brief update bond cutoffs \param this_proj the target project */ void update_cutoffs (project * this_proj) { int i, j, k; k = 0; for (i=0; i nspec; i++, k++) { if (this_proj -> chemistry -> cutoffs[i][i] != tmpcut[k] && tmpcut[k] >= 0.0) { this_proj -> chemistry -> cutoffs[i][i] = tmpcut[k]; this_proj -> dmtx = FALSE; } } for (i=0; i nspec-1; i++) { for (j=i+1; j nspec; j++, k++) { if (this_proj -> chemistry -> cutoffs[i][j] != tmpcut[k] && tmpcut[k] >= 0.0) { this_proj -> chemistry -> cutoffs[i][j] = this_proj -> chemistry -> cutoffs[j][i] = tmpcut[k]; this_proj -> dmtx = FALSE; } } } if (this_proj -> chemistry -> grtotcutoff != tmpcut[k] && tmpcut[k] >= 0.0) { this_proj -> chemistry -> grtotcutoff = tmpcut[k]; this_proj -> dmtx = FALSE; } if (! this_proj -> dmtx && this_proj -> initgl) { if (this_proj -> modelgl -> rings) { this_proj -> modelgl -> rings = FALSE; for (j=0; j<5; j++) { clean_rings_data (j, this_proj -> modelgl); #ifdef GTK3 update_rings_menus (this_proj -> modelgl); #endif } } if (this_proj -> modelgl -> chains) { clean_chains_data (this_proj -> modelgl); #ifdef GTK3 update_chains_menus (this_proj -> modelgl); #endif } bonds_update = 1; frag_update = (this_proj -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((this_proj -> steps > STEP_LIMIT) ? 0 : 1) : 0; this_proj -> runc[0] = FALSE; if (this_proj -> id != activep) { k = activep; active_project_changed (this_proj -> id); on_calc_bonds_released (NULL, NULL); active_project_changed (k); } else { update_project (); on_calc_bonds_released (NULL, NULL); } } } /*! \fn G_MODULE_EXPORT void set_cut (GtkEntry * res, gpointer data) \brief change cutoff entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_cut (GtkEntry * res, gpointer data) { const gchar * m; int id = GPOINTER_TO_INT(data); m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (v >= 0.0) { tmpcut[id] = (v < 0.5) ? 0.5 : v; } update_entry_double (res, tmpcut[id]); } /*! \fn void cut_box (project * this_proj, GtkWidget * vbox) \brief box cutoff entries \param this_proj the target project \param vbox the GtkWidget sending the signal */ void cut_box (project * this_proj, GtkWidget * vbox) { int i, j, k; GtkWidget * vbo, * hbo, * cut; gchar * str; i = 1 + this_proj -> nspec * (this_proj -> nspec + 1) / 2; j = (this_proj -> nspec > 4) ? 500 : i * 37; GtkWidget * cutscroll = create_scroll (vbox, 350, j, GTK_SHADOW_NONE); vbo = create_vbox (BSEP); tmpcut = allocdouble (i); k = 0; for (i=0; i nspec; i++, k++) { hbo = create_hbox (0); gtk_widget_set_size_request (hbo, 250, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbo, hbo, FALSE, FALSE, 1); str = g_strdup_printf ("%s - %s", exact_name(this_proj -> chemistry -> label[i]), exact_name(this_proj -> chemistry -> label[i])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); cut = create_entry (G_CALLBACK(set_cut), 120, 15, FALSE, GINT_TO_POINTER(k)); update_entry_double (GTK_ENTRY(cut), this_proj -> chemistry -> cutoffs[i][i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, cut, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label("Å", 30, -1, 0.0, 0.5), FALSE, FALSE, 5); tmpcut[k] = this_proj -> chemistry -> cutoffs[i][i]; } for (i=0; i nspec-1; i++) { for (j=i+1; j nspec; j++, k++) { hbo = create_hbox (0); gtk_widget_set_size_request (hbo, 250, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbo, hbo, FALSE, FALSE, 1); str = g_strdup_printf ("%s - %s", exact_name(this_proj -> chemistry -> label[i]), exact_name(this_proj -> chemistry -> label[j])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); cut = create_entry (G_CALLBACK(set_cut), 120, 15, FALSE, (gpointer)GINT_TO_POINTER(k)); update_entry_double (GTK_ENTRY(cut), this_proj -> chemistry -> cutoffs[i][j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, cut, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label("Å", 30, -1, 0.0, 0.5), FALSE, FALSE, 5); tmpcut[k] = this_proj -> chemistry -> cutoffs[i][j]; } } hbo = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbo, hbo, FALSE, FALSE, 1); gtk_widget_set_size_request (hbo, 250, -1); str = g_strdup_printf (_("Total")); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); cut = create_entry (G_CALLBACK(set_cut), 120, 15, FALSE, (gpointer)GINT_TO_POINTER(k)); update_entry_double (GTK_ENTRY(cut), this_proj -> chemistry -> grtotcutoff); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, cut, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label("Å", 30, -1, 0.0, 0.5), FALSE, FALSE, 5); tmpcut[k] = this_proj -> chemistry -> grtotcutoff; add_container_child (CONTAINER_SCR, cutscroll, vbo); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Cutoff(s) must be ≥ 0.5 Å"), -1, -1, 0.5, 0.5), FALSE, FALSE, 10); } /*! \fn G_MODULE_EXPORT void run_window_cuts (GtkDialog * win, gint response_id, gpointer data) \brief bond cutoffs window - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_window_cuts (GtkDialog * win, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { gboolean upc = FALSE; if (opengl_project -> modelgl -> rings || opengl_project -> modelgl -> chains) { upc = ask_yes_no (_("Data can be lost !"), _("You will lose\n rings statistics and/or chains statistics data\nProceed anyway ?"), GTK_MESSAGE_WARNING, GTK_WIDGET(win)); } else { upc = TRUE; } if (upc) { bonds_update = 1; update_cutoffs (opengl_project); #ifdef GTK3 gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_bonds[7]), label_cutrab (opengl_project, opengl_project -> modelgl, 0)); #endif } } destroy_this_dialog (win); if (tmpcut) { g_free (tmpcut); tmpcut = NULL; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void window_cuts (GSimpleAction * action, GVariant * parameter, gpointer data) \brief adjust bond cutoffs window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void window_cuts (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void window_cuts (GtkWidget * widg, gpointer data) \brief adjust bond cutoffs window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_cuts (GtkWidget * widg, gpointer data) #endif { tint * the_data = (tint *)data; int p = the_data -> a; opengl_project_changed (p); gchar * str = g_strdup_printf (_("Adjust cutoff radius(ii) - %s"), prepare_for_title(opengl_project -> name)); GtkWidget * win = dialog_cancel_apply (str, opengl_project -> modelgl -> win, FALSE); g_free (str); cut_box (opengl_project, dialog_get_content_area (win)); run_this_gtk_dialog (win, G_CALLBACK(run_window_cuts), NULL); } atomes_1.3.1/src/opengl/win/m_poly.c0000664000175000017500000003703715212624223017032 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_poly.c * @short Functions to create the 'Chemistry -> Polyhedra' submenus * @author Sébastien Le Roux */ /* * This file: 'm_poly.c' * * Contains: * - The functions to create the 'Chemistry -> Polyhedra' submenus * * List of functions: G_MODULE_EXPORT void show_hide_poly (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_poly (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void cloned_poly (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void cloned_poly (GtkWidget * widg, gpointer data); GtkWidget * mpoly (glwin * view, int jd, int id); GtkWidget * menupoly (glwin * view, int jd, int id, gchar * poln); GtkWidget * menu_poly (glwin * view, int id); GMenu * menu_show_coord_poly (glwin * view, int popm, int id); GMenu * menu_show_rings_poly (glwin * view, int popm, int id); GMenu * add_menu_poly (glwin * view, int popm, int aid); GMenu * menu_poly_rings (glwin * view, int popm); GMenu * menu_poly (glwin * view, int popm); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" extern G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data); #ifdef GTK4 extern G_MODULE_EXPORT void to_coord_properties (GSimpleAction * action, GVariant * parameter, gpointer data); /*! \fn G_MODULE_EXPORT void show_hide_poly (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show / hide polyhedra callback - GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_poly (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_hide_poly (GtkWidget * widg, gpointer data) \brief show / hide polyhedra callback - GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_poly (GtkWidget * widg, gpointer data) #endif { qint * obj = (qint *)data; int i, j; gboolean doit = TRUE; gboolean show; project * this_proj = get_project_by_id(obj -> a); int s = obj -> b; int c = obj -> c; int g = obj -> d; j = c; if (g < 2) { for (i=0; i coord -> ntg[g][i]; } } #ifdef DEBUG g_debug ("SHOW_HIDE_POLY:: p= %d, s= %d, c= %d, g= %d", this_proj -> id, s, c, g); #endif #ifdef GTK4 GVariant * state; if (action) { state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); const gchar * poly = g_action_get_name ((GAction *)action); int lgt = strlen (poly); gchar * name = g_strdup_printf ("%c%c", poly[lgt-2], poly[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, poly); g_action_group_activate_action ((GActionGroup *)this_proj -> modelgl -> action_group, (const gchar *)name, NULL); g_free (name); doit = FALSE; } } else { show = this_proj -> modelgl -> anim -> last -> img -> show_poly[g][j]; } #else show = gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg); #endif #ifdef GTK3 // GTK3 Menu Action To Check if (is_coord_in_menu(g, this_proj)) { for (i=0; i<2; i++) { if (widg != this_proj -> modelgl -> ogl_poly[i][g][j]) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_poly[i][g][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[i][g][j]) != show) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[i][g][j], show); } } } } } #endif if (doit) { this_proj -> modelgl -> anim -> last -> img -> show_poly[g][j] = show; int shaders[2] = {POLYS, RINGS}; re_create_md_shaders (2, shaders, this_proj); update (this_proj -> modelgl); #ifdef GTK4 if (action) { g_action_change_state (G_ACTION (action), g_variant_new_boolean (show)); g_variant_unref (state); } #endif } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void cloned_poly (GSimpleAction * action, GVariant * parameter, gpointer data) \brief cloned polyehdra callback - GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void cloned_poly (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void cloned_poly (GtkWidget * widg, gpointer data) \brief cloned polyehdra callback - GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void cloned_poly (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; gboolean doit = TRUE; gboolean show; #ifdef GTK4 const gchar * name = g_action_get_name ((GAction *)action); if (g_strcmp0(name, "set-cloned-poly.1.1") == 0) { g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-cloned-poly.0.0", NULL); doit = FALSE; } #endif if (doit) { #ifdef GTK4 GVariant * state; state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); #else show = gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg); if (widg != view -> ogl_clones[5]) gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_clones[5], show); #endif view -> anim -> last -> img -> cloned_poly = show; int shaders[2] = {POLYS, RINGS}; re_create_md_shaders (2, shaders, get_project_by_id(view -> proj)); update (view); #ifdef GTK4 g_action_change_state (G_ACTION (action), g_variant_new_boolean (show)); g_variant_unref (state); #endif } } #ifdef GTK3 /*! \fn GtkWidget * mpoly (glwin * view, int jd, int id) \brief update the 'Polyhedra -> * -> Show/Hide' subemnus - GTK3 \param view the target glwin \param jd main app (0) or popup (1) \param id the type of coordination */ GtkWidget * mpoly (glwin * view, int jd, int id) { int i, j; project * this_proj = get_project_by_id(view -> proj); GtkWidget * menup = gtk_menu_new (); if (is_coord_in_menu(id, this_proj)) { GtkWidget * pshow = create_menu_item (FALSE, _("Show/Hide")); GtkWidget * widg; gtk_menu_shell_append ((GtkMenuShell *)menup, pshow); GtkWidget * menus = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)pshow, menus); j = (id < 2) ? this_proj -> nspec : this_proj -> coord -> totcoord[id]; for (i=0; i oglmpv[jd][id][i])) { widg = gtk_widget_get_parent (view -> oglmpv[jd][id][i]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> oglmpv[jd][id][i]); gtk_container_remove (GTK_CONTAINER(widg), view -> oglmpv[jd][id][i]); } gtk_menu_shell_append ((GtkMenuShell *)menus, view -> oglmpv[jd][id][i]); } } else { if (GTK_IS_WIDGET(view -> ogl_poly[jd][id][i])) { widg = gtk_widget_get_parent (view -> ogl_poly[jd][id][i]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> ogl_poly[jd][id][i]); gtk_container_remove (GTK_CONTAINER(widg), view -> ogl_poly[jd][id][i]); } gtk_menu_shell_append ((GtkMenuShell *)menus, view -> ogl_poly[jd][id][i]); } } } } add_advanced_item (menup, G_CALLBACK(coord_properties), (gpointer)& view -> colorp[id][0], FALSE, 0, 0); return menup; } /*! \fn GtkWidget * menupoly (glwin * view, int jd, int id, gchar * poln) \brief update the polyhedra submenus - GTK3 \param view the target glwin \param jd main app (0) or popup (1) \param id the type of coordination: total (0), partial (1), rings (2) \param poln the label of the menu item */ GtkWidget * menupoly (glwin * view, int jd, int id, gchar * poln) { int i; GtkWidget * item; if (id > 1) { GtkWidget * menui = gtk_menu_new (); if (view -> rings) { for (i=0; i<5; i++) { if (view -> ring_max[i]) { if (jd == 0) { view -> ogl_rings[7+i] = create_menu_item (TRUE, _(rings_type[i])); gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_rings[7+i], mpoly(view, jd, 4+i)); gtk_menu_shell_append ((GtkMenuShell *)menui, view -> ogl_rings[7+i]); } else { item = create_menu_item (TRUE, _(rings_type[i])); gtk_menu_shell_append ((GtkMenuShell *)menui, item); gtk_menu_item_set_submenu ((GtkMenuItem *)item, mpoly(view, jd, 4+i)); } } } } return menui; } else { GtkWidget * poly = create_menu_item (TRUE, poln); gtk_menu_item_set_submenu ((GtkMenuItem *)poly, mpoly (view, jd, id)); return poly; } } /*! \fn GtkWidget * menu_poly (glwin * view, int id) \brief create the 'Chemistry -> Polyehdra' submenu - GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_poly (glwin * view, int id) { GtkWidget * menup = gtk_menu_new (); gtk_menu_shell_append ((GtkMenuShell *)menup, menupoly(view, id, 0, _("Total Coordination(s)"))); gtk_menu_shell_append ((GtkMenuShell *)menup, menupoly(view, id, 1, _("Partial Coordination(s)"))); if (id == 0) { gtk_menu_shell_append ((GtkMenuShell *)menup, view -> ogl_rings[6]); widget_set_sensitive (view -> ogl_rings[6], view -> rings); view -> ogl_clones[5] = gtk3_menu_item (menup, _("Cloned Polyhedra"), IMG_NONE, NULL, G_CALLBACK(cloned_poly), view, FALSE, 0, 0, TRUE, FALSE, view -> anim -> last -> img -> cloned_poly); } else { GtkWidget * item = create_menu_item (FALSE, _("Ring(s)")); gtk_menu_item_set_submenu ((GtkMenuItem *)item, menupoly(view, id, 2, NULL)); gtk_menu_shell_append ((GtkMenuShell *)menup, item); widget_set_sensitive (item, view -> rings); GtkWidget * cloned_p = gtk3_menu_item (menup, _("Cloned Polyhedra"), IMG_NONE, NULL, G_CALLBACK(cloned_poly), view, FALSE, 0, 0, TRUE, FALSE, view -> anim -> last -> img -> cloned_poly); widget_set_sensitive ((cloned_p), get_project_by_id(view -> proj) -> cell.pbc); } return menup; } #else /*! \fn GMenu * menu_show_coord_poly (glwin * view, int popm, int id) \brief create the 'Polyedra -> Coordination -> Show/Hide' submenus - GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param id the coordination type: total (0) or partial (1) */ GMenu * menu_show_coord_poly (glwin * view, int popm, int id) { GMenu * menu = g_menu_new (); GMenu * menus; project * this_proj = get_project_by_id (view -> proj); gchar * stra, * strb; int i, j, k; for (i=0; i nspec; i++) { j = 0; menus = g_menu_new (); if (this_proj -> coord) { if (this_proj -> coord -> ntg[id]) { for (k=0; k coord -> ntg[id][k]; } for (k=0; k < this_proj -> coord -> ntg[id][i]; k++) { if (id) { stra = exact_name (env_name (this_proj, k, i, 1, NULL)); } else { stra = g_strdup_printf ("%d", this_proj -> coord -> geolist[id][i][k]); } strb = g_strdup_printf ("%s-%d-p", stra, id); append_opengl_item (view, menus, stra, strb, popm, k+j, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_poly), & view -> gcid[id][k+j][id], TRUE, view -> anim -> last -> img -> show_poly[id][k+j], FALSE, TRUE); g_free (stra); g_free (strb); } } } append_submenu (menu, this_proj -> chemistry -> label[i], menus); g_object_unref (menus); } return menu; } /*! \fn GMenu * menu_show_rings_poly (glwin * view, int popm, int id) \brief create the 'Ring(s) -> Show/Hide' subemnus - GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param id the ring(s) type */ GMenu * menu_show_rings_poly (glwin * view, int popm, int id) { GMenu * menu = g_menu_new (); project * this_proj = get_project_by_id (view -> proj); if (this_proj -> coord) { int i; gchar * stra, * strb; for (i=0; i coord -> totcoord[id]; i++) { stra = g_strdup_printf ("%d", this_proj -> coord -> geolist[id][0][i]); strb = g_strdup_printf ("%d-%s-p", id, stra); append_opengl_item (view, menu, stra, strb, popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_poly), & view -> gcid[id][i][id], TRUE, view -> anim -> last -> img -> show_poly[id][i], FALSE, TRUE); g_free (stra); g_free (strb); } } return menu; } /*! \fn GMenu * add_menu_poly (glwin * view, int popm, int aid) \brief create the 'Show/Hide' polyhedra subemnus - GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param aid coordination id */ GMenu * add_menu_poly (glwin * view, int popm, int aid) { GMenu * menu = g_menu_new (); if (aid < 2) { append_submenu (menu, _("Show/Hide"), menu_show_coord_poly (view, popm, aid)); } else { append_submenu (menu, _("Show/Hide"), menu_show_rings_poly (view, popm, aid)); } append_opengl_item (view, menu, _("Advanced"), "adv-p", popm, aid, NULL, IMG_STOCK, (gpointer)DPROPERTIES, FALSE, G_CALLBACK(to_coord_properties), & view -> colorp[aid][0], FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * menu_poly_rings (glwin * view, int popm) \brief create the 'Polyhedra -> Ring(s)' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_poly_rings (glwin * view, int popm) { GMenu * menu = g_menu_new (); int i; for (i=0; i<5; i++) { if (view -> ring_max[i]) { append_submenu (menu, _(rings_type[i]), add_menu_poly(view, popm, 4+i)); } } return menu; } /*! \fn GMenu * menu_poly (glwin * view, int popm) \brief create the 'Chemistry -> Polyehdra' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_poly (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Total Coordination(s)"), add_menu_poly (view, popm, 0)); append_submenu (menu, _("Partial Coordination(s)"), add_menu_poly (view, popm, 1)); if (view -> rings) { append_submenu (menu, _("Ring(s)"), menu_poly_rings (view, popm)); } else { append_menu_item (menu, _("Ring(s)"), "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); } append_opengl_item (view, menu, _("Cloned Polyhedra"), "cloned-poly", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(cloned_poly), view, TRUE, view -> anim -> last -> img -> cloned_poly, FALSE, view -> allbonds[1]); return menu; } #endif atomes_1.3.1/src/opengl/win/m_map.c0000664000175000017500000012647415212624223016630 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_map.c * @short Functions to create the 'OpenGL -> Color Scheme(s)' submenus \n Functions to handle custom color maps * @author Sébastien Le Roux */ /* * This file: 'm_map.c' * * Contains: * - The functions to create the 'OpenGL -> Color Scheme(s)' submenus - The functions to handle custom color maps * * List of functions: gboolean setup_custom_color_map (float * data, project * this_proj, gboolean init); gboolean open_save_map (FILE * fp, int act, project * this_proj); gboolean use_custom_color_map (int p); void init_map_range (colormap * map, int pts); void update_color_map (); void fill_map_model (GtkTreeStore * store, project * this_proj); G_MODULE_EXPORT void set_point_position (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_point_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void add_map_points (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void update_cmin_max (GtkEntry * res, gpointer data); G_MODULE_EXPORT void run_custom_mize_map (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void custom_mize_map (GtkWidget * but, gpointer data); G_MODULE_EXPORT void edit_map_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data); G_MODULE_EXPORT void run_edit_data_map (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void edit_data_map (GtkWidget * but, gpointer data); G_MODULE_EXPORT void run_open_save_data_map (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_open_save_data_map (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void open_save_data_map (GtkWidget * but, gpointer data); G_MODULE_EXPORT void run_use_color_map (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void change_color_radio (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * create_css_color_bar (colormap * map); GtkWidget * create_map_buttons (); GtkWidget * create_map_tree (project * this_proj); GtkWidget * mapw (glwin * view, int m, int mi, int mid, int cid, gchar * str); GtkWidget * menump (glwin * view, gchar * ncm, int mid, int id, int cid); GtkWidget * menu_map (glwin * view, int id); GMenu * menump (glwin * view, int popm, int mid, int cid); GMenu * menu_map (glwin * view, int popm); colormap * allocate_color_map (int pts, project * this_proj); */ #include "global.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" extern const gchar * dfi[2]; gboolean cmap_changed = FALSE; GtkWidget * map_but[3]; GtkTreeStore * map_model; colormap * the_map; colormap * tmp_map; GtkWidget * vcbox; GtkWidget * vbbox; GtkWidget * color_fix; GtkWidget * color_bar; float * tmp_data; /*! \fn GtkWidget * create_css_color_bar (colormap * map) \brief create the custom color map visualization widget \param map the custom color map to visualize */ GtkWidget * create_css_color_bar (colormap * map) { GtkWidget * colob; gchar * tmp; tmp = g_strdup_printf ("rgba(%d,%d,%d,%d) 0%%", (int)(map -> values[0].red*255.0), (int)(map -> values[0].green*255.0), (int)(map -> values[0].blue*255.0), (int)map -> values[0].alpha); int i, j, k; j = (map -> positions[0] < map -> cmax) ? 0 : 1; for (i=j; i points; i++) { k = (int)(100.0*(1.0 - (map -> positions[i] - map -> cmin)/(map -> cmax - map -> cmin))); k = (i == map -> points-1 && map -> positions[i] == map -> cmin) ? 100 : k; tmp = g_strdup_printf ("%s, rgba(%d,%d,%d,%d) %d%%", tmp, (int)(map -> values[i].red*255.0), (int)(map -> values[i].green*255.0), (int)(map -> values[i].blue*255.0), (int)map -> values[i].alpha, k); } if (map -> positions[i-1] < map -> cmin) { tmp = g_strdup_printf ("%s, rgba(%d,%d,%d,%d) %d%%", tmp, (int)(map -> values[i-1].red*255.0), (int)(map -> values[i-1].green*255.0), (int)(map -> values[i-1].blue*255.0), (int)map -> values[i-1].alpha, 100); } gchar * gradient = g_strdup_printf ("image#gradient {\n" " background-image: linear-gradient(to bottom, %s);\n" " min-width: 50px;\n" " min-height: 400px;\n" "}", tmp); g_free (tmp); provide_gtk_css (gradient); colob = gtk_image_new (); gtk_widget_set_name (colob, "gradient"); show_the_widgets (colob); //gtk_widget_set_size_request (colob, 100, 400); g_free (gradient); return colob; } /*! \fn void init_map_range (colormap * map, int pts) \brief initialize custom color map \param map the custom color map \param pts number of point(s) in the custom color map */ void init_map_range (colormap * map, int pts) { map -> points = pts; if (map -> positions != NULL) { g_free (map -> positions); map -> positions = NULL; } if (map -> values != NULL) { g_free (map -> values); map -> values = NULL; } map -> positions = allocfloat (pts); map -> values = g_malloc0(pts*sizeof*map -> values); int i; for (i=0; i positions[i] = map -> cmax - i*(map -> cmax - map -> cmin)/(pts - 1.0); map -> values[i].red = 1.0 - i / (pts - 1.0); map -> values[i].green = 0.0; map -> values[i].blue = i / (pts - 1.0); map -> values[i].alpha = 1.0; } } /*! \fn colormap * allocate_color_map (int pts, project * this_proj) \brief allocate custom color map data \param pts the number of data point(s) to create \param this_proj the target project */ colormap * allocate_color_map (int pts, project * this_proj) { colormap * map = g_malloc0(sizeof*map); map -> data = g_malloc0(this_proj -> steps*sizeof*map -> data); map -> colors = g_malloc0(this_proj -> steps*sizeof*map -> colors); int i; for (i=0; i steps; i++) { map -> data[i] = g_malloc0(this_proj -> natomes*sizeof*map -> data[i]); map -> colors[i] = g_malloc0(this_proj -> natomes*sizeof*map -> colors[i]); } return map; } /*! \fn gboolean setup_custom_color_map (float * data, project * this_proj, gboolean init) \brief prepare the custom color map data \param data data value(s) if any \param this_proj the target project \param init initialize color map (0= no, 1= yes) */ gboolean setup_custom_color_map (float * data, project * this_proj, gboolean init) { int i, j, k; gboolean action; float cmin, cmax; float delta; if (data != NULL) { k = 0; cmin = cmax = data[0]; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { cmin = min(cmin, data[k]); cmax = max(cmax, data[k]); k ++; } } } if (init) { gchar * str = g_strdup_printf (_("Range: [min-max] = %f - %f"), cmin, cmax); action = ask_yes_no (_("Use this data set ?"), str, GTK_MESSAGE_QUESTION, NULL); } else { action = TRUE; } if (action) { if (init) { this_proj -> modelgl -> custom_map = allocate_color_map (2, this_proj); this_proj -> modelgl -> custom_map -> points = 2; } the_map = this_proj -> modelgl -> custom_map; if (data != NULL) { the_map -> cmin = cmin; the_map -> cmax = cmax; init_map_range (the_map, the_map -> points); k = 0; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { the_map -> data[i][j] = data[k]; k ++; } } } gboolean done; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { done = FALSE; for (k=0; k points-1; k++) { if (the_map -> data[i][j] <= the_map -> positions[k] && the_map -> data[i][j] > the_map -> positions[k+1]) { delta = (the_map -> data[i][j]-the_map -> positions[k])/(the_map -> positions[k] - the_map -> positions[k+1]); the_map -> colors[i][j].red = the_map -> values[k].red + delta * (the_map -> values[k].red - the_map -> values[k+1].red); the_map -> colors[i][j].green = the_map -> values[k].green + delta * (the_map -> values[k].green - the_map -> values[k+1].green); the_map -> colors[i][j].blue = the_map -> values[k].blue + delta * (the_map -> values[k].blue - the_map -> values[k+1].blue); the_map -> colors[i][j].alpha = 1.0; done = TRUE; } } if (! done) { if (the_map -> data[i][j] > the_map -> positions[0]) { the_map -> colors[i][j].red = the_map -> values[0].red; the_map -> colors[i][j].green = the_map -> values[0].green; the_map -> colors[i][j].blue = the_map -> values[0].blue; the_map -> colors[i][j].alpha = 1.0; } else if (the_map -> data[i][j] < the_map -> positions[the_map -> points-1]) { the_map -> colors[i][j].red = the_map -> values[the_map -> points-1].red; the_map -> colors[i][j].green = the_map -> values[the_map -> points-1].green; the_map -> colors[i][j].blue = the_map -> values[the_map -> points-1].blue; the_map -> colors[i][j].alpha = 1.0; } } } } } return action; } /*! \fn G_MODULE_EXPORT void set_point_position (GtkSpinButton * res, gpointer data) \brief update color map point position \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_point_position (GtkSpinButton * res, gpointer data) { int pts = GPOINTER_TO_INT (data); float pos = (float) gtk_spin_button_get_value (res); gboolean update = FALSE; if (pos >= tmp_map -> cmin && pos <= tmp_map -> cmax) { if (pos != tmp_map -> positions[pts]) { if (pts == 0) { update = (pos > tmp_map -> positions[1]) ? TRUE : FALSE; } else if (pts == tmp_map -> points-1) { update = (pos < tmp_map -> positions[pts-1]) ? TRUE : FALSE; } else { update = (pos < tmp_map -> positions[pts-1] && pos > tmp_map -> positions[pts+1]) ? TRUE : FALSE; } if (update) tmp_map -> positions[pts] = pos; } } gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), tmp_map -> positions[pts]); destroy_this_widget (color_bar); color_bar = create_css_color_bar (tmp_map); gtk_fixed_put (GTK_FIXED(color_fix), color_bar, 50, 0); } /*! \fn G_MODULE_EXPORT void set_point_color (GtkColorChooser * colob, gpointer data) \brief select color map point color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_point_color (GtkColorChooser * colob, gpointer data) { int pts = GPOINTER_TO_INT (data); tmp_map -> values[pts] =get_button_color (colob); destroy_this_widget (color_bar); color_bar = create_css_color_bar (tmp_map); gtk_fixed_put (GTK_FIXED(color_fix), color_bar, 50, 0); } /*! \fn GtkWidget * create_map_buttons () \brief create custom color map position and color buttons */ GtkWidget * create_map_buttons () { GtkWidget * vbox = create_vbox(5); int i; GtkWidget * hbox; GtkWidget * fixed; for (i=0; i points; i++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); fixed = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, FALSE, FALSE, 0); gtk_fixed_put (GTK_FIXED(fixed), color_button(tmp_map -> values[i], FALSE, 100, 25, G_CALLBACK(set_point_color), GINT_TO_POINTER(i)), 0, 0); fixed = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, FALSE, FALSE, 0); gtk_fixed_put (GTK_FIXED(fixed), spin_button (G_CALLBACK(set_point_position), tmp_map -> positions[i], tmp_map -> cmin, tmp_map -> cmax, 0.01, 3, 100, GINT_TO_POINTER(i)), 0, 0); } return vbox; } /*! \fn void update_color_map () \brief update color map visualization widget */ void update_color_map () { destroy_this_widget (vbbox); vbbox = create_map_buttons (); add_box_child_start (GTK_ORIENTATION_VERTICAL, vcbox, vbbox, FALSE, FALSE, 0); show_the_widgets (vbbox); destroy_this_widget (color_bar); color_bar = create_css_color_bar (tmp_map); gtk_fixed_put (GTK_FIXED(color_fix), color_bar, 50, 0); } /*! \fn G_MODULE_EXPORT void add_map_points (GtkSpinButton * res, gpointer data) \brief add point to the custom color map \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_map_points (GtkSpinButton * res, gpointer data) { //project * this_proj = get_project_by_id(GPOINTER_TO_INT(data)); int id = gtk_spin_button_get_value_as_int (res); if (id >= 2 && id != tmp_map -> points) { init_map_range (tmp_map, id); update_color_map (); } gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), tmp_map -> points); } /*! \fn G_MODULE_EXPORT void update_cmin_max (GtkEntry * res, gpointer data) \brief update color map min / max \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cmin_max (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); gboolean update_cmap = FALSE; switch (i) { case 0: if (v > tmp_map -> cmin && v != tmp_map -> cmax) { tmp_map -> cmax = v; update_cmap = TRUE; } v = tmp_map -> cmax; break; case 1: if (v < tmp_map -> cmax && v != tmp_map -> cmin) { tmp_map -> cmin = v; update_cmap = TRUE; } v = tmp_map -> cmin; break; } update_entry_double(res, v); if (update_cmap) { //init_map_range (tmp_map, tmp_map -> points); update_color_map (); } } /*! \fn G_MODULE_EXPORT void run_custom_mize_map (GtkDialog * win, gint response_id, gpointer data) \brief customize the color map - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_custom_mize_map (GtkDialog * win, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { project * this_proj = (project *)data; the_map -> cmax = tmp_map -> cmax; the_map -> cmin = tmp_map -> cmin; the_map -> points = tmp_map -> points; g_free (the_map -> positions); the_map -> positions = duplicate_float (the_map -> points, tmp_map -> positions); g_free (the_map -> values); the_map -> values = duplicate_color (the_map -> points, tmp_map -> values); setup_custom_color_map (NULL, this_proj, FALSE); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); update (this_proj -> modelgl); } destroy_this_dialog (win); } /*! \fn G_MODULE_EXPORT void custom_mize_map (GtkWidget * but, gpointer data) \brief customize the color map - creating the dialog \param but the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void custom_mize_map (GtkWidget * but, gpointer data) { project * this_proj = get_project_by_id(GPOINTER_TO_INT(data)); GtkWidget * win = dialogmodal (_("Edit color map"), GTK_WINDOW(this_proj -> modelgl -> win)); gtk_dialog_add_button (GTK_DIALOG(win), _("Apply"), GTK_RESPONSE_APPLY); gtk_widget_set_size_request (win, 300, -1); GtkWidget * vbox = dialog_get_content_area (win); tmp_map = g_malloc0(sizeof*tmp_map); tmp_map -> cmin = the_map -> cmin; tmp_map -> cmax = the_map -> cmax; tmp_map -> points = the_map -> points; tmp_map -> positions = duplicate_float (the_map -> points, the_map -> positions); tmp_map -> values = duplicate_color (tmp_map -> points, the_map -> values); // Button for number of colors GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Number of color points for the gradient: "), 200, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, spin_button (G_CALLBACK(add_map_points), tmp_map -> points, 2, 100, 1, 0, 150, data), FALSE, FALSE, 25); // Max hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Initial value (overall max): "), 200, -1, 0.0, 0.5), FALSE, FALSE, 5); GtkWidget * entry = create_entry (G_CALLBACK(update_cmin_max), 100, 15, FALSE, GINT_TO_POINTER(0)); update_entry_double (GTK_ENTRY(entry), (double)tmp_map -> cmax); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 25); // Min hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Final value (overall min): "), 200, -1, 0.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(update_cmin_max), 100, 15, FALSE, GINT_TO_POINTER(1)); update_entry_double (GTK_ENTRY(entry), (double)tmp_map -> cmin); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 25); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); vcbox = create_vbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vcbox, FALSE, FALSE, 5); vbbox = create_map_buttons (); add_box_child_start (GTK_ORIENTATION_VERTICAL, vcbox, vbbox, FALSE, FALSE, 0); color_fix = gtk_fixed_new (); color_bar = create_css_color_bar (tmp_map); gtk_fixed_put (GTK_FIXED(color_fix), color_bar, 50, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, color_fix, FALSE, FALSE, 0); run_this_gtk_dialog (win, G_CALLBACK(run_custom_mize_map), this_proj); } /*void map_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; j = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & i, -1); if (i > 0) { if (j == 0) { gtk_cell_renderer_set_visible (renderer, 1); } else { gtk_cell_renderer_set_visible (renderer, 0); } } else { if (j == 0) { gtk_cell_renderer_set_visible (renderer, 0); } else { gtk_cell_renderer_set_visible (renderer, 1); } } }*/ /*! \fn void fill_map_model (GtkTreeStore * store, project * this_proj) \brief fill color map tree strore \param store the GtkTreeStore to fill \param this_proj the target project */ void fill_map_model (GtkTreeStore * store, project * this_proj) { GtkTreeIter step_level, atom_level; int h, i, j; if (this_proj -> steps > 1) { for (h=0; h < this_proj -> steps; h++) { gtk_tree_store_append (store, & step_level, NULL); gtk_tree_store_set (store, & step_level, 0, h+1, 1, 0, 2, 0, 3, 0, -1); for (i=0; i < this_proj -> natomes; i++) { gtk_tree_store_append (store, & atom_level, & step_level); j = this_proj -> atoms[h][i].sp; gtk_tree_store_set (store, & atom_level, 0, -h-1, 1, this_proj -> chemistry -> label[j] , 2, i+1, 3, the_map -> data[h][i], -1); } } } else { for (i=0; i < this_proj -> natomes; i++) { gtk_tree_store_append (store, & atom_level, NULL); j = this_proj -> atoms[0][i].sp; gtk_tree_store_set (store, & atom_level, 0, this_proj -> chemistry -> label[j] , 1, i+1, 2, the_map -> data[0][i], -1); } } } /*! \fn G_MODULE_EXPORT void edit_map_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data) \brief render color map tree store cell \param cell the GtkCellRendererText to render \param path_string the path in the tree store \param new_text \param data the associated data pointer */ G_MODULE_EXPORT void edit_map_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data) { int i, j; project * this_proj = get_project_by_id(GPOINTER_TO_INT(data)); GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (GTK_TREE_MODEL(map_model), & iter, path); if (this_proj -> steps > 1) { gtk_tree_model_get (GTK_TREE_MODEL(map_model), & iter, 0, & i, -1); gtk_tree_model_get (GTK_TREE_MODEL(map_model), & iter, 2, & j, -1); } else { i = -1; gtk_tree_model_get (GTK_TREE_MODEL(map_model), & iter, 1, & j, -1); } tmp_data[(-i-1)*this_proj -> natomes + j - 1] = string_to_double ((gpointer)new_text); if (this_proj -> steps > 1) { gtk_tree_store_set (map_model, & iter, 3, tmp_data[(-i-1)*this_proj -> natomes + j - 1], -1); } else { gtk_tree_store_set (map_model, & iter, 2, tmp_data[(-i-1)*this_proj -> natomes + j - 1], -1); } } /*! \fn GtkWidget * create_map_tree (project * this_proj) \brief create color map tree view \param this_proj the target project */ GtkWidget * create_map_tree (project * this_proj) { int i, j, k; GtkTreeViewColumn * map_col[4]; GtkCellRenderer * map_cell[4]; gchar * ctitle[4]={i18n("MD step"), i18n("Element"), i18n("Id."), i18n("Value")}; gchar * ctype[4]={"text", "text", "text", "text"}; GType col_type[2][4]= {{G_TYPE_STRING, G_TYPE_INT, G_TYPE_FLOAT}, {G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT, G_TYPE_FLOAT}}; j = (this_proj -> steps > 1) ? 1: 0; k = (this_proj -> steps > 1) ? 0: 1; map_model = gtk_tree_store_newv (3+j, col_type[j]); fill_map_model (map_model, this_proj); GtkWidget * map_tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL(map_model)); for (i=0; i<3+j; i++) { map_cell[i] = gtk_cell_renderer_text_new (); map_col[i] = gtk_tree_view_column_new_with_attributes (_(ctitle[i+k]), map_cell[i], ctype[i], i, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(map_tree), map_col[i]); gtk_tree_view_column_set_alignment (map_col[i], 0.5); //gtk_tree_view_column_set_cell_data_func (map_col[i], map_cell[i], map_set_visible, GINT_TO_POINTER(i), NULL); if (i == 2+j) { g_object_set (map_cell[i], "editable", TRUE, NULL); g_signal_connect (G_OBJECT(map_cell[i]), "edited", G_CALLBACK(edit_map_cell), GINT_TO_POINTER(this_proj -> id)); } } return map_tree; } /*! \fn G_MODULE_EXPORT void run_edit_data_map (GtkDialog * win, gint response_id, gpointer data) \brief edit color map - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_edit_data_map (GtkDialog * win, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { project * this_proj = get_project_by_id(GPOINTER_TO_INT(data)); setup_custom_color_map (tmp_data, this_proj, FALSE); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); update (this_proj -> modelgl); } g_free (tmp_data); destroy_this_dialog (win); } /*! \fn G_MODULE_EXPORT void edit_data_map (GtkWidget * but, gpointer data) \brief edit color map - creating the dialog \param but the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void edit_data_map (GtkWidget * but, gpointer data) { project * this_proj = get_project_by_id(GPOINTER_TO_INT(data)); GtkWidget * win = dialogmodal (_("Edit color map data"), GTK_WINDOW(this_proj -> modelgl -> win)); gtk_dialog_add_button (GTK_DIALOG(win), _("Apply"), GTK_RESPONSE_APPLY); gtk_widget_set_size_request (win, 250, 600); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * maps = create_scroll(NULL, -1, -1, GTK_SHADOW_NONE); tmp_data = allocfloat (this_proj -> natomes*this_proj -> steps); int i, j, k; k = 0; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { tmp_data[k] = the_map -> data[i][j]; k ++; } } add_container_child (CONTAINER_SCR, maps, create_map_tree (this_proj)); gtk_widget_set_size_request (maps, -1, 550); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, maps, FALSE, FALSE, 0); run_this_gtk_dialog (win, G_CALLBACK(run_edit_data_map), data); } /*! \fn gboolean open_save_map (FILE * fp, int act, project * this_proj) \brief open or save a custom color map to file \param fp the file pointer \param act action (0 = read, 1 = write) \param this_proj the target project */ gboolean open_save_map (FILE * fp, int act, project * this_proj) { int i, j; if (act == 0) { float * tmp_map = allocfloat (this_proj -> natomes*this_proj -> steps); rewind (fp); for (i=0; i natomes*this_proj -> steps; i++) { if (fscanf (fp, "%f", & tmp_map[i]) != 1) { show_error (_("Wrong file format !\n Expecting only a single column file\n" " with Ns x Na lines, with:\n" " - Ns = number of MD steps\n" " - Na = number of atoms"), 0, this_proj -> modelgl -> win); g_free (tmp_map); cmap_changed = FALSE; return FALSE; } } cmap_changed = setup_custom_color_map (tmp_map, this_proj, TRUE); g_free (tmp_map); widget_set_sensitive (map_but[1], cmap_changed); widget_set_sensitive (map_but[2], cmap_changed); return TRUE; } else { cmap_changed = FALSE; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (fprintf (fp, "%f\n", this_proj -> modelgl -> custom_map -> data[i][j]) < 0) { show_error (_("Error while saving custom color map"), 0, this_proj -> modelgl -> win); return FALSE; } } } return TRUE; } } dint osmap; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_open_save_data_map (GtkNativeDialog * info, gint response_id, gpointer data) \brief open / save color map data - running the dialog GTK4 \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_open_save_data_map (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_open_save_data_map (GtkDialog * info, gint response_id, gpointer data) \brief open / save color map data - running the dialog GTK3 \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_open_save_data_map (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif gboolean status = FALSE; gchar * datafile; FILE * fp; switch (response_id) { case GTK_RESPONSE_ACCEPT: datafile = file_chooser_get_file_name (chooser); fp = fopen (datafile, dfi[osmap.b]); if (fp != NULL) { status = open_save_map (fp, osmap.b, get_project_by_id(osmap.a)); } else { status = FALSE; } fclose (fp); break; default: status = TRUE; break; } if (status) { #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } } /*! \fn G_MODULE_EXPORT void open_save_data_map (GtkWidget * but, gpointer data) \brief open / save color map data - creating the dialog \param but the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void open_save_data_map (GtkWidget * but, gpointer data) { GtkFileFilter * filter1, * filter2; const gchar * res[2] = {i18n("Open"), i18n("Save")}; GtkFileChooserAction act[2] = {GTK_FILE_CHOOSER_ACTION_OPEN, GTK_FILE_CHOOSER_ACTION_SAVE}; gchar * title[2] = {i18n("Opening custom map for "), i18n("Saving custom map for ")}; osmap.a = GPOINTER_TO_INT (data); project * this_proj = get_project_by_id(osmap.a); gchar * str; gboolean open_save = FALSE; if (the_map != NULL) { str = g_strdup_printf (_("Do you want to save the color map data")); open_save = ask_yes_no (_("Save color map data to file ?"), str, GTK_MESSAGE_QUESTION, this_proj -> modelgl -> win); g_free (str); if (open_save) { osmap.b = 1; } else { str = g_strdup_printf (_("Do you want to read new color map data")); open_save = ask_yes_no (_("Read color map data from file ?"), str, GTK_MESSAGE_QUESTION, this_proj -> modelgl -> win); g_free (str); osmap.b = 0; } } else { osmap.b = 0; open_save = TRUE; } if (open_save) { #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif str = g_strdup_printf ("%s%s", _(title[osmap.b]), prepare_for_title(this_proj -> name)); info = create_file_chooser (str, GTK_WINDOW(MainWindow), act[osmap.b], _(res[osmap.b])); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); g_free (str); #ifdef GTK3 if (osmap.b == 1) gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif file_chooser_set_current_folder (chooser); filter1 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter1), _("Raw data (*.dat)")); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter1), "*.dat"); gtk_file_chooser_add_filter (chooser, filter1); filter2 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter2), _("All files (*)")); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter2), "*"); gtk_file_chooser_add_filter (chooser, filter2); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_open_save_data_map), NULL); #else run_this_gtk_dialog (info, G_CALLBACK(run_open_save_data_map), NULL); #endif } } gboolean res_use_map; /*! \fn G_MODULE_EXPORT void run_use_color_map (GtkDialog * win, gint response_id, gpointer data) \brief use custom color map - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_use_color_map (GtkDialog * win, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { res_use_map = (cmap_changed || the_map != NULL) ? TRUE : FALSE; } else { res_use_map = the_map != NULL ? TRUE : FALSE; } destroy_this_dialog (win); } /*! \fn gboolean use_custom_color_map (int p) \brief use custom color map - creating the dialog \param p the target project id */ gboolean use_custom_color_map (int p) { project * this_proj = get_project_by_id(p); GtkWidget * win = dialogmodal (_("Custom color map settings"), GTK_WINDOW(this_proj -> modelgl -> win)); gtk_dialog_add_button (GTK_DIALOG(win), _("Apply"), GTK_RESPONSE_APPLY); GtkWidget * vbox = dialog_get_content_area (win); gchar * btitle[3] = {i18n("Import / Save data"), i18n("Edit data"), i18n("Customize color map")}; gchar * bimage[3] = {FOPEN, EDITA, EDITA}; GCallback handlers[3] = {G_CALLBACK(open_save_data_map), G_CALLBACK(edit_data_map), G_CALLBACK(custom_mize_map)}; int i; for (i=0; i<3; i++) { map_but[i] = create_button (_(btitle[i]), IMG_STOCK, bimage[i], 150, 50, GTK_RELIEF_NORMAL, handlers[i], GINT_TO_POINTER(p)); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, map_but[i], FALSE, FALSE, 10); if (i > 0 && the_map == NULL) { widget_set_sensitive (map_but[i], 0); } } run_this_gtk_dialog (win, G_CALLBACK(run_use_color_map), NULL); // res_use_map is updated when running the dialog return res_use_map; } /*! \fn G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data) \brief set color map callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data) { tint * the_data = (tint *) data; project * this_proj = get_project_by_id(the_data -> a); the_map = this_proj -> modelgl -> custom_map; int i, j, k, l; j = the_data -> b; k = j / ATOM_MAPS; i = this_proj -> modelgl -> anim -> last -> img -> color_map[k]; l = j - k*ATOM_MAPS; #ifdef GTK3 if (i != l && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) #else if (i != l) #endif { gboolean change_map = TRUE; gboolean didit = FALSE; if (j == 6 && ! the_map && ! k) { change_map = use_custom_color_map (the_data -> a); didit = TRUE; } else if (j == 6 && k && ! the_map) { change_map = FALSE; } if (change_map) { this_proj -> modelgl -> anim -> last -> img -> color_map[k] = NONE; #ifdef GTK3 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> color_styles[k*ATOM_MAPS+i], FALSE); if (j == 6) widget_set_sensitive (this_proj -> modelgl -> color_styles[ATOM_MAPS+POLY_MAPS-1], TRUE); if (widg != this_proj -> modelgl -> color_styles[j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> color_styles[j], TRUE); } #endif this_proj -> modelgl -> anim -> last -> img -> color_map[k] = l; if (k == 0) { int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; } else { int shaders[1] = {POLYS}; re_create_md_shaders (1, shaders, this_proj); } update (this_proj -> modelgl); if (j == 6 && ! didit && ! reading_input && ! k) use_custom_color_map (the_data -> a); } } #ifdef GTK3 else if (k*ATOM_MAPS+i == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> color_styles[j], TRUE); } #endif } #ifdef GTK3 /*! \fn GtkWidget * mapw (glwin * view, int m, int mi, int mid, int cid, gchar * str) \brief create a color map menu item \param view the target glwin \param m main app (0) or popup (1) \param mi the object (0 = atoms, 1 = polyhedra) \param mid the menu item id in [0, ATOM_MAPS-1] \param cid the active color map for object \param str the label of the menu item */ GtkWidget * mapw (glwin * view, int m, int mi, int mid, int cid, gchar * str) { int v = mi*ATOM_MAPS + mid; if (m == 0) { view -> color_styles[v] = gtk3_menu_item (NULL, str, IMG_NONE, NULL, G_CALLBACK(set_color_map), & view -> colorp[v][0], FALSE, 0, 0, TRUE, TRUE, (cid == mid) ? TRUE : FALSE); if ((mi && (! view -> bonding || ! view -> custom_map)) || (mid == 3 && ! view -> adv_bonding[0]) || (mid == 4 && ! view -> adv_bonding[1]) || (mid == 5 && ! get_project_by_id(view -> proj) -> force_field[0])) { widget_set_sensitive (view -> color_styles[v], 0); } return view -> color_styles[v]; } else { GtkWidget * ats = gtk3_menu_item (NULL, str, IMG_NONE, NULL, G_CALLBACK(set_color_map), & view -> colorp[v][0], FALSE, 0, 0, TRUE, TRUE, (cid == mid) ? TRUE : FALSE); if ((mi && (! view -> bonding || ! view -> custom_map)) || (mid == 3 && ! view -> adv_bonding[0]) || (mid == 4 && ! view -> adv_bonding[1]) || (mid == 5 && ! get_project_by_id(view -> proj) -> force_field[0])) { widget_set_sensitive (ats, 0); } return ats; } } /*! \fn GtkWidget * menump (glwin * view, gchar * ncm, int mid, int id, int cid) \brief create the 'Color Scheme(s) - > *' submenus - GTK3 \param view the target glwin \param ncm menu item label for object \param mid the object (0 = atoms, 1 = polyhedra) \param id main app (0) or popup (1) \param cid the active color map for object */ GtkWidget * menump (glwin * view, gchar * ncm, int mid, int id, int cid) { GtkWidget * map = create_menu_item (TRUE, ncm); GtkWidget * mapm = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)map, mapm); gtk_menu_shell_append ((GtkMenuShell *)mapm, mapw(view, mid, id, 0, cid, _("Atomic Species"))); GtkWidget * cp = create_menu_item (FALSE, _("Atomic Coordination")); gtk_menu_shell_append ((GtkMenuShell *)mapm, cp); GtkWidget * mapn = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)cp, mapn); gtk_menu_shell_append ((GtkMenuShell *)mapn, mapw(view, mid, id, 1, cid, _("Total"))); gtk_menu_shell_append ((GtkMenuShell *)mapn, mapw(view, mid, id, 2, cid, _("Partial"))); gtk_menu_shell_append ((GtkMenuShell *)mapm, mapw(view, mid, id, 3, cid, _("Fragment(s)"))); gtk_menu_shell_append ((GtkMenuShell *)mapm, mapw(view, mid, id, 4, cid, _("Molecule(s)"))); gtk_menu_shell_append ((GtkMenuShell *)mapm, mapw(view, mid, id, 5, cid, _("Force Field (DL_POLY)"))); if (id == 0) { gtk_menu_shell_append ((GtkMenuShell *)mapm, mapw(view, mid, id, 6, cid, _("Custom"))); } else { gtk_menu_shell_append ((GtkMenuShell *)mapm, mapw(view, mid, id, 6, cid, _("Use Atom(s) Custom Map"))); } return map; } /*! \fn GtkWidget * menu_map (glwin * view, int id) \brief create the 'OpenGL -> Color Scheme(s)' submenu - GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_map (glwin * view, int id) { GtkWidget * menum = gtk_menu_new (); gtk_menu_shell_append ((GtkMenuShell *)menum, menump(view, _("Atoms & bonds"), id, 0, view -> anim -> last -> img -> color_map[0])); gtk_menu_shell_append ((GtkMenuShell *)menum, menump(view, _("Polyhedra"), id, 1, view -> anim -> last -> img -> color_map[1])); widget_set_sensitive (menum, get_project_by_id(view -> proj) -> nspec); return menum; } #else /*! \fn G_MODULE_EXPORT void change_color_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change color map callback - GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void change_color_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { glwin * view = (glwin *)data; const gchar * color = g_variant_get_string (parameter, NULL); int lgt = strlen (color); gchar * name = g_strdup_printf ("%c%c", color[lgt-2], color[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s", 8, color); if (g_strcmp0(name, "set-amap") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, color); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-amap", g_variant_new_string((const gchar *)name)); } else { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, color); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-pmap", g_variant_new_string((const gchar *)name)); } g_free (name); } else { int i; gchar * dot = g_strdup_printf ("%c", color[lgt-4]); gchar * col; if (g_strcmp0(dot, ".") == 0) { col = g_strdup_printf ("%c", color[lgt-3]); } else { col = g_strdup_printf ("%c%c", color[lgt-4], color[lgt-3]); } i = (int)string_to_double ((gpointer)col); set_color_map (NULL, & view -> colorp[i][0]); g_free (dot); g_free (col); g_action_change_state (G_ACTION (action), parameter); } } /*! \fn GMenu * menump (glwin * view, int popm, int mid, int cid) \brief create the 'Color Scheme(s) - > *' submenus - GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param mid the object (0 = atoms, 1 = polyhedra) \param cid the active color map for object */ GMenu * menump (glwin * view, int popm, int mid, int cid) { gchar * mapname[2] = {"amap", "pmap"}; gboolean sensitive; GMenu * menu = g_menu_new (); append_opengl_item (view, menu, _("Atomic Species"), mapname[mid], popm, mid*ATOM_MAPS, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 0) ? TRUE : FALSE, TRUE, TRUE); GMenu * menuf = g_menu_new (); append_opengl_item (view, menuf, _("Total(s)"), mapname[mid], popm, mid*ATOM_MAPS+1, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 1) ? TRUE : FALSE, TRUE, TRUE); append_opengl_item (view, menuf, _("Partial(s)"), mapname[mid], popm, mid*ATOM_MAPS+2, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 2) ? TRUE : FALSE, TRUE, TRUE); append_submenu (menu, _("Atomic Coordinations"), menuf); g_object_unref (menuf); sensitive = view -> adv_bonding[0]; append_opengl_item (view, menu, _("Fragment(s)"), mapname[mid], popm, mid*ATOM_MAPS+3, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 3) ? TRUE : FALSE, TRUE, sensitive); sensitive = view -> adv_bonding[1]; append_opengl_item (view, menu, _("Molecule(s)"), mapname[mid], popm, mid*ATOM_MAPS+4, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 4) ? TRUE : FALSE, TRUE, sensitive); sensitive = (get_project_by_id(view -> proj) -> force_field[0]) ? TRUE : FALSE; append_opengl_item (view, menu, _("Force Field (DL_POLY)"), mapname[mid], popm, mid*ATOM_MAPS+5, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 5) ? TRUE : FALSE, TRUE, sensitive); sensitive = (! mid) ? TRUE : (view -> custom_map) ? TRUE : FALSE; append_opengl_item (view, menu, (! mid) ? _("Custom") : _("Use Atom(s) Custom Map"), mapname[mid], popm, mid*ATOM_MAPS+6, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 6) ? TRUE : FALSE, TRUE, sensitive); return menu; } /*! \fn GMenu * menu_map (glwin * view, int popm) \brief create the 'OpenGL -> Color Scheme(s)' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_map (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Atoms & Bonds"), menump(view, popm, 0, view -> anim -> last -> img -> color_map[0])); append_submenu (menu, _("Polyhedra"), menump(view, popm, 1, view -> anim -> last -> img -> color_map[1])); return menu; } #endif atomes_1.3.1/src/opengl/win/m_axis.c0000664000175000017500000002732015212624223017005 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_axis.c * @short Functions to create the 'View -> Axis' submenu * @author Sébastien Le Roux */ /* * This file: 'm_axis.c' * * Contains: * - The functions to create the 'View -> Axis' submenu * * List of functions: void menu_axis (GtkWidget * menu_ab, glwin * view, int id); void menu_axis (GMenu * menu_ab, glwin * view, int popm); G_MODULE_EXPORT void set_axis_template_pos (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void change_axis_pos_radio (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * axis_position_submenu (glwin * view, int id); GMenu * position_submenu (glwin * view, int popm, int pos); GMenu * axis_position_submenu (glwin * view, int popm); */ #include "global.h" #include "glview.h" #include "glwindow.h" #include "submenus.h" extern G_MODULE_EXPORT void axis_advanced (GtkWidget * widg, gpointer data); extern GtkWidget * create_layout_widget (gchar * str, GtkWidget * menu, int vab, gpointer data); #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_axis_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create the axis advanced parameters window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_axis_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) { axis_advanced (NULL, data); } #endif #ifdef GTK3 /*! \fn G_MODULE_EXPORT void set_axis_template_pos (GtkWidget * widg, gpointer data) \brief handle change axis position signal GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_template_pos (GtkWidget * widg, gpointer data) { /* TOP_RIGHT = 0, TOP_LEFT = 1, BOTTOM_RIGHT = 2, BOTTOM_LEFT = 3, CENTER = 4 */ tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); int i = this_proj -> modelgl -> anim -> last -> img -> xyz -> t_pos; int j = the_data -> b; if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg) && i != j) { this_proj -> modelgl -> anim -> last -> img -> xyz -> t_pos = NONE; if (i != CUSTOM) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_box_axis[1][8+i], FALSE); } if (widg != this_proj -> modelgl -> ogl_box_axis[1][8+j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_box_axis[1][8+j], TRUE); } this_proj -> modelgl -> anim -> last -> img -> xyz -> t_pos = j; this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; update (this_proj -> modelgl); if (this_proj -> modelgl -> axis_win) { if (this_proj -> modelgl -> axis_win -> templates && GTK_IS_WIDGET(this_proj -> modelgl -> axis_win -> templates)) { combo_set_active (this_proj -> modelgl -> axis_win -> templates, j); } } } else if (i == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { if (i != CUSTOM) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_box_axis[1][8+i], TRUE); } } } /*! \fn GtkWidget * axis_position_submenu (glwin * view, int id) \brief create the 'Axis -> Position' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * axis_position_submenu (glwin * view, int id) { int i, j, k; GtkWidget * menup = gtk_menu_new (); GtkWidget * ud, * udm, * widg; gchar * udlab[2] = {i18n("Top"), i18n("Bottom")}; gchar * lrlab[2] = {i18n("Right Corner"), i18n("Left Corner")}; i = 0; for (j=0; j<2; j++) { ud = create_menu_item (FALSE, _(udlab[j])); gtk_menu_shell_append ((GtkMenuShell *)menup, ud); udm = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)ud, udm); for (k=0; k<2; k++) { if (id == 0) { view -> ogl_box_axis[1][8+i] = gtk3_menu_item (udm, _(lrlab[k]), IMG_NONE, NULL, G_CALLBACK(set_axis_template_pos), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (view -> anim -> last -> img -> xyz -> t_pos == i) ? TRUE: FALSE); if (view -> anim -> last -> img -> xyz -> axis == NONE) widget_set_sensitive (view -> ogl_box_axis[1][8+i], 0); } else { widg = gtk3_menu_item (udm, _(lrlab[k]), IMG_NONE, NULL, G_CALLBACK(set_axis_template_pos), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (view -> anim -> last -> img -> xyz -> t_pos == i) ? TRUE: FALSE); if (view -> anim -> last -> img -> xyz -> axis == NONE) widget_set_sensitive (widg, 0); } i += 1; } } if (id == 0) { view -> ogl_box_axis[1][8+i] = gtk3_menu_item (menup, _("Center"), IMG_NONE, NULL, G_CALLBACK(set_axis_template_pos), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (view -> anim -> last -> img -> xyz -> t_pos == i) ? TRUE: FALSE); if (view -> anim -> last -> img -> xyz -> axis == NONE) widget_set_sensitive (view -> ogl_box_axis[1][8+i], 0); } else { widg = gtk3_menu_item (menup, _("Center"), IMG_NONE, NULL, G_CALLBACK(set_axis_template_pos), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (view -> anim -> last -> img -> xyz -> t_pos == i) ? TRUE: FALSE); if (view -> anim -> last -> img -> xyz -> axis == NONE) widget_set_sensitive (widg, 0); } return menup; } /*! \fn void menu_axis (GtkWidget * menu_ab, glwin * view, int id) \brief create 'Axis' menu GTK3 \param menu_ab the GtkWidget sending the signal \param view the target glwin \param id main app (0) or popup (1) */ void menu_axis (GtkWidget * menu_ab, glwin * view, int id) { GtkWidget * widg = create_menu_item (FALSE, _("Length")); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, widg); GtkWidget * menul = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menul); gchar * str = g_strdup_printf (_(" Length [ %f Å ]"), view -> anim -> last -> img -> xyz -> length); if (id == 0) { view -> ogl_box_axis[1][7] = create_layout_widget (str, menul, view -> anim -> last -> img -> xyz -> axis, & view -> colorp[0][AXIS]); if (view -> anim -> last -> img -> xyz -> axis == NONE) { widget_set_sensitive (view -> ogl_box_axis[1][7], 0); } } else { widg = create_layout_widget (str, menul, view -> anim -> last -> img -> xyz -> axis, & view -> colorp[0][AXIS]); if (view -> anim -> last -> img -> xyz -> axis == NONE) { widget_set_sensitive (widg, 0); } } g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, menu_item_new_with_submenu (_("Position"), TRUE, axis_position_submenu(view, id))); add_advanced_item (menu_ab, G_CALLBACK(axis_advanced), (gpointer)view, FALSE, 0, 0); } #else /*! \fn G_MODULE_EXPORT void change_axis_pos_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle change axis position signal GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void change_axis_pos_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { /* TOP_RIGHT = 0, TOP_LEFT = 1, BOTTOM_RIGHT = 2, BOTTOM_LEFT = 3, CENTER = 4 */ tint * the_data = (tint *)data; glwin * view = get_project_by_id(the_data -> a) -> modelgl; const gchar * pos = g_variant_get_string (parameter, NULL); int lgt = strlen (pos); gchar * name = g_strdup_printf ("%c%c", pos[lgt-2], pos[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, pos); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-axis-pos", g_variant_new_string((const gchar *)name)); g_free (name); } else { int i; gchar * pos_name = NULL; for (i=0; i<5; i++) { pos_name = g_strdup_printf ("set-axis-pos.%d.0", i); if (g_strcmp0(pos, (const gchar *)pos_name) == 0) { view -> anim -> last -> img -> xyz -> t_pos = i; g_free (pos_name); pos_name = NULL; break; } g_free (pos_name); pos_name = NULL; } g_action_change_state (G_ACTION (action), parameter); view -> create_shaders[MAXIS] = TRUE; update (view); g_action_change_state (G_ACTION (action), parameter); if (view -> axis_win) { if (view -> axis_win -> templates && GTK_IS_WIDGET(view -> axis_win -> templates)) { combo_set_active (view -> axis_win -> templates, i); } } } } /*! \fn GMenu * position_submenu (glwin * view, int popm, int pos) \brief create elements of the 'Axis -> Position' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param pos position id */ GMenu * position_submenu (glwin * view, int popm, int pos) { GMenu * menu = g_menu_new (); gchar * lrlab[2] = {i18n("Right Corner"), i18n("Left Corner")}; int i, j; i = pos*2; for (j=0; j<2; j++) { append_opengl_item (view, menu, _(lrlab[j]), "axis-pos", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_axis_pos_radio), & view -> colorp[i][0], FALSE, (view -> anim -> last -> img -> xyz -> t_pos == i) ? TRUE: FALSE, TRUE, TRUE); i ++; } return menu; } /*! \fn GMenu * axis_position_submenu (glwin * view, int popm) \brief create the 'Axis -> Position' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * axis_position_submenu (glwin * view, int popm) { int i; GMenu * menu = g_menu_new (); gchar * udlab[2] = {i18n("Top"), i18n("Bottom")}; for (i=0; i<2; i++) { append_submenu (menu, _(udlab[i]), position_submenu(view, popm, i)); } append_opengl_item (view, menu, _("Center"), "axis-pos", popm, 4, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_axis_pos_radio), & view -> colorp[4][0], FALSE, (view -> anim -> last -> img -> xyz -> t_pos == 4) ? TRUE: FALSE, TRUE, TRUE); return menu; } /*! \fn void menu_axis (GMenu * menu_ab, glwin * view, int popm) \brief create the 'Axis' submenu GTK4 \param menu_ab the menu to attach the new menu to \param view the target glwin \param popm main app (0) or popup (1) */ void menu_axis (GMenu * menu_ab, glwin * view, int popm) { GMenuItem * item = g_menu_item_new (_("Length"), (view -> anim -> last -> img -> xyz -> axis) != NONE ? NULL : "None"); g_menu_item_set_attribute (item, "custom", "s", "axis-length", NULL); g_menu_item_set_submenu (item, (GMenuModel *)axis_box_param (view, popm, AXIS, NONE)); g_menu_append_item (menu_ab, item); append_submenu (menu_ab, _("Position"), axis_position_submenu(view, popm)); append_opengl_item (view, menu_ab, _("Advanced"), "axis-advanced", popm, popm, NULL, IMG_STOCK, DPROPERTIES, FALSE, G_CALLBACK(to_axis_advanced), (gpointer)view, FALSE, FALSE, FALSE, TRUE); } #endif atomes_1.3.1/src/opengl/win/popup.c0000664000175000017500000044444515212624223016703 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file popup.c * @short Functions to create the OpenGL window popup menus: - The main popup menu \n - The contextual, atom or bond related, popup menus * @author Sébastien Le Roux */ /* * This file: 'popup.c' * * Contains: * - The functions to create the OpenGL window popup menus: - The main popup menu - The contextual, atom or bond related, popup menus * * List of functions: int get_to_be_selected (glwin * view); int get_style (gchar * str); int check_label_numbers (project * this_proj, int types); gchar * get_object_from_action (GSimpleAction * action); void to_remove_this_object (int type, gpointer data); void to_replace_this_object (int type, GSimpleAction * action, gpointer data); void to_replace_this_object (int type, GtkWidget * widg, gpointer data); void copy_bond_selection (); void remove_object (); void insert_object (int action, gpointer data); void check_hidden_visible (project * this_proj); void create_new_project_using_data (atom_selection * selection); void add_style_sub_menu (GtkWidget * item, GCallback handler, gpointer data); void add_edition_sub_menu (GtkWidget * item, GCallback handler, gpointer data); void create_selection_item (GMenu * menu, glwin * view, gchar * str, gchar * act, int aid, int mid, int gid, int cid, int aoc, GCallback handler, gpointer data); void analyze_popup_attach_color_palettes (glwin * view, GtkWidget * menu, int ato, int spc, int totc, int parc, int frag, int mol); void popup_selection (glwin * view, double ptx, double pty, int spe, int mmod, int ati, int bti, int aoc); void analyze_menu_attach_color_palettes (glwin * view, GtkWidget * menu); void popup_main_menu (glwin * view, double ptx, double pty); G_MODULE_EXPORT void set_full_screen (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void set_full_screen (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void remove_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void remove_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void add_object (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void add_object (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_add_object (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_add_object (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void replace_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void replace_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void copy_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void copy_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void label_unlabel_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void label_unlabel_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void select_unselect_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void select_unselect_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void style_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void style_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void remove_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void remove_the_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void replace_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void replace_the_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void copy_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void copy_the_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_others (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_others (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_the_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void label_unlabel_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void label_unlabel_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void select_unselect_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void select_unselect_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void style_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void style_the_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void remove_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void remove_the_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void replace_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void replace_the_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void copy_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void copy_the_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_the_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void label_unlabel_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void label_unlabel_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void select_unselect_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void select_unselect_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void style_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void style_the_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void edit_in_new_project (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void edit_in_new_project (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void edit_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void edit_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void edit_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void edit_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void select_action_for_all (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void select_action_for_all (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void select_action_for_this_bond (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void select_action_for_this_bond (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void select_action_for_all_bonds (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void select_action_for_all_bonds (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void reset_coords (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void reset_coords (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void turn_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void turn_rebuild (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_center_this_molecule (GtkWidget * widg, gpointer data); GtkWidget * create_selection_item (glwin * view, gchar * str, int mid, int gid, int cid, int aoc, GCallback handler, gpointer data); GtkWidget * selection_menu (glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c); GMenu * add_edition_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data); GMenu * add_style_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data); GMenu * selection_menu (int aid, glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c); GMenu * tools_section (glwin * view); GMenu * anim_section (glwin * view); atom_search * free_this_search_data (atom_search * this_search); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "workspace.h" #include "project.h" #include "glview.h" #include "glwindow.h" #include "submenus.h" #include "color_box.h" #include "bind.h" #include "atom_edit.h" #define CONTEXTACT 12 extern atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); extern void check_all_trees (project * this_proj); extern int action_atoms_from_project (project * this_proj, atom_search * asearch, gboolean visible); extern G_MODULE_EXPORT void render_gl_image (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data); extern void apply_project (gboolean showtools); extern GtkWidget * field_atom_menu (int p, int s, int a, int f); extern void reset_coordinates (project * this_proj, int status); extern vec3_t get_bary (project * this_proj, int status); extern void prepare_to_instert (gchar * key, project * this_proj, atom_search * asearch, gboolean visible); extern insertion_menu mol[]; extern atom_in_selection * new_atom_in_selection (int id, int sp); extern int inserted_from_lib; extern void duplicate_material_and_lightning (image * new_img, image * old_img); #ifdef GTK4 extern GSimpleActionGroup * view_pop_actions; extern G_MODULE_EXPORT void window_color_coord (GSimpleAction * action, GVariant * parameter, gpointer data); extern GtkWidget * color_palette (glwin * view, int ideo, int spec, int geo); #endif extern G_MODULE_EXPORT void view_shortcuts (GSimpleAction * action, GVariant * parameter, gpointer data); atom_search * remove_search = NULL; atom_search * insert_search = NULL; int selected_atom; int selected_btom; int selected_aspec; int selected_bspec; int is_selected; int is_labelled; atom_selection * bond_selection = NULL; tint atoid[CONTEXTACT][4]; dint btoid; /*! \fn int get_to_be_selected (glwin * view) \brief find which atom(s) are to be selected \param view the target glwin */ int get_to_be_selected (glwin * view) { if (view -> atom_win && ! column_label) { return (view -> atom_win -> visible || view -> selection_mode == NSELECTION-1) ? 1 : 0; } else { return 0; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_full_screen (GSimpleAction * action, GVariant * parameter, gpointer data) \brief set full screen callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void set_full_screen (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_full_screen (GtkWidget * widg, gpointer data) \brief set full screen callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_full_screen (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; if (! view -> fullscreen) { gtk_window_fullscreen (GTK_WINDOW(view -> win)); hide_the_widgets (view -> menu_box); view -> fullscreen = TRUE; } else { gtk_window_unfullscreen (GTK_WINDOW(view -> win)); show_the_widgets (view -> menu_box); view -> fullscreen = FALSE; } } /*! \fn int get_style (gchar * str) \brief get OpenGL rendering style id \param str */ int get_style (gchar * str) { int i; #ifdef GTK4 i = strlen (str); return (int) string_to_double ((gpointer)g_strdup_printf ("%c", str[i-1])); #else for (i=0; i proj); g_free (this_search); clean_other_window_after_edit (this_proj); if (this_proj -> modelgl -> atom_win) { if (! this_proj -> modelgl -> atom_win -> visible) { if (! this_proj -> modelgl -> cell_win || ! this_proj -> modelgl -> cell_win -> slab_passivate) { g_free (this_proj -> modelgl -> atom_win); this_proj -> modelgl -> atom_win = NULL; } } } return NULL; } /*! \fn void to_remove_this_object (int type, gpointer data) \brief remove a type of object \param type the type of object to remove (0= atom, 1= coordination type, 2= atom selection, 3= bond selection) \param data the associated data pointer */ void to_remove_this_object (int type, gpointer data) { int i, j; atom_in_selection * selat; tint * sel; prepare_atom_edition (& opengl_project -> modelgl -> colorp[0][0], FALSE); remove_search = allocate_atom_search (opengl_project -> id, REMOVE, REMOVE, opengl_project -> natomes); switch (type) { case 0: i = GPOINTER_TO_INT(data); remove_search -> todo[i] = 1; break; case 1: sel = (tint * )data; i = opengl_project -> modelgl -> anim -> last -> img -> step; for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { remove_search -> todo[j] = 1; } } else { if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { remove_search -> todo[j] = 1; } } } break; case 2: sel = (tint * )data; i = opengl_project -> modelgl -> anim -> last -> img -> step; gboolean doit; for (j=0; j natomes; j++) { doit = FALSE; if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (! sel -> a) { if (opengl_project -> atoms[i][j].pick[0] == is_selected || is_selected == -1) doit = TRUE; } else if (sel -> a == 2) { doit = TRUE; } else if (opengl_project -> atoms[i][j].label[0] == is_labelled) { if (opengl_project -> atoms[i][j].pick[0] == is_selected || is_selected == -1) doit = TRUE; } if (doit) { remove_search -> todo[j] = 1; } } } break; case 3: selat = bond_selection -> first; for (i=0; i selected ; i++) { j = selat -> id; remove_search -> todo[j] = 1; selat = selat -> next; } break; } } /*! \fn gchar * get_object_from_action (GSimpleAction * action) \brief get object name from action name GTK4 \param action the GAction sending the signal */ gchar * get_object_from_action (GSimpleAction * action) { int i, j, k; const gchar * act = g_action_get_name(G_ACTION(action)); gchar * act_end; gchar * str; k = strlen (act); if (strstr(act, "set-mol-ins")) { act_end = g_strdup_printf ("%c%c", act[k-4], act[k-3]); for (i=0; mol[i].type || mol[i].object; i++) { if (mol[i].object) { str = (i < 10) ? g_strdup_printf (".%d", i) : g_strdup_printf ("%d", i); if (g_strcmp0(str, act_end) == 0) { g_free (str); g_free (act_end); if (i == 9 || i == 13 || i == 16 || i == 17) { return g_strdup_printf ("%s", _(mol[i].object)); } else { return g_strdup_printf ("%s", mol[i].object); } break; } g_free (str); } } g_free (act_end); } if (strstr(act, "set-ifp")) { act_end = g_strdup_printf ("%c%c%c%c", act[k-6], act[k-5], act[k-4], act[k-3]); for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { for (j=0; j<3; j++) { str = g_strdup_printf ("-%d.%d", j, i); if (g_strcmp0(str, act_end) == 0) { g_free (str); g_free (act_end); return g_strdup_printf (_("%s in %s"), _(action_atoms[j]), g_strdup_printf ("%s (%d)", get_project_by_id(i) -> name, i+1)); } g_free (str); } } } g_free (act_end); } return NULL; } #ifdef GTK4 /*! \fn void to_replace_this_object (int type, GSimpleAction * action, gpointer data) \brief replace a type of object GTK4 \param type the type of object to replace (0= atom, 1= coordination type, 2= atom selection, 3= bond selection) \param action the GAction sending the signal \param data the associated data pointer */ void to_replace_this_object (int type, GSimpleAction * action, gpointer data) #else /*! \fn void to_replace_this_object (int type, GtkWidget * widg, gpointer data) \brief replace a type of object GTK3 \param type the type of object to replace (0= atom, 1= coordination type, 2= atom selection, 3= bond selection) \param widg the GtkWidget sending the signal \param data the associated data pointer */ void to_replace_this_object (int type, GtkWidget * widg, gpointer data) #endif { int h, i, j; atom_in_selection * selat; tint * sel; gboolean replace = TRUE; if (opengl_project -> modelgl -> cell_win) { if (opengl_project -> modelgl -> cell_win -> cut_this_slab) replace = FALSE; } if (replace) { prepare_atom_edition (& opengl_project -> modelgl -> colorp[0][0], FALSE); insert_search = allocate_atom_search (opengl_project -> id, REPLACE, REPLACE, opengl_project -> natomes); } else { insert_search = opengl_project -> modelgl -> search_widg[8]; } gchar * lab; #ifdef GTK4 if (action != NULL) { lab = get_object_from_action (action); } #else if (widg != NULL) { lab = g_strdup_printf ("%s", gtk_menu_item_get_label (GTK_MENU_ITEM(widg))); } #endif else { lab = g_strdup_printf (_("Copied Data")); } h = get_selected_object_id (FALSE, opengl_project -> id, lab, insert_search); g_free (lab); if (h != 0) { switch (type) { case 0: i = GPOINTER_TO_INT(data); to_insert_in_project (h, i, opengl_project, insert_search, FALSE); insert_search -> todo[i] = 1; break; case 1: sel = (tint * )data; i = opengl_project -> modelgl -> anim -> last -> img -> step; for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { to_insert_in_project (h, j, opengl_project, insert_search, FALSE); insert_search -> todo[j] = 1; } } else if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { to_insert_in_project (h, j, opengl_project, insert_search, FALSE); insert_search -> todo[j] = 1; } } break; case 2: sel = (tint * )data; gboolean doit; i = opengl_project -> modelgl -> anim -> last -> img -> step; for (j=0; j natomes; j++) { doit = FALSE; if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (! sel -> a) { if (opengl_project -> atoms[i][j].pick[0] == is_selected || is_selected == -1) doit = TRUE; } else if (sel -> a == 2) { doit = TRUE; } else if (opengl_project -> atoms[i][j].label[0] == is_labelled) { if (opengl_project -> atoms[i][j].pick[0] == is_selected || is_selected == -1) doit = TRUE; } if (doit) { to_insert_in_project (h, j, opengl_project, insert_search, FALSE); insert_search -> todo[j] = 1; } } } break; case 3: selat = bond_selection -> first; for (i=0; i selected ; i++) { j = selat -> id; to_insert_in_project (h, j, opengl_project, insert_search, FALSE); insert_search -> todo[j] = 1; selat = selat -> next; } break; } } } /*! \fn void copy_bond_selection () \brief copy bond selection */ void copy_bond_selection () { if (copied_object) { g_free (copied_object); copied_object = NULL; } pasted_todo = allocint (opengl_project -> natomes); atom_in_selection * selat = bond_selection -> first; while (selat) { pasted_todo[selat -> id] = 1; selat = selat -> next; } copied_object = create_object_from_selection (opengl_project); } /*! \fn void remove_object () \brief remove object using 'remove_search' */ void remove_object () { gchar * str; gboolean vis = (opengl_project -> modelgl -> atom_win) ? opengl_project -> modelgl -> atom_win -> visible : FALSE; int i = action_atoms_from_project (opengl_project, remove_search, vis); remove_search = free_this_search_data (remove_search); if (! opengl_project -> modelgl -> cell_win || ! opengl_project -> modelgl -> cell_win -> slab_passivate) { if (! i) { str = g_strdup_printf (_("No atoms to be removed !")); } else { str = g_strdup_printf (_("%d atom(s) removed !"), i); } show_info (str, 0, opengl_project -> modelgl -> win); g_free (str); } else { opengl_project -> modelgl -> search_widg[8] -> int_b = i; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void remove_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief remove this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void remove_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void remove_this_atom (GtkWidget * widg, gpointer data) \brief remove this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void remove_this_atom (GtkWidget * widg, gpointer data) #endif { to_remove_this_object (0, data); remove_object (); } /*! \fn void insert_object (int action, gpointer data) \brief insert object \param action the action to perform (replace = 1 or insert only = 3) \param data the associated data pointer */ void insert_object (int action, gpointer data) { int i, j; gchar * str; gboolean vis = (opengl_project -> modelgl -> atom_win) ? opengl_project -> modelgl -> atom_win -> visible : FALSE; if (insert_search -> in_selection) { if (action == 1 && remove_search != NULL) { i = action_atoms_from_project (opengl_project, remove_search, vis); } j = action_atoms_from_project (opengl_project, insert_search, vis); if (action == 1) { str = g_strdup_printf (_("%d atom(s) removed !\n%d atom(s) inserted !"), i, j); } else { str = g_strdup_printf (_("%d atom(s) inserted !"), (inserted_from_lib) ? inserted_from_lib : j); inserted_from_lib = 0; } clean_other_window_after_edit (opengl_project); if (action == 1) show_info (str, 0, opengl_project -> modelgl -> win); g_free (str); } insert_search = free_this_search_data (insert_search); } gboolean insert_this_object; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void add_object (GSimpleAction * action, GVariant * parameter, gpointer data) \brief add object call back GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void add_object (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void add_object (GtkWidget * widg, gpointer data) \brief add object call back GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_object (GtkWidget * widg, gpointer data) #endif { int i, j; i = opengl_project -> natomes; prepare_atom_edition (data, FALSE); insert_search = allocate_atom_search (opengl_project -> id, INSERT, INSERT, 0); if (insert_this_object) { gchar * lab = NULL; #ifdef GTK4 if (action != NULL) { lab = get_object_from_action (action); } #else if (widg != NULL) { lab = g_strdup_printf ("%s", gtk_menu_item_get_label (GTK_MENU_ITEM(widg))); } #endif else { lab = g_strdup_printf (_("Copied Data")); } allocate_todo (insert_search, 1); insert_search -> todo[0] = 1; prepare_to_instert (lab, opengl_project, insert_search, FALSE); g_free (lab); } else if (copied_object) { tint ul = ulam_coord (opengl_project -> modelgl); opengl_project -> modelgl -> atom_win -> to_be_inserted[1] = duplicate_atomic_object (copied_object); atomic_object * object = opengl_project -> modelgl -> atom_win -> to_be_inserted[1]; for (i=0; i atoms; i++) { object -> at_list[i].x += opengl_project -> modelgl -> insert_coords.x + object -> dim*ul.a; object -> at_list[i].y += opengl_project -> modelgl -> insert_coords.y + object -> dim*ul.b; object -> at_list[i].z += opengl_project -> modelgl -> insert_coords.z + object -> dim*ul.c; } allocate_todo (insert_search, 1); insert_search -> todo[0] = 1; insert_search -> in_selection ++; } insert_object (3, data); if (! i && opengl_project -> natomes) { if (opengl_project -> modelgl -> anim -> last -> img -> style == SPACEFILL) { j = OGL_STYLES + opengl_project -> modelgl -> anim -> last -> img -> filled_type; set_this_style (opengl_project -> modelgl, WIREFRAME); } else { j = opengl_project -> modelgl -> anim -> last -> img -> style; set_this_style (opengl_project -> modelgl, OGL_STYLES); } set_this_style (opengl_project -> modelgl, j); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_add_object (GSimpleAction * action, GVariant * parameter, gpointer data) \brief to add object callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_add_object (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void to_add_object (GtkWidget * widg, gpointer data) \brief to add object callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_add_object (GtkWidget * widg, gpointer data) #endif { insert_this_object = TRUE; #ifdef GTK4 add_object (action, parameter, data); #else add_object (widg, data); #endif insert_this_object = FALSE; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void replace_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief replace this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void replace_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) { to_replace_this_object (0, action, data); #else /*! \fn G_MODULE_EXPORT void replace_this_atom (GtkWidget * widg, gpointer data) \brief replace this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void replace_this_atom (GtkWidget * widg, gpointer data) { to_replace_this_object (0, widg, data); #endif to_remove_this_object (0, data); insert_object (1, & opengl_project -> modelgl -> colorp[0][0]); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void copy_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief copy this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void copy_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void copy_this_atom (GtkWidget * widg, gpointer data) \brief copy this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void copy_this_atom (GtkWidget * widg, gpointer data) #endif { int i; if (pasted_todo) { g_free (pasted_todo); pasted_todo = NULL; } if (copied_object) { g_free (copied_object); copied_object = NULL; } pasted_todo = allocint (opengl_project -> natomes); i = GPOINTER_TO_INT(data); pasted_todo[i] = 1; copied_object = create_object_from_selection (opengl_project); } /*! \fn void check_hidden_visible (project * this_proj) \brief check how many atom(s) are visible \param this_proj the target project */ void check_hidden_visible (project * this_proj) { int i, j, k, l, m; int ** num; int * numc[4]; int * numv[4]; int * numg[2]; k = 2; num = allocdint (2, this_proj -> nspec); for (i=0; i<2; i++) if (this_proj -> modelgl -> adv_bonding[i]) k ++; for (i=0; i coord -> totcoord[i]); numv[i] = allocint (this_proj -> coord -> totcoord[i]); if (i < 2) { numg[i] = allocint (this_proj -> nspec); for (j=1; j nspec; j++) { numg[i][j] = this_proj -> coord -> ntg[i][j-1] + numg[i][j-1]; } } } for (i=0; i steps; i++) { for (j=0; j natomes; j++) { for (l=0; l<2; l++) if (this_proj -> atoms[i][j].show[l]) num[l][this_proj -> atoms[i][j].sp] ++; for (l=0; l atoms[i][j].coord[l]; if (l < 2 && this_proj -> atoms[i][j].sp > 0) m += numg[l][this_proj -> atoms[i][j].sp]; numc[l][m] ++; if (this_proj -> atoms[i][j].show[0]) numv[l][m] ++; } } } #ifdef GTK4 gboolean update_bar = FALSE; #endif for (i=0; i<2; i++) { for (j=0; j nspec; j++) { if (num[i][j] > 0) { if (num[i][j] == this_proj -> chemistry -> nsps[j]*this_proj -> steps) { #ifdef GTK4 if (! this_proj -> modelgl -> anim -> last -> img -> show_atom[i][j]) update_bar = TRUE; #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_spec[i][j], TRUE); #endif this_proj -> modelgl -> anim -> last -> img -> show_atom[i][j] = TRUE; } } else if (this_proj -> modelgl -> anim -> last -> img -> show_atom[i][j]) { #ifdef GTK4 update_bar = TRUE; #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_spec[i][j], FALSE); #endif this_proj -> modelgl -> anim -> last -> img -> show_atom[i][j] = FALSE; } } } l = 0; for (i=0; i coord -> totcoord[i]; j++) { if (numv[i][j] > 0) { if (numc[i][j] == numv[i][j]) { #ifdef GTK4 if (! this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j]) update_bar = TRUE; #else // GTK3 Menu Action To Check for (l=0; l<2; l++) gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[l][i][j], TRUE); #endif } this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j] = TRUE; } else if (this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j]) { #ifdef GTK4 update_bar = TRUE; #else // GTK3 Menu Action To Check for (l=0; l<2; l++) gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[l][i][j], FALSE); #endif this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j] = FALSE; } } } else { for (j=0; j coord -> totcoord[i]; j++) { if (numv[i][j] > 0) { this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j] = TRUE; } else if (this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j]) { this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j] = FALSE; } } } } for (i=0; i<2; i++) g_free (num[i]); g_free (num); for (i=0; i modelgl); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_hide_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show / hide this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_hide_this_atom (GtkWidget * widg, gpointer data) \brief show / hide this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_this_atom (GtkWidget * widg, gpointer data) #endif { int i; int id = GPOINTER_TO_INT (data); for (i=0; i steps; i++) { opengl_project -> atoms[i][id].show[0] = ! opengl_project -> atoms[i][id].show[0]; } check_hidden_visible (opengl_project); init_default_shaders (opengl_project -> modelgl); } /*! \fn int check_label_numbers (project * this_proj, int types) \brief check how many atom label(s) are visible \param this_proj the target project \param types 0 = atoms, 1 = clones, 2 = all */ int check_label_numbers (project * this_proj, int types) { int h, i, j, k, l; int start, end; int * naid = allocint (this_proj -> nspec); int * nlid = allocint (this_proj -> nspec); start = (types == 0 || types == 2) ? 0 : 1; end = (types == 1 || types == 2) ? 2 : 1; l = 0; #ifdef GTK4 gboolean update_bar = FALSE; #endif for (h=start; h nspec; i++) naid[i] = nlid[i] = 0; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { k = this_proj -> atoms[i][j].sp; naid[k] ++; if (this_proj -> atoms[i][j].label[h]) nlid[k] ++; } } if (h==types || (h == 0 && types == 2)) l = 0; for (i=0; i nspec; i++) { // g_debug ("h= %d, i= %d, nlid[%d]= %d, naid[%d]= %d", h, i+1, i+1, nlid[i], i+1, naid[i]); if (nlid[i] == naid[i]) { #ifdef GTK4 if (! this_proj -> modelgl -> anim -> last -> img -> show_label[h][i]) update_bar = TRUE; #else if (! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[h][i])) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[h][i], 1); } #endif this_proj -> modelgl -> anim -> last -> img -> show_label[h][i] = TRUE; } else { if (nlid[i] == 0) { #ifdef GTK4 if (this_proj -> modelgl -> anim -> last -> img -> show_label[h][i]) update_bar = TRUE; #else if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[h][i])) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[h][i], 0); } #endif } this_proj -> modelgl -> anim -> last -> img -> show_label[h][i] = FALSE; } if (h==types || (h == 0 && types == 2)) l += nlid[i]; } } g_free (naid); g_free (nlid); check_all_trees (this_proj); #ifdef GTK4 if (update_bar) update_menu_bar (this_proj -> modelgl); #endif return l; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void label_unlabel_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief label / unlabel this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void label_unlabel_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void label_unlabel_this_atom (GtkWidget * widg, gpointer data) \brief label / unlabel this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void label_unlabel_this_atom (GtkWidget * widg, gpointer data) #endif { int i, j, k, l, m; int id = GPOINTER_TO_INT (data); i = opengl_project -> modelgl -> anim -> last -> img -> step; j = opengl_project -> atoms[i][id].label[0]; for (k=0; k steps; k++) { opengl_project -> atoms[k][id].label[0] = ! j; opengl_project -> atoms[k][id].label[1] = ! j; if (opengl_project -> modelgl -> selection_mode == 1) { for (l=0; l atoms[k][id].numv; l++) { m = opengl_project -> atoms[k][id].vois[l]; opengl_project -> atoms[k][m].label[0] = ! j; opengl_project -> atoms[k][m].label[1] = ! j; } } } opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; if (check_label) { opengl_project -> modelgl -> labelled = check_label_numbers (opengl_project, 2); update (opengl_project -> modelgl); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_unselect_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief select / unselect this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void select_unselect_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_unselect_this_atom (GtkWidget * widg, gpointer data) \brief select / unselect this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_unselect_this_atom (GtkWidget * widg, gpointer data) #endif { int h, i, j, k, l, m; int id = GPOINTER_TO_INT (data); h = get_to_be_selected (opengl_project -> modelgl); j = opengl_project -> modelgl -> anim -> last -> img -> step; save_all_selections (opengl_project -> modelgl, h); k = opengl_project -> atoms[j][id].pick[h]; for (i=0; i steps; i++) { if (i == j) { if (! opengl_project -> modelgl -> selection_mode || opengl_project -> atoms[i][id].pick[h] != selected_status) { process_selected_atom (opengl_project, opengl_project -> modelgl, id, 0, 0, h); } if (opengl_project -> modelgl -> selection_mode == 1) { for (l=0; l atoms[j][id].numv; l++) { m = opengl_project -> atoms[i][id].vois[l]; if (opengl_project -> atoms[i][m].pick[h] != opengl_project -> atoms[i][id].pick[h]) { process_selected_atom (opengl_project, opengl_project -> modelgl, m, 0, 0, h); } } } } else { if (! opengl_project -> modelgl -> selection_mode || opengl_project -> atoms[i][id].pick[h] != selected_status) { opengl_project -> atoms[i][id].pick[h] = ! k; } if (opengl_project -> modelgl -> selection_mode == 1) { for (l=0; l atoms[j][id].numv; l++) { m = opengl_project -> atoms[j][id].vois[l]; opengl_project -> atoms[i][m].pick[h] = opengl_project -> atoms[i][id].pick[h]; } } } } update_all_selections (opengl_project -> modelgl, h); int shaders[1] = {SELEC}; re_create_md_shaders (1, shaders, opengl_project); opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; if (opengl_project -> modelgl -> mode == EDITION) { if (opengl_project -> modelgl -> rebuild[0][1]) opengl_project -> modelgl -> rebuild[0][0] = TRUE; if (opengl_project -> modelgl -> rebuild[1][1]) opengl_project -> modelgl -> rebuild[1][0] = TRUE; } update (opengl_project -> modelgl); } gboolean wait_for_style = FALSE; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void style_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change OpenGL rendering style for this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void style_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void style_this_atom (GtkWidget * widg, gpointer data) \brief change OpenGL rendering style for this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void style_this_atom (GtkWidget * widg, gpointer data) #endif { int i, j; int id = GPOINTER_TO_INT (data); #ifdef GTK4 j = get_style ((gchar *)g_action_get_name (G_ACTION(action))); #else j = get_style ((char *)gtk_menu_item_get_label (GTK_MENU_ITEM(widg))); #endif for (i=0; i steps; i++) { opengl_project -> atoms[i][id].style = j; } if (! wait_for_style) { init_default_shaders (opengl_project -> modelgl); update (opengl_project -> modelgl); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void remove_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief remove selected atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void remove_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void remove_the_atoms (GtkWidget * widg, gpointer data) \brief remove selected atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void remove_the_atoms (GtkWidget * widg, gpointer data) #endif { to_remove_this_object (2, data); remove_object (); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void replace_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief replace selected atom(s) callback GTK3 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void replace_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) { to_replace_this_object (2, action, data); #else /*! \fn G_MODULE_EXPORT void replace_the_atoms (GtkWidget * widg, gpointer data) \brief replace selected atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void replace_the_atoms (GtkWidget * widg, gpointer data) { to_replace_this_object (2, widg, data); #endif to_remove_this_object (2, data); insert_object (1, & opengl_project -> modelgl -> colorp[0][0]); remove_search = free_this_search_data (remove_search); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void copy_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief copy selected atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void copy_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void copy_the_atoms (GtkWidget * widg, gpointer data) \brief copy selected atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void copy_the_atoms (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint *)data; int h, i, j; if (copied_object) { g_free (copied_object); copied_object = NULL; } pasted_todo = allocint (opengl_project -> natomes); h = 0; i = opengl_project -> modelgl -> anim -> last -> img -> step; for (j=0; j natomes; j++) { if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (! sel -> a || opengl_project -> atoms[i][j].label[0] == is_labelled) { if (opengl_project -> atoms[i][j].pick[0] == is_selected || is_selected == -1) { pasted_todo[j] = 1; h = 1; } } } } if (h) { copied_object = create_object_from_selection (opengl_project); } else { g_free (pasted_todo); pasted_todo = NULL; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_hide_others (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show all hidden / hide all visible atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_others (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_hide_others (GtkWidget * widg, gpointer data) \brief show all hidden / hide all visible atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_others (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int i, j, k; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { for (k=0; k<2; k++) { if (opengl_project -> atoms[i][j].show[k] == sel -> c) { opengl_project -> atoms[i][j].show[k] = ! sel -> c; } } } } check_hidden_visible (opengl_project); init_default_shaders (opengl_project -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_hide_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show / hide a type of atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_hide_the_atoms (GtkWidget * widg, gpointer data) \brief show / hide a type of atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_the_atoms (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int h, i, j; h = get_to_be_selected (opengl_project -> modelgl); for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (sel -> a == 2 || (opengl_project -> atoms[i][j].pick[h] == is_selected || is_selected == -1)) { if (sel -> a || opengl_project -> atoms[i][j].label[0] == is_labelled) { opengl_project -> atoms[i][j].show[0] = sel -> c; opengl_project -> atoms[i][j].show[1] = sel -> c; } } } } } check_hidden_visible (opengl_project); init_default_shaders (opengl_project -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void label_unlabel_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief label / unlabel a type of atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void label_unlabel_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void label_unlabel_atoms (GtkWidget * widg, gpointer data) \brief label / unlabel a type of atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void label_unlabel_atoms (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int h, i, j; h = get_to_be_selected (opengl_project -> modelgl); for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (opengl_project -> atoms[i][j].pick[h] == is_selected || is_selected == -1) { opengl_project -> atoms[i][j].label[0] = sel -> c; opengl_project -> atoms[i][j].label[1] = sel -> c; } } } } opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; if (check_label) { opengl_project -> modelgl -> labelled = check_label_numbers (opengl_project, 2); update (opengl_project -> modelgl); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_unselect_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief select / unselect a type of atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void select_unselect_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_unselect_atoms (GtkWidget * widg, gpointer data) \brief select / unselect a type of atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_unselect_atoms (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint *)data; int h, i, j; h = get_to_be_selected (opengl_project -> modelgl); save_all_selections (opengl_project -> modelgl, h); for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (! sel -> b || opengl_project -> atoms[i][j].label[0] == is_labelled) { if (i == opengl_project -> modelgl -> anim -> last -> img -> step) { if (opengl_project -> atoms[i][j].pick[h] != sel -> c) { process_selected_atom (opengl_project, opengl_project -> modelgl, j, 0, 0, h); } } else { if (opengl_project -> atoms[i][j].pick[h] != sel -> c) { opengl_project -> atoms[i][j].pick[h] = sel -> c; } } } } } } update_all_selections (opengl_project -> modelgl, h); int shaders[1] = {SELEC}; re_create_md_shaders (1, shaders, opengl_project); opengl_project -> modelgl -> create_shaders[MEASU] = TRUE; opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; if (opengl_project -> modelgl -> mode == EDITION) { if (opengl_project -> modelgl -> rebuild[0][1]) opengl_project -> modelgl -> rebuild[0][0] = TRUE; if (opengl_project -> modelgl -> rebuild[1][1]) opengl_project -> modelgl -> rebuild[1][0] = TRUE; } update (opengl_project -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void style_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change the OpenGL rendering style of a type of atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void style_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void style_the_atoms (GtkWidget * widg, gpointer data) \brief change the OpenGL rendering style of a type of atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void style_the_atoms (GtkWidget * widg, gpointer data) #endif { int h, i, j, k; tint * sel = (tint *)data; h = get_to_be_selected (opengl_project -> modelgl); #ifdef GTK4 k = get_style ((gchar *)g_action_get_name(G_ACTION(action))); #else k = get_style ((char *)gtk_menu_item_get_label (GTK_MENU_ITEM(widg))); #endif for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (sel -> a == 2 || (opengl_project -> atoms[i][j].pick[h] == is_selected || is_selected == -1)) { if (sel -> a || opengl_project -> atoms[i][j].label[0] == is_labelled) { opengl_project -> atoms[i][j].style = k; } } } } } init_default_shaders (opengl_project -> modelgl); update (opengl_project -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void remove_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief remove a type of coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void remove_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void remove_the_coord (GtkWidget * widg, gpointer data) \brief remove a type of coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void remove_the_coord (GtkWidget * widg, gpointer data) #endif { to_remove_this_object (1, data); remove_object (); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void replace_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief replace a coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void replace_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) { to_replace_this_object (1, action, data); #else /*! \fn G_MODULE_EXPORT void replace_the_coord (GtkWidget * widg, gpointer data) \brief replace a coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void replace_the_coord (GtkWidget * widg, gpointer data) { to_replace_this_object (1, widg, data); #endif to_remove_this_object (1, data); insert_object (1, data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void copy_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief copy a coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void copy_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void copy_the_coord (GtkWidget * widg, gpointer data) \brief copy a coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void copy_the_coord (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint *)data; int h, i, j; if (copied_object) { g_free (copied_object); copied_object = NULL; } pasted_todo = allocint (opengl_project -> natomes); h = 0; i = opengl_project -> modelgl -> anim -> last -> img -> step; for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { pasted_todo[j] = 1; h = 1; } } else { if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { pasted_todo[j] = 1; h = 1; } } } if (h) { copied_object = create_object_from_selection (opengl_project); } else { g_free (pasted_todo); pasted_todo = NULL; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_hide_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show / hide a type of coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_hide_the_coord (GtkWidget * widg, gpointer data) \brief show / hide a type of coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_the_coord (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int i, j; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { opengl_project -> atoms[i][j].show[0] = sel -> c; opengl_project -> atoms[i][j].show[1] = sel -> c; } } else { if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { opengl_project -> atoms[i][j].show[0] = sel -> c; opengl_project -> atoms[i][j].show[1] = sel -> c; } } } } check_hidden_visible (opengl_project); init_default_shaders (opengl_project -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void label_unlabel_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief label / unlabel a type of coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void label_unlabel_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void label_unlabel_coord (GtkWidget * widg, gpointer data) \brief label / unlabel a type of coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void label_unlabel_coord (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int i, j, k, l, m; if (sel -> a > 3) k = opengl_project -> coord -> geolist[sel -> a][0][sel -> b] - 1; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { opengl_project -> atoms[i][j].label[0] = sel -> c; opengl_project -> atoms[i][j].label[1] = sel -> c; if (opengl_project -> modelgl -> selection_mode == 1) { for (l=0; l atoms[i][j].numv; l++) { m = opengl_project -> atoms[i][j].vois[l]; opengl_project -> atoms[i][m].label[0] = sel -> c; opengl_project -> atoms[i][m].label[1] = sel -> c; } } } } else if (sel -> a < 4) { if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { opengl_project -> atoms[i][j].label[0] = sel -> c; opengl_project -> atoms[i][j].label[1] = sel -> c; } } else { if (opengl_project -> atoms[i][j].rings[sel -> a-4][k]) { if (opengl_project -> atoms[i][j].rings[sel -> a-4][k][0]) { opengl_project -> atoms[i][j].label[0] = sel -> c; opengl_project -> atoms[i][j].label[1] = sel -> c; } } } } } opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; if (check_label) { opengl_project -> modelgl -> labelled = check_label_numbers (opengl_project, 2); update (opengl_project -> modelgl); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_unselect_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief select / unselect a type of coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void select_unselect_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_unselect_coord (GtkWidget * widg, gpointer data) \brief select / unselect a type of coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_unselect_coord (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int h, i, j, k; h = get_to_be_selected (opengl_project -> modelgl); save_all_selections (opengl_project -> modelgl, h); if (sel -> a > 3) k = opengl_project -> coord -> geolist[sel -> a][0][sel -> b] - 1; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { if (i == opengl_project -> modelgl -> anim -> last -> img -> step) { if (opengl_project -> atoms[i][j].pick[h] != sel -> c) process_selected_atom (opengl_project, opengl_project -> modelgl, j, 0, 0, h); } else { opengl_project -> atoms[i][j].pick[h] = sel -> c; } } } else if (sel -> a < 4) { if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { if (i == opengl_project -> modelgl -> anim -> last -> img -> step) { if (opengl_project -> atoms[i][j].pick[h] != sel -> c) process_selected_atom (opengl_project, opengl_project -> modelgl, j, 0, 0, h); } else { opengl_project -> atoms[i][j].pick[h] = sel -> c; } } } else { if (opengl_project -> atoms[i][j].rings[sel -> a-4][k]) { if (opengl_project -> atoms[i][j].rings[sel -> a-4][k][0]) { if (i == opengl_project -> modelgl -> anim -> last -> img -> step) { if (opengl_project -> atoms[i][j].pick[h] != sel -> c) process_selected_atom (opengl_project, opengl_project -> modelgl, j, 0, 0, h); } else { opengl_project -> atoms[i][j].pick[h] = sel -> c; } } } } } } update_all_selections (opengl_project -> modelgl, h); int shader[1] = {SELEC}; re_create_md_shaders (1, shader, opengl_project); opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; opengl_project -> modelgl -> create_shaders[MEASU] = TRUE; if (opengl_project -> modelgl -> mode == EDITION) { if (opengl_project -> modelgl -> rebuild[0][1]) opengl_project -> modelgl -> rebuild[0][0] = TRUE; if (opengl_project -> modelgl -> rebuild[1][1]) opengl_project -> modelgl -> rebuild[1][0] = TRUE; } update (opengl_project -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void style_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change OpenGL rendering style for a type of coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void style_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void style_the_coord (GtkWidget * widg, gpointer data) \brief change OpenGL rendering style for a type of coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void style_the_coord (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int i, j, k, l; if (sel -> a > 3) k = opengl_project -> coord -> geolist[sel -> a][0][sel -> b] - 1; #ifdef GTK4 l = get_style ((gchar *)g_action_get_name(G_ACTION(action))); #else l = get_style ((char *)gtk_menu_item_get_label (GTK_MENU_ITEM(widg))); #endif for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { opengl_project -> atoms[i][j].style = l; } } else if (sel -> a < 4) { if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { opengl_project -> atoms[i][j].style = l; } } else { if (opengl_project -> atoms[i][j].rings[sel -> a-4][k]) { if (opengl_project -> atoms[i][j].rings[sel -> a-4][k][0]) { opengl_project -> atoms[i][j].style = l; } } } } } init_default_shaders (opengl_project -> modelgl); update (opengl_project -> modelgl); } /*! \fn void create_new_project_using_data (atom_selection * selection) \brief create new project using an atom selection \param selection the atom selection to use */ void create_new_project_using_data (atom_selection * selection) { int i, j, k, l; int nspec = 0; int * pos_sp, * specs; atom_in_selection * tmp; pos_sp = allocint (opengl_project -> nspec); specs = allocint (opengl_project -> nspec); for (i=0; i nspec; i++) { specs[i] = 0; pos_sp[i] = -1; } tmp = selection -> first; j = -1; for (i=0; i selected; i++) { specs[tmp -> sp] ++; if (pos_sp[tmp -> sp] < 0) { j ++; pos_sp[tmp -> sp] = j; } if (tmp -> next != NULL) tmp = tmp -> next; } for (i=0; i nspec; i++) if (specs[i] > 0) nspec ++; init_project (TRUE); active_project -> nspec = nspec; active_project -> natomes = selection -> selected; active_project -> steps = 1; alloc_proj_data (active_project, 1); active_chem = active_project -> chemistry; if (active_project -> natomes == opengl_project -> natomes) { active_cell -> ltype = opengl_project -> cell.ltype; active_cell -> pbc = opengl_project -> cell.pbc; active_cell -> has_a_box = opengl_project -> cell.has_a_box; k = (active_cell -> npt) ? opengl_project -> modelgl -> anim -> last -> img -> step : 0; for (i=0; i<3; i++) { for (j=0; j<3; j++) { if (i < 2) active_box -> param[i][j] = opengl_project -> cell.box[k].param[i][j]; active_box -> vect[i][j] = opengl_project -> cell.box[k].vect[i][j]; } } } for (i=0; i nspec; i++) { if (pos_sp[i] > -1) { k = pos_sp[i]; active_chem -> label[k] = g_strdup_printf ("%s", opengl_project -> chemistry -> label[i]); active_chem -> element[k] = g_strdup_printf ("%s", opengl_project -> chemistry -> element[i]); active_chem -> nsps[k] = specs[i]; for (j=0; j chem_prop[j][k] = opengl_project -> chemistry -> chem_prop[j][i]; for (j=0; j nspec; j++) { if (pos_sp[j] > -1) { l = pos_sp[j]; active_chem -> cutoffs[k][l] = opengl_project -> chemistry -> cutoffs[i][j]; } } } } active_chem -> grtotcutoff = opengl_project -> chemistry -> grtotcutoff; tmp = selection -> first; for (i=0; i steps; i++) { tmp = selection -> first; for (j=0; j natomes; j++) { k = tmp -> id; active_project -> atoms[i][j].id = j; active_project -> atoms[i][j].sp = pos_sp[tmp -> sp]; active_project -> atoms[i][j].x = opengl_project -> atoms[i][k].x; active_project -> atoms[i][j].y = opengl_project -> atoms[i][k].y; active_project -> atoms[i][j].z = opengl_project -> atoms[i][k].z; active_project -> atoms[i][j].show[0] = TRUE; active_project -> atoms[i][j].show[1] = TRUE; active_project -> atoms[i][j].label[0] = FALSE; active_project -> atoms[i][j].label[1] = FALSE; active_project -> atoms[i][j].pick[0] = FALSE; active_project -> atoms[i][j].cloned = FALSE; // Next line for style, to initialize style use: NONE active_project -> atoms[i][j].style = opengl_project -> atoms[i][k].style; if (tmp -> next != NULL) tmp = tmp -> next; } } update_analysis_availability (active_project); active_project_changed (activep); add_project_to_workspace (); i = opengl_project -> modelgl -> anim -> last -> img -> style; apply_project (FALSE); active_image -> style = i; update_all_menus (active_glwin, active_project -> natomes); g_free (pos_sp); g_free (specs); // Duplicate lightning and material duplicate_material_and_lightning (active_image, opengl_project -> modelgl -> anim -> last -> img); update (active_glwin); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void edit_in_new_project (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create new project using selection callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void edit_in_new_project (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void edit_in_new_project (GtkWidget * widg, gpointer data) \brief create new project using selection callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void edit_in_new_project (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int h, i, j; atom_selection * selected; atom_in_selection * tmp_a; selected = g_malloc0(sizeof*selected); h = get_to_be_selected (opengl_project -> modelgl); if (! sel -> b) { if (sel -> c) { selected = opengl_project -> modelgl -> anim -> last -> img -> selected[h]; } else { selected -> selected = opengl_project -> natomes - opengl_project -> modelgl -> anim -> last -> img -> selected[h] -> selected; j = opengl_project -> modelgl -> anim -> last -> img -> step; for (i=0; i natomes; i++) { if (! opengl_project -> atoms[j][i].pick[h]) { if (selected -> first) { tmp_a -> next = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = tmp_a -> next; } else { selected -> first = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = selected -> first; } } } } } else { selected -> selected = (is_labelled) ? opengl_project -> modelgl -> labelled : opengl_project -> natomes - opengl_project -> modelgl -> labelled; j = opengl_project -> modelgl -> anim -> last -> img -> step; for (i=0; i natomes; i++) { if (opengl_project -> atoms[j][i].label[0] == is_labelled) { if (selected -> first) { tmp_a -> next = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = tmp_a -> next; } else { selected -> first = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = selected -> first; } } } } if (selected -> selected > 0) create_new_project_using_data (selected); selected = NULL; g_free (selected); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void edit_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create new project using coordination type and id callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void edit_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void edit_coord (GtkWidget * widg, gpointer data) \brief create new project using coordination type and id callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void edit_coord (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int i, j; atom_selection * selected; atom_in_selection * tmp_a; gboolean save_it; selected = g_malloc0(sizeof*selected); j = opengl_project -> modelgl -> anim -> last -> img -> step; for (i=0; i natomes; i++) { save_it = FALSE; if (sel -> a < 2) { if (opengl_project -> atoms[j][i].sp == selected_aspec && opengl_project -> atoms[j][i].coord[sel -> a] == sel -> b) { save_it = TRUE; } } else { if (opengl_project -> atoms[j][i].coord[sel -> a] == sel -> b) { save_it = TRUE; } } if (save_it) { if (selected -> first) { tmp_a -> next = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = tmp_a -> next; } else { selected -> first = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = selected -> first; } selected -> selected ++; } } if (selected -> selected > 0) create_new_project_using_data (selected); g_free (selected); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void edit_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create new project using atomic species callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void edit_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void edit_atoms (GtkWidget * widg, gpointer data) \brief create new project using atomic species callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void edit_atoms (GtkWidget * widg, gpointer data) #endif { int i, j; atom_selection * selected; atom_in_selection * tmp_a; selected = g_malloc0(sizeof*selected); j = opengl_project -> modelgl -> anim -> last -> img -> step; for (i=0; i natomes; i++) { if (opengl_project -> atoms[j][i].sp == selected_aspec || selected_aspec == -1) { if (selected -> first) { tmp_a -> next = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = tmp_a -> next; } else { selected -> first = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = selected -> first; } selected -> selected ++; } } if (selected -> selected > 0) create_new_project_using_data (selected); g_free (selected); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_action_for_all (GSimpleAction * action, GVariant * parameter, gpointer data) \brief select action for all object(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void select_action_for_all (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_action_for_all (GtkWidget * widg, gpointer data) \brief select action for all object(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_action_for_all (GtkWidget * widg, gpointer data) #endif { int i = GPOINTER_TO_INT(data); selected_aspec = -1; #ifdef DEBUG g_debug ("Action for All= %d", i); #endif // DEBUG #ifdef GTK4 switch (i) { case 0: select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][1]); break; case 1: select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); break; case 2: label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][1]); break; case 3: label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); break; case 4: show_hide_the_atoms (NULL, NULL, & atoid[0][0]); break; case 5: show_hide_the_atoms (NULL, NULL, & atoid[1][1]); break; case 6: style_the_atoms (action, NULL, & atoid[0][1]); break; // No case 7 = color case 8: edit_in_new_project (NULL, NULL, & opengl_project -> modelgl -> colorp[0][is_selected]); break; case 9: remove_the_atoms (action, NULL, & cut_sel); break; case 10: replace_the_atoms (action, NULL, & cut_sel); break; case 11: copy_the_atoms (action, NULL, & cut_sel); break; case CONTEXTACT: select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[1][1]); break; case CONTEXTACT+1: select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[1][0]); break; case CONTEXTACT+2: is_selected = -1; label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][1]); // label_unlabel_atoms (NULL, NULL, & atoid[0][0]); break; case CONTEXTACT+3: is_selected = -1; label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); // label_unlabel_atoms (NULL, NULL, & atoid[1][0]); break; case CONTEXTACT+4: is_selected = -1; show_hide_the_atoms (NULL, NULL, & atoid[0][0]); break; case CONTEXTACT+5: is_selected = -1; show_hide_the_atoms (NULL, NULL, & atoid[1][0]); break; case CONTEXTACT+6: is_selected = -1; style_the_atoms (action, NULL, & atoid[0][0]); break; case CONTEXTACT+8: is_selected = -1; edit_in_new_project (NULL, NULL, & opengl_project -> modelgl -> colorp[1][1]); break; case CONTEXTACT+9: is_selected = -1; remove_the_atoms (action, NULL, & cut_sel); break; case CONTEXTACT+10: is_selected = -1; replace_the_atoms (action, NULL, & cut_sel); break; case CONTEXTACT+11: is_selected = -1; copy_the_atoms (action, NULL, & cut_sel); break; case 2*CONTEXTACT+4: is_selected = -1; show_hide_the_atoms (NULL, NULL, & atoid[0][1]); break; case 2*CONTEXTACT+5: is_selected = -1; show_hide_the_atoms (NULL, NULL, & atoid[1][1]); break; } #else switch (i) { case 0: select_unselect_atoms (widg, & opengl_project -> modelgl -> colorp[0][1]); break; case 1: select_unselect_atoms (widg, & opengl_project -> modelgl -> colorp[0][0]); break; case 2: label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][1]); // label_unlabel_atoms (NULL, & atoid[0][0]); break; case 3: label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); // label_unlabel_atoms (NULL, & atoid[1][1]); break; case 4: show_hide_the_atoms (NULL, & atoid[0][0]); break; case 5: show_hide_the_atoms (NULL, & atoid[1][1]); break; case 6: style_the_atoms (widg, & atoid[0][1]); break; // No case 7 = color case 8: edit_in_new_project (NULL, & opengl_project -> modelgl -> colorp[0][is_selected]); break; case 9: remove_the_atoms (widg, & cut_sel); break; case 10: replace_the_atoms (widg, & cut_sel); break; case 11: copy_the_atoms (widg, & cut_sel); break; case CONTEXTACT: select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[1][1]); break; case CONTEXTACT+1: select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[1][0]); break; case CONTEXTACT+2: is_selected = -1; // label_unlabel_atoms (NULL, & atoid[0][0]); label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][1]); break; case CONTEXTACT+3: is_selected = -1; // label_unlabel_atoms (NULL, & atoid[1][0]); label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); break; case CONTEXTACT+4: is_selected = -1; show_hide_the_atoms (NULL, & atoid[0][0]); break; case CONTEXTACT+5: is_selected = -1; show_hide_the_atoms (NULL, & atoid[1][0]); break; case CONTEXTACT+6: is_selected = -1; style_the_atoms (widg, & atoid[0][0]); break; case CONTEXTACT+8: is_selected = -1; edit_in_new_project (NULL, & opengl_project -> modelgl -> colorp[1][1]); break; case CONTEXTACT+9: is_selected = -1; remove_the_atoms (widg, & cut_sel); break; case CONTEXTACT+10: is_selected = -1; replace_the_atoms (widg, & cut_sel); break; case CONTEXTACT+11: is_selected = -1; copy_the_atoms (widg, & cut_sel); break; case 2*CONTEXTACT+4: is_selected = -1; show_hide_the_atoms (NULL, & atoid[0][1]); break; case 2*CONTEXTACT+5: is_selected = -1; show_hide_the_atoms (NULL, & atoid[1][1]); break; } #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_action_for_this_bond (GSimpleAction * action, GVariant * parameter, gpointer data) \brief selection action for this bond callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void select_action_for_this_bond (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_action_for_this_bond (GtkWidget * widg, gpointer data) \brief selection action for this bond callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_action_for_this_bond (GtkWidget * widg, gpointer data) #endif { int i, s; i = GPOINTER_TO_INT(data); #ifdef GTK4 switch (i) { case 0: select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(selected_atom)); select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(selected_btom)); break; case 1: select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(selected_atom)); select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(selected_btom)); break; case 2: label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(selected_atom)); label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(selected_btom)); break; case 3: label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(selected_atom)); label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(selected_btom)); break; case 4: show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(selected_atom)); show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(selected_btom)); break; case 5: show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(selected_atom)); show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(selected_btom)); break; case 6: style_this_atom (action, NULL, GINT_TO_POINTER(selected_atom)); style_this_atom (action, NULL, GINT_TO_POINTER(selected_btom)); break; default: // 8 = create project // 9 = remove // 10 = replace // 11 = copy bond_selection = g_malloc0(sizeof*bond_selection); s = opengl_project -> modelgl -> anim -> last -> img -> step; bond_selection -> first = new_atom_in_selection (selected_atom, opengl_project -> atoms[s][selected_atom].sp); bond_selection -> selected ++; bond_selection -> first -> next = new_atom_in_selection (selected_btom, opengl_project -> atoms[s][selected_btom].sp); bond_selection -> selected ++; switch (i) { case 8: create_new_project_using_data (bond_selection); break; case 9: to_remove_this_object (3, NULL); remove_object (); break; case 10: to_replace_this_object (3, action, data); to_remove_this_object (3, data); insert_object (1, & opengl_project -> modelgl -> colorp[0][0]); remove_search = free_this_search_data (remove_search); break; case 11: copy_bond_selection (); break; } break; g_free (bond_selection); bond_selection = NULL; } #else switch (i) { case 0: select_unselect_this_atom (NULL, GINT_TO_POINTER(selected_atom)); select_unselect_this_atom (NULL, GINT_TO_POINTER(selected_btom)); break; case 1: select_unselect_this_atom (NULL, GINT_TO_POINTER(selected_atom)); select_unselect_this_atom (NULL, GINT_TO_POINTER(selected_btom)); break; case 2: label_unlabel_this_atom (NULL, GINT_TO_POINTER(selected_atom)); label_unlabel_this_atom (NULL, GINT_TO_POINTER(selected_btom)); break; case 3: label_unlabel_this_atom (NULL, GINT_TO_POINTER(selected_atom)); label_unlabel_this_atom (NULL, GINT_TO_POINTER(selected_btom)); break; case 4: show_hide_this_atom (NULL, GINT_TO_POINTER(selected_atom)); show_hide_this_atom (NULL, GINT_TO_POINTER(selected_btom)); break; case 5: show_hide_this_atom (NULL, GINT_TO_POINTER(selected_atom)); show_hide_this_atom (NULL, GINT_TO_POINTER(selected_btom)); break; case 6: style_this_atom (widg, GINT_TO_POINTER(selected_atom)); style_this_atom (widg, GINT_TO_POINTER(selected_btom)); break; default: // 8 = create project // 9 = remove // 10 = replace // 11 = copy bond_selection = g_malloc0(sizeof*bond_selection); s = opengl_project -> modelgl -> anim -> last -> img -> step; bond_selection -> first = new_atom_in_selection (selected_atom, opengl_project -> atoms[s][selected_atom].sp); bond_selection -> selected ++; bond_selection -> first -> next = new_atom_in_selection (selected_btom, opengl_project -> atoms[s][selected_btom].sp); bond_selection -> selected ++; switch (i) { case 8: create_new_project_using_data (bond_selection); break; case 9: to_remove_this_object (3, NULL); remove_object (); break; case 10: to_replace_this_object (3, widg, data); to_remove_this_object (3, data); insert_object (1, & opengl_project -> modelgl -> colorp[0][0]); remove_search = free_this_search_data (remove_search); break; case 11: copy_bond_selection (); break; } break; g_free (bond_selection); bond_selection = NULL; } #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_action_for_all_bonds (GSimpleAction * action, GVariant * parameter, gpointer data) \brief select action for all bonds based on menu item id callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void select_action_for_all_bonds (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_action_for_all_bonds (GtkWidget * widg, gpointer data) \brief select action for all bonds based on menu item id callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_action_for_all_bonds (GtkWidget * widg, gpointer data) #endif { int g, h, i, j, k, l, m, n, o; int mid = GPOINTER_TO_INT(data); int s = opengl_project -> modelgl -> anim -> last -> img -> step; g = get_to_be_selected (opengl_project -> modelgl); gboolean doit; gboolean eqtc, eqpc; bond_selection = NULL; atom_in_selection * tmp_a; if (mid == 6 || mid == 6+CONTEXTACT || mid == 6+2*CONTEXTACT) wait_for_style = TRUE; for (h=0; h<2; h++) { for (i=0; i modelgl -> bonds[s][h]; i++) { doit = FALSE; k = opengl_project -> modelgl -> bondid[s][h][i][0]; j = opengl_project -> modelgl -> bondid[s][h][i][1]; l = opengl_project -> atoms[s][k].coord[0]; m = opengl_project -> atoms[s][j].coord[0]; n = opengl_project -> atoms[s][k].coord[1]; o = opengl_project -> atoms[s][j].coord[1]; if ((opengl_project -> atoms[s][j].sp == selected_aspec && opengl_project -> atoms[s][k].sp == selected_bspec) || (opengl_project -> atoms[s][k].sp == selected_aspec && opengl_project -> atoms[s][j].sp == selected_bspec)) doit = TRUE; if (doit) { if (opengl_project -> atoms[s][j].sp == selected_aspec && opengl_project -> atoms[s][k].sp == selected_bspec) { eqtc = ((l == atoid[0][0].b && m == btoid.a) || (l == btoid.a && m == atoid[0][0].b)) ? TRUE : FALSE; eqpc = ((n == atoid[0][1].b && o == btoid.b) || (n == btoid.b && o == atoid[0][1].b)) ? TRUE : FALSE; } else { eqtc = ((l == atoid[0][0].b && m == btoid.a) || (l == btoid.a && m == atoid[0][0].b)) ? TRUE : FALSE; eqpc = ((n == atoid[0][1].b && o == btoid.b) || (n == btoid.b && o == atoid[0][1].b)) ? TRUE : FALSE; } #ifdef GTK4 if (mid == 0 || (mid == CONTEXTACT && eqtc) || (mid == 2*CONTEXTACT && eqpc)) { if (! opengl_project -> atoms[s][j].pick[g]) select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(j)); if (! opengl_project -> atoms[s][k].pick[g]) select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(k)); } else if (mid == 1 || (mid == CONTEXTACT+1 && eqtc) || (mid == 2*CONTEXTACT+1 && eqpc)) { if (opengl_project -> atoms[s][j].pick[g]) select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(j)); if (opengl_project -> atoms[s][k].pick[g]) select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(k)); } else if (mid == 2 || (mid == CONTEXTACT+2 && eqtc) || (mid == 2*CONTEXTACT+2 && eqpc)) { if (! opengl_project -> atoms[s][j].label[0]) label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(j)); if (! opengl_project -> atoms[s][k].label[0]) label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(k)); } else if (mid == 3 || (mid == CONTEXTACT+3 && eqtc) || (mid == 2*CONTEXTACT+3 && eqpc)) { if (opengl_project -> atoms[s][j].label[0]) label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(j)); if (opengl_project -> atoms[s][k].label[0]) label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(k)); } else if (mid == 4 || (mid == CONTEXTACT+4 && eqtc) || (mid == 2*CONTEXTACT+4 && eqpc)) { if (! opengl_project -> atoms[s][j].show[0]) show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(j)); if (! opengl_project -> atoms[s][k].show[0]) show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(k)); } else if (mid == 5 || (mid == CONTEXTACT+5 && eqtc) || (mid == 2*CONTEXTACT+5 && eqpc)) { if (opengl_project -> atoms[s][j].show[0]) show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(j)); if (opengl_project -> atoms[s][k].show[0]) show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(k)); } else if (mid == 6 || (mid == CONTEXTACT+6 && eqtc) || (mid == 2*CONTEXTACT+6 && eqpc)) { style_this_atom (action, NULL, GINT_TO_POINTER(j)); style_this_atom (action, NULL, GINT_TO_POINTER(k)); } #else if (mid == 0 || (mid == CONTEXTACT && eqtc) || (mid == 2*CONTEXTACT && eqpc)) { if (! opengl_project -> atoms[s][j].pick[g]) select_unselect_this_atom (NULL, GINT_TO_POINTER(j)); if (! opengl_project -> atoms[s][k].pick[g]) select_unselect_this_atom (NULL, GINT_TO_POINTER(k)); } else if (mid == 1 || (mid == CONTEXTACT+1 && eqtc) || (mid == 2*CONTEXTACT+1 && eqpc)) { if (opengl_project -> atoms[s][j].pick[g]) select_unselect_this_atom (NULL, GINT_TO_POINTER(j)); if (opengl_project -> atoms[s][k].pick[g]) select_unselect_this_atom (NULL, GINT_TO_POINTER(k)); } else if (mid == 2 || (mid == CONTEXTACT+2 && eqtc) || (mid == 2*CONTEXTACT+2 && eqpc)) { if (! opengl_project -> atoms[s][j].label[0]) label_unlabel_this_atom (NULL, GINT_TO_POINTER(j)); if (! opengl_project -> atoms[s][k].label[0]) label_unlabel_this_atom (NULL, GINT_TO_POINTER(k)); } else if (mid == 3 || (mid == CONTEXTACT+3 && eqtc) || (mid == 2*CONTEXTACT+3 && eqpc)) { if (opengl_project -> atoms[s][j].label[0]) label_unlabel_this_atom (NULL, GINT_TO_POINTER(j)); if (opengl_project -> atoms[s][k].label[0]) label_unlabel_this_atom (NULL, GINT_TO_POINTER(k)); } else if (mid == 4 || (mid == CONTEXTACT+4 && eqtc) || (mid == 2*CONTEXTACT+4 && eqpc)) { if (! opengl_project -> atoms[s][j].show[0]) show_hide_this_atom (NULL, GINT_TO_POINTER(j)); if (! opengl_project -> atoms[s][k].show[0]) show_hide_this_atom (NULL, GINT_TO_POINTER(k)); } else if (mid == 5 || (mid == CONTEXTACT+5 && eqtc) || (mid == 2*CONTEXTACT+5 && eqpc)) { if (opengl_project -> atoms[s][j].show[0]) show_hide_this_atom (NULL, GINT_TO_POINTER(j)); if (opengl_project -> atoms[s][k].show[0]) show_hide_this_atom (NULL, GINT_TO_POINTER(k)); } else if (mid == 6 || (mid == CONTEXTACT+6 && eqtc) || (mid == 2*CONTEXTACT+6 && eqpc)) { style_this_atom (widg, GINT_TO_POINTER(j)); style_this_atom (widg, GINT_TO_POINTER(k)); } #endif else if ((mid == 8 || (mid == CONTEXTACT+8 && eqtc) || (mid == 2*CONTEXTACT+8 && eqpc)) || (mid == 9 || (mid == CONTEXTACT+9 && eqtc) || (mid == 2*CONTEXTACT+9 && eqpc)) || (mid == 10 || (mid == CONTEXTACT+10 && eqtc) || (mid == 2*CONTEXTACT+10 && eqpc)) || (mid == 11 || (mid == CONTEXTACT+11 && eqtc) || (mid == 2*CONTEXTACT+11 && eqpc))) { if (! bond_selection) { bond_selection = g_malloc0(sizeof*bond_selection); bond_selection -> first = new_atom_in_selection (j, opengl_project -> atoms[s][j].sp); tmp_a = bond_selection -> first; } else { tmp_a -> next = new_atom_in_selection (j, opengl_project -> atoms[s][j].sp); tmp_a = tmp_a -> next; } bond_selection -> selected ++; tmp_a -> next = new_atom_in_selection (k, opengl_project -> atoms[s][k].sp); tmp_a = tmp_a -> next; bond_selection -> selected ++; } } } } if (mid == 6 || mid == CONTEXTACT+6 || mid == 2*CONTEXTACT+6) { init_default_shaders (opengl_project -> modelgl); update (opengl_project -> modelgl); wait_for_style = FALSE; } else if (mid == 8 || mid == CONTEXTACT+8 || mid == 2*CONTEXTACT+8) { if (bond_selection -> selected > 0) create_new_project_using_data (bond_selection); g_free (bond_selection); bond_selection = NULL; } else if (mid == 9 || mid == CONTEXTACT+9 || mid == 2*CONTEXTACT+9) { if (bond_selection) { to_remove_this_object (3, data); remove_object (); g_free (bond_selection); bond_selection = NULL; } } else if (mid == 10 || mid == CONTEXTACT+10 || mid == 2*CONTEXTACT+10) { if (bond_selection) { #ifdef GTK4 to_replace_this_object (3, action, data); #else to_replace_this_object (3, widg, data); #endif to_remove_this_object (3, data); insert_object (1, data); g_free (bond_selection); bond_selection = NULL; } } else if (mid == 11 || mid == CONTEXTACT+11 || mid == 2*CONTEXTACT+11) { if (bond_selection) { copy_bond_selection (); g_free (bond_selection); bond_selection = NULL; } } } #ifdef GTK4 /*! \fn GMenu * add_edition_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data) \brief add edition submenu to the popup menu GTK4 \param view the target glwin \param act the action name \param aid the action id \param handler the associated callback \param data the associated data pointer */ GMenu * add_edition_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data) { GMenu * menu = g_menu_new (); GMenu * menus; gchar * word, * name, * str; gchar * eact = g_strdup_printf ("mol-ins-%s-%d", act, aid); int i, j; for (i=0; mol[i].type || mol[i].object; i++) { if (mol[i].type) { menus = g_menu_new (); append_submenu (menu, _(mol[i].type), menus); } if (mol[i].object) { if (i == 9 || i == 13 || i == 16 || i == 17) { append_opengl_item (view, menus, _(mol[i].object), eact, 1, i, NULL, IMG_NONE, NULL, FALSE, handler, data, FALSE, FALSE, FALSE, TRUE); } else { append_opengl_item (view, menus, mol[i].object, eact, 1, i, NULL, IMG_NONE, NULL, FALSE, handler, data, FALSE, FALSE, FALSE, TRUE); } } } g_free (eact); gboolean doit = FALSE; for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { doit = TRUE; break; } } if (doit) { GMenu * menup = g_menu_new (); GMenu * menups; eact = g_strdup_printf ("ifp-%s-%d", act, aid); for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { name = g_strdup_printf ("%s (%d)", get_project_by_id(i) -> name, i+1); menups = g_menu_new (); for (j=0; j<3; j++) { word = g_strdup_printf (_("%s in %s"), _(action_atoms[j]), name); str = g_strdup_printf ("%s-%d", eact, j); append_opengl_item (view, menups, word, str, 1, i, NULL, IMG_NONE, NULL, FALSE, handler, data, FALSE, FALSE, FALSE, TRUE); g_free (word); g_free (str); } append_submenu (menup, name, menups); g_object_unref (menups); g_free (name); } } g_free (eact); append_submenu (menu, _("Import From Project"), menup); g_object_unref (menup); } eact = g_strdup_printf ("cp-%s-%d", act, aid); append_opengl_item (view, menu, _("Copied Data"), eact, 1, 0, "V", IMG_NONE, NULL, FALSE, G_CALLBACK(add_object), data, FALSE, FALSE, FALSE, (copied_object) ? TRUE : FALSE); g_free (eact); return menu; } /*! \fn GMenu * add_style_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data) \brief create style submenu and insert to menu item GTK4 \param view the target glwin \param act the action name \param aid the action id \param handler the associated callback \param data the associated data pointer */ GMenu * add_style_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data) { GMenu * menu = g_menu_new (); gchar * actc = g_strdup_printf ("%s-%d", act, aid); int i, j; for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { doit = TRUE; break; } } if (doit) { titem = create_menu_item (TRUE, _("Import From Project")); gtk_menu_shell_append ((GtkMenuShell *)menu, titem); smenu = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)titem, smenu); for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { name = g_strdup_printf ("%s (%d)", get_project_by_id(i) -> name, i+1); sitem = create_menu_item_from_widget (markup_label(name, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); //child = gtk_bin_get_child (GTK_BIN (sitem)); //gtk_label_set_use_markup (GTK_LABEL(child), 1); //g_signal_connect (G_OBJECT (sitem), "activate", handler, data); gtk_menu_shell_append ((GtkMenuShell *)smenu, sitem); pmenu = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)sitem, pmenu); for (j=0; j<3; j++) { word = g_strdup_printf (_("%s in %s"), _(action_atoms[j]), name); gtk3_menu_item (pmenu, word, IMG_NONE, NULL, handler, data, FALSE, 0, 0, FALSE, FALSE, FALSE); g_free (word); } g_free (name); } } } GtkWidget * pastem = gtk3_menu_item (menu, _("Copied Data"), IMG_NONE, NULL, G_CALLBACK(add_object), data, TRUE, GDK_KEY_v, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); if (! copied_object) widget_set_sensitive (pastem, 0); } #endif #ifdef GTK4 /*! \fn void create_selection_item (GMenu * menu, glwin * view, gchar * str, gchar * act, int aid, int mid, int gid, int cid, int aoc, GCallback handler, gpointer data) \brief append new menu item to popup menu GTK4 \param menu the menu to append the new menu item to \param view the target glwin \param str the new menu item label \param act the new menu item action \param aid the action id \param mid menu item id \param gid coordination type \param cid coordination id \param aoc atom (0) or clone (1) \param handler the associated callback \param data the associated data pointer */ void create_selection_item (GMenu * menu, glwin * view, gchar * str, gchar * act, int aid, int mid, int gid, int cid, int aoc, GCallback handler, gpointer data) { gchar * actc = g_strdup_printf ("%s-%d", act, aid); #else /*! \fn GtkWidget * create_selection_item (glwin * view, gchar * str, int mid, int gid, int cid, int aoc, GCallback handler, gpointer data) \brief create new menu item for the popup menu GTK3 \param view the target glwin \param str the new menu item label \param mid menu item id \param gid coordination type \param cid coordination id \param aoc atom (0) or clone (1) \param handler the associated callback \param data the associated data pointer */ GtkWidget * create_selection_item (glwin * view, gchar * str, int mid, int gid, int cid, int aoc, GCallback handler, gpointer data) { GtkWidget * sel_item = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); #endif int i, j; if (mid == 6) { #ifdef GTK4 append_submenu (menu, str, add_style_sub_menu (view, act, aid, handler, data)); #else add_style_sub_menu (sel_item, handler, data); #endif } else if (mid == 7) { if (cid < 0) { i = get_project_by_id (view -> proj) -> nspec; #ifdef GTK4 append_submenu (menu, str, color_item(view, actc, mid, G_CALLBACK(to_run_atom_color_window), & view -> colorp[0][selected_aspec+aoc*i])); #else gtk_menu_item_set_submenu ((GtkMenuItem *)sel_item, color_box(view, selected_aspec+aoc*i, 0, 0)); #endif } else { #ifdef GTK4 i = cid; if (gid < 2) { for (j=0; j coord -> ntg[gid][j]; } append_submenu (menu, str, color_item(view, actc, mid, G_CALLBACK(window_color_coord), & view -> gcid[gid][i][gid])); #else int k; j = 2*opengl_project -> nspec; for (i=0; i < gid; i++) { j += opengl_project -> coord -> totcoord[i]; } if (gid < 2) { for (i=0; i coord -> ntg[gid][i]; } k = selected_aspec; } else { k = gid; } gtk_menu_item_set_submenu ((GtkMenuItem *)sel_item, color_box(view, j+cid, k, cid)); #endif } } else if (mid == 10) { #ifdef GTK4 append_submenu (menu, str, add_edition_sub_menu (view, act, aid, handler, data)); #else add_edition_sub_menu (sel_item, handler, data); #endif } else { #ifdef GTK4 append_opengl_item (view, menu, str, actc, 1, 0, NULL, IMG_NONE, NULL, FALSE, handler, data, FALSE, FALSE, FALSE, TRUE); #else g_signal_connect (G_OBJECT (sel_item), "activate", handler, data); #endif } #ifdef GTK4 g_free (actc); #else return sel_item; #endif } gchar * snsab[2][2]={{i18n("All Non-Selected Atom(s)/Bond(s)"), i18n("All Selected Atom(s)/Bond(s)")}, {i18n("All Non-Labelled Atom(s)/Bond(s)"), i18n("All Labelled Atom(s)/Bond(s)")}}; #ifdef GTK4 /*! \fn GMenu * selection_menu (int aid, glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c) \brief create popup submenu GTK4 \param aid action id \param view the target glwin \param ati 1st atom \param bti 2nd atom, if any \param aoc atom (0) or clone (1) \param mid menu id \param handler_a 1st callback - this object \param handler_b 2nd callback - coordination(s) \param handler_c 3rd callback - atom(s) */ GMenu * selection_menu (int aid, glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c) #else /*! \fn GtkWidget * selection_menu (glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c) \brief create popup submenu GTK3 \param view the target glwin \param ati 1st atom \param bti 2nd atom, if any \param aoc atom (0) or clone (1) \param mid menu id \param handler_a 1st callback - this object \param handler_b 2nd callback - coordination(s) \param handler_c 3rd callback - atom(s) */ GtkWidget * selection_menu (glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c) #endif { int p = view -> proj; int s = view -> anim -> last -> img -> step; int spa, spb; int i, j, k; gchar * str; #ifdef GTK4 gchar * strb; GMenu * menu = g_menu_new (); #else GtkWidget * sel; GtkWidget * menu = gtk_menu_new (); #endif project * this_proj = get_project_by_id(p); spa = this_proj -> atoms[s][ati].sp; if (bti > -1) spb = this_proj -> atoms[s][bti].sp; if (bti < 0 && (((mid == 5 || mid == 6) && this_proj -> atoms[s][ati].show[aoc]) || (mid == 0 && ! is_selected) || (mid == 1 && is_selected) || (mid == 2 && ! is_labelled) || (mid == 3 && is_labelled) || (mid > 8 && mid < 11))) { str = g_strdup_printf (_("This Atom: %s%d"), exact_name(this_proj -> chemistry -> label[spa]), ati+1); #ifdef GTK4 if (mid == 6) { append_submenu (menu, str, add_style_sub_menu (view, "tas", aid, handler_a, GINT_TO_POINTER(ati))); } else if (mid == 10) { append_submenu (menu, str, add_edition_sub_menu (view, "tae", aid, handler_a, GINT_TO_POINTER(ati))); } else { strb = g_strdup_printf ("act-%d-%d", aid, mid); append_opengl_item (view, menu, str, strb, 1, 0, NULL, IMG_NONE, NULL, FALSE, handler_a, GINT_TO_POINTER(ati), FALSE, FALSE, FALSE, TRUE); g_free (strb); } #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); if (mid == 6) { add_style_sub_menu (sel, handler_a, GINT_TO_POINTER(ati)); } else if (mid == 10) { add_edition_sub_menu (sel, handler_a, GINT_TO_POINTER(ati)); } else { g_signal_connect (G_OBJECT (sel), "activate", handler_a, GINT_TO_POINTER(ati)); } #endif } else if (bti > -1 && mid != 4 && mid != 7) { str = g_strdup_printf (_("This Bond: %s%d - %s%d"), exact_name(this_proj -> chemistry -> label[spa]), ati+1, exact_name(this_proj -> chemistry -> label[spb]), bti+1); #ifdef GTK4 if (mid == 6) { append_submenu (menu, str, add_style_sub_menu (view, "tb-s", aid, G_CALLBACK(select_action_for_this_bond), GINT_TO_POINTER(mid))); } else if (mid == 10) { append_submenu (menu, str, add_edition_sub_menu (view, "tb-e", aid, G_CALLBACK(select_action_for_this_bond), GINT_TO_POINTER(mid))); } else { strb = g_strdup_printf ("act-%d-%d", aid, mid); append_opengl_item (view, menu, str, strb, 1, 0, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(select_action_for_this_bond), GINT_TO_POINTER(mid), FALSE, FALSE, FALSE, TRUE); g_free (strb); } #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); if (mid == 6) { add_style_sub_menu (sel, G_CALLBACK(select_action_for_this_bond), GINT_TO_POINTER(mid)); } else if (mid == 10) { add_edition_sub_menu (sel, G_CALLBACK(select_action_for_this_bond), GINT_TO_POINTER(mid)); } else { g_signal_connect (G_OBJECT (sel), "activate", G_CALLBACK(select_action_for_this_bond), GINT_TO_POINTER(mid)); } gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); } if (mid != 7) { k = 0; for (j=0; j<2; j++) { if (mid<2 && j==0) { i = mid; } else if ((mid > 1 && mid < 4) && j==1) { i = mid - 2; } else { i = (j) ? is_labelled : is_selected; } #ifdef GTK4 if (mid == 6) { append_submenu (menu, _(snsab[j][i]), add_style_sub_menu (view, "all-s", aid, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+k))); } else if (mid == 10) { append_submenu (menu, _(snsab[j][i]), add_edition_sub_menu (view, "all-e", aid, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+k))); } else { strb = g_strdup_printf ("act-all-%d-%d", aid, mid+k); append_opengl_item (view, menu, _(snsab[j][i]), strb, 1, 0, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+k), FALSE, FALSE, FALSE, TRUE); g_free (strb); } #else sel = create_menu_item_from_widget (markup_label (_(snsab[j][i]), -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); if (mid == 6) { add_style_sub_menu (sel, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+k)); } else if (mid == 10) { add_edition_sub_menu (sel, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+k)); } else { g_signal_connect (G_OBJECT (sel), "activate", G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+k)); } gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif k = CONTEXTACT; } } for (i=0; i<2; i++) { if (this_proj -> modelgl -> adv_bonding[i]) { j = this_proj -> atoms[s][ati].coord[2+i]; str = (! i) ? g_strdup_printf (_("Fragment N°:\t%d"), j+1) : g_strdup_printf (_("Molecule N°:\t%d"), j+1); #ifdef GTK4 create_selection_item (menu, view, str, (! i) ? "afm" : "amo", aid, mid, 2+i, j, aoc, handler_b, & atoid[mid][2+i]); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item (view, str, mid, 2+i, j, aoc, handler_b, & atoid[mid][2+i])); #endif g_free (str); } } if (bti < 0) { if (this_proj -> atoms[s][ati].coord[0] > -1) { i = this_proj -> atoms[s][ati].coord[0]; str = g_strdup_printf (_("All %s Atoms %d Fold"), exact_name(this_proj -> chemistry -> label[spa]), this_proj -> coord -> geolist[0][spa][i]); #ifdef GTK4 create_selection_item (menu, view, str, "atc", aid, mid, 0, i, aoc, handler_b, & atoid[mid][0]); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item(view, str, mid, 0, i, aoc, handler_b, & atoid[mid][0])); #endif g_free (str); } if (this_proj -> atoms[s][ati].coord[1] > -1) { i = this_proj -> atoms[s][ati].coord[1]; str = g_strdup_printf (_("All %s Coordinations"), env_name (this_proj, i, spa, 1, NULL)); #ifdef GTK4 create_selection_item (menu, view, str, "apc", aid, mid, 1, i, aoc, handler_b, & atoid[mid][1]); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item(view, str, mid, 1, i, aoc, handler_b, & atoid[mid][1])); #endif g_free (str); } if (! aoc) { str = g_strdup_printf (_("All %s Atoms"), exact_name(this_proj -> chemistry -> label[spa])); } else { str = g_strdup_printf (_("All %s* Clones"), exact_name(this_proj -> chemistry -> label[spa])); } #ifdef GTK4 create_selection_item (menu, view, str, "asp", aid, mid, 0, -1, aoc, handler_c, & atoid[mid][2]); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item(view, str, mid, 0, -1, aoc, handler_c, & atoid[mid][2])); #endif g_free (str); } else { if (this_proj -> atoms[s][ati].coord[0] > -1 && this_proj -> atoms[s][bti].coord[0] > -1) { i = this_proj -> atoms[s][ati].coord[0]; j = this_proj -> atoms[s][bti].coord[0]; str = g_strdup_printf (_("All %s %d - %s %d Bonds"), exact_name(this_proj -> chemistry -> label[spa]), this_proj -> coord -> geolist[0][spa][i], exact_name(this_proj -> chemistry -> label[spb]), this_proj -> coord -> geolist[0][spb][j]); #ifdef GTK4 create_selection_item (menu, view, str, "atcb", aid, mid, -1, -1, aoc, G_CALLBACK(select_action_for_all_bonds), GINT_TO_POINTER(mid+CONTEXTACT)); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item(view, str, mid, -1, -1, aoc, G_CALLBACK(select_action_for_all_bonds), GINT_TO_POINTER(mid+CONTEXTACT))); #endif g_free (str); } if (this_proj -> atoms[s][ati].coord[1] > -1 && this_proj -> atoms[s][bti].coord[1] > -1) { i = this_proj -> atoms[s][ati].coord[1]; j = this_proj -> atoms[s][bti].coord[1]; str = g_strdup_printf (_("All %s - %s Bonds"), env_name (this_proj, i, spa, 1, NULL), env_name (this_proj, j, spb, 1, NULL)); #ifdef GTK4 create_selection_item (menu, view, str, "apcb", aid, mid, -1, -1, aoc, G_CALLBACK(select_action_for_all_bonds), GINT_TO_POINTER(mid+2*CONTEXTACT)); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item(view, str, mid, -1, -1, aoc, G_CALLBACK(select_action_for_all_bonds), GINT_TO_POINTER(mid+2*CONTEXTACT))); #endif g_free (str); } str = g_strdup_printf (_("All %s - %s Bonds"), exact_name(this_proj -> chemistry -> label[spa]), exact_name(this_proj -> chemistry -> label[spb])); #ifdef GTK4 create_selection_item (menu, view, str, "acb", aid, mid, -1, -1, aoc, G_CALLBACK(select_action_for_all_bonds), GINT_TO_POINTER(mid)); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item(view, str, mid, -1, -1, aoc, G_CALLBACK(select_action_for_all_bonds), GINT_TO_POINTER(mid))); #endif g_free (str); } if (mid > 3 && mid < 6) { gchar * mat[2]={i18n("All Hidden Atom(s)/Bond(s)"), i18n("All Visible Atom(s)/Bond(s)")}; #ifdef GTK4 strb = g_strdup_printf ("all-hv-%d-%d", aid, mid); append_opengl_item (view, menu, _(mat[mid%2]), strb, 1, 0, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+2*CONTEXTACT), FALSE, FALSE, FALSE, TRUE); g_free (strb); #else gtk3_menu_item (menu, _(mat[mid%2]), IMG_NONE, NULL, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+2*CONTEXTACT), FALSE, 0, 0, FALSE, FALSE, FALSE); #endif } return menu; } #ifdef GTK4 /*! \fn void analyze_popup_attach_color_palettes (glwin * view, GtkWidget * menu, int ato, int spc, int totc, int parc, int frag, int mol) \brief contextual popup menu attach color palettes GTK4 \param view the target glwin \param menu the GtkWidget sending the signal \param ato the picked atom \param spc the picked chemical species \param totc the total coordination of ato \param parc the partial coordination of ato \param frag the fragment of ato \param mol the molecule of ato */ void analyze_popup_attach_color_palettes (glwin * view, GtkWidget * menu, int ato, int spc, int totc, int parc, int frag, int mol) { /* Here we need to attached color palettes for: - The chemical species of the atom in selection - The total coordination of the atom in selection - The partial coordination of the atom in selection - The fragment of the atom in selection - The molecule of the atom in selection This is a work in progress since the 'gtk_popover_menu_bar_add_child' to use to insert widget is bugged: https://gitlab.gnome.org/GNOME/gtk/-/issues/5955 */ int i, j; project * this_proj = get_project_by_id (view -> proj); // The chemical species of the atom in selection if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, ato*this_proj -> nspec+spc, -1, -1), "set-asp-7.7")) { g_debug ("Color palette error: species in selection - custom= set-asp-7.7"); } // The total coordination i = 0; for (j=0; j coord -> ntg[0][j]; } if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, 2*this_proj -> nspec+i, -1, -1), "set-atc-7.7")) { g_debug ("Color palette error: total coordination in selection - custom= set-atc-7.7"); } // The partial coordination i = this_proj -> coord -> totcoord[0]; for (j=0; j coord -> ntg[1][j]; } if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, 2*this_proj -> nspec+i, -1, -1), "set-apc-7.7")) { g_debug ("Color palette error: partial coordination in selection - custom= set-apc-7.7"); } if (view -> adv_bonding[0]) { // The fragment of the atom in selection i = 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1] + frag; if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, i, 2, 0), "set-afm-7.7")) { g_debug ("Color palette error: fragment in selection - custom= set-afm-7.7"); } } if (view -> adv_bonding[1]) { // The molecule of the atom in selection i = 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1] + this_proj -> coord -> totcoord[2] + mol; if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, i, 3, 0), "set-amo-7.7")) { g_debug ("Color palette error: fragment in selection - custom= set-amo-7.7"); } } } #endif /*! \fn void popup_selection (glwin * view, double ptx, double pty, int spe, int mmod, int ati, int bti, int aoc) \brief create the contextual popup menu, right click on atom or bond \param view the target glwin \param ptx x position \param pty y position \param spe the picked chemical \param mmod mouse mode: 0 = analysis, 1 = edition \param ati 1st atom \param bti 2nd atom, if any \param aoc atom (0) or clone (1) */ void popup_selection (glwin * view, double ptx, double pty, int spe, int mmod, int ati, int bti, int aoc) { int p = view -> proj; int s = view -> anim -> last -> img -> step; int i, j; gchar * str, * strp; gchar * menu_names[CONTEXTACT] = {i18n("Select"), i18n("Unselect"), i18n("Label"), i18n("Unlabel"), i18n("Show"), i18n("Hide"), i18n("Style"), i18n("Color"), i18n("Edit as New Project"), i18n("Remove"), i18n("Replace"), i18n("Copy")}; GCallback handlers[CONTEXTACT][3] = {{G_CALLBACK(select_unselect_this_atom), G_CALLBACK(select_unselect_coord), G_CALLBACK(select_unselect_atoms)}, {G_CALLBACK(select_unselect_this_atom), G_CALLBACK(select_unselect_coord), G_CALLBACK(select_unselect_atoms)}, {G_CALLBACK(label_unlabel_this_atom), G_CALLBACK(label_unlabel_coord), G_CALLBACK(label_unlabel_atoms)}, {G_CALLBACK(label_unlabel_this_atom), G_CALLBACK(label_unlabel_coord), G_CALLBACK(label_unlabel_atoms)}, {G_CALLBACK(show_hide_this_atom), G_CALLBACK(show_hide_the_coord), G_CALLBACK(show_hide_the_atoms)}, {G_CALLBACK(show_hide_this_atom), G_CALLBACK(show_hide_the_coord), G_CALLBACK(show_hide_the_atoms)}, {G_CALLBACK(style_this_atom), G_CALLBACK(style_the_coord), G_CALLBACK(style_the_atoms)}, {NULL, NULL, NULL}, {NULL, G_CALLBACK(edit_coord), G_CALLBACK(edit_atoms)}, {G_CALLBACK(remove_this_atom), G_CALLBACK(remove_the_coord), G_CALLBACK(remove_the_atoms)}, {G_CALLBACK(replace_this_atom), G_CALLBACK(replace_the_coord), G_CALLBACK(replace_the_atoms)}, {G_CALLBACK(copy_this_atom), G_CALLBACK(copy_the_coord), G_CALLBACK(copy_the_atoms)}}; #ifdef GTK4 if (view_pop_actions) g_object_unref (view_pop_actions); view_pop_actions = g_simple_action_group_new (); GMenu * gmenu = g_menu_new (); #else GtkWidget * menu = gtk_menu_new (); GtkWidget * sel; #endif #ifdef DEBUG g_debug ("POP_SEL:: spe= %d, ati= %d, bti= %d, aoc= %d", spe, ati, bti, aoc); #endif // DEBUG opengl_project_changed (p); selected_atom = ati; selected_btom = bti; selected_aspec = opengl_project -> atoms[s][ati].sp; selected_bspec = -1; selected_status = ! opengl_project -> atoms[s][ati].pick[get_to_be_selected (view)]; is_selected = opengl_project -> atoms[s][ati].pick[mmod]; is_labelled = opengl_project -> atoms[s][ati].label[aoc]; #ifdef DEBUG if (is_selected != spe) g_debug ("Something is wrong in popup"); #endif // DEBUG for (i=0; i atoms[s][ati].coord[j]; atoid[i][j].c = ((i-2*(i/2)) == 0 ? 1 : 0); /*#ifdef DEBUG g_debug ("atoid[%d][%d].a= %d, atoid[%d][%d].b= %d, atoid[%d][%d].c= %d", i, j, atoid[i][j].a, i, j, atoid[i][j].b, i, j, atoid[i][j].c); #endif*/ } } if (bti > -1) { btoid.a = opengl_project -> atoms[s][bti].coord[0]; btoid.b = opengl_project -> atoms[s][bti].coord[1]; selected_bspec = opengl_project -> atoms[s][bti].sp; distance dist = distance_3d (& opengl_project -> cell, (opengl_project -> cell.npt) ? s : 0, & opengl_project -> atoms[s][ati], & opengl_project -> atoms[s][bti]); if (aoc == 0) { str = g_strdup_printf ("%s%d - %s%d", exact_name(opengl_project -> chemistry -> label[selected_aspec]), ati+1, exact_name(opengl_project -> chemistry -> label[selected_bspec]), bti+1); } else { str = g_strdup_printf ("%s%d - %s%d", exact_name(opengl_project -> chemistry -> label[selected_aspec]), ati+1, exact_name(opengl_project -> chemistry -> label[selected_bspec]), bti+1); } if (dist.pbc) { strp = g_strdup_printf ("%s \t d= %.3f Å (%s)", str, dist.length, _("PBC")); } else { strp = g_strdup_printf ("%s \t d= %.3f Å", str, dist.length); } #ifdef GTK4 append_opengl_item (view, gmenu, strp, "w-dist", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (strp, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (strp); for (i=0; i<2; i++) { if (view -> adv_bonding[i]) { j = opengl_project -> atoms[s][ati].coord[2+i] + 1; str = (! i) ? g_strdup_printf (_("Fragment N°:\t%d"), j) : g_strdup_printf (_("Molecule N°:\t%d"), j); #ifdef GTK4 append_opengl_item (view, gmenu, str, "w-dist-fm", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); } } } else { if (aoc == 0) { str = g_strdup_printf ("%s%d", exact_name(opengl_project -> chemistry -> label[selected_aspec]), ati+1); } else { str = g_strdup_printf ("%s%d*", exact_name(opengl_project -> chemistry -> label[selected_aspec]), ati+1); } #ifdef GTK4 append_opengl_item (view, gmenu, str, "w-ac", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); str = g_strdup_printf ("\tx : %f\n\ty : %f\n\tz : %f", opengl_project -> atoms[s][ati].x, opengl_project -> atoms[s][ati].y, opengl_project -> atoms[s][ati].z); #ifdef GTK4 append_opengl_item (view, gmenu, str, "xyz", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); if (opengl_project -> atoms[s][ati].coord[0] > -1) { i = opengl_project -> atoms[s][ati].coord[0]; str = g_strdup_printf (_("Total Coordination: %d"), opengl_project -> coord -> geolist[0][selected_aspec][i]); #ifdef GTK4 append_opengl_item (view, gmenu, str, "w-tc", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); i = opengl_project -> atoms[s][ati].coord[1]; str = g_strdup_printf (_("Partial Coordination: %s"), env_name (opengl_project, i, selected_aspec, 1, NULL)); #ifdef GTK4 append_opengl_item (view, gmenu, str, "w-pc", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); } for (i=0; i<2; i++) { if (view -> adv_bonding[i]) { j = opengl_project -> atoms[s][ati].coord[2+i] + 1; str = (! i) ? g_strdup_printf (_("Fragment N°:\t%d"), j) : g_strdup_printf (_("Molecule N°:\t%d"), j); #ifdef GTK4 append_opengl_item (view, gmenu, str, "w-fm", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); } } } //if (fc) //{ // gtk_menu_shell_append ((GtkMenuShell *)menu, sel); // add_menu_separator (menu); // atoms menu //gtk_menu_shell_append ((GtkMenuShell *)menu, field_atom_menu(p, s, ati, fc-2)); // bonds menu, if ati involved in bonding, or bti > -1 //gtk_menu_shell_append ((GtkMenuShell *)menu, field_bond_menu(p, s, ati, bti)); // angles menu, if ati involved in bonding with more than 2 neighbors //gtk_menu_shell_append ((GtkMenuShell *)menu, field_angle_menu(p, s, ati, bti)); //} #ifdef GTK4 GMenu * menua = g_menu_new (); g_menu_append_section (gmenu, NULL, (GMenuModel *)menua); #else add_menu_separator (menu); #endif gboolean go; /* 0 = Select 1 = Unselect 2 = Label 3 = Unlabel 4 = Show 5 = Hide 6 = Style 7 = Color 8 = Edit as New Project" 9 = Remove 10 = Replace 11 = Copy */ for (i=0; i<12; i++) { go = TRUE; if (i < 9 && view -> mode == EDITION) go = FALSE; if ((i > 8 && i < 11) && view -> mode == ANALYZE) go = FALSE; if (i == 0 && view -> anim -> last -> img -> selected[mmod] -> selected == opengl_project -> natomes) go = FALSE; if (i == 1 && view -> anim -> last -> img -> selected[mmod] -> selected == 0) go = FALSE; if (i == 2 && view -> labelled == opengl_project -> natomes*opengl_project -> steps) go = FALSE; if (i == 3 && view -> labelled == 0) go = FALSE; if (bti > -1 && i == 7) go = FALSE; j = (i == 8 && view -> mode == ANALYZE) ? 11 : (i == 11 && view -> mode == ANALYZE) ? 8 : i; if (go) { #ifdef GTK4 append_submenu (menua, _(menu_names[j]), selection_menu (i, view, ati, bti, aoc, j, handlers[j][0], handlers[j][1], handlers[j][2])); #else gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu(_(menu_names[j]), TRUE, selection_menu (view, ati, bti, aoc, j, handlers[j][0], handlers[j][1], handlers[j][2]))); #endif } } #ifdef GTK4 GtkWidget * menu = gtk_popover_menu_new_from_model_full ((GMenuModel *)gmenu, GTK_POPOVER_MENU_NESTED); // Color palettes here if (view -> mode == ANALYZE) analyze_popup_attach_color_palettes (view, menu, aoc, selected_aspec, atoid[0][0].b, atoid[0][1].b, atoid[0][2].b, atoid[0][3].b); gtk_widget_set_parent (menu, view -> win); str = g_strdup_printf ("gl-%d", view -> action_id); gtk_widget_insert_action_group (menu, str, G_ACTION_GROUP(view_pop_actions)); g_free (str); i = (view -> mode == ANALYZE) ? (is_selected) ? 385 : 355 : 230; i += (view -> adv_bonding[0] && bti < 0) ? 30 : 0; i += (view -> adv_bonding[1] && bti < 0) ? 30 : 0; if (bti > -1) i -= (view -> mode == ANALYZE) ? 70 : 50; gtk_widget_set_size_request (menu, -1, i); pop_menu_at_pointer (menu, ptx, pty); #else pop_menu_at_pointer (menu, NULL); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void reset_coords (GSimpleAction * action, GVariant * parameter, gpointer data) \brief reset coordinates menu item callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void reset_coords (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void reset_coords (GtkWidget * widg, gpointer data) \brief reset coordinates menu item callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void reset_coords (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; reset_coordinates (get_project_by_id(view -> proj), 2); int shaders[5] = {ATOMS, BONDS, POLYS, RINGS, SELEC}; re_create_md_shaders (5, shaders, get_project_by_id(view -> proj)); view -> create_shaders[MEASU] = TRUE; view -> create_shaders[PICKS] = TRUE; init_coordinates (get_project_by_id(view -> proj), 1, FALSE, TRUE); update (view); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void turn_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data) \brief rebuild menu items callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void turn_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void turn_rebuild (GtkWidget * widg, gpointer data) \brief rebuild menu items callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void turn_rebuild (GtkWidget * widg, gpointer data) #endif { tint * dat =(tint *)data; glwin * view = get_project_by_id(dat -> a) -> modelgl; #ifdef GTK4 view -> rebuild[dat -> b][0] = ! view -> rebuild[dat -> b][0]; view -> rebuild[dat -> b][1] = view -> rebuild[dat -> b][0]; update_menu_bar (view); #else view -> rebuild[dat -> b][0] = gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg); view -> rebuild[dat -> b][1] = view -> rebuild[dat -> b][0]; if (widg != view -> rbuild[dat -> b]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> rbuild[dat -> b], view -> rebuild[dat -> b][0]); } #endif } /*! \fn G_MODULE_EXPORT void to_center_this_molecule (GtkWidget * widg, gpointer data) \brief center this molecule menu item callback GTK4 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_center_this_molecule (GtkWidget * widg, gpointer data) { glwin * view = (glwin *)data; gboolean center = ! get_project_by_id(view -> proj) -> cell.crystal ? TRUE : ask_yes_no (_("Center crystal atom(s)"), _("Are you sure, this can affect the visual representation of the unit cell ?"), GTK_MESSAGE_QUESTION, view -> win); if (center) center_this_molecule (view); } #ifdef GTK4 /*! \fn GMenu * tools_section (glwin * view) \brief insert the 'Tools' section to the popmenu GTK4 \param view the target glwin */ GMenu * tools_section (glwin * view) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Tools"), menu_tools(view, 1)); return menu; } /*! \fn GMenu * anim_section (glwin * view) \brief insert the 'Animate' section to the popmenu GTK4 \param view the target glwin */ GMenu * anim_section (glwin * view) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Animate"), menu_anim(view, 1)); return menu; } /*! \fn void analyze_menu_attach_color_palettes (glwin * view, GtkWidget * menu) \brief attach the color palettes to the corresponding custom menu items GTK4 \param view the target glwin \param menu the GtkWidget sending the signal */ void analyze_menu_attach_color_palettes (glwin * view, GtkWidget * menu) { /* Here we need to attached color palettes for: - Box - Atoms - Clones - Total coordination(s) - Partial coordination(s) - Fragment(s) and molecule(s) - Ring(s) - Background This is a work in progress since the 'gtk_popover_menu_bar_add_child' to use to insert widget is bugged: https://gitlab.gnome.org/GNOME/gtk/-/issues/5955 */ int i, j, k, l, m; gchar * str, * env; project * this_proj = get_project_by_id (view -> proj); // Box if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, -1, -1, -1), "set-box-color.0")) { g_debug ("Color palette error: box - custom= set-box-color.0"); } // Atom(s) and clone(s) for (i=0; i<2; i++) { for (j=0; j nspec; j++) { str = g_strdup_printf ("set-%s.%d", (! i) ? "atom-color" : "clone-color", j); if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, i*this_proj -> nspec+j, -1, -1), (const gchar *)str)) { g_debug ("Color palette error: %s - %d - custom= %s", (! i) ? "atom-color" : "clone-color", j+1, str); } g_free (str); } } // Coordinations for (i=0; i<2; i++) { if (this_proj -> coord -> ntg[i]) { for (j=0; j nspec; j++) { for (k=0; k coord -> ntg[i][j]; k++) { m = 0; for (l=0; l coord -> ntg[i][l]; } if (i) { env = env_name (this_proj, k, j, 1, NULL); str = g_strdup_printf ("set-%s-c.%d", exact_name (env), m); g_free (env); } else { str = g_strdup_printf ("set-%d-c.%d", this_proj -> coord -> geolist[i][j][k], m); } m += (i) ? this_proj -> coord -> totcoord[0] : 0; if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, 2*this_proj -> nspec+m, -1, -1), (const gchar *)str)) { g_debug ("Color palette error: %s - spec= %d - coord= %d, custom= %s", (! i) ? "total-coord" : "partial-coord", j+1, k+1, str); } g_free (str); } } } } // Fragment(s) and molecule(s) for (i=2; i<4; i++) { for (j=0; j coord -> totcoord[i]; j++) { str = g_strdup_printf ("set-%s-%d", (i == 2) ? "fcol" : "mcol", j); k = 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1] + j; if (i == 3) k += this_proj -> coord -> totcoord[2]; if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, k, i, 0), (const gchar *)str)) { g_debug ("Color palette error: %s - %d, custom= %s", (i == 2) ? "fragment" : "molecule", j+1, str); } g_free (str); } } // Rings for (i=4; i<9; i++) { for (j=0; j coord -> totcoord[i]; j++) { str = g_strdup_printf ("set-rcol-%d-%d", i, j); if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, -3, i-4, 0), (const gchar *)str)) { g_debug ("Color palette error: rings - %d - %d, custom= %s", i, j+1, str); } g_free (str); } } // Background if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, -2, -1, -1), "set-back-color.0")) { g_debug ("Color palette error: background - custom= set-back-color.0"); } } #endif /*! \fn void popup_main_menu (glwin * view, double ptx, double pty) \brief create the OpenGL window popup menu \param view the target glwin \param ptx x position \param pty y position */ void popup_main_menu (glwin * view, double ptx, double pty) { GtkWidget * menu; opengl_project_changed (view -> proj); #ifdef GTK4 if (view_pop_actions) g_object_unref (view_pop_actions); view_pop_actions = g_simple_action_group_new (); GMenu * gmenu = g_menu_new (); if (view -> mode == ANALYZE) { g_menu_append_section (gmenu, NULL, (GMenuModel *)prepare_opengl_menu(view, 1)); if (get_project_by_id(view -> proj) -> natomes) { g_menu_append_section (gmenu, NULL, (GMenuModel *)prepare_model_menu(view, 1)); g_menu_append_section (gmenu, NULL, (GMenuModel *)prepare_coord_menu(view, 1)); } g_menu_append_section (gmenu, NULL, (GMenuModel *)tools_section(view)); g_menu_append_section (gmenu, NULL, (GMenuModel *)menu_view(view, 1)); g_menu_append_section (gmenu, NULL, (GMenuModel *)anim_section(view)); } else { g_menu_append_section (gmenu, NULL, (GMenuModel *)tools_section(view)); append_submenu (gmenu, _("Insert"), add_edition_sub_menu (view, "ins", 0, G_CALLBACK(to_add_object), & view -> colorp[0][0])); if (opengl_project -> steps == 1) g_menu_append_section (gmenu, NULL, (GMenuModel *)extract_section(view, 1)); append_opengl_item (view, gmenu, _("Reset Motion"), "res-mot", 1, 0, NULL, IMG_STOCK, MEDIA_LOOP, FALSE, G_CALLBACK(reset_coords), view, FALSE, FALSE, FALSE, TRUE); } g_menu_append_section (gmenu, NULL, (GMenuModel*)menu_reset(view, 1)); g_menu_append_section (gmenu, NULL, (GMenuModel*)menu_fullscreen(view, 1)); g_menu_append_section (gmenu, NULL, (GMenuModel*)menu_shortcuts(view, 1)); menu = gtk_popover_menu_new_from_model_full ((GMenuModel *)gmenu, GTK_POPOVER_MENU_NESTED); if (view -> mode == ANALYZE) analyze_menu_attach_color_palettes (view, menu); gtk_popover_present ((GtkPopover *)menu); gchar * str = g_strdup_printf ("gl-%d", view -> action_id); gtk_widget_insert_action_group (menu, str, G_ACTION_GROUP(view_pop_actions)); g_free (str); gtk_widget_set_parent (menu, view -> win); gtk_widget_set_size_request (menu, -1, (view -> mode == ANALYZE) ? 742 : 242); pop_menu_at_pointer (menu, ptx, pty); #else menu = gtk_menu_new (); GtkWidget * item; if (view -> mode == ANALYZE) { menu_items_opengl (menu, view, 1); add_menu_separator (menu); if (get_project_by_id(view -> proj) -> nspec) { gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Atom(s)"), TRUE, menu_atoms (view, 1, 0))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Bond(s)"), TRUE, menu_bonds (view, 1, 0))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Clone(s)"), TRUE, menu_clones (view, 1))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_box_axis (view, 1, 0)); add_menu_separator (menu); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_coord (view, 1)); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Polyhedra"), TRUE, menu_poly (view, 1))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Rings"), view -> rings, menu_rings (view, 1))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Chain(s)"), view -> chains, add_menu_coord (view, 1, 9))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Fragment(s)"), opengl_project -> coord -> totcoord[2], add_menu_coord (view, 1, 2))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Molecule(s)"), opengl_project -> coord -> totcoord[3], add_menu_coord (view, 1, 3))); gtk3_menu_item (menu, _("Advanced"), IMG_NONE, NULL, G_CALLBACK(coord_properties), (gpointer)& view -> colorp[30][0], TRUE, GDK_KEY_e, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); // add_advanced_item (menu, G_CALLBACK(coord_properties), (gpointer)& view -> colorp[30][0], TRUE, GDK_KEY_e, GDK_CONTROL_MASK); add_menu_separator (menu); } gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu (_("Tools"), TRUE, menu_tools(view, 1))); add_menu_separator (menu); menu_items_view (menu, view, 1); add_menu_separator (menu); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_anim (view, 1)); } else { item = create_menu_item (TRUE, _("Tools")); gtk_menu_item_set_submenu ((GtkMenuItem *)item, menu_tools(view, 1)); gtk_menu_shell_append ((GtkMenuShell *)menu, item); add_menu_separator (menu); item = create_menu_item (TRUE, _("Insert")); add_edition_sub_menu (item, G_CALLBACK(to_add_object), & view -> colorp[0][0]); gtk_menu_shell_append ((GtkMenuShell *)menu, item); add_menu_separator (menu); if (opengl_project -> steps == 1) { gtk3_menu_item (menu, _("Extract/Rebuild on Motion"), IMG_STOCK, (gpointer)ECUT, G_CALLBACK(turn_rebuild), & view -> colorp[0][0], FALSE, 0, 0, TRUE, FALSE, view -> rebuild[0][0]); gtk3_menu_item (menu, _("Extract/Rebuild on Copy"), IMG_STOCK, (gpointer)ECUT, G_CALLBACK(turn_rebuild), & view -> colorp[1][0], FALSE, 0, 0, TRUE, FALSE, view -> rebuild[1][0]); } gtk3_menu_item (menu, _("Reset Motion"), IMG_STOCK, (gpointer)MEDIA_LOOP, G_CALLBACK(reset_coords), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); } add_menu_separator (menu); gtk3_menu_item (menu, _("Reset View"), IMG_STOCK, (gpointer)FITBEST, G_CALLBACK(to_reset_view), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Center Molecule"), IMG_STOCK, (gpointer)FITBEST, G_CALLBACK(to_center_this_molecule), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); add_menu_separator (menu); if (! view -> fullscreen) { gtk3_menu_item (menu, _("Fullscreen"), IMG_STOCK, (gpointer)FULLSCREEN, G_CALLBACK(set_full_screen), (gpointer)view, TRUE, GDK_KEY_f, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); } else { gtk3_menu_item (menu, _("Exit Fullscreen"), IMG_STOCK, (gpointer)FULLSCREEN, G_CALLBACK(set_full_screen), (gpointer)view, TRUE, GDK_KEY_Escape, 0, FALSE, FALSE, FALSE); } add_menu_separator (menu); gtk3_menu_item (menu, _("Shortcuts"), IMG_NONE, NULL, G_CALLBACK(view_shortcuts), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); pop_menu_at_pointer (menu, NULL); #endif } atomes_1.3.1/src/opengl/win/initchain.c0000664000175000017500000000602215212624223017467 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file initchain.c * @short Functions collecting chain(s) data from Fortran90 \n Functions allocating chain(s) data from Fortran90 * @author Sébastien Le Roux */ /* * This file: 'initchain.c' * * Contains: * - The functions collecting chain(s) data from Fortran90 - The functions allocating chain(s) data from Fortran90 * * List of functions: void send_chains_opengl_ (int * st, int * ta, int * ri, int nchain[* ta]); void send_atom_chains_id_opengl_ (int * st, int * at, int * ta, int * num, int nchain[* num]); void allocate_all_chains_ (int * st, int * ta, int * nring); */ #include "global.h" #include "interface.h" #include "bind.h" #include "color_box.h" #include "glwindow.h" /*! \fn void send_chains_opengl_ (int * st, int * ta, int * ri, int nchain[* ta]) \brief getting the chain data elemnts from Fortran90 \param st the MD step \param ta the chain size \param ri the chain id \param nchain the chain element(s) */ void send_chains_opengl_ (int * st, int * ta, int * ri, int nchain[* ta]) { int i; for (i=0; i< * ta; i++) { active_glwin -> all_chains[* st][* ta - 1][* ri][i] = nchain[i] - 1; } } /*! \fn void send_atom_chains_id_opengl_ (int * st, int * at, int * ta, int * num, int nchain[*num]) \brief allocate atom chains data from Fortran90 information \param st the MD step \param at the atom id \param ta the chain size \param num the number of chain(s) \param nchain the chain id(s) */ void send_atom_chains_id_opengl_ (int * st, int * at, int * ta, int * num, int nchain[* num]) { if (nchain != NULL) { int i; active_project -> atoms[* st][* at].chain[* ta - 1] = allocint (* num + 1); active_project -> atoms[* st][* at].chain[* ta - 1][0] = * num; for (i=0; i < * num; i++) { active_project -> atoms[* st][* at].chain[* ta - 1][i+1] = nchain[i] - 1; } } } /*! \fn void allocate_all_chains_ (int * st, int * ta, int * nring) \brief allocate chains data from Fortran90 information \param st the MD step \param ta the number of chain size(s) \param nring the number of chain(s) of that size */ void allocate_all_chains_ (int * st, int * ta, int * nring) { active_glwin -> all_chains[* st][* ta - 1] = allocdint (* nring, * ta); active_glwin -> num_chains[* st][* ta - 1] = * nring; } atomes_1.3.1/src/opengl/win/m_coord.c0000664000175000017500000005307715212624223017157 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_coord.c * @short Functions to create the 'Chemistry -> Coordination' submenu * @author Sébastien Le Roux */ /* * This file: 'm_coord.c' * * Contains: * - The functions to create the 'Chemistry -> Coordination' submenu * * List of functions: gboolean is_coord_in_menu (int id, project * this_proj); void detach_frag_mol_menu (glwin * view, int id, int jd); G_MODULE_EXPORT void show_hide_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_coord_properties (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * add_menu_coord (glwin * view, int id, int jd); GtkWidget * menu_coord (glwin * view, int id); GtkWidget * menu_rings (glwin * view, int id); GMenu * color_item (glwin * view, gchar * act, int popm, int id, GCallback handler, gpointer data); GMenu * menu_show_coord (glwin * view, int popm, int id, int mid); GMenu * menu_show_frag_mol (glwin * view, int popm, int id, int mid); GMenu * menu_show_rings (glwin * view, int popm, int id, int mid); GMenu * add_menu_coord (glwin * view, int popm, int id); GMenu * menu_coord (glwin * view, int popm); GMenu * menu_rings (glwin * view, int popm); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" extern G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data); #ifdef GTK4 extern G_MODULE_EXPORT void window_color_coord (GSimpleAction * action, GVariant * parameter, gpointer data); extern GtkWidget * color_palette (glwin * view, int ideo, int spec, int geo); #endif /*! \fn gboolean is_coord_in_menu (int id, project * this_proj) \brief is this coordination in a menu ? \param id the coordination type \param this_proj the target project */ gboolean is_coord_in_menu (int id, project * this_proj) { if (((id == 2 || id == 3) && this_proj -> coord -> totcoord[id] <= COORD_MAX_MENU) || id < 2 || id > 3) { return TRUE; } else { return FALSE; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_hide_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show/hide coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_hide_coord (GtkWidget * widg, gpointer data) \brief show/hide coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_coord (GtkWidget * widg, gpointer data) #endif { qint * cid = (qint *)data; int i, j, k; int c, g, s; gboolean doit = TRUE; gboolean show; project * this_proj = get_project_by_id(cid -> a); s = cid -> b; c = cid -> c; g = cid -> d; j = 0; if (g < 2) { for (i=0; i coord -> ntg[g][i]; } } j += c; #ifdef GTK3 show = (widg) ? gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg) : this_proj -> modelgl -> anim -> last -> img -> show_coord[g][j]; #else GVariant * state; if (action) { state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); const gchar * coord = g_action_get_name ((GAction *)action); int lgt = strlen (coord); gchar * name = g_strdup_printf ("%c%c", coord[lgt-2], coord[lgt-1]); if (g_strcmp0(name, ".1") == 0) { name = g_strdup_printf ("%.*s.0", lgt-2, coord); g_action_group_activate_action ((GActionGroup *)this_proj -> modelgl -> action_group, (const gchar *)name, NULL); g_free (name); doit = FALSE; } } else { show = this_proj -> modelgl -> anim -> last -> img -> show_coord[g][j]; } #endif #ifdef DEBUG g_debug ("SHOW_HIDE_COORD:: p= %d, s= %d, c= %d, g= %d, show= %d", this_proj -> id, s, c, g, show); #endif #ifdef GTK3 // GTK3 Menu Action To Check if (is_coord_in_menu(g, this_proj)) { for (i=0; i<2; i++) { if (widg != this_proj -> modelgl -> ogl_geom[i][g][j]) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_geom[i][g][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[i][g][j]) != show) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[i][g][j], show); } } } } } #endif if (doit) { this_proj -> modelgl -> anim -> last -> img -> show_coord[g][j] = show; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (g < 2) { if (this_proj -> atoms[i][j].sp == s && this_proj -> atoms[i][j].coord[g] == c) { this_proj -> atoms[i][j].show[0] = this_proj -> atoms[i][j].show[1] = show; } } else if (g < 4) { if (this_proj -> atoms[i][j].coord[g] == c) { this_proj -> atoms[i][j].show[0] = this_proj -> atoms[i][j].show[1] = show; } } else if (g < 9) { k = this_proj -> coord -> geolist[g][0][c] - 1; if (this_proj -> atoms[i][j].rings[s][k] != NULL) { if (this_proj -> atoms[i][j].rings[s][k][0]) { this_proj -> atoms[i][j].show[0] = this_proj -> atoms[i][j].show[1] = show; } } } else { k = this_proj -> coord -> geolist[g][0][c] - 1; if (this_proj -> atoms[i][j].chain[k] != NULL) { if (this_proj -> atoms[i][j].chain[k][0]) { this_proj -> atoms[i][j].show[0] = this_proj -> atoms[i][j].show[1] = show; } } } } } init_default_shaders (this_proj -> modelgl); #ifdef GTK4 if (action) { g_action_change_state (G_ACTION (action), g_variant_new_boolean (show)); g_variant_unref (state); } #endif } } #ifdef GTK3 /*! \fn void detach_frag_mol_menu (glwin * view, int id, int jd) \brief create a fragment/molecule type submenu \param view the target glwin \param id main app (0) or popup (1) \param jd coordination type */ void detach_frag_mol_menu (glwin * view, int id, int jd) { GtkWidget * widg; if (view -> oglmc[id][jd] != NULL) { if (view -> oglmc[id][jd][0] != NULL) { if (GTK_IS_WIDGET(view -> oglmc[id][jd][0])) { widg = gtk_menu_get_attach_widget (GTK_MENU(view -> oglmc[id][jd][0])); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> oglmc[id][jd][0]); gtk_menu_detach (GTK_MENU(view -> oglmc[id][jd][0])); } } } } if (view -> oglmv[id][jd] != NULL) { if (view -> oglmv[id][jd][0] != NULL) { if (GTK_IS_WIDGET(view -> oglmv[id][jd][0])) { widg = gtk_menu_get_attach_widget (GTK_MENU(view -> oglmv[id][jd][0])); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> oglmv[id][jd][0]); gtk_menu_detach (GTK_MENU(view -> oglmv[id][jd][0])); } } } } } /*! \fn GtkWidget * add_menu_coord (glwin * view, int id, int jd) \brief create a coordination type submenu \param view the target glwin \param id main app (0) or popup (1) \param jd coordination type */ GtkWidget * add_menu_coord (glwin * view, int id, int jd) { int i, j; GtkWidget * widg; GtkWidget * menucts; project * this_proj = get_project_by_id (view -> proj); GtkWidget * menuct = gtk_menu_new (); if (is_coord_in_menu(jd, this_proj)) { if (jd == 2 || jd == 3) detach_frag_mol_menu(view, id, jd); GtkWidget * colt = create_menu_item (TRUE, _("Show/Hide")); gtk_menu_shell_append ((GtkMenuShell *)menuct, colt); if (jd < 2 || jd > 3) { menucts = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)colt, menucts); if (jd > 3) { if (jd == 9) { colt = create_menu_item (FALSE, _("Atoms in Chain(s) of Size")); } else { colt = create_menu_item (FALSE, _("Atoms in Ring(s) of Size")); } gtk_menu_shell_append ((GtkMenuShell *)menucts, colt); menucts = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)colt, menucts); } j = (jd < 2) ? this_proj -> nspec : this_proj -> coord -> totcoord[jd]; for (i=0; i oglmv[id][jd]) { if (GTK_IS_WIDGET(view -> oglmv[id][jd][i])) { widg = gtk_widget_get_parent (view -> oglmv[id][jd][i]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> oglmv[id][jd][i]); gtk_container_remove (GTK_CONTAINER(widg), view -> oglmv[id][jd][i]); } gtk_menu_shell_append ((GtkMenuShell *)menucts, view -> oglmv[id][jd][i]); } } } else { if (view -> ogl_geom[id][jd]) { if (GTK_IS_WIDGET(view -> ogl_geom[id][jd][i])) { widg = gtk_widget_get_parent (view -> ogl_geom[id][jd][i]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> ogl_geom[id][jd][i]); gtk_container_remove (GTK_CONTAINER(widg), view -> ogl_geom[id][jd][i]); } gtk_menu_shell_append ((GtkMenuShell *)menucts, view -> ogl_geom[id][jd][i]); } } } } } else if ((jd == 2 && view -> adv_bonding[0]) || (jd == 3 && view -> adv_bonding[1])) { if (view -> oglmv[id][jd]) { gtk_menu_item_set_submenu ((GtkMenuItem *)colt, view -> oglmv[id][jd][0]); } } if (jd != 9) { colt = create_menu_item (FALSE, _("Color(s)")); gtk_menu_shell_append ((GtkMenuShell *)menuct, colt); } if (jd < 2) { menucts = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)colt, menucts); if (view -> oglmc[id][jd]) { for (i=0; i nspec; i++) { if (GTK_IS_WIDGET(view -> oglmc[id][jd][i])) { widg = gtk_widget_get_parent (view -> oglmc[id][jd][i]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> oglmc[id][jd][i]); gtk_container_remove (GTK_CONTAINER(widg), view -> oglmc[id][jd][i]); } gtk_menu_shell_append ((GtkMenuShell *)menucts, view -> oglmc[id][jd][i]); } } } } else if ((jd == 2 && view -> adv_bonding[0]) || (jd == 3 && view -> adv_bonding[1])) { if (view -> oglmc[id][jd]) { if (GTK_IS_WIDGET(view -> oglmc[id][jd][0])) { gtk_menu_item_set_submenu ((GtkMenuItem *)colt, view -> oglmc[id][jd][0]); } } } else if ((jd > 3 && jd < 9) && view -> rings) { if (view -> oglmc[id][jd]) { if (GTK_IS_WIDGET(view -> oglmc[id][jd][0])) { widg = gtk_menu_get_attach_widget (GTK_MENU(view -> oglmc[id][jd][0])); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> oglmc[id][jd][0]); gtk_menu_detach (GTK_MENU(view -> oglmc[id][jd][0])); } gtk_menu_item_set_submenu ((GtkMenuItem *)colt, view -> oglmc[id][jd][0]); } } } } add_advanced_item (menuct, G_CALLBACK(coord_properties), (gpointer)& view -> colorp[jd][1], FALSE, 0, 0); return menuct; } /*! \fn GtkWidget * menu_coord (glwin * view, int id) \brief create the 'Coordination' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_coord (glwin * view, int id) { GtkWidget * menuco = create_menu_item (FALSE, _("Coordination")); GtkWidget * menuc = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)menuco, menuc); gtk_menu_shell_append ((GtkMenuShell *)menuc, menu_item_new_with_submenu (_("Total(s)"), TRUE, add_menu_coord(view, id, 0))); gtk_menu_shell_append ((GtkMenuShell *)menuc, menu_item_new_with_submenu (_("Partial(s)"), TRUE, add_menu_coord(view, id, 1))); return menuco; } /*! \fn GtkWidget * menu_rings (glwin * view, int id) \brief create the 'Ring(s)' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_rings (glwin * view, int id) { GtkWidget * menuco = gtk_menu_new (); if (view -> rings) { int i; for (i=0; i<5; i++) { if (view -> ring_max[i]) { if (id == 0) { view -> ogl_rings[i+1] = menu_item_new_with_submenu (_(rings_type[i]), TRUE, add_menu_coord (view, id, 4+i)); gtk_menu_shell_append ((GtkMenuShell *)menuco, view -> ogl_rings[i+1]); } else { gtk_menu_shell_append ((GtkMenuShell *)menuco, menu_item_new_with_submenu (_(rings_type[i]), TRUE, add_menu_coord (view, id, 4+i))); } } } } return menuco; } #else /*! \fn GMenu * color_item (glwin * view, gchar * act, int popm, int id, GCallback handler, gpointer data) \brief create a submenu to attach a color palette \param view the target glwin \param act the custom attribute to attach a widget \param popm main app (0) or popup (1) \param id id number \param handler the associated callback \param data the associated data pointer */ GMenu * color_item (glwin * view, gchar * act, int popm, int id, GCallback handler, gpointer data) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, act, act, popm, id, NULL, IMG_NONE, NULL, TRUE, NULL, NULL, FALSE, FALSE, FALSE, FALSE); append_opengl_item (view, menu, _("More Colors ..."), act, popm, id, NULL, IMG_NONE, NULL, FALSE, handler, data, FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * menu_show_coord (glwin * view, int popm, int id, int mid) \brief create the coordination 'Show' or 'Color' submenus \param view the target glwin \param popm main app (0) or popup (1) \param id coordination type \param mid 0 = show, 1 = color */ GMenu * menu_show_coord (glwin * view, int popm, int id, int mid) { GMenu * menu = g_menu_new (); GMenu * menus; project * this_proj = get_project_by_id (view -> proj); gchar * stra, * strb; int i, j, k; for (i=0; i nspec; i++) { menus = g_menu_new (); if (this_proj -> coord) { if (this_proj -> coord -> ntg[id]) { j = 0; for (k=0; k coord -> ntg[id][k]; } for (k=0; k < this_proj -> coord -> ntg[id][i]; k++) { if (id) { stra = exact_name (env_name (this_proj, k, i, 1, NULL)); } else { stra = g_strdup_printf ("%d", this_proj -> coord -> geolist[id][i][k]); } if (! mid) { strb = g_strdup_printf ("%s-s", stra); append_opengl_item (view, menus, stra, strb, popm, k+j, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_coord), & view -> gcid[id][k+j][id], TRUE, view -> anim -> last -> img -> show_coord[id][k+j], FALSE, TRUE); } else { strb = g_strdup_printf ("%s-c", stra); append_submenu (menus, stra, color_item(view, strb, popm, k+j, G_CALLBACK(window_color_coord), & view -> gcid[id][k+j][id])); } g_free (stra); g_free (strb); } } } append_submenu (menu, this_proj -> chemistry -> label[i], menus); g_object_unref (menus); } return menu; } /*! \fn G_MODULE_EXPORT void to_coord_properties (GSimpleAction * action, GVariant * parameter, gpointer data) \brief open advancedd coordination properties GTK4 callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_coord_properties (GSimpleAction * action, GVariant * parameter, gpointer data) { coord_properties (NULL, data); } /*! \fn GMenu * menu_show_frag_mol (glwin * view, int popm, int id, int mid) \brief create a fragment/molecule coordination submenu \param view the target glwin \param popm main app (0) or popup (1) \param id coordination type \param mid 0 = show, 1 = color */ GMenu * menu_show_frag_mol (glwin * view, int popm, int id, int mid) { GMenu * menu = g_menu_new (); project * this_proj = get_project_by_id (view -> proj); if (active_coord -> totcoord[id] <= COORD_MAX_MENU) { gchar * stra, * strb; int i; for (i=0; i < this_proj -> coord -> totcoord[id]; i++) { stra = g_strdup_printf ("%s N°%d", (id == 2) ? _("Fragment") : _("Molecule"), i+1); strb = g_strdup_printf ("%s-%d", (id == 2) ? "frag" : "mol", i+1); if (! mid) { append_opengl_item (view, menu, stra, strb, popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_coord), & view -> gcid[id][i][id], TRUE, view -> anim -> last -> img -> show_coord[id][i], FALSE, TRUE); } else { append_submenu (menu, stra, color_item(view, (id == 2) ? "fcol": "mcol", popm, i, G_CALLBACK(window_color_coord), & view -> gcid[id][i][id])); } g_free (stra); g_free (strb); } } // append_opengl_item (view, menu, _("All"), "all-fm", popm, id, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_coord_properties), & view -> colorp[id][1], FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * menu_show_rings (glwin * view, int popm, int id, int mid) \brief create a ring coordination submenu \param view the target glwin \param popm main app (0) or popup (1) \param id coordination type \param mid 0 = show, 1 = color */ GMenu * menu_show_rings (glwin * view, int popm, int id, int mid) { GMenu * menu = g_menu_new (); GMenu * menus; if (! mid) { menus = g_menu_new (); append_submenu (menu, (id < 9) ? _("Atoms in Ring(s) of Size") : _("Atoms in Chain(s) of Size"), menus); } project * this_proj = get_project_by_id (view -> proj); gchar * stra, * strb; int i; for (i=0; i < this_proj -> coord -> totcoord[id]; i++) { stra = g_strdup_printf ("%d", this_proj -> coord -> geolist[id][0][i]); strb = g_strdup_printf ("%d-%s-%s", id, stra, (mid) ? "color" : "coord"); if (! mid) { append_opengl_item (view, menus, stra, strb, popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_coord), & view -> gcid[id][i][id], TRUE, view -> anim -> last -> img -> show_coord[id][i], FALSE, TRUE); } else { append_submenu (menu, stra, color_item(view, "color", popm, i, G_CALLBACK(window_color_coord), & view -> gcid[id][i][id])); } g_free (stra); g_free (strb); } if (! mid) g_object_unref (menus); return menu; } /*! \fn GMenu * add_menu_coord (glwin * view, int popm, int id) \brief create a coordination type submenu \param view the target glwin \param popm main app (0) or popup (1) \param id coordination type */ GMenu * add_menu_coord (glwin * view, int popm, int id) { GMenu * menu = g_menu_new (); project * this_proj = get_project_by_id (view -> proj); gchar * menu_name[2] = {i18n("Show/Hide"), i18n("Color")}; if (is_coord_in_menu(id, this_proj)) { int i; for (i=0; i<2; i++) { if (id < 2) { append_submenu (menu, _(menu_name[i]), menu_show_coord(view, popm, id, i)); } else if (id < 4) { append_submenu (menu, _(menu_name[i]), menu_show_frag_mol(view, popm, id, i)); } else if (id < 10) { append_submenu (menu, _(menu_name[i]), menu_show_rings(view, popm, id, i)); } } append_opengl_item (view, menu, _("Advanced"), "adv-c", popm, id, NULL, IMG_STOCK, (gpointer)DPROPERTIES, FALSE, G_CALLBACK(to_coord_properties), & view -> colorp[id][1], FALSE, FALSE, FALSE, TRUE); } return menu; } /*! \fn GMenu * menu_coord (glwin * view, int popm) \brief create the 'Coordination' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_coord (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Total(s)"), add_menu_coord(view, popm, 0)); append_submenu (menu, _("Partial(s)"), add_menu_coord(view, popm, 1)); return menu; } /*! \fn GMenu * menu_rings (glwin * view, int popm) \brief create the 'Ring(s)' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_rings (glwin * view, int popm) { GMenu * menu = g_menu_new (); if (view -> rings) { int i; for (i=0; i<5; i++) { if (view -> ring_max[i]) { append_submenu (menu, _(rings_type[i]), add_menu_coord (view, popm, 4+i)); } } } return menu; } #endif atomes_1.3.1/src/opengl/win/w_coord.c0000664000175000017500000014455115212624223017167 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_coord.c * @short Functions to create the 'Environments configuration' window * @author Sébastien Le Roux */ /* * This file: 'w_coord.c' * * Contains: * - The functions to create the 'Environments configuration' window * * List of functions: int get_page_from_geo_coord (glwin * view, int geo, int coord); gboolean add_geo (int poly, project * this_proj, int g, int i, int j); G_MODULE_EXPORT gboolean scroll_set_poly_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean close_event_coord (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean close_event_coord (GtkWidget * widg, GdkEvent * event, gpointer data); void poly_alpha_has_changed (gpointer data, GLfloat v); void set_frag_mol_cell_background (GtkListStore * store, GtkTreeIter iter, ColRGBA col); void add_this_frag_mol_to_search_tree (project * this_proj, int geo, int gid); void set_this_frag_mol_color (gpointer data, GtkTreePath * path); G_MODULE_EXPORT void toggled_show_hide_coord (GtkCheckButton * widg, gpointer data); G_MODULE_EXPORT void toggled_show_hide_coord (GtkToggleButton * widg, gpointer data); G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkCheckButton * widg, gpointer data); G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkToggleButton * widg, gpointer data); G_MODULE_EXPORT void toggled_select_unselect_coord (GtkCheckButton * widg, gpointer data); G_MODULE_EXPORT void toggled_select_unselect_coord (GtkToggleButton * widg, gpointer data); G_MODULE_EXPORT void toggled_show_hide_poly (GtkCheckButton * widg, gpointer data); G_MODULE_EXPORT void toggled_show_hide_poly (GtkToggleButton * widg, gpointer data); G_MODULE_EXPORT void set_color_frag_mol (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_color_coord (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_poly_alpha (GtkRange * range, gpointer data); G_MODULE_EXPORT void on_select_frag_mol (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void run_set_this_frag_mol_color (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void to_set_this_frag_mol_color (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data); G_MODULE_EXPORT void update_frag_mol_search (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_atom_color_map_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_poly_color_map_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void on_cloned_poly_toggled (GtkCheckButton * Button, gpointer data); G_MODULE_EXPORT void on_cloned_poly_toggled (GtkToggleButton * Button, gpointer data); G_MODULE_EXPORT void close_coord (GtkButton * but, gpointer data); G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data); GtkWidget * coord_tab (glwin * view, int geo, int poly); GtkWidget * create_frag_mol_tree (project * this_proj, int geo); GtkWidget * create_frag_mol_search (project * this_proj, int geo); GtkWidget * fragmol_tab (glwin * view, int geo); GtkWidget * param_tab (glwin * view); GtkWidget * advanced_coord_properties (glwin * view, int page); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #include "bind.h" extern cairo_surface_t * col_surface (double r, double g, double b, int x, int y); extern G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void cloned_poly (GtkWidget * widg, gpointer data); extern int selected_aspec; extern GtkWidget * rings_tab (glwin * view, int g); extern GtkWidget * chains_tab (glwin * view); char * text_maps[ATOM_MAPS] = {i18n("Atomic Species"), i18n("Total"), i18n("Partial"), i18n("Fragment(s)"), i18n("Molecule(s)")}; int frag_mol_status; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_show_hide_coord (GtkCheckButton * widg, gpointer data) \brief toggle show / hide coordination callback GTK4 \param widg the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_coord (GtkCheckButton * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_show_hide_coord (GtkToggleButton * widg, gpointer data) \brief toggle show / hide coordination callback GTK3 \param widg the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_coord (GtkToggleButton * widg, gpointer data) #endif { qint * the_data = (qint *)data; int i, j, k; int s, g, c; project * this_proj = get_project_by_id (the_data -> a); s = the_data -> b; g = the_data -> d; c = the_data -> c; #ifdef DEBUG g_debug ("Toggle show/hide coord:: s= %d, g= %d, c= %d", s, g, c); #endif j = 0; if (g < 2) { for (i=0; i coord -> ntg[g][i]; } } j += c; k = (widg) ? button_get_status ((GtkWidget *)widg) : frag_mol_status; if (k != this_proj -> modelgl -> anim -> last -> img -> show_coord[g][j]) { if (is_coord_in_menu(g, this_proj)) { #ifdef GTK4 gchar * name; gchar * str, * env; if (g < 2) { if (g) { env = env_name (this_proj, c, s, 1, NULL); str = exact_name (env); g_free (env); } else { str = g_strdup_printf ("%d", this_proj -> coord -> geolist[g][s][c]); } name = g_strdup_printf ("set-%s-s.%d.0", str, j); g_free (str); } else if (g > 1 && g < 4) { name = g_strdup_printf ("set-%s-%d.%d.0", (g == 2) ? "frag" : "mol", c+1, c); } else if (g > 3 && g < 9) { name = g_strdup_printf ("set-%d-%d-coord.%d.0", g, this_proj -> coord -> geolist[g][0][j], j); } g_action_group_activate_action ((GActionGroup *)this_proj -> modelgl -> action_group, (const gchar *)name, NULL); g_free (name); #else gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][g][j], k); #endif } else { tint pointer; pointer.a = g; pointer.b = c; pointer.c = k; opengl_project_changed (the_data -> a); #ifdef GTK4 show_hide_the_coord (NULL, NULL, & pointer); #else show_hide_the_coord (NULL, & pointer); #endif // GTK4 } } init_default_shaders (this_proj -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkCheckButton * widg, gpointer data) \brief toggle label / unlabel coordination callback GTK4 \param widg the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkCheckButton * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkToggleButton * widg, gpointer data) \brief toggle label / unlabel coordination callback GTK3 \param widg the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkToggleButton * widg, gpointer data) #endif { qint * the_data = (qint *)data; tint pointer; pointer.a = the_data -> d; pointer.b = the_data -> c; pointer.c = (widg) ? button_get_status ((GtkWidget *)widg) : frag_mol_status; selected_aspec = the_data -> b; #ifdef DEBUG g_debug ("Toggle label/unlabel coord:: s= %d, g= %d, c= %d, selec_sp= %d", pointer.a, pointer.b, pointer.c, selected_aspec); #endif opengl_project_changed (the_data -> a); #ifdef GTK4 label_unlabel_coord (NULL, NULL, & pointer); #else label_unlabel_coord (NULL, & pointer); #endif // GTK4 } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_select_unselect_coord (GtkCheckButton * widg, gpointer data) \brief toggle select / unselect coordination callback GTK4 \param widg the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_select_unselect_coord (GtkCheckButton * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_select_unselect_coord (GtkToggleButton * widg, gpointer data) \brief toggle select / unselect coordination callback GTK3 \param widg the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_select_unselect_coord (GtkToggleButton * widg, gpointer data) #endif { qint * the_data = (qint *)data; tint pointer; pointer.a = the_data -> d; pointer.b = the_data -> c; pointer.c = (widg) ? button_get_status ((GtkWidget *)widg) : frag_mol_status; selected_aspec = the_data -> b; #ifdef DEBUG g_debug ("Toggle select/unselect coord:: s= %d, g= %d, c= %d, selec_sp= %d", pointer.a, pointer.b, pointer.c, selected_aspec); #endif opengl_project_changed (the_data -> a); #ifdef GTK4 select_unselect_coord (NULL, NULL, & pointer); #else select_unselect_coord (NULL, & pointer); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_show_hide_poly (GtkCheckButton * widg, gpointer data) \brief toggle show / hide polyhedra callback GTK4 \param widg the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_poly (GtkCheckButton * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_show_hide_poly (GtkToggleButton * widg, gpointer data) \brief toggle show / hide polyhedra callback GTK3 \param widg the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_poly (GtkToggleButton * widg, gpointer data) #endif { qint * the_data = (qint *)data; int i, j, k; int s, g, c; project * this_proj = get_project_by_id(the_data -> a); s = the_data -> b; g = the_data -> d; c = the_data -> c; j = c; if (g < 2) { for (i=0; i coord -> ntg[g][i]; } } k = button_get_status ((GtkWidget *)widg); #ifdef GTK4 if (k != this_proj -> modelgl -> anim -> last -> img -> show_poly[g][j]) { gchar * str, * env; gchar * name; if (g < 2) { if (g) { env = env_name (this_proj, c, s, 1, NULL); str = exact_name (env); g_free (env); } else { str = g_strdup_printf ("%d", this_proj -> coord -> geolist[g][s][c]); } name = g_strdup_printf ("set-%s-%d-p.%d.0", str, g, j); g_free (str); } else if (g > 3 && g < 9) { name = g_strdup_printf ("set-%d-%d-p.%d.0", g, this_proj -> coord -> geolist[g][0][j], j); } g_action_group_activate_action ((GActionGroup *)this_proj -> modelgl -> action_group, (const gchar *)name, NULL); g_free (name); } #else // GTK3 Menu Action To Check if (is_coord_in_menu(g, this_proj)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[0][g][j], k); } this_proj -> modelgl -> anim -> last -> img -> show_poly[g][j] = k; int shaders[2] = {POLYS, RINGS}; re_create_md_shaders (2, shaders, this_proj); update (this_proj -> modelgl); #endif } /*! \fn G_MODULE_EXPORT void set_color_frag_mol (GtkColorChooser * colob, gpointer data) \brief set fragment or molecule color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_color_frag_mol (GtkColorChooser * colob, gpointer data) { qint * cid = (qint *)data; int c, g; project * this_proj = get_project_by_id(cid -> a); g = cid -> b; c = cid -> c; this_proj -> modelgl -> anim -> last -> img -> spcolor[g][0][c] = get_button_color (colob); int shaders[4] = {ATOMS, BONDS, POLYS, RINGS}; re_create_md_shaders (4, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_color_coord (GtkColorChooser * colob, gpointer data) \brief set coordination color \param colob the GtkColorChosser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_color_coord (GtkColorChooser * colob, gpointer data) { qint * cid = (qint *)data; int c, g, s; project * this_proj = get_project_by_id(cid -> a); s = cid -> b; c = cid -> c; g = cid -> d; if (g > 3) s = 0; this_proj -> modelgl -> anim -> last -> img -> spcolor[g][s][c] = get_button_color (colob); int shaders[4] = {ATOMS, BONDS, POLYS, RINGS}; re_create_md_shaders (4, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn void poly_alpha_has_changed (gpointer data, GLfloat v) \brief change polyhedra opacity \param data the associated data pointer \param v the new opacity value */ void poly_alpha_has_changed (gpointer data, GLfloat v) { qint * cid = (qint *)data; int c, g, s; project * this_proj = get_project_by_id(cid -> a); s = cid -> b; c = cid -> c; g = cid -> d; if (g > 1) s = 0; this_proj -> modelgl -> anim -> last -> img -> spcolor[g][s][c].alpha = v; int shaders[2] = {POLYS, RINGS}; re_create_md_shaders (2, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT gboolean scroll_set_poly_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief set polyhedra opacity - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_poly_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { poly_alpha_has_changed (data, (GLfloat) value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_poly_alpha (GtkRange * range, gpointer data) \brief set polyhedra opacity - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_poly_alpha (GtkRange * range, gpointer data) { poly_alpha_has_changed (data, (GLfloat) gtk_range_get_value (range)); } /*! \fn gboolean add_geo (int poly, project * this_proj, int g, int i, int j) \brief test add this geometry data to the tree store or not ? \param poly polyhedra (1 / 0) \param this_proj the target project \param g the target geometry, 0 = total coord, 1 = partial coord, 4-8 = ring(s), 9 = chain(s) \param i target chemical species or 0 \param j geometry id number */ gboolean add_geo (int poly, project * this_proj, int g, int i, int j) { if (! poly) { if (g == 0) { if (this_proj -> coord -> geolist[g][i][j] != -1) { return TRUE; } else { return FALSE; } } else if (g == 1) { return TRUE; } else { if (this_proj -> coord -> geolist[g][i][j]) { return TRUE; } else { return FALSE; } } } else { if (g == 0 || g > 3) { if (this_proj -> coord -> geolist[g][i][j] > 2) { return TRUE; } else { return FALSE; } } else { int l, m; m = 0; for (l=0; l nspec; l++) { m += this_proj -> coord -> partial_geo[i][j][l]; } if (m > 2) { return TRUE; } else { return FALSE; } } } } /*! \fn GtkWidget * coord_tab (glwin * view, int geo, int poly) \brief create coordination(s) and polyhedra tab \param view the target glwin \param geo the target geometry, 0 = total coord, 1 = partial coord, 4-8 = ring(s), 9 = chain(s) \param poly polyhedra (1 / 0) */ GtkWidget * coord_tab (glwin * view, int geo, int poly) { int i, j, k, l, m, n; int p = view -> proj; gchar * str, * env; GtkWidget * wb; GtkWidget * but; gchar * coln[15] = {" ", i18n("Color"), i18n("Show"), i18n("Label"), i18n("Pick"), i18n("Alpha"), i18n("Color *"), i18n("Show **"), i18n("Label **"), i18n("Pick **"), i18n("Ring(s) size"), i18n("Chain(s) size"), i18n("Show *"), i18n("Label *"), i18n("Pick *")}; int scol[15] = {100, 70, 65, 40, 40, 150, 70, 75, 55, 55, 100, 100, 60, 50, 55}; GtkWidget * box = create_vbox (BSEP); GtkWidget * coord = create_scroll (box, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (coord, TRUE); gtk_widget_set_vexpand (coord, TRUE); n = 0; if (geo > 3 && ! poly) { n = (geo == 9) ? 11 : 10; gtk_widget_set_size_request (coord, -1, 475); if (geo < 9) { add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label(_(" * for the polyhedra only"), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label(_("** affect all atoms that belong to ring(s) of this size"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } else { add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label(_("* affect all atoms that belong to chain(s) of this size"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } } GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_SCR, coord, vbox); l = 0; if (poly) { l = 1; } wb = create_hbox (0); gtk_widget_set_size_request (wb, 350, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, wb, FALSE, FALSE, 0); for (i=0; i<5-2*l-geo/9; i++) { if (geo == 9) { j = 11 + i; } else if (i == 0 && geo > 3) { j = 10; } else if (i > 0 && geo > 3 && ! poly) { j = i+5; } else if (i == 1 && poly) { j = 5; } else { j = i; } str = g_strdup_printf ("%s", _(coln[j])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, markup_label(str, scol[j], -1, 0.5, 0.5), FALSE, FALSE, 5); g_free (str); } k = 0; project * this_proj = get_project_by_id(p); m = (geo < 2) ? this_proj -> nspec : 1; if ((geo < 2 || (geo == 9 && view -> chain_max) || (geo > 3 && geo < 9 && view -> ring_max[geo-4])) && this_proj -> coord -> totcoord[geo] > 0) { for (i=0; i < m; i++) { if (geo == 0) { for (j=0 ; j < this_proj -> coord -> ntg[geo][i]; j++) { if (add_geo(poly, this_proj, geo, i, j)) { str = g_strdup_printf (" %s", this_proj -> chemistry -> label[i]); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); break; } } } for (j=0 ; j < this_proj -> coord -> ntg[geo][i]; j++, k++) { if (add_geo(poly, this_proj, geo, i, j)) { wb = create_hbox (0); gtk_widget_set_size_request (wb, 350, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, wb, FALSE, FALSE, 0); if (geo == 0) { str = g_strdup_printf ("%d", this_proj -> coord -> geolist[geo][i][j]); } else if (geo == 1) { env = env_name (this_proj, j, i, 1, NULL); str = exact_name(env); g_free (env); } else { str = g_strdup_printf (_("%d atoms"), this_proj -> coord -> geolist[geo][i][j]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, markup_label(str, scol[0], -1, 0.5, 0.5), FALSE, FALSE, 5); g_free (str); if (poly) { but = create_hscale (0.0, 1.0, 0.01, view -> anim -> last -> img -> spcolor[geo][i][j].alpha, GTK_POS_LEFT, 3, 160, G_CALLBACK(set_poly_alpha), G_CALLBACK(scroll_set_poly_alpha), & view -> gcid[geo][k][geo]); } else if (geo != 9) { ColRGBA col = view -> anim -> last -> img -> spcolor[geo][i][j]; col.alpha = 1.0; but = color_button (col, TRUE, 80, -1, G_CALLBACK(set_color_coord), & view -> gcid[geo][k][geo]); } if (poly || geo != 9) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, but, FALSE, FALSE, 5); if (poly) { but = check_button (NULL, -1, -1, view -> anim -> last -> img -> show_poly[geo][k], G_CALLBACK(toggled_show_hide_poly), & view -> gcid[geo][k][geo]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, but, FALSE, FALSE, 20); } else { but = check_button (NULL, -1, -1, view -> anim -> last -> img -> show_coord[geo][k], G_CALLBACK(toggled_show_hide_coord), & view -> gcid[geo][k][geo]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, but, FALSE, FALSE, 20); but = check_button (NULL, -1, -1, FALSE, G_CALLBACK(toggled_label_unlabel_coord), & view -> gcid[geo][k][geo]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, but, FALSE, FALSE, 15+n); but = check_button (NULL, -1, -1, FALSE, G_CALLBACK(toggled_select_unselect_coord), & view -> gcid[geo][k][geo]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, but, FALSE, FALSE, 15+n/2); } } } } } return box; } /*! \fn G_MODULE_EXPORT void on_select_frag_mol (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief tree store action on cell selection \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree view \param data the associated data pointer */ G_MODULE_EXPORT void on_select_frag_mol (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, g, v, act; tint * dat = (tint * )data; GtkTreeIter iter; opengl_project_changed(dat -> a); coord_edition * coord = opengl_project -> modelgl -> coord_win; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); g = (dat -> b < 30) ? 2 : 3; if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { v = 0; } else { v = 1; } gtk_tree_model_get_iter (GTK_TREE_MODEL(coord -> frag_mol_model[g-2]), & iter, path); act = dat -> b - 10*g; gtk_list_store_set (coord -> frag_mol_model[g-2], & iter, act, v, -1); gtk_tree_model_get (GTK_TREE_MODEL(coord -> frag_mol_model[g-2]), & iter, 0, & i, -1); frag_mol_status = v; switch (act) { case 1: // Viz toggled_show_hide_coord (NULL, & opengl_project -> modelgl -> gcid[g][i-1][g]); break; case 3: // Label toggled_label_unlabel_coord (NULL, & opengl_project -> modelgl -> gcid[g][i-1][g]); break; case 4: // Pick toggled_select_unselect_coord (NULL, & opengl_project -> modelgl -> gcid[g][i-1][g]); break; } } /*! \fn void set_frag_mol_cell_background (GtkListStore * store, GtkTreeIter iter, ColRGBA col) \brief set tree store cell background color \param store the GtkListStore \param iter the GtkTreeIter target to update \param col the background color to set */ void set_frag_mol_cell_background (GtkListStore * store, GtkTreeIter iter, ColRGBA col) { cairo_surface_t * surface; surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 70, 50); cairo_t * cr = cairo_create (surface); cairo_set_source_rgba (cr, col.red, col.green, col.blue, 1.0); cairo_paint (cr); GdkPixbuf * pix = convert_to_pixbuf (surface); cairo_surface_destroy (surface); cairo_destroy(cr); gtk_list_store_set (store, & iter, 2, pix, -1); } /*! \fn void add_this_frag_mol_to_search_tree (project * this_proj, int geo, int gid) \brief add fragment or molecule in the search tree \param this_proj the target project \param geo 2 = fragment(s) or 3 = molecule(s) \param gid fragment or molecule id number to add */ void add_this_frag_mol_to_search_tree (project * this_proj, int geo, int gid) { GtkTreeIter id_level; GtkTreeIter new_level; gboolean valid; int i; int prepend = 0; coord_edition * coord = this_proj -> modelgl -> coord_win; GtkListStore * store = (GtkListStore *) coord -> frag_mol_model[geo-2]; GtkTreeModel * mod = GTK_TREE_MODEL(coord -> frag_mol_model[geo-2]); valid = gtk_tree_model_get_iter_first(mod, & id_level); while (valid) { gtk_tree_model_get (mod, & id_level, 0, & i, -1); if (i > gid) { prepend = 1; valid = FALSE; } else if (i == gid) { prepend = 2; valid = FALSE; } else { valid = gtk_tree_model_iter_next(mod, & id_level); } } if (prepend < 2) { switch (prepend) { case 0: gtk_list_store_append (store, & id_level); gtk_list_store_set (store, & id_level, 0, gid, 1, this_proj -> modelgl -> anim -> last -> img -> show_coord[geo][gid-1], 3, FALSE, 4, FALSE, -1); set_frag_mol_cell_background (store, id_level, this_proj -> modelgl -> anim -> last -> img -> spcolor[geo][0][gid-1]); break; case 1: gtk_list_store_insert_before (store, & new_level, & id_level); gtk_list_store_set (store, & new_level, 0, gid, 1, this_proj -> modelgl -> anim -> last -> img -> show_coord[geo][gid-1], 3, FALSE, 4, FALSE, -1); set_frag_mol_cell_background (store, new_level, this_proj -> modelgl -> anim -> last -> img -> spcolor[geo][0][gid-1]); break; } } } /*! \fn G_MODULE_EXPORT void run_set_this_frag_mol_color (GtkDialog * win, gint response_id, gpointer data) \brief set fragment / molecule color - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_set_this_frag_mol_color (GtkDialog * win, gint response_id, gpointer data) { tint * dat = (tint * )data; int i, g; if (response_id == GTK_RESPONSE_OK) { g = (dat -> b < 30) ? 2 : 3; GtkTreeIter fm_iter; gtk_tree_model_get (GTK_TREE_MODEL(opengl_project -> modelgl -> coord_win -> frag_mol_model[g-2]), & fm_iter, 0, & i, -1); opengl_project -> modelgl -> anim -> last -> img -> spcolor[g][0][i-1] = get_window_color (GTK_WIDGET(win)); int shaders[3] = {ATOMS, BONDS, LABEL}; re_create_md_shaders (3, shaders, opengl_project); update (opengl_project -> modelgl); } destroy_this_dialog (win); } /*! \fn void set_this_frag_mol_color (gpointer data, GtkTreePath * path) \brief set fragment / molecule color - creating the dialog \param data the associated data pointer \param path the path in the tree view */ void set_this_frag_mol_color (gpointer data, GtkTreePath * path) { int i, g; tint * dat = (tint * )data; opengl_project_changed(dat -> a); g = (dat -> b < 30) ? 2 : 3; GtkTreeIter iter; gtk_tree_model_get_iter (GTK_TREE_MODEL(opengl_project -> modelgl -> coord_win -> frag_mol_model[g-2]), & iter, path); coord_edition * coord = opengl_project -> modelgl -> coord_win; gtk_tree_model_get (GTK_TREE_MODEL(coord -> frag_mol_model[g-2]), & iter, 0, & i, -1); gchar * ctitle[2] = {i18n("Fragment"), i18n("Molecule")}; gchar * str = g_strdup_printf (_("%s N°%d color"), _(ctitle[g-2]), i); GtkWidget * widg = gtk_color_chooser_dialog_new (str, GTK_WINDOW(coord -> win)); g_free (str); set_color_chooser_color (widg, opengl_project -> modelgl -> anim -> last -> img -> spcolor[g][0][i-1]); run_this_gtk_dialog (widg, G_CALLBACK(run_set_this_frag_mol_color), data); set_frag_mol_cell_background ((GtkListStore *) coord -> frag_mol_model[g-2], iter, opengl_project -> modelgl -> anim -> last -> img -> spcolor[g][0][i-1]); } /*! \fn G_MODULE_EXPORT void to_set_this_frag_mol_color (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data) \brief set fragment/molecule color tree view callback \param tree_view the GtkTreeView sending the signal \param path the path in the tree view \param column the tree view column \param data the associated data pointer */ G_MODULE_EXPORT void to_set_this_frag_mol_color (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data) { gchar * title; g_object_get (column, "title", & title, NULL, NULL); if (g_strcmp0(title, _("Color")) == 0) { set_this_frag_mol_color (data, path); } } /*! \fn GtkWidget * create_frag_mol_tree (project * this_proj, int geo) \brief create the fragment(s) / molecule(s) search tree store \param this_proj the target project \param geo 2 = fragment(s) or 3 = molecule(s) */ GtkWidget * create_frag_mol_tree (project * this_proj, int geo) { int i; GtkTreeViewColumn * frag_mol_col[7]; GtkCellRenderer * frag_mol_cell[7]; gchar * ctitle[5]={i18n("Id."), i18n("Show"), i18n("Color"), i18n("Label"), i18n("Pick")}; gchar * ctype[5]={"text", "active", "pixbuf", "active", "active"}; GType col_type[5]={G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_OBJECT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN}; coord_edition * coord = this_proj -> modelgl -> coord_win; coord -> frag_mol_model[geo-2] = gtk_list_store_newv (5, col_type); GtkWidget * frag_mol_tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL(coord -> frag_mol_model[geo-2])); for (i=0; i<5; i++) { if (! i) { frag_mol_cell[i] = gtk_cell_renderer_text_new (); } else if (i == 2) { frag_mol_cell[i] = gtk_cell_renderer_pixbuf_new (); } else { frag_mol_cell[i] = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(frag_mol_cell[i]), "toggled", G_CALLBACK(on_select_frag_mol), & this_proj -> modelgl -> colorp[geo*10+i][0]); } gtk_cell_renderer_set_fixed_size (frag_mol_cell[i], 70, 25); frag_mol_col[i] = gtk_tree_view_column_new_with_attributes (_(ctitle[i]), frag_mol_cell[i], ctype[i], i, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(frag_mol_tree), frag_mol_col[i]); gtk_tree_view_column_set_alignment (frag_mol_col[i], 0.5); } g_object_set (frag_mol_tree, "activate-on-single-click", TRUE, NULL, NULL); g_signal_connect (G_OBJECT(frag_mol_tree), "row-activated", G_CALLBACK(to_set_this_frag_mol_color), & this_proj -> modelgl -> colorp[geo*10+i][0]); return frag_mol_tree; } /*! \fn G_MODULE_EXPORT void update_frag_mol_search (GtkEntry * res, gpointer data) \brief update the fragment(s) / molecule(s) search widget \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_frag_mol_search (GtkEntry * res, gpointer data) { tint * dat = (tint * )data; const gchar * m = entry_get_text (res); int v = (int)string_to_double ((gpointer)m); project * this_proj = get_project_by_id(dat -> a); int g = dat -> b; if (v > 0 && v <= this_proj -> coord -> totcoord[g]) { add_this_frag_mol_to_search_tree (this_proj, g, v); } else { update_entry_text (res, ""); } } /*! \fn GtkWidget * create_frag_mol_search (project * this_proj, int geo) \brief create the frgament(s)/molecule(s) search widget \param this_proj the target project \param geo 2 = fragment(s) or 3 = molecule(s) */ GtkWidget * create_frag_mol_search (project * this_proj, int geo) { GtkWidget * frag_mol_search = create_vbox (BSEP); gchar * obj[2] = {i18n("fragment"), i18n("molecule")}; gchar * str = g_strdup_printf (_("Too many %ss in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for %s(s) individually:\n"), _(obj[geo-2]), _(obj[geo-2])); add_box_child_start (GTK_ORIENTATION_VERTICAL, frag_mol_search, markup_label(str, 200, -1, 0.5, 0.5), FALSE, FALSE, 10); g_free (str); gchar * search_item[2]={i18n("Fragment Id.:"), i18n("Molecule Id.:")}; GtkWidget * hbox; GtkWidget * entry; GtkWidget * label; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, frag_mol_search, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(search_item[geo-2]), 100, -1, 0.0, 0.5), FALSE, FALSE, 20); entry = create_entry (G_CALLBACK(update_frag_mol_search), 100, 15, FALSE, & this_proj -> modelgl -> colorp[geo][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox,entry, FALSE, FALSE, 0); str = g_strdup_printf ("∈ [%d - %d]", 1, this_proj -> coord -> totcoord[geo]); label = markup_label (str, 50, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, label, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, frag_mol_search, markup_label(_("Search result(s)"), 200, -1, 0.5, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, frag_mol_search, create_frag_mol_tree (this_proj, geo), FALSE, FALSE, 0); return frag_mol_search; } /*! \fn GtkWidget * fragmol_tab (glwin * view, int geo) \brief create fragment(s) or molecule(s) tab \param view the target glwin \param geo 2 = fragment(s) or 3 = molecule(s) */ GtkWidget * fragmol_tab (glwin * view, int geo) { int i, j; GtkWidget * wb; gchar * str; int scol[5] = {70, 70, 65, 40, 40}; gchar * coln[5] = {i18n("Id."), i18n("Color"), i18n("Show"), i18n("Label"), i18n("Pick")}; GtkWidget * box = create_vbox (BSEP); GtkWidget * fragmol = create_scroll (box, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (fragmol, TRUE); gtk_widget_set_vexpand (fragmol, TRUE); project * this_proj = get_project_by_id(view -> proj); i = this_proj -> coord -> totcoord[geo]; if (i >= GTK_LIMIT) { add_container_child (CONTAINER_SCR, fragmol, create_frag_mol_search(this_proj, geo)); } else { GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_SCR, fragmol, vbox); wb = create_hbox (0); gtk_widget_set_size_request (wb, 350, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, wb, FALSE, TRUE, 0); for (j=0; j<5; j++) { str = g_strdup_printf ("%s", _(coln[j])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, markup_label(str, scol[j], -1, 0.5, 0.5), FALSE, FALSE, 5); g_free (str); } for (j=0; j anim -> last -> img -> spcolor[geo][0][j]; col.alpha = 1.0; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, color_button (col, TRUE, 80, -1, G_CALLBACK(set_color_frag_mol), & view -> gcid[geo][j][geo]), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, check_button(NULL, -1, -1, view -> anim -> last -> img -> show_coord[geo][j], G_CALLBACK(toggled_show_hide_coord), & view -> gcid[geo][j][geo]), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, check_button(NULL, -1, -1, FALSE, G_CALLBACK(toggled_label_unlabel_coord), & view -> gcid[geo][j][geo]), FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, check_button(NULL, -1, -1, FALSE, G_CALLBACK(toggled_select_unselect_coord), & view -> gcid[geo][j][geo]), FALSE, FALSE, 15); } } return box; } /*! \fn G_MODULE_EXPORT void set_atom_color_map_box (GtkComboBox * box, gpointer data) \brief change atom color map \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_atom_color_map_box (GtkComboBox * box, gpointer data) { glwin * view = (glwin *)data; int i = combo_get_active ((GtkWidget *)box); int j = view -> cmap[i]; #ifdef GTK4 gchar * variant = g_strdup_printf ("set-amap.%d.0", j); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-amap", g_variant_new_string((const gchar *)variant)); g_free (variant); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[j], TRUE); #endif } /*! \fn G_MODULE_EXPORT void set_poly_color_map_box (GtkComboBox * box, gpointer data) \brief change polyhedra color map \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_poly_color_map_box (GtkComboBox * box, gpointer data) { glwin * view = (glwin *)data; int i = combo_get_active ((GtkWidget *)box); int j = view -> cmap[i] + ATOM_MAPS; #ifdef GTK4 gchar * variant = g_strdup_printf ("set-pmap.%d.0", j); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-pmap", g_variant_new_string((const gchar *)variant)); g_free (variant); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[j], TRUE); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_cloned_poly_toggled (GtkCheckButton * Button, gpointer data) \brief toggle show / hide cloned polyhedra callback GTK4 \param Button the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_cloned_poly_toggled (GtkCheckButton * Button, gpointer data) #else /*! \fn G_MODULE_EXPORT void on_cloned_poly_toggled (GtkToggleButton * Button, gpointer data) \brief toggle show / hide cloned polyhedra callback GTK3 \param Button the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_cloned_poly_toggled (GtkToggleButton * Button, gpointer data) #endif { glwin * view = (glwin *)data; #ifdef GTK4 view -> anim -> last -> img -> cloned_poly = button_get_status ((GtkWidget *)Button); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-cloned-poly.0.0", NULL); /* int shaders[2] = {POLYS, RINGS}; re_create_md_shaders (2, shaders, get_project_by_id(view -> proj)); update (view); */ #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_clones[5], gtk_toggle_button_get_active (Button)); #endif } /*! \fn GtkWidget * param_tab (glwin * view) \brief environments configuration window parameters tab \param view the target glwin */ GtkWidget * param_tab (glwin * view) { int i, j, k, l; GtkWidget * vbox = create_vbox (BSEP); /*gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(fragmol), vbox); */ GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, TRUE, 25); GtkWidget * lab = markup_label (_("Atom(s) and bond(s) color map:"), -1, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 20); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); GtkWidget * color_box = create_combo (); j = 0; for (i=0; i cmap[j] = i; combo_text_append (color_box, g_strdup_printf (_("%s coordination(s)"), _(text_maps[i]))); j ++; } else if (i == 5 && get_project_by_id(view -> proj) -> force_field[0]) { view -> cmap[j] = i; combo_text_append (color_box, _("Force field (DL_POLY)")); j ++; } else if (i == 6 && view -> custom_map != NULL) { view -> cmap[j] = i; combo_text_append (color_box, _("Custom")); j ++; } else if (i == 0 || (i == 3 && view -> adv_bonding[0]) || (i == 4 && view -> adv_bonding[1])) { view -> cmap[j] = i; combo_text_append (color_box, _(text_maps[i])); j ++; } } l = 0; for (k=0; k anim -> last -> img -> color_map[0] == view -> cmap[k]) { l = k; break; } } combo_set_active (color_box, l); g_signal_connect (G_OBJECT (color_box), "changed", G_CALLBACK(set_atom_color_map_box), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, color_box, FALSE, FALSE, 100); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, TRUE, 25); lab = markup_label (_("Polyhedra color map:"), -1, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 20); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); color_box = create_combo (); for (i=0; i adv_bonding[0]) || (i == 4 && view -> adv_bonding[1])) { combo_text_append (color_box, _(text_maps[i])); } else if (i == 5 && get_project_by_id(view -> proj) -> force_field[0]) { combo_text_append (color_box, _("Force field (DL_POLY)")); } else if (i == 6 && view -> custom_map != NULL) { combo_text_append (color_box, _("Use atom(s) custom map")); } } l = 0; for (k=0; k anim -> last -> img -> color_map[1] == view -> cmap[k]) { l = k; // + ATOM_MAPS; break; } } combo_set_active (color_box, l); g_signal_connect (G_OBJECT (color_box), "changed", G_CALLBACK(set_poly_color_map_box), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, color_box, FALSE, FALSE, 100); widget_set_sensitive (color_box, view -> bonding); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("\nDisplay polyhedra at the edges of the model box\n" "using the PBC even if the clones are not shown:"), -1, -1, 0.5, 0.5), FALSE, FALSE, 15); GtkWidget * cloned_p = check_button (_("Cloned polyhedra"), -1, 40, view -> anim -> last -> img -> cloned_poly, G_CALLBACK(on_cloned_poly_toggled), view); widget_set_sensitive ((cloned_p), get_project_by_id(view -> proj) -> cell.pbc); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cloned_p, FALSE, FALSE, 50); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("This is automatic if the clones are shown.\n" "The clones are the replica of the atoms linked by PBC."), -1, -1, 0.5, 0.5), FALSE, FALSE, 5); return vbox; } /*! \fn G_MODULE_EXPORT void close_coord (GtkButton * but, gpointer data) \brief environments configuration window close button \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void close_coord (GtkButton * but, gpointer data) { glwin * view = (glwin *)data; view -> coord_win -> win = destroy_this_widget (view -> coord_win -> win); g_free (view -> coord_win); view -> coord_win = NULL; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean close_event_coord (GtkWindow * widg, gpointer data) \brief environments configuration window close event callback GTK4 \param widg the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_event_coord (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean close_event_coord (GtkWidget * widg, GdkEvent * event, gpointer data) \brief environments configuration window close event callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_event_coord (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { close_coord (NULL, data); return FALSE; } /*! \fn GtkWidget * advanced_coord_properties (glwin * view, int page) \brief create the environments configuration window \param view the target glwin \param page the page of the notebook to display */ GtkWidget * advanced_coord_properties (glwin * view, int page) { gchar * str = g_strdup_printf (_("Environments configuration - %s"), get_project_by_id(view -> proj)->name); GtkWidget * win = create_win (str, view -> win, FALSE, FALSE); g_free (str); char * rings_short[5] = {"AR", "KR", "GR", "PR", "SR"}; GtkWidget * vbox = create_vbox (5); add_container_child (CONTAINER_WIN, win, vbox); gtk_widget_set_size_request (win, 625, 600); view -> coord_win -> notebook = gtk_notebook_new (); gtk_notebook_set_scrollable (GTK_NOTEBOOK(view -> coord_win -> notebook), TRUE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK(view -> coord_win -> notebook), GTK_POS_LEFT); show_the_widgets (view -> coord_win -> notebook); gtk_widget_set_size_request (view -> coord_win -> notebook, 600, 550); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, view -> coord_win -> notebook, FALSE, FALSE, 0); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), param_tab (view), gtk_label_new (_("Parameters"))); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, 0, 0), markup_label(_("Total coordination(s) [TC]"), -1, -1, 0.0, 0.5)); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, 1, 0), markup_label(_("Partial coordination(s) [PC]"), -1, -1, 0.0, 0.5)); int i; if (view -> rings) { for (i=1; i<5; i++) { if (view -> ring_max[i]) { str = (i) ? g_strdup_printf (_("%s ring(s) [%s]"), _(rings_type[i]), rings_short[i]) : g_strdup_printf (_("All ring(s) (no rule) [%s]"), rings_short[i]); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, i+4, 0), markup_label(str, -1, -1, 0.0, 0.5)); g_free (str); } } } if (view -> chains && view -> chain_max) { gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, 9, 0), markup_label(_("Chain(s)"), -1, -1, 0.0, 0.5)); } gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, 0, 1), markup_label(_("Polyhedra from TC"), -1, -1, 0.0, 0.5)); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, 1, 1), markup_label(_("Polyhedra from PC"), -1, -1, 0.0, 0.5)); if (view -> rings) { for (i=0; i<5; i++) { if (view -> ring_max[i]) { str = g_strdup_printf (_("Polyhedra from %s"), rings_short[i]); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, i+4, 1), markup_label(str, -1, -1, 0.0, 0.5)); g_free (str); } } } if (view -> adv_bonding[0]) { gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), fragmol_tab (view, 2), markup_label (_("Fragment(s)"), -1, -1, 0.0, 0.5)); } if (view -> adv_bonding[1]) { gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), fragmol_tab (view, 3), markup_label (_("Molecule(s)"), -1, -1, 0.0, 0.5)); } if (view -> rings) { for (i=0; i<5; i++) { if (view -> ring_max[i]) { str = g_strdup_printf (_("Isolated ring(s) from %s"), rings_short[i]); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), rings_tab (view, i), markup_label(str, -1, -1, 0.0, 0.5)); g_free (str); } } } if (view -> chains && view -> chain_max) { gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), chains_tab (view), markup_label(_("Isolated chain(s)"), -1, -1, 0.0, 0.5)); } GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, FALSE, 0); GtkWidget * but = create_button (_("Close"), IMG_STOCK, FCLOSE, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(close_coord), view); add_box_child_end (hbox, but, FALSE, FALSE, 0); add_gtk_close_event (win, G_CALLBACK(close_event_coord), view); show_the_widgets (win); gtk_notebook_set_current_page (GTK_NOTEBOOK (view -> coord_win -> notebook), page); return win; } /*! \fn int get_page_from_geo_coord (glwin * view, int geo, int coord) \brief find the proper page to display in the notebook \param view the target glwin \param geo the type of environment \param coord coordination (1) or polyhedra (0) */ int get_page_from_geo_coord (glwin * view, int geo, int coord) { int i, j; if (geo == 30) return 0; if (! coord) { i = (geo < 2) ? 3 : 0; if (view -> rings) { for (j=0; j<5; j++) { if (view -> ring_max[j]) i ++; } } i = (geo < 2) ? i + geo : 4 + 2*i; } else { if (geo > 1) { i = 0; if (view -> rings) { for (j=0; j<5; j++) { if (view -> ring_max[j]) i ++; } } if (geo < 4) { i = 2*(i+2) + geo - 1; } else { i = 0; for (j=0; j<5; j++) { if (view -> ring_max[j]) { if (geo == 4 + j) break; i ++; } } i = 3 + i; } } else { i = geo + 1; } } return i; } /*! \fn G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data) \brief create the environments configuration window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data) { tint * id = (tint *) data; glwin * view = get_project_by_id(id -> a) -> modelgl; int page = get_page_from_geo_coord(view, id -> b, id -> c); if (view -> coord_win == NULL) { view -> coord_win = g_malloc0(sizeof*view -> coord_win); view -> coord_win -> win = advanced_coord_properties (view, page); } else if (GTK_IS_WIDGET(view -> coord_win -> win)) { show_the_widgets (view -> coord_win -> win); gtk_notebook_set_current_page (GTK_NOTEBOOK (view -> coord_win -> notebook), page); } else { show_warning (_("Error impossible to display the environments window !"), view -> win); } } atomes_1.3.1/src/opengl/win/w_chains.c0000664000175000017500000011045615212624223017323 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_chains.c * @short Functions to create the chain(s) tab for the advanced environments window * @author Sébastien Le Roux */ /* * This file: 'w_chains.c' * * Contains: * - The functions to create the chain(s) tab for the advanced environments window * * List of functions: gchar * chain_atoms (project * this_proj, int step, int size, int cid, gboolean to_file); int get_cmin (project * this_proj, int step); int get_cmax (project * this_proj, int step); void fill_chains_model (GtkTreeStore * store, project * this_proj); void chains_set_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void add_this_chain_to_search_tree (project * this_proj); G_MODULE_EXPORT void on_select_chains (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void update_chains_search (GtkEntry * res, gpointer data); G_MODULE_EXPORT void run_save_chains_to_file (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_save_chains_to_file (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void save_chains_to_file (GtkButton * but, gpointer data); GtkWidget * create_chains_tree (project * this_proj, gboolean fill_this); GtkWidget * create_chains_search (project * this_proj); GtkWidget * chains_tab (glwin * view); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" extern const gchar * dfi[2]; extern void rings_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); /*! \fn G_MODULE_EXPORT void on_select_chains (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select chain toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void on_select_chains (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { tint * dat = (tint * )data; gboolean saved_label[2]; int i, j, c, s, v, u, a, b; opengl_project_changed(dat -> a); coord_edition * coord = opengl_project -> modelgl -> coord_win; b = (opengl_project -> steps > 1) ? 1: 0; c = dat -> b; if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { v = 0; } else { v = 1; } GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(coord -> chains_model), & iter, path); gtk_tree_store_set (coord -> chains_model, & iter, c, v, -1); if (b) { gtk_tree_model_get (GTK_TREE_MODEL(coord -> chains_model), & iter, 0, & s, -1); s = - s - 1; } else { s = 0; } gtk_tree_model_get (GTK_TREE_MODEL(coord -> chains_model), & iter, b, & i, -1); i = -i; gtk_tree_model_get (GTK_TREE_MODEL(coord -> chains_model), & iter, b+1, & j, -1); switch (c-b) { case 2: // Viz for (u=0; u modelgl -> all_chains[s][i-1][j-1][u]; #ifdef GTK4 if (opengl_project -> atoms[s][a].show[0] != v) show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(a)); #else if (opengl_project -> atoms[s][a].show[0] != v) show_hide_this_atom (NULL, GINT_TO_POINTER(a)); #endif // GTK4 } break; case 3: // Label for (u=0; u modelgl -> all_chains[s][i-1][j-1][u]; opengl_project -> atoms[s][a].label[0] = opengl_project -> atoms[s][a].label[1] = v; } opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; break; case 4: // Pick for (u=0; u modelgl -> all_chains[s][i-1][j-1][u]; saved_label[0] = opengl_project -> atoms[s][a].label[0]; saved_label[1] = opengl_project -> atoms[s][a].label[1]; #ifdef GTK4 if (opengl_project -> atoms[s][a].pick[0] != v) select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(a)); #else if (opengl_project -> atoms[s][a].pick[0] != v) select_unselect_this_atom (NULL, GINT_TO_POINTER(a)); #endif // GTK4 opengl_project -> atoms[s][a].label[0] = saved_label[0]; opengl_project -> atoms[s][a].label[1] = saved_label[1]; } break; } update (opengl_project -> modelgl); } /*! \fn gchar * chain_atoms (project * this_proj, int step, int size, int cid, gboolean to_file) \brief create a string containing the list of atoms in a chain \param this_proj the target project \param step the configuration \param size the size of the ring \param cid the id number of the ring \param to_file output */ gchar * chain_atoms (project * this_proj, int step, int size, int cid, gboolean to_file) { gchar * str; int aid, sid; aid = this_proj -> modelgl -> all_chains[step][size][cid][0]; sid = this_proj -> atoms[step][aid].sp; int i; if (to_file) { str = g_strdup_printf ("%s%d", exact_name(this_proj -> chemistry -> label[sid]), aid+1); for (i=1; i modelgl -> all_chains[step][size][cid][i]; sid = this_proj -> atoms[step][aid].sp; str = g_strdup_printf ("%s - %s%d", str, exact_name(this_proj -> chemistry -> label[sid]), aid+1); } } else { str = g_strdup_printf ("%s%d", exact_name(this_proj -> chemistry -> label[sid]), aid+1); for (i=1; i modelgl -> all_chains[step][size][cid][i]; sid = this_proj -> atoms[step][aid].sp; str = g_strdup_printf ("%s-%s%d", str, exact_name(this_proj -> chemistry -> label[sid]), aid+1); } } return str; } /*! \fn void fill_chains_model (GtkTreeStore * store, project * this_proj) \brief fill the entire chain(s) tree store \param store the GtkTreeStore to fill \param this_proj the target project */ void fill_chains_model (GtkTreeStore * store, project * this_proj) { GtkTreeIter step_level, size_level, chain_level; int h, i, j, k, l; gchar * str; if (this_proj -> coord -> totcoord[9]) { for (h=0; h < this_proj -> steps; h++) { if (this_proj -> steps > 1) { gtk_tree_store_append (store, & step_level, NULL); gtk_tree_store_set (store, & step_level, 0, h+1, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, -1); } for (i=0; i < this_proj -> coord -> totcoord[9]; i++) { j = this_proj -> coord -> geolist[9][0][i]; k = this_proj -> modelgl -> num_chains[h][j-1]; if (this_proj -> steps > 1 && k > 0) { gtk_tree_store_append (store, & size_level, & step_level); gtk_tree_store_set (store, & size_level, 0, 0, 1, j, 2, 0, 3, 0, 4, 0, 5, 0, -1); } else if (this_proj -> steps == 1) { gtk_tree_store_append (store, & size_level, NULL); gtk_tree_store_set (store, & size_level, 0, j, 1, 0, 2, 0, 3, 0, 4, 0, -1); } for (l=0; l steps > 1) { gtk_tree_store_set (store, & chain_level, 0, -(h+1), 1, -j, 2, l+1, 3, FALSE, 4, FALSE, 5, FALSE, 6, str, -1); } else { gtk_tree_store_set (store, & chain_level, 0, -j, 1, l+1, 2, FALSE, 3, FALSE, 4, FALSE, 5, str, -1); } g_free (str); } } } } } /*! \fn void chains_set_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief Chains tree view set color and Pango markup in tree view \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void chains_set_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int steps = GPOINTER_TO_INT(data); set_renderer_markup (mod, iter, renderer, (steps) ? 6 : 5); } /*! \fn GtkWidget * create_chains_tree (project * this_proj, gboolean fill_this) \brief create the chain(s) search tree store \param this_proj the target project \param fill_this 1 = yes, 0 = no */ GtkWidget * create_chains_tree (project * this_proj, gboolean fill_this) { int i, j, k; GtkTreeViewColumn * chains_col[7]; GtkCellRenderer * chains_cell[7]; gchar * ctitle[7]={i18n("MD step"), i18n("Chain(s) size"), i18n("Id."), i18n("Show"), i18n("Label"), i18n("Pick"), i18n("Atoms")}; gchar * ctype[7]={"text", "text", "text", "active", "active", "active", "text"}; GType col_type_ms[7]={G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING}; GType col_type_ss[6]={G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING}; coord_edition * coord = this_proj -> modelgl -> coord_win; j = (this_proj -> steps > 1) ? 1: 0; k = (this_proj -> steps > 1) ? 0: 1; coord -> chains_model = gtk_tree_store_newv (6+j, (j) ? col_type_ms : col_type_ss); if (fill_this) fill_chains_model (coord -> chains_model, this_proj); GtkWidget * chains_tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL(coord -> chains_model)); for (i=0; i<6+j; i++) { if (i < 2+j || i > 4+j) { chains_cell[i] = gtk_cell_renderer_text_new (); } else { chains_cell[i] = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(chains_cell[i]), "toggled", G_CALLBACK(on_select_chains), & this_proj -> modelgl -> colorp[i][0]); } gtk_cell_renderer_set_fixed_size (chains_cell[i], -1, 25); chains_col[i] = gtk_tree_view_column_new_with_attributes (_(ctitle[i+k]), chains_cell[i], ctype[i+k], i, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(chains_tree), chains_col[i]); gtk_tree_view_column_set_alignment (chains_col[i], 0.5); gtk_tree_view_column_set_cell_data_func (chains_col[i], chains_cell[i], rings_set_visible, & this_proj -> modelgl -> colorp[i][0], NULL); if (i > 4+j) gtk_tree_view_column_set_cell_data_func (chains_col[i], chains_cell[i], chains_set_markup, GINT_TO_POINTER(j), NULL); } return chains_tree; } /*! \fn void add_this_chain_to_search_tree (project * this_proj) \brief add chain in the search tree based on chain length and id \param this_proj the target project */ void add_this_chain_to_search_tree (project * this_proj) { GtkTreeIter step_level, size_level, chain_level; GtkTreeIter new_level; coord_edition * coord = this_proj -> modelgl -> coord_win; GtkTreeStore * store = (GtkTreeStore *) coord -> chains_model; GtkTreeModel * mod = GTK_TREE_MODEL(coord -> chains_model); gboolean valid; gboolean insert = TRUE; int g, h, i, j, k, l, m; gchar * str; int prepend = 0; if (this_proj -> steps > 1) { valid = gtk_tree_model_get_iter_first(mod, & step_level); while (valid) { gtk_tree_model_get (mod, & step_level, 0, & g, -1); if (g > coord -> cst) { prepend = 1; valid = FALSE; } else if (g == coord -> cst) { if (gtk_tree_model_iter_has_child (mod, &step_level)) { h = gtk_tree_model_iter_n_children (mod, &step_level); for (i=0; i coord -> csz) { prepend = 3; valid = FALSE; break; } else if (j == coord -> csz) { if (gtk_tree_model_iter_has_child (mod, &size_level)) { k = gtk_tree_model_iter_n_children (mod, &size_level); for (l=0; l coord -> ch) { prepend = 5; valid = FALSE; break; } else if (m == coord -> ch) { insert = valid = FALSE; break; } } } if (valid) { prepend = 4; valid = FALSE; break; } } } } } if (valid) { prepend = 2; valid = FALSE; } } } else { valid = gtk_tree_model_iter_next(mod, & step_level); } } if (insert) { str = chain_atoms (this_proj, coord -> cst-1, coord -> csz-1, coord -> ch-1, FALSE); switch (prepend) { case 0: gtk_tree_store_append (store, & step_level, NULL); gtk_tree_store_set (store, & step_level, 0, coord -> cst, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & size_level, & step_level); gtk_tree_store_set (store, & size_level, 0, 0, 1, coord -> csz, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & chain_level, & size_level); gtk_tree_store_set (store, & chain_level, 0, -coord -> cst, 1, -coord -> csz, 2, coord -> ch, 3, FALSE, 4, FALSE, 5, FALSE, 6, str, -1); break; case 1: gtk_tree_store_insert_before (store, & new_level, NULL, & step_level); gtk_tree_store_set (store, & new_level, 0, coord -> cst, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & size_level, & new_level); gtk_tree_store_set (store, & size_level, 0, 0, 1, coord -> csz, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & chain_level, & size_level); gtk_tree_store_set (store, & chain_level, 0, -coord -> cst, 1, -coord -> csz, 2, coord -> ch, 3, FALSE, 4, FALSE, 5, FALSE, 6, str, -1); break; case 2: gtk_tree_store_insert_after (store, & new_level, & step_level, & size_level); gtk_tree_store_set (store, & new_level, 0, 0, 1, coord -> csz, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & chain_level, & new_level); gtk_tree_store_set (store, & chain_level, 0, -coord -> cst, 1, -coord -> csz, 2, coord -> ch, 3, FALSE, 4, FALSE, 5, FALSE, 6, str, -1); break; case 3: gtk_tree_store_insert_before (store, & new_level, & step_level, & size_level); gtk_tree_store_set (store, & new_level, 0, 0, 1, coord -> csz, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & chain_level, & new_level); gtk_tree_store_set (store, & chain_level, 0, -coord -> cst, 1, -coord -> csz, 2, coord -> ch, 3, FALSE, 4, FALSE, 5, FALSE, 6, str, -1); break; case 4: gtk_tree_store_insert_after (store, & new_level, & size_level, & chain_level); gtk_tree_store_set (store, & new_level, 0, -coord -> cst, 1, -coord -> csz, 2, coord -> ch, 3, FALSE, 4, FALSE, 5, FALSE, 6, str, -1); break; case 5: gtk_tree_store_insert_before (store, & new_level, & size_level, & chain_level); gtk_tree_store_set (store, & new_level, 0, -coord -> cst, 1, -coord -> csz, 2, coord -> ch, 3, FALSE, 4, FALSE, 5, FALSE, 6, str, -1); break; } g_free (str); } } else { valid = gtk_tree_model_get_iter_first(mod, & size_level); while (valid) { gtk_tree_model_get (mod, & size_level, 0, & i, -1); if (i > coord -> csz) { prepend = 1; valid = FALSE; } else if (i == coord -> csz) { if (gtk_tree_model_iter_has_child (mod, &size_level)) { j = gtk_tree_model_iter_n_children (mod, &size_level); for (k=0; k coord -> ch) { prepend = 2; valid = FALSE; break; } else if (l == coord -> ch) { insert = valid = FALSE; break; } } } if (valid) { prepend = 3; valid = FALSE; } } } else { valid = gtk_tree_model_iter_next(mod, & step_level); } } if (insert) { str = chain_atoms (this_proj, coord -> cst-1, coord -> csz-1, coord -> ch-1, FALSE); switch (prepend) { case 0: gtk_tree_store_append (store, & size_level, NULL); gtk_tree_store_set (store, & size_level, 0, coord -> csz, 1, 0, 2, 0, 3, 0, 4, 0, -1); gtk_tree_store_append (store, & chain_level, & size_level); gtk_tree_store_set (store, & chain_level, 0, -coord -> csz, 1, coord -> ch, 2, FALSE, 3, FALSE, 4, FALSE, 5, str, -1); break; case 1: gtk_tree_store_insert_before (store, & new_level, NULL, & size_level); gtk_tree_store_set (store, & new_level, 0, coord -> csz, 1, 0, 2, 0, 3, 0, 4, 0, -1); gtk_tree_store_append (store, & chain_level, & new_level); gtk_tree_store_set (store, & chain_level, 0, -coord -> csz, 1, coord -> ch, 2, FALSE, 3, FALSE, 4, FALSE, 5, str, -1); break; case 2: gtk_tree_store_insert_before (store, & new_level, & size_level, & chain_level); gtk_tree_store_set (store, & new_level, 0, -coord -> csz, 1, coord -> ch, 2, FALSE, 3, FALSE, 4, FALSE, 5, str, -1); break; case 3: gtk_tree_store_insert_after (store, & new_level, & size_level, & chain_level); gtk_tree_store_set (store, & new_level, 0, -coord -> csz, 1, coord -> ch, 2, FALSE, 3, FALSE, 4, FALSE, 5, str, -1); break; } g_free (str); } } } /*! \fn int get_cmin (project * this_proj, int step) \brief get chain(s) min size for the MD step \param this_proj the target project \param step the MD step */ int get_cmin (project * this_proj, int step) { int i, j; for (i=0; i coord -> totcoord[9]; i++) { j = this_proj -> coord -> geolist[9][0][i]; if (this_proj -> modelgl -> num_chains[step-1][j-1]) break; } return j; } /*! \fn int get_cmax (project * this_proj, int step) \brief get chain(s) max size for the MD step \param this_proj the target project \param step the MD step */ int get_cmax (project * this_proj, int step) { int i, j; for (i=this_proj -> coord -> totcoord[9]-1; i>-1; i--) { j = this_proj -> coord -> geolist[9][0][i]; if (this_proj -> modelgl -> num_chains[step-1][j-1]) break; } return j; } /*! \fn int get_chain_size_index (project * this_proj, int s, int r) \brief NOT USED ! \param this_proj the target project \param s \param r * int get_chain_size_index (project * this_proj, int s, int r) { int i, j; for (i=0; i coord -> totcoord[9]; i++) { j = this_proj -> coord -> geolist[9][0][i]; if (j == r) break; } return i; } */ /*! \fn G_MODULE_EXPORT void update_chains_search (GtkEntry * res, gpointer data) \brief update the chain(s) search widget \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_chains_search (GtkEntry * res, gpointer data) { tint * dat = (tint * )data; gchar * str; const gchar * m = entry_get_text (res); int i, j; int v = (int)string_to_double ((gpointer)m); project * this_proj = get_project_by_id(dat -> a); coord_edition * coord = this_proj -> modelgl -> coord_win; switch (dat -> b) { case 0: if (v > 0 && v < this_proj -> steps+1) { if (v != coord -> cst) { coord -> cst = v; coord -> csz = coord -> ch = -1; for (j=1; j<3; j++) gtk_label_set_text (GTK_LABEL(coord -> chlab[j]), ""); } } else { coord -> cst = coord -> csz = coord -> ch = -1; } if (coord -> cst > 0) { update_entry_int(res, coord -> cst); str = g_strdup_printf ("∈ [%d - %d]", get_cmin(this_proj, coord -> cst), get_cmax(this_proj, coord -> cst)); gtk_label_set_text (GTK_LABEL(coord -> chlab[1]), str); g_free (str); } else { update_entry_text (res, ""); for (j=1; j<3; j++) gtk_label_set_text (GTK_LABEL(coord -> chlab[j]), ""); } break; case 1: if (coord -> cst > -1) { i = get_cmin(this_proj, coord -> cst); j = get_cmax(this_proj, coord -> cst); if (v >= i && v <= j) { if (v != coord -> csz) { if (this_proj -> modelgl -> num_chains[coord -> cst-1][coord -> csz-1]) { coord -> csz = v; coord -> ch = -1; gtk_label_set_text (GTK_LABEL(coord -> chlab[2]), ""); } else { coord -> csz = coord -> ch = -1; } } } } else { coord -> csz = coord -> ch = -1; } if (coord -> csz > 0) { update_entry_int(res, coord -> csz); str = g_strdup_printf ("∈ [1 - %d]", this_proj -> modelgl -> num_chains[coord -> cst-1][coord -> csz-1]); gtk_label_set_text (GTK_LABEL(coord -> chlab[2]), str); g_free (str); } else { update_entry_text (res, ""); gtk_label_set_text (GTK_LABEL(coord -> chlab[2]), ""); } break; case 2: if (coord -> cst > -1 && coord -> csz > -1) { if (v > 0 && v < this_proj -> modelgl -> num_chains[coord -> cst-1][coord -> csz-1]+1) { coord -> ch = v; } else { coord -> ch = -1; } } else { coord -> ch = -1; } if (coord -> ch > 0) { update_entry_int(res, coord -> ch); } else { update_entry_text (res, ""); } break; } if (coord -> cst > 0 && coord -> csz > 0 && coord -> ch > 0) { add_this_chain_to_search_tree (this_proj); } } /*! \fn GtkWidget * create_chains_search (project * this_proj) \brief create the chain(s) search widget \param this_proj the target project */ GtkWidget * create_chains_search (project * this_proj) { GtkWidget * chains_search = create_vbox (BSEP); gchar * str = g_strdup_printf (_("Too many chains in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for chain(s) individually:\n")); add_box_child_start (GTK_ORIENTATION_VERTICAL, chains_search, markup_label(str, 200, -1, 0.5, 0.5), FALSE, FALSE, 10); g_free (str); gchar * search_item[3]={i18n("MD step:"), i18n("Chain size:"), i18n("Chain Id.:")}; int i, j; GtkWidget * hbox; GtkWidget * entry; j = (this_proj -> steps) > 1 ? 0 : 1; coord_edition * coord = this_proj -> modelgl -> coord_win; coord -> cst = 1; for (i=j; i<3; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, chains_search, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(search_item[i]), 100, -1, 0.0, 0.5), FALSE, FALSE, 20); entry = create_entry (G_CALLBACK(update_chains_search), 100, 15, FALSE, & this_proj -> modelgl -> colorp[i][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox,entry, FALSE, FALSE, 0); if (i==0) { str = g_strdup_printf ("∈ [1 - %d]", this_proj -> steps); coord -> chlab[i] = markup_label(str, 50, -1, 0.0, 0.5); g_free (str); } else if (i == 1) { str = g_strdup_printf ("∈ [%d - %d]", get_cmin(this_proj, coord -> cst), get_cmax(this_proj, coord -> cst)); coord -> chlab[i] = markup_label(str, 50, -1, 0.0, 0.5); g_free (str); } else { coord -> chlab[i] = markup_label("", 50, -1, 0.0, 0.5); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, coord -> chlab[i], FALSE, FALSE, 5); } add_box_child_start (GTK_ORIENTATION_VERTICAL, chains_search, markup_label(_("Search result(s)"), 200, -1, 0.5, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, chains_search, create_chains_tree (this_proj, FALSE), FALSE, FALSE, 0); return chains_search; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_save_chains_to_file (GtkNativeDialog * info, gint response_id, gpointer data) \brief save chains data to file: run the dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_save_chains_to_file (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_save_chains_to_file (GtkDialog * info, gint response_id, gpointer data) \brief save chains data to file: run the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_save_chains_to_file (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { gchar * chains_file = file_chooser_get_file_name (chooser); // Save data to file here ! if (chains_file) { tint * dat = (tint *)data; project * this_proj = get_project_by_id (dat -> a); if (this_proj -> coord -> totcoord[9]) { FILE * fp = fopen (chains_file, dfi[1]); gchar * str; if (fp) { fprintf (fp, _("# This file contains the list of all chains in the %s model\n\n"), prepare_for_title(this_proj -> name)); int h, i, j, k, l; for (h=0; h < this_proj -> steps; h++) { i = h+1; if (this_proj -> steps > 1) fprintf (fp, _("Step N°%d\n"), i); for (i=0; i < this_proj -> coord -> totcoord[9]; i++) { j = this_proj -> coord -> geolist[9][0][i]; fprintf (fp, (this_proj -> steps > 1) ? _("\n\tChain(s) of size %d atoms\n") : _("\nChain(s) of size %d atoms\n"), j); k = this_proj -> modelgl -> num_chains[h][j-1]; // ring size for (l=0; l steps > 1) ? "\t\tN°%d\t:\t%s\n" : "\tN°%d\t:\t%s\n", l+1, str); g_free (str); } } } fclose (fp); } else { str = g_strdup_printf (_("Impossible to open file: %s"), chains_file); show_error (str, 0, this_proj -> modelgl -> coord_win -> win); g_free (str); } } } } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } /*! \fn G_MODULE_EXPORT void save_chains_to_file (GtkButton * but, gpointer data) \brief save chains data to file \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void save_chains_to_file (GtkButton * but, gpointer data) { #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif info = create_file_chooser (_("Save atoms in chains to file"), GTK_WINDOW(MainWindow), GTK_FILE_CHOOSER_ACTION_SAVE, _("Save")); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif file_chooser_set_current_folder (chooser); gtk_file_chooser_set_current_name (chooser, "chains.dat"); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_save_chains_to_file), data); #else run_this_gtk_dialog (info, G_CALLBACK(run_save_chains_to_file), data); #endif } /*! \fn GtkWidget * chains_tab (glwin * view) \brief create the chain(s) tab for the advanced environments window \param view the target glwin */ GtkWidget * chains_tab (glwin * view) { GtkWidget * chains = create_vbox (0); GtkWidget * scroll = create_scroll (chains, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (chains, TRUE); gtk_widget_set_vexpand (chains, TRUE); int h, i, j, k; project * this_proj = get_project_by_id(view -> proj); k = 0; for (h=0; h < this_proj -> steps; h++) { for (i=0; i < this_proj -> coord -> totcoord[9]; i++) { j = this_proj -> coord -> geolist[9][0][i]; k += this_proj -> modelgl -> num_chains[h][j-1]; } } if (k < GTK_LIMIT) { add_container_child (CONTAINER_SCR, scroll, create_chains_tree (this_proj, TRUE)); } else { add_container_child (CONTAINER_SCR, scroll, create_chains_search (this_proj)); } GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, chains, hbox, FALSE, FALSE, 2); GtkWidget * hhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, TRUE, TRUE, 100); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, create_button(_("Save to file"), IMG_NONE, NULL, 50, -1, GTK_RELIEF_NORMAL, G_CALLBACK(save_chains_to_file), & view -> colorp[0][0]), TRUE, TRUE, 40); return chains; } atomes_1.3.1/src/opengl/win/w_axis.c0000664000175000017500000010214315212624223017014 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_axis.c * @short Functions to create the axis parameters edition window * @author Sébastien Le Roux */ /* * This file: 'w_axis.c' * * Contains: * - The functions to create the axis parameters edition window * * List of functions: G_MODULE_EXPORT gboolean scroll_set_axis_position (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void activate_pos_box (glwin * view, gboolean val); void init_axis_colors (ColRGBA axcol[3], axis_edition * axis_win); void axis_position_has_changed (gpointer data, double v); G_MODULE_EXPORT void update_axis_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_axis_length (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_axis_template (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_axis_combo_style (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_show_axis_toggle (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_show_axis_toggle (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void use_axis_default_positions (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void use_axis_default_positions (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void use_axis_default_colors (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void use_axis_default_colors (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_axis_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_axis_position (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_axis_labels (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_axis_labels (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_axis_title (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void axis_advanced (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void axis_advanced (GtkWidget * widg, gpointer data); G_MODULE_EXPORT gboolean on_axis_delete (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean on_axis_delete (GtkWidget * widg, GdkEvent * event, gpointer data); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #include "preferences.h" #define AXIS_TEMPLATES 5 double axis_init_color[3][3] = {{0.0, 0.0, 1.0},{0.0, 1.0, 0.0},{1.0, 0.0, 0.0}}; double axis_range[3][2] = {{0.0,100.0}, {0.0, 100.0}, {0.0, 100.0}}; extern gboolean from_box_or_axis; extern G_MODULE_EXPORT void set_labels_render (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void set_labels_font (GtkFontButton * fontb, gpointer data); #ifdef GTK4 extern G_MODULE_EXPORT void set_labels_scale (GtkCheckButton * but, gpointer data); #else extern G_MODULE_EXPORT void set_labels_scale (GtkToggleButton * but, gpointer data); #endif /*! \fn G_MODULE_EXPORT void update_axis_parameter (GtkEntry * res, gpointer data) \brief update axis parameter callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_axis_parameter (GtkEntry * res, gpointer data) { glwin * view; int axis_type; double * axis_line; double * axis_rad; #ifdef GTK3 gchar * str; #endif // GTK3 const gchar * n = entry_get_text (res); double v = string_to_double ((gpointer)n); if (preferences) { axis_type = tmp_axis -> axis; axis_line = & tmp_axis -> line; axis_rad = & tmp_axis -> rad; } else { view = (glwin *)data; axis_type = view -> anim -> last -> img -> xyz -> axis; axis_line = & view -> anim -> last -> img -> xyz -> line; axis_rad = & view -> anim -> last -> img -> xyz -> rad; } if (axis_type == CYLINDERS) { if (v > 0.0) * axis_rad = v; v = * axis_rad; if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Radius [ %f Å ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_box_axis[1][6]), str); g_free (str); #endif } } else { if (v > 0.0) * axis_line = v; v = * axis_line; if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("Width [ %f pts ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_box_axis[1][4]), str); g_free (str); #endif } } update_entry_double (res, v); if (! preferences) { view -> create_shaders[MAXIS] = TRUE; update (view); #ifdef GTK4 update_menu_bar (view); #endif } } /*! \fn G_MODULE_EXPORT void update_axis_length (GtkEntry * res, gpointer data) \brief update axis length callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_axis_length (GtkEntry * res, gpointer data) { glwin * view; double * axis_length; #ifdef GTK3 gchar * str; #endif // GTK3 const gchar * n = entry_get_text (res); double v = string_to_double ((gpointer)n); if (preferences) { axis_length = & tmp_axis -> length; } else { view = (glwin *)data; axis_length = & view -> anim -> last -> img -> xyz -> length; } if (v > 0.0) * axis_length = v; v = * axis_length; update_entry_double (res, v); if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf (_("_Radius [ %f Å ]"), v); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_box_axis[1][7]), str); g_free (str); #endif view -> create_shaders[MAXIS] = TRUE; update (view); #ifdef GTK4 update_menu_bar (view); #endif } } /*! \fn void activate_pos_box (glwin * view, gboolean val) \brief update axis position data \param view the target glwin \param val template widget sensitivity */ void activate_pos_box (glwin * view, gboolean val) { int i; if (val) { i = (preferences) ? tmp_axis -> t_pos : view -> anim -> last -> img -> xyz -> t_pos; } else { i = NONE; } combo_set_active ((preferences) ? pref_axis_win -> templates : view -> axis_win -> templates, i); widget_set_sensitive ((preferences) ? pref_axis_win -> templates : view -> axis_win -> templates, val); } /*! \fn G_MODULE_EXPORT void set_axis_template (GtkComboBox * box, gpointer data) \brief set axis position callback \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_template (GtkComboBox * box, gpointer data) { int i = combo_get_active ((GtkWidget *)box); // The next line is mandatory for GTK4 if (i < 0) return; glwin * view; if (preferences) { tmp_axis -> t_pos = i; } else { view = (glwin *)data; #ifdef GTK4 view -> anim -> last -> img -> xyz -> t_pos = i; #endif } if (! preferences) { #ifdef GTK4 view -> create_shaders[MAXIS] = TRUE; update (view); update_menu_bar (view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][8+i], TRUE); #endif } } /*! \fn G_MODULE_EXPORT void set_axis_combo_style (GtkComboBox * box, gpointer data) \brief set axis style callback \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_combo_style (GtkComboBox * box, gpointer data) { glwin * view; axis_edition * the_axis; int * axis; if (preferences) { the_axis = pref_axis_win; axis = & tmp_axis -> axis; } else { view = (glwin *)data; the_axis = view -> axis_win; axis = & view -> anim -> last -> img -> xyz -> axis; } switch (combo_get_active ((GtkWidget *)box)) { case 0: * axis = WIREFRAME; hide_the_widgets (the_axis -> radius_box); show_the_widgets (the_axis -> width_box); if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check from_box_or_axis = TRUE; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][1], TRUE); from_box_or_axis = FALSE; #endif } break; case 1: * axis = CYLINDERS; hide_the_widgets (the_axis -> width_box); show_the_widgets (the_axis -> radius_box); if (! preferences) { #ifdef GTK3 // GTK3 Menu Action To Check from_box_or_axis = TRUE; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][2], TRUE); from_box_or_axis = FALSE; #endif } break; } if (! preferences) { view -> create_shaders[MAXIS] = TRUE; update (view); #ifdef GTK4 update_menu_bar (view); #endif } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_show_axis_toggle (GtkCheckButton * but, gpointer data) \brief show / hide axis callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_axis_toggle (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_show_axis_toggle (GtkToggleButton * but, gpointer data) \brief show / hide axis callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_axis_toggle (GtkToggleButton * but, gpointer data) #endif { gboolean val; glwin * view; axis_edition * the_axis; int * axis_type; if (preferences) { the_axis = pref_axis_win; axis_type = & tmp_axis -> axis; } else { view = (glwin *)data; the_axis = view -> axis_win; #ifdef GTK4 axis_type = & view -> anim -> last -> img -> xyz -> axis; #endif // GTK4 } val = button_get_status ((GtkWidget *)but); #ifdef GTK3 from_box_or_axis = TRUE; #endif // GTK3 if (val) { if (! preferences) { #ifdef GTK4 * axis_type = WIREFRAME; #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][0], TRUE); #endif } else { * axis_type = WIREFRAME; } if (the_axis -> styles && GTK_IS_WIDGET(the_axis -> styles)) combo_set_active (the_axis -> styles, WIREFRAME-1); } else { if (! preferences) { #ifdef GTK4 * axis_type = NONE; #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][0], FALSE); #endif } else { * axis_type = NONE; } if (the_axis -> styles && GTK_IS_WIDGET(the_axis -> styles)) combo_set_active (the_axis -> styles, NONE); } #ifdef GTK3 from_box_or_axis = FALSE; #endif // GTK3 widget_set_sensitive (the_axis -> axis_data, val); #ifdef GTK4 if (! preferences) { view -> create_shaders[MAXIS] = TRUE; update (view); update_menu_bar (view); } #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void use_axis_default_positions (GtkCheckButton * but, gpointer data) \brief use axis default colors callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void use_axis_default_positions (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void use_axis_default_positions (GtkToggleButton * but, gpointer data) \brief use axis default colors callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void use_axis_default_positions (GtkToggleButton * but, gpointer data) #endif { gboolean val; glwin * view = NULL; axis_edition * the_axis; int * pos; if (preferences) { the_axis = pref_axis_win; pos = & tmp_axis -> t_pos; } else { view = (glwin *)data; the_axis = view -> axis_win; pos = & view -> anim -> last -> img -> xyz -> t_pos; } val = button_get_status ((GtkWidget *)but); widget_set_sensitive (the_axis -> axis_position_box, ! val); if (val) { #ifdef GTK4 * pos = 2; #else // GTK3 Menu Action To Check if (! preferences) gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][10], TRUE); #endif } else { * pos = CUSTOM; #ifdef GTK3 int i; if (! preferences) { for (i=8; i ogl_box_axis[1][i], FALSE); } } #endif } activate_pos_box (view, val); if (! preferences) { view -> create_shaders[MAXIS] = TRUE; update (view); #ifdef GTK4 update_menu_bar (view); #endif } } /*! \fn void init_axis_colors (ColRGBA axcol[3], axis_edition * axis_win) \brief initialize axis colors \param axcol the target axis colors \param view the target axis_edition data structure */ void init_axis_colors (ColRGBA axcol[3], axis_edition * axis_win) { int i; for (i = 0; i < 3; i++) { axcol[i].red = axis_init_color[i][0]; axcol[i].green = axis_init_color[i][1]; axcol[i].blue = axis_init_color[i][2]; axcol[i].alpha = 1.0; GdkRGBA col = colrgba_togtkrgba (axcol[i]); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(axis_win -> axis_color_title[i]), & col); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void use_axis_default_colors (GtkCheckButton * but, gpointer data) \brief use axis default color callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void use_axis_default_colors (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void use_axis_default_colors (GtkToggleButton * but, gpointer data) \brief use axis default color callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void use_axis_default_colors (GtkToggleButton * but, gpointer data) #endif { int i; gboolean val; glwin * view = NULL; axis_edition * the_axis; ColRGBA * col; if (preferences) { the_axis = pref_axis_win; col = tmp_axis -> color; } else { view = (glwin *)data; the_axis = view -> axis_win; col = view -> anim -> last -> img -> xyz -> color; } val = button_get_status ((GtkWidget *)but); if (val) { if (col != NULL) { init_axis_colors ((preferences) ? tmp_axis -> color : view -> anim -> last -> img -> xyz -> color, the_axis); if (! preferences) { g_free (view -> anim -> last -> img -> xyz -> color); view -> anim -> last -> img -> xyz -> color = NULL; } else { g_free (tmp_axis -> color); tmp_axis -> color = NULL; } } } else { if (! preferences) { view -> anim -> last -> img -> xyz -> color = g_malloc0(3*sizeof*view -> anim -> last -> img -> xyz -> color); init_axis_colors (view -> anim -> last -> img -> xyz -> color, the_axis); } else { tmp_axis -> color = g_malloc0(3*sizeof*tmp_axis -> color); init_axis_colors (tmp_axis -> color, the_axis); } } for (i=0; i<3; i++) widget_set_sensitive (the_axis -> axis_color_title[i], ! val); if (! preferences) { view -> create_shaders[MAXIS] = TRUE; update (view); } } /*! \fn G_MODULE_EXPORT void set_axis_color (GtkColorChooser * colob, gpointer data) \brief change axis color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_color (GtkColorChooser * colob, gpointer data) { tint * dat = (tint *)data; if (! preferences) { glwin * view = get_project_by_id(dat -> a) -> modelgl; view -> anim -> last -> img -> xyz -> color[dat -> b] = get_button_color (colob); view -> create_shaders[MAXIS] = TRUE; update (view); } else { tmp_axis -> color[dat -> b] = get_button_color (colob); } } /*! \fn void axis_position_has_changed (gpointer data, double v) \brief change axis position \param data the associated data pointer \param v the new value */ void axis_position_has_changed (gpointer data, double v) { tint * dat = (tint *)data; if (! preferences) { glwin * view = get_project_by_id(dat -> a) -> modelgl; if (v >= 0.0 && v <= 100.0) view -> anim -> last -> img -> xyz -> c_pos[dat -> b] = v; view -> create_shaders[MAXIS] = TRUE; update (view); #ifdef GTK4 update_menu_bar (view); #endif } else { if (v >= 0.0 && v <= 100.0) tmp_axis -> c_pos[dat -> b] = v; } } /*! \fn G_MODULE_EXPORT gboolean scroll_set_axis_position (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief change axis position - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_axis_position (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { axis_position_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_axis_position (GtkRange * range, gpointer data) \brief change axis position - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_position (GtkRange * range, gpointer data) { axis_position_has_changed (data, gtk_range_get_value (range)); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_axis_labels (GtkCheckButton * but, gpointer data) \brief set axis labels callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_labels (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_axis_labels (GtkToggleButton * but, gpointer data) \brief set axis labels callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_labels (GtkToggleButton * but, gpointer data) #endif { gboolean val; glwin * view = NULL; axis_edition * the_axis; int * axis_labels; if (preferences) { the_axis = pref_axis_win; axis_labels = & tmp_axis -> labels; } else { view = (glwin *)data; the_axis = view -> axis_win; axis_labels = & view -> anim -> last -> img -> xyz -> labels; } val = button_get_status ((GtkWidget *)but); * axis_labels = val; int i; for (i=0; i<2; i++) widget_set_sensitive (the_axis -> axis_label_box[i], val); if (! preferences) { view -> create_shaders[MAXIS] = TRUE; update (view); } } /*! \fn G_MODULE_EXPORT void set_axis_title (GtkEntry * entry, gpointer data) \brief set axis title callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_title (GtkEntry * entry, gpointer data) { tint * dat = (tint *)data; glwin * view = NULL; const gchar * m = entry_get_text (entry); if (preferences) { if (tmp_axis -> title[dat -> b]) g_free (tmp_axis -> title[dat -> b]); tmp_axis -> title[dat -> b] = g_strdup_printf ("%s", m); } else { view = get_project_by_id (dat ->a) -> modelgl; if (view -> anim -> last -> img -> xyz -> title[dat -> b]) g_free (view -> anim -> last -> img -> xyz -> title[dat -> b]); view -> anim -> last -> img -> xyz -> title[dat -> b] = g_strdup_printf ("%s", m); view -> create_shaders[MAXIS] = TRUE; update (view); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean on_axis_delete (GtkWindow * widg, gpointer data) \brief axis window delete event - GTK4 \param widg \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_axis_delete (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_axis_delete (GtkWidget * widg, GdkEvent * event, gpointer data) \brief axis window delete event - GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_axis_delete (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { glwin * view = (glwin *)data; view -> axis_win -> win = destroy_this_widget (view -> axis_win -> win); g_free (view -> axis_win); view -> axis_win = NULL; return TRUE; } /*! \fn G_MODULE_EXPORT void axis_advanced (GtkWidget * widg, gpointer data) \brief create the axis advanced parameters window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void axis_advanced (GtkWidget * widg, gpointer data) { glwin * view; axis_edition * the_axis; int axis_type; double axis_line; double axis_rad; double axis_length; int axis_labels; int axis_tpos; GLfloat * axis_cpos; ColRGBA * axis_color = NULL; screen_label * axis_label; gboolean build_win = TRUE; int i; if (preferences) { the_axis = pref_axis_win; axis_type = tmp_axis -> axis; axis_line = tmp_axis -> line; axis_rad = tmp_axis -> rad; axis_tpos = tmp_axis -> t_pos; axis_length = tmp_axis -> length; axis_labels = tmp_axis -> labels; axis_color = tmp_axis -> color; axis_cpos = tmp_axis -> c_pos; axis_label = tmp_label[2]; } else { view = (glwin *)data; if (view -> axis_win) { if (view -> axis_win -> win && GTK_IS_WIDGET(view -> axis_win -> win)) { build_win = FALSE; show_the_widgets (view -> axis_win -> win); } } if (build_win) { view -> axis_win = g_malloc0(sizeof*view -> axis_win); the_axis = view -> axis_win; axis_type = view -> anim -> last -> img -> xyz -> axis; axis_line = view -> anim -> last -> img -> xyz -> line; axis_rad = view -> anim -> last -> img -> xyz -> rad; axis_tpos = view -> anim -> last -> img -> xyz -> t_pos; axis_length = view -> anim -> last -> img -> xyz -> length; axis_labels = view -> anim -> last -> img -> xyz -> labels; axis_color = view -> anim -> last -> img -> xyz -> color; axis_cpos = view -> anim -> last -> img -> xyz -> c_pos; axis_label = & view -> anim -> last -> img -> labels[2]; } } if (build_win) { GtkWidget * vbox = create_vbox (BSEP); if (preferences) { the_axis -> win = create_vbox (BSEP); adv_box (the_axis -> win, _("Axis settings"), 10, 120, 0.0); GtkWidget * hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbox, FALSE, FALSE, 60); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_axis -> win, hbox, FALSE, FALSE, 10); } else { the_axis -> win = create_vbox (BSEP); gchar * str = g_strdup_printf (_("%s - axis settings"), get_project_by_id(view -> proj)->name); the_axis -> win = create_win (str, view -> win, FALSE, FALSE); g_free (str); add_container_child (CONTAINER_WIN, the_axis -> win, vbox); } GtkWidget * box; gboolean ac; if (axis_type != NONE) { ac = TRUE; } else { ac = FALSE; } the_axis -> show_hide = check_button (_("Show/Hide axis"), 100, 20, ac, G_CALLBACK(set_show_axis_toggle), data); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, the_axis -> show_hide, FALSE, FALSE, 5); the_axis -> axis_data = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, the_axis -> axis_data, TRUE, TRUE, 0); widget_set_sensitive (the_axis -> axis_data, ac); GtkWidget * pos_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_axis -> axis_data, pos_box, FALSE, FALSE, 5); if (axis_tpos != CUSTOM) { ac = TRUE; } else { ac = FALSE; } gchar * axis_template[AXIS_TEMPLATES] = {i18n("Top Right Corner *"), i18n("Top Left Corner *"), i18n("Bottom Right Corner *"), i18n("Bottom Left Corner *"), i18n("Center **")}; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, pos_box, check_button (_("Use template positions"), 120, 30, ac, G_CALLBACK(use_axis_default_positions), data), FALSE, FALSE, 0); the_axis -> templates = create_combo (); for (i=0; i < AXIS_TEMPLATES; i++) { combo_text_append (the_axis -> templates, _(axis_template[i])); } combo_set_markup (the_axis -> templates); activate_pos_box (view, ac); gtk_widget_set_size_request (the_axis -> templates, 150, -1); g_signal_connect (G_OBJECT (the_axis -> templates), "changed", G_CALLBACK(set_axis_template), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, pos_box, the_axis -> templates, FALSE, FALSE, 10); GtkWidget * chbox; GtkWidget * ax_name; the_axis -> axis_position_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_axis -> axis_data, the_axis -> axis_position_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_axis -> axis_position_box, markup_label(_("Please choose axis position:"), -1, -1, 0.0, 0.5), FALSE, TRUE, 5); // use custom position gchar * al[3] = {i18n("% of the window width"), i18n("% of the window height"), i18n("% of the window depth")}; gchar * axis_symbols[3] = {"X", "Y", "Z"}; for (i=0; i<2; i++) { chbox = create_hbox (0); ax_name = gtk_label_new (axis_symbols[i]); gtk_widget_set_size_request (ax_name, 20, -1); gtk_label_align (ax_name, 0.5, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, ax_name, FALSE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, create_hscale (axis_range[i][0], axis_range[i][1], 1.0, axis_cpos[i], GTK_POS_LEFT, 0, 170, G_CALLBACK(set_axis_position), G_CALLBACK(scroll_set_axis_position), (preferences) ? & pref_pointer[i] : & view -> colorp[i][0]), FALSE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_axis -> axis_position_box, chbox, FALSE, TRUE, 5); ax_name = gtk_label_new (_(al[i])); gtk_label_align (ax_name, -1, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, ax_name, FALSE, TRUE, 0); } widget_set_sensitive (the_axis -> axis_position_box, ! ac); box = abox (the_axis -> axis_data, _("Length [Å] "), 0); the_axis -> length = create_entry (G_CALLBACK(update_axis_length), 150, 10, FALSE, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, the_axis -> length, FALSE, FALSE, 0); update_entry_double (GTK_ENTRY(the_axis -> length), axis_length); box = abox (the_axis -> axis_data, _("Style "), 0); the_axis -> styles = create_combo (); combo_text_append (the_axis -> styles, _("Wireframes")); combo_text_append (the_axis -> styles, _("Cylinders")); if (axis_type == NONE) i = NONE; if (axis_type == WIREFRAME) i = 0; if (axis_type == CYLINDERS) i = 1; combo_set_active (the_axis -> styles, i); gtk_widget_set_size_request (the_axis -> styles, 150, -1); g_signal_connect (G_OBJECT (the_axis -> styles), "changed", G_CALLBACK(set_axis_combo_style), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, the_axis -> styles, FALSE, FALSE, 0); the_axis -> width_box = abox (the_axis -> axis_data, _("Line width [pts] "), 0); the_axis -> width = create_entry (G_CALLBACK(update_axis_parameter), 150, 10, FALSE, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, the_axis -> width_box, the_axis -> width, FALSE, FALSE, 0); update_entry_double (GTK_ENTRY(the_axis -> width), axis_line); the_axis -> radius_box = abox (the_axis -> axis_data, _("Cylinder radius [Å] "), 0); the_axis -> radius = create_entry (G_CALLBACK(update_axis_parameter), 150, 10, FALSE, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, the_axis -> radius_box, the_axis -> radius, FALSE, FALSE, 0); update_entry_double (GTK_ENTRY(the_axis -> radius), axis_rad); // Labels GtkWidget * lab_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_axis -> axis_data, lab_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, lab_box, check_button (_("Label axis"), 100, 40, axis_labels, G_CALLBACK(set_axis_labels), data), FALSE, FALSE, 0); the_axis -> axis_label_box[0] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, lab_box, the_axis -> axis_label_box[0], FALSE, FALSE, 0); box = abox (the_axis -> axis_label_box[0], _("Rendering "), 0); GtkWidget * config = create_combo (); combo_text_append (config, _("Basic Text")); combo_text_append (config, _("Highlighted")); combo_set_active (config, axis_label -> render); gtk_widget_set_size_request (config, 150, -1); g_signal_connect (G_OBJECT (config), "changed", G_CALLBACK(set_labels_render), (preferences) ? & pref_pointer[2] : & view -> colorp[2][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, config, FALSE, FALSE, 0); box = abox (the_axis -> axis_label_box[0], _("Font"), 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, font_button(axis_label -> font, 150, 30, G_CALLBACK(set_labels_font), (preferences) ? & pref_pointer[2] : & view -> colorp[2][0]), FALSE, FALSE, 0); // Size / scale box = abox (the_axis -> axis_label_box[0], _("Size"), 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, check_button (_("Scale with zoom in/out"), 150, -1, axis_label -> scale, G_CALLBACK(set_labels_scale), (preferences) ? & pref_pointer[2] : & view -> colorp[2][0]), FALSE, FALSE, 10); GtkWidget * lab_h_box = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, lab_box, lab_h_box, FALSE, FALSE, 0); the_axis -> axis_label_box[1] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, lab_h_box, the_axis -> axis_label_box[1], FALSE, FALSE, 0); box = abox (the_axis -> axis_label_box[1], _("Legends"), 0); GtkWidget * ax_title[3]; for (i=0; i<3; i++) { chbox = create_hbox (0); ax_title[i] = create_entry (G_CALLBACK(set_axis_title), 80, 10, FALSE, (preferences) ? & pref_pointer[i] : & view -> colorp[i][0]); update_entry_text (GTK_ENTRY(ax_title[i]), (preferences) ? tmp_axis -> title[i] : view -> anim -> last -> img -> xyz -> title[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, ax_title[i], FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, the_axis -> axis_label_box[1], chbox, FALSE, FALSE, 2); } // Colors GtkWidget * col_v_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, lab_h_box, col_v_box, FALSE, FALSE, 0); box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, col_v_box, box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, markup_label(".", 5, -1, 0.0, 0.25), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, markup_label(_("Colors"), 50, 30, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, check_button (_("Use base colors"), -1, -1, ac, G_CALLBACK(use_axis_default_colors), data), FALSE, FALSE, 10); if (axis_color == NULL) { ac = TRUE; } else { ac = FALSE; } for (i=0; i<3; i++) { chbox = create_hbox (0); if (axis_color != NULL) { the_axis -> axis_color_title[i] = color_button (axis_color[i], TRUE, 100, -1, G_CALLBACK(set_axis_color), (preferences) ? & pref_pointer[i] : & view -> colorp[i][0]); } else { ColRGBA col; col.red = axis_init_color[i][0]; col.green = axis_init_color[i][1]; col.blue = axis_init_color[i][2]; col.alpha = 1.0; the_axis -> axis_color_title[i] = color_button (col, TRUE, 100, -1, G_CALLBACK(set_axis_color), (preferences) ? & pref_pointer[i] : & view -> colorp[i][0]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, the_axis -> axis_color_title[i], FALSE, FALSE, 40); widget_set_sensitive (the_axis -> axis_color_title[i], ! ac); add_box_child_start (GTK_ORIENTATION_VERTICAL, col_v_box, chbox, FALSE, FALSE, 0); } append_comments (the_axis -> axis_data, "*", _("In front of the atomic model")); append_comments (the_axis -> axis_data, "**", _("Inside the atomic model")); if (! preferences) { add_global_option (vbox, & view -> colorp[2][0]); add_gtk_close_event (the_axis -> win, G_CALLBACK(on_axis_delete), view); show_the_widgets (the_axis -> win); if (axis_type == CYLINDERS) { hide_the_widgets (the_axis -> width_box); } else { hide_the_widgets (the_axis -> radius_box); } } } } atomes_1.3.1/src/opengl/win/m_style.c0000664000175000017500000003730015212624223017200 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_style.c * @short Functions to create the 'OpenGL -> Style' submenu * @author Sébastien Le Roux */ /* * This file: 'm_style.c' * * Contains: * - The functions to create the 'OpenGL -> Style' submenu * * List of functions: int get_filled_id (int sid); int get_style_id (int sid); void clean_atom_style (project * this_proj); void update_menus (glwin * view); void set_this_style (glwin * view, int style); G_MODULE_EXPORT void set_style (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void change_style_radio (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * create_style_menu (char * name, int val, int style, int vbl, int filled, guint accel, GtkWidget * menu, tint * data); GtkWidget * menu_style (glwin * view, int id); GMenu * menu_style (glwin * view, int popm); */ #include "global.h" #include "bind.h" #include "project.h" #include "glview.h" #include "glwindow.h" #include "preferences.h" extern gchar * label_atpts (project * this_proj, glwin * view, int id); char * text_styles[OGL_STYLES] = {i18n("Balls and Sticks"), i18n("Wireframes"), i18n("Spacefilled"), i18n("Spheres"), i18n("Cylinders"), i18n("Dots")}; char * text_filled[FILLED_STYLES] = {i18n("Covalent Radii"), i18n("Ionic Radii"), i18n("van der Waals Radii"), i18n("In Crystal Radii")}; /*! \fn void clean_atom_style (project * this_proj) \brief clean all atom(s) possible alternative rendering styles \param this_proj the target project */ void clean_atom_style (project * this_proj) { int i, j; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { this_proj -> atoms[i][j].style = NONE; } } } #ifdef GTK3 // GTK3 Menu Action To Check /*! \fn void update_menus (glwin * view) \brief update GTK3 menus of style has changed \param view the target glwin */ void update_menus (glwin * view) { int i, j; int s = view -> anim -> last -> img -> style; gchar * str; for (i=0; i<2; i++) { for (j=0; j<6; j+=2) { hide_the_widgets (view -> ogl_bonds[j+8*i]); if (j<4) { hide_the_widgets (view -> ogl_atoms[4*i+j]); } } } switch (s) { case CYLINDERS: for (i=0; i<2; i++) show_the_widgets (view -> ogl_bonds[8*i]); break; case WIREFRAME: for (i=0; i<2; i++) { show_the_widgets (view -> ogl_bonds[4+8*i]); str = label_atpts (get_project_by_id(view -> proj), view, 1+2*i); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_atoms[4*i+1]), str); g_free (str); show_the_widgets (view -> ogl_atoms[4*i+2]); } break; case SPACEFILL: for (i=0; i<2; i++) { str = label_atpts (get_project_by_id(view -> proj), view, 4); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_atoms[4*i+1]), str); g_free (str); show_the_widgets (view -> ogl_atoms[4*i]); } break; case PUNT: for (i=0; i<2; i++) { str = label_atpts (get_project_by_id(view -> proj), view, 2*i+1); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_atoms[4*i+1]), str); g_free (str); show_the_widgets (view -> ogl_atoms[4*i+2]); } break; case SPHERES: for (i=0; i<2; i++) { str = label_atpts (get_project_by_id(view -> proj), view, 2*i); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_atoms[4*i+1]), str); g_free (str); show_the_widgets (view -> ogl_atoms[4*i]); } break; default: for (i=0; i<2; i++) { show_the_widgets (view -> ogl_bonds[2+8*i]); if (view -> ogl_atoms[4*i+1]) { if (GTK_IS_WIDGET(view -> ogl_atoms[4*i+1])) { str = label_atpts (get_project_by_id(view -> proj), view, 2*i); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_atoms[4*i+1]), str); g_free (str); show_the_widgets (view -> ogl_atoms[4*i]); } } } break; } } #endif /*! \fn int get_filled_id (int sid) \brief retrieve filled ID number in FILLED_STYLES based on style ID \param sid the style id */ int get_filled_id (int sid) { return (sid >= OGL_STYLES) ? sid - OGL_STYLES : NONE; } /*! \fn int get_style_id (int sid) \brief retrieve style ID number in OGL_STYLES based on style ID \param sid the style id */ int get_style_id (int sid) { return (sid >= OGL_STYLES) ? SPACEFILL : sid; } /*! \fn G_MODULE_EXPORT void set_style (GtkWidget * widg, gpointer data) \brief set style callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_style (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); int s = the_data -> b; int st = get_style_id (s); int ft = get_filled_id (s); int old_style = this_proj -> modelgl -> anim -> last -> img -> style; int old_filled = this_proj -> modelgl -> anim -> last -> img -> filled_type; int i, j, k, l, m; #ifdef GTK3 if ((old_style != st || old_filled != ft) && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) #else if (old_style != st || old_filled != ft) #endif { i = old_style; j = old_filled; this_proj -> modelgl -> anim -> last -> img -> style = NONE; this_proj -> modelgl -> anim -> last -> img -> filled_type = NONE; #ifdef GTK3 if (old_style == SPACEFILL) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> filled_styles[j], FALSE); } else { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_styles[i], FALSE); } #endif if (s >= OGL_STYLES) { j = this_proj -> nspec; k = (ft) ? 9 + ft : 2; l = (ft) ? 12 + ft : 7; for (i=0; i chemistry -> chem_prop[CHEM_Z][i]; this_proj -> modelgl -> anim -> last -> img -> atomicrad[i] = (default_o_at_rs[2]) ? default_at_rs[2] : get_radius (2, ft, m, default_atomic_rad[k]); this_proj -> modelgl -> anim -> last -> img -> atomicrad[i+j] = (default_o_at_rs[7]) ? default_at_rs[7] : get_radius (7, ft, m, default_atomic_rad[l]); } #ifdef GTK3 if (widg != this_proj -> modelgl -> filled_styles[ft]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> filled_styles[ft], TRUE); } #endif this_proj -> modelgl -> anim -> last -> img -> filled_type = ft; this_proj -> modelgl -> anim -> last -> img -> style = SPACEFILL; } else { #ifdef GTK3 if (widg != this_proj -> modelgl -> ogl_styles[st]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_styles[st], TRUE); } #endif this_proj -> modelgl -> anim -> last -> img -> style = st; } clean_atom_style (this_proj); if (st == WIREFRAME || st == PUNT) { j = 0; } else { j = 1; } #ifdef GTK3 update_menus (this_proj -> modelgl); #endif init_default_shaders (this_proj -> modelgl); } } /*! \fn void set_this_style (glwin * view, int style) \brief set general style for atom(s) and bond(s) \param view the target glwin \param style the general style to apply */ void set_this_style (glwin * view, int style) { if (get_project_by_id(view -> proj) -> natomes) { #ifdef GTK4 gchar * str = g_strdup_printf ("set-style.%d.0", style); activate_glwin_action (str, "set-style", view); g_free (str); #else // GTK3 Menu Action To Check if (style < OGL_STYLES) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_styles[style], TRUE); set_style (view -> ogl_styles[style], & view -> colorp[style][0]); } else { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> filled_styles[style-OGL_STYLES], TRUE); set_style (view -> filled_styles[style-OGL_STYLES], & view -> colorp[style][0]); } #endif } } #ifdef GTK3 /*! \fn GtkWidget * create_style_menu (char * name, int val, int style, int vbl, int filled, guint accel, GtkWidget * menu, tint * data) \brief create style menu item GTK3 \param name the menu item label \param val active style \param style style value for this menu item \param vbl active filled style if any \param filled filled value for this menu item \param accel keyboard accelerator \param menu the menu to attach the new menu item to \param data the associated data pointer */ GtkWidget * create_style_menu (char * name, int val, int style, int vbl, int filled, guint accel, GtkWidget * menu, tint * data) { GtkWidget * style_widget = gtk3_menu_item (menu, name, IMG_NONE, NULL, G_CALLBACK(set_style), data, (accel != -1) ? TRUE : FALSE, accel, 0, TRUE, TRUE, (style == val && filled == vbl) ? TRUE : FALSE); return style_widget; } /*! \fn GtkWidget * menu_style (glwin * view, int id) \brief create the 'OpenGL -> Style' submenu - GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_style (glwin * view, int id) { int i, j; GtkWidget * widg; GtkWidget * menus = gtk_menu_new (); guint accels[OGL_STYLES-1]={GDK_KEY_b, GDK_KEY_w, GDK_KEY_s, GDK_KEY_c, GDK_KEY_d}; guint accelf[FILLED_STYLES]={GDK_KEY_o, GDK_KEY_i, GDK_KEY_v, GDK_KEY_r}; if (id == 0) { for (i=0; i ogl_styles[i] = create_style_menu (_(text_styles[i]), i, view -> anim -> last -> img -> style, i, i, accels[(i < SPACEFILL) ? i : i-1], menus, & view -> colorp[i][0]); } else { widg = create_menu_item (FALSE, _("Spacefilled")); gtk_menu_shell_append ((GtkMenuShell *)menus, widg); GtkWidget * menuf = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menuf); for (j=0; j < FILLED_STYLES; j++) { view -> filled_styles[j] = create_style_menu (_(text_filled[j]), SPACEFILL, view -> anim -> last -> img -> style, j, view -> anim -> last -> img -> filled_type, accelf[j], menuf, & view -> colorp[OGL_STYLES + j][0]); } } } } else { for (i=0; i anim -> last -> img -> style, i, i, accels[(i < SPACEFILL) ? i : i-1], menus, & view -> colorp[i][0]); } else { widg = create_menu_item (FALSE, _("Spacefilled")); gtk_menu_shell_append ((GtkMenuShell *)menus, widg); GtkWidget * menuf = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menuf); for (j=0; j < FILLED_STYLES; j++) { widg = create_style_menu (_(text_filled[j]), SPACEFILL, view -> anim -> last -> img -> style, j, view -> anim -> last -> img -> filled_type, accelf[j], menuf, & view -> colorp[OGL_STYLES + j][0]); } } } } return menus; } #else /*! \fn G_MODULE_EXPORT void change_style_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change style callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void change_style_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { glwin * view = (glwin *)data; const gchar * style = g_variant_get_string (parameter, NULL); int lgt = strlen (style); gchar * name = g_strdup_printf ("%c%c", style[lgt-2], style[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, style); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-style", g_variant_new_string((const gchar *)name)); g_free (name); } else { gchar * style_name = NULL; int i; for (i=0; i colorp[i][0]); g_free (style_name); style_name = NULL; break; } g_free (style_name); style_name = NULL; } g_action_change_state (G_ACTION (action), parameter); } } /*! \fn GMenu * menu_style (glwin * view, int popm) \brief create the 'OpenGL -> Style' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_style (glwin * view, int popm) { int i, j, k; GMenu * menu = g_menu_new (); gchar * accels[OGL_STYLES-1]={"b", "w", "s", "c", "d"}; gchar * accelf[FILLED_STYLES]={"o", "i", "v", "r"}; for (i=0; i anim -> last -> img -> style == i) ? TRUE : FALSE, TRUE, TRUE); } else { GMenu * menus = g_menu_new (); for (j=0; j < FILLED_STYLES; j++) { append_opengl_item (view, menus, _(text_filled[j]), "style", popm, j+OGL_STYLES, accelf[j], IMG_NONE, NULL, FALSE, G_CALLBACK(change_style_radio), (gpointer)view, FALSE, (view -> anim -> last -> img -> style == SPACEFILL && view -> anim -> last -> img -> filled_type == j) ? TRUE : FALSE, TRUE, TRUE); } append_submenu (menu, _("Spacefilled"), menus); } } return menu; } #endif atomes_1.3.1/src/opengl/win/initmol.c0000664000175000017500000004603215212624223017201 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file initmol.c * @short Functions to retrieve fragments data from Fortran90 \n Functions to retrieve molecules data from Fortran90 \n Functions to analyze molecule topology * @author Sébastien Le Roux */ /* * This file: 'initmol.c' * * Contains: * - The functions to retrieve fragments data from Fortran90 - The functions to retrieve molecules data from Fortran90 - The functions to analyze molecule topology * * List of functions: int * merge_mol_data (int val_a, int val_b, int table_a[val_a], int table_b[val_b]); gboolean are_identical_molecules (search_molecule * mol_a, search_molecule * mol_b); void duplicate_molecule (molecule * new_mol, search_molecule * old_mol); void allocate_mol_for_step_ (int * sid, int * mol_in_step); void allocate_mol_data_ (); void send_mol_neighbors_ (int * stp, int * mol, int * aid, int * nvs, int neigh[* nvs]); void update_mol_details (search_molecule * mol, int sp, int cp); void send_mol_details_ (int * stp, int * mol, int * ats, int * sps, int spec_in_mol[* sps], int atom_in_mol[* ats]); void free_search_molecule_data (search_molecule * smol); void setup_molecules_ (int * stepid); void setup_menu_molecules_ (); void setup_fragments_ (int * sid, int coord[active_project -> natomes]); search_molecule * duplicate_search_molecule (search_molecule * old_mol); */ #include "global.h" #include "interface.h" #include "bind.h" #include "color_box.h" #include "glwindow.h" #include "initcoord.h" typedef struct search_molecule search_molecule; struct search_molecule { int id; // Molecule id number int md; // MD step int multiplicity; // Multiplicity int * fragments; // Fragments list int natoms; // Number of atoms int * atoms; // Temporary atom list int nspec; // Number of chemical species int * species; // Number of atom by species int nbonds; // Number of chemical bonds int ** pbonds; // Number of chemical bonds by geometries int nangles; // Number of bond angles int *** pangles; // Number of bond angles by geometries int ** lgeo; // list of coordination spheres (by species) search_molecule * next; search_molecule * prev; }; int * pgeo; search_molecule * tmp_search = NULL; search_molecule ** in_calc_mol = NULL; extern molecule * tmp_mol; /*! \fn void duplicate_molecule (molecule * new_mol, search_molecule * old_mol) \brief create a copy of a molecule data structure \param new_mol the new molecule \param old_mol the molecule to copy */ void duplicate_molecule (molecule * new_mol, search_molecule * old_mol) { new_mol -> id = old_mol -> id; new_mol -> md = old_mol -> md; new_mol -> multiplicity = old_mol -> multiplicity; new_mol -> fragments = duplicate_int (old_mol -> multiplicity, old_mol -> fragments); new_mol -> natoms = old_mol -> natoms; new_mol -> nspec = old_mol -> nspec; new_mol -> species = duplicate_int (active_project -> nspec, old_mol -> species); } /*! \fn search_molecule * duplicate_search_molecule (search_molecule * old_mol) \brief create a copy of a search molecule data structure \param old_mol the search molecule data structure to copy */ search_molecule * duplicate_search_molecule (search_molecule * old_mol) { search_molecule * new_mol = g_malloc0(sizeof*new_mol); new_mol -> id = old_mol -> id; new_mol -> md = old_mol -> md; new_mol -> multiplicity = old_mol -> multiplicity; new_mol -> fragments = duplicate_int (old_mol -> multiplicity, old_mol -> fragments); new_mol -> natoms = old_mol -> natoms; new_mol -> nspec = old_mol -> nspec; new_mol -> species = duplicate_int (active_project -> nspec, old_mol -> species); int j, k; if (old_mol -> natoms > 1) { new_mol -> pbonds = g_malloc0(active_project -> coord -> totcoord[1]*sizeof*new_mol -> pbonds); if (old_mol -> natoms > 2) { new_mol -> pangles = g_malloc0(active_project -> coord -> totcoord[1]*sizeof*new_mol -> pangles); } } if (old_mol -> atoms) { new_mol -> atoms = duplicate_int (old_mol -> natoms*old_mol -> multiplicity, old_mol -> atoms); } new_mol -> nbonds = old_mol -> nbonds; if (new_mol -> nbonds) { for (j=0; j coord -> totcoord[1]; j++) { new_mol -> pbonds[j] = duplicate_int (active_project -> coord -> totcoord[1], old_mol -> pbonds[j]); } new_mol -> nangles = old_mol -> nangles; if (new_mol -> nangles) { for (j=0; j coord -> totcoord[1]; j++) { new_mol -> pangles[j] = g_malloc0(active_project -> coord -> totcoord[1]*sizeof*new_mol -> pangles[j]); for (k=0; k coord -> totcoord[1]; k++) { new_mol -> pangles[j][k] = duplicate_int (active_project -> coord -> totcoord[1], old_mol -> pangles[j][k]); } } } } new_mol -> lgeo = g_malloc0(active_project -> nspec*sizeof*new_mol -> lgeo); for (j=0; j nspec; j++) { new_mol -> lgeo[j] = duplicate_int (active_project -> coord -> totcoord[1], old_mol -> lgeo[j]); } return new_mol; } /*! \fn void allocate_mol_for_step_ (int * sid, int * mol_in_step) \brief allocate the data to store molecule information for a MD step \param sid the MD step \param mol_in_step the number of molecule(s) for this MD step */ void allocate_mol_for_step_ (int * sid, int * mol_in_step) { in_calc_mol[* sid -1] = g_malloc0(* mol_in_step*sizeof*in_calc_mol[* sid -1]); active_project -> modelfc -> mol_by_step[* sid - 1] = * mol_in_step; } /*! \fn void allocate_mol_data_ () \brief allocate data to store molecule information */ void allocate_mol_data_ () { int i; if (active_project -> modelfc != NULL) { if (active_project -> modelfc -> mols != NULL) { g_free (active_project -> modelfc -> mols); active_project -> modelfc -> mols = NULL; } active_project -> modelfc = NULL; } in_calc_mol = g_malloc0(active_project -> steps*sizeof*in_calc_mol); active_project -> modelfc = g_malloc0(sizeof*active_project -> modelfc); active_project -> modelfc -> mols = g_malloc0(active_project -> steps*sizeof*active_project -> modelfc -> mols); active_project -> modelfc -> mol_by_step = allocint (active_project -> steps); for (i=0; i<2; i++) { if (active_project -> force_field[i]) g_free (active_project -> force_field[i]); active_project -> force_field[i] = NULL; } pgeo = g_malloc0((active_project -> nspec+1)*sizeof*pgeo); for (i=1; i nspec+1; i++) { pgeo[i] = pgeo[i-1] + active_coord -> ntg[1][i-1]; } } /*! \fn void send_mol_neighbors_ (int * stp, int * mol, int * aid, int * nvs, int neigh[*nvs]) \brief update molecule typology information from Fortran90 \param stp the MD step \param mol the molecule id \param aid the atom id \param nvs the number of neighbor(s) for this atom \param neigh the list of neighbor(s) for this atom */ void send_mol_neighbors_ (int * stp, int * mol, int * aid, int * nvs, int neigh[* nvs]) { int i, j, k, l, m, n, o, p, q, r, s, t, u; search_molecule * tmp_mol = & in_calc_mol[* stp - 1][* mol - 1]; i = active_project -> atoms[* stp - 1][* aid - 1].sp; j = active_project -> atoms[* stp - 1][* aid - 1].coord[1]; k = pgeo[i] + j; for (l=0; l < * nvs; l++) { m = neigh[l]-1; n = active_project -> atoms[tmp_mol -> md][m].sp; o = active_project -> atoms[tmp_mol -> md][m].coord[1]; p = pgeo[n] + o; tmp_mol -> pbonds[k][p] ++; } if (* nvs > 1) { for (l=0; l<*nvs-1; l++) { m = neigh[l]-1; n = active_project -> atoms[tmp_mol -> md][m].sp; o = active_project -> atoms[tmp_mol -> md][m].coord[1]; p = pgeo[n] + o; for (q= l+1; q<*nvs; q++) { r = neigh[q]-1; s = active_project -> atoms[tmp_mol -> md][r].sp; t = active_project -> atoms[tmp_mol -> md][r].coord[1]; u = pgeo[s] + t; tmp_mol -> pangles[p][k][u] ++; tmp_mol -> pangles[u][k][p] ++; } } } } /*! \fn void update_mol_details (search_molecule * mol, int sp, int cp) \brief update molecule information \param mol the molecule to update \param sp the chemical species \param cp the partial coordination id */ void update_mol_details (search_molecule * mol, int sp, int cp) { int i, j, k, l, m; for (i=0; i nspec; i++) { j = active_coord -> partial_geo[sp][cp][i]; mol -> nbonds += j; if (j && mol -> natoms > 2) { for (k=0; k nspec; k++) { l = active_coord -> partial_geo[sp][cp][k]; if (k != i || l > 1) { m = (j+l)*((j+l)-1)/2; mol -> nangles += m; } } } } } /*! \fn void send_mol_details_ (int * stp, int * mol, int * ats, int * sps, int spec_in_mol[*sps], int atom_in_mol[*ats]) \brief overall molecule information from Fortran90 \param stp the MD step \param mol the molecule id \param ats the number of atom(s) in the molecule \param sps the number of chemical species in the molecule \param spec_in_mol the number of atom(s) by chemical species in the molecule \param atom_in_mol the list of atom(s) in the molecule */ void send_mol_details_ (int * stp, int * mol, int * ats, int * sps, int spec_in_mol[* sps], int atom_in_mol[* ats]) { int i, j, k, l; search_molecule * tmp_mol = & in_calc_mol[* stp - 1][* mol - 1]; tmp_mol -> id = * mol - 1; tmp_mol -> md = * stp - 1; tmp_mol -> multiplicity = 1; tmp_mol -> fragments = allocint (1); tmp_mol -> fragments[0] = * mol - 1; tmp_mol -> natoms = * ats; tmp_mol -> lgeo = allocdint (active_project -> nspec, active_coord -> totcoord[1]); if (tmp_mol -> natoms > 1) { tmp_mol -> pbonds = allocdint (active_coord -> totcoord[1], active_coord -> totcoord[1]); if (tmp_mol -> natoms > 2) { tmp_mol -> pangles = alloctint (active_coord -> totcoord[1], active_coord -> totcoord[1], active_coord -> totcoord[1]); } } tmp_mol -> atoms = duplicate_int (* ats, atom_in_mol); for (i=0; i< * ats; i++) { j = atom_in_mol[i]-1; k = active_project -> atoms[0][j].sp; l = active_project -> atoms[* stp - 1][j].coord[1]; tmp_mol -> lgeo[k][pgeo[k]+l] ++; update_mol_details (tmp_mol, k, l); } j = 0; for (i=0; i nspec; i++) { if (spec_in_mol[i] > 0) j++; } tmp_mol -> nspec = j; tmp_mol -> species = duplicate_int (active_project -> nspec, spec_in_mol); tmp_mol -> nbonds /= 2; tmp_mol -> nangles /= 2; } /*! \fn gboolean are_identical_molecules (search_molecule * mol_a, search_molecule * mol_b) \brief test if 2 molecules are identicals \param mol_a the 1st molecule \param mol_b the 2nd molecule */ gboolean are_identical_molecules (search_molecule * mol_a, search_molecule * mol_b) { int i, j, k; /*#ifdef DEBUG g_debug ("AID:: mol_a -> id= %d, mol_b-> id= %d", mol_a -> id, mol_b -> id); g_debug ("AID:: mol_a -> natoms= %d, mol_b-> natoms= %d", mol_a -> natoms, mol_b -> natoms); g_debug ("AID:: mol_a -> nspec= %d, mol_b-> nspec= %d", mol_a -> nspec, mol_b -> nspec); g_debug ("AID:: mol_a -> nbonds= %d, mol_b-> nbonds= %d", mol_a -> nbonds, mol_b -> nbonds); g_debug ("AID:: mol_a -> nangles= %d, mol_b-> nangles= %d", mol_a -> nangles, mol_b -> nangles); #endif*/ if (mol_a -> md != mol_b -> md) return FALSE; if (mol_a -> natoms != mol_b -> natoms) return FALSE; if (mol_a -> nspec != mol_b -> nspec) return FALSE; for (i=0; i < active_project -> nspec; i++) { if (mol_a -> species[i] != mol_b -> species[i]) return FALSE; } if (mol_a -> nbonds != mol_b -> nbonds) return FALSE; if (mol_a -> nangles != mol_b -> nangles) return FALSE; for (i=0; i < active_project -> nspec; i++) { for (j=0; j< active_coord -> totcoord[1]; j++) { if (mol_a -> lgeo[i][j] != mol_b -> lgeo[i][j]) return FALSE; } } if (mol_a -> nbonds > 1) { for (i=0; i < active_coord -> totcoord[1]; i++) { for (j=0; j < active_coord -> totcoord[1]; j++) { if (mol_a -> pbonds[i][j] != mol_b -> pbonds[i][j]) return FALSE; } } if (mol_a -> nangles > 1) { for (i=0; i < active_coord -> totcoord[1]; i++) { for (j=0; j < active_coord -> totcoord[1]; j++) { for (k=0; k < active_coord -> totcoord[1]; k++) { if (mol_a -> pangles[i][j][k] != mol_b -> pangles[i][j][k]) return FALSE; } } } } } return TRUE; } /*! \fn int * merge_mol_data (int val_a, int val_b, int table_a[val_a], int table_b[val_b]) \brief merge molecule a and molecule b data \param val_a multiplicity, or multiplicity x atoms, for molecule a \param val_b multiplicity, or multiplicity x atoms, for molecule b \param table_a the list of molecular fragment(s) or atoms for molecule a \param table_b the list of molecular fragment(s) or atoms for molecule b */ int * merge_mol_data (int val_a, int val_b, int table_a[val_a], int table_b[val_b]) { int * p_data; int i; p_data = allocint (val_a + val_b); for (i=0; i atoms) { g_free (smol -> atoms); smol -> atoms = NULL; } if (smol -> pbonds) { for (i=0; i totcoord[1]; i++) { if (smol -> pbonds[i]) { g_free (smol -> pbonds[i]); smol -> pbonds[i] = NULL; } } g_free (smol -> pbonds); smol -> pbonds = NULL; } if (smol -> pangles) { for (i=0; i totcoord[1]; i++) { if (smol -> pangles[i]) { for (j=0; j totcoord[1]; j++) { if (smol -> pangles[i][j]) { g_free (smol -> pangles[i][j]); smol -> pangles[i][j] = NULL; } } g_free (smol -> pangles[i]); smol -> pangles[i] = NULL; } } g_free (smol -> pangles); smol -> pangles = NULL; } if (smol -> lgeo) { for (i=0; i nspec; i++) { if (smol -> lgeo[i]) { g_free (smol -> lgeo[i]); smol -> lgeo[i] = NULL; } } g_free (smol -> lgeo); smol -> lgeo = NULL; } g_free (smol -> species); smol -> species = NULL; g_free (smol -> fragments); smol -> fragments = NULL; } /*! \fn void setup_molecules_ (int * stepid) \brief setup molecule data \param stepid the MD step */ void setup_molecules_ (int * stepid) { int i, j, k, l, m, n; search_molecule * mtmp_at, * mtmp_bt; search_molecule * first_mol = NULL; search_molecule * tmp_mol; gboolean add_it; int * tmp_data; i = * stepid -1; j = 0; for (k=0; k modelfc -> mol_by_step[i]; k++) { mtmp_bt = & in_calc_mol[i][k]; add_it = TRUE; mtmp_at = (first_mol) ? first_mol : NULL; while (mtmp_at) { if (are_identical_molecules (mtmp_at, mtmp_bt)) { tmp_data = merge_mol_data (mtmp_at -> multiplicity, mtmp_bt -> multiplicity, mtmp_at -> fragments, mtmp_bt -> fragments); g_free (mtmp_at -> fragments); mtmp_at -> fragments = NULL; mtmp_at -> fragments = duplicate_int (mtmp_at -> multiplicity+mtmp_bt -> multiplicity, tmp_data); g_free (tmp_data); tmp_data = merge_mol_data (mtmp_at -> natoms*mtmp_at -> multiplicity, mtmp_bt -> natoms*mtmp_bt -> multiplicity, mtmp_at -> atoms, mtmp_bt -> atoms); g_free (mtmp_at -> atoms); mtmp_at -> atoms = NULL; mtmp_at -> atoms = duplicate_int (mtmp_at -> natoms*mtmp_at -> multiplicity+mtmp_bt -> natoms*mtmp_bt -> multiplicity, tmp_data); g_free (tmp_data); mtmp_at -> multiplicity ++; add_it = FALSE; break; } mtmp_at = mtmp_at -> next; } if (add_it) { if (first_mol) { mtmp_at = first_mol; while (mtmp_at -> next) mtmp_at = mtmp_at -> next; mtmp_at -> next = duplicate_search_molecule (mtmp_bt); mtmp_at -> next -> prev = mtmp_at; } else { first_mol = duplicate_search_molecule (mtmp_bt); mtmp_at = first_mol; } j ++; } } for (k=0; k modelfc -> mol_by_step[i]; k++) { free_search_molecule_data (& in_calc_mol[i][k]); } g_free (in_calc_mol[i]); in_calc_mol[i] = NULL; active_project -> modelfc -> mol_by_step[i] = j; active_project -> modelfc -> mols[i] = g_malloc0(j*sizeof*active_project -> modelfc -> mols[i]); tmp_mol = first_mol; for (k=0; k natoms*tmp_mol -> multiplicity; for (m=0; m atoms[m] - 1; active_project -> atoms[i][n].coord[3] = k; } duplicate_molecule (& active_project -> modelfc -> mols[i][k], tmp_mol); active_project -> modelfc -> mols[i][k].id = k; if (k < j-1) tmp_mol = tmp_mol -> next; } tmp_mol = first_mol; while (tmp_mol) { free_search_molecule_data (tmp_mol); if (tmp_mol -> next) { tmp_mol = tmp_mol -> next; g_free (tmp_mol -> prev); } else { g_free (tmp_mol); tmp_mol = NULL; } } } /*! \fn void setup_menu_molecules_ () \brief prepare the menu elements related to molecule(s) */ void setup_menu_molecules_ () { int i, j; g_free (in_calc_mol); in_calc_mol = NULL; g_free (pgeo); pgeo = NULL; i = 0; for (j=0; j steps; j++) { i = max (i, active_project -> modelfc -> mol_by_step[j]); } active_coord -> totcoord[3] = i; i = 3; init_menu_fragmol_ (& i); } /*! \fn void setup_fragments_ (int * sid, int coord[active_project->natomes]) \brief atom(s) fragment(s) information from Fortran90 \param sid the MD step \param coord the fragment(s) information */ void setup_fragments_ (int * sid, int coord[active_project -> natomes]) { int i; for (i=0; i < active_project -> natomes; i++) { active_project -> atoms[* sid-1][i].coord[2] = coord[i] - 1; } } atomes_1.3.1/src/opengl/win/w_sequencer.c0000664000175000017500000003703615212624223020052 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_sequencer.c * @short Functions to create the MD sequencer window * @author Sébastien Le Roux */ /* * This file: 'w_sequencer.c' * * Contains: * - The functions to create the MD sequencer window * * List of functions: static gboolean animate (gpointer data); static gboolean seq_wait_for_stop (gpointer data); void set_player_title (glwin * view); void update_selection (glwin * view, int o_step); void update_step_button (glwin * view); void sequence (glwin * view, int o_step, int n_step); G_MODULE_EXPORT void seq_go_previous (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_go_next (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_go_first (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_go_last (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_go_to (GtkEntry * res, gpointer data); G_MODULE_EXPORT void seq_jump (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_play (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_stop (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_loop (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_faster (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_slower (GtkButton * but, gpointer data); G_MODULE_EXPORT void window_sequencer (GtkWidget * widg, gpointer data); */ #include "global.h" #include "interface.h" #include "callbacks.h" #include "glview.h" #include "glwindow.h" /*! \fn void set_player_title (glwin * view) \brief set sequencer window title \param view the target glwin */ void set_player_title (glwin * view) { int step = view -> anim -> last -> img -> step + 1; gchar * str = g_strdup_printf (_("%s - player - step %d"), prepare_for_title (get_project_by_id(view -> proj) -> name), step); gtk_window_set_title (GTK_WINDOW(view -> player -> win), str); g_free (str); } /*! \fn void update_selection (glwin * view, int o_step) \brief match and udpate selected atom()s from o_step to the active step \param view the target glwin \param o_step the step to match selection with */ void update_selection (glwin * view, int o_step) { int i, j, k; i = view -> anim -> last -> img -> step; project * this_proj = get_project_by_id(view -> proj); for (k=0; k<2; k++) { view -> anim -> last -> img -> selected[k] -> selected = 0; view -> anim -> last -> img -> selected[k] -> first = NULL; view -> anim -> last -> img -> selected[k] -> last = NULL; for (j=0; j natomes; j++) { if (this_proj -> atoms[o_step][j].pick[k]) { this_proj -> atoms[i][j].pick[k] = FALSE; process_selected_atom (this_proj, view, j, 0, 0, k); } if (this_proj -> atoms[o_step][j].label[k]) { this_proj -> atoms[i][j].label[k] = TRUE; } } update_all_selections (view, k); } } /*! \fn void update_step_button (glwin * view) \brief correct widget buttons sensitivity based on MD step \param view the target glwin */ void update_step_button (glwin * view) { if (view -> anim -> last -> img -> step == get_project_by_id(view -> proj) -> steps - 1) { widget_set_sensitive (view -> player -> first, 1); widget_set_sensitive (view -> player -> prev, 1); widget_set_sensitive (view -> player -> last, 0); widget_set_sensitive (view -> player -> next, 0); } else if (view -> anim -> last -> img -> step == 0) { widget_set_sensitive (view -> player -> first, 0); widget_set_sensitive (view -> player -> prev, 0); widget_set_sensitive (view -> player -> last, 1); widget_set_sensitive (view -> player -> next, 1); } else { widget_set_sensitive (view -> player -> first, 1); widget_set_sensitive (view -> player -> prev, 1); widget_set_sensitive (view -> player -> last, 1); widget_set_sensitive (view -> player -> next, 1); } } /*! \fn void sequence (glwin * view, int o_step, int n_step) \brief sequence to next step \param view the target glwin \param o_step actual step \param n_step next step */ void sequence (glwin * view, int o_step, int n_step) { int i; for (i=0; i<2; i++) save_all_selections (view, i); view -> anim -> last -> img -> step = n_step; update_selection (view, o_step); for (i=0; i proj), i)) view -> n_shaders[i][n_step] = -1; } recreate_all_shaders (view); set_player_title (view); update_step_button (view); update (view); } /*! \fn G_MODULE_EXPORT void seq_go_previous (GtkButton * but, gpointer data) \brief go to previous frame \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_go_previous (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; if (view -> anim -> last -> img -> step > 0) { sequence (view, view -> anim -> last -> img -> step, view -> anim -> last -> img -> step - 1); } } /*! \fn G_MODULE_EXPORT void seq_go_next (GtkButton * but, gpointer data) \brief go to next frame \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_go_next (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; project * this_proj = get_project_by_id(view -> proj); if (view -> anim -> last -> img -> step < this_proj -> steps-1) { sequence (view, view -> anim -> last -> img -> step, view -> anim -> last -> img -> step + 1); } } /*! \fn G_MODULE_EXPORT void seq_go_first (GtkButton * but, gpointer data) \brief go to first frame \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_go_first (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; sequence (view, view -> anim -> last -> img -> step, 0); } /*! \fn G_MODULE_EXPORT void seq_go_last (GtkButton * but, gpointer data) \brief got to last frame \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_go_last (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; sequence (view, view -> anim -> last -> img -> step, get_project_by_id(view -> proj) -> steps - 1); } /*! \fn G_MODULE_EXPORT void seq_go_to (GtkEntry * res, gpointer data) \brief jump to frame \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_go_to (GtkEntry * res, gpointer data) { glwin * view = (glwin *) data; const gchar * m = entry_get_text (res); int s = (int)string_to_double ((gpointer)m); project * this_proj = get_project_by_id(view -> proj); if (s > 0 && s <= this_proj -> steps) { sequence (view, view -> anim -> last -> img -> step, s-1); } update_entry_int (res, this_proj -> modelgl -> anim -> last -> img -> step+1); } /*! \fn G_MODULE_EXPORT void seq_jump (GtkButton * but, gpointer data) \brief jump to frame dialog \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_jump (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; GtkWidget * win = dialogmodal (_("Enter a step number"), GTK_WINDOW(view -> player -> win)); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, TRUE, 0); gchar * str = g_strdup_printf (_("Step number [%d-%d]: "), 1, get_project_by_id(view -> proj) -> steps); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new (str), TRUE, TRUE, 0); g_free (str); GtkWidget * step = create_entry (G_CALLBACK(seq_go_to), 100, 15, TRUE, (gpointer)view); update_entry_int (GTK_ENTRY(step), view -> anim -> last -> img -> step+1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, step, FALSE, FALSE, 0); run_this_gtk_dialog (win, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn static gboolean animate (gpointer data) \brief animate \param data the associated data pointer */ static gboolean animate (gpointer data) { glwin * view = (glwin *) data; if (view -> play) { if (view -> anim -> last -> img -> step < get_project_by_id(view -> proj) -> steps-1) { sequence (view, view -> anim -> last -> img -> step, view -> anim -> last -> img -> step+1); } else if (view -> loop) { sequence (view, view -> anim -> last -> img -> step, 0); } else { view -> play = FALSE; view -> stop = TRUE; } } else { view -> play = FALSE; view -> stop = TRUE; } return view -> play; } /*! \fn G_MODULE_EXPORT void seq_play (GtkButton * but, gpointer data) \brief play \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_play (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; if (! view -> play) { view -> play = TRUE; view -> stop = FALSE; g_timeout_add (view -> speed, (GSourceFunc) animate, view); } } /*! \fn G_MODULE_EXPORT void seq_stop (GtkButton * but, gpointer data) \brief stop \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_stop (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; view -> play = FALSE; } /*! \fn G_MODULE_EXPORT void seq_loop (GtkButton * but, gpointer data) \brief loop the animation \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_loop (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; if (view -> loop) { view -> loop = FALSE; button_set_image (but, NULL, IMG_STOCK, MEDIA_LOOP); } else { view -> loop = TRUE; button_set_image (but, NULL, IMG_STOCK, MEDIA_ULOOP); } show_the_widgets (GTK_WIDGET(but)); } /*! \fn static gboolean seq_wait_for_stop (gpointer data) \brief pause / restart if on pause \param data the associated data pointer */ static gboolean seq_wait_for_stop (gpointer data) { glwin * view = (glwin *) data; if (view -> stop) { seq_play (NULL, data); return FALSE; } else { return TRUE; } } /*! \fn G_MODULE_EXPORT void seq_faster (GtkButton * but, gpointer data) \brief go faster \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_faster (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; int oldspeed; if (view -> play && view -> speed > 4) { oldspeed = view -> speed; if (view -> speed == 5) { view -> speed -= 1; } else { view -> speed -= 5; } view -> play = FALSE; g_timeout_add (oldspeed, (GSourceFunc) seq_wait_for_stop, view); } } /*! \fn G_MODULE_EXPORT void seq_slower (GtkButton * but, gpointer data) \brief go slower \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_slower (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; int oldspeed; if (view -> play && view -> speed < 10000) { oldspeed = view -> speed; if (view -> speed == 1) { view -> speed = 5; } else { view -> speed += 5; } view -> play = FALSE; g_timeout_add (oldspeed, (GSourceFunc) seq_wait_for_stop, view); } } /*! \fn G_MODULE_EXPORT void window_sequencer (GtkWidget * widg, gpointer data) \brief create the sequencer window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_sequencer (GtkWidget * widg, gpointer data) { //int p; glwin * view = (glwin *) data; if (view -> player == NULL) { //p = view -> proj; view -> player = g_malloc0(sizeof*view -> player); view -> player -> win = create_win (" ", view -> win, FALSE, FALSE); set_player_title (view); GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, view -> player -> win, vbox); // First line GtkWidget * hboxa = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hboxa, TRUE, TRUE, 0); // First view -> player -> first = create_button (_("First"), IMG_STOCK, MEDIA_FIRST, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_go_first), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, view -> player -> first, TRUE, TRUE, 0); // Previous view -> player -> prev = create_button (_("Previous"), IMG_STOCK, MEDIA_PREV, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_go_previous), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, view -> player -> prev, TRUE, TRUE, 0); // Next view -> player -> next = create_button (_("Next"), IMG_STOCK, MEDIA_NEXT, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_go_next), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, view -> player -> next, TRUE, TRUE, 0); // Last view -> player -> last = create_button (_("Last"), IMG_STOCK, MEDIA_LAST, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_go_last), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, view -> player -> last, TRUE, TRUE, 0); // JumpTo view -> player -> jump = create_button (_("Go to"), IMG_STOCK, MEDIA_GOTO, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_jump), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, view -> player -> jump, TRUE, TRUE, 0); // Second line GtkWidget * hboxb = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hboxb, TRUE, TRUE, 0); // Play view -> player -> play = create_button (_("Play"), IMG_STOCK, MEDIA_PLAY, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_play), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxb, view -> player -> play, TRUE, TRUE, 0); // Stop view -> player -> stop = create_button (_("Stop"), IMG_STOCK, MEDIA_STOP, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_stop), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxb, view -> player -> stop, TRUE, TRUE, 0); // Loop view -> player -> loop = create_button (_("Loop"), IMG_STOCK, MEDIA_LOOP, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_loop), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxb, view -> player -> loop, TRUE, TRUE, 0); // Faster view -> player -> fast = create_button (_("Faster"), IMG_STOCK, MEDIA_FAST, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_faster), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxb, view -> player -> fast, TRUE, TRUE, 0); // Slower view -> player -> slow = create_button (_("Slower"), IMG_STOCK, MEDIA_SLOW, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_slower), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxb, view -> player -> slow, TRUE, TRUE, 0); add_gtk_close_event (view -> player -> win, G_CALLBACK(hide_this_window), NULL); show_the_widgets (view -> player -> win); update_step_button (view); } else { show_the_widgets (view -> player -> win); } } atomes_1.3.1/src/opengl/win/menu_bar.c0000664000175000017500000003705615212624223017324 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file menu_bar.c * @short Functions to create the menu bar of the OpenGL window \n Functions to create the menu items for the menu bar and the pop up menu * @author Sébastien Le Roux */ /* * This file: 'menu_bar.c' * * Contains: * - The functions to create the menu bar of the OpenGL window - The functions to create the menu items for the menu bar and the pop up menu * * List of functions: void append_opengl_item (glwin * view, GMenu * menu, const gchar * name, const gchar * key, int mpop, int item_id, gchar * accel, int image_format, gpointer icon, gboolean custom, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, gboolean sensitive); void menu_bar_attach_color_palettes (glwin * view, GtkWidget * menu_bar); void update_menu_bar (glwin * view); G_MODULE_EXPORT void to_opengl_advanced (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_render_gl_image (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * opengl_window_create_menu_bar (glwin * view); GMenu * prepare_opengl_menu (glwin * view, int popm); GMenu * prepare_model_menu (glwin * view, int popm); GMenu * prepare_coord_menu (glwin * view, int popm); GMenu * opengl_menu_bar (glwin * view); */ #include "global.h" #include "interface.h" #include "project.h" #include "calc.h" #include "glview.h" #include "initcoord.h" #include "submenus.h" #include "color_box.h" #ifdef GTK4 extern GtkWidget * color_palette (glwin * view, int ideo, int spec, int geo); extern G_MODULE_EXPORT void opengl_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void render_gl_image (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void to_coord_properties (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void view_shortcuts (GSimpleAction * action, GVariant * parameter, gpointer data); GSimpleActionGroup * view_pop_actions; /*! \fn G_MODULE_EXPORT void to_opengl_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) \brief open OpenGL advanced configuration window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_opengl_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) { opengl_advanced (NULL, data); } /*! \fn G_MODULE_EXPORT void to_render_gl_image (GSimpleAction * action, GVariant * parameter, gpointer data) \brief render image from OpenGL window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void to_render_gl_image (GSimpleAction * action, GVariant * parameter, gpointer data) { render_gl_image (NULL, data); } /*! \fn void append_opengl_item (glwin * view, GMenu * menu, const gchar * name, const gchar * key, int mpop, int item_id, gchar * accel, int image_format, gpointer icon, gboolean custom, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, gboolean sensitive) \brief generic function to create menu item for the OpenGL menu bar / pop up menu \param view the target glwin \param menu the menu to attach the new menu item to \param name the new menu item label, if any \param key the new menu item action key \param mpop main app (0) or popup (1) \param item_id the new menu item action id \param accel keyboard accelerator for the new menu item, if any (NULL otherwise) \param image_format the image format (in enum ImageFormats) \param icon the image data if any (or NULL) \param custom custom menu item (1= yes, 0 = no), to insert a widget later on \param handler the new menu item callback (or NULL) \param data the associated data pointer (or NULL) \param check is the new menu item a check menu item ? \param status is 'check' then what is the status of the new check menu item ? \param radio is the new menu item a radio menu item ? \param sensitive new menu item sensitivity */ void append_opengl_item (glwin * view, GMenu * menu, const gchar * name, const gchar * key, int mpop, int item_id, gchar * accel, int image_format, gpointer icon, gboolean custom, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, gboolean sensitive) { gchar * str_a, * str_b, * str_c; str_a = g_strdup_printf ("set-%s", key); str_b = g_strdup_printf ("%s.%d.%d", str_a, item_id, mpop); str_c = (sensitive) ? g_strdup_printf ("gl-%d.%s", view -> action_id, (radio) ? str_a : str_b) : g_strdup_printf ("None"); append_menu_item (menu, name, (const gchar *) str_c, accel, (custom) ? (const gchar *) str_b : NULL, image_format, icon, check, status, radio, (radio) ? (const gchar *)str_b : NULL); if (handler) { if (! radio || (radio && status)) { if (! opengl_project) { widget_add_action (view -> action_group, (radio) ? (const gchar *)str_a : (const gchar *)str_b, handler, data, check, status, radio, (const gchar *)str_b); } else { widget_add_action (view_pop_actions, (radio) ? (const gchar *)str_a : (const gchar *)str_b, handler, data, check, status, radio, (const gchar *)str_b); } } } g_free (str_a); g_free (str_b); g_free (str_c); } /*! \fn GMenu * prepare_opengl_menu (glwin * view, int popm) \brief create the 'OpenGL' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * prepare_opengl_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Style"), menu_style(view, popm)); GMenuItem * item = g_menu_item_new (_("Color Maps"), (get_project_by_id(view -> proj) -> nspec) ? NULL : "None"); g_menu_item_set_submenu (item, (GMenuModel*)menu_map(view, popm)); g_menu_append_item (menu, item); append_opengl_item (view, menu, _("Material and Light(s)"), "material", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_opengl_advanced), (gpointer)view, FALSE, FALSE, FALSE, TRUE); append_opengl_item (view, menu, _("Render Image"), "image", popm, popm, "I", IMG_FILE, PACKAGE_IMG, FALSE, G_CALLBACK(to_render_gl_image), (gpointer)view, FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * prepare_model_menu (glwin * view, int popm) \brief create the 'Model' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * prepare_model_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Atom(s)"), menu_atoms(view, popm, 0)); append_submenu (menu, _("Bond(s)"), menu_bonds(view, popm, 0)); append_submenu (menu, _("Clone(s)"), menu_clones(view, popm)); g_menu_append_item (menu, menu_box_axis (view, popm, 0)); return menu; } /*! \fn GMenu * prepare_coord_menu (glwin * view, int popm) \brief create the 'Chemistry' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * prepare_coord_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Coordination"), menu_coord (view, popm)); append_submenu (menu, _("Polyhedra"), menu_poly (view, popm)); if (view -> rings) { append_submenu (menu, _("Ring(s)"), menu_rings (view, popm)); } else { append_menu_item (menu, _("Ring(s)"), "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); } if (view -> chains) { append_submenu (menu, _("Chain(s)"), add_menu_coord (view, popm, 9)); } else { append_menu_item (menu, _("Chain(s)"), "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); } if (view -> adv_bonding[0]) { append_submenu (menu, _("Fragment(s)"), add_menu_coord (view, popm, 2)); } else { append_menu_item (menu, _("Fragment(s)"), "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); } if (view -> adv_bonding[1]) { append_submenu (menu, _("Molecule(s)"), add_menu_coord (view, popm, 3)); } else { append_menu_item (menu, _("Molecule(s)"), "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); } append_opengl_item (view, menu, _("Advanced"), "adv-all", popm, popm, "E", IMG_STOCK, (gpointer)DPROPERTIES, FALSE, G_CALLBACK(to_coord_properties), & view -> colorp[30][0], FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * menu_shortcuts (glwin * view, int popm) \brief create shortcuts menu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_shortcuts (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, _("Shortcuts"), "shortcuts", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(view_shortcuts), (gpointer)view, FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * opengl_menu_bar (glwin * view) \brief create OpenGL window menu GTK4 \param view the target glwin */ GMenu * opengl_menu_bar (glwin * view) { GMenu * menu = g_menu_new (); append_submenu (menu, "OpenGL", prepare_opengl_menu(view, 0)); if (get_project_by_id(view -> proj) -> natomes) { append_submenu (menu, _("Model"), prepare_model_menu(view, 0)); append_submenu (menu, _("Chemistry"), prepare_coord_menu(view, 0)); } else { append_menu_item (menu, _("Model"), "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, _("Chemistry"), "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); } append_submenu (menu, _("Tools"), menu_tools(view, 0)); append_submenu (menu, _("View"), menu_view(view, 0)); append_submenu (menu, _("Animate"), menu_anim(view, 0)); append_submenu (menu, _("Help"), menu_shortcuts(view, 0)); return menu; } /*! \fn void menu_bar_attach_color_palettes (glwin * view, GtkWidget * menu_bar) \brief menu bar attach color palettes GTK4 \param view the target glwin \param menu_bar the GtkWidget sending the signal */ void menu_bar_attach_color_palettes (glwin * view, GtkWidget * menu_bar) { /* Here we need to attached color palettes for: - Box - Atoms - Clones - Total coordination(s) - Partial coordination(s) - Fragment(s) and molecule(s) - Ring(s) - Background This is a work in progress since the 'gtk_popover_menu_bar_add_child' to use to insert widget is bugged: https://gitlab.gnome.org/GNOME/gtk/-/issues/5955 */ int i, j, k, l, m; gchar * str, * env; project * this_proj = get_project_by_id (view -> proj); // Box if (! gtk_popover_menu_bar_add_child ((GtkPopoverMenuBar *)menu_bar, color_palette (view, -1, -1, -1), "set-box-color.0")) { g_debug ("Color palette error: box - custom= set-box-color.0"); } // Atom(s) and clone(s) for (i=0; i<2; i++) { for (j=0; j nspec; j++) { str = g_strdup_printf ("set-%s.%d", (! i) ? "atom-color" : "clone-color", j); if (! gtk_popover_menu_bar_add_child ((GtkPopoverMenuBar *)menu_bar, color_palette (view, i*this_proj -> nspec+j, -1, -1), (const gchar *)str)) { g_debug ("Color palette error: %s - %d - custom= %s", (! i) ? "atom-color" : "clone-color", j+1, str); } g_free (str); } } // Coordinations for (i=0; i<2; i++) { if (this_proj -> coord -> ntg[i]) { for (j=0; j nspec; j++) { for (k=0; k coord -> ntg[i][j]; k++) { m = 0; for (l=0; l coord -> ntg[i][l]; } if (i) { env = env_name (this_proj, k, j, 1, NULL); str = g_strdup_printf ("set-%s-c.%d", exact_name (env), m); g_free (env); } else { str = g_strdup_printf ("set-%d-c.%d", this_proj -> coord -> geolist[i][j][k], m); } m += (i) ? this_proj -> coord -> totcoord[0] : 0; if (! gtk_popover_menu_bar_add_child ((GtkPopoverMenuBar *)menu_bar, color_palette (view, 2*this_proj -> nspec+m, -1, -1), (const gchar *)str)) { g_debug ("Color palette error: %s - spec= %d - coord= %d, custom= %s", (! i) ? "total-coord" : "partial-coord", j+1, k+1, str); } g_free (str); } } } } // Fragment(s) and molecule(s) for (i=2; i<4; i++) { for (j=0; j coord -> totcoord[i]; j++) { str = g_strdup_printf ("set-%s-%d", (i == 2) ? "fcol" : "mcol", j); k = 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1] + j; if (i == 3) k += this_proj -> coord -> totcoord[2]; if (! gtk_popover_menu_bar_add_child ((GtkPopoverMenuBar *)menu_bar, color_palette (view, k, i, 0), (const gchar *)str)) { g_debug ("Color palette error: %s - %d, custom= %s", (i == 2) ? "fragment" : "molecule", j+1, str); } g_free (str); } } // Rings for (i=4; i<9; i++) { for (j=0; j coord -> totcoord[i]; j++) { str = g_strdup_printf ("set-rcol-%d-%d", i, j); if (! gtk_popover_menu_bar_add_child ((GtkPopoverMenuBar *)menu_bar, color_palette (view, -3, i-4, 0), (const gchar *)str)) { g_debug ("Color palette error: rings - %d - %d, custom= %s", i, j+1, str); } g_free (str); } } // Background if (! gtk_popover_menu_bar_add_child ((GtkPopoverMenuBar *)menu_bar, color_palette (view, -2, -1, -1), "set-back-color.0")) { g_debug ("Color palette error: background - custom= set-back-color.0"); } } /*! \fn GtkWidget * opengl_window_create_menu_bar (glwin * view) \brief create the OpenGL window menu bar widget GTK4 \param view the target glwin */ GtkWidget * opengl_window_create_menu_bar (glwin * view) { view -> menu_bar = destroy_this_widget (view -> menu_bar); if (view -> action_group) g_object_unref (view -> action_group); view -> action_group = g_simple_action_group_new (); opengl_project = NULL; GtkWidget * menu_bar = gtk_popover_menu_bar_new_from_model ((GMenuModel *)opengl_menu_bar(view)); menu_bar_attach_color_palettes (view, menu_bar); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> menu_box, menu_bar, FALSE, FALSE, 0); opengl_project_changed (activev); gchar * str = g_strdup_printf ("gl-%d", view -> action_id); gtk_widget_insert_action_group (view -> menu_box, str, G_ACTION_GROUP(view -> action_group)); g_free (str); show_the_widgets (menu_bar); return menu_bar; } /*! \fn void update_menu_bar (glwin * view) \brief update the OpenGL window menu bar GTK4 \param view the target glwin */ void update_menu_bar (glwin * view) { view -> menu_bar = opengl_window_create_menu_bar (view); } #endif atomes_1.3.1/src/opengl/win/w_encode.c0000664000175000017500000004335215212624223017313 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_encode.c * @short Functions to create the encoding (image/video) window * @author Sébastien Le Roux */ /* * This file: 'w_encode.c' * * Contains: * - The functions to create the encoding (image/video) window * * List of functions: image * clean_image (project * to_clean, image * to_cli); void clean_animation (glwin * view); void set_encoding_widget_sensitivity (gboolean video, int sensitivity); void window_encode (glwin * view, gboolean video); G_MODULE_EXPORT void set_video_frames (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_video_extra_frames (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_video_res (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_video_codec (GtkComboBox *ComboBoxGtk); G_MODULE_EXPORT void set_video_opengl_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_video_bitrate (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_image_format (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void run_window_encode (GtkDialog * win ,gint response_id, gpointer data); */ #include "global.h" #include "interface.h" #include "glview.h" #include "movie.h" int video_res[2]; int framesec; int extraframes; int codec; int oglquality; int bitrate; extern char * codec_name[VIDEO_CODECS]; extern char * image_name[IMAGE_FORMATS]; extern gboolean spin (gpointer data); /*! \fn G_MODULE_EXPORT void set_video_frames (GtkEntry * res, gpointer data) \brief set number of frames \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_video_frames (GtkEntry * res, gpointer data) { const gchar * n; int frs; n = entry_get_text (res); frs = string_to_double ((gpointer)n); if (frs > 0) { framesec = frs; } update_entry_int (res, framesec); } /*! \fn G_MODULE_EXPORT void set_video_extra_frames (GtkEntry * res, gpointer data) \brief set video extra frames \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_video_extra_frames (GtkEntry * res, gpointer data) { const gchar * n; int exf; n = entry_get_text (res); exf = string_to_double ((gpointer)n); if (exf >= 0) { extraframes = exf; } update_entry_int (res, extraframes); } /*! \fn G_MODULE_EXPORT void set_video_res (GtkEntry * res, gpointer data) \brief set video / image resolution \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_video_res (GtkEntry * res, gpointer data) { const gchar * n; int vres; int id = GPOINTER_TO_INT(data); n = entry_get_text (res); vres = string_to_double ((gpointer)n); if (vres > 0) { video_res[id] = vres; } update_entry_int (res, video_res[id]); } /*! \fn G_MODULE_EXPORT void set_video_codec (GtkComboBox *ComboBoxGtk) \brief change video codec \param *ComboBoxGtk the GtkComboBox sending the signal */ G_MODULE_EXPORT void set_video_codec (GtkComboBox *ComboBoxGtk) { codec = combo_get_active ((GtkWidget *)ComboBoxGtk); } /*! \fn G_MODULE_EXPORT void set_video_opengl_spin (GtkSpinButton * res, gpointer data) \brief set encoding OpenGL quality callback - spin \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_video_opengl_spin (GtkSpinButton * res, gpointer data) { qual = gtk_spin_button_get_value_as_int(res); if (qual == 0 || (qual > 1 && qual <= 1000)) { oglquality = qual; } update_entry_int (GTK_ENTRY(res), oglquality); } /*! \fn G_MODULE_EXPORT void set_video_bitrate (GtkEntry * res, gpointer data) \brief set video bitrate entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_video_bitrate (GtkEntry * res, gpointer data) { const gchar * n; int bit; n = entry_get_text (res); bit = string_to_double ((gpointer)n); if (bit > 0) { bitrate = bit; } update_entry_int (res, bitrate); } /*! \fn image * clean_image (project * to_clean, image * to_cli) \brief free all memory related to an image data structure \param to_clean the target project \param to_cli the target image to free */ image * clean_image (project * to_clean, image * to_cli) { int i, j; if (to_cli -> l_ghtning.spot) { for (i=0; i l_ghtning.lights; i++) { g_free (to_cli -> l_ghtning.spot[i]); } g_free (to_cli -> l_ghtning.spot); } if (to_cli -> xyz) { for (i=0; i<3; i++) { if (to_cli -> xyz -> title[i]) g_free (to_cli -> xyz -> title[i]); } g_free (to_cli -> xyz); to_cli -> xyz = NULL; } if (to_cli -> abc) { g_free (to_cli -> abc); to_cli -> abc = NULL; } for (i=0; i<2; i++) { if (to_cli -> show_atom[i]) { g_free (to_cli -> show_atom[i]); to_cli -> show_atom[i] = NULL; } if (to_cli -> show_label[i]) { g_free (to_cli -> show_label[i]); to_cli -> show_label[i] = NULL; } } for (i=0; i<9; i++) { if (to_cli -> show_poly[i]) { g_free (to_cli -> show_poly[i]); to_cli -> show_poly[i] = NULL; } } for (i=0; i<10; i++) { if (to_cli -> show_coord[i]) { g_free (to_cli -> show_coord[i]); to_cli -> show_coord[i] = NULL; } if (to_cli -> spcolor[i]) { for (j=0; j<((i < 2) ? to_clean -> nspec : 1); j++) { if (to_cli -> spcolor[i][j]) { g_free (to_cli -> spcolor[i][j]); to_cli -> spcolor[i][j] = NULL; } } g_free (to_cli -> spcolor[i]); to_cli -> spcolor[i] = NULL; } } if (to_cli -> at_color) { g_free (to_cli -> at_color); to_cli -> at_color = NULL; } if (to_cli -> sphererad) { g_free (to_cli -> sphererad); to_cli -> sphererad =NULL; } if (to_cli -> pointrad) { g_free (to_cli -> pointrad); to_cli -> pointrad = NULL; } if (to_cli -> atomicrad) { g_free (to_cli -> atomicrad); to_cli -> atomicrad = NULL; } for (i=0; i<2; i++) { for (j=0; j fm_show_vol[i][j]) { g_free (to_cli -> fm_show_vol[i][j]); } if (to_cli -> fm_vol_col[i][j]) { g_free (to_cli -> fm_vol_col[i][j]); } } } for (i=0; i<5; i++) { if (to_cli -> i_rings[i] != NULL) { for (j=0; j i_rings[i][0][0]; j++) { if (to_cli -> i_rings[i][j]) { g_free (to_cli -> i_rings[i][j]); to_cli -> i_rings[i][j] = NULL; } } g_free (to_cli -> i_rings[i]); to_cli -> i_rings[i] = NULL; } } if (to_cli -> at_data) { g_free (to_cli -> at_data); to_cli -> at_data = NULL; } g_free (to_cli); return NULL; } /*! \fn void clean_animation (project * proj, glwin * view) \brief clean saved animation data \param proj the target project \param view the target glwin */ void clean_animation (project * proj, glwin * view) { int i; snapshot * shot = view -> anim -> first; shot = view -> anim -> first; for (i=0; i < view -> anim -> frames-1; i++) { shot -> img = clean_image (proj, shot -> img); shot = shot -> next; g_free (shot -> prev); } view -> anim -> first = view -> anim -> last = shot; view -> anim -> frames = 0; } GtkWidget * resf; GtkWidget * rese; GtkWidget * resb; GtkWidget * res[2]; GtkWidget * cod; /*! \fn void set_encoding_widget_sensitivity (gboolean video, int sensitivity) \brief Adjust the sensitivity for the widgets of the encoding window \param video encoding video (yes / no) \param sensitivity sensitivity */ void set_encoding_widget_sensitivity (gboolean video, int sensitivity) { if (video) { widget_set_sensitive (resf, sensitivity); widget_set_sensitive (rese, sensitivity); widget_set_sensitive (resb, sensitivity); } widget_set_sensitive (res[0], sensitivity); widget_set_sensitive (res[1], sensitivity); widget_set_sensitive (cod, sensitivity); } GtkWidget * form; /*! \fn G_MODULE_EXPORT void set_image_format (GtkComboBox * box, gpointer data) \brief selecting the image format \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_image_format (GtkComboBox * box, gpointer data) { codec = combo_get_active ((GtkWidget *)box); switch (codec) { case 0: gtk_image_set_from_file (GTK_IMAGE(form), PACKAGE_PNG); break; case 1: gtk_image_set_from_file (GTK_IMAGE(form), PACKAGE_JPG); break; case 2: gtk_image_set_from_file (GTK_IMAGE(form), PACKAGE_TIFF); break; case 3: gtk_image_set_from_file (GTK_IMAGE(form), PACKAGE_BMP); break; } } GtkWidget * encoding_pb; gboolean encode_video; /*! \fn G_MODULE_EXPORT void run_window_encode (GtkDialog * win , gint response_id, gpointer data) \brief encoding a movie - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_window_encode (GtkDialog * win , gint response_id, gpointer data) { glwin * view = (glwin *)data; if (response_id == GTK_RESPONSE_APPLY) { set_encoding_widget_sensitivity (encode_video, 0); video_options * vopts = g_malloc0(sizeof*vopts); vopts -> proj = view -> proj; vopts -> oglquality = oglquality; vopts -> video_res = duplicate_int (2, video_res); vopts -> codec = codec; if (encode_video) { vopts -> framesec = framesec; vopts -> extraframes = extraframes; vopts -> bitrate = bitrate; save_movie (view, vopts); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(encoding_pb), 0.0); } else { render_image (view, vopts); } g_free (vopts -> video_res); g_free (vopts); set_encoding_widget_sensitivity (encode_video, 1); } else { destroy_this_dialog (win); } } /*! \fn void window_encode (glwin * view, gboolean video) \brief encoding a movie - creating the dialog \param view the target glwin \param video video (1) or image (0) */ void window_encode (glwin * view, gboolean video) { gchar * str; int i; if (video) { str = g_strdup_printf (_("%s - movie encoding"), prepare_for_title(get_project_by_id(view -> proj) -> name)); } else { str = g_strdup_printf (_("%s - image rendering"), prepare_for_title(get_project_by_id(view -> proj) -> name)); } GtkWidget * win = dialog_cancel_apply (str, view -> win, FALSE); g_free (str); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbox; if (video) { gtk_widget_set_size_request (vbox, -1, 420); // Frames hbox = create_hbox (0); gtk_widget_set_size_request (hbox, 300, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Frames recorded:"), 350, -1, 0.0, 0.5), FALSE, FALSE, 0); str = g_strdup_printf ("%d", view -> anim -> frames); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); // Frames per second hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); gtk_widget_set_size_request (hbox, 300, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Frames per seconds:"), 350, -1, 0.0, 0.5), FALSE, FALSE, 0); resf = create_entry (G_CALLBACK(set_video_frames), 100, 10, FALSE, NULL); framesec = 24; update_entry_int (GTK_ENTRY(resf), framesec); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, resf, FALSE, FALSE, 0); // Extra frames hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); gtk_widget_set_size_request (hbox, 300, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Extra frames every (frames):"), 350, -1, 0.0, 0.5), FALSE, FALSE, 0); rese = create_entry (G_CALLBACK(set_video_extra_frames), 100, 10, FALSE, NULL); extraframes = 10; update_entry_int (GTK_ENTRY(rese), extraframes); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, rese, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Movie resolution (in pixels):"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } else { gtk_widget_set_size_request (vbox, -1, 230); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Image resolution (in pixels):"), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); } hbox = create_hbox (0); gtk_widget_set_size_request (hbox, 300, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, (video) ? 10 : 0); gchar * ax[2]={"x: ", "y: "}; for (i=0; i<2; i++) { video_res[i] = view -> pixels[i]; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(ax[i], 100, -1, 0.5, 0.5), FALSE, FALSE, 0); res[i] = create_entry (G_CALLBACK(set_video_res), 100, 10, FALSE, (gpointer)GINT_TO_POINTER(i)); update_entry_int (GTK_ENTRY(res[i]), video_res[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, res[i], FALSE, FALSE, 0); } cod = create_combo (); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, video ? 0 : 10); gtk_widget_set_size_request (hbox, 300, -1); if (video) { // Codec add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Video codec:"), 300, -1, 0.0, 0.5), FALSE, FALSE, 0); for (i=0; i anim -> last -> img -> ray_tracing) { if (video) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("OpenGL quality [0-1000] (0= recorded quality):"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("OpenGL quality [0-1000] (0= on-screen quality):"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, spin_button (G_CALLBACK(set_video_opengl_spin), 0, 0, 1000, 1, 0, 100, NULL), FALSE, FALSE, 20); } oglquality = 0; if (video) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Progress: "), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); encoding_pb = gtk_progress_bar_new (); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(encoding_pb), 0.0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, encoding_pb, FALSE, FALSE, 0); } show_the_widgets (win); if (view -> spin[0] || view -> spin[1]) { for (i=0; i<2; i++) { view -> spin[i+2] = view -> spin[i]; view -> spin_speed[i+2] = view -> spin_speed[i]; view -> spin[i] = FALSE; } } gboolean old_play, old_stop; old_play = view -> play; old_stop = view -> stop; view -> play = FALSE; view -> stop = TRUE; encode_video = video; run_this_gtk_dialog (win, G_CALLBACK(run_window_encode), view); clean_animation (get_project_by_id(view -> proj), view); update (view); if (view -> spin[2] || view -> spin[3]) { for (i=0; i<2; i++) { view -> spin[i] = view -> spin[i+2]; view -> spin_speed[i] = view -> spin_speed[i+2]; g_timeout_add (REFRESH, (GSourceFunc) spin, & view -> colorp[0][i]); view -> spin[i+2] = FALSE; view -> spin_speed[i+2] = 0; } } view -> play = old_play; view -> stop = old_stop; } atomes_1.3.1/src/opengl/win/w_advance.c0000664000175000017500000017265015212624223017463 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_advance.c * @short Functions to create the OpenGL parameters edition window * @author Sébastien Le Roux */ /* * This file: 'w_advance.c' * * Contains: * - The functions to create the OpenGL parameters edition window * * List of functions: int * light_source_to_be_removed (int val, Lightning * ogl_lightning, opengl_edition * ogl_edit); G_MODULE_EXPORT gboolean scroll_scale_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean scroll_scale_quality (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean scroll_set_fog_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean close_advanced (GtkWidget * window, gpointer data); G_MODULE_EXPORT gboolean close_advanced (GtkWidget * widg, GdkEvent * event, gpointer data); void print_light_source (Light source, int i); void show_active_light_data (opengl_edition * ogl_win, int lid, int tid); void update_light_data (int li, opengl_edition * ogl_win); void create_lights_combo (int num_lights, opengl_edition * ogl_win); void add_remove_lights (int val, gpointer data); void set_data_pos (vec3_t * vect, int pos, double v); void param_has_changed (gpointer data, double val); void fog_param_changed (gpointer data, GLfloat u, GtkRange * range); void setup_fog_dialogs (opengl_edition * ogl_edit, int fid); void close_advanced_opengl (gpointer data); G_MODULE_EXPORT void toggled_delete_ligth (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggled_delete_ligth (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void run_light_source_to_be_removed (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void show_light_param (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_nlights_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void update_light_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_object_pos (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_light_type (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_light_fix (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void show_this_light (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void show_this_light (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_use_template_toggle (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_use_template_toggle (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_template (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_r_model (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_f_model (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_l_model (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void update_mat_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void scale_param (GtkRange * range, gpointer data); G_MODULE_EXPORT void scale_quality (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_fog_param (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_fog_type (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_fog_mode (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void opengl_advanced (GtkWidget * widg, gpointer data); GtkWidget * adv_box (GtkWidget * box, char * lab, int vspace, int size, float xalign); GtkWidget * bdv_box (GtkWidget * box, char * lab, int size, float xalign); GtkWidget * GtkWidget * create_setting_pos (gchar * lab, int size, float xalign, int pid, int lid, float * values, opengl_edition * ogl_win); GtkWidget * lights_tab (glwin * view, opengl_edition * ogl_edit, Lightning * the_light); GtkWidget * rendering_fix (glwin * view); GtkWidget * lightning_fix (glwin * view); GtkWidget * materials_tab (glwin * view, opengl_edition * ogl_edit, Material * the_mat); GtkWidget * fog_tab (glwin * view, opengl_edition * ogl_edit, Fog * the_fog); Light * init_light_source (int type, float size); Light * copy_light_source (Light * old_sp); Light ** copy_light_sources (int dima, int dimb, Light ** old_sp); */ #include "global.h" #include "interface.h" #include "preferences.h" #include "glview.h" #include "glwindow.h" extern void set_quality (int q, glwin * view); GLfloat template_parameters[TEMPLATES][5] ={{0.50, 0.50, 0.99, 1.00, 1.00}, // Ok {0.90, 0.60, 0.99, 1.50, 1.00}, // Ok {0.80, 0.40, 0.99, 1.00, 1.00}, // Ok {0.35, 0.15, 0.99, 1.50, 1.00}, // Ok {0.50, 0.50, 0.99, 1.00, 0.50}, // {0.50, 0.50, 0.99, 1.00, 0.75}, // {0.35, 0.80, 0.99, 1.50, 1.00}}; // Ok float mat_min_max[5][2] = {{0.0, 1.0}, {0.0, 1.0}, {0.0, 1.0}, {0.0, 10.0}, {0.0, 1.0}}; gchar * ogl_settings[3][10] = {{i18n("Albedo"), i18n("Metallic"), i18n("Roughness"), i18n("Ambient occlusion"), i18n("Gamma correction"), i18n("Opacity")}, {i18n("Position"), i18n("Direction"), i18n("Intensity"), i18n("Constant attenuation"), i18n("Linear attenuation"), i18n("Quadratic attenuation"), i18n("Cone angle"), i18n("Inner cutoff"), i18n("Outer cutoff"), i18n("Type")}, {i18n("Fog color")}}; gchar * lpos[3] = {"x", "y", "z"}; gchar * cpos[3] = {"r", "g", "b"}; /*! \fn GtkWidget * adv_box (GtkWidget * box, char * lab, int vspace, int size, float xalign) \brief create a box with markup label \param box the box to insert the widget in \param lab label \param vspace vertical space \param size size \param xalign x alignement */ GtkWidget * adv_box (GtkWidget * box, char * lab, int vspace, int size, float xalign) { GtkWidget * hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(lab, size, -1, xalign, 0.5), FALSE, FALSE, 25); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, vspace); return hbox; } /*! \fn GtkWidget * bdv_box (GtkWidget * box, char * lab, int size, float xalign) \brief create a box with markup label \param box the GtkWidget sending the signal \param lab label \param size size \param xalign x alignement */ GtkWidget * bdv_box (GtkWidget * box, char * lab, int size, float xalign) { GtkWidget * hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (lab, size, -1, xalign, 0.5), FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 5); return hbox; } GtkWidget * d_close; int status; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_delete_ligth (GtkCheckButton * but, gpointer data) \brief toggle delete light callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_delete_ligth (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_delete_ligth (GtkToggleButton * but, gpointer data) \brief toggle delete light callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_delete_ligth (GtkToggleButton * but, gpointer data) #endif { if (button_get_status ((GtkWidget *)but)) { status --; } else { status ++; } if (status == 0) { widget_set_sensitive (d_close, 1); } else { widget_set_sensitive (d_close, 0); } } int * light_list; GtkWidget ** light_but; /*! \fn G_MODULE_EXPORT void run_light_source_to_be_removed (GtkDialog * win, gint response_id, gpointer data) \brief remove light source(s) - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_light_source_to_be_removed (GtkDialog * win, gint response_id, gpointer data) { if (! status) { Lightning * ogl_lightning = (Lightning *)data; int i; for (i=0; i lights; i++) { if (button_get_status ((GtkWidget *)light_but[i])) { light_list[i] = i+1; } } destroy_this_dialog (win); } else { gchar * str = g_strdup_printf (_("You must select %d light source(s) to be removed !"), status); show_warning (str, GTK_WIDGET(win)); g_free (str); } } /*! \fn int * light_source_to_be_removed (int val, Lightning * ogl_lightning, opengl_edition * ogl_edit) \brief remove light source(s) - creating the dialog \param val number of light(s) to remove \param ogl_lightning the target lightning data structure \param ogl_edit the target OpenGL edition window */ int * light_source_to_be_removed (int val, Lightning * ogl_lightning, opengl_edition * ogl_edit) { int i; gchar * str; status = val; if (val > 1) { str = g_strdup_printf (_("Please select the %d light sources to be removed: "), val); } else { str = g_strdup_printf (_("Please select the light source to be removed: ")); } GtkWidget * win = message_dialogmodal (str, _("Remove light source(s)"), GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, ogl_edit -> win); GtkWidget * vbox = dialog_get_content_area (win); d_close = gtk_dialog_get_widget_for_response (GTK_DIALOG (win), GTK_RESPONSE_CLOSE); widget_set_sensitive (d_close, 0); g_free (str); light_but = g_malloc0(ogl_lightning -> lights * sizeof*light_but); for (i=0; i lights; i++) { str = g_strdup_printf (_("Light N°%d"), i+1); light_but[i] = check_button (str, -1, 25, FALSE, G_CALLBACK(toggled_delete_ligth), (gpointer)GINT_TO_POINTER(i)); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, light_but[i], TRUE, TRUE, 0); g_free (str); } light_list = allocint (ogl_lightning -> lights); run_this_gtk_dialog (win, G_CALLBACK(run_light_source_to_be_removed), ogl_lightning); return light_list; } /*! \fn void print_light_source (Light source, int i) \brief print light source data \param source the light source \param i the light source id */ void print_light_source (Light source, int i) { g_debug ("\n"); g_debug ("Light N°%d", i); g_debug ("Type= %d", source.type); g_debug ("Pos_x= %f, Pos_y= %f, Pos_z= %f", source.position.x, source.position.y, source.position.z); g_debug ("Dir_x= %f, Dir_y= %f, Dir_z= %f", source.direction.x, source.direction.y, source.direction.z); g_debug ("Int_r= %f, Int_g= %f, Int_b= %f", source.intensity.x, source.intensity.y, source.intensity.z); g_debug ("Att_c= %f, Att_l= %f, Att_q= %f", source.attenuation.x, source.attenuation.y, source.attenuation.z); g_debug ("Spo_a= %f, Spo_i= %f, Spo_o= %f", source.spot_data.x, source.spot_data.y, source.spot_data.z); g_debug ("\n"); } /* Light attenuation table (from Ogre3D): Distance(to object) Constant Linear Quadratic 7 1.0 0.7 1.8 13 1.0 0.35 0.44 20 1.0 0.22 0.20 32 1.0 0.14 0.07 50 1.0 0.09 0.032 65 1.0 0.07 0.017 100 1.0 0.045 0.0075 160 1.0 0.027 0.0028 200 1.0 0.022 0.0019 325 1.0 0.014 0.0007 600 1.0 0.007 0.0002 3250 1.0 0.0014 0.000007 */ /*! \fn Light * init_light_source (int type, float size) \brief initialize a light source \param type the type of light \param size system size */ Light * init_light_source (int type, float size) { Light * new_light = g_malloc0(sizeof*new_light); new_light -> type = type; new_light -> fix = (type != 1) ? 0 : 1; new_light -> show = 0; new_light -> intensity = vec3(0.0, 0.0, 0.0); new_light -> direction = vec3(0.0, 0.0, 0.0); new_light -> position = vec3(0.0, 0.0, 0.0); new_light -> attenuation = vec3(0.0, 0.0, 0.0); if (type == 0) { new_light -> intensity = vec3 (DEFAULT_INTENSITY, DEFAULT_INTENSITY, DEFAULT_INTENSITY); new_light -> position = vec3 (0.0, 0.0, 0.0); new_light -> direction = vec3 (0.5, 1.0, 0.7); new_light -> attenuation = vec3 (1.0, 0.0, 0.0); } else if (type == 1) { new_light -> intensity = vec3 (1.2, 1.1, 1.0); new_light -> position = vec3 (0.0, 0.0, size * 0.8); new_light -> attenuation = vec3 (1.0, 0.01 / size, 0.001 / (size * size)); } else { new_light -> intensity = vec3 (1.5, 1.4, 1.3); new_light -> position = vec3 (0.0, 0.0, size * 0.5); // Au centre new_light -> direction = vec3 (0.0, 0.0, -1.0); // Vers le bas new_light -> attenuation = vec3 (1.0, 0.01 / size, 0.001 / (size * size)); new_light -> spot_data = vec3 (45.0, 5.0, 8.0); } return new_light; } /*! \fn Light * copy_light_source (Light * old_sp) \brief create a copy of a light source \param old_sp the light source to copy */ Light * copy_light_source (Light * old_sp) { Light * new_sp = g_malloc0(sizeof*new_sp); new_sp -> type = old_sp -> type; new_sp -> fix = old_sp -> fix; new_sp -> show = old_sp -> show; new_sp -> position = old_sp -> position; new_sp -> direction = old_sp -> direction; new_sp -> intensity = old_sp -> intensity; new_sp -> attenuation = old_sp -> attenuation; new_sp -> spot_data = old_sp -> spot_data; return new_sp; } /*! \fn Light ** copy_light_sources (int dima, int dimb, Light ** old_sp) \brief create a copy of a list of light sources \param dima new list size \param dimb old list size to duplicate \param old_sp old light sources */ Light ** copy_light_sources (int dima, int dimb, Light ** old_sp) { int j; Light ** new_sp = g_malloc0(dima*sizeof * new_sp); for (j=0; j proj) -> modelgl -> anim -> last -> img -> l_ghtning.spot[lid]; this_light -> type = tid; hide_the_widgets (ogl_win -> advanced_light_box); widget_set_sensitive (ogl_win -> light_type, lid); if (this_light -> type) show_the_widgets (ogl_win -> advanced_light_box); int i; for (i=0; i<2; i++) { hide_the_widgets (ogl_win -> light_b_coord[i]); hide_the_widgets (ogl_win -> light_b_entry[i]); } if (this_light -> type) { show_the_widgets (ogl_win -> light_b_coord[0]); show_the_widgets (ogl_win -> light_b_entry[0]); } if (this_light -> type == 0 || this_light -> type == 2) { show_the_widgets (ogl_win -> light_b_coord[1]); } if (this_light -> type == 2) { show_the_widgets (ogl_win -> light_b_entry[1]); } if (! preferences) { hide_the_widgets (ogl_win -> light_show); if (this_light -> type) show_the_widgets (ogl_win -> light_show); } } /*! \fn void update_light_data (int li, opengl_edition * ogl_win) \brief update light data \param li the light id \param ogl_win the target OpenGL edition window */ void update_light_data (int li, opengl_edition * ogl_win) { Light * this_light = (preferences) ? tmp_lightning.spot[li] : get_project_by_id(ogl_win -> proj) -> modelgl -> anim -> last -> img -> l_ghtning.spot[li]; combo_set_active (ogl_win -> light_type, this_light -> type); combo_set_active (ogl_win -> light_fix, this_light -> fix); show_active_light_data (ogl_win, li, this_light -> type); update_entry_double (GTK_ENTRY(ogl_win -> light_entry[0]), this_light -> attenuation.x); update_entry_double (GTK_ENTRY(ogl_win -> light_entry[1]), this_light -> attenuation.y); update_entry_double (GTK_ENTRY(ogl_win -> light_entry[2]), this_light -> attenuation.z); update_entry_double (GTK_ENTRY(ogl_win -> light_entry[3]), this_light -> spot_data.x); update_entry_double (GTK_ENTRY(ogl_win -> light_entry[4]), this_light -> spot_data.y); update_entry_double (GTK_ENTRY(ogl_win -> light_entry[5]), this_light -> spot_data.z); update_entry_double (GTK_ENTRY(ogl_win -> entogl[1][0]), this_light -> position.x); update_entry_double (GTK_ENTRY(ogl_win -> entogl[1][1]), this_light -> position.y); update_entry_double (GTK_ENTRY(ogl_win -> entogl[1][2]), this_light -> position.z); update_entry_double (GTK_ENTRY(ogl_win -> entogl[2][0]), this_light -> direction.x); update_entry_double (GTK_ENTRY(ogl_win -> entogl[2][1]), this_light -> direction.y); update_entry_double (GTK_ENTRY(ogl_win -> entogl[2][2]), this_light -> direction.z); update_entry_double (GTK_ENTRY(ogl_win -> entogl[3][0]), this_light -> intensity.x); update_entry_double (GTK_ENTRY(ogl_win -> entogl[3][1]), this_light -> intensity.y); update_entry_double (GTK_ENTRY(ogl_win -> entogl[3][2]), this_light -> intensity.z); if (! preferences) { button_set_status (ogl_win -> light_show, this_light -> show); } } /*! \fn G_MODULE_EXPORT void show_light_param (GtkComboBox * box, gpointer data) \brief update light parameters based on light id in combo box \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_light_param (GtkComboBox * box, gpointer data) { int li = combo_get_active ((GtkWidget *)box); update_light_data (li, (opengl_edition *)data); } /*! \fn void create_lights_combo (int num_lights, opengl_edition * ogl_win) \brief create light combo box \param num_lights the target number of lights \param ogl_win the target OpenGL edition window */ void create_lights_combo (int num_lights, opengl_edition * ogl_win) { ogl_win -> lights = create_combo (); int i; gchar * str; for (i=0; i lights, str); g_free (str); } gtk_widget_set_size_request (ogl_win -> lights, 100, -1); g_signal_connect (G_OBJECT (ogl_win -> lights), "changed", G_CALLBACK(show_light_param), ogl_win); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ogl_win -> lights_box, ogl_win -> lights, FALSE, FALSE, 10); } /*! \fn void add_remove_lights (int val, gpointer data) \brief add or remove lights \param val total number of light(s) to keep \param data the associated data pointer */ void add_remove_lights (int val, gpointer data) { int i, j, k; project * this_proj; glwin * view; Lightning * this_lightning; opengl_edition * ogl_edit; if (! preferences) { view = (glwin *)data; this_proj = get_project_by_id (view -> proj); this_lightning = & view -> anim -> last -> img -> l_ghtning; ogl_edit = view -> opengl_win; } else { this_lightning = & tmp_lightning; ogl_edit = pref_ogl_edit; } i = this_lightning -> lights; Light ** old_spots; if (val > i) { #ifdef DEBUG g_debug ("ADDING_LIGHT_SOURCE:: val= %d, i= %d", val, i); #endif // Adding light source(s) old_spots = copy_light_sources (i, i, this_lightning -> spot); g_free (this_lightning -> spot); this_lightning -> spot = copy_light_sources (val, i, old_spots); this_lightning -> lights = val; for (j=i; j spot[j] = init_light_source (0, (! preferences) ? this_proj -> modelgl -> p_moy : 1.0); // Init directional by default } g_free (old_spots); } else if (val < i) { // We need to remove a light #ifdef DEBUG g_debug ("REMOVING_LIGHT_SOURCE:: val= %d, i= %d", val, i); #endif int * ltr = light_source_to_be_removed (i-val, this_lightning, ogl_edit); if (ltr != NULL) { old_spots = copy_light_sources (i, i, this_lightning -> spot); g_free (this_lightning -> spot); this_lightning -> spot = g_malloc0(val*sizeof*this_lightning -> spot); k = -1; for (j=0; j spot[k] = copy_light_source (old_spots[j]); } #ifdef DEBUG else { g_debug ("REMOVING_LIGHT_SOURCES:: j= %d, ltr[%d]= %d", j, j, ltr[j]); } #endif // DEBUG } g_free (old_spots); this_lightning -> lights = val; #ifdef DEBUG g_debug ("LIGHT(s) HAVE BEEN REMOVED:: NEW_LIGHTS_NUM= %d", val); #endif } } ogl_edit -> lights = destroy_this_widget (ogl_edit -> lights); create_lights_combo (this_lightning -> lights, ogl_edit); show_the_widgets (ogl_edit -> lights); combo_set_active (ogl_edit -> lights, 0); update_light_data (0, ogl_edit); if (! preferences) { init_shaders (view); update (view); } } /*! \fn G_MODULE_EXPORT void set_nlights_spin (GtkSpinButton * res, gpointer data) \brief change the number of light(s) - spin button \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_nlights_spin (GtkSpinButton * res, gpointer data) { add_remove_lights (gtk_spin_button_get_value_as_int(res), data); } /*! \fn G_MODULE_EXPORT void update_light_param (GtkEntry * res, gpointer data) \brief update light parameter \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_light_param (GtkEntry * res, gpointer data) { dint * lid = (dint *)data; glwin * view = (preferences) ? NULL : get_project_by_id(lid -> a) -> modelgl; opengl_edition * ogl_edit = (preferences) ? pref_ogl_edit : (view) ? view -> opengl_win : NULL; if (ogl_edit) { int li = combo_get_active (ogl_edit-> lights); Light * this_light = (preferences) ? tmp_lightning.spot[li] : view -> anim -> last -> img -> l_ghtning.spot[li]; const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); switch (lid -> b) { case 0: this_light -> attenuation.x = v; break; case 1: this_light -> attenuation.y = v; break; case 2: this_light -> attenuation.z = v; break; case 3: this_light -> spot_data.x = v; break; case 4: this_light -> spot_data.y = v; break; case 5: this_light -> spot_data.z = v; break; } update_entry_double (res, v); if (this_light -> show) view -> create_shaders[LIGHT] = TRUE; } if (! preferences) update (view); } /*! \fn void set_data_pos (vec3_t * vect, int pos, double v) \brief modify a vector component \param vect vector to adjust \param pos position to adjust \param v new value */ void set_data_pos (vec3_t * vect, int pos, double v) { switch (pos) { case 0: vect -> x = v; break; case 1: vect -> y = v; break; case 2: vect -> z = v; break; } } /*! \fn G_MODULE_EXPORT void set_object_pos (GtkEntry * res, gpointer data) \brief set object position \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_object_pos (GtkEntry * res, gpointer data) { tint * id = (tint *)data; glwin * view; opengl_edition * edit_ogl; Material * the_mat; Lightning * the_lightning; Fog * the_fog; const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (! preferences) { view = get_project_by_id(id -> a) -> modelgl; the_mat = & view -> anim -> last -> img -> m_terial; the_lightning = & view -> anim -> last -> img -> l_ghtning; the_fog = & view -> anim -> last -> img -> f_g; edit_ogl = view -> opengl_win; } else { the_mat = & tmp_material; the_lightning = & tmp_lightning; the_fog = & tmp_fog; edit_ogl = pref_ogl_edit; } if (id -> b == 0) { set_data_pos (& the_mat -> albedo, id -> c, v); } else if (id -> b == 4) { set_data_pos (& the_fog -> color, id -> c, v); } else if (id -> b > 0 && edit_ogl) { int li = combo_get_active (edit_ogl -> lights); switch (id -> b) { case 1: set_data_pos (& the_lightning -> spot[li] -> position, id -> c, v); break; case 2: set_data_pos (& the_lightning -> spot[li] -> direction, id -> c, v); break; case 3: set_data_pos (& the_lightning -> spot[li] -> intensity, id -> c, v); break; } if (the_lightning -> spot[li] -> show && ! preferences) view -> create_shaders[LIGHT] = TRUE; } if (edit_ogl) update_entry_double (res, v); if (! preferences) update (view); } /*! \fn G_MODULE_EXPORT void set_light_type (GtkComboBox * box, gpointer data) \brief set light type callback \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_light_type (GtkComboBox * box, gpointer data) { opengl_edition * ogl_win = (opengl_edition *)data; int li = combo_get_active (ogl_win -> lights); int ti = combo_get_active ((GtkWidget *)box); show_active_light_data (ogl_win, li, ti); } /*! \fn G_MODULE_EXPORT void set_light_fix (GtkComboBox * box, gpointer data) \brief set light fix callback \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_light_fix (GtkComboBox * box, gpointer data) { opengl_edition * ogl_win = (opengl_edition *)data; glwin * view; Lightning * ogl_ligthning; if (! preferences) { view = get_project_by_id(ogl_win -> proj) -> modelgl; ogl_ligthning = & view -> anim -> last -> img -> l_ghtning; } else { ogl_ligthning = & tmp_lightning; } int li = combo_get_active (ogl_win -> lights); ogl_ligthning -> spot[li] -> fix = combo_get_active ((GtkWidget *)box); if (! preferences) { view -> create_shaders[LIGHT] = TRUE; update (view); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_this_light (GtkCheckButton * but, gpointer data) \brief show / hide this light callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_this_light (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_this_light (GtkToggleButton * but, gpointer data) \brief show / hide this light callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_this_light (GtkToggleButton * but, gpointer data) #endif { opengl_edition * ogl_win = (opengl_edition *)data; glwin * view = get_project_by_id(ogl_win -> proj) -> modelgl; int li = combo_get_active (ogl_win -> lights); view -> anim -> last -> img -> l_ghtning.spot[li] -> show = button_get_status ((GtkWidget *)but); view -> create_shaders[LIGHT] = TRUE; update (view); } /*! \fn GtkWidget * create_setting_pos (gchar * lab, int size, float xalign, int pid, int lid, float * values, opengl_edition * ogl_win) \brief create OpenGL setting entries table \param lab label to display \param size size of the label \param xalign x alignement \param pid parameter id (0 = material, 1 = light direction, 2 = light position, 3 = light intensity, 4 = fog) \param lid parameter label id \param values target parameter values \param ogl_win the target OpenGL edition window */ GtkWidget * create_setting_pos (gchar * lab, int size, float xalign, int pid, int lid, float * values, opengl_edition * ogl_win) { int i; GtkWidget * setting_pos = create_vbox (BSEP); adv_box (setting_pos, lab, 5, size, xalign); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, setting_pos, hbox, FALSE, FALSE, 0); GtkWidget * sbox = create_hbox (0); gtk_widget_set_size_request (sbox, 500, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sbox, FALSE, FALSE, 70); GtkWidget * label; for (i=0; i<3; i++) { ogl_win -> pos_pointer[pid][i].a = ogl_win -> proj; ogl_win -> pos_pointer[pid][i].b = pid; ogl_win -> pos_pointer[pid][i].c = i; label = markup_label ((pid > 0 && pid < 3) ? lpos[i] : cpos[i], 20, -1, 1.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sbox, label, FALSE, FALSE, 5); ogl_win -> entogl[pid][i] = create_entry (G_CALLBACK(set_object_pos), 80, 10, FALSE, & ogl_win -> pos_pointer[pid][i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sbox, ogl_win -> entogl[pid][i], FALSE, FALSE, 0); update_entry_double (GTK_ENTRY(ogl_win -> entogl[pid][i]), values[i]); } if (pid == 1 && ! preferences) { ogl_win -> light_show = check_button (_("Show light"), -1, -1, FALSE, G_CALLBACK(show_this_light), ogl_win); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sbox, ogl_win -> light_show, FALSE, FALSE, 10); } return setting_pos; } /*! \fn GtkWidget * lights_tab (glwin * view, opengl_edition * ogl_edit, Lightning * the_lightning) \brief OpenGL light(s) parameters tab \param view the target glwin \param ogl_edit the target OpenGL edition window \param ogl_lightning the target lightning data structure */ GtkWidget * lights_tab (glwin * view, opengl_edition * ogl_edit, Lightning * ogl_lightning) { int i, j, k; GtkWidget * vbox; GtkWidget * hbox, * lhbox; GtkWidget * layout = create_layout (-1, 600); vbox = add_vbox_to_layout (layout, 480, -1); hbox = bdv_box (vbox, _("Number of light sources\n(add or remove lights - up to 10 sources)"), 250, 0.0); gtk_widget_set_size_request (hbox, -1, 65); GtkWidget * nlights = spin_button (G_CALLBACK(set_nlights_spin), ogl_lightning -> lights, 1.0, 10.0, 1.0, 0, 100, view); gtk_widget_set_size_request (nlights, 25, -1); GtkWidget * fix = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fix, FALSE, FALSE, 20); gtk_fixed_put (GTK_FIXED (fix), nlights, 0, 20); hbox = bdv_box (vbox, _("Configure light source *"), 250, 0.0); ogl_edit -> lights_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ogl_edit -> lights_box, FALSE, FALSE, 10); create_lights_combo (ogl_lightning -> lights, ogl_edit); bdv_box (vbox, _("Light configuration"), 250, 0.0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); ogl_edit -> light_type = create_combo (); combo_text_append (ogl_edit -> light_type, _("Directional")); combo_text_append (ogl_edit -> light_type, _("Point")); combo_text_append (ogl_edit -> light_type, _("Spot")); g_signal_connect (G_OBJECT (ogl_edit -> light_type), "changed", G_CALLBACK(set_light_type), ogl_edit); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ogl_edit -> light_type, FALSE, FALSE, 60); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new(_("Fixed by respect to: ")), FALSE, FALSE, 10); ogl_edit -> light_fix = create_combo(); combo_text_append (ogl_edit -> light_fix, _("The viewer")); combo_text_append (ogl_edit -> light_fix, _("The model")); g_signal_connect (G_OBJECT (ogl_edit -> light_fix), "changed", G_CALLBACK(set_light_fix), ogl_edit); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ogl_edit -> light_fix, FALSE, FALSE, 10); float values[3] = {0.0, 0.0, 0.0}; // Position gchar * str = (preferences) ? g_strdup_printf ("%s: **", _(ogl_settings[1][0])) : g_strdup_printf ("%s:", _(ogl_settings[1][0])); ogl_edit -> light_b_coord[0] = create_setting_pos (str, 130, 0.0, 1, 0, values, ogl_edit); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, ogl_edit -> light_b_coord[0], FALSE, FALSE, 0); // Direction str = g_strdup_printf ("%s:", _(ogl_settings[1][1])); ogl_edit -> light_b_coord[1] = create_setting_pos (str, 130, 0.0, 2, 1, values, ogl_edit); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, ogl_edit -> light_b_coord[1], FALSE, FALSE, 0); // Intensity str = (preferences) ? g_strdup_printf ("%s: **", _(ogl_settings[1][2])) : g_strdup_printf ("%s:", _(ogl_settings[1][2])); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_setting_pos (str, 130, 0.0, 3, 2, values, ogl_edit), FALSE, FALSE, 0); g_free (str); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); ogl_edit -> advanced_light_box = create_vbox (BSEP); add_box_child_start ( GTK_ORIENTATION_HORIZONTAL, hbox, ogl_edit -> advanced_light_box, FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_VERTICAL, ogl_edit -> advanced_light_box, markup_label(_("Advanced parameters"), -1, -1, 0.1, 0.5), FALSE, FALSE, 10); GtkWidget * lbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, ogl_edit -> advanced_light_box, lbox, FALSE, FALSE, 0); GtkWidget * lvbox = create_vbox (BSEP); add_box_child_start ( GTK_ORIENTATION_HORIZONTAL, lbox, lvbox, FALSE, FALSE, 20); k = 0; for (i=0; i<2; i++) { ogl_edit -> light_b_entry[i] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, lvbox, ogl_edit -> light_b_entry[i], FALSE, FALSE, 0); for (j=0; j<3; j++) { ogl_edit -> light_entry[k] = create_entry (G_CALLBACK(update_light_param), 100, 15, FALSE, & ogl_edit -> pointer[k]); str = g_strdup_printf ("%s:", _(ogl_settings[1][k+3])); lhbox = adv_box (ogl_edit -> light_b_entry[i], str, 0, 170, 0.0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, lhbox, ogl_edit -> light_entry[k], FALSE, FALSE, 10); if (i == 1) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, lhbox, gtk_label_new("°"), FALSE, FALSE, 0); k ++; } } show_the_widgets (layout); combo_set_active (ogl_edit -> lights, 0); update_light_data (0, ogl_edit); append_comments (vbox, "*", _("Note that light N°1 must be a directional light")); if (preferences) { append_comments (vbox, "**", _("Position and attenuation will be corrected based on model depth")); } return layout; } // ***************** MATERIAL ******************* // #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_use_template_toggle (GtkCheckButton * but, gpointer data) \brief use or not OpenGL material template callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_use_template_toggle (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_use_template_toggle (GtkToggleButton * but, gpointer data) \brief use or not OpenGL material template callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_use_template_toggle (GtkToggleButton * but, gpointer data) #endif { int i, j, k; Material * the_mat; opengl_edition * ogl_edit; glwin * view; if (! preferences) { view = (glwin *)data; ogl_edit = view -> opengl_win; the_mat = & view -> anim -> last -> img -> m_terial; i = combo_get_active (view -> opengl_win -> templates); } else { ogl_edit = pref_ogl_edit; the_mat = & tmp_material; i = combo_get_active (pref_ogl_edit -> templates); } j = button_get_status ((GtkWidget *)but); if (j) { if (i == -1) i = 3; the_mat -> albedo = vec3(0.5, 0.5, 0.5); for (k=0; k<5; k++) { the_mat -> param[k+1] = template_parameters[i][k]; if (ogl_edit) { update_entry_double (GTK_ENTRY(ogl_edit -> m_entry[k]), the_mat -> param[k+1]); gtk_range_set_value (GTK_RANGE(ogl_edit -> m_scale[k]), the_mat -> param[k+1]); } } combo_set_active (ogl_edit -> templates, i); if (ogl_edit) { update_entry_double (GTK_ENTRY(ogl_edit -> entogl[0][0]), the_mat -> albedo.x); update_entry_double (GTK_ENTRY(ogl_edit -> entogl[0][1]), the_mat -> albedo.y); update_entry_double (GTK_ENTRY(ogl_edit -> entogl[0][2]), the_mat -> albedo.z); } k = i+1; } else { k = 0; } the_mat -> predefine = k; widget_set_sensitive (ogl_edit -> templates, the_mat -> predefine); widget_set_sensitive (ogl_edit -> param_mat, ! the_mat -> predefine); if (! preferences) { update (view); } } /*! \fn G_MODULE_EXPORT void set_template (GtkComboBox * box, gpointer data) \brief change the OpenGL material template \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_template (GtkComboBox * box, gpointer data) { int i, j; Material * the_mat; glwin * view; opengl_edition * ogl_edit; if (preferences) { the_mat = & tmp_material; ogl_edit = pref_ogl_edit; } else { view = (glwin *)data; the_mat = & view -> anim -> last -> img -> m_terial; ogl_edit = view -> opengl_win; } i = combo_get_active ((GtkWidget *)box); the_mat -> predefine = i + 1; for (j=0; j<5; j++) { the_mat -> param[j+1] = template_parameters[i][j]; #ifdef DEBUG g_debug ("SET_TEMPLATES:: j= %d, val= %f", j, template_parameters[i][j]); #endif if (ogl_edit) { update_entry_double (GTK_ENTRY(ogl_edit -> m_entry[j]), the_mat -> param[j+1]); gtk_range_set_value (GTK_RANGE(ogl_edit -> m_scale[j]), the_mat -> param[j+1]); } } if (ogl_edit) { update_entry_double (GTK_ENTRY(ogl_edit -> entogl[0][0]), the_mat -> albedo.x); update_entry_double (GTK_ENTRY(ogl_edit -> entogl[0][1]), the_mat -> albedo.y); update_entry_double (GTK_ENTRY(ogl_edit -> entogl[0][2]), the_mat -> albedo.z); } if (! preferences) update (view); } /*! \fn G_MODULE_EXPORT void set_r_model (GtkComboBox * box, gpointer data) \brief change OpenGL rendering model \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_r_model (GtkComboBox * box, gpointer data) { if (preferences) { tmp_opengl[4] = combo_get_active ((GtkWidget *)box); widget_set_sensitive (pref_ogl_edit -> render_fix, ! tmp_opengl[4]); } else { glwin * view = (glwin *)data; view -> anim -> last -> img -> ray_tracing = combo_get_active ((GtkWidget *)box); view -> anim -> last -> img -> render = 0; widget_set_sensitive (view -> opengl_win -> render_fix, ! view -> anim -> last -> img -> ray_tracing); init_default_shaders (view); update (view); } } /*! \fn G_MODULE_EXPORT void set_f_model (GtkComboBox * box, gpointer data) \brief change OpenGL filling model \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_f_model (GtkComboBox * box, gpointer data) { glwin * view = (glwin *)data; view -> anim -> last -> img -> render = combo_get_active ((GtkWidget *)box); init_default_shaders (view); update (view); } /*! \fn G_MODULE_EXPORT void set_l_model (GtkComboBox * box, gpointer data) \brief change OpenGL lightning model \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_l_model (GtkComboBox * box, gpointer data) { if (preferences) { tmp_material.param[0] = combo_get_active ((GtkWidget *)box); } else { glwin * view = (glwin *)data; view -> anim -> last -> img -> m_terial.param[0] = combo_get_active ((GtkWidget *)box); update (view); } } /*! \fn void param_has_changed (gpointer data, double val) \brief update OpenGL material parameter \param data the associated data pointer \param val the new value */ void param_has_changed (gpointer data, double val) { dint * mid = (dint *)data; opengl_edition * edit_ogl; Material * the_mat; glwin * view; if (preferences) { edit_ogl = pref_ogl_edit; the_mat = & tmp_material; } else { view = get_project_by_id(mid -> a) -> modelgl; edit_ogl = view -> opengl_win; the_mat = & view -> anim -> last -> img -> m_terial; } if (mat_min_max[mid -> b][0] >= 0.0 && val <= mat_min_max[mid -> b][1]) the_mat -> param[mid -> b + 1] = val; if (edit_ogl) { update_entry_double (GTK_ENTRY(edit_ogl -> m_entry[mid -> b]), the_mat -> param[mid -> b + 1]); gtk_range_set_value (GTK_RANGE(edit_ogl -> m_scale[mid -> b]), the_mat -> param[mid -> b + 1]); } if (! preferences) update (view); } /*! \fn G_MODULE_EXPORT void update_mat_param (GtkEntry * res, gpointer data) \brief update OpenGL material parameter - entry \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_mat_param (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); param_has_changed (data, v); } /*! \fn G_MODULE_EXPORT gboolean scroll_scale_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief update OpenGL material parameter - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_scale_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { param_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void scale_param (GtkRange * range, gpointer data) \brief update OpenGL material parameter - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void scale_param (GtkRange * range, gpointer data) { param_has_changed (data, gtk_range_get_value (range)); } /*! \fn G_MODULE_EXPORT gboolean scroll_scale_quality (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief update OpenGL quality - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_scale_quality (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { set_quality ((int)value, data); #ifdef GTK4 if (! preferences) update_menu_bar ((glwin *)data); #endif return FALSE; } /*! \fn G_MODULE_EXPORT void scale_quality (GtkRange * range, gpointer data) \brief update OpenGL quality - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void scale_quality (GtkRange * range, gpointer data) { set_quality ((int)gtk_range_get_value (range), data); #ifdef GTK4 if (! preferences) update_menu_bar ((glwin *)data); #endif } /*! \fn GtkWidget * rendering_fix (glwin * view) \brief create rendering parameters \param view the target glwin, if any \param ogl_edit the target OpenGL edition window */ GtkWidget * rendering_fix (glwin * view, opengl_edition * ogl_edit) { GtkWidget * fix = gtk_fixed_new (); GtkWidget * rmodel = create_combo (); gtk_fixed_put (GTK_FIXED (fix), rmodel, 0, 10); combo_text_append (rmodel, _("3D Objects")); combo_text_append (rmodel, _("Ray Tracing")); g_signal_connect (G_OBJECT (rmodel), "changed", G_CALLBACK(set_r_model), view); gtk_widget_set_size_request (rmodel, 110, -1); combo_set_active (rmodel, (view) ? view -> anim -> last -> img -> ray_tracing : tmp_opengl[4]); ogl_edit -> render_fix = gtk_fixed_new (); gtk_fixed_put (GTK_FIXED (fix), ogl_edit -> render_fix, 130, 0); GtkWidget * quality_scale = create_hscale (3, 500, 1, (view) ? view -> anim -> last -> img -> quality : tmp_opengl[3], GTK_POS_TOP, 1, 100, G_CALLBACK(scale_quality), G_CALLBACK(scroll_scale_quality), view); gtk_fixed_put (GTK_FIXED (ogl_edit -> render_fix), quality_scale, 20, 0); if (! preferences) { GtkWidget * fmodel = create_combo (); gtk_fixed_put (GTK_FIXED (ogl_edit -> render_fix), fmodel, 120, 10); combo_text_append (fmodel, _("Filled")); combo_text_append (fmodel, _("Lines")); combo_text_append (fmodel, _("Points")); g_signal_connect (G_OBJECT (fmodel), "changed", G_CALLBACK(set_f_model), view); gtk_widget_set_size_request (fmodel, 100, -1); combo_set_active (fmodel, view -> anim -> last -> img -> render); } widget_set_sensitive (ogl_edit -> render_fix, (view) ? ! view -> anim -> last -> img -> ray_tracing : ! tmp_opengl[4]); return fix; } /*! \fn GtkWidget * lightning_fix (glwin * view, Material this_material) \brief create lightning model combo box \param view the target glwin, if any \param this_material the target material, if any */ GtkWidget * lightning_fix (glwin * view, Material * this_material) { GtkWidget * fix = gtk_fixed_new (); GtkWidget * lmodel = create_combo (); gtk_fixed_put (GTK_FIXED (fix), lmodel, 0, 10); char * l_model[6] = {i18n("None"), "Phong", "Blinn", "Cook-Torrance-Blinn", "Cook-Torrance-Beckmann", "Cook-Torrance-GCX"}; int i; for (i=0; i<6; i++) { combo_text_append (lmodel, l_model[i]); } g_signal_connect (G_OBJECT (lmodel), "changed", G_CALLBACK(set_l_model), view); gtk_widget_set_size_request (lmodel, 200, -1); combo_set_active (lmodel, this_material -> param[0]); return fix; } /*! \fn GtkWidget * materials_tab (glwin * view, opengl_edition * ogl_edit, Material * the_mat) \brief OpenGL material parameters tab \param view the target glwin \param ogl_edit the target OpenGL edition window \param the_mat the target material data structure */ GtkWidget * materials_tab (glwin * view, opengl_edition * ogl_edit, Material * the_mat) { GtkWidget * layout = create_layout (-1, 300); GtkWidget * vbox = add_vbox_to_layout (layout, 650, -1); int i; GtkWidget * box, * hbox; gchar * str = g_strdup_printf ("%s ", _("Quality")); box = adv_box (vbox, str, 5, 150, 0.0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, rendering_fix (view, ogl_edit), FALSE, FALSE, 0); str = g_strdup_printf ("%s ", _("Lightning model")); box = adv_box (vbox, str, 5, 150, 0.0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, lightning_fix (view, the_mat), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (_("Use template"), 100, 40, the_mat -> predefine, G_CALLBACK(set_use_template_toggle), view), FALSE, FALSE, 0); hbox = create_hbox (BSEP); str = g_strdup_printf ("%s ", _("Templates")); add_box_child_start (GTK_ORIENTATION_VERTICAL, hbox, markup_label (str, 150, -1, 0.0, 0.5), FALSE, FALSE, 50); g_free (str); gchar * material_template[TEMPLATES] = {i18n("Opaque"), i18n("Brushed Metal"), i18n("Shiny Metal"), i18n("Plastic"), i18n("Transparent"), i18n("Translucent"), i18n("Diffuse")}; ogl_edit -> templates = create_combo (); for (i=0; i templates, _(material_template[i])); } combo_set_active (ogl_edit -> templates, the_mat -> predefine-1); g_signal_connect (G_OBJECT (ogl_edit -> templates), "changed", G_CALLBACK(set_template), view); gtk_widget_set_size_request (ogl_edit -> templates, 100, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ogl_edit -> templates, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 20); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); ogl_edit -> param_mat = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ogl_edit -> param_mat, FALSE, FALSE, 50); ogl_edit -> param_mat = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, ogl_edit -> param_mat, FALSE, FALSE, 0); bdv_box (ogl_edit -> param_mat, _("Material properties"), 250, -1); GtkWidget * m_fixed; for (i=0; i<5; i++) { str = g_strdup_printf ("%s:", _(ogl_settings[0][i+1])); box = adv_box (ogl_edit -> param_mat, str, 0, 130, 0.0); g_free (str); ogl_edit -> m_scale[i] = create_hscale (mat_min_max[i][0], mat_min_max[i][1], 0.001, the_mat -> param[i+1], GTK_POS_TOP, 3, 200, G_CALLBACK(scale_param), G_CALLBACK(scroll_scale_param), & ogl_edit -> pointer[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, ogl_edit -> m_scale[i], FALSE, FALSE, 10); ogl_edit -> m_entry[i] = create_entry (G_CALLBACK(update_mat_param), 100, 15, FALSE, & ogl_edit -> pointer[i]); update_entry_double(GTK_ENTRY(ogl_edit -> m_entry[i]), the_mat -> param[i+1]); m_fixed = gtk_fixed_new (); gtk_fixed_put (GTK_FIXED(m_fixed), ogl_edit -> m_entry[i], 0, 15); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, m_fixed, FALSE, FALSE, 15); } float values[] = {the_mat -> albedo.x, the_mat -> albedo.y, the_mat -> albedo.z}; str = g_strdup_printf ("%s:", _(ogl_settings[0][0])); add_box_child_start (GTK_ORIENTATION_VERTICAL, ogl_edit -> param_mat, create_setting_pos (str, 130, -1, 0, 0, values, ogl_edit), FALSE, FALSE, 10); g_free (str); show_the_widgets (layout); widget_set_sensitive (ogl_edit -> templates, the_mat -> predefine); widget_set_sensitive (ogl_edit -> param_mat, ! the_mat -> predefine); return layout; } // ***************** FOG ******************* // GtkWidget * fogtype; /*! \fn void fog_param_changed (gpointer data, GLfloat u, GtkRange * range) \brief update OpenGL fog parameter \param data the associated data pointer \param u the new value \param range the GtkRange to udapte if needed */ void fog_param_changed (gpointer data, GLfloat u, GtkRange * range) { dint * fid = (dint *)data; Fog * this_fog; opengl_edition * ogl_edit; glwin * view; if (! preferences) { view = get_project_by_id (fid -> a) -> modelgl; this_fog = & view -> anim -> last -> img -> f_g; ogl_edit = view -> opengl_win; } else { this_fog = & tmp_fog; ogl_edit = pref_ogl_edit; } GLfloat v, w; if (fid -> b > 0) { v = this_fog -> depth[0]; w = this_fog -> depth[1]; if (fid -> b == 1 && u < w) { this_fog -> depth[0] = u; } else if (fid -> b == 2 && u > v) { this_fog -> depth[1] = u; } else if (ogl_edit) { if (fid -> b == 1) { gtk_range_set_value (range, (gdouble) (w-0.1)); } else { gtk_range_set_value (range, (gdouble) (v+0.1)); } } } else { this_fog -> density = u; } if (! preferences) update (view); } /*! \fn G_MODULE_EXPORT gboolean scroll_set_fog_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief update OpenGL fog parameter - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_fog_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { fog_param_changed (data, (GLfloat) value, range); return FALSE; } /*! \fn G_MODULE_EXPORT void set_fog_param (GtkRange * range, gpointer data) \brief update OpenGL fog parameter - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_fog_param (GtkRange * range, gpointer data) { fog_param_changed (data, (GLfloat) gtk_range_get_value (range), range); } /*! \fn G_MODULE_EXPORT void set_fog_type (GtkWidget * widg, gpointer data) \brief set OpenGL fog type \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_fog_type (GtkWidget * widg, gpointer data) { opengl_edition * ogl_edit = (opengl_edition *)data; Fog * this_fog; glwin * view; if (! preferences) { view = get_project_by_id (ogl_edit -> proj) -> modelgl; this_fog = & view -> anim -> last -> img -> f_g; } else { this_fog = & tmp_fog; } this_fog -> based = combo_get_active (widg); if (! preferences) update (view); } /*! \fn void setup_fog_dialogs (opengl_edition * ogl_edit, int fid) \brief update OpenGL fog tab based of fog type \param ogl_edit the target opengl_edition \param fid the fog mode */ void setup_fog_dialogs (opengl_edition * ogl_edit, int fid) { Fog * this_fog; glwin * view; if (! preferences) { view = get_project_by_id (ogl_edit -> proj) -> modelgl; this_fog = & view -> anim -> last -> img -> f_g; } else { this_fog = & tmp_fog; } this_fog -> mode = fid; widget_set_sensitive (fogtype, (this_fog -> mode == 1) ? TRUE : FALSE); if (this_fog -> mode) combo_set_active (fogtype, 0); if (this_fog -> mode) { show_the_widgets (ogl_edit -> param_fog); if (this_fog -> mode == 1) { show_the_widgets (ogl_edit -> depth_box); hide_the_widgets (ogl_edit -> dens_box); } else { hide_the_widgets (ogl_edit -> depth_box); show_the_widgets (ogl_edit -> dens_box); } } else { hide_the_widgets (ogl_edit -> param_fog); } if (! preferences) update (view); } /*! \fn G_MODULE_EXPORT void set_fog_mode (GtkWidget * widg, gpointer data) \brief set fog mode callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_fog_mode (GtkWidget * widg, gpointer data) { setup_fog_dialogs ((opengl_edition *)data, combo_get_active (widg)); } /*! \fn GtkWidget * fog_tab (glwin * view, opengl_edition * ogl_edit, Fog * the_fog) \brief OpenGL fog parameters tab \param view the target glwin \param ogl_edit the target OpenGL edition window \param the_fog the target fog data structure */ GtkWidget * fog_tab (glwin * view, opengl_edition * ogl_edit, Fog * the_fog) { GtkWidget * layout = create_layout (480, -1); GtkWidget * vbox = add_vbox_to_layout (layout, 480, -1); GtkWidget * box = adv_box (vbox, _("Fog mode "), 10, 150, 0.0); GtkWidget * fogmod = create_combo (); combo_text_append (fogmod, _("None")); combo_text_append (fogmod, _("Linear")); combo_text_append (fogmod, _("Exponential")); combo_text_append (fogmod, _("Exponential Squared")); gtk_widget_set_size_request (fogmod, 200, -1); combo_set_active (fogmod, the_fog -> mode); g_signal_connect (G_OBJECT (fogmod), "changed", G_CALLBACK(set_fog_mode), ogl_edit); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, fogmod, FALSE, FALSE, 0); ogl_edit -> param_fog = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, ogl_edit -> param_fog, FALSE, FALSE, 0); box = adv_box (ogl_edit -> param_fog, _("Fog type "), 5, 150, 0.0); fogtype = create_combo (); combo_text_append (fogtype, _("Plane Based")); combo_text_append (fogtype, _("Range Based")); gtk_widget_set_size_request (fogtype, 200, -1); combo_set_active (fogtype, the_fog -> mode); g_signal_connect (G_OBJECT (fogtype), "changed", G_CALLBACK(set_fog_type), ogl_edit); widget_set_sensitive (fogtype, (the_fog -> mode == 1) ? TRUE : FALSE); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, fogtype, FALSE, FALSE, 0); ogl_edit -> dens_box = adv_box (ogl_edit -> param_fog, _("Fog density"), 10, 150.0, 0.0); ogl_edit -> fog_range[0] = create_hscale (0.0, 1.0, 0.01, the_fog -> density, GTK_POS_TOP, 3, 250, G_CALLBACK(set_fog_param), G_CALLBACK(scroll_set_fog_param), & ogl_edit -> pointer[0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ogl_edit -> dens_box, ogl_edit -> fog_range[0], FALSE, FALSE, 0); gchar * depthfog[2] = {_("\t depth* start: "), _("\t depth* end: ")}; ogl_edit -> depth_box = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, ogl_edit -> param_fog, ogl_edit -> depth_box, FALSE, FALSE, 0); box = adv_box (ogl_edit -> depth_box, _("Fog depth"), 10, 150.0, 0.0); int i; for (i=0; i<2; i++) { box = adv_box (ogl_edit -> depth_box, depthfog[i], 5, 170, 0.0); ogl_edit -> fog_range[i+1] = create_hscale (0.0, 100.0, 0.1, the_fog -> depth[i], GTK_POS_TOP, 2, 250, G_CALLBACK(set_fog_param), G_CALLBACK(scroll_set_fog_param), & ogl_edit -> pointer[i+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, ogl_edit -> fog_range[i+1], FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, ogl_edit -> depth_box, markup_label(_("* % of the OpenGL model depth."), -1, -1, 0.5, 0.5) , FALSE, FALSE, 5); float values[] = {the_fog -> color.x, the_fog -> color.y, the_fog -> color.z}; add_box_child_start (GTK_ORIENTATION_VERTICAL, ogl_edit -> param_fog, create_setting_pos (_(ogl_settings[2][0]), 130, 0.0, 4, 0, values, ogl_edit), FALSE, FALSE, 5); show_the_widgets (layout); return layout; } /*! \fn void close_advanced_opengl (gpointer data) \brief close OpenGL rendering window free data \param data the associated data pointer */ void close_advanced_opengl (gpointer data) { glwin * view = (glwin *)data; view -> opengl_win -> win = destroy_this_widget (view -> opengl_win -> win); g_free (view -> opengl_win); view -> opengl_win = NULL; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean close_advanced (GtkWidget * window, gpointer data) \brief close OpenGL rendering advanced window callback GTK4 \param window the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_advanced (GtkWidget * window, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean close_advanced (GtkWidget * widg, GdkEvent * event, gpointer data) \brief close OpenGL rendering advanced window callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_advanced (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { close_advanced_opengl (data); return FALSE; } /*! \fn G_MODULE_EXPORT void opengl_advanced (GtkWidget * widg, gpointer data) \brief create OpenGL rendering advanced window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void opengl_advanced (GtkWidget * widg, gpointer data) { glwin * view = (glwin *)data; if (view -> opengl_win == NULL) { view -> opengl_win = g_malloc0(sizeof*view -> opengl_win); view -> opengl_win -> proj = view -> proj; int i; for (i=0; i<6; i++) { view -> opengl_win -> pointer[i].a = view -> proj; view -> opengl_win -> pointer[i].b = i; } gchar * str = g_strdup_printf (_("OpenGL material aspect and light settings - %s"), get_project_by_id(view -> proj) -> name); view -> opengl_win -> win = create_win (str, view -> win, FALSE, FALSE); g_free (str); #ifdef DEBUG gtk_window_set_resizable (GTK_WINDOW (view -> opengl_win -> win), TRUE); #endif GtkWidget * vbox = create_vbox (5); add_container_child (CONTAINER_WIN, view -> opengl_win -> win, vbox); GtkWidget * notebook = gtk_notebook_new (); #ifdef GTK4 gtk_widget_set_size_request (notebook, 580, 670); #else gtk_widget_set_size_request (notebook, 580, 670); #endif show_the_widgets (notebook); #ifdef GTK4 gtk_widget_set_vexpand (notebook, TRUE); #endif add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, notebook, TRUE, TRUE, 0); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), materials_tab (view, view -> opengl_win, & view -> anim -> last -> img -> m_terial), markup_label(_("Material aspect"), -1, -1, 0.0, 0.5)); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), lights_tab (view, view -> opengl_win, & view -> anim -> last -> img -> l_ghtning), markup_label(_("Configure light sources"), -1, -1, 0.0, 0.5)); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), fog_tab (view, view -> opengl_win, & view -> anim -> last -> img -> f_g), markup_label(_("Configure fog"), -1, -1, 0.0, 0.5)); add_global_option (vbox, & view -> colorp[0][0]); add_gtk_close_event (view -> opengl_win -> win, G_CALLBACK(close_advanced), view); } show_the_widgets (view -> opengl_win -> win); update_light_data (0, view -> opengl_win); setup_fog_dialogs (view -> opengl_win, view -> anim -> last -> img -> f_g.mode); } atomes_1.3.1/src/opengl/win/w_record.c0000664000175000017500000001325315212624223017331 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file w_record.c * @short Functions to create the recording window * @author Sébastien Le Roux */ /* * This file: 'w_record.c' * * Contains: * - The functions to create the recording window * * List of functions: void prepare_edition_windows (glwin * view, int status); G_MODULE_EXPORT void rec_start (GtkButton * but, gpointer data); G_MODULE_EXPORT void rec_stop (GtkButton * but, gpointer data); G_MODULE_EXPORT void window_recorder (GtkWidget * widg, gpointer data); */ #include "global.h" #include "glview.h" extern void window_encode (glwin * view, gboolean video); /*! \fn void prepare_edition_windows (glwin * view, int status) \brief update the sensitivity of the edition window(s) if any are opened \param view the target glwin \param status sensitivity */ void prepare_edition_windows (glwin * view, int status) { GtkWidget * widg; int i; if (view -> atom_win != NULL) { if (view -> atom_win -> notebook != NULL) { if (GTK_IS_WIDGET(view -> atom_win -> notebook)) { for (i=0; i<5; i++) { widg = gtk_notebook_get_nth_page (GTK_NOTEBOOK (view -> atom_win -> notebook), i); widget_set_sensitive (widg, status); } } } } if (view -> cell_win != NULL) { if (view -> cell_win -> notebook != NULL) { if (GTK_IS_WIDGET(view -> cell_win -> notebook)) { widg = gtk_notebook_get_nth_page (GTK_NOTEBOOK (view -> cell_win -> notebook), 0); widget_set_sensitive (widg, status); widg = gtk_notebook_get_nth_page (GTK_NOTEBOOK (view -> cell_win -> notebook), 1); widget_set_sensitive (widg, status); widg = gtk_notebook_get_nth_page (GTK_NOTEBOOK (view -> cell_win -> notebook), 3); widget_set_sensitive (widg, status); widg = gtk_notebook_get_nth_page (GTK_NOTEBOOK (view -> cell_win -> notebook), 4); widget_set_sensitive (widg, status); widg = gtk_notebook_get_nth_page (GTK_NOTEBOOK (view -> cell_win -> notebook), 5); widget_set_sensitive (widg, status); } } } } /*! \fn G_MODULE_EXPORT void rec_start (GtkButton * but, gpointer data) \brief start recording \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void rec_start (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; if (! view -> record) { button_set_image (GTK_BUTTON(view -> rec -> rec), NULL, IMG_STOCK, RECORD); show_the_widgets (view -> rec -> rec); widget_set_sensitive (view -> rec -> stop, 1); #ifdef GTK3 // GTK3 Menu Action To Check widget_set_sensitive (view -> ogl_mode[1], 0); #endif //gtk_widget_set_size_request (view -> plot, view -> pixels[0], view -> pixels[1]); //gtk_window_set_resizable (GTK_WINDOW (view -> win), FALSE); prepare_edition_windows (view, 0); view -> record = TRUE; } } /*! \fn G_MODULE_EXPORT void rec_stop (GtkButton * but, gpointer data) \brief stop recording \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void rec_stop (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; view -> record = FALSE; button_set_image (GTK_BUTTON(view -> rec -> rec), NULL, IMG_STOCK, YES); show_the_widgets (view -> rec -> rec); window_encode (view, TRUE); widget_set_sensitive (view -> rec -> stop, 0); #ifdef GTK3 // GTK3 Menu Action To Check widget_set_sensitive (view -> ogl_mode[1], 1); #endif gtk_window_set_resizable (GTK_WINDOW (view -> win), TRUE); prepare_edition_windows (view, 1); } /*! \fn G_MODULE_EXPORT void window_recorder (GtkWidget * widg, gpointer data) \brief create video recorder window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_recorder (GtkWidget * widg, gpointer data) { glwin * view = (glwin *) data; if (view -> rec == NULL) { view -> rec = g_malloc0(sizeof*view -> rec); gchar * str = g_strdup_printf (_("%s - record"), get_project_by_id(view -> proj) -> name); view -> rec -> win = create_win (str, view -> win, FALSE, FALSE); g_free (str); GtkWidget * hbox = create_hbox (0); add_container_child (CONTAINER_WIN, view -> rec -> win, hbox); // Record view -> rec -> rec = create_button (_("Record"), IMG_STOCK, YES, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(rec_start), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, view -> rec -> rec, TRUE, TRUE, 0); // Stop view -> rec -> stop = create_button (_("Stop"), IMG_STOCK, MEDIA_STOP, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(rec_stop), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, view -> rec -> stop, TRUE, TRUE, 0); widget_set_sensitive (view -> rec -> stop, view -> record); add_gtk_close_event (view -> rec -> win, G_CALLBACK(hide_this_window), NULL); show_the_widgets (view -> rec -> win); } else { show_the_widgets (view -> rec -> win); } } atomes_1.3.1/src/opengl/win/m_render.c0000664000175000017500000000325015212624223017314 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file m_render.c * @short Functions to create the 'OpenGL -> Render' submenu * @author Sébastien Le Roux */ /* * This file: 'm_render.c' * * Contains: * - The functions to create the 'OpenGL -> Render' submenu * * List of functions: void set_render (gpointer data); */ #include "global.h" #include "glview.h" #include "glwindow.h" /*! \fn void set_render (gpointer data) \brief set OpenGL rendering mode callback \param data the associated data pointer */ void set_render (gpointer data) { tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); int i = this_proj -> modelgl -> anim -> last -> img -> render; int j = the_data -> b; if (i != j) { this_proj -> modelgl -> anim -> last -> img -> render = NONE; this_proj -> modelgl -> anim -> last -> img -> render = j; this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; update (this_proj -> modelgl); } } atomes_1.3.1/src/opengl/win/initring.c0000664000175000017500000000624015212624223017346 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file initring.c * @short Functions to retrieve rings data from Fortran90 * @author Sébastien Le Roux */ /* * This file: 'initring.c' * * Contains: * - The functions to retrieve rings data from Fortran90 * * List of functions: void send_rings_opengl_ (int * id, int * st, int * ta, int * ri, int nring[* ta+1]); void send_atom_rings_id_opengl_ (int * st, int * at, int * id, int * ta, int * num, int ring[* num]); void allocate_all_rings_ (int * id, int * st, int * ta, int * nring); */ #include "global.h" #include "glwindow.h" /*! \fn void send_rings_opengl_ (int * id, int * st, int * ta, int * ri, int nring[*ta+1]) \brief get single ring data for the glwin from Fortran90 \param id type of ring \param st the MD step \param ta size of the ring \param ri ring size id \param nring ring's atom list */ void send_rings_opengl_ (int * id, int * st, int * ta, int * ri, int nring[* ta+1]) { int i; active_glwin -> show_rpoly[* id][* st][* ta][* ri] = FALSE; for (i=0; i< * ta+1; i++) { active_glwin -> all_rings[* id][* st][* ta][* ri][i] = nring[i] - 1; } } /*! \fn void send_atom_rings_id_opengl_ (int * st, int * at, int * id, int * ta, int * num, int ring[*num]) \brief get rings data for an atom from Fortran90 \param st the MD step \param at atom id \param id type of ring \param ta size of the ring \param num number of ring(s) of that size \param ring the list(s) of atoms of the(these) ring(s) */ void send_atom_rings_id_opengl_ (int * st, int * at, int * id, int * ta, int * num, int ring[* num]) { if (ring != NULL) { int i; active_project -> atoms[* st][* at].rings[* id][* ta] = allocint (* num + 1); active_project -> atoms[* st][* at].rings[* id][* ta][0] = * num; for (i=0; i < * num; i++) { active_project -> atoms[* st][* at].rings[* id][* ta][i+1] = ring[i] - 1; } } } /*! \fn void allocate_all_rings_ (int * id, int * st, int * ta, int * nring) \brief allocate data to store ring statistics results for the glwin \param id the type of ring \param st the MD step \param ta the size of the ring \param nring the number of ring(s) of that size */ void allocate_all_rings_ (int * id, int * st, int * ta, int * nring) { active_glwin -> all_rings[* id][* st][* ta - 1] = allocdint (* nring, * ta); active_glwin -> show_rpoly[* id][* st][* ta - 1] = allocint (* nring); active_glwin -> num_rings[* id][* st][* ta - 1] = * nring; } atomes_1.3.1/src/opengl/arcball.c0000664000175000017500000000443015212624223016325 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file arcball.c * @short Mouse trackball rotation functions * @author Sébastien Le Roux */ /* * This file: 'arcball.c' * * Contains: * - The mouse trackball rotation functions * * List of functions: void arc_ball_rotation (glwin * view, int x, int y); */ #include "global.h" #include "glview.h" extern void rotate_quat (project * this_proj, vec4_t q, int status, int axis); vec3_t arc_ball_init; vec3_t arc_ball_new; vec4_t old_rotation_quaternion; vec3_t get_arc_ball_vector (glwin * view, int x, int y) { vec3_t vect; vect.x = 2.0*x/view -> pixels[0] - 1.0; y = view -> pixels[1] - y; vect.y = 2.0*y/view -> pixels[1] - 1.0; float norm_arc = vect.x*vect.x + vect.y*vect.y; if (norm_arc > 1.0) { vect.z = 0.0; } else { vect.z = sqrt(1.0 - norm_arc); } return v3_norm (vect); } /*! \fn void arc_ball_rotation (glwin * view, int x, int y) \brief Perform arcball rotation \param view the target glwin \param x x position \param y y position */ void arc_ball_rotation (glwin * view, int x, int y) { arc_ball_new = get_arc_ball_vector (view, x, y); vec3_t rot_axis = v3_cross (arc_ball_init, arc_ball_new); if (v3_length(rot_axis) > 0.0) { double rot_angle = - acos(v3_dot (arc_ball_init, arc_ball_new)); vec4_t quat = axis_to_quat (rot_axis, rot_angle); if (view -> mode != EDITION) { view -> anim -> last -> img -> rotation_quaternion = q4_mul (old_rotation_quaternion, quat); } else { rotate_quat (get_project_by_id(view -> proj), quat, 1, 1); } } } atomes_1.3.1/src/opengl/ogl_draw.c0000664000175000017500000004650515212624223016534 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file ogl_draw.c * @short OpenGL window drawing funcions * @author Sébastien Le Roux */ /* * This file: 'ogl_draw.c' * * Contains: * - The OpenGL window drawing funcions * * List of functions: void print_matrices (); void setup_camera (); void unrotate_camera (); void duplicate_fog (Fog * new_fog, Fog * old_fog); void duplicate_material (Material * new_mat, Material * old_mat); void duplicate_material_and_lightning (image * new_img, image * old_img); void duplicate_screen_label (screen_label * new_lab, screen_label * old_lab); void add_image (); void at_shift (atom * at, float * shift); void at_unshift (atom * at, float * shift); void draw (glwin * view); screen_string * duplicate_screen_string (screen_string * old_s); atom * duplicate_atom (atom * at); atom * free_atom (atom * at); image * duplicate_image (image * old_img); */ #include "global.h" #include "glview.h" #include "dlp_field.h" #include "preferences.h" #include extern ColRGBA init_color (int id, int numid); extern Light ** copy_light_sources (int dima, int dimb, Light ** old_sp); extern atom_selection * duplicate_ogl_selection (atom_selection * old_sel); double x, y, z; GLUquadricObj * quadric; glwin * wingl; project * proj_gl; int proj_sp; int proj_at; coord_info * coord_gl; box_info * box_gl; cell_info * cell_gl; image * plot; int qual; int acolorm; int pcolorm; int step; extern int nbs, nbl; extern void create_atom_lists (gboolean to_pick); extern int create_bond_lists (gboolean to_pick); extern int create_selection_lists (); extern void create_poly_lists (); extern void create_ring_lists (); extern int create_box_lists (int b_step); extern int create_axis_lists (); extern int create_pick_lists (); extern int create_label_lists (); extern void create_measures_lists (); extern void create_light_lists (); extern void create_slab_lists (project * this_proj); extern void create_volumes_lists (); extern void create_background_lists (); /*! \fn void print_matrices () \brief print OpenGL matrices */ void print_matrices () { g_debug ("*** Print Matrices ***"); g_debug ("\n"); g_debug (":: MODEL_MATRIX"); m4_print (wingl -> model_matrix); g_debug ("\n"); g_debug (":: VIEW_MATRIX"); m4_print (wingl -> view_matrix); g_debug ("\n"); g_debug (":: MODEL_VIEW_MATRIX"); m4_print (wingl -> model_view_matrix); g_debug ("\n"); g_debug (":: NORMAL_MATRIX"); m4_print (wingl -> normal_matrix); g_debug ("\n"); g_debug (":: PROJECTION_MATRIX"); m4_print (wingl -> projection_matrix); g_debug ("\n"); g_debug (":: PROJECTION_MODEL_VIEW_MATRIX"); m4_print (wingl -> proj_model_view_matrix); } /*! \fn void setup_camera () \brief setup OpenGL camera */ void setup_camera () { wingl -> model_position = vec3 (0.0, 0.0, -plot -> p_depth); wingl -> model_matrix = m4_translation (wingl -> model_position); wingl -> proj_model_matrix = m4_mul (wingl -> projection_matrix, wingl -> model_matrix); wingl -> view_matrix = m4_quat_rotation (plot -> rotation_quaternion); vec4_t quat; quat = plot -> rotation_quaternion; quat.z = - quat.z; wingl -> un_view_matrix = m4_quat_rotation (quat); wingl -> model_view_matrix = m4_mul (wingl -> model_matrix, wingl -> view_matrix); wingl -> normal_matrix = m4_transpose (m4_invert_affine(wingl -> model_matrix)); wingl -> proj_model_view_matrix = m4_mul (wingl -> projection_matrix, wingl -> model_view_matrix); wingl -> proj_view_matrix = m4_mul (wingl -> projection_matrix, wingl -> view_matrix); wingl -> view_model_matrix = m4_mul (wingl -> view_matrix, wingl -> model_matrix); // print_matrices(); } /*! \fn void unrotate_camera () \brief unrotate OpenGL camera */ void unrotate_camera () { vec4_t quat; quat = plot -> rotation_quaternion; quat.z = - quat.z; wingl -> model_view_matrix = m4_mul (wingl -> model_view_matrix, m4_quat_rotation (quat)); } /*! \fn screen_string * duplicate_screen_string (screen_string * old_s) \brief create a copy a screen_string data structure \param old_s the data structure to be copied */ screen_string * duplicate_screen_string (screen_string * old_s) { screen_string * new_s = g_malloc0(sizeof*new_s); new_s -> word = g_strdup_printf ("%s", old_s -> word); new_s -> col = old_s -> col; int i; for (i=0; i<3; i++) new_s -> shift[i] = old_s -> shift[i]; new_s -> num_instances = old_s -> num_instances; new_s -> instances = duplicate_float (old_s -> num_instances, old_s -> instances); new_s -> prev = NULL; new_s -> last = NULL; return new_s; } /*! \fn void duplicate_material (Material * new_mat, Material * old_mat) \brief duplicate material data \param new_mat the new material data \param old_mat the old material data to be copied */ void duplicate_material (Material * new_mat, Material * old_mat) { new_mat -> predefine = old_mat -> predefine; new_mat -> albedo = old_mat -> albedo; int i; for (i=0; i<6; i++) new_mat -> param[i] = old_mat -> param[i]; } /*! \fn void duplicate_fog (Fog * new_fog, Fog * old_fog); \brief duplicate fog data \param new_fog the new fog data \param old_fog the old fog data to be copied */ void duplicate_fog (Fog * new_fog, Fog * old_fog) { new_fog -> mode = old_fog -> mode; new_fog -> based = old_fog -> based; new_fog -> density = old_fog -> density; int i; for (i=0; i<2; i++) new_fog -> depth[i] = old_fog -> depth[i]; new_fog -> color = old_fog -> color; } /*! \fn void duplicate_material_and_lightning (image * new_img, image * old_img) \brief copy the material and lightning parameters of an image data structure \param new_img the new image \param old_img the old image with the data to be copied */ void duplicate_material_and_lightning (image * new_img, image * old_img) { new_img -> quality = old_img -> quality; new_img -> render = old_img -> render; duplicate_material (& new_img -> m_terial, & old_img -> m_terial); new_img -> l_ghtning.lights = old_img -> l_ghtning.lights; new_img -> l_ghtning.spot = copy_light_sources (old_img -> l_ghtning.lights, old_img -> l_ghtning.lights, old_img -> l_ghtning.spot); duplicate_fog (& new_img -> f_g, & old_img -> f_g); } /*! \fn void duplicate_screen_label (screen_label * new_lab, screen_label * old_lab) \brief copy screen_label data structure \param new_lab the new screen_label structure \param old_lab the old screen_label structure to be copied */ void duplicate_screen_label (screen_label * new_lab, screen_label * old_lab) { screen_string * stmp_a, * stmp_b; new_lab -> position = old_lab -> position; new_lab -> render = old_lab -> render; new_lab -> scale = old_lab -> scale; new_lab -> font = g_strdup_printf ("%s", old_lab -> font); new_lab -> color = NULL; int i; for (i=0; i<3; i++) new_lab -> shift[i] = old_lab -> shift[i]; new_lab -> n_colors = old_lab -> n_colors; if (old_lab -> color != NULL) { new_lab -> color = duplicate_color (new_lab -> n_colors, old_lab -> color); } new_lab -> list = NULL; if (old_lab -> list != NULL) { new_lab -> list = duplicate_screen_string (old_lab -> list); new_lab -> list -> last = duplicate_screen_string (old_lab -> list -> last); stmp_a = old_lab -> list -> last; stmp_b = new_lab -> list -> last; while (stmp_a -> prev != NULL) { stmp_b -> prev = duplicate_screen_string (stmp_a -> prev); stmp_b -> prev -> last = stmp_b -> last; stmp_a = stmp_a -> prev; stmp_b = stmp_b -> prev; } } } /*! \fn image * duplicate_image (image * old_img) \brief create a copy of an image data structure \param old_img the image to copy */ image * duplicate_image (image * old_img) { int i, j, k, l, m; image * new_img = g_malloc0(sizeof*new_img); // This line will copy all the stuff that is not dynamically allocated * new_img = * old_img; new_img -> back = g_malloc0(sizeof*new_img -> back); duplicate_background_data (new_img -> back, old_img -> back); new_img -> xyz = g_malloc0(sizeof*new_img -> xyz); duplicate_axis_data (new_img -> xyz, old_img -> xyz); new_img -> abc = g_malloc0(sizeof*new_img -> abc); duplicate_box_data (new_img -> abc, old_img -> abc); j = proj_gl -> nspec; for (i=0; i<2; i++) { new_img -> color_map[i] = old_img -> color_map[i]; new_img -> show_atom[i] = duplicate_bool(j, old_img -> show_atom[i]); new_img -> show_label[i] = duplicate_bool(j, old_img -> show_label[i]); } new_img -> sphererad = duplicate_double(2*j, old_img -> sphererad); new_img -> pointrad = duplicate_double(2*j, old_img -> pointrad); new_img -> atomicrad = duplicate_double(2*j, old_img -> atomicrad); new_img -> bondrad = g_malloc0(2*j*sizeof*new_img -> bondrad); new_img -> linerad = g_malloc0(2*j*sizeof*new_img -> linerad); new_img -> at_color = duplicate_color (2*j, old_img -> at_color); for (i=0; i<2*j; i++) { new_img -> bondrad[i] = duplicate_double(2*j, old_img -> bondrad[i]); new_img -> linerad[i] = duplicate_double(2*j, old_img -> linerad[i]); } for (i=0; i<10; i++) { if (old_img -> show_coord[i]) { new_img -> show_coord[i] = duplicate_bool(coord_gl -> totcoord[i], old_img -> show_coord[i]); } if (i < 2 || (i > 3 && i < 9)) { if (old_img -> show_poly[i]) { new_img -> show_poly[i] = duplicate_bool(coord_gl -> totcoord[i], old_img -> show_poly[i]); } } k = (i < 2) ? proj_gl -> nspec : 1; if (old_img -> spcolor[i]) { new_img -> spcolor[i] = g_malloc0(k*sizeof*new_img -> spcolor[i]); for (j=0; j spcolor[i][j] = duplicate_color (coord_gl -> totcoord[i], old_img -> spcolor[i][j]); } } } new_img -> at_data = g_malloc0(proj_gl -> natomes*sizeof*new_img -> at_data); for (i=0; i natomes; i++) { new_img -> at_data[i].show[0] = proj_gl -> atoms[step][i].show[0]; new_img -> at_data[i].show[1] = proj_gl -> atoms[step][i].show[1]; new_img -> at_data[i].label[0] = proj_gl -> atoms[step][i].label[0]; new_img -> at_data[i].label[1] = proj_gl -> atoms[step][i].label[1]; new_img -> at_data[i].pick[0] = proj_gl -> atoms[step][i].pick[0]; new_img -> at_data[i].cloned = proj_gl -> atoms[step][i].cloned; new_img -> at_data[i].style = proj_gl -> atoms[step][i].style; } for (i=0; i<5; i++) duplicate_screen_label (& new_img -> labels[i], & old_img -> labels[i]); duplicate_material_and_lightning (new_img, old_img); // Atom selection for (i=0; i<2; i++) new_img -> selected[i] = duplicate_ogl_selection (old_img -> selected[i]); // Rings poly if any 'isolated' if (wingl -> rings) { for (i=0; i<5; i++) { if (wingl -> ring_max[i]) { m = 0; for (j=0; j< coord_gl -> totcoord[i+4]; j++) { k = coord_gl -> geolist[i+4][0][j]; for (l=0; l num_rings[i][step][k-1]; l++) { if (wingl -> show_rpoly[i][step][k-1][l]) m++; } } if (m) { new_img -> i_rings[i] = allocdint (m+1, 2); new_img -> i_rings[i][0][0] = m; m = 1; for (j=0; j totcoord[i+4]; j++) { k = coord_gl -> geolist[i+4][0][j]; for (l=0; l num_rings[i][step][k-1]; l++) { if (wingl -> show_rpoly[i][step][k-1][l]) { new_img -> i_rings[i][m][0] = j; new_img -> i_rings[i][m][1] = l; m ++; } } } } } } } // Volumes if (wingl -> volumes) { for (i=0; i<2; i++) { for (j=0; j fm_show_vol[i][j] = duplicate_bool (coord_gl -> totcoord[2+i], old_img -> fm_show_vol[i][j]); for (k=0; k totcoord[2+i]; k++) { new_img -> fm_vol_col[i][j][k] = old_img -> fm_vol_col[i][j][k]; } } } } return new_img; } /*! \fn void add_image () \brief add an image to the animation */ void add_image () { snapshot * nextsnap = g_malloc0(sizeof*nextsnap); nextsnap -> img = duplicate_image (plot); // Now the pointers if (wingl -> anim -> frames == 0) { wingl -> anim -> first -> prev = NULL; wingl -> anim -> last = nextsnap; wingl -> anim -> last -> prev = NULL; wingl -> anim -> first = nextsnap; } else { wingl -> anim -> last -> next = nextsnap; nextsnap -> prev = wingl -> anim -> last; wingl -> anim -> last = wingl -> anim -> last -> next; wingl -> anim -> last -> img -> id = wingl -> anim -> frames; } wingl -> anim -> frames ++; } extern void update_gl_pick_colors (); /*! \fn atom * duplicate_atom (atom * at) \brief copy (partially) an atom data structure \param at the atom to copy */ atom * duplicate_atom (atom * at) { atom * bt = g_malloc0(sizeof*bt); bt -> x = at -> x; bt -> y = at -> y; bt -> z = at -> z; bt -> sp = at -> sp; bt -> id = at -> id; bt -> style = at -> style; bt -> cloned = at -> cloned; int i; for (i=0; i<2; i++) { bt -> show[i] = at -> show[i]; bt -> pick[i] = at -> pick[i]; bt -> label[i] = at -> label[i]; } for (i=0; i<5; i++) { bt -> coord[i] = at -> coord[i]; } bt -> numv = at -> numv; bt -> fid = at -> fid; bt -> faid = at -> faid; if (bt -> numv) bt -> vois = duplicate_int (bt -> numv, at -> vois); return bt; } /*! \fn atom * free_atom (atom * at) \brief free an atom data structure \param at the target atom data structure to free */ atom * free_atom (atom * at) { if (at -> vois) g_free (at -> vois); g_free (at); return NULL; } /*! \fn void at_shift (atom * at, float * shift) \brief modify atomic coordinates to display image in cell replica \param at the atom \param shift the shift to apply */ void at_shift (atom * at, float * shift) { at -> x += shift[0]; at -> y += shift[1]; at -> z += shift[2]; } /*! \fn void at_unshift (atom * at, float * shift) \brief correct atomic coordinates modified to display image in cell replica \param at the atom \param shift the shift to correct */ void at_unshift (atom * at, float * shift) { at -> x -= shift[0]; at -> y -= shift[1]; at -> z -= shift[2]; } /*! \fn void draw (glwin * view) \brief main drawing subroutine for the OpenGL window \param view the target glwin */ void draw (glwin * view) { wingl = view; proj_gl = get_project_by_id(view -> proj); proj_sp = proj_gl -> nspec; proj_at = proj_gl -> natomes; coord_gl = proj_gl -> coord; cell_gl = & proj_gl -> cell; plot = wingl -> anim -> last -> img; qual = plot -> quality-1; acolorm = plot -> color_map[0]; pcolorm = plot -> color_map[1]; step = plot -> step; int box_step = (cell_gl -> npt) ? step : 0; box_gl = & cell_gl -> box[box_step]; /* #ifdef DEBUG clock_gettime (CLOCK_MONOTONIC, & start_time); GLuint GPU_time; glGenQueries (1, & GPU_time); glBeginQuery (GL_TIME_ELAPSED, GPU_time); // #endif */ // First, if needed, we prepare the display lists if (proj_at) { if (wingl -> create_shaders[ATOMS] && wingl -> n_shaders[ATOMS][step] < 0) create_atom_lists (FALSE); if (wingl -> create_shaders[BONDS] && wingl -> n_shaders[BONDS][step] < 0) wingl -> n_shaders[BONDS][step] = create_bond_lists (FALSE); if (wingl -> create_shaders[SELEC] && wingl -> n_shaders[SELEC][step] < 0) wingl -> n_shaders[SELEC][step] = create_selection_lists (); if (wingl -> create_shaders[POLYS] && wingl -> n_shaders[POLYS][step] < 0) create_poly_lists (); if (wingl -> create_shaders[RINGS] && wingl -> n_shaders[RINGS][step] < 0) create_ring_lists (); if (wingl -> create_shaders[PICKS] && ! atomes_render_image) wingl -> n_shaders[PICKS][0] = create_pick_lists (); if (wingl -> create_shaders[SLABS]) create_slab_lists (proj_gl); if (wingl -> create_shaders[VOLMS] && wingl -> n_shaders[VOLMS][step] < 0) create_volumes_lists (); if (wingl -> create_shaders[LABEL]) wingl -> n_shaders[LABEL][0] = create_label_lists (); if (wingl -> create_shaders[MEASU]) create_measures_lists (); } else { int i; for (i=0; i back -> gradient) wingl -> create_shaders[BACKG] = TRUE; } if (plot -> back -> gradient && wingl -> create_shaders[BACKG]) create_background_lists (); if (wingl -> create_shaders[MDBOX]) wingl -> n_shaders[MDBOX][box_step] = create_box_lists (box_step); if (wingl -> create_shaders[MAXIS]) wingl -> n_shaders[MAXIS][0] = create_axis_lists (); if (wingl -> create_shaders[LIGHT]) create_light_lists (); setup_camera (); // We draw normal scene or picking mode scene (only atoms or selection) if (wingl -> to_pick) { // Picking mode scene glDisable (GL_LIGHTING); glClearColor (plot -> back -> color.red, plot -> back -> color.green, plot -> back -> color.blue, 1.0); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); draw_vertices (PICKS); glEnable (GL_LIGHTING); } else { // Normal mode scene glClearColor (plot -> back -> color.red, plot -> back -> color.green, plot -> back -> color.blue, plot -> back -> color.alpha); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); // Gradient background draw_vertices (BACKG); // Box draw_vertices (MDBOX); // Now the atoms draw_vertices (ATOMS); // The bonds draw_vertices (BONDS); // The selected atoms/bonds draw_vertices (SELEC); int i = plot -> render; plot -> render = FILL; // Atom labels draw_vertices (LABEL); // Axis if centered if (view -> anim -> last -> img -> xyz -> t_pos == 4) draw_vertices (MAXIS); // Last the coordination polyhedra draw_vertices (POLYS); draw_vertices (RINGS); // Measures draw_vertices (MEASU); // Slab draw_vertices (SLABS); // Volumes draw_vertices (VOLMS); // Axis if not centered if (view -> anim -> last -> img -> xyz -> t_pos != 4) draw_vertices (MAXIS); // Lights draw_vertices (LIGHT); plot -> render = i; //draw_labels (); if (wingl -> record) add_image (); } /* #ifdef DEBUG glEndQuery (GL_TIME_ELAPSED); GLint done = 0; while (! done) { glGetQueryObjectiv (GPU_time, GL_QUERY_RESULT_AVAILABLE, & done); } GLint GPU_res; glGetQueryObjectiv (GPU_time, GL_QUERY_RESULT, & GPU_res); g_print (":: TIME TO RENDER (GPU) = %f s\n", (double)GPU_res/CLOCKS_PER_SEC); clock_gettime (CLOCK_MONOTONIC, & stop_time); g_print (":: TIME TO RENDER (CPU) = %s\n", calculation_time(FALSE, get_calc_time (start_time, stop_time))); // #endif */ } atomes_1.3.1/src/opengl/selection.c0000664000175000017500000005172115212624223016717 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file selection.c * @short Functions handling the atom and bond selection process in the OpenGL window * @author Sébastien Le Roux */ /* * This file: 'selection.c' * * Contains: * - The functions handling the atom and bond selection process in the OpenGL window * * List of functions: int find_bond_in_bonds (project * this_proj, int i, int j, int b, int id); int find_selected_bond (project * this_proj, int id); int find_selected_atom (project * this_proj, int id); int num_bonds (int i); int num_angles (int i); int num_dihedrals (int i); void save_dihedral_selection (glwin * view, int pi); void update_dihedral_selection (glwin * view, int pi); void save_angle_selection (glwin * view, int pi); void update_angle_selection (glwin * view, int pi); void save_bond_selection (glwin * view, int pi); void update_bond_selection (glwin * view, int pi); void save_all_selections (glwin * view, int pi); void update_all_selections (glwin * view, int pi); void update_selection_list (atom_selection * at_list, atom * at, gboolean add); void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi); void process_selection (project * this_proj, glwin * view, int id, int ac, int pi); void process_the_hits (glwin * view, gint event_button, double ptx, double pty); atom_in_selection * new_atom_in_selection (int id, int sp); */ #include "global.h" #include "interface.h" #include "glview.h" #include "atom_edit.h" extern G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data); extern void dihedrals_loop (glwin * view, int id, int pi, GtkTreeStore * store); extern void angles_loop (glwin * view, int id, int pi, GtkTreeStore * store); extern void bonds_loop (glwin * view, int id, int pi, GtkTreeStore * store); extern void update_label_selection (glwin * view, int pi); extern int selected_aspec; extern int get_to_be_selected (glwin * view); /*! \fn int find_bond_in_bonds (project * this_proj, int i, int j, int b, int id) \brief Find for a bond ID in the bond list using the atoms in the bond \param this_proj the target project \param i id tracker \param j the MD step \param b 0 = normal, 1 = clones \param id the id-th visible bond to find */ int find_bond_in_bonds (project * this_proj, int i, int j, int b, int id) { int k, l, m; for (k=0; k < this_proj -> modelgl -> bonds[j][b]; k++) { l = this_proj -> modelgl -> bondid[j][b][k][0]; m = this_proj -> modelgl -> bondid[j][b][k][1]; if (this_proj -> atoms[j][l].show[b]) i ++; if (i == id) return k; if (b) { if (this_proj -> atoms[j][l].show[b]) i ++; if (i == id) return k; } if (this_proj -> atoms[j][m].show[b]) i ++; if (i == id) return k; if (b) { if (this_proj -> atoms[j][m].show[b]) i ++; if (i == id) return k; } } return -i; } /*! \fn int find_selected_bond (project * this_proj, int id) \brief find the selected bond based of the picked color id \param this_proj the target project \param id the id-th visible bond to find */ int find_selected_bond (project * this_proj, int id) { int i, j, k; i = this_proj -> modelgl -> clones_to_be_picked - 1; j = this_proj -> modelgl -> anim -> last -> img -> step; k = find_bond_in_bonds (this_proj, i, j, 0, id); if (k < 0 && this_proj -> modelgl -> anim -> last -> img -> draw_clones) { k = find_bond_in_bonds (this_proj, -k, j, 1, id); if (k < 0) { return -1; } else { return k; } } else if (k < 0) { return -1; } else { return k; } } /*! \fn int find_selected_atom (project * this_proj, int id) \brief find the selected atom based of the picked color id \param this_proj the target project \param id the id-th visible atom or clone to find */ int find_selected_atom (project * this_proj, int id) { int i, j, k, l, m; i = -1; j = this_proj -> modelgl -> anim -> last -> img -> step; for (k=0; k natomes; k++) { if (this_proj -> atoms[j][k].show[0]) i++; if (i == id) return k; } if (this_proj -> modelgl -> anim -> last -> img -> draw_clones) { for (k=0; k < this_proj -> modelgl -> bonds[j][1]; k++) { l = this_proj -> modelgl -> bondid[step][1][k][0]; m = this_proj -> modelgl -> bondid[step][1][k][1]; if (this_proj -> atoms[j][l].show[1]) i++; if (i == id) return l; if (this_proj -> atoms[j][m].show[1]) i++; if (i == id) return m; } } return -1; } /*! \fn int num_bonds (int i) \brief number of distinct pair(s) of atoms in selection \param i the number of atom(s) in selection */ int num_bonds (int i) { return i*(i-1)/2; } /*! \fn int num_angles (int i) \brief number of distinct triplet(s) of atoms in selection \param i the number of atom(s) in selection */ int num_angles (int i) { return i*(i-1)*(i-2)/2; } /*! \fn int num_dihedrals (int i) \brief number of distinct quadruplet(s) of atoms in selection \param i the number of atom(s) in selection */ int num_dihedrals (int i) { return i*(i-1)*(i-2)*(i-3)/2; } int objects[3] = {0, 0, 0}; int * object_was_selected[3] = {NULL, NULL, NULL}; int ** tmp_object_id[3] = {NULL, NULL, NULL}; /*! \fn void save_dihedral_selection (glwin * view, int pi) \brief save the dihedral selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void save_dihedral_selection (glwin * view, int pi) { int i, j; image * img = view -> anim -> last -> img; if (img -> selected[pi] -> selected > 3 && img -> selected[pi] -> selected < MAX_IN_SELECTION-10) { objects[2] = i = num_dihedrals (img -> selected[pi] -> selected); tmp_object_id[2] = allocdint (i, 4); object_was_selected[2] = allocint (i); for (j=0; j selected[pi] -> selected_dihedrals[j]; dihedrals_loop (view, -2, pi, NULL); g_free (img -> selected[pi] -> selected_dihedrals); } else { objects[2] = 0; } } /*! \fn void update_dihedral_selection (glwin * view, int pi) \brief update the dihedral selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void update_dihedral_selection (glwin * view, int pi) { int i; image * img = view -> anim -> last -> img; if (img -> selected[pi] -> selected > 3 && img -> selected[pi] -> selected < MAX_IN_SELECTION-10) { i = num_dihedrals (img -> selected[pi] -> selected); img -> selected[pi] -> selected_dihedrals = allocint (i); dihedrals_loop (view, -1, pi, NULL); } } /*! \fn void save_angle_selection (glwin * view, int pi) \brief save the angle selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void save_angle_selection (glwin * view, int pi) { int i, j; image * img = view -> anim -> last -> img; if (img -> selected[pi] -> selected > 2 && img -> selected[pi] -> selected < MAX_IN_SELECTION) { objects[1] = i = num_angles (img -> selected[pi] -> selected); tmp_object_id[1] = allocdint (i, 3); object_was_selected[1] = allocint (i); for (j=0; j selected[pi] -> selected_angles[j]; angles_loop (view, -2, pi, NULL); g_free (img -> selected[pi] -> selected_angles); } else { objects[1] = 0; } } /*! \fn void update_angle_selection (glwin * view, int pi) \brief update the angle selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void update_angle_selection (glwin * view, int pi) { int i; image * img = view -> anim -> last -> img; if (img -> selected[pi] -> selected > 2 && img -> selected[pi] -> selected < MAX_IN_SELECTION) { i = num_angles (img -> selected[pi] -> selected); img -> selected[pi] -> selected_angles = allocint (i); angles_loop (view, -1, pi, NULL); } } /*! \fn void save_bond_selection (glwin * view, int pi) \brief save the bond selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void save_bond_selection (glwin * view, int pi) { int i, j; image * img = view -> anim -> last -> img; if (img -> selected[pi] -> selected > 1 && img -> selected[pi] -> selected < MAX_IN_SELECTION) { objects[0] = i = num_bonds (img -> selected[pi] -> selected); tmp_object_id[0] = allocdint (i, 2); object_was_selected[0] = allocint (i); for (j=0; j selected[pi] -> selected_bonds[j]; bonds_loop (view, -2, pi, NULL); g_free (img -> selected[pi] -> selected_bonds); } else { objects[0] = 0; } } /*! \fn void update_bond_selection (glwin * view, int pi) \brief update the bond selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void update_bond_selection (glwin * view, int pi) { int i; image * img = view -> anim -> last -> img; if (img -> selected[pi] -> selected > 1 && img -> selected[pi] -> selected < MAX_IN_SELECTION) { i = num_bonds (img -> selected[pi] -> selected); img -> selected[pi] -> selected_bonds = allocint (i); bonds_loop (view, -1, pi, NULL); } if (view -> measure_win != NULL) { if (view -> measure_win -> selection_tree[0] != NULL) { update_selection_tree (view, pi, 0); } } } /*! \fn void save_all_selections (glwin * view, int pi) \brief save all selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void save_all_selections (glwin * view, int pi) { save_bond_selection (view, pi); save_angle_selection (view, pi); save_dihedral_selection (view, pi); } /*! \fn void update_all_selections (glwin * view, int pi) \brief update the selection data: bonds, angles and dihedrals \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void update_all_selections (glwin * view, int pi) { update_bond_selection (view, pi); update_angle_selection (view, pi); update_dihedral_selection (view, pi); if (view -> measure_win != NULL) update_label_selection (view, pi); int i; for (i=0; i<3; i++) { if (objects[i] > 0) { if (object_was_selected[i]) { g_free (object_was_selected[i]); object_was_selected[i] = NULL; } if (tmp_object_id[i]) { g_free (tmp_object_id[i]); tmp_object_id[i] = NULL; } } objects[i] = 0; if (view -> measure_win != NULL) { if (view -> measure_win -> selection_tree[i] != NULL) { update_selection_tree (view, pi, i); } } } } /*! \fn atom_in_selection * new_atom_in_selection (int id, int sp) \brief create a selected atom \param id atom id \param sp atom species */ atom_in_selection * new_atom_in_selection (int id, int sp) { atom_in_selection * new_sel = g_malloc0(sizeof*new_sel); new_sel -> id = id; new_sel -> sp = sp; return new_sel; } /*! \fn void update_selection_list (atom_selection * at_list, atom * at, gboolean add) \brief update the selection list adding or removing an atom \param at_list target atom selection \param at atom \param add add or remove (1/0) */ void update_selection_list (atom_selection * at_list, atom * at, gboolean add) { int i; atom_in_selection * selection = at_list -> first; if (add) { selection = at_list -> last; if (at_list -> selected == 0) { at_list -> first = new_atom_in_selection (at -> id, at -> sp); at_list -> last = at_list -> first; } else { selection -> next = new_atom_in_selection (at -> id, at -> sp); selection -> next -> prev = selection; at_list -> last = selection -> next; } } else { selection = at_list -> first; for (i=0; i selected; i++) { if (selection -> id == at -> id) { if (i == 0 && at_list -> selected == 1) { at_list -> last = NULL; at_list -> first = NULL; } else if (i == 0) { at_list -> first = at_list -> first -> next; at_list -> first -> prev = NULL; } else { if (i == at_list -> selected-1) { at_list -> last = selection -> prev; at_list -> last -> next = NULL; } else { selection -> next -> prev = selection -> prev; selection -> prev -> next = selection -> next; } } break; } if (selection -> next != NULL) selection = selection -> next; } } } /*! \fn void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi) \brief process selected atom \param this_proj the target project \param view the target glwin \param id the atom id \param ac atom or clone (0/1) \param se set to 0 to ensure to remove a selected atom from the list and not to add label \param pi selection mode (0 = normal mode, 1 = edition mode) */ void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi) { int i; i = view -> anim -> last -> img -> step; if (this_proj -> atoms[i][id].pick[pi]) { if (! se) { this_proj -> atoms[i][id].pick[pi] = FALSE; update_selection_list (view -> anim -> last -> img -> selected[pi], & this_proj -> atoms[i][id], FALSE); view -> anim -> last -> img -> selected[pi] -> selected --; view -> prepare_motion = TRUE; } else if (this_proj -> atoms[i][id].label[ac]) { this_proj -> atoms[i][id].pick[pi] = FALSE; this_proj -> atoms[i][id].label[ac] = FALSE; view -> labelled = check_label_numbers (this_proj, 2); update_selection_list (view -> anim -> last -> img -> selected[pi], & this_proj -> atoms[i][id], FALSE); view -> anim -> last -> img -> selected[pi] -> selected --; view -> prepare_motion = TRUE; } else { this_proj -> atoms[i][id].label[ac] = TRUE; view -> labelled = check_label_numbers (this_proj, 2); } } else { this_proj -> atoms[i][id].pick[pi] = TRUE; update_selection_list (view -> anim -> last -> img -> selected[pi], & this_proj -> atoms[i][id], TRUE); view -> anim -> last -> img -> selected[pi] -> selected ++; view -> prepare_motion = TRUE; } } /*! \fn void process_selection (project * this_proj, glwin * view, int id, int ac, int pi) \brief process selection \param this_proj the target project \param view the target glwin \param id the atom id \param ac atom or clone (0/1) \param pi selection mode (0 = normal mode, 1 = edition mode) */ void process_selection (project * this_proj, glwin * view, int id, int ac, int pi) { int i, j, k; j = view -> anim -> last -> img -> step; k = this_proj -> atoms[j][id].pick[pi]; for (i=0; i steps; i++) { if (i == j) { process_selected_atom (this_proj, view, id, ac, 1, pi); } else { this_proj -> atoms[i][id].pick[pi] = ! k; } } } /*! \fn void process_the_hits (glwin * view, gint event_button, double ptx, double pty) \brief process a mouse click \param view the target glwin \param event_button the event button \param ptx x position \param pty y position */ void process_the_hits (glwin * view, gint event_button, double ptx, double pty) { int i, j, k, l, m, n, o, p, q; view -> picked = FALSE; GLubyte pixel[4]; GLint viewport[4]; int scale = gtk_widget_get_scale_factor (view -> win); glGetIntegerv (GL_VIEWPORT, viewport); glPixelStorei (GL_UNPACK_ALIGNMENT, 1); glReadPixels (scale * view -> mouseX, viewport[3] - scale * view -> mouseY, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixel); int picked_id = pixel[0] + 256*pixel[1] + 256*256*pixel[2]; for (i=0; i to_be_picked; i++) { if (picked_id == view -> color_to_pick[i]) { j = i; view -> picked = TRUE; break; } } to_pop.action = 0; to_pop.x = 0.0; to_pop.y = 0.0; to_pop.pts[0] = to_pop.pts[1] = to_pop.pts[2] = to_pop.pts[3] = to_pop.pts[4] = -1; if (view -> picked) { project * this_proj = get_project_by_id(view -> proj); k = (is_atom_win_active(view) || (view -> mode == EDITION && view -> selection_mode == NSELECTION-1)) ? 1 : 0; l = view -> anim -> last -> img -> step; if (j < view -> clones_to_be_picked) { m = find_selected_atom (this_proj, j); n = (j < view -> atoms_to_be_picked) ? 0 : 1; o = m; p = -1; q = this_proj -> atoms[l][m].pick[k]; } else { m = find_selected_bond (this_proj, j); n = (j < view -> bonds_to_be_picked) ? 0 : 1; o = view -> bondid[l][n][m][0]; p = view -> bondid[l][n][m][1]; q = 0; if (this_proj -> atoms[l][o].pick[k] || this_proj -> atoms[l][p].pick[k]) q = 1; } if (m != -1) { if (event_button == 1) { if (view -> selection_mode == ATOMS || view -> selection_mode == NSELECTION-1 || is_atom_win_active(view)) { save_all_selections (view, k); if (j < view -> clones_to_be_picked) { process_selection (this_proj, view, m, n, k); } else { if (this_proj -> atoms[l][o].show[n]) process_selection (this_proj, view, o, n, k); if (this_proj -> atoms[l][p].show[n]) process_selection (this_proj, view, p, n, k); } update_all_selections (view, k); } else if (view -> selection_mode == 1) { opengl_project_changed (view -> proj); if (j < view -> clones_to_be_picked) { selected_status = ! this_proj -> atoms[l][m].pick[get_to_be_selected (view)]; #ifdef GTK4 select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(m)); #else select_unselect_this_atom (NULL, GINT_TO_POINTER(m)); #endif } else { selected_status = ! this_proj -> atoms[l][o].pick[get_to_be_selected (view)]; #ifdef GTK4 select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(o)); select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(p)); #else select_unselect_this_atom (NULL, GINT_TO_POINTER(o)); select_unselect_this_atom (NULL, GINT_TO_POINTER(p)); #endif } } else { opengl_project_changed (view -> proj); if (view -> selection_mode > 3) { p = view -> selection_mode-2; } else { p = view -> selection_mode; } if (j < view -> clones_to_be_picked) { n = this_proj -> atoms[l][m].coord[p]; o = this_proj -> atoms[l][m].pick[0]; } else { n = this_proj -> atoms[l][o].coord[p]; o = this_proj -> atoms[l][o].pick[0]; } if (view -> selection_mode > 3) { selected_aspec = -1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & view -> colorp[0][0]); #else select_unselect_atoms (NULL, & view -> colorp[0][0]); #endif } tint pointer; pointer.a = p; pointer.b = n; pointer.c = ! o; #ifdef GTK4 select_unselect_coord (NULL, NULL, & pointer); #else select_unselect_coord (NULL, & pointer); #endif } if (view -> mode == EDITION) { init_coordinates (this_proj, 1, FALSE, TRUE); view -> baryc[1] = get_bary (this_proj, 1); } int shaders[1] = {SELEC}; re_create_md_shaders (1, shaders, this_proj); view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; update (view); // if (view -> anim -> last -> img -> m_is_pressed && gtk_accelerator_get_default_mod_mask() == GDK_CONTROL_MASK) window_measures (NULL, view); } else if (event_button == 3) { to_pop.action = 2; to_pop.x = ptx; to_pop.y = pty; to_pop.pts[0] = q; to_pop.pts[1] = k; to_pop.pts[2] = o; to_pop.pts[3] = p; to_pop.pts[4] = n; // popup_selection (view, ptx, pty, q, k, o, p, n); } } } else if (event_button == 3) { to_pop.action = 1; to_pop.x = ptx; to_pop.y = pty; // popup_main_menu (view, ptx, pty); } } atomes_1.3.1/src/opengl/draw/0000775000175000017500000000000015212624223015515 5ustar lerouxlerouxatomes_1.3.1/src/opengl/draw/d_box.c0000664000175000017500000011250615212624223016761 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_box.c * @short Functions to prepare the OpenGL rendering for the box(es) \n Functions to prepare the OpenGL rendering for the slab(s) \n Functions to prepare the OpenGL rendering for the volume(s) * @author Sébastien Le Roux */ /* * This file: 'd_box.c' * * Contains: * - The functions to prepare the OpenGL rendering for the box(es) - The functions to prepare the OpenGL rendering for the slab(s) - The functions to prepare the OpenGL rendering for the volume(s) * * List of functions: int create_box_lists (int b_step); double draw_cuboid (gboolean draw, int SHADID, int shadnum, mat4_t rot, vec3_t cpos, double paral[3][3], ColRGBA col, double slab_alpha); gboolean are_identical_vec3 (vec3_t va, vec3_t vb); gboolean not_in_already (vec3_t a, vec3_t b, float * vertices); gboolean not_in_corners (vec3_t a, float * vertices); void setup_extra_box_vertices (vec3_t a, vec3_t b, int id, float * c_vert, float * s_vert); void setup_box_vertices (vec3_t ax, vec3_t bx, int id, float * c_vert, float * s_vert); void prepare_box_vertices (void (*c_func)(vec3_t, vec3_t, int, float *, float *), float * verts, float * serts, int id); void prepare_cuboid (vec3_t position, int id); void create_light_lists (); void cuboid_slab (mat4_t rot); void cylinder_slab (mat4_t rot); void spherical_slab (); void create_slab_lists (project * this_proj); void create_volumes_lists (); */ #include "global.h" #include "glview.h" extern object_3d * draw_sphere (int quality); extern object_3d * draw_cylinder (int quality, float ra, float rb); extern object_3d * draw_cylinder_cap (int quality, float rad, gboolean picked); extern object_3d * draw_billboard_quad (void); extern void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha); extern void setup_sphere_vertice (float * vertices, vec3_t pos, ColRGBA col, float rad, float alpha); extern void setup_cylinder_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, float delta, float r_sph_a, float r_sph_b); extern void setup_cap_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, gboolean sel); extern void create_slab_info (project * this_proj); extern void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi); extern ColRGBA pcol; int BOX_BUFF_SIZE; /*! \fn gboolean are_identical_vec3 (vec3_t va, vec3_t vb) \brief are these 2 vectors indentical \param va 1st vector \param vb 2nd vector */ gboolean are_identical_vec3 (vec3_t va, vec3_t vb) { if (va.x == vb.x && va.y == vb.y && va.z == vb.z) { return TRUE; } else { return FALSE; } } /*! \fn gboolean not_in_already (vec3_t a, vec3_t b, float * vertices) \brief is this box edge vector already saved ? \param a 1st set of coordinates \param b 2nd set of coordinates \param vertices the data buffer to check */ gboolean not_in_already (vec3_t a, vec3_t b, float * vertices) { int i, j, k; vec3_t tma, tmb; for (i=0; i abc -> extra_cell[0]+1; p++) { for (q=0; q abc -> extra_cell[1]+1; q++) { for (r=0; r abc -> extra_cell[2]+1; r++) { if (p > 0 || q > 0 || r > 0) { shift.x = p*box_gl -> vect[0][0]+q*box_gl -> vect[1][0]+r*box_gl -> vect[2][0]; shift.y = p*box_gl -> vect[0][1]+q*box_gl -> vect[1][1]+r*box_gl -> vect[2][1]; shift.z = p*box_gl -> vect[0][2]+q*box_gl -> vect[1][2]+r*box_gl -> vect[2][2]; t_a = v3_add (v3_muls (a, j), shift); t_b = v3_add (v3_muls (b, j), shift); if (not_in_already (t_a, t_b, c_vert)) { if (plot -> abc -> box == WIREFRAME) { setup_line_vertice (c_vert, t_a, pcol, 0.5); setup_line_vertice (c_vert, t_b, pcol, 0.5); } else { if (not_in_corners(t_a, s_vert)) setup_sphere_vertice (s_vert, t_a, pcol, plot -> abc -> rad, pcol.alpha*0.5); if (not_in_corners(t_b, s_vert)) setup_sphere_vertice (s_vert, t_b, pcol, plot -> abc -> rad, pcol.alpha*0.5); setup_cylinder_vertice (c_vert, t_a, t_b, pcol, plot -> abc -> rad, 0.5, 0.0, plot -> abc -> rad, 0.0); } } } } } } } } /*! \fn void setup_box_vertices (vec3_t ax, vec3_t bx, float * c_vert, float * s_vert) \brief prepare the unit cell OpenGL rendering \param ax 1st point coordinates \param bx 2nd point coordinates \param c_vert OpenGL cylinder/line data buffer to fill \param s_vert OpenGL sphere data buffer to fill, or NULL */ void setup_box_vertices (vec3_t ax, vec3_t bx, float * c_vert, float * s_vert) { float j; vec3_t a, b; /*vec3_t cell[3]; int i; for (i=0; i<3; i++) { cell[i] = vec3(box_gl -> vect[i][0], box_gl -> vect[i][1], box_gl -> vect[i][2]); cell[i] = v3_divs (cell[i], 2.0); } vec3_t lattice = v3_add(v3_add(cell[0], cell[1]), cell[2]);*/ for (j=-1.0; j<2.0; j=j+2.0) { /*a = v3_sub (v3_muls (ax, j), lattice); b = v3_sub (v3_muls (bx, j), lattice);*/ a = v3_muls (ax, j); b = v3_muls (bx, j); if (plot -> abc -> box == WIREFRAME) { setup_line_vertice (c_vert, a, pcol, 1.0); setup_line_vertice (c_vert, b, pcol, 1.0); } else { if (not_in_corners(a, s_vert)) setup_sphere_vertice (s_vert, a, pcol, plot -> abc -> rad, pcol.alpha*1.0); if (not_in_corners(b, s_vert)) setup_sphere_vertice (s_vert, b, pcol, plot -> abc -> rad, pcol.alpha*1.0); setup_cylinder_vertice (c_vert, a, b, pcol, plot -> abc -> rad, 1.0, 0.0, plot -> abc -> rad, 0.0); } } } /*! \fn void prepare_box_vertices (void (*c_func)(vec3_t, vec3_t, float *, float *), float * verts, float * serts) \brief prepare a box OpenGL rendering \param c_func the function to use a render \param verts OpenGL cylinder/line data buffer to fill \param serts OpenGL sphere data buffer to fill, or NULL */ void prepare_box_vertices (void (*c_func)(vec3_t, vec3_t, float *, float *), float * verts, float * serts) { int i; vec3_t pa, pb; for (i=-1; i<2; i=i+2) { pa.x = (- box_gl -> vect[0][0] - box_gl -> vect[1][0] + i * box_gl -> vect[2][0]) / 2.0; pa.y = (- box_gl -> vect[0][1] - box_gl -> vect[1][1] + i * box_gl -> vect[2][1]) / 2.0; pa.z = (- box_gl -> vect[0][2] - box_gl -> vect[1][2] + i * box_gl -> vect[2][2]) / 2.0; pb.x = (box_gl -> vect[0][0] - box_gl -> vect[1][0] + i * box_gl -> vect[2][0]) / 2.0; pb.y = (box_gl -> vect[0][1] - box_gl -> vect[1][1] + i * box_gl -> vect[2][1]) / 2.0; pb.z = (box_gl -> vect[0][2] - box_gl -> vect[1][2] + i * box_gl -> vect[2][2]) / 2.0; (* c_func)(pa, pb, verts, serts); pa.x = (i * box_gl -> vect[0][0] - box_gl -> vect[1][0] + box_gl -> vect[2][0]) / 2.0; pa.y = (i * box_gl -> vect[0][1] - box_gl -> vect[1][1] + box_gl -> vect[2][1]) / 2.0; pa.z = (i * box_gl -> vect[0][2] - box_gl -> vect[1][2] + box_gl -> vect[2][2]) / 2.0; pb.x = (i * box_gl -> vect[0][0] - box_gl -> vect[1][0] - box_gl -> vect[2][0]) / 2.0; pb.y = (i * box_gl -> vect[0][1] - box_gl -> vect[1][1] - box_gl -> vect[2][1]) / 2.0; pb.z = (i * box_gl -> vect[0][2] - box_gl -> vect[1][2] - box_gl -> vect[2][2]) / 2.0; (* c_func)(pa, pb, verts, serts); pa.x = (i * box_gl -> vect[0][0] + box_gl -> vect[1][0] + box_gl -> vect[2][0]) / 2.0; pa.y = (i * box_gl -> vect[0][1] + box_gl -> vect[1][1] + box_gl -> vect[2][1]) / 2.0; pa.z = (i * box_gl -> vect[0][2] + box_gl -> vect[1][2] + box_gl -> vect[2][2]) / 2.0; pb.x = (i * box_gl -> vect[0][0] - box_gl -> vect[1][0] + box_gl -> vect[2][0]) / 2.0; pb.y = (i * box_gl -> vect[0][1] - box_gl -> vect[1][1] + box_gl -> vect[2][1]) / 2.0; pb.z = (i * box_gl -> vect[0][2] - box_gl -> vect[1][2] + box_gl -> vect[2][2]) / 2.0; (* c_func)(pa, pb, verts, serts); } } /*! \fn int create_box_lists (int b_step) \brief prepare box OpenGL rendering \param b_step the step number if NPT, 0 otherwise */ int create_box_lists (int b_step) { int vertex = 8; object_3d * box_a, * box_b; cleaning_shaders (wingl, MDBOX); wingl -> create_shaders[MDBOX] = FALSE; if (plot -> abc -> box == NONE) return 0; int saved_tracing = plot -> ray_tracing; plot -> ray_tracing = FALSE; int shaders; vertex *= (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); if (plot -> abc -> box == WIREFRAME) { shaders = 1; BOX_BUFF_SIZE = LINE_BUFF_SIZE; box_b = g_malloc0(sizeof*box_b); box_b -> vert_buffer_size = LINE_BUFF_SIZE; box_b -> num_vertices = vertex*3; box_b -> vertices = allocfloat (box_b -> vert_buffer_size*box_b -> num_vertices); } else { shaders = 2; BOX_BUFF_SIZE = (plot -> ray_tracing) ? CYLI_BUFF_SIZE + 2 : CYLI_BUFF_SIZE; // Spheres at corners box_a = (plot -> ray_tracing) ? draw_billboard_quad () : draw_sphere (plot -> quality); box_a -> num_instances = 3*vertex*3/2; box_a -> inst_buffer_size = ATOM_BUFF_SIZE; allocate_instances (box_a); // Cylinders box_b = (plot -> ray_tracing) ? draw_billboard_quad () : draw_cylinder (plot -> quality, 1.0, 1.0); box_b -> num_instances = 3*vertex; box_b -> inst_buffer_size = (plot -> ray_tracing) ? CYLI_BUFF_SIZE + 2 : CYLI_BUFF_SIZE; allocate_instances (box_b); } wingl -> ogl_glsl[MDBOX][b_step] = g_malloc0(shaders*sizeof*wingl -> ogl_glsl[MDBOX][b_step]); nbs = nbl = 0; pcol = plot -> abc -> color; prepare_box_vertices (setup_box_vertices, (plot -> abc -> box == WIREFRAME) ? box_b -> vertices: box_b -> instances, (plot -> abc -> box == WIREFRAME) ? NULL : box_a -> instances); if (plot -> abc -> extra_cell[0] > 0 || plot -> abc -> extra_cell[1] > 0 || plot -> abc -> extra_cell[2] > 0) { prepare_box_vertices (setup_extra_box_vertices, (plot -> abc -> box == WIREFRAME) ? box_b -> vertices: box_b -> instances, (plot -> abc -> box == WIREFRAME) ? NULL : box_a -> instances); } if (plot -> abc -> box == WIREFRAME) { wingl -> ogl_glsl[MDBOX][b_step][0] = init_shader_program (MDBOX, GLSL_LINES, line_vertex, NULL, line_color, GL_LINES, 2, 1, FALSE, box_b); wingl -> ogl_glsl[MDBOX][b_step][0] -> line_width = plot -> abc -> line; } else { // Sphere at corners const GLchar * vs_sph = (plot -> ray_tracing) ? sphere_vertex_ray : sphere_vertex; const GLchar * fs_box = (plot -> ray_tracing) ? full_color_ray : full_color; wingl -> ogl_glsl[MDBOX][b_step][0] = init_shader_program (MDBOX, GLSL_SPHERES, vs_sph, NULL, fs_box, GL_TRIANGLE_STRIP, 4, 1, TRUE, box_a); // Cylinders const GLchar * vs_cyl = (plot -> ray_tracing) ? cylinder_vertex_ray : cylinder_vertex; int narray_cyl = plot -> ray_tracing ? 8 : 6; wingl -> ogl_glsl[MDBOX][b_step][1] = init_shader_program (MDBOX, GLSL_CYLINDERS, vs_cyl, NULL, fs_box, GL_TRIANGLE_STRIP, narray_cyl, 1, TRUE, box_b); } plot -> ray_tracing = saved_tracing; return shaders; } /*vec3_t center; / * * void setup_cuboid_vertices (vec3_t a, vec3_t b, int id) \brief NOT USED ! \param a \param b \param id * / void setup_cuboid_vertices (vec3_t a, vec3_t b, int id) { float j; for (j=-1.0; j<2.0; j=j+2.0) { box_axis_vertices (wingl -> d_vertices[LIGHT][id], -1, 0.0, v3_muls (v3_add(a,center), j)); box_axis_vertices (wingl -> d_vertices[LIGHT][id], -1, 0.0, v3_muls (v3_add(b,center), j)); } }*/ GLfloat cuboid_vertices[] = { // Positions // Normals -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, -1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, -1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, -1.0f, -1.0f, -1.0f, 0.0f, -1.0f, 0.0f, 1.0f, -1.0f, -1.0f, 0.0f, -1.0f, 0.0f, 1.0f, -1.0f, 1.0f, 0.0f, -1.0f, 0.0f, 1.0f, -1.0f, 1.0f, 0.0f, -1.0f, 0.0f, -1.0f, -1.0f, 1.0f, 0.0f, -1.0f, 0.0f, -1.0f, -1.0f, -1.0f, 0.0f, -1.0f, 0.0f, -1.0f, 1.0f, -1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, -1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, -1.0f, 1.0f, -1.0f, 0.0f, 1.0f, 0.0f, }; /*! \fn void prepare_cuboid (vec3_t position, int id) \brief OpenGL 3D light object rendering \param position light position \param id shader number */ void prepare_cuboid (vec3_t position, int id) { float lgt = 1.0; object_3d * light = g_malloc0(sizeof*light); light -> vert_buffer_size = POLY_BUFF_SIZE; light -> num_vertices = 36; light -> vertices = allocfloat (light -> vert_buffer_size*light -> num_vertices); int i, j, k, l; l = 0; for (i=0; i<36; i++) { j = 10*l; k = 6*l; light -> vertices[j] = lgt*cuboid_vertices[k]*0.5 + position.x; light -> vertices[j+1] = lgt*cuboid_vertices[k+1]*0.5 + position.y; light -> vertices[j+2] = lgt*cuboid_vertices[k+2]*0.5 + position.z; light -> vertices[j+3] = cuboid_vertices[k+3]; light -> vertices[j+4] = cuboid_vertices[k+4]; light -> vertices[j+5] = cuboid_vertices[k+5]; light -> vertices[j+6] = 1.0; light -> vertices[j+7] = 1.0; light -> vertices[j+8] = 1.0; light -> vertices[j+9] = 1.0; l ++; } wingl -> ogl_glsl[LIGHT][0][id] = init_shader_program (LIGHT, GLSL_POLYEDRA, full_vertex, NULL, full_color, GL_TRIANGLES, 3, 1, FALSE, light); } /*! \fn void create_light_lists () \brief prepare light(s) OpenGL rendering */ void create_light_lists () { int i, j; j = 0; cleaning_shaders (wingl, LIGHT); for (i=0; i l_ghtning.lights; i++) { if (plot -> l_ghtning.spot[i] -> show) j++; } wingl -> n_shaders[LIGHT][0] = j; if (plot -> light_loc != NULL) { g_free (plot -> light_loc); plot -> light_loc = NULL; } if (j > 0) { wingl -> ogl_glsl[LIGHT][0] = g_malloc0(wingl -> n_shaders[LIGHT][0]*sizeof*wingl -> ogl_glsl[LIGHT][0]); plot -> light_loc = allocint (j); j = 0; for (i=0; i l_ghtning.lights; i++) { if (plot -> l_ghtning.spot[i] -> show) { prepare_cuboid (plot -> l_ghtning.spot[i] -> position, j); if (plot -> l_ghtning.spot[i] -> type > 0 && plot -> l_ghtning.spot[i] -> fix == 0) plot -> light_loc[j] = 1; j ++; } } } wingl -> create_shaders[LIGHT] = FALSE; } vec3_t get_normal (vec3_t v1, vec3_t v2, vec3_t v3) { vec3_t edge_a = v3_sub(v3, v1); vec3_t edge_b = v3_sub(v2, v1); return v3_norm (v3_cross(edge_a, edge_b)); } /*! \fn double draw_cuboid (gboolean draw, int SHADID, int shadnum, mat4_t rot, vec3_t cpos, double paral[3][3], ColRGBA col, double slab_alpha) \brief draw cuboid vertices \param draw draw or not (1/0) \param SHADID shader id \param shadnum shader number \param rot rotation matrix \param cpos position of center of slab \param paral cell parameters \param col slab color \param slab_alpha slab opacity */ double draw_cuboid (gboolean draw, int SHADID, int shadnum, mat4_t rot, vec3_t cpos, double paral[3][3], ColRGBA col, double slab_alpha) { int i, j, k, l, m, n, o; vec3_t pos; double cvol; double shift[3]; cvol = (paral[0][1]*paral[1][2]-paral[0][2]*paral[1][1])*paral[2][0]; cvol += (paral[0][2]*paral[1][0]-paral[0][0]*paral[1][2])*paral[2][1]; cvol += (paral[0][0]*paral[1][1]-paral[0][1]*paral[1][0])*paral[2][2]; cvol = fabs(cvol); if (draw) { object_3d * slab = g_malloc0(sizeof*slab); slab -> vert_buffer_size = POLY_BUFF_SIZE; slab -> num_vertices = 36*(plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); slab -> vertices = allocfloat (slab -> vert_buffer_size*slab -> num_vertices); for (i=0; i<36; i++) { j = i*POLY_BUFF_SIZE; k = 6*i; for (l=0; l<3; l++) { slab -> vertices[j+l] += 0.5*(cuboid_vertices[k]*paral[0][l] + cuboid_vertices[k+1]*paral[1][l] + cuboid_vertices[k+2]*paral[2][l]); } pos = vec3 (slab -> vertices[j], slab -> vertices[j+1], slab -> vertices[j+2]); pos = m4_mul_pos (rot, pos); slab -> vertices[j] = pos.x + cpos.x; slab -> vertices[j+1] = pos.y + cpos.y; slab -> vertices[j+2] = pos.z + cpos.z; } n = 0; for (i=0; i abc -> extra_cell[0]+1; i++) { for (j=0; j abc -> extra_cell[1]+1; j++) { for (k=0; k abc -> extra_cell[2]+1; k++) { for (l=0; l<3; l++) shift[l] = i*box_gl -> vect[0][l] + j*box_gl -> vect[1][l] + k*box_gl -> vect[2][l]; for (l=0; l<36; l++) { m = POLY_BUFF_SIZE*n; for (o=0; o<3; o++) { slab -> vertices[m+o] = slab -> vertices[l*POLY_BUFF_SIZE+o] + shift[o]; if (SHADID == SLABS) { slab -> vertices[m+6+o] = (o) ? 1.0 : 0.0; } else { if (! o) slab -> vertices[m+6+o] = col.red; if (o == 1) slab -> vertices[m+6+o] = col.green; if (o == 2) slab -> vertices[m+6+o] = col.blue; } } pos = vec3 (cuboid_vertices[6*l+3], cuboid_vertices[6*l+4], cuboid_vertices[6*l+5]); pos = m4_mul_pos (rot, pos); slab -> vertices[m+3] = pos.x; slab -> vertices[m+4] = pos.y; slab -> vertices[m+5] = pos.z; slab -> vertices[m+9] = slab_alpha; n ++; } } } } wingl -> ogl_glsl[SHADID][(SHADID == SLABS) ? 0 : step][shadnum] = init_shader_program (SHADID, GLSL_POLYEDRA, full_vertex, NULL, full_color, GL_TRIANGLES, 3, 1, TRUE, slab); } return cvol; } /*! \fn void cuboid_slab (mat4_t rot) \brief prepare cuboid slab OpenGL rendering \param rot rotation matrix */ void cuboid_slab (mat4_t rot) { int i, j, k, l, m; double ang[3], cang[3], sang[3]; double paral[3][3]; double tmp; for (i=0; i<3; i++) { if (wingl -> cell_win -> cparam[i+15] == 90.0) { ang[i] = pi/2.0; sang[i] = 1.0; cang[i] = 0.0; } else { ang[i] = wingl -> cell_win -> cparam[i+15]*pi/180.0; sang[i] = sin(ang[i]); cang[i] = cos(ang[i]); } } paral[0][0] = wingl -> cell_win -> cparam[9]; paral[0][1] = 0.0; paral[0][2] = 0.0; paral[1][0] = wingl -> cell_win -> cparam[10] * cang[2]; paral[1][1] = wingl -> cell_win -> cparam[10] * sang[2]; paral[1][2] = 0.0; paral[2][0] = wingl -> cell_win -> cparam[11] * cang[1]; tmp = (cang[0] - cang[1]*cang[2]) / sang[2]; paral[2][1] = wingl -> cell_win -> cparam[11] * tmp; paral[2][2] = wingl -> cell_win -> cparam[11] * sqrt(sang[1]*sang[1] - tmp*tmp); ColRGBA null; // Not used wingl -> cell_win -> slab_vol = draw_cuboid (! wingl -> cell_win -> cut_this_slab, SLABS, 0, rot, vec3(wingl -> cell_win -> cparam[6], wingl -> cell_win -> cparam[7], wingl -> cell_win -> cparam[8]), paral, null, wingl -> cell_win -> slab_alpha); vec3_t at, atc; vec3_t ps[8]; vec3_t pn[6]; vec3_t cat = vec3(wingl -> cell_win -> cparam[6], wingl -> cell_win -> cparam[7], wingl -> cell_win -> cparam[8]); l = 0; float pmax[3]; for (i=-1; i<2; i+=2) { for (j=-1; j<2; j+=2) { for (k=-1; k<2; k+=2) { ps[l].x = 0.5*(i*paral[0][0] + j*paral[1][0] + k*paral[2][0]); ps[l].y = 0.5*(i*paral[0][1] + j*paral[1][1] + k*paral[2][1]); ps[l].z = 0.5*(i*paral[0][2] + j*paral[1][2] + k*paral[2][2]); ps[l] = m4_mul_pos (rot, ps[l]); ps[l]= v3_add (ps[l], cat); if (l == 0) { pmax[0] = ps[l].x; pmax[1] = ps[l].y; pmax[2] = ps[l].z; } else { pmax[0] = max(pmax[0],ps[l].x); pmax[1] = max(pmax[1],ps[l].y); pmax[2] = max(pmax[2],ps[l].z); } l ++; } } } pn[0] = get_normal (ps[1], ps[0], ps[2]); pn[1] = get_normal (ps[1], ps[0], ps[4]); pn[2] = get_normal (ps[2], ps[0], ps[4]); pn[3] = get_normal (ps[3], ps[7], ps[5]); pn[4] = get_normal (ps[3], ps[7], ps[6]); pn[5] = get_normal (ps[5], ps[7], ps[6]); ps[0] = v3_sub (ps[0], cat); ps[7] = v3_sub (ps[7], cat); for (i=0; i nspec; i++) wingl -> cell_win -> slab_lot[i] = 0; wingl -> cell_win -> slab_atoms = 0; float val, vbl; atom slab_center; distance at_slab; slab_center.x = cat.x; slab_center.y = cat.y; slab_center.z = cat.z; for (i=0; inatomes; i++) { at_slab = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[0][i], & slab_center); at = vec3(slab_center.x+at_slab.x, slab_center.y+at_slab.y, slab_center.z+at_slab.z); if (at.x <= pmax[0] && at.y <= pmax[1] && at.z <= pmax[2]) { m = 0; atc = v3_sub (at, cat); for (j=0; j<6; j++) { k = (j < 3) ? 0 : 7; val = v3_dot (ps[k], pn[j]); vbl = v3_dot (atc, pn[j]); if (fabs(vbl) < fabs(val)) { m ++; } else { break; } } if (m == 6 && (! at_slab.pbc || wingl -> cell_win -> slab_pbc)) { wingl -> cell_win -> slab_atoms ++; l = proj_gl -> atoms[0][i].sp; wingl -> cell_win -> slab_lot[l] ++; if (wingl -> cell_win -> cut_this_slab) process_selected_atom (proj_gl, wingl, i, 0, 0, 0); } } } } /*! \fn void cylinder_slab (mat4_t rot) \brief prepare cylinder slab OpenGL rendering \param rot rotation matrix */ void cylinder_slab (mat4_t rot) { int i, j, k; vec3_t pos_a = vec3(-wingl -> cell_win -> cparam[12]/2.0, 0.0, 0.0); vec3_t pos_b = vec3( wingl -> cell_win -> cparam[12]/2.0, 0.0, 0.0); pos_a = m4_mul_pos (rot, pos_a); pos_b = m4_mul_pos (rot, pos_b); vec3_t cat = vec3 (wingl -> cell_win -> cparam[6], wingl -> cell_win -> cparam[7], wingl -> cell_win -> cparam[8]); pos_a = v3_add (pos_a, cat); pos_b = v3_add (pos_b, cat); vec3_t axis = v3_sub (pos_b, pos_a); if (! wingl -> cell_win -> cut_this_slab) { object_3d * slab = g_malloc0(sizeof*slab); object_3d * slab_cap = g_malloc0(sizeof*slab_cap); slab = (plot -> ray_tracing) ? draw_billboard_quad () : draw_cylinder (30, 1.0, 1.0); slab -> num_instances = (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); slab -> inst_buffer_size = (plot -> ray_tracing) ? CYLI_BUFF_SIZE + 2 : CYLI_BUFF_SIZE; allocate_instances (slab); slab_cap = (plot -> ray_tracing) ? draw_billboard_quad () : draw_cylinder_cap (50, 1.0, FALSE); slab_cap -> num_instances = 2 * slab -> num_instances; slab_cap -> inst_buffer_size = CAPS_BUFF_SIZE; allocate_instances (slab_cap); ColRGBA col; col.red = 0.0; col.blue = 1.0; col.green = 1.0; col.alpha = wingl -> cell_win -> slab_alpha; vec3_t shift; for (i=0; i abc -> extra_cell[0]+1; i++) { for (j=0; j abc -> extra_cell[1]+1; j++) { for (k=0; k abc -> extra_cell[2]+1; k++) { shift.x = i*box_gl -> vect[0][0]+j*box_gl -> vect[1][0]+k*box_gl -> vect[2][0]; shift.y = i*box_gl -> vect[0][1]+j*box_gl -> vect[1][1]+k*box_gl -> vect[2][1]; shift.z = i*box_gl -> vect[0][2]+j*box_gl -> vect[1][2]+k*box_gl -> vect[2][2]; pos_a = v3_add (pos_a, shift); pos_b = v3_add (pos_b, shift); setup_cylinder_vertice (slab -> instances, pos_a, pos_b, col, wingl -> cell_win -> cparam[13], 1.0, 0.0, 0.0, 0.0); pos_a = v3_sub (pos_a, shift); pos_b = v3_sub (pos_b, shift); } } } const GLchar * vs_slc = (plot -> ray_tracing) ? cylinder_vertex_ray : cylinder_vertex; const GLchar * fs_slc = (plot -> ray_tracing) ? full_color_ray : full_color; int narray_cyl = plot -> ray_tracing ? 8 : 6; wingl -> ogl_glsl[SLABS][0][0] = init_shader_program (SLABS, GLSL_CYLINDERS, vs_slc, NULL, fs_slc, GL_TRIANGLE_STRIP, narray_cyl, 1, TRUE, slab); nbs = 0; for (i=0; i abc -> extra_cell[0]+1; i++) { for (j=0; j abc -> extra_cell[1]+1; j++) { for (k=0; k abc -> extra_cell[2]+1; k++) { shift.x = i*box_gl -> vect[0][0]+j*box_gl -> vect[1][0]+k*box_gl -> vect[2][0]; shift.y = i*box_gl -> vect[0][1]+j*box_gl -> vect[1][1]+k*box_gl -> vect[2][1]; shift.z = i*box_gl -> vect[0][2]+j*box_gl -> vect[1][2]+k*box_gl -> vect[2][2]; pos_a = v3_add (pos_a, shift); pos_b = v3_add (pos_b, shift); setup_cap_vertice (slab_cap -> instances, pos_a, pos_b, col, wingl -> cell_win -> cparam[13], 1.0, FALSE); setup_cap_vertice (slab_cap -> instances, pos_b, pos_a, col, wingl -> cell_win -> cparam[13], 1.0, FALSE); pos_a = v3_sub (pos_a, shift); pos_b = v3_sub (pos_b, shift); } } } const GLchar * vs_slcp = (plot -> ray_tracing) ? cap_vertex_ray : cap_vertex; GLenum prim_slcp = (plot -> ray_tracing) ? GL_TRIANGLE_STRIP : GL_TRIANGLE_FAN; wingl -> ogl_glsl[SLABS][0][1] = init_shader_program (SLABS, GLSL_CAPS, vs_slcp, NULL, fs_slc, prim_slcp, 5, 1, TRUE, slab_cap); } wingl -> cell_win -> slab_vol = pi*pow(wingl -> cell_win -> cparam[13], 2)*wingl -> cell_win -> cparam[12]; for (i=0; i nspec; i++) wingl -> cell_win -> slab_lot[i] = 0; wingl -> cell_win -> slab_atoms = 0; vec3_t atc, patc; atom slab_center; distance at_slab; slab_center.x = cat.x; slab_center.y = cat.y; slab_center.z = cat.z; for (i=0; inatomes; i++) { atc = vec3(proj_gl -> atoms[0][i].x, proj_gl -> atoms[0][i].y, proj_gl -> atoms[0][i].z); at_slab = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[0][i], & slab_center); if (wingl -> cell_win -> slab_pbc || ! at_slab.pbc) { atc = vec3(at_slab.x, at_slab.y, at_slab.z); patc = v3_proj (atc, axis); if (v3_length(patc) <= wingl -> cell_win -> cparam[12]/2.0 && v3_length(v3_sub(patc,atc)) <= wingl -> cell_win -> cparam[13]) { wingl -> cell_win -> slab_atoms ++; j = proj_gl -> atoms[0][i].sp; wingl -> cell_win -> slab_lot[j] ++; if (wingl -> cell_win -> cut_this_slab) process_selected_atom (proj_gl, wingl, i, 0, 0, 0); } } } } /*! \fn void spherical_slab () \brief prepare spherical slab OpenGL rendering */ void spherical_slab () { int i, j, k, l; vec3_t pos; if (! wingl -> cell_win -> cut_this_slab) { object_3d * slab = g_malloc0(sizeof*slab); slab = (plot -> ray_tracing) ? draw_billboard_quad () : draw_sphere (50); slab -> inst_buffer_size = ATOM_BUFF_SIZE; slab -> num_instances = (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); allocate_instances (slab); ColRGBA col; col.red = 0.0; col.blue = 1.0; col.green = 1.0; col.alpha = wingl -> cell_win -> slab_alpha; double shift[3]; for (i=0; i abc -> extra_cell[0]+1; i++) { for (j=0; j abc -> extra_cell[1]+1; j++) { for (k=0; k abc -> extra_cell[2]+1; k++) { for (l=0; l<3; l++) shift[l] = i*box_gl -> vect[0][l] + j*box_gl -> vect[1][l] + k*box_gl -> vect[2][l] + wingl -> cell_win -> cparam[l+6]; pos = vec3(shift[0], shift[1], shift[2]); setup_sphere_vertice (slab -> instances, pos, col, wingl -> cell_win -> cparam[14], 1.0); } } } const GLchar * vs_sls = (plot -> ray_tracing) ? sphere_vertex_ray : sphere_vertex; const GLchar * fs_sls = (plot -> ray_tracing) ? full_color_ray : full_color; wingl -> ogl_glsl[SLABS][0][0] = init_shader_program (SLABS, GLSL_SPHERES, vs_sls, NULL, fs_sls, GL_TRIANGLE_STRIP, 4, 1, TRUE, slab); } wingl -> cell_win -> slab_vol = (4.0*pi/3.0)*(pow(wingl -> cell_win -> cparam[14], 3)); vec3_t cat = vec3 (wingl -> cell_win -> cparam[6], wingl -> cell_win -> cparam[7], wingl -> cell_win -> cparam[8]); for (i=0; i nspec; i++) wingl -> cell_win -> slab_lot[i] = 0; wingl -> cell_win -> slab_atoms = 0; atom slab_center; distance at_slab; slab_center.x = cat.x; slab_center.y = cat.y; slab_center.z = cat.z; for (i=0; inatomes; i++) { at_slab = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[0][i], & slab_center); if (wingl -> cell_win -> slab_pbc || ! at_slab.pbc) { if (at_slab.length <= wingl -> cell_win -> cparam[14]) { wingl -> cell_win -> slab_atoms ++; j = proj_gl -> atoms[0][i].sp; wingl -> cell_win -> slab_lot[j] ++; if (wingl -> cell_win -> cut_this_slab) process_selected_atom (proj_gl, wingl, i, 0, 0, 0); } } } } /*! \fn void create_slab_lists (project * this_proj) \brief prepare slab(s) OpenGL rendering \param this_proj the target project */ void create_slab_lists (project * this_proj) { wingl = this_proj -> modelgl; proj_gl = this_proj; cell_gl = & proj_gl -> cell; plot = wingl -> anim -> last -> img; step = plot -> step; box_gl = (cell_gl -> npt) ? & cell_gl -> box[step] : & cell_gl -> box[0]; cleaning_shaders (wingl, SLABS); if (wingl -> cell_win && (wingl -> cell_win -> slab_show || wingl -> cell_win -> cut_this_slab)) { if (! wingl -> cell_win -> cut_this_slab) { wingl -> n_shaders[SLABS][0] = 1; if (wingl -> cell_win -> slab_type == 1) wingl -> n_shaders[SLABS][0] ++; wingl -> ogl_glsl[SLABS][0] = g_malloc0(wingl -> n_shaders[SLABS][0]*sizeof*wingl -> ogl_glsl[SLABS][0]); nbs = nbl = 0; } mat4_t rot = m4_rotation_xyz (wingl -> cell_win -> cparam[18], wingl -> cell_win -> cparam[19], wingl -> cell_win -> cparam[20]); switch (wingl -> cell_win -> slab_type) { case 0: cuboid_slab (rot); break; case 1: cylinder_slab (rot); break; case 2: spherical_slab (); break; } if (! wingl -> cell_win -> cut_this_slab) create_slab_info (proj_gl); } wingl -> create_shaders[SLABS] = FALSE; } /*! \fn void create_volumes_lists () \brief prepare volume(s) OpenGL rendering */ void create_volumes_lists () { cleaning_shaders (wingl, VOLMS); int i, j, k, l, m; wingl -> n_shaders[VOLMS][step] = 0; for (i=0; i show_vol[i]) wingl -> n_shaders[VOLMS][step] ++; if (wingl -> adv_bonding[0]) { for (i=0; i fm_show_vol[0][i]) { for (j=0; j coord -> totcoord[2]; j++) if (plot -> fm_show_vol[0][i][j]) wingl -> n_shaders[VOLMS][step] ++; } if (plot -> fm_show_vol[1][i]) { for (j=0; j coord -> totcoord[3]; j++) if (plot -> fm_show_vol[1][i][j]) wingl -> n_shaders[VOLMS][step] += proj_gl -> modelfc -> mols[step][j].multiplicity; } } } if (wingl -> n_shaders[VOLMS][step]) { wingl -> ogl_glsl[VOLMS][step] = g_malloc0(wingl -> n_shaders[VOLMS][step]*sizeof*wingl -> ogl_glsl[VOLMS][step]); mat4_t rot; vec3_t bx; double paral[3][3]; m = 0; if (wingl -> adv_bonding[1]) { for (i=0; i fm_show_vol[1][i]) { for (j=0; j coord -> totcoord[3]; j++) { if (plot -> fm_show_vol[1][i][j]) { for (k=0; k modelfc -> mols[step][j].multiplicity; k++) { l = proj_gl -> modelfc -> mols[step][j].fragments[k]; rot = m4_rotation_anti_xyz (wingl -> frag_box[i][step][l][3], wingl -> frag_box[i][step][l][4], wingl -> frag_box[i][step][l][5]); paral[0][0] = wingl -> frag_box[i][step][l][0]; paral[0][1] = 0.0; paral[0][2] = 0.0; paral[1][0] = 0.0; paral[1][1] = wingl -> frag_box[i][step][l][1]; paral[1][2] = 0.0; paral[2][0] = 0.0; paral[2][1] = 0.0; paral[2][2] = wingl -> frag_box[i][step][l][2]; bx = m4_mul_coord (rot, vec3(wingl -> frag_box[i][step][l][6], wingl -> frag_box[i][step][l][7], wingl -> frag_box[i][step][l][8])); draw_cuboid (TRUE, VOLMS, m, rot, bx, paral, plot -> fm_vol_col[1][i][j], plot -> fm_vol_col[1][i][j].alpha); m ++; } } } } } } if (wingl -> adv_bonding[0]) { for (i=0; i fm_show_vol[0][i]) { for (j=0; j coord -> totcoord[2]; j++) { if (plot -> fm_show_vol[0][i][j]) { rot = m4_rotation_anti_xyz (wingl -> frag_box[i][step][j][3], wingl -> frag_box[i][step][j][4], wingl -> frag_box[i][step][j][5]); paral[0][0] = wingl -> frag_box[i][step][j][0]; paral[0][1] = 0.0; paral[0][2] = 0.0; paral[1][0] = 0.0; paral[1][1] = wingl -> frag_box[i][step][j][1]; paral[1][2] = 0.0; paral[2][0] = 0.0; paral[2][1] = 0.0; paral[2][2] = wingl -> frag_box[i][step][j][2]; bx = m4_mul_coord (rot, vec3(wingl -> frag_box[i][step][j][6], wingl -> frag_box[i][step][j][7], wingl -> frag_box[i][step][j][8])); draw_cuboid (TRUE, VOLMS, m, rot, bx, paral, plot -> fm_vol_col[0][i][j], plot -> fm_vol_col[0][i][j].alpha); m ++; } } } } } for (i=0; i show_vol[i]) { rot = m4_rotation_anti_xyz (wingl -> volume_box[i][step][3], wingl -> volume_box[i][step][4], wingl -> volume_box[i][step][5]); paral[0][0] = wingl -> volume_box[i][step][0]; paral[0][1] = 0.0; paral[0][2] = 0.0; paral[1][0] = 0.0; paral[1][1] = wingl -> volume_box[i][step][1]; paral[1][2] = 0.0; paral[2][0] = 0.0; paral[2][1] = 0.0; paral[2][2] = wingl -> volume_box[i][step][2]; bx = m4_mul_coord (rot, vec3(wingl -> volume_box[i][step][6], wingl -> volume_box[i][step][7], wingl -> volume_box[i][step][8])); draw_cuboid (TRUE, VOLMS, m, rot, bx, paral, plot -> vol_col[i], plot -> vol_col[i].alpha); m ++; } } } wingl -> create_shaders[VOLMS] = FALSE; } atomes_1.3.1/src/opengl/draw/movie.c0000664000175000017500000013207215212624223017005 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file movie.c * @short Functions to encode a movie / render an image from the OpenGL rendering * @author Sébastien Le Roux */ /* * This file: 'movie.c' * * Contains: * - The functions to encode a movie / render an image from the OpenGL rendering * * List of functions: gboolean check_to_update_shaders (glwin * view, image * img_a, image * img_b, int ogl_q); gboolean create_movie (glwin * view, video_options * vopts, gchar * videofile); void convert_rgb_pixbuf_to_yuv (GdkPixbuf * pixbuf, AVFrame * picture, int w, int h); void fill_image (VideoStream * vs, int width, int height, glwin * view); void set_old_cmap (image * img, int stp, int id); void init_frame_buffer (int x, int y); void close_frame_buffer (); void save_movie (glwin * view, video_options * vopts); static void ffmpeg_encoder_set_frame_yuv_from_rgb (uint8_t * rgb, VideoStream * vs); static void write_video_frame (AVFormatContext * f_context, VideoStream * vs, int frame_id, glwin * view); static void close_stream (AVFormatContext * fc, VideoStream * vs); G_MODULE_EXPORT void run_save_movie (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_save_movie (GtkDialog * info, gint response_id, gpointer data); static GLubyte * capture_opengl_image (unsigned int width, unsigned int height); AVCodecContext * add_codec_context (AVFormatContext * fc, const AVCodec * vc, video_options * vopts); static AVFrame * alloc_video_frame (AVCodecContext * cc); VideoStream * add_video_stream (AVFormatContext * fc, const AVCodec * vc, video_options * vopts); */ #include "global.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "movie.h" #if LIBAVCODEC_VERSION_MAJOR < 56 # define PIXEL_FORMAT PIX_FMT_YUV420P #else # define PIXEL_FORMAT AV_PIX_FMT_YUV420P #endif #define AVS_FRAME_ALIGN 16 #define RGB_TO_Y(pixels, loc) (0.29900 * pixels[loc] + 0.58700 * pixels[loc+1] + 0.11400 * pixels[loc+2]) #define RGB_TO_U(pixels, loc)(-0.16874 * pixels[loc] - 0.33126 * pixels[loc+1] + 0.50000 * pixels[loc+2]+128.0) #define RGB_TO_V(pixels, loc) (0.50000 * pixels[loc] - 0.41869 * pixels[loc+1] - 0.08131 * pixels[loc+2]+128.0) #define AVIO_FLAG_READ 1 #define AVIO_FLAG_WRITE 2 #define AVIO_FLAG_READ_WRITE (AVIO_FLAG_READ|AVIO_FLAG_WRITE) #ifndef AV_ROUND_PASS_MINMAX #define AV_ROUND_PASS_MINMAX 8192 #endif #ifndef URL_WRONLY # define URL_WRONLY 1 #endif char * codec_name[VIDEO_CODECS] = {"MPEG-1/2", "MPEG-4", "H264", "Theora", "Flash"}; char * codec_list[VIDEO_CODECS] = {"mpeg", "avi", "mkv", "ogv", "flv"}; #if LIBAVCODEC_VERSION_MAJOR > 54 int codec_id[VIDEO_CODECS] = {AV_CODEC_ID_MPEG2VIDEO, AV_CODEC_ID_MPEG4, AV_CODEC_ID_H264, AV_CODEC_ID_THEORA, AV_CODEC_ID_FLV1}; #else int codec_id[VIDEO_CODECS] = {CODEC_ID_MPEG2VIDEO, CODEC_ID_MPEG4, CODEC_ID_H264, CODEC_ID_THEORA, CODEC_ID_FLV1}; #endif /*#else GdkGLDrawable * gldrawable; GdkGLContext * glcontext; GdkPixmap * pixmap; GdkGLPixmap * glpixmap; #endif*/ GdkPixbuf * pixbuf; uint8_t * video_outbuf; int video_outbuf_size; int num_frames; int frame_start; /*! \fn void convert_rgb_pixbuf_to_yuv (GdkPixbuf * pixbuf, AVFrame * picture, int w, int h) \brief convert an RGB pixbuf to an YUV picture frame \param pixbuf the Gdk RGB pixbuf to convert \param picture the AVFrame to store the data \param w image width \param h image height */ void convert_rgb_pixbuf_to_yuv (GdkPixbuf * pixbuf, AVFrame * picture, int w, int h) { gint x, y, location, location2; gint inner_x, inner_y, half_location; gfloat cr, cb; gint pixbuf_xsize, pixbuf_ysize; guchar * pixels; gint row_stride; gboolean x_odd, y_odd; pixbuf_xsize = gdk_pixbuf_get_width (pixbuf); pixbuf_ysize = gdk_pixbuf_get_height (pixbuf); pixels = gdk_pixbuf_get_pixels (pixbuf); row_stride = gdk_pixbuf_get_rowstride (pixbuf); y_odd = (pixbuf_ysize & 0x1); x_odd = (pixbuf_xsize & 0x1); /* note, the Cr and Cb info is subsampled by 2x2 */ for (y=0; y data[0][inner_x+inner_y*w] = RGB_TO_Y (pixels, location); cb += RGB_TO_U (pixels, location); cr += RGB_TO_V (pixels, location); } half_location = x/2 + y*w/4; picture -> data[1][half_location] = cb/4.0; picture -> data[2][half_location] = cr/4.0; } if (x_odd) { location = y*row_stride+3*x; location2 = (y+1)*row_stride+3*x; picture -> data[0][x+y*w] = RGB_TO_Y (pixels, location); picture -> data[0][x+1+y*w] = 0; picture -> data[0][x+(y+1)*w] = RGB_TO_Y (pixels, location2); picture -> data[0][x+1+(y+1)*w] = 0; half_location = x/2 + y*w/4; picture -> data[1][half_location] = (RGB_TO_U(pixels, location) + RGB_TO_U(pixels, location2)+256)/4.0; picture -> data[2][half_location] = (RGB_TO_V(pixels, location) + RGB_TO_V(pixels, location2)+256)/4.0; } } if (y_odd) { for (x=0; x data[0][x+y*w] = RGB_TO_Y(pixels, location); picture -> data[0][x+1+y*w] = RGB_TO_Y(pixels, location2); picture -> data[0][x+(y+1)*w] = 0; picture -> data[0][x+1+(y+1)*w] = 0; half_location = x/2 + y*w/4; picture -> data[1][half_location] = (RGB_TO_U(pixels, location)+RGB_TO_U(pixels, location2)+256)/4.0; picture -> data[2][half_location] = (RGB_TO_V(pixels, location)+RGB_TO_V(pixels, location2)+256)/4.0; } if (x_odd) { location = y*row_stride+3*x; picture -> data[0][x+y*w] = RGB_TO_Y(pixels, location); picture -> data[0][x+1+y*w] = 0; picture -> data[0][x+(y+1)*w] = 0; picture -> data[0][x+1+(y+1)*w] = 0; half_location = x/2 + y*w/4; picture -> data[1][half_location] = (RGB_TO_U(pixels, location)+384)/4.0; picture -> data[2][half_location] = (RGB_TO_V(pixels, location)+384)/4.0; } } } /*! \fn static void ffmpeg_encoder_set_frame_yuv_from_rgb (uint8_t * rgb, VideoStream * vs) \brief set an encoder YUV frame from an RGB image \param rgb the RGB data to convert \param vs the video stream to encode the data */ static void ffmpeg_encoder_set_frame_yuv_from_rgb (uint8_t * rgb, VideoStream * vs) { const int in_linesize = 4 * vs -> cc -> width; vs -> sws_ctx = sws_getCachedContext (vs -> sws_ctx, vs -> cc -> width, vs -> cc -> height, AV_PIX_FMT_BGRA, vs -> cc -> width, vs -> cc -> height, PIXEL_FORMAT, 0, NULL, NULL, NULL); sws_scale (vs -> sws_ctx, (const uint8_t * const *)&rgb, & in_linesize, 0, vs -> cc -> height, vs -> frame -> data, vs -> frame -> linesize); } /*! \fn static GLubyte * capture_opengl_image (unsigned int width, unsigned int height) \brief capture an OpenGL image from an OpenGL rendering */ static GLubyte * capture_opengl_image (unsigned int width, unsigned int height) { size_t i, nvals; nvals = width * height * 4; GLubyte * pixels = g_malloc0(nvals * sizeof(GLubyte)); GLubyte * rgb = g_malloc0(nvals * sizeof(GLubyte)); // On macOS, OpenGL runs over Metal with asynchronous command submission. // glFinish() ensures all GPU rendering commands from draw() have completed // before we read the framebuffer, preventing partial image captures. // This is harmless on Linux and Windows where the driver synchronizes implicitly. glFinish (); glReadPixels (0, 0, width, height, GL_BGRA, GL_UNSIGNED_BYTE, pixels); // Flip data vertically for (i = 0; i < height; i++) { memcpy (rgb + 4 * width * i, pixels + 4 * width * (height - i - 1), 4 * width); } g_free (pixels); return rgb; } //#endif /*! \fn void fill_image (VideoStream * vs, int width, int height, glwin * view) \brief render an image from an OpenGL rendering \param vs the video stream \param width image width \param height image height \param view the target glwin */ void fill_image (VideoStream * vs, int width, int height, glwin * view) { // opengl call is here !!! reshape (view, width, height, FALSE); draw (view); // Might need some correction(s) here for HiDPI screens GLubyte * image = capture_opengl_image (width, height); if (vs != NULL) { //if (movie) convert_rgb_pixbuf_to_yuv (pixbuf, frame, width, height); ffmpeg_encoder_set_frame_yuv_from_rgb (image, vs); } else { cairo_surface_t * surf = cairo_image_surface_create_for_data ((guchar *)image, CAIRO_FORMAT_ARGB32, width, height, cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, width)); pixbuf = convert_to_pixbuf (surf); cairo_surface_destroy (surf); } g_free (image); } /*! \fn static void write_video_frame (AVFormatContext * f_context, VideoStream * vs, int frame_id, glwin * view) \brief write a video frame from an OpenGL render \param f_context the format context to use \param vs the video stream \param frame_id the frame id number \param view the target glwin */ static void write_video_frame (AVFormatContext * f_context, VideoStream * vs, int frame_id, glwin * view) { int out_size = 0; fill_image (vs, vs -> cc -> width, vs -> cc -> height, view); AVPacket packet; #if LIBAVCODEC_VERSION_MAJOR > 57 out_size = av_new_packet (& packet, 0); if (out_size != 0) { // "Error while encoding video frame" g_warning (_("Error in movie encoding : video frame - error : %s"), av_err2str(out_size)); } // get_packet_defaults (& packet); #else av_init_packet (& packet); #endif if (! out_size) { packet.dts = packet.pts = AV_NOPTS_VALUE; packet.data = NULL; packet.size = 0; vs -> frame -> pts = frame_id + 1; out_size = avcodec_send_frame (vs -> cc, vs -> frame); if (out_size < 0) { // "Error while encoding video frame" g_warning (_("Error in movie encoding : video frame - error : %s"), av_err2str (out_size)); } else { if (avcodec_receive_packet (vs -> cc, & packet) < 0) { // "Error while encoding video frame" if (frame_id + 1 > frame_start) g_warning (_("Error in movie encoding : video frame - warning : packet empty, ignoring frame= %d"), frame_id); } else { av_packet_rescale_ts (& packet, vs -> cc -> time_base, vs -> st -> time_base); packet.stream_index = vs -> st -> index; packet.flags |= AV_PKT_FLAG_KEY; out_size = av_interleaved_write_frame (f_context, & packet); if (out_size != 0) { // "Error while encoding video frame" g_warning (_("Error in movie encoding : video frame - error : %s"), av_err2str(out_size)); } av_packet_unref(& packet); } } } } /*! \fn static AVFrame * alloc_video_frame (AVCodecContext * cc) \brief allocate a video frame using a codec context \param cc the codec context */ static AVFrame * alloc_video_frame (AVCodecContext * cc) { AVFrame * frame; frame = av_frame_alloc (); if (! frame) { return NULL; } frame -> format = cc -> pix_fmt; frame -> width = cc -> width; frame -> height = cc -> height; if (av_frame_get_buffer (frame, 32) < 0) { return NULL; } return frame; } /*! \fn AVCodecContext * add_codec_context (AVFormatContext * fc, const AVCodec * vc, video_options * vopts) \brief create a video codec context \param fc the format context \param vc the codec \param vopts the video encoding options */ AVCodecContext * add_codec_context (AVFormatContext * fc, const AVCodec * vc, video_options * vopts) { AVCodecContext * cc; if (! (vc = avcodec_find_encoder (codec_id[vopts -> codec]))) { // Codec not found g_warning (_("Error in movie encoding : impossible to find codec %s"), codec_name[vopts -> codec]); return NULL; } if (! (cc = avcodec_alloc_context3(vc))) { g_warning (_("Error in movie encoding : impossible to allocate encoding context")); return NULL; } //g_debug ("Codec_id= %d", cc -> codec_id); cc -> codec_id = codec_id[vopts -> codec]; //g_debug ("Codec_id= %d", cc -> codec_id); /* put sample parameters */ cc -> bit_rate_tolerance = vopts -> bitrate*1000; cc -> bit_rate = vopts -> bitrate*1000; /* resolution must be a multiple of two */ cc -> width = vopts -> video_res[0]; cc -> height = vopts -> video_res[1]; cc -> time_base = (AVRational){1, vopts -> framesec}; cc -> framerate = (AVRational){vopts -> framesec, 1}; if (vopts -> codec != 1 && vopts -> codec != 4) cc -> max_b_frames = 1; cc -> gop_size = vopts -> extraframes; /* emit one intra frame every n frames */ cc -> pix_fmt = PIXEL_FORMAT; if (vopts -> codec == 2) av_opt_set (cc -> priv_data, "preset", "slow", 0); /* Some container formats (like MP4) require global headers to be present Mark the encoder so that it behaves accordingly. */ #if LIBAVCODEC_VERSION_MAJOR > 57 if (fc -> oformat -> flags & AVFMT_GLOBALHEADER) cc -> flags |= AV_CODEC_FLAG_GLOBAL_HEADER; #else if (fc -> oformat -> flags & AVFMT_GLOBALHEADER) cc -> flags |= CODEC_FLAG_GLOBAL_HEADER; #endif return cc; } /*! \fn VideoStream * add_video_stream (AVFormatContext * fc, const AVCodec * vc, video_options * vopts) \brief create video stream and the associated data buffers \param fc the format context \param vc the codec \param vopts the video encoding options */ VideoStream * add_video_stream (AVFormatContext * fc, const AVCodec * vc, video_options * vopts) { VideoStream * stream = g_malloc0(sizeof*stream); stream -> cc = add_codec_context (fc, vc, vopts); if (stream -> cc == NULL) return NULL; #if LIBAVCODEC_VERSION_MAJOR > 53 stream -> st = avformat_new_stream (fc, vc); #else st = av_new_stream (fc, vc); #endif if (! stream -> st) { g_warning (_("Error in movie encoding : impossible to allocate video stream")); return NULL; } stream -> st -> time_base = stream -> cc -> time_base; stream -> frame = alloc_video_frame (stream -> cc); if (stream -> frame == NULL) { g_warning (_("Error in movie encoding : impossible to allocate raw frame buffer")); return NULL; } return stream; } /*! \fn static void close_stream (AVFormatContext * fc, VideoStream * vs) \brief close the video stream and free associated data buffers \param fc the format context to free \param vs the video stream to close */ static void close_stream (AVFormatContext * fc, VideoStream * vs) { avcodec_free_context (& vs -> cc); av_frame_free (& vs -> frame); sws_freeContext (vs -> sws_ctx); avformat_free_context (fc); } int * old_cmap[2]; /*! \fn void set_old_cmap (image * img, int stp, int id) \brief preserve color map information \param img the target image \param stp MD step \param id color map id (0 = atom(s), 1 = polyhedra) */ void set_old_cmap (image * img, int stp, int id) { old_cmap[id][stp] = img -> color_map[id]; } /*! \fn gboolean check_to_update_shaders (glwin * view, image * img_a, image * img_b, int ogl_q) \brief test if it is required to update the OpenGL shaders, and which one(s) \param view the target glwin \param img_a the previous image \param img_b the next image \param ogl_q OpenGL quality */ gboolean check_to_update_shaders (glwin * view, image * img_a, image * img_b, int ogl_q) { gboolean shaders = FALSE; int i, j, k; int stp = img_b -> step; if ((img_a -> ray_tracing != img_b -> ray_tracing) || (ogl_q == 0 && img_a -> quality != img_b -> quality)) { view -> create_shaders[MDBOX] = TRUE; view -> create_shaders[MAXIS] = TRUE; view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[POLYS][stp] = -1; view -> create_shaders[POLYS] = TRUE; view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; view -> n_shaders[VOLMS][stp] = -1; view -> create_shaders[VOLMS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; for (i=0; i<2; i++) set_old_cmap (img_b, stp, i); return TRUE; } for (i=0; i<3; i++) { if (img_a -> abc -> extra_cell[i] != img_b -> abc -> extra_cell[i]) { view -> create_shaders[MDBOX] = TRUE; view -> create_shaders[MAXIS] = TRUE; view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[POLYS][stp] = -1; view -> create_shaders[POLYS] = TRUE; view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; view -> n_shaders[VOLMS][stp] = -1; view -> create_shaders[VOLMS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; for (i=0; i<2; i++) set_old_cmap (img_b, stp, i); return TRUE; } } project * tmp_proj = get_project_by_id(view -> proj); coord_info * this_coord = tmp_proj -> coord; for (i=0; i<9; i++) { for (j=0; j totcoord[i]; j++) { if (img_a -> show_coord[i][j] != img_b -> show_coord[i][j]) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; } } if (i < 2) { for (j=0; j totcoord[i]; j++) { if (img_a -> show_poly[i][j] != img_b -> show_poly[i][j]) { view -> n_shaders[POLYS][stp] = -1; view -> create_shaders[POLYS] = TRUE; } } } else if (i > 3) { for (j=0; j totcoord[i]; j++) { if (img_a -> show_poly[i][j] != img_b -> show_poly[i][j]) { view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; } } } } for (j=0; j totcoord[9]; j++) { if (img_a -> show_coord[9][j] != img_b -> show_coord[9][j]) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; } } if (img_a -> draw_clones != img_b -> draw_clones) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[POLYS][stp] = -1; view -> create_shaders[POLYS] = TRUE; view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; shaders = TRUE; } if (img_a -> color_map[0] != img_b -> color_map[0] || img_b -> color_map[0] != old_cmap[0][stp]) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> create_shaders[LABEL] = TRUE; set_old_cmap (img_b, stp, 0); shaders = TRUE; } if (img_a -> color_map[1] != img_b -> color_map[1] || img_b -> color_map[1] != old_cmap[1][stp]) { view -> n_shaders[POLYS][stp] = -1; view -> create_shaders[POLYS] = TRUE; set_old_cmap (img_b, stp, 1); shaders = TRUE; } if (img_a -> step != img_b -> step) { if (view -> n_shaders[ATOMS][stp] < 0) view -> create_shaders[ATOMS] = TRUE; if (view -> n_shaders[BONDS][stp] < 0) view -> create_shaders[BONDS] = TRUE; if (view -> n_shaders[POLYS][stp] < 0) view -> create_shaders[POLYS] = TRUE; if (view -> n_shaders[RINGS][stp] < 0) view -> create_shaders[RINGS] = TRUE; if (view -> n_shaders[VOLMS][stp] < 0) view -> create_shaders[VOLMS] = TRUE; if (view -> n_shaders[SELEC][stp] < 0) view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; shaders = TRUE; } gboolean do_volms = FALSE; for (i=0; i show_vol[i] != img_b -> show_vol[i]) do_volms = TRUE; if (img_a -> vol_col[i].red != img_b -> vol_col[i].red) do_volms = TRUE; if (img_a -> vol_col[i].green != img_b -> vol_col[i].green) do_volms = TRUE; if (img_a -> vol_col[i].blue != img_b -> vol_col[i].blue) do_volms = TRUE; for (j=0; j<2; j++) { if (img_a -> fm_show_vol[j][i] == NULL && img_b -> fm_show_vol[j][i] != NULL) { do_volms = TRUE; } else if (img_a -> fm_show_vol[j][i] != NULL && img_b -> fm_show_vol[j][i] == NULL) { do_volms = TRUE; } else if (img_a -> fm_show_vol[j][i] != NULL && img_b -> fm_show_vol[j][i] != NULL) { for (k=0; k totcoord[j+2]; k++) { if (img_a -> fm_show_vol[j][i][k] != img_b -> fm_show_vol[j][i][k]) do_volms = TRUE; if (img_a -> fm_vol_col[j][i][k].red != img_b -> fm_vol_col[j][i][k].red) do_volms = TRUE; if (img_a -> fm_vol_col[j][i][k].green != img_b -> fm_vol_col[j][i][k].green) do_volms = TRUE; if (img_a -> fm_vol_col[j][i][k].blue != img_b -> fm_vol_col[j][i][k].blue) do_volms = TRUE; } } } } if (do_volms) { view -> create_shaders[VOLMS] = shaders = TRUE; view -> n_shaders[VOLMS][stp] = -1; } if (img_a -> abc -> box != img_b -> abc -> box) view -> create_shaders[MDBOX] = shaders = TRUE; if (img_a -> abc -> rad != img_b -> abc -> rad) view -> create_shaders[MDBOX] = shaders = TRUE; if (img_a -> abc -> line != img_b -> abc -> line) view -> create_shaders[MDBOX] = shaders = TRUE; if (img_a -> abc -> color.red != img_b -> abc -> color.red) view -> create_shaders[MDBOX] = shaders = TRUE; if (img_a -> abc -> color.green != img_b -> abc -> color.green) view -> create_shaders[MDBOX] = shaders = TRUE; if (img_a -> abc -> color.blue != img_b -> abc -> color.blue) view -> create_shaders[MDBOX] = shaders = TRUE; if (img_a -> xyz -> axis != img_b -> xyz -> axis) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> xyz -> rad != img_b -> xyz -> rad) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> xyz -> line != img_b -> xyz -> line) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> xyz -> length != img_b -> xyz -> length) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> xyz -> t_pos != img_b -> xyz -> t_pos) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> xyz -> color == NULL && img_b -> xyz -> color != NULL) { view -> create_shaders[MAXIS] = shaders = TRUE; } else if (img_a -> xyz -> color != NULL && img_b -> xyz -> color == NULL) { view -> create_shaders[MAXIS] = shaders = TRUE; } else if (img_a -> xyz -> color != NULL && img_b -> xyz -> color != NULL) { for (i=0; i<3; i++) { if (img_a -> xyz -> color[i].red != img_b -> xyz -> color[i].red) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> xyz -> color[i].green != img_b -> xyz -> color[i].green) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> xyz -> color[i].blue != img_b -> xyz -> color[i].blue) view -> create_shaders[MAXIS] = shaders = TRUE; } } if (img_a -> xyz -> labels != img_b -> xyz -> labels) view -> create_shaders[MAXIS] = shaders = TRUE; for (i=0; i<3; i++) { if (g_strcmp0 (img_a -> xyz -> title[i], img_b -> xyz -> title[i]) != 0) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> xyz -> c_pos[i] != img_b -> xyz -> c_pos[i]) view -> create_shaders[MAXIS] = shaders = TRUE; } if (g_strcmp0 (img_a -> labels[2].font, img_b -> labels[2].font) != 0) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> labels[2].position != img_b -> labels[2].position) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> labels[2].scale != img_b -> labels[2].scale) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> labels[2].render != img_b -> labels[2].render) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> labels[2].color == NULL && img_b -> labels[2].color != NULL) { view -> create_shaders[MAXIS] = shaders = TRUE; } else if (img_a -> labels[2].color != NULL && img_b -> labels[2].color == NULL) { view -> create_shaders[MAXIS] = shaders = TRUE; } else if (img_a -> labels[2].color != NULL && img_b -> labels[2].color != NULL) { for (i=0; i<3; i++) { if (img_a -> labels[2].color[i].red != img_b -> labels[2].color[i].red) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> labels[2].color[i].green != img_b -> labels[2].color[i].green) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> labels[2].color[i].blue != img_b -> labels[2].color[i].blue) view -> create_shaders[MAXIS] = shaders = TRUE; } } if (img_a -> cloned_poly != img_b -> cloned_poly) { view -> n_shaders[POLYS][stp] = -1; view -> create_shaders[POLYS] = TRUE; view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; shaders = TRUE; } gboolean dorings = FALSE; for (i=0; i<5; i++) { if (view -> ring_max[i]) { if (img_a -> i_rings[i] && img_b -> i_rings[i]) { if (img_a -> i_rings[i][0][0] != img_b -> i_rings[i][0][0]) { view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; dorings = shaders = TRUE; break; } else { for (j=0; j i_rings[i][0][0]; j++) { if ((img_a -> i_rings[i][j+1][0] != img_b -> i_rings[i][j+1][0]) || (img_a -> i_rings[i][j+1][1] != img_b -> i_rings[i][j+1][1])) { view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; dorings = shaders = TRUE; break; } } } } else if (img_b -> i_rings[i]) { dorings = TRUE; } if (dorings) break; } } for (i=0; i<2; i++) { for (j=0; j nspec; j++) { if (img_a -> show_label[i][j] != img_b -> show_label[i][j]) { view -> create_shaders[LABEL] = shaders = TRUE; } if (img_a -> show_atom[i][j] != img_b -> show_atom[i][j]) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; shaders = TRUE; break; } } for (j=0; j natomes; j++) { if (img_a -> at_data[j].show[i] != img_b -> at_data[j].show[i] || img_a -> at_data[j].style != img_b -> at_data[j].style) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; shaders = TRUE; break; } if (img_a -> at_data[j].label[i] != img_b -> at_data[j].label[i]) { view -> create_shaders[LABEL] = shaders = TRUE; } if (img_a -> at_data[j].pick[0] != img_b -> at_data[j].pick[0]) { view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = shaders = TRUE; } if (img_a -> at_data[j].pick[1] != img_b -> at_data[j].pick[1]) { view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = shaders = TRUE; } } } for (i=0; i<2*tmp_proj -> nspec; i++) { if ((img_a -> sphererad[i] != img_b -> sphererad[i]) || (img_a -> pointrad[i] != img_b -> pointrad[i]) || (img_a -> atomicrad[i] != img_b -> atomicrad[i])) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; shaders = TRUE; } for (j=0; j<2*tmp_proj -> nspec; j++) { if ((img_a -> bondrad[i][j] != img_b -> bondrad[i][j]) || (img_a -> linerad[i][j] != img_b -> linerad[i][j])) { view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; shaders = TRUE; } } } for (i=0; i<2; i++) { if (img_a -> acl_format[i] != img_b -> acl_format[i]) view -> create_shaders[LABEL] = shaders = TRUE; if (g_strcmp0 (img_a -> labels[i].font, img_b -> labels[i].font) != 0) view -> create_shaders[LABEL] = shaders = TRUE; if (img_a -> labels[i].position != img_b -> labels[i].position) view -> create_shaders[LABEL] = shaders = TRUE; if (img_a -> labels[i].scale != img_b -> labels[i].scale) view -> create_shaders[LABEL] = shaders = TRUE; if (img_a -> labels[i].render != img_b -> labels[i].render) view -> create_shaders[LABEL] = shaders = TRUE; for (j=0; j<3; j++) { if (img_a -> labels[i].shift[j] != img_b -> labels[i].shift[j]) view -> create_shaders[LABEL] = shaders = TRUE; } if (img_a -> labels[i].color == NULL && img_b -> labels[i].color != NULL) { view -> create_shaders[LABEL] = shaders = TRUE; } else if (img_a -> labels[i].color != NULL && img_b -> labels[i].color == NULL) { view -> create_shaders[LABEL] = shaders = TRUE; } else if (img_a -> labels[i].color != NULL && img_b -> labels[i].color != NULL) { for (j=0; j nspec; j++) { if (img_a -> labels[i].color[j].red != img_b -> labels[i].color[j].red) view -> create_shaders[LABEL] = shaders = TRUE; if (img_a -> labels[i].color[j].green != img_b -> labels[i].color[j].green) view -> create_shaders[LABEL] = shaders = TRUE; if (img_a -> labels[i].color[j].blue != img_b -> labels[i].color[j].blue) view -> create_shaders[LABEL] = shaders = TRUE; } } if (img_a -> radall[i] != img_b -> radall[i]) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; shaders = TRUE; } } if (img_a -> render != img_b -> render) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; shaders = TRUE; } if (img_a -> style != img_b -> style) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; shaders = TRUE; } if (img_a -> m_is_pressed != img_b -> m_is_pressed) view -> create_shaders[MEASU] = shaders = TRUE; for (i=0; i<2; i++) { if (img_a -> mtilt[i] != img_b -> mtilt[i]) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> mpattern[i] != img_b -> mpattern[i]) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> mfactor[i] != img_b -> mfactor[i]) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> mwidth[i] != img_b -> mwidth[i]) view -> create_shaders[MEASU] = shaders = TRUE; if (g_strcmp0 (img_a -> labels[3+i].font, img_b -> labels[3+i].font) != 0) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> labels[3+i].position != img_b -> labels[3+i].position) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> labels[3+i].scale != img_b -> labels[3+i].scale) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> labels[3+i].render != img_b -> labels[3+i].render) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> labels[3+i].color[0].red != img_b -> labels[3+i].color[0].red) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> labels[3+i].color[0].green != img_b -> labels[3+i].color[0].green) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> labels[3+i].color[0].blue != img_b -> labels[3+i].color[0].blue) view -> create_shaders[MEASU] = shaders = TRUE; for (j=0; j<3; j++) { if (img_a -> labels[3+i].shift[j] != img_b -> labels[3+i].shift[j]) view -> create_shaders[MEASU] = shaders = TRUE; } } return shaders; } extern GtkWidget * encoding_pb; /* typedef struct{ int framesec; // frame(s) per second int extraframes; // extra frame(s) per second int codec; // video codec int oglquality; // OpenGL quality int bitrate; // bitrate int video_res[2]; // video resolution (x, y) } video_options; */ /*! \fn gboolean create_movie (glwin * view, video_options * vopts, gchar * videofile) \brief render a movie from the saved animation parameters \param view the target glwin \param vopts the video encoding options \param videofile video file name */ gboolean create_movie (glwin * view, video_options * vopts, gchar * videofile) { int q; const AVOutputFormat * output_format = NULL; AVFormatContext * format_context = NULL; VideoStream * video_stream = NULL; const AVCodec * video_codec = NULL; int error; #ifdef DEBUG g_debug ("VIDEO ENCODING:: frames per seconds:: %d", vopts -> framesec); g_debug ("VIDEO ENCODING:: extra frames every:: %d frame(s)", vopts -> extraframes); g_debug ("VIDEO ENCODING:: bitrate:: %d", vopts -> bitrate); g_debug ("VIDEO ENCODING:: video_x = %d , video_y = %d", vopts -> video_res[0], vopts -> video_res[1]); g_debug ("VIDEO ENCODING:: codec:: %d, name= %s, ext= %s", vopts -> codec, codec_name[vopts -> codec], codec_list[vopts -> codec]); #endif // DEBUG num_frames = view -> anim -> frames; #if LIBAVCODEC_VERSION_MAJOR < 57 av_register_all (); avcodec_register_all (); #endif if (! (format_context = avformat_alloc_context())) { g_warning (_("Error in movie encoding : impossible to allocate AV format context")); return FALSE; } // Guess the desired container format based on file extension if (! (format_context -> oformat = av_guess_format (NULL, videofile, NULL))) { g_warning (_("Error in movie encoding : impossible to guess container format : change file name")); return FALSE; } output_format = format_context -> oformat; video_stream = add_video_stream (format_context, video_codec, vopts); if (video_stream == NULL) { g_warning (_("Error in movie encoding : impossible to create video stream")); return FALSE; } /* open the codec */ if ((error = avcodec_open2 (video_stream -> cc, video_codec, NULL)) < 0) { // Can not open codec g_warning (_("Error in movie encoding : impossible to open codec, error= %s"), av_err2str(error)); return FALSE; } avcodec_parameters_from_context (video_stream -> st -> codecpar, video_stream -> cc); #if LIBAVCODEC_VERSION_MAJOR > 52 av_dump_format (format_context, 0, videofile, 1); #else dump_format (av_format_context, 0, videofile, 1); #endif #if LIBAVCODEC_VERSION_MAJOR > 52 if (avio_open (& format_context -> pb, videofile, AVIO_FLAG_WRITE) < 0) #else if (url_fopen (& av_format_context -> pb, videofile, URL_WRONLY) < 0) #endif { // error impossible to open output file g_warning (_("Error in movie encoding : impossible to open video file '%s'"), videofile); return FALSE; } #if LIBAVCODEC_VERSION_MAJOR > 52 if (avformat_write_header (format_context, NULL) < 0) #else if (av_set_parameters (av_format_context, NULL) < 0) #endif { g_warning (_("Error in movie encoding : impossible to write the AV format header")); return FALSE; } view -> anim -> last = view -> anim -> first; if (vopts -> oglquality != 0) { q = view -> anim -> last -> img -> quality; view -> anim -> last -> img -> quality = vopts -> oglquality; } int frame_id; frame_start = 0; if (vopts -> codec == 0) { frame_start = 1; write_video_frame (format_context, video_stream, 0, view); } else if (vopts -> codec == 2) { frame_start = 24; for (frame_id = 0; frame_id < frame_start; frame_id ++) { write_video_frame (format_context, video_stream, frame_id, view); } } re_create_all_md_shaders (view); recreate_all_shaders (view); for (frame_id=0; frame_id<2; frame_id++) { old_cmap[frame_id] = allocint (get_project_by_id(view -> proj) -> steps); set_old_cmap (view -> anim -> last -> img, 0, frame_id); } double fraction; #ifdef GTK4 // GMainContext * context = g_main_loop_get_context (Event_loop[dialog_id]); #endif // GTK4 for (frame_id = frame_start; frame_id < num_frames+frame_start; frame_id ++) { //g_debug ("Rendering frame: %d, id= %d", frame_id-frame_start, view -> anim -> last -> img -> id); if (vopts -> oglquality != 0) { view -> anim -> last -> img -> quality = vopts -> oglquality; } write_video_frame (format_context, video_stream, frame_id, view); if (frame_id-frame_start > 0 && frame_id-frame_start - 10*((frame_id-frame_start)/10) == 0) { fraction = (double)(frame_id-frame_start+1)/num_frames; gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(encoding_pb), fraction); #ifdef GTK3 while (gtk_events_pending()) gtk_main_iteration(); #else // while (g_main_context_pending (context)) g_main_context_iteration (context, TRUE); #endif } if (frame_id-frame_start < num_frames-1) { check_to_update_shaders (view, view -> anim -> last -> img, view -> anim -> last -> next -> img, vopts -> oglquality); view -> anim -> last = view -> anim -> last -> next; } } if (vopts -> oglquality != 0) { view -> anim -> last -> img -> quality = q; } av_write_trailer (format_context); if (!(output_format -> flags & AVFMT_NOFILE)) { /* close the output file */ #if LIBAVCODEC_VERSION_MAJOR > 52 avio_closep (& format_context -> pb); #else url_fclose (av_format_context -> pb); #endif } close_stream (format_context, video_stream); return TRUE; } static GLuint fbo; static GLuint rbo_color; static GLuint rbo_depth; /*! \fn void init_frame_buffer (int x, int y) \brief init a frame buffer \param x x size - image width \param y y size - image height */ void init_frame_buffer (int x, int y) { glGenFramebuffers (1, & fbo); glBindFramebuffer (GL_FRAMEBUFFER, fbo); /* Color renderbuffer. */ glGenRenderbuffers (1, & rbo_color); glBindRenderbuffer (GL_RENDERBUFFER, rbo_color); /* Storage */ // glRenderbufferStorage (GL_RENDERBUFFER, GL_RGB32F, x, y); // glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA4, x, y); glRenderbufferStorage (GL_RENDERBUFFER, GL_RGB, x, y); glFramebufferRenderbuffer (GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rbo_color); /* Depth renderbuffer. */ glGenRenderbuffers (1, & rbo_depth); glBindRenderbuffer (GL_RENDERBUFFER, rbo_depth); glRenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH_COMPONENT, x, y); glFramebufferRenderbuffer (GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rbo_depth); glReadBuffer (GL_COLOR_ATTACHMENT0); } /*! \fn void close_frame_buffer () \brief close the frame buffer */ void close_frame_buffer () { glDeleteFramebuffers (1, &fbo); glDeleteRenderbuffers (1, &rbo_color); glDeleteRenderbuffers (1, &rbo_depth); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_save_movie (GtkNativeDialog * info, gint response_id, gpointer data) \brief saving a movie - running the dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_save_movie (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_save_movie (GtkDialog * info, gint response_id, gpointer data) \brief saving a movie - running the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_save_movie (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { gchar * videofile = file_chooser_get_file_name (chooser); #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif video_options * vopts = (video_options *)data; glwin * view = get_project_by_id (vopts -> proj) -> modelgl; int x = view -> pixels[0]; int y = view -> pixels[1]; int i; for (i=0; i<2; i++) tmp_pixels[i] = view -> pixels[i]; view -> pixels[0] = vopts -> video_res[0]; view -> pixels[1] = vopts -> video_res[1]; // On macOS, the CoreAnimation layer may invalidate the current GL context // between the file dialog callback and our OpenGL calls. gtk_gl_area_make_current ((GtkGLArea *)view -> plot); init_frame_buffer (vopts -> video_res[0], vopts -> video_res[1]); init_opengl (); re_create_all_md_shaders (view); recreate_all_shaders (view); in_movie_encoding = TRUE; gboolean res = create_movie (view, vopts, videofile); if (! res) { show_warning (_("An error occurred when encoding movie\nyou might want to try again\nsorry for the trouble"), view -> win); } close_frame_buffer (); in_movie_encoding = FALSE; re_create_all_md_shaders (view); recreate_all_shaders (view); reshape (view, x, y, TRUE); update (view); } else { #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } } /*! \fn void save_movie (glwin * view, video_options * vopts) \brief saving a movie - prepare the dialog \param view the target glwin \param vopts the video encoding options */ void save_movie (glwin * view, video_options * vopts) { GtkFileFilter * filter; gchar * str; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif info = create_file_chooser (_("Render Movie"), GTK_WINDOW(view -> win), GTK_FILE_CHOOSER_ACTION_SAVE, _("Save")); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif file_chooser_set_current_folder (chooser); str = g_strdup_printf ("%s.%s", prepare_for_title(get_project_by_id(view -> proj) -> name), codec_list[vopts -> codec]); gtk_file_chooser_set_current_name (chooser, str); g_free (str); filter = gtk_file_filter_new (); str = g_strdup_printf (_("%s file (*.%s)"), codec_name[vopts -> codec], codec_list[vopts -> codec]); gtk_file_filter_set_name (GTK_FILE_FILTER(filter), str); g_free (str); str = g_strdup_printf ("*.%s", codec_list[vopts -> codec]); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), str); g_free (str); gtk_file_chooser_add_filter (chooser, filter); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_save_movie), vopts); #else run_this_gtk_dialog (info, G_CALLBACK(run_save_movie), vopts); #endif } atomes_1.3.1/src/opengl/draw/d_measures.c0000664000175000017500000005646115212624223020024 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_measures.c * @short Functions to prepare the OpenGL rendering of the measure(s) * @author Sébastien Le Roux */ /* * This file: 'd_measures.c' * * Contains: * - The functions to prepare the OpenGL rendering of the measure(s) * * List of functions: int prepare_measure_shaders (int type, int shaders); void draw_angle_label (atom * at, atom * bt, atom * ct, int pi); void set_measure_color (int selected, int id, int num); void setup_this_measured_angle (int s, int sa, int sb, int sc, int pi); void angles_loop (glwin * view, int id, int pi, GtkTreeStore * store); void dihedrals_loop (glwin * view, int id, int pi, GtkTreeStore * store); void draw_bond_label (atom * at, atom * bt, int pi); void setup_this_measured_bond (int s, int sa, int sb, int pi); void bonds_loop (glwin * view, int id, int pi, GtkTreeStore * store); void create_measures_lists (); */ #include "global.h" #include "glview.h" extern void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha); extern void unrotate_camera (); extern double arc_cos (double val); extern ColRGBA init_color (int id, int numid); extern void fill_bond_model_row (int p, int a, int b, GtkTreeStore * store); extern void fill_angle_model_row (int p, int a, int b, int c, GtkTreeStore * store); extern void fill_dihedral_model_row (int p, int a, int b, int c, int d, GtkTreeStore * store); extern int num_bonds (int i); extern int num_angles (int i); extern int num_dihedrals (int i); extern void clean_labels (int id); extern int objects[3]; extern int * object_was_selected[3]; extern int ** tmp_object_id[3]; int type_of_measure; int measures_drawing; atom_in_selection * tmp_a, * tmp_b, * tmp_c, * tmp_d; atom * ta, * tb, * tc, * td, * te, * tf; distance dist_ba, dist_bc; int * shift; double dist; object_3d * measure; ColRGBA col; ColRGBA col_gdk; /*! \fn void draw_angle_label (atom * at, atom * bt, atom * ct, int pi) \brief prepare an measured angle label OpenGL rendering \param at 1st atom \param bt 2nd atom \param ct 3rd atom \param pi 0 = mouse analysis mode, 1 = mouse edition mode */ void draw_angle_label (atom * at, atom * bt, atom * ct, int pi) { angle real_theta = angle_3d (cell_gl, (cell_gl -> npt) ? step : 0, at, bt, ct); gchar * str; if (real_theta.pbc) { str = g_strdup_printf("%.1lf° (%s)", real_theta.angle, _("PBC")); } else { str = g_strdup_printf("%.1lf°", real_theta.angle); } float ls[3] = {15.0, 15.0, 0.0}; vec3_t pos = vec3(bt -> x, bt -> y, bt -> z); prepare_string (str, 3+pi, plot -> labels[3+pi].color[0], pos, ls, at, bt, ct); g_free (str); } /*! \fn void set_measure_color (int selected, int id, int num) \brief set measure color \param selected total number of selected atom(s) \param id measured element id number \param num total number of measured element(s) in the list */ void set_measure_color (int selected, int id, int num) { if (selected) { col = init_color (id, num); } else { col.red = 1.0 - plot -> back -> color.red; col.green = 1.0 - plot -> back -> color.green; col.blue = 1.0 - plot -> back -> color.blue; col.alpha = 1.0; } } /*! \fn void setup_this_measured_angle (int s, int sa, int sb, int sc, int pi) \brief prepare measured angle to render \param s measured line (0) or label (1) \param sa 1st atom \param sb 2nd atom \param sc 3rd atom \param pi 0 = mouse analysis mode, 1 = mouse edition mode */ void setup_this_measured_angle (int s, int sa, int sb, int sc, int pi) { float alpha = 1.0; float shift[3]; int p, q, r; vec3_t pos_a, pos_b, pos_c; atom * at, * bt, * ct; at = & proj_gl -> atoms[step][sa]; bt = & proj_gl -> atoms[step][sb]; ct = & proj_gl -> atoms[step][sc]; for (p=0; p abc -> extra_cell[0]+1;p++) { for (q=0; q abc -> extra_cell[1]+1; q++) { for (r=0; r abc -> extra_cell[2]+1; r++) { shift[0]=p*box_gl -> vect[0][0]+q*box_gl -> vect[1][0]+r*box_gl -> vect[2][0]; shift[1]=p*box_gl -> vect[0][1]+q*box_gl -> vect[1][1]+r*box_gl -> vect[2][1]; shift[2]=p*box_gl -> vect[0][2]+q*box_gl -> vect[1][2]+r*box_gl -> vect[2][2]; at_shift (at, shift); at_shift (bt, shift); at_shift (ct, shift); pos_a = vec3(at -> x, at -> y, at -> z); pos_b = vec3(bt -> x, bt -> y, bt -> z); pos_c = vec3(ct -> x, ct -> y, ct -> z); if (s == 0) { setup_line_vertice (measure -> vertices, pos_a, col, alpha); setup_line_vertice (measure -> vertices, pos_b, col, alpha); setup_line_vertice (measure -> vertices, pos_c, col, alpha); } else { // Text location for the instances ! draw_angle_label (at, bt, ct, pi); } at_unshift (at, shift); at_unshift (bt, shift); at_unshift (ct, shift); alpha = 0.5; } } } } /*! \fn void angles_loop (glwin * view, int id, int pi, GtkTreeStore * store) \brief do things for the measured angles selection \param view the target glwin \param id action to perform: \n -2 = save angles selection, \n -1 = clean angles selection, \n 0 = prepare OpenGL buffer data analysis mode selection measure, \n 1 = prepare OpenGL buffer data edition mode selection measure, \n 2 = fill angles tree store measures window \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param store the tree store to fill, if any */ void angles_loop (glwin * view, int id, int pi, GtkTreeStore * store) { int i, j, k, l, m; int ** did_it; int aid; gboolean do_it; //gboolean colored; image * img = view -> anim -> last -> img; // Total number of angles: int n_angl = num_angles (img -> selected[pi] -> selected); did_it = allocdint (n_angl, 3); aid = 0; tmp_a = img -> selected[pi] -> first; for (i=0; i < img -> selected[pi] -> selected; i++) { tmp_b = img -> selected[pi] -> first; for (j=0; j < img -> selected[pi] -> selected; j++) { if (tmp_b -> id != tmp_a -> id) { tmp_c = img -> selected[pi] -> first; for (k=0; k < img -> selected[pi] -> selected; k++) { if (tmp_c -> id != tmp_a -> id && tmp_c -> id != tmp_b -> id) { do_it = TRUE; for (l=0; l id && ((did_it[l][0] == tmp_a -> id && did_it[l][2] == tmp_c -> id) || (did_it[l][2] == tmp_a -> id && did_it[l][0] == tmp_c -> id))) { do_it = FALSE; break; } } if (do_it) { did_it[aid][0] = tmp_a -> id; did_it[aid][1] = tmp_b -> id; did_it[aid][2] = tmp_c -> id; switch (id) { case -2: for (m=0; m<3; m++) tmp_object_id[1][aid][m] = did_it[aid][m]; break; case -1: img -> selected[pi] -> selected_angles[aid] = 0; break; default: if (img -> selected[pi] -> selected_angles[aid] || img -> m_is_pressed == 2 || id == 2) { //colored = FALSE; if (id < 2) { set_measure_color (img -> selected[pi] -> selected_angles[aid], aid, n_angl); //colored = TRUE; } switch (id) { case 2: fill_angle_model_row (view -> proj, tmp_a -> id, tmp_b -> id, tmp_c -> id, store); break; default: setup_this_measured_angle (id, tmp_a -> id, tmp_b -> id, tmp_c -> id, pi); break; } } break; } aid ++; } } if (tmp_c -> next != NULL) tmp_c = tmp_c -> next; } } if (tmp_b -> next != NULL) tmp_b = tmp_b -> next; } if (tmp_a -> next != NULL) tmp_a = tmp_a -> next; } if (id == -1) { for (i=0; i selected[pi] -> selected_angles[i] = object_was_selected[1][j]; } } } } g_free (did_it); } /*! \fn void dihedrals_loop (glwin * view, int id, int pi, GtkTreeStore * store) \brief do things for the measured dihedrals selection \param view the target glwin \param id action to perform: \n -2 = save dihedrals selection \n -1 = clean dihedrals selection \n 0 = prepare OpenGL buffer data analysis mode selection measure \n 1 = prepare OpenGL buffer data edition mode selection measure \n 2 = fill dihedrals tree store measures window \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param store the tree store to fill, if any */ void dihedrals_loop (glwin * view, int id, int pi, GtkTreeStore * store) { int i, j, k, l, m; int ** did_it; int did; gboolean do_it; image * img = view -> anim -> last -> img; // gboolean colored; // Total number of dihedral angles: int n_dihedral = num_dihedrals (img -> selected[pi] -> selected); did_it = allocdint (n_dihedral, 4); did = 0; tmp_a = img -> selected[pi] -> first; for (i=0; i < img -> selected[pi] -> selected; i++) { tmp_b = img -> selected[pi] -> first; for (j=0; j < img -> selected[pi] -> selected; j++) { if (tmp_b -> id != tmp_a -> id) { tmp_c = img -> selected[pi] -> first; for (k=0; k < img -> selected[pi] -> selected; k++) { if (tmp_c -> id != tmp_a -> id && tmp_c -> id != tmp_b -> id) { tmp_d = img -> selected[pi] -> first; for (l=0; l < img -> selected[pi] -> selected; l++) { if (tmp_d -> id != tmp_a -> id && tmp_d -> id != tmp_b -> id && tmp_d -> id != tmp_c -> id) { do_it = TRUE; for (m=0; m id && did_it[m][1] == tmp_b -> id && did_it[m][2] == tmp_c -> id && did_it[m][3] == tmp_d -> id) ||(did_it[m][0] == tmp_d -> id && did_it[m][1] == tmp_c -> id && did_it[m][2] == tmp_b -> id && did_it[m][3] == tmp_a -> id)) { do_it = FALSE; break; } } if (do_it) { did_it[did][0] = tmp_a -> id; did_it[did][1] = tmp_b -> id; did_it[did][2] = tmp_c -> id; did_it[did][3] = tmp_d -> id; switch (id) { case -2: for (m=0; m<4; m++) tmp_object_id[2][did][m] = did_it[did][m]; break; case -1: img -> selected[pi] -> selected_dihedrals[did] = 0; break; default: if (img -> selected[pi] -> selected_dihedrals[did] || img -> m_is_pressed == 3 || id == 2) { //colored = FALSE; if (id < 2) { set_measure_color (img -> selected[pi] -> selected_dihedrals[did], did, n_dihedral); //colored = TRUE; } switch (id) { case 0: //draw_angle_arc (colored); break; case 1: //draw_angle_label (); break; case 2: fill_dihedral_model_row (view -> proj, tmp_a -> id, tmp_b -> id, tmp_c -> id, tmp_d -> id, store); break; } } break; } did ++; } } if (tmp_d -> next != NULL) tmp_d = tmp_d -> next; } } if (tmp_c -> next != NULL) tmp_c = tmp_c -> next; } } if (tmp_b -> next != NULL) tmp_b = tmp_b -> next; } if (tmp_a -> next != NULL) tmp_a = tmp_a -> next; } if (id == -1) { for (i=0; i selected[pi] -> selected_dihedrals[i] = object_was_selected[2][j]; } } } } g_free (did_it); } /*! \fn void draw_bond_label (atom * at, atom * bt, int pi) \brief prepare a measured distance OpenGL rendering \param at 1st atom \param bt 2nd atom \param pi 0 = mouse analysis mode, 1 = mouse edition mode */ void draw_bond_label (atom * at, atom * bt, int pi) { distance dist = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, at, bt); vec3_t pos; if (dist.pbc) { pos = vec3 (at -> x - (at -> x - bt -> x)/2.0, at -> y - (at -> y - bt -> y)/2.0, at -> z - (at -> z - bt -> z)/2.0); } else { pos = vec3 (at -> x-dist.x/2.0, at -> y-dist.y/2.0, at -> z-dist.z/2.0); } gchar * str; if (dist.pbc) { str = g_strdup_printf("%.3lf Å (%s)", dist.length, _("PBC")); } else { str = g_strdup_printf("%.3lf Å", dist.length); } float ls[3] = {-15.0, 15.0, 0.0}; prepare_string (str, 3+pi, plot -> labels[3+pi].color[0], pos, ls, at, bt, NULL); g_free (str); } /*! \fn void setup_this_measured_bond (int s, int sa, int sb, int pi) \brief prepare measured distance to render \param s measured line (0) or label (1) \param sa 1st atom \param sb 2nd atom \param pi 0 = mouse analysis mode, 1 = mouse edition mode */ void setup_this_measured_bond (int s, int sa, int sb, int pi) { float alpha = 1.0; float shift[3]; int p, q, r; vec3_t pos_a, pos_b; atom * at, * bt; at = & proj_gl -> atoms[step][sa]; bt = & proj_gl -> atoms[step][sb]; for (p=0; p abc -> extra_cell[0]+1;p++) { for (q=0; q abc -> extra_cell[1]+1; q++) { for (r=0; r abc -> extra_cell[2]+1; r++) { shift[0]=p*box_gl -> vect[0][0]+q*box_gl -> vect[1][0]+r*box_gl -> vect[2][0]; shift[1]=p*box_gl -> vect[0][1]+q*box_gl -> vect[1][1]+r*box_gl -> vect[2][1]; shift[2]=p*box_gl -> vect[0][2]+q*box_gl -> vect[1][2]+r*box_gl -> vect[2][2]; at_shift (at, shift); at_shift (bt, shift); pos_a = vec3(at -> x, at -> y, at -> z); pos_b = vec3(bt -> x, bt -> y, bt -> z); if (s == 0) { setup_line_vertice (measure -> vertices, pos_a, col, alpha); setup_line_vertice (measure -> vertices, pos_b, col, alpha); } else { // Text location for the instances ! draw_bond_label (at, bt, pi); } at_unshift (at, shift); at_unshift (bt, shift); alpha = 0.5; } } } } /*! \fn void bonds_loop (glwin * view, int id, int pi, GtkTreeStore * store) \brief do things for the measured distances selection \param view the target glwin \param id action to perform: \n -2 = save bonds selection \n -1 = clean bonds selection \n 0 = prepare OpenGL buffer data analysis mode selection measure \n 1 = prepare OpenGL buffer data edition mode selection measure \n 2 = fill bonds distances tree store measures window \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param store the tree store to fill, if any */ void bonds_loop (glwin * view, int id, int pi, GtkTreeStore * store) { int i, j; int ** did_it; int bid; image * img = view -> anim -> last -> img; int n_dist = num_bonds (img -> selected[pi] -> selected); if (id == 1) shift = allocint (2); did_it = allocdint (n_dist, 2); bid = -1; tmp_a = img -> selected[pi] -> first; for (i=0; i < img -> selected[pi] -> selected-1; i++) { tmp_b = tmp_a -> next; for (j=i+1; j < img -> selected[pi] -> selected; j++) { bid ++; did_it[bid][0] = tmp_a -> id; did_it[bid][1] = tmp_b -> id; switch (id) { case -2: tmp_object_id[0][bid][0] = tmp_a -> id; tmp_object_id[0][bid][1] = tmp_b -> id; break; case -1: img -> selected[pi] -> selected_bonds[bid] = 0; break; default: if (img -> selected[pi] -> selected_bonds[bid] || img -> m_is_pressed == 1 || id == 2) { if (id < 2) { set_measure_color (img -> selected[pi] -> selected_bonds[bid], bid, n_dist); } switch (id) { case 2: fill_bond_model_row (view -> proj, tmp_a -> id, tmp_b -> id, store); break; default: setup_this_measured_bond (id, tmp_a -> id, tmp_b -> id, pi); break; } } break; } if (tmp_b -> next != NULL) tmp_b = tmp_b -> next; } if (tmp_a -> next != NULL) tmp_a = tmp_a -> next; } if (id == 1) g_free (shift); if (id == -1) { for (i=0; i selected[pi] -> selected_bonds[i] = object_was_selected[0][j]; } } } } g_free (did_it); } /*! \fn void prepare_measure_shaders (int mode) \brief prepare measure OpenGL rendering \param mode (0 = analysis mode, 1 = edition mode) */ void prepare_measure_shaders (int mode) { int nshaders = 0; if (plot -> selected[mode] -> selected > 1 && plot -> selected[mode] -> selected < MAX_IN_SELECTION) { if (plot -> mpattern[mode] > -1) { // First the bond distances measure = g_malloc0(sizeof*measure); measure -> vert_buffer_size = LINE_BUFF_SIZE; measure -> num_vertices = 2 * num_bonds (plot -> selected[mode] -> selected) * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); measure -> vertices = allocfloat (measure -> vert_buffer_size*measure -> num_vertices); nbs = 0; bonds_loop (wingl, 0, mode, NULL); if (plot -> mpattern[mode] != 2) { wingl -> ogl_glsl[MEASU][mode][0] = init_shader_program (MEASU, GLSL_LINES, line_vertex, line_stipple, line_stipple_color, GL_LINES, 2, 7, FALSE, measure); } else { wingl -> ogl_glsl[MEASU][mode][0] = init_shader_program (MEASU, GLSL_LINES, line_vertex, NULL, line_color, GL_LINES, 2, 7, FALSE, measure); } wingl -> ogl_glsl[MEASU][mode][0] -> line_width = plot -> mwidth[mode]; nshaders ++; // The angles if (plot -> selected[mode] -> selected > 2) { measure = g_malloc0(sizeof*measure); measure -> vert_buffer_size = LINE_BUFF_SIZE; measure -> num_vertices = 3 * num_angles (plot -> selected[mode] -> selected) * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); measure -> vertices = allocfloat (measure -> vert_buffer_size*measure -> num_vertices); nbs = 0; angles_loop (wingl, 0, mode, NULL); if (plot -> mpattern[mode] != 2) { wingl -> ogl_glsl[MEASU][mode][1] = init_shader_program (MEASU, GLSL_LINES, angle_vertex, angle_stipple, line_stipple_color, GL_TRIANGLES, 2, 7, FALSE, measure); } else { wingl -> ogl_glsl[MEASU][mode][1] = init_shader_program (MEASU, GLSL_LINES, angle_vertex, angle_stipple, angle_color, GL_TRIANGLES, 2, 7, FALSE, measure); } wingl -> ogl_glsl[MEASU][mode][1] -> line_width = plot -> mwidth[mode]; nshaders ++; } } // When all labels are found we render the text if any if (plot -> labels[3+mode].list != NULL) { measures_drawing = nshaders; render_all_strings (MEASU, 3+mode); } } } /*! \fn void create_measures_lists () \brief prepare measure(s) OpenGL rendering */ void create_measures_lists () { // First we draw all lines/angles displayed on screen #ifdef DEBUG g_debug ("Measure LIST"); #endif cleaning_shaders (wingl, MEASU); clean_labels (3); clean_labels (4); wingl -> create_shaders[MEASU] = FALSE; wingl -> n_shaders[MEASU][0] = wingl -> n_shaders[MEASU][1] = 0; int i, j, k; i = (is_atom_win_active(wingl) || (wingl -> mode == EDITION && wingl -> selection_mode == NSELECTION-1)) ? 1 : 0; for (j=i; j<2; j++) { if (plot -> selected[j] -> selected > 1 && plot -> selected[j] -> selected < MAX_IN_SELECTION) { if (plot -> mpattern[j] > -1) { wingl -> n_shaders[MEASU][j] ++; if (plot -> selected[j] -> selected > 2) wingl -> n_shaders[MEASU][j] ++; } // First we need to prepare the labels type_of_measure = 6; bonds_loop (wingl, 1, j, NULL); if (plot -> selected[j] -> selected >= 3) { type_of_measure = 9; angles_loop (wingl, 1, j, NULL); } if (plot -> labels[3+j].list != NULL) { // shaders for the labels if any wingl -> n_shaders[MEASU][j] += (plot -> labels[3+j].render+1) * (plot -> labels[3+j].list -> last -> id + 1); } } } if (wingl -> n_shaders[MEASU][0] || wingl -> n_shaders[MEASU][1]) { measures_drawing = 0; for (k=i; k<2; k++) { wingl -> ogl_glsl[MEASU][k] = g_malloc0(wingl -> n_shaders[MEASU][k]*sizeof*wingl -> ogl_glsl[MEASU][k]); prepare_measure_shaders (k); } } } atomes_1.3.1/src/opengl/draw/d_rings.c0000664000175000017500000002053515212624223017313 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_rings.c * @short Functions to prepare the OpenGL rendering of rings polyhedra * @author Sébastien Le Roux */ /* * This file: 'd_rings.c' * * Contains: * - The functions to prepare the OpenGL rendering of rings polyhedra * * List of functions: int prepare_rings_gl (float * vertices, int se, int ge, int ta, int id, gboolean go); void create_ring_lists (); */ #include "global.h" #include "glview.h" #include "color_box.h" extern ColRGBA pcol; extern int nbs, nbl, nba; extern void setup_tetrahedron (float * vertices, GLfloat ** xyz); extern void setup_polyhedron (float * vertices, GLfloat ** xyz, int s); extern void get_centroid (GLfloat ** xyz, int id); extern void check_triangles (int s, GLfloat ** xyz); /*! \fn int prepare_rings_gl (float * vertices, int se, int ge, int ta, int id, gboolean go) \brief prepare a ring polyhedra OpenGL rendering \param vertices the ring atomic positions buffer to fill, if any \param se type of ring \param ge the coord id for this size of ring \param ta the size of the ring \param id the ring id number \param go render the ring or not (1/0) */ int prepare_rings_gl (float * vertices, int se, int ge, int ta, int id, gboolean go) { int i, j, k, l, m; gboolean clones; gboolean add_poly; gboolean old_pbc; GLfloat *** xyz; distance d; atom at, bt; xyz = alloctfloat (ta, ta, 3); j = -1; clones = FALSE; j = wingl -> all_rings[se][step][ta-1][id][0]; l = 0; xyz[0][l][0] = proj_gl -> atoms[step][j].x; xyz[0][l][1] = proj_gl -> atoms[step][j].y; xyz[0][l][2] = proj_gl -> atoms[step][j].z; for (i=1; i < ta; i++) { j = wingl -> all_rings[se][step][ta-1][id][i]; at = proj_gl -> atoms[step][j]; bt.x = xyz[0][i-1][0]; bt.y = xyz[0][i-1][1]; bt.z = xyz[0][i-1][2]; d = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & at, & bt); if (d.pbc) clones = TRUE; xyz[0][i][0] = xyz[0][i-1][0] + d.x; xyz[0][i][1] = xyz[0][i-1][1] + d.y; xyz[0][i][2] = xyz[0][i-1][2] + d.z; } l = ta; m = 0; if (clones) { old_pbc = cell_gl -> pbc; cell_gl -> pbc = FALSE; add_poly = TRUE; while (add_poly) { for (i=0; i all_rings[se][step][ta-1][id][i]; at = proj_gl -> atoms[step][j]; add_poly = TRUE; for (k=0; k npt) ? step : 0, & at, & bt); if (d.length < 0.01) { add_poly = FALSE; break; } } if (add_poly) break; } if (add_poly) { m ++; bt.x = xyz[0][i][0]; bt.y = xyz[0][i][1]; bt.z = xyz[0][i][2]; d = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & at, & bt); for (j=0; j pbc = old_pbc; } if (! go) return m+1; if (plot -> draw_clones || ! clones || plot -> cloned_poly) { for (i=0; i spcolor[4+se][0][ge]; get_centroid (xyz[i], l); if (l == 4) { setup_tetrahedron (vertices, xyz[i]); } else { check_triangles (l, xyz[i]); setup_polyhedron (vertices, xyz[i], l); } } } g_free (xyz); xyz = NULL; return 0; } /*! \fn void create_ring_lists () \brief prepare ring(s) polyhedra OpenGL rendering */ void create_ring_lists () { // The order to draw the polyhedra could be based on the alpha channel // from the most transparent to the less transparent // However a better way is to used the neighbor list, if 3 atoms are linked thru bonds // and that all 3 of them are involved in polyhedra then the one at // the center is to be drawn first ... yet to be implemented int i, j, k, l, m, n; #ifdef DEBUG g_debug ("Ring LIST"); #endif cleaning_shaders (wingl, RINGS); if (wingl -> rings) { int rtot = 0; int * nrings[5]; for (i=0; i < 5; i++) { nrings[i] = g_malloc0(coord_gl -> totcoord[i+4]*sizeof*nrings[i]); for (j=0; j < coord_gl -> totcoord[i+4]; j++) { // k is the size of the ring in total number of atoms: k = coord_gl -> geolist[i+4][0][j]; l = 0; if (plot -> show_poly[i+4][j]) { // Show all rings for (m = 0; m < wingl -> num_rings[i][step][k-1]; m++) { l += prepare_rings_gl (NULL, i, j, k, m, FALSE); } } else if (! in_movie_encoding || plot -> i_rings[i] == NULL) { // Show selected rings for (m=0; m < wingl -> num_rings[i][step][k-1]; m++) { if (wingl -> show_rpoly[i][step][k-1][m]) { l += prepare_rings_gl (NULL, i, j, k, m, FALSE); } } } // m is the number of summit of the polyhedra // +1 if only a 3 atom size ring to include a centroid m = (k == 3) ? k+1: k; // Then we need the max number of triangles for all these polyedron nrings[i][j] = l*(m*(m-1)*(m-2)/6); rtot += nrings[i][j]*3; } if (in_movie_encoding && plot -> i_rings[i] != NULL) { for (l=0; l i_rings[i][0][0]; l++) { j = plot -> i_rings[i][l+1][0]; k = coord_gl -> geolist[i+4][0][j]; m = prepare_rings_gl (NULL, i, j, k, plot -> i_rings[i][l+1][1], FALSE); if (m) { n = (k == 3) ? k+1: k; nrings[i][j] += (n*(n-1)*(n-2)/6); rtot += (n*(n-1)*(n-2)/6)*3; } } } } if (rtot > 0) { wingl -> ogl_glsl[RINGS][step] = g_malloc0(sizeof*wingl -> ogl_glsl[RINGS][step]); wingl -> n_shaders[RINGS][step] = 1; object_3d * rings = g_malloc0(sizeof*rings); rings -> vert_buffer_size = POLY_BUFF_SIZE; rings -> num_vertices = rtot * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); rings -> vertices = allocfloat (rings -> vert_buffer_size*rings -> num_vertices); nba = 0; for (i=0; i < 5; i++) { for (j=0; j < coord_gl -> totcoord[i+4]; j++) { if (nrings[i][j]) { k = coord_gl -> geolist[i+4][0][j]; if (plot -> show_poly[i+4][j]) { for (l=0; l < wingl -> num_rings[i][step][k-1]; l++) { prepare_rings_gl (rings -> vertices, i, j, k, l, TRUE); } } else if (! in_movie_encoding || plot -> i_rings[i] == NULL) { for (l=0; l < wingl -> num_rings[i][step][k-1]; l++) { if (wingl -> show_rpoly[i][step][k-1][l]) { prepare_rings_gl (rings -> vertices, i, j, k, l, TRUE); } } } } } if (in_movie_encoding && plot -> i_rings[i] != NULL) { for (l=0; l i_rings[i][0][0]; l++) { j = plot -> i_rings[i][l+1][0]; k = coord_gl -> geolist[i+4][0][j]; prepare_rings_gl (rings -> vertices, i, j, k, plot -> i_rings[i][l+1][1], TRUE); } } } wingl -> ogl_glsl[RINGS][step][0] = init_shader_program (RINGS, GLSL_POLYEDRA, full_vertex, NULL, full_color, GL_TRIANGLES, 3, 1, TRUE, rings); } } wingl -> create_shaders[RINGS] = FALSE; } atomes_1.3.1/src/opengl/draw/image.c0000664000175000017500000002501515212624223016746 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file image.c * @short Functions to render an image from the OpenGL window * @author Sébastien Le Roux */ /* * This file: 'image.c' * * Contains: * - The functions to render an image from the OpenGL window * * List of functions: void render_image (glwin * view, video_options * iopts); void simple_image_render (); G_MODULE_EXPORT void run_render_image (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_render_image (GtkDialog * info, gint response_id, gpointer data); */ #include "global.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "movie.h" #include "preferences.h" #include #ifndef GTKGLAREA extern GdkWindow * xwin; extern GLXContext glcontext; extern Pixmap pixmap; extern GLXPixmap glpixmap; #endif extern GdkPixbuf * pixbuf; extern void fill_image (VideoStream * vs, int width, int height, glwin * view); extern void init_frame_buffer (int x, int y); extern void close_frame_buffer (); char * image_name[IMAGE_FORMATS] = {"PNG", "JPG/JPEG", "TIFF", "Bitmap"}; char * image_list[IMAGE_FORMATS] = {"png", "jpeg", "tiff", "bmp"}; int render_image_format = NONE; int render_image_style = NONE; int render_image_axis = NONE; int render_image_box = NONE; int render_image_rep = NONE; int render_image_acolor = NONE; int render_image_pcolor = NONE; gboolean trigger_fragment_analysis = FALSE; gboolean trigger_molecule_analysis = FALSE; ColRGBA * render_image_back_color = NULL; int render_image_back_grad = NONE; int render_image_back_dir = NONE; float render_image_back_pos = NONE; ColRGBA * render_image_grad_color[2]; ColRGBA * render_image_box_color = NULL; int * render_image_pixels = NULL; gchar * render_image_output = NULL; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_render_image (GtkNativeDialog * info, gint response_id, gpointer data) \brief render an image from the OpenGL window - running the dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_render_image (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_render_image (GtkDialog * info, gint response_id, gpointer data) \brief render an image from the OpenGL window - running the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_render_image (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { video_options * iopts = (video_options *)data; gchar * videofile; if (atomes_render_image) { videofile = g_strdup_printf ("%s", render_image_output); } else { videofile = file_chooser_get_file_name (chooser); #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } project * this_proj = get_project_by_id (iopts -> proj); glwin * view = this_proj -> modelgl; // On macOS, the CoreAnimation layer may invalidate the current GL context // between the file dialog callback and the OpenGL calls. Without explicitly // making the context current, FBO creation and rendering silently fail or // operate on the wrong context, causing partial or missing image captures. gtk_gl_area_make_current ((GtkGLArea *)view -> plot); init_frame_buffer (iopts -> video_res[0], iopts -> video_res[1]); init_opengl (); int i, x, y, q; for (i=0; i n_shaders[i][step] = -1; } recreate_all_shaders (view); in_movie_encoding = TRUE; if (iopts -> oglquality != 0) { q = view -> anim -> last -> img -> quality; view -> anim -> last -> img -> quality = iopts -> oglquality; } for (i=0; i<2; i++) tmp_pixels[i] = view -> pixels[i]; x = view -> pixels[0]; y = view -> pixels[1] - 100; view -> pixels[0] = iopts -> video_res[0]; view -> pixels[1] = iopts -> video_res[1]; fill_image (NULL, iopts -> video_res[0], iopts -> video_res[1], view); GError * error = NULL; gboolean res = gdk_pixbuf_savev (pixbuf, videofile, image_list[iopts -> codec], NULL, NULL, & error); if (! res && ! atomes_from_libreoffice) { show_warning (_("An error occurred when exporting an image\nyou might want to try again\nsorry for the trouble"), view -> win); } close_frame_buffer (); in_movie_encoding = FALSE; if (! atomes_render_image) { if (iopts -> oglquality != 0) view -> anim -> last -> img -> quality = q; for (i=0; i n_shaders[i][step] = -1; } recreate_all_shaders (view); reshape (view, x, y, TRUE); update (view); } } else { #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } } /*! \fn void render_image (glwin * view, video_options * iopts) \brief render an image from the OpenGL window - prepare the dialog \param view the target glwin \param iopts the rendering options */ void render_image (glwin * view, video_options * iopts) { GtkFileFilter * filter; gchar * str; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif info = create_file_chooser (_("Render Image"), GTK_WINDOW(view -> win), GTK_FILE_CHOOSER_ACTION_SAVE, _("Save")); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif file_chooser_set_current_folder (chooser); str = g_strdup_printf ("%s.%s", prepare_for_title(get_project_by_id(view -> proj) -> name), image_list[iopts -> codec]); gtk_file_chooser_set_current_name (chooser, str); g_free (str); filter = gtk_file_filter_new (); str = g_strdup_printf (_("%s file (*.%s)"), image_name[iopts -> codec], image_list[iopts -> codec]); gtk_file_filter_set_name (GTK_FILE_FILTER(filter), str); g_free (str); str = g_strdup_printf ("*.%s", image_list[iopts -> codec]); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), str); g_free (str); gtk_file_chooser_add_filter (chooser, filter); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_render_image), iopts); #else run_this_gtk_dialog (info, G_CALLBACK(run_render_image), iopts); #endif } /*! \fn void simple_image_render () \brief simple direct rendering from command line */ void simple_image_render () { video_options * vopts = g_malloc0(sizeof*vopts); vopts -> proj = activep; vopts -> oglquality = 0; vopts -> video_res = duplicate_int (2, (atomes_from_libreoffice) ? active_glwin -> pixels : render_image_pixels); int h, i, j, k, l, m; for (i=0; i<2; i++) active_glwin -> pixels[i] = vopts -> video_res[i]; vopts -> codec = render_image_format; if (render_image_style != NONE) { if (render_image_style < OGL_STYLES) { active_image -> style = render_image_style; } else { active_image -> style = SPACEFILL; h = render_image_style - OGL_STYLES; active_image -> filled_type = h; j = active_project -> nspec; k = (h) ? 9 + h : 2; l = (h) ? 12 + h : 7; for (i=0; i chemistry -> chem_prop[CHEM_Z][i]; active_image -> atomicrad[i] = (default_o_at_rs[2]) ? default_at_rs[2] : get_radius (2, h, m, default_atomic_rad[k]); active_image -> atomicrad[i+j] = (default_o_at_rs[7]) ? default_at_rs[7] : get_radius (7, h, m, default_atomic_rad[l]); } } } if (render_image_rep != NONE) active_image -> rep = render_image_rep; if (render_image_box != NONE) { if (active_image -> abc) { active_image -> abc -> box = render_image_box; } if (render_image_box_color) { active_image -> abc -> color = * render_image_box_color; } } if (render_image_axis != NONE) { if (active_image -> xyz) { active_image -> xyz -> axis = render_image_axis; } } if (render_image_acolor != NONE) { active_image -> color_map[0] = render_image_acolor; } if (render_image_pcolor != NONE) { // This also trigger to render polyhedra active_image -> color_map[1] = render_image_pcolor; i = (render_image_pcolor == 2) ? 1 : 0; for (j=0; j totcoord[i]; j++) { active_image -> show_poly[i][j] = TRUE; } } if (render_image_back_grad != NONE) { active_image -> back -> gradient = render_image_back_grad; } if (render_image_back_color) { active_image -> back -> gradient = 0; active_image -> back -> color = * render_image_back_color; } if (render_image_back_dir != NONE) { if ((active_image -> back -> gradient == 1 && render_image_back_dir < 5) || (active_image -> back -> gradient == 2 && render_image_back_dir < 8)) { active_image -> back -> direction = render_image_back_dir; } } if (render_image_back_pos != NONE) { active_image -> back -> position = render_image_back_pos; } for (i=0; i<2; i++) { if (render_image_grad_color[i]) { active_image -> back -> gradient_color[i] = * render_image_grad_color[i]; } } run_render_image (NULL, GTK_RESPONSE_ACCEPT, vopts); g_free (vopts); if (! atomes_from_libreoffice) to_close_this_project (0, active_project); } atomes_1.3.1/src/opengl/draw/ogl_text.c0000664000175000017500000005602015212624223017511 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file ogl_text.c * @short Functions to prepare OpenGL rendering for text * @author Sébastien Le Roux */ /* * This file: 'ogl_text.c' * * Contains: * - The functions to prepare OpenGL rendering for text * * List of functions: int * paint_bitmap (vec4_t color, GLfloat a, int cw, int ch, unsigned char * buff); void render_string (int glsl, int id, screen_string * this_string); void debug_string (screen_string * this_string); void render_all_strings (int glsl, int id); void add_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct); void prepare_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct); static void normalize_text_size (GLenum texture, int * width, int * height); screen_string * was_not_rendered_already (char * word, screen_string * list); ColRGBA * opposite_color (ColRGBA col); object_3d * create_string_texture (int cwidth, int cheight, int * pixels); object_3d * gl_pango_render_layout (PangoLayout * layout, GLenum texture, int id, screen_string * this_string); */ #include "global.h" #include "glview.h" #define PANGO_TEXT_SIZE 500 #define OUTLINE_WIDTH 3 #ifndef GL_CLAMP_TO_EDGE # define GL_CLAMP_TO_EDGE 0x812F #endif #ifndef GL_TEXTURE_WRAP_R # define GL_TEXTURE_WRAP_R 0x8072 #endif extern int measures_drawing; extern int type_of_measure; extern void update_string_instances (glsl_program * glsl, object_3d * obj); GLuint textures_id[2]; const int OUTLINE_BRUSH[2*OUTLINE_WIDTH+1][2*OUTLINE_WIDTH+1] = {{ 10, 30, 45, 50, 45, 30, 10 }, { 30, 65, 85, 100, 85, 65, 30 }, { 45, 85, 200, 256, 200, 85, 45 }, { 50, 100, 256, 256, 256, 100, 50 }, { 45, 85, 200, 256, 200, 85, 45 }, { 30, 65, 85, 100, 85, 65, 30 }, { 10, 30, 45, 50, 45, 30, 10 }}; /*! \fn static void normalize_text_size (GLenum texture, int * width, int * height) \brief normalize the text size \param texture the texture type \param width image width \param height image height */ static void normalize_text_size (GLenum texture, int * width, int * height) { // if the texture target is GL_TEXTURE_2D, that means that // the texture_rectangle OpenGL extension is unsupported and we must // use only square, power-of-two textures. if (texture == GL_TEXTURE_2D) { int x = max (* width, * height); // find next power of two int n; for (n = 1; n < x; n = n << 1); // the texture must be square, and its size must be a power of two. * width = * height = n; } } /*! \fn int * paint_bitmap (vec4_t color, GLfloat a, int cw, int ch, unsigned char * buff) \brief paint bitmap data using color \param color the color \param a opacity \param cw width \param ch height \param buff the data to paint */ int * paint_bitmap (vec4_t color, GLfloat a, int cw, int ch, unsigned char * buff) { int i; guint8 * row, * row_end; guint32 rgb; guint32 * p; int * bitmap; #if ! defined(GL_VERSION_1_2) && G_BYTE_ORDER == G_LITTLE_ENDIAN rgb = ((guint32) (color.x* 255.0)) | (((guint32) (color.y * 255.0)) << 8) | (((guint32) (color.z * 255.0)) << 16); #else rgb = (((guint32) (color.x * 255.0)) << 24) | (((guint32) (color.y * 255.0)) << 16) | (((guint32) (color.z * 255.0)) << 8); #endif bitmap = allocint (cw * ch * 4); p = (guint32 *) bitmap; row = buff + cw*ch; /* past-the-end */ row_end = buff; /* beginning */ if (a == 1.0) { while (row != row_end) { row -= cw; for (i = 0; i < cw; i++) { #if ! defined(GL_VERSION_1_2) && G_BYTE_ORDER == G_LITTLE_ENDIAN * p++ = rgb | (((guint32) row[i]) << 24); #else * p++ = rgb | ((guint32) row[i]); #endif } } } else { while (row != row_end) { row -= cw; for (i = 0; i < cw; i++) { #if ! defined(GL_VERSION_1_2) && G_BYTE_ORDER == G_LITTLE_ENDIAN * p++ = rgb | (((guint32) (a * row[i])) << 24); #else * p++ = rgb | ((guint32) (a * row[i])); #endif } } } return bitmap; } gboolean render_format; /*! \fn object_3d * create_string_texture (int cwidth, int cheight, int * pixels) \brief OpenGL 3D string object rendering \param cwidth width \param cheight height \param pixels the data to render */ object_3d * create_string_texture (int cwidth, int cheight, int * pixels) { int i, j, n; int di, dj; int fi, fj, fn; double x, y; object_3d * new_string; new_string = g_malloc0(sizeof*new_string); if (! new_string) return NULL; int csize = cwidth * cheight; int * rawbitmap; rawbitmap = allocint (csize); if (! rawbitmap) return NULL; n = 0; for (j = 0; j < cheight; j++) { for (i = 0; i < cwidth; i++) { x = (GLubyte)(pixels [n])/255.0; y = pow(x, 0.75); rawbitmap[n] = (int)(255.0 * y); n++; } } int * neighborhood; neighborhood = allocint (csize); if (! neighborhood) return NULL; for (i = 0; i < cheight; i++) { for (j = 0; j < cwidth; j++) { n = j + i * cwidth; for (di = -OUTLINE_WIDTH; di <= OUTLINE_WIDTH; di++) { for (dj = -OUTLINE_WIDTH; dj <= OUTLINE_WIDTH; dj++) { fi = i + di; fj = j + dj; if (fi >= 0 && fi < cheight && fj >= 0 && fj < cwidth) { fn = fj + fi * cwidth; neighborhood[fn] = max (neighborhood[fn], rawbitmap[n] * OUTLINE_BRUSH[OUTLINE_WIDTH + di] [OUTLINE_WIDTH + dj]); } } } } } // Two channels, for the outline and the glyph GLubyte * channels[2]; for (i=0; i<2; i++) { channels[i] = g_malloc0(csize*sizeof*channels[i]); if (! channels[i]) return NULL; } for (n = 0; n < csize; n++) { channels[1][n] = (GLubyte)rawbitmap[n]; i = (neighborhood[n] >> 8) + rawbitmap[n]; if (i > 255) { i = 255; } channels[0][n] = (GLubyte)i; } g_free (neighborhood); glPixelStorei (GL_UNPACK_ALIGNMENT, 1); for (i=0; i<2; i++) { glGenTextures (1, & textures_id[i]); if (! textures_id[i]) return NULL; glBindTexture (ogl_texture, textures_id[i]); glTexImage2D (ogl_texture, 0, GL_RED, cwidth, cheight, 0, GL_RED, GL_UNSIGNED_BYTE, channels[i]); glTexParameteri (ogl_texture, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri (ogl_texture, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (ogl_texture, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri (ogl_texture, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri (ogl_texture, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); glBindTexture (ogl_texture, 0); } for (i=0; i<2; i++) g_free (channels[i]); g_free (rawbitmap); return new_string; } /*! \fn object_3d * gl_pango_render_layout (PangoLayout * layout, GLenum texture, int id, screen_string * this_string) \brief OpenGL 3D pango layout object rendering \param layout the Pango layout \param texture the OpenGL texture type \param id the label id \param this_string the screen string */ object_3d * gl_pango_render_layout (PangoLayout * layout, GLenum texture, int id, screen_string * this_string) { FT_Bitmap bitmap; PangoRectangle prect; object_3d * new_string; int * pixels; int cwidth, cheight; int csize; pango_layout_get_extents (layout, NULL, & prect); if (prect.width == 0 || prect.height == 0) return NULL; cheight = bitmap.rows = PANGO_PIXELS (prect.height) + 2*OUTLINE_WIDTH; cwidth = bitmap.width = PANGO_PIXELS (prect.width) + 2*OUTLINE_WIDTH; normalize_text_size (ogl_texture, & cwidth, & cheight); bitmap.pitch = cwidth; csize = cheight*cwidth; bitmap.buffer = g_malloc0(csize); memset (bitmap.buffer, 0, csize); bitmap.num_grays = 256; bitmap.pixel_mode = ft_pixel_mode_grays; pango_ft2_render_layout (& bitmap, layout, PANGO_PIXELS (-prect.x)+OUTLINE_WIDTH, OUTLINE_WIDTH); pixels = paint_bitmap (vec4(1.0,0.0,0.0,0.0), 1.0, cwidth, cheight, bitmap.buffer); g_free (bitmap.buffer); if (! plot -> labels[id].render) { new_string = g_malloc0(sizeof*new_string); new_string -> texture = -1; glPixelStorei (GL_UNPACK_ALIGNMENT, 1); glGenTextures (1, & new_string -> texture); if (! new_string -> texture) return NULL; glBindTexture (ogl_texture, new_string -> texture); glTexImage2D (ogl_texture, 0, GL_RGBA, cwidth, cheight, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); glTexParameteri (ogl_texture, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri (ogl_texture, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri (ogl_texture, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri (ogl_texture, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri (ogl_texture, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); glBindTexture (ogl_texture, 0); } else { new_string = create_string_texture (cwidth, cheight, pixels); } g_free (pixels); new_string -> num_vertices = 4; new_string -> vert_buffer_size = CHAR_BUFF_SIZE; new_string -> vertices = allocfloat (new_string -> num_vertices*CHAR_BUFF_SIZE); float x = (float) cwidth; float y = (float) cheight; float twidth = (ogl_texture == GL_TEXTURE_2D) ? 1.0 : x; float theight = (ogl_texture == GL_TEXTURE_2D) ? 1.0 : y; // 0 new_string -> vertices[0] = -x; new_string -> vertices[1] = y; new_string -> vertices[2] = 0.0; new_string -> vertices[3] = theight; // 1 new_string -> vertices[4] = -x; new_string -> vertices[5] = -y; new_string -> vertices[6] = 0.0; new_string -> vertices[7] = 0.0; // 2 new_string -> vertices[8] = x; new_string -> vertices[9] = y; new_string -> vertices[10] = twidth; new_string -> vertices[11] = theight; // 3 new_string -> vertices[12] = x; new_string -> vertices[13] = -y; new_string -> vertices[14] = twidth; new_string -> vertices[15] = 0.0; new_string -> num_instances = this_string -> num_instances; int i = (this_string -> type == 3) ? 1 : (this_string -> type == 4) ? 3 : 4; new_string -> inst_buffer_size = 3*i; new_string -> instances = duplicate_float (this_string -> num_instances*3*i, this_string -> instances); return new_string; } /*! \fn ColRGBA * opposite_color (ColRGBA col) \brief compute the opposite color \param col input color */ ColRGBA * opposite_color (ColRGBA col) { ColRGBA * ocol = g_malloc0(sizeof*ocol); ocol -> red = (1.0-col.red)/2.5; ocol -> green = (1.0-col.green)/2.5; ocol -> blue = (1.0-col.blue)/2.5; ocol -> alpha = 1.0; return ocol; } /*! \fn void render_string (int glsl, int id, screen_string * this_string) \brief render a screen string \param glsl the shader id \param id the label id \param this_string the screen string to render */ void render_string (int glsl, int id, screen_string * this_string) { int j, k, l; double font_size; // Pango elements for labels PangoContext * pcontext; PangoLayout * playout; PangoFontDescription * pfont; object_3d * string_to_render = NULL; int arr_size = (this_string -> type == 4) ? 5 : (this_string -> type == 5) ? 6 : this_string -> type; int shid = (id == 4) ? 1 : 0; //pcontext = pango_ft2_get_context (PANGO_TEXT_SIZE, PANGO_TEXT_SIZE); pcontext = pango_font_map_create_context (pango_ft2_font_map_new ()); playout = pango_layout_new (pcontext); pango_layout_set_alignment (playout, PANGO_ALIGN_CENTER); pfont = pango_font_description_from_string (plot -> labels[id].font); j = pango_font_description_get_size (pfont); font_size = j / PANGO_SCALE; if (plot -> labels[id].scale) font_size *= ((ZOOM/plot -> zoom)*(plot -> gnear/6.0)*(wingl -> p_moy/plot -> p_depth)); if (in_movie_encoding) { l = (wingl -> pixels[0] > wingl -> pixels[1]) ? 1 : 0; font_size *= ((float)wingl -> pixels[l]/(float)tmp_pixels[l]); } pango_font_description_set_absolute_size (pfont, font_size*PANGO_SCALE); pango_layout_set_font_description (playout, pfont); pango_layout_set_markup (playout, this_string -> word, strlen(this_string -> word)); string_to_render = gl_pango_render_layout (playout, ogl_texture, id, this_string); if (string_to_render == NULL) { g_warning (_("Error in text rendering : for some reason it is impossible to render\n - this string : '%s' \n - using this font: %s"), this_string -> word, plot -> labels[id].font); } else { for (k=0; k<3; k++) string_to_render -> shift[k] = this_string -> shift[k]; string_to_render -> shift[3] = (float) plot -> labels[id].position; string_to_render -> quality = this_string -> type; j = this_string -> id; j *= (plot -> labels[id].render + 1); if (id == 1 && plot -> labels[0].list != NULL) { j += (plot -> labels[0].render + 1) * (plot -> labels[0].list -> last -> id + 1); } if (id == 2) { j += (plot -> xyz -> axis == WIREFRAME) ? 2 : 4; } else if (id == 3 || id == 4) { j += measures_drawing; } if (! plot -> labels[id].render) { if (ogl_texture == GL_TEXTURE_RECTANGLE_ARB) { wingl -> ogl_glsl[glsl][shid][j] = init_shader_program (glsl, GLSL_STRING, (this_string -> type == 3) ? string_vertex : (this_string -> type == 4) ? angstrom_vertex : degree_vertex, NULL, string_color, GL_TRIANGLE_STRIP, arr_size, (this_string -> type == 3) ? 7 : 8, FALSE, string_to_render); } else { wingl -> ogl_glsl[glsl][shid][j] = init_shader_program (glsl, GLSL_STRING, (this_string -> type == 3) ? string_vertex : (this_string -> type == 4) ? angstrom_vertex : degree_vertex, NULL, string_color_2d, GL_TRIANGLE_STRIP, arr_size, (this_string -> type == 3) ? 7 : 8, FALSE, string_to_render); } wingl -> ogl_glsl[glsl][shid][j] -> col = duplicate_color(1, & (this_string -> col)); } else { if (ogl_texture == GL_TEXTURE_RECTANGLE_ARB) { string_to_render -> texture = textures_id[0]; wingl -> ogl_glsl[glsl][shid][j] = init_shader_program (glsl, GLSL_STRING, (this_string -> type == 3) ? string_vertex : (this_string -> type == 4) ? angstrom_vertex : degree_vertex, NULL, string_color, GL_TRIANGLE_STRIP, arr_size, (this_string -> type == 3) ? 7 : 8, FALSE, string_to_render); wingl -> ogl_glsl[glsl][shid][j] -> col = opposite_color(this_string -> col); string_to_render -> texture = textures_id[1]; wingl -> ogl_glsl[glsl][shid][j+1] = init_shader_program (glsl, GLSL_STRING, (this_string -> type == 3) ? string_vertex : (this_string -> type == 4) ? angstrom_vertex : degree_vertex, NULL, string_color, GL_TRIANGLE_STRIP, arr_size, (this_string -> type == 3) ? 7 : 8, FALSE, string_to_render); wingl -> ogl_glsl[glsl][shid][j+1] -> col = duplicate_color(1, & (this_string -> col)); } else { string_to_render -> texture = textures_id[0]; wingl -> ogl_glsl[glsl][shid][j] = init_shader_program (glsl, GLSL_STRING, (this_string -> type == 3) ? string_vertex : (this_string -> type == 4) ? angstrom_vertex : degree_vertex, NULL, string_color_2d, GL_TRIANGLE_STRIP, arr_size, (this_string -> type == 3) ? 7 : 8, FALSE, string_to_render); wingl -> ogl_glsl[glsl][shid][j] -> col = opposite_color(this_string -> col); string_to_render -> texture = textures_id[1]; wingl -> ogl_glsl[glsl][shid][j+1] = init_shader_program (glsl, GLSL_STRING, (this_string -> type == 3) ? string_vertex : (this_string -> type == 4) ? angstrom_vertex : degree_vertex, NULL, string_color_2d, GL_TRIANGLE_STRIP, arr_size, (this_string -> type == 3) ? 7 : 8, FALSE, string_to_render); wingl -> ogl_glsl[glsl][shid][j+1] -> col = duplicate_color(1, & (this_string -> col)); } } free_object_3d (string_to_render); } pango_font_description_free (pfont); // g_object_unref (pcontext); g_clear_object (& pcontext); // g_object_unref (playout); g_clear_object (& playout); } /*! \fn void debug_string (screen_string * this_string) \brief debug screen string data \param this_string */ void debug_string (screen_string * this_string) { g_debug ("STRING:: id= %d, text:: %s", this_string -> id, this_string -> word); g_debug ("STRING:: color:: r= %f, g= %f, b= %f, a= %f", this_string -> col.red, this_string -> col.green, this_string -> col.blue, this_string -> col.alpha); int i, j; j = 0; for (i=0; i num_instances; i++, j+=3) { g_debug ("STRING:: %d-th :: pos[%d][x]= %f, pos[%d][y]= %f, pos[%d][z]= %f, theta[%d]= %f", i, i, this_string -> instances[j], i, this_string -> instances[j+1], i, this_string -> instances[j+2], i, this_string -> instances[j+2]); } g_debug ("STRING:: shift:: x= %f, y= %f, z= %f", this_string -> shift[0], this_string -> shift[1], this_string -> shift[2]); g_debug ("STRING:: show :: %f", this_string -> shift[3]); } /*! \fn void render_all_strings (int glsl, int id) \brief render all string to be rendered for a label list \param glsl shader id \param id label id */ void render_all_strings (int glsl, int id) { if (plot -> labels[id].list != NULL) { screen_string * this_string = plot -> labels[id].list -> last; while (this_string != NULL) { //if (glsl == MEASU) debug_string (this_string); render_string (glsl, id, this_string); this_string = this_string -> prev; } } } /*! \fn screen_string * was_not_rendered_already (char * word, screen_string * list) \brief check if a string was not already rendered and the corresponding screen string created \param word the string to render \param list the screen string list */ screen_string * was_not_rendered_already (char * word, screen_string * list) { if (list != NULL) { screen_string * tmp_string = list -> last; while (tmp_string != NULL) { if (g_strcmp0 (tmp_string -> word, word) == 0) { return tmp_string; } tmp_string = tmp_string -> prev; } tmp_string = NULL; g_free (tmp_string); } return NULL; } /*! \fn void add_string_instance (screen_string * string, vec3_t pos, atom * at, atom * bt, atom * ct) \brief add an instance to a screen string \param string the screen string to increase \param pos the position \param at the 1st atom, if any (bond or angle measure string) \param bt the 2nd atom, if any (bond or angle measure string) \param ct the 3rd atom, if any (angle measure string) */ void add_string_instance (screen_string * string, vec3_t pos, atom * at, atom * bt, atom * ct) { int i, j; i = 0; j = (string -> type == 3) ? 1 : (type_of_measure == 6) ? 3 : 4; if (string -> num_instances > 0) { float * instances = duplicate_float (3*j*string -> num_instances, string -> instances); g_free (string -> instances); string -> instances = allocfloat (3*j*(string -> num_instances+1)); for (i=0; i<3*j*string -> num_instances; i++) { string -> instances[i] = instances[i]; } } else { string -> instances = allocfloat (3*j); } string -> num_instances ++; string -> instances[i] = pos.x; string -> instances[i+1] = pos.y; string -> instances[i+2] = pos.z; if (j > 1) { string -> instances[i+3] = at -> x; string -> instances[i+4] = at -> y; string -> instances[i+5] = at -> z; string -> instances[i+6] = bt -> x; string -> instances[i+7] = bt -> y; string -> instances[i+8] = bt -> z; if (j == 4) { string -> instances[i+9] = ct -> x; string -> instances[i+10] = ct -> y; string -> instances[i+11] = ct -> z; } } } /*! \fn void add_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct) \brief Add a screen string to the list of screen string to render \param text the text to render \param id the label id \param col the color \param pos the position \param lshift label position shift on x, y and z, if any \param at the 1st atom, if any (bond or angle measure string) \param bt the 2nd atom, if any (bond or angle measure string) \param ct the 3rd atom, if any (angle measure string) */ void add_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct) { if (plot -> labels[id].list == NULL) { plot -> labels[id].list = g_malloc0(sizeof*plot -> labels[id].list); plot -> labels[id].list -> last = plot -> labels[id].list; } else { screen_string * s_tring = g_malloc0(sizeof*s_tring); s_tring -> prev = plot -> labels[id].list -> last; s_tring -> id = plot -> labels[id].list -> last -> id + 1; plot -> labels[id].list -> last = s_tring; } plot -> labels[id].list -> last -> word = g_strdup_printf ("%s", text); plot -> labels[id].list -> last -> col = col; plot -> labels[id].list -> last -> type = (id < 3) ? 3 : (type_of_measure == 6) ? 4 : 5; int i; for (i=0; i<3; i++) plot -> labels[id].list -> last -> shift[i] = lshift[i]; add_string_instance (plot -> labels[id].list -> last, pos, at, bt, ct); } /*! \fn void prepare_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct) \brief prepare a screen string to be rendered \param text the text to render \param id the label id \param col the color \param pos the position \param lshift label position shift on x, y and z, if any \param at the 1st atom, if any (bond or angle measure string) \param bt the 2nd atom, if any (bond or angle measure string) \param ct the 3rd atom, if any (angle measure string) */ void prepare_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct) { screen_string * this_string = was_not_rendered_already (text, plot -> labels[id].list); if (this_string == NULL) { add_string (text, id, col, pos, lshift, at, bt, ct); } else { add_string_instance (this_string, pos, at, bt, ct); } } atomes_1.3.1/src/opengl/draw/d_selection.c0000664000175000017500000010057115212624223020155 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_selection.c * @short Functions to prepare the OpenGL rendering of the selected: atom(s), clone(s), bond(s) and clone bond(s) \n Functions to prepare the unique color rendering for picking the atom(s) and bond(s) * @author Sébastien Le Roux */ /* * This file: 'd_selection.c' * * Contains: * - The functions to prepare the OpenGL rendering of the selected: atom(s), clone(s), bond(s) and clone bond(s) - The functions to prepare the unique color rendering for picking the atom(s) and bond(s) * * List of functions: int find_selected_clone_vertices (int style, int at); int find_selected_bond_vertices (int sty, int at, int sp, int bi, int pi, int cap); int get_clone_id (int at, int bt); int render_selected (int style, gboolean cylinder, int caps, int bonds, int ncaps, int type, int clone, int shader); int render_picked (int style, gboolean cylinder, int caps, int bonds, int ncaps, int type, int clone, int shader); int prepare_selection_shaders (int style, int shaders, int clone, int type, gboolean do_bonds); int check_selection (int style, int type); int create_selection_lists (); int create_pick_lists (); void setup_selected_clone_vertices (int style, int at, int pi, float * vertices); void prepare_selected_bond (int sty, int cap, int bi, int pi, atom * at, atom * bt, float * vertices); void setup_all_selected_bond_vertices (int sty, int cap, int bi, int at, int sb, int pi, float * vertices); void prepare_selected (int style, gboolean cylinder, int clone, int type); void prepare_picked (int style, gboolean cylinder, int clone, int type); */ #include "global.h" #include "glview.h" #include "dlp_field.h" extern void create_atom_lists (gboolean to_pick); extern int create_bond_lists (gboolean to_pick); extern object_3d * draw_sphere (int quality); extern object_3d * draw_cylinder (int quality, float ra, float rb); extern object_3d * draw_cylinder_cap (int quality, float rad, gboolean picked); extern float get_bond_radius (int sty, int ac, int at, int b, int sel); extern void setup_this_atom (int style, gboolean to_pick, int picked, atom * at, int ac, float * vert, float al); extern void prepare_clone (int style, gboolean to_pick, int picked, atom at, atom bt, float x, float y, float z, float * vertices); extern void setup_this_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, atom * at, atom * bt, float al, float * vertices); extern object_3d * draw_billboard_quad (void); extern float get_sphere_radius (int style, int sp, int ac, int sel); /*! \fn void setup_selected_clone_vertices (int style, int at, int pi, float * vertices) \brief fill the OpenGL data buffer for a selected atom clone bonds to render \param style rendering style \param at the atom id \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param vertices the OpenGL buffer data to fill */ void setup_selected_clone_vertices (int style, int at, int pi, float * vertices) { int i, j; gboolean doit; distance d; for (i=0; i < proj_gl -> atoms[step][at].numv; i++) { j = proj_gl -> atoms[step][at].vois[i]; d = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][j]); if (d.pbc) { if (in_movie_encoding && plot -> at_data != NULL) { doit = (plot -> at_data[at].pick[pi] && plot -> at_data[at].style == style) ? TRUE : FALSE; } else { doit = (proj_gl -> atoms[0][at].pick[pi] && proj_gl -> atoms[0][at].style == style) ? TRUE : FALSE; } if (doit) { prepare_clone (style, FALSE, pi+1, proj_gl -> atoms[step][at], proj_gl -> atoms[step][j], d.x, d.y, d.z, vertices); } } } } /*! \fn int find_selected_clone_vertices (int style, int at) \brief find the number of selected atom(s) to render \param style rendering style \param at the atom id */ int find_selected_clone_vertices (int style, int at) { int i, j, k; gboolean doit = FALSE; distance d; if (in_movie_encoding && plot -> at_data != NULL) { if (plot -> at_data[at].show[1] && plot -> at_data[at].style == style) doit = TRUE; } else { if (proj_gl -> atoms[step][at].show[1] && proj_gl -> atoms[step][at].style == style) doit = TRUE; } k = 0; if (doit) { for (i=0; i < proj_gl -> atoms[step][at].numv; i++) { j = proj_gl -> atoms[step][at].vois[i]; d = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][j]); if (d.pbc) k ++; } } return k; } /*! \fn int find_selected_bond_vertices (int sty, int at, int sp, int bi, int pi, int cap) \brief find the number of selected bond(s) to render \param sty rendering style \param at the atom id \param sp the chemical species \param bi atom (0) or clone (1) \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param cap render cylinder caps (1/0) */ int find_selected_bond_vertices (int sty, int at, int sp, int bi, int pi, int cap) { int i, j, k, l, m, n; distance dist; gboolean show_a, show_b, show_c, show_d; l = 0; if (in_movie_encoding && plot -> at_data != NULL) { show_a = plot -> at_data[at].show[bi]; show_c = plot -> at_data[at].pick[pi]; m = plot -> at_data[at].style; } else { show_a = proj_gl -> atoms[step][at].show[bi]; show_c = proj_gl -> atoms[step][at].pick[pi]; m = proj_gl -> atoms[step][at].style; } if (show_a && show_c && m == sty) { for (i=0; i atoms[step][at].numv; i++) { j = proj_gl -> atoms[step][at].vois[i]; if (in_movie_encoding && plot -> at_data != NULL) { show_b = plot -> at_data[j].show[bi]; show_d = plot -> at_data[j].pick[pi]; n = plot -> at_data[j].style; k = proj_gl -> atoms[0][j].sp; } else { show_b = proj_gl -> atoms[step][j].show[bi]; show_d = proj_gl -> atoms[step][j].pick[pi]; n = proj_gl -> atoms[step][j].style; k = proj_gl -> atoms[step][j].sp; } if (sp == -1 || k == sp) { dist = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][j]); if ((bi && dist.pbc) ||(! bi && ! dist.pbc)) { if (cap) { if ((! show_b || ! show_d) || (m != n)) l += 1 + bi; } else { l += 1 + bi; } } } } } return 2*l; } /*! \fn int get_clone_id (int at, int bt) \brief get the bond id of cloned bond \param at 1st atom \param bt 2nd atom */ int get_clone_id (int at, int bt) { int i, j, k; for (i=0; i < wingl -> bonds[step][1]; i++) { j = wingl -> bondid[step][1][i][0]; k = wingl -> bondid[step][1][i][1]; if ((j == at && k == bt) || (j == bt && k == at)) return i; } return -1; } /*! \fn void prepare_selected_bond (int sty, int cap, int bi, int pi, atom * at, atom * bt, float * vertices) \brief prepare the rendering of a selected bond \param sty rendering style \param cap render cylinder caps (1/0) \param bi atom (0) or clone (1) \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param at 1st atom \param bt 2nd atom \param vertices the OpenGL buffer data to fill */ void prepare_selected_bond (int sty, int cap, int bi, int pi, atom * at, atom * bt, float * vertices) { if (bi == 0) { setup_this_bond (sty, FALSE, TRUE, cap, bi, pi, at, bt, 1.0, vertices); } else { atom * tmp_a, * tmp_b; distance d = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, at, bt); tmp_a = duplicate_atom (at); tmp_b = duplicate_atom (at); tmp_a -> pick[pi] = bt -> pick[pi]; tmp_a -> style = bt -> style; tmp_a -> sp = bt -> sp + proj_sp; tmp_b -> sp += proj_sp; tmp_a -> x -= d.x; tmp_a -> y -= d.y; tmp_a -> z -= d.z; setup_this_bond (sty, FALSE, TRUE, cap, bi, pi, tmp_b, tmp_a, 0.5, vertices); tmp_a = free_atom (tmp_a); tmp_b = free_atom (tmp_b); tmp_a = duplicate_atom (bt); tmp_b = duplicate_atom (bt); tmp_a -> pick[pi] = at -> pick[pi]; tmp_a -> style = at -> style; tmp_a -> sp = at -> sp + proj_sp; tmp_b -> sp += proj_sp; tmp_a -> id = at -> id; tmp_a -> x += d.x; tmp_a -> y += d.y; tmp_a -> z += d.z; setup_this_bond (sty, FALSE, TRUE, cap, bi, pi, tmp_a, tmp_b, 0.5, vertices); tmp_a = free_atom (tmp_a); tmp_b = free_atom (tmp_b); } } /*! \fn void setup_all_selected_bond_vertices (int sty, int cap, int bi, int at, int sb, int pi, float * vertices) \brief prepare the rendering of all selected bond(s) \param sty rendering style \param cap render cylinder caps (1/0) \param bi atom (0) or clone (1) \param at atom id \param sb target chemical species \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param vertices the OpenGL buffer data to fill */ void setup_all_selected_bond_vertices (int sty, int cap, int bi, int at, int sb, int pi, float * vertices) { int i, j, k, l, m; distance dist; gboolean show_a, show_b, show_c, show_d; if (in_movie_encoding && plot -> at_data != NULL) { show_a = plot -> at_data[at].show[bi]; show_c = plot -> at_data[at].pick[pi]; l = plot -> at_data[at].style; } else { show_a = proj_gl -> atoms[step][at].show[bi]; show_c = proj_gl -> atoms[step][at].pick[pi]; l = proj_gl -> atoms[step][at].style; } if (show_a && show_c && l == sty) { for (i=0; i atoms[step][at].numv; i++) { j = proj_gl -> atoms[step][at].vois[i]; if (in_movie_encoding && plot -> at_data != NULL) { show_b = plot -> at_data[j].show[bi]; show_d = plot -> at_data[j].pick[pi]; m = plot -> at_data[j].style; k = proj_gl -> atoms[0][j].sp; } else { show_b = proj_gl -> atoms[step][j].show[bi]; show_d = proj_gl -> atoms[step][j].pick[pi]; m = proj_gl -> atoms[step][j].style; k = proj_gl -> atoms[step][j].sp; } if (sb == -1 || k == sb) { dist = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][j]); if ((bi && dist.pbc) ||(! bi && ! dist.pbc)) { if (cap) { if ((! show_b || ! show_d) || (l != m)) { prepare_selected_bond (sty, cap, bi, pi, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][j], vertices); } } else { prepare_selected_bond (sty, cap, bi, pi, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][j], vertices); } } } } } } int atoms[NUM_STYLES][2]; int bonds[NUM_STYLES][2], caps[NUM_STYLES][2]; int npbds[NUM_STYLES][2], npcps[NUM_STYLES][2]; int *** sbonds[NUM_STYLES][2]; /*! \fn void prepare_selected (int style, gboolean cylinder, int clone, int type) \brief prepare the list of selected bond(s) to render \param style rendering style \param cylinder cylinder (1) or line (1) \param clone atom (0) or clone (1) \param type 0 = mouse analysis mode, 1 = mouse edition mode */ void prepare_selected (int style, gboolean cylinder, int clone, int type) { int h, i, j; atom_in_selection * sel; npbds[style][type] = npcps[style][type] = 0; if (cylinder) { sel = plot -> selected[type] -> first; while (sel) { for (i=0; i id, -1, i, type, 0); npcps[style][type] += find_selected_bond_vertices (style-1, sel -> id, -1, i, type, 1); } sel = sel -> next; } bonds[style][type] = (npbds[style][type]) ? 1 : 0; caps[style][type] = (npcps[style][type]) ? 1 : 0; } else { sel = plot -> selected[type] -> first; while (sel) { for (i=0; i sp][j] += find_selected_bond_vertices (style-1, sel -> id, j, i, type, 0); } } sel = sel -> next; } for (h=0; h atoms[0][i].pick[type]) { for (h=0; h atoms[0][i].pick[type]) { for (h=0; h atoms[0][i].sp][j] += find_selected_bond_vertices (style-1, i, j, h, type, 0); } } } } for (h=0; h ray_tracing ? draw_billboard_quad () : draw_cylinder (plot -> quality, 1.0, 1.0); cyl -> num_instances = (bonds/2) * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); cyl -> inst_buffer_size = plot -> ray_tracing ? CYLI_BUFF_SIZE + 2 : CYLI_BUFF_SIZE; allocate_instances (cyl); if (caps) { cap = plot -> ray_tracing ? draw_billboard_quad () : draw_cylinder_cap (plot -> quality, 1.0, TRUE); cap -> num_instances = (ncaps/2) * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); cap -> inst_buffer_size = CAPS_BUFF_SIZE; allocate_instances (cap); } for (h=0; h selected[type] -> first; for (j=0; j< plot -> selected[type] -> selected; j++) { for (k=0; k id, k, type, (h == 0) ? cyl -> instances: cap -> instances); } if (sel -> next != NULL) sel = sel -> next; } } } l = 1; const GLchar * vs_sel_cyl = (plot -> ray_tracing) ? cylinder_vertex_ray : cylinder_vertex; const GLchar * fs_sel = (plot -> ray_tracing) ? full_color_ray : full_color; int narray_sel = plot -> ray_tracing ? 8 : 6; wingl -> ogl_glsl[SELEC][step][shader] = init_shader_program (SELEC, GLSL_CYLINDERS, vs_sel_cyl, NULL, fs_sel, GL_TRIANGLE_STRIP, narray_sel, 1, cylinder, cyl); if (caps) { l ++; const GLchar * vs_sel_cap = (plot -> ray_tracing) ? cap_vertex_ray : cap_vertex; GLenum prim_sel_cap = plot -> ray_tracing ? GL_TRIANGLE_STRIP : GL_TRIANGLE_FAN; wingl -> ogl_glsl[SELEC][step][shader+1] = init_shader_program (SELEC, GLSL_CAPS, vs_sel_cap, NULL, fs_sel, prim_sel_cap, 5, 1, cylinder, cap); } } else { l = 0; for (h=0; h vert_buffer_size = LINE_BUFF_SIZE; cyl -> num_vertices = sbonds[style][type][h][i][j] * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); cyl -> vertices = allocfloat (cyl -> vert_buffer_size*cyl -> num_vertices); nbs = 0; sel = plot -> selected[type] -> first; for (k=0; k< plot -> selected[type] -> selected; k++) { if (sel -> sp == i) { setup_all_selected_bond_vertices (style-1, 0, h, sel -> id, j, type, cyl -> vertices); } if (sel -> next != NULL) sel = sel -> next; } wingl -> ogl_glsl[SELEC][step][shader+l] = init_shader_program (SELEC, GLSL_LINES, line_vertex, NULL, line_color, GL_LINES, 2, 1, cylinder, cyl); wingl -> ogl_glsl[SELEC][step][shader+l] -> line_width = get_bond_radius (style, h, i+proj_sp*h, j+proj_sp*h, TRUE); l++; } } } } } return l; } /*! \fn int render_picked (int style, gboolean cylinder, int caps, int bonds, int ncaps, int type, int clone, int shader) \brief prepare the OpenGL rendering data of to be picked bond / clone bond \param style rendering style \param cylinder cylinders (1) or lines (0) \param caps cylinder caps (1/0) \param bonds number of selected bonds \param ncaps number of cylinder caps \param type 0 = mouse analysis mode, 1 = mouse edition mode \param clone atom (0) or clone (1) \param shader shader id number */ int render_picked (int style, gboolean cylinder, int caps, int bonds, int ncaps, int type, int clone, int shader) { int h, i, j, k, l; object_3d * cyl, * cap; if (cylinder) { cyl = (plot -> ray_tracing) ? draw_billboard_quad () : draw_cylinder (plot -> quality, 1.0, 1.0); cyl -> num_instances = (bonds/2) * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); cyl -> inst_buffer_size = plot -> ray_tracing ? CYLI_BUFF_SIZE + 2 : CYLI_BUFF_SIZE; allocate_instances (cyl); if (caps) { cap = (plot -> ray_tracing) ? draw_billboard_quad () : draw_cylinder_cap (plot -> quality, 1.0, TRUE); cap -> num_instances = (ncaps/2) * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); cap -> inst_buffer_size = CAPS_BUFF_SIZE; allocate_instances (cap); } for (h=0; h atoms[0][j].pick[type]) { for (k=0; k instances: cap -> instances); } } } } } l = 1; const GLchar * vs_cyl = (plot -> ray_tracing) ? cylinder_vertex_ray : cylinder_vertex; const GLchar * fs_cyl = (plot -> ray_tracing) ? full_color_ray : full_color; wingl -> ogl_glsl[SELEC][step][shader] = init_shader_program (SELEC, GLSL_CYLINDERS, vs_cyl, NULL, fs_cyl, GL_TRIANGLE_STRIP, 6, 1, cylinder, cyl); if (caps) { l ++; const GLchar * vs_cap = (plot -> ray_tracing) ? cap_vertex_ray : cap_vertex; GLenum prim_cap = (plot -> ray_tracing) ? GL_TRIANGLE_STRIP : GL_TRIANGLE_FAN; wingl -> ogl_glsl[SELEC][step][shader+1] = init_shader_program (SELEC, GLSL_CAPS, vs_cap, NULL, fs_cyl, prim_cap, 5, 1, cylinder, cap); } } else { l = 0; for (h=0; h vert_buffer_size = LINE_BUFF_SIZE; cyl -> num_vertices = sbonds[style][type][h][i][j] * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); cyl -> vertices = allocfloat (cyl -> vert_buffer_size*cyl -> num_vertices); nbs = 0; for (k=0; k atoms[0][k].pick[type] && proj_gl -> atoms[0][k].sp == i) { setup_all_selected_bond_vertices (style-1, 0, h, k, j, type, cyl -> vertices); } } wingl -> ogl_glsl[SELEC][step][shader+l] = init_shader_program (SELEC, GLSL_LINES, line_vertex, NULL, line_color, GL_LINES, 2, 1, cylinder, cyl); wingl -> ogl_glsl[SELEC][step][shader+l] -> line_width = get_bond_radius (style, h, i+proj_sp*h, j+proj_sp*h, TRUE); l++; } } } } } return l; } /*! \fn int prepare_selection_shaders (int style, int shaders, int clone, int type, gboolean do_bonds) \brief prepare selection shaders \param style rendering style \param shaders shader id number \param clone atoms (0) or clones (1) \param type 0 = mouse analysis mode, 1 = mouse edition mode \param do_bonds render bonds (1/0) */ int prepare_selection_shaders (int style, int shaders, int clone, int type, gboolean do_bonds) { int i,j; int nshaders = 0; atom_in_selection * sel; gboolean doit; gboolean sphere = TRUE; gboolean cylinder = FALSE; object_3d * atos; // Atoms if ((style-1 == NONE && (plot -> style == WIREFRAME || plot -> style == PUNT)) || style-1 == WIREFRAME || style-1 == PUNT) sphere = FALSE; if (sphere) { atos = (plot -> ray_tracing) ? draw_billboard_quad () : draw_sphere (plot -> quality); } else { atos = g_malloc0(sizeof*atos); atos -> vert_buffer_size = 3; atos -> num_vertices = 1; atos -> vertices = allocfloat (3); atos -> vertices[0] = atos -> vertices[1] = atos -> vertices[2] = 0.0; } atos -> num_instances = atoms[style][type] * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); atos -> inst_buffer_size = ATOM_BUFF_SIZE; allocate_instances (atos); nbl = 0; if (plot -> selected[type] -> selected) { sel = plot -> selected[type] -> first; for (j=0; j< plot -> selected[type] -> selected; j++) { if (in_movie_encoding && plot -> at_data != NULL) { doit = (plot -> at_data[sel -> id].show[0] && plot -> at_data[sel -> id].style == style-1) ? TRUE : FALSE; } else { doit = (proj_gl -> atoms[step][sel -> id].show[0] && proj_gl -> atoms[step][sel -> id].style == style-1) ? TRUE : FALSE; } if (doit) { setup_this_atom (style-1, FALSE, type+1, & proj_gl -> atoms[step][sel -> id], 0, atos -> instances, 1.0);//0.75); } if (sel -> next != NULL) sel = sel -> next; } if (plot -> draw_clones) { // Clones instances sel = plot -> selected[type] -> first; for (j=0; j< plot -> selected[type] -> selected; j++) { if (proj_gl -> atoms[step][sel -> id].cloned) { setup_selected_clone_vertices (style-1, sel -> id, type, atos -> instances); } if (sel -> next != NULL) sel = sel -> next; } } } else { for (j=0; j at_data != NULL) { doit = (plot -> at_data[j].pick[type] && plot -> at_data[j].show[0] && plot -> at_data[j].style == style-1) ? TRUE : FALSE; } else { doit = (proj_gl -> atoms[step][j].pick[type] && proj_gl -> atoms[step][j].show[0] && proj_gl -> atoms[step][j].style == style-1) ? TRUE : FALSE; } if (doit) { setup_this_atom (style-1, FALSE, type+1, & proj_gl -> atoms[step][j], 0, atos -> instances, 0.75); } } if (plot -> draw_clones) { // Clones instances for (j=0; j atoms[step][j].cloned) setup_selected_clone_vertices (style-1, j, type, atos -> instances); } } } if (sphere) { const GLchar * vs_sel_sph = (plot -> ray_tracing) ? sphere_vertex_ray : sphere_vertex; const GLchar * fs_sel_sph = (plot -> ray_tracing) ? full_color_ray : full_color; wingl -> ogl_glsl[SELEC][step][shaders+nshaders] = init_shader_program (SELEC, GLSL_SPHERES, vs_sel_sph, NULL, fs_sel_sph, GL_TRIANGLE_STRIP, 4, 1, TRUE, atos); } else { wingl -> ogl_glsl[SELEC][step][shaders+nshaders] = init_shader_program (SELEC, GLSL_POINTS, point_vertex, NULL, point_color, GL_POINTS, 4, 1, FALSE, atos); } nshaders ++; // Bonds if (do_bonds) { if (bonds[style][type]) { if ((style-1 == NONE && (plot -> style == BALL_AND_STICK || plot -> style == CYLINDERS)) || style-1 == BALL_AND_STICK || style-1 == CYLINDERS) cylinder = TRUE; if (plot -> selected[type] -> selected > 0) { nshaders += render_selected (style, cylinder, caps[style][type], npbds[style][type], npcps[style][type], type, clone, shaders+nshaders); } else { nshaders += render_picked (style, cylinder, caps[style][type], npbds[style][type], npcps[style][type], type, clone, shaders+nshaders); } for (i=0; i<((plot -> draw_clones) ? 2 : 1); i++) { if (sbonds[style][type][i]) { for (j=0; j selected[type] -> selected) { sel = plot -> selected[type] -> first; for (j=0; j< plot -> selected[type] -> selected; j++) { if (in_movie_encoding && plot -> at_data != NULL) { if (plot -> at_data[sel -> id].show[0] && plot -> at_data[sel -> id].style == style) k ++; } else { if (proj_gl -> atoms[step][sel -> id].show[0] && proj_gl -> atoms[step][sel -> id].style == style) k ++; } if (sel -> next != NULL) sel = sel -> next; } if (plot -> draw_clones) { // Clones instances sel = plot -> selected[type] -> first; for (j=0; j< plot -> selected[type] -> selected; j++) { k += find_selected_clone_vertices (style, sel -> id); if (sel -> next != NULL) sel = sel -> next; } } } else { for (j=0; j atoms[0][j].pick[type] && proj_gl -> atoms[0][j].show[0] && proj_gl -> atoms[0][j].style == style) k ++; } if (plot -> draw_clones) { // Clones instances for (j=0; j atoms[0][j].pick[type]) k += find_selected_clone_vertices (style, j); } } } return k; } /*! \fn int create_selection_lists () \brief prepare the selected atom(s) and bond(s) OpenGL rendering */ int create_selection_lists () { int h, i, j, k, l; #ifdef DEBUG g_debug ("Selected LIST"); #endif gboolean do_bonds; gboolean cylinder = FALSE; cleaning_shaders (wingl, SELEC); wingl -> create_shaders[SELEC] = FALSE; i = (plot -> draw_clones) ? 2 : 1; j = 2; int nshaders = 0; for (k=0; k selected[k] -> selected > 0 || (! k && wingl -> picked > 0)) { for (h=0; h style == PUNT || plot -> style == SPHERES)) || h-1 == PUNT || h-1 == SPHERES) do_bonds = FALSE; atoms[h][k] = check_selection (h-1, k); nshaders += (atoms[h][k]) ? 1 : 0; if (do_bonds) { sbonds[h][k] = alloctint (i, proj_sp, proj_sp); if ((! h && (plot -> style == BALL_AND_STICK || plot -> style == CYLINDERS)) || h-1 == BALL_AND_STICK || h-1 == CYLINDERS) cylinder = TRUE; if (plot -> selected[k] -> selected > 0) { prepare_selected (h, cylinder, i, k); } else { prepare_picked (h, cylinder, i, k); } nshaders += bonds[h][k] + caps[h][k]; } else { sbonds[h][k] = NULL; } } } } if (! nshaders) return 0; wingl -> ogl_glsl[SELEC][step] = g_malloc0(nshaders*sizeof*wingl -> ogl_glsl[SELEC][step]); h = 0; for (k=0; k style == PUNT || plot -> style == SPHERES)) || l-1 == PUNT || l-1 == SPHERES) do_bonds = FALSE; if (plot -> selected[k] -> selected > 0 || (! k && wingl -> picked > 0)) { h += prepare_selection_shaders (l, h, i, k, do_bonds); } } } } return nshaders; } /*! \fn int create_pick_lists () \brief prepare the picking list OpenGL rendering */ int create_pick_lists () { int i, j, k, l; #ifdef DEBUG g_debug ("Pick LIST"); #endif cleaning_shaders (wingl, PICKS); wingl -> create_shaders[PICKS] = FALSE; i = (plot -> draw_clones) ? 2:1; j = 0; for (k=0; k show_atom[k][l]; } } if (j == 0) return 0; k = 0; for (i=0; i at_data != NULL) { k += plot -> at_data[i].show[0]; k += plot -> at_data[i].show[1]; } else { k += proj_gl -> atoms[step][i].show[0]; k += proj_gl -> atoms[step][i].show[1]; } } if (k == 0) return 0; int nshaders = 1; gboolean bonds = FALSE; i = proj_at; if (plot -> draw_clones) i += 2 * wingl -> bonds[step][1]; j = wingl -> bonds[step][0] + wingl -> bonds[step][1]; if (plot -> style != SPHERES && plot -> style != PUNT && j > 0) { bonds = TRUE; nshaders ++; i += 2 * wingl -> bonds[step][0]; if (plot -> draw_clones) i += 4 * wingl -> bonds[step][1]; } int tmp_style = plot -> style; plot -> style = BALL_AND_STICK; if (wingl -> color_to_pick != NULL) { g_free (wingl -> color_to_pick); wingl -> color_to_pick = NULL; } wingl -> to_be_picked = 0; wingl -> color_to_pick = allocint (i); wingl -> n_shaders[PICKS][0] = nshaders; wingl -> ogl_glsl[PICKS][0] = g_malloc0(nshaders*sizeof*wingl -> ogl_glsl[PICKS][0]); gboolean saved_ray = plot -> ray_tracing; plot -> ray_tracing = FALSE; gColorID[0] = gColorID[1] = gColorID[2] = 0; create_atom_lists (TRUE); wingl -> bonds_to_be_picked = 0; if (bonds) create_bond_lists (TRUE); plot -> ray_tracing = saved_ray; plot -> style = tmp_style; return nshaders; } atomes_1.3.1/src/opengl/draw/d_bonds.c0000664000175000017500000006533015212624223017300 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_bonds.c * @short Functions to prepare the OpenGL rendering of bond(s) and clone bond(s) * @author Sébastien Le Roux */ /* * This file: 'd_bonds.c' * * Contains: * - The functions to prepare the OpenGL rendering of bond(s) and clone bond(s) * * List of functions: int cylinder_vertices (int qual); int cylinder_indices (int qual); int cap_vertices (int qual); int cap_indices (int qual); int find_bond_vertices (gboolean to_pick, int sty, int sa, int sb, int bi, int cap); int create_bond_lists (gboolean to_pick); float get_bond_radius (int sty, int ac, int at, int bt, int sel); void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha); void setup_cylinder_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, float delta, float r_sph_a, float r_sph_b); void setup_cap_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, gboolean sel); void setup_this_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, atom * at, atom * bt, float al, float * vertices); void prepare_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, int bid, atom * at, atom * bt, float * vertices); void setup_all_cylinder_vertices (int style, gboolean to_pick, int cap, int bi, float * vertices); void setup_line_vertices (int style, int cap, int bi, int sa, int sb, float * vertices); vec4_t rotate_bond (vec3_t a, vec3_t b); object_3d * draw_cylinder (int quality, float ra, float rb); object_3d * draw_cylinder_cap (int quality, float rad, gboolean picked); */ #include "global.h" #include "glview.h" #include "dlp_field.h" extern object_3d * draw_billboard_quad (void); /* Sphere radius function (declared in d_atoms.c) — needed to fill clip radii */ extern float get_sphere_radius (int style, int sp, int ac, int sel); extern ColRGBA get_atom_color (int i, int j, double al, int picked, gboolean to_picked); extern vec3_t model_position; extern int nbs; /*! \fn int cylinder_vertices (int qual) \brief return the number of OpenGL vertices to render a cylinder \param qual OpenGL quality */ int cylinder_vertices (int qual) { return 2*qual; } /*! \fn int cylinder_indices (int qual) \brief return the number of OpenGL indices to render a cylinder \param qual OpenGL quality */ int cylinder_indices (int qual) { return 2*(qual + 1); } /*! \fn object_3d * draw_cylinder (int quality, float ra, float rb) \brief OpenGL 3D cylinder object rendering \param quality OpenGL quality \param ra cylinder radius at 1st side point \param rb cylinder radius at 2nd side point */ object_3d * draw_cylinder (int quality, float ra, float rb) { int i, j; object_3d * new_cylinder = g_malloc0(sizeof*new_cylinder); new_cylinder -> quality = quality; new_cylinder -> num_vertices = cylinder_vertices (quality); new_cylinder -> vert_buffer_size = 3; new_cylinder -> vertices = allocfloat (3*new_cylinder -> num_vertices); new_cylinder -> num_indices = cylinder_indices (quality); new_cylinder -> ind_buffer_size = 1; new_cylinder -> indices = allocint (cylinder_indices (quality)); float step = 2.0 * pi / (quality-1); float x, y; j = 0; // Vertex for(i = 0; i < quality; i++) { x = cos (i*step); y = sin (i*step); new_cylinder -> vertices[j] = ra*x; new_cylinder -> vertices[j+1] = ra*y; new_cylinder -> vertices[j+2] = 0.5; j += 3; new_cylinder -> vertices[j] = rb*x; new_cylinder -> vertices[j+1] = rb*y; new_cylinder -> vertices[j+2] = -0.5; j += 3; } for (i = 0; i < 2*quality; i++) { new_cylinder -> indices[i] = i % (2*quality-2); } return new_cylinder; } /*! \fn int cap_vertices (int qual) \brief return the number of OpenGL vertices to render a cylinder cap \param qual OpenGL quality */ int cap_vertices (int qual) { return qual + 1; } /*! \fn int cap_indices (int qual) \brief return the number of OpenGL indices to render a cylinder cap \param qual OpenGL quality */ int cap_indices (int qual) { return qual + 2; } /*! \fn object_3d * draw_cylinder_cap (int quality, float rad, gboolean picked) \brief OpenGL 3D cylinder cap object rendering \param quality OpenGL quality \param rad cylinder radius \param picked is the bond selected (1) or not (0) */ object_3d * draw_cylinder_cap (int quality, float rad, gboolean picked) { int i, j; object_3d * new_cap = g_malloc0(sizeof*new_cap); new_cap -> quality = quality; new_cap -> num_vertices = cap_vertices(quality); new_cap -> vert_buffer_size = 3; new_cap -> vertices = allocfloat (3*new_cap -> num_vertices); new_cap -> num_indices = cap_indices(quality); new_cap -> ind_buffer_size = 1; new_cap -> indices = allocint (new_cap -> num_indices); float delta = (picked) ? 0.05 : 0.0; float step = 2.0 * pi / (quality - 1); float x, y; j = 0; // Center new_cap -> vertices[j] = 0.0; new_cap -> vertices[j+1] = 0.0; new_cap -> vertices[j+2] = - delta; j += 3; for(i = 0; i < quality; i++) { x = cos (i*step); y = sin (i*step); new_cap -> vertices[j] = rad*x; new_cap -> vertices[j+1] = rad*y; new_cap -> vertices[j+2] = 0.0 - delta; j += 3; } for (i=0; i <= quality; i++) { new_cap -> indices[i] = i % (quality + 1); } return new_cap; } /*! \fn vec4_t rotate_bond (vec3_t a, vec3_t b) \brief rotate a bond based on the proper orientation \param a 1st atom position \param b 2nd atom position */ vec4_t rotate_bond (vec3_t a, vec3_t b) { vec3_t c, f, raxis; c = v3_sub (vec3(b.x, b.y, b.z), vec3(a.x, a.y, a.z)); f = vec3 (0.0, 0.0, 1.0); double rangle; raxis = v3_cross (f, c); //rangle = 180.0 / pi * acos(v3_dot(f, c) / v3_length(c)); rangle = acos(v3_dot(f, c) / v3_length(c)); return axis_to_quat (raxis, rangle); } /*! \fn float get_bond_radius (int sty, int ac, int at, int bt, int sel) \brief get bond (clone bond) radius \param sty the rendering style \param ac atom (0) or clone (1) \param at 1st chemical species \param bt 2nd chemical species \param sel is the bond selected (1) or not (0) */ float get_bond_radius (int sty, int ac, int at, int bt, int sel) { if (sty == BALL_AND_STICK) { return plot -> bondrad[at][bt] + 0.05*sel; } else if (sty == CYLINDERS) { return plot -> radall[ac] + 0.05*sel; } else { return plot -> linerad[at][bt] + 4.0*sel; } } /*! \fn void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha) \brief fill the OpenGL data buffer for a line bond (or clone bond) to render \param vertices the OpenGL buffer to fill \param pos the position vector \param col the color \param alpha the opacity (atom: 1.0, clone: 0.5) */ void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha) { int s = nbs*LINE_BUFF_SIZE; vertices[s] = pos.x; vertices[s+1] = pos.y; vertices[s+2] = pos.z; vertices[s+3] = col.red; vertices[s+4] = col.green; vertices[s+5] = col.blue; vertices[s+6] = col.alpha * alpha; nbs ++; } /*! \fn void setup_cylinder_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, float delta, float r_sph_a, float r_sph_b) \brief fill the OpenGL data buffer for a cylinder bond (or clone bond) to render \param vertices the OpenGL buffer to fill \param pos_a 1st atom position \param pos_b 2nd atom position \param col the color \param rad the radius \param alpha the opacity (atom: 1.0, clone: 0.5) \param delta length correction if atom(s) are shown \param r_sph_a sphere radius at the atom side (for in-sphere clipping in the frag shader) \param r_sph_b sphere radius at the midpoint side (0.0 for a bond half, > 0 for axis cylinders) */ void setup_cylinder_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, float delta, float r_sph_a, float r_sph_b) { int cbs = (plot -> ray_tracing) ? CYLI_BUFF_SIZE + 2 : CYLI_BUFF_SIZE; int s = nbs*cbs; vertices[s] = (pos_a.x + pos_b.x)/2.0; vertices[s+1] = (pos_a.y + pos_b.y)/2.0; vertices[s+2] = (pos_a.z + pos_b.z)/2.0; vertices[s+3] = v3_length(v3_sub(pos_a, pos_b)) + delta; vertices[s+4] = rad; vec4_t quat = rotate_bond (pos_b, pos_a); vertices[s+5] = quat.w; vertices[s+6] = quat.x; vertices[s+7] = quat.y; vertices[s+8] = quat.z; vertices[s+9] = col.red; vertices[s+10] = col.green; vertices[s+11] = col.blue; vertices[s+12] = col.alpha * alpha; if (r_sph_a > 0.0) { vertices[s+13] = r_sph_a; /* sphere clip radius at pos_a endpoint */ vertices[s+14] = r_sph_b; /* sphere clip radius at pos_b endpoint (0.0 for half-bonds) */ } nbs ++; } /*! \fn void setup_cap_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, gboolean sel) \brief fill the OpenGL data buffer for a cylinder cap bond (or clone bond) to render \param vertices the OpenGL buffer to fill \param pos_a initial atom position vector \param pos_b cap center position vector \param col the color \param rad the radius \param alpha the opacity (atom: 1.0, clone: 0.5) \param sel selected half bond (1/0) */ void setup_cap_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, gboolean sel) { int s = nbs*CAPS_BUFF_SIZE; vec3_t dir = (sel) ? v3_norm (v3_sub(pos_a, pos_b)) : vec3(0.0, 0.0, 0.0); vertices[s] = pos_b.x - 0.05*dir.x; vertices[s+1] = pos_b.y - 0.05*dir.y; vertices[s+2] = pos_b.z - 0.05*dir.z; vertices[s+3] = rad; vec4_t quat = rotate_bond (pos_b, pos_a); vertices[s+4] = quat.w; vertices[s+5] = quat.x; vertices[s+6] = quat.y; vertices[s+7] = quat.z; vertices[s+8] = col.red; vertices[s+9] = col.green; vertices[s+10] = col.blue; vertices[s+11] = col.alpha * alpha; nbs ++; } int vs_bid; /*! \fn void setup_this_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, atom * at, atom * bt, float al, float * vertices) \brief prepare the OpenGL rendering data of a bond / clone bond \param sty rendering style \param to_pick to pick (1) or to draw (0) \param picked is the bond selected (1) or not (0) \param cap draw cylinder cap (1/0) \param bi atom (0) or clone (1) visible \param pi atom (0) or clone (1) picked \param at 1st atom \param bt 2nd atom \param al the opacity (bond: 1.0, clone bond: 0.5) \param vertices the OpenGL buffer data to fill */ void setup_this_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, atom * at, atom * bt, float al, float * vertices) { float alpha = 1.0; float delta = 0.0; float shift[3]; int p, q, r; vec3_t pos_a, pos_b; ColRGBA col = get_atom_color (at -> sp, at -> id, 1.0, (picked) ? pi + 1 : 0, to_pick); float rad = get_bond_radius ((to_pick) ? BALL_AND_STICK : (sty == NONE) ? plot -> style : sty, bi, at -> sp, bt -> sp, (picked) ? 1.0 : 0.0); if (picked) { gboolean show_a, show_b; int sta, stb; if (in_movie_encoding && plot -> at_data != NULL) { show_a = plot -> at_data[bt -> id].show[bi]; show_b = plot -> at_data[bt -> id].pick[pi]; sta = plot -> at_data[at -> id].style; stb = plot -> at_data[bt -> id].style; } else { show_a = bt -> show[bi]; show_b = bt -> pick[pi]; sta = at -> style; stb = bt -> style; } delta = ((show_a && show_b) && (sta == stb)) ? 0.0 : 0.1; } for (p=0; p abc -> extra_cell[0]+1;p++) { for (q=0; q abc -> extra_cell[1]+1; q++) { for (r=0; r abc -> extra_cell[2]+1; r++) { shift[0]=p*box_gl -> vect[0][0]+q*box_gl -> vect[1][0]+r*box_gl -> vect[2][0]; shift[1]=p*box_gl -> vect[0][1]+q*box_gl -> vect[1][1]+r*box_gl -> vect[2][1]; shift[2]=p*box_gl -> vect[0][2]+q*box_gl -> vect[1][2]+r*box_gl -> vect[2][2]; at_shift (at, shift); at_shift (bt, shift); pos_a = vec3(at -> x, at -> y, at -> z); pos_b = vec3((at -> x + bt -> x)/2.0, (at -> y + bt -> y)/2.0, (at -> z + bt -> z)/2.0); if (to_pick || ((sty == NONE && (plot -> style == BALL_AND_STICK || plot -> style == CYLINDERS)) || sty == BALL_AND_STICK || sty == CYLINDERS)) { if (cap) { setup_cap_vertice (vertices, pos_a, pos_b, col, rad, alpha*al, (plot -> ray_tracing && delta > 0.0) ? TRUE : FALSE); } else { float r_sph = (plot -> ray_tracing) ? get_sphere_radius ((sty == NONE) ? plot -> style : sty, at -> sp, bi, 0) : 0.0f; setup_cylinder_vertice (vertices, pos_a, pos_b, col, rad, (to_pick) ? 1.0 : alpha*al, delta, r_sph, 0.0f); } } else { setup_line_vertice (vertices, pos_a, col, alpha*al); setup_line_vertice (vertices, pos_b, col, alpha*al); } at_unshift (at, shift); at_unshift (bt, shift); alpha = 0.5; } } } } /*! \fn void prepare_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, int bid, atom * at, atom * bt, float * vertices) \brief prepare a bond OpenGL rendering \param sty rendering style \param to_pick to pick (1) or to draw (0) \param picked is the atom selected (1) or not (0) \param cap draw cylinder cap \param bi atom (0) or clone (1) visible \param pi atom (0) or clone (1) picked \param bid bond id \param at 1st atom \param bt 2nd atom \param vertices the OpenGL buffer data to fill */ void prepare_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, int bid, atom * at, atom * bt, float * vertices) { if (bi == 0) { setup_this_bond (sty, to_pick, picked, cap, bi, pi, at, bt, 1.0, vertices); } else { atom * tmp_a, * tmp_b; float x, y, z; int sign; sign = 1; if (wingl -> bondid[step][1][bid][0] == at -> id) sign = -1; x = wingl -> clones[step][bid].x; y = wingl -> clones[step][bid].y; z = wingl -> clones[step][bid].z; tmp_a = duplicate_atom (at); tmp_b = duplicate_atom (at); tmp_a -> pick[pi] = bt -> pick[pi]; tmp_a -> style = bt -> style; tmp_a -> sp = bt -> sp + proj_sp; tmp_b -> sp += proj_sp; tmp_a -> x += sign * x; tmp_a -> y += sign * y; tmp_a -> z += sign * z; setup_this_bond (sty, to_pick, picked, cap, bi, pi, tmp_b, tmp_a, 0.5, vertices); tmp_a = free_atom (tmp_a); tmp_b = free_atom (tmp_b); tmp_a = duplicate_atom (bt); tmp_b = duplicate_atom (bt); tmp_a -> pick[pi] = at -> pick[pi]; tmp_a -> style = at -> style; tmp_a -> sp = at -> sp + proj_sp; tmp_b -> sp += proj_sp; tmp_a -> id = at -> id; tmp_a -> x -= sign * x; tmp_a -> y -= sign * y; tmp_a -> z -= sign * z; setup_this_bond (sty, to_pick, picked, cap, bi, pi, tmp_a, tmp_b, 0.5, vertices); tmp_a = free_atom (tmp_a); tmp_b = free_atom (tmp_b); } } /*! \fn int find_bond_vertices (gboolean to_pick, int sty, int sa, int sb, int bi, int cap) \brief find bond(s) and clone bond(s) to render \param to_pick to pick (1) or to draw (0) \param sty rendering style \param sa 1st chemical species \param sb 2nd chemical species \param bi bond (0) or clone bond (1) \param cap draw cylinder cap (1/0) */ int find_bond_vertices (gboolean to_pick, int sty, int sa, int sb, int bi, int cap) { int i, j, k, l, m, n; gboolean show_a, show_b; l = 0; for (i=0; i < wingl -> bonds[step][bi]; i++) { j = wingl -> bondid[step][bi][i][0]; k = wingl -> bondid[step][bi][i][1]; if (in_movie_encoding && plot -> at_data != NULL) { show_a = plot -> at_data[j].show[bi]; m = plot -> at_data[j].style; show_b = plot -> at_data[k].show[bi]; n = plot -> at_data[k].style; } else { show_a = proj_gl -> atoms[step][j].show[bi]; m = proj_gl -> atoms[step][j].style; show_b = proj_gl -> atoms[step][k].show[bi]; n = proj_gl -> atoms[step][k].style; } if (proj_gl -> atoms[step][j].sp == sa && proj_gl -> atoms[step][k].sp == sb) { if (show_a && (m == sty || to_pick)) { if (cap) { if (! show_b || n != sty) l += 1 + bi; } else { l += 1 + bi; } } } if (proj_gl -> atoms[step][j].sp == sb && proj_gl -> atoms[step][k].sp == sa) { if (show_b && (n == sty || to_pick)) { if (cap) { if (! show_a || m != sty) l += 1 + bi; } else { l += 1 + bi; } } } } return 2*l; } /*! \fn void setup_all_cylinder_vertices (int style, gboolean to_pick, int cap, int bi, float * vertices) \brief prepare cylinder bond(s) and clone bond(s) to render \param style rendering style \param to_pick to pick (1) or to draw (0) \param cap draw cylinder cap (1/0) \param bi bond (0) or clone bond (1) \param vertices the OpenGL data buffer to fill */ void setup_all_cylinder_vertices (int style, gboolean to_pick, int cap, int bi, float * vertices) { int i, j, k, l, m; gboolean show_a, show_b; for (i=0; i < wingl -> bonds[step][bi]; i++) { j = wingl -> bondid[step][bi][i][0]; k = wingl -> bondid[step][bi][i][1]; if (in_movie_encoding && plot -> at_data != NULL) { show_a = plot -> at_data[j].show[bi]; l = plot -> at_data[j].style; show_b = plot -> at_data[k].show[bi]; m = plot -> at_data[k].style;; } else { show_a = proj_gl -> atoms[step][j].show[bi]; l = proj_gl -> atoms[step][j].style; show_b = proj_gl -> atoms[step][k].show[bi]; m = proj_gl -> atoms[step][k].style; } if (show_a && (l == style || to_pick)) { if (cap) { if (! show_b || m != style) prepare_bond (style, to_pick, FALSE, cap, bi, 0, i, & proj_gl -> atoms[step][j], & proj_gl -> atoms[step][k], vertices); } else { prepare_bond (style, to_pick, FALSE, cap, bi, 0, i, & proj_gl -> atoms[step][j], & proj_gl -> atoms[step][k], vertices); } } if (show_b && (m == style || to_pick)) { if (cap) { if (! show_a || l != style) prepare_bond (style, to_pick, FALSE, cap, bi, 0, i, & proj_gl -> atoms[step][k], & proj_gl -> atoms[step][j], vertices); } else { prepare_bond (style, to_pick, FALSE, cap, bi, 0, i, & proj_gl -> atoms[step][k], & proj_gl -> atoms[step][j], vertices); } } } } /*! \fn void setup_line_vertices (int style, int cap, int bi, int sa, int sb, float * vertices) \brief prepare line bond(s) and clone bond(s) to render \param style rendering style \param cap draw cylinder cap (1/0) \param bi bond (0) or clone bond (1) \param sa 1st chemical species \param sb 2nd chemical species \param vertices the OpenGL buffer to fill */ void setup_line_vertices (int style, int cap, int bi, int sa, int sb, float * vertices) { int i, j, k, l, m; gboolean show_a, show_b; for (i=0; i < wingl -> bonds[step][bi]; i++) { j = wingl -> bondid[step][bi][i][0]; k = wingl -> bondid[step][bi][i][1]; if (in_movie_encoding && plot -> at_data != NULL) { show_a = plot -> at_data[j].show[bi]; l = plot -> at_data[j].style; show_b = plot -> at_data[k].show[bi]; m = plot -> at_data[k].style; } else { show_a = proj_gl -> atoms[step][j].show[bi]; l = proj_gl -> atoms[step][j].style; show_b = proj_gl -> atoms[step][k].show[bi]; m = proj_gl -> atoms[step][k].style; } if (proj_gl -> atoms[step][j].sp == sa && proj_gl -> atoms[step][k].sp == sb) { if (show_a && l == style) { prepare_bond (style, FALSE, FALSE, cap, bi, 0, i, & proj_gl -> atoms[step][j], & proj_gl -> atoms[step][k], vertices); } } if (proj_gl -> atoms[step][j].sp == sb && proj_gl -> atoms[step][k].sp == sa) { if (show_b && m == style) { prepare_bond (style, FALSE, FALSE, cap, bi, 0, i, & proj_gl -> atoms[step][k], & proj_gl -> atoms[step][j], vertices); } } } } /*! \fn int create_bond_lists (gboolean to_pick) \brief prepare bond(s) and clone bond(s) OpenGL rendering \param to_pick to pick (1) or to draw (0) */ int create_bond_lists (gboolean to_pick) { int nshaders = 0; int **** nbonds; int **** ncaps; int nbds[NUM_STYLES]; int ncap[NUM_STYLES]; object_3d * cyl, * cap; int f, g, h, i, j, k, l, m; if (! to_pick) { cleaning_shaders (wingl, BONDS); wingl -> create_shaders[BONDS] = FALSE; } g = (plot -> draw_clones) ? 2 : 1; nbonds = allocqint (NUM_STYLES, g, proj_sp, proj_sp); if (! to_pick) ncaps = allocqint (NUM_STYLES, g, proj_sp, proj_sp); for (f=0; f style != SPHERES && plot -> style != PUNT)) || (f && f-1 != SPHERES && f-1 != PUNT)) { for (h=0; h 0) l ++; if (! to_pick && ((! f && (plot -> style == BALL_AND_STICK || plot -> style == CYLINDERS)) || (f && (f-1 == BALL_AND_STICK || f-1 == CYLINDERS)))) { ncaps[f][h][i][j] = find_bond_vertices (to_pick, f-1, i, j, h, 1); m += ncaps[f][h][i][j]; } } } } nbds[f] = k; ncap[f] = m; if (to_pick || (((! f && (plot -> style == BALL_AND_STICK || plot -> style == CYLINDERS)) || (f && (f-1 == BALL_AND_STICK || f-1 == CYLINDERS))))) { if (k > 0) { nshaders ++; if (m > 0 && ! to_pick) nshaders ++; } } else { nshaders += l; } } if (to_pick) break; } #ifdef DEBUG g_debug ("Bond LIST:: to_pick= %s, shaders= %d", (to_pick) ? "true" : "false", nshaders); #endif if (nshaders == 0) return nshaders; if (! to_pick) wingl -> ogl_glsl[BONDS][step] = g_malloc0(nshaders*sizeof*wingl -> ogl_glsl[BONDS][step]); l = 0; for (f=0; f style == BALL_AND_STICK || plot -> style == CYLINDERS)) || (f && (f-1 == BALL_AND_STICK || f-1 == CYLINDERS))) { cyl = (plot -> ray_tracing) ? draw_billboard_quad () : draw_cylinder (plot -> quality, 1.0, 1.0); cyl -> num_instances = (nbds[f]/2) * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); /* Unreal mode: extend instance buffer by 2 floats per instance for sphere clip radii */ cyl -> inst_buffer_size = (plot -> ray_tracing) ? CYLI_BUFF_SIZE + 2 : CYLI_BUFF_SIZE; allocate_instances (cyl); nbs = 0; for (h=0; h instances); if (to_pick && h==0) wingl -> bonds_to_be_picked = wingl -> to_be_picked; } if (! to_pick) { const GLchar * vs_cyl = (plot -> ray_tracing) ? cylinder_vertex_ray : cylinder_vertex; const GLchar * fs_cyl = (plot -> ray_tracing) ? full_color_ray : full_color; /* narray=8 in ray_tracing mode to allocate slots for r_sphere_a/b attributes */ int narray_cyl = plot -> ray_tracing ? 8 : 6; wingl -> ogl_glsl[BONDS][step][l] = init_shader_program (BONDS, GLSL_CYLINDERS, vs_cyl, NULL, fs_cyl, GL_TRIANGLE_STRIP, narray_cyl, 1, TRUE, cyl); l ++; if (ncap[f] > 0) { cap = (plot -> ray_tracing) ? draw_billboard_quad () : draw_cylinder_cap (plot -> quality, 1.0, FALSE); cap -> num_instances = (ncap[f]/2) * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); cap -> inst_buffer_size = CAPS_BUFF_SIZE; allocate_instances (cap); nbs = 0; for (h=0; h instances); } const GLchar * vs_cap = (plot -> ray_tracing) ? cap_vertex_ray : cap_vertex; GLenum prim_cap = (plot -> ray_tracing) ? GL_TRIANGLE_STRIP : GL_TRIANGLE_FAN; wingl -> ogl_glsl[BONDS][step][l] = init_shader_program (BONDS, GLSL_CAPS, vs_cap, NULL, fs_cyl, prim_cap, 5, 1, TRUE, cap); l ++; } } else { wingl -> ogl_glsl[PICKS][0][1] = init_shader_program (PICKS, GLSL_CYLINDERS, cylinder_vertex, NULL, full_color, GL_TRIANGLE_STRIP, 6, 1, FALSE, cyl); } } else if ((! f && (plot -> style != SPHERES && plot -> style != PUNT)) || (f && f-1 != SPHERES && f-1 != PUNT)) { for (h=0; h vert_buffer_size = LINE_BUFF_SIZE; cyl -> num_vertices = nbonds[f][h][i][j] * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); cyl -> vertices = allocfloat (cyl -> vert_buffer_size*cyl -> num_vertices); nbs = 0; setup_line_vertices (f-1, 0, h, i, j, cyl -> vertices); wingl -> ogl_glsl[BONDS][step][l] = init_shader_program (BONDS, GLSL_LINES, line_vertex, NULL, line_color, GL_LINES, 2, 1, FALSE, cyl); wingl -> ogl_glsl[BONDS][step][l] -> line_width = get_bond_radius (WIREFRAME, h, i+proj_sp*h, j+proj_sp*h, FALSE); l++; } } } } } } if (to_pick) break; } for (f=0; f Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_label.c * @short Functions to prepare the OpenGL rendering of the atomic label(s) * @author Sébastien Le Roux */ /* * This file: 'd_label.c' * * Contains: * - The functions to prepare the OpenGL rendering of the atomic label(s) * * List of functions: int create_label_lists (); void prepare_label (atom at, int id, double al); void clean_labels (int id); mat4_t create_label_matrices (); */ #include "global.h" #include "glview.h" #include "interface.h" #include "dlp_field.h" extern ColRGBA init_color (int id, int numid); extern ColRGBA get_atom_color (int i, int j, double al, int picked, gboolean to_pick); extern float get_sphere_radius (int style, int sp, int ac, int sel); /*! \fn mat4_t create_label_matrices () \brief create label projection matrices */ mat4_t create_label_matrices () { return m4_ortho (0.0, wingl -> view_port.y, 0.0, wingl -> view_port.z, 1.0, 0.0); } /*! \fn void prepare_label (atom at, int id, double al) \brief prepare an atomic label OpenGL rendering \param at the atom to label \param id the label id \param al opacity */ void prepare_label (atom at, int id, double al) { int k, l; char * str = NULL; char * tmp = NULL; float shift[3]; ColRGBA lcol; k = at.sp; double rad = get_sphere_radius ((at.style == NONE) ? plot -> style : at.style, k, id, (at.pick[0] || at.pick[1])); if (at.style == CYLINDERS || (plot -> style == CYLINDERS && at.style == NONE)) rad += (at.pick[0] || at.pick[1]) ? 0.9 : 1.0; for (l=0; l<3; l++) shift[l] = plot -> labels[id].shift[l]; shift[2] += rad; if (field_color && (field_object < 7 || field_object > 14)) { lcol = init_color (at.coord[4], num_field_objects); lcol.alpha = al*0.75; } else if (plot -> labels[id].color == NULL) { lcol = get_atom_color (k+id*proj_sp, at.id, al, 0, FALSE); } else { lcol = (plot -> labels[id].n_colors) ? plot -> labels[id].color[0] : plot -> labels[id].color[k]; lcol.alpha = al; } switch (plot -> acl_format[id]) { case ELEMENT_NAME: str = g_strdup_printf ("%s", exact_name(proj_gl -> chemistry -> element[k])); break; case SYMBOL: str = g_strdup_printf ("%s", exact_name(proj_gl -> chemistry -> label[k])); break; case SYMBOL_AND_NUM: str = g_strdup_printf ("%s%d", exact_name(proj_gl -> chemistry -> label[k]), at.id+1); break; case SYMBOL_AND_IND: str = g_strdup_printf ("%s%d", exact_name(proj_gl -> chemistry -> label[k]), at.id+1); break; case NUM: str = g_strdup_printf ("%d", at.id+1); break; case ID_IN_MOLECULE: if (field_object == 0) { str = g_strdup_printf ("%s%d", exact_name(proj_gl -> chemistry -> label[k]), at.id+1); } else { str = g_strdup_printf ("%s%d", exact_name(proj_gl -> chemistry -> label[k]), at.coord[4]+1); } break; default: str = g_strdup_printf ("%s%d", exact_name(proj_gl -> chemistry -> label[k]), at.id+1); break; } if (id) { tmp = g_strdup_printf ("%s*", str); g_free (str); str = g_strdup_printf ("%s", tmp); g_free (tmp); } prepare_string (str, id, lcol, vec3(at.x, at.y, at.z), shift, NULL, NULL, NULL); g_free (str); } /*! \fn void clean_labels (int id) \brief clean atomic label shaders \param id label id */ void clean_labels (int id) { if (plot -> labels[id].list != NULL) { g_free (plot -> labels[id].list); plot -> labels[id].list = NULL; } } /*! \fn int create_label_lists () \brief prepare atomic label(s) OpenGL rendering */ int create_label_lists () { int nshaders = 0; int i, j, k; float x, y, z; atom ato; #ifdef DEBUG g_debug ("Label LIST"); #endif cleaning_shaders (wingl, LABEL); wingl -> create_shaders[LABEL] = FALSE; clean_labels (0); clean_labels (1); if (in_movie_encoding && plot -> at_data != NULL) { for (i=0; i at_data[i].show[0] && plot -> at_data[i].label[0]) { prepare_label (proj_gl -> atoms[step][i], 0, 1.0); } } if (plot -> draw_clones) { for (i=0; i < wingl -> bonds[step][1]; i++) { x = wingl -> clones[step][i].x; y = wingl -> clones[step][i].y; z = wingl -> clones[step][i].z; j = wingl -> bondid[step][1][i][0]; k = wingl -> bondid[step][1][i][1]; ato.x = proj_gl -> atoms[step][j].x - x; ato.y = proj_gl -> atoms[step][j].y - y; ato.z = proj_gl -> atoms[step][j].z - z; ato.sp = proj_gl -> atoms[step][j].sp; ato.id = k; ato.pick[0] = plot -> at_data[k].pick[0]; ato.pick[1] = plot -> at_data[k].pick[1]; ato.style = plot -> at_data[k].style; if (plot -> at_data[k].show[1] && plot -> at_data[k].label[1]) prepare_label (ato, 1, 0.75); ato.x = proj_gl -> atoms[step][k].x + x; ato.y = proj_gl -> atoms[step][k].y + y; ato.z = proj_gl -> atoms[step][k].z + z; ato.sp = proj_gl -> atoms[step][k].sp; ato.id = j; ato.pick[0] = plot -> at_data[j].pick[0]; ato.pick[1] = plot -> at_data[j].pick[1]; ato.style = plot -> at_data[j].style; if (plot -> at_data[j].show[1] && plot -> at_data[j].label[1]) prepare_label (ato, 1, 0.75); } } } else { for (i=0; i atoms[step][i].show[0] && proj_gl -> atoms[step][i].label[0]) { prepare_label (proj_gl -> atoms[step][i], 0, 1.0); } } if (plot -> draw_clones) { for (i=0; i < wingl -> bonds[step][1]; i++) { x = wingl -> clones[step][i].x; y = wingl -> clones[step][i].y; z = wingl -> clones[step][i].z; j = wingl -> bondid[step][1][i][0]; k = wingl -> bondid[step][1][i][1]; ato.x = proj_gl -> atoms[step][j].x - x; ato.y = proj_gl -> atoms[step][j].y - y; ato.z = proj_gl -> atoms[step][j].z - z; ato.sp = proj_gl -> atoms[step][k].sp; ato.id = k; ato.pick[0] = proj_gl -> atoms[step][k].pick[0]; ato.pick[1] = proj_gl -> atoms[step][k].pick[1]; ato.style = proj_gl -> atoms[step][k].style; if (proj_gl -> atoms[step][k].show[1] && proj_gl -> atoms[step][k].label[1]) prepare_label (ato, 1, 0.75); ato.x = proj_gl -> atoms[step][k].x + x; ato.y = proj_gl -> atoms[step][k].y + y; ato.z = proj_gl -> atoms[step][k].z + z; ato.sp = proj_gl -> atoms[step][j].sp; ato.id = j; ato.pick[0] = proj_gl -> atoms[step][j].pick[0]; ato.pick[1] = proj_gl -> atoms[step][j].pick[1]; ato.style = proj_gl -> atoms[step][j].style; if (proj_gl -> atoms[step][j].show[1] && proj_gl -> atoms[step][j].label[1]) prepare_label (ato, 1, 0.75); } } } if (plot -> labels[0].list != NULL || plot -> labels[1].list != NULL) { nshaders = 0; if (plot -> labels[0].list != NULL) nshaders += (plot -> labels[0].render + 1) * (plot -> labels[0].list -> last -> id + 1); if (plot -> draw_clones && plot -> labels[1].list != NULL) { nshaders += (plot -> labels[1].render + 1) * (plot -> labels[1].list -> last -> id + 1); } wingl -> ogl_glsl[LABEL][0] = g_malloc0(nshaders*sizeof*wingl -> ogl_glsl[LABEL][0]); for (i=0; i<2; i++) render_all_strings (LABEL, i); } return nshaders; } atomes_1.3.1/src/opengl/draw/d_poly.c0000664000175000017500000004773115212624223017163 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_poly.c * @short Functions to prepare the OpenGL rendering of coordination polyhedra * @author Sébastien Le Roux */ /* * This file: 'd_poly.c' * * Contains: * - The functions to prepare the OpenGL rendering of coordination polyhedra * * List of functions: int is_atom_cloned (int at); gboolean is_inside (vec3_t p, float * mi, float * ma); gboolean is_in_triangle (vec3_t p, vec3_t a, vec3_t b, vec3_t c); gboolean check_it (int i, int j, int k, int l); void setup_summit (float * vertices, vec3_t s, vec3_t n); void setup_triangles (float * vertices, vec3_t sa, vec3_t sb, vec3_t sc); void setup_polyhedron (float * vertices, GLfloat ** xyz, int s); void setup_tetra (float * vertices, vec3_t a, vec3_t b, vec3_t c, vec3_t d); void setup_tetrahedron (float * vertices, GLfloat ** xyz); void get_centroid (GLfloat ** xyz, int id); void check_triangles (int s, GLfloat ** xyz); void prepare_poly_gl (float * vertices, atom at, int c); void create_poly_lists (); vec3_t get_triangle_normal (vec3_t v1, vec3_t v2, vec3_t v3); */ #include "global.h" #include "glview.h" #include "color_box.h" #include "dlp_field.h" gboolean * do_gl; vec3_t centroid; ColRGBA pcol; extern int nbs, nbl, nba; float the_sign; float poly_alpha; /*! \fn void setup_summit (float * vertices, vec3_t s, vec3_t n) \brief prepare the polygon summit to render \param vertices the OpenGL data buffer to fill \param s position vector \param n normal vector */ void setup_summit (float * vertices, vec3_t s, vec3_t n) { int val = nba*POLY_BUFF_SIZE; vertices[val] = s.x; vertices[val+1] = s.y; vertices[val+2] = s.z; vertices[val+3] = n.x; vertices[val+4] = n.y; vertices[val+5] = n.z; vertices[val+6] = pcol.red; vertices[val+7] = pcol.green; vertices[val+8] = pcol.blue; vertices[val+9] = pcol.alpha * poly_alpha; nba ++; } /*! \fn vec3_t get_triangle_normal (vec3_t v1, vec3_t v2, vec3_t v3) \brief compute triangle normal vector \param v1 1st summit \param v2 2nd summit \param v3 3rd summit */ vec3_t get_triangle_normal (vec3_t v1, vec3_t v2, vec3_t v3) { vec3_t edge_a = v3_sub(v3, v1); vec3_t edge_b = v3_sub(v2, v1); vec3_t normal = v3_norm (v3_cross(edge_a, edge_b)); vec3_t plane = v3_add (v1, v3_add(v2, v3)); plane = v3_divs (plane, 3.0); float sign = 1.0; if (v3_dot (v3_sub(plane,centroid), normal) < 0) { sign = -1.0; } return v3_muls (normal, sign); } /*! \fn void setup_triangles (float * vertices, vec3_t sa, vec3_t sb, vec3_t sc) \brief setup triangle vertices \param vertices \param sa 1st summit \param sb 2nd summit \param sc 3rd summit */ void setup_triangles (float * vertices, vec3_t sa, vec3_t sb, vec3_t sc) { vec3_t normal = get_triangle_normal (sa, sb, sc); setup_summit (vertices, sa, normal); setup_summit (vertices, sb, normal); setup_summit (vertices, sc, normal); } /*vec3_t get_summit_normal (vec3_t va, vec3_t vb, vec3_t vc, vec3_t vd) { vec3_t ta, tb, tc; ta = get_triangle_normal (va, vb, vc); tb = get_triangle_normal (va, vb, vd); tc = get_triangle_normal (va, vc, vd); return v3_norm(v3_add(ta, v3_add(tb, tc))); }*/ /*! \fn void setup_polyhedron (float * vertices, GLfloat ** xyz, int s) \brief fill the OpenGL data buffer for a polyhedron to render \param vertices the OpenGL buffer data to fill \param xyz the summits coordinates \param s the number of summits */ void setup_polyhedron (float * vertices, GLfloat ** xyz, int s) { int i, j, k, l, n, o, p, q, r; vec3_t a, b, c; float shift[3]; poly_alpha = 1.0; for (n=0; n abc -> extra_cell[0]+1;n++) { for (o=0; o abc -> extra_cell[1]+1; o++) { for (p=0; p abc -> extra_cell[2]+1; p++) { shift[0]=n*box_gl -> vect[0][0]+o*box_gl -> vect[1][0]+p*box_gl -> vect[2][0]; shift[1]=n*box_gl -> vect[0][1]+o*box_gl -> vect[1][1]+p*box_gl -> vect[2][1]; shift[2]=n*box_gl -> vect[0][2]+o*box_gl -> vect[1][2]+p*box_gl -> vect[2][2]; for (q=0; q abc -> extra_cell[0]+1;n++) { for (o=0; o abc -> extra_cell[1]+1; o++) { for (p=0; p abc -> extra_cell[2]+1; p++) { shift[0]=n*box_gl -> vect[0][0]+o*box_gl -> vect[1][0]+p*box_gl -> vect[2][0]; shift[1]=n*box_gl -> vect[0][1]+o*box_gl -> vect[1][1]+p*box_gl -> vect[2][1]; shift[2]=n*box_gl -> vect[0][2]+o*box_gl -> vect[1][2]+p*box_gl -> vect[2][2]; for (q=0; q<4; q++) { for (r=0; r<3; r++) xyz[q][r] += shift[r]; } setup_tetra (vertices, vec3(xyz[0][0], xyz[0][1], xyz[0][2]), vec3(xyz[1][0], xyz[1][1], xyz[1][2]), vec3(xyz[2][0], xyz[2][1], xyz[2][2]), vec3(xyz[3][0], xyz[3][1], xyz[3][2])); poly_alpha = 0.5; for (q=0; q<4; q++) { for (r=0; r<3; r++) xyz[q][r] -= shift[r]; } } } } } /*! \fn void get_centroid (GLfloat ** xyz, int id) \brief find the barycenter of a polyhedron \param xyz the OpenGL buffer data to fill \param id the number of summits */ void get_centroid (GLfloat ** xyz, int id) { int i; centroid.x = centroid.y = centroid.z = 0.0; for (i=0; i mi[0] && p.x < ma[0]) { if (p.y > mi[1] && p.y < ma[1]) { if (p.z > mi[2] && p.z < ma[2]) { return TRUE; } } } return FALSE; } /*! \fn gboolean is_in_triangle (vec3_t p, vec3_t a, vec3_t b, vec3_t c) \brief is this point inside a triangle ? \param p the position to test \param a 1st summit of the triangle \param b 2nd summit of the triangle \param c 3rd summit of the triangle */ gboolean is_in_triangle (vec3_t p, vec3_t a, vec3_t b, vec3_t c) { float area = 0.5 * v3_length(v3_cross(v3_sub(a, b), v3_sub(a, c))); float alpha = v3_length(v3_cross(v3_sub(p, b), v3_sub(p, c))) / (2.0*area); float beta = v3_length(v3_cross(v3_sub(p, c), v3_sub(p, a))) / (2.0*area); float gamma = 1 - alpha - beta; if ((alpha >= 0.0 && alpha <= 1.0) && (beta >= 0.0 && beta <= 1.0) && (gamma >= 0.0 && gamma <= 1.0)) { return TRUE; } else { return FALSE; } } /*! \fn gboolean check_it (int i, int j, int k, int l) \brief test this atom id ? \param i 1st summit atom id \param j 2nd summit atom id \param k 3rd summit atom id \param l atom id to test */ gboolean check_it (int i, int j, int k, int l) { if (l != i && l != j && l != k) { return TRUE; } else { return FALSE; } } /*! \fn void check_triangles (int s, GLfloat ** xyz) \brief check triangle intersection \param s number of summits for the polygon \param xyz the coordinates of the summits */ void check_triangles (int s, GLfloat ** xyz) { int h, i, j, k, l, m, n; float d, r; float vd, v0; vec3_t vi, vj, vk, vl, vm; vec3_t u, v, w; vec3_t p, pt; float min_c[3], min_p[3]; float max_c[3], max_p[3]; i = s*(s-1)*(s-2)/6; do_gl = allocbool (i); for (i=0; i<3; i++) { min_c[i] = max_c[i] = xyz[0][i]; } for (i=1; i 1 && k-j > 1) { // check the plane defined by the 3 points i, j and k vi = vec3(xyz[i][0], xyz[i][1], xyz[i][2]); vj = vec3(xyz[j][0], xyz[j][1], xyz[j][2]); vk = vec3(xyz[k][0], xyz[k][1], xyz[k][2]); u = v3_sub (vi, vj); v = v3_sub (vi, vk); p = v3_norm(v3_cross (u, v)); for (l=0; l npt) ? step : 0, & at, & proj_gl -> atoms[step][j]); xyz[l][0] = at.x - d.x; xyz[l][1] = at.y - d.y; xyz[l][2] = at.z - d.z; if (d.pbc) clones = TRUE; } j = at.numv; if (j > 1) { if (j == 3) { xyz[j][0] = at.x; xyz[j][1] = at.y; xyz[j][2] = at.z; } if (plot -> draw_clones || ! clones || plot -> cloned_poly) { k = at.sp; // Set color if (pcolorm == 0) { pcol = plot -> at_color[k]; l = at.coord[c]; pcol.alpha = plot -> spcolor[c][k][l].alpha; } else if (pcolorm < 5) { l = at.coord[pcolorm - 1]; if (pcolorm > 2) { k = 0; } pcol = plot -> spcolor[pcolorm - 1][k][l]; } else if (pcolorm == 5) { field_molecule * fmol = get_active_field_molecule_from_model_id (proj_gl, at.id); if (fmol) { l = proj_gl -> atoms[0][at.id].fid; k = fmol -> mol -> natoms; } else { l = 0; k = 1; } pcol = init_color (l, k); pcol.alpha = 0.5; } else { pcol = wingl -> custom_map -> colors[step][at.id]; l = at.coord[1]; pcol.alpha = plot -> spcolor[1][k][l].alpha; } /*color[0] = pcol.red; color[1] = pcol.green; color[2] = pcol.blue; color[3] = pcol.alpha;*/ switch (j) { case 3: // Tetrahedral unit // Tétraèdre, assemblage de triangles get_centroid (xyz, 4); setup_tetrahedron (vertices, xyz); break; default: get_centroid (xyz, j); check_triangles (j, xyz); setup_polyhedron (vertices, xyz, j); break; } } } g_free (xyz); xyz = NULL; } /*! \fn int is_atom_cloned (int at) \brief does this atom have clone(s) ? \param at the atom id to test */ int is_atom_cloned (int at) { int i, j, k; i=0; for (j=0; j atoms[step][at].numv; j++) { k = proj_gl -> atoms[step][at].vois[j]; if (distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][k]).pbc) i ++; } return i; } /*! \fn void create_poly_lists () \brief prepare coordination polyhedra(s) OpenGL rendering */ void create_poly_lists () { // The order to draw the polyhedra could be based on the alpha channel // from the most transparent to the less transparent // However a better way is to used the neighbor list, if 3 atoms are linked thru bonds // and that all 3 of them are involved in polyhedra then the one at // the center is to be drawn first ... yet to be implemented int h, i, j, k, l, m, n, o, p, q; #ifdef DEBUG g_debug ("Poly LIST"); #endif cleaning_shaders (wingl, POLYS); if (wingl -> init) { h = 0; for (i=0; i<2; i++) { for (j=0; j totcoord[i]; j++) { if (plot -> show_poly[i]) { if (plot -> show_poly[i][j]) { h++; } } } } if (h) { int * npoly[2]; int ptot = 0; for (i=0; i<2; i++) { npoly[i] = allocint (coord_gl -> totcoord[i]); for (j=0; j totcoord[i]; j++) { for (k=0; k < proj_at; k++) { l = 0; for (m=0; m atoms[step][k].sp; m++) { l += coord_gl -> ntg[i][m]; } n = l + proj_gl -> atoms[step][k].coord[i]; if (n == j && plot -> show_poly[i] && plot -> show_poly[i][n]) { m = proj_gl -> atoms[step][k].coord[1]; n = proj_gl -> atoms[step][k].sp; o = 0; for (p=0; p partial_geo[n][m][p]; } p = (plot -> draw_clones) ? 1 + is_atom_cloned (k) : 1; // q is the number of summit of the polyhedra // +1 if only a coord 3 to include the central atom q = (o == 3) ? o+1: o; // Then we need the max number of triangle for this polyedron npoly[i][j] += p*(q*(q-1)*(q-2)/6); } } ptot += npoly[i][j]*3; } } if (ptot > 0) { wingl -> ogl_glsl[POLYS][step] = g_malloc0(sizeof*wingl -> ogl_glsl[POLYS][step]); wingl -> n_shaders[POLYS][step] = 1; object_3d * poly = g_malloc0(sizeof*poly); poly -> vert_buffer_size = POLY_BUFF_SIZE; poly -> num_vertices = ptot * (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); poly -> vertices = allocfloat (poly -> vert_buffer_size*poly -> num_vertices); nba = 0; for (i=0; i<2; i++) { for (j=0; j totcoord[i]; j++) { if (npoly[i][j] > 0) { for (m=0; m < proj_at; m++) { n = 0; for (o=0; o atoms[step][m].sp; o++) { n += coord_gl -> ntg[i][o]; } o = n + proj_gl -> atoms[step][m].coord[i]; if (o == j && plot -> show_poly[i] && plot -> show_poly[i][o] && proj_gl -> atoms[step][m].numv > 1) { prepare_poly_gl (poly -> vertices, proj_gl -> atoms[step][m], i); } } } } g_free (npoly[i]); } wingl -> ogl_glsl[POLYS][step][0] = init_shader_program (POLYS, GLSL_POLYEDRA, full_vertex, NULL, full_color, GL_TRIANGLES, 3, 1, TRUE, poly); } } } wingl -> create_shaders[POLYS] = FALSE; } atomes_1.3.1/src/opengl/draw/d_atoms.c0000664000175000017500000005012115212624223017306 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_atoms.c * @short nctions to prepare the OpenGL rendering atom(s) and clone(s) * @author Sébastien Le Roux */ /* * This file: 'd_atoms.c' * * Contains: * - The functions to prepare the OpenGL rendering atom(s) and clone(s) * * List of functions: int sphere_vertices (int qual); int sphere_indices (int qual); int find_atom_vertices (gboolean to_pick); int find_clone_vertices (gboolean to_pick); float get_sphere_radius (int style, int sp, int ac, int sel); void setup_sphere_vertice (float * vertices, vec3_t pos, ColRGBA col, float rad, float alpha); void setup_this_atom (int style, gboolean to_pick, gboolean picked, atom * at, int ac, float * vert, float al); void setup_atom_vertices (int style, gboolean to_pick, float * vertices); void prepare_clone (int style, gboolean to_pick, int picked, atom at, atom bt, float x, float y, float z, float * vertices); void setup_clone_vertices (int style, gboolean to_pick, float * vertices); void atom_positions_colors_and_sizes (int style, gboolean to_pick, float * instances); void create_atom_lists (gboolean to_pick); ColRGBA get_atom_color (int i, int j, double al, int picked, gboolean to_pick); object_3d * draw_sphere (int quality); */ #include "global.h" #include "glview.h" #include "ogl_shading.h" #include "dlp_field.h" #include "preferences.h" int atom_id; int gColorID[3]; int all_styles[NUM_STYLES]; /*! \fn ColRGBA get_atom_color (int i, int j, double al, int picked, gboolean to_pick) \brief get atom (or clone) color \param i chemical species \param j the atom id \param al opacity (atom: 1.0, clone: 0.5) \param picked is the atom (clone) selected (1) or not (0) \param to_pick to pick (1) or to draw (0) */ ColRGBA get_atom_color (int i, int j, double al, int picked, gboolean to_pick) { // i = atom spec, j = atom id (for coordination maps), al = alpha int s = i; int m; ColRGBA colo; if (to_pick) { gColorID[0]++; if(gColorID[0] > 255) { gColorID[0] = 0; gColorID[1]++; if(gColorID[1] > 255) { gColorID[1] = 0; gColorID[2]++; } } wingl -> color_to_pick[wingl -> to_be_picked] = gColorID[0] + 256*gColorID[1] + 256*256*gColorID[2]; colo.red = gColorID[0]/255.0; colo.green = gColorID[1]/255.0; colo.blue = gColorID[2]/255.0; colo.alpha = 1.0; wingl -> to_be_picked ++; } else if (picked) { if (field_color) { colo = init_color (proj_gl -> atoms[step][j].coord[4], num_field_objects); colo.alpha = DEFAULT_OPACITY*0.75; } else { colo = plot -> sel_color[(picked == 1) ? 0 : 1]; } } else { if (acolorm == 0) { colo.red = plot -> at_color[s].red; colo.green = plot -> at_color[s].green; colo.blue = plot -> at_color[s].blue; colo.alpha = al;// * plot -> m_terial.param[5]; } else if (acolorm < 5) { if (acolorm < 3) { s -= proj_sp*(s/proj_sp); } else { s = 0; } int k = proj_gl -> atoms[step][j].coord[acolorm -1]; colo.red = plot -> spcolor[acolorm - 1][s][k].red; colo.green = plot -> spcolor[acolorm - 1][s][k].green; colo.blue = plot -> spcolor[acolorm - 1][s][k].blue; colo.alpha = al;// * plot -> m_terial.param[5]; } else if (acolorm == 5) { field_molecule * fmol = get_active_field_molecule_from_model_id (proj_gl, j); if (fmol) { s = proj_gl -> atoms[0][j].fid; m = fmol -> mol -> natoms; } else { s = 0; m = 1; } colo = init_color (s, m); colo.alpha = al;// * plot -> m_terial.param[5]; } else if (acolorm == 6) { colo.red = wingl -> custom_map -> colors[step][j].red; colo.blue = wingl -> custom_map -> colors[step][j].blue; colo.green = wingl -> custom_map -> colors[step][j].green; colo.alpha = wingl -> custom_map -> colors[step][j].alpha; } } return colo; } int nbs, nbl, nba; /*! \fn int sphere_vertices (int qual) \brief return the number of OpenGL vertices to render a sphere \param qual OpenGL quality */ int sphere_vertices (int qual) { return qual * qual; } /*! \fn int sphere_indices (int qual) \brief return the number of OpenGL indices to render a sphere \param qual OpenGL quality */ int sphere_indices (int qual) { return 2 * qual * (qual - 1); } /*! \fn object_3d * draw_sphere (int quality) \brief OpenGL 3D sphere object rendering \param quality OpenGL quality */ object_3d * draw_sphere (int quality) { float theta, phi; float cos_phi, sin_phi; float xPos, yPos, zPos; int stack, slice; int x, y, z; object_3d * new_sphere = g_malloc0(sizeof*new_sphere); new_sphere -> quality = quality; new_sphere -> num_vertices = sphere_vertices (quality); new_sphere -> vert_buffer_size = 3; new_sphere -> vertices = allocfloat (3*new_sphere -> num_vertices); new_sphere -> num_indices = sphere_indices (quality); new_sphere -> ind_buffer_size = 1; new_sphere -> indices = allocint (new_sphere -> num_indices); x = 0; for (stack=0; stack <= quality-1; stack++) { phi = pi * stack / (quality-1); cos_phi = cos(phi); sin_phi = sin(phi); for (slice=0; slice <= quality-1; slice++) { theta = 2.0 * pi * slice / (quality-1); xPos = cos(theta) * sin_phi; yPos = cos_phi; zPos = sin(theta) * sin_phi; new_sphere -> vertices[3*x] = xPos; new_sphere -> vertices[3*x+1] = yPos; new_sphere -> vertices[3*x+2] = zPos; x ++; } } gboolean oddRow = FALSE; z = 0; for (y = 0; y < quality-1; y++) { if (!oddRow) // even rows: y == 0, y == 2; and so on { for (x = 0; x <= quality-1; x++) { new_sphere -> indices[z] = (y * quality + x); new_sphere -> indices[z+1]= ((y + 1) * quality + x); z += 2; } } else { for (x = quality-1; x >= 0; x--) { new_sphere -> indices[z] = ((y + 1) * quality + x); new_sphere -> indices[z+1] = (y * quality + x); z += 2; } } oddRow = !oddRow; } return new_sphere; } /*! \fn object_3d * draw_billboard_quad () \brief create a camera-aligned billboard quad proxy for perfect impostors. The quad has 4 vertices at unit corners (±1, ±1, 0). Each vertex shader for perfect impostors uses the sign of vert.x / vert.y to select the corresponding edge of the tight axis-aligned bounding box in view space. Draw primitive: GL_TRIANGLE_STRIP with indices [0,1,2,3]. tri 0 → vertices 0,1,2 tri 1 → vertices 1,2,3 */ object_3d * draw_billboard_quad () { object_3d * quad = g_malloc0(sizeof*quad); quad -> quality = 1; quad -> num_vertices = 4; quad -> vert_buffer_size = 3; quad -> vertices = allocfloat (3 * 4); /* corners: (-1,-1,0), (-1,+1,0), (+1,-1,0), (+1,+1,0) */ quad -> vertices[0] = -1.0f; quad -> vertices[1] = -1.0f; quad -> vertices[2] = 0.0f; quad -> vertices[3] = -1.0f; quad -> vertices[4] = 1.0f; quad -> vertices[5] = 0.0f; quad -> vertices[6] = 1.0f; quad -> vertices[7] = -1.0f; quad -> vertices[8] = 0.0f; quad -> vertices[9] = 1.0f; quad -> vertices[10] = 1.0f; quad -> vertices[11] = 0.0f; quad -> num_indices = 4; quad -> ind_buffer_size = 1; quad -> indices = allocint (4); quad -> indices[0] = 0; quad -> indices[1] = 1; quad -> indices[2] = 2; quad -> indices[3] = 3; return quad; } /*! \fn float get_sphere_radius (int style, int sp, int ac, int sel) \brief get an atom sphere radius \param style rendering style \param sp chemical species \param ac atom (0) or clone (1) \param sel is the atom selected (1) or not (0) */ float get_sphere_radius (int style, int sp, int ac, int sel) { int spec = (sp > proj_sp-1) ? sp - proj_sp : sp; if (style >= OGL_STYLES) { int fid = get_filled_id(style); int k = (fid) ? 9 + fid : 2; int l = (fid) ? 12 + fid : 7; int m = (int)proj_gl -> chemistry -> chem_prop[CHEM_Z][spec]; return (default_o_at_rs[2+5*ac]) ? default_at_rs[2+5*ac] + sel*0.05 : get_radius (2+5*ac, fid, m, default_atomic_rad[(ac) ? l : k]) + sel*0.05; } else if (style == WIREFRAME || style == PUNT) { return plot -> pointrad[spec + ac*proj_sp] + sel*4.0; } else if (style == SPACEFILL) { return plot -> atomicrad[spec + ac*proj_sp] + sel*0.05; } else if (style == CYLINDERS) { return plot -> radall[ac] + sel*0.05; } else { return plot -> sphererad[spec + ac*proj_sp] + sel*0.05; } } /*! \fn void setup_sphere_vertice (float * vertices, vec3_t pos, ColRGBA col, float rad, float alpha) \brief fill the OpenGL data buffer for a atom (or clone) to render \param vertices the OpenGL buffer data to fill \param pos the position vector \param col the color \param rad the radius \param alpha the opacity (atom: 1.0, clone: 0.5) */ void setup_sphere_vertice (float * vertices, vec3_t pos, ColRGBA col, float rad, float alpha) { int l; l = nbl*ATOM_BUFF_SIZE; vertices[l] = pos.x; vertices[l+1] = pos.y; vertices[l+2] = pos.z; vertices[l+3] = rad; vertices[l+4] = col.red; vertices[l+5] = col.green; vertices[l+6] = col.blue; vertices[l+7] = col.alpha * alpha; nbl ++; } /*! \fn void setup_this_atom (int style, gboolean to_pick, gboolean picked, atom * at, int ac, float * vert, float al) \brief prepare the OpenGL rendering data of an atom / clone \param style rendering style \param to_pick to pick (1) or to draw (0) \param picked is the atom selected (1) or not (0) \param at the atom to render \param ac atom (0) or clone (1) \param vert the OpenGL buffer data to fill \param al the opacity (atom: 1.0, clone: 0.5) */ void setup_this_atom (int style, gboolean to_pick, gboolean picked, atom * at, int ac, float * vert, float al) { int i, j, k; float alpha = 1.0; float shift[3]; ColRGBA col = get_atom_color (at -> sp, at -> id, 1.0, picked, to_pick); if (at -> sp > proj_sp - 1) at -> sp -= proj_sp; float rad = get_sphere_radius ((style == NONE) ? plot -> style : style, at -> sp, ac, (picked) ? 1 : 0); for (i=0; i abc -> extra_cell[0]+1;i++) { for (j=0; j abc -> extra_cell[1]+1; j++) { for (k=0; k abc -> extra_cell[2]+1; k++) { shift[0]=i*box_gl -> vect[0][0]+j*box_gl -> vect[1][0]+k*box_gl -> vect[2][0]; shift[1]=i*box_gl -> vect[0][1]+j*box_gl -> vect[1][1]+k*box_gl -> vect[2][1]; shift[2]=i*box_gl -> vect[0][2]+j*box_gl -> vect[1][2]+k*box_gl -> vect[2][2]; at_shift (at, shift); setup_sphere_vertice (vert, vec3(at -> x, at -> y, at -> z), col, rad, (to_pick) ? 1.0 : alpha*al); at_unshift (at, shift); alpha = 0.5; } } } } /*! \fn int find_atom_vertices (gboolean to_pick) \brief find the number of atom(s) to render \param to_pick to pick (1) or to draw (0) */ int find_atom_vertices (gboolean to_pick) { int i, j; j = 0; for (i=0; i at_data != NULL) { if (plot -> at_data[i].show[0]) { if (to_pick) { all_styles[0] ++; } else { all_styles[plot -> at_data[i].style + 1] ++; } j ++; } } else { if (proj_gl -> atoms[step][i].show[0]) { if (to_pick) { all_styles[0] ++; } else { all_styles[proj_gl -> atoms[step][i].style + 1] ++; } j ++; } } } return j; } /*! \fn void setup_atom_vertices (int style, gboolean to_pick, float * vertices) \brief prepare an atom OpenGL rendering \param style the rendering style \param to_pick to pick (1) or to draw (0) \param vertices the OpenGL buffer data to fill */ void setup_atom_vertices (int style, gboolean to_pick, float * vertices) { int i; atom * tmp_a; for (i=0; i atoms[step][i]); if (in_movie_encoding && plot -> at_data != NULL) { tmp_a -> show[0] = plot -> at_data[i].show[0]; tmp_a -> style = plot -> at_data[i].style; } if (tmp_a -> show[0] && (tmp_a -> style == style || to_pick)) { setup_this_atom (style, to_pick, 0, tmp_a, 0, vertices, 1.0); } tmp_a = free_atom (tmp_a); } } /*! \fn void prepare_clone (int style, gboolean to_pick, int picked, atom at, atom bt, float x, float y, float z, float * vertices) \brief prepare the rendering data of a clone \param style the rendering style \param to_pick to pick (1) or to draw (0) \param picked is the clone selected (1) or not (0) \param at 1st atom of the cloned chemical bond \param bt 2nd atom of the cloned chemical bond \param x x position \param y y position \param z z position \param vertices the OpenGL buffer data to fill */ void prepare_clone (int style, gboolean to_pick, int picked, atom at, atom bt, float x, float y, float z, float * vertices) { atom * tmp_a = duplicate_atom (& bt); tmp_a -> x += x; tmp_a -> y += y; tmp_a -> z += z; tmp_a -> id = at.id; tmp_a -> sp = at.sp + proj_sp; int sty = at.style; if (in_movie_encoding && plot -> at_data != NULL) { tmp_a -> show[1] = plot -> at_data[at.id].show[1]; sty = plot -> at_data[at.id].style; } if (at.show[1] && (sty == style || to_pick)) { setup_this_atom (style, to_pick, picked, tmp_a, 1, vertices, 0.5); } tmp_a = free_atom (tmp_a); } /*! \fn int find_clone_vertices (gboolean to_pick) \brief find the number of clones to render \param to_pick to pick (1) or to draw (0) */ int find_clone_vertices (gboolean to_pick) { int i, j, k, l; l = 0; for (i=0; i < wingl -> bonds[step][1]; i++) { j = wingl -> bondid[step][1][i][0]; k = wingl -> bondid[step][1][i][1]; if (in_movie_encoding && plot -> at_data != NULL) { if (plot -> at_data[j].show[1]) { if (to_pick) { all_styles[0] ++; } else { all_styles[plot -> at_data[j].style + 1] ++; } l++; } if (plot -> at_data[k].show[1]) { if (to_pick) { all_styles[0] ++; } else { all_styles[plot -> at_data[k].style + 1] ++; } l++; } } else { if (proj_gl -> atoms[step][j].show[1]) { if (to_pick) { all_styles[0] ++; } else { all_styles[proj_gl -> atoms[step][j].style + 1] ++; } l ++; } if (proj_gl -> atoms[step][k].show[1]) { if (to_pick) { all_styles[0] ++; } else { all_styles[proj_gl -> atoms[step][k].style + 1] ++; } l ++; } } } return l; } /*! \fn void setup_clone_vertices (int style, gboolean to_pick, float * vertices) \brief find clone(s) position(s), color(s) and prepare the data for the OpenGL rendering \param style rendering style \param to_pick to pick (1) or to draw (0) \param vertices the OpenGL data buffer to fill */ void setup_clone_vertices (int style, gboolean to_pick, float * vertices) { int i, j, k; for (i=0; i < wingl -> bonds[step][1]; i++) { j = wingl -> bondid[step][1][i][0]; k = wingl -> bondid[step][1][i][1]; prepare_clone (style, to_pick, 0, proj_gl -> atoms[step][j], proj_gl -> atoms[step][k], wingl -> clones[step][i].x, wingl -> clones[step][i].y, wingl -> clones[step][i].z, vertices); prepare_clone (style, to_pick, 0, proj_gl -> atoms[step][k], proj_gl -> atoms[step][j], -wingl -> clones[step][i].x, -wingl -> clones[step][i].y, -wingl -> clones[step][i].z, vertices); } } /*! \fn void atom_positions_colors_and_sizes (int style, gboolean to_pick, float * instances) \brief find atom(s) position(s), color(s) and prepare the data for the OpenGL rendering \param style rendering style \param to_pick to pick (1) or to draw (0) \param instances the OpenGL data buffer to fill */ void atom_positions_colors_and_sizes (int style, gboolean to_pick, float * instances) { setup_atom_vertices (style, to_pick, instances); if (to_pick) wingl -> atoms_to_be_picked = wingl -> clones_to_be_picked = wingl -> to_be_picked; if (plot -> draw_clones) { setup_clone_vertices (style, to_pick, instances); if (to_pick) wingl -> clones_to_be_picked = wingl -> to_be_picked; } } /*! \fn void create_atom_lists (gboolean to_pick) \brief prepare atom(s) and clone(s) OpenGL rendering \param to_pick to pick (1) or to draw (0) */ void create_atom_lists (gboolean to_pick) { int i, j, k; object_3d * atos; gboolean sphere = TRUE; if (! to_pick) { cleaning_shaders (wingl, ATOMS); wingl -> create_shaders[ATOMS] = FALSE; } for (i=0; i draw_clones) j += find_clone_vertices (to_pick); #ifdef DEBUG g_debug ("Atom LIST:: to_pick= %s, Atom(s) to render= %d", (to_pick) ? "true" : "false", j); #endif if (j > 0) { // Render atom(s) j = (plot -> abc -> extra_cell[0]+1)*(plot -> abc -> extra_cell[1]+1)*(plot -> abc -> extra_cell[2]+1); if (! to_pick) { wingl -> n_shaders[ATOMS][step] = 0; for (i=0; i n_shaders[ATOMS][step] ++; wingl -> ogl_glsl[ATOMS][step] = g_malloc0(wingl -> n_shaders[ATOMS][step]*sizeof*wingl -> ogl_glsl[ATOMS][step]); } k = 0; for (i=0; i style == WIREFRAME || plot -> style == PUNT) sphere = FALSE; } else { if (i-1 == WIREFRAME || i-1 == PUNT) sphere = FALSE; } if (sphere) { /* Ray: billboard quad proxy; classic: tessellated sphere */ atos = plot -> ray_tracing ? draw_billboard_quad () : draw_sphere (plot -> quality); } else { atos = g_malloc0(sizeof*atos); atos -> vert_buffer_size = 3; atos -> num_vertices = 1; atos -> vertices = allocfloat (3); atos -> vertices[0] = atos -> vertices[1] = atos -> vertices[2] = 0.0; } atos -> num_instances = j*all_styles[i]; atos -> inst_buffer_size = ATOM_BUFF_SIZE; allocate_instances (atos); nbl = 0; atom_positions_colors_and_sizes (i-1, to_pick, atos -> instances); if (! to_pick) { if (sphere) { const GLchar * vs_atom = (plot -> ray_tracing) ? sphere_vertex_ray : sphere_vertex; const GLchar * fs_atom = (plot -> ray_tracing) ? full_color_ray : full_color; wingl -> ogl_glsl[ATOMS][step][k] = init_shader_program (ATOMS, GLSL_SPHERES, vs_atom, NULL, fs_atom, GL_TRIANGLE_STRIP, 4, 1, TRUE, atos); } else { wingl -> ogl_glsl[ATOMS][step][k] = init_shader_program (ATOMS, GLSL_POINTS, point_vertex, NULL, point_color, GL_POINTS, 4, 1, FALSE, atos); } } else { wingl -> ogl_glsl[PICKS][0][0] = init_shader_program (PICKS, GLSL_SPHERES, sphere_vertex, NULL, full_color, GL_TRIANGLE_STRIP, 4, 1, FALSE, atos); } k ++; } if (to_pick) break; } } } atomes_1.3.1/src/opengl/draw/d_background.c0000664000175000017500000000426715212624223020314 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_background.c * @short Functions to prepare the OpenGL rendering for the gradient background * @author Sébastien Le Roux */ /* * This file: 'd_background.c' * * Contains: * - The functions to prepare the OpenGL gradient background * * List of functions: void create_background_lists (); */ #include "global.h" #include "glview.h" /*! \fn void create_background_lists () \brief prepare background OpenGL rendering */ void create_background_lists () { cleaning_shaders (wingl, BACKG); wingl -> create_shaders[BACKG] = FALSE; wingl -> n_shaders[BACKG][0] = 1; object_3d * back = g_malloc0(sizeof*back); back -> vert_buffer_size = 2; back -> num_vertices = 4; back -> vertices = allocfloat (back -> vert_buffer_size*back -> num_vertices); back -> vertices[0] = back -> vertices[1] = back -> vertices[3] = back -> vertices[4] = -1.0; back -> vertices[2] = back -> vertices[5] = back -> vertices[6] = back -> vertices[7] = 1.0; wingl -> ogl_glsl[BACKG][0] = g_malloc0(sizeof*wingl -> ogl_glsl[BACKG][0]); switch (plot -> back -> gradient) { case 1: wingl -> ogl_glsl[BACKG][0][0] = init_shader_program (BACKG, GLSL_BACK, background_vertex, NULL, background_linear, GL_TRIANGLE_STRIP, 1, 5, FALSE, back); break; case 2: wingl -> ogl_glsl[BACKG][0][0] = init_shader_program (BACKG, GLSL_BACK, background_vertex, NULL, background_circular, GL_TRIANGLE_STRIP, 1, 5, FALSE, back); break; } } atomes_1.3.1/src/opengl/draw/movie.h0000664000175000017500000000510215212624223017003 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file movie.h * @short Data structure declarations for movie encoding \n Function declarations for movie encoding * @author Sébastien Le Roux */ /* * This header file: 'movie.h' * * Contains: - Data structure declarations for movie encoding - Function declarations for movie encoding */ #ifndef MOVIE_H_ #define MOVIE_H_ #define VIDEO_CODECS 5 #define IMAGE_FORMATS 4 #include #include #include #if LIBAVCODEC_VERSION_MAJOR > 54 #include #include #endif #include #include #include // a wrapper around a single output AVStream typedef struct VideoStream VideoStream; struct VideoStream { AVStream * st; AVCodecContext * cc; AVFrame * frame; struct SwsContext * sws_ctx; }; typedef struct video_options video_options; struct video_options { int proj; int framesec; int extraframes; int codec; int oglquality; int bitrate; int * video_res; }; extern void render_image (glwin * view, video_options * iopts); extern void save_movie (glwin * view, video_options * vopts); // Image rendering options from the command line extern int render_image_format; extern int render_image_style; extern int render_image_axis; extern int render_image_box; extern int render_image_rep; extern int render_image_acolor; extern int render_image_pcolor; extern gboolean trigger_fragment_analysis; extern gboolean trigger_molecule_analysis; extern ColRGBA * render_image_back_color; extern int render_image_back_grad; extern int render_image_back_dir; extern float render_image_back_pos; extern ColRGBA * render_image_grad_color[2]; extern ColRGBA * render_image_box_color; extern int * render_image_pixels; extern gchar * render_image_output; #endif atomes_1.3.1/src/opengl/draw/d_axis.c0000664000175000017500000003135215212624223017134 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file d_axis.c * @short Functions to prepare the OpenGL rendering for the axis * @author Sébastien Le Roux */ /* * This file: 'd_axis.c' * * Contains: * - The functions to prepare the OpenGL rendering for the axis * * List of functions: int create_axis_lists (); void setup_arrow (float * vert, vec3_t a, vec3_t b, vec3_t c, vec3_t d, vec3_t e); void init_axis_param (); void prepare_axis_data (float * vert_a, float * vert_b, float * vert_c); ColRGBA color_axis (int id); mat4_t create_axis_matrices (int type); */ #include "global.h" #include "glview.h" extern object_3d * draw_sphere (int quality); extern object_3d * draw_cylinder (int quality, float ra, float rb); extern object_3d * draw_cylinder_cap (int quality, float rad, gboolean picked); extern object_3d * draw_billboard_quad (void); extern void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha); extern void setup_sphere_vertice (float * vertices, vec3_t pos, ColRGBA col, float rad, float alpha); extern void setup_cylinder_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, float delta, float r_sph_a, float r_sph_b); extern void setup_cap_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, gboolean sel); extern void setup_triangles (float * vertices, vec3_t sa, vec3_t sb, vec3_t sc); extern float poly_alpha; extern vec3_t centroid; extern void clean_labels (int id); extern ColRGBA pcol; float arrow_length; float axis_size; float axis_radius; float arrow_base; float label_pos; /*! \fn ColRGBA color_axis (int id) \brief get axis color \param id axis x (0), y(1) or z(2) */ ColRGBA color_axis (int id) { if (plot -> xyz -> color != NULL) { return plot -> xyz -> color[id]; } else { ColRGBA col; col.red = (id == 2) ? 1.0: 0.0; col.green = (id == 1) ? 1.0: 0.0; col.blue = (id == 0) ? 1.0: 0.0; col.alpha = 1.0; return col; } } /*! \fn mat4_t create_axis_matrices (int type) \brief create axis OpenGL rendering matrices \param type axis type (standard: 0, atom edition viewer axis: 1) */ mat4_t create_axis_matrices (int type) { GLfloat x, y, z; x = y = z = 0.0; float from_edge = 50.0; vec3_t win_coord; GLfloat sx = (GLfloat)wingl -> pixels[0]; GLfloat sy = (GLfloat)wingl -> pixels[1]; mat4_t axis_projection_matrix; mat4_t axis_model_matrix; mat4_t axis_view_matrix; mat4_t axis_model_view_matrix; if (plot -> xyz -> t_pos == CENTER) { if (plot -> rep == ORTHOGRAPHIC) { x = 0.5 * sx; y = 0.5 * sy; } axis_projection_matrix = wingl -> proj_model_matrix; } else { axis_projection_matrix = m4_ortho (plot -> gleft, plot -> gright, plot -> gbottom, plot -> gtop, -plot -> gfar, plot -> gfar); if (plot -> xyz -> t_pos == TOP_RIGHT) { x = sx - from_edge; y = from_edge; } else if (plot -> xyz -> t_pos == TOP_LEFT) { x = from_edge; y = from_edge; } else if (plot -> xyz -> t_pos == BOTTOM_RIGHT) { x = sx - from_edge; y = sy - from_edge; } else if (plot -> xyz -> t_pos == BOTTOM_LEFT) { x = from_edge; y = sy - from_edge; } else if (plot -> xyz -> t_pos == CUSTOM) { // Custom position x = plot -> xyz -> c_pos[0] * sx / 100.0; y = plot -> xyz -> c_pos[1] * sy / 100.0; } } win_coord = v3_un_project (vec3(x, y, z), wingl -> view_port, axis_projection_matrix); win_coord.z = 1.0; //print_axis_matrices (win_coord); if (type == 0) { axis_view_matrix = wingl -> view_matrix; } else { axis_view_matrix = wingl -> model_matrix; } axis_model_matrix = m4_translation (win_coord); axis_model_view_matrix = m4_mul (axis_model_matrix, axis_view_matrix); return m4_mul (axis_projection_matrix, axis_model_view_matrix); } /*! \fn void setup_arrow (float * vert, vec3_t a, vec3_t b, vec3_t c, vec3_t d, vec3_t e) \brief setup axis 3D arrow rendering data \param vert the OpenGL buffer data to fill \param a position vector a \param b position vector b \param c position vector c \param d position vector d \param e position vector e */ void setup_arrow (float * vert, vec3_t a, vec3_t b, vec3_t c, vec3_t d, vec3_t e) { setup_triangles (vert, a, b, c); setup_triangles (vert, a, c, d); setup_triangles (vert, a, d, e); setup_triangles (vert, a, e, b); setup_triangles (vert, b, c, d); setup_triangles (vert, b, d, e); } /*! \fn void init_axis_param () \brief initialize axis rendering parameters */ void init_axis_param () { arrow_length = 0.5; axis_size = plot -> xyz -> length; axis_radius = plot -> xyz -> rad; arrow_base = 0.1; label_pos = 0.2; if (plot -> rep == PERSPECTIVE && plot -> xyz -> t_pos != CENTER) { arrow_base /= (plot -> p_depth / plot -> gnear); arrow_length /= (plot -> p_depth / plot -> gnear); axis_radius /= (plot -> p_depth / plot -> gnear); axis_size /= (plot -> p_depth / plot -> gnear); label_pos /= (plot -> p_depth / plot -> gnear); } } /*! \fn void prepare_axis_data (float * vert_a, float * vert_b, float * vert_c) \brief prepare axis OpenGL rendering data buffer \param vert_a OpenGL buffer data to fill \param vert_b OpenGL buffer data to fill \param vert_c OpenGL buffer data to fill */ void prepare_axis_data (float * vert_a, float * vert_b, float * vert_c) { init_axis_param (); poly_alpha = 1.0; vec3_t a, b, c, d, e; float sa; nbs = nbl = nba = 0; int i; for (i=0; i<3; i++) { pcol = color_axis (i); a = vec3(0.0, 0.0, 0.0); b = vec3((i==0)? axis_size-arrow_length : 0.0, (i==1)? axis_size-arrow_length : 0.0, (i==2)? axis_size-arrow_length : 0.0); if (plot -> xyz -> axis == WIREFRAME) { setup_line_vertice (vert_a, a, pcol, 1.0); setup_line_vertice (vert_a, b, pcol, 1.0); a = vec3((i==0)? axis_size : 0.0, (i==1)? axis_size : 0.0, (i==2)? axis_size : 0.0); sa = (i == 2) ? -1.0 : 1.0; b = vec3((i==0)? axis_size-arrow_length : -arrow_base, (i==1)? axis_size-arrow_length : -sa*arrow_base, (i==2)? axis_size-arrow_length : arrow_base); c = vec3((i==0)? axis_size-arrow_length : -arrow_base, (i==1)? axis_size-arrow_length : -arrow_base, (i==2)? axis_size-arrow_length : -arrow_base); d = vec3((i==0)? axis_size-arrow_length : arrow_base, (i==1)? axis_size-arrow_length : sa*arrow_base, (i==2)? axis_size-arrow_length : -arrow_base); e = vec3((i==0)? axis_size-arrow_length : arrow_base, (i==1)? axis_size-arrow_length : arrow_base, (i==2)? axis_size-arrow_length : arrow_base); centroid = v3_add (a, v3_add(b, v3_add(c, v3_add(d, e)))); centroid = v3_divs (centroid, 5.0); setup_arrow (vert_b, a, b, c, d, e); } else { setup_cylinder_vertice (vert_a, a, b, pcol, axis_radius, 1.0, 0.0, (plot -> ray_tracing) ? axis_radius : 0.0, 0.0); c = vec3((i==0)? axis_size : 0.0, (i==1)? axis_size : 0.0, (i==2)? axis_size : 0.0); nbs --; setup_cylinder_vertice (vert_b, c, b, pcol, axis_radius+arrow_base, 1.0, 0.0, (plot -> ray_tracing) ? axis_radius : 0.0, 0.0); nbs --; setup_cap_vertice (vert_c, c, b, pcol, axis_radius+arrow_base, 1.0, FALSE); } } } /*! \fn int create_axis_lists () \brief prepare axis OpenGL rendering */ int create_axis_lists () { vec3_t pos; float shift[3]={0.0, 0.0, 0.0}; int nshaders = 0; object_3d * axis_a, * axis_b, * axis_c, * axis_d; cleaning_shaders (wingl, MAXIS); wingl -> create_shaders[MAXIS] = FALSE; if (plot -> xyz -> axis == NONE) return nshaders; int saved_tracing = plot -> ray_tracing; plot -> ray_tracing = FALSE; if (plot -> xyz -> axis == WIREFRAME) { axis_a = g_malloc0(sizeof*axis_a); axis_a -> vert_buffer_size = LINE_BUFF_SIZE; axis_a -> num_vertices = 3*2; axis_a -> vertices = allocfloat (axis_a -> vert_buffer_size*axis_a -> num_vertices); axis_b = g_malloc0(sizeof*axis_b); axis_b -> vert_buffer_size = POLY_BUFF_SIZE; axis_b -> num_vertices = 3*6*9; axis_b -> vertices = allocfloat (axis_b -> vert_buffer_size*axis_b -> num_vertices); } else { if (plot -> ray_tracing) { axis_a = draw_billboard_quad (); axis_a -> inst_buffer_size = CYLI_BUFF_SIZE + 2; axis_b = draw_billboard_quad (); axis_b -> inst_buffer_size = CYLI_BUFF_SIZE + 2; axis_c = draw_billboard_quad (); axis_c -> inst_buffer_size = CAPS_BUFF_SIZE + 2; axis_d = draw_billboard_quad (); axis_d -> inst_buffer_size = ATOM_BUFF_SIZE; } else { int axis_quality = 50; axis_a = draw_cylinder (axis_quality, 1.0, 1.0); axis_a -> inst_buffer_size = CYLI_BUFF_SIZE; axis_b = draw_cylinder (axis_quality, 0.0, 1.0); axis_b -> inst_buffer_size = CYLI_BUFF_SIZE; axis_c = draw_cylinder_cap (axis_quality, 1.0, FALSE); axis_c -> inst_buffer_size = CAPS_BUFF_SIZE; axis_d = draw_sphere (axis_quality); axis_d -> inst_buffer_size = ATOM_BUFF_SIZE; } axis_a -> num_instances = axis_b -> num_instances = axis_c -> num_instances = 3; allocate_instances (axis_a); allocate_instances (axis_b); allocate_instances (axis_c); axis_d -> num_instances = 1; allocate_instances (axis_d); } nshaders = (plot -> xyz -> axis == WIREFRAME) ? 2 : 4; prepare_axis_data ((plot -> xyz -> axis == WIREFRAME) ? axis_a -> vertices : axis_a -> instances, (plot -> xyz -> axis == WIREFRAME) ? axis_b -> vertices : axis_b -> instances, (plot -> xyz -> axis == WIREFRAME) ? NULL : axis_c -> instances); clean_labels (2); if (plot -> xyz -> labels) { int i; for (i=0; i<3; i++) { pos = vec3 ((i==0) ? axis_size+label_pos : 0.0, (i==1) ? axis_size+label_pos : 0.0, (i==2) ? axis_size+label_pos : 0.0); prepare_string (plot -> xyz -> title[i], 2, color_axis (i), pos, shift, NULL, NULL, NULL); } nshaders += (plot -> labels[2].render+1) * (plot -> labels[2].list -> last -> id + 1); wingl -> ogl_glsl[MAXIS][0] = g_malloc0(nshaders*sizeof*wingl -> ogl_glsl[MAXIS][0]); render_all_strings (MAXIS, 2); } else { wingl -> ogl_glsl[MAXIS][0] = g_malloc0(nshaders*sizeof*wingl -> ogl_glsl[MAXIS][0]); } if (plot -> xyz -> axis == WIREFRAME) { // Lines wingl -> ogl_glsl[MAXIS][0][0] = init_shader_program (MAXIS, GLSL_LINES, line_vertex, NULL, line_color, GL_LINES, 2, 1, FALSE, axis_a); wingl -> ogl_glsl[MAXIS][0][0] -> line_width = plot -> xyz -> line; // Arrows wingl -> ogl_glsl[MAXIS][0][1] = init_shader_program (MAXIS, GLSL_POLYEDRA, full_vertex, NULL, full_color, GL_TRIANGLES, 3, 1, TRUE, axis_b); } else { // Yellow sphere at (0.0, 0.0, 0.0) pcol.red = pcol.green = 1.0; pcol.blue = 0.0; pcol.alpha = 1.0; setup_sphere_vertice (axis_d -> instances, vec3(0.0,0.0,0.0), pcol, axis_radius, 1.0); const GLchar * vs_sph = (plot -> ray_tracing) ? sphere_vertex_ray : sphere_vertex; const GLchar * vs_cyl = (plot -> ray_tracing) ? cylinder_vertex_ray : cylinder_vertex; const GLchar * vs_cone = (plot -> ray_tracing) ? cone_vertex_ray : cone_vertex; const GLchar * vs_cap = (plot -> ray_tracing) ? cap_vertex_ray : cap_vertex; const GLchar * fs_all = (plot -> ray_tracing) ? full_color_ray : full_color; wingl -> ogl_glsl[MAXIS][0][0] = init_shader_program (MAXIS, GLSL_SPHERES, vs_sph, NULL, fs_all, GL_TRIANGLE_STRIP, 4, 1, TRUE, axis_d); // Cylinders int narray_cyl = (plot -> ray_tracing) ? 8 : 6; wingl -> ogl_glsl[MAXIS][0][1] = init_shader_program (MAXIS, GLSL_CYLINDERS, vs_cyl, NULL, fs_all, GL_TRIANGLE_STRIP, narray_cyl, 1, TRUE, axis_a); // Cones wingl -> ogl_glsl[MAXIS][0][2] = init_shader_program (MAXIS, GLSL_CYLINDERS, vs_cone, NULL, fs_all, GL_TRIANGLE_STRIP, narray_cyl, 1, TRUE, axis_b); // Cones Caps GLenum prim_cap = (plot -> ray_tracing) ? GL_TRIANGLE_STRIP : GL_TRIANGLE_FAN; wingl -> ogl_glsl[MAXIS][0][3] = init_shader_program (MAXIS, GLSL_CAPS, vs_cap, NULL, fs_all, prim_cap, 5, 1, TRUE, axis_c); } plot -> ray_tracing = saved_tracing; return nshaders; } atomes_1.3.1/src/opengl/ogl_shading.c0000664000175000017500000013134315212624223017207 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file ogl_shading.c * @short Functions to create GLSL programs \n Functions to manage GLSL programs * @author Sébastien Le Roux */ /* * This file: 'ogl_shading.c' * * Contains: * - The functions to create GLSL programs - The functions to manage GLSL programs * * * List of functions: GLuint create_shader (int type, const GLchar * src); GLuint * alloc_shader_pointer (GLuint * pointer, int shaders); GLuint * glsl_add_lights (glsl_program * glsl); gboolean in_md_shaders (project * this_proj, int id); gboolean glsl_disable_cull_face (glsl_program * glsl); void allocate_instances (object_3d * object); void set_light_uniform_location (GLuint * lightning, int id, int j, int k, char * string); void glsl_bind_points (glsl_program * glsl, object_3d * obj); void glsl_bind_spheres (glsl_program * glsl, object_3d * obj); void glsl_bind_lines (glsl_program * glsl, object_3d * obj); void glsl_bind_cylinders (glsl_program * glsl, object_3d * obj); void glsl_bind_caps (glsl_program * glsl, object_3d * obj); void glsl_bind_polyhedra (glsl_program * glsl, object_3d * obj); void glsl_bind_background (glsl_program * glsl, object_3d * obj); void update_string_instances (glsl_program * glsl, object_3d * obj); void glsl_bind_string (glsl_program * glsl, object_3d * obj); void re_create_all_md_shaders (glwin * view); void re_create_md_shaders (int nshaders, int shaders[nshaders], project * this_proj); void cleaning_shaders (glwin * view, int shader); void recreate_all_shaders (glwin * view); void init_default_shaders (glwin * view); void init_shaders (glwin * view); void set_lights_data (glsl_program * glsl); void shading_glsl_text (glsl_program * glsl); void update_ray_instances (glsl_program * glsl); void render_this_shader (glsl_program * glsl, int ids); void draw_vertices (int id); glsl_program * free_this_glsl_program (glsl_program * glsl); glsl_program * init_shader_program (int object, int object_id, const GLchar * vertex, const GLchar * geometry, const GLchar * fragment, GLenum type_of_vertices, int narray, int nunif, gboolean lightning, object_3d * obj); object_3d * duplicate_object_3d (object_3d * old_obj); * * Notes: * */ #include "global.h" #include "interface.h" #include "glview.h" #include "ogl_shading.h" /* Create and compile a shader */ /*! \fn GLuint create_shader (int type, const GLchar * src) \brief create an OpenGL GLSL shader \param type type of the shader \param src name of the shader */ GLuint create_shader (int type, const GLchar * src) { GLuint shader; int status; shader = glCreateShader (type); glShaderSource (shader, 1, & src, NULL); glCompileShader (shader); glGetShaderiv (shader, GL_COMPILE_STATUS, & status); if (status == GL_FALSE) { int log_len; char *buffer; glGetShaderiv (shader, GL_INFO_LOG_LENGTH, & log_len); buffer = g_malloc0(log_len + 1); glGetShaderInfoLog (shader, log_len, NULL, buffer); g_warning (_("Compilation failure in %s shader:\n%s"), type == GL_VERTEX_SHADER ? "vertex" : "fragment", buffer); g_free (buffer); glDeleteShader (shader); return 0; } return shader; } /*! \fn GLuint * alloc_shader_pointer (GLuint * pointer, int shaders) \brief allocate GLuint data pointer, ensure that it is clean \param pointer the data pointer to allocate \param shaders the data size to allocate */ GLuint * alloc_shader_pointer (GLuint * pointer, int shaders) { if (pointer != NULL) { g_free (pointer); pointer = NULL; } return allocgluint(shaders); } #define LIGHT_INFO 3 #define MATERIAL_DATA 8 #define FOG_DATA 5 #define LIGHT_DATA 10 /*! \fn void allocate_instances (object_3d * object) \brief allocate the instances buffer of a 3D object \param object the target object_3d */ void allocate_instances (object_3d * object) { object -> instances = allocfloat (object -> num_instances * object -> inst_buffer_size); } /*! \fn void set_light_uniform_location (GLuint * lightning, int id, int j, int k, char * string) \brief set lightning uniform location \param lightning \param id shader id \param j light id \param k uniform id \param string uniform string */ void set_light_uniform_location (GLuint * lightning, int id, int j, int k, char * string) { gchar * light_string = g_strdup_printf ("AllLights[%d].%s", j, string); lightning[LIGHT_INFO+MATERIAL_DATA+FOG_DATA+LIGHT_DATA*j+k] = glGetUniformLocation (id, light_string); g_free (light_string); } /*! \fn GLuint * glsl_add_lights (glsl_program * glsl) \brief add lightning to an OpenGL shader program \param glsl the target glsl */ GLuint * glsl_add_lights (glsl_program * glsl) { int tot = MATERIAL_DATA + plot -> l_ghtning.lights * LIGHT_DATA + LIGHT_INFO + FOG_DATA; GLuint * lightning = allocgluint(tot); lightning[0] = glGetUniformLocation (glsl -> id, "m_view"); lightning[1] = glGetUniformLocation (glsl -> id, "m_proj"); lightning[2] = glGetUniformLocation (glsl -> id, "view_is_ortho"); lightning[3] = glGetUniformLocation (glsl -> id, "lights_on"); lightning[4] = glGetUniformLocation (glsl -> id, "mat.albedo"); lightning[5] = glGetUniformLocation (glsl -> id, "mat.metallic"); lightning[6] = glGetUniformLocation (glsl -> id, "mat.roughness"); lightning[7] = glGetUniformLocation (glsl -> id, "mat.ambient_occlusion"); lightning[8] = glGetUniformLocation (glsl -> id, "mat.gamma"); lightning[9] = glGetUniformLocation (glsl -> id, "mat.alpha"); lightning[10] = glGetUniformLocation (glsl -> id, "fog.mode"); lightning[11] = glGetUniformLocation (glsl -> id, "fog.based"); lightning[12] = glGetUniformLocation (glsl -> id, "fog.density"); lightning[13] = glGetUniformLocation (glsl -> id, "fog.depth"); lightning[14] = glGetUniformLocation (glsl -> id, "fog.color"); lightning[15] = glGetUniformLocation (glsl -> id, "numLights"); int j; for (j=0; j l_ghtning.lights; j++) { set_light_uniform_location (lightning, glsl -> id, j, 0, "type"); set_light_uniform_location (lightning, glsl -> id, j, 1, "position"); set_light_uniform_location (lightning, glsl -> id, j, 2, "direction"); set_light_uniform_location (lightning, glsl -> id, j, 3, "intensity"); set_light_uniform_location (lightning, glsl -> id, j, 4, "constant"); set_light_uniform_location (lightning, glsl -> id, j, 5, "linear"); set_light_uniform_location (lightning, glsl -> id, j, 6, "quadratic"); set_light_uniform_location (lightning, glsl -> id, j, 7, "cone_angle"); set_light_uniform_location (lightning, glsl -> id, j, 8, "spot_inner"); set_light_uniform_location (lightning, glsl -> id, j, 9, "spot_outer"); } return lightning; } /*! \fn void glsl_bind_points (glsl_program * glsl, object_3d * obj) \brief bind a 3D object point to an OpenGL shader program \param glsl the target glsl \param obj the 3D object point to bind */ void glsl_bind_points (glsl_program * glsl, object_3d * obj) { glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "offset"); glsl -> array_pointer[2] = glGetAttribLocation (glsl -> id, "size"); glsl -> array_pointer[3] = glGetAttribLocation (glsl -> id, "vertColor"); // The points vertices glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); // The instances (pos + col) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[1]); glBufferData(GL_ARRAY_BUFFER, obj -> inst_buffer_size * obj -> num_instances * sizeof(GLfloat), obj -> instances, GL_STATIC_DRAW); glEnableVertexAttribArray (glsl -> array_pointer[1]); glVertexAttribPointer (glsl -> array_pointer[1], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glVertexAttribDivisor (glsl -> array_pointer[1], 1); glEnableVertexAttribArray (glsl -> array_pointer[2]); glVertexAttribPointer (glsl -> array_pointer[2], 1, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[2], 1); glEnableVertexAttribArray (glsl -> array_pointer[3]); glVertexAttribPointer (glsl -> array_pointer[3], 4, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (4*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[3], 1); } /*! \fn void glsl_bind_spheres (glsl_program * glsl, object_3d * obj) \brief bind a 3D object sphere to an OpenGL shader program \param glsl the target glsl \param obj the 3D object sphere to bind */ void glsl_bind_spheres (glsl_program * glsl, object_3d * obj) { glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "offset"); glsl -> array_pointer[2] = glGetAttribLocation (glsl -> id, "radius"); glsl -> array_pointer[3] = glGetAttribLocation (glsl -> id, "vertColor"); // The sphere vertices glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); // The sphere indices glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glsl -> vbo[1]); glBufferData(GL_ELEMENT_ARRAY_BUFFER, obj -> num_indices*sizeof(GLint), obj -> indices, GL_STATIC_DRAW); // The instances (pos + col) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[2]); glBufferData(GL_ARRAY_BUFFER, obj -> inst_buffer_size * obj -> num_instances * sizeof(GLfloat), obj -> instances, GL_STATIC_DRAW); glEnableVertexAttribArray (glsl -> array_pointer[1]); glVertexAttribPointer (glsl -> array_pointer[1], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glVertexAttribDivisor (glsl -> array_pointer[1], 1); glEnableVertexAttribArray (glsl -> array_pointer[2]); glVertexAttribPointer (glsl -> array_pointer[2], 1, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[2], 1); glEnableVertexAttribArray (glsl -> array_pointer[3]); glVertexAttribPointer (glsl -> array_pointer[3], 4, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (4*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[3], 1); } /*! \fn void glsl_bind_lines (glsl_program * glsl, object_3d * obj) \brief bind a 3D object line to an OpenGL shader program \param glsl the target glsl \param obj the 3D object line to bind */ void glsl_bind_lines (glsl_program * glsl, object_3d * obj) { glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "vertColor"); // The line vertices glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size *sizeof(GLfloat), (GLvoid*) 0); glEnableVertexAttribArray(glsl -> array_pointer[1]); glVertexAttribPointer(glsl -> array_pointer[1], 4, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size *sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); if (glsl -> object == MEASU) { glsl -> uniform_loc[1] = glGetUniformLocation (glsl -> id, "factor"); glsl -> uniform_loc[2] = glGetUniformLocation (glsl -> id, "pattern"); glsl -> uniform_loc[3] = glGetUniformLocation (glsl -> id, "text_proj"); glsl -> uniform_loc[4] = glGetUniformLocation (glsl -> id, "un_view"); glsl -> uniform_loc[5] = glGetUniformLocation (glsl -> id, "viewp"); glsl -> uniform_loc[6] = glGetUniformLocation (glsl -> id, "depth"); } } /*! \fn void glsl_bind_cylinders (glsl_program * glsl, object_3d * obj) \brief bind a 3D object cylinder to an OpenGL shader program \param glsl the target glsl \param obj the 3D object, cylinder to bind */ void glsl_bind_cylinders (glsl_program * glsl, object_3d * obj) { glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "offset"); glsl -> array_pointer[2] = glGetAttribLocation (glsl -> id, "height"); glsl -> array_pointer[3] = glGetAttribLocation (glsl -> id, "radius"); glsl -> array_pointer[4] = glGetAttribLocation (glsl -> id, "quat"); glsl -> array_pointer[5] = glGetAttribLocation (glsl -> id, "vertColor"); // The cylinder vertices glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); // The cylinder indices glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glsl -> vbo[1]); glBufferData(GL_ELEMENT_ARRAY_BUFFER, obj -> num_indices*sizeof(GLint), obj -> indices, GL_STATIC_DRAW); // The instances (pos + lenght, + rad + rot + col) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[2]); glBufferData(GL_ARRAY_BUFFER, obj -> inst_buffer_size * obj -> num_instances * sizeof(GLfloat), obj -> instances, GL_STATIC_DRAW); glEnableVertexAttribArray (glsl -> array_pointer[1]); glVertexAttribPointer (glsl -> array_pointer[1], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glVertexAttribDivisor (glsl -> array_pointer[1], 1); glEnableVertexAttribArray (glsl -> array_pointer[2]); glVertexAttribPointer (glsl -> array_pointer[2], 1, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[2], 1); glEnableVertexAttribArray (glsl -> array_pointer[3]); glVertexAttribPointer (glsl -> array_pointer[3], 1, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (4*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[3], 1); glEnableVertexAttribArray (glsl -> array_pointer[4]); glVertexAttribPointer (glsl -> array_pointer[4], 4, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (5*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[4], 1); glEnableVertexAttribArray (glsl -> array_pointer[5]); glVertexAttribPointer (glsl -> array_pointer[5], 4, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (9*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[5], 1); if (obj -> inst_buffer_size == CYLI_BUFF_SIZE + 2) { glsl -> array_pointer[6] = glGetAttribLocation (glsl -> id, "r_sphere_a"); glsl -> array_pointer[7] = glGetAttribLocation (glsl -> id, "r_sphere_b"); glEnableVertexAttribArray (glsl -> array_pointer[6]); glVertexAttribPointer (glsl -> array_pointer[6], 1, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (13*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[6], 1); glEnableVertexAttribArray (glsl -> array_pointer[7]); glVertexAttribPointer (glsl -> array_pointer[7], 1, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (14*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[7], 1); } } /*! \fn void glsl_bind_caps (glsl_program * glsl, object_3d * obj) \brief bind a 3D object cylinder cap to an OpenGL shader program \param glsl the target glsl \param obj the 3D object, cylinder cap to bind */ void glsl_bind_caps (glsl_program * glsl, object_3d * obj) { glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "offset"); glsl -> array_pointer[2] = glGetAttribLocation (glsl -> id, "radius"); glsl -> array_pointer[3] = glGetAttribLocation (glsl -> id, "quat"); glsl -> array_pointer[4] = glGetAttribLocation (glsl -> id, "vertColor"); // The cylinder vertices glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); // The cylinder indices glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glsl -> vbo[1]); glBufferData(GL_ELEMENT_ARRAY_BUFFER, obj -> num_indices*sizeof(GLint), obj -> indices, GL_STATIC_DRAW); // The instances (pos + length, + rad + rot + col) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[2]); glBufferData(GL_ARRAY_BUFFER, obj -> inst_buffer_size * obj -> num_instances * sizeof(GLfloat), obj -> instances, GL_STATIC_DRAW); glEnableVertexAttribArray (glsl -> array_pointer[1]); glVertexAttribPointer (glsl -> array_pointer[1], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glVertexAttribDivisor (glsl -> array_pointer[1], 1); glEnableVertexAttribArray (glsl -> array_pointer[2]); glVertexAttribPointer (glsl -> array_pointer[2], 1, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[2], 1); glEnableVertexAttribArray (glsl -> array_pointer[3]); glVertexAttribPointer (glsl -> array_pointer[3], 4, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (4*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[3], 1); glEnableVertexAttribArray (glsl -> array_pointer[4]); glVertexAttribPointer (glsl -> array_pointer[4], 4, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (8*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[4], 1); } /*! \fn void glsl_bind_polyhedra (glsl_program * glsl, object_3d * obj) \brief bind a 3D object polyhedra to an OpenGL shader program \param glsl the target glsl \param obj the 3D object polyhedra to bind */ void glsl_bind_polyhedra (glsl_program * glsl, object_3d * obj) { glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "vertNormal"); glsl -> array_pointer[2] = glGetAttribLocation (glsl -> id, "vertColor"); // The polyhedra vertices (triangles + normal orientation) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glEnableVertexAttribArray(glsl -> array_pointer[1]); glVertexAttribPointer(glsl -> array_pointer[1], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); glEnableVertexAttribArray(glsl -> array_pointer[2]); glVertexAttribPointer(glsl -> array_pointer[2], 4, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) (6*sizeof(GLfloat))); } /*! \fn void glsl_bind_background (glsl_program * glsl, object_3d * obj) \brief bind background data to an OpenGL shader program \param glsl the target glsl \param obj the 3D object to bind */ void glsl_bind_background (glsl_program * glsl, object_3d * obj) { glsl -> uniform_loc[0] = glGetUniformLocation (glsl -> id, "first_color"); glsl -> uniform_loc[1] = glGetUniformLocation (glsl -> id, "second_color"); glsl -> uniform_loc[2] = glGetUniformLocation (glsl -> id, "gradient"); glsl -> uniform_loc[3] = glGetUniformLocation (glsl -> id, "position"); glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 2, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); } /*! \fn void update_string_instances (glsl_program * glsl, object_3d * obj) \brief Update OpenGL string texture instances \param glsl the target glsl \param obj */ void update_string_instances (glsl_program * glsl, object_3d * obj) { // The instances (pos) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[1]); glBufferData(GL_ARRAY_BUFFER, obj -> inst_buffer_size * obj -> num_instances * sizeof(GLfloat), obj -> instances, GL_STATIC_DRAW); glEnableVertexAttribArray (glsl -> array_pointer[2]); glVertexAttribPointer (glsl -> array_pointer[2], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glVertexAttribDivisor (glsl -> array_pointer[2], 1); if (glsl -> object == MEASU) { glEnableVertexAttribArray (glsl -> array_pointer[3]); glVertexAttribPointer (glsl -> array_pointer[3], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[3], 1); glEnableVertexAttribArray (glsl -> array_pointer[4]); glVertexAttribPointer (glsl -> array_pointer[4], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (6*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[4], 1); if (obj -> inst_buffer_size == 12) { glEnableVertexAttribArray (glsl -> array_pointer[5]); glVertexAttribPointer (glsl -> array_pointer[5], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (9*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[5], 1); } } } /*! \fn void glsl_bind_string (glsl_program * glsl, object_3d * obj) \brief bind a 3D object text string to an OpenGL shader program \param glsl the target glsl \param obj the 3D object text string to bind */ void glsl_bind_string (glsl_program * glsl, object_3d * obj) { glActiveTexture (GL_TEXTURE0); glBindTexture (ogl_texture, obj -> texture); glsl -> uniform_loc[1] = glGetUniformLocation (glsl -> id, "tex"); glUniform1i (glsl -> uniform_loc[1], 0); glsl -> uniform_loc[2] = glGetUniformLocation (glsl -> id, "text_proj"); glsl -> uniform_loc[3] = glGetUniformLocation (glsl -> id, "un_view"); glsl -> uniform_loc[4] = glGetUniformLocation (glsl -> id, "viewp"); glsl -> uniform_loc[5] = glGetUniformLocation (glsl -> id, "pos_shift"); glsl -> uniform_loc[6] = glGetUniformLocation (glsl -> id, "vert_color"); glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "tcoord"); glsl -> array_pointer[2] = glGetAttribLocation (glsl -> id, "offset"); if (glsl -> object == MEASU) { glsl -> uniform_loc[7] = glGetUniformLocation (glsl -> id, "tilted"); glsl -> array_pointer[3] = glGetAttribLocation (glsl -> id, "at_a"); glsl -> array_pointer[4] = glGetAttribLocation (glsl -> id, "at_b"); if (obj -> inst_buffer_size == 12) glsl -> array_pointer[5] = glGetAttribLocation (glsl -> id, "at_c"); } // The string (rendered using triangles and textures + colors) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 2, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glEnableVertexAttribArray(glsl -> array_pointer[1]); glVertexAttribPointer(glsl -> array_pointer[1], 2, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) (2*sizeof(GLfloat))); update_string_instances (glsl, obj); } /*! \fn object_3d * duplicate_object_3d (object_3d * old_obj) \brief create a copy of an object_3d data structure \param old_obj the data structure to copy */ object_3d * duplicate_object_3d (object_3d * old_obj) { object_3d * new_obj = g_malloc0(sizeof*new_obj); new_obj -> quality = old_obj -> quality; // Vertices new_obj -> num_vertices = old_obj -> num_vertices; new_obj -> vert_buffer_size = old_obj -> vert_buffer_size; new_obj -> vertices = duplicate_float (new_obj -> num_vertices*old_obj -> vert_buffer_size, old_obj -> vertices); // Indices new_obj -> num_indices = old_obj -> num_indices; new_obj -> ind_buffer_size = old_obj -> ind_buffer_size; if (old_obj -> indices != NULL) { new_obj -> indices = duplicate_int (new_obj -> num_indices*old_obj -> ind_buffer_size, old_obj -> indices); } // Instances new_obj -> num_instances = old_obj -> num_instances; new_obj -> inst_buffer_size = old_obj -> inst_buffer_size; if (old_obj -> instances != NULL) { new_obj -> instances = duplicate_float (new_obj -> num_instances*old_obj -> inst_buffer_size, old_obj -> instances); } new_obj -> texture = old_obj -> texture; int i; for (i=0; i<5; i++) new_obj -> shift[i] = old_obj -> shift[i]; return new_obj; } /*! \fn object_3d * free_object_3d (object_3d * obj) \brief free the memory allocated to create an object_3d data structure \param obj the target object_3d data structure to free */ object_3d * free_object_3d (object_3d * obj) { if (obj -> vertices) g_free (obj -> vertices); if (obj -> indices) g_free (obj -> indices); if (obj -> instances) g_free (obj -> instances); g_free (obj); return NULL; } /*! \fn glsl_program * free_this_glsl_program (glsl_program * glsl) \brief free memory allocated to create a glsl program \param glsl the target glsl program */ glsl_program * free_this_glsl_program (glsl_program * glsl) { if (glsl -> array_pointer) g_free (glsl -> array_pointer); if (glsl -> uniform_loc) g_free (glsl -> uniform_loc); if (glsl -> light_uniform) g_free (glsl -> light_uniform); if (glsl -> vbo) g_free (glsl -> vbo); glsl -> obj = free_object_3d (glsl -> obj); g_free (glsl); return NULL; } /*! \fn glsl_program * init_shader_program (int object, int object_id, const GLchar * vertex, const GLchar * geometry, const GLchar * fragment, GLenum type_of_vertices, int narray, int nunif, gboolean lightning, object_3d * obj) \brief create an OpenGL shader program \param object shader id (in enum shaders) \param object_id shader type in: GLSL_SPHERES, GLSL_POINTS, GLSL_LINES, GLSL_CYLINDERS, GLSL_CAPS, GLSL_POLYEDRA, GLSL_STRING, GLSL_BACK \param vertex general shader: in the shaders defined in 'ogl_shaders.c' \param geometry geometry shader, if any: in the shaders defined in 'ogl_shaders.c' \param fragment color shader, if any: in the shaders defined in 'ogl_shaders.c' \param type_of_vertices type of vertices in: GL_POINTS, GL_LINES, GL_TRIANGLE GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP \param narray number of vertices to allocate \param nunif number of uniform location(s) to allocate \param lightning use lightning (1/0) \param obj the object 3D to bind to the shader */ glsl_program * init_shader_program (int object, int object_id, const GLchar * vertex, const GLchar * geometry, const GLchar * fragment, GLenum type_of_vertices, int narray, int nunif, gboolean lightning, object_3d * obj) { glsl_program * glsl = g_malloc0(sizeof * glsl); glsl -> id = glCreateProgram (); glsl -> object = object; glsl -> draw_type = object_id; glsl -> vertex_shader = create_shader (GL_VERTEX_SHADER, vertex); glAttachShader (glsl -> id, glsl -> vertex_shader); if (geometry != NULL) { glsl -> geometry_shader = create_shader (GL_GEOMETRY_SHADER, geometry); glAttachShader (glsl -> id, glsl -> geometry_shader); } glsl -> fragment_shader = create_shader (GL_FRAGMENT_SHADER, fragment); glAttachShader (glsl -> id, glsl -> fragment_shader); glBindFragDataLocation (glsl -> id, 0, "fragment_color"); glLinkProgram(glsl -> id); glsl -> vert_type = type_of_vertices; glGenVertexArrays (1, & glsl -> vao); glBindVertexArray (glsl -> vao); glsl -> array_pointer = alloc_shader_pointer (glsl -> array_pointer, narray); glsl -> uniform_loc = alloc_shader_pointer (glsl -> uniform_loc, nunif); // For other than background always the MVP matrix as uniform 0 if (object_id != GLSL_BACK) glsl -> uniform_loc[0] = glGetUniformLocation (glsl -> id, "mvp"); // and always the vertices as array 0 glsl -> array_pointer[0] = glGetAttribLocation (glsl -> id, "vert"); glsl -> light_uniform = NULL; if (lightning) glsl -> light_uniform = glsl_add_lights (glsl); glsl -> obj = duplicate_object_3d (obj); if (glsl -> draw_type != GLSL_STRING) obj = free_object_3d (obj); glsl -> draw_instanced = FALSE; int nvbo = 1; if (glsl -> obj -> num_indices > 0) nvbo ++; if (glsl -> obj -> num_instances > 0) { nvbo ++; if (glsl -> obj -> num_instances > 1) glsl -> draw_instanced = TRUE; } glsl -> vbo = allocgluint (nvbo); glGenBuffers (nvbo, glsl -> vbo); switch (object_id) { case GLSL_SPHERES: // narray = 4 glsl_bind_spheres (glsl, glsl -> obj); break; case GLSL_POINTS: // narray = 4 glsl_bind_points (glsl, glsl -> obj); break; case GLSL_LINES: // narray = 3 glsl_bind_lines (glsl, glsl -> obj); break; case GLSL_CYLINDERS: // narray = 6 glsl_bind_cylinders (glsl, glsl -> obj); break; case GLSL_CAPS: // narray = 5 glsl_bind_caps (glsl, glsl -> obj); break; case GLSL_POLYEDRA: glsl_bind_polyhedra (glsl, glsl -> obj); break; case GLSL_STRING: glsl_bind_string (glsl, glsl -> obj); break; case GLSL_BACK: glsl_bind_background (glsl, glsl -> obj); break; } glDetachShader (glsl -> id,glsl -> vertex_shader); if (geometry != NULL) glDetachShader (glsl -> id, glsl -> geometry_shader); glDetachShader (glsl -> id, glsl -> fragment_shader); return glsl; } /*! \fn gboolean in_md_shaders (project * this_proj, int id) \brief is this shader MD dependent ? \param this_proj the target project \param id the shader id */ gboolean in_md_shaders (project * this_proj, int id) { if (id == ATOMS) return TRUE; if (id == BONDS) return TRUE; if (id == POLYS) return TRUE; if (id == RINGS) return TRUE; if (id == SELEC) return TRUE; if (id == MDBOX) return this_proj -> cell.npt; if (id == VOLMS) return TRUE; return FALSE; } /*! \fn void re_create_all_md_shaders (glwin * view) \brief re-initialize all MD dependent OpenGL shaders \param view the target glwin */ void re_create_all_md_shaders (glwin * view) { int i, j; project * this_proj = get_project_by_id(view -> proj); for (i=0; i steps; j++) view -> n_shaders[i][j] = -1; } } } /*! \fn void re_create_md_shaders (int nshaders, int shaders[nshaders], project * this_proj) \brief re-initialize some MD dependent OpenGL shaders \param nshaders the number of shader(s) to initialize \param shaders the list of shaders \param this_proj the target project */ void re_create_md_shaders (int nshaders, int shaders[nshaders], project * this_proj) { int i, j, k; for (i=0; i modelgl -> create_shaders[k] = TRUE; for (j=0; j steps; j++) { this_proj -> modelgl -> n_shaders[k][j] = -1; } } } /*! \fn void cleaning_shaders (glwin * view, int shader) \brief re-initialize an OpenGL shader \param view the target glwin \param shader the shader to initialize */ void cleaning_shaders (glwin * view, int shader) { int i, j, k; i = (in_md_shaders(get_project_by_id(view -> proj), shader)) ? step : 0; if (view -> ogl_glsl[shader][i] != NULL) { j = view -> n_shaders[shader][i]; for (k=0; k ogl_glsl[shader][i][k] = free_this_glsl_program (view -> ogl_glsl[shader][i][k]); } view -> n_shaders[shader][i] = (in_md_shaders(get_project_by_id(view -> proj), shader)) ? -1 : 0; } /*! \fn void recreate_all_shaders (glwin * view) \brief re-initialize all OpenGL shaders \param view the target glwin */ void recreate_all_shaders (glwin * view) { int i; for (i=0; i create_shaders[i] = TRUE; } } /*! \fn void init_default_shaders (glwin * view) \brief re-initialize the default OpenGL shaders \param view the target glwin */ void init_default_shaders (glwin * view) { int shaders[6] = {ATOMS, BONDS, SELEC, POLYS, RINGS, VOLMS}; re_create_md_shaders (6, shaders, get_project_by_id (view -> proj)); view -> create_shaders[LABEL] = TRUE; view -> create_shaders[PICKS] = TRUE; view -> create_shaders[MEASU] = TRUE; update (view); int i; if (is_atom_win_active(view) || (view -> mode == EDITION && (view -> anim -> last -> img -> selected[1] -> selected || view -> selection_mode == 5))) { if (view -> measure_win != NULL) { for (i=0; i<3; i++) { if (view -> measure_win -> selection_tree[i] != NULL) update_selection_tree (view, 1, i); } } } } /*! \fn void init_shaders (glwin * view) \brief initialize all the OpenGL shaders \param view the target glwin */ void init_shaders (glwin * view) { int i, j; project * this_proj = get_project_by_id (view -> proj); for (i=0; i ogl_glsl[i] = NULL; if (in_md_shaders (this_proj, i)) { view -> ogl_glsl[i] = g_malloc0(this_proj -> steps*sizeof*view -> ogl_glsl[i]); view -> n_shaders[i] = allocint (this_proj -> steps); for (j=0; j steps; j++) { view -> n_shaders[i][j] = -1; } } else { j = (i == MEASU) ? 2 : 1; view -> ogl_glsl[i] = g_malloc0(j*sizeof*view -> ogl_glsl[i]); view -> ogl_glsl[i][0] = NULL; view -> n_shaders[i] = allocint (j); } view -> create_shaders[i] = TRUE; } } /*! \fn gboolean glsl_disable_cull_face (glsl_program * glsl) \brief Disable or enable cull face for OpenGL rendering \param glsl the target glsl */ gboolean glsl_disable_cull_face (glsl_program * glsl) { if (glsl -> draw_type == GLSL_POINTS) { return FALSE; } else if (glsl -> draw_type == GLSL_LINES) { return FALSE; } else if (glsl -> draw_type == GLSL_LIGHT) { return FALSE; } else { return TRUE; } } /*! \fn void set_lights_data (glsl_program * glsl) \brief set lightning data for an OpenGL progam \param glsl the target glsl */ void set_lights_data (glsl_program * glsl) { int j, k; vec3_t l_pos, l_dir; glUniformMatrix4fv (glsl -> light_uniform[0], 1, GL_FALSE, & wingl -> model_view_matrix.m00); glUniformMatrix4fv (glsl -> light_uniform[1], 1, GL_FALSE, & wingl -> projection_matrix.m00); glUniform1i (glsl -> light_uniform[2], plot -> rep); glUniform1i (glsl -> light_uniform[3], (glsl -> draw_type == GLSL_LIGHT) ? 0 : plot -> m_terial.param[0]); glUniform3f (glsl -> light_uniform[4], plot -> m_terial.albedo.x, plot -> m_terial.albedo.y, plot -> m_terial.albedo.z); for (j=0; j<5; j++) glUniform1f (glsl -> light_uniform[5+j], plot -> m_terial.param[j+1]); glUniform1i (glsl -> light_uniform[10], plot -> f_g.mode); glUniform1i (glsl -> light_uniform[11], plot -> f_g.based); glUniform1f (glsl -> light_uniform[12], plot -> f_g.density/plot -> p_depth); glUniform2f (glsl -> light_uniform[13], plot -> f_g.depth[0]*plot -> p_depth/100.0 + plot -> p_depth, plot -> f_g.depth[1]*plot -> p_depth/100.0+ plot -> p_depth); glUniform3f (glsl -> light_uniform[14], plot -> f_g.color.x, plot -> f_g.color.y, plot -> f_g.color.z); glUniform1i (glsl -> light_uniform[15], plot -> l_ghtning.lights); for (j=0; j l_ghtning.lights; j++) { k = j*LIGHT_DATA + LIGHT_INFO + MATERIAL_DATA + FOG_DATA; glUniform1i (glsl -> light_uniform[k], plot -> l_ghtning.spot[j] -> type); if (plot -> l_ghtning.spot[j] -> fix == 0) { l_pos = m4_mul_pos (wingl -> model_matrix, plot -> l_ghtning.spot[j] -> position); } else { l_pos = m4_mul_pos (wingl -> model_view_matrix, plot -> l_ghtning.spot[j] -> position); } glUniform3f (glsl -> light_uniform[k+1], l_pos.x, l_pos.y, l_pos.z); if (plot -> l_ghtning.spot[j] -> fix == 0) { l_dir = m4_mul_pos (wingl -> model_matrix, plot -> l_ghtning.spot[j] -> direction); } else { l_dir = m4_mul_pos (wingl -> model_view_matrix, plot -> l_ghtning.spot[j] -> direction); } glUniform3f (glsl -> light_uniform[k+2], l_dir.x, l_dir.y, l_dir.z); glUniform3f (glsl -> light_uniform[k+3], plot -> l_ghtning.spot[j] -> intensity.x, plot -> l_ghtning.spot[j] -> intensity.y, plot -> l_ghtning.spot[j] -> intensity.z); glUniform1f (glsl -> light_uniform[k+4], plot -> l_ghtning.spot[j] -> attenuation.x); glUniform1f (glsl -> light_uniform[k+5], plot -> l_ghtning.spot[j] -> attenuation.y); glUniform1f (glsl -> light_uniform[k+6], plot -> l_ghtning.spot[j] -> attenuation.z); glUniform1f (glsl -> light_uniform[k+7], cos(plot -> l_ghtning.spot[j] -> spot_data.x*pi/180.0)); glUniform1f (glsl -> light_uniform[k+8], cos(plot -> l_ghtning.spot[j] -> spot_data.y*pi/180.0)); glUniform1f (glsl -> light_uniform[k+9], cos(plot -> l_ghtning.spot[j] -> spot_data.z*pi/180.0)); } } uint16_t stipple_pattern[NDOTS]={ 0xAAAA, 0x1111, 0x0000, 0x55FF, 0x24FF, 0x3F3F, 0x33FF, 0x27FF}; int this_tilt; int this_pattern; int this_factor; /*! \fn void shading_glsl_text (glsl_program * glsl) \brief Render text in OpenGL \param glsl the target glsl */ void shading_glsl_text (glsl_program * glsl) { wingl -> label_projection_matrix = create_label_matrices (); glUniformMatrix4fv (glsl -> uniform_loc[2], 1, GL_FALSE, & wingl -> label_projection_matrix.m00); glUniformMatrix4fv (glsl -> uniform_loc[3], 1, GL_FALSE, & wingl -> un_view_matrix.m00); glUniform4f (glsl -> uniform_loc[4], wingl -> view_port.w, wingl -> view_port.x, wingl -> view_port.y, wingl -> view_port.z); glUniform4f (glsl -> uniform_loc[5], glsl -> obj -> shift[0], glsl -> obj -> shift[1], glsl -> obj -> shift[2], glsl -> obj -> shift[3]); glUniform4f (glsl -> uniform_loc[6], glsl -> col -> red, glsl -> col -> green, glsl -> col -> blue, glsl -> col -> alpha); if (glsl -> object == MEASU) glUniform1i (glsl -> uniform_loc[7], this_tilt); } /*! \fn void render_this_shader (glsl_program * glsl, int ids) \brief render an OpenGL shader \param glsl the target glsl \param ids */ void render_this_shader (glsl_program * glsl, int ids) { int j, k; if (glsl -> object == MAXIS) { j = 0; if (is_atom_win_active(wingl)) { k = wingl -> atom_win -> active; if (wingl -> atom_win -> show_axis[k]) { j = wingl -> atom_win -> axis[k]; } } wingl -> axis_proj_model_view_matrix = create_axis_matrices (j); glUniformMatrix4fv (glsl -> uniform_loc[0], 1, GL_FALSE, & wingl -> axis_proj_model_view_matrix.m00); j = (plot -> xyz -> axis == WIREFRAME) ? 1 : 3; if (ids > j) shading_glsl_text (glsl); } else if (glsl -> object == LABEL) { glUniformMatrix4fv (glsl -> uniform_loc[0], 1, GL_FALSE, & wingl -> proj_model_view_matrix.m00); shading_glsl_text (glsl); } else if (glsl -> object == BACKG) { for (j=0; j<2; j++) { glUniform4f (glsl -> uniform_loc[j], plot -> back -> gradient_color[j].red, plot -> back -> gradient_color[j].green, plot -> back -> gradient_color[j].blue, plot -> back -> gradient_color[j].alpha); } glUniform1i (glsl -> uniform_loc[2], plot -> back -> direction); glUniform1f (glsl -> uniform_loc[3], plot -> back -> position); } else if (glsl -> object == MEASU) { glUniformMatrix4fv (glsl -> uniform_loc[0], 1, GL_FALSE, & wingl -> proj_model_view_matrix.m00); if (glsl -> vert_type == GL_TRIANGLE_STRIP) { shading_glsl_text (glsl); } else { glUniform1i (glsl -> uniform_loc[1], this_factor); glUniform1ui (glsl -> uniform_loc[2], stipple_pattern[this_pattern]); if (glsl -> vert_type == GL_TRIANGLES) { wingl -> label_projection_matrix = create_label_matrices (); glUniformMatrix4fv (glsl -> uniform_loc[3], 1, GL_FALSE, & wingl -> label_projection_matrix.m00); } glUniformMatrix4fv (glsl -> uniform_loc[4], 1, GL_FALSE, & wingl -> un_view_matrix.m00); glUniform4f (glsl -> uniform_loc[5], wingl -> view_port.w, wingl -> view_port.x, wingl -> view_port.y, wingl -> view_port.z); if (plot -> rep == PERSPECTIVE) { glUniform1f (glsl -> uniform_loc[6], 1.0); } else { glUniform1f (glsl -> uniform_loc[6], plot -> p_depth); } } } else if (glsl -> object == LIGHT) { if (plot -> light_loc[ids]) { glUniformMatrix4fv (glsl -> uniform_loc[0], 1, GL_FALSE, & wingl -> proj_model_matrix.m00); } else { glUniformMatrix4fv (glsl -> uniform_loc[0], 1, GL_FALSE, & wingl -> proj_model_view_matrix.m00); } } else { glUniformMatrix4fv (glsl -> uniform_loc[0], 1, GL_FALSE, & wingl -> proj_model_view_matrix.m00); } if (glsl -> line_width != 0.0) glLineWidth (glsl -> line_width); if (glsl -> light_uniform != NULL) set_lights_data (glsl); glBindVertexArray (glsl -> vao); if (glsl_disable_cull_face (glsl)) glDisable (GL_CULL_FACE); if (plot -> render == LINE) { glPolygonMode (GL_FRONT_AND_BACK, GL_LINE); glLineWidth (1.0); } else if (plot -> render == PTS) { glPolygonMode (GL_FRONT_AND_BACK, GL_POINT); } else { glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); } if (glsl -> draw_type == GLSL_SPHERES || glsl -> draw_type == GLSL_CYLINDERS || glsl -> draw_type == GLSL_CAPS) { gboolean poly_offset = (! plot -> ray_tracing && (glsl -> draw_type == GLSL_CYLINDERS || glsl -> draw_type == GLSL_CAPS)); if (poly_offset) { glEnable (GL_POLYGON_OFFSET_FILL); glPolygonOffset (1.0, 1.0); } if (glsl -> draw_instanced) { glDrawElementsInstanced (glsl -> vert_type, glsl -> obj -> num_indices, GL_UNSIGNED_INT, 0, glsl -> obj -> num_instances); } else { glDrawElements (glsl -> vert_type, glsl -> obj -> num_indices, GL_UNSIGNED_INT, 0); } if (poly_offset) { glDisable (GL_POLYGON_OFFSET_FILL); } } else if (glsl -> draw_type == GLSL_POINTS || glsl -> draw_type == GLSL_LINES || glsl -> draw_type == GLSL_STRING) { if (glsl -> draw_type == GLSL_STRING) { glEnable (ogl_texture); glActiveTexture (GL_TEXTURE0); glBindTexture (ogl_texture, glsl -> obj -> texture); } #ifdef GTK4 else { glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } #endif if (glsl -> draw_instanced) { j = (glsl -> draw_type == GLSL_STRING) ? 4 : 3*(glsl -> draw_type+1); glDrawArraysInstanced (glsl -> vert_type, 0, j, glsl -> obj -> num_instances); } else { glDrawArrays (glsl -> vert_type, 0, glsl -> obj -> num_vertices); } #ifdef GTK4 if (glsl -> draw_type == GLSL_POINTS || glsl -> draw_type == GLSL_LINES) { glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA); } #endif } else { if (glsl -> draw_type == GLSL_BACK) glDisable (GL_DEPTH_TEST); glDrawArrays (glsl -> vert_type, 0, glsl -> obj -> num_vertices); if (glsl -> draw_type == GLSL_BACK) glEnable (GL_DEPTH_TEST); } if (glsl_disable_cull_face (glsl)) glEnable (GL_CULL_FACE); glBindVertexArray (0); } /*! \fn void draw_vertices (int id) \brief Draw OpenGL shader program \param id the ID of the program to render */ void draw_vertices (int id) { int i, j; glsl_program * glsl; if (id != MEASU) { i = (in_md_shaders(proj_gl, id)) ? step : 0; for (j=0; j n_shaders[id][i]; j++) { if (wingl -> ogl_glsl[id][i][j]) { glsl = wingl -> ogl_glsl[id][i][j]; glUseProgram (glsl -> id); render_this_shader (glsl, j); } } } else { for (i=0; i<2; i++) { this_pattern = plot -> mpattern[i]; this_tilt = plot -> mtilt[i]; this_factor = plot -> mfactor[i]; for (j=0; j n_shaders[id][i]; j++) { if (wingl -> ogl_glsl[id][i][j]) { glsl = wingl -> ogl_glsl[id][i][j]; glUseProgram (glsl -> id); render_this_shader (glsl, j); } } } } } atomes_1.3.1/src/opengl/edit/0000775000175000017500000000000015212624223015505 5ustar lerouxlerouxatomes_1.3.1/src/opengl/edit/atom_species.c0000664000175000017500000001124215212624223020324 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_species.c * @short Functions to look for new chemical species and modify the chemical information accordingly * @author Sébastien Le Roux */ /* * This file: 'atom_species.c' * * Contains: * - The functions to look for new chemical species and modify the chemical information accordingly * * List of functions: int find_spec_id (int s, int z, double * list_z); int search_for_new_spec (atom_edition * edit, atomic_object * object); chemical_data * duplicate_chemical_data (int spec, chemical_data * chem); */ #include "atom_edit.h" /*! \fn chemical_data * duplicate_chemical_data (int spec, chemical_data * chem) \brief duplicate chemical data information \param spec the number of chemical species \param chem the chemical data to duplicate */ chemical_data * duplicate_chemical_data (int spec, chemical_data * chem) { chemical_data * newchem = g_malloc0(sizeof*chem); newchem -> label = g_malloc0(spec*sizeof*newchem -> label); newchem -> element = g_malloc0(spec*sizeof*newchem -> element); int i, j; for (i=0; i label[i] = g_strdup_printf ("%s", chem -> label[i]); newchem -> element[i] = g_strdup_printf ("%s", chem -> element[i]); } newchem -> nsps = duplicate_int (spec, chem -> nsps); newchem -> formula = duplicate_int (spec, chem -> formula); newchem -> cutoffs = allocddouble (spec, spec); newchem -> grtotcutoff = chem -> grtotcutoff; newchem -> chem_prop = allocddouble (CHEM_PARAMS, spec); for (i=0; i cutoffs[i][j] = chem -> cutoffs[i][j]; for (j=0; j chem_prop[j][i] = chem -> chem_prop[j][i]; } return newchem; } /*! \fn int find_spec_id (int s, int z, double * list_z) \brief find species id based on Z \param s the number of chemical species \param z the target Z \param list_z the list of Z values */ int find_spec_id (int s, int z, double * list_z) { int i; if (list_z) { for (i=0; i coord; int i, j, k, l, m; i = 0; for (j=0; j species; j++) { if (object -> old_z[j] > 0) { k = find_spec_id (coord -> species, object -> old_z[j], edit -> new_z); if (k < 0) { i ++; edit -> new_z = g_realloc (edit -> new_z, (coord -> species+i)*sizeof*edit -> new_z); edit -> new_z[coord -> species+i-1] = (double)object -> old_z[j]; } } } if (i) { coord_info * tmp = duplicate_coord_info (edit -> coord); for (j=0; j<2; j++) { if (coord -> species) { g_free (coord -> ntg[j]); g_free (coord -> geolist[j]); } coord -> ntg[j] = allocint (coord -> species + i); coord -> geolist[j] = g_malloc0((coord -> species + i)*sizeof* coord -> geolist[j]); if (j) { if (coord -> species) g_free (coord -> partial_geo); coord -> partial_geo = g_malloc0((coord -> species + i)*sizeof*coord -> partial_geo); } for (k=0; k species; k++) { coord -> ntg[j][k] = tmp -> ntg[j][k]; coord -> geolist[j][k] = duplicate_int (tmp -> ntg[j][k], tmp -> geolist[j][k]); if (j) { coord -> partial_geo[k] = allocdint (coord -> ntg[j][k], coord -> species + i); for (l=0; l ntg[j][k]; l++) { for (m=0; m species; m++) { coord -> partial_geo[k][l][m] = tmp -> partial_geo[k][l][m]; } } } } } coord -> species += i; g_free (tmp); } return i; } atomes_1.3.1/src/opengl/edit/cell_density.c0000664000175000017500000001262715212624223020337 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cell_density.c * @short Functions to create the 'density adjustment' tab in the cell edition window * @author Sébastien Le Roux */ /* * This file: 'cell_density.c' * * Contains: * - The functions to create the 'density adjustment' tab in the cell edition window * * List of functions: void display_density (cell_edition * cell, double vol, double dens, double adens); G_MODULE_EXPORT void set_rescaling (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_rescaling (GtkToggleButton * but, gpointer data); GtkWidget * adjust_density_tab (project * this_proj); */ #include "cell_edit.h" /*! \fn void display_density (cell_edition * cell, double vol, double dens, double adens) \brief create density information widgets \param cell the target cell edition \param vol the volume \param dens the density \param adens the atomic density */ void display_density (cell_edition * cell, double vol, double dens, double adens) { cell -> density = destroy_this_widget (cell -> density); cell -> density = create_vbox (BSEP); GtkWidget * hbox; gchar * pname[3]= {i18n("Volume:"), i18n("Mass density:"), i18n("Number density:")}; gchar * punit[3]= {"Å3", "g/cm3", i18n("atom/Å3")}; double val[3]; val[0] = vol; val[1] = dens; val[2] = adens; int i; gchar * str; for (i=0; i<3; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cell -> density, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(pname[i]), 120, -1, 0.0, 0.5), FALSE, FALSE, 100); str = g_strdup_printf ("%f", val[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 1.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label((i==2) ? _(punit[i]) : punit[i], 20, -1, 0.5, 0.5), FALSE, FALSE, 10); } add_box_child_start (GTK_ORIENTATION_VERTICAL, cell -> density_box, cell -> density, FALSE, FALSE, 10); show_the_widgets (cell -> density); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_rescaling (GtkCheckButton * but, gpointer data) \brief homogeneous rescaling toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_rescaling (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_rescaling (GtkToggleButton * but, gpointer data) \brief homogeneous rescaling toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_rescaling (GtkToggleButton * but, gpointer data) #endif { glwin * view = (glwin *)data; view -> cell_win -> homo_density = button_get_status ((GtkWidget *)but); widget_set_sensitive (view -> cell_win -> shift_box[1], view -> cell_win -> homo_density); } /*! \fn GtkWidget * adjust_density_tab (project * this_proj) \brief create the density tab \param this_proj the target project */ GtkWidget * adjust_density_tab (project * this_proj) { GtkWidget * layout = create_layout (350, 400); GtkWidget * vbox = create_vbox (BSEP); layout_add_widget (layout, vbox, 100, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Modify the density of the simulation box *: "), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (_("Homogeneous rescaling **"), -1, -1, this_proj -> modelgl -> cell_win -> homo_density, G_CALLBACK(set_rescaling), this_proj -> modelgl), FALSE, FALSE, 5); int i; for (i=3; i<6; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); this_proj -> modelgl -> cell_win -> density_box = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, this_proj -> modelgl -> cell_win -> density_box, FALSE, FALSE, 5); display_density (this_proj -> modelgl -> cell_win, this_proj -> cell.volume, this_proj -> cell.density, this_proj -> natomes/this_proj -> cell.volume); gchar * info[2] = {i18n(" * Visual information will be preserved, real bonding is likely to be modified.\n" " Bond properties should be re-calculated, if required bond cutoffs should be updated."), i18n("** Keep the ratios between the lattice vectors A, B and C like in the initial cell.")}; for (i=0; i<2; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_(info[i]), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); show_the_widgets (layout); return layout; } atomes_1.3.1/src/opengl/edit/cbuild_info.c0000664000175000017500000004577615212624223020151 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cbuild_info.c * @short Functions to create the space group information dialog * @author Sébastien Le Roux */ /* * This file: 'cbuild_info.c' * * Contains: * - The functions to create the space group information dialog * * List of functions: gchar * get_bravais (int spg); gchar * get_frac (float val); void get_wyck_char (float val, int ax, int bx); void get_extra_val (float val, int ax); void get_wyck_names (space_group * spg, int i, int j); void set_wisible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); static void fill_wyckoff_model (GtkTreeStore * store, space_group * spg); G_MODULE_EXPORT void set_so_info (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void show_sg_info (GtkWidget * but, gpointer data); GtkWidget * create_wyckoff_tree (space_group * spg); GtkWidget * create_setting_info (space_group * spg, int sid); GtkWidget * create_wyck_pts_info (space_group * spg, int sid); */ #include "global.h" #include "interface.h" #include "glview.h" #include "cbuild_edit.h" extern int get_crystal_id (int spg); extern int get_bravais_img_id (int spg); extern gchar * frac_string (gchar * init); extern gchar * get_num_string (gchar * str); extern gchar * get_so_string (space_group * spg, int id); extern GtkTreeModel * so_combo_tree (space_group * spg); extern gchar * tmp_pos; extern gchar * latt_info[7]; GtkWidget * info_hsbox; GtkWidget * info_vs; GtkWidget * wypts_vbox; GtkWidget * info_wyck_pts; GtkWidget * info_wyck_scroll; GtkWidget * info_wyck_tree; gchar * wnpos[3] = {NULL, NULL, NULL}; /*! \fn gchar * get_bravais (int spg) \brief retrieve the space group bravais lattice \param spg the target space group id */ gchar * get_bravais (int spg) { if (groups[spg-1][0] == 'A' || groups[spg-1][0] == 'C') { return _("Base-centered"); } else if (groups[spg-1][0] == 'F') { return _("Face-centered"); } else if (groups[spg-1][0] == 'I') { return _("Body-centered"); } else if (groups[spg-1][0] == 'P') { return _("Primitive "); } else if (groups[spg-1][0] == 'R') { return _("Rhombohedral"); } else { return NULL; } } /*! \fn gchar * get_frac (float val) \brief get string for value \param val the target value */ gchar * get_frac (float val) { float vallist[12] = {1.0, 1.0/2.0, 1.0/4.0, 3.0/4.0, 1.0/8.0, 3.0/8.0, 5.0/8.0, 7.0/8.0, 1.0/3.0, 2.0/3.0, 1.0/6.0, 5.0/6.0}; gchar * charlist[12] = {"1", "1/2", "1/4", "3/4", "1/8", "3/8", "5/8", "7/8", "1/3", "2/3", "1/6", "5/6"}; int i; for (i=0; i<12; i++) { if (fabs(val) - vallist[i] == 0.0) return g_strdup_printf ("%s", charlist[i]); } return NULL; } /*! \fn void get_wyck_char (float val, int ax, int bx) \brief convert wyckoff value to string \param val the target value \param ax axis id, x = 0, y = 1, z = 2 \param bx axis label 0 = "x", 1 = "y", 2 = "z" */ void get_wyck_char (float val, int ax, int bx) { if (wnpos[ax]) { if (fabs(val) == 1.0) { if (val > 0.0) { wnpos[ax] = g_strdup_printf ("%s+%s", wnpos[ax], vect_comp[bx]); } else { wnpos[ax] = g_strdup_printf ("%s-%s", wnpos[ax], vect_comp[bx]); } } else if (val != 0.0) { if (val > 0.0) { wnpos[ax] = g_strdup_printf ("%s+%s%s", wnpos[ax], get_frac(val), vect_comp[bx]); } else { wnpos[ax] = g_strdup_printf ("%s-%s%s", wnpos[ax], get_frac(val), vect_comp[bx]); } } } else { if (fabs(val) == 1.0) { if (val > 0.0) { wnpos[ax] = g_strdup_printf ("%s", vect_comp[bx]); } else { wnpos[ax] = g_strdup_printf ("-%s", vect_comp[bx]); } } else if (val != 0.0) { if (val > 0.0) { wnpos[ax] = g_strdup_printf ("%s%s", get_frac(val), vect_comp[bx]); } else { wnpos[ax] = g_strdup_printf ("-%s%s", get_frac(val), vect_comp[bx]); } } } } /*! \fn void get_extra_val (float val, int ax) \brief convert wyckoff extra value to string \param val the target value \param ax axis id, x = 0, y = 1, z = 2 */ void get_extra_val (float val, int ax) { if (val) { if (wnpos[ax]) { if (val > 0.0) { wnpos[ax] = g_strdup_printf ("%s+%s", wnpos[ax], get_frac(val)); } else { wnpos[ax] = g_strdup_printf ("%s-%s", wnpos[ax], get_frac(val)); } } else { float v = (val > 0.0) ? val : 1.0 + val; v = (v == 1.0) ? 0.0 : v; if (v != 0.0) wnpos[ax] = g_strdup_printf ("%s", get_frac(v)); } } } /*! \fn void get_wyck_names (space_group * spg, int i, int j) \brief get the name of this wyckoff position \param spg the target space group \param i the wyckoff position id \param j the multiplicity for this wyckoff position */ void get_wyck_names (space_group * spg, int i, int j) { int k, l; double spgpos[3][4]; mat4_t wpos; for (k=0; k<3; k++) { tmp_pos = g_strdup_printf ("%s", spg -> wyckoff[i].pos[j][k]); for (l=0; l<3; l++) { spgpos[k][l] = get_val_from_wyckoff (vect_comp[l], spg -> wyckoff[i].pos[j][k]); } if (tmp_pos) { spgpos[k][3] = get_value_from_pos (tmp_pos); g_free (tmp_pos); tmp_pos = NULL; } else { spgpos[k][3] = 0.0; } } wpos = mat4 (spgpos[0][0], spgpos[0][1], spgpos[0][2], spgpos[0][3], spgpos[1][0], spgpos[1][1], spgpos[1][2], spgpos[1][3], spgpos[2][0], spgpos[2][1], spgpos[2][2], spgpos[2][3], 0.0, 0.0, 0.0, 1.0); if (i == spg -> numw - 1) m4_print (wpos); wpos = m43_mul(spg -> wyck_origin, wpos); for (k=0; k<3; k++) { if (wnpos[k]) { g_free (wnpos[k]); wnpos[k] = NULL; } } get_wyck_char (wpos.m00, 0, 0); get_wyck_char (wpos.m10, 0, 1); get_wyck_char (wpos.m20, 0, 2); get_extra_val (wpos.m30, 0); get_wyck_char (wpos.m01, 1, 0); get_wyck_char (wpos.m11, 1, 1); get_wyck_char (wpos.m21, 1, 2); get_extra_val (wpos.m31, 1); get_wyck_char (wpos.m02, 2, 0); get_wyck_char (wpos.m12, 2, 1); get_wyck_char (wpos.m22, 2, 2); get_extra_val (wpos.m32, 2); for (k=0; k<3; k++) if (! wnpos[k]) wnpos[k] = g_strdup_printf ("0"); } /*! \fn static void fill_wyckoff_model (GtkTreeStore * store, space_group * spg) \brief fill wyckoff position tree store \param store the tree store to fill \param spg the target space group */ static void fill_wyckoff_model (GtkTreeStore * store, space_group * spg) { GtkTreeIter wlevel; GtkTreeIter mlevel; int i, j, k; gchar * str; gchar * strw[3]; if (spg) { for (i=0; i numw; i++) { gtk_tree_store_append (store, & wlevel, NULL); str = g_strdup_printf ("%d", spg -> wyckoff[i].multi); gtk_tree_store_set (store, & wlevel, 0, 1, 1, i+1, 2, str, 3, spg -> wyckoff[i].let, 4, spg -> wyckoff[i].site, -1); g_free (str); for (j=0; j wyckoff[i].multi; j++) { get_wyck_names (spg, i, j); gtk_tree_store_append (store, & mlevel, & wlevel); for (k= 0; k<3; k++) strw[k] = frac_string (wnpos[k]); str = g_strdup_printf ("(%s,%s,%s)", strw[0], strw[1], strw[2]); for (k= 0; k<3; k++) g_free (strw[k]); gtk_tree_store_set (store, & mlevel, 0, 0, 5, str, -1); g_free (str); } } } } /*! \fn void set_wisible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer, if visible then add or not pango markup \param col the tree view column \param renderer the cell renderer \param mod the tree model \param iter the tree iter \param data the associated data pointer */ void set_wisible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & j, -1); if ((j && (i > 1 && i < 5)) || (!j && i==5)) { set_renderer_markup (mod, iter, renderer, i); } gtk_cell_renderer_set_visible (renderer, (i<5) ? j : ! j); } /*! \fn GtkWidget * create_wyckoff_tree (space_group * spg) \brief create wyckoff position tree \param spg the target space group */ GtkWidget * create_wyckoff_tree (space_group * spg) { int i; GtkTreeViewColumn * wcol[6]; GtkCellRenderer * wcell[6]; gchar * wtitle[6] = {" ", i18n("Id."), i18n("Multiplicity"), i18n("Letter"), i18n("Symmetry"), i18n("Coordinates")}; gchar * wtype[6] = {"text", "text", "text", "text", "text", "text"}; GType w_type[6] = {G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING}; GtkTreeStore * wmodel = gtk_tree_store_newv (6, w_type); GtkWidget * wtree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(wmodel)); for (i=0; i<6; i++) { wcell[i] = gtk_cell_renderer_text_new(); wcol[i] = gtk_tree_view_column_new_with_attributes((i) ? _(wtitle[i]) : wtitle[i], wcell[i], wtype[i], i, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(wtree), wcol[i]); gtk_tree_view_column_set_cell_data_func (wcol[i], wcell[i], set_wisible, GINT_TO_POINTER(i), NULL); if (!i) gtk_tree_view_column_set_visible (wcol[i], FALSE); } fill_wyckoff_model (wmodel, spg); g_object_unref (wmodel); return wtree; } /*! \fn GtkWidget * create_setting_info (space_group * spg, int sid) \brief create setting information label \param spg the target space group \param sid the setting id */ GtkWidget * create_setting_info (space_group * spg, int sid) { gchar * sxyz[3]; int i; for (i=0; i<3; i++) { sxyz[i] = g_strdup_printf ("%s", spg -> settings[sid].pos[i]); sxyz[i] = frac_string (sxyz[i]); } gchar * str = g_strdup_printf ("(%s,%s,%s)", sxyz[0], sxyz[1], sxyz[2]); for (i=0; i<3; i++) g_free (sxyz[i]); GtkWidget * label = markup_label(str, 90, -1, 0.0, 0.5); g_free (str); return label; } /*! \fn GtkWidget * create_wyck_pts_info (space_group * spg, int sid) \brief create wyckoff label \param spg the target space group \param sid the setting id */ GtkWidget * create_wyck_pts_info (space_group * spg, int sid) { int i, j; gchar * str; gchar * sxyz[3]; if (spg -> settings[sid].nump > 1) { for (i=0; i settings[sid].nump; i++) { for (j=0; j<3; j++) { sxyz[j] = g_strdup_printf ("%s", spg -> settings[sid].points[i][j]); sxyz[j] = frac_string (sxyz[j]); } if (! i) { str = g_strdup_printf ("+(%s,%s,%s)", sxyz[0], sxyz[1], sxyz[2]); } else { str = g_strdup_printf ("%s\t+(%s,%s,%s)", str, sxyz[0], sxyz[1], sxyz[2]); } for (j=0; j<3; j++) g_free (sxyz[j]); } return markup_label(str, -1, -1, 0.5, 0.5); } else { return NULL; } } /*! \fn G_MODULE_EXPORT void set_so_info (GtkComboBox * box, gpointer data) \brief change space group origin \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_so_info (GtkComboBox * box, gpointer data) { builder_edition * cbuilder = (builder_edition *)data; int i = combo_get_active ((GtkWidget *)box); combo_set_active (cbuilder -> so_combo, i); if (i > -1) { info_vs = destroy_this_widget (info_vs); info_vs = create_setting_info (cbuilder -> cell.sp_group, i); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, info_hsbox, info_vs, FALSE, FALSE, 5); show_the_widgets (info_vs); info_wyck_pts = destroy_this_widget(info_wyck_pts); info_wyck_pts = create_wyck_pts_info (cbuilder -> cell.sp_group, i); if (info_wyck_pts) { add_box_child_start (GTK_ORIENTATION_VERTICAL, wypts_vbox, info_wyck_pts, FALSE, FALSE, 0); show_the_widgets (wypts_vbox); } if (info_wyck_scroll) { info_wyck_tree = destroy_this_widget (info_wyck_tree); info_wyck_tree = create_wyckoff_tree (cbuilder -> cell.sp_group); add_container_child (CONTAINER_SCR, info_wyck_scroll, info_wyck_tree); show_the_widgets (info_wyck_scroll); } } } /*! \fn G_MODULE_EXPORT void show_sg_info (GtkWidget * but, gpointer data) \brief show space group information dialog callback \param but the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_sg_info (GtkWidget * but, gpointer data) { tint * id = (tint *) data; space_group * spg = get_project_by_id(id -> a) -> modelgl -> builder_win -> cell.sp_group; gchar * str = g_strdup_printf (_("%s info"), groups[spg -> id-1]); str = substitute_string (str, "", NULL); str = substitute_string (str, "", NULL); GtkWidget * info = dialogmodal (str, GTK_WINDOW(get_project_by_id(id -> a) -> modelgl -> builder_win -> win)); GtkWidget * vbox, * hbox; vbox = dialog_get_content_area (info); GtkWidget * ivbox[2]; GtkWidget * ihbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, ihbox, FALSE, FALSE, 0); int xsize = 150; int i; for (i=0; i<2; i++) { ivbox[i] = create_vbox(i); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ihbox, ivbox[i], FALSE, FALSE, 0); } hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Space group: "), xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%s", groups[spg -> id-1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[0], hbox, FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Number: "), xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%d", spg -> id); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[0], hbox, FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Hermman-Mauguin: ", xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%s", spg -> hms); str = g_strdup_printf ("%s", get_num_string(str)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[0], hbox, FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Crystal system: "), xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%s", spg -> bravais); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[0], hbox, FALSE, FALSE, 5); str = get_bravais(spg -> id); if (str) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Bravais lattice: "), xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%s", str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[0], hbox, FALSE, FALSE, 5); } hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Lattice constraints: "), xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%s", latt_info[get_crystal_id (spg -> id)]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 150, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[0], hbox, FALSE, FALSE, 5); GtkWidget * bvimg = gtk_image_new_from_file (bravais_img[get_bravais_img_id(spg -> id)]); #ifdef GTK4 gtk_widget_set_size_request (bvimg, 200, 200); gtk_widget_set_hexpand (bvimg, TRUE); gtk_widget_set_vexpand (bvimg, TRUE); #endif add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[1], bvimg, FALSE, FALSE, 5); info_hsbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, info_hsbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, info_hsbox, markup_label(_("Setting(s): "), xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); if (spg -> nums > 1) { GtkTreeModel * model = so_combo_tree (spg); GtkWidget * sbox = gtk_combo_box_new_with_model (model); g_object_unref (model); GtkCellRenderer * renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (sbox), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (sbox), renderer, "text", 0, NULL); gtk_widget_set_size_request (sbox, 150, 25); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, info_hsbox, sbox, FALSE, FALSE, 5); combo_set_active (sbox, 0); g_signal_connect (G_OBJECT(sbox), "changed", G_CALLBACK(set_so_info), get_project_by_id(id -> a) -> modelgl -> builder_win); combo_set_markup (sbox); } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, info_hsbox, markup_label(get_so_string (spg, 0), 50, -1, 0.0, 0.5), FALSE, FALSE, 5); } info_vs = create_setting_info (spg, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, info_hsbox, info_vs, FALSE, FALSE, 0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Wyckoff position(s): "), xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); wypts_vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, wypts_vbox, FALSE, FALSE, 5); info_wyck_pts = create_wyck_pts_info (spg, 0); if (info_wyck_pts) add_box_child_start (GTK_ORIENTATION_VERTICAL, wypts_vbox, info_wyck_pts, FALSE, FALSE, 0); info_wyck_scroll = create_scroll (NULL, 400, 200, GTK_SHADOW_NONE); info_wyck_tree = create_wyckoff_tree (spg); add_container_child (CONTAINER_SCR, info_wyck_scroll, info_wyck_tree); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, info_wyck_scroll, FALSE, FALSE, 5); show_the_widgets (info); run_this_gtk_dialog (info, G_CALLBACK(run_destroy_dialog), NULL); } atomes_1.3.1/src/opengl/edit/cbuild_sg.c0000664000175000017500000006703515212624223017617 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cbuild_sg.c * @short Functions to read space group data from XML files * @author Sébastien Le Roux */ /* * This file: 'cbuild_sg.c' * * Contains: * - The functions to read space group data from XML files * * List of functions: int get_this_group_data (space_group * spg, xmlNodePtr racine); space_group * clean_sgl_data (xmlDoc * doc, xmlTextReaderPtr reader); space_group * read_sg_xml_file (const char * filetoread); */ #include "global.h" #include "cbuild_edit.h" gchar * groups[230] = {"P1", "P-1", "P2", "P21", "C2", "Pm", "Pc", "Cm", "Cc", "P2/m", "P21/m", "C2/m", "P2/c", "P21/c", "C2/c", "P222", "P2221", "P21212", "P212121", "C2221", "C222", "F222", "I222", "I212121", "Pmm2", "Pmc21", "Pcc2", "Pma2", "Pca21", "Pnc2", "Pmn21", "Pba2", "Pna21", "Pnn2", "Cmm2", "Cmc21", "Ccc2", "Amm2", "Aem2", "Ama2", "Aea2", "Fmm2", "Fdd2", "Imm2", "Iba2", "Ima2", "Pmmm", "Pnnn", "Pccm", "Pban", "Pmma", "Pnna", "Pmna", "Pcca", "Pbam", "Pccn", "Pbcm", "Pnnm", "Pmmn", "Pbcn", "Pbca", "Pnma", "Cmcm", "Cmce", "Cmmm", "Cccm", "Cmme", "Ccce", "Fmmm", "Fddd", "Immm", "Ibam", "Ibca", "Imma", "P4", "P41", "P42", "P43", "I4", "I41", "P-4", "I-4", "P4/m", "P42/m", "P4/n", "P42/n", "I4/m", "I41/a", "P422", "P4212", "P4122", "P41212", "P4222", "P42212", "P4322", "P43212", "I422", "I4122", "P4mm", "P4bm", "P42cm", "P42nm", "P4cc", "P4nc", "P42mc", "P42bc", "I4mm", "I4cm", "I41md", "I41cd", "P-42m", "P-42c", "P-421m", "P-421c", "P-4m2", "P-4c2", "P-4b2", "P-4n2", "I-4m2", "I-4c2", "I-42m", "I-42d", "P4/mmm", "P4/mcc", "P4/nbm", "P4/nnc", "P4/mbm", "P4/mnc", "P4/nmm", "P4/ncc", "P42/mmc", "P42/mcm", "P42/nbc", "P42/nnm", "P42/mbc", "P42/mnm", "P42/nmc", "P42/ncm", "I4/mmm", "I4/mcm", "I41/amd", "I41/acd", "P3", "P31", "P32", "R3", "P-3", "R-3", "P312", "P321", "P3112", "P3121", "P3212", "P3221", "R32", "P3m1", "P31m", "P3c1", "P31c", "R3m", "R3c", "P-31m", "P-31c", "P-3m1", "P-3c1", "R-3m", "R-3c", "P6", "P61", "P65", "P62", "P64", "P63", "P-6", "P6/m", "P63/m", "P622", "P6122", "P6522", "P6222", "P6422", "P6322", "P6mm", "P6cc", "P63cm", "P63mc", "P-6m2", "P-6c2", "P-62m", "P-62c", "P6/mmm", "P6/mcc", "P63/mcm", "P63/mmc", "P23", "F23", "I23", "P213", "I213", "Pm-3", "Pn-3", "Fm-3", "Fd-3", "Im-3", "Pa-3", "Ia-3", "P432", "P4232", "F432", "F4132", "I432", "P4332", "P4132", "I4132", "P-43m", "F-43m", "I-43m", "P-43n", "F-43c", "I-43d", "Pm-3m", "Pn-3n", "Pm-3n", "Pn-3m", "Fm-3m", "Fm-3c", "Fd-3m", "Fd-3c", "Im-3m", "Ia-3d"}; gchar * hmsymbols[230] = {"P 1", "P -1", "P 1 2 1", "P 1 21 1", "C 1 2 1", "P 1 m 1", "P 1 c 1", "C 1 m 1", "C 1 c 1", "P 1 2/m 1", "P 1 21/m 1", "C 1 2/m 1", "P 1 2/c 1", "P 1 21/c 1", "C 1 2/c 1", "P 2 2 2", "P 2 2 21", "P 21 21 2", "P 21 21 21", "C 2 2 21", "C 2 2 2", "F 2 2 2", "I 2 2 2", "I 21 21 21", "P m m 2", "P m c 21", "P c c 2", "P m a 2", "P c a 21", "P n c 2", "P m n 21", "P b a 2", "P n a 21", "P n n 2", "C m m 2", "C m c 21", "C c c 2", "A m m 2", "A e m 2", "A m a 2", "A e a 2", "F m m 2", "F d d 2", "I m m 2", "I b a 2", "I ma 2", "P 2/m 2/m 2/m", "P 2/n 2/n 2/n", "P 2/c 2/c 2/m", "P 2/b 2/a 2/n", "P 21 /m 2/m 2/a", "P 2/n 21/n 2/a", "P 2/m 2/n 21/a", "P 21/c 2/c 2/a", "P 21/b 21/a 2/m", "P 21/c 21/c 2/n", "P 2/b 21/c 21/m", "P 21/n 21/n 2/m", "P 21/m 21/m 2/n", "P 21/b 2/c 21/n", "P 21/b 21/c 21/a", "P 21/n 21/m 21/a", "C 2/m 2/c 21/m", "C 2/m 2/c 21/e", "C 2/m 2/m 2/m", "C 2/c 2/c 2/m", "C 2/m 2/m 2/e", "C 2/c 2/c 2/e", "F 2/m 2/m 2/m", "F 2/d 2/d 2/d", "I 2/m 2/m 2/m", "I 2/b 2/a 2/m", "I 21/b 21/c 21/a", "I 21/m 21/m 21/a", "P 4", "P 41", "P 42", "P 43", "I 4", "I 41", "P -4", "I -4", "P 4/m", "P 42/m", "P 4/n", "P 42/n", "I 4/m", "I 41/a", "P 4 2 2", "P 4 21 2", "P 41 2 2", "P 41 21 2", "P 42 2 2", "P 42 21 2", "P 43 2 2", "P 43 21 2", "I 4 2 2", "I 41 2 2", "P 4 m m", "P 4 b m", "P 42 c m", "P 42 n m", "P 4 c c", "P 4 n c", "P 42 m c", "P 42 b c", "I 4 m m", "I 4 c m", "I 41 m d", "I 41 c d", "P -4 2 m", "P -4 2 c", "P -4 21 m", "P -4 21 c", "P -4 m 2", "P -4 c 2", "P -4 b 2", "P -4 n 2", "I -4 m 2", "I -4 c 2", "I -4 2 m", "I -4 2 d", "P 4/m 2/m 2/m", "P 4/m 2/c 2/c", "P 4/n 2/b 2/m", "P 4/n 2/n 2/c", "P 4/m 21/b 2/m", "P 4/m 21/b 2/m", "P 4/n 21/m 2/m", "P 4/n 21/c 2/c", "P 42/m 2/m 2/c", "P 42/m 2/c 2/m", "P 42/n 2/b 2/c", "P 42/n 2/n 2/m", "P 42/m 21/b 2/c", "P 42/m 21/n 2/m", "P 42/n 21/m 2/c", "P 42/n 21/c 2/m", "I 4/m 2/m 2/m", "I 4/m 2/c 2/m", "I 41/a 2/m 2/d", "I 41/a 2/c 2/d", "P 3", "P 31", "P 32", "R 3", "P -3", "R -3", "P 3 1 2", "P 3 2 1", "P 31 1 2", "P 31 2 1", "P 32 1 2", "P 32 2 1", "R 3 2", "P 3 m 1", "P 3 1 m", "P 3 c 1", "P 3 1 c", "R 3 m", "R 3 c", "P -3 1 2/m", "P -3 1 2/c", "P -3 2/m 1", "P -3 2/c 1", "R -3 2/m", "R -3 2/c", "P 6", "P 61", "P 65", "P 62", "P 64", "P 63", "P -6", "P 6/m", "P 63/m", "P 6 2 2", "P 61 2 2", "P 65 2 2", "P 62 2 2", "P 64 2 2", "P 63 2 2", "P 6 m m", "P 6 c c", "P 63 c m", "P 63 m c", "P -6 m 2", "P -6 c 2", "P -6 2 m", "P -6 2 c", "P 6/m 2/m 2/m", "P 6/m 2/c 2/c", "P 63/m 2/c 2/m", "P 63/m 2/m 2/c", "P 2 3", "F 2 3", "I 2 3", "P 21 3", "I 21 3", "P 2/m -3", "P 2/n -3", "F 2/m -3", "F 2/d -3", "I 2/m -3", "P 21/a -3", "I 21/a -3", "P 4 3 2", "P 42 3 2", "F 4 3 2", "F 41 3 2", "I 4 3 2", "P 43 3 2", "P 41 3 2", "I 41 3 2", "P -4 3 m", "F -4 3 m", "I -4 3 m", "P -4 3 n", "F -4 3 c", "I -4 3 d", "P 4/m -3 2/m", "P 4/n -3 2/n", "P 42/m -3 2/n", "P 42/n -3 2/m", "F 4/m -3 2/m", "F 4/m -3 2/c", "F 41/d -3 2/m", "F 41/d -3 2/c", "I 4/m -3 2/m", "I 41/a -3 2/d"}; /*! \fn space_group * clean_sgl_data (xmlDoc * doc, xmlTextReaderPtr reader) \brief clean space group and corresponding XML data \param doc the XML doc pointer to free \param reader the XML reader to free */ space_group * clean_sgl_data (xmlDoc * doc, xmlTextReaderPtr reader) { xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); return NULL; } /*! \fn int get_this_group_data (space_group * spg, xmlNodePtr racine) \brief retrieve space group data \param spg the space group pointer to fill \param racine the XML node root */ int get_this_group_data (space_group * spg, xmlNodePtr racine) { xmlNodePtr node, num_node; xmlNodePtr the_setting, the_point; xmlNodePtr sp_node, ps_node, pp_node; xmlAttrPtr s_node, p_node; xmlChar * content; int val; int j, k; node = findnode (racine -> children, "settings"); if (node == NULL) return 0; s_node = node -> properties; if (s_node == NULL) return 0; while (s_node) { num_node = s_node -> children; if (num_node == NULL) return 0; if (g_strcmp0 ("num",(char *)s_node -> name) == 0) { content = xmlNodeGetContent(num_node); val = (int) string_to_double ((gpointer)content); xmlFree (content); } s_node = s_node -> next; } if (! val) return 0; spg -> nums = val; spg -> settings = g_malloc0(spg -> nums*sizeof*spg -> settings); node = node -> children; if (node == NULL) return 0; j = 0; for (sp_node = node; sp_node; sp_node = sp_node -> next) { if (sp_node -> type == XML_ELEMENT_NODE) { s_node = sp_node -> properties; if (s_node == NULL) return 0; while (s_node) { the_setting = s_node -> children; if (the_setting == NULL) return 0; content = xmlNodeGetContent(the_setting); if (g_strcmp0 ("name",(char *)s_node -> name) == 0) { spg -> settings[j].name = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("origin",(char *)s_node -> name) == 0) { spg -> settings[j].origin = (int) string_to_double ((gpointer)content); } else if (g_strcmp0 ("x",(char *)s_node -> name) == 0) { spg -> settings[j].pos[0] = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("y",(char *)s_node -> name) == 0) { spg -> settings[j].pos[1] = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("z",(char *)s_node -> name) == 0) { spg -> settings[j].pos[2] = g_strdup_printf ("%s", content); } xmlFree (content); s_node = s_node -> next; } ps_node = findnode (sp_node -> children, "points"); if (ps_node) { p_node = ps_node -> properties; if (p_node == NULL) return 0; while (p_node) { num_node = p_node -> children; if (num_node == NULL) return 0; if (g_strcmp0 ("num",(char *)p_node -> name) == 0) { content = xmlNodeGetContent(num_node); val = (int) string_to_double ((gpointer)content); xmlFree (content); } p_node = p_node -> next; } if (! val) return 0; spg -> settings[j].nump = val; spg -> settings[j].points = g_malloc0(val*sizeof*spg -> settings[j].points); ps_node = ps_node -> children; if (ps_node == NULL) return 0; k = 0; for (pp_node = ps_node; pp_node; pp_node = pp_node->next) { if (pp_node -> type == XML_ELEMENT_NODE) { s_node = pp_node -> properties; if (s_node == NULL) return 0; spg -> settings[j].points[k] = g_malloc0(3*sizeof*spg -> settings[j].points[k]); while (s_node) { the_point = s_node -> children; if (the_point == NULL) return 0; content = xmlNodeGetContent(the_point); if (g_strcmp0 ("x",(char *)s_node -> name) == 0) { spg -> settings[j].points[k][0] = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("y",(char *)s_node -> name) == 0) { spg -> settings[j].points[k][1] = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("z",(char *)s_node -> name) == 0) { spg -> settings[j].points[k][2] = g_strdup_printf ("%s", content); } xmlFree (content); s_node = s_node -> next; } k ++; } } } j ++; } } return 1; } /*! \fn space_group * read_sg_xml_file (const char * filetoread) \brief read space group data from XML file \param filetoread the file to read */ space_group * read_sg_xml_file (const char * filetoread) { int i, j; xmlDoc * doc; xmlTextReaderPtr reader; xmlNodePtr racine, node, num_node; xmlNodePtr cp_node, wp_node, wc_node; xmlNodePtr the_wyck, the_pos; xmlAttrPtr c_node, w_node, p_node; xmlChar * content; space_group * spg = g_malloc0(sizeof*spg); reader = xmlReaderForFile(filetoread, NULL, 0); if (reader == NULL) { return NULL; } else { doc = xmlParseFile(filetoread); if (doc == NULL) return 0; racine = xmlDocGetRootElement(doc); if (g_strcmp0 ((char *)(racine -> name), "sg-xml") != 0) return clean_sgl_data (doc, reader); spg = g_malloc0(sizeof*spg); node = findnode (racine -> children, "space-group"); if (node == NULL) return clean_sgl_data (doc, reader); content = xmlNodeGetContent(node); spg -> name = g_strdup_printf ("%s", content); xmlFree (content); node = findnode (racine -> children, "sg-num"); if (node == NULL) return clean_sgl_data (doc, reader); content = xmlNodeGetContent(node); spg -> id = (int) string_to_double ((gpointer)content); xmlFree (content); node = findnode (racine -> children, "hm-symbol"); if (node == NULL) return clean_sgl_data (doc, reader); content = xmlNodeGetContent(node); spg -> hms = g_strdup_printf ("%s", content); xmlFree (content); node = findnode (racine -> children, "bravais"); if (node == NULL) return clean_sgl_data (doc, reader); content = xmlNodeGetContent(node); spg -> bravais = g_strdup_printf ("%s", content); xmlFree (content); // Settings if (!get_this_group_data (spg, racine)) return clean_sgl_data (doc, reader); node = findnode(racine -> children, "wyckoff"); if (node == NULL) return clean_sgl_data (doc, reader); c_node = node -> properties; if (c_node == NULL) return clean_sgl_data (doc, reader); while (c_node) { num_node = c_node -> children; if (num_node == NULL) return clean_sgl_data (doc, reader); if (g_strcmp0 ("num",(char *)c_node -> name) == 0) { content = xmlNodeGetContent(num_node); spg -> numw = (int) string_to_double ((gpointer)content); xmlFree (content); } c_node = c_node -> next; } if (! spg -> numw) return clean_sgl_data (doc, reader); spg -> wyckoff = g_malloc0(spg -> numw*sizeof*spg -> wyckoff); i = 0; node = node -> children; if (node == NULL) return clean_sgl_data (doc, reader); for (cp_node = node; cp_node; cp_node = cp_node->next) { if (cp_node -> type == XML_ELEMENT_NODE) { w_node = cp_node -> properties; if (w_node == NULL) return clean_sgl_data (doc, reader); while (w_node) { the_wyck = w_node -> children; if (the_wyck == NULL) return clean_sgl_data (doc, reader); content = xmlNodeGetContent(the_wyck); if (g_strcmp0 ("mul",(char *)w_node -> name) == 0) { spg -> wyckoff[i].multi = (int)string_to_double ((gpointer)content); } else if (g_strcmp0 ("let",(char *)w_node -> name) == 0) { spg -> wyckoff[i].let = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("site",(char *)w_node -> name) == 0) { spg -> wyckoff[i].site = g_strdup_printf ("%s", content); } xmlFree (content); w_node = w_node -> next; } spg -> wyckoff[i].pos = g_malloc0(spg -> wyckoff[i].multi*sizeof*spg -> wyckoff[i].pos); wp_node = cp_node -> children; if (wp_node == NULL) return clean_sgl_data (doc, reader); j = 0; for (wc_node = wp_node; wc_node; wc_node = wc_node->next) { if (wc_node -> type == XML_ELEMENT_NODE) { p_node = wc_node -> properties; if (p_node == NULL) return clean_sgl_data (doc, reader); spg -> wyckoff[i].pos[j] = g_malloc0(3*sizeof*spg -> wyckoff[i].pos[j]); while (p_node) { the_pos = p_node -> children; if (the_pos == NULL) return clean_sgl_data (doc, reader); content = xmlNodeGetContent(the_pos); if (g_strcmp0 ("x",(char *)p_node -> name) == 0) { spg -> wyckoff[i].pos[j][0] = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("y",(char *)p_node -> name) == 0) { spg -> wyckoff[i].pos[j][1] = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("z",(char *)p_node -> name) == 0) { spg -> wyckoff[i].pos[j][2] = g_strdup_printf ("%s", content); } xmlFree (content); p_node = p_node -> next; } j ++; } } i ++; } } xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); return spg; } } atomes_1.3.1/src/opengl/edit/atom_geo.c0000664000175000017500000003475315212624223017457 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_geo.c * @short Functions to check for the appropriate atomic coordinations * @author Sébastien Le Roux */ /* * This file: 'atom_geo.c' * * Contains: * - The functions to check for the appropriate atomic coordinations * * List of functions: int is_this_a_new_geo (int id, coord_info * obj, int * old_z, int old_geo, int old_sp, int new_sp, coord_info * coord, double * new_z); gboolean is_in_atom_list (int aid, atom * new_list); void sort_partial_geo (int ** geom, int num_a); void check_coord_modification (project * this_proj, int * old_id, atom * new_list, atomic_object * this_object, gboolean movtion, gboolean passivating); */ #include "atom_edit.h" /*! \fn void sort_partial_geo (int ** geom, int num_a) \brief sort partial geometries \param geom the data to sort \param num_a the number of data point */ void sort_partial_geo (int ** geom, int num_a) { int i, j, k, l; for(i=0;i geom[j][0]) { for (k=0; k<2; k++) { l = geom[i][k]; geom[i][k] = geom[j][k]; geom[j][k] = l; } } } } } /*! \fn int is_this_a_new_geo (int gid, coord_info * obj, int * old_z, int old_geo, int old_sp, int new_sp, coord_info * coord, double * new_z) \brief if required create a new geometry, stored in coord, for coordination type 'gid' and chemical species 'new_sp', return geometry id \param gid the new coordination type (0 = total, 1 = partial) \param obj the new coordination info to update \param old_z old Z list \param old_geo the old coordination id \param old_sp the old chemical species id \param new_sp the new chemical species id \param coord the old coordination info \param new_z new Z list */ int is_this_a_new_geo (int gid, coord_info * obj, int * old_z, int old_geo, int old_sp, int new_sp, coord_info * coord, double * new_z) { int i, j, k, l, m, n, o; int ** n_part, ** o_part; // Number of coord of type id for spec new_sp i = coord -> ntg[gid][new_sp]; // Using j to store the total number of neighbor(s) for the coordination to test // Using k to store the number of type(s) of neighbor(s) for the coordination to test j = k = 0; for (l=0; l species; l++) { if (obj -> partial_geo[old_sp][old_geo][l]) { k ++; j += obj -> partial_geo[old_sp][old_geo][l]; } } // Then comparing with already stored data in coord for (l=0; l geolist[gid][new_sp][l] == obj -> geolist[gid][old_sp][old_geo]) return l; break; case 1: m = 0; n = 0; for (o=0; o species; o++) { if (coord -> partial_geo[new_sp][l][o]) { m ++; n += coord -> partial_geo[new_sp][l][o]; } } if (j == n && k == m) { // Same number of atoms in the coordination for the spec // 2 structures of size l: [0]= Z, [1] = nato // Sort by Z, then comparing n_part = allocdint (m, 2); o_part = allocdint (m, 2); m = 0; for (n=0; n species; n++) { if (coord -> partial_geo[new_sp][l][n]) { n_part[m][0] = (int)new_z[n]; n_part[m][1] = coord -> partial_geo[new_sp][l][n]; m ++; } } if (m > 1) sort_partial_geo (n_part, m); m = 0; for (n=0; n species; n++) { if (obj -> partial_geo[old_sp][old_geo][n]) { o_part[m][0] = old_z[n]; o_part[m][1] = obj -> partial_geo[old_sp][old_geo][n]; m ++; } } if (m > 1) sort_partial_geo (o_part, m); n = 1; for (o=0; o ntg[gid][new_sp]; if (! gid) { coord -> geolist[gid][new_sp] = g_realloc (coord -> geolist[gid][new_sp], (j+1)*sizeof*coord -> geolist[gid][new_sp]); coord -> geolist[gid][new_sp][coord -> ntg[gid][new_sp]] = obj -> geolist[gid][old_sp][old_geo]; } else { coord -> partial_geo[new_sp] = g_realloc (coord -> partial_geo[new_sp], (j+1)*sizeof*coord -> partial_geo[new_sp]); coord -> partial_geo[new_sp][j] = allocint (coord -> species); for (k=0; k species; k++) { if (old_z[k]) { l = find_spec_id (coord -> species, old_z[k], new_z); coord -> partial_geo[new_sp][j][l] = obj -> partial_geo[old_sp][old_geo][k]; } } } coord -> ntg[gid][new_sp] ++; coord -> totcoord[gid] ++; return i; } /*! \fn int find_this_geo_id (int gid, coord_info * obj, int * old_z, int old_geo, int old_sp, int new_sp, coord_info * coord, double * new_z) \brief if required create a new geometry, stored in coord, for coordination type 'gid' and chemical species 'new_sp', return geometry id \param gid the new coordination type (0 = total, 1 = partial) \param obj the new coordination info to update \param old_z old Z list \param old_geo the old coordination id for this coordination type \param old_sp the old chemical species id \param new_sp the new chemical species id \param coord the old coordination info \param new_z new Z list */ int find_this_geo_id (int gid, coord_info * obj, int * old_z, int old_geo, int old_sp, int new_sp, coord_info * coord, double * new_z) { int i, j, k, l, m, n, o; int ** n_part, ** o_part; // Number of coord of type id for spec new_sp i = coord -> ntg[gid][new_sp]; if (gid) { // Using j to store the total number of neighbor(s) for the coordination to test // Using k to store the number of type(s) of neighbor(s) for the coordination to test j = k = 0; for (l=0; l species; l++) { if (obj -> partial_geo[old_sp][old_geo][l]) { k ++; j += obj -> partial_geo[old_sp][old_geo][l]; } } } // Then comparing with already stored data in coord for (l=0; l ntg[gid][new_sp]; l++) { switch (gid) { case 0: if (coord -> geolist[0][new_sp][l] == obj -> geolist[0][old_sp][old_geo]) return l; break; case 1: m = 0; n = 0; for (o=0; o species; o++) { if (coord -> partial_geo[new_sp][l][o]) { m ++; n += coord -> partial_geo[new_sp][l][o]; } } if (j == n && k == m) { // Same number of atoms in the coordination for the spec // 2 structures of size l: [0]= Z, [1] = nato // Sort by Z, then comparing n_part = allocdint (m, 2); o_part = allocdint (m, 2); m = 0; for (n=0; n species; n++) { if (coord -> partial_geo[new_sp][l][n]) { n_part[m][0] = (int)new_z[n]; n_part[m][1] = coord -> partial_geo[new_sp][l][n]; m ++; } } if (m > 1) sort_partial_geo (n_part, m); m = 0; for (n=0; n species; n++) { if (obj -> partial_geo[old_sp][old_geo][n]) { o_part[m][0] = old_z[n]; o_part[m][1] = obj -> partial_geo[old_sp][old_geo][n]; m ++; } } if (m > 1) sort_partial_geo (o_part, m); n = 1; for (o=0; o ntg[gid][new_sp]; coord -> geolist[gid][new_sp] = g_realloc (coord -> geolist[gid][new_sp], (j+1)*sizeof*coord -> geolist[gid][new_sp]); coord -> geolist[gid][new_sp][j] = obj -> geolist[gid][old_sp][old_geo]; if (gid) { coord -> partial_geo[new_sp] = g_realloc (coord -> partial_geo[new_sp], (j+1)*sizeof*coord -> partial_geo[new_sp]); coord -> partial_geo[new_sp][j] = allocint (coord -> species); for (k=0; k species; k++) { if (old_z[k]) { l = find_spec_id (coord -> species, old_z[k], new_z); coord -> partial_geo[new_sp][j][l] = obj -> partial_geo[old_sp][old_geo][k]; } } } coord -> ntg[gid][new_sp] ++; coord -> totcoord[gid] ++; return i; } /*! \fn void check_coord_modification (project * this_proj, int * old_id, atom * new_list, atomic_object * this_object, gboolean movtion, gboolean passivating) \brief check atom coordination modification on edition \param this_proj the target project \param old_id the old atom id list, if any \param new_list the new atom(s) list \param this_object the object to insert, if any \param movtion motion (1) or removal (2) \param passivating passivate */ void check_coord_modification (project * this_proj, int * old_id, atom * new_list, atomic_object * this_object, gboolean movtion, gboolean passivating) { atom * tmp_new; int g, h, i, j, k, l, m, n; gboolean correct_it; int * new_z = allocint (this_proj -> nspec); double * old_z; if (this_object) old_z = duplicate_double (this_proj -> nspec, this_proj -> chemistry -> chem_prop[CHEM_Z]); int * new_old_id; int * nvois = allocint (this_proj -> nspec); if (passivating) new_old_id = duplicate_int (this_proj -> natomes, old_id); for (i=0; i nspec; i++) { new_z[i] = (int)this_proj -> chemistry -> chem_prop[CHEM_Z][i]; } // first create a dummy coord structure to store an atom individual data coord_info * new_coord = g_malloc0(sizeof*new_coord); for (i=0; i<2; i++) { new_coord -> totcoord[i] = 1; new_coord -> ntg[i] = allocint (this_proj -> nspec); for (j=0; j nspec; j++) new_coord -> ntg[i][j] = 1; new_coord -> geolist[i] = allocdint (this_proj -> nspec, 1); } new_coord -> species = this_proj -> nspec; new_coord -> partial_geo = alloctint (this_proj -> nspec, 1, this_proj -> nspec); g = (passivating) ? 2 : 1; for (h=0; h sp; // Fill the dummy coord with the new atom information for (j=0; j<2; j++) new_coord -> geolist[j][i][0] = tmp_new -> numv; k = tmp_new -> coord[1]; for (j=0; j nspec; j++) { new_coord -> partial_geo[i][0][j] = this_proj -> coord -> partial_geo[i][k][j]; } j = tmp_new -> id; correct_it = FALSE; if (movtion) { for (k=0; k numv; k++) { l = tmp_new -> vois[k]; if ((old_id[j] > 0 && old_id[l] < 0) || (old_id[j] < 0 && old_id[l] > 0)) { correct_it = TRUE; // This neighbor will be moved / removed if (! passivating || h) { m = this_proj -> atoms[0][l].sp; // For the atom studied reduce the number of neighbors of that species: new_coord -> partial_geo[i][0][m] --; for (n=0; n<2; n++) new_coord -> geolist[n][i][0] --; } } } } else { for (k=0; k nspec; k++) nvois[k]=0; for (k=0; k numv; k++) { l = tmp_new -> vois[k]; m = this_object -> at_list[l].sp; nvois[m] ++; } l = 0; for (k=0; k nspec; k++) { if (nvois[k] != new_coord -> partial_geo[i][0][k]) { correct_it = TRUE; new_coord -> partial_geo[i][0][k] = nvois[k]; } l += nvois[k]; } for (k=0; k<2; k++) new_coord -> geolist[k][i][0] = l; } if (correct_it) { if (passivating && ! h) { if (old_id[j]) { switch (this_proj -> modelgl -> search_widg[8] -> filter) { case 0: l = i; break; case 1: l = tmp_new -> numv; break; case 2: l = tmp_new -> coord[1]; for (m=0; m coord -> ntg[1][m]; break; default: l = tmp_new -> coord[this_proj -> modelgl -> search_widg[8] -> filter-1]; break; } if (get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[3], l, 0)) new_old_id[j] = abs(old_id[j]); } } else { for (j=0; j<2; j++) { if (this_object) { tmp_new -> coord[j] = find_this_geo_id (j, new_coord, new_z, 0, i, i, this_object -> coord, old_z); } else { tmp_new -> coord[j] = find_this_geo_id (j, new_coord, new_z, 0, i, i, this_proj -> modelgl -> atom_win -> coord, this_proj -> modelgl -> atom_win -> new_z); } } } correct_it = FALSE; } tmp_new = tmp_new -> next; } if (passivating && ! h) { for (i=0; i natomes; i++) old_id[i] = new_old_id[i]; g_free (new_old_id); } } if (this_object) g_free (old_z); g_free (new_coord); g_free (nvois); } atomes_1.3.1/src/opengl/edit/cell_edit.h0000664000175000017500000000610515212624223017604 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cell_edit.h * @short Function declarations for the cell edition window * @author Sébastien Le Roux */ /* * This header file: 'cell_edit.h' * * Contains: - Function declarations for the cell edition window */ #include "global.h" #include "bind.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" #include "glview.h" #include "glwindow.h" #ifndef CELL_EDIT_H_ #define CELL_EDIT_H_ extern char * box_prop[2][3]; extern void allocatoms (project * this_proj); extern void center_molecule (project * this_proj); extern gchar * edit_names[7]; extern gchar * mot[2][2]; extern GtkWidget * advanced_coord_properties (glwin * view, int page); extern gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb); extern void translate (project * this_proj, int status, int axis, vec3_t trans); extern void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi); extern void preserve_ogl_selection (glwin * view); extern void restore_ogl_selection (glwin * view); extern void create_slab_lists (project * this_proj); extern int is_selected; extern int selected_aspec; GtkWidget * create_cell_entries (project * this_proj, int i); GtkWidget * create_shift_box (project * this_proj); void display_density (cell_edition * cell, double vol, double dens, double adens); void shift_it (vec3_t shift, int refresh, int proj); void sens_superbut (project * this_proj); void invert_selection (project * this_proj); GtkWidget * shift_center_tab (project * this_proj); GtkWidget * add_extra_cell_tab (glwin * view); GtkWidget * supercell_tab (glwin * view); GtkWidget * adjust_density_tab (project * this_proj); GtkWidget * cut_in_model (project * this_proj); GtkWidget * pixels_tab (project * this_proj); extern void wrapping (glwin * view); extern G_MODULE_EXPORT void super_cell_but (GtkButton * but, gpointer data); #ifdef GTK4 extern G_MODULE_EXPORT void super_cell (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void edition_win (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern G_MODULE_EXPORT void super_cell (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void edition_win (GtkWidget * widg, gpointer data); #endif extern atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); #endif atomes_1.3.1/src/opengl/edit/cbuild_edit.c0000664000175000017500000014747715212624223020144 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cbuild_edit.c * @short Functions to create the crystal builder window * @author Sébastien Le Roux */ /* * This file: 'cbuild_edit.c' * * Contains: * - The functions to create the crystal builder window * * List of functions: int get_crystal_id (int spg); int get_bravais_img_id (int spg); int get_sg_num (GtkComboBox * box); int read_space_group (builder_edition * cbuilder, int spg); int get_group_id_from_name (gchar * sg_name); G_MODULE_EXPORT gboolean delete_build (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean delete_build (GtkWidget * widg, GdkEvent * event, gpointer data); gchar * frac_string (gchar * init); gchar * get_num_string (gchar * str); gchar * get_so_string (space_group * spg, int id); void adjust_lattice_parameters (builder_edition * cbuilder); void adjust_so_combo (builder_edition * cbuilder); void adjust_bv_img (builder_edition * cbuilder); void adjust_lattice_constraints (builder_edition * cbuilder); void adjust_sg_combo (builder_edition * cbuilder, int cs, int bl); void prepare_crystal_builder (gpointer data); G_MODULE_EXPORT void update_cb_vect (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void update_cb_box (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_lattice (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_so (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_sg (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_bl (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_cs (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_wr (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_wr (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_shc (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_shc (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void add_cryst_cell (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void apply_build (GtkButton * but, gpointer data); G_MODULE_EXPORT void close_build (GtkButton * but, gpointer data); G_MODULE_EXPORT void toggle_occ (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggle_occ (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void toggle_overlap (GtkCheckButton * Button, gpointer data); G_MODULE_EXPORT void toggle_overlap (GtkToggleButton * Button, gpointer data); G_MODULE_EXPORT void on_rounding_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void adjust_occupancy (GtkButton * but, gpointer data); G_MODULE_EXPORT void crystal_window (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void crystal_window (GtkWidget * widg, gpointer data); GtkWidget * prepare_lattice_grid (int type, builder_edition * cbuilder, glwin * glview); GtkWidget * sg_info (int sg, gpointer data); GtkWidget * create_bl_combo (int cs, gpointer data); GtkWidget * builder_win (project * this_proj, gpointer data); GtkTreeModel * so_combo_tree (space_group * spg); GtkTreeModel * sg_combo_tree (int csid, int bvid); GtkTreeModel * la_combo_tree (); */ #include "global.h" #include "interface.h" #include "glview.h" #include "cbuild_edit.h" #include "bind.h" #include "project.h" #include "workspace.h" #include "readers.h" extern G_MODULE_EXPORT void show_sg_info (GtkButton * but, gpointer data); extern void get_origin (space_group * spg); extern int test_lattice (builder_edition * cbuilder, cell_info * cif_cell); extern int build_crystal (gboolean visible, project * this_proj, int c_step, gboolean to_wrap, gboolean show_clones, cell_info * cell, GtkWidget * widg); gchar * latt_info[7]={"abc\nα ≠ β ≠ ɣ", // Triclinic i18n("abc\nα = β = 90° ≠ ɣ\n\tor\nα = ɣ = 90° ≠ β"), // Monoclinic "abc\nα = β = ɣ = 90°", // Orthorhombic "a = bc\nα = β = ɣ = 90°", // Tetragonal "a = b = c\nα = β = γ ≠ 90°", // Trigonal R i18n("a = bc\nα = β = 90° and ɣ = 120°"), // Hexagonal "a = b = c\nα = β = ɣ = 90°"}; // Cubic int nsg_bv[7]={2, 13, 59, 68, 25, 27, 36}; int min_bv[7]={0, 2, 15, 74, 142, 167, 194}; /*! \fn int get_crystal_id (int spg) \brief get the bravais lattice id from space group id \param spg the target space group id */ int get_crystal_id (int spg) { if (spg < 3) { return 0; } else if (spg < 16) { return 1; } else if (spg < 75) { return 2; } else if (spg < 143) { return 3; } else if (spg < 168) { if (groups[spg-1][0] == 'R') { return 4; } else { return 5; } } else if (spg < 195) { return 5; } else { return 6; } } /*! \fn int get_bravais_img_id (int spg) \brief get bravais image from space group id \param spg the target space group id */ int get_bravais_img_id (int spg) { if (spg < 3) { return 0; } else if (spg < 16) { if (groups[spg-1][0] == 'P') { return 1; } else { return 2; } } else if (spg < 75) { if (groups[spg-1][0] == 'P') { return 3; } else if (groups[spg-1][0] == 'I') { return 4; } else if (groups[spg-1][0] == 'A' || groups[spg-1][0] == 'C') { return 5; } else { return 6; } } else if (spg < 143) { if (groups[spg-1][0] == 'P') { return 7; } else { return 8; } } else if (spg < 168) { if (groups[spg-1][0] == 'R') { return 9; } else { return 10; } } else if (spg < 195) { return 10; } else { if (groups[spg-1][0] == 'P') { return 11; } else if (groups[spg-1][0] == 'I') { return 12; } else { return 13; } } } /*! \fn gchar * frac_string (gchar * init) \brief get pango string for fraction string \param init the target fraction string */ gchar * frac_string (gchar * init) { gchar * end = substitute_string (init, "1/2", "½"); end = substitute_string (end, "1/4", "¼"); end = substitute_string (end, "3/4", "¾"); end = substitute_string (end, "1/3", "⅓"); end = substitute_string (end, "2/3", "⅔"); end = substitute_string (end, "1/6", "⅙"); end = substitute_string (end, "5/6", "⅚"); end = substitute_string (end, "1/8", "⅛"); end = substitute_string (end, "3/8", "⅜"); end = substitute_string (end, "5/8", "⅝"); end = substitute_string (end, "7/8", "⅞"); return g_strdup_printf ("%s", end); } /*! \fn gchar * get_num_string (gchar * str) \brief get description string for entry string \param str the target string */ gchar * get_num_string (gchar * str) { str = replace_markup (str, "65", "65"); str = replace_markup (str, "64", "64"); str = replace_markup (str, "63", "63"); str = replace_markup (str, "62", "62"); str = replace_markup (str, "61", "61"); str = replace_markup (str, "43", "43"); str = replace_markup (str, "42", "42"); str = replace_markup (str, "41", "41"); str = replace_markup (str, "32", "32"); str = replace_markup (str, "31", "31"); return substitute_string (str, "21", "21"); } /*! \fn gchar * get_so_string (space_group * spg, int id) \brief get space group setting descrption string \param spg the target space group \param id the space grop setting */ gchar * get_so_string (space_group * spg, int id) { gchar * str = replace_markup (spg -> settings[id].name, "s", "/"); str = get_num_string (str); str = substitute_string (str, "_", NULL); if (spg -> settings[id].origin) { str = g_strdup_printf ("%s (%d)", str, spg -> settings[id].origin); } return str; } /*! \fn GtkTreeModel * so_combo_tree (space_group * spg) \brief create the space group setting combo box tree model \param spg the target space group */ GtkTreeModel * so_combo_tree (space_group * spg) { GtkTreeIter iter; GtkTreeStore * store; int i; store = gtk_tree_store_new (1, G_TYPE_STRING); if (! spg) return GTK_TREE_MODEL (store); if (spg -> nums > 1) { for (i=0; i nums; i++) { gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, & iter, 0, get_so_string (spg, i), -1); } } else { gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, & iter, 0, groups[spg -> id-1], -1); } return GTK_TREE_MODEL (store); } /*! \fn GtkTreeModel * sg_combo_tree (int csid, int bvid) \brief create the space group combo box tree model \param csid the crystal system \param bvid the bravais lattice */ GtkTreeModel * sg_combo_tree (int csid, int bvid) { GtkTreeIter iter; GtkTreeStore * store; int i; gboolean doit; gchar * str; store = gtk_tree_store_new (1, G_TYPE_STRING); for (i=min_bv[csid]; ia, b, c, α β ɣ", i18n("Vectors")}; int i; store = gtk_tree_store_new (1, G_TYPE_STRING); for (i=0; i<2; i++) { gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, & iter, 0, (i) ? _(lat[i]) : lat[i], -1); } return GTK_TREE_MODEL (store); } /*! \fn int get_sg_num (GtkComboBox * box) \brief get space group number from active iter in tree model of combo box \param box the target GtkComboBox */ int get_sg_num (GtkComboBox * box) { GValue val = {0, }; GtkTreeModel * cmodel = gtk_combo_box_get_model (box); GtkTreeIter iter; gchar * str = NULL; gchar * num = NULL; int i = 0; if (gtk_combo_box_get_active_iter (box, & iter)) { gtk_tree_model_get_value (cmodel, & iter, 0, & val); str = g_strdup_printf ("%s", (char *)g_value_get_string (& val)); if (str) { num = g_strdup_printf ("%c%c%c", str[0], str[1], str[2]); i = (int) string_to_double ((gpointer)num); g_free (str); g_free (num); } } return i; } /*! \fn void adjust_lattice_parameters (builder_edition * cbuilder) \brief adjust lattice parameters depending on space group \param cbuilder the target build edition */ void adjust_lattice_parameters (builder_edition * cbuilder) { int i, j, k; j = get_sg_num (GTK_COMBO_BOX(cbuilder -> sg_combo)); k = get_crystal_id (j); box_info * box = & cbuilder -> cell.box[0]; switch (k) { case 1: box -> param[1][0] = 90.0; box -> vect[0][1] = box -> vect[0][2] = 0.0; box -> vect[2][0] = box -> vect[2][1] = 0.0; break; case 2: box -> param[1][0] = box -> param[1][1] = box -> param[1][2] = 90.0; box -> vect[0][1] = box -> vect[0][2] = 0.0; box -> vect[1][0] = box -> vect[1][2] = 0.0; box -> vect[2][0] = box -> vect[2][1] = 0.0; break; case 3: box -> param[0][1] = box -> param[0][0]; box -> param[1][0] = box -> param[1][1] = box -> param[1][2] = 90.0; break; case 4: box -> param[0][1] = box -> param[0][0]; if (cbuilder -> cell.sp_group -> name[0] == 'R') { box -> param[1][0] = box -> param[1][1] = box -> param[1][2] = 0.0; } else { box -> param[1][0] = box -> param[1][1] = 90.0; box -> param[1][2] = 120.0; } box -> vect[1][1] = box -> vect[0][0]; box -> vect[0][1] = box -> vect[0][2] = 0.0; box -> vect[1][0] = box -> vect[1][2] = 0.0; break; case 5: box -> param[0][1] = box -> param[0][0]; box -> param[1][0] = box -> param[1][1] = 90.0; box -> param[1][2] = 120.0; box -> vect[0][1] = box -> vect[0][2] = 0.0; box -> vect[1][0] = box -> vect[1][2] = 0.0; break; case 6: box -> param[0][1] = box -> param[0][2] = box -> param[0][0]; box -> param[1][0] = box -> param[1][1] = box -> param[1][2] = 90.0; box -> vect[1][1] = box -> vect[2][2] = box -> vect[0][0]; box -> vect[0][1] = box -> vect[0][2] = 0.0; box -> vect[1][0] = box -> vect[1][2] = 0.0; box -> vect[2][0] = box -> vect[2][1] = 0.0; break; default: break; } if (cbuilder -> cell.ltype) { for (i=0; i<3; i++) { for (j=0; j<3; j++) { if (cbuilder -> ventry[i][j]) { if (GTK_IS_WIDGET(cbuilder -> ventry[i][j])) { update_entry_double (GTK_ENTRY(cbuilder -> ventry[i][j]), box -> vect[i][j]); } } } } } else { for (i=0; i<2; i++) { for (j=0; j<3; j++) { if (cbuilder -> bentry[i][j]) { if (GTK_IS_WIDGET(cbuilder -> bentry[i][j])) { update_entry_double (GTK_ENTRY(cbuilder -> bentry[i][j]), box -> param[i][j]); } } } } if (cbuilder -> bentry[0][1]) { if (GTK_IS_WIDGET(cbuilder -> bentry[0][1])) { widget_set_sensitive (cbuilder -> bentry[0][1], (k > 2) ? 0 : 1); if (k > 2) update_entry_text (GTK_ENTRY(cbuilder -> bentry[0][1]), ""); } } if (cbuilder -> bentry[0][2]) { if (GTK_IS_WIDGET(cbuilder -> bentry[0][2])) { widget_set_sensitive (cbuilder -> bentry[0][2], (k > 5 || (k == 4 && cbuilder -> cell.sp_group -> name[0] == 'R')) ? 0 : 1); if (k > 5 || (k == 4 && cbuilder -> cell.sp_group -> name[0] == 'R')) update_entry_text (GTK_ENTRY(cbuilder -> bentry[0][2]), ""); } } for (i=0; i<3; i++) { if (cbuilder -> bentry[1][i]) { if (GTK_IS_WIDGET(cbuilder -> bentry[1][i])) { widget_set_sensitive (cbuilder -> bentry[1][i], (k > 1) || (k == 1 && ! i) ? 0 : 1); if (k == 4 && cbuilder -> cell.sp_group -> name[0] == 'R') { if (! i) { widget_set_sensitive (cbuilder -> bentry[1][i], 1); } else { update_entry_text (GTK_ENTRY(cbuilder -> bentry[1][i]), ""); } } } } } } } /*! \fn G_MODULE_EXPORT void update_cb_vect (GtkEntry * entry, gpointer data) \brief update lattice vector callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cb_vect (GtkEntry * entry, gpointer data) { tint * id = (tint *)data; const gchar * m = entry_get_text (entry); double v = string_to_double ((gpointer)m); get_project_by_id(id -> a) -> modelgl -> builder_win -> cell.box[0].vect[id -> b][id -> c] = v; update_entry_double (entry, v); } /*! \fn G_MODULE_EXPORT void update_cb_box (GtkEntry * entry, gpointer data) \brief update lattice box parameter callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cb_box (GtkEntry * entry, gpointer data) { tint * id = (tint *)data; const gchar * m = entry_get_text (entry); double v = string_to_double ((gpointer)m); if (v >= 0.0) { get_project_by_id(id -> a) -> modelgl -> builder_win -> cell.box[0].param[id -> b][id -> c] = v; } update_entry_double (entry, v); } /*! \fn GtkWidget * prepare_lattice_grid (int type, builder_edition * cbuilder, glwin * glview) \brief prepare the lattice parameters grid widget \param type the type of lattice system \param cbuilder the target builder edition \param glview the target glwin */ GtkWidget * prepare_lattice_grid (int type, builder_edition * cbuilder, glwin * glview) { GtkWidget * table = gtk_grid_new (); int i, j, k; k = 0; for (i=0; i<3; i++) { for (j=0; j<3; j++, k++) { if (i < 2) cbuilder -> cell.box[0].param[i][j] = 0.0; cbuilder -> cell.box[0].vect[i][j] = 0.0; t_box[k].a = i; t_box[k].b = j; } } cbuilder -> cell.ltype = type; if (cbuilder -> cell.ltype) { k = 0; for (i=0; i<4; i++) { if (i > 0) { gtk_grid_attach (GTK_GRID (table), markup_label(vect_name[i-1], 20, -1, 0.0, 0.5), 0, i, 1, 1); } for (j=0; j<4; j++) { if (j > 0) { if (i == 0) { gtk_grid_attach (GTK_GRID (table), markup_label(vect_comp[j-1], -1, 20, 0.5, 0.5), j, 0, 1, 1); } else { cbuilder -> ventry[i-1][j-1] = create_entry (G_CALLBACK(update_cb_vect), 100, 15, FALSE, & cbuilder -> pointers[i][j]); update_entry_double (GTK_ENTRY(cbuilder -> ventry[i-1][j-1]), cbuilder -> cell.box[0].vect[i-1][j-1]); gtk_grid_attach (GTK_GRID (table), cbuilder -> ventry[i-1][j-1], j, i, 1, 1); k ++; } } } } } else { k = 0; for (i=0; i<2; i++) { //gtk_grid_attach (GTK_GRID (table), markup_label(box_p[i], -1, 50, 0.5, 0.5), 1, i+2*i, 1, 1); gtk_grid_attach (GTK_GRID (table), markup_label(" ", 20, -1, 0.5, 0.5), 0, i, 1, 1); for (j=0; j<3; j++, k++) { gtk_grid_attach (GTK_GRID (table), markup_label(box_prop[i][j], -1, -1, 0.5, 0.5), j+1, i+2*i, 1, 1); cbuilder -> bentry[i][j] = create_entry (G_CALLBACK(update_cb_box), 100, 15, FALSE, & cbuilder -> pointers[i][j]); update_entry_double (GTK_ENTRY(cbuilder -> bentry[i][j]), cbuilder -> cell.box[0].param[i][j]); gtk_grid_attach (GTK_GRID (table), cbuilder -> bentry[i][j], j+1, i+2*i+1, 1, 1); } } adjust_lattice_parameters (cbuilder); } return table; } /*! \fn G_MODULE_EXPORT void set_lattice (GtkComboBox * box, gpointer data) \brief change the lattice system \param box the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_lattice (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; glwin * view = get_project_by_id(id -> a) -> modelgl; builder_edition * cbuilder = view -> builder_win; cbuilder -> lattice_grid = destroy_this_widget (cbuilder -> lattice_grid); cbuilder -> lattice_grid = prepare_lattice_grid (combo_get_active ((GtkWidget *)box), cbuilder, view); add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> lattice_box, cbuilder -> lattice_grid, FALSE, FALSE, 5); show_the_widgets (cbuilder -> lattice_grid); } /*! \fn G_MODULE_EXPORT void set_so (GtkComboBox * box, gpointer data) \brief set space group setting \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_so (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; builder_edition * cbuilder = get_project_by_id(id -> a) -> modelgl -> builder_win; int i = combo_get_active ((GtkWidget *)box); gchar * str = g_strdup_printf ("(%s,%s,%s)", cbuilder -> cell.sp_group -> settings[i].pos[0], cbuilder -> cell.sp_group -> settings[i].pos[1], cbuilder -> cell.sp_group -> settings[i].pos[2]); cbuilder -> so_info = destroy_this_widget(cbuilder -> so_info); cbuilder -> so_info = markup_label(frac_string(str), -1, -1, 0.5, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> so_box, cbuilder -> so_info, FALSE, FALSE, 10); show_the_widgets (cbuilder -> so_info); cbuilder -> cell.sp_group -> sid = i; get_origin (cbuilder -> cell.sp_group); } /*! \fn GtkWidget * sg_info (int sg, gpointer data) \brief create the space group information button \param sg space group id \param data the associated data pointer */ GtkWidget * sg_info (int sg, gpointer data) { gchar * str = g_strdup_printf (_("%s group info"), groups[sg]); GtkWidget * mlab = markup_label(str, -1, -1, 0.5, 0.5); GtkWidget * mbut = create_button (NULL, IMG_NONE, NULL, 50, -1, GTK_RELIEF_NORMAL, G_CALLBACK(show_sg_info), data); add_container_child (CONTAINER_BUT, mbut, mlab); show_the_widgets (mbut); return mbut; } /*! \fn int read_space_group (builder_edition * cbuilder, int spg) \brief read space group N°spg data from file \param cbuilder the target builder edition \param spg the space group id */ int read_space_group (builder_edition * cbuilder, int spg) { // Read file gchar * sgfile = substitute_string(groups[spg], "", NULL); sgfile = substitute_string(sgfile, "", NULL); sgfile = substitute_string(sgfile, "/", "s"); #ifdef G_OS_WIN32 sgfile = g_strdup_printf ("%s\\space_groups\\%d-%s.sgl", PACKAGE_LIB_DIR, spg+1, sgfile); #else sgfile = g_strdup_printf ("%s/space_groups/%d-%s.sgl", PACKAGE_LIB_DIR, spg+1, sgfile); #endif int res; if (cbuilder) { cbuilder -> cell.sp_group = read_sg_xml_file (sgfile); res = (cbuilder -> cell.sp_group) ? 1 : 0; } else if (this_reader) { this_reader -> lattice.sp_group = read_sg_xml_file (sgfile); res = (this_reader -> lattice.sp_group) ? 1 : 0; } g_free (sgfile); return res; } /*! \fn int get_group_id_from_name (gchar * sg_name) \brief get space group id from name \param sg_name the space group string */ int get_group_id_from_name (gchar * sg_name) { int i; for (i=0; i<230; i++) { if (g_strcmp0(groups[i], sg_name) == 0) return i+1; } return 0; } /*! \fn void adjust_so_combo (builder_edition * cbuilder) \brief adjust the space group setting combo box to use pango markup \param cbuilder the target builder edition */ void adjust_so_combo (builder_edition * cbuilder) { GtkTreeModel * model = so_combo_tree (cbuilder -> cell.sp_group); gtk_combo_box_set_model (GTK_COMBO_BOX(cbuilder -> so_combo), model); g_object_unref (model); combo_set_active (cbuilder -> so_combo, 0); combo_set_markup (cbuilder -> so_combo); widget_set_sensitive (cbuilder -> so_combo, cbuilder -> cell.sp_group -> nums-1); if (cbuilder -> cell.sp_group) get_origin (cbuilder -> cell.sp_group); } /*! \fn void adjust_bv_img (builder_edition * cbuilder) \brief adjust the bravais lattice image \param cbuilder the target builder edition */ void adjust_bv_img (builder_edition * cbuilder) { if (cbuilder -> bv_img) cbuilder -> bv_img = destroy_this_widget(cbuilder -> bv_img); cbuilder -> bv_img = gtk_image_new_from_file (bravais_img[get_bravais_img_id(cbuilder -> cell.sp_group -> id)]); #ifdef GTK4 gtk_widget_set_size_request (cbuilder -> bv_img, 200, 200); gtk_widget_set_hexpand (cbuilder -> bv_img, TRUE); gtk_widget_set_vexpand (cbuilder -> bv_img, TRUE); #endif add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> bv_box[1], cbuilder -> bv_img, FALSE, FALSE, 5); } /*! \fn void adjust_lattice_constraints (builder_edition * cbuilder) \brief adjust lattice constraints \param cbuilder the target builder edition */ void adjust_lattice_constraints (builder_edition * cbuilder) { if (cbuilder -> ltc_cons) cbuilder -> ltc_cons = destroy_this_widget(cbuilder -> ltc_cons); int i = get_crystal_id (cbuilder -> cell.sp_group -> id); gchar * str = g_strdup_printf ("%s", (i == 1 || i == 5) ? _(latt_info[i]) : latt_info[i]); cbuilder -> ltc_cons = markup_label(str, 150, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> ltc_box, cbuilder -> ltc_cons, FALSE, FALSE, 5); } /*! \fn G_MODULE_EXPORT void set_sg (GtkComboBox * box, gpointer data) \brief change space group \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_sg (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; builder_edition * cbuilder = get_project_by_id(id -> a) -> modelgl -> builder_win; int i = get_sg_num(box); if (i) { cbuilder -> sg_but = destroy_this_widget(cbuilder -> sg_but); if (read_space_group (cbuilder, i-1)) { cbuilder -> sg_but = sg_info (i-1, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> sg_box, cbuilder -> sg_but, FALSE, FALSE, 10); if (cbuilder -> bv_box[0]) adjust_lattice_constraints (cbuilder); if (cbuilder -> bv_box[1]) adjust_bv_img (cbuilder); show_the_widgets (cbuilder -> bh_box); if (cbuilder -> so_combo) adjust_so_combo (cbuilder); if (cbuilder -> lattice_grid) adjust_lattice_parameters (cbuilder); } else { // Error reading file show_error (_("Cannot read space group *.sgl file ?!\nPlease check the program library !"), 0, cbuilder -> win); } } } /*! \fn void adjust_sg_combo (builder_edition * cbuilder, int cs, int bl) \brief adjust the space group combo box to use pango markup \param cbuilder the target builder edition \param cs the crystal system \param bl the bravais lattice */ void adjust_sg_combo (builder_edition * cbuilder, int cs, int bl) { GtkTreeModel * model = sg_combo_tree (cs, bl); gtk_combo_box_set_model (GTK_COMBO_BOX(cbuilder -> sg_combo), model); g_object_unref (model); combo_set_active (cbuilder -> sg_combo, 0); combo_set_markup (cbuilder -> sg_combo); adjust_lattice_parameters (cbuilder); } /*! \fn G_MODULE_EXPORT void set_bl (GtkComboBox * box, gpointer data) \brief change bravais lattice \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_bl (GtkComboBox * box, gpointer data) { builder_edition * cbuilder = (builder_edition *)data; int i, j; i = combo_get_active (cbuilder -> cs_combo); j = combo_get_active ((GtkWidget *)box); adjust_sg_combo (cbuilder, i, j); } /*! \fn GtkWidget * create_bl_combo (int cs, gpointer data) \brief create the bravais lattice combo box \param cs the associated crystal system \param data the associated data pointer */ GtkWidget * create_bl_combo (int cs, gpointer data) { gchar * bravais_keys[7][4] = {{i18n("Primitive "), NULL, NULL, NULL}, {i18n("Primitive "), i18n("Base-centered"), NULL, NULL}, {i18n("Primitive "), i18n("Base-centered"), i18n("Body-centered"), i18n("Face-centered")}, {i18n("Primitive "), i18n("Body-centered"), NULL, NULL}, {i18n("Hexagonal Axes"), i18n("Rhombohedral Axes"), NULL, NULL}, {i18n("Hexagonal"), NULL, NULL, NULL}, {i18n("Primitive"), i18n("Body-centered"), i18n("Face-centered"), NULL}}; GtkWidget * cbox = create_combo(); int i; combo_text_append (cbox, _("All")); for (i=0; i<4; i++) { if (bravais_keys[cs][i]) combo_text_append (cbox, _(bravais_keys[cs][i])); } i = (cs == 0 || cs == 5) ? 0 : 1; widget_set_sensitive (cbox, i); combo_set_active (cbox, ! i); g_signal_connect (G_OBJECT(cbox), "changed", G_CALLBACK(set_bl), data); gtk_widget_set_size_request (cbox, 150, 25); return cbox; } /*! \fn G_MODULE_EXPORT void set_cs (GtkComboBox * box, gpointer data) \brief change the crystal system \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_cs (GtkComboBox * box, gpointer data) { builder_edition * cbuilder = (builder_edition *)data; int i = combo_get_active ((GtkWidget *)box); cbuilder -> bl_combo = destroy_this_widget(cbuilder -> bl_combo); cbuilder -> bl_combo = create_bl_combo (i, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> bl_box, cbuilder -> bl_combo, FALSE, FALSE, 0); adjust_sg_combo (cbuilder, i, 0); show_the_widgets (cbuilder -> bl_combo); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_wr (GtkCheckButton * but, gpointer data) \brief wrap or not atomic coordinates after crystal building toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_wr (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_wr (GtkToggleButton * but, gpointer data) \brief wrap or not atomic coordinates after crystal building toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_wr (GtkToggleButton * but, gpointer data) #endif { builder_edition * cbuilder = (builder_edition * )data; cbuilder -> wrap = button_get_status ((GtkWidget *)but); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_shc (GtkCheckButton * but, gpointer data) \brief show / hide clones after crystal building toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_shc (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_shc (GtkToggleButton * but, gpointer data) \brief show / hide clones after crystal building toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_shc (GtkToggleButton * but, gpointer data) #endif { builder_edition * cbuilder = (builder_edition * )data; cbuilder -> clones = button_get_status ((GtkWidget *)but); } /*! \fn G_MODULE_EXPORT void add_cryst_cell (GtkSpinButton * res, gpointer data) \brief add cell callback spin \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_cryst_cell (GtkSpinButton * res, gpointer data) { tint * bid = (tint *)data; builder_edition * cbuilder = get_project_by_id(bid -> a) -> modelgl -> builder_win; cbuilder -> cell.cextra[bid -> b] = gtk_spin_button_get_value_as_int(res); } /*! \fn G_MODULE_EXPORT void apply_build (GtkButton * but, gpointer data) \brief build crystall callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void apply_build (GtkButton * but, gpointer data) { int id = GPOINTER_TO_INT(data); project * this_proj = get_project_by_id(id); if (test_lattice(this_proj -> modelgl -> builder_win, NULL)) { crystal_dist_chk = TRUE; crystal_crowded = FALSE; crystal_low_warning = TRUE; build_crystal (TRUE, this_proj, 0, this_proj -> modelgl -> builder_win -> wrap, this_proj -> modelgl -> builder_win -> clones, & this_proj -> modelgl -> builder_win -> cell, this_proj -> modelgl -> builder_win -> win); } } /*! \fn G_MODULE_EXPORT void close_build (GtkButton * but, gpointer data) \brief close crystal builder and free associated data pointers \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void close_build (GtkButton * but, gpointer data) { int id = GPOINTER_TO_INT(data); project * this_proj = get_project_by_id(id); this_proj -> modelgl -> search_widg[7] = free_this_search_data (this_proj -> modelgl -> search_widg[7]); this_proj -> modelgl -> builder_win -> win = destroy_this_widget(this_proj -> modelgl -> builder_win -> win); g_free (this_proj -> modelgl -> builder_win); this_proj -> modelgl -> builder_win = NULL; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean delete_build (GtkWindow * widg, gpointer data) \brief crystal builder delete event callback GTK4 \param widg the target GtkWindow \param data the associated data pointer */ G_MODULE_EXPORT gboolean delete_build (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean delete_build (GtkWidget * widg, GdkEvent * event, gpointer data) \brief crystal builder delete event callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean delete_build (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { close_build (NULL, data); return TRUE; } dint occp[5]; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_occ (GtkCheckButton * but, gpointer data) \brief occupancy toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_occ (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_occ (GtkToggleButton * but, gpointer data) \brief occupancy toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_occ (GtkToggleButton * but, gpointer data) #endif { dint * cid = (dint *)data; get_project_by_id(cid -> a) -> modelgl -> builder_win -> occupancy = cid -> b; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_overlap (GtkCheckButton * Button, gpointer data) \brief adjust overlapping toggle callback GTK4 \param Button the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_overlap (GtkCheckButton * Button, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_overlap (GtkToggleButton * Button, gpointer data) \brief adjust overlapping toggle callback GTK3 \param Button the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_overlap (GtkToggleButton * Button, gpointer data) #endif { builder_edition * cbuilder = (builder_edition * )data; cbuilder -> overlapping = button_get_status ((GtkWidget *)Button); } /*! \fn G_MODULE_EXPORT void on_rounding_changed (GtkComboBox * box, gpointer data) \brief changed rounding method for occupancy \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_rounding_changed (GtkComboBox * box, gpointer data) { builder_edition * cbuilder = (builder_edition *)data; cbuilder -> rounding = combo_get_active ((GtkWidget *)box); } /*! \fn G_MODULE_EXPORT void adjust_occupancy (GtkButton * but, gpointer data) \brief adjust occupancy create dialog callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void adjust_occupancy (GtkButton * but, gpointer data) { project * this_proj = (project *)data; builder_edition * cbuilder = this_proj -> modelgl -> builder_win; GtkWidget * info = dialogmodal ("Occupancy set-up", GTK_WINDOW(cbuilder -> win)); GtkWidget * vbox, * hbox; vbox = dialog_get_content_area (info); gchar * boccup[5] = {i18n("Random for the initial cell only"), i18n("Random cell by cell"), i18n("Completely random"), i18n("Successively"), i18n("Alternatively")}; gchar * occup[5] = {i18n("Sites are filled randomly in the initial cell only,\n" "then the initial cell is simply replicated."), i18n("Sites are filled randomly for each cell, cell by cell separately."), i18n("Sites are filled randomly for the entire network,\n" "the final crystal is considered as a whole."), i18n("Sites are filled successively: all object(s) A, then all object(s) B ... "), i18n("Sites are filled alternatively: object A, object B, object A ...")}; GtkWidget * occ_but[5]; int i; for (i=0; i<5; i++) { hbox = create_hbox(0); occp[i].a = this_proj -> id; occp[i].b = i; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); #ifdef GTK4 occ_but[i] = check_button (_(boccup[i]), -1, 25, FALSE, G_CALLBACK(toggle_occ), & occp[i]); if (i) { gtk_check_button_set_group ((GtkCheckButton *)occ_but[i], (GtkCheckButton *)occ_but[0]); } #else if (! i) { occ_but[i] = radio_button (_(boccup[i]), -1, 25, FALSE, G_CALLBACK(toggle_occ), & occp[i]); } else { occ_but[i] = gtk_radio_button_new_from_widget (GTK_RADIO_BUTTON(occ_but[0])); add_container_child (CONTAINER_BUT, occ_but[i], markup_label(_(boccup[i]), -1, 25, 0.0, 0.5)); } #endif if (i) g_signal_connect (G_OBJECT(occ_but[i]), "toggled", G_CALLBACK(toggle_occ), & occp[i]); #ifdef GTK4 gtk_button_set_has_frame (GTK_BUTTON(occ_but[i]), FALSE); #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, occ_but[i], FALSE, FALSE, 5); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_(occup[i]), 200, -1, 0.5, 0.5), FALSE, FALSE, 50); } i = cbuilder -> occupancy; button_set_status (occ_but[i], TRUE); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (_("Allow overlapping"), -1, 25, cbuilder -> overlapping, G_CALLBACK(toggle_overlap), (gpointer)cbuilder), FALSE, FALSE, 0); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); gchar * overlap = _("Instead of ensuring that sites are filled by a single object,\n" "this allows object(s) to share the same crystalline position. \n" "The option above describes how filled and empty positions alternate.\n"); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (overlap, 200, -1, 0.5, 0.5), FALSE, FALSE, 50); // Rounding occupancy here hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("Occupancy rounding:"), 200, -1, 0.5, 0.5), FALSE, FALSE, 0); GtkWidget * rounding = create_combo (); gtk_widget_set_size_request (rounding, -1, 30); for (i=0; i<3; i++) combo_text_append (rounding, _(cif_occupancies[i])); combo_set_active (rounding, cbuilder -> rounding); g_signal_connect(G_OBJECT(rounding), "changed", G_CALLBACK(on_rounding_changed), & cbuilder); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, rounding, FALSE, FALSE, 10); gchar * str = g_strdup_printf (_("\tLowest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊8.75⌋ = 8\n" "\tHighest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌈5.39⌉ = 6\n" "\tNearest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊6.82⌉ = 7\t\t and\t ⌊4.31⌉ = 4\n" "\n\t\t%s\n"), _(cif_occ[0]), _(cif_occ[1]), _(cif_occ[2]), _(cif_sites[0])); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label (str, 450, -1, 0.5, 0.5), FALSE, FALSE, 5); g_free (str); show_the_widgets (info); run_this_gtk_dialog (info, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn GtkWidget * builder_win (project * this_proj, gpointer data) \brief create crystal builder window \param this_proj the target project \param data the associated data pointer */ GtkWidget * builder_win (project * this_proj, gpointer data) { int i, j; gchar * crystal_systems[7] = {i18n("Triclinic"), i18n("Monoclinic"), i18n("Othorhombic"), i18n("Tetragonal"), i18n("Trigonal"), i18n("Hexagonal"), i18n("Cubic")}; gchar * str = (! this_proj -> natomes) ? g_strdup_printf (_("Crystal builder - %s"), this_proj -> name) : g_strdup_printf (_("Crystal builder")); builder_edition * cbuilder = this_proj -> modelgl -> builder_win; GtkWidget * win = create_win (str, this_proj -> modelgl -> win, FALSE, FALSE); g_free (str); GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, win, vbox); cbuilder -> bh_box = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cbuilder -> bh_box, FALSE, FALSE, 0); for (i=0; i<2; i++) { cbuilder -> bv_box[i] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> bh_box, cbuilder -> bv_box[i], FALSE, FALSE, 0); } // Crystal system GtkWidget * hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> bv_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Crystal system:"), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); cbuilder -> cs_combo = create_combo(); for (i=0; i<7;i++) combo_text_append (cbuilder -> cs_combo, _(crystal_systems[i])); combo_set_active (cbuilder -> cs_combo, 0); gtk_widget_set_size_request (cbuilder -> cs_combo, 150, 25); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cbuilder -> cs_combo, FALSE, FALSE, 0); g_signal_connect (G_OBJECT(cbuilder -> cs_combo), "changed", G_CALLBACK(set_cs), (gpointer)cbuilder); // Bravais lattice cbuilder -> bl_box = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> bv_box[0], cbuilder -> bl_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> bl_box, markup_label(_("Bravais lattice:"), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); cbuilder -> bl_combo = create_bl_combo (0, (gpointer)cbuilder); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> bl_box, cbuilder -> bl_combo, FALSE, FALSE, 0); cbuilder -> ltc_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> ltc_box, markup_label(_("Lattice constraints: "), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); i = get_crystal_id (1); str = g_strdup_printf ("%s", (i == 1 || i == 5) ? _(latt_info[i]) : latt_info[i]); cbuilder -> ltc_cons = markup_label(str, 150, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> ltc_box, cbuilder -> ltc_cons, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> bv_box[0], cbuilder -> ltc_box, FALSE, FALSE, 5); // cbuilder -> bv_img = gtk_image_new_from_file (bravais_img[get_bravais_img_id(1)]); // add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> bv_box[1], cbuilder -> bv_img, FALSE, FALSE, 5); // Space group cbuilder -> sg_box = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cbuilder -> sg_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> sg_box, markup_label(_("Space group:"), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); GtkTreeModel * model = sg_combo_tree (0, 0); cbuilder -> sg_combo = gtk_combo_box_new_with_model (model); g_object_unref (model); GtkCellRenderer * renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cbuilder -> sg_combo), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cbuilder -> sg_combo), renderer, "text", 0, NULL); g_signal_connect (G_OBJECT(cbuilder -> sg_combo), "changed", G_CALLBACK(set_sg), data); gtk_widget_set_size_request (cbuilder -> sg_combo, 150, 25); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> sg_box, cbuilder -> sg_combo, FALSE, FALSE, 0); combo_set_active (cbuilder -> sg_combo, 0); combo_set_markup (cbuilder -> sg_combo); // Space group option cbuilder -> so_box = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cbuilder -> so_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> so_box, markup_label(_("Settings:"), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); model = so_combo_tree (cbuilder -> cell.sp_group); cbuilder -> so_combo = gtk_combo_box_new_with_model (model); g_object_unref (model); renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cbuilder -> so_combo), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cbuilder -> so_combo), renderer, "text", 0, NULL); gtk_widget_set_size_request (cbuilder -> so_combo, 150, 25); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> so_box, cbuilder -> so_combo, FALSE, FALSE, 0); combo_set_active (cbuilder -> so_combo, 0); widget_set_sensitive (cbuilder -> so_combo, 0); g_signal_connect (G_OBJECT(cbuilder -> so_combo), "changed", G_CALLBACK(set_so), data); combo_set_markup (cbuilder -> so_combo); for (i=0; i<3; i++) { cbuilder -> cell.cextra[i] = 1; for (j=0; j<3; j++) { cbuilder -> pointers[i][j].a = this_proj -> id; cbuilder -> pointers[i][j].b = i; cbuilder -> pointers[i][j].c = j; } } if (cbuilder -> cell.sp_group) get_origin (cbuilder -> cell.sp_group); // Lattice parameters hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Lattice parameters:"), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); cbuilder -> lattice_box = create_vbox (BSEP); GtkTreeModel * lmodel = la_combo_tree (); cbuilder -> la_combo = gtk_combo_box_new_with_model (lmodel); g_object_unref (lmodel); renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cbuilder -> la_combo), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cbuilder -> la_combo), renderer, "text", 0, NULL); gtk_widget_set_size_request (cbuilder -> la_combo, 150, 25); g_signal_connect (G_OBJECT(cbuilder -> la_combo), "changed", G_CALLBACK(set_lattice), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cbuilder -> la_combo, FALSE, FALSE, 0); combo_set_active (cbuilder -> la_combo, 0); combo_set_markup (cbuilder -> la_combo); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cbuilder -> lattice_box, FALSE, FALSE, 50); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Cell(s):"), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); GtkWidget * ax_cell[3]; for (i=0; i<3; i++) { ax_cell[i] = spin_button (G_CALLBACK(add_cryst_cell), cbuilder -> cell.cextra[i], 1, 1000, 1, 0, 100, & cbuilder -> pointers[i][0]); str = g_strdup_printf ("%s x ", box_prop[0][i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 50, -1, 1.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ax_cell[i], FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (_(" Wrap all atoms in the unit cell after building"), -1, -1, FALSE, G_CALLBACK(set_wr), (gpointer)cbuilder), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (_(" Show/Hide clones after building"), -1, -1, FALSE, G_CALLBACK(set_shc), (gpointer)cbuilder), FALSE, FALSE, 0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); this_proj -> modelgl -> search_widg[7] = allocate_atom_search (this_proj -> id, INSERT, 7, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Add object(s):"), 150, -1, 0.0, 0.5), FALSE, FALSE, 5); cbuilder -> add_combo = create_action_combo (5, this_proj); gtk_widget_set_size_request (cbuilder -> add_combo, 110, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cbuilder -> add_combo, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_button (_("Occupancy"), IMG_STOCK, DPROPERTIES, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(adjust_occupancy), this_proj), FALSE, FALSE, 5); GtkWidget * cbscroll = create_scroll (vbox, 400, 200, GTK_SHADOW_NONE); add_container_child (CONTAINER_SCR, cbscroll, create_atoms_tree (this_proj -> modelgl -> search_widg[7], this_proj, 0)); hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, FALSE, 5); cbuilder -> pbut = create_button ((this_proj -> natomes) ? _("Build (new project)") : _("Build"), IMG_STOCK, APPLY, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(apply_build), GINT_TO_POINTER(this_proj -> id)); add_box_child_end (hbox, cbuilder -> pbut, FALSE, FALSE, 5); GtkWidget * but = create_button (_("Close"), IMG_STOCK, FCLOSE, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(close_build), GINT_TO_POINTER(this_proj -> id)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 5); add_gtk_close_event (win, G_CALLBACK(delete_build), GINT_TO_POINTER(this_proj -> id)); return win; } /*! \fn void prepare_crystal_builder (gpointer data) \brief create the crystal builder \param data the associated data pointer */ void prepare_crystal_builder (gpointer data) { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); if (this_proj -> modelgl -> builder_win == NULL) { // close_edit (NULL, GINT_TO_POINTER(this_proj -> id)); prepare_atom_edition (data, FALSE); this_proj -> modelgl -> builder_win = g_malloc0(sizeof*this_proj -> modelgl -> builder_win); this_proj -> modelgl -> builder_win -> cell.box = g_malloc0(sizeof*this_proj -> modelgl -> builder_win -> cell.box); this_proj -> modelgl -> builder_win -> win = builder_win (this_proj, data); this_proj -> modelgl -> builder_win -> rounding = 2; } show_the_widgets (this_proj -> modelgl -> builder_win -> win); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void crystal_window (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create the crystal build window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void crystal_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void crystal_window (GtkWidget * widg, gpointer data) \brief create the crystal build window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void crystal_window (GtkWidget * widg, gpointer data) #endif { prepare_crystal_builder (data); } atomes_1.3.1/src/opengl/edit/atom_search.c0000664000175000017500000003176315212624223020150 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_search.c * @short Functions to prepare the model edition 'search' tabs and the associated widgets * @author Sébastien Le Roux */ /* * This file: 'atom_search.c' * * Contains: * - The functions to prepare the model edition 'search' tabs and the associated widgets * * List of functions: G_MODULE_EXPORT void turn_rebuild_on (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void turn_rebuild_on (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void turn_bonding_on (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void turn_bonding_on (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_atoms_for_action (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void expanding_atoms (GtkWidget * exp, gpointer data); GtkWidget * create_search_box (int aid, project * this_proj); GtkWidget * create_action_combo (int id, project * this_proj); GtkWidget * action_tab (int aid, project * this_proj); */ #include "atom_edit.h" #ifdef GTK4 /*! \fn G_MODULE_EXPORT void turn_rebuild_on (GtkCheckButton * but, gpointer data) \brief rebuild toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void turn_rebuild_on (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void turn_rebuild_on (GtkToggleButton * but, gpointer data) \brief rebuild toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void turn_rebuild_on (GtkToggleButton * but, gpointer data) #endif { tint * dat = (tint *) data; int i = button_get_status ((GtkWidget *)but); get_project_by_id(dat -> a) -> modelgl -> rebuild[0][dat -> c] = i; #ifdef GTK3 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)get_project_by_id(dat -> a) -> modelgl -> rbuild[i], i); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void turn_bonding_on (GtkCheckButton * but, gpointer data) \brief update bonding toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void turn_bonding_on (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void turn_bonding_on (GtkToggleButton * but, gpointer data) \brief update bonding toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void turn_bonding_on (GtkToggleButton * but, gpointer data) #endif { atom_search * asearch = (atom_search *) data; asearch -> recompute_bonding = button_get_status ((GtkWidget *)but); } /*! \fn GtkWidget * create_search_box (int aid, project * this_proj) \brief create the action search widget \param aid the action id \param this_proj the target project */ GtkWidget * create_search_box (int aid, project * this_proj) { gchar * appl[5] = {i18n(" Move atom(s)"), i18n(" Replace atom(s)"), i18n(" Remove atom(s)"), i18n(" Insert atom(s)"), i18n(" Move atom(s)")}; gchar * img[4]= {EDITA, LIST_REM, LIST_ADD, MEDIA_PLAY}; GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * widg; int i; if (aid == 4) { i = (this_proj -> modelgl -> search_widg[aid+1] != NULL) ? this_proj -> modelgl -> search_widg[aid+1] -> in_selection : 0; } else if (aid == 8) { i = this_proj -> nspec; } else { i = this_proj -> modelgl -> search_widg[aid+1] -> todo_size; } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, selection_tab (this_proj -> modelgl -> search_widg[aid+1], i), FALSE, FALSE, 0); if (aid == 1 || aid == 5) { int j = (aid == 1) ? 0 : 1; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); this_proj -> modelgl -> atom_win -> edition_but[j] = check_button(_("Extract/rebuild the object(s) to be moved, ie. cut/clean bonds with nearest neighbor(s)"), -1, 25, this_proj -> modelgl -> rebuild[0][j], G_CALLBACK(turn_rebuild_on), & this_proj -> modelgl -> colorp[0][j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, this_proj -> modelgl -> atom_win -> edition_but[j], FALSE, FALSE, 50); } if (aid == 1 || aid == 3 || aid == 5) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); widg = check_button(_("Recompute bonding information using bond cutoffs"), -1, 25, this_proj -> modelgl -> search_widg[aid+1] -> recompute_bonding, G_CALLBACK(turn_bonding_on), this_proj -> modelgl -> search_widg[aid+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 50); } if (aid > 1 && aid < 6) { GtkWidget * lay = create_layout (-1, 100); GtkWidget * but; if (aid == 5) { layout_add_widget (lay, markup_label(_("Repeat n times, n= "), 100, -1, 0.0, 0.5), 125, 25); layout_add_widget (lay, spin_button (G_CALLBACK(repeat_move), 1, 1, 1000, 1, 0, 100, this_proj), 275, 20); } but = create_button (_(appl[aid-1]), IMG_STOCK, img[aid-2], 100, 35, GTK_RELIEF_NORMAL, G_CALLBACK(take_action), & this_proj -> modelgl -> search_widg[aid+1] -> pointer[0]); layout_add_widget (lay, but, 500, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, lay, FALSE, FALSE, 0); } return vbox; } /*! \fn G_MODULE_EXPORT void set_atoms_for_action (GtkComboBox * box, gpointer data) \brief change selection status \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_atoms_for_action (GtkComboBox * box, gpointer data) { tint * id = (tint *)data; project * this_proj = get_project_by_id (id -> a); int i, j, k; i = combo_get_active ((GtkWidget *)box); this_proj -> modelgl -> search_widg[id -> c] -> status = i; if (id -> c == 2) { for (j=0; j<2; j++) { combo_set_active (this_proj -> modelgl -> atom_win -> axis_combo[j], this_proj -> modelgl -> atom_win -> axis[j]); for (k=0; k<6; k++) { gtk_range_set_value (GTK_RANGE(this_proj -> modelgl -> atom_win -> edit_scale[k]), this_proj -> modelgl -> atom_win -> new_param[i][j][k]); update_range_and_entry (this_proj, i, this_proj -> modelgl -> atom_win -> axis[j], k); } } } clean_picked_and_labelled (this_proj -> modelgl -> search_widg[id -> c], TRUE); update_search_tree (this_proj -> modelgl -> search_widg[id -> c]); } /*! \fn GtkWidget * create_action_combo (int id, project * this_proj) \brief create action combo box \param id the action id \param this_proj the target project */ GtkWidget * create_action_combo (int id, project * this_proj) { GtkWidget * combo; if (id == 3 || id == 5) { GtkTreeModel * model = replace_combo_tree (TRUE, this_proj -> id); combo = gtk_combo_box_new_with_model (model); g_object_unref (model); GtkCellRenderer * renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer, "text", 0, NULL); g_signal_connect (G_OBJECT(combo), "changed", G_CALLBACK(set_atoms_to_insert), & this_proj -> modelgl -> search_widg[id+2] -> pointer[0]); combo_set_active (combo, 0); combo_set_markup (combo); set_atoms_to_insert (GTK_COMBO_BOX(combo), & this_proj -> modelgl -> search_widg[id+2] -> pointer[0]); } else { combo = create_combo (); int i; for (i=0; i<3; i++) combo_text_append (combo, _(action_atoms[i])); combo_set_active (combo, this_proj -> modelgl -> search_widg[id+2] -> status); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_atoms_for_action), & this_proj -> modelgl -> search_widg[id+2] -> pointer[0]); } return combo; } /*! \fn G_MODULE_EXPORT void expanding_atoms (GtkWidget * exp, gpointer data) \brief expanding motion callback \param exp the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void expanding_atoms (GtkWidget * exp, gpointer data) { tint * dat = (tint *)data; project * this_proj = get_project_by_id (dat -> a); int i; for (i=0; i<3; i++) { if (i != dat -> c - 1) { if (gtk_expander_get_expanded (GTK_EXPANDER (this_proj -> modelgl -> atom_win -> at_expand[i]))) { gtk_expander_set_expanded (GTK_EXPANDER (this_proj -> modelgl -> atom_win -> at_expand[i]), FALSE); } } } } /*! \fn GtkWidget * action_tab (int aid, project * this_proj) \brief create model edtion action tab \param aid the action id \param this_proj the target project */ GtkWidget * action_tab (int aid, project * this_proj) { gchar * action[7] = {i18n("moved"), i18n("replaced"), i18n("removed"), i18n("inserted"), i18n("moved randomly"), " ", i18n("passivated")}; GtkWidget * vbox = create_vbox (BSEP); atom_search * asearch = this_proj -> modelgl -> search_widg[aid+2]; GtkWidget * hbox; if (aid < 5) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); gchar * str = g_strdup_printf (_("Select the object(s) to be %s in: "), _(action[aid])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 200, -1, 0.0, 0.5), FALSE, FALSE, 20); g_free (str); this_proj -> modelgl -> atom_win -> atom_combo[aid] = create_action_combo (aid, this_proj); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, this_proj -> modelgl -> atom_win -> atom_combo[aid], FALSE, FALSE, 20); } GtkWidget * sbox = create_vbox (BSEP); GtkWidget * tbox = create_search_box (aid+1, this_proj); if (! aid) { gchar * exp_name[3] = {i18n("Atom selection:"), i18n("Translate:"), i18n("Rotate:")}; int i; for (i=0; i<3; i++) { this_proj -> modelgl -> atom_win -> at_expand[i] = create_expander (_(exp_name[i]), NULL); add_box_child_start (GTK_ORIENTATION_VERTICAL, sbox, this_proj -> modelgl -> atom_win -> at_expand[i], TRUE, TRUE, 10); if (! i) { add_container_child (CONTAINER_EXP, this_proj -> modelgl -> atom_win -> at_expand[i], tbox); gtk_expander_set_expanded (GTK_EXPANDER(this_proj -> modelgl -> atom_win -> at_expand[i]), TRUE); } else { add_container_child (CONTAINER_EXP, this_proj -> modelgl -> atom_win -> at_expand[i], add_motion_interaction (asearch, i-1, this_proj)); gtk_expander_set_expanded (GTK_EXPANDER(this_proj -> modelgl -> atom_win -> at_expand[i]), FALSE); if (i == 2) widget_set_sensitive (this_proj -> modelgl -> atom_win -> at_expand[2], asearch -> object); } g_signal_connect (G_OBJECT(this_proj -> modelgl -> atom_win -> at_expand[i]), "activate", G_CALLBACK(expanding_atoms), & asearch -> pointer[0]); } } else { if (aid < 3) { asearch -> mode_box = create_combo (); combo_text_append (asearch -> mode_box, _("Normally")); combo_text_append (asearch -> mode_box, _("Randomly")); combo_set_active (asearch -> mode_box, 0); g_signal_connect (G_OBJECT (asearch -> mode_box), "changed", G_CALLBACK(set_search_mode), asearch); GtkWidget * box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, sbox, box, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, markup_label(".", 5, -1, 0.0, 0.5), FALSE, FALSE, 10); gchar * type_of[2]={i18n("Replace: "), i18n("Remove: ")}; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, markup_label(_(type_of[aid-1]), 50, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, asearch -> mode_box, FALSE, FALSE, 5); } add_box_child_start (GTK_ORIENTATION_VERTICAL, sbox, tbox, FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, sbox, FALSE, FALSE, 5); if (! aid || aid == 4) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Reset transformation(s)"), -1, 35, FALSE, G_CALLBACK(set_reset_transformation), & asearch -> pointer[0]), FALSE, FALSE, 10); } show_the_widgets (vbox); if (aid != 3) widget_set_sensitive (vbox, this_proj -> nspec); return vbox; } atomes_1.3.1/src/opengl/edit/atom_remove.c0000664000175000017500000005012215212624223020166 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_remove.c * @short Functions to remove bond(s) from a project \n Function to prepare the passivation (removal followed by insertion) * @author Sébastien Le Roux */ /* * This file: 'atom_remove.c' * * Contains: * - The functions to remove bond(s) from a project - The function to prepare the passivation (removal followed by insertion) * * List of functions: int test_this_fragment (int natomes, int fcoord, int fid, atom * atom_list, int * old_id, gboolean remove); gboolean * remove_bonds_from_project (project * this_proj, atomic_object * this_object, int * old_id, atom * new_list, gboolean remove, gboolean passivate); void set_mol_data (int the_atom, int the_mol); void to_remove_this_list_of_objects (project * this_proj, atom_search * asearch); void to_passivate_using_the_objects (project * this_proj, atom_search * asearch); */ #include "atom_edit.h" int tmbs; int molcounter; int atoms_in_frag; int * tigl; int * migl; int * togl; int * ats_in_frag; int * ats_id; int * contacts; int ** neighbors; extern atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); /*! \fn void set_mol_data_list (int the_atom, atom ** mol_list, int the_mol) \brief set molecule id for atom \param the_atom the atom id \param mol_list the list of atom(s) to look up \param the_mol the molecule id */ void set_mol_data_list (int aid, atom ** mol_list, int the_mol) { int ab, ac, ad; molcounter ++; int the_atom = tigl[aid]; togl[the_atom] = the_mol; tmbs ++; if (molcounter == 10000) goto end; if (tmbs == atoms_in_frag) goto end; int mid = migl[aid]; for (ab=0; ab < mol_list[mid] -> numv; ab++) { ac = mol_list[mid] -> vois[ab]; ad = tigl[ac]; if (! togl[ad] && molcounter < 100000) set_mol_data_list (ac, mol_list, the_mol); if (tmbs == atoms_in_frag) goto end; if (molcounter == 10000) goto end; } molcounter --; end:; } /*! \fn int test_this_fragment (int natomes, int fcoord, int fid, atom * atom_list, int * old_id, gboolean remove) \brief verify that all atom(s) in the fragment are connected somehow, otherwise create new fragment \param natomes number of atom(s) \param fcoord the number of fragment(s) \param fid the fragment id \param atom_list the atom(s) list \param old_id the atom(s) old id list \param remove remove (1) or motion (0) action */ int test_this_fragment (int natomes, int fcoord, int fid, atom ** atom_list, int * old_id, gboolean remove) { int i, j, k, l, m, n; gboolean modif; tigl = allocint (natomes); migl = allocint (natomes); i = 0; for (j=0; j id] > 0) modif = TRUE; } } if (modif) { if (atom_list[j] -> coord[2] == fid) { tigl[atom_list[j] -> id] = i; migl[atom_list[j] -> id] = j; i ++; } } } if (i) { togl = allocint (i); atoms_in_frag = i; // Check each atoms (recursive testing) int totmol = 0; tmbs = molcounter = 0; start:; i = 0; for (j=0; j coord[2] == fid) { k = tigl[atom_list[j] -> id]; if (! molcounter && ! togl[k]) { totmol ++; set_mol_data_list (atom_list[j] -> id, atom_list, totmol); if (tmbs == atoms_in_frag) goto end; if (molcounter == 10000) goto start; molcounter = 0; } else if (molcounter > 0 && togl[k] == totmol) { for (l=0; l numv; l++) { m = atom_list[j] -> vois[l]; n = tigl[m]; if (! togl[n]) { molcounter = 0; i = 1; set_mol_data_list (m, atom_list, totmol); if (tmbs == atoms_in_frag) goto end; if (molcounter == 10000) goto start; molcounter = 1; } } } } } } if (tmbs < atoms_in_frag) { molcounter = 0; goto start; } if (molcounter) goto start; end:; i = 0; for (j=0; j id; l = tigl[k]; if (togl[l] > 1) { atom_list[j] -> coord[2] = fcoord + togl[l] - 2; // g_debug ("togl[l] = %d, j= %d, atom_list[j] -> coord[2]= %d", togl[l], j, atom_list[j] -> coord[2]); } i = max (i, togl[l]); } } g_free (togl); } g_free (tigl); g_free (migl); return i-1; } /*! \fn gboolean * remove_bonds_from_project (project * this_proj, atomic_object * this_object, int * old_id, atom * new_list, gboolean remove, gboolean passivate) \brief remove bond(s) from project \param this_proj the target project \param this_object the target insert object, if any \param old_id the atom(s) id list \param new_list the new atom list \param remove remove (1) or motion (0) action \param passivate passivate (1) or not (0) */ gboolean * remove_bonds_from_project (project * this_proj, atomic_object * this_object, int * old_id, atom * new_list, gboolean remove, gboolean passivate) { int h, i, j, k, l, m; int tmpbond[2]; int ** tmpbondid[2]; atom * tmp_list; gboolean * frag_to_test; gboolean * frag_to_remove; gboolean * show_frag = NULL; int * per_frag; int * in_frag; int * tmp_vois = NULL; int * id_mod = NULL; /* tmp_list = new_list; while (tmp_list) { i = tmp_list -> id; if ((remove && old_id[i] > 0) || ! remove) { g_debug ("Keeping atom: %d", i+1); g_debug (" atom: %d has: %d neighbor(s):", i+1, tmp_list -> numv); for (j=0; j numv; j++) { g_debug (" n: %d, atom= %d", j+1, tmp_list -> vois[j]+1); } } tmp_list = tmp_list -> next; }*/ int tcf = (this_proj) ? this_proj -> coord -> totcoord[2] : this_object -> coord -> totcoord[2]; if (this_proj) { if (tcf) { show_frag = duplicate_bool (tcf, this_proj -> modelgl -> anim -> last -> img -> show_coord[2]); } else { show_frag = allocbool (1); show_frag[0] = TRUE; tcf = 1; } } int nat = (this_proj) ? this_proj -> natomes : this_object -> atoms; per_frag = allocint (tcf); in_frag = allocint (tcf); id_mod = allocint (nat); tmp_vois = allocint (20); h = -1; tmp_list = new_list; for (i=0; i atoms[0][i].coord[2] : tmp_list -> coord[2]; per_frag[j] ++; if (old_id[i] < 0) { in_frag[j] ++; if (! remove && ! passivate) { h ++; id_mod[tmp_list -> id] = h; } } else { h ++; id_mod[tmp_list -> id] = h; } if (old_id[i] > 0 || ! remove) { if (tmp_list -> numv > 0) { k = 0; // Save the neighbors list for this atom for (l=0; l numv; l++) { m = tmp_list -> vois[l]; if ((remove && old_id[m] > 0) || (! remove && old_id[i] > 0 && old_id[m] > 0) || (! remove && old_id[i] < 0 && old_id[m] < 0)) { tmp_vois[k] = m; k ++; } } g_free (tmp_list -> vois); tmp_list -> vois = NULL; tmp_list -> numv = k; if (k) { // Correct the neighbor list for this atom tmp_list -> vois = allocint (k); for (l=0; l vois[l] = tmp_vois[l]; } } } if ( old_id[i] > 0 || ! remove || passivate) tmp_list = tmp_list -> next; } g_free (tmp_vois); // Taking care of the isolated atom(s) tmp_list = new_list; while (tmp_list) { i = tmp_list -> coord[2]; if (! tmp_list -> numv && per_frag[i] > 1 && old_id[tmp_list -> id] > 0) { // If the atom has no neighbors, and if it is not the last one in the fragment show_frag = g_realloc (show_frag, (tcf+1)*sizeof*show_frag); per_frag = g_realloc (per_frag, (tcf+1)*sizeof*per_frag); in_frag = g_realloc (in_frag, (tcf+1)*sizeof*in_frag); show_frag[tcf] = show_frag[i]; per_frag[tcf] = 1; per_frag[i] --; tmp_list -> coord[2] = tcf; tcf ++; } tmp_list = tmp_list -> next; } frag_to_test = allocbool (tcf); frag_to_remove = allocbool (tcf); for (i=0; i 1 && in_frag[i]) { frag_to_test[i] = TRUE; } // g_debug ("i= %d, frag_to_test[%d]= %d, frag_to_remove[%d]= %d, in_frag[%d]= %d, per_frag[%d]= %d", i, i, frag_to_test[i], i, frag_to_remove[i], i, in_frag[i], i, per_frag[i]); } g_free (in_frag); g_free (per_frag); atom ** atom_list = g_malloc0(nat*sizeof*atom_list); tmp_list = new_list; while (tmp_list) { i = tmp_list -> id; if (old_id[i] > 0 || ! remove) { atom_list[i] = duplicate_atom (tmp_list); } tmp_list = tmp_list -> next; } if (remove && this_proj) { i = 0; // Removing fragment(s) if needed int * new_fid = allocint (tcf); for (j=0; j coord[2] = new_fid[atom_list[j] -> coord[2]]; } g_free (new_fid); tcf -= i; if (i) { show_frag = g_realloc (show_frag, tcf*sizeof*show_frag); } } i = tcf; for (j=0; j 0) { show_frag = g_realloc (show_frag, (tcf+k)*sizeof*show_frag); for (l=tcf; l coord -> totcoord[2] = tcf; } else { this_object -> coord -> totcoord[2] = tcf; } tmp_list = new_list; while (tmp_list) { i = tmp_list -> id; if (old_id[i] > 0 || ! remove) { tmp_list -> coord[2] = atom_list[i] -> coord[2]; g_free (atom_list[i]); // g_debug ("End:: id= %d, coord[2]= %d", tmp_list -> id, tmp_list -> coord[2]); } tmp_list = tmp_list -> next; } g_free (atom_list); if (this_proj) { for (i=0; i<2; i++) { tmpbondid[i] = NULL; tmpbond[i] = 0; } for (i=0; i<2; i++) { if (this_proj -> modelgl -> bonds[0][i]) { tmpbondid[i] = allocdint (this_proj -> modelgl -> bonds[0][i], 2); j = 0; for (k=0; k modelgl -> bonds[0][i]; k++) { l = this_proj -> modelgl -> bondid[0][i][k][0]; m = this_proj -> modelgl -> bondid[0][i][k][1]; if (old_id[l] > 0 && old_id[m] > 0) { tmpbondid[i][j][0] = l; tmpbondid[i][j][1] = m; j ++; } else if (! remove && (old_id[l] < 0 && old_id[m] < 0)) { tmpbondid[i][j][0] = l; tmpbondid[i][j][1] = m; j ++; } } tmpbond[i] = j; // g_debug ("i= %d, tmpbond[%d]= %d", i, i, tmpbond[i]); } } distance clo; for (i=0; i<2; i++) { if (this_proj -> modelgl -> bonds[0][i]) { g_free (this_proj -> modelgl -> bondid[0][i]); this_proj -> modelgl -> bondid[0][i] = NULL; if (i) { g_free (this_proj -> modelgl -> clones[0]); this_proj -> modelgl -> clones[0] = NULL; } if (tmpbond[i]) { if (i) this_proj -> modelgl -> clones[0] = g_malloc0(tmpbond[i]*sizeof*this_proj -> modelgl -> clones[0]); this_proj -> modelgl -> bondid[0][i] = allocdint (tmpbond[i], 2); for (k=0; k modelgl -> bondid[0][i][k][0] = id_mod[tmpbondid[i][k][0]]; this_proj -> modelgl -> bondid[0][i][k][1] = id_mod[tmpbondid[i][k][1]]; //g_debug ("bc:: i= %d, j= %d, a= %d, b= %d", i, k, tmpbondid[i][k][0], tmpbondid[i][k][1]); if (i) { l = this_proj -> modelgl -> bondid[0][i][k][0]; m = this_proj -> modelgl -> bondid[0][i][k][1]; clo = distance_3d (& this_proj -> cell, 0, & this_proj -> atoms[0][l], & this_proj -> atoms[0][m]); this_proj -> modelgl -> clones[0][k].x = clo.x; this_proj -> modelgl -> clones[0][k].y = clo.y; this_proj -> modelgl -> clones[0][k].z = clo.z; } } } this_proj -> modelgl -> bonds[0][i] = tmpbond[i]; this_proj -> modelgl -> allbonds[i] = tmpbond[i]; } if (tmpbondid[i]) { g_free (tmpbondid[i]); tmpbondid[i] = NULL; } } } if (this_proj) { tmp_list = new_list; while (tmp_list) { i = tmp_list -> id; if (old_id[i] > 0 || ! remove) { if (tmp_list -> numv > 0) { for (j=0; j numv; j++) { k = tmp_list -> vois[j]; tmp_list -> vois[j] = id_mod[k]; } } } tmp_list = tmp_list -> next; } } if (id_mod) { g_free (id_mod); id_mod = NULL; } /*tmp_list = new_list; while (tmp_list) { i = tmp_list -> id; if ((remove && old_id[i] > 0) || ! remove) { g_debug ("Correct atom: %d", i+1); g_debug (" atom: %d has: %d neighbor(s):", i+1, tmp_list -> numv); for (j=0; j numv; j++) { g_debug (" n: %d, atom= %d", j+1, tmp_list -> vois[j]+1); } } tmp_list = tmp_list -> next; }*/ return show_frag; } /*! \fn void to_remove_this_list_of_objects (project * this_proj, atom_search * asearch) \brief prepaer to remove a list of object(s) from a project, one object after another. \param this_proj the target project \param asearch the target atom search */ void to_remove_this_list_of_objects (project * this_proj, atom_search * asearch) { int i, j; atomic_object * tmp_object; atomic_object * tmp_replace; if (asearch -> action == REPLACE) { if (asearch -> pointer[0].c == 3) { tmp_replace = this_proj -> modelgl -> atom_win -> to_be_inserted[0]; } else { tmp_replace = this_proj -> modelgl -> atom_win -> to_be_inserted[3]; } } int filter = get_asearch_filter (asearch); int object = get_asearch_object (asearch); remove_search = allocate_atom_search (this_proj -> id, REMOVE, REMOVE, this_proj -> natomes); for (i=0; i todo_size; i++) { if (asearch -> todo[i]) { tmp_object = NULL; if (filter > 0 && filter < 3 && ((object && ! asearch -> passivating) || (object == 2 && asearch -> passivating))) { tmp_object = create_object_from_atom_coordination (this_proj, filter-1, i, remove_search); } else if (filter > 2 && ((object && ! asearch -> passivating) || (object == 2 && asearch -> passivating))) { j = (asearch -> mode && filter == 4) ? filter - 1 : filter; tmp_object = create_object_from_frag_mol (this_proj, j-1, i, remove_search); } else { remove_search -> todo[i] = 1; if (asearch -> action == REPLACE) { tmp_object = g_malloc0(sizeof*tmp_object); tmp_object -> baryc = allocdouble (3); tmp_object -> baryc[0] = this_proj -> atoms[0][i].x; tmp_object -> baryc[1] = this_proj -> atoms[0][i].y; tmp_object -> baryc[2] = this_proj -> atoms[0][i].z; } } if (asearch -> action == REPLACE) { for (j=0; j<3; j++) tmp_replace -> baryc[j] += tmp_object -> baryc[j]; tmp_replace = tmp_replace -> next; } if (tmp_object) g_free (tmp_object); } } i = 0; for (j=0; j natomes; j++) { if (remove_search -> todo[j]) i++; } remove_search -> in_selection = i; } /*! \fn void to_passivate_using_the_objects (project * this_proj, atom_search * asearch) \brief prepare passivation (delete of an object, then insert of another one at the same location) \param this_proj the target project \param asearch the target atom search */ void to_passivate_using_the_objects (project * this_proj, atom_search * asearch) { int i, j, k, l, m; atomic_object * object = NULL; atomic_object * tmp_oba, * tmp_obb; int filter = get_asearch_filter (asearch); int num_elem = asearch -> todo_size; int * passivate_todo = duplicate_int (num_elem, asearch -> todo); g_free (asearch -> todo); allocate_todo (asearch, this_proj -> natomes); if (this_proj -> modelgl -> atom_win -> to_be_inserted[3]) { tmp_oba = this_proj -> modelgl -> atom_win -> to_be_inserted[3]; object = duplicate_atomic_object (tmp_oba); tmp_obb = object; while (tmp_oba -> next) { tmp_oba = tmp_oba -> next; tmp_obb -> next = duplicate_atomic_object (tmp_oba); tmp_obb = tmp_obb -> next; } g_free (this_proj -> modelgl -> atom_win -> to_be_inserted[3]); this_proj -> modelgl -> atom_win -> to_be_inserted[3] = NULL; } gboolean doit; asearch -> in_selection = 0; tmp_oba = object; for (i=0; i natomes; j++) { doit = FALSE; if (this_proj -> atoms[0][j].pick[0]) { k = this_proj -> atoms[0][j].sp; switch (filter) { case 0: if (k == i) doit = TRUE; break; case 1: if (this_proj -> atoms[0][j].numv == i) doit = TRUE; break; case 2: l = this_proj -> atoms[0][j].coord[1]; for (m=0;m coord -> ntg[1][m]; if (l == i) doit = TRUE; break; default: if (this_proj -> atoms[0][j].coord[filter-1] == i) doit = TRUE; break; } if (doit) { asearch -> todo[j] = 1; if (this_proj -> modelgl -> atom_win -> to_be_inserted[3] == NULL) { this_proj -> modelgl -> atom_win -> to_be_inserted[3] = duplicate_atomic_object (tmp_oba); tmp_obb = this_proj -> modelgl -> atom_win -> to_be_inserted[3]; } else { tmp_obb -> next = duplicate_atomic_object (tmp_oba); tmp_obb -> next -> prev = tmp_obb; tmp_obb = tmp_obb -> next; } tmp_obb -> id = j; asearch -> in_selection ++; } } } if (tmp_oba -> next != NULL) tmp_oba = tmp_oba -> next; } } if (passivate_todo) g_free (passivate_todo); apply_action (this_proj, asearch); } atomes_1.3.1/src/opengl/edit/cell_extra.c0000664000175000017500000001003115212624223017766 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cell_extra.c * @short Functions to create the 'add cell(s)' tab in the cell edition window * @author Sébastien Le Roux */ /* * This file: 'cell_extra.c' * * Contains: * - The functions to create the 'add cell(s)' tab in the cell edition window * * List of functions: G_MODULE_EXPORT void add_cell (GtkSpinButton * res, gpointer data); GtkWidget * add_extra_cell_tab (glwin * view); */ #include "cell_edit.h" /*! \fn G_MODULE_EXPORT void add_cell (GtkSpinButton * res, gpointer data) \brief add cell callback \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_cell (GtkSpinButton * res, gpointer data) { tint * dat = (tint *)data; int i; project * this_proj = get_project_by_id (dat -> a); image * last = this_proj -> modelgl -> anim -> last -> img; i = max(last -> abc -> extra_cell[0], last -> abc -> extra_cell[1]); i = max(i, last -> abc -> extra_cell[2]); last -> p_depth /= (i+1); last -> abc -> extra_cell[dat -> b] = gtk_spin_button_get_value_as_int(res) - 1; i = max(last -> abc -> extra_cell[0], last -> abc -> extra_cell[1]); i = max(i, last -> abc -> extra_cell[2]); last -> p_depth *= (i+1); double fact = last -> p_depth*2.0 / last -> gfar; last -> gfar = last -> p_depth*2.0; last -> gnear *= fact; last -> zoom *= fact; init_default_shaders (this_proj -> modelgl); this_proj -> modelgl -> create_shaders[MDBOX] = TRUE; this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; if (this_proj -> modelgl -> n_shaders[SLABS][0]) this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); sens_superbut (this_proj); } /*! \fn GtkWidget * add_extra_cell_tab (glwin * view) \brief create the add cell(s) tab \param view the target glwin */ GtkWidget * add_extra_cell_tab (glwin * view) { GtkWidget * layout = create_layout (350, 150); GtkWidget * hbox = create_hbox (50); GtkWidget * vbox = create_vbox (BSEP); layout_add_widget (layout, hbox, 50, 50); int i; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("\tAdd extra cell(s):"), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); GtkWidget * hhbox; gchar * str; for (i=0; i<3; i++) { hhbox = create_hbox (0); view -> cell_win -> ax_cell[i] = spin_button (G_CALLBACK(add_cell), view -> anim -> last -> img -> abc -> extra_cell[i]+1, 1, 1000, 1, 0, 100, & view -> colorp[i][0]); str = g_strdup_printf ("%s x ", box_prop[0][i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, view -> cell_win -> ax_cell[i], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hhbox, FALSE, FALSE, 5); } vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbox, FALSE, FALSE, 50); view -> cell_win -> superbut = create_button (_("Create super-cell"), IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(super_cell_but), view); sens_superbut (get_project_by_id(view -> proj)); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, view -> cell_win -> superbut, FALSE, FALSE, 90); show_the_widgets (layout); return layout; } atomes_1.3.1/src/opengl/edit/atom_edit.h0000664000175000017500000002272215212624223017630 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_edit.h * @short Function declarations for the mode edition window * @author Sébastien Le Roux */ /* * This header file: 'atom_edit.h' * * Contains: - Function declarations for the mode edition window */ #include "global.h" #include "bind.h" #include "callbacks.h" #include "interface.h" #include "initcoord.h" #include "glview.h" #include "glwindow.h" #include "project.h" #include "workspace.h" #ifndef ATOM_EDIT_H_ #define ATOM_EDIT_H_ #define IDCOL 0 #define TOLAB 3 #define TOPIC 4 extern GtkWidget * selection_tab (atom_search * asearch, int nats); extern G_MODULE_EXPORT void set_show_axis_toggle (GtkToggleButton * but, gpointer data); extern void save_rotation_quaternion (glwin * view); extern void center_molecule (project * this_proj); extern vec3_t get_arc_ball_vector (glwin * view, int x, int y); extern void update_search_tree (atom_search * asearch); extern int selected_aspec; extern int is_selected; extern chemical_data * alloc_chem_data (int spec); extern void setup_image_spec_data (project * this_proj, image * img); extern void free_glwin_spec_data (project * this_proj, int spec); extern void glwin_init_spec_data (project * this_proj, int nspec); extern void prepare_opengl_menu_bar (glwin * view); extern gboolean test_vol (double box[2][3], double vect[3][3]); extern GtkTreeModel * replace_combo_tree (gboolean insert, int proj); extern int get_selected_object_id (gboolean visible, int p, gchar * str, atom_search * asearch); extern int get_atom_id_from_periodic_table (atom_search * asearch); extern G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data); extern insertion_menu mol[]; extern atom_search * remove_search; extern GtkWidget * coord_menu (glwin * view); extern GtkWidget * advanced_coord_properties (glwin * view, int page); extern GtkWidget * create_cell_edition_window (project * this_proj, gpointer data); extern G_MODULE_EXPORT void window_spinner (GtkWidget * widg, gpointer data); extern gchar * mot[2][2]; extern gboolean in_bond (int at, int bd[2]); extern int being_copied; extern atomic_object * lib_object; extern float limit[2]; extern gchar * action_name[5]; extern gchar * action_atoms[3]; extern void check_all_trees (project * this_proj); extern atomic_object * get_atomic_object_by_origin (atomic_object * first, int oid, int aid); extern void adjust_object_to_move (project * this_proj, atom_search * asearch, int mv, int id); extern void motion_to_zero (atom_search * asearch); extern int get_asearch_num_objects (atom_search * asearch); extern int get_asearch_object (atom_search * asearch); extern int get_asearch_filter (atom_search * asearch); extern int get_todo_size (atom_search * asearch); extern void allocate_todo (atom_search * asearch, int tsize); extern void clean_todo (atom_search * asearch); extern void clean_picked_and_labelled (atom_search * asearch, gboolean clean_msd); extern void adjust_search_param (atom_search * asearch, project * this_proj, int a, int s, int c, gboolean status); extern void re_populate_tree_search (atom_search * asearch); extern G_MODULE_EXPORT void set_search_mode (GtkComboBox * box, gpointer data); extern G_MODULE_EXPORT void set_object_changed (GtkComboBox * box, gpointer data); extern G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data); extern G_MODULE_EXPORT void set_spec_changed (GtkComboBox * box, gpointer data); extern void add_bonds_to_list (int ** new_bond_list, int nat, int nbd, atomic_object * object); extern void add_bonds_to_project (project * this_proj, int removed, int nbd, int ** new_bond_list); extern gboolean * remove_bonds_from_project (project * this_proj, atomic_object * this_object, int * old_id, atom * new_list, gboolean remove, gboolean passivate); #ifdef GTK4 extern G_MODULE_EXPORT void set_reset_transformation (GtkCheckButton * but, gpointer data); #else extern G_MODULE_EXPORT void set_reset_transformation (GtkToggleButton * but, gpointer data); #endif extern void to_remove_this_list_of_objects (project * this_proj, atom_search * asearch); extern void to_passivate_using_the_objects (project * this_proj, atom_search * asearch); extern tint ulam_coord (glwin * view); extern void correct_pos_and_get_dim (atomic_object * object, gboolean adjust); extern atomic_object * duplicate_atomic_object (atomic_object * old_obj); extern atomic_object * create_object_from_species (project * this_proj, int sid, atom_search * remove); extern void reconstruct_bonds (project * this_proj, int ifcl, int * bcid); extern void reconstruct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord); extern atomic_object * create_object_from_selection (project * this_proj); extern atomic_object * create_object_from_atom_coordination (project * this_proj, int coord, int aid, atom_search * remove); extern atomic_object * create_object_from_overall_coordination (project * this_proj, int coord, int aid, atom_search * remove); extern atomic_object * create_object_from_frag_mol (project * this_proj, int coord, int geo, atom_search * remove); extern void create_object_from_library (int p); extern int create_object_from_open_project (project * this_proj, int p); extern void clean_this_object (int orig, int act, project * this_proj, atom_search * asearch); extern void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible); extern int insert_this_project_from_lib (int id, gboolean visible, project * this_proj, atom_search * asearch); extern G_MODULE_EXPORT void set_atoms_to_insert (GtkComboBox * box, gpointer data); extern void clean_other_window_after_edit (project * this_proj); extern void clean_coord_window (project * this_proj); extern GtkWidget * create_atom_notebook (project * this_proj, GtkWidget * vbox); extern double ** save_coordinates (project * this_proj, int status); extern void reset_coordinates (project * this_proj, int status); extern vec3_t get_bary (project * this_proj, int status); extern void init_coordinates (project * this_proj, int status, gboolean win, gboolean init); extern void translate (project * this_proj, int status, int axis, vec3_t trans); extern void rotate_quat (project * this_proj, vec4_t q, int status, int axis); extern void rotate (project * this_proj, int i, int j, int k, float param); extern void random_move (project * this_proj, atom_search * asearch); extern void update_coordinates (project * this_proj, int status, int axis, int action); extern G_MODULE_EXPORT void repeat_move (GtkSpinButton * res, gpointer data); #ifdef GTK4 extern G_MODULE_EXPORT void to_set_move (GtkEditable * widg, gpointer data); #else extern G_MODULE_EXPORT gboolean to_set_move (GtkWidget * widg, GdkEventFocus * event, gpointer data); #endif extern G_MODULE_EXPORT void set_move (GtkEntry * res, gpointer data); extern void range_has_changed (gpointer data, double v); extern void update_range_and_entry (project * this_proj, int i, int j, int k); extern G_MODULE_EXPORT gboolean scroll_range_move (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); extern G_MODULE_EXPORT void range_move (GtkRange * range, gpointer data); extern void check_motion_interactors (project * this_proj, atom_search * asearch); extern GtkWidget * add_motion_interaction (atom_search * asearch, int axd, project * this_proj); extern void apply_action (project * this_proj, atom_search * asearch); extern void clean_all_trees (atom_search * asearch, project * this_proj); extern gboolean do_we_have_objects_in_selection (project * this_proj, atom_search * asearch, gboolean editing); extern G_MODULE_EXPORT void take_action (GtkButton * but, gpointer data); extern GtkWidget * action_tab (int aid, project * this_proj); extern int find_this_geo_id (int id, coord_info * obj, int * old_z, int old_geo, int old_sp, int new_sp, coord_info * coord, double * new_z); extern void check_coord_modification (project * this_proj, int old_id[], atom * new_list, atomic_object * this_object, gboolean movtion, gboolean passivating); extern void print_coord_info (project * this_proj, coord_info * coord); extern coord_info * duplicate_coord_info (coord_info * old_coord); extern void recover_opengl_data (project * this_proj, int nmols, int add, int rem, int * num, int * rec, int *** tmpgeo, gboolean * showfrag); extern chemical_data * duplicate_chemical_data (int spec, chemical_data * chem); extern int find_spec_id (int s, int z, double * list_z); extern int search_for_new_spec (atom_edition * edit, atomic_object * object); extern void prepare_atom_edition (gpointer data, gboolean visible); #ifdef GTK4 G_MODULE_EXPORT void action_window (GSimpleAction * action, GVariant * parameter, gpointer data); #else G_MODULE_EXPORT void action_window (GtkWidget * widg, gpointer data); #endif G_MODULE_EXPORT void close_build (GtkWidget * widg, gpointer data); #endif atomes_1.3.1/src/opengl/edit/atom_move.c0000664000175000017500000012066715212624223017653 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_move.c * @short Functions to move atom(s) and group of atom(s) \n Functions to move randomly atom(s) and group of atom(s) \n Functions to create the motion widgets of the model edition window * @author Sébastien Le Roux */ /* * This file: 'atom_move.c' * * Contains: * - The functions to move atom(s) and group of atom(s) - The functions to move randomly atom(s) and group of atom(s) - The functions to create the motion widgets of the model edition window * * List of functions: float get_limit (int mot, glwin * view); double ** save_coordinates (project * this_proj, int status); gboolean rebuild_selection (project * this_proj, atom_search * asearch, int filter); gboolean random_move_objects (project * this_proj, atom_search * asearch, int numo, int filter, int obj); gboolean move_objects (project * this_proj, atom_search * asearch, int action, int axis, vec3_t trans, float ang); G_MODULE_EXPORT gboolean scroll_range_move (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void reset_coordinates (project * this_proj, int status); void init_coordinates (project * this_proj, int status, gboolean win, gboolean init); void translate (project * this_proj, int status, int axis, vec3_t trans); void rotate_quat (project * this_proj, vec4_t q, int status, int axis); void rotate (project * this_proj, int status, int axis, int raxis, float param); void random_move_this_atom (project * this_proj, int aid); void random_rotate_this_object (project * this_proj, atomic_object * object, double ratio, double msd); void random_translate_this_object (project * this_proj, atomic_object * object, double ratio, double msd); void random_move_this_object (project * this_proj, atomic_object * object, int move, double msd); void trigger_refresh (project * this_proj, atom_search * asearch); void random_move (project * this_proj, atom_search * asearch); void translate_this_atom (project * this_proj, int aid, int axis, vec3_t trans); void translate_this_object (project * this_proj, atomic_object * object, int axis, vec3_t trans); void rotate_this_object (project * this_proj, atomic_object * object, int axis, int rax, float ang); void move_selection (project * this_proj, int action, int axis, vec3_t trans, float ang); void update_coordinates (project * this_proj, int status, int axis, int action); void update_range_and_entry (project * this_proj, int i, int j, int k); void range_has_changed (gpointer data, double v); void check_motion_interactors (project * this_proj, atom_search * asearch); G_MODULE_EXPORT void repeat_move (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_move (GtkEntry * res, gpointer data); G_MODULE_EXPORT void range_move (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_axis_for_motion (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_show_motion_axis (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_show_motion_axis (GtkToggleButton * but, gpointer data); GtkWidget * create_axis_entries (atom_search * asearch, project * this_proj, int mot, int axd); GtkWidget * add_motion_interaction (atom_search * asearch, int axd, project * this_proj); */ #include "atom_edit.h" gboolean * was_moved_atom; /*! \fn double ** save_coordinates (project * this_proj, int status) \brief save atomic coordinates \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) */ double ** save_coordinates (project * this_proj, int status) { int i, j; i = 0; if (status > 1) { i = this_proj -> natomes; } else { for (j=0; j natomes; j++) { if (this_proj -> atoms[0][j].pick[0] == status) i++; } } if (i == 0) return NULL; double ** coords = allocddouble (i, 3); i = 0; if (status > 1) { for (i=0; i natomes; i++) { coords[i][0] = this_proj -> atoms[0][i].x; coords[i][1] = this_proj -> atoms[0][i].y; coords[i][2] = this_proj -> atoms[0][i].z; } } else { for (j=0; j natomes; j++) { if (this_proj -> atoms[0][j].pick[0] == status) { coords[i][0] = this_proj -> atoms[0][j].x; coords[i][1] = this_proj -> atoms[0][j].y; coords[i][2] = this_proj -> atoms[0][j].z; i ++; } } } return coords; } /*! \fn void reset_coordinates (project * this_proj, int status) \brief reset transformation and restore saved atomic coordinates \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) */ void reset_coordinates (project * this_proj, int status) { int i, j; i = 0; if (this_proj -> modelgl -> saved_coord[status] != NULL) { for (j=0; j natomes; j++) { if (this_proj -> atoms[0][j].pick[0] == status || status > 1) { this_proj -> atoms[0][j].x = this_proj -> modelgl -> saved_coord[status][i][0]; this_proj -> atoms[0][j].y = this_proj -> modelgl -> saved_coord[status][i][1]; this_proj -> atoms[0][j].z = this_proj -> modelgl -> saved_coord[status][i][2]; i ++; } } } } /*! \fn vec3_t get_bary (project * this_proj, int status) \brief get barycenter of atomic coordinates \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) */ vec3_t get_bary (project * this_proj, int status) { vec3_t bar = vec3(0.0,0.0,0.0); int j; float i = 0.0; for (j=0; j natomes; j++) { if (this_proj -> atoms[0][j].pick[0] == status || status == 2) { i += 1.0; bar = v3_add (bar, vec3(this_proj -> atoms[0][j].x, this_proj -> atoms[0][j].y, this_proj -> atoms[0][j].z)); } } if (i > 0.0) bar = v3_divs (bar, i); return bar; } /*! \fn void init_coordinates (project * this_proj, int status, gboolean win, gboolean init) \brief preserve atomic coordinates \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) \param win is the model edition window opened ? \param init preserve atomic coordinates */ void init_coordinates (project * this_proj, int status, gboolean win, gboolean init) { if (win) { int i, j; for (i=0; i<2; i++) { for (j=0; j<6; j++) { this_proj -> modelgl -> atom_win -> new_param[status][i][j] = this_proj -> modelgl -> edition_param[status][i][j]; this_proj -> modelgl -> atom_win -> old_param[status][i][j] = this_proj -> modelgl -> edition_param[status][i][j]; } } this_proj -> modelgl -> atom_win -> axis[status] = 1; this_proj -> modelgl -> atom_win -> show_axis[status] = FALSE; } this_proj -> modelgl -> baryc[status] = get_bary (this_proj, status); if (init) { this_proj -> modelgl -> saved_coord[status] = save_coordinates (this_proj, status); } } /*! \fn void translate (project * this_proj, int status, int axis, vec3_t trans) \brief translate \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) \param axis 0 = model, 1 = eye \param trans translation vector */ void translate (project * this_proj, int status, int axis, vec3_t trans) { int i, j; vec3_t c_old, c_new; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (this_proj -> atoms[i][j].pick[0] == status || status < 0) { c_old = vec3(this_proj -> atoms[i][j].x, this_proj -> atoms[i][j].y, this_proj -> atoms[i][j].z); if (axis) { c_new = m4_mul_pos (this_proj -> modelgl -> view_matrix, c_old); c_old = v3_add (c_new, trans); c_new = m4_mul_pos (this_proj -> modelgl -> un_view_matrix, c_old); } else { c_new = v3_add (c_old, trans); } this_proj -> atoms[i][j].x = c_new.x; this_proj -> atoms[i][j].y = c_new.y; this_proj -> atoms[i][j].z = c_new.z; } } } } /*! \fn void rotate_quat (project * this_proj, vec4_t q, int status, int axis) \brief rotate using quaternion \param this_proj the target project \param q rotation quaternion \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) \param axis 0 = model, 1 = eye */ void rotate_quat (project * this_proj, vec4_t q, int status, int axis) { int j; mat4_t rot = m4_quat_rotation (q); vec3_t c_old, c_new; for (j=0; j natomes; j++) { if (this_proj -> atoms[0][j].pick[0] == status) { c_old = vec3(this_proj -> atoms[0][j].x, this_proj -> atoms[0][j].y, this_proj -> atoms[0][j].z); c_new = v3_sub(c_old, this_proj -> modelgl -> baryc[status]); if (axis) { c_old = m4_mul_pos (this_proj -> modelgl -> view_matrix, c_new); c_new = m4_mul_pos (rot, c_old); c_old = m4_mul_pos (this_proj -> modelgl -> un_view_matrix, c_new); } else { c_old = m4_mul_pos (rot, c_new); } c_new = v3_add (c_old, this_proj -> modelgl -> baryc[status]); this_proj -> atoms[0][j].x = c_new.x; this_proj -> atoms[0][j].y = c_new.y; this_proj -> atoms[0][j].z = c_new.z; } } } /*! \fn void rotate (project * this_proj, int status, int axis, int raxis, float param) \brief rotate \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) \param axis 0 = model, 1 = eye \param raxis rotation axis 0 = x, 1 = y, 2 = z \param param rotation angle */ void rotate (project * this_proj, int status, int axis, int raxis, float param) { vec4_t qr; vec3_t ax[3]; ax[0] = vec3(1.0,0.0,0.0); ax[1] = vec3(0.0,1.0,0.0); ax[2] = vec3(0.0,0.0,1.0); qr = axis_to_quat(ax[raxis-3], param*pi/90.0); rotate_quat (this_proj, qr, status, axis); } /*! \fn void random_move_this_atom (project * this_proj, int aid) \brief random move atom \param this_proj the target project \param aid the atom id */ void random_move_this_atom (project * this_proj, int aid) { int i, j, k, l; // Using CPU time to randomize clock_t begin = clock(); double prob; i = (int)begin; for (j=0; j<3; j++) { k = (j+1)*i*aid*(3*(this_proj -> id+27)); prob= random3_(& k); k *= k; l = (prob <= 0.5) ? 1 : -1; prob = random3_(& k); switch (j) { case 0: this_proj -> atoms[0][aid].x += l*prob*sqrt(this_proj -> modelgl -> atom_win -> msd[aid]/3.0); break; case 1: this_proj -> atoms[0][aid].y += l*prob*sqrt(this_proj -> modelgl -> atom_win -> msd[aid]/3.0); break; case 2: this_proj -> atoms[0][aid].z += l*prob*sqrt(this_proj -> modelgl -> atom_win -> msd[aid]/3.0); break; } } } /*! \fn void random_rotate_this_object (project * this_proj, atomic_object * object, double ratio, double msd) \brief random rotate an object \param this_proj the target project \param object the object to rotate \param ratio ratio translation / rotation \param msd the MSD */ void random_rotate_this_object (project * this_proj, atomic_object * object, double ratio, double msd) { int i, j, k, l, m, n; vec3_t c_new, c_old; vec3_t ax[3]; ax[0] = vec3(1.0,0.0,0.0); ax[1] = vec3(0.0,1.0,0.0); ax[2] = vec3(0.0,0.0,1.0); vec3_t baryc = vec3(object -> baryc[0], object -> baryc[1], object -> baryc[2]); vec4_t qr; mat4_t rot; // Using CPU time to randomize clock_t begin = clock(); double prob; i = (int)begin; for (j=0; j<3; j++) { k = (j+1)*i*(3*(this_proj -> id+27)); prob=random3_(& k); k *= k; l = (prob <= 0.5) ? 1 : -1; prob = random3_(& k); qr = axis_to_quat(ax[j], l*prob*sqrt(ratio*msd/3.0)*pi/90.0); rot = m4_quat_rotation (qr); for (m=0; m atoms; m++) { n = object -> at_list[m].id; if (! was_moved_atom[n]) { c_old = vec3(object -> at_list[m].x, object -> at_list[m].y, object -> at_list[m].z); c_new = m4_mul_pos (rot, c_old); object -> at_list[m].x = c_new.x; object -> at_list[m].y = c_new.y; object -> at_list[m].z = c_new.z; c_old = v3_add (c_new, baryc); this_proj -> atoms[0][n].x = c_old.x; this_proj -> atoms[0][n].y = c_old.y; this_proj -> atoms[0][n].z = c_old.z; } } } } /*! \fn void random_translate_this_object (project * this_proj, atomic_object * object, double ratio, double msd) \brief random translate an object \param this_proj the target project \param object the object to translate \param ratio ratio translation / rotation \param msd the MSD */ void random_translate_this_object (project * this_proj, atomic_object * object, double ratio, double msd) { int i, j, k, l, m, n; // Using CPU time to randomize clock_t begin = clock(); double prob; i = (int)begin; for (j=0; j<3; j++) { k = (j+1)*i*(3*(this_proj -> id+27)); prob=random3_(& k); k *= k; l = (prob <= 0.5) ? 1 : -1; prob = l*random3_(& k)*sqrt(ratio*msd/3.0); switch (j) { case 0: for (m=0; m atoms; m++) { n = object -> at_list[m].id; if (! was_moved_atom[n]) this_proj -> atoms[0][n].x += prob; } break; case 1: for (m=0; m atoms; m++) { n = object -> at_list[m].id; if (! was_moved_atom[n]) this_proj -> atoms[0][n].y += prob; } break; case 2: for (m=0; m atoms; m++) { n = object -> at_list[m].id; if (! was_moved_atom[n]) this_proj -> atoms[0][n].z += prob; } break; } object -> baryc[j] += prob; } } /*! \fn void random_move_this_object (project * this_proj, atomic_object * object, int move, double msd) \brief random move object \param this_proj the target project \param object the object to move \param move the number of times to repeat the motion \param msd the MSD */ void random_move_this_object (project * this_proj, atomic_object * object, int move, double msd) { int i, j; // Using CPU time to randomize clock_t begin = clock(); double prob; i = (int)begin; switch (move) { case 1: random_translate_this_object (this_proj, object, 1.0, msd); break; case 2: random_rotate_this_object (this_proj, object, 1.0, msd); break; case 3: j = object -> species*i*object -> atoms*(3*(this_proj -> id+27)); prob = random3_(& j); random_translate_this_object (this_proj, object, prob, msd); random_rotate_this_object (this_proj, object, 1.0-prob, msd); break; } } /*! \fn void trigger_refresh (project * this_proj, atom_search * asearch) \brief refresh search tree model \param this_proj the target project \param asearch the target atom search */ void trigger_refresh (project * this_proj, atom_search * asearch) { clean_all_trees (asearch, this_proj); this_proj -> modelgl -> atom_win -> rebuilt[(asearch -> action == DISPL) ? 0 : 1] = TRUE; update_search_tree (this_proj -> modelgl -> search_widg[(asearch -> action == DISPL) ? 6 : 2]); check_all_trees (this_proj); } /*! \fn gboolean rebuild_selection (project * this_proj, atom_search * asearch, int filter) \brief rebuild selection (split fragments linked thru PBC) \param this_proj the target project \param asearch the target atom search \param filter the filter (0 = species, 1 = partial coord, 2 = total coord, 3 = fragment, 4 = molecule) */ gboolean rebuild_selection (project * this_proj, atom_search * asearch, int filter) { int i, j, k, l; gboolean was_frag = this_proj -> modelgl -> adv_bonding[0]; gboolean was_mol = this_proj -> modelgl -> adv_bonding[1]; gboolean recons = FALSE; int old_frag = this_proj -> coord -> totcoord[2]; i = (asearch -> action == DISPL) ? 0 : 1; if (asearch -> object && this_proj -> modelgl -> rebuild[0][i]) { int * saved_todo = duplicate_int (asearch -> todo_size, asearch -> todo); int old_tds = asearch -> todo_size; g_free (asearch -> todo); allocate_todo (asearch, this_proj -> natomes); j = 0; int * oifcl = NULL; atomic_object * object = this_proj -> modelgl -> atom_win -> to_be_moved[i]; while (object) { j += object -> ifcl; object = object -> next; } if (j) { object = this_proj -> modelgl -> atom_win -> to_be_moved[i]; oifcl = allocint (j); l = 0; while (object) { for (k=0; k ifcl; k++) { oifcl[l] = object -> bcid[k]; l ++; } object = object -> next; } } if (j) { reconstruct_bonds (this_proj, j, oifcl); g_free (oifcl); oifcl = NULL; } object = this_proj -> modelgl -> atom_win -> to_be_moved[i]; while (object) { if (object -> ifcl) reconstruct_coordinates_for_object (this_proj, object, TRUE); if (filter < 3) { recons = TRUE; for (j=0; j atoms; j++) { k = object -> at_list[j].id; asearch -> todo[k] = 1; } } object = object -> next; } if (recons) { apply_action (this_proj, asearch); trigger_refresh (this_proj, asearch); } g_free (asearch -> todo); asearch -> todo = duplicate_int (old_tds, saved_todo); asearch -> todo_size = old_tds; g_free (saved_todo); } if ((was_frag && ! this_proj -> modelgl -> adv_bonding[0]) || (was_mol && ! this_proj -> modelgl -> adv_bonding[1])) { return TRUE; } else if (old_frag != this_proj -> coord -> totcoord[2]) { return TRUE; } else { return FALSE; } } /*! \fn gboolean random_move_objects (project * this_proj, atom_search * asearch, int numo, int filter, int obj) \brief random move object(s) \param this_proj the target project \param asearch the target atom search \param numo the number of object(s) to move \param filter the filter (0 = species, 1 = partial coord, 2 = total coord, 3 = fragment, 4 = molecule) \param obj the object (0 = atom(s), 1 = group of atoms) */ gboolean random_move_objects (project * this_proj, atom_search * asearch, int numo, int filter, int obj) { atomic_object * object = this_proj -> modelgl -> atom_win -> to_be_moved[1]; float v; int i, j, k; gboolean recons = FALSE; if (! this_proj -> modelgl -> atom_win -> rebuilt[1]) { recons = rebuild_selection (this_proj, asearch, filter); } was_moved_atom = allocbool (this_proj -> natomes); for (i=0; i todo[i] && object) { v = (obj && filter > 2) ? this_proj -> modelgl -> atom_win -> msd_all[i] : this_proj -> modelgl -> atom_win -> msd[i]; if (v > 0.0) { for (j=0; j modelgl -> atom_win -> repeat_move; j++) { random_move_this_object (this_proj, object, asearch -> todo[i], v); } for (j=0; j atoms; j++) { k = object -> at_list[j].id; was_moved_atom[k] = TRUE; } } object = object -> next; } } g_free (was_moved_atom); return recons; } /*! \fn void random_move (project * this_proj, atom_search * asearch) \brief random move \param this_proj the target project \param asearch the target atom search */ void random_move (project * this_proj, atom_search * asearch) { int obj = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); int i, j; gboolean recons = FALSE; if (this_proj -> modelgl -> atom_win -> to_be_moved[1]) { recons = random_move_objects (this_proj, asearch, asearch -> todo_size, filter, obj); } else { if (this_proj -> modelgl -> rebuild[0][1] && ! this_proj -> modelgl -> atom_win -> rebuilt[1]) { apply_action (this_proj, asearch); recons = TRUE; } for (i=0; i todo_size; i++) { if (asearch -> todo[i] && this_proj -> modelgl -> atom_win -> msd[i] > 0.0) { for (j=0; j modelgl -> atom_win -> repeat_move; j++) random_move_this_atom (this_proj, i); } } } if (asearch -> recompute_bonding) { i = activep; active_project_changed (activep); bonds_update = 1; frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; active_project -> runc[0] = FALSE; on_calc_bonds_released (NULL, NULL); active_project_changed (i); recons = TRUE; } this_proj -> modelgl -> was_moved = TRUE; init_default_shaders (this_proj -> modelgl); #ifdef GTK3 // GTK3 Menu Action To Check set_advanced_bonding_menus (this_proj -> modelgl); #endif if (recons) trigger_refresh (this_proj, asearch); } /*! \fn void translate_this_atom (project * this_proj, int aid, int axis, vec3_t trans) \brief translate atom \param this_proj the target project \param aid atom id \param axis 0 = model, 1 = eye \param trans translation vector */ void translate_this_atom (project * this_proj, int aid, int axis, vec3_t trans) { vec3_t c_old, c_new; c_old = vec3(this_proj -> atoms[0][aid].x, this_proj -> atoms[0][aid].y, this_proj -> atoms[0][aid].z); if (axis) { c_new = m4_mul_pos (this_proj -> modelgl -> view_matrix, c_old); c_old = v3_add (c_new, trans); c_new = m4_mul_pos (this_proj -> modelgl -> un_view_matrix, c_old); } else { c_new = v3_add (c_old, trans); } this_proj -> atoms[0][aid].x = c_new.x; this_proj -> atoms[0][aid].y = c_new.y; this_proj -> atoms[0][aid].z = c_new.z; } /*! \fn void translate_this_object (project * this_proj, atomic_object * object, int axis, vec3_t trans) \brief translate object \param this_proj the target project \param object the object to translate \param axis 0 = model, 1 = eye \param trans the translation vector */ void translate_this_object (project * this_proj, atomic_object * object, int axis, vec3_t trans) { int i, j; vec3_t c_old, c_new; c_old = vec3(object -> baryc[0], object -> baryc[1], object -> baryc[2]); if (axis) { c_new = m4_mul_pos (this_proj -> modelgl -> view_matrix, c_old); c_old = v3_add (c_new, trans); c_new = m4_mul_pos (this_proj -> modelgl -> un_view_matrix, c_old); } else { c_new = v3_add (c_old, trans); } object -> baryc[0] = c_new.x; object -> baryc[1] = c_new.y; object -> baryc[2] = c_new.z; for (i=0; i atoms; i++) { j = object -> at_list[i].id; if (! was_moved_atom[j]) { was_moved_atom[j] = TRUE; this_proj -> atoms[0][j].x = object -> baryc[0] + object -> at_list[i].x; this_proj -> atoms[0][j].y = object -> baryc[1] + object -> at_list[i].y; this_proj -> atoms[0][j].z = object -> baryc[2] + object -> at_list[i].z; } } } /*! \fn void rotate_this_object (project * this_proj, atomic_object * object, int axis, int rax, float ang) \brief rotate object \param this_proj the target project \param object the object to rotate \param axis 0 = model, 1 = eye \param rax the rotation axis \param ang the rotation angle */ void rotate_this_object (project * this_proj, atomic_object * object, int axis, int rax, float ang) { int i, j; vec3_t c_new, c_old; vec3_t baryc = vec3(object -> baryc[0], object -> baryc[1], object -> baryc[2]); vec3_t ax[3]; ax[0] = vec3(1.0,0.0,0.0); ax[1] = vec3(0.0,1.0,0.0); ax[2] = vec3(0.0,0.0,1.0); vec4_t qr; mat4_t rot; qr = axis_to_quat(ax[rax], ang*pi/180.0); rot = m4_quat_rotation (qr); for (i=0; i atoms; i++) { j = object -> at_list[i].id; if (! was_moved_atom[j]) { c_old = vec3(object -> at_list[i].x, object -> at_list[i].y, object -> at_list[i].z); if (axis) { c_new = m4_mul_pos (this_proj -> modelgl -> view_matrix, c_old); c_old = m4_mul_pos (rot, c_new); c_new = m4_mul_pos (this_proj -> modelgl -> un_view_matrix, c_old); } else { c_new = m4_mul_pos (rot, c_old); } object -> at_list[i].x = c_new.x; object -> at_list[i].y = c_new.y; object -> at_list[i].z = c_new.z; c_old = v3_add (c_new, baryc); this_proj -> atoms[0][j].x = c_old.x; this_proj -> atoms[0][j].y = c_old.y; this_proj -> atoms[0][j].z = c_old.z; was_moved_atom[j] = TRUE; } } } /*! \fn gboolean move_objects (project * this_proj, atom_search * asearch, int action, int axis, vec3_t trans, float ang) \brief move objects, return reconstruction status \param this_proj the target project \param asearch the target atom search \param action 0 = translation, 1 = rotation \param axis 0 = model, 1 = eye \param trans the translation vector, if any \param ang the rotation angle, if any */ gboolean move_objects (project * this_proj, atom_search * asearch, int action, int axis, vec3_t trans, float ang) { gboolean recons = FALSE; if (this_proj -> modelgl -> rebuild[0][0] && ! this_proj -> modelgl -> atom_win -> rebuilt[0]) { recons = rebuild_selection (this_proj, asearch, get_asearch_filter(asearch)); } atomic_object * object = this_proj -> modelgl -> atom_win -> to_be_moved[0]; was_moved_atom = allocbool (this_proj -> natomes); int i, j; while (object) { if (action < 3) { translate_this_object (this_proj, object, axis, trans); } else { rotate_this_object (this_proj, object, axis, action-3, ang); } for (i=0; i atoms; i++) { j = object -> at_list[i].id; was_moved_atom[j] = TRUE; } object = object -> next; } g_free (was_moved_atom); return recons; } extern atom_search * duplicate_atom_search (atom_search * asearch); /*! \fn void move_selection (project * this_proj, int action, int axis, vec3_t trans, float ang) \brief move atom selection \param this_proj the target project \param action 0 = translation, 1 = rotation \param axis 0 = model, 1 = eye \param trans the translation vector, if any \param ang the rotation angle, if any */ void move_selection (project * this_proj, int action, int axis, vec3_t trans, float ang) { atom_search * asearch = duplicate_atom_search (this_proj -> modelgl -> search_widg[2]); gboolean recons = FALSE; gboolean move_it = do_we_have_objects_in_selection (this_proj, asearch, TRUE); if (move_it) { int i; if (this_proj -> modelgl -> atom_win -> to_be_moved[0]) { recons = move_objects (this_proj, asearch, action, axis, trans, ang); } else { if (this_proj -> modelgl -> rebuild[0][0] && ! this_proj -> modelgl -> atom_win -> rebuilt[0]) { apply_action (this_proj, asearch); recons = TRUE; } for (i=0; i todo_size; i++) { if (asearch -> todo[i]) { translate_this_atom (this_proj, i, axis, trans); } } } if (asearch -> recompute_bonding) { i = activep; active_project_changed (activep); bonds_update = 1; frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; active_project -> runc[0] = FALSE; on_calc_bonds_released (NULL, NULL); active_project_changed (i); recons = TRUE; } init_default_shaders (this_proj -> modelgl); #ifdef GTK3 // GTK3 Menu Action To Check set_advanced_bonding_menus (this_proj -> modelgl); #endif if (recons) trigger_refresh (this_proj, asearch); } } /*! \fn void update_coordinates (project * this_proj, int status, int axis, int action) \brief update atomic coordinates on motion \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) \param axis axis, 0 = model, 1 = eye \param action 0 = translation, 1 = rotation */ void update_coordinates (project * this_proj, int status, int axis, int action) { vec3_t trans = vec3(this_proj -> modelgl -> atom_win -> new_param[status][axis][0]-this_proj -> modelgl -> atom_win -> old_param[status][axis][0], this_proj -> modelgl -> atom_win -> new_param[status][axis][1]-this_proj -> modelgl -> atom_win -> old_param[status][axis][1], this_proj -> modelgl -> atom_win -> new_param[status][axis][2]-this_proj -> modelgl -> atom_win -> old_param[status][axis][2]); float r = this_proj -> modelgl -> atom_win -> new_param[status][axis][action] - this_proj -> modelgl -> atom_win -> old_param[status][axis][action]; if (v3_length(trans) != 0.0 || r != 0.0) { move_selection (this_proj, action, axis, trans, r); this_proj -> modelgl -> was_moved = TRUE; this_proj -> modelgl -> atom_win -> old_param[status][axis][action] = this_proj -> modelgl -> atom_win -> new_param[status][axis][action]; init_default_shaders (this_proj -> modelgl); update (this_proj -> modelgl); } } /*! \fn G_MODULE_EXPORT void repeat_move (GtkSpinButton * res, gpointer data) \brief repeat motion callback \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void repeat_move (GtkSpinButton * res, gpointer data) { project * this_proj = (project *)data; this_proj -> modelgl -> atom_win -> repeat_move = gtk_spin_button_get_value_as_int(res); } /*! \fn void update_range_and_entry (project * this_proj, int i, int j, int k) \brief update motion range \param this_proj the target project \param i selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) \param j axis, 0 = model, 1 = eye \param k parameter to update: x, y, z or alpha, beta, gamma */ void update_range_and_entry (project * this_proj, int i, int j, int k) { update_entry_double (GTK_ENTRY(this_proj -> modelgl -> atom_win -> edit_entry[k]), this_proj -> modelgl -> atom_win -> new_param[i][j][k]); gtk_range_set_value (GTK_RANGE(this_proj -> modelgl -> atom_win -> edit_scale[k]), this_proj -> modelgl -> atom_win -> new_param[i][j][k]); } /*! \fn float get_limit (int mot, glwin * view) \brief get motion limit \param mot translation (0) or rotation (1) \param view the target glwin */ float get_limit (int mot, glwin * view) { if (! mot) { int plimit = (int)(view -> anim -> last -> img -> p_depth/limit[mot]); return limit[mot] + 2.0*plimit*limit[mot]; } else { return limit[mot]; } } /*! \fn void range_has_changed (gpointer data, double v) \brief motion \param data the associated data pointer \param v the value for motion */ void range_has_changed (gpointer data, double v) { tint * id = (tint *)data; project * this_proj = get_project_by_id(id -> a); int h, i, j, k; h = id -> b - TOLAB; i = (h < 3) ? 0 : 1; j = this_proj -> modelgl -> atom_win -> axis[i]; k = this_proj -> modelgl -> search_widg[id -> c] -> status; if (v != this_proj -> modelgl -> atom_win -> new_param[k][j][h]) { float plim = get_limit (i, this_proj -> modelgl); if (v >= -plim && v <= plim) { this_proj -> modelgl -> atom_win -> new_param[k][j][h] = v; this_proj -> modelgl -> atom_win -> active = i; update_coordinates (this_proj, k, j, h); } update_range_and_entry (this_proj, k, j, h); } } /*! \fn G_MODULE_EXPORT void set_move (GtkEntry * res, gpointer data) \brief motion callback - entry \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_move (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); range_has_changed (data, v); } /*! \fn G_MODULE_EXPORT void range_move (GtkRange * range, gpointer data) \brief motion callback - range \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void range_move (GtkRange * range, gpointer data) { range_has_changed (data, gtk_range_get_value (range)); } /*! \fn G_MODULE_EXPORT gboolean scroll_range_move (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief motion callback - scroll \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_range_move (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { range_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_axis_for_motion (GtkComboBox * box, gpointer data) \brief set motion axis (eye or model) \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_for_motion (GtkComboBox * box, gpointer data) { tint * id = (tint *)data; project * this_proj = get_project_by_id (id -> a); int i, j; j = id -> b - TOLAB; this_proj -> modelgl -> atom_win -> axis[j] = combo_get_active ((GtkWidget *)box); for (i=3*j; i<(j + 1)*3; i++) { update_range_and_entry (this_proj, this_proj -> modelgl -> search_widg[id -> c] -> status, this_proj -> modelgl -> atom_win -> axis[j], i); } this_proj -> modelgl -> atom_win -> active = j; update (this_proj -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_show_motion_axis (GtkCheckButton * but, gpointer data) \brief set show / hide motion axis toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_motion_axis (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_show_motion_axis (GtkToggleButton * but, gpointer data) \brief set show / hide motion axis toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_motion_axis (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *)data; project * this_proj = get_project_by_id (id -> a); int i, j; j = id -> b - TOLAB; i = button_get_status ((GtkWidget *)but); button_set_status (this_proj -> modelgl -> atom_win -> axis_but[! j], i); this_proj -> modelgl -> atom_win -> active = j; this_proj -> modelgl -> atom_win -> show_axis[j] = i; if (i) { this_proj -> modelgl -> anim -> last -> img -> xyz -> axis = CYLINDERS; } else { this_proj -> modelgl -> anim -> last -> img -> xyz -> axis = this_proj -> modelgl -> atom_win -> old_axis; } this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; update (this_proj -> modelgl); } /*! \fn void check_motion_interactors (project * this_proj, atom_search * asearch) \brief add motion check button \param this_proj the target project \param asearch the target atom search */ void check_motion_interactors (project * this_proj, atom_search * asearch) { gboolean activate = do_we_have_objects_in_selection (this_proj, asearch, FALSE); int i; if (this_proj -> modelgl -> atom_win) { for (i=0; i<6; i++) { if (this_proj -> modelgl -> atom_win -> edit_entry[i]) { widget_set_sensitive (this_proj -> modelgl -> atom_win -> edit_entry[i], (((asearch -> object && ! asearch -> passivating ) || (asearch -> object > 1 && asearch -> passivating)) || i < 3) ? activate : 0); } if (this_proj -> modelgl -> atom_win -> edit_scale[i]) { widget_set_sensitive (this_proj -> modelgl -> atom_win -> edit_scale[i], (((asearch -> object && ! asearch -> passivating ) || (asearch -> object > 1 && asearch -> passivating)) || i < 3) ? activate : 0); } } } } /*! \fn GtkWidget * create_axis_entries (atom_search * asearch, project * this_proj, int mot, int axd) \brief create axis entries \param asearch the target atom search \param this_proj the target project \param mot translation (0) or rotation (1) \param axd axis (0 = x, 1 = y, 2 = z) */ GtkWidget * create_axis_entries (atom_search * asearch, project * this_proj, int mot, int axd) { gchar * str; GtkWidget * lab; GtkWidget * hbox; gchar * axis[3]={"x", "y", "z"}; gchar * unit[2]={"Å", "°"}; GtkWidget * vbox = create_vbox (5); int j = mot*3 + axd; float plim = get_limit (mot, this_proj -> modelgl); this_proj -> modelgl -> atom_win -> edit_entry[j] = create_entry (G_CALLBACK(set_move), 100, 15, FALSE, & asearch -> pointer[j]); this_proj -> modelgl -> atom_win -> edit_scale[j] = create_hscale (-plim, plim, 0.001, this_proj -> modelgl -> atom_win -> new_param[asearch -> status][1][j], GTK_POS_TOP, 4, 250, G_CALLBACK(range_move), G_CALLBACK(scroll_range_move), & asearch -> pointer[j]); widget_set_sensitive (this_proj -> modelgl -> atom_win -> edit_entry[j], 0); widget_set_sensitive (this_proj -> modelgl -> atom_win -> edit_scale[j], 0); str = g_strdup_printf (_("On %s axis:"), axis[axd]); lab = markup_label(unit[mot], 20, -1, 0.0, 0.5); update_entry_double (GTK_ENTRY(this_proj -> modelgl -> atom_win -> edit_entry[j]), this_proj -> modelgl -> atom_win -> new_param[asearch -> status][1][j]); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 70, -1, 0.0, 0.5), FALSE, FALSE, 50); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, this_proj -> modelgl -> atom_win -> edit_scale[j], FALSE, FALSE, 0); GtkWidget * fixed = gtk_fixed_new (); gtk_fixed_put (GTK_FIXED(fixed), this_proj -> modelgl -> atom_win -> edit_entry[j], 0, 15); gtk_fixed_put (GTK_FIXED(fixed), lab, 120, 25); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, FALSE, FALSE, 50); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); return vbox; } /*! \fn GtkWidget * add_motion_interaction (atom_search * asearch, int axd, project * this_proj) \brief add motion interaction widgets \param asearch the target atom search \param axd translation (0) or rotation (1) \param this_proj the target project */ GtkWidget * add_motion_interaction (atom_search * asearch, int axd, project * this_proj) { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Select the axis to be used: "), 200, -1, 0.0, 0.5), FALSE, FALSE, 20); this_proj -> modelgl -> atom_win -> axis_combo[axd] = create_combo (); combo_text_append (this_proj -> modelgl -> atom_win -> axis_combo[axd], _("Model axis")); combo_text_append (this_proj -> modelgl -> atom_win -> axis_combo[axd], _("Eye (viewer) axis")); combo_set_active (this_proj -> modelgl -> atom_win -> axis_combo[axd], this_proj -> modelgl -> atom_win -> axis[axd]); g_signal_connect (G_OBJECT (this_proj -> modelgl -> atom_win -> axis_combo[axd]), "changed", G_CALLBACK(set_axis_for_motion), & asearch -> pointer[axd]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, this_proj -> modelgl -> atom_win -> axis_combo[axd], FALSE, FALSE, 20); this_proj -> modelgl -> atom_win -> axis_but[axd] = check_button (_("Show"), 100, 35, FALSE, G_CALLBACK(set_show_motion_axis), & asearch -> pointer[axd]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, this_proj -> modelgl -> atom_win -> axis_but[axd], FALSE, FALSE, 20); int i; for (i=0; i<3; i++) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_axis_entries (asearch, this_proj, axd, i), FALSE, FALSE, 0); } hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 20); //add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, // check_button (_("Reset transformation(s)"), -1, 35, FALSE, G_CALLBACK(set_reset_transformation), & asearch -> pointer[0]), // FALSE, FALSE, 10); return vbox; } atomes_1.3.1/src/opengl/edit/cell_super.c0000664000175000017500000002641115212624223020012 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cell_super.c * @short Functions to create a super-cell using the extra cell(s) * @author Sébastien Le Roux */ /* * This file: 'cell_super.c' * * Contains: * - The functions to create a super-cell using the extra cell(s) * * List of functions: gboolean ** duplicate_geom_info (project * this_proj); gboolean ** duplicate_poly_info (project * this_proj); void restore_coord_and_poly_info (project * proj, coord_info * ocoord, gboolean ** cshow, gboolean ** pshow); void sens_superbut (project * this_proj); void super_celling (glwin * view); G_MODULE_EXPORT void super_cell (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void super_cell (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void super_cell_but (GtkButton * but, gpointer data); */ #include "cell_edit.h" #include "atom_edit.h" extern void clean_coord_window (project * this_proj); extern GtkWidget * cell_tab (int i, project * this_proj); /*! \fn gboolean ** duplicate_geom_info (project * this_proj) \brief duplicate coordinations show status \param this_proj the target project */ gboolean ** duplicate_geom_info (project * this_proj) { int i, j; gboolean ** show = g_malloc0(2*sizeof*show); for (i=0; i<2; i++) { show[i] = allocbool(this_proj -> coord -> totcoord[i]); for (j=0; j coord -> totcoord[i]; j++) { show[i][j] = this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j]; } } return show; } /*! \fn gboolean ** duplicate_poly_info (project * this_proj) \brief duplicate polyhedra show status \param this_proj the target project */ gboolean ** duplicate_poly_info (project * this_proj) { int i, j; gboolean ** show = g_malloc0(2*sizeof*show); for (i=0; i<2; i++) { show[i] = allocbool(this_proj -> coord -> totcoord[i]); for (j=0; j coord -> totcoord[i]; j++) { show[i][j] = this_proj -> modelgl -> anim -> last -> img -> show_poly[i][j]; } } return show; } /*! \fn void restore_coord_and_poly_info (project * proj, coord_info * ocoord, gboolean ** cshow, gboolean ** pshow) \brief restore show status after \param proj the target project \param ocoord the old coordination \param cshow the saved coordination show status \param pshow the saved polyhedra show status */ void restore_coord_and_poly_info (project * proj, coord_info * ocoord, gboolean ** cshow, gboolean ** pshow) { int i, j; gboolean restore = TRUE; for (i=0; i<2; i++) { if (ocoord -> totcoord[i] != active_coord -> totcoord[i]) { restore = FALSE; break; } for (j=0; j< ocoord -> species; j++) { if (ocoord -> ntg[i][j] != active_coord -> ntg[i][j]) { restore = FALSE; break; } } if (! restore) break; } if (restore) { for (i=0; i<2; i++) { for (j=0; j totcoord[i]; j++) { #ifdef GTK3 if (active_glwin -> ogl_geom[0][i][j] != NULL) { if (GTK_IS_WIDGET(active_glwin -> ogl_geom[0][i][j])) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_glwin -> ogl_geom[0][i][j], cshow[i][j]); show_hide_coord (active_glwin -> ogl_geom[0][i][j], & active_glwin -> gcid[i][j][i]); } } if (active_glwin -> ogl_poly[0][i][j] != NULL) { if (GTK_IS_WIDGET(active_glwin -> ogl_poly[0][i][j])) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_glwin -> ogl_poly[0][i][j], pshow[i][j]); show_hide_poly (active_glwin -> ogl_poly[0][i][j], & active_glwin -> gcid[i][j][i]); } } #else active_glwin -> anim -> last -> img -> show_coord[i][j] = cshow[i][j]; if (! cshow[i][j]) { show_hide_coord (NULL, NULL, & active_glwin -> gcid[i][j][i]); } active_glwin -> anim -> last -> img -> show_poly[i][j] = pshow[i][j]; if (pshow[i][j]) { show_hide_poly (NULL, NULL, & active_glwin -> gcid[i][j][i]); } #endif } } } } /*! \fn void sens_superbut (project * this_proj) \brief adjust 'Create super-cell' button sensitivity \param this_proj the target project */ void sens_superbut (project * this_proj) { int i, j; if (this_proj -> modelgl -> record) { i = 0; } else { i = 0; for (j=0; j<3; j++) i += this_proj -> modelgl -> anim -> last -> img -> abc -> extra_cell[j]; } if (this_proj -> modelgl -> cell_win) { widget_set_sensitive (this_proj -> modelgl -> cell_win -> superbut, i); } #ifdef GTK3 // GTK3 Menu Action To Check widget_set_sensitive (this_proj -> modelgl -> ogl_box[5], i); #endif } /*! \fn void super_celling (glwin * view) \brief create super cell \param view the target glwin */ void super_celling (glwin * view) { gchar * txta = i18n("You are about to change the periodicity of the 3D model,"); gchar * txtb = i18n("this will affect the entire molecular dynamics trajectory,"); gchar * txtc = i18n("\tand the action is irreversible, proceed anyway ?"); gchar * str; if (get_project_by_id(view -> proj) -> steps > 1) { str = g_strdup_printf ("%s\n%s\n%s", _(txta), _(txtb), _(txtc)); } else { str = g_strdup_printf ("%s\n%s", _(txta), _(txtc)); } if (ask_yes_no (_("Create a super-cell ?"), str, GTK_MESSAGE_WARNING, view -> win)) { int i, j, k, l; k = activep; image * last = view -> anim -> last -> img; if (k != view -> proj) active_project_changed (view -> proj); preserve_ogl_selection (view); if (add_cells_ (& active_project -> natomes, & active_project -> steps, last -> abc -> extra_cell)) { if (active_cell -> crystal) { vec3_t shift; shift.x = active_box -> vect[0][0] + active_box -> vect[1][0] + active_box -> vect[2][0]; shift.y = active_box -> vect[0][1] + active_box -> vect[1][1] + active_box -> vect[2][1]; shift.z = active_box -> vect[0][2] + active_box -> vect[1][2] + active_box -> vect[2][2]; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { active_project -> atoms[i][j].x += shift.x; active_project -> atoms[i][j].y += shift.y; active_project -> atoms[i][j].z += shift.z; } } } l = 1; for (i=0; i<3; i++) { for (j=0; j<3; j++) { active_box -> vect[i][j] *= (last -> abc -> extra_cell[i] + 1); } l *= (last -> abc -> extra_cell[i] + 1); active_box -> param[0][i] *= (last -> abc -> extra_cell[i] + 1); last -> abc -> extra_cell[i] = 0; if (active_glwin -> cell_win) { if (active_glwin -> cell_win -> ax_cell[i]) { gtk_spin_button_set_value (GTK_SPIN_BUTTON(active_glwin -> cell_win -> ax_cell[i]), 1.0); } } } if (active_cell -> crystal) { vec3_t shift; shift.x = active_box -> vect[0][0] + active_box -> vect[1][0] + active_box -> vect[2][0]; shift.y = active_box -> vect[0][1] + active_box -> vect[1][1] + active_box -> vect[2][1]; shift.z = active_box -> vect[0][2] + active_box -> vect[1][2] + active_box -> vect[2][2]; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { active_project -> atoms[i][j].x -= shift.x/2.0; active_project -> atoms[i][j].y -= shift.y/2.0; active_project -> atoms[i][j].z -= shift.z/2.0; } } } for (i=0; i nspec; i++) { active_chem -> nsps[i] *= l; } init_curves_and_calc (active_project); if (! active_project -> cell.crystal) center_molecule (active_project); active_project_changed (view -> proj); active_project -> dmtx = FALSE; bonds_update = 1; active_project -> runc[0] = FALSE; frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; gboolean ** cshow = duplicate_geom_info (active_project); gboolean ** pshow = duplicate_poly_info (active_project); coord_info * ocoord = duplicate_coord_info (active_coord); if (view -> rings) { view -> rings = FALSE; for (i=0; i<5; i++) { clean_rings_data (i, view); #ifdef GTK3 update_rings_menus (view); #endif } } if (view -> chains) { clean_chains_data (view); #ifdef GTK3 update_chains_menus (view); #endif } on_calc_bonds_released (NULL, NULL); restore_coord_and_poly_info (active_project, ocoord, cshow, pshow); g_free (cshow); g_free (pshow); g_free (ocoord); int shaders[1] = {POLYS}; re_create_md_shaders (1, shaders, active_project); view -> create_shaders[PICKS] = TRUE; view -> create_shaders[MDBOX] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; } else { show_warning (_("Something went wrong, the 3D model was not updated"), view -> win); } restore_ogl_selection (view); fill_tool_model (); clean_other_window_after_edit (active_project); if (k != view -> proj) active_project_changed (k); } update (view); #ifdef GTK4 update_menu_bar (view); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void super_cell (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create super cell menu callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void super_cell (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void super_cell (GtkWidget * widg, gpointer data) \brief create super cell menu callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void super_cell (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; super_celling (view); sens_superbut (get_project_by_id(view -> proj)); } /*! \fn G_MODULE_EXPORT void super_cell_but (GtkButton * but, gpointer data) \brief create super cell callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void super_cell_but (GtkButton * but, gpointer data) { glwin * view = (glwin *)data; super_celling (view); sens_superbut (get_project_by_id(view -> proj)); } atomes_1.3.1/src/opengl/edit/cell_edit.c0000664000175000017500000002050715212624223017601 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cell_edit.c * @short Functions to create the cell edition window * @author Sébastien Le Roux */ /* * This file: 'cell_edit.c' * * Contains: * - The functions to create the cell edition window * * List of functions: G_MODULE_EXPORT gboolean close_cell (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean close_cell (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT void close_cell_edit (GtkButton * but, gpointer data); G_MODULE_EXPORT void edition_win (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void edition_win (GtkWidget * widg, gpointer data); GtkWidget * cell_tab (int i, project * this_proj); GtkWidget * create_cell_notebook (project * this_proj, GtkWidget * vbox); GtkWidget * create_cell_edition_window (project * this_proj, gpointer data); */ #include "cell_edit.h" gchar * edit_names[7] = {i18n("Wrap All Atoms in"), i18n("Shift Center"), i18n("Add Extra(s)"), i18n("Create Super-Cell"), i18n("Adjust Density"), i18n("Cut Slab"), i18n("PBC Pixels Debug")}; /*! \fn G_MODULE_EXPORT void close_cell_edit (GtkButton * but, gpointer data) \brief close cell edition window and free the associated data pointers \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void close_cell_edit (GtkButton * but, gpointer data) { project * this_proj = (project *)data; int i; for (i=0; i<3; i++) this_proj -> modelgl -> cshift[i] = this_proj -> modelgl -> cell_win -> cparam[i]; this_proj -> modelgl -> cell_win -> win = destroy_this_widget (this_proj -> modelgl -> cell_win -> win); g_free (this_proj -> modelgl -> cell_win); this_proj -> modelgl -> cell_win = NULL; cleaning_shaders (this_proj -> modelgl, SLABS); update (this_proj -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean close_cell (GtkWindow * widg, gpointer data) \brief cell edition window close event callback GTK4 \param widg \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_cell (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean close_cell (GtkWidget * widg, GdkEvent * event, gpointer data) \brief cell edition window close event callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_cell (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { close_cell_edit (NULL, data); return FALSE; } /*! \fn GtkWidget * cell_tab (int i, project * this_proj) \brief create the 'i'th cell tab \param i the cell tab id \param this_proj the target project */ GtkWidget * cell_tab (int i, project * this_proj) { switch (i) { case 0: return shift_center_tab (this_proj); break; case 1: return add_extra_cell_tab (this_proj -> modelgl); break; case 2: return adjust_density_tab (this_proj); break; case 3: return cut_in_model (this_proj); break; #ifdef DEBUG default: return pixels_tab (this_proj); break; #else default: return NULL; break; #endif } } /*! \fn GtkWidget * create_cell_notebook (project * this_proj, GtkWidget * vbox) \brief create the cell edition notebook \param this_proj the target project \param vbox the GtkWidget sending the signal */ GtkWidget * create_cell_notebook (project * this_proj, GtkWidget * vbox) { GtkWidget * notebook = gtk_notebook_new (); gchar * str; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, notebook, TRUE, TRUE, 0); int i, j; gboolean doit; #ifdef DEBUG for (i=0; i<5; i ++) #else for (i=0; i<4; i ++) #endif { #ifdef DEBUG doit = (i == 4 && ! this_proj -> pix[0]) ? FALSE : TRUE; #else doit = TRUE; #endif if (doit) { j = (i < 2) ? i+1 : i+2; str = g_strdup_printf ("%s", _(edit_names[j])); gtk_notebook_insert_page (GTK_NOTEBOOK(notebook), cell_tab (i, this_proj), markup_label(str, -1, -1, 0.0, 0.5), i); if (i > 1) widget_set_sensitive (gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), i), (this_proj -> steps) > 1 ? 0 : 1); g_free (str); } } show_the_widgets (notebook); return notebook; } /*! \fn GtkWidget * create_cell_edition_window (project * this_proj, gpointer data) \brief create the cell editon window \param this_proj the target project \param data the associated data pointer */ GtkWidget * create_cell_edition_window (project * this_proj, gpointer data) { gchar * str = g_strdup_printf (_("Cell edition - %s"), this_proj -> name); GtkWidget * win = create_win (str, this_proj -> modelgl -> win, FALSE, FALSE); g_free (str); GtkWidget * vbox = create_vbox (5); add_container_child (CONTAINER_WIN, win, vbox); gtk_widget_set_size_request (vbox, 700 , -1); int i; for (i=0; i<3; i++) this_proj -> modelgl -> cell_win -> cparam[i] = this_proj -> modelgl -> cshift[i]; this_proj -> modelgl -> cell_win -> notebook = create_cell_notebook (this_proj, vbox); GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, FALSE, 0); GtkWidget * but = create_button (_("Close"), IMG_STOCK, FCLOSE, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(close_cell_edit), this_proj); add_box_child_end (hbox, but, FALSE, FALSE, 5); add_gtk_close_event (win, G_CALLBACK(close_cell), this_proj); return win; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void edition_win (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create the cell edition window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void edition_win (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void edition_win (GtkWidget * widg, gpointer data) \brief create the cell edition window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void edition_win (GtkWidget * widg, gpointer data) #endif { tint * id = (tint *) data; int i; project * this_proj = get_project_by_id(id -> a); if (this_proj -> modelgl -> cell_win == NULL) { this_proj -> modelgl -> cell_win = g_malloc0(sizeof*this_proj -> modelgl -> cell_win); this_proj -> modelgl -> cell_win -> homo_density = TRUE; this_proj -> modelgl -> cell_win -> slab_alpha = 0.75; this_proj -> modelgl -> cell_win -> slab_lot = allocint (this_proj -> nspec); this_proj -> modelgl -> cell_win -> slab_pbc = this_proj -> cell.pbc; for (i=0; i<5; i++) { this_proj -> modelgl -> cell_win -> slab_pointer[i].a = id -> a; this_proj -> modelgl -> cell_win -> slab_pointer[i].b = i; } for (i=9; i<13; i++) this_proj -> modelgl -> cell_win -> cparam[i] = 5.0; for (i=13; i<15; i++) this_proj -> modelgl -> cell_win -> cparam[i] = 2.5; for (i=15; i<18; i++) this_proj -> modelgl -> cell_win -> cparam[i] = 90.0; this_proj -> modelgl -> cell_win -> win = create_cell_edition_window (this_proj, data); } show_the_widgets (this_proj -> modelgl -> cell_win -> win); for (i=1; i<6; i++) { if (i < 3) hide_the_widgets (this_proj -> modelgl -> cell_win -> slab_hbox[i]); hide_the_widgets (this_proj -> modelgl -> cell_win -> slab_box[i]); } int page = id -> b; gtk_notebook_set_current_page (GTK_NOTEBOOK (this_proj -> modelgl -> cell_win -> notebook), page); } atomes_1.3.1/src/opengl/edit/cell_cut.c0000664000175000017500000007705515212624223017461 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cell_cut.c * @short Functions to create the 'slab cutting' tab of the cell edition window * @author Sébastien Le Roux */ /* * This file: 'cell_cut.c' * * Contains: * - The functions to create the 'slab cutting' tab of the cell edition window * * List of functions: G_MODULE_EXPORT gboolean scroll_set_slab_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void create_slab_info (project * this_proj); void slab_alpha_has_changed (gpointer data, GLfloat v); void invert_selection (project * this_proj); G_MODULE_EXPORT void setup_passivate (GtkButton * but, gpointer data); G_MODULE_EXPORT void set_slab_property (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_slab_property (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_slab_option (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_slab_type (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_slab_alpha (GtkRange * range, gpointer data); G_MODULE_EXPORT void select_this_slab (GtkButton * but, gpointer data); G_MODULE_EXPORT void cut_this_slab (GtkButton * but, gpointer data); GtkWidget * prepare_slab_box (int sid, project * this_proj); GtkWidget * create_slab_param_combo (int sid, project * this_proj); GtkWidget * cut_in_model (project * this_proj); */ #include "cell_edit.h" #include "atom_edit.h" extern G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data); /*! \fn G_MODULE_EXPORT void setup_passivate (GtkButton * but, gpointer data) \brief passivate button callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void setup_passivate (GtkButton * but, gpointer data) { project * this_proj = (project *)data; gchar * str = g_strdup_printf (_("Cell edition - %s: surface passivation"), this_proj -> name); GtkWidget * dial = dialogmodal (prepare_for_title(str), GTK_WINDOW(this_proj -> modelgl -> cell_win -> win)); g_free (str); this_proj -> modelgl -> search_widg[8] -> passivating = TRUE; GtkWidget * vbox = dialog_get_content_area (dial); GtkWidget * scrollsets = create_scroll (NULL, -1, -1, GTK_SHADOW_NONE); add_container_child (CONTAINER_SCR, scrollsets, action_tab (6, this_proj)); widget_set_sensitive (this_proj -> modelgl -> search_widg[8] -> object_box, 0); gtk_widget_set_size_request (scrollsets, 760, 350); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, scrollsets, FALSE, FALSE, 10); GtkWidget * info = markup_label (_("Select any object(s) A to be replaced when creating the slab, then select the object(s) B to insert in its place.\n" "When cutting into the model any bond to A with the new surface, will be passivated by B"), -1, -1, 0.5, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, info, FALSE, FALSE, 20); show_the_widgets (dial); if (! this_proj -> modelgl -> search_widg[8] -> in_selection) { combo_set_active (this_proj -> modelgl -> search_widg[8] -> atom_box, 0); set_filter_changed (GTK_COMBO_BOX(this_proj -> modelgl -> search_widg[8] -> atom_box), this_proj -> modelgl -> search_widg[8]); } else { combo_set_active (this_proj -> modelgl -> search_widg[8] -> atom_box, 0); set_spec_changed (GTK_COMBO_BOX(this_proj -> modelgl -> search_widg[8] -> atom_box), this_proj -> modelgl -> search_widg[8]); } g_signal_connect (G_OBJECT(dial), "response", G_CALLBACK(destroy_this_dialog), NULL); dialog_id ++; Event_loop[dialog_id] = g_main_loop_new (NULL, FALSE); g_main_loop_run (Event_loop[dialog_id]); this_proj -> modelgl -> search_widg[8] -> passivating = FALSE; } /*! \fn void create_slab_info (project * this_proj) \brief create slab information widget \param this_proj the target project */ void create_slab_info (project * this_proj) { this_proj -> modelgl -> cell_win -> slab_info = destroy_this_widget (this_proj -> modelgl -> cell_win -> slab_info); this_proj -> modelgl -> cell_win -> slab_info = create_vbox (BSEP); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> cell_win -> slab_info, hbox, FALSE, FALSE, 5); gchar * str; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("- Volume: "), 100, -1, 0.0, 0.5), FALSE, FALSE, 0); str = g_strdup_printf ("%f", this_proj -> modelgl -> cell_win -> slab_vol); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 90, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Å3", 20, -1, 0.5, 0.5), FALSE, FALSE, 0); g_free (str); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> cell_win -> slab_info, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("- Atom(s) in slab: "), 100, -1, 0.0, 0.5), FALSE, FALSE, 0); str = g_strdup_printf ("%d", this_proj -> modelgl -> cell_win -> slab_atoms); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 20); g_free (str); int i; for (i=0; i nspec; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> cell_win -> slab_info, hbox, FALSE, FALSE, 0); str = g_strdup_printf (_("\t - %s atom(s) in slab: "), this_proj -> chemistry -> label[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); str = g_strdup_printf ("%d", this_proj -> modelgl -> cell_win -> slab_lot[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 20); g_free (str); } add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> cell_win -> slab_info_box, this_proj -> modelgl -> cell_win -> slab_info, FALSE, FALSE, 0); show_the_widgets (this_proj -> modelgl -> cell_win -> slab_info); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_slab_property (GtkCheckButton * but, gpointer data) \brief set slab property toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_slab_property (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_slab_property (GtkToggleButton * but, gpointer data) \brief set slab property toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_slab_property (GtkToggleButton * but, gpointer data) #endif { dint * dat = (dint *)data; glwin * view = get_project_by_id(dat -> a) -> modelgl; gboolean status = button_get_status ((GtkWidget *)but); switch (dat -> b) { case 0: view -> cell_win -> slab_show = status; break; case 1: view -> cell_win -> slab_pbc = status; break; case 2: view -> cell_win -> slab_act = status; break; case 3: view -> cell_win -> slab_out = status; break; case 4: view -> cell_win -> slab_passivate = status; widget_set_sensitive (view -> cell_win -> passivate, view -> cell_win -> slab_passivate); if (view -> cell_win -> slab_passivate) { prepare_atom_edition (& view -> colorp[0][0], FALSE); view -> search_widg[8] = allocate_atom_search (dat -> a, REPLACE, 8, get_project_by_id(dat -> a) -> nspec); view -> search_widg[8] -> status = 2; setup_passivate (NULL, get_project_by_id(dat -> a)); } else { g_free (view -> search_widg[8]); view -> search_widg[8] = NULL; if (! view -> atom_win -> visible) { g_free (view -> atom_win); view -> atom_win = NULL; } } break; } if (view -> cell_win -> slab_show) { view -> create_shaders[SLABS] = TRUE; } else { cleaning_shaders (view, SLABS); } update (view); } /*! \fn GtkWidget * prepare_slab_box (int sid, project * this_proj) \brief create slab parameters widget box \param sid the type of slab \param this_proj the target project */ GtkWidget * prepare_slab_box (int sid, project * this_proj) { gchar * option[6]={i18n("- Position the center of the slab: "), // 6, 7, 8 i18n("- Size of the slab: "), // 9, 10, 11 i18n("- Size of the slab: "), // 12, 13 i18n("- Size of the slab: "), // 14 i18n("- Parallelepiped angles: "), // 15, 16, 17 i18n("- Slab rotation: ")}; // 18, 19, 20 GtkWidget * vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_(option[sid]), 200, -1, 0.0, 0.5), FALSE, FALSE, 5); int i; switch (sid) { case 0: for (i=6; i<9; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); break; case 1: for (i=9; i<12; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); break; case 2: for (i=12; i<14; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); break; case 3: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, 14), FALSE, FALSE, 0); break; case 4: for (i=15; i<18; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); break; case 5: for (i=18; i<21; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); break; } return vbox; } /*! \fn G_MODULE_EXPORT void set_slab_option (GtkComboBox * box, gpointer data) \brief change slab option combo \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_slab_option (GtkComboBox * box, gpointer data) { project * this_proj = (project *)data; int i, j; i = combo_get_active ((GtkWidget *)box); for (j=0; j<6; j++) { hide_the_widgets (this_proj -> modelgl -> cell_win -> slab_box[j]); } switch (i) { case 0: show_the_widgets (this_proj -> modelgl -> cell_win -> slab_box[0]); break; case 1: show_the_widgets (this_proj -> modelgl -> cell_win -> slab_box[1+this_proj -> modelgl -> cell_win -> slab_type]); break; default: if (this_proj -> modelgl -> cell_win -> slab_type) { show_the_widgets (this_proj -> modelgl -> cell_win -> slab_box[5]); } else { show_the_widgets (this_proj -> modelgl -> cell_win -> slab_box[i+2]); } break; } } /*! \fn GtkWidget * create_slab_param_combo (int sid, project * this_proj) \brief create slab parameters combo widget \param sid the slab type \param this_proj the target project */ GtkWidget * create_slab_param_combo (int sid, project * this_proj) { GtkWidget * combo = create_combo (); gchar * options[4] = {i18n("Position"), i18n("Size"), i18n("Angles"), i18n("Rotation")}; int i, j, k; i = 4 - sid; for (j=0; j modelgl -> cell_win -> slab_hbox[i]); this_proj -> modelgl -> cell_win -> slab_type = i = combo_get_active ((GtkWidget *)box); show_the_widgets (this_proj -> modelgl -> cell_win -> slab_hbox[i]); combo_set_active (this_proj -> modelgl -> cell_win -> slab_param[i], 0); set_slab_option (GTK_COMBO_BOX(this_proj -> modelgl -> cell_win -> slab_param[i]), this_proj); if (this_proj -> modelgl -> n_shaders[SLABS][0]) { this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); } } /*! \fn void slab_alpha_has_changed (gpointer data, GLfloat v) \brief change slab opacity \param data the associated data pointer \param v the new opacity value */ void slab_alpha_has_changed (gpointer data, GLfloat v) { glwin * view = (glwin *)data; view -> cell_win -> slab_alpha = v; if (view -> n_shaders[SLABS][0]) { view -> create_shaders[SLABS] = TRUE; update (view); } } /*! \fn G_MODULE_EXPORT gboolean scroll_set_slab_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief change slab opactiy callback - scoll \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_slab_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { slab_alpha_has_changed (data, (GLfloat) value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_slab_alpha (GtkRange * range, gpointer data) \brief change slab opactiy callback - range \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_slab_alpha (GtkRange * range, gpointer data) { slab_alpha_has_changed (data, (GLfloat) gtk_range_get_value (range)); } /*! \fn void invert_selection (project * this_proj) \brief invert atom(s) selection \param this_proj the target project */ void invert_selection (project * this_proj) { save_all_selections (this_proj -> modelgl, 0); int i, j, k; if (this_proj -> modelgl -> mode == EDITION) { // Invert the saved coordinates as well double ** saved_c = NULL; i = this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected; if (i < this_proj -> natomes) { saved_c = g_malloc0((this_proj -> natomes - i)*sizeof*saved_c); k = 0; for (j=0; j natomes; j++) { if (! this_proj -> atoms[0][j].pick[0]) { saved_c[k] = allocdouble (3); saved_c[k][0] = this_proj -> atoms[0][j].x; saved_c[k][1] = this_proj -> atoms[0][j].y; saved_c[k][2] = this_proj -> atoms[0][j].z; k ++; } } } g_free (this_proj -> modelgl -> saved_coord[1]); this_proj -> modelgl -> saved_coord[1] = NULL; if (saved_c) { this_proj -> modelgl -> saved_coord[1] = g_malloc0((this_proj -> natomes - i)*sizeof*this_proj -> modelgl -> saved_coord[1]); for (j=0; j natomes - i; j++) { this_proj -> modelgl -> saved_coord[1][j] = duplicate_double(3, saved_c[j]); } g_free (saved_c); } } for (i=0; i natomes; i++) { process_selected_atom (this_proj, this_proj -> modelgl, i, 0, 0, 0); } update_all_selections (this_proj -> modelgl, 0); if (this_proj -> modelgl -> mode == EDITION) { this_proj -> modelgl -> baryc[1] = get_bary (this_proj, 1); } int shaders[1] = {SELEC}; re_create_md_shaders (1, shaders, this_proj); } /*! \fn G_MODULE_EXPORT void select_this_slab (GtkButton * but, gpointer data) \brief select / unselect atom(s) in slab callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_this_slab (GtkButton * but, gpointer data) { project * this_proj = (project *)data; this_proj -> modelgl -> cell_win -> cut_this_slab = TRUE; opengl_project_changed (this_proj -> id); selected_aspec = -1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & this_proj -> modelgl -> colorp[0][0]); #endif save_all_selections (this_proj -> modelgl, 0); create_slab_lists (this_proj); update_all_selections (this_proj -> modelgl, 0); if (this_proj -> modelgl -> cell_win -> slab_act) invert_selection (this_proj); this_proj -> modelgl -> cell_win -> cut_this_slab = FALSE; this_proj -> modelgl -> create_shaders[SLABS] = TRUE; int shaders[1] = {SELEC}; re_create_md_shaders (1, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void cut_this_slab (GtkButton * but, gpointer data) \brief cut this slab callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void cut_this_slab (GtkButton * but, gpointer data) { project * this_proj = (project *)data; int is_out, i; if (this_proj -> modelgl-> cell_win -> slab_atoms) { if (! this_proj -> modelgl -> cell_win -> slab_passivate || do_we_have_objects_in_selection(this_proj, this_proj -> modelgl -> search_widg[8], FALSE)) { is_out = this_proj -> modelgl -> cell_win -> slab_out; if (this_proj -> modelgl -> search_widg[8]) this_proj -> modelgl -> search_widg[8] -> passivating = FALSE; gchar * infom[2] = {i18n("Cut and modify model ?\n This is irreversible !"), i18n("Cut and create new project ?")}; if (ask_yes_no(_("Cut"), _(infom[is_out]), GTK_MESSAGE_WARNING, this_proj -> modelgl -> cell_win -> win)) { this_proj -> modelgl -> cell_win -> cut_this_slab = TRUE; if (is_out) preserve_ogl_selection (this_proj -> modelgl); opengl_project_changed (this_proj -> id); selected_aspec = -1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & this_proj -> modelgl -> colorp[0][0]); #endif save_all_selections (this_proj -> modelgl, 0); create_slab_lists (this_proj); update_all_selections (this_proj -> modelgl, 0); is_selected = 1; if (this_proj -> modelgl -> cell_win -> slab_act) invert_selection (this_proj); switch (is_out) { case 0: // Modify project if (this_proj -> modelgl -> cell_win -> slab_passivate) { if (this_proj -> modelgl -> atom_win) { #ifdef GTK4 remove_the_atoms (NULL, NULL, & cut_sel); #else remove_the_atoms (NULL, & cut_sel); #endif this_proj -> modelgl -> cell_win -> slab_passivate = FALSE; to_passivate_using_the_objects (this_proj, this_proj -> modelgl -> search_widg[8]); this_proj -> modelgl -> cell_win -> slab_passivate = TRUE; } } else { #ifdef GTK4 remove_the_atoms (NULL, NULL, & cut_sel); #else remove_the_atoms (NULL, & cut_sel); #endif } break; case 1: // Create new project if (this_proj -> modelgl -> cell_win -> slab_passivate) { #ifdef GTK4 select_unselect_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & this_proj -> modelgl -> colorp[0][0]); #endif } #ifdef GTK4 edit_in_new_project (NULL, NULL, & this_proj -> modelgl -> colorp[0][0]); #else edit_in_new_project (NULL, & this_proj -> modelgl -> colorp[0][0]); #endif if (this_proj -> modelgl -> cell_win -> slab_passivate) { #ifdef GTK4 select_unselect_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & this_proj -> modelgl -> colorp[0][0]); #endif this_proj -> modelgl -> cell_win -> cut_this_slab = FALSE; this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); active_project_changed (nprojects-1); active_glwin -> cell_win = g_malloc0(sizeof*active_glwin -> cell_win); active_glwin -> cell_win -> slab_lot = allocint (active_project -> nspec); active_glwin -> cell_win -> slab_type = this_proj -> modelgl -> cell_win ->slab_type; active_glwin -> cell_win -> slab_pbc = this_proj -> modelgl -> cell_win ->slab_pbc; active_glwin -> cell_win -> slab_act = this_proj -> modelgl -> cell_win -> slab_act; active_glwin -> cell_win -> slab_passivate = TRUE; for (i=0; i<21; i++) active_glwin -> cell_win -> cparam[i] = this_proj -> modelgl -> cell_win -> cparam[i]; prepare_atom_edition (& active_glwin -> colorp[0][0], FALSE); active_glwin -> search_widg[8] = allocate_atom_search (activep, REPLACE, 8, this_proj -> modelgl -> search_widg[8] -> todo_size); active_glwin -> search_widg[8] -> status = 2; active_glwin -> search_widg[8] -> object = this_proj -> modelgl -> search_widg[8] -> object; active_glwin -> search_widg[8] -> filter = this_proj -> modelgl -> search_widg[8] -> filter; active_glwin -> search_widg[8] -> in_selection = this_proj -> modelgl -> search_widg[8] -> in_selection; active_glwin -> search_widg[8] -> todo_size = this_proj -> modelgl -> search_widg[8] -> todo_size; active_glwin -> search_widg[8] -> todo = duplicate_int (active_glwin -> search_widg[8] -> todo_size, this_proj -> modelgl -> search_widg[8] -> todo); active_glwin -> atom_win -> to_be_inserted[3] = duplicate_atomic_object (this_proj -> modelgl -> atom_win -> to_be_inserted[3]); atomic_object * tmp_a, * tmp_b; tmp_a = this_proj -> modelgl -> atom_win -> to_be_inserted[3]; tmp_b = active_glwin -> atom_win -> to_be_inserted[3]; while (tmp_a -> next) { tmp_b -> next = duplicate_atomic_object (tmp_a -> next); tmp_b -> next -> prev = tmp_b; tmp_b = tmp_b -> next; tmp_a = tmp_a -> next; } opengl_project_changed (active_project -> id); #ifdef GTK4 select_unselect_atoms (NULL, NULL, & active_glwin -> colorp[0][0]); #else select_unselect_atoms (NULL, & active_glwin -> colorp[0][0]); #endif save_all_selections (active_glwin, 0); active_glwin -> cell_win -> cut_this_slab = TRUE; create_slab_lists (active_project); update_all_selections (active_glwin, 0); if (active_glwin -> cell_win -> slab_act) invert_selection (active_project); #ifdef GTK4 remove_the_atoms (NULL, NULL, & cut_sel); #else remove_the_atoms (NULL, & cut_sel); #endif active_glwin -> cell_win -> slab_passivate = FALSE; to_passivate_using_the_objects (active_project, active_glwin -> search_widg[8]); active_glwin -> cell_win -> slab_passivate = TRUE; g_free (active_glwin -> search_widg[8]); active_glwin -> search_widg[8] = NULL; if (! active_glwin -> atom_win -> visible) { g_free (active_glwin -> atom_win); active_glwin -> atom_win = NULL; } g_free (active_glwin -> cell_win); active_glwin -> cell_win = NULL; } break; } #ifdef GTK4 // select_unselect_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[0][0]); #else // select_unselect_atoms (NULL, & this_proj -> modelgl -> colorp[0][0]); #endif if (is_out) restore_ogl_selection (this_proj -> modelgl); this_proj -> modelgl -> cell_win -> cut_this_slab = FALSE; this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); } } else { show_info (_("Nothing to passivate the bond(s) to be broken:\nDeactivate passivating or adjust option(s) properly !"), 0, this_proj -> modelgl -> cell_win -> win); } } else { show_info (_("The slab is empty, nothing to do !"), 0, this_proj -> modelgl -> cell_win -> win); } } /*! \fn GtkWidget * cut_in_model (project * this_proj) \brief create the cut slab tab \param this_proj the target project */ GtkWidget * cut_in_model (project * this_proj) { int i; GtkWidget * layout; i = (this_proj -> nspec > 3) ? 15 * (this_proj -> nspec - 3) : 0; #ifdef G_OS_WIN32 layout = create_layout (800, 510+i); #else layout = create_layout (800, 420+i); #endif GtkWidget * box = create_vbox (BSEP); layout_add_widget (layout, box, 10, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label(_("Cut slab in the simulation box: "), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Show/Hide slab"), 25, -1, this_proj -> modelgl -> cell_win -> slab_show, G_CALLBACK(set_slab_property), & this_proj -> modelgl -> cell_win -> slab_pointer[0]), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Use PBC to select atoms"), 25, -1, this_proj -> modelgl -> cell_win -> slab_pbc, G_CALLBACK(set_slab_property), & this_proj -> modelgl -> cell_win -> slab_pointer[1]), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Invert cutting (all but the slab)"), 25, -1, this_proj -> modelgl -> cell_win -> slab_act, G_CALLBACK(set_slab_property), & this_proj -> modelgl -> cell_win -> slab_pointer[2]), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Export in new project"), 25, -1, this_proj -> modelgl -> cell_win -> slab_out, G_CALLBACK(set_slab_property), & this_proj -> modelgl -> cell_win -> slab_pointer[3]), FALSE, FALSE, 0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 10); GtkWidget * hox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hox, FALSE, FALSE, 0); GtkWidget * combo = create_combo (); gchar * type[3] = {i18n("Parallelepiped"), i18n("Cylinder"), i18n("Sphere")}; for (i=0; i<3; i++) combo_text_append (combo, _(type[i])); combo_set_active (combo, this_proj -> modelgl -> cell_win -> slab_type); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_slab_type), this_proj); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hox, markup_label(_("- Shape of the slab: "), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hox, combo, FALSE, FALSE, 5); // Passivation hox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hox, FALSE, FALSE, 100); GtkWidget * but = check_button (_("Passivate surface"), -1, -1, this_proj -> modelgl -> cell_win -> slab_passivate, G_CALLBACK(set_slab_property), & this_proj -> modelgl -> cell_win -> slab_pointer[4]); // widget_set_sensitive (but, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hox, but, FALSE, FALSE, 20); this_proj -> modelgl -> cell_win -> passivate = create_button (_("Options"), IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(setup_passivate), this_proj); widget_set_sensitive (this_proj -> modelgl -> cell_win -> passivate, this_proj -> modelgl -> cell_win -> slab_passivate); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hox, this_proj -> modelgl -> cell_win -> passivate, FALSE, FALSE, 0); GtkWidget * hhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hhbox, FALSE, FALSE, 5); GtkWidget * vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, vbox, FALSE, FALSE, 0); this_proj -> modelgl -> cell_win -> slab_opts = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, this_proj -> modelgl -> cell_win -> slab_opts, FALSE, FALSE, 5); for (i=0; i<3; i++) { this_proj -> modelgl -> cell_win -> slab_hbox[i] = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> cell_win -> slab_opts, this_proj -> modelgl -> cell_win -> slab_hbox[i], FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, this_proj -> modelgl -> cell_win -> slab_hbox[i], markup_label(_("- Select option to tweak: "), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); this_proj -> modelgl -> cell_win -> slab_param[i] = create_slab_param_combo (i, this_proj); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, this_proj -> modelgl -> cell_win -> slab_hbox[i], this_proj -> modelgl -> cell_win -> slab_param[i], FALSE, FALSE, 5); } for (i=0; i<6; i++) { this_proj -> modelgl -> cell_win -> slab_box[i] = prepare_slab_box (i, this_proj); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> cell_win -> slab_opts, this_proj -> modelgl -> cell_win -> slab_box[i], FALSE, FALSE, 5); } vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, vbox, FALSE, FALSE, 40); GtkWidget * vvbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, vvbox, FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, markup_label(_("Slab information:"), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("- Opacity: "), 100, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_hscale (0.0, 1.0, 0.01, this_proj -> modelgl -> cell_win -> slab_alpha, GTK_POS_LEFT, 2, 150, G_CALLBACK(set_slab_alpha), G_CALLBACK(scroll_set_slab_alpha), this_proj -> modelgl), FALSE, FALSE, 10); this_proj -> modelgl -> cell_win -> slab_info_box = create_vbox (BSEP); create_slab_info (this_proj); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, this_proj -> modelgl -> cell_win -> slab_info_box, FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_button (_("Select atom(s) in this slab !"), IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(select_this_slab), this_proj), FALSE, FALSE, 100); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("or"), 100, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_button (_("Cut this slab now !"), IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(cut_this_slab), this_proj), FALSE, FALSE, 30); show_the_widgets (layout); return layout; } atomes_1.3.1/src/opengl/edit/atom_object.c0000664000175000017500000012603015212624223020141 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_object.c * @short Functions to create atomic objects * @author Sébastien Le Roux */ /* * This file: 'atom_object.c' * * Contains: * - The functions to create atomic objects * * List of functions: int in_object_bond_list (atomic_object * object, int aid, int bid); int create_object_from_open_project (project * this_proj, int p); int * duplicate_z (int species, double * old_z); double get_object_dim (atomic_object * object); gboolean rebuild_atom_neighbors (project * this_proj, int step, atomic_object * object, int target, int aid, atom * at, gboolean * checked_at); void correct_pos_and_get_dim (atomic_object * object, gboolean adjust); void reconstruct_bonds (project * this_proj, int ifcl, int * bcid); void reconstruct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord); void correct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord); void create_object_from_library (int p); void clean_object_vois (project * this_proj, atomic_object * object, int * new_id, gboolean movtion); void clean_object_bonds (project * proj, int o_step, atomic_object * object, int * new_id, gboolean movtion); void add_object_atoms (atomic_object * this_object, project * this_proj, int o_step, int numa, int * old_id, gboolean alloc_new_id, atom_search * remove); void adjust_object_frag_coord (atomic_object * object); void clean_this_object (int orig, int act, project * this_proj, atom_search * asearch); void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible); atomic_object * duplicate_atomic_object (atomic_object * old_obj); atomic_object * create_object_from_species (project * this_proj, int sid, atom_search * remove); atomic_object * create_object_from_selection (project * this_proj); atomic_object * create_object_from_atom_coordination (project * this_proj, int coord, int aid, atom_search * remove); atomic_object * create_object_from_overall_coordination (project * this_proj, int coord, int aid, atom_search * remove); atomic_object * create_object_from_frag_mol (project * this_proj, int coord, int geo, atom_search * remove); tint ulam_coord (glwin * view); */ #include "atom_edit.h" extern atomic_object * cif_object; /*! \fn double get_object_dim (atomic_object * object) \brief get estimate of an object dimension \param object */ double get_object_dim (atomic_object * object) { double dmax = 0.0; vec3_t at, bt; vec3_t dist; int i, j; for (i=0; i atoms-1; i++) { at = vec3 (object -> at_list[i].x, object -> at_list[i].y, object -> at_list[i].z); for (j=i+1; j atoms; j++) { bt = vec3 (object -> at_list[j].x, object -> at_list[j].y, object -> at_list[j].z); dist = v3_sub(at, bt); dmax = max (dmax, v3_length(dist)); } } return dmax+1.0; } /*! \fn void correct_pos_and_get_dim (atomic_object * object, gboolean adjust) \brief get the barycenter of the atomic coordinates of an object \param object the target insert object \param adjust center object coordinates or not */ void correct_pos_and_get_dim (atomic_object * object, gboolean adjust) { int i; if (object -> baryc) g_free(object -> baryc); object -> baryc = allocdouble (3); for (i=0; i atoms; i++) { object -> baryc[0] += object -> at_list[i].x; object -> baryc[1] += object -> at_list[i].y; object -> baryc[2] += object -> at_list[i].z; } for (i=0; i<3; i++) object -> baryc[i] /= object -> atoms; if (adjust) { for (i=0; i atoms; i++) { object -> at_list[i].x -= object -> baryc[0]; object -> at_list[i].y -= object -> baryc[1]; object -> at_list[i].z -= object -> baryc[2]; } } object -> dim = get_object_dim (object); } /*! \fn gboolean rebuild_atom_neighbors (project * this_proj, int step, atomic_object * object, int target, int aid, atom * at, gboolean * checked_at) \brief rebuild target atom id coordinates using PBC \param this_proj the target project \param step the MD step \param object the target insert object \param target the target atom id to correct \param aid the atom id \param at the target atom \param checked_at the list of already checked/corrected atom coordinates id */ gboolean rebuild_atom_neighbors (project * this_proj, int step, atomic_object * object, int target, int aid, atom * at, gboolean * checked_at) { int i, j; distance dist; for (i=0; i numv; i++) { j = at -> vois[i]; dist = distance_3d (& this_proj -> cell, step, at, & object -> at_list[j]); if (dist.pbc && ! checked_at[j]) { object -> at_list[j].x = at -> x - dist.x; object -> at_list[j].y = at -> y - dist.y; object -> at_list[j].z = at -> z - dist.z; } } checked_at[aid] = TRUE; i = 0; for (j=0; j atoms; j++) if (checked_at[j]) i ++; if (i == target) return TRUE; for (i=0; i numv; i++) { j = at -> vois[i]; if (! checked_at[j]) { if (rebuild_atom_neighbors (this_proj, step, object, target, j, & object -> at_list[j], checked_at)) return TRUE; } } return FALSE; } /*! \fn void reconstruct_bonds (project * this_proj, int ifcl, int * bcid) \brief reconstruct the project bond(s)/clone(s) lists after reconstruction using PBC \param this_proj the target project \param ifcl number of clone bond(s) removed \param bcid the removed clone bond(s) atoms id */ void reconstruct_bonds (project * this_proj, int ifcl, int * bcid) { int i, j, k, l; int o_step = this_proj -> modelgl -> anim -> last -> img -> step; int ** old_bid = NULL; old_bid = allocdint (this_proj -> modelgl -> bonds[o_step][0], 2); for (i=0; i modelgl -> bonds[o_step][0]; i++) { for (j=0; j<2; j++) old_bid[i][j] = this_proj -> modelgl -> bondid[o_step][0][i][j]; } g_free (this_proj -> modelgl -> bondid[o_step][0]); this_proj -> modelgl -> bondid[o_step][0] = allocdint (this_proj -> modelgl -> bonds[o_step][0]+ ifcl, 2); for (i=0; i modelgl -> bonds[o_step][0]; i++) { for (j=0; j<2; j++) this_proj -> modelgl -> bondid[o_step][0][i][j] = old_bid[i][j]; } if (old_bid) g_free (old_bid); old_bid = NULL; for (i=0; i modelgl -> bonds[o_step][0]; for (l=0; l<2; l++) { this_proj -> modelgl -> bondid[o_step][0][k][l] = this_proj -> modelgl -> bondid[o_step][1][j][l]; } this_proj -> modelgl -> bonds[o_step][0] ++; this_proj -> modelgl -> allbonds[0] ++; this_proj -> modelgl -> bondid[o_step][1][j][0] = -1; } vec3_t * old_clo = NULL; i = this_proj -> modelgl -> bonds[o_step][1] - ifcl; l = 0; if (i) { old_clo = g_malloc0(i*sizeof*old_clo); old_bid = allocdint (i, 2); for (i=0; i modelgl -> bonds[o_step][1]; i++) { if (this_proj -> modelgl -> bondid[o_step][1][i][0] > -1) { for (k=0; k<2; k++) old_bid[l][k] = this_proj -> modelgl -> bondid[o_step][1][i][k]; old_clo[l].x = this_proj -> modelgl -> clones[o_step][i].x; old_clo[l].y = this_proj -> modelgl -> clones[o_step][i].y; old_clo[l].z = this_proj -> modelgl -> clones[o_step][i].z; l ++; } } } g_free (this_proj -> modelgl -> bondid[o_step][1]); this_proj -> modelgl -> bondid[o_step][1] = NULL; g_free (this_proj -> modelgl -> clones[o_step]); this_proj -> modelgl -> clones[o_step] = NULL; this_proj -> modelgl -> bonds[o_step][1] = this_proj -> modelgl -> allbonds[1] = l; if (l) { this_proj -> modelgl -> bondid[o_step][1] = allocdint (l, 2); this_proj -> modelgl -> clones[o_step] = g_malloc0(l*sizeof*this_proj -> modelgl -> clones[o_step]); for (i=0; i modelgl -> bondid[o_step][1][i][j] = old_bid[i][j]; this_proj -> modelgl -> clones[o_step][i].x = old_clo[i].x; this_proj -> modelgl -> clones[o_step][i].y = old_clo[i].y; this_proj -> modelgl -> clones[o_step][i].z = old_clo[i].z; } if (old_clo) g_free (old_clo); old_clo = NULL; if (old_bid) g_free (old_bid); old_bid = NULL; } } /*! \fn void reconstruct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord) \brief reconstruct object atomic coordinates using PBC \param this_object the target project \param this_proj the target insert object \param upcoord reconstruction of atomic coordinates using PBC ? */ void reconstruct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord) { int h, i, j, k; if (this_proj -> coord -> totcoord[2]) { int * tmp_multi = allocint (this_proj -> coord -> totcoord[2]); for (i=0; i atoms; i++) { j = this_object -> at_list[i].coord[2]; tmp_multi[j] = 1; } gboolean * checked_at = allocbool (this_object -> atoms); h = (this_proj -> cell.npt) ? this_proj -> modelgl -> anim -> last -> img -> step : 0; for (i=0; i coord -> totcoord[2]; i++) { if (tmp_multi[i]) { k = 0; for (j=0; j atoms; j++) { checked_at[j] = FALSE; if (this_object -> at_list[j].coord[2] == i) { k ++; } } for (j=0; j atoms; j++) { if (this_object -> at_list[j].coord[2] == i) { rebuild_atom_neighbors (this_proj, h, this_object, k, j, & this_object -> at_list[j], checked_at); } } } } g_free (checked_at); } correct_pos_and_get_dim (this_object, TRUE); if (upcoord) { reconstruct_bonds (this_proj, this_object -> ifcl, this_object -> bcid); for (i=0; i atoms; i++) { j = this_object -> at_list[i].id; this_proj -> atoms[0][j].x = this_object -> at_list[i].x + this_object -> baryc[0]; this_proj -> atoms[0][j].y = this_object -> at_list[i].y + this_object -> baryc[1]; this_proj -> atoms[0][j].z = this_object -> at_list[i].z + this_object -> baryc[2]; this_proj -> atoms[0][j].cloned = FALSE; } for (i=0; i<3; i++) this_proj -> modelgl -> saved_coord[i] = save_coordinates (this_proj, i); } } /*! \fn void correct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord) \brief correct the atomic coordinates for 'this_object' \param this_proj the target project \param this_object the target insert object \param upcoord reconstruction of atomic coordinates using PBC ? */ void correct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord) { if (this_object -> ifcl) { if (upcoord) { reconstruct_coordinates_for_object (this_proj, this_object, upcoord); this_object -> ifcl = 0; g_free (this_object -> bcid); this_object -> bcid = NULL; } else { correct_pos_and_get_dim (this_object, FALSE); } } else { correct_pos_and_get_dim (this_object, TRUE); } } /*! \fn tint ulam_coord (glwin * view) \brief shift insertion position for object not to have overlapping objects for multiple/repeated insertions \param view the target glwin */ tint ulam_coord (glwin * view) { tint pos; int m; pos.a = pos.b = pos.c = 0; if (view -> builder_win) return pos; int p = view -> nth_copy; if (p > 0) { pos.c = p/9; m = p - pos.c*9; pos.b = m/3; pos.a = p - pos.c*9 - pos.b*3; } return pos; } int being_copied; atomic_object * lib_object; /*! \fn atomic_object * duplicate_atomic_object (atomic_object * old_obj) \brief duplicate an insert object \param old_obj the insert object to duplicate */ atomic_object * duplicate_atomic_object (atomic_object * old_obj) { atomic_object * new_obj = g_malloc0(sizeof*new_obj); new_obj -> origin = old_obj -> origin; new_obj -> type = old_obj -> type; new_obj -> dim = old_obj -> dim; new_obj -> name = g_strdup_printf ("%s", old_obj -> name); new_obj -> atoms = old_obj -> atoms; new_obj -> at_list = g_malloc0(new_obj -> atoms*sizeof*new_obj -> at_list); int i; for (i=0; i atoms; i++) { new_obj -> at_list[i] = * duplicate_atom (& old_obj -> at_list[i]); } new_obj -> old_z = duplicate_int (old_obj -> species, old_obj -> old_z); new_obj -> coord = duplicate_coord_info (old_obj -> coord); new_obj -> baryc = duplicate_double (3, old_obj -> baryc); new_obj -> occ = old_obj -> occ; new_obj -> species = old_obj -> species; if (old_obj -> bonds) { new_obj -> ibonds = g_malloc0(old_obj -> bonds*sizeof*new_obj -> ibonds); int i; for (i=0; i bonds; i++) { new_obj -> ibonds[i] = duplicate_int (2, old_obj -> ibonds[i]); } } new_obj -> bonds = old_obj -> bonds; return new_obj; } /*! \fn void create_object_from_library (int p) \brief create object using the molecular library \param p the project id of the library molecule in the workspace */ void create_object_from_library (int p) { int i, j; lib_object = g_malloc0(sizeof*lib_object); project * other_proj = get_project_by_id (p); i = other_proj -> natomes; lib_object -> type = FROM_LIBRARY; lib_object -> origin = p; lib_object -> name = g_strdup_printf ("%s", other_proj -> name); lib_object -> coord = duplicate_coord_info (other_proj -> coord); lib_object -> atoms = i; lib_object -> at_list = g_malloc0(lib_object -> atoms*sizeof*lib_object -> at_list); lib_object -> occ = 1.0; lib_object -> species = other_proj -> nspec; lib_object -> old_z = allocint (other_proj -> nspec); for (j=0; j nspec; j++) lib_object -> old_z[j] = (int) other_proj -> chemistry -> chem_prop[CHEM_Z][j]; for (j=0; j at_list[j] = * duplicate_atom (& other_proj -> atoms[0][j]); } correct_pos_and_get_dim (lib_object, TRUE); if (other_proj -> modelgl -> bonds[0][0]) { i = other_proj -> modelgl -> bonds[0][0]; lib_object -> ibonds = allocdint (i, 2); for (j=0; j ibonds[j][0] = other_proj -> modelgl -> bondid[0][0][j][0]; lib_object -> ibonds[j][1] = other_proj -> modelgl -> bondid[0][0][j][1]; } lib_object -> bonds = i; } // Always one frag from library lib_object -> coord -> totcoord[2] = 1; } /*! \fn int in_object_bond_list (atomic_object * object, int aid, int bid) \brief is there a bond between atom aid and atom bid ? \param object the target insert object \param aid 1st atom id \param bid 2nd atom id */ int in_object_bond_list (atomic_object * object, int aid, int bid) { int i; for (i=0; i bonds; i++) { if (object -> ibonds[i][0] == aid && object -> ibonds[i][1] == bid) return 1; if (object -> ibonds[i][1] == aid && object -> ibonds[i][0] == bid) return 1; } return 0; } /*! \fn void clean_object_vois (project * this_proj, atomic_object * object, int * new_id, gboolean movtion) \brief clean the object neigbours list \param this_proj the target project \param object the target insert object \param new_id list of atom's old id in the project 'this_proj' \param movtion reconstruction of atomic coordinates using PBC ? */ void clean_object_vois (project * this_proj, atomic_object * object, int * new_id, gboolean movtion) { int i, j, k, l; int * tmpv; for (i=0; i atoms; i++) { if (object -> at_list[i].numv) { tmpv = duplicate_int (object -> at_list[i].numv, object -> at_list[i].vois); g_free (object -> at_list[i].vois); object -> at_list[i].vois = NULL; j = 0; for (k=0; k at_list[i].numv; k++) { l = tmpv[k]; if (new_id[l]) { j += (! movtion) ? in_object_bond_list(object, i, new_id[l]-1) : 1; } } if (j) { object -> at_list[i].vois = allocint (j); j = 0; for (k=0; k at_list[i].numv; k++) { l = tmpv[k]; if (new_id[l]) { if (! movtion || in_object_bond_list(object, i, new_id[l]-1)) { object -> at_list[i].vois[j] = new_id[l]-1; j ++; } } } } object -> at_list[i].numv = j; g_free (tmpv); } } } /*! \fn void clean_object_bonds (project * proj, int o_step, atomic_object * object, int * new_id, gboolean movtion) \brief create the object bond list, and adjust the bond's atom id \param proj the target project \param o_step the MD step \param object the target insert object \param new_id list of atom's old id in the project 'this_proj' \param movtion reconstruction of atomic coordinates using PBC ? */ void clean_object_bonds (project * proj, int o_step, atomic_object * object, int * new_id, gboolean movtion) { int h, i, j, k, l, m; gboolean doit; int ** tmpibonds = allocdint (proj -> modelgl -> bonds[o_step][0]+proj -> modelgl -> bonds[o_step][1], 2); if (proj -> modelgl -> bonds[o_step][1]) { h = (movtion) ? 2 : 1; } else { h = 1; } i = 0; if (new_id) object -> bcid = allocint (proj -> modelgl -> bonds[o_step][1]); for (j=0; j modelgl -> bonds[o_step][j]; k++) { l = proj -> modelgl -> bondid[o_step][j][k][0]; m = proj -> modelgl -> bondid[o_step][j][k][1]; doit = FALSE; if (new_id) { if (new_id[l] && new_id[m]) doit = TRUE; } else { doit = TRUE; } if (doit) { if (new_id) { tmpibonds[i][0] = new_id[l] - 1; tmpibonds[i][1] = new_id[m] - 1; } else { tmpibonds[i][0] = l; tmpibonds[i][1] = m; } i ++; if (j && new_id) { object -> bcid[object -> ifcl] = k; object -> ifcl ++; } } } } if (i) { object -> ibonds = allocdint (i, 2); for (j=0; j ibonds[j][0] = tmpibonds[j][0]; object -> ibonds[j][1] = tmpibonds[j][1]; } } g_free (tmpibonds); object -> bonds = i; if (new_id) clean_object_vois (proj, object, new_id, movtion); } /*! \fn void add_object_atoms (atomic_object * this_object, project * this_proj, int o_step, int numa, int * old_id, gboolean alloc_new_id, atom_search * remove) \brief add atom list to insert object \param this_object the target insert object \param this_proj the target project \param o_step the MD step \param numa number of atom(s) \param old_id list of atom's old id in the project 'this_proj' \param alloc_new_id check_bonding check bonding ? (partial copy or not) \param remove remove search, if any */ void add_object_atoms (atomic_object * this_object, project * this_proj, int o_step, int numa, int * old_id, gboolean check_bonding, atom_search * remove) { int i, j; this_object -> atoms = numa; this_object -> at_list = g_malloc0(this_object -> atoms*sizeof*this_object -> at_list); int * new_id = allocint (this_proj -> natomes); for (i=0; i atoms; i++) { j = old_id[i]-1; new_id[j] = i+1; if (remove) remove -> todo[j] = 1; this_object -> at_list[i] = * duplicate_atom (& this_proj -> atoms[o_step][j]); if (i) { this_object -> at_list[i].prev = & this_object -> at_list[i-1]; this_object -> at_list[i-1].next = & this_object -> at_list[i]; } } gboolean movtion = ((object_motion && this_proj -> modelgl -> rebuild[0][0]) || (! object_motion && this_proj -> modelgl -> rebuild[1][0])); if (check_bonding) { clean_object_bonds (this_proj, o_step, this_object, new_id, movtion); } correct_coordinates_for_object (this_proj, this_object, movtion); if (check_bonding) { check_coord_modification (this_proj, NULL, & this_object -> at_list[0], this_object, FALSE, FALSE); } g_free (old_id); g_free (new_id); } /*! \fn int * duplicate_z (int species, double * old_z) \brief duplicate z table when creating an object, integer is preferred to avoid comparison errors during action \param species the number of chemical species \param old_z the old z table to duplicate * */ int * duplicate_z (int species, double * old_z) { int i; int * new_z = allocint (species); for (i=0; i modelgl -> anim -> last -> img -> step; this_object -> name = g_strdup_printf ("%s", this_proj -> chemistry -> label[sid]); i = this_proj -> chemistry -> nsps[sid]; this_object -> type = FROM_SPEC; this_object -> origin = this_proj -> id; this_object -> atoms = i; this_object -> at_list = g_malloc0(this_object -> atoms*sizeof*this_object -> at_list); this_object -> occ = 1.0; this_object -> coord = duplicate_coord_info (this_proj -> coord); this_object -> species = this_proj -> nspec; this_object -> old_z = duplicate_z (this_proj -> nspec, this_proj -> chemistry -> chem_prop[CHEM_Z]); int * new_id = NULL; new_id = allocint (this_proj -> natomes); gboolean check_bonding = FALSE; gboolean bonding = FALSE; i = 0; for (j=0; j natomes; j++) { if (this_proj -> atoms[o_step][j].sp == sid) { if (this_proj -> atoms[o_step][j].numv) bonding = TRUE; new_id[i] = j+1; i ++; } } check_bonding = (i != this_proj -> natomes && bonding) ? TRUE : FALSE; add_object_atoms (this_object, this_proj, o_step, i, new_id, check_bonding, remove); return this_object; } /*! \fn atomic_object * create_object_from_selection (project * this_proj) \brief create object from atom selection \param this_proj the target project */ atomic_object * create_object_from_selection (project * this_proj) { int i, j; atomic_object * this_object = g_malloc0(sizeof*this_object); int o_step = this_proj -> modelgl -> anim -> last -> img -> step; this_object -> name = g_strdup_printf (_("From selection")); i = 0; for (j=0; jnatomes; j++) { if (pasted_todo[j]) i++; } this_object -> type = FROM_DATA; this_object -> origin = this_proj -> id; this_object -> atoms = i; this_object -> at_list = g_malloc0(this_object -> atoms*sizeof*this_object -> at_list); this_object -> occ = 1.0; this_object -> coord = duplicate_coord_info (this_proj -> coord); this_object -> species = this_proj -> nspec; this_object -> old_z = duplicate_z (this_proj -> nspec, this_proj -> chemistry -> chem_prop[CHEM_Z]); i = 0; int * new_id = NULL; new_id = allocint (this_proj -> natomes); gboolean check_bonding = FALSE; gboolean bonding = FALSE; for (j=0; j natomes; j++) { if (pasted_todo[j]) { new_id[i] = j+1; if (this_proj -> atoms[o_step][j].numv) bonding = TRUE; i ++; } } check_bonding = (i != this_proj -> natomes && bonding) ? TRUE : FALSE; add_object_atoms (this_object, this_proj, o_step, i, new_id, check_bonding, NULL); if (pasted_todo) { g_free (pasted_todo); pasted_todo = NULL; } return this_object; } /*! \fn atomic_object * create_object_from_atom_coordination (project * this_proj, int coord, int aid, atom_search * remove) \brief create object from an atom and its nearest neighbors \param this_proj the target project \param coord 0 = total coordination, 1 = partial coordination \param aid the atom id \param remove remove search, if any */ atomic_object * create_object_from_atom_coordination (project * this_proj, int coord, int aid, atom_search * remove) { int i, j, k; atomic_object * this_object = g_malloc0(sizeof*this_object); gchar * str; int o_step = this_proj -> modelgl -> anim -> last -> img -> step; i = this_proj -> atoms[o_step][aid].numv; k = this_proj -> atoms[o_step][aid].coord[coord]; j = this_proj -> atoms[o_step][aid].sp; switch (coord) { case 0: if (i > 0) { str = g_strdup_printf (_("%d-fold"), i); } else { str = g_strdup_printf (_("Isolated")); } break; case 1: str = g_strdup_printf ("%s", env_name(this_proj, k, j, 1, NULL)); break; } this_object -> name = g_strdup_printf ("%s - %s%d", str, this_proj -> chemistry -> label[j], aid+1); g_free (str); this_object -> type = - (coord + 3); this_object -> origin = this_proj -> id; this_object -> atoms = i+1; this_object -> at_list = g_malloc0(this_object -> atoms*sizeof*this_object -> at_list); this_object -> occ = 1.0; this_object -> coord = duplicate_coord_info (this_proj -> coord); this_object -> species = this_proj -> nspec; this_object -> old_z = duplicate_int (this_proj -> nspec, (int *)this_proj -> chemistry -> chem_prop[CHEM_Z]); this_object -> at_list[0] = * duplicate_atom (& this_proj -> atoms[o_step][aid]); if (remove) remove_search -> todo[aid] = 1; gboolean movtion = (object_motion && this_proj -> modelgl -> rebuild[0][0]) || (! object_motion && this_proj -> modelgl -> rebuild[1][0]); if (this_proj -> atoms[o_step][aid].numv) { int * new_id = NULL; new_id = allocint (this_proj -> natomes); new_id[aid] = 1; for (i=0; i atoms[o_step][aid].numv; i++) { j = this_proj -> atoms[o_step][aid].vois[i]; if (remove) remove_search -> todo[j] = 1; new_id[j] = i+2; this_object -> at_list[i+1] = * duplicate_atom (& this_proj -> atoms[o_step][j]); } clean_object_bonds (this_proj, o_step, this_object, new_id, movtion); if (new_id) { g_free (new_id); new_id = NULL; } correct_coordinates_for_object (this_proj, this_object, movtion); } return this_object; } /*! \fn atomic_object * create_object_from_overall_coordination (project * this_proj, int coord, int aid, atom_search * remove) \brief create object from all the atom(s) that have the same exact coordination than the target atom \param this_proj the target project \param coord 0 = total coordination, 1 = partial coordination \param aid target atom id \param remove remove search, if any */ atomic_object * create_object_from_overall_coordination (project * this_proj, int coord, int aid, atom_search * remove) { int i, j, k, l, m, n; atomic_object * this_object = g_malloc0(sizeof*this_object); int o_step = this_proj -> modelgl -> anim -> last -> img -> step; this_object -> coord = duplicate_coord_info (this_proj -> coord); this_object -> species = this_proj -> nspec; this_object -> old_z = duplicate_z (this_proj -> nspec, this_proj -> chemistry -> chem_prop[CHEM_Z]); this_object -> type = - (coord + 3); this_object -> origin = this_proj -> id; this_object -> occ = 1.0; int * new_id = NULL; new_id = allocint (this_proj -> natomes); gchar * str; gboolean check_bonding = FALSE; gboolean bonding = FALSE; switch (coord) { case 0: for (k=0; k natomes; k++) { if (this_proj -> atoms[o_step][k].coord[0] == aid) { i = this_proj -> atoms[o_step][k].numv; break; } } if (i) { bonding = TRUE; str = g_strdup_printf (_("%d-fold"), i); } else { str = g_strdup_printf (_("Isolated")); } j = 0; for (k=0; k natomes; k++) { if (this_proj -> atoms[o_step][k].numv == aid) { new_id[j] = k+1; j ++; } } break; case 1: j = 0; for (k=0; k natomes; k++) { l = this_proj -> atoms[o_step][k].sp; m = this_proj -> atoms[o_step][k].coord[coord-1]; for (n=0; n coord -> ntg[1][n]; if (m == aid) { new_id[j] = k+1; if (this_proj -> atoms[o_step][k].numv) bonding = TRUE; j ++; } } str = g_strdup_printf ("%s", env_name(this_proj, l, aid, 1, NULL)); break; } this_object -> name = g_strdup_printf (_("All %s - atom(s)"), str); g_free (str); check_bonding = (j != this_proj -> natomes && bonding) ? TRUE : FALSE; add_object_atoms (this_object, this_proj, o_step, j, new_id, check_bonding, remove); return this_object; } /*! \fn atomic_object * create_object_from_frag_mol (project * this_proj, int coord, int geo, atom_search * remove) \brief create object from a fragment or a molecule \param this_proj the target project \param coord 2 = fragment, 3 = molecule \param geo fragment or molecule id \param remove remove search, if any */ atomic_object * create_object_from_frag_mol (project * this_proj, int coord, int geo, atom_search * remove) { int i, j; atomic_object * this_object = g_malloc0(sizeof*this_object); if (coord == 2) { this_object -> name = g_strdup_printf (_("Fragment N°%d"), geo+1); } else { this_object -> name = g_strdup_printf (_("Molecule N°%d"), geo+1); } int o_step = this_proj -> modelgl -> anim -> last -> img -> step; this_object -> type = - (coord + 3); this_object -> origin = this_proj -> id; this_object -> occ = 1.0; this_object -> coord = duplicate_coord_info (this_proj -> coord); this_object -> species = this_proj -> nspec; this_object -> old_z = duplicate_z (this_proj -> nspec, this_proj -> chemistry -> chem_prop[CHEM_Z]); int * new_id = NULL; new_id = allocint (this_proj -> natomes); gboolean check_bonding = FALSE; gboolean bonding = FALSE; i = 0; for (j=0; jnatomes; j++) { if (this_proj -> atoms[o_step][j].coord[coord] == geo) { new_id[i] = j+1; if (this_proj -> atoms[o_step][j].numv) bonding = TRUE; i++; } } check_bonding = (i != this_proj -> natomes && bonding) ? TRUE : FALSE; add_object_atoms (this_object, this_proj, o_step, i, new_id, check_bonding, remove); return this_object; } /*! \fn void adjust_object_frag_coord (atomic_object * object) \brief adjust object number of fragment(s) \param object the target insert object */ void adjust_object_frag_coord (atomic_object * object) { int i, j, k; int * corf = allocint (object -> coord -> totcoord[2]); int * rorf = allocint (object -> coord -> totcoord[2]); for (i=0; i atoms; i++) { j = object -> at_list[i].coord[2]; rorf[j] ++; } j = k = 0; for (i=0; i coord -> totcoord[2]; i++) { corf[i] = k; if (rorf[i]) { j++; } else { k++; } } object -> coord -> totcoord[2] = j; for (i=0; i atoms; i++) { j = corf[object -> at_list[i].coord[2]]; object -> at_list[i].coord[2] -= j; object -> at_list[i].id = i; } remove_bonds_from_project (NULL, object, NULL, & object -> at_list[0], FALSE, FALSE); } /*! \fn int create_object_from_open_project (project * this_proj, int p) \brief create object from atom(s) of a project opened in the workspace \param this_proj the target project \param p the project id of the project that contains the atom(s) to copy */ int create_object_from_open_project (project * this_proj, int p) { int i, j; lib_object = g_malloc0(sizeof*lib_object); project * other_proj; other_proj = get_project_by_id (p); int o_step = other_proj -> modelgl -> anim -> last -> img -> step; switch (this_proj -> modelgl -> other_status) { case 0: i = other_proj -> natomes - other_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected; lib_object -> name = g_strdup_printf (_("All non-selected atom(s) from: %s"), get_project_by_id(p) -> name); break; case 1: i = other_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected; lib_object -> name = g_strdup_printf (_("All selected atom(s) from: %s"), get_project_by_id(p) -> name); break; case 2: i = other_proj -> natomes; lib_object -> name = g_strdup_printf (_("All atom(s) from: %s"), get_project_by_id(p) -> name); break; } lib_object -> type = FROM_PROJECT; lib_object -> origin = p; lib_object -> atoms = i; lib_object -> at_list = g_malloc0(lib_object -> atoms*sizeof*lib_object -> at_list); lib_object -> occ = 1.0; lib_object -> coord = duplicate_coord_info (other_proj -> coord); lib_object -> species = other_proj -> nspec; lib_object -> old_z = duplicate_z (other_proj -> nspec, other_proj -> chemistry -> chem_prop[CHEM_Z]); int * new_id = NULL; gboolean check_bonding = FALSE; new_id = allocint (other_proj -> natomes); if (this_proj -> modelgl -> other_status == 2) { for (j=0; j at_list[j] = * duplicate_atom (& other_proj -> atoms[o_step][j]); new_id[j] = j+1; if (j) { lib_object -> at_list[j].prev = & lib_object -> at_list[j-1]; lib_object -> at_list[j-1].next = & lib_object -> at_list[j]; } } } else { i = 0; for (j=0; j natomes; j++) { if (other_proj -> atoms[o_step][j].pick[0] == this_proj -> modelgl -> other_status) { lib_object -> at_list[i] = * duplicate_atom (& other_proj -> atoms[o_step][j]); new_id[j] = i+1; if (i) { lib_object -> at_list[i].prev = & lib_object -> at_list[i-1]; lib_object -> at_list[i-1].next = & lib_object -> at_list[i]; } i ++; } } } check_bonding = (i != other_proj -> natomes && (other_proj -> modelgl -> bonds[o_step][0] || other_proj -> modelgl -> bonds[o_step][1])) ? TRUE : FALSE; clean_object_bonds (other_proj, o_step, lib_object, new_id, check_bonding); if (i < other_proj -> natomes) { for (j=0; j atoms; j++) lib_object -> at_list[j].id = new_id[lib_object -> at_list[j].id]-1; if (check_bonding) check_coord_modification (other_proj, NULL, & lib_object -> at_list[0], lib_object, FALSE, FALSE); } correct_coordinates_for_object (other_proj, lib_object, TRUE); if (i < other_proj -> natomes && check_bonding) adjust_object_frag_coord (lib_object); return FROM_PROJECT; } /*! \fn void clean_this_object (int orig, int act, project * this_proj, atom_search * asearch) \brief clean object data \param orig - (fragmol id/species id +1), -1, or, orgin atom id \param act action in enum 'actions' \param this_proj the target project \param asearch the target atom search */ void clean_this_object (int orig, int act, project * this_proj, atom_search * asearch) { atomic_object * tmp_object = NULL; atomic_object * object; switch (asearch -> action) { case REPLACE: object = (this_proj -> modelgl) ? this_proj -> modelgl -> atom_win -> to_be_inserted[act] : cif_object; break; default: object = this_proj -> modelgl -> atom_win -> to_be_moved[act]; break; } while (object) { if ((object -> origin > -1 || object -> origin < -2) && object -> origin == orig) { if (object -> ibonds) g_free (object -> ibonds); if (object -> baryc) g_free (object -> baryc); if (object -> at_list) g_free (object -> at_list); if (object -> coord) g_free (object -> coord); object -> atoms = object -> bonds = 0; asearch -> in_selection --; if (object -> prev != NULL) { if (object -> next != NULL) { object -> next -> prev = object -> prev; object -> prev -> next = object -> next; tmp_object = object -> next; g_free (object); object = tmp_object; } else { object = object -> prev; g_free (object -> next); object -> next = NULL; break; } } else { if (object -> next != NULL) { object = object -> next; if (this_proj -> modelgl) { g_free (this_proj -> modelgl -> atom_win -> to_be_inserted[act]); } else { g_free (cif_object); } object -> prev = NULL; switch (asearch -> action) { case REPLACE: if (this_proj -> modelgl) { this_proj -> modelgl -> atom_win -> to_be_inserted[act] = object; } else { cif_object = object; } break; default: this_proj -> modelgl -> atom_win -> to_be_moved[act] = object; break; } } else { g_free (object); switch (asearch -> action) { case REPLACE: if (this_proj -> modelgl) { object = this_proj -> modelgl -> atom_win -> to_be_inserted[act] = NULL; } else { object = cif_object = NULL; } break; default: object = this_proj -> modelgl -> atom_win -> to_be_moved[act] = NULL; break; } } } } else { object = object -> next; } } } /*! \fn void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible) \brief to insert object in project \param stat in enum object_types \param orig - (fragmol id/species id +1), -1, or, orgin atom id \param this_proj the target project \param asearch the target atom search \param visible is the model edition window visible ? */ void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible) { int i, j; atomic_object * tmp_object = NULL; atomic_object * object; int act; if (asearch -> pointer[0].c == 3) { act = 0; } else if (asearch -> pointer[0].c == 5) { act = 1; } else { act = asearch -> pointer[0].c - 5; } if (! this_proj -> modelgl || ((! act || act == 3) && this_proj -> modelgl -> atom_win -> to_be_inserted[act])) { clean_this_object (orig, act, this_proj, asearch); } if (stat == FROM_DATA) lib_object = duplicate_atomic_object (copied_object); tint ulam; tmp_object = NULL; vec3_t coor_ins = vec3 (0.0,0.0,0.0); if (! visible) { if (act > 0) { if (this_proj -> modelgl) { if (this_proj -> modelgl -> anim && ! this_proj -> modelgl -> builder_win) { this_proj -> modelgl -> insert_coords = get_insertion_coordinates (this_proj -> modelgl); coor_ins = this_proj -> modelgl -> insert_coords; } } } else if (! act) { if (orig < -2 && asearch -> object && ! asearch -> mode) { int filter = get_asearch_filter (asearch); if (! filter) { tmp_object = create_object_from_species (this_proj, -orig-3, NULL); } else if (filter < 3) { tmp_object = create_object_from_atom_coordination (this_proj, filter-1, -orig-3, NULL); } else { tmp_object = create_object_from_frag_mol (this_proj, filter-1, -orig-3, NULL); } coor_ins = vec3 (tmp_object -> baryc[0], tmp_object -> baryc[1], tmp_object -> baryc[2]); if (tmp_object) g_free (tmp_object); } else if (orig > -1) { coor_ins = vec3 (this_proj -> atoms[0][orig].x, this_proj -> atoms[0][orig].y, this_proj -> atoms[0][orig].z); } } } if (stat > 0) { lib_object = g_malloc0(sizeof*lib_object); lib_object -> type = stat; lib_object -> old_z = allocint (1); lib_object -> old_z[0] = (stat < 119) ? stat : 0.0; lib_object -> at_list = g_malloc0(sizeof*lib_object -> at_list); lib_object -> coord = g_malloc0(sizeof*lib_object -> coord); lib_object -> coord -> species = 1; for (j=0; j<2; j++) { lib_object -> coord -> totcoord[j] = 1; lib_object -> coord -> ntg[j] = allocint (1); lib_object -> coord -> ntg[j][0] = 1; lib_object -> coord -> geolist[j] = allocdint (1, 1); if (j) lib_object -> coord -> partial_geo = alloctint (1, 1, 1); } lib_object -> coord -> totcoord[j] = 1; lib_object -> baryc = allocdouble (3); lib_object -> atoms = 1; lib_object -> occ = 1.0; lib_object -> species = 1; lib_object -> dim = get_object_dim (lib_object); if (stat > 119) { lib_object -> name = g_strdup_printf (_("Empty position")); } else { lib_object -> name = g_strdup_printf (_("%s atom"), periodic_table_info[stat].lab); } } if (this_proj -> modelgl) { ulam = ulam_coord (this_proj -> modelgl); if (this_proj -> modelgl -> atom_win -> to_be_inserted[act] == NULL) { this_proj -> modelgl -> atom_win -> to_be_inserted[act] = duplicate_atomic_object (lib_object); object = this_proj -> modelgl -> atom_win -> to_be_inserted[act]; } else { object = this_proj -> modelgl -> atom_win -> to_be_inserted[act]; while (object -> next) object = object -> next; object -> next = duplicate_atomic_object (lib_object); object -> next -> prev = object; object = object -> next; } } else { ulam.a = ulam.b = ulam.c = 0.0; if (cif_object == NULL) { cif_object = duplicate_atomic_object (lib_object); object = cif_object; } else { object = cif_object; while (object -> next) object = object -> next; object -> next = duplicate_atomic_object (lib_object); object -> next -> prev = object; object = object -> next; } } if (act) { object -> id = (object -> prev) ? object -> prev -> id + 1 : 0; } else { object -> id = (orig > -1) ? orig : (orig < -2) ? abs(orig) - 3 : abs(orig) - 1; } object -> origin = orig; for (i=0; i atoms; i++) { object -> at_list[i].x += coor_ins.x + object -> dim*ulam.a; object -> at_list[i].y += coor_ins.y + object -> dim*ulam.b; object -> at_list[i].z += coor_ins.z + object -> dim*ulam.c; } asearch -> in_selection ++; if (visible) { int * atid; if (act == 1 || act == 2) { if (object -> id > 0) { atid = duplicate_int (object -> id, asearch -> todo); g_free (asearch -> todo); } allocate_todo (asearch, object -> id+1); for (i=0; i id; i++) { asearch -> todo[i] = atid[i]; } asearch -> todo[i] = 0; update_search_tree (asearch); } } } atomes_1.3.1/src/opengl/edit/atom_coord.c0000664000175000017500000006061615212624223020010 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_coord.c * @short Functions to correct the coordination menus and the corresponding data pointers after edition * @author Sébastien Le Roux */ /* * This file: 'atom_coord.c' * * Contains: * - The functions to correct the coordination menus and the corresponding data pointers after edition * * List of functions: int test_this_coord (project * this_proj, int spec, int gid, int cid, int minc, int maxc); void print_coord_info (project * this_proj, coord_info * coord); void clean_coords_and_geoms (project * this_proj, atom_edition * edit, int new_spec, int rem, int adds, int * spid, int *** tmpgeo, gboolean * showcoord[2], gboolean * showpoly[2]); void new_coord_menus (project * this_proj, coord_info * coord, int new_spec, int nmols, gboolean * showcoord[2], gboolean * showpoly[2], gboolean * showfrag, gboolean update_it, gboolean update_mol); void recover_opengl_data (project * this_proj, int nmols, int add, int rem, int * num, int * rec, int *** tmpgeo, gboolean * showfrag); coord_info * duplicate_coord_info (coord_info * old_coord); */ #include "atom_edit.h" /*! \fn int test_this_coord (project * this_proj, int spec, int gid, int cid, int minc, int maxc) \brief Look for a type of coordination sphere in a model \param this_proj the target project \param spec the number of chemical species \param gid the coordination type \param cid the coordination id \param minc min value for coordination id \param maxc max value for coordination id */ int test_this_coord (project * this_proj, int spec, int gid, int cid, int minc, int maxc) { int i, j, k, l; l = 0; for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].sp; k = this_proj -> atoms[0][i].coord[gid]; if (j == spec && (k > maxc && k < minc)) return -1; if (j == spec && k == cid) { l ++; } } return l; } /*! \fn void print_coord_info (project * this_proj, coord_info * coord) \brief print coordination info \param this_proj the target project \param coord the target coordination info */ void print_coord_info (project * this_proj, coord_info * coord) { int * min_bs, * max_bs; int i, j, k, l, m; gchar * str; int test; if (coord -> species) { min_bs = allocint (coord -> species); max_bs = allocint (coord -> species); g_debug (" "); g_debug ("coord -> species = %d", coord -> species); g_debug (" "); for (i=0; i<4; i++) { g_debug (" --- start geo[%d] ---", i); g_debug ("geo i = %d, totcoord[%d] = %d", i, i, coord -> totcoord[i]); if ((i < 2 || i > 3) && coord -> totcoord[i]) { j = (i < 2) ? coord -> species : 1; g_debug (" spec i = %d, jmax= %d", i, j); g_debug (" "); for (k=0; k partial_geo[k][0][0]; for (m=0; m species; m++) { min_bs[k] = min (min_bs[k], coord -> partial_geo[k][0][m]); max_bs[k] = max (max_bs[k], coord -> partial_geo[k][0][m]); } for (l=1; l ntg[i][k]; l++) { for (m=0; m species; m++) { min_bs[k] = min (min_bs[k], coord -> partial_geo[k][l][m]); max_bs[k] = max (max_bs[k], coord -> partial_geo[k][l][m]); } } } for (k=0; k ntg[%d][%d] = %d", i, k, i, k, coord -> ntg[i][k]); test = (this_proj) ? test_this_coord (this_proj, k, i, 0, min_bs[k], max_bs[k]) : 0; str = g_strdup_printf (" l = %d, coord -> geolist[%d][%d][%d]= %d, num[at,%d]= %d", 0, i, k, 0, coord -> geolist[i][k][0], 0, test); if (coord -> ntg[i][k] > 1) { for (l=1; l ntg[i][k]; l++) { test = (this_proj) ? test_this_coord (this_proj, k, i, l, min_bs[k], max_bs[k]) : 0; str = g_strdup_printf ("%s\n l = %d, coord -> geolist[%d][%d][%d]= %d, num[at,%d]= %d", str, l, i, k, l, coord -> geolist[i][k][l], l, test); } } g_debug ("%s", str); g_free (str); } if (i == 1) { g_debug (" "); for (k=0; k partial_geo[%d][%d][%d]= %d", k, k, 0, 0, coord -> partial_geo[k][0][0]); for (l=1; l partial_geo[%d][%d][%d]= %d", str, k, k, 0, l, coord -> partial_geo[k][0][l]); } if (coord -> ntg[i][k] > 1) { for (l=1; l ntg[i][k]; l++) { str = g_strdup_printf ("%s\n\n k = %d, coord -> partial_geo[%d][%d][%d]= %d", str, k, k, l, 0, coord -> partial_geo[k][l][0]); for (m=1; m partial_geo[%d][%d][%d]= %d", str, k, k, l, m, coord -> partial_geo[k][l][m]); } } } g_debug ("%s", str); g_free (str); } } g_debug (" "); } g_debug (" --- end geo[%d] ---", i); g_debug (" "); } g_free (min_bs); g_free (max_bs); } else { g_debug (" "); g_debug ("Coord is empty no species !"); g_debug (" "); } } /*! \fn coord_info * duplicate_coord_info (coord_info * old_coord) \brief duplicate coordination information data structure \param old_coord the coordination info to duplicate */ coord_info * duplicate_coord_info (coord_info * old_coord) { coord_info * new_coord = g_malloc0(sizeof*new_coord); int i, j, k, l; if (! old_coord -> species) return new_coord; new_coord -> species = old_coord -> species; new_coord -> cmax = old_coord -> cmax; new_coord -> cmin = old_coord -> cmin; for (i=0; i<10; i++) { new_coord -> totcoord[i] = old_coord -> totcoord[i]; if ((i < 2 || i > 3) && old_coord -> totcoord[i]) { j = (i < 2) ? new_coord -> species : 1; new_coord -> ntg[i] = duplicate_int (j, old_coord -> ntg[i]); new_coord -> geolist[i] = g_malloc0(j*sizeof*new_coord -> geolist[i]); if (i == 1) new_coord -> partial_geo = g_malloc0(j*sizeof*new_coord -> partial_geo); for (k=0; k geolist[i][k] = duplicate_int (new_coord -> ntg[i][k], old_coord -> geolist[i][k]); if (i == 1) { new_coord -> partial_geo[k] = g_malloc0(new_coord -> ntg[i][k]*sizeof*new_coord -> partial_geo[k]); for (l=0; l ntg[i][k]; l++) { new_coord -> partial_geo[k][l] = duplicate_int (new_coord -> species, old_coord -> partial_geo[k][l]); } } } } } return new_coord; } /*! \fn void clean_coords_and_geoms (project * this_proj, atom_edition * edit, int new_spec, int rem, int adds, int * spid, int *** tmpgeo, gboolean * showcoord[2], gboolean * showpoly[2]) \brief clean coordination data and atomic coordination id data \param this_proj the target project \param edit \param new_spec the number of chemical species \param rem the number of chemical species to remove \param adds the number of new chemical species \param spid the number of atom(s) by chemical species \param tmpgeo the new number of coordination [c] by chemical species [s] 'coorrd -> ntg[c][s]' \param showcoord the coordination show status \param showpoly the polyhedra show status */ void clean_coords_and_geoms (project * this_proj, atom_edition * edit, int new_spec, int rem, int adds, int * spid, int *** tmpgeo, gboolean * showcoord[2], gboolean * showpoly[2]) { int i, j, k, l, m, n, o, p, q, r, s; int * tntg; coord_info * old_coord = duplicate_coord_info (edit -> coord); g_free (edit -> coord); edit -> coord = g_malloc0(sizeof*edit -> coord); coord_info * tmp_coord = edit -> coord; this_proj -> coord -> cmin = 20; this_proj -> coord -> cmax = 0; for (i=0; i<2; i++) { tmp_coord -> totcoord[i] = 0; tmp_coord -> geolist[i] = g_malloc0(new_spec*sizeof*tmp_coord -> geolist[i]); tmp_coord -> ntg[i] = allocint (new_spec); if (i) tmp_coord -> partial_geo = g_malloc0(new_spec*sizeof*tmp_coord -> partial_geo); showcoord[i] = allocbool(old_coord -> totcoord[i]); showpoly[i] = allocbool(old_coord -> totcoord[i]); // g_debug ("i= %d, allocating showcoord/poly of %d", i, old_coord -> totcoord[i]); tmp_coord -> totcoord[i] = 0; j = s = 0; // g_debug ("i= %d, new_spec= %d, rem= %d", i, new_spec, rem); for (k=0; k ntg[i][k]); tntg = allocint (old_coord -> ntg[i][k]); // if (i == 0) g_debug (" checking geom:: i= %d, SP= %d, ntg[%d][%d]= %d", i, k, i, k, old_coord -> ntg[i][k]); for (m=0; m ntg[i][k]; m++) { // if (i == 0) g_debug (" :: m = %d, tmpgeo[%d][%d][%d]= %d", m, i, k, m, tmpgeo[i][k][m]); if (tmpgeo[i][k][m]) { p = 1; if (i) { //g_debug ("checking partial, m= %d, l= %d", m, l); if (l) { p = 0; for (o=0; o partial_geo[k][m][q] != old_coord -> partial_geo[k][o][q]) { p = 1; break; } } if (! p) break; } } } else { for (o=0; o geolist[i][k][m] == old_coord -> geolist[i][k][o]) { // g_debug (" WAS HERE:: k= %d, m= %d, o= %d, geolist = %d", k, m, o, old_coord -> geolist[i][k][m]); p = 0; break; } } } if (p) { // g_debug (" i= %d, tntg[m]= 1, m= %d", i, m); tntg[m] = 1; o = l; l ++; } // if (i == 0) g_debug (" geo= %d, old_sp= %d, new_sp= %d, old_geo= %d, new_geo= %d", i, k, s, m, o); for (p=0; p natomes; p++) { if (this_proj -> atoms[0][p].sp == s) { if (this_proj -> atoms[0][p].coord[i] == m) { this_proj -> atoms[0][p].coord[i] = o; } } } } } if (l) { tmp_coord -> geolist[i][j] = allocint (l); if (i) { // g_debug ("allocating partial[%d] of %d and %d", j, l, new_spec); tmp_coord -> partial_geo[j] = allocdint (l, new_spec); } // if (! i) g_debug (" ntg[0][%d]= %d", j, l); tmp_coord -> ntg[i][j] = l; tmp_coord -> totcoord[i] += l; p = (k < new_spec+rem-adds) ? k : new_spec+rem-adds; q = 0; for (r=0; r coord -> ntg[i][r]; p = 0; for (r=0; r ntg[i][r]; m = 0; for (n=0; n ntg[i][k]; n++) { // g_debug ("n= %d, tntg[%d]= %d", n, n, tntg[n]); if (tntg[n]) { tmp_coord -> geolist[i][j][m] = old_coord -> geolist[i][k][n]; this_proj -> coord -> cmax = max (tmp_coord -> geolist[i][j][m], this_proj -> coord -> cmax); this_proj -> coord -> cmin = min (tmp_coord -> geolist[i][j][m], this_proj -> coord -> cmin); if (k < new_spec-adds+rem) { if (n < this_proj -> coord -> ntg[i][k]) { //g_debug ("p= %d, m= %d, p+m= %d, q= %d, n= %d, q+n= %d", p, m, p+m, q, n, q+n); showcoord[i][p+m] = this_proj -> modelgl -> anim -> last -> img -> show_coord[i][q+n]; showpoly[i][p+m] = this_proj -> modelgl -> anim -> last -> img -> show_poly[i][q+n]; } else { showcoord[i][p+m] = TRUE; showpoly[i][p+m] = FALSE; } } else { //g_debug ("p= %d, m= %d, p+m= %d", p, m, p+m); showcoord[i][p+m] = TRUE; showpoly[i][p+m] = FALSE; } if (i) { o = 0; for (r=0; r partial_geo[j][m][o] = old_coord -> partial_geo[k][n][r]; //g_debug ("j= %d, m= %d, o= %d, partial= %d, %d", j, m, o, tmp_coord -> partial_geo[j][m][o], old_coord -> partial_geo[k][n][r]); o ++; } } } m ++; } } } g_free (tntg); j ++; } s += (spid[k]) ? 1 : 0; } } } /*! \fn void new_coord_menus (project * this_proj, coord_info * coord, int new_spec, int nmols, gboolean * showcoord[2], gboolean * showpoly[2], gboolean * showfrag, gboolean update_it, gboolean update_frag, gboolean update_mol) \brief update coordination(s), fragment(s) and molecule(s) OpenGL menus and associated data pointers \param this_proj the target project \param coord the target coordination info data structure \param new_spec the number of chemical species \param nmols the number of fragment(s) to add \param showcoord the coordination show status \param showpoly the polyhedra show status \param showfrag the fragment show status \param update_it update atoms data (and GTK3 menus) \param update_mol update molecule(s) data */ void new_coord_menus (project * this_proj, coord_info * coord, int new_spec, int nmols, gboolean * showcoord[2], gboolean * showpoly[2], gboolean * showfrag, gboolean update_it, gboolean update_mol) { int i, j, k; for (i=0; i<4; i++) { g_free (this_proj -> modelgl -> gcid[i]); this_proj -> modelgl -> gcid[i] = NULL; } for (i=0; i<2; i++) init_opengl_coords (i, coord -> totcoord[i], 0); i = 0; for (j=0; j ntg[0][j], coord -> geolist[0][j]); } i ++; for (j=0; j ntg[1][j]); for (k=0; k ntg[1][j]; k++) partial_geo_out_ (& j, & k, & new_spec, coord -> partial_geo[j][k]); init_menu_coordinations_ (& i, & j, & coord -> ntg[1][j], coord -> geolist[1][j]); } i = 2; this_proj -> coord -> totcoord[i] += nmols; if (this_proj -> coord -> totcoord[i]) { this_proj -> modelgl -> adv_bonding[i-2] = TRUE; init_opengl_coords (i, this_proj -> coord -> totcoord[i], 0); init_menu_fragmol_ (& i); } else { this_proj -> modelgl -> adv_bonding[i-2] = FALSE; } if (update_mol) { i = 3; if (this_proj -> coord -> totcoord[i]) { this_proj -> modelgl -> adv_bonding[i-2] = TRUE; init_opengl_coords (i, this_proj -> coord -> totcoord[i], 0); init_menu_fragmol_ (& i); } } else { this_proj -> modelgl -> adv_bonding[1] = FALSE; this_proj -> coord -> totcoord[3] = 0; } #ifdef GTK3 prep_all_coord_menus (this_proj -> modelgl); #endif if (update_it) { gboolean * viz[2]; for (i=0; i<2; i++) viz[i] = allocbool (this_proj -> natomes); for (i=0; i natomes; i++) { for (j=0; j<2; j++) viz[j][i] = this_proj -> atoms[0][i].show[j]; } #ifdef GTK3 // GTK3 Menu Action To Check for (i=0; i<2; i++) { for (j=0; j coord -> totcoord[i]; j++) { if (this_proj -> modelgl -> ogl_geom[0][i][j]) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_geom[0][i][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][i][j]) != showcoord[i][j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][i][j], showcoord[i][j]); } } } if (this_proj -> modelgl -> ogl_poly[0][i][j]) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_poly[0][i][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[0][i][j]) != showpoly[i][j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[0][i][j], showpoly[i][j]); } } } } g_free (showcoord[i]); g_free (showpoly[i]); } for (i=0; i coord -> totcoord[2]; i++) { if (this_proj -> modelgl -> ogl_geom[0][2][i]) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_geom[0][2][i])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][2][i]) != showfrag[i]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][2][i], showfrag[i]); } } } } #endif for (i=0; i natomes; i++) { for (j=0; j<2; j++) this_proj -> atoms[0][i].show[j] = viz[j][i]; } for (i=0; i<2; i++) g_free (viz[i]); } } /*! \fn void recover_opengl_data (project * this_proj, int nmols, int add, int rem, int * num, int * rec, int *** tmpgeo, gboolean * showfrag) \brief recover image pointer data and OpenGL window menu structure \param this_proj the target project \param nmols the number of molecules \param add the number of new chemical species \param rem the number of chemical species to remove \param num the number of atom(s) by chemical species \param rec the lsit of removed chemical species, if any \param tmpgeo the new number of coordination [c] by chemical species [s] 'coorrd -> ntg[c][s]' \param showfrag the saved fragment(s) show information */ void recover_opengl_data (project * this_proj, int nmols, int add, int rem, int * num, int * rec, int *** tmpgeo, gboolean * showfrag) { // Now OpenGL data int old_spec = this_proj -> nspec; //g_debug ("recover opengl:: old_spec= %d, add= %d, rem= %d", old_spec, add, rem); int new_spec = old_spec + add - rem; gboolean * showcoord[2]; gboolean * showpoly[2]; gboolean update_it = FALSE; clean_coords_and_geoms (this_proj, this_proj -> modelgl -> atom_win, new_spec, rem, add, num, tmpgeo, showcoord, showpoly); if (add || rem) { if (old_spec) free_glwin_spec_data (this_proj, old_spec); glwin_init_spec_data (this_proj, new_spec); } this_proj -> nspec = new_spec; active_project_changed (this_proj -> id); if ((add && old_spec) || rem) { int h, i, j, k, l, m, n, o, p, q; image * new_img = g_malloc0(sizeof*new_img); setup_image_spec_data (this_proj, new_img); image * old_img = this_proj -> modelgl -> anim -> last -> img; // copy info in new data, then clean old data and copy it back for (i=0; i<2; i++) { for (j=0; j show_atom[i][j-k] = old_img -> show_atom[i][j]; new_img -> show_label[i][j-k] = old_img -> show_label[i][j]; } } } for (h=0; h<2*old_spec; h++) { i = (h < old_spec) ? h : h - old_spec; if (num[i]) { j = rec[i]; k = (h < old_spec) ? 0 : 1; l = h - k*old_spec - j + k*new_spec; new_img -> sphererad[l] = old_img -> sphererad[h]; new_img -> atomicrad[l] = old_img -> atomicrad[h]; new_img -> pointrad[l] = old_img -> pointrad[h]; new_img -> at_color[l].red = old_img -> at_color[h].red; new_img -> at_color[l].green = old_img -> at_color[h].green; new_img -> at_color[l].blue = old_img -> at_color[h].blue; new_img -> at_color[l].alpha = old_img -> at_color[h].alpha; for (m=0; m<2*old_spec; m++) { n = (m < old_spec) ? m : m - old_spec; if (num[n]) { o = rec[n]; p = (m < old_spec) ? 0 : 1; q = m - p*old_spec - o + p*new_spec; new_img -> linerad[l][q] = old_img -> linerad[h][m]; new_img -> bondrad[l][q] = old_img -> bondrad[h][m]; } } } } for (i=0; i<2; i++) { if (old_img -> show_atom[i] != NULL) { g_free (old_img -> show_atom[i]); old_img -> show_atom[i] = NULL; } if (old_img -> show_label[i] != NULL) { g_free (old_img -> show_label[i]); old_img -> show_label[i] = NULL; } } for (i=0; i<9; i++) { g_free (old_img -> spcolor[i]); old_img -> spcolor[i] = NULL; } g_free (old_img -> sphererad); g_free (old_img -> atomicrad); g_free (old_img -> pointrad); g_free (old_img -> at_color); g_free (old_img -> linerad); g_free (old_img -> bondrad); for (i=0; i<2; i++) { old_img -> show_atom[i] = duplicate_bool (new_spec, new_img -> show_atom[i]); old_img -> show_label[i] = duplicate_bool (new_spec, new_img -> show_label[i]); } old_img -> sphererad = duplicate_double (2*new_spec, new_img -> sphererad); old_img -> atomicrad = duplicate_double (2*new_spec, new_img -> atomicrad); old_img -> pointrad = duplicate_double (2*new_spec, new_img -> pointrad); old_img -> at_color = duplicate_color (2*new_spec, new_img -> at_color); old_img -> linerad = g_malloc0(2*new_spec*sizeof*old_img -> linerad); old_img -> bondrad = g_malloc0(2*new_spec*sizeof*old_img -> bondrad); for (i=0; i<2*new_spec; i++) { old_img -> linerad[i] = duplicate_double (2*new_spec, new_img -> linerad[i]); old_img -> bondrad[i] = duplicate_double (2*new_spec, new_img -> bondrad[i]); } for (i=0; i<9; i++) { old_img -> spcolor[i] = NULL; if (i < 2) { old_img -> spcolor[i] = g_malloc0(new_spec*sizeof*old_img -> spcolor[i]); } else { old_img -> spcolor[i] = g_malloc0(1*sizeof*old_img -> spcolor[i]); old_img -> spcolor[i][0] = NULL; } } g_free (new_img); update_it = TRUE; } else if (add) { setup_image_spec_data (this_proj, this_proj -> modelgl -> anim -> last -> img); } if (add || rem) { #ifdef GTK3 // GTK3 Menu Action To Check int i; for (i=1; i modelgl -> ogl_coord[i] = NULL; for (i=0; i modelgl -> ogl_rings[i] = NULL; this_proj -> modelgl -> ogl_chains[0] = NULL; prepare_opengl_menu_bar (this_proj -> modelgl); // GTK3 Menu Action To Check set_advanced_bonding_menus (this_proj -> modelgl); #endif } new_coord_menus (this_proj, this_proj -> modelgl -> atom_win -> coord, new_spec, nmols, showcoord, showpoly, showfrag, update_it, (add || rem) ? FALSE : (! nmols) ? TRUE : FALSE); } atomes_1.3.1/src/opengl/edit/cell_shift.c0000664000175000017500000005046315212624223017775 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cell_shift.c * @short Functions to create the 'shift cell center' tab for the cell edition window * @author Sébastien Le Roux */ /* * This file: 'cell_shift.c' * * Contains: * - The functions to create the 'shift cell center' tab for the cell edition window * * List of functions: G_MODULE_EXPORT gboolean scroll_shift_coord (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void modify_coordinates_in_lattice (project * this_proj, mat4_t * dlat, mat4_t * drec, int refresh, int density); void shift_it (vec3_t shift, int refresh, int proj); void adjust_it (int refresh, int proj); void shift_has_changed (gpointer data, double val); void wrapping (glwin * view); G_MODULE_EXPORT void set_shift (GtkEntry * res, gpointer data); G_MODULE_EXPORT void shift_coord (GtkRange * range, gpointer data); G_MODULE_EXPORT void wrap_coord (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void wrap_coord (GtkToggleButton * but, gpointer data); GtkWidget * create_cell_entries (project * this_proj, int i); GtkWidget * create_shift_box (project * this_proj); GtkWidget * shift_center_tab (project * this_proj); */ #include "cell_edit.h" /*! \fn void modify_coordinates_in_lattice (project * this_proj, mat4_t * dlat, mat4_t * drec, int refresh, int density) \brief modify atomic coordinates in lattice \param this_proj the target project \param dlat lattice vectors matrix \param drec reciprocal vectors matrix \param refresh refresh rendering data \param density 0= shift, 1 = density modification */ void modify_coordinates_in_lattice (project * this_proj, mat4_t * dlat, mat4_t * drec, int refresh, int density) { vec3_t pos; vec3_t res; int i, j; box_info * box; mat4_t lat, rec; if (! density) { box = & this_proj -> cell.box[0]; lat = mat4 (box -> vect[0][0], box -> vect[1][0], box -> vect[2][0], 0.0, box -> vect[0][1], box -> vect[1][1], box -> vect[2][1], 0.0, box -> vect[0][2], box -> vect[1][2], box -> vect[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); rec = mat4 (box -> rvect[0][0], box -> rvect[0][1], box -> rvect[0][2], 0.0, box -> rvect[1][0], box -> rvect[1][1], box -> rvect[1][2], 0.0, box -> rvect[2][0], box -> rvect[2][1], box -> rvect[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); } for (i=0; i steps; i++) { for (j=0; j natomes; j++) { pos = vec3(this_proj -> atoms[i][j].x, this_proj -> atoms[i][j].y, this_proj -> atoms[i][j].z); if (density) { res = m4_mul_pos(*drec, pos); pos = m4_mul_pos(*dlat, res); } else { if (this_proj -> cell.npt && i) { box = & this_proj -> cell.box[i]; lat = mat4 (box -> vect[0][0], box -> vect[1][0], box -> vect[2][0], 0.0, box -> vect[0][1], box -> vect[1][1], box -> vect[2][1], 0.0, box -> vect[0][2], box -> vect[1][2], box -> vect[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); rec = mat4 (box -> rvect[0][0], box -> rvect[0][1], box -> rvect[0][2], 0.0, box -> rvect[1][0], box -> rvect[1][1], box -> rvect[1][2], 0.0, box -> rvect[2][0], box -> rvect[2][1], box -> rvect[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); } res = m4_mul_pos(rec, pos); res.x -= (int)res.x; res.x -= (int)(res.x/0.5); res.y -= (int)res.y; res.y -= (int)(res.y/0.5); res.z -= (int)res.z; res.z -= (int)(res.z/0.5); pos = m4_mul_pos(lat, res); } this_proj -> atoms[i][j].x = pos.x; this_proj -> atoms[i][j].y = pos.y; this_proj -> atoms[i][j].z = pos.z; } if (density) { for (j=0; j modelgl -> bonds[i][1]; j++) { pos = vec3(this_proj -> modelgl -> clones[i][j].x, this_proj -> modelgl -> clones[i][j].y, this_proj -> modelgl -> clones[i][j].z); res = m4_mul_pos(*drec, pos); pos = m4_mul_pos(*dlat, res); this_proj -> modelgl -> clones[i][j].x = pos.x; this_proj -> modelgl -> clones[i][j].y = pos.y; this_proj -> modelgl -> clones[i][j].z = pos.z; } } } if (refresh) { i = activep; active_project_changed (this_proj -> id); if (! density) { this_proj -> dmtx = run_distance_matrix (NULL, 0, 1); #ifdef GTK3 // GTK3 Menu Action To Check widget_set_sensitive (active_glwin -> ogl_clones[0], active_glwin -> allbonds[1]); #endif } else { /*if (this_proj -> modelgl -> adv_bonding[1]) { for (j=0; j<2; j++) { if (this_proj -> modelgl -> anim -> last -> img -> color_map[j] == 4 || this_proj -> modelgl -> anim -> last -> img -> color_map[j] == 5) { if (this_proj -> modelgl -> color_styles[j*ATOM_MAPS]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> color_styles[j*ATOM_MAPS], TRUE); set_color_map (this_proj -> modelgl -> color_styles[j*ATOM_MAPS], & this_proj -> modelgl -> colorp[j*ATOM_MAPS][0]); } } } }*/ /*this_proj -> modelgl -> bonding = FALSE; this_proj -> modelgl -> adv_bonding[0] = this_proj -> modelgl -> adv_bonding[1] = FALSE; if (this_proj -> force_field[0]) { g_free (this_proj -> force_field[0]); this_proj -> force_field[0] = NULL; }*/ /*int j; if (this_proj -> modelgl -> rings) { this_proj -> modelgl -> rings = FALSE; for (j=0; j<5; j++) { clean_rings_data (j, this_proj -> modelgl); #ifdef GTK3 update_rings_menus (this_proj -> modelgl); #endif } } if (this_proj -> modelgl -> chains) { clean_chains_data (this_proj -> modelgl); #ifdef GTK3 update_chains_menus (this_proj -> modelgl); #endif }*/ } init_default_shaders (this_proj -> modelgl); if (density) this_proj -> modelgl -> create_shaders[MDBOX] = TRUE; if (this_proj -> modelgl -> n_shaders[SLABS][0]) this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); if (i != this_proj -> id) active_project_changed (i); } } /*! \fn void shift_it (vec3_t shift, int refresh, int proj) \brief shift atomic coordinates \param shift the shift vector \param refresh refresh rendering data \param proj the target project id */ void shift_it (vec3_t shift, int refresh, int proj) { project * this_proj = get_project_by_id (proj); translate (this_proj, -1, 0, shift); modify_coordinates_in_lattice (this_proj, NULL, NULL, refresh, 0); } /*! \fn void adjust_it (int refresh, int proj) \brief adjust atomic coordinates \param refresh refresh rendering data \param proj the project id */ void adjust_it (int refresh, int proj) { int i, j; project * this_proj = get_project_by_id (proj); box_info * box = & this_proj -> cell.box[0]; mat4_t rec = mat4 (box -> rvect[0][0], box -> rvect[0][1], box -> rvect[0][2], 0.0, box -> rvect[1][0], box -> rvect[1][1], box -> rvect[1][2], 0.0, box -> rvect[2][0], box -> rvect[2][1], box -> rvect[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); for (i=0; i<3; i++) box -> param[0][i] = this_proj -> modelgl -> cell_win -> cparam[i+3]; i = this_proj -> cell.ltype; this_proj -> cell.ltype = 1; j = activep; active_project_changed (this_proj -> id); this_proj -> cell.ltype = i; active_project_changed (j); mat4_t lat = mat4 (box -> vect[0][0], box -> vect[1][0], box -> vect[2][0], 0.0, box -> vect[0][1], box -> vect[1][1], box -> vect[2][1], 0.0, box -> vect[0][2], box -> vect[1][2], box -> vect[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); modify_coordinates_in_lattice (this_proj, & lat, & rec, refresh, 1); double m = 0.0; for (i=0; i nspec; i++) m += this_proj -> chemistry -> nsps[i] * this_proj -> chemistry -> chem_prop[CHEM_M][i]; this_proj -> cell.density = 10.0*m/(this_proj -> cell.volume*6.02214179); display_density (this_proj -> modelgl -> cell_win, this_proj -> cell.volume, this_proj -> cell.density, this_proj -> natomes/this_proj -> cell.volume); } /*! \fn void shift_has_changed (gpointer data, double val) \brief shift atomic coordinates \param data the associated data pointer \param val the shift value */ void shift_has_changed (gpointer data, double val) { tint * dat = (tint *)data; int i, j, k, l; project * this_proj = get_project_by_id (dat -> a); cell_edition * cedit = this_proj -> modelgl -> cell_win; l = (this_proj -> cell.npt) ? this_proj -> modelgl -> anim -> last -> img -> step : 0; if (dat -> b < 3) { if (val >= - this_proj -> cell.box[l].param[0][dat -> b]/2.0 && val <= this_proj -> cell.box[l].param[0][dat -> b]/2.0) { if (val != cedit -> cparam[dat -> b]) { double cparam[3]; for (i=0; i<3; i++) cparam[i] = - cedit -> cparam[i]; shift_it (vec3(cparam[0], cparam[1], cparam[2]), 0, dat -> a); cedit -> cparam[dat -> b] = val; for (i=0; i<3; i++) cparam[i] = cedit -> cparam[i]; shift_it (vec3(cparam[0], cparam[1], cparam[2]), 1, dat -> a); } } } else if (dat -> b < 6) { if (val > 0.0 && val <= cedit -> initbox[dat -> b-3]*100.0) { if (val != cedit -> cparam[dat -> b]) { adjust_it (0, dat -> a); if (cedit -> homo_density) { double v = val / cedit -> initbox[dat -> b - 3]; for (i=0; i<3; i++) cedit -> cparam[i+3] = v * cedit -> initbox[i]; } else { cedit -> cparam[dat -> b] = val; } adjust_it (1, dat -> a); } } } else if (dat -> b > 5 && dat -> b < 15) { i = (dat -> b < 9) ? 6 : (dat -> b < 12) ? 9 : dat -> b; j = (dat -> b < 9) ? 1 : (dat -> b < 12) ? 2 : 10; k = (dat -> b < 9) ? 1 : 0; if (val > -k * cedit -> initbox[dat -> b - i] && val <= j * cedit -> initbox[dat -> b - i]) { if (val != cedit -> cparam[dat -> b]) { cedit -> cparam[dat -> b] = val; if (this_proj -> modelgl -> n_shaders[SLABS][0]) { this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); } } } } else if (dat -> b > 14) { i = (dat -> b < 18) ? 0 : 1; if (val >= -i * 180.0 && val <= 180.0) { if (val != cedit -> cparam[dat -> b]) { cedit -> cparam[dat -> b] = val; if (this_proj -> modelgl -> n_shaders[SLABS][0]) { this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); } } } } if ((dat -> b > 2 && dat -> b < 6) && cedit -> homo_density) { for (i=3; i<6; i++) { update_entry_double (GTK_ENTRY(cedit -> edit_entry[i]), cedit -> cparam[i]); gtk_range_set_value (GTK_RANGE(cedit -> edit_scale[i]), cedit -> cparam[i]); } } else { update_entry_double (GTK_ENTRY(cedit -> edit_entry[dat -> b]), cedit -> cparam[dat -> b]); gtk_range_set_value (GTK_RANGE(cedit -> edit_scale[dat -> b]), cedit -> cparam[dat -> b]); } } /*! \fn G_MODULE_EXPORT void set_shift (GtkEntry * res, gpointer data) \brief set atomic coordinates shift \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_shift (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); shift_has_changed (data, v); } /*! \fn G_MODULE_EXPORT gboolean scroll_shift_coord (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief shift coordinates callback - scroll \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_shift_coord (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { shift_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void shift_coord (GtkRange * range, gpointer data) \brief shift coordinates callback - range \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void shift_coord (GtkRange * range, gpointer data) { shift_has_changed (data, gtk_range_get_value (range)); } /*! \fn GtkWidget * create_cell_entries (project * this_proj, int i) \brief create the cell entry widgets \param this_proj the target project \param i target parameter/action id (shift, cut, density) */ GtkWidget * create_cell_entries (project * this_proj, int i) { int j, k, l, m; gchar * str; GtkWidget * lab; GtkWidget * hbox; gchar * axis[3]={"x", "y", "z"}; gchar * angl[3]={"α", "β", "ɣ"}; gchar * unit[2]={"Å", "°"}; GtkWidget * vbox = create_vbox (5); cell_edition * cedit = this_proj -> modelgl -> cell_win; cedit -> edit_entry[i] = create_entry (G_CALLBACK(set_shift), 100, 15, FALSE, & this_proj -> modelgl -> colorp[i][0]); if (i < 3 || (i > 5 && i < 12)) { j = (i < 3) ? i : (i < 9) ? i - 6 : i - 9; k = (i < 3) ? 2 : 1; l = (i < 9) ? 1 : 0; m = (i < 9) ? 1 : 2; cedit -> edit_scale[i] = create_hscale (-l*this_proj -> cell.box[0].param[0][j]/k, m*this_proj -> cell.box[0].param[0][j]/k, 0.01, cedit -> cparam[i], GTK_POS_TOP, 3, 200, G_CALLBACK(shift_coord), G_CALLBACK(scroll_shift_coord), & this_proj -> modelgl -> colorp[i][0]); str = g_strdup_printf (_("on %s axis [+/- Å]"), axis[j]); } else if (i < 6) { cedit -> initbox[i-3] = cedit -> cparam[i] = this_proj -> cell.box[0].param[0][i-3]; cedit -> edit_scale[i] = create_hscale (0.0, this_proj -> cell.box[0].param[0][i-3]*10.0, 0.01, cedit -> cparam[i], GTK_POS_TOP, 3, 200, G_CALLBACK(shift_coord), G_CALLBACK(scroll_shift_coord), & this_proj -> modelgl -> colorp[i][0]); str = g_strdup_printf (_("Lattice %s [+/- Å]"), box_prop[0][i-3]); } else if (i == 12) { cedit -> edit_scale[i] = create_hscale (0.0, this_proj -> cell.box[0].param[0][0]*10.0, 0.01, cedit -> cparam[i], GTK_POS_TOP, 3, 200, G_CALLBACK(shift_coord), G_CALLBACK(scroll_shift_coord), & this_proj -> modelgl -> colorp[i][0]); str = g_strdup_printf (_("Length [+/- Å]")); } else if (i > 14 && i < 18) { cedit -> edit_scale[i] = create_hscale (0.0, 180.0, 0.01, cedit -> cparam[i], GTK_POS_TOP, 3, 200, G_CALLBACK(shift_coord), G_CALLBACK(scroll_shift_coord), & this_proj -> modelgl -> colorp[i][0]); str = g_strdup_printf (_("Angle %s [+/- °]"), angl[i-15]); } else if (i > 17) { cedit -> edit_scale[i] = create_hscale (-180, 180.0, 0.01, cedit -> cparam[i], GTK_POS_TOP, 3, 200, G_CALLBACK(shift_coord), G_CALLBACK(scroll_shift_coord), & this_proj -> modelgl -> colorp[i][0]); str = g_strdup_printf (_("on %s axis [+/- °]"), axis[i-18]); } else { cedit -> edit_scale[i] = create_hscale (0.0, this_proj -> cell.box[0].param[0][0]*10.0, 0.01, cedit -> cparam[i], GTK_POS_TOP, 3, 200, G_CALLBACK(shift_coord), G_CALLBACK(scroll_shift_coord), & this_proj -> modelgl -> colorp[i][0]); str = g_strdup_printf (_("Radius [+/- Å]")); } update_entry_double (GTK_ENTRY(cedit -> edit_entry[i]), cedit -> cparam[i]); lab = markup_label(unit[(i > 14 && i < 18) ? 1 : 0], 20, -1, 0.0, 0.5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 110, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cedit -> edit_scale[i], FALSE, FALSE, 20); GtkWidget * fixed = gtk_fixed_new (); gtk_fixed_put (GTK_FIXED(fixed), cedit -> edit_entry[i], 0, 15); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, FALSE, FALSE, 0); fixed = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, FALSE, FALSE, 5); gtk_fixed_put (GTK_FIXED(fixed), lab, (i<3) ? 0 : -50, 25); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); return vbox; } /*! \fn GtkWidget * create_shift_box (project * this_proj) \brief create shift box widgets \param this_proj the target project */ GtkWidget * create_shift_box (project * this_proj) { GtkWidget * vbox = create_vbox (BSEP); int i; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Shift the position of the cell center *: "), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); for (i=0; i<3; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("* requires all atoms to be wrapped in the unit cell"), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); widget_set_sensitive (vbox, this_proj -> modelgl -> wrapped); show_the_widgets (vbox); return vbox; } /*! \fn void wrapping (glwin * view) \brief wrapping atomic coordinates \param view the target glwin */ void wrapping (glwin * view) { gchar * text = _("You are about to put all the atoms back inside the model box\n" "This action is irreversible, proceed anyway ?"); if (ask_yes_no (_("Wrap atomic coordinates in unit cell ?"), text, GTK_MESSAGE_WARNING, view -> win)) { shift_it (vec3 (0.0, 0.0, 0.0), 1, view -> proj); view -> wrapped = TRUE; } if (view -> cell_win) { if (view -> cell_win -> shift_box[0]) { if (GTK_IS_WIDGET(view -> cell_win -> shift_box[0])) { widget_set_sensitive (view -> cell_win -> shift_box[0], view -> wrapped); } } } #ifdef GTK3 // GTK3 Menu Action To Check if (GTK_IS_WIDGET(view -> ogl_box[2])) { widget_set_sensitive (view -> ogl_box[2], ! view -> wrapped); } #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void wrap_coord (GtkCheckButton * but, gpointer data) \brief wrap atomic coordinates callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void wrap_coord (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void wrap_coord (GtkToggleButton * but, gpointer data) \brief wrap atomic coordinates callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void wrap_coord (GtkToggleButton * but, gpointer data) #endif { glwin * view = (glwin *)data; wrapping (view); widget_set_sensitive (GTK_WIDGET(but), ! view -> wrapped); } /*! \fn GtkWidget * shift_center_tab (project * this_proj) \brief create the shift cell center tab \param this_proj the target project */ GtkWidget * shift_center_tab (project * this_proj) { GtkWidget * layout = create_layout (350, 250); glwin * view = this_proj -> modelgl; view -> cell_win -> shift_box[0] = create_shift_box (this_proj); view -> cell_win -> put_in_box = check_button (_("Wrap atomic coordinates in unit cell"), -1, -1, FALSE, G_CALLBACK(wrap_coord), view); widget_set_sensitive (view -> cell_win -> put_in_box, ! view -> wrapped); if (view -> record) widget_set_sensitive (view -> cell_win -> put_in_box, FALSE); layout_add_widget (layout, view -> cell_win -> put_in_box, 20, 20); layout_add_widget (layout, view -> cell_win -> shift_box[0], 100, 100); show_the_widgets (layout); return layout; } atomes_1.3.1/src/opengl/edit/cbuild_action.c0000664000175000017500000015447415212624223020467 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cbuild_action.c * @short Functions to build a crystal using space group, crystallographic position(s) and object(s) to insert * @author Sébastien Le Roux */ /* * This file: 'cbuild_action.c' * * Contains: * - The functions to build a crystal using space group, crystallographic position(s) and object(s) to insert * * List of functions: int occupancy (double occ); int test_lattice (builder_edition * cbuilder, cell_info * cif_cell); int pos_not_saved (vec3_t * all_pos, int num_pos, vec3_t pos); int build_crystal (gboolean visible, project * this_proj, int c_step, gboolean to_wrap, gboolean show_clones, cell_info * cell, GtkWidget * widg); double get_val_from_setting (gchar * pos, gchar * sval); double get_value_from_pos (gchar * pos); double get_val_from_wyckoff (gchar * pos, gchar * wval); gboolean same_coords (float a, float b); gboolean are_equal_vectors (vec3_t u, vec3_t v); gboolean pos_not_taken (int pos, int dim, int * tab); gboolean adjust_object_occupancy (crystal_data * cryst, int occupying, int rouding, int tot_cell); void get_origin (space_group * spg); void compute_lattice_properties (cell_info * cell, int box_id); void clean_this_proj (project * this_proj, gboolean newp); space_group * duplicate_space_group (space_group * spg); crystal_data * allocate_crystal_data (int objects, int species); crystal_data * free_crystal_data (crystal_data * cryst); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "glview.h" #include "bind.h" #include "project.h" #include "workspace.h" #include "atom_edit.h" #include "cbuild_edit.h" #include "readers.h" #include extern int get_crystal_id (int spg); extern atomic_object * cif_object; gchar * tmp_pos = NULL; /*! \fn double get_val_from_setting (gchar * pos, gchar * sval) \brief get value from space group setting \param pos the position "a", "b" or "c" \param sval the space group setting */ double get_val_from_setting (gchar * pos, gchar * sval) { if (! strstr(sval, pos)) { return 0.0; } else { if (! g_strcmp0(sval, pos)) { g_free (tmp_pos); tmp_pos = NULL; return 1.0; } gchar * sym[8]={"-1/3", "+1/3", "1/3", "-2/3", "+2/3", "2/3", "-", "+"}; double vals[8]={-1.0/3.0, 1.0/3.0, 1.0/3.0, -2.0/3.0, 2.0/3.0, 2.0/3.0, -1.0, 1.0}; gchar * ksym = NULL; int i; for (i=0; i<8; i++) { ksym = g_strdup_printf ("%s%s", sym[i], pos); if (strstr(sval, ksym)) { tmp_pos = replace_markup (tmp_pos, ksym, NULL); g_free (ksym); ksym = NULL; if (! strlen(tmp_pos)) { g_free (tmp_pos); tmp_pos = NULL; } return vals[i]; } g_free (ksym); ksym = NULL; } tmp_pos = replace_markup (tmp_pos, pos, NULL); if (! strlen(tmp_pos)) { g_free (tmp_pos); tmp_pos = NULL; } return 1.0; } } /*! \fn double get_value_from_pos (gchar * pos) \brief get position double value from string description \param pos the string description */ double get_value_from_pos (gchar * pos) { if (strstr(pos, "/")) { char * p = NULL; double u, v; p = strtok(pos, "/"); u = string_to_double ((gpointer)p); p = strtok(NULL, "/"); v = string_to_double ((gpointer)p); return u/v; } else { return string_to_double ((gpointer)pos); } } /*! \fn void get_origin (space_group * spg) \brief get space group origin matrices \param spg the target space group */ void get_origin (space_group * spg) { char * vinit[3]={"a", "b", "c"}; double spinit[3][4]; int i, j, k; i = spg -> sid; for (j=0; j<3; j++) { tmp_pos = g_strdup_printf ("%s", spg -> settings[i].pos[j]); for (k=0; k<3; k++) { spinit[j][k] = get_val_from_setting (vinit[k], spg -> settings[i].pos[j]); } if (tmp_pos) { spinit[j][3] = get_value_from_pos (tmp_pos); g_free (tmp_pos); tmp_pos = NULL; } else { spinit[j][3] = 0.0; } } spg -> coord_origin = mat4 (spinit[0][0], spinit[1][0], spinit[2][0], 0.0, spinit[0][1], spinit[1][1], spinit[2][1], 0.0, spinit[0][2], spinit[1][2], spinit[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); spg -> wyck_origin = m4_invert_affine (spg -> coord_origin); spg -> coord_origin.m30 = spg -> wyck_origin.m30 = spinit[0][3]; spg -> coord_origin.m31 = spg -> wyck_origin.m31 = spinit[1][3]; spg -> coord_origin.m32 = spg -> wyck_origin.m32 = spinit[2][3]; #ifdef DEBUG g_debug ("Coord origin:"); m4_print (spg -> coord_origin); g_debug ("Wyck origin:"); m4_print (spg -> wyck_origin); #endif } /*! \fn void compute_lattice_properties (cell_info * cell, int box_id) \brief compute lattice parameters following cell description \param cell the target cell description \param box_id the target box description to fill */ void compute_lattice_properties (cell_info * cell, int box_id) { int i; box_info * box = & cell -> box[box_id]; double ltemp; double angle[3]; double sangle[3], cangle[3]; if (! cell -> ltype) { for (i=0; i<3; i++) { if (box -> param[1][i] == 90.0) { angle[i] = pi/2.0; sangle[i] = 1.0; cangle[i] = 0.0; } else { angle[i] = box -> param[1][i]*pi/180.0; sangle[i] = sin(angle[i]); cangle[i] = cos(angle[i]); } } box -> vect[0][0] = box -> param[0][0]; box -> vect[0][1] = box -> vect[0][2] = 0.0; box -> vect[1][0] = box -> param[0][1] * cangle[2]; box -> vect[1][1] = box -> param[0][1] * sangle[2]; box -> vect[1][2] = 0.0; box -> vect[2][0] = box -> param[0][2] * cangle[1]; ltemp = (cangle[0] - cangle[1]*cangle[2]) / sangle[2]; box -> vect[2][1] = box -> param[0][2] * ltemp; box -> vect[2][2] = box -> param[0][2] * sqrt(sangle[1]*sangle[1] - ltemp*ltemp); } else { for (i=0; i<3; i++) box -> param[0][i] = v3_length(vec3(box -> vect[i][0], box -> vect[i][1], box -> vect[i][2])); box -> param[1][0] = (box -> vect[2][0]*box -> vect[1][0] + box -> vect[2][1]*box -> vect[1][1] + box -> vect[2][2]*box -> vect[1][2]); box -> param[1][0] /= (box -> param[0][1] * box -> param[0][2]); box -> param[1][1] = (box -> vect[0][0]*box -> vect[2][0] + box -> vect[0][1]*box -> vect[2][1] + box -> vect[0][2]*box -> vect[2][2]); box -> param[1][1] /= (box -> param[0][0] * box -> param[0][2]); box -> param[1][2] = (box -> vect[0][0]*box -> vect[1][0] + box -> vect[0][1]*box -> vect[1][1] + box -> vect[0][2]*box -> vect[1][2]); box -> param[1][2] /= (box -> param[0][0] * box -> param[0][1]); for (i=0; i<3; i++) { if (box -> param[1][i] == 0.0) { box -> param[1][i] = 90.0; sangle[i] = 1.0; cangle[i] = 0.0; } else { angle[i] = acos(box -> param[1][i]); sangle[i] = sin(angle[i]); cangle[i] = cos(angle[i]); box -> param[1][i] = angle[i]*180.0/pi; } } } #ifdef DEBUG g_debug (" a= %f, b= %f, c= %f", box -> param[0][0], box -> param[0][1], box -> param[0][2]); g_debug (" alpha= %f, beta= %f, gamma= %f", box -> param[1][0], box -> param[1][1], box -> param[1][2]); g_debug (" a.x= %f, a.y= %f, a.z= %f", box -> vect[0][0], box -> vect[0][1], box -> vect[0][2]); g_debug (" b.x= %f, b.y= %f, b.z= %f", box -> vect[1][0], box -> vect[1][1], box -> vect[1][2]); g_debug (" c.x= %f, c.y= %f, c.z= %f", box -> vect[2][0], box -> vect[2][1], box -> vect[2][2]); #endif box -> vol = (box -> vect[0][1]*box -> vect[1][2] - box -> vect[0][2]*box -> vect[1][1])*box -> vect[2][0]; box -> vol += (box -> vect[0][2]*box -> vect[1][0] - box -> vect[0][0]*box -> vect[1][2])*box -> vect[2][1]; box -> vol += (box -> vect[0][0]*box -> vect[1][1] - box -> vect[0][1]*box -> vect[1][0])*box -> vect[2][2]; box -> vol = fabs(box -> vol); cell -> volume = box -> vol; #ifdef DEBUG g_debug ("Lattice volume= %f", box -> vol); #endif double z = sqrt(fabs(1 - cangle[0]*cangle[0]-cangle[1]*cangle[1]-cangle[2]*cangle[2] + 2*cangle[0]*cangle[1]*cangle[2])); float ** ftc; ftc = allocdfloat (4,4); ftc[0][0]=box -> param[0][0]; ftc[0][1]=box -> param[0][1]*cangle[2]; ftc[0][2]=box -> param[0][2]*cangle[1]; ftc[1][1]=box -> param[0][1]*sangle[2]; ftc[1][2]=box -> param[0][2]*((cangle[0]-cangle[1]*cangle[2])/sangle[2]); ftc[2][2]=box -> param[0][2]*z/sangle[2]; box -> frac_to_cart = mat4(ftc[0][0], ftc[0][1], ftc[0][2], ftc[0][3], ftc[1][0], ftc[1][1], ftc[1][2], ftc[1][3], ftc[2][0], ftc[2][1], ftc[2][2], ftc[2][3], ftc[3][0], ftc[3][1], ftc[3][2], ftc[3][3]); ftc[0][0]=1.0/box -> frac_to_cart.m00; ftc[0][1]=-cangle[2]/(sangle[2]*box -> param[0][0]); ftc[0][2]=box -> param[0][1]*box -> param[0][2]/box -> vol; ftc[0][2]=ftc[0][2]*(cangle[0]*cangle[2] - cangle[1])/sangle[0]; ftc[1][1]=1.0/box -> frac_to_cart.m11; ftc[1][2]=(box -> param[0][0]*box -> param[0][2])/box -> vol; ftc[1][2]=ftc[1][2]*(cangle[1]*cangle[2] - cangle[0])/sangle[2]; ftc[2][2]=1.0/box -> frac_to_cart.m22; box -> cart_to_frac = mat4 (ftc[0][0], ftc[0][1], ftc[0][2], ftc[0][3], ftc[1][0], ftc[1][1], ftc[1][2], ftc[1][3], ftc[2][0], ftc[2][1], ftc[2][2], ftc[2][3], ftc[3][0], ftc[3][1], ftc[3][2], ftc[3][3]); g_free (ftc); #ifdef DEBUG m4_print (box -> frac_to_cart); m4_print (box -> cart_to_frac); #endif } /*! \fn int test_lattice (builder_edition * cbuilder, cell_info * cif_cell) \brief test lattice parameters \param cbuilder the builder edition with the lattice parameters \param cif_cell the cell information when testing CIF file */ int test_lattice (builder_edition * cbuilder, cell_info * cif_cell) { int i, j; cell_info * cell = (cbuilder) ? & cbuilder -> cell : cif_cell; box_info * box = & cell -> box[0]; i = cell -> sp_group -> id; j = get_crystal_id (i); if (cbuilder) { if (! cell -> ltype) { // Adjust a,b,c,alpha,beta,gamma and compute vectors if (j == 3 || j == 4 || j == 6) { box -> param[1][1] = box -> param[1][2] = box -> param[1][0]; } if (j == 3 || (j == 4 && cell -> sp_group -> name[0] == 'P') || j == 5) { box -> param[0][1] = box -> param[0][0]; } else if ((j == 4 && cell -> sp_group -> name[0] == 'R') || j == 6) { box -> param[0][1] = box -> param[0][2] = box -> param[0][0]; } } if (! test_vol(box -> param, box -> vect)) { show_warning (_("Please describe properly the lattice parameters"), cbuilder -> win); return 0; } compute_lattice_properties (cell, 0); } // Strictly different or possibly different ? /*if (j < 3) { if (box -> param[0][0] == box -> param[0][1] || box -> param[0][0] == box -> param[0][2] || box -> param[0][1] == box -> param[0][2]) { // Box error: a, b, c not all different return 0; } }*/ if (j == 3 || j == 4 || j == 5) { if (box -> param[0][0] != box -> param[0][1]) { // Box error: a and b must be equal return 0; } } if (j == 2 || j == 3 || j == 6) { if (box -> param[1][0] != 90.0 || box -> param[1][1] != 90.0 || box -> param[1][2] != 90.0) { // Angle error: alpha, beta and gamma must be = 90 return 0; } } switch (j) { // Strictly different or possibly different ? /* case 0: if (! (box -> param[1][0] != box -> param[1][1] && box -> param[1][0] != box -> param[1][2] && box -> param[1][1] != box -> param[1][2])) { // Angle error: alpha, beta, gamma not all different return 0; } break; */ case 1: if (box -> param[1][0] != 90.0) { // Angle error: alpha must be = 90 return 0; } else if (box -> param[1][1] != 90.0 && box -> param[1][2] != 90.0) { // Angle error: beta or gamma must be = 90 return 0; } break; case 4: if (cell -> sp_group -> name[0] != 'R') { if (box -> param[1][0] != 90.0 || box -> param[1][1] != 90.0 || box -> param[1][2] != 120.0) { // Angle error: alpha and beta must be equal= 90, gamma must be = 120 return 0; } } else { if (box -> param[1][0] != box -> param[1][1] || box -> param[1][0] != box -> param[1][2] || box -> param[1][1] != box -> param[1][2]) { // Angle error: alpha, beta, gamma must all be equal return 0; } else if (box -> param[0][0] != box -> param[0][2]) { // Box error: a, b and c must all be equal return 0; } } break; case 5: if (box -> param[1][0] != 90.0 || box -> param[1][1] != 90.0 || box -> param[1][2] != 120.0) { // Angle error: alpha and beta must be = 90, gamma must be = 120 return 0; } break; case 6: if (box -> param[0][0] != box -> param[0][1] || box -> param[0][0] != box -> param[0][2] || box -> param[0][1] != box -> param[0][2]) { // Box error: a, b, c not all equal return 0; } break; } return 1; } /*! \fn double get_val_from_wyckoff (gchar * pos, gchar * wval) \brief get point value from wyckoff position \param pos "x", "y" or "z" \param wval wyckoff position vector */ double get_val_from_wyckoff (gchar * pos, gchar * wval) { if (! strstr(wval, pos)) { return 0.0; } else { if (! g_strcmp0(wval, pos)) { g_free (tmp_pos); tmp_pos = NULL; return 1.0; } gchar * sym[4]={"-2", "2", "-", "+"}; double sval[4]={-2.0, 2.0, -1.0, 1.0}; gchar * ksym = NULL; int i; for (i=0; i<4; i++) { ksym = g_strdup_printf ("%s%s", sym[i], pos); if (strstr(wval, ksym)) { tmp_pos = replace_markup (tmp_pos, ksym, NULL); g_free (ksym); ksym = NULL; if (! strlen(tmp_pos)) { g_free (tmp_pos); tmp_pos = NULL; } return sval[i]; } g_free (ksym); ksym = NULL; } tmp_pos = replace_markup (tmp_pos, pos, NULL); if (! strlen(tmp_pos)) { g_free (tmp_pos); tmp_pos = NULL; } return 1.0; } } /*! \fn void clean_this_proj (project * this_proj, gboolean newp) \brief clean project and/or associated cell parameters \param this_proj the target project \param newp is this a new project ? */ void clean_this_proj (project * this_proj, gboolean newp) { int i, j; if (newp) { close_project(this_proj); } else { for (i=0; i<3; i++) { for (j=0; j<3; j++) { if (i < 2) this_proj -> cell.box[0].param[i][j] = 0.0; this_proj -> cell.box[0].vect[i][j] = 0.0; } } this_proj -> cell.ltype = 0; this_proj -> cell.pbc = FALSE; } } /*! \fn gboolean same_coords (float a, float b) \brief test if values are similar, allowing a 0.0001 difference \param a 1st value \param b 2nd value */ gboolean same_coords (float a, float b) { int i; for (i=0; i<10; i++) if (fabs(fabs(a-b) - i) < 0.0001) return TRUE; return FALSE; } /*! \fn gboolean are_equal_vectors (vec3_t u, vec3_t v) \brief comparing atomic coordinates vectors \param u 1st vector \param v 2nd vector */ gboolean are_equal_vectors (vec3_t u, vec3_t v) { if (same_coords(u.x, v.x) && same_coords(u.y, v.y) && same_coords(u.z, v.z)) { return TRUE; } return FALSE; } /*! \fn int pos_not_saved (vec3_t * all_pos, int num_pos, vec3_t pos) \brief was this position already saved ? \param all_pos the list of saved atomic coordinates \param num_pos the number of saved atomic coordinates \param pos the vector to test */ int pos_not_saved (vec3_t * all_pos, int num_pos, vec3_t pos) { int i; for (i=0; i id = spg -> id; new_spg -> hms = g_strdup_printf ("%s", spg -> hms); new_spg -> bravais = g_strdup_printf ("%s", spg -> bravais); if (spg -> settings[spg -> sid].origin) { new_spg -> setting = g_strdup_printf ("%s:%d", spg -> settings[spg -> sid].name, spg -> settings[spg -> sid].origin); } else { new_spg -> setting = g_strdup_printf ("%s", spg -> settings[spg -> sid].name); } return new_spg; } /*! \fn crystal_data * allocate_crystal_data (int objects, int species) \brief allocate crystal data pointer \param objects the number of object(s) \param species the number of chemical species */ crystal_data * allocate_crystal_data (int objects, int species) { crystal_data * cryst = g_malloc0(sizeof*cryst); cryst -> objects = objects; cryst -> spec = species; cryst -> at_by_object = allocint (cryst -> objects); cryst -> pos_by_object = allocint (cryst -> objects); cryst -> occupancy = allocdouble (cryst -> objects); cryst -> sites = g_malloc0(cryst -> objects*sizeof*cryst -> sites); cryst -> insert = g_malloc0(cryst -> objects*sizeof*cryst -> insert); cryst -> position = g_malloc0(cryst -> objects*sizeof*cryst -> position); cryst -> coord = g_malloc0(cryst -> objects*sizeof*cryst -> coord); cryst -> lot = g_malloc0(cryst -> objects*sizeof*cryst -> lot); cryst -> at_type = g_malloc0(cryst -> objects*sizeof*cryst -> at_type); cryst -> z = allocdouble (species); cryst -> nsps = allocint (species); cryst -> holes = allocbool (cryst -> objects); return cryst; } /*! \fn crystal_data * free_crystal_data (crystal_data * cryst) \brief free crystal data pointer \param cryst the data pointer to free */ crystal_data * free_crystal_data (crystal_data * cryst) { if (cryst -> at_by_object) g_free (cryst -> at_by_object); if (cryst -> pos_by_object) g_free (cryst -> pos_by_object); if (cryst -> occupancy) g_free (cryst -> occupancy); if (cryst -> sites) g_free (cryst -> sites); if (cryst -> insert) g_free (cryst -> insert); if (cryst -> position) g_free (cryst -> position); if (cryst -> coord) g_free (cryst -> coord); if (cryst -> lot) g_free (cryst -> lot); if (cryst -> at_type) g_free (cryst -> at_type); if (cryst -> z) g_free (cryst -> z); if (cryst -> nsps) g_free (cryst -> nsps); if (cryst -> holes) g_free (cryst -> holes); g_free (cryst); return NULL; } /*! \fn gboolean pos_not_taken (int pos, int dim, int * tab) \brief is this position already taken ? \param pos position id \param dim number of position(s) \param tab the list of position(s) */ gboolean pos_not_taken (int pos, int dim, int * tab) { int i; for (i=0; i 2) ? TRUE : FALSE; // position ordering must be used to ensure proper overlapping with holes pos_order = allocint (cryst -> objects); i = j = 0; for (k=0; k objects; k++) { if (cryst -> holes[k]) { pos_order[i] = k; j = max (j, cryst -> pos_by_object[i]); i ++; } } if (i) { with_holes = TRUE; holes_pos = allocdbool (cryst -> objects, j); } for (j=0; j objects; j++) { if (! cryst -> holes[j]) { pos_order[i] = j; i ++; } } for (h=0; h objects; h++) { i = pos_order[h]; #ifdef DEBUG g_debug ("i= %d, occ[%d]= %f, pbo[%d]= %d", i+1, i+1, cryst -> occupancy[i], i+1, cryst -> pos_by_object[i]); #endif if (cryst -> sites[i][0] > 0 && cryst -> occupancy[i]*cryst -> pos_by_object[i] < 1.0 && ! cryst -> holes[i]) low_occ = TRUE; if (cryst -> sites[i][0] > 0 && cryst -> occupancy[i] < 1.0 && cryst -> pos_by_object[i] > 1) { v = 0.0; pos_bs = cryst -> pos_by_object[i]; site_bs = (cryst -> holes[i]) ? 1 : cryst -> sites[i][0]; num_bs = cryst -> sites[i][0]; taken_pos = allocbool (pos_bs); #ifdef DEBUG g_debug ("i= %d, site[%d][0]= %d, pos_bs= %d, num_bs= %d", i+1, i+1, cryst -> sites[i][0], pos_bs, num_bs); #endif for (j=0; j sites[i][0]; j++) { k = cryst -> sites[i][j+1]; v += cryst -> occupancy[k]; } l = 0; if (with_holes) { for (j=0; j sites[i][j+1]; #ifdef DEBUG g_debug ("\tj= %d, k= %d, sites[%d][0]= %d, occ[%d]= %f, pos_by_objects[%d]= %d", j+1, k+1, k+1, cryst -> sites[k][0], k+1, cryst -> occupancy[k], k+1, cryst -> pos_by_object[k]); #endif if (cryst -> sites[k][0] > -1) { // Warning for occupancy closest integer value to: // - (int) ? // - nearbyint : closest integer value ? num_to_save = occupancy (pos_bs*cryst -> occupancy[k], rounding); l += num_to_save; #ifdef DEBUG g_debug ("\tnum_to_save= %d, l= %d", num_to_save, l); #endif if (j == num_bs-1) { if ((v == 1.0 && l != pos_bs) || l > pos_bs) num_to_save += (pos_bs-l); } site_pos = allocint (num_to_save); m = 0; while (m < num_to_save) { pick_it = TRUE; if (occupying < 3) { CPU_time = clock(); n = (CPU_time - (k+17)*pos_bs) + (3*cryst -> at_by_object[i]); prob = random3_(& n); p = round (prob * (pos_bs-1)); if (with_holes) { pick_it = (taken_pos[p] || holes_pos[i][p]) ? FALSE : TRUE; } else { pick_it = ! taken_pos[p]; } } else if (occupying == 3) { p = 0; if (with_holes) { while (taken_pos[p] || holes_pos[i][p]) p ++; } else { while (taken_pos[p]) p ++; } } else { #ifdef DEBUG g_debug ("\t\tp= %d, m= %d, sites[i][0]= %d", p, m, cryst -> sites[k][0]); #endif p = j + m*cryst -> sites[k][0]; if (p > cryst -> pos_by_object[k]-1) { p -= (cryst -> pos_by_object[k]-1); } #ifdef DEBUG g_debug ("\t\tp= %d", p); #endif for (n=0; n pos_by_object[k]) n = 0; pick_it = FALSE; while (! pick_it) { pick_it = TRUE; for (o=0; o coord[k][m] = cryst -> coord[k][n]; if (occ_sym && tot_cell > 1) { for (o=1; o objects/tot_cell); cryst -> coord[p][m] = cryst -> coord[p][n]; } } } cryst -> pos_by_object[k] = num_to_save; cryst -> sites[k][0] = -1; if (occ_sym && tot_cell > 1) { for (o=1; o objects/tot_cell); cryst -> pos_by_object[p] = num_to_save; cryst -> sites[p][0] = -1; } } if (cryst -> holes[i]) { for (o=0; o sites[i][o+1]; for (q=0; q 1) { for (s=1; s objects/tot_cell); holes_pos[t][r] = TRUE; } } } } } g_free (site_pos); } } g_free (taken_pos); } } if (holes_pos) g_free (holes_pos); return low_occ; } gboolean crystal_low_warning; gboolean crystal_crowded; gboolean crystal_dist_chk; /*! \fn int build_crystal (gboolean visible, project * this_proj, int c_step, gboolean to_wrap, gboolean show_clones, cell_info * cell, GtkWidget * widg) \brief build crystal \param visible is the crystal builder window visible ? \param this_proj the target project \param c_step the MD step if multiple CIF configurations \param to_wrap wrap or not atomic coordinates in the unit cell \param show_clones show / hide clone(s) \param cell the cell info that contains the crystal description \param widg the GtkWidget sending the signal */ int build_crystal (gboolean visible, project * this_proj, int c_step, gboolean to_wrap, gboolean show_clones, cell_info * cell, GtkWidget * widg) { int h, i, j, k, l, m, n, o, p, q; int build_res = 1; space_group * sp_group = cell -> sp_group; box_info * box = & cell -> box[c_step]; gchar * str; mat4_t ** wyckpos = g_malloc0(sp_group -> numw*sizeof*wyckpos); double spgpos[3][4]; for (i=0; i<1; i++)//sp_group -> numw; i++) { wyckpos[i] = g_malloc0(sp_group -> wyckoff[i].multi*sizeof*wyckpos[i]); for (j=0; j wyckoff[i].multi; j++) { for (k=0; k<3; k++) { tmp_pos = g_strdup_printf ("%s", sp_group -> wyckoff[i].pos[j][k]); for (l=0; l<3; l++) { spgpos[k][l] = get_val_from_wyckoff (vect_comp[l], sp_group -> wyckoff[i].pos[j][k]); } if (tmp_pos) { spgpos[k][3] = get_value_from_pos (tmp_pos); g_free (tmp_pos); tmp_pos = NULL; } else { spgpos[k][3] = 0.0; } } wyckpos[i][j] = mat4 (spgpos[0][0], spgpos[0][1], spgpos[0][2], spgpos[0][3], spgpos[1][0], spgpos[1][1], spgpos[1][2], spgpos[1][3], spgpos[2][0], spgpos[2][1], spgpos[2][2], spgpos[2][3], 0.0, 0.0, 0.0, 1.0); wyckpos[i][j] = m43_mul(sp_group -> wyck_origin, wyckpos[i][j]); #ifdef DEBUG // g_debug ("w_id= %d, w_mul= %d", i+1, j+1); // m4_print (wyckpos[i][j]); #endif } } double copos[3]; int npoints; vec3_t * points; h = sp_group -> sid; if (sp_group -> settings[h].nump) { points = g_malloc0(sp_group -> settings[h].nump*sizeof*points); for (i=0; i settings[h].nump; i++) { for (j=0; j<3; j++) { tmp_pos = g_strdup_printf ("%s", sp_group -> settings[h].points[i][j]); copos[j] = get_value_from_pos (tmp_pos); g_free (tmp_pos); tmp_pos = NULL; } points[i] = vec3(copos[0], copos[1], copos[2]); //m4_mul_coord (sp_group -> coord_origin, vec3(copos[0], copos[1], copos[2])); #ifdef DEBUG // g_debug ("point=%d, p.x= %f, p.y= %f, p.z= %f", i+1, points[i].x, points[i].y ,points[i].z); #endif } npoints = sp_group -> settings[h].nump; } else { points = g_malloc0(1*sizeof*points); points[0] = vec3(0.0, 0.0, 0.0); npoints = 1; } vec3_t pos; atomic_object * object = NULL; gboolean done; crystal_data * cdata = NULL; int occupying; int rounding; double amin = box -> param[0][0]; for (i=1; i<3; i++) amin = min(amin, box -> param[0][i]);; if (! visible) { tint point; point.a = this_proj -> id; point.b = point.c = 0; if (! this_proj -> modelgl) this_proj -> modelgl = g_malloc0(sizeof*this_proj -> modelgl); prepare_atom_edition (& point, FALSE); this_proj -> modelgl -> search_widg[7] = allocate_atom_search (this_proj -> id, INSERT, 7, this_reader -> natomes); gboolean do_obj; for (i=0; i natomes; i++) { do_obj = FALSE; for (j=0; j atom_unlabelled; j++) { if (this_reader -> u_atom_list[j] == i) { do_obj = TRUE; break; } } if (do_obj) { if (! object) { this_proj -> modelgl -> atom_win -> to_be_inserted[2] = duplicate_atomic_object (get_atomic_object_by_origin (cif_object, this_reader -> object_list[j], 0)); object = this_proj -> modelgl -> atom_win -> to_be_inserted[2]; } else { object -> next = duplicate_atomic_object (get_atomic_object_by_origin (cif_object, this_reader -> object_list[j], 0)); } } else { j = this_reader -> lot[i]; to_insert_in_project ((int)this_reader -> z[j], -1, this_proj, this_proj -> modelgl -> search_widg[7], FALSE); } this_proj -> modelgl -> search_widg[7] -> todo[i] = 1; if (! object) { object = this_proj -> modelgl -> atom_win -> to_be_inserted[2]; } else { object = object -> next; } object -> occ = this_reader -> occupancy[i]; for (j=0; j<3; j++) object -> baryc[j] = this_reader -> coord[i][j]; } occupying = 0; rounding = this_reader -> rounding; } else { occupying = this_proj -> modelgl -> builder_win -> occupancy; rounding = this_proj -> modelgl -> builder_win -> rounding; } for (h=0; h<2; h++) { object = this_proj -> modelgl -> atom_win -> to_be_inserted[2]; i = j = k = 0; while (object) { l = object -> id; if (this_proj -> modelgl -> search_widg[7] -> todo[l]) { if (h) { for (m=0; m species; m++) { done = FALSE; for (l=0; l old_z[m] == cdata -> z[l]) { done = TRUE; break; } } if (! done && object -> old_z[m] > 0.0) { cdata -> z[k] = object -> old_z[m]; k ++; } if (object -> old_z[m] == 0.0) { cdata -> holes[i] = TRUE; cdata -> with_holes = TRUE; } } n = sp_group -> wyckoff[0].multi*npoints; cdata -> at_type[i] = allocint (n); cdata -> coord[i] = g_malloc0(n*sizeof*cdata -> coord[i]); cdata -> insert[i] = m4_mul_coord (sp_group -> coord_origin, vec3(object -> baryc[0], object -> baryc[1], object -> baryc[2])); #ifdef DEBUG // g_debug ("at_orig= %d, pos.x= %f, pos.y= %f, pos.z= %f", i+1, object -> baryc[0], object -> baryc[1], object -> baryc[2]); // g_debug ("at_calc= %d, pos.x= %f, pos.y= %f, pos.z= %f", i+1, cdata -> insert[i].x, cdata -> insert[i].y, cdata -> insert[i].z); #endif n = 0; for (o=0; o wyckoff[0].multi; p++) { pos = v3_add (m4_mul_coord (wyckpos[0][p], cdata -> insert[i]), points[o]); q = pos_not_saved (cdata -> coord[i], n, pos); if (q > 0) { cdata -> coord[i][n].x = pos.x; cdata -> coord[i][n].y = pos.y; cdata -> coord[i][n].z = pos.z; #ifdef DEBUG // g_debug (" c.x= %f, c.y= %f, c.z= %f", cdata -> coord[i][n].x, cdata -> coord[i][n].y, cdata -> coord[i][n].z); #endif cdata -> at_type[i][n] = 1; n ++; } else if (q < 0) { cdata -> at_type[i][-(q+1)] ++; } } } cdata -> pos_by_object[i] = n; cdata -> occupancy[i] = object -> occ; if (! cdata -> holes[i]) cdata -> lot[i] = allocint (object -> atoms); cdata -> position[i] = g_malloc0(object -> atoms*sizeof*cdata -> position[i]); for (l=0; l atoms; l++) { n = object -> at_list[l].sp; cdata -> position[i][l].x = object -> at_list[l].x; cdata -> position[i][l].y = object -> at_list[l].y; cdata -> position[i][l].z = object -> at_list[l].z; if (! cdata -> holes[i]) { for (o=0; o z[o] == object -> old_z[n]) { cdata -> lot[i][l] = o; break; } } } } cdata -> at_by_object[i] = object -> atoms; i ++; } else { if (object -> dim > amin) { if (! crystal_crowded) { str = g_strdup_printf (_("%s size (%f Å) is bigger than the min(a,b,c)\n" "If you build the crystal the final structure is likely to be crowded !\n" "Continue anyway ?"), object -> name, object -> dim); build_res = 2; crystal_crowded = ask_yes_no(_("This object might be too big !") , str, GTK_MESSAGE_WARNING, widg); if (! crystal_crowded) { g_free (str); if (points) g_free (points); if (wyckpos) g_free (wyckpos); if (cdata) cdata = free_crystal_data (cdata); if (! visible) { this_proj -> modelgl -> search_widg[7] = free_this_search_data (this_proj -> modelgl -> search_widg[7]); g_free (this_proj -> modelgl); this_proj -> modelgl = NULL; active_glwin = NULL; } return 0; } g_free (str); } } i ++; j += object -> species; k += object -> atoms; } } object = object -> next; } if (! h) { if (k) { cdata = allocate_crystal_data (i, j); cdata -> overlapping = (visible) ? this_proj -> modelgl -> builder_win -> overlapping : FALSE; } else { if (points) g_free (points); if (wyckpos) g_free (wyckpos); if (cdata) cdata = free_crystal_data (cdata); if (! visible) { this_proj -> modelgl -> search_widg[7] = free_this_search_data (this_proj -> modelgl -> search_widg[7]); g_free (this_proj -> modelgl); this_proj -> modelgl = NULL; active_glwin = NULL; } return 0; } } } if (points) g_free (points); if (wyckpos) g_free (wyckpos); cdata -> spec = k; double u, v; m = 0; for (i=0; i objects; i++) { m += (cdata -> holes[i]) ? 1 : 0; u = v = 0.0; for (j=0; j<2; j++) { k = 1; if (! cdata -> overlapping || cdata -> holes[i]) { u = cdata -> occupancy[i]; } else { v = cdata -> occupancy[i]; } if (u+v > 1.0 || u+v < 0.0) { if (cdata) cdata = free_crystal_data (cdata); show_warning (_("Impossible to build crystal: check occupancy !"), widg); return 0; } else if (cdata -> overlapping && ! cdata -> with_holes) { if (j) cdata -> sites[i][k] = i; } else { for (l=0; l objects; l++) { if (l != i) { if (cdata -> insert[i].x == cdata -> insert[l].x && cdata -> insert[i].y == cdata -> insert[l].y && cdata -> insert[i].z == cdata -> insert[l].z) { if (j) { if (! cdata -> overlapping || cdata -> holes[i]) { k ++; cdata -> sites[i][k] = l; } } else { if (! cdata -> overlapping || cdata -> holes[i]) k ++; if (! cdata -> overlapping || cdata -> holes[l]) { u += cdata -> occupancy[l]; } else { v = max(v, cdata -> occupancy[l]); } if (u+v > 1.00001) { show_warning (_("Impossible to build crystal: site total occupancy > 1.0"), widg); if (cdata) cdata = free_crystal_data (cdata); return 0; } } } } } } if (! j) { cdata -> sites[i] = allocint (k+1); cdata -> sites[i][0] = k; cdata -> sites[i][1] = i; if (k > 1) cdata -> shared_sites = TRUE; } } } #ifdef DEBUG /*for (i=0; i objects; i++) { g_debug ("i= %d, site[%d]= %d", i+1, i+1, cdata -> sites[i][0]); for (j=0; j sites[i][0]; j++) { g_debug ("\t j= %d, co-site[%d][%d]= %d", j+1, i+1, j+1, cdata -> sites[i][j+1]+1); } }*/ #endif // DEBUG if (m == cdata -> objects) { if (cdata) cdata = free_crystal_data (cdata); show_warning (_("Impossible to build crystal: empty site(s) only !"), widg); return 0; } gboolean new_proj = (this_proj -> natomes && visible) ? TRUE : FALSE; if (new_proj) { init_project (TRUE); } else if (visible) { active_project_changed (this_proj -> id); } active_box = & active_cell -> box[c_step]; for (i=0; i<3; i++) { for (j=0; j<3; j++) { if (i < 2) { active_box -> param[i][j] = box -> param[i][j]; if (! i) active_box -> param[i][j] *= cell -> cextra[j]; } active_box -> vect[i][j] *= cell -> cextra[i]; } } compute_lattice_properties (active_cell, c_step); active_cell -> ltype = 1; active_cell -> pbc = TRUE; int tot_cell = 1; for (i=0; i<3; i++) { tot_cell *= cell -> cextra[i]; } vec3_t vx, vy, vz, shift; h = 0; i = (occupying == 2) ? 0 : 1; j = (occupying == 2) ? 1 : tot_cell; crystal_data * cryst = allocate_crystal_data (j*cdata -> objects, cdata -> spec); g_free (cryst -> z); cryst -> z = duplicate_double (cdata -> spec, cdata -> z); cryst -> shared_sites = cdata -> shared_sites; cryst -> overlapping = cdata -> overlapping; cryst -> with_holes = cdata -> with_holes; if (occupying == 2) { for (k=0; k objects; k++) { cryst -> pos_by_object[k] = tot_cell*cdata -> pos_by_object[k]; cryst -> at_by_object[k] = cdata -> at_by_object[k]; cryst -> at_type[k] = duplicate_int (sp_group -> wyckoff[0].multi*npoints, cdata -> at_type[k]); cryst -> holes = duplicate_bool (cdata -> objects, cdata -> holes); if (! cdata -> holes[k]) cryst -> lot[k] = duplicate_int (cdata -> at_by_object[k], cdata -> lot[k]); cryst -> occupancy[k] = cdata -> occupancy[k]; cryst -> sites[k] = duplicate_int (cdata -> sites[k][0]+1, cdata -> sites[k]); cryst -> position[k] = g_malloc0(cdata -> at_by_object[k]*sizeof*cryst -> position[k]); for (l=0; l at_by_object[k]; l++) cryst -> position[k][l] = cdata -> position[k][l]; cryst -> coord[k] = g_malloc0(cryst -> pos_by_object[k]*sizeof*cryst -> coord[k]); } } for (k=0; k cextra[0]; k++) { vx = v3_muls(vec3(box -> vect[0][0], box -> vect[0][1], box -> vect[0][2]), k); for (l=0; l cextra[1]; l++) { vy = v3_muls(vec3(box -> vect[1][0], box -> vect[1][1], box -> vect[1][2]), l); for (m=0; m cextra[2]; m++) { vz = v3_muls(vec3(box -> vect[2][0], box -> vect[2][1], box -> vect[2][2]), m); shift = v3_add (vx, v3_add(vy, vz)); for (n=0; n objects; n++) { if (occupying != 2) { cryst -> coord[n+h] = g_malloc0(cdata -> pos_by_object[n]*sizeof*cryst -> coord[n+h]); cryst -> pos_by_object[n+h] = cdata -> pos_by_object[n]; cryst -> at_by_object[n+h] = cdata -> at_by_object[n]; cryst -> holes[n+h] = cdata -> holes[n]; cryst -> at_type[n+h] = duplicate_int (sp_group -> wyckoff[0].multi*npoints, cdata -> at_type[n]); if (! cdata -> holes[n]) cryst -> lot[n+h] = duplicate_int (cdata -> at_by_object[n], cdata -> lot[n]); cryst -> occupancy[n+h] = cdata -> occupancy[n]; cryst -> sites[n+h] = duplicate_int (cdata -> sites[n][0]+1, cdata -> sites[n]); for (o=0; o sites[n+h][0]; o++) cryst -> sites[n+h][o+1] += h; cryst -> position[n+h] = g_malloc0(cdata -> at_by_object[n]*sizeof*cryst -> position[n+h]); for (o=0; o at_by_object[n]; o++) cryst -> position[n+h][o] = cdata -> position[n][o]; } o = cdata -> pos_by_object[n]; for (p=0; p coord[n+i*h][p+(!i)*h*o] = v3_add(m4_mul_coord (box -> frac_to_cart, cdata -> coord[n][p]), shift); } } h += (occupying != 2) ? cdata -> objects : 1; } } } cdata = free_crystal_data (cdata); gboolean low_occ = adjust_object_occupancy (cryst, occupying, rounding, tot_cell); atom at, bt; distance dist; if (! cryst -> overlapping) { for (i=0; i objects; i++) { if (! cryst -> holes[i]) { for (j=0; j pos_by_object[i]; j++) { at.x = cryst -> coord[i][j].x; at.y = cryst -> coord[i][j].y; at.z = cryst -> coord[i][j].z; for (k=i; k objects; k++) { if (! cryst -> holes[k]) { if (k != i || j < cryst -> pos_by_object[i]-1) { l = (k == i) ? j+1 : 0; for (m=l; m pos_by_object[k]; m++) { bt.x = cryst -> coord[k][m].x; bt.y = cryst -> coord[k][m].y; bt.z = cryst -> coord[k][m].z; dist = distance_3d (active_cell, 0, & at, & bt); if (dist.length < 0.5) { // g_print ("i= %d, j= %d, k= %d, m= %d, d= %f\n", i, j, k, m, dist.length); if (crystal_dist_chk) { build_res = 3; if (ask_yes_no (_("Inter-object distance(s) < 0.5 Ang. !"), _("Inter-object distance(s) < 0.5 Å !\n\n\t\tContinue and leave a single object at each position ?"), GTK_MESSAGE_WARNING, widg)) { crystal_dist_chk = FALSE; } else { clean_this_proj (active_project, new_proj); cryst = free_crystal_data (cryst); return 0; } } if (! crystal_dist_chk) { if (dist.length < 0.1) { cryst -> at_type[i][j] += cryst -> at_type[k][m]; for (n=m; n pos_by_object[k]-1; n++) { cryst -> coord[k][n].x = cryst -> coord[k][n+1].x; cryst -> coord[k][n].y = cryst -> coord[k][n+1].y; cryst -> coord[k][n].z = cryst -> coord[k][n+1].z; cryst -> at_type[k][n] += cryst -> at_type[k][n+1]; } cryst -> pos_by_object[k] --; m --; } } } } } } } } } } } int tot_new_at = 0; for (i=0; i objects; i++) { if (! cryst -> holes[i]) tot_new_at += cryst -> pos_by_object[i]*cryst -> at_by_object[i]; } int * tot_new_lot = allocint (tot_new_at); vec3_t * ncc = g_malloc0(tot_new_at*sizeof*ncc); i = 0; for (j=0; j objects; j++) { if (! cryst -> holes[j]) { for (k=0; k at_by_object[j]; k++) { for (l=0; l pos_by_object[j]; l++) { ncc[i] = v3_add (cryst -> coord[j][l], cryst -> position[j][k]); m = tot_new_lot[i] = cryst -> lot[j][k]; cryst -> nsps[m] ++; i ++; } } } } if (low_occ) { i = 0; for (j=0; j spec; j++) { if (cryst -> nsps[j]) i ++; } } else { i = cryst -> spec; } if (! c_step) { active_project -> natomes = tot_new_at; active_project -> nspec = i; alloc_proj_data (active_project, 1); } else { if (active_project -> natomes != tot_new_at) { #ifdef DEBUG g_debug ("CRYSTAL:: number of atoms changes between configurations"); #endif return -1; } if (active_project -> nspec != i) { #ifdef DEBUG g_debug ("CRYSTAL:: number of chemical species changes between configurations"); #endif return -1; } } active_project_changed (activep); k = l = 0; for (i=0; i spec; i++) { if (! cryst -> nsps[i]) { if (! low_occ) { if (ncc) g_free (ncc); if (tot_new_lot) g_free (tot_new_lot); #ifdef DEBUG g_debug ("CRYSTAL:: spec= %d, label= %s, nsps= %d", i+1, periodic_table_info[j].lab, 0); #endif return 0; } } else { j = (int)cryst -> z[i]; if (! c_step) { active_chem -> label[k] = g_strdup_printf ("%s", periodic_table_info[j].lab); active_chem -> element[k] = g_strdup_printf ("%s", periodic_table_info[j].name); active_chem -> nsps[k] = cryst -> nsps[i]; active_chem -> chem_prop[CHEM_Z][k] = cryst -> z[i]; active_chem -> chem_prop[CHEM_M][k] = set_mass_ (& j); active_chem -> chem_prop[CHEM_R][k] = set_radius_ (& j, & l); active_chem -> chem_prop[CHEM_N][k] = set_neutron_ (& j); active_chem -> chem_prop[CHEM_X][k] = active_chem -> chem_prop[CHEM_Z][k]; #ifdef DEBUG g_debug ("CRYSTAL:: spec= %d, label= %s, nsps= %d", k+1, active_chem -> label[k], active_chem -> nsps[k]); #endif } else { if (active_chem -> nsps[k] != cryst -> nsps[i]) { #ifdef DEBUG g_debug ("CRYSTAL:: number of atoms for chemical species %d changes between configurations", k+1); #endif return -1; } if (active_chem -> chem_prop[CHEM_Z][k] != cryst -> z[i]) { #ifdef DEBUG g_debug ("CRYSTAL:: atomic number for chemical species %d changes between configurations", k+1); #endif return -1; } } for (m=0; m vect[j][i]/2.0; } } for (i=0; i atoms[c_step][i].id = i; j = tot_new_lot[i]; active_project -> atoms[c_step][i].sp = j; active_project -> atoms[c_step][i].x = ncc[i].x + copos[0]; active_project -> atoms[c_step][i].y = ncc[i].y + copos[1]; active_project -> atoms[c_step][i].z = ncc[i].z + copos[2]; active_project -> atoms[c_step][i].show[0] = TRUE; active_project -> atoms[c_step][i].show[1] = TRUE; active_project -> atoms[c_step][i].label[0] = FALSE; active_project -> atoms[c_step][i].label[1] = FALSE; active_project -> atoms[c_step][i].pick[0] = FALSE; active_project -> atoms[c_step][i].cloned = FALSE; #ifdef DEBUG // g_debug ("sp= %d, %s %f %f %f", j+1, active_chem -> label[j], ncc[i].x, ncc[i].y, ncc[i].z); #endif } if (ncc) g_free (ncc); if (tot_new_lot) g_free (tot_new_lot); active_cell -> has_a_box = TRUE; active_cell -> crystal = TRUE; if (visible) { update_analysis_availability (active_project); active_project_changed (activep); if (new_proj) { add_project_to_workspace (); apply_project (TRUE); } else { active_project -> run = TRUE; active_image -> style = (active_project -> natomes <= 10000) ? BALL_AND_STICK : DEFAULT_STYLE; initcutoffs (active_chem, active_project -> nspec); init_curves_and_calc (active_project); init_atomes_analysis (active_project, TRUE); active_project_changed (activep); init_camera (active_project); setup_default_lights (active_project, active_image); setup_image_spec_data (active_project, active_image); glwin_init_spec_data (active_project, active_project -> nspec); #ifdef GTK3 // GTK3 Menu Action To Check for (j=1; j ogl_coord[j] = NULL; for (j=0; j ogl_rings[j] = NULL; for (j=0; j<2; j++) active_glwin -> ogl_mode[2+j+NINPUTS] = NULL; active_glwin -> ogl_chains[0] = NULL; #endif prepare_opengl_menu_bar (active_glwin); active_glwin -> labelled = check_label_numbers (active_project, 0); frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; bonds_update = 1; active_project -> runc[0] = FALSE; on_calc_bonds_released (NULL, NULL); if (active_glwin -> mode == EDITION) { #ifdef GTK4 set_mode (NULL, & active_glwin -> colorp[0][0]); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_glwin -> ogl_mode[0], TRUE); set_mode (active_glwin -> ogl_mode[0], & active_glwin -> colorp[0][0]); #endif } show_the_widgets (active_glwin -> win); gtk_button_set_label (GTK_BUTTON(active_glwin -> builder_win -> pbut), _("Build (new project)")); if (active_glwin -> atom_win) { if (active_glwin -> atom_win -> win) { clean_all_trees (active_glwin -> search_widg[7], active_project); } } } init_camera (active_project); active_image -> abc -> box = 1; if (to_wrap) { shift_it (vec3(0.0,0.0,0.0), 1, activep); active_glwin -> wrapped = TRUE; } active_image -> draw_clones = (active_glwin -> allbonds[1]) ? show_clones : FALSE; update_all_menus (active_glwin, active_project -> natomes); #ifdef GTK3 // GTK3 Menu Action To Check for (i=0; i<2; i++) { if (active_glwin -> ogl_box[i] != NULL) { widget_set_sensitive (active_glwin -> ogl_box[i], active_cell -> ltype); } } gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_glwin -> ogl_rep[0], TRUE); set_rep (active_glwin -> ogl_rep[0], & active_glwin -> colorp[0][0]); #endif init_shaders (active_glwin); update (active_glwin); chemistry_ (); } else { active_project -> modelgl -> search_widg[7] = free_this_search_data (active_project -> modelgl -> search_widg[7]); g_free (active_project -> modelgl); active_project -> modelgl = NULL; active_glwin = NULL; } update_insert_combos (); active_cell -> sp_group = duplicate_space_group (sp_group); if (low_occ && crystal_low_warning) { gchar * low_warning = _("The crystal will be created however some objects might be missing,\n" "Occupancy is too low compared to the number of site(s) per cell.\n\n" "To build a crystal matching the defined occupancy:\n" "\t 1) If you are trying to read a CIF file, use the crystal builder instead.\n" "\t 2) Modify the occupancy set-up to 'Completely random'.\n" "\t 3) Increase the number of unit cells up to get rid of this message."); show_warning (low_warning, widg); crystal_low_warning = FALSE; } return build_res; } atomes_1.3.1/src/opengl/edit/atom_insert.c0000664000175000017500000001071715212624223020203 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_insert.c * @short Functions to insert bond(s) in a project * @author Sébastien Le Roux */ /* * This file: 'atom_insert.c' * * Contains: * - The functions to insert bond(s) in a project * * List of functions: void add_bonds_to_project (project * this_proj, int removed, int nbd, int ** new_bond_list); void add_bonds_to_list (int ** new_bond_list, int nat, int nbd, atomic_object * object); void prepare_to_instert (gchar * key, project * this_proj, atom_search * asearch, gboolean visible); G_MODULE_EXPORT void set_atoms_to_insert (GtkComboBox * box, gpointer data); */ #include "atom_edit.h" /*! \fn void add_bonds_to_project (project * this_proj, int removed, int nbd, int ** new_bond_list) \brief add bond list to project bond list \param this_proj the target project \param removed the number of atom(s) removed \param nbd the number of bond(s) to add \param new_bond_list the bond list to add */ void add_bonds_to_project (project * this_proj, int removed, int nbd, int ** new_bond_list) { int i, j; if (nbd) { i = this_proj -> modelgl -> bonds[0][0]; this_proj -> modelgl -> bondid[0][0] = g_realloc (this_proj -> modelgl -> bondid[0][0], (i+nbd)*sizeof*this_proj -> modelgl -> bondid[0][0]); for (j=0; j modelgl -> bondid[0][0][j+i] = allocint (2); this_proj -> modelgl -> bondid[0][0][j+i][0] = new_bond_list[j][0] + this_proj -> natomes - removed; this_proj -> modelgl -> bondid[0][0][j+i][1] = new_bond_list[j][1] + this_proj -> natomes - removed; } this_proj -> modelgl -> bonds[0][0] += nbd; this_proj -> modelgl -> allbonds[0] += nbd; } } /*! \fn void add_bonds_to_list (int ** new_bond_list, int nat, int nbd, atomic_object * object) \brief add object bond(s) list to overall bond(s) list \param new_bond_list the bond list in the model \param nat the number of atom(s) in the model \param nbd the number of bond(s) in the model \param object the target insert object */ void add_bonds_to_list (int ** new_bond_list, int nat, int nbd, atomic_object * object) { int i; if (object -> bonds) { for (i=0; i bonds; i++) { new_bond_list[i+nbd][0] = object -> ibonds[i][0] + nat; new_bond_list[i+nbd][1] = object -> ibonds[i][1] + nat; } } } /*! \fn void prepare_to_instert (gchar * key, project * this_proj, atom_search * asearch, gboolean visible) \brief prepare to insert something \param key the string describing the object to insert \param this_proj the target project \param asearch the target atom search \param visible is the model edition window visible */ void prepare_to_instert (gchar * key, project * this_proj, atom_search * asearch, gboolean visible) { int i = get_selected_object_id (visible, this_proj -> id, key, asearch); if (i == FROM_PROJECT || i == FROM_DATA || i > 0) to_insert_in_project (i, -1, this_proj, asearch, visible); } /*! \fn G_MODULE_EXPORT void set_atoms_to_insert (GtkComboBox * box, gpointer data) \brief change the object to insert \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_atoms_to_insert (GtkComboBox * box, gpointer data) { GValue val = {0, }; GtkTreeModel * cmodel = gtk_combo_box_get_model (box); GtkTreeIter iter; if (gtk_combo_box_get_active_iter (box, & iter)) { gtk_tree_model_get_value (cmodel, & iter, 0, & val); tint * dat = (tint *)data; gchar * str = g_strdup_printf ("%s", (char *)g_value_get_string (& val)); project * this_proj = get_project_by_id (dat -> a); prepare_to_instert (str, this_proj, this_proj -> modelgl -> search_widg[dat -> c], TRUE); g_free (str); } combo_set_active ((GtkWidget *)box, 0); } atomes_1.3.1/src/opengl/edit/atom_edit.c0000664000175000017500000004501015212624223017616 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_edit.c * @short Functions to create the model edition window * @author Sébastien Le Roux */ /* * This file: 'atom_edit.c' * * Contains: * - The functions to create the model edition window * * List of functions: gboolean is_atom_win_active (glwin * view); G_MODULE_EXPORT gboolean delete_action (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean delete_action (GtkWidget * widg, GdkEvent * event, gpointer data); void clean_coord_window (project * this_proj); void clean_other_window_after_edit (project * this_proj); void clean_atom_win (project * this_proj); void prepare_atom_edition (gpointer data, gboolean visible); G_MODULE_EXPORT void close_edit (GtkButton * but, gpointer data); G_MODULE_EXPORT void set_reset_transformation (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_reset_transformation (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void apply_edit (GtkButton * but, gpointer data); G_MODULE_EXPORT void action_window (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void action_window (GtkWidget * widg, gpointer data); GtkWidget * create_atom_notebook (project * this_proj, GtkWidget * vbox); GtkWidget * create_edition_window (project * this_proj); atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); */ #include "atom_edit.h" float limit[2] = {100.0, 180.0}; gchar * action_name[5] = {i18n("Move"), i18n("Replace"), i18n("Remove"), i18n("Insert"), i18n("Random Move")}; gchar * action_atoms[3] = {i18n("All Non-selected Atoms"), i18n("All Selected Atoms"), i18n("All Atoms")}; gboolean was_moved; /*! \fn gboolean is_atom_win_active (glwin * view) \brief is the model edition window visible ? \param view the target glwin */ gboolean is_atom_win_active (glwin * view) { if (view -> atom_win) { return view -> atom_win -> visible; } return FALSE; } /*! \fn void clean_coord_window (project * this_proj) \brief update the environment configuration window after edtion \param this_proj the target project */ void clean_coord_window (project * this_proj) { if (this_proj -> modelgl -> coord_win) { #ifdef GTK3 int x, y; gtk_window_get_position (GTK_WINDOW(this_proj -> modelgl -> coord_win -> win), & x, & y); #endif this_proj -> modelgl -> coord_win -> win = destroy_this_widget (this_proj -> modelgl -> coord_win -> win); this_proj -> modelgl -> coord_win -> win = advanced_coord_properties (this_proj -> modelgl, 0); #ifdef GTK3 gtk_window_move (GTK_WINDOW(this_proj -> modelgl -> coord_win -> win), x ,y); #endif } } /*! \fn void clean_other_window_after_edit (project * this_proj) \brief update other windows after model edition if required \param this_proj the target project */ void clean_other_window_after_edit (project * this_proj) { int i; clean_coord_window (this_proj); if (this_proj -> modelgl -> cell_win) { if (this_proj -> modelgl -> cell_win -> win && ! this_proj -> modelgl -> cell_win -> slab_passivate) { i = gtk_notebook_get_current_page (GTK_NOTEBOOK (this_proj -> modelgl -> cell_win -> notebook)); #ifdef GTK3 int x, y; gtk_window_get_position (GTK_WINDOW(this_proj -> modelgl -> cell_win -> win), & x, & y); #endif this_proj -> modelgl -> cell_win -> win = destroy_this_widget (this_proj -> modelgl -> cell_win -> win); this_proj -> modelgl -> cell_win -> density = NULL; if (this_proj -> modelgl -> cell_win -> slab_lot) g_free (this_proj -> modelgl -> cell_win -> slab_lot); this_proj -> modelgl -> cell_win -> slab_lot = allocint (this_proj -> nspec); this_proj -> modelgl -> cell_win -> slab_info = NULL; if (this_proj -> natomes) { this_proj -> modelgl -> cell_win -> win = create_cell_edition_window (this_proj, & this_proj -> modelgl -> colorp[0][0]); gtk_notebook_set_current_page (GTK_NOTEBOOK (this_proj -> modelgl -> cell_win -> notebook), i); #ifdef GTK3 gtk_window_move (GTK_WINDOW(this_proj -> modelgl -> cell_win -> win), x ,y); #endif show_the_widgets (this_proj -> modelgl -> cell_win -> win); for (i=1; i<6; i++) { if (i < 3) hide_the_widgets (this_proj -> modelgl -> cell_win -> slab_hbox[i]); hide_the_widgets (this_proj -> modelgl -> cell_win -> slab_box[i]); } } } } /*if (this_proj -> modelgl -> spiner) { gtk_window_get_position (GTK_WINDOW(this_proj -> modelgl -> spiner -> win), & x, & y); this_proj -> modelgl -> spiner -> win = destroy_this_widget (this_proj -> modelgl -> spiner -> win); g_free (this_proj -> modelgl -> spiner); this_proj -> modelgl -> spiner = NULL; if (this_proj -> natomes) window_spinner (NULL, this_proj -> modelgl); gtk_window_move (GTK_WINDOW(this_proj -> modelgl -> spiner -> win), x ,y); }*/ } /*! \fn void clean_atom_win (project * this_proj) \brief clean model edition data \param this_proj the target project */ void clean_atom_win (project * this_proj) { this_proj -> modelgl -> anim -> last -> img -> xyz -> axis = this_proj -> modelgl -> atom_win -> old_axis; this_proj -> modelgl -> atom_win -> win = destroy_this_widget (this_proj -> modelgl -> atom_win -> win); if (! this_proj -> modelgl -> builder_win) { g_free (this_proj -> modelgl -> atom_win); this_proj -> modelgl -> atom_win = NULL; } else { this_proj -> modelgl -> atom_win -> visible = FALSE; } int shaders[6] = {ATOMS, BONDS, POLYS, RINGS, SELEC, VOLMS}; re_create_md_shaders (6, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; this_proj -> modelgl -> create_shaders[MEASU] = TRUE; this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; this_proj -> modelgl -> create_shaders[PICKS] = TRUE; int i; for (i=0; i<2; i++) { if (this_proj -> modelgl -> saved_coord[i] != NULL) { g_free (this_proj -> modelgl -> saved_coord[i]); this_proj -> modelgl -> saved_coord[i] = NULL; } } clean_other_window_after_edit (this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void close_edit (GtkButton * but, gpointer data) \brief close model edition window \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void close_edit (GtkButton * but, gpointer data) { int id = GPOINTER_TO_INT(data); project * this_proj = get_project_by_id(id); gboolean leave = (this_proj -> modelgl -> was_moved) ? ask_yes_no(_("Leaving without saving ?"), _("To preserve atom(s) displacement(s) press the 'Apply' button\n" "Otherwise initial atom positions will be restored ...\n" "\t\t\t Are you sure to leave ?") , GTK_MESSAGE_QUESTION, this_proj -> modelgl -> atom_win -> win) : TRUE; if (leave && this_proj -> modelgl -> atom_win) { int h; for (h=0; h<2; h++) { reset_coordinates (this_proj, h); init_coordinates (this_proj, h, TRUE, FALSE); } for (h=2; h<7; h++) { g_free (this_proj -> modelgl -> search_widg[h]); this_proj -> modelgl -> search_widg[h]= NULL; } this_proj -> modelgl -> was_moved = FALSE; clean_atom_win (this_proj); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean delete_action (GtkWindow * widg, gpointer data) \brief model edition window close event callback GTK4 \param widg \param data the associated data pointer */ G_MODULE_EXPORT gboolean delete_action (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean delete_action (GtkWidget * widg, GdkEvent * event, gpointer data) \brief model edition window close event callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean delete_action (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { close_edit (NULL, data); return TRUE; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_reset_transformation (GtkCheckButton * but, gpointer data) \brief reset model transformation toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_reset_transformation (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_reset_transformation (GtkToggleButton * but, gpointer data) \brief reset model transformation toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_reset_transformation (GtkToggleButton * but, gpointer data) #endif { if (button_get_status((GtkWidget *)but)) { tint * id = (tint *)data; project * this_proj = get_project_by_id (id -> a); if (ask_yes_no(_("Reset"), _("Reset and get back to initial coordinates ?\n This will affect all atoms !"), GTK_MESSAGE_WARNING, this_proj -> modelgl -> atom_win -> win)) { int h, i, j; for (h=0; h<3; h++) { for (i=0; i<2; i++) { for (j=0; j<6; j++) { this_proj -> modelgl -> atom_win -> new_param[h][i][j] = this_proj -> modelgl -> edition_param[h][i][j]; gtk_range_set_value (GTK_RANGE(this_proj -> modelgl -> atom_win -> edit_scale[j]), this_proj -> modelgl -> atom_win -> new_param[h][i][j]); update_range_and_entry (this_proj, h, i, j); // update_coordinates (this_proj, h, i, j); } } } for (h=0; h<2; h++) { reset_coordinates (this_proj, h); init_coordinates (this_proj, h, TRUE, FALSE); } init_default_shaders (this_proj -> modelgl); update (this_proj -> modelgl); } button_set_status ((GtkWidget *)but, FALSE); } } /*! \fn G_MODULE_EXPORT void apply_edit (GtkButton * but, gpointer data) \brief apply edition action callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void apply_edit (GtkButton * but, gpointer data) { int id = GPOINTER_TO_INT(data); project * this_proj = get_project_by_id(id); int h, i, j; i = this_proj -> modelgl -> mode; this_proj -> modelgl -> mode = ANALYZE; image * last = this_proj -> modelgl -> anim -> last -> img; vec4_t q = last -> rotation_quaternion; j = -1; if (id != active_project) { i = activep; active_project_changed (id); } init_camera (this_proj); if (j != -1) active_project_changed (j); last -> rotation_quaternion = q; this_proj -> modelgl -> mode = i; for (h=0; h<3; h++) { for (i=0; i<2; i++) { for (j=0; j<6; j++) { this_proj -> modelgl -> edition_param[h][i][j] = this_proj -> modelgl -> atom_win -> new_param[h][i][j]; this_proj -> modelgl -> atom_win -> old_param[h][i][j] = this_proj -> modelgl -> atom_win -> new_param[h][i][j]; } } } for (h=0; h<2; h++) { g_free (this_proj -> modelgl -> saved_coord[h]); this_proj -> modelgl -> saved_coord[h] = save_coordinates (this_proj, h); } this_proj -> modelgl -> was_moved = FALSE; //clean_atom_win (this_proj); } /*! \fn GtkWidget * create_atom_notebook (project * this_proj, GtkWidget * vbox) \brief create the model edition notebook \param this_proj the target project \param vbox the GtkWidget sending the signal */ GtkWidget * create_atom_notebook (project * this_proj, GtkWidget * vbox) { GtkWidget * notebook = gtk_notebook_new (); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, notebook, FALSE, FALSE, 0); gchar * str; int i; for (i=0; i<5; i++) { str = g_strdup_printf ("%s", _(action_name[i])); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), action_tab(i, this_proj), markup_label(str, -1, -1, 0.0, 0.5)); g_free (str); } show_the_widgets (notebook); return notebook; } /*! \fn atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize) \brief allocate atom search data structure \param proj the target project id \param action the edition action \param searchid the atom search id \param tsize the atom search object list size */ atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize) { atom_search * asearch = g_malloc0(sizeof*asearch); asearch -> search_digit = -1; asearch -> proj = proj; asearch -> action = action; int i; for (i=0; i<6; i++) { asearch -> pointer[i].a = proj; asearch -> pointer[i].b = TOLAB+i; asearch -> pointer[i].c = searchid; } asearch -> recompute_bonding = FALSE; if (searchid != 5) allocate_todo (asearch, tsize); if (get_project_by_id(proj) -> modelgl) clean_picked_and_labelled (asearch, TRUE); return asearch; } /*! \fn GtkWidget * create_edition_window (project * this_proj) \brief create the model edition window \param this_proj the target project */ GtkWidget * create_edition_window (project * this_proj) { gchar * str = g_strdup_printf (_("Model edition - %s"), this_proj -> name); this_proj -> modelgl -> was_moved = FALSE; GtkWidget * win = create_win (str, this_proj -> modelgl -> win, FALSE, FALSE); g_free (str); int i, j; for (i=2; i<7; i++) { if (this_proj -> modelgl -> search_widg[i] == NULL) { this_proj -> modelgl -> search_widg[i] = allocate_atom_search (this_proj -> id, i, i, this_proj -> natomes); this_proj -> modelgl -> search_widg[i] -> status = (this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected) ? 1 : 2; } } this_proj -> modelgl -> atom_win -> vbox = create_vbox (5); add_container_child (CONTAINER_WIN, win, this_proj -> modelgl -> atom_win -> vbox); gtk_widget_set_size_request (this_proj -> modelgl -> atom_win -> vbox, 760, -1); add_gtk_close_event (win, G_CALLBACK(delete_action), GINT_TO_POINTER(this_proj -> id)); for (i=0; i<2; i++) { for (j=0; j<2; j++) this_proj -> modelgl -> rebuild[i][j] = TRUE; } this_proj -> modelgl -> atom_win -> notebook = create_atom_notebook (this_proj, this_proj -> modelgl -> atom_win -> vbox); GtkWidget * hbox = create_hbox (5); add_box_child_end (this_proj -> modelgl -> atom_win -> vbox, hbox, TRUE, FALSE, 0); GtkWidget * but = create_button (_("Apply"), IMG_STOCK, APPLY, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(apply_edit), GINT_TO_POINTER(this_proj -> id)); add_box_child_end (hbox, but, FALSE, FALSE, 5); but = create_button (_("Close"), IMG_STOCK, FCLOSE, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(close_edit), GINT_TO_POINTER(this_proj -> id)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 5); return win; } /*! \fn void prepare_atom_edition (gpointer data, gboolean visible) \brief prepare atom edition \param data the associated data pointer \param visible is the window visible (1/0) */ void prepare_atom_edition (gpointer data, gboolean visible) { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); int i; if (this_proj -> modelgl -> atom_win == NULL) { this_proj -> modelgl -> atom_win = g_malloc0(sizeof*this_proj -> modelgl -> atom_win); for (i=0; i<2; i++) this_proj -> modelgl -> atom_win -> adv_bonding[i] = this_proj -> modelgl -> adv_bonding[i]; if (this_proj -> modelgl -> anim) { this_proj -> modelgl -> atom_win -> old_axis = this_proj -> modelgl -> anim -> last -> img -> xyz -> axis; } for (i=0; i<2; i++) { init_coordinates (this_proj, i, visible, TRUE); } this_proj -> modelgl -> atom_win -> msd = allocfloat (this_proj -> natomes); this_proj -> modelgl -> atom_win -> msd_all = allocfloat (this_proj -> nspec); this_proj -> modelgl -> atom_win -> repeat_move = 1; } this_proj -> modelgl -> atom_win -> visible = visible; if (visible) { this_proj -> modelgl -> atom_win -> win = create_edition_window (this_proj); show_the_widgets (this_proj -> modelgl -> atom_win -> win); gtk_notebook_set_current_page (GTK_NOTEBOOK (this_proj -> modelgl -> atom_win -> notebook), id -> b); for (i=0; i<5; i++) { if (i != 3) { if (this_proj -> modelgl -> search_widg[i+2] -> todo_size < GTK_LIMIT) { hide_the_widgets (this_proj -> modelgl -> search_widg[i+2] -> info[1]); } else { hide_the_widgets (this_proj -> modelgl -> search_widg[i+2] -> id_box); } } widget_set_sensitive (gtk_notebook_get_nth_page(GTK_NOTEBOOK (this_proj -> modelgl -> atom_win -> notebook), i), this_proj -> natomes); } widget_set_sensitive (gtk_notebook_get_nth_page(GTK_NOTEBOOK (this_proj -> modelgl -> atom_win -> notebook), 3), 1); if (this_proj -> modelgl -> mode == EDITION) { #ifdef GTK4 set_mode (NULL, & this_proj -> modelgl -> colorp[0][0]); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_mode[0], TRUE); set_mode (this_proj -> modelgl -> ogl_mode[0], & this_proj -> modelgl -> colorp[0][0]); #endif } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void action_window (GSimpleAction * action, GVariant * parameter, gpointer data) \brief open model edition window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void action_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void action_window (GtkWidget * widg, gpointer data) \brief open model edition window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void action_window (GtkWidget * widg, gpointer data) #endif { prepare_atom_edition (data, TRUE); } atomes_1.3.1/src/opengl/edit/cell_pixel.c0000664000175000017500000001702015212624223017771 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cell_pixel.c * @short Functions to create the pixel debugging tab for the cell edition window \n This is only used when DEBUG option is activated at build time * @author Sébastien Le Roux */ /* * This file: 'cell_pixel.c' * * Contains: * - The functions to create the pixel debugging tab for the cell edition window This is only used when DEBUG option is activated at build time * * List of functions: void pix_info_ (int * na, int * nb, int * nc); void send_pix_info_ (int * p, int listp[27], int * ngb); void update_pix_table (project * this_proj); G_MODULE_EXPORT void set_pix (GtkEntry * res, gpointer data); GtkWidget * create_css_label (gchar * str, int id); GtkWidget * attach_grid (project * this_proj, int init); GtkWidget * pixels_tab (project * this_proj); */ #ifdef DEBUG #include "cell_edit.h" /*! \fn void pix_info_ (int * na, int * nb, int * nc) \brief allocate pixel data pointer from Fortran90 \param na x size \param nb y size \param nc z size */ void pix_info_ (int * na, int * nb, int * nc) { active_project -> pix[0] = *na; active_project -> pix[1] = *nb; active_project -> pix[2] = *nc; active_project -> pixels = allocdint (active_project -> pix[0]*active_project -> pix[1]*active_project -> pix[2],27); } /*! \fn void send_pix_info_ (int * p, int listp[27], int * ngb) \brief retrieve pixel information from Fortran90 \param p the pixel id \param listp the neighbor list for pixel id \param ngb the number of neighbor for pixel id */ void send_pix_info_ (int * p, int listp[27], int * ngb) { int i; for (i=0; i<* ngb; i++) { active_project -> pixels[* p][i] = listp[i]; } } /*! \fn GtkWidget * create_css_label (gchar * str, int id) \brief create CSS label \param str the string \param id 0 = white, 1 = yellow */ GtkWidget * create_css_label (gchar * str, int id) { gchar * colo[2] = {"white", "yellow"}; gchar * backcol; if (id) { backcol = g_strdup_printf ("label#icolor {\n" " background-color: red;\n" " color: %s;\n}", colo[id]); } else { backcol = g_strdup_printf ("label#color {\n" " background-color: blue;\n" " color: %s;\n}", colo[id]); } provide_gtk_css (backcol); g_free (backcol); GtkWidget * lab = markup_label(str, 50, 50, 0.5, 0.5); gtk_widget_set_name (lab, (id) ? "icolor" : "color"); show_the_widgets (lab); return lab; } /*! \fn GtkWidget * attach_grid (project * this_proj, int init) \brief create pixel grid \param this_proj the target project \param init the target pixel */ GtkWidget * attach_grid (project * this_proj, int init) { GtkWidget * table = gtk_grid_new (); gchar * str; gboolean actif; int i, j, k, l, m; l = init+1; for (i=0; i pix[1]; i++) { for (j=0; j pix[0]; j++) { actif = FALSE; for (k=0; k<27; k++) { if (l == this_proj -> pixels[this_proj -> actif_pix-1][k]) { actif = TRUE; } } if (l == this_proj -> actif_pix) { str = g_strdup_printf ("%d", l); m = 1; } else { str = g_strdup_printf ("%d", l); m = 0; } l ++; if (actif) { gtk_grid_attach (GTK_GRID (table), create_css_label(str, m), j, i, 1, 1); } else { gtk_grid_attach (GTK_GRID (table), markup_label(str, 50, 50, 0.5, 0.5), j, i, 1, 1); } g_free (str); } } gtk_widget_set_size_request (table, this_proj -> pix[0]*50, this_proj -> pix[1]*50); return table; } /*! \fn void update_pix_table (project * this_proj) \brief prepare pixel table widget \param this_proj the target project */ void update_pix_table (project * this_proj) { int i; int pix[3]; for (i=0; i<3; i++) { this_proj -> pix_tab[i] = destroy_this_widget (this_proj -> pix_tab[i]); } // Seed for bottom grid if (this_proj -> actif_pix <= this_proj -> pix[0]*this_proj -> pix[1]) { pix[0] = this_proj -> pix[0]*this_proj -> pix[1]*(this_proj -> pix[2]-1); } else { pix[0] = (this_proj -> actif_pix-1)/(this_proj -> pix[0]*this_proj -> pix[1]); pix[0] -= 1; pix[0] *= (this_proj -> pix[0]*this_proj -> pix[1]); } // Seed for pixel grid pix[1] = (this_proj -> actif_pix-1)/(this_proj -> pix[0]*this_proj -> pix[1]); pix[1] *= (this_proj -> pix[0]*this_proj -> pix[1]); // Seed for top grid if (this_proj -> actif_pix > this_proj -> pix[0]*this_proj -> pix[1]*(this_proj -> pix[2]-1)) { pix[2] = 0; } else { pix[2] = (this_proj -> actif_pix-1)/(this_proj -> pix[0]*this_proj -> pix[1]); pix[2] += 1; pix[2] *= (this_proj -> pix[0]*this_proj -> pix[1]); } for (i=0; i<3; i++) { this_proj -> pix_tab[i] = attach_grid (this_proj, pix[i]); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> pix_box, this_proj -> pix_tab[i], FALSE, FALSE, 20); } show_the_widgets (this_proj -> pix_box); } /*! \fn G_MODULE_EXPORT void set_pix (GtkEntry * res, gpointer data) \brief set pixel id callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_pix (GtkEntry * res, gpointer data) { int id = GPOINTER_TO_INT (data); project * this_proj = get_project_by_id (id); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); int p = (int)v; int n = this_proj-> pix[0] * this_proj -> pix[1] * this_proj -> pix[2]; if (p > 0 && p <= n) { this_proj -> actif_pix = p; } update_entry_int (res, this_proj -> actif_pix); update_pix_table (this_proj); } /*! \fn GtkWidget * pixels_tab (project * this_proj) \brief create the PBC pixels checking tab \param this_proj the target project */ GtkWidget * pixels_tab (project * this_proj) { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox = create_hbox (0); gchar * str = g_strdup_printf (_("\tSelect pixel to check, from 1 to %d:"), this_proj -> pix[0]*this_proj -> pix[1]*this_proj->pix[2]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 10); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_entry(G_CALLBACK(set_pix), 100, 15, FALSE, GINT_TO_POINTER(this_proj -> id)), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); GtkWidget * scroll = create_scroll (vbox, 700, 350, GTK_SHADOW_ETCHED_IN); this_proj -> actif_pix = 1; this_proj -> pix_box = create_vbox (0); this_proj -> pix_tab[0] = this_proj -> pix_tab[1] = this_proj -> pix_tab[2] = NULL; update_pix_table (this_proj); add_container_child (CONTAINER_SCR, scroll, this_proj -> pix_box); return vbox; } #endif // DEBUG atomes_1.3.1/src/opengl/edit/cbuild_edit.h0000664000175000017500000001047215212624223020131 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cbuild_edit.h * @short Function declarations for the crystal builder * @author Sébastien Le Roux */ /* * This header file: 'cbuild_edit.h' * * Contains: - Function declarations for the crystal builder */ #ifndef CBUILD_EDIT_H_ #define CBUILD_EDIT_H_ #include "global.h" #include typedef struct crystal_data crystal_data; struct crystal_data { int objects; int spec; double * z; int ** lot; int ** at_type; int * nsps; int * at_by_object; int * pos_by_object; double * occupancy; int rounding; gboolean overlapping; int ** sites; gboolean shared_sites; gboolean with_holes; gboolean * holes; vec3_t * insert; vec3_t ** coord; vec3_t ** position; }; extern int clean_xml_data (xmlDoc * doc, xmlTextReaderPtr reader); extern xmlNodePtr findnode (xmlNodePtr startnode, char * nname); extern gchar * groups[230]; extern gchar * hmsymbols[230]; extern dint t_box[9]; extern double tmp_box[2][3]; extern double tmp_vect[3][3]; extern char * vect_name[3]; extern char * vect_comp[3]; extern char * box_p[2]; extern char * box_prop[2][3]; extern gchar * cif_occupancies[3]; extern gchar * cif_occ[3]; extern gchar * cif_sites[2]; extern atom_search * insert_search; extern gboolean crystal_low_warning; extern gboolean crystal_crowded; extern gboolean crystal_dist_chk; extern gboolean test_vol (double box[2][3], double vect[3][3]); extern G_MODULE_EXPORT void update_vect (GtkEntry * entry, gpointer data); extern G_MODULE_EXPORT void update_box (GtkEntry * entry, gpointer data); extern double get_value_from_pos (gchar * pos); extern double get_val_from_wyckoff (gchar * pos, gchar * wval); extern crystal_data * allocate_crystal_data (int objects, int species); extern crystal_data * free_crystal_data (crystal_data * cryst); #ifdef GTK4 extern G_MODULE_EXPORT void to_update_box (GtkEditable * widg, gpointer data); extern G_MODULE_EXPORT void to_update_vect (GtkEditable * widg, gpointer data); #else extern G_MODULE_EXPORT gboolean to_update_box (GtkWidget * widg, GdkEventFocus * event, gpointer data); extern G_MODULE_EXPORT gboolean to_update_vect (GtkWidget * widg, GdkEventFocus * event, gpointer data); #endif extern int occupancy (double occ, int cif_occ); extern gchar * replace_markup (char * init, char * key, char * rep); extern gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); extern space_group * read_sg_xml_file (const char * filetoread); extern GtkWidget * create_atoms_tree (atom_search * asearch, project * this_proj, int na); extern atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); extern GtkWidget * create_action_combo (int id, project * this_proj); extern void prepare_atom_edition (gpointer data, gboolean visible); extern void clean_all_trees (atom_search * asearch, project * this_proj); extern void prepare_opengl_menu_bar (glwin * view); extern void allocatoms (project * this_proj); extern chemical_data * alloc_chem_data (int spec); extern void setup_default_lights (project * this_proj, image * img); extern void setup_image_spec_data (project * this_proj, image * img); extern void glwin_init_spec_data (project * this_proj, int nspec); extern G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data); extern void shift_it (vec3_t shift, int refresh, int proj); extern G_MODULE_EXPORT void close_edit (GtkWidget * widg, gpointer data); extern int insert_this_project_from_lib (int id, gboolean visible, project * this_proj, atom_search * asearch); extern void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible); #endif atomes_1.3.1/src/opengl/edit/atom_action.c0000664000175000017500000020731215212624223020153 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file atom_action.c * @short Functions to apply the edition actions to the model * @author Sébastien Le Roux */ /* * This file: 'atom_action.c' * * Contains: * - The functions to apply the edition actions to the model * * List of functions: int action_atoms_from_project (project * this_proj, atom_search * asearch, gboolean visible); gboolean do_we_have_objects_in_selection (project * this_proj, atom_search * asearch, gboolean editing); void free_dummies (dummy_atom * tmp_pick); void clean_this_project (project * this_proj); void clean_motion_search (project * this_proj, atom_search * asearch, int sid); void clean_all_trees (atom_search * asearch, project * this_proj); void apply_action (project * this_proj, atom_search * asearch); void prepare_random_action (project * this_proj, atom_search * asearch); G_MODULE_EXPORT void take_action (GtkButton * but, gpointer data); atom_search * duplicate_atom_search (atom_search * asearch); */ #include "atom_edit.h" #include "curve.h" #include "preferences.h" #include "bind.h" extern GLdouble get_max_depth (GLdouble depth); extern void setup_default_lights (project * this_proj, image * img); /*! \fn void free_dummies (dummy_atom * tmp_pick) \brief free atom dummy list \param tmp_pick the atom dummy list to free */ void free_dummies (dummy_atom * tmp_pick) { while (tmp_pick) { if (tmp_pick -> next) { tmp_pick = tmp_pick -> next; g_free (tmp_pick -> prev); tmp_pick -> prev = NULL; } else { g_free (tmp_pick); tmp_pick = NULL; } } } /*! \fn void clean_this_project (project * this_proj) \brief clean project data for the edition process \param this_proj the target project */ void clean_this_project (project * this_proj) { int i, j; opengl_project_changed (this_proj -> id); selected_aspec = -1; is_selected = -1; for (i=0; i natomes; i++) { opengl_project -> atoms[0][i].show[0] = opengl_project -> atoms[0][i].show[1] = FALSE; } gboolean vis_stat = opengl_project -> modelgl -> atom_win -> visible; opengl_project -> modelgl -> atom_win -> visible = FALSE; i = opengl_project -> modelgl -> selection_mode; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); #endif opengl_project -> modelgl -> selection_mode = NSELECTION-1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); #endif opengl_project -> modelgl -> selection_mode = i; opengl_project -> modelgl -> atom_win -> visible = vis_stat; #ifdef GTK4 label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); #else label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); #endif opengl_project -> modelgl -> create_shaders[RINGS] = TRUE; opengl_project -> modelgl -> n_shaders[RINGS][0] = -1; for (i=0; i<2; i++) { for (j=0; j coord -> totcoord[i]; j++) { opengl_project -> modelgl -> anim -> last -> img -> show_poly[i][j] = FALSE; } } opengl_project -> modelgl -> create_shaders[POLYS] = TRUE; opengl_project -> modelgl -> n_shaders[POLYS][0] = -1; opengl_project -> natomes = 0; g_free (this_proj -> atoms[0]); for (i=0; i<2; i++) { if (opengl_project -> modelgl -> bonds[0][i]) { if (opengl_project -> modelgl -> bondid[0][i]) { g_free (opengl_project -> modelgl -> bondid[0][i]); opengl_project -> modelgl -> bondid[0][i] = NULL; } } opengl_project -> modelgl -> bonds[0][i] = 0; opengl_project -> modelgl -> allbonds[i] = 0; } g_free (opengl_project -> chemistry); opengl_project -> chemistry = NULL; init_curves_and_calc (opengl_project); frag_update = mol_update = 0; prep_calc_actions (); free_glwin_spec_data (opengl_project, opengl_project -> nspec); glwin_init_spec_data (opengl_project, 1); opengl_project -> nspec = 0; for (i=0; i<10; i++) opengl_project -> coord -> totcoord[i] = 0; #ifdef GTK3 // GTK3 Menu Action To Check for (i=1; i modelgl -> ogl_coord[i] = NULL; for (i=0; i modelgl -> ogl_rings[i] = NULL; opengl_project -> modelgl -> ogl_chains[0] = NULL; #endif prepare_opengl_menu_bar (opengl_project -> modelgl); } /*! \fn void clean_motion_search (project * this_proj, atom_search * asearch, int sid) \brief clean atom search motion data \param this_proj the target project \param asearch the target atom search \param sid motion id */ void clean_motion_search (project * this_proj, atom_search * asearch, int sid) { int i; if (asearch -> in_selection) { for (i=0; i todo_size; i++) asearch -> todo[i] = 0; asearch -> in_selection = 0; if (this_proj -> modelgl -> atom_win -> to_be_moved[sid]) { atomic_object * object = this_proj -> modelgl -> atom_win -> to_be_moved[sid]; while (object -> next) { object = object -> next; g_free (object -> prev); } g_free (object); this_proj -> modelgl -> atom_win -> to_be_moved[sid] = NULL; } } this_proj -> modelgl -> atom_win -> rebuilt[! sid] = TRUE; this_proj -> modelgl -> atom_win -> rebuilt[sid] = FALSE; } /*! \fn int action_atoms_from_project (project * this_proj, atom_search * asearch, gboolean visible) \brief apply atom edition action to project (motion, remove, replace, insert, random move) \param this_proj the target project \param asearch the target atom search \param visible is the 'model edition' window visible (1/0) */ int action_atoms_from_project (project * this_proj, atom_search * asearch, gboolean visible) { int i, j, k, l, m, n, o, p; dummy_atom * to_rem, * to_add; dummy_atom * tmp_rem, * tmp_add; atomic_object * object_list = NULL; atomic_object * tmp_list; atomic_object * object, * tmp_obj; int remove, extra, nmols; int act = (asearch -> pointer[0].c == 3) ? 0 : (asearch -> pointer[0].c == 5) ? 1 : 3; to_rem = tmp_rem = NULL; to_add = tmp_add = NULL; remove = extra = nmols = 0; atom_edition * edit = this_proj -> modelgl -> atom_win; edit -> add_spec = 0; if (this_proj -> nspec) { edit -> new_z = duplicate_double (this_proj -> nspec, this_proj -> chemistry -> chem_prop[CHEM_Z]); edit -> coord = duplicate_coord_info (this_proj -> coord); } else if (! this_proj -> natomes) { edit -> coord = NULL; this_proj -> modelgl -> anim -> last -> img -> xyz -> axis = default_axis.axis; } gboolean passivate = FALSE; if (asearch -> action == REMOVE) { if (this_proj -> modelgl -> cell_win) { if (this_proj -> modelgl -> cell_win -> slab_passivate) passivate = TRUE; } } if (asearch -> action == DISPL || asearch -> action == REMOVE || asearch -> action == RANMOVE) { for (i=0; i natomes; i++) { if (asearch -> todo[i]) { if (to_rem != NULL) { tmp_rem -> next = g_malloc0(sizeof*tmp_rem); tmp_rem -> next -> prev = tmp_rem; tmp_rem = tmp_rem -> next; } else { to_rem = g_malloc0(sizeof*to_rem); tmp_rem = to_rem; } tmp_rem -> id = i; remove ++; } } } else { object = edit -> to_be_inserted[act]; i = o = p = 0; while (object) { j = object -> id; /* #ifdef DEBUG g_debug ("object -> id= %d, name= %s, todo[%d]= %d", j+1, object -> name, j+1, asearch -> todo[j]); #endif */ if (asearch -> todo[j]) { if (edit -> coord) { o += search_for_new_spec (edit, object); } else { edit -> coord = duplicate_coord_info (object -> coord); edit -> new_z = allocdouble (edit -> coord -> species); for (k=0; k coord -> species; k++) edit -> new_z[k] = (double)object -> old_z[k]; o += object -> species; } asearch -> in_selection --; if (! object_list) { object_list = duplicate_atomic_object (object); tmp_list = object_list; } else { tmp_list -> next = duplicate_atomic_object (object); tmp_list -> next -> prev = tmp_list; tmp_list = tmp_list -> next; } for (k=0; k atoms; k++) { if (to_add) { tmp_add -> next = g_malloc0(sizeof*tmp_add); tmp_add -> next -> prev = tmp_add; tmp_add = tmp_add -> next; } else { to_add = g_malloc0(sizeof*to_add); tmp_add = to_add; } tmp_add -> id = this_proj -> natomes + extra - remove; l = object -> at_list[k].sp; tmp_add -> type = find_spec_id (edit -> coord -> species, object -> old_z[l], edit -> new_z); tmp_add -> xyz[0] = object -> at_list[k].x + object -> baryc[0]; tmp_add -> xyz[1] = object -> at_list[k].y + object -> baryc[1]; tmp_add -> xyz[2] = object -> at_list[k].z + object -> baryc[2]; for (m=0; m<2; m++) { tmp_add -> coord[m] = find_this_geo_id (m, object -> coord, object -> old_z, object -> at_list[k].coord[m], l, tmp_add -> type, edit -> coord, edit -> new_z); } for (m=2; m<4; m++) tmp_add -> coord[m] = object -> at_list[k].coord[2] + i; if (this_proj -> coord) { for (m=2; m<4; m++) tmp_add -> coord[m] += this_proj -> coord -> totcoord[m]; } tmp_add -> numv = object -> at_list[k].numv; if (tmp_add -> numv) { tmp_add -> vois = duplicate_int (object -> at_list[k].numv, object -> at_list[k].vois); for (m=0; m numv; m++) tmp_add -> vois[m] += p + this_proj -> natomes; sort (tmp_add ->numv, tmp_add -> vois); } extra ++; } i += object -> coord -> totcoord[2]; p += object -> atoms; if (object -> prev) { if (object -> next) { object -> prev -> next = object -> next; object -> next -> prev = object -> prev; tmp_obj = object; object = object -> next; g_free (tmp_obj); } else { object -> prev -> next = NULL; g_free (object); object = NULL; } } else { if (object -> next) { edit -> to_be_inserted[act] = object -> next; object = object -> next; g_free (object -> prev); object -> prev = NULL; } else { g_free (edit -> to_be_inserted[act]); edit -> to_be_inserted[act] = NULL; object = NULL; } } } else { object = object -> next; } } nmols += i; edit -> coord -> totcoord[2] += i; edit -> add_spec = o; } #ifdef DEBUG if (asearch -> action == INSERT && extra) { g_debug ("Project coord before insert:"); if (this_proj -> natomes) { print_coord_info (this_proj, this_proj -> coord); } else { g_debug (" *** None *** "); } g_debug ("Coord info after object insert:"); print_coord_info (NULL, edit -> coord); } #endif if (asearch -> action == DISPL && remove == 0) return -1; if (asearch -> action == RANMOVE && remove == 0) return -1; if (asearch -> action == REMOVE && remove == 0) return -1; if ((asearch -> action == INSERT || asearch -> action == REPLACE) && extra == 0) return extra; if (asearch -> action == REMOVE && remove > this_proj -> natomes) return -1; if ((asearch -> action != DISPL && asearch -> action != RANMOVE) || (asearch -> passivating && asearch -> filter < 3) || (asearch -> action == RANMOVE && asearch -> passivating && asearch -> object < 2) || (asearch -> action == RANMOVE && ! asearch -> passivating && ! asearch -> object)) { this_proj -> modelgl -> bonding = FALSE; this_proj -> coord -> totcoord[3] = 0; if (this_proj -> modelgl -> adv_bonding[1]) { for (i=0; i<2; i++) { if (this_proj -> modelgl -> anim -> last -> img -> color_map[i] == 4 || this_proj -> modelgl -> anim -> last -> img -> color_map[i] == 5) { #ifdef GTK3 // GTK3 Menu Action To Check if (this_proj -> modelgl -> color_styles[i*ATOM_MAPS]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> color_styles[i*ATOM_MAPS], TRUE); set_color_map (this_proj -> modelgl -> color_styles[i*ATOM_MAPS], & this_proj -> modelgl -> colorp[i*ATOM_MAPS][0]); } #endif } } } this_proj -> modelgl -> adv_bonding[1] = FALSE; if (this_proj -> force_field[0]) { g_free (this_proj -> force_field[0]); this_proj -> force_field[0] = NULL; } if (asearch -> action != DISPL && asearch -> action != RANMOVE) { if (this_proj -> modelgl -> custom_map) { g_free (this_proj -> modelgl -> custom_map); this_proj -> modelgl -> custom_map = NULL; for (i=0; i<2; i++) { j = i*ATOM_MAPS; #ifdef GTK3 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> color_styles[j], TRUE); set_color_map (this_proj -> modelgl -> color_styles[j], & this_proj -> modelgl -> colorp[j][0]); if (i) widget_set_sensitive (this_proj -> modelgl -> color_styles[j+6], 0); #endif } } } } // Clean curves data if (this_proj -> analysis) { for (i=0 ; i analysis[i]) { this_proj -> analysis[i] -> calc_ok = FALSE; hide_curves (this_proj, i); erase_curves (this_proj, i); } } } if (this_proj -> modelgl -> rings) { this_proj -> modelgl -> rings = FALSE; for (i=0; i<5; i++) { clean_rings_data (i, this_proj -> modelgl); } #ifdef GTK3 update_rings_menus (this_proj -> modelgl); #endif } if (this_proj -> modelgl -> chains) { clean_chains_data (this_proj -> modelgl); #ifdef GTK3 update_chains_menus (this_proj -> modelgl); #endif } clean_volumes_data (this_proj -> modelgl); if (asearch -> action == REMOVE && remove == this_proj -> natomes) { clean_this_project (this_proj); return remove; } atom * new_list = NULL; atom * tmp_new = NULL; gboolean * showfrag; int ** tmpgeo[2]; int new_atoms = 0; int * old_id = NULL; if (this_proj -> natomes) { old_id = allocint (this_proj -> natomes); tmp_rem = to_rem; for (i=0; i natomes; i++) { if (tmp_rem && tmp_rem -> id == i) { old_id[i] = -(i+1); if (asearch -> action == DISPL || asearch -> action == RANMOVE || passivate) { if (new_list) { tmp_new -> next = duplicate_atom (& this_proj -> atoms[0][i]); tmp_new -> next -> prev = tmp_new; tmp_new = tmp_new -> next; } else { new_list = duplicate_atom (& this_proj -> atoms[0][i]); tmp_new = new_list; } new_atoms ++; } if (tmp_rem -> next != NULL) tmp_rem = tmp_rem -> next; } else { old_id[i] = i+1; if (new_list) { tmp_new -> next = duplicate_atom (& this_proj -> atoms[0][i]); tmp_new -> next -> prev = tmp_new; tmp_new = tmp_new -> next; } else { new_list = duplicate_atom (& this_proj -> atoms[0][i]); tmp_new = new_list; } new_atoms ++; } } if (asearch -> action == DISPL || asearch -> action == REMOVE || asearch -> action == RANMOVE) { check_coord_modification (this_proj, old_id, new_list, NULL, TRUE, passivate); // old_id for atoms to be passivated (removed then replaced) have been corrected to be > 0, // accordingly the total number of atoms to save must be updated if (passivate) { i = 0; tmp_new = new_list; while (tmp_new) { if (old_id[tmp_new -> id] > 0) i++; tmp_new = tmp_new -> next; } new_atoms = i; } } // Preserving coordination information for (i=0; i<2; i++) { j= this_proj -> nspec + edit -> add_spec; tmpgeo[i] = g_malloc0(j*sizeof*tmpgeo[i]); for (k=0; k coord -> ntg[i][k]); } } tmp_new = new_list; while (tmp_new) { j = tmp_new -> id; k = tmp_new -> sp; // g_debug (" id= %d, c[0]= %d, c[1]= %d", j, tmp_new -> coord[0], tmp_new -> coord[1]); if (! passivate || old_id[j] > 0) { for (l=0; l<2; l++) { m = tmp_new -> coord[l]; if (m >= edit -> coord -> ntg[l][k]) { g_warning (_("Error: at= %d, sp= %d, l= %d, geo_id= %d, edit -> coord -> ntg[%d][%d]= %d"), j+1, k, l, m, l, k, edit -> coord -> ntg[l][k]); } tmpgeo[l][k][m] ++; } } tmp_new = tmp_new -> next; } if (asearch -> action != INSERT && asearch -> action != REPLACE) { showfrag = remove_bonds_from_project (this_proj, NULL, old_id, new_list, (asearch -> action == DISPL || asearch -> action == RANMOVE) ? FALSE : TRUE, passivate); } else { i = edit -> coord -> totcoord[2]; j = this_proj -> coord -> totcoord[2]; showfrag = allocbool (i); for (k=0; k modelgl -> anim -> last -> img -> show_coord[2][k]; } for (k=j; k coord -> species*sizeof*tmpgeo[i]); for (j=0; j coord -> species; j++) { tmpgeo[i][j] = allocint (edit -> coord -> ntg[i][j]); } } showfrag = allocbool(edit -> coord -> totcoord[2]); for (j=0; j coord -> totcoord[2]; j++) { showfrag[j] = TRUE; } } if (asearch -> action == DISPL || asearch -> action == REMOVE || asearch -> action == RANMOVE) { free_dummies (to_rem); to_rem = NULL; to_add = NULL; tmp_new = new_list; i = k = 0; while (tmp_new) { if (old_id[tmp_new -> id] > 0 || asearch -> action != REMOVE) { if (tmp_new -> pick[0] || tmp_new -> pick[1]) { if (to_add != NULL) { tmp_add -> next = g_malloc0(sizeof*tmp_add); tmp_add -> next -> prev = tmp_add; tmp_add = tmp_add -> next; } else { to_add = g_malloc0(sizeof*to_add); tmp_add = to_add; } for (j=0; j<2; j++) tmp_add -> pick[j] = tmp_new -> pick[j]; tmp_add -> id = i; k ++; } i ++; } tmp_new = tmp_new -> next; } } else { tmp_add = to_add; if (new_list) { tmp_new = new_list; while (tmp_new -> next) tmp_new = tmp_new -> next; } while (tmp_add) { if (new_list) { tmp_new -> next = g_malloc0(sizeof*tmp_new -> next); tmp_new -> next -> prev = tmp_new; tmp_new = tmp_new -> next; } else { new_list = g_malloc0(sizeof*new_list); tmp_new = new_list; } tmp_new -> sp = tmp_add -> type; tmp_new -> show[0] = tmp_new -> show[1] = TRUE; tmp_new -> x = tmp_add -> xyz[0]; tmp_new -> y = tmp_add -> xyz[1]; tmp_new -> z = tmp_add -> xyz[2]; for (i=0; i<4; i++) tmp_new -> coord[i] = tmp_add -> coord[i]; i = tmp_new -> sp; for (j=0; j<2; j++) { k = tmp_add -> coord[j]; tmpgeo[j][i][k] ++; } // Neighbors tmp_new -> numv = tmp_add -> numv; if (tmp_new -> numv) tmp_new -> vois = duplicate_int (tmp_new -> numv, tmp_add -> vois); new_atoms ++; tmp_add -> pick[0] = TRUE; tmp_add = tmp_add -> next; } atomic_object * object = object_list; i = 0; while (object) { i += object -> bonds; object = object -> next; } int ** new_bond_list = allocdint (i, 2); i = j = 0; object = object_list; while (object) { add_bonds_to_list (new_bond_list, i, j, object); i += object -> atoms; j += object -> bonds; if (object -> next) { object = object -> next; g_free (object -> prev); } else { g_free (object); object = NULL; } } add_bonds_to_project (this_proj, remove, j, new_bond_list); } if (this_proj -> natomes) { opengl_project_changed (this_proj -> id); is_selected = selected_aspec = -1; gboolean vis_stat = opengl_project -> modelgl -> atom_win -> visible; opengl_project -> modelgl -> atom_win -> visible = FALSE; i = opengl_project -> modelgl -> selection_mode; opengl_project -> modelgl -> selection_mode = ATOMS; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); #endif opengl_project -> modelgl -> selection_mode = NSELECTION-1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); #endif opengl_project -> modelgl -> selection_mode = i; opengl_project -> modelgl -> atom_win -> visible = vis_stat; } if (this_proj -> nspec) { g_free (this_proj -> atoms[0]); } else { this_proj -> atoms = g_malloc0(sizeof*this_proj -> atoms); } int rem_spec; int * spid, * spdel; spid = allocint (this_proj -> nspec + edit -> add_spec); spdel = allocint (this_proj -> nspec + edit -> add_spec); int * atid = allocint (new_atoms); this_proj -> atoms[0] = g_malloc0(new_atoms*sizeof*this_proj -> atoms[0]); tmp_new = new_list; i = 0; while (tmp_new) { if (asearch -> action != REMOVE || old_id[tmp_new -> id] > 0) { this_proj -> atoms[0][i] = * duplicate_atom (tmp_new); this_proj -> atoms[0][i].id = i; spid[this_proj -> atoms[0][i].sp] ++; atid[i] = this_proj -> atoms[0][i].sp; this_proj -> atoms[0][i].pick[0] = this_proj -> atoms[0][i].pick[1] = FALSE; i ++; } if (tmp_new -> next) { tmp_new = tmp_new -> next; g_free (tmp_new -> prev); } else { g_free (tmp_new); tmp_new = NULL; } } if (old_id) g_free (old_id); old_id = NULL; rem_spec = 0; for (i=0; i nspec + edit -> add_spec; i++) { if (spid[i] == 0) { // A chem spec is being removed ... shit that's more work rem_spec ++; } else { spdel[i] = rem_spec; } } if (rem_spec || edit -> add_spec) { int new_spec = this_proj -> nspec - rem_spec + edit -> add_spec; chemical_data * newchem = alloc_chem_data (new_spec); i = 0; for (j=0; j nspec; j++) { if (spid[j] != 0) { newchem -> nsps[i] = this_proj -> chemistry -> nsps[j]; newchem -> formula[i] = this_proj -> chemistry -> formula[j]; newchem -> label[i] = g_strdup_printf ("%s", this_proj -> chemistry -> label[j]); newchem -> element[i] = g_strdup_printf ("%s", this_proj -> chemistry -> element[j]); for (k=0; k chem_prop[k][i] = this_proj -> chemistry -> chem_prop[k][j]; } if (j < this_proj -> nspec-1) { k = i; for (l=j; l nspec; l++) { if (spid[l] != 0) { newchem -> cutoffs[i][k] = newchem -> cutoffs[k][i] = this_proj -> chemistry -> cutoffs[j][l]; k ++; } } } newchem -> nsps[i] = spid[j]; i ++; } } j = (this_proj -> nspec) ? 1 : 0; for (k=0; k add_spec - j*rem_spec; k++) { l = this_proj -> nspec + k; if ( spid[l]) { newchem -> nsps[i] = spid[l]; newchem -> formula[i] = 0; newchem -> chem_prop[CHEM_Z][i] = newchem -> chem_prop[CHEM_X][i] = edit -> new_z[l]; m = (int)newchem -> chem_prop[CHEM_Z][i]; newchem -> label[i] = g_strdup_printf ("%s", periodic_table_info[m].lab); newchem -> element[i] = g_strdup_printf ("%s", periodic_table_info[m].name); n = 0; newchem -> chem_prop[CHEM_M][i] = set_mass_ (& m); newchem -> chem_prop[CHEM_R][i] = set_radius_ (& m, & n); newchem -> chem_prop[CHEM_N][i] = set_neutron_ (& m); newchem -> chem_prop[CHEM_X][i] = newchem -> chem_prop[CHEM_Z][i]; i ++; } } initcutoffs (newchem, new_spec); for (i=0; i atoms[0][i].sp = atid[i]; } if (this_proj -> chemistry) g_free (this_proj -> chemistry); this_proj -> chemistry = NULL; this_proj -> chemistry = duplicate_chemical_data (new_spec, newchem); g_free (newchem); } else { g_free (this_proj -> chemistry -> nsps); this_proj -> chemistry -> nsps = duplicate_int (this_proj -> nspec, spid); } g_free (atid); i = activep; if (! this_proj -> natomes) { this_proj -> natomes = new_atoms; if (! this_proj -> cell.crystal) center_molecule (this_proj); } else { this_proj -> natomes = new_atoms; } // Active project changes in the next call recover_opengl_data (this_proj, nmols, edit -> add_spec, rem_spec, spid, spdel, tmpgeo, showfrag); if (showfrag) { g_free (showfrag); showfrag = NULL; } #ifdef DEBUG if (this_proj -> natomes) { print_coord_info (this_proj, this_proj -> coord); } else { g_debug (" *** None *** "); } #endif g_free (spdel); g_free (edit -> new_z); g_free (spid); for (j=0; j<2; j++) { g_free (tmpgeo[j]); } init_curves_and_calc (active_project); if (active_box) { if (test_vol(active_box -> param, active_box -> vect)) { if (active_project -> analysis) { if (active_project -> analysis[GDR]) { active_project -> analysis[GDR] -> avail_ok = TRUE; active_project -> analysis[GDK] -> avail_ok = TRUE; } } } } init_atomes_analysis (active_project, TRUE); active_project -> dmtx = FALSE; active_project -> run = (active_project -> natomes) ? TRUE : FALSE; chemistry_ () ; if (asearch -> recompute_bonding) { active_project_changed (activep); bonds_update = 1; frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; active_project -> runc[0] = FALSE; on_calc_bonds_released (NULL, NULL); } // Then back to the previous active project active_project_changed (i); int shaders[5] = {ATOMS, BONDS, POLYS, RINGS, SELEC}; re_create_md_shaders (5, shaders, this_proj); this_proj -> modelgl -> create_shaders[PICKS] = TRUE; this_proj -> modelgl -> create_shaders[MDBOX] = TRUE; this_proj -> modelgl -> create_shaders[LABEL] = TRUE; this_proj -> modelgl -> create_shaders[MEASU] = TRUE; tmp_add = to_add; for (i=0; i<2; i++) save_all_selections (this_proj -> modelgl, i); while (tmp_add != NULL) { for (i=0; i<2; i++) { if (tmp_add -> pick[i]) { process_selected_atom (this_proj, this_proj -> modelgl, tmp_add -> id, 0, 0, i); } } tmp_add = tmp_add -> next; } for (i=0; i<2; i++) update_all_selections (this_proj -> modelgl, i); if (to_add != NULL) free_dummies (to_add); if (visible && (asearch -> action != DISPL && asearch -> action != RANMOVE)) { for (i=0; i<3; i++) { g_free (this_proj -> modelgl -> saved_coord[i]); this_proj -> modelgl -> saved_coord[i] = NULL; init_coordinates (this_proj, i, FALSE, TRUE); } this_proj -> modelgl -> was_moved = FALSE; this_proj -> modelgl -> atom_win -> rebuilt[0] = FALSE; this_proj -> modelgl -> atom_win -> rebuilt[1] = FALSE; if (this_proj -> modelgl -> atom_win -> msd) g_free (this_proj -> modelgl -> atom_win -> msd); this_proj -> modelgl -> atom_win -> msd = allocfloat (this_proj -> natomes); if (this_proj -> modelgl -> atom_win -> msd_all) g_free (this_proj -> modelgl -> atom_win -> msd_all); this_proj -> modelgl -> atom_win -> msd_all = allocfloat (this_proj -> nspec); for (i=0; i<2; i++) clean_motion_search (this_proj, this_proj -> modelgl -> search_widg[2+4*i], i); motion_to_zero (this_proj -> modelgl -> search_widg[2]); } else if (visible && (asearch -> action == DISPL || asearch -> action == RANMOVE)) { this_proj -> modelgl -> was_moved = TRUE; clean_motion_search (this_proj, this_proj -> modelgl -> search_widg[(asearch -> action == DISPL) ? 6 : 2], (asearch -> action == DISPL) ? 1 : 0); if (asearch -> action == RANMOVE) motion_to_zero (this_proj -> modelgl -> search_widg[2]); } else if (this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected) { g_free (this_proj -> modelgl -> saved_coord[1]); this_proj -> modelgl -> saved_coord[1] = save_coordinates (this_proj, 1); this_proj -> modelgl -> baryc[1] = get_bary (this_proj, 1); } update (this_proj -> modelgl); #ifdef GTK4 update_menu_bar (this_proj -> modelgl); #endif clean_coord_window (this_proj); switch (asearch -> action) { case REPLACE: return extra; break; case INSERT: return extra; break; case REMOVE: return remove; break; default: return 0; break; } } /*! \fn void clean_all_trees (atom_search * asearch, project * this_proj) \brief clean all tree models in the 'model edition' window \param asearch the target atom search \param this_proj the target project */ void clean_all_trees (atom_search * asearch, project * this_proj) { int i, j; for (i=0; i<5; i++) { if (i == 3) { clean_picked_and_labelled (this_proj -> modelgl -> search_widg[i+2], TRUE); if (this_proj -> modelgl -> search_widg[INSERT] -> in_selection) { allocate_todo (this_proj -> modelgl -> search_widg[i+2], this_proj -> modelgl -> search_widg[INSERT] -> in_selection); atomic_object * object = this_proj -> modelgl -> atom_win -> to_be_inserted[1]; j = 0; while (object) { object -> id = j; j ++; object = object -> next; } update_search_tree (this_proj -> modelgl -> search_widg[i+2]); } } else if (this_proj -> modelgl -> search_widg[i+2] -> atom_tree) { j = get_asearch_filter (this_proj -> modelgl -> search_widg[i+2]); if ((j == 3 && ! this_proj -> modelgl -> adv_bonding[0]) || (j == 4 && ! this_proj -> modelgl -> adv_bonding[1])) { combo_set_active (this_proj -> modelgl -> search_widg[i+2] -> filter_box, 0); set_filter_changed (GTK_COMBO_BOX(this_proj -> modelgl -> search_widg[i+2] -> filter_box), this_proj -> modelgl -> search_widg[i+2]); } else if (asearch -> action != DISPL && asearch -> action != RANMOVE) { set_filter_changed (GTK_COMBO_BOX(this_proj -> modelgl -> search_widg[i+2] -> filter_box), this_proj -> modelgl -> search_widg[i+2]); } update_search_tree (this_proj -> modelgl -> search_widg[i+2]); } if ((i == 0 || i == 4) && this_proj -> modelgl -> search_widg[i+2] -> todo_size >= GTK_LIMIT) { re_populate_tree_search (this_proj -> modelgl -> search_widg[i+2]); } } if ((this_proj -> modelgl -> atom_win -> adv_bonding[0] && ! this_proj -> modelgl -> adv_bonding[0]) || (this_proj -> modelgl -> atom_win -> adv_bonding[1] && ! this_proj -> modelgl -> adv_bonding[1])) { int j; for (i=0; i<5; i++) { if (i != 3) { if (this_proj -> modelgl -> search_widg[i+2] -> passivating) { j = (this_proj -> modelgl -> search_widg[i+2] -> object < 2) ? 3 : 2; } else { j = (! this_proj -> modelgl -> search_widg[i+2] -> object) ? 3 : 2; } if (GTK_IS_WIDGET(this_proj -> modelgl -> search_widg[i+2] -> filter_box)) { if (this_proj -> modelgl -> atom_win -> adv_bonding[1] && ! this_proj -> modelgl -> adv_bonding[1]) { gtk_combo_box_text_remove ((GtkComboBoxText *) this_proj -> modelgl -> search_widg[i+2] -> filter_box, j+1); } if (this_proj -> modelgl -> atom_win -> adv_bonding[0] && ! this_proj -> modelgl -> adv_bonding[0]) { gtk_combo_box_text_remove ((GtkComboBoxText *) this_proj -> modelgl -> search_widg[i+2] -> filter_box, j); } } } } } for (i=0 ;i<2; i++) this_proj -> modelgl -> atom_win -> adv_bonding[i] = this_proj -> modelgl -> adv_bonding[i]; } /*! \fn void apply_action (project * this_proj, atom_search * asearch) \brief apply edition action \param this_proj the target project \param asearch the target atom search */ void apply_action (project * this_proj, atom_search * asearch) { gchar * str; gchar * appl[3] = {i18n("replaced"), i18n("removed"), i18n("inserted")}; int k, l; l = 0; gboolean visible = (this_proj -> modelgl -> atom_win) ? this_proj -> modelgl -> atom_win -> visible : FALSE; if (asearch -> action == REPLACE || asearch -> action == REMOVE) { to_remove_this_list_of_objects (this_proj, asearch); l = action_atoms_from_project (this_proj, remove_search, visible); g_free (remove_search); remove_search = NULL; } k = (asearch -> action == REMOVE) ? l : action_atoms_from_project (this_proj, asearch, visible); if (asearch -> action != DISPL && asearch -> action != RANMOVE) { switch (k) { case 0: str = g_strdup_printf (_("No atoms to be %s !"), _(appl[asearch -> action-3])); break; default: if (asearch -> action == REPLACE && l) { if (asearch -> pointer[0].c == 8) l += asearch -> int_b - k; str = g_strdup_printf (_("%d atom(s) removed !\n%d atom(s) inserted !"), l, k); } else { str = g_strdup_printf (_("%d atom(s) %s !"), k, _(appl[asearch -> action-3])); } break; } if (this_proj -> modelgl -> atom_win -> win) { show_info (str, 0, this_proj -> modelgl -> atom_win -> win); } else { show_info (str, 0, this_proj -> modelgl -> win); } g_free (str); } if (visible) { if (k || l) { if (this_proj -> modelgl -> atom_win) { if (this_proj -> modelgl -> atom_win -> visible) clean_all_trees (asearch, this_proj); if (this_proj -> modelgl -> atom_win -> msd) { g_free (this_proj -> modelgl -> atom_win -> msd); this_proj -> modelgl -> atom_win -> msd = NULL; } this_proj -> modelgl -> atom_win -> msd = allocfloat (this_proj -> natomes); } } } clean_other_window_after_edit (this_proj); } /*! \fn void prepare_random_action (project * this_proj, atom_search * asearch) \brief prepare random action \param this_proj the target project \param asearch the target atom search */ void prepare_random_action (project * this_proj, atom_search * asearch) { int i, j, k, l, m, n, o, p, q; double test, prob; atomic_object * object = NULL; atomic_object * tmp_oba, * tmp_obb; molecule * molfc; int max_num, total_num; gboolean lets_do_this = (asearch -> action == REMOVE || (asearch -> action == REPLACE && this_proj -> modelgl -> atom_win -> to_be_inserted[0])) ? TRUE : FALSE; if (lets_do_this) { int filter = get_asearch_filter (asearch); int obj = get_asearch_object (asearch); int num_elem = asearch -> todo_size; int * random_todo = duplicate_int (num_elem, asearch -> todo); total_num = (asearch -> mode && filter > 2 && obj) ? this_proj -> coord -> totcoord[2] : this_proj -> natomes; g_free (asearch -> todo); allocate_todo (asearch, total_num); if (asearch -> action == REPLACE && this_proj -> modelgl -> atom_win -> to_be_inserted[0]) { tmp_oba = this_proj -> modelgl -> atom_win -> to_be_inserted[0]; object = duplicate_atomic_object (tmp_oba); tmp_obb = object; while (tmp_oba -> next) { tmp_oba = tmp_oba -> next; tmp_obb -> next = duplicate_atomic_object (tmp_oba); tmp_obb = tmp_obb -> next; } g_free (this_proj -> modelgl -> atom_win -> to_be_inserted[0]); this_proj -> modelgl -> atom_win -> to_be_inserted[0] = NULL; } gboolean doit; asearch -> in_selection = 0; tmp_oba = object; for (i=0; i chemistry -> nsps[i]; break; case 1: for (j=0; j natomes; j++) { if (this_proj -> atoms[0][j].numv == i) max_num ++; } break; case 2: j = 0; for (k=0; k nspec; k++) { j += this_proj -> coord -> ntg[1][k]; if (j > i) break; } l = 0; for (m=0; m coord -> ntg[1][m]; p = i - l; for (l=0; l natomes; l++) { if (this_proj -> atoms[0][l].sp == k && this_proj -> atoms[0][l].coord[1] == p) max_num ++; } break; case 3: if (obj) { max_num = this_proj -> coord -> totcoord[2]; } else { for (l=0; l natomes; l++) { if (this_proj -> atoms[0][l].coord[2] == i) max_num ++; } } break; case 4: molfc = & this_proj -> modelfc -> mols[0][i]; if (obj) { max_num = molfc -> multiplicity; } else { max_num = molfc -> natoms*molfc -> multiplicity; } break; } test = 1.0 / max_num; j = 0; // Using CPU time to randomize clock_t begin = clock(); k = (int)begin; while (j < random_todo[i]) { l = 0; for (m=0; m todo[m]) { doit = FALSE; if (filter < 3 || ! obj) { n = this_proj -> atoms[0][m].sp; if (this_proj -> atoms[0][m].pick[0] == asearch -> status || asearch -> status == 2) { switch (filter) { case 0: if (n == i) doit = TRUE; break; case 1: if (this_proj -> atoms[0][m].numv == i) doit = TRUE; break; case 2: o = this_proj -> atoms[0][m].coord[1]; for (q=0;q coord -> ntg[1][q]; if (o == i) doit = TRUE; break; default: if (this_proj -> atoms[0][m].coord[filter-1] == i) doit = TRUE; break; } } } else if (filter == 3) { doit = TRUE; } else { for (n=0; n multiplicity; n++) { if (molfc -> fragments[n] == m) { doit = TRUE; break; } } } if (doit) { l ++; o = (o+1)*max_num*m; prob = random3_(& n); if (prob >= (l-1)*test && prob < l*test) { j ++; asearch -> todo[m] = 1; if (asearch -> action == REPLACE) { if (this_proj -> modelgl -> atom_win -> to_be_inserted[0] == NULL) { this_proj -> modelgl -> atom_win -> to_be_inserted[0] = duplicate_atomic_object (tmp_oba); tmp_obb = this_proj -> modelgl -> atom_win -> to_be_inserted[0]; } else { tmp_obb -> next = duplicate_atomic_object (tmp_oba); tmp_obb -> next -> prev = tmp_obb; tmp_obb = tmp_obb -> next; } tmp_obb -> id = m; } asearch -> in_selection ++; if (j == random_todo[i]) break; } } } } } if (asearch -> action == REPLACE) { if (tmp_oba -> next != NULL) tmp_oba = tmp_oba -> next; } } } if (asearch -> action == REPLACE) g_free (object); if (random_todo) g_free (random_todo); int old_filter = asearch -> filter; // if (asearch -> mode && obj && asearch -> filter == 3) asearch -> filter = 2; apply_action (this_proj, asearch); asearch -> filter = old_filter; } } /*! \fn gboolean do_we_have_objects_in_selection (project * this_proj, atom_search * asearch, gboolean editing) \brief check for object(s) in selection to apply action \param this_proj the target project \param asearch the target atom search \param editing actually going for action (1) or simply counting elements (0) */ gboolean do_we_have_objects_in_selection (project * this_proj, atom_search * asearch, gboolean editing) { int i, j, k, l, m, n, o, p, q; gboolean taking_action = FALSE; if (asearch -> action == INSERT) { taking_action = TRUE; } else { i = j = 0; if (asearch -> mode) { for (l=0; l todo_size; l++) { if (asearch -> todo[l]) i++; if (asearch -> action == REPLACE) { if (get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[0], -(l+3), 0)) { if (asearch -> todo[l]) j ++; } } else { if (asearch -> pick[l] && asearch -> todo[l]) j ++; } } if (asearch -> action == REMOVE && i == j) { taking_action = TRUE; } else if (asearch -> action == REPLACE && i == j && i == asearch -> in_selection) { taking_action = TRUE; } } else { m = (asearch -> pointer[0].c == 3) ? 0 : (asearch -> pointer[0].c == 5) ? 1 : 3; int filter = get_asearch_filter (asearch); int object = get_asearch_object (asearch); int pass_size; int * pass_todo = NULL; atomic_object * passivating_object = NULL; atomic_object * pao = NULL; atomic_object * pio = NULL; float * tmp_msd = NULL; if (asearch -> passivating) { if (object > 1 && filter > 2) { pass_size = this_proj -> coord -> totcoord[filter - 1]; } else { pass_size = this_proj -> natomes; } pass_todo = allocint (pass_size); if (asearch -> action == RANMOVE) tmp_msd = allocfloat (this_proj -> natomes); } switch (asearch -> action) { case DISPL: for (l=0; l todo_size; l++) { if (asearch -> todo[l]) i ++; if (editing) { if (asearch -> todo[l]) { if (asearch -> passivating) { if (object < 2) { switch (filter) { case 0: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].sp == l) { pass_todo[n] = asearch -> todo[l]; k ++; } } break; case 1: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].numv == l) { pass_todo[n] = asearch -> todo[l]; k ++; } } break; case 2: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; p = this_proj -> atoms[0][n].sp; for (q=0; q coord -> ntg[1][q]; if (o == l) { pass_todo[n] = asearch -> todo[l]; k ++; } } break; default: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; if (o == l) { pass_todo[n] = asearch -> todo[l]; k ++; } } break; } } else { switch (filter) { case 1: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].numv == l) { pass_todo[n] = asearch -> todo[l]; k ++; if (! passivating_object) { passivating_object = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao = passivating_object; } else { pao -> next = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao -> next -> prev = pao; pao = pao -> next; } } } break; case 2: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; p = this_proj -> atoms[0][n].sp; for (q=0; q coord -> ntg[1][q]; if (o == l) { pass_todo[n] = asearch -> todo[l]; k ++; if (! passivating_object) { passivating_object = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao = passivating_object; } else { pao -> next = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao -> next -> prev = pao; pao = pao -> next; } } } break; default: for (n=0; n coord -> totcoord[filter -1]; n++) { if (n == l) { pass_todo[n] = asearch -> todo[l]; k ++; if (! passivating_object) { passivating_object = create_object_from_frag_mol (this_proj, filter-1, n, NULL); pao = passivating_object; } else { pao -> next = create_object_from_frag_mol (this_proj, filter-1, n, NULL); pao -> next -> prev = pao; pao = pao -> next; } } } break; } } } } } } break; case REPLACE: for (l=0; l todo_size; l++) { if (asearch -> todo[l]) i ++; pio = get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[m], l, 0); if (pio) { if (asearch -> todo[l]) { j ++; if (asearch -> passivating) { switch (filter) { case 0: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].sp == l) { pass_todo[n] = asearch -> todo[l]; if (! passivating_object) { passivating_object = duplicate_atomic_object (pio); pao = passivating_object; pao -> id = n; } else { pao -> next = duplicate_atomic_object (pio); pao -> id = n; pao -> next -> prev = pao; pao = pao -> next; } k ++; } } break; case 1: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].numv == l) { pass_todo[n] = asearch -> todo[l]; if (! passivating_object) { passivating_object = duplicate_atomic_object (pio); pao = passivating_object; pao -> id = n; } else { pao -> next = duplicate_atomic_object (pio); pao -> id = n; pao -> next -> prev = pao; pao = pao -> next; } k ++; } } break; case 2: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; p = this_proj -> atoms[0][n].sp; for (q=0; q coord -> ntg[1][q]; if (o == l) { pass_todo[n] = asearch -> todo[l]; if (! passivating_object) { passivating_object = duplicate_atomic_object (pio); pao = passivating_object; pao -> id = n; } else { pao -> next = duplicate_atomic_object (pio); pao -> id = n; pao -> next -> prev = pao; pao = pao -> next; } k ++; } } default: if (object < 2) { for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; if (o == l) { pass_todo[n] = asearch -> todo[l]; if (! passivating_object) { passivating_object = duplicate_atomic_object (pio); pao = passivating_object; pao -> id = n; } else { pao -> next = duplicate_atomic_object (pio); pao -> id = n; pao -> next -> prev = pao; pao = pao -> next; } k ++; } } } else { pass_todo[l] = asearch -> todo[l]; if (! passivating_object) { passivating_object = duplicate_atomic_object (pio); pao = passivating_object; pao -> id = l; } else { pao -> next = duplicate_atomic_object (pio); pao -> id = l; pao -> next -> prev = pao; pao = pao -> next; } k ++; } break; } } } } } break; case REMOVE: for (l=0; l todo_size; l++) { if (asearch -> todo[l]) { i ++; if (asearch -> passivating) { switch (filter) { case 0: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].sp == l) { pass_todo[n] = 1; k ++; } } break; case 1: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].numv == l) { pass_todo[n] = 1; k ++; } } break; case 2: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; p = this_proj -> atoms[0][n].sp; for (q=0; q coord -> ntg[1][q]; if (o == l) { pass_todo[n] = 1; k ++; } } default: if (object < 2) { for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; if (o == l) { pass_todo[n] = 1; k ++; } } } else { pass_todo[l] = 1; k ++; } break; } } } } break; case RANMOVE: for (l=0; l todo_size; l++) { if (asearch -> passivating) { if (asearch -> todo[l] && this_proj -> modelgl -> atom_win -> msd_all[l] > 0.0) { i ++; if (object < 2) { switch (filter) { case 0: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].sp == l) { pass_todo[n] = asearch -> todo[l]; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; k ++; } } break; case 1: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].numv == l) { pass_todo[n] = asearch -> todo[l]; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; k ++; } } break; case 2: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; p = this_proj -> atoms[0][n].sp; for (q=0; q coord -> ntg[1][q]; if (o == l) { pass_todo[n] = asearch -> todo[l]; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; k ++; } } break; default: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; if (o == l) { pass_todo[n] = asearch -> todo[l]; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; k ++; } } break; } } else { switch (filter) { case 1: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].numv == l) { pass_todo[n] = asearch -> todo[l]; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; if (! passivating_object) { passivating_object = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao = passivating_object; } else { pao -> next = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao -> next -> prev = pao; pao = pao -> next; } k ++; } } break; case 2: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; p = this_proj -> atoms[0][n].sp; for (q=0; q coord -> ntg[1][q]; if (o == l) { pass_todo[n] = asearch -> todo[l]; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; if (! passivating_object) { passivating_object = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao = passivating_object; } else { pao -> next = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao -> next -> prev = pao; pao = pao -> next; } k ++; } } break; default: for (n=0; n coord -> totcoord[filter -1]; n++) { if (n == l) { pass_todo[n] = asearch -> todo[l]; k ++; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; if (! passivating_object) { passivating_object = create_object_from_frag_mol (this_proj, filter-1, n, NULL); pao = passivating_object; } else { pao -> next = create_object_from_frag_mol (this_proj, filter-1, n, NULL); pao -> next -> prev = pao; pao = pao -> next; } } } break; } } } } else if (object && filter > 2) { if (asearch -> todo[l] && this_proj -> modelgl -> atom_win -> msd_all[l] > 0.0) i ++; } else { if (asearch -> todo[l] && this_proj -> modelgl -> atom_win -> msd[l] > 0.0) i ++; } } break; } if (asearch -> action == REMOVE && i) { taking_action = TRUE; } else if (asearch -> action == REPLACE) { if (asearch -> in_selection == i && i == j) taking_action = TRUE; } else { asearch -> in_selection = i; if (i) taking_action = TRUE; } if (asearch -> passivating && taking_action && editing) { g_free (asearch -> todo); asearch -> todo = duplicate_int (pass_size, pass_todo); g_free (pass_todo); asearch -> todo_size = pass_size; asearch -> in_selection = k; switch (asearch -> action) { case DISPL: this_proj -> modelgl -> atom_win -> to_be_moved[0] = passivating_object; break; case REPLACE: this_proj -> modelgl -> atom_win -> to_be_inserted[m] = passivating_object; break; case RANMOVE: if (this_proj -> modelgl -> atom_win -> msd) g_free (this_proj -> modelgl -> atom_win -> msd); this_proj -> modelgl -> atom_win -> msd = duplicate_float (this_proj -> natomes, tmp_msd); g_free (tmp_msd); this_proj -> modelgl -> atom_win -> to_be_moved[1] = passivating_object; break; } } } } return taking_action; } /*! \fn atom_search * duplicate_atom_search (atom_search * asearch) \brief duplicate atom search data structure \param asearch */ atom_search * duplicate_atom_search (atom_search * asearch) { atom_search * bsearch = g_malloc0(sizeof*bsearch); bsearch -> search_digit = asearch -> search_digit; bsearch -> proj = asearch -> proj; bsearch -> action = asearch -> action; bsearch -> status = asearch -> status; bsearch -> mode = asearch -> mode; bsearch -> object = asearch -> object; bsearch -> filter = asearch -> filter; bsearch -> search_digit = asearch -> search_digit; bsearch -> spec_to_add = asearch -> spec_to_add; bsearch -> num_to_add = asearch -> num_to_add; bsearch -> in_selection = asearch -> in_selection; bsearch -> passivating = asearch -> passivating; bsearch -> was_selected = asearch -> was_selected; bsearch -> recompute_bonding = asearch -> recompute_bonding; bsearch -> set_for_all = asearch -> set_for_all; bsearch -> int_b = asearch -> int_b; int i = get_asearch_num_objects (asearch); bsearch -> lab = duplicate_int (i, asearch -> lab); bsearch -> pick = duplicate_int (i, asearch -> lab); bsearch -> todo_size = asearch -> todo_size; bsearch -> todo = duplicate_int (bsearch -> todo_size, asearch -> todo); for (i=0; i<6; i++) { bsearch -> pointer[i].a = asearch -> pointer[i].a; bsearch -> pointer[i].b = asearch -> pointer[i].b; bsearch -> pointer[i].c = asearch -> pointer[i].c; } return bsearch; } /*! \fn G_MODULE_EXPORT void take_action (GtkButton * but, gpointer data) \brief take edition action \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void take_action (GtkButton * but, gpointer data) { tint * id = (tint *)data; project * this_proj = get_project_by_id (id -> a); int i; i = id -> c; atom_search * this_search = duplicate_atom_search (this_proj -> modelgl -> search_widg[i]); if (do_we_have_objects_in_selection(this_proj, this_search, TRUE)) { if (i != RANMOVE) { if (this_search -> mode) { prepare_random_action (this_proj, this_search); } else { apply_action (this_proj, this_search); } } else { random_move (this_proj, this_search); clean_all_trees (this_search, this_proj); } if (this_proj -> modelgl -> atom_win -> visible) { for (i=0; i<5; i++) widget_set_sensitive (gtk_notebook_get_nth_page(GTK_NOTEBOOK (this_proj -> modelgl -> atom_win -> notebook), i), this_proj -> natomes); widget_set_sensitive (gtk_notebook_get_nth_page(GTK_NOTEBOOK (this_proj -> modelgl -> atom_win -> notebook), 3), 1); } } else { if (i < RANMOVE) { show_info (_("Nothing to be done, check selection !"), 0, this_proj -> modelgl -> atom_win -> win); } else { show_info (_("Nothing to be done, check selection and/or MSD !"), 0, this_proj -> modelgl -> atom_win -> win); } } } atomes_1.3.1/src/opengl/math_3d.h0000664000175000017500000010066715212624223016262 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file math_3d.h * @short Functions for OpenGL math * @author Sébastien Le Roux * @author Stephan Soller * @author Tobias Malmsheimer */ /* * This header file: 'math_3d.h' * * Contains: - Functions for OpenGL math */ /* The following was adapted from the file Math 3D v1.0 By Stephan Soller and Tobias Malmsheimer The original file was modified and completed to match 'atomes' needs. */ /* Math 3D is a compact C99 library meant to be used with OpenGL. It provides basic 3D vector and 4x4 matrix operations as well as functions to create transformation and projection matrices. The OpenGL binary layout is used so you can just upload vectors and matrices into shaders and work with them without any conversions. It's an stb style single header file library. Define MATH_3D_IMPLEMENTATION before you include this file in *one* C file to create the implementation. QUICK NOTES - If not explicitly stated by a parameter name all angles are in radians. - The matrices use column-major indices. This is the same as in OpenGL and GLSL. The matrix documentation below for details. - Matrices are passed by value. This is probably a bit inefficient but simplifies code quite a bit. Most operations will be inlined by the compiler anyway so the difference shouldn't matter that much. A matrix fits into 4 of the 16 SSE2 registers anyway. If profiling shows significant slowdowns the matrix type might change but ease of use is more important than every last percent of performance. - When combining matrices with multiplication the effects apply right to left. This is the convention used in mathematics and OpenGL. Source: https://en.wikipedia.org/wiki/Transformation_matrix#Composing_and_inverting_transformations Direct3D does it differently. - The `m4_mul_pos()` and `m4_mul_dir()` functions do a correct perspective divide (division by w) when necessary. This is a bit slower but ensures that the functions will properly work with projection matrices. If profiling shows this is a bottleneck special functions without perspective division can be added. But the normal multiplications should avoid any surprises. - The library consistently uses a right-handed coordinate system. The old `glOrtho()` broke that rule and `m4_ortho()` has be slightly modified so you can always think of right-handed cubes that are projected into OpenGLs normalized device coordinates. - Special care has been taken to document all complex operations and important sources. Most code is covered by test cases that have been manually calculated and checked on the whiteboard. Since indices and math code is prone to be confusing we used pair programming to avoid mistakes. FURTHER IDEAS These are ideas for future work on the library. They're implemented as soon as there is a proper use case and we can find good names for them. - bool v3_is_null(vec3_t v, float epsilon) To check if the length of a vector is smaller than `epsilon`. - vec3_t v3_length_default(vec3_t v, float default_length, float epsilon) Returns `default_length` if the length of `v` is smaller than `epsilon`. Otherwise same as `v3_length()`. - vec3_t v3_norm_default(vec3_t v, vec3_t default_vector, float epsilon) Returns `default_vector` if the length of `v` is smaller than `epsilon`. Otherwise the same as `v3_norm()`. - mat4_t m4_invert(mat4_t matrix) Matrix inversion that works with arbitrary matrices. `m4_invert_affine()` can already invert translation, rotation, scaling, mirroring, reflection and shearing matrices. So a general inversion might only be useful to invert projection matrices for picking. But with orthographic and perspective projection it's probably simpler to calculate the ray into the scene directly based on the screen coordinates. VERSION HISTORY v1.0 2016-02-15 Initial release **/ #ifndef MATH_3D_H_ #define MATH_3D_H_ #include #include // Define PI directly because we would need to define the _BSD_SOURCE or // _XOPEN_SOURCE feature test macros to get it from math.h. That would be a // rather harsh dependency. So we define it directly if necessary. #ifndef M_PI #define M_PI 3.14159265358979323846 #endif // // 3D vectors // // Use the `vec3()` function to create vectors. All other vector functions start // with the `v3_` prefix. // // The binary layout is the same as in GLSL and everything else (just 3 floats). // So you can just upload the vectors into shaders as they are. // typedef struct { float x, y, z; } vec3_t; static inline vec3_t vec3(float x, float y, float z) { return (vec3_t){ x, y, z }; } static inline vec3_t v3_add (vec3_t a, vec3_t b) { return (vec3_t){ a.x + b.x, a.y + b.y, a.z + b.z }; } static inline vec3_t v3_adds (vec3_t a, float s) { return (vec3_t){ a.x + s, a.y + s, a.z + s }; } static inline vec3_t v3_sub (vec3_t a, vec3_t b) { return (vec3_t){ a.x - b.x, a.y - b.y, a.z - b.z }; } static inline vec3_t v3_subs (vec3_t a, float s) { return (vec3_t){ a.x - s, a.y - s, a.z - s }; } static inline vec3_t v3_mul (vec3_t a, vec3_t b) { return (vec3_t){ a.x * b.x, a.y * b.y, a.z * b.z }; } static inline vec3_t v3_muls (vec3_t a, float s) { return (vec3_t){ a.x * s, a.y * s, a.z * s }; } static inline vec3_t v3_div (vec3_t a, vec3_t b) { return (vec3_t){ a.x / b.x, a.y / b.y, a.z / b.z }; } static inline vec3_t v3_divs (vec3_t a, float s) { return (vec3_t){ a.x / s, a.y / s, a.z / s }; } static inline float v3_length(vec3_t v) { return sqrtf(v.x*v.x + v.y*v.y + v.z*v.z); } static inline vec3_t v3_norm (vec3_t v); static inline float v3_dot (vec3_t a, vec3_t b) { return a.x*b.x + a.y*b.y + a.z*b.z; } static inline vec3_t v3_proj (vec3_t v, vec3_t onto); static inline vec3_t v3_cross (vec3_t a, vec3_t b); static inline float v3_angle_between(vec3_t a, vec3_t b); /* Sébastien Le Roux - quaternions - 6/02/2017 */ typedef struct { float w, x, y, z; } vec4_t; static inline vec4_t vec4(float w, float x, float y, float z) { return (vec4_t){ w, x, y, z }; } static inline vec4_t v4_add (vec4_t a, vec4_t b) { return (vec4_t){ a.w + b.w, a.x + b.x, a.y + b.y, a.z + b.z }; } static inline vec4_t v4_adds (vec4_t a, float s) { return (vec4_t){ a.w + s, a.x + s, a.y + s, a.z + s }; } static inline vec4_t v4_sub (vec4_t a, vec4_t b) { return (vec4_t){ a.w - b.w, a.x - b.x, a.y - b.y, a.z - b.z }; } static inline vec4_t v4_subs (vec4_t a, float s) { return (vec4_t){ a.w - s, a.x - s, a.y - s, a.z - s }; } static inline vec4_t v4_mul (vec4_t a, vec4_t b) { return (vec4_t){ a.w * b.w, a.x * b.x, a.y * b.y, a.z * b.z }; } static inline vec4_t v4_muls (vec4_t a, float s) { return (vec4_t){ a.w * s, a.x * s, a.y * s, a.z * s }; } static inline vec4_t v4_div (vec4_t a, vec4_t b) { return (vec4_t){ a.w / b.w, a.x / b.x, a.y / b.y, a.z / b.z }; } static inline vec4_t v4_divs (vec4_t a, float s) { return (vec4_t){ a.w / s, a.x / s, a.y / s, a.z / s }; } static inline float v4_length(vec4_t v) { return sqrtf(v.w*v.w + v.x*v.x + v.y*v.y + v.z*v.z); } static inline vec4_t v4_norm (vec4_t v); static inline vec4_t v4_mul (vec4_t a, vec4_t b); // // 4x4 matrices // // Use the `mat4()` function to create a matrix. You can write the matrix // members in the same way as you would write them on paper or on a whiteboard: // // mat4_t m = mat4( // 1, 0, 0, 7, // 0, 1, 0, 5, // 0, 0, 1, 3, // 0, 0, 0, 1 // ) // // This creates a matrix that translates points by vec3(7, 5, 3). All other // matrix functions start with the `m4_` prefix. Among them functions to create // identity, translation, rotation, scaling and projection matrices. // // The matrix is stored in column-major order, just as OpenGL expects. Members // can be accessed by indices or member names. When you write a matrix on paper // or on the whiteboard the indices and named members correspond to these // positions: // // | m[0][0] m[1][0] m[2][0] m[3][0] | // | m[0][1] m[1][1] m[2][1] m[3][1] | // | m[0][2] m[1][2] m[2][2] m[3][2] | // | m[0][3] m[1][3] m[2][3] m[3][3] | // // | m00 m10 m20 m30 | // | m01 m11 m21 m31 | // | m02 m12 m22 m32 | // | m03 m13 m23 m33 | // // The first index or number in a name denotes the column, the second the row. // So m[i][j] denotes the member in the ith column and the jth row. This is the // same as in GLSL (source: GLSL v1.3 specification, 5.6 Matrix Components). // typedef union { // The first index is the column index, the second the row index. The memory // layout of nested arrays in C matches the memory layout expected by OpenGL. float m[4][4]; // OpenGL expects the first 4 floats to be the first column of the matrix. // So we need to define the named members column by column for the names to // match the memory locations of the array elements. struct { float m00, m01, m02, m03; float m10, m11, m12, m13; float m20, m21, m22, m23; float m30, m31, m32, m33; }; } mat4_t; static inline mat4_t mat4( float m00, float m10, float m20, float m30, float m01, float m11, float m21, float m31, float m02, float m12, float m22, float m32, float m03, float m13, float m23, float m33 ); static inline mat4_t m4_identity (); static inline mat4_t m4_translation (vec3_t offset); static inline mat4_t m4_scaling (vec3_t scale); static inline mat4_t m4_rotation_x (float angle_in_rad); static inline mat4_t m4_rotation_y (float angle_in_rad); static inline mat4_t m4_rotation_z (float angle_in_rad); static inline mat4_t m4_rotation (float angle_in_rad, vec3_t axis); // // Sébastien Le Roux - Quaternions - 6/02/2017 // static inline vec4_t axis_to_quat (vec3_t axis, float angle_in_rad); static inline mat4_t m4_quat_rotation (vec4_t q); static inline mat4_t m4_ortho (float left, float right, float bottom, float top, float back, float front); static inline mat4_t m4_perspective (float vertical_field_of_view_in_deg, float aspect_ratio, float near_view_distance, float far_view_distance); static inline mat4_t m4_frustum (float left, float right, float bottom, float top, float front, float back); static inline mat4_t m4_look_at (vec3_t from, vec3_t to, vec3_t up); static inline mat4_t m4_transpose (mat4_t matrix); static inline mat4_t m4_mul (mat4_t a, mat4_t b); static inline mat4_t m43_mul (mat4_t a, mat4_t b); static inline mat4_t m4_invert_affine(mat4_t matrix); static inline mat4_t m4_translate (mat4_t matrix, vec3_t translation); static inline vec3_t m4_mul_pos (mat4_t matrix, vec3_t position); static inline vec3_t m4_mul_coord (mat4_t matrix, vec3_t position); static inline vec3_t m4_mul_abc (mat4_t matrix, vec3_t position); static inline vec3_t m4_mul_dir (mat4_t matrix, vec3_t direction); static inline void m4_print (mat4_t matrix); static inline void m4_printp (mat4_t matrix, int width, int precision); static inline void m4_fprint (FILE* stream, mat4_t matrix); static inline void m4_fprintp (FILE* stream, mat4_t matrix, int width, int precision); // // 3D vector functions header implementation // static inline vec3_t v3_norm(vec3_t v) { float len = v3_length(v); if (len > 0.0) return (vec3_t){ v.x / len, v.y / len, v.z / len }; else return (vec3_t){ 0, 0, 0}; } static inline vec3_t v3_proj(vec3_t v, vec3_t onto) { return v3_muls(onto, v3_dot(v, onto) / v3_dot(onto, onto)); } static inline vec3_t v3_cross(vec3_t a, vec3_t b) { return (vec3_t){ a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x }; } static inline float v3_angle_between(vec3_t a, vec3_t b) { return acosf( v3_dot(a, b) / (v3_length(a) * v3_length(b)) ); } // // Sébastien Le Roux - Quaternions - 6/02/2017 // static inline vec4_t v4_norm(vec4_t v) { float len = v4_length(v); if (len > 0.0) return (vec4_t){ v.w / len, v.x / len, v.y / len , v.z / len}; else return (vec4_t){ 0, 0, 0, 0}; } static inline vec4_t q4_mul(vec4_t a, vec4_t b) { return (vec4_t){ a.z * b.w + a.w * b.z + a.x * b.y - a.y * b.x, a.z * b.x + a.x * b.z + a.y * b.w - a.w * b.y, a.z * b.y + a.y * b.z + a.w * b.x - a.x * b.w, a.z * b.z - (a.w * b.w + a.x * b.x + a.y * b.y)}; } // // Matrix functions header implementation // static inline mat4_t mat4( float m00, float m10, float m20, float m30, float m01, float m11, float m21, float m31, float m02, float m12, float m22, float m32, float m03, float m13, float m23, float m33 ) { return (mat4_t){ .m[0][0] = m00, .m[1][0] = m10, .m[2][0] = m20, .m[3][0] = m30, .m[0][1] = m01, .m[1][1] = m11, .m[2][1] = m21, .m[3][1] = m31, .m[0][2] = m02, .m[1][2] = m12, .m[2][2] = m22, .m[3][2] = m32, .m[0][3] = m03, .m[1][3] = m13, .m[2][3] = m23, .m[3][3] = m33 }; } static inline mat4_t m4_identity() { return mat4( 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ); } static inline mat4_t m4_translation(vec3_t offset) { return mat4( 1, 0, 0, offset.x, 0, 1, 0, offset.y, 0, 0, 1, offset.z, 0, 0, 0, 1 ); } static inline mat4_t m4_scaling(vec3_t scale) { float x = scale.x, y = scale.y, z = scale.z; return mat4( x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1 ); } static inline mat4_t m4_rotation_x(float angle_in_rad) { float s = sinf(angle_in_rad), c = cosf(angle_in_rad); return mat4( 1, 0, 0, 0, 0, c, -s, 0, 0, s, c, 0, 0, 0, 0, 1 ); } static inline mat4_t m4_rotation_y(float angle_in_rad) { float s = sinf(angle_in_rad), c = cosf(angle_in_rad); return mat4( c, 0, s, 0, 0, 1, 0, 0, -s, 0, c, 0, 0, 0, 0, 1 ); } static inline mat4_t m4_rotation_z(float angle_in_rad) { float s = sinf(angle_in_rad), c = cosf(angle_in_rad); return mat4( c, -s, 0, 0, s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ); } static inline mat4_t m4_transpose(mat4_t matrix) { return mat4( matrix.m00, matrix.m01, matrix.m02, matrix.m03, matrix.m10, matrix.m11, matrix.m12, matrix.m13, matrix.m20, matrix.m21, matrix.m22, matrix.m23, matrix.m30, matrix.m31, matrix.m32, matrix.m33 ); } /** * Multiplication of two 4x4 matrices. * * Implemented by following the row times column rule and illustrating it on a * whiteboard with the proper indices in mind. * * Further reading: https://en.wikipedia.org/wiki/Matrix_multiplication * But note that the article use the first index for rows and the second for * columns. */ static inline mat4_t m4_mul(mat4_t a, mat4_t b) { mat4_t result; int i, j, k; for(i = 0; i < 4; i++) { for(j = 0; j < 4; j++) { float sum = 0; for(k = 0; k < 4; k++) { sum += a.m[k][j] * b.m[i][k]; } result.m[i][j] = sum; } } return result; } static inline mat4_t m43_mul(mat4_t a, mat4_t b) { mat4_t result; int i, j, k; for(i = 0; i < 4; i++) { for(j = 0; j < 3; j++) { float sum = 0; for(k = 0; k < 4; k++) { sum += a.m[k][j] * b.m[i][k]; } result.m[i][j] = sum; //if (i < 3 && result.m[i][j] != 0.0) result.m[i][j] /= fabs(sum); } } result.m03 = result.m13 = result.m23 = result.m33 = 0.0; return result; } #endif // MATH_3D_HEADER #ifndef MATH_3D_IMPLEMENTATION #define MATH_3D_IMPLEMENTATION /** * Creates a matrix to rotate around an axis by a given angle. The axis doesn't * need to be normalized. * * Sources: * * https://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_and_angle */ static inline mat4_t m4_rotation (float angle_in_rad, vec3_t axis) { vec3_t normalized_axis = v3_norm(axis); float x = normalized_axis.x, y = normalized_axis.y, z = normalized_axis.z; float c = cosf(angle_in_rad), s = sinf(angle_in_rad); return mat4( c + x*x*(1-c), x*y*(1-c) - z*s, x*z*(1-c) + y*s, 0, y*x*(1-c) + z*s, c + y*y*(1-c), y*z*(1-c) - x*s, 0, z*x*(1-c) - y*s, z*y*(1-c) + x*s, c + z*z*(1-c), 0, 0, 0, 0, 1 ); } /* Sébastien Le Roux 08/07/2022 Rotation 3D, on x, y and z, providing angles in degrees [ 0 - 90 ] */ static inline mat4_t m4_rotation_anti_xyz (float alpha, float beta, float gamma) { mat4_t rot = m4_identity (); vec4_t qr; double pi = 3.141592653589793238462643383279502884197; vec3_t ax[3]; ax[0] = vec3(1.0,0.0,0.0); ax[1] = vec3(0.0,1.0,0.0); ax[2] = vec3(0.0,0.0,1.0); qr = axis_to_quat (ax[2], - gamma*pi/90.0); rot = m4_mul (rot, m4_quat_rotation (qr)); qr = axis_to_quat (ax[1], - beta*pi/90.0); rot = m4_mul (rot, m4_quat_rotation (qr)); qr = axis_to_quat (ax[0], - alpha*pi/90.0); rot = m4_mul (rot, m4_quat_rotation (qr)); return rot; } static inline mat4_t m4_rotation_xyz (float alpha, float beta, float gamma) { mat4_t rot = m4_identity (); vec4_t qr; double pi = 3.141592653589793238462643383279502884197; vec3_t ax[3]; ax[0] = vec3(1.0,0.0,0.0); ax[1] = vec3(0.0,1.0,0.0); ax[2] = vec3(0.0,0.0,1.0); qr = axis_to_quat (ax[0], alpha*pi/90.0); rot = m4_mul (rot, m4_quat_rotation (qr)); qr = axis_to_quat (ax[1], beta*pi/90.0); rot = m4_mul (rot, m4_quat_rotation (qr)); qr = axis_to_quat (ax[2], gamma*pi/90.0); rot = m4_mul (rot, m4_quat_rotation (qr)); return rot; } /* Sébastien Le Roux 06/02/2017 Quaternion rotation */ static inline vec4_t axis_to_quat (vec3_t axis, float angle_in_rad) { vec4_t qr; float half_angle = angle_in_rad/2.0; float n = sinf(half_angle)/v3_length(axis); qr.w = axis.x * n; qr.x = axis.y * n; qr.y = axis.z * n; qr.z = cosf(half_angle); return v4_norm (qr); } static inline vec4_t m4_mul_v4 (mat4_t mat, vec4_t vec) { int i; float out[4]; float in[4] = {vec.w, vec.x, vec.y, vec.z}; for (i=0; i<4; i++) { out[i] = in[0] * mat.m[0][i] + in[1] * mat.m[1][i] + in[2] * mat.m[2][i] + in[3] * mat.m[3][i]; } return vec4(out[0], out[1], out[2], out[3]); } static inline mat4_t m4_quat_rotation (vec4_t q) { // I consider that the quaternion is already normalized // vec4_t n_quat = v4_norm(q); return mat4( 1.0 - 2.0 * (q.x * q.x + q.y * q.y), 2.0 * (q.w * q.x + q.y * q.z), 2.0 * (q.y * q.w - q.x * q.z), 0, 2.0 * (q.w * q.x - q.y * q.z), 1.0 - 2.0 * (q.y * q.y + q.w * q.w), 2.0 * (q.x * q.y + q.w * q.z), 0, 2.0 * (q.y * q.w + q.x * q.z), 2.0 * (q.x * q.y - q.w * q.z), 1.0 - 2.0 * (q.x * q.x + q.w * q.w), 0, 0, 0, 0, 1 ); } static inline vec3_t v3_project (vec3_t worldpos, vec4_t viewport, mat4_t projection) { mat4_t mod = m4_mul(projection, m4_translation(worldpos)); vec4_t out = m4_mul_v4 (mod, vec4(0.0, 0.0, 0.0, 1.0)); if (out.z != 0.0) { out.z = 1.0 / out.z; out.w = out.z * out.w + 1.0; out.x = out.z * out.x + 1.0; out.y = out.z * out.y + 1.0; return vec3(out.w*viewport.y + viewport.w, out.x*viewport.z + viewport.x, out.y); } else { return vec3 (0.0, 0.0, -1.0); } } static inline vec3_t v3_un_project (vec3_t winpos, vec4_t viewport, mat4_t projection) { vec3_t in = vec3 (2.0*(winpos.x-viewport.w)/viewport.y - 1.0, 2.0*((viewport.z-winpos.y)-viewport.x)/viewport.z - 1.0, 2.0*winpos.z-1.0); return m4_mul_pos (m4_invert_affine(projection), in); } /** * Creates an orthographic projection matrix. It maps the right handed cube * defined by left, right, bottom, top, back and front onto the screen and * z-buffer. You can think of it as a cube you move through world or camera * space and everything inside is visible. * * This is slightly different from the traditional glOrtho() and from the linked * sources. These functions require the user to negate the last two arguments * (creating a left-handed coordinate system). We avoid that here so you can * think of this function as moving a right-handed cube through world space. * * The arguments are ordered in a way that for each axis you specify the minimum * followed by the maximum. Thats why it's bottom to top and back to front. * * Implementation details: * * To be more exact the right-handed cube is mapped into normalized device * coordinates, a left-handed cube where (-1 -1) is the lower left corner, * (1, 1) the upper right corner and a z-value of -1 is the nearest point and * 1 the furthest point. OpenGL takes it from there and puts it on the screen * and into the z-buffer. * * Sources: * * https://msdn.microsoft.com/en-us/library/windows/desktop/dd373965(v=vs.85).aspx * https://unspecified.wordpress.com/2012/06/21/calculating-the-gluperspective-matrix-and-other-opengl-matrix-maths/ */ static inline mat4_t m4_ortho(float left, float right, float bottom, float top, float back, float front) { float l = left, r = right, b = bottom, t = top, n = front, f = back; float tx = -(r + l) / (r - l); float ty = -(t + b) / (t - b); float tz = -(f + n) / (f - n); return mat4( 2 / (r - l), 0, 0, tx, 0, 2 / (t - b), 0, ty, 0, 0, 2 / (f - n), tz, 0, 0, 0, 1 ); } /** * Creates a perspective projection matrix for a camera. * * The camera is at the origin and looks in the direction of the negative Z axis. * `near_view_distance` and `far_view_distance` have to be positive and > 0. * They are distances from the camera eye, not values on an axis. * * `near_view_distance` can be small but not 0. 0 breaks the projection and * everything ends up at the max value (far end) of the z-buffer. Making the * z-buffer useless. * * The matrix is the same as `gluPerspective()` builds. The view distance is * mapped to the z-buffer with a reciprocal function (1/x). Therefore the z-buffer * resolution for near objects is very good while resolution for far objects is * limited. * * Sources: * * https://unspecified.wordpress.com/2012/06/21/calculating-the-gluperspective-matrix-and-other-opengl-matrix-maths/ */ static inline mat4_t m4_perspective(float vertical_field_of_view_in_deg, float aspect_ratio, float near_view_distance, float far_view_distance) { float fovy_in_rad = vertical_field_of_view_in_deg / 180 * M_PI; float f = 1.0f / tanf(fovy_in_rad / 2.0f); float ar = aspect_ratio; float nd = near_view_distance, fd = far_view_distance; return mat4( f / ar, 0, 0, 0, 0, f, 0, 0, 0, 0, (fd+nd)/(nd-fd), (2*fd*nd)/(nd-fd), 0, 0, -1, 0 ); } /** * Sébastien Le Roux 6/02/2017 Follwing glFrustum man page */ static inline mat4_t m4_frustum (float left, float right, float bottom, float top, float front, float back) { float n = 2.0f * front; float l = right - left; float p = top - bottom; float a = (right + left) / l; float b = (top + bottom) / p; float c = -(back + front) / (back - front); float d = - back * n / (back - front); return mat4( n / l, 0, a, 0, 0, n / p, b, 0, 0, 0, c, d, 0, 0, -1, 0 ); } /** * Builds a transformation matrix for a camera that looks from `from` towards * `to`. `up` defines the direction that's upwards for the camera. All three * vectors are given in world space and `up` doesn't need to be normalized. * * Sources: Derived on whiteboard. * * Implementation details: * * x, y and z are the right-handed base vectors of the cameras subspace. * x has to be normalized because the cross product only produces a normalized * output vector if both input vectors are orthogonal to each other. And up * probably isn't orthogonal to z. * * These vectors are then used to build a 3x3 rotation matrix. This matrix * rotates a vector by the same amount the camera is rotated. But instead we * need to rotate all incoming vertices backwards by that amount. That's what a * camera matrix is for: To move the world so that the camera is in the origin. * So we take the inverse of that rotation matrix and in case of an rotation * matrix this is just the transposed matrix. That's why the 3x3 part of the * matrix are the x, y and z vectors but written horizontally instead of * vertically. * * The translation is derived by creating a translation matrix to move the world * into the origin (thats translate by minus `from`). The complete lookat matrix * is then this translation followed by the rotation. Written as matrix * multiplication: * * lookat = rotation * translation * * Since we're right-handed this equals to first doing the translation and after * that doing the rotation. During that multiplication the rotation 3x3 part * doesn't change but the translation vector is multiplied with each rotation * axis. The dot product is just a more compact way to write the actual * multiplications. */ static inline mat4_t m4_look_at(vec3_t from, vec3_t to, vec3_t up) { vec3_t z = v3_muls(v3_norm(v3_sub(to, from)), -1); vec3_t x = v3_norm(v3_cross(up, z)); vec3_t y = v3_cross(z, x); return mat4( x.x, x.y, x.z, -v3_dot(from, x), y.x, y.y, y.z, -v3_dot(from, y), z.x, z.y, z.z, -v3_dot(from, z), 0, 0, 0, 1 ); } /** * Inverts an affine transformation matrix. That are translation, scaling, * mirroring, reflection, rotation and shearing matrices or any combination of * them. * * Implementation details: * * - Invert the 3x3 part of the 4x4 matrix to handle rotation, scaling, etc. * correctly (see source). * - Invert the translation part of the 4x4 matrix by multiplying it with the * inverted rotation matrix and negating it. * * When a 3D point is multiplied with a transformation matrix it is first * rotated and then translated. The inverted transformation matrix is the * inverse translation followed by the inverse rotation. Written as a matrix * multiplication (remember, the effect applies right to left): * * inv(matrix) = inv(rotation) * inv(translation) * * The inverse translation is a translation into the opposite direction, just * the negative translation. The rotation part isn't changed by that * multiplication but the translation part is multiplied by the inverse rotation * matrix. It's the same situation as with `m4_look_at()`. But since we don't * store the rotation matrix as 3D vectors we can't use the dot product and have * to write the matrix multiplication operations by hand. * * Sources for 3x3 matrix inversion: * * https://www.khanacademy.org/math/precalculus/precalc-matrices/determinants-and-inverses-of-large-matrices/v/inverting-3x3-part-2-determinant-and-adjugate-of-a-matrix */ static inline mat4_t m4_invert_affine(mat4_t matrix) { // Create shorthands to access matrix members float m00 = matrix.m00, m10 = matrix.m10, m20 = matrix.m20, m30 = matrix.m30; float m01 = matrix.m01, m11 = matrix.m11, m21 = matrix.m21, m31 = matrix.m31; float m02 = matrix.m02, m12 = matrix.m12, m22 = matrix.m22, m32 = matrix.m32; // Invert 3x3 part of the 4x4 matrix that contains the rotation, etc. // That part is called R from here on. // Calculate cofactor matrix of R float c00 = m11*m22 - m12*m21, c10 = -(m01*m22 - m02*m21), c20 = m01*m12 - m02*m11; float c01 = -(m10*m22 - m12*m20), c11 = m00*m22 - m02*m20, c21 = -(m00*m12 - m02*m10); float c02 = m10*m21 - m11*m20, c12 = -(m00*m21 - m01*m20), c22 = m00*m11 - m01*m10; // Calculate the determinant by using the already calculated determinants // in the cofactor matrix. // Second sign is already minus from the cofactor matrix. float det = m00*c00 + m10*c10 + m20 * c20; if (fabsf(det) == 0.0000) return m4_identity(); // Calculate inverse of R by dividing the transposed cofactor matrix by the // determinant. float i00 = c00 / det, i10 = c01 / det, i20 = c02 / det; float i01 = c10 / det, i11 = c11 / det, i21 = c12 / det; float i02 = c20 / det, i12 = c21 / det, i22 = c22 / det; // Combine the inverted R with the inverted translation return mat4( i00, i10, i20, -(i00*m30 + i10*m31 + i20*m32), i01, i11, i21, -(i01*m30 + i11*m31 + i21*m32), i02, i12, i22, -(i02*m30 + i12*m31 + i22*m32), 0, 0, 0, 1 ); } static inline mat4_t m4_translate (mat4_t matrix, vec3_t translation) { return mat4( matrix.m00, matrix.m10, matrix.m20, matrix.m30 + translation.x, matrix.m01, matrix.m11, matrix.m21, matrix.m31 + translation.y, matrix.m02, matrix.m12, matrix.m22, matrix.m32 + translation.z, matrix.m03, matrix.m13, matrix.m23, matrix.m33 ); } /** * Multiplies a 4x4 matrix with a 3D vector representing a point in 3D space. * * Before the matrix multiplication the vector is first expanded to a 4D vector * (x, y, z, 1). After the multiplication the vector is reduced to 3D again by * dividing through the 4th component (if it's not 0 or 1). */ static inline vec3_t m4_mul_pos(mat4_t matrix, vec3_t position) { vec3_t result = vec3( matrix.m00 * position.x + matrix.m10 * position.y + matrix.m20 * position.z + matrix.m30, matrix.m01 * position.x + matrix.m11 * position.y + matrix.m21 * position.z + matrix.m31, matrix.m02 * position.x + matrix.m12 * position.y + matrix.m22 * position.z + matrix.m32 ); float w = matrix.m03 * position.x + matrix.m13 * position.y + matrix.m23 * position.z + matrix.m33; if (w != 0.0) return vec3(result.x / w, result.y / w, result.z / w); return result; } static inline vec3_t m4_mul_coord(mat4_t matrix, vec3_t position) { vec3_t result = vec3( matrix.m00 * position.x + matrix.m10 * position.y + matrix.m20 * position.z + matrix.m30, matrix.m01 * position.x + matrix.m11 * position.y + matrix.m21 * position.z + matrix.m31, matrix.m02 * position.x + matrix.m12 * position.y + matrix.m22 * position.z + matrix.m32 ); return result; } static inline vec3_t m4_mul_abc(mat4_t matrix, vec3_t direction) { vec3_t result = vec3( matrix.m00 * direction.x + matrix.m10 * direction.y + matrix.m20 * direction.z, matrix.m01 * direction.x + matrix.m11 * direction.y + matrix.m21 * direction.z, matrix.m02 * direction.x + matrix.m12 * direction.y + matrix.m22 * direction.z ); return result; } /** * Multiplies a 4x4 matrix with a 3D vector representing a direction in 3D space. * * Before the matrix multiplication the vector is first expanded to a 4D vector * (x, y, z, 0). For directions the 4th component is set to 0 because directions * are only rotated, not translated. After the multiplication the vector is * reduced to 3D again by dividing through the 4th component (if it's not 0 or * 1). This is necessary because the matrix might contains something other than * (0, 0, 0, 1) in the bottom row which might set w to something other than 0 * or 1. */ static inline vec3_t m4_mul_dir(mat4_t matrix, vec3_t direction) { vec3_t result = vec3( matrix.m00 * direction.x + matrix.m10 * direction.y + matrix.m20 * direction.z, matrix.m01 * direction.x + matrix.m11 * direction.y + matrix.m21 * direction.z, matrix.m02 * direction.x + matrix.m12 * direction.y + matrix.m22 * direction.z ); float w = matrix.m03 * direction.x + matrix.m13 * direction.y + matrix.m23 * direction.z; if (w != 0.0) return vec3(result.x / w, result.y / w, result.z / w); return result; } static inline void m4_print(mat4_t matrix) { m4_fprintp(stdout, matrix, 6, 4); } static inline void m4_printp(mat4_t matrix, int width, int precision) { m4_fprintp(stdout, matrix, width, precision); } static inline void m4_fprint(FILE* stream, mat4_t matrix) { m4_fprintp(stream, matrix, 6, 2); } static inline void m4_fprintp(FILE* stream, mat4_t matrix, int width, int precision) { mat4_t m = matrix; int w = width, p = precision; int r; for(r = 0; r < 4; r++) { fprintf(stream, "| %*.*f %*.*f %*.*f %*.*f |\n", w, p, m.m[0][r], w, p, m.m[1][r], w, p, m.m[2][r], w, p, m.m[3][r] ); } } #endif // MATH_3D_IMPLEMENTATION atomes_1.3.1/src/opengl/glview.c0000664000175000017500000017034215212624223016230 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file glview.c * @short Callbacks of the OpenGL window * @author Sébastien Le Roux */ /* * This file: 'glview.c' * * Contains: * - The callbacks of the OpenGL window * * List of functions: GLuint * allocgluint (int val); GLuint ** allocdgluint (int xal, int yal); GLfloat ** allocdGLfloat (int xal, int yal); GLdouble get_max_depth (GLdouble depth); gboolean is_GLExtension_Supported (const char * extension); G_MODULE_EXPORT gboolean on_motion (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_lib_pressed (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_glwin_button_event (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_scrolled (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_glwin_pointer_scoll (GtkEventControllerScroll * event, gdouble dx, gdouble dy, gpointer data); G_MODULE_EXPORT gboolean on_expose (GtkGLArea * area, GdkGLContext * context, gpointer data); G_MODULE_EXPORT gboolean on_expose (GtkWidget * widg, cairo_t * cr, gpointer data); void update_bonds_ (int * bd, int * stp, int * bdim, int bda[* bdim], int bdb[* bdim], double * x, double * y, double * z); void sort (int dim, int * tab); void update_atom_neighbors_ (int * stp, int * at, int * nv); void update_this_neighbor_ (int * stp, int * at, int * iv, int * nv); void update (glwin * view); void transform (glwin * view, double aspect); void reshape (glwin * view, int width, int height, gboolean use_ratio); void save_rotation_quaternion (glwin * view); void edit_for_motion (glwin * view); void motion (glwin * view, gint x, gint y, GdkModifierType state); void render_this_gl_window (glwin * view, GtkGLArea * area); void render_this_gl_window (glwin * view, GtkWidget * widg, gint button); void glwin_lib_pressed (double x, double y, guint event_type, int event_button, gpointer data); void glwin_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void zoom (glwin * view, int delta); void rotate_x_y (glwin * view, double angle_x, double angle_y); void init_camera (project * this_proj); void setup_default_species_parameters_for_image (project * this_proj, image * img); void setup_image_spec_data (project * this_proj, image * img); void setup_default_lights (project * this_proj, image * img); void setup_default_image (project * this_proj, image * img); void init_img (project * this_proj); void init_opengl (); void center_molecule (project * this_proj); void center_this_molecule (glwin * view); void free_glwin_spec_data (project * this_proj, int spec); void glwin_init_spec_data (project * this_proj, int nspec); void init_glwin (glwin * view); void gtk_window_change_gdk_visual (GtkWidget * win); G_MODULE_EXPORT void on_glwin_pointer_motion (GtkEventControllerMotion * motc, gdouble x, gdouble y, gpointer data); G_MODULE_EXPORT void on_lib_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_lib_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_glwin_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_glwin_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data); G_MODULE_EXPORT void on_realize (GtkWidget * widg, gpointer data); GError * init_gtk_gl_area (GtkGLArea * area); ColRGBA set_default_color (int z); */ #include "global.h" #include "interface.h" #include "preferences.h" #include "initcoord.h" #include "bind.h" #include "project.h" #include "glview.h" extern vec3_t arc_ball_init; extern vec4_t old_rotation_quaternion; extern void process_the_hits (glwin * view, gint event_button, double ptx, double pty); extern void arc_ball_rotation (glwin * view, int x, int y); extern vec3_t get_arc_ball_vector (glwin * view, int x, int y); extern Light * init_light_source (int type, float size); extern void rotate_quat (project * this_proj, vec4_t q, int status, int axis); extern void translate (project * this_proj, int status, int axis, vec3_t trans); extern vec3_t get_bary (project * this_proj, int status); extern void update_labels (glwin * view); extern void prepare_atom_edition (gpointer data, gboolean visible); extern atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); extern int action_atoms_from_project (project * this_proj, atom_search * asearch, gboolean visible); extern atomic_object * create_object_from_frag_mol (project * this_proj, int coord, int geo, atom_search * remove); extern void duplicate_material (Material * new_mat, Material * old_mat); extern void duplicate_fog (Fog * new_fog, Fog * old_fog); extern void duplicate_screen_label (screen_label * new_lab, screen_label * old_lab); GLenum ogl_texture; /*! \fn GLuint * allocgluint (int val) \brief allocate a GLuint * pointer \param val size of the pointer to allocate */ GLuint * allocgluint (int val) { GLuint * var = NULL; var = g_malloc0(val*sizeof*var); return var; } /*! \fn GLuint ** allocdgluint (int xal, int yal) \brief allocate a GLuint ** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate */ GLuint ** allocdgluint (int xal, int yal) { GLuint ** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocgluint(yal); } return var; } /*! \fn GLfloat ** allocdGLfloat (int xal, int yal) \brief allocate a GLfloat ** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate */ GLfloat ** allocdGLfloat (int xal, int yal) { GLfloat ** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = g_malloc0(yal*sizeof*var[i]); } return var; } const float light_pos[MAX_LIGHTS][4] = {{-0.1f, 0.1f, 1.0f, 0.0f}, { 1.0f, 2.0f, 0.5f, 0.0f}, {-1.0f, 2.0f, -1.0f, 0.0f}, {-1.0f, -1.0f, 0.0f, 0.0f}}; /*! \fn ColRGBA set_default_color (int z) \brief pick the default color for an atom \param z atomic number */ ColRGBA set_default_color (int z) { ColRGBA col; double colors[118][3]={{1.00, 1.00, 1.00}, {0.85, 1.00, 1.00}, {0.80, 0.50, 1.00}, {0.76, 1.00, 0.00}, {1.00, 0.71, 0.71}, {0.56, 0.56, 0.56}, {0.18, 0.31, 0.97}, {1.00, 0.05, 0.05}, {0.56, 0.87, 0.31}, {0.70, 0.89, 0.96}, {0.67, 0.36, 0.95}, {0.54, 1.00, 0.00}, {0.75, 0.65, 0.65}, {0.94, 0.78, 0.62}, {1.00, 0.50, 0.00}, {1.00, 1.00, 0.19}, {0.12, 0.94, 0.12}, {0.50, 0.82, 0.89}, {0.56, 0.25, 0.83}, {0.24, 1.00, 0.00}, {0.90, 0.90, 0.90}, {0.75, 0.76, 0.78}, {0.65, 0.65, 0.67}, {0.54, 0.60, 0.78}, {0.61, 0.48, 0.78}, {0.87, 0.40, 0.20}, {0.94, 0.56, 0.62}, {0.31, 0.81, 0.31}, {0.78, 0.50, 0.20}, {0.49, 0.50, 0.69}, {0.76, 0.56, 0.56}, {0.40, 0.56, 0.56}, {0.74, 0.50, 0.89}, {1.00, 0.63, 0.00}, {0.65, 0.16, 0.16}, {0.36, 0.72, 0.82}, {0.44, 0.18, 0.69}, {0.00, 1.00, 0.00}, {0.58, 1.00, 1.00}, {0.58, 0.88, 0.88}, {0.45, 0.76, 0.79}, {0.33, 0.71, 0.71}, {0.23, 0.62, 0.62}, {0.14, 0.56, 0.56}, {0.04, 0.49, 0.55}, {0.00, 0.41, 0.52}, {0.75, 0.75, 0.75}, {1.00, 0.85, 0.56}, {0.65, 0.46, 0.45}, {0.40, 0.50, 0.50}, {0.62, 0.39, 0.71}, {0.83, 0.48, 0.00}, {0.58, 0.00, 0.58}, {0.26, 0.62, 0.69}, {0.34, 0.09, 0.56}, {0.00, 0.79, 0.00}, {0.44, 0.83, 1.00}, {1.00, 1.00, 0.78}, {0.85, 1.00, 0.78}, {0.78, 1.00, 0.78}, {0.64, 1.00, 0.78}, {0.56, 1.00, 0.78}, {0.38, 1.00, 0.78}, {0.27, 1.00, 0.78}, {0.19, 1.00, 0.78}, {0.12, 1.00, 0.78}, {0.00, 1.00, 0.61}, {0.00, 0.90, 0.46}, {0.00, 0.83, 0.32}, {0.00, 0.75, 0.22}, {0.00, 0.67, 0.14}, {0.30, 0.76, 1.00}, {0.30, 0.65, 1.00}, {0.13, 0.58, 0.84}, {0.15, 0.49, 0.67}, {0.15, 0.40, 0.59}, {0.09, 0.33, 0.53}, {0.81, 0.81, 0.87}, {1.00, 0.81, 0.13}, {0.72, 0.72, 0.81}, {0.65, 0.33, 0.30}, {0.34, 0.35, 0.38}, {0.62, 0.31, 0.71}, {0.67, 0.36, 0.00}, {0.46, 0.31, 0.27}, {0.26, 0.51, 0.59}, {0.26, 0.00, 0.40}, {0.00, 0.49, 0.00}, {0.44, 0.67, 0.98}, {0.00, 0.73, 1.00}, {0.00, 0.63, 1.00}, {0.00, 0.56, 1.00}, {0.00, 0.50, 1.00}, {0.00, 0.42, 1.00}, {0.33, 0.36, 0.95}, {0.54, 0.31, 0.89}, {0.63, 0.21, 0.83}, {0.70, 0.12, 0.83}, {0.70, 0.12, 0.73}, {0.70, 0.05, 0.65}, {0.74, 0.05, 0.53}, {0.78, 0.00, 0.40}, {0.80, 0.00, 0.35}, {0.82, 0.00, 0.31}, {0.85, 0.00, 0.27}, {0.88, 0.00, 0.22}, {0.90, 0.00, 0.18}, {0.92, 0.00, 0.15}, {0.93, 0.00, 0.14}, {0.94, 0.00, 0.13}, {0.95, 0.00, 0.12}, {0.96, 0.00, 0.10}, {0.97, 0.00, 0.10}, {0.98, 0.00, 0.10}, {0.99, 0.00, 0.10}, {1.00, 0.00, 0.10}, {1.00, 0.00, 0.15}, {1.00, 0.00, 0.20}}; // Dumy atoms have z < 1 int Z = (z < 1) ? 1 : z; col.red = colors[Z-1][0]; col.green = colors[Z-1][1]; col.blue = colors[Z-1][2]; col.alpha = 1.0; return col; } /*! \fn void update_bonds_ (int * bd, int * stp, int * bdim, int bda[*bdim], int bdb[*bdim], double * x, double * y, double * z) \brief update bonding information from Fortran90 \param bd bonds (0) or clones (1) \param stp the MD step \param bdim number of bonds (or clone bonds) \param bda bond "ab" list atom a \param bdb bond "ab" list atom b \param x clone(s) x coordinates \param y clone(s) y coordinates \param z clone(s) z coordinates */ void update_bonds_ (int * bd, int * stp, int * bdim, int bda[* bdim], int bdb[* bdim], double * x, double * y, double * z) { int i, j, k; active_glwin -> allbonds[* bd] += * bdim; if (active_glwin -> bonds[* stp][* bd]) { for (i=0; i bonds[* stp][* bd]; i++) { if (active_glwin -> bondid[* stp][* bd][i]) { g_free (active_glwin -> bondid[* stp][* bd][i]); } } g_free (active_glwin -> bondid[* stp][* bd]); active_glwin -> bondid[* stp][* bd] = NULL; } active_glwin -> bonds[* stp][* bd] = * bdim; if (* bdim > 0) { active_glwin -> bondid[* stp][* bd] = allocdint (* bdim, 2); for (i=0; i< * bdim; i++) { j = bda[i] - 1; k = bdb[i] - 1; active_glwin -> bondid[* stp][* bd][i][0] = j; active_glwin -> bondid[* stp][* bd][i][1] = k; } if (* bd) { if (active_glwin -> clones[* stp] != NULL) { g_free (active_glwin -> clones[* stp]); active_glwin -> clones[* stp] = NULL; } active_glwin -> clones[* stp] = g_malloc0(*bdim*sizeof*active_glwin -> clones[* stp]); for (i=0; i< * bdim; i++) { active_glwin -> clones[* stp][i].x = x[i]; active_glwin -> clones[* stp][i].y = y[i]; active_glwin -> clones[* stp][i].z = z[i]; j = bda[i] - 1; k = bdb[i] - 1; active_project -> atoms[* stp][j].cloned = TRUE; active_project -> atoms[* stp][k].cloned = TRUE; } } } } /*! \fn void sort (int dim, int * tab) \brief sort, nim to max, a table by integer value \param dim the number of value \param tab the table to sort */ void sort (int dim, int * tab) { int i, j, val; for (i=1; i-1; j--) { if (tab[j] <= val) break; tab[j+1] = tab[j]; } tab[j+1] = val; } } /*! \fn void update_atom_neighbors_ (int * stp, int * at, int * nv) \brief update an atom number of neighbors from Fortran90 \param stp the MD step \param at atom id \param nv number of neighbor atom(s) */ void update_atom_neighbors_ (int * stp, int * at, int * nv) { active_project -> atoms[* stp][* at].numv = * nv; if (* nv) { active_project -> atoms[* stp][* at].vois = allocint (* nv); } } /*! \fn void update_this_neighbor_ (int * stp, int * at, int * iv, int * nv) \brief update atom neighbor list from Fortran90 \param stp the MD step \param at atom id \param iv neighbor index \param nv neighbor id */ void update_this_neighbor_ (int * stp, int * at, int * iv, int * nv) { active_project -> atoms[* stp][* at].vois[* iv] = * nv - 1; if (* iv == active_project -> atoms[* stp][* at].numv - 1) { sort (active_project -> atoms[* stp][* at].numv, active_project -> atoms[* stp][* at].vois); } } /*! \fn void update (glwin * view) \brief update the rendering of the OpenGL window \param view the target glwin */ void update (glwin * view) { gtk_gl_area_queue_render ((GtkGLArea *)view -> plot); #ifdef G_OS_WIN32 #ifdef GTK3 hide_the_widgets (view -> plot); show_the_widgets (view -> plot); #endif #endif } /*! \fn void transform (glwin * view, double aspect) \brief transform the OpenGL window \param view the target glwin \param aspect new aspect ratio */ void transform (glwin * view, double aspect) { GLdouble w, h; GLdouble dw, dh; double zoom = view -> anim -> last -> img -> zoom; view -> zoom_factor = zoom * 0.1 * view -> anim -> last -> img -> p_depth / (2.0 * view -> anim -> last -> img -> gfar); if (view -> anim -> last -> img -> rep == ORTHOGRAPHIC) { zoom *= (view -> anim -> last -> img -> p_depth / view -> anim -> last -> img -> gnear); } dw = view -> anim -> last -> img -> c_shift[0]*2.0*zoom; dh = view -> anim -> last -> img -> c_shift[1]*2.0*zoom; if (aspect > 1.0) { w = zoom * aspect; h = zoom; } else { w = zoom; h = zoom / aspect; } view -> anim -> last -> img -> gleft = -w + dw; view -> anim -> last -> img -> gright = w + dw; view -> anim -> last -> img -> gbottom = -h + dh; view -> anim -> last -> img -> gtop = h + dh; if (view -> anim -> last -> img -> rep == PERSPECTIVE) { view -> projection_matrix = m4_frustum (view -> anim -> last -> img -> gleft, view -> anim -> last -> img -> gright, view -> anim -> last -> img -> gbottom, view -> anim -> last -> img -> gtop, view -> anim -> last -> img -> gnear, view -> anim -> last -> img -> gfar); } else { view -> projection_matrix = m4_ortho (view -> anim -> last -> img -> gleft, view -> anim -> last -> img -> gright, view -> anim -> last -> img -> gbottom, view -> anim -> last -> img -> gtop, -view -> anim -> last -> img -> gfar, view -> anim -> last -> img -> gfar); } } /*! \fn void reshape (glwin * view, int width, int height, gboolean use_ratio) \brief reshape (resize) the OpenGL window \param view the target glwin \param width new with \param height new height \param use_ratio use widget rendering ratio */ void reshape (glwin * view, int width, int height, gboolean use_ratio) { double aspect; int scale = 1.0; if (use_ratio) { if (view -> win) { if (GTK_IS_WIDGET(view -> win)) { scale = gtk_widget_get_scale_factor (view -> win); } } } glViewport (0, 0, (GLsizei) scale * width, (GLsizei) scale * height); view -> view_port = vec4 (0.0, 0.0, width, height); aspect = (double) width / (double) height; transform (view, aspect); } /*! \fn void save_rotation_quaternion (glwin * view) \brief save the rotation quaternion of the last image \param view the target glwin */ void save_rotation_quaternion (glwin * view) { //int i; //for (i=0; i<4; i++) old_rotation_quaternion[i] = view -> anim -> last -> img -> rotation_quaternion[i]; old_rotation_quaternion.w = view -> anim -> last -> img -> rotation_quaternion.w; old_rotation_quaternion.x = view -> anim -> last -> img -> rotation_quaternion.x; old_rotation_quaternion.y = view -> anim -> last -> img -> rotation_quaternion.y; old_rotation_quaternion.z = view -> anim -> last -> img -> rotation_quaternion.z; } /*! \fn void edit_for_motion (glwin * view) \brief if edition mode is one some steps are required \param view the target glwin */ void edit_for_motion (glwin * view) { gboolean check_edit = FALSE; project * this_proj = get_project_by_id(view -> proj); prepare_atom_edition (& view -> colorp[0][0], FALSE); atom_search * move_search = allocate_atom_search (this_proj -> id, DISPL, DISPL, this_proj -> natomes); int ** frag = allocdint (this_proj -> coord -> totcoord[2], 2); int i, j, k; j = 0; for (i=0; i natomes; i++) { k = this_proj -> atoms[0][i].coord[2]; frag[k][0] ++; if (this_proj -> atoms[0][i].pick[0]) { move_search -> todo[i] = 1; frag[k][1] ++; j ++; } } if (j) { for (i=0; i coord -> totcoord[2]; i++) { if (frag[i][1] && frag[i][1] < frag[i][0]) { check_edit = TRUE; break; } } if (check_edit) { action_atoms_from_project (this_proj, move_search, (this_proj -> modelgl -> atom_win) ? this_proj -> modelgl -> atom_win -> visible : FALSE); } else { atomic_object * object; for (i=0; i coord -> totcoord[2]; i++) { if (frag[i][1]) { object_motion = TRUE; object = create_object_from_frag_mol (this_proj, 2, i, NULL); object_motion = FALSE; g_free (object); } } } g_free (frag); } view -> baryc[1] = get_bary (this_proj, 1); move_search = free_this_search_data (move_search); view -> prepare_motion = FALSE; } /*! \fn void motion (glwin * view, gint x, gint y, GdkModifierType state) \brief mouse motion in the OpenGL window \param view the target glwin \param x x position \param y y position \param state The keyboard modifier (Ctrl, Alt ...) */ void motion (glwin * view, gint x, gint y, GdkModifierType state) { view -> mouseAction = MOTION; int i; if (view -> mode == EDITION && view -> prepare_motion && view -> rebuild[0][0]) edit_for_motion (view); if (state & GDK_BUTTON1_MASK) { arc_ball_rotation (view, x, y); } else if (state & GDK_BUTTON2_MASK) { if (view -> mode != EDITION) { view -> anim -> last -> img -> c_shift[0] -= (double) (x - view -> mouseX) / view -> pixels[0]; view -> anim -> last -> img -> c_shift[1] += (double) (y - view -> mouseY) / view -> pixels[1]; for (i=0; i<2; i++) { if (view -> rep_win) { if (view -> rep_win -> camera_widg[i+5] && GTK_IS_WIDGET(view -> rep_win -> camera_widg[i+5])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> rep_win -> camera_widg[i+5], - view -> anim -> last -> img -> c_shift[i]); } } } } else { vec3_t pos_a = vec3(x, - y, 0.75); vec3_t pos_b = vec3(view -> mouseX, - view -> mouseY, 0.75); vec3_t trans_a = v3_un_project (pos_a, view -> view_port, view -> projection_matrix); vec3_t trans_b = v3_un_project (pos_b, view -> view_port, view -> projection_matrix); vec3_t trans; trans.x = (trans_a.x - trans_b.x); trans.y = (trans_b.y - trans_a.y); if (view -> anim -> last -> img -> rep == PERSPECTIVE) { trans.x *= view -> anim -> last -> img -> p_depth; trans.y *= view -> anim -> last -> img -> p_depth; } trans.z = 0.0; translate (get_project_by_id(view -> proj), 1, 1, trans); } } if (view -> mode == EDITION) { init_default_shaders (view); #ifdef GTK3 // GTK3 Menu Action To Check set_advanced_bonding_menus (view); #endif } view -> mouseX = x; view -> mouseY = y; update (view); } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_motion (GtkWidget * widg, GdkEvent * event, gpointer data) \brief handle mouse motion event in the OpenGL window GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_motion (GtkWidget * widg, GdkEvent * event, gpointer data) { glwin * view = (glwin *) data; if (view -> mouseStatus != RELEASED) { GdkEventMotion * mevent = (GdkEventMotion *)event; gint x, y; GdkModifierType state; if (mevent -> is_hint) { gdk_window_get_device_position (mevent -> window, mevent -> device, & x, & y, & state); } else { x = (gint) mevent -> x; y = (gint) mevent -> y; state = (GdkModifierType) mevent -> state; } motion (view, x, y, state); } return FALSE; } #else /*! \fn G_MODULE_EXPORT void on_glwin_pointer_motion (GtkEventControllerMotion * motc, gdouble x, gdouble y, gpointer data) \brief handle mouse motion event in the OpenGL window GTK4 \param motc The GtkEvenController sending the signal \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_glwin_pointer_motion (GtkEventControllerMotion * motc, gdouble x, gdouble y, gpointer data) { glwin * view = (glwin *) data; if (view -> mouseStatus != RELEASED) { motion (view, (gint)x, (gint)y, gtk_event_controller_get_current_event_state((GtkEventController*)motc)); } } #endif #ifdef GTKGLAREA /*! \fn void render_this_gl_window (glwin * view, GtkGLArea * area) \brief render the OpenGL window \param view the target glwin \param area the target GtkGLArea */ void render_this_gl_window (glwin * view, GtkGLArea * area) #else /*! \fn void render_this_gl_window (glwin * view, GtkWidget * widg, gint button) \brief render the OpenGL window \param view the target glwin \param widg the GtkWidget sending the signal \param button the button id */ void render_this_gl_window (glwin * view, GtkWidget * widg, gint button) #endif { #ifdef GTKGLAREA view -> pixels[0] = get_widget_width (GTK_WIDGET(area)); view -> pixels[1] = get_widget_height (GTK_WIDGET(area)); gtk_gl_area_make_current (area); if (gtk_gl_area_get_error (area) == NULL) #else view -> pixels[0] = get_widget_width (widg); view -> pixels[1] = get_widget_height (widg); GdkWindow * win = gtk_widget_get_window (widg); if (glXMakeCurrent (GDK_WINDOW_XDISPLAY (win), GDK_WINDOW_XID (win), view -> glcontext)) #endif { reshape (view, view -> pixels[0], view -> pixels[1], TRUE); draw (view); if (view -> to_pick) { if (view -> mouseButton) process_the_hits (view, view -> mouseButton, view -> mouseX, view -> mouseY); view -> to_pick = FALSE; reshape (view, view -> pixels[0], view -> pixels[1], TRUE); draw (view); } #ifdef GTKGLAREA glFlush (); #else glXSwapBuffers (GDK_WINDOW_XDISPLAY (win), GDK_WINDOW_XID (win)); #endif } } /*! \fn void glwin_lib_pressed (double x, double y, guint event_type, guint event_button, gpointer data) \brief handle mouse button event on the molecular library OpenGL window \param x x position \param y y position \param event_type event type \param event_button event button \param data the associated data pointer */ void glwin_lib_pressed (double x, double y, guint event_type, guint event_button, gpointer data) { glwin * view = (glwin *) data; switch (event_type) { case GDK_BUTTON_PRESS: view -> mouseStatus = CLICKED; view -> mouseX = x; view -> mouseY = y; view -> mouseButton = event_button; if (event_button == 1) { save_rotation_quaternion (view); arc_ball_init = get_arc_ball_vector (view, view -> mouseX, view -> mouseY); view -> to_pick = FALSE; update (view); } break; case GDK_BUTTON_RELEASE: view -> mouseStatus = RELEASED; break; } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_lib_pressed (GtkWidget * widg, GdkEvent * event, gpointer data) \brief handle mouse button event on the molecular library OpenGL window (limited interaction) \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_lib_pressed (GtkWidget * widg, GdkEvent * event, gpointer data) { GdkEventButton * bevent = (GdkEventButton*)event; glwin_lib_pressed (bevent -> x, bevent -> y, bevent -> type, bevent -> button, data); return FALSE; } #else /*! \fn G_MODULE_EXPORT void on_lib_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief handle mouse button press event on the molecular library OpenGL window (limited interaction) \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_lib_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { glwin_lib_pressed (x, y, GDK_BUTTON_PRESS, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), data); } /*! \fn G_MODULE_EXPORT void on_lib_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief handle mouse button release event on the molecular library OpenGL window (limited interaction) \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_lib_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { glwin_lib_pressed (x, y, GDK_BUTTON_RELEASE, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), data); } #endif // GTK3 gl_pop_info to_pop; /*! \fn void glwin_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief handle mouse button event on the OpenGL window \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void glwin_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) { glwin * view = (glwin *) data; switch (event_type) { case GDK_BUTTON_PRESS: view -> mouseStatus = CLICKED; view -> mouseX = event_x; view -> mouseY = event_y; view -> mouseButton = event_button; clock_gettime (CLOCK_MONOTONIC, & start_time); if (event_button == 1 || event_button == 3) { save_rotation_quaternion (view); arc_ball_init = get_arc_ball_vector (view, view -> mouseX, view -> mouseY); view -> nth_copy = 0; view -> insert_coords = get_insertion_coordinates (view); #ifdef GTKGLAREA view -> to_pick = TRUE; update (view); #else render_this_gl_window (view, plot, event_button); #endif } break; case GDK_BUTTON_RELEASE: view -> mouseStatus = RELEASED; view -> mouseButton = 0; clock_gettime (CLOCK_MONOTONIC, & stop_time); if (get_calc_time (start_time, stop_time) < 0.4) { #ifdef GTKGLAREA update (view); #else render_this_gl_window (view, plot, event_button); #endif } if (view -> mode == EDITION && view -> mouseAction == MOTION) { view -> baryc[1] = get_bary (get_project_by_id(view -> proj), 1); view -> mouseAction = ANALYZE; } if (event_button == 3) { switch (to_pop.action) { case 1: popup_main_menu (view, to_pop.x, to_pop.y); break; case 2: popup_selection (view, to_pop.x, to_pop.y, to_pop.pts[0], to_pop.pts[1], to_pop.pts[2], to_pop.pts[3], to_pop.pts[4]); break; } to_pop.action = 0; } break; } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_glwin_button_event (GtkWidget * widg, GdkEvent * event, gpointer data) \brief mouse button event on the OpenGL window \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_glwin_button_event (GtkWidget * widg, GdkEvent * event, gpointer data) { GdkEventButton * bevent = (GdkEventButton*)event; glwin_button_event (bevent -> x, bevent -> y, bevent -> button, bevent -> type, bevent -> time, data); return FALSE; } #else /*! \fn G_MODULE_EXPORT void on_glwin_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button pressed signal on the OpenGL window \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_glwin_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { glwin_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_PRESS, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } /*! \fn G_MODULE_EXPORT void on_glwin_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button released signal on the OpenGL window \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_glwin_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { glwin_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_RELEASE, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } #endif // GTK3 // Zoom in or out /*! \fn void zoom (glwin * view, int delta) \brief zoom in or zoom out in the OpenGL window \param view the target glwin \param delta the zoom modification */ void zoom (glwin * view, int delta) { view -> anim -> last -> img -> zoom += delta * view -> zoom_factor; if (view -> rep_win) { if (view -> rep_win -> camera_widg[0] && GTK_IS_WIDGET(view -> rep_win -> camera_widg[0])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> rep_win -> camera_widg[0], 1.0-0.5*view -> anim -> last -> img -> zoom); } } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_scrolled (GtkWidget * widg, GdkEvent * event, gpointer data) \brief handle mouse scroll event on the OpenGL window \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_scrolled (GtkWidget * widg, GdkEvent * event, gpointer data) { glwin * view = (glwin *) data; GdkEventScroll * sevent = (GdkEventScroll *)event; if (sevent -> direction == GDK_SCROLL_UP) { zoom (view, 1); } else if (sevent -> direction == GDK_SCROLL_DOWN && view -> anim -> last -> img -> zoom > ZOOM_MAX) { zoom (view, -1); } update_labels (view); update (view); return FALSE; } #else /*! \fn G_MODULE_EXPORT gboolean on_glwin_pointer_scoll (GtkEventControllerScroll * event, gdouble dx, gdouble dy, gpointer data) \brief handle mouse scroll event on the OpenGL window \param event the GtkEventControllerScroll sending the signal \param dx x position \param dy y position \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_glwin_pointer_scoll (GtkEventControllerScroll * event, gdouble dx, gdouble dy, gpointer data) { glwin * view = (glwin *) data; if (dy < 0) { zoom (view, 1); } else if (dy > 0 && view -> anim -> last -> img -> zoom > ZOOM_MAX) { zoom (view, -1); } update_labels (view); update (view); return TRUE; } #endif /*! \fn void rotate_x_y (glwin * view, double angle_x, double angle_y) \brief rotate the OpenGL camera \param view the target glwin \param angle_x camera angle on x axis \param angle_y camera angle on y axis */ void rotate_x_y (glwin * view, double angle_x, double angle_y) { vec3_t axis; vec4_t q_a, q_b, q_c; axis.x = 0.0; axis.y = 1.0; axis.z = 0.0; q_a = axis_to_quat (axis, -pi*angle_y/180.0); axis.x = 1.0; axis.y = 0.0; axis.z = 0.0; q_b = axis_to_quat (axis, -pi*angle_x/180.0); q_c = q4_mul (q_a, q_b); view -> anim -> last -> img -> c_angle[0] -= angle_x; view -> anim -> last -> img -> c_angle[1] -= angle_y; int i; for (i=0; i<2; i++) { if (fabs(view -> anim -> last -> img -> c_angle[i]) > 180.0) view -> anim -> last -> img -> c_angle[i] = 0.0; if (view -> rep_win) { if (view -> rep_win -> camera_widg[i+3] && GTK_IS_WIDGET(view -> rep_win -> camera_widg[i+3])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> rep_win -> camera_widg[i+3], view -> anim -> last -> img -> c_angle[i]); } } } if (view -> mode != EDITION) { view -> anim -> last -> img -> rotation_quaternion = q4_mul (old_rotation_quaternion, q_c); } else { rotate_quat (get_project_by_id(view -> proj), q_c, 1, 1); init_default_shaders (view); #ifdef GTK3 // GTK3 Menu Action To Check set_advanced_bonding_menus (view); #endif } } /*! \fn GLdouble get_max_depth (GLdouble depth) \brief guess a reasonable maximum OpenGL window depth \param depth the calculated model depth */ GLdouble get_max_depth (GLdouble depth) { if (depth < 10.0) { return 10.0; } else if (depth < 100.0) { return 100.0; } else if (depth < 1000.0) { return 1000.0; } else { return 10000.0; } } /*! \fn void init_camera (project * this_proj) \brief initialize the OpenGL camera settings \param this_proj the target project */ void init_camera (project * this_proj) { glwin * view = this_proj -> modelgl; // the call to ogl_max_() requires this_proj to be the active project ! view -> anim -> last -> img -> p_depth = (this_proj -> natomes) ? oglmax_ () : 50.0; view -> anim -> last -> img -> m_depth = get_max_depth (view -> anim -> last -> img -> p_depth); view -> anim -> last -> img -> gnear = default_rep.gnear; view -> anim -> last -> img -> gfar = view -> anim -> last -> img -> p_depth*2.0; view -> anim -> last -> img -> rotation_quaternion.w = 0.0; view -> anim -> last -> img -> rotation_quaternion.x = 0.0; view -> anim -> last -> img -> rotation_quaternion.y = 0.0; view -> anim -> last -> img -> rotation_quaternion.z = 1.0; int i; for (i=0; i<2; i++) { view -> anim -> last -> img -> c_angle[i] = 0.0; view -> anim -> last -> img -> c_shift[i] = default_rep.c_shift[i]; } save_rotation_quaternion (view); rotate_x_y (view, default_rep.c_angle[0], default_rep.c_angle[1]); view -> anim -> last -> img -> zoom = default_rep.zoom; if (view -> rep_win) { if (view -> rep_win -> camera_widg[0] && GTK_IS_WIDGET(view -> rep_win -> camera_widg[0])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> rep_win -> camera_widg[0], 1.0 - 0.5*view -> anim -> last -> img -> zoom); } if (view -> rep_win -> camera_widg[1] && GTK_IS_WIDGET(view -> rep_win -> camera_widg[1])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> rep_win -> camera_widg[1], view -> anim -> last -> img -> p_depth); } if (view -> rep_win -> camera_widg[2] && GTK_IS_WIDGET(view -> rep_win -> camera_widg[2])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> rep_win -> camera_widg[2], view -> anim -> last -> img -> gnear); } } } /*! \fn void setup_default_species_parameters_for_image (project * this_proj, image * img) \brief setup default chemical species related parameters for image \param this_proj the target project \param img the target image */ void setup_default_species_parameters_for_image (project * this_proj, image * img) { int i, j; int nsp = this_proj -> nspec; img -> radall[0] = default_bd_rw[2]; img -> radall[1] = default_bd_rw[5]; for (i = 0; i < nsp; i++) { j = this_proj -> chemistry -> chem_prop[CHEM_Z][i]; // B & S img -> sphererad[i] = (default_o_at_rs[0]) ? default_at_rs[0] : get_radius (2, 0, j, default_atomic_rad[0]); img -> sphererad[i+nsp] = (default_o_at_rs[5]) ? default_at_rs[5] : get_radius (7, 0, j, default_atomic_rad[5]); img -> bondrad[i][i] = (default_o_bd_rw[0]) ? default_bd_rw[0] : get_radius (-2, 0, j, default_bond_rad[0]); img -> bondrad[i+nsp][i+nsp] = (default_o_bd_rw[3]) ? default_bd_rw[3] : get_radius (-5, 0, j, default_bond_rad[3]);; // Filled img -> atomicrad[i] = (default_o_at_rs[3]) ? default_at_rs[3] : get_radius (5, 0, j, default_atomic_rad[3]); img -> atomicrad[i+nsp] = (default_o_at_rs[8]) ? default_at_rs[8] : get_radius (10, 0, j, default_atomic_rad[8]); // Wireframe & Dots img -> pointrad[i] = (default_o_at_rs[1]) ? default_at_rs[1] : get_radius (3, 0, j, default_atomic_rad[1]); img -> pointrad[i+nsp] = (default_o_at_rs[6]) ? default_at_rs[6] : get_radius (8, 0, j, default_atomic_rad[6]); img -> linerad[i][i] = (default_o_bd_rw[1]) ? default_bd_rw[1] : get_radius (-3, 0, j, default_bond_rad[1]); img -> linerad[i+nsp][i+nsp] = (default_o_bd_rw[4]) ? default_bd_rw[4] : get_radius (-6, 0, j, default_bond_rad[4]); img -> at_color[i] = get_spec_color (j, default_atom_color[0]); img -> at_color[i+nsp] = get_spec_color (j, default_atom_color[1]); } for (i=0; i < nsp-1; i++) { for (j=i+1; j < nsp; j++) { img -> linerad[i][j] = img -> linerad[j][i] = min (img -> linerad[i][i], img -> linerad[j][j]); img -> linerad[i+nsp][j+nsp] = img -> linerad[j+nsp][i+nsp] = min (img -> linerad[i+nsp][i+nsp], img -> linerad[j+nsp][j+nsp]); img -> bondrad[i][j] = img -> bondrad[j][i] = min(img -> bondrad[i][i], img -> bondrad[j][j]); img -> bondrad[i+nsp][j+nsp] = img -> bondrad[j+nsp][i+nsp] = min(img -> bondrad[i+nsp][i+nsp], img -> bondrad[j+nsp][j+nsp]); } } } /*! \fn void setup_image_spec_data (project * this_proj, image * img) \brief initialize the chemical species related pointers in an image data structure \param this_proj the target project \param img the target image */ void setup_image_spec_data (project * this_proj, image * img) { int i, j; int nsp = this_proj -> nspec; // Chemical species related for (i = 0; i<2; i++) { img -> show_label[i] = allocbool(nsp); img -> show_atom[i] = allocbool(nsp); for (j=0; j show_atom[i][j] = TRUE; } img -> at_color = g_malloc0(2*nsp*sizeof*img -> at_color); img -> sphererad = allocdouble (2*nsp); img -> pointrad = allocdouble (2*nsp); img -> atomicrad = allocdouble (2*nsp); img -> bondrad = allocddouble (2*nsp, 2*nsp); img -> linerad = allocddouble (2*nsp, 2*nsp); setup_default_species_parameters_for_image (this_proj, img); for (i=0; i<10; i++) { img -> spcolor[i] = NULL; if (i < 2) { img -> spcolor[i] = g_malloc0(nsp*sizeof*img -> spcolor[i]); } else { img -> spcolor[i] = g_malloc0(1*sizeof*img -> spcolor[i]); img -> spcolor[i][0] = NULL; } } } /*! \fn void setup_default_lights (project * this_proj, image * img) \brief initialize lightning for an image data structure \param this_proj the target project \param img the target image */ void setup_default_lights (project * this_proj, image * img) { img -> l_ghtning.lights = default_lightning.lights; if (img -> l_ghtning.spot) g_free (img -> l_ghtning.spot); img -> l_ghtning.spot = g_malloc0(img -> l_ghtning.lights*sizeof*img -> l_ghtning.spot); int i; for (i=0; i l_ghtning.lights; i++) { img -> l_ghtning.spot[i] = init_light_source (default_lightning.spot[i] -> type, img -> p_depth); img -> l_ghtning.spot[i] -> fix = default_lightning.spot[i] -> fix; img -> l_ghtning.spot[i] -> intensity = default_lightning.spot[i] -> intensity; img -> l_ghtning.spot[i] -> attenuation = default_lightning.spot[i] -> attenuation; img -> l_ghtning.spot[i] -> direction = default_lightning.spot[i] -> direction; img -> l_ghtning.spot[i] -> position = default_lightning.spot[i] -> position; if (img -> l_ghtning.spot[i] -> type) { img -> l_ghtning.spot[i] -> position = v3_muls (img -> l_ghtning.spot[i] -> position, img -> p_depth); img -> l_ghtning.spot[i] -> attenuation.y /= img -> p_depth; img -> l_ghtning.spot[i] -> attenuation.z /= (img -> p_depth*img -> p_depth); } } } /*! \fn void setup_default_image (project * this_proj, image * img) \brief setup default image parameters \param this_proj the target project \param img the target image */ void setup_default_image (project * this_proj, image * img) { int i; duplicate_background_data (img -> back, & default_background); duplicate_box_data (img -> abc, & default_box); duplicate_axis_data (img -> xyz, & default_axis); for (i=0; i<2; i++) { img -> color_map[i] = default_opengl[i+1]; img -> sel_color[i] = default_sel_color[i]; } img -> quality = default_opengl[3]; img -> rep = default_rep.rep; img -> filled_type = NONE; img -> ray_tracing = default_opengl[4]; // Visual styles if (! default_opengl[0]) { img -> style = (this_proj -> natomes <= 10000) ? BALL_AND_STICK : DEFAULT_STYLE; } else if (default_opengl[0] > 0) { img -> style = (default_opengl[0] < 2) ? default_opengl[0] - 1 : default_opengl[0]; } else { img -> style = SPACEFILL; img -> filled_type = - default_opengl[0] - 1; } img -> xyz -> axis = (this_proj -> natomes) ? default_axis.axis : NONE; img -> abc -> box = (this_proj -> cell.ltype) ? default_box.box : NONE; for (i=0; i<5; i++) { duplicate_screen_label (& img -> labels[i], & default_label[i]); } for (i=0; i<2; i++) { img -> mtilt[i] = default_mtilt[i]; img -> mfactor[i] = default_mfactor[i]; img -> mpattern[i] = default_mpattern[i]; img -> mwidth[i] = default_mwidth[i]; img -> acl_format[i] = default_acl_format[i]; } setup_default_lights (this_proj, img); duplicate_material (& img -> m_terial, & default_material); duplicate_fog (& img -> f_g, & default_fog); } /*! \fn void init_img (project * this_proj) \brief initialize an image data structure \param this_proj the target project */ void init_img (project * this_proj) { this_proj -> modelgl -> anim -> last -> img = g_malloc0(sizeof*this_proj -> modelgl -> anim -> last -> img); image * img = this_proj -> modelgl -> anim -> last -> img; if (! img -> back) img -> back = g_malloc0(sizeof*img -> back); if (! img -> abc) img -> abc = g_malloc0(sizeof*img -> abc); if (! img -> xyz) img -> xyz = g_malloc0(sizeof*img -> xyz); img -> render = FILL; this_proj -> modelgl -> p_moy = img -> p_depth = (this_proj -> natomes) ? oglmax_ () : 50.0; img -> m_depth = get_max_depth (img -> p_depth); setup_default_image (this_proj, img); int i; for (i=0; i<2; i++) img -> selected[i] = g_malloc0(sizeof*img -> selected[i]); if (this_proj -> nspec) setup_image_spec_data (this_proj, img); } /*! \fn gboolean is_GLExtension_Supported (const char * extension) \brief test if this GLExtension is support \param extension the target GLExtension */ gboolean is_GLExtension_Supported (const char * extension) { int i, j; i = j = 0; glGetIntegerv (GL_NUM_EXTENSIONS, & i); for (j=0; j steps; l++) { x = 0.0; y = 0.0; z = 0.0; for (i = 0; i < this_proj -> natomes; i++) { x += this_proj -> atoms[l][i].x; y += this_proj -> atoms[l][i].y; z += this_proj -> atoms[l][i].z; } x /= this_proj -> natomes; y /= this_proj -> natomes; z /= this_proj -> natomes; for (i = 0; i < this_proj -> natomes; i++) { this_proj -> atoms[l][i].x -= x; this_proj -> atoms[l][i].y -= y; this_proj -> atoms[l][i].z -= z; } for (i=0; i modelgl -> volume_box[i]) { if (this_proj -> modelgl -> volume_box[i][l]) { this_proj -> modelgl -> volume_box[i][l][6] -= x; this_proj -> modelgl -> volume_box[i][l][7] -= y; this_proj -> modelgl -> volume_box[i][l][8] -= z; rot = m4_rotation_anti_xyz (this_proj -> modelgl -> volume_box[i][l][3], this_proj -> modelgl -> volume_box[i][l][4], this_proj -> modelgl -> volume_box[i][l][5]); bini = m4_mul_coord (rot, vec3(this_proj -> modelgl -> volume_box[i][l][6], this_proj -> modelgl -> volume_box[i][l][7], this_proj -> modelgl -> volume_box[i][l][8])); bini.x -= x; bini.y -= y; bini.z -= z; rot = m4_rotation_xyz (this_proj -> modelgl -> volume_box[i][l][3], this_proj -> modelgl -> volume_box[i][l][4], this_proj -> modelgl -> volume_box[i][l][5]); bend = m4_mul_coord (rot, bini); this_proj -> modelgl -> volume_box[i][l][6] = bend.x; this_proj -> modelgl -> volume_box[i][l][7] = bend.y; this_proj -> modelgl -> volume_box[i][l][8] = bend.z; } } if (this_proj -> modelgl -> frag_box[i]) { if (this_proj -> modelgl -> frag_box[i][l]) { for (j=0; j coord -> totcoord[2]; j++) { rot = m4_rotation_anti_xyz (this_proj -> modelgl -> frag_box[i][l][j][3], this_proj -> modelgl -> frag_box[i][l][j][4], this_proj -> modelgl -> frag_box[i][l][j][5]); bini = m4_mul_coord (rot, vec3(this_proj -> modelgl -> frag_box[i][l][j][6], this_proj -> modelgl -> frag_box[i][l][j][7], this_proj -> modelgl -> frag_box[i][l][j][8])); bini.x -= x; bini.y -= y; bini.z -= z; rot = m4_rotation_xyz (this_proj -> modelgl -> frag_box[i][l][j][3], this_proj -> modelgl -> frag_box[i][l][j][4], this_proj -> modelgl -> frag_box[i][l][j][5]); bend = m4_mul_coord (rot, bini); this_proj -> modelgl -> frag_box[i][l][j][6] = bend.x; this_proj -> modelgl -> frag_box[i][l][j][7] = bend.y; this_proj -> modelgl -> frag_box[i][l][j][8] = bend.z; } } } } } this_proj -> cell.crystal = FALSE; } /*! \fn void center_this_molecule (glwin * view) \brief center atomic coordinates around (0,0,0) and refresh shaders \param view the target glwin */ void center_this_molecule (glwin * view) { center_molecule (get_project_by_id(view -> proj)); view -> insert_coords = vec3(0.0, 0.0, 0.0); int shaders[6] = {ATOMS, BONDS, POLYS, RINGS, SELEC, VOLMS}; re_create_md_shaders (6, shaders, get_project_by_id(view -> proj)); view -> create_shaders[PICKS] = TRUE; view -> create_shaders[MDBOX] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; update (view); } /*! \fn void free_glwin_spec_data (project * this_proj, int spec) \brief free the memory used by the chemical species related data in a glwin data structure \param this_proj the target project \param spec the number of chemical species */ void free_glwin_spec_data (project * this_proj, int spec) { int i, j, k; for (i=0; i modelgl -> colorp[i] != NULL) { g_free (this_proj -> modelgl -> colorp[i]); this_proj -> modelgl -> colorp[i] = NULL; } } for (i=0; i<10; i++) { k = (i > 2) ? 1 : spec; if (i < 2 || i > 3) { for (j=0; j coord -> geolist[i][j] != NULL) { g_free (this_proj -> coord -> geolist[i][j]); this_proj -> coord -> geolist[i][j] = NULL; } } this_proj -> coord -> geolist[i]=NULL; } } for (i=0; i coord -> partial_geo[i] != NULL) g_free (this_proj -> coord -> partial_geo[i]); this_proj -> coord -> partial_geo[i] = NULL; } g_free (this_proj -> coord -> partial_geo); this_proj -> coord -> partial_geo = NULL; } /*! \fn void glwin_init_spec_data (project * this_proj, int nspec) \brief initialize the glwin chemical species related pointers \param this_proj the target project \param nspec the number of chemical species */ void glwin_init_spec_data (project * this_proj, int nspec) { int i, j, k; for (i=0; i modelgl -> colorp[i] = NULL; this_proj -> modelgl -> colorp[i] = g_malloc0(nspec*2*sizeof*this_proj -> modelgl -> colorp[i]); for (j=0; j modelgl -> colorp[i][j].a = this_proj -> id; this_proj -> modelgl -> colorp[i][j].b = i; this_proj -> modelgl -> colorp[i][j].c = j; } } #ifdef GTK3 // GTK3 Menu Action To Check int l; #endif for (i=0; i<10; i++) { k = (i > 2) ? 1 : nspec; #ifdef GTK3 // GTK3 Menu Action To Check for (j = 0; j < 2; j++) { this_proj -> modelgl -> oglmv[j][i] = NULL; this_proj -> modelgl -> oglmv[j][i] = g_malloc0(k*sizeof*this_proj -> modelgl -> oglmv[j][i]); if (i < 9) { this_proj -> modelgl -> oglmc[j][i] = NULL; this_proj -> modelgl -> oglmc[j][i] = g_malloc0(k*sizeof*this_proj -> modelgl -> oglmc[j][i]); } if (i < 2 || (i > 3 && i < 9)) { this_proj -> modelgl -> oglmpv[j][i] = NULL; this_proj -> modelgl -> oglmpv[j][i] = g_malloc0(k*sizeof*this_proj -> modelgl -> oglmpv[j][i]); } for (l=0; l modelgl -> oglmv[j][i][l] = NULL; if (i < 9) this_proj -> modelgl -> oglmc[j][i][l] = NULL; if (i < 2 || (i > 3 && i < 9)) this_proj -> modelgl -> oglmpv[j][i][l] = NULL; } } #endif if (i < 2 || i > 3) { this_proj -> coord -> geolist[i] = g_malloc0(k*sizeof*this_proj -> coord -> geolist[i]); for (j=0; j coord -> geolist[i][j] = NULL; } } } this_proj -> coord -> partial_geo = g_malloc0(nspec*sizeof*this_proj -> coord -> partial_geo); for (i=0; i coord -> partial_geo[i] = NULL; } /*! \fn void init_glwin (glwin * view) \brief initialize a glwin pointer \param view the target glwin */ void init_glwin (glwin * view) { project * this_proj = get_project_by_id(view -> proj); // Have to be the active project view -> anim = g_malloc0(sizeof*view -> anim); snapshot * snap = g_malloc0(sizeof*snap); view -> anim -> first = snap; view -> anim -> last = snap; init_img (this_proj); init_camera (this_proj); view -> mouseStatus = RELEASED; view -> mouseAction = ANALYZE; // Warning, if not centered at start-up, dmtx could fail if (! this_proj -> cell.crystal) center_molecule (this_proj); view -> bonds = allocdint (this_proj -> steps, 2); view -> bondid = g_malloc0(this_proj -> steps*sizeof*view -> bondid); view -> clones = g_malloc0(this_proj -> steps*sizeof*view -> clones); int i; for (i=0; i < this_proj -> steps; i++) { view -> bondid[i] = g_malloc0(2*sizeof*view -> bondid[i]); view -> clones[i] = NULL; } // Data that depends on the number of chemical species glwin_init_spec_data (this_proj, (this_proj -> nspec) ? this_proj -> nspec : 1); view -> stop = TRUE; view -> speed = 100; view -> zoom_factor = ZOOM_FACTOR; view -> mode = ANALYZE; view -> selection_mode = ATOMS; // On normal motion and copy rebuild: view -> rebuild[0][0] = view -> rebuild[1][0] = (this_proj -> steps > 1) ? FALSE : TRUE; view -> init = TRUE; init_opengl (); init_shaders (view); this_proj -> initgl = TRUE; #ifdef GTK4 if (view -> win) update_menu_bar (view); #endif } /*! \fn GError * init_gtk_gl_area (GtkGLArea * area) \brief initialize a GtkGLArea, return error if any \param area the GtkGLArea point to initialize */ GError * init_gtk_gl_area (GtkGLArea * area) { if (area == NULL) { area = (GtkGLArea *)gtk_gl_area_new (); } else { gtk_gl_area_make_current (area); } gtk_gl_area_set_has_depth_buffer (area, TRUE); gtk_gl_area_set_has_stencil_buffer (area, TRUE); return gtk_gl_area_get_error (area); } #ifdef GTKGLAREA /*! \fn G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data) \brief realize event for a GtkGLArea \param area the GtkGLArea sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data) #else /*! \fn G_MODULE_EXPORT void on_realize (GtkWidget * widg, gpointer data) \brief realize event for the OpenGL widget \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_realize (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; GError * err; #ifdef GTKGLAREA err = init_gtk_gl_area (area); if (err == NULL) { #else GdkWindow * xwin = gtk_widget_get_window (view -> plot); GLint attr_list[] = {GLX_DOUBLEBUFFER, GLX_RGBA, GLX_DEPTH_SIZE, 1, GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1, GLX_BLUE_SIZE, 1, None}; XVisualInfo * visualinfo = glXChooseVisual (GDK_WINDOW_XDISPLAY (xwin), gdk_screen_get_number (gdk_window_get_screen (xwin)), attr_list); view -> glcontext = glXCreateContext (GDK_WINDOW_XDISPLAY (xwin), visualinfo, NULL, TRUE); g_free (visualinfo); if (glXMakeCurrent (GDK_WINDOW_XDISPLAY (xwin), GDK_WINDOW_XID (xwin), view -> glcontext)) { #endif init_glwin (view); } else { gchar * errm = g_strdup_printf (_("Impossible to initialize the OpenGL 3D rendering ! \n %s\n"), err -> message); g_error_free (err); show_error (errm, 0, MainWindow); g_free (errm); } } #ifdef GTKGLAREA /*! \fn G_MODULE_EXPORT gboolean on_expose (GtkGLArea * area, GdkGLContext * context, gpointer data) \brief OpenGL rendering widget expose event callback GTK4 \param area the GtkGLArea sending the signal \param context the associated GdkGLContext \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_expose (GtkGLArea * area, GdkGLContext * context, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_expose (GtkWidget * widg, cairo_t * cr, gpointer data) \brief OpenGL rendering widget expose event callback GTK3 \param widg the GtkWidget sending the signal \param cr the cairo drawing context to use for the draw \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_expose (GtkWidget * widg, cairo_t * cr, gpointer data) #endif { glwin * view = (glwin *) data; #ifdef GTK3 GdkEvent * event = gtk_get_current_event (); if (event && event -> type == GDK_EXPOSE && ((GdkEventExpose *)event) -> count > 0) return TRUE; #endif #ifdef GTKGLAREA render_this_gl_window (view, area); #else render_this_gl_window (view, widg, 0); #endif return TRUE; } atomes_1.3.1/src/fortran/0000775000175000017500000000000015212624223014747 5ustar lerouxlerouxatomes_1.3.1/src/fortran/allocmsd.F900000664000175000017500000000644715212624223017040 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file allocmsd.F90 !! @short Memory allocation for MSD analysis !! @author Sébastien Le Roux LOGICAL FUNCTION ALLOCMSD() USE PARAMETERS if (allocated(D2i)) deallocate(D2i) allocate(D2i(NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: D2i"//CHAR(0)) ALLOCMSD = .false. goto 001 endif if (allocated(D2iNAC)) deallocate(D2iNAC) allocate(D2iNAC(NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: D2iNAC"//CHAR(0)) ALLOCMSD = .false. goto 001 endif if (allocated(D2dir)) deallocate(D2dir) allocate(D2dir(NSP,6,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: D2dir"//CHAR(0)) ALLOCMSD = .false. goto 001 endif if (allocated(D2dirNAC)) deallocate(D2dirNAC) allocate(D2dirNAC(NSP,6,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: D2dir"//CHAR(0)) ALLOCMSD = .false. goto 001 endif if (allocated(Dcte)) deallocate(Dcte) allocate(Dcte(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: Dcte"//CHAR(0)) ALLOCMSD = .false. goto 001 endif if (allocated(COR)) deallocate(COR) allocate(COR(3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: COR"//CHAR(0)) ALLOCMSD = .false. goto 001 endif if (allocated(DRIFT)) deallocate(DRIFT) allocate(DRIFT(3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: DRIFT"//CHAR(0)) ALLOCMSD = .false. goto 001 endif D2i(:,:)=0.0d0 D2iNAC(:,:)=0.0d0 D2dir(:,:,:) =0.0d0 D2dirNAC(:,:,:) =0.0d0 Dcte(:)=0.0d0 COR(:,:)=0.0d0 DRIFT(:,:)=0.0d0 ALLOCMSD=.true. 001 continue END FUNCTION SUBROUTINE DEALLOCMSD ! ! Memory allocation for bond properties ! USE PARAMETERS if (allocated(D2i)) deallocate(D2i) if (allocated(D2iNAC)) deallocate(D2iNAC) if (allocated(D2dir)) deallocate(D2dir) if (allocated(D2dirNAC)) deallocate(D2dirNAC) if (allocated(Dcte)) deallocate(Dcte) if (allocated(COR)) deallocate(COR) if (allocated(DRIFT)) deallocate(DRIFT) END SUBROUTINE atomes_1.3.1/src/fortran/utils.F900000664000175000017500000004553315212624223016401 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file utils.F90 !! @short Global function declarations !! @author Sébastien Le Roux ! ! This file contains various tools ! !******************************************************************** ! ! Transformer un entier en chaine de charactères ! Transform an integer into character ! SUBROUTINE CHARINT(Word, Num) IMPLICIT NONE INTEGER :: lc INTEGER, INTENT(IN) :: Num CHARACTER (LEN=16) :: Pseudo CHARACTER (LEN=15), INTENT(INOUT) :: Word Word=' ' write (Word, *) Num lc=1 do while (Word(1:lc) .eq. ' ') lc= lc+1 enddo Pseudo=Word Word=' ' write (Word, *) Pseudo(lc:LEN_TRIM(Pseudo)) END SUBROUTINE SUBROUTINE CREAT_RING (RING_INIT, ELEM_CR) USE PARAMETERS IMPLICIT NONE TYPE (RING), INTENT(INOUT) :: RING_INIT INTEGER, INTENT(IN) :: ELEM_CR RING_INIT%SPEC = 0 RING_INIT%ATOM = ELEM_CR nullify(RING_INIT%PAST) nullify(RING_INIT%NEXT) END SUBROUTINE SUBROUTINE DO_RING (THE_RING, ELEM_DO) USE PARAMETERS IMPLICIT NONE TYPE (RING), POINTER, INTENT(INOUT) :: THE_RING !INTEGER, DIMENSION(NA), INTENT(INOUT) :: RPT INTEGER, INTENT(IN) :: ELEM_DO TYPE (RING), POINTER :: NEW allocate(NEW, STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: DO_RING"//CHAR(0), "Pointer: NEW"//CHAR(0)) ALC=.true. goto 001 endif nullify(NEW%NEXT) nullify(NEW%PAST) THE_RING%NEXT => NEW NEW%PAST => THE_RING NEW%ATOM = ELEM_DO NEW%SPEC = THE_RING%SPEC+1 THE_RING => NEW !if (RPT(THE_RING%ATOM) .eq. 0) then ! RPT(THE_RING%ATOM) = 1 !endif 001 continue END SUBROUTINE !******************************************************************** ! ! Calculer une distance ! Compute a distance including PBC ! SUBROUTINE CALCRIJ(AT1, AT2, STEP_1, STEP_2, SID) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID INTEGER :: R1 DOUBLE PRECISION, DIMENSION(3) :: COORDA, COORDB DOUBLE PRECISION, DIMENSION(3) :: Aij, Bij, Nij if (STEP_1 .eq. -2) then do R1=1, 3 COORDA(R1) = NFULLPOS(AT1,R1,STEP_2) COORDB(R1) = NFULLPOS(AT2,R1,STEP_2) enddo elseif (STEP_1 .eq. -1) then ! Prepos for MSD do R1=1, 3 COORDA(R1) = POB(AT2,R1) COORDB(R1) = POA(AT1,R1) enddo else ! Standard inter-atomic distance do R1=1, 3 COORDA(R1) = FULLPOS(AT1,R1,STEP_1) COORDB(R1) = FULLPOS(AT2,R1,STEP_2) enddo endif do R1=1, 3 Rij(R1) = COORDA(R1) - COORDB(R1) enddo if (.not.PBC) goto 001 ! Test if the simulation box is cubic-like symmetric ! For that we check the lattice angles if (THE_BOX(SID)%GLASS) then do R1=1, 3 Rij(R1)=Rij(R1) - ANint(Rij(R1)/(THE_BOX(SID)%modv(R1)))*(THE_BOX(SID)%modv(R1)) enddo else Aij = MATMUL(COORDA,THE_BOX(SID)%carttofrac) Bij = MATMUL(COORDB,THE_BOX(SID)%carttofrac) do R1=1,3 Nij(R1) = Aij(R1) - Bij(R1) Nij(R1) = Nij(R1) - AnINT(Nij(R1)) enddo Rij = MATMUL(Nij,THE_BOX(SID)%fractocart) endif 001 continue Dij=0.0d0 do R1=1, 3 Dij=Dij+Rij(R1)**2 enddo END SUBROUTINE DOUBLE PRECISION FUNCTION CALCDIJ(R12, AT1, AT2, STEP_1, STEP_2, SID) USE PARAMETERS IMPLICIT NONE DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID INTEGER :: R1 DOUBLE PRECISION, DIMENSION(3) :: COORDA, COORDB DOUBLE PRECISION, DIMENSION(3) :: Aij, Bij, Nij if (STEP_1 .eq. -2) then do R1=1, 3 COORDA(R1) = NFULLPOS(AT1,R1,STEP_2) COORDB(R1) = NFULLPOS(AT2,R1,STEP_2) enddo elseif (STEP_1 .eq. -1) then ! Prepos for MSD do R1=1, 3 COORDA(R1) = POB(AT2,R1) COORDB(R1) = POA(AT1,R1) enddo else ! Standard inter-atomic distance do R1=1, 3 COORDA(R1) = FULLPOS(AT1,R1,STEP_1) COORDB(R1) = FULLPOS(AT2,R1,STEP_2) enddo endif do R1=1, 3 R12(R1) = COORDA(R1) - COORDB(R1) enddo if (.not.PBC) goto 001 ! Test if the simulation box is cubic-like symetric ! For that we check the lattice angles if (THE_BOX(SID)%GLASS) then do R1=1, 3 R12(R1)=R12(R1) - ANint(R12(R1)/(THE_BOX(SID)%modv(R1)))*(THE_BOX(SID)%modv(R1)) enddo else Aij = MATMUL(COORDA,THE_BOX(SID)%carttofrac) Bij = MATMUL(COORDB,THE_BOX(SID)%carttofrac) do R1=1,3 Nij(R1) = Aij(R1) - Bij(R1) Nij(R1) = Nij(R1) - AnINT(Nij(R1)) enddo R12 = MATMUL(Nij,THE_BOX(SID)%fractocart) endif 001 continue CALCDIJ = 0.0d0 do R1=1, 3 CALCDIJ = CALCDIJ + R12(R1)**2 enddo END FUNCTION !******************************************************************** ! ! Home made arcosine calculation ! DOUBLE PRECISION FUNCTION SACOS (ANG) USE PARAMETERS DOUBLE PRECISION, INTENT(IN) :: ANG DOUBLE PRECISION :: SCOS if (ANG .lt. -1.0d0) then SCOS = -2.0d0 - ANG else if (ANG .gt. 1.0d0) then SCOS = 2.0d0 - ANG else SCOS = ANG endif SACOS = DACOS(SCOS)*180.d0/PI END FUNCTION !******************************************************************** ! ! Calculer un angle direct ! Compute a direct angle ! DOUBLE PRECISION FUNCTION ANGIJK(ATG1, ATG2, ATG3, ASTEP) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: ATG1, ATG2, ATG3, ASTEP INTEGER :: AG1, AG2 DOUBLE PRECISION :: DAA, DBB, VANG DOUBLE PRECISION, DIMENSION(3) :: RAA, RBB INTERFACE DOUBLE PRECISION FUNCTION CALCDIJ(R12, AT1, AT2, STEP_1, STEP_2, SID) DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION DOUBLE PRECISION FUNCTION SACOS (ANG) DOUBLE PRECISION, INTENT(IN) :: ANG END FUNCTION END INTERFACE if (NCELLS .gt. 1) then AG2 = ASTEP else AG2 = 1 endif DAA = CALCDIJ(RAA, ATG2,ATG1,ASTEP,ASTEP,AG2) DAA=sqrt(DAA) DBB = CALCDIJ(RBB, ATG2,ATG3,ASTEP,ASTEP,AG2) VANG=0.0d0 do AG1=1, 3 VANG=VANG+RAA(AG1)*RBB(AG1) enddo DBB=sqrt(DBB) ANGIJK = SACOS(VANG/(DAA*DBB)) END FUNCTION !******************************************************************** ! ! Calculer un angle dièdre ! Compute a dihedral angle ! DOUBLE PRECISION FUNCTION DIEDRE(DG1, DG2, DG3, DG4, DSTEP) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: DG1, DG2, DG3, DG4, DSTEP INTEGER :: AG, AH DOUBLE PRECISION :: DH1, DH2, DH3, VDI DOUBLE PRECISION, DIMENSION(3) :: D12, D23, D34 DOUBLE PRECISION, DIMENSION(3) :: VH1, VH2 INTERFACE DOUBLE PRECISION FUNCTION CALCDIJ(R12, AT1, AT2, STEP_1, STEP_2, SID) DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION DOUBLE PRECISION FUNCTION SACOS (ANG) DOUBLE PRECISION, INTENT(IN) :: ANG END FUNCTION END INTERFACE if (NCELLS .gt. 1) then AH = DSTEP else AH = 1 endif DH1 = CALCDIJ(D12,DG1,DG2,DSTEP,DSTEP,AH) DH2 = CALCDIJ(D23,DG2,DG3,DSTEP,DSTEP,AH) DH3 = CALCDIJ(D34,DG3,DG4,DSTEP,DSTEP,AH) VH1(1) = D12(2)*D23(3) - D12(3)*D23(2) VH1(2) = D12(3)*D23(1) - D12(1)*D23(3) VH1(3) = D12(1)*D23(2) - D12(2)*D23(1) VH2(1) = D23(2)*D34(3) - D23(3)*D34(2) VH2(2) = D23(3)*D34(1) - D23(1)*D34(3) VH2(3) = D23(1)*D34(2) - D23(2)*D34(1) DH1=0.0d0 DH2=0.0d0 do AG=1, 3 DH1 = DH1 + VH1(AG)*VH1(AG) DH2 = DH2 + VH2(AG)*VH2(AG) enddo DH1=sqrt(DH1) DH2=sqrt(DH2) if (DH1.eq.0.0d0 .or. DH2.eq.0.0d0) then DIEDRE = 0.0d0 else VDI = 0.0d0 do AG=1, 3 VDI=VDI+VH1(AG)*VH2(AG) enddo VDI = VDI/(DH1*DH2) DIEDRE = SACOS (VDI) endif END FUNCTION ! Cas particulier lors des statistiques d'anneaux SUBROUTINE ECT_TYPE_RINGS(MOYENNE, TABLEAU, LONGTE, LREPRES, EC_TYPE) INTEGER :: pose INTEGER, INTENT(IN) :: LONGTE, LREPRES DOUBLE PRECISION, INTENT(IN) :: MOYENNE DOUBLE PRECISION, INTENT(IN), DIMENSION(LONGTE) :: TABLEAU DOUBLE PRECISION, INTENT(INOUT) :: EC_TYPE EC_TYPE=0.0d0 do pose=1, LONGTE if (TABLEAU(pose) .ne. 0.0) EC_TYPE= EC_TYPE + (TABLEAU(pose) - MOYENNE)**2 enddo EC_TYPE=sqrt(EC_TYPE/dble(LREPRES-1)) END SUBROUTINE !******************************************************************** ! ! Générateur de nombre aléatoire ! Numerical recipes random number generator 3 ! DOUBLE PRECISION FUNCTION RAN3 (idnum) INTEGER, INTENT(IN) :: idnum INTEGER :: idum INTEGER :: MBIG,MSEED,MZ INTEGER :: iii,iff,ii,inext,inextp,k INTEGER :: mj,mk,ma(55) DOUBLE PRECISION :: FAC PARAMETER (MBIG=1000000000,MSEED=161803398,MZ=0,FAC=1./MBIG) SAVE iff,inext,inextp,ma DATA iff /0/ idum = idnum if(idum.lt.0 .or. iff.eq.0)then iff=1 mj=MSEED-iabs(idum) mj=mod(mj,MBIG) ma(55)=mj mk=1 do 11 iii=1,54 ii=mod(21*iii,55) ma(ii)=mk mk=mj-mk if(mk.lt.MZ)mk=mk+MBIG mj=ma(ii) 11 continue do 13 k=1,4 do 12 iii=1,55 ma(iii)=ma(iii)-ma(1+mod(iii+30,55)) if(ma(iii).lt.MZ)ma(iii)=ma(iii)+MBIG 12 continue 13 continue inext=0 inextp=31 idum=1 endif inext=inext+1 if(inext.eq.56)inext=1 inextp=inextp+1 if(inextp.eq.56)inextp=1 mj=ma(inext)-ma(inextp) if(mj.lt.MZ)mj=mj+MBIG ma(inext)=mj RAN3=mj*FAC END FUNCTION REAL (KIND=c_double) FUNCTION random3(seed) BIND (C,NAME='random3_') USE, INTRINSIC :: iso_c_binding INTEGER (KIND=c_int), INTENT(IN) :: seed INTERFACE DOUBLE PRECISION FUNCTION RAN3 (idnum) INTEGER, INTENT(IN) :: idnum END FUNCTION END INTERFACE random3 = RAN3(seed) END FUNCTION !******************************************************************** ! ! Calculer la somme d'une série de valeurs ! Compute sum of a list of values ! SUBROUTINE SOMME(TABS, LONGTS, SOMTAB) INTEGER :: posm INTEGER, INTENT(IN) :: LONGTS DOUBLE PRECISION, INTENT(INOUT) :: SOMTAB DOUBLE PRECISION, INTENT(IN), DIMENSION(LONGTS) :: TABS SOMTAB=0.0d0 do posm=1, LONGTS SOMTAB=SOMTAB+TABS(posm) enddo END SUBROUTINE !******************************************************************** ! ! Calculer la moyenne d'une série de valeurs ! Compute the average of list of values ! SUBROUTINE MOYENNE(TABLEAU, LONGTM, MOYTAB) INTEGER :: posm INTEGER, INTENT(IN) :: LONGTM DOUBLE PRECISION, INTENT(INOUT) :: MOYTAB DOUBLE PRECISION, INTENT(IN), DIMENSION(LONGTM) :: TABLEAU MOYTAB=0.0d0 do posm=1, LONGTM MOYTAB=MOYTAB+TABLEAU(posm) enddo MOYTAB=MOYTAB/dble(LONGTM) END SUBROUTINE !******************************************************************** ! ! Calculer l'écart type sur une série de valeurs ! Compute the standard error on a list of values ! SUBROUTINE ECT_TYPE(MOYENNE, TABLEAU, LONGTE, EC_TYPE) INTEGER :: pose INTEGER, INTENT(IN) :: LONGTE DOUBLE PRECISION, INTENT(IN) :: MOYENNE DOUBLE PRECISION, INTENT(IN), DIMENSION(LONGTE) :: TABLEAU DOUBLE PRECISION, INTENT(INOUT) :: EC_TYPE EC_TYPE=0.0d0 do pose=1, LONGTE EC_TYPE= EC_TYPE + (TABLEAU(pose) - MOYENNE)**2 enddo EC_TYPE=sqrt(EC_TYPE/dble(LONGTE-1)) END SUBROUTINE !******************************************************************** ! ! Trier une liste d'entiers ! Sort a list of integers ! This is the most simple sort ! For an improved routine (huge data to sort) see SORT3 in this file ! SUBROUTINE TRI(TAB, DIMTAB) IMPLICIT NONE INTEGER, INTENT(IN) :: DIMTAB INTEGER, DIMENSION(DIMTAB), INTENT(INOUT) :: TAB INTEGER :: SORTX, SORTY, VALUE do SORTX=2, DIMTAB VALUE=TAB(SORTX) do SORTY=SORTX-1, 1, -1 if (TAB(SORTY) .le. VALUE) exit TAB(SORTY+1)=TAB(SORTY) enddo TAB(SORTY+1)=VALUE enddo END SUBROUTINE !******************************************************************** ! ! Lisser une courbe / To smooth a curve ! LOGICAL FUNCTION SMOOTH (TABTOLISS, GTOLISS, DIMTOLISS, SIGMALISS) ! Lissage selon une gaussienne ! Gaussian smoothing - zero based curve IMPLICIT NONE INTEGER, INTENT(IN) :: DIMTOLISS DOUBLE PRECISION, INTENT(IN) :: SIGMALISS DOUBLE PRECISION, INTENT(IN), DIMENSION(DIMTOLISS) :: GTOLISS DOUBLE PRECISION, INTENT(INOUT), DIMENSION(DIMTOLISS) :: TABTOLISS INTEGER :: INDA, INDB, ERR DOUBLE PRECISION, PARAMETER :: PI=acos(-1.0) DOUBLE PRECISION :: DQ, DQ2 DOUBLE PRECISION :: FACTLISS DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: NEWTAB allocate(NEWTAB(DIMTOLISS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: SMOOTH"//CHAR(0), "Table: NEWTAB"//CHAR(0)) SMOOTH=.false. goto 001 endif do INDA=1, DIMTOLISS NEWTAB(INDA)=0.0d0 enddo FACTLISS=1.0d0/(SIGMALISS*sqrt(2.0d0*PI)) do INDA=1, DIMTOLISS do INDB=1, DIMTOLISS if(INDB .eq. 1)then DQ= GTOLISS(2)-GTOLISS(1) elseif (INDB .eq. DIMTOLISS) then DQ = GTOLISS(DIMTOLISS)- GTOLISS(DIMTOLISS-1) else DQ = (GTOLISS(INDB+1)- GTOLISS(INDB-1))*0.5 endif DQ2=(GTOLISS(INDA)-GTOLISS(INDB))*(GTOLISS(INDA)-GTOLISS(INDB)) NEWTAB(INDA) = NEWTAB(INDA) + exp(-DQ2/(2.0d0*SIGMALISS*SIGMALISS))*TABTOLISS(INDB)*DQ enddo NEWTAB(INDA)=FACTLISS*NEWTAB(INDA) enddo do INDA=1, DIMTOLISS TABTOLISS(INDA)=NEWTAB(INDA) enddo SMOOTH=.true. 001 continue if (allocated(NEWTAB)) deallocate(NEWTAB) END FUNCTION !******************************************************************** ! ! Sort routine adapted from: ! Numerical sort array 3 - Quicksort INTEGER ! SUBROUTINE SORT3(arr, ndum) INTEGER, INTENT(IN) :: ndum INTEGER, DIMENSION(ndum) :: index INTEGER, DIMENSION(ndum), INTENT(INOUT) :: arr call indexx_i(arr, index, ndum) arr=arr(index) END SUBROUTINE SUBROUTINE indexx_i(arr, index, n) IMPLICIT NONE INTEGER, PARAMETER :: NPAR_ARTH=16,NPAR2_ARTH=8 INTEGER, DIMENSION(n), INTENT(INOUT) :: index INTEGER, PARAMETER :: NN=15, NSTACK=50 INTEGER, INTENT(IN) :: n INTEGER :: k,i,j,indext,jstack,l,r INTEGER, DIMENSION(NSTACK) :: istack INTEGER :: a INTEGER, DIMENSION(n), INTENT(IN) :: arr call arth(1,1,n,index) jstack=0 l=1 r=n do if (r-l < NN) then do j=l+1,r indext=index(j) a=arr(indext) do i=j-1,l,-1 if (arr(index(i)) <= a) exit index(i+1)=index(i) end do index(i+1)=indext end do if (jstack .eq. 0) RETURN r=istack(jstack) l=istack(jstack-1) jstack=jstack-2 else k=(l+r)/2 call swap(index(k),index(l+1)) call icomp_xchg(index(l),index(r)) call icomp_xchg(index(l+1),index(r)) call icomp_xchg(index(l),index(l+1)) i=l+1 j=r indext=index(l+1) a=arr(indext) do do i=i+1 if (arr(index(i)) >= a) exit end do do j=j-1 if (arr(index(j)) <= a) exit end do if (j < i) exit call swap(index(i),index(j)) end do index(l+1)=index(j) index(j)=indext jstack=jstack+2 if (jstack > NSTACK) write (6, *) 'Sort3 error: indexx: NSTACK too small' if (r-i+1 >= j-l) then istack(jstack)=r istack(jstack-1)=i r=j-1 else istack(jstack)=j-1 istack(jstack-1)=l l=i end if end if end do CONTAINS !BL SUBROUTINE icomp_xchg(i, j) INTEGER, INTENT(INOUT) :: i,j INTEGER :: swp if (arr(j) < arr(i)) then swp=i i=j j=swp end if END SUBROUTINE icomp_xchg SUBROUTINE arth(first, increment, m, arth_i) INTEGER, INTENT(IN) :: first,increment,m INTEGER, DIMENSION(m) :: arth_i INTEGER :: k,k2,temp if (m > 0) arth_i(1)=first if (m <= NPAR_ARTH) then do k=2,m arth_i(k)=arth_i(k-1)+increment end do else do k=2,NPAR2_ARTH arth_i(k)=arth_i(k-1)+increment end do temp=increment*NPAR2_ARTH k=NPAR2_ARTH do if (k >= m) exit k2=k+k arth_i(k+1:min(k2,m))=temp+arth_i(1:min(k,m-k)) temp=temp+temp k=k2 end do end if END SUBROUTINE SUBROUTINE swap(a,b) INTEGER, INTENT(INOUT) :: a,b INTEGER :: dum dum=a a=b b=dum END SUBROUTINE swap END SUBROUTINE indexx_i !******************************************************************** !******************************************************************** ! ! Sort routine adapted from: ! Numerical sort array 3 - Quicksort DOUBLE PRECISION ! SUBROUTINE SORT3_DP (arr, ndum) INTEGER, INTENT(IN) :: ndum INTEGER, DIMENSION(ndum) :: index DOUBLE PRECISION, DIMENSION(ndum), INTENT(INOUT) :: arr call indexx_dp (arr, index, ndum) arr=arr(index) END SUBROUTINE SUBROUTINE indexx_dp (arr, index, n) IMPLICIT NONE INTEGER, PARAMETER :: NPAR_ARTH=16,NPAR2_ARTH=8 INTEGER, DIMENSION(n), INTENT(INOUT) :: index INTEGER, PARAMETER :: NN=15, NSTACK=50 INTEGER, INTENT(IN) :: n INTEGER :: k,i,j,indext,jstack,l,r INTEGER, DIMENSION(NSTACK) :: istack DOUBLE PRECISION :: a DOUBLE PRECISION, DIMENSION(n), INTENT(IN) :: arr call arth(1,1,n,index) jstack=0 l=1 r=n do if (r-l < NN) then do j=l+1,r indext=index(j) a=arr(indext) do i=j-1,l,-1 if (arr(index(i)) <= a) exit index(i+1)=index(i) end do index(i+1)=indext end do if (jstack .eq. 0) RETURN r=istack(jstack) l=istack(jstack-1) jstack=jstack-2 else k=(l+r)/2 call swap(index(k),index(l+1)) call icomp_xchg(index(l),index(r)) call icomp_xchg(index(l+1),index(r)) call icomp_xchg(index(l),index(l+1)) i=l+1 j=r indext=index(l+1) a=arr(indext) do do i=i+1 if (arr(index(i)) >= a) exit end do do j=j-1 if (arr(index(j)) <= a) exit end do if (j < i) exit call swap(index(i),index(j)) end do index(l+1)=index(j) index(j)=indext jstack=jstack+2 if (jstack > NSTACK) write (6, *) 'Sort3 error: indexx: NSTACK too small' if (r-i+1 >= j-l) then istack(jstack)=r istack(jstack-1)=i r=j-1 else istack(jstack)=j-1 istack(jstack-1)=l l=i end if end if end do CONTAINS !BL SUBROUTINE icomp_xchg(i, j) INTEGER, INTENT(INOUT) :: i,j INTEGER :: swp if (arr(j) < arr(i)) then swp=i i=j j=swp end if END SUBROUTINE icomp_xchg SUBROUTINE arth(first, increment, m, arth_i) INTEGER, INTENT(IN) :: first,increment,m INTEGER, DIMENSION(m) :: arth_i INTEGER :: k,k2,temp if (m > 0) arth_i(1)=first if (m <= NPAR_ARTH) then do k=2,m arth_i(k)=arth_i(k-1)+increment end do else do k=2,NPAR2_ARTH arth_i(k)=arth_i(k-1)+increment end do temp=increment*NPAR2_ARTH k=NPAR2_ARTH do if (k >= m) exit k2=k+k arth_i(k+1:min(k2,m))=temp+arth_i(1:min(k,m-k)) temp=temp+temp k=k2 end do end if END SUBROUTINE SUBROUTINE swap(a,b) INTEGER, INTENT(INOUT) :: a,b INTEGER :: dum dum=a a=b b=dum END SUBROUTINE swap END SUBROUTINE indexx_dp !******************************************************************** atomes_1.3.1/src/fortran/spherical.F900000664000175000017500000002354215212624223017207 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file spherical.F90 !! @short Spherical harmonics analysis !! @author Sébastien Le Roux ! Bond order parameter from spherical harmonics INTEGER (KIND=c_int) FUNCTION sphericals (MAXL, SPC, GEO, IDC, COOSPH) USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: MAXL, SPC, GEO, IDC INTEGER (KIND=c_int), DIMENSION(NSP), INTENT(IN) :: COOSPH INTEGER :: NSPSH INTEGER, DIMENSION(:), ALLOCATABLE :: NEIGH LOGICAL :: SPHRUN DOUBLE PRECISION :: XC, YC, ZC DOUBLE PRECISION :: SR, ST, SP DOUBLE PRECISION, DIMENSION(0:MAXL,-MAXL:MAXL) :: HSP ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: THSP DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: ATHSP DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: SPTSHP DOUBLE PRECISION, DIMENSION(0:MAXL) :: SPHA #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE DOUBLE PRECISION FUNCTION PLEGENDRE (l, m, x) INTEGER, INTENT(IN) :: l, m DOUBLE PRECISION, INTENT(IN) :: x END FUNCTION DOUBLE PRECISION FUNCTION CALCDIJ (R12, AT1, AT2, STEP_1, STEP_2, SID) DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION END INTERFACE if (allocated(NEIGH)) deallocate(NEIGH) allocate(NEIGH(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: sphericals"//CHAR(0), "Table: NEIGH"//CHAR(0)) sphericals=0 goto 001 endif ! if (allocated(THSP)) deallocate(THSP) ! allocate(THSP(NBONDS,0:MAXL,-MAXL:MAXL), STAT=ERR) ! if (ERR .ne. 0) then ! call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: sphericals"//CHAR(0), "Table: THSP"//CHAR(0)) ! sphericals=0 ! goto 001 ! endif if (allocated(ATHSP)) deallocate(ATHSP) allocate(ATHSP(0:MAXL,-MAXL:MAXL), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: sphericals"//CHAR(0), "Table: ATHSP"//CHAR(0)) sphericals=0 goto 001 endif if (allocated(SPTSHP)) deallocate(SPTSHP) allocate(SPTSHP(0:MAXL,-MAXL:MAXL), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: sphericals"//CHAR(0), "Table: SPTSHP"//CHAR(0)) sphericals=0 goto 001 endif ATHSP(:,:)=0.0d0 SPTSHP(:,:)=0.0d0 ANBONDS=0 NSPSH=0 #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA #ifdef DEBUG write (6, *) "OpenMP on atoms, NUMTH= ",NUMTH #endif ! OpemMP on atoms do i=1, NS !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(SPHRUN, NEIGH, Dij, Rij, j, k, l, m, XC, YC, ZC, SR, ST, SP, HSP) & !$OMP& SHARED(NUMTH, i, NA, NSP, NCELLS, LOT, SPC, CONTJ, VOISJ, NSPSH, ATHSP, SPTSHP, ANBONDS, COOSPH, MAXL) !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA if (LOT(j) .eq. SPC+1) then SPHRUN=.true. NEIGH(:)=0 do k=1, CONTJ(j,i) NEIGH(LOT(VOISJ(k,j,i)))=NEIGH(LOT(VOISJ(k,j,i)))+1 enddo !$OMP ATOMIC NSPSH=NSPSH+CONTJ(j,i) do k=1, NSP if (NEIGH(k) .ne. COOSPH(k)) then SPHRUN=.false. exit endif enddo if (SPHRUN) then !$OMP ATOMIC ANBONDS=ANBONDS+CONTJ(j,i) endif do k=1, CONTJ(j,i) if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij, j, VOISJ(k,j,i), i, i, i) else Dij = CALCDIJ (Rij, j, VOISJ(k,j,i), i, i, 1) endif XC=Rij(1) YC=Rij(2) ZC=Rij(3) ! NBONDS=NBONDS+1 call CART2SPHER(XC, YC, ZC, SR, ST, SP) do l=0, MAXL do m=0, l HSP(l,m) = 0.0d0 HSP(l,m) = PLEGENDRE (l, m, ST) * cos(SP * m) if (m .ne. 0) HSP(l,-m) = (-1)**m*HSP(l,m) enddo do m=-l, l ! THSP(NBONDS,l,m)=HSP(l,m) !$OMP ATOMIC SPTSHP(l,m)=SPTSHP(l,m)+HSP(l,m) if (SPHRUN) then !$OMP ATOMIC ATHSP(l,m)=ATHSP(l,m)+HSP(l,m) endif enddo enddo enddo endif enddo !$OMP END DO NOWAIT !$OMP END PARALLEL enddo else #ifdef DEBUG write (6, *) "OpenMP on MD steps, NUMTH= ",NUMTH #endif ! OpemMP on MD steps !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(SPHRUN, NEIGH, Dij, Rij, i, j, k, l, m, XC, YC, ZC, SR, ST, SP, HSP) & !$OMP& SHARED(NUMTH, NS, NA, NSP, NCELLS, LOT, SPC, CONTJ, VOISJ, NSPSH, ATHSP, SPTSHP, ANBONDS, COOSPH, MAXL) !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS do j=1, NA if (LOT(j) .eq. SPC+1) then SPHRUN=.true. NEIGH(:)=0 do k=1, CONTJ(j,i) NEIGH(LOT(VOISJ(k,j,i)))=NEIGH(LOT(VOISJ(k,j,i)))+1 enddo #ifdef OPENMP !$OMP ATOMIC #endif NSPSH=NSPSH+CONTJ(j,i) do k=1, NSP if (NEIGH(k) .ne. COOSPH(k)) then SPHRUN=.false. exit endif enddo if (SPHRUN) then #ifdef OPENMP !$OMP ATOMIC #endif ANBONDS=ANBONDS+CONTJ(j,i) endif do k=1, CONTJ(j,i) if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij, j, VOISJ(k,j,i), i, i, i) else Dij = CALCDIJ (Rij, j, VOISJ(k,j,i), i, i, 1) endif XC=Rij(1) YC=Rij(2) ZC=Rij(3) ! NBONDS=NBONDS+1 call CART2SPHER(XC, YC, ZC, SR, ST, SP) do l=0, MAXL do m=0, l HSP(l,m) = 0.0d0 HSP(l,m) = PLEGENDRE (l, m, ST) * cos(SP * m) if (m .ne. 0) HSP(l,-m) = (-1)**m*HSP(l,m) enddo do m=-l, l ! THSP(NBONDS,l,m)=HSP(l,m) #ifdef OPENMP !$OMP ATOMIC #endif SPTSHP(l,m)=SPTSHP(l,m)+HSP(l,m) if (SPHRUN) then #ifdef OPENMP !$OMP ATOMIC #endif ATHSP(l,m)=ATHSP(l,m)+HSP(l,m) endif enddo enddo enddo endif enddo enddo #ifdef OPENMP !$OMP END DO NOWAIT !$OMP END PARALLEL endif #endif if (GEO .eq. 0) then SPHA(:)=0.0d0 if (NSPSH .gt. 0) then do l=0, MAXL do m=-l, l SPHA(l)=SPHA(l)+(SPTSHP(l,m)/NSPSH)**2 enddo SPHA(l)=sqrt(4*PI*SPHA(l)/(2*l+1)) enddo endif call save_curve (MAXL+1, SPHA, IDC-1, IDSP) endif SPHA(:)=0.0d0 if (ANBONDS .gt. 0) then do l=0, MAXL do m=-l, l SPHA(l)=SPHA(l)+(ATHSP(l,m)/ANBONDS)**2 enddo SPHA(l)=sqrt(4*PI*SPHA(l)/(2*l+1)) enddo endif call save_curve (MAXL+1, SPHA, IDC, IDSP) sphericals = 1 001 continue ! if (allocated(THSP)) deallocate(THSP) if (allocated(ATHSP)) deallocate(ATHSP) if (allocated(SPTSHP)) deallocate(SPTSHP) if (allocated(NEIGH)) deallocate(NEIGH) END FUNCTION SUBROUTINE CART2SPHER(XC, YC, ZC, RS, TS, PS) DOUBLE PRECISION, INTENT(IN) :: XC, YC, ZC DOUBLE PRECISION, INTENT(OUT) :: RS, TS, PS RS=0.0d0 TS=0.0d0 PS=0.0d0 RS= sqrt(XC**2 + YC**2 + ZC**2) TS= acos(ZC/RS) PS= atan2(XC, YC) END SUBROUTINE ! Adapted from Numercial Recipies ! DOUBLE PRECISION FUNCTION PLEGENDRE (l, m, x) DOUBLE PRECISION, PARAMETER :: PI=acos(-1.0) INTEGER, INTENT(IN) :: l, m DOUBLE PRECISION, INTENT(IN) :: x DOUBLE PRECISION :: y INTEGER :: i, ll DOUBLE PRECISION :: fact, oldfact, pll, pmm, pmmp1, omx2 y=cos(x) pmm=1.0 if (m > 0) then omx2=(1.0-y)*(1.0+y) fact=1.0 i = 1 do while (i.le.m) pmm = pmm * (omx2*fact/(fact+1.0)) fact = fact + 2.0 i = i+1 enddo endif pmm=sqrt((2*m+1)*pmm/(4.0*PI)) if (mod(m,2) .eq. 1) pmm=-pmm if (l .eq. m) then PLEGENDRE=pmm else pmmp1=y*sqrt(2.0*m+3.0)*pmm if (l .eq. (m+1)) then PLEGENDRE=pmmp1 else oldfact=sqrt(2.0*m+3.0) ll=m+2 do while (ll.le.l) fact=sqrt((4.0*ll*ll-1.0)/(ll*ll-m*m)) pll=(y*pmmp1-pmm/oldfact)*fact oldfact=fact pmm=pmmp1 pmmp1=pll ll=ll+1 enddo PLEGENDRE=pll endif endif END FUNCTION DOUBLE PRECISION FUNCTION PLGNDR(l, m, x) DOUBLE PRECISION, PARAMETER :: PI=acos(-1.0) INTEGER :: j INTEGER, INTENT(IN) :: l, m DOUBLE PRECISION, INTENT(IN) :: x DOUBLE PRECISION :: prod INTERFACE DOUBLE PRECISION FUNCTION PLEGENDRE(l, m, x) INTEGER, INTENT(IN) :: l, m DOUBLE PRECISION, INTENT(IN) :: x END FUNCTION END INTERFACE prod=1.0d0 j=l-m+1 do while (j.le.l+m) prod = prod*j j=j+1 enddo PLGNDR=sqrt(4.0*PI*prod/(2*l+1))*PLEGENDRE(l,m,x) END FUNCTION atomes_1.3.1/src/fortran/cqvf.F900000664000175000017500000001644515212624223016200 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file cqvf.F90 !! @short q vectors selection for the reciprocal calculation of the S(k) !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION cqvf (QMAX, QMIN, NQ, PROBA, LIMQ) BIND (C,NAME='cqvf_') ! ! Determines the q-vectors for which the q-dependent ! correlation functions are computed - general cell ! USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NQ REAL (KIND=c_double), INTENT(IN) :: PROBA, LIMQ REAL (KIND=c_double), INTENT(IN) :: QMAX, QMIN LOGICAL :: KPTS, KEEPKPTS INTEGER :: hkl, q_index, seed INTEGER :: klow, llow INTEGER, DIMENSION(3) :: NKPTS DOUBLE PRECISION, DIMENSION(3) :: qmrecip DOUBLE PRECISION :: QMAX2, QMIN2, LIMQ2 DOUBLE PRECISION :: kpx, kpy, kpz, keep INTERFACE DOUBLE PRECISION FUNCTION RAN3 (idnum) INTEGER, INTENT(IN) :: idnum END FUNCTION END INTERFACE qmrecip(:) = 0.0d0 do i=1, NCELLS do j=1, 3 qmrecip(j) = qmrecip(j)+THE_BOX(i)%modr(j) enddo enddo qmrecip(:) = qmrecip(:)/NCELLS do i=1, 3 NKPTS(i) = AnINT(QMAX/qmrecip(i))+1 enddo hkl=0 ! To simplify the case of the calculation in the case of a simple cubic box if (OVERALL_CUBIC) then QMAX2=(QMAX/QMIN)**2 QMIN2=1.0d0 LIMQ2=(LIMQ/QMIN)**2 else QMAX2=QMAX**2 ! mod(q_max)**2 LIMQ2=LIMQ**2 QMIN2=QMIN**2 ! min module of the reciprocal lattice vectors - lattice.f90 endif q_index=0 qvmax=0.0d0 qvmin=50.0d0 do i=1, 2 ! The first iteration to evaluate the number of k-points ! to be saved for the analysis, and the second to store them. if (i .eq. 2) then NUMBER_OF_QMOD=q_index if (allocated(qvectx)) deallocate(qvectx) allocate(qvectx(NUMBER_OF_QMOD), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: COMP_Q_VAL_FULL"//CHAR(0), "Table: qvectx"//CHAR(0)) CQVF=0 goto 001 endif if (allocated(qvecty)) deallocate(qvecty) allocate(qvecty(NUMBER_OF_QMOD), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: COMP_Q_VAL_FULL"//CHAR(0), "Table: qvecty"//CHAR(0)) CQVF=0 goto 001 endif if (allocated(qvectz)) deallocate(qvectz) allocate(qvectz(NUMBER_OF_QMOD), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: COMP_Q_VAL_FULL"//CHAR(0), "Table: qvectz"//CHAR(0)) CQVF=0 goto 001 endif if (allocated(modq)) deallocate(modq) allocate(modq(NUMBER_OF_QMOD), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: COMP_Q_VAL_FULL"//CHAR(0), "Table: modq"//CHAR(0)) CQVF=0 goto 001 endif q_index=0 endif do h=0, NKPTS(1) if (h .eq. 0) then klow=0 else klow=-NKPTS(2) endif do k=klow, NKPTS(2) if (k.eq.0 .and. h.eq.0) then llow=0 else llow=-NKPTS(3) endif do l=llow, NKPTS(3) if (OVERALL_CUBIC) then kpx= h kpy= k kpz= l else ! Note : because we only consider the first step this is an approximation in the case of NPT trajectory kpx= 2.0d0*PI*(h*THE_BOX(1)%lrecp(1,1) + k*THE_BOX(1)%lrecp(2,1) + l*THE_BOX(1)%lrecp(3,1)) kpy= 2.0d0*PI*(h*THE_BOX(1)%lrecp(1,2) + k*THE_BOX(1)%lrecp(2,2) + l*THE_BOX(1)%lrecp(3,2)) kpz= 2.0d0*PI*(h*THE_BOX(1)%lrecp(1,3) + k*THE_BOX(1)%lrecp(2,3) + l*THE_BOX(1)%lrecp(3,3)) endif qvmod= kpx**2 + kpy**2 + kpz**2 ! we want the maximum number of k-points in the FSDP part of the spectra ! therefore we choose to keep all qvectors with qmod in: ! minr < qmod < limq ! where 'minr' is minimum q modulus accessible considering the analyzed ! lattice ie. the minimum modulus of the reciprocal cell vectors, ! 'limq' is the limit to be fixed for the FSDP part of the spectra ! Thereafter: QMIN=minr**2 and LIMQ2=limq**2. ! The qvectors with a 'qmod > limq' are accepted with a probability of 'PROBA' if (qvmod .le. QMAX2 .and. qvmod .ge. QMIN2) then KPTS=.true. else KPTS=.false. endif if (i .eq. 1 .and. KPTS) then q_index=q_index+2 elseif (i .eq. 2 .and. KPTS) then if (qvmod .le. LIMQ2) then KEEPKPTS=.true. else seed=173932 keep = RAN3(seed+h**3+k**2+l**5) if (keep .le. PROBA) then KEEPKPTS=.true. else KEEPKPTS=.false. endif endif if (KEEPKPTS) then q_index=q_index+1 qvectx(q_index)=kpx qvecty(q_index)=kpy qvectz(q_index)=kpz modq(q_index)=sqrt(qvmod) qvmax=max(qvmax,modq(q_index)) qvmin=min(qvmin,modq(q_index)) if (h.ne.0 .or. k.ne.0 .or. l.ne.0) then q_index=q_index+1 qvectx(q_index)=-kpx qvecty(q_index)=-kpy qvectz(q_index)=-kpz modq(q_index)=sqrt(qvmod) endif endif endif enddo ! l enddo ! k enddo ! h enddo NUMBER_OF_QVECT=q_index ! NQ is given in input ! the value of each K_POINT is found in the ! interval |qvmax - qvmin| and then we compute ! the degeneracy of each K_POINT in q modulus. if (allocated(degeneracy)) deallocate(degeneracy) allocate(degeneracy(NQ+1), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: COMP_Q_VAL_FULL"//CHAR(0), "Table: degeneracy"//CHAR(0)) CQVF=0 goto 001 endif degeneracy(:)=0 DELTA_Q=(qvmax-qvmin)/NQ do i=1, NUMBER_OF_QVECT hkl=AnINT((modq(i)-qvmin)/DELTA_Q)+1 degeneracy(hkl)=degeneracy(hkl)+1 enddo if (allocated(K_POINT)) deallocate(K_POINT) allocate(K_POINT(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: COMP_Q_VAL_FULL"//CHAR(0), "Table: K_POINT"//CHAR(0)) CQVF=0 goto 001 endif do i=1, NQ K_POINT(i)=(i-1.0)*DELTA_Q+qvmin enddo if (OVERALL_CUBIC) then do i=1, NUMBER_OF_QVECT qvectx(i)=qvectx(i)*QMIN qvecty(i)=qvecty(i)*QMIN qvectz(i)=qvectz(i)*QMIN enddo do i=1, NQ K_POINT(i)=K_POINT(i)*QMIN enddo endif !do i=1, NQ ! write (6, *) "i= ",i,", K_POINT(i)= ",K_POINT(i) !enddo CQVF=1 001 continue END FUNCTION atomes_1.3.1/src/fortran/allochem.F900000664000175000017500000000706415212624223017022 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file allochem.F90 !! @short Memory allocation for chemistry buffers !! @author Sébastien Le Roux INTEGER FUNCTION ALLOCHEM () USE PARAMETERS IMPLICIT NONE GRNUM=16+5*NSP*NSP SQNUM=8+4*NSP*NSP SKNUM=8+4*NSP*NSP GQNUM=GRNUM BDNUM=NSP*NSP ANNUM=NSP*NSP*NSP+NSP*NSP*NSP*NSP if (NSP .eq. 2) then GRNUM=GRNUM+6 SQNUM=SQNUM+8 SKNUM=SKNUM+8 GQNUM=GQNUM+6 endif RINUM=20*(NSP+1) CHNUM=NSP+1 SHNUM=NSP+1 MSNUM=0 if (NS .gt. 1) MSNUM=14*NSP+6 if (allocated(NBSPBS)) deallocate(NBSPBS) allocate(NBSPBS(NSP+1), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: NBSPBS"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(TL)) deallocate(TL) allocate(TL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: TL"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(MASS)) deallocate(MASS) allocate(MASS(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: MASS"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(RVDW)) deallocate(RVDW) allocate(RVDW(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: RVDW"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(ATOMID)) deallocate(ATOMID) allocate(ATOMID(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: ATOMID"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(Gr_CUT)) deallocate(Gr_CUT) allocate(Gr_CUT(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: Gr_CUT"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(Xi)) deallocate(Xi) allocate(Xi(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: Xi"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(NSCATTL)) deallocate(NSCATTL) allocate(NSCATTL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: NSCATTL"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(XSCATTL)) deallocate(XSCATTL) allocate(XSCATTL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: XSCATTL"//CHAR(0)) ALLOCHEM = 0 goto 001 endif ALLOCHEM = 1 001 continue END FUNCTION atomes_1.3.1/src/fortran/chains_ogl.F900000664000175000017500000001071415212624223017340 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file chains_ogl.F90 !! @short Send chain statistics data to C for OpenGL rendering !! @author Sébastien Le Roux INTEGER FUNCTION CHAINS_TO_OGL (STEP, NRI, RSAVED) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: STEP INTEGER, DIMENSION(TAILLC, NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(IN) :: RSAVED INTEGER, DIMENSION(NUMA) :: CHAIN_LIST INTEGER, DIMENSION(:), ALLOCATABLE :: CHAIN_ID INTEGER :: RAA, RAB, RAC, RAD, RAE RAB=0 do RAA=2, TAILLC if (NRI(RAA,STEP) > 0) then RAB=RAB+1 call allocate_all_chains (STEP-1, RAA, NRI(RAA,STEP)) endif enddo if (RAB.eq.0) write (6, *) "Chains RAB=0" do RAA=1, NA do RAB=2, TAILLC RAC = 0 do RAD=1, NUMA CHAIN_LIST(RAD) = 0 enddo do RAD=1, NRI(RAB,STEP) do RAE=1, RAB if (RSAVED(RAB,RAD,RAE) .eq. RAA) then RAC=RAC+1 CHAIN_LIST(RAC) = RAD goto 001 endif enddo 001 continue enddo if (allocated(CHAIN_ID)) deallocate(CHAIN_ID) allocate(CHAIN_ID(RAC), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: CHAINS_TO_OGL"//CHAR(0), "Table: CHAIN_ID (1)"//CHAR(0)) CHAINS_TO_OGL = 0 goto 002 endif do RAD=1, RAC CHAIN_ID(RAD) = CHAIN_LIST(RAD) enddo if (RAC > 0) call send_atom_chains_id_opengl (STEP-1, RAA-1, RAB, RAC, CHAIN_ID) enddo enddo do RAA=2, TAILLC if (allocated(CHAIN_ID)) deallocate(CHAIN_ID) allocate(CHAIN_ID(RAA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: CHAINS_TO_OGL"//CHAR(0), "Table: CHAIN_ID (2)"//CHAR(0)) CHAINS_TO_OGL = 0 goto 002 endif if (NRI(RAA,STEP) > 0) then do RAB=1, NRI(RAA,STEP) do RAC=1, RAA CHAIN_ID(RAC) = RSAVED(RAA,RAB,RAC) enddo call send_chains_opengl (STEP-1, RAA, RAB-1, CHAIN_ID) enddo endif enddo CHAINS_TO_OGL = 1 if (allocated(CHAIN_ID)) deallocate(CHAIN_ID) 002 continue END FUNCTION INTEGER FUNCTION CHAINS_TO_OGL_MENU (NRI) USE PARAMETERS IMPLICIT NONE INTEGER, DIMENSION(TAILLC, NS), INTENT(IN) :: NRI INTEGER, DIMENSION(:), ALLOCATABLE :: CHAIN_ID, CHAIN_JD, CHAIN_KD if (allocated(CHAIN_ID)) deallocate(CHAIN_ID) allocate(CHAIN_ID(TAILLC-1), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: CHAINS_TO_OGL_MENU"//CHAR(0), "Table: CHAIN_ID "//CHAR(0)) CHAINS_TO_OGL_MENU = 0 goto 001 endif k = 0 do i=2, TAILLC CHAIN_ID(i-1) = 0 do j=1, NS CHAIN_ID(i-1) = CHAIN_ID(i-1) + NRI(i,j) enddo if (CHAIN_ID(i-1) > 0) then k = k + 1 endif enddo if (allocated(CHAIN_JD)) deallocate(CHAIN_JD) allocate(CHAIN_JD(k), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: CHAINS_TO_OGL_MENU"//CHAR(0), "Table: CHAIN_JD "//CHAR(0)) CHAINS_TO_OGL_MENU = 0 goto 001 endif if (allocated(CHAIN_KD)) deallocate(CHAIN_KD) allocate(CHAIN_KD(k), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: CHAINS_TO_OGL_MENU"//CHAR(0), "Table: CHAIN_KD "//CHAR(0)) CHAINS_TO_OGL_MENU = 0 goto 001 endif k = 0 do i=2, TAILLC if (CHAIN_ID(i-1) > 0) then k = k + 1 CHAIN_JD(k) = i CHAIN_KD(k) = CHAIN_ID(i-1) endif enddo if (k > 0) then call send_coord_opengl (9, 1, 0, 0, k, k) call init_menurings (9, 5, k, CHAIN_JD, CHAIN_KD) endif if (allocated(CHAIN_ID)) deallocate(CHAIN_ID) if (allocated(CHAIN_JD)) deallocate(CHAIN_JD) if (allocated(CHAIN_KD)) deallocate(CHAIN_KD) CHAINS_TO_OGL_MENU = 1 001 continue END FUNCTION atomes_1.3.1/src/fortran/fzbt.F900000664000175000017500000000733715212624223016206 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file fzbt.F90 !! @short Partial structure factors: Faber-Ziman and Bathia-Thornton analysis !! @author Sébastien Le Roux LOGICAL FUNCTION FZBT (NDQ, SQIJ) ! ! Compute Faber-Ziman and Bathia-Thornton S(q) from Ashcroft S(q) ! USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: NDQ DOUBLE PRECISION, DIMENSION(NDQ,NSP,NSP), INTENT(IN) :: SQIJ if (NSP .eq. 2) then if (allocated(BTij)) deallocate(BTij) allocate(BTij(NDQ,4), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: FZBT"//CHAR(0), "Table: BTij"//CHAR(0)) FZBT=.false. goto 001 endif BTij(:,:)=0.0d0 endif if (allocated(FZSij)) deallocate(FZSij) allocate(FZSij(NDQ,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: FZBT"//CHAR(0), "Table: FZSij"//CHAR(0)) FZBT=.false. goto 001 endif FZSij(:,:,:)=0.0d0 do m=1, NDQ do n=1, NSP do o=1, NSP if (o .eq. n) then FZSij(m,n,o) = 1.0d0 + (SQIJ(m,n,o)-1.0d0)/Xi(n) if (NSP .eq. 2) then BTij(m,1) = BTij(m,1) + Xi(o)*Xi(o)*FZSij(m,n,o) BTij(m,3) = BTij(m,3) + FZSij(m,n,o) endif else FZSij(m,n,o) = 1.0d0 + SQIJ(m,n,o)/sqrt(Xi(n)*Xi(o)) if (NSP .eq. 2) then BTij(m,1) = BTij(m,1) + Xi(o)*Xi(n)*FZSij(m,n,o) BTij(m,3) = BTij(m,3) - FZSij(m,n,o) endif endif enddo enddo if (NSP .eq. 2) then if (NBSPBS(1) .le. NBSPBS(2)) then o=1 n=2 else o=2 n=1 endif BTij(m,2) = Xi(o)*FZSij(m,o,o) - Xi(n)*FZSij(m,n,n) BTij(m,2) = BTij(m,2)+FZSij(m,o,n)*(Xi(n)-Xi(o)) BTij(m,2) = BTij(m,2)*Xi(n)*Xi(o) BTij(m,3) = (BTij(m,3)*Xi(1)*Xi(2) +1)*Xi(1)*Xi(2) BTij(m,4) = BTij(m,3)/(Xi(1)*Xi(2)) endif enddo FZBT=.true. 001 continue END FUNCTION LOGICAL FUNCTION GRBT(GrToBT, NDTR) ! ! Compute Bathia-Thornton g(r) ! USE PARAMETERS INTEGER, INTENT(IN) :: NDTR DOUBLE PRECISION, DIMENSION(NDTR,NSP,NSP), INTENT(IN) :: GrToBT if (allocated(BTij)) deallocate(BTij) allocate(BTij(NDTR,3), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: GRBT"//CHAR(0), "Table: BTij"//CHAR(0)) GRBT=.false. goto 001 endif BTij(:,:)=0.0d0 do m=1, NDTR do n=1, NSP do o=1, NSP if (o .eq. n) then BTij(m,1) = BTij(m,1) + Xi(o)*Xi(o)*GrToBT(m,n,o) BTij(m,3) = BTij(m,3) + GrToBT(m,n,o) else BTij(m,1) = BTij(m,1) + Xi(o)*Xi(n)*GrToBT(m,n,o) BTij(m,3) = BTij(m,3) - GrToBT(m,n,o) endif enddo enddo if (NBSPBS(1) .le. NBSPBS(2)) then o=1 n=2 else o=2 n=1 endif BTij(m,2) = Xi(o)*GrToBT(m,o,o) - Xi(n)*GrToBT(m,n,n) BTij(m,2) = BTij(m,2)+GrToBT(m,o,n)*(Xi(n)-Xi(o)) BTij(m,3) = BTij(m,3)*Xi(1)*Xi(2) ! BTij(m,4) = BTij(m,3)/(Xi(1)*Xi(2)) ! BTij(m,5) = BTij(m,2)/(Xi(n)/ ) enddo GRBT=.true. 001 continue END FUNCTION atomes_1.3.1/src/fortran/msd.F900000664000175000017500000001664115212624223016022 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file msd.F90 !! @short MSD analysis !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION MSD (DLT, NDTS) BIND (C,NAME='msd_') ! ! Mean Square Displacement ! USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NDTS REAL (KIND=c_double), INTENT(IN) :: DLT DOUBLE PRECISION :: MASSTOT DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MSDTAB #ifdef OPENMP INTEGER :: NUMTH #endif INTERFACE LOGICAL FUNCTION ALLOCMSD() END FUNCTION END INTERFACE ! Calcul du déplacement carré moyen if(.not.TRANSPO()) then MSD=0 goto 001 endif if (.not. ALLOCMSD()) then MSD=0 goto 001 endif MASSTOT=0.0d0 do j=1, NSP MASSTOT=MASSTOT+NBSPBS(j)*MASS(j) enddo #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () if (NS.lt.NUMTH) NUMTH=NS ! OpemMP on MD steps !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(RCm, RCm2, R2Cor, Dij, Rij, i, j, k, l, m, n, o, p, Vij) & !$OMP& SHARED(NUMTH, NS, NA, D2i, D2dir, DRIFT, LOT, MASS, MASSTOT, NDTS, DLT, NFULLPOS) !$OMP DO SCHEDULE(STATIC,NS-1/NUMTH) #endif do j=1, NS-1 do m=1, 3 RCm(m)=0.0d0 enddo do i=1, NA k=LOT(i) do m=1, 3 RCm(m)=RCm(m)+MASS(k)*NFULLPOS(i,m,j) enddo enddo do m=1, 3 RCm(m)=RCm(m)/MASSTOT enddo do k=j+1, NS do m=1, 3 RCm2(m)=0.0d0 enddo do i=1, NA n=LOT(i) do m=1, 3 RCm2(m)=RCm2(m)+MASS(n)*NFULLPOS(i,m,k) enddo enddo do m=1, 3 RCm2(m)=RCm2(m)/MASSTOT enddo do i=1, NA o=LOT(i) Dij=0.0d0 do m=1,3 Rij(m)=NFULLPOS(i,m,k)-NFULLPOS(i,m,j) R2Cor(m) = RCm2(m) - RCm(m) Vij = (Rij(m)-R2Cor(m))**2 #ifdef OPENMP !$OMP ATOMIC #endif D2dir(o,m,k-j)=D2dir(o,m,k-j)+Vij Dij=Dij+Vij enddo #ifdef OPENMP !$OMP ATOMIC #endif D2i(o,k-j)=D2i(o,k-j)+Dij #ifdef OPENMP !$OMP CRITICAL #endif p=4 do m=1, 2 do n=m+1, 3 D2dir(o,p,k-j)=D2dir(o,m,k-j)+D2dir(o,n,k-j) p=p+1 enddo enddo #ifdef OPENMP !$OMP END CRITICAL #endif enddo if (k .eq. j+1) then do i=1, NA o=LOT(i) do m=1,3 DRIFT(m,k)=DRIFT(m,k)+1e5*(NFULLPOS(i,m,k)-NFULLPOS(i,m,j))*MASS(o)/(NDTS*DLT) enddo enddo do m=1,3 DRIFT(m,k)=DRIFT(m,k)/MASSTOT enddo endif enddo enddo #ifdef OPENMP !$OMP END DO NOWAIT !$OMP END PARALLEL #endif do k=1, NS-1 l=k+1 do m=1,3 RCm(m)=0.0d0 RCm2(m)=0.0d0 enddo do i=1, NA o=LOT(i) do m=1, 3 RCm(m)=RCm(m)+ MASS(o)*NFULLPOS(i,m,k) RCm2(m)=RCm2(m)+ MASS(o)*NFULLPOS(i,m,l) enddo enddo do m=1, 3 RCm(m)=RCm(m)/MASSTOT RCm2(m)=RCm2(m)/MASSTOT enddo do i=1, NA o=LOT(i) Dij=0.0d0 do m=1,3 R2Cor(m) = RCm2(m) - RCm(m) Rij(m)=NFULLPOS(i,m,l)-NFULLPOS(i,m,k) D2dirNAC(o,m,k)=(Rij(m)-R2Cor(m))**2 Dij=Dij+(Rij(m)-R2Cor(m))**2 COR(m,k)=COR(m,k)+R2Cor(m) enddo p=4 do m=1, 2 do n=m+1, 3 D2dirNAC(o,p,k)=D2dirNAC(o,m,k)+D2dirNAC(o,n,k) p=p+1 enddo enddo D2iNAC(o,k)=D2iNAC(o,k)+Dij enddo enddo do k=1, NS-1 do i=1, 6 do l=1, NSP D2dir(l,i,k)=D2dir(l,i,k)/(NS-k)/NBSPBS(l) D2dirNAC(l,i,k)=D2dirNAC(l,i,k)/NBSPBS(l) enddo enddo enddo do k=1, NS-1 do i=1, NSP D2i(i,k)=D2i(i,k)/(NS-k)/NBSPBS(i) D2iNAC(i,k)=D2iNAC(i,k)/NBSPBS(i) enddo enddo ! Evaluation of the diffusion constant D ! A minimum of dynamic time is needed for a 'physical' meaning of D ! so if the simulation time is big enough we compute D ! Here arbitrary we choose 30ps as time limit (30000 fs) ! We also decide to evaluate only if there is more than 1000 MD steps if (NS*NDTS*DLT .gt. 30000 .and. NS.gt.1000) then ! then take car to cut the first 1 ps of the simulation ! not to be anymore in the ballistic regime ! afterwards take care to cut the last 1 ps of the calculation ! usually the correlations are unclear in this zone of the MSD z=NS*NDTS*DLT z=z-1.0 k=INT(z/(NDTS*DLT)) l=INT(1.0/(NDTS*DLT)) do i=1, NSP Dcte(i)=(D2i(i,k)-D2i(i,l))/((k-l)*NDTS*DLT) enddo else do i=1, NSP Dcte(i)=0.d0 enddo endif allocate(MSDTAB(NS-1), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: MSD"//CHAR(0), "Table: MSDTAB"//CHAR(0)) MSD=0 goto 001 endif k=0 do i=1, NSP do j=1, NS-1 MSDTAB(j)=D2i(i,j) enddo call save_curve (NS-1, MSDTAB, k, IDMSD) k=k+1 do j=1, NS-1 MSDTAB(j)=D2iNAC(i,j) enddo call save_curve (NS-1, MSDTAB, k, IDMSD) k=k+1 enddo do i=1, NSP do l=1, 6 do j=1, NS-1 MSDTAB(j)=D2dir(i,l,j) enddo call save_curve (NS-1, MSDTAB, k, IDMSD) k=k+1 enddo enddo do i=1, NSP do l=1, 6 do j=1, NS-1 MSDTAB(j)=D2dirNAC(i,l,j) enddo call save_curve (NS-1, MSDTAB, k, IDMSD) k=k+1 enddo enddo do i=1, 3 do j=1, NS-1 MSDTAB(j)=COR(i,j) enddo call save_curve (NS-1, MSDTAB, k, IDMSD) k=k+1 enddo do i=1, 3 do j=1, NS-1 MSDTAB(j)=DRIFT(i,j) enddo call save_curve (NS-1, MSDTAB, k, IDMSD) k=k+1 enddo MSD=1 001 continue if (allocated(NFULLPOS)) deallocate(NFULLPOS) call DEALLOCMSD CONTAINS LOGICAL FUNCTION TRANSPO() USE PARAMETERS if (allocated(NFULLPOS)) deallocate(NFULLPOS) allocate(NFULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: TRANSPO"//CHAR(0), "Table: NFULLPOS"//CHAR(0)) TRANSPO=.false. goto 001 endif if (allocated(POA)) deallocate(POA) allocate(POA(NA,3), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: TRANSPO"//CHAR(0), "Table: POA"//CHAR(0)) TRANSPO=.false. goto 001 endif if (allocated(POB)) deallocate(POB) allocate(POB(NA,3), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: TRANSPO"//CHAR(0), "Table: POB"//CHAR(0)) TRANSPO=.false. goto 001 endif do NOA=1, NS do NOB=1, NA do NOC=1, 3 NFULLPOS(NOB,NOC,NOA) = FULLPOS(NOB,NOC,NOA) enddo enddo enddo do NOA=1, NA do NOB=1, 3 POA(NOA,NOB)=NFULLPOS(NOA,NOB,1) enddo enddo do NOC=2, NS do NOA=1, NA do NOB=1, 3 POB(NOA,NOB)=NFULLPOS(NOA,NOB,NOC) enddo if (NCELLS .gt. 1) then call CALCRIJ(NOA, NOA, -1, -1, NOC-1) else call CALCRIJ(NOA, NOA, -1, -1, 1) endif do NOB=1, 3 POA(NOA,NOB)=POA(NOA,NOB)+Rij(NOB) NFULLPOS(NOA,NOB,NOC)=POA(NOA,NOB) enddo enddo enddo TRANSPO = .true. 001 continue if (allocated(POA)) deallocate(POA) if (allocated(POB)) deallocate(POB) END FUNCTION END FUNCTION atomes_1.3.1/src/fortran/sk.F900000664000175000017500000002562515212624223015656 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file sk.F90 !! @short S(k) analysis: direct reciprocal space calculation !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION s_of_k (NQ, XA) BIND (C,NAME='s_of_k_') ! Total structure factor ! Partial structure factors from k-points USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NQ, XA DOUBLE PRECISION :: factor, xfactor INTERFACE DOUBLE PRECISION FUNCTION FQX(TA, Q) INTEGER, INTENT(IN) :: TA DOUBLE PRECISION, INTENT(IN) :: Q END FUNCTION END INTERFACE if(allocated(Sij)) deallocate(Sij) allocate(Sij(NQ,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k"//CHAR(0), "Table: Sij"//CHAR(0)) s_of_k = 0 goto 001 endif Sij(:,:,:)=0.0d0 if(allocated(cij)) deallocate(cij) allocate(cij(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k"//CHAR(0), "Table: cij"//CHAR(0)) s_of_k = 0 goto 001 endif if(allocated(sik)) deallocate(sik) allocate(sik(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k"//CHAR(0), "Table: sik"//CHAR(0)) s_of_k = 0 goto 001 endif #ifdef OPENMP !t0 = OMP_GET_WTIME () call FOURIER_TRANS_QVECT () ! Default Q-vector parallelization !t1 = OMP_GET_WTIME () !write (*,*) "temps d’excecution QVT 2:", t1-t0 #else call FOURIER_TRANS_STEPS () #endif if (allocated(cij)) deallocate(cij) if (allocated(sik)) deallocate(sik) if (allocated(qvectx)) deallocate(qvectx) if (allocated(qvecty))deallocate(qvecty) if (allocated(qvectz)) deallocate(qvectz) if (allocated(modq)) deallocate(modq) if(allocated(S)) deallocate(S) allocate(S(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k"//CHAR(0), "Table: S"//CHAR(0)) s_of_k = 0 goto 001 endif if(allocated(XS)) deallocate(XS) allocate(XS(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k"//CHAR(0), "Table: XS"//CHAR(0)) s_of_k = 0 goto 001 endif factor=0.0d0 do i=1, NSP factor=factor + NBSPBS(i)*NSCATTL(i)**2 enddo factor=factor*NS if (XA .eq. 1) then xfactor=0.0d0 do i=1, NSP xfactor=xfactor + NBSPBS(i)*XSCATTL(i)**2 enddo xfactor=xfactor*NS endif S(:)=0.0d0 XS(:)=0.0d0 do i=1, NQ if (degeneracy(i) .gt. 0) then do k=1, NSP do j=1, NSP S(i)=S(i)+Sij(i,k,j)*NSCATTL(k)*NSCATTL(j) if (XA .eq. 1) then XS(i)=XS(i)+Sij(i,k,j)*XSCATTL(k)*XSCATTL(j) else XS(i)=XS(i)+Sij(i,k,j)*FQX(INT(XSCATTL(k)),K_POINT(i))*FQX(INT(XSCATTL(j)),K_POINT(i)) endif enddo enddo S(i)=S(i)/(factor*degeneracy(i)) if (XA .eq. 1) then XS(i)=XS(i)/(xfactor*degeneracy(i)) else xfactor=0.0d0 do k=1, NSP xfactor=xfactor + NBSPBS(k)*FQX(INT(XSCATTL(k)),K_POINT(i))**2 enddo XS(i)=XS(i)/(xfactor*degeneracy(i)*NS) endif do j=1, NSP do k=1, NSP Sij(i,j,k)=Sij(i,j,k)/(degeneracy(i)*sqrt(dble(NBSPBS(k)*NBSPBS(j)))*NS) enddo enddo endif enddo s_of_k = SK_SAVE () 001 continue if (allocated(degeneracy)) deallocate(degeneracy) if (allocated(K_POINT)) deallocate(K_POINT) if (allocated(Sij)) deallocate(Sij) if (allocated(S)) deallocate(S) if (allocated(XS)) deallocate(XS) CONTAINS !************************************************************ ! ! this subroutine computes the sine and cosine sums from the ! configuration for all q-vectors needed ! SUBROUTINE FOURIER_TRANS_STEPS () USE PARAMETERS IMPLICIT NONE DOUBLE PRECISION :: qx, qy, qz, qtr, sini, cosi INTEGER :: sp do k=1, NS do j=1, NUMBER_OF_QVECT l=AnINT((modq(j)-qvmin)/DELTA_Q)+1 if (l .le. NQ) then qx=qvectx(j) qy=qvecty(j) qz=qvectz(j) do i=1, NSP cij(i)=0.d0 sik(i)=0.d0 enddo do i=1, NA qtr = qx*FULLPOS(i,1,k)+qy*FULLPOS(i,2,k)+qz*FULLPOS(i,3,k) sini = sin(qtr) cosi = cos(qtr) sp = LOT(i) sik(sp) = sik(sp) + sini cij(sp) = cij(sp) + cosi enddo do i=1, NSP do m=1, NSP Sij(l,i,m) = Sij(l,i,m) + cij(i)*cij(m) + sik(i)*sik(m) enddo enddo endif enddo enddo END SUBROUTINE #ifdef OPENMP !************************************************************ ! ! This subroutine computes the sine and cosine sums from the ! configuration for all q-vectors needed ! OpenMP // on Qvect ! SUBROUTINE FOURIER_TRANS_QVECT () USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER :: NUMTH, sp DOUBLE PRECISION :: qx, qy, qz, qtr, sini, cosi NUMTH = OMP_GET_MAX_THREADS () if (NUMBER_OF_QVECT.lt.NUMTH) NUMTH=NUMBER_OF_QVECT ! OpemMP on Qvect !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(qx, qy, qz, cij, sik, qtr, sini, cosi, i, j, k, l, m, sp) & !$OMP& SHARED(NUMTH, qvectx, qvecty, qvectz, & !$OMP& FULLPOS, NS, NSP, NA, LOT, DELTA_Q, NUMBER_OF_QVECT, NQ, modq, qvmin, Sij) !$OMP DO SCHEDULE(STATIC,NUMBER_OF_QVECT/NUMTH) do j=1, NUMBER_OF_QVECT l=AnINT((modq(j)-qvmin)/DELTA_Q)+1 if (l .le. NQ) then qx=qvectx(j) qy=qvecty(j) qz=qvectz(j) do k=1, NS do i=1, NSP cij(i)=0.d0 sik(i)=0.d0 enddo do i=1, NA qtr = qx*FULLPOS(i,1,k)+qy*FULLPOS(i,2,k)+qz*FULLPOS(i,3,k) sini = sin(qtr) cosi = cos(qtr) sp = LOT(i) sik(sp) = sik(sp) + sini cij(sp) = cij(sp) + cosi enddo do i=1, NSP do m=1, NSP !$OMP ATOMIC Sij(l,i,m) = Sij(l,i,m) + cij(i)*cij(m) + sik(i)*sik(m) enddo enddo enddo endif enddo !$OMP END DO NOWAIT !$OMP END PARALLEL END SUBROUTINE #endif INTEGER FUNCTION SK_SAVE() USE PARAMETERS INTEGER :: NSQ DOUBLE PRECISION, DIMENSION (:), ALLOCATABLE :: SQTAB INTERFACE LOGICAL FUNCTION FZBT (NDQ, SQIJ) USE PARAMETERS INTEGER, INTENT(IN) :: NDQ DOUBLE PRECISION, DIMENSION(NDQ,NSP,NSP), INTENT(IN) :: SQIJ END FUNCTION END INTERFACE i=0 do j=1, NQ if (degeneracy(j) .gt. 0) i=i+1 enddo NSQ=i if (NSQ .gt. 0) then ! If wave vectors exist if (allocated(SQTAB)) deallocate(SQTAB) allocate(SQTAB(NSQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: SK_SAVE"//CHAR(0), "Table: SQTAB"//CHAR(0)) SK_SAVE = 0 goto 001 endif i = 0; do k=1, NQ if (degeneracy(k).gt.0) then i=i+1 SQTAB(i)= K_POINT(k) endif enddo call save_xsk (NSQ, SQTAB) i=0 do k=1, NQ if (degeneracy(k).gt.0) then i=i+1 SQTAB(i)= S(k) endif enddo call save_curve (NSQ, SQTAB, 0, IDSK) i=0 do k=1, NQ if (degeneracy(k).gt.0) then i=i+1 SQTAB(i)= (S(k)-1.0)*K_POINT(k) endif enddo call save_curve (NSQ, SQTAB, 2, IDSK) i=0 do k=1, NQ if (degeneracy(k).gt.0) then i=i+1 SQTAB(i)= XS(k) endif enddo call save_curve (NSQ, SQTAB, 4, IDSK) i=0 do k=1, NQ if (degeneracy(k).gt.0) then i=i+1 SQTAB(i)= (XS(k)-1.0)*K_POINT(k) endif enddo call save_curve (NSQ, SQTAB, 6, IDSK) l = 8 do i=1, NSP do j=1, NSP m=0 do k=1, NQ if (degeneracy(k).gt.0) then m=m+1 SQTAB(m)=Sij(k,i,j) endif enddo call save_curve (NSQ, SQTAB, l, IDSK) l=l+2 enddo enddo ! To compute FZ and BT partials if (.not.FZBT (NQ, Sij)) then SK_SAVE = 0 goto 001 endif do i=1, NSP do j=1, NSP m=0 do k=1, NQ if (degeneracy(k).gt.0) then m=m+1 SQTAB(m)= FZSij(k,i,j) endif enddo call save_curve (NSQ, SQTAB, l, IDSK) l=l+2 enddo enddo if (NSP .eq. 2) then do i=1, 4 k=0 do j=1, NQ if (degeneracy(j).gt.0) then k=k+1 SQTAB(k)= BTij(j,i) endif enddo call save_curve (NSQ, SQTAB, l, IDSK) l=l+2 enddo endif SK_SAVE=1 endif ! If wave vectors exist 001 continue if (allocated(FZSij)) deallocate(FZSij) if (NSP.eq.2 .and. allocated(BTij)) deallocate(BTij) if (allocated(SQTAB)) deallocate(SQTAB) END FUNCTION END FUNCTION s_of_k INTEGER (KIND=c_int) FUNCTION smooth_and_save (DPOINT, CTS, SFC, IDC, NQPTS, DATS) BIND (C,NAME='smooth_and_save_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: IDC, NQPTS, DATS REAL (KIND=c_double), DIMENSION(NQPTS), INTENT(IN) :: DPOINT, CTS REAL (KIND=c_double), INTENT(IN) :: SFC DOUBLE PRECISION, DIMENSION (:), ALLOCATABLE :: SQTAB INTERFACE LOGICAL FUNCTION SMOOTH (TABTOLISS, GTOLISS, DIMTOLISS, SIGMALISS) INTEGER, INTENT(IN) :: DIMTOLISS DOUBLE PRECISION, INTENT(IN) :: SIGMALISS DOUBLE PRECISION, INTENT(IN), DIMENSION(DIMTOLISS) :: GTOLISS DOUBLE PRECISION, INTENT(INOUT), DIMENSION(DIMTOLISS) :: TABTOLISS END FUNCTION END INTERFACE if (allocated(SQTAB)) deallocate(SQTAB) allocate(SQTAB(NQPTS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: smooth_and_save"//CHAR(0), "Table: SQTAB"//CHAR(0)) smooth_and_save=0 goto 001 endif do k=1, NQPTS SQTAB(k)=CTS(k) enddo if (.not.SMOOTH (SQTAB, DPOINT, NQPTS, SFC)) then smooth_and_save=0 goto 001 endif call save_curve (NQPTS, SQTAB, IDC, DATS) smooth_and_save=1 001 continue if (allocated(SQTAB)) deallocate(SQTAB) END FUNCTION DOUBLE PRECISION FUNCTION FQX(TA, Q) USE MENDELEIEV INTEGER, INTENT(IN) :: TA DOUBLE PRECISION, INTENT(IN) :: Q DOUBLE PRECISION :: SINLA DOUBLE PRECISION, PARAMETER :: PI=acos(-1.0) ! ! Acta Cryst. (1968). A24, 321 ! ! SINLA = ((sin(THETA)/LAMBDA)**2 ! and 2 d Sin(THETA) = LAMBDA ! so 2 d = LAMBDA / Sin(THETA) ! with d = 2 PI / Q we get: ! 4.0 PI / Q = LAMBDA / Sin(THETA) SINLA=(Q/(4.0*PI))**2 FQX = a1(TA)*exp(-b1(TA)*SINLA) & + a2(TA)*exp(-b2(TA)*SINLA) & + a3(TA)*exp(-b3(TA)*SINLA) & + a4(TA)*exp(-b4(TA)*SINLA) + c(TA) END FUNCTION atomes_1.3.1/src/fortran/dvtb.F900000664000175000017500000000363715212624223016177 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file dvtb.F90 !! @short Model expansion for algorithmic purposes !! @author Sébastien Le Roux LOGICAL FUNCTION dvtbox(ST, NAS, NAT, NPOS) ! ! Create a superlattice ! Size of the superlattice will be NBX*NBX*NBX with NBX >= 3 ! NBX is set in dmtx.f90 ! USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: ST, NAS, NAT DOUBLE PRECISION, DIMENSION(NAT,3), INTENT(INOUT) :: NPOS DOUBLE PRECISION, DIMENSION(3) :: DVT INTEGER :: iid, jid, kid, lid, mid, nid iid=0 do jid=-NBX+(NBX/2)+1, NBX-(NBX/2)-1, 1 do kid=-NBX+(NBX/2)+1, NBX-(NBX/2)-1, 1 do lid=-NBX+(NBX/2)+1, NBX-(NBX/2)-1, 1 if (NCELLS .gt. 1) then mid = ST else mid = 1 endif DVT(1)=jid*THE_BOX(mid)%lvect(1,1)+kid*THE_BOX(mid)%lvect(2,1)+lid*THE_BOX(mid)%lvect(3,1) DVT(2)=jid*THE_BOX(mid)%lvect(1,2)+kid*THE_BOX(mid)%lvect(2,2)+lid*THE_BOX(mid)%lvect(3,2) DVT(3)=jid*THE_BOX(mid)%lvect(1,3)+kid*THE_BOX(mid)%lvect(2,3)+lid*THE_BOX(mid)%lvect(3,3) do mid=1, NAS iid = iid + 1 do nid=1, 3 NPOS(iid,nid)=FULLPOS(mid,nid,ST)+DVT(nid) enddo enddo enddo enddo enddo dvtbox=.true. END FUNCTION atomes_1.3.1/src/fortran/resrings.F900000664000175000017500000002424515212624223017072 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file resrings.F90 !! @short Export results of ring and chain statistics to C !! @author Sébastien Le Roux INTEGER FUNCTION RECRINGS(VID) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: VID DOUBLE PRECISION :: MAMP, EAMP DOUBLE PRECISION :: TAMP, ETAMP DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: AMP DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: RINGSPNA, ECTRPNA DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: EMIN, EMAX DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: MPNA DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: RTAB if (TBR) then RECRINGS=2 goto 001 else if (ALC) then RECRINGS=0 goto 001 endif if (allocated(RTAB)) deallocate(RTAB) allocate(RTAB(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: RTAB"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(MOYRED)) deallocate(MOYRED) allocate(MOYRED(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: MOYRED"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(RED)) deallocate(RED) allocate(RED(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: RED"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(ECTYPE)) deallocate(ECTYPE) allocate(ECTYPE(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: ECTYPE"//CHAR(0)) RECRINGS=0 goto 001 endif !if (allocated(MOYPUR)) deallocate(MOYPUR) !allocate(MOYPUR(TAILLR), STAT=ERR) !if (ERR .ne. 0) then ! call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: RECRINGS"//CHAR(0), "Table: MOYPUR"//CHAR(0)) ! RECRINGS=0 ! goto 001 !endif !if (allocated(IRRED)) deallocate(IRRED) !allocate(IRRED(NS), STAT=ERR) !if (ERR .ne. 0) then ! call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: RECRINGS"//CHAR(0), "Table: IRRED"//CHAR(0)) ! RECRINGS=0 ! goto 001 !endif !if (allocated(ECTYP)) deallocate(ECTYP) !allocate(ECTYP(TAILLR), STAT=ERR) !if (ERR .ne. 0) then ! call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: RECRINGS"//CHAR(0), "Table: ECTYP"//CHAR(0)) ! RECRINGS=0 ! goto 001 !endif ECTYPE(:)=0.0d0 !ECTYP(:)=0.0d0 do l=3, TAILLR do i=1, NS RED(i)=dble(NRING(l,i))/NTLT ! IRRED(i)=dble(NIRR(l,i))/NTLT enddo if (NS .gt. 1) then MOYRED(l)=0.0d0 ! MOYPUR(l)=0.0d0 ECTYPE(l)=0.0d0 ! ECTYP(l)=0.0d0 call MOYENNE(RED, NS, MOYRED(l)) ! call MOYENNE(IRRED, NS, MOYPUR(l)) call ECT_TYPE(MOYRED(l), RED, NS, ECTYPE(l)) ! call ECT_TYPE(MOYPUR(l), IRRED, NS, ECTYP(l)) else MOYRED(l)=RED(1) ! MOYPUR(l)=IRRED(1) endif enddo TAMP=0.0 do i=3, TAILLR RTAB(i)=MOYRED(i) TAMP = TAMP + RTAB(i) enddo if (TAMP .eq. 0.0) then RECRINGS=1 goto 001 endif l=(NSP+1)*4*VID if (TLT .ne. NSP+1) l = l + 4*TLT call save_curve (TAILLR, RTAB, l, IDRI) if (allocated(MPNA)) deallocate(MPNA) allocate(MPNA(TAILLR,TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: MPNA"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(EPNA)) deallocate(EPNA) allocate(EPNA(TAILLR,TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: EPNA"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(RINGSPNA)) deallocate(RINGSPNA) allocate(RINGSPNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: RINGSPNA"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(ECTRPNA)) deallocate(ECTRPNA) allocate(ECTRPNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: ECTPNA"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(RNAMAX)) deallocate(RNAMAX) allocate(RNAMAX(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: RNAMAX"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(RNAMIN)) deallocate(RNAMIN) allocate(RNAMIN(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: RNAMIN"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(EMAX)) deallocate(EMAX) allocate(EMAX(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: EMAX"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(EMIN)) deallocate(EMIN) allocate(EMIN(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: EMIN"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(MTABL)) deallocate(MTABL) allocate(MTABL(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: MTABL"//CHAR(0)) RECRINGS=0 goto 001 endif RINGSPNA(:)=0.0d0 ECTRPNA(:)=0.0d0 RNAMAX(:)=0.0d0 RNAMIN(:)=0.0d0 EMAX(:)=0.0d0 EMIN(:)=0.0d0 MPNA(:,:)=0.0d0 EPNA(:,:)=0.0d0 do i=3, TAILLR do j=3, TAILLR if (NS .gt. 1) then do k=1, NS MTABL(k)=PNA(i,j,k) enddo call MOYENNE(MTABL, NS, MPNA(i,j)) call ECT_TYPE(MPNA(i,j), MTABL, NS, EPNA(i,j)) if (i.eq.j) then RINGSPNA(i)=MPNA(i,j)/NTLT ECTRPNA(i)=EPNA(i,j)/NTLT endif else MPNA(i,j)=dble(PNA(i,j,1))/NTLT if (i.eq.j) RINGSPNA(i)=MPNA(i,j) endif enddo enddo do i=1, TAILLR RTAB(i)=RINGSPNA(i) enddo l=l+1 call save_curve (TAILLR, RTAB, l, IDRI) do i=1, TAILLR if (NS .gt. 1) then m=0 do j=1, NS if (PNA(i,i,j) .eq. 0) then MTABL(j)=0.0d0 else m=m+1 MTABL(j)=dble(MAXPNA(i,j))/dble(PNA(i,i,j)) endif enddo if (m.gt.1) then call MOYENNE(MTABL, NS, RNAMAX(i)) RNAMAX(i)=RNAMAX(i)*NS/m call ECT_TYPE_RINGS(RNAMAX(i), MTABL, NS, m, EMAX(i)) elseif (m.eq.1) then RNAMAX(i)=RNAMAX(i)*NS EMAX(i)=0.0d0 else RNAMAX(i)=0.0d0 EMAX(i)=0.0d0 endif m=0 do j=1, NS if (PNA(i,i,j) .eq. 0) then MTABL(j)=0.0d0 else m=m+1 MTABL(j)=dble(MINPNA(i,j))/dble(PNA(i,i,j)) endif enddo if (m.gt.1) then call MOYENNE(MTABL, NS, RNAMIN(i)) RNAMIN(i)=RNAMIN(i)*NS/m call ECT_TYPE_RINGS(RNAMIN(i), MTABL, NS, m, EMIN(i)) elseif (m.eq.1) then RNAMIN(i)=RNAMIN(i)*NS EMIN(i)=0.0d0 else RNAMIN(i)=0.0d0 EMIN(i)=0.0d0 endif else if (PNA(i,i,1).eq.0.0) then RNAMAX(i)=0.0d0 EMAX(i)=0.0d0 RNAMIN(i)=0.0d0 EMIN(i)=0.0d0 else RNAMAX(i)=dble(MAXPNA(i,1))/PNA(i,i,1) EMAX(i)=0.0d0 RNAMIN(i)=dble(MINPNA(i,1))/PNA(i,i,1) EMIN(i)=0.0d0 endif endif enddo do i=1, TAILLR RTAB(i)=RNAMAX(i) enddo l=l+1 call save_curve (TAILLR, RTAB, l, IDRI) do i=1, TAILLR RTAB(i)=RNAMIN(i) enddo l=l+1 call save_curve (TAILLR, RTAB, l, IDRI) if (allocated(AMP)) deallocate(AMP) allocate(AMP(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: AMP"//CHAR(0)) RECRINGS=0 goto 001 endif do i=1, NS AMP(i)=0.0d0 if (DOAMPAT) then do j=1, NTLT AMP(i)=AMP(i)+dble(AMPAT(j,i)) enddo endif enddo MAMP=0.0d0 EAMP=0.0d0 if (DOAMPAT) then if (NS .gt. 1) then call MOYENNE(AMP, NS, MAMP) call ECT_TYPE(MAMP, AMP, NS, EAMP) else MAMP=AMP(1) endif endif if (allocated(TOTPSTEP)) deallocate(TOTPSTEP) allocate(TOTPSTEP(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: TOTPSTEP"//CHAR(0)) RECRINGS=0 goto 001 endif do i=1, NS TOTPSTEP(i)=0 do j=3, TAILLR TOTPSTEP(i)=TOTPSTEP(i)+dble(NRING(j,i)) enddo enddo TAMP=0.0d0 ETAMP=0.0d0 call MOYENNE(TOTPSTEP, NS, TAMP) call ECT_TYPE(TAMP, TOTPSTEP, NS, ETAMP) call save_rings_data (TAILLR, ECTYPE, ECTRPNA, EMAX, EMIN, TAMP, ETAMP, MAMP, EAMP) RECRINGS=1 001 continue if (allocated(RTAB)) deallocate(RTAB) if (allocated(AMPAT)) deallocate(AMPAT) if (allocated(AMP)) deallocate(AMP) if (allocated(TOTPSTEP)) deallocate(TOTPSTEP) if (allocated(MOYRED)) deallocate(MOYRED) if (allocated(RED)) deallocate(RED) if (allocated(ECTYPE)) deallocate(ECTYPE) !if (allocated(MOYPUR)) deallocate(MOYPUR) !if (allocated(IRRED)) deallocate(IRRED) !if (allocated(ECTYP)) deallocate(ECTYP) if (allocated(MPNA)) deallocate(MPNA) if (allocated(EPNA)) deallocate(EPNA) if (allocated(RINGSPNA)) deallocate(RINGSPNA) if (allocated(ECTRPNA)) deallocate(ECTRPNA) if (allocated(RNAMAX)) deallocate(RNAMAX) if (allocated(RNAMIN)) deallocate(RNAMIN) if (allocated(EMAX)) deallocate(EMAX) if (allocated(EMIN)) deallocate(EMIN) if (allocated(MTABL)) deallocate(MTABL) if (allocated(NRING)) deallocate(NRING) END FUNCTION atomes_1.3.1/src/fortran/chains.F900000664000175000017500000005547415212624223016513 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file chains.F90 !! @short Chain statistics !! @author Sébastien Le Roux SUBROUTINE SETUP_CPAT_VPAT_CHAIN (CONT, VOIS, STR, CPT, VPT) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: STR INTEGER, DIMENSION(NA,NS), INTENT(IN):: CONT INTEGER, DIMENSION(MAXN,NA,NS), INTENT(IN) :: VOIS INTEGER, DIMENSION(NA), INTENT(INOUT):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(INOUT) :: VPT INTEGER :: RAB, RAC !do RAB=1, NAT ! write (6, '("At= ",i4," Neigh= ",i2)') RAB, CONTJ(RAB,STR) ! do RAC=1, CONTJ(RAB,STR) ! write (6, '(" i= ",i2," Vois= ",i4)') RAC, VOISJ(RAC,RAB,STR) ! enddo !enddo CPT(:) = 0 VPT(:,:) = 0 do RAB=1, NA CPT(RAB) = CONT(RAB,STR) do RAC=1, CONT(RAB,STR) VPT(RAB,RAC) = VOIS(RAC,RAB,STR) enddo enddo END SUBROUTINE INTEGER FUNCTION CHAINS() USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE INTEGER FUNCTION RECHAINS () END FUNCTION END INTERFACE CHAINS = 0 #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.ge.1 .and. NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA #ifdef DEBUG write (6, *) "OpenMP on atoms, NUMTH= ",NUMTH #endif call CHAINS_SEARCH_ATOMS (NUMTH) else #ifdef DEBUG write (6, *) "OpenMP on MD steps, NUMTH= ",NUMTH #endif call CHAINS_SEARCH_STEPS (NUMTH) endif #else call CHAINS_SEARCH_STEPS () #endif CHAINS = RECHAINS() END FUNCTION #ifdef OPENMP SUBROUTINE CHAINS_SEARCH_ATOMS (NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: NUMTH TYPE (RING), DIMENSION(:), ALLOCATABLE :: THE_CHAIN INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVR INTEGER :: LORA, LORB, RES, ch INTERFACE INTEGER FUNCTION CHECK_CHAIN (THE_CHAIN, CHAINE, TAE, RSAVED, TRING, INDE, RESL) USE PARAMETERS TYPE (RING), DIMENSION(TAILLC), INTENT(IN) :: THE_CHAIN INTEGER, INTENT(IN) :: CHAINE INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL END FUNCTION RECURSIVE SUBROUTINE INSIDE_CHAIN (THE_CHAIN, CID, TAE, LRA, LRB, NRPAT, RSAVED, TRING, INDE, RESL, CPT, VPT) USE PARAMETERS TYPE (RING), DIMENSION(TAILLC), INTENT(INOUT) :: THE_CHAIN INTEGER, INTENT(IN) :: CID, LRA, LRB INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT END SUBROUTINE INTEGER FUNCTION CHAINS_TO_OGL (STEP, NRI, RSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP INTEGER, DIMENSION(TAILLC, NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(IN) :: RSAVED END FUNCTION INTEGER FUNCTION CHAINS_TO_OGL_MENU (NRI) USE PARAMETERS INTEGER, DIMENSION(TAILLC, NS), INTENT(IN) :: NRI END FUNCTION END INTERFACE ch = 0 if (allocated(NRING)) deallocate(NRING) allocate(NRING(TAILLC,NS), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="NRING" ALC=.true. goto 001 endif NRING(:,:) = 0 if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLC,NUMA,TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif do i=1, NS SAVRING(:,:,:)=0 call SETUP_CPAT_VPAT_CHAIN (CONTJ, VOISJ, i, CPAT, VPAT) ! OpenMP on atoms only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(THE_CHAIN, RPAT, RUNSEARCH, ERR, SAVR, TRING, INDTE, & !$OMP& j, k, l, m, n, o, LORA, LORB, RES, RES_LIST, TAILLE, SAUT) & !$OMP& SHARED(i, p, NUMTH, NS, NA, TLT, NSP, LOT, ISOLATED, CONTJ, VOISJ, CPAT, VPAT, & !$OMP& NUMA, MAXN, ACAC, AAAA, NOHP, TAILLC, TBR, ALC, ALC_TAB, NCELLS, PBC, SAVRING, NRING, ch) if (allocated(RPAT)) deallocate(RPAT) allocate(RPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RAPT" ALC=.true. goto 003 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 003 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 003 endif if(allocated(SAVR)) deallocate(SAVR) allocate(SAVR(TAILLC,NUMA,TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVR" ALC=.true. goto 003 endif if(allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 003 endif if(allocated(THE_CHAIN)) deallocate(THE_CHAIN) allocate(THE_CHAIN(TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THE_CHAIN" ALC=.true. goto 003 endif TRING(:)=0 SAVR(:,:,:)=0 !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA if (TBR .or. ALC) goto 002 if (TLT .eq. NSP+1 .or. LOT(j) .eq. TLT) then if ((ISOLATED .and. CPAT(j).eq.1) .or. (.not.ISOLATED .and. (CPAT(j).gt.0 .and. CPAT(j).ne.2))) then do l=1, CPAT(j) LORA=LOT(j) LORB=LOT(VPAT(j,l)) if (AAAA) then if (LORA .ne. LORB) then RUNSEARCH=.false. else RUNSEARCH=.true. endif else if (ACAC) then if (LORA .ne. LORB) then RUNSEARCH=.true. else RUNSEARCH=.false. endif else if (NOHP .and. LORA.eq.LORB) then RUNSEARCH=.false. else RUNSEARCH=.true. endif if (RUNSEARCH) then RPAT(:) = 0 do k=1, CPAT(j) RPAT(VPAT(j,k)) = 1 enddo RPAT(j)=1 THE_CHAIN(1)%ATOM=j THE_CHAIN(1)%SPEC=LORA THE_CHAIN(1)%NEIGHBOR=1 THE_CHAIN(2)%ATOM=VPAT(j,l) THE_CHAIN(2)%SPEC=LORB THE_CHAIN(2)%NEIGHBOR=CPAT(VPAT(j,l)) RES_LIST(:) = 0 INDTE(:) = 0 TAILLE=0 RES = CHECK_CHAIN (THE_CHAIN, 2, TAILLE, SAVR, TRING, INDTE, RES_LIST) if (ALC) ALC_TAB="CHECK_CHAIN" if (TBR .or. ALC) goto 002 if (CPAT(VPAT(j,l)) .eq. 2) then call INSIDE_CHAIN (THE_CHAIN, 2, TAILLE, LORA, LORB, RPAT, SAVR, TRING, INDTE, RES_LIST, CPAT, VPAT) if (ALC) ALC_TAB="INSIDE_CHAIN" endif if (TBR .or. ALC) goto 002 endif enddo endif endif 002 continue enddo !$OMP END DO NOWAIT if (TBR .or. ALC) goto 003 !$OMP CRITICAL do k=2, TAILLC if (TRING(k).gt.0) then if (NRING(k,i).gt.0) then o = 0 do l=1, TRING(k) do m=1, NRING(k,i) SAUT=.true. do n=1, k if (SAVRING(k,m,n) .ne. SAVR(k,l,n)) then SAUT=.false. exit endif enddo if (.not.SAUT) then SAUT=.true. do n=1, k if (SAVRING(k,m,k-n+1) .ne. SAVR(k,l,n)) then SAUT=.false. exit endif enddo endif if (SAUT) exit enddo if (.not.SAUT) then o = o + 1 if (NRING(k,i)+o .gt. NUMA) then TBR=.true. goto 004 endif do m=1, k SAVRING(k,NRING(k,i)+o,m) = SAVR(k,l,m) enddo endif enddo NRING(k,i)=NRING(k,i)+o else do l=1, TRING(k) do m=1, k SAVRING(k,l,m) = SAVR(k,l,m) enddo enddo NRING(k,i) = TRING(k) endif endif enddo 004 continue !$OMP END CRITICAL 003 continue if (allocated(RPAT)) deallocate (RPAT) if (allocated(RES_LIST)) deallocate (RES_LIST) if (allocated(INDTE)) deallocate (INDTE) if (allocated(TRING)) deallocate (TRING) if (allocated(SAVR)) deallocate (SAVR) if (allocated(THE_CHAIN)) deallocate (THE_CHAIN) !$OMP END PARALLEL if (ALC .or. TBR) goto 001 !do j=2, TAILLC ! write (6, '("s= ",i4,", j= ",i2,", nr(",i2,",",i4,")= ",i2)') i,j,j,i, NRING(j,i) ! if (NRING(j,i) .gt. 0) then ! do k=1, NRING(j,i) ! write (6, *) " k= ",k,", R(o)= ",SAVRING(j,k,1:j) ! enddo ! endif !enddo ch = ch + CHAINS_TO_OGL (i, NRING, SAVRING) enddo 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: CHAINS_SEARCH_ATOMS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(SAVRING)) deallocate (SAVRING) if (ch .eq. NS) ch = CHAINS_TO_OGL_MENU (NRING) END SUBROUTINE #endif #ifdef OPENMP SUBROUTINE CHAINS_SEARCH_STEPS (NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: NUMTH #else SUBROUTINE CHAINS_SEARCH_STEPS () USE PARAMETERS IMPLICIT NONE #endif TYPE (RING), DIMENSION(:), ALLOCATABLE :: THE_CHAIN INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING INTEGER :: RES, LORA, LORB, ch INTERFACE INTEGER FUNCTION CHECK_CHAIN (THE_CHAIN, CHAINE, TAE, RSAVED, TRING, INDE, RESL) USE PARAMETERS TYPE (RING), DIMENSION(TAILLC), INTENT(IN) :: THE_CHAIN INTEGER, INTENT(IN) :: CHAINE INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL END FUNCTION RECURSIVE SUBROUTINE INSIDE_CHAIN (THE_CHAIN, CID, TAE, LRA, LRB, NRPAT, RSAVED, TRING, INDE, RESL, CPT, VPT) USE PARAMETERS TYPE (RING), DIMENSION(TAILLC), INTENT(INOUT) :: THE_CHAIN INTEGER, INTENT(IN) :: CID, LRA, LRB INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT END SUBROUTINE INTEGER FUNCTION CHAINS_TO_OGL (STEP, NRI, RSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP INTEGER, DIMENSION(TAILLC, NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(IN) :: RSAVED END FUNCTION INTEGER FUNCTION CHAINS_TO_OGL_MENU (NRI) USE PARAMETERS INTEGER, DIMENSION(TAILLC, NS), INTENT(IN) :: NRI END FUNCTION END INTERFACE ch = 0 if (allocated(NRING)) deallocate(NRING) allocate(NRING(TAILLC,NS), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="NRING" ALC=.true. goto 001 endif NRING(:,:) = 0 #ifdef OPENMP ! OpenMP on steps only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(THE_CHAIN, RPAT, RUNSEARCH, ERR, SAVRING, TRING, INDTE, & !$OMP& j, k, l, m, n, o, LORA, LORB, RES, RES_LIST, CPAT, VPAT, TAILLE) & !$OMP& SHARED(i, p, NUMTH, NS, NA, TLT, NSP, LOT, ISOLATED, CONTJ, VOISJ, & !$OMP& NUMA, MAXN, ACAC, AAAA, NOHP, TAILLC, TBR, ALC, ALC_TAB, NCELLS, PBC, NRING, ch) #endif if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLC,NUMA,TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 002 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 002 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 002 endif if (allocated(RPAT)) deallocate(RPAT) allocate(RPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RPAT" ALC=.true. goto 002 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="REST_LIST" ALC=.true. goto 002 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 002 endif if(allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 002 endif if(allocated(THE_CHAIN)) deallocate(THE_CHAIN) allocate(THE_CHAIN(TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THE_CHAIN" ALC=.true. goto 002 endif #ifdef OPENMP !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS if (TBR .or. ALC) goto 003 SAVRING(:,:,:)=0 TRING(:)=0 call SETUP_CPAT_VPAT_CHAIN (CONTJ, VOISJ, i, CPAT, VPAT) do j=1, NA if (TLT .eq. NSP+1 .or. LOT(j) .eq. TLT) then if ((ISOLATED .and. CPAT(j).eq.1) .or. (.not.ISOLATED .and. (CPAT(j).gt.0 .and. CPAT(j).ne.2))) then do l=1, CPAT(j) LORA=LOT(j) LORB=LOT(VPAT(j,l)) if (AAAA) then if (LORA .ne. LORB) then RUNSEARCH=.false. else RUNSEARCH=.true. endif else if (ACAC) then if (LORA .ne. LORB) then RUNSEARCH=.true. else RUNSEARCH=.false. endif else if (NOHP .and. LORA.eq.LORB) then RUNSEARCH=.false. else RUNSEARCH=.true. endif if (RUNSEARCH) then RPAT(:) = 0 do k=1, CPAT(j) RPAT(VPAT(j,k)) = 1 enddo RPAT(j)=1 THE_CHAIN(1)%ATOM=j THE_CHAIN(1)%SPEC=LORA THE_CHAIN(1)%NEIGHBOR=1 THE_CHAIN(2)%ATOM=VPAT(j,l) THE_CHAIN(2)%SPEC=LORB THE_CHAIN(2)%NEIGHBOR=CPAT(VPAT(j,l)) RES_LIST(:) = 0 INDTE(:) = 0 TAILLE = 0 RES = CHECK_CHAIN (THE_CHAIN, 2, TAILLE, SAVRING, TRING, INDTE, RES_LIST) if (ALC) ALC_TAB="CHECK_CHAIN" if (TBR .or. ALC) goto 003 if (CPAT(VPAT(j,l)) .eq. 2) then call INSIDE_CHAIN (THE_CHAIN, 2, TAILLE, LORA, LORB, RPAT, SAVRING, TRING, INDTE, RES_LIST, CPAT, VPAT) if (ALC) ALC_TAB="INSIDE_CHAIN" endif if (TBR .or. ALC) goto 003 endif enddo endif endif enddo do j=1, TAILLC NRING(j,i) = TRING(j) enddo !do j=2, TAILLC ! write (6, '("s= ",i4,", j= ",i2,", nr(",i2,",",i4,")= ",i2)') i,j,j,i, NRING(j,i) ! if (NRING(j,i) .gt. 0) then ! do k=1, NRING(j,i) ! write (6, *) " k= ",k,", R(o)= ",SAVRING(j,k,1:j) ! enddo ! endif !enddo j = CHAINS_TO_OGL (i, NRING, SAVRING) #ifdef OPENMP !$OMP ATOMIC #endif ch = ch + j 003 continue enddo #ifdef OPENMP !$OMP END DO NOWAIT #endif 002 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: CHAINS_SEARCH_STEPS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(TRING)) deallocate (TRING) if (allocated(THE_CHAIN)) deallocate (THE_CHAIN) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(RPAT)) deallocate (RPAT) if (allocated(RES_LIST)) deallocate (RES_LIST) if (allocated(INDTE)) deallocate (INDTE) #ifdef OPENMP !$OMP END PARALLEL #endif if (ch .eq. NS) ch = CHAINS_TO_OGL_MENU (NRING) 001 continue END SUBROUTINE INTEGER FUNCTION CHECK_CHAIN (THE_CHAIN, CHAINE, TAE, RSAVED, TRING, INDE, RESL) USE PARAMETERS IMPLICIT NONE TYPE (RING), DIMENSION(TAILLC), INTENT(IN) :: THE_CHAIN INTEGER, INTENT(IN) :: CHAINE INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL INTERFACE SUBROUTINE SAVE_THIS_CHAIN (THE_CHAIN, TLES, RSAVED, TRING, INDT, RESL) USE PARAMETERS TYPE (RING), DIMENSION(TAILLC), INTENT(IN) :: THE_CHAIN INTEGER, INTENT(IN) :: TLES INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL, TRING END SUBROUTINE SUBROUTINE DEL_THIS_CHAIN (TLED, RSAVED, TRING, RESL, INDT) USE PARAMETERS INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL, TRING END END INTERFACE CHECK_CHAIN = 0 if (CHAINE .ge. TAE .and. CHAINE .le. TAILLC) then if (TAE .gt. 0) call DEL_THIS_CHAIN (TAE, RSAVED, TRING, RESL, INDE) TAE=CHAINE call SAVE_THIS_CHAIN (THE_CHAIN, TAE, RSAVED, TRING, INDE, RESL) if (TBR .or. ALC) CHECK_CHAIN = 1 endif END FUNCTION RECURSIVE SUBROUTINE INSIDE_CHAIN (THE_CHAIN, CID, TAE, LRA, LRB, & NRPAT, RSAVED, TRING, INDE, RESL, CPT, VPT) USE PARAMETERS IMPLICIT NONE TYPE (RING), DIMENSION(TAILLC), INTENT(INOUT) :: THE_CHAIN INTEGER, INTENT(IN) :: CID, LRA, LRB INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT INTEGER :: IND, RES LOGICAL :: ADDSP INTERFACE INTEGER FUNCTION CHECK_CHAIN (THE_CHAIN, CHAINE, TAE, RSAVED, TRING, INDE, RESL) USE PARAMETERS TYPE (RING), DIMENSION(TAILLC), INTENT(IN) :: THE_CHAIN INTEGER, INTENT(IN) :: CHAINE INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL END FUNCTION END INTERFACE if (CID .lt. TAILLC) then do while (THE_CHAIN(CID)%NEIGHBOR .ge. 1) IND = VPT(THE_CHAIN(CID)%ATOM, THE_CHAIN(CID)%NEIGHBOR) if (NRPAT(IND).eq.0 .and. CPT(IND).ge.1) then if (AAAA) then if (THE_CHAIN(CID)%SPEC .eq. LOT(IND)) then ADDSP=.true. else ADDSP=.false. endif else if (ACAC) then if (mod(CID,2).ne.0 .and. LOT(IND).eq.LRB) then ADDSP=.true. else if (mod(CID,2).eq.0 .and. LOT(IND).eq.LRA) then ADDSP=.true. else ADDSP=.false. endif else if (NOHP .and. THE_CHAIN(CID)%SPEC.eq.LOT(IND)) then ADDSP=.false. else ADDSP=.true. endif if (ADDSP .and. ((ISOLATED .and. CPT(IND).le.2) .or. .not.ISOLATED)) then THE_CHAIN(CID+1)%ATOM = IND THE_CHAIN(CID+1)%SPEC = LOT(IND) THE_CHAIN(CID+1)%NEIGHBOR = CPT(IND) NRPAT(IND)=1 RES = CHECK_CHAIN (THE_CHAIN, CID+1, TAE, RSAVED, TRING, INDE, RESL) if (TBR .or. ALC) goto 001 if (RES.eq.0 .and. CPT(IND).eq.2) then call INSIDE_CHAIN(THE_CHAIN, CID+1, TAE, LRA, LRB, NRPAT, RSAVED, TRING, INDE, RESL, CPT, VPT) if (TBR .or. ALC) goto 001 endif NRPAT(IND) = 0 endif endif THE_CHAIN(CID)%NEIGHBOR = THE_CHAIN(CID)%NEIGHBOR - 1 enddo endif 001 continue END SUBROUTINE INSIDE_CHAIN SUBROUTINE SAVE_THIS_CHAIN (THE_CHAIN, TLES, RSAVED, TRING, INDT, RESL) USE PARAMETERS IMPLICIT NONE TYPE (RING), DIMENSION(TAILLC), INTENT(IN) :: THE_CHAIN INTEGER, INTENT(IN) :: TLES INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL, TRING INTEGER :: idx, idy LOGICAL :: NEWCHAIN INTEGER, DIMENSION(TLES) :: TOSAV ! A ring has been found, we need to check if it has already been found or not do idx=1, TLES ! Creation of two tab first for the numerical sorting of the list ! The other without sorting for output TOSAV(idx)=THE_CHAIN(idx)%ATOM enddo if (TRING(TLES) .ne. 0) then do idx=1, TRING(TLES) ! do-loop on existing rings to check if the new on has already been found NEWCHAIN=.false. do idy=1, TLES if (TOSAV(idy) .ne. RSAVED(TLES,idx,idy)) then NEWCHAIN=.true. exit endif enddo if (NEWCHAIN) then NEWCHAIN=.false. do idy=1, TLES if (TOSAV(TLES-idy+1) .ne. RSAVED(TLES,idx,idy)) then NEWCHAIN=.true. exit endif enddo endif if (.not.NEWCHAIN) then ! Already been found n-times, increment of the counter INDT(idx)=INDT(idx)+1 exit endif enddo else NEWCHAIN=.true. endif if (NEWCHAIN) then RESL(TLES)=RESL(TLES)+1 TRING(TLES)=TRING(TLES)+1 if (TRING(TLES) .gt. NUMA) then TBR=.true. goto 001 endif INDT(TRING(TLES))=INDT(TRING(TLES))+1 do idx=1, TLES RSAVED(TLES,TRING(TLES),idx)=TOSAV(idx) enddo endif 001 continue END SUBROUTINE SUBROUTINE DEL_THIS_CHAIN (TLED, RSAVED, TRING, RESL, INDT) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL, TRING INTEGER :: xdel, did ! The max size of the ring possible for the triplet N1-At-N2 has down ! We have to delete the bigger rings already found for this triplet if (RESL(TLED) .ge. 1) then do xdel=0, RESL(TLED)-1 do did=1, TAILLC RSAVED(TLED,TRING(TLED)-xdel,did)=0 enddo INDT(:) = 0 enddo TRING(TLED)=TRING(TLED)-RESL(TLED) RESL(TLED)=0 endif END SUBROUTINE atomes_1.3.1/src/fortran/parameters.F900000664000175000017500000006244515212624223017405 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file parameters.F90 !! @short Global variable declarations !! @author Sébastien Le Roux !################################################################ ! This is the atomes code main include file which contains: ! - Variables ! - Structures ! used all along the code and classified as follow: ! ! - LOGICAL type variables ! - LOGICAL (:) type variables ! - LOGICAL (:,:) type variables ! ! - INTEGER type variables ! - INTEGER(:) type variables ! - INTEGER(:,:) type variables ! - INTEGER(:,:,:) type variables ! - INTEGER(:,:,:,:) type variables ! - INTEGER(:,:,:,:,:) type variables ! ! - CHARACTER type variables ! - CHARACTER(:) type variables ! - CHARACTER(:,:) type variables ! - CHARACTER(:,:,:) type variables ! ! - DOUBLE PRECISION type variables ! ! - DOUBLE PRECISION type variables ! - DOUBLE PRECISION(:) type variables ! - DOUBLE PRECISION(:,:) type variables ! - DOUBLE PRECISION(:,:,:) type variables ! - DOUBLE PRECISION(:,:,:,:) type variables ! ! - STRUCTURES definitions ! ! - MPI // Only variables ! ! furthermore inside this first selection variables ! have been sorted by routines when necessary/possible !################################################################ MODULE PARAMETERS USE, INTRINSIC :: iso_c_binding IMPLICIT NONE !#################################### LOGICAL VARIABLES ####################################! LOGICAL :: PBC=.false. ! 1/0 Enable or disable periodic boundary conditions LOGICAL :: FRAC=.false. ! 1/0 Lattice relatives or DOUBLE PRECISIONs positions for atoms LOGICAL :: NOHP=.false. ! 1/0 Enable/disable homopolar bonds in connectivty LOGICAL :: ABAB=.false. ! 1/0 Enable or disable only ABAB rings if more than 3 chemical species LOGICAL :: AAAA=.false. ! 1/0 Enable or disable only AAAA chains LOGICAL :: ACAC=.false. ! 1/0 Enable or disable only ABAB chains LOGICAL :: ISOLATED=.false. ! 1/0 1-2-2-1 chains or N-2-2-N N=1,3 ... chains LOGICAL :: TOMO=.false. ! 1/0 Homopolar or no homopolar bonds in the rings LOGICAL :: CALC_RINGS=.false. ! 1/0 Compute ring statistics LOGICAL :: CALC_R0=.false. ! 1/0 Find all existing rings in the box LOGICAL :: CALC_R1=.false. ! 1/0 Shortest Path analysis LOGICAL :: CALC_R2=.false. ! 1/0 King's analysis LOGICAL :: CALC_R3=.false. ! 1/0 SP + Homo LOGICAL :: CALC_R4=.false. ! 1/0 King's + Homo LOGICAL :: CALC_PRINGS=.false. ! 1/0 Compute primitive ring statistics LOGICAL :: CALC_STRINGS=.false. ! 1/0 Compute strongs ring statistics LOGICAL :: RING_P1=.false. ! 1/0 Compute first part of detailed ring properties LOGICAL :: RING_P2=.false. ! 1/0 Compute second part of detailed ring properties LOGICAL :: RING_P3=.false. ! 1/0 Compute third part of detailed ring properties LOGICAL :: RING_P4=.false. ! 1/0 Compute fourth part of detailed ring properties LOGICAL :: RING_P5=.false. ! 1/0 Compute fifth part of detailed ring properties LOGICAL :: OVERALL_CUBIC=.false. ! 1/0 Cubic a=b=c, 90.0, 90.0, 90.0 #ifdef OPENMP LOGICAL :: ALL_ATOMS=.false. ! 1/0 Force OpenMP on ATOMS #endif ! *rings*.f90 ! LOGICAL :: FACTATRING=.false. ! 1/0 Calculate atomic ring factor using the RN variable (thesis S. LE ROUX) LOGICAL :: FACTATPNA=.false. ! 1/0 Calculate atomic ring factor using the PN variable (thesis S. LE ROUX) LOGICAL :: FACTATRMAX=.false. ! 1/0 Calculate atomic ring factor using the Pmax var (thesis S. LE ROUX) LOGICAL :: FACTATRMIN=.false. ! 1/0 Calculate atomic ring factor using the Pmin var (thesis S. LE ROUX) LOGICAL :: RUNSEARCH ! 1/0 Run ring statistics in the case of 3 or more species LOGICAL :: ADDSPEC ! 1/0 Add to chain in the ring case of 3 or more species LOGICAL :: DOAMPAT=.false. ! 1/0 if CALC_R1,R2,R3 or R4 to known if there are paths > TAILLD LOGICAL :: SAUT, SSAUT LOGICAL :: FOUND LOGICAL :: PATHOUT LOGICAL :: FIRR, PIRR LOGICAL :: HOMO LOGICAL :: DOSEARCH LOGICAL :: TBR=.false. LOGICAL :: ALC=.false. LOGICAL :: NO_HOMO=.false. LOGICAL :: ALLRINGS=.false. !##########################################################################################! !###################################### INTEGER VARIABLES #####################################! !***************************************** Misc *******************************************! INTEGER :: h=0, i=0, j=0, k=0, l=0, m=0, n=0, o=0, p=0, r=0, t=0, u=0, v=0 INTEGER :: NOA, NOB, NOC, NOD, NOE INTEGER :: COUNTER, RATE_COUNT, MAX_COUNT INTEGER :: NSUB, NTSUB, TSUB, ERR INTEGER :: NL, NC, NSI, NSJ INTEGER :: NUMBER_OF_I INTEGER :: DTV INTEGER :: NBONDS, ANBONDS INTEGER :: NDX, NBX, IDR INTEGER :: GR_INDEX INTEGER :: SUM_INDEX INTEGER :: ANG_I INTEGER :: FINISH, INDEXMSF INTEGER :: Id1, Id2, Id, GtBsize INTEGER :: SPIRR INTEGER :: L_TOT, LA_TOT INTEGER :: NUMA, SC INTEGER :: PATH, NNP, NNA INTEGER :: LOA, LOB, LOC INTEGER :: MAXAT, MINAT INTEGER :: MAXST, MINST INTEGER :: GRNUM, SQNUM, SKNUM, GQNUM, BDNUM, ANNUM, RINUM, CHNUM, SHNUM, MSNUM INTEGER :: ab, abc !*************************************** Defined ******************************************! INTEGER :: NA, NUMBER_OF_A ! Number of atom in the box INTEGER :: NSP, NSP_BY_STEP ! Number of species INTEGER :: NS, NOS, NSTP ! Number of DM steps = Number of configurations INTEGER :: NSBG ! Number of step between each geomerty INTEGER :: TAILLR, TAILLD ! Depth for rings hunt INTEGER :: TAILLE, TAILLH, TAILLT ! Depth for rings hunt INTEGER :: TAILLC ! Depth for chains hunt INTEGER :: TLT, NTLT INTEGER :: NUMBER_OF_QMOD ! Number of Qvect modulus INTEGER :: NUMBER_OF_QVECT ! Number of Qvectors INTEGER :: LTLT ! Ring's hunt species INTEGER :: NCELLS ! Number of lattice 1 or MD steps if NPT calculation INTEGER :: IDGR=0 INTEGER :: IDSQ=1 INTEGER :: IDSK=2 INTEGER :: IDGRFFT=3 INTEGER :: IDBD=4 INTEGER :: IDAN=5 INTEGER :: IDRI=6 INTEGER :: IDCH=7 INTEGER :: IDSP=8 INTEGER :: IDMSD=9 INTEGER :: IDSKT=10 INTEGER :: MAXN=20 ! The maximun number of neighbors an atom can have ! *rings*.f90 ! INTEGER :: MOLATS INTEGER :: MOLSTEP INTEGER :: MOLCOUNTER INTEGER :: TMBS !##########################################################################################! !#################################### INTEGER(:) VARIABLES #####################################! !************************************* defined ********************************************! INTEGER, DIMENSION(:), ALLOCATABLE :: LOT INTEGER, DIMENSION(:), ALLOCATABLE :: NBSPBS ! Number of atom of species=index_1 ! prepdata.F90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: ATOMID ! dmtx.f90 ! INTEGER, DIMENSION(3) :: isize ! sk.f90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: degeneracy ! molecuels.f90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: MIBS ! bonds.F90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: TOT_GSA INTEGER, DIMENSION(:), ALLOCATABLE :: NTETRA INTEGER, DIMENSION(:), ALLOCATABLE :: LP_GEOM INTEGER, DIMENSION(:), ALLOCATABLE :: TOGL, TIGL INTEGER, DIMENSION(:), ALLOCATABLE :: LGSA, NGSA ! *rings*.f90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: RPAT, CPAT INTEGER, DIMENSION(:), ALLOCATABLE :: MOL_ATOMS ! alloc*rings.F90 - rings.F90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: RES_LIST INTEGER, DIMENSION(:), ALLOCATABLE :: APNA, SPNA INTEGER, DIMENSION(:), ALLOCATABLE :: VALID ! primrings.F90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: QUEUE, RINGSTAT INTEGER, DIMENSION(:), ALLOCATABLE :: NPRING, MATDIST !#################################### INTEGER (:,:) VARIABLES ###################################! ! bonds.F90 ! INTEGER, DIMENSION(:,:), ALLOCATABLE :: LT_GEOM INTEGER, DIMENSION(:,:), ALLOCATABLE :: GEOM_LA INTEGER, DIMENSION(:,:), ALLOCATABLE :: TOT_GEOMSA INTEGER, DIMENSION(:,:), ALLOCATABLE :: TETRA ! molecules.f90 ! INTEGER, DIMENSION(:,:), ALLOCATABLE :: TIIDA INTEGER, DIMENSION(:,:), ALLOCATABLE :: TISP ! dmtx.f90 ! INTEGER, DIMENSION(:,:), ALLOCATABLE :: CONTJ ! escs.F90 ! INTEGER, DIMENSION(:,:), ALLOCATABLE :: CORT INTEGER, DIMENSION(:,:), ALLOCATABLE :: EDGET INTEGER, DIMENSION(:,:), ALLOCATABLE :: DEFT INTEGER, DIMENSION(:,:), ALLOCATABLE :: CORTA INTEGER, DIMENSION(:,:), ALLOCATABLE :: EDGETA INTEGER, DIMENSION(:,:), ALLOCATABLE :: DEFTA INTEGER, DIMENSION(:,:), ALLOCATABLE :: TDA ! alloc*rings.F90 - rings.F90 ! INTEGER, DIMENSION(:,:), ALLOCATABLE, TARGET :: INDR INTEGER, DIMENSION(:,:), ALLOCATABLE, TARGET :: NRING INTEGER, DIMENSION(:,:), ALLOCATABLE :: VPAT INTEGER, DIMENSION(:,:), ALLOCATABLE :: INDRAT, NIRRAT, NIRR INTEGER, DIMENSION(:,:), ALLOCATABLE :: ATRMSX, ATRMSN INTEGER, DIMENSION(:,:), ALLOCATABLE :: AMPAT, ATRMAX, ATRMIN INTEGER, DIMENSION(:,:), ALLOCATABLE :: MAXPNA, MINPNA ! primrings.F90 ! INTEGER, DIMENSION(:,:), ALLOCATABLE :: PRING INTEGER, DIMENSION(:,:), ALLOCATABLE :: QUERNG, VREF INTEGER, DIMENSION(:,:), ALLOCATABLE :: PRINGORD !##########################################################################################! !#################################### INTEGER VARIABLES #################################! ! bonds.F90 ! INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: LA_COUNT ! escs.F90 ! INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: CORNER INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: EDGE INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: DEF INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: CORNERA INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: EDGEA INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: DEFA INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: TDSA ! dmtx.f90 ! INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: VOISJ ! bonds.f90 ! INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: STATBD ! allocrings.F90 - rings.F90 ! INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: INDRING, INDSRING, LIRR INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: ATRING, ATPNA, MATPNA INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: STPNA INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: PNA, SNA INTEGER, DIMENSION(:,:,:), ALLOCATABLE, TARGET :: RINGSAVED ! primrings.F90 ! INTEGER, DIMENSION(:,:,:), ALLOCATABLE, TARGET :: SRINGSAVED !##########################################################################################! !################################## INTEGER(:,:,:,:) VARIABLES #################################! ! angles.f90 ! ! allocrings.F90 - rings.F90 ! INTEGER, DIMENSION(:,:,:,:), ALLOCATABLE, TARGET :: RINGORD ! allocprims.f90 - primrings.F90 ! INTEGER, DIMENSION(:,:,:,:), ALLOCATABLE, TARGET :: SRINGORD !##########################################################################################! !###################################### CHARACTER VARIABLES ####################################! ! Misc ! CHARACTER (LEN=15) :: sdate, stime, szone ! Starting date and time CHARACTER (LEN=15) :: edate, etime, ezone ! Ending date and time CHARACTER (LEN=9) :: PROGNAME="ATOMES" ! misc ! CHARACTER (LEN=2) :: CHOOSE CHARACTER (LEN=2) :: A1, A2 CHARACTER (LEN=2) :: ATOT CHARACTER (LEN=20) :: NOM_TMP CHARACTER (LEN=15) :: NTMP, NTMP2, NTMP3, Nstep, Nomx, Nomy CHARACTER (LEN=15) :: Nom, Nom1, Nom2, Nom3, Nom4 CHARACTER (LEN=40) :: NomSys, NomS CHARACTER (LEN=16) :: SPIND CHARACTER (LEN=20) :: ALC_TAB !##########################################################################################! !##################################### CHARACTER (:) VARIABLES ###################################! ! Misc ! CHARACTER (LEN=2), DIMENSION(:), ALLOCATABLE :: TL, FTAB ! Label of species=index_1 CHARACTER (LEN=2), DIMENSION(:), ALLOCATABLE :: TAB_OF_TYPE ! List of atom by name(species)=indx_1, by DM step=indx_2 CHARACTER (LEN=2), DIMENSION(:), ALLOCATABLE :: LABEL ! Label of species=index in input ! prepdata.F90 ! CHARACTER (LEN=15), DIMENSION(:), ALLOCATABLE :: ELEMID !##########################################################################################! !#################################### CHARACTER (:,:) VARIABLES ##################################! CHARACTER (LEN=12), DIMENSION(:,:), ALLOCATABLE :: LISTE_GEOMS !##########################################################################################! !################################### CHARACTER (:,:,:) VARIABLES #################################! ! CHARACTER (LEN=12), DIMENSION(:,:,:), ALLOCATABLE :: LGEO CHARACTER (LEN=12), DIMENSION(:,:,:), ALLOCATABLE :: LGEO !##########################################################################################! !###################################### DOUBLE PRECISION VARIABLES ####################################! DOUBLE PRECISION :: LTEMP !##########################################################################################! !###################################### DOUBLE PRECISION VARIABLES ##################################! ! Misc ! DOUBLE PRECISION :: w=0.0d0, x=0.0d0, y=0.0d0, z=0.0d0 DOUBLE PRECISION, PARAMETER :: PI=acos(-1.0) DOUBLE PRECISION, PARAMETER :: AVOGADRO=6.02214179d0 DOUBLE PRECISION, PARAMETER :: ANGTOBOHR=0.52917721 DOUBLE PRECISION :: p1, p2, p3 DOUBLE PRECISION :: TIME_TOT, tstat DOUBLE PRECISION :: MBOX DOUBLE PRECISION :: BOXS2 DOUBLE PRECISION :: BASE DOUBLE PRECISION :: TETA DOUBLE PRECISION :: DC DOUBLE PRECISION :: DELTA_ANG DOUBLE PRECISION :: MEANVOL DOUBLE PRECISION :: TOTAL_DENSITY, REAL_DENSITY DOUBLE PRECISION :: FREEVOL, ECFREEV DOUBLE PRECISION :: Dij, Dil, Vij DOUBLE PRECISION :: Gr_cutoff DOUBLE PRECISION :: CUTF !DOUBLE PRECISION :: A2A, B2B, C2C, AAA, BBB, CCC ! sq.f90 ! DOUBLE PRECISION :: Phi, Sinus_phi ! sk.f90 ! DOUBLE PRECISION :: NORM_TOT, DELTA_Q DOUBLE PRECISION :: Rmax, Sinus_Fact_Rmax, Fact_Rmax DOUBLE PRECISION :: SIGMA_LISS DOUBLE PRECISION :: qvmod, qvmax, qvmin !##########################################################################################! !#################################### DOUBLE PRECISION (:) VARIABLES ##################################! ! Misc ! DOUBLE PRECISION, DIMENSION(3) :: Rij, Ril, Rim, Dab, VAR ! Position vector DOUBLE PRECISION, DIMENSION(3) :: R2ij, R2Cor, RCm, RCm2 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: S_LENGTH DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MASS, M_SS DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: RVDW, R_DW DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: Dcte ! Diffusion Cte DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: DIST_IJ, DIST_JI DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: CMOY, Xi DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MTABL ! dmtx.f90 ! DOUBLE PRECISION, DIMENSION(3) :: CUTFV DOUBLE PRECISION, DIMENSION(3) :: pmin, pmax ! bonds.F90 ! DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MAC DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: SA_COUNT ! escs.f90 ! DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: EABL, CABL, DABL DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: ETABL, CTABL, DTABL DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: ECTABL, TDTABL ! gr.f90 ! DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: R_POINT DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: GRTAB DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: GrTOT, GgrTOT ! Total RDF DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: Drn, Trn ! Total RDF DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: XGrTOT, XGgrTOT ! Total RDF DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: Drx, Trx ! Total RDF DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: SHELL_VOL ! Shell volume as a function of d=(index-0.5)DELTA ! sq.f90 ! DOUBLE PRECISION, DIMENSION(2) :: Gd, Gn, Go, C_Box DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: NSCATTL ! Neutron Scattering Length of species=index DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: XSCATTL ! X-ray Scattering Length of species=index DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: S, XS ! Total structure factor \\ Go=f(G(r)) DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: Gr_T DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: Q_POINT, K_POINT ! sk.f90 - utils.f90 ! DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: FNBSPBS DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: modq DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: qvectx, qvecty, qvectz DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: cij, sik ! grfft.f90 ! DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: GFFT, DFFT, R_PFFT, TDFFT ! resrings.f90 ! DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MOYPUR, MOYRED DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MOYPAT, MOYRAT DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: ECTYPE, ECTYP, ECTYPAT, ECTAT DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: IRRED, RED DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: REDAT, IRRAT DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: TOTPSTEP DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: RNAMAX, RNAMIN DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: EVMAX, EVMIN !##########################################################################################! !################################## DOUBLE PRECISION (:,:) VARIABLES ##################################! ! Misc ! DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: EPNA DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: POA, POB ! Atm=indx_1, coord=indx_2(1=x, 2=y, 3=z) ! bonds.F90 ! DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: MA_COUNT DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: NUM_GSA DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: Gr_CUT, Gr_TMP ! fzbt.f90 ! DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: BTij ! Bathia-Thornton Partial g(r)/s(q) ! escs.F90 ! DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: ETYPE DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: CTYPE DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: DETYPE DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: ETYPEA DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: CTYPEA DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: DETYPEA DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: ETDA ! sk.f90 ! DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: qvect ! msd.f90 ! DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: DRIFT, COR DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: D2i, D2iNAC !##########################################################################################! !################################# DOUBLE PRECISION (:,:,:) VARIABLES #################################! ! Misc ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: FULLPOS DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: FULLVEL DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: NFULLPOS, NFPOS DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: ECART_TYPE ! gr.f90 ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: Gr_ij ! Average of the RDF on all the MD run DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: Ggr_ij ! Average of the RDF on all the MD run DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: Dn_ij ! Average of the Dn on all the MD run ! grfft.f90 ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: GQBT ! sq.f90 ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: Sij, Spij ! Partial structure factor DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: Ss_ij ! Partial structure factor ! fzbt.f90 ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: FZSij ! msd.f90 ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: D2ij, D2ijNAC, D2dir, D2dirNAC DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: CORNAC !##########################################################################################! !################################ DOUBLE PRECISION (:,:,:,:) VARIABLES ################################! ! gr.F90 ! DOUBLE PRECISION, DIMENSION(:,:,:,:), ALLOCATABLE :: Gij ! RDF distance=index_1, atom_a=index_2, atom_b=index_3, step=index_4 DOUBLE PRECISION, DIMENSION(:,:,:,:), ALLOCATABLE :: Dn ! Dn distance=index_1, atom_a=index_2, atom_b=index_3, step=index_4 !##########################################################################################! !################################ STRUCTURES VARIABLES Definition ###############################! !TYPE ATOM ! ! INTEGER :: INDICE ! ! INTEGER :: ELEMENT ! ! INTEGER :: NEIGHBOR ! Atom structure definition ! DOUBLE PRECISION :: X, Y, Z ! ! TYPE (ATOM), POINTER :: PAST ! ! TYPE (ATOM), POINTER :: NEXT ! !END TYPE ATOM ! !TYPE MOLECULE ! ! INTEGER :: INDICE ! ! INTEGER :: ATOMS ! ! TYPE (ATOM), POINTER :: FIRST_ATOM ! ! TYPE (ATOM), POINTER :: LAST_ATOM ! Molecule structure definition ! TYPE (MOLECULE), POINTER :: NEXT_MOL ! ! TYPE (MOLECULE), POINTER :: PAST_MOL ! !END TYPE MOLECULE !TYPE MODEL ! ! INTEGER :: ATOMS ! ! INTEGER :: MOLECULES ! Model structure definition ! TYPE (MOLECULE), POINTER :: FIRST_MOL ! ! TYPE (MOLECULE), POINTER :: LAST_MOL ! !END TYPE MODEL ! !TYPE (ATOM), POINTER :: AT ! !TYPE (MOLECULE), POINTER :: MOL ! !TYPE (MODEL), POINTER :: MODL ! TYPE AT INTEGER :: IND TYPE (AT), POINTER :: NEXT TYPE (AT), POINTER :: PREV END TYPE AT TYPE MOL INTEGER :: MID INTEGER :: STEP INTEGER :: ATOMES INTEGER, DIMENSION(:), ALLOCATABLE :: BSP TYPE (AT), POINTER :: FIRST_AT TYPE (AT), POINTER :: ATOM TYPE (MOL), POINTER :: NEXT TYPE (MOL), POINTER :: PREV END TYPE MOL TYPE RING ! INTEGER :: ATOM ! INTEGER :: NEIGHBOR ! Ring structure definition INTEGER :: SPEC ! TYPE (RING), POINTER :: PAST ! used in the ring search subroutines TYPE (RING), POINTER :: NEXT ! END TYPE RING ! TYPE PIXEL ! INTEGER :: NEIGHBOR ! Pixel structure definition INTEGER :: ATOMS ! INTEGER, DIMENSION(:), ALLOCATABLE :: ATOM_ID ! LOGICAL :: TOCHECK ! LOGICAL :: CHECKED ! INTEGER, DIMENSION(27) :: IDNEIGH ! END TYPE PIXEL TYPE (PIXEL), DIMENSION(:), ALLOCATABLE :: THEPIX, TESTPIX TYPE LATTICE LOGICAL :: GLASS=.false. ! 1/0 if the structure is 'cubic like' (90/90/90) LOGICAL :: CUBIC=.false. ! 1/0 if the structure is 'cubic' (90/90/90, a=b=c) DOUBLE PRECISION :: VOLUME DOUBLE PRECISION, DIMENSION(3) :: modv ! Lattice parameters DOUBLE PRECISION :: minv, maxv ! Min, max a,b, c DOUBLE PRECISION, DIMENSION(3) :: modr ! Reciprocal lattice parameters DOUBLE PRECISION :: minr, maxr ! Min, max, ra, rb, rc DOUBLE PRECISION, DIMENSION(3,3) :: lvect ! Lattice vectors DOUBLE PRECISION, DIMENSION(3,3) :: lrecp ! Reciprocal lattice vectors DOUBLE PRECISION, DIMENSION(3,3) :: fractocart, carttofrac ! Conversion matrix END TYPE LATTICE TYPE (LATTICE), DIMENSION(:), ALLOCATABLE, TARGET :: THE_BOX TYPE (LATTICE), POINTER :: NBOX !##########################################################################################! !##########################################################################################! END MODULE PARAMETERS ! ######################################## EOF ###########################################! atomes_1.3.1/src/fortran/vas.F900000664000175000017500000000621515212624223016024 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file vas.F90 !! @short Unused: read atomic coordinates in VASP trajectory format - old version !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION read_vas(vas_f, lvas, navas, nbsvas, is_npt) BIND (C,NAME='read_vas_') ! ! Lecture of atom types and coordinates - VASP trajectory ! USE PARAMETERS IMPLICIT NONE LOGICAL :: isok INTEGER :: NVAS INTEGER (KIND=c_int), INTENT(IN) :: lvas, navas, is_npt INTEGER (KIND=c_int), DIMENSION(NSP), INTENT(IN) :: nbsvas CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: vas_f CHARACTER (LEN=lvas) :: vas_file do i=1, lvas vas_file(i:i) = vas_f(i) enddo read_vas=1 inquire (file=vas_file, exist=isok) if (isok) then open (unit=20, file=vas_file, action='read', status='old', err=001) NS=0 NA=navas NVAS=TEST_VAS(20, NA) if (NVAS.ge.1) then rewind(20) if (allocated(FULLPOS)) deallocate(FULLPOS) allocate (FULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_vas"//CHAR(0), "Table: FULLPOS"//CHAR(0)) endif if (allocated(TAB_OF_TYPE)) deallocate(TAB_OF_TYPE) allocate (TAB_OF_TYPE(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_vas"//CHAR(0), "Table: TAB_OF_TYPE"//CHAR(0)) endif do i=1, NVAS read (20, *, err=002) enddo do i=1, NS ! Read the 'Konfig' line read (20, *, err=002) l=1 do j=1, NSP do k=1, nbsvas(j) read (20, *, err=002) FULLPOS(l,1,i), FULLPOS(l,2,i), FULLPOS(l,3,i) TAB_OF_TYPE(l)= LABEL(j) l=l+1 enddo enddo enddo if (is_npt .eq. 1) call send_steps (NS) read_vas=0 else read_vas=2 endif 002 continue close (20) 001 continue endif CONTAINS INTEGER FUNCTION TEST_VAS(UNITFILE, NATL) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: UNITFILE, NATL INTEGER :: LENF INTEGER :: EOF rewind(UNITFILE) EOF=0 LENF=0 do while (EOF .eq. 0) read (UNITFILE, *, iostat=EOF) LENF=LENF+1 enddo LENF=LENF-1 if (mod(LENF-7,NATL+1) .eq. 0) then NS=(LENF-7)/(NATL+1) TEST_VAS=7 else if (mod(LENF-6,NATL+1) .eq. 0) then NS=(LENF-6)/(NATL+1) TEST_VAS=6 else if (mod(LENF-5,NATL+1) .eq. 0) then NS=(LENF-5)/(NATL+1) TEST_VAS=5 else TEST_VAS=0 endif END FUNCTION END FUNCTION atomes_1.3.1/src/fortran/gr.F900000664000175000017500000003617715212624223015655 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file gr.F90 !! @short g(r) analysis: direct real space calculation !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION g_of_r (NDR, DTR, FCR) BIND (C,NAME='g_of_r_') ! Radial Pair Distribution function ! ! -2 V ! g(r)= rho < Sum Sum d(ri)d(rj-r) > = -- < Sum Sum d(r-rij) > ! i j!i N² i j!i ! ! ! ! ! 1 rho(b) rho(b) ! g (r)= ------------ Sum Sum ---------- = Sum Sum ------------------ ! ab 4*PI*Delat(r) a b!a d(ab)²*N(a) a b!a Vshell(d(ab))*N(a) ! USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NDR, FCR REAL (KIND=c_double), INTENT(IN) :: DTR DOUBLE PRECISION :: Hcap1, Hcap2, Vcap, Dgr DOUBLE PRECISION :: NORM_FACT, GRLIM DOUBLE PRECISION :: SUML, XSUML LOGICAL :: IS_CRYSTAL=.false. #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE LOGICAL FUNCTION ALLOCGR(NDR) INTEGER, INTENT(IN) :: NDR END FUNCTION LOGICAL FUNCTION GRBT(GrToBT, NDTR) USE PARAMETERS INTEGER, INTENT(IN) :: NDTR DOUBLE PRECISION, DIMENSION(NDTR,NSP,NSP), INTENT(IN) :: GrToBT END FUNCTION DOUBLE PRECISION FUNCTION CALCDIJ (R12, AT1, AT2, STEP_1, STEP_2, SID) DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION END INTERFACE if (.not. allocgr(NDR)) then g_of_r = 0 goto 001 endif do i=1, NDR+1 SHELL_VOL(i) = 0.0d0 SHELL_VOL(i) = 4.0d0*PI*(((i-1)*DTR+DTR)**3 - ((i-1)*DTR)**3)/3 ! To take into account the atoms between a/2 and a srqt(3)/2 ! We need the small volume they can be found in. if (OVERALL_CUBIC .and. i*DTR.gt.MBOX) then Hcap1=i*DTR-MBOX if ((i-1)*DTR .le. MBOX) then Hcap2=0.0d0 else Hcap2=(i-1)*DTR-MBOX endif Vcap=Hcap1**2*(3*i*DTR - Hcap1) - Hcap2**2*(3*(i-1)*DTR - Hcap2) Vcap=Vcap*PI*2 SHELL_VOL(i)=SHELL_VOL(i)-Vcap endif enddo GRLIM = NDR*DTR GRLIM = GRLIM*GRLIM #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. #endif if (IS_CRYSTAL) then ! To write the case of highly distoreded crystal else #ifdef OPENMP if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA ! OpemMP on atoms only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(Dgr, Dij, Rij, GR_INDEX, NORM_FACT, i, j, k, l, m, n) & !$OMP& SHARED(NUMTH, NS, NA, NCELLS, LOT, NBSPBS, SHELL_VOL, DTR, MEANVOL, GRLIM, Gij, Dn, NSP, NDR) !$OMP DO SCHEDULE(STATIC,NA-1/NUMTH) do i=1, NA-1 do k=1, NS do j=i+1, NA if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij,i,j,k,k,k) else Dij = CALCDIJ (Rij,i,j,k,k,1) endif if (Dij <= GRLIM) then l=LOT(i) m=LOT(j) Dgr = sqrt(Dij) if (l .eq. m) then n = NBSPBS(l)-1 else n = NBSPBS(l) endif GR_INDEX = int(Dgr/DTR)+1 NORM_FACT = 1.0d0/(SHELL_VOL(GR_INDEX)*dble(n)) !$OMP ATOMIC Gij(GR_INDEX,l,m,k) = Gij(GR_INDEX,l,m,k) + NORM_FACT/(dble(NBSPBS(m))/MEANVOL) !$OMP ATOMIC Dn(GR_INDEX,l,m,k) = Dn(GR_INDEX,l,m,k) + 1.0d0 endif enddo enddo enddo !$OMP END DO NOWAIT !$OMP END PARALLEL else ! OpemMP on MD steps !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(Dgr, Dij, Rij, GR_INDEX, NORM_FACT, i, j, k, l, m, n) & !$OMP& SHARED(NUMTH, NS, NA, NCELLS, LOT, NBSPBS, SHELL_VOL, DTR, MEANVOL, GRLIM, Gij, Dn, NSP, NDR) !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do k=1, NS do i=1, NA-1 do j=i+1, NA if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij,i,j,k,k,k) else Dij = CALCDIJ (Rij,i,j,k,k,1) endif if (Dij <= GRLIM) then l=LOT(i) m=LOT(j) Dgr = sqrt(Dij) if (l .eq. m) then n = NBSPBS(l)-1 else n = NBSPBS(l) endif GR_INDEX = int(Dgr/DTR)+1 NORM_FACT = 1.0d0/(SHELL_VOL(GR_INDEX)*dble(n)) #ifdef OPENMP !$OMP ATOMIC #endif Gij(GR_INDEX,l,m,k) = Gij(GR_INDEX,l,m,k) + NORM_FACT/(dble(NBSPBS(m))/MEANVOL) #ifdef OPENMP !$OMP ATOMIC #endif Dn(GR_INDEX,l,m,k) = Dn(GR_INDEX,l,m,k) + 1.0d0 endif enddo enddo enddo #ifdef OPENMP !$OMP END DO NOWAIT !$OMP END PARALLEL endif #endif endif do i=1, NDR do l=1, NS do j=1, NSP Dn(i,j,j,l) = 2.0d0*Dn(i,j,j,l)/dble(NBSPBS(j)-1) enddo do j=1, NSP-1 do k=j+1, NSP Dn(i,j,k,l) = Dn(i,j,k,l)+Dn(i,k,j,l) Dn(i,k,j,l) = Dn(i,j,k,l) Dn(i,j,k,l) = Dn(i,j,k,l)/dble(NBSPBS(j)) Dn(i,k,j,l) = Dn(i,k,j,l)/dble(NBSPBS(k)) enddo enddo enddo enddo do i=2, NDR do l=1, NS do j=1, NSP do k=1, NSP Dn(i,j,k,l) = Dn(i-1,j,k,l) + Dn(i,j,k,l) enddo enddo enddo enddo do i=1, NSP do j=1, NSP do k=1, NDR do l=1, NS Dn_ij(k,i,j) = Dn_ij(k,i,j) + Dn(k,i,j,l) Gr_ij(k,i,j) = Gr_ij(k,i,j) + Gij(k,i,j,l) enddo Gr_ij(k,i,j) = Gr_ij(k,i,j)/dble(NS) Dn_ij(k,i,j) = Dn_ij(k,i,j)/dble(NS) enddo enddo enddo do k=1, NDR do l=1, NSP Gr_ij(k,l,l) = 2.0d0*Gr_ij(k,l,l) enddo do j=1, NSP-1 do i=j+1, NSP Gr_ij(k,i,j) = Gr_ij(k,i,j) + Gr_ij(k,j,i) Gr_ij(k,j,i) = Gr_ij(k,i,j) enddo enddo enddo if (allocated(Dn)) deallocate(Dn) if (allocated(Gij)) deallocate(Gij) l = 16 do i=1, NSP do j=1, NSP do k=1, NDR GRTAB(k)=Gr_ij(k,i,j) enddo call save_curve (NDR, GRTAB, l, IDGR) l = l+2 do k=1, NDR Ggr_ij(k,i,j) = (Gr_ij(k,i,j)-1.0)*4.0*PI*(NA/MEANVOL)*(k-0.5)*DTR GRTAB(k) = Ggr_ij(k,i,j) enddo call save_curve (NDR, GRTAB, l, IDGR) l = l+2 do k=1, NDR GRTAB(k)=Dn_ij(k,i,j) enddo call save_curve (NDR, GRTAB, l, IDGR) l = l+1 enddo enddo if (NSP .eq. 2) then if (GRBT(Gr_ij, NDR)) then do k=1, NDR GRTAB(k)=BTij(k,1) enddo call save_curve (NDR, GRTAB, l, IDGR) l = l+2 do k=1, NDR GRTAB(k)=BTij(k,2) enddo call save_curve (NDR, GRTAB, l, IDGR) l = l+2 do k=1, NDR GRTAB(k)=BTij(k,3) enddo call save_curve (NDR, GRTAB, l, IDGR) endif if (allocated(BTij)) deallocate(BTij) endif SUML=0.0d0 XSUML=0.0d0 do k=1, NSP SUML=SUML+NSCATTL(k)*Xi(k) XSUML=XSUML+XSCATTL(k)*Xi(k) enddo SUML=SUML*SUML XSUML=XSUML*XSUML ! Attention bi(NSCATTL(i) dans le code) en fm et bi² en barn = fm*fm*1e-2 = 1e-24cm² do i=1, NDR do j=1, NSP do k=1, NSP GrTOT(i) = GrTOT(i) + Xi(j)*Xi(k)*NSCATTL(j)*NSCATTL(k)*Gr_ij(i,j,k) GgrTOT(i) = GgrTOT(i) + Xi(j)*Xi(k)*NSCATTL(j)*NSCATTL(k)*Ggr_ij(i,j,k) XGrTOT(i) = XGrTOT(i) + Xi(j)*Xi(k)*XSCATTL(j)*XSCATTL(k)*Gr_ij(i,j,k) XGgrTOT(i) = XGgrTOT(i) + Xi(j)*Xi(k)*XSCATTL(j)*XSCATTL(k)*Ggr_ij(i,j,k) enddo enddo GrTOT(i) = GrTOT(i)/SUML Drn(i) = GgrTOT(i) Trn(i) = Drn(i) + 4.0*PI*(NA/MEANVOL)*(i-0.5)*DTR*SUML GgrTOT(i) = GgrTOT(i)/SUML XGrTOT(i) = XGrTOT(i)/XSUML Drx(i) = XGgrTOT(i) Trx(i) = Drx(i) + 4.0*PI*(NA/MEANVOL)*(i-0.5)*DTR*XSUML XGgrTOT(i) = XGgrTOT(i)/XSUML enddo do i=1, NDR GRTAB(i) = GrTOT(i) enddo call save_curve (NDR, GRTAB, 0, IDGR) do i=1, NDR GRTAB(i) = GgrTOT(i) enddo call save_curve (NDR, GRTAB, 2, IDGR) do i=1, NDR GRTAB(i) = Drn(i) enddo call save_curve (NDR, GRTAB, 4, IDGR) do i=1, NDR GRTAB(i) = Trn(i) enddo call save_curve (NDR, GRTAB, 6, IDGR) do i=1, NDR GRTAB(i) = XGrTOT(i) enddo call save_curve (NDR, GRTAB, 8, IDGR) do i=1, NDR GRTAB(i) = XGgrTOT(i) enddo call save_curve (NDR, GRTAB, 10, IDGR) do i=1, NDR GRTAB(i) = Drx(i) enddo call save_curve (NDR, GRTAB, 12, IDGR) do i=1, NDR GRTAB(i) = Trx(i) enddo call save_curve (NDR, GRTAB, 14, IDGR) if (FCR .eq. 1) call FITCUTOFFS g_of_r=1 001 continue if (allocated(Dn)) deallocate (Dn) if (allocated(Gij)) deallocate (Gij) if (allocated(Dn_ij)) deallocate (Dn_ij) if (allocated(GRTAB)) deallocate (GRTAB) if (allocated(GgrTOT)) deallocate (GgrTOT) if (allocated(XGgrTOT)) deallocate (XGgrTOT) if (allocated(Trn)) deallocate (Trn) if (allocated(Trx)) deallocate (Trx) if (allocated(Drn)) deallocate (Drn) if (allocated(Drx)) deallocate (Drx) if (allocated(Ggr_ij)) deallocate (Ggr_ij) if (allocated(Gr_ij)) deallocate (Gr_ij) if (allocated(SHELL_VOL)) deallocate(SHELL_VOL) CONTAINS SUBROUTINE FITCUTOFFS INTERFACE INTEGER FUNCTION CUTFIT (TABTOFIT, NPOINTS) INTEGER, INTENT(IN) :: NPOINTS DOUBLE PRECISION, DIMENSION(NPOINTS), INTENT(IN) :: TABTOFIT END FUNCTION END INTERFACE if (allocated(GFFT)) deallocate(GFFT) allocate(GFFT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: FITCUTOFFS"//CHAR(0), "Table: GFFT"//CHAR(0)) endif do l=1, NSP do j=1, NSP do k=1, NDR GFFT(k)=Gr_ij(k,l,j) enddo Gr_CUT(l,j) = (CUTFIT(GFFT, NDR) - 0.5) * DTR enddo enddo Gr_cutoff = (CUTFIT(GrTOT, NDR) - 0.5) * DTR call sendcutoffs(NSP, Gr_cutoff, Gr_CUT) if (allocated(GFFT)) deallocate(GFFT) END SUBROUTINE END FUNCTION INTEGER FUNCTION CUTFIT (TABTOFIT, NPOINTS) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: NPOINTS DOUBLE PRECISION, DIMENSION(NPOINTS), INTENT(IN) :: TABTOFIT o = 1 p = 0 do while (p .eq. 0) r=INT(o+1+ANint(5.0*dble(NPOINTS)/dble(100*NS))) if (o.eq.NPOINTS .or. r.gt.NPOINTS) exit if (TABTOFIT(o) .le. TABTOFIT(o+1)) then o=o+1 else if (TABTOFIT(o) .le. TABTOFIT(r)) then o=o+1 else if (TABTOFIT(o) .le. 0.05) then o=o+1 else p=1 endif enddo p = 0 do while (p .eq. 0) r=INT(o+1+ANint(5.0*dble(NPOINTS)/dble(100*NS))) if (o.eq.NPOINTS .or. r.gt.NPOINTS) exit if (TABTOFIT(o) .le. TABTOFIT(o+1)) then o=o+1 else if (TABTOFIT(o) .le. TABTOFIT(r)) then o=o+1 else p=1 endif enddo CUTFIT = o END FUNCTION LOGICAL FUNCTION ALLOCGR (NDR) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: NDR ALLOCGR=.true. if (allocated(SHELL_VOL)) deallocate(SHELL_VOL) allocate(SHELL_VOL(NDR+1), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: SHELL_VOL"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Gij)) deallocate(Gij) allocate(Gij(NDR+1,NSP,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Gij"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Dn)) deallocate(Dn) allocate(Dn(NDR+1,NSP,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Dn"//CHAR(0)) ALLOCGR=.false. goto 001 endif Gij(:,:,:,:)=0.0d0 Dn(:,:,:,:)=0.0d0 if (allocated(XGrTOT)) deallocate(XGrTOT) allocate(XGrTOT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: XGrTOT"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(GrTOT)) deallocate(GrTOT) allocate(GrTOT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: GrTOT"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Gr_ij)) deallocate(Gr_ij) allocate(Gr_ij(NDR,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Gr_ij"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Dn_ij)) deallocate(Dn_ij) allocate(Dn_ij(NDR,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Dn_ij"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(GRTAB)) deallocate(GRTAB) allocate(GRTAB(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: GRTAB"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Ggr_ij)) deallocate(Ggr_ij) allocate(Ggr_ij(NDR,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Ggr_ij"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(GgrTOT)) deallocate(GrTOT) allocate(GgrTOT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: GgrTOT"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(XGgrTOT)) deallocate(XGgrTOT) allocate(XGgrTOT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: XGgrTOT"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Trn)) deallocate(Trn) allocate(Trn(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Trn"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Drn)) deallocate(Drn) allocate(Drn(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Drn"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Trx)) deallocate(Trx) allocate(Trx(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Trx"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Drx)) deallocate(Drx) allocate(Drx(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Drx"//CHAR(0)) ALLOCGR=.false. goto 001 endif GrTOT(:)=0.0d0 XGrTOT(:)=0.0d0 GRTAB(:)=0.0d0 GgrTOT(:)=0.0d0 XGgrTOT(:)=0.0d0 Trn(:)=0.0d0 Trx(:)=0.0d0 Drn(:)=0.0d0 Drx(:)=0.0d0 Gr_ij(:,:,:)=0.0d0 Dn_ij(:,:,:)=0.0d0 Ggr_ij(:,:,:)=0.0d0 001 continue END FUNCTION atomes_1.3.1/src/fortran/initrings.F900000664000175000017500000001151715212624223017242 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file initrings.F90 !! @short Initialize ring statistics !! @author Sébastien Le Roux LOGICAL FUNCTION ALLOCRINGS() ! ! Memory allocation for ring statistics ! USE PARAMETERS IMPLICIT NONE if(allocated(NRING)) deallocate(NRING) allocate(NRING(TAILLR,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCRINGS"//CHAR(0), "Table: NRING"//CHAR(0)) ALLOCRINGS=.false. goto 001 endif if (allocated(PNA)) deallocate(PNA) allocate(PNA(TAILLR,TAILLR,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCRINGS"//CHAR(0), "Table: PNA"//CHAR(0)) ALLOCRINGS=.false. goto 001 endif if (allocated(MAXPNA)) deallocate(MAXPNA) allocate(MAXPNA(TAILLR,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCRINGS"//CHAR(0), "Table: MAXPNA"//CHAR(0)) ALLOCRINGS=.false. goto 001 endif if (allocated(MINPNA)) deallocate(MINPNA) allocate(MINPNA(TAILLR,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCRINGS"//CHAR(0), "Table: MINPNA"//CHAR(0)) ALLOCRINGS=.false. goto 001 endif !if (FACTATRING) then ! if (allocated(ATRING)) deallocate(ATRING) ! allocate(ATRING(TAILLD,NTLT,NS), STAT=ERR) ! if (ERR .ne. 0) then ! ! endif ! ATRING(:,:,:)=0 !endif if (DOAMPAT) then if (allocated(AMPAT)) deallocate(AMPAT) allocate(AMPAT(NTLT,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCRINGS"//CHAR(0), "Table: AMPAT"//CHAR(0)) ALLOCRINGS=.false. goto 001 endif AMPAT(:,:)=0 endif !if (FACTATPNA) then ! if (allocated(ATPNA)) deallocate(ATPNA) ! allocate(ATPNA(TAILLD,NTLT,NS), STAT=ERR) ! if (ERR .ne. 0) then ! call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: ALLOCRINGS"//CHAR(0), "Table: ATPNA"//CHAR(0)) ! ALLOCRINGS=.false. ! goto 001 ! endif ! ATPNA(:,:,:)=0 !endif ! End of allocation / Initialisation MAXPNA(:,:)=0 MINPNA(:,:)=0 PNA(:,:,:)=0 NRING(:,:)=0 ALLOCRINGS=.true. 001 continue END FUNCTION INTEGER (KIND=c_int) FUNCTION initrings (VRINGS, VTAILLD, VTLT, VNUMA, VABAB, VHOMO) BIND (C,NAME='initrings_') ! ! Initialization of the ring statistics ! The key variable is NUMA see in the following lines ! USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: VRINGS, VTAILLD, VTLT, VNUMA, VABAB, VHOMO INTERFACE LOGICAL FUNCTION ALLOCRINGS() END FUNCTION INTEGER FUNCTION KING_RINGS() END FUNCTION INTEGER FUNCTION GUTTMAN_RINGS() END FUNCTION INTEGER FUNCTION PRIMITIVE_RINGS() END FUNCTION END INTERFACE if (VTLT .eq. 0) then TLT=NSP+1 else TLT=VTLT endif NUMA=VNUMA NTLT=NBSPBS(TLT) TAILLR=VTAILLD TAILLD=VTAILLD+1 ABAB=.false. NO_HOMO=.false. if (NSP .gt. 1) then if (VABAB .eq. 1) ABAB=.true. if (VHOMO .eq. 1) NO_HOMO=.true. endif #ifdef DEBUG write (6, '("RINGS:: ABAB= ",l1,", NO_HOMO= ",l1,", NUMA= ",i5,", TAILLR= ",i2)') ABAB, NO_HOMO, NUMA, TAILLR #endif TBR=.false. ALC=.false. ALLRINGS=.false. CALC_STRINGS=.false. ! In the following lines the NUMA variable ! gives the 'average' number of rings per size and per step ! this variable depends on the type of rings, of the system studied as well ! as of the search depth. ! NUMA is used as a reference to allocate almost all tabs during rings ! search and analysis. NUMA is a key variable - tweak with caution ! if (VRINGS.eq.1 .or. VRINGS.eq.2) then DOAMPAT=.true. else DOAMPAT=.false. endif if (.not.ALLOCRINGS()) then initrings=0 goto 001 endif if (VRINGS .eq. 0) ALLRINGS=.true. if (VRINGS .le. 1) then initrings=KING_RINGS() endif if (VRINGS .eq. 2) then initrings=GUTTMAN_RINGS() endif if (VRINGS > 2) then CALC_PRINGS=.true. if (.not.PBC) then NNA=NA NNP=0 else NNP=NA*(NBX**3 - 1)/2 endif if (VRINGS .eq. 4) CALC_STRINGS=.true. initrings=PRIMITIVE_RINGS() endif 001 continue END FUNCTION atomes_1.3.1/src/fortran/grfft.F900000664000175000017500000001325015212624223016340 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file grfft.F90 !! @short g(r) analysis: Fourier transform calculation !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION g_of_r_fft (NDR, DTR, MMX) BIND (c,name='g_of_r_fft_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NDR REAL (KIND=c_double), INTENT(IN) :: DTR, MMX INTERFACE INTEGER FUNCTION recup_data (i, j) INTEGER, INTENT(IN) :: i, j END FUNCTION LOGICAL FUNCTION GRBT(GrToBT, NDTR) USE PARAMETERS INTEGER, INTENT(IN) :: NDTR DOUBLE PRECISION, DIMENSION(NDTR,NSP,NSP), INTENT(IN) :: GrToBT END FUNCTION END INTERFACE qvmax = MMX NUMBER_OF_I = NDR if (allocated(GFFT)) deallocate(GFFT) allocate(GFFT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: g_of_r_fft"//CHAR(0), "Table: GFFT"//CHAR(0)) g_of_r_fft=0 goto 001 endif if (allocated(DFFT)) deallocate(DFFT) allocate(DFFT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: g_of_r_fft"//CHAR(0), "Table: DFFT"//CHAR(0)) g_of_r_fft=0 goto 001 endif if (allocated(TDFFT)) deallocate(TDFFT) allocate(TDFFT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: g_of_r_fft"//CHAR(0), "Table: TDFFT"//CHAR(0)) g_of_r_fft=0 goto 001 endif if (allocated(R_PFFT)) deallocate(R_PFFT) allocate(R_PFFT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: g_of_r_fft"//CHAR(0), "Table: R_PFFT"//CHAR(0)) g_of_r_fft=0 goto 001 endif do i=1, NDR R_PFFT(i)= 0.0d0 R_PFFT(i)= 1.0 / (2.0*PI*PI*NA/MEANVOL*(i-0.5)*DTR) enddo j=0 l=0 if (recup_data (j, IDSK) .ne. 1) then g_of_r_fft=0 goto 001 endif j=4 if (recup_data (j, IDSK) .ne. 1) then g_of_r_fft=0 goto 001 endif if (NSP .eq. 2) then if (allocated(GQBT)) deallocate(GQBT) allocate(GQBT(NDR,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: g_of_r_fft"//CHAR(0), "Table: GQBT"//CHAR(0)) g_of_r_fft=0 goto 001 endif endif j=j+NSP*NSP*2+2 do n=1, NSP do m=1, NSP j=j+2 if (recup_data (j, IDSK) .ne. 1) then g_of_r_fft=0 goto 001 endif enddo enddo if (NSP .eq. 2) then if (GRBT (GQBT, NDR)) then do k=1, NDR GFFT(k)=BTij(k,1) enddo call save_curve (NDR, GFFT, l, IDGRFFT) l = l+2 do k=1, NDR GFFT(k)=BTij(k,2) enddo call save_curve (NDR, GFFT, l, IDGRFFT) l = l+2 do k=1, NDR GFFT(k)=BTij(k,3) enddo call save_curve (NDR, GFFT, l, IDGRFFT) endif if (allocated(BTij)) deallocate(BTij) endif g_of_r_fft=1 001 continue if (allocated(GFFT)) deallocate(GFFT) if (allocated(DFFT)) deallocate(DFFT) if (allocated(TDFFT)) deallocate(TDFFT) if (allocated(R_PFFT)) deallocate(R_PFFT) if (allocated(GQBT)) deallocate(GQBT) END FUNCTION INTEGER FUNCTION send_sq (IC, VAL, DTR, KDATA, SDATA) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: IC, VAL DOUBLE PRECISION, INTENT(IN) :: DTR DOUBLE PRECISION, DIMENSION(VAL), INTENT(IN) :: KDATA, SDATA DOUBLE PRECISION :: SUML j = IC call FFT_TO_GR (VAL, KDATA, SDATA, GFFT) call save_curve (NUMBER_OF_I, GFFT, l, IDGRFFT) l=l+2 if (j.gt.4) then if (nsp .eq. 2) then do i=1, NUMBER_OF_I GQBT(i,n,m) = GFFT(i) enddo endif do i=1, NUMBER_OF_I DFFT(i)= 4.0*PI*(((i-0.5)*DTR)**2)*DTR*GFFT(i)/MEANVOL if (i .gt. 1) DFFT(i)= DFFT(i) + DFFT(i-1) enddo if (n .eq. m) then k = (NBSPBS(n)-1) else k = NBSPBS(m) endif do i=1, NUMBER_OF_I DFFT(i)= DFFT(i)*k enddo do i=1, NUMBER_OF_I GFFT(i)=(GFFT(i)-1.0)*4.0*PI*(NA/MEANVOL)*(i-0.5)*DTR enddo call save_curve (NUMBER_OF_I, GFFT, l, IDGRFFT) l=l+2 call save_curve (NUMBER_OF_I, DFFT, l, IDGRFFT) l=l+1 else SUML=0.0d0 do k=1, NSP if (j .eq. 0) then SUML=SUML+NSCATTL(k)*Xi(k) else SUML=SUML+XSCATTL(k)*Xi(k) endif enddo SUML=SUML*SUML do i=1, NUMBER_OF_I GFFT(i)=(GFFT(i)-1.0)*4.0*PI*(NA/MEANVOL)*(i-0.5)*DTR enddo call save_curve (NUMBER_OF_I, GFFT, l, IDGRFFT) l=l+2 do i=1, NUMBER_OF_I TDFFT(i) = GFFT(i)*SUML enddo call save_curve (NUMBER_OF_I, TDFFT, l, IDGRFFT) l=l+2 do i=1, NUMBER_OF_I TDFFT(i) = TDFFT(i) + 4.0*PI*(NA/MEANVOL)*(i-0.5)*DTR*SUML enddo call save_curve (NUMBER_OF_I, TDFFT, l, IDGRFFT) l=l+2 endif send_sq = 1 CONTAINS SUBROUTINE FFT_TO_GR (LTAB, KTAB, TAB, RTAB) USE PARAMETERS INTEGER, INTENT(IN) :: LTAB DOUBLE PRECISION, DIMENSION(LTAB), INTENT(IN) :: KTAB, TAB DOUBLE PRECISION, DIMENSION(NUMBER_OF_I), INTENT(INOUT) :: RTAB do i=1, NUMBER_OF_I RTAB(i)= 0.0d0 do k=1, LTAB-1 Phi = KTAB(k)*(i-0.5)*DTR RTAB(i) = RTAB(i) + KTAB(k)*(TAB(k) - 1.0)*sin(Phi)*(KTAB(k+1) - KTAB(k)) enddo RTAB(i) = 1.0 + R_PFFT(i) * RTAB(i) enddo END SUBROUTINE END FUNCTION atomes_1.3.1/src/fortran/trj.F900000664000175000017500000000547615212624223016042 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file trj.F90 !! @short Unused: read atomic coordinates in CPMD trajectory format - old version !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION read_trj (trj_f, ltrj, natrj, nbstrj, is_npt) BIND (C,NAME='read_trj_') ! ! Lecture of atom types and coordinates - CPMD trajectory ! USE PARAMETERS IMPLICIT NONE LOGICAL :: isok INTEGER (KIND=c_int), INTENT(IN) :: ltrj, natrj, is_npt INTEGER (KIND=c_int), DIMENSION(NSP), INTENT(IN) :: nbstrj CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: trj_f CHARACTER (LEN=ltrj) :: trj_file INTERFACE INTEGER FUNCTION TEST_LENGTH(UNITFILE, NATL) INTEGER, INTENT(IN) :: UNITFILE, NATL END FUNCTION END INTERFACE do i=1, ltrj trj_file(i:i) = trj_f(i) enddo read_trj = 1 inquire (file=trj_file, exist=isok) if (isok) then open (unit=20, file=trj_file, action='read', status='old', err=001) NS=0 NA=natrj NS=TEST_LENGTH(20, NA) if (NS .ge. 1) then rewind(20) if (allocated(FULLPOS)) deallocate(FULLPOS) allocate (FULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_trj"//CHAR(0), "Table: FULLPOS"//CHAR(0)) read_trj=3 goto 001 endif if (allocated(TAB_OF_TYPE)) deallocate(TAB_OF_TYPE) allocate (TAB_OF_TYPE(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_trj"//CHAR(0), "Table: TAB_OF_TYPE"//CHAR(0)) read_trj=3 goto 001 endif do i=1, NS l=1 do j=1, NSP do k=1, nbstrj(j) read (20, *, err=002) z, FULLPOS(l,1,i), FULLPOS(l,2,i), FULLPOS(l,3,i) ! CPMD trajectory is in atomic units do m=1, 3 FULLPOS(l,m,i)=ANGTOBOHR*FULLPOS(l,m,i) enddo TAB_OF_TYPE(l)= LABEL(j) l=l+1 enddo enddo enddo if (is_npt .eq. 1) call send_steps (NS) read_trj=0 else read_trj=2 endif 002 continue close (20) 001 continue endif END FUNCTION atomes_1.3.1/src/fortran/rings-king.F900000664000175000017500000007527615212624223017320 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file rings-king.F90 !! @short King ring statistics !! @author Sébastien Le Roux SUBROUTINE SETUP_CPAT_VPAT_RING (NAT, STR, CONT, VOIS, CPT, VPT) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: NAT, STR INTEGER, DIMENSION(NAT,NS), INTENT(IN):: CONT INTEGER, DIMENSION(MAXN,NAT,NS), INTENT(IN) :: VOIS INTEGER, DIMENSION(NAT), INTENT(INOUT):: CPT INTEGER, DIMENSION(NAT,MAXN), INTENT(INOUT) :: VPT INTEGER :: RAB, RAC, RAD !do RAB=1, NAT ! write (6, '("At= ",i4," Neigh= ",i2)') RAB, CONTJ(RAB,STR) ! do RAC=1, CONTJ(RAB,STR) ! write (6, '(" i= ",i2," Vois= ",i4)') RAC, VOISJ(RAC,RAB,STR) ! enddo !enddo CPT(:) = 0 VPT(:,:) = 0 do RAB=1, NAT if (CONT(RAB,STR) .gt. 1) then RAC = 0 do RAD=1, CONT(RAB,STR) if (CONT(VOIS(RAD,RAB,STR),STR) .gt. 1) then RAC=RAC+1 VPT(RAB,RAC) = VOIS(RAD,RAB,STR) endif enddo if (RAC .ge. 2) then CPT(RAB) = RAC endif endif enddo END SUBROUTINE SUBROUTINE SETUP_CPAT_VPAT (STR, NAT) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: STR, NAT INTEGER :: RAB, RAC, RAD !do RAB=1, NAT ! write (6, '("At= ",i4," Neigh= ",i2)') RAB, CONTJ(RAB,STR) ! do RAC=1, CONTJ(RAB,STR) ! write (6, '(" i= ",i2," Vois= ",i4)') RAC, VOISJ(RAC,RAB,STR) ! enddo !enddo do RAB=1, NAT CPAT(RAB) = 0 if (CONTJ(RAB,STR) .gt. 1) then RAC = 0 do RAD=1, CONTJ(RAB,STR) if (CONTJ(VOISJ(RAD,RAB,STR),STR) .gt. 1) then RAC=RAC+1 VPAT(RAB,RAC) = VOISJ(RAD,RAB,STR) endif enddo if (RAC .ge. 2) then CPAT(RAB) = RAC endif endif enddo END SUBROUTINE INTEGER FUNCTION KING_RINGS() USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER :: ar #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE INTEGER FUNCTION RECRINGS(VID) INTEGER, INTENT(IN) :: VID END FUNCTION END INTERFACE KING_RINGS = 0 ar = 0 if (.not.ALLRINGS) ar=1 #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. ! Dynamic allocation of pointers and tables used in the "RINGS" subroutine if (NS.ge.1 .and. NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA #ifdef DEBUG write (6, *) "OpenMP on atoms, NUMTH= ",NUMTH #endif call KING_RING_SEARCH_ATOMS (ar, NUMTH) else #ifdef DEBUG write (6, *) "OpenMP on MD steps, NUMTH= ",NUMTH #endif call KING_RING_SEARCH_STEPS (ar, NUMTH) endif #else call KING_RING_SEARCH_STEPS (ar) #endif KING_RINGS = RECRINGS(ar) END FUNCTION #ifdef OPENMP SUBROUTINE KING_RING_SEARCH_ATOMS (ARI, NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: ARI, NUMTH TYPE (RING), DIMENSION(:), ALLOCATABLE :: THE_RING INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE, INDTH INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING, ORDRING INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVR, ORDR INTEGER :: LORA, LORB, LORC, ri INTERFACE RECURSIVE SUBROUTINE INSIDE_RING (THE_RING, FND, S_IR, AI_IR, RID, TAE, TAH, LRA, LRB, & NRPAT, RSAVED, OSAVED, TRING, INDE, INDH, RESL, CPT, VPT) USE PARAMETERS TYPE (RING), DIMENSION(TAILLD), INTENT(INOUT) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_IR, AI_IR, RID, LRA, LRB INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT INTEGER, DIMENSION(NA), INTENT(IN):: CPT END SUBROUTINE INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI END FUNCTION INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR,NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED END FUNCTION SUBROUTINE DEL_THIS_RING (TLED, RSAVED, OSAVED, TRING, RESL, INDT) USE PARAMETERS INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING END SUBROUTINE END INTERFACE ri = 0 if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(ORDRING)) deallocate(ORDRING) allocate(ORDRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDRING" ALC=.true. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif do i=1, NS p=0 SAVRING(:,:,:)=0 ORDRING(:,:,:)=0 call SETUP_CPAT_VPAT_RING (NA, i, CONTJ, VOISJ, CPAT, VPAT) ! OpenMP on atoms only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(MAXAT, MINAT, RPAT, APNA, SAUT, RUNSEARCH, & !$OMP& j, k, l, m, n, o, LORA, LORB, LORC, TAILLE, TAILLH, THE_RING, RES_LIST, & !$OMP& FOUND, ERR, SAVR, ORDR, TRING, INDTE, INDTH) & !$OMP& SHARED(i, p, NUMTH, NS, NA, TLT, NSP, LOT, TAILLR, TAILLD, CONTJ, VOISJ, CPAT, VPAT, & !$OMP& NUMA, FACTATRING, ATRING, MAXPNA, MINPNA, DOAMPAT, AMPAT, ABAB, NO_HOMO, ALLRINGS, & !$OMP& TBR, ALC, ALC_TAB, NCELLS, PBC, MAXN, SAVRING, ORDRING, NRING, INDRING, PNA, ri) if (allocated(RPAT)) deallocate(RPAT) allocate(RPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RPAT" ALC=.true. goto 002 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 002 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 002 endif if(allocated(INDTH)) deallocate(INDTH) allocate(INDTH(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTH" goto 002 endif if(allocated(APNA)) deallocate(APNA) allocate(APNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="APNA" ALC=.true. goto 002 endif if(allocated(SAVR)) deallocate(SAVR) allocate(SAVR(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVR" ALC=.true. goto 002 endif if(allocated(ORDR)) deallocate(ORDR) allocate(ORDR(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDR" ALC=.true. goto 002 endif if(allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 002 endif if(allocated(THE_RING)) deallocate(THE_RING) allocate(THE_RING(TAILLD), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THE_RING" ALC=.true. goto 002 endif TRING(:)=0 SAVR(:,:,:)=0 ORDR(:,:,:)=0 !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA if (TBR .or. ALC) goto 003 if (TLT .eq. NSP+1 .or. LOT(j) .eq. TLT) then !$OMP CRITICAL p = p+1 o = p !$OMP END CRITICAL APNA(:) = 0 MINAT=TAILLD MAXAT=1 SAUT=.true. if (CPAT(j).ge.2) then do l=1, CPAT(j)-1 do m=l+1, CPAT(j) LORA=LOT(j) LORB=LOT(VPAT(j,l)) LORC=LOT(VPAT(j,m)) if (ABAB) then if ((LORB .ne. LORA) .and. (LORC .ne. LORA) .and. (LORB .eq. LORC)) then RUNSEARCH=.true. else RUNSEARCH=.false. endif else RUNSEARCH=.true. endif if (RUNSEARCH) then FOUND=.false. RPAT(:) = 0 do k=1, CPAT(j) RPAT(VPAT(j,k)) = 1 enddo RPAT(VPAT(j,l)) = 0 THE_RING(1)%ATOM=VPAT(j,l) THE_RING(1)%SPEC=LORB THE_RING(1)%NEIGHBOR=1 THE_RING(2)%ATOM=j THE_RING(2)%SPEC=LORA THE_RING(2)%NEIGHBOR=1 RPAT(j)=1 TAILLE=TAILLR TAILLH=TAILLR RES_LIST(:) = 0 INDTE(:) = 0 INDTH(:) = 0 THE_RING(3)%ATOM=VPAT(j,m) THE_RING(3)%SPEC=LORC THE_RING(3)%NEIGHBOR=CPAT(VPAT(j,m)) call INSIDE_RING (THE_RING, FOUND, i, VPAT(j,m), 3, TAILLE, TAILLH, LORA, LORB, & RPAT, SAVR, ORDR, TRING, INDTE, INDTH, RES_LIST, CPAT, VPAT) if (ALC) ALC_TAB="INSIDE_RING" if (TBR .or. ALC) goto 003 if (ALLRINGS) then do k=3, TAILLR do n=1, TRING(k) if (INDTE(n).ne.0 .and. APNA(k).eq.0) then APNA(k)=1 MINAT=min(MINAT,k) MAXAT=max(MAXAT,k) ! if (FACTATPNA) ATPNA(k,o,i)=1 SAUT=.false. endif enddo enddo else if (FOUND) then if (APNA(TAILLE) .eq. 0) then APNA(TAILLE)=1 MINAT=min(MINAT,TAILLE) MAXAT=max(MAXAT,TAILLE) ! if (FACTATPNA) ATPNA(TAILLE,o,i)=1 SAUT=.false. endif else if (NO_HOMO .and. RES_LIST(TAILLH) .ne. 0) then ! Some shortest ring with HP bonds and < TAILLR were found ! delete these rings now call DEL_THIS_RING (TAILLH, SAVR, ORDR, TRING, RES_LIST, INDTH) else if (DOAMPAT) then if (CONTJ(VPAT(j,l),i) .ge. 2 .and. CONTJ(VPAT(j,m),i) .ge. 2) then !$OMP ATOMIC AMPAT(o,i)=AMPAT(o,i)+1 endif endif endif enddo enddo endif if (.not. SAUT) then do k=3, TAILLR do l=3, TAILLR if (APNA(k).eq.1 .and. APNA(l).eq.1) then !$OMP ATOMIC PNA(k,l,i)=PNA(k,l,i)+1 endif enddo enddo !$OMP ATOMIC MAXPNA(MAXAT,i)=MAXPNA(MAXAT,i)+1 !$OMP ATOMIC MINPNA(MINAT,i)=MINPNA(MINAT,i)+1 endif endif 003 continue enddo !$OMP END DO NOWAIT if (TBR .or. ALC) goto 002 !$OMP CRITICAL do k=3, TAILLR if (TRING(k).gt.0) then if (NRING(k,i).gt.0) then o = 0 do l=1, TRING(k) do m=1, NRING(k,i) SAUT=.true. do n=1, k if (SAVRING(k,m,n) .ne. SAVR(k,l,n)) then SAUT=.false. exit endif enddo if (SAUT) exit enddo if (.not.SAUT) then o = o + 1 if (NRING(k,i)+o .gt. NUMA) then TBR=.true. goto 004 endif do m=1, k SAVRING(k,NRING(k,i)+o,m) = SAVR(k,l,m) ORDRING(k,NRING(k,i)+o,m) = ORDR(k,l,m) enddo endif enddo NRING(k,i)=NRING(k,i)+o else do l=1, TRING(k) do m=1, k SAVRING(k,l,m) = SAVR(k,l,m) ORDRING(k,l,m) = ORDR(k,l,m) enddo enddo NRING(k,i) = TRING(k) endif endif enddo 004 continue !$OMP END CRITICAL 002 continue if (allocated(RPAT)) deallocate (RPAT) if (allocated(RES_LIST)) deallocate (RES_LIST) if (allocated(INDTE)) deallocate (INDTE) if (allocated(INDTH)) deallocate (INDTH) if (allocated(APNA)) deallocate (APNA) if (allocated(TRING)) deallocate (TRING) if (allocated(SAVR)) deallocate (SAVR) if (allocated(ORDR)) deallocate (ORDR) if (allocated(THE_RING)) deallocate (THE_RING) !$OMP END PARALLEL if (ALC .or. TBR) goto 001 !do j=3, TAILLR ! write (6, '("s= ",i4,", j= ",i2,", nr(",i2,",",i4,")= ",i2)') i,j,j,i, NRING(j,i) ! if (NRING(j,i) .gt. 0) then ! do k=1, NRING(j,i) ! write (6, *) " k= ",k,", R(o)= ",ORDRING(j,k,1:j) ! enddo ! endif !enddo ri = ri + RINGS_TO_OGL (i, ARI, NRING, SAVRING, ORDRING) enddo 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: KING_RING_SEARCH_ATOMS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(ORDRING)) deallocate (ORDRING) if (ri .eq. NS) ri = RINGS_TO_OGL_MENU (ARI, NRING) END SUBROUTINE #endif #ifdef OPENMP SUBROUTINE KING_RING_SEARCH_STEPS (ARI, NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: ARI, NUMTH #else SUBROUTINE KING_RING_SEARCH_STEPS (ARI) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: ARI #endif TYPE (RING), DIMENSION(:), ALLOCATABLE :: THE_RING INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE, INDTH INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING, ORDRING INTEGER :: LORA, LORB, LORC, ri INTERFACE RECURSIVE SUBROUTINE INSIDE_RING (THE_RING, FND, S_IR, AI_IR, RID, TAE, TAH, LRA, LRB, & NRPAT, RSAVED, OSAVED, TRING, INDE, INDH, RESL, CPT, VPT) USE PARAMETERS TYPE (RING), DIMENSION(TAILLD), INTENT(INOUT) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_IR, AI_IR, RID INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, INTENT(IN) :: LRA, LRB INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT END SUBROUTINE INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI END FUNCTION INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR,NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED END FUNCTION SUBROUTINE DEL_THIS_RING (TLED, RSAVED, OSAVED, TRING, RESL, INDT) USE PARAMETERS INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING END SUBROUTINE END INTERFACE ri = 0 #ifdef OPENMP ! OpenMP on steps only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(TAILLE, TAILLH, MAXAT, MINAT, SAUT, RUNSEARCH, & !$OMP& i, j, k, l, m, n, o, p, LORA, LORB, LORC, THE_RING, RES_LIST, INDTE, INDTH, APNA, & !$OMP& FOUND, ERR, TRING, SAVRING, ORDRING, RPAT, CPAT, VPAT) & !$OMP& SHARED(ARI, NUMTH, NS, NA, TLT, NSP, LOT, TAILLR, TAILLD, CONTJ, VOISJ, & !$OMP& NUMA, FACTATRING, ATRING, MAXPNA, MINPNA, DOAMPAT, AMPAT, ABAB, NO_HOMO, ALLRINGS, & !$OMP& TBR, ALC, ALC_TAB, NCELLS, THE_BOX, FULLPOS, PBC, MAXN, NRING, INDRING, PNA, ri) #endif if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(ORDRING)) deallocate(ORDRING) allocate(ORDRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDRING" ALC=.true. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif if (allocated(RPAT)) deallocate(RPAT) allocate(RPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RPAT" ALC=.true. goto 001 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 001 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 001 endif if(allocated(INDTH)) deallocate(INDTH) allocate(INDTH(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTH" goto 001 endif if(allocated(APNA)) deallocate(APNA) allocate(APNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="APNA" ALC=.true. goto 001 endif if(allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 001 endif if(allocated(THE_RING)) deallocate(THE_RING) allocate(THE_RING(TAILLD), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THE_RING" ALC=.true. goto 001 endif #ifdef OPENMP !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS if (TBR .or. ALC) goto 002 SAVRING(:,:,:)=0 ORDRING(:,:,:)=0 TRING(:)=0 call SETUP_CPAT_VPAT_RING (NA, i, CONTJ, VOISJ, CPAT, VPAT) o=0 do j=1, NA if (TLT .eq. NSP+1 .or. LOT(j) .eq. TLT) then o=o+1 APNA(:) = 0 MINAT=TAILLR MAXAT=1 SAUT=.true. if (CPAT(j).ge.2) then do l=1, CPAT(j)-1 do m=l+1, CPAT(j) LORA=LOT(j) LORB=LOT(VPAT(j,l)) LORC=LOT(VPAT(j,m)) if (ABAB) then if ((LORB .ne. LORA) .and. (LORC .ne. LORA) .and. (LORB .eq. LORC)) then RUNSEARCH=.true. else RUNSEARCH=.false. endif else RUNSEARCH=.true. endif if (RUNSEARCH) then FOUND=.false. RPAT(:) = 0 do k=1, CPAT(j) RPAT(VPAT(j,k)) = 1 enddo p = VPAT(j,l) RPAT(p) = 0 RPAT(j)=1 THE_RING(1)%ATOM=p THE_RING(1)%SPEC=LORB THE_RING(1)%NEIGHBOR=1 THE_RING(2)%ATOM=j THE_RING(2)%SPEC=LORA THE_RING(2)%NEIGHBOR=1 THE_RING(3)%ATOM=VPAT(j,m) THE_RING(3)%SPEC=LORC THE_RING(3)%NEIGHBOR=CPAT(VPAT(j,m)) TAILLE=TAILLR TAILLH=TAILLR RES_LIST(:) = 0 INDTE(:) = 0 INDTH(:) = 0 call INSIDE_RING (THE_RING, FOUND, i, VPAT(j,m), 3, TAILLE, TAILLH, LORA, LORB, & RPAT, SAVRING, ORDRING, TRING, INDTE, INDTH, RES_LIST, CPAT, VPAT) if (ALC) ALC_TAB="INSIDE_RING" if (TBR .or. ALC) goto 002 if (ALLRINGS) then do k=3, TAILLR do n=1, TRING(k) if (INDTE(n).ne.0 .and. APNA(k).eq.0) then APNA(k)=1 MINAT=min(MINAT,k) MAXAT=max(MAXAT,k) ! if (FACTATPNA) ATPNA(k,o,i)=1 SAUT=.false. endif enddo enddo else if (FOUND) then if (APNA(TAILLE) .eq. 0) then APNA(TAILLE)=1 MINAT=min(MINAT,TAILLE) MAXAT=max(MAXAT,TAILLE) ! if (FACTATPNA) ATPNA(TAILLE,o,i)=1 SAUT=.false. endif else if (NO_HOMO .and. RES_LIST(TAILLH) .ne. 0) then ! Some shortest ring with HP bonds and < TAILLR were found ! delete these rings now call DEL_THIS_RING (TAILLH, SAVRING, ORDRING, TRING, RES_LIST, INDTH) else if (DOAMPAT) then if (CONTJ(VPAT(j,l),i) .ge. 2 .and. CONTJ(VPAT(j,m),i) .ge. 2) AMPAT(o,i)=AMPAT(o,i)+1 endif endif enddo enddo endif if (.not. SAUT) then do k=3, TAILLR do l=3, TAILLR if (APNA(k).eq.1 .and. APNA(l).eq.1) then PNA(k,l,i)=PNA(k,l,i)+1 endif enddo enddo MAXPNA(MAXAT,i)=MAXPNA(MAXAT,i)+1 MINPNA(MINAT,i)=MINPNA(MINAT,i)+1 endif endif enddo do j=3, TAILLR NRING(j,i) = TRING(j) enddo !do j=3, TAILLR ! write (6, '("s= ",i4,", j= ",i2,", nr(",i2,",",i4,")= ",i3)') i,j,j,i, NRING(j,i) ! if (NRING(j,i) .gt. 0) then ! do k=1, NRING(j,i) ! write (6, *) " k= ",k,", R(o)= ",ORDRING(j,k,1:j) ! enddo ! endif !enddo j = RINGS_TO_OGL (i, ARI, NRING, SAVRING, ORDRING) #ifdef OPENMP !$OMP ATOMIC #endif ri = ri + j 002 continue enddo #ifdef OPENMP !$OMP END DO NOWAIT #endif 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: KING_RING_SEARCH_STEPS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(TRING)) deallocate (TRING) if (allocated(THE_RING)) deallocate (THE_RING) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(ORDRING)) deallocate (ORDRING) if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(RPAT)) deallocate (RPAT) if (allocated(RES_LIST)) deallocate (RES_LIST) if (allocated(INDTE)) deallocate (INDTE) if (allocated(INDTH)) deallocate (INDTH) if (allocated(APNA)) deallocate (APNA) #ifdef OPENMP !$OMP END PARALLEL #endif if (ri .eq. NS) ri = RINGS_TO_OGL_MENU (ARI, NRING) END SUBROUTINE INTEGER FUNCTION CHECK_RING (THE_RING, FND, S_CR, RID, TAE, TAH, RSAVED, OSAVED, TRING, INDE, INDH, RESL) USE PARAMETERS IMPLICIT NONE TYPE (RING), DIMENSION(TAILLD), INTENT(IN) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_CR, RID INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL INTEGER :: ix, iy, CHAINE LOGICAL :: IS_RING LOGICAL :: HOMOP DOUBLE PRECISION :: DUV DOUBLE PRECISION, DIMENSION(3) :: RAB, VAB INTERFACE DOUBLE PRECISION FUNCTION CALCDIJ(R12, AT1, AT2, STEP_1, STEP_2, SID) DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION SUBROUTINE SAVE_THIS_RING (THE_RING, TLES, RSAVED, OSAVED, TRING, INDT, RESL) USE PARAMETERS TYPE (RING), DIMENSION(TAILLR), INTENT(IN) :: THE_RING INTEGER, INTENT(IN) :: TLES INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING END SUBROUTINE SUBROUTINE DEL_THIS_RING (TLED, RSAVED, OSAVED, TRING, RESL, INDT) USE PARAMETERS INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING END SUBROUTINE END INTERFACE IS_RING=.true. HOMOP=.false. if (THE_RING(RID)%ATOM.eq.THE_RING(1)%ATOM .and. RID.ge.4) then IS_RING=.true. HOMOP=.false. if (NSP .gt. 1) then do ix=1, RID-1 if (THE_RING(ix)%SPEC .eq. THE_RING(ix+1)%SPEC) then HOMOP=.true. exit endif enddo endif if (PBC) then VAB(:)=0.0d0 do ix=1, RID-1 if (NCELLS .gt. 1) then DUV = CALCDIJ (RAB,THE_RING(ix)%ATOM,THE_RING(ix+1)%ATOM,S_CR,S_CR,S_CR) else DUV = CALCDIJ (RAB,THE_RING(ix)%ATOM,THE_RING(ix+1)%ATOM,S_CR,S_CR,1) endif do iy=1,3 VAB(iy)=VAB(iy)+RAB(iy) enddo enddo if (abs(VAB(1)) .ge. 0.01 .or. abs(VAB(2)) .ge. 0.01 .or. abs(VAB(3)) .ge. 0.01) then IS_RING=.false. endif endif if (IS_RING) then CHAINE = RID-1 if (ALLRINGS) then if (.not.NO_HOMO .or. .not.HOMOP) then FND=.true. call SAVE_THIS_RING (THE_RING, CHAINE, RSAVED, OSAVED, TRING, INDE, RESL) endif else if (NO_HOMO) then if (CHAINE .le. TAH) then if (CHAINE.lt.TAH .or. .not.HOMOP) call DEL_THIS_RING (TAH, RSAVED, OSAVED, TRING, RESL, INDH) if (CHAINE.lt.TAE) call DEL_THIS_RING (TAE, RSAVED, OSAVED, TRING, RESL, INDE) if (.not.HOMOP .and. CHAINE.le.TAE) then FND=.true. TAE=CHAINE call SAVE_THIS_RING (THE_RING, TAE, RSAVED, OSAVED, TRING, INDE, RESL) else if (HOMOP) then if (CHAINE .lt. TAE) then FND=.false. TAH=CHAINE call SAVE_THIS_RING (THE_RING, TAH, RSAVED, OSAVED, TRING, INDH, RESL) endif endif endif else if (CHAINE .le. TAE) then if (CHAINE.lt.TAE) call DEL_THIS_RING (TAE, RSAVED, OSAVED, TRING, RESL, INDE) FND=.true. TAE=CHAINE call SAVE_THIS_RING (THE_RING, TAE, RSAVED, OSAVED, TRING, INDE, RESL) endif endif endif CHECK_RING = 1 else CHECK_RING = 2 endif else CHECK_RING = 0 endif END FUNCTION RECURSIVE SUBROUTINE INSIDE_RING (THE_RING, FND, S_IR, AI_IR, RID, TAE, TAH, LRA, LRB, & NRPAT, RSAVED, OSAVED, TRING, INDE, INDH, RESL, CPT, VPT) USE PARAMETERS IMPLICIT NONE TYPE (RING), DIMENSION(TAILLD), INTENT(INOUT) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_IR, AI_IR, RID INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, INTENT(IN) :: LRA, LRB INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT INTEGER :: IND, RES LOGICAL :: ADDSP INTERFACE INTEGER FUNCTION CHECK_RING (THE_RING, FND, S_CR, RID, TAE, TAH, RSAVED, OSAVED, TRING, INDE, INDH, RESL) USE PARAMETERS TYPE (RING), DIMENSION(TAILLR), INTENT(IN) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_CR, RID INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL END FUNCTION END INTERFACE if (RID-1 .lt. TAE) then do while (THE_RING(RID)%NEIGHBOR .ge. 1) IND = VPT(AI_IR, THE_RING(RID)%NEIGHBOR) if (NRPAT(IND).eq.0) then if (ABAB) then if (mod(RID,2).eq.0 .and. LOT(IND).eq.LRB) then ADDSP=.true. elseif (mod(RID,2).ne.0 .and. LOT(IND).eq.LRA) then ADDSP=.true. else ADDSP=.false. endif else ADDSP=.true. endif if (ADDSP) then THE_RING(RID+1)%ATOM = IND THE_RING(RID+1)%SPEC = LOT(IND) THE_RING(RID+1)%NEIGHBOR = CPT(IND) NRPAT(IND)=1 RES = CHECK_RING (THE_RING, FND, S_IR, RID+1, TAE, TAH, RSAVED, OSAVED, TRING, INDE, INDH, RESL) if (TBR .or. ALC) goto 001 if (RES .eq. 0) then call INSIDE_RING (THE_RING, FND, S_IR, IND, RID+1, TAE, TAH, LRA, LRB, & NRPAT, RSAVED, OSAVED, TRING, INDE, INDH, RESL, CPT, VPT) if (TBR .or. ALC) goto 001 endif NRPAT(IND) = 0 endif endif THE_RING(RID)%NEIGHBOR = THE_RING(RID)%NEIGHBOR - 1 enddo endif 001 continue END SUBROUTINE INSIDE_RING SUBROUTINE SAVE_THIS_RING (THE_RING, TLES, RSAVED, OSAVED, TRING, INDT, RESL) USE PARAMETERS IMPLICIT NONE TYPE (RING), DIMENSION(TAILLD), INTENT(IN) :: THE_RING INTEGER, INTENT(IN) :: TLES INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING INTEGER :: idx, idy LOGICAL :: NEWRING INTEGER, DIMENSION(TLES) :: TOTRI, TOSAV ! A ring has been found, we need to check if it has already been found or not do idx=1, TLES ! Creation of two tab first for the numerical sorting of the list ! The other without sorting for output TOTRI(idx)=THE_RING(idx)%ATOM TOSAV(idx)=THE_RING(idx)%ATOM enddo call TRI(TOTRI, TLES) if (TRING(TLES) .ne. 0) then do idx=1, TRING(TLES) ! do-loop on existing rings to check if the new on has already been found NEWRING=.false. do idy=1, TLES if (TOTRI(idy) .ne. RSAVED(TLES,idx,idy)) then NEWRING=.true. exit endif enddo if (.not.NEWRING) then ! Already been found n-times, increment of the counter INDT(idx)=INDT(idx)+1 exit endif enddo else NEWRING=.true. endif if (NEWRING) then ! A new ring has been found ! We save the data RESL(TLES)=RESL(TLES)+1 TRING(TLES)=TRING(TLES)+1 if (TRING(TLES) .gt. NUMA) then TBR=.true. goto 001 endif INDT(TRING(TLES))=INDT(TRING(TLES))+1 do idx=1, TLES RSAVED(TLES,TRING(TLES),idx)=TOTRI(idx) OSAVED(TLES,TRING(TLES),idx)=TOSAV(idx) enddo endif 001 continue END SUBROUTINE SUBROUTINE DEL_THIS_RING (TLED, RSAVED, OSAVED, TRING, RESL, INDT) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING INTEGER :: xdel, did ! The max size of the ring possible for the triplet N1-At-N2 has down ! We have to delete the bigger rings already found for this triplet if (RESL(TLED) .ge. 1) then do xdel=0, RESL(TLED)-1 do did=1, TAILLR RSAVED(TLED,TRING(TLED)-xdel,did)=0 OSAVED(TLED,TRING(TLED)-xdel,did)=0 enddo do did=1, NUMA INDT(did)=0 enddo enddo TRING(TLED)=TRING(TLED)-RESL(TLED) RESL(TLED)=0 endif END SUBROUTINE atomes_1.3.1/src/fortran/writedata.F900000664000175000017500000007046715212624223017231 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file writedata.F90 !! @short Export curve data using data received from C !! @author Sébastien Le Roux CHARACTER (LEN=36) FUNCTION ylegend (job, nleg, idl, snp) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: job, nleg, idl, snp INTEGER :: DAL, DBL, DCL, DDL, DEL LOGICAL :: done ylegend = '' ! Y axis legend if not spherical harmonics, if (job.eq.IDGR .or. job.eq.IDGRFFT) then if (nleg .eq. 0) then if (idl .eq. 0) then ylegend = """g(r) Neutrons""" else ylegend = "g(r) Neutrons" endif elseif (nleg .eq. 1) then if (idl .eq. 0) then ylegend = """g(r) Neutrons - smoothed""" else ylegend = "g(r) Neutrons - smoothed" endif elseif (nleg .eq. 2) then if (idl .eq. 0) then ylegend = """G(r) Neutrons""" else ylegend = "G(r) Neutrons" endif elseif (nleg .eq. 3) then if (idl .eq. 0) then ylegend = """G(r) Neutrons - smoothed""" else ylegend = "G(r) Neutrons - smoothed" endif elseif (nleg .eq. 4) then if (idl .eq. 0) then ylegend = """g(r) X-rays""" else ylegend = "g(r) X-rays" endif elseif (nleg .eq. 5) then if (idl .eq. 0) then ylegend = """g(r) X-rays - smoothed""" else ylegend = "g(r) X-rays - smoothed" endif elseif (nleg .eq. 6) then if (idl .eq. 0) then ylegend = """G(r) X-rays""" else ylegend = "G(r) X-rays" endif elseif (nleg .eq. 7) then if (idl .eq. 0) then ylegend = """G(r) X-rays - smoothed""" else ylegend = "G(r) X-rays - smoothed" endif elseif (nleg .ge. 8) then DCL=8 done=.false. do DAL=1, snp do DBL=1, snp if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""g\sij\N(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]""" else ylegend="g(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]" endif done=.true. exit endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""g\sij\N(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed""" else ylegend="g(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed" endif done=.true. exit endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""G\sij\N(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]""" else ylegend="G(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]" endif done=.true. exit endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""G\sij\N(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed""" else ylegend="G(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed" endif done=.true. exit endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""dn\sij\N(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]""" else ylegend="dn(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]" endif done=.true. exit endif DCL=DCL+1 enddo if(done) exit enddo if (snp .eq. 2) then if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sNN\N(r)""" else ylegend="BT[NN](r)" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sNN\N(r) - smoothed""" else ylegend="BT[NN](r) - smoothed" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sNC\N(r)""" else ylegend="BT[NC](r)" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sNC\N(r) - smoothed""" else ylegend="BT[NC](r) - smoothed" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sCC\N(r)""" else ylegend="BT[CC](r)" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sCC\N(r) - smoothed""" else ylegend="BT[CC](r) - smoothed" endif endif DCL=DCL+1 endif endif else if (job.eq.IDSQ .or. job.eq.IDSK) then if (nleg .eq. 0) then if (idl .eq. 0) then ylegend = """S(q)[total] Neutrons""" else ylegend = "S(q)[total] Neutrons" endif elseif (nleg .eq. 1) then if (idl .eq. 0) then ylegend = """S(q) Neutrons - smoothed""" else ylegend = "S(q) Neutrons - smoothed" endif elseif (nleg .eq. 2) then if (idl .eq. 0) then ylegend = """Q(q)[total] Neutrons""" else ylegend = "Q(q)[total] Neutrons" endif elseif (nleg .eq. 3) then if (idl .eq. 0) then ylegend = """Q(q)[total] Neutrons - smoothed""" else ylegend = "Q(q)[total] Neutrons - smoothed" endif elseif (nleg .eq. 4) then if (idl .eq. 0) then ylegend = """S(q)[total] X-rays""" else ylegend = "S(q)[total] X-rays" endif elseif (nleg .eq. 5) then if (idl .eq. 0) then ylegend = """S(q) X-rays - smoothed""" else ylegend = "S(q) X-rays - smoothed" endif elseif (nleg .eq. 6) then if (idl .eq. 0) then ylegend = """Q(q)[total] X-rays""" else ylegend = "Q(q)[total] X-rays" endif elseif (nleg .eq. 7) then if (idl .eq. 0) then ylegend = """Q(q)[total] X-rays - smoothed""" else ylegend = "Q(q)[total] X-rays - smoothed" endif elseif (nleg .ge. 8) then DCL=8 done=.false. do DAL=1, snp do DBL=1, snp if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""AL\sij\N(q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]""" else ylegend="AL (q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]" endif done=.true. exit endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""AL\sij\N(q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed""" else ylegend="AL (q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed" endif done=.true. exit endif DCL=DCL+1 enddo if(done) exit enddo do DAL=1, snp do DBL=1, snp if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""FZ\sij\N(q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]""" else ylegend="FZ N(q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]" endif done=.true. exit endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""FZ\sij\N(q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed""" else ylegend="FZ N(q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed" endif done=.true. exit endif DCL=DCL+1 enddo if(done) exit enddo if (snp .eq. 2) then if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sNN\N(q)""" else ylegend="BT[NN](q)" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sNN\N(q) - smoothed""" else ylegend="BT[NN](q) - smoothed" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sNC\N(q)""" else ylegend="BT[NC](q)" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sNC\N(q) - smoothed""" else ylegend="BT[NC](q) - smoothed" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sCC\N(q)""" else ylegend="BT[CC](q)" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sCC\N(q) - smoothed""" else ylegend="BT[CC](q) - smoothed" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sZZ\N(q)""" else ylegend="BT[ZZ](q)" endif endif DCL=DCL+1 if (DCL.eq.nleg) then if (idl .eq. 0) then ylegend="""BT\sZZ\N(q) - smoothed""" else ylegend="BT[ZZ](q) - smoothed" endif endif DCL=DCL+1 endif endif else if (job .eq. IDBD) then DCL = 0 do DAL=1, snp do DBL=1, snp if (nleg .eq. DCL) then if (idl .eq. 0) then ylegend = """% Dij ["//TL(DAL)(1:LEN_TRIM(TL(DAL)))//"-" & //TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]""" done=.true. exit else ylegend = "% Dij ["//TL(DAL)(1:LEN_TRIM(TL(DAL)))//"-" & //TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]" done=.true. exit endif endif DCL=DCL+1 enddo enddo else if (job .eq. IDAN) then DDL = 0 do DAL=1, snp do DBL=1, snp do DCL=1, snp if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend = """% Angle ["//TL(DAL)(1:LEN_TRIM(TL(DAL)))//"-" & //TL(DBL)(1:LEN_TRIM(TL(DBL)))//"-"//TL(DCL)(1:LEN_TRIM(TL(DCL)))//"]""" else ylegend = "% Angle ["//TL(DAL)(1:LEN_TRIM(TL(DAL)))//"-" & //TL(DBL)(1:LEN_TRIM(TL(DBL)))//"-"//TL(DCL)(1:LEN_TRIM(TL(DCL)))//"]" endif endif DDL=DDL+1 enddo enddo enddo do DAL=1, snp do DBL=1, snp do DCL=1, snp do DEL=1, snp if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend = """% Dihedral ["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//"-"//TL(DBL)(1:LEN_TRIM(TL(DBL)))// & "-"//TL(DCL)(1:LEN_TRIM(TL(DCL)))//"-"//TL(DEL)(1:LEN_TRIM(TL(DEL)))//"]""" else ylegend = "% Dihedral ["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//"-"//TL(DBL)(1:LEN_TRIM(TL(DBL)))// & "-"//TL(DCL)(1:LEN_TRIM(TL(DCL)))//"-"//TL(DEL)(1:LEN_TRIM(TL(DEL)))//"]" endif endif DDL=DDL+1 enddo enddo enddo enddo else if (job .eq. IDRI) then if (nleg.eq.0 .or. nleg.eq.4 .or. nleg.eq.8 .or. nleg.eq.12 .or. nleg.eq.16) then if (idl .eq. 0) then ylegend= """R\sc\N(\f{Times-Italic}n\f{})""" else ylegend= "Rc(n)" endif elseif (nleg.eq.1 .or. nleg.eq.5 .or. nleg.eq.9 .or. nleg.eq.13 .or. nleg.eq.17) then if (idl .eq. 0) then ylegend= """P\sn\N(\f{Times-Italic}n\f{})""" else ylegend= "Pn(n)" endif elseif (nleg.eq.2 .or. nleg.eq.6 .or. nleg.eq.10 .or. nleg.eq.14 .or. nleg.eq.18) then if (idl .eq. 0) then ylegend= """P\smax\N(\f{Times-Italic}n\f{})""" else ylegend= "Pmax(n)" endif elseif (nleg.eq.3 .or. nleg.eq.7 .or. nleg.eq.11 .or. nleg.eq.15 .or. nleg.eq.19) then if (idl .eq. 0) then ylegend= """P\smin\N(\f{Times-Italic}n\f{})""" else ylegend= "Pmin(n)" endif endif elseif (job .eq. IDCH) then if (nleg.eq.0) then if (idl .eq. 0) then ylegend= """C\sc\N(\f{Times-Italic}n\f{})[All]""" else ylegend= "Cc(n)[All]" endif else DDL = 1 do DAL=1, snp if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """C\sc\N(\f{Times-Italic}n\f{})["//TL(DAL)(1:LEN_TRIM(TL(DAL)))//"]""" else ylegend= "Cc(n)["//TL(DAL)(1:LEN_TRIM(TL(DAL)))//"]" endif endif DDL=DDL+1 enddo endif elseif (job .eq. IDSP) then ! Nothing to be done here else DDL = 0 do DAL=1, snp if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD ("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD ("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD nac ("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD nac ("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 enddo do DAL=1, snp if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [x]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [x]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [y]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [y]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [z]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [z]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [xy]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [xy]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [xz]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [xz]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [yz]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [yz]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 enddo do DAL=1, snp if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [x/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [x/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [y/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [y/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [z/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [z/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [xy/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [xy/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [xz/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [xz/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [yz/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [yz/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 enddo if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """Correction (x) [\cE\C\S2\N]""" else ylegend= "Correction (x) [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """Correction (y) [\cE\C\S2\N]""" else ylegend= "Correction (y) [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """Correction (z) [\cE\C\S2\N]""" else ylegend= "Correction (z) [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """Drift (x) [ms\S-1\N]""" else ylegend= "Drift (x) m/s" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """Drift (y) [ms\S-1\N]""" else ylegend= "Drift (y) (m/s)" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """Drift (z) [ms\S-1\N]""" else ylegend= "Drift (z) (m/s)" endif endif endif END FUNCTION CHARACTER (LEN=65) FUNCTION xlegend (job, nleg, idl, cdc, snp) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: job, nleg, idl, snp DOUBLE PRECISION, INTENT(IN) :: cdc INTEGER :: il CHARACTER (LEN=6), DIMENSION(5) :: tpsunit = (/'t [fs]', 't [ps]', 't [ns]', 't [us]', 't [ms]' /) INTERFACE CHARACTER (LEN=7) FUNCTION getunit() END FUNCTION END INTERFACE xlegend = '' if (idl .eq. 0) then if (job.eq.IDGR .or. job.eq.IDGRFFT) then xlegend = "r[\cE\C]""" elseif (job.eq.IDSQ .or. job.eq.IDSK .or. job.eq.IDSKT) then xlegend = "q[\cE\C\S-1\N]""" elseif (job .eq. IDBD) then xlegend = "Dij[\cE\C\]""" elseif (job .eq. IDAN) then if (nleg .lt. snp*snp*snp) then xlegend = "Angles[\c:\C]""" else xlegend = "Dihedrals[\c:\C]""" endif elseif (job .eq. IDRI) then xlegend = "Size \f{Times-Italic}n\f{} of the ring [total number of nodes]""" elseif (job .eq. IDCH) then xlegend = "Size \f{Times-Italic}n\f{} of the chain [total number of nodes]""" elseif (job .eq. IDSP) then xlegend = "Q\sl\N""" else il = AnINT(cdc) if (il .eq. 4) then xlegend = "\f{12}m\f{}""" else xlegend = tpsunit(il)//"""" endif endif else if (job.eq.IDGR .or. job.eq.IDGRFFT) then xlegend = "r[Å]" elseif (job.eq.IDSQ .or. job.eq.IDSK .or. job.eq.IDSKT) then xlegend = "q[Å-1]" elseif (job .eq. IDBD) then xlegend = "Dij[Å]" elseif (job .eq. IDAN) then if (nleg .lt. snp*snp*snp) then xlegend = "Angles[°]" else xlegend = "Dihedrals[°]" endif elseif (job .eq. IDRI) then xlegend = "Size n of the ring [total number of nodes]" elseif (job .eq. IDCH) then xlegend = "Size n of the chain [total number of nodes]" elseif (job .eq. IDSP) then xlegend = "Ql" else il = AnINT(cdc) xlegend = tpsunit(il) endif endif END FUNCTION SUBROUTINE prep_file (scf, sfi, snp, tfile, & scalex, scaley, mdc, rdc, idc) BIND (C,NAME='prep_file_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: scf, rdc, snp, tfile, idc INTEGER (KIND=c_int), INTENT(IN) :: scalex, scaley CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: sfi CHARACTER (LEN=scf) :: sfile REAL (KIND=c_double), INTENT(IN) :: mdc CHARACTER (LEN=5) :: xaxis="xaxis", yaxis="yaxis" CHARACTER (LEN=65) :: xlabel INTERFACE CHARACTER(LEN=65) FUNCTION xlegend (job, nleg, idl, cdc, snp) INTEGER, INTENT(IN) :: job, nleg, idl, snp DOUBLE PRECISION, INTENT(IN) :: cdc END FUNCTION END INTERFACE xlabel = xlegend(rdc, idc, tfile, mdc, snp) do i=1, scf sfile(i:i) = sfi(i) enddo open(unit=200, file=sfile, action="write", status='unknown') if (tfile .eq. 0) then write (200, 001) write (200, 002) xaxis, xlabel write (200, 003) xaxis if (scalex .eq. 1) write (200, 016) write (200, 004) xaxis, 1.0 write (200, 005) xaxis, 0.5 write (200, 007) xaxis write (200, 008) xaxis write (200, 003) yaxis if (scaley .eq. 1) write (200, 017) write (200, 004) yaxis, 1.0 write (200, 005) yaxis, 0.5 write (200, 007) yaxis write (200, 008) yaxis write (200, 009) write (200, 010) endif 001 FORMAT ("@with g0") 002 FORMAT ("@ ",A5," label """,A65) 003 FORMAT ("@ ",A5," tick on") 004 FORMAT ("@ ",A5," tick major size ",f8.6) 005 FORMAT ("@ ",A5," tick minor size ",f8.6) 007 FORMAT ("@ ",A5," ticklabel on") 008 FORMAT ("@ ",A5," ticklabel char size 0.800000") 009 FORMAT ("@ legend on") 010 FORMAT ("@ legend box linestyle 0") 016 FORMAT ("@ xaxes scale Logarithmic") 017 FORMAT ("@ yaxes scale Logarithmic") END SUBROUTINE SUBROUTINE append_to_file (ndata, xdata, ydata, & mdc, tdata, rdc, idc, snp, & tfile, nfile, afile, lcname, cstring) BIND (C,NAME='append_to_file_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: rdc, idc, snp INTEGER (KIND=c_int), INTENT(IN) :: ndata INTEGER (KIND=c_int), INTENT(IN) :: tfile, tdata INTEGER (KIND=c_int), INTENT(IN) :: nfile, afile, lcname CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: cstring CHARACTER (LEN=lcname) :: cname INTEGER :: WA INTEGER :: start, step REAL (KIND=c_double), INTENT(IN) :: mdc REAL (KIND=c_double), DIMENSION(ndata), INTENT(IN) :: xdata, ydata CHARACTER (LEN=65) :: xlabel INTERFACE CHARACTER(LEN=65) FUNCTION xlegend (job, nleg, idl, cdc, snp) INTEGER, INTENT(IN) :: job, nleg, idl, snp DOUBLE PRECISION, INTENT(IN) :: cdc END FUNCTION END INTERFACE do i=1, lcname cname(i:i) = cstring(i) enddo xlabel = xlegend(rdc, idc, tfile, mdc, snp) step=1 start=1 if (rdc .eq. IDRI) start=3 if (rdc .eq. IDCH) start=2 if (rdc .eq. IDSP) then start=2 step=1 endif if (tfile .eq. 0) then call CHARINT(Nom, nfile) write (200, *) "@target G0.S",Nom(2:LEN_TRIM(Nom)) write (200, *) "@s",Nom(2:LEN_TRIM(Nom))," legend """, cname, """" if (tdata .eq. 1) then write (200, *) "@s",Nom(2:LEN_TRIM(Nom))," line linestyle 0" write (200, 019) else write (200, 013) endif else write (200, 015) xlabel, cname endif do WA=start, ndata, step write (200, 014) xdata(WA), ydata(WA) enddo write (200, *) if (nfile .eq. afile-1) close(200) 013 FORMAT ("@type xy") 014 FORMAT (f20.10,3x,f20.10) 015 FORMAT ("# ",A65," ",A36) 019 FORMAT ("@type bar") END SUBROUTINE SUBROUTINE save_to_file (scf, sfi, & ndata, xdata, ydata, & scalex, scaley, tdata, & mdc, rdc, idc, snp, tfile, lcname, cstring) BIND (C,NAME='save_to_file_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: scf, rdc, idc, snp, tfile INTEGER (KIND=c_int), INTENT(IN) :: ndata, scalex, scaley, tdata, lcname CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: cstring CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: sfi CHARACTER (LEN=scf) :: sfile CHARACTER (LEN=lcname) :: cname INTEGER :: step, start REAL (KIND=c_double), INTENT(IN) :: mdc REAL (KIND=c_double), DIMENSION(ndata), INTENT(IN) :: xdata, ydata INTEGER :: WA, WB CHARACTER (LEN=5) :: xaxis="xaxis", yaxis="yaxis" CHARACTER (LEN=65) :: xlabel CHARACTER (LEN=36) :: ylabel INTERFACE CHARACTER(LEN=65) FUNCTION xlegend (job, nleg, idl, cdc, snp) INTEGER, INTENT(IN) :: job, nleg, idl, snp DOUBLE PRECISION, INTENT(IN) :: cdc END FUNCTION CHARACTER (LEN=36) FUNCTION ylegend (job, nleg, idl, snp) INTEGER, INTENT(IN) :: job, nleg, idl, snp END FUNCTION END INTERFACE ylabel = ylegend(rdc, idc, tfile, snp) do i=1, lcname cname(i:i) = cstring(i) enddo xlabel = xlegend(rdc, idc, tfile, mdc, snp) start=1 step=1 if (rdc .eq. IDRI) start=3 if (rdc .eq. IDCH) start=2 if (rdc .eq. IDSP) then start=2 step=1 endif do i=1, scf sfile(i:i) = sfi(i) enddo open(unit=100, file=sfile, action="write", status='unknown') if (tfile .eq. 0) then write (100, 001) write (100, 002) xaxis, xlabel write (100, 003) xaxis if (scalex .eq. 1) write (100, 016) write (100, 004) xaxis, 1.0 write (100, 005) xaxis, 0.5 write (100, 007) xaxis write (100, 008) xaxis write (100, 002) yaxis, ylabel write (100, 006) yaxis, cname write (100, 003) yaxis if (scaley .eq. 1) write (100, 017) write (100, 004) yaxis, 1.0 write (100, 005) yaxis, 0.5 write (100, 007) yaxis write (100, 008) yaxis write (100, 009) write (100, 010) if (rdc.eq.IDRI .or. rdc.eq.IDCH) then if (tdata .eq. 1) then WB=0 do WA=start, ndata if (ydata(WA) .ne. 0) then call CHARINT(Nom, WB) call CHARINT(Nom2, WA) write (100, *) "@ s",Nom(2:LEN_TRIM(Nom))," legend ""t",Nom2(2:LEN_TRIM(Nom2)),"""" write (100, *) "@ s",Nom(2:LEN_TRIM(Nom))," line linestyle 0" write (100, *) "@ s",Nom(2:LEN_TRIM(Nom))," symbol fill pattern 14" WB=WB+1 endif enddo WB=0 do WA=start, ndata if (ydata(WA) .ne. 0) then call CHARINT(Nom, WB) write (100, *) "@target G0.S",Nom(2:LEN_TRIM(Nom)) write (100, 019) write (100, 018) WA, ydata(WA) WB=WB+1 endif enddo else write (100, 011) cname write (100, 012) write (100, 013) do WA=start, ndata if (ydata(WA) .ne. 0.0) write (100, 018) WA, ydata(WA) enddo endif elseif (rdc .eq. IDSP) then if (tdata .eq. 1) then WB=0 do WA=start, ndata, step if (ydata(WA) .ne. 0) then call CHARINT(Nom, WB) call CHARINT(Nom2, WA-1) write (100, *) "@ s",Nom(2:LEN_TRIM(Nom))," legend ""t",Nom2(2:LEN_TRIM(Nom2)),"""" write (100, *) "@ s",Nom(2:LEN_TRIM(Nom))," line linestyle 0" write (100, *) "@ s",Nom(2:LEN_TRIM(Nom))," symbol fill pattern 14" WB=WB+1 endif enddo WB=0 do WA=start, ndata, step if (ydata(WA) .ne. 0) then call CHARINT(Nom, WB) write (100, *) "@target G0.S",Nom(2:LEN_TRIM(Nom)) write (100, 019) write (100, 018) WA, ydata(WA) WB=WB+1 endif enddo else write (100, 011) cname write (100, 012) write (100, 013) ! Check this do WA=start, ndata, 2 write (100, 018) WA, ydata(WA) enddo endif elseif (rdc.eq.IDSQ .or. rdc.eq.IDSK) then write (100, 011) cname write (100, 012) write (100, 013) do WA=start, ndata write (100, 014) xdata(WA), ydata(WA) enddo else if (tdata .eq. 0) then write (100, 011) cname write (100, 012) write (100, 013) else write (100, 011) cname write (100, 012) write (100, 019) endif do WA=start, ndata write (100, 014) xdata(WA), ydata(WA) enddo endif else write (100, 015) xlabel, cname do WA=start, ndata, step write (100, 014) xdata(WA), ydata(WA) enddo endif close(100) 001 FORMAT ("@with g0") 002 FORMAT ("@ ",A5," label """,A65) 003 FORMAT ("@ ",A5," tick on") 004 FORMAT ("@ ",A5," tick major size ",f8.6) 005 FORMAT ("@ ",A5," tick minor size ",f8.6) 006 FORMAT ("@ ",A5," label ",A36) 007 FORMAT ("@ ",A5," ticklabel on") 008 FORMAT ("@ ",A5," ticklabel char size 0.800000") 009 FORMAT ("@ legend on") 010 FORMAT ("@ legend box linestyle 0") 011 FORMAT ("@ s0 legend """,A50,"""") 012 FORMAT ("@target G0.S0") 013 FORMAT ("@type xy") 014 FORMAT (f20.10,3x,f20.10) 015 FORMAT ("# ",A65," ",A36) 016 FORMAT ("@ xaxes scale Logarithmic") 017 FORMAT ("@ yaxes scale Logarithmic") 018 FORMAT (i4,5x,f20.10) 019 FORMAT ("@type bar") END SUBROUTINE atomes_1.3.1/src/fortran/chemistry.F900000664000175000017500000000620515212624223017241 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file chemistry.F90 !! @short Basic chemistry analysis !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION chemistry () BIND (C,NAME='chemistry_') ! ! Density, number density, concentrations, empirical formula ! USE PARAMETERS IMPLICIT NONE INTEGER :: REF1, REF2, REF3 INTEGER, DIMENSION(:), ALLOCATABLE :: INDEX_FORM ! Formula index INTEGER, DIMENSION(:), ALLOCATABLE :: REFP LOGICAL :: UNCLEAR, UNFRAC ! ! Determination of the empirical formula ! Détermination de la formule brute ! if (allocated(INDEX_FORM)) deallocate(INDEX_FORM) allocate(INDEX_FORM(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: chemistry"//CHAR(0), "Table: INDEX_FORM"//CHAR(0)) chemistry = 0 goto 001 endif if (allocated(REFP)) deallocate(REFP) allocate(REFP(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: chemistry"//CHAR(0), "Table: REFP"//CHAR(0)) chemistry = 0 goto 001 endif do i=1, NSP REFP(i)= NBSPBS(i) enddo do i=1, NSP if (i .eq. 1)then REF1=NBSPBS(i) REF2=i else REF3=REF1 REF1=min(NBSPBS(i),REF1) if (REF3 .ne. REF1) REF2=i endif enddo UNCLEAR=.true. UNFRAC=.false. l=1 do while (UNCLEAR) UNCLEAR=.false. do i=1, NSP if (i .ne. REF2) then if (.not.UNFRAC) then m=1 do while (mod(m*REFP(i),REF1).ne.0 .and. m.lt.REF1) m=m+1 enddo if (mod(m*REFP(i),REF1) .eq. 0) then INDEX_FORM(i)=m*REFP(i)/REF1 UNCLEAR=.true. else INDEX_FORM(i)=NBSPBS(i) UNCLEAR=.true. UNFRAC=.true. endif else INDEX_FORM(i)=NBSPBS(i) endif endif enddo if (UNFRAC) then INDEX_FORM(REF2)=NBSPBS(REF2) else INDEX_FORM(REF2)=REFP(REF2)/NBSPBS(REF2) endif if (UNCLEAR) then UNCLEAR=.false. do i=1, NSP-1 do j=i+1, NSP y=dble(INDEX_FORM(i))/dble(INDEX_FORM(j)) z=dble(NBSPBS(i))/dble(NBSPBS(j)) if (y .ne. z) UNCLEAR=.true. enddo enddo if (UNCLEAR) then REFP=REFP/l l=l+1 REFP=REFP*l endif endif enddo ! To send_chem_info_ call send_chem_info (INDEX_FORM) chemistry = 1 001 continue if (allocated(INDEX_FORM)) deallocate(INDEX_FORM) if (allocated(REFP)) deallocate(REFP) END FUNCTION atomes_1.3.1/src/fortran/c3d.F900000664000175000017500000000701515212624223015703 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file c3d.F90 !! @short Write Chem3D atomic coordinates !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION read_c3d (c3d_f, lc3d) BIND (C,NAME='read_c3d_') ! ! Lecture of atom types and coordinates - C3D files ! USE PARAMETERS IMPLICIT NONE LOGICAL :: isok INTEGER (KIND=c_int), INTENT(IN) :: lc3d CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: c3d_f CHARACTER (LEN=lc3d) :: c3d_file INTERFACE INTEGER FUNCTION TEST_LENGTH(UNITFILE, NATL) INTEGER, INTENT(IN) :: UNITFILE, NATL END FUNCTION END INTERFACE do i=1, lc3d c3d_file(i:i) = c3d_f(i) enddo read_c3d=1 inquire (file=c3d_file, exist=isok) if (isok) then open (unit=20, file=c3d_file, action='read', status='old', err=001) NS=0 read (20, *, err=002) NA NS = TEST_LENGTH(20, NA+1) if (NS .eq. 1) then rewind(20) if (allocated(FULLPOS)) deallocate(FULLPOS) allocate (FULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_c3d"//CHAR(0), "Table: FULLPOS"//CHAR(0)) endif if (allocated(TAB_OF_TYPE)) deallocate(TAB_OF_TYPE) allocate (TAB_OF_TYPE(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_c3d"//CHAR(0), "Table: TAB_OF_TYPE"//CHAR(0)) endif do i=1, NS read (20, *, err=002) do j=1, NA read (20, *, err=002) TAB_OF_TYPE(j), k, FULLPOS(j,1,i), FULLPOS(j,2,i), FULLPOS(j,3,i) enddo enddo read_c3d=0 else read_c3d=2 endif 002 continue close (20) 001 continue endif END FUNCTION INTEGER (KIND=c_int) FUNCTION write_c3d (c3d_f, lc3d, fc3d, tc3d) BIND (C,NAME='write_c3d_') ! ! output of atom types and coordinates - Chem3D files ! USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: lc3d, fc3d, tc3d CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: c3d_f DOUBLE PRECISION, DIMENSION(3) :: savep CHARACTER (LEN=lc3d) :: c3d_file INTERFACE INTEGER FUNCTION TEST_LENGTH(UNITFILE, NATL) INTEGER, INTENT(IN) :: UNITFILE, NATL END FUNCTION END INTERFACE do i=1, lc3d c3d_file(i:i) = c3d_f(i) enddo write_c3d=1 open (unit=20, file=c3d_file, action='write', status='unknown', err=001) do i=1, NS write (20, '(i10)') NA write (20, *) do j=1, NA if (fc3d .eq. 1) then if (NCELLS .gt. 1) then NBOX => THE_BOX(i) else NBOX => THE_BOX(1) endif savep = MATMUL(FULLPOS(j,:,i),NBOX%carttofrac) else savep = FULLPOS(j,:,i) if (tc3d .eq. 1) then savep(:) = savep(:)/ANGTOBOHR endif endif write (20, '(a2,3x,i2,3(3x,f15.10))', err=002) TL(LOT(j)), 0, savep enddo enddo write_c3d=0 002 continue close (20) 001 continue END FUNCTION atomes_1.3.1/src/fortran/lattice.F900000664000175000017500000003371515212624223016665 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file lattice.F90 !! @short Lattice properties !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION add_cells (NP, NPS, sizec) BIND (C,NAME='add_cells_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NP, NPS INTEGER (KIND=c_int), INTENT(IN), DIMENSION(3) :: sizec INTEGER :: PIA, PIB, PIC, PID, PIE, PIF DOUBLE PRECISION, DIMENSION(3) :: lshift INTEGER, DIMENSION(:), ALLOCATABLE :: NEWLOT DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: NEWPOS INTERFACE INTEGER FUNCTION SEND_POS(NPA, NPS, NLOT, POSTAB) INTEGER, INTENT(IN) :: NPA, NPS INTEGER, DIMENSION(:), INTENT(IN) :: NLOT DOUBLE PRECISION, DIMENSION(:,:,:), INTENT(IN) :: POSTAB END FUNCTION END INTERFACE PIA = (sizec(1)+1)*(sizec(2)+1)*(sizec(3)+1) PIB = NP * PIA if (allocated(NEWPOS)) deallocate(NEWPOS) allocate(NEWPOS(PIB,3,NPS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: add_cells"//CHAR(0), "Table: NEWPOS"//CHAR(0)) add_cells=0 goto 001 endif if (allocated(NEWLOT)) deallocate(NEWLOT) allocate(NEWLOT(PIB), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: add_cells"//CHAR(0), "Table: NEWLOT"//CHAR(0)) add_cells=0 goto 001 endif do PIA=1, NPS PIB=0 do PID=1, sizec(1)+1 do PIE=1, sizec(2)+1 do PIF=1, sizec(3)+1 lshift(1)=(PID-1)*THE_BOX(1)%lvect(1,1) + (PIE-1)*THE_BOX(1)%lvect(2,1) + (PIF-1)*THE_BOX(1)%lvect(3,1) lshift(2)=(PID-1)*THE_BOX(1)%lvect(1,2) + (PIE-1)*THE_BOX(1)%lvect(2,2) + (PIF-1)*THE_BOX(1)%lvect(3,2) lshift(3)=(PID-1)*THE_BOX(1)%lvect(1,3) + (PIE-1)*THE_BOX(1)%lvect(2,3) + (PIF-1)*THE_BOX(1)%lvect(3,3) do PIC=1, NP PIB=PIB+1 NEWPOS(PIB,:,PIA) = FULLPOS(PIC,:,PIA) + lshift(:) NEWLOT(PIB) = LOT(PIC) enddo enddo enddo enddo enddo add_cells=0 call init_data (PIB, NSP, NPS, 0) if (SEND_POS(PIB, NPS, NEWLOT, NEWPOS) .eq. 1) add_cells=1 001 continue if (allocated(NEWPOS)) deallocate(NEWPOS) if (allocated(NEWLOT)) deallocate(NEWLOT) END FUNCTION INTEGER (KIND=c_int) FUNCTION shift_box_center (NP, NPS, cshift, REF) BIND (C,NAME='shift_box_center_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NP, NPS, REF REAL (KIND=c_double), INTENT(IN), DIMENSION(3) :: cshift INTEGER :: PIB, PIC, PID DOUBLE PRECISION, DIMENSION(3,3) :: h_mat DOUBLE PRECISION, DIMENSION(3) :: TPO INTERFACE INTEGER FUNCTION SEND_POS(NPA, NPS, NLOT, POSTAB) INTEGER, INTENT(IN) :: NPA, NPS INTEGER, DIMENSION(:), INTENT(IN) :: NLOT DOUBLE PRECISION, DIMENSION(:,:,:), INTENT(IN) :: POSTAB END FUNCTION END INTERFACE h_mat(:,1) = THE_BOX(1)%lvect(1,:) h_mat(:,2) = THE_BOX(1)%lvect(2,:) h_mat(:,3) = THE_BOX(1)%lvect(3,:) do PIC=1, NPS do PIB=1, NP do PID=1, 3 FULLPOS(PIB,PID,PIC) = FULLPOS(PIB,PID,PIC) + cshift(PID) enddo TPO=MATMUL(THE_BOX(1)%lrecp, FULLPOS(PIB,:,PIC)) TPO=TPO-NINT(TPO/0.5) FULLPOS(PIB,:,PIC) = MATMUL(h_mat,TPO) !FULLPOS(PIB,:,PIC) = FULLPOS(PIB,:,PIC) + cshift(2) !FULLPOS(PIB,:,PIC) = FULLPOS(PIB,:,PIC) + cshift(3) enddo enddo if (REF .eq. 1) then shift_box_center = SEND_POS (NP, NPS, LOT, FULLPOS) else shift_box_center = 1 endif END FUNCTION DOUBLE PRECISION FUNCTION f_dot_product (a, b) DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: a, b INTEGER :: DIM f_dot_product = 0.0d0 do DIM=1, 3 f_dot_product = f_dot_product + a(DIM)*b(DIM) enddo END FUNCTION SUBROUTINE f_cross_product (a, b, c) DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: a, b DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: c c(:)=0.0d0 c(1) = a(2)*b(3) - a(3)*b(2) c(2) = a(3)*b(1) - a(1)*b(3) c(3) = a(1)*b(2) - a(2)*b(1) END SUBROUTINE INTEGER (KIND=c_int) FUNCTION lattice (totl, lid, vectors, vmod, angles, lat, cfrac, apbc) BIND (C,NAME='lattice_') ! ! Compute lattice angles from lattice vectors ! Lattice vector modules ! Lattice volume ! Reciprocal lattice parameters ! USE PARAMETERS IMPLICIT NONE REAL (KIND=c_double), INTENT(IN), DIMENSION(3,3) :: vectors REAL (KIND=c_double), INTENT(IN), DIMENSION(3) :: vmod REAL (KIND=c_double), INTENT(INOUT), DIMENSION(3) :: angles INTEGER (KIND=c_int), INTENT(IN) :: totl, lid, lat, cfrac, apbc DOUBLE PRECISION :: ALPHA, BETA, GAMA ! Lattice Angles DOUBLE PRECISION :: CALPHA, SALPHA, CBETA, SBETA, CGAMA, SGAMA ! Cosinus and Sinus DOUBLE PRECISION, DIMENSION(3) :: TMPLA INTERFACE DOUBLE PRECISION FUNCTION f_dot_product (a, b) DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: a, b END FUNCTION SUBROUTINE f_cross_product (a, b, c) DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: a, b DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: c END SUBROUTINE END INTERFACE ! Transition from C/Gtk to Fortran90 ! lattice = 0 if (lid .eq. 0) then if (allocated(THE_BOX)) deallocate(THE_BOX) allocate(THE_BOX(totl), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: lattice_"//CHAR(0), "Type: THE_BOX"//CHAR(0)) goto 001 endif NCELLS = totl endif NBOX => THE_BOX(lid+1) NBOX%GLASS=.false. NBOX%CUBIC=.false. if (lat .gt. 0) then do i=1, 3 do j=1, 3 NBOX%lvect(j,i) = vectors(i,j) enddo enddo NBOX%modv(1) = vmod(1) NBOX%modv(2) = vmod(2) NBOX%modv(3) = vmod(3) ALPHA = angles(1) BETA = angles(2) GAMA = angles(3) if (lat .eq. 1) then if (ALPHA.eq.90.0 .and. BETA.eq.90.0 .and. GAMA.eq.90.0) then NBOX%GLASS=.true. if (NBOX%modv(1).eq.NBOX%modv(2) .and. NBOX%modv(2).eq.NBOX%modv(3)) NBOX%CUBIC=.true. endif if (ALPHA.eq.90.0) then ALPHA = PI/2.0d0 SALPHA = 1.0d0 CALPHA = 0.0d0 else ALPHA = ALPHA*PI/180.0d0 SALPHA = sin(ALPHA) CALPHA = cos(ALPHA) endif if (BETA.eq.90.0) then BETA = PI/2.0d0 SBETA = 1.0d0 CBETA = 0.0d0 else BETA = BETA*PI/180.0d0 SBETA = sin(BETA) CBETA = cos(BETA) endif if (GAMA.eq.90.0) then GAMA = PI/2.0d0 SGAMA = 1.0d0 CGAMA = 0.0d0 else GAMA = GAMA*PI/180.0d0 SGAMA = sin(GAMA) CGAMA = cos(GAMA) endif NBOX%lvect(1,1) = NBOX%modv(1) NBOX%lvect(1,2) = 0.0d0 NBOX%lvect(1,3) = 0.0d0 NBOX%lvect(2,1) = NBOX%modv(2)*CGAMA NBOX%lvect(2,2) = NBOX%modv(2)*SGAMA NBOX%lvect(2,3) = 0.d0 NBOX%lvect(3,1) = NBOX%modv(3)*CBETA LTEMP = (CALPHA - CBETA*CGAMA)/SGAMA NBOX%lvect(3,2) = NBOX%modv(3)*LTEMP NBOX%lvect(3,3) = NBOX%modv(3)*sqrt(SBETA*SBETA - LTEMP*LTEMP) else NBOX%modv(1)=sqrt(NBOX%lvect(1,1)**2+NBOX%lvect(1,2)**2+NBOX%lvect(1,3)**2) NBOX%modv(2)=sqrt(NBOX%lvect(2,1)**2+NBOX%lvect(2,2)**2+NBOX%lvect(2,3)**2) NBOX%modv(3)=sqrt(NBOX%lvect(3,1)**2+NBOX%lvect(3,2)**2+NBOX%lvect(3,3)**2) ALPHA= (NBOX%lvect(3,1)*NBOX%lvect(2,1)+ & NBOX%lvect(3,2)*NBOX%lvect(2,2)+ & NBOX%lvect(3,3)*NBOX%lvect(2,3))/(NBOX%modv(2)*NBOX%modv(3)) BETA = (NBOX%lvect(1,1)*NBOX%lvect(3,1)+ & NBOX%lvect(1,2)*NBOX%lvect(3,2)+ & NBOX%lvect(1,3)*NBOX%lvect(3,3))/(NBOX%modv(1)*NBOX%modv(3)) GAMA = (NBOX%lvect(1,1)*NBOX%lvect(2,1)+ & NBOX%lvect(1,2)*NBOX%lvect(2,2)+ & NBOX%lvect(1,3)*NBOX%lvect(2,3))/(NBOX%modv(1)*NBOX%modv(2)) if (ALPHA.eq.0.0d0 .and. BETA.eq.0.0d0 .and. GAMA.eq.0.0d0) then NBOX%GLASS=.true. if (NBOX%modv(1).eq.NBOX%modv(2) .and. NBOX%modv(2).eq.NBOX%modv(3)) NBOX%CUBIC=.true. endif if (ALPHA.eq.0.0d0) then angles(1) = 90.0d0 ALPHA = PI/2.0d0 SALPHA = 1.0d0 CALPHA = 0.0d0 else ALPHA = acos(ALPHA) angles(1) = ALPHA*180.0d0/PI SALPHA = sin(ALPHA) CALPHA = cos(ALPHA) endif if (BETA.eq.0.0d0) then angles(2) = 90.0d0 BETA = PI/2.0d0 SBETA = 1.0d0 CBETA = 0.0d0 else BETA = acos(BETA) angles(2) = BETA*180.0d0/PI SBETA = sin(BETA) CBETA = cos(BETA) endif if (GAMA.eq.0.0d0) then angles(3) = 90.0d0 GAMA = PI/2.0d0 SGAMA = 1.0d0 CGAMA = 0.0d0 else GAMA = acos(GAMA) angles(3) = GAMA*180.0d0/PI SGAMA = sin(GAMA) CGAMA = cos(GAMA) endif endif if (ALPHA.eq.0.0d0 .and. BETA.eq.0.0d0 .and. GAMA.eq.0.0d0) then ! If some problems display a GTK error message. call show_error ("Problem with the simulation box parameters"//CHAR(0), & "Computed angles are equal to 0.0d0"//CHAR(0), "Function: lattice"//CHAR(0)) goto 001 endif ! write (*,*) NBOX%lvect(1,1), NBOX%lvect(1,2), NBOX%lvect(1,3) ! write (*,*) NBOX%lvect(2,1), NBOX%lvect(2,2), NBOX%lvect(2,3) ! write (*,*) NBOX%lvect(3,1), NBOX%lvect(3,2), NBOX%lvect(3,3) ! write (*,*) NBOX%modv(1), NBOX%modv(2), NBOX%modv(3) ! write (*,*) ALPHA*180/PI, BETA*180/PI, GAMA*180/PI NBOX%minv=min(NBOX%modv(1),NBOX%modv(2)) NBOX%minv=min(NBOX%minv,NBOX%modv(3)) NBOX%maxv=max(NBOX%modv(1),NBOX%modv(2)) NBOX%maxv=max(NBOX%maxv,NBOX%modv(3)) NBOX%VOLUME=(NBOX%lvect(1,2)*NBOX%lvect(2,3)-NBOX%lvect(1,3)*NBOX%lvect(2,2))*NBOX%lvect(3,1) & +(NBOX%lvect(1,3)*NBOX%lvect(2,1)-NBOX%lvect(1,1)*NBOX%lvect(2,3))*NBOX%lvect(3,2) & +(NBOX%lvect(1,1)*NBOX%lvect(2,2)-NBOX%lvect(1,2)*NBOX%lvect(2,1))*NBOX%lvect(3,3) NBOX%VOLUME = abs(NBOX%VOLUME) ! Reciprocal lattice parameters ! call f_cross_product (NBOX%lvect(2,:), NBOX%lvect(3,:), TMPLA) NBOX%lrecp(1,:) = TMPLA / f_dot_product(NBOX%lvect(1,:), TMPLA) call f_cross_product (NBOX%lvect(3,:), NBOX%lvect(1,:), TMPLA) NBOX%lrecp(2,:) = TMPLA / f_dot_product(NBOX%lvect(2,:), TMPLA) call f_cross_product (NBOX%lvect(1,:), NBOX%lvect(2,:), TMPLA) NBOX%lrecp(3,:) = TMPLA / f_dot_product(NBOX%lvect(3,:), TMPLA) ! modules of the reciprocal lattice vectors NBOX%modr(1)=sqrt(NBOX%lrecp(1,1)**2+NBOX%lrecp(1,2)**2+NBOX%lrecp(1,3)**2) NBOX%modr(2)=sqrt(NBOX%lrecp(2,1)**2+NBOX%lrecp(2,2)**2+NBOX%lrecp(2,3)**2) NBOX%modr(3)=sqrt(NBOX%lrecp(3,1)**2+NBOX%lrecp(3,2)**2+NBOX%lrecp(3,3)**2) NBOX%modr(:) = 2.0d0*PI*NBOX%modr(:) NBOX%minr=min(NBOX%modr(1),NBOX%modr(2)) NBOX%minr=min(NBOX%minr,NBOX%modr(3)) NBOX%maxr=max(NBOX%modr(1),NBOX%modr(2)) NBOX%maxr=max(NBOX%maxr,NBOX%modr(3)) ! Creation of the matrix to convert fractional to cartesian coordinates z=sqrt(abs(1 - CALPHA*CALPHA & - CBETA*CBETA & - CGAMA*CGAMA & + 2*CALPHA*CBETA*CGAMA)) z=z/SGAMA i = 0 if (cfrac > 0) i = cfrac - 1 NBOX%fractocart(1,1)=NBOX%modv(1)/(2.0**(i)) NBOX%fractocart(1,2)=0.0d0 NBOX%fractocart(1,3)=0.0d0 NBOX%fractocart(2,1)=NBOX%modv(2)*CGAMA/(2.0**(i)) NBOX%fractocart(2,2)=NBOX%modv(2)*SGAMA/(2.0**(i)) NBOX%fractocart(2,3)=0.0d0 NBOX%fractocart(3,1)=NBOX%modv(3)*CBETA/(2.0**(i)) NBOX%fractocart(3,2)=NBOX%modv(3)*((CALPHA-CBETA*CGAMA)/SGAMA)/(2.0**(i)) NBOX%fractocart(3,3)=NBOX%modv(3)*z/(2.0**(i)) !write (6, *) !write (6, '("Frac to cart matrix in lattice:")') !write (6, '(f15.10,4x,f15.10,4x,f15.10)') NBOX%fractocart(1,1), NBOX%fractocart(1,2), NBOX%fractocart(1,3) !write (6, '(f15.10,4x,f15.10,4x,f15.10)') NBOX%fractocart(2,1), NBOX%fractocart(2,2), NBOX%fractocart(2,3) !write (6, '(f15.10,4x,f15.10,4x,f15.10)') NBOX%fractocart(3,1), NBOX%fractocart(3,2), NBOX%fractocart(3,3) !write (6, *) ! Creation of the matrix to convert cartesian to fractional coordinates NBOX%carttofrac(1,1)=1.0d0/NBOX%fractocart(1,1) NBOX%carttofrac(1,2)=0.0d0 NBOX%carttofrac(1,3)=0.0d0 NBOX%carttofrac(2,1)=-CGAMA/(SGAMA*(NBOX%modv(1)/(2.0**(i)))) NBOX%carttofrac(2,2)=1.0d0/NBOX%fractocart(2,2) NBOX%carttofrac(2,3)=0.0d0 NBOX%carttofrac(3,1)=((NBOX%modv(2)/(2.0**(i)))*(NBOX%modv(3)/(2.0**(i))))/NBOX%VOLUME NBOX%carttofrac(3,1)=NBOX%carttofrac(3,1) * (CALPHA*CGAMA - CBETA)/SALPHA NBOX%carttofrac(3,2)=((NBOX%modv(1)/(2.0**(i)))*(NBOX%modv(3)/(2.0**(i))))/NBOX%VOLUME NBOX%carttofrac(3,2)=NBOX%carttofrac(3,2) * (CBETA*CGAMA - CALPHA)/SGAMA NBOX%carttofrac(3,3)=1.0d0/NBOX%fractocart(3,3) if (apbc .eq. 1) then PBC=.true. else PBC=.false. NBOX%GLASS=.false. NBOX%CUBIC=.false. endif else NBOX%VOLUME=0.0d0 NBOX%minr=0.0d0 NBOX%modv(:)=0.0d0 NBOX%modr(:)=0.0d0 NBOX%lvect(:,:)=0.0d0 NBOX%lrecp(:,:)=0.0d0 NBOX%fractocart(:,:)=0.0d0 NBOX%GLASS=.false. NBOX%CUBIC=.false. PBC=.false. endif REAL_DENSITY=0.0d0 TOTAL_DENSITY=0.0d0 if (NBOX%VOLUME.ne.0.0) then do i=1, NSP REAL_DENSITY=REAL_DENSITY+NBSPBS(i)*MASS(i) enddo TOTAL_DENSITY = dble(NA)/NBOX%VOLUME REAL_DENSITY=REAL_DENSITY/AVOGADRO REAL_DENSITY=REAL_DENSITY/NBOX%VOLUME REAL_DENSITY=REAL_DENSITY*10.0d0 endif ! To lattice_info_ call lattice_info (lid, NBOX%VOLUME, REAL_DENSITY, & NBOX%lvect, NBOX%lrecp, NBOX%modv, angles, & NBOX%fractocart, NBOX%carttofrac) if (lid .eq. totl-1) then MBOX = 0.0d0 MEANVOL = 0.0d0 OVERALL_CUBIC = .true. do i=1, NCELLS MBOX = MBOX + THE_BOX(i)%minv MEANVOL = MEANVOL + THE_BOX(i)%VOLUME if (OVERALL_CUBIC .and. THE_BOX(i)%CUBIC) then OVERALL_CUBIC = .true. else OVERALL_CUBIC = .false. endif enddo MEANVOL = MEANVOL / NCELLS MBOX = MBOX / (2.0d0*NCELLS) endif lattice = 1 001 continue END FUNCTION atomes_1.3.1/src/fortran/molecules.F900000664000175000017500000002562715212624223017233 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file molecules.F90 !! @short Fragment(s) and molecule(s) analysis !! @author Sébastien Le Roux LOGICAL FUNCTION ADD_MOL(this_mol, MOL_ID, STEP_ID) USE PARAMETERS IMPLICIT NONE TYPE (MOL), POINTER, INTENT(INOUT) :: this_mol INTEGER, INTENT(IN) :: MOL_ID, STEP_ID INTEGER :: AAA TYPE (MOL), POINTER :: NEW allocate(NEW, STAT=ERR) if (ERR .ne. 0) then !call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: ADD_MOL"//CHAR(0), "Pointer: NEW"//CHAR(0)) ADD_MOL = .false. goto 001 endif NEW%MID = MOL_ID NEW%STEP = STEP_ID NEW%ATOMES = 0 allocate(NEW%BSP(NSP), STAT=ERR) if (ERR .ne. 0) then !call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: ADD_MOL"//CHAR(0), "TABLE: NEW%BSP"//CHAR(0)) ADD_MOL = .false. goto 001 endif nullify(NEW%FIRST_AT) do AAA=1, NSP NEW%BSP(AAA) = 0 enddo nullify(NEW%NEXT) NEW%PREV => this_mol this_mol%NEXT => NEW this_mol => NEW ADD_MOL = .true. 001 continue END FUNCTION LOGICAL FUNCTION ADD_ATO(this_mol, ATOM_ID) USE PARAMETERS IMPLICIT NONE TYPE (MOL), POINTER, INTENT(INOUT) :: this_mol INTEGER, INTENT(IN) :: ATOM_ID TYPE (AT), POINTER :: NEW allocate(NEW, STAT=ERR) if (ERR .ne. 0) then !call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: ADD_ATO"//CHAR(0), "POINTER: NEW"//CHAR(0)) ADD_ATO = .false. goto 001 endif NEW%IND = ATOM_ID NEW%PREV => this_mol%ATOM this_mol%ATOM%NEXT => NEW this_mol%ATOM => NEW ADD_ATO=.true. 001 continue END FUNCTION RECURSIVE SUBROUTINE SETMOL (this_mol, toglin, stmb, molcount, the_step, the_atom, the_id) USE PARAMETERS IMPLICIT NONE TYPE (MOL), POINTER, INTENT(INOUT) :: this_mol INTEGER, INTENT(INOUT) :: molcount, stmb INTEGER, INTENT(IN) :: the_step, the_atom, the_id INTEGER, DIMENSION(NA), INTENT(INOUT) :: toglin INTEGER :: MC, MD INTERFACE LOGICAL FUNCTION ADD_ATO(this_mol, ATOM_ID) USE PARAMETERS TYPE (MOL), POINTER, INTENT(INOUT) :: this_mol INTEGER, INTENT(IN) :: ATOM_ID END FUNCTION END INTERFACE molcount=molcount+1 toglin(the_atom) = the_id this_mol%ATOMES = this_mol%ATOMES + 1 this_mol%BSP(LOT(the_atom)) = this_mol%BSP(LOT(the_atom)) + 1 stmb = stmb + 1 if (this_mol%ATOMES > 1) then if (.not. ADD_ATO (this_mol, the_atom)) then molcount=-1 goto 001 endif else allocate(this_mol%FIRST_AT, STAT=ERR) if (ERR .ne. 0) then !call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: SETMOL"//CHAR(0), "POINTER: this_mol%FIRST_AT"//CHAR(0)) molcount=-1 goto 001 endif !write (6, '("Adding first atom:: Mol= ",i4,", At= ",i4)') this_mol%MID, the_atom this_mol%FIRST_AT%IND = the_atom this_mol%ATOM => this_mol%FIRST_AT endif if (stmb .eq. NA) goto 002 if (molcount.eq.10000) goto 001 if (molcount.eq.-1) goto 001 do MC=1, CONTJ(the_atom, the_step) MD = VOISJ(MC,the_atom,the_step) if (toglin(MD).eq.0 .and. molcount.lt.10000) then call SETMOL (this_mol, toglin, stmb, molcount, the_step, VOISJ(MC,the_atom,the_step), the_id) endif if (stmb .eq. NA) goto 002 if (molcount.eq.10000) goto 001 if (molcount.eq.-1) goto 001 enddo 002 continue molcount=molcount-1 001 continue END SUBROUTINE SETMOL INTEGER (KIND=c_int) FUNCTION molecules (frag_and_mol, allbonds) BIND (C,NAME='molecules_') USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: frag_and_mol, allbonds INTEGER :: TOTMOL, MOLPS, MAXMOL INTEGER, DIMENSION(:), ALLOCATABLE :: ATMOL INTEGER, DIMENSION(:), ALLOCATABLE :: ATVS, MTMBS #ifdef OPENMP INTEGER :: NUMTH #endif INTERFACE LOGICAL FUNCTION ADD_MOL(this_mol, MOL_ID, STEP_ID) USE PARAMETERS TYPE (MOL), POINTER, INTENT(INOUT) :: this_mol INTEGER, INTENT(IN) :: MOL_ID, STEP_ID END FUNCTION RECURSIVE SUBROUTINE SETMOL (this_mol, toglin, stmb, molcount, the_step, the_atom, the_id) USE PARAMETERS TYPE (MOL), POINTER, INTENT(INOUT) :: this_mol INTEGER, INTENT(INOUT) :: molcount, stmb INTEGER, INTENT(IN) :: the_step, the_atom, the_id INTEGER, DIMENSION(NA), INTENT(INOUT) :: toglin END SUBROUTINE END INTERFACE TYPE (AT), POINTER :: TMPAT TYPE (MOL), ALLOCATABLE, TARGET :: THEMOL TYPE (MOL), POINTER :: TMPMOL if (allocated(FULLPOS)) deallocate(FULLPOS) k = 0 do i=1, NS do j=1, NA if (CONTJ(j,i) .eq. 0) k = k + 1 enddo enddo MAXMOL = k + allbonds/2; if (allocated(THEMOL)) deallocate(THEMOL) allocate(THEMOL, STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THEMOL" ALC=.true. molecules = 0 goto 001 endif if (allocated(MTMBS)) deallocate(MTMBS) allocate(MTMBS(NS), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="MTMBS" ALC=.true. molecules = 0 goto 001 endif if (frag_and_mol .eq. 1) then call allocate_mol_data () endif molecules = 1 #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () if (NS.lt.NUMTH) NUMTH=NS !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(i, j, k, l, m, n, o, ERR, TOGL, THEMOL, TMPMOL, & !$OMP& TOTMOL, MOLCOUNTER, TMBS, ATMOL, TMPAT, ATVS) & !$OMP& SHARED(NUMTH, frag_and_mol, NS, NA, NSP, LOT, MTMBS, CONTJ, VOISJ, ALC, ALC_TAB) #endif if (allocated(TOGL)) deallocate(TOGL) allocate(TOGL(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TOGL" ALC=.true. molecules = 0 #ifdef OPENMP goto 005 #else goto 001 #endif endif nullify(TMPAT) #ifdef OPENMP !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS #ifdef OPENMP if (molecules .eq.0) goto 004 #endif allocate(TMPMOL, STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TMPMOL" ALC=.true. molecules = 0 #ifdef OPENMP goto 004 #else goto 001 #endif endif TOGL(:)=0 THEMOL%MID = 1 THEMOL%STEP = i THEMOL%ATOMES = 0 nullify(THEMOL%FIRST_AT) allocate(THEMOL%BSP(NSP), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THEMOL%BSP" ALC=.true. molecules = 0 #ifdef OPENMP goto 004 #else goto 001 #endif endif do j=1, NSP THEMOL%BSP(j) = 0 enddo nullify(THEMOL%NEXT) nullify(THEMOL%PREV) TMBS=0 TOTMOL = 0 MTMBS(i)=0 MOLCOUNTER=0 TMPMOL => THEMOL n = 1 002 continue do j=n, NA if (MOLCOUNTER.eq.0 .and. TOGL(j).eq.0) then TOTMOL = TOTMOL + 1 if (TOTMOL > 1) then if (.not.ADD_MOL(TMPMOL, MTMBS(i)+1, i)) then ALC_TAB="ADD_MOL" ALC=.true. molecules = 0 #ifdef OPENMP goto 004 #else goto 001 #endif endif endif MTMBS(i) = MTMBS(i) + 1 call SETMOL (TMPMOL, TOGL, TMBS, MOLCOUNTER, i, j, TOTMOL) if (MOLCOUNTER .lt. 0) then ALC_TAB="SETMOL" ALC=.true. #ifdef OPENMP goto 004 #else goto 001 #endif endif if (TMBS.eq.NA) goto 003 ! The 10000 iterations break required because of F90 limitations if (MOLCOUNTER.eq.10000) goto 002 MOLCOUNTER = 0 n = j goto 002 else if (MOLCOUNTER.gt.0 .and.TOGL(j).eq.TOTMOL) then do l=1, CONTJ(j,i) m = VOISJ(l,j,i) if (TOGL(m).eq.0) then MOLCOUNTER = 0 call SETMOL (TMPMOL, TOGL, TMBS, MOLCOUNTER, i, VOISJ(l,j,i), TOTMOL) if (MOLCOUNTER .lt. 0) then ALC_TAB="SETMOL" ALC=.true. #ifdef OPENMP goto 004 #else goto 001 #endif endif if (TMBS.eq.NA) goto 003 if (MOLCOUNTER.eq.10000) goto 002 MOLCOUNTER = 1 endif enddo endif enddo if (TMBS .lt. NA) then MOLCOUNTER = 0 goto 002 endif 003 continue if (frag_and_mol .eq. 1) then TMPMOL => THEMOL call allocate_mol_for_step (i, MTMBS(i)) do j=1, MTMBS(i) allocate(ATMOL(TMPMOL%ATOMES), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ATMOL" ALC=.true. molecules = 0 #ifdef OPENMP goto 004 #else goto 001 #endif endif if (TMPMOL%ATOMES .gt. 1) then allocate(TMPAT, STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TMPAT" ALC=.true. molecules = 0 #ifdef OPENMP goto 004 #else goto 001 #endif endif TMPAT = TMPMOL%FIRST_AT do k=1, TMPMOL%ATOMES ATMOL(k) = TMPAT%IND if (k < TMPMOL%ATOMES) then TMPAT => TMPAT%NEXT deallocate (TMPAT%PREV) endif enddo deallocate (TMPAT) else ATMOL(1) = TMPMOL%FIRST_AT%IND deallocate (TMPMOL%FIRST_AT) endif call send_mol_details (TMPMOL%STEP, TMPMOL%MID, TMPMOL%ATOMES, NSP, TMPMOL%BSP, ATMOL) if (TMPMOL%ATOMES .gt. 1) then do l=1, TMPMOL%ATOMES m = ATMOL(l) n = CONTJ(m,TMPMOL%STEP) allocate(ATVS(n), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ATVS" ALC=.true. molecules = 0 #ifdef OPENMP goto 004 #else goto 001 #endif endif do o=1, n ATVS(o)= VOISJ(o,m,TMPMOL%STEP) enddo call send_mol_neighbors (TMPMOL%STEP, TMPMOL%MID, m, n, ATVS) deallocate(ATVS) enddo endif deallocate(ATMOL) if (j .lt. MTMBS(i)) TMPMOL => TMPMOL%NEXT enddo call setup_molecules (i) endif do while (TMPMOL%MID .gt. 1) TMPMOL => TMPMOL%PREV deallocate (TMPMOL%NEXT%BSP) deallocate (TMPMOL%NEXT) enddo deallocate (TMPMOL%BSP) call setup_fragments (i, TOGL) #ifdef OPENMP 004 continue #endif enddo #ifdef OPENMP !$OMP END DO NOWAIT 005 continue if (allocated(TOGL)) deallocate (TOGL) if (allocated(THEMOL)) deallocate(THEMOL) if (allocated(ATMOL)) deallocate(ATMOL) if (allocated(ATVS)) deallocate(ATVS) !$OMP END PARALLEL #else if (allocated(TOGL)) deallocate (TOGL) if (allocated(THEMOL)) deallocate(THEMOL) if (allocated(ATVS)) deallocate(ATVS) if (allocated(ATMOL)) deallocate(ATMOL) #endif MOLPS = 0 j = 0 do i=1, NS MOLPS = MOLPS + MTMBS(i) j = max(MTMBS(i), j) enddo call send_coord_opengl (2, 1, 0, 0, j, 1) call init_menu_fragmol (2) if (frag_and_mol .eq. 1) then call setup_menu_molecules () endif molecules=1 001 continue if (ALC) then call show_error ("Impossible to allocate memory !"//CHAR(0), & "Function: molecules"//CHAR(0), CHAR(9)//"Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(MTMBS)) deallocate(MTMBS) END FUNCTION MOLECULES atomes_1.3.1/src/fortran/angles.F900000664000175000017500000002477315212624223016515 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file angles.F90 !! @short Distribution of bond angles and dihedrals !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION bond_angles(nda) BIND (C,NAME='bond_angles_') USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: nda INTEGER, DIMENSION(:,:,:,:), ALLOCATABLE :: ANGLEA INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SUM_ANGA DOUBLE PRECISION :: ANG DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: ANGTAB #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE DOUBLE PRECISION FUNCTION ANGIJK (ATG1, ATG2, ATG3, ASTEP) INTEGER, INTENT(IN) :: ATG1, ATG2, ATG3, ASTEP END FUNCTION END INTERFACE if (allocated(ANGLEA)) deallocate(ANGLEA) allocate(ANGLEA(NSP,NSP,NSP,nda), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bond_angles"//CHAR(0), "Table: ANGLEA"//CHAR(0)) bond_angles=0 goto 001 endif ANGLEA(:,:,:,:)=0 DELTA_ANG=180.0/dble(nda) #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then do i=1, NS ! OpemMP on Atoms !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(j, k, l, m, n, ANG, ANG_I) & !$OMP& SHARED(NUMTH, NS, i, NA, NCELLS, LOT, CONTJ, VOISJ, ANGLEA, DELTA_ANG, nda) !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA if (CONTJ(j,i) .gt. 1) then do k=1, CONTJ(j,i)-1 do l=k+1, CONTJ(j,i) m=VOISJ(k,j,i) n=VOISJ(l,j,i) ANG = ANGIJK (m, j, n, i) ANG_I=AnINT (ANG/DELTA_ANG) if (ANG_I.le.0) ANG_I=1 if (ANG_I.gt.nda) ANG_I=nda !$OMP ATOMIC ANGLEA(LOT(m),LOT(j),LOT(n),ANG_I)=ANGLEA(LOT(m),LOT(j),LOT(n),ANG_I)+1 if (LOT(m) .ne. LOT(n)) then !$OMP ATOMIC ANGLEA(LOT(n),LOT(j),LOT(m),ANG_I)=ANGLEA(LOT(n),LOT(j),LOT(m),ANG_I)+1 endif enddo enddo endif enddo !$OMP END DO NOWAIT !$OMP END PARALLEL enddo else ! OpemMP on MD steps !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(i, j, k, l, m, n, ANG, ANG_I) & !$OMP& SHARED(NUMTH, NS, NA, NCELLS, LOT, CONTJ, VOISJ, ANGLEA, DELTA_ANG, nda) !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS do j=1, NA if (CONTJ(j,i) .gt. 1) then do k=1, CONTJ(j,i)-1 do l=k+1, CONTJ(j,i) m=VOISJ(k,j,i) n=VOISJ(l,j,i) ANG = ANGIJK (m, j, n, i) ANG_I=AnINT (ANG/DELTA_ANG) if (ANG_I.le.0) ANG_I=1 if (ANG_I.gt.nda) ANG_I=nda #ifdef OPENMP !$OMP ATOMIC #endif ANGLEA(LOT(m),LOT(j),LOT(n),ANG_I)=ANGLEA(LOT(m),LOT(j),LOT(n),ANG_I)+1 if (LOT(m) .ne. LOT(n)) then #ifdef OPENMP !$OMP ATOMIC #endif ANGLEA(LOT(n),LOT(j),LOT(m),ANG_I)=ANGLEA(LOT(n),LOT(j),LOT(m),ANG_I)+1 endif enddo enddo endif enddo enddo #ifdef OPENMP !$OMP END DO NOWAIT !$OMP END PARALLEL endif #endif if (allocated(SUM_ANGA)) deallocate(SUM_ANGA) allocate (SUM_ANGA(NSP,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bond_angles"//CHAR(0), "Table: SUM_ANGA"//CHAR(0)) bond_angles=0 goto 001 endif do i=1, NSP do j=1, NSP do k=1, NSP SUM_ANGA(i,j,k) = 0 do l=1, nda SUM_ANGA(i,j,k) = SUM_ANGA(i,j,k) + ANGLEA(i,j,k,l) enddo enddo enddo enddo if (allocated(ANGTAB)) deallocate(ANGTAB) allocate(ANGTAB(nda), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bond_angles"//CHAR(0), "Table: ANGTAB"//CHAR(0)) bond_angles=0 goto 001 endif ANGTAB(:)=0.0 m=0 do i=1, NSP do j=1, NSP do k=1, NSP if (SUM_ANGA(i,j,k) .ne. 0) then do l=1, nda ANGTAB(l)=100.0*dble(ANGLEA(i,j,k,l))/dble(SUM_ANGA(i,j,k)) enddo call save_curve (nda, ANGTAB, m, IDAN) else call save_curve (0, ANGTAB, m, IDAN) endif m=m+1 enddo enddo enddo bond_angles=1 001 continue if (allocated(ANGLEA)) deallocate(ANGLEA) if (allocated(SUM_ANGA)) deallocate(SUM_ANGA) if (allocated(ANGTAB)) deallocate(ANGTAB) END FUNCTION bond_angles INTEGER (KIND=c_int) FUNCTION bond_diedrals(nda) BIND (C,NAME='bond_diedrals_') USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: nda INTEGER, DIMENSION(:,:,:,:,:), ALLOCATABLE :: ANGLED INTEGER, DIMENSION(:,:,:,:), ALLOCATABLE :: SUM_ANGD DOUBLE PRECISION :: ANG DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: ANGTAB #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE DOUBLE PRECISION FUNCTION DIEDRE (DG1, DG2, DG3, DG4, DSTEP) INTEGER, INTENT(IN) :: DG1, DG2, DG3, DG4, DSTEP END FUNCTION END INTERFACE if (allocated(ANGLED)) deallocate(ANGLED) allocate(ANGLED(NSP,NSP,NSP,NSP,nda), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bond_angles"//CHAR(0), "Table: ANGLED"//CHAR(0)) bond_diedrals=0 goto 001 endif ANGLED(:,:,:,:,:)=0 DELTA_ANG=180.0/dble(nda) #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA do i=1, NS ! OpemMP on Atoms !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(j, k, l, m, n, o, p, ANG, ANG_I) & !$OMP& SHARED(NUMTH, NS, i, NA, NCELLS, LOT, CONTJ, VOISJ, ANGLED, DELTA_ANG, nda) !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA do k=1, CONTJ(j,i) m=VOISJ(k,j,i) if (CONTJ(m,i) .ge. 2) then do l=1, CONTJ(m,i) n=VOISJ(l,m,i) if (n .ne. j) then if (CONTJ(n,i) .ge. 2) then do o=1, CONTJ(n,i) p = VOISJ(o,n,i) if (p.ne.j .and. p.ne.m) then ANG=DIEDRE (j, m, n, p, i) ANG_I=AnINT (ANG/DELTA_ANG)+1 if (ANG_I.le.0) ANG_I=1 if (ANG_I.gt.nda) ANG_I=nda !$OMP ATOMIC ANGLED(LOT(j),LOT(m),LOT(n),LOT(p),ANG_I)=ANGLED(LOT(j),LOT(m),LOT(n),LOT(p),ANG_I)+1 if (LOT(j).ne.LOT(m) .or. LOT(j).ne.LOT(n) .or. LOT(j).ne.LOT(p)) then !$OMP ATOMIC ANGLED(LOT(p),LOT(n),LOT(m),LOT(j),ANG_I)=ANGLED(LOT(p),LOT(n),LOT(m),LOT(j),ANG_I)+1 endif endif enddo endif endif enddo endif enddo enddo !$OMP END DO NOWAIT !$OMP END PARALLEL enddo else ! OpemMP on MD steps !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(i, j, k, l, m, n, o, p, ANG, ANG_I) & !$OMP& SHARED(NUMTH, NS, NA, NCELLS, LOT, CONTJ, VOISJ, ANGLED, DELTA_ANG, nda) !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS do j=1, NA do k=1, CONTJ(j,i) m=VOISJ(k,j,i) if (CONTJ(m,i) .ge. 2) then do l=1, CONTJ(m,i) n=VOISJ(l,m,i) if (n .ne. j) then if (CONTJ(n,i) .ge. 2) then do o=1, CONTJ(n,i) p = VOISJ(o,n,i) if (p.ne.j .and. p.ne.m) then ANG=DIEDRE (j, m, n, p, i) ANG_I=AnINT (ANG/DELTA_ANG)+1 if (ANG_I.le.0) ANG_I=1 if (ANG_I.gt.nda) ANG_I=nda #ifdef OPENMP !$OMP ATOMIC #endif ANGLED(LOT(j),LOT(m),LOT(n),LOT(p),ANG_I)=ANGLED(LOT(j),LOT(m),LOT(n),LOT(p),ANG_I)+1 if (LOT(j).ne.LOT(m) .or. LOT(j).ne.LOT(n) .or. LOT(j).ne.LOT(p)) then #ifdef OPENMP !$OMP ATOMIC #endif ANGLED(LOT(p),LOT(n),LOT(m),LOT(j),ANG_I)=ANGLED(LOT(p),LOT(n),LOT(m),LOT(j),ANG_I)+1 endif endif enddo endif endif enddo endif enddo enddo enddo #ifdef OPENMP !$OMP END DO NOWAIT !$OMP END PARALLEL endif #endif if (allocated(SUM_ANGD)) deallocate(SUM_ANGD) allocate (SUM_ANGD(NSP,NSP,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bond_angles"//CHAR(0), "Table: SUM_ANGD"//CHAR(0)) bond_diedrals=0 goto 001 endif SUM_ANGD(:,:,:,:) = 0 do i=1, NSP do j=1, NSP do k=1, NSP do l=1, NSP do m=1, nda SUM_ANGD(i,j,k,l) = SUM_ANGD(i,j,k,l) + ANGLED(i,j,k,l,m) enddo enddo enddo enddo enddo if (allocated(ANGTAB)) deallocate(ANGTAB) allocate(ANGTAB(nda), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bond_angles"//CHAR(0), "Table: ANGTAB"//CHAR(0)) bond_diedrals=0 goto 001 endif ANGTAB(:)=0.0 n=NSP*NSP*NSP do i=1, NSP do j=1, NSP do k=1, NSP do l=1, NSP if (SUM_ANGD(i,j,k,l) .ne. 0) then o=1 do m=1, nda ANGTAB(m)=100.0*dble(ANGLED(i,j,k,l,m))/dble(SUM_ANGD(i,j,k,l)) enddo call save_curve (nda, ANGTAB, n, IDAN) else call save_curve (0, ANGTAB, n, IDAN) endif n=n+1 enddo enddo enddo enddo bond_diedrals=1 001 continue if (allocated(ANGLED)) deallocate(ANGLED) if (allocated(SUM_ANGD)) deallocate(SUM_ANGD) if (allocated(ANGTAB)) deallocate(ANGTAB) END FUNCTION bond_diedrals atomes_1.3.1/src/fortran/escs.F900000664000175000017500000000453415212624223016172 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file escs.F90 !! @short Edge and Corner sharing tetrahedra analysis !! @author Sébastien Le Roux LOGICAL FUNCTION EESCS () USE PARAMETERS IMPLICIT NONE LOGICAL :: DMTXOK INTERFACE LOGICAL FUNCTION ALLOCEDCO (alloc) LOGICAL, INTENT(IN) :: alloc END FUNCTION LOGICAL FUNCTION DISTMTX(NAN, LAN, LOOKNGB, UPNGB, MOLVOL) INTEGER, INTENT(IN) :: NAN INTEGER, DIMENSION(NAN), INTENT(IN) :: LAN LOGICAL, INTENT(IN) :: LOOKNGB, UPNGB, MOLVOL END FUNCTION END INTERFACE if (.not. ALLOCEDCO (.true.)) then EESCS=.false. goto 001 endif CALC_PRINGS=.false. NOHP=.false. ! Modify DISTMX to evaluate ES/CS DMTXOK = DISTMTX(NA, LOT, .false., .false., .false.) if (.not. DMTXOK) then EESCS=.false. goto 001 endif do i=1, NS do j=1, NA do o=1, NSP if (CONTJ(j,i).eq.4 .and. (LA_COUNT(j,o,i) .eq. 4)) then if(NS .gt. 1) TDSA(LOT(j),o,i)=TDSA(LOT(j),o,i)+1 TDA(LOT(j),o) = TDA(LOT(j),o)+1 endif enddo enddo enddo do j=1, NSP do o=1, NSP do i=1, NS MTABL(i)=EDGEA(j,o,i) enddo z=0.0d0 call MOYENNE(MTABL, NS, z) call ECT_TYPE(z, MTABL, NS, ETYPEA(j,o)) do i=1, NS MTABL(i)=CORNERA(j,o,i) enddo z=0.0d0 call MOYENNE(MTABL, NS, z) call ECT_TYPE(z, MTABL, NS, CTYPEA(j,o)) do i=1, NS MTABL(i)=DEFA(j,o,i) enddo z=0.0d0 call MOYENNE(MTABL, NS, z) call ECT_TYPE(z, MTABL, NS, DETYPEA(j,o)) do i=1, NS MTABL(i)=TDSA(j,o,i) enddo call MOYENNE(MTABL, NS, z) call ECT_TYPE(z, MTABL, NS, ETDA(j,o)) enddo enddo 001 continue EESCS=.true. END FUNCTION atomes_1.3.1/src/fortran/rings-guttman.F900000664000175000017500000004562715212624223020044 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file rings-guttman.F90 !! @short Guttman ring statistics !! @author Sébastien Le Roux INTEGER FUNCTION GUTTMAN_RINGS() USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE INTEGER FUNCTION RECRINGS(VID) INTEGER, INTENT(IN) :: VID END FUNCTION END INTERFACE GUTTMAN_RINGS = 0 #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. ! Dynamic allocation of pointers and tables used in the "RINGS" subroutine if (NS.ge.1 .and. NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA #ifdef DEBUG write (6, *) "OpenMP on atoms, NUMTH= ",NUMTH #endif call GUTTMAN_RING_SEARCH_ATOMS (NUMTH) else #ifdef DEBUG write (6, *) "OpenMP on MD steps, NUMTH= ",NUMTH #endif call GUTTMAN_RING_SEARCH_STEPS (NUMTH) endif #else call GUTTMAN_RING_SEARCH_STEPS () #endif GUTTMAN_RINGS = RECRINGS(2) END FUNCTION #ifdef OPENMP SUBROUTINE GUTTMAN_RING_SEARCH_ATOMS (NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: NUMTH TYPE (RING), DIMENSION(:), ALLOCATABLE :: THE_RING INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE, INDTH INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING, ORDRING INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVR, ORDR INTEGER :: LORA, LORB, LORC, ri INTERFACE RECURSIVE SUBROUTINE INSIDE_RING (THE_RING, FND, S_IR, AI_IR, RID, TAE, TAH, LRA, LRB, & NRPAT, RSAVED, OSAVED, TRING, INDE, INDH, RESL, CPT, VPT) USE PARAMETERS TYPE (RING), DIMENSION(TAILLD), INTENT(INOUT) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_IR, AI_IR, RID INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, INTENT(IN) :: LRA, LRB INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT END SUBROUTINE INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI END FUNCTION INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR,NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED END FUNCTION SUBROUTINE DEL_THIS_RING (TLED, RSAVED, OSAVED, TRING, RESL, INDT) USE PARAMETERS INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING END SUBROUTINE END INTERFACE ri = 0 if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(ORDRING)) deallocate(ORDRING) allocate(ORDRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDRING" ALC=.true. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif do i=1, NS p=0 SAVRING(:,:,:)=0 ORDRING(:,:,:)=0 call SETUP_CPAT_VPAT_RING (NA, i, CONTJ, VOISJ, CPAT, VPAT) ! OpenMP on atoms only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(MAXAT, MINAT, RPAT, APNA, SAUT, RUNSEARCH, & !$OMP& j, k, l, m, n, o, LORA, LORB, LORC, TAILLE, TAILLH, THE_RING, RES_LIST, & !$OMP& FOUND, ERR, SAVR, ORDR, TRING, INDTE, INDTH) & !$OMP& SHARED(i, p, NUMTH, NS, NA, TLT, NSP, LOT, TAILLR, TAILLD, CONTJ, VOISJ, CPAT, VPAT, & !$OMP& NUMA, FACTATRING, ATRING, MAXPNA, MINPNA, AMPAT, ABAB, NO_HOMO, ALLRINGS, & !$OMP& TBR, ALC, ALC_TAB, NCELLS, PBC, MAXN, SAVRING, ORDRING, NRING, INDRING, PNA, ri) if (allocated(RPAT)) deallocate(RPAT) allocate(RPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RPAT" ALC=.true. goto 002 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 002 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 002 endif if(allocated(INDTH)) deallocate(INDTH) allocate(INDTH(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTH" goto 002 endif if(allocated(APNA)) deallocate(APNA) allocate(APNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="APNA" ALC=.true. goto 002 endif if(allocated(SAVR)) deallocate(SAVR) allocate(SAVR(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVR" ALC=.true. goto 002 endif if(allocated(ORDR)) deallocate(ORDR) allocate(ORDR(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDR" ALC=.true. goto 002 endif if(allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 002 endif if(allocated(THE_RING)) deallocate(THE_RING) allocate(THE_RING(TAILLD), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THE_RING" ALC=.true. goto 002 endif TRING(:)=0 SAVR(:,:,:)=0 ORDR(:,:,:)=0 !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA if (TBR .or. ALC) goto 003 if (TLT .eq. NSP+1 .or. LOT(j) .eq. TLT) then !$OMP CRITICAL p = p+1 o = p !$OMP END CRITICAL APNA(:) = 0 MINAT=TAILLD MAXAT=1 SAUT=.true. if (CPAT(j).ge.2) then do l=1, CPAT(j) LORA=LOT(j) LORB=LOT(VPAT(j,l)) if (ABAB) then if (LORA .ne. LORB) then RUNSEARCH=.true. else RUNSEARCH=.false. endif else RUNSEARCH=.true. endif if (RUNSEARCH) then FOUND=.false. RPAT(:) = 0 THE_RING(1)%ATOM=j THE_RING(1)%SPEC=LORA THE_RING(1)%NEIGHBOR=1 m = VPAT(j,l) RPAT(m)=1 THE_RING(2)%ATOM=m THE_RING(2)%SPEC=LORB THE_RING(2)%NEIGHBOR=CPAT(m) TAILLE=TAILLR TAILLH=TAILLR RES_LIST(:) = 0 INDTE(:) = 0 INDTH(:) = 0 call INSIDE_RING (THE_RING, FOUND, i, m, 2, TAILLE, TAILLH, LORB, LORA, & RPAT, SAVR, ORDR, TRING, INDTE, INDTH, RES_LIST, CPAT, VPAT) if (ALC) ALC_TAB="INSIDE_RING" if (TBR .or. ALC) goto 003 if (FOUND) then if (APNA(TAILLE) .eq. 0) then APNA(TAILLE)=1 MINAT=min(MINAT,TAILLE) MAXAT=max(MAXAT,TAILLE) ! if (FACTATPNA) ATPNA(TAILLE,o,i)=1 SAUT=.false. endif elseif (NO_HOMO .and. RES_LIST(TAILLH) .ne. 0) then ! Some shortest ring with HP bonds and < TAILLR were found ! delete these rings now call DEL_THIS_RING (TAILLH, SAVR, ORDR, TRING, RES_LIST, INDTH) else if (CONTJ(j,i) .ge. 2 .and. CONTJ(m,i) .ge. 2) then !$OMP ATOMIC AMPAT(o,i)=AMPAT(o,i)+1 endif endif endif enddo endif if (.not. SAUT) then do k=3, TAILLR do l=3, TAILLR if (APNA(k).eq.1 .and. APNA(l).eq.1) then !$OMP ATOMIC PNA(k,l,i)=PNA(k,l,i)+1 endif enddo enddo !$OMP ATOMIC MAXPNA(MAXAT,i)=MAXPNA(MAXAT,i)+1 !$OMP ATOMIC MINPNA(MINAT,i)=MINPNA(MINAT,i)+1 endif endif !$OMP CRITICAL do k=3, TAILLR if (TRING(k).gt.0) then if (NRING(k,i).gt.0) then o = 0 do l=1, TRING(k) do m=1, NRING(k,i) SAUT=.true. do n=1, k if (SAVRING(k,m,n) .ne. SAVR(k,l,n)) then SAUT=.false. exit endif enddo if (SAUT) exit enddo if (.not.SAUT) then o = o + 1 if (NRING(k,i)+o .gt. NUMA) then TBR=.true. goto 004 endif do m=1, k SAVRING(k,NRING(k,i)+o,m) = SAVR(k,l,m) ORDRING(k,NRING(k,i)+o,m) = ORDR(k,l,m) enddo endif enddo NRING(k,i)=NRING(k,i)+o else do l=1, TRING(k) do m=1, k SAVRING(k,l,m) = SAVR(k,l,m) ORDRING(k,l,m) = ORDR(k,l,m) enddo enddo NRING(k,i) = TRING(k) endif endif enddo 004 continue !$OMP END CRITICAL 003 continue enddo !$OMP END DO NOWAIT 002 continue if (allocated(RPAT)) deallocate (RPAT) if (allocated(RES_LIST)) deallocate (RES_LIST) if (allocated(INDTE)) deallocate (INDTE) if (allocated(INDTH)) deallocate (INDTH) if (allocated(APNA)) deallocate (APNA) if (allocated(TRING)) deallocate (TRING) if (allocated(SAVR)) deallocate (SAVR) if (allocated(ORDR)) deallocate (ORDR) if (allocated(THE_RING)) deallocate (THE_RING) !$OMP END PARALLEL if (ALC .or. TBR) goto 001 !do j=3, TAILLR ! write (6, '("s= ",i4,", j= ",i2,", nr(",i2,",",i4,")= ",i2)') i,j,j,i, NRING(j,i) ! if (NRING(j,i) .gt. 0) then ! do k=1, NRING(j,i) ! write (6, *) " k= ",k,", R(o)= ",ORDRING(j,k,1:j) ! enddo ! endif !enddo ri = ri + RINGS_TO_OGL (i, 2, NRING, SAVRING, ORDRING) enddo 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: GUTTMAN_RING_SEARCH_ATOMS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(ORDRING)) deallocate (ORDRING) if (ri .eq. NS) ri = RINGS_TO_OGL_MENU (2, NRING) END SUBROUTINE #endif #ifdef OPENMP SUBROUTINE GUTTMAN_RING_SEARCH_STEPS (NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: NUMTH #else SUBROUTINE GUTTMAN_RING_SEARCH_STEPS () USE PARAMETERS IMPLICIT NONE #endif TYPE (RING), DIMENSION(:), ALLOCATABLE :: THE_RING INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE, INDTH INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING, ORDRING INTEGER :: LORA, LORB, ri INTERFACE RECURSIVE SUBROUTINE INSIDE_RING (THE_RING, FND, S_IR, AI_IR, RID, TAE, TAH, LRA, LRB, & NRPAT, RSAVED, OSAVED, TRING, INDE, INDH, RESL, CPT, VPT) USE PARAMETERS TYPE (RING), DIMENSION(TAILLD), INTENT(INOUT) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_IR, AI_IR, RID INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, INTENT(IN) :: LRA, LRB INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT END SUBROUTINE INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI END FUNCTION INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR,NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED END FUNCTION SUBROUTINE DEL_THIS_RING (TLED, RSAVED, OSAVED, TRING, RESL, INDT) USE PARAMETERS INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING END SUBROUTINE END INTERFACE ri = 0 #ifdef OPENMP ! OpenMP on steps only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(TAILLE, TAILLH, MAXAT, MINAT, SAUT, RUNSEARCH, & !$OMP& i, j, k, l, m, n, o, LORA, LORB, THE_RING, RES_LIST, INDTE, INDTH, APNA, & !$OMP& FOUND, ERR, TRING, SAVRING, ORDRING, RPAT, CPAT, VPAT) & !$OMP& SHARED(p, NUMTH, NS, NA, TLT, NSP, LOT, TAILLR, TAILLD, CONTJ, VOISJ, & !$OMP& NUMA, FACTATRING, ATRING, MAXPNA, MINPNA, AMPAT, ABAB, NO_HOMO, ALLRINGS, & !$OMP& TBR, ALC, ALC_TAB, NCELLS, THE_BOX, FULLPOS, PBC, MAXN, NRING, INDRING, PNA, ri) #endif if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(ORDRING)) deallocate(ORDRING) allocate(ORDRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDRING" ALC=.true. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif if (allocated(RPAT)) deallocate(RPAT) allocate(RPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RPAT" ALC=.true. goto 001 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 001 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 001 endif if(allocated(INDTH)) deallocate(INDTH) allocate(INDTH(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTH" goto 001 endif if(allocated(APNA)) deallocate(APNA) allocate(APNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="APNA" ALC=.true. goto 001 endif if(allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 001 endif if(allocated(THE_RING)) deallocate(THE_RING) allocate(THE_RING(TAILLD), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THE_RING" ALC=.true. goto 001 endif #ifdef OPENMP !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS if (TBR .or. ALC) goto 002 SAVRING(:,:,:)=0 ORDRING(:,:,:)=0 TRING(:)=0 call SETUP_CPAT_VPAT_RING (NA, i, CONTJ, VOISJ, CPAT, VPAT) o=0 do j=1, NA if (TLT .eq. NSP+1 .or. LOT(j) .eq. TLT) then o=o+1 APNA(:) = 0 MINAT=TAILLR MAXAT=1 SAUT=.true. if (CPAT(j).ge.2) then do l=1, CPAT(j) LORA=LOT(j) LORB=LOT(VPAT(j,l)) if (ABAB) then if (LORA .ne. LORB) then RUNSEARCH=.true. else RUNSEARCH=.false. endif else RUNSEARCH=.true. endif if (RUNSEARCH) then FOUND=.false. RPAT(:) = 0 THE_RING(1)%ATOM=j THE_RING(1)%SPEC=LORA THE_RING(1)%NEIGHBOR=1 m = VPAT(j,l) RPAT(m)=1 THE_RING(2)%ATOM=m THE_RING(2)%SPEC=LORB THE_RING(2)%NEIGHBOR=CPAT(m) TAILLE=TAILLR TAILLH=TAILLR RES_LIST(:) = 0 INDTE(:) = 0 INDTH(:) = 0 call INSIDE_RING (THE_RING, FOUND, i, m, 2, TAILLE, TAILLH, LORB, LORA, & RPAT, SAVRING, ORDRING, TRING, INDTE, INDTH, RES_LIST, CPAT, VPAT) if (ALC) ALC_TAB="INSIDE_RING" if (TBR .or. ALC) goto 002 if (FOUND) then if (APNA(TAILLE) .eq. 0) then APNA(TAILLE)=1 MINAT=min(MINAT,TAILLE) MAXAT=max(MAXAT,TAILLE) ! if (FACTATPNA) ATPNA(TAILLE,o,i)=1 SAUT=.false. endif elseif (NO_HOMO .and. RES_LIST(TAILLH) .ne. 0) then ! Some shortest ring with HP bonds and < TAILLR were found ! delete these rings now call DEL_THIS_RING (TAILLH, SAVRING, ORDRING, TRING, RES_LIST, INDTH) else if (CONTJ(j,i) .ge. 2 .and. CONTJ(m,i) .ge. 2) AMPAT(o,i)=AMPAT(o,i)+1 endif endif enddo endif if (.not. SAUT) then do k=3, TAILLR do l=3, TAILLR if (APNA(k).eq.1 .and. APNA(l).eq.1) then PNA(k,l,i)=PNA(k,l,i)+1 endif enddo enddo MAXPNA(MAXAT,i)=MAXPNA(MAXAT,i)+1 MINPNA(MINAT,i)=MINPNA(MINAT,i)+1 endif endif enddo do j=3, TAILLR NRING(j,i) = TRING(j) enddo !do j=3, TAILLR ! write (6, '("s= ",i4,", j= ",i2,", nr(",i2,",",i4,")= ",i2)') i,j,j,i, NRING(j,i) ! if (NRING(j,i) .gt. 0) then ! do k=1, NRING(j,i) ! write (6, *) " k= ",k,", R(o)= ",ORDRING(j,k,1:j) ! enddo ! endif !enddo j = RINGS_TO_OGL (i, 2, NRING, SAVRING, ORDRING) #ifdef OPENMP !$OMP ATOMIC #endif ri = ri + j 002 continue enddo #ifdef OPENMP !$OMP END DO NOWAIT #endif 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: GUTTMAN_RING_SEARCH_STEPS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(TRING)) deallocate (TRING) if (allocated(THE_RING)) deallocate (THE_RING) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(ORDRING)) deallocate (ORDRING) if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(RPAT)) deallocate (RPAT) if (allocated(RES_LIST)) deallocate (RES_LIST) if (allocated(INDTE)) deallocate (INDTE) if (allocated(INDTH)) deallocate (INDTH) if (allocated(APNA)) deallocate (APNA) #ifdef OPENMP !$OMP END PARALLEL #endif if (ri .eq. NS) ri = RINGS_TO_OGL_MENU (2, NRING) END SUBROUTINE atomes_1.3.1/src/fortran/mendeleiev.F900000664000175000017500000005733515212624223017361 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file mendeleiev.F90 !! @short Periodic table and diffraction data !! @author Sébastien Le Roux MODULE MENDELEIEV INTEGER :: MAXE=118 CHARACTER (LEN=2), DIMENSION(118), PARAMETER :: ATSYM=(/ & 'H ', 'He', 'Li', 'Be', 'B ', 'C ', 'N ', 'O ', 'F ', & 'Ne', 'Na', 'Mg', 'Al', 'Si', 'P ', 'S ', 'Cl', 'Ar', & 'K ', 'Ca', 'Sc', 'Ti', 'V ', 'Cr', 'Mn', 'Fe', 'Co', & 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br', 'Kr', & 'Rb', 'Sr', 'Y ', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', & 'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb', 'Te', 'I ', 'Xe', & 'Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', & 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu', 'Hf', & 'Ta', 'W ', 'Re', 'Os', 'Ir', 'Pt', 'Au', 'Hg', 'Tl', & 'Pb', 'Bi', 'Po', 'At', 'Rn', 'Fr', 'Ra', 'Ac', 'Th', & 'Pa', 'U ', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf', 'Es', & 'Fm', 'Md', 'No', 'Lr', 'Rf', 'Db', 'Sg', 'Bh', 'Hs', & 'Mt', 'Ds', 'Rg', 'Cn', 'Nh', 'Fl', 'Mc', 'Lv', 'Ts', 'Og' /) CHARACTER (LEN=14), DIMENSION(118), PARAMETER :: ELEMENT=(/ & 'Hydrogen ', 'Helium ', 'Lithium ', 'Beryllium ', & 'Boron ', 'Carbon ', 'Nitrogen ', 'Oxygen ', & 'Fluorine ', 'Neon ', 'Sodium ', 'Magnesium ', & 'Aluminum ', 'Silicon ', 'Phosphorus ', 'Sulfur ', & 'Chlorine ', 'Argon ', 'Potassium ', 'Calcium ', & 'Scandium ', 'Titanium ', 'Vanadium ', 'Chromium ', & 'Manganese ', 'Iron ', 'Cobalt ', 'Nickel ', & 'Copper ', 'Zinc ', 'Gallium ', 'Germanium ', & 'Arsenic ', 'Selenium ', 'Bromine ', 'Krypton ', & 'Rubidium ', 'Strontium ', 'Yttrium ', 'Zirconium ', & 'Niobium ', 'Molybdenum ', 'Technetium ', 'Ruthenium ', & 'Rhodium ', 'Palladium ', 'Silver ', 'Cadmium ', & 'Indium ', 'Tin ', 'Antimony ', 'Tellurium ', & 'Iodine ', 'Xenon ', 'Caesium ', 'Barium ', & 'Lanthanum ', 'Cerium ', 'Praseodymium ', 'Neodymium ', & 'Promethium ', 'Samarium ', 'Europium ', 'Gadolinium ', & 'Terbium ', 'Dysprosium ', 'Holmium ', 'Erbium ', & 'Thulium ', 'Ytterbium ', 'Lutetium ', 'Hafnium ', & 'Tantalum ', 'Tungsten ', 'Rhenium ', 'Osmium ', & 'Iridium ', 'Platinum ', 'Gold ', 'Mercury ', & 'Thallium ', 'Lead ', 'Bismuth ', 'Polonium ', & 'Astatine ', 'Radon ', 'Francium ', 'Radium ', & 'Actinium ', 'Thorium ', 'Protactinium ', 'Uranium ', & 'Neptunium ', 'Plutonium ', 'Americium ', 'Curium ', & 'Berkelium ', 'Californium ', 'Einsteinium ', 'Fermium ', & 'Mendelevium ', 'Nobelium ', 'Lawrencium ', 'Rutherfordium ', & 'Dubnium ', 'Seaborgium ', 'Bohrium ', 'Hassium ', & 'Meitnerium ', 'Darmstadtium ', 'Roentgenium ', 'Copernicium ', & 'Nihonium ', 'Flerovium ', 'Moscovium ', 'Livermorium ', & 'Tennessine ', 'Oganesson ' /) DOUBLE PRECISION, DIMENSION(118), PARAMETER :: AMASS=(/ & 1.008, 4.003, 6.94, 9.012, 10.81, 12.011, 14.007, 15.99, & 18.998, 20.18, 22.99, 24.305, 26.982, 28.085, 30.974, & 32.06, 35.45, 39.948, 39.098, 40.078, 44.956, 47.867, & 50.942, 51.996, 54.938, 55.845, 58.933, 58.693, 63.546, & 65.38, 69.723, 72.63, 74.922, 78.971, 79.904, 83.798, & 85.468, 87.62, 88.906, 91.224, 92.906, 95.95, 98.00, & 101.07, 102.906, 106.42, 107.868, 112.414, 114.818, & 118.71, 121.76, 127.60, 126.904, 131.293, 132.905, & 137.327, 138.905, 140.116, 140.908, 144.242, 145.00, & 150.36, 151.964, 157.25, 158.925, 162.50, 164.93, & 167.259, 168.934, 173.045, 174.967, 178.49, 180.948, & 183.84, 186.207, 190.23, 192.217, 195.084, 196.967, & 200.592, 204.38, 207.20, 208.98, 209.00, 210.00, & 222.00, 223.00, 226.00, 227.00, 232.038, 231.036, & 238.029, 237.00, 244.00, 243.00, 247.00, 247.00, & 251.00, 252.00, 257.00, 258.00, 258.00, 262.00, 267.00, & 268.00, 269.00, 270.00, 271.00, 278.00, 281.00, 282.00, & 285.00, 286.00, 289.00, 289.00, 293.00, 294.00, 294.00 /) ! Source: Beatriz Cordero and al. ! in "Covalent radii revisited", ! Dalton Trans., 2008, [DOI: 10.1039/b801115j]. DOUBLE PRECISION, DIMENSION(118), PARAMETER :: ARCOV=(/ & 0.31, 0.28, 1.28, 0.96, 0.84, 0.76, 0.71, 0.66, 0.57, & 0.58, 1.66, 1.41, 1.21, 1.11, 1.07, 1.05, 1.02, 1.06, & 2.03, 1.76, 1.70, 1.60, 1.53, 1.39, 1.39, 1.32, 1.26, & 1.24, 1.32, 1.22, 1.22, 1.20, 1.19, 1.20, 1.20, 1.16, & 2.20, 1.95, 1.90, 1.75, 1.64, 1.54, 1.47, 1.46, 1.42, & 1.39, 1.45, 1.44, 1.42, 1.39, 1.39, 1.38, 1.39, 1.40, & 2.44, 2.15, 2.07, 2.04, 2.03, 2.01, 1.99, 1.98, 1.98, & 1.96, 1.94, 1.92, 1.92, 1.89, 1.90, 1.87, 1.87, 1.75, & 1.70, 1.62, 1.51, 1.44, 1.41, 1.36, 1.36, 1.32, 1.45, & 1.46, 1.48, 1.40, 1.50, 1.50, 2.60, 2.21, 2.15, 2.06, & 2.00, 1.96, 1.90, 1.87, 1.80, 1.69, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /) ! Source: Slater, Journal of Chemical Physics, 41, 3199 (1964). DOUBLE PRECISION, DIMENSION(118), PARAMETER :: ARION=(/ & -0.24, 0.000, 0.900, 0.590, 0.250, 0.300, 1.320, 1.260, & 1.190, 0.000, 1.160, 0.860, 0.675, 0.400, 0.310, 1.700, & 1.670, 0.000, 1.520, 1.140, 0.885, 0.745, 0.680, 0.755, & 0.670, 0.690, 0.790, 0.830, 0.870, 0.880, 0.760, 0.670, & 0.720, 1.840, 1.820, 0.000, 1.660, 1.320, 1.040, 0.860, & 0.780, 0.730, 0.700, 0.705, 0.690, 0.755, 1.290, 1.090, & 0.940, 0.830, 0.740, 2.070, 2.060, 0.000, 1.810, 1.490, & 1.172, 1.010, 1.130, 1.123, 1.110, 1.098, 1.087, 1.078, & 1.063, 1.052, 1.041, 1.030, 1.020, 1.008, 1.001, 0.850, & 0.780, 0.650, 0.670, 0.530, 0.710, 0.710, 0.710, 1.160, & 1.025, 1.330, 1.170, 0.810, 0.760, 0.000, 1.940, 1.620, & 1.260, 0.000, 0.920, 1.030, 0.850, 0.850, 1.350, 0.990, & 0.970, 0.961, 0.000, 0.000, 0.000, 1.240, 0.000, 0.000, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, & 0.000, 0.000, 0.000, 0.000, 0.000, 0.000 /) ! Source: A. Bondi, J. Phys. Chem., 68, 441 (1964). DOUBLE PRECISION, DIMENSION(118), PARAMETER :: ARVDW=(/ & 1.20, 1.40, 1.82, 0.00, 0.00, 1.70, 1.55, 1.52, 1.47, & 1.54, 2.27, 1.73, 0.00, 2.10, 1.80, 1.80, 1.75, 1.88, & 2.75, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 1.63, 1.40, 1.39, 1.87, 0.00, 1.85, 1.90, 1.85, 2.02, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 1.63, 1.72, 1.58, 1.93, 2.17, 0.00, 2.06, 1.98, 2.16, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 1.75, 1.66, 1.55, 1.96, & 2.02, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 1.86, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /) ! Source: ! R D Shannon and C T Prewitt (1969) Acta Cryst. B25:925-946 ! R D Shannon (1976) Acta Cryst. A23:751-767. DOUBLE PRECISION, DIMENSION(118), PARAMETER :: ARCRY=(/ & 0.10, 0.00, 0.90, 0.41, 0.25, 0.29, 0.30, 1.21, 1.19, & 0.00, 1.16, 0.86, 0.53, 0.40, 0.31, 0.43, 1.67, 0.00, & 1.52, 1.14, 0.89, 0.75, 0.68, 0.76, 0.81, 0.69, 0.54, & 0.70, 0.71, 0.74, 0.76, 0.53, 0.72, 0.56, 1.82, 0.00, & 1.66, 1.32, 1.04, 0.86, 0.78, 0.79, 0.79, 0.82, 0.81, & 0.78, 1.29, 0.92, 0.94, 0.69, 0.90, 1.11, 2.06, 0.62, & 1.81, 1.49, 1.36, 1.15, 1.32, 1.30, 1.28, 1.10, 1.31, & 1.08, 1.18, 1.05, 1.04, 1.03, 1.02, 1.13, 1.00, 0.85, & 0.78, 0.74, 0.77, 0.77, 0.77, 0.74, 1.51, 0.83, 1.03, & 1.49, 1.17, 1.08, 0.76, 0.00, 1.94, 1.62, 1.26, 1.19, & 1.09, 0.87, 0.00, 1.00, 1.12, 1.11, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /) ! Source: http://www.ncnr.nist.gov/resources/n-lengths/ ! Neutron News - Sears, Varley F. ! "Neutron scattering lengths and cross sections" ! 1992 - Vol 3, Issue 3, p26-37 ! http://www.informaworld.com/10.1080/10448639208218770 DOUBLE PRECISION, DIMENSION(105), PARAMETER :: COHEB=(/ & -3.739, 3.26, -1.90, 7.79, 5.304, 6.646, 9.36, & 5.803, 5.654, 4.566, 3.580, 5.375, 3.349, 4.1491, & 5.131, 2.847, 9.577, 1.909, 3.67, 4.70, 12.29, & -3.438, -0.3824, 3.635, -3.73, 9.45, 2.49, 10.3, & 7.718, 5.680, 7.288, 8.185, 6.58, 7.970, 6.795, & 7.81, 7.09, 7.02, 7.75, 7.16, 7.054, 6.715, 6.8, & 7.03, 5.88, 5.91, 5.922, 4.87, 4.065, 6.225, 5.57, & 5.80, 5.28, 4.92, 5.42, 5.07, 8.24, 4.84, 4.58, & 7.69, 12.6, 0.80, 7.22, 6.5, 7.38, 16.9, 8.01, & 7.79, 7.07 , 12.43, 7.21, 7.7, 6.91, 4.86, 9.2, & 10.7, 10.6, 9.6, 7.63, 12.692, 8.776, 9.405, 8.532, & 0.00, 0.00, 0.00, 0.00, 10.0, 0.00, 10.31, 9.1, & 8.417, 10.55, 0.00, 8.3, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /) ! Source: Acta Cryst. (1968). A24, 321 ! X-ray scattering factors computed from numerical Hartree-Fock wave functions ! By DON T. CROMER and JOSEPH B. MANN, University of California DOUBLE PRECISION, DIMENSION(98), PARAMETER :: a1 = (/ & 0.413048, 0.732354, 0.974637, 1.533712, 2.085185, & 2.657506, 11.893780, 2.960427, 3.511943, 4.183749, 4.910127, & 4.708971, 4.730796, 5.275329, 1.950541, 6.372157, 1.446071, & 7.188004, 8.163991, 8.593655, 1.476566, 9.818524, 10.473575, & 11.007069, 11.709542, 12.311098, 12.914510, 13.521865, 14.014192, & 14.741002, 15.758946, 16.540613, 17.025642, 17.354071, 17.550570, & 17.655279, 8.123134, 17.730219, 17.792040, 17.859772, 17.958399, & 6.236218, 17.840963, 6.271624, 6.216648, 6.121511, 6.073874, & 6.080986, 6.196477, 19.325171, 5.394956, 6.660302, 19.884502, & 19.978920, 17.418674, 19.747343, 19.966019, 17.355122, 21.551311, & 17.331244, 17.286388, 23.700363, 17.186195, 24.898117, 25.910013, & 26.671785, 27.150190, 28.174887, 28.925894, 29.676760, 30.122866, & 30.617033, 31.066359, 31.507900, 31.888456, 32.210297, 32.004436, & 31.273891, 16.777390, 16.839890, 16.630795, 16.419567, 16.282274, & 16.289164, 16.011461, 16.070229, 16.007385, 32.563690, 15.914053, & 15.784024, 32.740208, 15.679275, 32.999901, 33.281178, 33.435162, & 15.804837, 15.889072, 33.7 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: b1 = (/ & 15.569946, 11.553918, 4.334946, 42.662079, 23.494068, & 14.780758, 0.000158, 14.182259, 10.687859, 8.175457, 3.281434, & 4.875207, 3.628931, 2.631338, 0.908139, 1.514347, 0.052357, & 0.956221, 12.816323, 10.460644, 53.131023, 8.001879, 7.081940, & 6.366281, 5.597120, 5.009415, 4.507138, 4.077277, 3.738280, & 3.388232, 3.121754, 2.866618, 2.597739, 2.349787, 2.119226, & 1.908231, 15.142385, 1.563060, 1.429691, 1.310692, 1.211590, & 0.090780, 1.005729, 0.077040, 0.070789, 0.062549, 0.055333, & 0.048990, 0.042072, 6.118104, 33.326523, 33.031654, 4.628591, & 4.143356, 0.399828, 3.481823, 3.197408, 0.328369, 2.995675, & 0.300269, 0.286620, 2.689539, 0.261678, 2.435028, 2.373912, & 2.282593, 2.169660, 2.120995, 2.046203, 1.977630, 1.883090, & 1.795613, 1.708732, 1.629485, 1.549238, 1.473531, 1.353767, & 1.316992, 0.122737, 0.115905, 0.110704, 0.105499, 0.101180, & 0.098121, 0.092639, 0.090437, 0.087031, 0.801980, 0.080511, & 0.077067, 0.709545, 0.071206, 0.657086, 0.634999, 0.612785, & 0.058619, 0.055503, 0.550447 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: a2 = (/ & 0.294953, 0.753896, 0.158472, 0.638283, 1.064580, & 1.078079, 3.277479, 2.508818, 2.772244, 2.905726, 3.081783, & 1.194814, 2.313951, 3.191038, 4.146930, 5.154568, 6.870609, & 6.638454, 7.146945, 1.477324, 1.487278, 1.522646, 1.547881, & 1.555477, 1.733414, 1.876623, 2.481908, 6.947285, 4.784577, & 6.907748, 6.841123, 1.567900, 4.503441, 4.653248, 5.411882, & 6.848105, 2.138042, 9.795867, 10.253252, 10.911038, 12.063054, & 17.987711, 3.428236, 17.906738, 17.919739, 4.784063, 17.155437, & 18.019468, 18.816183, 6.281571, 6.549570, 6.940756, 6.736593, & 11.774945, 8.314444, 17.368477, 27.329655, 43.988499, 17.161730, & 62.783924, 51.560162, 23.072214, 37.156837, 17.104952, 32.344139, & 88.687576, 16.999819, 82.493271, 76.173798, 65.624069, 15.099346, & 15.145351, 15.341823, 15.682498, 16.117104, 16.678440, 1.975454, & 18.445440, 19.317156, 20.023823, 19.386616, 32.738590, 32.725136, & 32.807171, 32.615547, 32.641106, 32.663830, 21.396671, 32.535042, & 32.454899, 21.973675, 32.824306, 22.638077, 23.148544, 23.657259, & 33.480801, 33.625286, 25.467693 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: b2 = (/ & 32.398468, 4.595831, 0.342451, 0.595420, 1.137894, & 0.776775, 10.232723, 5.936858, 4.380466, 3.252536, 9.119178, & 108.506081, 43.051167, 33.730728, 27.044952, 22.092527, 1.193165, & 15.339877, 0.808945, 0.041891, 0.035325, 0.029763, 0.026040, & 0.023987, 0.017800, 0.014461, 0.009126, 0.286763, 0.003744, & 0.243315, 0.226057, 0.012198, 0.003012, 0.002550, 16.557184, & 16.606236, 33.542667, 14.310868, 13.132816, 12.319285, 12.246687, & 1.108310, 41.901382, 0.928222, 0.856121, 0.784031, 7.896512, & 7.273646, 6.695665, 0.036915, 0.030974, 0.025750, 0.027754, & 0.010142, 0.016872, 0.371224, 0.003446, 0.002047, 0.312491, & 0.001320, 0.001550, 0.003491, 0.001995, 0.246961, 0.002034, & 0.000665, 0.215414, 0.000640, 0.000656, 0.000720, 10.342764, & 9.934469, 9.618455, 9.446448, 9.233474, 9.049695, 81.014175, & 8.797154, 8.621570, 8.256927, 7.181401, 1.055049, 1.002287, & 0.966265, 0.904416, 0.876409, 0.840187, 4.590666, 0.770669, & 0.735137, 4.050881, 0.681177, 3.854918, 3.856168, 3.792942, & 0.590160, 0.569571, 3.581973 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: a3 = (/ & 0.187491, 0.283819, 0.811855, 0.601052, 1.062788, & 1.490909, 1.858092, 0.637853, 0.678385, 0.520513, 1.262067, & 1.558157, 1.541980, 1.511514, 1.494560, 1.473732, 6.151801, & 0.454180, 1.070140, 1.436254, 1.600187, 1.703101, 1.986381, & 2.985293, 2.673141, 3.066177, 3.466894, 3.866028, 5.056806, & 4.642337, 4.121016, 3.727829, 3.715904, 4.259489, 3.937180, & 4.171004, 6.761702, 6.099763, 5.714949, 5.821115, 5.007015, & 12.973127, 1.373012, 14.123269, 3.854252, 16.631683, 4.173344, & 4.018197, 4.050479, 4.498866, 19.650681, 19.847015, 8.110516, & 9.332182, 10.323193, 10.465718, 11.018425, 20.546650, 11.903859, & 12.160097, 12.478557, 12.777782, 13.103387, 13.222581, 13.765117, & 14.065445, 14.059334, 14.624002, 14.904704, 15.160854, 56.314899, & 54.933548, 49.278297, 37.960129, 42.390297, 48.559906, 17.070105, & 17.063745, 32.979683, 28.428564, 32.808571, 6.530247, 6.678302, & 21.095163, 8.113899, 21.489658, 21.594351, 11.298093, 21.553976, & 21.849222, 12.957398, 13.660459, 14.219973, 15.153755, 15.576339, & 24.150198, 24.710381, 16.048487 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: b3 = (/ & 5.711404, 1.546299, 97.102966, 99.106499, 61.238976, & 42.086842, 30.344690, 0.112726, 0.093982, 0.063295, 0.102763, & 0.111516, 0.095960, 0.081119, 0.071280, 0.061373, 18.343416, & 15.339862, 210.327011, 81.390381, 137.319489, 39.885422, 31.909672, & 23.244839, 21.788420, 18.743040, 16.438129, 14.622634, 13.034982, & 11.903689, 12.482196, 13.432163, 14.272119, 15.579460, 0.002481, & 0.001598, 0.129372, 0.120574, 0.112173, 0.104353, 0.098615, & 11.468720, 119.320541, 9.555345, 33.889484, 8.751391, 28.443739, & 29.119284, 31.009790, 32.529045, 5.564929, 5.065547, 31.849096, & 28.796200, 25.605827, 21.226641, 19.955492, 3.088196, 17.716705, & 17.026001, 16.223755, 15.495437, 14.787360, 13.996325, 13.481969, & 12.920230, 12.213148, 11.915256, 11.465375, 11.044622, 0.000780, & 0.000739, 0.000760, 0.000898, 0.000689, 0.000519, 0.128093, & 0.124741, 1.256902, 1.195250, 1.119730, 25.025890, 25.714146, & 6.046622, 26.543257, 5.239687, 4.954467, 22.758972, 4.352206, & 4.097976, 19.231543, 18.236156, 17.435474, 16.849735, 16.195778, & 3.674720, 3.615472, 14.357388 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: a4 = (/ & 0.080701, 0.190003, 0.262416, 0.106139, 0.140515, & -4.241070, 0.858927, 0.722838, 0.915159, 1.135641, 1.098938, & 1.170413, 1.117564, 1.356849, 1.522042, 1.635073, 1.750347, & 1.929593, 0.877316, 1.182839, 9.177463, 1.768774, 1.865616, & 1.347855, 2.023368, 2.070451, 2.106351, 2.135900, 1.457971, & 2.191766, 2.714681, 3.345098, 3.937200, 4.136455, 3.880645, & 3.446760, 1.156051, 2.620025, 3.170516, 3.512513, 3.287667, & 3.451426, 12.947364, 3.746008, 0.840326, 4.318258, 0.852238, & 1.303510, 1.638929, 1.856934, 1.827820, 1.557175, 1.170953, & 1.244749, 1.383834, 2.592602, 3.086696, 3.130670, 2.679103, & 2.663483, 2.675515, 2.684217, 2.707246, 3.266152, 2.751404, & 2.768497, 3.386979, 2.802756, 2.814812, 2.830288, 3.540980, & 4.096253, 4.577665, 4.885509, 5.211669, 5.455839, 15.939454, & 5.555933, 5.595453, 5.881564, 1.747191, 2.342742, 2.694750, & 2.505901, 2.884082, 2.299218, 1.598497, 2.834688, 11.433394, & 4.239077, 3.683832, 3.687261, 3.672950, 3.031492, 3.027023, & 3.655563, 3.707139, 3.657525 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: b4 = (/ & 61.889874, 26.463964, 201.363831, 0.151340, 0.114886, & -0.000294, 0.656065, 34.958481, 27.255203, 21.813910, 132.013947, & 48.292408, 108.932388, 86.288643, 67.520187, 55.445175, 46.398396, & 39.043823, 39.597652, 169.847839, 9.098031, 120.157997, 108.022842, & 105.774498, 89.517914, 82.767876, 76.987320, 71.966080, 72.554794, & 63.312130, 66.203621, 58.866047, 50.437996, 45.181202, 42.164009, & 39.917473, 224.132507, 135.771317, 108.197029, 91.777542, 75.011948, & 66.684151, 9.781542, 35.860680, 121.686691, 34.489983, 110.376106, & 95.831207, 103.284348, 95.037186, 87.130966, 84.101616, 84.406387, & 75.280685, 233.339676, 173.834274, 141.381973, 134.907654, 152.192825, & 148.748993, 143.984512, 139.862473, 134.816299, 110.863091, 125.836510, & 121.937187, 100.506783, 114.529938, 111.411980, 108.139153, 89.559250, & 76.189705, 66.346199, 59.980675, 54.516373, 50.210201, 7.661196, & 40.177994, 38.008820, 39.247227, 90.660263, 80.906593, 77.057549, & 76.598068, 68.372963, 69.188477, 199.805801, 160.404388, 21.381622, & 109.464111, 117.255005, 112.500038, 109.464485, 121.292038, 117.757004, & 100.736191, 97.694786, 96.064972 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: a5 = (/ & 0.023736, 0.039139, 0.790108, 1.118414, 0.641784, & 0.713791, 0.912985, 1.142756, 1.089261, 1.228065, 0.560991, & 3.239403, 3.154754, 2.519114, 5.729711, 1.209372, 0.634168, & 1.523654, 1.486434, 7.113258, 7.099750, 7.082555, 7.056250, & 7.034779, 7.003180, 6.975185, 6.960892, 4.284731, 6.932996, & 38.424042, 2.395246, 6.785079, 6.790175, 6.749163, 6.707793, & 6.685200, 17.679546, 0.600053, 0.918251, 0.746965, 1.531019, & 0.210899, 6.335469, 0.908235, 15.173498, 13.246773, 17.988686, & 17.974669, 17.962912, 17.917318, 17.867832, 17.802427, 17.548716, & 17.737501, 19.876251, 11.003653, 17.335455, 11.353665, 9.564197, & 22.239950, 22.960947, 17.204367, 24.419271, 48.995213, 17.064405, & 17.067781, 46.546471, 17.018515, 16.998117, 16.997850, 16.943729, & 16.896156, 16.828321, 16.792112, 16.767591, 16.735533, 5.990003, & 1.575270, 10.576854, 4.714706, 6.356862, 19.916475, 20.576559, & 7.254589, 21.377867, 9.480184, 11.121192, 15.914965, 3.612409, & 11.736191, 15.744058, 22.279434, 15.683245, 15.704215, 15.746100, & 15.499866, 15.839268, 16.008982 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: b5 = (/ & 1.334118, 0.377523, 1.409234, 1.843093, 0.399036, & 0.239535, 0.217287, 0.390240, 0.313066, 0.224952, 0.405878, & 1.928171, 1.555918, 1.170087, 1.981173, 0.646925, 0.401005, & 0.062409, 0.052821, 0.688098, 0.602102, 0.532405, 0.474882, & 0.429369, 0.383054, 0.346506, 0.314418, 0.004437, 0.265666, & 0.000397, 0.007238, 0.210974, 0.193015, 0.177432, 0.162121, & 0.146896, 1.713368, 0.120574, 0.112173, 0.104353, 0.098615, & 0.090780, 0.083391, 123.552246, 9.029517, 0.784031, 0.716809, & 0.661231, 0.610714, 0.565651, 0.523992, 0.487660, 0.463550, & 0.413616, 3.826915, 0.010719, 0.341817, 18.832960, 0.010468, & 2.910268, 2.796480, 0.274536, 2.581883, 0.001383, 0.236916, & 0.225531, 0.001211, 0.207519, 0.199376, 0.192110, 0.183849, & 0.175914, 0.168002, 0.160798, 0.152815, 0.145771, 26.659403, & 1.316997, 0.000601, 1.195250, 26.014978, 6.664449, 6.291882, & 28.096128, 5.499512, 27.632641, 26.905106, 0.083544, 130.500748, & 20.512138, 0.074040, 3.930325, 0.068033, 0.064857, 0.061755, & 15.408296, 14.754303, 0.052450 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: c = (/ & 0.000049, 0.000487, 0.002542, 0.002511, 0.003823, & 4.297983, -11.804902, 0.027014, 0.032557, 0.025576, 0.079712, & 0.126842, 0.139509, 0.145073, 0.155233, 0.154722, 0.146773, & 0.265954, 0.253614, 0.196255, 0.157765, 0.102473, 0.067744, & 0.065510, -0.147293, -0.304931, -0.936572, -2.762697, -3.254477, & -36.915829, -0.847395, 0.018726, -2.984117, -3.160982, -2.492088, & -2.810592, 1.139548, 1.140251, 1.131787, 1.124859, 1.123452, & 1.108770, 1.074784, 1.043992, 0.995452, 0.883099, 0.756603, & 0.603504, 0.333097, 0.119024, -0.290506, -0.806668, -0.448811, & -6.065902, -2.322802, -5.183497, -21.745489, -38.386017, -3.871068, & -57.189842, -45.973682, -17.452166, -31.586687, -43.505684, -26.851971, & -83.279831, -41.165253, -77.135223, -70.839813, -60.313812, -51.049416, & -49.719837, -44.119026, -32.864574, -37.412682, -43.677956, 4.018893, & 4.050394, -6.279078, 4.076478, 4.066939, 4.049824, 4.040914, & 4.046556, 3.995684, 4.020977, 4.003472, 3.981773, 3.939212, & 3.922533, 3.886066, 3.854444, 3.769391, 3.664200, 3.541160, & 3.390840, 3.213169, 3.005326 /) END MODULE atomes_1.3.1/src/fortran/skt.F900000664000175000017500000004376115212624223016043 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file skt.F90 !! @short S(k,t) analysis: dynamic structure factor calculation !! @author Sébastien Le Roux !! @author Noël Jakse ! ! Notes: ! ! LLM tool (Gemini via Antigravity) was used at few occasions to prepare some sections of this file, including: ! - To write a first draft version of the 's_of_k_t' function based on my work in the file 'sk.F90' ! - To write parts of the 'FOURIER_TRANS_QVECT_SKT' routine ! - To write parts of the 'COMPUTE_SQW' routine ! Overall the inputs provided by the LLM in these occasions were bad, ! But because I used them to get the first raw version of the code, ! I feel compelled to declare it here. ! INTEGER (KIND=c_int) FUNCTION s_of_k_t (NQ_IN, XA_IN, MIN_IN, N_SETS, SETS_T, & DELTA_T, Q_NUM, Q_LIST, N_FREQ) BIND (C,NAME='s_of_k_t_') ! Total and Partial Dynamic Structure Factor Calculation ! ! S(q,t) = (1/N) * < \sum_{i} \sum_{j} exp( -i * q * ( r_i(t0+t) - r_j(t0) ) ) > ! ! Partial: ! ! S_ab(q,t) ~ < \rho_a(q, t0+t) * conjg(\rho_b(q, t0)) > ! USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NQ_IN ! Number of delta q INTEGER (KIND=c_int), INTENT(IN) :: XA_IN ! How to compute X rays INTEGER (KIND=c_int), INTENT(IN) :: MIN_IN ! Minimum value of correlations INTEGER (KIND=c_int), INTENT(IN) :: N_SETS ! Number of t steps to save, or -1 for all INTEGER (KIND=c_int), DIMENSION(N_SETS), INTENT(IN) :: SETS_T INTEGER (KIND=c_int), INTENT(IN) :: Q_NUM ! Number q compute (q,w) data INTEGER (KIND=c_int), INTENT(IN) :: N_FREQ ! Number of frequency points REAL (KIND=c_double) :: DELTA_T REAL (KIND=c_double), DIMENSION(Q_NUM), INTENT(IN) :: Q_LIST INTEGER :: NSQ, PID INTEGER, DIMENSION(:), ALLOCATABLE :: QID INTEGER, DIMENSION(:), ALLOCATABLE :: SQW_QLIST DOUBLE PRECISION :: factor, xfactor DOUBLE PRECISION, DIMENSION (:), ALLOCATABLE :: SQTAB, SQW_TAB, SQW_QVAL DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: SKT_TAB DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: RHO_C, RHO_S DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: NSQT, XSQT DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: LocalCorr DOUBLE PRECISION, DIMENSION(:,:,:,:), ALLOCATABLE :: SQT INTERFACE DOUBLE PRECISION FUNCTION FQX(TA, Q) INTEGER, INTENT(IN) :: TA DOUBLE PRECISION, INTENT(IN) :: Q END FUNCTION END INTERFACE allocate(SQT(NQ_IN, NS-MIN_IN, NSP, NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: SQT"//CHAR(0)) s_of_k_t = 0 goto 001 endif SQT(:,:,:,:) = 0.0d0 allocate(NSQT(NQ_IN, NS-MIN_IN), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: NSQT"//CHAR(0)) s_of_k_t = 0 goto 001 endif NSQT(:,:) = 0.0d0 allocate(XSQT(NQ_IN, NS-MIN_IN), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: XSQT"//CHAR(0)) s_of_k_t = 0 goto 001 endif XSQT(:,:) = 0.0d0 ! Allocate density arrays RHO_C and RHO_S ALLOCATE(RHO_C(NS, NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: RHO_C"//CHAR(0)) s_of_k_t = 0 goto 001 endif ALLOCATE(RHO_S(NS, NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: RHO_S"//CHAR(0)) s_of_k_t = 0 goto 001 endif ALLOCATE(LocalCorr(NS-MIN_IN, NSP, NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: LocalCorr"//CHAR(0)) s_of_k_t = 0 goto 001 endif !t0 = OMP_GET_WTIME () call FOURIER_TRANS_QVECT_SKT (MIN_IN) ! Default Q-vector parallelization !t1 = OMP_GET_WTIME () !write (*,*) "temps d’excecution QVT 2:", t1-t0 if (allocated(qvectx)) deallocate(qvectx) if (allocated(qvecty))deallocate(qvecty) if (allocated(qvectz)) deallocate(qvectz) if (allocated(modq)) deallocate(modq) ! Normalization and weighting (Neutron/X-ray) factor=0.0d0 do i=1, NSP factor=factor + NBSPBS(i)*NSCATTL(i)**2 enddo if (XA_IN .eq. 1) then xfactor=0.0d0 do i=1, NSP xfactor=xfactor + NBSPBS(i)*XSCATTL(i)**2 enddo endif do t=1, NS-MIN_IN do i=1, NQ_IN if (degeneracy(i) .gt. 0) then do j=1, NSP do k=1, NSP ! Neutrons NSQT(i,t) = NSQT(i,t) + SQT(i,t,j,k) * NSCATTL(j) * NSCATTL(k) ! X-rays if (XA_IN .eq. 1) then XSQT(i,t) = XSQT(i,t) + SQT(i,t,j,k) * XSCATTL(j) * XSCATTL(k) else ! Use form factors FQX XSQT(i,t) = XSQT(i,t) + SQT(i,t,j,k) * FQX(INT(XSCATTL(j)), K_POINT(i)) * FQX(INT(XSCATTL(k)), K_POINT(i)) endif enddo enddo ! Normalization NSQT(i,t) = NSQT(i,t) / (factor * degeneracy(i)) if (XA_IN .eq. 1) then XSQT(i,t) = XSQT(i,t) / (xfactor * degeneracy(i)) else ! Function FQX appears in sk.F90 xfactor = 0.0d0 do k=1, NSP xfactor = xfactor + NBSPBS(k) * FQX(INT(XSCATTL(k)), K_POINT(i))**2 enddo XSQT(i,t) = XSQT(i,t) / (xfactor * degeneracy(i)) endif ! Normalize Partials do j=1, NSP do k=1, NSP SQT(i,t,j,k) = SQT(i,t,j,k) / (degeneracy(i) * SQRT(DBLE(NBSPBS(j)*NBSPBS(k)))) enddo enddo endif enddo enddo if (allocated(SQTAB)) deallocate(SQTAB) allocate(SQTAB(NQ_IN), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: SQTAB"//CHAR(0)) s_of_k_t = 0 goto 001 endif if (allocated(QID)) deallocate(QID) allocate(QID(NQ_IN), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: QID"//CHAR(0)) s_of_k_t = 0 goto 001 endif SQTAB(:)=0.0d0 NSQ = 0; do i=1, NQ_IN if (degeneracy(i) .gt. 0) then NSQ=NSQ+1 SQTAB(NSQ)= K_POINT(i) QID(NSQ) = i endif enddo ! Saving k-points call save_xsk (NSQ, SQTAB) if (SKT_SAVE(NSQ) .eq. 0) then s_of_k_t = 0 goto 001 endif PID = 8+4*NSP*NSP if (NSP .eq. 2) PID=PID+8 if (N_SETS .eq. 1 .and. SETS_T(1) .eq. -1) then PID = PID*(NS-MIN_IN) else PID = PID*N_SETS endif if (Q_NUM .gt. 0) then allocate(SQW_TAB(N_FREQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: SQW_TAB"//CHAR(0)) s_of_k_t = 0 goto 001 endif allocate(SQW_QLIST(Q_NUM), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: SQW_QLIST"//CHAR(0)) s_of_k_t = 0 goto 001 endif allocate(SQW_QVAL(Q_NUM), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: SQW_QVAL"//CHAR(0)) s_of_k_t = 0 goto 001 endif ! First select all k id for the analysis, as close as possible as the user selection ! write (6, *) "Q_NUM= ",Q_NUM do i=1, Q_NUM j=1 do while (SQTAB(j).lt.Q_LIST(i)) j=j+1 enddo if (j .gt. 1) then if ((SQTAB(j) - Q_LIST(i)) .gt. (Q_LIST(i) - SQTAB(j-1))) then j = j - 1 endif endif SQW_QLIST(i) = QID(j) SQW_QVAL(i) = K_POINT(QID(j)) ! write (6, *) "i= ",i,", Q_LIST(i)= ",Q_LIST(i)," j= ",j,", QID(j)= ",QID(j)," K_POINT(QID(j))= ",K_POINT(QID(j)) enddo call recup_sqw_list (Q_NUM, SQW_QVAL) if (allocated(SQW_QVAL)) deallocate(SQW_QVAL) call COMPUTE_SQW (NSQT, Q_NUM, SQW_QLIST, PID, 0, 0) do i=1, NQ_IN do j=1, NS-MIN_IN NSQT(i,j) = (NSQT(i,j)-1.0)*K_POINT(i) enddo enddo call COMPUTE_SQW (NSQT, Q_NUM, SQW_QLIST, PID+2, 0, 0) call COMPUTE_SQW (XSQT, Q_NUM, SQW_QLIST, PID+4, 0, 0) do i=1, NQ_IN do j=1, NS-MIN_IN XSQT(i,j) = (XSQT(i,j)-1.0)*K_POINT(i) enddo enddo call COMPUTE_SQW (XSQT, Q_NUM, SQW_QLIST, PID+6, 0, 0) allocate(SKT_TAB(NQ_IN, NS-MIN_IN), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k_t"//CHAR(0), "Table: SKT_TAB"//CHAR(0)) s_of_k_t = 0 goto 001 endif PID = PID+8 do j=1, NSP do k=1, NSP do l=1, NS-MIN_IN do m=1, NQ_IN SKT_TAB(m,l) = SQT(m,l,j,k) enddo enddo call COMPUTE_SQW (SKT_TAB, Q_NUM, SQW_QLIST, PID, j, k) PID = PID + 2 enddo enddo endif s_of_k_t = 1 001 continue if (allocated(SQTAB)) deallocate(SQTAB) if (allocated(SKT_TAB)) deallocate(SKT_TAB) if (allocated(SQW_TAB)) deallocate(SQW_TAB) if (allocated(SQW_QLIST)) deallocate(SQW_QLIST) if (allocated(SQT)) deallocate(SQT) if (allocated(NSQT)) deallocate(NSQT) if (allocated(XSQT)) deallocate(XSQT) if (allocated(RHO_C)) deallocate(RHO_C) if (allocated(RHO_S)) deallocate(RHO_S) if (allocated(LocalCorr)) deallocate(LocalCorr) CONTAINS !************************************************************ ! ! Compute S(q,t) loops over Q-vectors ! OpenMP // on Qvect ! SUBROUTINE FOURIER_TRANS_QVECT_SKT (MIN_IN) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: MIN_IN INTEGER :: q, NumCorr, t_n DOUBLE PRECISION :: qx, qy, qz, qtr DOUBLE PRECISION :: Corr #ifdef OPENMP INTEGER :: NUMTH NUMTH = OMP_GET_MAX_THREADS () if (NUMBER_OF_QVECT.lt.NUMTH) NUMTH=NUMBER_OF_QVECT ! OpemMP on Qvect !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(qx, qy, qz, qtr, i, j, k, l, m, n, q, t) & !$OMP& PRIVATE (t_n, NumCorr, RHO_C, RHO_S, LocalCorr, Corr) & !$OMP& SHARED(NUMTH, NUMBER_OF_QVECT, SQT, NQ_IN, modq, qvmin, DELTA_Q) & !$OMP& SHARED(qvectx, qvecty, qvectz, FULLPOS, NS, NSP, NA, LOT, MIN_IN) !$OMP DO SCHEDULE(STATIC,NUMBER_OF_QVECT/NUMTH) #endif do q=1, NUMBER_OF_QVECT l=AnINT((modq(q)-qvmin)/DELTA_Q)+1 if (l .le. NQ_IN) then RHO_C(:,:) = 0.0d0 RHO_S(:,:) = 0.0d0 LocalCorr(:,:,:) = 0.0d0 qx=qvectx(q) qy=qvecty(q) qz=qvectz(q) do t=1, NS ! Compute density history for this Q vector do i=1, NA j = LOT(i) qtr = qx*FULLPOS(i,1,t) + qy*FULLPOS(i,2,t) + qz*FULLPOS(i,3,t) RHO_C(t, j) = RHO_C(t, j) + cos(qtr) RHO_S(t, j) = RHO_S(t, j) + sin(qtr) enddo enddo ! If 'MIN_IN = 0' and 't = 0', then S(t=0) is the static structure factor do t=0, NS-1-MIN_IN NumCorr = NS-t-MIN_IN do t_n=1, NumCorr do m=1, NSP do n=1, NSP Corr = RHO_C(t+t_n, m) * RHO_C(t_n, n) + RHO_S(t+t_n, m) * RHO_S(t_n, n) LocalCorr(t+1, m, n) = LocalCorr(t+1, m, n) + Corr enddo enddo enddo ! Normalize by NumCorr here LocalCorr(t+1, :, :) = LocalCorr(t+1, :, :) / DBLE(NumCorr) enddo #ifdef OPENMP !$OMP CRITICAL #endif SQT(l, :, :, :) = SQT(l, :, :, :) + LocalCorr(:, :, :) #ifdef OPENMP !$OMP END CRITICAL #endif endif enddo #ifdef OPENMP !$OMP END DO !$OMP END PARALLEL #endif END SUBROUTINE !************************************************************ ! ! Compute S(q,w) loops over frequencies ! SUBROUTINE COMPUTE_SQW (SKT_TAB, Q_NUM, Q_LIST, PIC, SPA, SPB) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: Q_NUM, PIC, SPA, SPB INTEGER, DIMENSION(Q_NUM), INTENT(IN) :: Q_LIST DOUBLE PRECISION, DIMENSION (NQ_IN,NS-MIN_IN), INTENT(IN) :: SKT_TAB INTEGER :: qid, id_q_num, freq INTEGER :: SHIFT, CID DOUBLE PRECISION :: omega, max_omega, delta_omega, time_val, sqw_val max_omega = PI / DELTA_T ! delta_omega = max_omega / DBLE(N_FREQ) delta_omega = max_omega / DBLE(N_FREQ-1) SHIFT = 8+4*NSP*NSP if (NSP .eq. 2) SHIFT=SHIFT+8 CID = PIC do qid = 1, Q_NUM ! For all selected q points id_q_num = Q_LIST(qid) ! Select the q point ID number as referenced previously do freq = 1, N_FREQ omega = DBLE(freq-1) * delta_omega sqw_val = 0.5d0 * SKT_TAB(id_q_num, 1) do t = 2, NS-MIN_IN-1 time_val = DBLE(t-1) * DELTA_T sqw_val = sqw_val + SKT_TAB(id_q_num, t) * cos(omega * time_val) enddo time_val = DBLE(NS-MIN_IN-1) * DELTA_T sqw_val = sqw_val + 0.5d0 * SKT_TAB(id_q_num, NS-MIN_IN) * cos(omega * time_val) sqw_val = 2.0d0 * sqw_val * DELTA_T / PI SQW_TAB(freq) = sqw_val enddo ! Save SQW_TAB here ! call save_curve (N_FREQ, SQW_TAB, CID, IDSKT) if (SPA .gt. 0 .and. SPB .gt. 0) then ! For partials only evaluates Faber-Ziman formalism sqw_val = 0.0d0 do freq = 1, N_FREQ omega = DBLE(freq-1) * delta_omega if (SPA .eq. SPB) then sqw_val = 0.5d0 * (1.0d0 + (SKT_TAB(id_q_num, 1) - 1.0d0)/Xi(SPA)) else sqw_val = 0.5d0 * (1.0d0 + SKT_TAB(id_q_num, 1)/sqrt(Xi(SPA)*Xi(SPB))) endif do t = 2, NS-MIN_IN-1 time_val = DBLE(t-1) * DELTA_T if (SPA .eq. SPB) then sqw_val = sqw_val + (1.0d0 + (SKT_TAB(id_q_num, t) - 1.0d0)/Xi(SPA)) * cos(omega * time_val) else sqw_val = sqw_val + (1.0d0 + SKT_TAB(id_q_num, t)/sqrt(Xi(SPA)*Xi(SPB))) * cos(omega * time_val) endif enddo time_val = DBLE(NS-MIN_IN-1) * DELTA_T if (SPA .eq. SPB) then sqw_val = sqw_val + 0.5d0 * (1.0d0 + (SKT_TAB(id_q_num, t) - 1.0d0)/Xi(SPA)) * cos(omega * time_val) else sqw_val = sqw_val + 0.5d0 * (1.0d0 + SKT_TAB(id_q_num, t)/sqrt(Xi(SPA)*Xi(SPB))) * cos(omega * time_val) endif sqw_val = 2.0d0 * sqw_val * DELTA_T / PI SQW_TAB(freq) = sqw_val enddo ! Save SQW_TAB here ! call save_curve (N_FREQ, SQW_TAB, CID+2*NSP*NSP, IDSKT) endif CID = CID + SHIFT enddo END SUBROUTINE INTEGER FUNCTION SKT_SAVE (NSQ) USE PARAMETERS USE MENDELEIEV INTEGER, INTENT(IN) :: NSQ INTEGER :: NDT, tps, cid DOUBLE PRECISION, DIMENSION (:), ALLOCATABLE :: SQTAB INTERFACE LOGICAL FUNCTION FZBT (NDQ, SQIJ) USE PARAMETERS INTEGER, INTENT(IN) :: NDQ DOUBLE PRECISION, DIMENSION(NDQ,NSP,NSP), INTENT(IN) :: SQIJ END FUNCTION END INTERFACE h = 8+4*NSP*NSP if (NSP .eq. 2) h=h+8 if (allocated(SQTAB)) deallocate(SQTAB) allocate(SQTAB(NQ_IN), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: SKT_SAVE"//CHAR(0), "Table: SQTAB"//CHAR(0)) SKT_SAVE = 0 goto 001 endif if(allocated(Sij)) deallocate(Sij) allocate(Sij(NQ_IN,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: SKT_SAVE"//CHAR(0), "Table: Sij"//CHAR(0)) SKT_SAVE = 0 goto 001 endif if (NSQ .gt. 0) then ! If wave vectors exist SQTAB(:)=0.0d0 if (N_SETS .eq. 1 .and. SETS_T(1) .eq. -1) then NDT = NS-MIN_IN else NDT = N_SETS endif do t=1, NDT cid = (t-1)*SKNUM if (NDT .eq. NS-MIN_IN) then tps = t else tps = SETS_T(t) endif i=0 do k=1, NQ_IN if (degeneracy(k) .gt. 0) then i=i+1 SQTAB(i)= NSQT(k,tps) endif enddo call save_curve (NSQ, SQTAB, cid, IDSKT) i=0 do k=1, NQ_IN if (degeneracy(k) .gt. 0) then i=i+1 SQTAB(i)= (NSQT(k,tps)-1.0)*K_POINT(k) endif enddo call save_curve (NSQ, SQTAB, cid + 2, IDSKT) i=0 do k=1, NQ_IN if (degeneracy(k) .gt. 0) then i=i+1 SQTAB(i)= XSQT(k,tps) endif enddo call save_curve (NSQ, SQTAB, cid + 4, IDSKT) i=0 do k=1, NQ_IN if (degeneracy(k) .gt. 0) then i=i+1 SQTAB(i)= (XSQT(k,tps)-1.0)*K_POINT(k) endif enddo call save_curve (NSQ, SQTAB, cid + 6, IDSKT) SQTAB(:)=0.0d0 Sij(:,:,:)=0.0d0 l = 8 do i=1, NSP do j=1, NSP m=0 do k=1, NQ_IN Sij(k,i,j) = SQT(k,tps,i,j) if (degeneracy(k) .gt. 0) then m=m+1 SQTAB(m)=Sij(k,i,j) endif enddo call save_curve (NSQ, SQTAB, cid + l, IDSKT) l=l+2 enddo enddo ! To compute FZ and BT partials if (.not.FZBT (NQ_IN, Sij)) then SKT_SAVE = 0 goto 001 endif do i=1, NSP do j=1, NSP m=0 do k=1, NQ_IN if (degeneracy(k) .gt. 0) then m=m+1 SQTAB(m)= FZSij(k,i,j) endif enddo call save_curve (NSQ, SQTAB, cid + l, IDSKT) l=l+2 enddo enddo if (NSP .eq. 2) then do i=1, 4 k=0 do j=1, NQ_IN if (degeneracy(j) .gt. 0) then k=k+1 SQTAB(k)= BTij(j,i) endif enddo call save_curve (NSQ, SQTAB, cid + l, IDSKT) l=l+2 enddo endif enddo endif ! If wave vectors exist SKT_SAVE=1 001 continue if (allocated(FZSij)) deallocate(FZSij) if (NSP.eq.2 .and. allocated(BTij)) deallocate(BTij) if (allocated(SQTAB)) deallocate(SQTAB) if(allocated(Sij)) deallocate(Sij) if(allocated(FZSij)) deallocate(FZSij) if(allocated(BTij)) deallocate(BTij) END FUNCTION END FUNCTION s_of_k_t atomes_1.3.1/src/fortran/pdb.F900000664000175000017500000002041015212624223015771 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file pdb.F90 !! @short Unused: read atomic coordinates in PDB format - old version !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION read_pdb (pdb_f, lpdb) BIND (C,NAME='read_pdb_') ! ! Lecture of atom types and coordinates - pdb files ! USE PARAMETERS USE MENDELEIEV IMPLICIT NONE LOGICAL :: isok INTEGER (KIND=c_int), INTENT(IN) :: lpdb INTEGER, DIMENSION(:), ALLOCATABLE :: LINEA LOGICAL :: with_cell = .false. CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: pdb_f CHARACTER (LEN=lpdb) :: pdb_file CHARACTER (LEN=4) :: ANAME CHARACTER (LEN=6) :: RID INTEGER :: ASI CHARACTER (LEN=1) :: ALB CHARACTER (LEN=3) :: ACC CHARACTER (LEN=1) :: CIC INTEGER :: RSN CHARACTER (LEN=1) :: IC DOUBLE PRECISION :: OCA DOUBLE PRECISION THF CHARACTER (LEN=2) :: SYM CHARACTER (LEN=2) :: CHA REAL, DIMENSION(6) :: CELL CHARACTER (LEN=11) :: SPG INTEGER :: ZVAL do i=1, lpdb pdb_file(i:i) = pdb_f(i) enddo CELL(:) = 0.0 inquire (file=pdb_file, exist=isok) if (isok) then open (unit=20, file=pdb_file, action='read', status='old') NS=1 NA=0 l = 0 do while (.true.) read (20, '(A6)', end=999) RID l = l+1 if (RID.eq.'HETATM' .or. RID.eq.'ATOM ') NA=NA+1 if (RID.eq. 'CRYST1') with_cell = .true. enddo 999 continue if (NA .ne. 0) then rewind(20) if (allocated(LINEA)) deallocate(LINEA) allocate (LINEA(l), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_pdb"//CHAR(0), "Table: LINEA"//CHAR(0)) endif l=0 do while (.true.) read (20, '(A6)', end=888) RID l = l+1 LINEA(l)=0 if (RID.eq.'HETATM' .or. RID.eq.'ATOM ') LINEA(l) = 1 if (RID.eq.'CRYST1') LINEA(l) = 2 enddo 888 continue rewind(20) if (allocated(FULLPOS)) deallocate(FULLPOS) allocate (FULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_pdb"//CHAR(0), "Table: FULLPOS"//CHAR(0)) endif if (allocated(TAB_OF_TYPE)) deallocate(TAB_OF_TYPE) allocate (TAB_OF_TYPE(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_pdb"//CHAR(0), "Table: TAB_OF_TYPE"//CHAR(0)) endif do i=1, NS m = 0 do j=1, l-1 if (LINEA(j) .eq. 1) then m = m+1 read (20, 001) RID, & ASI, & ANAME, & ALB, & ACC, & CIC, & RSN, & IC, & FULLPOS(m,1,i), & FULLPOS(m,2,i), & FULLPOS(m,3,i), & OCA, & THF, & SYM, & CHA ! write (6, '("m= ",i4," x= ",f15.10,", y= ",f15.10,", z= ",f15.10)') m, FULLPOS(m,1,i),FULLPOS(m,2,i),FULLPOS(m,3,i) TAB_OF_TYPE(m)=ATOMPDB(j, SYM) else if (LINEA(j) .eq. 2) then read (20, 002) RID, & CELL(1), & CELL(2), & CELL(3), & CELL(4), & CELL(5), & CELL(6), & SPG, & ZVAL else read (20, *) endif enddo enddo if (allocated(LINEA)) deallocate(LINEA) if (with_cell) then call cell_data_from_pdb (CELL(1), CELL(2), CELL(3), CELL(4), CELL(5), CELL(6)) endif read_pdb=0 else read_pdb=2 endif close(20) else read_pdb=1 endif 001 FORMAT (A6,I5,1X,A4,A1,A3,1X,A1,I4,A1,3X,F8.3,F8.3,F8.3,F6.2,F6.2,10X,A2,A2) 002 FORMAT (A6,F9.3,F9.3,F9.3,F7.2,F7.2,F7.2,1X,A11,I4) ! ! PDB format v3.30 ! ! HETATM / ATOM keyword ! !--------------------------------------------------------------------------- !Field | Column | FORTRAN | ! No. | range | format | Description !--------------------------------------------------------------------------- ! 1. | 1 - 6 | A6 | "ATOM " or "HETATM" ! 2. | 7 - 11 | I5 | Atom serial number ! - | 12 - 12 | 1X | Blank ! 3. | 13 - 16 | A4 | Atom name ! 4. | 17 - 17 | A1 | Alternative location code (if any) ! 5. | 18 - 20 | A3 | Standard 3-letter amino acid code for residue ! - | 21 - 21 | 1X | Blank ! 6. | 22 - 22 | A1 | Chain identifier code ! 7. | 23 - 26 | I4 | Residue sequence number ! 8. | 27 - 27 | A1 | Insertion code (if any) ! - | 28 - 30 | 3X | Blank ! 9. | 31 - 38 | F8.3 | Atom's x-coordinate ! 10. | 39 - 46 | F8.3 | Atom's y-coordinate ! 11. | 47 - 54 | F8.3 | Atom's z-coordinate ! 12. | 55 - 60 | F6.2 | Occupancy value for atom ! 13. | 61 - 66 | F6.2 | B-value (thermal factor) ! - | 67 - 76 | 10X | Blank ! 14. | 77 - 78 | A2 | Element symbol ! 15. | 79 - 80 | A2 | Charge !--------------------------------------------------------------------------- ! CRYST1 keyword ! !--------------------------------------------------------------------------- !Field | Column | FORTRAN | ! No. | range | format | Description !--------------------------------------------------------------------------- ! 1. | 1 - 6 | A6 | "CRYST1" ! 2. | 7 - 15 | F9.3 | a ! 3. | 16 - 24 | F9.3 | b ! 4. | 25 - 33 | F9.3 | c ! 5. | 34 - 40 | F7.2 | alpha ! 6. | 41 - 47 | F7.2 | beta ! 7. | 48 - 54 | F7.2 | gamma ! - | 55 - 55 | 1X | Blank ! 8. | 56 - 66 | A11 | Space group ! 9. | 67 - 70 | I4 | z !--------------------------------------------------------------------------- CONTAINS CHARACTER (LEN=2) FUNCTION ATOMPDB(LIN, PDBSTR) INTEGER :: PA, PB CHARACTER (LEN=2), INTENT(IN) :: PDBSTR INTEGER, INTENT(IN) :: LIN ATOMPDB=' ' PB=0 do PA=1, 2 if (PDBSTR(PA:PA) .ne. ' ') then PB= PB+1 ATOMPDB(PB:PB)=PDBSTR(PA:PA) endif enddo if (PB .eq. 2) then if (ATOMPDB(2:2).eq.'A') ATOMPDB(2:2)='a' if (ATOMPDB(2:2).eq.'B') ATOMPDB(2:2)='b' if (ATOMPDB(2:2).eq.'C') ATOMPDB(2:2)='c' if (ATOMPDB(2:2).eq.'D') ATOMPDB(2:2)='d' if (ATOMPDB(2:2).eq.'E') ATOMPDB(2:2)='e' if (ATOMPDB(2:2).eq.'F') ATOMPDB(2:2)='f' if (ATOMPDB(2:2).eq.'G') ATOMPDB(2:2)='g' if (ATOMPDB(2:2).eq.'H') ATOMPDB(2:2)='h' if (ATOMPDB(2:2).eq.'I') ATOMPDB(2:2)='i' if (ATOMPDB(2:2).eq.'J') ATOMPDB(2:2)='j' if (ATOMPDB(2:2).eq.'K') ATOMPDB(2:2)='k' if (ATOMPDB(2:2).eq.'L') ATOMPDB(2:2)='l' if (ATOMPDB(2:2).eq.'M') ATOMPDB(2:2)='m' if (ATOMPDB(2:2).eq.'N') ATOMPDB(2:2)='n' if (ATOMPDB(2:2).eq.'O') ATOMPDB(2:2)='o' if (ATOMPDB(2:2).eq.'P') ATOMPDB(2:2)='p' if (ATOMPDB(2:2).eq.'Q') ATOMPDB(2:2)='q' if (ATOMPDB(2:2).eq.'R') ATOMPDB(2:2)='r' if (ATOMPDB(2:2).eq.'S') ATOMPDB(2:2)='s' if (ATOMPDB(2:2).eq.'T') ATOMPDB(2:2)='t' if (ATOMPDB(2:2).eq.'U') ATOMPDB(2:2)='u' if (ATOMPDB(2:2).eq.'V') ATOMPDB(2:2)='v' if (ATOMPDB(2:2).eq.'W') ATOMPDB(2:2)='w' if (ATOMPDB(2:2).eq.'X') ATOMPDB(2:2)='x' if (ATOMPDB(2:2).eq.'Y') ATOMPDB(2:2)='y' if (ATOMPDB(2:2).eq.'Z') ATOMPDB(2:2)='z' endif PB=0 do PA=1, MAXE if (ATSYM(PA) .eq. ATOMPDB) then PB=1 endif enddo if (PB .eq. 0) then write (6, '("Warning reading PDB file: atom symbol not found line: ",i10)') LIN endif END FUNCTION END FUNCTION atomes_1.3.1/src/fortran/rings-primitive.F900000664000175000017500000012574715212624223020377 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file rings-primitive.F90 !! @short Primitive and strong ring statistics !! @author Sébastien Le Roux INTEGER FUNCTION PRIMITIVE_RINGS () ! ! Primitive and strong ring statistics ! #ifdef OPENMP !$ USE OMP_LIB #endif USE PARAMETERS IMPLICIT NONE INTEGER :: RID #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS=.false. #endif INTERFACE INTEGER FUNCTION RECRINGS(VID) INTEGER, INTENT(IN) :: VID END FUNCTION END INTERFACE PRIMITIVE_RINGS=0 ! Dynamic allocation of pointers and tables used in the "RINGS" subroutine RID = 3 if (CALC_STRINGS) RID = 4 #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. ! Dynamic allocation of pointers and tables used in the "RINGS" subroutine if (NS.ge.1 .and. NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA #ifdef DEBUG write (6, *) "OpenMP on atoms, NUMTH= ",NUMTH #endif call PRIMITIVE_RING_SEARCH_ATOMS (RID, NUMTH) else #ifdef DEBUG write (6, *) "OpenMP on MD steps, NUMTH= ",NUMTH #endif call PRIMITIVE_RING_SEARCH_STEPS (RID, NUMTH) endif #else call PRIMITIVE_RING_SEARCH_STEPS (RID) #endif PRIMITIVE_RINGS = RECRINGS(RID) END FUNCTION #ifdef OPENMP SUBROUTINE PRIMITIVE_RING_SEARCH_ATOMS (RID, NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: NUMTH INTEGER, INTENT(IN) :: RID INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING, ORDRING INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVR, ORDR INTEGER :: ri LOGICAL, DIMENSION(2) :: FNDTAB INTERFACE INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI END FUNCTION INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR,NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED END FUNCTION END INTERFACE ri = 0 if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(ORDRING)) deallocate(ORDRING) allocate(ORDRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDRING" ALC=.true. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NNA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif do i=1, NS SAVRING(:,:,:)=0 ORDRING(:,:,:)=0 call SETUP_CPAT_VPAT_RING (NNA, i, CONTJ, VOISJ, CPAT, VPAT) ! OpenMP on atoms only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(FNDTAB, MAXAT, MINAT, SAUT, PATH, PATHOUT, & !$OMP& h, j, k, l, m, n, o, p, INDTE, APNA, RES_LIST, & !$OMP& ERR, TRING, SAVR, ORDR, PRINGORD, NPRING, MATDIST, QUEUE, QUERNG) & !$OMP& SHARED(NUMTH, i, RID, CALC_STRINGS, NS, NA, NNA, NNP, TLT, NSP, LOT, TAILLR, CONTJ, VOISJ, & !$OMP& NUMA, MAXPNA, MINPNA, ABAB, NO_HOMO, TBR, ALC, ALC_TAB, SAVRING, ORDRING, CPAT, VPAT, & !$OMP& NCELLS, THE_BOX, FULLPOS, PBC, MAXN, NRING, INDRING, PNA, ri) if(allocated(MATDIST)) deallocate(MATDIST) allocate(MATDIST(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="MATDIST" ALC=.true. goto 002 endif if(allocated(QUEUE)) deallocate(QUEUE) allocate(QUEUE(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="QUEUE" ALC=.true. goto 002 endif if (allocated(PRINGORD)) deallocate(PRINGORD) allocate(PRINGORD(NUMA*10,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="PRINGORD" ALC=.false. goto 002 endif if (allocated(NPRING)) deallocate(NPRING) allocate(NPRING(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="NPRING" ALC=.false. goto 002 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 002 endif if(allocated(SAVR)) deallocate(SAVR) allocate(SAVR(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVR" ALC=.true. goto 002 endif if(allocated(ORDR)) deallocate(ORDR) allocate(ORDR(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDR" ALC=.true. goto 002 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 002 endif if (allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 002 endif if(allocated(APNA)) deallocate(APNA) allocate(APNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="APNA" ALC=.true. goto 002 endif SAVR(:,:,:)=0 ORDR(:,:,:)=0 TRING(:)=0 !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=NNP+1, NNP+NA ! atoms-loop if (TBR .or. ALC) goto 003 if (TLT .eq. NSP+1 .or. LOT(j-NNP) .eq. TLT) then APNA(:)=0 MINAT=TAILLR MAXAT=1 SAUT=.true. call DIJKSTRA (j, CPAT, VPAT, QUEUE, MATDIST) if (TBR .or. ALC) goto 003 do k=1, TAILLR/2 + mod(TAILLR,2) ! ring-sizes-loop INDTE(:)=0 RES_LIST(:)=0 PATH=0 do l=1, NNA if (MATDIST(l) .eq. k) then call SPATH_REC (PATH,l,k,k,MATDIST,CPAT,VPAT,NPRING,PRINGORD) endif enddo h = PATH*(PATH-1)/2 if (allocated(QUERNG)) deallocate(QUERNG) allocate(QUERNG(h,2), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="QUERNG" ALC=.true. goto 003 endif l=0 do m=1, PATH-1 do n=m+1, PATH l=l+1 QUERNG(l,1)=m QUERNG(l,2)=n ! Paths which share atoms ... so with overlap ... are deleted PATHOUT=.false. do o=1, k-1 do p=1, k-1 if (PRINGORD(m,o) .eq. PRINGORD(n,p)) then PATHOUT=.true. exit endif enddo if (PATHOUT) exit enddo if (PATHOUT) then QUERNG(l,1)=0 QUERNG(l,2)=0 l=l-1 endif enddo enddo FNDTAB(:)=.false. call PRIM_RING (FNDTAB, j, l, k, h, CPAT, VPAT, QUERNG, PRINGORD, MATDIST, & SAVR, ORDR, TRING, INDTE, RES_LIST) if (TBR .or. ALC) goto 003 m = 2*k if (FNDTAB(1)) then if (APNA(m).eq.0) then APNA(m)=1 MINAT=min(MINAT,m) MAXAT=max(MAXAT,m) SAUT=.false. endif endif if (FNDTAB(2)) then m = m + 1 if (APNA(m).eq.0) then APNA(m)=1 MINAT=min(MINAT,m) MAXAT=max(MAXAT,m) SAUT=.false. endif endif if (allocated(QUERNG)) deallocate(QUERNG) enddo ! end ring-sizes-loop if (.not. SAUT) then do k=3, TAILLR do l=3, TAILLR if (APNA(k).eq.1 .and. APNA(l).eq.1) then !$OMP ATOMIC PNA(k,l,i)=PNA(k,l,i)+1 endif enddo enddo !$OMP ATOMIC MAXPNA(MAXAT,i)=MAXPNA(MAXAT,i)+1 !$OMP ATOMIC MINPNA(MINAT,i)=MINPNA(MINAT,i)+1 endif endif 003 continue enddo ! end atoms-loop !$OMP END DO NOWAIT if (TBR .or. ALC) goto 002 !$OMP CRITICAL do k=3, TAILLR if (TRING(k).gt.0) then if (NRING(k,i).gt.0) then o = 0 do l=1, TRING(k) do m=1, NRING(k,i) SAUT=.true. do n=1, k if (SAVRING(k,m,n) .ne. SAVR(k,l,n)) then SAUT=.false. exit endif enddo if (SAUT) exit enddo if (.not.SAUT) then o = o + 1 if (NRING(k,i)+o .gt. NUMA) then TBR=.true. goto 004 endif do m=1, k SAVRING(k,NRING(k,i)+o,m) = SAVR(k,l,m) ORDRING(k,NRING(k,i)+o,m) = ORDR(k,l,m) enddo endif enddo NRING(k,i)=NRING(k,i)+o else do l=1, TRING(k) do m=1, k SAVRING(k,l,m) = SAVR(k,l,m) ORDRING(k,l,m) = ORDR(k,l,m) enddo enddo NRING(k,i) = TRING(k) endif endif enddo 004 continue !$OMP END CRITICAL 002 continue if (allocated(INDTE)) deallocate (INDTE) if (allocated(APNA)) deallocate (APNA) if (allocated(TRING)) deallocate (TRING) if (allocated(SAVR)) deallocate (SAVR) if (allocated(ORDR)) deallocate (ORDR) if (allocated(MATDIST)) deallocate(MATDIST) if (allocated(QUEUE)) deallocate(QUEUE) if (allocated(PRINGORD)) deallocate(PRINGORD) !$OMP END PARALLEL if (ALC .or. TBR) goto 001 ri = ri + RINGS_TO_OGL (i, RID, NRING, SAVRING, ORDRING) do k=3, TAILLR if (NRING(k,i) .ne. 0) then ! do j=1, NRING(k,i) !! The algorithm implies that you may have a problem for !! the biggest size of ring therefore lets put this size out of the proof checking. !! Furthermore we check results only if all atoms are used to initiate the search. ! if (mod(INDRING(k,j,i), k).ne.0 .and. k.lt.TAILLR .and. LTLT.eq.0) then ! write (6, 003) i, k, j, INDRING(k,j,i) ! write (6, 007) ! do l=1, k ! write (6, '(i4,2x)', advance='no') RINGORD(k,j,l,i) ! enddo ! write (6, *) ! write (6, 004) ! if (ABAB) then ! write (6, 008) ! else ! write (6, 005) ! endif ! write (6, *) ! endif ! enddo endif enddo enddo 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: PRIMITIVE_RING_SEARCH_ATOMS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(ORDRING)) deallocate (ORDRING) if (ri .eq. NS) ri = RINGS_TO_OGL_MENU (RID, NRING) END SUBROUTINE #endif #ifdef OPENMP SUBROUTINE PRIMITIVE_RING_SEARCH_STEPS (RID, NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: NUMTH #else SUBROUTINE PRIMITIVE_RING_SEARCH_STEPS (RID) USE PARAMETERS IMPLICIT NONE #endif INTEGER, INTENT(IN) :: RID INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING, ORDRING INTEGER :: ri LOGICAL, DIMENSION(2) :: FNDTAB INTERFACE INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI END FUNCTION INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR,NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED END FUNCTION END INTERFACE ri = 0 #ifdef OPENMP ! OpenMP on steps only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(FNDTAB, MAXAT, MINAT, SAUT, PATH, PATHOUT, & !$OMP& h, i, j, k, l, m, n, o, p, INDTE, APNA, RES_LIST, & !$OMP& ERR, TRING, SAVRING, ORDRING, CPAT, VPAT, & !$OMP& PRINGORD, NPRING, MATDIST, QUEUE, QUERNG) & !$OMP& SHARED(NUMTH, RID, CALC_STRINGS, NS, NA, NNA, NNP, TLT, NSP, LOT, TAILLR, CONTJ, VOISJ, & !$OMP& NUMA, MAXPNA, MINPNA, ABAB, NO_HOMO, TBR, ALC, ALC_TAB, & !$OMP& NCELLS, THE_BOX, FULLPOS, PBC, MAXN, NRING, INDRING, PNA, ri) #endif if(allocated(MATDIST)) deallocate(MATDIST) allocate(MATDIST(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="MATDIST" ALC=.true. goto 001 endif if(allocated(QUEUE)) deallocate(QUEUE) allocate(QUEUE(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="QUEUE" ALC=.true. goto 001 endif if (allocated(PRINGORD)) deallocate(PRINGORD) allocate(PRINGORD(NUMA*10,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="PRINGORD" ALC=.false. goto 001 endif if (allocated(NPRING)) deallocate(NPRING) allocate(NPRING(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="NPRING" ALC=.false. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NNA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 001 endif if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(ORDRING)) deallocate(ORDRING) allocate(ORDRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDRING" ALC=.true. goto 001 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 001 endif if (allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 001 endif if(allocated(APNA)) deallocate(APNA) allocate(APNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="APNA" ALC=.true. goto 001 endif !$OMP DO SCHEDULE(STATIC,NS/NUMTH) do i=1, NS if (TBR .or. ALC) goto 002 SAVRING(:,:,:)=0 ORDRING(:,:,:)=0 TRING(:)=0 call SETUP_CPAT_VPAT_RING (NNA, i, CONTJ, VOISJ, CPAT, VPAT) do j=NNP+1, NNP+NA ! atoms-loop if (TLT .eq. NSP+1 .or. LOT(j-NNP) .eq. TLT) then APNA(:)=0 MINAT=TAILLR MAXAT=1 SAUT=.true. call DIJKSTRA(j, CPAT, VPAT, QUEUE, MATDIST) if (TBR .or. ALC) goto 002 do k=1, TAILLR/2 + mod(TAILLR,2) ! ring-sizes-loop INDTE(:)=0 RES_LIST(:)=0 PATH=0 do l=1, NNA if (MATDIST(l) .eq. k) then call SPATH_REC (PATH,l,k,k,MATDIST,CPAT,VPAT,NPRING,PRINGORD) endif enddo h = PATH*(PATH-1)/2 if (allocated(QUERNG)) deallocate(QUERNG) allocate(QUERNG(h,2), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="QUERNG" ALC=.true. goto 002 endif l=0 do m=1, PATH-1 do n=m+1, PATH l=l+1 QUERNG(l,1)=m QUERNG(l,2)=n ! Paths which share atoms ... so with overlap ... are deleted PATHOUT=.false. do o=1, k-1 do p=1, k-1 if (PRINGORD(m,o) .eq. PRINGORD(n,p)) then PATHOUT=.true. exit endif enddo if (PATHOUT) exit enddo if (PATHOUT) then QUERNG(l,1)=0 QUERNG(l,2)=0 l=l-1 endif enddo enddo FNDTAB(:)=.false. call PRIM_RING (FNDTAB, j, l, k, h, CPAT, VPAT, QUERNG, PRINGORD, MATDIST, & SAVRING, ORDRING, TRING, INDTE, RES_LIST) if (TBR .or. ALC) goto 002 m = 2*k if (FNDTAB(1)) then if (APNA(m).eq.0) then APNA(m)=1 MINAT=min(MINAT,m) MAXAT=max(MAXAT,m) SAUT=.false. endif endif if (FNDTAB(2)) then m = m + 1 if (APNA(m).eq.0) then APNA(m)=1 MINAT=min(MINAT,m) MAXAT=max(MAXAT,m) SAUT=.false. endif endif if (allocated(QUERNG)) deallocate(QUERNG) enddo ! end ring-sizes-loop if (.not. SAUT) then do k=3, TAILLR do m=3, TAILLR if (APNA(k).eq.1 .and. APNA(m).eq.1) then PNA(k,m,i)=PNA(k,m,i)+1 endif enddo enddo MAXPNA(MAXAT,i)=MAXPNA(MAXAT,i)+1 MINPNA(MINAT,i)=MINPNA(MINAT,i)+1 endif endif enddo ! end atoms-loop do j=3, TAILLR NRING(j,i) = TRING(j) enddo k = RINGS_TO_OGL (i, RID, NRING, SAVRING, ORDRING) !$OMP ATOMIC ri = ri + k do k=3, TAILLR if (NRING(k,i) .ne. 0) then ! do j=1, NRING(k,i) !! The algorithm implies that you may have a problem for !! the biggest size of ring therefore lets put this size out of the proof checking. !! Furthermore we check results only if all atoms are used to initiate the search. ! if (mod(INDRING(k,j,i), k).ne.0 .and. k.lt.TAILLR .and. LTLT.eq.0) then ! write (6, 003) i, k, j, INDRING(k,j,i) ! write (6, 007) ! do l=1, k ! write (6, '(i4,2x)', advance='no') RINGORD(k,j,l,i) ! enddo ! write (6, *) ! write (6, 004) ! if (ABAB) then ! write (6, 008) ! else ! write (6, 005) ! endif ! write (6, *) ! endif ! enddo endif enddo 002 continue enddo #ifdef OPENMP !$OMP END DO NOWAIT #endif 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: PRIMITIVE_RING_SEARCH_STEPS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(TRING)) deallocate (TRING) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(ORDRING)) deallocate (ORDRING) if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(INDTE)) deallocate (INDTE) if (allocated(APNA)) deallocate (APNA) if(allocated(MATDIST)) deallocate(MATDIST) if(allocated(QUEUE)) deallocate(QUEUE) if (allocated(PRINGORD)) deallocate(PRINGORD) #ifdef OPENMP !$OMP END PARALLEL #endif if (ri .eq. NS) ri = RINGS_TO_OGL_MENU (RID, NRING) END SUBROUTINE SUBROUTINE DIJKSTRA(NODE, CPT, VPT, QUE, MATDIS) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: NODE INTEGER, DIMENSION(NNA), INTENT(INOUT) :: QUE, MATDIS INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT INTEGER :: QBEGIN, QEND, QID, AT1, AT2, DAT1 QUE(:)=0 MATDIS(:)=NNA+2 QUE(1)=NODE MATDIS(NODE)=0 QBEGIN=0 QEND=1 ! Trouver les plus cours chemin reliant un atome aux autres ! Find the shortest paths between atoms do while (QBEGIN < QEND) QBEGIN=QBEGIN+1 AT1=QUE(QBEGIN) DAT1=MATDIS(AT1)+1 do QID=1, CPT(AT1) AT2=VPT(AT1,QID) if (MATDIS(AT2) .gt. DAT1) then MATDIS(AT2) = DAT1 if (DAT1 < NNA) then QEND=QEND+1 QUE(QEND)= AT2 endif endif enddo enddo END SUBROUTINE RECURSIVE SUBROUTINE SPATH_REC (PTH, NODE, LENGTH, LNGTH, MATDIS, CPT, VPT, NPRI, PORDR) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(INOUT) :: PTH INTEGER, INTENT(IN) :: NODE, LENGTH, LNGTH INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT, MATDIS INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT INTEGER, DIMENSION(NNA), INTENT(INOUT) :: NPRI INTEGER, DIMENSION(NUMA*10,TAILLR), INTENT(INOUT) :: PORDR INTEGER :: DISTNN, IDV, VDI, IDT NPRI(LENGTH) = NODE do IDV=1, CPT(NODE) ! Boucle sur tous les voisins du noeud "NODE" ! Loop on all the neighbors of node "NODE" VDI=VPT(NODE,IDV) ! Selection du voisin - neighbor selection DISTNN=MATDIS(VDI) ! Distance to starting atom = VDI in the node distance table if (DISTNN .eq. 0) then PTH=PTH+1 do IDT=1, LNGTH PORDR(PTH,IDT)=NPRI(IDT) enddo elseif (DISTNN .eq. LENGTH-1) then call SPATH_REC (PTH, VDI, DISTNN, LNGTH, MATDIS, CPT, VPT, NPRI, PORDR) endif enddo END SUBROUTINE INTEGER FUNCTION REAL_ATOM_ID (IND, NATS) IMPLICIT NONE INTEGER, INTENT(IN) :: IND, NATS REAL_ATOM_ID= IND - (IND/NATS)*NATS if (REAL_ATOM_ID .eq. 0) REAL_ATOM_ID=NATS END FUNCTION SUBROUTINE PRIM_RING (FNDTAB, NODE, PTH, LGTH, NPT, CPT, VPT, QRNG, PORD, MATDIS, & RSAVED, OSAVED, TRIN, INDP, RESLP) USE PARAMETERS IMPLICIT NONE LOGICAL, DIMENSION(2), INTENT(INOUT) :: FNDTAB INTEGER, INTENT(IN) :: NODE, PTH, LGTH, NPT INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT, MATDIS INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRIN INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT INTEGER, DIMENSION(NPT,2), INTENT(IN) :: QRNG INTEGER, DIMENSION(NUMA*10,TAILLR), INTENT(INOUT) :: PORD INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDP INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESLP INTEGER :: RM, RN, PR, PTH1, PTH2, IRS, IRX INTEGER :: ATB, ATA, ATC, ATD, ATE, MAXD, MIND INTEGER :: PROBE INTEGER, DIMENSION(TAILLR) :: TOPRIM, PRIMTO LOGICAL:: GOAL, TOSAVE LOGICAL, DIMENSION(NNA) :: CHK INTERFACE INTEGER FUNCTION REAL_ATOM_ID (IND, NATS) INTEGER, INTENT(IN) :: IND, NATS END FUNCTION END INTERFACE GOAL=.false. do PR=1, PTH ! Premier chemin i->j - First path i->j PTH1= QRNG(PR,1) ! Second chemin i->k - second path i->k PTH2= QRNG(PR,2) PROBE=0 ATA= PORD(PTH1,LGTH) ATB= PORD(PTH2,LGTH) do RM=1, CPT(ATA) ATE=VPT(ATA,RM) if (ATE .eq. ATB) PROBE=1 enddo if (ATA .eq. ATB .or. PROBE .eq. 1) then do RM=1, LGTH-1 do RN=RM, LGTH-1+PROBE ATC= PORD(PTH1,RM) ATD= PORD(PTH2,RN) MAXD=MATDIS(ATC)+MATDIS(ATD) MIND=2*LGTH+PROBE-MAXD CHK(:)=.false. call PAIR_SEARCH (GOAL, ATC, ATD, 1, MAXD, MIND, CPT, VPT, CHK) if (GOAL) then GOAL= .false. goto 001 endif enddo enddo do RN=1, LGTH-1 do RM=RN, LGTH-1+PROBE ATC= PORD(PTH1,RM) ATD= PORD(PTH2,RN) MAXD=MATDIS(ATC)+MATDIS(ATD) MIND=2*LGTH+PROBE-MAXD CHK(:)=.false. call PAIR_SEARCH (GOAL, ATC, ATD, 1, MAXD, MIND, CPT, VPT, CHK) if (GOAL) then GOAL= .false. goto 001 endif enddo enddo if ((PROBE.eq.0 .and. 2*LGTH.le.TAILLR) .or. (PROBE.eq.1 .and. 2*LGTH.lt.TAILLR)) then TOPRIM(:)=0 PRIMTO(:)=0 do IRX=1, LGTH TOPRIM(IRX)=PORD(PTH1,IRX) enddo if (PROBE .eq. 1) TOPRIM(LGTH+1)=PORD(PTH2,LGTH) IRS=LGTH+PROBE do IRX=LGTH-1, 1, -1 IRS=IRS+1 TOPRIM(IRS)=PORD(PTH2,IRX) enddo TOPRIM(IRS+1)=NODE ! To find atom id in the primitive unit cell do IRX=1, 2*LGTH+PROBE PRIMTO(IRX)=REAL_ATOM_ID(TOPRIM(IRX),NA) enddo TOSAVE=.true. if (ABAB) then if (PROBE .eq. 0) then call TESTABAB (TOSAVE,LGTH,PRIMTO) else TOSAVE=.false. endif endif if (NO_HOMO) then call TESTHOMO(TOSAVE,LGTH,PRIMTO) endif if (TOSAVE .and. LGTH*2+PROBE.le.TAILLR) then if (CALC_STRINGS) then call STRONG_RINGS (FNDTAB, LGTH, PROBE, TOPRIM, PRIMTO, RSAVED, OSAVED, TRIN, INDP, RESLP, CPT, VPT) else call SAVE_DIJKSTRA_RING (PRIMTO, LGTH*2+PROBE, RSAVED, OSAVED, TRIN, INDP, RESLP) FNDTAB(1+PROBE)=.true. endif if (TBR .or. ALC) goto 002 endif endif endif 001 continue enddo 002 continue END RECURSIVE SUBROUTINE PAIR_SEARCH (GOAL, AT1, AT2, LG, MAXM, MINM, CPT, VPT, CHK) USE PARAMETERS IMPLICIT NONE LOGICAL, INTENT(INOUT) :: GOAL INTEGER, INTENT(IN) :: AT1, AT2, LG, MAXM, MINM INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT LOGICAL, DIMENSION(NNA), INTENT(INOUT) :: CHK INTEGER :: PSC, AT3 CHK(AT1)=.true. if (AT1 .eq. AT2) then GOAL=.true. else do PSC=1, CPT(AT1) AT3=VPT(AT1,PSC) if (.not.CHK(AT3)) then if (AT3.eq.AT2) then GOAL=.true. goto 001 elseif (LG.lt.MAXM-1 .and. LG.lt.MINM-1) then call PAIR_SEARCH (GOAL, AT3, AT2, LG+1, MAXM, MINM, CPT, VPT, CHK) if (GOAL) then goto 001 endif endif endif enddo endif 001 continue CHK(AT1)=.false. END SUBROUTINE SUBROUTINE STRONG_RINGS (FNDTAB, RLGTH, RPROBE, TOPRIM, PRIMTO, ASRING, OSRING, TRNG, INDT, RESL, CPT, VPT) USE PARAMETERS IMPLICIT NONE LOGICAL, DIMENSION(2), INTENT(INOUT) :: FNDTAB INTEGER, INTENT(IN) :: RLGTH, RPROBE INTEGER, DIMENSION(TAILLR), INTENT(IN) :: TOPRIM, PRIMTO INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: ASRING, OSRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRNG, RESL INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT INTEGER :: RM, RN, STLGT LOGICAL, DIMENSION(NNA) :: CHKS LOGICAL :: DVSTR LOGICAL :: SGOAL=.false. LOGICAL :: FGOAL=.false. STLGT=2*RLGTH+RPROBE CHKS(:)=.false. do RM=1, STLGT-1 do RN=RM+1, STLGT DVSTR=.false. call SEARCH_STRONG_RINGS (DVSTR, RM, RN, STLGT, STLGT, SGOAL, FGOAL, TOPRIM, CPT, VPT, CHKS) if (TBR .or. ALC) goto 002 if (FGOAL) goto 001 if (SGOAL) goto 002 enddo enddo 001 continue call SAVE_DIJKSTRA_RING (PRIMTO, RLGTH*2+RPROBE, ASRING, OSRING, TRNG, INDT, RESL) FNDTAB(1+RPROBE)=.true. if (TBR .or. ALC) goto 002 002 continue END SUBROUTINE RECURSIVE SUBROUTINE SEARCH_STRONG_RINGS (DLOW, IDX, IDY, DLGTR, LGTR, SRGOAL, FRGOAL, TOTER, CPT, VPT, CHKS) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: DLGTR, LGTR, IDX, IDY LOGICAL, INTENT(INOUT) :: DLOW, SRGOAL, FRGOAL INTEGER, DIMENSION(DLGTR), INTENT(IN) :: TOTER INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT LOGICAL, DIMENSION(NNA), INTENT(INOUT) :: CHKS INTEGER :: DXY, DYX, DTEST, DMIN INTEGER :: RG, RF, RH, RJ, RL, RO, RP, RQ, RR INTEGER :: NBPATH, IDZ INTEGER, DIMENSION(:), ALLOCATABLE :: STRST, NEWTER INTEGER, DIMENSION(:,:), ALLOCATABLE :: TOTPATH LOGICAL, DIMENSION(:), ALLOCATABLE :: CUTRING LOGICAL, DIMENSION(NNA) :: CHK TYPE(RING), TARGET :: ST_RING TYPE(RING), POINTER :: SRING, TMP_RI INTERFACE RECURSIVE SUBROUTINE PATH_SEARCH (AT0,AT1,AT2,IDT1,IDT2,DMAX,DMED,DARING,NPATH,DLPATH, & STPATH,ACRING,TPATH,CUTPATH,CPT,VPT,CHK,CHKS,SRING) USE PARAMETERS INTEGER, INTENT(IN) :: AT0, AT1, AT2, IDT1, IDT2, DMAX, DMED, DARING INTEGER, INTENT(INOUT) :: NPATH LOGICAL, INTENT(INOUT) :: DLPATH INTEGER, DIMENSION(DMAX*DMAX), INTENT(INOUT) :: STPATH INTEGER, DIMENSION(DMAX*DMAX,DMAX), INTENT(INOUT) :: TPATH INTEGER, DIMENSION(DMED), INTENT(IN) :: ACRING INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT LOGICAL, DIMENSION(DMAX*DMAX), INTENT(INOUT) :: CUTPATH LOGICAL, DIMENSION(NNA), INTENT(INOUT) :: CHK, CHKS TYPE (RING), POINTER, INTENT(INOUT) :: SRING END SUBROUTINE SHORTCUT_RING (IDA, IDB, IDC, DLT, TABAB, SRING) USE PARAMETERS INTEGER, INTENT(IN) :: IDA, IDB, IDC, DLT INTEGER, DIMENSION(DLT), INTENT(IN) :: TABAB TYPE(RING), POINTER, INTENT(INOUT) :: SRING END SUBROUTINE CREAT_RING (RING_INIT, ELEM_CR) USE PARAMETERS TYPE (RING), INTENT(INOUT) :: RING_INIT INTEGER, INTENT(IN) :: ELEM_CR END SUBROUTINE SUBROUTINE DO_RING (THE_RING, ELEM_DO) USE PARAMETERS TYPE (RING), POINTER, INTENT(INOUT) :: THE_RING INTEGER, INTENT(IN) :: ELEM_DO END SUBROUTINE END INTERFACE do RG=1, DLGTR CHKS(TOTER(RG))=.true. enddo DXY=abs(IDY-IDX) DYX=DLGTR-DXY DMIN=min(DXY,DYX) DTEST=LGTR-1-DMIN ! First we find find a ring starting from an atom i and enclosing ! all tested atoms, then this ring will be tested and so on ! if the size of the enclosing ring became smaller than ! DLGTR then the initial ring is not strong if (DTEST.ge.2) then do RJ=2, DTEST if (allocated(TOTPATH)) deallocate(TOTPATH) allocate(TOTPATH(RJ*RJ,RJ), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TOTPATH" ALC=.true. goto 001 endif if (allocated(CUTRING)) deallocate(CUTRING) allocate(CUTRING(RJ*RJ), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CUTRING" ALC=.true. goto 001 endif if (allocated(STRST)) deallocate(STRST) allocate(STRST(RJ*RJ), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="STRST" ALC=.true. goto 001 endif NBPATH=0 STRST(:)=0 CUTRING(:)=.false. TOTPATH(:,:)=0 CHK(:)=.false. RR=1 call CREAT_RING (ST_RING, TOTER(IDX)) SRING => ST_RING ! On recherche tous les chemins de taille RJ entre les atomes TOTER(IDX) et TOTER(IDY) ! On stock ces NBPATH chemins dans le tableau TOTPATH ! We are looking for all path of size RJ between atoms TOTER(IDX) and TOTER(IDY) ! Then these NBPATH are saved in the tab TOTPATH call PATH_SEARCH (TOTER(IDX),TOTER(IDX),TOTER(IDY),IDX,IDY,RJ,DLGTR,LGTR,NBPATH,DLOW, & STRST,TOTER,TOTPATH,CUTRING,CPT,VPT,CHK,CHKS,SRING) if (ALC) goto 001 if (NBPATH .ne. 0) then do RH=1, NBPATH IDZ=0 if (CUTRING(RH)) then do RG=1, DLGTR if (TOTER(RG) .eq. STRST(RH)) then IDZ=RG exit endif enddo endif if(IDZ.eq.0)then if (.not.CUTRING(RH)) then call CREAT_RING (ST_RING, TOTER(IDX)) SRING => ST_RING do RG=1, RJ RR=RR+1 call DO_RING (SRING, TOTPATH(RH,RG)) if (ALC) goto 001 enddo if (DXY .le. DYX) then do RG=IDY+1, DLGTR call DO_RING (SRING, TOTER(RG)) if (ALC) goto 001 enddo do RG=1, IDX call DO_RING (SRING, TOTER(RG)) if (ALC) goto 001 enddo else do RG=IDY-1, IDX, -1 call DO_RING (SRING, TOTER(RG)) if (ALC) goto 001 enddo endif else call CREAT_RING (ST_RING, TOTER(1)) SRING => ST_RING do RG=2, DLGTR call DO_RING (SRING, TOTER(RG)) if (ALC) goto 001 enddo CHKS(TOTPATH(RH,1))=.true. endif else call CREAT_RING (ST_RING, TOTPATH(RH,1)) SRING => ST_RING call SHORTCUT_RING (IDX, IDY, IDZ, DLGTR, TOTER, SRING) if (ALC) goto 001 endif ! A new path as been found, so a new rings as been built according ! to the new list of atoms. ! The size of this new ring has to be tested if (SRING%SPEC+1 .lt. LGTR) then TMP_RI => SRING do RF=1, SRING%SPEC TMP_RI => TMP_RI%PAST deallocate (TMP_RI%NEXT) enddo SRGOAL=.true. goto 001 else ! If all the atoms are CHK and ring is bigger than the initial ring ! the initial ring is strong .. we have to check this RF=0 do RG=1, NNA if (CHKS(RG)) RF=RF+1 enddo if (RF .eq. NNA) then TMP_RI => SRING do RG=1, SRING%SPEC TMP_RI => TMP_RI%PAST deallocate (TMP_RI%NEXT) enddo FRGOAL=.true. goto 001 else ! Else the new ring has to be tested RR = SRING%SPEC+1 if (allocated(NEWTER)) deallocate(NEWTER) allocate(NEWTER(RR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="NEWTER" ALC=.true. goto 001 endif SRGOAL=.false. TMP_RI => SRING do RG=1, RR NEWTER(RR-RG+1)=TMP_RI%ATOM if (RG .lt. RR) then TMP_RI => TMP_RI%PAST deallocate (TMP_RI%NEXT) endif enddo DLOW=.false. SRING => ST_RING if (IDZ.eq.0) then if (DMIN .eq. 1) then RO=2 RP=RJ DLOW=.true. else RO=1 RP=RR-1 endif else RO=1 RP=RR-1 endif do RG=RO, RP if (IDZ.eq.0) then if (DMIN .eq. 1) then DLOW=.true. RQ=RJ+2 else RQ=RG+1 endif else RQ=RG+1 endif do RF=RQ, RR call SEARCH_STRONG_RINGS (DLOW, RG, RF, RR, LGTR, SRGOAL, FRGOAL, NEWTER, CPT, VPT, CHKS) if (TBR .or. ALC) goto 001 if (SRGOAL .or. FRGOAL) goto 001 do RL=1, DLGTR CHKS(TOTER(RL))=.true. enddo if (IDZ.eq.0 .and. CUTRING(RH)) CHKS(TOTPATH(RH,1))=.true. enddo enddo if (allocated(NEWTER)) deallocate(NEWTER) endif endif if (IDZ.eq.0 .and. CUTRING(RH)) CHKS(TOTPATH(RH,1))=.false. enddo else SRGOAL=.false. endif if (allocated(TOTPATH)) deallocate(TOTPATH) if (allocated(CUTRING)) deallocate(CUTRING) if (allocated(STRST)) deallocate(STRST) enddo endif 001 continue if (allocated(TOTPATH)) deallocate(TOTPATH) if (allocated(CUTRING)) deallocate(CUTRING) if (allocated(STRST)) deallocate(STRST) if (allocated(NEWTER)) deallocate(NEWTER) do RG=1, DLGTR CHKS(TOTER(RG))=.false. enddo END SUBROUTINE RECURSIVE SUBROUTINE PATH_SEARCH (AT0,AT1,AT2,IDT1,IDT2,DMAX,DMED,DARING,NPATH,DLPATH, & STPATH,ACRING,TPATH,CUTPATH,CPT,VPT,CHK,CHKS,SRING) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: AT0, AT1, AT2, IDT1, IDT2, DMAX, DMED, DARING INTEGER, INTENT(INOUT) :: NPATH LOGICAL, INTENT(INOUT) :: DLPATH INTEGER, DIMENSION(DMAX*DMAX), INTENT(INOUT) :: STPATH INTEGER, DIMENSION(DMAX*DMAX,DMAX), INTENT(INOUT) :: TPATH INTEGER, DIMENSION(DMED), INTENT(IN) :: ACRING INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT LOGICAL, DIMENSION(DMAX*DMAX), INTENT(INOUT) :: CUTPATH LOGICAL, DIMENSION(NNA), INTENT(INOUT) :: CHK, CHKS TYPE (RING), POINTER, INTENT(INOUT) :: SRING INTEGER :: AT3, AT4, AT5, AT6, AT7 INTEGER :: DUV, DUW, DVW LOGICAL :: VAL1, VAL2 LOGICAL :: TOUCH TYPE (RING), POINTER :: TMPR INTERFACE SUBROUTINE DO_RING (THE_RING, ELEM_DO) USE PARAMETERS TYPE (RING), POINTER, INTENT(INOUT) :: THE_RING INTEGER, INTENT(IN) :: ELEM_DO END SUBROUTINE END INTERFACE CHK(AT1)=.true. if (AT1.eq.AT2 .and. SRING%SPEC.eq.DMAX) then NPATH=NPATH+1 TMPR => SRING do AT3=1, DMAX TPATH(NPATH,DMAX-AT3+1)=TMPR%ATOM if (AT3 .lt. DMAX) TMPR => TMPR%PAST enddo else do AT4=1, CPT(AT1) AT3=VPT(AT1,AT4) if (.not.CHK(AT3)) then call DO_RING (SRING, AT3) if (ALC) goto 001 if (AT3 .eq. AT2 .and. SRING%SPEC.eq.DMAX) then NPATH=NPATH+1 TMPR => SRING do AT5=1, DMAX TPATH(NPATH,DMAX-AT5+1)=TMPR%ATOM if (AT5 .lt. DMAX) TMPR => TMPR%PAST enddo elseif (SRING%SPEC.lt.DMAX .and. .not.CHKS(AT3)) then TOUCH=.false. AT7=0 VAL1=.false. VAL2=.false. do AT5=1, CPT(AT3) AT6=VPT(AT3,AT5) if (AT6 .eq. AT0) VAL1=.true. if (AT6 .eq. AT2) VAL2=.true. if (CHKS(AT6)) then AT7=AT7+1 if (AT6.ne.AT0 .and. AT6.ne.AT2) STPATH(NPATH+1)=AT6 endif enddo AT6=0 do AT5=1, DMED if (ACRING(AT5) .eq. STPATH(NPATH+1)) then AT6=AT5 exit endif enddo if (AT7 .eq. 0) then TOUCH=.false. elseif (AT7.eq.1 .and. VAL1 .and. .not.VAL2) then TOUCH=.false. elseif (AT7.eq.1 .and. VAL2 .and. .not.VAL1) then TOUCH=.false. elseif (AT7.eq.1 .and. .not.VAL1 .and. .not.VAL2) then TOUCH=.true. elseif (AT7.eq.2 .and. VAL1 .and. VAL2 .and. DMAX.eq.2) then TOUCH=.false. elseif (AT7.gt.2 .and. VAL1 .and. VAL2 .and. DMAX.eq.2) then if (DLPATH) then TOUCH=.true. else if (AT6 .ne. 0) then if (AT6 .lt. IDT1) then DUV=IDT1-AT6 DVW=IDT2-IDT1 DUW=DMED-(IDT2-AT6) elseif(AT6 .lt. IDT2) then DUV=AT6-IDT1 DVW=DMED-(AT2-AT1) DUW=IDT2-AT6 elseif(AT6 .gt. IDT2) then DUV=DMED-(AT6-IDT1) DVW=IDT2-IDT1 DUW=AT6-IDT2 endif if (DUV.lt.DARING-1 .and. DUW.lt.DARING-1) then CUTPATH(NPATH+1)=.true. TOUCH=.false. elseif (DVW.lt.DARING-1 .and. DUW.lt.DARING-1) then CUTPATH(NPATH+1)=.true. TOUCH=.false. elseif (DUV.lt.DARING-1 .and. DVW.lt.DARING-1) then CUTPATH(NPATH+1)=.true. TOUCH=.false. else TOUCH=.true. endif else CUTPATH(NPATH+1)=.true. TOUCH=.false. endif endif else TOUCH=.true. endif if (.not.TOUCH) then call PATH_SEARCH (AT0,AT3,AT2,IDT1,IDT2,DMAX,DMED,DARING,NPATH,DLPATH, & STPATH,ACRING,TPATH,CUTPATH,CPT,VPT,CHK,CHKS,SRING) if (ALC) goto 001 endif endif SRING => SRING%PAST deallocate (SRING%NEXT) endif enddo endif CHK(AT1)=.false. 001 continue END SUBROUTINE SUBROUTINE SHORTCUT_RING (IDA, IDB, IDC, DLT, TABAB, SRING) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: IDA, IDB, IDC, DLT INTEGER, DIMENSION(DLT), INTENT(IN) :: TABAB TYPE(RING), POINTER, INTENT(INOUT) :: SRING INTEGER :: IDD INTEGER :: LXY, LXZ, LYZ INTERFACE SUBROUTINE DO_RING (THE_RING, ELEM_DO) USE PARAMETERS TYPE (RING), POINTER, INTENT(INOUT) :: THE_RING INTEGER, INTENT(IN) :: ELEM_DO END SUBROUTINE END INTERFACE if (IDA .gt. IDC) then ! IDB > IDA > IDC LXZ=IDA-IDC LXY=IDB-IDA LYZ=DLT-(IDB-IDC) if (LXY .gt. LYZ) then if (LXY .gt. LXZ) then do IDD=IDA, IDB call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo else do IDD=IDC, IDA call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo endif else if (LXZ .gt. LYZ) then do IDD=IDC, IDA call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo else do IDD=IDB, DLT call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo do IDD=1, IDC call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo endif endif else ! IDB > IDA .and. IDC .gt. IDA if (IDC .gt. IDB) then ! IDB > IDA .and. IDC .gt. IDA .and. IDC .gt. IDB ! => IDC > IDB > IDA LXY=IDB-IDA LYZ=IDC-IDB LXZ=DLT-(IDC-IDA) if (LXY .gt. LYZ) then if (LXY .gt. LXZ) then do IDD=IDA, IDB call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo else do IDD=IDC, DLT call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo do IDD=1, IDA call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo endif else if (LYZ .ge. LXZ) then do IDD=IDB, IDC call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo else do IDD=IDA, IDB call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo endif endif else ! IDB > IDA .and. IDC .gt. IDA .and. IDB .gt. IDC ! => IDB > IDC > IDA LXY=DLT-(IDB-IDA) LYZ=IDB-IDC LXZ=IDC-IDA if (LXY .gt. LYZ) then if (LXY .gt. LXZ) then do IDD=IDB, DLT call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo do IDD=1, IDA call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo else do IDD=IDA, IDC call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo endif else if (LYZ .gt. LXZ) then do IDD=IDC, IDB call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo else do IDD=IDA, IDC call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo endif endif endif endif 001 continue END SUBROUTINE SUBROUTINE TESTABAB(VALTEST, LGTEST, PRIMT) USE PARAMETERS IMPLICIT NONE LOGICAL, INTENT(INOUT) :: VALTEST INTEGER, INTENT(IN) :: LGTEST INTEGER, DIMENSION(TAILLR), INTENT(IN) :: PRIMT INTEGER :: LTA, LTB, LTC, LTD LTA=LOT(PRIMT(1)) LTB=LOT(PRIMT(2)) VALTEST=.true. if (LTA .ne. LTB) then do LTD=3, 2*LGTEST LTC=LOT(PRIMT(LTD)) if (mod(LTD,2).eq.0 .and. LTC.ne.LTB) then VALTEST=.false. exit elseif (mod(LTD,2).ne.0 .and. LTC.ne.LTA) then VALTEST=.false. exit endif enddo else VALTEST=.false. endif END SUBROUTINE SUBROUTINE TESTHOMO(VALTEST, LGTEST, PRIMT) USE PARAMETERS IMPLICIT NONE LOGICAL, INTENT(INOUT) :: VALTEST INTEGER, INTENT(IN) :: LGTEST INTEGER, DIMENSION(TAILLR), INTENT(IN) :: PRIMT INTEGER :: LTA, LTB VALTEST=.true. do LTA=1, 2*LGTEST LTB=LTA+1 if (LTA .eq. 2*LGTEST) LTB=1 if (LOT(PRIMT(LTA)) .eq. LOT(PRIMT(LTB))) then VALTEST=.false. exit endif enddo END SUBROUTINE SUBROUTINE SAVE_DIJKSTRA_RING (TAB, TLES, RSAVED, OSAVED, TRING, INDT, RESL) USE PARAMETERS IMPLICIT NONE INTEGER, DIMENSION(TAILLR), INTENT(IN) :: TAB INTEGER, INTENT(IN) :: TLES INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING INTEGER :: idx, idy LOGICAL :: NEWRING INTEGER, DIMENSION(TLES) :: TOTRI, TOSAV ! A ring has been found, we need to check if it has already been found or not do idx=1, TLES ! Creation of two tab first for the numerical sorting of the list ! The other without sorting for output TOTRI(idx)= TAB(idx) TOSAV(idx)= TAB(idx) enddo call TRI(TOTRI, TLES) if (TRING(TLES) .ne. 0) then do idx=1, TRING(TLES) ! do-loop on existing rings to check if the new on has already been found NEWRING=.false. do idy=1, TLES if (TOTRI(idy) .ne. RSAVED(TLES,idx,idy)) then NEWRING=.true. exit endif enddo if (.not.NEWRING) then ! Already been found n-times, increment of the counter INDT(idx)=INDT(idx)+1 exit endif enddo else NEWRING=.true. endif if (NEWRING) then ! A new ring has been found ! We save the data RESL(TLES)=RESL(TLES)+1 TRING(TLES)=TRING(TLES)+1 if (TRING(TLES) .gt. NUMA) then TBR=.true. goto 001 endif INDT(TRING(TLES))=INDT(TRING(TLES))+1 do idx=1, TLES RSAVED(TLES,TRING(TLES),idx)=TOTRI(idx) OSAVED(TLES,TRING(TLES),idx)=TOSAV(idx) enddo endif 001 continue END SUBROUTINE atomes_1.3.1/src/fortran/sq.F900000664000175000017500000001674215212624223015664 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file sq.F90 !! @short S(q) analysis: Fourier transform calculation !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION s_of_q (QMAX, QMIN, NQ) BIND (C,NAME='s_of_q_') ! Total structure factor ! Partials structure factors ! Total structure factor: ! ! 00 sin (q*r) ! S(q)= 1 + 4*PI*rho* / dr r² ------------ (g(r) - 1) ! 0 (q*r) ! ! or: ! 1 Rmax sin (q*r) sin (PI*r/Rmax) ! S(q)= 1 + 4*PI*rho* / dr r² (g(r) -1) ----------- * --------------- ! 0 (q*r) PI*r/Rmax ! ! Partials structure factors: ! ! Rmax ! S (q)= delta(a,b) + sqrt(x * x ) *4*PI*rho* / dr r² (g (r) - 1) ! ab a b 0 ab ! ! ! or: ! Rmax sin (q*r) sin (PI*r/Rmax) ! S (q)= delta(a,b) + sqrt(x * x ) *4*PI*rho* / dr r² (g (r) - go ) ----------- * --------------- ! ab a b 0 ab ab (q*r) PI*r/Rmax ! ! with x = Nbre(a)/Nbre(tot) ! a USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NQ REAL (KIND=c_double), INTENT(IN) :: QMAX , QMIN DOUBLE PRECISION :: DQ DOUBLE PRECISION, DIMENSION (:), ALLOCATABLE :: SQTAB INTERFACE INTEGER FUNCTION recup_data (i, j) INTEGER, INTENT(IN) :: i, j END FUNCTION LOGICAL FUNCTION FZBT (NDQ, SQIJ) USE PARAMETERS INTEGER, INTENT(IN) :: NDQ DOUBLE PRECISION, DIMENSION(NDQ,NSP,NSP), INTENT(IN) :: SQIJ END FUNCTION END INTERFACE NUMBER_OF_QMOD = NQ TOTAL_DENSITY = dble(NA)/MEANVOL if (allocated(Q_POINT)) deallocate(Q_POINT) allocate(Q_POINT(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_q"//CHAR(0), "Table: Q_POINT"//CHAR(0)) s_of_q = 0 goto 001 endif if (allocated(S)) deallocate(S) allocate(S(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_q"//CHAR(0), "Table: S"//CHAR(0)) s_of_q = 0 goto 001 endif if (allocated(XS)) deallocate(XS) allocate(XS(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_q"//CHAR(0), "Table: XS"//CHAR(0)) s_of_q = 0 goto 001 endif if (allocated(Sij)) deallocate(Sij) allocate(Sij(NQ,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_q"//CHAR(0), "Table: Sij"//CHAR(0)) s_of_q = 0 goto 001 endif ! 'QMIN' is minimum q modulus accessible considering the analysed ! lattice ie. the minimum modulus of the reciprocal cell vectors, DQ=((QMAX-QMIN)/dble(NQ)) S(:)=0.0d0 XS(:)=0.0d0 Q_POINT(:)=0.0d0 do i=1, NQ Q_POINT(i)= dble(i-1)*DQ+QMIN enddo Sij(:,:,:)=0.0d0 j=0 if (recup_data (j, IDGR) .ne. 1) then s_of_q = 0 goto 001 endif j=j+8 if (recup_data (j, IDGR) .ne. 1) then s_of_q = 0 goto 001 endif j=j+8 do o=1, NSP do p=1, NSP if (recup_data (j, IDGR) .ne. 1) then s_of_q = 0 goto 001 endif j=j+5 enddo enddo if (.not. FZBT (NQ, Sij)) then s_of_q = 0 goto 001 endif if (allocated(SQTAB)) deallocate(SQTAB) allocate(SQTAB(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_q"//CHAR(0), "Table: SQTAB"//CHAR(0)) s_of_q = 0 goto 001 endif l=0 do k=1, NQ SQTAB(k)= S(k) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 do k=1, NQ SQTAB(k)= (S(k)-1.0)*Q_POINT(k) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 do k=1, NQ SQTAB(k)= XS(k) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 do k=1, NQ SQTAB(k)= (XS(k)-1.0)*Q_POINT(k) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 do i=1, NSP do j=1, NSP do k=1, NQ SQTAB(k)= Sij(k,i,j) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 enddo enddo do i=1, NSP do j=1, NSP do k=1, NQ SQTAB(k)= FZSij(k,i,j) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 enddo enddo if (NSP .eq. 2) then do i=1, 4 do j=1, NQ SQTAB(j)= BTij(j,i) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 enddo endif s_of_q = 1 001 continue if (allocated(SQTAB)) deallocate(SQTAB) if (allocated(Q_POINT)) deallocate(Q_POINT) if (allocated(Sij)) deallocate(Sij) if (allocated(S)) deallocate(S) if (allocated(XS)) deallocate(XS) if (allocated(FZSij)) deallocate(FZSij) if (allocated(BTij)) deallocate(BTij) END FUNCTION INTEGER (KIND=c_int) FUNCTION send_gr (IC, VAL, DR, RDATA, GDATA) BIND (C,NAME='send_gr_') USE PARAMETERS INTEGER (KIND=c_int), INTENT(IN) :: IC, VAL REAL (KIND=c_double), INTENT(IN) :: DR REAL (KIND=c_double), DIMENSION(VAL), INTENT(IN) :: RDATA, GDATA DOUBLE PRECISION :: Hcap1, Hcap2, Vcap INTEGER :: rinit if (allocated(SHELL_VOL)) deallocate(SHELL_VOL) allocate(SHELL_VOL(VAL+1), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: send_gr"//CHAR(0), "Table: SHELL_VOL"//CHAR(0)) send_gr = 0 goto 001 endif do i=1, VAL SHELL_VOL(i) = 0.0d0 SHELL_VOL(i) = 4.0d0*PI*((RDATA(i)+DR)**3 - (RDATA(i)**3))/3 ! To take into account the atoms between a/2 and a srqt(3)/2 ! We need the small volume they can be found in. if (OVERALL_CUBIC .and. RDATA(i)+DR.gt.MBOX) then Hcap1=RDATA(i)+DR-MBOX if (RDATA(i) .le. MBOX) then Hcap2=0.0d0 else Hcap2=RDATA(i)-MBOX endif Vcap=Hcap1**2*(3*RDATA(i) - Hcap1) - Hcap2**2*(3*RDATA(i) - Hcap2) Vcap=Vcap*PI*2 SHELL_VOL(i)=SHELL_VOL(i)-Vcap endif enddo j=IC if (j > 8) then m=j-16 m=m/5 k=m/NSP+1 l=m-(k-1)*NSP+1 endif rinit = 1 if (RDATA(1) .eq. 0.0) rinit = 2 Rmax = RDATA(VAL) do i=1, NUMBER_OF_QMOD do n=rinit, VAL Phi = Q_POINT(i)*RDATA(n) Fact_Rmax = PI*RDATA(n)/Rmax ! Sinus_Fact_Rmax = sin(Fact_Rmax)/Fact_Rmax Sinus_phi = sin(Phi)/Phi if (j .eq. 0) then S(i) = S(i) + SHELL_VOL(n)*(GDATA(n) - 1)*Sinus_phi!*Sinus_Fact_Rmax else if (j .eq. 8) then XS(i) = XS(i) + SHELL_VOL(n)*(GDATA(n) - 1)*Sinus_phi else Sij(i,k,l) = Sij(i,k,l) + SHELL_VOL(n)*(GDATA(n) - 1)*Sinus_phi!*Sinus_Fact_Rmax endif enddo if (j .eq. 0) then S(i) = 1.0d0 + S(i)*TOTAL_DENSITY else if (j .eq. 8) then XS(i) = 1.0d0 + XS(i)*TOTAL_DENSITY else if (l .eq. k) then Sij(i,k,l) = 1.0d0 + Xi(l)*Sij(i,k,l)*TOTAL_DENSITY else Sij(i,k,l) = sqrt(Xi(k)*Xi(l))*Sij(i,k,l)*TOTAL_DENSITY endif endif enddo send_gr = 1 001 continue if (allocated(SHELL_VOL)) deallocate(SHELL_VOL) END FUNCTION atomes_1.3.1/src/fortran/rings_ogl.F900000664000175000017500000001647115212624223017223 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file rings_ogl.F90 !! @short Send ring statistics data to C for OpenGL rendering !! @author Sébastien Le Roux INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA) :: RING_LIST INTEGER, DIMENSION(:), ALLOCATABLE :: RING_ID INTEGER :: RAA, RAB, RAC, RAD, RAE RAB=0 do RAA=3, TAILLR if (NRI(RAA,STEP) > 0) then RAB=RAB+1 call allocate_all_rings (IDSEARCH, STEP-1, RAA, NRI(RAA,STEP)) endif enddo do RAA=1, NA do RAB=3, TAILLR RAC = 0 do RAD=1, NUMA RING_LIST(RAD) = 0 enddo do RAD=1, NRI(RAB,STEP) do RAE=1, RAB if (RSAVED(RAB,RAD,RAE) .eq. RAA) then RAC=RAC+1 RING_LIST(RAC) = RAD goto 001 endif enddo 001 continue enddo if (allocated(RING_ID)) deallocate(RING_ID) allocate(RING_ID(RAC), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL"//CHAR(0), "Table: RING_ID (1)"//CHAR(0)) RINGS_TO_OGL = 0 goto 002 endif do RAD=1, RAC RING_ID(RAD) = RING_LIST(RAD) enddo !write (6, '("Sending atom/rings data:: step= ",i1,", at= ",i4," ring= ",i2,", size= ",i2,", num= ",i4)') STEP-1, RAA-1, IDSEARCH, RAB, RAC if (RAC > 0) call send_atom_rings_id_opengl (STEP-1, RAA-1, IDSEARCH, RAB-1, RAC, RING_ID) enddo enddo do RAA=3, TAILLR if (allocated(RING_ID)) deallocate(RING_ID) allocate(RING_ID(RAA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL"//CHAR(0), "Table: RING_ID (2)"//CHAR(0)) RINGS_TO_OGL = 0 goto 002 endif do RAB=1, NRI(RAA,STEP) do RAC=1, RAA RING_ID(RAC) = OSAVED(RAA,RAB,RAC) enddo call send_rings_opengl (IDSEARCH, STEP-1, RAA-1, RAB-1, RING_ID) enddo enddo RINGS_TO_OGL = 1 if (allocated(RING_ID)) deallocate(RING_ID) 002 continue END FUNCTION INTEGER FUNCTION RINGS_TO_OGL_BIS (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA) :: RING_LIST INTEGER, DIMENSION(:), ALLOCATABLE :: RING_ID INTEGER :: RAA, RAB, RAC, RAD, RAE do RAA=3, TAILLR if (NRI(RAA) > 0) call allocate_all_rings (IDSEARCH, STEP-1, RAA, NRI(RAA)) enddo do RAA=1, NA do RAB=3, TAILLR RAC = 0 do RAD=1, NUMA RING_LIST(RAD) = 0 enddo do RAD=1, NRI(RAB) do RAE=1, RAB if (RSAVED(RAB,RAD,RAE) .eq. RAA) then RAC=RAC+1 RING_LIST(RAC) = RAD goto 001 endif enddo 001 continue enddo if (allocated(RING_ID)) deallocate(RING_ID) allocate(RING_ID(RAC), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL_BIS"//CHAR(0), "Table: RING_ID (1)"//CHAR(0)) RINGS_TO_OGL_BIS = 0 goto 002 endif do RAD=1, RAC RING_ID(RAD) = RING_LIST(RAD) enddo !write (6, '("Sending atom/rings data:: step= ",i1,", at= ",i4," ring= ",i2,", size= ",i2,", num= ",i4)') STEP-1, RAA-1, IDSEARCH, RAB, RAC if (RAC > 0) call send_atom_rings_id_opengl (STEP-1, RAA-1, IDSEARCH, RAB, RAC, RING_ID) enddo enddo do RAA=3, TAILLR if (allocated(RING_ID)) deallocate(RING_ID) allocate(RING_ID(RAA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL_BIS"//CHAR(0), "Table: RING_ID (2)"//CHAR(0)) RINGS_TO_OGL_BIS = 0 goto 002 endif do RAB=1, NRI(RAA) do RAC=1, RAA RING_ID(RAC) = OSAVED(RAA,RAB,RAC) enddo call send_rings_opengl (IDSEARCH, STEP-1, RAA, RAB-1, RING_ID) enddo enddo RINGS_TO_OGL_BIS = 1 if (allocated(RING_ID)) deallocate(RING_ID) 002 continue END FUNCTION INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI INTEGER, DIMENSION(:), ALLOCATABLE :: RING_ID, RING_JD if (allocated(RING_ID)) deallocate(RING_ID) allocate(RING_ID(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL_MENU"//CHAR(0), "Table: RING_ID "//CHAR(0)) RINGS_TO_OGL_MENU = 0 goto 001 endif k = 0 do i=1, TAILLR RING_ID(i) = 0 do j=1, NS RING_ID(i) = RING_ID(i) + NRI(i,j) enddo if (RING_ID(i) > 0) then k = k + 1 endif enddo if (allocated(RING_JD)) deallocate(RING_JD) allocate(RING_JD(k), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL_MENU"//CHAR(0), "Table: RING_JD "//CHAR(0)) RINGS_TO_OGL_MENU = 0 goto 001 endif k = 0 do i=1, TAILLR if (RING_ID(i) > 0) then k = k + 1 RING_JD(k) = i endif enddo call send_coord_opengl (4+IDSEARCH, 1, 0, 0, k, k) call init_menurings (4+IDSEARCH, IDSEARCH, k, RING_JD, 1) if (allocated(RING_ID)) deallocate(RING_ID) if (allocated(RING_JD)) deallocate(RING_JD) RINGS_TO_OGL_MENU = 1 001 continue END FUNCTION INTEGER FUNCTION RINGS_TO_OGL_M (IDSEARCH) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(:), ALLOCATABLE :: RING_ID, RING_JD if (allocated(RING_ID)) deallocate(RING_ID) allocate(RING_ID(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL_MENU"//CHAR(0), "Table: RING_ID "//CHAR(0)) RINGS_TO_OGL_M = 0 goto 001 endif k = 0 do i=1, TAILLR RING_ID(i) = 0 do j=1, NS RING_ID(i) = RING_ID(i) + NRING(i,j) enddo if (RING_ID(i) > 0) then k = k + 1 endif enddo write (6, *) "k= ",k if (allocated(RING_JD)) deallocate(RING_JD) allocate(RING_JD(k), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL_MENU"//CHAR(0), "Table: RING_JD "//CHAR(0)) RINGS_TO_OGL_M = 0 goto 001 endif k = 0 do i=1, TAILLR if (RING_ID(i) > 0) then k = k + 1 RING_JD(k) = i endif enddo call send_coord_opengl (4+IDSEARCH, 1, 0, 0, k, k) call init_menurings (4+IDSEARCH, IDSEARCH, k, RING_JD, 1) if (allocated(RING_ID)) deallocate(RING_ID) if (allocated(RING_JD)) deallocate(RING_JD) RINGS_TO_OGL_M = 1 001 continue END FUNCTION atomes_1.3.1/src/fortran/dmtx.F900000664000175000017500000013722415212624223016214 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file dmtx.F90 !! @short Distance matrix calculation !! @author Sébastien Le Roux SUBROUTINE PRINT_THIS_PIXEL (TPS, TPIX, PIXL, pix, atoms) USE PARAMETERS IMPLICIT NONE TYPE (PIXEL), DIMENSION(TPS), INTENT(IN) :: TPIX TYPE (PIXEL), INTENT(IN) :: PIXL LOGICAL, INTENT(IN) :: atoms INTEGER, INTENT(IN) :: TPS, pix INTEGER :: PA, PB write (6, '("Pixel= ",i4)') pix do PA=1, PIXL%NEIGHBOR PB = PIXL%IDNEIGH(PA) if (atoms) then write (6, '(" N(",i4,")= ",i10," contains: ",i4," atom(s)")') PA, PIXL%IDNEIGH(PA), TPIX(PB)%ATOMS else write (6, '(" N(",i4,")= ",i10)') PA, PIXL%IDNEIGH(PA) endif enddo write (6, *) if (atoms) then do PA=1, PIXL%ATOMS write (6, '(" At(",i4,")= ",i10)') PA, PIXL%ATOM_ID(PA) enddo write (6, *) endif END SUBROUTINE SUBROUTINE SET_SHIFT (shift, ai, bi, ci, npa, npb, npc, nab, abc) IMPLICIT NONE INTEGER, DIMENSION(3,3,3), INTENT(INOUT) :: shift INTEGER, INTENT(IN) :: ai, bi, ci INTEGER, INTENT(IN) :: npa, npb, npc INTEGER, INTENT(IN) :: nab, abc ! Standard pixel positions: ! Lower level !shift(1,1,1) = nab+npa+1 !shift(1,1,2) = nab+npa !shift(1,1,3) = nab+npa-1 !shift(1,2,1) = nab+1 !shift(1,2,2) = nab !shift(1,2,3) = nab-1 !shift(1,3,1) = nab-npa+1 !shift(1,3,2) = nab-npa !shift(1,3,3) = nab-npa-1 ! Same level !shift(2,1,1) = npa+1 !shift(2,1,2) = npa !shift(2,1,3) = npa-1 !shift(2,2,1) = 1 !shift(2,2,2) = 0 !shift(2,2,3) = -1 !shift(2,3,1) = -npa+1 !shift(2,3,2) = -npa !shift(2,3,3) = -npa-1 ! Higher level !shift(3,1,1) = npa+1-nab !shift(3,1,2) = npa-nab !shift(3,1,3) = npa-1-nab !shift(3,2,1) = 1-nab !shift(3,2,2) = -nab !shift(3,2,3) = -1-nab !shift(3,3,1) = -npa+1-nab !shift(3,3,2) = -npa-nab !shift(3,3,3) = -npa-1-nab ! The shift is to compensate PBC if (ai .eq. 1) then shift (1,:,:) = npa else if (ai .eq. npa) then shift (3,:,:) = - npa endif if (bi .eq. 1) then shift (:,1,:) = shift (:,1,:) + nab else if (bi .eq. npb) then shift (:,3,:) = shift (:,3,:) - nab endif if (ci .eq. 1) then shift (:,:,1) = shift (:,:,1) + abc else if (ci .eq. npc) then shift (:,:,3) = shift (:,:,3) - abc endif END SUBROUTINE INTEGER FUNCTION GETNBX(NP, NPS) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: NP, NPS INTEGER :: PIA, PIB, PIC, PID INTEGER :: TPIXD, ADAPT_CUT DOUBLE PRECISION :: ICUT, INID DOUBLE PRECISION :: MPSIZE DOUBLE PRECISION :: NEW_MPSIZE DOUBLE PRECISION :: TARGETDP DOUBLE PRECISION :: RHONUM INTEGER :: MEMOID if (.not.PBC) then do PIA=1, 3 pmin(PIA)=FULLPOS(1,PIA,1) pmax(PIA)=pmin(PIA) enddo do PIA=1, NPS if (PIA.eq.1) then PID=2 else PID=1 endif do PIB=PID, NP do PIC=1, 3 pmin(PIC) = min(FULLPOS(PIB,PIC,PIA),pmin(PIC)) pmax(PIC) = max(FULLPOS(PIB,PIC,PIA),pmax(PIC)) enddo enddo enddo do PIA=1, 3 pmax(PIA) = pmax(PIA) - pmin(PIA) enddo else pmax(:) = 0.0d0 do PIB=1, NCELLS do PIA=1, 3 pmax(PIA) = max(pmax(PIA), THE_BOX(PIB)%modv(PIA)) enddo enddo do PIA=1, 3 pmin(PIA) = - pmax(PIA)/2.0 enddo endif #ifdef DEBUG write (6, '("pmin:: x= ",f15.10,", y= ",f15.10,", z= ",f15.10)') pmin(1), pmin(2), pmin(3) write (6, '("pmax:: x= ",f15.10,", y= ",f15.10,", z= ",f15.10)') pmax(1), pmax(2), pmax(3) #endif ICUT=0.0 do PIA=1, NSP do PIB=1, NSP ICUT=max(ICUT,Gr_TMP(PIA,PIB)) enddo enddo ICUT = sqrt(ICUT) ICUT = ICUT + 1.0d0 ! The pixel size must be larger than the cutoff ! If the system is large with a low density the pixel box can be too big in number of pixels, ! and it is not possible to allocate the required memory. ! Therefore it is required to increase the cutoff slightly to reduce the number of pixels. ! We need to look into the density of atoms per pixel, good target values range between 1.5 and 2.0. ! With PBC this works providing that you do not have a large box that contains an isolated molecule, ! That is an extremely low number density, thus we need to check that as well. TARGETDP=1.85d0 MPSIZE=1.0d0 ! Always adjust cutoff if periodicity is not applied ADAPT_CUT=2 ! Number density RHONUM=NP do PIA=1, 3 RHONUM=RHONUM/pmax(PIA) enddo if (RHONUM.gt.0.01) ADAPT_CUT=1 do TPIXD=1, ADAPT_CUT ! MPSIZE is the modifier CUTF=ICUT*MPSIZE CUTF=1.0d0/CUTF do PIA=1, 3 isize(PIA) = INT(abs(pmax(PIA))*CUTF) if (isize(PIA) .lt. 3) isize(PIA) = 1 enddo GETNBX = 1 if (CALC_PRINGS .and. PBC) then GETNBX = 5 do PIA=1, 3 pmin(PIA) = GETNBX*pmin(PIA) pmax(PIA) = GETNBX*pmax(PIA) enddo do PIA=1, 3 isize(PIA) = INT(abs(pmax(PIA))*CUTF) if (isize(PIA) .lt. 3) isize(PIA) = 1 enddo endif if (TPIXD .eq. 1) then PIA = isize(1)*isize(2)*isize(3) INID = NP INID = INID/PIA NEW_MPSIZE = (TARGETDP/INID)**(1.0/3.0) if (NEW_MPSIZE .gt. MPSIZE) then ! Adaptation only if the cutoff increases ! Otherwise we would increase the number of pixels MPSIZE = NEW_MPSIZE endif endif enddo #ifdef DEBUG write (6, '("NBX= ",i10)') GETNBX write (6, '("isize:: x= ",I4,", y= ",I4,", z= ",I4)') isize(1), isize(2), isize(3) MEMOID = GUESS_GRID_MEMORY_SIZE(isize(1)*isize(2)*isize(3)) write (6, '("Estimated memory required to store the entire pixel grid in Mb : ",f15.10)') MEMOID/1000000.0d0 write (6, '("Estimated memory required to store the entire pixel grid in Mo : ",f15.10)') MEMOID/8000000.0d0 CONTAINS INTEGER FUNCTION GUESS_GRID_MEMORY_SIZE (abc) INTEGER, INTENT(IN) :: abc allocate(THEPIX(1)) allocate(THEPIX(1)%ATOM_ID(50)) GUESS_GRID_MEMORY_SIZE = storage_size(THEPIX)*abc deallocate(THEPIX(1)%ATOM_ID) deallocate(THEPIX) END FUNCTION #endif END FUNCTION #ifdef DEBUG SUBROUTINE PRINT_PIXEL_GRID () USE PARAMETERS IMPLICIT NONE INTEGER :: pix, pid, cid, did, eid, ai, bi, ci INTEGER :: init_a, end_a INTEGER :: init_b, end_b INTEGER :: init_c, end_c INTEGER, DIMENSION(3) :: dim INTEGER, DIMENSION(3,3,3) :: shift LOGICAL :: boundary, keep_it dim(1) = -1 dim(2) = 0 dim(3) = 1 call pix_info (isize(1), isize(2), isize(3)) allocate(THEPIX(abc)) pix=1 do ci=1, isize(3) do bi=1, isize(2) do ai=1, isize(1) shift(:,:,:) = 0 if (PBC .and. .not.CALC_PRINGS) then call SET_SHIFT (shift, ai, bi, ci, isize(1), isize(2), isize(3), ab, abc) boundary=.false. else if (ai.eq.1 .or. ai.eq.isize(1)) boundary=.true. if (bi.eq.1 .or. bi.eq.isize(2)) boundary=.true. if (ci.eq.1 .or. ci.eq.isize(3)) boundary=.true. endif init_a = 1 end_a = 3 if (isize(1) .eq. 1) then init_a = 2 end_a = 2 endif init_b = 1 end_b = 3 if (isize(2) .eq. 1) then init_b = 2 end_b = 2 endif init_c = 1 end_c = 3 if (isize(3) .eq. 1) then init_c = 2 end_c = 2 endif pid = 0 do cid=init_a, end_a do did=init_b, end_b do eid=init_c, end_c keep_it=.true. if (boundary) then if (ai.eq.1 .and. cid.eq.1) then keep_it=.false. else if (ai.eq.isize(1) .and. cid.eq.3) then keep_it=.false. else if (bi.eq.1 .and. did.eq.1) then keep_it=.false. else if (bi.eq.isize(2) .and. did.eq.3) then keep_it=.false. else if (ci.eq.1 .and. eid.eq.1) then keep_it=.false. else if (ci.eq.isize(3) .and. eid.eq.3) then keep_it=.false. endif endif if (keep_it) then pid = pid + 1 THEPIX(pix)%IDNEIGH(pid) = pix + dim(cid) + dim(did) * isize(1) + dim(eid) * ab THEPIX(pix)%IDNEIGH(pid) = THEPIX(pix)%IDNEIGH(pid) + shift (cid,did,eid) endif enddo enddo enddo THEPIX(pix)%NEIGHBOR = pid call send_pix_info (pix-1, THEPIX(pix)%IDNEIGH, pid) ! call PRINT_THIS_PIXEL (abc, THEPIX, THEPIX(pix), pix, .false.) pix = pix + 1 enddo enddo enddo END SUBROUTINE #endif LOGICAL FUNCTION DISTMTX(NAN, LAN, LOOKNGB, UPNGB) ! ! Compute the distance matrix - neighbors table ! USE PARAMETERS USE MENDELEIEV #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER, INTENT(IN) :: NAN INTEGER, DIMENSION(NAN), INTENT(IN) :: LAN LOGICAL, INTENT(IN) :: LOOKNGB, UPNGB INTEGER :: SAT INTEGER :: RA, RB, RC, RD, RF, RG, RH, RI, RJ, RK, RL, RM INTEGER :: RN, RO, RP, RQ, RS, RT, RU, RV, RW, RX, RY, RZ INTEGER :: A_START, A_END INTEGER :: pix DOUBLE PRECISION :: Dik DOUBLE PRECISION :: MAXBD, MINBD INTEGER, DIMENSION(:), ALLOCATABLE :: BA, BB INTEGER, DIMENSION(:), ALLOCATABLE :: CA, CB DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: XC, YC, ZC LOGICAL :: CALCMAT=.false. ! Error message info ! LOGICAL :: TOOM=.false. INTEGER :: TOOI LOGICAL :: PIXR=.false. INTEGER :: POUT ! LOGICAL :: IS_CLONE, boundary, keep_it INTEGER, DIMENSION(3) :: pixpos DOUBLE PRECISION, DIMENSION(3) :: XYZ, UVW INTEGER :: pid, cid, did, eid, fid, ai, bi, ci INTEGER :: init_a, end_a INTEGER :: init_b, end_b INTEGER :: init_c, end_c INTEGER, DIMENSION(3) :: dim = (/-1, 0, 1/) INTEGER, DIMENSION(3,3,3) :: shift #ifdef OPENMP INTEGER :: NUMTH INTEGER :: THREAD_NUM INTEGER :: ATOM_START, ATOM_END INTEGER, DIMENSION(:), ALLOCATABLE :: ATPIX LOGICAL :: DOATOMS #endif INTERFACE INTEGER FUNCTION GETNBX (NP, NPS) INTEGER, INTENT(IN) :: NP, NPS END FUNCTION LOGICAL FUNCTION dvtbox (ST, NAS, NAT, NPOS) INTEGER, INTENT(IN) :: ST, NAS, NAT DOUBLE PRECISION, DIMENSION(NAT,3), INTENT(INOUT) :: NPOS END FUNCTION #ifdef OPENMP INTEGER FUNCTION GET_THREAD_START (NOBJ, NTHREADS, THREAD_ID) INTEGER, INTENT(IN) :: NOBJ, NTHREADS, THREAD_ID END FUNCTION INTEGER FUNCTION GET_THREAD_END (NOBJ, NTHREADS, THREAD_ID) INTEGER, INTENT(IN) :: NOBJ, NTHREADS, THREAD_ID END FUNCTION #endif DOUBLE PRECISION FUNCTION CALCDIJ (R12, AT1, AT2, STEP_1, STEP_2, SID) USE PARAMETERS DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION DOUBLE PRECISION FUNCTION SPHERES_CAPS_VOLUMES (DAB, RAP, RBP) DOUBLE PRECISION, INTENT(IN) :: DAB, RAP, RBP END FUNCTION END INTERFACE #ifdef DEBUG write (6, '("In DMTX:: LOOKNGB= ",L1, ", NOHOM= ",L1," PBC= ",L1,", CUBIC= ",L1)') LOOKNGB, NOHP, PBC, OVERALL_CUBIC #endif if (allocated(Gr_TMP)) deallocate(Gr_TMP) allocate(Gr_TMP(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VOISJ" ALC=.true. DISTMTX=.false. goto 001 endif do i=1, NSP do j=1, NSP if (Gr_CUT(i,j) .gt. Gr_cutoff) then Gr_TMP(i,j)=Gr_cutoff else Gr_TMP(i,j)=Gr_CUT(i,j) endif if (.not.LOOKNGB) Gr_TMP(i,j) = Gr_TMP(i,j) + 50.0 enddo enddo NBX = GETNBX (NAN, NS) if (PBC) then NNA = NBX**3*NAN else NNA = NAN endif if (LOOKNGB) then if (allocated(VOISJ)) deallocate(VOISJ) allocate(VOISJ(MAXN,NNA,NS), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VOISJ" ALC=.true. DISTMTX=.false. goto 001 endif if (allocated(CONTJ)) deallocate(CONTJ) allocate(CONTJ(NNA,NS), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CONTJ" ALC=.true. DISTMTX=.false. goto 001 endif CONTJ(:,:)=0 VOISJ(:,:,:)=0 endif if (LOOKNGB) then MAXBD=0.0d0 MINBD=10.0d0 endif if (CALC_PRINGS) then A_START = 1 A_END = NNA else A_START = NAN *(NBX**3 - 1)/2 + 1 A_END = A_START + NAN - 1 endif ab = isize(1)*isize(2) abc = ab*isize(3) #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. TOOM=.false. #ifdef DEBUG call PRINT_PIXEL_GRID () #endif if (DOATOMS) then ! OpemMP on Atoms if (NAN.lt.NUMTH) NUMTH=NAN DISTMTX=.true. if (NBX.gt.1) then allocate(POA(NNA,3), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="POA" ALC=.true. DISTMTX=.false. goto 001 endif endif do SAT=1, NS if (NBX.gt.1) then if (.not.dvtbox(SAT, NA, NNA, POA)) then DISTMTX=.false. goto 001 endif endif if (allocated(THEPIX)) deallocate(THEPIX) allocate(THEPIX(abc), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THEPIX" ALC=.true. DISTMTX = .false. goto 001 endif if (allocated(ATPIX)) deallocate(ATPIX) allocate(ATPIX(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ATPIX" ALC=.true. DISTMTX = .false. goto 001 endif RA = INT(MAXN*2.5) ! 1) LOOKNGB: "RA" is the number of atom(s) in one pixel ! with MAXN = 20, the '50' value seems high enough ! to ensure to catch every atom in the pixel ! this is ok providing that no funny cutoff is used ! 2) .not.LOOKNGB: looking for tetrahedra, requires larger value: if (.not.LOOKNGB) RA = MAXN*10 if (.not.LOOKNGB .or. abc .le. 5) RA = min(RA*5, NNA) do RB=1, abc THEPIX(RB)%ATOMS=0 THEPIX(RB)%TOCHECK=.false. THEPIX(RB)%CHECKED=.false. allocate(THEPIX(RB)%ATOM_ID(RA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THEPIX%ATOM_ID" ALC=.true. DISTMTX = .false. goto 001 endif THEPIX(RB)%IDNEIGH(:) = 0 THEPIX(RB)%ATOM_ID(:) = 0 enddo do RA=1, NNA if (.not. PBC) then do RB=1, 3 if (isize(RB) .eq. 1) then pixpos(RB) = 0 else pixpos(RB) = INT((FULLPOS(RA,RB,SAT) - pmin(RB))*CUTF) if (pixpos(RB) .eq. isize(RB)) pixpos(RB) = pixpos(RB)-1 endif enddo else if (NBX .gt. 1) then if (NCELLS.gt.1) then XYZ = MATMUL(POA(RA,:), THE_BOX(SAT)%carttofrac/NBX) else XYZ = MATMUL(POA(RA,:), THE_BOX(1)%carttofrac/NBX) endif else if (NCELLS.gt.1) then XYZ = MATMUL(FULLPOS(RA,:,SAT), THE_BOX(SAT)%carttofrac) else XYZ = MATMUL(FULLPOS(RA,:,SAT), THE_BOX(1)%carttofrac) endif endif do RB=1, 3 UVW(RB) = XYZ(RB) - floor(XYZ(RB)) pixpos(RB) = INT(UVW(RB)*isize(RB)) ! if (pixpos(RD) .eq. isize(RD)) pixpos(RD) = pixpos(RD)-1 enddo endif pix = pixpos(1) + pixpos(2)*isize(1) + pixpos(3)*ab + 1 if (pix.gt.abc .or. pix.le.0) then write (6, '("Thread(id)= ",i4,", MD step= ",i8)') THREAD_NUM, SAT if (NBX .gt. 1) then write (6, '("at= ",i7,", pos(x)= ",f15.10,", pos(y)= ",f15.10,", pos(z)= ",f15.10)') RA, POA(RA,:) else write (6, '("at= ",i7,", pos(x)= ",f15.10,", pos(y)= ",f15.10,", pos(z)= ",f15.10)') RA, FULLPOS(RA,:,SAT) endif if (PBC) then write (6, '("at= ",i7,", fra(x)= ",f15.10,", fra(y)= ",f15.10,", fra(z)= ",f15.10)') RA, XYZ write (6, '("at= ",i7,", cor(x)= ",f15.10,", cor(y)= ",f15.10,", cor(z)= ",f15.10)') RA, UVW endif write (6, '("at= ",i7,", pixpos(x)= ",i4,", pixpos(y)= ",i4,", pixpos(z)= ",i4)') RA, pixpos write (6, '("at= ",i7,", pixpos= ",i10)') RA, pix PIXR=.true. POUT=pix DISTMTX=.false. goto 001 else if ((PBC .and. RA.ge.A_START .and. RA.le.A_END) .or. .not.PBC) then if (.not.THEPIX(pix)%TOCHECK) then ai = pixpos(1) + 1 bi = pixpos(2) + 1 ci = pixpos(3) + 1 pid = 0 shift(:,:,:) = 0 boundary=.false. if (PBC .and. .not.CALC_PRINGS) then call SET_SHIFT (shift, ai, bi, ci, isize(1), isize(2), isize(3), ab, abc) else if (ai.eq.1 .or. ai.eq.isize(1)) boundary=.true. if (bi.eq.1 .or. bi.eq.isize(2)) boundary=.true. if (ci.eq.1 .or. ci.eq.isize(3)) boundary=.true. endif init_a = 1 end_a = 3 if (isize(1) .eq. 1) then init_a = 2 end_a = 2 endif init_b = 1 end_b = 3 if (isize(2) .eq. 1) then init_b = 2 end_b = 2 endif init_c = 1 end_c = 3 if (isize(3) .eq. 1) then init_c = 2 end_c = 2 endif do cid=init_a, end_a do did=init_b, end_b do eid=init_c, end_c keep_it=.true. if (boundary) then if (ai.eq.1 .and. cid.eq.1) then keep_it=.false. else if (ai.eq.isize(1) .and. cid.eq.3) then keep_it=.false. else if (bi.eq.1 .and. did.eq.1) then keep_it=.false. else if (bi.eq.isize(2) .and. did.eq.3) then keep_it=.false. else if (ci.eq.1 .and. eid.eq.1) then keep_it=.false. else if (ci.eq.isize(3) .and. eid.eq.3) then keep_it=.false. endif endif if (keep_it) then pid = pid+1 THEPIX(pix)%IDNEIGH(pid) = pix + dim(cid) + dim(did) * isize(1) + dim(eid) * ab + shift (cid,did,eid) endif enddo enddo enddo THEPIX(pix)%NEIGHBOR = pid endif THEPIX(pix)%TOCHECK=.true. endif THEPIX(pix)%ATOMS = THEPIX(pix)%ATOMS + 1 THEPIX(pix)%ATOM_ID(THEPIX(pix)%ATOMS) = RA endif ATPIX(RA) = pix enddo RA = 0 RB = 0 !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(THREAD_NUM, ATOM_START, ATOM_END, & !$OMP& RC, RD, RF, RG, RH, RI, RJ, RK, RL, RM, & !$OMP& RN, RO, RP, RQ, RS, RT, RU, RV, RW, RX, RY, RZ, ERR, ai, bi, ci, & !$OMP& IS_CLONE, CALCMAT, Dij, Rij, Dik, BA, BB, CA, CB, XC, YC, ZC) & !$OMP& SHARED(NUMTH, SAT, NS, NA, NNA, NAN, LAN, NSP, LOOKNGB, UPNGB, DISTMTX, & !$OMP& NBX, PBC, THE_BOX, NCELLS, A_START, A_END, NOHP, MAXN, CUTF, & !$OMP& POA, FULLPOS, Gr_TMP, CALC_PRINGS, MAXBD, MINBD, CONTJ, VOISJ, RA, RB, & !$OMP& LA_COUNT, CORTA, CORNERA, EDGETA, EDGEA, DEFTA, DEFA, & !$OMP& ALC, ALC_TAB, TOOM, TOOI, THEPIX, ATPIX) THREAD_NUM = OMP_GET_THREAD_NUM () ATOM_START = GET_THREAD_START (NNA, NUMTH, THREAD_NUM) ATOM_END = GET_THREAD_END (NNA, NUMTH, THREAD_NUM) do RC=ATOM_START, ATOM_END RD = ATPIX(RC) RF = RC - (RC/NAN)*NAN if (RF .eq. 0) RF=NAN RG = LAN(RF) do RH=1, THEPIX(RD)%NEIGHBOR RI = THEPIX(RD)%IDNEIGH(RH) RJ = THEPIX(RI)%ATOMS do RK=1, RJ RL = THEPIX(RI)%ATOM_ID(RK) if (RL .ne. RC) then if ((RC.ge.A_START .and. RC.le.A_END) .or. (RL.ge.A_START .and. RL.le.A_END)) then RM = RL - (RL/NAN)*NAN if (RM .eq. 0) RM=NAN RN = LAN(RM) if (LOOKNGB) then if (.not.PBC .or. NBX.gt.1) then if (((RC.ge.A_START .and. RC.le.A_END) .and. (RL.ge.A_START .and. RL.le.A_END)) .or. .not.PBC) then IS_CLONE=.false. else IS_CLONE=.true. endif else IS_CLONE=.false. endif if (RG.ne.RN .or. .not.NOHP) then CALCMAT=.true. else CALCMAT=.false. endif if (CALCMAT) then Dij=0.0d0 if (NBX.gt.1) then do RP=1,3 Rij(RP) = POA(RC,RP) - POA(RL,RP) Dij=Dij+Rij(RP)**2 enddo else Dik=0.0d0 do RP=1,3 Rij(RP) = FULLPOS(RF,RP,SAT) - FULLPOS(RM,RP,SAT) Dik=Dik+Rij(RP)**2 enddo if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij,RF,RM,SAT,SAT,SAT) else Dij = CALCDIJ (Rij,RF,RM,SAT,SAT,1) endif if (Dik-Dij .gt.0.01d0) then IS_CLONE=.true. endif endif if (Dij .le. Gr_TMP(RG,RN)) then !$OMP ATOMIC MAXBD=max(Dij,MAXBD) !$OMP ATOMIC MINBD=min(Dij,MINBD) if (CALC_PRINGS) then RP = RC RQ = RL else RP = RF RQ = RM endif CONTJ(RP,SAT)=CONTJ(RP,SAT)+1 if (CONTJ(RP,SAT) .gt. MAXN) then TOOM=.true. TOOI=RP DISTMTX=.false. goto 002 endif VOISJ(CONTJ(RP,SAT),RP,SAT)=RQ if (.not.CALC_PRINGS .and. UPNGB) then if (IS_CLONE) then VOISJ(CONTJ(RP,SAT),RP,SAT)=-RQ !$OMP ATOMIC RB = RB + 1 else !$OMP ATOMIC RA = RA + 1 endif endif endif endif else if (RG .eq. RN) then do RO=1, NSP if (LA_COUNT(RF,RO,SAT).eq.4 .and. CONTJ(RF,SAT).eq.4) then if (LA_COUNT(RM,RO,SAT).eq.4 .and. CONTJ(RM,SAT).eq.4) then RP=0 do RQ=1, 4 RS = VOISJ(RQ,RF,SAT) do RT=1, CONTJ(RS,SAT) if (VOISJ(RT,RS,SAT) .eq. RM) RP=RP+1 enddo enddo if (RP.eq.1) then !$OMP ATOMIC CORTA(RG,RO)=CORTA(RG,RO)+1 if (NS .gt. 1) then !$OMP ATOMIC CORNERA(RG,RO,SAT)=CORNERA(RG,RO,SAT)+1 endif elseif (RP.eq.2) then !$OMP ATOMIC EDGETA(RG,RO)=EDGETA(RG,RO)+1 if (NS .gt. 1) then !$OMP ATOMIC EDGEA(RG,RO,SAT)=EDGEA(RG,RO,SAT)+1 endif elseif (RP.ge.3) then !$OMP ATOMIC CORTA(RG,RO)=CORTA(RG,RO)+1 !$OMP ATOMIC EDGETA(RG,RO)=EDGETA(RG,RO)+1 !$OMP ATOMIC DEFTA(RG,RO)=DEFTA(RG,RO)+1 if (NS .gt. 1) then !$OMP ATOMIC CORNERA(RG,RO,SAT)=CORNERA(RG,RO,SAT)+1 !$OMP ATOMIC EDGEA(RG,RO,SAT)=EDGEA(RG,RO,SAT)+1 !$OMP ATOMIC DEFA(RG,RO,SAT)=DEFA(RG,RO,SAT)+1 endif endif endif endif enddo endif endif endif endif enddo enddo enddo 002 continue !$OMP END PARALLEL if (allocated(THEPIX)) then do RC=1, abc if (allocated(THEPIX(RC)%ATOM_ID)) deallocate(THEPIX(RC)%ATOM_ID) enddo deallocate(THEPIX) endif if (allocated(ATPIX)) deallocate(ATPIX) if (.not.DISTMTX) then goto 001 endif if (.not.LOOKNGB) then do RC=1, NSP do RD=1, NSP CORTA(RC,RD)=CORTA(RC,RD)/2 EDGETA(RC,RD)=EDGETA(RC,RD)/2 DEFTA(RC,RD)=DEFTA(RC,RD)/2 if (NS .gt. 1) then CORNERA(RC,RD,SAT)=CORNERA(RC,RD,SAT)/2 EDGEA(RC,RD,SAT)=EDGEA(RC,RD,SAT)/2 DEFA(RC,RD,SAT)=DEFA(RC,RD,SAT)/2 endif enddo enddo endif if (.not.CALC_PRINGS .and.UPNGB) then if (RA .gt. 0) then if (allocated(BA)) deallocate(BA) allocate(BA(RA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="BA" ALC=.true. DISTMTX=.false. goto 001 endif if (allocated(BB)) deallocate(BB) allocate(BB(RA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="BB" ALC=.true. DISTMTX=.false. goto 001 endif endif if (RB .gt. 0) then if (allocated(CA)) deallocate(CA) allocate(CA(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CA" ALC=.true. DISTMTX=.false. goto 001 endif if (allocated(CB)) deallocate(CB) allocate(CB(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CB" ALC=.true. DISTMTX=.false. goto 001 endif if (allocated(XC)) deallocate(XC) allocate(XC(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="XC" ALC=.true. DISTMTX=.false. goto 001 endif if (allocated(YC)) deallocate(YC) allocate(YC(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="YC" ALC=.true. DISTMTX=.false. goto 001 endif if (allocated(ZC)) deallocate(ZC) allocate(ZC(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ZC" ALC=.true. DISTMTX=.false. goto 001 endif endif if (RA.gt.0 .or. RB.gt.0) then RA=0 RB=0 do RC=1, NNA do RD=1, CONTJ(RC,SAT) RF = VOISJ(RD,RC,SAT) if (RF .gt. 0) then if (RF.gt.RC) then RA=RA+1 BA(RA) = RC BB(RA) = RF endif else VOISJ(RD,RC,SAT) = -RF RF=-RF if (RF.gt.RC) then RB=RB+1 CA(RB) = RC CB(RB) = RF if (NCELLS .gt. 1) then call CALCRIJ (RC,RF,SAT,SAT,SAT) else call CALCRIJ (RC,RF,SAT,SAT,1) endif XC(RB) = Rij(1) YC(RB) = Rij(2) ZC(RB) = Rij(3) endif endif enddo enddo endif call update_bonds (0, SAT-1, RA, BA, BB, XC, YC, ZC) call update_bonds (1, SAT-1, RB, CA, CB, XC, YC, ZC) do RC=1, NNA call update_atom_neighbors (SAT-1, RC-1, CONTJ(RC,SAT)) do RD=1, CONTJ(RC,SAT) call update_this_neighbor (SAT-1, RC-1, RD-1, VOISJ(RD,RC,SAT)) enddo enddo endif enddo ! En MD steps loop else ! OpemMP on MD steps DISTMTX=.true. !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(THEPIX, SAT, pix, pixpos, XYZ, UVW, shift, ai, bi, ci, & !$OMP& RA, RB, RC, RD, RF, RG, RH, RI, RJ, RK, RL, RM, & !$OMP& RN, RO, RP, RQ, RS, RT, RU, RV, RW, RX, RY, RZ, ERR, & !$OMP& IS_CLONE, CALCMAT, Dij, Rij, Dik, BA, BB, CA, CB, XC, YC, ZC, POA, & !$OMP& pid, cid, did, eid, fid, init_a, end_a, init_b, end_b, init_c, end_c, boundary, keep_it) & !$OMP& SHARED(NUMTH, NS, NA, NNA, NAN, LAN, NSP, LOOKNGB, UPNGB, DISTMTX, & !$OMP& NBX, PBC, THE_BOX, NCELLS, isize, pmin, pmax, abc, ab, A_START, A_END, NOHP, MAXN, CUTF, & !$OMP& FULLPOS, CONTJ, VOISJ, Gr_TMP, CALC_PRINGS, MAXBD, MINBD, & !$OMP& LA_COUNT, CORTA, CORNERA, EDGETA, EDGEA, DEFTA, DEFA, & !$OMP& ALC, ALC_TAB, TOOM, TOOI, PIXR, POUT, dim) #endif if (allocated(THEPIX)) deallocate(THEPIX) allocate(THEPIX(abc), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THEPIX" ALC=.true. DISTMTX = .false. #ifdef OPENMP goto 006 #else goto 001 #endif endif RA = INT(MAXN*2.5) ! 1) LOOKNGB: "RA" is the number of atom(s) in one pixel ! with MAXN = 20, the '50' value seems high enough ! to ensure to catch every atom in the pixel ! this is ok providing that no funny cutoff is used ! 2) .not.LOOKNGB: looking for tetrahedra, requires larger value: if (.not.LOOKNGB) RA = MAXN*10 if (.not.LOOKNGB .or. abc .le. 5) RA = min(RA*5, NNA) do RB=1, abc THEPIX(RB)%ATOMS=0 THEPIX(RB)%TOCHECK=.false. THEPIX(RB)%CHECKED=.false. allocate(THEPIX(RB)%ATOM_ID(RA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THEPIX%ATOM_ID" ALC=.true. DISTMTX = .false. #ifdef OPENMP goto 006 #else goto 001 #endif endif THEPIX(RB)%IDNEIGH(:) = 0 THEPIX(RB)%ATOM_ID(:) = 0 enddo #ifdef OPENMP !$OMP DO SCHEDULE(STATIC,NS/NUMTH) do SAT=1, NS if (.not.DISTMTX) goto 007 #else if (allocated(POA)) deallocate (POA) allocate(POA(NNA,3), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="POA" ALC=.true. DISTMTX=.false. goto 001 endif do SAT=1, NS #endif if (NBX.gt.1) then #ifdef OPENMP if (allocated(POA)) deallocate (POA) allocate(POA(NNA,3), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="POA" ALC=.true. DISTMTX=.false. goto 007 endif #endif if (.not.dvtbox(SAT, NA, NNA, POA)) then DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif endif ! Clean THEPIX for each and every MD step do RA=1, abc THEPIX(RA)%ATOMS=0 THEPIX(RA)%TOCHECK=.false. THEPIX(RA)%CHECKED=.false. THEPIX(RA)%IDNEIGH(:) = 0 THEPIX(RA)%ATOM_ID(:) = 0 enddo do RA=1, NNA if (.not. PBC) then do RB=1, 3 if (isize(RB) .eq. 1) then pixpos(RB) = 0 else pixpos(RB) = INT((FULLPOS(RA,RB,SAT) - pmin(RB))*CUTF) if (pixpos(RB) .eq. isize(RB)) pixpos(RB) = pixpos(RB)-1 endif enddo else if (NBX .gt. 1) then if (NCELLS.gt.1) then XYZ = MATMUL(POA(RA,:), THE_BOX(SAT)%carttofrac/NBX) else XYZ = MATMUL(POA(RA,:), THE_BOX(1)%carttofrac/NBX) endif else if (NCELLS.gt.1) then XYZ = MATMUL(FULLPOS(RA,:,SAT), THE_BOX(SAT)%carttofrac) else XYZ = MATMUL(FULLPOS(RA,:,SAT), THE_BOX(1)%carttofrac) endif endif do RB=1, 3 UVW(RB) = XYZ(RB) - floor(XYZ(RB)) pixpos(RB) = INT(UVW(RB)*isize(RB)) ! if (pixpos(RB) .eq. isize(RB)) pixpos(RB) = pixpos(RB)-1 enddo endif pix = pixpos(1) + pixpos(2)*isize(1) + pixpos(3)*ab + 1 if (pix.gt.abc .or. pix.le.0) then #ifdef OPENMP write (6, '("Thread(id)= ",i4,", MD step= ",i8)') OMP_GET_THREAD_NUM(), SAT #else write (6, '("MD step= ",i8)') SAT #endif if (NBX.gt.1) then write (6, '("at= ",i7,", pos(x)= ",f15.10,", pos(y)= ",f15.10,", pos(z)= ",f15.10)') RA, POA(RA,:) else write (6, '("at= ",i7,", pos(x)= ",f15.10,", pos(y)= ",f15.10,", pos(z)= ",f15.10)') RA, FULLPOS(RA,:,SAT) endif if (PBC) then write (6, '("at= ",i7,", fra(x)= ",f15.10,", fra(y)= ",f15.10,", fra(z)= ",f15.10)') RA, XYZ write (6, '("at= ",i7,", cor(x)= ",f15.10,", cor(y)= ",f15.10,", cor(z)= ",f15.10)') RA, UVW endif write (6, '("at= ",i7,", pixpos(x)= ",i4,", pixpos(y)= ",i4,", pixpos(z)= ",i4)') RA, pixpos write (6, '("at= ",i7,", pixpos= ",i10)') RA, pix PIXR=.true. POUT=pix DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif else if ((PBC .and. RA.ge.A_START .and. RA.le.A_END) .or. .not.PBC) then if (.not.THEPIX(pix)%TOCHECK) then dim(1) = -1 dim(2) = 0 dim(3) = 1 ai = pixpos(1) + 1 bi = pixpos(2) + 1 ci = pixpos(3) + 1 pid = 0 shift(:,:,:) = 0 boundary=.false. if (PBC .and. .not.CALC_PRINGS) then call SET_SHIFT (shift, ai, bi, ci, isize(1), isize(2), isize(3), ab, abc) else if (ai.eq.1 .or. ai.eq.isize(1)) boundary=.true. if (bi.eq.1 .or. bi.eq.isize(2)) boundary=.true. if (ci.eq.1 .or. ci.eq.isize(3)) boundary=.true. endif init_a = 1 end_a = 3 if (isize(1) .eq. 1) then init_a = 2 end_a = 2 endif init_b = 1 end_b = 3 if (isize(2) .eq. 1) then init_b = 2 end_b = 2 endif init_c = 1 end_c = 3 if (isize(3) .eq. 1) then init_c = 2 end_c = 2 endif do cid=init_a, end_a do did=init_b, end_b do eid=init_c, end_c keep_it=.true. if (boundary) then if (ai.eq.1 .and. cid.eq.1) then keep_it=.false. else if (ai.eq.isize(1) .and. cid.eq.3) then keep_it=.false. else if (bi.eq.1 .and. did.eq.1) then keep_it=.false. else if (bi.eq.isize(2) .and. did.eq.3) then keep_it=.false. else if (ci.eq.1 .and. eid.eq.1) then keep_it=.false. else if (ci.eq.isize(3) .and. eid.eq.3) then keep_it=.false. endif endif if (keep_it) then pid = pid+1 THEPIX(pix)%IDNEIGH(pid) = pix + dim(cid) + dim(did) * isize(1) + dim(eid) * ab + shift (cid,did,eid) endif enddo enddo enddo THEPIX(pix)%NEIGHBOR = pid endif THEPIX(pix)%TOCHECK=.true. endif THEPIX(pix)%ATOMS = THEPIX(pix)%ATOMS + 1 THEPIX(pix)%ATOM_ID(THEPIX(pix)%ATOMS) = RA endif enddo RA = 0 RB = 0 do RC=1, abc if (THEPIX(RC)%TOCHECK) then RD = THEPIX(RC)%ATOMS if (RD .gt. 0) then do RF=1, THEPIX(RC)%NEIGHBOR RG = THEPIX(RC)%IDNEIGH(RF) if (.not.THEPIX(RG)%CHECKED) then RH = THEPIX(RG)%ATOMS if (RH .gt. 0) then if (RC .eq. RG) then RI=1 else RI=0 endif do RJ=1, RD-RI RK = THEPIX(RC)%ATOM_ID(RJ) do RM=RI*RJ+1, RH RN = THEPIX(RG)%ATOM_ID(RM) if ((RK.ge.A_START .and. RK.le.A_END) .or. (RN.ge.A_START .and. RN.le.A_END)) then RP=RK - (RK/NAN)*NAN RQ=RN - (RN/NAN)*NAN if (RP .eq. 0) RP=NAN if (RQ .eq. 0) RQ=NAN if (RP .ne. RQ) then RL=LAN(RP) RO=LAN(RQ) if (LOOKNGB) then if (.not.PBC .or. NBX.gt.1) then if (((RK.ge.A_START .and. RK.le.A_END) .and. (RN.ge.A_START .and. RN.le.A_END)) .or. .not.PBC) then IS_CLONE=.false. else IS_CLONE=.true. endif else IS_CLONE=.false. endif if (RL.ne.RO .or. .not.NOHP) then CALCMAT=.true. else CALCMAT=.false. endif if (CALCMAT) then Dij=0.0d0 if (NBX.gt.1) then do RS=1,3 Rij(RS) = POA(RK,RS) - POA(RN,RS) Dij=Dij+Rij(RS)**2 enddo else Dik=0.0d0 do RS=1,3 Rij(RS) = FULLPOS(RP,RS,SAT) - FULLPOS(RQ,RS,SAT) Dik=Dik+Rij(RS)**2 enddo if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij,RP,RQ,SAT,SAT,SAT) else Dij = CALCDIJ (Rij,RP,RQ,SAT,SAT,1) endif if (Dik-Dij .gt.0.01d0) then IS_CLONE=.true. endif endif if (Dij .le. Gr_TMP(RL,RO)) then #ifdef OPENMP !$OMP ATOMIC #endif MAXBD=max(Dij,MAXBD) #ifdef OPENMP !$OMP ATOMIC #endif MINBD=min(Dij,MINBD) if (CALC_PRINGS) then RT = RK RU = RN else RT = RP RU = RQ endif CONTJ(RT,SAT)=CONTJ(RT,SAT)+1 if (CONTJ(RT,SAT) .gt. MAXN) then TOOM=.true. TOOI=RT DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif VOISJ(CONTJ(RT,SAT),RT,SAT)=RU CONTJ(RU,SAT)=CONTJ(RU,SAT)+1 if (CONTJ(RU,SAT) .gt. MAXN) then TOOM=.true. TOOI=RU DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif VOISJ(CONTJ(RU,SAT),RU,SAT)=RT if (.not.CALC_PRINGS .and. UPNGB) then if (IS_CLONE) then RB = RB + 1 VOISJ(CONTJ(RT,SAT),RT,SAT)=-RU VOISJ(CONTJ(RU,SAT),RU,SAT)=-RT else RA = RA + 1 endif endif endif endif else if (RL .eq. RO) then do RV=1, NSP if (LA_COUNT(RP,RV,SAT).eq.4 .and. CONTJ(RP,SAT).eq.4) then if (LA_COUNT(RQ,RV,SAT).eq.4 .and. CONTJ(RQ,SAT).eq.4) then RW=0 do RX=1, 4 RY = VOISJ(RX,RP,SAT) do RZ=1, CONTJ(RY,SAT) if (VOISJ(RZ,RY,SAT) .eq. RQ) RW=RW+1 enddo enddo if (RW.eq.1) then #ifdef OPENMP !$OMP ATOMIC #endif CORTA(RL,RV)=CORTA(RL,RV)+1 if (NS .gt. 1) CORNERA(RL,RV,SAT)=CORNERA(RL,RV,SAT)+1 elseif (RW.eq.2) then #ifdef OPENMP !$OMP ATOMIC #endif EDGETA(RL,RV)=EDGETA(RL,RV)+1 if (NS .gt. 1) EDGEA(RL,RV,SAT)=EDGEA(RL,RV,SAT)+1 elseif (RW.ge.3) then #ifdef OPENMP !$OMP ATOMIC #endif CORTA(RL,RV)=CORTA(RL,RV)+1 #ifdef OPENMP !$OMP ATOMIC #endif EDGETA(RL,RV)=EDGETA(RL,RV)+1 #ifdef OPENMP !$OMP ATOMIC #endif DEFTA(RL,RV)=DEFTA(RL,RV)+1 if (NS .gt. 1) then CORNERA(RL,RV,SAT)=CORNERA(RL,RV,SAT)+1 EDGEA(RL,RV,SAT)=EDGEA(RL,RV,SAT)+1 DEFA(RL,RV,SAT)=DEFA(RL,RV,SAT)+1 endif endif endif endif enddo endif endif endif endif enddo enddo endif endif enddo THEPIX(RC)%CHECKED=.true. endif endif enddo if (.not.CALC_PRINGS .and.UPNGB) then if (RA .gt. 0) then if (allocated(BA)) deallocate(BA) allocate(BA(RA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="BA" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif if (allocated(BB)) deallocate(BB) allocate(BB(RA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="BB" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif endif if (RB .gt. 0) then if (allocated(CA)) deallocate(CA) allocate(CA(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CA" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif if (allocated(CB)) deallocate(CB) allocate(CB(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CB" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif if (allocated(XC)) deallocate(XC) allocate(XC(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="XC" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif if (allocated(YC)) deallocate(YC) allocate(YC(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="YC" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif if (allocated(ZC)) deallocate(ZC) allocate(ZC(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ZC" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif endif if (RA.gt.0 .or. RB.gt.0) then RA=0 RB=0 do RC=1, NNA do RD=1, CONTJ(RC,SAT) RF = VOISJ(RD,RC,SAT) if (RF .gt. 0) then if (RF.gt.RC) then RA=RA+1 BA(RA) = RC BB(RA) = RF endif else VOISJ(RD,RC,SAT) = -RF RF=-RF if (RF.gt.RC) then RB=RB+1 CA(RB) = RC CB(RB) = RF if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij,RC,RF,SAT,SAT,SAT) else Dij = CALCDIJ (Rij,RC,RF,SAT,SAT,1) endif XC(RB) = Rij(1) YC(RB) = Rij(2) ZC(RB) = Rij(3) endif endif enddo enddo endif call update_bonds (0, SAT-1, RA, BA, BB, XC, YC, ZC) call update_bonds (1, SAT-1, RB, CA, CB, XC, YC, ZC) do RC=1, NNA call update_atom_neighbors (SAT-1, RC-1, CONTJ(RC,SAT)) do RD=1, CONTJ(RC,SAT) call update_this_neighbor (SAT-1, RC-1, RD-1, VOISJ(RD,RC,SAT)) enddo enddo endif #ifdef OPENMP 007 continue #endif enddo ! En MD steps loop #ifdef OPENMP !$OMP END DO NOWAIT 006 continue if (allocated(THEPIX)) then do RC=1, abc if (allocated(THEPIX(RC)%ATOM_ID)) deallocate(THEPIX(RC)%ATOM_ID) enddo deallocate(THEPIX) endif !$OMP END PARALLEL if (.not.DISTMTX) goto 001 endif #endif if (UPNGB) then MAXBD = sqrt(MAXBD) MINBD = sqrt(MINBD) if (MAXBD-MINBD .lt. 0.1) then MINBD = MINBD - 0.5; MAXBD = MAXBD + 0.5; endif call recup_dmin_dmax (MINBD, MAXBD) endif DISTMTX=.true. 001 continue if (TOOM) call TOOMUCH(TOOI) if (ALC) then call show_error ("Impossible to allocate memory !"//CHAR(0), & "Function: DMTX"//CHAR(0), CHAR(9)//"Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (PIXR) call PIXOUT (POUT) if (allocated(THEPIX)) then do RC=1, abc if (allocated(THEPIX(RC)%ATOM_ID)) deallocate(THEPIX(RC)%ATOM_ID) enddo deallocate(THEPIX) endif if (allocated(POA)) deallocate(POA) if (allocated(BA)) deallocate(BA) if (allocated(BB)) deallocate(BB) if (allocated(CA)) deallocate(CA) if (allocated(CB)) deallocate(CB) if (allocated(XC)) deallocate(XC) if (allocated(YC)) deallocate(YC) if (allocated(ZC)) deallocate(ZC) CONTAINS END FUNCTION SUBROUTINE PIXOUT (PIX) IMPLICIT NONE INTEGER, INTENT(IN) :: PIX CHARACTER (LEN=15) :: IDPIX call CHARINT(IDPIX, PIX) call show_error ("Pixel size error !"//CHAR(0), & CHAR(9)//"Pixel out of bound(s): "//IDPIX(2:LEN_TRIM(IDPIX))//CHAR(0), & "Function: DMTX"//CHAR(0)) END SUBROUTINE SUBROUTINE TOOMUCH(ATI) IMPLICIT NONE INTEGER, INTENT(IN) :: ATI CHARACTER (LEN=15) :: IDATI call CHARINT(IDATI, ATI) call show_error ("Too much neighbors for atom "//IDATI(2:LEN_TRIM(IDATI))//" (>20)"//CHAR(0), & "Please check:"//ACHAR(10)//CHAR(9)//" - The lattice parameters"//ACHAR(10) & //CHAR(9)//" - The bond cutoff(s)"//ACHAR(10)//CHAR(9)//" - The atomic coordinates"//CHAR(0), & "Function: DMTX"//CHAR(0)) END SUBROUTINE INTEGER (KIND=c_int) FUNCTION rundmtx (PRINGS, VNOHP, VUP) BIND (C,NAME='rundmtx_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: PRINGS, VNOHP, VUP LOGICAL :: DMTXOK=.false. LOGICAL :: UPNG INTERFACE LOGICAL FUNCTION DISTMTX(NAN, LAN, LOOKNGB, UPNGB) INTEGER, INTENT(IN) :: NAN INTEGER, DIMENSION(NAN), INTENT(IN) :: LAN LOGICAL, INTENT(IN) :: LOOKNGB, UPNGB END FUNCTION END INTERFACE CALC_PRINGS=.false. if (PRINGS .eq. 1) CALC_PRINGS=.true. NOHP=.false. if (VNOHP .eq. 1) NOHP=.true. UPNG=.false. if (VUP .eq. 1) UPNG=.true. DMTXOK = DISTMTX(NA, LOT, .true., UPNG) CALC_PRINGS=.false. if (.not. DMTXOK) then if (allocated(VOISJ)) deallocate(VOISJ) if (allocated(CONTJ)) deallocate(CONTJ) rundmtx=0 goto 001 endif rundmtx=1 001 continue END FUNCTION atomes_1.3.1/src/fortran/clean.F900000664000175000017500000000305015212624223016307 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file clean.F90 !! @short Clean up Fortran90 data !! @author Sébastien Le Roux #if defined (HAVE_CONFIG_H) # include #endif #include "version.h" SUBROUTINE profree () BIND (C,NAME='profree_') USE PARAMETERS IMPLICIT NONE ! deallocation of possibly remaining data if (allocated(FULLPOS)) deallocate(FULLPOS) if (allocated(TAB_OF_TYPE)) deallocate(TAB_OF_TYPE) if (allocated(LOT)) deallocate(LOT) if (allocated(NBSPBS)) deallocate(NBSPBS) if (allocated(TL)) deallocate(TL) if (allocated(ATOMID)) deallocate(ATOMID) if (allocated(MASS)) deallocate(MASS) if (allocated(RVDW)) deallocate(RVDW) if (allocated(Xi)) deallocate(Xi) if (allocated(Gr_CUT)) deallocate(Gr_CUT) if (allocated(NSCATTL)) deallocate(NSCATTL) if (allocated(XSCATTL)) deallocate(XSCATTL) END SUBROUTINE atomes_1.3.1/src/fortran/bonds.F900000664000175000017500000003736415212624223016351 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file bonds.F90 !! @short Bonding properties !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION bonding (scf, sbf, adv, bdist, bmin, delt_ij, sfil) BIND (C,NAME='bonding_') USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: scf, sbf, adv, bdist REAL (KIND=c_double), INTENT(IN) :: bmin, delt_ij CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: sfil INTEGER, DIMENSION(:), ALLOCATABLE :: GESP CHARACTER (LEN=scf) :: sfile DOUBLE PRECISION :: DBD DOUBLE PRECISION, DIMENSION(3) :: RBD #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif TYPE GEOMETRY INTEGER :: INDICE INTEGER :: COORD INTEGER :: NCOORD INTEGER, DIMENSION(:), ALLOCATABLE :: GEO TYPE (GEOMETRY), POINTER :: FIRST TYPE (GEOMETRY), POINTER :: LAST TYPE (GEOMETRY), POINTER :: NEXT TYPE (GEOMETRY), POINTER :: PREV END TYPE GEOMETRY TYPE(GEOMETRY), DIMENSION(:), POINTER :: GEOT, GEOP TYPE(GEOMETRY), POINTER :: GA INTERFACE LOGICAL FUNCTION ALLOCBONDS (alloc) !INTEGER, INTENT(IN) :: adv LOGICAL, INTENT(IN) :: alloc END FUNCTION LOGICAL FUNCTION ALLOCEDCO (alloc) LOGICAL, INTENT(IN) :: alloc END FUNCTION DOUBLE PRECISION FUNCTION CALCDIJ(R12, AT1, AT2, STEP_1, STEP_2, SID) DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION LOGICAL FUNCTION EESCS () END FUNCTION INTEGER FUNCTION MOLECULES() END FUNCTION END INTERFACE if (adv .eq. 1) then if (allocated(STATBD)) deallocate(STATBD) allocate(STATBD(NSP,NSP,0:bdist), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: STATBD"//CHAR(0)) bonding=0 goto 001 endif STATBD(:,:,:)=0 endif if (.not. ALLOCBONDS(.true.)) then bonding=0 goto 001 endif if (allocated(GESP)) deallocate(GESP) allocate(GESP(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: GESP"//CHAR(0)) bonding=0 goto 001 endif if (allocated(LT_GEOM)) deallocate(LT_GEOM) allocate(LT_GEOM(NSP,NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: LT_GEOM"//CHAR(0)) bonding=0 goto 001 endif LT_GEOM(:,:) = 0 allocate(GEOT(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Pointer: GEOT"//CHAR(0)) bonding=0 goto 001 endif allocate(GEOP(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Pointer: GEOP"//CHAR(0)) bonding=0 goto 001 endif allocate(GA, STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Pointer: GA"//CHAR(0)) bonding=0 goto 001 endif do i=1, NSP GEOT(i)%INDICE = 0 nullify(GEOT(i)%NEXT) nullify(GEOT(i)%PREV) nullify(GEOT(i)%FIRST) nullify(GEOT(i)%LAST) GEOP(i)%INDICE = 0 nullify(GEOP(i)%NEXT) nullify(GEOP(i)%PREV) nullify(GEOP(i)%FIRST) nullify(GEOP(i)%LAST) enddo ! Décompte des nombres de coordination ! Evaluation of the coordination numbers #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA do i=1, NS ! OpemMP on Atoms !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(j, l, k, m, n, o, p, DBD, RBD, GESP, GA) & !$OMP& SHARED(NUMTH, NS, i, NA, NCELLS, LOT, CONTJ, VOISJ, LA_COUNT, STATBD, adv, bmin, delt_ij) !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA k = LOT(j) l = CONTJ(j,i) do m=1, l n = VOISJ(m,j,i) o = LOT(n) LA_COUNT(j,o,i)=LA_COUNT(j,o,i)+1 if (adv .eq. 1) then if (NCELLS .gt. 1) then DBD = CALCDIJ (RBD, j, n, i, i, i) else DBD = CALCDIJ (RBD, j, n, i, i, 1) endif DBD = sqrt(DBD) p =INT((DBD-bmin)/delt_ij) !$OMP ATOMIC STATBD(k,o,p)=STATBD(k,o,p) + 1 endif enddo enddo !$OMP END DO NOWAIT !$OMP END PARALLEL enddo else ! OpemMP on MD steps !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(i, j, k, l, m, n, o, p, DBD, RBD, GESP, GA) & !$OMP& SHARED(NUMTH, NS, NA, NCELLS, LOT, CONTJ, VOISJ, LA_COUNT, STATBD, adv, bmin, delt_ij) !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS do j=1, NA k = LOT(j) l = CONTJ(j,i) do m=1, l n = VOISJ(m,j,i) o = LOT(n) LA_COUNT(j,o,i)=LA_COUNT(j,o,i)+1 if (adv .eq. 1) then if (NCELLS .gt. 1) then DBD = CALCDIJ (RBD, j, n, i, i, i) else DBD = CALCDIJ (RBD, j, n, i, i, 1) endif DBD = sqrt(DBD) p =INT((DBD-bmin)/delt_ij) !$OMP ATOMIC STATBD(k,o,p)=STATBD(k,o,p) + 1 endif enddo enddo enddo #ifdef OPENMP !$OMP END DO NOWAIT !$OMP END PARALLEL endif #endif if (sbf .eq. 1 .and. scf.gt.0) then do i=1, scf sfile(i:i) = sfil(i) enddo open(unit=100, file=sfile, action="write", status='unknown') do i=1, NS write (100, '("Configuration N°",i6)') i write (100, *) do j=1, NA write (100, '(A2,i6)') TL(LOT(j)), j write (100, '(4x,"Nc[tot]= ",i2)') CONTJ(j,i) do k=1, NSP write (100, '(5x,"Nc[",A2,"]= ",i2)') TL(k), LA_COUNT(j,k,i) do l=1, CONTJ(j,i) if (LOT(VOISJ(l,j,i)) .eq. l) then if (NCELLS .gt. 1) then DBD = CALCDIJ (RBD, j, VOISJ(l,j,i), i, i, i) else DBD = CALCDIJ (RBD, j, VOISJ(l,j,i), i, i, 1) endif write (100, '(10x,A2,1x,i6,1x,"at",1x,f7.5,1x,"Å")') TL(k), VOISJ(l,j,i), sqrt(DBD) endif enddo enddo enddo enddo close(100) endif do i=1, NS do j=1, NA k = LOT(j) l = 0 do m=1, NSP n = LA_COUNT(j,m,i) l = l + n GESP(m) = n MA_COUNT(k,m)=MA_COUNT(k,m)+n SA_COUNT(k)=SA_COUNT(k)+n enddo GA => GEOP(k) m = NEWCOORD(1, l, GA, NSP, GESP) GA => GEOT(k) n = NEWCOORD(0, l, GA, NSP, GESP) if (m > 0 .and. n > 0) then LT_GEOM(k,n) = 1 TOGL((i-1)*NA+j) = m TIGL((i-1)*NA+j) = n else bonding=0 goto 001 endif enddo enddo n=0 m=0 do i=1, NSP j = GEOP(i)%LAST%INDICE n = n + j GA => GEOP(i)%FIRST do k=1, j m = max(m, GA%COORD) if (k < j) GA => GA%NEXT enddo enddo call send_coord_opengl (1, NS*NA, 0, 0, n, TOGL) if (allocated(TOGL)) deallocate(TOGL) o = 0 n = 0 m = 20 do i=1, NSP j = GEOT(i)%LAST%INDICE o = o + j GA => GEOT(i)%FIRST do k=1, j n = max(n, GA%COORD) m = min(m, GA%COORD) if (k < j) GA => GA%NEXT enddo enddo call send_coord_opengl (0, NS*NA, m, n, o, TIGL) do i=1, NSP j = GEOT(i)%LAST%INDICE if (allocated(LGSA)) deallocate(LGSA) allocate(LGSA(j), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: LGSA"//CHAR(0)) bonding=0 goto 001 endif GA => GEOT(i)%FIRST do k=1, j LGSA(k) = GA%COORD if (k < j) GA => GA%NEXT enddo call init_menu_coordinations (0, i-1, j, LGSA) enddo if (allocated(LGSA)) deallocate(LGSA) if (allocated(TIGL)) deallocate(TIGL) do i=1, NSP SA_COUNT(i)=SA_COUNT(i)/NS/NBSPBS(i) do j=1, NSP MA_COUNT(i,j)=MA_COUNT(i,j)/NS/NBSPBS(i) enddo enddo do i=1, NSP do j=1, NSP MAC(j)=MA_COUNT(i,j) enddo call coordout (i-1, SA_COUNT(i), MAC, GEOP(i)%LAST%INDICE) enddo do i=1, NSP j = GEOP(i)%LAST%INDICE if (allocated(NGSA)) deallocate(NGSA) allocate(NGSA(j), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: NGSA"//CHAR(0)) bonding=0 goto 001 endif if (allocated(LGSA)) deallocate(LGSA) allocate(LGSA(j), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: LGSA"//CHAR(0)) bonding=0 goto 001 endif GA => GEOP(i)%FIRST call allocate_partial_geo (i-1, j) do k=1, j LGSA(k)=GA%COORD NGSA(k)=GA%NCOORD do l=1, NSP GESP(l) = GA%GEO(l) enddo call partial_geo_out (i-1, k-1, NSP, GESP) if (k .lt. j) GA => GA%NEXT enddo call envout (i-1, j, NGSA) call init_menu_coordinations (1, i-1, j, LGSA) if (allocated(NGSA)) deallocate(NGSA) if (allocated(LGSA)) deallocate(LGSA) enddo call CLEAN_GEOM () if (allocated(GESP)) deallocate(GESP) if (NSP .eq. 2) then do i=1, NSP do j=1, NSP MAC(j)=MA_COUNT(i,j) enddo call warren_cowley_out (i-1, MAC) enddo do i=1, NSP do j=1, NSP MAC(j)=MA_COUNT(i,j) enddo call cargill_spaepen_out (i-1, MAC) enddo endif if (adv .eq. 1) then if (.not.EESCS()) then bonding=0 goto 001 endif do i=1, NSP do j=1, NSP EABL(j)=EDGETA(i,j) CABL(j)=CORTA(i,j) DABL(j)=DEFTA(i,j) ETABL(j)=ETYPEA(i,j) CTABL(j)=CTYPEA(i,j) DTABL(j)=DETYPEA(i,j) TDTABL(j)=TDA(i,j) ECTABL(j)=ETDA(i,j) enddo call tetraout (i-1, EABL, CABL, DABL, ETABL, CTABL, DTABL, TDTABL, ECTABL) enddo endif if (.not.ALLOCEDCO(.false.)) then bonding=0 goto 001 endif if (adv .eq. 1) then if (allocated(EABL)) deallocate(EABL) allocate(EABL(0:bdist), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: EABL"//CHAR(0)) bonding=0 goto 001 endif do k=0, bdist EABL(k) = 0.0 enddo l=0 do i=1, NSP do j=1, NSP m=0 do k=0, bdist m = m + STATBD(i,j,k) enddo if (m .ne. 0) then do k=0, bdist EABL(k) = 100.0*STATBD(i,j,k)/m enddo call save_curve (bdist+1, EABL, l, IDBD) else call save_curve (0, EABL, l, IDBD) endif l=l+1 enddo enddo if (allocated(STATBD)) deallocate(STATBD) endif if (.not.ALLOCBONDS(.false.)) then bonding=0 goto 001 endif bonding=1 001 continue CONTAINS INTEGER FUNCTION NEWCOORD (ID, GEO, GP, NP, GSP) INTEGER, INTENT(IN) :: ID, GEO, NP INTEGER, DIMENSION(NP), INTENT(IN) :: GSP TYPE(GEOMETRY), INTENT(INOUT), POINTER :: GP INTEGER :: AB, AC, AD LOGICAL :: NEWGEO=.false. TYPE(GEOMETRY), POINTER :: GM if (GP%INDICE .eq. 0) then GP%INDICE = 1 GP%COORD = GEO GP%NCOORD = 1 GP%LAST => GP GP%FIRST => GP NEWCOORD=GP%INDICE if (ID .eq. 1) then allocate(GP%GEO(NP)) do AB=1, NP GP%GEO(AB) = GSP(AB) enddo endif else GP => GP%FIRST AC = GP%LAST%INDICE NEWGEO=.true. if (ID .eq. 0) then do AB=1, AC if (GP%COORD .eq. GEO) then NEWGEO=.false. NEWCOORD = GP%INDICE exit endif if (AB .lt. AC) GP => GP%NEXT enddo else do AB=1, AC if (GP%COORD .eq. GEO) then NEWGEO=.false. do AD=1, NP if (GP%GEO(AD) .ne. GSP(AD)) then NEWGEO=.true. exit endif enddo if (.not.NEWGEO) exit endif if (AB .lt. AC) GP => GP%NEXT enddo endif if (NEWGEO) then allocate(GM, STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: NEWCOORD"//CHAR(0), "Pointer: GM"//CHAR(0)) NEWCOORD=0 goto 001 endif nullify(GM%FIRST) nullify(GM%NEXT) nullify(GM%LAST) nullify(GM%PREV) GM%FIRST => GP%FIRST GP%NEXT => GM GP%FIRST%LAST => GM GP%LAST => GM GM%LAST => GM GM%PREV => GP GM%INDICE = GP%INDICE+1 GM%COORD = GEO GM%NCOORD = 1 NEWCOORD = GM%INDICE if (ID .eq. 1) then allocate(GM%GEO(NP)) do AB=1, NP GM%GEO(AB) = GSP(AB) enddo endif GP => GM else NEWCOORD = GP%INDICE GP%NCOORD = GP%NCOORD+1 endif endif 001 continue END FUNCTION SUBROUTINE CLEAN_GEOM () INTEGER :: AB, AC, AD do AB=1, NSP GA => GEOT(AB)%LAST AC=GA%INDICE do AD=1, AC-1 GA => GA%PREV deallocate (GA%NEXT) enddo enddo deallocate(GEOT) do AB=1, NSP GA => GEOP(AB)%LAST AC=GA%INDICE do AD=1, AC-1 GA => GA%PREV deallocate (GA%NEXT) enddo enddo deallocate(GEOP) END SUBROUTINE END FUNCTION SUBROUTINE sendcuts (cspa, cspb, cutab) BIND (C,NAME='sendcuts_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: cspa, cspb REAL (KIND=c_double), INTENT(IN) :: cutab if (cspa .eq. NSP) then Gr_cutoff=cutab**2 else Gr_CUT(cspa+1,cspb+1) = cutab**2 endif END SUBROUTINE REAL (KIND=c_double) FUNCTION fdmax(use_pbc) BIND (C,NAME='fdmax_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: use_pbc if (use_pbc .eq. 0) then do l=1,3 pmin(l) = FULLPOS(1,l,1) pmax(l) = pmin(l) enddo do i=1, NS if (i .eq. 1) then k = 2 else k = 1 endif do j=k, NA do l=1,3 pmin(l) = min(pmin(l), FULLPOS(j,l,i)) pmax(l) = max(pmax(l), FULLPOS(j,l,i)) enddo enddo enddo fdmax = 0.0d0 do l=1,3 fdmax = fdmax + (pmax(l)-pmin(l))**2 enddo fdmax = sqrt(fdmax) else if (THE_BOX(1)%CUBIC) then fdmax = sqrt(2.0)*THE_BOX(1)%minv/2.0 else fdmax = THE_BOX(1)%minv/2.0 endif if (NCELLS .gt. 1) then do l=2, NCELLS if (THE_BOX(l)%CUBIC) then fdmax = min(fdmax,sqrt(2.0)*THE_BOX(l)%minv/2.0) else fdmax = min(fdmax, THE_BOX(l)%minv/2.0) endif enddo endif endif END FUNCTION REAL (KIND=c_double) FUNCTION fkmin(use_pbc) BIND (C,NAME='fkmin_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: use_pbc if (use_pbc .eq. 0) then fkmin = 0.0 else fkmin = 0.0 do l=1, NCELLS fkmin = fkmin + THE_BOX(l)%minr enddo fkmin = fkmin / NCELLS endif END FUNCTION REAL (KIND=c_double) FUNCTION oglmax() BIND (C,NAME='oglmax_') USE PARAMETERS IMPLICIT NONE DOUBLE PRECISION :: maxd DOUBLE PRECISION, DIMENSION(3) :: dmax do l=1,3 pmin(l) = FULLPOS(1,l,1) pmax(l) = pmin(l) enddo do i=1, NS if (i .eq. 1) then k = 2 else k = 1 endif do j=k, NA do l=1,3 pmin(l) = min(pmin(l), FULLPOS(j,l,i)) pmax(l) = max(pmax(l), FULLPOS(j,l,i)) enddo enddo enddo allocate (NFULLPOS(2,3,1)) do l=1, 3 NFULLPOS(1,l,1) = pmin(l) NFULLPOS(2,l,1) = pmax(l) enddo call CALCRIJ (1, 2, -2, 1, 1) deallocate (NFULLPOS) if (PBC) then oglmax = sqrt(Dij) dmax(:) = 0.0d0 maxd = 0.0d0 do l=1, NCELLS do m=1, 3 dmax(m) = max(dmax(m), THE_BOX(l)%modv(m)*THE_BOX(l)%modv(m)) enddo enddo maxd = sqrt(dmax(1)+dmax(2)+dmax(3)) if (oglmax < maxd) oglmax = maxd; else oglmax=sqrt(Dij) endif oglmax = 2.0*oglmax if (oglmax .lt. 10.0) oglmax = 10.0 END FUNCTION atomes_1.3.1/src/fortran/prepdata.F900000664000175000017500000002777215212624223017046 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file prepdata.F90 !! @short First level analysis of atomic coordinates !! @author Sébastien Le Roux #if defined (HAVE_CONFIG_H) # include #endif SUBROUTINE free_contj_voisj () BIND (C,NAME='free_contj_voisj_') USE PARAMETERS IMPLICIT NONE if (allocated(VOISJ)) deallocate(VOISJ) if (allocated(CONTJ)) deallocate(CONTJ) END SUBROUTINE SUBROUTINE read_contj (ATO, STP, CON) BIND (C,NAME='read_contj_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: ATO, STP, CON CONTJ(ATO+1,STP+1) = CON END SUBROUTINE SUBROUTINE read_voisj (ATO, STP, CID, VID) BIND (C,NAME='read_voisj_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: ATO, STP, CID, VID VOISJ(CID+1,ATO+1,STP+1) = VID+1 END SUBROUTINE INTEGER (KIND=c_int) FUNCTION alloc_contj_voisj (N1, N2) BIND (C,NAME='alloc_contj_voisj_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: N1, N2 ! N1 = atomes, N2 = steps if (allocated(VOISJ)) deallocate(VOISJ) allocate(VOISJ(MAXN,N1,N2), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: alloc_cont_vois"//CHAR(0), "Table: VOISJ"//CHAR(0)) alloc_contj_voisj = 0 goto 001 endif if (allocated(CONTJ)) deallocate(CONTJ) allocate(CONTJ(N1,N2), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: alloc_cont_vois"//CHAR(0), "Table: CONTJ"//CHAR(0)) alloc_contj_voisj = 0 endif alloc_contj_voisj = 1 001 continue END FUNCTION INTEGER (KIND=c_int) FUNCTION alloc_data (N1, N2, N3) BIND (C,NAME='alloc_data_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: N1, N2, N3 INTERFACE INTEGER FUNCTION ALLOCHEM() END FUNCTION END INTERFACE NA=N1 NSP=N2 NS=N3 if (allocated(FULLPOS)) deallocate(FULLPOS) allocate (FULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: alloc_data"//CHAR(0), "Table: FULLPOS"//CHAR(0)) alloc_data = 0 goto 001 endif if (allocated(LOT)) deallocate(LOT) allocate(LOT(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: alloc_data"//CHAR(0), "Table: LOT"//CHAR(0)) alloc_data = 0 goto 001 endif alloc_data = ALLOCHEM () 001 continue END FUNCTION SUBROUTINE prep_spec (idatoms, nsps, open_apf) BIND (C,NAME='prep_spec_') USE PARAMETERS USE MENDELEIEV IMPLICIT NONE INTEGER (KIND=c_int), DIMENSION(NSP), INTENT(IN) :: nsps REAL (KIND=c_double), DIMENSION(NSP), INTENT(IN) :: idatoms INTEGER (KIND=c_int), INTENT(IN) :: open_apf CHARACTER (LEN=14) :: ELEM ! Now we are calling the GTK+ routines do i=1, NSP NBSPBS(i) = nsps(i) j = int(idatoms(i)) ATOMID(i) = j if (open_apf .eq. 1) then if (j .gt. 0) then TL(i) = ATSYM(j) ELEM = ELEMENT(j) else TL(i) = "X " ELEM = "Unknown" endif ! In C all string must be terminated by a CHAR(0) ! To spec_data_ call spec_data (0, i-1, ATOMID(i), NBSPBS(i), & TL(i)//CHAR(0), ELEM//CHAR(0), & 0.0d0, 0.0d0, 0.0d0, 0.0d0) endif enddo NBSPBS(NSP+1) = NA END SUBROUTINE SUBROUTINE read_chem (PMASS, PRAD, PNSCATT, PXSCATT) BIND (C,NAME='read_chem_') USE PARAMETERS IMPLICIT NONE REAL (KIND=c_double), DIMENSION(NSP) :: PMASS, PRAD, PNSCATT, PXSCATT do i=1, NSP MASS(i) = PMASS(i) RVDW(i) = PRAD(i) NSCATTL(i) = PNSCATT(i) XSCATTL(i) = PXSCATT(i) enddo END SUBROUTINE SUBROUTINE read_data (PLOT, PBS) BIND (C,NAME='read_data_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), DIMENSION(NA), INTENT(IN) :: PLOT INTEGER (KIND=c_int), DIMENSION(NSP), INTENT(IN) :: PBS do i=1, NA LOT(i)=PLOT(i)+1 enddo do i=1, NSP NBSPBS(i) = PBS(i) Xi(i) = dble(NBSPBS(i)) / dble(NA) enddo NBSPBS(NSP+1) = NA END SUBROUTINE SUBROUTINE read_pos (PCX, PCY, PCZ) BIND (C,NAME='read_pos_') USE PARAMETERS REAL (KIND=c_double), DIMENSION(NA*NS), INTENT(IN) :: PCX, PCY, PCZ k=0 do i=1, NS do j=1, NA k=k+1 FULLPOS(j,1,i)=PCX(k) FULLPOS(j,2,i)=PCY(k) FULLPOS(j,3,i)=PCZ(k) enddo enddo END SUBROUTINE INTEGER FUNCTION SEND_POS (NPA, NPS, NLOT, POSTAB) INTEGER :: i, j, k, ERR INTEGER, INTENT(IN) :: NPA, NPS INTEGER, DIMENSION(:), INTENT(IN) :: NLOT DOUBLE PRECISION, DIMENSION(:,:,:), INTENT(IN) :: POSTAB DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: XPOS, YPOS, ZPOS if (allocated(XPOS)) deallocate(XPOS) allocate(XPOS(NPA*NPS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: SEND_POS"//CHAR(0), "Table: XPOS"//CHAR(0)) SEND_POS = 0 goto 001 endif if (allocated(YPOS)) deallocate(YPOS) allocate(YPOS(NPA*NPS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: SEND_POS"//CHAR(0), "Table: YPOS"//CHAR(0)) SEND_POS = 0 goto 001 endif if (allocated(ZPOS)) deallocate(ZPOS) allocate(ZPOS(NPA*NPS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: SEND_POS"//CHAR(0), "Table: ZPOS"//CHAR(0)) SEND_POS = 0 goto 001 endif k=0 do i=1, NPS do j=1, NPA k=k+1 XPOS(k)=POSTAB(j,1,i) YPOS(k)=POSTAB(j,2,i) ZPOS(k)=POSTAB(j,3,i) enddo enddo ! To 'save_pos_' call save_pos (NPA, NLOT, k, XPOS, YPOS, ZPOS) SEND_POS = 1 001 continue if (allocated(XPOS)) deallocate (XPOS) if (allocated(YPOS)) deallocate (YPOS) if (allocated(ZPOS)) deallocate (ZPOS) END FUNCTION INTEGER (KIND=c_int) FUNCTION prep_data () BIND (C,NAME='prep_data_') ! ! Data initialization ! USE PARAMETERS USE MENDELEIEV IMPLICIT NONE CHARACTER (LEN=2), DIMENSION(MAXE) :: TTYPE INTERFACE INTEGER FUNCTION SEND_POS(NPA, NPS, NLOT, POSTAB) INTEGER, INTENT(IN) :: NPA, NPS INTEGER, DIMENSION(:), INTENT(IN) :: NLOT DOUBLE PRECISION, DIMENSION(:,:,:), INTENT(IN) :: POSTAB END FUNCTION INTEGER FUNCTION ALLOCHEM() END FUNCTION INTEGER FUNCTION FINDID(NAMEAT) CHARACTER (LEN=2), INTENT(IN) :: NAMEAT END FUNCTION INTEGER FUNCTION chemistry () END FUNCTION END INTERFACE prep_data = 0 if (allocated(LOT)) deallocate(LOT) allocate(LOT(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: prep_data"//CHAR(0), "Table: LOT"//CHAR(0)) goto 001 endif LOT(:)=0 ! Initialisation du tableau NOC=1 do NOA=1, NA if (NOA .eq. 1) then LOT(NOA)=NOC TTYPE(NOC)=TAB_OF_TYPE(NOA) else if (LOT(NOA) .eq. 0) then do NOB=1, NOC if (TAB_OF_TYPE(NOA) .eq. TTYPE(NOB)) then LOT(NOA)= NOB endif enddo if (LOT(NOA) .eq. 0) then NOC=NOC+1 LOT(NOA)=NOC TTYPE(NOC)=TAB_OF_TYPE(NOA) endif endif enddo NSP=NOC if (ALLOCHEM () == 0) then prep_data = 0 goto 001 endif if (allocated(ELEMID)) deallocate(ELEMID) allocate(ELEMID(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: prep_data"//CHAR(0), "Table: ELEMID"//CHAR(0)) goto 001 endif NBSPBS(:) = 0 do NOA=1, NA NOB=LOT(NOA) NBSPBS(NOB)=NBSPBS(NOB)+1 enddo NBSPBS(NSP+1)=NA ! ! Link between index and label ! Correspondance entre indice de type et label ! do NOB=1, NSP TL(NOB)=TTYPE(NOB) enddo do NOA=1, NSP ATOMID(NOA) = FINDID(TL(NOA)) select case (ATOMID(NOA)) case (-1) prep_data = 0 goto 001 case (0) ELEMID(NOA) = "Dummy "//TL(NOA) MASS(NOA) = 1.0 RVDW(NOA) = 0.5 NSCATTL(NOA) = 0.0 XSCATTL(NOA) = 0.0 case default ELEMID(NOA) = ELEMENT(ATOMID(NOA)) MASS(NOA) = AMASS(ATOMID(NOA)) XSCATTL(NOA) = ATOMID(NOA) if(ATOMID(NOA) < 105) then NSCATTL(NOA) = COHEB(ATOMID(NOA)) ! Covalent radius are the defaut values RVDW(NOA) = ARCOV(ATOMID(NOA)) ! To use ionic radius uncomment the following line ! RVDW(NOA) = ARION(ATOMID(NOA)) ! To use Wander Waals radius uncomment the following line ! RVDW(NOA) = ARVDW(ATOMID(NOA)) else NSCATTL(NOA) = 0.0d0 RVDW(NOA) = 0.0d0 endif end select if (NSCATTL(NOA) .eq. 0.00) then call show_warning ("Element "//TL(NOA)//" does not have neutron scattering length "//CHAR(0), & "If this is a bug please report it to"//CHAR(0), PACKAGE_BUGREPORT//CHAR(0)) endif enddo ! Now we are calling the GTK+ routines ! To init_data_ call init_data (NA, NSP, NS, 1) do i=1, NSP ! In C all string must be terminated by a CHAR(0) ! To spec_data_ call spec_data (1, i-1, ATOMID(i), NBSPBS(i), & TL(i)//CHAR(0), ELEMID(i)//CHAR(0), & MASS(i), RVDW(i), NSCATTL(i), XSCATTL(i)) enddo if (chemistry () .eq. 1) then prep_data = SEND_POS (NA, NS, LOT, FULLPOS) endif 001 continue if (allocated(ELEMID)) deallocate(ELEMID) END FUNCTION INTEGER FUNCTION FINDID(NAMEAT) USE PARAMETERS USE MENDELEIEV INTEGER (KIND=c_int), EXTERNAL :: dummy_ask INTEGER :: ELEMT CHARACTER (LEN=2), INTENT(IN) :: NAMEAT FINDID=0 do ELEMT=1, MAXE if (ATSYM(ELEMT) .eq. NAMEAT) then FINDID=ELEMT exit endif enddo if (FINDID .eq. 0) then call show_warning ("Problem with the atomic coordinates"//CHAR(0), & "Element "//NAMEAT//" does not exist "//CHAR(0), " "//CHAR(0)) FINDID = dummy_ask ("Do you want to use dummy atom(s) for unknown species "//NAMEAT//" ?"//CHAR(0)); endif END FUNCTION REAL (KIND=c_double) FUNCTION set_mass (SW) BIND (C,NAME='set_mass_') USE MENDELEIEV USE PARAMETERS INTEGER (KIND=c_int), INTENT(IN) :: SW set_mass = AMASS(SW) END FUNCTION REAL (KIND=c_double) FUNCTION set_radius (SW, RD) BIND (C,NAME='set_radius_') USE MENDELEIEV USE PARAMETERS INTEGER (KIND=c_int), INTENT(IN) :: SW, RD DOUBLE PRECISION :: RAD if (SW .lt. 108) then if (RD .eq. 0) then RAD = ARCOV(SW) else if (RD .eq. 1) then RAD = ARION(SW) else if (RD .eq. 2) then RAD = ARVDW(SW) else if (RD .eq. 3) then RAD = ARCRY(SW) endif else RAD = 0.0 endif set_radius = RAD END FUNCTION REAL (KIND=c_double) FUNCTION set_neutron (SW) BIND (C,NAME='set_neutron_') USE MENDELEIEV USE PARAMETERS INTEGER (KIND=c_int), INTENT(IN) :: SW if (SW .lt. 105) then set_neutron = COHEB(SW) else set_neutron = 0.0 endif END FUNCTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Reconstruction des trajectoires réelles !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SUBROUTINE prep_pos (PINFO, FINFO) BIND (C,NAME='prep_pos_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: PINFO, FINFO INTERFACE INTEGER FUNCTION SEND_POS(NPA, NPS, NLOT, POSTAB) INTEGER, INTENT(IN) :: NPA, NPS INTEGER, DIMENSION(:), INTENT(IN) :: NLOT DOUBLE PRECISION, DIMENSION(:,:,:), INTENT(IN) :: POSTAB END FUNCTION END INTERFACE PBC=.false. if (PINFO .eq. 1) then PBC=.true. endif FRAC=.false. if (FINFO > 0) FRAC=.true. if (FRAC) then do NOC=1, NS do NOA=1, NA if (NCELLS .gt. 1) then FULLPOS(NOA,:,NOC) = MATMUL(FULLPOS(NOA,:,NOC),THE_BOX(NOC)%fractocart) else FULLPOS(NOA,:,NOC) = MATMUL(FULLPOS(NOA,:,NOC),THE_BOX(1)%fractocart) endif enddo enddo endif NOA = SEND_POS (NA, NS, LOT, FULLPOS) END SUBROUTINE atomes_1.3.1/src/fortran/threads.F900000664000175000017500000000271715212624223016670 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file threads.F90 !! @short OpenMP utility functions !! @author Sébastien Le Roux INTEGER FUNCTION GET_THREAD_START (NOBJ, NTHREADS, THREAD_ID) IMPLICIT NONE INTEGER, INTENT(IN) :: NOBJ, NTHREADS, THREAD_ID INTEGER :: TMP REAL :: VA, VB VA = NOBJ VB = NTHREADS TMP = INT (VA/VB) GET_THREAD_START = TMP * THREAD_ID + 1 END FUNCTION INTEGER FUNCTION GET_THREAD_END (NOBJ, NTHREADS, THREAD_ID) IMPLICIT NONE INTEGER, INTENT(IN) :: NOBJ, NTHREADS, THREAD_ID INTEGER :: TMP REAL :: VA, VB VA = NOBJ VB = NTHREADS TMP = INT (VA/VB) if (THREAD_ID .eq. NTHREADS-1) then GET_THREAD_END = NOBJ else GET_THREAD_END = TMP * (THREAD_ID+1) endif END FUNCTION atomes_1.3.1/src/fortran/xyz.F900000664000175000017500000001046615212624223016070 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file xyz -> F90 !! @short Write XYZ atomic coordinates !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION read_xyz (xyz_f, lxyz, is_npt) BIND (C,NAME='read_xyz_') !INTEGER FUNCTION read_xyz (xyz_file, lxyz) ! ! Lecture of atom types and coordinates - XYZ files ! USE PARAMETERS IMPLICIT NONE LOGICAL :: isok INTEGER (KIND=c_int), INTENT(IN) :: lxyz, is_npt CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: xyz_f CHARACTER (LEN=lxyz) :: xyz_file INTERFACE INTEGER FUNCTION TEST_LENGTH(UNITFILE, NATL) INTEGER, INTENT(IN) :: UNITFILE, NATL END FUNCTION END INTERFACE do i=1, lxyz xyz_file(i:i) = xyz_f(i) enddo read_xyz=1 inquire (file=xyz_file, exist=isok) if (isok) then open (unit=20, file=xyz_file, action='read', status='old', err=001) NS=0 read (20, *, err=002) NA NS = TEST_LENGTH(20, NA+2) if (NS .gt. 0) then rewind(20) if (allocated(FULLPOS)) deallocate(FULLPOS) allocate (FULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_xyz"//CHAR(0), "Table: FULLPOS"//CHAR(0)) endif if (allocated(TAB_OF_TYPE)) deallocate(TAB_OF_TYPE) allocate (TAB_OF_TYPE(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_xyz"//CHAR(0), "Table: TAB_OF_TYPE"//CHAR(0)) endif do i=1, NS read (20, *, err=002) read (20, *, err=002) do j=1, NA read (20, *, err=002) TAB_OF_TYPE(j), FULLPOS(j,1,i), FULLPOS(j,2,i), FULLPOS(j,3,i) enddo enddo if (is_npt .eq. 1) call send_steps (NS) read_xyz=0 else read_xyz=2 endif 002 continue close (20) 001 continue endif END FUNCTION INTEGER FUNCTION TEST_LENGTH (UNITFILE, NATL) IMPLICIT NONE INTEGER, INTENT(IN) :: UNITFILE, NATL INTEGER :: LENF INTEGER :: EOF rewind(UNITFILE) EOF=0 LENF=0 do while (EOF .eq. 0) read (UNITFILE, *, iostat=EOF) LENF=LENF+1 enddo LENF=LENF-1 TEST_LENGTH=mod(LENF,NATL) if (TEST_LENGTH .eq. 0) then TEST_LENGTH=LENF/NATL else TEST_LENGTH=0 endif END FUNCTION SUBROUTINE send_label (sp_id, sp_ln, spec_label) BIND (C,NAME='send_label_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: sp_id, sp_ln CHARACTER (KIND=c_char), DIMENSION(sp_ln), INTENT(IN) :: spec_label TL(sp_id)=" " do i=1, sp_ln TL(sp_id)(i:i) = spec_label(i) enddo END SUBROUTINE INTEGER (KIND=c_int) FUNCTION write_xyz (xyz_f, lxyz, fxyz, txyz) BIND (C,NAME='write_xyz_') ! ! output of atom types and coordinates - Multiple XYZ files ! USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: lxyz, fxyz, txyz CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: xyz_f DOUBLE PRECISION, DIMENSION(3) :: savep CHARACTER (LEN=lxyz) :: xyz_file INTERFACE INTEGER FUNCTION TEST_LENGTH(UNITFILE, NATL) INTEGER, INTENT(IN) :: UNITFILE, NATL END FUNCTION END INTERFACE do i=1, lxyz xyz_file(i:i) = xyz_f(i) enddo write_xyz=1 open (unit=20, file=xyz_file, action='write', status='unknown', err=001) do i=1, NS write (20, '(i10)') NA write (20, *) do j=1, NA if (fxyz .eq. 1) then if (NCELLS .gt. 1) then NBOX => THE_BOX(i) else NBOX => THE_BOX(1) endif savep = MATMUL(FULLPOS(j,:,i),NBOX%carttofrac) else savep = FULLPOS(j,:,i) if (txyz .eq. 1) then savep(:) = savep(:)/ANGTOBOHR endif endif write (20, '(a2,3(3x,f15.10))', err=002) TL(LOT(j)), savep enddo enddo write_xyz=0 002 continue close (20) 001 continue END FUNCTION atomes_1.3.1/src/fortran/initchains.F900000664000175000017500000001012715212624223017361 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file initchains.F90 !! @short Initialize chain statistics !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION initchains (VTLT, VAAA, VACA, VHOMO, V121, VTAILLC, VNUMA) BIND (C,NAME='initchains_') ! ! Initialization of the chain statistics ! The key variable is NUMA see in the following lines ! USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: VTLT, VAAA, VACA, VHOMO, V121, VTAILLC, VNUMA INTERFACE INTEGER FUNCTION CHAINS() END FUNCTION END INTERFACE if (VTLT .eq. 0) then TLT=NSP+1 else TLT=VTLT endif NUMA=VNUMA NTLT=NBSPBS(TLT) TAILLC=VTAILLC AAAA=.false. ACAC=.false. NO_HOMO=.false. if (NSP.gt. 1) then if (VAAA == 1) AAAA=.true. if (VACA == 1) ACAC=.true. if (VHOMO == 1) NO_HOMO=.true. endif ISOLATED=.false. if (V121 == 1) ISOLATED=.true. #ifdef DEBUG write (6, '("CHAINS:: AAAA= ",l1,", ACAC= ",l1,", NO_HOMO= ",l1,", ISOLATED= ",l1)') AAAA, ACAC, NO_HOMO, ISOLATED #endif TBR=.false. ALC=.false. initchains = CHAINS() END FUNCTION INTEGER FUNCTION RECHAINS() USE PARAMETERS IMPLICIT NONE DOUBLE PRECISION :: TAMP, ETAMP DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: CTAB allocate(CTAB(TAILLC), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECHAINS"//CHAR(0), "Table: CTAB"//CHAR(0)) RECHAINS=0 goto 001 endif if (allocated(RED)) deallocate(RED) allocate(RED(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECHAINS"//CHAR(0), "Table: RED"//CHAR(0)) RECHAINS=0 goto 001 endif if (allocated(MOYRED)) deallocate(MOYRED) allocate(MOYRED(TAILLC), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECHAINS"//CHAR(0), "Table: MOYRED"//CHAR(0)) RECHAINS=0 goto 001 endif if (allocated(ECTYPE)) deallocate(ECTYPE) allocate(ECTYPE(TAILLC), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECHAINS"//CHAR(0), "Table: ECTYPE"//CHAR(0)) RECHAINS=0 goto 001 endif RED(:)=0.0d0 do l=1, TAILLC do i=1, NS RED(i)=dble(NRING(l,i))/NTLT enddo if (NS .gt. 1) then MOYRED(l)=0.0d0 ECTYPE(l)=0.0d0 call MOYENNE(RED, NS, MOYRED(l)) call ECT_TYPE(MOYRED(l), RED, NS, ECTYPE(l)) else MOYRED(l)=RED(1) endif enddo TAMP=0.0 do i=1, TAILLC CTAB(i)=MOYRED(i) TAMP = TAMP + CTAB(i) enddo if (TAMP .eq. 0.0) then RECHAINS=1 goto 001 endif l=TLT if (TLT .eq. NSP+1) l = 0 call save_curve (TAILLC, CTAB, l, IDCH) if (allocated(TOTPSTEP)) deallocate(TOTPSTEP) allocate(TOTPSTEP(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECHAINS"//CHAR(0), "Table: TOTPSTEP"//CHAR(0)) RECHAINS=0 goto 001 endif do i=1, NS TOTPSTEP(i)=0 do j=1, TAILLC TOTPSTEP(i)=TOTPSTEP(i)+dble(NRING(j,i)) enddo enddo TAMP=0.0d0 ETAMP=0.0d0 call MOYENNE(TOTPSTEP, NS, TAMP) call ECT_TYPE(TAMP, TOTPSTEP, NS, ETAMP) call save_chains_data (TAILLC, ECTYPE, TAMP, ETAMP) RECHAINS=1 001 continue if (allocated(TOTPSTEP)) deallocate(TOTPSTEP) if (allocated(MOYRED)) deallocate(MOYRED) if (allocated(RED)) deallocate(RED) if (allocated(CTAB)) deallocate(CTAB) END FUNCTION atomes_1.3.1/src/fortran/allocbonds.F900000664000175000017500000002450315212624223017353 0ustar lerouxleroux! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' 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 Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2026 by CNRS and University of Strasbourg ! !> !! @file allocbonds.F90 !! @short Memory allocation for bonding properties analysis !! @author Sébastien Le Roux LOGICAL FUNCTION ALLOCEDCO (alloc) ! ! Memory allocation for Edge and Corner sharing analysis ! USE PARAMETERS IMPLICIT NONE LOGICAL, INTENT(IN) :: alloc if (allocated(EDGETA)) deallocate(EDGETA) if (allocated(CORTA)) deallocate(CORTA) if (allocated(DEFTA)) deallocate(DEFTA) if (allocated(TDA)) deallocate(TDA) if (allocated(CORNERA)) deallocate(CORNERA) if (allocated(EDGEA)) deallocate(EDGEA) if (allocated(DEFA)) deallocate(DEFA) if (allocated(TDSA)) deallocate(TDSA) if (allocated(EABL)) deallocate(EABL) if (allocated(CABL)) deallocate(CABL) if (allocated(DABL)) deallocate(DABL) if (allocated(ETABL)) deallocate(ETABL) if (allocated(CTABL)) deallocate(CTABL) if (allocated(DTABL)) deallocate(DTABL) if (allocated(ECTABL)) deallocate(ECTABL) if (allocated(TDTABL)) deallocate(TDTABL) if (allocated(ETYPEA)) deallocate(ETYPEA) if (allocated(CTYPEA)) deallocate(CTYPEA) if (allocated(DETYPEA)) deallocate(DETYPEA) if (allocated(ETDA)) deallocate(ETDA) if (allocated(MTABL)) deallocate(MTABL) if (alloc) then allocate(EDGETA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: EDGETA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(CORTA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: CORTA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(DEFTA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: DEFTA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(TDA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: TDA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif do m=1, NSP do n=1, NSP EDGETA(n,m)=0 CORTA(n,m)=0 DEFTA(n,m)=0 TDA(n,m)=0 enddo enddo allocate(CORNERA(NSP,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: CORNERA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(EDGEA(NSP,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: EDGEA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(DEFA(NSP,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: DEFA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(TDSA(NSP,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: TDSA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif do m=1, NSP do n=1, NSP do o=1, NS CORNERA(m,n,o)=0 EDGEA(m,n,o)=0 DEFA(m,n,o)=0 TDSA(m,n,o)=0 enddo enddo enddo allocate(EABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: EABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(CABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: CABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(DABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: DABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(ETABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: ETABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(CTABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: CTABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(DTABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: DTABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(ECTABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: ECTABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(TDTABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: TDTABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate (ETYPEA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: ETYPEA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate (CTYPEA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: CTYPEA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate (DETYPEA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: DETYPEA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate (ETDA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: EDTA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(MTABL(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: MTABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif do i=1, NSP do j=1,NSP ETYPEA(j,i)=0.0d0 CTYPEA(j,i)=0.0d0 DETYPEA(j,i)=0.0d0 ETDA(j,i)=0.0d0 enddo enddo endif ALLOCEDCO=.true. 001 continue END FUNCTION LOGICAL FUNCTION ALLOCBONDS (alloc) ! ! Memory allocation for bond properties ! USE PARAMETERS !INTEGER, INTENT(IN) :: adv LOGICAL, INTENT(IN) :: alloc ! For neighbors and environments if (allocated(LA_COUNT)) deallocate(LA_COUNT) if (allocated(SA_COUNT)) deallocate(SA_COUNT) if (allocated(MA_COUNT)) deallocate(MA_COUNT) if (allocated(TOGL)) deallocate(TOGL) if (allocated(TIGL)) deallocate(TIGL) if (allocated(NUM_GSA)) deallocate(NUM_GSA) if (allocated(TOT_GSA)) deallocate(TOT_GSA) if (allocated(CABL)) deallocate(CABL) if (allocated(DABL)) deallocate(DABL) if (allocated(EABL)) deallocate(EABL) if (allocated(LGSA)) deallocate(LGSA) if (allocated(NGSA)) deallocate(NGSA) if (allocated(LP_GEOM)) deallocate(LP_GEOM) if (allocated(LT_GEOM)) deallocate(LT_GEOM) if (allocated(CMOY)) deallocate(CMOY) if (allocated(MAC)) deallocate(MAC) if (alloc) then allocate(LA_COUNT(NA,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: LA_COUNT"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif allocate(SA_COUNT(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: SA_COUNT"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif allocate(MA_COUNT(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: MA_COUNT"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif SA_COUNT(:)=0 MA_COUNT(:,:)=0 LA_COUNT(:,:,:)=0 allocate(TOGL(NS*NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: TOGL"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif allocate(TIGL(NS*NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: TIGL"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif allocate(NUM_GSA(NSP,NA*10), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: NUM_GSA"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif allocate(TOT_GSA(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: TOT_GSA"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif allocate(MAC(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: MAC"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif endif !if (adv .eq. 1) then ! ALLOCBONDS = ALLOCEDCO () !else ALLOCBONDS=.true. !endif 001 continue END FUNCTION atomes_1.3.1/src/Makefile.am0000664000175000017500000002244015212624223015332 0ustar lerouxleroux # To prepare the OpenGL testing utility: SUBDIRS = startup-testing # Setup the name of the program to be generated, using: bin_PROGRAMS = atomes atomes_LDADD = $(LGTK_LIBS) $(LIBXML2_LIBS) $(PANGOFT2_LIBS) $(FFMPEG_LIBS) $(GLU_LIBS) $(EPOXY_LIBS) if WINDOWS atomes_LDADD += win_atomes.o win_atomes.o: ../misc/win/atomes.rc $(WINDRES) $< $@ endif # Create a variable to store the CFLAGS for all the required libraries LIBS_CFLAGS = $(LGTK_CFLAGS) $(LIBXML2_CFLAGS) $(PANGOFT2_CFLAGS) $(FFMPEG_CFLAGS) $(GLU_CFLAGS) $(EPOXY_CFLAGS) # To turn OpenMP on/off if OPENMP OpenMP_FLAGS = -DOPENMP $(OPENMP_CFLAGS) else OpenMP_FLAGS = endif # Use AM_LDFLAGS to define additional linker flags: AM_LDFLAGS = $(OpenMP_FLAGS) if GTK3 GTK_VERSION=-DGTK3 else GTK_VERSION=-DGTK4 endif atomes_locale = $(DESTDIR)$(localedir) # Use AM_CPPFLAGS to define additional preprocessor flags: if WINDOWS AM_CPPFLAGS = $(GTK_VERSION) -DGTKGLAREA -DMENU_ICONS $(OpenMP_FLAGS) -DPACKAGE_LOCALE=\""$(atomes_locale)"\" else PACKAGE_CPPFLAGS = -DPACKAGE_PREFIX=\""$(datadir)/atomes"\" -DPACKAGE_LIBEXEC=\""$(libexecdir)"\" -DPACKAGE_LOCALE=\""$(atomes_locale)"\" if LINUX AM_CPPFLAGS = -DLINUX $(GTK_VERSION) -DGTKGLAREA -DMENU_ICONS $(OpenMP_FLAGS) $(PACKAGE_CPPFLAGS) -DPACKAGE_LOCALE=\""$(atomes_locale)"\" else AM_CPPFLAGS = -DOSX $(GTK_VERSION) -DGTKGLAREA -DMENU_ICONS $(OpenMP_FLAGS) $(PACKAGE_CPPFLAGS) -DPACKAGE_LOCALE=\""$(atomes_locale)"\" endif endif # Use AM_FFLAGS to define additional Fortran 90 flags: AM_FFLAGS = $(OpenMP_FLAGS) for = fortran/ gui = gui/ work = workspace/ proj = project/ read = project/readers/ calc = calc/ dlpoly = calc/dl_poly/ lammps = calc/lammps/ fields = calc/force_fields/ cpmd = calc/cpmd/ cp2k = calc/cp2k/ curve = curve/ ogl = opengl/ glwin = opengl/win/ gldraw = opengl/draw/ gledit = opengl/edit/ inc = -I$(gui) -I$(work) -I$(proj) -I$(read) -I$(calc) -I$(dlpoly) -I$(lammps) -I$(fields) -I$(cpmd) -I$(cp2k) -I$(curve) -I$(glwin) -I$(gledit) -I$(gldraw) -I$(ogl) -I. includes = $(inc) -DGTK_DISABLE_DEPRECATED # Use AM_CFLAGS to define additional C flags: AM_CFLAGS = $(includes) $(OpenMP_FLAGS) $(LIBS_CFLAGS) -std=gnu99 atomes_fortran_modules = $(for)parameters.F90 \ $(for)mendeleiev.F90 atomes_fortran_files = $(for)allocbonds.F90 \ $(for)allochem.F90 \ $(for)allocmsd.F90 \ $(for)angles.F90 \ $(for)bonds.F90 \ $(for)c3d.F90 \ $(for)chains.F90 \ $(for)chains_ogl.F90 \ $(for)chemistry.F90 \ $(for)clean.F90 \ $(for)cqvf.F90 \ $(for)dmtx.F90 \ $(for)dvtb.F90 \ $(for)escs.F90 \ $(for)fzbt.F90 \ $(for)gr.F90 \ $(for)grfft.F90 \ $(for)initchains.F90 \ $(for)initrings.F90 \ $(for)lattice.F90 \ $(for)molecules.F90 \ $(for)msd.F90 \ $(for)pdb.F90 \ $(for)prepdata.F90 \ $(for)resrings.F90 \ $(for)rings-guttman.F90 \ $(for)rings-king.F90 \ $(for)rings_ogl.F90 \ $(for)rings-primitive.F90 \ $(for)sk.F90 \ $(for)skt.F90 \ $(for)spherical.F90 \ $(for)sq.F90 \ $(for)threads.F90 \ $(for)trj.F90 \ $(for)utils.F90 \ $(for)vas.F90 \ $(for)writedata.F90 \ $(for)xyz.F90 # Rules to ensure that Fortran modules are compiled before Fortran files atomes_fortran = $(atomes_fortran_modules) $(atomes_fortran_files) $(patsubst %.F90,%.o,$(atomes_fortran_files)): $(patsubst %.F90,%.o,$(atomes_fortran_modules)) atomes_gui = $(gui)bdcall.c \ $(gui)calc_menu.c \ $(gui)callbacks.c \ $(gui)chainscall.c \ $(gui)edit_menu.c \ $(gui)grcall.c \ $(gui)gtk-misc.c \ $(gui)gui.c \ $(gui)initc.c \ $(gui)preferences.c \ $(gui)interface.c \ $(gui)main.c \ $(gui)msdcall.c \ $(gui)ringscall.c \ $(gui)spcall.c \ $(gui)sqcall.c \ $(gui)sktcall.c \ $(gui)tools.c \ $(gui)work_menu.c atomes_workspace = $(work)modelinfo.c \ $(work)workinfo.c \ $(work)workspace.c atomes_readers = $(read)read_c3d.c \ $(read)read_cif.c \ $(read)read_coord.c \ $(read)read_hist.c \ $(read)read_isaacs.c \ $(read)read_npt.c \ $(read)read_pdb.c \ $(read)read_trj.c \ $(read)read_vas.c \ $(read)read_xyz.c atomes_project = $(atomes_readers) \ $(proj)close_p.c \ $(proj)debugio.c \ $(proj)init_p.c \ $(proj)open_p.c \ $(proj)project.c \ $(proj)read_bond.c \ $(proj)read_curve.c \ $(proj)read_field.c \ $(proj)read_mol.c \ $(proj)read_opengl.c \ $(proj)read_qm.c \ $(proj)save_bond.c \ $(proj)save_curve.c \ $(proj)save_field.c \ $(proj)save_mol.c \ $(proj)save_opengl.c \ $(proj)save_p.c \ $(proj)save_qm.c \ $(proj)update_p.c atomes_cp2k = $(cp2k)cp2k_basis.c \ $(cp2k)cp2k_files.c \ $(cp2k)cp2k_gth-basis.c \ $(cp2k)cp2k_init.c \ $(cp2k)cp2k_mol.c \ $(cp2k)cp2k_molopt-basis.c \ $(cp2k)cp2k_pot.c \ $(cp2k)cp2k_print.c atomes_cpmd = $(cpmd)cpmd_atoms.c \ $(cpmd)cpmd_init.c \ $(cpmd)cpmd_nose.c \ $(cpmd)cpmd_print.c \ $(cpmd)cpmd_restart.c atomes_dlpoly = $(dlpoly)dlp_active.c \ $(dlpoly)dlp_atom.c \ $(dlpoly)dlp_comp.c \ $(dlpoly)dlp_control.c \ $(dlpoly)dlp_copy.c \ $(dlpoly)dlp_edit.c \ $(dlpoly)dlp_ff_match.c \ $(dlpoly)dlp_field.c \ $(dlpoly)dlp_init.c \ $(dlpoly)dlp_mol.c \ $(dlpoly)dlp_print.c \ $(dlpoly)dlp_viz.c atomes_lammps = $(lammps)la_print.c atomes_calc = $(calc)calc.c $(atomes_cp2k) $(atomes_cpmd) $(atomes_dlpoly) $(atomes_lammps) $(fields)force_fields.c atomes_curve = $(curve)cedit.c \ $(curve)curve.c \ $(curve)cwidget.c \ $(curve)datab.c \ $(curve)draw.c \ $(curve)frame.c \ $(curve)glyph.c \ $(curve)labels.c \ $(curve)legend.c \ $(curve)m_curve.c \ $(curve)show.c \ $(curve)tab-1.c \ $(curve)tab-2.c \ $(curve)tab-3.c \ $(curve)tab-4.c \ $(curve)title.c \ $(curve)w_curve.c \ $(curve)w_data.c \ $(curve)w_img.c \ $(curve)xaxis.c \ $(curve)yaxis.c atomes_glwin = $(glwin)color_box.c \ $(glwin)glwindow.c \ $(glwin)initchain.c \ $(glwin)initcoord.c \ $(glwin)initmol.c \ $(glwin)initring.c \ $(glwin)m_anim.c \ $(glwin)m_atoms.c \ $(glwin)m_axis.c \ $(glwin)m_back.c \ $(glwin)m_bonds.c \ $(glwin)m_box.c \ $(glwin)m_clones.c \ $(glwin)m_coord.c \ $(glwin)m_edit.c \ $(glwin)menu_bar.c \ $(glwin)m_map.c \ $(glwin)m_poly.c \ $(glwin)m_proj.c \ $(glwin)m_quality.c \ $(glwin)m_render.c \ $(glwin)m_rep.c \ $(glwin)m_style.c \ $(glwin)m_tools.c \ $(glwin)popup.c \ $(glwin)w_advance.c \ $(glwin)w_atoms.c \ $(glwin)w_axis.c \ $(glwin)w_bonds.c \ $(glwin)w_box.c \ $(glwin)w_chains.c \ $(glwin)w_colors.c \ $(glwin)w_coord.c \ $(glwin)w_cutoffs.c \ $(glwin)w_encode.c \ $(glwin)w_labels.c \ $(glwin)w_library.c \ $(glwin)w_measures.c \ $(glwin)w_periodic.c \ $(glwin)w_record.c \ $(glwin)w_rings.c \ $(glwin)w_search.c \ $(glwin)w_sequencer.c \ $(glwin)w_spiner.c \ $(glwin)w_volumes.c atomes_gldraw = $(gldraw)d_atoms.c \ $(gldraw)d_axis.c \ $(gldraw)d_bonds.c \ $(gldraw)d_box.c \ $(gldraw)d_label.c \ $(gldraw)d_measures.c \ $(gldraw)d_poly.c \ $(gldraw)d_rings.c \ $(gldraw)d_selection.c \ $(gldraw)d_background.c \ $(gldraw)image.c \ $(gldraw)movie.c \ $(gldraw)ogl_text.c atomes_gledit = $(gledit)atom_action.c \ $(gledit)atom_coord.c \ $(gledit)atom_edit.c \ $(gledit)atom_geo.c \ $(gledit)atom_insert.c \ $(gledit)atom_move.c \ $(gledit)atom_object.c \ $(gledit)atom_remove.c \ $(gledit)atom_search.c \ $(gledit)atom_species.c \ $(gledit)cbuild_action.c \ $(gledit)cbuild_edit.c \ $(gledit)cbuild_info.c \ $(gledit)cbuild_sg.c \ $(gledit)cell_cut.c \ $(gledit)cell_density.c \ $(gledit)cell_edit.c \ $(gledit)cell_extra.c \ $(gledit)cell_pixel.c \ $(gledit)cell_shift.c \ $(gledit)cell_super.c atomes_opengl = $(atomes_glwin) \ $(atomes_gldraw) \ $(atomes_gledit) \ $(ogl)arcball.c \ $(ogl)glview.c \ $(ogl)ogl_draw.c \ $(ogl)ogl_shaders.c \ $(ogl)ogl_shading.c \ $(ogl)ogl_utils.c \ $(ogl)selection.c atomes_includes = config.h \ version.h \ global.h \ bind.h \ affero.h \ $(gui)callbacks.h \ $(gui)gui.h \ $(gui)interface.h \ $(gui)xmlrw.h \ $(gui)preferences.h \ $(work)workspace.h \ $(proj)project.h \ $(read)readers.h \ $(calc)calc.h \ $(cpmd)cpmd.h \ $(cp2k)cp2k.h \ $(dl_poly)dlp_field.h \ $(field)force_fields.h \ $(curve)cedit.h \ $(curve)curve.h \ $(curve)datab.h \ $(glwin)color_box.h \ $(glwin)glwindow.h \ $(glwin)initcoord.h \ $(glwin)submenus.h \ $(glraw)movie.h \ $(gledit)atom_edit.h \ $(gledit)cbuild_edit.h \ $(gledit)cell_edit.h \ $(ogl)glview.h \ $(ogl)glwin.h \ $(ogl)math_3d.h \ $(ogl)ogl_shading.h clean: -rm -f *.mod -rm -f */*.o -rm -f */*/*.o # List the files required to build the program atomes_SOURCES = \ $(atomes_fortran) \ $(atomes_includes) \ global.c \ $(atomes_gui) \ $(atomes_workspace) \ $(atomes_project) \ $(atomes_calc) \ $(atomes_curve) \ $(atomes_opengl) atomes_1.3.1/src/gui/0000775000175000017500000000000015212624223014060 5ustar lerouxlerouxatomes_1.3.1/src/gui/preferences.c0000664000175000017500000053422115212624223016534 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file preferences.c * @short Functions to create the 'User preferences' window * @author Sébastien Le Roux */ /* * This file: 'configuration.c' * * Contains: * - The GUI for the general configuration window - The associated controllers * * List of functions: int xml_save_color_to_file (xmlTextWriterPtr writer, int did, gchar * legend, gchar * key, ColRGBA col); int xml_save_xyz_to_file (xmlTextWriterPtr writer, int did, gchar * legend, gchar * key, vec3_t data); int xml_save_parameter_to_file (xmlTextWriterPtr writer, gchar * xml_leg, gchar * xml_key, gboolean doid, int xml_id, gchar * value); int save_preferences_to_xml_file (); ColRGBA get_spec_color (int z, , element_color * clist); gboolean are_identical_colors (ColRGBA col_a, ColRGBA col_b); gboolean not_in_cutoffs (int z_a, int z_b); float get_radius (int object, int col, int z, element_radius * rad_list); double xml_string_to_double (xmlChar * content); G_MODULE_EXPORT gboolean pref_color_button_event (GtkWidget * widget, GdkEventButton * event, gpointer data); bond_cutoff * duplicate_cutoffs (bond_cutoff * old_cutoff); element_radius * duplicate_element_radius (element_radius * old_list); element_color * duplicate_element_color (element_color * old_list); void set_parameter (gchar * content, gchar * key, int vid, dint * bond, vec3_t * vect, float start, float end, ColRGBA * col); void read_parameter (xmlNodePtr parameter_node); void read_light (xmlNodePtr light_node); void read_preferences (xmlNodePtr preference_node); void read_style_from_xml_file (xmlNodePtr style_node, int style); void read_preferences_from_xml_file (); void set_atomes_defaults (); void set_atomes_preferences (); void color_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void radius_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void color_button_event (GtkWidget * widget, double event_x, double event_y, guint event_button, gpointer data); void add_cut_box (); void dyna_parameters (GtkWidget * vbox, int cid); void clean_all_tmp (); void duplicate_rep_data (rep_data * new_rep, rep_data * old_rep); void duplicate_background_data (background * new_back, background * old_back); void duplicate_box_data (box * new_box, box * old_box); void duplicate_axis_data (axis * new_axis, axis * old_axis); void prepare_tmp_default (); void save_preferences (); void adjust_preferences_window (); void create_configuration_dialog (); void add_global_option (GtkWidget * vbox, tint * oid); G_MODULE_EXPORT void set_measures (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_selection_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void toggled_default_stuff (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggled_default_stuff (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_default_stuff (GtkEntry * res, gpointer data); G_MODULE_EXPORT void edit_pref (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer user_data); G_MODULE_EXPORT void edit_chem_preferences (GtkDialog * edit_chem, gint response_id, gpointer data); G_MODULE_EXPORT void run_ac_color (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void pref_color_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void set_stuff_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void edit_species_parameters (GtkButton * but, gpointer data); G_MODULE_EXPORT void set_default_style (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_default_map (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_default_num_delta (GtkEntry * res, gpointer data); G_MODULE_EXPORT void tunit_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void edit_pc_value (GtkEntry * res, gpointer data); G_MODULE_EXPORT void toggle_use_cutoff (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggle_use_cutoff (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void totcut_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void cut_spec_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_cutoffs_default (GtkButton * but, gpointer data); G_MODULE_EXPORT void update_projects (GtkDialog * proj_sel, gint response_id, gpointer data); G_MODULE_EXPORT void toggle_select_project (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggle_select_project (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void restore_all_defaults (GtkButton * but, gpointer data); G_MODULE_EXPORT void edit_preferences (GtkDialog * edit_prefs, gint response_id, gpointer data); G_MODULE_EXPORT void set_default_options (GtkButton * but, gpointer data); GtkWidget * pref_list (gchar * mess[2], int nelem, gchar * mlist[nelem][2], gchar * end); GtkWidget * view_preferences (); GtkWidget * over_param (int object, int style); GtkWidget * style_tab (int style); GtkWidget * model_preferences (); GtkWidget * combo_map (int obj); GtkWidget * opengl_preferences (); GtkWidget * calc_preferences (); GtkTreeModel * style_combo_tree (); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" #include "glview.h" #include "glwin.h" #include "bind.h" #include "preferences.h" #include #include #include #include #include #include #ifndef G_OS_WIN32 #include #else #include #endif extern void apply_default_parameters_to_project (project * this_proj, gboolean with_analysis); extern xmlNodePtr findnode (xmlNodePtr startnode, char * nname); extern int search_type; extern void edit_bonds (GtkWidget * vbox); extern void update_omega_max (); extern void calc_rings (GtkWidget * vbox); extern void calc_sk_t (GtkWidget * vbox); extern gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); extern G_MODULE_EXPORT gboolean scroll_scale_quality (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); extern GtkWidget * materials_tab (glwin * view, opengl_edition * ogl_edit, Material * the_mat); extern GtkWidget * lights_tab (glwin * view, opengl_edition * ogl_edit, Lightning * the_light); extern GtkWidget * fog_tab (glwin * view, opengl_edition * ogl_edit, Fog * the_fog); extern GtkWidget * labels_tab (glwin * view, int lid); extern void update_light_data (int li, opengl_edition * ogl_win); extern void setup_fog_dialogs (opengl_edition * ogl_edit, int fid); extern G_MODULE_EXPORT void box_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void axis_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void representation_advanced (GtkWidget * widg, gpointer data); extern void update_gradient_widgets (gradient_edition * gradient_win, background * back); extern G_MODULE_EXPORT void gradient_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void scale_quality (GtkRange * range, gpointer data); extern void duplicate_fog (Fog * new_fog, Fog * old_fog); extern void duplicate_material (Material * new_mat, Material * old_mat); extern void duplicate_screen_label (screen_label * new_lab, screen_label * old_lab); extern Light * init_light_source (int type, float size); extern Light ** copy_light_sources (int dima, int dimb, Light ** old_sp); extern GtkWidget * lightning_fix (glwin * view, Material * this_material); extern GtkWidget * adv_box (GtkWidget * box, char * lab, int vspace, int size, float xalign); extern float mat_min_max[5][2]; extern GtkWidget * omega_max_hbox; extern GtkWidget * omega_max_info; extern GtkWidget * skt_all_info; GtkWidget * dyna_entry[2][2]; GtkWidget * dyna_combo[2]; GtkWidget * atom_entry_over[8]; GtkWidget * bond_entry_over[6]; GtkWidget * meas_combo; GtkWidget * meas_box[2]; GtkWidget * sel_combo; GtkWidget * sel_box[2]; GtkWidget * preference_notebook = NULL; double default_totcut; double tmp_totcut; bond_cutoff * default_bond_cutoff; bond_cutoff * tmp_bond_cutoff; // Generic parameters for all calculations #define NUM_DELTA 9 int * default_num_delta = NULL; /*!< Number of x points: \n 0 = gr, \n 1 = sq, \n 2 = sk, \n 3 = gftt, \n 4 = bd, \n 5 = an, \n 6 = sp \n 7 = msd \n 8 = S(q,w) */ int * tmp_num_delta = NULL; // Dynamical calculations double * default_delta_t = NULL; /*!< 0 = time step, \n 1 = time unit , in: fs, ps, ns, µs, ms */ double * tmp_delta_t = NULL; // Ring statistics int * default_rsparam = NULL; /*!< Ring statistics parameters: \n 0 = Default search, \n 1 = Initial node(s) for the search: selected chemical species or all atoms, \n 2 = Maximum size of ring for the search Rmax, \n 3 = Maximum number of ring(s) per MD step NUMA, \n 4 = Search only for ABAB rings or not, \n 5 = Include Homopolar bond(s) in the analysis or not, \n 6 = Include homopolar bond(s) when calculating the distance matrix */ int * tmp_rsparam = NULL; // Chain statistics int * default_csparam = NULL; /*!< Chain statistics parameters: \n 0 = Initial node(s) for the search: selected chemical species or all atoms, \n 1 = Maximum size for a chain Cmax, \n 2 = Maximum number of chain(s) per MD step CNUMA, \n 3 = Search only for AAAA chains or not, \n 4 = Search only for ABAB chains or not, \n 5 = Include Homopolar bond(s) in the analysis or not, \n 6 = Search only for 1-(2)n-1 chains */ int * tmp_csparam = NULL; // F(k,t) and S(q,w) gboolean default_skt_sets; /*!< Output calculation results for all t steps */ int default_skt_n_sets; /*!< Number of configuration(s) to save when computing S(k,t) */ int default_sqw_n_sets; /*!< Number of q vector(s) to compute S(q,w) */ int default_sqw_freq; /*!< Frequency intervals */ gboolean tmp_skt_sets; int tmp_skt_n_sets; int tmp_sqw_n_sets; int tmp_sqw_freq; // 5+3 styles + 5+3 cloned styles element_radius * default_atomic_rad[16]; element_radius * tmp_atomic_rad[16]; // 3 styles + 3 cloned styles element_radius * default_bond_rad[6]; element_radius * tmp_bond_rad[6]; // atoms + clones element_color * default_atom_color[2]; element_color * tmp_atom_color[2]; element_color * default_label_color[2]; element_color * tmp_label_color[2]; int radius_id; int * default_opengl = NULL; int * tmp_opengl = NULL; Material default_material; Material tmp_material; Lightning default_lightning; Lightning tmp_lightning; Fog default_fog; Fog tmp_fog; // Model gboolean default_clones; gboolean tmp_clones; gboolean default_cell; gboolean tmp_cell; gboolean * default_o_at_rs; gboolean * tmp_o_at_rs; double * default_at_rs; double * tmp_at_rs; gboolean * default_o_bd_rw; gboolean * tmp_o_bd_rw; double * default_bd_rw; double * tmp_bd_rw; screen_label default_label[5]; screen_label * tmp_label[5]; int default_acl_format[2]; int tmp_acl_format[2]; gboolean default_mtilt[2]; gboolean tmp_mtilt[2]; int default_mpattern[2]; int tmp_mpattern[2]; int default_mfactor[2]; int tmp_mfactor[2]; double default_mwidth[2]; double tmp_mwidth[2]; rep_data default_rep; rep_data * tmp_rep = NULL; rep_edition * pref_rep_win = NULL; background default_background; background * tmp_background = NULL; gradient_edition * pref_gradient_win = NULL; box default_box; box * tmp_box = NULL; box_edition * pref_box_win = NULL; axis default_axis; axis * tmp_axis = NULL; axis_edition * pref_axis_win = NULL; ColRGBA default_sel_color[2]; ColRGBA tmp_sel_color[2]; gboolean preferences = FALSE; opengl_edition * pref_ogl_edit = NULL; gchar * pref_error = NULL; tint * pref_pointer = NULL; gchar * xml_style_leg[6] = {"ball_and_stick", "wireframes", "spacefilled", "spheres", "cylinders", "dots"}; gchar * xml_filled_leg[4] = {"covalent", "ionic", "van-der-waals", "crystal"}; gchar * xml_atom_leg[3] = {"atoms_radius", "dot_size", "sphere_radius"}; gchar * xml_bond_leg[3] = {"bond_radius", "wireframe_width", "cylinder_radius"}; /*! \fn int xml_save_color_to_file (xmlTextWriterPtr writer, int did, gchar * legend, gchar * key, ColRGBA col) \brief save color data (red, green, blue, alpha) to XML file \param writer the XML writer to update \param did id, if any \param legend the corresponding legend \param data the data to save */ int xml_save_color_to_file (xmlTextWriterPtr writer, int did, gchar * legend, gchar * key, ColRGBA col) { int rc; gchar * str; rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"parameter"); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute(writer, BAD_CAST (const xmlChar *)"info", BAD_CAST legend); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"key", BAD_CAST key); if (rc < 0) return 0; if (did > -1) { str = g_strdup_printf ("%d", did); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"id", BAD_CAST str); g_free (str); if (rc < 0) return 0; } str = g_strdup_printf ("%f", col.red); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"red", BAD_CAST str); g_free (str); if (rc < 0) return 0; str = g_strdup_printf ("%f", col.green); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"green", BAD_CAST str); g_free (str); if (rc < 0) return 0; str = g_strdup_printf ("%f", col.blue); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"blue", BAD_CAST str); g_free (str); if (rc < 0) return 0; str = g_strdup_printf ("%f", col.alpha); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"alpha", BAD_CAST str); g_free (str); if (rc < 0) return 0; rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; return 1; } /*! \fn int xml_save_xyz_to_file (xmlTextWriterPtr writer, int did, gchar * legend, gchar * key, vec3_t data) \brief save vector data (x,y,z) to XML file \param writer the XML writer to update \param did id, if any \param legend the corresponding legend \param data the data to save */ int xml_save_xyz_to_file (xmlTextWriterPtr writer, int did, gchar * legend, gchar * key, vec3_t data) { int rc; gchar * str; rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"parameter"); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute(writer, BAD_CAST (const xmlChar *)"info", BAD_CAST legend); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"key", BAD_CAST key); if (rc < 0) return 0; if (did > -1) { str = g_strdup_printf ("%d", did); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"id", BAD_CAST str); g_free (str); if (rc < 0) return 0; } str = g_strdup_printf ("%f", data.x); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"x", BAD_CAST str); g_free (str); if (rc < 0) return 0; str = g_strdup_printf ("%f", data.y); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"y", BAD_CAST str); g_free (str); if (rc < 0) return 0; str = g_strdup_printf ("%f", data.z); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"z", BAD_CAST str); g_free (str); if (rc < 0) return 0; rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; return 1; } /*! \fn int xml_save_parameter_to_file (xmlTextWriterPtr writer, gchar * xml_leg, gchar * xml_key, gboolean doid, int xml_id, gchar * value) \brief save single parameter to XML file \param writer the XML writer to update \param xml_leg information \param xml_key key \param doid add id attribute to parameter (1/0) \param xml_id value for id \param value parameter to write */ int xml_save_parameter_to_file (xmlTextWriterPtr writer, gchar * xml_leg, gchar * xml_key, gboolean doid, int xml_id, gchar * value) { int rc; rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"parameter"); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"info", BAD_CAST xml_leg); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"key", BAD_CAST xml_key); if (rc < 0) return 0; if (doid) { gchar * str; str = g_strdup_printf ("%d", xml_id); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"id", BAD_CAST (const xmlChar *)str); g_free (str); if (rc < 0) return 0; } rc = xmlTextWriterWriteFormatString (writer, "%s", value); if (rc < 0) return 0; rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; return 1; } /*! \fn int save_preferences_to_xml_file () \brief save software preferences to XML file */ int save_preferences_to_xml_file () { int rc; pref_error = NULL; if (ATOMES_CONFIG_DIR) { #ifdef G_OS_WIN32 if (! CreateDirectory(ATOMES_CONFIG_DIR, NULL) && GetLastError() != ERROR_ALREADY_EXISTS) { pref_error = g_strdup_printf (_("Error: impossible to create %s (code: %lu)\n"), ATOMES_CONFIG_DIR, GetLastError()); return 0; } #else if (mkdir(ATOMES_CONFIG_DIR, S_IRWXU | S_IRWXG | S_IRWXO) && errno != EEXIST) { pref_error = g_strdup_printf (_("Error: impossible to create %s (code: %s)\n"), ATOMES_CONFIG_DIR, strerror(errno)); return 0; } #endif } xmlTextWriterPtr writer; gchar * xml_delta_num_leg[NUM_DELTA] = {i18n("g(r): number of δr"), i18n("s(q): number of δq"), i18n("s(k): number of δk"), i18n("g(r) FFT: number of δr"), i18n("Dij: number of δr [min(Dij)-max(Dij)]"), i18n("Angles distribution: number of δθ [0-180°]"), i18n("Spherical harmonics: l(max) in [2-40]"), i18n("MSD: steps between configurations"), i18n("F(k,t): number of δk")}; gchar * xml_delta_t_leg[2] = {i18n("MSD: time steps δt"), i18n("MSD: time unit")}; gchar * xml_rings_leg[7] = {i18n("Default search"), i18n("Atom(s) to initiate the search from"), i18n("Maximum size for a ring"), i18n("Maximum number of rings of size n per MD step"), i18n("Only search for ABAB rings"), i18n("No homopolar bonds in the rings (A-A, B-B ...)"), i18n("No homopolar bonds in the connectivity matrix")}; gchar * xml_chain_leg[7] = {i18n("Atom(s) to initiate the search from"), i18n("Maximum size for a ring"), i18n("Maximum number of rings of size n per MD step"), i18n("Only search for AAAA chains"), i18n("Only search for ABAB chains"), i18n("No homopolar bonds in the chains (A-A, B-B ...)"), i18n("Only search for 1-(2)n-1 chains")}; gchar * xml_skt_leg[4] = {i18n("Analyze all correlated δt steps"), i18n("Number of analyzed δt steps"), i18n("Number of analyzed q points"), i18n("Number of frequency points")}; gchar * xml_opengl_leg[5] = {i18n("Default style"), i18n("Atom(s) color map"), i18n("Polyhedra color map"), i18n("Quality"), i18n("Ray Tracing")}; gchar * xml_material_leg[8] = {i18n("Predefine material"), i18n("Lightning model"), i18n("Metallic"), i18n("Roughness"), i18n("Back lightning"), "Gamma", i18n("Opacity"), i18n("Albedo")}; gchar * xml_lightning_leg[7] = {i18n("Type"), i18n("Fix"), i18n("Position"), i18n("Direction"), i18n("Intensity"), i18n("Attenuation"), i18n("Spot specifics")}; gchar * xml_fog_leg[5] = {i18n("Mode"), i18n("Type"), i18n("Density"), i18n("Depth"), i18n("Color")}; gchar * xml_model_leg[2] = {i18n("Show clones"), i18n("Show box")}; gchar * xml_label_leg[6] = {i18n("Position"), i18n("Rendering") , i18n("Scaling"), i18n("Font"), i18n("Shift"), i18n("Colors")}; gchar * xml_axis_leg[3] = {i18n("Legend on x"), i18n("Legend on y"), i18n("Legend on z")}; /* Create a new XmlWriter for ATOMES_CONFIG, with no compression. */ writer = xmlNewTextWriterFilename (ATOMES_CONFIG, 0); if (writer == NULL) return 0; rc = xmlTextWriterSetIndent(writer, 1); if (rc < 0) return 0; /* Start the document with the xml default for the version, * encoding MY_ENCODING and the default for the standalone * declaration. */ rc = xmlTextWriterStartDocument (writer, NULL, MY_ENCODING, NULL); if (rc < 0) return 0; rc = xmlTextWriterWriteComment (writer, (const xmlChar *)_("atomes preferences XML file")); if (rc < 0) return 0; rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"atomes_preferences-xml"); if (rc < 0) return 0; rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"analysis"); if (rc < 0) return 0; int i, j, k, l, m, n, o; gchar * str; if (default_totcut > 0.0 || default_bond_cutoff) { rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"cutoffs"); if (rc < 0) return 0; if (default_totcut > 0.0) { str = g_strdup_printf ("%lf", default_totcut); rc = xml_save_parameter_to_file (writer, _("Total cutoff"), "default_totcut", TRUE, 0, str); g_free (str); if (! rc) return 0; } if (default_bond_cutoff) { rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"partials"); if (rc < 0) return 0; bond_cutoff * tmp_cut = default_bond_cutoff; while (tmp_cut) { rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"parameter"); if (rc < 0) return 0; str = g_strdup_printf (_("cutoff %s-%s"), periodic_table_info[tmp_cut -> Z[0]].lab, periodic_table_info[tmp_cut -> Z[1]].lab); rc = xmlTextWriterWriteAttribute(writer, BAD_CAST (const xmlChar *)"info", BAD_CAST str); g_free (str); if (rc < 0) return 0; str = g_strdup_printf ("%d", tmp_cut -> Z[0]); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"α", BAD_CAST str); g_free (str); if (rc < 0) return 0; str = g_strdup_printf ("%d", tmp_cut -> Z[1]); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"β", BAD_CAST str); g_free (str); if (rc < 0) return 0; str = g_strdup_printf ("%lf", tmp_cut -> cutoff); rc = xmlTextWriterWriteFormatString (writer, "%s", str); g_free (str); if (rc < 0) return 0; rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; tmp_cut = tmp_cut -> next; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } for (i=0; i type); rc = xml_save_parameter_to_file (writer, _(xml_lightning_leg[0]), "light.type", FALSE, 0, str); g_free (str); if (! rc) return 0; str = g_strdup_printf ("%d", default_lightning.spot[i] -> fix); rc = xml_save_parameter_to_file (writer, _(xml_lightning_leg[1]), "light.fix", FALSE, 0, str); g_free (str); if (! rc) return 0; if (default_lightning.spot[i] -> type) { rc = xml_save_xyz_to_file (writer, -1, _(xml_lightning_leg[2]), "light.position", default_lightning.spot[i] -> position); if (! rc) return rc; } if (default_lightning.spot[i] -> type != 1) { rc = xml_save_xyz_to_file (writer, -1, _(xml_lightning_leg[3]), "light.direction", default_lightning.spot[i] -> direction); if (! rc) return rc; } rc = xml_save_xyz_to_file (writer, -1, _(xml_lightning_leg[4]), "light.intensity", default_lightning.spot[i] -> intensity); if (! rc) return rc; if (default_lightning.spot[i] -> type) { rc = xml_save_xyz_to_file (writer, -1, _(xml_lightning_leg[5]), "light.attenuation", default_lightning.spot[i] -> attenuation); if (! rc) return rc; rc = xml_save_xyz_to_file (writer, -1, _(xml_lightning_leg[6]), "light.spot", default_lightning.spot[i] -> spot_data); if (! rc) return rc; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } // End lightning rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"fog"); if (rc < 0) return 0; // Mode str = g_strdup_printf ("%d", default_fog.mode); rc = xml_save_parameter_to_file (writer, _(xml_fog_leg[0]), "fog.mode", TRUE, 0, str); g_free (str); if (! rc) return 0; // Type str = g_strdup_printf ("%d", default_fog.based); rc = xml_save_parameter_to_file (writer, _(xml_fog_leg[1]), "fog.type", TRUE, 1, str); g_free (str); if (! rc) return 0; // Density str = g_strdup_printf ("%f", default_fog.density); rc = xml_save_parameter_to_file (writer, _(xml_fog_leg[2]), "fog.density", TRUE, 2, str); g_free (str); if (! rc) return 0; // Depth rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"parameter"); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"info", BAD_CAST xml_fog_leg[3]); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"key", BAD_CAST "fog.depth"); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"id", BAD_CAST "3"); if (rc < 0) return 0; str = g_strdup_printf ("%f", default_fog.depth[0]); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"start", BAD_CAST str); g_free (str); if (rc < 0) return 0; str = g_strdup_printf ("%f", default_fog.depth[1]); rc = xmlTextWriterWriteAttribute (writer, BAD_CAST (const xmlChar *)"end", BAD_CAST str); g_free (str); if (rc < 0) return 0; rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; // Color rc = xml_save_xyz_to_file (writer, 4, xml_fog_leg[4], "fog.color", default_fog.color); if (! rc) return rc; // End fog rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; // End opengl rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; // Model rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"model"); if (rc < 0) return 0; if (default_clones) { str = g_strdup_printf ("%d", default_clones); rc = xml_save_parameter_to_file (writer, _(xml_model_leg[0]), "default_clones", FALSE, 0, str); g_free (str); if (! rc) return 0; } if (! default_cell) { str = g_strdup_printf ("%d", default_cell); rc = xml_save_parameter_to_file (writer, _(xml_model_leg[1]), "default_cell", FALSE, 0, str); g_free (str); if (! rc) return 0; } rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"atoms_and_bonds"); if (rc < 0) return 0; element_radius * tmp_rad; gboolean do_atoms; gboolean do_bonds; gchar * str_a, * str_b; for (i=0; i rad); rc = xml_save_parameter_to_file (writer, periodic_table_info[tmp_rad -> Z].lab, "default_atomic_rad", TRUE, tmp_rad -> Z, str); g_free (str); if (! rc) return 0; tmp_rad = tmp_rad -> next; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } } } } if (do_bonds) { j = (i < 2) ? i : 2; for (k=0; k<2; k++) { if (default_o_bd_rw[j+k*3]) { str_a = (k) ? g_strdup_printf ("clone-%s", _(xml_bond_leg[j])) : g_strdup_printf ("%s", _(xml_bond_leg[j])); str_b = g_strdup_printf ("%f", default_bd_rw[j+k*3]); rc = xml_save_parameter_to_file (writer, str_a, "default_bd_rw", TRUE, j+k*3, str_b); g_free (str_a); g_free (str_b); if (! rc) return 0; } if (default_bond_rad[j+k*3]) { str_a = (k) ? g_strdup_printf ("clone-%s", _(xml_bond_leg[j])) : g_strdup_printf ("%s", _(xml_bond_leg[j])); rc = xmlTextWriterStartElement (writer, BAD_CAST str_a); g_free (str_a); if (rc < 0) return 0; tmp_rad = default_bond_rad[j+k*3]; while (tmp_rad) { str = g_strdup_printf ("%f", tmp_rad -> rad); rc = xml_save_parameter_to_file (writer, periodic_table_info[tmp_rad -> Z].lab, "default_bond_rad", TRUE, tmp_rad -> Z, str); g_free (str); if (! rc) return 0; tmp_rad = tmp_rad -> next; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } } } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } } // End atoms_and_bonds rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; element_color * tmp_col; // atoms and clones labels rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"labels"); if (rc < 0) return 0; gchar * obj[2]={"atoms", "clones"}; for (i=0; i<2; i++) { rc = xmlTextWriterStartElement (writer, BAD_CAST obj[i]); if (rc < 0) return 0; str = g_strdup_printf ("%d", default_label[i].position); rc = xml_save_parameter_to_file (writer, _(xml_label_leg[0]), "default_label", TRUE, 0, str); g_free (str); if (! rc) return 0; str = g_strdup_printf ("%d", default_label[i].render); rc = xml_save_parameter_to_file (writer, _(xml_label_leg[1]), "default_label", TRUE, 1, str); g_free (str); if (! rc) return 0; str = g_strdup_printf ("%d", default_label[i].scale); rc = xml_save_parameter_to_file (writer, _(xml_label_leg[2]), "default_label", TRUE, 2, str); g_free (str); if (! rc) return 0; rc = xml_save_parameter_to_file (writer, _(xml_label_leg[3]), "default_label", TRUE, 3, default_label[i].font); if (! rc) return 0; rc = xml_save_xyz_to_file (writer, 4, _(xml_label_leg[4]), "default_label", vec3(default_label[i].shift[0], default_label[i].shift[1], default_label[i].shift[2])); if (! rc) return 0; str = g_strdup_printf ("%d", default_acl_format[i]); rc = xml_save_parameter_to_file (writer, _("Format"), "default_label", TRUE, 5, str); g_free (str); if (! rc) return 0; if (default_label[i].n_colors || default_label_color[i]) { rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"colors"); if (rc < 0) return 0; if (default_label[i].n_colors) { xml_save_color_to_file (writer, i, _("Only label color"), "only_label_color", default_label[i].color[0]); } else { tmp_col = default_label_color[i]; while (tmp_col) { rc = xml_save_color_to_file (writer, tmp_col -> Z, periodic_table_info[tmp_col -> Z].lab, "default_label_color", tmp_col -> col); if (! rc) return 0; tmp_col = tmp_col -> next; } } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } // End atoms and clones colors rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; do_atoms = (default_atom_color[0] || default_atom_color[1]) ? TRUE : FALSE; if (do_atoms) { // atoms and clones colors rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"colors"); if (rc < 0) return 0; for (i=0; i<2; i++) { if (default_atom_color[i]) { rc = xmlTextWriterStartElement (writer, BAD_CAST obj[i]); if (rc < 0) return 0; tmp_col = default_atom_color[i]; while (tmp_col) { rc = xml_save_color_to_file (writer, tmp_col -> Z, periodic_table_info[tmp_col -> Z].lab, "default_atom_color", tmp_col -> col); if (! rc) return 0; tmp_col = tmp_col -> next; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } } } if (default_box.box != NONE) { rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"box"); if (rc < 0) return 0; str = g_strdup_printf ("%f", (default_box.box == WIREFRAME) ? default_box.line : default_box.rad); rc = xml_save_parameter_to_file (writer, (default_box.box == WIREFRAME) ? _("Wireframe width") : _("Cylinder radius"), "default_box", TRUE, default_box.box, str); g_free (str); if (! rc) return 0; rc = xml_save_color_to_file (writer, -1, _("Color"), "default_box", default_box.color); if (! rc) return 0; // End box rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } // End model rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; // View rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"view"); if (rc < 0) return 0; // Background rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"background"); str = g_strdup_printf ("%d", default_background.gradient); rc = xml_save_parameter_to_file (writer, _("Gradient"), "default_background", TRUE, 0, str); g_free (str); if (! rc) return 0; if (default_background.gradient) { str = g_strdup_printf ("%d", default_background.direction); rc = xml_save_parameter_to_file (writer, _("Direction"), "default_background", TRUE, 1, str); g_free (str); if (! rc) return 0; str = g_strdup_printf ("%f", default_background.position); rc = xml_save_parameter_to_file (writer, _("Mixed position"), "default_background", TRUE, 2, str); g_free (str); if (! rc) return 0; for (i=0; i<2; i++) { rc = xml_save_color_to_file (writer, i+3, _("Color"), "default_background", default_background.gradient_color[i]); if (! rc) return 0; } } else { rc = xml_save_color_to_file (writer, -1, _("Color"), "default_background", default_background.color); if (! rc) return 0; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; // Representation rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"representation"); if (rc < 0) return 0; str = g_strdup_printf ("%d", default_rep.rep); rc = xml_save_parameter_to_file (writer, _("Representation type"), "default_rep", TRUE, 0, str); g_free (str); if (! rc) return 0; if (default_rep.rep) { str = g_strdup_printf ("%lf", default_rep.gnear); rc = xml_save_parameter_to_file (writer, _("Camera depth"), "default_rep", TRUE, 1, str); g_free (str); if (! rc) return 0; } str = g_strdup_printf ("%lf", 1.0 - 0.5*default_rep.zoom); rc = xml_save_parameter_to_file (writer, _("Zoom"), "default_rep", TRUE, 2, str); g_free (str) ; if (! rc) return 0; for (i=0; i<2; i++) { str = g_strdup_printf ("%lf", - default_rep.c_angle[i]); rc = xml_save_parameter_to_file (writer, (i) ? _("Camera pitch") : _("Camera heading"), "default_rep", TRUE, 3+i, str); g_free (str) ; if (! rc) return 0; } for (i=0; i<2; i++) { str = g_strdup_printf ("%lf", default_rep.c_shift[i]); rc = xml_save_parameter_to_file (writer, (i) ? _("Camera x") : _("Camera y"), "default_rep", TRUE, 5+i, str); g_free (str) ; if (! rc) return 0; } // End representation rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; if (default_axis.axis != NONE) { rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"axis"); if (rc < 0) return 0; if (default_axis.t_pos != NONE) { str = g_strdup_printf ("%d", default_axis.t_pos); rc = xml_save_parameter_to_file (writer, _("Template position"), "default_axis", TRUE, 0, str); g_free (str); if (! rc) return 0; } else { rc = xml_save_xyz_to_file (writer, 0, _("Custom position"), "default_axis", vec3(default_axis.c_pos[0], default_axis.c_pos[1], default_axis.c_pos[2])); if (! rc) return 0; } str = g_strdup_printf ("%f", (default_axis.axis == WIREFRAME) ? default_axis.line : default_axis.rad); rc = xml_save_parameter_to_file (writer, (default_axis.axis == WIREFRAME) ? _("Wireframe width") : _("Cylinder radius"), "default_axis", TRUE, default_axis.axis, str); g_free (str); if (! rc) return 0; str = g_strdup_printf ("%f", default_axis.length); rc = xml_save_parameter_to_file (writer, _("Length"), "default_axis", TRUE, 2, str); g_free (str); if (! rc) return 0; if (default_axis.labels) { rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"labels"); if (rc < 0) return 0; str = g_strdup_printf ("%d", default_label[2].render); rc = xml_save_parameter_to_file (writer, _(xml_label_leg[1]), "default_label", TRUE, 1, str); g_free (str); if (! rc) return 0; str = g_strdup_printf ("%d", default_label[2].scale); rc = xml_save_parameter_to_file (writer, _(xml_label_leg[2]), "default_label", TRUE, 2, str); g_free (str); if (! rc) return 0; rc = xml_save_parameter_to_file (writer, _(xml_label_leg[3]), "default_label", TRUE, 3, default_label[2].font); if (! rc) return 0; for (i=0; i<3; i++) { rc = xml_save_parameter_to_file (writer, _(xml_axis_leg[i]), "axis_legend", TRUE, i, default_axis.title[i]); if (! rc) return 0; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } if (default_axis.color) { for (i=0; i<3; i++) { rc = xml_save_color_to_file (writer, i, _("Color"), "default_axis", default_axis.color[i]); if (! rc) return 0; } } // End axis rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; } rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"measures"); if (rc < 0) return 0; gchar * m_key[2]={"standard", "selection"}; for (i=0; i<2; i++) { rc = xmlTextWriterStartElement (writer, BAD_CAST m_key[i]); if (rc < 0) return 0; rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"labels"); if (rc < 0) return 0; str = g_strdup_printf ("%d", default_label[i+3].position); rc = xml_save_parameter_to_file (writer, _(xml_label_leg[0]), "default_label", TRUE, 0, str); g_free (str); if (! rc) return 0; str = g_strdup_printf ("%d", default_label[i+3].render); rc = xml_save_parameter_to_file (writer, _(xml_label_leg[1]), "default_label", TRUE, 1, str); g_free (str); if (! rc) return 0; str = g_strdup_printf ("%d", default_label[i+3].scale); rc = xml_save_parameter_to_file (writer, _(xml_label_leg[2]), "default_label", TRUE, 2, str); g_free (str); if (! rc) return 0; rc = xml_save_parameter_to_file (writer, _(xml_label_leg[3]), "default_label", TRUE, 3, default_label[i+3].font); if (! rc) return 0; xml_save_color_to_file (writer, i+3, _("Font color"), "default_font_color", default_label[i+3].color[0]); if (! rc) return 0; rc = xmlTextWriterEndElement (writer); // End label if (rc < 0) return 0; // mtilt str = g_strdup_printf ("%d", default_mtilt[i]); rc = xml_save_parameter_to_file (writer, _("Tilt along"), "default_mtilt", TRUE, i, str); g_free (str); if (! rc) return 0; // mtilt str = g_strdup_printf ("%d", default_mpattern[i]); rc = xml_save_parameter_to_file (writer, _("Pattern"), "default_mpattern", TRUE, i, str); g_free (str); if (! rc) return 0; // mfactor str = g_strdup_printf ("%d", default_mfactor[i]); rc = xml_save_parameter_to_file (writer, _("Factor"), "default_mfactor", TRUE, i, str); g_free (str); if (! rc) return 0; // mfactor str = g_strdup_printf ("%lf", default_mwidth[i]); rc = xml_save_parameter_to_file (writer, _("Width"), "default_mwidth", TRUE, i, str); g_free (str); if (! rc) return 0; rc = xmlTextWriterEndElement (writer); // End measures type if (rc < 0) return 0; } rc = xmlTextWriterEndElement (writer); // End measures if (rc < 0) return 0; rc = xmlTextWriterStartElement (writer, BAD_CAST (const xmlChar *)"atom-selections"); if (rc < 0) return 0; for (i=0; i<2; i++) { xml_save_color_to_file (writer, i, _("Selection color"), "default_sel_color", default_sel_color[i]); if (! rc) return 0; } rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; // End view rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; rc = xmlTextWriterEndElement (writer); if (rc < 0) return 0; rc = xmlTextWriterEndDocument (writer); if (rc < 0) return 0; xmlFreeTextWriter (writer); return 1; } int label_id; /*! \fn double xml_string_to_double (xmlChar * content) \brief convert XML string to double \param content the string to convert */ double xml_string_to_double (xmlChar * content) { return (g_strcmp0((const char *)content, "") == 0) ? 0.0 : string_to_double ((gpointer)content); } /*! \fn void set_parameter (xmlChar * content, gchar * key, int vid, dint * bond, vec3_t * vect, float start, float end, ColRGBA * col) \brief set default parameter \param content the string content \param key the name of variable to set \param vid the id number to set \param bond atoms, if any \param vect vector to set, if any \param start initial value, if any, -1.0 otherwise \param end final value, if any, -1.0 otherwise \param col color to set, if any */ void set_parameter (xmlChar * content, gchar * key, int vid, dint * bond, vec3_t * vect, float start, float end, ColRGBA * col) { element_radius * tmp_rad; element_color * tmp_col; if (bond) { bond_cutoff * cut; if (default_bond_cutoff) { cut = default_bond_cutoff; while (cut -> next) { cut = cut -> next; } cut -> next = g_malloc0(sizeof*cut); cut = cut -> next; } else { default_bond_cutoff = g_malloc0(sizeof*default_bond_cutoff); cut = default_bond_cutoff; } cut -> Z[0] = bond -> a; cut -> Z[1] = bond -> b; cut -> use = TRUE; cut -> cutoff = xml_string_to_double(content); } else if (g_strcmp0(key, "default_totcut") == 0) { default_totcut = xml_string_to_double(content); } else if (g_strcmp0(key, "default_num_delta") == 0) { default_num_delta[vid] = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_delta_t") == 0) { default_delta_t[vid] = xml_string_to_double(content); } else if (g_strcmp0(key, "default_rsparam") == 0) { default_rsparam[vid] = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_csparam") == 0) { default_csparam[vid] = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_skt_sets") == 0) { default_skt_sets = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_skt_n_sets") == 0) { default_skt_n_sets = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_sqw_n_sets") == 0) { default_sqw_n_sets = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_sqw_freq") == 0) { default_sqw_freq = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_opengl") == 0) { default_opengl[vid] = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_material") == 0) { if (vid < 0) { default_material.predefine = (int)xml_string_to_double(content); } else if (vid == 6 && vect) { default_material.albedo = * vect; } else { default_material.param[vid] = xml_string_to_double(content); } } else if (g_strcmp0(key, "default_lightning") == 0) { int lights = (int)xml_string_to_double(content); if (default_lightning.lights != lights) { int i; for (i=0; i type = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "light.fix") == 0) { default_lightning.spot[vid] -> fix = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "light.direction") == 0 && vect) { default_lightning.spot[vid] -> direction = * vect; } else if (g_strcmp0(key, "light.position") == 0 && vect) { default_lightning.spot[vid] -> position = * vect; } else if (g_strcmp0(key, "light.intensity") == 0 && vect) { default_lightning.spot[vid] -> intensity = * vect; } else if (g_strcmp0(key, "light.attenuation") == 0 && vect) { default_lightning.spot[vid] -> attenuation = * vect; } else if (g_strcmp0(key, "light.spot") == 0 && vect) { default_lightning.spot[vid] -> spot_data = * vect; } else if (g_strcmp0(key, "fog.mode") == 0) { default_fog.mode = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "fog.type") == 0) { default_fog.based = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "fog.density") == 0) { default_fog.density = xml_string_to_double(content); } else if (g_strcmp0(key, "fog.depth") == 0) { if (start != -1.0) default_fog.depth[0] = start; if (end != -1.0) default_fog.depth[1] = end; } else if (g_strcmp0(key, "fog.color") == 0 && vect) { default_fog.color = * vect; } else if (g_strcmp0(key, "default_cell") == 0) { default_cell = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_clones") == 0) { default_clones = (int)xml_string_to_double(content); } else if (g_strcmp0(key, "default_at_rs") == 0) { default_o_at_rs[vid] = TRUE; default_at_rs[vid] = xml_string_to_double(content); } else if (g_strcmp0(key, "default_bd_rw") == 0) { default_o_bd_rw[vid] = TRUE; default_bd_rw[vid] = xml_string_to_double(content); } else if (g_strcmp0(key, "default_atomic_rad") == 0) { if (default_atomic_rad[radius_id]) { tmp_rad = default_atomic_rad[radius_id]; while (tmp_rad -> next) { tmp_rad = tmp_rad -> next; } tmp_rad -> next = g_malloc0(sizeof*tmp_rad); tmp_rad = tmp_rad -> next; } else { default_atomic_rad[radius_id] = g_malloc0(sizeof*default_atomic_rad[radius_id]); tmp_rad = default_atomic_rad[radius_id]; } tmp_rad -> Z = vid; tmp_rad -> rad = xml_string_to_double(content); } else if (g_strcmp0(key, "default_bond_rad") == 0) { if (default_bond_rad[radius_id]) { tmp_rad = default_bond_rad[radius_id]; while (tmp_rad -> next) { tmp_rad = tmp_rad -> next; } tmp_rad -> next = g_malloc0(sizeof*tmp_rad); tmp_rad = tmp_rad -> next; } else { default_bond_rad[radius_id] = g_malloc0(sizeof*default_bond_rad[radius_id]); tmp_rad = default_bond_rad[radius_id]; } tmp_rad -> Z = vid; tmp_rad -> rad = xml_string_to_double(content); } else if (g_strcmp0(key, "default_label") == 0) { switch (vid) { case 0: default_label[label_id].position = (int)xml_string_to_double(content); break; case 1: default_label[label_id].render = (int)xml_string_to_double(content); break; case 2: default_label[label_id].scale = (int)xml_string_to_double(content); break; case 3: default_label[label_id].font = g_strdup_printf ("%s", content); break; case 4: default_label[label_id].shift[0] = vect -> x; default_label[label_id].shift[1] = vect -> y; default_label[label_id].shift[2] = vect -> z; break; case 5: default_acl_format[label_id] = (int)xml_string_to_double(content); break; } } else if (g_strcmp0(key, "default_label_color") == 0) { if (! vid) { default_label[label_id].color = g_malloc0(sizeof*default_label[label_id].color); default_label[label_id].color[0] = * col; } else { if (default_label_color[label_id]) { tmp_col = default_label_color[label_id]; while (tmp_col -> next) { tmp_col = tmp_col -> next; } tmp_col -> next = g_malloc0(sizeof*tmp_col); tmp_col = tmp_col -> next; } else { default_label_color[label_id] = g_malloc0(sizeof*default_label_color[label_id]); tmp_col = default_label_color[label_id]; } tmp_col -> Z = vid; tmp_col -> col = * col; } } else if (g_strcmp0(key, "default_font_color") == 0) { default_label[label_id].color = g_malloc0(sizeof*default_label[label_id].color); default_label[label_id].color[0] = * col; } else if (g_strcmp0(key, "default_atom_color") == 0) { if (default_atom_color[label_id]) { tmp_col = default_atom_color[label_id]; while (tmp_col -> next) { tmp_col = tmp_col -> next; } tmp_col -> next = g_malloc0(sizeof*tmp_col); tmp_col = tmp_col -> next; } else { default_atom_color[label_id] = g_malloc0(sizeof*default_atom_color[label_id]); tmp_col = default_atom_color[label_id]; } tmp_col -> Z = vid; tmp_col -> col = * col; } else if (g_strcmp0(key, "only_label_color") == 0) { default_label[label_id].n_colors = 1; default_label[label_id].color = g_malloc0(sizeof*default_label[label_id].color); default_label[label_id].color[0] = * col; } else if (g_strcmp0(key, "default_box") == 0) { if (col) { default_box.color = * col; } else { default_box.box = vid; if (default_box.box == WIREFRAME) { default_box.line = xml_string_to_double(content); } else { default_box.rad = xml_string_to_double(content); } } } else if (g_strcmp0(key, "default_background") == 0) { switch (vid) { case -1: if (col) default_background.color = * col; break; case 0: default_background.gradient = (int) xml_string_to_double(content); break; case 1: default_background.direction = (int) xml_string_to_double(content); break; case 2: default_background.position = xml_string_to_double(content); break; default: if (col) default_background.gradient_color[vid-3] = * col; break; } } else if (g_strcmp0(key, "default_rep") == 0) { switch (vid) { case 0: default_rep.rep = (int) xml_string_to_double(content); break; case 1: default_rep.gnear = xml_string_to_double(content); break; case 2: default_rep.zoom = 2.0*(1.0 - xml_string_to_double(content)); break; default: if (vid < 5) { default_rep.c_angle[vid-3] = - xml_string_to_double(content); } else { default_rep.c_shift[vid-5] = xml_string_to_double(content); } break; } } else if (g_strcmp0(key, "default_axis") == 0) { if (vect) { default_axis.c_pos[0] = vect -> x; default_axis.c_pos[1] = vect -> y; default_axis.c_pos[2] = vect -> z; } else if (col) { if (! default_axis.color) default_axis.color = g_malloc0(3*sizeof*default_axis.color); default_axis.color[vid] = * col; } else { if (vid == 1 || vid == 4) { default_axis.axis = vid; if (vid == 1) default_axis.line = xml_string_to_double(content); if (vid == 4) default_axis.rad = xml_string_to_double(content); } else if (vid == 2) { default_axis.length = xml_string_to_double(content); } else if (! vid) { default_axis.t_pos = (int) xml_string_to_double(content); } } } else if (g_strcmp0(key, "axis_legend") == 0) { default_axis.title[vid] = g_strdup_printf ("%s", content); } else if (g_strcmp0(key, "default_mtilt") == 0) { default_mtilt[vid] = (int) xml_string_to_double(content); } else if (g_strcmp0(key, "default_mpattern") == 0) { default_mpattern[vid] = (int) xml_string_to_double(content); } else if (g_strcmp0(key, "default_mfactor") == 0) { default_mfactor[vid] = (int) xml_string_to_double(content); } else if (g_strcmp0(key, "default_mwidth") == 0) { default_mwidth[vid] = xml_string_to_double(content); } else if (g_strcmp0(key, "default_sel_color") == 0) { if (col) { default_sel_color[vid] = * col; } } } /*! \fn void read_parameter (xmlNodePtr parameter_node) \brief read preferences from XML configuration \param parameter_node node the XML node that point to parameter */ void read_parameter (xmlNodePtr parameter_node) { xmlNodePtr p_node; xmlAttrPtr p_details; gboolean set_codevar, set_id; gboolean set_x, set_y, set_z; gboolean set_r, set_g, set_b, set_a; gboolean set_alpha, set_beta; ColRGBA col; gchar * key = NULL; xmlChar * content, * p_cont; int id; dint bond; float start, end; vec3_t vec; while (parameter_node) { content = xmlNodeGetContent(parameter_node); p_details = parameter_node -> properties; set_codevar = set_id = FALSE; set_x = set_y = set_z = FALSE; set_r = set_g = set_b = set_a = FALSE; set_alpha = set_beta = FALSE; start = end = -1.0; id = -1; while (p_details) { p_node = p_details -> children; if (p_node) { p_cont = xmlNodeGetContent(p_node); if (g_strcmp0("key",(char *)p_details -> name) == 0) { key = g_strdup_printf ("%s", p_cont); set_codevar = TRUE; } else if (g_strcmp0("id",(char *)p_details -> name) == 0) { id = (int) string_to_double ((gpointer)p_cont); set_id = TRUE; } else if (g_strcmp0("α",(char *)p_details -> name) == 0) { bond.a = (int) string_to_double ((gpointer)p_cont); set_alpha = TRUE; } else if (g_strcmp0("β",(char *)p_details -> name) == 0) { bond.b = (int) string_to_double ((gpointer)p_cont); set_beta = TRUE; } else if (g_strcmp0("x",(char *)p_details -> name) == 0) { vec.x = string_to_double ((gpointer)p_cont); set_x = TRUE; } else if (g_strcmp0("y",(char *)p_details -> name) == 0) { vec.y = string_to_double ((gpointer)p_cont); set_y = TRUE; } else if (g_strcmp0("z",(char *)p_details -> name) == 0) { vec.z = string_to_double ((gpointer)p_cont); set_z = TRUE; } else if (g_strcmp0("start",(char *)p_details -> name) == 0) { start = string_to_double ((gpointer)p_cont); } else if (g_strcmp0("end",(char *)p_details -> name) == 0) { end = string_to_double ((gpointer)p_cont); } else if (g_strcmp0("red",(char *)p_details -> name) == 0) { col.red = string_to_double ((gpointer)p_cont); set_r = TRUE; } else if (g_strcmp0("green",(char *)p_details -> name) == 0) { col.green = string_to_double ((gpointer)p_cont); set_g = TRUE; } else if (g_strcmp0("blue",(char *)p_details -> name) == 0) { col.blue = string_to_double ((gpointer)p_cont); set_b = TRUE; } else if (g_strcmp0("alpha",(char *)p_details -> name) == 0) { col.alpha = string_to_double ((gpointer)p_cont); set_a = TRUE; } xmlFree (p_cont); } p_details = p_details -> next; } if ((set_codevar && (set_id || (set_r && set_g && set_b && set_a))) || (set_alpha && set_beta)) { // g_print ("key= %s, id= %d, content= %s\n", key, id, content); set_parameter (content, key, id, (set_alpha && set_beta) ? & bond : NULL, (set_x && set_y && set_z) ? & vec : NULL, start, end, (set_r && set_g && set_b && set_a) ? & col : NULL); } if (key) g_free (key); xmlFree (content); parameter_node = parameter_node -> next; parameter_node = findnode (parameter_node, "parameter"); } } /*! \fn void read_light (xmlNodePtr light_node) \brief read light preferences from XML configuration \param light_node */ void read_light (xmlNodePtr light_node) { xmlNodePtr l_node, p_node; xmlNodePtr parameter_node; xmlAttrPtr l_details, p_details; gchar * key = NULL; int lid; gboolean set_codevar; gboolean set_lid = FALSE; gboolean set_x, set_y, set_z; xmlChar * content, * p_cont; vec3_t vec; l_details = light_node -> properties; while (l_details) { l_node = l_details -> children; if (l_node) { if (g_strcmp0("id",(char *)l_details -> name) == 0) { content = xmlNodeGetContent(l_node); lid = (int) string_to_double ((gpointer)content); xmlFree (content); set_lid = TRUE; } } l_details = l_details -> next; } if (set_lid) { parameter_node = findnode (light_node -> children, "parameter"); set_codevar = FALSE; set_x = set_y = set_z = FALSE; while (parameter_node) { content = xmlNodeGetContent(parameter_node); p_details = parameter_node -> properties; while (p_details) { p_node = p_details -> children; if (p_node) { p_cont = xmlNodeGetContent(p_node); if (g_strcmp0("key",(char *)p_details -> name) == 0) { key = g_strdup_printf ("%s", p_cont); set_codevar = TRUE; } else if (g_strcmp0("x",(char *)p_details -> name) == 0) { vec.x = string_to_double ((gpointer)p_cont); set_x = TRUE; } else if (g_strcmp0("y",(char *)p_details -> name) == 0) { vec.y = string_to_double ((gpointer)p_cont); set_y = TRUE; } else if (g_strcmp0("z",(char *)p_details -> name) == 0) { vec.z = string_to_double ((gpointer)p_cont); set_z = TRUE; } xmlFree (p_cont); } p_details = p_details -> next; } if (set_codevar) { set_parameter (content, key, lid, NULL, (set_x && set_y && set_z) ? & vec : NULL, -1.0, -1.0, NULL); } if (key) g_free (key); xmlFree (content); parameter_node = parameter_node -> next; parameter_node = findnode (parameter_node, "parameter"); } } } /*! \fn void read_preferences (xmlNodePtr preference_node) \brief read preferences from XML configuration \param preference_node node the XML node that point to preferences */ void read_preferences (xmlNodePtr preference_node) { xmlNodePtr node; node = findnode (preference_node -> children, "parameter"); read_parameter (node); } /*! \fn void read_style_from_xml_file (xmlNodePtr style_node, int style) \brief read style preferences from XML file \param style_node the XML node that point to style data \param style the target style */ void read_style_from_xml_file (xmlNodePtr style_node, int style) { xmlNodePtr node; gchar * str; int i, j, k, l; i = (style == 0 || style == 2) ? 0 : (style == 1 || style == 4) ? 1 : 2; for (j=0; j<2; j++) { k = (style == 2) ? 4 : 1; for (l=0; l name), "atomes_preferences-xml") == 0) { node = findnode(racine -> children, "analysis"); if (node) { p_node = findnode (node -> children, "cutoffs"); if (p_node) { read_preferences (p_node); l_node = findnode(p_node -> children, "partials"); if (l_node) { read_preferences (l_node); } } read_preferences (node); } node = findnode(racine -> children, "opengl"); if (node) { p_node = findnode (node -> children, "material"); if (p_node) { read_preferences (p_node); } p_node = findnode (node -> children, "lightning"); if (p_node) { read_preferences (p_node); l_node = findnode (p_node -> children, "light"); while (l_node) { read_light (l_node); l_node = l_node -> next; l_node = findnode (l_node, "light"); } } p_node = findnode (node -> children, "fog"); if (p_node) { read_preferences(p_node); } read_preferences (node); } node = findnode(racine -> children, "model"); if (node) { read_preferences (node); p_node = findnode(node -> children, "atoms_and_bonds"); if (p_node) { for (i=0; i children, xml_style_leg[i]); if (l_node) { read_style_from_xml_file (l_node -> children, i); } } } p_node = findnode(node -> children, "labels"); if (p_node) { for (i=0; i<2; i++) { l_node = findnode (p_node -> children, (i) ? "clones" : "atoms"); if (l_node) { label_id = i; read_preferences (l_node); c_node = findnode(l_node -> children, "colors"); if (c_node) { read_preferences (c_node); } } } } c_node = findnode(node -> children, "colors"); if (c_node) { for (i=0; i<2; i++) { l_node = findnode (c_node -> children, (i) ? "clones" : "atoms"); if (l_node) { label_id = i; read_preferences (l_node); } } } p_node = findnode(node -> children, "box"); if (p_node) { read_preferences (p_node); } } node = findnode(racine -> children, "view"); if (node) { read_preferences (node); p_node = findnode(node -> children, "background"); if (p_node) { read_preferences (p_node); } p_node = findnode(node -> children, "representation"); if (p_node) { read_preferences (p_node); } p_node = findnode(node -> children, "axis"); if (p_node) { read_preferences (p_node); l_node = findnode(p_node -> children, "labels"); if (l_node) { label_id = 2; default_axis.labels = TRUE; read_preferences (l_node); } c_node = findnode(p_node -> children, "colors"); if (c_node) { read_preferences (c_node); } } p_node = findnode(node -> children, "measures"); if (p_node) { l_node = findnode(p_node -> children, "standard"); if (l_node) { c_node = findnode(l_node -> children, "labels"); if (c_node) { label_id = 3; read_preferences (c_node); } read_preferences (l_node); } l_node = findnode(p_node -> children, "selection"); if (l_node) { c_node = findnode(l_node -> children, "labels"); if (c_node) { label_id = 4; read_preferences (c_node); } read_preferences (l_node); } } p_node = findnode(node -> children, "atom-selections"); if (p_node) { read_preferences (p_node); } } } } xmlFreeDoc(doc); } xmlFreeTextReader(reader); } xmlCleanupParser(); } /*! \fn void set_atomes_defaults () \brief set atomes default parameters */ void set_atomes_defaults () { int i, j; // Analysis preferences default_totcut = 2.0; if (default_bond_cutoff) g_free (default_bond_cutoff); default_bond_cutoff = NULL; default_num_delta[GDR] = 1000; default_num_delta[SQD] = 1000; default_num_delta[SKD] = 1000; default_num_delta[GDK] = 1000; default_num_delta[BND] = 100; default_num_delta[ANG] = 90; default_num_delta[CHA-1] = 20; default_num_delta[MSD-2] = 0; default_num_delta[SKT-2] = 1000; // Dynamical calculations default_delta_t[0] = 0.0; default_delta_t[1] = -1.0; // Ring statistics default_rsparam[0] = -1; default_rsparam[1] = 0; default_rsparam[2] = 10; default_rsparam[3] = 500; default_rsparam[4] = 0; default_rsparam[5] = 0; default_rsparam[6] = 0; // Chain statistics default_csparam[0] = 0; default_csparam[1] = 10; default_csparam[2] = 500; default_csparam[3] = 0; default_csparam[4] = 0; default_csparam[5] = 0; // F(k,t) and S(q,w) default_skt_sets = FALSE; default_skt_n_sets = 5; default_sqw_n_sets = 5; default_sqw_freq = 1000; for (i=0; i<3; i++) default_opengl[i] = 0; default_opengl[3] = QUALITY; default_opengl[4] = TRUE; // Material default_material.predefine = 4; // Plastic default_material.albedo = vec3(0.5, 0.5, 0.5); default_material.param[0] = DEFAULT_LIGHTNING; default_material.param[1] = DEFAULT_METALLIC; default_material.param[2] = DEFAULT_ROUGHNESS; default_material.param[3] = DEFAULT_AMBIANT_OCCLUSION; default_material.param[4] = DEFAULT_GAMMA_CORRECTION; default_material.param[5] = DEFAULT_OPACITY; // Lights default_lightning.lights = 3; if (default_lightning.spot) { for (i=0; i 2) ? 1 : 0; if (default_label[i].n_colors) { default_label[i].color = g_malloc0(sizeof*default_label[i].color); default_label[i].color[0].red = 1.0; default_label[i].color[0].green = 1.0; default_label[i].color[0].blue = 1.0; default_label[i].color[0].alpha = 1.0; } default_label[i].font = (i > 2) ? g_strdup_printf ("FreeMono Bold 18") : g_strdup_printf ("Sans Bold 12"); default_label[i].list = NULL; } for (i=0; i<2; i++) { default_acl_format[i] = SYMBOL_AND_NUM; default_mtilt[i] = TRUE; default_mpattern[i] = 0; default_mfactor[i] = 1; default_mwidth[i] = 1.0; } default_box.box = WIREFRAME; default_box.color.red = 0.0; default_box.color.green = 1.0; default_box.color.blue = 0.0; default_box.color.alpha = 1.0; default_box.line = DEFAULT_SIZE; default_box.rad = 0.05; // Representation // Background color default_background.color.red = 0.0; default_background.color.green = 0.0; default_background.color.blue = 0.0; default_background.color.alpha = 1.0; default_background.gradient = 2; default_background.direction = 8; default_background.position = 0.5; default_background.gradient_color[0].red = 0.0; default_background.gradient_color[0].green = 0.01; default_background.gradient_color[0].blue = 0.21; default_background.gradient_color[0].alpha = 1.0; default_background.gradient_color[1].red = 0.0; default_background.gradient_color[1].green = 0.0; default_background.gradient_color[1].blue = 0.0; default_background.gradient_color[1].alpha = 1.0; default_rep.rep = PERSPECTIVE; default_rep.proj = -1; default_rep.zoom = ZOOM; default_rep.c_angle[0] = - CAMERA_ANGLE_X; default_rep.c_angle[1] = - CAMERA_ANGLE_Y; for (i=0; i<2; i++) default_rep.c_shift[i] = 0.0; default_rep.gnear = 6.0; // Axis default_axis.axis = NONE; default_axis.line = DEFAULT_SIZE; default_axis.rad = 0.1; default_axis.t_pos = BOTTOM_RIGHT; default_axis.length = 2.0*DEFAULT_SIZE; default_axis.c_pos[0] = default_axis.c_pos[1] = 50.0; default_axis.c_pos[2] = 0.0; default_axis.title[0] = "x"; default_axis.title[1] = "y"; default_axis.title[2] = "z"; if (default_axis.color) g_free (default_axis.color); default_axis.color = NULL; // Selection color default_sel_color[0].red = 0.0; default_sel_color[0].green = 1.0; default_sel_color[0].blue = 1.0; default_sel_color[0].alpha = DEFAULT_OPACITY*0.75; // Selection color - edition mode default_sel_color[1].red = 1.0; default_sel_color[1].green = 0.00; default_sel_color[1].blue = 0.84; default_sel_color[1].alpha = DEFAULT_OPACITY*0.75; } /*! \fn void set_atomes_preferences () \brief set software default parameters */ void set_atomes_preferences () { default_num_delta = allocint (NUM_DELTA); default_delta_t = allocdouble (2); default_rsparam = allocint (7); default_csparam = allocint (7); default_opengl = allocint (5); default_at_rs = allocdouble (10); default_o_at_rs = allocbool (10); default_bd_rw = allocdouble (6); default_o_bd_rw = allocbool (6); preferences = TRUE; set_atomes_defaults(); preferences = FALSE; if (ATOMES_CONFIG) read_preferences_from_xml_file (); } /*! \fn GtkWidget * pref_list (gchar * mess[2], int nelem, gchar * mlist[nelem][2], gchar * end) \brief print information message with item list of elements \param mess main information message \param nelem number of elements in the list \param mlsit item list \param end end message, if any */ GtkWidget * pref_list (gchar * mess[2], int nelem, gchar * mlist[nelem][2], gchar * end) { gchar * str; GtkWidget * vbox = create_vbox (BSEP); GtkWidget * vvbox = create_vbox (BSEP); GtkWidget * hbox; add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, markup_label(_(mess[0]), -1, -1, 0.5, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, markup_label(_(mess[1]), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, vvbox, FALSE, FALSE, 20); int i; for (i=0; i%s", _(mlist[i][0])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 120, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(":", -1, -1, 1.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(mlist[i][1]), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } if (end) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_(end), -1, -1, 0.5, 0.5), FALSE, FALSE, 20); } return vbox; } /*! \fn G_MODULE_EXPORT void set_measures (GtkComboBox * box, gpointer data) \brief change measure type \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_measures (GtkComboBox * box, gpointer data) { int i, j; i = GPOINTER_TO_INT (data); j = combo_get_active ((GtkWidget *)box); if (i) { hide_the_widgets (sel_box[! j]); show_the_widgets (sel_box[j]); } else { hide_the_widgets (meas_box[! j]); show_the_widgets (meas_box[j]); } } /*! \fn G_MODULE_EXPORT void set_selection_color (GtkColorChooser * colob, gpointer data) \brief change selection color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_selection_color (GtkColorChooser * colob, gpointer data) { int i = GPOINTER_TO_INT (data); tmp_sel_color[i] = get_button_color (colob); } /*! \fn GtkWidget * view_preferences () \brief view preferences */ GtkWidget * view_preferences () { GtkWidget * notebook = gtk_notebook_new (); gtk_notebook_set_scrollable (GTK_NOTEBOOK(notebook), TRUE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK(notebook), GTK_POS_TOP); GtkWidget * vbox = create_vbox (BSEP); gchar * info[2] = {i18n("The View tab regroups representation options"), i18n("which effect apply to the general aspect of the model:")}; gchar * m_list[3][2] = {{i18n("Representation"), i18n("scene set-up and orientation")}, {i18n("Axis"), i18n("axis options")}, {i18n("Tools"), i18n("measures and selections option")}}; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(" ", -1, 30, 0.0, 0.0), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, pref_list (info, 3, m_list, NULL), FALSE, FALSE, 30); pref_gradient_win = g_malloc0(sizeof*pref_gradient_win); gradient_advanced (NULL, NULL); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, pref_gradient_win -> win, FALSE, FALSE, 5); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, gtk_label_new (_("General"))); // Tab for representation pref_rep_win = g_malloc0(sizeof*pref_rep_win); representation_advanced (NULL, NULL); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), pref_rep_win -> win, gtk_label_new (_("Representation"))); // Axis pref_axis_win = g_malloc0(sizeof*pref_axis_win); axis_advanced (NULL, NULL); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), pref_axis_win -> win, gtk_label_new (_("Axis"))); // Measures vbox = create_vbox (BSEP); GtkWidget * hbox; hbox = adv_box (vbox, _("Select measure type"), 5, 120, 0.0); meas_combo = create_combo (); combo_text_append (meas_combo, _("Standard")); combo_text_append (meas_combo, _("Edition mode")); combo_set_active (meas_combo, 0); g_signal_connect (G_OBJECT(meas_combo), "changed", G_CALLBACK(set_measures), GINT_TO_POINTER(0)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, meas_combo , FALSE, FALSE, 40); int i; for (i=0; i<2; i++) { meas_box[i] = create_vbox (BSEP); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, labels_tab(NULL, i+3), FALSE, FALSE, 60); add_box_child_start (GTK_ORIENTATION_VERTICAL, meas_box[i], hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, meas_box[i], FALSE, FALSE, 0); } hbox = adv_box (vbox, _("Select selection type"), 15, 120, 0.0); sel_combo = create_combo (); combo_text_append (sel_combo, _("Standard")); combo_text_append (sel_combo, _("Edition mode")); combo_set_active (sel_combo, 0); g_signal_connect (G_OBJECT(sel_combo), "changed", G_CALLBACK(set_measures), GINT_TO_POINTER(1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sel_combo , FALSE, FALSE, 40); GtkWidget * hhbox, * vvbox; for (i=0; i<2; i++) { sel_box[i] = create_vbox (BSEP); hbox = create_hbox (BSEP); vvbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vvbox, FALSE, FALSE, 60); hhbox = abox (vvbox, _("Color"), 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, color_button(tmp_sel_color[i], TRUE, 100, -1, G_CALLBACK(set_selection_color), GINT_TO_POINTER(i)), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, sel_box[i], hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, sel_box[i], FALSE, FALSE, 0); } gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, gtk_label_new (_("Tools"))); show_the_widgets (notebook); return notebook; } int the_object; element_radius ** edit_list; element_color * color_list; GtkWidget * pref_tree; gboolean user_defined; GtkWidget * edit_scrol; GtkWidget * edit_colob; ColRGBA * tmp_color; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_default_stuff (GtkCheckButton * but, gpointer data) \brief toggle set / unset default callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_default_stuff (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_default_stuff (GtkToggleButton * but, gpointer data) \brief toggle set / unset default callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_default_stuff (GtkToggleButton * but, gpointer data) #endif { int status = button_get_status ((GtkWidget *)but); int object = GPOINTER_TO_INT(data); switch (object) { case 0: tmp_clones = status; break; case 1: tmp_cell = status; break; default: if (object < 0) { // Bonds tmp_o_bd_rw[-object-2] = status; widget_set_sensitive(bond_entry_over[-object-2], status); } else if (object < 100) { tmp_o_at_rs[object-2] = status; widget_set_sensitive(atom_entry_over[object-2], status); } else { widget_set_sensitive (edit_scrol, ! status); widget_set_sensitive (edit_colob, status); ColRGBA col; col.red = col.green = col.blue = col.alpha = 1.0; if (status) { tmp_color = g_malloc0(sizeof*tmp_color); tmp_color -> red = tmp_color -> green = tmp_color -> blue = tmp_color -> alpha = 1.0; } else { if (tmp_color) g_free (tmp_color); tmp_color = NULL; } GdkRGBA rgb_col = colrgba_togtkrgba(col); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(edit_colob), & rgb_col); } break; } } /*! \fn G_MODULE_EXPORT void set_default_stuff (GtkEntry * res, gpointer data) \brief update default number of delta preferences \param res the GtkEntry the signal is coming from \param data the associated data pointer */ G_MODULE_EXPORT void set_default_stuff (GtkEntry * res, gpointer data) { int i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double value = string_to_double ((gpointer)m); if (i < 0) { // Bonds tmp_bd_rw[-i-2] = value; } else { tmp_at_rs[i-2] = value; } update_entry_double (res, value); } /*! \fn element_radius * duplicate_element_radius (element_radius * old_list) \brief duplicate an element radius data structure \param old_list the data structure to duplicate */ element_radius * duplicate_element_radius (element_radius * old_list) { if (! old_list) return NULL; element_radius * new_list = g_malloc0(sizeof*new_list); element_radius * tmp_rad, * tmp_rbd; tmp_rad = old_list; tmp_rbd = new_list; while (tmp_rad) { tmp_rbd -> Z = tmp_rad -> Z; tmp_rbd -> rad = tmp_rad -> rad; if (tmp_rad -> next) { tmp_rbd -> next = g_malloc0(sizeof*tmp_rbd -> next); tmp_rbd -> next -> prev = tmp_rbd; tmp_rbd = tmp_rbd -> next; } tmp_rad = tmp_rad -> next; } return new_list; } /*! \fn float get_radius (int object, int col, int z, element_radius * rad_list) \brief retrieve the radius/width of a species depending on style \param object the object to look at \param col modifier for tabulated radii \param z atomic number \param rad_list pre allocated data, if any */ float get_radius (int object, int col, int z, element_radius * rad_list) { element_radius * tmp_rad = rad_list; int ft; while (tmp_rad) { if (tmp_rad -> Z == z) { user_defined = TRUE; return tmp_rad -> rad; } tmp_rad = tmp_rad -> next; } if (object < 0) { object = - object - 2; // Bonds if (object == 0 || object == 3) { if (z < 119) { ft = 0; return set_radius_ (& z, & ft) / 4.0; } } else { return DEFAULT_SIZE; } } else { object -= 2; if (object == 2 || object == 7 || col) { ft = col; if (z < 119) { return set_radius_ (& z, & ft); } } else if (object == 1 || object == 4 || object == 6 || object == 9) { // Dots return DEFAULT_SIZE; } else if (object == 0 || object == 3 || object == 5 || object == 8) { ft = 0; return set_radius_ (& z, & ft) / 2.0; } } return 0.0; } /*! \fn element_color * duplicate_element_color (element_color * old_list) \brief duplicate an element color data structure \param old_list the data structure to duplicate */ element_color * duplicate_element_color (element_color * old_list) { if (! old_list) return NULL; element_color * new_list = g_malloc0(sizeof*new_list); element_color * tmp_rad, * tmp_rbd; tmp_rad = old_list; tmp_rbd = new_list; while (tmp_rad) { tmp_rbd -> Z = tmp_rad -> Z; tmp_rbd -> col = tmp_rad -> col; if (tmp_rad -> next) { tmp_rbd -> next = g_malloc0(sizeof*tmp_rbd -> next); tmp_rbd -> next -> prev = tmp_rbd; tmp_rbd = tmp_rbd -> next; } tmp_rad = tmp_rad -> next; } return new_list; } /*! \fn ColRGBA get_spec_color (int z, , element_color * clist) \brief retrieve the color of a chemical species \param z atomic number \param clist the target color list, if any */ ColRGBA get_spec_color (int z, element_color * clist) { element_color * tmp_col = clist; while (tmp_col) { if (tmp_col -> Z == z) { user_defined = TRUE; return tmp_col -> col; } tmp_col = tmp_col -> next; } return set_default_color (z); } /*! \fn G_MODULE_EXPORT void edit_pref (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer user_data) \brief edit cell in the preferences tree model \param cell the GtkCellRendererText sending the signal \param path_string the path in the tree model \param new_text the string describing the new value \param user_data the associated data pointer */ G_MODULE_EXPORT void edit_pref (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer user_data) { int col = GPOINTER_TO_INT(user_data); GtkTreeModel * pref_model = gtk_tree_view_get_model(GTK_TREE_VIEW(pref_tree)); GtkTreeIter row; gtk_tree_model_get_iter_from_string (pref_model, & row, path_string); int z; float val = string_to_double ((gpointer)new_text); gtk_tree_model_get (pref_model, & row, 3, & z, -1); gtk_list_store_set (GTK_LIST_STORE(pref_model), & row, col+4, val, -1); gboolean add_elem = FALSE; gboolean remove_elem = FALSE; element_radius * tmp_list; int col_val[4] = {1, 3, 5, 10}; float v = get_radius (the_object, col, z, NULL); if (edit_list[col]) { tmp_list = edit_list[col]; add_elem = TRUE; while (tmp_list) { if (tmp_list -> Z == z) { tmp_list -> rad = val; if (val == v) { remove_elem = TRUE; if (tmp_list -> next) { if (tmp_list -> prev) { tmp_list -> prev -> next = tmp_list -> next; tmp_list -> next -> prev = tmp_list -> prev; } else { edit_list[col] = tmp_list -> next; edit_list[col] -> prev = NULL; } } else if (tmp_list -> prev) { edit_list[col] -> rad = tmp_list -> rad; edit_list[col] -> Z = tmp_list -> Z; edit_list[col] -> prev = NULL; } else { g_free (edit_list[col]); edit_list[col] = NULL; } add_elem = FALSE; } else { add_elem = FALSE; } } tmp_list = tmp_list -> next; } } else if (val != v) { add_elem = TRUE; } if (add_elem) { if (edit_list[col]) { tmp_list = edit_list[col]; while (tmp_list) { if (! tmp_list -> next) break; tmp_list = tmp_list -> next; } tmp_list -> next = g_malloc0(sizeof*tmp_list -> next); tmp_list -> next -> prev = tmp_list; tmp_list = tmp_list -> next; } else { edit_list[col] = g_malloc0(sizeof*edit_list[col]); tmp_list = edit_list[col]; } tmp_list -> Z = z; tmp_list -> rad = val; gtk_tree_model_get (pref_model, & row, 0, & z, -1); if (! z) { z = col_val[col]; } else { int a, b, c, d; a = z / 10; b = (z - a * 10) / 5; c = (z - a * 10 - b * 5) / 3; d = z - a * 10 - b * 5 - c * 3; z = 0; if (a || col == 3) z += 10; if (b || col == 2) z += 5; if (c || col == 1) z += 3; if (d || col == 0) z += 1; } gtk_list_store_set (GTK_LIST_STORE(pref_model), & row, 0, z, -1); } else if (remove_elem) { gtk_tree_model_get (pref_model, & row, 0, & z, -1); z -= col_val[col]; gtk_list_store_set (GTK_LIST_STORE(pref_model), & row, 0, z, -1); } } /*! \fn G_MODULE_EXPORT void edit_chem_preferences (GtkDialog * edit_chem, gint response_id, gpointer data) \brief edit chem preferences - running the dialog \param edit_prefs the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void edit_chem_preferences (GtkDialog * edit_chem, gint response_id, gpointer data) { int i, j, k, l; int object = GPOINTER_TO_INT (data); gboolean do_style = (object < 100) ? TRUE : FALSE; gboolean do_label = (object == 1000 || object == 1001) ? TRUE : FALSE; switch (response_id) { case GTK_RESPONSE_APPLY: if (do_style) { if (object < 0) { object = - object - 2; if (tmp_bond_rad[object]) g_free (tmp_bond_rad[object]); tmp_bond_rad[object] = duplicate_element_radius (edit_list[0]); } else { j = (object == 4 || object == 9) ? 4 : 1; k = (object < 5) ? 7 : 5; object = object - 2; for (i=0; i color) tmp_label[object] -> color = g_malloc0(sizeof*tmp_label[object] -> color); tmp_label[object] -> color[0] = * tmp_color; tmp_label[object] -> n_colors = 1; } } else { object -= 100; if (tmp_atom_color[object]) g_free (tmp_atom_color[object]); tmp_atom_color[object] = duplicate_element_color (color_list); } break; default: if (do_style) { j = (object < 0) ? 1 : (object == 4 || object == 9) ? 4 : 1; for (i=0; i Z == i) { tmp_list -> col = colo; if (are_identical_colors(colo, orig)) { if (tmp_list -> next) { if (tmp_list -> prev) { tmp_list -> prev -> next = tmp_list -> next; tmp_list -> next -> prev = tmp_list -> prev; } else { color_list = tmp_list -> next; color_list -> prev = NULL; } } else if (tmp_list -> prev) { color_list -> col = tmp_list -> col; color_list -> Z = tmp_list -> Z; color_list -> prev = NULL; } else { g_free (color_list); color_list = NULL; } add_elem = FALSE; } else { add_elem = FALSE; } } tmp_list = tmp_list -> next; } } else if (! are_identical_colors(colo, orig)) { add_elem = TRUE; } if (add_elem) { if (color_list) { tmp_list = color_list; while (tmp_list) { if (! tmp_list -> next) break; tmp_list = tmp_list -> next; } tmp_list -> next = g_malloc0(sizeof*tmp_list -> next); tmp_list -> next -> prev = tmp_list; tmp_list = tmp_list -> next; } else { color_list = g_malloc0(sizeof*color_list); tmp_list = color_list; } tmp_list -> Z = i; tmp_list -> col = colo; } } destroy_this_dialog (win); } /*! \fn void color_button_event (GtkWidget * widget, double event_x, double event_y, guint event_button, gpointer data) \brief species color selection mouse button event \param widget the GtkWidget sending the signal \param event_x x position \param event_y y position \param event_button event buttton \param data the associated data pointer */ void color_button_event (GtkWidget * widget, double event_x, double event_y, guint event_button, gpointer data) { if (event_button == 1) { GtkTreeModel * model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); GtkTreePath * path; GtkTreeViewColumn * column; int i, j; #ifdef GTK4 int e_x, e_y; gtk_tree_view_convert_widget_to_bin_window_coords (GTK_TREE_VIEW(widget), event_x, event_y, & e_x, & e_y); if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(widget), e_x, e_y, & path, & column, & i, & j)) #else if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(widget), event_x, event_y, & path, & column, & i, & j)) #endif { if (g_strcmp0(_("Color"), gtk_tree_view_column_get_title (column)) == 0) { GtkTreeIter row; if (gtk_tree_model_get_iter (model, & row, path)) { i = GPOINTER_TO_INT(data); gchar * obj[2]={_("atom"), _("clone")}; int z; gtk_tree_model_get (model, & row, 3, & z, -1); gchar * str = g_strdup_printf (_("%s %s color"), periodic_table_info[z].lab, obj[i]); GdkRGBA col = colrgba_togtkrgba (get_spec_color (z, color_list)); GtkWidget * win = gtk_color_chooser_dialog_new (str, GTK_WINDOW(MainWindow)); gtk_window_set_modal (GTK_WINDOW(win), TRUE); gtk_color_chooser_set_use_alpha (GTK_COLOR_CHOOSER(win), TRUE); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(win), & col); g_free (str); run_this_gtk_dialog (win, G_CALLBACK(run_ac_color), GINT_TO_POINTER(z)); } } } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void pref_color_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button pressed callback GTK4 \param gesture the GtkGesture sending the signal \param n_press the number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void pref_color_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { color_button_event (gtk_event_controller_get_widget ((GtkEventController*)gesture), x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), data); } #else /*! \fn G_MODULE_EXPORT gboolean pref_color_button_event (GtkWidget * widget, GdkEventButton * event, gpointer data) \brief on button event in species color edition \param widget the GtkWidget sending the signal \param event the GtkEventButton triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean pref_color_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) { if (event -> type == GDK_BUTTON_PRESS) { GdkEventButton * bevent = (GdkEventButton*)event; color_button_event (widget, bevent -> x, bevent -> y, bevent -> button, data); } return FALSE; } #endif /*! \fn G_MODULE_EXPORT void set_stuff_color (GtkColorChooser * colob, gpointer data) \brief change stuff color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_stuff_color (GtkColorChooser * colob, gpointer data) { * tmp_color = get_button_color (colob); } /*! \fn G_MODULE_EXPORT void edit_species_parameters (GtkButton * but, gpointer data) \brief edit atoms and bonds species related parameters \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void edit_species_parameters (GtkButton * but, gpointer data) { gchar * ats[3]={_("atom(s)"), _("dot(s)"), _("sphere(s)")}; gchar * dim[3]={_("radius"), _("size"), _("width")}; gchar * bts[3]={_("bond(s)"), _("wireframe(s)"), _("cylinder(s)")}; the_object = GPOINTER_TO_INT(data); int i, j, k, l, n, m; int aid, bid; int num_col; gchar * str; gboolean do_style = (the_object < 100) ? TRUE : FALSE; gboolean do_label = FALSE; if (do_style) { if (the_object < 0) { // Going for bonds aid = - the_object - 2; aid = (aid) > 2 ? aid - 3 : aid; bid = (the_object == -3 || the_object == -6) ? 2 : 0; str = (the_object < -4) ? g_strdup_printf (_("Edit cloned %s %s"), bts[aid], dim[bid]) : g_strdup_printf (_("Edit %s %s"), bts[aid], dim[bid]); num_col = 5; } else { // Going for atoms aid = the_object - 2; aid = (aid == 0 || aid == 2 || aid == 5 || aid == 7) ? 0 : (aid == 1 || aid == 4 || aid == 6 || aid == 9) ? 1 : 2; bid = (the_object == 1 || the_object == 6) ? 1 : 0; str = (the_object - 2 > 4) ? g_strdup_printf (_("Edit cloned %s %s"), ats[aid], dim[bid]) : g_strdup_printf (_("Edit %s %s"), ats[aid], dim[bid]); num_col = (the_object == 4 || the_object == 9) ? 8 : 5; } } else { // Going for colors if (the_object < 1000) { aid = the_object - 100; str = g_strdup_printf (_("Select %s color"), (aid) ? _("clone") : _("atom")); } else { aid = the_object - 1000; str = g_strdup_printf (_("Select %s label color"), (aid) ? _("clone") : _("atom")); do_label = TRUE; } num_col = 5; } edit_list = NULL; color_list = NULL; tmp_color = NULL; GtkWidget * win = dialog_cancel_apply (str, MainWindow, TRUE); g_free (str); gtk_window_set_default_size (GTK_WINDOW(win), (num_col == 8) ? 600 : 300, 600); GtkWidget * vbox = dialog_get_content_area (win); GType s_type[8] = {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_DOUBLE}; GType c_type[5] = {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING}; GtkTreeViewColumn * pref_col[num_col]; GtkCellRenderer * pref_cel[num_col]; GtkTreeSelection * pref_select; GtkListStore * pref_model; GtkTreeIter elem; if (do_style) { pref_model = gtk_list_store_newv (num_col, s_type); i = (the_object < 0) ? - the_object - 2 : the_object - 2; j = (num_col == 8) ? 4 : 1; k = ((the_object < 0 && i > 2) || (the_object > 0 && i > 4)) ? 1 : 0; edit_list = g_malloc0(j*sizeof*edit_list); for (l=0; l 3) { if (do_style) { g_object_set (pref_cel[i], "editable", TRUE, NULL); gtk_cell_renderer_set_alignment (pref_cel[i], 0.5, 0.5); g_signal_connect (G_OBJECT(pref_cel[i]), "edited", G_CALLBACK(edit_pref), GINT_TO_POINTER(i-4)); pref_col[i] = gtk_tree_view_column_new_with_attributes((num_col) == 8 ? f_name[i-4] : g_name[bid], pref_cel[i], "text", i, NULL); gtk_tree_view_column_set_cell_data_func (pref_col[i], pref_cel[i], radius_set_color_and_markup, GINT_TO_POINTER(i-4), NULL); } else { gtk_cell_renderer_set_alignment (pref_cel[i], 0.5, 0.5); pref_col[i] = gtk_tree_view_column_new_with_attributes(_("Color"), pref_cel[i], "text", i, NULL); gtk_tree_view_column_set_cell_data_func (pref_col[i], pref_cel[i], color_set_color, NULL, NULL); } } else if (i) { pref_col[i] = gtk_tree_view_column_new_with_attributes(name[i-1], pref_cel[i], "text", i, NULL); gtk_tree_view_column_set_alignment (pref_col[i], 0.5); gtk_tree_view_column_set_resizable (pref_col[i], TRUE); gtk_tree_view_column_set_min_width (pref_col[i], 50); } else { pref_col[i] = gtk_tree_view_column_new_with_attributes("", pref_cel[i], "text", i, NULL); gtk_tree_view_column_set_visible (pref_col[i], FALSE); } gtk_tree_view_append_column(GTK_TREE_VIEW(pref_tree), pref_col[i]); } g_object_unref (pref_model); pref_select = gtk_tree_view_get_selection (GTK_TREE_VIEW(pref_tree)); gtk_tree_selection_set_mode (pref_select, GTK_SELECTION_SINGLE); gtk_tree_view_expand_all (GTK_TREE_VIEW(pref_tree)); #ifdef GTK3 g_signal_connect (G_OBJECT(pref_tree), "button_press_event", G_CALLBACK(pref_color_button_event), GINT_TO_POINTER(aid)); #else add_widget_gesture_and_key_action (pref_tree, "pref-context-click", G_CALLBACK(pref_color_button_pressed), GINT_TO_POINTER(aid), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #endif edit_scrol = create_scroll (vbox, -1, 570, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, edit_scrol, pref_tree); if (! do_label) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("User defined values appear in colored bold font."), -1, 40, 0.5, 0.5), FALSE, FALSE, 0); if (num_col == 8) { gchar * legend={_("\n[1] B. Cordero and al. Dalton Trans, 213:1112 (2008).\n" "[2] Slater. J. Chem. Phys., 41:3199 (1964).\n" "[3] Bondi A. J. Phys. Chem., 68:441 (1964).\n" "[4] R.D. Shannon and C.T. Prewitt Acta Cryst. B, 25:925-946 (1969).\n" "[5] R.D. Shannon Acta Cryst. A, 23:751-767 (1976).")}; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(legend, -1, 25, 0.0, 0.5), FALSE, FALSE, 0); } } else if (do_label) { gtk_widget_set_sensitive (edit_scrol, ! tmp_label[aid] -> n_colors); GtkWidget * vvbox = create_vbox (BSEP); GtkWidget * hbox = create_hbox (BSEP); gchar * info[3] = {_("By default label and species colors are similar,"), _("you can modify that using this dialog window."), _("You can also use a single color for all labels:")}; for (i=0; i<2; i++) { hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(info[i], 300, -1, 0.5, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, vvbox, FALSE, FALSE, 10); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(info[i], 300, -1, 0.5, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Use single color"), -1, -1, tmp_label[aid] -> n_colors, G_CALLBACK(toggled_default_stuff), data), FALSE, FALSE, 30); ColRGBA active_col; if (tmp_label[aid] -> n_colors) { tmp_color = g_malloc0(sizeof*tmp_color); * tmp_color = tmp_label[aid] -> color[0]; active_col = tmp_label[aid] -> color[0]; } active_col.red = active_col.green = active_col.blue = active_col.alpha = 1.0; edit_colob = color_button (active_col, TRUE, 100, -1, G_CALLBACK(set_stuff_color), tmp_color); widget_set_sensitive (edit_colob, tmp_label[aid] -> n_colors); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, edit_colob, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); } run_this_gtk_dialog (win, G_CALLBACK(edit_chem_preferences), data); } /*! \fn GtkWidget * over_param (int object, int style) \brief create override check button and entry \param object 0 = atoms, 1 = bonds \param style style id number */ GtkWidget * over_param (int object, int style) { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox = create_hbox (BSEP); int clone = ((object && style > 2) || (! object && style > 4)) ? 20 : 0; int mod = (object) ? -1 : 1; gboolean over = (! object) ? TRUE : (object && (style != 2 && style != 5)) ? TRUE : FALSE; gchar * leg; if (over) { hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(" ", 60+clone, -1, 0.0, 0.0), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_button (_("Edit species related parameters"), IMG_NONE, NULL, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(edit_species_parameters), GINT_TO_POINTER(mod*(style+2))), FALSE, FALSE, 60); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(" ", 60+clone, -1, 0.0, 0.0), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Override species based parameters"), -1, -1, (object) ? tmp_o_bd_rw[style] : tmp_o_at_rs[style], G_CALLBACK(toggled_default_stuff), GINT_TO_POINTER(mod*(style+2))), FALSE, FALSE, 10); } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(" ", 60+clone, -1, 0.0, 0.0), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Set default value"), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); } if (object) { bond_entry_over[style] = create_entry(G_CALLBACK(set_default_stuff), 100, 10, FALSE, GINT_TO_POINTER(mod*(style+2))); update_entry_double (GTK_ENTRY(bond_entry_over[style]), tmp_bd_rw[style]); if (over) widget_set_sensitive (bond_entry_over[style], tmp_o_bd_rw[style]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, bond_entry_over[style], FALSE, FALSE, 0); leg = g_strdup_printf ("%s", (style == 1 || style == 4) ? "pts" : "Å"); } else { atom_entry_over[style] = create_entry(G_CALLBACK(set_default_stuff), 100, 10, FALSE, GINT_TO_POINTER(mod*(style+2))); update_entry_double (GTK_ENTRY(atom_entry_over[style]), tmp_at_rs[style]); if (over) widget_set_sensitive (atom_entry_over[style], tmp_o_at_rs[style]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, atom_entry_over[style], FALSE, FALSE, 0); leg = g_strdup_printf ("%s", (style == 1 || style == 6 || style == 4 || style == 9) ? "pts" : "Å"); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(leg, -1, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (leg); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); return vbox; } /*! \fn GtkWidget * style_tab (int style) \brief create preferences tab for a style \param style the style for this tab */ GtkWidget * style_tab (int style) { GtkWidget * vbox = create_vbox (BSEP); gchar * object[3]={i18n("Atom(s)"), i18n("Bond(s)"), i18n("\tClone(s)")}; gchar * dim[3]={i18n("Radius"), i18n("Size"), i18n("Width")}; int i; int bsid; int lid; gchar * str; gboolean do_atoms = FALSE; gboolean do_bonds = FALSE; if (style == 0 || style == 1 || style == 2 || style == 3 || style == 5) { do_atoms = TRUE; } if (style == 0 || style == 1 || style == 4) { do_bonds = TRUE; bsid = (style == 4) ? 2 : style; } if (do_atoms) { lid = (style == 3) ? 2 : (style == 1 || style == 5) ? 1 : 0; for (i=0; i<2; i++) { adv_box (vbox, object[i*2], 10-5*i, 120, 0.0); str = g_strdup_printf ("\t%s", _(dim[(lid != 1) ? 0 : 1])); adv_box (vbox, str, 10, 120, 0.0); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, over_param (0, (style < 5) ? style+5*i : 4 + 5*i), FALSE, FALSE, 0); } } if (do_bonds) { // Bond(s) parameters for (i=0; i<2; i++) { adv_box (vbox, object[i+1], 10-5*i, 120, 0.0); str = g_strdup_printf ("\t%s", _(dim[(bsid != 1) ? 0 : 2])); adv_box (vbox, str, 10, 120, 0.0); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, over_param (1, bsid+3*i), FALSE, FALSE, 0); } } return vbox; } /*! \fn GtkWidget * model_preferences () \brief model preferences */ GtkWidget * model_preferences () { GtkWidget * notebook = gtk_notebook_new (); gtk_notebook_set_scrollable (GTK_NOTEBOOK(notebook), TRUE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK(notebook), GTK_POS_TOP); GtkWidget * vbox = create_vbox (BSEP); //GtkWidget * hbox; //GtkWidget * combo; gchar * info[2] = {i18n("The Model tab regroups atom(s), bond(s) and clone(s) options"), i18n("which effect apply when the corresponding OpenGL style is used:")}; gchar * m_list[4][2] = {{i18n("Balls and Sticks"), i18n("atoms* and bonds radii")}, {i18n("Wireframes"), i18n("dots** size and wireframes width")}, {i18n("Spacefilled"), i18n("tabulated parameters")}, {i18n("Cylinders"), i18n("bonds radii")}}; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(" ", -1, 30, 0.0, 0.0), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, pref_list (info, 4, m_list, NULL), FALSE, FALSE, 0); gchar * other_info[2] = {i18n("It also provides options to customize atomic label(s),"), i18n("and, the model box, if any:")}; gchar * o_list[2][2] = {{i18n("Labels"), i18n("atom labels")}, {i18n("Box"), i18n("model box details")}}; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, pref_list (other_info, 2, o_list, NULL), FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(" ", -1, 20, 0.0, 0.0), FALSE, FALSE, 0); GtkWidget * hbox; gchar * obj[2] = {i18n("Atoms"), i18n("Clones")}; int i; for (i=0; i<2; i++) { hbox = adv_box (vbox, _(obj[i]), 5, 150, 1.0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_button (_("Edit species colors"), IMG_NONE, NULL, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(edit_species_parameters), GINT_TO_POINTER(100+i)), FALSE, FALSE, 30); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(" ", -1, 5, 0.0, 0.0), FALSE, FALSE, 0); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Always show clone(s), if any."), 250, -1, tmp_clones, G_CALLBACK(toggled_default_stuff), GINT_TO_POINTER(0)), FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Always show box, if any."), 250, -1, tmp_clones, G_CALLBACK(toggled_default_stuff), GINT_TO_POINTER(1)), FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(" ", -1, 5, 0.0, 0.0), FALSE, FALSE, 0); append_comments (vbox, "*", _("the same parameters are also used for the spheres style")); append_comments (vbox, "**", _("the same parameters are also used for the dots style")); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, gtk_label_new (_("General"))); for (i=0; i.", 5, -1, 0.0, 0.25), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label(_("Colors"), 150, 30, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, create_button (_("Adjust color(s)"), IMG_NONE, NULL, 220, -1, GTK_RELIEF_NORMAL, G_CALLBACK(edit_species_parameters), GINT_TO_POINTER(1000+i)), FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_VERTICAL, hbox, hhbox, FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, gtk_label_new (_("Labels"))); pref_box_win = g_malloc0(sizeof*pref_box_win); box_advanced (NULL, NULL); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), pref_box_win -> win, gtk_label_new (_("Box"))); show_the_widgets (notebook); return notebook; } /*! \fn G_MODULE_EXPORT void set_default_style (GtkComboBox * box, gpointer data) \brief change default atom(s) and bond(s) style \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_default_style (GtkComboBox * box, gpointer data) { GtkTreeIter iter; if (gtk_combo_box_get_active_iter (box, & iter)) { GtkTreeModel * model = gtk_combo_box_get_model (box); int i; gtk_tree_model_get (model, & iter, 1, & i, -1); tmp_opengl[0] = (! i) ? 0 : i; } } /*! \fn GtkTreeModel * style_combo_tree () \brief create opengl style combo model */ GtkTreeModel * style_combo_tree () { GtkTreeIter iter, iter2; GtkTreeStore * store; int i, j; store = gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_INT); gtk_tree_store_append (store, & iter, NULL); gtk_tree_store_set (store, & iter, 0, _("f(atoms) *"), 1, 0, -1); for (i=0; i pointer[i].a = -1; pref_ogl_edit -> pointer[i].b = i; } gchar * info[2] = {i18n("The OpenGL tab regroups rendering options"), i18n("use it to configure the OpenGL 3D scene:")}; gchar * m_list[3][2] = {{i18n("Material"), i18n("aspect for atom(s) and bond(s)")}, {i18n("Lights"), i18n("lightning of the scene")}, {i18n("Fog"), i18n("atmosphere effects")}}; gchar * end = i18n("It also offers to adjust the main visualization style and the color maps"); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, pref_list (info, 3, m_list, end), FALSE, FALSE, 30); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("Style"), 250, -1, 0.0, 0.5), FALSE, FALSE, 15); GtkTreeModel * model = style_combo_tree (); combo = gtk_combo_box_new_with_model (model); g_object_unref (model); GtkCellRenderer * renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer, "text", 0, NULL); combo_set_active (combo, tmp_opengl[0]); combo_set_markup (combo); g_signal_connect (G_OBJECT(combo), "changed", G_CALLBACK(set_default_style), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); append_comments (vbox, "*", _("if 10 000 atoms or more: Wireframes, otherwise: Balls and sticks")); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("Color maps"), 250, -1, 0.0, 0.5), FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 15); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("\tatom(s) and bond(s)"), 250, -1, 0.0, 0.5), FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo_map(0), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("\tpolyhedra"), 250, -1, 0.0, 0.5), FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo_map(1), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); show_the_widgets (vbox); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, gtk_label_new (_("General"))); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), materials_tab (NULL, pref_ogl_edit, & tmp_material), gtk_label_new (_("Material"))); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), lights_tab (NULL, pref_ogl_edit, & tmp_lightning), gtk_label_new (_("Lights"))); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), fog_tab (NULL, pref_ogl_edit, & tmp_fog), gtk_label_new (_("Fog"))); gtk_notebook_set_current_page (GTK_NOTEBOOK(notebook), 0); return notebook; } /*! \fn G_MODULE_EXPORT void set_default_num_delta (GtkEntry * res, gpointer data) \brief update default number of delta preferences \param res the GtkEntry the signal is coming from \param data the associated data pointer */ G_MODULE_EXPORT void set_default_num_delta (GtkEntry * res, gpointer data) { int i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double value = string_to_double ((gpointer)m); if (i == -1) { if (value > 0.0) { tmp_totcut = value; } update_entry_double (res, tmp_totcut); } else if (i < 9) { if (value > 0) tmp_num_delta[i] = (int) value; update_entry_int (res, tmp_num_delta[i]); if (i == 7 || i == 8) { update_entry_int (GTK_ENTRY(dyna_entry[(i == 7) ? 1 : 0][0]), tmp_num_delta[i]); update_omega_max (); } } else // delta_t { if (value > 0.0) tmp_delta_t[0] = value; update_entry_double (res, tmp_delta_t[0]); update_entry_double (GTK_ENTRY(dyna_entry[(i == 9) ? 1 : 0][1]), tmp_delta_t[0]); update_omega_max (); } } /*! \fn G_MODULE_EXPORT void tunit_changed (GtkComboBox * box, gpointer data) \brief change default time units \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void tunit_changed (GtkComboBox * box, gpointer data) { tmp_delta_t[1] = (double) combo_get_active ((GtkWidget *)box); int i = GPOINTER_TO_INT(data); combo_set_active (dyna_combo[(i == 7) ? 1 : 0], (int)tmp_delta_t[1]); update_omega_max (); } GtkWidget * all_cut_box = NULL; GtkWidget * cut_combo[2]; GtkWidget * pcut_box[2]; GtkWidget * tcut_entry = NULL; GtkWidget * tcut_box = NULL; GtkWidget * cut_comments = NULL; bond_cutoff * cut_list; /*! \fn G_MODULE_EXPORT void totcut_changed (GtkComboBox * box, gpointer data) \brief change method to evaluate the total cutoff \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void totcut_changed (GtkComboBox * box, gpointer data) { if (combo_get_active((GtkWidget *)box)) { tmp_totcut = 2.0; show_the_widgets (tcut_box); } else { tmp_totcut = 0.0; hide_the_widgets (tcut_box); } update_entry_double((GtkEntry *)tcut_entry, tmp_totcut); } /*! \fn G_MODULE_EXPORT void edit_pc_value (GtkEntry * res, gpointer data) \brief update partial cutoff value \param res the GtkEntry the signal is coming from \param data the associated data pointer */ G_MODULE_EXPORT void edit_pc_value (GtkEntry * res, gpointer data) { bond_cutoff * cut = (bond_cutoff *)data; const gchar * m = entry_get_text (res); double value = string_to_double ((gpointer)m); if (value > 0.0) { cut -> cutoff = value; } update_entry_double (res, cut -> cutoff); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_use_cutoff (GtkCheckButton * but, gpointer data) \brief toggle select / unselect this cutoff callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_use_cutoff (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_use_cutoff (GtkToggleButton * but, gpointer data) \brief toggle select / unselect this cutoff callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_use_cutoff (GtkToggleButton * but, gpointer data) #endif { bond_cutoff * cut = (bond_cutoff *)data; cut -> use = button_get_status ((GtkWidget *)but); } /*! \fn void add_cut_box () \brief update partial cutoffs widgets */ void add_cut_box () { GtkWidget * hbox; GtkWidget * entry; int i; for (i=0; i<2; i++) pcut_box[i] = NULL; pcut_box[0] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, all_cut_box, pcut_box[0], FALSE, FALSE, 10); if (cut_list) { hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, pcut_box[0], hbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Spec. α"), 60, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Spec. β"), 60, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Rcut (α, β)"), 100, -1, 0.5, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Use *"), 20, -1, 0.5, 0.5), FALSE, FALSE, 10); } pcut_box[1] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, all_cut_box, pcut_box[1], FALSE, FALSE, 10); bond_cutoff * tmp_cut = cut_list; while (tmp_cut) { hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, pcut_box[1], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(periodic_table_info[tmp_cut -> Z[0]].lab, 60, -1, 0.5, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(periodic_table_info[tmp_cut -> Z[1]].lab, 60, -1, 0.5, 0.5), FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(edit_pc_value), 100, 10, FALSE, (gpointer)tmp_cut); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); update_entry_double ((GtkEntry *)entry, tmp_cut -> cutoff); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (NULL, 20, -1, tmp_cut -> use, G_CALLBACK(toggled_use_cutoff), (gpointer)tmp_cut), FALSE, FALSE, 10); tmp_cut = tmp_cut -> next; } cut_comments = destroy_this_widget (cut_comments); cut_comments = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, all_cut_box, cut_comments, FALSE, FALSE, 10); if (cut_list) append_comments (cut_comments, "*", _("Unused values will not be saved !")); for (i=0; i<2; i++) combo_set_active (cut_combo[i], -1); show_the_widgets (all_cut_box); } /*! \fn gboolean not_in_cutoffs (int z_a, int z_b) \brief look in bond cutoff between species a and b is already defined */ gboolean not_in_cutoffs (int z_a, int z_b) { bond_cutoff * tmp_cut = cut_list; while (tmp_cut) { if (tmp_cut -> Z[0] == z_a && tmp_cut -> Z[1] == z_b) return FALSE; tmp_cut = tmp_cut -> next; } return TRUE; } /*! \fn G_MODULE_EXPORT void cut_spec_changed (GtkComboBox * box, gpointer data) \brief partial cutoff chemical species \param box the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void cut_spec_changed (GtkComboBox * box, gpointer data) { int i, j, k, l; i = combo_get_active (cut_combo[0]); j = combo_get_active (cut_combo[1]); k = min (i+1, j+1); l = max (i+1, j+1); if (k && l) { if (not_in_cutoffs(k, l)) { bond_cutoff * tmp_cut; if (! cut_list) { cut_list = g_malloc0(sizeof*cut_list); tmp_cut = cut_list; } else { tmp_cut = cut_list; while (tmp_cut -> next) { tmp_cut = tmp_cut -> next; } tmp_cut -> next = g_malloc0(sizeof*tmp_cut -> next); tmp_cut -> next -> prev = tmp_cut; tmp_cut = tmp_cut -> next; } tmp_cut -> Z[0] = min(k, l); tmp_cut -> Z[1] = max(k, l); tmp_cut -> use = FALSE; tmp_cut -> cutoff = 1.0; add_cut_box (); } } } /*! \fn bond_cutoff * duplicate_cutoffs (bond_cutoff * old_cutoff) \brief duplicate bond cutoff data structure \param old_cutoff the cutoff data structure to duplicate */ bond_cutoff * duplicate_cutoffs (bond_cutoff * old_cutoff) { bond_cutoff * new_cutoff = NULL; bond_cutoff * cut_a, * cut_b; cut_a = old_cutoff; while (cut_a) { if (cut_a -> use) { if (! new_cutoff) { new_cutoff = g_malloc0(sizeof*new_cutoff); cut_b = new_cutoff; } else { cut_b -> next = g_malloc0(sizeof*cut_b -> next); cut_b -> next -> prev = cut_b; cut_b = cut_b -> next; } cut_b -> Z[0] = cut_a -> Z[0]; cut_b -> Z[1] = cut_a -> Z[1]; cut_b -> use = cut_a -> use; cut_b -> cutoff = cut_a -> cutoff; } cut_a = cut_a -> next; } return new_cutoff; } /*! \fn G_MODULE_EXPORT void edit_cutoffs (GtkDialog * edit_cuts, gint response_id, gpointer data) \brief edit partial cutoffs - running the dialog \param edit_cuts the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void edit_cutoffs (GtkDialog * edit_cuts, gint response_id, gpointer data) { switch (response_id) { case GTK_RESPONSE_APPLY: tmp_bond_cutoff = duplicate_cutoffs (cut_list); break; } if (cut_list) { g_free (cut_list); cut_list = NULL; } int i; for (i=0; i<2; i++) { cut_combo[i] = destroy_this_widget (cut_combo[i]); pcut_box[i] = destroy_this_widget (pcut_box[i]); } cut_comments = destroy_this_widget (cut_comments); all_cut_box = destroy_this_widget (all_cut_box); destroy_this_widget ((GtkWidget *)edit_cuts); } /*! \fn G_MODULE_EXPORT void set_cutoffs_default (GtkButton * but, gpointer data) \brief set default cutoff radii \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_cutoffs_default (GtkButton * but, gpointer data) { GtkWidget * win = dialog_cancel_apply (_("Select partial cutoffs(s)"), MainWindow, TRUE); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); all_cut_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, all_cut_box, FALSE, FALSE, 50); cut_list = duplicate_cutoffs (tmp_bond_cutoff); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, all_cut_box, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Spec. α"), 60, -1, 0.0, 0.5), FALSE, FALSE, 0); int i, j; for (i=0; i<2; i++) { cut_combo[i] = NULL; cut_combo[i] = create_combo (); for (j=1; j<119; j++) { combo_text_append (cut_combo[i], periodic_table_info[j].lab); } g_signal_connect(G_OBJECT(cut_combo[i]), "changed", G_CALLBACK(cut_spec_changed), NULL); show_the_widgets (cut_combo[i]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cut_combo[0], FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(" ", 20, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Spec. β"), 60, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cut_combo[1], FALSE, FALSE, 5); add_cut_box (); run_this_gtk_dialog (win, G_CALLBACK(edit_cutoffs), NULL); } /*! \fn void dyna_parameters (GtkWidget * vbox, int cid) \brief create time related configuration widgets \param vbox the target box to insert the new widgets \param cid the calculation ID (7 = MSD, 8 = S(q,w) */ void dyna_parameters (GtkWidget * vbox, int cid) { gchar * default_leg[2] = {i18n("Step(s) between configurations"), i18n("Step(s) between conf.")}; int wid = (cid == 7) ? 0 : 1; GtkWidget * hbox; hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_(default_leg[(cid == 7) ? 0 : 1]), (cid == 7) ? 285 : 150, -1, 0.0, 0.5), FALSE, FALSE, (cid == 7) ? 30 : 5); dyna_entry[wid][0] = create_entry (G_CALLBACK(set_default_num_delta), (cid == 7) ? 110 : 100, (cid == 7) ? 10 : 15, FALSE, GINT_TO_POINTER(cid)); update_entry_int ((GtkEntry *)dyna_entry[wid][0], tmp_num_delta[cid]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, dyna_entry[wid][0], FALSE, FALSE, (cid == 7) ? 0 : 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("Time step δt"), (cid == 7) ? 285 : 150, -1, 0.0, 0.5), FALSE, FALSE, (cid == 7) ? 30 : 5); dyna_entry[wid][1] = create_entry (G_CALLBACK(set_default_num_delta), (cid == 7) ? 110 : 100, (cid == 7) ? 10 : 15, FALSE, GINT_TO_POINTER(cid+2)); update_entry_double ((GtkEntry *)dyna_entry[wid][1], tmp_delta_t[0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, dyna_entry[wid][1], FALSE, FALSE, (cid == 7) ? 0 : 10); dyna_combo[wid] = create_combo (); int i; for (i=0; i<5 ; i++) combo_text_append (dyna_combo[wid], untime[i]); combo_set_active (dyna_combo[wid], (int)tmp_delta_t[1]); g_signal_connect(G_OBJECT(dyna_combo[wid]), "changed", G_CALLBACK(tunit_changed), GINT_TO_POINTER(cid)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, dyna_combo[wid], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); } /*! \fn GtkWidget * calc_preferences () \brief analysis preferences */ GtkWidget * calc_preferences () { GtkWidget * notebook = gtk_notebook_new (); GtkWidget * vbox; GtkWidget * hbox; gtk_notebook_set_scrollable (GTK_NOTEBOOK(notebook), TRUE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK(notebook), GTK_POS_TOP); gchar * default_delta_num_leg[NUM_DELTA] = {i18n("g(r): number of δr"), i18n("s(q): number of δq"), i18n("s(k): number of δk"), i18n("g(r) FFT: number of δr"), i18n("Dij: number of δr [Dijmin-Dijmax]"), i18n("Angles distribution: number of δθ [0-180°]"), i18n("Spherical harmonics: lmax ∈ [2-40]"), i18n("Step(s) between configurations"), i18n("F(k,δt): number of δk")}; gchar * info[2] = {i18n("The Analysis tab regroups calculation options"), i18n("use it to setup your own default parameters:")}; gchar * m_list[4][2] = {{i18n("Calculations"), i18n("most analysis options")}, {i18n("Rings"), i18n("ring statistics options")}, {i18n("Chains"), i18n("chain statistics options")}, {"S(q,ω)", i18n("dynamic structure factor options")}}; vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, pref_list (info, 3, m_list, NULL), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("To determine the existence, or the absence, of a chemical bond"), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("between 2 atoms is a key feature in the atomes software"), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); GtkWidget * vvbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, vvbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, markup_label(_("It is used for analysis purposes, and, to draw bonds in the OpenGL window."), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); edit_bonds (vbox); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("You can adapt below the distance cutoffs:"), -1, -1, 0.5, 0.5), FALSE, FALSE, 5); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); GtkWidget * hhbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label(_("Total cutoff"), 120, -1, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * combo = create_combo(); combo_text_append (combo, _("Evaluated by atomes")); combo_text_append (combo, _("User Defined *")); combo_set_markup (combo); gtk_widget_set_size_request (combo, 180, -1); combo_set_active (combo, (tmp_totcut == 0.0) ? 0 : 1); g_signal_connect(G_OBJECT(combo), "changed", G_CALLBACK(totcut_changed), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, combo, FALSE, FALSE, 10); tcut_box = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, tcut_box, FALSE, FALSE, 10); tcut_entry = create_entry (G_CALLBACK(set_default_num_delta), 100, 10, FALSE, GINT_TO_POINTER(-1)); update_entry_double ((GtkEntry *)tcut_entry, tmp_totcut); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, tcut_box, tcut_entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, tcut_box, markup_label ("Å", -1, -1, 0.0, 0.5), FALSE, FALSE, 5); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); hhbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label(_("Partial cutoff(s)"), 120, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, create_button (_("Set default cutoff(s)"), IMG_NONE, NULL, 180, -1, GTK_RELIEF_NORMAL, G_CALLBACK(set_cutoffs_default), NULL), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(" ", -1, 20, 0.0, 0.0), FALSE, FALSE, 0); append_comments (vbox, "*", _("The highest this value is, the highest the number of neighbors around an atom.")); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, gtk_label_new (_("General"))); GtkWidget * entry; vbox = create_vbox (BSEP); int i; for (i=0; iDynamical analysis: MSD, S(q,ω)"), 310, -1, 0.0, 0.5), FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); dyna_parameters (vbox, i); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, gtk_label_new (_("Calculations"))); for (i=0; i<2; i++) { vbox = create_vbox (BSEP); search_type = i; calc_rings (vbox); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, gtk_label_new ((i) ? _("Chains") : _("Rings"))); } /*vbox = create_vbox (BSEP); calc_sk_t (vbox); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vbox, markup_label("S(q,ω)", -1, -1, 0.0, 0.5));*/ show_the_widgets (notebook); return notebook; } /*! \fn void clean_all_tmp () \brief free all temporary buffers */ void clean_all_tmp () { int i; if (tmp_num_delta) { g_free (tmp_num_delta); tmp_num_delta = NULL; } if (tmp_delta_t) { g_free (tmp_delta_t); tmp_delta_t = NULL; } if (tmp_rsparam) { g_free (tmp_rsparam); tmp_rsparam = NULL; } if (tmp_csparam) { g_free (tmp_csparam); tmp_csparam = NULL; } if (tmp_opengl) { g_free (tmp_opengl); tmp_opengl = NULL; } if (tmp_lightning.spot) { for (i=0; i rep = old_rep -> rep; new_rep -> proj = old_rep -> proj; new_rep -> zoom = old_rep -> zoom; new_rep -> gnear = old_rep -> gnear; int i; for (i=0; i<2; i++) { new_rep -> c_angle[i] = old_rep -> c_angle[i]; new_rep -> c_shift[i] = old_rep -> c_shift[i]; } } /*! \fn void duplicate_background_data (background * new_back, background * old_back) \brief duplicate background data structure \param new_back the new background structure \param old_back the background structure to copy */ void duplicate_background_data (background * new_back, background * old_back) { new_back -> gradient = old_back -> gradient; new_back -> direction = old_back -> direction; new_back -> position = old_back -> position; new_back -> color = old_back -> color; int i; for (i=0; i<2; i++) { new_back -> gradient_color[i] = old_back -> gradient_color[i]; } } /*! \fn void duplicate_box_data (box * new_box, box * old_box) \brief duplicate box_data data structure \param new_box the new box structure \param old_box the box structure to copy */ void duplicate_box_data (box * new_box, box * old_box) { new_box -> box = old_box -> box; new_box -> color = old_box -> color; new_box -> line = old_box -> line; new_box -> rad = old_box -> rad; } /*! \fn void duplicate_axis_data (axis * new_axis, axis * old_axis) \brief duplicate axis_data data structure \param new_axis the new axis_data structure \param old_axis the axis_data structure to copy */ void duplicate_axis_data (axis * new_axis, axis * old_axis) { new_axis -> axis = old_axis -> axis; new_axis -> length = old_axis -> length; new_axis -> color = old_axis -> color; new_axis -> line = old_axis -> line; new_axis -> rad = old_axis -> rad; new_axis -> t_pos = old_axis -> t_pos; new_axis -> labels = old_axis -> labels; int i; for (i=0; i<3; i++) { new_axis -> c_pos[i] = old_axis -> c_pos[i]; if (old_axis -> title[i]) new_axis -> title[i] = g_strdup_printf ("%s", old_axis -> title[i]); } if (old_axis -> color) { new_axis -> color = duplicate_color (3, old_axis -> color); } } /*! \fn void prepare_tmp_default () \brief prepare temporary parameters */ void prepare_tmp_default () { clean_all_tmp (); tmp_totcut = default_totcut; tmp_bond_cutoff = duplicate_cutoffs (default_bond_cutoff); tmp_num_delta = duplicate_int (NUM_DELTA, default_num_delta); tmp_delta_t = duplicate_double (2, default_delta_t); // Ring statistics tmp_rsparam = duplicate_int (7, default_rsparam); // Chain statistics tmp_csparam = duplicate_int (7, default_csparam); // F(k,t) and S(q,w) tmp_skt_sets = default_skt_sets; tmp_skt_n_sets = default_skt_n_sets; tmp_sqw_n_sets = default_sqw_n_sets; tmp_sqw_freq = default_sqw_freq; tmp_opengl = duplicate_int (5, default_opengl); duplicate_material (& tmp_material, & default_material); tmp_lightning.lights = default_lightning.lights; tmp_lightning.spot = copy_light_sources (tmp_lightning.lights, tmp_lightning.lights, default_lightning.spot); duplicate_fog (& tmp_fog, & default_fog); tmp_clones = default_clones; tmp_cell = default_cell; tmp_o_at_rs = duplicate_bool (10, default_o_at_rs); tmp_at_rs = duplicate_double (10, default_at_rs); tmp_o_bd_rw = duplicate_bool (6, default_o_bd_rw); tmp_bd_rw = duplicate_double (6, default_bd_rw); int i; for (i=0; i<16; i++)tmp_atomic_rad[i] = duplicate_element_radius (default_atomic_rad[i]); for (i=0; i<6; i++) tmp_bond_rad[i] = duplicate_element_radius (default_bond_rad[i]); for (i=0; i<2; i++) { tmp_atom_color[i] = duplicate_element_color (default_atom_color[i]); tmp_label_color[i] = duplicate_element_color (default_label_color[i]); } for (i=0; i<5; i++) { tmp_label[i] = g_malloc0(sizeof*tmp_label[i]); duplicate_screen_label (tmp_label[i], & default_label[i]); } for (i=0; i<2; i++) { tmp_acl_format[i] = default_acl_format[i]; tmp_mtilt[i] = default_mtilt[i]; tmp_mpattern[i] = default_mpattern[i]; tmp_mfactor[i] = default_mfactor[i]; tmp_mwidth[i] = default_mwidth[i]; } tmp_box = g_malloc0(sizeof*tmp_box); duplicate_box_data (tmp_box, & default_box); tmp_background = g_malloc0(sizeof*tmp_background); duplicate_background_data (tmp_background, & default_background); tmp_rep = g_malloc0(sizeof*tmp_rep); duplicate_rep_data (tmp_rep, & default_rep); tmp_axis = g_malloc0(sizeof*tmp_axis); duplicate_axis_data (tmp_axis, & default_axis); for (i=0; i<2; i++) tmp_sel_color[i] = default_sel_color[i]; } gboolean * up_project; /*! \fn G_MODULE_EXPORT void update_projects (GtkDialog * proj_sel, gint response_id, gpointer data) \brief update projects in the workspace using new preferences \param proj_sel the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void update_projects (GtkDialog * proj_sel, gint response_id, gpointer data) { int i, j, k, l; float * tmpcut; gboolean update_bonds; switch (response_id) { case GTK_RESPONSE_OK: // To write apply to opened projects for (i=0; i nspec * this_proj -> nspec; tmpcut = allocfloat(l); l = 0; for (j=0; j nspec; j++) { for (k=0; k nspec; k++, l++) { tmpcut[l] = this_proj -> chemistry -> cutoffs[j][k]; } } if (this_proj -> chemistry -> grtotcutoff != default_totcut) update_bonds = TRUE; } apply_default_parameters_to_project (this_proj, up_project[i+nprojects]); if (up_project[i+nprojects]) { if (! update_bonds) { l = 0; for (j=0; j nspec; j++) { for (k=0; k nspec; k++, l++) { if (this_proj -> chemistry -> cutoffs[j][k] != tmpcut[l]) update_bonds = TRUE; } } } if (update_bonds) { if (this_proj -> modelgl -> rings) { this_proj -> modelgl -> rings = FALSE; for (j=0; j<5; j++) { clean_rings_data (j, this_proj -> modelgl); #ifdef GTK3 update_rings_menus (this_proj -> modelgl); #endif } } if (this_proj -> modelgl -> chains) { clean_chains_data (this_proj -> modelgl); #ifdef GTK3 update_chains_menus (this_proj -> modelgl); #endif } bonds_update = 1; frag_update = (this_proj -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((this_proj -> steps > STEP_LIMIT) ? 0 : 1) : 0; this_proj -> runc[0] = FALSE; this_proj -> dmtx = FALSE; if (this_proj -> id != activep) { k = activep; active_project_changed (this_proj -> id); on_calc_bonds_released (NULL, NULL); active_project_changed (k); } else { update_project (); on_calc_bonds_released (NULL, NULL); } } } } } break; default: break; } g_free (up_project); up_project = NULL; destroy_this_dialog (proj_sel); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_select_project (GtkCheckButton * but, gpointer data) \brief toggle select / unselect project to update callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_select_project (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_select_project (GtkToggleButton * but, gpointer data) \brief toggle select / unselect project to update callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_select_project (GtkToggleButton * but, gpointer data) #endif { up_project[GPOINTER_TO_INT(data)] = button_get_status ((GtkWidget *)but); } /*! \fn void save_preferences () \brief save user preferences */ void save_preferences () { default_totcut = tmp_totcut; if (default_bond_cutoff) { g_free (default_bond_cutoff); default_bond_cutoff = NULL; } default_bond_cutoff = duplicate_cutoffs (tmp_bond_cutoff); if (default_num_delta) { g_free (default_num_delta); default_num_delta = NULL; } default_num_delta = duplicate_int (NUM_DELTA, tmp_num_delta); default_delta_t = duplicate_double (2, tmp_delta_t); if (default_rsparam) { g_free (default_rsparam); default_rsparam = NULL; } default_rsparam = duplicate_int (7, tmp_rsparam); if (default_csparam) { g_free (default_csparam); default_csparam = NULL; } default_csparam = duplicate_int (7, tmp_csparam); if (default_opengl) { g_free (default_opengl); default_opengl = NULL; } default_skt_sets = tmp_skt_sets; default_skt_n_sets = tmp_skt_n_sets; default_sqw_n_sets = tmp_sqw_n_sets; default_sqw_freq = tmp_sqw_freq; default_opengl = duplicate_int (5, tmp_opengl); duplicate_material (& default_material, & tmp_material); default_lightning.lights = tmp_lightning.lights; default_lightning.spot = copy_light_sources (tmp_lightning.lights, tmp_lightning.lights, tmp_lightning.spot); duplicate_fog (& default_fog, & tmp_fog); // Model default_clones = tmp_clones; default_cell = tmp_cell; if (default_o_at_rs) { g_free (default_o_at_rs); default_o_at_rs = NULL; } default_o_at_rs = duplicate_bool (10, tmp_o_at_rs); if (default_at_rs) { g_free (default_at_rs); default_at_rs = NULL; } default_at_rs = duplicate_double (10, tmp_at_rs); if (default_o_bd_rw) { g_free (default_o_bd_rw); default_o_bd_rw = NULL; } default_o_bd_rw = duplicate_bool (6, tmp_o_bd_rw); if (default_bd_rw) { g_free (default_bd_rw); default_bd_rw = NULL; } default_bd_rw = duplicate_double (6, tmp_bd_rw); int i; for (i=0; i<16; i++) { if (default_atomic_rad[i]) g_free (default_atomic_rad[i]); default_atomic_rad[i] = duplicate_element_radius (tmp_atomic_rad[i]); } for (i=0; i<6; i++) { if (default_bond_rad[i]) g_free (default_bond_rad[i]); default_bond_rad[i] = duplicate_element_radius (tmp_bond_rad[i]); } for (i=0; i<2; i++) { if (default_atom_color[i]) g_free (default_atom_color[i]); default_atom_color[i] = duplicate_element_color (tmp_atom_color[i]); if (default_label_color[i]) g_free (default_label_color[i]); default_label_color[i] = duplicate_element_color (tmp_label_color[i]); } for (i=0; i<5; i++) { duplicate_screen_label (& default_label[i], tmp_label[i]); } for (i=0; i<2; i++) { default_acl_format[i] = tmp_acl_format[i]; default_mtilt[i] = tmp_mtilt[i]; default_mpattern[i] = tmp_mpattern[i]; default_mfactor[i] = tmp_mfactor[i]; default_mwidth[i] = tmp_mwidth[i]; } duplicate_rep_data (& default_rep, tmp_rep); duplicate_background_data (& default_background, tmp_background); duplicate_box_data (& default_box, tmp_box); duplicate_axis_data (& default_axis, tmp_axis); for (i=0; i<2; i++) default_sel_color[i] = tmp_sel_color[i]; if (nprojects) { if (ask_yes_no(_("Apply to project(s) in workspace ?"), _("Preferences were saved for the active session !\n Do you want to apply preferences to the project(s) opened in the workspace ?"), GTK_MESSAGE_QUESTION, pref_ogl_edit -> win)) { // Select project here GtkWidget * proj_sel = message_dialogmodal (_("Project selection"), _("Select to apply preferences"), GTK_MESSAGE_QUESTION, GTK_BUTTONS_OK, MainWindow); GtkWidget * vbox = dialog_get_content_area (proj_sel); GtkWidget * hbox; up_project = allocbool (nprojects*2); for (i=0; i name, 200, -1, FALSE, G_CALLBACK(toggled_select_project), GINT_TO_POINTER(i)), FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_("Including analysis parameters and cutoffs ..."), -1, -1, FALSE, G_CALLBACK(toggled_select_project), GINT_TO_POINTER(i+nprojects)), FALSE, FALSE, 20); } run_this_gtk_dialog (proj_sel, G_CALLBACK(update_projects), NULL); } } } /*! \fn void adjust_preferences_window () \brief adjust the widgets of the preferences window */ void adjust_preferences_window () { int i; if (tmp_totcut == 0.0) { hide_the_widgets (tcut_box); } else { show_the_widgets (tcut_box); } update_entry_double ((GtkEntry *)tcut_entry, tmp_totcut); update_light_data (0, pref_ogl_edit); setup_fog_dialogs (pref_ogl_edit, tmp_fog.mode); if (tmp_box -> box > NONE) { hide_the_widgets ((tmp_box -> box == WIREFRAME) ? pref_box_win -> radius_box : pref_box_win -> width_box); } hide_the_widgets ((tmp_axis -> axis == WIREFRAME) ? pref_axis_win -> radius_box : pref_axis_win -> width_box); for (i=0; i<2; i++) widget_set_sensitive (pref_axis_win -> axis_label_box[i], tmp_axis -> labels); update_gradient_widgets (pref_gradient_win, tmp_background); i = combo_get_active (meas_combo); i = (i < 0) ? 0 : i; hide_the_widgets (meas_box[! i]); show_the_widgets (meas_box[i]); i = combo_get_active (sel_combo); i = (i < 0) ? 0 : i; hide_the_widgets (sel_box[! i]); show_the_widgets (sel_box[i]); } /*! \fn G_MODULE_EXPORT void restore_all_defaults (GtkButton * but, gpointer data) \brief restore all default parameters \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void restore_defaults_parameters (GtkButton * but, gpointer data) { if (ask_yes_no(_("Restore default parameters"), _("Are you sure ?"), GTK_MESSAGE_QUESTION, MainWindow)) { set_atomes_defaults (); prepare_tmp_default (); int i; for (i=4; i>0; i--) { destroy_this_widget (gtk_notebook_get_nth_page (GTK_NOTEBOOK (preference_notebook), i)); } gtk_notebook_append_page (GTK_NOTEBOOK(preference_notebook), calc_preferences(), gtk_label_new (_("Analysis "))); gtk_notebook_append_page (GTK_NOTEBOOK(preference_notebook), opengl_preferences(), gtk_label_new ("OpenGL")); gtk_notebook_append_page (GTK_NOTEBOOK(preference_notebook), model_preferences(), gtk_label_new (_("Model"))); gtk_notebook_append_page (GTK_NOTEBOOK(preference_notebook), view_preferences(), gtk_label_new (_("View"))); gtk_notebook_set_current_page (GTK_NOTEBOOK(preference_notebook), 0); show_the_widgets (preference_notebook); adjust_preferences_window (); } } /*! \fn G_MODULE_EXPORT void edit_preferences (GtkDialog * edit_prefs, gint response_id, gpointer data) \brief edit preferences - running the dialog \param edit_prefs the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void edit_preferences (GtkDialog * edit_prefs, gint response_id, gpointer data) { switch (response_id) { case GTK_RESPONSE_APPLY: if (ask_yes_no(_("Save parameters"), _("Are you sure ?"), GTK_MESSAGE_QUESTION, MainWindow)) { save_preferences (); gchar * str = g_strdup_printf (_("Do you want to save atomes preferences in:\n\n\t%s\n\nIf found this file is processed at every atomes startup.\n\n\t\t\t\t\t\tSave file ?"), ATOMES_CONFIG); if (ask_yes_no(_("Save atomes preferences to file ?"), str, GTK_MESSAGE_QUESTION, (GtkWidget *)edit_prefs)) { if (! save_preferences_to_xml_file ()) { show_error ((pref_error) ? pref_error : _("Error while trying to save preferences to file"), 0, MainWindow); g_free (pref_error); pref_error = NULL; } } g_free (str); } break; default: omega_max_info = destroy_this_widget (omega_max_info); omega_max_hbox = destroy_this_widget (omega_max_hbox); skt_all_info = destroy_this_widget (skt_all_info); preferences = FALSE; clean_all_tmp (); g_free (pref_pointer); pref_pointer = NULL; if (pref_box_win) g_free (pref_box_win); pref_box_win = NULL; if (pref_rep_win) g_free (pref_rep_win); pref_rep_win = NULL; if (pref_axis_win) g_free (pref_axis_win); pref_axis_win = NULL; if (pref_gradient_win) g_free (pref_gradient_win); pref_gradient_win = NULL; preference_notebook = destroy_this_widget (preference_notebook); destroy_this_dialog ((GtkDialog *)edit_prefs); edit_prefs = NULL; break; } } /*! \fn void create_configuration_dialog () \brief create the configuration window */ void create_user_preferences_dialog () { GtkWidget * win = dialog_cancel_apply (_("User preferences"), MainWindow, TRUE); preferences = TRUE; prepare_tmp_default (); GtkWidget * vbox = dialog_get_content_area (win); gtk_widget_set_size_request (win, 625, 645); gtk_window_set_resizable (GTK_WINDOW (win), FALSE); preference_notebook = gtk_notebook_new (); gtk_notebook_set_scrollable (GTK_NOTEBOOK(preference_notebook), TRUE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK(preference_notebook), GTK_POS_LEFT); gtk_widget_set_size_request (preference_notebook, 600, 635); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, preference_notebook, FALSE, FALSE, 0); GtkWidget * gbox = create_vbox (BSEP); gchar * mess[2] = {i18n("Browse the following to modify the default configuration of atomes"), i18n("by replacing internal parameters by user defined preferences.")}; gchar * mlist[4][2]= {{i18n("Analysis "), i18n("calculation preferences")}, {"OpenGL", i18n("rendering preferences")}, {i18n("Model"), i18n("atom(s), bond(s) and box preferences")}, {i18n("View"), i18n("representation and projection preferences")}}; gchar * end = i18n("Default parameters are used for any new project added to the workspace\n"); pref_pointer = g_malloc0(NUM_COLORS*sizeof*pref_pointer); int i; for (i=0; iatomes default parameters"), -1, -1, 0.5, 0.5); add_container_child (CONTAINER_BUT, but, but_lab); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 150); add_box_child_start (GTK_ORIENTATION_VERTICAL, gbox, hbox, FALSE, FALSE, 0); gtk_notebook_append_page (GTK_NOTEBOOK(preference_notebook), gbox, gtk_label_new (_("General"))); gtk_notebook_append_page (GTK_NOTEBOOK(preference_notebook), calc_preferences(), gtk_label_new (_("Analysis "))); gtk_notebook_append_page (GTK_NOTEBOOK(preference_notebook), opengl_preferences(), gtk_label_new ("OpenGL")); gtk_notebook_append_page (GTK_NOTEBOOK(preference_notebook), model_preferences(), gtk_label_new (_("Model"))); gtk_notebook_append_page (GTK_NOTEBOOK(preference_notebook), view_preferences(), gtk_label_new ("View")); show_the_widgets (preference_notebook); gtk_notebook_set_current_page (GTK_NOTEBOOK(preference_notebook), 0); run_this_gtk_dialog (win, G_CALLBACK(edit_preferences), NULL); } /*! \fn G_MODULE_EXPORT void set_default_options (GtkButton * but, gpointer data) \brief set options as default options \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_default_options (GtkButton * but, gpointer data) { tint * oid = (tint *)data; gchar * pstring[5]={i18n("rendering"), i18n("box"), i18n("axis"), i18n("background"), i18n("representation")}; gchar * str = g_strdup_printf (_("Set %s preferences as default preferences ?"), _(pstring[oid -> b])); project * this_proj = get_project_by_id(oid -> a); if (ask_yes_no(_("Set model preferences as default ?"), str, GTK_MESSAGE_QUESTION, this_proj -> modelgl -> win)) { g_free (str); image * img = this_proj -> modelgl -> anim -> last -> img; switch (oid -> b) { case 0: // OpenGL preferences, style and color mpas not included : rendering only default_opengl[3] = img -> quality; default_opengl[4] = img -> ray_tracing; duplicate_material (& default_material, & img -> m_terial); default_lightning.lights = img -> l_ghtning.lights; default_lightning.spot = copy_light_sources (img -> l_ghtning.lights, img -> l_ghtning.lights, img -> l_ghtning.spot); duplicate_fog (& default_fog, & img -> f_g); break; case 1: // Box duplicate_box_data (& default_box, img -> abc); break; case 2: // Axis duplicate_axis_data (& default_axis, img -> xyz); break; case 3: // Background duplicate_background_data (& default_background, img -> back); break; case 4: // Representation default_rep.rep = img -> rep; default_rep.zoom = img -> zoom; default_rep.gnear = img -> gnear; int i; for (i=0; i<2; i++) { default_rep.c_angle[i] = img -> c_angle[i]; default_rep.c_shift[i] = img -> c_shift[i]; } break; } str = g_strdup_printf (_("Do you want to save atomes preferences in:\n\n\t%s\n\nIf found this file is processed at every atomes startup.\n\n\t\t\t\t\t\tSave file ?"), ATOMES_CONFIG); if (ask_yes_no(_("Save atomes preferences to file ?"), str, GTK_MESSAGE_QUESTION, this_proj -> modelgl -> win)) { if (! save_preferences_to_xml_file ()) { show_error ((pref_error) ? pref_error : _("Error while trying to save preferences to file"), 0, MainWindow); g_free (pref_error); pref_error = NULL; } } g_free (str); } else { g_free (str); } } /*! \fn void add_global_option (GtkWidget * vbox, tint * oid) \brief add a button to update global user preferences \param the widget to insert the button in \param oid the option id pointer */ void add_global_option (GtkWidget * vbox, tint * oid) { GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, FALSE, 0); GtkWidget * but = create_button (_("Set default"), IMG_NONE, NULL, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(set_default_options), oid); add_box_child_end (hbox, but, FALSE, FALSE, 0); } atomes_1.3.1/src/gui/callbacks.h0000664000175000017500000000430115212624223016146 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file callbacks.h * @short Callback declarations for main window * @author Sébastien Le Roux */ /* * This header file: 'callbacks.h' * * Contains: - Callback declarations for main window */ #ifndef CALLBACKS_H_ #define CALLBACKS_H_ extern void fill_tool_model (); void free_data (); void quit_gtk (); void show_Help (); G_MODULE_EXPORT int open_save_workspace (FILE * fp, int act); G_MODULE_EXPORT int open_save (FILE * fp, int act, int wid, int pid, int aid, gchar * pfile); G_MODULE_EXPORT void on_close_workspace (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_open_save_activate (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_save_as_activate (GtkWidget * widg, gpointer data); extern void open_this_isaacs_xml_file (gchar * profile, int ptoc, gboolean visible); G_MODULE_EXPORT void on_isaacs_port (GtkWidget * widg, gpointer data); extern void open_this_coordinate_file (int format, gchar * proj_name); G_MODULE_EXPORT void on_coord_port (GtkWidget * widg, gpointer data); void to_read_pos (); void display_distances (); void run_project (); void apply_project (gboolean showtools); G_MODULE_EXPORT void on_Bonds_activate (); G_MODULE_EXPORT void on_Help_released (GtkButton * but, gpointer data); G_MODULE_EXPORT void on_check_toggled (GtkToggleButton * Button, gpointer data); G_MODULE_EXPORT void expanding (GtkExpander * expander, gpointer data); G_MODULE_EXPORT void on_show_curve_toolbox (GtkWidget * widg, gpointer data); #endif atomes_1.3.1/src/gui/main.c0000664000175000017500000012651015212624223015155 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file main.c * @short Initialization of the atomes program \n Functions required to read data from the command line * @author Sébastien Le Roux */ /* * This file: 'main.c' * * Contains: * - The initialization of the atomes program - The functions required to read data from the command line * * List of functions: int test_this_ext (int len, gchar * arg); int test_this_arg (gchar * arg); int get_style_from_string (gchar * style_string); int get_rep_from_string (gchar * rep_string); int get_box_axis_from_string (gchar * box_axis_string); int get_color_map_from_string (gchar * col_string); int get_gradient_from_string (gchar * grad_string); int check_for_atomes_file_options (int start, int end, char *argv[]); int parse_command_line (int argc, char *argv[]) int main (int argc, char *argv[]); ColRGBA * get_color_from_hexa_string (gchar * color_string); gboolean destroy_func (gpointer user_data); G_MODULE_EXPORT gboolean splashdraw (GtkWidget * widget, cairo_t * cr, gpointer data); void printhelp(); void printversion (); void read_this_file (int file_type, gchar * this_file); void open_this_data_file (int file_type, gchar * file_name); G_MODULE_EXPORT void run_program (GApplication * app, gpointer data); GtkWidget * create_splash_window (); * * Notes: * LLM tools (Le Chat) were used at few occasions to prepare some sections of this file, including: - To write of the function to convert hexadecimal chain to color */ #include #include #include "version.h" #include "global.h" #include "bind.h" #include "callbacks.h" #include "preferences.h" #include "interface.h" #include "project.h" #include "workspace.h" #include "glview.h" #include "movie.h" #ifdef G_OS_WIN32 #define APP_EXTENSION ".exe" #include #else #include #define APP_EXTENSION #endif extern GtkWidget * create_main_window (GApplication * app); const gchar * dfi[2]; struct file_list { gchar * file_name; int file_type; struct file_list * next; }; struct file_list * flist = NULL; struct file_list * ftmp = NULL; gboolean with_workspace = FALSE; gchar * bs_styles[] = {"ball&stick", "balls&sticks", "balls&stick", "ball&sticks", "ball_&_stick", "balls_&_sticks", "balls_&_stick", "ball_&_sticks", "ball_and_sticks", "balls_and_sticks", "balls_and_stick", "ball_and_stick", "ballsandsticks", "ballsandstick", "ballanddsticks", "ballandstick", "b&s", "b_and_s", "bs", "b", NULL}; gchar * wi_styles[] = {"wireframe", "wireframes", "wires", "wire", "wi", "w", NULL}; gchar * co_styles[] = {"covalent_radius", "covalent", "cov_rad", "cov", "co", "cr", NULL}; gchar * io_styles[] = {"ionic_radius", "ionic_rad", "ionic", "ion", "ir", NULL}; gchar * vw_styles[] = {"vdw_radius", "van_der_waals_radius", "van_der_waals", "vdw_radius", "vdw_rad", "vdw", "vr", NULL}; gchar * cr_styles[] = {"crystal", "crystal_radius", "in_crystal", "in_crystal_radius", "cryst", "crystal_rad", "cr", NULL}; gchar * sp_styles[] = {"sphere", "spheres", "sph", "sp", "S", NULL}; gchar * cy_styles[] = {"cylinder", "cylinders", "cyl", "cy", "c", NULL}; gchar * do_styles[] = {"dot", "dots", "d", NULL}; /*! \fn void print_help() \brief print basic help */ void print_help() { printf (_("\nUsage: atomes [OPTION]\n" " atomes [FILE]\n" " atomes [OPTION] [FILE]\n" " atomes [FILE1] [FILE2] ...\n" " atomes [OPTION1] [FILE1] [OPTION2] [FILE2] ...\n\n" "3D atomic-scale models analysis, creation/edition and post-processing tool\n\n" "options:\n" " -v, --version version information\n" " -h, --help display this help message\n\n" "files, any number, in any order, in the following formats:\n\n" " atomes workspace file : .awf\n" " atomes project file : .apf\n" " XYZ coordinates file : .xyz\n" " Chem3D coordinates file : .c3d\n" " CPMD trajectory : .trj\n" " VASP trajectory : .xdatcar\n" " PDB coordinates : .pdb, .ent\n" " Crystallographic Information File : .cif\n" " DL-POLY history file : .hist\n" " ISAACS project file : .ipf\n\n" " alternatively specify the file format using:\n\n" " -awf [FILE]\n" " -apf [FILE]\n" " -xyz [FILE]\n" " -c3d [FILE]\n" " -trj [FILE]\n" " -xdatcar [FILE]\n" " -pdb [FILE], or, -ent [FILE]\n" " -cif [FILE]\n" " -hist [FILE]\n" " -ipf [FILE]\n\n" "ex:\n\n" " atomes -pdb this.f file.awf -cif that.f *.xyz\n\n" "Image rendering from the command line:\n\n" "Usage: atomes [IMAGE_OPTIONS]\n" " -p, --png, --render-png render image in PNG format\n" " -j, --jpg, --render-jpg render image in JPEG format\n" " -o, --output=[FILE] image file name\n" " -W, --width=[XSIZE] image width\n" " -H, --height=[YSIZE] image height\n" " -s, --style=[STYLE] rendering style\n" " -r, --rep=[REP] representation type\n" " -b, --box=[STYLE] box style\n" " -a, --axis=[STYLE] axis style\n" " -e, --acolor=[MAP] atoms and bonds color map\n" " -t, --pcolor=[MAP] ployhedra color map\n" " -C, --box_color=[COLOR] box color\n" " -G, --back_grad=[GRAD] background gradient type\n" " -B, --back_color=[COLOR] background color\n" " -D, --back_dir=[DIR] background gradient direction\n" " -P, --back_pos=[POS] colors mixed position\n" " -U, --grad_col_a=[COL] gradient initial color\n" " -V, --grad_col_b=[COL] gradient final color\n\n" "ex:\n\n" " atomes --render-png --width=1920 -H 1024 --output=image.png project.apf -s ball_and_stick\n" " atomes --jpg --style=vdw -r ortho -e pc -t pc\n\n")); printf ("%s", _("\nReport a bug to <")); printf ("%s>\n\n", PACKAGE_BUGREPORT); } /*! \fn void print_version () \brief print version information */ void print_version () { printf ("%s", _("\n3D atomic scale model analysis, creation/edition and post-processing tool\n")); printf ("\n%s version : %s\n", PACKAGE, VERSION); printf ("\nGTK+ version : %1d.%1d.%1d\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf ("Libavutil version : %2d.%2d.%3d\n", LIBAVUTIL_VERSION_MAJOR, LIBAVUTIL_VERSION_MINOR, LIBAVUTIL_VERSION_MICRO); printf ("Libavformat version : %2d.%2d.%3d\n", LIBAVFORMAT_VERSION_MAJOR, LIBAVFORMAT_VERSION_MINOR, LIBAVFORMAT_VERSION_MICRO); printf ("Libavcodec version : %2d.%2d.%3d\n", LIBAVCODEC_VERSION_MAJOR, LIBAVCODEC_VERSION_MINOR, LIBAVCODEC_VERSION_MICRO); printf ("Libswscale version : %2d.%2d.%3d\n", LIBSWSCALE_VERSION_MAJOR, LIBSWSCALE_VERSION_MINOR, LIBSWSCALE_VERSION_MICRO); #ifdef OPENMP float v = 0.0; char * v_string; switch (_OPENMP) { case 200505: v = 2.5; v_string = "2005-05"; break; case 200805: v = 3.0; v_string = "2008-05"; break; case 201107: v = 3.1; v_string = "2011-07"; break; case 201307: v = 4.0; v_string = "2013-07"; break; case 201511: v = 4.5; v_string = "2015-11"; break; case 201811: v = 5.0; v_string = "2018-11"; break; case 202011: v = 5.1; v_string = "2020-11"; break; case 202111: v = 5.2; v_string = "2021-11"; break; default: v_string = "unknown"; break; } printf ("OpenMP version : %1.1f (%s)\n", v, v_string); #endif printf ("FC Compiler : %s\n", FC); printf ("FC Compiler flags : %s\n", FCFLAGS); printf ("C Compiler : %s\n", CC); printf ("C Compiler flags : %s\n", CFLAGS); printf ("%s", _("\nReport a bug to <")); printf ("%s>\n\n", PACKAGE_BUGREPORT); } /*! \fn int test_this_ext (int len, gchar * arg) \brief test extension of an argument from the command line \param len argument string length \param arg the argument to test */ int test_this_ext (int len, gchar * arg) { int i; gchar * aext = g_strdup_printf ("%c%c%c%c", arg[len-4], arg[len-3], arg[len-2], arg[len-1]); char * eext[15]={".awf", ".apf", ".xyz", "NULL", ".c3d", ".trj", "NULL", "tcar", "NULL", ".pdb", ".ent", ".cif", "NULL", "hist", ".ipf"}; for (i=0; i<15; i++) if (g_strcmp0 (aext, eext[i]) == 0) { g_free (aext); return -(i+1); } g_free (aext); return 0; } /*! \fn int test_this_arg (gchar * arg) \brief test an argument from the command line \param arg the argument to test */ int test_this_arg (gchar * arg) { char * fext[15]={"-awf", "-apf", " -xyz", "NULL", "-c3d", "-trj", "NULL", "-xdatcar", "NULL", "-pdb", "-ent", "-cif", "NULL", "-hist", "-ipf"}; int i, j; i = strlen(arg); gchar * str = g_ascii_strdown (arg, i); for (j=0; j<15; j++) { if (g_strcmp0 (str, fext[j]) == 0) { g_free (str); return j+1; } } j = test_this_ext (i, str); g_free (str); return (j) ? j : 0; } /*! \fn gboolean is_string_in_string_list (gchar * string, gchar ** list) \brief check if a string is in a list of strings \param string the string to search for \param list the string list */ gboolean is_string_in_string_list (gchar * string, gchar ** list) { if (string != NULL) { while (* list != NULL) { if (g_strcmp0(* list, string) == 0) { return TRUE; } list ++; } } return FALSE; } /*! \fn int get_style_from_string (gchar * style_string) \brief retrieve style from command line string \param style_string the style keyword from command line */ int get_style_from_string (gchar * style_string) { if (is_string_in_string_list(style_string, bs_styles)) return BALL_AND_STICK; if (is_string_in_string_list(style_string, wi_styles)) return WIREFRAME; if (is_string_in_string_list(style_string, co_styles)) return OGL_STYLES; if (is_string_in_string_list(style_string, io_styles)) return OGL_STYLES+1; if (is_string_in_string_list(style_string, vw_styles)) return OGL_STYLES+2; if (is_string_in_string_list(style_string, cr_styles)) return OGL_STYLES+3; if (is_string_in_string_list(style_string, sp_styles)) return SPHERES; if (is_string_in_string_list(style_string, cy_styles)) return CYLINDERS; if (is_string_in_string_list(style_string, do_styles)) return PUNT; return NONE; } /*! \fn int get_rep_from_string (gchar * rep_string) \brief retrieve representation style from command line string \param rep_string the representation keyword from command line */ int get_rep_from_string (gchar * rep_string) { gchar * ortho_keys[] = {"orthographic", "ortho", "o", "0", NULL}; gchar * persp_keys[] = {"perspective", "persp", "p", "1", NULL}; if (is_string_in_string_list(rep_string, ortho_keys)) return ORTHOGRAPHIC; if (is_string_in_string_list(rep_string, persp_keys)) return PERSPECTIVE; return NONE; } /*! \fn int get_box_axis_from_string (gchar * box_axis_string) \brief retrieve box or axis style from command line string \param box_axis_string the axis keyword from command line */ int get_box_axis_from_string (gchar * box_axis_string) { if (is_string_in_string_list(box_axis_string, wi_styles)) return WIREFRAME; if (is_string_in_string_list(box_axis_string, cy_styles)) return CYLINDERS; return NONE; } /*! \fn int get_color_map_from_string (gchar * col_string) \brief retrieve color map from command line string \param col_string the color map keyword from command line */ int get_color_map_from_string (gchar * col_string) { gchar * sp_keys[] = {"species", "spec", "sp", "0", NULL}; gchar * pt_keys[] = {"total_coordinations", "total_coordination", "total_coord", "total", "tc", "t", "1", NULL}; gchar * pc_keys[] = {"partial_coordinations", "partial_coordination", "partial_coord", "partial", "pc", "p", "2", NULL}; gchar * fg_keys[] = {"fragments", "fragment", "frag", "fg", "f", "3", NULL}; gchar * mo_keys[] = {"molecules", "molecule", "mol", "mo", "m", "4", NULL}; if (is_string_in_string_list(col_string, sp_keys)) return 0; if (is_string_in_string_list(col_string, pt_keys)) return 1; if (is_string_in_string_list(col_string, pc_keys)) return 2; if (is_string_in_string_list(col_string, fg_keys)) return 3; if (is_string_in_string_list(col_string, mo_keys)) return 4; return NONE; } /*! \fn ColRGBA * get_color_from_hexa_string (gchar * color_string) \brief convert Hexadecimal string to ColRGBA \param color_string the color keyword from command line (formats: #RGB, RGB, #RGBA, RGBA, #RRGGBB, RRGGBB, #RRGGBBAA, RRGGBBAA). */ ColRGBA * get_color_from_hexa_string (gchar * color_string) { ColRGBA * col = NULL; const char * color = color_string; // Ignorer le '#' si présent au début if (color[0] == '#') color ++; size_t len = strlen(color); if (len != 3 && len != 4 && len != 6 && len != 8) { // longueur de chaîne incompatible return NULL; } // Format long ? int is_long = (len == 6 || len == 8) ? TRUE : FALSE; float ratio = (is_long) ? 255.0 : 15.0; int incr = (is_long) ? 2 : 1; col = g_malloc0(sizeof*col); col -> alpha = 1.0; char buf[3] = {0}; // pour les caractères à examiner // Format court (#RGB ou #RGBA) buf[incr] = '\0'; buf[0] = color[0]; if (is_long) buf[1] = color[1]; col->red = strtol(buf, NULL, 16) / ratio; buf[0] = color[incr]; if (is_long) buf[1] = color[incr+1]; col->green = strtol(buf, NULL, 16) / ratio; buf[0] = color[2*incr]; if (is_long) buf[1] = color[2*incr+1]; col->blue = strtol(buf, NULL, 16) / ratio; if (len == 4 || len == 8) { buf[0] = color[3*incr]; if (is_long) buf[1] = color[3*incr+1]; col->alpha = strtol(buf, NULL, 16) / ratio; } // Safety net if (col -> red < 0.0 || col -> red > 1.0 || col -> green < 0.0 || col -> green > 1.0 || col -> blue < 0.0 || col -> blue > 1.0 || col -> alpha < 0.0 || col -> alpha > 1.0) { g_free(col); return NULL; } return col; } /*! \fn int get_gradient_from_string (gchar * grad_string) \brief retrieve background gradient from command line string \param grad_string the color map keyword from command line */ int get_gradient_from_string (gchar * grad_string) { gchar * no_keys[] = {"none", "no", "n", "0", NULL}; gchar * li_keys[] = {"linear", "lin", "li", "l", "1", NULL}; gchar * ci_keys[] = {"circular", "circ", "ci", "c", "2", NULL}; if (is_string_in_string_list(grad_string, no_keys)) return 0; if (is_string_in_string_list(grad_string, li_keys)) return 1; if (is_string_in_string_list(grad_string, ci_keys)) return 2; return NONE; } /*! \fn int check_for_atomes_file_options (int start, int end, char *argv[]) \brief retrieve the list of files to read from the command line leave out all other options \param start starting position on the command line \param end ending position on the command line \param *argv[] list of argument(s) on the command line */ int check_for_atomes_file_options (int start, int end, char *argv[]) { int i, j, k; i=0; for (j=start; j 0 && j < end-1) { if (! (k == 1 && with_workspace)) { if (! flist) { flist = g_malloc0(sizeof*flist); ftmp = flist; } else { ftmp -> next = g_malloc0(sizeof*ftmp -> next); ftmp = ftmp -> next; } ftmp -> file_name = g_strdup_printf ("%s", argv[j+1]); ftmp -> file_type = k; argv[j] = argv[j+1] = g_strdup_printf (" "); j ++; i ++; if (k == 1) with_workspace = TRUE; } } } return i; } /*! \fn int parse_command_line (int argc, char *argv[]) \brief test command line arguments \param argc number of argument(s) on the command line \param *argv[] list of argument(s) on the command line */ int parse_command_line (int argc, char *argv[]) { struct option atomes_options[] = {{"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'v'}, {"libreoffice", no_argument, 0, 'l'}, {"render-png", no_argument, 0, 'p'}, {"png", no_argument, 0, 'p'}, {"render-jpg", no_argument, 0, 'j'}, {"jpg", no_argument, 0, 'j'}, {"width", required_argument, 0, 'W'}, {"height", required_argument, 0, 'H'}, {"output", required_argument, 0, 'o'}, {"style", required_argument, 0, 's'}, {"atoms", required_argument, 0, 'e'}, {"poly", required_argument, 0, 't'}, {"axis", required_argument, 0, 'a'}, {"box", required_argument, 0, 'b'}, {"box_color", required_argument, 0, 'C'}, {"back_color", required_argument, 0, 'B'}, {"back_grad", required_argument, 0, 'G'}, {"back_dir", required_argument, 0, 'D'}, {"back_pos", required_argument, 0, 'P'}, {"grad_col_a", required_argument, 0, 'U'}, {"grad_col_b", required_argument, 0, 'V'}, {"rep", required_argument, 0, 'r'}, // {"debug", no_argument, 0, 'd'}, {0, 0, 0, 0}}; int opt; int index = -1; int i, j; double v; gchar * image_x = NULL; gchar * image_y = NULL; int img_opt = 0; for (i=0; i<2; i++) render_image_grad_color[i] = NULL; /* We want to parse the command line using GNU getopt, but then some options that are atomes specific and not GNU getopt compatible might disappear, to prevent that it is mandatory to prepare the information to be given to GNU getopt */ int files_to_read = check_for_atomes_file_options (1, argc, argv); /* Letter follow by : means that the command requires an argument No letter if the option is only in long format, ex : --width If the long name is empty the command is only in short format */ while ((opt = getopt_long(argc, argv, "hvlpjdW:H:o:s:a:b:r:e:t:B:C:G:D:P:U:V:", atomes_options, & index)) != -1) { switch (opt) { case 'h': print_help(); return FALSE; break; case 'v': print_version(); return FALSE; break; case 'e': render_image_acolor = get_color_map_from_string (g_ascii_strdown(optarg,strlen(optarg))); trigger_fragment_analysis = (render_image_acolor > 2) ? TRUE : FALSE; trigger_molecule_analysis = (render_image_acolor > 3) ? TRUE : FALSE; img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 't': render_image_pcolor = get_color_map_from_string (g_ascii_strdown(optarg,strlen(optarg))); trigger_fragment_analysis = (render_image_pcolor > 2) ? TRUE : FALSE; trigger_molecule_analysis = (render_image_pcolor > 3) ? TRUE : FALSE; img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'l': atomes_from_libreoffice = TRUE; render_image_format = 0; break; case 'p': atomes_render_image = TRUE; render_image_format = 0; img_opt ++; break; case 'j': atomes_render_image = TRUE; render_image_format = 1; img_opt ++; break; case 'o': render_image_output = g_strdup_printf ("%s", optarg); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'W': image_x = g_strdup_printf ("%s", optarg); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'H': image_y = g_strdup_printf ("%s", optarg); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 's': render_image_style = get_style_from_string (g_ascii_strdown(optarg,strlen(optarg))); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'a': render_image_axis = get_box_axis_from_string (g_ascii_strdown(optarg,strlen(optarg))); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'b': render_image_box = get_box_axis_from_string (g_ascii_strdown(optarg,strlen(optarg))); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'r': render_image_rep = get_rep_from_string (g_ascii_strdown(optarg,strlen(optarg))); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'C': render_image_box_color = get_color_from_hexa_string (optarg); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'B': render_image_back_color = get_color_from_hexa_string (optarg); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'G': render_image_back_grad = get_gradient_from_string (g_ascii_strdown(optarg,strlen(optarg))); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'D': if (isdigit(optarg[0])) { render_image_back_dir = ((optarg[0] - '0') < 9) ? optarg[0] - '0' : NONE; } img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'P': v = string_to_double(optarg); render_image_back_pos = (v >= 0.0 && v <= 1.0) ? v : NONE; img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'U': render_image_grad_color[0] = get_color_from_hexa_string (optarg); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; case 'V': render_image_grad_color[1] = get_color_from_hexa_string (optarg); img_opt ++; img_opt += (index == -1) ? 1 : 0; break; } index = -1; } if (atomes_from_libreoffice) atomes_render_image = FALSE; if (atomes_render_image) { if (! render_image_output) render_image_output = g_strdup_printf ("%s", (render_image_format) ? "image.jpg" : "image.png"); if (argc == img_opt + 2) { if (image_x || image_y) { render_image_pixels = allocint(2); int pix; if (image_x) { pix = (int) string_to_double(image_x); if (pix > 0) render_image_pixels[0] = pix; } if (image_y) { pix = (int) string_to_double(image_y); if (pix > 0) render_image_pixels[1] = pix; } } } else { return FALSE; } } for (i=optind; i next = g_malloc0(sizeof*ftmp -> next); ftmp = ftmp -> next; } ftmp -> file_name = g_strdup_printf ("%s", argv[i]); ftmp -> file_type = -j; files_to_read ++; if (atomes_from_libreoffice) projfile = g_strdup_printf ("%s", argv[i]); if (j == -1) with_workspace = TRUE; } } } return (atomes_render_image && files_to_read == 1) ? TRUE : (atomes_render_image) ? FALSE : TRUE; } /*! \fn gboolean destroy_func (gpointer user_data) \brief destroy splash screen \param user_data the splash screen to destroy */ gboolean destroy_func (gpointer user_data) { GtkWidget * splashi = (GtkWidget*) user_data; destroy_this_widget (splashi); return FALSE; } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean splashdraw (GtkWidget * widget, cairo_t * cr, gpointer data) \brief draw splash screen \param widget the GtkWidget sending the signal \param cr the cairo drawing context \param data the associated data pointer */ G_MODULE_EXPORT gboolean splashdraw (GtkWidget * widget, cairo_t * cr, gpointer data) { cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.0); /* transparent */ cairo_paint (cr); return FALSE; } #endif /*! \fn GtkWidget * create_splash_window () \brief create splash screen window */ GtkWidget * create_splash_window () { GtkWidget * splash_window = new_gtk_window (); gtk_window_set_decorated (GTK_WINDOW (splash_window), FALSE); GtkWidget * image; #ifdef GTK4 image = gtk_picture_new_for_filename (PACKAGE_LOGO); gchar * backcol = g_strdup_printf ("window#splash {\n" " background: none;" " background-color: rgba(255, 255, 255, 0);}"); provide_gtk_css (backcol); gtk_widget_set_name (splash_window, "splash"); g_free (backcol); #else gtk_window_set_type_hint (GTK_WINDOW (splash_window), GDK_WINDOW_TYPE_HINT_SPLASHSCREEN); gtk_window_set_position (GTK_WINDOW (splash_window), GTK_WIN_POS_CENTER_ALWAYS); gtk_widget_set_app_paintable (splash_window, TRUE); GdkScreen * screen = gtk_widget_get_screen (splash_window); GdkVisual * visual = gdk_screen_get_rgba_visual (screen); gtk_widget_set_visual (splash_window, visual); // Next line might be optional for total transparency g_signal_connect(G_OBJECT(splash_window), "draw", G_CALLBACK(splashdraw), NULL); image = gtk_image_new_from_file (PACKAGE_LOGO); #endif add_container_child (CONTAINER_WIN, splash_window, image); gtk_window_set_transient_for ((GtkWindow *)splash_window, (GtkWindow *)MainWindow); show_the_widgets (splash_window); return splash_window; } /*! \fn void read_this_file (int file_type, gchar * this_file) \brief read file from the command line \param file_type File type \param this_file File name */ void read_this_file (int file_type, gchar * this_file) { FILE * fp = fopen (this_file, dfi[0]); if (file_type == 1) { int i = open_save_workspace (fp, 0); if (i != 0) { gchar * err = g_strdup_printf (_("Error while reading workspace file\n%s\n"), this_file); show_error (err, 0, MainWindow); g_free (err); } } else { init_project (FALSE); reading_project = TRUE; open_save (fp, 0, 0, activep, activep, this_file); reading_project = FALSE; } fclose (fp); } /*! \fn void open_this_data_file (int file_type, gchar * file_name) \brief open data file from the command line \param file_type File type \param file_name File name */ void open_this_data_file (int file_type, gchar * file_name) { gchar * end; gchar * str; gchar * filedir; int i; #ifdef G_OS_WIN32 WIN32_FIND_DATA ffd; HANDLE hFind; #else DIR * d; struct dirent * dir; #endif switch (file_type) { case 1: read_this_file (1, file_name); break; case 2: end = g_strdup_printf ("%c", file_name[strlen(file_name)-1]); if (g_strcmp0 (file_name, "*") == 0 || g_strcmp0 (end, "*") == 0) { if (g_strcmp0 (file_name, "*") == 0) { filedir = g_strdup_printf ("./"); } else { filedir = g_strdup_printf ("%c", file_name[0]); for (i=1; i d_type == DT_REG) { str = g_strdup_printf ("%s/%s", filedir, dir -> d_name); read_this_file (2, str); g_free (str); } } closedir(d); } #endif g_free (filedir); } else { read_this_file (2, file_name); } break; case 15: init_project (TRUE); open_this_isaacs_xml_file (g_strdup_printf ("%s", file_name), activep, FALSE); break; default: end = g_strdup_printf ("%c", file_name[strlen(file_name)-1]); if (g_strcmp0 (file_name, "*") == 0 || g_strcmp0 (end, "*") == 0) { if (g_strcmp0 (file_name, "*") == 0) { filedir = g_strdup_printf ("./"); } else { filedir = g_strdup_printf ("%c", file_name[0]); for (i=1; i coordfile = g_strdup_printf ("%s\\%s", filedir, (gchar *)ffd.cFileName); open_this_coordinate_file (file_type-3, NULL); } while (FindNextFile(hFind, &ffd) != 0) { if (ffd.dwFileAttributes & ! FILE_ATTRIBUTE_DIRECTORY) { init_project (TRUE); active_project -> coordfile = g_strdup_printf ("%s\\%s", filedir, (gchar *)ffd.cFileName); open_this_coordinate_file (file_type-3, NULL); } } } FindClose(hFind); #else d = opendir (filedir); if (d) { while ((dir = readdir(d)) != NULL) { if (dir -> d_type == DT_REG) { init_project (TRUE); active_project -> coordfile = g_strdup_printf ("%s/%s", filedir, dir -> d_name); open_this_coordinate_file (file_type-3, NULL); } } closedir(d); } #endif g_free (filedir); } else { init_project (TRUE); active_project -> coordfile = g_strdup_printf ("%s", file_name); open_this_coordinate_file (file_type-3, NULL); } break; } } /*! \fn G_MODULE_EXPORT void run_program (GApplication * app, gpointer data) \brief run the program \param app the application to run \param data the associated data pointer */ G_MODULE_EXPORT void run_program (GApplication * app, gpointer data) { /* GTK re-initializes the locale during startup (gtk_init calls setlocale(LC_ALL, "")), which overrides the LC_NUMERIC = "C" set in main(). We must enforce it again here to ensure floating-point parsing/formatting always uses the English (dot) convention. */ setlocale (LC_NUMERIC, "C"); GtkSettings * default_settings = gtk_settings_get_default (); /* #ifndef G_OS_WIN32 g_object_set (default_settings, "gtk-application-prefer-dark-theme", TRUE, NULL); #endif */ #ifdef GTK3 g_object_set (default_settings, "gtk-button-images", TRUE, NULL); #endif #ifdef G_OS_WIN32 #ifdef GTK3 g_object_set (default_settings, "gtk-key-theme-name", "win32", NULL); #endif dfi[0]="rb"; dfi[1]="wb"; #else dfi[0]="r"; dfi[1]="w"; #endif #ifdef MAC_INTEGRATION GtkosxApplication * ProgOSX; ProgOSX = g_object_new (GTKOSX_TYPE_APPLICATION, NULL); gtkosx_application_set_use_quartz_accelerators (ProgOSX, FALSE); gtkosx_application_ready (ProgOSX); #endif #ifdef DEBUG print_version (); #endif // DEBUG if (! atomes_render_image) { MainWindow = create_main_window (app); GtkWidget * isplash = create_splash_window (); if (isplash == NULL) { g_warning (_("Impossible to load the splash screen\n")); } else { g_timeout_add_seconds (1, destroy_func, isplash); } } if (flist) { ftmp = flist; silent_input = TRUE; if (with_workspace) { while (ftmp) { if (ftmp -> file_type == 1) { // Open the workspace open_this_data_file (ftmp -> file_type, ftmp -> file_name); } ftmp = ftmp -> next; } } ftmp = flist; while (ftmp) { if (ftmp -> file_type != 1) { // Add project(s) to workspace open_this_data_file (ftmp -> file_type, ftmp -> file_name); } ftmp = ftmp -> next; } g_free (flist); flist = NULL; silent_input = FALSE; } #ifdef MAC_INTEGRATION g_object_unref (ProgOSX); #endif } /*! \fn int check_opengl_rendering () \brief check the initialization parameters for an OpenGL context */ int check_opengl_rendering () { GError * error = NULL; gchar * proc_dir = NULL; gchar * proc_path = NULL; const char * proc_name; #ifdef G_OS_WIN32 proc_dir = g_build_filename (PACKAGE_PREFIX, "bin", NULL); proc_name = "atomes_startup_testing.exe"; proc_path = g_build_filename (proc_dir, proc_name, NULL); #else proc_dir = g_build_filename (PACKAGE_LIBEXEC, NULL); proc_name = "atomes_startup_testing"; proc_path = g_build_filename (PACKAGE_LIBEXEC, proc_name, NULL); #endif #ifdef DEBUG g_print ("proc_dir= %s\n", proc_dir); g_print ("proc_name= %s\n", proc_name); g_print ("proc_path= %s\n", proc_path); #endif #ifdef CODEBLOCKS GSubprocess * proc = g_subprocess_new (G_SUBPROCESS_FLAGS_NONE, & error, proc_path, NULL); #else #ifndef OSX GSubprocessLauncher * proc_launch = g_subprocess_launcher_new (G_SUBPROCESS_FLAGS_NONE); g_subprocess_launcher_set_cwd (proc_launch, proc_dir); GSubprocess * proc = g_subprocess_launcher_spawn (proc_launch, & error, proc_path, NULL); #else GSubprocess * proc = g_subprocess_new (G_SUBPROCESS_FLAGS_NONE, & error, proc_path, NULL); #endif #endif if (error) { g_print ("error: %s\n", error -> message); g_clear_error (& error); } g_subprocess_wait (proc, NULL, & error); int res = g_subprocess_get_exit_status (proc); #ifdef DEBUG g_debug ("Exit status of atomes_startup_testing = %d", res); #endif g_object_unref (proc); #ifndef CODEBLOCKS #ifndef OSX g_object_unref (proc_launch); #endif #endif g_free (proc_path); g_free (proc_dir); gchar * ogl_info = NULL; switch (res) { case 1: ogl_info = g_strdup_printf (_("Fatal error on OpenGL initialization: trying to adjust environment !")); break; case -2: ogl_info = g_strdup_printf (_("Impossible to initialize the OpenGL 3D rendering !")); break; case -1: ogl_info = g_strdup_printf (_("GDK visual must be modified to initialize the OpenGL context !")); break; default: break; } if (ogl_info) { g_print ("%s\n", ogl_info); g_free (ogl_info); ogl_info = NULL; } return res; } /*! \fn int main (int argc, char *argv[]) \brief initialization of the atomes program \param argc number of argument(s) on the command line \param *argv[] list of argument(s) on the command line */ int main (int argc, char *argv[]) { gboolean RUNC = FALSE; #ifdef G_OS_WIN32 PACKAGE_PREFIX = g_win32_get_package_installation_directory_of_module (NULL); PACKAGE_LOCALE = g_build_filename (PACKAGE_PREFIX, "locale", NULL); // g_win32_get_package_installation_directory (NULL, NULL); #endif PACKAGE_LIB_DIR = g_build_filename (PACKAGE_PREFIX, "library", NULL); PACKAGE_IMP = g_build_filename (PACKAGE_PREFIX, "pixmaps/import.png", NULL); PACKAGE_IMP = g_build_filename (PACKAGE_PREFIX, "pixmaps/import.png", NULL); PACKAGE_CON = g_build_filename (PACKAGE_PREFIX, "pixmaps/convert.png", NULL); PACKAGE_IMG = g_build_filename (PACKAGE_PREFIX, "pixmaps/image.png", NULL); PACKAGE_PDF = g_build_filename (PACKAGE_PREFIX, "pixmaps/pdf.png", NULL); PACKAGE_SVG = g_build_filename (PACKAGE_PREFIX, "pixmaps/svg.png", NULL); PACKAGE_EPS = g_build_filename (PACKAGE_PREFIX, "pixmaps/eps.png", NULL); PACKAGE_PNG = g_build_filename (PACKAGE_PREFIX, "pixmaps/png.png", NULL); PACKAGE_JPG = g_build_filename (PACKAGE_PREFIX, "pixmaps/jpg.png", NULL); PACKAGE_BMP = g_build_filename (PACKAGE_PREFIX, "pixmaps/bmp.png", NULL); PACKAGE_TIFF = g_build_filename (PACKAGE_PREFIX, "pixmaps/tiff.png", NULL); PACKAGE_VOID = g_build_filename (PACKAGE_PREFIX, "pixmaps/void.png", NULL); PACKAGE_TD = g_build_filename (PACKAGE_PREFIX, "pixmaps/td.png", NULL); PACKAGE_MOL = g_build_filename (PACKAGE_PREFIX, "pixmaps/molecule.png", NULL); PACKAGE_OGL = g_build_filename (PACKAGE_PREFIX, "pixmaps/opengl.png", NULL); PACKAGE_OGLM = g_build_filename (PACKAGE_PREFIX, "pixmaps/mol.png", NULL); PACKAGE_OGLC = g_build_filename (PACKAGE_PREFIX, "pixmaps/mol.png", NULL); PACKAGE_PRO = g_build_filename (PACKAGE_PREFIX, "pixmaps/prop.png", NULL); PACKAGE_SET = g_build_filename (PACKAGE_PREFIX, "pixmaps/settings.png", NULL); PACKAGE_LOGO = g_build_filename (PACKAGE_PREFIX, "pixmaps/logo.png", NULL); PACKAGE_LAGPL = g_build_filename (PACKAGE_PREFIX, "pixmaps/logo-agpl.png", NULL); PACKAGE_LABOUT = g_build_filename (PACKAGE_PREFIX, "pixmaps/logo-about.png", NULL); PACKAGE_DOTA = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-a.png", NULL); PACKAGE_DOTB = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-b.png", NULL); PACKAGE_DOTC = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-c.png", NULL); PACKAGE_DOTD = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-d.png", NULL); PACKAGE_DOTE = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-e.png", NULL); PACKAGE_DOTF = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-f.png", NULL); PACKAGE_DOTG = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-g.png", NULL); PACKAGE_DOTH = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-h.png", NULL); PACKAGE_DFBD = g_build_filename (PACKAGE_PREFIX, "pixmaps/field/bd.png", NULL); PACKAGE_DFAN = g_build_filename (PACKAGE_PREFIX, "pixmaps/field/an.png", NULL); PACKAGE_DFDI = g_build_filename (PACKAGE_PREFIX, "pixmaps/field/di.png", NULL); PACKAGE_DFTD = g_build_filename (PACKAGE_PREFIX, "pixmaps/field/td.png", NULL); PACKAGE_DFIN = g_build_filename (PACKAGE_PREFIX, "pixmaps/field/in.png", NULL); PACKAGE_SGCP = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Cubic-P.png", NULL); PACKAGE_SGCI = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Cubic-I.png", NULL); PACKAGE_SGCF = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Cubic-F.png", NULL); PACKAGE_SGHP = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Hexagonal.png", NULL); PACKAGE_SGTR = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Trigonal-R.png", NULL); PACKAGE_SGTI = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Tetragonal-I.png", NULL); PACKAGE_SGTP = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Tetragonal-P.png", NULL); PACKAGE_SGOP = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Orthorhombic-P.png", NULL); PACKAGE_SGOI = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Orthorhombic-I.png", NULL); PACKAGE_SGOC = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Orthorhombic-C.png", NULL); PACKAGE_SGOF = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Orthorhombic-F.png", NULL); PACKAGE_SGMP = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Monoclinic-P.png", NULL); PACKAGE_SGMI = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Monoclinic-I.png", NULL); PACKAGE_SGTC = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Triclinic.png", NULL); switch (argc) { case 1: RUNC = TRUE; break; default: RUNC = parse_command_line (argc, argv); break; } if (RUNC) { #ifdef G_OS_WIN32 #ifndef DEBUG FreeConsole (); #endif #endif atomes_visual = check_opengl_rendering (); if (atomes_visual == 1) { // OpenGL initialization error, try adapting environment g_setenv ("GSK_RENDERER", "gl", TRUE); g_setenv ("GDK_DEBUG", "gl-prefer-gl", TRUE); atomes_visual = check_opengl_rendering (); if (atomes_visual == 1) { // OpenGL initialization error, again try adapting environment g_setenv ("GDK_RENDERER", "ngl", TRUE); atomes_visual = check_opengl_rendering (); } } if (atomes_visual > 0 || atomes_visual == -2) { // No way to initialize an OpenGL context: must quit return 1; } #ifdef OSX g_setenv ("GSK_RENDERER", "gl", TRUE); #endif atomes_visual = ! (abs(atomes_visual)); #ifdef G_OS_WIN32 PWSTR localPath = NULL; HRESULT hr = SHGetKnownFolderPath (& FOLDERID_LocalAppData, 0, NULL, & localPath); if (FAILED(hr)) { fprintf (stderr, _("Error impossible to obtain the AppData\\Roaming (code 0x%08lx)\n%s"), hr); ATOMES_CONFIG_DIR = NULL; ATOMES_CONFIG = NULL; } else { char appdata[MAX_PATH]; wcstombs (appdata, localPath, MAX_PATH); CoTaskMemFree (localPath); // libérer mémoire retournée par SHGetKnownFolderPath // Build the folder path for atomes ATOMES_CONFIG_DIR = g_strdup_printf ("%s\\atomes", appdata); ATOMES_CONFIG = g_strdup_printf ("%s\\atomes.pml", ATOMES_CONFIG_DIR); } #else struct passwd * pw = getpwuid(getuid()); ATOMES_CONFIG_DIR = g_strdup_printf ("%s/.config/atomes", pw -> pw_dir); ATOMES_CONFIG = g_strdup_printf ("%s/atomes.pml", ATOMES_CONFIG_DIR); #endif bindtextdomain (PACKAGE, PACKAGE_LOCALE); textdomain (PACKAGE); bind_textdomain_codeset(PACKAGE, "UTF-8"); // Forcer UTF-8 pour gettext set_atomes_preferences (); #if GLIB_MINOR_VERSION < 74 AtomesApp = gtk_application_new (g_strdup_printf ("fr.ipcms.atomes.prog-%d", (int)clock()), G_APPLICATION_FLAGS_NONE); #else AtomesApp = gtk_application_new (g_strdup_printf ("fr.ipcms.atomes.prog-%d", (int)clock()), G_APPLICATION_DEFAULT_FLAGS); #endif GError * error = NULL; g_application_register (G_APPLICATION(AtomesApp), NULL, & error); g_signal_connect (G_OBJECT(AtomesApp), "activate", G_CALLBACK(run_program), NULL); int status = g_application_run (G_APPLICATION (AtomesApp), 0, NULL); g_object_unref (AtomesApp); return status; } return 0; } atomes_1.3.1/src/gui/bdcall.c0000664000175000017500000013165615212624223015461 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file bdcall.c * @short Callbacks for the bond properties calculation dialog * @author Sébastien Le Roux */ /* * This file: 'bdcall.c' * * Contains: * - The callbacks for the bond properties calculation dialog * * List of functions: int * save_color_map (glwin * view); gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb); double get_cutoff (double s_a, double s_b); void restore_color_map (glwin * view, int * colm); void recup_dmin_dmax_ (double * min, double * max); void init_bond (project * this_proj); void init_ang (project * this_proj); void initcutoffs (chemical_data * chem, int species); void cutoffsend (); void prep_ogl_bonds (); void update_ang_view (project * this_proj); void update_glwin_after_bonds (int bonding, int * colm); void coordination_info (int sp, double sac, double ssac[active_project -> nspec]); void coordout_ (int * sid, double * sac, double ssac[active_project -> nspec], int * totgsa); void warren_cowley_out_ (int * spa, double ssac[active_project -> nspec]); void cargill_spaepen_out_ (int * spa, double ssac[active_project -> nspec]); void env_info (int sp, int totgsa, int numgsa[totgsa]); void update_angle_view (project * this_proj); void envout_ (int * sid, int * totgsa, int numgsa[* totgsa]); G_MODULE_EXPORT void on_calc_bonds_released (GtkWidget * widg, gpointer data); */ #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" #include "dlp_field.h" #include "glview.h" #include "initcoord.h" #include "preferences.h" extern G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data); extern void clean_coord_window (project * this_proj); extern G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data); /*! \fn int * save_color_map (glwin * view) \brief save atoms and polyhedra color maps \param view the target glwin */ int * save_color_map (glwin * view) { int i; int * colm = allocint (2); for (i=0; i<2; i++) colm[i] = view -> anim -> last -> img -> color_map[i]; return colm; } /*! \fn void restore_color_map (glwin * view, int * colm) \brief restore saved color maps \param view the target glwin \param colm the saved color map values */ void restore_color_map (glwin * view, int * colm) { #ifdef GTK3 // GTK3 Menu Action To Check int i, j; gboolean was_input = reading_input; reading_input = TRUE; for (i=0; i<2; i++) { if ((i == 3 || i == 4) && ! view -> adv_bonding[i-3]) { j = i*ATOM_MAPS; } else { j = i*ATOM_MAPS + colm[i]; } gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[j], TRUE); set_color_map (view -> color_styles[j], & view -> colorp[j][0]); } reading_input = was_input; #endif } /*! \fn void recup_dmin_dmax_ (double * min, double * max) \brief retrieve min and max inter-atomic distances from Fortran \param min the smallest inter-atomic distance \param max the highest inter-atomic distance */ void recup_dmin_dmax_ (double * min, double * max) { if (active_project -> analysis) { active_project -> analysis[BND] -> min = * min; active_project -> analysis[BND] -> max = * max; } } /*! \fn void init_bond (project * this_proj) \brief initialize the curve widgets for the bond distribution \param this_proj the target project */ void init_bond (project * this_proj) { int i, j, k; k = 0; for ( i = 0 ; i < this_proj -> nspec ; i++ ) { for ( j = 0 ; j < this_proj -> nspec ; j++ ) { this_proj -> analysis[BND] -> curves[k] -> name = g_strdup_printf("Dij [%s-%s]", active_chem -> label[i], active_chem -> label[j]); k=k+1; } } add_curve_widgets (this_proj, BND); this_proj -> analysis[BND] -> init_ok = TRUE; } /*! \fn void init_ang (project * this_proj) \brief initialize the curve widgets for the angle distribution \param this_proj the target project */ void init_ang (project * this_proj) { int h, i, j, k, l; h=0; for ( i = 0 ; i < this_proj -> nspec ; i++ ) { for ( j = 0 ; j < this_proj -> nspec ; j++ ) { for ( k = 0 ; k < this_proj -> nspec ; k++ ) { this_proj -> analysis[ANG] -> curves[h] -> name = g_strdup_printf(_("Angles [%s-%s-%s]"), active_chem -> label[i], active_chem -> label[j], active_chem -> label[k]); h=h+1; } } } for ( i = 0 ; i < this_proj -> nspec ; i++ ) { for ( j = 0 ; j < this_proj -> nspec ; j++ ) { for ( k = 0 ; k < this_proj -> nspec ; k++ ) { for ( l = 0 ; l < this_proj -> nspec ; l++ ) { this_proj -> analysis[ANG] -> curves[h] -> name = g_strdup_printf(_("Dihedrals [%s-%s-%s-%s]"), active_chem -> label[i], active_chem -> label[j], active_chem -> label[k], active_chem -> label[l]); h=h+1; } } } } add_curve_widgets (this_proj, ANG); this_proj -> analysis[ANG] -> init_ok = TRUE; } /*! \fn double get_cutoff (double s_a, double s_b) \param retrieve cutoff radius between spec a and spec b \param s_a species a \param s_b species b */ double get_cutoff (double s_a, double s_b) { if (default_bond_cutoff) { bond_cutoff * cut = default_bond_cutoff; int z_a = min (s_a, s_b); int z_b = max (s_a, s_b); while (cut) { if (cut -> Z[0] == z_a && cut -> Z[1] == z_b) return cut -> cutoff; cut = cut -> next; } return 0.0; } else { return 0.0; } } /*! \fn void initcutoffs (chemical_data * chem, int species) \brief initialize bond cutoffs \param chem the target chemical data \param species the number of chemical species */ void initcutoffs (chemical_data * chem, int species) { int i, j; for (i = 0; i < species; i++) { chem -> cutoffs[i][i] = (chem -> cutoffs[i][i] != 0.0) ? chem -> cutoffs[i][i] : get_cutoff (chem -> chem_prop[CHEM_Z][i], chem -> chem_prop[CHEM_Z][i]); if (chem -> cutoffs[i][i] == 0.0) { chem -> cutoffs[i][i] = 2.0*chem -> chem_prop[CHEM_R][i]; chem -> cutoffs[i][i] = max(MINCUT, chem -> cutoffs[i][i]); if (chem -> chem_prop[CHEM_Z][i] == 1.0) chem -> cutoffs[i][i] = 0.5; } } for (i = 0; i < species-1; i++) { for (j = i+1; j < species; j++) { chem -> cutoffs[i][j] = (chem -> cutoffs[i][j] != 0.0) ? chem -> cutoffs[i][j] : get_cutoff (chem -> chem_prop[CHEM_Z][i], chem -> chem_prop[CHEM_Z][j]); if (chem -> cutoffs[i][j] == 0.0) { chem -> cutoffs[i][j] = chem -> chem_prop[CHEM_R][i] + chem -> chem_prop[CHEM_R][j]; chem -> cutoffs[i][j] = max(MINCUT, chem -> cutoffs[i][j]); if (chem -> chem_prop[CHEM_Z][i] == 1.0 && chem -> chem_prop[CHEM_Z][j] == 6.0) chem -> cutoffs[i][j] = 1.2; if (chem -> chem_prop[CHEM_Z][j] == 1.0 && chem -> chem_prop[CHEM_Z][i] == 6.0) chem -> cutoffs[j][i] = 1.2; if (chem -> chem_prop[CHEM_Z][i] == 1.0 && chem -> chem_prop[CHEM_Z][j] == 8.0) chem -> cutoffs[i][j] = 1.2; if (chem -> chem_prop[CHEM_Z][j] == 1.0 && chem -> chem_prop[CHEM_Z][i] == 8.0) chem -> cutoffs[j][i] = 1.2; } chem -> cutoffs[j][i] = chem -> cutoffs[i][j]; } } chem -> grtotcutoff = (chem -> grtotcutoff != 0.0) ? chem -> grtotcutoff : default_totcut; if (chem -> grtotcutoff == 0.0) { for (i = 0; i < species; i++) { chem -> grtotcutoff += chem -> chem_prop[CHEM_R][i]; } chem -> grtotcutoff *= 2.0; chem -> grtotcutoff /= species; chem -> grtotcutoff = max(MINCUT, chem -> grtotcutoff); } } /*! \fn void cutoffsend () \brief send cutoffs to Fortran90 */ void cutoffsend () { int i, j; if (active_chem -> cutoffs == NULL) { active_chem -> cutoffs = allocddouble (active_project -> nspec, active_project -> nspec); } for ( i=0; i < active_project -> nspec; i++) { for (j=0; j < active_project -> nspec; j++) { // g_debug ("cut[%d,%d]= %f", i+1, j+1, active_chem -> cutoffs[i][j]); sendcuts_ (& i, & j, & active_chem -> cutoffs[i][j]); } } i = active_project -> nspec; // g_debug ("totcut= %f", active_chem -> grtotcutoff); sendcuts_ (& i, & i, & active_chem -> grtotcutoff); } /*! \fn void prep_ogl_bonds () \brief initialize bond pointers */ void prep_ogl_bonds () { int i; active_glwin -> bonding = FALSE; #ifdef GTK3 // GTK3 Menu Action To Check for (i=0; i color_styles[i], 0); } for (i=1; i ogl_coord[i], 0); } #endif active_image -> color_map[0] = 0; active_image -> color_map[1] = 0; for (i=0; i<2; i++) { if (active_glwin -> gcid[i]) g_free (active_glwin -> gcid[i]); active_glwin -> gcid[i] = NULL; active_coord -> totcoord[i] = 0; } if (! active_project -> dmtx) { active_glwin -> allbonds[0] = 0; active_glwin -> allbonds[1] = 0; } if (frag_update) { if (active_glwin -> gcid[2]) g_free (active_glwin -> gcid[2]); active_glwin -> gcid[2] = NULL; active_coord -> totcoord[2] = 0; active_glwin -> adv_bonding[0] = FALSE; } if (mol_update) { if (active_glwin -> gcid[3]) g_free (active_glwin -> gcid[3]); active_glwin -> gcid[3] = NULL; active_coord -> totcoord[3] = 0; active_glwin -> adv_bonding[1] = FALSE; } } /*! \fn gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb) \brief compute distance matrix \param widg the GtkWidget sending the signal, if any \param calc the calculation that requires the analysis \param up_ngb update neighbors information (0 = no, 1 = yes) */ gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb) { int i, j, k; gboolean res; if (up_ngb) { for (i=0; i < active_project -> steps; i++) { for (j=0; j < active_project -> natomes; j++) { active_project -> atoms[i][j].cloned = FALSE; if (active_project -> atoms[i][j].numv) { active_project -> atoms[i][j].numv = 0; if (active_project -> atoms[i][j].vois) { g_free (active_project -> atoms[i][j].vois); active_project -> atoms[i][j].vois = NULL; } } } } } i = j = 0; k = up_ngb;; if (calc > 3 && calc < 6) i = 1; if (calc > 0 && calc < 6) { j = active_project -> rsparam[calc-1][4]; } else if (calc == 6) { j = active_project -> csparam[3]; } #ifdef DEBUG g_debug ("Run dmtx Prim= %d, NOHP= %d, UPDATE= %d", i, j, k); #endif clock_gettime (CLOCK_MONOTONIC, & start_time); res = rundmtx_ (& i, & j, & k); clock_gettime (CLOCK_MONOTONIC, & stop_time); // #ifdef DEBUG g_print ("Time to calculate distance matrix: %s\n", calculation_time(FALSE, get_calc_time (start_time, stop_time))); // #endif return res; } /*! \fn void update_ang_view (project * this_proj) \brief update angle calculation text buffer \param this_proj the target project */ void update_ang_view (project * this_proj) { gchar * str; if (this_proj -> analysis[ANG] -> calc_buffer == NULL) this_proj -> analysis[ANG] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> analysis[ANG] -> calc_buffer); print_info (_("\n\nAngles and diherdrals distribution(s)\n\n"), "heading", this_proj -> analysis[ANG] -> calc_buffer); print_info (_("Calculation details:\n\n"), NULL, this_proj -> analysis[ANG] -> calc_buffer); print_info (_("\tAngular space discretization:\n\n"), NULL, this_proj -> analysis[ANG] -> calc_buffer); print_info (_("\t - Number of δ° steps: "), "bold", this_proj -> analysis[ANG] -> calc_buffer); str = g_strdup_printf ("%d", this_proj -> analysis[ANG] -> num_delta); print_info (str, "bold_blue", this_proj -> analysis[ANG] -> calc_buffer); g_free (str); print_info (_("\n\n\t between 0.0 and 180.0"), NULL, this_proj -> analysis[ANG] -> calc_buffer); print_info (" °\n\n\t - δ° = ", "bold", this_proj -> analysis[ANG] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> analysis[ANG] -> delta); print_info (str, "bold_blue", this_proj -> analysis[ANG] -> calc_buffer); g_free (str); print_info (" °\n", "bold", this_proj -> analysis[ANG] -> calc_buffer); print_info (calculation_time(TRUE, this_proj -> analysis[ANG] -> calc_time), NULL, this_proj -> analysis[ANG] -> calc_buffer); } /*! \fn void update_glwin_after_bonds (int bonding, int * colm) \brief update glwin menus after bond calculation \param bonding calculation result (0 = failure, 1 = success) \param colm saved color map to restore */ void update_glwin_after_bonds (int bonding, int * colm) { active_glwin -> bonding = bonding; #ifdef GTK3 // GTK3 Menu Action To Check if (active_glwin -> init) { prep_all_coord_menus (active_glwin); set_advanced_bonding_menus (active_glwin); widget_set_sensitive (active_glwin -> ogl_clones[0], active_glwin -> allbonds[1]); } #endif int shaders[5] = {ATOMS, BONDS, POLYS, RINGS, SELEC}; re_create_md_shaders (5, shaders, active_project); active_glwin -> create_shaders[MEASU] = TRUE; active_glwin -> create_shaders[PICKS] = TRUE; clean_coord_window (active_project); if (active_glwin -> init) { restore_color_map (active_glwin, colm); g_free (colm); } int i, j; for (i=2; i<7; i++) { if (i != 5) { if (active_glwin -> search_widg[i]) { if (active_glwin -> search_widg[i] -> filter_box) { if (GTK_IS_WIDGET(active_glwin -> search_widg[i] -> filter_box)) { if (active_glwin -> atom_win -> adv_bonding[1] && ! active_glwin -> adv_bonding[1]) { gtk_combo_box_text_remove ((GtkComboBoxText *) active_glwin -> search_widg[i] -> filter_box, 4); } else if (! active_glwin -> atom_win -> adv_bonding[0] && active_glwin -> adv_bonding[0]) { combo_text_append (active_glwin -> search_widg[i] -> filter_box, _("Fragment")); } if (active_glwin -> atom_win -> adv_bonding[0] && ! active_glwin -> adv_bonding[0]) { gtk_combo_box_text_remove ((GtkComboBoxText *) active_glwin -> search_widg[i] -> filter_box, 3); } else if (! active_glwin -> atom_win -> adv_bonding[1] && active_glwin -> adv_bonding[1]) { combo_text_append (active_glwin -> search_widg[i] -> filter_box, _("Molecule")); } j = active_glwin -> search_widg[i] -> object + active_glwin -> search_widg[i] -> filter; if (j == 4) { set_filter_changed (GTK_COMBO_BOX(active_glwin -> search_widg[i] -> filter_box), active_glwin -> search_widg[i]); } } } } } } if (active_glwin -> atom_win) { for (i=0; i<2; i++) active_glwin -> atom_win -> adv_bonding[i] = active_glwin -> adv_bonding[i]; } clean_volumes_data (active_glwin); #ifdef GTK4 update_menu_bar (active_glwin); #endif update (active_glwin); } /*! \fn int update_voisj_and_contj () \brief update FORTRAN CONTJ and VOISJ for the active project */ int update_voisj_and_contj () { int i, j, k; if (! alloc_contj_voisj_ (& active_project -> natomes, & active_project -> steps)) return 0; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { read_contj_ (& j, & i, & active_project -> atoms[i][j].numv); for (k=0; k atoms[i][j].numv; k++) { read_voisj_ (& j, & i, & k, & active_project -> atoms[i][j].vois[k]); } } } return 1; } /*! \fn G_MODULE_EXPORT void on_calc_bonds_released (GtkWidget * widg, gpointer data) \brief compute bonding properties \param widg the GtkWidget sending the signal, if any \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_bonds_released (GtkWidget * widg, gpointer data) { int j, k, l, m; int statusb = 0; int bonding = 0; int err_update = 1; int * colm = NULL; // intitialize_this_analysis (active_project, BND); gboolean vis_bd = active_project -> analysis[BND] -> calc_ok; if (widg) bonds_update = 1; bonding = (active_project -> runc[0]) ? 1 : 0; if (! bonds_update && active_project -> runc[0]) bonding = 0; if (active_glwin) { if (active_glwin -> init) colm = save_color_map (active_glwin); prep_ogl_bonds (); } cutoffsend (); if (! active_project -> dmtx) { active_project -> dmtx = run_distance_matrix (widg, 0, 1); } else { err_update = update_voisj_and_contj (); } if (! active_project -> dmtx) { show_error (_("The nearest neighbors table calculation has failed"), 0, (widg) ? widg : MainWindow); bonding = 0; active_glwin -> adv_bonding[0] = 0; active_glwin -> adv_bonding[1] = 0; } else if (! err_update) { show_error (_("Impossible to update FORTRAN data"), 0, (widg) ? widg : MainWindow); bonding = 0; active_glwin -> adv_bonding[0] = 0; active_glwin -> adv_bonding[1] = 0; } else { //if (bonding && active_project -> steps > 1) statusb = 1; if (bonds_update || active_project -> runc[0] || active_project -> runc[2]) { if (! active_project -> analysis[BND] -> init_ok && bonding) init_bond (active_project); if (active_project -> runc[0]) clean_curves_data (BND, 0, active_project -> analysis[BND] -> numc); prepostcalc (widg, FALSE, BND, statusb, opac); l = 0; m = 1; if (active_project -> bondfile != NULL) { l = 1; m = strlen (active_project -> bondfile); } // debug_chemical_information (active_project); active_project -> analysis[BND] -> delta = (active_project -> analysis[BND] -> max-active_project -> analysis[BND] -> min) / active_project -> analysis[BND] -> num_delta; j = bonding_ (& m, & l, & bonding, & active_project -> analysis[BND] -> num_delta, & active_project -> analysis[BND] -> min, & active_project -> analysis[BND] -> delta, active_project -> bondfile); prepostcalc (widg, bonding, BND, (bonding) ? j : vis_bd, 1.0); active_project -> analysis[SPH] -> avail_ok = j; if (! j) { show_error (_("Unexpected error when calculating bond properties"), 0, (widg) ? widg : MainWindow); } else { if (active_glwin -> init && ! atomes_render_image) print_info (calculation_time(TRUE, active_project -> analysis[BND] -> calc_time), NULL, active_project -> analysis[BND] -> calc_buffer); bonding = 1; if (frag_update) { k = active_glwin -> allbonds[0] + active_glwin -> allbonds[1]; clock_gettime (CLOCK_MONOTONIC, & start_time); if (! molecules_ (& mol_update, & k)) { show_error (_("Unexpected error when looking for isolated fragment(s) and molecule(s)"), 0, (widg) ? widg : MainWindow); if (active_glwin) { for (k=0; k<2; k++) { active_glwin -> adv_bonding[k] = FALSE; if (k) { for (l=0; l<2; l++) { if (active_project -> force_field[l]) { g_free (active_project -> force_field[l]); active_project -> force_field[l] = NULL; } } } active_coord -> totcoord[k+2] = 0; } } } else { if (active_glwin) { active_glwin -> adv_bonding[0] = frag_update; active_glwin -> adv_bonding[1] = mol_update; } } clock_gettime (CLOCK_MONOTONIC, & stop_time); // Using the unused RI calc_time slot to store Frag-mol calc time. active_project -> analysis[RIN] -> calc_time = get_calc_time (start_time, stop_time); active_project_changed (activep); if (widg != NULL && ! atomes_render_image) show_the_widgets (curvetoolbox); } } } if (active_project -> runc[1]) { if (! active_project -> analysis[ANG] -> init_ok) init_ang (active_project); clean_curves_data (ANG, 0, active_project -> analysis[ANG] -> numc); active_project ->analysis[ANG] -> delta = 180.0 / active_project -> analysis[ANG] -> num_delta; j = bond_angles_ (& active_project -> analysis[ANG] -> num_delta); if (! j) { prepostcalc (widg, TRUE, ANG, j, 1.0); show_error (_("Unexpected error when calculating the bond angles distribution"), 0, (widg) ? widg : MainWindow); } else { j = bond_diedrals_ (& active_project -> analysis[ANG] -> num_delta); prepostcalc (widg, TRUE, ANG, j, 1.0); if (! j) { show_error (_("Unexpected error when calculating the dihedral angles distribution"), 0, (widg) ? widg : MainWindow); } else { if (widg != NULL && ! atomes_render_image) show_the_widgets (curvetoolbox); if (! active_project -> runc[0]) update_ang_view (active_project); } } } } if (active_glwin && bonds_update) update_glwin_after_bonds (bonding, colm); if (! atomes_render_image) { fill_tool_model (); if (widg) show_the_widgets (curvetoolbox); } if (! widg) { for (j=0; j<3; j++) active_project -> runc[j] = FALSE; } free_contj_voisj_ (); bonds_update = frag_update = mol_update = 0; } double bdtc; /*! \fn void coordination_info (int sp, double sac, double ssac[active_project->nspec]) \brief print out coordination information \param sp the target chemical species \param sac total coordination number for the target species \param ssac partial coordination number(s) for the target species */ void coordination_info (int sp, double sac, double ssac[active_project -> nspec]) { int j; gchar * str; gchar * spr; if (active_project -> analysis[BND] -> calc_buffer == NULL) active_project -> analysis[BND] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (active_project -> analysis[BND] -> calc_buffer); if (sp == 0) { print_info (_("\n\nBond properties\n\n"), "heading", active_project -> analysis[BND] -> calc_buffer); print_info (_("Existence of a bond between 2 atoms i (α) and j (β)\n"), "italic", active_project -> analysis[BND] -> calc_buffer); print_info (_("if the 2 following conditions are verified:\n\n\t1) D"), "italic", active_project -> analysis[BND] -> calc_buffer); print_info ("ij", "sub_italic", active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf (_(" < first minimum of the total g(r) (%9.5f Å )\n\t2) D"), active_chem -> grtotcutoff); print_info (str, "italic", active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info ("ij", "sub_italic", active_project -> analysis[BND] -> calc_buffer); print_info (" < r", "italic", active_project -> analysis[BND] -> calc_buffer); print_info (_("cut"), "sub_italic", active_project -> analysis[BND] -> calc_buffer); print_info ("(α,β)\n", "italic", active_project -> analysis[BND] -> calc_buffer); bdtc = sac * active_chem -> nsps[sp]; } else { bdtc += sac * active_chem -> nsps[sp]; } print_info (_("\nCoordination numbers: "), "italic", active_project -> analysis[BND] -> calc_buffer); spr = g_strdup_printf("%s", textcolor(sp)); print_info (active_chem -> element[sp], spr, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf ("\n\n\t%s", exact_name(active_chem -> label[sp])); print_info (str, spr, active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info (_(" (total)=\t"), "italic", active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%9.5lf\n", sac); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); for ( j=0 ; j < active_project -> nspec ; j++ ) { str = g_strdup_printf ("\t%s(", active_chem -> label[sp]); print_info (str, spr, active_project -> analysis[BND] -> calc_buffer); g_free (str); str = g_strdup_printf("%s", textcolor(j)); print_info (active_chem -> label[j], str, active_project -> analysis[BND] -> calc_buffer); print_info (")", spr, active_project -> analysis[BND] -> calc_buffer); print_info ("[r", NULL, active_project -> analysis[BND] -> calc_buffer); print_info (_("cut"), "sub", active_project -> analysis[BND] -> calc_buffer); print_info ("(", NULL, active_project -> analysis[BND] -> calc_buffer); print_info (active_chem -> label[sp], spr, active_project -> analysis[BND] -> calc_buffer); print_info (",", NULL, active_project -> analysis[BND] -> calc_buffer); print_info (active_chem -> label[j], str, active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info (")= ", NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf ("%9.5lf Å", active_chem -> cutoffs[sp][j]); print_info (str, NULL, active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info ("] = ", NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf ("%9.5lf", ssac[j]); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info (_("\t or \t"), NULL, active_project -> analysis[BND] -> calc_buffer); if (sac != 0.0) { str = g_strdup_printf ("%7.3lf", ssac[j]*100.0/(sac)); } else { str = g_strdup_printf ("%7.3lf", 0.0); } print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info (" %\n", NULL, active_project -> analysis[BND] -> calc_buffer); } g_free (spr); if (sp == active_project -> nspec-1) { print_info (_("\nAverage coordination number: "), "italic", active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf ("%9.5lf\n", bdtc / active_project -> natomes); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } } /*! \fn void coordout_ (int * sid, double * sac, double ssac[active_project->nspec], int * totgsa) \brief retrieve partial geometry information from Fortran90 \param sid the target chemical species \param sac total coordination number for the target species \param ssac partial coordination number(s) for the target species \param totgsa the total number of partial coordination for the target chemical species */ void coordout_ (int * sid, double * sac, double ssac[active_project -> nspec], int * totgsa) { active_coord -> ntg[1][* sid] = * totgsa; if (bonds_update && ! atomes_render_image) coordination_info (* sid, * sac, ssac); } /*! \fn void warren_cowley_out_ (int * spa, double ssac[active_project -> nspec]) \brief compute Warren-Cowley and Cargill-Spaepen chemical order parameters for binary systems \param spa the target species \param ssac partial coordination number(s) for the target species */ void warren_cowley_out_ (int * spa, double ssac[active_project -> nspec]) { gchar * str; int id_a = * spa; int id_b = ! id_a; double x_b = ((double)active_chem -> nsps[id_b]) / active_project -> natomes; double p_ab = ssac[id_b] / (ssac[0] + ssac[1]); // Warren-Cowley for binary A x B 1-x systems if (! id_a) { print_info (_("\nWarren-Cowley chemical order parameters for A"), "italic", active_project -> analysis[BND] -> calc_buffer); print_info ("x", "sub_italic", active_project -> analysis[BND] -> calc_buffer); print_info ("B", "italic", active_project -> analysis[BND] -> calc_buffer); print_info ("1-x", "sub_italic", active_project -> analysis[BND] -> calc_buffer); print_info (_(" binary systems:\n\n"), "italic", active_project -> analysis[BND] -> calc_buffer); } print_info ("\tα", NULL, active_project -> analysis[BND] -> calc_buffer); print_info ("l", "sub", active_project -> analysis[BND] -> calc_buffer); print_info ("[", NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%s", textcolor(id_a)); print_info (active_chem -> label[id_a], str, active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info ("]=\t", NULL, active_project -> analysis[BND] -> calc_buffer); double wc_ab = 1.0 - p_ab / x_b; str = g_strdup_printf ("%f\n", wc_ab); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } /*! \fn void cargill_spaepen_out_ (int * spa, double ssac[active_project -> nspec]) \brief compute Cargill-Spaepen chemical order parameters for binary systems \param spa the target species \param ssac partial coordination number(s) for the target species */ void cargill_spaepen_out_ (int * spa, double ssac[active_project -> nspec]) { gchar * str; int id_a = * spa; int id_b = ! id_a; double x_a = ((double)active_chem -> nsps[id_a]) / active_project -> natomes; double x_b = ((double)active_chem -> nsps[id_b]) / active_project -> natomes; double p_ab = ssac[id_b] / (ssac[0] + ssac[1]); // Cargill-Spaepen for metal alloys, also A x B 1-x systems if (! id_a) { print_info (_("\nCargill-Spaepen chemical order parameters for A"), "italic", active_project -> analysis[BND] -> calc_buffer); print_info ("x", "sub_italic", active_project -> analysis[BND] -> calc_buffer); print_info ("B", "italic", active_project -> analysis[BND] -> calc_buffer); print_info ("1-x", "sub_italic", active_project -> analysis[BND] -> calc_buffer); print_info (_(" binary systems:\n\n"), "italic", active_project -> analysis[BND] -> calc_buffer); } print_info ("\tη", NULL, active_project -> analysis[BND] -> calc_buffer); print_info ("[", NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%s", textcolor(id_a)); print_info (active_chem -> label[id_a], str, active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info ("]=\t", NULL, active_project -> analysis[BND] -> calc_buffer); double cs_ab = (p_ab - x_b) / x_a; str = g_strdup_printf ("%f\n", cs_ab); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } /*! \fn void env_info (int sp, int totgsa, int numgsa[totgsa]) \brief output environment information for target chemical species in text buffer \param sp the target chemcial species \param totgsa the total number of partial coordination(s) \param numgsa the number of coordination(s) by coordination type */ void env_info (int sp, int totgsa, int numgsa[totgsa]) { int i, j, k; int natpg[totgsa]; gchar * env; gchar * str, * spr, * snr; int tgsa; print_info (_("\nEnvironments for "), "italic", active_project -> analysis[BND] -> calc_buffer); spr = g_strdup_printf ("%s", textcolor(sp)); str = g_strdup_printf ("%s", exact_name(active_chem -> label[sp])); print_info (str, spr, active_project -> analysis[BND] -> calc_buffer); g_free (spr); g_free (str); print_info (_(" atoms:\n\n"), "italic", active_project -> analysis[BND] -> calc_buffer); print_info (_("\t \tN(tot)"), NULL, active_project -> analysis[BND] -> calc_buffer); for ( j=0 ; j < active_project -> nspec ; j++ ) { snr = g_strdup_printf ("%s", exact_name(active_chem -> label[j])); i = 6 - strlen (snr); for (k=0; k analysis[BND] -> calc_buffer); str = g_strdup_printf ("N(%s)", snr); spr = g_strdup_printf ("%s", textcolor(j)); print_info (str, spr, active_project -> analysis[BND] -> calc_buffer); g_free (spr); g_free (str); g_free (snr); } print_info (_("\tNumber\t\t or \tPercent\n\n"), NULL, active_project -> analysis[BND] -> calc_buffer); tgsa = 0; for ( i=0 ; i < totgsa; i++ ) { tgsa += numgsa[i]; } for ( i=0 ; i < totgsa; i++ ) { natpg[i] = 0; for ( j=0 ; j < active_project -> nspec ; j++ ) { k = active_coord -> partial_geo[sp][i][j]; natpg[i] += k; } print_info ("\t", NULL, active_project -> analysis[BND] -> calc_buffer); spr = env_name (active_project, i, sp, 1, active_project -> analysis[BND] -> calc_buffer); g_free (spr); env = env_name (active_project, i, sp, 0, NULL); spr = g_strdup_printf ("%s", exact_name(env)); g_free (env); k = 12 - strlen (spr); g_free (spr); for (j=0; j analysis[BND] -> calc_buffer); print_info ("\t", NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf ("%3d ", natpg[i]); print_info (str, NULL, active_project -> analysis[BND] -> calc_buffer); for ( j=0 ; j < active_project -> nspec ; j++ ) { k = active_coord -> partial_geo[sp][i][j]; str = g_strdup_printf(" %7d", k); spr = g_strdup_printf ("%s", textcolor(j)); print_info (str, spr, active_project -> analysis[BND] -> calc_buffer); g_free (str); g_free (spr); } str = g_strdup_printf(" %16.5lf", (1.0*numgsa[i])/active_project -> steps); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info (_("\t or \t"), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf ("%7.3lf ", 100.0*numgsa[i]/tgsa); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); print_info ("%\n", "bold", active_project -> analysis[BND] -> calc_buffer); } } /*! \fn void update_angle_view (project * this_proj) \brief update angle calculation information text buffer \param this_proj the target project */ void update_angle_view (project * this_proj) { gchar * str; if (this_proj -> analysis[ANG] -> calc_buffer == NULL) this_proj -> analysis[ANG] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> analysis[ANG] -> calc_buffer); print_info (_("\n\nAngle distribution function(s)\n\n"), "heading", this_proj -> analysis[ANG] -> calc_buffer); print_info (_("\tAngle space discretization:\n\n"), NULL, this_proj -> analysis[ANG] -> calc_buffer); print_info (_("\t - Number of δ° steps: "), "bold", this_proj -> analysis[ANG] -> calc_buffer); str = g_strdup_printf ("%d", this_proj -> analysis[ANG] -> num_delta); print_info (str, "bold_blue", this_proj -> analysis[ANG] -> calc_buffer); g_free (str); print_info (_("\n\n\t between 0.0 and 180.0°\n"), NULL, this_proj -> analysis[ANG] -> calc_buffer); } /*! \fn void envout_ (int * sid, int * totgsa, int numgsa[*totgsa]) \brief retrieve environment information for target chemical species from Fortran \param sid the target chemical speceis \param totgsa the total number of partial coordination(s) \param numgsa the number of coordination(s) by coordination type */ void envout_ (int * sid, int * totgsa, int numgsa[* totgsa]) { /* Send info for OpenGL */ if (bonds_update && ! atomes_render_image) env_info (* sid, * totgsa, numgsa); } void tetraout_ (int * sid, double eda[active_project -> nspec], double cda[active_project -> nspec], double dda[active_project -> nspec], double tepa[active_project -> nspec], double tcpa[active_project -> nspec], double tdda[active_project -> nspec], double atd[active_project -> nspec], double etd[active_project -> nspec]) { int i; gboolean print; gchar * str; print=FALSE; for ( i=0 ; i < active_project -> nspec ; i++) { if (eda[i] != 0.0 || cda[i] != 0.0) print=TRUE; } if (print && bonds_update && ! atomes_render_image) { print_info (_("\nNumber and proportion of tetrahedra links for "), "italic", active_project -> analysis[BND] -> calc_buffer); print_info (exact_name(active_chem -> label[* sid]), textcolor(* sid), active_project -> analysis[BND] -> calc_buffer); print_info (_(" atoms:\n\n"), "italic", active_project -> analysis[BND] -> calc_buffer); for ( i=0 ; i < active_project -> nspec ; i++ ) { if (eda[i] != 0.0 || cda[i] != 0.0) { print_info ("\t- ", NULL, active_project -> analysis[BND] -> calc_buffer); print_info (exact_name(active_chem -> label[* sid]), textcolor(* sid), active_project -> analysis[BND] -> calc_buffer); print_info ("(", NULL, active_project -> analysis[BND] -> calc_buffer); print_info (exact_name(active_chem -> label[i]), textcolor(i), active_project -> analysis[BND] -> calc_buffer); print_info (")", NULL, active_project -> analysis[BND] -> calc_buffer); print_info ("4", "sub", active_project -> analysis[BND] -> calc_buffer); print_info (_(" tetrahedra:\n"), NULL, active_project -> analysis[BND] -> calc_buffer); if (eda[i] != 0.0) { print_info (_("\t\t Edge-sharing: "), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%11.5lf", eda[i]/active_project -> steps); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %8.5lf", tepa[i]); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (_("\t or \t"), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%7.3lf", 100*eda[i]/(eda[i]+cda[i])); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %7.3lf", 100*tepa[i]*active_project -> steps/(eda[i]+cda[i])); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (" %\n", "bold", active_project -> analysis[BND] -> calc_buffer); } if (cda[i] != 0.0) { print_info (_("\t\t Corner-sharing: "), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%11.5lf", cda[i]/active_project -> steps); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %8.5lf", tcpa[i]); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (_("\t or \t"), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%7.3lf", 100*cda[i]/(eda[i]+cda[i])); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %7.3lf", 100*tcpa[i]*active_project -> steps/(eda[i]+cda[i])); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (" %\n", "bold", active_project -> analysis[BND] -> calc_buffer); } if (dda[i] != 0.0) { print_info (_("\t\t with the following bond defects: "), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%11.5lf", dda[i]/active_project -> steps); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %8.5lf", tdda[i]); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (_("\t or \t"), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%7.3lf", 100*dda[i]/(eda[i]+cda[i])); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %7.3lf", 100*tdda[i]*active_project -> steps/(eda[i]+cda[i])); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (" %\n", "bold", active_project -> analysis[BND] -> calc_buffer); } } } print_info (_("\nNumber and proportion of tetrahedra units for "), "italic", active_project -> analysis[BND] -> calc_buffer); print_info (exact_name(active_chem -> label[* sid]), textcolor(* sid), active_project -> analysis[BND] -> calc_buffer); print_info (_(" atoms:\n\n"), "italic", active_project -> analysis[BND] -> calc_buffer); for ( i=0 ; i < active_project -> nspec ; i++ ) { if (atd[i] != 0.0) { print_info ("\t- ", NULL, active_project -> analysis[BND] -> calc_buffer); print_info (exact_name(active_chem -> label[* sid]), textcolor(* sid), active_project -> analysis[BND] -> calc_buffer); print_info ("(", NULL, active_project -> analysis[BND] -> calc_buffer); print_info (exact_name(active_chem -> label[i]), textcolor(i), active_project -> analysis[BND] -> calc_buffer); print_info (")", NULL, active_project -> analysis[BND] -> calc_buffer); print_info ("4", "sub", active_project -> analysis[BND] -> calc_buffer); print_info (_(" tetrahedra:\n"), NULL, active_project -> analysis[BND] -> calc_buffer); print_info (_("\t\t Total number of tetrahedra:"), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%11.5lf", atd[i]/active_project -> steps); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %8.5lf", etd[i]); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info ("\n", "bold", active_project -> analysis[BND] -> calc_buffer); if (eda[i] != 0.0 ) { print_info (_("\t\t Edge-sharing: "), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%11.5lf", 2.0*eda[i]/active_project -> steps); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %8.5lf", 2.0*tepa[i]); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (_("\t or \t"), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%7.3lf", 2.0*100*eda[i]/(eda[i]+cda[i])); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %7.3lf", 2.0*100*tepa[i]*active_project -> steps/(eda[i]+cda[i])); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (" %\n", "bold", active_project -> analysis[BND] -> calc_buffer); } if (cda[i] != 0.0 ) { print_info (_("\t\t Corner-sharing: "), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%11.5lf", (atd[i]-2*eda[i])/active_project -> steps); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %8.5lf", 2.0*tepa[i]); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (_("\t or \t"), NULL, active_project -> analysis[BND] -> calc_buffer); str = g_strdup_printf("%7.3lf", 100.0*(atd[i]-2.0*eda[i])/atd[i]); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %7.3lf", 2.0*100.0*tepa[i]*active_project -> steps/atd[i]); print_info (str, "bold", active_project -> analysis[BND] -> calc_buffer); g_free (str); } print_info (" %\n", "bold", active_project -> analysis[BND] -> calc_buffer); } } } } } atomes_1.3.1/src/gui/initc.c0000664000175000017500000003154415212624223015341 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file initc.c * @short Curve data buffer initialization * @author Sébastien Le Roux */ /* * This file: 'initc.c' * * Contains: * - Curve data buffer initialization * * List of functions: void clean_curves_data (int calc, int start, int end); void alloc_curves (int rid); void initcwidgets (); void prepostcalc (GtkWidget * widg, gboolean status, int run, int adv, double opc); void alloc_analysis_curves (int pid, atomes_analysis * this_analysis); void init_atomes_analysis (project * this_proj, gboolean apply_defaults); void initialize_this_analysis (project * this_proj, int ana); atomes_analysis * setup_analysis (gchar * name, int analysis, gboolean req_md, gboolean graph, int num_curves, int n_compat, int * compat, gchar * x_title); */ #include "global.h" #include "callbacks.h" #include "project.h" extern void clean_this_curve_window (int cid, int rid); extern void apply_analysis_default_parameters_to_project (project * this_proj); /*! \fn void clean_curves_data (int calc, int start, int end) \brief clean curve data on a range of curve id \param calc the calculation \param start the starting value \param end the ending value */ void clean_curves_data (int calc, int start, int end) { int i; if (active_project -> analysis[calc]) { if (active_project -> analysis[calc] -> curves) { for (i=start; i -1) active_project -> analysis[run] -> calc_ok = adv; if (! status) { clock_gettime (CLOCK_MONOTONIC, & start_time); #ifdef GTK3 if (widg != NULL) gdk_window_set_opacity (gtk_widget_get_window(widg), opc); #endif /* if (adv) { // bar[run] mess = g_strdup_printf (_("Please wait calculation in progress")); pop = show_popup (mess, widg); g_free (mess); mess = g_strdup_printf (_("Computing")); //statusval = gtk_statusbar_push (statusbar, run, mess); g_free (mess); show_the_widgets (pop); }*/ } else { if (adv && run > -1) { //gtk_statusbar_remove (statusbar, run, statusval); //destroy_this_widget(pop); } if (run > -1) { clock_gettime (CLOCK_MONOTONIC, & stop_time); active_project -> analysis[run] -> calc_time = get_calc_time (start_time, stop_time); } #ifdef GTK3 if (widg != NULL) gdk_window_set_opacity (gtk_widget_get_window(widg), opc); #endif } } /*! \fn void alloc_analysis_curves (int pid, atomes_analysis * this_analysis) \brief allocating analysis curve data \param pid the project id \param this_analysis the target atomes_analysis pointer */ void alloc_analysis_curves (int pid, atomes_analysis * this_analysis) { int i; if (this_analysis -> idcc != NULL) { g_free (this_analysis -> idcc); this_analysis -> idcc = NULL; } this_analysis -> idcc = g_malloc0(this_analysis -> numc*sizeof*this_analysis -> idcc); for (i = 0; i < this_analysis -> numc; i++) { this_analysis -> idcc[i].a = pid; this_analysis -> idcc[i].b = this_analysis -> aid; this_analysis -> idcc[i].c = i; } if (this_analysis -> curves != NULL) { g_free (this_analysis -> curves); this_analysis -> curves = NULL; } this_analysis -> curves = g_malloc0(this_analysis -> numc*sizeof*this_analysis -> curves); for (i = 0; i < this_analysis -> numc; i++) { this_analysis -> curves[i] = g_malloc0(sizeof*this_analysis -> curves[i]); } } /*! \fn atomes_analysis * setup_analysis (int pid, gchar * name, int analysis, gboolean req_md, gboolean graph, int num_curves, int n_compat, int * compat, gchar * x_title) \brief allocate atomes_analysis data structure \param pid the project id \param name analysis name \param analysis analysis ID \param req_md requires MD trajectory (1/0) \param graph curves as output or not (1/0) \param num_curves number of curves to be produced for this analysis \param n_compat number of compatible analysis \param compat list of compatible analysis \param x_title default title for x axis for graphs */ atomes_analysis * setup_analysis (int pid, gchar * name, int analysis, gboolean req_md, gboolean graph, int num_curves, int n_compat, int * compat, gchar * x_title) { atomes_analysis * new_analysis = g_malloc0(sizeof*new_analysis); new_analysis -> name = g_strdup_printf ("%s", name); new_analysis -> aid = analysis; new_analysis -> requires_md = req_md; new_analysis -> graph_res = graph; if (graph) { new_analysis -> c_sets = n_compat; new_analysis -> compat_id = duplicate_int (n_compat, compat); if (num_curves) { new_analysis -> numc = num_curves; alloc_analysis_curves (pid, new_analysis); } if (x_title) new_analysis -> x_title = g_strdup_printf ("%s", x_title); } return new_analysis; } /* From global.h: #define NCALCS 11 -> but 10 #define GDR 0 #define SQD 1 #define SKD 2 #define GDK 3 #define BND 4 #define ANG 5 #define RIN 6 #define CHA 7 #define SPH 8 #define MSD 9 #define SKT 10 */ /*! \fn void init_atomes_analysis (project * this_proj, gboolean apply_defaults) \brief initialize analysis data structures for atomes \param this_proj the target project \param apply_defaults apply default parameters (1/0) */ void init_atomes_analysis (project * this_proj, gboolean apply_defaults) { int i = this_proj -> nspec; int pid = this_proj -> id; /* Compatible analysis: - always include self first, and others if required - x axis must be similar or allow comparison (ex: distance) */ int * comp_list; this_proj -> analysis = g_malloc0(NCALCS*sizeof*this_proj -> analysis); // g(r) comp_list = allocint (2); comp_list[0] = GDR; comp_list[1] = GDK; this_proj -> analysis[GDR] = setup_analysis (pid, "g(r)/G(r)", GDR, FALSE, TRUE, 16+5*i*i + ((i ==2) ? 6 : 0), 2, comp_list, "r [Å]"); // g(r) FFT - same compatibility list this_proj -> analysis[GDK] = setup_analysis (pid, _("g(r)/G(r) from FFT[S(q)]"), GDK, FALSE, TRUE, 16+5*i*i + ((i ==2) ? 6 : 0), 2, comp_list, "r [Å]"); // s(q) comp_list[0] = SQD; comp_list[1] = SKD; this_proj -> analysis[SQD] = setup_analysis (pid, _("S(q) from FFT[g(r)]"), SQD, FALSE, TRUE, 8+4*i*i + ((i ==2) ? 8 : 0), 2, comp_list, "q [Å-1]"); // s(k) - same compatibility list this_proj -> analysis[SKD] = setup_analysis (pid, _("S(q) from Debye Equation"), SKD, FALSE, TRUE, 8+4*i*i + ((i ==2) ? 8 : 0), 2, comp_list, "q [Å-1]"); g_free (comp_list); comp_list = allocint (1); // Bond length distribution(s) comp_list[0] = BND; this_proj -> analysis[BND] = setup_analysis (pid, _("Bond Properties"), BND, FALSE, TRUE, i*i, 1, comp_list, "Dij [Å]"); // Angle distribution(s) comp_list[0] = ANG; this_proj -> analysis[ANG] = setup_analysis (pid, _("Angle Distributions"), ANG, FALSE, TRUE, i*i*i + i*i*i*i, 1, comp_list, "θ [°]"); // Ring statistic(s) comp_list[0] = RIN; this_proj -> analysis[RIN] = setup_analysis (pid, _("Ring Statistics"), RIN, FALSE, TRUE, 20*(i+1), 1, comp_list, _("Size n of the ring [total number of nodes]")); // Chain statistic(s) comp_list[0] = CHA; this_proj -> analysis[CHA] = setup_analysis (pid, _("Chain Statistics"), CHA, FALSE, TRUE, i+1, 1, comp_list, _("Size n of the chain [total number of nodes]")); // Spherical harmonic(s) comp_list[0] = SPH; this_proj -> analysis[SPH] = setup_analysis (pid, _("Spherical Harmonics"), SPH, FALSE, TRUE, 0, 1, comp_list, "Ql"); if (this_proj -> steps > 1) { // Mean square displacement comp_list[0] = MSD; this_proj -> analysis[MSD] = setup_analysis (pid, _("Mean Squared Displacement"), MSD, TRUE, TRUE, 14*i+6, 1, comp_list, NULL); // Dynamic structure factor // Number of graphs depends on the number of correlation states, not appearing here comp_list[0] = SKT; // this_proj -> analysis[SKT] = setup_analysis (pid, _("Dynamic Structure Factor"), SKT, TRUE, TRUE, 0, 1, comp_list, NULL); } g_free (comp_list); if (apply_defaults) apply_analysis_default_parameters_to_project (this_proj); } /*! \fn void initialize_this_analysis (project * this_proj, int ana) \brief initialize an analysis data structure for atomes \param this_proj the target project data structure \param ana the target analysis */ void initialize_this_analysis (project * this_proj, int ana) { int i = this_proj -> nspec; int * comp_list; if (! this_proj -> analysis) { this_proj -> analysis = g_malloc0(NCALCS*sizeof*this_proj -> analysis); } switch (ana) { case GDR: // g(r) comp_list = allocint (2); comp_list[0] = GDR; comp_list[1] = GDK; this_proj -> analysis[GDR] = setup_analysis (this_proj -> id, "g(r)/G(r)", GDR, FALSE, TRUE, 16+5*i*i + ((i ==2) ? 6 : 0), 2, comp_list, "r [Å]"); break; case SQD: // S(q) comp_list = allocint (2); comp_list[0] = SQD; comp_list[1] = SKD; this_proj -> analysis[SQD] = setup_analysis (this_proj -> id, _("S(q) from FFT[g(r)]"), SQD, FALSE, TRUE, 8+4*i*i + ((i ==2) ? 8 : 0), 2, comp_list, "q [Å-1]"); break; case SKD: // S(k) comp_list = allocint (2); comp_list[0] = SQD; comp_list[1] = SKD; this_proj -> analysis[SKD] = setup_analysis (this_proj -> id, _("S(q) from Debye Equation"), SKD, FALSE, TRUE, 8+4*i*i + ((i ==2) ? 8 : 0), 2, comp_list, "q [Å-1]"); break; case GDK: // g(r) FFT S(q) comp_list = allocint (2); comp_list[0] = GDR; comp_list[1] = GDK; this_proj -> analysis[GDK] = setup_analysis (this_proj -> id, _("g(r)/G(r) from FFT[S(q)]"), GDK, FALSE, TRUE, 16+5*i*i + ((i ==2) ? 6 : 0), 2, comp_list, "r [Å]"); break; case BND: // Bond length distribution(s) comp_list = allocint (1); comp_list[0] = BND; this_proj -> analysis[BND] = setup_analysis (this_proj -> id, _("Bond Properties"), BND, FALSE, TRUE, i*i, 1, comp_list, "Dij [Å]"); break; case ANG: // Angle distribution(s) comp_list = allocint (1); comp_list[0] = ANG; this_proj -> analysis[ANG] = setup_analysis (this_proj -> id, _("Angle Distributions"), ANG, FALSE, TRUE, i*i*i + i*i*i*i, 1, comp_list, "θ [°]"); break; case RIN: // Ring statistics comp_list = allocint (1); comp_list[0] = RIN; this_proj -> analysis[RIN] = setup_analysis (this_proj -> id, _("Ring Statistics"), RIN, FALSE, TRUE, 20*(i+1), 1, comp_list, _("Size n of the ring [total number of nodes]")); break; case CHA: // Chain statistics comp_list = allocint (1); comp_list[0] = CHA; this_proj -> analysis[CHA] = setup_analysis (this_proj -> id, _("Chain Statistics"), CHA, FALSE, TRUE, i+1, 1, comp_list, _("Size n of the chain [total number of nodes]")); break; case SPH: // Spherical harmonics as order parameters comp_list = allocint (1); comp_list[0] = SPH; this_proj -> analysis[SPH] = setup_analysis (this_proj -> id, _("Spherical Harmonics"), SPH, FALSE, TRUE, 0, 1, comp_list, "Ql"); break; case MSD: // Mean square displacement comp_list = allocint (1); comp_list[0] = MSD; if (this_proj -> steps > 1) this_proj -> analysis[MSD] = setup_analysis (this_proj -> id, _("Mean Squared Displacement"), MSD, TRUE, TRUE, 14*i+6, 1, comp_list, NULL); break; case SKT: comp_list = allocint (1); comp_list[0] = SKT; // Total number of graphs depends on the number of correlation states, not appearing here // if (this_proj -> steps > 1) this_proj -> analysis[SKT] = setup_analysis (this_proj -> id, _("Dynamic Structure Factor"), SKT, TRUE, TRUE, 0, 2, comp_list, NULL); break; } g_free (comp_list); } atomes_1.3.1/src/gui/edit_menu.c0000664000175000017500000006620415212624223016205 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file edit_menu.c * @short Creation of the edition dialogs * @author Sébastien Le Roux */ /* * This file: 'edit_menu.c' * * Contains: * - The creation of the edition dialogs * * List of functions: gboolean test_vol (double box[2][3], double vect[3][3]); gboolean test_pbc (int pbc, int frac, double box[2][3], double vect[3][3]); gboolean has_box_changed (); gboolean have_vectors_changed (); gboolean test_cutoffs (); void edit_box (GtkWidget * vbox); void edit_chem (GtkWidget * vbox); void init_box_calc (); void prep_box (int id); void test_chem (); void edit_bonds (GtkWidget * vbox); G_MODULE_EXPORT void update_box (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void toggle_pbc (GtkCheckButton * Button, gpointer data); G_MODULE_EXPORT void toggle_pbc (GtkToggleButton * Button, gpointer data); G_MODULE_EXPORT void toggle_frac (GtkCheckButton * Button, gpointer data); G_MODULE_EXPORT void toggle_frac (GtkToggleButton * Button, gpointer data); G_MODULE_EXPORT void update_vect (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void run_vectors (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void on_vectors_clicked (GtkButton * but, gpointer data); G_MODULE_EXPORT void update_chemistry (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void on_spec_changed (GtkComboBox * combo, gpointer data); G_MODULE_EXPORT void on_rad_changed (GtkComboBox * combo, gpointer data); G_MODULE_EXPORT void toggle_xcor (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggle_xcor (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void run_on_edit_activate (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void on_edit_activate (GtkWidget * widg, gpointer data); */ #include "global.h" #include "bind.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" #include "glwindow.h" #include "preferences.h" char * box_p[2]={i18n("Edges [Å]"), i18n("Angles [°]")}; char * box_prop[2][3]={{"a", "b", "c"}, {"alpha - α", "beta - β", "gamma - ɣ"}}; char * edit_prop[4]={i18n("Chemistry and physics"), i18n("Box and periodicity"), i18n("Bond cutoffs"), i18n("Lattice vectors")}; char * vect_name[3]={"a", "b", "c"}; char * vect_comp[3]={"x", "y", "z"}; GtkWidget * frac_box; GtkWidget * spec_box; GtkWidget * rad_box; GtkWidget * chem_spec[2]; GtkWidget * chem_entry[CHEM_PARAMS-1]; GtkWidget * vect_entry[9]; double * tmp_chem[CHEM_PARAMS]; double tmp_lattice[2][3]; double tmp_vect[3][3]; int tmp_pbc, tmp_frac; int tmp_xcor, tmp_lat; dint t_box[9]; extern double * tmpcut; extern void update_cutoffs (project * this_proj); extern void cut_box (project * this_proj, GtkWidget * vbox); /*! \fn G_MODULE_EXPORT void update_box (GtkEntry * entry, gpointer data) \brief update lattice parameters \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_box (GtkEntry * entry, gpointer data) { dint * id = (dint *)data; const gchar * m = entry_get_text (entry); double v = string_to_double ((gpointer)m); if (v >= 0.0) { tmp_lattice[id -> a][id -> b] = v; } update_entry_double (entry, v); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_pbc (GtkCheckButton * Button, gpointer data) \brief use PBC ? \param Button the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_pbc (GtkCheckButton * Button, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_pbc (GtkToggleButton * Button, gpointer data) \brief use PBC ? \param Button the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_pbc (GtkToggleButton * Button, gpointer data) #endif { tmp_pbc = button_get_status ((GtkWidget *)Button); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_frac (GtkCheckButton * Button, gpointer data) \brief use fractional coordinates \param Button the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_frac (GtkCheckButton * Button, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_frac (GtkToggleButton * Button, gpointer data) \brief use fractional coordinates \param Button the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_frac (GtkToggleButton * Button, gpointer data) #endif { tmp_frac = button_get_status ((GtkWidget *)Button); /*if (gtk_toggle_button_get_active (Button)) { widget_set_sensitive (frac_box, 1); combo_set_active (frac_box, 0); } else { combo_set_active (frac_box, -1); widget_set_sensitive (frac_box, 0); }*/ } /*! \fn G_MODULE_EXPORT void update_vect (GtkEntry * entry, gpointer data) \brief update lattice vector component \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_vect (GtkEntry * entry, gpointer data) { const gchar * m = entry_get_text (entry); double v = string_to_double ((gpointer)m); update_entry_double (entry, v); } /*! \fn G_MODULE_EXPORT void run_vectors (GtkDialog * win, gint response_id, gpointer data) \brief lattice vectors: run the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_vectors (GtkDialog * win, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { int i, j, k; const gchar * m; double v; i = 0; for (j=0; j<3; j++) { for (k=0; k<3; k++) { m = entry_get_text (GTK_ENTRY(vect_entry[i])); v = string_to_double ((gpointer)m); tmp_vect[j][k] = v; i ++; } } } destroy_this_dialog (win); } /*! \fn G_MODULE_EXPORT void on_vectors_clicked (GtkButton * but, gpointer data) \brief lattice vectors - prepare the dialog \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_vectors_clicked (GtkButton * but, gpointer data) { int i, j, k; GtkWidget * win = dialog_cancel_apply (_(edit_prop[3]), MainWindow, FALSE); GtkWidget * table = gtk_grid_new (); add_box_child_start (GTK_ORIENTATION_VERTICAL, dialog_get_content_area (win), table, FALSE, FALSE, 5); k = 0; for (i=0; i<4; i++) { if (i > 0) { gtk_grid_attach (GTK_GRID (table), markup_label(vect_name[i-1], 30, -1, 0.5, 0.5), 0, i, 1, 1); } for (j=0; j<4; j++) { if (j > 0) { if (i == 0) { gtk_grid_attach (GTK_GRID (table), markup_label(vect_comp[j-1], -1, 30, 0.5, 0.5), j, 0, 1, 1); } else { vect_entry[k] = create_entry (G_CALLBACK(update_vect), 100, 15, FALSE, NULL); update_entry_double (GTK_ENTRY(vect_entry[k]), tmp_vect[i-1][j-1]); gtk_grid_attach (GTK_GRID (table), vect_entry[k], j, i, 1, 1); k ++; } } } } run_this_gtk_dialog (win, G_CALLBACK(run_vectors), NULL); } /*! \fn void edit_box (GtkWidget * vbox) \brief creation of the edit cell widgets \param vbox GtkWidget that will receive the data */ void edit_box (GtkWidget * vbox) { int i, j, k; GtkWidget * entry; GtkWidget * hbox; tmp_pbc = active_cell -> pbc; tmp_frac = active_cell -> frac; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (_("Apply Periodic Boundary Conditions"), -1, 40, tmp_pbc, G_CALLBACK(toggle_pbc), NULL), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (_("Fractional coordinates"), -1, 40, tmp_frac, G_CALLBACK(toggle_frac), NULL), FALSE, FALSE, 0); GtkWidget * table = gtk_grid_new (); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, table, FALSE, FALSE, 0); k = 0; for (i=0; i<3; i++) { for (j=0; j<3; j++, k++) { if (i < 2) tmp_lattice[i][j] = active_box -> param[i][j]; tmp_vect[i][j] = active_box -> vect[i][j]; t_box[k].a = i; t_box[k].b = j; } } tmp_lat = active_cell -> ltype; k = 0; for (i=0; i<2; i++) { gtk_grid_attach (GTK_GRID (table), markup_label(_(box_p[i]), -1, 50, 0.5, 0.5), 1, i+2*i, 1, 1); for (j=0; j<3; j++, k++) { gtk_grid_attach (GTK_GRID (table), markup_label(box_prop[i][j], -1, -1, 0.5, 0.5), j, i+2*i+1, 1, 1); entry = create_entry (G_CALLBACK(update_box), 100, 15, FALSE, (gpointer)& t_box[k]); update_entry_double (GTK_ENTRY(entry), tmp_lattice[i][j]); gtk_grid_attach (GTK_GRID (table), entry, j, i+2*i+2, 1, 1); } } GtkWidget * but = create_button (_("Lattice vectors"), IMG_NONE, NULL, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(on_vectors_clicked), NULL); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 145); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 15); } /*! \fn G_MODULE_EXPORT void update_chemistry (GtkEntry * entry, gpointer data) \brief update chemical property \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_chemistry (GtkEntry * entry, gpointer data) { int i = combo_get_active (spec_box); int j = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (entry); double v = string_to_double ((gpointer)m); tmp_chem[j][i] = v; update_entry_double (entry, v); } /*! \fn G_MODULE_EXPORT void on_spec_changed (GtkComboBox * combo, gpointer data) \brief change the chemical species \param combo the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_spec_changed (GtkComboBox * combo, gpointer data) { int i, j; i = combo_get_active ((GtkWidget *)combo); gtk_label_set_text (GTK_LABEL(chem_spec[0]), active_chem -> element[i]); gtk_label_set_text (GTK_LABEL(chem_spec[1]), g_strdup_printf("%d", (int)active_chem -> chem_prop[CHEM_Z][i])); for (j=0; j chem_prop[CHEM_Z][j]; tmp_chem[1][j] = set_radius_ (& k, & i); update_entry_double (GTK_ENTRY(chem_entry[1]), tmp_chem[1][j]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_xcor (GtkCheckButton * but, gpointer data) \brief use X ray diffraction q coorection \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_xcor (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_xcor (GtkToggleButton * but, gpointer data) \brief use X ray diffraction q coorection \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_xcor (GtkToggleButton * but, gpointer data) #endif { tmp_xcor = button_get_status ((GtkWidget *)but); widget_set_sensitive (chem_entry[CHEM_PARAMS-2], ! tmp_xcor); } /*! \fn void edit_chem (GtkWidget * vbox) \brief creation of the edit chemical properties widgets \param vbox GtkWidget that will receive the data */ void edit_chem (GtkWidget * vbox) { char * chem_lab[CHEM_PARAMS+2]={i18n("Atom:"), i18n("Element:"), i18n("Atomic number:"), i18n("Atomic mass:"), i18n("Radius:"), i18n("Neutrons scattering length:"), i18n("X-rays scattering length:")}; char * chem_rad[4]={i18n("Covalent"), i18n("Ionic"), "van der Waals", i18n("In Crystal")}; char * chem_unit[4]={" g/mol", " Å", " fm", " e.u"}; int i, j; spec_box = create_combo(); widget_set_sensitive(spec_box, 1); g_signal_connect(G_OBJECT(spec_box), "changed", G_CALLBACK(on_spec_changed), NULL); GtkWidget * table = gtk_grid_new (); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, table, FALSE, FALSE, 5); GtkWidget * chem_fixed = gtk_fixed_new (); gtk_grid_attach (GTK_GRID (table), chem_fixed, 1, 0, 1, 1); for (i=0; i nspec; j++) { combo_text_append (spec_box, active_chem -> label[j]); } } else { if (i > 0 && i < 3) { chem_spec[i-1] = markup_label ("", -1, -1, 0.5, 0.5); gtk_grid_attach (GTK_GRID (table), chem_spec[i-1], 1, i+2, 1, 1); } else { if (i==5) { rad_box = create_combo (); gtk_widget_set_size_request (rad_box, -1, 30); for (j=0; j<4; j++) { combo_text_append (rad_box, _(chem_rad[j])); } combo_set_active (rad_box, -1); g_signal_connect(G_OBJECT(rad_box), "changed", G_CALLBACK(on_rad_changed), NULL); gtk_grid_attach (GTK_GRID (table), rad_box, 1, i+1, 1, 1); } tmp_chem[i-3] = g_malloc0(active_project -> nspec*sizeof*tmp_chem[i-3]); for (j=0; j nspec; j++) { tmp_chem[i-3][j] = active_chem -> chem_prop[i-2][j]; } chem_entry[i-3] = create_entry (G_CALLBACK(update_chemistry), 120, 15, FALSE, GINT_TO_POINTER(i-3)); update_entry_double (GTK_ENTRY(chem_entry[i-3]), tmp_chem[i-3][0]); gtk_grid_attach (GTK_GRID (table), chem_entry[i-3], 2, i+2, 1, 1); if (i==CHEM_PARAMS+1) { tmp_xcor = active_project -> xcor; GtkWidget * chem_xcor = check_button ("= f(Q)", -1, 30, tmp_xcor, G_CALLBACK(toggle_xcor), NULL); widget_set_sensitive (chem_entry[i-3], ! tmp_xcor); gtk_grid_attach (GTK_GRID (table), chem_xcor, 1, i+2, 1, 1); } gtk_grid_attach (GTK_GRID (table), markup_label(chem_unit[i-3], -1, -1, 0.0, 0.5), 3, i+2, 1, 1); } } } combo_set_active (spec_box, 0); gtk_fixed_put (GTK_FIXED (chem_fixed), spec_box, -1, -1); } /*! \fn gboolean test_vol (double box[2][3], double vect[3][3]) \brief is the cell properly described to use PBC ? \param box lattice parameters \param vect lattice vectors */ gboolean test_vol (double box[2][3], double vect[3][3]) { int i, j; gboolean val = TRUE; tmp_lat = 0; for (i=0; i<2; i++) { for (j=0; j<3; j++) { if (box[i][j] == 0.0) val = FALSE; } } if (val) tmp_lat = 1; val = TRUE; for (i=0; i<3; i++) { if (vect[i][0] == 0.0 && vect[i][1] == 0.0 && vect[i][2] == 0.0) { val = FALSE; } } if (val) tmp_lat = 2; return (tmp_lat) ? TRUE : FALSE; } /*! \fn gboolean test_pbc (int pbc, int frac, double box[2][3], double vect[3][3]) \brief is the cell properly described ? \param pbc \param frac fractional coordinates \param box lattice parameters \param vect lattice vectors */ gboolean test_pbc (int pbc, int frac, double box[2][3], double vect[3][3]) { if (! pbc && ! frac) { if (! test_vol (box, vect)) tmp_lat = active_cell -> ltype; return TRUE; } else { return test_vol (box, vect); } } /*! \fn void init_box_calc () \brief initialize calculation possibilities based the periodicity */ void init_box_calc () { active_cell -> has_a_box = test_vol (active_box -> param, active_box -> vect); if (! active_cell -> has_a_box) { if (active_project -> analysis) { active_project -> analysis[GDR] -> avail_ok = FALSE; active_project -> analysis[SQD] -> avail_ok = FALSE; active_project -> analysis[SKD] -> avail_ok = FALSE; active_project -> analysis[GDK] -> avail_ok = FALSE; } } else { if (active_project -> analysis) { active_project -> analysis[GDR] -> avail_ok = TRUE; active_project -> analysis[SQD] -> avail_ok = active_project -> analysis[GDR] -> calc_ok; active_project -> analysis[SKD] -> avail_ok = TRUE; active_project -> analysis[GDK] -> avail_ok = active_project -> analysis[SKD] -> calc_ok; } } prep_calc_actions (); } gboolean has_box_changed () { int i, j; gboolean changed = FALSE; for (i=0; i<2; i++) { for (j=0; j<3; j++) { g_debug ("i= %d, j= %d, tmp_lattice[%d][%d]= %f, active_box -> param[%d][%d]= %f", i, j, i, j, tmp_lattice[i][j], i, j, active_box -> param[i][j]); if (tmp_lattice[i][j] != active_box -> param[i][j]) { active_box -> param[i][j] = tmp_lattice[i][j]; changed = TRUE; } } } return changed; } gboolean have_vectors_changed () { int i, j; gboolean changed = FALSE; for (i=0; i<3; i++) { for (j=0; j<3; j++) { if (tmp_vect[i][j] != active_box -> vect[i][j]) { active_box -> vect[i][j] = tmp_vect[i][j]; changed = TRUE; } } } return changed; } /*! \fn void prep_box (int id) \brief prepare the project depending on the changes to the MD box \param id */ void prep_box (int id) { int i; // active_project -> run = 1; if (tmp_pbc != active_cell -> pbc) active_project -> run = 0; active_cell -> pbc = tmp_pbc; if (tmp_lat < 2 && tmp_lat != active_cell -> ltype) active_project -> run = 0; if (tmp_lat > 0) { if (has_box_changed()) { tmp_lat = 1; active_project -> run = 0; } else if (have_vectors_changed()) { tmp_lat = 2; active_project -> run = 0; } } active_cell -> ltype = tmp_lat; init_box_calc (); if (tmp_frac != active_cell -> frac) active_project -> run = 0; active_cell -> frac = tmp_frac; if (id > 1) active_project -> run = 0; if (! active_project -> run) { if (active_project -> modelgl) { for (i=0; i<3; i++) active_project -> modelgl -> cshift[i] = 0.0; } } } /*! \fn void test_chem () \brief were chemical properties modified ? */ void test_chem () { int i, j; gboolean upchem = FALSE; for (i=1; i nspec; j++) { if (tmp_chem[i-1][j] != active_chem -> chem_prop[i][j]) { active_chem -> chem_prop[i][j] = tmp_chem[i-1][j]; upchem = TRUE; } } g_free (tmp_chem[i-1]); tmp_chem[i-1] = NULL; } if (tmp_xcor != active_project -> xcor) { active_project -> xcor = tmp_xcor; upchem = TRUE; } if (upchem) { read_chem_ (active_chem -> chem_prop[CHEM_M], active_chem -> chem_prop[CHEM_R], active_chem -> chem_prop[CHEM_N], active_chem -> chem_prop[CHEM_X]); } } /*! \fn gboolean test_cutoffs () \brief are all cutoffs described ? */ gboolean test_cutoffs () { int i, j, k; k = 0; for (i=0; i nspec; i++, k++) { if (tmpcut[k] == 0.0 || (active_project -> run && tmpcut[k] > active_project -> analysis[GDR] -> max)) return FALSE; } for (i=0; i nspec-1; i++) { for (j=i+1; j nspec; j++, k++) { if (tmpcut[k] == 0.0 || (active_project -> run && tmpcut[k] > active_project -> analysis[GDR] -> max)) return FALSE; } } if (tmpcut[k] == 0.0 || (active_project -> run && tmpcut[k] > active_project -> analysis[GDR] -> max)) return FALSE; return TRUE; } /*! \fn void edit_bonds (GtkWidget * vbox) \brief creation of the edit bond cutoff widgets \param vbox the GtkWidget to store the data */ void edit_bonds (GtkWidget * vbox) { gchar * mess[2] = {i18n("To define the existence of a bond between 2 atoms i (α) and j (β), "), i18n("a bond exits if the 2 following conditions are verified:")}; gchar * cond[2] = {i18n("1) Dij < first minimum of the total g(r) - rcut (Tot.)"), i18n("2) Dij < first minimum of the partial gα,β(r) - rcut (α,β)")}; gchar * m_end= i18n("0.0 < rcut ≤ Dmax"); gchar * fin = i18n("Dmax is the maximum inter-atomic distance in the model\n"); gchar * str; if (! preferences) { if (active_project -> analysis) { if (active_project -> analysis[GDR] -> max != 0.0) { str = g_strdup_printf (_("%s\twith\tDmax = %f Å"), _(m_end), active_project -> analysis[GDR] -> max); } else { str = g_strdup_printf (_("With %s"), _(m_end)); } } else { str = g_strdup_printf (_("With %s"), _(m_end)); } } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_(mess[0]), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_(mess[1]), -1, -1, 0.5, 0.5), FALSE, FALSE, 5); GtkWidget * vvbox = create_vbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, vvbox, FALSE, FALSE, 20); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(cond[0]), -1, -1, 0.0, 0.5), FALSE, FALSE, 50); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(cond[1]), -1, -1, 0.0, 0.5), FALSE, FALSE, 50); if (! preferences) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, vbox, markup_label(str, -1, -1, 0.5, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, vbox, markup_label(_(fin), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); g_free (str); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); GtkWidget * boxv = create_vbox (BSEP); cut_box (active_project, boxv); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, boxv, FALSE, FALSE, 50); } } /*! \fn G_MODULE_EXPORT void run_on_edit_activate (GtkDialog * win, gint response_id, gpointer data) \brief create an edition dialog: run the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_edit_activate (GtkDialog * win, gint response_id, gpointer data) { int id = GPOINTER_TO_INT(data); int i = (id < 2) ? id : (id > 2 && id < 5) ? 1 : 2; gboolean done = FALSE; char * errpbc = i18n("To apply PBC or use fractional coordinates\n" "describe properly the simulation box parameters"); switch (response_id) { case GTK_RESPONSE_APPLY: if (i== 0) { test_chem (); done = TRUE; } else if (i == 1) { done = test_pbc (tmp_pbc, tmp_frac, tmp_lattice, tmp_vect); if (done) { prep_box (i); if (id == 1) { if (! active_project -> run) { run_project (); if (active_glwin) active_glwin -> create_shaders[MDBOX] = TRUE; bonds_update = 1; frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; active_project -> runc[0] = FALSE; on_calc_bonds_released (NULL, NULL); } } } else { show_warning (_(errpbc), GTK_WIDGET(win)); } } else { gboolean upc; if (active_project -> modelgl) { if (active_project -> modelgl -> rings || active_project -> modelgl -> chains) { upc = ask_yes_no (_("Data can be lost !"), _("You will lose\n rings statistics and/or chains statistics data\nProceed anyway ?"), GTK_MESSAGE_WARNING, GTK_WIDGET(win)); } else { upc = TRUE; } } else { upc = TRUE; } if (upc) update_cutoffs (active_project); done = TRUE; } break; default: if (i == 0) { test_chem (); done = TRUE; } else if (i == 1) { done = test_pbc (active_cell -> pbc, active_cell -> frac, active_box -> param, active_box -> vect); } else { done = TRUE; } break; } if (done) destroy_this_dialog (win); } /*! \fn G_MODULE_EXPORT void on_edit_activate (GtkWidget * widg, gpointer data) \brief create an edition dialog - prepare the dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_edit_activate (GtkWidget * widg, gpointer data) { int i; gboolean skip = FALSE; int id = GPOINTER_TO_INT(data); i = (id < 2) ? id : (id > 2 && id < 5) ? 1 : 2; GtkWidget * win = dialog_cancel_apply (_(edit_prop[i]), MainWindow, FALSE); GtkWidget * box = dialog_get_content_area (win); gtk_box_set_homogeneous (GTK_BOX(box), FALSE); if (i == 0) { edit_chem(box); } else if (i == 1) { edit_box (box); if (id == 3) { skip = test_pbc (tmp_pbc, tmp_frac, tmp_lattice, tmp_vect); if (skip) { active_cell -> ltype = tmp_lat; init_box_calc (); } active_project -> run = 0; } } else { opengl_project_changed (activep); edit_bonds (box); if (id == 5) skip = test_cutoffs (); } if (! skip && ! silent_input) { run_this_gtk_dialog (win, G_CALLBACK(run_on_edit_activate), data); } #ifdef GTK3 // GTK3 Menu Action To Check int j, k; if (active_glwin != NULL) { if (active_glwin -> init) { for (i=0; i<2; i++) { if (active_glwin -> ogl_box[i] != NULL) { widget_set_sensitive (active_glwin -> ogl_box[i], active_cell -> ltype); if (i) { j = (active_cell -> ltype && active_project -> steps == 1) ? 1 : 0; for (k=5; k<8; k++) widget_set_sensitive (active_glwin -> ogl_box[k], j); } } } } } #endif if (tmpcut) { g_free (tmpcut); tmpcut = NULL; } } atomes_1.3.1/src/gui/ringscall.c0000664000175000017500000005067315212624223016215 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file ringscall.c * @short Callbacks for the ring statistics calculation dialog * @author Sébastien Le Roux */ /* * This file: 'ringscall.c' * * Contains: * - The callbacks for the ring statistics calculation dialog * * List of functions: void init_ring (project * this_proj); void update_rings_menus (glwin * view); void update_rings_view (project * this_proj, int c); void clean_rings_data (int rid, glwin * view); void save_rings_data_ (int * taille, double ectrc[* taille], double ectpna[* taille], double ectmax[* taille], double ectmin[* taille], double * rpstep, double * ectrpst, double * nampat, double * ectampat); G_MODULE_EXPORT void on_calc_rings_released (GtkWidget * widg, gpointer data); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "glview.h" #include "curve.h" #include "initcoord.h" extern GtkWidget * prep_rings_menu (glwin * view, int id); extern gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb); extern int update_voisj_and_contj (); extern void clean_coord_window (project * this_proj); #ifdef GTK3 extern G_MODULE_EXPORT void show_hide_poly (GtkWidget * widg, gpointer data); #else extern G_MODULE_EXPORT void show_hide_poly (GSimpleAction * action, GVariant * parameter, gpointer data); #endif /*! \fn void init_ring (project * this_proj) \brief initialize the curve widgets for the ring statistics \param this_proj the target project */ void init_ring (project * this_proj) { int i, j, k, l; char * cp[4] = {"Rc(n)[", "Pn(n)[", "Pmax(n)[", "Pmin(n)["}; l = 0; for ( i = 0 ; i < 5 ; i++ ) { for ( j = 0 ; j < 4 ; j++ ) { this_proj -> analysis[RIN] -> curves[l] -> name = g_strdup_printf (_("%s - %sAll]"), _(rings_type[i]), cp[j]); l=l+1; } for ( j = 0 ; j < this_proj -> nspec ; j++ ) { for ( k = 0 ; k < 4 ; k++ ) { this_proj -> analysis[RIN] -> curves[l] -> name = g_strdup_printf ("%s - %s%s]", _(rings_type[i]), cp[k], active_chem -> label[j]); l=l+1; } } } add_curve_widgets (this_proj, RIN); this_proj -> analysis[RIN] -> init_ok = TRUE; } #ifdef GTK3 /*! \fn void update_rings_menus (glwin * view) \brief update the ring(s) menu for the glview \param view the glview */ void update_rings_menus (glwin * view) { int i, j; GtkWidget * menu; for (i=0; i<2; i++) { menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM(view -> ogl_rings[i*6])); if (GTK_IS_WIDGET(menu)) { for (j=1; j ogl_rings[i*6+j])) { g_object_ref (view -> ogl_rings[i*6+j]); gtk_container_remove (GTK_CONTAINER(menu), view -> ogl_rings[i*6+j]); } } } gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_rings[i*6], prep_rings_menu (view, i*6)); show_the_widgets (view -> ogl_rings[i*6]); widget_set_sensitive (view -> ogl_rings[i*6], view -> rings); } } #endif /*! \fn void update_rings_view (project * this_proj, int c) \brief update the text view for ring statistics \param this_proj the target project \param c the ring type */ void update_rings_view (project * this_proj, int c) { int i, j, k; gchar * nelt; gchar * col; gchar * tab; gchar * cid; gchar * str; if (this_proj -> analysis[RIN] -> calc_buffer == NULL) this_proj -> analysis[RIN] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> analysis[RIN] -> calc_buffer); j = this_proj -> rsparam[c][0]; if (j == 0) { nelt = g_strdup_printf (_("All")); col = NULL; } else { nelt = g_strdup_printf ("%s", this_proj -> chemistry -> label[j-1]); col = g_strdup_printf("%s", textcolor(j-1)); } print_info (_("\n\nRing statistics\n\n"), "heading", this_proj -> analysis[RIN] -> calc_buffer); str = g_strdup_printf (_("\n%s rings analysis details:\n"), rings_type[c]); print_info (str, "italic", this_proj -> analysis[RIN] -> calc_buffer); g_free (str); if (this_proj -> rsparam[c][2]) { print_info (_(" * only ABAB rings have been considered\n"), "italic", this_proj -> analysis[RIN] -> calc_buffer); } if (this_proj -> rsparam[c][3]) { print_info (_(" * no homopolar bonds in the rings (A-A, B-B ...)\n"), "italic", this_proj -> analysis[RIN] -> calc_buffer); } if (this_proj -> rsparam[c][4]) { print_info (_(" * no homopolar bonds in the connectivity matrix (A-A, B-B ...)\n"), "italic", this_proj -> analysis[RIN] -> calc_buffer); } print_info (_("\n Atom(s) used to start the search: "), NULL, this_proj -> analysis[RIN] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[RIN] -> calc_buffer); if (j != 0) print_info (_(" atom(s) only"), NULL, this_proj -> analysis[RIN] -> calc_buffer); if (this_proj -> steps > 1) { print_info (_("\n Average number of rings per configuration: "), NULL, this_proj -> analysis[RIN] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> rsdata[c][0]); print_info (str, "bold", this_proj -> analysis[RIN] -> calc_buffer); g_free (str); str = g_strdup_printf (" +/- %f\n", this_proj -> rsdata[c][1]); print_info (str, "bold", this_proj -> analysis[RIN] -> calc_buffer); g_free (str); } else { print_info (_("\n Total number of rings: "), NULL, this_proj -> analysis[RIN] -> calc_buffer); str = g_strdup_printf ("%f\n", this_proj -> rsdata[c][0]); print_info (str, "bold", this_proj -> analysis[RIN] -> calc_buffer); g_free (str); } if (c == 1 || c == 2) { if (this_proj -> steps > 1) { print_info (_(" Average number of ring(s) with n > "), NULL, this_proj -> analysis[RIN] -> calc_buffer); } else { print_info (_(" Number of ring(s) with n > "), NULL, this_proj -> analysis[RIN] -> calc_buffer); } str = g_strdup_printf ("%d", this_proj -> rsparam[c][1]); print_info (str, "bold", this_proj -> analysis[RIN] -> calc_buffer); g_free (str); print_info (_(" nodes that potentially exist: "), NULL, this_proj -> analysis[RIN] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> rsdata[c][2]); print_info (str, "bold", this_proj -> analysis[RIN] -> calc_buffer); g_free (str); if (this_proj -> steps > 1) { str = g_strdup_printf (" +/- %f", this_proj -> rsdata[c][3]); print_info (str, "bold", this_proj -> analysis[RIN] -> calc_buffer); g_free (str); } print_info ("\n", NULL, this_proj -> analysis[RIN] -> calc_buffer); } print_info ("\n\t n\tR", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("c", "sub_bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("(n)[", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[RIN] -> calc_buffer); if (this_proj -> steps > 1) { print_info ("]\t +/- \tP", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("n", "sub_bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("(n)[", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[RIN] -> calc_buffer); print_info ("]\t +/- \tP", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("max", "sub_bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("(n)[", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[RIN] -> calc_buffer); print_info ("]\t +/- \tP", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("min", "sub_bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("(n)[", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[RIN] -> calc_buffer); print_info ("]\t +/-\n", "bold", this_proj -> analysis[RIN] -> calc_buffer); } else { print_info ("]\tP", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("n", "sub_bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("(n)[", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[RIN] -> calc_buffer); print_info ("]\tP", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("max", "sub_bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("(n)[", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[RIN] -> calc_buffer); print_info ("]\tP", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("min", "sub_bold", this_proj -> analysis[RIN] -> calc_buffer); print_info ("(n)[", "bold", this_proj -> analysis[RIN] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[RIN] -> calc_buffer); print_info ("]\n", "bold", this_proj -> analysis[RIN] -> calc_buffer); } tab = NULL; cid = NULL; k = 4*(c*(this_proj -> nspec+1) + this_proj -> rsparam[c][0]); j = 1; for ( i=2 ; i < this_proj -> rsparam[c][1] ; i++ ) { if (this_proj -> analysis[RIN] -> curves[k] -> data[1][i] != 0.0) { j ++; if (j - 2*(j/2) == 0) { tab = g_strdup_printf ("grey_back"); cid = g_strdup_printf ("bold_grey_back"); } else { tab = NULL; cid = g_strdup_printf ("bold"); } print_info ("\t", NULL, this_proj -> analysis[RIN] -> calc_buffer); if (i < 9) { print_info (" ",cid, this_proj -> analysis[RIN] -> calc_buffer); } str = g_strdup_printf("%d", i+1); print_info (str, cid, this_proj -> analysis[RIN] -> calc_buffer); g_free (str); str = g_strdup_printf("\t%f\t", this_proj -> analysis[RIN] -> curves[k] -> data[1][i]); print_info (str, tab, this_proj -> analysis[RIN] -> calc_buffer); g_free (str); if (this_proj -> steps > 1) { str = g_strdup_printf("%f\t", this_proj -> analysis[RIN] -> curves[k] -> err[i]); print_info (str, tab, this_proj -> analysis[RIN] -> calc_buffer); g_free (str); } str = g_strdup_printf("%f\t", this_proj -> analysis[RIN] -> curves[k+1] -> data[1][i]); print_info (str, tab, this_proj -> analysis[RIN] -> calc_buffer); g_free (str); if (this_proj -> steps > 1) { str = g_strdup_printf("%f\t", this_proj -> analysis[RIN] -> curves[k+1] -> err[i]); print_info (str, tab, this_proj -> analysis[RIN] -> calc_buffer); g_free (str); } str = g_strdup_printf("%f\t", this_proj -> analysis[RIN] -> curves[k+2] -> data[1][i]); print_info (str, tab, this_proj -> analysis[RIN] -> calc_buffer); g_free (str); if (this_proj -> steps > 1) { str = g_strdup_printf("%f\t", this_proj -> analysis[RIN] -> curves[k+2] -> err[i]); print_info (str, tab, this_proj -> analysis[RIN] -> calc_buffer); g_free (str); } str = g_strdup_printf("%f", this_proj -> analysis[RIN] -> curves[k+3] -> data[1][i]); print_info (str, tab, this_proj -> analysis[RIN] -> calc_buffer); g_free (str); if (this_proj -> steps > 1) { str = g_strdup_printf("\t%f", this_proj -> analysis[RIN] -> curves[k+3] -> err[i]); print_info (str, tab, this_proj -> analysis[RIN] -> calc_buffer); g_free (str); } print_info ("\n", NULL, this_proj -> analysis[RIN] -> calc_buffer); if (tab != NULL) { g_free (tab); } if (cid != NULL) { g_free (cid); } } } print_info (calculation_time(TRUE, this_proj -> rsdata[c][4]), NULL, this_proj -> analysis[RIN] -> calc_buffer); g_free (nelt); if (col != NULL) { g_free (col); } } /*! \fn void clean_rings_data (int rid, glwin * view) \brief clean a ring type data for a glview \param rid Rings type \param view the glview */ void clean_rings_data (int rid, glwin * view) { project * this_proj = get_project_by_id(view -> proj); view -> ring_max[rid] = 0; int i, j; #ifdef GTK3 // GTK3 Menu Action To Check for (i=0; i coord -> totcoord[4+rid]; i++) { if (view -> ogl_poly[0][4+rid][i] != NULL) { if (GTK_IS_WIDGET(view -> ogl_poly[0][4+rid][i])) { if (view -> anim -> last -> img -> show_poly[4+rid][i]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_poly[0][4+rid][i], FALSE); show_hide_poly (view -> ogl_poly[0][4+rid][i], & view -> gcid[4+rid][i][4+rid]); } } } } #endif if (this_proj -> coord -> totcoord[4+rid]) { if (this_proj -> coord -> ntg[4+rid]) g_free (this_proj -> coord -> ntg[4+rid]); this_proj -> coord -> ntg[4+rid] = NULL; if (this_proj -> coord -> geolist[4+rid][0]) g_free (this_proj -> coord -> geolist[4+rid][0]); this_proj -> coord -> geolist[4+rid][0] = NULL; this_proj -> coord -> totcoord[4+rid] = 0; } if (view -> all_rings[rid]) g_free (view -> all_rings[rid]); view -> all_rings[rid] = NULL; if (view -> num_rings[rid]) g_free (view -> num_rings[rid]); view -> num_rings[rid] = NULL; if (view -> show_rpoly[rid]) g_free (view -> show_rpoly[rid]); view -> show_rpoly[rid] = NULL; if (view -> gcid[4+rid]) g_free (view -> gcid[4+rid]); view -> gcid[4+rid] = NULL; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (this_proj -> atoms[i][j].rings[rid]) { g_free (this_proj -> atoms[i][j].rings[rid]); this_proj -> atoms[i][j].rings[rid] = NULL; } } } int shaders[1] = {RINGS}; re_create_md_shaders (1, shaders, this_proj); update (view); #ifdef GTK4 update_menu_bar (view); #endif } /*! \fn G_MODULE_EXPORT void on_calc_rings_released (GtkWidget * widg, gpointer data) \brief compute ring statistics \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_rings_released (GtkWidget * widg, gpointer data) { int search = active_project -> rsearch[0]; int i, j, k; #ifdef DEBUG g_debug ("Calc rings !"); g_debug (" - rings definition: %d", search); if (active_project -> rsparam[search][2]) g_debug (" - only ABAB rings !"); if (active_project -> rsparam[search][3]) g_debug (" - no homopolar bonds in rings !"); if (active_project -> rsparam[search][4]) g_debug (" - no homopolar bonds at all !"); #endif cutoffsend (); //if (active_project -> steps > 1) statusb = 1; if (! active_project -> analysis[RIN] -> init_ok) init_ring (active_project); active_project -> rsparam[search][5] = 0; if (! run_distance_matrix (widg, search+1, 0)) { show_error (_("The nearest neighbors table calculation has failed"), 0, widg); } else { i = search; j = 4*(active_project -> nspec + 1) * i; clean_curves_data (RIN, j+4*active_project -> rsparam[i][0], j+4*(active_project -> rsparam[i][0]+1)); clean_rings_data (i, active_glwin); active_glwin -> all_rings[i] = g_malloc0(active_project -> steps*sizeof*active_glwin -> all_rings[i]); active_glwin -> num_rings[i] = g_malloc0(active_project -> steps*sizeof*active_glwin -> num_rings[i]); active_glwin -> show_rpoly[i] = g_malloc0(active_project -> steps*sizeof*active_glwin -> show_rpoly[i]); active_glwin -> ring_max[i] = active_project -> rsparam[i][1]; active_glwin -> rings = TRUE; for (j=0; j steps; j++) { active_glwin -> all_rings[i][j] = g_malloc0(active_project -> rsparam[i][1]*sizeof*active_glwin -> all_rings[i][j]); active_glwin -> num_rings[i][j] = allocint (active_project -> rsparam[i][1]); active_glwin -> show_rpoly[i][j] = g_malloc0(active_project -> rsparam[i][1]*sizeof*active_glwin -> show_rpoly[i][j]); for (k=0; k < active_project -> natomes; k++) { active_project -> atoms[j][k].rings[i] = g_malloc0(active_project -> rsparam[i][1]*sizeof*active_project -> atoms[j][k].rings[i]); } } prepostcalc (widg, FALSE, RIN, 0, opac); j = initrings_ (& search, & active_project -> rsparam[i][1], & active_project -> rsparam[i][0], & active_project -> rsearch[1], & active_project -> rsparam[i][2], & active_project -> rsparam[i][3]); prepostcalc (widg, TRUE, RIN, (j == 0 || j == 2) ? 0 : 1, 1.0); active_project -> rsdata[i][4] = get_calc_time (start_time, stop_time); if (j == 0) { show_error (_("The ring statistics calculation has failed"), 0, widg); active_glwin -> ring_max[i] = 0; active_project -> rsdata[i][4] = 0.0; } else if (j == 2) { gchar * str = g_strdup_printf (_("\tThe ring statistics have failed !\n\n" "The number of ring per MD step appears\n" "to be bigger than the initial value of %d\n" "used to allocate memory to store the results.\n\n" "Increase the value and start again !"), active_project -> rsearch[1]); show_error (str, 0, widg); g_free (str); active_glwin -> ring_max[i] = 0; active_project -> rsdata[i][4] = 0.0; j = 0; } else { if (active_coord -> totcoord[4+search]) { active_project -> rsparam[search][5] = 1; update_rings_view (active_project, search); } else { active_glwin -> ring_max[i] = 0; } } } active_glwin -> rings = FALSE; for (i=0; i<5; i++) { if (active_coord -> totcoord[4+i]) { active_glwin -> rings = TRUE; break; } } show_the_widgets (curvetoolbox); clean_coord_window (active_project); #ifdef GTK3 update_rings_menus (active_glwin); #else update_menu_bar (active_glwin); #endif fill_tool_model (); free_contj_voisj_ (); } /*! \fn void save_rings_data_ (int * taille, double ectrc[*taille], double ectpna[*taille], double ectmax[*taille], double ectmin[*taille], double * rpstep, double * ectrpst, double * nampat, double * ectampat) \brief get rings statistics results form Fortran90 \param taille number of data points \param ectrc Rc (RINGS method) \param ectpna Pn (RINGS method) \param ectmax Pmax (RINGS method) \param ectmin Pmin (RINGS method) \param rpstep ring(s) per MD step \param ectrpst Standard deviation \param nampat rings not found \param ectampat standard deviation */ void save_rings_data_ (int * taille, double ectrc[* taille], double ectpna[* taille], double ectmax[* taille], double ectmin[* taille], double * rpstep, double * ectrpst, double * nampat, double * ectampat) { int i, j; i = active_project -> rsearch[0]; active_project -> rsdata[i][0] = * rpstep; active_project -> rsdata[i][1] = * ectrpst; active_project -> rsdata[i][2] = * nampat; active_project -> rsdata[i][3] = * ectampat; j = 4*(i*(active_project -> nspec+1) + active_project -> rsparam[i][0]); active_project -> analysis[RIN] -> curves[j] -> err = duplicate_double (* taille, ectrc); active_project -> analysis[RIN] -> curves[j+1] -> err = duplicate_double (* taille, ectpna); active_project -> analysis[RIN] -> curves[j+2] -> err = duplicate_double (* taille, ectmax); active_project -> analysis[RIN] -> curves[j+3] -> err = duplicate_double (* taille, ectmin); } atomes_1.3.1/src/gui/msdcall.c0000664000175000017500000001651015212624223015646 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file msdcall.c * @short Callbacks for the MSD calculation dialog * @author Sébastien Le Roux */ /* * This file: 'msdcall.c' * * Contains: * - The callbacks for the MSD calculation dialog * * List of functions: void init_msd (project * this_proj); void update_dynamic_view (project * this_proj, GtkTextBuffer * calc_buffer); void update_msd_view (project * this_proj); G_MODULE_EXPORT void on_calc_msd_released (GtkWidget * widg, gpointer data); */ #include #include #include #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "curve.h" #include "project.h" /*! \fn void init_msd (project * this_proj) \brief initialize the curve widgets for the MSD \param this_proj the target project */ void init_msd (project * this_proj) { int i, j; j = 0; for ( i = 0 ; i < this_proj -> nspec ; i++ ) { this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s[%s]", _("MSD"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(%s)[%s]", _("MSD"), _("nac"), active_chem -> label[i]); j=j+1; } for ( i = 0 ; i < this_proj -> nspec ; i++ ) { this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(x)[%s]", _("MSD"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(y)[%s]", _("MSD"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(z)[%s]", _("MSD"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(xy)[%s]", _("MSD"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(xz)[%s]", _("MSD"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(yz)[%s]", _("MSD"), active_chem -> label[i]); j=j+1; } for ( i = 0 ; i < this_proj -> nspec ; i++ ) { this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(x/%s)[%s]", _("MSD"), _("nac"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(y/%s)[%s]", _("MSD"), _("nac"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(z/%s)[%s]", _("MSD"), _("nac"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(xy/%s)[%s]", _("MSD"), _("nac"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(xz/%s)[%s]", _("MSD"), _("nac"), active_chem -> label[i]); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s(yz/%s)[%s]", _("MSD"), _("nac"), active_chem -> label[i]); j=j+1; } this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s[x]", _("Correction")); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s[y]", _("Correction")); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s[z]", _("Correction")); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s[x]", _("Drift")); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s[y]", _("Drift")); j=j+1; this_proj -> analysis[MSD] -> curves[j] -> name = g_strdup_printf ("%s[z]", _("Drift")); add_curve_widgets (this_proj, MSD); this_proj -> analysis[MSD] -> init_ok = TRUE; } /*! \fn void update_dynamic_view (project * this_proj, GtkTextBuffer * calc_buffer) \brief print molecular dynamics information \param this_proj the target project \param calc_buffer the GtkTextBuffer to print into */ void update_dynamic_view (project * this_proj, GtkTextBuffer * calc_buffer) { gchar * str; print_info (_("\t - Number of configurations: "), "bold", calc_buffer); str = g_strdup_printf ("%d", this_proj -> steps); print_info (str, "bold_blue", calc_buffer); g_free (str); print_info (_("\n\n\t - Number of time steps between each configuration: "), "bold", calc_buffer); str = g_strdup_printf ("%d", this_proj -> analysis[MSD] -> num_delta); print_info (str, "bold_blue", calc_buffer); g_free (str); print_info (_("\n\n\t - Time step δt used to integrate Newton's equations of motion: "), "bold", calc_buffer); str = g_strdup_printf ("%f", this_proj -> analysis[MSD] -> delta); print_info (str, "bold_blue", calc_buffer); g_free (str); print_info (" ", "bold", calc_buffer); print_info (untime[this_proj -> tunit], "bold_red", calc_buffer); } /*! \fn void update_msd_view (project * this_proj) \brief update the project text view for the MSD calculation \param this_proj the target project */ void update_msd_view (project * this_proj) { if (this_proj -> analysis[MSD] -> calc_buffer == NULL) this_proj -> analysis[MSD] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> analysis[MSD] -> calc_buffer); print_info (_("\n\nMean Square Displacement\n\n"), "heading", this_proj -> analysis[MSD] -> calc_buffer); print_info (_("Calculation details:\n\n"), NULL, this_proj -> analysis[MSD] -> calc_buffer); update_dynamic_view (this_proj, this_proj -> analysis[MSD] -> calc_buffer); print_info ("\n", NULL, this_proj -> analysis[MSD] -> calc_buffer); print_info (calculation_time(TRUE, this_proj -> analysis[MSD] -> calc_time), NULL, this_proj -> analysis[MSD] -> calc_buffer); } /*! \fn G_MODULE_EXPORT void on_calc_msd_released (GtkWidget * widg, gpointer data) \brief compute MSD \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_msd_released (GtkWidget * widg, gpointer data) { int i; if (! active_project -> analysis[MSD] -> init_ok) init_msd (active_project); clean_curves_data (MSD, 0, active_project -> analysis[MSD] -> numc); prepostcalc (widg, FALSE, MSD, 0, opac); active_project -> analysis[MSD] -> min = active_project -> analysis[MSD] -> delta*active_project -> analysis[MSD] -> num_delta; active_project -> analysis[MSD] -> max = (active_project -> steps - 1)*active_project -> analysis[MSD] -> delta*active_project -> analysis[MSD] -> num_delta; i = msd_ (& active_project -> analysis[MSD] -> delta, & active_project -> analysis[MSD] -> num_delta); prepostcalc (widg, TRUE, MSD, i, 1.0); if (! i) { show_error (_("The MSD calculation has failed"), 0, widg); } else { update_msd_view (active_project); show_the_widgets (curvetoolbox); } fill_tool_model (); } atomes_1.3.1/src/gui/grcall.c0000664000175000017500000003257115212624223015500 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file grcall.c * @short Callbacks for the g(r)/g(k) calculation dialog * @author Sébastien Le Roux */ /* * This file: 'grcall.c' * * Contains: * - The callbacks for the g(r)/g(k) calculation dialog * * List of functions: int recup_data_ (int * cd, int * rd); void init_gr (project * this_proj, int rdf); void update_rdf_view (project * this_proj, int rdf); void sendcutoffs_ (int * nc, double * totc, double partc[* nc][* nc]); G_MODULE_EXPORT void on_calc_gr_released (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_cutcheck_toggled (GtkToggleButton * Button); G_MODULE_EXPORT void on_calc_gq_released (GtkWidget * widg, gpointer data); */ #include #include #include #include "global.h" #include "curve.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" int fitc = 0; /*! \fn void init_gr (project * this_proj, int rdf) \brief initialize the curve widgets for the g(r)/g(k) \param this_proj the target project \param rdf GR = real space, GK = FFT */ void init_gr (project * this_proj, int rdf) { int i, j, k; this_proj -> analysis[rdf] -> curves[0] -> name = g_strdup_printf ("g(r) %s", _("Neutrons")); this_proj -> analysis[rdf] -> curves[1] -> name = g_strdup_printf ("g(r) %s - %s", _("Neutrons"), _("smoothed")); this_proj -> analysis[rdf] -> curves[2] -> name = g_strdup_printf ("G(r) %s", _("Neutrons")); this_proj -> analysis[rdf] -> curves[3] -> name = g_strdup_printf ("G(r) %s - %s", _("Neutrons"), _("smoothed")); this_proj -> analysis[rdf] -> curves[4] -> name = g_strdup_printf ("D(r) %s", _("Neutrons")); this_proj -> analysis[rdf] -> curves[5] -> name = g_strdup_printf ("D(r) %s - %s", _("Neutrons"), _("smoothed")); this_proj -> analysis[rdf] -> curves[6] -> name = g_strdup_printf ("T(r) %s", _("Neutrons")); this_proj -> analysis[rdf] -> curves[7] -> name = g_strdup_printf ("T(r) %s - %s", _("Neutrons"), _("smoothed")); this_proj -> analysis[rdf] -> curves[8] -> name = g_strdup_printf ("g(r) %s", _("X-rays")); this_proj -> analysis[rdf] -> curves[9] -> name = g_strdup_printf ("g(r) %s - %s", _("X-rays"), _("smoothed")); this_proj -> analysis[rdf] -> curves[10] -> name = g_strdup_printf ("G(r) %s", _("X-rays")); this_proj -> analysis[rdf] -> curves[11] -> name = g_strdup_printf ("G(r) %s - %s", _("X-rays"), _("smoothed")); this_proj -> analysis[rdf] -> curves[12] -> name = g_strdup_printf ("D(r) %s", _("X-rays")); this_proj -> analysis[rdf] -> curves[13] -> name = g_strdup_printf ("D(r) %s - %s", _("X-rays"), _("smoothed")); this_proj -> analysis[rdf] -> curves[14] -> name = g_strdup_printf ("T(r) %s", _("X-rays")); this_proj -> analysis[rdf] -> curves[15] -> name = g_strdup_printf ("T(r) %s - %s", _("X-rays"), _("smoothed")); k = 16; for ( i = 0 ; i < this_proj -> nspec ; i++ ) { for ( j = 0 ; j < this_proj -> nspec ; j++ ) { this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf ("g(r)[%s,%s]", active_chem -> label[i], active_chem -> label[j]); k=k+1; this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf ("g(r)[%s,%s] - %s", active_chem -> label[i], active_chem -> label[j], _("smoothed")); k=k+1; this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf ("G(r)[%s,%s]", active_chem -> label[i], active_chem -> label[j]); k=k+1; this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf ("G(r)[%s,%s] - %s", active_chem -> label[i], active_chem -> label[j], _("smoothed")); k=k+1; this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf ("dn(r)[%s,%s]", active_chem -> label[i], active_chem -> label[j]); k=k+1; } } if ( this_proj -> nspec == 2 ) { this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf("BT(r)[NN]"); k=k+1; this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf("BT(r)[NN] - %s", _("smoothed")); k=k+1; this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf("BT(r)[NC]"); k=k+1; this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf("BT(r)[NC] - %s", _("smoothed")); k=k+1; this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf("BT(r)[CC]"); k=k+1; this_proj -> analysis[rdf] -> curves[k] -> name = g_strdup_printf("BT(r)[CC] - %s", _("smoothed")); } add_curve_widgets (this_proj, rdf); this_proj -> analysis[rdf] -> init_ok = TRUE; } /*! \fn void update_rdf_view (project * this_proj, int rdf) \brief update the project text view for the g(r)/g(k) calculation \param this_proj the target project \param rdf the calculation GR / GK */ void update_rdf_view (project * this_proj, int rdf) { gchar * str; if (this_proj -> analysis[rdf] -> calc_buffer == NULL) this_proj -> analysis[rdf] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> analysis[rdf] -> calc_buffer); print_info (_("\n\nRadial distribution function(s)"), "heading", this_proj -> analysis[rdf] -> calc_buffer); if (rdf == GDR) { print_info (_(" - real space calculation\n\n"), "heading", this_proj -> analysis[rdf] -> calc_buffer); } else { print_info (_(" - FFT[S(q)]\n\n"), "heading", this_proj -> analysis[rdf] -> calc_buffer); } print_info (_("Calculation details:\n\n"), NULL, this_proj -> analysis[rdf] -> calc_buffer); if (rdf == GDK) { print_info (_("\tReciprocal space data:\n\n"), NULL, this_proj -> analysis[rdf] -> calc_buffer); print_info (_("\t - Minimum vector Q"), "bold", this_proj -> analysis[rdf] -> calc_buffer); print_info ("min", "sub_bold", this_proj -> analysis[rdf] -> calc_buffer); print_info (": ", "bold", this_proj -> analysis[rdf] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> analysis[SKD] -> min); print_info (str, "bold_red", this_proj -> analysis[rdf] -> calc_buffer); g_free (str); print_info (" Å", "bold", this_proj -> analysis[rdf] -> calc_buffer); print_info ("-1", "sup_bold", this_proj -> analysis[rdf] -> calc_buffer); print_info (_("\n\t - Maximum vector Q"), "bold", this_proj -> analysis[rdf] -> calc_buffer); print_info ("max", "sub_bold", this_proj -> analysis[rdf] -> calc_buffer); print_info (_(" for the FFT: "), "bold", this_proj -> analysis[rdf] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> analysis[rdf] -> max); print_info (str, "bold_red", this_proj -> analysis[rdf] -> calc_buffer); g_free (str); print_info (" Å", "bold", this_proj -> analysis[rdf] -> calc_buffer); print_info ("-1", "sup_bold", this_proj -> analysis[rdf] -> calc_buffer); print_info ("\n\n", NULL, this_proj -> analysis[rdf] -> calc_buffer); } print_info (_("\tReal space discretization:\n\n"), NULL, this_proj -> analysis[rdf] -> calc_buffer); print_info (_("\t - Number of δr steps: "), "bold", this_proj -> analysis[rdf] -> calc_buffer); str = g_strdup_printf ("%d", this_proj -> analysis[rdf] -> num_delta); print_info (str, "bold_blue", this_proj -> analysis[rdf] -> calc_buffer); g_free (str); print_info (_("\n\n\t between 0.0 and "), NULL, this_proj -> analysis[rdf] -> calc_buffer); print_info ("D", "bold", this_proj -> analysis[rdf] -> calc_buffer); print_info ("max", "sub_bold", this_proj -> analysis[rdf] -> calc_buffer); print_info (_("\n\t where "), NULL, this_proj -> analysis[rdf] -> calc_buffer); print_info ("D", "bold", this_proj -> analysis[rdf] -> calc_buffer); print_info ("max", "sub_bold", this_proj -> analysis[rdf] -> calc_buffer); print_info (_(" is the maximum distance in real space, "), NULL, this_proj -> analysis[rdf] -> calc_buffer); print_info ("D", "bold", this_proj -> analysis[rdf] -> calc_buffer); print_info ("max", "sub_bold", this_proj -> analysis[rdf] -> calc_buffer); print_info (" = ", NULL, this_proj -> analysis[rdf] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> analysis[rdf] -> max); print_info (str, "bold_blue", this_proj -> analysis[rdf] -> calc_buffer); g_free (str); print_info (" Å\n\n\t - δr = ", "bold", this_proj -> analysis[rdf] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> analysis[rdf] -> delta); print_info (str, "bold_blue", this_proj -> analysis[rdf] -> calc_buffer); g_free (str); print_info (" Å\n", "bold", this_proj -> analysis[rdf] -> calc_buffer); print_info (calculation_time(TRUE, this_proj -> analysis[rdf] -> calc_time), NULL, this_proj -> analysis[rdf] -> calc_buffer); } /*! \fn G_MODULE_EXPORT void on_calc_gr_released (GtkWidget * widg, gpointer data) \brief compute g(r) \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_gr_released (GtkWidget * widg, gpointer data) { int i; if (! active_project -> analysis[GDR] -> init_ok) init_gr (active_project, GDR); clean_curves_data (GDR, 0, active_project -> analysis[GDR] -> numc); active_project -> analysis[GDR] -> delta = active_project -> analysis[GDR] -> max / active_project -> analysis[GDR] -> num_delta; prepostcalc (widg, FALSE, GDR, 0, opac); i = g_of_r_ (& active_project -> analysis[GDR] -> num_delta, & active_project -> analysis[GDR] -> delta, & fitc); prepostcalc (widg, TRUE, GDR, i, 1.0); if (! i) { remove_action ("analyze.1"); show_error (_("The g(r) calculation has failed"), 0, widg); } else { add_analysis_action (1); update_rdf_view (active_project, GDR); show_the_widgets (curvetoolbox); } fill_tool_model (); for (i=0; i<4; i=i+3) update_after_calc (i); } /*! \fn void sendcutoffs_ (int * nc, double * totc, double partc[*nc][*nc]) \brief bond cutoff from Fortran90 \param nc number of species \param totc total cutoff \param partc partials cutoff */ void sendcutoffs_ (int * nc, double * totc, double partc[* nc][* nc]) { int i, j; active_chem -> grtotcutoff = * totc; for ( i=0; i< active_project -> nspec; i++) { for (j=0; j nspec; j++) { active_chem -> cutoffs[i][j]=partc[j][i]; } } active_project -> dmtx = FALSE; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_cutcheck_toggled (GtkCheckButton * but, gpointer data) \brief Fitting bond cutoff or data ? \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_cutcheck_toggled (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void on_cutcheck_toggled (GtkToggleButton * Button) \brief Fitting bond cutoff or data ? \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_cutcheck_toggled (GtkToggleButton * but, gpointer data) #endif { gboolean status = button_get_status ((GtkWidget *)but); if (status) { fitc = 1; } else { fitc = 0; } } /*! \fn int recup_data_ (int * cd, int * rd) \brief Sending data back to Fortran90 \param cd the curve id \param rd the analysis id */ int recup_data_ (int * cd, int * rd) { if (* rd == 0) { return send_gr_ (cd, & active_project -> analysis[GDR] -> curves[* cd] -> ndata, & active_project -> analysis[GDR] -> delta, active_project -> analysis[GDR] -> curves[* cd] -> data[0], active_project -> analysis[GDR] -> curves[* cd] -> data[1]); } else { return send_sq_ (cd, & active_project -> analysis[SKD] -> curves[* cd] -> ndata, & active_project -> analysis[GDK] -> delta, active_project -> analysis[SKD] -> curves[* cd] -> data[0], active_project -> analysis[SKD] -> curves[* cd] -> data[1]); } } /*! \fn G_MODULE_EXPORT void on_calc_gq_released (GtkWidget * widg, gpointer data) \brief compute g(k) \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_gq_released (GtkWidget * widg, gpointer data) { int i; if (! active_project -> analysis[GDK] -> init_ok) init_gr (active_project, GDK); clean_curves_data (GDK, 0, active_project -> analysis[GDK] -> numc); active_project -> analysis[GDK] -> delta = active_project -> analysis[GDK] -> max / active_project -> analysis[GDK] -> num_delta; prepostcalc (widg, FALSE, GDK, 0, opac); i = g_of_r_fft_ (& active_project -> analysis[GDK] -> num_delta, & active_project -> analysis[GDK] -> delta, & active_project -> analysis[GDK] -> max); prepostcalc (widg, TRUE, GDK, i, 1.0); if (! i) { show_error (_("The g(r) from FFT[S(k)] calculation has failed"), 0, widg); } else { update_rdf_view (active_project, GDK); show_the_widgets (curvetoolbox); } fill_tool_model (); for (i=0; i<4; i=i+3) update_after_calc (i); } atomes_1.3.1/src/gui/tools.c0000664000175000017500000002630615212624223015373 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file tools.c * @short Callbacks for the toolbox dialog * @author Sébastien Le Roux */ /* * This file: 'tools.c' * * Contains: * - The callbacks for the toolbox dialog * * List of functions: gchar * prepare_for_title (gchar * init); void fill_tool_model (); void tool_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void adjust_tool_model (int calc, int curve, gchar * string_path); G_MODULE_EXPORT void toggle_show_hide_curve (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); GtkWidget * create_tool_tree (); GtkWidget * create_curve_tool_box (); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" extern GtkWidget * create_curve (tint * data); extern gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); GtkTreeStore * tool_model = NULL; GtkWidget * tool_tree = NULL; GtkWidget * tool_scroll = NULL; /*! \fn gchar * prepare_for_title (gchar * init) \brief prepare a string for a window title, getting rid of all markup \param init the initial string */ gchar * prepare_for_title (gchar * init) { gchar * str = substitute_string (init, "", NULL); str = substitute_string (str, "", NULL); str = substitute_string (str, "", NULL); str = substitute_string (str, "", NULL); str = substitute_string (str, "", NULL); str = substitute_string (str, "", NULL); str = substitute_string (str, "", NULL); str = substitute_string (str, "", NULL); str = substitute_string (str, "", NULL); str = substitute_string (str, "", NULL); return str; } /*! \fn void fill_tool_model () \brief fill the tool window tree model */ void fill_tool_model () { GtkTreeIter calc_level, curve_level; int i, j; gboolean status, append; gchar * str; GtkImage * img; if (active_project) { i = (active_project -> steps > 1) ? 45 : 0; gtk_window_set_resizable (GTK_WINDOW (curvetoolbox), TRUE); #ifdef GTK4 gtk_window_set_default_size (GTK_WINDOW (curvetoolbox), 300, 250+i); #else gtk_widget_set_size_request (curvetoolbox, 300, 320+i); #endif gtk_window_set_resizable (GTK_WINDOW (curvetoolbox), FALSE); } gtk_tree_store_clear (tool_model); for (i=0; i steps > 1) ? TRUE : FALSE; } else { append = FALSE; } } if (append) { gtk_tree_store_append (tool_model, & calc_level, NULL); img = GTK_IMAGE(gtk_image_new_from_file(graph_img[i])); #ifdef GTK4 gtk_tree_store_set (tool_model, & calc_level, 0, -1, 1, -1, 2, img, 3, _(graph_name[i]), -1); #else GdkPixbuf * pix = gtk_image_get_pixbuf(img); gtk_tree_store_set (tool_model, & calc_level, 0, -1, 1, -1, 2, pix, 3, _(graph_name[i]), -1); #endif gtk_image_clear (img); if (active_project) { if (active_project -> analysis) { if (active_project -> analysis[i]) { if (active_project -> analysis[i] -> numc > 0 && active_project -> analysis[i] -> calc_ok) { for (j=0; j analysis[i] -> numc; j++) { if (active_project -> analysis[i] -> curves[j] -> name && active_project -> analysis[i] -> curves[j] -> ndata) { gtk_tree_store_append (tool_model, & curve_level, & calc_level); status = FALSE; str = g_strdup_printf ("%s", active_project -> analysis[i] -> curves[j] -> name); if (active_project -> analysis[i] -> curves[j] -> window != NULL) { if (GTK_IS_WIDGET(active_project -> analysis[i] -> curves[j] -> window)) { if (gtk_widget_get_visible(active_project -> analysis[i] -> curves[j] -> window)) status = TRUE; } } gtk_tree_store_set (tool_model, & curve_level, 0, i, 1, j, 3, str, 4, status, -1); g_free (str); } } } } } } } } } /* void tool_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show/hide and sensitive/not a GtkCellRenderer \param col the column \param renderer the cell renderer \param mod the model \param iter the iter \param data the associated data pointer */ void tool_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & j, -1); gboolean vis = ((j < 0 && i == 2) || (j > -1 && i == 0)) ? FALSE : TRUE; gtk_cell_renderer_set_visible (renderer, vis); if (! active_project) { gtk_cell_renderer_set_sensitive (renderer, FALSE); } else if (j > -1 && active_project -> analysis) { if (active_project -> analysis[j]) { if (active_project -> analysis[j] -> numc) { gtk_tree_model_get (mod, iter, 1, & k, -1); if (active_project) gtk_cell_renderer_set_sensitive (renderer, active_project -> analysis[j] -> curves[k] -> ndata); if (i == 1) { set_renderer_markup (mod, iter, renderer, 3); } } } } else { gtk_cell_renderer_set_sensitive (renderer, TRUE); } } /*! \fn void adjust_tool_model (int calc, int curve, gchar * string_path) \brief adjust the content of the tool box tree model \param calc the calculation \param curve the curve \param string_path the path in the tree view */ void adjust_tool_model (int calc, int curve, gchar * string_path) { GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(tool_model), & iter, path); if (calc == SPH || calc == MSD) { int i, j; gtk_tree_model_get (GTK_TREE_MODEL(tool_model), & iter, 0, & i, -1); gtk_tree_model_get (GTK_TREE_MODEL(tool_model), & iter, 1, & j, -1); if (i == calc && j == curve) gtk_tree_store_set (tool_model, & iter, 4, 0, -1); } else { gtk_tree_store_set (tool_model, & iter, 4, 0, -1); } } /*! \fn G_MODULE_EXPORT void toggle_show_hide_curve (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief To show/hide a curve by clicking in the tree view \param cell_renderer the renderer toggled \param string_path the path in the tree view \param data the associated data pointer */ G_MODULE_EXPORT void toggle_show_hide_curve (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, j, k; GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(tool_model), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(tool_model), & iter, 0, & i, -1); gtk_tree_model_get (GTK_TREE_MODEL(tool_model), & iter, 1, & j, -1); gtk_tree_model_get (GTK_TREE_MODEL(tool_model), & iter, 4, & k, -1); #ifdef DEBUG // g_debug ("Show curve:: i= %d, j= %d, k= %d", i, j, k); #endif // DEBUG if (! k) { if (active_project -> analysis[i] -> curves[j] -> window == NULL) { active_project -> analysis[i] -> curves[j] -> window = create_curve (& active_project -> analysis[i] -> idcc[j]); active_project -> analysis[i] -> curves[j] -> path = g_strdup_printf ("%s", string_path); } show_the_widgets (active_project -> analysis[i] -> curves[j] -> window); } else { if (active_project -> analysis[i] -> curves[j] -> window != NULL) { hide_the_widgets (active_project -> analysis[i] -> curves[j] -> window); } } gtk_tree_store_set (tool_model, & iter, 4, ! k, -1); } /*! \fn GtkWidget * create_tool_tree () \brief create the toolbox tree view */ GtkWidget * create_tool_tree () { GtkTreeViewColumn * tool_col[3]; GtkCellRenderer * tool_cell[3]; gchar * ctitle[3]={i18n("Logo"), i18n("Name"), i18n("Button")}; gchar * ctype[3]={"pixbuf", "text", "active"}; GType coltype[5]= {G_TYPE_INT, G_TYPE_INT, G_TYPE_OBJECT, G_TYPE_STRING, G_TYPE_BOOLEAN}; tool_model = gtk_tree_store_newv (5, coltype); int i; fill_tool_model (); tool_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(tool_model)); for (i=0; i<3; i++) { switch (i) { case 0: tool_cell[i] = gtk_cell_renderer_pixbuf_new (); break; case 1: tool_cell[i] = gtk_cell_renderer_text_new (); break; case 2: tool_cell[i] = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(tool_cell[i]), "toggled", G_CALLBACK(toggle_show_hide_curve), NULL); break; } tool_col[i] = gtk_tree_view_column_new_with_attributes (_(ctitle[i]), tool_cell[i], ctype[i], i+2, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(tool_tree), tool_col[i]); gtk_tree_view_column_set_alignment (tool_col[i], 0.5); // if (i == 1) gtk_tree_view_column_set_attributes (tool_col[i], tool_cell[i], "markup", 3, NULL); gtk_tree_view_column_set_cell_data_func (tool_col[i], tool_cell[i], tool_set_visible, GINT_TO_POINTER(i), NULL); } gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(tool_tree), FALSE); return tool_tree; } /*! \fn GtkWidget * create_curve_tool_box () \brief create the curve tool box window */ GtkWidget * create_curve_tool_box () { GtkWidget * ctbox; ctbox = create_win (_("Toolboxes"), MainWindow, FALSE, FALSE); #ifdef GTK4 gtk_widget_set_size_request (ctbox, 300, 250); #else gtk_widget_set_size_request (ctbox, 300, 320); #endif // New calculation icon to be added here tool_scroll = create_scroll (NULL, -1, -1, GTK_SHADOW_NONE); add_container_child (CONTAINER_SCR, tool_scroll, create_tool_tree ()); add_container_child (CONTAINER_WIN, ctbox, tool_scroll); show_the_widgets (tool_scroll); add_gtk_close_event (ctbox, G_CALLBACK(hide_this_window), NULL); return (ctbox); } atomes_1.3.1/src/gui/spcall.c0000664000175000017500000001774515212624223015520 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file spcall.c * @short Callbacks for the spherical harmonics calculation dialog * @author Sébastien Le Roux */ /* * This file: 'spcall.c' * * Contains: * - The callbacks for the spherical harmonics calculation dialog * * List of functions: void init_sph (project * this_proj, int opening); void update_spherical_view (project * this_proj); G_MODULE_EXPORT void on_calc_sph_released (GtkWidget * widg, gpointer data); */ #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" extern void alloc_analysis_curves (int pid, atomes_analysis * this_analysis); extern gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb); extern int update_voisj_and_contj (); /*! \fn void init_sph (project * this_proj, int opening) \brief initialize the curve widgets for the spherical harmonics \param this_proj the target project \param opening opening project file 1, otherwise 0 */ void init_sph (project * this_proj, int opening) { int i, j, k; gchar * env; if (! opening) { this_proj -> analysis[SPH] -> numc = this_proj -> nspec; for (i=0; i nspec; i++) { this_proj -> analysis[SPH] -> numc += this_proj -> coord -> ntg[1][i]; } } alloc_analysis_curves (this_proj -> id, this_proj -> analysis[SPH]); if (! opening) { j = 0; for (i = 0 ; i < this_proj -> nspec ; i++) { this_proj -> analysis[SPH] -> curves[i+j] -> name = g_strdup_printf("Q(l) [%s] (l=0 -> %d)", this_proj -> chemistry -> label[i], this_proj -> analysis[SPH] -> num_delta); j += this_proj -> coord -> ntg[1][i]; } k = 1; for (i=0 ; i < this_proj -> nspec; i++) { for (j=0 ; j < this_proj -> coord -> ntg[1][i]; j++) { env = env_name (this_proj, j, i, 1, NULL); this_proj -> analysis[SPH] -> curves[j+k] -> name = g_strdup_printf("Q(l) %s (l=0 -> %d)", exact_name(env), this_proj -> analysis[SPH] -> num_delta); g_free (env); } k += this_proj -> coord -> ntg[1][i]+1; } } add_curve_widgets (this_proj, SPH); this_proj -> analysis[SPH] -> init_ok = (opening) ? FALSE : TRUE; } /*! \fn void update_spherical_view (project * this_proj) \brief update the text view for spherical harmonics \param this_proj the target project */ void update_spherical_view (project * this_proj) { int i, j, k, l, m; gchar * str; gchar * tab; gchar * cid; if (this_proj -> analysis[SPH] -> calc_buffer == NULL) this_proj -> analysis[SPH] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> analysis[SPH] -> calc_buffer); print_info (_("\n\nSpherical harmonics\n\n"), "heading", this_proj -> analysis[SPH] -> calc_buffer); m = 0; for (i=0; i nspec; i++) { print_info (_("\nResults for the "), NULL, this_proj -> analysis[SPH] -> calc_buffer); print_info (exact_name(active_chem -> label[i]), textcolor(i), this_proj -> analysis[SPH] -> calc_buffer); print_info (_(" atoms: \n\n"), NULL, this_proj -> analysis[SPH] -> calc_buffer); // Here print average spec info print_info ("\tl\t", "bold_italic", this_proj -> analysis[SPH] -> calc_buffer); print_info ("Q(","bold", this_proj -> analysis[SPH] -> calc_buffer); print_info ("l", "bold_italic", this_proj -> analysis[SPH] -> calc_buffer); print_info (")","bold", this_proj -> analysis[SPH] -> calc_buffer); print_info (active_chem -> label[i], textcolor(i), this_proj -> analysis[SPH] -> calc_buffer); print_info (_("[All]"), "bold", this_proj -> analysis[SPH] -> calc_buffer); for (j=0 ; j < active_coord -> ntg[1][i]; j++) { print_info ("\tQ(","bold", this_proj -> analysis[SPH] -> calc_buffer); print_info ("l", "bold_italic", this_proj -> analysis[SPH] -> calc_buffer); print_info (")","bold", this_proj -> analysis[SPH] -> calc_buffer); env_name (this_proj, j, i, 1, this_proj -> analysis[SPH] -> calc_buffer); } print_info ("\n", NULL, this_proj -> analysis[SPH] -> calc_buffer); k = 1; tab = NULL; cid = NULL; for (j=0; j analysis[SPH] -> num_delta/2+1 ; j++) { k ++; if (k - 2*(k/2) == 0) { tab = g_strdup_printf ("grey_back"); cid = g_strdup_printf ("bold_grey_back"); } else { tab = NULL; cid = g_strdup_printf ("bold"); } print_info ("\t", NULL, this_proj -> analysis[SPH] -> calc_buffer); if (j < 5) { print_info (" ",cid, this_proj -> analysis[SPH] -> calc_buffer); } str = g_strdup_printf("%d", 2*j); print_info (str, cid, this_proj -> analysis[SPH] -> calc_buffer); g_free (str); for (l=0; l ntg[1][i]+1; l++) { str = g_strdup_printf("\t%f", this_proj -> analysis[SPH] -> curves[l+m] -> data[1][j]); print_info (str, tab, this_proj -> analysis[SPH] -> calc_buffer); g_free (str); } print_info ("\n", NULL, this_proj -> analysis[SPH] -> calc_buffer); if (tab != NULL) { g_free (tab); } if (cid != NULL) { g_free (cid); } } m += active_coord -> ntg[1][i]+1; } print_info (calculation_time(TRUE, this_proj -> analysis[SPH] -> calc_time), NULL, this_proj -> analysis[SPH] -> calc_buffer); } /*! \fn G_MODULE_EXPORT void on_calc_sph_released (GtkWidget * widg, gpointer data) \brief compute spherical harmonics \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_sph_released (GtkWidget * widg, gpointer data) { int i, j, k, l, m; int err_update = 1; if (! active_project -> analysis[SPH] -> init_ok) init_sph (active_project, 0); if (! active_project -> dmtx) { active_project -> dmtx = run_distance_matrix (widg, 0, 0); } else { err_update = update_voisj_and_contj (); } if (! err_update) { show_error (_("Impossible to update FORTRAN data"), 0, (widg) ? widg : MainWindow); } else if (! active_project -> dmtx) { show_error (_("The nearest neighbors table calculation has failed"), 0, widg); } else { clean_curves_data (SPH, 0, active_project -> analysis[SPH] -> numc); prepostcalc (widg, FALSE, SPH, 0, opac); k = 0; l = active_project -> nspec; m = active_project -> analysis[SPH] -> num_delta; for (i=0; i nspec; i++) { for (j=0; j< active_coord -> ntg[1][i]; j++) { if (j==0) k ++; l += sphericals_ (& m, & i, & j, & k, active_coord -> partial_geo[i][j]); k ++; } } if (l != active_project -> analysis[SPH] -> numc) { i = 0; } else { i = 1; } prepostcalc (widg, TRUE, SPH, i, 1.0); if (! i) { show_error (_("Unexpected error when analyzing the spherical harmonics"), 0, widg); } else { update_spherical_view (active_project); show_the_widgets (curvetoolbox); } } free_contj_voisj_ (); fill_tool_model (); } atomes_1.3.1/src/gui/chainscall.c0000664000175000017500000003217315212624223016333 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file chainscall.c * @short Callbacks for the chains statistics calculation dialog * @author Sébastien Le Roux */ /* * This file: 'chainscall.c' * * Contains: * - The callbacks for the chains statistics calculation dialog * * List of functions: void init_chain (project * this_proj); void update_chains_menus (glwin * view); void update_chains_view (project * this_proj); void clean_chains_data (glwin * view); G_MODULE_EXPORT void on_calc_chains_released (GtkWidget * widg, gpointer data); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" #include "initcoord.h" #include "submenus.h" extern gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb); extern int update_voisj_and_contj (); extern void clean_coord_window (project * this_proj); /*! \fn void init_chain (project * this_proj) \brief initialize the curve widgets for the chains statistics calculation \param this_proj the target project */ void init_chain (project * this_proj) { int i; this_proj -> analysis[CHA] -> curves[0] -> name = g_strdup_printf (_("Chains - Cc(n)[All]")); for (i=0 ; i nspec ; i++) { this_proj -> analysis[CHA] -> curves[i+1] -> name = g_strdup_printf (_("Chains - Cc(n)[%s]"), active_chem -> label[i]); } add_curve_widgets (this_proj, CHA); this_proj -> analysis[CHA] -> init_ok = TRUE; } #ifdef GTK3 /*! \fn void update_chains_menus (glwin * view) \brief update the chains statistics menus \param view the gliwn to update the menu from */ void update_chains_menus (glwin * view) { GtkWidget * menu; view -> ogl_chains[0] = destroy_this_widget (view -> ogl_chains[0]); view -> ogl_chains[0] = menu_item_new_with_submenu (_("Chain(s)"), view -> chains, add_menu_coord (view, 0, 9)); menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (view -> ogl_coord[0])); if (GTK_IS_WIDGET(menu)) { gtk_menu_shell_insert (GTK_MENU_SHELL(menu), view -> ogl_chains[0], 3); show_the_widgets (view -> ogl_chains[0]); } } #endif /*! \fn void update_chains_view (project * this_proj) \brief update the chains statistics text view after the calculation \param this_proj the target project */ void update_chains_view (project * this_proj) { int i, j, k, l; gchar * nelt; gchar * col; gchar * tab; gchar * cid; gchar * str; if (this_proj -> analysis[CHA] -> calc_buffer == NULL) this_proj -> analysis[CHA] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> analysis[CHA] -> calc_buffer); j = this_proj -> csparam[0]; if (! j) { nelt = g_strdup_printf (_("All")); col = NULL; } else { nelt = g_strdup_printf ("%s", this_proj -> chemistry -> label[j-1]); col = g_strdup_printf("%s", textcolor(j-1)); } print_info (_("\n\nChain statistics\n\n"), "heading", this_proj -> analysis[CHA] -> calc_buffer); if (this_proj -> csparam[1]) { print_info (_(" * only AAAA chains have been considered\n"), "italic", this_proj -> analysis[CHA] -> calc_buffer); } if (this_proj -> csparam[2]) { print_info (_(" * only ABAB chains have been considered\n"), "italic", this_proj -> analysis[CHA] -> calc_buffer); } if (this_proj -> csparam[3]) { print_info (_(" * homopolar bonds can not shorten the chains\n"), "italic", this_proj -> analysis[CHA] -> calc_buffer); } if (this_proj -> csparam[4]) { print_info (_(" * only 1-(2)"), "italic", this_proj -> analysis[CHA] -> calc_buffer); print_info ("n", "sub_italic", this_proj -> analysis[CHA] -> calc_buffer); print_info (_("-1 chains have been considered, ie. isolated chains\n"), "italic", this_proj -> analysis[CHA] -> calc_buffer); } print_info (_("\n Atom(s) used to start the search: "), NULL, this_proj -> analysis[CHA] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[CHA] -> calc_buffer); if (j != 0) print_info (_(" atom(s) only"), NULL, this_proj -> analysis[CHA] -> calc_buffer); if (this_proj -> steps > 1) { print_info (_("\n Average number of chains per configuration: "), NULL, this_proj -> analysis[CHA] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> csdata[0]); print_info (str, "bold", this_proj -> analysis[CHA] -> calc_buffer); g_free (str); str = g_strdup_printf (" +/- %f\n", this_proj -> csdata[1]); print_info (str, "bold", this_proj -> analysis[CHA] -> calc_buffer); g_free (str); } else { print_info (_("\n Total number of chains: "), NULL, this_proj -> analysis[CHA] -> calc_buffer); str = g_strdup_printf ("%f\n", this_proj -> csdata[0]); print_info (str, "bold", this_proj -> analysis[CHA] -> calc_buffer); g_free (str); } if (this_proj -> steps > 1) { print_info (_("\n\t n Av. by step \tC"), "bold", this_proj -> analysis[CHA] -> calc_buffer); print_info ("c", "sub_bold", this_proj -> analysis[CHA] -> calc_buffer); print_info ("(n)[", "bold", this_proj -> analysis[CHA] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[CHA] -> calc_buffer); if (j == this_proj -> nspec) { print_info ("]\t +/-\n", "bold", this_proj -> analysis[CHA] -> calc_buffer); } else { print_info ("]\t +/-\n", "bold", this_proj -> analysis[CHA] -> calc_buffer); } } else { print_info (_("\n\t n\tNumber\t\tC"), "bold", this_proj -> analysis[CHA] -> calc_buffer); print_info ("c", "sub_bold", this_proj -> analysis[CHA] -> calc_buffer); print_info ("(n)[", "bold", this_proj -> analysis[CHA] -> calc_buffer); print_info (nelt, col, this_proj -> analysis[CHA] -> calc_buffer); print_info ("]\n", NULL, this_proj -> analysis[CHA] -> calc_buffer); } tab = NULL; cid = NULL; k = this_proj -> csparam[0]; l = (! k) ? this_proj -> natomes : this_proj -> chemistry -> nsps[k-1]; j = 1; for ( i=1 ; i < this_proj -> csparam[5] ; i++ ) { if (this_proj -> analysis[CHA] -> curves[k] -> data[1][i] != 0.0) { j ++; if (j - 2*(j/2) == 0) { tab = g_strdup_printf ("grey_back"); cid = g_strdup_printf ("bold_grey_back"); } else { tab = NULL; cid = g_strdup_printf ("bold"); } print_info ("\t", NULL, this_proj -> analysis[CHA] -> calc_buffer); if (i < 9) { print_info (" ",cid, this_proj -> analysis[CHA] -> calc_buffer); } str = g_strdup_printf("%d", i+1); print_info (str, cid, this_proj -> analysis[CHA] -> calc_buffer); g_free (str); str = g_strdup_printf("\t%f\t", l*this_proj -> analysis[CHA] -> curves[k] -> data[1][i]); print_info (str, tab, this_proj -> analysis[CHA] -> calc_buffer); g_free (str); str = g_strdup_printf("%f\t", this_proj -> analysis[CHA] -> curves[k] -> data[1][i]); print_info (str, tab, this_proj -> analysis[CHA] -> calc_buffer); g_free (str); if (this_proj -> steps > 1) { str = g_strdup_printf("%f\t", this_proj -> analysis[CHA] -> curves[k] -> err[i]); print_info (str, tab, this_proj -> analysis[CHA] -> calc_buffer); g_free (str); } print_info ("\n", NULL, this_proj -> analysis[CHA] -> calc_buffer); if (tab != NULL) { g_free (tab); } if (cid != NULL) { g_free (cid); } } } print_info (calculation_time(TRUE, this_proj -> analysis[CHA] -> calc_time), NULL, this_proj -> analysis[CHA] -> calc_buffer); g_free (nelt); if (col != NULL) { g_free (col); } } /*! \fn void clean_chains_data (glwin * view) \brief cleaning the OpenGL data related to chain statistics \param view the gliwn to clean the data from */ void clean_chains_data (glwin * view) { project * this_proj = get_project_by_id(view -> proj); if (this_proj -> coord -> totcoord[9]) { if (this_proj -> coord -> ntg[9]) g_free (this_proj -> coord -> ntg[9]); this_proj -> coord -> ntg[9] = NULL; if (this_proj -> coord -> geolist[9][0]) g_free (this_proj -> coord -> geolist[9][0]); this_proj -> coord -> geolist[9][0] = NULL; this_proj -> coord -> totcoord[9] = 0; } if (view -> all_chains) g_free (view -> all_chains); view -> all_chains = NULL; if (view -> num_chains) g_free (view -> num_chains); view -> num_chains = NULL; if (view -> gcid[9]) g_free (view -> gcid[9]); view -> gcid[9] = NULL; view -> chains = FALSE; view -> chain_max = 0; int i, j; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (this_proj -> atoms[i][j].chain) { g_free (this_proj -> atoms[i][j].chain); this_proj -> atoms[i][j].chain = NULL; } } } } /*! \fn G_MODULE_EXPORT void on_calc_chains_released (GtkWidget * widg, gpointer data) \brief compute chains statistics \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_chains_released (GtkWidget * widg, gpointer data) { int j, k; cutoffsend (); //if (active_project -> steps > 1) statusb = 1; if (! active_project -> analysis[CHA] -> init_ok) init_chain (active_project); active_project -> csparam[6] = 0; if (! run_distance_matrix (widg, 6, 0)) { show_error (_("The nearest neighbors table calculation has failed"), 0, widg); } else { clean_curves_data (CHA, active_project -> csparam[0], active_project -> csparam[0]+1); clean_chains_data (active_glwin); active_glwin -> all_chains = g_malloc0(active_project -> steps*sizeof*active_glwin -> all_chains); active_glwin -> num_chains = g_malloc0(active_project -> steps*sizeof*active_glwin -> num_chains); for (j=0; j steps; j++) { active_glwin -> all_chains[j] = g_malloc0(active_project -> csparam[5]*sizeof*active_glwin -> all_chains[j]); active_glwin -> num_chains[j] = allocint (active_project -> csparam[5]); for (k=0; k < active_project -> natomes; k++) { if (active_project -> atoms[j][k].chain) g_free (active_project -> atoms[j][k].chain); active_project -> atoms[j][k].chain = NULL; active_project -> atoms[j][k].chain = g_malloc0(active_project -> csparam[5]*sizeof*active_project -> atoms[j][k].chain); } } k = 1; prepostcalc (widg, FALSE, CHA, 0, opac); j = initchains_ (& active_project -> csparam[0], & active_project -> csparam[1], & active_project -> csparam[2], & active_project -> csparam[3], & active_project -> csparam[4], & active_project -> csparam[5], & active_project -> csearch); prepostcalc (widg, TRUE, CHA, (j == 1) ? 1 : 0, 1.0); if (j == 0) { show_error (_("The chain statistics calculation has failed"), 0, widg); } else if (j == 2) { gchar * str = g_strdup_printf (_("\tThe chain statistics have failed !\n\n" "The number of chain per MD step appears\n" "to be bigger than the initial value of %d\n" "used to allocate memory to store the results.\n\n" "Increase the value and start again !"), active_project -> csearch); show_error (str, 0, widg); g_free (str); j = 0; } } if (j == 1) { active_project -> csparam[6] = 1; active_glwin -> chains = TRUE; active_glwin -> chain_max = active_project -> csparam[5]; update_chains_view (active_project); } show_the_widgets (curvetoolbox); clean_coord_window (active_project); fill_tool_model (); free_contj_voisj_ (); #ifdef GTK3 update_chains_menus (active_glwin); #endif } /*! \fn void save_chains_data_ (int * taille, double ectrc[*taille], double * rpstep, double * ectrpst) \brief get chains statistics results form Fortran90 \param taille number of data points \param ectrc standard deviation per MD step \param rpstep chains per MD step \param ectrpst standard deviation */ void save_chains_data_ (int * taille, double ectrc[* taille], double * rpstep, double * ectrpst) { int i; active_project -> csdata[0] = * rpstep; active_project -> csdata[1] = * ectrpst; i = active_project -> csparam[0]; active_project -> analysis[CHA] -> curves[i] -> err = duplicate_double (* taille, ectrc); } atomes_1.3.1/src/gui/interface.c0000664000175000017500000011202115212624223016161 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file interface.c * @short General messaging functions * @author Sébastien Le Roux */ /* * This file: 'interface.c' * * Contains: * - General messaging functions * * List of functions: int dummy_ask_ (char * question); int iask (char * question, char * lab, int id, GtkWidget * win); gboolean ask_yes_no (gchar * title, gchar * text, int type, GtkWidget * widg); G_MODULE_EXPORT gboolean leaving_question (GtkWindow * widget, gpointer data); G_MODULE_EXPORT gboolean leaving_question (GtkWidget * widget, GdkEvent * event, gpointer data); gchar * exact_name (gchar * name); gchar * cask (char * question, char * lab, int id, char * old, GtkWidget * win); gchar * textcolor (int i); gchar * env_name (project * this_proj, int g, int s, int f, GtkTextBuffer * buffer); void show_web (GtkWidget * dialog, int id); void show_info (char * information, int val, GtkWidget * win); void show_warning (char * warning, GtkWidget * win); void show_warning_ (char * warning, char * sub, char * tab); void show_error (char * error, int val, GtkWidget * win); void show_error_with_trace (gchar * error, atomes_error * this_error, int act, int val, GtkWidget * win); void show_error_ (char * error, char * sub, char * tab); void init_data_ (int * nats, int * nspc, int * stps, int * cid); void print_info (gchar * str, gchar * stag, GtkTextBuffer * buffer); void lattice_info_ (int * bid, double * volume, double * density, double dvects[3][3], double rvects[3][3], double mod[3], double ang[3], double f_to_c[3][3], double c_to_f[3][3]); void send_chem_info_ (int prop[active_project -> nspec]); void update_after_calc (int calc); G_MODULE_EXPORT void create_about_dialog (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void run_yes_no (GtkDialog * dial, gint response_id, gpointer data); G_MODULE_EXPORT void on_answer_changed (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void run_iask (GtkDialog * iask, gint response_id, gpointer data); G_MODULE_EXPORT void run_cask (GtkDialog * cask, gint response_id, gpointer data); GtkWidget * addweb (int id); GtkWidget * show_pop (char * pop, GtkWidget * pwin); */ #include "global.h" #include "bind.h" #include "callbacks.h" #include "project.h" #include "curve.h" #include "affero.h" extern gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); GtkWidget * answer; /* Old version to make url/email in about dialog clickable */ /* void about_dialog_handle_url (GtkAboutDialog * dialog, const gchar * link, gpointer data) { GtkWidget * error_dialog; gchar * url, * escaped; g_return_if_fail (GTK_IS_ABOUT_DIALOG (dialog)); g_return_if_fail (link != NULL); / * simple check if this is an email address * / if (! g_str_has_prefix (link, "mailto:") && strchr (link, '@') != NULL) { escaped = g_uri_escape_string (link, NULL, FALSE); url = g_strdup_printf ("mailto:%s", escaped); g_free (escaped); } else { url = g_strdup_printf ("%s", link); } #ifdef G_OS_WIN32 HINSTANCE h; h = ShellExecute (NULL, "open", url, NULL, NULL, SW_SHOWNORMAL); if ((int)h <= 32) #else #ifdef GTK4 // gtk_show_uri (GTK_WINDOW (dialog), url, gtk_event_controller_get_current_event_time ( , )); #else GError * error = NULL; gtk_show_uri_on_window (GTK_WINDOW (dialog), url, gtk_get_current_event_time (), & error); if (error != NULL) #endif #endif { gchar * uri = g_strdup_printf (_("Failed to open link:\n%s"), url); error_dialog = gtk_message_dialog_new (GTK_WINDOW (dialog), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Impossible to open link: ")); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", uri); run_this_gtk_dialog (error_dialog, G_CALLBACK(run_destroy_dialog), NULL); g_free (uri); } g_free (url); } */ /*! \fn GtkWidget * addweb (int id) \brief create a widget to present \param id Add contact info (1) or not (0) */ GtkWidget * addweb (int id) { GtkWidget * web; const gchar * contact = i18n(" Please contact me at:\n"); const gchar * seb = " Dr. Sébastien Le Roux "; GtkWidget * eseb; GtkWidget * vbox; GtkWidget * hbox; const gchar * or = i18n("\n Or check the website for information\n"); if (id) { web = gtk_link_button_new_with_label (ATOMES_URL, _("Visit the project's website")); } gchar * mailto = g_strdup_printf ("mailo:%s", PACKAGE_BUGREPORT); gchar * mailsh = g_strdup_printf ("<%s>",PACKAGE_BUGREPORT); eseb = gtk_link_button_new_with_label (mailto, mailsh); g_free (mailto); g_free (mailsh); vbox = create_vbox (BSEP); if (id) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_label_new (_(contact)), FALSE, FALSE, 0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new (seb), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, eseb, FALSE, FALSE, 0); if (id) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_label_new (_(or)), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, web, FALSE, FALSE, 0); } return (vbox); } /*! \fn G_MODULE_EXPORT void create_about_dialog (GtkWidget * widg, gpointer data) \brief create the about dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void create_about_dialog (GtkWidget * widg, gpointer data) { GtkWidget * aboutdialog; #ifdef GTK4 GdkPaintable * atomes_logo = gtk_image_get_paintable (GTK_IMAGE(gtk_image_new_from_file(PACKAGE_LAGPL))); #else GdkPixbuf * atomes_logo = gdk_pixbuf_new_from_file (PACKAGE_LAGPL, NULL); #endif gchar * str; const gchar * authors[] = {"Dr. Sébastien Le Roux ", "", NULL}; /*"Collaborations:", "", "Dr. Noël Jakse : dynamic structure factor", NULL}; */ const gchar * weblabel = "https://atomes.ipcms.fr"; const gchar * comments = i18n("Visualization, analyzis, creation/edition and post-processing of atomic scale models !"); const gchar * copyrights = "Copyright © 2026 \nDr. Sébastien Le Roux"; // gtk_about_dialog_set_url_hook (about_dialog_handle_url, NULL, NULL); // gtk_about_dialog_set_email_hook (about_dialog_handle_url, NULL, NULL); aboutdialog = gtk_about_dialog_new (); gtk_about_dialog_set_logo (GTK_ABOUT_DIALOG(aboutdialog), atomes_logo); gtk_about_dialog_set_version (GTK_ABOUT_DIALOG(aboutdialog), VERSION); str = g_strdup_printf ("%s", PACKAGE); gtk_about_dialog_set_program_name (GTK_ABOUT_DIALOG(aboutdialog), str); g_free (str); gtk_about_dialog_set_comments (GTK_ABOUT_DIALOG(aboutdialog), _(comments)); gtk_about_dialog_set_website (GTK_ABOUT_DIALOG(aboutdialog), g_strdup_printf("%s", ATOMES_URL)); gtk_about_dialog_set_website_label (GTK_ABOUT_DIALOG(aboutdialog), weblabel); gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG(aboutdialog), authors); gtk_about_dialog_set_copyright (GTK_ABOUT_DIALOG(aboutdialog), copyrights); gtk_about_dialog_set_license (GTK_ABOUT_DIALOG(aboutdialog), affero_license); gtk_about_dialog_set_license_type (GTK_ABOUT_DIALOG(aboutdialog), GTK_LICENSE_CUSTOM); gtk_about_dialog_set_wrap_license (GTK_ABOUT_DIALOG(aboutdialog), FALSE); run_this_gtk_dialog (aboutdialog, G_CALLBACK(destroy_this_dialog), NULL); } /*! \fn void show_web (GtkWidget * dialog, int id) \brief add / show web information to widget \param dialog the GtkWidget to modify \param id Add contact info (1) or not (0) */ void show_web (GtkWidget * dialog, int id) { GtkWidget * box = dialog_get_content_area (dialog); GtkWidget * theweb = addweb (id); show_the_widgets (theweb); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, theweb, FALSE, FALSE, 0); show_the_widgets (box); } /*! \fn void show_info (char * information, int val, GtkWidget * win) \brief add / show information message to widget \param information Message \param val Add contact info (1) or not (0) \param win the GtkWidget to modify */ void show_info (char * information, int val, GtkWidget * win) { gchar * info=NULL; if (val < 0) { info = g_strdup_printf ("%s\n%s", information, ifbug); } else { info = g_strdup_printf ("%s", information); } GtkWidget * dialog = message_dialogmodal (info, _("Information"), GTK_MESSAGE_INFO, GTK_BUTTONS_OK, win); if (val != 0) show_web (dialog, (val < 0) ? 0 : val); run_this_gtk_dialog (dialog, G_CALLBACK(run_destroy_dialog), NULL); g_free (info); } /*! \fn void show_warning (char * warning, GtkWidget * win) \brief show warning \param warning Message \param win Parent GtkWidget, if any */ void show_warning (char * warning, GtkWidget * win) { GtkWidget * dialog = message_dialogmodal (warning, _("Warning"), GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, win); run_this_gtk_dialog (dialog, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn void show_warning_ (char * warning, char * sub, char * tab) \brief show warning from Fortran90 \param warning Message \param sub Fortan90 subroutine \param tab Fortran90 pointer */ void show_warning_ (char * warning, char * sub, char * tab) { /* This function is called from fortran 90 */ gchar * wtot=NULL; wtot = g_strdup_printf ("%s\n%s\n%s", warning, sub, tab); show_warning (wtot, MainWindow); g_free (wtot); } /*! \fn void show_error (char * error, int val, GtkWidget * win) \brief show error message \param error the error message \param val Add contact info (1) or not (0) \param win Parent GtkWidget, if any */ void show_error (char * error, int val, GtkWidget * win) { gchar * etot=NULL; if (val) { etot = g_strdup_printf ("%s", error); } else { etot = g_strdup_printf ("%s\n%s", error, ifbug); } GtkWidget * dialog = message_dialogmodal (etot, _("Error"), GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, win); show_web (dialog, val); g_warning ("%s", etot); run_this_gtk_dialog (dialog, G_CALLBACK(run_destroy_dialog), NULL); g_free (etot); } /*! \fn void show_error_with_trace (gchar * error, atomes_error * this_error, int act, int val, GtkWidget * win) \brief show error message \param error the error message \param back_trace Backtrace of the error \param act runtime action \param val Add contact info (1) or not (0) \param win Parent GtkWidget, if any */ void show_error_with_trace (gchar * error, atomes_error * this_error, int act, int val, GtkWidget * win) { GtkWidget * dialog = message_dialogmodal (error, _("Error"), GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, win); GtkWidget * exp_trace = create_expander (_("Details"), NULL); gchar * trace; if (this_error -> error_trace) { trace = g_strdup_printf (_("\n\tError %s %s, at:\n" "\t\tFile : %s\n" "\t\tFunction: %s()\n" "\t\tLine : %d\n\n" "\tBacktrace:\n%s\t\t →\t\t call to\t%s()\n"), (! act) ? _("reading") : _("saving"), _(this_error -> error_signal.message), this_error -> error_file, this_error -> error_func, this_error -> error_line, this_error -> error_trace, this_error -> error_func); } else { trace = g_strdup_printf (_("\n\tError %s %s, at:\n" "\t\tFile : %s\n" "\t\tFunction: %s()\n" "\t\tLine : %d\n"), (! act) ? _("reading") : _("saving"), _(this_error -> error_signal.message), this_error -> error_file, this_error -> error_func, this_error -> error_line); } GtkWidget * trace_label = markup_label (trace, -1, -1, 0.0, 0.5); gtk_label_set_selectable(GTK_LABEL(trace_label), TRUE); g_free (trace); add_container_child (CONTAINER_EXP, exp_trace, trace_label); GtkWidget * content_area = gtk_message_dialog_get_message_area(GTK_MESSAGE_DIALOG(dialog)); add_box_child_start (GTK_ORIENTATION_VERTICAL, content_area, exp_trace, FALSE, FALSE, 0); if (! val) { add_box_child_start (GTK_ORIENTATION_VERTICAL, content_area, markup_label (_(ifbug), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } show_web (dialog, val); g_warning ("%s", error); run_this_gtk_dialog (dialog, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn void show_error_ (char * error, char * sub, char * tab) \brief show error from Fortran90 \param error Message \param sub Fortan90 subroutine \param tab Fortran90 pointer */ void show_error_ (char * error, char * sub, char * tab) { /* This function is called from fortran 90 */ gchar * etot=NULL; etot = g_strdup_printf ("%s\n\t%s\n\t%s", error, sub, tab); show_error (etot, 0, MainWindow); g_free (etot); } gboolean res_yes_no; /*! \fn G_MODULE_EXPORT void run_yes_no (GtkDialog * dial, gint response_id, gpointer data) \brief ask yes or no for something: running dialog \param dial the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_yes_no (GtkDialog * dial, gint response_id, gpointer data) { res_yes_no = (response_id == GTK_RESPONSE_YES) ? TRUE : FALSE; destroy_this_dialog (dial); } /*! \fn gboolean ask_yes_no (gchar * title, gchar * text, int type, GtkWidget * widg) \brief ask yes or no for something: prepare dialog \param title Title \param text Message \param type the type of message window \param widg the parent GtkWidget, if any */ gboolean ask_yes_no (gchar * title, gchar * text, int type, GtkWidget * widg) { GtkWidget * dialog = message_dialogmodal (text, title, type, GTK_BUTTONS_YES_NO, widg); run_this_gtk_dialog (dialog, G_CALLBACK(run_yes_no), NULL); return res_yes_no; } /*! \fn gchar * exact_name (gchar * name) \brief short cut to print string without spaces \param name the initial string */ gchar * exact_name (gchar * name) { return g_strdup_printf("%s", substitute_string (name, " ", NULL)); } /*! \fn GtkWidget * show_pop (char * pop, GtkWidget * pwin) \brief display pop information window \param pop Message \param pwin Parent widget, if any */ GtkWidget * show_pop (char * pop, GtkWidget * pwin) { GtkWidget * wpop = create_win (_("Information"), pwin, TRUE, FALSE); gtk_widget_set_size_request (wpop, 600, 80); #ifdef GTK3 gtk_window_set_position (GTK_WINDOW (wpop), GTK_WIN_POS_CENTER); #endif GtkWidget * hpop = create_hbox (0); add_container_child (CONTAINER_WIN, wpop, hpop); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hpop, stock_image(EXECUTE), TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hpop, gtk_label_new (pop), TRUE, TRUE, 0); show_the_widgets (wpop); return (wpop); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean leaving_question (GtkWindow * widget, gpointer data) \brief Leaving atomes ? \param widget the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean leaving_question (GtkWindow * widget, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean leaving_question (GtkWidget * widget, GdkEvent * event, gpointer data) \brief Leaving atomes ? \param widget the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean leaving_question (GtkWidget * widget, GdkEvent * event, gpointer data) #endif { if (ask_yes_no (_("Leaving ?!"), _("Are you sure you want to quit ?"), GTK_MESSAGE_QUESTION, MainWindow)) { quit_gtk (); } else { show_the_widgets (MainWindow); } return TRUE; } /*! \fn int dummy_ask_ (char * question) \brief Ask to use dummy atoms or not from Fortran90 \param question Message */ int dummy_ask_ (char * question) { GtkWidget * dask = message_dialogmodal (question, _("Parameter required"), GTK_MESSAGE_INFO, GTK_BUTTONS_YES_NO, MainWindow); run_this_gtk_dialog (dask, G_CALLBACK(run_yes_no), NULL); return (res_yes_no) ? 0 : -1; } extern gchar * field_init[3]; gchar * coord_type[3]={i18n("Cartesian"), i18n("Atomic units"), i18n("Fractional")}; gchar * npt_type[4]={"A\tB\tC\tα\tβ\tɣ", "A\tB\tC\nα\tβ\tɣ", "ax\tay\taz\tbx\tby\tbz\tcx\tcy\tcz", "ax\tay\taz\nbx\tby\tbz\ncx\tcy\tcz"}; gchar * npt_info[3]={i18n("1 line by step, as many lines as MD steps"), i18n("2 lines by step, twice as many lines as MD steps"), i18n("3 lines by step, three times as many lines as MD steps")}; gchar * cif_configurations[3]={i18n("Single step chemical reaction"), i18n("MD trajectory"), i18n("Single configuration")}; gchar * cif_occupancies[3]={i18n("Round up to lowest integer"), i18n("Round up to highest integer"), i18n("Round up to nearest integer")}; gchar * cif_config_legends={i18n("\tSingle step chemical reaction\n" "\t\tConsider each configuration as a step in a chemical reaction:\n" "\t\t\t- Atomic coordinates are sorted based on occupancy or disorder site\n" "\t\t\t- Each describing the proportion of a reactant\n" "\t\t\t- A super lattice is build to respect these proportions\n\n" "\tMD trajectory\n" "\t\tConsider the CIF file a MD trajectory\n\n" "\t\tNumber of atom(s) must not change between configuration(s)\n\n" "\tSingle configuration \n" "\t\tSelect a single configuration in the CIF file")}; gchar * cif_config_leg={i18n("\tMD trajectory\n" "\t\tConsider the CIF file a MD trajectory\n\n" "\t\tNumber of atom(s) must not change between configuration(s)\n\n" "\tSingle configuration \n" "\t\tSelect a single configuration in the CIF file")}; gchar * cif_occ[3]={i18n("to lowest integer: nsites x occupancy"), i18n("to highest integer: nsites x occupancy"), i18n("to nearest integer: nsites x occupancy")}; gchar * cif_sites[2]={i18n("with nsites = f(space group, crystalline positions)"), i18n("with nsites = f(symmetry positions, crystalline positions)")}; GtkWidget * answer_info; /*! \fn G_MODULE_EXPORT void on_answer_changed (GtkWidget * widg, gpointer data) \brief Handling the GtkComboBox in 'int iask' \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_answer_changed (GtkWidget * widg, gpointer data) { int i, j; i = combo_get_active (widg); j = (! i || i == 2) ? 0 : (i == 1) ? 1 : 2; gtk_label_set_text (GTK_LABEL(answer_info), _(npt_info[j])); } int res_int; /*! \fn G_MODULE_EXPORT void run_iask (GtkDialog * iask, gint response_id, gpointer data) \brief enter an integer value - running the dialog \param iask the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_iask (GtkDialog * iask, gint response_id, gpointer data) { int i = GPOINTER_TO_INT(data); gboolean done = FALSE; const gchar * riask; if (response_id == GTK_RESPONSE_OK) { if (i == 0 || i > 5) { riask = entry_get_text (GTK_ENTRY(answer)); res_int = string_to_double ((gpointer)riask); if (i > 5) { if (res_int > 0 && res_int < i+1) { done = TRUE; res_int --; } } else if (res_int > 0) { done = TRUE; } } else { done = TRUE; res_int = combo_get_active (answer); } } if (done) destroy_this_dialog (iask); } /*! \fn int iask (char * question, char * lab, int id, GtkWidget * win) \brief enter an integer value - prepare the dialog \param question Message \param lab Text to use for label \param id the required parameter id \param win the parent GtkWidget, if any */ int iask (char * question, char * lab, int id, GtkWidget * win) { GtkWidget * iask; GtkWidget * vbox; GtkWidget * hboxa; GtkWidget * quest; int i; iask = message_dialogmodal (question, _("Parameter Required"), GTK_MESSAGE_INFO, GTK_BUTTONS_OK, win); vbox = dialog_get_content_area (iask); gtk_box_set_spacing (GTK_BOX(vbox), 15); hboxa = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hboxa, TRUE, TRUE, 0); quest = markup_label(lab, -1, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, quest, TRUE, TRUE, 0); if (id == 0 || id > 6) { answer = gtk_entry_new (); gtk_widget_set_size_request (answer, 100, -1); gtk_entry_set_alignment (GTK_ENTRY(answer), 1.0); } else { if (id < 6) { answer = create_combo (); gtk_widget_set_size_request (answer, -1, 30); switch (id) { case 1: for (i=0; i<3; i++) combo_text_append (answer, _(coord_type[i])); break; case 2: for (i=0; iLowest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊8.76⌋ = 8\n\n" "\tHighest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌈5.39⌉ = 6\n\n" "\tNearest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊6.82⌉ = 7\t\t and\t ⌊4.31⌉ = 4\n\n" "\t\t%s\n"), _(cif_occ[0]), _(cif_occ[1]), _(cif_occ[2]), _(cif_sites[cif_use_symmetry_positions])); answer_info = markup_label (str, 450, -1, 0.5, 0.5); g_free (str); } if (id == 6) { answer_info = markup_label (_(npt_info[0]), -1, -1, 0.5, 0.5); g_signal_connect(G_OBJECT(answer), "changed", G_CALLBACK(on_answer_changed), NULL); } if (id > 2 && id < 7) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, answer_info, FALSE, FALSE, 5); run_this_gtk_dialog (iask, G_CALLBACK(run_iask), GINT_TO_POINTER(id)); return res_int; } gchar * res_char; /*! \fn G_MODULE_EXPORT void run_cask (GtkDialog * cask, gint response_id, gpointer data) \brief enter a string - running the dialog \param cask the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_cask (GtkDialog * cask, gint response_id, gpointer data) { int i = GPOINTER_TO_INT(data); gboolean done = FALSE; if (i < 0) { while (! done) { if (response_id == GTK_RESPONSE_OK) { res_char = g_strdup_printf ("%s", entry_get_text (GTK_ENTRY(answer))); done = TRUE; } } } else { if (response_id == GTK_RESPONSE_OK) { res_char = g_strdup_printf ("%s", entry_get_text (GTK_ENTRY(answer))); } else { res_char = NULL; } done = TRUE; } if (done) destroy_this_dialog (cask); } /*! \fn gchar * cask (char * question, char * lab, int id, char * old, GtkWidget * win) \brief enter a string - prepare the dialog \param question Message \param lab Text to use for label \param id the required parameter id \param old the initial value for the string \param win the parent GtkWidget, if any */ gchar * cask (char * question, char * lab, int id, char * old, GtkWidget * win) { GtkWidget * cask; GtkWidget * dialog_ask; GtkWidget * hboxa; GtkWidget * quest; res_char = NULL; cask = message_dialogmodal (question, _("Parameter required"), GTK_MESSAGE_INFO, GTK_BUTTONS_OK, win); dialog_ask = dialog_get_content_area (cask); gtk_box_set_spacing (GTK_BOX(dialog_ask), 15); hboxa = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, dialog_ask, hboxa, TRUE, TRUE, 0); show_the_widgets (hboxa); quest = gtk_label_new (lab); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, quest, TRUE, TRUE, 0); show_the_widgets (quest); answer = gtk_entry_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, answer, TRUE, TRUE, 0); gtk_widget_set_size_request (answer, 50, -1); gtk_entry_set_alignment (GTK_ENTRY(answer), 1.0); update_entry_text (GTK_ENTRY(answer), old); run_this_gtk_dialog (cask, G_CALLBACK(run_cask), GINT_TO_POINTER(id)); return (res_char); } /*! \fn void init_data_ (int * nats, int * nspc, int * stps, int * cid) \brief update project data using information from Fortran90 \param nats number of atoms \param nspc number of species \param stps number of steps \param cid allocate chemistry data (1) or not (0) */ void init_data_ (int * nats, int * nspc, int * stps, int * cid) { active_project -> natomes = * nats; active_project -> nspec = * nspc; active_project -> steps = * stps; if (active_project -> steps > 1) { active_project -> skt_corr_threshold = (active_project -> steps < 20) ? 1 : 10; active_project -> skt_n_data_sets = min (5, active_project -> steps); active_project -> sqw_n_data_sets = 5; } alloc_proj_data (active_project, * cid); if (* cid) active_chem = active_project -> chemistry; } /*! \fn void spec_data_ (int * status, int * ind, int * atd, int * nsp, char * lbel, char * el_nme, double * amss, double * rdus, double * nscatt, double * xscatt) \brief update project data using information from Fortran90 \param status Update data (1) or not (0) \param ind the chemical species \param atd Z \param nsp Number of atoms of this species \param lbel Symbol \param el_nme Element \param amss M \param rdus Radius \param nscatt Neutron scattering length \param xscatt X scattering length */ void spec_data_ (int * status, int * ind, int * atd, int * nsp, char * lbel, char * el_nme, double * amss, double * rdus, double * nscatt, double * xscatt) { int id = * ind; active_chem -> label[id]= g_strdup_printf("%s", lbel); active_chem -> element[id]= g_strdup_printf("%s", el_nme); if (* status) { active_chem -> nsps[id] = * nsp; active_chem -> chem_prop[CHEM_Z][id] = (double) * atd; active_chem -> chem_prop[CHEM_M][id] = * amss; active_chem -> chem_prop[CHEM_R][id] = * rdus; active_chem -> chem_prop[CHEM_N][id] = * nscatt; active_chem -> chem_prop[CHEM_X][id] = * xscatt; } } /*! \fn void print_info (gchar * str, gchar * stag, GtkTextBuffer * buffer) \brief print information in GtkTextBuffer \param str the text \param stag the tags \param buffer the GtkTextBuffer to print into */ void print_info (gchar * str, gchar * stag, GtkTextBuffer * buffer) { GtkTextIter bEnd; GtkTextTag * tag; gtk_text_buffer_get_end_iter (buffer, &bEnd); if (stag != NULL) { tag = gtk_text_tag_table_lookup (gtk_text_buffer_get_tag_table(buffer), stag); gtk_text_buffer_insert_with_tags (buffer, &bEnd, str, -1, tag, NULL); } else { tag = gtk_text_tag_table_lookup (gtk_text_buffer_get_tag_table(buffer), "default-size"); gtk_text_buffer_insert_with_tags (buffer, &bEnd, str, -1, tag, NULL); } } /*! \fn gchar * textcolor (int i) \brief setup text color keyword \param i color id */ gchar * textcolor (int i) { switch (i - i * (i / 9)) { case 0: return "red"; break; case 1: return "blue"; break; case 2: return "cyan"; break; case 3: return "green"; break; case 4: return "light_green"; break; case 5: return "yellow"; break; case 6: return "orange"; break; case 7: return "violet"; break; case 8: return "pink"; break; } return NULL; } /*! \fn void lattice_info_ (int * bid, double * volume, double * density, double dvects[3][3], double rvects[3][3], double mod[3], double ang[3], double f_to_c[3][3], double c_to_f[3][3]) \brief lattice data from Fortran90 \param bid 0 or MD step if NPT \param volume volume \param density density \param dvects direct space lattice vectors \param rvects reciprocal lattice vectors \param mod modulus of lattice vectors (a,b,c) \param ang lattice angles (alpha, beta, gamma) \param f_to_c fractional to cartesian matrix \param c_to_f cartesian to fractional matrix */ void lattice_info_ (int * bid, double * volume, double * density, double dvects[3][3], double rvects[3][3], double mod[3], double ang[3], double f_to_c[3][3], double c_to_f[3][3]) { int i, j; for ( i=0; i<3; i++) { for (j=0; j<3; j++) { active_cell -> box[* bid].vect[i][j] = dvects[j][i]; active_cell -> box[* bid].rvect[i][j] = rvects[j][i]; } active_cell -> box[* bid].param[0][i] = mod[i]; active_cell -> box[* bid].param[1][i] = ang[i]; } active_cell -> box[* bid].frac_to_cart = mat4(f_to_c[0][0], f_to_c[0][1], f_to_c[0][2], 0.0, f_to_c[1][0], f_to_c[1][1], f_to_c[1][2], 0.0, f_to_c[2][0], f_to_c[2][1], f_to_c[2][2], 0.0, 0.0, 0.0, 0.0, 0.0); active_cell -> box[* bid].cart_to_frac = mat4(c_to_f[0][0], c_to_f[0][1], c_to_f[0][2], 0.0, c_to_f[1][0], c_to_f[1][1], c_to_f[1][2], 0.0, c_to_f[2][0], c_to_f[2][1], c_to_f[2][2], 0.0, 0.0, 0.0, 0.0, 0.0); #ifdef DEBUG // m4_print (active_cell -> box[* bid].frac_to_cart); // m4_print (active_cell -> box[* bid].cart_to_frac); #endif active_cell -> box[* bid].vol = * volume; active_cell -> box[* bid].dens = * density; if ((active_cell -> npt && * bid == active_project -> steps-1) || ! active_cell -> npt) { if (active_project -> analysis) { active_project -> analysis[GDR] -> max = fdmax_ (& active_cell -> pbc); active_project -> analysis[SQD] -> min = active_project -> analysis[SKD] -> min = fkmin_ (& active_cell -> pbc); // if (active_project -> analysis[SKT]) active_project -> analysis[SKT] -> min = active_project -> analysis[SKD] -> min; } int i, j; active_cell -> volume = active_cell -> density = 0.0; i = (active_cell -> npt) ? active_project -> steps : 1; for (j=0; j volume += active_cell -> box[j].vol; active_cell -> density += active_cell -> box[j].dens; } active_cell -> volume /= i; active_cell -> density /= i; } } /*! \fn void send_chem_info_ (int prop[active_project->nspec]) \brief getting chemistry formula information from Fortran90 \param prop the formula */ void send_chem_info_ (int prop[active_project -> nspec]) { int i; for (i=0; i nspec; i++) { active_chem -> formula[i] = prop[i]; } } /*! \fn gchar * env_name (project * this_proj, int g, int s, int f, GtkTextBuffer * buffer) \brief output the name of a coordination sphere \param this_proj the target project \param g the coordination (0 = total, 1 = partial) \param s the chemical species \param f With markup or not \param buffer Output in a GtkTextBuffer, or not if NULL */ gchar * env_name (project * this_proj, int g, int s, int f, GtkTextBuffer * buffer) { int l, m; gchar * spec = g_strdup_printf ("%s", exact_name(this_proj -> chemistry -> label[s])); gchar * stra; gchar * strb; m = 0; for (l=0; l nspec; l++) { m += this_proj -> coord -> partial_geo[s][g][l]; } if (m > 0) { stra = g_strdup_printf ("%s [", spec); if (buffer != NULL) { print_info (spec, textcolor(s), buffer); print_info ("[", "bold", buffer); } for (l=0; l nspec; l++) { m = this_proj -> coord -> partial_geo[s][g][l]; if (m > 1) { if (f == 1) { strb = g_strdup_printf ("%s%s%d", stra, exact_name(this_proj -> chemistry -> label[l]), m); } else { strb = g_strdup_printf ("%s%s%d", stra, exact_name(this_proj -> chemistry -> label[l]), m); } if (buffer != NULL) { print_info (exact_name(this_proj -> chemistry -> label[l]), "bold", buffer); g_free (strb); strb = g_strdup_printf ("%d", m); print_info (strb, "sub", buffer); } } else if (m > 0) { strb = g_strdup_printf ("%s%s", stra, exact_name(this_proj -> chemistry -> label[l])); if (buffer != NULL) { print_info (exact_name(this_proj -> chemistry -> label[l]), "bold", buffer); } } else { strb = g_strdup_printf ("%s", stra); } g_free (stra); stra = g_strdup_printf ("%s", strb); g_free (strb); } strb = g_strdup_printf ("%s]", stra); if (buffer != NULL) { print_info ("]", "bold", buffer); } g_free (stra); } else { strb = g_strdup_printf (_("%s - isolated"), spec); if (buffer != NULL) { print_info (spec, textcolor(s), buffer); print_info (_(" - isolated"), "bold", buffer); } } if (buffer != NULL) { strb = NULL; } g_free (spec); return strb; } /*! \fn void update_after_calc (int calc) \brief update all curve plots in the workspace after a calculation \param calc analysis id */ void update_after_calc (int calc) { int i, j; tint cd; project * this_proj; for (i=0; i analysis[calc] -> init_ok) { for (j= 0; j < this_proj -> analysis[calc] -> numc; j++) { if (this_proj -> analysis[calc] -> curves[j] -> plot != NULL) { cd.a = i; cd.b = calc; cd.c = j; update_curve ((gpointer)& cd); } } } } } atomes_1.3.1/src/gui/sktcall.c0000664000175000017500000004125315212624223015666 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file sktcall.c * @short Callbacks for the dynamic structure factor S(k,t) calculation dialog * @author Sébastien Le Roux */ /* * This file: 'sktcall.c' * * Contains: * - The callbacks for the dynamic structure factor calculation dialog * * List of functions: void init_sqw (project * this_proj); void recup_sqw_list_ (int nq, double qval[nq]); void init_skt (project * this_proj, int opening); void update_skt_view (project * this_proj); G_MODULE_EXPORT void on_calc_skt_released (GtkWidget * widg, gpointer data); */ #include #include #include #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "curve.h" #include "project.h" extern void alloc_analysis_curves (int pid, atomes_analysis * this_analysis); extern void update_sq_view (project * this_proj, int sqk); extern void update_dynamic_view (project * this_proj, GtkTextBuffer * calc_buffer); extern gboolean skt_all_sets; /*! \fn void init_sqw (project * this_proj) \brief initialize the curve widgets for the s(k,t) and s(q,w) calculations \param this_proj the target project */ void init_sqw (project * this_proj) { int g, h, i, k, l, m; g = 8+4*this_proj -> nspec*this_proj -> nspec; if (this_proj -> nspec == 2) g += 8; for (h=0; h < this_proj -> sqw_n_data_sets; h++) { i = this_proj -> skt_sets + h*g; this_proj -> analysis[SKT] -> curves[0+i] -> name = g_strdup_printf ("S(q,ω) %s - q= %f", _("Neutrons"), this_proj -> sqw_q_id[h]); this_proj -> analysis[SKT] -> curves[1+i] -> name = g_strdup_printf ("S(q,ω) %s - q= %f - %s", _("Neutrons"), this_proj -> sqw_q_id[h], _("smoothed")); this_proj -> analysis[SKT] -> curves[2+i] -> name = g_strdup_printf ("Q(q,ω) %s - q= %f", _("Neutrons"), this_proj -> sqw_q_id[h]); this_proj -> analysis[SKT] -> curves[3+i] -> name = g_strdup_printf ("Q(q,ω) %s - q= %f - %s", _("Neutrons"), this_proj -> sqw_q_id[h], _("smoothed")); this_proj -> analysis[SKT] -> curves[4+i] -> name = g_strdup_printf ("S(q,ω) %s - q= %f", _("X-rays"), this_proj -> sqw_q_id[h]); this_proj -> analysis[SKT] -> curves[5+i] -> name = g_strdup_printf ("S(q,ω) %s - q= %f - %s", _("X-rays"), this_proj -> sqw_q_id[h], _("smoothed")); this_proj -> analysis[SKT] -> curves[6+i] -> name = g_strdup_printf ("Q(q,ω) %s - q= %f", _("X-rays"), this_proj -> sqw_q_id[h]); this_proj -> analysis[SKT] -> curves[7+i] -> name = g_strdup_printf ("Q(q,ω) %s - q= %f - %s", _("X-rays"), this_proj -> sqw_q_id[h], _("smoothed")); k = i + 8; for ( l = 0 ; l < this_proj -> nspec ; l++ ) { for ( m = 0 ; m < this_proj -> nspec ; m++ ) { this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("AL(q,ω)[%s,%s] - q= %f", active_chem -> label[l], active_chem -> label[m], this_proj -> sqw_q_id[h]); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("AL(q,ω)[%s,%s] - q= %f - %s", active_chem -> label[l], active_chem -> label[m], this_proj -> sqw_q_id[h], _("smoothed")); k ++; } } for ( l = 0 ; l < this_proj -> nspec ; l++ ) { for ( m = 0 ; m < this_proj -> nspec ; m++ ) { this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("FZ(q,ω)[%s,%s] - q= %f", active_chem -> label[l], active_chem -> label[m], this_proj -> sqw_q_id[h]); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("FZ(q,ω)[%s,%s] - q= %f - %s", active_chem -> label[l], active_chem -> label[m], this_proj -> sqw_q_id[h], _("smoothed")); k ++; } } if ( this_proj -> nspec == 2 ) { this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ω)[NN] - q= %f", this_proj -> sqw_q_id[h]); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ω)[NN] - q= %f - %s", this_proj -> sqw_q_id[h], _("smoothed")); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ω)[NC] - q= %f", this_proj -> sqw_q_id[h]); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ω)[NC] - q= %f - %s", this_proj -> sqw_q_id[h], _("smoothed")); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ω)[CC] - q= %f", this_proj -> sqw_q_id[h]); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ω)[CC] - q= %f - %s", this_proj -> sqw_q_id[h], _("smoothed")); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ω)[ZZ] - q= %f", this_proj -> sqw_q_id[h]); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ω)[ZZ] - q= %f - %s", this_proj -> sqw_q_id[h], _("smoothed")); } } for (h=this_proj -> skt_sets; h < this_proj -> analysis[SKT] -> numc; h++) { init_curve_title (this_proj, SKT, h); } } /*! \fn void recup_sqw_list_ (int nq, double qval[nq]) \brief retrieve exact q vector values from Fortran \param nq the number of q vectors \param qval the list of q vectors */ void recup_sqw_list_ (int nq, double qval[nq]) { if (nq != active_project -> sqw_n_data_sets) { // This should happen, error ? } int i; for (i=0; i<* qval; i++) { active_project -> sqw_q_id[i] = qval[i]; } init_sqw (active_project); // Update calculation dialog ? } /*! \fn void init_skt (project * this_proj, int opening) \brief initialize the curve widgets for the s(k,t) and s(q,w) calculations \param this_proj the target project \param opening opening project file 1, otherwise 0 */ void init_skt (project * this_proj, int opening) { int g, h, i, j, k, l, m; if (this_proj -> analysis[SKT] -> curves) { for (i=0; i analysis[SKT] -> numc; i++) { hide_the_widgets(this_proj -> analysis[SKT] -> curves[i] -> window); } } this_proj -> skt_sets = 8+4*this_proj -> nspec*this_proj -> nspec; if (this_proj -> nspec == 2) this_proj -> skt_sets += 8; this_proj -> sqw_sets = this_proj -> skt_sets; g = this_proj -> skt_sets; if (this_proj -> skt_all_sets) { this_proj -> skt_sets *= (this_proj -> steps - this_proj -> skt_corr_threshold); } else { this_proj -> skt_sets *= this_proj -> skt_n_data_sets; } this_proj -> sqw_sets *= this_proj -> sqw_n_data_sets; this_proj -> analysis[SKT] -> numc = this_proj -> skt_sets + this_proj -> sqw_sets; alloc_analysis_curves (this_proj -> id, this_proj -> analysis[SKT]); for (h=0; h < ((this_proj -> skt_all_sets) ? this_proj -> steps - this_proj -> skt_corr_threshold : this_proj -> skt_n_data_sets); h++) { i = h*g; j = (this_proj -> skt_all_sets) ? h+1 : active_project -> skt_step_id[h]; this_proj -> analysis[SKT] -> curves[0+i] -> name = g_strdup_printf ("S(q,ẟt) %s - ẟt= %d", _("Neutrons"), j); this_proj -> analysis[SKT] -> curves[1+i] -> name = g_strdup_printf ("S(q,ẟt) %s - ẟt= %d - %s", _("Neutrons"), j, _("smoothed")); this_proj -> analysis[SKT] -> curves[2+i] -> name = g_strdup_printf ("Q(q,ẟt) %s - ẟt= %d", _("Neutrons"), j); this_proj -> analysis[SKT] -> curves[3+i] -> name = g_strdup_printf ("Q(q,ẟt) %s - ẟt= %d - %s", _("Neutrons"), j, _("smoothed")); this_proj -> analysis[SKT] -> curves[4+i] -> name = g_strdup_printf ("S(q,ẟt) %s - ẟt= %d", _("X-rays"), j); this_proj -> analysis[SKT] -> curves[5+i] -> name = g_strdup_printf ("S(q,ẟt) %s - ẟt= %d - %s", _("X-rays"), j, _("smoothed")); this_proj -> analysis[SKT] -> curves[6+i] -> name = g_strdup_printf ("Q(q,ẟt) %s - ẟt= %d", _("X-rays"), j); this_proj -> analysis[SKT] -> curves[7+i] -> name = g_strdup_printf ("Q(q,ẟt) %s - ẟt= %d - %s", _("X-rays"), j, _("smoothed")); k = 8+i; for ( l = 0 ; l < this_proj -> nspec ; l++ ) { for ( m = 0 ; m < this_proj -> nspec ; m++ ) { this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("AL(q,ẟt)[%s,%s] - ẟt= %d", active_chem -> label[l], active_chem -> label[m], j); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("AL(q,ẟt)[%s,%s] - ẟt= %d - %s", active_chem -> label[l], active_chem -> label[m], j, _("smoothed")); k ++; } } for ( l = 0 ; l < this_proj -> nspec ; l++ ) { for ( m = 0 ; m < this_proj -> nspec ; m++ ) { this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("FZ(q,ẟt)[%s,%s] - ẟt= %d", active_chem -> label[l], active_chem -> label[m], j); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("FZ(q,ẟt)[%s,%s] - ẟt= %d - %s", active_chem -> label[l], active_chem -> label[m], j, _("smoothed")); k ++; } } if ( this_proj -> nspec == 2 ) { this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ẟt)[NN] - ẟt= %d", j); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ẟt)[NN] - ẟt= %d - %s", j, _("smoothed")); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ẟt)[NC] - ẟt= %d", j); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ẟt)[NC] - ẟt= %d - %s", j,_("smoothed")); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ẟt)[CC] - ẟt= %d", j); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ẟt)[CC] - ẟt= %d - %s", j, _("smoothed")); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ẟt)[ZZ] - ẟt= %d", j); k ++; this_proj -> analysis[SKT] -> curves[k] -> name = g_strdup_printf ("BT(q,ẟt)[ZZ] - t= %d - %s", j, _("smoothed")); } } if (opening) init_sqw (this_proj); add_curve_widgets (this_proj, SKT); this_proj -> analysis[SKT] -> init_ok = TRUE; } /*! \fn void update_skt_view (project * this_proj) \brief update the text view for s(k,t) and s(q,w) calculation \param this_proj the target project */ void update_skt_view (project * this_proj) { int i; gchar * str; update_sq_view (this_proj, SKT); print_info ("\n", NULL, this_proj -> analysis[SKT] -> calc_buffer); print_info (_("\tMolecular dynamics information:\n\n"), NULL, this_proj -> analysis[SKT] -> calc_buffer); update_dynamic_view (this_proj, this_proj -> analysis[SKT] -> calc_buffer); print_info (_("\n\n\tIntermediate scattering - F(q,δt)\n\n"), NULL, this_proj -> analysis[SKT] -> calc_buffer); print_info (_("\t - Correlation threshold δt"), "bold", this_proj -> analysis[SKT] -> calc_buffer); print_info ("min", "sup_bold", this_proj -> analysis[SKT] -> calc_buffer); print_info (" = ", "bold", this_proj -> analysis[SKT] -> calc_buffer); str = g_strdup_printf ("%d", this_proj -> skt_corr_threshold); print_info (str, "bold_blue", this_proj -> analysis[SKT] -> calc_buffer); g_free (str); print_info ("\n", NULL, this_proj -> analysis[SKT] -> calc_buffer); if (this_proj -> skt_all_sets) { print_info (_("\t - All "), "bold", this_proj -> analysis[SKT] -> calc_buffer); str = g_strdup_printf ("%d", this_proj -> skt_sets); print_info (str, "bold_blue", this_proj -> analysis[SKT] -> calc_buffer); g_free (str); print_info (_(" correlated calculations saved"), "bold", this_proj -> analysis[SKT] -> calc_buffer); print_info ("\n", NULL, this_proj -> analysis[SKT] -> calc_buffer); } else { print_info (_("\t - Results saved for "), "bold", this_proj -> analysis[SKT] -> calc_buffer); str = g_strdup_printf ("%d", this_proj -> skt_n_data_sets); print_info (str, "bold_blue", this_proj -> analysis[SKT] -> calc_buffer); g_free (str); print_info (_(" correlated calculations:\n\n"), "bold", this_proj -> analysis[SKT] -> calc_buffer); for (i=0; i skt_n_data_sets; i++) { print_info (" \t\t ", NULL, this_proj -> analysis[SKT] -> calc_buffer); str = g_strdup_printf ("%d", i); print_info (str, NULL, this_proj -> analysis[SKT] -> calc_buffer); g_free (str); print_info (") δt\t=\t", NULL, this_proj -> analysis[SKT] -> calc_buffer); str = g_strdup_printf ("%d\n", this_proj -> skt_step_id[i]); print_info (str, "bold_green", this_proj -> analysis[SKT] -> calc_buffer); g_free (str); } } print_info ("\n", NULL, this_proj -> analysis[SKT] -> calc_buffer); print_info (_("\tDynamic structure factor - S(q,ω)\n\n"), NULL, this_proj -> analysis[SKT] -> calc_buffer); print_info ("\t - ", "bold", this_proj -> analysis[SKT] -> calc_buffer); str = g_strdup_printf ("%d", this_proj -> sqw_n_data_sets); print_info (str, "bold_blue", this_proj -> analysis[SKT] -> calc_buffer); g_free (str); print_info (_(" q vectors were analyzed:\n\n"), "bold", this_proj -> analysis[SKT] -> calc_buffer); for (i=0; i sqw_n_data_sets; i++) { print_info (" \t\t ", NULL, this_proj -> analysis[SKT] -> calc_buffer); str = g_strdup_printf ("%d", i); print_info (str, NULL, this_proj -> analysis[SKT] -> calc_buffer); g_free (str); print_info (") q\t=\t", NULL, this_proj -> analysis[SKT] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> sqw_q_id[i]); print_info (str, "bold_red", this_proj -> analysis[SKT] -> calc_buffer); g_free (str); print_info (" Å", "bold", this_proj -> analysis[SKT] -> calc_buffer); print_info ("-1", "sup_bold", this_proj -> analysis[SKT] -> calc_buffer); print_info ("\n", "bold", this_proj -> analysis[SKT] -> calc_buffer); } print_info (calculation_time(TRUE, this_proj -> analysis[SKT] -> calc_time), NULL, this_proj -> analysis[SKT] -> calc_buffer); } /*! \fn G_MODULE_EXPORT void on_calc_skt_released (GtkWidget * widg, gpointer data) \brief callback to compute the dynamic structure factor analysis \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_skt_released (GtkWidget * widg, gpointer data) { // Initializing the graph for this calculation, if not done already init_skt (active_project, 0); // Cleaning previous results, if any clean_curves_data (SKT, 0, active_project -> analysis[SKT] -> numc); active_project -> analysis[SKT] -> delta = (active_project -> analysis[SKT] -> max - active_project -> analysis[SKT] -> min) / active_project -> analysis[SKT] -> num_delta; // Calculation time for dynamic structure factor analysis starts here ! prepostcalc (widg, FALSE, SKT, 0, opac); int i; i = cqvf_ (& active_project -> analysis[SKT] -> max, & active_project -> analysis[SKT] -> min, & active_project -> analysis[SKT] -> num_delta, & active_project -> sk_advanced[1][0], & active_project -> sk_advanced[1][1]); if (i == 1) { for (i=0; i analysis[SKT] -> numc; i++) { active_project -> analysis[SKT] -> curves[i] -> ndata = 0; } double detla_t = active_project -> analysis[MSD] -> delta*active_project -> analysis[MSD] -> num_delta; int res_skt = s_of_k_t_ (& active_project -> analysis[SKT] -> num_delta, & active_project -> xcor, & active_project -> skt_corr_threshold, & active_project -> skt_n_data_sets, active_project -> skt_step_id, & detla_t, & active_project -> sqw_n_data_sets, active_project -> sqw_q_id, & active_project -> sqw_freq); g_free (xsk); xsk = NULL; prepostcalc (widg, TRUE, SKT, res_skt, 1.0); if (! res_skt) { show_error (_("The dynamic structure factor calculation has failed"), 0, widg); } else { update_skt_view (active_project); show_the_widgets (curvetoolbox); } } else { prepostcalc (widg, TRUE, SKT, i, 1.0); show_error (_("Problem during the selection of the k-points\nused to sample the reciprocal lattice"), 0, widg); } fill_tool_model (); } atomes_1.3.1/src/gui/gui.c0000664000175000017500000013063415212624223015017 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file gui.c * @short GUI of the main window \n Menu elements of the workspace menu \n Creation of menu items, actions, used in the entire atomes software * @author Sébastien Le Roux */ /* * This file: 'gui.c' * * Contains: * - The GUI of the main window - The menu elements of the workspace menu - Creation of menu items, actions, of menu items, actions, used in the entire atomes software * * List of functions: G_MODULE_EXPORT gboolean pop_menu (GtkWidget * widget, GdkEventButton * event, gpointer data); void clean_view (); void view_buffer (GtkTextBuffer * buffer); void atomes_key_pressed (guint keyval, GdkModifierType state); void add_analysis_action (int act); void remove_action (gchar * action_name); void remove_edition_actions (); void remove_edition_and_analyze_actions (); void widget_add_action (GSimpleActionGroup * action_group, const gchar * act, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, const gchar * stat); void append_submenu (GMenu * menu, const gchar * label, GMenu * submenu); void append_menu_item (GMenu * menu, const gchar * label, const gchar * action, const gchar * accel, const gchar * custom, int format, const gchar * icon, gboolean check, gboolean status, gboolean radio, const gchar * rstatus); G_MODULE_EXPORT void show_periodic_table (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void atomes_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void atomes_popup_menu (GtkGesture * gesture, int n_press, double x, double y, gpointer data); GtkWidget * create_main_window (GApplication * atomes); GIcon * get_gicon_from_data (int format, const gchar * icon); GMenuItem * create_gmenu_item (const gchar * label, const gchar * action, const gchar * accel, const gchar * custom, int format, const gchar * icon, gboolean check, gboolean status, gboolean radio, const gchar * rstatus); GMenu * workspace_section (gchar * act, int pop); GMenu * port_section (gchar * act, int pop, int port); GMenu * project_section (gchar * act, int pop_up, int proj, int calc); GMenu * import_section (gchar * act); GMenu * quit_section (gchar * act); GMenu * workspace_title (); GMenu * project_title (int pop_up, int proj); GMenu * create_workspace_menu (gchar * act, int pop_up, int proj, int calc); GMenu * create_edit_menu (); GMenu * tool_box_section (); GMenu * create_analyze_menu (); GMenu * create_help_menu (); GMenu * atomes_menu_bar (); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" extern int objects[3]; extern int * object_was_selected[3]; extern int ** tmp_object_id[3]; extern GtkWidget * create_curve_tool_box (); extern GtkWidget * work_menu (int p, int c); extern G_MODULE_EXPORT void compute_this_prop (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_create_new_project (GtkWidget * widg, gpointer data); extern int get_atom_id_from_periodic_table (atom_search * asearch); extern G_MODULE_EXPORT void leaving_from_menu (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_edit_activate (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_activate (GtkWidget * widg, gpointer data); extern void create_user_preferences_dialog (); #ifdef GTK3 GtkWidget * MainEvent; #endif gchar * dots[NDOTS]; gchar * graph_img[NCALCS]; atomes_action edition_acts[] = {{"edit.chemistry", GINT_TO_POINTER(0)}, {"edit.periodicity", GINT_TO_POINTER(1)}, {"edit.cutoffs", GINT_TO_POINTER(2)}}; gchar * calc_name[] = {"g(r)/G(r)", i18n("S(q) from FFT[g(r)]"), i18n("S(q) from Debye Equation"), i18n("g(r)/G(r) from FFT[S(q)]"), i18n("Bonds and Angles"), i18n("Ring Statistics"), i18n("Chain Statistics"), i18n("Spherical Harmonics"), i18n("Mean Squared Displacement"), i18n("Dynamic Structure Factor")}; gchar * graph_name[] = {"g(r)/G(r)", i18n("S(q) from FFT[g(r)]"), i18n("S(q) from Debye Equation"), i18n("g(r)/G(r) from FFT[S(q)]"), i18n("Bond Properties"), i18n("Angle Distributions"), i18n("Ring Statistics"), i18n("Chain Statistics"), i18n("Spherical Harmonics"), i18n("Mean Squared Displacement"), i18n("Dynamic Structure Factor")}; gchar * graph_icon[] = {"pixmaps/gr.png", "pixmaps/sq.png", "pixmaps/sq.png", "pixmaps/gr.png", "pixmaps/bd.png", "pixmaps/an.png", "pixmaps/ri.png", "pixmaps/ch.png", "pixmaps/sp.png", "pixmaps/ms.png", "pixmaps/sq.png"}; tint cut_sel; dint davect[9]; ColRGBA std[6]; shortcuts main_shortcuts[] = { { i18n("About"), i18n("open about dialog"), GDK_KEY_a, "a" }, { i18n("Periodic table"), i18n("open periodic table"), GDK_KEY_p, "p" }, { i18n("Quit"), i18n("quit atomes"), GDK_KEY_q, "q" }, //}; //{ { i18n("Open workspace"), i18n("open atomes workspace"), GDK_KEY_w, "w" }, { i18n("Save workspace"), i18n("save atomes workspace"), GDK_KEY_s, "s" }, { i18n("Close workspace"), i18n("close atomes workspace"), GDK_KEY_c, "c" }, //}; //{ { i18n("New project"), i18n("create new atomes project"), GDK_KEY_n, "n" }, { i18n("Open project"), i18n("open atomes project"), GDK_KEY_o, "o" } }; gchar * main_section_names[] = { "Main" }; int main_group_by_section[] = { 3 }; gchar * main_group_names[] = { i18n("General"), i18n("Workspace"), i18n("Projects") }; int main_shortcut_by_group[] = { 3, 3, 2 }; /*! \fn GtkWidget * shortcuts_window (int sections, int group_by_section[sections], int groups, int shortcut_by_group[groups], gchar * section_names[sections], gchar * group_names[groups], shortcuts shortcs[]) \brief Create the shortcuts information window \param sections number of shortcut sections \param group_by_section number of group by section \param groups number of groups \param shortcut_by_group number of shortcuts by group \param shortcs shortcuts information */ GtkWidget * shortcuts_window (int sections, int group_by_section[sections], int groups, int shortcut_by_group[groups], gchar * section_names[sections], gchar * group_names[groups], shortcuts shortcs[]) { GtkShortcutsWindow * win = NULL; #ifdef G_OS_WIN32 win = g_object_new (GTK_TYPE_SHORTCUTS_WINDOW, "modal", FALSE, "resizable", TRUE, "deletable", TRUE, NULL); #else win = g_object_new (GTK_TYPE_SHORTCUTS_WINDOW, "modal", FALSE, "resizable", TRUE, NULL); #endif GtkShortcutsSection * shortcut_section[sections]; GtkShortcutsGroup * shortcut_group[groups]; GtkShortcutsShortcut * shortcut; #ifdef GTK4 #if GTK_MINOR_VERSION < 14 || (GTK_MINOR_VERSION == 14 && GTK_MICRO_VERSION < 4) GtkWidget * sections_book = gtk_notebook_new (); gtk_notebook_set_scrollable (GTK_NOTEBOOK(sections_book), TRUE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK(sections_book), GTK_POS_TOP); #endif #endif // GTK4 int i, j, k, l, m; l = m = 0; for (i=0; i 14 || (GTK_MINOR_VERSION == 14 && GTK_MICRO_VERSION >= 4) gtk_shortcuts_group_add_shortcut (shortcut_group[l], shortcut); #else add_box_child_start (GTK_ORIENTATION_VERTICAL, (GtkWidget *)shortcut_group[l], (GtkWidget *)shortcut, FALSE, FALSE, 0); #endif #else gtk_container_add (GTK_CONTAINER((GtkWidget *)shortcut_group[l]), (GtkWidget *)shortcut); #endif } #ifdef GTK4 #if GTK_MINOR_VERSION > 14 || (GTK_MINOR_VERSION == 14 && GTK_MICRO_VERSION >= 4) gtk_shortcuts_section_add_group (shortcut_section[i], shortcut_group[l]); #else add_box_child_start (GTK_ORIENTATION_HORIZONTAL, (GtkWidget *)shortcut_section[i], (GtkWidget *)shortcut_group[l], FALSE, FALSE, 0); #endif #else gtk_container_add (GTK_CONTAINER((GtkWidget *)shortcut_section[i]), (GtkWidget *)shortcut_group[l]); #endif } #ifdef GTK4 #if GTK_MINOR_VERSION > 14 || (GTK_MINOR_VERSION == 14 && GTK_MICRO_VERSION >= 4) gtk_shortcuts_window_add_section (GTK_SHORTCUTS_WINDOW(win), shortcut_section[i]); #else gtk_notebook_append_page (GTK_NOTEBOOK(sections_book), (GtkWidget *)shortcut_section[i], gtk_label_new (_(section_names[i]))); #endif #else gtk_container_add (GTK_CONTAINER((GtkWidget *)win), (GtkWidget *)shortcut_section[i]); #endif } #ifdef GTK4 #if GTK_MINOR_VERSION < 14 || (GTK_MINOR_VERSION == 14 && GTK_MICRO_VERSION < 4) gtk_window_set_child ((GtkWindow*) win, sections_book); #endif #endif add_gtk_close_event ((GtkWidget *)win, G_CALLBACK(destroy_this_window), NULL); show_the_widgets ((GtkWidget *)win); return (GtkWidget *)win; } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean pop_menu (GtkWidget * widget, GdkEventButton * event, gpointer data) \brief popup a menu at an event position \param widget the GtkWidget sending the signal \param event the associated event \param data the associated pointer data */ G_MODULE_EXPORT gboolean pop_menu (GtkWidget * widget, GdkEventButton * event, gpointer data) { if (event -> button == 3) { pop_menu_at_pointer (work_menu (-1, -1), (GdkEvent *)event); } return FALSE; } #endif /*! \fn void clean_view () \brief clean the main window */ void clean_view () { MainView = destroy_this_widget (MainView); atomes_logo = destroy_this_widget (atomes_logo); #ifdef GTK4 atomes_logo = gtk_picture_new_for_filename (PACKAGE_LOGO); gtk_widget_set_size_request (atomes_logo, 550, -1); add_container_child (CONTAINER_SCR, MainScrol[1], atomes_logo); #else atomes_logo = gtk_image_new_from_file (PACKAGE_LOGO); MainScrol[1] = destroy_this_widget (MainScrol[1]); gtk_container_add (GTK_CONTAINER(MainEvent), atomes_logo); show_the_widgets (MainEvent); #endif } /*! \fn void view_buffer (GtkTextBuffer * buffer) \brief set a text buffer in the main window or an image \param buffer the GtkTextBuffer to display */ void view_buffer (GtkTextBuffer * buffer) { if (atomes_logo) { atomes_logo = destroy_this_widget (atomes_logo); #ifdef GTK4 gtk_scrolled_window_set_child ((GtkScrolledWindow *)MainScrol[1], NULL); #endif } gboolean add = FALSE; if (! MainView) { MainView = gtk_text_view_new (); gtk_text_view_set_editable (GTK_TEXT_VIEW(MainView), 0); text_view_set_monospace (MainView); add = TRUE; } gtk_text_view_set_buffer (GTK_TEXT_VIEW(MainView), buffer); #ifdef GTK3 if (! MainScrol[1]) { MainScrol[1] = create_scroll (NULL, -1, -1, GTK_SHADOW_ETCHED_IN); gtk_container_add (GTK_CONTAINER(MainEvent), MainScrol[1]); add = TRUE; } if (add) gtk_container_add (GTK_CONTAINER(MainScrol[1]), MainView); #else if (add) { add_container_child (CONTAINER_SCR, MainScrol[1], MainView); } #endif show_the_widgets (MainScrol[1]); } /*! \fn void atomes_key_pressed (guint keyval, GdkModifierType state) \brief main window key actions callbacks \param keyval key id \param state modifier (Ctrl, Alt ...) */ void atomes_key_pressed (guint keyval, GdkModifierType state) { if (state & GDK_CONTROL_MASK) { switch (keyval) { case GDK_KEY_a: create_about_dialog (NULL, NULL); break; case GDK_KEY_c: on_close_workspace (NULL, GINT_TO_POINTER(1)); break; case GDK_KEY_n: on_create_new_project (NULL, NULL); break; case GDK_KEY_o: on_open_save_activate (NULL, GINT_TO_POINTER(0)); break; case GDK_KEY_p: get_atom_id_from_periodic_table (NULL); break; case GDK_KEY_q: #ifdef GTK4 leaving_question (NULL, NULL); #else leaving_question (NULL, NULL, NULL); #endif break; case GDK_KEY_s: on_save_as_activate (NULL, GINT_TO_POINTER(3)); break; case GDK_KEY_t: on_show_curve_toolbox (NULL, NULL); break; case GDK_KEY_w: on_open_save_activate (NULL, GINT_TO_POINTER(2)); break; } } } /*! \fn G_MODULE_EXPORT void show_periodic_table (GtkWidget * widg, gpointer data) \brief show the periodic table of the elements \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_periodic_table (GtkWidget * widg, gpointer data) { get_atom_id_from_periodic_table (NULL); } /*! \fn G_MODULE_EXPORT void atomes_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data) \brief atomes menu bar actions \param action the GAction sending the signal the GSimpleAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void atomes_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data) { gchar * name = g_strdup_printf ("%s", g_action_get_name(G_ACTION(action))); if (g_strcmp0 (name, "workspace.open") == 0) { on_open_save_activate (NULL, data); } else if (g_strcmp0 (name, "workspace.save") == 0) { on_open_save_activate (NULL, data); } else if (g_strcmp0 (name, "workspace.save-as") == 0) { on_save_as_activate (NULL, data); } else if (g_strcmp0 (name, "workspace.close") == 0) { on_close_workspace (NULL, data); } else if (g_strcmp0 (name, "project.new") == 0) { on_create_new_project (NULL, data); } else if (g_strcmp0 (name, "project.edit") == 0) { change_project_name (NULL, data); } else if (g_strcmp0 (name, "project.active") == 0) { activate_project (NULL, data); } else if (g_strcmp0 (name, "project.compute") == 0) { compute_this_prop (NULL, data); } else if (g_strcmp0 (name, "project.open") == 0) { on_open_save_activate (NULL, data); } else if (g_strcmp0 (name, "project.save") == 0) { on_open_save_activate (NULL, data); } else if (g_strcmp0 (name, "project.save-as") == 0) { on_save_as_activate (NULL, data); } else if (g_strcmp0 (name, "project.close") == 0) { on_close_activate (NULL, data); } else if (g_strcmp0 (name, "export.isaacs") == 0) { on_isaacs_port (NULL, data); } else if (g_strcmp0 (name, "export.coordinates") == 0) { on_coord_port (NULL, data); } else if (g_strcmp0 (name, "import.isaacs") == 0) { on_isaacs_port (NULL, data); } else if (g_strcmp0 (name, "import.coordinates") == 0) { on_coord_port (NULL, data); } else if (g_strcmp0 (name, "program.quit") == 0) { leaving_from_menu (NULL, data); } else if (g_strcmp0 (name, "edit.chemistry") == 0) { on_edit_activate (NULL, data); } else if (g_strcmp0 (name, "edit.periodicity") == 0) { on_edit_activate (NULL, data); } else if (g_strcmp0 (name, "edit.cutoffs") == 0) { on_edit_activate (NULL, data); } else if (g_strcmp0 (name, "analyze.tool-box") == 0) { on_show_curve_toolbox (NULL, data); } else if (g_strcmp0 (name, "help.periodic") == 0) { show_periodic_table (NULL, data); } else if (g_strcmp0 (name, "help.about") == 0) { create_about_dialog (NULL, data); } else if (g_strcmp0 (name, "help.shortcuts") == 0) { atomes_shortcuts = destroy_this_widget (atomes_shortcuts); atomes_shortcuts = shortcuts_window (G_N_ELEMENTS(main_group_by_section), main_group_by_section, G_N_ELEMENTS(main_shortcut_by_group), main_shortcut_by_group, main_section_names, main_group_names, main_shortcuts); } else if (g_strcmp0 (name, "help.preferences") == 0) { create_user_preferences_dialog (); } else { // Only remains analysis actions on_calc_activate (NULL, data); } g_free (name); } /*! \fn void add_analysis_action (int act) \brief add action to the main window action map \param the action the GAction sending the signal the action to add */ void add_analysis_action (int act) { gchar * str = g_strdup_printf ("analyze.%d", act); GSimpleAction * this_action = g_simple_action_new (str, NULL); g_free (str); g_action_map_add_action (G_ACTION_MAP(AtomesApp), G_ACTION(this_action)); g_signal_connect (this_action, "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(act)); } /*! \fn void remove_action (gchar * action_name) \brief add action from the main window action map \param action_name the action to remove */ void remove_action (gchar * action_name) { g_action_map_remove_action (G_ACTION_MAP(AtomesApp), (const gchar *)action_name); } /*! \fn void remove_edition_actions () \brief remove all edition actions */ void remove_edition_actions () { int i; for (i=0; iW", NULL, IMG_STOCK, FOPEN, FALSE, FALSE, FALSE, NULL); g_free (str); if (! pop || nprojects) { str = g_strdup_printf ("%s.workspace.save", act); append_menu_item (menu, _("Save"), (const gchar *)str, NULL, NULL, IMG_STOCK, FSAVE, FALSE, FALSE, FALSE, NULL); g_free (str); str = g_strdup_printf ("%s.workspace.save-as", act); append_menu_item (menu, _("Save As"), (const gchar *)str, "S", NULL, IMG_STOCK, FSAVEAS, FALSE, FALSE, FALSE, NULL); g_free (str); str = g_strdup_printf ("%s.workspace.close", act); append_menu_item (menu, _("Close"), (const gchar *)str, "C", NULL, IMG_STOCK, FCLOSE, FALSE, FALSE, FALSE, NULL); g_free (str); } return menu; } /*! \fn GMenu * port_section (gchar * act, int pop, int port) \brief create the import/export menu items \param act "app" or "pop" key for the GAction \param pop from main app (0) or contextual (1) \param port Import (1) or Export (0) */ GMenu * port_section (gchar * act, int pop, int port) { gchar * port_action[2]={"export", "import"}; GMenu * menu = g_menu_new (); gchar * str; str = g_strdup_printf ("%s.%s.isaacs", act, port_action[port]); append_menu_item (menu, _("ISAACS Project File (*.ipf)"), (const gchar *)str, NULL, NULL, IMG_FILE, PACKAGE_MOL, FALSE, FALSE, FALSE, NULL); g_free (str); str = g_strdup_printf ("%s.%s.coordinates", act, port_action[port]); append_menu_item (menu, _("Atomic Coordinates"), (const gchar *)str, NULL, NULL, IMG_FILE, (port) ? PACKAGE_IMP : PACKAGE_CON, FALSE, FALSE, FALSE, NULL); g_free (str); return menu; } /*! \fn GMenu * project_section (gchar * act, int pop_up, int proj, int calc) \brief create the project section \param act "app" or "pop" key for the GAction \param pop_up from main app (0) or contextual (1) \param proj project id, if any (or -1) \param calc calculation id, if any (or -1) */ GMenu * project_section (gchar * act, int pop_up, int proj, int calc) { GMenu * menu = g_menu_new (); gchar * str, * str_n; if (pop_up && nprojects && proj > -1) { if (activep != proj) { str = g_strdup_printf ("%s.project.active", act); append_menu_item (menu, _("Make Active"), (const gchar *)str, NULL, NULL, IMG_STOCK, YES, FALSE, FALSE, FALSE, NULL); g_free (str); } if (calc > -1) { str = g_strdup_printf ("%s.project.compute", act); str_n = g_strdup_printf (_("Analyze: %s"), _(graph_name[calc])); append_menu_item (menu, str_n, (get_project_by_id(proj) -> analysis[calc] -> avail_ok) ? (const gchar *)str : "None", NULL, NULL, IMG_FILE, graph_img[calc], FALSE, FALSE, FALSE, NULL); g_free (str); g_free (str_n); } str = g_strdup_printf ("%s.project.edit", act); append_menu_item (menu, _("Edit Name"), (const gchar *)str, NULL, NULL, IMG_STOCK, EDITA, FALSE, FALSE, FALSE, NULL); g_free (str); } if (! atomes_from_libreoffice) { str = g_strdup_printf ("%s.project.new", act); append_menu_item (menu, _("New"), (const gchar *)str, "N", NULL, IMG_STOCK, FNEW, FALSE, FALSE, FALSE, NULL); g_free (str); str = g_strdup_printf ("%s.project.open", act); append_menu_item (menu, _("Open"), (const gchar *)str, "O", NULL, IMG_STOCK, FOPEN, FALSE, FALSE, FALSE, NULL); g_free (str); } if (! pop_up || proj > -1) { str = g_strdup_printf ("%s.project.save", act); append_menu_item (menu, _("Save"), (const gchar *)str, NULL, NULL, IMG_STOCK, FSAVE, FALSE, FALSE, FALSE, NULL); g_free (str); str = g_strdup_printf ("%s.project.save-as", act); append_menu_item (menu, _("Save As"), (const gchar *)str, NULL, NULL, IMG_STOCK, FSAVEAS, FALSE, FALSE, FALSE, NULL); g_free (str); if (! atomes_from_libreoffice) { str = g_strdup_printf ("%s.project.close", act); append_menu_item (menu, _("Close"), (const gchar *)str, NULL, NULL, IMG_STOCK, FCLOSE, FALSE, FALSE, FALSE, NULL); g_free (str); } append_submenu (menu, _("Export"), port_section(act, pop_up, 0)); } return menu; } /*! \fn GMenu * import_section (gchar * act) \brief create the 'Import' submenu \param act "app" or "pop" key for the GAction */ GMenu * import_section (gchar * act) { GMenu * menu = g_menu_new (); append_submenu (menu, _("Import"), port_section(act, 0, 1)); return menu; } /*! \fn GMenu * quit_section (gchar * act) \brief create the 'Quit' menu item \param act "app" or "pop" key for the GAction */ GMenu * quit_section (gchar * act) { GMenu * menu = g_menu_new (); gchar * str = g_strdup_printf ("%s.program.quit", act); append_menu_item (menu, _("Quit"), (const gchar *)str, "Q", NULL, IMG_STOCK, FEXIT, FALSE, FALSE, FALSE, NULL); g_free (str); return menu; } /*! \fn GMenu * workspace_title () \brief create the 'Workspace' menu item */ GMenu * workspace_title () { GMenu * menu = g_menu_new (); append_menu_item (menu, _("Workspace"), "None", NULL, NULL, IMG_FILE, PACKAGE_TD, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * project_title (int pop_up, int proj) \brief create project title menu item \param pop_up from main app (0) or contextual (1) \param proj project id, if any (or -1) */ GMenu * project_title (int pop_up, int proj) { GMenu * menu = g_menu_new (); if (pop_up && nprojects && proj > -1) { gchar * str = g_strdup_printf ("%s", get_project_by_id(proj) -> name); append_menu_item (menu, str, "None", NULL, NULL, IMG_FILE, PACKAGE_TD, FALSE, FALSE, FALSE, NULL); g_free (str); } else { append_menu_item (menu, _("Project(s)"), "None", NULL, NULL, IMG_FILE, PACKAGE_TD, FALSE, FALSE, FALSE, NULL); } return menu; } /*! \fn GMenu * create_workspace_menu (gchar * act, int pop_up, int proj, int calc) \brief create atomes 'workspace' menu \param act "app" or "pop" key for the GAction \param pop_up from main app (0) or contextual (1) \param proj project id, if any (or -1) \param calc calculation id, if any (or -1) */ GMenu * create_workspace_menu (gchar * act, int pop_up, int proj, int calc) { GMenu * menu = g_menu_new (); if (! atomes_from_libreoffice) { g_menu_append_section (menu, NULL, (GMenuModel*)workspace_title()); g_menu_append_section (menu, NULL, (GMenuModel*)workspace_section(act, pop_up)); } g_menu_append_section (menu, NULL, (GMenuModel*)project_title(pop_up, proj)); g_menu_append_section (menu, NULL, (GMenuModel*)project_section(act, pop_up, proj, calc)); if (! atomes_from_libreoffice) { g_menu_append_section (menu, NULL, (GMenuModel*)import_section(act)); } g_menu_append_section (menu, NULL, (GMenuModel*)quit_section(act)); return menu; } /*! \fn GMenu * create_edit_menu () \brief create atomes 'edit' menu */ GMenu * create_edit_menu () { GMenu * menu = g_menu_new (); append_menu_item (menu, _("Chemistry and Physics"), "app.edit.chemistry", NULL, NULL, IMG_STOCK, DPROPERTIES, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, _("Box and Periodicity"), "app.edit.periodicity", NULL, NULL, IMG_STOCK, DPROPERTIES, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, _("Bond Cutoffs"), "app.edit.cutoffs", NULL, NULL, IMG_STOCK, DPROPERTIES, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * tool_box_section () \brief create toolboxes menu item */ GMenu * tool_box_section () { GMenu * menu = g_menu_new (); append_menu_item (menu, _("Toolboxes"), "app.analyze.tool-box", "T", NULL, IMG_STOCK, PAGE_SETUP, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * create_analyze_menu () \brief create atomes 'analyze' menu */ GMenu * create_analyze_menu () { GMenu * menu = g_menu_new (); gchar * str; int i; for (i=0; iP", NULL, IMG_STOCK, ABOUT, FALSE, FALSE, FALSE, NULL); if (! atomes_from_libreoffice) append_menu_item (menu, _("Preferences"), "app.help.preferences", NULL, NULL, IMG_STOCK, ABOUT, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, _("Shortcuts"), "app.help.shortcuts", NULL, NULL, IMG_STOCK, ABOUT, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, _("About"), "app.help.about", "A", NULL, IMG_STOCK, ABOUT, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * atomes_menu_bar () \brief create atomes menu bar */ GMenu * atomes_menu_bar () { GMenu * menu = g_menu_new (); append_submenu (menu, _("Workspace"), create_workspace_menu("app", 0, -1, -1)); append_submenu (menu, _("Edit"), create_edit_menu()); append_submenu (menu, _("Analyze"), create_analyze_menu()); append_submenu (menu, _("Help"), create_help_menu()); return menu; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void atomes_popup_menu (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse right event to popup the main application 'workspace' menu \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void atomes_popup_menu (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { if (gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture) == GDK_BUTTON_SECONDARY) { GtkWidget * popover = work_menu (-1, -1); gtk_widget_set_parent (popover, MainWindow); pop_menu_at_pointer (popover, x, y); } } /*! \fn G_MODULE_EXPORT gboolean on_atomes_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) \brief the GtkEventController for the keyboard button press event \param self the GtkEventController sending the signal \param keyval the \param keycode the key pressed \param state the keyboard modifier (Ctrl, Alt ... if any) \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_atomes_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) { atomes_key_pressed (keyval, state); return TRUE; } #endif /*! \fn GtkWidget * create_main_window (GApplication * atomes) \brief create the main application window \param atomes the initial GtkApplication */ GtkWidget * create_main_window (GApplication * atomes) { int i; THETD = gdk_pixbuf_new_from_file (PACKAGE_TD, NULL); #ifdef GTK3 gtk_window_set_default_icon (THETD); #endif THEMO = gdk_pixbuf_new_from_file (PACKAGE_MOL, NULL); THEBD = gdk_pixbuf_new_from_file (g_build_filename (PACKAGE_PREFIX, "pixmaps/bd.png", NULL), NULL); SETTING = gdk_pixbuf_new_from_file (PACKAGE_PRO, NULL); SETTINGS = gdk_pixbuf_new_from_file (PACKAGE_SET, NULL); OGL = gdk_pixbuf_new_from_file (PACKAGE_OGL, NULL); OGLM = gdk_pixbuf_new_from_file (PACKAGE_OGLM, NULL); OGLC = gdk_pixbuf_new_from_file (PACKAGE_OGLC, NULL); GtkWidget * window = gtk_application_window_new (GTK_APPLICATION(atomes)); gtk_window_set_title (GTK_WINDOW(window), PACKAGE); gtk_window_set_resizable (GTK_WINDOW(window), TRUE); gtk_widget_set_size_request (window, 900, 450); for (i=0; i Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file callbacks.c * @short General callbacks \n Functions to open and close files * @author Sébastien Le Roux */ /* * This file: 'callbacks.c' * * Contains: * - General callbacks - The functions to open and close files * * List of functions: int signal_error (gchar * file, gchar * func, int error_line, int error_id); int open_save (FILE * fp, int act, int wid, int pid, int aid, gchar * pfile); int open_save_workspace (FILE * fp, int act); int prep_chem_data (); int to_read_trj_or_vas (int ff); int read_npt_data (); int open_coordinate_file (int id); void quit_gtk (); void update_error_trace (gchar * file, gchar * func, int trace_line); void open_this_proj (gpointer data, gpointer user_data); void run_project (); void apply_project (gboolean showtools); void open_this_isaacs_xml_file (gchar * profile, int ptoc, gboolean visible); void to_read_pos (); void check_read_sa (); void update_sa_info (int sid); void prepare_sp_box (); void cell_data_from_pdb_ (float * a, float * b, float * c, float * alp, float * bet, float * gam); void open_this_coordinate_file (int format, gchar * proj_name); G_MODULE_EXPORT void on_close_workspace (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void run_on_open_save_active (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_on_open_save_active (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void on_open_save_activate (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_save_as_activate (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void run_on_isaacs_port (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_on_isaacs_port (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void on_isaacs_port (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void update_sa (GtkEntry * res, gpointer data); G_MODULE_EXPORT void changed_spec_combo (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void update_at_sp (GtkEntry * res, gpointer data); G_MODULE_EXPORT void run_to_read_trj_or_vas (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void run_read_npt_data (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_read_npt_data (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_on_coord_port (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_on_coord_port (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void on_coord_port (GtkWidget * widg, gpointer data); */ #include "global.h" #include "interface.h" #include "callbacks.h" #include "bind.h" #include "project.h" #include "workspace.h" #include "glwindow.h" #include "glview.h" #include "atom_edit.h" #include "cell_edit.h" #include "readers.h" char * coord_files[NCFORMATS+1] = {i18n("XYZ file"), i18n("XYZ file - NPT"), i18n("Chem3D file"), i18n("CPMD trajectory"), i18n("CPMD trajectory - NPT"), i18n("VASP trajectory"), i18n("VASP trajectory - NPT"), i18n("PDB file"), i18n("PDB file"), i18n("Cryst. information (crystal build) - single configuration"), i18n("Cryst. information (crystal build) - multiple configurations"), i18n("Cryst. information (symmetry positions) - single configuration"), i18n("DL-POLY HISTORY file"), i18n("ISAACS Project File")}; char * coord_files_ext[NCFORMATS+1]={"xyz", "xyz", "c3d", "trj", "trj", "xdatcar", "xdatcar", "pdb", "ent", "cif", "cif", "cif", "hist", "ipf"}; char ** las; extern void simple_image_render(); extern G_MODULE_EXPORT void on_edit_activate (GtkWidget * widg, gpointer data); extern gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); extern const gchar * dfi[2]; extern int open_cif_file (gchar * filename); extern int open_coord_file (gchar * filename, int fti); extern int open_history_file (gchar * filename); extern int open_cell_file (int format, gchar * filename); extern double get_z_from_periodic_table (gchar * lab); /*! \fn G_MODULE_EXPORT void on_close_workspace (GtkWidget * widg, gpointer data) \brief close the active workspace \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_close_workspace (GtkWidget * widg, gpointer data) { int i, j; gboolean close = FALSE; j = GPOINTER_TO_INT (data); if (j == 1) { close = ask_yes_no (_("Close workspace ?"), _("Are you sure ?"), GTK_MESSAGE_QUESTION, MainWindow); } else { close = TRUE; } if (close) { j = nprojects-1; for (i=j; i>-1; i--) { #ifdef DEBUG g_debug ("CLOSING:: %d", i); #endif on_close_activate (NULL, GINT_TO_POINTER(i)); } } } gboolean save = TRUE; atomes_error * project_error = NULL; atomes_error_signal errors_messages[] = {{ ERROR_RW, i18n("I/O error")}, { ERROR_PROJECT, i18n("project information")}, { ERROR_CURVE, i18n("curve(s) information")}, { ERROR_IMAGE, i18n("OpenGL information")}, { ERROR_ATOM_A, i18n("atom's data - A")}, { ERROR_ATOM_B, i18n("atom's data - B")}, { ERROR_UPDATE, i18n("updating project")}, { ERROR_NO_WAY, i18n("this should not happen")}, { ERROR_COORD, i18n("coordination data")}, { ERROR_RINGS, i18n("ring(s) data")}, { ERROR_CHAINS, i18n("chain(s) data")}, { ERROR_MOL, i18n("molecule(s) data")}, { ERROR_ANA, i18n("analysis data")}, { ERROR_QM, i18n("ab-initio data")}, { ERROR_FIELD, i18n("classical data")}}; /*! \fn int signal_error (gchar * file, gchar * func, int error_line, int error_id) \brief store atomes files I/O error information \param file the file where the error occured \param func the function where the error occured \param error_line the line at witch the error occured \param error_id the error ID */ int signal_error (const char * file, const char * func, int error_line, int error_id) { project_error -> error_file = g_strdup_printf("%s", file); project_error -> error_func = g_strdup_printf("%s", func); project_error -> error_line = error_line; project_error -> error_signal = errors_messages[error_id-1]; return error_line; } /*! \fn void update_error_trace (gchar * file, gchar * func, int trace_line) \brief update atomes files I/O error traceback \param file the file where the call was made \param func the function the call was made to \param error_line the line at witch the call was made */ void update_error_trace (const char * file, const char * func, int trace_line) { gchar * intro = "\n"; gchar * file_part; gchar * func_part; gchar * line_part; gchar * tab_part = NULL; gchar * tmp_trace; int i; if (project_error -> trace_id) { tmp_trace = g_strdup_printf ("%s\n%s", project_error -> error_trace, intro); g_free (project_error -> error_trace); } else { tmp_trace = g_strdup_printf ("%s", intro); } for (i=0; i trace_id+1; i++) { tab_part = (tab_part) ? g_strdup_printf ("%s\t\t", tab_part) : g_strdup_printf ("\t\t"); } file_part = g_strdup_printf (_("File : %s\n"), file); func_part = g_strdup_printf (_("Function: %s()\n"), func); line_part = g_strdup_printf (_("Line : %d"), trace_line); project_error -> error_trace = g_strdup_printf ("%s%s%s%s%s%s%s", tmp_trace, tab_part, file_part, tab_part, func_part, tab_part, line_part); g_free (tmp_trace); g_free (tab_part); g_free (file_part); g_free (func_part); g_free (line_part); project_error -> trace_id ++; } /*! \fn int open_save (FILE * fp, int act, int wid, int pid, int aid, gchar * pfile) \brief open or save project file \param fp the file pointer \param act 0 = read, 1 = write \param wid read or save workspace (1/0) \param pid the project id \param aid the active project id \param pfile the file name */ int open_save (FILE * fp, int act, int wid, int pid, int aid, gchar * pfile) { int j; project_error = g_malloc0(sizeof*project_error); gchar * tmp_err; if (act == 0) { reading_input = TRUE; j = open_project (fp, wid); reading_input = FALSE; if (j != OK) { tmp_err = g_strdup_printf ("%s", get_project_by_id (pid) -> name); to_close_this_project (aid, active_project); } else { get_project_by_id (pid) -> projfile = g_strdup_printf ("%s", pfile); if (! atomes_render_image) { add_project_to_workspace (); prep_calc_actions (); } else { simple_image_render (); } } } else { j = save_project (fp, get_project_by_id(pid), wid); if (j == OK) { if (pfile != NULL) get_project_by_id(pid) -> projfile = g_strdup_printf ("%s", pfile); } else { tmp_err = g_strdup_printf ("%s", get_project_by_id(pid) -> name); } } if (j != OK) { gchar * err; if (pfile != NULL && ! wid) { err = g_strdup_printf (_("Impossible to %s project file: \n\n" "\t\t%s\n\n" "\tError %s %s\n" "\tProject file version: %1.1f\n"), (! act) ? _("open") : _("save"), pfile, (! act) ? _("reading") : _("saving"), _(project_error -> error_signal.message), project_file_version); } else if (wid) { err = g_strdup_printf (_("Impossible to %s workspace file.\n" "Error with project: \n\n" "\t\t%s\n\n" "\tError %s %s\n" "\tProject file version: %1.1f\n"), (! act) ? _("open") : _("save"), tmp_err, (! act) ? _("reading") : _("saving"), _(project_error -> error_signal.message), project_file_version); } show_error_with_trace (err, project_error, act, 0, MainWindow); g_free (tmp_err); g_free (err); } g_free (project_error); project_error = NULL; return j; } /*! \fn void quit_gtk () \brief Leave the application */ void quit_gtk () { if (atomes_from_libreoffice) { // Update image for LibreOffice document atomes_render_image = TRUE; simple_image_render (); atomes_render_image = FALSE; // Mandatory saving of the project file FILE * fp = fopen (projfile, dfi[1]); open_save (fp, 1, 1, 0, 0, NULL); fclose (fp); to_close_this_project (0, active_project); } else { int i; for (i=nprojects-1; i>=0; i--) to_close_this_project (i, get_project_by_id(i)); } profree_ (); g_application_quit (G_APPLICATION(AtomesApp)); } /*! \fn int open_save_workspace (FILE * fp, int act) \brief open or save the active workspace \param fp the file to read or write \param act the action (0 = read, 1 = write) */ int open_save_workspace (FILE * fp, int act) { int i, j, k, l; gchar * ver; /*PangoFontDescription * font_desc; GtkTextBuffer * buffer; GtkTextIter bStart; GtkTextIter bEnd;*/ // First 2 lines for compatibility issues if (act == 0) { if (fread (& i, sizeof(int), 1, fp) != 1) return 1; ver = g_malloc0(i*sizeof*ver); if (fread (ver, sizeof(char), i, fp) != i) return 1; // test on ver for version ? g_free (ver); if (fread (& i, sizeof(int), 1, fp) != 1) return 1; } else { i = 1; ver = g_strdup_printf ("%%\n%% Workspace file v-%1d.0\n%%\n", i); i = strlen (ver); if (fwrite (& i, sizeof(int), 1, fp) != 1) return 1; if (fwrite (ver, sizeof(char), i, fp) != i) return 1; g_free (ver); i = 0; for (j=0; j natomes) i++; if (fwrite (& i, sizeof(int), 1, fp) != 1) return 1; } if (i > 0) { for (j=0; j natomes) { l = open_save (fp, act, 1, j, k, NULL); if (l != 0) return l; } } return 0; } else { return -1; } } /*! \fn void open_this_proj (gpointer data, gpointer user_data) \brief Open many projects, one at a time \param data \param user_data */ void open_this_proj (gpointer data, gpointer user_data) { FILE * fp = fopen (data, dfi[0]); int pactive = activep; init_project (FALSE); reading_project = TRUE; open_save (fp, 0, 0, activew, pactive, data); reading_project = FALSE; fclose (fp); activew = activep; } tint osp; gboolean run_os; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_on_open_save_active (GtkNativeDialog * info, gint response_id, gpointer data) \brief open or save an atomes file - running the dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_open_save_active (GtkNativeDialog * info, gint response_id, gpointer data) { GListModel * projlist; GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_on_open_save_active (GtkDialog * info, gint response_id, gpointer data) \brief open or save an atomes file - running the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_open_save_active (GtkDialog * info, gint response_id, gpointer data) { GSList * projlist = NULL; GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif FILE * fp = NULL; gchar * err; gboolean io = FALSE; const gchar * mess[2]={i18n("reading"),i18n("saving")}; if (response_id == GTK_RESPONSE_ACCEPT) { if (osp.a == 0) { projlist = file_chooser_get_file_names (chooser); } else { projfile = file_chooser_get_file_name (chooser); } if (osp.a > 1) { workspacefile = g_strdup_printf ("%s", projfile); } io = TRUE; } if (run_os) { #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } if (io) { if (osp.a > 0) { fp = fopen (projfile, dfi[osp.b]); } if (osp.a == 0) { #ifdef GTK3 g_slist_foreach (projlist, open_this_proj, NULL); g_slist_free (projlist); #else int i; for (i=0; i 0) { fclose (fp); g_free (projfile); } } } /*! \fn G_MODULE_EXPORT void on_open_save_activate (GtkWidget * widg, gpointer data) \brief open or save an atomes file - prepare the dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_open_save_activate (GtkWidget * widg, gpointer data) { int i, j, k; gint action; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif GtkFileChooser * chooser; GtkFileFilter * filter1, * filter2; const gchar * str[4]={i18n("Open Project File(s)"), i18n("Save Project File"), i18n("Open Workspace"), i18n("Save Workspace")}; const gchar * res[2]={i18n("Open"), i18n("Save")}; const gchar * file_name[2]={i18n("Project file (*.apf)"), i18n("Workspace file (*.awf)")}; const gchar * file_ext[2]={"*.apf", "*.awf"}; GtkFileChooserAction act[2]={GTK_FILE_CHOOSER_ACTION_OPEN, GTK_FILE_CHOOSER_ACTION_SAVE}; project * this_proj = get_project_by_id (activew); int pactive = activep; i = GPOINTER_TO_INT (data); run_os = FALSE; if (i == 1 || i == 3) { j = 1; } else { j = 0; } action = 0; if (i == 2 && ! newspace) { show_info (_("A workspace is already open !"), 0, MainWindow); } else if (i == 3 && newspace) { show_warning (_("Empty workspace ... nothing to be saved\n"), MainWindow); } else if (i == 3) { for (k=0; k natomes) action = 1; if (! action) { show_warning (_("Workspace contains only empty projects ... nothing to be saved\n"), MainWindow); } } else if (i == 1 && nprojects == 0) { show_warning (_("No project open ... nothing to be saved\n"), MainWindow); } else if (i == 1 && ! this_proj -> natomes) { show_warning (_("Empty project ... nothing to be saved\n"), MainWindow); } else { action = 1; } if (action) { if (nprojects == 0) { run_os = TRUE; } else { if (i == 1) { if (g_strcmp0(this_proj -> projfile, "(null)") == 0) this_proj -> projfile = NULL; if (save && this_proj -> projfile != NULL) { run_os = FALSE; projfile = g_strdup_printf ("%s", this_proj -> projfile); } else { run_os = TRUE; projfile = NULL; } } else if (i == 3) { if (g_strcmp0(workspacefile, "(null)") == 0) workspacefile = NULL; if (save && workspacefile != NULL) { run_os = FALSE; projfile = g_strdup_printf ("%s", workspacefile); } else { run_os = TRUE; } } else { run_os = TRUE; } } gchar * tmp_str; if (i == 0) { tmp_str = g_strdup_printf (_("%s - New project"), _(str[i])); } else if (i == 1) { tmp_str = g_strdup_printf ("%s - %s", _(str[i]), prepare_for_title(this_proj -> name)); } else { tmp_str = g_strdup_printf ("%s", _(str[i])); } info = create_file_chooser (tmp_str, GTK_WINDOW(MainWindow), act[j], _(res[j])); chooser = GTK_FILE_CHOOSER (info); g_free (tmp_str); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif if (i == 1 || i == 3) gtk_file_chooser_set_create_folders (chooser, TRUE); if (nprojects == 0 || i == 0) { file_chooser_set_current_folder (chooser); if (i == 0) { gtk_file_chooser_set_select_multiple (chooser, TRUE); } } else { if (i == 1) { if (projfile != NULL) { file_chooser_set_current_folder (chooser); gtk_file_chooser_set_current_name (chooser, projfile); } else { if (! file_chooser_set_file_name (chooser, g_strdup_printf ("%s.apf", prepare_for_title(this_proj -> name)))) goto end; } } else if (i == 3) { if (workspacefile != NULL) { file_chooser_set_current_folder (chooser); gtk_file_chooser_set_current_name (chooser, g_strdup_printf ("%s", workspacefile)); } else { if (! file_chooser_set_file_name (chooser, "New-Workspace.awf")) goto end; } } } filter1 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter1), _(file_name[i/2])); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter1), file_ext[i/2]); gtk_file_chooser_add_filter (chooser, filter1); filter2 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter2), _("All files (*)")); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter2), "*"); gtk_file_chooser_add_filter (chooser, filter2); osp.a = i; osp.b = j; osp.c = pactive; if (run_os) { #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_on_open_save_active), this_proj); #else run_this_gtk_dialog (info, G_CALLBACK(run_on_open_save_active), this_proj); #endif } else { #ifdef GTK4 run_on_open_save_active ((GtkNativeDialog *)info, GTK_RESPONSE_ACCEPT, this_proj); #else run_on_open_save_active ((GtkDialog *)info, GTK_RESPONSE_ACCEPT, this_proj); #endif } } activew = activep; update_insert_combos (); end:; } /*! \fn G_MODULE_EXPORT void on_save_as_activate (GtkWidget * widg, gpointer data) \brief open or save, choosing a file name \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_save_as_activate (GtkWidget * widg, gpointer data) { save = FALSE; on_open_save_activate (widg, data); save = TRUE; } /*! \fn void run_project () \brief send project data to Fortran90 */ void run_project () { if (! active_project -> run) { if (! active_project -> analysis) { init_atomes_analysis (active_project, TRUE); } int i, j; j = (active_cell -> npt) ? active_project -> steps : 1; for (i=0; i box[i].vect, active_cell -> box[i].param[0], active_cell -> box[i].param[1], & active_cell -> ltype, & active_cell -> frac, & active_cell -> pbc); } to_read_pos (); prep_pos_ (& active_cell -> pbc, & active_cell -> frac); active_project -> dmtx = FALSE; active_project -> run = 1; } if (active_cell -> frac) active_cell -> frac = 0; } /*! \fn void apply_project (gboolean showtools) \brief get project ready for calculation and initialize the OpenGL window \param showtools */ void apply_project (gboolean showtools) { if (active_project -> natomes) { run_project (); initcutoffs (active_chem, active_project -> nspec); } prep_model (active_project -> id); if (showtools && ! atomes_render_image) show_the_widgets (curvetoolbox); } /*! \fn void open_this_isaacs_xml_file (gchar * profile, int ptoc, gboolean visible) \brief open an ISAACS XML file \param profile the XML file name \param ptoc the previous active project \param visible read from the command line (FALSE), from the gui (TRUE) */ void open_this_isaacs_xml_file (gchar * profile, int ptoc, gboolean visible) { if (! open_xml (profile)) { active_project -> name = substitute_string (g_path_get_basename (profile), ".ipf", NULL); on_edit_activate (NULL, GINT_TO_POINTER(3)); on_edit_activate (NULL, GINT_TO_POINTER(5)); active_project_changed (activep); frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; apply_project (TRUE); active_project_changed (activep); add_project_to_workspace (); if (visible) show_info (_("ISAACS project file (XML) successfully opened"), 0, MainWindow); } else { to_close_this_project (ptoc, active_project); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_on_isaacs_port (GtkNativeDialog * info, gint response_id, gpointer data) \brief open or write ISAACS XML file - running the dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_isaacs_port (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_on_isaacs_port (GtkDialog * info, gint response_id, gpointer data) \brief open or write ISAACS XML file - running the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_isaacs_port (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { if (osp.a == 0 || nprojects == 0) init_project (TRUE); projfile = file_chooser_get_file_name (chooser); #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif if (osp.a == 0) { open_this_isaacs_xml_file (projfile, osp.b, TRUE); } else if (osp.a == 1) { active_project_changed (activew); if (write_xml (projfile) == 0) { show_error (_("Impossible to write the IPF file\n"), 0, MainWindow); } active_project_changed (osp.b); } g_free (projfile); } else { #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } } /*! \fn G_MODULE_EXPORT void on_isaacs_port (GtkWidget * widg, gpointer data) \brief open or write ISAACS XML file - prepare the dialog \param widg the GtkWidget sending the signal \param data the associated data pointer (int *) open = 0, save = 1 */ G_MODULE_EXPORT void on_isaacs_port (GtkWidget * widg, gpointer data) { int i, j; gboolean action; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif GtkFileChooser * chooser; GtkFileFilter * filter[2]; const gchar * file_ext[2]={"*.ipf", "*"}; const gchar * file_type[2]={i18n("IPF file (*.ipf)"), i18n("All files (*)")}; const gchar * str[2]={i18n("Import ISAACS Project File"), i18n("Export ISAACS Project File")}; const gchar * res[2]={i18n("Open"), i18n("Save")}; GtkFileChooserAction act[2]={GTK_FILE_CHOOSER_ACTION_OPEN, GTK_FILE_CHOOSER_ACTION_SAVE}; int pactive = activep; i = GPOINTER_TO_INT (data); action = (i && ! nprojects) ? ask_yes_no (_("Save an empty project ?"), _("Do you want to save an empty project ?"), GTK_MESSAGE_QUESTION, MainWindow) : TRUE; if (action) { info = create_file_chooser (_(str[i]), GTK_WINDOW(MainWindow), act[i], _(res[i])); chooser = GTK_FILE_CHOOSER (info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif if (i) gtk_file_chooser_set_create_folders (chooser, TRUE); for (j=0; j<2; j++) { filter[j] = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter[j]), _(file_type[j])); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter[j]), file_ext[j]); gtk_file_chooser_add_filter (chooser, filter[j]); } file_chooser_set_current_folder (chooser); osp.a = i; osp.b = pactive; #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_on_isaacs_port), NULL); #else run_this_gtk_dialog (info, G_CALLBACK(run_on_isaacs_port), NULL); #endif } activew = activep; update_insert_combos (); } /*! \fn void to_read_pos () \brief send atomic coordinates to Fortran90 */ void to_read_pos () { int i, j, k; double * x, * y, * z; double lat[3]; x = allocdouble (active_project -> steps*active_project -> natomes); y = allocdouble (active_project -> steps*active_project -> natomes); z = allocdouble (active_project -> steps*active_project -> natomes); k = 0; lat[0] = lat[1] = lat[2] = 0.0; if (active_cell -> crystal) { for (i=0; i<3; i++) { for (j=0; j<3; j++) lat[i] -= active_box -> vect[j][i]/2.0; } } for (i=0; i steps; i++) { for (j=0; j natomes; j++) { x[k] = active_project -> atoms[i][j].x + lat[0]; y[k] = active_project -> atoms[i][j].y + lat[1]; z[k] = active_project -> atoms[i][j].z + lat[2]; k ++; } } read_pos_ (x, y, z); g_free (x); x = NULL; g_free (y); y = NULL; g_free (z); z = NULL; } GtkWidget * read_box; GtkWidget * all_sp_box = NULL; GtkWidget * sa_lab[2]; GtkWidget * sa_entry[2]; GtkWidget * read_this; int read_spec; /*! \fn void check_read_sa () \brief reading CPMD/VASP trajectory, testing parameters to active the read capabilty */ void check_read_sa () { int i, j, k; i = j = 0; for (k=0; k nspec; k++) { i += this_reader -> nsps[k]; j += (this_reader -> label[k]) ? 1: 0; } if (i == this_reader -> natomes && j == this_reader -> nspec) { widget_set_sensitive (read_this, 1); } else { widget_set_sensitive (read_this, 0); } } /*! \fn void update_sa_info (int sid) \brief reading CPMD/VASP trajectory, update chemical species info \param sid the species id */ void update_sa_info (int sid) { gchar * str = g_strdup_printf (_("Label of atomic spec. N° %d:"), sid+1); gtk_label_set_text (GTK_LABEL(sa_lab[0]), str); g_free (str); if (this_reader -> label[sid]) { update_entry_text (GTK_ENTRY(sa_entry[0]), this_reader -> label[sid]); str = g_strdup_printf (_("Number of %s atom(s):"), this_reader -> label[sid]); } else { update_entry_text (GTK_ENTRY(sa_entry[0]), ""); str = g_strdup_printf (_("Number of atom(s) for spec. N° %d:"), sid+1); } gtk_label_set_text (GTK_LABEL(sa_lab[1]), str); g_free (str); if (this_reader -> nsps[sid]) { update_entry_int (GTK_ENTRY(sa_entry[1]), this_reader -> nsps[sid]); } else { update_entry_text (GTK_ENTRY(sa_entry[1]), ""); } read_spec = sid; } /*! \fn G_MODULE_EXPORT void update_sa (GtkEntry * res, gpointer data) \brief reading CPMD/VASP trajectory, set the number of chemical species \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_sa (GtkEntry * res, gpointer data) { int i, v; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); if (i == 0) { if (this_reader -> label[read_spec]) g_free (this_reader -> label[read_spec]); this_reader -> label[read_spec] = NULL; this_reader -> label[read_spec] = g_strdup_printf ("%s", m); update_sa_info (read_spec); } else { v= (int)string_to_double ((gpointer)m); if (v > 0) { this_reader -> nsps[read_spec] = v; } update_entry_int (res, this_reader -> nsps[read_spec]); } check_read_sa (); } /*! \fn G_MODULE_EXPORT void changed_spec_combo (GtkComboBox * box, gpointer data) \brief reading CPMD/VASP trajectory, change the active species \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_spec_combo (GtkComboBox * box, gpointer data) { update_sa_info (combo_get_active ((GtkWidget *)box)); } /*! \fn void prepare_sp_box () \brief eading CPMD/VASP trajectory, prepare the species combo box */ void prepare_sp_box () { int i; if (all_sp_box) { for (i=0; i<2; i++) { sa_lab[i] = destroy_this_widget(sa_lab[i]); sa_entry[i] = destroy_this_widget(sa_entry[i]); } all_sp_box = destroy_this_widget(all_sp_box); } widget_set_sensitive (read_this, 0); all_sp_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, read_box, all_sp_box, FALSE, FALSE, 20); GtkWidget * hbox; add_box_child_start (GTK_ORIENTATION_VERTICAL, all_sp_box, markup_label(_("Chemical species info:"), 200, -1, 0.5, 0.5), FALSE, FALSE, 0); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, all_sp_box, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Species: "), 100, -1, 0.0, 0.5), FALSE, FALSE, 5); GtkWidget * combo; combo = create_combo (); gchar * str; for (i=0; i nspec; i++) { str = g_strdup_printf ("N°%d", i+1); gtk_combo_box_text_append_text ((GtkComboBoxText *)combo, str); g_free (str); } combo_set_active (combo, 0); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(changed_spec_combo), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 5); for (i=0; i<2; i++) { hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, all_sp_box, hbox, FALSE, FALSE, 5); sa_lab[i] = markup_label("", 250, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sa_lab[i], FALSE, FALSE, 5); sa_entry[i] = create_entry (G_CALLBACK(update_sa), 100, 15, FALSE, GINT_TO_POINTER(i)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sa_entry[i], FALSE, FALSE, 0); } show_the_widgets (read_box); update_sa_info (0); } /*! \fn G_MODULE_EXPORT void update_at_sp (GtkEntry * res, gpointer data) \brief reading CPMD/VASP trajectory, changing number of atomes or species \param res the GtkEntry sending the signal \param data the associated data pointer (int *) 0 = atomes, 1 = species */ G_MODULE_EXPORT void update_at_sp (GtkEntry * res, gpointer data) { int i, v; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); gboolean up = FALSE; v = (int)string_to_double ((gpointer)m); if (i == 0) { this_reader -> natomes = (v > 0) ? v : 0; update_entry_int (res, this_reader -> natomes); } else { if (v != this_reader -> nspec) { this_reader -> nspec = (v > 0) ? v : 0; if (this_reader -> nspec) { if (this_reader -> nsps) g_free (this_reader -> nsps); this_reader -> nsps = allocint (v); if (this_reader -> z) g_free (this_reader -> z); this_reader -> z = allocdouble (v); if (this_reader -> label) g_free (this_reader -> label); this_reader -> label = g_malloc0(v*sizeof*this_reader -> label); } up = TRUE; } update_entry_int (res, this_reader -> nspec); } if (up) prepare_sp_box(); } int reading_vas_trj; /*! \fn int prep_chem_data () \brief prepare chemical data to read CPMD/VASP file */ int prep_chem_data () { int i; double z; for (i=0; i nspec; i++) { z = get_z_from_periodic_table (this_reader -> label[i]); if (! z) return 0; this_reader -> z[i] = z; } return 1; } /*! \fn G_MODULE_EXPORT void run_to_read_trj_or_vas (GtkDialog * dialog, gint response_id, gpointer data) \brief reading CPMD/VASP trajectory: run the dialog \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_to_read_trj_or_vas (GtkDialog * dialog, gint response_id, gpointer data) { int id = GPOINTER_TO_INT(data); switch (response_id) { case GTK_RESPONSE_APPLY: if (prep_chem_data()) { reading_vas_trj = open_coord_file (active_project -> coordfile, id); } else { reading_vas_trj = 3; } break; default: reading_vas_trj = 3; break; } if (all_sp_box) { int i; for (i=0; i<2; i++) { sa_lab[i] = destroy_this_widget(sa_lab[i]); sa_entry[i] = destroy_this_widget(sa_entry[i]); } all_sp_box = destroy_this_widget(all_sp_box); } destroy_this_dialog (dialog); } /*! \fn int to_read_trj_or_vas (int ff) \brief reading CPMD/VASP trajectory - prepare the dialog \param ff file type */ int to_read_trj_or_vas (int ff) { int i; gchar * rlabel[2]={i18n("Total number of atom(s):"), i18n("Number of chemical species:")}; GtkWidget * dialog = dialogmodal (_("Reading CPMD / VASP trajectory"), GTK_WINDOW(MainWindow)); read_this = gtk_dialog_add_button (GTK_DIALOG (dialog), _("Apply"), GTK_RESPONSE_APPLY); GtkWidget * vbox = dialog_get_content_area (dialog); widget_set_sensitive (read_this, 0); GtkWidget * rentry; GtkWidget * hbox; for (i=0; i<2; i++) { hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(rlabel[i]), 200, -1, 0.0, 0.5), FALSE, FALSE, 5); rentry = create_entry (G_CALLBACK(update_at_sp), 100, 15, FALSE, GINT_TO_POINTER(i)); update_entry_text (GTK_ENTRY(rentry), ""); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, rentry, FALSE, FALSE, 5); } read_box = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, read_box, FALSE, FALSE, 5); run_this_gtk_dialog (dialog, G_CALLBACK(run_to_read_trj_or_vas), GINT_TO_POINTER(ff)); return reading_vas_trj; } /*! \fn void cell_data_from_pdb_ (float * a, float * b, float * c, float * alp, float * bet, float * gam) \brief update cell parameters from the data in the PDB file \param a a \param b b \param c c \param alp alpha \param bet beta \param gam gamma */ void cell_data_from_pdb_ (float * a, float * b, float * c, float * alp, float * bet, float * gam) { active_box -> param[0][0] = * a; active_box -> param[0][1] = * b; active_box -> param[0][2] = * c; active_box -> param[1][0] = * alp; active_box -> param[1][1] = * bet; active_box -> param[1][2] = * gam; // In a PDB file it is required to turn off PBC // The box usually barely encompass the molecule active_cell -> pbc = 0; active_cell -> ltype = 1; } int npt_selection; gchar * npt_file; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_read_npt_data (GtkNativeDialog * info, gint response_id, gpointer data) \brief read NPT data associated with atomic coordinates: run the dialog GTK4 callback \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_read_npt_data (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_read_npt_data (GtkDialog * info, gint response_id, gpointer data) \brief read NPT data associated with atomic coordinates: run the dialog GTK3 callback \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_read_npt_data (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { npt_file = file_chooser_get_file_name (chooser); npt_selection = iask (_("Please select the file format of the NPT cell data"), _("Select format:"), 6, MainWindow); } else { npt_selection = -1; } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } /*! \fn int read_npt_data () \brief read NPT data associated with atomic coordinates: setup the dialog */ int read_npt_data () { GtkFileFilter * filter[2]; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif info = create_file_chooser (_("Read cell data for NPT molecular dynamics"), GTK_WINDOW(MainWindow), GTK_FILE_CHOOSER_ACTION_OPEN, _("Open")); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); filter[0] = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter[0]), _("DAT files (*.dat)")); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter[0]), "*.dat"); gtk_file_chooser_add_filter (chooser, filter[0]); filter[1] = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter[1]), _("All files (*)")); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter[1]), "*"); gtk_file_chooser_add_filter (chooser, filter[1]); npt_file = NULL; #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_read_npt_data), NULL); #else run_this_gtk_dialog (info, G_CALLBACK(run_read_npt_data), NULL); #endif return (npt_selection < 0) ? 0 : open_cell_file (npt_selection, npt_file); } /*! \fn int open_coordinate_file (int id) \brief try to open coordinate file, type is based of id \param id file type to open */ int open_coordinate_file (int id) { struct timespec sta_time; struct timespec sto_time; int result; int length = strlen(active_project -> coordfile); clock_gettime (CLOCK_MONOTONIC, & sta_time); this_reader = g_malloc0(sizeof*this_reader); // Set default message type to warning this_reader -> mid = 1; switch (id) { case 0: // XYZ file result = open_coord_file (active_project -> coordfile, id); // result = read_xyz_ (active_project -> coordfile, & length, & npt); break; case 1: // XYZ file NPT result = open_coord_file (active_project -> coordfile, id); // result = read_xyz_ (active_project -> coordfile, & length, & npt); if (! result) result = read_npt_data (); break; case 2: // Chem3D file result = open_coord_file (active_project -> coordfile, id); // result = read_c3d_ (active_project -> coordfile, & length); break; case 3: // CPMD TRJ file result = to_read_trj_or_vas (id); break; case 4: // CPMD TRJ file NPT result = to_read_trj_or_vas (id); if (! result) result = read_npt_data (); break; case 5: // VASP XDATCAR file result = to_read_trj_or_vas (id); break; case 6: // VASP XDATCAR file NPT result = to_read_trj_or_vas (id); if (! result) result = read_npt_data (); break; case 7: // PDB file // result = open_coord_file (active_project -> coordfile, id); result = read_pdb_ (active_project -> coordfile, & length); break; case 8: // PDB file // result = open_coord_file (active_project -> coordfile, id); result = read_pdb_ (active_project -> coordfile, & length); break; case 9: // CIF file building the crystal result = open_coord_file (active_project -> coordfile, 9); break; case 10: // CIF file using symmetry positions result = open_coord_file (active_project -> coordfile, 10); break; case 11: // CIF file using symmetry positions result = open_coord_file (active_project -> coordfile, 11); break; case 12: // DL-POLY file result = open_coord_file (active_project -> coordfile, 12); break; default: result = 2; break; } clock_gettime (CLOCK_MONOTONIC, & sto_time); g_print ("Time to read atomic coordinates: %s\n", calculation_time(FALSE, get_calc_time (sta_time, sto_time))); if (this_reader) { if (this_reader -> msg && (! silent_input || cif_use_symmetry_positions)) { gchar * info = g_strdup_printf ("%s", this_reader -> info[0]); int i; for (i=1; i msg; i++) { info = g_strdup_printf ("%s\n%s", info, this_reader -> info[i]); } switch (this_reader -> mid) { case 0: show_error (info, 0, MainWindow); break; case 1: show_warning (info, MainWindow); break; } g_free (info); } if (this_reader) { if (this_reader -> info) g_free (this_reader -> info); if (this_reader -> z) g_free (this_reader -> z); if (this_reader -> nsps) g_free (this_reader -> nsps); if (this_reader -> dummy) g_free (this_reader -> dummy); if (this_reader -> label) g_free (this_reader -> label); if (this_reader -> object_list) g_free (this_reader -> object_list); if (this_reader -> u_atom_list) g_free (this_reader -> u_atom_list); if (this_reader -> coord) g_free (this_reader -> coord); if (this_reader -> lot) g_free (this_reader -> lot); if (this_reader -> sym_pos) g_free (this_reader -> sym_pos); if (this_reader -> wyckoff) g_free (this_reader -> wyckoff); if (this_reader -> occupancy) g_free (this_reader -> occupancy); if (this_reader -> disorder) g_free (this_reader -> disorder); if (this_reader -> multi) g_free (this_reader -> multi); if (this_reader -> lattice.sp_group) g_free (this_reader -> lattice.sp_group); if (this_reader -> lattice.box) g_free (this_reader -> lattice.box); g_free (this_reader); this_reader = NULL; } } switch (result) { case 1: show_error (_("Error loading atomic coordinates:\nfile does not exist"), 0, MainWindow); break; case 2: show_error (_("Error loading coordinates file: format not supported"), 0, MainWindow); break; case 3: show_error (_("Error at input: impossible to process input file data"), 0, MainWindow); break; default: if (id > 6 && id < 9) { clock_gettime (CLOCK_MONOTONIC, & sta_time); if (! prep_data_ ()) { show_error (_("Error while parsing the chemical information\n" "please check carefully the coordinates file"), 0, MainWindow); result = 4; } clock_gettime (CLOCK_MONOTONIC, & sto_time); g_print ("Time to prepare data: %s\n", calculation_time(FALSE, get_calc_time (sta_time, sto_time))); } break; } return result; } GtkFileFilter * filter[NCFORMATS+1]; int pactive; /*! \fn void open_this_coordinate_file (int format, gchar * proj_name) \brief open coordinate file format, if successful add to workspace \param format the format of the file that contains the atomic coordinates \param proj_name the project name to use, if any */ void open_this_coordinate_file (int format, gchar * proj_name) { active_project -> newproj = FALSE; clock_gettime (CLOCK_MONOTONIC, & start_time); if (open_coordinate_file (format) == 0) { clock_gettime (CLOCK_MONOTONIC, & stop_time); g_print ("Time to open coordinate file: %s\n", calculation_time(FALSE, get_calc_time (start_time, stop_time))); active_project -> tfile = format; if (proj_name) { active_project -> name = g_strdup_printf ("%s", proj_name); } else { gchar * str = g_path_get_basename (active_project -> coordfile); active_project -> name = g_strdup_printf ("%s", substitute_string (str, g_strdup_printf (".%s", coord_files_ext[format]), NULL)); g_free (str); } on_edit_activate (NULL, GINT_TO_POINTER(0)); if (format != 1 && format != 4 && format != 6 && format != 9 && format != 10 && format != 11 && format != 12) on_edit_activate (NULL, GINT_TO_POINTER(4)); initcutoffs (active_chem, active_project -> nspec); on_edit_activate (NULL, GINT_TO_POINTER(2)); active_project_changed (activep); frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; chemistry_ (); apply_project (TRUE); active_project_changed (activep); if (atomes_render_image) { simple_image_render(); } else { if ((format == 9 || format == 10 || format == 11) && active_cell -> has_a_box) { #ifdef GTK3 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_glwin -> ogl_rep[0], TRUE); set_rep (active_glwin -> ogl_rep[0], & active_glwin -> colorp[0][0]); gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_glwin -> ogl_clones[0], TRUE); widget_set_sensitive (active_glwin -> ogl_clones[0], active_glwin -> allbonds[1]); show_hide_clones (active_glwin -> ogl_clones[0], active_glwin); #endif shift_it (vec3 (0.0, 0.0, 0.0), 1, activep); active_glwin -> wrapped = TRUE; } add_project_to_workspace (); if ((format == 9 || format == 10) && cif_use_symmetry_positions) { gchar * file_name = g_strdup_printf ("%s", active_project -> coordfile); gchar * proj_name = g_strdup_printf (_("%s - symmetry position(s)"), active_project -> name); init_project (TRUE); active_project -> coordfile = g_strdup_printf ("%s", file_name); g_free (file_name); open_this_coordinate_file (11, proj_name); g_free (proj_name); } } } else { to_close_this_project (pactive, active_project); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_on_coord_port (GtkNativeDialog * info, gint response_id, gpointer data) \brief export or import atomic coordinates: run dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_coord_port (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_on_coord_port (GtkDialog * info, gint response_id, gpointer data) \brief export or import atomic coordinates: run dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_coord_port (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif int i, j, k, l, m; GtkFileFilter * tmp; int format; int car_to_au; i = GPOINTER_TO_INT(data); gchar * tmp_str; switch (response_id) { case GTK_RESPONSE_ACCEPT: tmp = gtk_file_chooser_get_filter (chooser); active_project -> coordfile = file_chooser_get_file_name (chooser); #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif j = 0; while (tmp != filter[j]) j++; if (i == 0) { #ifdef OSX j = NCFORMATS; #endif if (j == NCFORMATS) { j = iask (_("Please select the file format of the atomic coordinates"), _("Select format:"), 2, MainWindow); } open_this_coordinate_file (j, NULL); } else { if (j < 2) { format = iask (_("Please select the format of the atomic coordinates"), _("Select format:"), 1, MainWindow); } else { format = 0; } active_cell -> frac = (format < 2) ? 0 : format - 1; car_to_au = (format == 1) ? 1 : 0; if (j < 2) { m = (active_cell -> npt) ? active_project -> steps : 1; for (l=0; l box[l].vect, active_cell -> box[l].param[0], active_cell -> box[l].param[1], & active_cell -> ltype, & active_cell -> frac, & active_cell -> pbc); } to_read_pos (); } int length = strlen (active_project -> coordfile); for (l=1; l nspec+1; l++) { m = strlen(active_chem -> label[l-1]); send_label_ (& l, & m, active_chem -> label[l-1]); } switch (j) { case 0: k = write_xyz_ (active_project -> coordfile, & length, & active_cell -> frac, & car_to_au); break; case 1: k = write_c3d_ (active_project -> coordfile, & length, & active_cell -> frac, & car_to_au); break; } if (k) { tmp_str = g_strdup_printf (_("Impossible to export the atomic coordinates\nError code: %d"), k); show_error (tmp_str, 0, MainWindow); g_free (tmp_str); } active_project_changed (pactive); } break; default: if (i == 0) { to_close_this_project (pactive, active_project); } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif break; } } /*! \fn G_MODULE_EXPORT void on_coord_port (GtkWidget * widg, gpointer data) \brief export or import atomic coordinates: prepare dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_coord_port (GtkWidget * widg, gpointer data) { int i, j; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif GtkFileChooser * chooser; gchar * tmp_str; int num_files[2]={NCFORMATS, 2}; const gchar * str[2]= {i18n("Import atomic coordinates"), i18n("Export atomic coordinates")}; const gchar * res[2]= {i18n("Open"), i18n("Save")}; char * out_files[2] = {i18n("XYZ file"), i18n("Chem3D file")}; char * out_ext[2]={"xyz", "c3d"}; GtkFileChooserAction act[2]={GTK_FILE_CHOOSER_ACTION_OPEN, GTK_FILE_CHOOSER_ACTION_SAVE}; pactive = activep; i = GPOINTER_TO_INT (data); if ((nprojects > 0 && get_project_by_id(activew) -> natomes) || i == 0) { if (i == 0) { init_project (TRUE); } else { active_project_changed (activew); } tmp_str = g_strdup_printf ("%s - %s", prepare_for_title(active_project -> name), _(str[i])); info = create_file_chooser (tmp_str, GTK_WINDOW(MainWindow), act[i], _(res[i])); g_free (tmp_str); chooser = GTK_FILE_CHOOSER(info); if (i) gtk_file_chooser_set_create_folders (chooser, TRUE); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif for (j=0; j%s is empty ... nothing to be saved\n"), get_project_by_id(activew) -> name); show_warning (tmp_str, MainWindow); g_free (tmp_str); } } activew = activep; update_insert_combos (); } atomes_1.3.1/src/gui/interface.h0000664000175000017500000000476015212624223016200 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file interface.h * @short Messaging function declarations * @author Sébastien Le Roux */ /* * This header file: 'interface.h' * * Contains: - Messaging function declarations */ #ifndef INTERFACE_H_ #define INTERFACE_H_ G_MODULE_EXPORT void create_about_dialog (GtkWidget * widg, gpointer data); void show_info (char * information, int val, GtkWidget * win); void show_info_ (double * valdij); void show_warning (char * warning, GtkWidget * win); void show_warning_ (char * warning, char * sub, char * tab); void show_error (char * error, int val, GtkWidget * win); void show_error_with_trace (gchar * error, atomes_error * this_error, int act, int val, GtkWidget * win); void show_error_ (char * error, char * sub, char * tab); gboolean ask_yes_no (gchar * title, gchar * text, int type, GtkWidget * widg); gchar * exact_name (gchar * name); GtkWidget * show_pop (char * pop, GtkWidget * pwin); #ifdef GTK4 G_MODULE_EXPORT gboolean leaving_question (GtkWindow * widget, gpointer data); #else G_MODULE_EXPORT gboolean leaving_question (GtkWidget * widget, GdkEvent * event, gpointer data); #endif int dummy_ask_ (char * question); int iask (char * question, char * lab, int id, GtkWidget * win); gchar * cask (char * question, char * lab, int id, char * old, GtkWidget * win); void print_info (gchar * str, gchar * stag, GtkTextBuffer * buffer); gchar * textcolor (int i); gchar * env_name (project * this_proj, int g, int s, int f, GtkTextBuffer * buffer); void init_data_ (int * nats, int * nspc, int * stps, int * cid); void update_after_calc (int calc); // In init.c: void prepostcalc (GtkWidget * widg, gboolean status, int run, int adv, double opc); void prep_calc_actions (); void init_atomes_analysis (project * this_proj, gboolean apply_defaults); #endif atomes_1.3.1/src/gui/preferences.h0000664000175000017500000001203415212624223016532 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file preferences.h * @short Preference variable declarations * @author Sébastien Le Roux */ /* * This header file: 'preferences.h' * * Contains: - Preference variable declarations */ #ifndef PREFERENCES_H_ #define PREFERENCES_H_ /*! \typedef bond_cutoff \brief bond cutoff data structure */ typedef struct bond_cutoff bond_cutoff; struct bond_cutoff { int Z[2]; /*!< Atomic numbers */ double cutoff; /*!< Associated radius */ gboolean use; /*!< Use or not */ bond_cutoff * next; bond_cutoff * prev; }; /*! \typedef element_radius \brief element radius data structure */ typedef struct element_radius element_radius; struct element_radius { int Z; /*!< Atomic number */ double rad; /*!< Associated radius */ element_radius * next; element_radius * prev; }; /*! \typedef element_color \brief element color data structure */ typedef struct element_color element_color; struct element_color { int Z; /*!< Atomic number */ ColRGBA col; /*!< Associated color */ element_color * next; element_color * prev; }; /*! \typedef rep_data \brief representation data structure */ typedef struct rep_data rep_data; struct rep_data { int rep; int proj; GLdouble c_angle[2]; /*!< Camera angle: pitch and heading */ GLdouble c_shift[2]; /*!< Camera position: x and y */ GLdouble gnear; /*!< Camera depth position */ GLdouble zoom; /*!< Zoom factor */ }; extern float get_radius (int object, int col, int z, element_radius * rad_list); extern ColRGBA get_spec_color (int z, element_color * clist); extern GtkWidget * adv_box (GtkWidget * box, char * lab, int vspace, int size, float xalign); extern void duplicate_background_data (background * new_back, background * old_back); extern void duplicate_box_data (box * new_box, box * old_box); extern void duplicate_axis_data (axis * new_axis, axis * old_axis); // Analysis parameters extern gboolean preferences; extern double default_totcut; extern double tmp_totcut; extern bond_cutoff * default_bond_cutoff; extern bond_cutoff * tmp_bond_cutoff; extern int * default_num_delta; extern int * tmp_num_delta; // Ring statistics extern gchar * default_ring_param[7] ; extern int * default_rsparam; extern int * tmp_rsparam; // Chain statistics extern gchar * default_chain_param[7]; extern int * default_csparam; extern int * tmp_csparam; // Dynamic extern double * default_delta_t; extern double * tmp_delta_t; // F(k,t) and S(q,w) extern gboolean default_skt_sets; extern int default_skt_n_sets; extern int default_sqw_n_sets; extern int default_sqw_freq; extern gboolean tmp_skt_sets; extern int tmp_skt_n_sets; extern int tmp_sqw_n_sets; extern int tmp_sqw_freq; // OpenGL extern int * default_opengl; extern int * tmp_opengl; extern Material default_material; extern Material tmp_material; extern Lightning default_lightning; extern Lightning tmp_lightning; extern Fog default_fog; extern Fog tmp_fog; // Model extern element_radius * default_atomic_rad[16]; extern element_radius * tmp_atomic_rad[16]; // 3 styles + 3 cloned styles extern element_radius * default_bond_rad[6]; extern element_radius * tmp_bond_rad[6]; extern gboolean default_clones; extern gboolean * default_o_at_rs; extern double * default_at_rs; extern gboolean * default_o_bd_rw; extern double * default_bd_rw; extern screen_label default_label[5]; extern screen_label * tmp_label[5]; extern int default_acl_format[2]; extern int tmp_acl_format[2]; extern gboolean default_mtilt[2]; extern gboolean tmp_mtilt[2]; extern int default_mpattern[2]; extern int tmp_mpattern[2]; extern int default_mfactor[2]; extern int tmp_mfactor[2]; extern double default_mwidth[2]; extern double tmp_mwidth[2]; extern rep_data default_rep; extern rep_data * tmp_rep; extern rep_edition * pref_rep_win; extern background default_background; extern background * tmp_background; extern box default_box; extern box * tmp_box; extern box_edition * pref_box_win; extern axis default_axis; extern axis * tmp_axis; extern axis_edition * pref_axis_win; extern ColRGBA default_sel_color[2]; extern gradient_edition * pref_gradient_win; extern element_color * default_label_color[2]; extern element_color * default_atom_color[2]; extern tint * pref_pointer; extern opengl_edition * pref_ogl_edit; extern void set_atomes_preferences (); #endif // PREFERENCES_H_ atomes_1.3.1/src/gui/calc_menu.c0000664000175000017500000022140615212624223016157 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file calc_menu.c * @short Creation of the calculation dialogs * @author Sébastien Le Roux */ /* * This file: 'calc_menu.c' * * Contains: * - The creation of the calculation dialogs * * List of functions: gboolean test_gr (int rdf); gboolean test_sq (int fdq); gboolean test_bonds (); gboolean test_rings (); gboolean test_sph (); gboolean test_msd (); gboolean test_skt (); void update_omega_max (); void calc_sph (GtkWidget * vbox); void calc_msd (GtkWidget * vbox, int cid); void calc_rings (GtkWidget * vbox); void calc_bonds (GtkWidget * vbox); void add_advanced_options (int skq, dint skadv[2], GtkWidget * vbox); void add_smoothing_options (int grsqk, GtkWidget * vbox); void calc_gr_sq (GtkWidget * box, int id); void add_remove_t_steps_q_vectors (int val, int calc); void add_correlations_options (int cid); void calc_sk_t (GtkWidget * box); G_MODULE_EXPORT void set_max (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_delta (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void combox_tunit_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_numa (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void combox_rings_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void toggle_rings (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggle_rings (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void run_toggle_bond (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_toggle_bond (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void toggle_bond (GtkCheckButton * Button, gpointer data); G_MODULE_EXPORT void toggle_bond (GtkToggleButton * Button, gpointer data); G_MODULE_EXPORT void expand_opt (GtkWidget * exp, gpointer data); G_MODULE_EXPORT void set_advanced_sq (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_sfact (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void on_show_curve_toolbox (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_smoother_released (GtkButton * button, gpointer data); G_MODULE_EXPORT void set_skt_step_id (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_sqw_q_id (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_t_q_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_correlations (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void toggle_skt_all (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggle_skt_all (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void run_on_calc_activate (GtkDialog * dial, gint response_id, gpointer data); G_MODULE_EXPORT void on_calc_activate (GtkWidget * widg, gpointer data); GtkWidget * calc_window (int i); GtkWidget * combox_rings (gchar * str, int num, gchar * list_item[num], int id); GtkWidget * hbox_note (int i, double val); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "preferences.h" #include "bind.h" #include "project.h" #include "workspace.h" extern G_MODULE_EXPORT void on_calc_gr_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_gq_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_sq_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_sk_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_skt_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_rings_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_chains_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_msd_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_sph_released (GtkWidget * widg, gpointer data); extern void dyna_parameters (GtkWidget * vbox, int cid); GtkWidget * calc_win = NULL; GtkWidget * ba_entry[2]; int search_type; /*! \fn GtkWidget * calc_window (int i) \brief create a calculation window \param i the calculation id */ GtkWidget * calc_window (int i) { calc_dialog = dialog_cancel_apply (calc_name[i], MainWindow, FALSE); return calc_dialog; } void add_remove_t_steps_q_vectors (int val, int calc); /*! \fn G_MODULE_EXPORT void set_max (GtkEntry * entry, gpointer data) \brief set a maximum value \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_max (GtkEntry * entry, gpointer data) { int c = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (entry); double v = string_to_double ((gpointer)m); if (v > 0.0 && v > active_project -> analysis[c] -> min) { if (active_project -> analysis[c] -> max != v) { active_project -> analysis[c] -> max = v; if (c == SKT) { add_remove_t_steps_q_vectors (active_project -> sqw_n_data_sets, 1); } // Max has changed do something !? } } update_entry_double (entry, active_project -> analysis[c] -> max); } GtkWidget * rings_box[2]; GtkWidget * omega_max_hbox = NULL; GtkWidget * omega_max_info = NULL; /*! \fn void update_omega_max () \brief update omega max information string */ void update_omega_max () { gchar * freq_unit[5]={" THz", " THz", " MHz", " KHz", " Hz"}; gchar * str; omega_max_info = destroy_this_widget (omega_max_info); double delt = (preferences) ? tmp_delta_t[0]: active_project -> analysis[MSD] -> delta; int num_delt = (preferences) ? tmp_num_delta[MSD-2] : active_project -> analysis[MSD] -> num_delta; int t_unit = (preferences) ? (int)tmp_delta_t[1] : active_project -> tunit; if ( delt > 0.0 && num_delt && t_unit > -1) { omega_max_info = create_hbox(0); double omega_max = pi/(delt * num_delt); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, omega_max_info, markup_label (_("ωmax ="), 50, -1, 0.0, 0.5), FALSE, FALSE, 2); str = g_strdup_printf ("%f", (t_unit == 1) ? omega_max : omega_max * 1000.0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, omega_max_info, markup_label (str, 100, -1, 1.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, omega_max_info, markup_label (freq_unit[t_unit], 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } else { str = g_strdup_printf (_("Update step(s) between conf. and δt to evaluate ωmax")); omega_max_info = markup_label (str, -1, -1, 0.5, 0.5); g_free (str); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, omega_max_hbox, omega_max_info, FALSE, FALSE, 5); show_the_widgets (omega_max_hbox); } /*! \fn G_MODULE_EXPORT void set_delta (GtkEntry * entry, gpointer data) \brief set the number of delta between data points \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_delta (GtkEntry * entry, gpointer data) { int c = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (entry); double v = string_to_double ((gpointer)m); int i, j, k; i = (int)v; if (c == RIN) { if (preferences) { k = tmp_rsparam[2]; } else { j = combo_get_active (rings_box[0]); k = active_project -> rsparam[j][1]; } } else if (c == CHA) { k = (preferences) ? tmp_csparam[1] : active_project -> csparam[5]; } else if (c > -1 && ! preferences) { k = active_project -> analysis[c] -> num_delta; } if (c < 0 && ! preferences) { if (v > 0.0) { if (active_project -> analysis[-c] -> delta != v) { active_project -> analysis[-c] -> delta = v; } } } else if (i > 0 && ! preferences) { if (c == RIN) { if (active_project -> rsparam[j][1] != i) { active_project -> rsparam[j][1] = i; } k = active_project -> rsparam[j][1] = i; } else if (c == CHA) { if (active_project -> csparam[5] != i) { active_project -> csparam[5] = i; } k = active_project -> csparam[5] = i; } else { if (active_project -> analysis[c] -> num_delta != i) { active_project -> analysis[c] -> num_delta = i; } k = active_project -> analysis[c] -> num_delta; } } if (c < 0) { update_entry_double (entry, active_project -> analysis[-c] -> delta); } else { update_entry_int (entry, k); } if (omega_max_hbox) update_omega_max (); } /*! \fn G_MODULE_EXPORT void combox_tunit_changed (GtkComboBox * box, gpointer data) \brief change time units \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void combox_tunit_changed (GtkComboBox * box, gpointer data) { active_project -> tunit = combo_get_active ((GtkWidget *)box); if (omega_max_hbox) update_omega_max (); } /*! \fn void calc_sph (GtkWidget * vbox) \brief creation of the spherical harmonics calculation widgets \param vbox GtkWidget that will receive the data */ void calc_sph (GtkWidget * vbox) { GtkWidget * hbox; GtkWidget * entry; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label ( _("Maximum l, lmax ∈ [2-40]"), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_delta), 100, 15, FALSE, (gpointer)GINT_TO_POINTER(SPH)); update_entry_int (GTK_ENTRY(entry), active_project -> analysis[SPH] -> num_delta); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); } /*! \fn void calc_msd (GtkWidget * vbox, int cid) \brief creation of the MSD calculation widgets \param vbox GtkWidget that will receive the data \param cid calculation id, MSD or SKT */ void calc_msd (GtkWidget * vbox, int cid) { int i, j, k, l, m; gchar * val_b[3]={i18n("Number of configurations:"), i18n("\tTime step δt used during the dynamics:"), i18n("\tNumber of step(s) between each configuration:")}; gchar * val_c[3]={i18n("Number of configurations:"), i18n("Time step δt"), i18n("Step(s) between conf.")}; GtkWidget * hbox; GtkWidget * entry; k = (cid == MSD) ? 15 : 0; l = (cid == MSD) ? 350 : 150; m = (cid == MSD) ? 0 : 5; hbox = create_hbox (k); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new (_(val_b[0])), FALSE, FALSE, m); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (g_strdup_printf ("%d",active_project -> steps), -1, 50, 0.5, 0.5), FALSE, FALSE, 10); for (i=1; i<3; i++) { hbox = create_hbox (k); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label ((cid == MSD) ? _(val_b[i]) : _(val_c[i]), l, -1, 0.0, 0.5), FALSE, FALSE, m); if (i == 1) { entry = create_entry (G_CALLBACK(set_delta), 100, 15, FALSE, (gpointer)GINT_TO_POINTER(-MSD)); update_entry_double (GTK_ENTRY(entry), active_project -> analysis[MSD] -> delta); } else { entry = create_entry (G_CALLBACK(set_delta), 100, 15, FALSE, (gpointer)GINT_TO_POINTER(MSD)); update_entry_int (GTK_ENTRY(entry), active_project -> analysis[MSD] -> num_delta); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 2*m); if (i == 1) { GtkWidget * tcombo = create_combo (); for (j=0; j<5 ; j++) combo_text_append (tcombo, untime[j]); combo_set_active (tcombo, active_project -> tunit); g_signal_connect(G_OBJECT(tcombo), "changed", G_CALLBACK(combox_tunit_changed), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, tcombo, FALSE, FALSE, 0); } } } /*! \fn G_MODULE_EXPORT void set_numa (GtkEntry * entry, gpointer data) \brief set the rings/chains statistics parameter NUMA \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_numa (GtkEntry * entry, gpointer data) { const gchar * m = entry_get_text (entry); double v = string_to_double ((gpointer)m); int i, j; i = (int)v; if (i > 0) { if (! search_type) { if (preferences) { tmp_rsparam[3] = i; } else { if (active_project -> rsearch[1] != i) active_project -> rsearch[1] = i; j = active_project -> rsearch[1]; } } else { if (preferences) { tmp_csparam[2] = i; } else { if (active_project -> csearch != i) active_project -> csearch = i; j = active_project -> csearch; } } } else { if (preferences) { j = (search_type) ? tmp_csparam[2] : tmp_rsparam[3]; } else { j = (search_type) ? active_project -> csearch : active_project -> rsearch[1]; } } update_entry_int (entry, j); } /*! \fn GtkWidget * combox_rings (gchar * str, int num, gchar * list_item[num], int id) \brief create a combo box for the ring statistics calculation \param str label of the combo box \param num number of values to insert in the combo box \param list_item text data to insert in the combo boc \param id id of the box to create */ GtkWidget * combox_rings (gchar * str, int num, gchar * list_item[num], int id) { int i; GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 250, -1, 0.0, 0.5), FALSE, FALSE, 0); // GtkWidget * fixed = gtk_fixed_new (); rings_box[id] = create_combo (); gtk_widget_set_size_request (rings_box[id], 180, -1); for (i=0; i rsearch[0] = combo_get_active ((GtkWidget *)box); widget_set_sensitive (rings_box[1], (active_project -> rsearch[0]<0) ? 0 : 1); combo_set_active (rings_box[1], active_project -> rsparam[active_project -> rsearch[0]][0]); for (i=0; i<2; i++) widget_set_sensitive (rings_entry[i], (active_project -> rsearch[0]<0) ? 0 : 1); for (i=0; i<3; i++) widget_set_sensitive (rings_check[i], (active_project -> rsearch[0]<0) ? 0 : 1); update_entry_int (GTK_ENTRY(rings_entry[0]), active_project -> rsparam[active_project -> rsearch[0]][1]); i = combo_get_active (rings_box[0]); for (j=0; j<3; j++) { button_set_status (rings_check[j], active_project -> rsparam[i][j+2]); } } } else { if (search_type) { if (preferences) { tmp_csparam[0] = combo_get_active ((GtkWidget *)box); } else { active_project -> csparam[0] = combo_get_active ((GtkWidget *)box); } } else { if (preferences) { tmp_rsparam[1] = combo_get_active ((GtkWidget *)box); } else { i = combo_get_active (rings_box[0]); active_project -> rsparam[i][0] = combo_get_active ((GtkWidget *)box); } } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_rings (GtkCheckButton * but, gpointer data) \brief toggle a rings statistics calculation parameter \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_rings (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_rings (GtkToggleButton * but, gpointer data) \brief toggle a rings statistics calculation parameter \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_rings (GtkToggleButton * but, gpointer data) #endif { int oid = GPOINTER_TO_INT(data); int i; gboolean status; status = button_get_status ((GtkWidget *)but); switch (search_type) { case 0: i = combo_get_active (rings_box[0]); if (preferences) { tmp_rsparam[oid+4] = status; } else { active_project -> rsparam[i][oid+2] = status; } break; case 1: if (preferences) { tmp_csparam[oid+3] = status; } else { active_project -> csparam[oid+1] = status; } if (oid == 0 && status) { for (i=1; i<4; i++) { button_set_status(rings_check[i], ! status); active_project -> csparam[i+1] = ! status; } } else if (oid == 1 && status) { button_set_status(rings_check[0], ! status); active_project -> csparam[1] = ! status; } else if (oid == 2 && status) { button_set_status(rings_check[1], ! status); active_project -> csparam[2] = ! status; } break; } } /*! \fn void calc_rings (GtkWidget * vbox) \brief creation of the rings statistics calculation widgets \param vbox GtkWidget that will receive the data */ void calc_rings (GtkWidget * vbox) { gchar * defs[6]={i18n("All Rings (No Rule)"), i18n("King's [1, 3]"), i18n("Guttman's [2]"), i18n("Primitives [4, 5, 6]"), i18n("Strongs [4, 5]")}; gchar * val_a[2]={i18n("Definition of ring to be used: "), i18n("Atom(s) to initiate the search from: ")}; gchar * val_b[2][2]={{i18n("nmax = maximum size for a ring *"), i18n("Maximum number of rings of size n per MD step **")}, {i18n("nmax = maximum size for a chain *"), i18n("Maximum number of chains of size n per MD step **")}}; gchar * val_c[2][4]={{i18n("Only search for ABAB rings"), i18n("No homopolar bonds in the rings (A-A, B-B ...) ***"), i18n("No homopolar bonds in the connectivity matrix"), " "}, {i18n("Only search for AAAA chains"), i18n("Only search for ABAB chains"), i18n("No homopolar bonds in the chains (A-A, B-B ...) ***"), i18n("Only search for 1-(2)n-1 coordinated atom chains, ie. isolated chains.")}}; gchar * start[3]={"*", "**", "***"}; gchar * val_d[3]={i18n("in total number of nodes (or atoms)"), i18n("value used for memory allocation = f(nmax, system studied)"), i18n("but homopolar bonds can shorten the rings")}; gchar * val_e={i18n("[1] S. V. King. Nature, 213:1112 (1967).\n" "[2] L. Guttman. J. Non-Cryst. Solids., 116:145-147 (1990).\n" "[3] D. S. Franzblau. Phys. Rev. B, 44(10):4925-4930 (1991).\n" "[4] K. Goetzke and H. J. Klein. J. Non-Cryst. Solids., 127:215-220 (1991).\n" "[5] X. Yuan and A. N. Cormack. Comp. Mat. Sci., 24:343-360 (2002).\n" "[6] F. Wooten. Acta Cryst. A, 58(4):346-351 (2002).")}; gchar * list_node[(preferences) ? 2 : active_project -> nspec+1]; int i, j, k; if (! search_type) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, combox_rings (_(val_a[0]), 5, defs, 0), FALSE, FALSE, 5); list_node[0] = g_strdup_printf (_("All")); if (preferences) { list_node[1] = g_strdup_printf (_("Chemical Species")); } else { for (i=0; i nspec; i++) list_node[i+1] = g_strdup_printf ("%s", active_chem -> label[i]); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, combox_rings (_(val_a[1]), (preferences) ? 2 : active_project -> nspec+1, list_node, 1), FALSE, FALSE, 5); j = (preferences) ? tmp_rsparam[0] : active_project -> rsearch[0]; k = RIN + search_type; GtkWidget * hbox; for (i=0; i<2; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_(val_b[search_type][i]), 400, -1, 0.0, 0.5), FALSE, FALSE, 0); if (i == 0) { rings_entry[i] = create_entry (G_CALLBACK(set_delta), 100, 15, FALSE, GINT_TO_POINTER(k)); if (preferences) { update_entry_int (GTK_ENTRY(rings_entry[i]), (search_type) ? tmp_csparam[1] : tmp_rsparam[2]); } else { update_entry_int (GTK_ENTRY(rings_entry[i]), (search_type) ? active_project -> csparam[5] : active_project -> rsparam[j][1]); } } else { rings_entry[i] = create_entry (G_CALLBACK(set_numa), 100, 15, FALSE, NULL); if (preferences) { update_entry_int (GTK_ENTRY(rings_entry[i]), (search_type) ? tmp_csparam[2] : tmp_rsparam[3]); } else { update_entry_int (GTK_ENTRY(rings_entry[i]), (search_type) ? active_project -> csearch : active_project -> rsearch[1]); } } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, rings_entry[i], FALSE, FALSE, 0); if (! search_type && j < 0 && ! preferences) widget_set_sensitive (rings_entry[i], 0); } gboolean status; for (i=0; i<3+search_type; i++) { if (preferences) { status = (search_type) ? tmp_csparam[i+3] : tmp_rsparam[i+4]; } else { status = (search_type) ? active_project -> csparam[i+1] : active_project -> rsparam[j][i+2]; } rings_check[i] = check_button (_(val_c[search_type][i]), -1, 40, status, G_CALLBACK(toggle_rings), GINT_TO_POINTER(i)); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, rings_check[i], FALSE, FALSE, 0); if (! preferences) { if (active_project -> nspec == 1) widget_set_sensitive (rings_check[i], 0); if (! search_type && j < 0) widget_set_sensitive (rings_check[i], 0); } } for (i=0; i<3; i++) { append_comments (vbox, start[i], _(val_d[i])); } if (! search_type) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label (_(val_e), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); i = 0; g_signal_connect(G_OBJECT(rings_box[0]), "changed", G_CALLBACK(combox_rings_changed), GINT_TO_POINTER(0)); combo_set_active (rings_box[0], (preferences) ? tmp_rsparam[0] : active_project -> rsearch[0]); widget_set_sensitive (rings_box[1], (preferences) ? 1 : (active_project -> rsearch[0]<0) ? 0 : 1); } i = 1; g_signal_connect(G_OBJECT(rings_box[1]), "changed", G_CALLBACK(combox_rings_changed), GINT_TO_POINTER(i)); if (preferences) { combo_set_active (rings_box[1], (search_type) ? tmp_csparam[0] : tmp_rsparam[1]); } else { combo_set_active (rings_box[1], (search_type) ? active_project -> csparam[0] : active_project -> rsparam[j][0]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_toggle_bond (GtkNativeDialog * info, gint response_id, gpointer data) \brief bond properties detailed saving: run the dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_toggle_bond (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_toggle_bond (GtkDialog * info, gint response_id, gpointer data) \brief bond properties detailed saving: run the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_toggle_bond (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { active_project -> bondfile = file_chooser_get_file_name (chooser); } else { button_set_status (data, FALSE); } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_bond (GtkCheckButton * Button, gpointer data) \brief bond properties detailed saving and prepare the dialog \param Button the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_bond (GtkCheckButton * Button, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_bond (GtkToggleButton * Button, gpointer data) \brief activate bond properties detailed saving and prepare the dialog \param Button the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_bond (GtkToggleButton * Button, gpointer data) #endif { int i = GPOINTER_TO_INT (data); gboolean status = button_get_status ((GtkWidget *)Button); if (i < 3) { active_project -> runc[i] = status; if (i < 2) widget_set_sensitive (ba_entry[i], status); if (i == 2) frag_update = mol_update = status; } else { if (status) { // To add = do not annoy me with that again ! show_info (_("The result of the nearest neighbors analysis\n" "will be saved in a file that you may use afterwards.\n"), 0, MainWindow); #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif info = create_file_chooser (_("Save neighbors analysis in file"), GTK_WINDOW(MainWindow), GTK_FILE_CHOOSER_ACTION_SAVE, _("Save")); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif file_chooser_set_current_folder (chooser); gtk_file_chooser_set_current_name (chooser, "neighbors.dat"); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_toggle_bond), Button); #else run_this_gtk_dialog (info, G_CALLBACK(run_toggle_bond), Button); #endif } else { active_project -> bondfile = NULL; } } } /*! \fn gboolean test_gr (int gr) \brief is it safe to compute g(r) ? \param rdf type of g(r): real space (GR) or FFT (GK) */ gboolean test_gr (int rdf) { if (active_project -> analysis[rdf] -> num_delta < 2) { show_warning (_("You must specify a number of δr intevals >= 2\n" "to discretize the real space between 0.0 and Dmax\n"), calc_win); return FALSE; } else if (rdf == GDK && (active_project -> analysis[rdf] -> max > active_project -> analysis[SKD] -> max || active_project -> analysis[rdf] -> max <= active_project -> analysis[SKD] -> min)) { show_warning (_("You must specify a maximum wave vector Qmax[FFT]\n" "for the FFT, with Qmin < Qmax[FFT] <= Qmax"), calc_win); return FALSE; } else { return TRUE; } } /*! \fn gboolean test_sq (int fdq) \brief is it safe to compute s(q) ? \param fdq type of s(q): 0 = FFT g(r), 1 = Debye, 2 = Dynamic */ gboolean test_sq (int fdq) { if (active_project -> analysis[fdq] -> max <= active_project -> analysis[fdq] -> min) { show_warning (_("You must specify a maximum wave vector Qmax\n" "note that Qmax must be > Qmin"), calc_win); return FALSE; } else if (active_project -> analysis[fdq] -> num_delta < 2) { show_warning (_("You must specify a number of δq intervals >= 2\n" "to discretize the reciprocal space between 0.0 and Qmax\n"), calc_win); return FALSE; } else { return TRUE; } } /*! \fn gboolean test_bonds () \brief is it safe to compute bond properties ? */ gboolean test_bonds () { if (active_project -> runc[0] && active_project -> analysis[BND] -> num_delta < 2) { show_warning (_("You must specify a number of δr intervals >= 2\n" "to discretize the real space between\n" "the shortest and the highest inter-atomic distances"), calc_win); return FALSE; } if (active_project -> runc[1] && active_project -> analysis[ANG] -> num_delta < 2) { show_warning (_("You must specify a number of δθ intervals >= 2\n" "to discretize the angular space between 0 and 180°"), calc_win); return FALSE; } return TRUE; } /*! \fn gboolean test_rings () \brief is it safe to compute ring statistics ? */ gboolean test_rings () { int i, j; i = (search_type) ? active_project -> csparam[5] : active_project -> rsparam[active_project -> rsearch[0]][1]; j = (search_type) ? active_project -> csearch : active_project -> rsearch[1]; gchar * sobj[2]={i18n("ring"), i18n("chain")}; gchar * str; if (i == 0) { str = g_strdup_printf (_("You must specify a maximum %s size > 1 for the search"), _(sobj[search_type])); show_warning (str, calc_win); g_free (str); return FALSE; } if (j == 0) { str = g_strdup_printf (_("You must specify a number of %ss per size 'n' and per node\n" "this value is used when allocating the memory to store the results\n" "and depends on both the maximum %s size used in the search\n" "and the system studied.\n" "We recommend a value at least equal to 100.\n" "If it appears that the value given is not big enough\n" "(ex: more than 100 different %ss of size 'n' for a single node)\n" "then the search will failed but the program will propose\n" "you to initiate a new search using a higher value"), sobj[search_type], sobj[search_type], sobj[search_type]); show_warning (str, calc_win); g_free (str); return FALSE; } return TRUE; } /*! \fn gboolean test_sph () \brief is it safe to compute spherical harmonics ? */ gboolean test_sph () { if (active_project -> analysis[SPH] -> num_delta < 2 || active_project -> analysis[SPH] -> num_delta > 40) { show_warning (_("You must specify a number lmax ∈ [2-40]"), calc_win); return FALSE; } else { return TRUE; } } /*! \fn gboolean test_msd () \brief is it safe to compute MSD ? */ gboolean test_msd () { if(active_project -> steps > 1) { if (active_project -> analysis[MSD] -> delta < 1) { show_warning (_("You must specify the time step δt\n" "used to integrate the Newton's equations\n" "of motion during the molecular dynamics\n"), calc_win); return FALSE; } if (active_project -> tunit < 0) { show_warning (_("You must specify the time unit\n" "used to integrate the Newton's equations\n" "of motion during the molecular dynamics\n"), calc_win); return FALSE; } else { return TRUE; } } else { if (active_project -> analysis[MSD] -> num_delta < 1) { show_warning (_("You must specify the number of steps\n" "between each of the %d configurations\n" "found for the molecular dynamics\n"), calc_win); return FALSE; } else { return TRUE; } } } /*! \fn gboolean test_skt () \brief is it safe to compute dynamic structure factors ? */ gboolean test_skt () { if (! test_sq(SKT)) return FALSE; if (! test_msd()) return FALSE; if (active_project -> sqw_freq > 0) { return TRUE; } else { show_warning (_("You must specify the number of frequency points\n"), calc_win); return FALSE; } } /*! \fn void calc_bonds (GtkWidget * vbox) \brief creation of the bond calculation widgets \param vbox GtkWidget that will receive the data */ void calc_bonds (GtkWidget * vbox) { gchar * val_a[2]={i18n("Number of δr [Dijmin-Dijmax]"), i18n("Number of δθ [0-180°]")}; gchar * val_b[4]={i18n("First coordination sphere properties"), i18n("Bond and dihedral angles distribution"), i18n("Search for molecules and isolated fragments"), i18n("Output detailed results in text file")}; GtkWidget * hbox; int i; for (i=0; i<3; i++) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (_(val_b[i]), -1, 40, active_project -> runc[i], G_CALLBACK(toggle_bond), (gpointer)GINT_TO_POINTER(i)), FALSE, FALSE, 0); if (i < 2) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_(val_a[i]), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); ba_entry[i] = create_entry (G_CALLBACK(set_delta), 150, 15, FALSE, (gpointer)GINT_TO_POINTER(BND+i)); update_entry_int (GTK_ENTRY(ba_entry[i]), active_project -> analysis[BND+i] -> num_delta); widget_set_sensitive (ba_entry[i], active_project -> runc[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ba_entry[i], FALSE, FALSE, 0); } } GtkWidget * checkbd = check_button (val_b[i], -1, 40, FALSE, G_CALLBACK(toggle_bond), (gpointer)GINT_TO_POINTER(i)); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, checkbd, FALSE, FALSE, 0); widget_set_sensitive (checkbd, 1); } /*! \fn GtkWidget * hbox_note (int i, double val) \brief foot note message box with some parameters \param i message id \param val value to display */ GtkWidget * hbox_note (int i, double val) { gchar * note[3] = {"Dmax = ", "Qmin = ", "Qmax = "}; gchar * unit[3] = {" Å", " Å-1", " Å-1"}; gchar * str; GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (note[i], 50, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%f", val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 100, -1, 1.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (unit[i], 50, -1, 0.0, 0.5), FALSE, FALSE, 0); return hbox; } GtkWidget * avbox = NULL; GtkWidget * smbox = NULL; dint skadv[2]; int avsize; /*! \fn G_MODULE_EXPORT void expand_opt (GtkWidget * exp, gpointer data) \brief open expander actions \param exp the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void expand_opt (GtkWidget * exp, gpointer data) { int i; i = GPOINTER_TO_INT(data); GtkExpander * expander = GTK_EXPANDER (exp); GtkWidget * wind = get_top_level (exp); gtk_window_set_resizable (GTK_WINDOW (wind), TRUE); if (gtk_expander_get_expanded (expander)) { if (i == 1) { hide_the_widgets (avbox); } else { hide_the_widgets (smbox); } } else { if (i == 1) { show_the_widgets (avbox); } else { show_the_widgets (smbox); } } gtk_widget_set_size_request (exp, -1, -1); gtk_window_set_resizable (GTK_WINDOW (wind), FALSE); } /*! \fn G_MODULE_EXPORT void set_advanced_sq (GtkEntry * entry, gpointer data) \brief set a s(k) calculation parameter \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_advanced_sq (GtkEntry * entry, gpointer data) { dint * idc = (dint *)data; const gchar * m = entry_get_text (entry); double v = string_to_double ((gpointer)m); double qmin = active_project -> analysis[idc -> a] -> min; double qmax = active_project -> analysis[idc -> a] -> max; int idk = (idc -> a == SKD) ? 0 : 1; if (v != active_project -> sk_advanced[idk][idc -> b]) { if (idc -> b == 0 && (v < 0.0 || v > 1.0)) { show_warning (_("You must specify a probability between 0.0 and 1.0"), calc_win); } else if (idc -> b == 1 && (v < qmin || v > qmax)) { show_warning (_("Qlim must be ≥ Qmin and ≤ Qmax"), calc_win); } else { active_project -> sk_advanced[idk][idc -> b] = v; } } update_entry_double (entry, active_project -> sk_advanced[idk][idc -> b]); } /*! \fn G_MODULE_EXPORT void set_sfact (GtkEntry * entry, gpointer data) \brief set the Gaussian smoothing factor \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_sfact (GtkEntry * entry, gpointer data) { const gchar * m; int i = GPOINTER_TO_INT(data); m = entry_get_text (entry); double v = string_to_double ((gpointer)m); if (v <= 0.0 || v >= 1.0) { show_warning (_("The smoothing factor must be between 0.0 and 1.0"), calc_win); } else { active_project -> analysis[i] -> fact = v; } update_entry_double (entry, active_project -> analysis[i] -> fact); } /*! \fn G_MODULE_EXPORT void on_show_curve_toolbox (GtkWidget * widg, gpointer data) \brief show the curve toolboxes \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_show_curve_toolbox (GtkWidget * widg, gpointer data) { if (! is_the_widget_visible (curvetoolbox)) { show_the_widgets (curvetoolbox); } else { hide_the_widgets (curvetoolbox); } } /*! \fn G_MODULE_EXPORT void on_smoother_released (GtkButton * button, gpointer data) \brief smooth g(r), s(q), s(k) or g(k) \param button the button sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_smoother_released (GtkButton * button, gpointer data) { int g, h, i, j, k, l, m; l = GPOINTER_TO_INT(data); if (active_project -> analysis[l] -> calc_ok) { if (l == SKD || l == SKT) { xsk = duplicate_double(active_project -> analysis[l] -> curves[0] -> ndata, active_project -> analysis[l] -> curves[0] -> data[0]); } g = (l == SKT) ? (active_project -> skt_all_sets) ? active_project -> steps - active_project -> skt_corr_threshold : active_project -> skt_n_data_sets : 1; h = (l == SKT) ? active_project -> analysis[SKD] -> numc : 1; for (j=0; j analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); if (l ==GDR || l == GDK) { i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); } for (k=0 ; k nspec ; k++) { for (m=0 ; m nspec ; m++) { i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); if (l == GDR || l == GDK) { i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); i = i+1; } } } if (l == SQD || l == SKD || l == SKT) { for (k=0 ; k nspec ; k++) { for (m=0 ; m nspec ; m++) { i = i+2; smooth_and_save_ (active_project -> analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); } } } if (active_project -> nspec == 2) { m = 3; if (l == SQD || l == SKD || l == SKT) m = m+1; for (k=0 ; k analysis[l] -> curves[i-1] -> data[0], active_project -> analysis[l] -> curves[i-1] -> data[1], & active_project -> analysis[l] -> fact, & i, & active_project -> analysis[l] -> curves[i-1] -> ndata, & l); } } } if (l == SKD || l == SKT) { g_free (xsk); xsk = NULL; } fill_tool_model (); show_the_widgets (curvetoolbox); if (l == GDR || l == GDK) { for (i=0; i<4; i=i+3) update_after_calc (i); } else if (l == SQD || l == SKD) { for (i=1; i<3; i++) update_after_calc (i); } else { update_after_calc (l); } } else { show_error (_("No data set(s) to be smoothed\n"), 0, calc_win); } } /*! \fn void add_advanced_options (int skq, dint skadv[2], GtkWidget * vbox) \brief add k-point selection advanced options \param skq calculation ID (SKD or SKT) \param skadv associated pointers \param vbox target box widget */ void add_advanced_options (int skq, dint skadv[2], GtkWidget * vbox) { gchar * adv_name[2]={i18n("Probability to keep wave\nvector q > Qlim ∈ [0.0-1.0]"), i18n("Qlim-1] ∈ [Qmin-Qmax]")}; GtkWidget * advanced_options = create_expander (_(" Advanced options"), NULL); gtk_widget_set_size_request (advanced_options, -1, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, advanced_options, FALSE, TRUE, 10); avbox = create_vbox (5); GtkWidget * ahbox; GtkWidget * fixed; GtkWidget * aentry; int i, j; i = (skq == SKT) ? 1 : 0; for (j=0; j<2; j++) { ahbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, avbox, ahbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label (_(adv_name[j]), 175, -1, 0.0, 0.5), FALSE, FALSE, 5); aentry = create_entry (G_CALLBACK(set_advanced_sq), 100, 15, FALSE, & skadv[j]); update_entry_double (GTK_ENTRY(aentry), active_project -> sk_advanced[i][j]); fixed = gtk_fixed_new (); gtk_fixed_put (GTK_FIXED(fixed), aentry, 0.0, 0.0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, fixed, FALSE, FALSE, 10); } g_signal_connect (G_OBJECT(advanced_options), "activate", G_CALLBACK(expand_opt), GINT_TO_POINTER(i)); add_container_child (CONTAINER_EXP, advanced_options, avbox); show_the_widgets (advanced_options); widget_set_sensitive (advanced_options, 1); } /*! \fn void add_smoothing_options (int grsqk, GtkWidget * vbox) \brief add gaussian smoothing options \param calculation ID (GDR, SQD, SKD, GDK or SKT) \param vbox target box widget */ void add_smoothing_options (int grsqk, GtkWidget * vbox) { GtkWidget * smooth_options = create_expander (_(" Gaussian data smoothing"), NULL); gtk_widget_set_size_request (smooth_options, -1, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, smooth_options, FALSE, TRUE, 10); GtkWidget * avbox = create_vbox (5); GtkWidget * smbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, smbox, gtk_label_new(_("Factor [0.0-1.0]")), FALSE, FALSE, 0); GtkWidget * sentry = create_entry (G_CALLBACK(set_sfact), 100, 15, FALSE, GINT_TO_POINTER(grsqk)); update_entry_double (GTK_ENTRY(sentry), active_project -> analysis[grsqk] -> fact); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, smbox, sentry, FALSE, TRUE, 10); GtkWidget * smooth = create_button (_("Smooth"), IMG_NONE, NULL, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(on_smoother_released), GINT_TO_POINTER(grsqk)); g_signal_connect (G_OBJECT(smooth_options), "activate", G_CALLBACK(expand_opt), GINT_TO_POINTER(0)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, smbox, smooth, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, avbox, smbox, FALSE, FALSE, 5); add_container_child (CONTAINER_EXP, smooth_options, avbox); show_the_widgets (smooth_options); widget_set_sensitive (smooth_options, 1); } /*! \fn void calc_gr_sq (GtkWidget * box, int id) \brief creation of the g(r) / s(q) / s(k) / g(k) calculation widgets \param box GtkWidget that will receive the data \param id the calculation id */ void calc_gr_sq (GtkWidget * box, int id) { gchar * val_a[4]={i18n("Number of δr steps"), i18n("Number of δq steps"), i18n("Number of δq steps"), i18n("Number of δr steps")}; gchar * val_b[3]={i18n("Qmax-1]"), i18n("Qmax-1]"), i18n("Qmax for the FFT [Å-1]")}; if (id == SKD) { skadv[0].a = skadv[1].a = SKD; skadv[0].b = 0; skadv[1].b = 1; } GtkWidget * vbox = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, vbox, FALSE, FALSE, 0); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_(val_a[id]), 150, -1, 0.0, 0.5), FALSE, FALSE, 10); GtkWidget * entry= create_entry (G_CALLBACK(set_delta), 100, 15, FALSE, GINT_TO_POINTER(id)); update_entry_int (GTK_ENTRY(entry), active_project -> analysis[id] -> num_delta); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); if (id > GDR) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_(val_b[id-1]), 150, -1, 0.0, 0.5), FALSE, FALSE, 10); GtkWidget * entry= create_entry (G_CALLBACK(set_max), 100, 15, FALSE, GINT_TO_POINTER(id)); update_entry_double (GTK_ENTRY(entry), active_project -> analysis[id] -> max); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); } if (id == GDR || id == GDK) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox_note (0, active_project -> analysis[GDR] -> max), FALSE, FALSE, 0); } if (id == SQD) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox_note (1, active_project -> analysis[SQD] -> min), FALSE, FALSE, 0); } if (id == SKD|| id == GDK) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox_note (1, active_project -> analysis[SKD] -> min), FALSE, FALSE, 0); } if (id == GDK) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox_note (2, active_project -> analysis[SKD] -> max), FALSE, FALSE, 0); } if (id == GDR || id == GDK) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label (_("Dmax is the maximum inter-atomic distance in the model"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } if (id > 0) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label (_("Qmin is the minimum wave vector for the model"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } if (id == GDK) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label (_("Qmax is the maximum wave vector to compute S(q)"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, vbox, FALSE, FALSE, 0); if (id == SKD) add_advanced_options (SKD, skadv, vbox); add_smoothing_options (id, vbox); } GtkWidget * skt_all_info = NULL; GtkWidget * sktqw_vbox[2]; GtkWidget * sktqw_delta[2]; GtkWidget * t_q_vbox[2]; GtkWidget * skt_res_info; /*! \fn G_MODULE_EXPORT void set_skt_step_id (GtkEntry * res, gpointer data) \brief set "to be saved" step id \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_skt_step_id (GtkEntry * res, gpointer data) { int sid = GPOINTER_TO_INT (data); const gchar * m = entry_get_text (res); int v = (int) string_to_double ((gpointer)m); if (sid && sid < active_project -> skt_n_data_sets - 1) { if (v > active_project -> skt_step_id[sid-1] && v < active_project -> skt_step_id[sid+1]) active_project -> skt_step_id[sid] = v; } else if (sid) { if (v > active_project -> skt_step_id[sid-1]) active_project -> skt_step_id[sid] = v; } else if (! sid && active_project -> skt_n_data_sets > 1) { if (v < active_project -> skt_step_id[sid+1]) active_project -> skt_step_id[sid] = v; } update_entry_int (res, active_project -> skt_step_id[sid]); } /*! \fn G_MODULE_EXPORT void set_sqw_q_id (GtkEntry * res, gpointer data) \brief set "to be saved" q vector \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_sqw_q_id (GtkEntry * res, gpointer data) { int sid = GPOINTER_TO_INT (data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (sid && sid < active_project -> sqw_n_data_sets - 1) { if (v > active_project -> sqw_q_id[sid-1] && v < active_project -> sqw_q_id[sid+1]) active_project -> sqw_q_id[sid] = v; } else if (sid) { if (v > active_project -> sqw_q_id[sid-1] && v <= active_project -> analysis[SKT] -> max) active_project -> sqw_q_id[sid] = v; } else if (! sid && active_project -> sqw_n_data_sets > 1) { if (v < active_project -> sqw_q_id[sid+1] && v >= active_project -> analysis[SKT] -> min) active_project -> sqw_q_id[sid] = v; } update_entry_double (res, active_project -> sqw_q_id[sid]); } /*! \fn void add_remove_t_steps_q_vectors (int val, int calc) \brief add or remove t steps results to save \param val total number of t steps \param calc 0 = S(k,t), 1 = S(q,w) */ void add_remove_t_steps_q_vectors (int val, int calc) { t_q_vbox[calc] = destroy_this_widget (t_q_vbox[calc]); switch (calc) { case 0: if (active_project -> skt_step_id) g_free (active_project -> skt_step_id); active_project -> skt_step_id = NULL; break; case 1: if (active_project -> sqw_q_id) g_free (active_project -> sqw_q_id); active_project -> sqw_q_id = NULL; break; } if (val) { t_q_vbox[calc] = create_vbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, sktqw_delta[calc], t_q_vbox[calc], FALSE, FALSE, 0); int delta_t; double delta_q; if (! calc) { active_project -> skt_n_data_sets = min (val, active_project -> steps - active_project -> skt_corr_threshold); delta_t = (active_project -> steps - active_project -> skt_corr_threshold) / active_project -> skt_n_data_sets; active_project -> skt_step_id = allocint (active_project -> skt_n_data_sets); } else { active_project -> sqw_n_data_sets = val; active_project -> sqw_q_id = allocdouble (active_project -> sqw_n_data_sets); delta_q = (active_project -> analysis[SKT] -> max - active_project -> analysis[SKT] -> min)/active_project -> sqw_n_data_sets; } int i, j; GtkWidget * hbox; GtkWidget * entry; j = (! calc) ? active_project -> skt_n_data_sets : active_project -> sqw_n_data_sets; for (i=0; i skt_step_id[i] = 1 + i*delta_t; } else { active_project -> sqw_q_id[i] = active_project -> analysis[SKT] -> min + i*delta_q; } hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, t_q_vbox[calc], hbox, FALSE, FALSE, 0); if (! calc) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (g_strdup_printf("%d)\tδt= ", i+1), 150, -1, 0.75, 0.5), FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(set_skt_step_id), 100, 15, FALSE, GINT_TO_POINTER(i)); update_entry_int (GTK_ENTRY(entry), active_project -> skt_step_id[i]); } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (g_strdup_printf("%d)\tq= ", i+1), 150, -1, 0.75, 0.5), FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(set_sqw_q_id), 100, 15, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), active_project -> sqw_q_id[i]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); } show_the_widgets (sktqw_delta[calc]); } } /*! \fn G_MODULE_EXPORT void set_t_q_spin (GtkSpinButton * res, gpointer data) \brief set the number of t steps results to save - spin button \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_t_q_spin (GtkSpinButton * res, gpointer data) { if (! preferences) add_remove_t_steps_q_vectors (gtk_spin_button_get_value_as_int(res), GPOINTER_TO_INT(data)); } /*! \fn void add_correlations_options (int cid) \brief add correlation(s) options to the S(k,t) calculation dialog \param cid calculation ID: 0 = S(k,t), 1 = S(q,w) */ void add_correlations_options (int cid) { sktqw_delta[cid] = create_vbox(0); t_q_vbox[cid] = NULL; add_box_child_start (GTK_ORIENTATION_VERTICAL, sktqw_vbox[cid], sktqw_delta[cid], FALSE, FALSE, 0); gchar * aco_info = g_strdup_printf ("%s", (! cid) ? _("Number of δt results to save") : _("Number of q vectors to analyze")); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, sktqw_delta[cid], hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (aco_info, 150, -1, 0.0, 0.5), FALSE, FALSE, 10); g_free (aco_info); int val, vbl; if (! cid) { val = (preferences) ? tmp_skt_n_sets : active_project -> skt_n_data_sets; vbl = (preferences) ? 100 : active_project -> steps-active_project -> skt_corr_threshold; } else { val = (preferences) ? tmp_sqw_n_sets : active_project -> sqw_n_data_sets; vbl = 100; } GtkWidget * spin = spin_button (G_CALLBACK(set_t_q_spin), val, 1.0, vbl, 1.0, 0, 100, GINT_TO_POINTER(cid)); gtk_widget_set_size_request (spin, 25, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, spin, FALSE, FALSE, 10); show_the_widgets (sktqw_vbox[cid]); } /*! \fn G_MODULE_EXPORT void set_correlations (GtkEntry * entry, gpointer data) \brief set the minimum number of correlated configuration to compute S(k,t) \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_correlations (GtkEntry * entry, gpointer data) { const gchar * m; m = entry_get_text (entry); int v = (int) string_to_double ((gpointer)m); int pid = GPOINTER_TO_INT(data); switch (pid) { case 0: if (v <= 0 || v >= active_project -> steps-1) { show_warning (_("This value must be > 0 and < number of steps"), calc_win); } else { active_project -> skt_corr_threshold = v; gchar * str = g_strdup_printf (_("%d calculation results in total !"), active_project -> analysis[SKD] -> numc * (active_project -> steps - active_project -> skt_corr_threshold)); skt_all_info = destroy_this_widget (skt_all_info); skt_all_info = markup_label (str, -1, -1, 0.5, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, skt_res_info, skt_all_info, FALSE, FALSE, 5); widget_set_sensitive (skt_all_info, active_project -> skt_all_sets); add_remove_t_steps_q_vectors (active_project -> skt_n_data_sets, 0); show_the_widgets (skt_res_info); } update_entry_int (entry, active_project -> skt_corr_threshold); break; case 1: if (v <= 0) { show_warning (_("This value must be > 0"), calc_win); } else { if (preferences) { tmp_sqw_freq = v; } else { active_project -> sqw_freq = v; } } update_entry_int (entry, (preferences) ? tmp_sqw_freq : active_project -> sqw_freq); break; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_skt_all (GtkCheckButton * but, gpointer data) \brief toggle the output of all s(k,t) data sets \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_skt_all (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_skt_all (GtkToggleButton * but, gpointer data) \brief toggle the output of all s(k,t) data sets \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_skt_all (GtkToggleButton * but, gpointer data) #endif { gboolean status = button_get_status ((GtkWidget *)but); if (! preferences) { active_project -> skt_all_sets = status; } else { tmp_skt_sets = status; } widget_set_sensitive (sktqw_delta[0], ! status); if (! preferences) { widget_set_sensitive (skt_all_info, status); if (status) { hide_the_widgets (sktqw_delta[0]); if (active_project -> skt_step_id) g_free (active_project -> skt_step_id); active_project -> skt_step_id = NULL; active_project -> skt_n_data_sets = 1; active_project -> skt_step_id = allocint (1); active_project -> skt_step_id[0] = -1; } else { active_project -> skt_corr_threshold = (active_project -> steps < 20) ? 1 : 10; active_project -> skt_n_data_sets = min (5, active_project -> steps); add_remove_t_steps_q_vectors (active_project -> skt_n_data_sets, 0); show_the_widgets (sktqw_delta[0]); } } } /*! \fn void calc_sk_t (GtkWidget * box) \brief creation of the s(k,t) calculation widgets \param box GtkWidget that will receive the data */ void calc_sk_t (GtkWidget * box) { skadv[0].a = skadv[1].a = SKT; skadv[0].b = 0; skadv[1].b = 1; GtkWidget * vbox = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, vbox, FALSE, FALSE, 0); GtkWidget * hbox_skt = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox_skt, FALSE, FALSE, 5); GtkWidget * vbox_skt[2]; int i, j; j = (preferences) ? 1 : 2; for (i=0; i skt_step_id) { active_project -> skt_n_data_sets = default_skt_n_sets; } if (! active_project -> sqw_q_id) { active_project -> sqw_n_data_sets = default_sqw_n_sets; } } GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[0], hbox, FALSE, FALSE, 0); gchar * str = g_strdup_printf ("%s", _("Number of δq steps")); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 150, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); GtkWidget * entry = create_entry (G_CALLBACK(set_delta), 100, 15, FALSE, GINT_TO_POINTER(SKT)); update_entry_int (GTK_ENTRY(entry), (preferences) ? tmp_num_delta[SKT-2] : active_project -> analysis[SKT] -> num_delta); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); if (! preferences) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[0], hbox, FALSE, FALSE, 5); str = g_strdup_printf ("%s", _("Qmax-1]")); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 150, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); entry= create_entry (G_CALLBACK(set_max), 100, 15, FALSE, GINT_TO_POINTER(SKT)); update_entry_double (GTK_ENTRY(entry), active_project -> analysis[SKT] -> max); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[0], hbox_note (1, active_project -> analysis[SKT] -> min), FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("Qmin is the minimum wave vector for the model"), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[0], hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label ("δtmin", 150, -1, 0.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_correlations), 100, 15, FALSE, GINT_TO_POINTER(0)); update_entry_int (GTK_ENTRY(entry), active_project -> skt_corr_threshold); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (_("δtmin is the correlation threshold"), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); } if (! preferences) { calc_msd (vbox_skt[0], SKT); } else { dyna_parameters (vbox_skt[0], SKT-2); } hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[0], hbox, FALSE, FALSE, 5); str = g_strdup_printf ("%s", _("ω points in [0.0, ωmax]")); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 150, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); entry = create_entry (G_CALLBACK(set_correlations), 100, 15, FALSE, GINT_TO_POINTER(1)); update_entry_int (GTK_ENTRY(entry), (preferences) ? tmp_sqw_freq : active_project -> sqw_freq); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); omega_max_hbox = destroy_this_widget(omega_max_hbox); omega_max_hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[0], omega_max_hbox, FALSE, FALSE, 5); update_omega_max (); if (! preferences) { add_advanced_options (SKT, skadv, vbox_skt[0]); add_smoothing_options (SKT, vbox_skt[0]); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[(preferences) ? 0 : 1], markup_label (_("Results"), -1, -1, 0.0, 0.5), FALSE, FALSE, (preferences) ? 10 : 0); GtkWidget * tbox = create_vbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[(preferences) ? 0 : 1], tbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, tbox, markup_label (_("atomes cannot yet display 3D results,"), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, tbox, markup_label (_("but we are working to add this feature !"), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, tbox, markup_label (_("For the time being you need to select"), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, tbox, markup_label (_("what to display using the 2D graph system:"), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); GtkWidget * notebook = gtk_notebook_new (); #ifdef GTK4 gtk_widget_set_vexpand (notebook, TRUE); #endif add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox_skt[(preferences) ? 0 : 1], notebook, TRUE, TRUE, (preferences) ? 10 : 5); GtkWidget * nbox; GtkWidget * scroll; for (i=0; i<2; i++) { scroll = create_scroll (NULL, 200, (preferences) ? 100 : 350, GTK_SHADOW_NONE); nbox = create_vbox(BSEP); add_container_child (CONTAINER_SCR, scroll, nbox); if (! i) { add_box_child_start (GTK_ORIENTATION_VERTICAL, nbox, check_button(_("All δt correlated calculations"), -1, -1, FALSE, G_CALLBACK(toggle_skt_all), NULL), FALSE, FALSE, 5); if (! preferences) { str = g_strdup_printf (_("%d calculation results in total !"), active_project -> analysis[SKD] -> numc * (active_project -> steps - active_project -> skt_corr_threshold)); skt_all_info = markup_label (str, -1, -1, 0.5, 0.5); g_free (str); skt_res_info = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, nbox, skt_res_info, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, skt_res_info, skt_all_info, FALSE, FALSE, 5); } } sktqw_vbox[i] = create_vbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, nbox, sktqw_vbox[i], FALSE, FALSE, 0); if (! i) widget_set_sensitive (sktqw_vbox[i], (preferences) ? ! tmp_skt_sets : ! active_project -> skt_all_sets); add_correlations_options (i); if (! preferences) { if (! i && ! active_project -> skt_all_sets) { add_remove_t_steps_q_vectors (active_project -> skt_n_data_sets, 0); } else if (i) { add_remove_t_steps_q_vectors (active_project -> sqw_n_data_sets, 1); } } if (! i) widget_set_sensitive(skt_all_info, (preferences) ? tmp_skt_sets : active_project -> skt_all_sets); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), scroll, markup_label((! i) ? _("Intermediate scattering: F(q,δt)") : _("Dynamic calculations: S(q,ω)"), -1, -1, 0.0, 0.5)); } } /*! \fn G_MODULE_EXPORT void run_on_calc_activate (GtkDialog * dial, gint response_id, gpointer data) \brief create a calculation dialog: run the dialog \param dial the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_calc_activate (GtkDialog * dial, gint response_id, gpointer data) { int i; int id = GPOINTER_TO_INT(data); switch (response_id) { case GTK_RESPONSE_APPLY: switch (id) { case GDR: if (test_gr (GDR)) on_calc_gr_released (calc_win, NULL); break; case SQD: if (test_sq (SQD)) on_calc_sq_released (calc_win, NULL); break; case SKD: if (test_sq (SKD)) on_calc_sk_released (calc_win, NULL); break; case GDK: if (test_gr (GDK)) on_calc_gq_released (calc_win, NULL); break; case BND: if (test_bonds ()) on_calc_bonds_released (calc_win, NULL); break; case RIN-1: if (test_rings ()) { //show_the_widgets (spinner); //gtk_spinner_start (GTK_SPINNER(spinner)); on_calc_rings_released (calc_win, NULL); //gtk_spinner_stop (GTK_SPINNER(spinner)); //hide_the_widgets (spinner); } break; case CHA-1: if (test_rings ()) { //show_the_widgets (spinner); //gtk_spinner_start (GTK_SPINNER(spinner)); on_calc_chains_released (calc_win, NULL); //gtk_spinner_stop (GTK_SPINNER(spinner)); //hide_the_widgets (spinner); } break; case SPH-1: if (test_sph ()) on_calc_sph_released (calc_win, NULL); break; case MSD-1: if (test_msd ()) on_calc_msd_released (calc_win, NULL); break; case SKT-1: if (test_skt ()) on_calc_skt_released (calc_win, NULL); default: break; } break; default: frag_update = mol_update = 0; for (i=0; i<3; i++) active_project -> runc[i] = FALSE; if (id == SKT-1) { omega_max_info = destroy_this_widget (omega_max_info); omega_max_hbox = destroy_this_widget (omega_max_hbox); skt_all_info = destroy_this_widget (skt_all_info); } avbox = destroy_this_widget (avbox); destroy_this_dialog (dial); calc_win = destroy_this_widget (calc_win); break; } } /*! \fn G_MODULE_EXPORT void on_calc_activate (GtkWidget * widg, gpointer data) \brief create a calculation dialog - prepare the dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_activate (GtkWidget * widg, gpointer data) { int id = GPOINTER_TO_INT(data); calc_win = calc_window(id); GtkWidget * box = dialog_get_content_area (calc_win); gtk_box_set_homogeneous (GTK_BOX(box), FALSE); switch (id) { case BND: calc_bonds (box); break; case RIN-1: search_type = 0; calc_rings (box); break; case CHA-1: search_type = 1; calc_rings (box); break; case SPH-1: calc_sph (box); break; case MSD-1: calc_msd (box, MSD); break; case SKT-1: calc_sk_t (box); break; default: calc_gr_sq (box, id); break; } #ifndef GTK4 gtk_window_set_icon (GTK_WINDOW (calc_win), gdk_pixbuf_new_from_file(graph_img[(id < ANG) ? id : id+1], NULL)); #endif GtkWidget * vbox = create_vbox (BSEP); gtk_widget_set_size_request (vbox, -1, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, vbox, FALSE, FALSE, 0); run_this_gtk_dialog (calc_win, G_CALLBACK(run_on_calc_activate), data); } atomes_1.3.1/src/gui/sqcall.c0000664000175000017500000003005015212624223015501 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file sqcall.c * @short Callbacks for the s(q) / s(k) calculation dialog * @author Sébastien Le Roux */ /* * This file: 'sqcall.c' * * Contains: * - The callbacks for the s(q) / s(k) calculation dialog * * List of functions: void init_sq (project * this_proj, int sqk); void update_sq_view (project * this_proj, int sqk); void save_xsk_ (int * interv, double datacurve[* interv]); G_MODULE_EXPORT void on_calc_sq_released (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_calc_sk_released (GtkWidget * widg, gpointer data); */ #include #include #include #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" /*! \fn void init_sq (project * this_proj, int sqk) \brief initialize the curve widgets for the s(q) / s(k) calculation \param this_proj the target project \param sqk s(q) (SQ) or s(k) (SK) */ void init_sq (project * this_proj, int sqk) { int i, j, k; this_proj -> analysis[sqk] -> curves[0] -> name = g_strdup_printf ("S(q) %s", _("Neutrons")); this_proj -> analysis[sqk] -> curves[1] -> name = g_strdup_printf ("S(q) %s - %s", _("Neutrons"), _("smoothed")); this_proj -> analysis[sqk] -> curves[2] -> name = g_strdup_printf ("Q(q) %s", _("Neutrons")); this_proj -> analysis[sqk] -> curves[3] -> name = g_strdup_printf ("Q(q) %s - %s", _("Neutrons"), _("smoothed")); this_proj -> analysis[sqk] -> curves[4] -> name = g_strdup_printf ("S(q) %s", _("X-rays")); this_proj -> analysis[sqk] -> curves[5] -> name = g_strdup_printf ("S(q) %s - %s", _("X-rays"), _("smoothed")); this_proj -> analysis[sqk] -> curves[6] -> name = g_strdup_printf ("Q(q) %s", _("X-rays")); this_proj -> analysis[sqk] -> curves[7] -> name = g_strdup_printf ("Q(q) %s - %s", _("X-rays"), _("smoothed")); k = 8; for ( i = 0 ; i < this_proj -> nspec ; i++ ) { for ( j = 0 ; j < this_proj -> nspec ; j++ ) { this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("AL(q)[%s,%s]", active_chem -> label[i], active_chem -> label[j]); k=k+1; this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("AL(q)[%s,%s] - %s", active_chem -> label[i], active_chem -> label[j], _("smoothed")); k=k+1; } } for ( i = 0 ; i < this_proj -> nspec ; i++ ) { for ( j = 0 ; j < this_proj -> nspec ; j++ ) { this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("FZ(q)[%s,%s]", active_chem -> label[i], active_chem -> label[j]); k=k+1; this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("FZ(q)[%s,%s] - %s", active_chem -> label[i], active_chem -> label[j], _("smoothed")); k=k+1; } } if ( this_proj -> nspec == 2 ) { this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("BT(q)[NN]"); k=k+1; this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("BT(q)[NN] - %s", _("smoothed")); k=k+1; this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("BT(q)[NC]"); k=k+1; this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("BT(q)[NC] - %s", _("smoothed")); k=k+1; this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("BT(q)[CC]"); k=k+1; this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("BT(q)[CC] - %s", _("smoothed")); k=k+1; this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("BT(q)[ZZ]"); k=k+1; this_proj -> analysis[sqk] -> curves[k] -> name = g_strdup_printf ("BT(q)[ZZ] - %s", _("smoothed")); } add_curve_widgets (this_proj, sqk); this_proj -> analysis[sqk] -> init_ok = TRUE; } /*! \fn void update_sq_view (project * this_proj, int sqk) \brief update the text view for s(q) / s(k) calculation \param this_proj the target project \param sqk s(q) (SQ) or s(k) (SK) */ void update_sq_view (project * this_proj, int sqk) { gchar * str; if (this_proj -> analysis[sqk] -> calc_buffer == NULL) this_proj -> analysis[sqk] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> analysis[sqk] -> calc_buffer); if (sqk == SKD || sqk == SQD) { print_info (_("\n\nStructure factor(s)"), "heading", this_proj -> analysis[sqk] -> calc_buffer); } else { print_info (_("\n\nDynamic structure factor(s)"), "heading", this_proj -> analysis[sqk] -> calc_buffer); } if (sqk == SKD || sqk == SKT) { print_info (_(" - reciprocal space calculation\n\n"), "heading", this_proj -> analysis[sqk] -> calc_buffer); } else { print_info (" - FFT[g(r)]\n\n", "heading", this_proj -> analysis[sqk] -> calc_buffer); } print_info (_("Calculation details:\n\n"), NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info (_("\tReciprocal space discretization:\n\n"), NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info (_("\t - Number of δq steps: "), "bold", this_proj -> analysis[sqk] -> calc_buffer); str = g_strdup_printf ("%d", this_proj -> analysis[sqk] -> num_delta); print_info (str, "bold_blue", this_proj -> analysis[sqk] -> calc_buffer); g_free (str); print_info (_("\n\n\t between "), NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info ("Q", "bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("min", "sub_bold", this_proj -> analysis[sqk] -> calc_buffer); print_info (" ", NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info (_("and"), NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info (" ", NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info ("Q", "bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("max", "sub_bold", this_proj -> analysis[sqk] -> calc_buffer); print_info (_("\n\t where "), NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info ("Q", "bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("min", "sub_bold", this_proj -> analysis[sqk] -> calc_buffer); print_info (_(" is the minimum wave vector, and "), NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info ("Q", "bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("max", "sub_bold", this_proj -> analysis[sqk] -> calc_buffer); print_info (_(" is the maximum wave vector:\n\n"), NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info ("\t\tQ", "bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("min", "sub_bold", this_proj -> analysis[sqk] -> calc_buffer); print_info (" = ", "bold", this_proj -> analysis[sqk] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> analysis[sqk] -> min); print_info (str, "bold_blue", this_proj -> analysis[sqk] -> calc_buffer); g_free (str); print_info (" Å", "bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("-1", "sup_bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("\t", NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info (_("and"), NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info ("\t", NULL, this_proj -> analysis[sqk] -> calc_buffer); print_info ("Q", "bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("max", "sub_bold", this_proj -> analysis[sqk] -> calc_buffer); print_info (" = ", "bold", this_proj -> analysis[sqk] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> analysis[sqk] -> max); print_info (str, "bold_blue", this_proj -> analysis[sqk] -> calc_buffer); g_free (str); print_info (" Å", "bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("-1", "sup_bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("\n\n\t - δq = ", "bold", this_proj -> analysis[sqk] -> calc_buffer); str = g_strdup_printf ("%f", this_proj -> analysis[sqk] -> delta); print_info (str, "bold_blue", this_proj -> analysis[sqk] -> calc_buffer); g_free (str); print_info (" Å", "bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("-1", "sup_bold", this_proj -> analysis[sqk] -> calc_buffer); print_info ("\n", "bold", this_proj -> analysis[sqk] -> calc_buffer); if (sqk != SKT) { print_info (calculation_time(TRUE, this_proj -> analysis[sqk] -> calc_time), NULL, this_proj -> analysis[sqk] -> calc_buffer); } } /*! \fn G_MODULE_EXPORT void on_calc_sq_released (GtkWidget * widg, gpointer data) \brief compute s(q) / s(k) \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_sq_released (GtkWidget * widg, gpointer data) { int i; if (! active_project -> analysis[SQD] -> init_ok) init_sq (active_project, SQD); clean_curves_data (SQD, 0, active_project -> analysis[SQD] -> numc); active_project -> analysis[SQD] -> delta = (active_project -> analysis[SQD] -> max - active_project -> analysis[SQD] -> min) / active_project -> analysis[SQD] -> num_delta; prepostcalc (widg, FALSE, SQD, 0, opac); i = s_of_q_ (& active_project -> analysis[SQD] -> max, & active_project -> analysis[SQD] -> min, & active_project -> analysis[SQD] -> num_delta); prepostcalc (widg, TRUE, SQD, i, 1.0); if (! i) { show_error (_("The S(q) calculation has failed"), 0, widg); } else { update_sq_view (active_project, SQD); show_the_widgets (curvetoolbox); } fill_tool_model (); for (i=1; i<3; i++) update_after_calc (i); } /*! \fn void save_xsk_ (int * interv, double datacurve[*interv]) \brief get s(k) calculation results form Fortran90 \param interv number of data point (delta r/q) \param datacurve calculation result */ void save_xsk_ (int * interv, double datacurve[* interv]) { if (* interv != 0) { xsk = duplicate_double (* interv, datacurve); } } /*! \fn G_MODULE_EXPORT void on_calc_sk_released (GtkWidget * widg, gpointer data) \brief compute s(q) / s(k) \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_sk_released (GtkWidget * widg, gpointer data) { int i, j; if (! active_project -> analysis[SKD] -> init_ok) init_sq (active_project, SKD); clean_curves_data (SKD, 0, active_project -> analysis[SKD] -> numc); active_project -> analysis[SKD] -> delta = (active_project -> analysis[SKD] -> max - active_project -> analysis[SKD] -> min) / active_project -> analysis[SKD] -> num_delta; prepostcalc (widg, FALSE, SKD, 0, opac); i = cqvf_ (& active_project -> analysis[SKD] -> max, & active_project -> analysis[SKD] -> min, & active_project -> analysis[SKD] -> num_delta, & active_project -> sk_advanced[0][0], & active_project -> sk_advanced[0][1]); if (i == 1) { for (i=0; i analysis[SKD] -> numc; i++) { active_project -> analysis[SKD] -> curves[i] -> ndata = 0; } j = s_of_k_ (& active_project -> analysis[SKD] -> num_delta, & active_project -> xcor); g_free (xsk); xsk = NULL; prepostcalc (widg, TRUE, SKD, j, 1.0); active_project -> analysis[GDK] -> avail_ok = j; if (! j) { remove_action ("analyze.3"); show_error (_("The S(q) calculation has failed"), 0, widg); } else { add_analysis_action (GDK); update_sq_view (active_project, SKD); show_the_widgets (curvetoolbox); } } else { prepostcalc (widg, TRUE, SKD, i, 1.0); show_error (_("Problem during the selection of the k-points\nused to sample the reciprocal lattice"), 0, widg); } fill_tool_model (); for (i=1; i<3; i++) update_after_calc (i); } atomes_1.3.1/src/gui/work_menu.c0000664000175000017500000003237515212624223016244 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file work_menu.c * @short Workspace menu GTK3 version \n Callbacks for the workspace menu * @author Sébastien Le Roux */ /* * This file: 'work_menu.c' * * Contains: * - The workspace menu GTK3 version - Callbacks for the workspace menu * * List of functions: G_MODULE_EXPORT void on_create_new_project (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void leaving_from_menu (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void compute_this_prop (GtkWidget * widg, gpointer data); GtkWidget * this_work_menu (int p, int c); GtkWidget * work_menu (int p, int c); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" #include "glview.h" extern G_MODULE_EXPORT void on_calc_activate (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data); /*! \fn G_MODULE_EXPORT void on_create_new_project (GtkWidget * widg, gpointer data) \brief create a new project \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_create_new_project (GtkWidget * widg, gpointer data) { init_project (TRUE); add_project_to_workspace (); frag_update = mol_update = 0; apply_project (FALSE); #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_project -> modelgl -> ogl_mode[1], TRUE); set_mode (active_project -> modelgl -> ogl_mode[1], & active_project -> modelgl -> colorp[1][0]); #else set_mode (NULL, & active_project -> modelgl -> colorp[1][0]); #endif prep_calc_actions (); } /*! \fn G_MODULE_EXPORT void leaving_from_menu (GtkWidget * widg, gpointer data) \brief leaving atomes ? \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void leaving_from_menu (GtkWidget * widg, gpointer data) { #ifdef GTK4 leaving_question (NULL, NULL); #else leaving_question (NULL, NULL, NULL); #endif } int calc_to_compute; /*! \fn G_MODULE_EXPORT void compute_this_prop (GtkWidget * widg, gpointer data) \brief to compute the 'calc_to_compute' \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void compute_this_prop (GtkWidget * widg, gpointer data) { activate_project (NULL, data); on_calc_activate (NULL, GINT_TO_POINTER(calc_to_compute)); } #ifdef GTK3 /*! \fn GtkWidget * this_work_menu (int p, int c) \brief create the workspace menu GTK3 version with icons \param p project id, or -1 \param c calculation id, or -1 */ GtkWidget * this_work_menu (int p, int c) { GtkWidget * menu; GtkWidget * port; GtkWidget * dmenu; menu = gtk_menu_new (); GtkAccelGroup * accel_group = gtk_accel_group_new (); gtk_window_add_accel_group (GTK_WINDOW (MainWindow), accel_group); if (! atomes_from_libreoffice) { widget_set_sensitive (gtk3_menu_item (menu, _("Workspace"), IMG_FILE, (gpointer)PACKAGE_TD, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE), 0); add_menu_separator (menu); gtk3_menu_item (menu, _("Open"), IMG_STOCK, (gpointer)FOPEN, G_CALLBACK(on_open_save_activate), GINT_TO_POINTER(2), TRUE, GDK_KEY_w, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Save"), IMG_STOCK, (gpointer)FSAVE, G_CALLBACK(on_open_save_activate), GINT_TO_POINTER(3), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Save As"), IMG_STOCK, (gpointer)FSAVEAS, G_CALLBACK(on_save_as_activate), GINT_TO_POINTER(3), TRUE, GDK_KEY_s, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Close"), IMG_STOCK, (gpointer)FCLOSE, G_CALLBACK(on_close_workspace), GINT_TO_POINTER(1), TRUE, GDK_KEY_c, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); add_menu_separator (menu); } if (p == -1) { widget_set_sensitive (gtk3_menu_item (menu, _("Project(s)"), IMG_FILE, (gpointer)PACKAGE_TD, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE), FALSE); add_menu_separator (menu); if (! atomes_from_libreoffice) { gtk3_menu_item (menu, _("New"), IMG_STOCK, (gpointer)FNEW, G_CALLBACK(on_create_new_project), NULL, TRUE, GDK_KEY_n, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Open"), IMG_STOCK, (gpointer)FSAVE, G_CALLBACK(on_open_save_activate), GINT_TO_POINTER(0), TRUE, GDK_KEY_o, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); } gtk3_menu_item (menu, _("Save"), IMG_STOCK, (gpointer)FSAVE, G_CALLBACK(on_open_save_activate), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Save As"), IMG_STOCK, (gpointer)FSAVEAS, G_CALLBACK(on_save_as_activate), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); if (! atomes_from_libreoffice) { gtk3_menu_item (menu, _("Close"), IMG_STOCK, (gpointer)FCLOSE, G_CALLBACK(on_close_activate), GINT_TO_POINTER(activep), FALSE, 0, 0, FALSE, FALSE, FALSE); } port = gtk3_menu_item (menu, _("Export"), IMG_FILE, (gpointer)PACKAGE_CON, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE); dmenu = gtk_menu_new (); gtk3_menu_item (dmenu, _("ISAACS Project File '*.ipf'"), IMG_FILE, (gpointer)PACKAGE_MOL, G_CALLBACK(on_isaacs_port), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (dmenu, _("Atomic Coordinates"), IMG_FILE, (gpointer)PACKAGE_CON, G_CALLBACK(on_coord_port), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk_menu_item_set_submenu ((GtkMenuItem *)port, dmenu); } else { gchar * pname = g_strdup_printf ("%s", get_project_by_id(p) -> name); widget_set_sensitive (gtk3_menu_item (menu, pname, IMG_FILE, (gpointer)PACKAGE_TD, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE), 0); g_free (pname); add_menu_separator (menu); if (p != activep) { gtk3_menu_item (menu, _("Make Active"), IMG_STOCK, (gpointer)YES, G_CALLBACK(activate_project), GINT_TO_POINTER(p), FALSE, 0, 0, FALSE, FALSE, FALSE); } if (c > -1) { gchar * str = g_strdup_printf (_("Analyze: %s"), graph_name[c]); widget_set_sensitive (gtk3_menu_item (menu, str, IMG_FILE, (gpointer)graph_img[c], G_CALLBACK(compute_this_prop), GINT_TO_POINTER(p), FALSE, 0, 0, FALSE, FALSE, FALSE), get_project_by_id(p) -> analysis[c] -> avail_ok); g_free (str); } gtk3_menu_item (menu, _("Edit Name"), IMG_STOCK, (gpointer)EDITA, G_CALLBACK(change_project_name), GINT_TO_POINTER(p), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Save"), IMG_STOCK, (gpointer)FSAVE, G_CALLBACK(on_open_save_activate), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, _("Save As"), IMG_STOCK, (gpointer)FSAVEAS, G_CALLBACK(on_save_as_activate), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); if (! atomes_from_libreoffice) { gtk3_menu_item (menu, _("Close"), IMG_STOCK, (gpointer)FCLOSE, G_CALLBACK(on_close_activate), GINT_TO_POINTER(p), FALSE, 0, 0, FALSE, FALSE, FALSE); } port = gtk3_menu_item (menu, _("Export"), IMG_FILE, (gpointer)PACKAGE_CON, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE); dmenu = gtk_menu_new (); gtk3_menu_item (dmenu, _("ISAACS Project File '*.ipf'"), IMG_FILE, (gpointer)PACKAGE_MOL, G_CALLBACK(on_isaacs_port), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (dmenu, _("Atomic Coordinates"), IMG_FILE, (gpointer)PACKAGE_CON, G_CALLBACK(on_coord_port), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk_menu_item_set_submenu ((GtkMenuItem *)port, dmenu); } if (! atomes_from_libreoffice) { add_menu_separator (menu); port = gtk3_menu_item (menu, _("Import"), IMG_FILE, (gpointer)PACKAGE_IMP, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE); dmenu = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)port, dmenu); gtk3_menu_item (dmenu, _("ISAACS Project File '*.ipf'"), IMG_FILE, (gpointer)PACKAGE_MOL, G_CALLBACK(on_isaacs_port), GINT_TO_POINTER(0), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (dmenu, _("Atomic Coordinates"), IMG_FILE, (gpointer)PACKAGE_IMP, G_CALLBACK(on_coord_port), GINT_TO_POINTER(0), FALSE, 0, 0, FALSE, FALSE, FALSE); } add_menu_separator (menu); gtk3_menu_item (menu, _("Quit"), IMG_STOCK, (gpointer)FEXIT, G_CALLBACK(leaving_from_menu), NULL, TRUE, GDK_KEY_q, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); show_the_widgets (menu); return menu; } #endif extern void atomes_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data); extern GMenu * create_workspace_menu (gchar * act, int pop_up, int proj, int calc); extern GSimpleAction * pop_act[7]; /*! \fn GtkWidget * work_menu (int p, int c) \brief create the workspace popup menu \param p project id, or -1 \param c calculation id, or -1 */ GtkWidget * work_menu (int p, int c) { GtkWidget * menu; GSimpleActionGroup * action_popup = g_simple_action_group_new (); GSimpleAction * pop_act[17]; pop_act[0] = g_simple_action_new ("workspace.open", NULL); pop_act[1] = g_simple_action_new ("workspace.save", NULL); pop_act[2] = g_simple_action_new ("workspace.save-as", NULL); pop_act[3] = g_simple_action_new ("workspace.close", NULL); pop_act[4] = g_simple_action_new ("project.active", NULL); pop_act[5] = g_simple_action_new ("project.compute", NULL); pop_act[6] = g_simple_action_new ("project.edit", NULL); pop_act[7] = g_simple_action_new ("project.new", NULL); pop_act[8] = g_simple_action_new ("project.open", NULL); pop_act[9] = g_simple_action_new ("project.save", NULL); pop_act[10] = g_simple_action_new ("project.save-as", NULL); pop_act[11] = g_simple_action_new ("project.close", NULL); pop_act[12] = g_simple_action_new ("export.isaacs", NULL); pop_act[13] = g_simple_action_new ("export.coordinates", NULL); pop_act[14] = g_simple_action_new ("import.isaacs", NULL); pop_act[15] = g_simple_action_new ("import.coordinates", NULL); pop_act[16] = g_simple_action_new ("program.quit", NULL); int i; for (i=0; i<17; i++) g_action_map_add_action (G_ACTION_MAP(action_popup), G_ACTION(pop_act[i])); g_signal_connect (pop_act[0], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(2)); g_signal_connect (pop_act[1], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(3)); g_signal_connect (pop_act[2], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(3)); g_signal_connect (pop_act[3], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (pop_act[4], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(p)); g_signal_connect (pop_act[5], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(p)); g_signal_connect (pop_act[6], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(p)); g_signal_connect (pop_act[7], "activate", G_CALLBACK(atomes_menu_bar_action), NULL); g_signal_connect (pop_act[8], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(0)); g_signal_connect (pop_act[9], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (pop_act[10], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (pop_act[11], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(p)); g_signal_connect (pop_act[12], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (pop_act[13], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (pop_act[14], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(0)); g_signal_connect (pop_act[15], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(0)); g_signal_connect (pop_act[16], "activate", G_CALLBACK(atomes_menu_bar_action), NULL); calc_to_compute = (c < ANG) ? c : c - 1; #ifdef GTK3 menu = this_work_menu (p, c); // GMenu * popup = create_workspace_menu ("pop", 1, p, c); // gtk_menu_new_from_model (G_MENU_MODEL(popup)); #else GMenu * popup = create_workspace_menu ("pop", 1, p, c); menu = gtk_popover_menu_new_from_model_full (G_MENU_MODEL(popup), GTK_POPOVER_MENU_NESTED); i = (nprojects) ? ((p > -1) ? 250 : 95) : 0; gtk_widget_set_size_request (menu, -1, 310 + i); /* I need to use the ' gtk_popover_menu_new_from_model_full' command here, the menu created using the 'gtk_popover_menu_new_from_model' does not behave properly, that might be a bug, some items of the menu having the same name, It is not possible to navigate the menu properly and some elements remains inaccessible, this was solved with this '_full' command. menu = gtk_popover_menu_new_from_model (G_MENU_MODEL(popup)); */ #endif gtk_widget_insert_action_group (menu, "pop", G_ACTION_GROUP(action_popup)); return menu; } atomes_1.3.1/src/gui/gtk-misc.c0000664000175000017500000024352715212624223015757 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file gtk-misc.c * @short GTK3/GTK4 utility subroutines, instead of having pre-processor flags everywhere in the code. \n Whenever I need to use a GTK function that changed between v3 and v4, \n I created an home made function declared in this file, and deal then here with the potential GTK versions issues. * @author Sébastien Le Roux */ /* * This file: 'gtk-misc.c' * * Contains: * - GTK3/GTK4 utility subroutines, instead of having pre-processor flags everywhere in the code Whenever I need to use a GTK function that changed between v3 and v4, I created an home made function declared in this file, and deal then here with the potential GTK versions issues. * * List of functions: gboolean is_the_widget_visible (GtkWidget * widg); gboolean file_chooser_set_file_name (GtkFileChooser * chooser, gchar * filename); G_MODULE_EXPORT gboolean to_activate_entry (GtkWidget * widg, GdkEventFocus * event, gpointer data); G_MODULE_EXPORT gboolean destroy_this_window (GtkWindow * win, gpointer data); G_MODULE_EXPORT gboolean destroy_this_window (GtkWidget * win, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean hide_this_window (GtkWindow * win, gpointer data); G_MODULE_EXPORT gboolean hide_this_window (GtkWidget * win, GdkEvent * event, gpointer data); gchar * file_chooser_get_file_name (GtkFileChooser * chooser); gchar * file_chooser_get_current_folder (GtkFileChooser * chooser); const gchar * entry_get_text (GtkEntry * entry); void show_the_widgets (GtkWidget * widg); void hide_the_widgets (GtkWidget * widg); void widget_set_sensitive (GtkWidget * widg, gboolean sensitive); void add_container_child (int type, GtkWidget * widg, GtkWidget * child); void add_box_child_end (GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding); void add_box_child_start (int orientation, GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding); void add_widget_gesture_and_key_action (GtkWidget * widget, gchar * cp_name, GCallback cp_handler, gpointer cp_data, gchar * cr_name, GCallback cr_handler, gpointer cr_data, gchar * kp_name, GCallback kp_handler, gpointer kp_data, gchar * mo_name, GCallback mo_handler, gpointer mo_data, gchar * sc_name, GCallback sc_handler, gpointer sc_data); void run_this_gtk_native_dialog (GtkNativeDialog * dial, GCallback handler, gpointer data); void run_this_gtk_dialog (GtkWidget * dial, GCallback handler, gpointer data); void resize_this_window (GtkWidget * window, int x, int y); void button_set_status (GtkWidget * button, int status); void update_entry_int (GtkEntry * entry, int intval); void update_entry_double (GtkEntry * entry, double doubleval); void update_entry_long_double (GtkEntry * entry, double doubleval); void update_entry_text (GtkEntry * entry, gchar * text); void text_view_set_monospace (GtkWidget * view); void gtk_label_align (GtkWidget * lab, float ax, float ay); void layout_add_widget (GtkWidget * layout, GtkWidget * child, int x_pos, int y_pos); void combo_set_markup (GtkWidget * combo); void combo_set_active (GtkWidget * combo, int pos); void combo_text_append (GtkWidget * combo, gchar * text); void combo_text_prepend (GtkWidget * combo, gchar * text); void setup_text_tags (GtkTextBuffer * buffer); void add_menu_separator (GtkWidget * menu); void set_renderer_color (int tocol, GtkCellRenderer * renderer, ColRGBA col); void set_renderer_markup (GtkTreeModel * mod, GtkTreeIter * iter, GtkCellRenderer * renderer, int col); void button_set_image (GtkButton * but, gchar * text, int format, gpointer image); void adjust_label (GtkWidget * lab, int dimx, int dimy, float ax, float ay); void set_image_from_icon_name (GtkWidget * widg, gchar * icon); void append_comments (GtkWidget * vbox, gchar * symbol, gchar * legend); void provide_gtk_css (gchar * css); void destroy_this_dialog (GtkDialog * dialog); void destroy_this_native_dialog (GtkNativeDialog * dialog); void file_chooser_set_current_folder (GtkFileChooser * chooser); void set_color_chooser_color (GtkWidget * color_win, ColRGBA col); void pop_menu_at_pointer (GtkWidget * pop, double x, double y); void pop_menu_at_pointer (GtkWidget * widg, GdkEvent * event); void add_gtk_close_event (GtkWidget * widg, GCallback handler, gpointer data); static void convert_alpha (cairo_surface_t * surf, GdkPixbuf * pix, int src_x, int src_y, int width, int height); G_MODULE_EXPORT void to_activate_entry (GtkEventControllerFocus * focus, gpointer data); G_MODULE_EXPORT void run_destroy_dialog (GtkDialog * dialog, gint response_id, gpointer data); GtkWidget * menu_item_new_with_submenu (gchar * name, gboolean active, GtkWidget * sub_menu); GtkWidget * new_gtk_window (); GtkWidget * create_win (gchar * str, GtkWidget * parent, gboolean modal, gboolean resiz); GtkWidget * dialogmodal (gchar * str, GtkWindow * parent); GtkWidget * message_dialogmodal (gchar * message, gchar * title, GtkMessageType mtype, GtkButtonsType buttons, GtkWidget * parent); GtkWidget * dialog_cancel_apply (gchar * title, GtkWidget * parent, gboolean resiz); GtkWidget * create_hscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data); GtkWidget * create_vscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data); GtkWidget * create_vbox (int spacing); GtkWidget * create_hbox (int spacing); GtkWidget * dialog_get_content_area (GtkWidget * widg); GtkWidget * add_vbox_to_layout (GtkWidget * layout, int size_x, int size_y); GtkWidget * create_layout (int x, int y); GtkWidget * create_combo (); GtkWidget * create_text_view (int dimx, int dimy, int edit, int mono, GCallback handler, gpointer data, gchar * text); GtkWidget * create_entry (GCallback handler, int dim, int cdim, gboolean key_release, gpointer data); GtkWidget * stock_image (const gchar * stock_id); GtkWidget * create_menu_item (gboolean add_mnemo, gchar * name); GtkWidget * create_menu_item_from_widget (GtkWidget * widg, gboolean check, gboolean radio, gboolean status); GtkWidget * create_image_from_data (int format, gpointer item_image); GtkWidget * gtk3_menu_item (GtkWidget * menu, gchar * name, int icon_format, gpointer item_icon, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod, gboolean check, gboolean radio, gboolean status); GtkWidget * add_advanced_item (GtkWidget * menu, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod); GtkWidget * markup_label (gchar * text, int dimx, int dimy, float ax, float ay); GtkWidget * color_button (ColRGBA col, gboolean alpha, int dimx, int dimy, GCallback handler, gpointer data); GtkWidget * font_button (gchar * font, int dimx, int dimy, GCallback handler, gpointer data); GtkWidget * spin_button (GCallback handler, double value, double start, double end, double step, int digits, int dim, gpointer data); GtkWidget * check_button (gchar * text, int dimx, int dimy, gboolean state, GCallback handler, gpointer data); GtkWidget * radio_button (gchar * text, int dimx, int dimy, gboolean state, GCallback handler, gpointer data); GtkWidget * create_button (gchar * text, int image_format, gchar * image, int dimx, int dimy, int relief, GCallback handler, gpointer data); GtkWidget * abox (GtkWidget * box, char * lab, int vspace); GtkWidget * bbox (GtkWidget * box, char * lab); GtkWidget * cbox (GtkWidget * box, char * lab); GtkWidget * fbox (GtkWidget * box, char * lab); GtkWidget * create_scroll (GtkWidget * box, int dimx, int dimy, int shadow); GtkWidget * create_expander (gchar * name, gchar * file_img); GtkWidget * destroy_this_widget (GtkWidget * widg); GtkWidget * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name); GtkWidget * get_top_level (GtkWidget * widg); GtkTextBuffer * add_buffer (GCallback handler, gpointer data, gchar * text); GtkFileChooserNative * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name); GdkPixbuf * convert_to_pixbuf (cairo_surface_t * surf); GMenuItem * create_menu_item (gboolean add_mnemo, gchar * name, gchar * action); GListModel * file_chooser_get_file_names (GtkFileChooser * chooser); ColRGBA * duplicate_color (int num, ColRGBA * col); ColRGBA gdkrgba_to_rgba (GdkRGBA colgdk); ColRGBA get_button_color (GtkColorChooser * colob); ColRGBA get_window_color (GtkWidget * color_win); GdkRGBA colrgba_togtkrgba (ColRGBA col); int get_widget_width (GtkWidget * widg); int get_widget_height (GtkWidget * widg); int button_get_status (GtkWidget * button); */ #include "global.h" #include "interface.h" #include "preferences.h" #include "glview.h" extern void adjust_preferences_window (); /*! \fn gboolean is_the_widget_visible (GtkWidget * widg) \brief test if a GtkWidget exist, then return if it is visible or not \param widg the GtkWidget */ gboolean is_the_widget_visible (GtkWidget * widg) { if (GTK_IS_WIDGET(widg)) { return gtk_widget_is_visible (widg); } else { return FALSE; } } /*! \fn void show_the_widgets (GtkWidget * widg) \brief show GtkWidget \param widg the GtkWidget to show */ void show_the_widgets (GtkWidget * widg) { if (widg) { if (GTK_IS_WIDGET(widg)) { #ifdef GTK4 gtk_widget_set_visible (widg, TRUE); #else gtk_widget_show_all (widg); #endif } } } /*! \fn void hide_the_widgets (GtkWidget * widg) \brief hide GtkWidget \param widg the GtkWidget to show */ void hide_the_widgets (GtkWidget * widg) { if (widg != NULL) { if (GTK_IS_WIDGET(widg)) { #ifdef GTK4 gtk_widget_set_visible (widg, FALSE); #else gtk_widget_hide (widg); #endif } } } /*! \fn void widget_set_sensitive (GtkWidget * widg, gboolean sensitive) \brief Set sensitivity for a GtkWidget, ensuring it is a GtkWidget \param widg the GtkWidget \param sensitive Sensitivity */ void widget_set_sensitive (GtkWidget * widg, gboolean sensitive) { if (widg != NULL) { if (GTK_IS_WIDGET(widg)) { gtk_widget_set_sensitive (widg, sensitive); } } } /*! \fn void add_container_child (int type, GtkWidget * widg, GtkWidget * child) \brief Add a GtkWidget into another GtkWidget \param type GTK4 only: the type of container \param widg the container Gtkwidget \param child the child GtkWidget */ void add_container_child (int type, GtkWidget * widg, GtkWidget * child) { #ifdef GTK3 gtk_container_add (GTK_CONTAINER(widg), child); #else switch (type) { case CONTAINER_WIN: // gtk_window_set_child ((GtkWindow *)widg, NULL); gtk_window_set_child ((GtkWindow *)widg, child); break; case CONTAINER_SCR: // Bug in the management of scrolled window child /* Frequently getting warning messages at this point with GTK4 (atomes:?????): GLib-GObject-CRITICAL **: ??:??:??.???: g_object_set: assertion 'G_IS_OBJECT (object)' failed (atomes:?????): Gtk-CRITICAL **: ??:??:??.???: gtk_widget_unparent: assertion 'GTK_IS_WIDGET (widget)' failed */ gtk_scrolled_window_set_child ((GtkScrolledWindow *)widg, NULL); gtk_scrolled_window_set_child ((GtkScrolledWindow *)widg, child); break; case CONTAINER_VIE: // gtk_viewport_set_child ((GtkViewport *)widg, NULL); gtk_viewport_set_child ((GtkViewport *)widg, child); break; case CONTAINER_BUT: // gtk_button_set_child ((GtkButton *)widg, NULL); gtk_button_set_child ((GtkButton *)widg, child); break; case CONTAINER_FRA: // gtk_frame_set_child ((GtkFrame *)widg, NULL); gtk_frame_set_child ((GtkFrame *)widg, child); break; case CONTAINER_EXP: // gtk_expander_set_child ((GtkExpander *)widg, NULL); gtk_expander_set_child ((GtkExpander *)widg, child); break; } #endif } /*! \fn void add_box_child_end (GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding) \brief Add a GtkWidget in a GtkBox at the end position \param widg the GtkBox \param child the GtkWidget to add \param expand GTK3 only: expandable \param fill GTK3 only: fill \param padding GTK3 only: box padding */ void add_box_child_end (GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding) { #ifdef GTK4 // gtk_widget_set_hexpand (child, TRUE); gtk_box_append (GTK_BOX(widg), child); #else gtk_box_pack_end (GTK_BOX(widg), child, expand, fill, padding); #endif } /*! \fn void add_box_child_start (int orientation, GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding) \brief Add a GtkWidget in a GtkBox at the initial position \param orientation horizontal or vertical \param widg the GtkBox \param child the GtkWidget to add \param expand GTK3 only: expandable \param fill GTK3 only: fill \param padding GTK3 only: box padding */ void add_box_child_start (int orientation, GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding) { #ifdef GTK4 if (orientation == GTK_ORIENTATION_HORIZONTAL && padding) { gtk_box_append (GTK_BOX(widg), markup_label (" ", padding, -1, 0.0, 0.0)); } else if (orientation == GTK_ORIENTATION_VERTICAL && padding > 10) { gtk_box_append (GTK_BOX(widg), markup_label (" ", -1, padding/2, 0.0, 0.0)); } gtk_box_append (GTK_BOX(widg), child); if (orientation == GTK_ORIENTATION_HORIZONTAL && padding) { gtk_box_append (GTK_BOX(widg), markup_label (" ", padding, -1, 0.0, 0.0)); } else if (orientation == GTK_ORIENTATION_VERTICAL && padding > 10) { gtk_box_append (GTK_BOX(widg), markup_label (" ", -1, padding/2, 0.0, 0.0)); } #else gtk_box_pack_start (GTK_BOX(widg), child, expand, fill, padding); #endif } #ifdef GTK3 /*! \fn GtkWidget * menu_item_new_with_submenu (gchar * name, gboolean active, GtkWidget * sub_menu) \brief Adding a GtkMenuItem with a submenu and setting the sensitivity \param name Name of the menu item \param active Sensitivity \param sub_menu the GtkWidget submenu */ GtkWidget * menu_item_new_with_submenu (gchar * name, gboolean active, GtkWidget * sub_menu) { GtkWidget * item = create_menu_item (FALSE, name); gtk_menu_item_set_submenu ((GtkMenuItem *)item, sub_menu); widget_set_sensitive (item, active); return item; } #endif /*! \fn GtkWidget * new_gtk_window () \brief create a new GtkWindow */ GtkWidget * new_gtk_window () { #ifdef GTK4 return gtk_window_new (); #else return gtk_window_new (GTK_WINDOW_TOPLEVEL); #endif } #ifdef GTK4 /*! \fn void add_widget_gesture_and_key_action (GtkWidget * widget, gchar * cp_name, GCallback cp_handler, gpointer cp_data, gchar * cr_name, GCallback cr_handler, gpointer cr_data, gchar * kp_name, GCallback kp_handler, gpointer kp_data, gchar * mo_name, GCallback mo_handler, gpointer mo_data, gchar * sc_name, GCallback sc_handler, gpointer sc_data) \brief Adding GTK4 mouse, and keyboard events to a GtkWidget \param widget the GtkWidget \param cp_name Name of the click pressed event \param cp_handler Click pressed callback \param cp_data Click pressed data pointer \param cr_name Name of the click released event \param cr_handler Click released callback \param cr_data Click released data pointer \param kp_name Name of the key pressed event \param kp_handler Key pressed callback \param kp_data Key pressed data pointer \param mo_name Name of the mouse motion event \param mo_handler Mouse motion callback \param mo_data Mouse motion data pointer \param sc_name Name of the mouse scroll event \param sc_handler Mouse scroll callback \param sc_data Mouse scroll data pointer */ void add_widget_gesture_and_key_action (GtkWidget * widget, gchar * cp_name, GCallback cp_handler, gpointer cp_data, gchar * cr_name, GCallback cr_handler, gpointer cr_data, gchar * kp_name, GCallback kp_handler, gpointer kp_data, gchar * mo_name, GCallback mo_handler, gpointer mo_data, gchar * sc_name, GCallback sc_handler, gpointer sc_data) { GtkGesture * gesture; GtkEventController * key; GtkEventController * motion; if (cp_name) { gesture = gtk_gesture_click_new (); gtk_event_controller_set_name (GTK_EVENT_CONTROLLER (gesture), cp_name); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), 0); if (cp_handler) g_signal_connect (gesture, "pressed", cp_handler, cp_data); gtk_widget_add_controller (widget, GTK_EVENT_CONTROLLER (gesture)); } if (cr_name) { gesture = gtk_gesture_click_new (); gtk_event_controller_set_name (GTK_EVENT_CONTROLLER (gesture), cr_name); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), 0); if (cr_handler) g_signal_connect (gesture, "released", cr_handler, cr_data); gtk_widget_add_controller (widget, GTK_EVENT_CONTROLLER (gesture)); } if (kp_name) { key = gtk_event_controller_key_new (); gtk_event_controller_set_name (key, kp_name); if (kp_handler) g_signal_connect (key, "key-pressed", kp_handler, kp_data); gtk_widget_add_controller (widget, key); } if (mo_name) { motion = gtk_event_controller_motion_new (); gtk_event_controller_set_name (motion, mo_name); if (mo_handler) g_signal_connect (motion, "motion", mo_handler, mo_data); gtk_widget_add_controller (widget, motion); } if (sc_name) { motion = gtk_event_controller_scroll_new (GTK_EVENT_CONTROLLER_SCROLL_VERTICAL); gtk_event_controller_set_name (motion, sc_name); if (sc_handler) g_signal_connect (motion, "scroll", sc_handler, sc_data); gtk_widget_add_controller (widget, motion); } } #endif /*! \fn GtkWidget * create_win (gchar * str, GtkWidget * parent, gboolean modal, gboolean resiz) \brief create a new GtkWindow \param str Title \param parent Parent GtkWidget (if any) \param modal Modal (TRUE/FALSE) \param resiz Can be re-sized (TRUE/FALSE) */ GtkWidget * create_win (gchar * str, GtkWidget * parent, gboolean modal, gboolean resiz) { GtkWidget * win; win = new_gtk_window (); if (str) gtk_window_set_title (GTK_WINDOW(win), prepare_for_title(str)); gtk_window_set_resizable (GTK_WINDOW (win), TRUE); #ifdef GTK3 gtk_window_set_attached_to (GTK_WINDOW (win), parent); gtk_window_set_icon (GTK_WINDOW (win), THETD); #endif // gtk_window_set_transient_for (GTK_WINDOW (win), GTK_WINDOW (parent)); gtk_window_set_modal (GTK_WINDOW(win), modal); gtk_window_set_resizable (GTK_WINDOW(win), resiz); gtk_window_set_destroy_with_parent (GTK_WINDOW (win), TRUE); return win; } #ifdef GTK4 /*! \fn void run_this_gtk_native_dialog (GtkNativeDialog * dial, GCallback handler, gpointer data) \brief run a GTK4 GtkNativeDialog (used to read files) \param dial the GtkNativeDialog \param handler the callback \param data the associated data pointer */ void run_this_gtk_native_dialog (GtkNativeDialog * dial, GCallback handler, gpointer data) { gtk_native_dialog_set_modal (dial, TRUE); if (handler) g_signal_connect (G_OBJECT(dial), "response", handler, data); gtk_native_dialog_show (dial); dialog_id ++; Event_loop[dialog_id] = g_main_loop_new (NULL, FALSE); g_main_loop_run (Event_loop[dialog_id]); } #endif /*! \fn void run_this_gtk_dialog (GtkWidget * dial, GCallback handler, gpointer data) \brief run a GTK (3 and 4) basic GtkDialog \param dial the GtkDialog \param handler the callback \param data the associated data pointer */ void run_this_gtk_dialog (GtkWidget * dial, GCallback handler, gpointer data) { gtk_window_set_modal (GTK_WINDOW(dial), TRUE); if (handler) g_signal_connect (G_OBJECT(dial), "response", handler, data); show_the_widgets (dial); if (preferences) adjust_preferences_window (); dialog_id ++; Event_loop[dialog_id] = g_main_loop_new (NULL, FALSE); g_main_loop_run (Event_loop[dialog_id]); } /*! \fn GtkWidget * dialogmodal (gchar * str, GtkWindow * parent) \brief Create a new dialog modal window \param str Title \param parent Parent GtkWindow, if any */ GtkWidget * dialogmodal (gchar * str, GtkWindow * parent) { GtkWidget * win = gtk_dialog_new_with_buttons (str, parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, _("_Close"), GTK_RESPONSE_CLOSE, NULL); gtk_window_set_resizable (GTK_WINDOW (win), FALSE); #ifdef GTK3 gtk_window_set_icon (GTK_WINDOW (win), THETD); #endif return win; } /*! \fn GtkWidget * message_dialogmodal (gchar * message, gchar * title, GtkMessageType mtype, GtkButtonsType buttons, GtkWidget * parent) \brief create a modal (cannot be ignored) message window \param message the message \param title the title \param mtype the message type \param buttons the type of closing button to add \param parent the parent window, if any */ GtkWidget * message_dialogmodal (gchar * message, gchar * title, GtkMessageType mtype, GtkButtonsType buttons, GtkWidget * parent) { GtkWidget * win; if (parent) { win = gtk_message_dialog_new (GTK_WINDOW(parent), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, mtype, buttons, NULL); } else { win = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, mtype, buttons, NULL); } gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (win), message); GtkWidget * content_area = gtk_message_dialog_get_message_area(GTK_MESSAGE_DIALOG(win)); GtkWidget * label; #ifdef GTK4 label = gtk_widget_get_first_child(content_area); #else GList * children = gtk_container_get_children(GTK_CONTAINER(content_area)); label = GTK_WIDGET(children -> data); g_list_free(children); #endif gtk_label_set_use_markup (GTK_LABEL(label), TRUE); gtk_label_set_selectable(GTK_LABEL(label), TRUE); gtk_window_set_title (GTK_WINDOW(win), title); gtk_window_set_resizable (GTK_WINDOW (win), FALSE); #ifdef GTK3 gtk_window_set_icon (GTK_WINDOW (win), THETD); #endif show_the_widgets (win); return win; } /*! \fn GtkWidget * dialog_cancel_apply (gchar * title, GtkWidget * parent, gboolean resiz) \brief create a dialog modal offering a choice to apply something or not \param title the message \param parent the parent window, if any \param resiz Is the new window re-sizable ? */ GtkWidget * dialog_cancel_apply (gchar * title, GtkWidget * parent, gboolean resiz) { GtkWidget * dca = gtk_dialog_new_with_buttons (title, GTK_WINDOW(parent), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, _("Cancel"), GTK_RESPONSE_CANCEL, _("Apply"), GTK_RESPONSE_APPLY, NULL); gtk_window_set_resizable (GTK_WINDOW(dca), resiz); #ifdef GTK3 gtk_window_set_icon (GTK_WINDOW (dca), THETD); #endif return dca; } /*! \fn void resize_this_window (GtkWidget * window, int x, int y) \brief resize this GtkWindow \param window the GtkWidget to resize \param x the x size \param y the y size */ void resize_this_window (GtkWidget * window, int x, int y) { #ifdef GTK3 gtk_window_resize (GTK_WINDOW(window), x, y); #else gtk_window_set_default_size (GTK_WINDOW(window), x, y); #endif } /*! \fn const gchar * entry_get_text (GtkEntry * entry) \brief get the text in a GtkEntry \param entry the GtkEntry */ const gchar * entry_get_text (GtkEntry * entry) { #ifdef GTK4 return gtk_editable_get_text (GTK_EDITABLE(entry)); #else return gtk_entry_get_text (entry); #endif } /*! \fn void update_entry_int (GtkEntry * entry, int intval) \brief update the content of a GtkEntry as int \param entry the GtkEntry \param intval the new int value to display */ void update_entry_int (GtkEntry * entry, int intval) { gchar * value = g_strdup_printf("%d", intval); #ifdef GTK4 gtk_editable_set_text (GTK_EDITABLE(entry), (const gchar *)value); #else gtk_entry_set_text (entry, (const gchar *)value); #endif g_free (value); } /*! \fn void update_entry_double (GtkEntry * entry, double doubleval) \brief update the content of a GtkEntry as double \param entry the GtkEntry \param doubleval the new double value to display */ void update_entry_double (GtkEntry * entry, double doubleval) { gchar * value = g_strdup_printf("%f", doubleval); #ifdef GTK4 gtk_editable_set_text (GTK_EDITABLE(entry), (const gchar *)value); #else gtk_entry_set_text (entry, (const gchar *)value); #endif g_free (value); } /*! \fn void update_entry_long_double (GtkEntry * entry, double doubleval) \brief update the content of a GtkEntry as long double \param entry the GtkEntry \param doubleval the new long double value to display */ void update_entry_long_double (GtkEntry * entry, double doubleval) { gchar * value = g_strdup_printf("%15.10lf", doubleval); #ifdef GTK4 gtk_editable_set_text (GTK_EDITABLE(entry), (const gchar *)value); #else gtk_entry_set_text (entry, (const gchar *)value); g_free (value); #endif } /*! \fn void update_entry_text (GtkEntry * entry, gchar * text) \brief update the content of a GtkEntry as string \param entry the GtkEntry \param text the new string to display */ void update_entry_text (GtkEntry * entry, gchar * text) { #ifdef GTK4 gtk_editable_set_text (GTK_EDITABLE(entry), (const gchar *)text); #else gtk_entry_set_text (entry, (const gchar *)text); #endif } /*! \fn void text_view_set_monospace (GtkWidget * view) \brief set the font of a GtkTextView as monospace \param view the GtkTextView */ void text_view_set_monospace (GtkWidget * view) { gtk_text_view_set_monospace (GTK_TEXT_VIEW(view), TRUE); } /*! \fn void gtk_label_align (GtkWidget * lab, float ax, float ay) \brief set text alignment in a GtkLabel \param lab the GtkLabel \param ax the x alignment \param ay the Y alignment */ void gtk_label_align (GtkWidget * lab, float ax, float ay) { gtk_label_set_xalign (GTK_LABEL (lab), ax); gtk_label_set_yalign (GTK_LABEL (lab), ay); } /*! \fn GtkWidget * create_hscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data) \brief create an horizontal scale GtkWidget \param min Min value for the h scale \param max Max value for the h scale \param delta the step on the h scale \param val the value to position to set on the h scale \param pos the location where the value is on display \param round the rounding digit for the value on display \param size the x size of the GtkWdiget \param handler the callback to move the h scale \param scroll_handler the callback on mouse scroll \param data the associated data pointer */ GtkWidget * create_hscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data) { GtkWidget * hscale; hscale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, min, max, delta); gtk_scale_set_draw_value (GTK_SCALE(hscale), TRUE); gtk_widget_set_size_request (hscale, size, -1); gtk_scale_set_value_pos (GTK_SCALE(hscale), pos); gtk_range_set_value (GTK_RANGE(hscale), val); gtk_range_set_round_digits (GTK_RANGE(hscale), round); if (handler != NULL) g_signal_connect (G_OBJECT(hscale), "value-changed", handler, data); if (scroll_handler != NULL) g_signal_connect (G_OBJECT(hscale), "change-value", scroll_handler, data); return hscale; } /*! \fn GtkWidget * create_vscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data) \brief create an vertical scale GtkWidget \param min Min value for the v scale \param max Max value for the v scale \param delta the step on the v scale \param val the value to position to set on the h scale \param pos the location where the value is on display \param round the rounding digit for the value on display \param size the x size of the GtkWdiget \param handler the callback to move the v scale \param scroll_handler the callback on mouse scroll \param data the associated data pointer */ GtkWidget * create_vscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data) { GtkWidget * vscale; vscale = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL, min, max, delta); gtk_scale_set_draw_value (GTK_SCALE(vscale), TRUE); gtk_scale_set_value_pos (GTK_SCALE(vscale), pos); gtk_widget_set_size_request (vscale, size, size); gtk_range_set_value (GTK_RANGE(vscale), val); gtk_range_set_round_digits (GTK_RANGE(vscale), round); if (handler != NULL) g_signal_connect (G_OBJECT(vscale), "value-changed", handler, data); if (scroll_handler != NULL) g_signal_connect (G_OBJECT(vscale), "change-value", scroll_handler, data); return vscale; } /*! \fn GtkWidget * create_vbox (int spacing) \brief create a GtkBox with vertical orientation \param spacing spacing between elements */ GtkWidget * create_vbox (int spacing) { return gtk_box_new (GTK_ORIENTATION_VERTICAL, spacing); } /*! \fn GtkWidget * create_hbox (int spacing) \brief create a GtkBox with horizontal orientation \param spacing spacing between elements */ GtkWidget * create_hbox (int spacing) { return gtk_box_new (GTK_ORIENTATION_HORIZONTAL, spacing); } /*! \fn GtkWidget * dialog_get_content_area (GtkWidget * widg) \brief prepare GtkWidget to insert content in a GtkDialog window \param widg the GtkDialog window */ GtkWidget * dialog_get_content_area (GtkWidget * widg) { #ifdef GTK3 return gtk_dialog_get_content_area (GTK_DIALOG(widg)); #else GtkWidget * vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, gtk_dialog_get_content_area (GTK_DIALOG(widg)), vbox, TRUE, TRUE, 0); return vbox; #endif } /*! \fn void layout_add_widget (GtkWidget * layout, GtkWidget * child, int x_pos, int y_pos) \brief Add a GtkWidget in a GtkLayout \param layout the GtkLayout \param child the GtkWidget to insert \param x_pos the x position to insert at \param y_pos the y position to insert at */ void layout_add_widget (GtkWidget * layout, GtkWidget * child, int x_pos, int y_pos) { #ifdef GTK3 gtk_layout_put (GTK_LAYOUT(layout), child, x_pos, y_pos); #else gtk_fixed_put (GTK_FIXED(layout), child, x_pos, y_pos); #endif } /*! \fn GtkWidget * add_vbox_to_layout (GtkWidget * layout, int size_x, int size_y) \brief Insert a vertical GtkBox in a GtkLatout then send back the GtkBox \param layout the GtkLayout \param size_x the x size of the box \param size_y the y size of the box */ GtkWidget * add_vbox_to_layout (GtkWidget * layout, int size_x, int size_y) { GtkWidget * vbox = create_vbox (BSEP); gtk_widget_set_size_request (vbox, size_x, size_y); layout_add_widget (layout, vbox, 0, 5); return vbox; } /*! \fn GtkWidget * create_layout (int x, int y) \brief create a GtkLayout / GtkFixed widget \param x the x size of the widget \param y the y size of the widget */ GtkWidget * create_layout (int x, int y) { GtkWidget * layout; #ifdef GTK3 layout = gtk_layout_new (NULL, NULL); #else layout = gtk_fixed_new (); #endif gtk_widget_set_size_request (layout, x, y); return layout; } /*! \fn int combo_get_active (GtkWidget * combo) \brief retrieve the active item's position \param combo the target GtkWidget */ int combo_get_active (GtkWidget * combo) { return gtk_combo_box_get_active ((GtkComboBox *)combo); } /* #ifdef GTK4 #if GTK_MINOR_VERSION > 9 return gtk_drop_down_get_selected (GtkDropDown *)combo); #else return gtk_combo_box_get_active ((GtkComboBox *)combo); #endif #else return gtk_combo_box_get_active ((GtkComboBox *)combo); #endif // GTK4 } */ /*! \fn void combo_set_active (GtkWidget * combo, int pos) \brief set the active item's position \param combo the target GtkWidget \param pos the position to set */ void combo_set_active (GtkWidget * combo, int pos) { gtk_combo_box_set_active ((GtkComboBox *)combo, pos); } /*! \fn void combo_set_markup (GtkWidget * combo) \brief use pango markup in combo widget \param combo to the target widget */ void combo_set_markup (GtkWidget * combo) { GList * cell_list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(combo)); if (cell_list && cell_list -> data) { gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), cell_list -> data, "markup", 0, NULL); } } /*! \fn void combo_text_append (GtkWidget * combo, gchar * text) \brief append text in GtkComboBox widget \param combo the GtkWidget \param text the text to append */ void combo_text_append (GtkWidget * combo, gchar * text) { gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combo), text); } /*! \fn void combo_text_prepend (GtkWidget * combo, gchar * text) \brief prepend text in GtkComboBox widget \param combo the GtkWidget \param text the text to prepend */ void combo_text_prepend (GtkWidget * combo, gchar * text) { gtk_combo_box_text_prepend_text (GTK_COMBO_BOX_TEXT(combo), text); } /*! \fn GtkWidget * create_combo () \brief create a GtkCombox widget, note deprecated in GTK4 */ GtkWidget * create_combo () { return gtk_combo_box_text_new (); } /*! \fn void setup_text_tags (GtkTextBuffer * buffer) \brief prepare the available text tags for the GtkTextBuffer \param buffer the GtkTextBuffer */ void setup_text_tags (GtkTextBuffer * buffer) { GtkTextTagTable * textags = gtk_text_buffer_get_tag_table(buffer); /* Sans font */ tag = gtk_text_tag_new ("sans"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "family", "sans", NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* Monospace font */ tag = gtk_text_tag_new ("monospace"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "family", "monospace", NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* Default Font size */ tag = gtk_text_tag_new ("default-size"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* */ tag = gtk_text_tag_new ("underline"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "underline", PANGO_UNDERLINE_SINGLE, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* */ tag = gtk_text_tag_new ("underline_double"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "underline", PANGO_UNDERLINE_DOUBLE, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* italic */ tag = gtk_text_tag_new ("italic"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "style", PANGO_STYLE_ITALIC, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* bold */ tag = gtk_text_tag_new ("bold"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* bold italic */ tag = gtk_text_tag_new ("bold_italic"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "style", PANGO_STYLE_ITALIC, "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* superscript */ tag = gtk_text_tag_new ("sup"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "scale", .6, "rise", 6000, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* subscript */ tag = gtk_text_tag_new ("sub"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "scale", .6, "rise", -6000, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* justify-left */ tag = gtk_text_tag_new("justify-left"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "justification", GTK_JUSTIFY_LEFT, NULL); gtk_text_tag_table_add(textags, tag); g_object_unref(tag); /* justify-center */ tag = gtk_text_tag_new("justify-center"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "justification", GTK_JUSTIFY_CENTER, NULL); gtk_text_tag_table_add(textags, tag); g_object_unref(tag); /* justify-right */ tag = gtk_text_tag_new("justify-right"); g_object_set(tag, "justification", GTK_JUSTIFY_RIGHT, NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* heading */ tag = gtk_text_tag_new("heading"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "weight", PANGO_WEIGHT_BOLD, "scale", 1.5, "justification", GTK_JUSTIFY_CENTER, "underline", PANGO_UNDERLINE_DOUBLE, NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* red font */ tag = gtk_text_tag_new("red"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "red", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* orange font */ tag = gtk_text_tag_new("orange"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "orange", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* yellow font */ tag = gtk_text_tag_new("yellow"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "yellow2", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* green font */ tag = gtk_text_tag_new("green"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "green", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* light green font */ tag = gtk_text_tag_new("light_green"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "light green", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* cyan font */ tag = gtk_text_tag_new("cyan"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "cyan", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* blue font */ tag = gtk_text_tag_new("blue"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "blue", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* pink font */ tag = gtk_text_tag_new("pink"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "pink", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* violet font */ tag = gtk_text_tag_new("violet"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "dark violet", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* grey background */ tag = gtk_text_tag_new("grey_back"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "background", "lightgrey", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* bold grey background */ tag = gtk_text_tag_new("bold_grey_back"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "background", "lightgrey", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* bold red font */ tag = gtk_text_tag_new ("bold_red"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "red", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* bold blue font */ tag = gtk_text_tag_new ("bold_blue"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "blue", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* bold green font */ tag = gtk_text_tag_new ("bold_green"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "green", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* bold orange font */ tag = gtk_text_tag_new ("bold_orange"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "orange", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* bold pink font */ tag = gtk_text_tag_new ("bold_pink"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "pink", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* subscript italic*/ tag = gtk_text_tag_new ("sub_italic"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "style", PANGO_STYLE_ITALIC, "scale", .6, "rise", -6000, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* subscript bold */ tag = gtk_text_tag_new ("sub_bold"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "weight", PANGO_WEIGHT_BOLD, "scale", .6, "rise", -6000, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* superscript bold */ tag = gtk_text_tag_new ("sup_bold"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "weight", PANGO_WEIGHT_BOLD, "scale", .6, "rise", 6000, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); } /*! \fn GtkTextBuffer * add_buffer (GCallback handler, gpointer data, gchar * text) \brief create a GtkTextBuffer \param handler the callback on buffer changed \param data the associated data pointer \param text the text to display */ GtkTextBuffer * add_buffer (GCallback handler, gpointer data, gchar * text) { GtkTextBuffer * buffer; GtkTextIter bStart; GtkTextIter bEnd; buffer = gtk_text_buffer_new (NULL); setup_text_tags (buffer); gtk_text_buffer_get_start_iter (buffer, &bStart); gtk_text_buffer_get_end_iter (buffer, &bEnd); gtk_text_buffer_delete (buffer, &bStart, &bEnd); if (text != NULL) gtk_text_buffer_set_text (buffer, text, -1); if (handler != NULL) g_signal_connect (G_OBJECT (buffer), "changed", handler, data); return buffer; } /*! \fn GtkWidget * create_text_view (int dimx, int dimy, int edit, int mono, GCallback handler, gpointer data, gchar * text) \brief create a GtkTextView and display some text \param dimx the x size of the GtkTextView \param dimy the y size of the GtkTextView \param edit Is the text view editable (1/0) \param mono Use monospace font (1/0) \param handler the callback on buffer changed \param data the associated data pointer \param text the text to display */ GtkWidget * create_text_view (int dimx, int dimy, int edit, int mono, GCallback handler, gpointer data, gchar * text) { GtkWidget * tview = gtk_text_view_new (); gtk_text_view_set_buffer (GTK_TEXT_VIEW(tview), add_buffer(handler, data, text)); gtk_widget_set_size_request (tview, dimx, dimy); gtk_text_view_set_editable (GTK_TEXT_VIEW(tview), edit); if (mono) text_view_set_monospace (tview); return tview; } /*! \fn static void convert_alpha (cairo_surface_t * surf, GdkPixbuf * pix, int src_x, int src_y, int width, int height) \brief convert a cairo surface to pixbuf \param surf the cairo surface to convert \param pix the resulting GdkPixBuf \param src_x Shift on x, if any \param src_y Shift on y, if any \param width Image width \param height Image height */ static void convert_alpha (cairo_surface_t * surf, GdkPixbuf * pix, int src_x, int src_y, int width, int height) { int x, y; guchar * src_data = cairo_image_surface_get_data (surf); int src_stride = cairo_image_surface_get_stride (surf); guchar * dest_data = gdk_pixbuf_get_pixels (pix); int dest_stride = gdk_pixbuf_get_rowstride (pix); src_data += src_stride * src_y + src_x * 4; for (y = 0; y < height; y++) { guint32 *src = (guint32 *) src_data; for (x = 0; x < width; x++) { guint alpha = src[x] >> 24; if (alpha == 0) { dest_data[x * 4 + 0] = 0; dest_data[x * 4 + 1] = 0; dest_data[x * 4 + 2] = 0; } else { dest_data[x * 4 + 0] = (((src[x] & 0xff0000) >> 16) * 255 + alpha / 2) / alpha; dest_data[x * 4 + 1] = (((src[x] & 0x00ff00) >> 8) * 255 + alpha / 2) / alpha; dest_data[x * 4 + 2] = (((src[x] & 0x0000ff) >> 0) * 255 + alpha / 2) / alpha; } dest_data[x * 4 + 3] = alpha; } src_data += src_stride; dest_data += dest_stride; } } /*! \fn GdkPixbuf * convert_to_pixbuf (cairo_surface_t * surf) \brief convert cairo surface to GdkPixbuf \param surf the cairo sufrace to convert */ GdkPixbuf * convert_to_pixbuf (cairo_surface_t * surf) { int width = cairo_image_surface_get_width (surf); int height = cairo_image_surface_get_height (surf); GdkPixbuf * pix = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, width , height); convert_alpha (surf, pix, 0, 0, width, height); return pix; } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean to_activate_entry (GtkWidget * widg, GdkEventFocus * event, gpointer data) \brief GtkEntry activate signal managment \param widg the GtkWidget sending the signal \param event the associated focus event \param data the associated data pointer */ G_MODULE_EXPORT gboolean to_activate_entry (GtkWidget * widg, GdkEventFocus * event, gpointer data) { g_signal_emit_by_name (G_OBJECT(widg), "activate", data); return FALSE; } #else /*! \fn G_MODULE_EXPORT void to_activate_entry (GtkEventControllerFocus * focus, gpointer data) \brief GtkEntry activate signal managment \param focus Focus event controller \param data the associated data pointer */ G_MODULE_EXPORT void to_activate_entry (GtkEventControllerFocus * focus, gpointer data) { g_signal_emit_by_name (G_OBJECT(gtk_event_controller_get_widget((GtkEventController *)focus)), "activate", data); } #endif /*! \fn GtkWidget * create_entry (GCallback handler, int dim, int cdim, gboolean key_release, gpointer data) \brief Create a GtkEntry \param handler the callback \param dim the x size \param cdim the maximum number of character to display \param key_release Use release event (1/0) \param data the data pointer for the callback */ GtkWidget * create_entry (GCallback handler, int dim, int cdim, gboolean key_release, gpointer data) { GtkWidget * entry = gtk_entry_new (); gtk_widget_set_size_request (entry, dim, -1); #ifdef GTK4 gtk_editable_set_width_chars (GTK_EDITABLE(entry), 0); gtk_editable_set_max_width_chars (GTK_EDITABLE(entry), cdim); #else gtk_entry_set_width_chars (GTK_ENTRY(entry), 0); gtk_entry_set_max_width_chars (GTK_ENTRY(entry), cdim); #endif gtk_entry_set_alignment (GTK_ENTRY(entry), 1.0); if (handler != NULL) { g_signal_connect (G_OBJECT (entry), "activate", handler, data); #ifdef GTK3 g_signal_connect (G_OBJECT (entry), "focus-out-event", G_CALLBACK(to_activate_entry), data); #else /* Pour ajouter une icone dans l'entry: gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry), GTK_ENTRY_ICON_PRIMARY, "edit-find-symbolic"); // Set up the search icon gtk_entry_set_icon_activatable (GTK_ENTRY (entry), GTK_ENTRY_ICON_PRIMARY, TRUE); gtk_entry_set_icon_sensitive (GTK_ENTRY (entry), GTK_ENTRY_ICON_PRIMARY, TRUE); // Then the press can have action see gtk4 demo g_signal_connect (entry, "icon-press", G_CALLBACK(icon_press_cb), NULL); */ GtkEventController * focus = gtk_event_controller_focus_new (); gtk_event_controller_set_name (focus, "focus-out"); g_signal_connect (G_OBJECT(focus), "leave", G_CALLBACK(to_activate_entry), data); gtk_widget_add_controller (entry, focus); #endif } if (key_release) { #ifdef GTK3 g_signal_connect (G_OBJECT (entry), "key-release-event", G_CALLBACK(to_activate_entry), data); #else // Key press controler #endif } return entry; } /*! \fn GtkWidget * stock_image (const gchar * stock_id) \brief create a GtkImage for the Gtk database \param stock_id */ GtkWidget * stock_image (const gchar * stock_id) { #ifdef GTK4 return gtk_image_new_from_icon_name (stock_id); #else return gtk_image_new_from_icon_name (stock_id, GTK_ICON_SIZE_MENU); #endif } #ifdef GTK3 /*! \fn GtkWidget * create_menu_item (gboolean add_mnemo, gchar * name) \brief create a GtkMenuItem and set mnemonic \param add_mnemo Use mnemonic (1/0) \param name the name of the menu item */ GtkWidget * create_menu_item (gboolean add_mnemo, gchar * name) { return (add_mnemo) ? gtk_menu_item_new_with_mnemonic (name) : gtk_menu_item_new_with_label (name); } /*! \fn GtkWidget * create_menu_item_from_widget (GtkWidget * widg, gboolean check, gboolean radio, gboolean status) \brief create a GtkMenuItem using a GtkWidget as label \param widg the GtkWidget to use \param check Create a check menu item (1/0) \param radio Create a radio menu item (1/0) \param status If check or radio status (1/0) */ GtkWidget * create_menu_item_from_widget (GtkWidget * widg, gboolean check, gboolean radio, gboolean status) { GtkWidget * item; if (check) { item = gtk_check_menu_item_new (); if (radio) gtk_check_menu_item_set_draw_as_radio (GTK_CHECK_MENU_ITEM(item), TRUE); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(item), status); } else { item = gtk_menu_item_new (); } gtk_container_add (GTK_CONTAINER(item), widg); return item; } #endif /* GIcon* g_icon_new_for_string ( const gchar* str, GError** error ) void g_menu_item_set_icon ( GMenuItem* menu_item, GIcon* icon ) void g_menu_item_set_attribute ( GMenuItem* menu_item, const gchar* attribute, const gchar* format_string, ... ) */ /*! \fn GtkWidget * create_image_from_data (int format, gpointer item_image) \brief create Gtk image for data \param format Image format \param item_image the data to create the image */ GtkWidget * create_image_from_data (int format, gpointer item_image) { GtkWidget * icon = NULL; switch (format) { case IMG_PIXBUF: icon = gtk_image_new_from_pixbuf ((GdkPixbuf*)item_image); break; case IMG_SURFACE: #ifdef GTK4 icon = gtk_image_new_from_pixbuf (convert_to_pixbuf ((cairo_surface_t *)item_image)); #else icon = gtk_image_new_from_surface ((cairo_surface_t *)item_image); #endif break; case IMG_FILE: icon = gtk_image_new_from_file ((const gchar *)item_image); break; case IMG_STOCK: icon = stock_image ((const gchar *)item_image); break; } return icon; } #ifdef GTK3 /*! \fn GtkWidget * gtk3_menu_item (GtkWidget * menu, gchar * name, int icon_format, gpointer item_icon, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod, gboolean check, gboolean radio, gboolean status) \brief create a GT3 menu item, and insert it in a menu, if any \param menu the menu to insert the menu item in \param name the name of the menu item \param icon_format the image format of the icon for the menu item \param item_icon the data for the image of the icon \param handler the callback for the menu item \param data the associated data pointer \param accel Keyboard short cut -1/0) \param key the key to press \param mod the modifier in any (Ctrl, Alt ...) \param check Create a check menu item (1/0) \param radio Create a radio menu item (1/0) \param status If check or radio status (1/0) */ GtkWidget * gtk3_menu_item (GtkWidget * menu, gchar * name, int icon_format, gpointer item_icon, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod, gboolean check, gboolean radio, gboolean status) { GtkWidget * item = NULL; GtkWidget * icon = NULL; GtkWidget * lab = NULL; if (name) { if (accel) { lab = gtk_accel_label_new (name); gtk_label_align (lab, 0.0, 0.5); gtk_widget_set_size_request (lab, -1, -1); gtk_label_set_use_markup (GTK_LABEL(lab), TRUE); gtk_accel_label_set_accel ((GtkAccelLabel *)lab, key, mod); } else { lab = markup_label(name, -1, -1, 0.0, 0.5); } } if (icon_format != IMG_NONE) icon = create_image_from_data (icon_format, item_icon); if (name) { #ifdef MENU_ICONS if (icon) { GtkWidget * box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, icon, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, lab, FALSE, FALSE, (icon_format == IMG_SURFACE) ? 0 : 6); item = create_menu_item_from_widget (box, check, radio, status); } else { item = create_menu_item_from_widget (lab, check, radio, status); } #else item = create_menu_item_from_widget (lab, check, radio, status); #endif } else if (icon) { item = create_menu_item_from_widget (icon, check, radio, status); } if (handler != NULL) g_signal_connect (G_OBJECT(item), "activate", handler, data); if (menu != NULL) gtk_menu_shell_append ((GtkMenuShell *)menu, item); return item; } /*! \fn GtkWidget * add_advanced_item (GtkWidget * menu, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod) \brief short cut to create and insert a menu item with the "Advanced" text and a stock icon \param menu the menu to insert the menu item \param handler the callback for the menu item \param data the associated data pointer \param accel Keyboard short cut -1/0) \param key the key to press \param mod the modifier in any (Ctrl, Alt ...) */ GtkWidget * add_advanced_item (GtkWidget * menu, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod) { return gtk3_menu_item (menu, _("Advanced"), IMG_STOCK, (gpointer)DPROPERTIES, handler, data, accel, key, mod, FALSE, FALSE, FALSE); } /*! \fn void add_menu_separator (GtkWidget * menu) \brief add sepator in a menu \param menu the GtkMenu */ void add_menu_separator (GtkWidget * menu) { gtk_menu_shell_append ((GtkMenuShell *)menu, gtk_separator_menu_item_new ()); } #endif /*! \fn GtkWidget * markup_label (gchar * text, int dimx, int dimy, float ax, float ay) \brief create a GtkLabel with pango markup \param text Message to display \param dimx y size for the widget \param dimy y size for the widget \param ax x alignment \param ay y alignment */ GtkWidget * markup_label (gchar * text, int dimx, int dimy, float ax, float ay) { GtkWidget * lab = gtk_label_new (text); gtk_label_align (lab, ax, ay); gtk_widget_set_size_request (lab, dimx, dimy); gtk_label_set_use_markup (GTK_LABEL(lab), TRUE); return lab; } /*! \fn ColRGBA * duplicate_color (int num, ColRGBA * col) \brief duplicate a ColRGBA pointer \param num Size of the pointer \param col ColRGBA pointer to duplicate */ ColRGBA * duplicate_color (int num, ColRGBA * col) { ColRGBA * new_col = g_malloc0(num*sizeof*new_col); int i; for (i=0; i%s", legend); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(symbol, 15, -1, 1.0, 0.5) , FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, -1, 0.0, 0.5) , FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } /*! \fn GtkWidget * abox (GtkWidget * box, char * lab, int vspace) \brief box creating routine, to help design faster elements for the GUI \param box the box to insert the new box into \param lab string to display \param vspace vertical space */ GtkWidget * abox (GtkWidget * box, char * lab, int vspace) { GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, vspace); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(".", 5, -1, 0.0, 0.25), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(lab, 150, 30, 0.0, 0.5), FALSE, FALSE, 0); return hbox; } /*! \fn GtkWidget * bbox (GtkWidget * box, char * lab) \brief box creating routine, to help design faster elements for the GUI \param box the box to insert the new box into \param lab string to display */ GtkWidget * bbox (GtkWidget * box, char * lab) { GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 2); GtkWidget * hhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label(lab, 150, 30, 0.0, 0.5), FALSE, FALSE, 0); return hhbox; } /*! \fn GtkWidget * cbox (GtkWidget * box, char * lab) \brief box creating routine, to help design faster elements for the GUI \param box the box to insert the new box into \param lab string to display */ GtkWidget * cbox (GtkWidget * box, char * lab) { GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, TRUE, TRUE, 2); GtkWidget * hhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, TRUE, TRUE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label(lab, -1, 30, 0.0, 0.5), TRUE, TRUE, 40); return hhbox; } /*! \fn GtkWidget * fbox (GtkWidget * box, char * lab) \brief box creating routine, to help design faster elements for the GUI \param box the box to insert the new box into \param lab string to display */ GtkWidget * fbox (GtkWidget * box, char * lab) { GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(".", 5, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(lab, 350, 30, 0.0, 0.5), FALSE, FALSE, 0); return hbox; } /*! \fn GtkWidget * create_scroll (GtkWidget * box, int dimx, int dimy, int shadow) \brief create a scroll window \param box the box to insert the scroll window in, if any \param dimx the x size of the widget \param dimy the x size of the widget \param shadow Add shadow (1/0) */ GtkWidget * create_scroll (GtkWidget * box, int dimx, int dimy, int shadow) { GtkWidget * scroll; #ifdef GTK4 scroll = gtk_scrolled_window_new (); #else scroll = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(scroll), shadow); #endif gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_set_size_request (scroll, dimx, dimy); // To check all create_scroll ! if (box != NULL) add_box_child_start (GTK_ORIENTATION_VERTICAL, box, scroll, TRUE, TRUE, 0); return scroll; } /*! \fn GtkWidget * create_expander (gchar * name, gchar * file_img) \brief create GtkExpander \param name Name of the expander tab \param file_img image file to add if required */ GtkWidget * create_expander (gchar * name, gchar * file_img) { GtkWidget * expand = gtk_expander_new (name); GtkWidget * hbox = create_hbox (0); if (file_img != NULL) { GtkWidget * img = gtk_image_new_from_file (file_img); gtk_widget_set_size_request (img, 20, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img, TRUE, TRUE, 10); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(name, 200, 20, 0.0, 0.5), FALSE, TRUE, 0); gtk_expander_set_label_widget (GTK_EXPANDER(expand), hbox); return expand; } /*! \fn void provide_gtk_css (gchar * css) \brief create a css provider based on the css data \param css the css data, use the name of the variable to use the css */ void provide_gtk_css (gchar * css) { GtkCssProvider * provider = gtk_css_provider_new (); #ifdef GTK4 #if GTK_MINOR_VERSION < 12 gtk_css_provider_load_from_data (provider, css, -1); #else gtk_css_provider_load_from_string (provider, css); #endif gtk_style_context_add_provider_for_display (gdk_display_get_default (), GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); #else gtk_css_provider_load_from_data (provider, css, -1, NULL); gtk_style_context_add_provider_for_screen (gdk_screen_get_default (), GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); #endif g_object_unref (provider); } /*! \fn GtkWidget * destroy_this_widget (GtkWidget * widg) \brief destroy a GtkWidget \param widg the GtkWidget to destroy */ GtkWidget * destroy_this_widget (GtkWidget * widg) { hide_the_widgets (widg); #ifdef GTK3 if (widg != NULL) { if (GTK_IS_WIDGET(widg)) { gtk_widget_destroy (widg); } } #endif return NULL; } /*! \fn void destroy_this_dialog (GtkDialog * dialog) \brief destroy a GtkDialog \param dialog the GtkDialog to destroy */ void destroy_this_dialog (GtkDialog * dialog) { #ifdef GTK4 gtk_window_destroy (GTK_WINDOW(dialog)); #else destroy_this_widget (GTK_WIDGET(dialog)); #endif g_main_loop_quit (Event_loop[dialog_id]); g_main_loop_unref (Event_loop[dialog_id]); dialog_id --; } /*! \fn void destroy_this_native_dialog (GtkNativeDialog * dialog) \brief destroy a GtkNativeDialog \param dialog the GtkNativeDialog to destroy */ void destroy_this_native_dialog (GtkNativeDialog * dialog) { gtk_native_dialog_destroy (dialog); g_object_unref (dialog); g_main_loop_quit (Event_loop[dialog_id]); g_main_loop_unref (Event_loop[dialog_id]); dialog_id --; } /*! \fn G_MODULE_EXPORT void run_destroy_dialog (GtkDialog * dialog, gint response_id, gpointer data) \brief to destroy a GtkDialog when the dialog emit the closing signal \param dialog the GtkDialog to destroy \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_destroy_dialog (GtkDialog * dialog, gint response_id, gpointer data) { destroy_this_dialog (dialog); } #ifdef GTK4 /*! \fn GListModel * file_chooser_get_file_names (GtkFileChooser * chooser) \brief create a file list from files selected using a GtkFileChooser */ GListModel * file_chooser_get_file_names (GtkFileChooser * chooser) { return gtk_file_chooser_get_files (chooser); } #else /*! \fn GList * file_chooser_get_file_names (GtkFileChooser * chooser) \brief create a file list from files selected using a GtkFileChooser */ GSList * file_chooser_get_file_names (GtkFileChooser * chooser) { return gtk_file_chooser_get_filenames (chooser); } #endif /*! \fn gchar * file_chooser_get_file_name (GtkFileChooser * chooser) \brief get a file name from a GtkFileChooser (single file selected) \param chooser the GtkFilechooser */ gchar * file_chooser_get_file_name (GtkFileChooser * chooser) { #ifdef GTK4 return g_file_get_parse_name (gtk_file_chooser_get_file (chooser)); #else return gtk_file_chooser_get_filename (chooser); #endif } /*! \fn gchar * file_chooser_get_current_folder (GtkFileChooser * chooser) \brief get the current folder for a GtkFileChooser \param chooser the GtkFilechooser */ gchar * file_chooser_get_current_folder (GtkFileChooser * chooser) { #ifdef GTK4 return g_file_get_parse_name (gtk_file_chooser_get_current_folder (chooser)); #else return gtk_file_chooser_get_current_folder (chooser); #endif } /*! \fn gboolean file_chooser_set_file_name (GtkFileChooser * chooser, gchar * filename) \brief set file name in a GtkFilechooser \param chooser the GtkFilechooser \param filename the file name to appear in the GtkFilechooser */ gboolean file_chooser_set_file_name (GtkFileChooser * chooser, gchar * filename) { GFile * default_file_for_saving = g_file_new_for_path (filename); gboolean res = gtk_file_chooser_set_file (chooser, default_file_for_saving, NULL); if (! res) { gchar * str = g_strdup_printf (_("Impossible to locate file: %s"), filename); show_error (str, 0, (GtkWidget *)chooser); } return res; } /*! \fn void file_chooser_set_current_folder (GtkFileChooser * chooser) \brief set current folder in a GtkFilechooser \param chooser the GtkFilechooser */ void file_chooser_set_current_folder (GtkFileChooser * chooser) { #ifdef GTK4 gtk_file_chooser_set_current_folder (chooser, g_file_new_for_path ("./"), NULL); #else gtk_file_chooser_set_current_folder (chooser, ""); #endif } #ifdef GTK4 /*! \fn GtkFileChooserNative * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name) \brief create a GtkFileChooser, utility to select file(s) \param title the title of the window \param parent the parent window, if any \param act the action to perform (read or write) \param act_name the action name to display */ GtkFileChooserNative * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name) { return gtk_file_chooser_native_new (title, parent, act, act_name, _("Cancel")); } #else /*! \fn GtkWidget * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name) \brief create a GtkFileChooser, utility to select file(s) \param title the title of the window \param parent the parent window, if any \param act the action to perform (read or write) \param act_name the action name to display */ GtkWidget * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name) { return gtk_file_chooser_dialog_new (title, parent, act, _("Cancel"), GTK_RESPONSE_CANCEL, act_name, GTK_RESPONSE_ACCEPT, NULL); } #endif /*! \fn ColRGBA get_button_color (GtkColorChooser * colob) \brief get the ColRGBA color from a GtkColorChooser button \param colob the GtkColorChooser button */ ColRGBA get_button_color (GtkColorChooser * colob) { GdkRGBA col; gtk_color_chooser_get_rgba (colob, & col); return gdkrgba_to_rgba (col); } /*! \fn ColRGBA get_window_color (GtkWidget * color_win) \brief get the ColRGBA color from a color selection window \param color_win the color selection window */ ColRGBA get_window_color (GtkWidget * color_win) { GdkRGBA col; gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER(color_win), & col); return gdkrgba_to_rgba (col); } /*! \fn void set_color_chooser_color (GtkWidget * color_win, ColRGBA col) \brief set the color of a color selection window \param color_win the color selection window \param col the color to use */ void set_color_chooser_color (GtkWidget * color_win, ColRGBA col) { GdkRGBA colo = colrgba_togtkrgba(col); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(color_win), & colo); } #ifdef GTK4 /*! \fn void pop_menu_at_pointer (GtkWidget * pop, double x, double y) \brief popup a popover menu at pointer location \param pop the menu to popup \param x x position \param y y position */ void pop_menu_at_pointer (GtkWidget * pop, double x, double y) { GdkRectangle rect; rect.x = x; rect.y = y; rect.width = 1; rect.height = 1; gtk_popover_set_has_arrow (GTK_POPOVER(pop), FALSE); gtk_popover_set_pointing_to (GTK_POPOVER(pop), & rect); gtk_popover_popup (GTK_POPOVER(pop)); } #else /*! \fn void pop_menu_at_pointer (GtkWidget * widg, GdkEvent * event) \brief popup a menu at pointer location \param widg the menu to popup \param event the GdkEvent triggering the signal */ void pop_menu_at_pointer (GtkWidget * widg, GdkEvent * event) { show_the_widgets (widg); gtk_menu_popup_at_pointer (GTK_MENU (widg), event); } #endif /*! \fn GtkWidget * get_top_level (GtkWidget * widg) \brief get the top level container, window, of a widget \param widg the GtkWidget */ GtkWidget * get_top_level (GtkWidget * widg) { #ifdef GTK4 return (GtkWidget *)gtk_widget_get_root (widg); #else return gtk_widget_get_toplevel (widg); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean destroy_this_window (GtkWindow * win, gpointer data) \brief destroy a GtkWindow \param win the GtkWindow to destroy \param data the associated data pointer */ G_MODULE_EXPORT gboolean destroy_this_window (GtkWindow * win, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean destroy_this_window (GtkWidget * win, GdkEvent * event, gpointer data) \brief destroy a GtkWindow \param win the GtkWindow to destroy \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean destroy_this_window (GtkWidget * win, GdkEvent * event, gpointer data) #endif { destroy_this_widget (GTK_WIDGET(win)); return TRUE; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean hide_this_window (GtkWindow * win, gpointer data) \brief hide a GtkWindow \param win the GtkWindow to hide \param data the associated data pointer */ G_MODULE_EXPORT gboolean hide_this_window (GtkWindow * win, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean hide_this_window (GtkWidget * win, GdkEvent * event, gpointer data) \brief hide a GtkWindow \param win the GtkWindow to hide \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean hide_this_window (GtkWidget * win, GdkEvent * event, gpointer data) #endif { hide_the_widgets (GTK_WIDGET(win)); return TRUE; } /*! \fn void add_gtk_close_event (GtkWidget * widg, GCallback handler, gpointer data) \brief add a close event signal and callback to a GtkWidget \param widg the GtkWidget \param handler the callback for the close event \param data the associated data pointer */ void add_gtk_close_event (GtkWidget * widg, GCallback handler, gpointer data) { #ifdef GTK4 g_signal_connect (G_OBJECT (widg), "close-request", handler, data); #else g_signal_connect (G_OBJECT (widg), "delete-event", handler, data); #endif } /*! \fn int get_widget_width (GtkWidget * widg) \brief retrive GtkWidget width \param widg the GtkWidget */ int get_widget_width (GtkWidget * widg) { #ifdef GTK3 return gtk_widget_get_allocated_width (widg); #else return gtk_widget_get_width (widg); #endif } /*! \fn int get_widget_height (GtkWidget * widg) \brief retrive GtkWidget height \param widg the GtkWidget */ int get_widget_height (GtkWidget * widg) { #ifdef GTK3 return gtk_widget_get_allocated_height (widg); #else return gtk_widget_get_height (widg); #endif } atomes_1.3.1/src/global.h0000664000175000017500000015002415212624223014707 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file global.h * @short Global variable declarations \n Global convenience function declarations \n Global data structure definitions * @author Sébastien Le Roux */ /* * This header file: 'global.h' * * Contains: - Global variable declarations - Global convenience function declarations - Global data structure definitions */ #ifdef HAVE_CONFIG_H # include #endif #define GDK_SYNCHRONIZE #ifndef GLOBAL_H_ #define GLOBAL_H_ #define i18n(String) String #include #include #ifdef OSX #include #endif #include #include #include #include #include #include #include #include #include #include #ifndef GTK4 # include #endif #include #include #include /*! \def GTK_LIMIT \brief maximum number of elements in GTK widgets like GtkTreeView, GtkTreeStore or similar rendering widgets can be an issue if the number of items to display is too high if the number of element to display is < GTK_LIMIT then the widget is rendered, otherwise a search engine is (or should be) used */ #define GTK_LIMIT 10000 #include #ifdef MAC_INTEGRATION # include #endif #ifdef G_OS_WIN32 # include # include # define WIN32_LEAN_AND_MEAN 1 # include # include #else # define max(a,b) (a>=b?a:b) # define min(a,b) (a<=b?a:b) # include # include # ifdef OSX # include # else # include # endif #endif #define MY_ENCODING "UTF-8" #include "math_3d.h" // dint, tint and qint structures are used for pointer purposes. // dint, tint, qint, ColRGBA and coord_info structures must be defined before including 'glwin.h' typedef struct dint dint; struct dint { int a; int b; }; typedef struct tint tint; struct tint { int a; int b; int c; }; typedef struct qint qint; struct qint { int a; int b; int c; int d; }; typedef struct ColRGBA ColRGBA; struct ColRGBA { float red; float green; float blue; float alpha; }; #include "cedit.h" /*! \typedef shortcuts \brief keyboard shortcuts information */ typedef struct shortcuts shortcuts; struct shortcuts { gchar * description; /*!< Shortcut description */ gchar * subtitle; /*!< Shortcut subtitle */ gint key; /*!< Shortcut key */ gchar * accelerator; /*!< Shortcut accelerator */ }; /*! \typedef atomes_action \brief action information data structure */ typedef struct atomes_action atomes_action; struct atomes_action { gchar * action_name; /*!< The name of the action */ gpointer action_data; /*!< The associated data pointer */ }; /*! \typedef coord_info \brief coordination information data structure */ typedef struct coord_info coord_info; struct coord_info { int species; /*!< The number of chemical species */ // 0 = tot // 1 = partial // 2 = fragments // 3 = molecules // > 3 = rings // 9 = chains int totcoord[10]; /*!< The total number of objects: \n 0 = total coordination(s), \n 1 = partial coordination(s), \n 2 = fragment(s), \n 3 = molecule(s), \n 4 to 8 = ring statistics, \n 9 = chain statistics */ int * ntg[10]; /*!< The number of objects by chemical species */ int ** geolist[10]; /*!< The corresponding list of geometries */ int *** partial_geo; /*!< The list of partial geometries */ int cmin; /*!< The minimum coordination number */ int cmax; /*!< The Maximum coordination number */ }; #include "glwin.h" #define MEDIA_NEXT "media-skip-forward" #define MEDIA_PREV "media-skip-backward" #define MEDIA_LAST "go-last" #define MEDIA_FIRST "go-first" #define MEDIA_GOTO "go-jump" #define MEDIA_PLAY "media-playback-start" #define MEDIA_STOP "media-playback-stop" #define MEDIA_LOOP "view-refresh" #define MEDIA_ULOOP "edit-cut" #define MEDIA_SLOW "view-sort-ascending" #define MEDIA_FAST "view-sort-descending" #define GO_RIGHT "go-next" #define GO_LEFT "go-previous" #define GO_UP "go-up" #define GO_DOWN "go-down" #define PAGE_SETUP "document-page-setup" #define FULLSCREEN "view-fullscreen" #define FITBEST "zoom-fit-best" #define RECORD "media-record" #define YES "gtk-yes" #define EDITA "edit-find-replace" #define EDITC "edit-copy" #define EDITF "edit-find" #define ECUT "edit-cut" #define DPROPERTIES "document-properties" #define FNEW "document-new" #define FOPEN "document-open" #define FSAVE "document-save" #define FSAVEAS "document-save-as" #define FCLOSE "window-close" #define FEXIT "application-exit" #define LIST_ADD "list-add" #define LIST_REM "list-remove" #define CANCEL "process-stop" #define EXECUTE "system-run" #ifdef GTK4 #define APPLY "emblem-default" #else #define APPLY "gtk-apply" #endif #define DELETEB "edit-delete" #define DIAL_ERROR "dialog-error" #define AFILE "text-x-generic" #define ABOUT "help-about" #ifdef GTK4 /*! \enum ReliefStyle */ enum ReliefStyle { GTK_RELIEF_NORMAL = 0, /*!< 0 */ GTK_RELIEF_HALF = 1, /*!< 1 */ GTK_RELIEF_NONE = 2 /*!< 2 */ }; /*! \enum ShadowStyle */ enum ShadowStyle { GTK_SHADOW_NONE = 0, /*!< 0 */ GTK_SHADOW_IN = 1, /*!< 1 */ GTK_SHADOW_OUT = 2, /*!< 2 */ GTK_SHADOW_ETCHED_IN = 3, /*!< 3 */ GTK_SHADOW_ETCHED_OUT = 4 /*!< 4 */ }; #define BSEP 3 #else #define BSEP 0 #endif /*! \enum ContainerType */ enum ContainerType { CONTAINER_WIN = 0, /*!< 0 */ CONTAINER_SCR = 1, /*!< 1 */ CONTAINER_VIE = 2, /*!< 2 */ CONTAINER_BUT = 3, /*!< 3 */ CONTAINER_FRA = 4, /*!< 4 */ CONTAINER_EXP = 5 /*!< 5 */ }; /*! \enum ImageFormats */ enum ImageFormats { IMG_NONE = 0, /*!< 0 */ IMG_PIXBUF = 1, /*!< 1 */ IMG_SURFACE = 2, /*!< 2 */ IMG_FILE = 3, /*!< 3 */ IMG_STOCK = 4 /*!< 4 */ }; #define IODEBUG FALSE /*! \def ATOM_LIMIT \brief atom number limit to compute fragment(s) and molecule(s) analysis automatically */ #define ATOM_LIMIT 100000 /*!< \def STEP_LIMIT \brief MD step number limit to compute fragment(s) and molecule(s) analysis automatically */ #define STEP_LIMIT 1000 #define OK 0 #define ERROR_RW 1 #define ERROR_PROJECT 2 #define ERROR_CURVE 3 #define ERROR_IMAGE 4 #define ERROR_ATOM_A 5 #define ERROR_ATOM_B 6 #define ERROR_UPDATE 7 #define ERROR_NO_WAY 8 #define ERROR_COORD 9 #define ERROR_RINGS 10 #define ERROR_CHAINS 11 #define ERROR_MOL 12 #define ERROR_ANA 13 #define ERROR_QM 14 #define ERROR_FIELD 15 /*!< \def CHEM_PARAMS \brief number of chemical parameters */ #define CHEM_PARAMS 5 #define CHEM_Z 0 #define CHEM_M 1 #define CHEM_R 2 #define CHEM_N 3 #define CHEM_X 4 #define NDOTS 8 /*!< \def NCALCS \brief number of analysis */ #define NCALCS 10 /*!< \def NCFORMATS \brief number atomic coordinates file formats */ #define NCFORMATS 13 #define NITEMS 4 #define OT 4 #define GDR 0 #define SQD 1 #define SKD 2 #define GDK 3 #define BND 4 #define ANG 5 #define RIN 6 #define CHA 7 #define SPH 8 #define MSD 9 #define SKT 10 // #define FF 12 #define DEFAULT_FONT_SIZE 8 #define DEFAULT_ALPHA 0.75 #define MINCUT 1.85 #ifdef G_OS_WIN32 extern gchar * PACKAGE_PREFIX; extern gchar * PACKAGE_LIBEXEC; extern gchar * PACKAGE_LOCALE; #endif extern gchar * PACKAGE_LIB_DIR; extern gchar * PACKAGE_IMP; extern gchar * PACKAGE_CON; extern gchar * PACKAGE_IMG; extern gchar * PACKAGE_PDF; extern gchar * PACKAGE_SVG; extern gchar * PACKAGE_EPS; extern gchar * PACKAGE_PNG; extern gchar * PACKAGE_JPG; extern gchar * PACKAGE_BMP; extern gchar * PACKAGE_TIFF; extern gchar * PACKAGE_VOID; extern gchar * PACKAGE_TD; extern gchar * PACKAGE_MOL; extern gchar * PACKAGE_OGL; extern gchar * PACKAGE_OGLM; extern gchar * PACKAGE_OGLC; extern gchar * PACKAGE_PRO; extern gchar * PACKAGE_SET; extern gchar * PACKAGE_LOGO; extern gchar * PACKAGE_LAGPL; extern gchar * PACKAGE_LABOUT; extern gchar * PACKAGE_DOTA; extern gchar * PACKAGE_DOTB; extern gchar * PACKAGE_DOTC; extern gchar * PACKAGE_DOTD; extern gchar * PACKAGE_DOTE; extern gchar * PACKAGE_DOTF; extern gchar * PACKAGE_DOTG; extern gchar * PACKAGE_DOTH; extern gchar * PACKAGE_DFBD; extern gchar * PACKAGE_DFAN; extern gchar * PACKAGE_DFDI; extern gchar * PACKAGE_DFTD; extern gchar * PACKAGE_DFIN; extern gchar * PACKAGE_SGCP; extern gchar * PACKAGE_SGCI; extern gchar * PACKAGE_SGCF; extern gchar * PACKAGE_SGHP; extern gchar * PACKAGE_SGTR; extern gchar * PACKAGE_SGTI; extern gchar * PACKAGE_SGTP; extern gchar * PACKAGE_SGOP; extern gchar * PACKAGE_SGOI; extern gchar * PACKAGE_SGOC; extern gchar * PACKAGE_SGOF; extern gchar * PACKAGE_SGMP; extern gchar * PACKAGE_SGMI; extern gchar * PACKAGE_SGTC; extern gchar * ATOMES_CONFIG_DIR; extern gchar * ATOMES_CONFIG; extern gchar * ATOMES_URL; extern gchar * mode_name[2]; extern gchar * graph_img[NCALCS]; extern gchar * dots[NDOTS]; extern gchar * bravais_img[14]; extern gchar * ifield[8]; extern gchar * projfile; extern char * ifbug; extern char * coord_files[NCFORMATS+1]; extern char * coord_files_ext[NCFORMATS+1]; extern char * calc_name[]; extern char * graph_name[]; extern char * rings_type[5]; extern char * untime[5]; extern gchar * workspacefile; extern int nprojects; extern int activep; extern int activev; extern int activef; extern int inactep; extern int activew; extern int statusval; extern int atomes_visual; extern int dialog_id; extern int reading_step_limit; extern int bonds_update; extern int frag_update; extern int mol_update; extern int tmp_pixels[2]; extern int * pasted_todo; extern atomic_object * copied_object; extern GMainLoop * Event_loop[5]; extern gboolean in_movie_encoding; extern gboolean newspace; extern gboolean reading_input; extern gboolean tmp_adv_bonding[2]; extern gboolean column_label; extern gboolean check_label; extern gboolean object_motion; extern gboolean selected_status; extern gboolean silent_input; extern gboolean cif_use_symmetry_positions; extern gboolean atomes_from_libreoffice; extern gboolean atomes_render_image; extern struct timespec start_time; extern struct timespec stop_time; extern double opac; extern double pi; extern GtkWidget * MainWindow; extern GtkWidget * MainView; extern GtkWidget * MainFrame[2]; extern GtkWidget * pop; extern GtkWidget * curvetoolbox; extern GtkWidget * progressbar; extern GtkWidget * MainScrol[2]; extern GtkWidget * atomes_logo; extern GtkWidget * atomes_shortcuts; extern GtkWidget * calc_dialog; extern GtkWidget * register_button; extern GtkTextTag * tag; extern GtkStatusbar * statusbar; extern ColRGBA std[6]; extern GdkPixbuf * THETD; extern GdkPixbuf * THEMO; extern GdkPixbuf * THEBD; extern GdkPixbuf * SETTING; extern GdkPixbuf * SETTINGS; extern GdkPixbuf * OGL; extern GdkPixbuf * OGLM; extern GdkPixbuf * OGLC; extern GdkPixbuf * RUN; extern tint cut_sel; #define LINE_SIZE 160 // Data structures /*! \typedef atomes_error_signal \brief atomes_error_signal data structure */ typedef struct atomes_error_signal atomes_error_signal; struct atomes_error_signal { int id; gchar * message; }; /*! \typedef atomes_error \brief atomes_error information data structure */ typedef struct atomes_error atomes_error; struct atomes_error { atomes_error_signal error_signal; gchar * error_file; gchar * error_func; int error_line; int trace_id; gchar * error_trace; }; /*! \typedef line_node */ typedef struct line_node line_node; struct line_node { gchar * line; /*!< Size max = LINE_SIZE */ struct line_node * next; struct line_node * prev; }; /*! \typedef coord_file \brief atomic coordinates file, data container */ typedef struct coord_file coord_file; struct coord_file { int natomes; /*!< Number of atom(s) */ int steps; /*!< Number of MD step(s) */ int nspec; /*!< Number of chemical species */ double * z; /*!< List of atomic numbers */ int * nsps; /*!< Number of atoms by species */ double ** coord; /*!< Atomic coordinates */ gboolean cartesian; /*!< Cartesian (1) or Fractional coordinates (0) */ gboolean chemical; /*!< CIF file describing chemical reaction */ int * lot; /*!< Chemical species by atom */ int ndummy; /*!< Number of dummy atom(s), if any */ gchar ** dummy; /*!< List of dummy atom(s), if any */ cell_info lattice; /*!< Description of the periodicity */ int mid; /*!< Message type (0 = error, 1 = warning), if any */ int msg; /*!< Number of message(s) */ gchar ** info; /*!< Information message(s), if required */ gchar ** label; /*!< VAS or TRJ: list of chemical labels, \n CIF: Label list of mis-labelled object(s) */ // The following line is only used for DL_POLY history files: int traj; /*!< */ // The following lines are only used for CIF files: int num_sym_pos; /*!< Number of symmetry positions, if any */ gchar *** sym_pos; /*!< The symmetry positions, if any */ int setting; /*!< Space group setting */ int * wyckoff; /*!< Wyckoff positions */ int rounding; /*!< Occupancy rounding */ double * occupancy; /*!< Site(s) occupancy */ int * multi; /*!< Multiplicity */ int dis; /*!< Number of disorder group */ int * disorder; /*!< Site disorder group */ int atom_unlabelled; /*!< Number of atom(s) unlabelled */ int * u_atom_list; /*!< List of unlabelled atom(s) */ int object_to_insert; /*!< Number of object(s) to label */ int * object_list; /*!< List of object to insert by atom(s) */ }; /*! \typedef MouseState \brief data structure to store mouse information on curve widget */ typedef struct MouseState MouseState; struct MouseState { gint start_x; /*!< Initial x position */ gint start_y; /*!< Initial y position */ gint time; /*!< Time */ gboolean MouseIsDown; /*!< Is the mouse button up (0) or down (1) */ }; /*! \typedef CurveState \brief data structure used for zoom in / out on curve widget */ typedef struct CurveState CurveState; struct CurveState { MouseState mouseState; /*!< Mouse status information */ tint * id; /*!< Curve data pointer */ }; /*! \typedef DataLayout \brief curve layout information */ typedef struct DataLayout DataLayout; struct DataLayout { ColRGBA datacolor; /*!< Data color */ double thickness; /*!< Data line thickness */ int dash; /*!< Data line style */ int glyph; /*!< Data glyph type */ double gsize; /*!< Data glyph size */ int gfreq; /*!< Data glyph frequency */ int aspect; /*!< X/Y or histogram */ double hwidth; /*!< Histogram width */ double hopac; /*!< Histogram color opacity */ int hpos; /*!< Histogram is transparent ? */ }; /*! \typedef CurveExtra \brief extra curve(s) data information */ typedef struct CurveExtra CurveExtra; struct CurveExtra { tint id; /*!< Curve data pointer */ DataLayout * layout; /*!< Curve layout information */ CurveExtra * prev; CurveExtra * next; }; /*! \typedef ExtraSets \brief list of extra data sets for a curve */ typedef struct ExtraSets ExtraSets; struct ExtraSets { int extras; /*!< Number of extra data sets, if any */ CurveExtra * first; /*!< First data set of the list, if any */ CurveExtra * last; /*!< Last data set of the list, if any */ }; /*! \typedef Curve \brief curve data structure */ typedef struct Curve Curve; struct Curve { int cid; /*!< Curve id */ int ndata; /*!< number of data points */ double * data[2]; /*!< X and Y data */ double * err; /*!< Error bar on Y if any. */ double cmin[2]; /*!< Min of the data on X and Y */ double cmax[2]; /*!< Max of the data on X and Y */ GtkWidget * plot; /*!< Drawing area */ GtkWidget * button; /*!< Interaction button for 'Toolboxes' */ GtkWidget * curve_vbox; /*!< Curve top boxes for the menu bar */ GtkWidget * curve_hbox; GtkWidget * window; /*!< Widget for the window */ GtkWidget * pos; /*!< Mouse cursor position in graph */ GtkWidget * shortcuts; /*!< Shortcuts window */ int wsize[2]; /*!< Curve window size */ GtkWidget * datatree; /*!< Widget for the selection tree */ qint idcol[2]; /*!< For navigation in the list view */ ColRGBA backcolor; /*!< Background color */ int format; /*!< Format of output (screen, png, pdf, ...) */ char * name; /*!< Name of the curve */ // Axis double axmin[2]; /*!< Min for the axis X and Y */ double axmax[2]; /*!< Max for the axis X and Y */ gboolean axis_defaut_title[2]; /*!< Use axis default title */ char * axis_title[2]; /*!< Title of axis */ int axis_title_x[2]; /*!< Position of the x axis title */ int axis_title_y[2]; /*!< Position of the y axis title */ gchar * axis_title_font[2]; /*!< Axis title font */ int scale[2]; /*!< Axis scale (linear or log) */ gboolean autoscale[2]; /*!< Autoscale */ gboolean show_grid[2]; /*!< Show/Hide axis grid */ gboolean show_axis[2]; /*!< Show/Hide axis bar */ double majt[2]; /*!< Value for major ticks */ int mint[2]; /*!< Number of minor ticks */ int ticks_io[2]; /*!< Ticks in or out / axis bar */ int ticks_pos[2]; /*!< Ticks position: normal, opposite, both */ int majt_size[2]; /*!< Majors ticks size (pixels) */ int mint_size[2]; /*!< Minors ticks size (pixels) */ int labels_pos[2]; /*!< Ticks label position: normal, opposite, both */ int labels_digit[2]; /*!< Significant digits for tick labels */ gchar * labels_font[2]; /*!< Ticks label font */ double labels_angle[2]; /*!< Ticks label angle */ int labels_shift_x[2]; /*!< Ticks position shift from x axis */ int labels_shift_y[2]; /*!< Ticks position shift from y axis */ // Legend gboolean show_legend; /*!< Show (1) /Hide (0) legend */ double legend_pos[2]; /*!< Position of the legend */ gchar * legend_font; /*!< Legend font */ ColRGBA legend_color; /*!< Legend color */ gboolean show_legend_box; /*!< Display legend box */ int legend_box_dash; /*!< Legend box line style */ ColRGBA legend_box_color; /*!< Legend box color */ double legend_box_thickness; /*!< Legend box line thickness */ // Title char * title; /*!< Title to display */ gboolean show_title; /*!< Show/Hide title */ gboolean default_title; /*!< Use default title */ double title_pos[2]; /*!< Position of the title */ gchar * title_font; /*!< Title font */ ColRGBA title_color; /*!< Title color */ // Frame gboolean show_frame; /*!< Show/Hide frame */ int frame_type; /*!< Frame type */ int frame_dash; /*!< Frame line style */ double frame_thickness; /*!< Frame line thickness */ ColRGBA frame_color; /*!< Frame color */ double frame_pos[2][2]; /*!< Frame 0 = x, 1 = y, 0 = min and 1 = max */ DataLayout * layout; /*!< The curve layout */ ExtraSets * extrac; /*!< Extra data set(s) added to graph */ cairo_surface_t * surface; /*!< The rendering surface */ int draw_id; /*!< Curve drawing order */ int bshift; /*!< Curve x shift for bar diagram */ gboolean displayed; char * cfile; gchar * path; /*!< Path for the toolbox tree */ int action_id; /*!< Unique Id to identify actions */ CurveState state; /*!< Curve state */ curve_edition * curve_edit; /*!< curve edition data structure - cedit.h */ GSimpleActionGroup * action_group; }; /*! \typedef atomes_analysis \brief analysis data structure */ typedef struct atomes_analysis atomes_analysis; struct atomes_analysis { /* Analysis default structure and parameters */ int aid; /*!< Analysis type: \n 0 = gr, \n 1 = sq, \n 2 = sk, \n 3 = gftt, \n 4 = bd, \n 5 = an, \n 6 = frag-mol, \n 7 = ch, \n 8 = sp, \n 9 = msd, \n 10 = s(k,t) */ gchar * name; /*!< Analysis name for menu item */ gboolean avail_ok; /*!< Analysis calculation availability */ gboolean init_ok; /*!< Curves initialization */ gboolean calc_ok; /*!< Analysis calculation confirmation */ gboolean requires_md; /*!< Analysis requires multiple configurations */ gchar * x_title; /*!< x axis default title, ex: "r [Å] */ double calc_time; /*!< Calculation time */ int num_delta; /*!< Number of intervals */ double delta; /*!< Size of an interval */ double min; /*!< Minimum x value */ double max; /*!< Maximum x value */ double fact; /*!< Gaussian smoothing factor, if available */ int other_params; /*!< Number of other parameters for this analysis */ double * o_params; /*!< List of other parameters */ GtkTextBuffer * calc_buffer; /*!< The text buffer for the calculation */ gboolean graph_res; /*!< Results to be displayed using graphs ? */ int numc; /*!< Number of curves, if any */ int c_sets; /*!< Number of compatible sets */ int * compat_id; /*!< List of compatible sets */ Curve ** curves; /*!< The curves, graph for the results of the calculations, if any */ tint * idcc; /*!< Pointers for the curves */ }; /*! \def MAXDATC \brief Number of tabs for the description of the classical calculation */ #define MAXDATC 8 /*! \def MAXDATA \brief Number of tabs for the description of the classical force field */ #define MAXDATA 21 typedef struct classical_field classical_field; struct classical_field { gboolean prepare_file[2]; // Field and Config files gboolean afp[MAXDATC+MAXDATA]; int type; int energy_unit; int atom_init; int molecules; struct field_molecule * first_molecule; int nbody[5]; struct field_nth_body * first_body[5]; // Tersoff potential cross terms double *** cross; /*!< Tersoff potential cross terms */ int extern_fields; struct field_external * first_external; // Control file double * sys_opts; double * io_opts; double * ana_opts; double * elec_opts; double * vdw_opts; double * met_opts; double * equi_opts; int ensemble; int thermostat; double * thermo_opts; double * md_opts; double * out_opts; }; typedef struct thermostat thermostat; struct thermostat { int id; // For CPMD: 0 = none, 2 = controlled, 3 = nose // For CP2K: 0 = none, 2 = langevin, 3 = csvr, 4 = gle, 5 = nose int type; // For CPMD: 0 = global, 1 = local // For CP2K: 0 = global, 1 = local, 2 = molecule int sys; gboolean show; double params[4]; int natoms; int * list; thermostat * next; thermostat * prev; }; typedef struct dummy_atom dummy_atom; struct dummy_atom { // 0 = type1, 1 = type2, ... int id; int type; int pick[2]; gboolean show; double xyz[3]; int coord[4]; int natoms; int * list; int numv; int * vois; dummy_atom * next; dummy_atom * prev; }; typedef struct cpmd cpmd; struct cpmd { int calc_type; int restart[10]; int thermostats; thermostat * ions_thermostat; thermostat * elec_thermostat; int fixat; int * fixlist; int ** fixcoord; int dummies; dummy_atom * dummy; double default_opts[17]; double calc_opts[24]; int ** pp; gchar * info; }; typedef struct cp2k cp2k; struct cp2k { int input_type; double opts[42]; double extra_opts[3][4]; int thermostats; thermostat * ions_thermostat; int fixat[2]; int * fixlist[2]; int ** fixcoord[2]; gchar * files[5]; gchar *** spec_files; int ** spec_data; gchar * info; }; /*! \typedef molecule \brief the molecule data structure */ typedef struct molecule molecule; struct molecule { int id; /*!< Molecule id number */ int md; /*!< MD step */ int multiplicity; /*!< Multiplicity */ int * fragments; /*!< Fragments list */ int natoms; /*!< Number of atoms */ int nspec; /*!< Number of chemical species */ int * species; /*!< Number of atom by species */ }; /*! \typedef model \brief data structure to describe the topology */ typedef struct model model; struct model { int * mol_by_step; /*!< Num of mol by steps */ molecule ** mols; /*!< List of molecules by steps */ }; /*! \typedef element_data \brief element description used for the periodic table defined in 'w_periodic.c' */ typedef struct element_data element_data; struct element_data { gchar * lab; /*!< Label */ gchar * name; /*!< Name */ int Z; /*!< Atomic number */ float M; /*!< Atomic mass */ }; /*! \typedef chemical_data \brief a structure to store some chemical information */ typedef struct chemical_data chemical_data; struct chemical_data { // 0 = Z, 1 = Mass, 2 = Radius, 3 = Neutrons, 4 = X-rays double ** chem_prop; /*!< chemical properties: \n 0 = Z, \n 1 = Mass, \n 2 = Radius, \n 3 = Neutrons, \n 4 = X-rays */ int * nsps; /*!< Number of atom(s) by chemical species */ int * formula; /*!< Chemical formula */ char ** label; /*!< Element label(s) */ char ** element; /*!< Element name(s) */ double ** cutoffs; /*!< partial cutoff(s) */ double grtotcutoff; /*!< Total cutoff */ }; /*! \typedef insertion_menu \brief data structure for the insertion pop-up menu */ typedef struct insertion_menu insertion_menu; struct insertion_menu { gchar * type; gchar * object; double Z; int ats; }; /*! \typedef atom \brief atom data structure */ typedef struct atom atom; struct atom { int id; /*!< The atom's id in the model */ // The id in the model int sp; /*!< The chemical species */ // The chemical species // The coordinates double x; /*!< x coordinate */ double y; /*!< y coordinate */ double z; /*!< z coordinate */ int numv; /*!< The number of neighbors */ // The number of neighbors int * vois; /*!< The list of neighbors */ // The list of neighbors // 0 = Total coordination // 1 = Partial coordination // 2 = Fragment // 3 = Molecule // 4 = Field object id int coord[5]; /*!< Coordination information: \n 0 = Total coordination, \n 1 = Partial coordination, \n 2 = Fragment, \n 3 = Molecule, \n 4 = Field object id */ // Coordination information // 0 = All // 1 = King's // 2 = Guttman's // 3 = Primitive // 4 = Strong int ** rings[5]; /*!< Ring statistics information: \n 0 = All, \n 1 = King's, \n 2 = Guttman's, \n 3 = Primitive, \n 4 = Strong */ // Rings statistics information int ** chain; /*!< Chain statistics information */ int fid; /*!< Force field id */ int faid; /*!< Force field id in fragment */ gboolean show[2]; /*!< Show / Hide (0 = atom, 1 = clone) */ gboolean label[2]; /*!< Label / Unlabel (0 = atom, 1 = clone) */ gboolean pick[2]; /*!< Selected / Unselected (0 = atom, 1 = clone) */ gboolean cloned; /*!< Clone(s) ? (0 = no, 1 = yes) */ int style; /*!< Rendering style if not global */ atom * prev; atom * next; }; /*! \typedef project \brief data structure for the 'atomes' project */ typedef struct project project; struct project { /* General parameters */ int id; /*!< Project ID */ char * name; /*!< Project name */ char * projfile; /*!< Name of the project file, if any */ char * coordfile; /*!< Name of atomic coordinates file, if any */ char * bondfile; /*!< Name of the file to output bonding information, if any */ gboolean newproj; /*!< New project ? yes / no */ gboolean run; /*!< Run this project ? yes / no */ gboolean dmtx; /*!< Trigger the calculation of the distance matrix ? yes / no */ int tfile; /*!< File format for the atomic coordinates, when imported */ int nspec; /*!< Number of chemical species */ int natomes; /*!< Number of atoms */ int dummies; /*!< Number of atoms including extra cells */ int steps; /*!< Number of MD steps */ int tunit; /*!< Time unit between steps, if MD */ chemical_data * chemistry; /*!< Chemical data */ coord_info * coord; /*!< Coordination(s) data */ cell_info cell; /*!< Periodicity data */ atom ** atoms; /*!< Atom list: atoms[steps][natomes] */ /* Analysis related parameters */ /*!< Analysis: \n 0 = gr, \n 1 = sq, \n 2 = sk, \n 3 = gftt, \n 4 = bd, \n 5 = an, \n 6 = frag-mol, \n 7 = ch, \n 8 = sp, \n 9 = msd \n 10 = skt */ atomes_analysis ** analysis; /*!< The analysis data and results */ // Some parameters cannot be easily stored in a generic data structure gboolean runc[3]; /*!< Trigger to run bonds, angles and molecules analysis */ int xcor; /*!< S(q) X-rays type of calculation: f(q) (1) or approximated (0) */ // Ring statistics parameters // 0 = Search type, 1 = NUMA int rsearch[2]; /*!< Ring statistics parameters: 0 = Search type, 1 = Ring's allocation parameter NUMA */ // First col : search type (up to chains stat). Second col: search info // 0 = Initnode, 1 = RMAX, 2 = ABAB, 3 = Homo, 4 = Homo in DMTX, 5 = Done + Rings int rsparam[5][6]; /*!< Ring statistics parameters (first column the type of rings): \n 0 = Initial node(s) for the search: selected chemical species or all atoms, \n 1 = Maximum size of ring for the search Rmax, \n 2 = Search only for ABAB rings or not, \n 3 = Include Homopolar bond(s) in the analysis or not, \n 4 = Include homopolar bond(s) when calculating the distance matrix, \n 5 = Analysis completed and rings were found (yes / no) */ double rsdata[5][5]; /*!< Results for the ring statistics (first column the type of rings): \n 0 = Total number of ring(s) per MD step: RpS, \n 1 = Standard deviation for RpS, \n 2 = Number of ring(s) with size > Rmax that potentially exist per MD step: RpE, \n 3 = Standard deviation for RpE, \n 4 = calculation time for the analysis */ // Chain statistics parameters int csearch; /*!< Chain statistics allocation parameter: CNUMA */ // 0 = Initnode, 1 = AAAA, 2 = ABAB, 3 = Homo, 4 = 1221, 5 = RMAX, 6 = Done + Chains int csparam[7]; /*!< Chain statistics parameters: \n 0 = Initial node(s) for the search: selected chemical species or all atoms, \n 1 = Search only for AAAA chains or not, \n 2 = Search only for ABAB chains or not, \n 3 = Include Homopolar bond(s) in the analysis or not, \n 4 = Search only for 1-(2)n-1 chains, \n 5 = Maximum size of chain for the search Rmax 6 = Analysis completed and chains were found (yes / no) */ double csdata[2]; /*!< Results for the chain statistics: \n 0 = Total number of chains) per MD step: CpS, \n 1 = Standard deviation for CpS */ // F(k,t) and S(q,w) parameters double sk_advanced[2][2]; /*!< Probability triggered k sampling, 0 = SKD, 1 = SKT */ int skt_sets; /*!< Total number of S(k,t) curves */ int skt_corr_threshold; /*!< Minium number of correlated configurations to compute S(k,t) */ gboolean skt_all_sets; /*!< Output calculation results for all t steps */ int skt_n_data_sets; /*!< Number of configuration(s) to save when computing S(k,t) */ int * skt_step_id; /*!< List of t step(s) to save when computing S(k,t) */ int sqw_sets; /*!< Total number of S(q,w) curves */ int sqw_n_data_sets; /*!< Number of q vector(s) to compute S(q,w) */ double * sqw_q_id; /*!< List of q vector(s) to compute S(q,w) */ int sqw_freq; /*!< Frequency intervals */ GtkTextBuffer * text_buffer[NITEMS]; /*!< The text buffer for general information */ /* OpenGL related parameters */ gboolean initgl; /*!< Was OpenGL rendering initialized ? yes / no */ int tmp_pixels[2]; /*!< Saved size of the OpenGL window */ glwin * modelgl; /*!< The OpenGL widget */ /* Molecular dynamics related parameters */ model * modelfc; /*!< Description of the topology */ // MD input files classical_field * force_field[2]; /*!< Classical MD input files: \n 0 = DL_POLY, \n 1 = LAMMPS */ cpmd * cpmd_input[2]; /*!< CPMD input files: \n 0 = Ab-initio, \n 1= QM-MM */ cp2k * cp2k_input[2]; /*!< CP2K input files: \n 0 = Ab-initio, \n 1= QM-MM */ #ifdef DEBUG GtkWidget * pix_tab[3]; /*!< Not used anymore see 'cell_pixel.c' */ GtkWidget * pix_box; /*!< Not used anymore see 'cell_pixel.c' */ int pix[3]; /*!< Not used anymore see 'cell_pixel.c' */ int ** pixels; /*!< Not used anymore see 'cell_pixel.c' */ int actif_pix; /*!< Not used anymore see 'cell_pixel.c' */ #endif project * next; project * prev; }; /*! \typedef workspace \brief data structure for the 'atomes' workspace */ typedef struct workspace workspace; struct workspace { project * first; project * last; }; extern atomes_action edition_acts[]; extern atomes_action analyze_acts[]; extern GSimpleAction * edition_actions[]; extern void add_analysis_action (int act); extern void remove_action (gchar * action_name); extern void remove_edition_actions (); extern void remove_edition_and_analyze_actions (); extern GtkApplication * AtomesApp; extern workspace workzone; extern project * proj; extern chemical_data * active_chem; extern coord_info * active_coord; extern cell_info * active_cell; extern box_info * active_box; extern image * active_image; extern glwin * active_glwin; extern project * active_project; extern project * opengl_project; extern element_data periodic_table_info[]; extern project * get_project_by_id (int p); extern void opengl_project_changed (int id); extern gboolean in_md_shaders (project * this_proj, int id); extern void recreate_all_shaders (glwin * view); extern gboolean is_atom_win_active (glwin * view); // extern gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb); extern G_MODULE_EXPORT void on_calc_bonds_released (GtkWidget * widg, gpointer data); extern void update_rings_menus (glwin * view); extern void clean_rings_data (int rid, glwin * view); extern void clean_chains_data (glwin * view); extern void clean_volumes_data (glwin * view); extern void initcutoffs (chemical_data * chem, int species); extern void cutoffsend (); extern void update_entry_int (GtkEntry * entry, int intval); extern void update_entry_double (GtkEntry * entry, double doubleval); extern void update_entry_long_double (GtkEntry * entry, double doubleval); extern void update_entry_text (GtkEntry * entry, gchar * text); extern double * xsk; extern gboolean * allocbool (int val); extern gboolean ** allocdbool (int xal, int yal); extern gboolean *** alloctbool (int xal, int yal, int zal); extern int * allocint (int val); extern int ** allocdint (int xal, int yal); extern int *** alloctint (int xal, int yal, int zal); extern int **** allocqint (int wal, int xal, int yal, int zal); extern float * allocfloat (int val); extern float ** allocdfloat (int xal, int yal); extern float *** alloctfloat (int xal, int yal, int zal); extern double * allocdouble (int val); extern double ** allocddouble (int xal, int yal); extern double *** alloctdouble (int xal, int yal, int zal); extern double **** allocqdouble (int wal, int xal, int yal, int zal); extern GLuint * allocgluint (int val); extern GLuint ** allocdgluint (int xal, int yal); extern GLfloat ** allocdGLfloat (int xal, int yal); extern gchar ** duplicate_strings (int num, gchar ** old_val); extern int * duplicate_int (int num, int * old_val); extern gboolean * duplicate_bool (int num, gboolean * old_val); extern float * duplicate_float (int num, float * old_val); extern double * duplicate_double (int num, double * old_val); extern ColRGBA * duplicate_color (int num, ColRGBA * col); extern void combo_set_markup (GtkWidget * combo); extern void combo_set_active (GtkWidget * combo, int pos); extern int combo_get_active (GtkWidget * combo); extern void combo_text_append (GtkWidget * combo, gchar * text); extern void combo_text_prepend (GtkWidget * combo, gchar * text); extern GtkWidget * create_combo (); extern GtkTextBuffer * add_buffer (GCallback handler, gpointer data, gchar * text); extern GtkWidget * create_text_view (int dimx, int dimy, int edit, int mono, GCallback handler, gpointer data, gchar * text); extern GdkPixbuf * convert_to_pixbuf (cairo_surface_t * surf); extern void text_view_set_monospace (GtkWidget * view); extern void gtk_label_align (GtkWidget * lab, float ax, float ay); extern gchar * prepare_for_title (gchar * init); extern void show_the_widgets (GtkWidget * widg); extern void hide_the_widgets (GtkWidget * widg); extern gboolean is_the_widget_visible (GtkWidget * widg); extern void widget_set_sensitive (GtkWidget * widg, gboolean sensitive); extern GtkWidget * new_gtk_window (); extern GtkWidget * dialogmodal (gchar * str, GtkWindow * parent); extern GtkWidget * message_dialogmodal (gchar * message, gchar * title, GtkMessageType mtype, GtkButtonsType buttons, GtkWidget * parent); extern GtkWidget * dialog_cancel_apply (gchar * title, GtkWidget * parent, gboolean resiz); extern void run_this_gtk_dialog (GtkWidget * dial, GCallback handler, gpointer data); extern void resize_this_window (GtkWidget * window, int x, int y); extern GtkWidget * create_hscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data); extern GtkWidget * create_vscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data); extern void append_comments (GtkWidget * vbox, gchar * symbol, gchar * legend); extern void add_container_child (int type, GtkWidget * widg, GtkWidget * child); extern void add_box_child_end (GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding); extern void add_box_child_start (int orientation, GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding); extern GtkWidget * create_vbox (int spacing); extern GtkWidget * create_hbox (int spacing); extern GtkWidget * dialog_get_content_area (GtkWidget * widg); extern void layout_add_widget (GtkWidget * layout, GtkWidget * child, int x_pos, int y_pos); extern GtkWidget * add_vbox_to_layout (GtkWidget * layout, int size_x, int size_y); extern GtkWidget * create_layout (int x, int y); extern void add_global_option (GtkWidget * vbox, tint * oid); #ifdef GTK4 extern void run_this_gtk_native_dialog (GtkNativeDialog * dial, GCallback handler, gpointer data); extern G_MODULE_EXPORT void select_unselect_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void select_unselect_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void select_unselect_coord (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void label_unlabel_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void label_unlabel_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void label_unlabel_coord (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void show_hide_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void show_hide_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void show_hide_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void show_hide_coord (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void show_hide_poly (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void show_hide_labels (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void remove_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void replace_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void edit_in_new_project (GSimpleAction * action, GVariant * parameter, gpointer data); extern void add_widget_gesture_and_key_action (GtkWidget * widget, gchar * cp_name, GCallback cp_handler, gpointer cp_data, gchar * cr_name, GCallback cr_handler, gpointer cr_data, gchar * kp_name, GCallback kp_handler, gpointer kp_data, gchar * mo_name, GCallback mo_handler, gpointer mo_data, gchar * sc_name, GCallback sc_handler, gpointer sc_data); extern G_MODULE_EXPORT gboolean destroy_this_window (GtkWindow * win, gpointer data); extern G_MODULE_EXPORT gboolean hide_this_window (GtkWindow * win, gpointer data); extern GtkFileChooserNative * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name); extern void pop_menu_at_pointer (GtkWidget * pop, double x, double y); GListModel * file_chooser_get_file_names (GtkFileChooser * chooser); extern void update_menu_bar (glwin * view); #else extern void update_chains_menus (glwin * view); extern G_MODULE_EXPORT void select_unselect_this_atom (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void select_unselect_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void select_unselect_coord (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void label_unlabel_this_atom (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void label_unlabel_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void label_unlabel_coord (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void show_hide_this_atom (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void show_hide_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void show_hide_the_coord (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void show_hide_coord (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void show_hide_poly (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void show_hide_labels (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void remove_the_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void replace_the_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void edit_in_new_project (GtkWidget * widg, gpointer data); extern GtkWidget * create_menu_item (gboolean add_mnemo, gchar * action); extern GtkWidget * create_menu_item_from_widget (GtkWidget * widg, gboolean check, gboolean radio, gboolean status); extern GtkWidget * menu_item_new_with_submenu (gchar * name, gboolean active, GtkWidget * sub_menu); extern void add_menu_separator (GtkWidget * menu); extern G_MODULE_EXPORT gboolean destroy_this_window (GtkWidget * win, GdkEvent * event, gpointer data); extern G_MODULE_EXPORT gboolean hide_this_window (GtkWidget * win, GdkEvent * event, gpointer data); extern GtkWidget * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name); extern void pop_menu_at_pointer (GtkWidget * widg, GdkEvent * event); GSList * file_chooser_get_file_names (GtkFileChooser * chooser); #endif extern const gchar * entry_get_text (GtkEntry * entry); extern GtkWidget * create_entry (GCallback handler, int dim, int cdim, gboolean key_release, gpointer data); extern GtkWidget * stock_image (const gchar * stock_id); extern void set_image_from_icon_name (GtkWidget * widg, gchar * icon); extern GtkWidget * create_image_from_data (int format, gpointer item_image); extern GtkWidget * gtk3_menu_item (GtkWidget * menu, gchar * name, int icon_format, gpointer item_icon, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod, gboolean check, gboolean radio, gboolean status); extern GtkWidget * add_advanced_item (GtkWidget * menu, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod); extern GtkWidget * markup_label (gchar * text, int dimx, int dimy, float ax, float ay); extern GtkWidget * color_button (ColRGBA col, gboolean alpha, int dimx, int dimy, GCallback handler, gpointer data); extern GtkWidget * font_button (gchar * font, int dimx, int dimy, GCallback handler, gpointer data); extern GtkWidget * spin_button (GCallback handler, double value, double start, double end, double step, int digits, int dim, gpointer data); extern int button_get_status (GtkWidget * button); extern void button_set_status (GtkWidget * button, int status); extern GtkWidget * check_button (gchar * text, int dimx, int dimy, gboolean state, GCallback handler, gpointer data); extern GtkWidget * radio_button (gchar * text, int dimx, int dimy, gboolean state, GCallback handler, gpointer data); extern GtkWidget * create_button (gchar * text, int image_format, gchar * image, int dimx, int dimy, int relief, GCallback handler, gpointer data); extern ColRGBA gdkrgba_to_rgba (GdkRGBA colgdk); extern GdkRGBA colrgba_togtkrgba (ColRGBA col); extern ColRGBA get_button_color (GtkColorChooser * colob); extern ColRGBA get_window_color (GtkWidget * color_win); extern void set_color_chooser_color (GtkWidget * color_win, ColRGBA col); extern void set_renderer_color (int tocol, GtkCellRenderer * renderer, ColRGBA col); extern void set_renderer_markup (GtkTreeModel * mod, GtkTreeIter * iter, GtkCellRenderer * renderer, int col); extern void button_set_image (GtkButton * but, gchar * text, int format, gpointer image); extern GtkWidget * abox (GtkWidget * box, char * lab, int vspace); extern GtkWidget * bbox (GtkWidget * box, char * lab); extern GtkWidget * cbox (GtkWidget * box, char * lab); extern GtkWidget * fbox (GtkWidget * box, char * lab); extern GtkWidget * create_scroll (GtkWidget * box, int dimx, int dimy, int shadow); extern GtkWidget * create_expander (gchar * name, gchar * file_img); extern GtkWidget * create_win (gchar * str, GtkWidget * parent, gboolean modal, gboolean resiz); extern void widget_add_action (GSimpleActionGroup * action_group, const gchar * act, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, const gchar * stat); extern void append_menu_item (GMenu * menu, const gchar * label, const gchar * action, const gchar * accel, const gchar * custom, int format, const gchar * icon, gboolean check, gboolean status, gboolean radio, const gchar * rstatus); extern void append_submenu (GMenu * menu, const gchar * label, GMenu * submenu); extern GtkWidget * destroy_this_widget (GtkWidget * widg); extern void destroy_this_dialog (GtkDialog * dialog); extern void destroy_this_native_dialog (GtkNativeDialog * dialog); extern G_MODULE_EXPORT void run_destroy_dialog (GtkDialog * dialog, gint response_id, gpointer data); extern void add_gtk_close_event (GtkWidget * widg, GCallback handler, gpointer data); extern gchar * file_chooser_get_file_name (GtkFileChooser * chooser); extern gchar * file_chooser_get_current_folder (GtkFileChooser * chooser); extern gboolean file_chooser_set_file_name (GtkFileChooser * chooser, gchar * filename); extern void file_chooser_set_current_folder (GtkFileChooser * chooser); extern GtkWidget * get_top_level (GtkWidget * widg); extern void provide_gtk_css (gchar * css); extern double string_to_double (gpointer string); extern double get_calc_time (struct timespec start, struct timespec stop); extern gchar * calculation_time (gboolean modelv, double ctime); extern int get_widget_width (GtkWidget * widg); extern int get_widget_height (GtkWidget * widg); extern int signal_error (const char * file, const char * func, int error_line, int error_id); extern void update_error_trace (const char * file, const char * func, int trace_line); typedef struct { GCallback handler; gpointer data; } focus_data; #endif // GLOBAL_H_ atomes_1.3.1/src/global.c0000664000175000017500000003735315212624223014713 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file global.c * @short Global variables declaration \n Global convenience function implementations * @author Sébastien Le Roux */ /* * This file: 'global.c' * * Contains: * - global variables declarations - global convenience functions implementation * * List of functions: int * allocint (int val); int ** allocdint (int xal, int yal); int *** alloctint (int xal, int yal, int zal); int **** allocqint (int wal, int xal, int yal, int zal); int * duplicate_int (int num, int * old_val); float * allocfloat (int val); float ** allocdfloat (int xal, int yal); float *** alloctfloat (int xal, int yal, int zal); float * duplicate_float (int num, float * old_val); double * allocdouble (int val); double ** allocddouble (int xal, int yal); double *** alloctdouble (int xal, int yal, int zal); double **** allocqdouble (int wal, int xal, int yal, int zal); double * duplicate_double (int num, double * old_val); double string_to_double (gpointer string); double get_calc_time (struct timespec start, struct timespec stop); gboolean * allocbool (int val); gboolean ** allocdbool (int xal, int yal); gboolean *** alloctbool (int xal, int yal, int zal); gboolean * duplicate_bool (int num, gboolean * old_val); gchar ** duplicate_strings (int num, gchar ** old_val); gchar * calculation_time (gboolean modelv, double ctime); */ #include #include #ifdef OSX #include #endif #include #include #include #include #include #include #include #include #define i18n(String) String #define BILLION 1000000000L; #ifdef G_OS_WIN32 gchar * PACKAGE_PREFIX = NULL; gchar * PACKAGE_LIBEXEC = NULL; gchar * PACKAGE_LOCALE = NULL; #endif gchar * PACKAGE_LIB_DIR = NULL; gchar * PACKAGE_IMP = NULL; gchar * PACKAGE_CON = NULL; gchar * PACKAGE_IMG = NULL; gchar * PACKAGE_PDF = NULL; gchar * PACKAGE_SVG = NULL; gchar * PACKAGE_EPS = NULL; gchar * PACKAGE_PNG = NULL; gchar * PACKAGE_JPG = NULL; gchar * PACKAGE_BMP = NULL; gchar * PACKAGE_TIFF = NULL; gchar * PACKAGE_VOID = NULL; gchar * PACKAGE_TD = NULL; gchar * PACKAGE_MOL = NULL; gchar * PACKAGE_OGL = NULL; gchar * PACKAGE_OGLM = NULL; gchar * PACKAGE_OGLC = NULL; gchar * PACKAGE_PRO = NULL; gchar * PACKAGE_SET = NULL; gchar * PACKAGE_LOGO = NULL; gchar * PACKAGE_LAGPL = NULL; gchar * PACKAGE_LABOUT = NULL; gchar * PACKAGE_DOTA = NULL; gchar * PACKAGE_DOTB = NULL; gchar * PACKAGE_DOTC = NULL; gchar * PACKAGE_DOTD = NULL; gchar * PACKAGE_DOTE = NULL; gchar * PACKAGE_DOTF = NULL; gchar * PACKAGE_DOTG = NULL; gchar * PACKAGE_DOTH = NULL; gchar * PACKAGE_DFBD = NULL; gchar * PACKAGE_DFAN = NULL; gchar * PACKAGE_DFDI = NULL; gchar * PACKAGE_DFTD = NULL; gchar * PACKAGE_DFIN = NULL; gchar * PACKAGE_SGCP = NULL; gchar * PACKAGE_SGCI = NULL; gchar * PACKAGE_SGCF = NULL; gchar * PACKAGE_SGHP = NULL; gchar * PACKAGE_SGTR = NULL; gchar * PACKAGE_SGTI = NULL; gchar * PACKAGE_SGTP = NULL; gchar * PACKAGE_SGOP = NULL; gchar * PACKAGE_SGOI = NULL; gchar * PACKAGE_SGOC = NULL; gchar * PACKAGE_SGOF = NULL; gchar * PACKAGE_SGMP = NULL; gchar * PACKAGE_SGMI = NULL; gchar * PACKAGE_SGTC = NULL; gchar * ATOMES_CONFIG_DIR = NULL; gchar * ATOMES_CONFIG = NULL; gchar * ATOMES_URL = "https://atomes.ipcms.fr"; gchar * mode_name[2] = {i18n("Analysis"), i18n("Edition")}; gchar * bravais_img[14]; gchar * ifield[8]; gchar * projfile = NULL; char * ifbug = i18n("\nIf this is a bug please report it to:"); char * rings_type[5] = {i18n("All (No Rule)"), i18n("King's"), i18n("Guttman's"), i18n("Primitive"), i18n("Strong")}; char * untime[5] = {"fs", "ps", "ns", "µs", "ms"}; gchar * workspacefile = NULL; int nprojects = 0; int activep = 0; int activev = 0; int activef = 0; int inactep = 0; int activew = 0; int statusval; int atomes_visual = 1; // OpenGL visual: 1 = GTK default, 0 = X11 default (GTK3 + GtkGLArea only), Else = no OpenGL // Loop Id for the dialogs int dialog_id = -1; int reading_step_limit; int bonds_update = 0; int frag_update = 0; int mol_update = 0; int tmp_pixels[2]; int * pasted_todo = NULL; double * xsk = NULL; GMainLoop * Event_loop[5]; gboolean in_movie_encoding = FALSE; gboolean newspace = TRUE; gboolean reading_input; gboolean tmp_adv_bonding[2]; gboolean column_label = FALSE; gboolean check_label = TRUE; gboolean object_motion = FALSE; gboolean selected_status = FALSE; gboolean silent_input = FALSE; gboolean cif_use_symmetry_positions = FALSE; gboolean atomes_from_libreoffice = FALSE; gboolean atomes_render_image = FALSE; struct timespec start_time; struct timespec stop_time; double opac = 0.75; double pi = 3.141592653589793238462643383279502884197; GSimpleAction * edition_actions[3]; GtkApplication * AtomesApp = NULL; GtkWidget * MainWindow = NULL; GtkWidget * MainView = NULL; GtkWidget * MainFrame[2]; GtkWidget * pop = NULL; GtkWidget * curvetoolbox = NULL; GtkWidget * progressbar = NULL; GtkWidget * MainScrol[2]; GtkWidget * atomes_logo = NULL; GtkWidget * atomes_shortcuts = NULL; GtkWidget * calc_dialog = NULL; GtkWidget * register_button = NULL; GtkTextTag * tag = NULL; GtkStatusbar * statusbar; GdkPixbuf * THETD = NULL; GdkPixbuf * THEMO = NULL; GdkPixbuf * THEBD = NULL; GdkPixbuf * SETTING = NULL; GdkPixbuf * SETTINGS = NULL; GdkPixbuf * OGL = NULL; GdkPixbuf * OGLM = NULL; GdkPixbuf * OGLC = NULL; GdkPixbuf * RUN = NULL; // Basic utility functions /*! \fn gboolean * allocbool (int val) \brief allocate a gboolean * pointer \param val size of the pointer to allocate */ gboolean * allocbool (int val) { gboolean * var = NULL; var = g_malloc0(val*sizeof*var); return var; } /*! \fn gboolean ** allocdbool (int xal, int yal) \brief allocate a gboolean ** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate */ gboolean ** allocdbool (int xal, int yal) { gboolean ** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocbool(yal); } return var; } /*! \fn gboolean *** alloctbool (int xal, int yal, int zal) \brief allocate a gboolean *** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate \param zal 3rd dimension size of the pointer to allocate */ gboolean *** alloctbool (int xal, int yal, int zal) { gboolean *** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocdbool(yal, zal); } return var; } /*! \fn int * allocint (int val) \brief allocate an int * pointer \param val size of the pointer to allocate */ int * allocint (int val) { int * var = NULL; var = g_malloc0(val*sizeof*var); return var; } /*! \fn int ** allocdint (int xal, int yal) \brief allocate an int ** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate */ int ** allocdint (int xal, int yal) { int ** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocint (yal); } return var; } /*! \fn int *** alloctint (int xal, int yal, int zal) \brief allocate an int *** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate \param zal 3rd dimension size of the pointer to allocate */ int *** alloctint (int xal, int yal, int zal) { int *** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocdint (yal, zal); } return var; } /*! \fn int **** allocqint (int wal, int xal, int yal, int zal) \brief allocate an int **** pointer \param wal 1st dimension size of the pointer to allocate \param xal 2nd dimension size of the pointer to allocate \param yal 3rd dimension size of the pointer to allocate \param zal 4th dimension size of the pointer to allocate */ int **** allocqint (int wal, int xal, int yal, int zal) { int **** var = NULL; int i; var = g_malloc0(wal*sizeof*var); for ( i = 0 ; i < wal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = alloctint (xal, yal, zal); } return var; } /*! \fn float * allocfloat (int val) \brief allocate a float * pointer \param val size of the pointer to allocate */ float * allocfloat (int val) { float * var = NULL; var = g_malloc0(val*sizeof*var); return var; } /*! \fn float ** allocdfloat (int xal, int yal) \brief allocate a float ** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate */ float ** allocdfloat (int xal, int yal) { float ** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocfloat (yal); } return var; } /*! \fn float *** alloctfloat (int xal, int yal, int zal) \brief allocate a float *** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate \param zal 3rd dimension size of the pointer to allocate */ float *** alloctfloat (int xal, int yal, int zal) { float *** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocdfloat (yal, zal); } return var; } /*! \fn double * allocdouble (int val) \brief allocate a double * pointer \param val size of the pointer to allocate */ double * allocdouble (int val) { double * var = NULL; var = g_malloc0(val*sizeof*var); return var; } /*! \fn double ** allocddouble (int xal, int yal) \brief allocate a double ** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate */ double ** allocddouble (int xal, int yal) { double ** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocdouble (yal); } return var; } /*! \fn double *** alloctdouble (int xal, int yal, int zal) \brief allocate a double *** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate \param zal 3rd dimension size of the pointer to allocate */ double *** alloctdouble (int xal, int yal, int zal) { double *** var = NULL; int i; var = g_malloc0(xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocddouble (yal, zal); } return var; } /*! \fn double **** allocqdouble (int wal, int xal, int yal, int zal) \brief allocate a double **** pointer \param wal 1st dimension size of the pointer to allocate \param xal 2nd dimension size of the pointer to allocate \param yal 3rd dimension size of the pointer to allocate \param zal 4th dimension size of the pointer to allocate */ double **** allocqdouble (int wal, int xal, int yal, int zal) { double **** var = NULL; int i; var = g_malloc0(wal*sizeof*var); for ( i = 0 ; i < wal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = alloctdouble (xal, yal, zal); } return var; } /*! \fn gchar ** duplicate_strings (int num, gchar ** old_val) \brief copy a list of strings \param num number of elements in the list \param old_val the list to copy */ gchar ** duplicate_strings (int num, gchar ** old_val) { gchar ** new_val = g_malloc0(num*sizeof*new_val); int i; for (i=0; i Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file workspace.h * @short Function declarations for workspace managment * @author Sébastien Le Roux */ /* * This header file: 'workspace.h' * * Contains: - Function declarations for workspace managment */ #ifndef WORKSPACE_H_ #define WORKSPACE_H_ void correct_this_window_title (GtkWidget * win, gchar * str); G_MODULE_EXPORT void activate_project (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void change_project_name (GtkWidget * wid, gpointer edata); void add_project_to_workspace (); void remove_project_from_workspace (int id); #endif atomes_1.3.1/src/workspace/workinfo.c0000664000175000017500000001177015212624223017302 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file workinfo.c * @short Functions to display project information in GtkTextBuffer * @author Sébastien Le Roux */ /* * This file: 'workinfo.c' * * Contains: * - Functions to display project information in GtkTextBuffer * * List of functions: void workinfo (project * this_proj, int i); */ #include "global.h" #include "interface.h" #include "project.h" extern void update_rdf_view (project * this_proj, int rdf); extern void update_sq_view (project * this_proj, int sqk); extern void update_angle_view (project * this_proj); extern void update_rings_view (project * this_proj, int c); extern void update_chains_view (project * this_proj); extern void update_spherical_view (project * this_proj); extern void update_msd_view (project * this_proj); extern void update_skt_view (project * this_proj); extern void model_info (project * this_proj, GtkTextBuffer * buf); extern void opengl_info (project * this_proj, GtkTextBuffer * buf); /*! \fn void workinfo (project * this_proj, int i) \brief display information about a workspace menu item for a project \param this_proj the target project \param i the properties to display from the menu */ void workinfo (project * this_proj, int i) { gchar * str; int j; project * tmp_proj; switch (i) { case -4: this_proj -> text_buffer[0] = add_buffer (NULL, NULL, NULL); print_info (_("\n\nWorkspace information\n\n\n"), "heading", this_proj -> text_buffer[0]); if (g_strcmp0(workspacefile, "(null)") == 0) workspacefile = NULL; if (workspacefile != NULL) { print_info (_("\tWorkspace file: "), "italic", this_proj -> text_buffer[0]); print_info (workspacefile, NULL, this_proj -> text_buffer[0]); } str = g_strdup_printf ("\n\n\t%d", nprojects); print_info (str, "bold_red", this_proj -> text_buffer[0]); g_free (str); print_info (_(" project(s) in workspace: "), NULL, this_proj -> text_buffer[0]); tmp_proj = workzone.first; for (j=0; j text_buffer[0]); print_info (prepare_for_title(tmp_proj -> name), "italic", this_proj -> text_buffer[0]); if (tmp_proj -> next != NULL) tmp_proj = tmp_proj -> next; } print_info (_("\n\n\tActive project: "), NULL, this_proj -> text_buffer[0]); print_info (prepare_for_title(active_project -> name), "bold_green", this_proj -> text_buffer[0]); break; case -3: this_proj -> text_buffer[1] = add_buffer (NULL, NULL, NULL); model_info (this_proj, this_proj -> text_buffer[1]); break; case -2: this_proj -> text_buffer[2] = add_buffer (NULL, NULL, NULL); opengl_info (this_proj, this_proj -> text_buffer[2]); break; default: if (i > -1) { if (this_proj -> analysis[i] -> calc_buffer == NULL && this_proj -> analysis[i] -> calc_ok) { switch (i) { case GDR: update_rdf_view (this_proj, GDR); break; case SQD: update_sq_view (this_proj, SQD); break; case SKD: update_sq_view (this_proj, SKD); break; case GDK: update_rdf_view (this_proj, GDK); break; case ANG: update_angle_view (this_proj); break; case RIN: for (j=0; j<5; j++) if (this_proj -> rsparam[j][5]) update_rings_view (this_proj, j); break; case CHA: update_chains_view (this_proj); break; case SPH: update_spherical_view (this_proj); break; case MSD: update_msd_view (this_proj); break; case SKT: update_skt_view (this_proj); break; } } } break; } if (i < 0) { j = i + 4; if (this_proj -> text_buffer[j] == NULL) this_proj -> text_buffer[j] = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> text_buffer[j]); } else { if (this_proj -> analysis[i] -> calc_buffer == NULL) this_proj -> analysis[i] -> calc_buffer = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> analysis[i] -> calc_buffer); } } atomes_1.3.1/src/workspace/modelinfo.c0000664000175000017500000003304615212624223017420 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file modelinfo.c * @short Functions to display model information in GtkTextBuffer * @author Sébastien Le Roux */ /* * This file: 'modelinfo.c' * * Contains: * - Functions to display model information in GtkTextBuffer * * List of functions: void print_spg_name (gchar * str , GtkTextBuffer * buffer); void print_spg_setting (gchar * init, GtkTextBuffer * buffer); void model_info (project * this_proj, GtkTextBuffer * buffer); void print_this_ogl_stuff (gchar * text, GLenum name, GtkTextBuffer * buf); void opengl_info (project * this_proj, GtkTextBuffer * buf); */ #include "global.h" #include "interface.h" extern gchar * groups[230] ; extern char * vect_comp[3]; extern gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); extern gchar * get_num_string (gchar * str); /*! \fn void print_spg_name (gchar * str , GtkTextBuffer * buffer) \brief print space group name in a GtkTextBuffer \param str the space group string \param buffer the GtkTextBuffer */ void print_spg_name (gchar * str , GtkTextBuffer * buffer) { str = substitute_string (str, "", "x"); if (strstr(str, "wsubx")) { gchar * sta = g_strdup_printf ("%s", str); sta = strtok (sta, "wsubx"); print_info (sta, "bold", buffer); while (sta) { sta = strtok (NULL, "ysubx"); if (sta) { print_info (sta, "sub_bold", buffer); sta = strtok (NULL, "wsubx"); if (sta) print_info (sta, "bold", buffer); } } } else { print_info (str, "bold", buffer); } g_free (str); } /*! \fn void print_spg_setting (gchar * init, GtkTextBuffer * buffer) \brief print space group name in a GtkTextBuffer \param init the space group setting \param buffer the GtkTextBuffer */ void print_spg_setting (gchar * init, GtkTextBuffer * buffer) { gchar * str = g_strdup_printf ("%s", init); str = substitute_string (str, "_", " "); str = get_num_string (str); str = substitute_string (str, " ", NULL); print_spg_name (str, buffer); } /*! \fn void model_info (project * this_proj, GtkTextBuffer * buffer) \brief display model information in GtkTexBuffer \param this_proj the target project \param buffer the GtkTextBuffer */ void model_info (project * this_proj, GtkTextBuffer * buffer) { int i, j, k; double v; gchar * str; if (g_strcmp0(this_proj -> projfile, "(null)") == 0) this_proj -> projfile = NULL; if (this_proj -> projfile != NULL) { print_info (_("\n\tProject file: "), "italic", buffer); print_info (this_proj -> projfile, NULL, buffer); } if (this_proj -> tfile > -1 && this_proj -> coordfile != NULL) { print_info (_("\n\tCoordinates file: "), "italic", buffer); print_info (this_proj -> coordfile, NULL, buffer); print_info (_("\n\tFile type: "), "italic", buffer); print_info (coord_files[this_proj -> tfile], NULL, buffer); this_proj -> tfile = 0; } print_info (_("\n\nModel properties\n\n\n"), "heading", buffer); if (this_proj -> steps > 1) { print_info (_("\tNumber of MD steps = "), "italic", buffer); str = g_strdup_printf ("%d\n", this_proj -> steps); print_info (str, "bold", buffer); g_free (str); } print_info (_("\tNumber of atoms = "), "italic", buffer); str = g_strdup_printf ("%d\n", this_proj -> natomes); print_info (str, "bold", buffer); g_free (str); print_info (_("\tNumber of species = "), "italic", buffer); str = g_strdup_printf ("%d\n\n", this_proj -> nspec); print_info (str, "bold", buffer); g_free (str); if (this_proj -> cell.volume > 0.0) { gchar * latv[2][3]={{"a", "b", "c"}, {"α", "β", "γ"}}; if (this_proj -> cell.npt) { print_info (_("\tAv. lattice parameters:\n\n"), NULL, buffer); } else { print_info (_("\tLattice parameters:\n\n"), NULL, buffer); } for (i=0; i<2; i++) { print_info ("\t", NULL, buffer); for (j=0; j<3; j++) { str = g_strdup_printf ("\t %s=", latv[i][j]); print_info (str, "bold_italic", buffer); g_free (str); if (this_proj -> cell.npt) { v = 0.0; for (k=0; k steps; k++) v += this_proj -> cell.box[k].param[i][j]; v /= this_proj -> steps; } else { v = this_proj -> cell.box[0].param[i][j]; } str = g_strdup_printf ("%10.5lf", v); print_info (str, "bold_green", buffer); g_free (str); } print_info ("\n", NULL, buffer); } print_info ("\n", NULL, buffer); if (this_proj -> cell.npt) { print_info (_("\tAv. lattice vectors:\n\n\t\t"), NULL, buffer); } else { print_info (_("\tLattice vectors:\n\n\t\t"), NULL, buffer); } for (i=0; i<3; i++) { str = g_strdup_printf (" %s ", vect_comp[i]); print_info (str, NULL, buffer); g_free (str); } print_info ("\n", NULL, buffer); for (i=0; i<3; i++) { str = g_strdup_printf ("\t\t%s", latv[0][i]); print_info (str, NULL, buffer); g_free (str); for (j=0; j<3; j++) { if (this_proj -> cell.npt) { v = 0.0; for (k=0; k steps; k++) v += this_proj -> cell.box[k].vect[i][j]; v /= this_proj -> steps; } else { v = this_proj -> cell.box[0].vect[i][j]; } str = g_strdup_printf ("%10.5lf", v); print_info (str, "bold_orange", buffer); g_free (str); } print_info ("\n", NULL, buffer); } if (this_proj -> cell.sp_group) { print_info ("\n", NULL, buffer); print_info (_("\tCrystal information:\n\n"), "italic", buffer); str = g_strdup_printf ("%d", this_proj -> cell.sp_group -> id); print_info (_("\t\tSpace group N°: "),"italic", buffer); print_info (str, "bold", buffer); g_free (str); print_info ("\n", NULL, buffer); print_info (_("\t\tSpace group: "),"italic", buffer); print_spg_name (g_strdup_printf ("%s", groups[this_proj -> cell.sp_group -> id-1]), buffer); print_info ("\n", NULL, buffer); print_info (_("\t\tSpace group setting: "),"italic", buffer); print_spg_setting (this_proj -> cell.sp_group -> setting, buffer); print_info ("\n", NULL, buffer); print_info ("\t\tHermman-Mauguin: ","italic", buffer); print_spg_setting (this_proj -> cell.sp_group -> hms, buffer); print_info ("\n", NULL, buffer); print_info (_("\t\tBravais lattice: "),"italic", buffer); print_info (this_proj -> cell.sp_group -> bravais, "bold", buffer); print_info ("\n", NULL, buffer); } print_info ("\n", NULL, buffer); if (this_proj -> cell.npt) { print_info (_("\tAv. volume = "), "italic", buffer); } else { print_info (_("\tVolume = "), "italic", buffer); } str = g_strdup_printf ("%14.6lf", this_proj -> cell.volume); print_info (str, "bold", buffer); g_free (str); print_info (" Å", NULL, buffer); print_info ("3", "sup", buffer); if (this_proj -> cell.npt) { print_info (_("\n\tAv. density = "), "italic", buffer); } else { print_info (_("\n\tDensity = "), "italic", buffer); } str = g_strdup_printf ("%14.6lf", this_proj -> cell.density); print_info (str, "bold", buffer); g_free (str); print_info (" g / cm", NULL, buffer); print_info ("3", "sup", buffer); if (this_proj -> cell.npt) { print_info (_("\n\tAv. number density = "), "italic", buffer); } else { print_info (_("\n\tNumber density = "), "italic", buffer); } str = g_strdup_printf ("%14.6lf", this_proj -> natomes / this_proj -> cell.volume); print_info (str, "bold", buffer); g_free (str); print_info (_(" atoms / Å"), NULL, buffer); print_info ("3", "sup", buffer); } print_info (_("\n\n\tEmpirical formula:\t"), "italic", buffer); for (i=0; i nspec; i++) { print_info (this_proj -> chemistry -> label[i], "bold", buffer); if (this_proj -> chemistry -> formula[i] != 1) { str = g_strdup_printf ("%d", this_proj -> chemistry -> formula[i]); print_info (str, "sub", buffer); g_free (str); } print_info (" ", NULL, buffer); } if (this_proj -> cell.volume != 0.0) { print_info (_("\n\n\tAtom\t Number Fraction\tNumber density (atoms / Å"), "italic", buffer); print_info ("3", "sup", buffer); print_info (")\n", "italic", buffer); } else { print_info (_("\n\n\tAtom\t Number Fraction"), "italic", buffer); } for (i=0; i nspec; i++) { str = g_strdup_printf ("\n\t%s\t%7d\t%11.6lf", this_proj -> chemistry -> label[i], this_proj -> chemistry -> nsps[i], (double)this_proj -> chemistry -> nsps[i]/this_proj -> natomes); print_info (str, textcolor(i), buffer); g_free (str); if (this_proj -> cell.volume != 0.0) { str = g_strdup_printf ("\t%11.6lf", this_proj -> chemistry -> nsps[i]/this_proj -> cell.volume); print_info (str, textcolor(i), buffer); g_free (str); } } } /*! \fn void print_this_ogl_stuff (gchar * text, GLenum name, GtkTextBuffer * buf) \brief print OpenGL stuff in a GtkTextBuffer \param text Message \param name OpenGL id to retreive \param buf the GtkTextBuffer */ void print_this_ogl_stuff (gchar * text, GLenum name, GtkTextBuffer * buf) { int i; gchar * str; print_info (text, NULL, buf); glGetIntegerv (name, & i); str = g_strdup_printf ("%d\n", i); print_info (str, "bold_blue", buf); g_free (str); } /*! \fn void opengl_info (project * this_proj, GtkTextBuffer * buf) \brief display OpenGL information in a GtkTextBuffer \param this_proj the target project \param buf the GtkTextBuffer */ void opengl_info (project * this_proj, GtkTextBuffer * buf) { int i, j, k, l; i = j = k = l = -1; gtk_gl_area_make_current ((GtkGLArea *)this_proj -> modelgl -> plot); gchar * str; print_info ("\n\nOpenGL driver information\n\n", "heading", buf); print_info ("\tOpenGL Version \t\t\t: ", NULL, buf); str = g_strdup_printf ("%s\n", (const char*)glGetString(GL_VERSION)); print_info (str, "bold_blue", buf); g_free (str); print_info ("\tOpenGL Driver\t\t\t\t: ", NULL, buf); str = g_strdup_printf ("%s\n", (const char*)glGetString(GL_VENDOR)); print_info (str, "bold_blue", buf); g_free (str); print_info ("\tOpenGL Hardware \t\t\t: ", NULL, buf); str = g_strdup_printf ("%s\n", (const char*)glGetString(GL_RENDERER)); print_info (str, "bold_blue", buf); g_free (str); print_info ("\tOpenGL Shading Version \t\t\t: ", NULL, buf); str = g_strdup_printf ("%s\n\n", (const char*)glGetString (GL_SHADING_LANGUAGE_VERSION)); print_info (str, "bold_blue", buf); g_free (str); print_info ("\tOpenGL Window information:\n\n", NULL, buf); print_info ("\t\tColor Bits (R,G,B,A)\t\t: ", NULL, buf); glGetIntegerv (GL_RED_BITS, & i); glGetIntegerv (GL_GREEN_BITS, & j); glGetIntegerv (GL_BLUE_BITS, & k); glGetIntegerv (GL_ALPHA_BITS, & l); str = g_strdup_printf ("%d, %d, %d, %d\n", i, j, k, l); print_info (str, "bold_blue", buf); g_free (str); print_this_ogl_stuff ("\t\tDepth Bits \t\t\t: ", GL_DEPTH_BITS, buf); print_this_ogl_stuff ("\t\tStencil Bits \t\t\t: ", GL_STENCIL_BITS, buf); print_this_ogl_stuff ("\t\tMax. Lights Allowed \t\t: ", GL_MAX_LIGHTS, buf); print_this_ogl_stuff ("\t\tMax. Texture Size \t\t: ", GL_MAX_TEXTURE_SIZE, buf); print_this_ogl_stuff ("\t\tMax. Clipping Planes \t\t: ", GL_MAX_CLIP_PLANES, buf); print_this_ogl_stuff ("\t\tMax. Modelview Matrix Stacks \t: ", GL_MAX_MODELVIEW_STACK_DEPTH, buf); print_this_ogl_stuff ("\t\tMax. Projection Matrix Stacks \t: ", GL_MAX_PROJECTION_STACK_DEPTH, buf); print_this_ogl_stuff ("\t\tMax. Attribute Stacks \t\t: ", GL_MAX_ATTRIB_STACK_DEPTH, buf); print_this_ogl_stuff ("\t\tMax. Texture Stacks \t\t: ", GL_MAX_TEXTURE_STACK_DEPTH, buf); print_info ("\n\tGeometry Shader information:\n\n", NULL, buf); print_this_ogl_stuff ("\t\tMax. output vertices \t\t: ", GL_MAX_GEOMETRY_OUTPUT_VERTICES, buf); print_this_ogl_stuff ("\t\tMax. output components \t\t: ", GL_MAX_GEOMETRY_OUTPUT_COMPONENTS, buf); print_this_ogl_stuff ("\t\tMax. total output components \t: ", GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS, buf); print_info ("\n\tTotal number of OpenGL Extensions\t: ", NULL, buf); glGetIntegerv (GL_NUM_EXTENSIONS, & i); str = g_strdup_printf ("%d\n", i); print_info (str, "bold_blue", buf); g_free (str); print_info ("\tExtensions list:\n", NULL, buf); for (j=0; j Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file workspace.c * @short Implementation of the workspace tree view \n Associated callbacks * @author Sébastien Le Roux */ /* * This file: 'workspace.c' * * Contains: * - Implementation of the workspace tree view - Associated callbacks * * List of functions: int find_calc_by_path (GtkTreeView * treeview, GtkTreePath * path); int find_proj_by_path (GtkTreePath * path); G_MODULE_EXPORT gboolean on_workspace_button_event (GtkWidget * widget, GdkEventButton * event, gpointer data); void add_project (GtkTreeStore * store, int i); void correct_this_window_title (GtkWidget * win, gchar * str); void workspace_menu (GtkWidget * tree, gpointer event, double x, double y); void create_workspace (); void add_project_to_workspace (); void remove_project_from_workspace (int id); static void fill_workspace (GtkTreeStore * store); G_MODULE_EXPORT void activate_project (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void workspace_ondc (GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * col, gpointer data); G_MODULE_EXPORT void change_project_name (GtkWidget * wid, gpointer edata); G_MODULE_EXPORT void workspace_popup (GtkGesture * gesture, int n_press, double x, double y, gpointer data); GtkWidget * create_workspace_tree (); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "glwindow.h" extern void workinfo (project * this_proj, int i); extern GtkWidget * work_menu (int p, int c); GdkPixbuf * pix = NULL; GtkWidget * img = NULL; GtkWidget * hbox = NULL; GtkWidget * vbox = NULL; GtkWidget * lab = NULL; GtkWidget * lap = NULL; GtkWidget * eap = NULL; gchar * labtmp = NULL; gchar * laptmp = NULL; GtkWidget * worktree = NULL; GtkTreeStore * workstore = NULL; GtkTreeIter worklevel; GtkTreeIter * piter = NULL; GtkTreeIter * witer = NULL; GtkTreePath ** prpath = NULL; GtkTreePath * wpath = NULL; GdkPixbuf * wpix = NULL; gchar * wchar = NULL; int projects_in_workspace = 0; char * work_menu_items[NITEMS] = {i18n("Workspace "), i18n("Settings "), //i18n("OpenGL - 3D "), i18n("Visualization "), //i18n("Calc. visualization "), i18n("Analysis ")}; /*! \fn void add_project (GtkTreeStore * store, int i) \brief add project to the GtkTreeStore of the workspace \param store the GtkTreeStore \param i the id of the project to add */ void add_project (GtkTreeStore * store, int i) { int j; gchar * tmp; GtkTreeIter steplevel; GtkTreeIter optslevel; gtk_tree_store_append (store, & piter[i], & worklevel); project * this_proj = get_project_by_id(i); if (i == activep) { tmp = g_strdup_printf ("%s", this_proj -> name); } else { tmp = g_strdup_printf ("%s", this_proj -> name); } gtk_tree_store_set (store, & piter[i], 0, THETD, 1, tmp, 2, -1, -1); prpath[i] = gtk_tree_model_get_path (GTK_TREE_MODEL(store), & piter[i]); g_free (tmp); gtk_tree_store_append (store, & steplevel, & piter[i]); gtk_tree_store_set (store, & steplevel, 0, SETTING, 1, _(work_menu_items[1]), 2, -3, -1); // OpenGL gtk_tree_store_append (store, & steplevel, & piter[i]); gtk_tree_store_set (store, & steplevel, 0, OGLM, 1, _(work_menu_items[2]), 2, -2, -1); // Calculations gtk_tree_store_append (store, & steplevel, & piter[i]); gtk_tree_store_set (store, & steplevel, 0, RUN, 1, _(work_menu_items[3]), 2, -1, -1); for (j=0; j steps > 1) { gtk_tree_store_append (store, & optslevel, & steplevel); gtk_tree_store_set (store, & optslevel, 0, gdk_pixbuf_new_from_file(graph_img[j], NULL), 1, _(graph_name[j]), 2, j, -1); } } gtk_tree_view_expand_to_path (GTK_TREE_VIEW(worktree), gtk_tree_model_get_path(GTK_TREE_MODEL(store), & worklevel)); projects_in_workspace ++; } /*! \fn static void fill_workspace (GtkTreeStore * store) \brief fill the workspace tree store \param store the GtkTreeStore */ static void fill_workspace (GtkTreeStore * store) { int i; gtk_tree_store_append (store, & worklevel, NULL); gtk_tree_store_set (store, & worklevel, 0, THETD, 1, _(work_menu_items[0]), 2, -4, -1); if (piter != NULL) g_free (piter); if (prpath != NULL) g_free (prpath); if (nprojects > 0) { piter = g_malloc0(nprojects*sizeof*piter); prpath = g_malloc0(nprojects*sizeof*prpath); } for (i=0; i name, -1); } active_project_changed (id); gchar * tmp = g_strdup_printf ("%s", active_project -> name); gtk_tree_store_set (workstore, & piter[id], 1, tmp, -1); g_free (tmp); } /*! \fn int find_calc_by_path (GtkTreeView * treeview, GtkTreePath * path) \brief find the calculation using the GtkTreePath in the GtkTreeView \param treeview the GtkTreeView \param path the GtkTreePath */ int find_calc_by_path (GtkTreeView * treeview, GtkTreePath * path) { int i; GtkTreeIter iter; GtkTreeModel * model = gtk_tree_view_get_model (treeview); if (gtk_tree_model_get_iter (model, & iter, path)) { gtk_tree_model_get (model, & iter, 2, & i, -1); return i; } return -1; } /*! \fn int find_proj_by_path (GtkTreePath * path) \brief find the project id using the GtkTreePath \param path the GtkTreePath */ int find_proj_by_path (GtkTreePath * path) { int i, j; i = -1; for (j=0; j%s", wchar); gtk_tree_store_set (GTK_TREE_STORE(model), & iter, 1, tmp, -1); g_free (tmp); #ifdef DEBUG g_debug ("WORKSPACE_ONDC: cleaning view"); g_debug ("WORKSPACE_ONDC: wchar = %s", wchar); #endif gtk_tree_model_get (model, & iter, 2, & i, -1); #ifdef DEBUG g_debug ("WORKSPACE_ONDC: creating view id= %d", i); #endif j = find_proj_by_path (path); #ifdef DEBUG g_debug ("WORKSPACE_ONDC: for project= %d", j); #endif if (j < 0) j = activep; if (i == -2) prep_model (j); workinfo (get_project_by_id(j), i); } } } /*! \fn void correct_this_window_title (GtkWidget * win, gchar * str) \brief use new title for GtkWindow, providing it exists \param win the GtkWindow \param str the new title */ void correct_this_window_title (GtkWidget * win, gchar * str) { if (win) { if (GTK_IS_WIDGET(win)) { gtk_window_set_title (GTK_WINDOW (win), str); } } if (str) g_free (str); } /*! \fn G_MODULE_EXPORT void change_project_name (GtkWidget * wid, gpointer edata) \brief change project name \param wid the GtkWidgent sending the signal \param edata the associated data pointer */ G_MODULE_EXPORT void change_project_name (GtkWidget * wid, gpointer edata) { int i, j, k; gchar * tmp; i = GPOINTER_TO_INT (edata); tmp = g_strdup_printf (_("Please enter a new name for project N°%d"), i); project * this_proj = get_project_by_id(i); tmp = cask(tmp, _("Project name"), i, this_proj -> name, MainWindow); if (tmp != NULL) { this_proj -> name = g_strdup_printf ("%s", tmp); if (i == activep) { g_free (tmp); tmp = g_strdup_printf ("%s", this_proj -> name); } gtk_tree_store_set (workstore, & piter[i], 1, tmp, -1); g_free (tmp); // Need to update other project windows names !!! gchar * tmp_title = prepare_for_title (this_proj -> name); if (this_proj -> modelgl != NULL) { if (this_proj -> modelgl -> win != NULL) { correct_this_window_title (this_proj -> modelgl -> win, g_strdup_printf (_("%s - 3D view - [%s mode]"), tmp_title, _(mode_name[this_proj -> modelgl -> mode]))); } gchar * win_title[2]={i18n("Atom(s) configuration"), i18n("Clone(s) configuration")}; for (j=0; j<2; j++) { if (this_proj -> modelgl -> model_win[j] != NULL) { correct_this_window_title (this_proj -> modelgl -> model_win[j] -> win, g_strdup_printf ("%s - %s", _(win_title[j]), tmp_title)); } } if (this_proj -> modelgl -> coord_win != NULL) { correct_this_window_title (this_proj -> modelgl -> coord_win -> win, g_strdup_printf (_("Environments configuration - %s"), tmp_title)); } if (this_proj -> modelgl -> atom_win != NULL) { correct_this_window_title (this_proj -> modelgl -> atom_win -> win, g_strdup_printf (_("Model edition - %s"), tmp_title)); } if (this_proj -> modelgl -> cell_win != NULL) { correct_this_window_title (this_proj -> modelgl -> cell_win -> win, g_strdup_printf (_("Cell edition - %s"), tmp_title)); } if (this_proj -> modelgl -> opengl_win != NULL) { correct_this_window_title (this_proj -> modelgl -> opengl_win -> win, g_strdup_printf (_("OpenGL material aspect and light settings - %s"), tmp_title)); } if (this_proj -> modelgl -> spiner != NULL) { correct_this_window_title (this_proj -> modelgl -> spiner -> win, g_strdup_printf (_("%s - spin"), tmp_title)); } if (this_proj -> modelgl -> player != NULL) { j = this_proj -> modelgl -> anim -> last -> img -> step; correct_this_window_title (this_proj -> modelgl -> player -> win, g_strdup_printf (_("%s - player - step %d"), tmp_title, j)); } if (this_proj -> modelgl -> measure_win != NULL) { correct_this_window_title (this_proj -> modelgl -> measure_win -> win, g_strdup_printf (_("%s - measures"), tmp_title)); } if (this_proj -> modelgl -> gradient_win != NULL) { correct_this_window_title (this_proj -> modelgl -> gradient_win -> win, g_strdup_printf (_("%s - background settings"), tmp_title)); } if (this_proj -> modelgl -> box_win != NULL) { correct_this_window_title (this_proj -> modelgl -> box_win -> win, g_strdup_printf (_("%s - box settings"), tmp_title)); } if (this_proj -> modelgl -> axis_win != NULL) { correct_this_window_title (this_proj -> modelgl -> axis_win -> win, g_strdup_printf (_("%s - axis settings"), tmp_title)); } if (this_proj -> modelgl -> rep_win != NULL) { correct_this_window_title (this_proj -> modelgl -> rep_win -> win, g_strdup_printf ("%s - OpenGL camera set-up", tmp_title)); } } g_free (tmp_title); for (j=0; j analysis[j] -> init_ok) { for (k=0; k analysis[j] -> numc; k++) { if (this_proj -> analysis[j] -> curves[k] -> window != NULL) { correct_this_window_title (this_proj -> analysis[j] -> curves[k] -> window, g_strdup_printf ("%s - %s", prepare_for_title(this_proj -> name), this_proj -> analysis[j] -> curves[k] -> name)); } } } } if (activep == i) { correct_this_window_title (MainWindow, g_strdup_printf ("%s - %s", PACKAGE, prepare_for_title(active_project -> name))); correct_this_window_title (curvetoolbox, g_strdup_printf (_("Toolboxes - %s"), prepare_for_title(active_project -> name))); } } } /*! \fn void workspace_menu (GtkWidget * tree, gpointer event, double x, double y) \brief popup the workspace contextual menu in workspace tree view \param tree the GtkTreeView \param event the event \param x x position \param y y position */ void workspace_menu (GtkWidget * tree, gpointer event, double x, double y) { GtkWidget * menu; GtkTreePath * mpath; int this_calc = -1; gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(tree), (gint)x, (gint)y, & mpath, NULL, NULL, NULL); if (mpath != NULL) { activew = find_proj_by_path (mpath); this_calc = find_calc_by_path (GTK_TREE_VIEW(tree), mpath); } else { activew = activep; } menu = work_menu (activew, this_calc); #ifdef GTK3 pop_menu_at_pointer (menu, (GdkEvent *)event); #else gtk_widget_set_parent (menu, tree); pop_menu_at_pointer (menu, x, y); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void workspace_popup (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief GTK4 popover workspace menu at current location \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void workspace_popup (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { if (gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture) == GDK_BUTTON_SECONDARY) { workspace_menu ((GtkWidget *)data, NULL, x, y); } } #else /*! \fn G_MODULE_EXPORT gboolean on_workspace_button_event (GtkWidget * widget, GdkEventButton * event, gpointer data) \brief GTK3 button event on workspace to display contextual menu \param widget the GtkWidget sending the signal \param event the associated GtkButton \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_workspace_button_event (GtkWidget * widget, GdkEventButton * event, gpointer data) { if (event -> type == GDK_BUTTON_PRESS && event -> button == 3) { workspace_menu (widget, (gpointer)event, event -> x, event -> y); } return FALSE; } #endif void workspace_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { gtk_cell_renderer_set_visible (renderer, FALSE); } /*! \fn GtkWidget * create_workspace_tree () \brief create the workspace tree store */ GtkWidget * create_workspace_tree () { GtkTreeViewColumn * col; GtkCellRenderer * renderer; GtkTreeSelection * workselect; worktree = destroy_this_widget (worktree); workstore = gtk_tree_store_new (3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT); worktree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(workstore)); fill_workspace (workstore); g_object_unref (workstore); col = gtk_tree_view_column_new (); renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_column_pack_start (col, renderer, FALSE); gtk_tree_view_column_set_attributes (col, renderer, "pixbuf", 0, NULL); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start (col, renderer, TRUE); gtk_tree_view_column_set_attributes (col, renderer, "markup", 1, NULL); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (col, renderer, TRUE); gtk_tree_view_column_set_attributes (col, renderer, "markup", 2, NULL); gtk_tree_view_column_set_cell_data_func (col, renderer, workspace_set_visible, NULL, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(worktree), col); workselect = gtk_tree_view_get_selection (GTK_TREE_VIEW(worktree)); gtk_tree_selection_set_mode (workselect, GTK_SELECTION_SINGLE); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(worktree), FALSE); //g_signal_connect (G_OBJECT(workselect), "changed", G_CALLBACK(selework), (gpointer)worktree); g_signal_connect (G_OBJECT(worktree), "row-activated", G_CALLBACK(workspace_ondc), NULL); #ifdef GTK3 g_signal_connect (G_OBJECT(worktree), "button-press-event", G_CALLBACK(on_workspace_button_event), NULL); #else add_widget_gesture_and_key_action (worktree, "workspace-context-click", G_CALLBACK(workspace_popup), (gpointer)worktree, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #endif gtk_tree_view_expand_all (GTK_TREE_VIEW(worktree)); return worktree; } /*! \fn void create_workspace () \brief create the workspace */ void create_workspace () { add_container_child (CONTAINER_SCR, MainScrol[0], create_workspace_tree ()); lab = NULL; witer = NULL; wpath = NULL; show_the_widgets (MainScrol[0]); } /*! \fn void add_project_to_workspace () \brief add project(s) to the workspace tree */ void add_project_to_workspace () { if (worktree != NULL && workstore != NULL && nprojects > 0) { int i; if (projects_in_workspace > 0) { GtkTreeIter ** tmpiter; tmpiter = g_malloc0(projects_in_workspace*sizeof*tmpiter); for (i=0; i name, -1); } if (tmpiter != NULL) g_free (tmpiter); } else { if (prpath != NULL) g_free (prpath); if (piter != NULL) g_free (piter); piter = g_malloc0((projects_in_workspace+1)*sizeof*piter); prpath = g_malloc0((projects_in_workspace+1)*sizeof*prpath); } add_project (workstore, activep); newspace = FALSE; } else { create_workspace (); } if (nprojects == 0) { widget_set_sensitive (worktree, 0); } else { widget_set_sensitive (worktree, 1); } } /*! \fn void remove_project_from_workspace (int id) \brief remove project from workspace \param id the id of the project to be remove */ void remove_project_from_workspace (int id) { int i, j; GtkTreeIter ** tmpiter; if (worktree != NULL && workstore != NULL && nprojects > 0) { if (wpath != NULL) { i = find_proj_by_path (wpath); if (i == id) { wpath = NULL; wchar = NULL; } } if (projects_in_workspace > 1) { tmpiter = g_malloc0((projects_in_workspace-1)*sizeof*tmpiter); j = -1; for (i=0; i name, -1); } } g_free (tmpiter); } else { gtk_tree_store_remove (workstore, & piter[id]); if (prpath != NULL) g_free (prpath); prpath = NULL; if (piter != NULL) g_free (piter); piter = NULL; projects_in_workspace --; widget_set_sensitive (worktree, 0); witer = NULL; wchar = NULL; } } } atomes_1.3.1/src/Makefile.in0000664000175000017500000023407315212624223015352 0ustar lerouxleroux# Makefile.in generated by automake 1.18.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2025 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__rm_f = rm -f $(am__rm_f_notfound) am__rm_rf = rm -rf $(am__rm_f_notfound) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = atomes$(EXEEXT) @WINDOWS_TRUE@am__append_1 = win_atomes.o subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am__objects_1 = $(for)parameters.$(OBJEXT) $(for)mendeleiev.$(OBJEXT) am__objects_2 = $(for)allocbonds.$(OBJEXT) $(for)allochem.$(OBJEXT) \ $(for)allocmsd.$(OBJEXT) $(for)angles.$(OBJEXT) \ $(for)bonds.$(OBJEXT) $(for)c3d.$(OBJEXT) \ $(for)chains.$(OBJEXT) $(for)chains_ogl.$(OBJEXT) \ $(for)chemistry.$(OBJEXT) $(for)clean.$(OBJEXT) \ $(for)cqvf.$(OBJEXT) $(for)dmtx.$(OBJEXT) $(for)dvtb.$(OBJEXT) \ $(for)escs.$(OBJEXT) $(for)fzbt.$(OBJEXT) $(for)gr.$(OBJEXT) \ $(for)grfft.$(OBJEXT) $(for)initchains.$(OBJEXT) \ $(for)initrings.$(OBJEXT) $(for)lattice.$(OBJEXT) \ $(for)molecules.$(OBJEXT) $(for)msd.$(OBJEXT) \ $(for)pdb.$(OBJEXT) $(for)prepdata.$(OBJEXT) \ $(for)resrings.$(OBJEXT) $(for)rings-guttman.$(OBJEXT) \ $(for)rings-king.$(OBJEXT) $(for)rings_ogl.$(OBJEXT) \ $(for)rings-primitive.$(OBJEXT) $(for)sk.$(OBJEXT) \ $(for)skt.$(OBJEXT) $(for)spherical.$(OBJEXT) \ $(for)sq.$(OBJEXT) $(for)threads.$(OBJEXT) $(for)trj.$(OBJEXT) \ $(for)utils.$(OBJEXT) $(for)vas.$(OBJEXT) \ $(for)writedata.$(OBJEXT) $(for)xyz.$(OBJEXT) am__objects_3 = $(am__objects_1) $(am__objects_2) am__objects_4 = am__objects_5 = $(gui)bdcall.$(OBJEXT) $(gui)calc_menu.$(OBJEXT) \ $(gui)callbacks.$(OBJEXT) $(gui)chainscall.$(OBJEXT) \ $(gui)edit_menu.$(OBJEXT) $(gui)grcall.$(OBJEXT) \ $(gui)gtk-misc.$(OBJEXT) $(gui)gui.$(OBJEXT) \ $(gui)initc.$(OBJEXT) $(gui)preferences.$(OBJEXT) \ $(gui)interface.$(OBJEXT) $(gui)main.$(OBJEXT) \ $(gui)msdcall.$(OBJEXT) $(gui)ringscall.$(OBJEXT) \ $(gui)spcall.$(OBJEXT) $(gui)sqcall.$(OBJEXT) \ $(gui)sktcall.$(OBJEXT) $(gui)tools.$(OBJEXT) \ $(gui)work_menu.$(OBJEXT) am__objects_6 = $(work)modelinfo.$(OBJEXT) $(work)workinfo.$(OBJEXT) \ $(work)workspace.$(OBJEXT) am__objects_7 = $(read)read_c3d.$(OBJEXT) $(read)read_cif.$(OBJEXT) \ $(read)read_coord.$(OBJEXT) $(read)read_hist.$(OBJEXT) \ $(read)read_isaacs.$(OBJEXT) $(read)read_npt.$(OBJEXT) \ $(read)read_pdb.$(OBJEXT) $(read)read_trj.$(OBJEXT) \ $(read)read_vas.$(OBJEXT) $(read)read_xyz.$(OBJEXT) am__objects_8 = $(am__objects_7) $(proj)close_p.$(OBJEXT) \ $(proj)debugio.$(OBJEXT) $(proj)init_p.$(OBJEXT) \ $(proj)open_p.$(OBJEXT) $(proj)project.$(OBJEXT) \ $(proj)read_bond.$(OBJEXT) $(proj)read_curve.$(OBJEXT) \ $(proj)read_field.$(OBJEXT) $(proj)read_mol.$(OBJEXT) \ $(proj)read_opengl.$(OBJEXT) $(proj)read_qm.$(OBJEXT) \ $(proj)save_bond.$(OBJEXT) $(proj)save_curve.$(OBJEXT) \ $(proj)save_field.$(OBJEXT) $(proj)save_mol.$(OBJEXT) \ $(proj)save_opengl.$(OBJEXT) $(proj)save_p.$(OBJEXT) \ $(proj)save_qm.$(OBJEXT) $(proj)update_p.$(OBJEXT) am__objects_9 = $(cp2k)cp2k_basis.$(OBJEXT) \ $(cp2k)cp2k_files.$(OBJEXT) $(cp2k)cp2k_gth-basis.$(OBJEXT) \ $(cp2k)cp2k_init.$(OBJEXT) $(cp2k)cp2k_mol.$(OBJEXT) \ $(cp2k)cp2k_molopt-basis.$(OBJEXT) $(cp2k)cp2k_pot.$(OBJEXT) \ $(cp2k)cp2k_print.$(OBJEXT) am__objects_10 = $(cpmd)cpmd_atoms.$(OBJEXT) \ $(cpmd)cpmd_init.$(OBJEXT) $(cpmd)cpmd_nose.$(OBJEXT) \ $(cpmd)cpmd_print.$(OBJEXT) $(cpmd)cpmd_restart.$(OBJEXT) am__objects_11 = $(dlpoly)dlp_active.$(OBJEXT) \ $(dlpoly)dlp_atom.$(OBJEXT) $(dlpoly)dlp_comp.$(OBJEXT) \ $(dlpoly)dlp_control.$(OBJEXT) $(dlpoly)dlp_copy.$(OBJEXT) \ $(dlpoly)dlp_edit.$(OBJEXT) $(dlpoly)dlp_ff_match.$(OBJEXT) \ $(dlpoly)dlp_field.$(OBJEXT) $(dlpoly)dlp_init.$(OBJEXT) \ $(dlpoly)dlp_mol.$(OBJEXT) $(dlpoly)dlp_print.$(OBJEXT) \ $(dlpoly)dlp_viz.$(OBJEXT) am__objects_12 = $(lammps)la_print.$(OBJEXT) am__objects_13 = $(calc)calc.$(OBJEXT) $(am__objects_9) \ $(am__objects_10) $(am__objects_11) $(am__objects_12) \ $(fields)force_fields.$(OBJEXT) am__objects_14 = $(curve)cedit.$(OBJEXT) $(curve)curve.$(OBJEXT) \ $(curve)cwidget.$(OBJEXT) $(curve)datab.$(OBJEXT) \ $(curve)draw.$(OBJEXT) $(curve)frame.$(OBJEXT) \ $(curve)glyph.$(OBJEXT) $(curve)labels.$(OBJEXT) \ $(curve)legend.$(OBJEXT) $(curve)m_curve.$(OBJEXT) \ $(curve)show.$(OBJEXT) $(curve)tab-1.$(OBJEXT) \ $(curve)tab-2.$(OBJEXT) $(curve)tab-3.$(OBJEXT) \ $(curve)tab-4.$(OBJEXT) $(curve)title.$(OBJEXT) \ $(curve)w_curve.$(OBJEXT) $(curve)w_data.$(OBJEXT) \ $(curve)w_img.$(OBJEXT) $(curve)xaxis.$(OBJEXT) \ $(curve)yaxis.$(OBJEXT) am__objects_15 = $(glwin)color_box.$(OBJEXT) \ $(glwin)glwindow.$(OBJEXT) $(glwin)initchain.$(OBJEXT) \ $(glwin)initcoord.$(OBJEXT) $(glwin)initmol.$(OBJEXT) \ $(glwin)initring.$(OBJEXT) $(glwin)m_anim.$(OBJEXT) \ $(glwin)m_atoms.$(OBJEXT) $(glwin)m_axis.$(OBJEXT) \ $(glwin)m_back.$(OBJEXT) $(glwin)m_bonds.$(OBJEXT) \ $(glwin)m_box.$(OBJEXT) $(glwin)m_clones.$(OBJEXT) \ $(glwin)m_coord.$(OBJEXT) $(glwin)m_edit.$(OBJEXT) \ $(glwin)menu_bar.$(OBJEXT) $(glwin)m_map.$(OBJEXT) \ $(glwin)m_poly.$(OBJEXT) $(glwin)m_proj.$(OBJEXT) \ $(glwin)m_quality.$(OBJEXT) $(glwin)m_render.$(OBJEXT) \ $(glwin)m_rep.$(OBJEXT) $(glwin)m_style.$(OBJEXT) \ $(glwin)m_tools.$(OBJEXT) $(glwin)popup.$(OBJEXT) \ $(glwin)w_advance.$(OBJEXT) $(glwin)w_atoms.$(OBJEXT) \ $(glwin)w_axis.$(OBJEXT) $(glwin)w_bonds.$(OBJEXT) \ $(glwin)w_box.$(OBJEXT) $(glwin)w_chains.$(OBJEXT) \ $(glwin)w_colors.$(OBJEXT) $(glwin)w_coord.$(OBJEXT) \ $(glwin)w_cutoffs.$(OBJEXT) $(glwin)w_encode.$(OBJEXT) \ $(glwin)w_labels.$(OBJEXT) $(glwin)w_library.$(OBJEXT) \ $(glwin)w_measures.$(OBJEXT) $(glwin)w_periodic.$(OBJEXT) \ $(glwin)w_record.$(OBJEXT) $(glwin)w_rings.$(OBJEXT) \ $(glwin)w_search.$(OBJEXT) $(glwin)w_sequencer.$(OBJEXT) \ $(glwin)w_spiner.$(OBJEXT) $(glwin)w_volumes.$(OBJEXT) am__objects_16 = $(gldraw)d_atoms.$(OBJEXT) $(gldraw)d_axis.$(OBJEXT) \ $(gldraw)d_bonds.$(OBJEXT) $(gldraw)d_box.$(OBJEXT) \ $(gldraw)d_label.$(OBJEXT) $(gldraw)d_measures.$(OBJEXT) \ $(gldraw)d_poly.$(OBJEXT) $(gldraw)d_rings.$(OBJEXT) \ $(gldraw)d_selection.$(OBJEXT) $(gldraw)d_background.$(OBJEXT) \ $(gldraw)image.$(OBJEXT) $(gldraw)movie.$(OBJEXT) \ $(gldraw)ogl_text.$(OBJEXT) am__objects_17 = $(gledit)atom_action.$(OBJEXT) \ $(gledit)atom_coord.$(OBJEXT) $(gledit)atom_edit.$(OBJEXT) \ $(gledit)atom_geo.$(OBJEXT) $(gledit)atom_insert.$(OBJEXT) \ $(gledit)atom_move.$(OBJEXT) $(gledit)atom_object.$(OBJEXT) \ $(gledit)atom_remove.$(OBJEXT) $(gledit)atom_search.$(OBJEXT) \ $(gledit)atom_species.$(OBJEXT) \ $(gledit)cbuild_action.$(OBJEXT) \ $(gledit)cbuild_edit.$(OBJEXT) $(gledit)cbuild_info.$(OBJEXT) \ $(gledit)cbuild_sg.$(OBJEXT) $(gledit)cell_cut.$(OBJEXT) \ $(gledit)cell_density.$(OBJEXT) $(gledit)cell_edit.$(OBJEXT) \ $(gledit)cell_extra.$(OBJEXT) $(gledit)cell_pixel.$(OBJEXT) \ $(gledit)cell_shift.$(OBJEXT) $(gledit)cell_super.$(OBJEXT) am__objects_18 = $(am__objects_15) $(am__objects_16) $(am__objects_17) \ $(ogl)arcball.$(OBJEXT) $(ogl)glview.$(OBJEXT) \ $(ogl)ogl_draw.$(OBJEXT) $(ogl)ogl_shaders.$(OBJEXT) \ $(ogl)ogl_shading.$(OBJEXT) $(ogl)ogl_utils.$(OBJEXT) \ $(ogl)selection.$(OBJEXT) am_atomes_OBJECTS = $(am__objects_3) $(am__objects_4) global.$(OBJEXT) \ $(am__objects_5) $(am__objects_6) $(am__objects_8) \ $(am__objects_13) $(am__objects_14) $(am__objects_18) atomes_OBJECTS = $(am_atomes_OBJECTS) am__DEPENDENCIES_1 = atomes_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) $(am__append_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/$(calc)calc.Po \ ./$(DEPDIR)/$(cp2k)cp2k_basis.Po \ ./$(DEPDIR)/$(cp2k)cp2k_files.Po \ ./$(DEPDIR)/$(cp2k)cp2k_gth-basis.Po \ ./$(DEPDIR)/$(cp2k)cp2k_init.Po ./$(DEPDIR)/$(cp2k)cp2k_mol.Po \ ./$(DEPDIR)/$(cp2k)cp2k_molopt-basis.Po \ ./$(DEPDIR)/$(cp2k)cp2k_pot.Po \ ./$(DEPDIR)/$(cp2k)cp2k_print.Po \ ./$(DEPDIR)/$(cpmd)cpmd_atoms.Po \ ./$(DEPDIR)/$(cpmd)cpmd_init.Po \ ./$(DEPDIR)/$(cpmd)cpmd_nose.Po \ ./$(DEPDIR)/$(cpmd)cpmd_print.Po \ ./$(DEPDIR)/$(cpmd)cpmd_restart.Po \ ./$(DEPDIR)/$(curve)cedit.Po ./$(DEPDIR)/$(curve)curve.Po \ ./$(DEPDIR)/$(curve)cwidget.Po ./$(DEPDIR)/$(curve)datab.Po \ ./$(DEPDIR)/$(curve)draw.Po ./$(DEPDIR)/$(curve)frame.Po \ ./$(DEPDIR)/$(curve)glyph.Po ./$(DEPDIR)/$(curve)labels.Po \ ./$(DEPDIR)/$(curve)legend.Po ./$(DEPDIR)/$(curve)m_curve.Po \ ./$(DEPDIR)/$(curve)show.Po ./$(DEPDIR)/$(curve)tab-1.Po \ ./$(DEPDIR)/$(curve)tab-2.Po ./$(DEPDIR)/$(curve)tab-3.Po \ ./$(DEPDIR)/$(curve)tab-4.Po ./$(DEPDIR)/$(curve)title.Po \ ./$(DEPDIR)/$(curve)w_curve.Po ./$(DEPDIR)/$(curve)w_data.Po \ ./$(DEPDIR)/$(curve)w_img.Po ./$(DEPDIR)/$(curve)xaxis.Po \ ./$(DEPDIR)/$(curve)yaxis.Po \ ./$(DEPDIR)/$(dlpoly)dlp_active.Po \ ./$(DEPDIR)/$(dlpoly)dlp_atom.Po \ ./$(DEPDIR)/$(dlpoly)dlp_comp.Po \ ./$(DEPDIR)/$(dlpoly)dlp_control.Po \ ./$(DEPDIR)/$(dlpoly)dlp_copy.Po \ ./$(DEPDIR)/$(dlpoly)dlp_edit.Po \ ./$(DEPDIR)/$(dlpoly)dlp_ff_match.Po \ ./$(DEPDIR)/$(dlpoly)dlp_field.Po \ ./$(DEPDIR)/$(dlpoly)dlp_init.Po \ ./$(DEPDIR)/$(dlpoly)dlp_mol.Po \ ./$(DEPDIR)/$(dlpoly)dlp_print.Po \ ./$(DEPDIR)/$(dlpoly)dlp_viz.Po \ ./$(DEPDIR)/$(fields)force_fields.Po \ ./$(DEPDIR)/$(gldraw)d_atoms.Po ./$(DEPDIR)/$(gldraw)d_axis.Po \ ./$(DEPDIR)/$(gldraw)d_background.Po \ ./$(DEPDIR)/$(gldraw)d_bonds.Po ./$(DEPDIR)/$(gldraw)d_box.Po \ ./$(DEPDIR)/$(gldraw)d_label.Po \ ./$(DEPDIR)/$(gldraw)d_measures.Po \ ./$(DEPDIR)/$(gldraw)d_poly.Po ./$(DEPDIR)/$(gldraw)d_rings.Po \ ./$(DEPDIR)/$(gldraw)d_selection.Po \ ./$(DEPDIR)/$(gldraw)image.Po ./$(DEPDIR)/$(gldraw)movie.Po \ ./$(DEPDIR)/$(gldraw)ogl_text.Po \ ./$(DEPDIR)/$(gledit)atom_action.Po \ ./$(DEPDIR)/$(gledit)atom_coord.Po \ ./$(DEPDIR)/$(gledit)atom_edit.Po \ ./$(DEPDIR)/$(gledit)atom_geo.Po \ ./$(DEPDIR)/$(gledit)atom_insert.Po \ ./$(DEPDIR)/$(gledit)atom_move.Po \ ./$(DEPDIR)/$(gledit)atom_object.Po \ ./$(DEPDIR)/$(gledit)atom_remove.Po \ ./$(DEPDIR)/$(gledit)atom_search.Po \ ./$(DEPDIR)/$(gledit)atom_species.Po \ ./$(DEPDIR)/$(gledit)cbuild_action.Po \ ./$(DEPDIR)/$(gledit)cbuild_edit.Po \ ./$(DEPDIR)/$(gledit)cbuild_info.Po \ ./$(DEPDIR)/$(gledit)cbuild_sg.Po \ ./$(DEPDIR)/$(gledit)cell_cut.Po \ ./$(DEPDIR)/$(gledit)cell_density.Po \ ./$(DEPDIR)/$(gledit)cell_edit.Po \ ./$(DEPDIR)/$(gledit)cell_extra.Po \ ./$(DEPDIR)/$(gledit)cell_pixel.Po \ ./$(DEPDIR)/$(gledit)cell_shift.Po \ ./$(DEPDIR)/$(gledit)cell_super.Po \ ./$(DEPDIR)/$(glwin)color_box.Po \ ./$(DEPDIR)/$(glwin)glwindow.Po \ ./$(DEPDIR)/$(glwin)initchain.Po \ ./$(DEPDIR)/$(glwin)initcoord.Po \ ./$(DEPDIR)/$(glwin)initmol.Po ./$(DEPDIR)/$(glwin)initring.Po \ ./$(DEPDIR)/$(glwin)m_anim.Po ./$(DEPDIR)/$(glwin)m_atoms.Po \ ./$(DEPDIR)/$(glwin)m_axis.Po ./$(DEPDIR)/$(glwin)m_back.Po \ ./$(DEPDIR)/$(glwin)m_bonds.Po ./$(DEPDIR)/$(glwin)m_box.Po \ ./$(DEPDIR)/$(glwin)m_clones.Po ./$(DEPDIR)/$(glwin)m_coord.Po \ ./$(DEPDIR)/$(glwin)m_edit.Po ./$(DEPDIR)/$(glwin)m_map.Po \ ./$(DEPDIR)/$(glwin)m_poly.Po ./$(DEPDIR)/$(glwin)m_proj.Po \ ./$(DEPDIR)/$(glwin)m_quality.Po \ ./$(DEPDIR)/$(glwin)m_render.Po ./$(DEPDIR)/$(glwin)m_rep.Po \ ./$(DEPDIR)/$(glwin)m_style.Po ./$(DEPDIR)/$(glwin)m_tools.Po \ ./$(DEPDIR)/$(glwin)menu_bar.Po ./$(DEPDIR)/$(glwin)popup.Po \ ./$(DEPDIR)/$(glwin)w_advance.Po \ ./$(DEPDIR)/$(glwin)w_atoms.Po ./$(DEPDIR)/$(glwin)w_axis.Po \ ./$(DEPDIR)/$(glwin)w_bonds.Po ./$(DEPDIR)/$(glwin)w_box.Po \ ./$(DEPDIR)/$(glwin)w_chains.Po \ ./$(DEPDIR)/$(glwin)w_colors.Po ./$(DEPDIR)/$(glwin)w_coord.Po \ ./$(DEPDIR)/$(glwin)w_cutoffs.Po \ ./$(DEPDIR)/$(glwin)w_encode.Po \ ./$(DEPDIR)/$(glwin)w_labels.Po \ ./$(DEPDIR)/$(glwin)w_library.Po \ ./$(DEPDIR)/$(glwin)w_measures.Po \ ./$(DEPDIR)/$(glwin)w_periodic.Po \ ./$(DEPDIR)/$(glwin)w_record.Po ./$(DEPDIR)/$(glwin)w_rings.Po \ ./$(DEPDIR)/$(glwin)w_search.Po \ ./$(DEPDIR)/$(glwin)w_sequencer.Po \ ./$(DEPDIR)/$(glwin)w_spiner.Po \ ./$(DEPDIR)/$(glwin)w_volumes.Po ./$(DEPDIR)/$(gui)bdcall.Po \ ./$(DEPDIR)/$(gui)calc_menu.Po ./$(DEPDIR)/$(gui)callbacks.Po \ ./$(DEPDIR)/$(gui)chainscall.Po ./$(DEPDIR)/$(gui)edit_menu.Po \ ./$(DEPDIR)/$(gui)grcall.Po ./$(DEPDIR)/$(gui)gtk-misc.Po \ ./$(DEPDIR)/$(gui)gui.Po ./$(DEPDIR)/$(gui)initc.Po \ ./$(DEPDIR)/$(gui)interface.Po ./$(DEPDIR)/$(gui)main.Po \ ./$(DEPDIR)/$(gui)msdcall.Po ./$(DEPDIR)/$(gui)preferences.Po \ ./$(DEPDIR)/$(gui)ringscall.Po ./$(DEPDIR)/$(gui)sktcall.Po \ ./$(DEPDIR)/$(gui)spcall.Po ./$(DEPDIR)/$(gui)sqcall.Po \ ./$(DEPDIR)/$(gui)tools.Po ./$(DEPDIR)/$(gui)work_menu.Po \ ./$(DEPDIR)/$(lammps)la_print.Po ./$(DEPDIR)/$(ogl)arcball.Po \ ./$(DEPDIR)/$(ogl)glview.Po ./$(DEPDIR)/$(ogl)ogl_draw.Po \ ./$(DEPDIR)/$(ogl)ogl_shaders.Po \ ./$(DEPDIR)/$(ogl)ogl_shading.Po \ ./$(DEPDIR)/$(ogl)ogl_utils.Po ./$(DEPDIR)/$(ogl)selection.Po \ ./$(DEPDIR)/$(proj)close_p.Po ./$(DEPDIR)/$(proj)debugio.Po \ ./$(DEPDIR)/$(proj)init_p.Po ./$(DEPDIR)/$(proj)open_p.Po \ ./$(DEPDIR)/$(proj)project.Po ./$(DEPDIR)/$(proj)read_bond.Po \ ./$(DEPDIR)/$(proj)read_curve.Po \ ./$(DEPDIR)/$(proj)read_field.Po \ ./$(DEPDIR)/$(proj)read_mol.Po \ ./$(DEPDIR)/$(proj)read_opengl.Po \ ./$(DEPDIR)/$(proj)read_qm.Po ./$(DEPDIR)/$(proj)save_bond.Po \ ./$(DEPDIR)/$(proj)save_curve.Po \ ./$(DEPDIR)/$(proj)save_field.Po \ ./$(DEPDIR)/$(proj)save_mol.Po \ ./$(DEPDIR)/$(proj)save_opengl.Po ./$(DEPDIR)/$(proj)save_p.Po \ ./$(DEPDIR)/$(proj)save_qm.Po ./$(DEPDIR)/$(proj)update_p.Po \ ./$(DEPDIR)/$(read)read_c3d.Po ./$(DEPDIR)/$(read)read_cif.Po \ ./$(DEPDIR)/$(read)read_coord.Po \ ./$(DEPDIR)/$(read)read_hist.Po \ ./$(DEPDIR)/$(read)read_isaacs.Po \ ./$(DEPDIR)/$(read)read_npt.Po ./$(DEPDIR)/$(read)read_pdb.Po \ ./$(DEPDIR)/$(read)read_trj.Po ./$(DEPDIR)/$(read)read_vas.Po \ ./$(DEPDIR)/$(read)read_xyz.Po ./$(DEPDIR)/$(work)modelinfo.Po \ ./$(DEPDIR)/$(work)workinfo.Po ./$(DEPDIR)/$(work)workspace.Po \ ./$(DEPDIR)/global.Po am__mv = mv -f PPFCCOMPILE = $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) AM_V_PPFC = $(am__v_PPFC_@AM_V@) am__v_PPFC_ = $(am__v_PPFC_@AM_DEFAULT_V@) am__v_PPFC_0 = @echo " PPFC " $@; am__v_PPFC_1 = FCLD = $(FC) FCLINK = $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \ $@ AM_V_FCLD = $(am__v_FCLD_@AM_V@) am__v_FCLD_ = $(am__v_FCLD_@AM_DEFAULT_V@) am__v_FCLD_0 = @echo " FCLD " $@; am__v_FCLD_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(atomes_SOURCES) DIST_SOURCES = $(atomes_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ATOMES_MAJOR_VERSION = @ATOMES_MAJOR_VERSION@ ATOMES_MINOR_VERSION = @ATOMES_MINOR_VERSION@ ATOMES_PATCH_VERSION = @ATOMES_PATCH_VERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EPOXY_CFLAGS = @EPOXY_CFLAGS@ EPOXY_LIBS = @EPOXY_LIBS@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCFLAGS_F90 = @FCFLAGS_F90@ FCFLAGS_f90 = @FCFLAGS_f90@ FCLIBS = @FCLIBS@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTEGRATION_CFLAGS = @INTEGRATION_CFLAGS@ INTEGRATION_LIBS = @INTEGRATION_LIBS@ LDFLAGS = @LDFLAGS@ LGTK_CFLAGS = @LGTK_CFLAGS@ LGTK_LIBS = @LGTK_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIBS = @LIBXML2_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENMP_CFLAGS = @OPENMP_CFLAGS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UP_APPSTREAM = @UP_APPSTREAM@ UP_DESKTOP = @UP_DESKTOP@ UP_MIME = @UP_MIME@ VERSION = @VERSION@ WINDRES = @WINDRES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__rm_f_notfound = @am__rm_f_notfound@ am__tar = @am__tar@ am__untar = @am__untar@ am__xargs_n = @am__xargs_n@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # To prepare the OpenGL testing utility: SUBDIRS = startup-testing atomes_LDADD = $(LGTK_LIBS) $(LIBXML2_LIBS) $(PANGOFT2_LIBS) \ $(FFMPEG_LIBS) $(GLU_LIBS) $(EPOXY_LIBS) $(am__append_1) # Create a variable to store the CFLAGS for all the required libraries LIBS_CFLAGS = $(LGTK_CFLAGS) $(LIBXML2_CFLAGS) $(PANGOFT2_CFLAGS) $(FFMPEG_CFLAGS) $(GLU_CFLAGS) $(EPOXY_CFLAGS) @OPENMP_FALSE@OpenMP_FLAGS = # To turn OpenMP on/off @OPENMP_TRUE@OpenMP_FLAGS = -DOPENMP $(OPENMP_CFLAGS) # Use AM_LDFLAGS to define additional linker flags: AM_LDFLAGS = $(OpenMP_FLAGS) @GTK3_FALSE@GTK_VERSION = -DGTK4 @GTK3_TRUE@GTK_VERSION = -DGTK3 atomes_locale = $(DESTDIR)$(localedir) @LINUX_FALSE@@WINDOWS_FALSE@AM_CPPFLAGS = -DOSX $(GTK_VERSION) -DGTKGLAREA -DMENU_ICONS $(OpenMP_FLAGS) $(PACKAGE_CPPFLAGS) -DPACKAGE_LOCALE=\""$(atomes_locale)"\" @LINUX_TRUE@@WINDOWS_FALSE@AM_CPPFLAGS = -DLINUX $(GTK_VERSION) -DGTKGLAREA -DMENU_ICONS $(OpenMP_FLAGS) $(PACKAGE_CPPFLAGS) -DPACKAGE_LOCALE=\""$(atomes_locale)"\" # Use AM_CPPFLAGS to define additional preprocessor flags: @WINDOWS_TRUE@AM_CPPFLAGS = $(GTK_VERSION) -DGTKGLAREA -DMENU_ICONS $(OpenMP_FLAGS) -DPACKAGE_LOCALE=\""$(atomes_locale)"\" @WINDOWS_FALSE@PACKAGE_CPPFLAGS = -DPACKAGE_PREFIX=\""$(datadir)/atomes"\" -DPACKAGE_LIBEXEC=\""$(libexecdir)"\" -DPACKAGE_LOCALE=\""$(atomes_locale)"\" # Use AM_FFLAGS to define additional Fortran 90 flags: AM_FFLAGS = $(OpenMP_FLAGS) for = fortran/ gui = gui/ work = workspace/ proj = project/ read = project/readers/ calc = calc/ dlpoly = calc/dl_poly/ lammps = calc/lammps/ fields = calc/force_fields/ cpmd = calc/cpmd/ cp2k = calc/cp2k/ curve = curve/ ogl = opengl/ glwin = opengl/win/ gldraw = opengl/draw/ gledit = opengl/edit/ inc = -I$(gui) -I$(work) -I$(proj) -I$(read) -I$(calc) -I$(dlpoly) -I$(lammps) -I$(fields) -I$(cpmd) -I$(cp2k) -I$(curve) -I$(glwin) -I$(gledit) -I$(gldraw) -I$(ogl) -I. includes = $(inc) -DGTK_DISABLE_DEPRECATED # Use AM_CFLAGS to define additional C flags: AM_CFLAGS = $(includes) $(OpenMP_FLAGS) $(LIBS_CFLAGS) -std=gnu99 atomes_fortran_modules = $(for)parameters.F90 \ $(for)mendeleiev.F90 atomes_fortran_files = $(for)allocbonds.F90 \ $(for)allochem.F90 \ $(for)allocmsd.F90 \ $(for)angles.F90 \ $(for)bonds.F90 \ $(for)c3d.F90 \ $(for)chains.F90 \ $(for)chains_ogl.F90 \ $(for)chemistry.F90 \ $(for)clean.F90 \ $(for)cqvf.F90 \ $(for)dmtx.F90 \ $(for)dvtb.F90 \ $(for)escs.F90 \ $(for)fzbt.F90 \ $(for)gr.F90 \ $(for)grfft.F90 \ $(for)initchains.F90 \ $(for)initrings.F90 \ $(for)lattice.F90 \ $(for)molecules.F90 \ $(for)msd.F90 \ $(for)pdb.F90 \ $(for)prepdata.F90 \ $(for)resrings.F90 \ $(for)rings-guttman.F90 \ $(for)rings-king.F90 \ $(for)rings_ogl.F90 \ $(for)rings-primitive.F90 \ $(for)sk.F90 \ $(for)skt.F90 \ $(for)spherical.F90 \ $(for)sq.F90 \ $(for)threads.F90 \ $(for)trj.F90 \ $(for)utils.F90 \ $(for)vas.F90 \ $(for)writedata.F90 \ $(for)xyz.F90 # Rules to ensure that Fortran modules are compiled before Fortran files atomes_fortran = $(atomes_fortran_modules) $(atomes_fortran_files) atomes_gui = $(gui)bdcall.c \ $(gui)calc_menu.c \ $(gui)callbacks.c \ $(gui)chainscall.c \ $(gui)edit_menu.c \ $(gui)grcall.c \ $(gui)gtk-misc.c \ $(gui)gui.c \ $(gui)initc.c \ $(gui)preferences.c \ $(gui)interface.c \ $(gui)main.c \ $(gui)msdcall.c \ $(gui)ringscall.c \ $(gui)spcall.c \ $(gui)sqcall.c \ $(gui)sktcall.c \ $(gui)tools.c \ $(gui)work_menu.c atomes_workspace = $(work)modelinfo.c \ $(work)workinfo.c \ $(work)workspace.c atomes_readers = $(read)read_c3d.c \ $(read)read_cif.c \ $(read)read_coord.c \ $(read)read_hist.c \ $(read)read_isaacs.c \ $(read)read_npt.c \ $(read)read_pdb.c \ $(read)read_trj.c \ $(read)read_vas.c \ $(read)read_xyz.c atomes_project = $(atomes_readers) \ $(proj)close_p.c \ $(proj)debugio.c \ $(proj)init_p.c \ $(proj)open_p.c \ $(proj)project.c \ $(proj)read_bond.c \ $(proj)read_curve.c \ $(proj)read_field.c \ $(proj)read_mol.c \ $(proj)read_opengl.c \ $(proj)read_qm.c \ $(proj)save_bond.c \ $(proj)save_curve.c \ $(proj)save_field.c \ $(proj)save_mol.c \ $(proj)save_opengl.c \ $(proj)save_p.c \ $(proj)save_qm.c \ $(proj)update_p.c atomes_cp2k = $(cp2k)cp2k_basis.c \ $(cp2k)cp2k_files.c \ $(cp2k)cp2k_gth-basis.c \ $(cp2k)cp2k_init.c \ $(cp2k)cp2k_mol.c \ $(cp2k)cp2k_molopt-basis.c \ $(cp2k)cp2k_pot.c \ $(cp2k)cp2k_print.c atomes_cpmd = $(cpmd)cpmd_atoms.c \ $(cpmd)cpmd_init.c \ $(cpmd)cpmd_nose.c \ $(cpmd)cpmd_print.c \ $(cpmd)cpmd_restart.c atomes_dlpoly = $(dlpoly)dlp_active.c \ $(dlpoly)dlp_atom.c \ $(dlpoly)dlp_comp.c \ $(dlpoly)dlp_control.c \ $(dlpoly)dlp_copy.c \ $(dlpoly)dlp_edit.c \ $(dlpoly)dlp_ff_match.c \ $(dlpoly)dlp_field.c \ $(dlpoly)dlp_init.c \ $(dlpoly)dlp_mol.c \ $(dlpoly)dlp_print.c \ $(dlpoly)dlp_viz.c atomes_lammps = $(lammps)la_print.c atomes_calc = $(calc)calc.c $(atomes_cp2k) $(atomes_cpmd) $(atomes_dlpoly) $(atomes_lammps) $(fields)force_fields.c atomes_curve = $(curve)cedit.c \ $(curve)curve.c \ $(curve)cwidget.c \ $(curve)datab.c \ $(curve)draw.c \ $(curve)frame.c \ $(curve)glyph.c \ $(curve)labels.c \ $(curve)legend.c \ $(curve)m_curve.c \ $(curve)show.c \ $(curve)tab-1.c \ $(curve)tab-2.c \ $(curve)tab-3.c \ $(curve)tab-4.c \ $(curve)title.c \ $(curve)w_curve.c \ $(curve)w_data.c \ $(curve)w_img.c \ $(curve)xaxis.c \ $(curve)yaxis.c atomes_glwin = $(glwin)color_box.c \ $(glwin)glwindow.c \ $(glwin)initchain.c \ $(glwin)initcoord.c \ $(glwin)initmol.c \ $(glwin)initring.c \ $(glwin)m_anim.c \ $(glwin)m_atoms.c \ $(glwin)m_axis.c \ $(glwin)m_back.c \ $(glwin)m_bonds.c \ $(glwin)m_box.c \ $(glwin)m_clones.c \ $(glwin)m_coord.c \ $(glwin)m_edit.c \ $(glwin)menu_bar.c \ $(glwin)m_map.c \ $(glwin)m_poly.c \ $(glwin)m_proj.c \ $(glwin)m_quality.c \ $(glwin)m_render.c \ $(glwin)m_rep.c \ $(glwin)m_style.c \ $(glwin)m_tools.c \ $(glwin)popup.c \ $(glwin)w_advance.c \ $(glwin)w_atoms.c \ $(glwin)w_axis.c \ $(glwin)w_bonds.c \ $(glwin)w_box.c \ $(glwin)w_chains.c \ $(glwin)w_colors.c \ $(glwin)w_coord.c \ $(glwin)w_cutoffs.c \ $(glwin)w_encode.c \ $(glwin)w_labels.c \ $(glwin)w_library.c \ $(glwin)w_measures.c \ $(glwin)w_periodic.c \ $(glwin)w_record.c \ $(glwin)w_rings.c \ $(glwin)w_search.c \ $(glwin)w_sequencer.c \ $(glwin)w_spiner.c \ $(glwin)w_volumes.c atomes_gldraw = $(gldraw)d_atoms.c \ $(gldraw)d_axis.c \ $(gldraw)d_bonds.c \ $(gldraw)d_box.c \ $(gldraw)d_label.c \ $(gldraw)d_measures.c \ $(gldraw)d_poly.c \ $(gldraw)d_rings.c \ $(gldraw)d_selection.c \ $(gldraw)d_background.c \ $(gldraw)image.c \ $(gldraw)movie.c \ $(gldraw)ogl_text.c atomes_gledit = $(gledit)atom_action.c \ $(gledit)atom_coord.c \ $(gledit)atom_edit.c \ $(gledit)atom_geo.c \ $(gledit)atom_insert.c \ $(gledit)atom_move.c \ $(gledit)atom_object.c \ $(gledit)atom_remove.c \ $(gledit)atom_search.c \ $(gledit)atom_species.c \ $(gledit)cbuild_action.c \ $(gledit)cbuild_edit.c \ $(gledit)cbuild_info.c \ $(gledit)cbuild_sg.c \ $(gledit)cell_cut.c \ $(gledit)cell_density.c \ $(gledit)cell_edit.c \ $(gledit)cell_extra.c \ $(gledit)cell_pixel.c \ $(gledit)cell_shift.c \ $(gledit)cell_super.c atomes_opengl = $(atomes_glwin) \ $(atomes_gldraw) \ $(atomes_gledit) \ $(ogl)arcball.c \ $(ogl)glview.c \ $(ogl)ogl_draw.c \ $(ogl)ogl_shaders.c \ $(ogl)ogl_shading.c \ $(ogl)ogl_utils.c \ $(ogl)selection.c atomes_includes = config.h \ version.h \ global.h \ bind.h \ affero.h \ $(gui)callbacks.h \ $(gui)gui.h \ $(gui)interface.h \ $(gui)xmlrw.h \ $(gui)preferences.h \ $(work)workspace.h \ $(proj)project.h \ $(read)readers.h \ $(calc)calc.h \ $(cpmd)cpmd.h \ $(cp2k)cp2k.h \ $(dl_poly)dlp_field.h \ $(field)force_fields.h \ $(curve)cedit.h \ $(curve)curve.h \ $(curve)datab.h \ $(glwin)color_box.h \ $(glwin)glwindow.h \ $(glwin)initcoord.h \ $(glwin)submenus.h \ $(glraw)movie.h \ $(gledit)atom_edit.h \ $(gledit)cbuild_edit.h \ $(gledit)cell_edit.h \ $(ogl)glview.h \ $(ogl)glwin.h \ $(ogl)math_3d.h \ $(ogl)ogl_shading.h # List the files required to build the program atomes_SOURCES = \ $(atomes_fortran) \ $(atomes_includes) \ global.c \ $(atomes_gui) \ $(atomes_workspace) \ $(atomes_project) \ $(atomes_calc) \ $(atomes_curve) \ $(atomes_opengl) all: all-recursive .SUFFIXES: .SUFFIXES: .F90 .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && $(am__rm_f) $$files clean-binPROGRAMS: -$(am__rm_f) $(bin_PROGRAMS) atomes$(EXEEXT): $(atomes_OBJECTS) $(atomes_DEPENDENCIES) $(EXTRA_atomes_DEPENDENCIES) @rm -f atomes$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(atomes_OBJECTS) $(atomes_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(calc)calc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_basis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_files.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_gth-basis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_init.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_mol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_molopt-basis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_pot.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_print.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cpmd)cpmd_atoms.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cpmd)cpmd_init.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cpmd)cpmd_nose.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cpmd)cpmd_print.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cpmd)cpmd_restart.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)cedit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)curve.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)cwidget.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)datab.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)draw.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)frame.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)glyph.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)labels.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)legend.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)m_curve.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)show.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)tab-1.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)tab-2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)tab-3.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)tab-4.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)title.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)w_curve.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)w_data.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)w_img.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)xaxis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)yaxis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_active.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_atom.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_comp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_control.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_copy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_edit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_ff_match.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_field.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_init.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_mol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_print.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_viz.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(fields)force_fields.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_atoms.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_axis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_background.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_bonds.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_box.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_label.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_measures.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_poly.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_rings.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_selection.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)image.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)movie.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)ogl_text.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_action.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_coord.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_edit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_geo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_insert.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_move.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_object.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_remove.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_search.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_species.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cbuild_action.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cbuild_edit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cbuild_info.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cbuild_sg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_cut.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_density.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_edit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_extra.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_pixel.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_shift.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_super.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)color_box.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)glwindow.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)initchain.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)initcoord.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)initmol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)initring.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_anim.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_atoms.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_axis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_back.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_bonds.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_box.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_clones.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_coord.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_edit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_map.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_poly.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_proj.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_quality.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_render.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_rep.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_style.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_tools.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)menu_bar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)popup.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_advance.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_atoms.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_axis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_bonds.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_box.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_chains.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_colors.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_coord.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_cutoffs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_encode.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_labels.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_library.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_measures.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_periodic.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_record.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_rings.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_search.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_sequencer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_spiner.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_volumes.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)bdcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)calc_menu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)callbacks.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)chainscall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)edit_menu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)grcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)gtk-misc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)gui.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)initc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)interface.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)msdcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)preferences.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)ringscall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)sktcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)spcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)sqcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)tools.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)work_menu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(lammps)la_print.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)arcball.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)glview.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)ogl_draw.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)ogl_shaders.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)ogl_shading.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)ogl_utils.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)selection.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)close_p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)debugio.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)init_p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)open_p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)project.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)read_bond.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)read_curve.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)read_field.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)read_mol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)read_opengl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)read_qm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_bond.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_curve.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_field.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_mol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_opengl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_qm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)update_p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_c3d.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_cif.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_coord.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_hist.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_isaacs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_npt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_pdb.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_trj.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_vas.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_xyz.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(work)modelinfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(work)workinfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(work)workspace.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/global.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @: >>$@ am--depfiles: $(am__depfiles_remade) .F90.o: $(AM_V_PPFC)$(PPFCCOMPILE) -c -o $@ $< .F90.obj: $(AM_V_PPFC)$(PPFCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -$(am__rm_f) $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/$(calc)calc.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_basis.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_files.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_gth-basis.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_init.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_mol.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_molopt-basis.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_pot.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_print.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_atoms.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_init.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_nose.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_print.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_restart.Po -rm -f ./$(DEPDIR)/$(curve)cedit.Po -rm -f ./$(DEPDIR)/$(curve)curve.Po -rm -f ./$(DEPDIR)/$(curve)cwidget.Po -rm -f ./$(DEPDIR)/$(curve)datab.Po -rm -f ./$(DEPDIR)/$(curve)draw.Po -rm -f ./$(DEPDIR)/$(curve)frame.Po -rm -f ./$(DEPDIR)/$(curve)glyph.Po -rm -f ./$(DEPDIR)/$(curve)labels.Po -rm -f ./$(DEPDIR)/$(curve)legend.Po -rm -f ./$(DEPDIR)/$(curve)m_curve.Po -rm -f ./$(DEPDIR)/$(curve)show.Po -rm -f ./$(DEPDIR)/$(curve)tab-1.Po -rm -f ./$(DEPDIR)/$(curve)tab-2.Po -rm -f ./$(DEPDIR)/$(curve)tab-3.Po -rm -f ./$(DEPDIR)/$(curve)tab-4.Po -rm -f ./$(DEPDIR)/$(curve)title.Po -rm -f ./$(DEPDIR)/$(curve)w_curve.Po -rm -f ./$(DEPDIR)/$(curve)w_data.Po -rm -f ./$(DEPDIR)/$(curve)w_img.Po -rm -f ./$(DEPDIR)/$(curve)xaxis.Po -rm -f ./$(DEPDIR)/$(curve)yaxis.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_active.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_atom.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_comp.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_control.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_copy.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_edit.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_ff_match.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_field.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_init.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_mol.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_print.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_viz.Po -rm -f ./$(DEPDIR)/$(fields)force_fields.Po -rm -f ./$(DEPDIR)/$(gldraw)d_atoms.Po -rm -f ./$(DEPDIR)/$(gldraw)d_axis.Po -rm -f ./$(DEPDIR)/$(gldraw)d_background.Po -rm -f ./$(DEPDIR)/$(gldraw)d_bonds.Po -rm -f ./$(DEPDIR)/$(gldraw)d_box.Po -rm -f ./$(DEPDIR)/$(gldraw)d_label.Po -rm -f ./$(DEPDIR)/$(gldraw)d_measures.Po -rm -f ./$(DEPDIR)/$(gldraw)d_poly.Po -rm -f ./$(DEPDIR)/$(gldraw)d_rings.Po -rm -f ./$(DEPDIR)/$(gldraw)d_selection.Po -rm -f ./$(DEPDIR)/$(gldraw)image.Po -rm -f ./$(DEPDIR)/$(gldraw)movie.Po -rm -f ./$(DEPDIR)/$(gldraw)ogl_text.Po -rm -f ./$(DEPDIR)/$(gledit)atom_action.Po -rm -f ./$(DEPDIR)/$(gledit)atom_coord.Po -rm -f ./$(DEPDIR)/$(gledit)atom_edit.Po -rm -f ./$(DEPDIR)/$(gledit)atom_geo.Po -rm -f ./$(DEPDIR)/$(gledit)atom_insert.Po -rm -f ./$(DEPDIR)/$(gledit)atom_move.Po -rm -f ./$(DEPDIR)/$(gledit)atom_object.Po -rm -f ./$(DEPDIR)/$(gledit)atom_remove.Po -rm -f ./$(DEPDIR)/$(gledit)atom_search.Po -rm -f ./$(DEPDIR)/$(gledit)atom_species.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_action.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_edit.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_info.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_sg.Po -rm -f ./$(DEPDIR)/$(gledit)cell_cut.Po -rm -f ./$(DEPDIR)/$(gledit)cell_density.Po -rm -f ./$(DEPDIR)/$(gledit)cell_edit.Po -rm -f ./$(DEPDIR)/$(gledit)cell_extra.Po -rm -f ./$(DEPDIR)/$(gledit)cell_pixel.Po -rm -f ./$(DEPDIR)/$(gledit)cell_shift.Po -rm -f ./$(DEPDIR)/$(gledit)cell_super.Po -rm -f ./$(DEPDIR)/$(glwin)color_box.Po -rm -f ./$(DEPDIR)/$(glwin)glwindow.Po -rm -f ./$(DEPDIR)/$(glwin)initchain.Po -rm -f ./$(DEPDIR)/$(glwin)initcoord.Po -rm -f ./$(DEPDIR)/$(glwin)initmol.Po -rm -f ./$(DEPDIR)/$(glwin)initring.Po -rm -f ./$(DEPDIR)/$(glwin)m_anim.Po -rm -f ./$(DEPDIR)/$(glwin)m_atoms.Po -rm -f ./$(DEPDIR)/$(glwin)m_axis.Po -rm -f ./$(DEPDIR)/$(glwin)m_back.Po -rm -f ./$(DEPDIR)/$(glwin)m_bonds.Po -rm -f ./$(DEPDIR)/$(glwin)m_box.Po -rm -f ./$(DEPDIR)/$(glwin)m_clones.Po -rm -f ./$(DEPDIR)/$(glwin)m_coord.Po -rm -f ./$(DEPDIR)/$(glwin)m_edit.Po -rm -f ./$(DEPDIR)/$(glwin)m_map.Po -rm -f ./$(DEPDIR)/$(glwin)m_poly.Po -rm -f ./$(DEPDIR)/$(glwin)m_proj.Po -rm -f ./$(DEPDIR)/$(glwin)m_quality.Po -rm -f ./$(DEPDIR)/$(glwin)m_render.Po -rm -f ./$(DEPDIR)/$(glwin)m_rep.Po -rm -f ./$(DEPDIR)/$(glwin)m_style.Po -rm -f ./$(DEPDIR)/$(glwin)m_tools.Po -rm -f ./$(DEPDIR)/$(glwin)menu_bar.Po -rm -f ./$(DEPDIR)/$(glwin)popup.Po -rm -f ./$(DEPDIR)/$(glwin)w_advance.Po -rm -f ./$(DEPDIR)/$(glwin)w_atoms.Po -rm -f ./$(DEPDIR)/$(glwin)w_axis.Po -rm -f ./$(DEPDIR)/$(glwin)w_bonds.Po -rm -f ./$(DEPDIR)/$(glwin)w_box.Po -rm -f ./$(DEPDIR)/$(glwin)w_chains.Po -rm -f ./$(DEPDIR)/$(glwin)w_colors.Po -rm -f ./$(DEPDIR)/$(glwin)w_coord.Po -rm -f ./$(DEPDIR)/$(glwin)w_cutoffs.Po -rm -f ./$(DEPDIR)/$(glwin)w_encode.Po -rm -f ./$(DEPDIR)/$(glwin)w_labels.Po -rm -f ./$(DEPDIR)/$(glwin)w_library.Po -rm -f ./$(DEPDIR)/$(glwin)w_measures.Po -rm -f ./$(DEPDIR)/$(glwin)w_periodic.Po -rm -f ./$(DEPDIR)/$(glwin)w_record.Po -rm -f ./$(DEPDIR)/$(glwin)w_rings.Po -rm -f ./$(DEPDIR)/$(glwin)w_search.Po -rm -f ./$(DEPDIR)/$(glwin)w_sequencer.Po -rm -f ./$(DEPDIR)/$(glwin)w_spiner.Po -rm -f ./$(DEPDIR)/$(glwin)w_volumes.Po -rm -f ./$(DEPDIR)/$(gui)bdcall.Po -rm -f ./$(DEPDIR)/$(gui)calc_menu.Po -rm -f ./$(DEPDIR)/$(gui)callbacks.Po -rm -f ./$(DEPDIR)/$(gui)chainscall.Po -rm -f ./$(DEPDIR)/$(gui)edit_menu.Po -rm -f ./$(DEPDIR)/$(gui)grcall.Po -rm -f ./$(DEPDIR)/$(gui)gtk-misc.Po -rm -f ./$(DEPDIR)/$(gui)gui.Po -rm -f ./$(DEPDIR)/$(gui)initc.Po -rm -f ./$(DEPDIR)/$(gui)interface.Po -rm -f ./$(DEPDIR)/$(gui)main.Po -rm -f ./$(DEPDIR)/$(gui)msdcall.Po -rm -f ./$(DEPDIR)/$(gui)preferences.Po -rm -f ./$(DEPDIR)/$(gui)ringscall.Po -rm -f ./$(DEPDIR)/$(gui)sktcall.Po -rm -f ./$(DEPDIR)/$(gui)spcall.Po -rm -f ./$(DEPDIR)/$(gui)sqcall.Po -rm -f ./$(DEPDIR)/$(gui)tools.Po -rm -f ./$(DEPDIR)/$(gui)work_menu.Po -rm -f ./$(DEPDIR)/$(lammps)la_print.Po -rm -f ./$(DEPDIR)/$(ogl)arcball.Po -rm -f ./$(DEPDIR)/$(ogl)glview.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_draw.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_shaders.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_shading.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_utils.Po -rm -f ./$(DEPDIR)/$(ogl)selection.Po -rm -f ./$(DEPDIR)/$(proj)close_p.Po -rm -f ./$(DEPDIR)/$(proj)debugio.Po -rm -f ./$(DEPDIR)/$(proj)init_p.Po -rm -f ./$(DEPDIR)/$(proj)open_p.Po -rm -f ./$(DEPDIR)/$(proj)project.Po -rm -f ./$(DEPDIR)/$(proj)read_bond.Po -rm -f ./$(DEPDIR)/$(proj)read_curve.Po -rm -f ./$(DEPDIR)/$(proj)read_field.Po -rm -f ./$(DEPDIR)/$(proj)read_mol.Po -rm -f ./$(DEPDIR)/$(proj)read_opengl.Po -rm -f ./$(DEPDIR)/$(proj)read_qm.Po -rm -f ./$(DEPDIR)/$(proj)save_bond.Po -rm -f ./$(DEPDIR)/$(proj)save_curve.Po -rm -f ./$(DEPDIR)/$(proj)save_field.Po -rm -f ./$(DEPDIR)/$(proj)save_mol.Po -rm -f ./$(DEPDIR)/$(proj)save_opengl.Po -rm -f ./$(DEPDIR)/$(proj)save_p.Po -rm -f ./$(DEPDIR)/$(proj)save_qm.Po -rm -f ./$(DEPDIR)/$(proj)update_p.Po -rm -f ./$(DEPDIR)/$(read)read_c3d.Po -rm -f ./$(DEPDIR)/$(read)read_cif.Po -rm -f ./$(DEPDIR)/$(read)read_coord.Po -rm -f ./$(DEPDIR)/$(read)read_hist.Po -rm -f ./$(DEPDIR)/$(read)read_isaacs.Po -rm -f ./$(DEPDIR)/$(read)read_npt.Po -rm -f ./$(DEPDIR)/$(read)read_pdb.Po -rm -f ./$(DEPDIR)/$(read)read_trj.Po -rm -f ./$(DEPDIR)/$(read)read_vas.Po -rm -f ./$(DEPDIR)/$(read)read_xyz.Po -rm -f ./$(DEPDIR)/$(work)modelinfo.Po -rm -f ./$(DEPDIR)/$(work)workinfo.Po -rm -f ./$(DEPDIR)/$(work)workspace.Po -rm -f ./$(DEPDIR)/global.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/$(calc)calc.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_basis.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_files.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_gth-basis.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_init.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_mol.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_molopt-basis.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_pot.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_print.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_atoms.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_init.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_nose.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_print.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_restart.Po -rm -f ./$(DEPDIR)/$(curve)cedit.Po -rm -f ./$(DEPDIR)/$(curve)curve.Po -rm -f ./$(DEPDIR)/$(curve)cwidget.Po -rm -f ./$(DEPDIR)/$(curve)datab.Po -rm -f ./$(DEPDIR)/$(curve)draw.Po -rm -f ./$(DEPDIR)/$(curve)frame.Po -rm -f ./$(DEPDIR)/$(curve)glyph.Po -rm -f ./$(DEPDIR)/$(curve)labels.Po -rm -f ./$(DEPDIR)/$(curve)legend.Po -rm -f ./$(DEPDIR)/$(curve)m_curve.Po -rm -f ./$(DEPDIR)/$(curve)show.Po -rm -f ./$(DEPDIR)/$(curve)tab-1.Po -rm -f ./$(DEPDIR)/$(curve)tab-2.Po -rm -f ./$(DEPDIR)/$(curve)tab-3.Po -rm -f ./$(DEPDIR)/$(curve)tab-4.Po -rm -f ./$(DEPDIR)/$(curve)title.Po -rm -f ./$(DEPDIR)/$(curve)w_curve.Po -rm -f ./$(DEPDIR)/$(curve)w_data.Po -rm -f ./$(DEPDIR)/$(curve)w_img.Po -rm -f ./$(DEPDIR)/$(curve)xaxis.Po -rm -f ./$(DEPDIR)/$(curve)yaxis.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_active.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_atom.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_comp.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_control.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_copy.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_edit.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_ff_match.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_field.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_init.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_mol.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_print.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_viz.Po -rm -f ./$(DEPDIR)/$(fields)force_fields.Po -rm -f ./$(DEPDIR)/$(gldraw)d_atoms.Po -rm -f ./$(DEPDIR)/$(gldraw)d_axis.Po -rm -f ./$(DEPDIR)/$(gldraw)d_background.Po -rm -f ./$(DEPDIR)/$(gldraw)d_bonds.Po -rm -f ./$(DEPDIR)/$(gldraw)d_box.Po -rm -f ./$(DEPDIR)/$(gldraw)d_label.Po -rm -f ./$(DEPDIR)/$(gldraw)d_measures.Po -rm -f ./$(DEPDIR)/$(gldraw)d_poly.Po -rm -f ./$(DEPDIR)/$(gldraw)d_rings.Po -rm -f ./$(DEPDIR)/$(gldraw)d_selection.Po -rm -f ./$(DEPDIR)/$(gldraw)image.Po -rm -f ./$(DEPDIR)/$(gldraw)movie.Po -rm -f ./$(DEPDIR)/$(gldraw)ogl_text.Po -rm -f ./$(DEPDIR)/$(gledit)atom_action.Po -rm -f ./$(DEPDIR)/$(gledit)atom_coord.Po -rm -f ./$(DEPDIR)/$(gledit)atom_edit.Po -rm -f ./$(DEPDIR)/$(gledit)atom_geo.Po -rm -f ./$(DEPDIR)/$(gledit)atom_insert.Po -rm -f ./$(DEPDIR)/$(gledit)atom_move.Po -rm -f ./$(DEPDIR)/$(gledit)atom_object.Po -rm -f ./$(DEPDIR)/$(gledit)atom_remove.Po -rm -f ./$(DEPDIR)/$(gledit)atom_search.Po -rm -f ./$(DEPDIR)/$(gledit)atom_species.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_action.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_edit.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_info.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_sg.Po -rm -f ./$(DEPDIR)/$(gledit)cell_cut.Po -rm -f ./$(DEPDIR)/$(gledit)cell_density.Po -rm -f ./$(DEPDIR)/$(gledit)cell_edit.Po -rm -f ./$(DEPDIR)/$(gledit)cell_extra.Po -rm -f ./$(DEPDIR)/$(gledit)cell_pixel.Po -rm -f ./$(DEPDIR)/$(gledit)cell_shift.Po -rm -f ./$(DEPDIR)/$(gledit)cell_super.Po -rm -f ./$(DEPDIR)/$(glwin)color_box.Po -rm -f ./$(DEPDIR)/$(glwin)glwindow.Po -rm -f ./$(DEPDIR)/$(glwin)initchain.Po -rm -f ./$(DEPDIR)/$(glwin)initcoord.Po -rm -f ./$(DEPDIR)/$(glwin)initmol.Po -rm -f ./$(DEPDIR)/$(glwin)initring.Po -rm -f ./$(DEPDIR)/$(glwin)m_anim.Po -rm -f ./$(DEPDIR)/$(glwin)m_atoms.Po -rm -f ./$(DEPDIR)/$(glwin)m_axis.Po -rm -f ./$(DEPDIR)/$(glwin)m_back.Po -rm -f ./$(DEPDIR)/$(glwin)m_bonds.Po -rm -f ./$(DEPDIR)/$(glwin)m_box.Po -rm -f ./$(DEPDIR)/$(glwin)m_clones.Po -rm -f ./$(DEPDIR)/$(glwin)m_coord.Po -rm -f ./$(DEPDIR)/$(glwin)m_edit.Po -rm -f ./$(DEPDIR)/$(glwin)m_map.Po -rm -f ./$(DEPDIR)/$(glwin)m_poly.Po -rm -f ./$(DEPDIR)/$(glwin)m_proj.Po -rm -f ./$(DEPDIR)/$(glwin)m_quality.Po -rm -f ./$(DEPDIR)/$(glwin)m_render.Po -rm -f ./$(DEPDIR)/$(glwin)m_rep.Po -rm -f ./$(DEPDIR)/$(glwin)m_style.Po -rm -f ./$(DEPDIR)/$(glwin)m_tools.Po -rm -f ./$(DEPDIR)/$(glwin)menu_bar.Po -rm -f ./$(DEPDIR)/$(glwin)popup.Po -rm -f ./$(DEPDIR)/$(glwin)w_advance.Po -rm -f ./$(DEPDIR)/$(glwin)w_atoms.Po -rm -f ./$(DEPDIR)/$(glwin)w_axis.Po -rm -f ./$(DEPDIR)/$(glwin)w_bonds.Po -rm -f ./$(DEPDIR)/$(glwin)w_box.Po -rm -f ./$(DEPDIR)/$(glwin)w_chains.Po -rm -f ./$(DEPDIR)/$(glwin)w_colors.Po -rm -f ./$(DEPDIR)/$(glwin)w_coord.Po -rm -f ./$(DEPDIR)/$(glwin)w_cutoffs.Po -rm -f ./$(DEPDIR)/$(glwin)w_encode.Po -rm -f ./$(DEPDIR)/$(glwin)w_labels.Po -rm -f ./$(DEPDIR)/$(glwin)w_library.Po -rm -f ./$(DEPDIR)/$(glwin)w_measures.Po -rm -f ./$(DEPDIR)/$(glwin)w_periodic.Po -rm -f ./$(DEPDIR)/$(glwin)w_record.Po -rm -f ./$(DEPDIR)/$(glwin)w_rings.Po -rm -f ./$(DEPDIR)/$(glwin)w_search.Po -rm -f ./$(DEPDIR)/$(glwin)w_sequencer.Po -rm -f ./$(DEPDIR)/$(glwin)w_spiner.Po -rm -f ./$(DEPDIR)/$(glwin)w_volumes.Po -rm -f ./$(DEPDIR)/$(gui)bdcall.Po -rm -f ./$(DEPDIR)/$(gui)calc_menu.Po -rm -f ./$(DEPDIR)/$(gui)callbacks.Po -rm -f ./$(DEPDIR)/$(gui)chainscall.Po -rm -f ./$(DEPDIR)/$(gui)edit_menu.Po -rm -f ./$(DEPDIR)/$(gui)grcall.Po -rm -f ./$(DEPDIR)/$(gui)gtk-misc.Po -rm -f ./$(DEPDIR)/$(gui)gui.Po -rm -f ./$(DEPDIR)/$(gui)initc.Po -rm -f ./$(DEPDIR)/$(gui)interface.Po -rm -f ./$(DEPDIR)/$(gui)main.Po -rm -f ./$(DEPDIR)/$(gui)msdcall.Po -rm -f ./$(DEPDIR)/$(gui)preferences.Po -rm -f ./$(DEPDIR)/$(gui)ringscall.Po -rm -f ./$(DEPDIR)/$(gui)sktcall.Po -rm -f ./$(DEPDIR)/$(gui)spcall.Po -rm -f ./$(DEPDIR)/$(gui)sqcall.Po -rm -f ./$(DEPDIR)/$(gui)tools.Po -rm -f ./$(DEPDIR)/$(gui)work_menu.Po -rm -f ./$(DEPDIR)/$(lammps)la_print.Po -rm -f ./$(DEPDIR)/$(ogl)arcball.Po -rm -f ./$(DEPDIR)/$(ogl)glview.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_draw.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_shaders.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_shading.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_utils.Po -rm -f ./$(DEPDIR)/$(ogl)selection.Po -rm -f ./$(DEPDIR)/$(proj)close_p.Po -rm -f ./$(DEPDIR)/$(proj)debugio.Po -rm -f ./$(DEPDIR)/$(proj)init_p.Po -rm -f ./$(DEPDIR)/$(proj)open_p.Po -rm -f ./$(DEPDIR)/$(proj)project.Po -rm -f ./$(DEPDIR)/$(proj)read_bond.Po -rm -f ./$(DEPDIR)/$(proj)read_curve.Po -rm -f ./$(DEPDIR)/$(proj)read_field.Po -rm -f ./$(DEPDIR)/$(proj)read_mol.Po -rm -f ./$(DEPDIR)/$(proj)read_opengl.Po -rm -f ./$(DEPDIR)/$(proj)read_qm.Po -rm -f ./$(DEPDIR)/$(proj)save_bond.Po -rm -f ./$(DEPDIR)/$(proj)save_curve.Po -rm -f ./$(DEPDIR)/$(proj)save_field.Po -rm -f ./$(DEPDIR)/$(proj)save_mol.Po -rm -f ./$(DEPDIR)/$(proj)save_opengl.Po -rm -f ./$(DEPDIR)/$(proj)save_p.Po -rm -f ./$(DEPDIR)/$(proj)save_qm.Po -rm -f ./$(DEPDIR)/$(proj)update_p.Po -rm -f ./$(DEPDIR)/$(read)read_c3d.Po -rm -f ./$(DEPDIR)/$(read)read_cif.Po -rm -f ./$(DEPDIR)/$(read)read_coord.Po -rm -f ./$(DEPDIR)/$(read)read_hist.Po -rm -f ./$(DEPDIR)/$(read)read_isaacs.Po -rm -f ./$(DEPDIR)/$(read)read_npt.Po -rm -f ./$(DEPDIR)/$(read)read_pdb.Po -rm -f ./$(DEPDIR)/$(read)read_trj.Po -rm -f ./$(DEPDIR)/$(read)read_vas.Po -rm -f ./$(DEPDIR)/$(read)read_xyz.Po -rm -f ./$(DEPDIR)/$(work)modelinfo.Po -rm -f ./$(DEPDIR)/$(work)workinfo.Po -rm -f ./$(DEPDIR)/$(work)workspace.Po -rm -f ./$(DEPDIR)/global.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-binPROGRAMS \ clean-generic cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS .PRECIOUS: Makefile @WINDOWS_TRUE@win_atomes.o: ../misc/win/atomes.rc @WINDOWS_TRUE@ $(WINDRES) $< $@ $(patsubst %.F90,%.o,$(atomes_fortran_files)): $(patsubst %.F90,%.o,$(atomes_fortran_modules)) clean: -rm -f *.mod -rm -f */*.o -rm -f */*/*.o # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Tell GNU make to disable its built-in pattern rules. %:: %,v %:: RCS/%,v %:: RCS/% %:: s.% %:: SCCS/s.% atomes_1.3.1/src/calc/0000775000175000017500000000000015212624223014176 5ustar lerouxlerouxatomes_1.3.1/src/calc/force_fields/0000775000175000017500000000000015212624223016622 5ustar lerouxlerouxatomes_1.3.1/src/calc/force_fields/charmm36_prot.c0000664000175000017500000047415715212624223021474 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm36_prot.c * @short CHARMM-charmm36_prot force field, from 'charmm36_prot' * @author Sébastien Le Roux */ /* * This file: 'charmm36_prot.c' * * Contains: * CHARMM-charmm36_prot force field, data from taken from: - the file: 'charmm36_prot' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm36_prot_atoms[53][5] Bonds : charmm36_prot_bonds[132][5] Angles : charmm36_prot_angles[364][8] Dihedrals : charmm36_prot_dihedrals[705][8] Impropers : charmm36_prot_impropers[35][8] Non bonded : charmm36_prot_vdw[53][6] */ #include "global.h" int charmm36_prot_objects[14] = {53, 0, 0, 132, 0, 0, 364, 0, 705, 0 , 0, 35, 53, 0}; int charmm36_prot_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm36_prot info */ char * charmm36_prot_atoms[53][5]= {{"H", "1.00800", "H", "polar H", "31"}, {"H", "1.00800", "HC", "N-ter H", "32"}, {"H", "1.00800", "HA", "nonpolar H", "33"}, {"H", "1.00800", "HP", "aromatic H", "34"}, {"H", "1.00800", "HB1", "backbone H", "35"}, {"H", "1.00800", "HB2", "aliphatic backbone H, to CT2", "36"}, {"H", "1.00800", "HR1", "his he1, (+) his HG,HD2", "37"}, {"H", "1.00800", "HR2", "(+) his HE1", "38"}, {"H", "1.00800", "HR3", "neutral his HG, HD2", "39"}, {"H", "1.00800", "HS", "thiol hydrogen", "40"}, {"H", "1.00800", "HE1", "for alkene; RHC=CR", "41"}, {"H", "1.00800", "HE2", "for alkene; H2C=CR", "42"}, {"H", "1.00800", "HA1", "alkane, CH, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "43"}, {"H", "1.00800", "HA2", "alkane, CH2, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "44"}, {"H", "1.00800", "HA3", "alkane, CH3, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "45"}, {"C", "12.01100", "C", "carbonyl C, peptide backbone", "46"}, {"C", "12.01100", "CA", "aromatic C", "47"}, {"C", "12.01100", "CT", "aliphatic sp3 C, new LJ params, no hydrogens, see retinol stream file for parameters", "48"}, {"C", "12.01100", "CT1", "aliphatic sp3 C for CH", "49"}, {"C", "12.01100", "CT2", "aliphatic sp3 C for CH2", "50"}, {"C", "12.01100", "CT2A", "from CT2 (GLU, HSP chi1/chi2 fitting) 05282010, zhu", "51"}, {"C", "12.01100", "CT3", "aliphatic sp3 C for CH3", "52"}, {"C", "12.01100", "CPH1", "his CG and CD2 carbons", "53"}, {"C", "12.01100", "CPH2", "his CE1 carbon", "54"}, {"C", "12.01100", "CPT", "trp C between rings", "55"}, {"C", "12.01100", "CY", "TRP C in pyrrole ring", "56"}, {"C", "12.01100", "CP1", "tetrahedral C (proline CA)", "57"}, {"C", "12.01100", "CP2", "tetrahedral C (proline CB/CG)", "58"}, {"C", "12.01100", "CP3", "tetrahedral C (proline CD)", "59"}, {"C", "12.01100", "CC", "carbonyl C, asn,asp,gln,glu,cter,ct2", "60"}, {"C", "12.01100", "CD", "carbonyl C, pres aspp,glup,ct1", "61"}, {"C", "12.01100", "CS", "thiolate carbon", "62"}, {"C", "12.01100", "CE1", "for alkene; RHC=CR", "63"}, {"C", "12.01100", "CE2", "for alkene; H2C=CR", "64"}, {"C", "12.01100", "CAI", "aromatic C next to CPT in trp", "65"}, {"N", "14.00700", "N", "proline N", "66"}, {"N", "14.00700", "NR1", "neutral his protonated ring nitrogen", "67"}, {"N", "14.00700", "NR2", "neutral his unprotonated ring nitrogen", "68"}, {"N", "14.00700", "NR3", "charged his ring nitrogen", "69"}, {"N", "14.00700", "NH1", "peptide nitrogen", "70"}, {"N", "14.00700", "NH2", "amide nitrogen", "71"}, {"N", "14.00700", "NH3", "ammonium nitrogen", "72"}, {"N", "14.00700", "NC2", "guanidinium nitrogen", "73"}, {"N", "14.00700", "NY", "TRP N in pyrrole ring", "74"}, {"N", "14.00700", "NP", "Proline ring NH2+ (N-terminal)", "75"}, {"O", "15.99900", "O", "carbonyl oxygen", "76"}, {"O", "15.99900", "OB", "carbonyl oxygen in acetic acid", "77"}, {"O", "15.99900", "OC", "carboxylate oxygen", "78"}, {"O", "15.99900", "OH1", "hydroxyl oxygen", "79"}, {"O", "15.99940", "OS", "ester oxygen", "80"}, {"S", "32.06000", "S", "sulphur", "81"}, {"S", "32.06000", "SM", "sulfur C-S-S-C type", "82"}, {"S", "32.06000", "SS", "thiolate sulfur", "83"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm36_prot info V(R) = Kb x (R - R0)^2 */ char * charmm36_prot_bonds[132][5]= {{"NH2", "CT1", "240.000", "1.4550", " "}, {"CA", "CAI", "305.000", "1.3750", "from CA CA"}, {"CAI", "CAI", "305.000", "1.3750", "atm, methylindole, fit CCDSS"}, {"CPT", "CA", "300.000", "1.3600", "atm, methylindole, fit CCDSS"}, {"CPT", "CAI", "300.000", "1.3600", "atm, methylindole, fit CCDSS"}, {"CPT", "CPT", "360.000", "1.3850", "atm, methylindole, fit CCDSS"}, {"CY", "CA", "350.000", "1.3650", "trj, adm jr., 5/08/91, indole CCDB structure search"}, {"CY", "CAI", "350.000", "1.3650", "from CY CA"}, {"CY", "CPT", "350.000", "1.4300", "atm, methylindole, fit CDS data"}, {"CY", "CT3", "375.000", "1.4920", "atm, methylindole, fit CDS data"}, {"CY", "CT2", "375.000", "1.4920", "atm, methylindole, fit CDS data"}, {"HP", "CAI", "340.000", "1.0800", "from HP CA"}, {"HP", "CY", "350.000", "1.0800", "trp, adm jr., 12/30/91"}, {"NY", "CA", "270.000", "1.3700", "trp, adm jr., 12/30/91"}, {"NY", "CPT", "270.000", "1.3700", "atm, methylindole, from CCDS 1/17/04"}, {"NY", "H", "537.500", "0.9760", "atm, methylindole, 1/17/04"}, {"CA", "CA", "305.000", "1.3750", "benzene, JES 8/25/89"}, {"CE1", "CE1", "440.000", "1.3400", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CE2", "500.000", "1.3420", "for propene, yin/adm jr., 12/95"}, {"CE1", "CT2", "365.000", "1.5020", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CT3", "383.000", "1.5040", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE2", "510.000", "1.3300", "for ethene, yin/adm jr., 12/95"}, {"CP1", "C", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CC", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CD", "200.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "222.500", "1.5270", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH1", "CPH1", "410.000", "1.3600", "histidine, adm jr., 6/27/90"}, {"CT1", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT1", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT1", "222.500", "1.5000", "alkane update, adm jr., 3/2/92"}, {"CT2", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT2", "CA", "230.000", "1.4900", "phe,tyr, JES 8/25/89"}, {"CT2", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT2", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"CT3", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT3", "CA", "230.000", "1.4900", "toluene, adm jr. 3/7/92"}, {"CT3", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT3", "CS", "190.000", "1.5310", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CT3", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "222.500", "1.5280", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT3", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"H", "CD", "330.000", "1.1100", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA1", "CC", "317.130", "1.1000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"HA2", "CP2", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CS", "300.000", "1.1110", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CS", "300.000", "1.1110", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA1", "CT1", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA2", "CT2", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "322.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HE1", "CE1", "360.500", "1.1000", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "365.000", "1.1000", "for ethene, yin/adm jr., 12/95"}, {"HB1", "CP1", "330.000", "1.0800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CT1", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HP", "CA", "340.000", "1.0800", "phe,tyr JES 8/25/89"}, {"HR1", "CPH1", "375.000", "1.0830", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "340.000", "1.0900", "his, adm jr., 6/28/29"}, {"HR2", "CPH2", "333.000", "1.0700", "his, adm jr., 6/27/90"}, {"HR3", "CPH1", "365.000", "1.0830", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "260.000", "1.3000", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "320.000", "1.4340", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "320.000", "1.4550", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "450.000", "1.3650", "mp2/6-311g** mgua vib. data, adm jr., 1/04"}, {"NC2", "CT2", "390.000", "1.4900", "mp2/6-311g** mgua vib. data, adm jr., 1/04"}, {"NC2", "CT3", "390.000", "1.4900", "mp2/6-311g** mgua vib. data, adm jr., 1/04"}, {"NC2", "HC", "455.000", "1.0000", "405.0->455.0 GUANIDINIUM (KK)"}, {"NH1", "C", "370.000", "1.3450", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT2", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT3", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "H", "440.000", "0.9970", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "HC", "405.000", "0.9800", "(DS)"}, {"NH2", "CC", "430.000", "1.3600", "adm jr. 4/10/91, acetamide"}, {"NH2", "CT2", "240.000", "1.4550", "from NH2 CT3, neutral glycine, adm jr."}, {"NH2", "CT3", "240.000", "1.4550", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH2", "H", "480.000", "1.0000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "HC", "460.000", "1.0000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT3", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "HC", "403.000", "1.0400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "320.000", "1.4850", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "320.000", "1.5020", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "HC", "460.000", "1.0060", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR1", "CPH2", "400.000", "1.3600", "his, ADM JR., 7/20/89"}, {"NR1", "H", "466.000", "1.0000", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "400.000", "1.3200", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "380.000", "1.3700", "his, adm jr., 6/28/90"}, {"NR3", "CPH2", "380.000", "1.3200", "his, adm jr., 6/27/90"}, {"NR3", "H", "453.000", "1.0000", "his, adm jr., 6/27/90"}, {"O", "C", "620.000", "1.2300", "Peptide geometry, condensed phase (LK)"}, {"O", "CC", "650.000", "1.2300", "adm jr. 4/10/91, acetamide"}, {"OB", "CC", "750.000", "1.2200", "adm jr., 10/17/90, acetic acid vibrations and geom."}, {"OB", "CD", "750.000", "1.2200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "525.000", "1.2600", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "525.000", "1.2600", "adm jr. 7/23/91, acetic acid"}, {"OC", "CT2", "450.000", "1.3300", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "450.000", "1.3300", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "334.300", "1.4110", "MeOH, EMB 10/10/89,"}, {"OH1", "CD", "230.000", "1.4000", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OH1", "CT1", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT2", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT3", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "H", "545.000", "0.9600", "EMB 11/21/89 methanol vib fit"}, {"OS", "CD", "150.000", "1.3340", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OS", "CT3", "340.000", "1.4300", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"S", "CT2", "198.000", "1.8180", "fitted to C-S s 9/26/92 (FL)"}, {"S", "CT3", "240.000", "1.8160", "fitted to C-S s 9/26/92 (FL)"}, {"S", "HS", "275.000", "1.3250", "methanethiol pure solvent, adm jr., 6/22/92"}, {"SM", "CT2", "214.000", "1.8160", "improved CSSC surface in DMDS 5/15/92 (FL)"}, {"SM", "CT3", "214.000", "1.8160", "improved CSSC surface in DMDS 5/15/92 (FL)"}, {"SM", "SM", "173.000", "2.0290", "improved CSSC surface in DMDS 5/15/92 (FL)"}, {"SS", "CS", "205.000", "1.8360", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HR1", "CD", "330.000", "1.1100", "acetaldehyde, benzaldehyde, 3ALP"}, {"O", "CD", "720.000", "1.2050", "acetaldehyde, benzaldehyde, 3ALP. from stream/toppar_all27_na_bkb_modifications.str"}, {"CT2A", "CT1", "222.500", "1.5380", "from CT2 CT1, Zhu"}, {"CT2", "CT2A", "222.500", "1.5300", "from CT2 CT2, Zhu"}, {"CT2A", "HA2", "309.000", "1.1110", "from HA2 CT2, Zhu"}, {"CT2A", "CPH1", "229.630", "1.5000", "from CT2 CPH1, Zhu"}, {"CT2A", "CC", "200.000", "1.5220", "RESI CYSM and PRES CYSD"}, {"CT1", "CS", "190.000", "1.5380", " "}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm36_prot info V(S) = Kub x (S - S0)^2 */ char * charmm36_prot_angles[364][8]= {{"H", "NH2", "CT1", "50.000", "111.00", " ", " ", "From LSN HC-NH2-CT2"}, {"H", "NH2", "CT2", "50.000", "111.00", " ", " ", "From LSN HC-NH2-CT2, Neutral Gly Nterminus"}, {"NH2", "CT1", "CT1", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"NH2", "CT1", "CT2", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"NH2", "CT1", "CT3", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"CT1", "CD", "OH1", "55.000", "110.50", " ", " ", "From ASPP CT2-CD-OH1"}, {"CT3", "CT1", "CD", "52.000", "108.00", " ", " ", "Ala cter"}, {"NH2", "CT1", "HB1", "38.000", "109.50", "50.00", "2.1400", "From LSN NH2-CT2-HA"}, {"NH2", "CT1", "C", "50.000", "107.00", " ", " ", "From ALA Dipep. NH1-CT2-C"}, {"NH2", "CT2", "C", "50.000", "107.00", " ", " ", "From ALA Dipep. NH1-CT2-C, Neutral Gly Nterminus"}, {"CAI", "CAI", "CA", "40.000", "120.00", "35.00", "2.41620", "from CA CA CA"}, {"CAI", "CA", "CA", "40.000", "120.00", "35.00", "2.41620", "from CA CA CA"}, {"CPT", "CA", "CA", "50.000", "113.20", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CPT", "CA", "50.000", "110.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CAI", "CA", "50.000", "113.20", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CPT", "CAI", "50.000", "110.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CY", "CA", "85.000", "106.40", "25.00", "2.26100", "atm, methylindole, 1/17/04"}, {"CPT", "NY", "CA", "85.000", "112.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CT2", "CY", "CA", "30.000", "127.00", " ", " ", "atm, methylindole, CT3 CY CA"}, {"CT2", "CY", "CPT", "30.000", "126.70", " ", " ", "atm, methylindole, 1/17/04"}, {"CT3", "CY", "CA", "30.000", "127.00", " ", " ", "atm, methylindole, CT3 CY CA"}, {"CT3", "CY", "CPT", "30.000", "126.70", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CA", "130.000", "133.50", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CAI", "130.000", "133.50", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CPT", "85.000", "108.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CT2", "CT1", "58.350", "114.00", " ", " ", "from TRP crystal, JWK"}, {"CY", "CT2", "CT3", "58.350", "114.00", " ", " ", "from TRP crystal, JWK"}, {"H", "NY", "CA", "28.000", "126.00", " ", " ", "trp, adm jr., 12/30/91"}, {"H", "NY", "CAI", "28.000", "126.00", " ", " ", "trp, adm jr., 12/30/91"}, {"H", "NY", "CPT", "28.000", "126.00", " ", " ", "trp, adm jr., 12/30/91"}, {"HA2", "CT2", "CY", "55.000", "109.50", " ", " ", "atm, methylindole, 1/17/04"}, {"HA3", "CT3", "CY", "55.000", "109.50", " ", " ", "atm, methylindole, 1/17/04"}, {"HP", "CA", "CAI", "30.000", "120.00", "22.00", "2.15250", "from HP CA CA"}, {"HP", "CAI", "CA", "30.000", "120.00", "22.00", "2.15250", "from HP CA CA"}, {"HP", "CA", "CPT", "30.000", "122.00", "22.00", "2.14600", "trp, adm jr., 12/30/91"}, {"HP", "CAI", "CPT", "30.000", "122.00", "22.00", "2.14600", "from HP CA CPT"}, {"HP", "CA", "CY", "32.000", "125.00", "25.00", "2.17300", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HP", "CY", "CA", "32.000", "126.40", "25.00", "2.18600", "trp, adm jr., 12/30/91"}, {"HP", "CY", "CPT", "32.000", "126.40", "25.00", "2.25500", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CA", "CY", "85.000", "110.50", "25.00", "2.24000", "trp, adm jr., 12/30/91"}, {"NY", "CA", "HP", "32.000", "125.00", "25.00", "2.17700", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CPT", "CA", "130.000", "129.50", " ", " ", "atm, methylindole, 1/17/04"}, {"NY", "CPT", "CAI", "130.000", "129.50", " ", " ", "atm, methylindole, 1/17/04"}, {"NY", "CPT", "CPT", "95.000", "107.40", " ", " ", "atm, methylindole, 1/17/04"}, {"CA", "CA", "CA", "40.000", "120.00", "35.00", "2.41620", "JES 8/25/89"}, {"CE1", "CE1", "CT2", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CE1", "CT3", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CT2", "CT3", "32.00", "112.20", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "48.00", "126.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "47.00", "125.20", " ", " ", "for propene, yin/adm jr., 12/95"}, {"CP1", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "C", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CC", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CD", "50.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "CP1", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "100.000", "114.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "100.000", "111.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "130.000", "107.5000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR2", "CPH1", "130.000", "104.0000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR3", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"CT1", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT1", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 6/27/2012, for Thr with CT1 patch"}, {"CT1", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT1", "CT2", "CA", "51.800", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"CT1", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT1", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT1", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "CA", "CA", "45.800", "122.3000", " ", " ", "PARALLH19 (JES)"}, {"CT2", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT2", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT2", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2A", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C, for lactams, adm jr."}, {"CT2", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2A", "CT2", "CD", "52.000", "108.0000", " ", " ", "for GLUP, ZHU"}, {"CT2", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "CT2", "CT2", "58.350", "113.60", "11.16", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT3", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "NC2", "C", "62.300", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"CT2", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CA", "CA", "45.800", "122.3000", " ", " ", "toluene, adm jr., 3/7/92"}, {"CT3", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT3", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT3", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/09/92, for ALA cter"}, {"CT3", "CT1", "CT1", "53.350", "108.50", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT2", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CA", "51.800", "107.5000", " ", " ", "ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT3", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT3", "CT2", "CT2", "58.000", "115.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "NC2", "C", "62.300", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"CT3", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT3", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "S", "CT2", "34.000", "95.0000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"H", "NH1", "C", "34.000", "123.0000", " ", " ", "NMA Vib Modes (LK)"}, {"H", "NH1", "CT1", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT2", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT3", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH2", "CC", "50.000", "120.0000", " ", " ", "his, adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NH2", "H", "23.000", "120.0000", " ", " ", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NR1", "CPH1", "30.000", "125.50", "20.00", "2.15000", "his, adm jr., 6/27/90"}, {"H", "NR1", "CPH2", "30.000", "127.00", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "25.000", "126.00", "15.00", "2.13000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH2", "25.000", "126.00", "15.00", "2.09000", "his, adm jr., 6/27/90"}, {"H", "OH1", "CA", "65.000", "108.0000", " ", " ", "JES 8/25/89 phenol"}, {"H", "OH1", "CD", "55.000", "115.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "OH1", "CT1", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT2", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT3", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"HA2", "CP2", "CP1", "33.430", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP2", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP2", "CP3", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP2", "HA2", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "HA2", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CS", "CT3", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA2", "CS", "HA2", "35.500", "108.40", "14.00", "1.77500", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CS", "HA3", "35.500", "108.40", "14.00", "1.77500", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA1", "CT1", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA1", "CT1", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA1", "CT1", "CT1", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA1", "CT1", "CT2", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA1", "CT1", "CT3", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA1", "CT1", "HA1", "35.500", "109.00", "5.40", "1.80200", "based on HA CT2 HA"}, {"HA2", "CT2", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA2", "CT2", "CA", "49.300", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"HA2", "CT2", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA2", "CT2", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA2", "CT2", "CE1", "45.00", "111.50", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HA2", "CT2", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA2", "CT2", "CT1", "26.500", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA2", "CT2", "CT2", "26.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA2", "CT2", "CT3", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA2", "CT2", "HA2", "35.500", "109.00", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA3", "CT3", "CA", "49.300", "107.5000", " ", " ", "toluene, adm jr. 3/7/92"}, {"HA3", "CT3", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA3", "CT3", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA3", "CT3", "CE1", "42.00", "111.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HA3", "CT3", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA3", "CT3", "CS", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CT3", "CT1", "33.430", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA3", "CT3", "CT2", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "CT3", "37.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "HA3", "35.500", "108.40", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HE1", "CE1", "CE1", "52.00", "119.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CE2", "42.00", "118.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "40.00", "116.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "22.00", "117.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE1", "45.00", "120.50", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE2", "55.50", "120.50", " ", " ", "for ethene, yin/adm jr., 12/95"}, {"HE2", "CE2", "HE2", "19.00", "119.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HB1", "CP1", "C", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "CC", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "CD", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "CP2", "35.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CT1", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB1", "CT1", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB1", "CT1", "CT1", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "CT2", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "CT3", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB2", "CT2", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB2", "CT2", "HB2", "36.000", "115.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NC2", "C", "49.000", "120.0000", " ", " ", "35.3->49.0 GUANIDINIUM (KK)"}, {"HC", "NC2", "CT2", "40.400", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"HC", "NC2", "CT3", "40.400", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"HC", "NC2", "HC", "25.000", "120.0000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH2", "CT2", "50.000", "111.0000", " ", " ", "from HC NH2 CT3, neutral glycine, adm jr."}, {"HC", "NH2", "CT3", "50.000", "111.0000", " ", " ", "methylamine geom/freq, adm jr., 6/2/92"}, {"HC", "NH2", "HC", "39.000", "106.5000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH3", "CT1", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT2", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT3", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "HC", "44.000", "109.5000", " ", " ", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NP", "CP1", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "HC", "51.000", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "30.000", "120.00", "22.00", "2.15250", "JES 8/25/89 benzene"}, {"HR1", "CPH1", "CPH1", "22.000", "130.00", "15.00", "2.21500", "adm jr., 6/27/90, his"}, {"HR3", "CPH1", "CPH1", "25.000", "130.00", "20.00", "2.20000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "38.800", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "43.000", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "C", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CC", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CD", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CP2", "70.000", "110.8000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "HB1", "48.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "CP2", "70.000", "110.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "HA2", "48.000", "108.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "NC2", "40.000", "120.00", "70.00", "2.31", "mp2/6-311g** mgua vib data, adm jr., 1/04"}, {"NC2", "CT2", "CT2", "67.700", "107.5000", " ", " ", "arg, (DS)"}, {"NC2", "CT2", "HA2", "56.500", "107.5000", " ", " ", "mp2/6-311g** mgua vib data, adm jr., 1/04"}, {"NC2", "CT3", "HA3", "56.5000", "107.5000", " ", " ", "mp2/6-311g** mgua vib data, adm jr., 1/04"}, {"NH1", "C", "CP1", "80.000", "116.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT2", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT3", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "CT1", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CC", "50.000", "107.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH1", "CT1", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT1", "CT1", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT2", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT3", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "HB1", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "CC", "50.000", "107.0000", " ", " ", "adm jr. 5/20/92, for asn,asp,gln,glu and cters"}, {"NH1", "CT2", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT2", "CT2", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2, for lactams, adm jr."}, {"NH1", "CT2", "HA2", "51.500", "109.5000", " ", " ", "from NH1 CT3 HA, for lactams, adm jr."}, {"NH1", "CT2", "HB2", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT3", "HA3", "51.500", "109.5000", " ", " ", "NMA crystal (JCS)"}, {"NH2", "CC", "CP1", "80.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT1", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT2", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT3", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "HA1", "44.000", "111.00", "50.00", "1.98000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"NH2", "CT2", "HB2", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral glycine, adm jr."}, {"NH2", "CT2", "CD", "52.000", "108.0000", " ", " ", "CT2 CT2 CD, neutral glycine, adm jr."}, {"NH2", "CT2", "CT2", "67.700", "110.0000", " ", " ", "NH3 CT2 CT2, neutral lysine"}, {"NH2", "CT2", "HA2", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral lysine"}, {"NH2", "CT3", "HA3", "38.000", "109.50", "50.00", "2.14000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "C", "43.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT1", "CT1", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT2", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT3", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "HB1", "51.500", "107.5000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT2", "C", "43.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT2", "CD", "43.700", "110.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH3", "CT2", "CT2", "67.700", "110.0000", " ", " ", "methylammonium"}, {"NH3", "CT2", "CT3", "67.700", "110.0000", " ", " ", "ethylammonium"}, {"NH3", "CT2", "HA2", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "HB2", "51.500", "107.5000", " ", " ", "for use on NTER -- from NH3 CT2HA (JCS) -- (LK)"}, {"NH3", "CT3", "HA3", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "C", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CD", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "HB1", "51.500", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "HA2", "51.500", "109.1500", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "130.000", "106.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR1", "CPH1", "CT2", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "CT3", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "HR3", "25.000", "124.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH2", "HR1", "25.000", "122.50", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR2", "CPH1", "CPH1", "130.000", "110.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "45.800", "120.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR2", "CPH1", "HR3", "25.000", "120.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH2", "HR1", "25.000", "125.00", "20.00", "2.12000", "his, adm jr., 6/27/90"}, {"NR2", "CPH2", "NR1", "130.000", "112.5000", " ", " ", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CT2", "45.800", "122.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR3", "CPH1", "HR1", "22.000", "122.00", "15.00", "2.18000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "HR2", "32.000", "126.00", "25.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "NR3", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"O", "C", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT3", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "H", "50.000", "121.7000", " ", " ", "acetaldehyde (JCS)"}, {"O", "C", "N", "80.000", "122.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "80.000", "122.5000", " ", " ", "NMA Vib Modes (LK)"}, {"O", "CC", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT1", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT2", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT3", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "HA1", "44.000", "122.0000", " ", " ", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "CC", "NH2", "75.000", "122.50", "50.00", "2.37000", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "CP1", "70.000", "125.00", "20.00", "2.44200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OB", "CD", "CT1", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT2", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT3", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "CA", "40.000", "120.0000", " ", " ", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "40.000", "118.00", "50.00", "2.38800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT2", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT3", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "OC", "100.000", "124.00", "70.00", "2.22500", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CT2", "CT3", "65.000", "122.0000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT2", "HA2", "65.000", "118.3000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "HA3", "65.000", "118.3000", " ", " ", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "CA", "45.200", "120.0000", " ", " ", "PARALLH19 WITH [122.3] (JES)"}, {"OH1", "CD", "CT2", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "CT3", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "OB", "50.000", "123.00", "210.00", "2.26200", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CT1", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "HA1", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT2", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "HA2", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT3", "HA3", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OS", "CD", "CP1", "55.000", "109.00", "20.00", "2.32600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OS", "CD", "CT1", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT2", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT3", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "OB", "90.000", "125.90", "160.00", "2.25760", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OS", "CT2", "HA2", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"OS", "CT3", "HA3", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"S", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"S", "CT2", "CT2", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "CT3", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "HA2", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"S", "CT3", "HA3", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"SM", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "CT3", "58.000", "112.5000", " ", " ", "diethyldisulfide, as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "HA2", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "CT3", "HA3", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "SM", "CT2", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "55.000", "118.0000", " ", " ", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"SS", "CS", "HA2", "40.000", "112.3000", " ", " ", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"SS", "CS", "HA3", "40.000", "112.3000", " ", " ", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"O", "CD", "HR1", "75.000", "121.0000", " ", " ", "acetaldehyde, benzaldehyde, 3ALP, retinal"}, {"NH1", "CT1", "CT2A", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2"}, {"HB1", "CT1", "CT2A", "35.000", "111.0000", " ", " ", "from HB1 CT1 CT2"}, {"CT2A", "CT1", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C"}, {"CT1", "CT2A", "HA2", "26.500", "110.1000", "22.53", "2.17900", "from HA2 CT2 CT1"}, {"CT1", "CT2A", "CT2", "58.350", "113.5000", "11.16", "2.56100", "from CT2 CT2 CT1"}, {"HA2", "CT2A", "HA2", "35.500", "109.0000", "5.40", "1.80200", "from HA2 CT2 HA2"}, {"HA2", "CT2A", "CT2", "26.500", "110.1000", "22.53", "2.17900", "from HA2 CT2 CT2"}, {"CT2A", "CT2", "HA2", "26.500", "110.1000", "22.53", "2.17900", "from HA2 CT2 CT2"}, {"CT2A", "CT2", "CC", "52.000", "108.0000", " ", " ", "from CT2 CT2 CC"}, {"CT1", "CT2A", "CPH1", "58.350", "113.0000", " ", " ", "from CT1 CT2 CPH1"}, {"HA2", "CT2A", "CPH1", "33.430", "109.5000", " ", " ", "from HA2 CT2 CPH1"}, {"CT2A", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "from CT2 CPH1 CPH1"}, {"CT2A", "CPH1", "NR3", "45.800", "122.0000", " ", " ", "from NR3 CPH1 CT2"}, {"CT1", "CT2A", "CC", "52.000", "108.0000", " ", " ", "from CT1 CT2 CC"}, {"HA2", "CT2A", "CC", "33.000", "109.5000", "30.00", "2.16300", "from HA2 CT2 CC"}, {"OC", "CC", "CT2A", "40.000", "118.0000", "50.00", "2.38800", "from OC CC CT2"}, {"NH3", "CT1", "CT2A", "67.700", "110.0000", " ", " ", "from NH3 CT1 CT2"}, {"CT2A", "CT1", "CD", "52.000", "108.0000", " ", " ", "from CT2 CT1 CD"}, {"NH2", "CT1", "CS", "67.700", "110.0000", " ", " ", "from NH2 CT1 CT2 , kevo"}, {"CS", "CT1", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C , kevo"}, {"CS", "CT1", "CC", "52.000", "108.0000", " ", " ", "from CT2 CT1 CC , kevo"}, {"CS", "CT1", "CD", "52.000", "108.0000", " ", " ", "from CT2 CT1 CD , kevo"}, {"HB1", "CT1", "CS", "35.000", "111.0000", " ", " ", "from HB1 CT1 CT2 , kevo"}, {"NH1", "CT1", "CS", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2 , kevo"}, {"NH3", "CT1", "CS", "67.700", "110.0000", " ", " ", "from NH3 CT1 CT2 , kevo"}, {"SS", "CS", "CT1", "55.000", "118.0000", " ", " ", "from SS CS CT3 , kevo"}, {"HA2", "CS", "CT1", "34.600", "110.10", "22.53", "2.17900", "from HA2 CS CT3 to be consistent with SS CS CT1, kevo"}, {"OC", "CT2", "CT1", "65.000", "122.0000", " ", " ", " "}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm36_prot info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm36_prot_dihedrals[705][8]= {{"NH2", "CT1", "C", "O", "0.0000", "1", "0.00", " "}, {"NH2", "CT2", "C", "O", "0.0000", "1", "0.00", "Neutral Gly Nterminus"}, {"NH2", "CT1", "C", "NH1", "0.0000", "1", "0.00", " "}, {"NH2", "CT2", "C", "NH1", "0.0000", "1", "0.00", "Neutral Gly Nterminus"}, {"H", "NH2", "CT1", "CT1", "0.0000", "1", "0.00", " "}, {"H", "NH2", "CT1", "C", "0.0000", "1", "0.00", " "}, {"H", "NH2", "CT2", "C", "0.0000", "1", "0.00", "Neutral Gly Nterminus"}, {"H", "NH2", "CT1", "HB1", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-HA"}, {"H", "NH2", "CT2", "HB2", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-HA, Neutral Gly Nterminus"}, {"H", "NH2", "CT1", "CT2", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-CT2"}, {"H", "NH2", "CT1", "CT3", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-CT2"}, {"CAI", "CA", "CA", "CAI", "3.1000", "2", "180.00", "from CA CA CA CA"}, {"CA", "CPT", "CPT", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CAI", "CPT", "CPT", "CAI", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CA", "CY", "CPT", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CA", "CY", "CPT", "CAI", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CA", "NY", "CPT", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CPT", "CA", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CA", "NY", "CPT", "CAI", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CPT", "CAI", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CAI", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CY", "CA", "5.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CPT", "CPT", "NY", "CA", "6.5000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CT3", "CY", "CPT", "CA", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT3", "CY", "CPT", "CAI", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT3", "CY", "CPT", "CPT", "3.0000", "2", "180.00", "atm, methylindole, meth"}, {"CT2", "CY", "CPT", "CA", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT2", "CY", "CPT", "CAI", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT2", "CY", "CPT", "CPT", "3.0000", "2", "180.00", "atm, methylindole, meth"}, {"CY", "CA", "NY", "CPT", "6.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CA", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CPT", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CAI", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CPT", "CAI", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CA", "CY", "0.0500", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CPT", "CA", "0.2000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CPT", "CAI", "0.2000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CPT", "CPT", "0.8500", "2", "180.00", "atm, methylindole, 1/17/04"}, {"HP", "CAI", "CA", "CA", "4.2000", "2", "180.00", "from HP CA CA CA"}, {"HP", "CA", "CA", "CPT", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CA", "CPT", "CPT", "3.0000", "2", "180.00", "JWK indole 05/14/91"}, {"HP", "CA", "CPT", "CY", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"HP", "CA", "CA", "CAI", "4.2000", "2", "180.00", "from HP CA CA CA"}, {"HP", "CA", "CAI", "CPT", "3.0000", "2", "180.00", "from HP CA CA CPT"}, {"HP", "CAI", "CA", "HP", "2.4000", "2", "180.00", "from HP CA CA HP"}, {"HP", "CAI", "CPT", "CPT", "3.0000", "2", "180.00", "from HP CA CPT CPT"}, {"HP", "CAI", "CPT", "CY", "4.0000", "2", "180.00", "from HP CA CPT CY, r6r5"}, {"HP", "CA", "CY", "CPT", "2.8000", "2", "180.00", "atm, methylindole"}, {"HP", "CA", "CY", "CT2", "1.2000", "2", "180.00", "atm, methylindole"}, {"HP", "CA", "NY", "CPT", "2.6000", "2", "180.00", "adm jr., 12/30/91, for jwk"}, {"HP", "CA", "NY", "H", "0.4000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CA", "HP", "1.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CA", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CAI", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CPT", "2.6000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CA", "CY", "CPT", "5.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"NY", "CA", "CY", "CT3", "2.5000", "2", "180.00", "atm, methylindole, from NY CA CY CT3"}, {"NY", "CA", "CY", "CT2", "2.5000", "2", "180.00", "atm, methylindole, from NY CA CY CT3"}, {"NY", "CA", "CY", "HP", "3.5000", "2", "180.00", "JWK indole 05/14/91"}, {"NY", "CPT", "CA", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04, r6r5"}, {"NY", "CPT", "CA", "HP", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole, r6r5"}, {"NY", "CPT", "CPT", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04, bfly"}, {"NY", "CPT", "CAI", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"NY", "CPT", "CAI", "HP", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole, r6r5"}, {"NY", "CPT", "CPT", "CAI", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04, bfly"}, {"NY", "CPT", "CPT", "CY", "6.5000", "2", "180.00", "JWK 05/14/91 fit to indole, r5 t1"}, {"CT3", "CT2", "CY", "CA", "0.3800", "2", "0.00", "trp, from ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CY", "CPT", "0.2500", "2", "180.00", "atm 1/14/04 3-ethylindole"}, {"CT3", "CT2", "CY", "CPT", "0.3000", "3", "0.00", "atm 1/14/04 3-ethylindole"}, {"HA3", "CT3", "CY", "CA", "0.0100", "3", "0.00", "atm, methylindole, 1/17/04"}, {"HA3", "CT3", "CY", "CPT", "0.2000", "3", "0.00", "atm, methylindole, 1/17/04"}, {"HA2", "CT2", "CY", "CA", "0.0100", "3", "0.00", "atm, methylindole, 1/17/04"}, {"HA2", "CT2", "CY", "CPT", "0.2000", "3", "0.00", "atm, methylindole, 1/17/04"}, {"X", "CS", "SS", "X", "0.0000", "3", "0.20", "methanethiol, HS S CT3 HA"}, {"C", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "CT2", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "N", "CP1", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CA", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89"}, {"CC", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CC", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CC", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CC", "CT2", "NH1", "C", "2.0000", "1", "180.00", "Based on Gly3 data from graf et al, RB 7/1/11"}, {"CD", "CP1", "N", "C", "0.0000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CD", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CD", "CT2", "NH1", "C", "2.0000", "1", "180.00", "Based on Gly3 data from graf et al, RB 7/1/11"}, {"CE1", "CE1", "CT3", "HA3", "0.0300", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "CT3", "0.5000", "1", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "CT3", "1.3000", "3", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "HA2", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "HA3", "0.0500", "3", "180.00", "for propene, yin/adm jr., 12/95"}, {"CP1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "C", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CC", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CP2", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR2", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR3", "CPH1", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CT1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT1", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT1", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT1", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT2", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT3", "1.6000", "1", "0.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "C", "NH1", "CT3", "2.5000", "2", "180.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"CT2", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT2", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR2 CPH2"}, {"CT2", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"CT2", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT2", "CT2", "CPH1", "CPH1", "0.4000", "1", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. ADM JR., 9/4/89"}, {"CT2", "CT2", "CT2", "CT2", "0.10", "2", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT2", "0.15", "4", "0.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT2", "0.10", "6", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT3", "0.10", "2", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT3", "0.15", "4", "0.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT3", "0.10", "6", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "NH1", "C", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C, for lactams, adm jr."}, {"CT2", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "SM", "SM", "CT2", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "C", "NH1", "CT2", "1.6000", "1", "0.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT2", "2.5000", "2", "180.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT3", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "CA", "CA", "CA", "3.1000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"CT3", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"CT3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT3", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT3", "CT2", "CA", "CA", "0.2300", "2", "180.00", "ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2000", "1", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2700", "2", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "S", "CT3", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "CT2", "S", "CT3", "0.3700", "3", "0.00", "DTN 8/24/90"}, {"CT3", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "S", "CT2", "CT2", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "S", "CT2", "CT2", "0.3700", "3", "0.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"H", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "CT1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CC", "0.0000", "1", "0.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"H", "NH1", "CT1", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT1", "CT1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "CC", "0.0000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"H", "NH1", "CT2", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT2", "CT2", "0.0000", "1", "0.00", "from H NH1 CT2 CT3, for lactams, adm jr."}, {"H", "NH1", "CT2", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH2", "CC", "CT1", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT2", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT3", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NR1", "CPH1", "CPH1", "1.0000", "2", "180.00", "his, adm jr., 7/20/89"}, {"H", "NR1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR3", "CPH1", "CPH1", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "CT2", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "NR3", "CPH1", "CT3", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "OH1", "CA", "CA", "0.9900", "2", "180.00", "phenol OH rot bar, 3.37 kcal/mole, adm jr. 3/7/92"}, {"H", "OH1", "CT1", "CT3", "1.3300", "1", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.1800", "2", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.3200", "3", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"HA1", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"HA2", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA1", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA2", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA2", "CT2", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA2", "CT2", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA2", "CT2", "S", "CT3", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HA3", "CT3", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA3", "CT3", "CS", "HA2", "0.1600", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CT3", "CS", "HA3", "0.1600", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CT3", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA3", "CT3", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA3", "CT3", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA3", "CT3", "S", "CT2", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HE1", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"CT3", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"HE1", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "HA2", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE1", "CE1", "CT2", "CT3", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "HA3", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE2", "CE2", "CE1", "CT2", "5.2000", "2", "180.00", "for butene, yin/adm jr., 12/95"}, {"HB1", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "N", "CP3", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "NP", "CP3", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CT1", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NH2", "CT2", "HB2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NH2", "CT2", "CD", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NH2", "CT2", "CT2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NH2", "CT2", "HA2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "HB1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "HA2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "CA", "4.2000", "2", "180.00", "JES 8/25/89 benzene"}, {"HP", "CA", "CA", "CT2", "4.2000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"HP", "CA", "CA", "CT3", "4.2000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"HP", "CA", "CA", "HP", "2.4000", "2", "180.00", "JES 8/25/89 benzene"}, {"HR1", "CPH1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "HR1", "1.0000", "2", "180.00", "his, adm jr., 6/27/90, his"}, {"HR1", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "NR3", "H", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR2", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "H", "0.0000", "2", "180.00", "his, adm jr., 6/27/90, YES, 0.0"}, {"HR3", "CPH1", "CPH1", "CT2", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "CT3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "HR3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "H", "1.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "CT3", "0.2400", "1", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.1500", "2", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.2700", "3", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "HA2", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "HA3", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB1", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT1", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT2", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT3", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "HB1", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "HB2", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "HA3", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"NH1", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB1", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "CT1", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT2", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT3", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "HB1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT1", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT2", "CT2", "0.0000", "1", "0.00", "from NH1 C CT1 CT2, for lactams, adm jr."}, {"NH1", "C", "CT2", "HA2", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "C", "CT2", "HB2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT2", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT3", "HA3", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB1", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT2", "HA2", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NH3", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT1", "C", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH3", "CT1", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NH3", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT2", "C", "NH1", "1.0000", "1", "0.00", "RB 1/07/11, based on graf et al Gly 3 N-ter J-couplings for PRES GLYP"}, {"NH3", "CT2", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NP", "CP1", "C", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "C", "NH1", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "NH2", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "HA2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT3", "HA3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH2", "NR2", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH1", "CPH1", "NR1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "HA2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH1", "CT3", "HA3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH2", "NR1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CPH1", "CT2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "CT3", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "HR1", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "NR3", "12.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "HA2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT3", "HA3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH2", "NR3", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH2", "NR3", "H", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"O", "C", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB1", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "CT1", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT2", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT3", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "HB1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT2", "CT2", "1.4000", "1", "0.00", "from O C CT1 CT2, for lactams, adm jr."}, {"O", "C", "CT2", "HA2", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "CT2", "HB2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT3", "HA3", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "H", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "CC", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB1", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT2", "HA2", "0.0000", "3", "180.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"O", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "OS", "CT2", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT2", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OC", "CA", "CA", "CA", "3.1000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CA", "CA", "HP", "4.2000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "CP2", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "HB1", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "N", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "NP", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OC", "CC", "CT2", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OH1", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 phenol"}, {"OH1", "CA", "CA", "HP", "4.2000", "2", "180.00", "JES 8/25/89 phenol"}, {"S", "CT2", "CT2", "HA2", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "CT2", "CT2", "HA2", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "SM", "CT2", "CT1", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "CT2", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "CT3", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "HA2", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "HA3", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "HA3", "0.1500", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"X", "C", "NC2", "X", "2.2500", "2", "180.00", "9.0->2.25 GUANIDINIUM (KK)"}, {"X", "CD", "OH1", "X", "2.0500", "2", "180.00", "adm jr, 10/17/90, acetic acid C-Oh rotation barrier"}, {"X", "CD", "OS", "X", "2.0500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CE1", "CE1", "X", "0.1500", "1", "0.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE1", "CE1", "X", "8.5000", "2", "180.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE2", "CE2", "X", "4.9000", "2", "180.00", "for ethene, yin/adm jr., 12/95"}, {"X", "CP1", "C", "X", "0.0000", "6", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP1", "CC", "X", "0.0000", "6", "180.00", "changed to 0.0 RLD 5/19/92"}, {"X", "CP1", "CD", "X", "0.0000", "6", "180.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"X", "CP1", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP2", "CP2", "X", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP3", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CT1", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT1", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT1", "CT1", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT2", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT3", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT1", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT1", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT2", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT2", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CT2", "X", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CT2", "CT3", "X", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CT2", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT2", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT2", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT2", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT3", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT3", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CT3", "X", "0.1525", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CT3", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT3", "NH2", "X", "0.1100", "3", "0.00", "methylamine geom/freq, adm jr., 6/2/92"}, {"X", "CT3", "NH3", "X", "0.0900", "3", "0.00", "fine-tuned to ab initio; METHYLAMMONIUM, KK 03/10/92"}, {"X", "CT3", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT3", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"NH1", "CT1", "CT1", "HA1", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HB1", "CT1", "CT1", "HA1", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HB1", "CT1", "CT1", "CT3", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HA1", "CT1", "CT1", "C", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"NH1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "OH1", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "CT2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2", "CT1", "C", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2", "OH1", "H", "0.1400", "3", "0.00", "From X CT2 OH1 X"}, {"CT1", "CT2", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2", "CT2", "CC", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HB1", "CT1", "CT2", "S", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT2", "CT2", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "CT2", "CT2", "NC2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "CT2", "NC2", "HC", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"CT2", "CT2", "NC2", "C", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"HA2", "CT2", "CT2", "NC2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "NC2", "C", "NC2", "2.2500", "2", "180.00", "From X C NC2 X"}, {"HA2", "CT2", "NC2", "HC", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"HA2", "CT2", "NC2", "C", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"NC2", "C", "NC2", "HC", "2.2500", "2", "180.00", "From X C NC2 X"}, {"HB1", "CT1", "CT2", "CC", "0.2000", "3", "0.00", " "}, {"HB1", "CT1", "CT2", "CY", "0.2000", "3", "0.00", " "}, {"HA2", "CT2", "CC", "OC", "0.0500", "6", "180.00", " "}, {"HB1", "CT1", "CT2", "CPH1", "0.2000", "3", "0.00", " "}, {"CT1", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", " "}, {"CT1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", " "}, {"HB1", "CT1", "CT1", "CT2", "0.2000", "3", "0.00", " "}, {"CT1", "CT2", "CT3", "HA3", "0.1600", "3", "0.00", " "}, {"HA1", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", " "}, {"HA1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", " "}, {"HA1", "CT1", "CT2", "CT3", "0.2000", "3", "0.00", " "}, {"CT3", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", " "}, {"CT3", "CT1", "CT2", "CT3", "0.2000", "3", "0.00", " "}, {"HA3", "CT3", "CT1", "CT2", "0.2000", "3", "0.00", " "}, {"HA2", "CT2", "CT3", "HA3", "0.1600", "3", "0.00", " "}, {"CT1", "CT2", "CT1", "HA1", "0.2000", "3", "0.00", " "}, {"HB1", "CT1", "CT2", "CT1", "0.2000", "3", "0.00", " "}, {"CT3", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", " "}, {"CT2", "CT2", "CT2", "NH3", "0.1900", "3", "0.00", " "}, {"CT2", "CT2", "NH3", "HC", "0.1000", "3", "0.00", " "}, {"HA2", "CT2", "CT2", "NH3", "0.1900", "3", "0.00", " "}, {"HA2", "CT2", "NH3", "HC", "0.1000", "3", "0.00", " "}, {"HB1", "CT1", "CT2", "CA", "0.2000", "3", "0.00", " "}, {"HA2", "CT2", "CA", "CA", "0.0000", "6", "0.00", " "}, {"HB1", "CT1", "CT1", "OH1", "0.2000", "3", "0.00", " "}, {"HA1", "CT1", "OH1", "H", "0.1400", "3", "0.00", " "}, {"OH1", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", " "}, {"CT2", "CT2", "CC", "O", "0.0500", "6", "180.00", " "}, {"CT2", "CT2", "CC", "NH2", "0.0500", "6", "180.00", " "}, {"CT2", "CT2", "CC", "OC", "0.0500", "6", "180.00", " "}, {"NH1", "CT1", "CT2A", "HA2", "0.2000", "3", "0.00", " "}, {"NH3", "CT1", "CT2A", "CT2", "0.2000", "3", "0.00", " "}, {"CT1", "CT2A", "CT2", "HA2", "0.1900", "3", "0.00", " "}, {"HB1", "CT1", "CT2A", "HA2", "0.2000", "3", "0.00", " "}, {"HB1", "CT1", "CT2A", "CT2", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CT1", "C", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CT1", "CC", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CT2", "HA2", "0.1900", "3", "0.00", " "}, {"HA2", "CT2A", "CT2", "CC", "0.1900", "3", "0.00", " "}, {"HB1", "CT1", "CT2A", "CPH1", "0.2000", "3", "0.00", " "}, {"C", "NH1", "CT1", "CT2A", "1.8000", "1", "0.00", " "}, {"H", "NH1", "CT1", "CT2A", "0.0000", "1", "0.00", " "}, {"CT2A", "CT1", "C", "O", "1.4000", "1", "0.00", " "}, {"CT2A", "CT1", "C", "NH1", "0.0000", "1", "0.00", " "}, {"CT2A", "CT1", "C", "N", "0.0000", "1", "0.00", "Glup"}, {"CT1", "CT2A", "CT2", "CD", "0.1900", "3", "0.00", " "}, {"HA2", "CT2A", "CT2", "CD", "0.1900", "3", "0.00", " "}, {"CT2A", "CPH1", "CPH1", "HR1", "1.0000", "2", "180.00", " "}, {"CT2A", "CPH1", "CPH1", "NR3", "2.5000", "2", "180.00", " "}, {"CT2A", "CPH1", "NR3", "H", "3.0000", "2", "180.00", " "}, {"CT2A", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", " "}, {"HA2", "CT2A", "CPH1", "CPH1", "0.0000", "3", "0.00", " "}, {"HA2", "CT2A", "CPH1", "NR3", "0.1900", "3", "0.00", "Fit dihedrals"}, {"C", "CT1", "CT2", "CT2", "0.3500", "1", "180.00", " "}, {"C", "CT1", "CT2", "CT2", "0.4200", "2", "180.00", " "}, {"C", "CT1", "CT2", "CT2", "1.9100", "3", "180.00", " "}, {"CT2", "CT2", "CT1", "NH1", "0.8800", "1", "180.00", " "}, {"CT2", "CT2", "CT1", "NH1", "0.0000", "2", "180.00", " "}, {"CT2", "CT2", "CT1", "NH1", "1.9000", "3", "0.00", " "}, {"CC", "CT2", "CT2", "CT1", "1.8400", "1", "180.00", " "}, {"CC", "CT2", "CT2", "CT1", "0.8400", "2", "180.00", " "}, {"CC", "CT2", "CT2", "CT1", "0.3900", "3", "180.00", " "}, {"CT1", "CT2", "CT2", "CT2", "0.6300", "1", "180.00", " "}, {"CT1", "CT2", "CT2", "CT2", "0.0100", "2", "0.00", " "}, {"CT1", "CT2", "CT2", "CT2", "0.1500", "3", "0.00", " "}, {"CT1", "CT2", "CT2", "S", "0.1400", "1", "180.00", " "}, {"CT1", "CT2", "CT2", "S", "0.5400", "2", "0.00", " "}, {"CT1", "CT2", "CT2", "S", "0.6900", "3", "0.00", "Fitted Asn"}, {"C", "CT1", "CT2", "CC", "1.4100", "1", "180.00", " "}, {"C", "CT1", "CT2", "CC", "1.2900", "2", "180.00", " "}, {"C", "CT1", "CT2", "CC", "0.5900", "3", "180.00", " "}, {"CC", "CT2", "CT1", "NH1", "0.2800", "1", "180.00", " "}, {"CC", "CT2", "CT1", "NH1", "0.5000", "2", "180.00", " "}, {"CC", "CT2", "CT1", "NH1", "0.3800", "3", "0.00", " "}, {"CT1", "CT2", "CC", "NH2", "0.6200", "1", "180.00", " "}, {"CT1", "CT2", "CC", "NH2", "0.6600", "2", "180.00", " "}, {"CT1", "CT2", "CC", "NH2", "0.7200", "3", "180.00", " "}, {"CT1", "CT2", "CC", "O", "0.4200", "1", "180.00", " "}, {"CT1", "CT2", "CC", "O", "0.1500", "2", "180.00", " "}, {"CT1", "CT2", "CC", "O", "0.9500", "3", "180.00", "Fitted Asp"}, {"C", "CT1", "CT2A", "CC", "1.6100", "1", "180.00", " "}, {"C", "CT1", "CT2A", "CC", "1.2900", "2", "180.00", " "}, {"C", "CT1", "CT2A", "CC", "0.5900", "3", "180.00", " "}, {"CC", "CT2A", "CT1", "NH1", "0.6800", "1", "180.00", " "}, {"CC", "CT2A", "CT1", "NH1", "0.1000", "2", "180.00", " "}, {"CC", "CT2A", "CT1", "NH1", "0.3800", "3", "0.00", " "}, {"CT1", "CT2A", "CC", "OC", "0.8400", "1", "0.00", " "}, {"CT1", "CT2A", "CC", "OC", "0.9800", "2", "180.00", " "}, {"CT1", "CT2A", "CC", "OC", "1.4600", "3", "0.00", "Fitted Cys"}, {"CT1", "CT2", "S", "HS", "0.2000", "1", "0.00", " "}, {"CT1", "CT2", "S", "HS", "0.6500", "2", "0.00", " "}, {"CT1", "CT2", "S", "HS", "0.2200", "3", "0.00", " "}, {"C", "CT1", "CT2", "S", "0.2400", "1", "180.00", " "}, {"C", "CT1", "CT2", "S", "0.7500", "2", "180.00", " "}, {"C", "CT1", "CT2", "S", "1.3500", "3", "180.00", " "}, {"NH1", "CT1", "CT2", "S", "0.3400", "1", "0.00", " "}, {"NH1", "CT1", "CT2", "S", "0.5000", "2", "180.00", " "}, {"NH1", "CT1", "CT2", "S", "1.4300", "3", "0.00", "Fitted Glu"}, {"CC", "CT2", "CT2A", "CT1", "0.0000", "1", "180.00", " "}, {"CC", "CT2", "CT2A", "CT1", "0.3800", "2", "180.00", " "}, {"CC", "CT2", "CT2A", "CT1", "0.5900", "3", "180.00", " "}, {"C", "CT1", "CT2A", "CT2", "0.1100", "1", "0.00", " "}, {"C", "CT1", "CT2A", "CT2", "0.9800", "2", "180.00", " "}, {"C", "CT1", "CT2A", "CT2", "1.6000", "3", "180.00", " "}, {"CC", "CT1", "CT2A", "CT2", "1.6000", "3", "180.00", " "}, {"CT2", "CT2A", "CT1", "NH1", "0.3000", "1", "0.00", " "}, {"CT2", "CT2A", "CT1", "NH1", "0.3500", "2", "0.00", " "}, {"CT2", "CT2A", "CT1", "NH1", "1.7600", "3", "0.00", "Group-fitted for Hsd/Hse"}, {"CPH1", "CPH1", "CT2", "CT1", "1.7400", "1", "0.00", " "}, {"CPH1", "CPH1", "CT2", "CT1", "0.1500", "2", "0.00", " "}, {"CPH1", "CPH1", "CT2", "CT1", "0.7700", "3", "180.00", " "}, {"CT1", "CT2", "CPH1", "NR1", "1.4900", "1", "0.00", " "}, {"CT1", "CT2", "CPH1", "NR1", "0.0900", "2", "180.00", " "}, {"CT1", "CT2", "CPH1", "NR1", "0.7900", "3", "180.00", " "}, {"CT1", "CT2", "CPH1", "NR2", "1.0900", "1", "0.00", " "}, {"CT1", "CT2", "CPH1", "NR2", "0.0900", "2", "0.00", " "}, {"CT1", "CT2", "CPH1", "NR2", "0.6700", "3", "180.00", " "}, {"C", "CT1", "CT2", "CPH1", "0.1800", "1", "180.00", " "}, {"C", "CT1", "CT2", "CPH1", "0.6400", "2", "180.00", " "}, {"C", "CT1", "CT2", "CPH1", "0.8700", "3", "180.00", " "}, {"CPH1", "CT2", "CT1", "NH1", "0.0000", "1", "0.00", " "}, {"CPH1", "CT2", "CT1", "NH1", "0.0000", "2", "180.00", " "}, {"CPH1", "CT2", "CT1", "NH1", "0.9000", "3", "0.00", "Fitted Hsp"}, {"CPH1", "CPH1", "CT2A", "CT1", "2.0400", "1", "0.00", " "}, {"CPH1", "CPH1", "CT2A", "CT1", "0.4400", "2", "0.00", " "}, {"CPH1", "CPH1", "CT2A", "CT1", "0.1300", "3", "180.00", " "}, {"CT1", "CT2A", "CPH1", "NR3", "0.5300", "1", "180.00", " "}, {"CT1", "CT2A", "CPH1", "NR3", "0.4200", "2", "180.00", " "}, {"CT1", "CT2A", "CPH1", "NR3", "0.3000", "3", "180.00", " "}, {"C", "CT1", "CT2A", "CPH1", "1.7500", "1", "180.00", " "}, {"C", "CT1", "CT2A", "CPH1", "0.1300", "2", "0.00", " "}, {"C", "CT1", "CT2A", "CPH1", "1.8600", "3", "180.00", " "}, {"CPH1", "CT2A", "CT1", "NH1", "1.0900", "1", "180.00", " "}, {"CPH1", "CT2A", "CT1", "NH1", "0.2200", "2", "180.00", " "}, {"CPH1", "CT2A", "CT1", "NH1", "2.3200", "3", "0.00", "Group-fitted for Ile/Thr"}, {"CT1", "CT1", "CT2", "CT3", "0.3800", "1", "180.00", " "}, {"CT1", "CT1", "CT2", "CT3", "0.1300", "2", "180.00", " "}, {"CT1", "CT1", "CT2", "CT3", "0.2900", "3", "180.00", " "}, {"C", "CT1", "CT1", "CT2", "0.1000", "1", "180.00", " "}, {"C", "CT1", "CT1", "CT2", "0.5200", "2", "180.00", " "}, {"C", "CT1", "CT1", "CT2", "0.2900", "3", "180.00", " "}, {"CT2", "CT1", "CT1", "NH1", "0.1200", "1", "180.00", " "}, {"CT2", "CT1", "CT1", "NH1", "0.3600", "2", "180.00", " "}, {"CT2", "CT1", "CT1", "NH1", "0.4100", "3", "0.00", "Fitted Leu"}, {"CT1", "CT2", "CT1", "CT3", "0.0500", "1", "0.00", " "}, {"CT1", "CT2", "CT1", "CT3", "0.1000", "2", "180.00", " "}, {"CT1", "CT2", "CT1", "CT3", "0.0100", "3", "180.00", " "}, {"C", "CT1", "CT2", "CT1", "0.3200", "1", "180.00", " "}, {"C", "CT1", "CT2", "CT1", "0.6100", "2", "180.00", " "}, {"C", "CT1", "CT2", "CT1", "0.7200", "3", "180.00", " "}, {"CT1", "CT2", "CT1", "NH1", "0.4800", "1", "180.00", " "}, {"CT1", "CT2", "CT1", "NH1", "0.4200", "2", "180.00", " "}, {"CT1", "CT2", "CT1", "NH1", "0.6500", "3", "0.00", "Group-fitted for Phe/Tyr"}, {"CA", "CA", "CT2", "CT1", "1.0700", "1", "0.00", " "}, {"CA", "CA", "CT2", "CT1", "0.2400", "2", "180.00", " "}, {"CA", "CA", "CT2", "CT1", "0.1700", "3", "180.00", " "}, {"C", "CT1", "CT2", "CA", "1.2800", "1", "180.00", " "}, {"C", "CT1", "CT2", "CA", "0.9400", "2", "180.00", " "}, {"C", "CT1", "CT2", "CA", "1.5700", "3", "180.00", " "}, {"CA", "CT2", "CT1", "NH1", "0.5200", "1", "180.00", " "}, {"CA", "CT2", "CT1", "NH1", "0.6200", "2", "180.00", " "}, {"CA", "CT2", "CT1", "NH1", "1.5800", "3", "0.00", "Fitted Ser"}, {"CT1", "CT2", "OH1", "H", "0.0200", "1", "0.00", " "}, {"CT1", "CT2", "OH1", "H", "0.5600", "2", "0.00", " "}, {"CT1", "CT2", "OH1", "H", "0.4900", "3", "0.00", " "}, {"C", "CT1", "CT2", "OH1", "0.6500", "1", "180.00", " "}, {"C", "CT1", "CT2", "OH1", "0.2500", "2", "180.00", " "}, {"C", "CT1", "CT2", "OH1", "1.1700", "3", "180.00", " "}, {"NH1", "CT1", "CT2", "OH1", "0.1800", "1", "180.00", " "}, {"NH1", "CT1", "CT2", "OH1", "0.1900", "2", "180.00", " "}, {"NH1", "CT1", "CT2", "OH1", "1.4600", "3", "0.00", "Group-fitted for Ile/Thr"}, {"CT1", "CT1", "OH1", "H", "0.1800", "1", "0.00", " "}, {"CT1", "CT1", "OH1", "H", "0.0600", "2", "0.00", " "}, {"CT1", "CT1", "OH1", "H", "0.2500", "3", "0.00", " "}, {"C", "CT1", "CT1", "OH1", "0.7900", "1", "180.00", " "}, {"C", "CT1", "CT1", "OH1", "0.3900", "2", "180.00", " "}, {"C", "CT1", "CT1", "OH1", "0.9900", "3", "180.00", " "}, {"NH1", "CT1", "CT1", "OH1", "0.0900", "1", "0.00", " "}, {"NH1", "CT1", "CT1", "OH1", "0.1900", "2", "180.00", " "}, {"NH1", "CT1", "CT1", "OH1", "0.1700", "3", "0.00", "Fitted Trp"}, {"CA", "CY", "CT2", "CT1", "0.0300", "1", "0.00", " "}, {"CA", "CY", "CT2", "CT1", "0.5500", "2", "0.00", " "}, {"CA", "CY", "CT2", "CT1", "0.3900", "3", "180.00", " "}, {"CPT", "CY", "CT2", "CT1", "0.3600", "1", "180.00", " "}, {"CPT", "CY", "CT2", "CT1", "0.0500", "2", "0.00", " "}, {"CPT", "CY", "CT2", "CT1", "0.1900", "3", "180.00", " "}, {"C", "CT1", "CT2", "CY", "1.0900", "1", "180.00", " "}, {"C", "CT1", "CT2", "CY", "0.5000", "2", "180.00", " "}, {"C", "CT1", "CT2", "CY", "1.1700", "3", "180.00", " "}, {"CY", "CT2", "CT1", "NH1", "0.2900", "1", "180.00", " "}, {"CY", "CT2", "CT1", "NH1", "0.6600", "2", "180.00", " "}, {"CY", "CT2", "CT1", "NH1", "1.1700", "3", "0.00", "Fitted Val"}, {"C", "CT1", "CT1", "CT3", "0.1400", "1", "180.00", " "}, {"C", "CT1", "CT1", "CT3", "0.2600", "2", "180.00", " "}, {"C", "CT1", "CT1", "CT3", "0.3300", "3", "180.00", " "}, {"CT3", "CT1", "CT1", "NH1", "0.1800", "1", "0.00", " "}, {"CT3", "CT1", "CT1", "NH1", "0.0600", "2", "0.00", " "}, {"CT3", "CT1", "CT1", "NH1", "0.5900", "3", "0.00", "CT2->CT2A, jshim"}, {"H", "NH1", "CT2A", "CC", "0.0000", "1", "0.00", " "}, {"X", "CT2A", "CC", "X", "0.0500", "6", "180.00", " "}, {"HB1", "CT1", "CT2A", "CC", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CC", "OC", "0.0500", "6", "180.00", " "}, {"NH3", "CT1", "CT2A", "HA2", "0.2000", "3", "0.00", " "}, {"NH3", "CT1", "CT2A", "CC", "0.2000", "3", "0.00", " "}, {"CC", "CT2A", "CT1", "CC", "0.2000", "3", "0.00", "specific terms"}, {"CPH1", "CT2A", "CT1", "CC", "0.2000", "3", "0.00", " "}, {"CPH1", "CT2A", "CT1", "NH3", "0.2000", "3", "0.00", " "}, {"CPH1", "CT2A", "CT1", "CD", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CT1", "CD", "0.2000", "3", "0.00", " "}, {"CT2", "CT2A", "CT1", "CD", "0.2000", "3", "0.00", "RESI CYSM and PRES CYSD"}, {"H", "NH2", "CT1", "CS", "0.1100", "3", "0.00", "from H NH2 CT1 CT2 or H NH2 CT1 CT2 , kevo"}, {"CS", "CT1", "NH1", "C", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C or CT2A CT1 NH1 C , kevo"}, {"H", "NH1", "CT1", "CS", "0.0000", "1", "0.00", "from H NH1 CT1 CT2 or H NH1 CT1 CT2 , kevo"}, {"N", "C", "CT1", "CS", "0.0000", "1", "0.00", "from N C CT1 CT2 or N C CT1 CT2 , kevo"}, {"NH1", "C", "CT1", "CS", "0.0000", "1", "0.00", "from NH1 C CT1 CT2 or NH1 C CT1 CT2 , kevo"}, {"O", "C", "CT1", "CS", "1.4000", "1", "0.00", "from O C CT1 CT2 or O C CT1 CT2 , kevo"}, {"HA2", "CS", "CT1", "C", "0.2000", "3", "0.00", "from HA2 CT2 CT1 C or HA2 CT2A CT1 C , kevo"}, {"NH1", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from NH1 CT1 CT2 HA2 or NH1 CT1 CT2A HA2 , kevo"}, {"HB1", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from HB1 CT1 CT2 HA2 or HB1 CT1 CT2A HA2 , kevo"}, {"HB1", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from HB1 CT1 CT2 S or HB1 CT1 CT2A S , kevo"}, {"C", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH1", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH3", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH3", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH2", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH2", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CC", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CC", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CD", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CD", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH1", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH2", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH3", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"C", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CC", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CD", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"HB1", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm36_prot info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm36_prot_impropers[35][8]= {{"HE2", "HE2", "CE2", "CE2", "3.0", "0", "0.00", "for ethene, yin/adm jr., 12/95"}, {"HR1", "NR1", "NR2", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR1", "NR2", "NR1", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR3", "CPH1", "NR1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR3", "CPH1", "1.0000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR1", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR2", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "CP1", "CP3", "0.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"NC2", "X", "X", "C", "45.0000", "0", "0.0000", "mp2/6-311g** guan vibrational data, adm jr., 1/04"}, {"C", "HC", "HC", "NC2", "0.0", "0", "0.0", "mp2/6-311g** guan vibrational data, adm jr., 1/04"}, {"NC2", "X", "X", "HC", "-2.0", "0", "0.0", "mp2/6-311g** guan vibrational data, adm jr., 1/04"}, {"NH1", "X", "X", "H", "20.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"NH2", "X", "X", "H", "4.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NR1", "CPH1", "CPH2", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR1", "CPH2", "CPH1", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR3", "CPH1", "CPH2", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "CPH1", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"O", "CP1", "NH2", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "CT1", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT2", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT3", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "HA1", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "N", "CT2", "CC", "120.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CP1", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CT1", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT3", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "HA1", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "X", "X", "C", "120.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"OB", "X", "X", "CD", "100.0000", "0", "0.0000", "adm jr., 10/17/90, acetic acid vibrations"}, {"OC", "X", "X", "CC", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT1", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT2", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT3", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm36_prot info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm36_prot_vdw[53][6]= {{"C", "-0.110000", "2.000000", " ", " ", " "}, {"CA", "-0.070000", "1.992400", " ", " ", " "}, {"CC", "-0.070000", "2.000000", " ", " ", " "}, {"CD", "-0.070000", "2.000000", " ", " ", " "}, {"CE1", "-0.068000", "2.090000", " ", " ", " "}, {"CE2", "-0.064000", "2.080000", " ", " ", " "}, {"CP1", "-0.020000", "2.275000", "-0.010000", "1.900000", " "}, {"CP2", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CP3", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CPH1", "-0.050000", "1.800000", " ", " ", " "}, {"CPH2", "-0.050000", "1.800000", " ", " ", " "}, {"CS", "-0.110000", "2.200000", " ", " ", " "}, {"CPT", "-0.099000", "1.860000", " ", " ", " "}, {"CY", "-0.073000", "1.990000", " ", " ", " "}, {"CAI", "-0.073000", "1.990000", " ", " ", " "}, {"CT", "-0.0200", "2.275", "-0.01", "1.9", " "}, {"CT1", "-0.0320", "2.000", "-0.01", "1.9", " "}, {"CT2", "-0.0560", "2.010", "-0.01", "1.9", " "}, {"CT2A", "-0.0560", "2.010", "-0.01", "1.9", " "}, {"CT3", "-0.0780", "2.040", "-0.01", "1.9", " "}, {"H", "-0.046000", "0.224500", " ", " ", " "}, {"HA", "-0.022000", "1.320000", " ", " ", " "}, {"HB1", "-0.022000", "1.320000", " ", " ", " "}, {"HB2", "-0.028000", "1.340000", " ", " ", " "}, {"HE1", "-0.031000", "1.250000", " ", " ", " "}, {"HE2", "-0.026000", "1.260000", " ", " ", " "}, {"HC", "-0.046000", "0.224500", " ", " ", " "}, {"HP", "-0.030000", "1.358200", "-0.030000", "1.358200", " "}, {"HR1", "-0.046000", "0.900000", " ", " ", " "}, {"HR2", "-0.046000", "0.700000", " ", " ", " "}, {"HR3", "-0.007800", "1.468000", " ", " ", " "}, {"HS", "-0.100000", "0.450000", " ", " ", " "}, {"HA1", "-0.045", "1.3400", " ", " ", " "}, {"HA2", "-0.034", "1.3400", " ", " ", " "}, {"HA3", "-0.024", "1.3400", " ", " ", " "}, {"N", "-0.200000", "1.850000", "-0.000100", "1.850000", " "}, {"NC2", "-0.200000", "1.850000", " ", " ", " "}, {"NH1", "-0.200000", "1.850000", "-0.200000", "1.550000", " "}, {"NH2", "-0.200000", "1.850000", " ", " ", " "}, {"NH3", "-0.200000", "1.850000", " ", " ", " "}, {"NP", "-0.200000", "1.850000", " ", " ", " "}, {"NR1", "-0.200000", "1.850000", " ", " ", " "}, {"NR2", "-0.200000", "1.850000", " ", " ", " "}, {"NR3", "-0.200000", "1.850000", " ", " ", " "}, {"NY", "-0.200000", "1.850000", " ", " ", " "}, {"O", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OB", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OC", "-0.120000", "1.700000", " ", " ", " "}, {"OH1", "-0.152100", "1.770000", " ", " ", " "}, {"OS", "-0.152100", "1.770000", " ", " ", " "}, {"S", "-0.450000", "2.000000", " ", " ", " "}, {"SM", "-0.380000", "1.975000", " ", " ", " "}, {"SS", "-0.470000", "2.200000", " ", " ", " "}}; atomes_1.3.1/src/calc/force_fields/charmm36_lipid.c0000664000175000017500000013506315212624223021577 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm36_lipid.c * @short CHARMM-charmm36_lipid force field, from 'charmm36_lipid' * @author Sébastien Le Roux */ /* * This file: 'charmm36_lipid.c' * * Contains: * CHARMM-charmm36_lipid force field, data from taken from: - the file: 'charmm36_lipid' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm36_lipid_atoms[29][5] Bonds : charmm36_lipid_bonds[50][5] Angles : charmm36_lipid_angles[131][8] Dihedrals : charmm36_lipid_dihedrals[180][8] Impropers : charmm36_lipid_impropers[4][8] Non bonded : charmm36_lipid_vdw[29][6] */ #include "global.h" int charmm36_lipid_objects[14] = {29, 0, 0, 50, 0, 0, 131, 0, 180, 0 , 0, 4, 29, 0}; int charmm36_lipid_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm36_lipid info */ char * charmm36_lipid_atoms[29][5]= {{"H", "1.008000", "HL", "polar H (equivalent to protein H)", "136"}, {"H", "1.008000", "HCL", "charged H for PE (equivalent to protein HC)", "137"}, {"H", "1.008000", "HOL", "Nucleic acid phosphate hydroxyl proton", "138"}, {"H", "1.008000", "HAL1", "alphatic proton", "139"}, {"H", "1.008000", "HAL2", "alphatic proton", "140"}, {"H", "1.008000", "HAL3", "alphatic proton", "141"}, {"H", "1.008000", "HEL1", "for alkene; RHC=CR", "142"}, {"H", "1.008000", "HEL2", "for alkene; H2C=CR", "143"}, {"H", "1.008000", "HBL", "POPS SER backbone H", "144"}, {"C", "12.011000", "CL", "carbonyl C (acetic acid/methyl acetate)", "145"}, {"C", "12.011000", "CTL1", "sp3 carbon with 1 H (-CH1-)", "146"}, {"C", "12.011000", "CTL2", "carbon of methylene group (-CH2-)", "147"}, {"C", "12.011000", "CTL3", "carbon of methyl group (-CH3)", "148"}, {"C", "12.011000", "CTL5", "carbon of methyl group (-CH3) for tetramethylammonium", "149"}, {"C", "12.011000", "CEL1", "for alkene; RHC=CR", "150"}, {"C", "12.011000", "CEL2", "for alkene; H2C=CR", "151"}, {"C", "12.011000", "CCL", "for POPS", "152"}, {"N", "14.007000", "NTL", "ammonium nitrogen", "153"}, {"N", "14.007000", "NH3L", "nitrogen phosphatidylethanolamine", "154"}, {"O", "15.999400", "OBL", "acetic acid carboxyl oxygen (e. to protein OB)", "155"}, {"O", "15.999400", "OCL", "acetate oxygen", "156"}, {"O", "15.999400", "OSL", "ester oxygen", "157"}, {"O", "15.999400", "O2L", "Nucleic acid =O in phosphate or sulfate", "158"}, {"O", "15.999400", "OHL", "Nucleic acid phosphate hydroxyl oxygen", "159"}, {"O", "15.999400", "OSLP", "Phosphate oxygen, to avoid conflict with methylacetate type O", "160"}, {"P", "30.974000", "PL", "phosphorus", "161"}, {"S", "32.060000", "SL", "Sulfate sulfur", "162"}, {"C", "12.011000", "CRL1", "sp3 carbon with 1 H on a ring (-CH1-) for sterols", "163"}, {"C", "12.011000", "CRL2", "carbon of methylene group on a ring (-CH2-) for sterols", "164"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm36_lipid info V(R) = Kb x (R - R0)^2 */ char * charmm36_lipid_bonds[50][5]= {{"CTL3", "CL", "200.0", "1.522", "methyl acetate"}, {"CTL2", "CL", "200.0", "1.522", "methyl acetate"}, {"CTL1", "CL", "200.0", "1.522", "methyl acetate"}, {"CTL1", "CCL", "200.0", "1.522", "for POPS"}, {"OBL", "CL", "750.0", "1.220", "methyl acetate"}, {"OCL", "CL", "525.0", "1.260", "acetate, protein"}, {"OCL", "CCL", "525.0", "1.260", "for POPS"}, {"OSL", "CL", "150.0", "1.334", "methyl acetate"}, {"OSLP", "CL", "150.0", "1.334", "methyl acetate"}, {"OHL", "CL", "230.0", "1.40", "methyl acetate"}, {"HOL", "OHL", "545.0", "0.960", "acetic acid"}, {"CTL1", "HAL1", "309.00", "1.111", "alkanes, 3/92"}, {"CTL1", "HBL", "330.00", "1.080", "for POPS"}, {"CTL2", "HAL2", "309.00", "1.111", "alkanes, 4/98"}, {"CTL3", "HAL3", "322.00", "1.111", "alkanes, 4/98"}, {"CTL3", "OSL", "340.0", "1.43", "phosphate"}, {"CTL2", "OSL", "340.0", "1.43", "phosphate"}, {"CTL1", "OSL", "340.0", "1.43", "phosphate"}, {"CTL3", "OSLP", "340.0", "1.43", " "}, {"CTL2", "OSLP", "340.0", "1.43", " "}, {"CTL1", "OSLP", "340.0", "1.43", " "}, {"OSL", "PL", "270.0", "1.60", "phosphate"}, {"OSLP", "PL", "270.0", "1.60", " "}, {"O2L", "PL", "580.0", "1.48", "phosphate"}, {"OHL", "PL", "237.0", "1.59", "phosphate"}, {"NH3L", "HCL", "410.0", "1.04", "ethanolamine"}, {"NH3L", "CTL1", "200.0", "1.48", "for POPS"}, {"NH3L", "CTL2", "261.0", "1.51", "ethanolamine"}, {"NTL", "CTL2", "215.00", "1.51", "tetramethylammonium"}, {"NTL", "CTL5", "215.00", "1.51", "tetramethylammonium"}, {"CTL5", "HL", "300.00", "1.08", "tetramethylammonium"}, {"CTL2", "HL", "300.00", "1.08", "tetramethylammonium"}, {"CTL1", "CTL1", "222.500", "1.500", "alkanes, 3/92"}, {"CTL1", "CTL2", "222.500", "1.538", "alkanes, 3/92"}, {"CTL1", "CTL3", "222.500", "1.538", "alkanes, 3/92"}, {"CTL2", "CTL2", "222.500", "1.530", "alkanes, 3/92"}, {"CTL2", "CTL3", "222.500", "1.528", "alkanes, 3/92"}, {"CTL3", "CTL3", "222.500", "1.530", "alkanes, 3/92"}, {"OHL", "CTL1", "428.0", "1.420", "glycerol"}, {"OHL", "CTL2", "428.0", "1.420", "glycerol"}, {"OHL", "CTL3", "428.0", "1.420", "glycerol"}, {"SL", "O2L", "540.0", "1.448", "methylsulfate"}, {"SL", "OSL", "250.0", "1.575", "methylsulfate"}, {"CEL2", "CEL2", "510.000", "1.330", "ethene yin,adm jr., 12/95"}, {"HEL2", "CEL2", "365.000", "1.100", "propene; from ethene, yin,adm jr., 12/95"}, {"CEL1", "CTL3", "383.000", "1.504", "butene, yin,adm jr., 12/95"}, {"CEL1", "CEL2", "500.000", "1.342", "propene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "360.500", "1.100", "propene, yin,adm jr., 12/95"}, {"CEL1", "CTL2", "365.000", "1.502", "butene; from propene, yin,adm jr., 12/95"}, {"CEL1", "CEL1", "440.000", "1.340", "butene, yin,adm jr., 12/95"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm36_lipid info V(S) = Kub x (S - S0)^2 */ char * charmm36_lipid_angles[131][8]= {{"OBL", "CL", "CTL3", "70.0", "125.0", "20.0", "2.442", "methyl acetate"}, {"OBL", "CL", "CTL2", "70.0", "125.0", "20.0", "2.442", "methyl acetate"}, {"OBL", "CL", "CTL1", "70.0", "125.0", "20.0", "2.442", "methyl acetate"}, {"OSL", "CL", "OBL", "90.0", "125.9", "160.0", "2.2576", "acetic acid"}, {"CL", "OSL", "CTL1", "40.0", "109.6", "30.0", "2.2651", "methyl acetate"}, {"CL", "OSL", "CTL2", "40.0", "109.6", "30.0", "2.2651", "methyl acetate"}, {"CL", "OSL", "CTL3", "40.0", "109.6", "30.0", "2.2651", "methyl acetate"}, {"HAL2", "CTL2", "CL", "33.00", "109.50", "30.00", "2.163", "methyl acetate"}, {"HAL3", "CTL3", "CL", "33.00", "109.50", "30.00", "2.163", "methyl acetate"}, {"CTL2", "CTL2", "CL", "52.0", "108.00", " ", " ", "alkane"}, {"CTL2", "CTL1", "CCL", "52.0", "108.00", " ", " ", "for POPS"}, {"CTL3", "CTL2", "CL", "52.0", "108.00", " ", " ", "alkane"}, {"OSL", "CL", "CTL3", "55.0", "109.0", "20.00", "2.3260", "methyl acetate"}, {"OSL", "CL", "CTL2", "55.0", "109.0", "20.00", "2.3260", "methyl acetate"}, {"OSL", "CL", "CTL1", "55.0", "109.0", "20.00", "2.3260", "methyl acetate"}, {"OHL", "CL", "OBL", "50.0", "123.0", "210.0", "2.2620", "acetic acid"}, {"OCL", "CL", "CTL2", "40.0", "118.0", "50.0", "2.3880", "acetate"}, {"OCL", "CL", "CTL3", "40.0", "118.0", "50.0", "2.3880", "acetate"}, {"OCL", "CL", "OCL", "100.0", "124.0", "70.0", "2.2250", "acetate"}, {"OCL", "CCL", "OCL", "100.0", "124.0", "70.0", "2.2250", "for POPS"}, {"OCL", "CCL", "CTL1", "40.0", "118.0", "50.0", "2.3880", "for POPS"}, {"OHL", "CL", "CTL3", "55.0", "110.50", " ", " ", "acetic acid"}, {"OHL", "CL", "CTL2", "55.0", "110.50", " ", " ", "acetic acid"}, {"HOL", "OHL", "CL", "55.0", "115.0", " ", " ", "acetic acid"}, {"OSL", "CTL1", "CTL1", "75.700", "110.10", " ", " ", "acetic acid, PIP"}, {"OSL", "CTL1", "CTL2", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSL", "CTL1", "CTL3", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSL", "CTL2", "CTL1", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSL", "CTL2", "CTL2", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSL", "CTL2", "CTL3", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSLP", "CTL1", "CTL1", "75.700", "110.10", " ", " ", "acetic acid, PIP"}, {"OSLP", "CTL1", "CTL2", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSLP", "CTL1", "CTL3", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSLP", "CTL2", "CTL1", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSLP", "CTL2", "CTL2", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSLP", "CTL2", "CTL3", "75.700", "110.10", " ", " ", "acetic acid"}, {"HAL2", "CTL2", "HAL2", "35.500", "109.00", "5.40", "1.80200", "alkane, 3/92"}, {"HAL3", "CTL3", "HAL3", "35.500", "108.40", "5.40", "1.80200", "alkane, 3/92"}, {"HAL1", "CTL1", "OSL", "60.0", "109.5", " ", " ", "phosphate"}, {"HAL2", "CTL2", "OSL", "60.0", "109.5", " ", " ", "phosphate"}, {"HAL3", "CTL3", "OSL", "60.0", "109.5", " ", " ", "phosphate"}, {"HAL1", "CTL1", "OSLP", "60.0", "109.5", " ", " ", "phosphate"}, {"HAL2", "CTL2", "OSLP", "60.0", "109.5", " ", " ", "phosphate"}, {"HAL3", "CTL3", "OSLP", "60.0", "109.5", " ", " ", "phosphate"}, {"CTL1", "OSL", "PL", "20.0", "120.0", "35.0", "2.33", "phosphate, PIP"}, {"CTL2", "OSL", "PL", "20.0", "120.0", "35.0", "2.33", "phosphate"}, {"CTL3", "OSL", "PL", "20.0", "120.0", "35.0", "2.33", "phosphate"}, {"CTL1", "OSLP", "PL", "20.0", "120.0", "35.0", "2.33", "phosphate, PIP"}, {"CTL2", "OSLP", "PL", "20.0", "120.0", "35.0", "2.33", "phosphate"}, {"CTL3", "OSLP", "PL", "20.0", "120.0", "35.0", "2.33", "phosphate"}, {"HOL", "OHL", "PL", "30.0", "115.0", "40.0", "2.30", "phosphate"}, {"OSL", "PL", "OSL", "80.0", "104.3", " ", " ", "phosphate"}, {"OSL", "PL", "O2L", "98.9", "111.6", " ", " ", "phosphate"}, {"OSL", "PL", "OHL", "48.1", "108.0", " ", " ", "phosphate"}, {"OSLP", "PL", "OSLP", "80.0", "104.3", " ", " ", "phosphate"}, {"OSLP", "PL", "O2L", "98.9", "111.6", " ", " ", "phosphate"}, {"OSLP", "PL", "OHL", "48.1", "108.0", " ", " ", "phosphate"}, {"O2L", "PL", "O2L", "120.0", "120.0", " ", " ", "phosphate"}, {"O2L", "PL", "OHL", "98.9", "108.23", " ", " ", "phosphate"}, {"NTL", "CTL2", "HL", "40.0", "109.5", "27.", "2.13", "tetramethylammonium"}, {"NTL", "CTL5", "HL", "40.0", "109.5", "27.", "2.13", "tetramethylammonium"}, {"HL", "CTL2", "HL", "24.0", "109.50", "28.", "1.767", "tetramethylammonium"}, {"HL", "CTL5", "HL", "24.0", "109.50", "28.", "1.767", "tetramethylammonium"}, {"CTL2", "NTL", "CTL2", "60.0", "109.5", "26.", "2.466", "tetraethylammonium, from CTL5 NTL CTL2"}, {"CTL5", "NTL", "CTL2", "60.0", "109.5", "26.", "2.466", "tetramethylammonium"}, {"CTL5", "NTL", "CTL5", "60.0", "109.5", "26.", "2.466", "tetramethylammonium"}, {"HL", "CTL2", "CTL2", "33.430", "110.10", "22.53", "2.179", "alkane"}, {"HL", "CTL2", "CTL3", "33.430", "110.10", "22.53", "2.179", "alkane"}, {"HAL1", "CTL1", "CTL1", "34.500", "110.10", "22.53", "2.179", "alkane, 3/92"}, {"HAL1", "CTL1", "CTL2", "34.500", "110.10", "22.53", "2.179", "alkane, 3/92"}, {"HAL1", "CTL1", "CTL3", "34.500", "110.10", "22.53", "2.179", "alkane, 3/92"}, {"HAL2", "CTL2", "CTL1", "26.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HAL2", "CTL2", "CTL2", "26.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HAL2", "CTL2", "CTL3", "34.600", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HAL3", "CTL3", "CTL1", "33.430", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HAL3", "CTL3", "CTL2", "34.600", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HAL3", "CTL3", "CTL3", "37.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HBL", "CTL1", "CCL", "50.000", "109.50", " ", " ", "for POPS"}, {"HBL", "CTL1", "CTL2", "35.000", "111.00", " ", " ", "for POPS"}, {"NTL", "CTL2", "CTL2", "67.7", "115.00", " ", " ", "tetramethylammonium"}, {"NTL", "CTL2", "CTL3", "67.7", "115.00", " ", " ", "tetramethylammonium"}, {"HCL", "NH3L", "CTL2", "33.0", "109.50", "4.00", "2.056", "ethanolamine"}, {"HCL", "NH3L", "CTL1", "30.0", "109.50", "20.00", "2.074", "for POPS"}, {"HCL", "NH3L", "HCL", "41.0", "109.50", " ", " ", "ethanolamine"}, {"NH3L", "CTL2", "CTL2", "67.7", "110.00", " ", " ", "ethanolamine"}, {"NH3L", "CTL2", "HAL2", "45.0", "107.50", "35.00", "2.0836", "ethanolamine"}, {"CTL1", "CTL1", "CTL1", "53.350", "111.00", "8.00", "2.561", "alkane, 3/92"}, {"NH3L", "CTL1", "CCL", "43.7", "110.00", " ", " ", "for POPS"}, {"NH3L", "CTL1", "CTL2", "67.7", "110.00", " ", " ", "for POPS"}, {"NH3L", "CTL1", "HBL", "51.5", "107.50", " ", " ", "for POPS"}, {"CTL1", "CTL1", "CTL2", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CTL1", "CTL1", "CTL3", "53.350", "108.50", "8.00", "2.561", "alkane, 3/92"}, {"CTL1", "CTL2", "CTL1", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CTL1", "CTL2", "CTL2", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CTL1", "CTL2", "CTL3", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CTL2", "CTL1", "CTL2", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CTL2", "CTL1", "CTL3", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CTL2", "CTL2", "CTL2", "58.350", "113.60", "11.16", "2.561", "alkane, 3/92"}, {"CTL2", "CTL2", "CTL3", "58.000", "115.00", "8.00", "2.561", "alkane, 3/92"}, {"CTL3", "CTL1", "CTL3", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"HOL", "OHL", "CTL1", "57.500", "106.00", " ", " ", "glycerol"}, {"HOL", "OHL", "CTL2", "57.500", "106.00", " ", " ", "glycerol"}, {"HOL", "OHL", "CTL3", "57.500", "106.00", " ", " ", "glycerol"}, {"OHL", "CTL1", "CTL1", "75.700", "110.10", " ", " ", "glycerol, PIP"}, {"OHL", "CTL1", "CTL2", "75.700", "110.10", " ", " ", "glycerol"}, {"OHL", "CTL2", "CTL1", "75.700", "110.10", " ", " ", "glycerol"}, {"OHL", "CTL2", "CTL2", "75.700", "110.10", " ", " ", "glycerol"}, {"OHL", "CTL2", "CTL3", "75.700", "110.10", " ", " ", "glycerol"}, {"OHL", "CTL1", "HAL1", "45.900", "108.89", " ", " ", "glycerol"}, {"OHL", "CTL2", "HAL2", "45.900", "108.89", " ", " ", "glycerol"}, {"OHL", "CTL3", "HAL3", "45.900", "108.89", " ", " ", "glycerol"}, {"O2L", "SL", "O2L", "130.0", "109.47", "35.0", "2.45", "methylsulfate"}, {"O2L", "SL", "OSL", "85.0", "98.0", " ", " ", "methylsulfate"}, {"CTL2", "OSL", "SL", "15.0", "109.0", "27.00", "1.90", "methylsulfate"}, {"CTL3", "OSL", "SL", "15.0", "109.0", "27.00", "1.90", "methylsulfate"}, {"CEL1", "CEL1", "CTL2", "48.00", "123.50", " ", " ", "from 2-butene, yin,adm jr., 12/95"}, {"CEL1", "CEL1", "CTL3", "48.00", "123.50", " ", " ", "2-butene, yin,adm jr., 12/95"}, {"CEL2", "CEL1", "CTL2", "48.00", "126.00", " ", " ", "1-butene; from propene, yin,adm jr., 12/95"}, {"CEL2", "CEL1", "CTL3", "47.00", "125.20", " ", " ", "propene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CEL1", "52.00", "119.50", " ", " ", "2-butene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CEL2", "42.00", "118.00", " ", " ", "propene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CTL2", "40.00", "116.00", " ", " ", "1-butene; from propene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CTL3", "22.00", "117.00", " ", " ", "propene, yin,adm jr., 12/95"}, {"HEL2", "CEL2", "CEL1", "45.00", "120.50", " ", " ", "propene, yin,adm jr., 12/95"}, {"HEL2", "CEL2", "CEL2", "55.50", "120.50", " ", " ", "ethene, yin,adm jr., 12/95"}, {"HEL2", "CEL2", "HEL2", "19.00", "119.00", " ", " ", "propene, yin,adm jr., 12/95"}, {"CEL1", "CTL2", "CTL2", "32.00", "112.20", " ", " ", "1-butene; from propene, yin,adm jr., 12/95"}, {"CEL1", "CTL2", "CTL3", "32.00", "112.20", " ", " ", "1-butene; from propene, yin,adm jr., 12/95"}, {"HAL2", "CTL2", "CEL1", "45.00", "111.50", " ", " ", "1-butene; from propene, yin,adm jr., 12/95"}, {"HAL3", "CTL3", "CEL1", "42.00", "111.50", " ", " ", "2-butene, yin,adm jr., 12/95"}, {"CEL1", "CTL2", "CEL1", "30.0", "114.0", " ", " ", "1,4-dipentene, adm jr., 2/00"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm36_lipid info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm36_lipid_dihedrals[180][8]= {{"X", "CTL1", "OHL", "X", "0.14", "3", "0.00", "glycerol"}, {"X", "CTL2", "OHL", "X", "0.14", "3", "0.00", "glycerol"}, {"X", "CTL3", "OHL", "X", "0.14", "3", "0.00", "glycerol"}, {"OCL", "CCL", "CTL1", "NH3L", "3.20", "2", "180.00", "for POPS"}, {"OBL", "CL", "CTL2", "HAL2", "0.00", "6", "180.00", "acetic acid"}, {"OBL", "CL", "CTL3", "HAL3", "0.00", "6", "180.00", "acetic acid"}, {"OSL", "CL", "CTL2", "HAL2", "0.00", "6", "180.00", "acetic acid"}, {"OSL", "CL", "CTL3", "HAL3", "0.00", "6", "180.00", "acetic acid"}, {"OSLP", "CL", "CTL2", "HAL2", "0.00", "6", "180.00", "acetic acid"}, {"OSLP", "CL", "CTL3", "HAL3", "0.00", "6", "180.00", "acetic acid"}, {"OBL", "CL", "OSL", "CTL1", "0.965", "1", "180.00", "methyl acetate"}, {"OBL", "CL", "OSL", "CTL1", "3.85", "2", "180.00", "methyl acetate"}, {"OBL", "CL", "OSL", "CTL2", "0.965", "1", "180.00", "methyl acetate"}, {"OBL", "CL", "OSL", "CTL2", "3.85", "2", "180.00", "methyl acetate"}, {"OBL", "CL", "OSL", "CTL3", "0.965", "1", "180.00", "methyl acetate"}, {"OBL", "CL", "OSL", "CTL3", "3.85", "2", "180.00", "methyl acetate"}, {"X", "CL", "OSL", "X", "2.05", "2", "180.00", "methyl acetate"}, {"X", "CTL2", "CL", "X", "0.05", "6", "180.00", "methyl acetate"}, {"X", "CTL3", "CL", "X", "0.05", "6", "180.00", "methyl acetate"}, {"X", "CL", "OHL", "X", "2.05", "2", "180.00", "acetic acid"}, {"X", "CTL1", "CCL", "X", "0.05", "6", "180.00", "for POPS"}, {"HAL2", "CTL2", "CL", "OHL", "0.00", "6", "180.00", " "}, {"HAL3", "CTL3", "CL", "OHL", "0.00", "6", "180.00", " "}, {"PL", "OSLP", "CTL2", "CTL1", "0.407", "2", "0.00", "Phos-gly, 8/05"}, {"PL", "OSLP", "CTL2", "CTL1", "0.241", "1", "180.00", "Phos-gly, 8/05"}, {"PL", "OSLP", "CTL2", "CTL2", "0.407", "2", "0.00", "Phos-gly, 8/05"}, {"PL", "OSLP", "CTL2", "CTL2", "0.241", "1", "180.00", "Phos-gly, 8/05"}, {"OSL", "PL", "OSL", "CTL1", "1.20", "1", "180.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"OSL", "PL", "OSL", "CTL1", "0.10", "2", "180.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"OSL", "PL", "OSL", "CTL1", "0.10", "3", "180.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"OSLP", "PL", "OSLP", "CTL1", "1.20", "1", "180.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"OSLP", "PL", "OSLP", "CTL1", "0.10", "2", "180.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"OSLP", "PL", "OSLP", "CTL1", "0.10", "3", "180.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"OSLP", "PL", "OSLP", "CTL2", "1.20", "1", "180.00", "phosphate, new NA, 4/98, adm jr."}, {"OSLP", "PL", "OSLP", "CTL2", "0.10", "2", "180.00", "phosphate, new NA, 4/98, adm jr."}, {"OSLP", "PL", "OSLP", "CTL2", "0.10", "3", "180.00", "phosphate, new NA, 4/98, adm jr."}, {"O2L", "PL", "OSLP", "CTL2", "0.10", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"O2L", "PL", "OSL", "CTL2", "0.10", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"OSLP", "PL", "OSLP", "CTL3", "1.20", "1", "180.00", "phosphate, new NA, 4/98, adm jr."}, {"OSLP", "PL", "OSLP", "CTL3", "0.10", "2", "180.00", "phosphate, new NA, 4/98, adm jr."}, {"OSLP", "PL", "OSLP", "CTL3", "0.10", "3", "180.00", "phosphate, new NA, 4/98, adm jr."}, {"O2L", "PL", "OSLP", "CTL1", "0.10", "3", "0.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"O2L", "PL", "OSL", "CTL1", "0.10", "3", "0.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"O2L", "PL", "OSLP", "CTL3", "0.10", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"O2L", "PL", "OSL", "CTL3", "0.10", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"OHL", "PL", "OSL", "CTL1", "0.95", "2", "0.00", "terminal phosphate, PIP"}, {"OHL", "PL", "OSL", "CTL1", "0.50", "3", "0.00", "terminal phosphate, PIP"}, {"OHL", "PL", "OSL", "CTL2", "0.95", "2", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSL", "CTL2", "0.50", "3", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSL", "CTL3", "0.95", "2", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSL", "CTL3", "0.50", "3", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSLP", "CTL2", "0.95", "2", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSLP", "CTL2", "0.50", "3", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSLP", "CTL3", "0.95", "2", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSLP", "CTL3", "0.50", "3", "0.00", "terminal phosphate"}, {"X", "OHL", "PL", "X", "0.30", "3", "0.00", "terminal phosphate"}, {"X", "CTL1", "OSL", "X", "0.00", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"X", "CTL2", "OSL", "X", "0.00", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"X", "CTL3", "OSL", "X", "0.00", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"X", "CTL1", "OSLP", "X", "0.00", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"X", "CTL2", "OSLP", "X", "0.00", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"X", "CTL3", "OSLP", "X", "0.00", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"CTL1", "CTL2", "CL", "OSL", "-0.15", "1", "180.00", "methyl propionate, 12/92"}, {"CTL1", "CTL2", "CL", "OSL", "0.53", "2", "180.00", "methyl propionate, 12/92"}, {"CTL2", "CTL2", "CL", "OSL", "0.000", "6", "0.00", "glycerol and propl ester, 6/07"}, {"CTL2", "CTL2", "CL", "OSL", "0.030", "3", "180.00", "glycerol and propl ester, 6/07"}, {"CTL2", "CTL2", "CL", "OSL", "0.432", "2", "180.00", "glycerol and propl ester, 6/07"}, {"CTL2", "CTL2", "CL", "OSL", "0.332", "1", "0.00", "glycerol and propl ester, 6/07"}, {"CTL3", "CTL2", "CL", "OSL", "0.000", "6", "0.00", "glycerol and propl ester, 6/07"}, {"CTL3", "CTL2", "CL", "OSL", "0.030", "3", "180.00", "glycerol and propl ester, 6/07"}, {"CTL3", "CTL2", "CL", "OSL", "0.432", "2", "180.00", "glycerol and propl ester, 6/07"}, {"CTL3", "CTL2", "CL", "OSL", "0.332", "1", "0.00", "glycerol and propl ester, 6/07"}, {"CTL3", "CTL2", "CTL2", "CL", "0.000", "5", "180.00", "propyl ester, 6/07"}, {"CTL3", "CTL2", "CTL2", "CL", "0.317", "3", "180.00", "propyl ester, 6/07"}, {"CTL3", "CTL2", "CTL2", "CL", "0.557", "2", "0.00", "propyl ester, 6/07"}, {"CTL3", "CTL2", "CTL2", "CL", "0.753", "1", "0.00", "propyl ester, 6/07"}, {"CTL2", "CTL2", "CTL2", "CL", "0.000", "5", "180.00", "propyl ester, 6/07"}, {"CTL2", "CTL2", "CTL2", "CL", "0.317", "3", "180.00", "propyl ester, 6/07"}, {"CTL2", "CTL2", "CTL2", "CL", "0.557", "2", "0.00", "propyl ester, 6/07"}, {"CTL2", "CTL2", "CTL2", "CL", "0.753", "1", "0.00", "propyl ester, 6/07"}, {"OSL", "CTL2", "CTL1", "OSL", "-0.429", "4", "60.00", "glycerol, 8/08"}, {"OSL", "CTL2", "CTL1", "OSL", "0.614", "3", "0.00", "glycerol, 8/08"}, {"OSL", "CTL2", "CTL1", "OSL", "-0.115", "2", "60.00", "glycerol, 8/08"}, {"OSL", "CTL2", "CTL1", "OSL", "0.703", "1", "180.00", "glycerol, 8/08"}, {"OSLP", "CTL2", "CTL1", "OSL", "0.000", "4", "0.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL1", "OSL", "0.607", "3", "180.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL1", "OSL", "0.254", "2", "60.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL1", "OSL", "2.016", "1", "180.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL2", "OSL", "0.000", "4", "0.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL2", "OSL", "0.607", "3", "180.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL2", "OSL", "0.254", "2", "60.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL2", "OSL", "2.016", "1", "180.00", "Fit to QM, theta2, 07/08 jbk"}, {"CTL3", "CTL1", "CTL2", "OSL", "0.000", "3", "0.00", "glycerol, theta3"}, {"CTL2", "CTL1", "CTL2", "OSL", "0.000", "3", "0.00", "glycerol, theta3"}, {"CTL3", "CTL2", "CTL2", "OSL", "0.000", "3", "0.00", "glycerol, theta3"}, {"CTL2", "CTL2", "CTL2", "OSL", "0.000", "3", "0.00", "glycerol, theta3"}, {"CL", "OSL", "CTL1", "CTL2", "0.000", "4", "0.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL2", "0.150", "3", "180.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL2", "1.453", "2", "180.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL2", "0.837", "1", "180.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL3", "0.000", "4", "0.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL3", "0.150", "3", "180.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL3", "1.453", "2", "180.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL3", "0.837", "1", "180.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL2", "CTL1", "0.267", "3", "180.00", "glycerol, gamma1 6/07"}, {"CL", "OSL", "CTL2", "CTL1", "0.173", "2", "0.00", "glycerol, gamma1 6/07"}, {"CL", "OSL", "CTL2", "CTL1", "0.781", "1", "180.00", "glycerol, gamma1 6/07"}, {"X", "CTL2", "NTL", "X", "0.26", "3", "0.00", "tetramethylammonium"}, {"X", "CTL5", "NTL", "X", "0.23", "3", "0.00", "tetramethylammonium"}, {"X", "CTL1", "NH3L", "X", "0.10", "3", "0.00", "for POPS"}, {"X", "CTL2", "NH3L", "X", "0.10", "3", "0.00", "ethanolamine"}, {"NH3L", "CTL2", "CTL2", "OHL", "0.7", "1", "180.00", "ethanolamine"}, {"NH3L", "CTL2", "CTL2", "OSLP", "0.7", "1", "180.00", "ethanolamine"}, {"NTL", "CTL2", "CTL2", "OHL", "4.3", "1", "180.00", "choline, 12/92"}, {"NTL", "CTL2", "CTL2", "OHL", "-0.4", "3", "180.00", "choline, 12/92"}, {"NTL", "CTL2", "CTL2", "OSLP", "3.3", "1", "180.00", "choline, 12/92"}, {"NTL", "CTL2", "CTL2", "OSLP", "-0.4", "3", "180.00", "choline, 12/92"}, {"X", "CTL1", "CTL1", "X", "0.200", "3", "0.00", "alkane, 3/92"}, {"X", "CTL1", "CTL2", "X", "0.200", "3", "0.00", "alkane, 3/92"}, {"X", "CTL1", "CTL3", "X", "0.200", "3", "0.00", "alkane, 3/92"}, {"X", "CTL2", "CTL2", "X", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CTL2", "CTL3", "X", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CTL3", "CTL3", "X", "0.1525", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"CTL3", "CTL2", "CTL2", "CTL3", "0.060", "2", "0.00", "alkane, 7/08, jbk"}, {"CTL3", "CTL2", "CTL2", "CTL3", "0.035", "5", "0.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL3", "0.162", "2", "0.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL3", "0.047", "3", "180.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL3", "0.105", "4", "0.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL3", "0.177", "5", "0.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL2", "0.101", "2", "0.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL2", "0.142", "3", "180.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL2", "0.074", "4", "0.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL2", "0.097", "5", "0.00", "alkane, 7/08, jbk"}, {"HAL3", "CTL3", "OSL", "SL", "0.00", "3", "0.00", "methylsulfate"}, {"CTL2", "OSL", "SL", "O2L", "0.00", "3", "0.00", "methylsulfate"}, {"CTL3", "OSL", "SL", "O2L", "0.00", "3", "0.00", "methylsulfate"}, {"HEL1", "CEL1", "CEL1", "HEL1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"CTL3", "CEL1", "CEL1", "HEL1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"X", "CEL1", "CEL1", "X", "0.4500", "1", "180.00", "2-butene, adm jr., 4/04"}, {"X", "CEL1", "CEL1", "X", "8.5000", "2", "180.00", " "}, {"X", "CEL2", "CEL2", "X", "4.9000", "2", "180.00", "ethene, yin,adm jr., 12/95"}, {"CTL2", "CEL1", "CEL2", "HEL2", "5.2000", "2", "180.00", "propene, yin,adm jr., 12/95"}, {"CTL3", "CEL1", "CEL2", "HEL2", "5.2000", "2", "180.00", "propene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CEL2", "HEL2", "5.2000", "2", "180.00", "propene, yin,adm jr., 12/95"}, {"CEL1", "CEL1", "CTL2", "HAL2", "0.3000", "3", "180.00", "adm jr., 4/04"}, {"CEL1", "CEL1", "CTL3", "HAL3", "0.3000", "3", "180.00", "adm jr., 4/04"}, {"CEL1", "CEL1", "CTL2", "CTL3", "0.9100", "1", "180.0", "adm jr., 11/09, end fix jbk"}, {"CEL1", "CEL1", "CTL2", "CTL3", "0.1800", "2", "180.0", "adm jr., 11/09"}, {"CEL1", "CEL1", "CTL2", "CTL3", "0.1700", "3", "180.0", "adm jr., 11/09"}, {"CEL1", "CEL1", "CTL2", "CTL2", "0.9100", "1", "180.0", "adm jr., 11/09"}, {"CEL1", "CEL1", "CTL2", "CTL2", "0.1800", "2", "180.0", "adm jr., 11/09"}, {"CEL1", "CEL1", "CTL2", "CTL2", "0.1700", "3", "180.0", "adm jr., 11/09"}, {"CEL1", "CTL2", "CTL2", "CL", "0.1400", "1", "180.0", "adm jr., 11/09, add jbk for DHA"}, {"CEL1", "CTL2", "CTL2", "CL", "0.1700", "2", "0.0", "adm jr., 11/09, add jbk for DHA"}, {"CEL1", "CTL2", "CTL2", "CL", "0.0500", "3", "180.0", "adm jr., 11/09, add jbk for DHA"}, {"CEL1", "CTL2", "CTL2", "CTL2", "0.1400", "1", "180.0", "adm jr., 11/09"}, {"CEL1", "CTL2", "CTL2", "CTL2", "0.1700", "2", "0.0", "adm jr., 11/09"}, {"CEL1", "CTL2", "CTL2", "CTL2", "0.0500", "3", "180.0", "adm jr., 11/09"}, {"CEL1", "CTL2", "CTL2", "CTL3", "0.1400", "1", "180.0", "adm jr., 11/09"}, {"CEL1", "CTL2", "CTL2", "CTL3", "0.1700", "2", "0.0", "adm jr., 11/09"}, {"CEL1", "CTL2", "CTL2", "CTL3", "0.0500", "3", "180.0", "adm jr., 11/09"}, {"CEL2", "CEL1", "CTL2", "CTL2", "0.5000", "1", "180.00", "1-butene, adm jr., 2/00 update"}, {"CEL2", "CEL1", "CTL2", "CTL2", "1.3000", "3", "180.00", "1-butene, adm jr., 2/00 update"}, {"CEL2", "CEL1", "CTL2", "CTL3", "0.5000", "1", "180.00", "1-butene, adm jr., 2/00 update"}, {"CEL2", "CEL1", "CTL2", "CTL3", "1.3000", "3", "180.00", "1-butene, adm jr., 2/00 update"}, {"CEL2", "CEL1", "CTL2", "HAL2", "0.1200", "3", "0.00", "1-butene, yin,adm jr., 12/95"}, {"CEL2", "CEL1", "CTL3", "HAL3", "0.0500", "3", "180.00", "propene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CTL2", "CTL2", "0.1200", "3", "0.00", "butene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CTL2", "CTL3", "0.1200", "3", "0.00", "butene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CTL2", "HAL2", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HEL1", "CEL1", "CTL3", "HAL3", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"CEL2", "CEL1", "CTL2", "CEL1", "1.200", "1", "180.00", " "}, {"CEL2", "CEL1", "CTL2", "CEL1", "0.400", "2", "180.00", " "}, {"CEL2", "CEL1", "CTL2", "CEL1", "1.300", "3", "180.00", " "}, {"CEL1", "CTL2", "CEL1", "HEL1", "0.000", "2", "0.00", " "}, {"CEL1", "CTL2", "CEL1", "HEL1", "0.000", "3", "0.00", " "}, {"CEL1", "CEL1", "CTL2", "CEL1", "0.850", "1", "180.00", " "}, {"CEL1", "CEL1", "CTL2", "CEL1", "0.300", "2", "180.00", " "}, {"CEL1", "CEL1", "CTL2", "CEL1", "0.260", "3", "0.00", " "}, {"CEL1", "CEL1", "CTL2", "CEL1", "0.096", "4", "0.00", " "}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm36_lipid info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm36_lipid_impropers[4][8]= {{"OBL", "X", "X", "CL", "100.00", "0", "0.00", "acetic acid"}, {"HEL2", "HEL2", "CEL2", "CEL2", "3.00", "0", "0.00", "ethene, yin,adm jr., 12/95"}, {"OCL", "X", "X", "CL", "96.00", "0", "0.00", "acetate"}, {"OCL", "X", "X", "CCL", "96.00", "0", "0.00", "for POPS"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm36_lipid info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm36_lipid_vdw[29][6]= {{"HOL", "-0.046", "0.2245", " ", " ", " "}, {"HAL1", "-0.022", "1.3200", " ", " ", "3/92"}, {"HAL2", "-0.028", "1.3400", " ", " ", "yin and mackerell, 4/98"}, {"HAL3", "-0.024", "1.3400", " ", " ", "yin and mackerell, 4/98"}, {"HBL", "-0.022", "1.3200", " ", " ", "POPS"}, {"HCL", "-0.046", "0.2245", " ", " ", " "}, {"HL", "-0.046", "0.7", " ", " ", "H on NC4+"}, {"HEL1", "-0.031", "1.25", " ", " ", "yin,adm jr., 12/95"}, {"HEL2", "-0.026", "1.26", " ", " ", "yin,adm jr., 12/95"}, {"CL", "-0.0700", "2.00", " ", " ", "acetate update"}, {"CCL", "-0.0700", "2.00", " ", " ", "POPS"}, {"CTL1", "-0.0200", "2.275", "-0.01", "1.9", "alkane, 3/92"}, {"CTL2", "-0.0560", "2.010", "-0.01", "1.9", "alkane, 4/98, yin, adm jr."}, {"CTL3", "-0.0780", "2.040", "-0.01", "1.9", "alkane, 4/98, yin, adm jr."}, {"CTL5", "-0.0800", "2.06", "-0.01", "1.9", "old CTL3"}, {"CEL1", "-0.068", "2.09", " ", " ", "yin,adm jr., 12/95"}, {"CEL2", "-0.064", "2.08", " ", " ", "yin,adm jr., 12/95"}, {"CRL1", "-0.0360", "2.010", "-0.01", "1.9", "CGAFF, jbk add for cholesterol"}, {"CRL2", "-0.0600", "2.020", "-0.01", "1.9", "CPEN, cyclopentane, 8/06 viv (jbk add)"}, {"OBL", "-0.12", "1.70", "-0.12", "1.4", " "}, {"OCL", "-0.12", "1.70", " ", " ", " "}, {"O2L", "-0.12", "1.70", " ", " ", " "}, {"OHL", "-0.1521", "1.77", " ", " ", " "}, {"OSL", "-0.1000", "1.6500", " ", " ", "ether parameter"}, {"OSLP", "-0.1000", "1.6500", " ", " ", "ether parameter"}, {"NH3L", "-0.20", "1.85", " ", " ", " "}, {"NTL", "-0.20", "1.85", " ", " ", "all other nitogens"}, {"SL", "-0.47", "2.1", " ", " ", " "}, {"PL", "-0.585", "2.15", " ", " ", "Jr."}}; atomes_1.3.1/src/calc/force_fields/charmm35_ethers.c0000664000175000017500000006451415212624223021771 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm35_ethers.c * @short CHARMM-charmm35_ethers force field, from 'charmm35_ethers' * @author Sébastien Le Roux */ /* * This file: 'charmm35_ethers.c' * * Contains: * CHARMM-charmm35_ethers force field, data from taken from: - the file: 'charmm35_ethers' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm35_ethers_atoms[13][5] Bonds : charmm35_ethers_bonds[22][5] Angles : charmm35_ethers_angles[55][8] Dihedrals : charmm35_ethers_dihedrals[106][8] Non bonded : charmm35_ethers_vdw[13][6] */ #include "global.h" int charmm35_ethers_objects[14] = {13, 0, 0, 22, 0, 0, 55, 0, 106, 0 , 0, 0, 13, 0}; int charmm35_ethers_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 0, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm35_ethers info */ char * charmm35_ethers_atoms[13][5]= {{"H", "1.00800", "HCA1A", "Alkane H attached to C(sp3)H (eq. HA1)", "241"}, {"H", "1.00800", "HCA2A", "Alkane H attached to C(sp3)H2 (eq. HA2)", "242"}, {"H", "1.00800", "HCA3A", "Alkane H attached to C(sp3)H3 (eq. HA3)", "243"}, {"H", "1.00800", "HCA25A", "Alkane H attached to C(sp3)H2 in 5-membered ring", "244"}, {"C", "12.01100", "CC30A", "-C(sp3) Carbon (eq. CT)", "245"}, {"C", "12.01100", "CC31A", "-C(sp3)H Carbon (eq. CT1)", "246"}, {"C", "12.01100", "CC32A", "-C(sp3)H2 Carbon (eq. CT2)", "247"}, {"C", "12.01100", "CC33A", "-C(sp3)H3 Carbon (eq. CT3)", "248"}, {"C", "12.01100", "CC325A", "-C(sp3)H2 Carbon in 5-membered ring", "249"}, {"C", "12.01100", "CC325B", "-C(sp3)H2 Carbon in THF (tetrahydrofuran)", "250"}, {"C", "12.01100", "CC326A", "-C(sp3)H2 Carbon in THP (tetrahydropyran)", "251"}, {"O", "15.99940", "OC30A", "Ether Oxygen", "252"}, {"O", "15.99940", "OC305A", "Ether Oxygen in THF", "253"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm35_ethers info V(R) = Kb x (R - R0)^2 */ char * charmm35_ethers_bonds[22][5]= {{"CC31A", "HCA1A", "309.00", "1.111", "alkanes, 4/98"}, {"CC32A", "HCA2A", "309.00", "1.111", "alkanes, 4/98"}, {"CC33A", "HCA3A", "322.00", "1.111", "alkanes, 4/98"}, {"CC30A", "CC32A", "222.50", "1.538", "10/98"}, {"CC30A", "CC33A", "222.50", "1.538", "10/98"}, {"CC31A", "CC31A", "222.50", "1.500", "alkanes, 3/92"}, {"CC31A", "CC32A", "222.50", "1.538", "alkanes, 3/92"}, {"CC31A", "CC33A", "222.50", "1.538", "alkanes, 3/92"}, {"CC32A", "CC32A", "222.50", "1.530", "alkanes, 3/92"}, {"CC32A", "CC33A", "222.50", "1.528", "alkanes, 3/92"}, {"CC33A", "CC33A", "222.50", "1.530", "alkanes, 3/92"}, {"CC325A", "CC325A", "195.00", "1.548", "cyclopentane CPEN 10/17/05 viv"}, {"CC325A", "HCA25A", "307.00", "1.116", "cyclopentane CPEN 10/17/05 viv"}, {"CC325B", "OC305A", "350.00", "1.425", "THF, nucleotide CSD/NDB survey, 5/30/06,viv"}, {"CC325B", "CC325B", "195.00", "1.518", "THF, nucleotide CSD/NDB survey, 5/30/06,viv"}, {"CC325B", "HCA25A", "307.00", "1.100", "THF, THF neutron diffr., 5/30/06, viv"}, {"CC325B", "CC33A", "222.50", "1.528", "TF2M, viv"}, {"CC32A", "OC30A", "360.00", "1.415", "DEET, diethylether, alex"}, {"CC33A", "OC30A", "360.00", "1.415", "DEET, diethylether, alex"}, {"CC326A", "HCA2A", "309.00", "1.111", "THP, viv"}, {"CC326A", "CC326A", "222.50", "1.530", "THP, viv"}, {"CC326A", "OC30A", "360.00", "1.415", "DEET, diethylether, viv"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm35_ethers info V(S) = Kub x (S - S0)^2 */ char * charmm35_ethers_angles[55][8]= {{"HCA1A", "CC31A", "CC31A", "34.500", "110.10", "22.53", "2.179", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC32A", "34.500", "110.10", "22.53", "2.179", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC33A", "34.500", "110.10", "22.53", "2.179", "alkane, 3/92"}, {"HCA2A", "CC32A", "CC30A", "26.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA2A", "CC32A", "CC31A", "26.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA2A", "CC32A", "CC32A", "26.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA2A", "CC32A", "CC33A", "34.600", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA3A", "CC33A", "CC30A", "33.430", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA3A", "CC33A", "CC31A", "33.430", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA3A", "CC33A", "CC32A", "34.600", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA3A", "CC33A", "CC33A", "37.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA2A", "CC32A", "HCA2A", "35.50", "109.00", "5.40", "1.802", "alkane, 3/92"}, {"HCA3A", "CC33A", "HCA3A", "35.50", "108.40", "5.40", "1.802", "alkane, 3/92"}, {"CC30A", "CC32A", "CC32A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC30A", "CC32A", "CC33A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC31A", "CC31A", "CC31A", "53.350", "111.00", "8.00", "2.561", "alkane, 3/92"}, {"CC31A", "CC31A", "CC32A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC31A", "CC31A", "CC33A", "53.350", "108.50", "8.00", "2.561", "alkane, 3/92"}, {"CC31A", "CC32A", "CC31A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC31A", "CC32A", "CC32A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC31A", "CC32A", "CC33A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC32A", "CC30A", "CC32A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC32A", "CC31A", "CC32A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC32A", "CC32A", "CC32A", "58.350", "113.60", "11.16", "2.561", "alkane, 3/92"}, {"CC32A", "CC32A", "CC33A", "58.000", "115.00", "8.00", "2.561", "alkane, 3/92"}, {"CC33A", "CC30A", "CC33A", "53.350", "114.00", "8.00", "2.561", "alkane 3/2/92"}, {"CC33A", "CC31A", "CC32A", "53.350", "114.00", "8.00", "2.561", "alkane 3/2/92"}, {"CC33A", "CC31A", "CC33A", "53.350", "114.00", "8.00", "2.561", "alkane 3/2/92"}, {"CC33A", "CC32A", "CC33A", "53.350", "114.00", "8.00", "2.561", "alkane 3/2/92"}, {"CC325A", "CC325A", "CC325A", "58.00", "106.00", "11.16", "2.561", "CPEN 10/17/05 viv"}, {"HCA25A", "CC325A", "CC325A", "35.00", "111.40", "22.53", "2.179", "CPEN 10/17/05 viv"}, {"HCA25A", "CC325A", "HCA25A", "38.50", "106.80", "5.40", "1.802", "CPEN 10/17/05 viv"}, {"HCA25A", "CC325B", "CC325B", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"HCA25A", "CC325B", "HCA25A", "38.50", "106.80", "5.40", "1.802", "THF, 10/17/05 viv"}, {"CC325B", "CC325B", "CC325B", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"OC305A", "CC325B", "CC325B", "45.00", "111.10", " ", " ", "THF 10/21/05, viv"}, {"CC325B", "OC305A", "CC325B", "95.00", "111.00", " ", " ", "THF 10/21/05, viv"}, {"HCA25A", "CC325B", "OC305A", "70.00", "107.30", " ", " ", "THF 10/21/05, viv"}, {"HCA3A", "CC33A", "CC325B", "34.600", "110.10", "22.53", "2.179", "TF2M viv"}, {"CC325B", "CC325B", "CC33A", "58.000", "115.00", "8.00", "2.561", "TF2M viv"}, {"HCA25A", "CC325B", "CC33A", "34.600", "110.10", "22.53", "2.179", "TF2M viv"}, {"OC305A", "CC325B", "CC33A", "45.00", "111.50", " ", " ", "TF2M, viv"}, {"CC32A", "OC30A", "CC32A", "95.00", "109.70", " ", " ", "DEET, diethylether, alex"}, {"CC33A", "OC30A", "CC32A", "95.00", "109.70", " ", " ", "DEET, diethylether, alex"}, {"CC33A", "OC30A", "CC33A", "95.00", "109.70", " ", " ", "DEET, diethylether, alex"}, {"OC30A", "CC32A", "CC32A", "45.00", "111.50", " ", " ", "DEET, diethylether, alex"}, {"OC30A", "CC32A", "CC33A", "45.00", "111.50", " ", " ", "DEET, diethylether, alex"}, {"HCA3A", "CC33A", "OC30A", "60.00", "109.50", " ", " ", "phosphate, alex"}, {"HCA2A", "CC32A", "OC30A", "60.00", "109.50", " ", " ", "phosphate, alex"}, {"HCA2A", "CC326A", "CC326A", "34.500", "110.10", "22.53", "2.179", "THP, sng cyclohexane 12/05"}, {"HCA2A", "CC326A", "HCA2A", "35.50", "109.00", "5.40", "1.80200!", "viv"}, {"CC326A", "CC326A", "CC326A", "58.350", "112.00", "11.16", "2.561", "THP, sng cyclohexane 12/05"}, {"OC30A", "CC326A", "CC326A", "45.00", "111.50", " ", " ", "THP, viv"}, {"CC326A", "OC30A", "CC326A", "95.00", "109.70", " ", " ", "THP, viv"}, {"HCA2A", "CC326A", "OC30A", "45.00", "109.50", " ", " ", "THP, sng 02/06"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm35_ethers info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm35_ethers_dihedrals[106][8]= {{"CC31A", "CC30A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC32A", "CC30A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC33A", "CC30A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC31A", "CC30A", "CC33A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC32A", "CC30A", "CC32A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC33A", "CC30A", "CC32A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC31A", "HCA1A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC31A", "CC31A", "CC31A", "HCA1A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC32A", "CC31A", "CC31A", "HCA1A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC33A", "CC31A", "CC31A", "HCA1A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC32A", "CC31A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC32A", "CC32A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC32A", "CC33A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC31A", "CC31A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC32A", "CC31A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC33A", "CC31A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC33A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC31A", "CC31A", "CC33A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC32A", "CC31A", "CC33A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC33A", "CC31A", "CC33A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA2A", "CC32A", "CC32A", "HCA2A", "0.19000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"CC30A", "CC32A", "CC32A", "HCA2A", "0.19000", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"CC31A", "CC32A", "CC32A", "HCA2A", "0.19000", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"CC32A", "CC32A", "CC32A", "HCA2A", "0.19000", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"CC33A", "CC32A", "CC32A", "HCA2A", "0.19000", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"HCA2A", "CC32A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"CC30A", "CC32A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"CC31A", "CC32A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"CC32A", "CC32A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"CC33A", "CC32A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"CC33A", "CC32A", "CC32A", "CC33A", "0.03179", "6", "180.0", "alkane, c27r klauda et al 2004"}, {"CC33A", "CC32A", "CC32A", "CC33A", "0.03819", "2", "0.0", "alkane, c27r klauda et al 2004"}, {"CC33A", "CC32A", "CC32A", "CC32A", "0.20391", "5", "0.0", "alkane, c27r klauda et al 2004"}, {"CC33A", "CC32A", "CC32A", "CC32A", "0.10824", "4", "0.0", "alkane, c27r klauda et al 2004"}, {"CC33A", "CC32A", "CC32A", "CC32A", "0.08133", "3", "180.0", "alkane, c27r klauda et al 2004"}, {"CC33A", "CC32A", "CC32A", "CC32A", "0.15051", "2", "0.0", "alkane, c27r klauda et al 2004"}, {"CC32A", "CC32A", "CC32A", "CC32A", "0.11251", "5", "0.0", "alkane, c27r klauda et al 2004"}, {"CC32A", "CC32A", "CC32A", "CC32A", "0.09458", "4", "0.0", "alkane, c27r klauda et al.2004"}, {"CC32A", "CC32A", "CC32A", "CC32A", "0.14975", "3", "180.0", "alkane, c27r klauda et al 2004"}, {"CC32A", "CC32A", "CC32A", "CC32A", "0.06450", "2", "0.0", "alkane, c27r klauda et al 2004"}, {"CC33A", "CC325A", "CC325A", "CC33A", "0.16000", "3", "0.0", "4/98, yin and mackerell, cpen, viv"}, {"CC33A", "CC325A", "CC325A", "CC325A", "0.16000", "3", "0.0", "4/98, yin and mackerell, cpen, viv"}, {"CC33A", "CC325A", "CC325A", "HCA25A", "0.16000", "3", "0.0", "4/98, yin and mackerell, cpen, viv"}, {"HCA25A", "CC325A", "CC325A", "HCA25A", "0.16000", "3", "0.0", "4/98, yin and mackerell, cpen, viv"}, {"CC325A", "CC325A", "CC325A", "HCA25A", "0.16000", "3", "0.0", "4/98, yin and mackerell, cpen, viv"}, {"CC325A", "CC325A", "CC325A", "CC325A", "0.41000", "3", "180.0", "cpen, cyclopentane, viv 10/4/05"}, {"CC33A", "CC325B", "CC325B", "CC33A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thf, viv"}, {"CC33A", "CC325B", "CC325B", "CC325B", "0.19000", "3", "0.0", "4/98, yin and mackerell, thf, viv"}, {"CC33A", "CC325B", "CC325B", "HCA25A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thf, viv"}, {"HCA25A", "CC325B", "CC325B", "HCA25A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thf, viv"}, {"CC325B", "CC325B", "CC325B", "HCA25A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thf, viv"}, {"OC305A", "CC325B", "CC325B", "HCA25A", "0.19000", "3", "0.0", "alkane, 4/98, yin and mackerell, thf viv"}, {"HCA25A", "CC325B", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"CC325B", "CC325B", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"OC305A", "CC325B", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"CC325B", "CC325B", "CC325B", "CC325B", "0.41000", "3", "180.0", "CPEN viv 10/4/05"}, {"HCA25A", "CC325B", "OC305A", "CC325B", "0.3000", "3", "0.0", "THF, 05/30/06, viv"}, {"OC305A", "CC325B", "CC325B", "CC325B", "0.0000", "3", "0.0", "THF, 05/30/06, viv"}, {"CC325B", "CC325B", "OC305A", "CC325B", "0.5000", "3", "0.0", "THF, 05/30/06, viv"}, {"CC33A", "CC325B", "OC305A", "CC325B", "0.3000", "3", "0.0", "THF, 05/30/06, viv"}, {"CC33A", "CC326A", "CC326A", "CC33A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thp, viv"}, {"CC33A", "CC326A", "CC326A", "CC326A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thp, viv"}, {"CC33A", "CC326A", "CC326A", "HCA2A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thp, viv"}, {"HCA2A", "CC326A", "CC326A", "HCA2A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thp, viv"}, {"HCA2A", "CC326A", "CC326A", "CC326A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thp, viv"}, {"OC30A", "CC326A", "CC326A", "HCA2A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thp viv"}, {"HCA2A", "CC326A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell, me-thp viv"}, {"CC326A", "CC326A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell, me-thp viv"}, {"OC30A", "CC326A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell, me-thp viv"}, {"CC326A", "CC326A", "CC326A", "CC326A", "0.49829", "2", "0.0", "THP, viv"}, {"CC326A", "CC326A", "CC326A", "CC326A", "-0.59844", "3", "0.0", "THP, viv"}, {"CC326A", "CC326A", "CC326A", "CC326A", "0.41746", "4", "0.0", "THP, viv"}, {"CC326A", "CC326A", "CC326A", "CC326A", "-0.24829", "5", "0.0", "THP, viv"}, {"OC30A", "CC326A", "CC326A", "CC326A", "-0.19225", "1", "0.0", "THP, sng 1/06"}, {"OC30A", "CC326A", "CC326A", "CC326A", "-1.00000", "2", "0.0", "THP, sng 1/06"}, {"OC30A", "CC326A", "CC326A", "CC326A", "0.59457", "3", "0.0", "THP, sng 1/06"}, {"OC30A", "CC326A", "CC326A", "CC326A", "-0.07862", "4", "0.0", "THP, sng 1/06"}, {"HCA3A", "CC33A", "CC33A", "HCA3A", "0.15250", "3", "0.00", "ETHA, ethane, 4/98, yin and mackerell"}, {"CC326A", "OC30A", "CC326A", "CC326A", "-0.52702", "1", "0.0", "THP, sng 1/06"}, {"CC326A", "OC30A", "CC326A", "CC326A", "0.68297", "2", "0.0", "THP, sng 1/06"}, {"CC326A", "OC30A", "CC326A", "CC326A", "-0.20977", "3", "0.0", "THP, sng 1/06"}, {"CC326A", "OC30A", "CC326A", "CC326A", "0.15037", "4", "0.0", "THP, sng 1/06"}, {"CC326A", "OC30A", "CC326A", "HCA2A", "0.28400", "3", "0.0", "DMET, viv"}, {"HCA2A", "CC32A", "CC32A", "OC30A", "0.19000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"OC30A", "CC32A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"HCA2A", "CC32A", "OC30A", "CC32A", "0.28400", "3", "0.0", "DEET, diethylether, alex"}, {"HCA3A", "CC33A", "OC30A", "CC32A", "0.28400", "3", "0.0", "DEET, diethylether, alex"}, {"HCA2A", "CC32A", "OC30A", "CC33A", "0.28400", "3", "0.0", "DEET, diethylether, alex"}, {"HCA3A", "CC33A", "OC30A", "CC33A", "0.28400", "3", "0.0", "DME, viv"}, {"CC33A", "CC32A", "OC30A", "CC32A", "0.40", "1", "0.0", "diethylether, 2/12/05, ATM"}, {"CC33A", "CC32A", "OC30A", "CC32A", "0.49", "3", "0.0", "diethylether"}, {"CC33A", "CC32A", "OC30A", "CC33A", "0.40", "1", "0.0", "diethylether, 2/12/05, ATM, MEE viv"}, {"CC33A", "CC32A", "OC30A", "CC33A", "0.49", "3", "0.0", "diethylether, MEE viv"}, {"CC32A", "CC32A", "OC30A", "CC33A", "0.57", "1", "0.0", "1,2 dimethoxyethane (DME), 2/12/05, ATM"}, {"CC32A", "CC32A", "OC30A", "CC33A", "0.29", "2", "0.0", "1,2 dimethoxyethane (DME)"}, {"CC32A", "CC32A", "OC30A", "CC33A", "0.43", "3", "0.0", "1,2 dimethoxyethane (DME)"}, {"CC32A", "CC32A", "OC30A", "CC32A", "0.57", "1", "0.0", "1,2 dimethoxyethane, 2/12/05, ATM"}, {"CC32A", "CC32A", "OC30A", "CC32A", "0.29", "2", "0.0", "1,2 dimethoxyethane"}, {"CC32A", "CC32A", "OC30A", "CC32A", "0.43", "3", "0.0", "1,2 dimethoxyethane"}, {"OC30A", "CC32A", "CC32A", "OC30A", "0.59", "1", "180.0", "1,2 dimethoxyethane, Aug 2007, HK Lee"}, {"OC30A", "CC32A", "CC32A", "OC30A", "1.16", "2", "0.0", "1,2 dimethoxyethane"}, {"OC30A", "CC32A", "CC32A", "CC33A", "0.16", "1", "180.0", "methylpropylether, 2/12/05, ATM"}, {"OC30A", "CC32A", "CC32A", "CC33A", "0.39", "2", "0.0", "methylpropylether"}, {"OC30A", "CC32A", "CC32A", "CC32A", "0.16", "1", "180.0", "methylpropylether, 2/12/05, ATM"}, {"OC30A", "CC32A", "CC32A", "CC32A", "0.39", "2", "0.0", "methylpropylether"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm35_ethers info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm35_ethers_vdw[13][6]= {{"HCA1A", "-0.0450", "1.3400", " ", " ", "1/5/05 viv"}, {"HCA2A", "-0.0350", "1.3400", " ", " ", "11/16/04 viv"}, {"HCA3A", "-0.0240", "1.3400", " ", " ", "yin and mackerell, 4/98"}, {"CC30A", "-0.0320", "2.0000", "-0.01", "1.9", "from CC31A"}, {"CC31A", "-0.0320", "2.0000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC32A", "-0.0560", "2.0100", "-0.01", "1.9", "alkane, 4/98, yin, adm jr."}, {"CC33A", "-0.0780", "2.0400", "-0.01", "1.9", "alkane, 4/98, yin, adm jr."}, {"CC326A", "-0.0560", "2.0100", "-0.01", "1.9", "THP, tetrahyropyran, viv"}, {"HCA25A", "-0.0350", "1.3000", " ", " ", "cyclopentane, 8/06 viv"}, {"CC325A", "-0.0600", "2.0200", "-0.01", "1.9", "CPEN, cyclopentane, 8/06 viv"}, {"CC325B", "-0.0600", "2.0200", "-0.01", "1.9", "CPEN, cyclopentane, 8/06 viv"}, {"OC305A", "-0.1000", "1.6500", " ", " ", "tetrahydropyran sng 1/06"}, {"OC30A", "-0.1000", "1.6500", " ", " ", "tetrahydropyran sng 1/06"}}; atomes_1.3.1/src/calc/force_fields/charmm36_cgenff.c0000664000175000017500000323444715212624223021737 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm36_cgenff.c * @short CHARMM-charmm36_cgenff force field, from 'charmm36_cgenff' * @author Sébastien Le Roux */ /* * This file: 'charmm36_cgenff.c' * * Contains: * CHARMM-charmm36_cgenff force field, data from taken from: - the file: 'charmm36_cgenff' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm36_cgenff_atoms[163][5] Bonds : charmm36_cgenff_bonds[506][5] Angles : charmm36_cgenff_angles[1561][8] Dihedrals : charmm36_cgenff_dihedrals[3937][8] Impropers : charmm36_cgenff_impropers[125][8] Non bonded : charmm36_cgenff_vdw[156][6] */ #include "global.h" int charmm36_cgenff_objects[14] = {163, 0, 0, 506, 0, 0, 1561, 0, 3937, 0 , 0, 125, 156, 0}; int charmm36_cgenff_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm36_cgenff info */ char * charmm36_cgenff_atoms[163][5]= {{"H", "1.00800", "HGA1", "alphatic proton, CH", "256"}, {"H", "1.00800", "HGA2", "alphatic proton, CH2", "257"}, {"H", "1.00800", "HGA3", "alphatic proton, CH3", "258"}, {"H", "1.00800", "HGA4", "alkene proton; RHC=", "259"}, {"H", "1.00800", "HGA5", "alkene proton; H2C=CR", "260"}, {"H", "1.00800", "HGA6", "aliphatic H on fluorinated C, monofluoro", "261"}, {"H", "1.00800", "HGA7", "aliphatic H on fluorinated C, difluoro", "262"}, {"H", "1.00800", "HGAAM0", "aliphatic H, NEUTRAL trimethylamine (#)", "263"}, {"H", "1.00800", "HGAAM1", "aliphatic H, NEUTRAL dimethylamine (#)", "264"}, {"H", "1.00800", "HGAAM2", "aliphatic H, NEUTRAL methylamine (#)", "265"}, {"H", "1.00800", "HGP1", "polar H", "266"}, {"H", "1.00800", "HGP2", "polar H, +ve charge", "267"}, {"H", "1.00800", "HGP3", "polar H, thiol", "268"}, {"H", "1.00800", "HGP4", "polar H, neutral conjugated -NH2 group (NA bases)", "269"}, {"H", "1.00800", "HGP5", "polar H on quarternary ammonium salt (choline)", "270"}, {"H", "1.00800", "HGPAM1", "polar H, NEUTRAL dimethylamine (#), terminal alkyne H", "271"}, {"H", "1.00800", "HGPAM2", "polar H, NEUTRAL methylamine (#)", "272"}, {"H", "1.00800", "HGPAM3", "polar H, NEUTRAL ammonia (#)", "273"}, {"H", "1.00800", "HGR51", "nonpolar H, neutral 5-mem planar ring C, LJ based on benzene", "274"}, {"H", "1.00800", "HGR52", "Aldehyde H, formamide H (RCOH); nonpolar H, neutral 5-mem planar ring C adjacent to heteroatom or + charge", "275"}, {"H", "1.00800", "HGR53", "nonpolar H, +ve charge HIS he1(+1)", "276"}, {"H", "1.00800", "HGR61", "aromatic H", "277"}, {"H", "1.00800", "HGR62", "nonpolar H, neutral 6-mem planar ring C adjacent to heteroatom", "278"}, {"H", "1.00800", "HGR63", "nonpolar H, NAD+ nicotineamide all ring CH hydrogens", "279"}, {"H", "1.00800", "HGR71", "nonpolar H, neutral 7-mem arom ring, AZUL, azulene, kevo", "280"}, {"C", "12.01100", "CG1T1", "internal alkyne R-C#C", "281"}, {"C", "12.01100", "CG1T2", "terminal alkyne H-C#C", "282"}, {"C", "12.01100", "CG1N1", "C for cyano group", "283"}, {"C", "12.01100", "CG2D1", "alkene; RHC= ; imine C", "284"}, {"C", "12.01100", "CG2D2", "alkene; H2C=", "285"}, {"C", "12.01100", "CG2D1O", "double bond carbon adjacent to heteroatom. In conjugated systems, the atom to which it is double bonded must be CG2DC1.", "286"}, {"C", "12.01100", "CG2D2O", "double bond carbon adjacent to heteroatom. In conjugated systems, the atom to which it is double bonded must be CG2DC2.", "287"}, {"C", "12.01100", "CG2DC1", "conjugated alkenes, R2C=CR2", "288"}, {"C", "12.01100", "CG2DC2", "conjugated alkenes, R2C=CR2", "289"}, {"C", "12.01100", "CG2DC3", "conjugated alkenes, H2C=", "290"}, {"C", "12.01100", "CG2N1", "conjugated C in guanidine/guanidinium", "291"}, {"C", "12.01100", "CG2N2", "conjugated C in amidinium cation", "292"}, {"C", "12.01100", "CG2O1", "carbonyl C: amides", "293"}, {"C", "12.01100", "CG2O2", "carbonyl C: esters, [neutral] carboxylic acids", "294"}, {"C", "12.01100", "CG2O3", "carbonyl C: [negative] carboxylates", "295"}, {"C", "12.01100", "CG2O4", "carbonyl C: aldehydes", "296"}, {"C", "12.01100", "CG2O5", "carbonyl C: ketones", "297"}, {"C", "12.01100", "CG2O6", "carbonyl C: urea, carbonate", "298"}, {"C", "12.01100", "CG2O7", "CO2 carbon", "299"}, {"C", "12.01100", "CG2R51", "5-mem ring, his CG, CD2(0), trp", "300"}, {"C", "12.01100", "CG2R52", "5-mem ring, double bound to N, PYRZ, pyrazole", "301"}, {"C", "12.01100", "CG2R53", "5-mem ring, double bound to N and adjacent to another heteroatom, purine C8, his CE1 (0,+1), 2PDO, kevo", "302"}, {"C", "12.01100", "CG2R57", "5-mem ring, bipyrroles", "303"}, {"C", "12.01100", "CG25C1", "same as CG2DC1 but in 5-membered ring with exocyclic double bond", "304"}, {"C", "12.01100", "CG25C2", "same as CG2DC2 but in 5-membered ring with exocyclic double bond", "305"}, {"C", "12.01100", "CG251O", "same as CG2D1O but in 5-membered ring with exocyclic double bond", "306"}, {"C", "12.01100", "CG252O", "same as CG2D2O but in 5-membered ring with exocyclic double bond", "307"}, {"C", "12.01100", "CG2R61", "6-mem aromatic C", "308"}, {"C", "12.01100", "CG2R62", "6-mem aromatic C for protonated pyridine (NIC) and rings containing carbonyls (see CG2R63) (NA)", "309"}, {"C", "12.01100", "CG2R63", "6-mem aromatic amide carbon (NA) (and other 6-mem aromatic carbonyls?)", "310"}, {"C", "12.01100", "CG2R64", "6-mem aromatic amidine and guanidine carbon (between 2 or 3 Ns and double-bound to one of them), NA, PYRM", "311"}, {"C", "12.01100", "CG2R66", "6-mem aromatic carbon bound to F", "312"}, {"C", "12.01100", "CG2R67", "6-mem aromatic carbon of biphenyl", "313"}, {"C", "12.01100", "CG2RC0", "6/5-mem ring bridging C, guanine C4,C5, trp", "314"}, {"C", "12.01100", "CG2R71", "7-mem ring arom C, AZUL, azulene, kevo", "315"}, {"C", "12.01100", "CG2RC7", "sp2 ring connection with single bond(!), AZUL, azulene, kevo", "316"}, {"C", "12.01100", "CG301", "aliphatic C, no hydrogens, neopentane", "317"}, {"C", "12.01100", "CG302", "aliphatic C, no hydrogens, trifluoromethyl", "318"}, {"C", "12.01100", "CG311", "aliphatic C with 1 H, CH", "319"}, {"C", "12.01100", "CG312", "aliphatic C with 1 H, difluoromethyl", "320"}, {"C", "12.01100", "CG314", "aliphatic C with 1 H, adjacent to positive N (PROT NTER) (+)", "321"}, {"C", "12.01100", "CG321", "aliphatic C for CH2", "322"}, {"C", "12.01100", "CG322", "aliphatic C for CH2, monofluoromethyl", "323"}, {"C", "12.01100", "CG323", "aliphatic C for CH2, thiolate carbon", "324"}, {"C", "12.01100", "CG324", "aliphatic C for CH2, adjacent to positive N (piperidine) (+)", "325"}, {"C", "12.01100", "CG331", "aliphatic C for methyl group (-CH3)", "326"}, {"C", "12.01100", "CG334", "aliphatic C for methyl group (-CH3), adjacent to positive N (PROT NTER) (+)", "327"}, {"C", "12.01100", "CG3AM0", "aliphatic C for CH3, NEUTRAL trimethylamine methyl carbon (#)", "328"}, {"C", "12.01100", "CG3AM1", "aliphatic C for CH3, NEUTRAL dimethylamine methyl carbon (#)", "329"}, {"C", "12.01100", "CG3AM2", "aliphatic C for CH3, NEUTRAL methylamine methyl carbon (#)", "330"}, {"C", "12.01100", "CG3C31", "cyclopropyl carbon", "331"}, {"C", "12.01100", "CG3C41", "cyclobutyl carbon", "332"}, {"C", "12.01100", "CG3C50", "5-mem ring aliphatic quaternary C (cholesterol, bile acids)", "333"}, {"C", "12.01100", "CG3C51", "5-mem ring aliphatic CH (proline CA, furanoses)", "334"}, {"C", "12.01100", "CG3C52", "5-mem ring aliphatic CH2 (proline CB/CG/CD, THF, deoxyribose)", "335"}, {"C", "12.01100", "CG3C53", "5-mem ring aliphatic CH adjacent to positive N (proline.H+ CA) (+)", "336"}, {"C", "12.01100", "CG3C54", "5-mem ring aliphatic CH2 adjacent to positive N (proline.H+ CD) (+)", "337"}, {"C", "12.01100", "CG3RC1", "bridgehead in bicyclic systems containing at least one 5-membered or smaller ring", "338"}, {"N", "14.00700", "NG1T1", "N for cyano group", "339"}, {"N", "14.00700", "NG1D1", "terminal N in azides, lsk", "340"}, {"N", "14.00700", "NG2D1", "N for neutral imine/Schiff's base (C=N-R, acyclic amidine, gunaidine)", "341"}, {"N", "14.00700", "NG2S0", "N,N-disubstituted amide, proline N (CO=NRR')", "342"}, {"N", "14.00700", "NG2S1", "peptide nitrogen (CO=NHR)", "343"}, {"N", "14.00700", "NG2S2", "terminal amide nitrogen (CO=NH2)", "344"}, {"N", "14.00700", "NG2S3", "external amine ring nitrogen (planar/aniline), phosphoramidate", "345"}, {"N", "14.00700", "NG2S4", "neutral hydroxamic acid", "346"}, {"N", "14.00700", "NG2O1", "NITB, nitrobenzene", "347"}, {"N", "14.00700", "NG2P1", "N for protonated imine/Schiff's base (C=N(+)H-R, acyclic amidinium, guanidinium)", "348"}, {"N", "14.00700", "NG2R43", "amide in 4-memebered ring (planar), AZDO, lsk", "349"}, {"N", "14.00700", "NG2R50", "double bound neutral 5-mem planar ring, purine N7", "350"}, {"N", "14.00700", "NG2R51", "single bound neutral 5-mem planar (all atom types sp2) ring, his, trp pyrrole (fused)", "351"}, {"N", "14.00700", "NG2R52", "protonated schiff base, amidinium, guanidinium in 5-membered ring, HIS, 2HPP, kevo", "352"}, {"N", "14.00700", "NG2R53", "amide in 5-memebered NON-SP2 ring (slightly pyramidized), 2PDO, kevo", "353"}, {"N", "14.00700", "NG2R57", "5-mem ring, bipyrroles", "354"}, {"N", "14.00700", "NG2R60", "double bound neutral 6-mem planar ring, pyr1, pyzn", "355"}, {"N", "14.00700", "NG2R61", "single bound neutral 6-mem planar ring imino nitrogen; glycosyl linkage", "356"}, {"N", "14.00700", "NG2R62", "double bound 6-mem planar ring with heteroatoms in o or m, pyrd, pyrm", "357"}, {"N", "14.00700", "NG2R67", "6-mem planar ring substituted with 6-mem planar ring (N-phenyl pyridinones etc.)", "358"}, {"N", "14.00700", "NG2RC0", "6/5-mem ring bridging N, indolizine, INDZ, kevo", "359"}, {"N", "14.00700", "NG301", "neutral trimethylamine nitrogen", "360"}, {"N", "14.00700", "NG311", "neutral dimethylamine nitrogen", "361"}, {"N", "14.00700", "NG321", "neutral methylamine nitrogen", "362"}, {"N", "14.00700", "NG331", "neutral ammonia nitrogen", "363"}, {"N", "14.00700", "NG3C51", "secondary sp3 amine in 5-membered ring", "364"}, {"N", "14.00700", "NG3N1", "N in hydrazine, HDZN", "365"}, {"N", "14.00700", "NG3P0", "quarternary N+, choline", "366"}, {"N", "14.00700", "NG3P1", "tertiary NH+ (PIP)", "367"}, {"N", "14.00700", "NG3P2", "secondary NH2+ (proline)", "368"}, {"N", "14.00700", "NG3P3", "primary NH3+, phosphatidylethanolamine", "369"}, {"O", "15.99940", "OG2D1", "carbonyl O: amides, esters, [neutral] carboxylic acids, aldehydes, uera", "370"}, {"O", "15.99940", "OG2D2", "carbonyl O: negative groups: carboxylates, carbonate", "371"}, {"O", "15.99940", "OG2D3", "carbonyl O: ketones", "372"}, {"O", "15.99940", "OG2D4", "6-mem aromatic carbonyl oxygen (nucleic bases)", "373"}, {"O", "15.99940", "OG2D5", "CO2 oxygen", "374"}, {"O", "15.99940", "OG2N1", "NITB, nitrobenzene", "375"}, {"O", "15.99940", "OG2P1", "=O in phosphate or sulfate", "376"}, {"O", "15.99940", "OG2R50", "FURA, furan", "377"}, {"O", "15.99940", "OG3R60", "O in 6-mem cyclic enol ether (PY01, PY02) or ester", "378"}, {"O", "15.99940", "OG301", "ether -O- !SHOULD WE HAVE A SEPARATE ENOL ETHER??? IF YES, SHOULD WE MERGE IT WITH OG3R60???", "379"}, {"O", "15.99940", "OG302", "ester -O-", "380"}, {"O", "15.99940", "OG303", "phosphate/sulfate ester oxygen", "381"}, {"O", "15.99940", "OG304", "linkage oxygen in pyrophosphate/pyrosulphate", "382"}, {"O", "15.99940", "OG311", "hydroxyl oxygen", "383"}, {"O", "15.99940", "OG312", "ionized alcohol oxygen", "384"}, {"O", "15.99940", "OG3C31", "epoxide oxygen, 1EOX, 1BOX, sc", "385"}, {"O", "15.99940", "OG3C51", "5-mem furanose ring oxygen (ether)", "386"}, {"O", "15.99940", "OG3C61", "DIOX, dioxane, ether in 6-membered ring !SHOULD WE MERGE THIS WITH OG3R60???", "387"}, {"S", "32.06000", "SG2D1", "thiocarbonyl S", "388"}, {"S", "32.06000", "SG2R50", "THIP, thiophene", "389"}, {"S", "32.06000", "SG311", "sulphur, SH, -S-", "390"}, {"S", "32.06000", "SG301", "sulfur C-S-S-C type", "391"}, {"S", "32.06000", "SG302", "thiolate sulfur (-1)", "392"}, {"S", "32.06000", "SG3O1", "sulfate -1 sulfur", "393"}, {"S", "32.06000", "SG3O2", "neutral sulfone/sulfonamide sulfur", "394"}, {"S", "32.06000", "SG3O3", "neutral sulfoxide sulfur", "395"}, {"C", "35.45300", "CLGA1", "CLET, DCLE, chloroethane, 1,1-dichloroethane", "396"}, {"C", "35.45300", "CLGA3", "TCLE, 1,1,1-trichloroethane", "397"}, {"C", "35.45300", "CLGR1", "CHLB, chlorobenzene", "398"}, {"Br", "79.90400", "BRGA1", "BRET, bromoethane", "399"}, {"Br", "79.90400", "BRGA2", "DBRE, 1,1-dibromoethane", "400"}, {"Br", "79.90400", "BRGA3", "TBRE, 1,1,1-dibromoethane", "401"}, {"Br", "79.90400", "BRGR1", "BROB, bromobenzene", "402"}, {"I", "126.90447", "IGR1", "IODB, iodobenzene", "403"}, {"F", "18.99800", "FGA1", "aliphatic fluorine, monofluoro", "404"}, {"F", "18.99800", "FGA2", "aliphatic fluorine, difluoro", "405"}, {"F", "18.99800", "FGA3", "aliphatic fluorine, trifluoro", "406"}, {"F", "18.99800", "FGP1", "anionic F, for ALF4 AlF4-", "407"}, {"F", "18.99800", "FGR1", "aromatic flourine", "408"}, {"P", "30.97380", "PG0", "neutral phosphate", "409"}, {"P", "30.97380", "PG1", "phosphate -1", "410"}, {"P", "30.97380", "PG2", "phosphate -2", "411"}, {"Al", "26.98154", "ALG1", "Aluminum, for ALF4, AlF4-", "412"}, {"H", "1.00800", "HGTIP3", "polar H, TIPS3P WATER HYDROGEN", "414"}, {"O", "15.99940", "OGTIP3", "TIPS3P WATER OXYGEN", "415"}, {"D", "0.00000", "DUM", "dummy atom", "416"}, {"He", "4.00260", "HE", "helium", "417"}, {"Ne", "20.17970", "NE", "neon", "418"}, {"LP", "0.00000", "LPH", "Lone pair for halogens", "457"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm36_cgenff info V(R) = Kb x (R - R0)^2 */ char * charmm36_cgenff_bonds[506][5]= {{"LPH", "CLGR1", "0.00", "0.0000", "aromatic halogen to lone pair"}, {"LPH", "BRGR1", "0.00", "0.0000", "aromatic halogen to lone pair"}, {"LPH", "IGR1", "0.00", "0.0000", "aromatic halogen to lone pair"}, {"CG1N1", "CG2R61", "345.00", "1.4350", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN) (MP2 by kevo)"}, {"CG1N1", "CG331", "400.00", "1.4700", "ACN, acetonitrile, kevo"}, {"CG1N1", "NG1T1", "1053.00", "1.1800", "ACN, acetonitrile; 3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN) (MP2 by kevo)"}, {"CG1T1", "CG1T1", "960.00", "1.2200", "2BTY, 2-butyne, kevo"}, {"CG1T1", "CG1T2", "980.00", "1.2200", "PRPY, propyne, kevo"}, {"CG1T1", "CG331", "410.00", "1.4650", "2BTY, 2-butyne, kevo"}, {"CG1T2", "HGPAM1", "426.00", "1.0700", "PRPY, propyne, xxwy and kevo"}, {"CG251O", "CG25C1", "440.00", "1.3400", "OIRD, oxindol-3-ylidene rhodanine; from PY02, 2h-pyran (re-optimize); kevo"}, {"CG251O", "CG2DC3", "570.00", "1.3400", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG2R53", "255.00", "1.4800", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG251O", "NG2R53", "200.00", "1.4100", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG251O", "SG311", "200.00", "1.7700", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG25C2", "440.00", "1.3400", "OIRD, oxindol-3-ylidene rhodanine; from PY02, 2h-pyran (re-optimize); kevo"}, {"CG252O", "CG2DC3", "570.00", "1.3400", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG2R53", "255.00", "1.4800", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "NG2R53", "200.00", "1.4100", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG252O", "SG311", "200.00", "1.7700", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG2DC3", "500.00", "1.3420", "MEOI, methyleneoxindole; from RETINOL 13DB, 1,3-Butadiene (re-optimize); kevo"}, {"CG25C1", "CG2R53", "247.00", "1.4900", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C1", "CG2RC0", "290.00", "1.4800", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2DC3", "500.00", "1.3420", "MEOI, methyleneoxindole; from RETINOL 13DB, 1,3-Butadiene (re-optimize); kevo"}, {"CG25C2", "CG2R53", "247.00", "1.4900", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2RC0", "290.00", "1.4800", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2D1", "CG2D1", "440.00", "1.3400", "LIPID butene, yin,adm jr., 12/95"}, {"CG2D1", "CG2D1O", "440.00", "1.3180", "PY01, 4h-pyran"}, {"CG2D1", "CG2D2", "500.00", "1.3420", "LIPID propene, yin,adm jr., 12/95"}, {"CG2D1", "CG2D2O", "440.00", "1.3180", "PY01, 4h-pyran"}, {"CG2D1", "CG301", "240.00", "1.5020", "CHOLEST cholesterol"}, {"CG2D1", "CG321", "365.00", "1.5020", "LIPID butene; from propene, yin,adm jr., 12/95"}, {"CG2D1", "CG331", "383.00", "1.5040", "LIPID butene, yin,adm jr., 12/95"}, {"CG2D1", "NG2D1", "500.00", "1.2760", "RETINOL SCH1, Schiff's base, deprotonated"}, {"CG2D1", "NG2P1", "470.00", "1.2830", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2D1", "HGA4", "360.50", "1.1000", "LIPID propene, yin,adm jr., 12/95"}, {"CG2D1", "HGR52", "360.50", "1.1000", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2D1O", "CG2D2", "600.00", "1.3400", "MOET, Methoxyethene, xxwy"}, {"CG2D1O", "CG2DC1", "440.00", "1.3400", "PY02, 2h-pyran"}, {"CG2D1O", "NG301", "420.00", "1.3550", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1O", "NG311", "420.00", "1.3550", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1O", "NG321", "420.00", "1.4000", "AMET, ethenamine; mp2-geom, checked molvib; pram"}, {"CG2D1O", "OG301", "385.00", "1.3600", "MOET, Methoxyethene, xxwy"}, {"CG2D1O", "OG3R60", "500.00", "1.3470", "PY01, 4h-pyran"}, {"CG2D1O", "HGA4", "360.50", "1.1000", "PY01, 4h-pyran"}, {"CG2D2", "CG2D2", "510.00", "1.3300", "LIPID ethene yin,adm jr., 12/95"}, {"CG2D2", "CG2D2O", "600.00", "1.3400", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "HGA5", "365.00", "1.1000", "LIPID propene; from ethene, yin,adm jr., 12/95"}, {"CG2D2O", "CG2DC2", "440.00", "1.3400", "PY02, 2h-pyran"}, {"CG2D2O", "NG301", "420.00", "1.3550", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D2O", "NG311", "420.00", "1.3550", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D2O", "NG321", "420.00", "1.4000", "AMET, ethenamine; mp2-geom, checked molvib; pram"}, {"CG2D2O", "OG301", "385.00", "1.3600", "MOET, Methoxyethene, xxwy"}, {"CG2D2O", "OG3R60", "500.00", "1.3470", "PY01, 4h-pyran"}, {"CG2D2O", "HGA4", "360.50", "1.1000", "PY01, 4h-pyran"}, {"CG2DC1", "CG2DC1", "440.00", "1.3400", "RETINOL BTE2, 2-butene"}, {"CG2DC1", "CG2DC2", "300.00", "1.4500", "RETINOL 13DB, Butadiene @@@@@ Kenno: 1.47 --> 1.45 @@@@@"}, {"CG2DC1", "CG2DC3", "500.00", "1.3420", "RETINOL 13DB, Butadiene"}, {"CG2DC1", "CG2O1", "440.00", "1.4890", "RETINOL CROT"}, {"CG2DC1", "CG2O3", "440.00", "1.4890", "RETINOL PRAC"}, {"CG2DC1", "CG2O4", "300.00", "1.4798", "RETINOL RTAL unmodified"}, {"CG2DC1", "CG2O5", "300.00", "1.4800", "BEON, butenone, kevo"}, {"CG2DC1", "CG2R61", "365.00", "1.4500", "compromise between HDZ1B and STYR by kevo"}, {"CG2DC1", "CG301", "365.00", "1.5020", "RETINOL MECH"}, {"CG2DC1", "CG321", "365.00", "1.5020", "RETINOL MECH"}, {"CG2DC1", "CG331", "383.00", "1.5040", "RETINOL 13DP, 1,3-pentadiene"}, {"CG2DC1", "NG2D1", "500.00", "1.2760", "RETINOL SCH1, Schiff's base, deprotonated"}, {"CG2DC1", "NG2P1", "470.00", "1.2830", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC1", "HGA4", "360.50", "1.1000", "RETINOL BTE2, 2-butene"}, {"CG2DC1", "HGR52", "360.50", "1.1000", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC2", "CG2DC2", "440.00", "1.3400", "RETINOL BTE2, 2-butene"}, {"CG2DC2", "CG2DC3", "500.00", "1.3420", "RETINOL 13DB, Butadiene"}, {"CG2DC2", "CG2O1", "440.00", "1.4890", "RETINOL CROT"}, {"CG2DC2", "CG2O3", "440.00", "1.4890", "RETINOL PRAC"}, {"CG2DC2", "CG2O4", "300.00", "1.4798", "RETINOL RTAL unmodified"}, {"CG2DC2", "CG2O5", "300.00", "1.4800", "BEON, butenone, kevo"}, {"CG2DC2", "CG2R61", "365.00", "1.4500", "compromise between HDZ1B and STYR by kevo"}, {"CG2DC2", "CG301", "365.00", "1.5020", "RETINOL MECH"}, {"CG2DC2", "CG321", "365.00", "1.5020", "RETINOL MECH"}, {"CG2DC2", "CG331", "383.00", "1.5040", "RETINOL 13DP, 1,3-pentadiene"}, {"CG2DC2", "NG2D1", "500.00", "1.2760", "RETINOL SCH1, Schiff's base, deprotonated"}, {"CG2DC2", "NG2P1", "470.00", "1.2830", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC2", "HGA4", "360.50", "1.1000", "RETINOL BTE2, 2-butene"}, {"CG2DC2", "HGR52", "360.50", "1.1000", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC3", "HGA5", "365.00", "1.1000", "RETINOL BTE2, 2-butene"}, {"CG2N1", "NG2D1", "500.00", "1.3100", "MGU1, methylguanidine"}, {"CG2N1", "NG2P1", "463.00", "1.3650", "PROT 403.0->463.0, 1.305->1.365 guanidinium (KK)"}, {"CG2N1", "NG311", "500.00", "1.4400", "MGU2, methylguanidine2"}, {"CG2N1", "NG321", "450.00", "1.4400", "MGU1, methylguanidine"}, {"CG2N2", "CG2R61", "300.00", "1.4400", "BAMI, benzamidinium, mp2 geom and molvib, pram"}, {"CG2N2", "CG331", "280.00", "1.5000", "AMDN, amidinium, sz (verified by pram)"}, {"CG2N2", "NG2D1", "621.00", "1.2900", "MT2A, DH3T, fylin"}, {"CG2N2", "NG2P1", "475.00", "1.3200", "AMDN, amidinium; BAMI, benzamidinium; mp2 geom and molvib; pram"}, {"CG2N2", "NG321", "365.00", "1.4200", "MT2A, DH3T, fylin"}, {"CG2N2", "SG311", "187.00", "1.7900", "MT2R(+), HH3R, MT2A, DH3T, fylin"}, {"CG2O1", "CG2R61", "300.00", "1.4750", "3NAP, nicotamide. kevo: 1.45 -> 1.475"}, {"CG2O1", "CG2R62", "302.00", "1.4800", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2O1", "CG311", "250.00", "1.4900", "PROT Ala Dipeptide (5/91)"}, {"CG2O1", "CG314", "250.00", "1.4900", "PROT Ala Dipeptide (5/91)"}, {"CG2O1", "CG321", "250.00", "1.4900", "PROT Ala Dipeptide (5/91)"}, {"CG2O1", "CG324", "250.00", "1.4900", "PROT Ala Dipeptide (5/91)"}, {"CG2O1", "CG331", "250.00", "1.4900", "PROT Ala Dipeptide (5/91)"}, {"CG2O1", "CG3C51", "250.00", "1.4900", "PROT 6-31g* AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C53", "250.00", "1.4900", "PROT 6-31g* AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "NG2S0", "430.00", "1.3500", "DMA, Dimethylacetamide, xxwy"}, {"CG2O1", "NG2S1", "370.00", "1.3450", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "NG2S2", "430.00", "1.3600", "PROT from NG2S2 CT3, neutral glycine, adm jr."}, {"CG2O1", "OG2D1", "620.00", "1.2300", "PROT Peptide geometry, condensed phase (LK)"}, {"CG2O1", "HGR52", "317.13", "1.1000", "FORM, formamide reverted to value from par_all22_prot.inp and par_cgenff_1d.inp"}, {"CG2O2", "CG2R61", "254.00", "1.4800", "ZOIC, benzoic acid, MBOA, methylbenzoate, jal"}, {"CG2O2", "CG311", "200.00", "1.5220", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG321", "200.00", "1.5220", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG331", "200.00", "1.5220", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "OG2D1", "750.00", "1.2200", "PROT adm jr. 5/02/91, acetic acid pure solvent; LIPID methyl acetate"}, {"CG2O2", "OG302", "150.00", "1.3340", "LIPID methyl acetate"}, {"CG2O2", "OG311", "230.00", "1.4000", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "HGR52", "348.00", "1.0960", "FORH, formic acid, xxwy"}, {"CG2O3", "CG2O5", "250.00", "1.5200", "COMPDS peml unmodified"}, {"CG2O3", "CG2R61", "200.00", "1.5000", "3CPY, pyridine-3-carboxylate (PYRIDINE nicotinic acid), yin"}, {"CG2O3", "CG301", "200.00", "1.5220", "AMOL, alpha-methoxy-lactic acid, og par22 CT1 CC"}, {"CG2O3", "CG311", "200.00", "1.5220", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG314", "200.00", "1.5220", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "200.00", "1.5220", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG324", "200.00", "1.5220", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG331", "200.00", "1.5220", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG3C51", "250.00", "1.4900", "PROT 6-31g* AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C53", "250.00", "1.4900", "PROT 6-31g* AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "OG2D2", "525.00", "1.2600", "PROT adm jr. 7/23/91, acetic acid"}, {"CG2O3", "HGR52", "238.00", "1.1422", "FORA, formate, kevo"}, {"CG2O4", "CG2R61", "300.00", "1.4798", "ALDEHYDE benzaldehyde unmodified"}, {"CG2O4", "CG321", "250.00", "1.5000", "PALD, propionaldehyde from AALD adm 11/08"}, {"CG2O4", "CG331", "250.00", "1.5000", "AALD, acetaldehyde adm 11/08"}, {"CG2O4", "OG2D1", "700.00", "1.2150", "ALDEHYDE acetaldehyde adm 11/08"}, {"CG2O4", "HGR52", "330.00", "1.1100", "ALDEHYDE acetaldehyde adm 11/08"}, {"CG2O5", "CG2R61", "254.00", "1.4600", "3ACP, 3-acetylpyridine; BF6 BF7 C36 C37; PHMK, phenyl methyl ketone, mcs"}, {"CG2O5", "CG311", "330.00", "1.5000", "COMPDS peml re-initialized by kevo from ACO adm 11/08"}, {"CG2O5", "CG321", "330.00", "1.5000", "BTON, butanone; from ACO, acetone; yapol"}, {"CG2O5", "CG331", "330.00", "1.5000", "ACO, acetone adm 11/08"}, {"CG2O5", "OG2D3", "700.00", "1.2300", "ACO, acetone adm 11/08"}, {"CG2O6", "NG2S1", "510.00", "1.3700", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo"}, {"CG2O6", "NG2S2", "430.00", "1.3600", "UREA, Urea. Uses a slack parameter from PROT from NG2S2 CT3, neutral glycine, adm jr. ==> re-optimize"}, {"CG2O6", "OG2D1", "650.00", "1.2300", "UREA, Urea. Uses a slack parameter from PROT adm jr. 4/10/91, acetamide ==> re-optimize"}, {"CG2O6", "OG2D2", "314.50", "1.2940", "PROTMOD carbonate"}, {"CG2O6", "OG302", "350.00", "1.3500", "DMCB and DECB and DMCA, dimethyl and diehtyl carbamate and dimethyl carbonate, cacha and kevo and xxwy"}, {"CG2O6", "OG311", "185.00", "1.4800", "CO31, bicarbonate, xxwy"}, {"CG2O6", "SG2D1", "300.00", "1.6300", "DMTT, dimethyl trithiocarbonate, kevo"}, {"CG2O6", "SG311", "190.00", "1.7500", "DMTT, dimethyl trithiocarbonate, kevo"}, {"CG2O7", "NG2D1", "920.00", "1.1900", "MICY, EICY: isocyanates, xxwy (QM: 1.216; Crystal survey: 1.183)"}, {"CG2O7", "OG2D5", "986.00", "1.1700", "PROT CO2, JES; re-optimized by kevo (1.160); compromised with isocyanate, both crystal survey and QM data, kevo and xxwy"}, {"CG2R51", "CG2R51", "410.00", "1.3600", "PROT histidine, adm jr., 6/27/90"}, {"CG2R51", "CG2R52", "360.00", "1.4000", "PYRZ, pyrazole"}, {"CG2R51", "CG2R53", "264.00", "1.5080", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R57", "410.00", "1.3600", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51; lf"}, {"CG2R51", "CG2RC0", "350.00", "1.4300", "INDO/TRP"}, {"CG2R51", "CG2RC7", "340.00", "1.4050", "AZUL, Azulene, kevo"}, {"CG2R51", "CG321", "229.63", "1.5000", "PROT his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CG2R51", "CG331", "229.63", "1.5000", "PROT his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CG2R51", "CG3C52", "350.00", "1.5100", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline; 3PRL, 3-pyrroline, kevo"}, {"CG2R51", "CG3C54", "325.00", "1.4960", "3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R51", "NG2R50", "400.00", "1.3800", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "NG2R51", "400.00", "1.3800", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "NG2R52", "380.00", "1.3700", "PROT his, adm jr., 6/28/90"}, {"CG2R51", "NG2R57", "400.00", "1.3800", "13BPO, 1,3-bipyrrole; from CG2R51 NG2R51; lf"}, {"CG2R51", "NG2RC0", "400.00", "1.3710", "INDZ, indolizine, kevo"}, {"CG2R51", "NG3C51", "360.00", "1.4120", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "NG3P2", "330.00", "1.4800", "2PRP, 2-pyrroline.H+, kevo"}, {"CG2R51", "OG2R50", "450.00", "1.3710", "FURA, furan"}, {"CG2R51", "OG3C51", "360.00", "1.3700", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG2R51", "SG2R50", "300.00", "1.7300", "THIP, thiophene"}, {"CG2R51", "HGR51", "350.00", "1.0800", "INDO/TRP"}, {"CG2R51", "HGR52", "375.00", "1.0830", "PROT his, adm jr., 6/27/90"}, {"CG2R52", "CG2R52", "400.00", "1.3800", "TRZ2, 2H-1,2,3-triazole, lf"}, {"CG2R52", "CG2RC0", "360.00", "1.4200", "INDA, 1H-indazole, kevo"}, {"CG2R52", "CG3C52", "350.00", "1.5050", "2PRZ, 2-pyrazoline, kevo"}, {"CG2R52", "NG2R50", "400.00", "1.3150", "PYRZ, pyrazole; 2PRZ, 2-pyrazoline, kevo"}, {"CG2R52", "NG2R52", "490.00", "1.3000", "2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R52", "HGR52", "375.00", "1.0830", "PYRZ, pyrazole"}, {"CG2R53", "CG3C41", "200.00", "1.5600", "AZDO, 2-azetidinone, kevo"}, {"CG2R53", "CG3C52", "300.00", "1.5300", "350 2PDO, 2-pyrrolidinone, kevo"}, {"CG2R53", "NG2R43", "370.00", "1.3800", "AZDO, 2-azetidinone, kevo"}, {"CG2R53", "NG2R50", "400.00", "1.3200", "PROT his, ADM JR., 7/20/89"}, {"CG2R53", "NG2R51", "320.00", "1.3740", "NA A, adm jr. 11/97"}, {"CG2R53", "NG2R52", "380.00", "1.3200", "PROT his, adm jr., 6/27/90"}, {"CG2R53", "NG2R53", "460.00", "1.3800", "370 *NEW* 2PDO, 2-pyrrolidinone, kevo"}, {"CG2R53", "NG3C51", "380.00", "1.4000", "1.395 2IMI, 2-imidazoline, kevo"}, {"CG2R53", "OG2D1", "570.00", "1.2350", "620 *NEW* 2PDO, 2-pyrrolidinone, kevo"}, {"CG2R53", "OG2R50", "450.00", "1.3710", "OXAZ, oxazole"}, {"CG2R53", "OG3C51", "295.50", "1.3570", "GBL, Gamma-butyrolactone, ctsai and kevo"}, {"CG2R53", "SG2D1", "400.00", "1.6300", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "SG2R50", "300.00", "1.7300", "THAZ, thiazole"}, {"CG2R53", "SG311", "170.00", "1.7700", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "HGR52", "340.00", "1.0900", "PROT his, adm jr., 6/28/29"}, {"CG2R53", "HGR53", "333.00", "1.0700", "PROT his, adm jr., 6/27/90"}, {"CG2R57", "CG2R57", "413.00", "1.4500", "33BPO, 3,3-bipyrrole, lf"}, {"CG2R57", "NG2R57", "390.00", "1.3950", "13BPO, 1,3-bipyrrole, lf"}, {"CG2R61", "CG2R61", "305.00", "1.3750", "PROT benzene, JES 8/25/89"}, {"CG2R61", "CG2R62", "394.00", "1.3750", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R63", "265.00", "1.4270", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R64", "250.00", "1.3550", "18NFD, 1,8-naphthyridine, erh"}, {"CG2R61", "CG2R66", "305.00", "1.3700", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R67", "305.00", "1.3750", "COMPDS peml"}, {"CG2R61", "CG2RC0", "300.00", "1.3600", "INDO/TRP"}, {"CG2R61", "CG311", "230.00", "1.4900", "NAMODEL difluorotoluene"}, {"CG2R61", "CG312", "198.00", "1.4500", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG2R61", "CG321", "230.00", "1.4900", "PROT phe,tyr, JES 8/25/89"}, {"CG2R61", "CG324", "230.00", "1.4900", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG331", "230.00", "1.4900", "PROT toluene, adm jr. 3/7/92"}, {"CG2R61", "NG2O1", "230.00", "1.4020", "NITB, nitrobenzene"}, {"CG2R61", "NG2R60", "450.00", "1.3050", "PYR1, pyridine"}, {"CG2R61", "NG2R61", "380.00", "1.3790", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "NG2R62", "450.00", "1.3050", "PYRD, pyridazine"}, {"CG2R61", "NG2RC0", "370.00", "1.3790", "INDZ, indolizine, kevo"}, {"CG2R61", "NG2S1", "305.00", "1.4140", "RETINOL PACP"}, {"CG2R61", "NG2S3", "400.00", "1.3900", "PYRIDINE aminopyridine, adm jr., 7/94"}, {"CG2R61", "NG301", "325.00", "1.4100", "DMAN, N,N-dimethylaniline, kevo"}, {"CG2R61", "NG311", "330.00", "1.4000", "FEOZ, phenoxazine; PMSM N-phenylmethanesulfonamide; xxwy"}, {"CG2R61", "NG3N1", "680.00", "1.4100", "PHHZ, phenylhydrazine, ed"}, {"CG2R61", "OG301", "230.00", "1.3820", "COMPDS peml"}, {"CG2R61", "OG303", "340.00", "1.3800", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "OG311", "334.30", "1.4110", "PROT MeOH, EMB 10/10/89,"}, {"CG2R61", "OG312", "525.00", "1.2600", "PROT adm jr. 8/27/91, phenoxide"}, {"CG2R61", "OG3R60", "280.00", "1.3500", "FEOZ, phenoxazine, erh based on PY02, 2h-pyran"}, {"CG2R61", "SG311", "280.00", "1.7500", "FETZ, phenothiazine, erh based on PY02, 2h-pyran"}, {"CG2R61", "SG3O1", "230.00", "1.7800", "benzene sulfonate anion, og"}, {"CG2R61", "SG3O2", "190.00", "1.7300", "BSAM, benzenesulfonamide and other sulfonamides, xxwy"}, {"CG2R61", "CLGR1", "350.00", "1.7400", "CHLB, chlorobenzene"}, {"CG2R61", "BRGR1", "230.00", "1.9030", "BROB, bromobenzene"}, {"CG2R61", "IGR1", "190.00", "2.1150", "IODB, iodobenzene"}, {"CG2R61", "HGR61", "340.00", "1.0800", "PROT phe,tyr JES 8/25/89"}, {"CG2R61", "HGR62", "340.00", "1.0800", "NA, DFT"}, {"CG2R62", "CG2R62", "420.00", "1.3500", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2R63", "302.00", "1.4030", "NA T, adm jr. 11/97"}, {"CG2R62", "CG2R64", "320.00", "1.4060", "NA C, adm jr. 11/97"}, {"CG2R62", "CG2R67", "305.00", "1.3800", "PYO2B, fylin"}, {"CG2R62", "CG331", "230.00", "1.4780", "NA T, adm jr. 11/97"}, {"CG2R62", "NG2R61", "302.00", "1.3430", "NA C, adm jr. 11/97"}, {"CG2R62", "NG2R62", "340.00", "1.3650", "TC243C, 4(3H)-quinazolinone; from CG2R61 NG2R62; isg"}, {"CG2R62", "NG2R67", "302.00", "1.3430", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from NG2R61 CG2R61; isg"}, {"CG2R62", "OG3R60", "330.00", "1.3700", "RIN, coumarin, isg"}, {"CG2R62", "HGR62", "350.00", "1.0900", "NA C,U, JWK"}, {"CG2R62", "HGR63", "350.00", "1.0900", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R63", "CG2RC0", "302.00", "1.3600", "NA G, adm jr. 11/97"}, {"CG2R63", "NG2R61", "340.00", "1.3830", "NA U,T adm jr. 11/97"}, {"CG2R63", "NG2R62", "350.00", "1.3350", "NA C, adm jr. 11/97"}, {"CG2R63", "NG2R67", "302.00", "1.3430", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from NG2R67 CG2R62, 1PH4PO; isg"}, {"CG2R63", "OG2D4", "660.00", "1.2340", "NA U,A,G par_a4 adm jr. 10/2/91"}, {"CG2R63", "OG3R60", "235.00", "1.4000", "RIN, coumarin, isg"}, {"CG2R63", "SG2D1", "373.00", "1.6550", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R64", "CG2RC0", "360.00", "1.3580", "NA A, adm jr. 11/97"}, {"CG2R64", "NG2R60", "450.00", "1.3050", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"CG2R64", "NG2R61", "400.00", "1.3920", "NA G"}, {"CG2R64", "NG2R62", "400.00", "1.3420", "NA A, adm jr. 11/97"}, {"CG2R64", "NG2R67", "400.00", "1.3920", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from CG2R64 NG2R61, NA; isg"}, {"CG2R64", "NG2S1", "305.00", "1.4140", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"CG2R64", "NG2S3", "360.00", "1.3660", "NA C,A,G JWK, adm jr. 10/2/91"}, {"CG2R64", "NG301", "390.00", "1.3550", "TMC, yxu"}, {"CG2R64", "SG311", "262.00", "1.7410", "2SMPYR, 2-(methylthio)-pyrimidine; from CG2R61 SG311, 4O2SM; isg"}, {"CG2R64", "HGR62", "380.00", "1.0900", "NA G,A, JWK par_a7 9/30/91"}, {"CG2R66", "CG2R67", "305.00", "1.3800", "PYO2F, fylin"}, {"CG2R66", "FGR1", "400.00", "1.3580", "NAMODEL difluorotoluene"}, {"CG2R67", "CG2R67", "300.00", "1.4900", "COMPDS peml"}, {"CG2R67", "CG2RC0", "300.00", "1.4200", "CRBZ, carbazole, erh"}, {"CG2R67", "NG2R60", "450.00", "1.3100", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R67", "NG2R67", "403.00", "1.4110", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from NG2R61 CG2R61; isg"}, {"CG2R71", "CG2R71", "360.00", "1.3850", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2RC7", "400.00", "1.3800", "AZUL, Azulene, kevo"}, {"CG2R71", "HGR71", "355.00", "1.0900", "AZUL, Azulene, kevo"}, {"CG2RC0", "CG2RC0", "360.00", "1.3850", "INDO/TRP"}, {"CG2RC0", "CG3C52", "305.00", "1.5200", "3HIN, 3H-indole, kevo"}, {"CG2RC0", "NG2R50", "310.00", "1.3650", "NA G, adm jr. 11/97"}, {"CG2RC0", "NG2R51", "300.00", "1.3750", "NA A, adm jr. 11/97"}, {"CG2RC0", "NG2R62", "350.00", "1.3150", "NA G, adm jr. 11/97"}, {"CG2RC0", "NG2RC0", "245.00", "1.4170", "INDZ, indolizine, kevo"}, {"CG2RC0", "NG3C51", "330.00", "1.4000", "INDI, indoline, kevo"}, {"CG2RC0", "OG2R50", "450.00", "1.3700", "ZFUR, benzofuran, kevo"}, {"CG2RC0", "OG3C51", "330.00", "1.3890", "ZDOL, 1,3-benzodioxole, kevo"}, {"CG2RC0", "SG2R50", "300.00", "1.7600", "ZTHP, benzothiophene, kevo"}, {"CG2RC7", "CG2RC7", "230.00", "1.5200", "AZUL, Azulene, kevo"}, {"CG301", "CG311", "222.50", "1.5000", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG301", "CG321", "222.50", "1.5380", "RETINOL TMCH/MECH"}, {"CG301", "CG331", "222.50", "1.5380", "RETINOL TMCH/MECH"}, {"CG301", "OG301", "360.00", "1.4150", "AMOL, alpha-methoxy-lactic acid, og all34_ethers_1a CG32A OG30A"}, {"CG301", "OG302", "340.00", "1.4300", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide"}, {"CG301", "OG311", "428.00", "1.4200", "AMOL, alpha-methoxy-lactic acid, og par22 OH1 CT1"}, {"CG301", "CLGA3", "190.00", "1.7700", "TCLE"}, {"CG301", "BRGA3", "120.00", "1.9540", "TBRE"}, {"CG302", "CG321", "250.00", "1.5200", "FLUROALK fluoroalkanes"}, {"CG302", "CG331", "250.00", "1.5200", "FLUROALK fluoroalkanes"}, {"CG302", "FGA3", "265.00", "1.3400", "FLUROALK fluoroalkanes"}, {"CG311", "CG311", "222.50", "1.5000", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG314", "222.50", "1.5000", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG321", "222.50", "1.5380", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG324", "222.50", "1.5300", "FLAVOP PIP1,2,3"}, {"CG311", "CG331", "222.50", "1.5380", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG3C51", "222.50", "1.5280", "TF2M, viv"}, {"CG311", "CG3RC1", "222.50", "1.5240", "CARBOCY carbocyclic sugars"}, {"CG311", "NG2R53", "320.00", "1.4300", "drug design project, xxwy"}, {"CG311", "NG2S1", "320.00", "1.4300", "PROT NMA Gas and Liquid Phase IR Spectra (LK)"}, {"CG311", "OG301", "360.00", "1.4150", "all34_ethers_1a CG32A OG30A, gk or og"}, {"CG311", "OG302", "340.00", "1.4300", "LIPID phosphate"}, {"CG311", "OG303", "340.00", "1.4300", "LIPID phosphate"}, {"CG311", "OG311", "428.00", "1.4200", "PROT methanol vib fit EMB 11/21/89"}, {"CG311", "OG312", "358.00", "1.3130", "COMPDS peml original OG311 CG311 428.000 1.4200"}, {"CG311", "CLGA1", "190.00", "1.7768", "DCLE"}, {"CG311", "BRGA2", "140.00", "1.9560", "DBRE"}, {"CG311", "HGA1", "309.00", "1.1110", "PROT alkane update, adm jr., 3/2/92"}, {"CG312", "CG331", "198.00", "1.5200", "FLUROALK fluoroalkanes"}, {"CG312", "PG1", "270.00", "1.8800", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"CG312", "PG2", "270.00", "1.8800", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"CG312", "FGA2", "349.00", "1.3530", "FLUROALK fluoroalkanes"}, {"CG312", "HGA7", "346.00", "1.0828", "FLUROALK fluoroalkanes"}, {"CG314", "CG321", "222.50", "1.5380", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG331", "222.50", "1.5380", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "NG3P2", "200.00", "1.4900", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha"}, {"CG314", "NG3P3", "200.00", "1.4800", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"CG314", "HGA1", "309.00", "1.1110", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "222.50", "1.5300", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG324", "222.50", "1.5300", "FLAVOP PIP1,2,3"}, {"CG321", "CG331", "222.50", "1.5280", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG3C31", "275.00", "1.5000", "1BOX, 1-butene oxide, sc"}, {"CG321", "CG3C51", "222.50", "1.5280", "TF2M, viv"}, {"CG321", "CG3RC1", "222.50", "1.5240", "CARBOCY carbocyclic sugars"}, {"CG321", "NG2D1", "293.00", "1.4400", "EEPI, fylin"}, {"CG321", "NG2R51", "400.00", "1.4580", "ETRZ, 1-Ethyl-1,2,3-triazole, from CG331 NG2R51, kevo"}, {"CG321", "NG2S1", "320.00", "1.4300", "PROT NMA Gas and Liquid Phase IR Spectra (LK)"}, {"CG321", "NG2S3", "322.00", "1.4400", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG321", "NG311", "263.00", "1.4740", "AMINE aliphatic amines"}, {"CG321", "NG321", "263.00", "1.4740", "AMINE aliphatic amines"}, {"CG321", "OG301", "360.00", "1.4150", "diethylether, alex"}, {"CG321", "OG302", "320.00", "1.4400", "PROTNA serine/threonine phosphate"}, {"CG321", "OG303", "320.00", "1.4400", "PROTNA serine/threonine phosphate"}, {"CG321", "OG311", "428.00", "1.4200", "PROT methanol vib fit EMB 11/21/89"}, {"CG321", "OG312", "450.00", "1.3300", "PROT ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CG321", "OG3C61", "360.00", "1.4150", "DIOX, dioxane"}, {"CG321", "OG3R60", "280.00", "1.4000", "PY02, 2h-pyran"}, {"CG321", "PG1", "270.00", "1.8900", "BDFP, Benzylphosphonate, Sasha re-optimize?"}, {"CG321", "PG2", "270.00", "1.8900", "BDFD, Benzylphosphonate, Sasha / re-optimize?"}, {"CG321", "SG301", "214.00", "1.8160", "PROT improved CSSC torsion in DMDS 5/15/92 (FL)"}, {"CG321", "SG311", "198.00", "1.8180", "PROT fitted to C-S s 9/26/92 (FL)"}, {"CG321", "SG3O1", "185.00", "1.8070", "ESNA, ethyl sulfonate, xhe"}, {"CG321", "SG3O2", "185.00", "1.7900", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"CG321", "SG3O3", "185.00", "1.8100", "MESO, methylethylsulfoxide, kevo"}, {"CG321", "CLGA1", "220.00", "1.7880", "CLET, chloroethane"}, {"CG321", "BRGA1", "160.00", "1.9660", "BRET"}, {"CG321", "HGA2", "309.00", "1.1110", "PROT alkane update, adm jr., 3/2/92"}, {"CG322", "CG331", "170.00", "1.5200", "FLUROALK fluoroalkanes"}, {"CG322", "FGA1", "420.00", "1.3740", "FLUROALK fluoroalkanes"}, {"CG322", "HGA6", "342.00", "1.0828", "FLUROALK fluoroalkanes"}, {"CG323", "CG331", "190.00", "1.5310", "PROT ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CG323", "SG302", "205.00", "1.8360", "PROT methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CG323", "HGA2", "300.00", "1.1110", "PROT ethylthiolate"}, {"CG323", "HGA3", "300.00", "1.1110", "PROT methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CG324", "CG331", "222.50", "1.5280", "PROT alkane update, adm jr., 3/2/92"}, {"CG324", "CG3C31", "222.50", "1.5280", "AMCP, aminomethyl cyclopropane; from PROT alkane update, adm jr., 3/2/92; jhs"}, {"CG324", "NG2O1", "226.00", "1.4900", "NIPR, nitropropane, abar"}, {"CG324", "NG2P1", "300.00", "1.4530", "RETINOL SCH2, Schiff's base, protonated #eq#"}, {"CG324", "NG3P0", "215.00", "1.5100", "LIPID tetramethylammonium"}, {"CG324", "NG3P1", "200.00", "1.4800", "FLAVOP PIP1,2,3"}, {"CG324", "NG3P2", "200.00", "1.4900", "PIP, piperidine"}, {"CG324", "NG3P3", "200.00", "1.4900", "MAMM, methylammonium 1.48 -> 1.49 based on CCSDT calc (kevo) and xtal survey (pram)"}, {"CG324", "HGA2", "284.50", "1.1000", "FLAVOP PIP1,2,3"}, {"CG324", "HGP5", "300.00", "1.0800", "LIPID tetramethylammonium"}, {"CG331", "CG331", "222.50", "1.5300", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG3C51", "222.50", "1.5280", "TF2M, viv"}, {"CG331", "CG3RC1", "222.50", "1.5380", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "NG2D1", "310.00", "1.4400", "RETINOL SCH1, Schiff's base, deprotonated"}, {"CG331", "NG2R51", "400.00", "1.4580", "NA 9-M-G/T/U, adm jr."}, {"CG331", "NG2R61", "400.00", "1.4560", "NA 9-M-A/C, adm jr."}, {"CG331", "NG2S0", "315.00", "1.4340", "DMA, Dimethylacetamide, xxwy"}, {"CG331", "NG2S1", "320.00", "1.4300", "PROT NMA Gas and Liquid Phase IR Spectra (LK)"}, {"CG331", "NG2S3", "266.00", "1.4600", "NMSM, N-methyl-sulfamate; PHA, phosphoramidate; my"}, {"CG331", "NG301", "315.00", "1.4420", "TMC, yxu"}, {"CG331", "NG311", "255.00", "1.4630", "MGU2, methylguanidine2"}, {"CG331", "OG301", "360.00", "1.4150", "diethylether, alex"}, {"CG331", "OG302", "340.00", "1.4300", "PROT adm jr., 4/05/91, for PRES CG311 from methylacetate"}, {"CG331", "OG303", "340.00", "1.4300", "NA DMP, ADM Jr."}, {"CG331", "OG311", "428.00", "1.4200", "PROT methanol vib fit EMB 11/21/89"}, {"CG331", "OG312", "450.00", "1.3300", "PROT methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CG331", "SG301", "214.00", "1.8160", "PROT improved CSSC torsion in DMDS 5/15/92 (FL)"}, {"CG331", "SG311", "240.00", "1.8160", "PROT fitted to C-S s 9/26/92 (FL)"}, {"CG331", "SG3O1", "195.00", "1.8370", "MSNA, methyl sulfonate, xhe"}, {"CG331", "SG3O2", "210.00", "1.7900", "DMSN, dimethyl sulfone; MSAM, methanesulfonamide and other sulfonamides; compromise between crystal and mp2; xxwy and xhe"}, {"CG331", "SG3O3", "240.00", "1.8000", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"CG331", "HGA3", "322.00", "1.1110", "PROT alkane update, adm jr., 3/2/92"}, {"CG334", "NG2O1", "250.00", "1.4800", "NIME, nitromethane, abar"}, {"CG334", "NG2P1", "300.00", "1.4530", "RETINOL SCH2, Schiff's base, protonated #eq#"}, {"CG334", "NG3P0", "215.00", "1.5100", "LIPID tetramethylammonium"}, {"CG334", "NG3P1", "200.00", "1.4800", "FLAVOP PIP1,2,3"}, {"CG334", "NG3P3", "200.00", "1.4800", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"CG334", "HGA3", "322.00", "1.1110", "PROT alkane update, adm jr., 3/2/92"}, {"CG334", "HGP5", "300.00", "1.0800", "LIPID tetramethylammonium"}, {"CG3AM0", "NG301", "235.00", "1.4540", "AMINE aliphatic amines"}, {"CG3AM0", "HGAAM0", "311.00", "1.1110", "AMINE aliphatic amines"}, {"CG3AM1", "NG311", "255.00", "1.4630", "AMINE aliphatic amines"}, {"CG3AM1", "HGAAM1", "313.80", "1.0980", "AMINE aliphatic amines"}, {"CG3AM2", "NG321", "263.00", "1.4740", "AMINE aliphatic amines"}, {"CG3AM2", "HGAAM2", "314.50", "1.0856", "AMINE aliphatic amines"}, {"CG3C31", "CG3C31", "240.00", "1.5010", "PROTMOD cyclopropane"}, {"CG3C31", "CG3RC1", "222.50", "1.5240", "CARBOCY carbocyclic sugars"}, {"CG3C31", "OG3C31", "220.00", "1.4500", "1EOX, 1-ethylene oxide, sc and kevo"}, {"CG3C31", "HGA1", "340.00", "1.0830", "PROTMOD cyclopropane"}, {"CG3C31", "HGA2", "340.00", "1.0830", "PROTMOD cyclopropane"}, {"CG3C41", "CG3C41", "270.00", "1.5400", "CBU, cyclobutane, AZDO, 2-azetidinone, lsk"}, {"CG3C41", "NG2R43", "245.00", "1.4500", "AZDO, 2-azetidinone, kevo"}, {"CG3C41", "OG3C51", "350.00", "1.4223", "OXTN, oxetane, gmu"}, {"CG3C41", "HGA2", "348.00", "1.0930", "CBU, cyclobutane, AZDO, 2-azetidinone, lsk"}, {"CG3C51", "CG3C51", "195.00", "1.5180", "THF, nucleotide CSD/NDB survey, 5/30/06,viv"}, {"CG3C51", "CG3C52", "195.00", "1.5180", "THF, nucleotide CSD/NDB survey, 5/30/06,viv"}, {"CG3C51", "CG3C53", "222.50", "1.5000", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG3RC1", "222.50", "1.5240", "CARBOCY carbocyclic sugars"}, {"CG3C51", "NG2R51", "220.00", "1.4580", "NA G/T/U"}, {"CG3C51", "NG2R61", "220.00", "1.4560", "NA A/C"}, {"CG3C51", "NG2S0", "320.00", "1.4340", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "NG2S3", "360.00", "1.4620", "NABAKB phosphoramidates"}, {"CG3C51", "NG301", "220.00", "1.4560", "NADH, NDPH; Kenno: reverted to A/C from par_all27_na.prm"}, {"CG3C51", "NG321", "263.00", "1.4740", "AMINE aliphatic amines"}, {"CG3C51", "OG301", "334.30", "1.4110", "THF2, THF-2'OMe, from Nucl. Acids, ed"}, {"CG3C51", "OG303", "340.00", "1.4300", "LIPID phosphate"}, {"CG3C51", "OG311", "428.00", "1.4200", "PROT methanol vib fit EMB 11/21/89"}, {"CG3C51", "OG3C51", "350.00", "1.4250", "THF, nucleotide CSD/NDB survey, 5/30/06,viv"}, {"CG3C51", "FGA1", "420.00", "1.3740", "FLUROALK fluoroalkanes"}, {"CG3C51", "HGA1", "307.00", "1.1000", "THF, THF neutron diffr., 5/30/06, viv"}, {"CG3C51", "HGA6", "342.00", "1.0828", "T2FU, copied from FLUROALK fluoroalkanes by kevo"}, {"CG3C52", "CG3C52", "195.00", "1.5300", "THF, nucleotide CSD/NDB survey, 5/30/06,viv; increased to 1.53 by kevo"}, {"CG3C52", "CG3C53", "222.50", "1.5270", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C54", "222.50", "1.5370", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3RC1", "222.50", "1.5240", "CARBOCY carbocyclic sugars"}, {"CG3C52", "NG2R50", "400.00", "1.4700", "2IMI, 2-imidazoline; 2HPR, 2H-pyrrole, kevo"}, {"CG3C52", "NG2R53", "370.00", "1.4500", "2PDO, 2-pyrrolidinone, kevo"}, {"CG3C52", "NG2S0", "320.00", "1.4550", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "NG3C51", "400.00", "1.4780", "PRLD, pyrrolidine; 2PRL, 2-pyrroline, kevo"}, {"CG3C52", "OG3C51", "350.00", "1.4250", "THF, nucleotide CSD/NDB survey, 5/30/06,viv"}, {"CG3C52", "HGA2", "307.00", "1.1000", "THF, THF neutron diffr., 5/30/06, viv"}, {"CG3C53", "NG2R61", "220.00", "1.4560", "NA A/C"}, {"CG3C53", "NG3P2", "320.00", "1.4850", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "OG3C51", "240.00", "1.4460", "NA NA"}, {"CG3C53", "HGA1", "330.00", "1.0800", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C54", "CG3C54", "210.00", "1.5600", "2IMP, 2-imidazoline.H+ ! RE-OPTIMIZE !!!, kevo"}, {"CG3C54", "NG2R52", "320.00", "1.4600", "2IMP, 2-imidazoline.H+, kevo"}, {"CG3C54", "NG3C51", "235.00", "1.4300", "IMDP, imidazolidine ! partial dbl bond ==> RE-OPTIMIZE?, erh and kevo"}, {"CG3C54", "NG3P2", "320.00", "1.5150", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93 kenno: 1.502 --> 1.515 (CGenFF is not for peptides!)"}, {"CG3C54", "HGA2", "309.00", "1.1110", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3RC1", "CG3RC1", "222.50", "1.5230", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "NG2R51", "220.00", "1.4580", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "NG2R53", "370.00", "1.4500", "CBHH, glycoluril, (CG3C52 NG2R53), jing"}, {"CG3RC1", "NG2R61", "220.00", "1.4560", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "OG3C51", "260.00", "1.4200", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol, xxwy"}, {"CG3RC1", "HGA1", "309.00", "1.1110", "CARBOCY carbocyclic sugars"}, {"NG2D1", "NG2S1", "550.00", "1.3600", "HDZ1, hydrazone model cmpd"}, {"NG2D1", "HGP1", "455.00", "1.0000", "MGU2, methylguanidine2"}, {"NG2O1", "OG2N1", "580.00", "1.2250", "NITB, nitrobenzene"}, {"NG2P1", "HGP2", "455.00", "1.0000", "RETINOL SCH2, Schiff's base, protonated"}, {"NG2R43", "HGP1", "403.00", "1.0150", "AZDO, 2-azetidinone, kevo"}, {"NG2R50", "NG2R50", "340.00", "1.2900", "OXAD, oxadiazole123"}, {"NG2R50", "NG2R51", "360.00", "1.3550", "PYRZ, pyrazole"}, {"NG2R50", "NG3C51", "420.00", "1.4110", "2PRZ, 2-pyrazoline, kevo"}, {"NG2R50", "OG2R50", "280.00", "1.3950", "ISOX, isoxazole"}, {"NG2R50", "SG2R50", "270.00", "1.7000", "ISOT, isothiazole"}, {"NG2R51", "HGP1", "474.00", "1.0100", "NA G, adm jr. 11/97"}, {"NG2R52", "HGP2", "453.00", "1.0000", "PROT his, adm jr., 6/27/90"}, {"NG2R53", "HGP1", "470.00", "1.0150", "440 *NEW* 2PDO, 2-pyrrolidinone, kevo"}, {"NG2R57", "NG2R57", "450.00", "1.3650", "11BPO, 1,1-bipyrrole, lf"}, {"NG2R61", "HGP1", "474.00", "1.0100", "NA C,U, JWK"}, {"NG2R61", "HGP2", "474.00", "1.0100", "NA C,U, JWK"}, {"NG2R62", "NG2R62", "420.00", "1.3200", "PYRD, pyridazine"}, {"NG2S1", "HGP1", "440.00", "0.9970", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"NG2S2", "HGP1", "480.00", "1.0000", "PROT adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NG2S3", "PG1", "180.00", "1.7920", "NABAKB phosphoramidates"}, {"NG2S3", "SG3O1", "224.00", "1.7000", "NMSM, N-methyl-sulfamate, my (QM: 1.74; Crystal: 1.637 1.665 1.656 1.672, aver: 1.658)"}, {"NG2S3", "HGP1", "432.50", "1.0250", "NABAKB phosphoramidates"}, {"NG2S3", "HGP4", "488.00", "1.0000", "NA A,C,G, JWK, adm jr. 7/24/91"}, {"NG311", "SG3O2", "235.00", "1.6500", "MMSM, N-methylmethanesulfonamide and other sulfonamides,(org 1.6950) compromise between crystal and mp2, xxwy"}, {"NG311", "HGP1", "442.00", "1.0210", "MMSM, N-methylmethanesulfonamide and other sulfonamides, xxwy"}, {"NG311", "HGPAM1", "447.80", "1.0190", "AMINE aliphatic amines"}, {"NG321", "SG3O2", "240.00", "1.6800", "MSAM, methanesulfonamide; BSAM, benzenesulfonamide; (org 1.730) compromise between crystal and mp2, xxwy"}, {"NG321", "HGP1", "454.00", "1.0200", "MSAM, methanesulfonamide; BSAM, benzenesulfonamide; xxwy"}, {"NG321", "HGPAM2", "453.10", "1.0140", "AMINE aliphatic amines"}, {"NG331", "HGPAM3", "455.50", "1.0140", "AMINE aliphatic amines"}, {"NG3C51", "NG3P2", "270.00", "1.4400", "PRZP, Pyrazolidine.H+, kevo"}, {"NG3C51", "HGP1", "450.00", "1.0180", "PRLD, pyrrolidine; 2PRL, 2-pyrroline, kevo"}, {"NG3N1", "NG3N1", "355.00", "1.4000", "HDZN, hydrazine, ed"}, {"NG3N1", "HGP1", "437.00", "1.0100", "HDZN, hydrazine, ed"}, {"NG3P0", "OG311", "245.00", "1.4000", "TMAOP, Hydroxy(trimethyl)Ammonium, xxwy"}, {"NG3P0", "OG312", "310.00", "1.4000", "TMAO, trimethylamine N-oxide, xxwy and ejd"}, {"NG3P1", "HGP2", "403.00", "1.0400", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"NG3P2", "HGP2", "460.00", "1.0060", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG3P3", "HGP2", "403.00", "1.0400", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"OG2P1", "PG0", "580.00", "1.4800", "MP_0 reorganization, kevo"}, {"OG2P1", "PG1", "500.00", "1.5100", "MP_1 reorganization, kevo"}, {"OG2P1", "PG2", "400.00", "1.5200", "MP_2 reorganization, kevo"}, {"OG2P1", "SG3O1", "540.00", "1.4480", "LIPID methylsulfate"}, {"OG2P1", "SG3O2", "630.00", "1.4400", "DMSN, dimethyl sulfone; MSAM, methanesulfonamide and other sulfonamides; compromise between crystal and mp2; xxwy and xhe"}, {"OG2P1", "SG3O3", "540.00", "1.5300", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"OG303", "PG0", "230.00", "1.6100", "MP_0 reorganization, kevo"}, {"OG303", "PG1", "190.00", "1.6500", "MP_1 reorganization, kevo"}, {"OG303", "PG2", "150.00", "1.6550", "MP_2 reorganization, kevo"}, {"OG303", "SG3O1", "250.00", "1.5750", "LIPID methylsulfate"}, {"OG303", "SG3O2", "235.00", "1.6000", "MMST, methyl methanesulfonate, (org 1.640) compromise between crystal and mp2, xxwy"}, {"OG304", "PG1", "330.00", "1.6750", "PPI1, PPI2, METP reorganization, kevo ! pulls against attraction"}, {"OG304", "PG2", "300.00", "1.7150", "PPI1, METP reorganization, kevo ! pulls against very strong attraction"}, {"OG311", "PG0", "237.00", "1.5800", "NA MP_1, ADM Jr. !Reorganization:MP_0 RE-OPTIMIZE!"}, {"OG311", "PG1", "237.00", "1.6100", "MP_1 reorganization, kevo"}, {"OG311", "HGP1", "545.00", "0.9600", "PROT EMB 11/21/89 methanol vib fit; og tested on MeOH EtOH,..."}, {"SG301", "SG301", "173.00", "2.0290", "PROT improved CSSC torsion in DMDS 5/15/92 (FL)"}, {"SG311", "HGP3", "275.00", "1.3250", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"FGP1", "ALG1", "205.00", "1.7260", "aluminum tetrafluoride, ALF4, w/UB"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm36_cgenff info V(S) = Kub x (S - S0)^2 */ char * charmm36_cgenff_angles[1561][8]= {{"CG2R61", "CG1N1", "NG1T1", "40.00", "180.00", " ", " ", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN), yin"}, {"CG331", "CG1N1", "NG1T1", "21.20", "180.00", " ", " ", "ACN, acetonitrile, kevo"}, {"CG1T1", "CG1T1", "CG331", "19.00", "180.00", " ", " ", "2BTY, 2-butyne, kevo"}, {"CG1T2", "CG1T1", "CG331", "11.00", "180.00", " ", " ", "PRPY, propyne, kevo"}, {"CG1T1", "CG1T2", "HGPAM1", "8.00", "180.00", " ", " ", "PRPY, propyne, xxwy and kevo"}, {"CG25C1", "CG251O", "CG2R53", "40.00", "125.00", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG251O", "NG2R53", "40.00", "124.00", " ", " ", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"CG25C1", "CG251O", "SG311", "40.00", "124.00", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG251O", "CG2R53", "40.00", "119.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG251O", "NG2R53", "40.00", "130.00", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2DC3", "CG251O", "SG311", "40.00", "130.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG251O", "NG2R53", "116.00", "111.00", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "CG251O", "SG311", "110.00", "111.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C2", "CG252O", "CG2R53", "40.00", "125.00", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG25C2", "CG252O", "NG2R53", "40.00", "124.00", " ", " ", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"CG25C2", "CG252O", "SG311", "40.00", "124.00", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG252O", "CG2R53", "40.00", "119.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG252O", "NG2R53", "40.00", "130.00", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2DC3", "CG252O", "SG311", "40.00", "130.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG252O", "NG2R53", "116.00", "111.00", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "CG252O", "SG311", "110.00", "111.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG25C1", "CG2R53", "33.00", "113.00", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG25C1", "CG2RC0", "33.00", "131.50", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG25C1", "CG2R53", "33.00", "115.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2DC3", "CG25C1", "CG2RC0", "33.00", "130.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C1", "CG2RC0", "45.00", "114.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG252O", "CG25C2", "CG2R53", "33.00", "113.00", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG25C2", "CG2RC0", "33.00", "131.50", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG25C2", "CG2R53", "33.00", "115.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2DC3", "CG25C2", "CG2RC0", "33.00", "130.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C2", "CG2RC0", "45.00", "114.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2D1", "CG2D1", "CG301", "48.00", "123.50", " ", " ", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG321", "48.00", "123.50", " ", " ", "LIPID 2-butene, yin,adm jr., 12/95"}, {"CG2D1", "CG2D1", "CG331", "48.00", "123.50", " ", " ", "LIPID 2-butene, yin,adm jr., 12/95"}, {"CG2D1", "CG2D1", "HGA4", "52.00", "119.50", " ", " ", "LIPID 2-butene, yin,adm jr., 12/95"}, {"CG2D1O", "CG2D1", "CG321", "40.00", "127.50", " ", " ", "PY01, 4h-pyran"}, {"CG2D1O", "CG2D1", "HGA4", "52.00", "119.50", " ", " ", "PY01, 4h-pyran"}, {"CG2D2", "CG2D1", "CG321", "48.00", "126.00", " ", " ", "LIPID 1-butene; propene, yin,adm jr., 12/95"}, {"CG2D2", "CG2D1", "CG331", "47.00", "125.20", " ", " ", "LIPID propene, yin,adm jr., 12/95"}, {"CG2D2", "CG2D1", "HGA4", "42.00", "118.00", " ", " ", "LIPID propene, yin,adm jr., 12/95"}, {"CG2D2O", "CG2D1", "CG321", "40.00", "127.50", " ", " ", "PY01, 4h-pyran"}, {"CG2D2O", "CG2D1", "HGA4", "52.00", "119.50", " ", " ", "PY01, 4h-pyran"}, {"CG301", "CG2D1", "CG321", "50.00", "113.00", " ", " ", "CHOLEST cholesterol"}, {"CG301", "CG2D1", "CG331", "48.00", "123.50", " ", " ", "RETINOL TMCH"}, {"CG321", "CG2D1", "CG331", "48.00", "123.50", " ", " ", "RETINOL TMCH"}, {"CG321", "CG2D1", "HGA4", "40.00", "116.00", " ", " ", "LIPID 1-butene; propene, yin,adm jr., 12/95"}, {"CG331", "CG2D1", "NG2D1", "80.00", "123.00", " ", " ", "RETINOL SCH1, Schiff's base, deprotonated, adjusted for improper, xxwy"}, {"CG331", "CG2D1", "NG2P1", "47.00", "125.60", " ", " ", "RETINOL SCH2, Schiff's base, protonated, adjusted for improper, xxwy"}, {"CG331", "CG2D1", "HGA4", "22.00", "117.00", " ", " ", "LIPID propene, yin,adm jr., 12/95"}, {"CG331", "CG2D1", "HGR52", "42.00", "120.40", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"NG2D1", "CG2D1", "HGA4", "49.00", "119.50", " ", " ", "RETINOL SCH1, Schiff's base, deprotonated, adjusted for improper, xxwy"}, {"NG2P1", "CG2D1", "HGR52", "39.00", "114.00", " ", " ", "RETINOL SCH2, Schiff's base, protonated, adjusted for improper, xxwy"}, {"CG2D1", "CG2D1O", "NG301", "60.00", "122.00", " ", " ", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D1O", "NG311", "60.00", "122.00", " ", " ", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D1O", "OG3R60", "40.00", "126.00", " ", " ", "PY01, 4h-pyran, maintain 360 around apex angle"}, {"CG2D1", "CG2D1O", "HGA4", "52.00", "122.00", " ", " ", "PY01, 4h-pyran"}, {"CG2D2", "CG2D1O", "NG321", "80.00", "128.00", " ", " ", "AMET, ethenamine; mp2-geom, molvib; pram"}, {"CG2D2", "CG2D1O", "OG301", "65.00", "123.50", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D1O", "HGA4", "44.00", "121.00", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2DC1", "CG2D1O", "NG301", "60.00", "122.00", " ", " ", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2DC1", "CG2D1O", "NG311", "60.00", "122.00", " ", " ", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2DC1", "CG2D1O", "OG301", "56.00", "124.50", " ", " ", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2DC1", "CG2D1O", "OG3R60", "40.00", "128.00", " ", " ", "PY02, 2h-pyran"}, {"CG2DC1", "CG2D1O", "HGA4", "42.00", "120.00", " ", " ", "PY02, 2h-pyran"}, {"NG301", "CG2D1O", "HGA4", "42.00", "119.00", " ", " ", "NADH, NDPH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG311", "CG2D1O", "HGA4", "42.00", "119.00", " ", " ", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG321", "CG2D1O", "HGA4", "30.00", "113.00", " ", " ", "AMET, ethenamine; mp2-geom, molvib; pram"}, {"OG301", "CG2D1O", "HGA4", "30.00", "115.50", " ", " ", "MOET, Methoxyethene, xxwy"}, {"OG3R60", "CG2D1O", "HGA4", "30.00", "112.00", " ", " ", "PY01, 4h-pyran"}, {"CG2D1", "CG2D2", "HGA5", "45.00", "120.50", " ", " ", "LIPID propene, yin,adm jr., 12/95"}, {"CG2D1O", "CG2D2", "HGA5", "35.00", "120.50", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D2", "HGA5", "55.50", "120.50", " ", " ", "LIPID ethene, yin,adm jr., 12/95"}, {"CG2D2O", "CG2D2", "HGA5", "35.00", "120.50", " ", " ", "MOET, Methoxyethene, xxwy"}, {"HGA5", "CG2D2", "HGA5", "19.00", "119.00", " ", " ", "LIPID propene, yin,adm jr., 12/95"}, {"CG2D1", "CG2D2O", "NG301", "60.00", "122.00", " ", " ", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D2O", "NG311", "60.00", "122.00", " ", " ", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D2O", "OG3R60", "40.00", "126.00", " ", " ", "PY01, 4h-pyran, maintain 360 around apex angle"}, {"CG2D1", "CG2D2O", "HGA4", "52.00", "122.00", " ", " ", "PY01, 4h-pyran"}, {"CG2D2", "CG2D2O", "NG321", "80.00", "128.00", " ", " ", "AMET, ethenamine; mp2-geom, molvib; pram"}, {"CG2D2", "CG2D2O", "OG301", "65.00", "123.50", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D2O", "HGA4", "44.00", "121.00", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2DC2", "CG2D2O", "NG301", "60.00", "122.00", " ", " ", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2DC2", "CG2D2O", "NG311", "60.00", "122.00", " ", " ", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2DC2", "CG2D2O", "OG301", "56.00", "124.50", " ", " ", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2DC2", "CG2D2O", "OG3R60", "40.00", "128.00", " ", " ", "PY02, 2h-pyran"}, {"CG2DC2", "CG2D2O", "HGA4", "42.00", "120.00", " ", " ", "PY02, 2h-pyran"}, {"NG301", "CG2D2O", "HGA4", "42.00", "119.00", " ", " ", "NADH, NDPH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG311", "CG2D2O", "HGA4", "42.00", "119.00", " ", " ", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG321", "CG2D2O", "HGA4", "30.00", "113.00", " ", " ", "AMET, ethenamine; mp2-geom, molvib; pram"}, {"OG301", "CG2D2O", "HGA4", "30.00", "115.50", " ", " ", "MOET, Methoxyethene, xxwy"}, {"OG3R60", "CG2D2O", "HGA4", "30.00", "112.00", " ", " ", "PY01, 4h-pyran"}, {"CG2D1O", "CG2DC1", "CG2DC2", "48.00", "120.00", " ", " ", "PY02, 2h-pyran"}, {"CG2D1O", "CG2DC1", "CG2O1", "65.00", "113.00", " ", " ", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 5.0 107.8 but that's too unlikely ==> re-optimize"}, {"CG2D1O", "CG2DC1", "CG321", "43.50", "126.50", " ", " ", "NICH; Kenno: nadh/ppi, jjp1/adm jr. 7/95 says 43.50 128.00 but that's unlikely ==> re-optimize"}, {"CG2D1O", "CG2DC1", "HGA4", "42.00", "122.00", " ", " ", "PY02, 2h-pyran"}, {"CG2DC1", "CG2DC1", "CG2DC2", "48.00", "123.00", " ", " ", "RETINOL 13DP, Pentadiene @@@@@ Kenno: 123.5-->123.0 @@@@@"}, {"CG2DC1", "CG2DC1", "CG2O1", "48.00", "123.50", " ", " ", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O3", "48.00", "123.50", " ", " ", "RETINOL PRAC"}, {"CG2DC1", "CG2DC1", "CG2O4", "60.00", "120.00", " ", " ", "RETINOL RTAL unmodified"}, {"CG2DC1", "CG2DC1", "CG301", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG321", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG331", "48.00", "123.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2DC1", "CG2DC1", "HGA4", "42.00", "119.00", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2DC2", "CG2DC1", "CG2DC3", "48.00", "123.50", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC2", "CG2DC1", "CG301", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG2DC2", "CG2DC1", "CG331", "48.00", "113.00", " ", " ", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC2", "CG2DC1", "NG2P1", "40.00", "125.60", " ", " ", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC2", "CG2DC1", "HGA4", "42.00", "118.00", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC2", "CG2DC1", "HGR52", "42.00", "120.40", " ", " ", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC3", "CG2DC1", "CG2O3", "40.00", "119.00", "35.00", "2.5267", "RETINOL PRAC"}, {"CG2DC3", "CG2DC1", "CG2O4", "60.00", "120.00", " ", " ", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC1", "CG2O5", "35.00", "118.60", " ", " ", "BEON, butenone, kevo"}, {"CG2DC3", "CG2DC1", "CG2R61", "29.00", "122.00", " ", " ", "STYR, styrene, xxwy and oashi"}, {"CG2DC3", "CG2DC1", "CG331", "48.00", "123.50", " ", " ", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC3", "CG2DC1", "HGA4", "42.00", "118.00", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2O1", "CG2DC1", "CG321", "65.00", "123.50", " ", " ", "NICH; Kenno: nadh/ppi, jjp1/adm jr. 7/95 says 125.0 124.2 but that's unlikely ==> re-optimize"}, {"CG2O1", "CG2DC1", "HGA4", "52.00", "119.50", " ", " ", "RETINOL CROT"}, {"CG2O3", "CG2DC1", "HGA4", "52.00", "119.50", " ", " ", "RETINOL PRAC"}, {"CG2O4", "CG2DC1", "HGA4", "32.00", "122.00", " ", " ", "RETINOL RTAL unmodified"}, {"CG2O5", "CG2DC1", "HGA4", "32.00", "123.40", " ", " ", "BEON, butenone, kevo"}, {"CG2R61", "CG2DC1", "NG2D1", "56.00", "117.00", " ", " ", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"CG2R61", "CG2DC1", "HGA4", "32.00", "120.00", " ", " ", "HDZ1b, hydrazone model cmpd 1b; STYR, styrene; kevo, xxwy, oashi"}, {"CG321", "CG2DC1", "CG331", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG321", "CG2DC1", "HGA4", "40.00", "116.00", " ", " ", "RETINOL PROL"}, {"CG331", "CG2DC1", "CG331", "47.00", "113.00", " ", " ", "RETINOL DMP1, 4-methyl-1,3-pentadiene"}, {"CG331", "CG2DC1", "HGA4", "42.00", "117.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"NG2D1", "CG2DC1", "HGA4", "38.00", "123.00", " ", " ", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"NG2P1", "CG2DC1", "HGR52", "38.00", "114.00", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2D2O", "CG2DC2", "CG2DC1", "48.00", "120.00", " ", " ", "PY02, 2h-pyran"}, {"CG2D2O", "CG2DC2", "CG2O1", "65.00", "113.00", " ", " ", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 5.0 107.8 but that's too unlikely ==> re-optimize"}, {"CG2D2O", "CG2DC2", "CG321", "43.50", "126.50", " ", " ", "NICH; Kenno: nadh/ppi, jjp1/adm jr. 7/95 says 43.50 128.00 but that's unlikely ==> re-optimize"}, {"CG2D2O", "CG2DC2", "HGA4", "42.00", "122.00", " ", " ", "PY02, 2h-pyran"}, {"CG2DC1", "CG2DC2", "CG2DC2", "48.00", "123.00", " ", " ", "RETINOL 13DP, Pentadiene @@@@@ Kenno: 123.5-->123.0 @@@@@"}, {"CG2DC1", "CG2DC2", "CG2DC3", "48.00", "123.50", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC1", "CG2DC2", "CG301", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG2DC1", "CG2DC2", "CG331", "48.00", "113.00", " ", " ", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC1", "CG2DC2", "NG2P1", "40.00", "125.60", " ", " ", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC1", "CG2DC2", "HGA4", "42.00", "118.00", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC1", "CG2DC2", "HGR52", "42.00", "120.40", " ", " ", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC2", "CG2DC2", "CG2O1", "48.00", "123.50", " ", " ", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O3", "48.00", "123.50", " ", " ", "RETINOL PRAC"}, {"CG2DC2", "CG2DC2", "CG2O4", "60.00", "120.00", " ", " ", "RETINOL RTAL unmodified"}, {"CG2DC2", "CG2DC2", "CG301", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG2DC2", "CG2DC2", "CG321", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG2DC2", "CG2DC2", "CG331", "48.00", "123.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2DC2", "CG2DC2", "HGA4", "42.00", "119.00", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2DC3", "CG2DC2", "CG2O3", "40.00", "119.00", "35.00", "2.5267", "RETINOL PRAC"}, {"CG2DC3", "CG2DC2", "CG2O4", "60.00", "120.00", " ", " ", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC2", "CG2O5", "35.00", "118.60", " ", " ", "BEON, butenone, kevo"}, {"CG2DC3", "CG2DC2", "CG2R61", "29.00", "122.00", " ", " ", "STYR, styrene, xxwy and oashi"}, {"CG2DC3", "CG2DC2", "CG331", "48.00", "123.50", " ", " ", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC3", "CG2DC2", "HGA4", "42.00", "118.00", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2O1", "CG2DC2", "CG321", "65.00", "123.50", " ", " ", "NICH; Kenno: nadh/ppi, jjp1/adm jr. 7/95 says 125.0 124.2 but that's unlikely ==> re-optimize"}, {"CG2O1", "CG2DC2", "HGA4", "52.00", "119.50", " ", " ", "RETINOL CROT"}, {"CG2O3", "CG2DC2", "HGA4", "52.00", "119.50", " ", " ", "RETINOL PRAC"}, {"CG2O4", "CG2DC2", "HGA4", "32.00", "122.00", " ", " ", "RETINOL RTAL unmodified"}, {"CG2O5", "CG2DC2", "HGA4", "32.00", "123.40", " ", " ", "BEON, butenone, kevo"}, {"CG2R61", "CG2DC2", "NG2D1", "56.00", "117.00", " ", " ", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"CG2R61", "CG2DC2", "HGA4", "32.00", "120.00", " ", " ", "HDZ1b, hydrazone model cmpd 1b; STYR, styrene; kevo, xxwy, oashi"}, {"CG321", "CG2DC2", "CG331", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG321", "CG2DC2", "HGA4", "40.00", "116.00", " ", " ", "RETINOL PROL"}, {"CG331", "CG2DC2", "CG331", "47.00", "113.00", " ", " ", "RETINOL DMP1, 4-methyl-1,3-pentadiene"}, {"CG331", "CG2DC2", "HGA4", "42.00", "117.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"NG2D1", "CG2DC2", "HGA4", "38.00", "123.00", " ", " ", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"NG2P1", "CG2DC2", "HGR52", "38.00", "114.00", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG251O", "CG2DC3", "HGA5", "35.00", "120.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG2DC3", "HGA5", "35.00", "120.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG2DC3", "HGA5", "45.00", "120.50", " ", " ", "MEOI, methyleneoxindole; from RETINOL 13DB, 1,3-Butadiene (re-optimize); kevo"}, {"CG25C2", "CG2DC3", "HGA5", "45.00", "120.50", " ", " ", "MEOI, methyleneoxindole; from RETINOL 13DB, 1,3-Butadiene (re-optimize); kevo"}, {"CG2DC1", "CG2DC3", "HGA5", "45.00", "120.50", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC2", "CG2DC3", "HGA5", "45.00", "120.50", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"HGA5", "CG2DC3", "HGA5", "19.00", "119.00", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"NG2D1", "CG2N1", "NG311", "50.00", "125.00", " ", " ", "MGU2, methylguanidine2"}, {"NG2D1", "CG2N1", "NG321", "100.00", "125.00", " ", " ", "MGU1, methylguanidine; MGU2, methylguanidine2"}, {"NG2P1", "CG2N1", "NG2P1", "52.00", "120.00", "90.00", "2.36420", "PROT changed from 60.0/120.3 for guanidinium (KK)"}, {"NG311", "CG2N1", "NG321", "50.00", "113.00", " ", " ", "MGU2, methylguanidine2 kevo: sum=363 (deliberate)"}, {"NG321", "CG2N1", "NG321", "75.00", "113.00", " ", " ", "MGU1, methylguanidine kevo: sum=363 (deliberate)"}, {"CG2R61", "CG2N2", "NG2P1", "80.00", "118.50", " ", " ", "BAMI, benzamidinium, mp2 geom and movib, pram"}, {"CG331", "CG2N2", "NG2P1", "52.00", "118.50", " ", " ", "AMDN, amidinium, mp2 geom, pram"}, {"NG2D1", "CG2N2", "NG321", "85.00", "127.00", " ", " ", "MT2A, fylin"}, {"NG2D1", "CG2N2", "SG311", "37.00", "116.40", " ", " ", "MT2A, fylin"}, {"NG2P1", "CG2N2", "NG2P1", "52.00", "123.00", "90.00", "2.36420", "AMDN, amidinium, mp2 geom and movib, pram"}, {"NG321", "CG2N2", "SG311", "56.00", "116.60", " ", " ", "MT2A, fylin"}, {"CG2DC1", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "RETINOL CROT"}, {"CG2DC1", "CG2O1", "NG2S2", "85.00", "113.00", "80.0", "2.46", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC1", "CG2O1", "OG2D1", "80.00", "122.50", " ", " ", "RETINOL CROT"}, {"CG2DC2", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "RETINOL CROT"}, {"CG2DC2", "CG2O1", "NG2S2", "85.00", "113.00", "80.0", "2.46", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC2", "CG2O1", "OG2D1", "80.00", "122.50", " ", " ", "RETINOL CROT"}, {"CG2R61", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "HDZ2, hydrazone model cmpd 2"}, {"CG2R61", "CG2O1", "NG2S2", "50.00", "110.23", " ", " ", "3NAP, nicotamide (PYRIDINE pyr-CONH2), yin"}, {"CG2R61", "CG2O1", "OG2D1", "30.00", "121.00", " ", " ", "reverted to 3NAP, nicotamide. Kenno: compromise with NMA and HDZ2 ==> 124.5 --> 121.00"}, {"CG2R62", "CG2O1", "NG2S2", "85.00", "113.00", "80.0", "2.46", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2O1", "OG2D1", "85.00", "118.50", "20.0", "2.43", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG311", "CG2O1", "NG2S0", "20.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG311", "CG2O1", "NG2S2", "50.00", "116.50", "50.00", "2.45000", "PROT adm jr. 8/13/90 geometry and vibrations"}, {"CG311", "CG2O1", "OG2D1", "80.00", "121.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG314", "CG2O1", "NG2S0", "20.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG314", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG314", "CG2O1", "NG2S2", "50.00", "116.50", "50.00", "2.45000", "PROT adm jr. 8/13/90 geometry and vibrations"}, {"CG314", "CG2O1", "OG2D1", "80.00", "121.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG321", "CG2O1", "NG2S0", "20.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG321", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG321", "CG2O1", "NG2S2", "50.00", "116.50", "50.00", "2.45000", "PROT adm jr. 8/13/90 geometry and vibrations"}, {"CG321", "CG2O1", "OG2D1", "80.00", "121.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG324", "CG2O1", "NG2S0", "20.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG324", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG324", "CG2O1", "NG2S2", "50.00", "116.50", "50.00", "2.45000", "PROT adm jr. 8/13/90 geometry and vibrations"}, {"CG324", "CG2O1", "OG2D1", "80.00", "121.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG331", "CG2O1", "NG2S0", "40.00", "115.00", " ", " ", "DMF, Dimethylformamide, xxwy"}, {"CG331", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG331", "CG2O1", "NG2S2", "50.00", "116.50", "50.00", "2.45000", "PROT adm jr. 8/13/90 geometry and vibrations"}, {"CG331", "CG2O1", "OG2D1", "80.00", "121.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG3C51", "CG2O1", "NG2S0", "20.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S2", "80.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "OG2D1", "80.00", "118.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S0", "20.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S2", "80.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "OG2D1", "80.00", "118.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "OG2D1", "80.00", "124.00", " ", " ", "DMF, Dimethylformamide, xxwy"}, {"NG2S0", "CG2O1", "HGR52", "43.00", "115.00", " ", " ", "DMF, Dimethylformamide, xxwy"}, {"NG2S1", "CG2O1", "OG2D1", "80.00", "122.50", " ", " ", "PROT NMA Vib Modes (LK)"}, {"NG2S2", "CG2O1", "OG2D1", "75.00", "122.50", "50.00", "2.37000", "PROT adm jr. 4/10/91, acetamide update"}, {"NG2S2", "CG2O1", "HGR52", "44.00", "111.00", "50.00", "1.98000", "PROT, formamide"}, {"OG2D1", "CG2O1", "HGR52", "44.00", "122.00", " ", " ", "kevo reverted to adm jr., 5/13/91, formamide geometry and vibrations"}, {"CG2R61", "CG2O2", "OG2D1", "70.00", "123.10", "20.00", "2.4420", "ZOIC, benzoic acid, MBOA, methylbenzoate, jal"}, {"CG2R61", "CG2O2", "OG302", "50.00", "111.00", "20.00", "2.3600", "MBOA, methylbenzoate (UB term has been adjusted), jal"}, {"CG2R61", "CG2O2", "OG311", "40.00", "113.90", "30.00", "2.3700", "ZOIC, benzoic acid (UB term has been adjusted), jal"}, {"CG311", "CG2O2", "OG2D1", "70.00", "125.00", "20.00", "2.44200", "PROT adm jr. 5/02/91, acetic acid pure solvent; LIPID methyl acetate"}, {"CG311", "CG2O2", "OG302", "55.00", "109.00", "20.00", "2.3260", "AMGA, Alpha Methyl Glut Acid CDCA Amide"}, {"CG311", "CG2O2", "OG311", "55.00", "110.50", " ", " ", "drug design project, xxwy"}, {"CG321", "CG2O2", "OG2D1", "70.00", "125.00", "20.00", "2.44200", "PROT adm jr. 5/02/91, acetic acid pure solvent; LIPID methyl acetate"}, {"CG321", "CG2O2", "OG302", "55.00", "109.00", "20.00", "2.3260", "LIPID methyl acetate"}, {"CG321", "CG2O2", "OG311", "55.00", "110.50", " ", " ", "PROT adm jr, 10/17/90, acetic acid vibrations"}, {"CG331", "CG2O2", "OG2D1", "70.00", "125.00", "20.00", "2.44200", "PROT adm jr. 5/02/91, acetic acid pure solvent; LIPID methyl acetate"}, {"CG331", "CG2O2", "OG302", "55.00", "109.00", "20.00", "2.3260", "LIPID methyl acetate"}, {"CG331", "CG2O2", "OG311", "55.00", "110.50", " ", " ", "PROT adm jr, 10/17/90, acetic acid vibrations"}, {"OG2D1", "CG2O2", "OG302", "90.00", "125.90", "160.0", "2.2576", "LIPID acetic acid"}, {"OG2D1", "CG2O2", "OG311", "50.00", "123.00", "210.00", "2.26200", "PROT adm jr, 10/17/90, acetic acid vibrations"}, {"OG2D1", "CG2O2", "HGR52", "39.00", "119.00", " ", " ", "FORH, formic acid, xxwy"}, {"OG311", "CG2O2", "HGR52", "47.00", "105.00", " ", " ", "FORH, formic acid, xxwy"}, {"CG2DC1", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.3530", "RETINOL PRAC"}, {"CG2DC2", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.3530", "RETINOL PRAC"}, {"CG2O5", "CG2O3", "OG2D2", "95.00", "116.00", " ", " ", "BIPHENYL ANALOGS unmodified, peml"}, {"CG2R61", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.3530", "3CPY, pyridine-3-carboxylate (PYRIDINE nicotinic acid), yin"}, {"CG301", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.353", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG311", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT adm jr. 7/23/91, correction, ACETATE (KK)"}, {"CG314", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT adm jr. 7/23/91, correction, ACETATE (KK)"}, {"CG321", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT adm jr. 7/23/91, correction, ACETATE (KK)"}, {"CG324", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT adm jr. 7/23/91, correction, ACETATE (KK)"}, {"CG331", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT adm jr. 7/23/91, correction, ACETATE (KK)"}, {"CG3C51", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D2", "CG2O3", "OG2D2", "100.00", "128.00", "70.00", "2.25870", "PROT adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OG2D2", "CG2O3", "HGR52", "45.00", "116.00", " ", " ", "FORA, formate, kevo (sum=360)"}, {"CG2DC1", "CG2O4", "OG2D1", "75.00", "126.00", " ", " ", "RETINOL PRAL only angle modified"}, {"CG2DC1", "CG2O4", "HGR52", "15.00", "116.00", " ", " ", "RETINOL PRAL only angle modified"}, {"CG2DC2", "CG2O4", "OG2D1", "75.00", "126.00", " ", " ", "RETINOL PRAL only angle modified"}, {"CG2DC2", "CG2O4", "HGR52", "15.00", "116.00", " ", " ", "RETINOL PRAL only angle modified"}, {"CG2R61", "CG2O4", "OG2D1", "75.00", "126.00", " ", " ", "ALDEHYDE benzaldehyde only angle unmodified"}, {"CG2R61", "CG2O4", "HGR52", "15.00", "116.00", " ", " ", "ALDEHYDE benzaldehyde only angle unmodified"}, {"CG321", "CG2O4", "OG2D1", "45.00", "126.00", " ", " ", "ALDEHYDE propionaldehyde adm 11/08"}, {"CG321", "CG2O4", "HGR52", "65.00", "116.00", " ", " ", "ALDEHYDE propionaldehyde adm 11/08"}, {"CG331", "CG2O4", "OG2D1", "45.00", "126.00", " ", " ", "ALDEHYDE acetaldehyde adm 11/08"}, {"CG331", "CG2O4", "HGR52", "65.00", "116.00", " ", " ", "ALDEHYDE acetaldehyde adm 11/08"}, {"OG2D1", "CG2O4", "HGR52", "65.00", "118.00", " ", " ", "ALDEHYDE acetaldehyde adm 11/08"}, {"CG2DC1", "CG2O5", "CG331", "35.00", "116.00", " ", " ", "BEON, butenone; from PHMK, phenyl methyl ketone; kevo"}, {"CG2DC1", "CG2O5", "OG2D3", "70.00", "121.80", " ", " ", "BEON, butenone; from PHMK, phenyl methyl ketone; kevo"}, {"CG2DC2", "CG2O5", "CG331", "35.00", "116.00", " ", " ", "BEON, butenone; from PHMK, phenyl methyl ketone; kevo"}, {"CG2DC2", "CG2O5", "OG2D3", "70.00", "121.80", " ", " ", "BEON, butenone; from PHMK, phenyl methyl ketone; kevo"}, {"CG2O3", "CG2O5", "CG2R61", "40.00", "117.20", " ", " ", "BIPHENYLS BF7 C37, sum of equilibrium angles, kevo"}, {"CG2O3", "CG2O5", "OG2D3", "95.00", "121.50", " ", " ", "BIPHENYLS BF7, C37 new init guess by Kenno based on ACO adm 11/08 ==> re-optimize"}, {"CG2R61", "CG2O5", "CG311", "40.00", "117.20", " ", " ", "BIPHENYLS BF6 C36, sum of equilibrium angles, kevo"}, {"CG2R61", "CG2O5", "CG321", "20.00", "116.50", " ", " ", "PHEK, phenyl ethyl ketone; from 3ACP, 3-acetylpyridine; mcs"}, {"CG2R61", "CG2O5", "CG331", "60.00", "116.50", " ", " ", "PHMK, phenyl methyl ketone, mcs"}, {"CG2R61", "CG2O5", "OG2D3", "70.00", "121.30", " ", " ", "3ACP, 3-acetylpyridine; BF6 BF7 C36 C37; PHMK, phenyl methyl ketone; verified by mcs"}, {"CG311", "CG2O5", "OG2D3", "95.00", "121.50", " ", " ", "BIPHENYLS BF6, C36 new init guess by Kenno based on ACO adm 11/08 ==> re-optimize"}, {"CG321", "CG2O5", "CG321", "35.00", "115.60", " ", " ", "CHON, cyclohexanone; from ACO, acetone; yapol"}, {"CG321", "CG2O5", "CG331", "35.00", "115.60", " ", " ", "BTON, butanone; from ACO, acetone; yapol"}, {"CG321", "CG2O5", "OG2D3", "75.00", "122.20", " ", " ", "BTON, butanone; from ACO, acetone; yapol"}, {"CG331", "CG2O5", "CG331", "35.00", "115.60", " ", " ", "ACO, acetone adm 11/08"}, {"CG331", "CG2O5", "OG2D3", "75.00", "122.20", " ", " ", "ACO, acetone adm 11/08"}, {"NG2S1", "CG2O6", "OG2D1", "60.00", "125.70", " ", " ", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo"}, {"NG2S1", "CG2O6", "OG302", "90.00", "110.30", " ", " ", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo"}, {"NG2S2", "CG2O6", "NG2S2", "70.00", "115.00", " ", " ", "UREA, Urea"}, {"NG2S2", "CG2O6", "OG2D1", "75.00", "122.50", "50.00", "2.37000", "UREA, Urea. Uses a slack parameter from PROT adm jr. 4/10/91, acetamide update ==> re-optimize"}, {"OG2D1", "CG2O6", "OG302", "70.00", "123.50", " ", " ", "DMCB and DECB and DMCA, dimethyl and diehtyl carbamate and dimethyl carbonate, cacha and kevo"}, {"OG2D2", "CG2O6", "OG2D2", "40.00", "120.00", "99.5", "2.24127", "PROTMOD carbonate"}, {"OG2D2", "CG2O6", "OG311", "79.00", "120.00", " ", " ", "CO31, bicarbonate, xxwy"}, {"OG302", "CG2O6", "OG302", "85.00", "105.00", " ", " ", "DMCA, dimethyl carbonate, xxwy"}, {"SG2D1", "CG2O6", "SG311", "70.00", "124.00", " ", " ", "DMTT, dimethyl trithiocarbonate, kevo"}, {"SG311", "CG2O6", "SG311", "40.00", "112.00", " ", " ", "DMTT, dimethyl trithiocarbonate, kevo"}, {"NG2D1", "CG2O7", "OG2D5", "42.00", "172.00", " ", " ", "MICY, EICY: isocyanates, xxwy"}, {"OG2D5", "CG2O7", "OG2D5", "45.00", "180.00", " ", " ", "PROT CO2, JES; re-optimized by kevo"}, {"CG2R51", "CG2R51", "CG2R51", "90.00", "107.20", " ", " ", "PYRL, pyrrole"}, {"CG2R51", "CG2R51", "CG2R52", "90.00", "106.00", " ", " ", "PYRZ, pyrazole"}, {"CG2R51", "CG2R51", "CG2R53", "100.00", "116.50", " ", " ", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R51", "CG2R57", "90.00", "107.20", " ", " ", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51; lf"}, {"CG2R51", "CG2R51", "CG2RC0", "85.00", "105.70", "25.00", "2.26100", "INDO/TRP"}, {"CG2R51", "CG2R51", "CG2RC7", "70.00", "106.90", " ", " ", "AZUL, Azulene, kevo"}, {"CG2R51", "CG2R51", "CG321", "45.80", "130.00", " ", " ", "PROT his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CG2R51", "CG2R51", "CG331", "45.80", "130.00", " ", " ", "PROT his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CG2R51", "CG2R51", "CG3C52", "115.00", "109.00", " ", " ", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "CG3C54", "115.00", "109.00", " ", " ", "3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R51", "CG2R51", "NG2R50", "130.00", "110.00", " ", " ", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "CG2R51", "NG2R51", "130.00", "106.00", " ", " ", "110.6, PROT his, ADM JR., 7/20/89"}, {"CG2R51", "CG2R51", "NG2R52", "145.00", "108.00", " ", " ", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "CG2R51", "NG2R57", "130.00", "106.00", " ", " ", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 NG2R51; lf"}, {"CG2R51", "CG2R51", "NG2RC0", "130.00", "108.20", " ", " ", "INDZ, indolizine, kevo"}, {"CG2R51", "CG2R51", "NG3C51", "105.00", "111.80", " ", " ", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "NG3P2", "120.00", "111.00", " ", " ", "2PRP, 2-pyrroline.H+, kevo"}, {"CG2R51", "CG2R51", "OG2R50", "130.00", "111.70", " ", " ", "FURA, furan @@@@@ Kenno: 108-->112 @@@@@"}, {"CG2R51", "CG2R51", "OG3C51", "135.00", "113.20", " ", " ", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG2R51", "CG2R51", "SG2R50", "105.00", "109.00", " ", " ", "THIP, thiophene"}, {"CG2R51", "CG2R51", "HGR51", "32.00", "126.40", "25.00", "2.17300", "INDO/TRP"}, {"CG2R51", "CG2R51", "HGR52", "22.00", "130.00", "15.00", "2.21500", "PROT adm jr., 6/27/90, his"}, {"CG2R52", "CG2R51", "HGR51", "15.00", "127.60", " ", " ", "2HPR, 2H-pyrrole; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R53", "CG2R51", "HGR51", "10.00", "117.10", " ", " ", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R57", "CG2R51", "NG2R51", "130.00", "106.00", " ", " ", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 NG2R51; lf"}, {"CG2R57", "CG2R51", "HGR51", "32.00", "126.40", "25.00", "2.17300", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 HGR51; lf"}, {"CG2R57", "CG2R51", "HGR52", "22.00", "130.00", "15.00", "2.21500", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 HGR52; lf"}, {"CG2RC0", "CG2R51", "CG321", "30.00", "126.70", " ", " ", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG331", "30.00", "126.70", " ", " ", "INDO/TRP"}, {"CG2RC0", "CG2R51", "NG2R51", "100.00", "107.50", " ", " ", "ISOI, isoindole, kevo"}, {"CG2RC0", "CG2R51", "HGR51", "32.00", "126.40", "25.00", "2.25500", "INDO/TRP"}, {"CG2RC0", "CG2R51", "HGR52", "31.00", "128.50", " ", " ", "ISOI, isoindole, kevo"}, {"CG2RC7", "CG2R51", "HGR51", "32.00", "126.70", " ", " ", "AZUL, Azulene, kevo"}, {"CG321", "CG2R51", "NG2R50", "45.80", "120.00", " ", " ", "PROT his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"CG321", "CG2R51", "NG2R51", "45.80", "124.00", " ", " ", "PROT his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"CG321", "CG2R51", "NG2R52", "45.80", "122.00", " ", " ", "PROT his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"CG331", "CG2R51", "NG2R51", "45.80", "124.00", " ", " ", "PROT his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"CG3C52", "CG2R51", "HGR51", "29.00", "124.60", " ", " ", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline, kevo"}, {"CG3C54", "CG2R51", "HGR51", "13.00", "124.60", " ", " ", "124.6 3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"NG2R50", "CG2R51", "HGR52", "25.00", "120.00", "20.00", "2.14000", "PROT adm jr., 3/24/92"}, {"NG2R51", "CG2R51", "HGR52", "25.00", "124.00", "20.00", "2.14000", "PROT adm jr., 3/24/92"}, {"NG2R52", "CG2R51", "HGR52", "22.00", "122.00", "15.00", "2.18000", "PROT his, adm jr., 6/27/90"}, {"NG2R57", "CG2R51", "HGR52", "25.00", "124.00", "20.00", "2.14000", "13BPO, 1,3-bipyrrole; from NG2R51 CG2R51 HGR52; lf"}, {"NG2RC0", "CG2R51", "HGR52", "31.00", "121.80", " ", " ", "INDZ, indolizine, kevo"}, {"NG3C51", "CG2R51", "HGR52", "35.00", "118.20", " ", " ", "2PRL, 2-pyrroline, kevo"}, {"NG3P2", "CG2R51", "HGR52", "35.00", "119.00", " ", " ", "2PRP, 2-pyrroline.H+, kevo"}, {"OG2R50", "CG2R51", "HGR52", "50.00", "118.30", " ", " ", "FURA, furan @@@@@ Kenno: 122 --> 118 @@@@@"}, {"OG3C51", "CG2R51", "HGR52", "39.00", "116.80", " ", " ", "2DHF, 2,3-dihydrofuran, kevo"}, {"SG2R50", "CG2R51", "HGR52", "45.00", "121.00", " ", " ", "THIP, thiophene"}, {"CG2R51", "CG2R52", "NG2R50", "110.00", "110.50", " ", " ", "PYRZ, pyrazole"}, {"CG2R51", "CG2R52", "NG2R52", "121.00", "110.00", " ", " ", "2HPP, 2H-pyrrole.H+ C4-C5-N1, kevo"}, {"CG2R51", "CG2R52", "HGR52", "32.00", "126.50", " ", " ", "PYRZ, pyrazole"}, {"CG2R52", "CG2R52", "NG2R50", "70.00", "106.00", " ", " ", "TRZ2, 2H-1,2,3-triazole, lf"}, {"CG2R52", "CG2R52", "HGR52", "30.00", "131.00", " ", " ", "TRZ2, 2H-1,2,3-triazole, lf"}, {"CG2RC0", "CG2R52", "NG2R50", "150.00", "110.40", " ", " ", "INDA, 1H-indazole, kevo"}, {"CG2RC0", "CG2R52", "HGR52", "32.00", "126.60", " ", " ", "INDA, 1H-indazole, kevo"}, {"CG3C52", "CG2R52", "NG2R50", "170.00", "112.00", " ", " ", "2PRZ, 2-pyrazoline; 3HPR, 3H-pyrrole N2-C3-C4, kevo"}, {"CG3C52", "CG2R52", "HGR52", "47.00", "125.00", " ", " ", "2PRZ, 2-pyrazoline; 3HPR, 3H-pyrrole H3-C3-C4, kevo"}, {"NG2R50", "CG2R52", "HGR52", "32.00", "123.00", " ", " ", "PYRZ, pyrazole"}, {"NG2R52", "CG2R52", "HGR52", "35.00", "123.50", " ", " ", "2HPP, 2H-pyrrole.H+ N1-C5-H5, kevo"}, {"CG251O", "CG2R53", "NG2R53", "55.00", "108.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG2R53", "OG2D1", "55.00", "124.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG2R53", "NG2R53", "55.00", "108.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG2R53", "OG2D1", "55.00", "124.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG2R53", "NG2R51", "50.00", "107.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C1", "CG2R53", "OG2D1", "55.00", "125.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2R53", "NG2R51", "50.00", "107.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2R53", "OG2D1", "55.00", "125.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R51", "CG2R53", "OG2D1", "60.80", "127.50", " ", " ", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R53", "OG3C51", "65.50", "105.00", " ", " ", "B2FO, 5H-furan-2-one, ctsai"}, {"CG3C41", "CG2R53", "NG2R43", "120.00", "104.50", " ", " ", "AZDO, 2-azetidinone, kevo"}, {"CG3C41", "CG2R53", "OG2D1", "60.00", "135.70", " ", " ", "AZDO, 2-azetidinone, lsk and kevo"}, {"CG3C52", "CG2R53", "NG2R53", "120.00", "105.50", " ", " ", "2PDO, 2-pyrrolidinone N1-C2-C3 v, kevo"}, {"CG3C52", "CG2R53", "OG2D1", "65.00", "126.70", " ", " ", "2PDO, 2-pyrrolidinone, kevo"}, {"CG3C52", "CG2R53", "OG3C51", "90.00", "105.80", " ", " ", "GBL, Gamma-butyrolactone, ctsai and kevo"}, {"NG2R43", "CG2R53", "OG2D1", "60.00", "134.30", " ", " ", "AZDO, 2-azetidinone, lsk and kevo"}, {"NG2R50", "CG2R53", "NG2R50", "100.00", "111.00", " ", " ", "TRZ4, triazole124, xxwy"}, {"NG2R50", "CG2R53", "NG2R51", "100.00", "113.00", " ", " ", "NA Gua 5R)"}, {"NG2R50", "CG2R53", "NG3C51", "160.00", "117.40", " ", " ", "2IMI, 2-imidazoline N1-C2-N3 d1a,d1, kevo"}, {"NG2R50", "CG2R53", "OG2R50", "120.00", "115.70", " ", " ", "OXAZ, oxazole @@@@@ Kenno: 108 --> 115.7 @@@@@"}, {"NG2R50", "CG2R53", "SG2R50", "110.00", "117.20", " ", " ", "THAZ, thiazole @@@@@ Kenno: 112 --> 117.2 @@@@@"}, {"NG2R50", "CG2R53", "HGR52", "39.00", "124.80", " ", " ", "NA Ade h8, G,A"}, {"NG2R51", "CG2R53", "OG2D1", "70.00", "127.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"NG2R51", "CG2R53", "HGR52", "40.00", "122.20", " ", " ", "NA Gua h8 (NN4 CG2R53HN3 124.8)"}, {"NG2R52", "CG2R53", "NG2R52", "145.00", "108.00", " ", " ", "PROT his, ADM JR., 7/20/89"}, {"NG2R52", "CG2R53", "HGR53", "32.00", "126.00", "25.00", "2.14000", "PROT his, adm jr., 6/27/90"}, {"NG2R53", "CG2R53", "NG2R53", "75.00", "104.40", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"NG2R53", "CG2R53", "OG2D1", "65.00", "127.80", " ", " ", "2PDO, 2-pyrrolidinone, kevo"}, {"NG2R53", "CG2R53", "SG2D1", "45.00", "127.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG2R53", "SG311", "70.00", "109.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG3C51", "CG2R53", "HGR52", "32.00", "117.80", " ", " ", "2IMI, 2-imidazoline N1-C2-H2, kevo"}, {"OG2D1", "CG2R53", "OG3C51", "64.00", "127.50", " ", " ", "GBL, Gamma-butyrolactone, ctsai and kevo"}, {"OG2D1", "CG2R53", "SG311", "55.00", "125.00", " ", " ", "MTDO, 5-methylene-2,4-thiazolidinedione, xxwy and oashi"}, {"OG2R50", "CG2R53", "HGR52", "25.00", "119.50", "20.00", "2.14000", "OXAZ, oxazole @@@@@ Kenno: 120 -->119.5 @@@@@"}, {"SG2D1", "CG2R53", "SG311", "45.00", "124.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG2R50", "CG2R53", "HGR52", "30.00", "118.00", " ", " ", "THAZ, thiazole"}, {"CG2R51", "CG2R57", "CG2R51", "90.00", "107.20", " ", " ", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51; lf"}, {"CG2R51", "CG2R57", "CG2R57", "33.00", "126.40", " ", " ", "33BPO, 3,3-bipyrrole, lf"}, {"CG2R51", "CG2R57", "NG2R57", "42.50", "126.40", " ", " ", "13BPO, 1,3-bipyrrole, lf"}, {"CG1N1", "CG2R61", "CG2R61", "35.00", "120.00", " ", " ", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN) Kenno: 119 --> 120"}, {"CG2DC1", "CG2R61", "CG2R61", "36.00", "120.00", " ", " ", "STYR, styrene and HDZ2, hydrazone model cmpd 2; xxwy and oashi; verified by kevo"}, {"CG2DC2", "CG2R61", "CG2R61", "36.00", "120.00", " ", " ", "STYR, styrene and HDZ2, hydrazone model cmpd 2; xxwy and oashi; verified by kevo"}, {"CG2N2", "CG2R61", "CG2R61", "25.00", "120.00", " ", " ", "BAMI, benzamidinium, mp2 molvib, pram"}, {"CG2O1", "CG2R61", "CG2R61", "45.00", "119.00", " ", " ", "reverted to 3NAP, nicotinamide"}, {"CG2O1", "CG2R61", "CG2RC0", "60.00", "120.00", " ", " ", "HDZ2, hydrazone model cmpd 2"}, {"CG2O2", "CG2R61", "CG2R61", "45.00", "120.00", " ", " ", "ZOIC, benzoic acid, MBOA, methylbenzoate, jal"}, {"CG2O3", "CG2R61", "CG2R61", "45.00", "119.00", " ", " ", "3CB, Benzoate. Based on a slack parameter from 3ACP, 3-acetylpyridine ==> re-optimize"}, {"CG2O4", "CG2R61", "CG2R61", "45.00", "119.80", " ", " ", "ALDEHYDE benzaldehyde unmodified"}, {"CG2O5", "CG2R61", "CG2R61", "45.00", "120.00", " ", " ", "PHMK, PHEK, sum of equilibrium angles, kevo"}, {"CG2R61", "CG2R61", "CG2R61", "40.00", "120.00", "35.00", "2.41620", "PROT JES 8/25/89"}, {"CG2R61", "CG2R61", "CG2R62", "40.00", "119.00", "35.00", "2.41620", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R61", "CG2R63", "40.00", "120.00", "35.00", "2.41620", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R61", "CG2R64", "40.00", "115.50", "35.00", "2.41620", "18NFD, 1,8-naphthyridine, erh"}, {"CG2R61", "CG2R61", "CG2R66", "40.00", "119.00", "35.00", "2.41620", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R61", "CG2R67", "40.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "CG2RC0", "50.00", "120.00", " ", " ", "113.20 ! INDO/TRP"}, {"CG2R61", "CG2R61", "CG311", "45.80", "120.00", " ", " ", "modified by kevo for improved transferability"}, {"CG2R61", "CG2R61", "CG312", "45.80", "120.00", " ", " ", "BDFP, BDFD, Difuorobenzylphosphonate, modified by kevo for improved transferability"}, {"CG2R61", "CG2R61", "CG321", "45.80", "120.00", " ", " ", "EBEN, ethylbenzene, modified by kevo for improved transferability"}, {"CG2R61", "CG2R61", "CG324", "45.80", "120.00", " ", " ", "BPIP, N-Benzyl PIP, modified by kevo for improved transferability"}, {"CG2R61", "CG2R61", "CG331", "45.80", "120.00", " ", " ", "TOLU, toluene, modified by kevo for improved transferability"}, {"CG2R61", "CG2R61", "NG2O1", "20.00", "120.00", " ", " ", "NITB, nitrobenzene"}, {"CG2R61", "CG2R61", "NG2R60", "20.00", "124.00", " ", " ", "PYRIDINE pyridine, yin"}, {"CG2R61", "CG2R61", "NG2R61", "125.00", "120.00", " ", " ", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R61", "NG2R62", "20.00", "124.00", " ", " ", "PYRD, pyridazine"}, {"CG2R61", "CG2R61", "NG2RC0", "100.00", "121.40", " ", " ", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2R61", "NG2S1", "40.00", "120.00", "35.00", "2.4162", "RESI PACP, FRET AND OTHERS"}, {"CG2R61", "CG2R61", "NG2S3", "60.00", "121.00", " ", " ", "PYRIDINE aminopyridine, adm jr., 7/94"}, {"CG2R61", "CG2R61", "NG301", "42.00", "120.00", " ", " ", "DMAN, N,N-dimethylaniline, kevo"}, {"CG2R61", "CG2R61", "NG311", "40.00", "120.00", " ", " ", "FEOZ, phenoxazine, erh"}, {"CG2R61", "CG2R61", "NG3N1", "48.00", "122.00", " ", " ", "PHHZ, phenylhydrazine, ed"}, {"CG2R61", "CG2R61", "OG301", "110.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "OG303", "75.00", "120.00", " ", " ", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "CG2R61", "OG311", "45.20", "120.00", " ", " ", "PYRIDINE phenol, yin"}, {"CG2R61", "CG2R61", "OG312", "40.00", "120.00", " ", " ", "PROT adm jr. 8/27/91, phenoxide"}, {"CG2R61", "CG2R61", "OG3R60", "40.00", "120.00", " ", " ", "FEOZ, phenoxazine, erh"}, {"CG2R61", "CG2R61", "SG311", "40.00", "120.00", " ", " ", "FETZ, phenothiazine, erh"}, {"CG2R61", "CG2R61", "SG3O1", "10.00", "122.30", " ", " ", "benzene sulfonic acid anion, og"}, {"CG2R61", "CG2R61", "SG3O2", "35.00", "119.00", " ", " ", "BSAM, benzenesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "CG2R61", "CLGR1", "60.00", "120.00", " ", " ", "CHLB, chlorobenzene"}, {"CG2R61", "CG2R61", "BRGR1", "45.00", "120.00", " ", " ", "BROB, bromobenzene"}, {"CG2R61", "CG2R61", "IGR1", "45.00", "120.00", " ", " ", "IODB, iodobenzene"}, {"CG2R61", "CG2R61", "HGR61", "30.00", "120.00", "22.00", "2.15250", "PROT JES 8/25/89 benzene"}, {"CG2R61", "CG2R61", "HGR62", "30.00", "120.00", "22.00", "2.15250", "BROB, bromobenzene"}, {"CG2R62", "CG2R61", "HGR61", "20.00", "121.00", "22.00", "2.15250", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R63", "CG2R61", "HGR62", "18.00", "120.00", "22.00", "2.15250", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from CG2R64 CG2R61 HGR61; isg"}, {"CG2R64", "CG2R61", "NG2R60", "20.00", "123.40", " ", " ", "PTID, pteridine, erh"}, {"CG2R64", "CG2R61", "OG311", "45.20", "120.00", " ", " ", "2A3HPD, from PYRIDINE phenol, cacha"}, {"CG2R64", "CG2R61", "HGR61", "30.00", "120.00", "22.00", "2.15250", "2AMP, 2-amino pyridine, from PROT benzene, kevo"}, {"CG2R66", "CG2R61", "CG2R66", "40.00", "117.00", "35.00", "2.41620", "NAMODEL difluorotoluene"}, {"CG2R66", "CG2R61", "CG331", "45.80", "120.00", " ", " ", "NAMODEL difluorotoluene"}, {"CG2R66", "CG2R61", "NG2R60", "20.00", "124.00", " ", " ", "3FLP, 3-fluoropyridine. Kenno: copied from pyridine while retrofitting CG2R66 ==> re-optimize"}, {"CG2R66", "CG2R61", "NG2S1", "40.00", "120.00", "35.00", "2.4162", "2FBD, 2-fluoroanilide patch. Kenno: copied from RETINOL TMCH/MECH while retrofitting CG2R66 ==> re-optimize"}, {"CG2R66", "CG2R61", "HGR62", "30.00", "121.50", "22.00", "2.15250", "NAMODEL difluorotoluene"}, {"CG2R67", "CG2R61", "NG2R60", "20.00", "124.00", " ", " ", "PYRIDINE pyridine, yin"}, {"CG2R67", "CG2R61", "HGR61", "30.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2R67", "CG2R61", "HGR62", "30.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2RC0", "CG2R61", "NG2R62", "20.00", "119.00", " ", " ", "PUR9, purine(N9H); PUR7, purine(N7H), kevo"}, {"CG2RC0", "CG2R61", "HGR61", "30.00", "120.00", "22.00", "2.14600", "122 INDO/TRP"}, {"CG2RC0", "CG2R61", "HGR62", "30.00", "121.50", " ", " ", "22.00 2.16830 ! PUR7, purine(N7H); PUR9, purine(N9H), kevo"}, {"CG321", "CG2R61", "NG2R60", "45.80", "122.30", " ", " ", "2AEPD, 2-ethylamino-pyridine CDCA conjugate, cacha"}, {"CG331", "CG2R61", "NG2R60", "45.80", "122.30", " ", " ", "3A2MPD, 3-amino-2-methyl-pyridine CDCA conjugate, cacha"}, {"NG2R60", "CG2R61", "BRGR1", "45.00", "120.00", " ", " ", "3A6BPD, Gamma-3-Amino-6-bromo Pyridine GA CDCA Amide, cacha"}, {"NG2R60", "CG2R61", "HGR62", "30.00", "116.00", "35.00", "2.10000", "PYR1, pyridine %% Kenno: 112->116"}, {"NG2R61", "CG2R61", "HGR62", "33.00", "115.00", " ", " ", "URA24S, 2,4(1H,3H)-pyrimidinedithione, isg"}, {"NG2R62", "CG2R61", "HGR62", "30.00", "116.00", "35.00", "2.10000", "PYRD, pyridazine %% Kenno: 112->116"}, {"NG2RC0", "CG2R61", "HGR62", "30.00", "118.60", " ", " ", "INDZ, indolizine, kevo"}, {"CG2O1", "CG2R62", "CG2R62", "10.00", "131.80", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R61", "CG2R62", "CG2R62", "40.00", "121.00", " ", " ", "RIN, coumarin, isg"}, {"CG2R61", "CG2R62", "CG2R63", "120.00", "122.30", " ", " ", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "NG2R61", "23.00", "116.10", " ", " ", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "NG2R62", "30.00", "118.00", " ", " ", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R61", "CG2R62", "OG3R60", "40.00", "119.70", " ", " ", "RIN, coumarin, isg"}, {"CG2R62", "CG2R62", "CG2R62", "40.00", "118.00", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2R62", "CG2R63", "120.00", "116.70", " ", " ", "NA T"}, {"CG2R62", "CG2R62", "CG2R64", "85.00", "117.80", " ", " ", "NA C"}, {"CG2R62", "CG2R62", "CG2R67", "40.00", "121.00", " ", " ", "pyo3b, from CG2R61 CG2R62 CG2R62, fylin"}, {"CG2R62", "CG2R62", "CG331", "40.00", "124.20", " ", " ", "NA 5mc, adm jr. 9/9/93"}, {"CG2R62", "CG2R62", "NG2R61", "85.00", "122.90", " ", " ", "NA C"}, {"CG2R62", "CG2R62", "NG2R62", "20.00", "121.00", " ", " ", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R62", "CG2R62", "NG2R67", "85.00", "122.90", " ", " ", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R62 CG2R62 NG2R61; isg"}, {"CG2R62", "CG2R62", "OG3R60", "10.00", "119.30", " ", " ", "RIN, coumarin, isg"}, {"CG2R62", "CG2R62", "HGR62", "42.00", "119.00", " ", " ", "NA nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2R62", "HGR63", "80.00", "120.50", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R63", "CG2R62", "CG2R67", "120.00", "122.30", " ", " ", "pyo2b, from CG2R61 CG2R62 CG2R63, fylin"}, {"CG2R63", "CG2R62", "CG331", "38.00", "118.70", " ", " ", "NA T, c5 methyl"}, {"CG2R63", "CG2R62", "HGR62", "30.00", "120.30", " ", " ", "NA U, h5"}, {"CG2R64", "CG2R62", "HGR62", "38.00", "120.10", " ", " ", "NA C h5"}, {"CG2R67", "CG2R62", "NG2R61", "23.00", "116.10", " ", " ", "pyo3b, from CG2R61 CG2R62 NG2R61, fylin"}, {"CG2R67", "CG2R62", "NG2R62", "30.00", "118.00", " ", " ", "PYRF, from CG2R61 CG2R62 NG2R62, fylin"}, {"CG2R67", "CG2R62", "HGR62", "42.00", "119.00", " ", " ", "pyo3b, from CG2R62 CG2R62 HGR62, fylin"}, {"CG2R67", "CG2R62", "HGR63", "80.00", "120.50", " ", " ", "PIUB, from CG2R62 CG2R62 HGR63, fylin"}, {"NG2R61", "CG2R62", "NG2R62", "50.00", "124.00", " ", " ", "PYRH, from NG2R61 CG2R64 NG2R62, fylin"}, {"NG2R61", "CG2R62", "HGR62", "44.00", "115.00", " ", " ", "NA C, h6"}, {"NG2R61", "CG2R62", "HGR63", "80.00", "117.50", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"NG2R62", "CG2R62", "HGR62", "23.50", "120.00", "35.00", "2.10000", "43HPY, 4(3H)-pyrimidinone, isg. Adjusting angle without UB (from NG2R62 CG2R61 HGR62) is problematic ==> RE-OPTIMIZE!"}, {"NG2R62", "CG2R62", "HGR63", "50.50", "118.50", " ", " ", "PYRH, fylin"}, {"NG2R67", "CG2R62", "HGR62", "44.00", "118.10", " ", " ", "1PH4PO, 1-phenyl-4(1H)-pyridinone, isg"}, {"CG2R61", "CG2R63", "NG2R61", "59.00", "111.90", " ", " ", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R63", "NG2R67", "59.00", "113.40", " ", " ", "3PH24S, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinethione; from YTS2; isg"}, {"CG2R61", "CG2R63", "SG2D1", "38.00", "125.10", " ", " ", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R62", "CG2R63", "CG2R62", "10.00", "120.80", " ", " ", "4PYO, 4(1H)-pyridinone; from CG2R62 CG2R62 CG2R62; isg"}, {"CG2R62", "CG2R63", "NG2R61", "70.00", "113.50", " ", " ", "NA T, adm jr. 11/97"}, {"CG2R62", "CG2R63", "NG2R67", "70.00", "115.70", " ", " ", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R62 CG2R62 NG2R61; isg"}, {"CG2R62", "CG2R63", "OG2D4", "100.00", "124.60", " ", " ", "NA T, o4"}, {"CG2R62", "CG2R63", "OG3R60", "10.00", "121.50", " ", " ", "RIN, coumarin, isg"}, {"CG2R62", "CG2R63", "SG2D1", "52.00", "123.50", " ", " ", "YT2S, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2RC0", "CG2R63", "NG2R61", "70.00", "107.80", " ", " ", "NA Gua 6R)"}, {"CG2RC0", "CG2R63", "OG2D4", "50.00", "124.70", " ", " ", "NA Gua"}, {"NG2R61", "CG2R63", "NG2R61", "50.00", "114.00", " ", " ", "NA U"}, {"NG2R61", "CG2R63", "NG2R62", "50.00", "116.80", " ", " ", "NA C"}, {"NG2R61", "CG2R63", "NG2R67", "50.00", "114.00", " ", " ", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from NG2R61 CG2R63 NG2R61, NA; isg"}, {"NG2R61", "CG2R63", "OG2D4", "130.00", "119.40", " ", " ", "NA C, o2"}, {"NG2R61", "CG2R63", "SG2D1", "56.00", "123.00", " ", " ", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"NG2R62", "CG2R63", "OG2D4", "130.00", "123.80", " ", " ", "NA C"}, {"NG2R67", "CG2R63", "OG2D4", "130.00", "119.70", " ", " ", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from NG2R61 CG2R63 OG2D4; isg"}, {"NG2R67", "CG2R63", "SG2D1", "56.00", "123.00", " ", " ", "3PH2SR, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinone; from YTS2; isg"}, {"OG2D4", "CG2R63", "OG3R60", "20.00", "113.90", " ", " ", "RIN, coumarin, isg"}, {"CG2R61", "CG2R64", "NG2R60", "20.00", "124.00", " ", " ", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"CG2R61", "CG2R64", "NG2R62", "20.00", "128.00", " ", " ", "18NFD, 1,8-naphthyridine, erh"}, {"CG2R61", "CG2R64", "NG2S1", "40.00", "120.00", "35.00", "2.4162", "2AMP, 2-Amino pyridine, from PACP, p-acetamide-phenol, kevo"}, {"CG2R62", "CG2R64", "NG2R62", "85.00", "119.30", " ", " ", "NA C"}, {"CG2R62", "CG2R64", "NG2S3", "81.00", "118.40", " ", " ", "NA C"}, {"CG2R62", "CG2R64", "NG301", "67.00", "120.70", " ", " ", "TMC, yxu"}, {"CG2RC0", "CG2R64", "NG2R62", "60.00", "110.70", " ", " ", "NA Ade 6R)"}, {"CG2RC0", "CG2R64", "NG2S3", "50.00", "118.60", " ", " ", "NA Ade"}, {"CG2RC0", "CG2R64", "NG301", "40.00", "120.00", " ", " ", "M6A, yxu"}, {"NG2R60", "CG2R64", "NG2S1", "40.00", "120.00", "35.00", "2.4162", "2AMP, 2-Amino pyridine, from PACP, p-acetamide-phenol, cacha (verified by kevo)"}, {"NG2R61", "CG2R64", "NG2R62", "70.00", "122.20", " ", " ", "NA Gua 6R)"}, {"NG2R61", "CG2R64", "NG2S3", "95.00", "115.40", " ", " ", "NA Gua n2"}, {"NG2R61", "CG2R64", "SG311", "20.00", "121.80", " ", " ", "4O2SM, 2-(methylthio)-4(3H)-pyrimidinone; from CG2R61 CG2R61 SG311; isg"}, {"NG2R61", "CG2R64", "HGR62", "80.00", "119.00", " ", " ", "TC243C, 4(3H)-quinazolinone, isg"}, {"NG2R62", "CG2R64", "NG2R62", "60.00", "128.00", " ", " ", "NA Ade 6R) %% TEST 133.0 -> 122.2 %%"}, {"NG2R62", "CG2R64", "NG2R67", "70.00", "125.00", " ", " ", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from NG2R61 CG2R64 NG2R62; isg"}, {"NG2R62", "CG2R64", "NG2S3", "95.00", "122.40", " ", " ", "NA Gua"}, {"NG2R62", "CG2R64", "NG301", "78.00", "120.00", " ", " ", "TMC, yxu"}, {"NG2R62", "CG2R64", "SG311", "54.00", "116.00", " ", " ", "2SMPYR, 2-(methylthio)-pyrimidine; from CG2R61 CG2R61 SG311; isg"}, {"NG2R62", "CG2R64", "HGR62", "38.00", "116.00", " ", " ", "NA Ade h2 %% TEST 113.5 -> 118.9 %%"}, {"NG2R67", "CG2R64", "HGR62", "80.00", "119.00", " ", " ", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from NG2R61 CG2R64 HGR62, TC243C; isg"}, {"CG2R61", "CG2R66", "CG2R61", "40.00", "122.50", "35.00", "2.41620", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R66", "CG2R67", "40.00", "122.50", "35.00", "2.41620", "PYO2F, from CG2R61 CG2R66 CG2R61, fylin"}, {"CG2R61", "CG2R66", "FGR1", "60.00", "118.75", " ", " ", "NAMODEL difluorotoluene"}, {"CG2R67", "CG2R66", "FGR1", "60.00", "118.75", " ", " ", "PYO2F, from CG2R61 CG2R66 FGR1, fylin"}, {"CG2R61", "CG2R67", "CG2R61", "40.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R67", "CG2R66", "40.00", "120.00", " ", " ", "PYO2F, from CG2R61 CG2R67 CG2R61, fylin"}, {"CG2R61", "CG2R67", "CG2R67", "40.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R67", "CG2RC0", "50.00", "120.00", " ", " ", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2R67", "NG2R60", "58.00", "126.80", " ", " ", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R67", "NG2R67", "50.00", "120.00", " ", " ", "1PH4PO, 1-phenyl-4(1H)-pyridinone, isg"}, {"CG2R62", "CG2R67", "CG2R62", "40.00", "120.00", " ", " ", "pyo3b, from CG2R61 CG2R67 CG2R61, fylin"}, {"CG2R62", "CG2R67", "CG2R67", "40.00", "120.00", " ", " ", "pyo3b, from CG2R61 CG2R67 CG2R67, fylin"}, {"CG2R66", "CG2R67", "CG2R67", "40.00", "120.00", " ", " ", "PYO2F, from CG2R61 CG2R67 CG2R67, fylin"}, {"CG2R67", "CG2R67", "CG2RC0", "55.00", "110.00", " ", " ", "CRBZ, carbazole, erh"}, {"CG2R67", "CG2R67", "NG2R60", "44.00", "113.20", " ", " ", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R71", "CG2R71", "CG2R71", "30.00", "128.60", " ", " ", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2R71", "CG2RC7", "90.00", "129.30", " ", " ", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2R71", "HGR71", "37.00", "115.70", " ", " ", "AZUL, Azulene, kevo"}, {"CG2RC7", "CG2R71", "HGR71", "32.00", "115.00", " ", " ", "AZUL, Azulene, kevo"}, {"CG25C1", "CG2RC0", "CG2R61", "40.00", "125.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C1", "CG2RC0", "CG2RC0", "20.00", "107.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2RC0", "CG2R61", "40.00", "125.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2RC0", "CG2RC0", "20.00", "107.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R51", "CG2RC0", "CG2R61", "130.00", "132.00", " ", " ", "133.50 ! INDO/TRP"}, {"CG2R51", "CG2RC0", "CG2RC0", "85.00", "108.00", " ", " ", "INDO/TRP"}, {"CG2R51", "CG2RC0", "NG2RC0", "90.00", "109.20", " ", " ", "INDZ, indolizine, kevo"}, {"CG2R52", "CG2RC0", "CG2R61", "60.00", "134.10", " ", " ", "INDA, 1H-indazole, kevo"}, {"CG2R52", "CG2RC0", "CG2RC0", "90.00", "105.90", " ", " ", "INDA, 1H-indazole, kevo"}, {"CG2R61", "CG2RC0", "CG2R67", "50.00", "120.00", " ", " ", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2RC0", "CG2RC0", "50.00", "120.00", " ", " ", "110.00 ! INDO/TRP"}, {"CG2R61", "CG2RC0", "CG3C52", "60.00", "130.00", " ", " ", "3HIN, 3H-indole, kevo"}, {"CG2R61", "CG2RC0", "NG2R50", "130.00", "130.00", " ", " ", "ZIMI, benzimidazole, kevo"}, {"CG2R61", "CG2RC0", "NG2R51", "130.00", "132.60", " ", " ", "129.50 ! INDO/TRP"}, {"CG2R61", "CG2RC0", "NG2RC0", "80.00", "118.80", " ", " ", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2RC0", "NG3C51", "35.00", "130.70", " ", " ", "INDI, indoline, kevo"}, {"CG2R61", "CG2RC0", "OG2R50", "100.00", "129.40", " ", " ", "ZFUR, benzofuran, kevo"}, {"CG2R61", "CG2RC0", "OG3C51", "50.00", "125.30", " ", " ", "ZDOL, 1,3-benzodioxole, kevo"}, {"CG2R61", "CG2RC0", "SG2R50", "45.00", "123.70", " ", " ", "ZTHP, benzothiophene, kevo"}, {"CG2R63", "CG2RC0", "CG2RC0", "70.00", "119.60", " ", " ", "NA Gua 6R) bridgeC5"}, {"CG2R63", "CG2RC0", "NG2R50", "125.00", "129.00", " ", " ", "NA Gua bridgeC5"}, {"CG2R64", "CG2RC0", "CG2RC0", "60.00", "121.00", " ", " ", "NA Ade 6R) bridgeC5"}, {"CG2R64", "CG2RC0", "NG2R50", "100.00", "129.00", " ", " ", "NA Ade bridgeC5"}, {"CG2R67", "CG2RC0", "CG3C52", "110.00", "110.00", " ", " ", "FLRN, Fluorene, erh"}, {"CG2R67", "CG2RC0", "NG2R51", "100.00", "105.70", " ", " ", "CRBZ, carbazole, erh"}, {"CG2RC0", "CG2RC0", "CG3C52", "110.00", "110.00", " ", " ", "3HIN, 3H-indole, kevo"}, {"CG2RC0", "CG2RC0", "NG2R50", "100.00", "110.00", " ", " ", "NA Ade 5R) bridgeC5"}, {"CG2RC0", "CG2RC0", "NG2R51", "100.00", "105.70", " ", " ", "NA Ade 5R) bridgeC4"}, {"CG2RC0", "CG2RC0", "NG2R62", "60.00", "127.40", " ", " ", "NA Ade 6R) bridgeC4"}, {"CG2RC0", "CG2RC0", "NG3C51", "100.00", "109.30", " ", " ", "INDI, indoline, kevo"}, {"CG2RC0", "CG2RC0", "OG2R50", "110.00", "110.60", " ", " ", "ZFUR, benzofuran, kevo"}, {"CG2RC0", "CG2RC0", "OG3C51", "80.00", "114.70", " ", " ", "ZDOL, 1,3-benzodioxole, kevo"}, {"CG2RC0", "CG2RC0", "SG2R50", "70.00", "116.30", " ", " ", "ZTHP, benzothiophene, kevo"}, {"NG2R50", "CG2RC0", "NG2R62", "20.00", "122.60", " ", " ", "PUR7, purine(N7H), kevo"}, {"NG2R51", "CG2RC0", "NG2R62", "100.00", "126.90", " ", " ", "NA Ade bridgeC4"}, {"CG2R51", "CG2RC7", "CG2R71", "30.00", "122.70", " ", " ", "AZUL, Azulene, kevo"}, {"CG2R51", "CG2RC7", "CG2RC7", "110.00", "109.50", " ", " ", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2RC7", "CG2RC7", "30.00", "127.80", " ", " ", "AZUL, Azulene, kevo"}, {"CG2D1", "CG301", "CG311", "32.00", "112.20", " ", " ", "CHOLEST cholesterol"}, {"CG2D1", "CG301", "CG321", "32.00", "112.20", " ", " ", "CHOLEST cholesterol"}, {"CG2D1", "CG301", "CG331", "32.00", "112.20", " ", " ", "CHOLEST cholesterol"}, {"CG2DC1", "CG301", "CG321", "32.00", "112.20", " ", " ", "RETINOL MECH"}, {"CG2DC1", "CG301", "CG331", "32.00", "112.20", " ", " ", "RETINOL MECH"}, {"CG2DC2", "CG301", "CG321", "32.00", "112.20", " ", " ", "RETINOL MECH"}, {"CG2DC2", "CG301", "CG331", "32.00", "112.20", " ", " ", "RETINOL MECH"}, {"CG2O3", "CG301", "CG331", "52.00", "108.00", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG2O3", "CG301", "OG301", "45.00", "109.00", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG2O3", "CG301", "OG311", "75.70", "110.10", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG311", "CG301", "CG311", "58.35", "113.50", "11.16", "2.561", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG311", "CG301", "CG321", "58.35", "113.50", "11.16", "2.561", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG311", "CG301", "CG331", "58.35", "113.50", "11.16", "2.561", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG321", "CG301", "CG321", "58.35", "113.50", "11.16", "2.561", "CHOLEST cholesterol"}, {"CG321", "CG301", "CG331", "58.35", "113.50", "11.16", "2.561", "RETINOL TMCH/MECH"}, {"CG321", "CG301", "OG301", "45.50", "114.50", " ", " ", "DMBU, dimethoxybutane, sna"}, {"CG331", "CG301", "CG331", "58.35", "113.50", "11.16", "2.561", "RETINOL TMCH/MECH"}, {"CG331", "CG301", "OG301", "45.00", "111.50", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "OG302", "75.70", "110.10", " ", " ", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide, cacha"}, {"CG331", "CG301", "OG311", "75.70", "110.10", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "CLGA3", "97.00", "111.20", " ", " ", "TCLE"}, {"CG331", "CG301", "BRGA3", "98.00", "111.20", " ", " ", "TBRE"}, {"OG301", "CG301", "OG301", "70.49", "107.00", " ", " ", "DMOP, dimethoxypropane, sna"}, {"OG301", "CG301", "OG311", "45.00", "116.50", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CLGA3", "CG301", "CLGA3", "95.00", "109.00", " ", " ", "TCLE"}, {"BRGA3", "CG301", "BRGA3", "90.00", "110.50", " ", " ", "TBRE"}, {"CG321", "CG302", "FGA3", "42.00", "112.00", "30.00", "2.357", "TFE, trifluoroethanol"}, {"CG331", "CG302", "FGA3", "42.00", "112.00", "30.00", "2.357", "FLUROALK fluoroalkanes"}, {"FGA3", "CG302", "FGA3", "118.00", "107.00", "30.00", "2.155", "FLUROALK fluoroalkanes"}, {"CG2O1", "CG311", "CG311", "52.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG311", "CG321", "52.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG311", "CG331", "52.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG311", "NG2S1", "50.00", "107.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG311", "HGA1", "50.00", "109.50", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O2", "CG311", "CG321", "52.00", "108.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG311", "NG2R53", "50.00", "107.00", " ", " ", "drug design project, xxwy"}, {"CG2O2", "CG311", "NG2S1", "50.00", "107.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG311", "HGA1", "50.00", "109.50", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O3", "CG311", "CG2R61", "51.80", "107.50", " ", " ", "FBIF, Fatty acid Binding protein Inhibitor F, cacha"}, {"CG2O3", "CG311", "CG311", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG311", "CG321", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG311", "CG331", "52.00", "108.00", " ", " ", "PROT adm jr. 4/09/92, for ALA cter"}, {"CG2O3", "CG311", "NG2R53", "50.00", "107.00", " ", " ", "drug design project, xxwy"}, {"CG2O3", "CG311", "NG2S1", "50.00", "107.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG311", "OG301", "45.00", "109.00", " ", " ", "CC321 CC3163 OC3C61 optimize on PROA, gk (not affected by mistake)"}, {"CG2O3", "CG311", "HGA1", "50.00", "109.50", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O5", "CG311", "OG311", "112.00", "111.00", " ", " ", "BIPHENYL ANALOGS unmodified, peml ! reset by kevo to value from CG2O5 CG311 OG312 ==> RE-OPTIMIZE !!!"}, {"CG2O5", "CG311", "OG312", "130.00", "111.00", " ", " ", "BIPHENYL ANALOGS unmodified, peml"}, {"CG2O5", "CG311", "HGA1", "50.00", "109.50", " ", " ", "BIPHENYL ANALOGS from PROT Alanine Dipeptide ab initio calc's (LK) consistent with adm 11/08"}, {"CG2R61", "CG311", "CG321", "51.80", "107.50", " ", " ", "Slack parameter from difluorotoluene picked up by FBIC ==> RE-OPTIMIZE !!!"}, {"CG2R61", "CG311", "CG331", "51.80", "107.50", " ", " ", "FBIB, Fatty Binding Inhibitior B, cacha"}, {"CG2R61", "CG311", "HGA1", "43.00", "111.00", " ", " ", "NAMODEL difluorotoluene"}, {"CG301", "CG311", "CG311", "52.00", "108.00", " ", " ", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG301", "CG311", "CG321", "58.35", "113.50", "11.16", "2.561", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG301", "CG311", "HGA1", "34.60", "110.10", "22.53", "2.179", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG311", "CG311", "CG311", "53.35", "111.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG311", "CG321", "53.35", "111.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG311", "CG331", "53.35", "108.50", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG311", "CG3RC1", "53.35", "103.70", "8.00", "2.561", "CARBOCY carbocyclic sugars"}, {"CG311", "CG311", "NG2S1", "70.00", "113.50", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG311", "CG311", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG311", "CG311", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG311", "CG321", "53.35", "111.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG311", "CG331", "53.35", "108.50", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG311", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG321", "58.35", "113.50", "11.16", "2.561", "LIPID glycerol"}, {"CG321", "CG311", "CG324", "58.35", "110.50", "11.16", "2.56100", "FLAVOP PIP1,2,3"}, {"CG321", "CG311", "CG331", "53.35", "114.00", "8.00", "2.561", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG3C51", "53.35", "111.00", "8.00", "2.561", "CA, Cholic acid, cacha, 02/08"}, {"CG321", "CG311", "CG3RC1", "53.35", "103.70", "8.00", "2.561", "CARBOCY carbocyclic sugars"}, {"CG321", "CG311", "NG2R53", "70.00", "113.50", " ", " ", "drug design project, xxwy"}, {"CG321", "CG311", "NG2S1", "70.00", "113.50", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG321", "CG311", "OG302", "115.00", "109.70", " ", " ", "NA"}, {"CG321", "CG311", "OG311", "75.70", "110.00", " ", " ", "NA"}, {"CG321", "CG311", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG324", "CG311", "NG2S1", "70.00", "113.50", " ", " ", "G3P(R/S), 01OH04"}, {"CG324", "CG311", "OG311", "75.70", "112.10", " ", " ", "FLAVOP PIP1,2,3"}, {"CG324", "CG311", "HGA1", "26.50", "111.80", "22.53", "2.17900", "FLAVOP PIP1,2,3"}, {"CG331", "CG311", "CG331", "53.35", "114.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG3C51", "53.35", "108.50", "8.00", "2.561", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG311", "NG2S1", "70.00", "113.50", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG331", "CG311", "OG301", "45.00", "111.50", " ", " ", "all34_ethers_1a OC30A CC32A CC33A, gk or og (not affected by mistake)"}, {"CG331", "CG311", "OG302", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG331", "CG311", "OG303", "115.00", "109.70", " ", " ", "PROTNA Ser-Phos"}, {"CG331", "CG311", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG331", "CG311", "CLGA1", "88.00", "111.20", " ", " ", "DCLE"}, {"CG331", "CG311", "BRGA2", "75.00", "111.00", " ", " ", "DBRE"}, {"CG331", "CG311", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG311", "HGA1", "34.60", "110.10", "22.53", "2.179", "TF2M viv"}, {"CG3RC1", "CG311", "OG311", "75.70", "110.10", " ", " ", "CARBOCY ncarbocyclic sugars"}, {"CG3RC1", "CG311", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"NG2R53", "CG311", "HGA1", "48.00", "108.00", " ", " ", "drug design project, xxwy"}, {"NG2S1", "CG311", "HGA1", "48.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"OG301", "CG311", "HGA1", "60.00", "109.50", " ", " ", "all34_ethers_1a HCA2 CC32A OC30A, gk or og (not affected by mistake)"}, {"OG302", "CG311", "HGA1", "60.00", "109.50", " ", " ", "PROTNA Ser-Phos"}, {"OG303", "CG311", "HGA1", "60.00", "109.50", " ", " ", "PROTNA Ser-Phos"}, {"OG311", "CG311", "OG312", "111.90", "111.00", "100.00", "2.35000", "BIPHENYL ANALOGS, peml"}, {"OG311", "CG311", "HGA1", "45.90", "108.89", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"OG312", "CG311", "HGA1", "65.90", "117.80", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CLGA1", "CG311", "CLGA1", "95.00", "109.00", " ", " ", "DCLE"}, {"CLGA1", "CG311", "HGA1", "44.00", "108.50", " ", " ", "DCLE"}, {"BRGA2", "CG311", "BRGA2", "95.00", "110.00", " ", " ", "DBRE"}, {"BRGA2", "CG311", "HGA1", "36.00", "107.00", " ", " ", "DBRE"}, {"CG2R61", "CG312", "PG1", "90.00", "117.00", "20.0", "2.30", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"CG2R61", "CG312", "PG2", "90.00", "117.00", "20.0", "2.30", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"CG2R61", "CG312", "FGA2", "50.00", "115.00", "30.0", "2.357", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG331", "CG312", "FGA2", "50.00", "112.00", "30.00", "2.357", "FLUROALK fluoroalkanes"}, {"CG331", "CG312", "HGA7", "32.00", "112.00", "3.00", "2.168", "FLUROALK fluoroalkanes"}, {"PG1", "CG312", "FGA2", "50.00", "122.00", "30.0", "2.357", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"PG2", "CG312", "FGA2", "50.00", "122.00", "30.0", "2.357", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"FGA2", "CG312", "FGA2", "150.00", "107.00", "10.00", "2.170", "FLUROALK fluoroalkanes"}, {"FGA2", "CG312", "HGA7", "41.90", "108.89", "5.00", "1.980", "FLUROALK fluoroalkanes"}, {"CG2O1", "CG314", "CG311", "52.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG314", "CG321", "52.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG314", "CG331", "52.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG314", "NG3P3", "43.70", "110.00", " ", " ", "PROT new aliphatics, adm jr., 2/3/92"}, {"CG2O1", "CG314", "HGA1", "50.00", "109.50", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O3", "CG314", "CG311", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG314", "CG321", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG314", "CG331", "52.00", "108.00", " ", " ", "PROT adm jr. 4/09/92, for ALA cter"}, {"CG2O3", "CG314", "NG3P3", "43.70", "110.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG314", "HGA1", "50.00", "109.50", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG311", "CG314", "NG3P3", "67.70", "110.00", " ", " ", "PROT new aliphatics, adm jr., 2/3/92"}, {"CG311", "CG314", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG314", "CG321", "58.35", "113.50", "11.16", "2.561", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha"}, {"CG321", "CG314", "NG3P2", "40.00", "110.00", " ", " ", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha"}, {"CG321", "CG314", "NG3P3", "67.70", "110.00", " ", " ", "PROT new aliphatics, adm jr., 2/3/92"}, {"CG321", "CG314", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG314", "NG3P3", "67.70", "110.00", " ", " ", "PROT new aliphatics, adm jr., 2/3/92"}, {"CG331", "CG314", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P2", "CG314", "HGA1", "45.00", "102.30", "35.00", "2.10100", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha"}, {"NG3P3", "CG314", "HGA1", "51.50", "107.50", " ", " ", "PROT new aliphatics, adm jr., 2/3/92"}, {"CG2D1", "CG321", "CG2D1", "30.00", "114.00", " ", " ", "LIPID 1,4-dipentene, adm jr., 2/00"}, {"CG2D1", "CG321", "CG2DC1", "125.00", "108.00", " ", " ", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95 ! force constant is unlikely high"}, {"CG2D1", "CG321", "CG2DC2", "125.00", "108.00", " ", " ", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95 ! force constant is unlikely high"}, {"CG2D1", "CG321", "CG311", "32.00", "112.20", " ", " ", "CHOLEST cholesterol"}, {"CG2D1", "CG321", "CG321", "32.00", "112.20", " ", " ", "LIPID 1-butene; propene, yin,adm jr., 12/95"}, {"CG2D1", "CG321", "CG331", "32.00", "112.20", " ", " ", "LIPID 1-butene; propene, yin,adm jr., 12/95"}, {"CG2D1", "CG321", "OG311", "75.70", "110.10", " ", " ", "RETINOL PROL"}, {"CG2D1", "CG321", "HGA2", "45.00", "111.50", " ", " ", "LIPID 1-butene; propene, yin,adm jr., 12/95"}, {"CG2DC1", "CG321", "CG321", "32.00", "112.20", " ", " ", "RETINOL MECH"}, {"CG2DC1", "CG321", "OG311", "75.70", "110.10", " ", " ", "RETINOL PROL"}, {"CG2DC1", "CG321", "OG3R60", "20.00", "99.00", " ", " ", "PY02, 2h-pyran"}, {"CG2DC1", "CG321", "HGA2", "45.00", "111.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2DC2", "CG321", "CG321", "32.00", "112.20", " ", " ", "RETINOL MECH"}, {"CG2DC2", "CG321", "OG311", "75.70", "110.10", " ", " ", "RETINOL PROL"}, {"CG2DC2", "CG321", "OG3R60", "20.00", "99.00", " ", " ", "PY02, 2h-pyran"}, {"CG2DC2", "CG321", "HGA2", "45.00", "111.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2O1", "CG321", "CG311", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O1", "CG321", "CG314", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O1", "CG321", "CG321", "52.00", "108.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O1", "CG321", "CG331", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O1", "CG321", "NG2S1", "50.00", "107.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG321", "HGA2", "33.00", "109.50", "30.00", "2.16300", "PROT alanine dipeptide, 5/09/91"}, {"CG2O2", "CG321", "CG311", "52.00", "108.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG321", "CG314", "52.00", "108.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG321", "CG321", "52.00", "108.00", " ", " ", "LIPID alkane"}, {"CG2O2", "CG321", "CG331", "52.00", "108.00", " ", " ", "LIPID alkane"}, {"CG2O2", "CG321", "NG2S1", "50.00", "107.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG321", "NG321", "43.70", "110.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG321", "HGA2", "33.00", "109.50", "30.00", "2.16300", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O3", "CG321", "CG311", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "CG314", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "CG321", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "CG331", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "NG2S1", "50.00", "107.00", " ", " ", "PROT adm jr. 5/20/92, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "HGA1", "50.00", "109.50", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "HGA2", "33.00", "109.50", "30.00", "2.16300", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O4", "CG321", "CG331", "60.00", "113.80", " ", " ", "ALDEHYDE propionaldehyde unmodified"}, {"CG2O4", "CG321", "CLGA1", "65.00", "111.82", " ", " ", "ALDEHYDE chloroacetaldehyde unmodified"}, {"CG2O4", "CG321", "HGA2", "33.00", "109.50", "30.00", "2.16300", "PALD, propionaldehyde from PROT adm jr. 5/02/91, acetic acid pure solvent. Consistent with adm 11/08"}, {"CG2O5", "CG321", "CG321", "60.00", "113.80", " ", " ", "CHON, cyclohexanone; from PALD, propionaldehyde; yapol"}, {"CG2O5", "CG321", "CG331", "60.00", "111.50", " ", " ", "PHEK, phenyl ethyl ketone; from BTON, butanone; mcs"}, {"CG2O5", "CG321", "HGA2", "50.00", "109.50", " ", " ", "BTON, butanone; from ACO, acetone; yapol"}, {"CG2R51", "CG321", "CG311", "58.35", "114.00", " ", " ", "INDO/TRP"}, {"CG2R51", "CG321", "CG314", "58.35", "114.00", " ", " ", "PROT N-terminal AA - standard parameter collided with INDO/TRP"}, {"CG2R51", "CG321", "CG331", "58.35", "114.00", " ", " ", "INDO/TRP"}, {"CG2R51", "CG321", "HGA2", "55.00", "109.50", " ", " ", "INDO/TRP"}, {"CG2R61", "CG321", "CG2R61", "51.80", "107.50", " ", " ", "PYRIDINE pyr_CH2C6H5, yin"}, {"CG2R61", "CG321", "CG311", "51.80", "107.50", " ", " ", "PROT PARALLH19 (JES)"}, {"CG2R61", "CG321", "CG314", "51.80", "107.50", " ", " ", "PROT PARALLH19 (JES)"}, {"CG2R61", "CG321", "CG321", "51.80", "107.50", " ", " ", "PYRIDINE butylpyridine, yin"}, {"CG2R61", "CG321", "CG331", "51.80", "107.50", " ", " ", "PROT ethylbenzene, adm jr., 3/7/92"}, {"CG2R61", "CG321", "NG2S1", "53.00", "115.20", " ", " ", "NZAD, N-benzylacetamide; from CG2O2 CG321 NG2S1; isg"}, {"CG2R61", "CG321", "OG302", "75.70", "110.10", " ", " ", "ABGA, Alpha Benzyl Glu Acid CDCA Amide, corrected by kevo"}, {"CG2R61", "CG321", "OG311", "75.70", "110.10", " ", " ", "toppar_all22_prot_pyridines.str has 115.1 but that appears to be a copy-paste error! - kevo"}, {"CG2R61", "CG321", "PG1", "90.00", "111.00", "20.0", "2.300", "BDFP, Benzylphosphonate re-optimize?"}, {"CG2R61", "CG321", "PG2", "90.00", "111.00", "20.0", "2.300", "BDFD, Benzylphosphonate / re-optimize?"}, {"CG2R61", "CG321", "HGA2", "49.30", "107.50", " ", " ", "PYRIDINE pyridines, yin"}, {"CG301", "CG321", "CG321", "58.35", "113.50", "11.16", "2.561", "RETINOL TMCH/MECH"}, {"CG301", "CG321", "CG331", "65.35", "113.50", " ", " ", "DMBU, dimethoxybutane, sna"}, {"CG301", "CG321", "HGA2", "26.50", "110.10", "22.53", "2.179", "RETINOL TMCH/MECH"}, {"CG302", "CG321", "OG311", "75.70", "110.10", " ", " ", "TFE, triflouroethanol"}, {"CG302", "CG321", "HGA2", "34.60", "110.10", "22.53", "2.179", "TFE, trifluoroethanol"}, {"CG311", "CG321", "CG311", "58.35", "113.50", "11.16", "2.56100", "PROT alkanes"}, {"CG311", "CG321", "CG314", "58.35", "113.50", "11.16", "2.56100", "PROT alkanes"}, {"CG311", "CG321", "CG321", "58.35", "113.50", "11.16", "2.56100", "PROT alkanes"}, {"CG311", "CG321", "CG324", "58.35", "110.50", "11.16", "2.56100", "FLAVOP PIP1,2,3"}, {"CG311", "CG321", "CG331", "58.35", "113.50", "11.16", "2.56100", "PROT alkanes"}, {"CG311", "CG321", "NG2S1", "70.00", "113.50", " ", " ", "G3P(R/S), 01OH04, cacha from CG311 CG311 NG2S1 ==> non-ideal analogy ==> re-optimize???"}, {"CG311", "CG321", "OG302", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG311", "CG321", "OG303", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG311", "CG321", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG311", "CG321", "SG311", "58.00", "112.50", " ", " ", "PROT as in expt.MeEtS and DALC crystal, 5/15/92"}, {"CG311", "CG321", "HGA2", "33.43", "110.10", "22.53", "2.17900", "PROT alkanes"}, {"CG314", "CG321", "CG321", "58.35", "113.50", "11.16", "2.56100", "PROT alkanes"}, {"CG314", "CG321", "NG2S1", "70.00", "113.50", " ", " ", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha from CG311 CG311 NG2S1 ==> non-ideal analogy ==> re-optimize???"}, {"CG314", "CG321", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG314", "CG321", "SG311", "58.00", "112.50", " ", " ", "PROT as in expt.MeEtS and DALC crystal, 5/15/92"}, {"CG314", "CG321", "HGA2", "33.43", "110.10", "22.53", "2.17900", "PROT alkanes"}, {"CG321", "CG321", "CG321", "58.35", "113.60", "11.16", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG324", "58.35", "110.50", "11.16", "2.56100", "FLAVOP PIP1,2,3"}, {"CG321", "CG321", "CG331", "58.00", "115.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG3RC1", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG321", "CG321", "NG2D1", "103.00", "112.00", " ", " ", "EEPI, from CG321 CG321 NG2S1, fylin"}, {"CG321", "CG321", "NG2S1", "70.00", "113.50", " ", " ", "slack parameter picked up by 3CPD ==> re-optimize?"}, {"CG321", "CG321", "NG311", "43.70", "110.00", " ", " ", "K2Cn, cgenff_compromise, kevo"}, {"CG321", "CG321", "OG301", "45.00", "111.50", " ", " ", "diethylether, alex"}, {"CG321", "CG321", "OG302", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG321", "CG321", "OG303", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG321", "CG321", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG321", "CG321", "OG3C61", "45.00", "111.50", " ", " ", "DIOX, dioxane"}, {"CG321", "CG321", "SG311", "58.00", "114.50", " ", " ", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG321", "CG321", "SG3O1", "43.00", "105.50", " ", " ", "PSNA, propyl sulfonate, xhe"}, {"CG321", "CG321", "HGA2", "26.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG324", "CG321", "CG331", "58.35", "110.50", "11.16", "2.56100", "NIPR, nitropropane, abar"}, {"CG324", "CG321", "OG302", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG324", "CG321", "OG303", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG324", "CG321", "OG311", "75.70", "112.10", " ", " ", "FLAVOP PIP1,2,3"}, {"CG324", "CG321", "OG3C61", "50.00", "106.50", " ", " ", "MORP, morpholine"}, {"CG324", "CG321", "SG311", "70.00", "110.00", " ", " ", "TMOR, thiomorpholine"}, {"CG324", "CG321", "HGA2", "26.50", "110.10", "22.53", "2.17900", "FLAVOP PIP1,2,3"}, {"CG331", "CG321", "CG331", "53.35", "114.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG321", "CG3C31", "53.35", "111.00", " ", " ", "1BOX, 1-butene oxide, sc"}, {"CG331", "CG321", "NG2D1", "62.00", "114.00", " ", " ", "EICY, ethyl isocyanate, xxwy"}, {"CG331", "CG321", "NG2R51", "70.00", "120.00", " ", " ", "ETRZ, 1-Ethyl-1,2,3-triazole, from CG331 CG321 NG2S1, kevo"}, {"CG331", "CG321", "NG2S1", "70.00", "120.00", " ", " ", "DECB, diethyl carbamate, cacha and xxwy ! 120, really??? DBLCHECK WITH WENBO!!!"}, {"CG331", "CG321", "NG2S3", "27.30", "109.70", " ", " ", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG311", "43.70", "112.20", " ", " ", "PEI polymers, kevo"}, {"CG331", "CG321", "OG301", "45.00", "111.50", " ", " ", "diethylether, alex"}, {"CG331", "CG321", "OG302", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG331", "CG321", "OG303", "70.00", "108.40", " ", " ", "PROTNA Thr-Phos"}, {"CG331", "CG321", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG331", "CG321", "OG312", "65.00", "122.00", " ", " ", "PROT ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CG331", "CG321", "SG301", "58.00", "112.50", " ", " ", "PROT as in expt.MeEtS and DALC crystal, 5/15/92"}, {"CG331", "CG321", "SG311", "58.00", "114.50", " ", " ", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG331", "CG321", "SG3O1", "50.00", "105.50", " ", " ", "ESNA, ethyl sulfonate, xhe"}, {"CG331", "CG321", "SG3O2", "45.00", "105.00", " ", " ", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"CG331", "CG321", "SG3O3", "45.00", "105.00", " ", " ", "MESO, methylethylsulfoxide, mnoon"}, {"CG331", "CG321", "CLGA1", "71.00", "112.20", " ", " ", "CLET"}, {"CG331", "CG321", "BRGA1", "71.00", "111.00", " ", " ", "BRET"}, {"CG331", "CG321", "HGA2", "34.60", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C31", "CG321", "HGA2", "42.00", "109.00", " ", " ", "1BOX, 1-butene oxide, sc"}, {"CG3C51", "CG321", "OG301", "75.70", "110.10", " ", " ", "3POMP, 3-phenoxymethylpyrrolidine; standard parameter; kevo"}, {"CG3C51", "CG321", "OG303", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG3C51", "CG321", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG3C51", "CG321", "SG311", "58.00", "112.50", " ", " ", "PROT as in expt.MeEtS and DALC crystal, 5/15/92"}, {"CG3C51", "CG321", "HGA2", "34.60", "110.10", "22.53", "2.179", "TF2M viv"}, {"CG3RC1", "CG321", "OG303", "75.70", "110.10", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG321", "HGA2", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"NG2D1", "CG321", "HGA2", "45.00", "107.50", " ", " ", "EEPI, from NG2D1 CG331 HGA3, fylin"}, {"NG2R51", "CG321", "HGA2", "33.43", "110.10", " ", " ", "ETRZ, 1-Ethyl-1,2,3-triazole, from NG2R51 CG331 HGA3, kevo"}, {"NG2S1", "CG321", "HGA2", "51.50", "109.50", " ", " ", "PROT from NG2S1 CG331 HA, for lactams, adm jr."}, {"NG2S3", "CG321", "HGA2", "38.30", "105.20", " ", " ", "NESM, N-ethyl-sulfamate, my and kevo"}, {"NG311", "CG321", "NG311", "90.00", "113.00", " ", " ", "OBTZ, 1,1-dioxo-3,4-dihydro-2H-1,2,4-benzothiadiazine, xxwy"}, {"NG311", "CG321", "HGA2", "32.40", "109.50", "50.00", "2.1300", "PEI polymers, kevo"}, {"NG321", "CG321", "HGA2", "32.40", "109.50", "50.00", "2.1400", "AMINE aliphatic amines"}, {"OG301", "CG321", "HGA2", "45.90", "108.89", " ", " ", "ETOB, Ethoxybenzene, cacha"}, {"OG302", "CG321", "HGA2", "60.00", "109.50", " ", " ", "PROT adm jr. 4/05/91, methyl acetate"}, {"OG303", "CG321", "HGA2", "60.00", "109.50", " ", " ", "PROTNA Thr-Phos"}, {"OG311", "CG321", "HGA2", "45.90", "108.89", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"OG312", "CG321", "HGA2", "65.00", "118.30", " ", " ", "PROT ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OG3C61", "CG321", "OG3C61", "45.00", "110.50", " ", " ", "DIXB, dioxane"}, {"OG3C61", "CG321", "HGA2", "45.00", "109.50", " ", " ", "DIOX, dioxane"}, {"OG3R60", "CG321", "HGA2", "55.00", "111.50", " ", " ", "PY02, 2h-pyran"}, {"PG1", "CG321", "HGA2", "90.00", "110.00", "5.40", "1.802", "BDFP, Benzylphosphonate re-optimize?"}, {"PG2", "CG321", "HGA2", "90.00", "110.00", "5.40", "1.802", "BDFD, Benzylphosphonate / re-optimize?"}, {"SG301", "CG321", "HGA2", "38.00", "111.00", " ", " ", "PROT new S-S atom type 8/24/90"}, {"SG311", "CG321", "SG311", "100.00", "117.00", " ", " ", "THIT, trithiazine"}, {"SG311", "CG321", "HGA2", "46.10", "111.30", " ", " ", "PROT vib. freq. and HF/geo. (DTN) 8/24/90"}, {"SG3O1", "CG321", "HGA2", "49.00", "109.00", " ", " ", "ESNA, ethyl sulfonate, xhe"}, {"SG3O2", "CG321", "HGA2", "45.00", "107.00", " ", " ", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"SG3O3", "CG321", "HGA2", "45.00", "107.00", " ", " ", "MESO, methylethylsulfoxide, mnoon"}, {"CLGA1", "CG321", "HGA2", "42.00", "107.00", " ", " ", "CLET, chloroethane"}, {"BRGA1", "CG321", "HGA2", "36.00", "106.00", " ", " ", "BRET"}, {"HGA2", "CG321", "HGA2", "35.50", "109.00", "5.40", "1.802", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG322", "FGA1", "44.00", "112.00", "30.00", "2.369", "FLUROALK fluoroalkanes"}, {"CG331", "CG322", "HGA6", "31.00", "112.00", "3.00", "2.168", "FLUROALK fluoroalkanes"}, {"FGA1", "CG322", "HGA6", "57.50", "108.89", "5.00", "1.997", "FLUROALK fluoroalkanes"}, {"HGA6", "CG322", "HGA6", "35.50", "108.40", "10.40", "1.746", "FLUROALK fluoroalkanes"}, {"CG331", "CG323", "SG302", "55.00", "118.00", " ", " ", "PROT ethylthiolate, adm jr., 6/1/92"}, {"CG331", "CG323", "HGA2", "34.60", "110.10", "22.53", "2.17900", "PROT ethylthiolate, adm jr., 6/1/92"}, {"SG302", "CG323", "HGA2", "40.00", "112.30", " ", " ", "PROT methylthiolate, adm jr., 6/1/92"}, {"SG302", "CG323", "HGA3", "40.00", "112.30", " ", " ", "PROT methylthiolate, adm jr., 6/1/92"}, {"HGA2", "CG323", "HGA2", "35.50", "108.40", "14.00", "1.77500", "PROT methylthiolate, adm jr., 6/1/92"}, {"HGA3", "CG323", "HGA3", "35.50", "108.40", "14.00", "1.77500", "PROT methylthiolate, adm jr., 6/1/92"}, {"CG2O1", "CG324", "NG3P3", "43.70", "110.00", " ", " ", "PROT alanine (JCS)"}, {"CG2O1", "CG324", "HGA2", "33.00", "109.50", "30.00", "2.16300", "PROT alanine dipeptide, 5/09/91"}, {"CG2O3", "CG324", "NG3P3", "43.70", "110.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG324", "HGA2", "33.00", "109.50", "30.00", "2.16300", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2R61", "CG324", "NG3P1", "45.00", "102.30", "35.00", "2.10100", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG324", "HGA2", "49.30", "107.50", " ", " ", "BPIP, N-Benzyl PIP, cacha"}, {"CG311", "CG324", "NG3P1", "100.00", "110.00", " ", " ", "FLAVOP PIP1,2,3"}, {"CG311", "CG324", "NG3P2", "40.00", "110.00", " ", " ", "G3P(R/S), 01OH04"}, {"CG311", "CG324", "HGA2", "26.50", "111.80", "22.53", "2.17900", "FLAVOP PIP1,2,3"}, {"CG321", "CG324", "NG2O1", "56.80", "109.00", " ", " ", "NIPR, nitropropane, abar"}, {"CG321", "CG324", "NG2P1", "67.70", "110.00", " ", " ", "RETINOL SCK1, protonated Schiff's base #eq#"}, {"CG321", "CG324", "NG3P0", "67.70", "115.00", " ", " ", "LIPID tetramethylammonium"}, {"CG321", "CG324", "NG3P1", "100.00", "110.00", " ", " ", "FLAVOP PIP1,2,3"}, {"CG321", "CG324", "NG3P2", "40.00", "110.00", " ", " ", "PIP, piperidine"}, {"CG321", "CG324", "NG3P3", "67.70", "110.00", " ", " ", "LIPID ethanolamine"}, {"CG321", "CG324", "HGA2", "26.50", "111.80", "22.53", "2.17900", "FLAVOP PIP1,2,3"}, {"CG321", "CG324", "HGP5", "33.43", "110.10", "22.53", "2.17900", "LIPID alkane"}, {"CG331", "CG324", "NG3P0", "67.70", "115.00", " ", " ", "LIPID tetramethylammonium"}, {"CG331", "CG324", "NG3P3", "67.70", "110.00", " ", " ", "PROT new aliphatics, adm jr., 2/3/92"}, {"CG331", "CG324", "HGA2", "34.60", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG324", "HGP5", "33.43", "110.10", "22.53", "2.17900", "LIPID alkane"}, {"CG3C31", "CG324", "NG3P3", "67.70", "110.00", " ", " ", "AMCP, aminomethyl cyclopropane; from PROT new aliphatics, adm jr., 2/3/92m; jhs"}, {"CG3C31", "CG324", "HGA2", "34.60", "110.10", " ", " ", "AMCP, aminomethyl cyclopropane; from PROT alkane update, adm jr., 3/2/92; jhs, UB term deleted"}, {"NG2O1", "CG324", "HGA2", "60.00", "106.30", " ", " ", "NIPR, nitropropane, abar"}, {"NG2P1", "CG324", "HGA2", "42.00", "110.10", " ", " ", "RETINOL SCK1, deprotonated Schiff's base #eq#"}, {"NG3P0", "CG324", "HGP5", "40.00", "109.50", "27.00", "2.130", "LIPID tetramethylammonium"}, {"NG3P1", "CG324", "HGA2", "45.00", "102.30", "35.00", "2.10100", "FLAVOP PIP1,2,3"}, {"NG3P2", "CG324", "HGA2", "45.00", "102.30", "35.00", "2.10100", "PIP, piperidine"}, {"NG3P3", "CG324", "HGA2", "45.00", "107.50", "35.00", "2.101", "NA methylammonium"}, {"HGA2", "CG324", "HGA2", "35.50", "109.00", "5.40", "1.80200", "PIP1,2,3"}, {"HGP5", "CG324", "HGP5", "24.00", "109.50", "28.00", "1.767", "LIPID tetramethylammonium"}, {"CG1N1", "CG331", "HGA3", "50.00", "110.50", " ", " ", "ACN, acetonitrile, kevo"}, {"CG1T1", "CG331", "HGA3", "47.00", "111.50", " ", " ", "2BTY, 2-butyne, kevo"}, {"CG2D1", "CG331", "HGA3", "42.00", "111.50", " ", " ", "LIPID 2-butene, yin,adm jr., 12/95"}, {"CG2DC1", "CG331", "HGA3", "42.00", "111.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2DC2", "CG331", "HGA3", "42.00", "111.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2N2", "CG331", "HGA3", "33.00", "109.50", "30.00", "2.13000", "AMDN, amidinium, mp2 geom, pram"}, {"CG2O1", "CG331", "HGA3", "33.00", "109.50", "30.00", "2.16300", "PROT alanine dipeptide, 5/09/91"}, {"CG2O2", "CG331", "HGA3", "33.00", "109.50", "30.00", "2.16300", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O3", "CG331", "HGA3", "33.00", "109.50", "30.00", "2.16300", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O4", "CG331", "HGA3", "33.00", "109.50", "30.00", "2.16300", "AALD, acetaldehyde from PROT adm jr. 5/02/91, acetic acid pure solvent consistent with adm 11/08"}, {"CG2O5", "CG331", "HGA3", "50.00", "109.50", " ", " ", "methylketones 3ACP, ACO; from PROT Alanine Dipeptide ab initio calc's (LK) consistent with adm 11/08"}, {"CG2R51", "CG331", "HGA3", "55.00", "109.50", " ", " ", "INDO/TRP"}, {"CG2R61", "CG331", "HGA3", "49.30", "107.50", " ", " ", "PROT toluene, adm jr. 3/7/92"}, {"CG2R62", "CG331", "HGA3", "33.43", "110.10", "22.53", "2.17900", "NA Alkanes, sacred"}, {"CG301", "CG331", "HGA3", "33.43", "110.10", "22.53", "2.17900", "RETINOL TMCH/MECH"}, {"CG302", "CG331", "HGA3", "33.00", "110.50", "39.00", "2.15500", "FLUROALK fluoroalkanes"}, {"CG311", "CG331", "HGA3", "33.43", "110.10", "22.53", "2.17900", "PROT alkanes"}, {"CG312", "CG331", "HGA3", "33.00", "110.50", "37.00", "2.16800", "FLUROALK fluoroalkanes"}, {"CG314", "CG331", "HGA3", "33.43", "110.10", "22.53", "2.17900", "PROT alkanes"}, {"CG321", "CG331", "HGA3", "34.60", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG322", "CG331", "HGA3", "33.00", "110.50", "38.00", "2.18100", "FLUROALK fluoroalkanes"}, {"CG323", "CG331", "HGA3", "34.60", "110.10", "22.53", "2.17900", "PROT ethylthiolate, adm jr., 6/1/92"}, {"CG324", "CG331", "HGA3", "34.60", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG331", "HGA3", "37.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG331", "HGA3", "34.60", "110.10", "22.53", "2.179", "TF2M viv"}, {"CG3RC1", "CG331", "HGA3", "33.43", "110.10", "22.53", "2.179", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"NG2D1", "CG331", "HGA3", "42.00", "113.50", " ", " ", "RETINOL SCH1, Schiff's base, deprotonated"}, {"NG2R51", "CG331", "HGA3", "33.43", "110.10", " ", " ", "NA FOR 9-M-G(C), adm jr."}, {"NG2R61", "CG331", "HGA3", "33.43", "110.10", "22.53", "2.179", "1MTH, 1-Methyl-Thymine, kevo for gsk/ibm"}, {"NG2S0", "CG331", "HGA3", "50.00", "105.00", " ", " ", "DMF, Dimethylformamide, xxwy"}, {"NG2S1", "CG331", "HGA3", "51.50", "109.50", " ", " ", "PROT NMA crystal (JCS)"}, {"NG2S3", "CG331", "HGA3", "51.50", "107.50", " ", " ", "Was introduced for 'PROT methylguanidiniumi (MGU1, MGU2)', then (questionably) transferred to 'Phosphoramidate (PHA)'. In 2008, the atom types were split ==> RE-OPTIMIZE!!!"}, {"NG301", "CG331", "HGA3", "30.50", "109.70", "50.00", "2.1400", "TMC, from NG311 CG331 HGA3, yxu"}, {"NG311", "CG331", "HGA3", "30.50", "109.70", "50.00", "2.1400", "MGU2, methylguanidine2"}, {"OG301", "CG331", "HGA3", "45.90", "108.89", " ", " ", "MEOB, Methoxybenzene, cacha"}, {"OG302", "CG331", "HGA3", "60.00", "109.50", " ", " ", "PROT adm jr. 4/05/91, methyl acetate"}, {"OG303", "CG331", "HGA3", "60.00", "109.50", " ", " ", "NA DMP, ADM Jr."}, {"OG311", "CG331", "HGA3", "45.90", "108.89", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"OG312", "CG331", "HGA3", "65.00", "118.30", " ", " ", "PROT methoxide, adm jr., 6/1/92"}, {"SG301", "CG331", "HGA3", "38.00", "111.00", " ", " ", "PROT new S-S atom type 8/24/90"}, {"SG311", "CG331", "HGA3", "46.10", "111.30", " ", " ", "PROT vib. freq. and HF/geo. (DTN) 8/24/90"}, {"SG3O1", "CG331", "HGA3", "42.00", "110.60", " ", " ", "MSNA, methyl sulfonate, xhe"}, {"SG3O2", "CG331", "HGA3", "45.00", "108.50", " ", " ", "DMSN, dimethyl sulfone; MSAM, methanesulfonamide and other sulfonamides; xxwy and xhe"}, {"SG3O3", "CG331", "HGA3", "46.10", "111.30", " ", " ", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"HGA3", "CG331", "HGA3", "35.50", "108.40", "5.40", "1.80200", "PROT alkane update, adm jr., 3/2/92"}, {"NG2O1", "CG334", "HGA3", "47.80", "108.00", " ", " ", "NIME, nitromethane, abar"}, {"NG2P1", "CG334", "HGA3", "42.00", "110.10", " ", " ", "RETINOL SCH2, Schiff's base, protonated #eq#"}, {"NG3P0", "CG334", "HGP5", "40.00", "109.50", "27.00", "2.13000", "LIPID tetramethylammonium"}, {"NG3P1", "CG334", "HGA3", "45.00", "102.30", "35.00", "2.10100", "FLAVOP PIP1,2,3"}, {"NG3P3", "CG334", "HGA3", "45.00", "107.50", "35.00", "2.10100", "PROT methylammonium (KK 03/10/92)"}, {"HGA3", "CG334", "HGA3", "35.50", "108.40", "5.40", "1.80200", "PROT alkane update, adm jr., 3/2/92"}, {"HGP5", "CG334", "HGP5", "24.00", "109.50", "28.00", "1.76700", "LIPID tetramethylammonium"}, {"NG301", "CG3AM0", "HGAAM0", "35.00", "109.50", "50.00", "2.1400", "AMINE aliphatic amines"}, {"HGAAM0", "CG3AM0", "HGAAM0", "35.50", "108.40", "5.40", "1.8020", "AMINE aliphatic amines"}, {"NG311", "CG3AM1", "HGAAM1", "30.50", "109.70", "50.00", "2.1400", "AMINE aliphatic amines"}, {"HGAAM1", "CG3AM1", "HGAAM1", "35.80", "109.00", "5.40", "1.8020", "AMINE aliphatic amines"}, {"NG321", "CG3AM2", "HGAAM2", "32.40", "109.50", "50.00", "2.1400", "AMINE aliphatic amines"}, {"HGAAM2", "CG3AM2", "HGAAM2", "35.00", "109.47", "5.40", "1.8020", "AMINE aliphatic amines"}, {"CG321", "CG3C31", "CG3C31", "67.35", "116.70", " ", " ", "1BOX, 1-butene oxide, sc"}, {"CG321", "CG3C31", "OG3C31", "60.35", "115.50", " ", " ", "1BOX, 1-butene oxide, sc"}, {"CG321", "CG3C31", "HGA1", "30.00", "115.40", " ", " ", "1BOX, 1-butene oxide, sc"}, {"CG324", "CG3C31", "CG3C31", "58.35", "120.00", " ", " ", "AMCP, aminomethyl cyclopropane; from FLAVOP PIP1,2,3; jhs ! Kenno: outside angle of a 3-membered ring; the QM value is ~119 and the MM ~115."}, {"CG324", "CG3C31", "HGA1", "34.60", "110.10", " ", " ", "AMCP, aminomethyl cyclopropane; from PROT alkane update, adm jr., 3/2/92; jhs, UB term deleted"}, {"CG3C31", "CG3C31", "CG3C31", "77.35", "111.00", "8.00", "2.56100", "PROTMOD cyclopropane"}, {"CG3C31", "CG3C31", "OG3C31", "30.00", "103.00", " ", " ", "1EOX, 1-ethylene oxide, sc"}, {"CG3C31", "CG3C31", "HGA1", "23.00", "117.10", "22.53", "2.17900", "PROTMOD cyclopropane"}, {"CG3C31", "CG3C31", "HGA2", "23.00", "117.10", "22.53", "2.17900", "PROTMOD cyclopropane"}, {"CG3RC1", "CG3C31", "CG3RC1", "53.35", "58.50", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C31", "HGA2", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"OG3C31", "CG3C31", "HGA1", "64.00", "118.50", " ", " ", "1BOX, 1-butene oxide, sc"}, {"OG3C31", "CG3C31", "HGA2", "68.50", "115.00", " ", " ", "1EOX, 1-ethylene oxide, sc"}, {"HGA2", "CG3C31", "HGA2", "23.00", "117.00", "5.40", "1.80200", "PROTMOD cyclopropane"}, {"CG2R53", "CG3C41", "CG3C41", "90.00", "106.00", " ", " ", "AZDO, 2-azetidinone, lsk and kevo"}, {"CG2R53", "CG3C41", "HGA2", "46.00", "112.30", " ", " ", "AZDO, 2-azetidinone, lsk and kevo"}, {"CG3C41", "CG3C41", "CG3C41", "70.00", "106.00", " ", " ", "CBU, cyclobutane; QM by Nikolay Simakov; lsk"}, {"CG3C41", "CG3C41", "NG2R43", "90.00", "104.50", " ", " ", "AZDO, 2-azetidinone, lsk and kevo"}, {"CG3C41", "CG3C41", "OG3C51", "89.00", "99.49", " ", " ", "OXTN, oxetane, gmu"}, {"CG3C41", "CG3C41", "HGA2", "46.00", "110.50", " ", " ", "CBU, cyclobutane; QM by Nikolay Simakov; lsk"}, {"NG2R43", "CG3C41", "HGA2", "51.00", "110.80", " ", " ", "AZDO, 2-azetidinone, lsk and kevo"}, {"OG3C51", "CG3C41", "HGA2", "55.00", "112.00", " ", " ", "OXTN, oxetane, gmu"}, {"HGA2", "CG3C41", "HGA2", "28.00", "105.00", "5.40", "1.8067", "CBU, cyclobutane; AZDO, 2-azetidinone; QM by Nikolay Simakov; lsk and kevo"}, {"CG2O1", "CG3C51", "CG3C52", "52.00", "112.30", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C51", "NG2S0", "50.00", "108.20", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C51", "HGA1", "50.00", "112.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "CG3C52", "52.00", "112.30", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "NG2S0", "50.00", "108.20", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "HGA1", "50.00", "112.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG3C51", "CG3C52", "58.00", "115.00", "8.00", "2.561", "TF2M viv"}, {"CG311", "CG3C51", "CG3RC1", "52.00", "108.00", " ", " ", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG311", "CG3C51", "HGA1", "34.60", "110.10", "22.53", "2.179", "TF2M viv"}, {"CG321", "CG3C51", "CG3C51", "58.00", "115.00", "8.00", "2.561", "TF2M viv"}, {"CG321", "CG3C51", "CG3C52", "58.00", "115.00", "8.00", "2.561", "TF2M viv"}, {"CG321", "CG3C51", "CG3RC1", "53.35", "103.70", "8.00", "2.561", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3C51", "OG3C51", "45.00", "111.50", " ", " ", "TF2M, viv"}, {"CG321", "CG3C51", "HGA1", "34.60", "110.10", "22.53", "2.179", "TF2M viv"}, {"CG331", "CG3C51", "CG3C51", "58.00", "115.00", "8.00", "2.561", "TF2M viv"}, {"CG331", "CG3C51", "CG3C52", "58.00", "115.00", "8.00", "2.561", "TF2M viv"}, {"CG331", "CG3C51", "CG3RC1", "53.35", "108.50", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG3C51", "OG3C51", "45.00", "111.50", " ", " ", "TF2M, viv"}, {"CG331", "CG3C51", "HGA1", "34.60", "110.10", "22.53", "2.179", "TF2M viv"}, {"CG3C51", "CG3C51", "CG3C51", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"CG3C51", "CG3C51", "CG3C52", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"CG3C51", "CG3C51", "CG3C53", "53.35", "111.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG3C51", "CG3RC1", "53.35", "103.70", "8.00", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C51", "NG2R51", "110.00", "111.00", " ", " ", "NA T/U/G, Arabinose (NF)"}, {"CG3C51", "CG3C51", "NG2R61", "110.00", "111.00", " ", " ", "NA C/A, RNA"}, {"CG3C51", "CG3C51", "NG2S3", "43.70", "110.00", " ", " ", "NABAKB phosphoramidates"}, {"CG3C51", "CG3C51", "NG301", "110.00", "111.00", " ", " ", "NADH, NDPH; Kenno: reverted to C/A, RNA from par_all27_na.prm"}, {"CG3C51", "CG3C51", "NG321", "67.70", "107.50", " ", " ", "PROT arg, (DS)"}, {"CG3C51", "CG3C51", "OG303", "115.00", "109.70", " ", " ", "PROTNA Ser-Phos"}, {"CG3C51", "CG3C51", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG3C51", "CG3C51", "OG3C51", "45.00", "111.10", " ", " ", "THF 10/21/05, viv"}, {"CG3C51", "CG3C51", "FGA1", "44.00", "112.00", "30.00", "2.369", "FLUROALK fluoroalkanes"}, {"CG3C51", "CG3C51", "HGA1", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"CG3C51", "CG3C51", "HGA6", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"CG3C52", "CG3C51", "CG3C52", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"CG3C52", "CG3C51", "CG3RC1", "53.35", "103.70", "8.00", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "NG2R51", "140.00", "113.70", " ", " ", "NA"}, {"CG3C52", "CG3C51", "NG2R61", "110.00", "113.70", " ", " ", "NA C/A"}, {"CG3C52", "CG3C51", "NG2S0", "70.00", "110.80", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C51", "NG2S3", "43.70", "110.00", " ", " ", "NABAKB phosphoramidates"}, {"CG3C52", "CG3C51", "NG321", "67.70", "107.50", " ", " ", "PROT arg, (DS)"}, {"CG3C52", "CG3C51", "OG301", "58.00", "106.50", "8.00", "2.561", "THF2, THF-2'OMe c3'-c2'-om, from Nucl. Acids, ed"}, {"CG3C52", "CG3C51", "OG303", "115.00", "109.70", " ", " ", "NA"}, {"CG3C52", "CG3C51", "OG311", "75.70", "110.00", " ", " ", "NA"}, {"CG3C52", "CG3C51", "OG3C51", "45.00", "111.10", " ", " ", "THF 10/21/05, viv"}, {"CG3C52", "CG3C51", "FGA1", "44.00", "112.00", "30.00", "2.369", "FLUROALK fluoroalkanes"}, {"CG3C52", "CG3C51", "HGA1", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"CG3C52", "CG3C51", "HGA6", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"CG3C53", "CG3C51", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG3C53", "CG3C51", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG3RC1", "CG3C51", "NG2R51", "110.00", "108.00", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "NG2R61", "110.00", "108.00", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "OG303", "75.70", "110.10", " ", " ", "CARBOCY ncarbocyclic sugars"}, {"CG3RC1", "CG3C51", "OG311", "75.70", "110.10", " ", " ", "CARBOCY ncarbocyclic sugars"}, {"CG3RC1", "CG3C51", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"NG2R51", "CG3C51", "OG3C51", "140.00", "108.00", " ", " ", "NA"}, {"NG2R51", "CG3C51", "HGA1", "43.00", "111.00", " ", " ", "NA From HGA1 CG3C51 NN2"}, {"NG2R61", "CG3C51", "OG3C51", "110.00", "108.00", " ", " ", "NA C/A DNA"}, {"NG2R61", "CG3C51", "HGA1", "43.00", "111.00", " ", " ", "NA"}, {"NG2S0", "CG3C51", "HGA1", "48.00", "112.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S3", "CG3C51", "HGA1", "48.00", "110.00", " ", " ", "NABAKB phosphoramidates"}, {"NG301", "CG3C51", "OG3C51", "110.00", "112.00", " ", " ", "NADH, NDPH; Kenno: reverted to C/A RNA from par_all27_na.prm"}, {"NG301", "CG3C51", "HGA1", "43.00", "111.00", " ", " ", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"NG321", "CG3C51", "HGA1", "32.40", "109.50", "50.00", "2.1400", "AMINE aliphatic amines"}, {"OG301", "CG3C51", "HGA1", "45.90", "108.50", " ", " ", "THF2, THF-2'OMe h2''-c2'-om, from Nucl. Acids, ed"}, {"OG303", "CG3C51", "HGA1", "60.00", "109.50", " ", " ", "PROTNA Ser-Phos"}, {"OG311", "CG3C51", "HGA1", "45.90", "108.89", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"OG3C51", "CG3C51", "HGA1", "70.00", "107.30", " ", " ", "THF 10/21/05, viv"}, {"FGA1", "CG3C51", "HGA6", "57.50", "108.89", "5.00", "1.997", "FLUROALK fluoroalkanes"}, {"CG2R51", "CG3C52", "CG2R51", "76.00", "107.60", " ", " ", "CPDE, cyclopentadiene, kevo"}, {"CG2R51", "CG3C52", "CG2R52", "84.00", "106.00", " ", " ", "3HPR, 3H-pyrrole, kevo"}, {"CG2R51", "CG3C52", "CG2R53", "45.00", "108.00", " ", " ", "A2FO, 3H-furan-2-one, ctsai"}, {"CG2R51", "CG3C52", "CG2RC0", "40.00", "107.30", " ", " ", "INDE, indene, kevo"}, {"CG2R51", "CG3C52", "CG3C52", "52.00", "106.00", " ", " ", "105 2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG3C52", "CG3C54", "52.00", "103.30", " ", " ", "106 2PRL, 2-pyrroline RE-OPTIMIZE!, kevo"}, {"CG2R51", "CG3C52", "NG2R50", "105.00", "111.60", " ", " ", "115.00 111.60 2HPR, 2H-pyrrole 1, kevo"}, {"CG2R51", "CG3C52", "NG3C51", "70.00", "105.10", " ", " ", "3PRL, 3-pyrroline, kevo"}, {"CG2R51", "CG3C52", "OG3C51", "75.00", "102.40", " ", " ", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG3C52", "HGA2", "52.00", "112.60", " ", " ", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline, kevo"}, {"CG2R52", "CG3C52", "CG2RC0", "70.00", "105.00", " ", " ", "3HIN, 3H-indole, kevo"}, {"CG2R52", "CG3C52", "CG3C52", "80.00", "99.00", " ", " ", "99.5 99 2PRZ, 2-pyrazoline C3-C4-C5, kevo"}, {"CG2R52", "CG3C52", "HGA2", "58.00", "112.20", " ", " ", "112.2 2PRZ, 2-pyrazoline; 3HPR, 3H-pyrrole C3-C4-H4x, kevo"}, {"CG2R53", "CG3C52", "CG3C52", "70.00", "106.50", " ", " ", "2PDO, 2-pyrrolidinone C2-C3-C4, kevo"}, {"CG2R53", "CG3C52", "HGA2", "58.00", "111.00", " ", " ", "2PDO, 2-pyrrolidinone, kevo"}, {"CG2RC0", "CG3C52", "CG2RC0", "40.00", "95.00", " ", " ", "FLRN, Fluorene, erh"}, {"CG2RC0", "CG3C52", "CG3C52", "65.00", "108.20", " ", " ", "INDI, indoline, kevo"}, {"CG2RC0", "CG3C52", "HGA2", "38.00", "114.00", " ", " ", "3HIN, 3H-indole, kevo"}, {"CG3C51", "CG3C52", "CG3C51", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"CG3C51", "CG3C52", "CG3C52", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"CG3C51", "CG3C52", "CG3RC1", "80.00", "105.50", "8.00", "2.56100", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C52", "NG3C51", "84.00", "107.60", " ", " ", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG3C51", "CG3C52", "OG3C51", "45.00", "111.10", " ", " ", "THF 10/21/05, viv"}, {"CG3C51", "CG3C52", "HGA2", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"CG3C52", "CG3C52", "CG3C52", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"CG3C52", "CG3C52", "CG3C53", "70.00", "108.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3C54", "70.00", "108.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3RC1", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "NG2R50", "40.00", "107.10", " ", " ", "104.2 ! 105.80 2IMI, 2-imidazoline N3-C4-C5 d1,d1a, kevo"}, {"CG3C52", "CG3C52", "NG2R53", "90.00", "104.50", " ", " ", "2PDO, 2-pyrrolidinone C4-C5-N1, kevo"}, {"CG3C52", "CG3C52", "NG2S0", "70.00", "110.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "NG3C51", "84.00", "107.60", " ", " ", "107 PRLD, pyrrolidine; 103.3 2PRL, 2-pyrroline; 100.4 2IMI, 2-imidazoline; 2PRZ, 2-pyrazoline, kevo"}, {"CG3C52", "CG3C52", "OG3C51", "45.00", "111.10", " ", " ", "THF 10/21/05, viv"}, {"CG3C52", "CG3C52", "HGA2", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"CG3C53", "CG3C52", "HGA2", "33.43", "110.10", "22.53", "2.17900", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C54", "CG3C52", "NG3C51", "87.00", "110.40", " ", " ", "IMDP, imidazolidine, erh and kevo"}, {"CG3C54", "CG3C52", "HGA2", "26.50", "110.10", "22.53", "2.17900", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3RC1", "CG3C52", "CG3RC1", "58.00", "105.30", " ", " ", "NORB, Norbornane, kevo"}, {"CG3RC1", "CG3C52", "HGA2", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"NG2R50", "CG3C52", "HGA2", "44.00", "109.80", " ", " ", "2IMI, 2-imidazoline; 2HPR, 2H-pyrrole, kevo"}, {"NG2R53", "CG3C52", "HGA2", "59.00", "111.00", " ", " ", "2PDO, 2-pyrrolidinone, kevo"}, {"NG2S0", "CG3C52", "HGA2", "48.00", "108.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG3C51", "CG3C52", "HGA2", "54.00", "109.00", " ", " ", "107.7 PRLD, pyrrolidine; 110.8 2PRL, 2-pyrroline; 110.4 3PRL, 3-pyrroline; 111.4 2IMI, 2-imidazoline; 111.7 2PRZ, 2-pyrazoline, kevo"}, {"OG3C51", "CG3C52", "OG3C51", "85.00", "108.10", " ", " ", "DIOL, 1,3-Dioxolane, erh"}, {"OG3C51", "CG3C52", "HGA2", "70.00", "107.30", " ", " ", "THF 10/21/05, viv"}, {"HGA2", "CG3C52", "HGA2", "38.50", "106.80", "5.40", "1.802", "THF, 10/17/05 viv"}, {"CG2O1", "CG3C53", "CG3C52", "52.00", "112.30", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C53", "NG3P2", "50.00", "106.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C53", "HGA1", "50.00", "112.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C53", "CG3C52", "52.00", "112.30", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C53", "NG3P2", "50.00", "106.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C53", "HGA1", "50.00", "112.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG3C53", "NG2R61", "110.00", "111.00", " ", " ", "NA C/A, RNA"}, {"CG3C51", "CG3C53", "OG3C51", "120.00", "106.25", " ", " ", "NA"}, {"CG3C51", "CG3C53", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C52", "CG3C53", "NG3P2", "70.00", "108.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C53", "HGA1", "35.00", "118.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2R61", "CG3C53", "OG3C51", "110.00", "108.00", " ", " ", "NA C/A DNA"}, {"NG2R61", "CG3C53", "HGA1", "43.00", "111.00", " ", " ", "NA"}, {"NG3P2", "CG3C53", "HGA1", "51.50", "107.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG3C51", "CG3C53", "HGA1", "45.20", "107.24", " ", " ", "NA"}, {"CG2R51", "CG3C54", "NG2R52", "138.00", "103.10", " ", " ", "2HPP, 2H-pyrrole.H+ N1-C2-C3, kevo"}, {"CG2R51", "CG3C54", "NG3P2", "62.00", "103.00", " ", " ", "3PRP, 3-pyrroline.H+, kevo"}, {"CG2R51", "CG3C54", "HGA2", "41.00", "114.80", " ", " ", "109.8 3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG3C52", "CG3C54", "NG3P2", "70.00", "108.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C54", "HGA2", "26.50", "110.10", "22.53", "2.17900", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C54", "CG3C54", "NG2R52", "68.00", "106.00", " ", " ", "2IMP, 2-imidazoline.H+ 1a,1, kevo"}, {"CG3C54", "CG3C54", "HGA2", "26.50", "110.10", "22.53", "2.17900", "2IMP, 2-imidazoline.H+ ! RE-OPTIMIZE !!!, kevo"}, {"NG2R52", "CG3C54", "HGA2", "54.00", "107.00", " ", " ", "2IMP, 2-imidazoline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"NG3C51", "CG3C54", "NG3P2", "86.00", "119.00", " ", " ", "IMDP, imidazolidine ! questionable - RE-OPTIMIZE?, erh and kevo"}, {"NG3C51", "CG3C54", "HGA2", "53.00", "114.60", " ", " ", "IMDP, imidazolidine, erh and kevo"}, {"NG3P2", "CG3C54", "HGA2", "51.50", "109.15", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C54", "HGA2", "35.50", "109.00", "5.40", "1.80200", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG3RC1", "CG331", "58.35", "113.50", "11.16", "2.561", "CA, Cholic acid, cacha, 02/08"}, {"CG311", "CG3RC1", "CG3C51", "58.35", "113.50", "11.16", "2.561", "CA, Cholic acid, cacha, 02/08"}, {"CG311", "CG3RC1", "CG3C52", "53.35", "111.00", "8.00", "2.561", "CA, Cholic acid, cacha, 02/08"}, {"CG311", "CG3RC1", "CG3RC1", "53.35", "108.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG311", "CG3RC1", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG331", "58.35", "113.50", "11.16", "2.561", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG3RC1", "CG3C31", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG3C51", "53.35", "111.00", "8.00", "2.561", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG3C52", "58.35", "113.50", "11.16", "2.561", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG3RC1", "CG3RC1", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"CG331", "CG3RC1", "CG3C51", "58.35", "113.50", "11.16", "2.561", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG3RC1", "CG3RC1", "58.35", "113.50", "11.16", "2.561", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG3C31", "CG3RC1", "CG3C51", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "CG3C52", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "CG3RC1", "53.35", "62.50", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "NG2R51", "70.00", "113.70", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "NG2R61", "70.00", "113.70", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3RC1", "CG3C52", "70.00", "109.00", " ", " ", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol, xxwy"}, {"CG3C51", "CG3RC1", "CG3RC1", "53.35", "108.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3RC1", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "CG3C52", "56.00", "109.40", " ", " ", "NORB, Norbornane, kevo"}, {"CG3C52", "CG3RC1", "CG3RC1", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "NG2R51", "70.00", "113.70", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "NG2R61", "70.00", "113.70", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R51", "70.00", "113.70", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R53", "70.00", "113.70", " ", " ", "CBHH, glycoluril, (CG3RC1 CG3RC1 NG2R51), jing"}, {"CG3RC1", "CG3RC1", "NG2R61", "70.00", "113.70", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "OG3C51", "50.00", "109.00", " ", " ", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol, xxwy"}, {"CG3RC1", "CG3RC1", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"NG2R53", "CG3RC1", "NG2R53", "70.00", "117.00", " ", " ", "CBHH, glycoluril, jing"}, {"NG2R53", "CG3RC1", "HGA1", "59.00", "111.00", " ", " ", "CBHH, glycoluril, (NG2R53 CG3C52 HGA2), jing"}, {"OG3C51", "CG3RC1", "OG3C51", "70.00", "105.00", " ", " ", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol, xxwy"}, {"OG3C51", "CG3RC1", "HGA1", "55.00", "106.00", " ", " ", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol, xxwy"}, {"CG2D1", "NG2D1", "CG321", "74.50", "111.00", " ", " ", "EEPI, from CG2D1 NG2D1 CG331, fylin"}, {"CG2D1", "NG2D1", "CG331", "67.00", "111.00", " ", " ", "RETINOL SCH1, Schiff's base, deprotonated"}, {"CG2D1", "NG2D1", "NG2S1", "100.00", "115.00", " ", " ", "HDZ1, hydrazone model cmpd"}, {"CG2DC1", "NG2D1", "NG2S1", "100.00", "115.00", " ", " ", "HDZ2, hydrazone model cmpd"}, {"CG2DC2", "NG2D1", "NG2S1", "100.00", "115.00", " ", " ", "HDZ2, hydrazone model cmpd"}, {"CG2N1", "NG2D1", "CG331", "50.00", "108.00", " ", " ", "MGU1, methylguanidine"}, {"CG2N1", "NG2D1", "HGP1", "49.00", "113.00", " ", " ", "MGU2, methylguanidine2"}, {"CG2N2", "NG2D1", "CG321", "45.00", "103.80", " ", " ", "MT2A, fylin, re-opt"}, {"CG2O7", "NG2D1", "CG331", "9.00", "136.00", " ", " ", "MICY, methyl isocyanate, xxwy"}, {"CG2R61", "NG2O1", "OG2N1", "65.00", "116.00", " ", " ", "NITB, nitrobenzene"}, {"CG324", "NG2O1", "OG2N1", "56.00", "117.00", " ", " ", "NIPR, nitropropane, abar"}, {"CG334", "NG2O1", "OG2N1", "60.00", "120.00", " ", " ", "NIME, nitromethane, abar ! we'll tolerate the angle strain in this specific case - Kenno"}, {"OG2N1", "NG2O1", "OG2N1", "105.00", "128.00", " ", " ", "NITB, nitrobenzene"}, {"CG2D1", "NG2P1", "CG334", "67.00", "123.60", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2D1", "NG2P1", "HGP2", "38.00", "118.80", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC1", "NG2P1", "CG334", "67.00", "123.60", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC1", "NG2P1", "HGP2", "38.00", "118.80", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC2", "NG2P1", "CG334", "67.00", "123.60", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC2", "NG2P1", "HGP2", "38.00", "118.80", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2N1", "NG2P1", "CG324", "62.30", "120.00", " ", " ", "PROT 107.5->120.0 to make planar Arg (KK)"}, {"CG2N1", "NG2P1", "CG334", "62.30", "120.00", " ", " ", "PROT methylguanidinium, adm jr., 3/26/92"}, {"CG2N1", "NG2P1", "HGP2", "49.00", "120.00", " ", " ", "PROT 35.3->49.0 GUANIDINIUM (KK)"}, {"CG2N2", "NG2P1", "HGP2", "40.00", "120.00", " ", " ", "AMDN, amidinium; BAMI, benzamidinium; mp2 molvib; pram"}, {"CG324", "NG2P1", "HGP2", "40.40", "120.00", " ", " ", "PROT 107.5->120.0 to make planar Arg (KK)"}, {"CG334", "NG2P1", "HGP2", "40.40", "120.00", " ", " ", "PROT methylguanidinium, adm jr., 3/26/92"}, {"HGP2", "NG2P1", "HGP2", "25.00", "120.00", " ", " ", "PROT 40.0->25.0 GUANIDINIUM (KK)"}, {"CG2R53", "NG2R43", "CG3C41", "85.00", "111.50", " ", " ", "AZDO, 2-azetidinone, kevo"}, {"CG2R53", "NG2R43", "HGP1", "34.00", "129.70", " ", " ", "AZDO, 2-azetidinone, kevo"}, {"CG3C41", "NG2R43", "HGP1", "34.00", "125.30", " ", " ", "AZDO, 2-azetidinone, kevo"}, {"CG2R51", "NG2R50", "CG2R52", "58.00", "103.00", " ", " ", "3HPR, 3H-pyrrole, kevo"}, {"CG2R51", "NG2R50", "CG2R53", "130.00", "103.50", " ", " ", "PROT his, adm jr., 6/27/90 @@@@@ Kenno: 104 --> 103.5 @@@@@"}, {"CG2R51", "NG2R50", "NG2R50", "110.00", "106.80", " ", " ", "OXAD, oxadiazole123 @@@@@ Kenno: 107.1 --> 106.8 @@@@@"}, {"CG2R52", "NG2R50", "CG2RC0", "60.00", "103.00", " ", " ", "3HIN, 3H-indole, kevo"}, {"CG2R52", "NG2R50", "CG3C52", "115.00", "102.90", " ", " ", "105.00 102.90 2HPR, 2H-pyrrole 1,1a, kevo"}, {"CG2R52", "NG2R50", "NG2R51", "160.00", "103.50", " ", " ", "PYRZ, pyrazole"}, {"CG2R52", "NG2R50", "NG3C51", "160.00", "105.50", " ", " ", "107.5 2PRZ, 2-pyrazoline N1-N2-C3, kevo"}, {"CG2R52", "NG2R50", "OG2R50", "150.00", "103.30", " ", " ", "ISOX, isoxazole @@@@@ Kenno: 105.6 --> 103.3 @@@@@"}, {"CG2R52", "NG2R50", "SG2R50", "150.00", "111.00", " ", " ", "ISOT, isothiazole"}, {"CG2R53", "NG2R50", "CG2R53", "100.00", "101.00", " ", " ", "TRZ4, triazole124, xxwy"}, {"CG2R53", "NG2R50", "CG2RC0", "120.00", "103.80", " ", " ", "NA Gua 5R)"}, {"CG2R53", "NG2R50", "CG3C52", "160.00", "101.90", " ", " ", "101.0 ! 104.50 2IMI, 2-imidazoline C2-N3-C4 d1a, kevo"}, {"CG2R53", "NG2R50", "NG2R51", "100.00", "101.00", " ", " ", "TRZ4, triazole124, xxwy"}, {"CG2R53", "NG2R50", "OG2R50", "50.00", "103.00", " ", " ", "OXD4, oxadiazole124, xxwy"}, {"NG2R50", "NG2R50", "NG2R51", "160.00", "102.20", " ", " ", "TRZ3, triazole123 @@@@@ Kenno: 101.9 --> 102.2 @@@@@"}, {"NG2R50", "NG2R50", "OG2R50", "110.00", "103.00", " ", " ", "OXAD, oxadiazole123 @@@@@ Kenno: 105.5 --> 103.0 @@@@@"}, {"CG2R51", "NG2R51", "CG2R51", "100.00", "109.00", " ", " ", "PYRL, pyrrole"}, {"CG2R51", "NG2R51", "CG2R53", "130.00", "107.50", " ", " ", "PROT his, adm jr., 6/27/90"}, {"CG2R51", "NG2R51", "CG2RC0", "85.00", "110.00", " ", " ", "adm,dec06(112.0)INDO/TRP"}, {"CG2R51", "NG2R51", "CG321", "70.00", "127.10", " ", " ", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG2R51", "NG2R51", "CG3C51", "130.00", "126.00", " ", " ", "NA"}, {"CG2R51", "NG2R51", "NG2R50", "160.00", "115.00", " ", " ", "PYRZ, pyrazole"}, {"CG2R51", "NG2R51", "HGP1", "30.00", "125.50", "20.00", "2.15000", "PROT his, adm jr., 6/27/90"}, {"CG2R53", "NG2R51", "CG2RC0", "100.00", "107.20", " ", " ", "NA Gua 5R)"}, {"CG2R53", "NG2R51", "CG331", "70.00", "127.80", " ", " ", "NA 9-M-A, adm jr."}, {"CG2R53", "NG2R51", "CG3C51", "45.00", "126.30", " ", " ", "NA G"}, {"CG2R53", "NG2R51", "CG3RC1", "45.00", "127.60", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2R53", "NG2R51", "NG2R50", "130.00", "114.00", " ", " ", "TRZ4, triazole124, xxwy"}, {"CG2R53", "NG2R51", "HGP1", "30.00", "127.00", "20.00", "2.14000", "PROT his, adm jr., 6/27/90"}, {"CG2RC0", "NG2R51", "CG2RC0", "85.00", "110.00", " ", " ", "CRBZ, carbazole, erh"}, {"CG2RC0", "NG2R51", "CG331", "70.00", "125.90", " ", " ", "NA 9-M-G, adm jr."}, {"CG2RC0", "NG2R51", "CG3C51", "45.00", "126.50", " ", " ", "NA G"}, {"CG2RC0", "NG2R51", "CG3RC1", "45.00", "126.50", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2RC0", "NG2R51", "NG2R50", "190.00", "114.50", " ", " ", "INDA, 1H-indazole, kevo"}, {"CG2RC0", "NG2R51", "HGP1", "28.00", "126.00", " ", " ", "INDO/TRP"}, {"CG321", "NG2R51", "NG2R50", "70.00", "117.90", " ", " ", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"NG2R50", "NG2R51", "NG2R50", "90.00", "121.00", " ", " ", "TRZ2, 2H-1,2,3-triazole, lf"}, {"NG2R50", "NG2R51", "HGP1", "32.00", "119.50", " ", " ", "PYRZ, pyrazole"}, {"CG2R51", "NG2R52", "CG2R53", "145.00", "108.00", " ", " ", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "NG2R52", "HGP2", "25.00", "124.90", "15.00", "2.13000", "PROT his, adm jr., 6/27/90"}, {"CG2R52", "NG2R52", "CG3C54", "101.00", "111.90", " ", " ", "2HPP, 2H-pyrrole.H+ C5-N1-C2, kevo"}, {"CG2R52", "NG2R52", "HGP2", "29.00", "123.20", " ", " ", "2IMP, 2-imidazoline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R53", "NG2R52", "CG3C54", "140.00", "108.00", " ", " ", "2IMP, 2-imidazoline.H+ 1,1a, kevo"}, {"CG2R53", "NG2R52", "HGP2", "25.00", "127.10", "15.00", "2.09000", "PROT his, adm jr., 6/27/90"}, {"CG3C54", "NG2R52", "HGP2", "29.00", "124.90", " ", " ", "2IMP, 2-imidazoline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG251O", "NG2R53", "CG2R53", "116.00", "117.50", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG251O", "NG2R53", "HGP1", "38.00", "123.00", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG252O", "NG2R53", "CG2R53", "116.00", "117.50", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG252O", "NG2R53", "HGP1", "38.00", "123.00", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "NG2R53", "CG2R53", "55.00", "120.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "NG2R53", "CG311", "50.00", "120.00", " ", " ", "drug design project, xxwy"}, {"CG2R53", "NG2R53", "CG3C52", "75.00", "111.00", " ", " ", "2PDO, 2-pyrrolidinone C5-N1-C2 v, kevo"}, {"CG2R53", "NG2R53", "CG3RC1", "75.00", "112.00", " ", " ", "CBHH, glycoluril, jing"}, {"CG2R53", "NG2R53", "HGP1", "38.00", "119.50", " ", " ", "2PDO, 2-pyrrolidinone (H1-N1-C2), kevo"}, {"CG3C52", "NG2R53", "HGP1", "38.00", "116.00", " ", " ", "2PDO, 2-pyrrolidinone (C5-N1-H1), kevo"}, {"CG3RC1", "NG2R53", "HGP1", "38.00", "116.00", " ", " ", "CBHH, glycoluril, (CG3C52 NG2R53 HGP1), jing"}, {"CG2R51", "NG2R57", "CG2R51", "100.00", "109.00", " ", " ", "13BPO, 1,3-bipyrrole; from CG2R51 NG2R51 CG2R51; lf"}, {"CG2R51", "NG2R57", "CG2R57", "42.00", "125.50", " ", " ", "13BPO, 1,3-bipyrrole, lf"}, {"CG2R51", "NG2R57", "NG2R57", "54.00", "125.50", " ", " ", "11BPO, 1,1-bipyrrole, lf"}, {"CG2R61", "NG2R60", "CG2R61", "20.00", "112.00", " ", " ", "PYRIDINE pyridine, yin"}, {"CG2R61", "NG2R60", "CG2R64", "20.00", "112.00", " ", " ", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"CG2R61", "NG2R60", "CG2R67", "20.00", "109.20", " ", " ", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "NG2R61", "CG2R63", "10.00", "123.90", " ", " ", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "NG2R61", "HGP1", "33.00", "120.70", " ", " ", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R62", "NG2R61", "CG2R62", "30.00", "120.00", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "NG2R61", "CG2R63", "70.00", "122.00", " ", " ", "NA U, adm jr. 11/97"}, {"CG2R62", "NG2R61", "CG331", "70.00", "120.50", " ", " ", "NA 1-M-C, adm jr. 7/24/91"}, {"CG2R62", "NG2R61", "CG3C51", "45.00", "118.40", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2R62", "NG2R61", "CG3C53", "45.00", "118.40", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2R62", "NG2R61", "CG3RC1", "45.00", "115.90", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2R62", "NG2R61", "HGP1", "32.00", "117.40", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "NG2R61", "HGP2", "32.00", "117.40", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R63", "NG2R61", "CG2R63", "50.00", "130.20", " ", " ", "NA U"}, {"CG2R63", "NG2R61", "CG2R64", "70.00", "131.10", " ", " ", "NA Gua 6R)G, adm jr. 11/97"}, {"CG2R63", "NG2R61", "CG331", "70.00", "115.40", " ", " ", "NA 1-M-C, adm jr."}, {"CG2R63", "NG2R61", "CG3C51", "45.00", "118.40", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2R63", "NG2R61", "CG3RC1", "45.00", "120.00", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2R63", "NG2R61", "HGP1", "40.50", "115.40", " ", " ", "NA U"}, {"CG2R64", "NG2R61", "HGP1", "45.00", "115.60", " ", " ", "NA Gua"}, {"CG2R61", "NG2R62", "CG2R64", "40.00", "110.50", " ", " ", "PYRM, pyrimidine %% TEST 108.0 -> 113.4 %%"}, {"CG2R61", "NG2R62", "NG2R62", "10.00", "120.00", " ", " ", "PYRD, pyridazine"}, {"CG2R62", "NG2R62", "CG2R62", "25.00", "114.10", " ", " ", "PYRH , from CG2R62 NG2R62 CG2R64, fylin"}, {"CG2R62", "NG2R62", "CG2R64", "70.00", "115.50", " ", " ", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R63", "NG2R62", "CG2R64", "85.00", "119.10", " ", " ", "NA C"}, {"CG2R64", "NG2R62", "CG2R64", "90.00", "117.80", " ", " ", "NA Ade 6R) adm jr. 11/97"}, {"CG2R64", "NG2R62", "CG2RC0", "90.00", "115.10", " ", " ", "NA Ade 6R) %% TEST 110.1 -> 120.9 %%"}, {"CG2R64", "NG2R62", "NG2R62", "65.00", "121.00", " ", " ", "TRIB, triazine124"}, {"CG2R62", "NG2R67", "CG2R62", "30.00", "120.00", " ", " ", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R62 NG2R61 CG2R62; isg"}, {"CG2R62", "NG2R67", "CG2R63", "70.00", "128.70", " ", " ", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R61 NG2R61 CG2R63; isg"}, {"CG2R62", "NG2R67", "CG2R67", "52.00", "120.0", " ", " ", "1PH4PO, 1-phenyl-4(1H)-pyridinone, isg"}, {"CG2R63", "NG2R67", "CG2R63", "50.00", "128.70", " ", " ", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from CG2R63 NG2R61 CG2R63, NA; isg"}, {"CG2R63", "NG2R67", "CG2R64", "70.00", "126.10", " ", " ", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from CG2R63 NG2R61 CG2R64; isg"}, {"CG2R63", "NG2R67", "CG2R67", "33.00", "111.30", " ", " ", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R62 NG2R61 CG2R63; isg"}, {"CG2R64", "NG2R67", "CG2R67", "55.00", "121.00", " ", " ", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from CG2R63 NG2R61 CG2R64; isg"}, {"CG2R51", "NG2RC0", "CG2R61", "15.00", "130.50", " ", " ", "INDZ, indolizine, kevo"}, {"CG2R51", "NG2RC0", "CG2RC0", "100.00", "109.70", " ", " ", "INDZ, indolizine, kevo"}, {"CG2R61", "NG2RC0", "CG2RC0", "15.00", "119.80", " ", " ", "INDZ, indolizine, kevo"}, {"CG2O1", "NG2S0", "CG331", "42.00", "119.50", " ", " ", "DMF, Dimethylformamide, xxwy"}, {"CG2O1", "NG2S0", "CG3C51", "60.00", "117.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "NG2S0", "CG3C52", "60.00", "117.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG331", "NG2S0", "CG331", "45.00", "121.00", " ", " ", "DMF, Dimethylformamide, xxwy"}, {"CG3C51", "NG2S0", "CG3C52", "100.00", "114.20", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "NG2S1", "CG2R61", "50.00", "120.00", " ", " ", "RESI PACP, FRET AND OTHERS"}, {"CG2O1", "NG2S1", "CG2R64", "50.00", "120.00", " ", " ", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"CG2O1", "NG2S1", "CG311", "50.00", "120.00", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG2O1", "NG2S1", "CG321", "50.00", "120.00", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG2O1", "NG2S1", "CG331", "50.00", "120.00", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG2O1", "NG2S1", "NG2D1", "50.00", "115.00", " ", " ", "HDZ1, hydrazone model cmpd"}, {"CG2O1", "NG2S1", "HGP1", "34.00", "123.00", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG2O6", "NG2S1", "CG321", "60.00", "120.00", " ", " ", "DECB, diehtyl carbamate, from DMCB, cacha and kevo and xxwy"}, {"CG2O6", "NG2S1", "CG331", "60.00", "120.00", " ", " ", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo and xxwy"}, {"CG2O6", "NG2S1", "HGP1", "40.00", "121.50", " ", " ", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo and xxwy"}, {"CG2R61", "NG2S1", "HGP1", "34.00", "117.00", " ", " ", "RESI PACP, FRET AND OTHERS"}, {"CG2R64", "NG2S1", "HGP1", "34.00", "117.00", " ", " ", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"CG311", "NG2S1", "HGP1", "35.00", "117.00", " ", " ", "PROT NMA Vibrational Modes (LK)"}, {"CG321", "NG2S1", "HGP1", "35.00", "117.00", " ", " ", "PROT NMA Vibrational Modes (LK)"}, {"CG331", "NG2S1", "HGP1", "35.00", "117.00", " ", " ", "PROT NMA Vibrational Modes (LK)"}, {"NG2D1", "NG2S1", "HGP1", "34.00", "122.00", " ", " ", "HDZ1, hydrazone model cmpd"}, {"CG2O1", "NG2S2", "HGP1", "50.00", "120.00", " ", " ", "PROT his, adm jr. 8/13/90 geometry and vibrations"}, {"CG2O6", "NG2S2", "HGP1", "50.00", "120.00", " ", " ", "PROT his, adm jr. 8/13/90 geometry and vibrations NOW UREA ==> re-optimize???"}, {"HGP1", "NG2S2", "HGP1", "23.00", "120.00", " ", " ", "PROT adm jr. 8/13/90 geometry and vibrations"}, {"CG2R61", "NG2S3", "HGP4", "60.00", "111.60", " ", " ", "PYRIDINE aminopyridine, adm jr., 7/94 kevo: 120 --> 111.6"}, {"CG2R64", "NG2S3", "HGP4", "40.00", "121.50", " ", " ", "NA Ade h61,h62, C,A,G"}, {"CG321", "NG2S3", "SG3O1", "58.70", "104.90", " ", " ", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG321", "NG2S3", "HGP1", "51.80", "109.50", " ", " ", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "NG2S3", "PG1", "110.00", "118.30", "35.0", "2.33", "NABAKB phosphoramidates"}, {"CG331", "NG2S3", "SG3O1", "39.50", "103.10", " ", " ", "NMSM, N-methyl-sulfamate, my"}, {"CG331", "NG2S3", "HGP1", "35.00", "109.00", " ", " ", "NABAKB phosphoramidates"}, {"CG3C51", "NG2S3", "PG1", "110.00", "118.30", "35.0", "2.33", "NABAKB phosphoramidates"}, {"CG3C51", "NG2S3", "HGP1", "35.00", "109.00", " ", " ", "NABAKB phosphoramidates"}, {"PG1", "NG2S3", "HGP1", "30.00", "123.60", "40.0", "2.35", "NABAKB phosphoramidates"}, {"SG3O1", "NG2S3", "HGP1", "47.00", "113.10", " ", " ", "NMSM, N-methyl-sulfamate, my"}, {"HGP4", "NG2S3", "HGP4", "31.00", "117.00", " ", " ", "NA Ade C,A,G"}, {"CG2D1O", "NG301", "CG2D1O", "20.00", "114.00", " ", " ", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1O", "NG301", "CG3C51", "70.00", "121.70", " ", " ", "NADH, NDPH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D2O", "NG301", "CG2D2O", "20.00", "114.00", " ", " ", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D2O", "NG301", "CG3C51", "70.00", "121.70", " ", " ", "NADH, NDPH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R61", "NG301", "CG331", "48.00", "113.50", " ", " ", "TMC, trimethylcytosine, yxu; DMAN, N,N-dimethylaniline, kevo"}, {"CG2R64", "NG301", "CG331", "48.00", "113.50", " ", " ", "TMC, trimethylcytosine, yxu"}, {"CG331", "NG301", "CG331", "42.50", "116.00", " ", " ", "TMC, trimethylcytosine, yxu; DMAN, N,N-dimethylaniline, kevo"}, {"CG3AM0", "NG301", "CG3AM0", "53.00", "110.90", " ", " ", "AMINE aliphatic amines"}, {"CG2D1O", "NG311", "CG2D1O", "20.00", "114.00", " ", " ", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1O", "NG311", "HGPAM1", "39.00", "123.00", " ", " ", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D2O", "NG311", "CG2D2O", "20.00", "114.00", " ", " ", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D2O", "NG311", "HGPAM1", "39.00", "123.00", " ", " ", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2N1", "NG311", "CG331", "43.00", "106.00", " ", " ", "MGU2, methylguanidine2"}, {"CG2N1", "NG311", "HGPAM1", "45.00", "106.00", " ", " ", "MGU2, methylguanidine2 Kenno: 104 -> 106"}, {"CG2R61", "NG311", "CG2R61", "40.00", "109.00", " ", " ", "FEOZ, phenoxazine, erh"}, {"CG2R61", "NG311", "CG321", "55.00", "113.00", " ", " ", "OBTZ, 1,1-dioxo-3,4-dihydro-2H-1,2,4-benzothiadiazine, xxwy"}, {"CG2R61", "NG311", "SG3O2", "35.00", "115.00", " ", " ", "PMSM, N-phenylmethanesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "NG311", "HGP1", "40.00", "114.00", " ", " ", "PMSM, N-phenylmethanesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "NG311", "HGPAM1", "45.00", "115.00", " ", " ", "FEOZ, phenoxazine, erh"}, {"CG321", "NG311", "CG321", "40.50", "109.60", " ", " ", "5UHG, from nmgn, cgenff_compromise, kevo"}, {"CG321", "NG311", "SG3O2", "60.00", "115.00", " ", " ", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG321", "NG311", "HGP1", "46.00", "111.00", " ", " ", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG321", "NG311", "HGPAM1", "35.00", "111.00", " ", " ", "compromise between PEI0 on the one hand and OBTZ AOBT on the other hand, kevo and xxwy"}, {"CG331", "NG311", "SG3O2", "68.00", "114.00", " ", " ", "MMSM, N-methylmethanesulfonamide; MBSM, N-methylbenzenesulfonamide; xxwy"}, {"CG331", "NG311", "HGP1", "42.30", "111.50", " ", " ", "MMSM, N-methylmethanesulfonamide; MBSM, N-methylbenzenesulfonamide; xxwy"}, {"CG331", "NG311", "HGPAM1", "45.00", "104.00", " ", " ", "MGU2, methylguanidine2"}, {"CG3AM1", "NG311", "CG3AM1", "40.50", "112.20", "5.00", "2.4217", "AMINE aliphatic amines"}, {"CG3AM1", "NG311", "HGPAM1", "42.10", "108.90", "5.00", "2.0292", "AMINE aliphatic amines"}, {"SG3O2", "NG311", "HGP1", "42.30", "113.20", " ", " ", "MMSM, N-methylmethanesulfonamide and other sulfonamides, xxwy"}, {"CG2D1O", "NG321", "HGPAM2", "55.00", "113.00", " ", " ", "AMET, ethenamine; mp2-geom, molvib; pram and kevo"}, {"CG2D2O", "NG321", "HGPAM2", "55.00", "113.00", " ", " ", "AMET, ethenamine; mp2-geom, molvib; pram and kevo"}, {"CG2N1", "NG321", "HGPAM2", "55.00", "108.00", " ", " ", "MGU1, methylguanidine"}, {"CG2N2", "NG321", "HGPAM2", "50.00", "115.80", " ", " ", "MT2A, fylin"}, {"CG321", "NG321", "HGPAM2", "41.00", "112.10", " ", " ", "AMINE aliphatic amines"}, {"CG3AM2", "NG321", "HGPAM2", "41.00", "112.10", " ", " ", "AMINE aliphatic amines"}, {"CG3C51", "NG321", "HGPAM2", "41.00", "112.10", " ", " ", "AMINE aliphatic amines"}, {"SG3O2", "NG321", "HGP1", "49.00", "115.00", " ", " ", "MSAM, methanesulfonamide; BSAM, benzenesulfonamide; xxwy"}, {"HGP1", "NG321", "HGP1", "38.00", "110.00", " ", " ", "MSAM, methanesulfonamide; BSAM, benzenesulfonamide; xxwy"}, {"HGPAM2", "NG321", "HGPAM2", "42.00", "105.85", " ", " ", "AMINE aliphatic amines kevo: 29.50 -> 42.00 based on MAM1 molvib and AMET scans"}, {"HGPAM3", "NG331", "HGPAM3", "41.50", "107.10", " ", " ", "AMINE aliphatic amines kevo: 29.00 -> 41.50 based on MAM1 molvib and AMET scans"}, {"CG2R51", "NG3C51", "CG3C52", "45.00", "104.80", " ", " ", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "NG3C51", "HGP1", "43.00", "113.90", " ", " ", "2PRL, 2-pyrroline, kevo"}, {"CG2R53", "NG3C51", "CG3C52", "40.00", "107.00", " ", " ", "104.60 77 2IMI, 2-imidazoline C5-N1-C2 d1, kevo"}, {"CG2R53", "NG3C51", "HGP1", "43.00", "115.60", " ", " ", "117.7 ! 112.5 ! 30 116.5 2IMI, 2-imidazoline H1-N1-C2, kevo"}, {"CG2RC0", "NG3C51", "CG3C52", "60.00", "106.90", " ", " ", "INDI, indoline, kevo"}, {"CG2RC0", "NG3C51", "HGP1", "41.00", "114.50", " ", " ", "INDI, indoline, kevo"}, {"CG3C52", "NG3C51", "CG3C52", "140.00", "103.70", " ", " ", "102.9 PRLD, pyrrolidine; 105.4 3PRL, 3-pyrroline, kevo"}, {"CG3C52", "NG3C51", "CG3C54", "67.00", "104.10", " ", " ", "IMDP, imidazolidine, erh and kevo"}, {"CG3C52", "NG3C51", "NG2R50", "47.00", "109.00", " ", " ", "107.5 2PRZ, 2-pyrazoline C5-N1-N2, kevo"}, {"CG3C52", "NG3C51", "NG3P2", "47.00", "103.90", " ", " ", "PRZP, Pyrazolidine.H+, kevo"}, {"CG3C52", "NG3C51", "HGP1", "43.00", "112.00", " ", " ", "108 PRLD, pyrrolidine; 113 2PRL, 2-pyrroline; 106(v) 3PRL, 3-pyrroline; 117 2IMI, 2-imidazoline; 2PRZ, 2-pyrazoline, kevo"}, {"CG3C54", "NG3C51", "HGP1", "50.00", "109.25", " ", " ", "IMDP, imidazolidine, erh and kevo"}, {"NG2R50", "NG3C51", "HGP1", "50.00", "103.60", " ", " ", "104.9 2PRZ, 2-pyrazoline, kevo"}, {"NG3P2", "NG3C51", "HGP1", "56.00", "100.60", " ", " ", "PRZP, Pyrazolidine.H+, kevo"}, {"CG2R61", "NG3N1", "NG3N1", "60.00", "112.00", " ", " ", "PHHZ, phenylhydrazine, decrease angle to make HN become out of plane, ed"}, {"CG2R61", "NG3N1", "HGP1", "52.00", "115.00", " ", " ", "PHHZ, phenylhydrazine, decrease angle to make HN become out of plane, ed"}, {"NG3N1", "NG3N1", "HGP1", "55.00", "102.00", " ", " ", "HDZN, hydrazine, ed"}, {"HGP1", "NG3N1", "HGP1", "50.00", "102.00", " ", " ", "HDZN, hydrazine, ed"}, {"CG324", "NG3P0", "CG324", "60.00", "109.50", "26.", "2.466", "LIPID tetraethylammonium, from CG334 NG3P0 CG324"}, {"CG324", "NG3P0", "CG334", "60.00", "109.50", "26.", "2.466", "LIPID tetramethylammonium"}, {"CG334", "NG3P0", "CG334", "60.00", "109.50", "26.", "2.466", "LIPID tetramethylammonium"}, {"CG334", "NG3P0", "OG311", "69.00", "100.00", " ", " ", "TMAOP, Hydroxy(trimethyl)Ammonium, xxwy"}, {"CG334", "NG3P0", "OG312", "80.00", "112.00", " ", " ", "TMAO, trimethylamine N-oxide, xxwy and ejd"}, {"CG324", "NG3P1", "CG324", "45.00", "115.20", " ", " ", "FLAVOP PIP1,2,3 ! tweaked 115.50 --> 115.20 by kevo"}, {"CG324", "NG3P1", "CG334", "45.00", "109.50", " ", " ", "FLAVOP PIP1,2,3"}, {"CG324", "NG3P1", "HGP2", "30.00", "110.80", "27.00", "2.07400", "FLAVOP PIP1,2,3"}, {"CG334", "NG3P1", "HGP2", "30.00", "110.80", "27.00", "2.07400", "FLAVOP PIP1,2,3"}, {"CG2R51", "NG3P2", "CG3C54", "85.00", "107.00", " ", " ", "2PRP, 2-pyrroline.H+, kevo"}, {"CG2R51", "NG3P2", "HGP2", "38.00", "112.00", " ", " ", "2PRP, 2-pyrroline.H+, kevo"}, {"CG314", "NG3P2", "CG324", "45.00", "115.20", " ", " ", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha ! tweaked 115.50 --> 115.20 by kevo"}, {"CG314", "NG3P2", "HGP2", "30.00", "110.80", "27.00", "2.07400", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha"}, {"CG324", "NG3P2", "CG324", "40.00", "115.20", " ", " ", "PIP, piperidine ! tweaked 115.50 --> 115.20 by kevo"}, {"CG324", "NG3P2", "HGP2", "30.00", "110.80", "27.00", "2.07400", "PIP, piperidine"}, {"CG3C53", "NG3P2", "CG3C54", "100.00", "111.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "NG3P2", "HGP2", "33.00", "109.50", "4.00", "2.05600", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C54", "NG3P2", "CG3C54", "104.00", "113.00", " ", " ", "PRLP, pyrrolidine.H+, kevo"}, {"CG3C54", "NG3P2", "NG3C51", "135.00", "114.20", " ", " ", "PRZP, Pyrazolidine.H+, kevo"}, {"CG3C54", "NG3P2", "HGP2", "33.00", "109.50", "4.00", "2.05600", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG3C51", "NG3P2", "HGP2", "42.00", "106.30", " ", " ", "PRZP, Pyrazolidine.H+, kevo"}, {"HGP2", "NG3P2", "HGP2", "51.00", "107.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG314", "NG3P3", "HGP2", "30.00", "109.50", "20.00", "2.07400", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"CG324", "NG3P3", "HGP2", "30.00", "109.50", "20.00", "2.07400", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"CG334", "NG3P3", "HGP2", "30.00", "109.50", "20.00", "2.07400", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"HGP2", "NG3P3", "HGP2", "44.00", "109.50", " ", " ", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"CG2R51", "OG2R50", "CG2R51", "100.00", "106.00", " ", " ", "FURA, furan"}, {"CG2R51", "OG2R50", "CG2R53", "140.00", "104.00", " ", " ", "OXAZ, oxazole"}, {"CG2R51", "OG2R50", "CG2RC0", "50.00", "104.00", " ", " ", "ZFUR, benzofuran, kevo"}, {"CG2R51", "OG2R50", "NG2R50", "150.00", "108.50", " ", " ", "ISOX, isoxazole @@@@@ Kenno: 109.9 --> 108.5 @@@@@"}, {"CG2R53", "OG2R50", "NG2R50", "165.00", "109.30", " ", " ", "OXD4, oxadiazole124, xxwy"}, {"CG2D1O", "OG301", "CG331", "53.00", "109.00", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2D2O", "OG301", "CG331", "53.00", "109.00", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2R61", "OG301", "CG2R61", "185.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "OG301", "CG321", "65.00", "108.00", " ", " ", "ETOB, Ethoxybenzene, cacha"}, {"CG2R61", "OG301", "CG331", "65.00", "108.00", " ", " ", "MEOB, Methoxybenzene, cacha"}, {"CG301", "OG301", "CG331", "95.00", "109.70", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG311", "OG301", "CG331", "95.00", "109.70", " ", " ", "all34_ethers_1a CC33A OC30A CC32A, gk or og (not affected by mistake)"}, {"CG321", "OG301", "CG321", "95.00", "109.70", " ", " ", "diethylether, alex"}, {"CG321", "OG301", "CG331", "95.00", "109.70", " ", " ", "diethylether, alex"}, {"CG331", "OG301", "CG331", "95.00", "109.70", " ", " ", "diethylether, alex!from CG321 OG301 CCT2, DME viv"}, {"CG331", "OG301", "CG3C51", "65.00", "107.00", " ", " ", "THF2, THF-2'OMe c2'-om-cm, from Nucl. Acids, ed"}, {"CG2O2", "OG302", "CG301", "40.00", "109.60", "30.00", "2.2651", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide, cacha"}, {"CG2O2", "OG302", "CG311", "40.00", "109.60", "30.00", "2.2651", "LIPID methyl acetate"}, {"CG2O2", "OG302", "CG321", "40.00", "109.60", "30.00", "2.2651", "LIPID methyl acetate"}, {"CG2O2", "OG302", "CG331", "40.00", "109.60", "30.00", "2.2651", "LIPID methyl acetate"}, {"CG2O6", "OG302", "CG321", "40.00", "111.00", " ", " ", "DECB, diehtyl carbamate, from DMCB, cacha and kevo and xxwy"}, {"CG2O6", "OG302", "CG331", "40.00", "111.00", " ", " ", "DMCB and DMCA, dimethyl carbamate and carbonate, cacha and kevo and xxwy"}, {"CG2R61", "OG303", "PG1", "90.00", "120.00", "20.00", "2.30", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "OG303", "SG3O2", "33.00", "108.00", " ", " ", "PMST, phenyl methanesulfonate, PSMT, phenyl sulfamate, xxwy"}, {"CG311", "OG303", "PG2", "20.00", "120.00", "35.00", "2.33", "NA IP_2"}, {"CG321", "OG303", "PG1", "20.00", "120.00", "35.00", "2.33", "NA !Reorganization: PC and others"}, {"CG321", "OG303", "PG2", "20.00", "120.00", "35.00", "2.33", "NA !Reorganization: TH5P and others"}, {"CG321", "OG303", "SG3O1", "15.00", "109.00", "27.00", "1.90", "LIPID methylsulfate"}, {"CG331", "OG303", "PG0", "20.00", "120.00", "35.0", "2.33", "LIPID phosphate !Reorganization:MP_0"}, {"CG331", "OG303", "PG1", "20.00", "120.00", "35.0", "2.33", "LIPID phosphate !Reorganization:MP_1"}, {"CG331", "OG303", "PG2", "20.00", "120.00", "35.0", "2.33", "LIPID phosphate !Reorganization:MP_2"}, {"CG331", "OG303", "SG3O1", "15.00", "109.00", "27.00", "1.90", "LIPID methylsulfate"}, {"CG331", "OG303", "SG3O2", "48.00", "113.00", " ", " ", "MMST, methyl methanesulfonate, xxwy"}, {"CG3C51", "OG303", "PG1", "20.00", "120.00", "35.0", "2.33", "BPNP and others"}, {"CG3C51", "OG303", "PG2", "20.00", "120.00", "35.0", "2.33", "TH3P and others"}, {"PG1", "OG304", "PG1", "45.00", "143.00", "40.0", "3.25", "PPI2, METP reorganization, kevo"}, {"PG1", "OG304", "PG2", "45.00", "139.50", "40.0", "3.05", "PPI1, METP reorganization, kevo"}, {"CG2O2", "OG311", "HGP1", "55.00", "115.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O6", "OG311", "HGP1", "61.00", "116.00", " ", " ", "CO31, bicarbonate, xxwy"}, {"CG2R61", "OG311", "HGP1", "65.00", "108.00", " ", " ", "PROT JES 8/25/89 phenol"}, {"CG301", "OG311", "HGP1", "50.00", "106.00", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG311", "OG311", "HGP1", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit; was 57.5 106"}, {"CG321", "OG311", "HGP1", "50.00", "106.00", " ", " ", "sng mod (qm and crystal data); was 57.5 106"}, {"CG331", "OG311", "HGP1", "57.50", "106.00", " ", " ", "Team Sugar, HCP1M OC311M CC331M; unchanged"}, {"CG3C51", "OG311", "HGP1", "50.00", "109.00", " ", " ", "par_Sugars, CC315x OC311 HCP1; was 57.5 106"}, {"NG3P0", "OG311", "HGP1", "60.00", "101.50", " ", " ", "TMAOP, Hydroxy(trimethyl)Ammonium, xxwy"}, {"PG0", "OG311", "HGP1", "30.00", "115.00", "40.00", "2.3500", "NA MP_1, ADM Jr. !Reorganization:MP_0"}, {"PG1", "OG311", "HGP1", "30.00", "115.00", "40.00", "2.3500", "NA MP_1, ADM Jr. !Reorganization:MP_1"}, {"CG3C31", "OG3C31", "CG3C31", "50.35", "97.00", " ", " ", "1EOX, 1-ethylene oxide, sc"}, {"CG2R51", "OG3C51", "CG2R53", "85.00", "104.00", " ", " ", "A2FO, 3H-furan-2-one, ctsai"}, {"CG2R51", "OG3C51", "CG3C52", "125.00", "104.40", " ", " ", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG2R53", "OG3C51", "CG3C52", "90.00", "107.10", " ", " ", "GBL, Gamma-butyrolactone, ctsai"}, {"CG2RC0", "OG3C51", "CG3C52", "76.00", "108.05", " ", " ", "ZDOL, 1,3-benzodioxole, kevo"}, {"CG3C41", "OG3C51", "CG3C41", "55.00", "89.12", " ", " ", "OXTN, oxetane, gmu (CG3C52 OG3C51 CG3C52)"}, {"CG3C51", "OG3C51", "CG3C51", "95.00", "111.00", " ", " ", "THF 10/21/05, viv"}, {"CG3C51", "OG3C51", "CG3C52", "95.00", "111.00", " ", " ", "THF 10/21/05, viv"}, {"CG3C51", "OG3C51", "CG3C53", "110.00", "108.00", " ", " ", "NA"}, {"CG3C52", "OG3C51", "CG3C52", "95.00", "111.00", " ", " ", "THF 10/21/05, viv"}, {"CG3C52", "OG3C51", "CG3RC1", "170.00", "109.00", " ", " ", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol, xxwy"}, {"CG321", "OG3C61", "CG321", "95.00", "109.70", " ", " ", "DIOX, dioxane"}, {"CG2D1O", "OG3R60", "CG2D1O", "40.00", "99.00", " ", " ", "PY01, 4h-pyran, maintain 720 in ring"}, {"CG2D1O", "OG3R60", "CG321", "20.00", "99.00", " ", " ", "PY02, 2h-pyran"}, {"CG2D2O", "OG3R60", "CG2D2O", "40.00", "99.00", " ", " ", "PY01, 4h-pyran, maintain 720 in ring"}, {"CG2D2O", "OG3R60", "CG321", "20.00", "99.00", " ", " ", "PY02, 2h-pyran"}, {"CG2R61", "OG3R60", "CG2R61", "40.00", "115.00", " ", " ", "FEOZ, phenoxazine, erh"}, {"CG2R62", "OG3R60", "CG2R63", "102.00", "126.50", " ", " ", "RIN, coumarin, isg"}, {"OG2P1", "PG0", "OG303", "98.90", "111.60", " ", " ", "LIPID phosphate !Reorganization:MP_0 RE-OPTIMIZE!"}, {"OG2P1", "PG0", "OG311", "98.90", "108.23", " ", " ", "NA MP_1, ADM Jr. !Reorganization:MP_0 RE-OPTIMIZE!"}, {"OG303", "PG0", "OG311", "48.10", "108.00", " ", " ", "NA MP_1, ADM Jr. !Reorganization:MP_0 RE-OPTIMIZE!"}, {"OG311", "PG0", "OG311", "98.90", "104.00", " ", " ", "NA MP_0, ADM Jr."}, {"CG312", "PG1", "OG2P1", "98.90", "94.00", " ", " ", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"CG312", "PG1", "OG311", "90.10", "90.00", " ", " ", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG321", "PG1", "OG2P1", "98.90", "103.00", " ", " ", "BDFP, Benzylphosphonate re-optimize?"}, {"CG321", "PG1", "OG311", "90.10", "94.00", " ", " ", "BDFP, BDFD, Benzylphosphonate"}, {"NG2S3", "PG1", "OG2P1", "140.00", "110.60", " ", " ", "NABAKB phosphoramidates"}, {"NG2S3", "PG1", "OG303", "60.00", "103.20", " ", " ", "NABAKB phosphoramidates"}, {"OG2P1", "PG1", "OG2P1", "104.00", "120.00", " ", " ", "MP_1 reorganization, kevo"}, {"OG2P1", "PG1", "OG303", "98.90", "107.50", " ", " ", "MP_1 reorganization, kevo"}, {"OG2P1", "PG1", "OG304", "88.90", "111.60", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1, PPI2"}, {"OG2P1", "PG1", "OG311", "98.90", "111.00", " ", " ", "MP_1 reorganization, kevo"}, {"OG303", "PG1", "OG303", "80.00", "104.30", " ", " ", "NA DMP, ADM Jr. !Reorganization: PC and others"}, {"OG303", "PG1", "OG304", "48.10", "105.00", " ", " ", "PPI1, PPI2, METP reorganization, kevo"}, {"OG303", "PG1", "OG311", "48.10", "108.00", " ", " ", "MP_1 reorganization, kevo"}, {"OG304", "PG1", "OG304", "48.10", "107.50", " ", " ", "METP reorganization, kevo"}, {"OG304", "PG1", "OG311", "48.10", "111.00", " ", " ", "PPI2 reorganization, kevo"}, {"CG312", "PG2", "OG2P1", "98.90", "94.00", " ", " ", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"CG321", "PG2", "OG2P1", "98.90", "103.00", " ", " ", "BDFD, Benzylphosphonate / re-optimize?"}, {"OG2P1", "PG2", "OG2P1", "104.00", "121.00", " ", " ", "MP_2 reorganization, kevo"}, {"OG2P1", "PG2", "OG303", "88.90", "111.00", " ", " ", "MP_2 reorganization, kevo"}, {"OG2P1", "PG2", "OG304", "88.90", "111.60", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1, PPI2"}, {"CG2R51", "SG2R50", "CG2R51", "105.00", "95.00", " ", " ", "THIP, thiophene"}, {"CG2R51", "SG2R50", "CG2R53", "110.00", "97.00", " ", " ", "THAZ, thiazole @@@@@ Kenno: 95 --> 97 @@@@@"}, {"CG2R51", "SG2R50", "CG2RC0", "70.00", "99.50", " ", " ", "ZTHP, benzothiophene, kevo"}, {"CG2R51", "SG2R50", "NG2R50", "150.00", "103.00", " ", " ", "ISOT, isothiazole"}, {"CG2R53", "SG2R50", "CG2RC0", "110.00", "97.00", " ", " ", "ZTHZ, benzothiazole, kevo"}, {"CG321", "SG301", "SG301", "72.50", "103.30", " ", " ", "PROT expt. dimethyldisulfide, 3/26/92 (FL)"}, {"CG331", "SG301", "SG301", "72.50", "103.30", " ", " ", "PROT expt. dimethyldisulfide, 3/26/92 (FL)"}, {"CG251O", "SG311", "CG2R53", "75.00", "92.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "SG311", "CG2R53", "75.00", "92.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2N2", "SG311", "CG321", "59.00", "94.70", " ", " ", "DH3T, transferred from MT2A , fylin"}, {"CG2N2", "SG311", "CG331", "59.00", "94.70", " ", " ", "MT2A, fylin"}, {"CG2O6", "SG311", "CG331", "60.00", "96.00", " ", " ", "DMTT, dimethyl trithiocarbonate, kevo"}, {"CG2R61", "SG311", "CG2R61", "50.00", "109.00", " ", " ", "FETZ, phenothiazine, erh"}, {"CG2R64", "SG311", "CG331", "66.00", "91.00", " ", " ", "2SMPYR, 2-(methylthio)-pyrimidine; from CG2O6 SG311 CG331; isg (may need to be re-evaluated because yxu got a QM value of 100.8 for RESI 2MSA)"}, {"CG321", "SG311", "CG321", "34.00", "95.00", " ", " ", "PROTNA sahc"}, {"CG321", "SG311", "CG331", "34.00", "95.00", " ", " ", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG321", "SG311", "HGP3", "38.80", "95.00", " ", " ", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG331", "SG311", "HGP3", "43.00", "95.00", " ", " ", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG2R61", "SG3O1", "OG2P1", "85.0", "98.0", " ", " ", "benzene sulfonic acid anion, og"}, {"CG321", "SG3O1", "OG2P1", "80.00", "99.00", " ", " ", "ESNA, ethyl sulfonate, xhe"}, {"CG331", "SG3O1", "OG2P1", "85.00", "100.00", " ", " ", "MSNA, methyl sulfonate, xhe"}, {"NG2S3", "SG3O1", "OG2P1", "33.20", "94.20", " ", " ", "NMSM, N-methyl-sulfamate, my"}, {"OG2P1", "SG3O1", "OG2P1", "130.00", "109.47", "35.0", "2.45", "LIPID methylsulfate"}, {"OG2P1", "SG3O1", "OG303", "85.00", "98.00", " ", " ", "LIPID methylsulfate"}, {"CG2R61", "SG3O2", "NG311", "70.00", "97.00", " ", " ", "MBSM, N-methylbenzenesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "SG3O2", "NG321", "60.00", "98.00", " ", " ", "BSAM, benzenesulfonamide, xxwy"}, {"CG2R61", "SG3O2", "OG2P1", "60.00", "101.00", " ", " ", "BSAM, benzenesulfonamide, xxwy"}, {"CG321", "SG3O2", "CG331", "80.00", "102.00", " ", " ", "MESN, methyl ethyl sulfone, xhe"}, {"CG321", "SG3O2", "NG311", "62.00", "101.00", " ", " ", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG321", "SG3O2", "OG2P1", "75.00", "107.50", " ", " ", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"CG331", "SG3O2", "CG331", "80.00", "102.00", " ", " ", "DMSN, dimethyl sulfone, xhe"}, {"CG331", "SG3O2", "NG311", "73.00", "103.00", " ", " ", "MMSM, N-methylmethanesulfonamide; PMSM, N-phenylmethanesulfonamide; xxwy"}, {"CG331", "SG3O2", "NG321", "83.00", "101.00", " ", " ", "MSAM, methanesulfonamide, xxwy"}, {"CG331", "SG3O2", "OG2P1", "79.00", "108.50", " ", " ", "DMSN, dimethyl sulfone; MSAM, methanesulfonamide and other sulfonamides; xxwy and xhe"}, {"CG331", "SG3O2", "OG303", "93.00", "96.00", " ", " ", "MMST, methyl methanesulfonate, xxwy"}, {"NG311", "SG3O2", "NG311", "83.10", "102.30", " ", " ", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"NG311", "SG3O2", "OG2P1", "75.00", "110.50", " ", " ", "MMSM, N-methylmethanesulfonamide and other sulfonamides, xxwy"}, {"NG321", "SG3O2", "OG2P1", "80.00", "111.00", " ", " ", "MSAM, methanesulfonamide; BSAM, benzenesulfonamide; xxwy"}, {"NG321", "SG3O2", "OG303", "100.00", "102.00", " ", " ", "MSMT, methyl sulfamate, and PSMT, xxwy"}, {"OG2P1", "SG3O2", "OG2P1", "85.00", "121.00", " ", " ", "DMSN, dimethyl sulfone; MSAM, methanesulfonamide and other sulfonamides; xxwy and xhe"}, {"OG2P1", "SG3O2", "OG303", "90.00", "109.00", " ", " ", "MMST, methyl methanesulfonate, xxwy"}, {"CG321", "SG3O3", "CG331", "85.00", "95.00", " ", " ", "MESO, methylethylsulfoxide, mnoon"}, {"CG321", "SG3O3", "OG2P1", "65.00", "106.50", " ", " ", "MESO, methylethylsulfoxide, mnoon"}, {"CG331", "SG3O3", "CG331", "34.00", "95.00", " ", " ", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"CG331", "SG3O3", "OG2P1", "79.00", "106.75", " ", " ", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"FGP1", "ALG1", "FGP1", "23.00", "109.47", "15.0", "2.81855", "aluminum tetrafluoride, ALF4, tetrahedral"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm36_cgenff info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm36_cgenff_dihedrals[3937][8]= {{"CG2R53", "CG251O", "CG25C1", "CG2R53", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG251O", "CG25C1", "CG2RC0", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG251O", "CG25C1", "CG2R53", "3.4000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"NG2R53", "CG251O", "CG25C1", "CG2RC0", "3.4000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"SG311", "CG251O", "CG25C1", "CG2R53", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"SG311", "CG251O", "CG25C1", "CG2RC0", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG251O", "CG2DC3", "HGA5", "3.9000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG251O", "CG2DC3", "HGA5", "4.6000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"SG311", "CG251O", "CG2DC3", "HGA5", "5.3000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG251O", "CG2R53", "NG2R53", "5.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG251O", "CG2R53", "OG2D1", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG251O", "CG2R53", "NG2R53", "0.2000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG251O", "CG2R53", "OG2D1", "0.8000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG251O", "CG2R53", "NG2R53", "0.2000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"NG2R53", "CG251O", "CG2R53", "OG2D1", "4.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"SG311", "CG251O", "CG2R53", "NG2R53", "1.2000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG311", "CG251O", "CG2R53", "OG2D1", "0.8000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG251O", "NG2R53", "CG2R53", "4.0000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"CG25C1", "CG251O", "NG2R53", "HGP1", "0.4000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"CG2DC3", "CG251O", "NG2R53", "CG2R53", "1.0000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2DC3", "CG251O", "NG2R53", "HGP1", "0.4000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "CG251O", "NG2R53", "CG2R53", "0.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "CG251O", "NG2R53", "HGP1", "0.4000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG25C1", "CG251O", "SG311", "CG2R53", "4.0000", "3", "0.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG251O", "SG311", "CG2R53", "0.2000", "3", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG251O", "SG311", "CG2R53", "1.2000", "3", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG252O", "CG25C2", "CG2R53", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG252O", "CG25C2", "CG2RC0", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG252O", "CG25C2", "CG2R53", "3.4000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"NG2R53", "CG252O", "CG25C2", "CG2RC0", "3.4000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"SG311", "CG252O", "CG25C2", "CG2R53", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"SG311", "CG252O", "CG25C2", "CG2RC0", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG252O", "CG2DC3", "HGA5", "3.9000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG252O", "CG2DC3", "HGA5", "4.6000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"SG311", "CG252O", "CG2DC3", "HGA5", "5.3000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C2", "CG252O", "CG2R53", "NG2R53", "5.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG25C2", "CG252O", "CG2R53", "OG2D1", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG252O", "CG2R53", "NG2R53", "0.2000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG252O", "CG2R53", "OG2D1", "0.8000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG252O", "CG2R53", "NG2R53", "0.2000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"NG2R53", "CG252O", "CG2R53", "OG2D1", "4.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"SG311", "CG252O", "CG2R53", "NG2R53", "1.2000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG311", "CG252O", "CG2R53", "OG2D1", "0.8000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C2", "CG252O", "NG2R53", "CG2R53", "4.0000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"CG25C2", "CG252O", "NG2R53", "HGP1", "0.4000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"CG2DC3", "CG252O", "NG2R53", "CG2R53", "1.0000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2DC3", "CG252O", "NG2R53", "HGP1", "0.4000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "CG252O", "NG2R53", "CG2R53", "0.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "CG252O", "NG2R53", "HGP1", "0.4000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG25C2", "CG252O", "SG311", "CG2R53", "4.0000", "3", "0.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG252O", "SG311", "CG2R53", "0.2000", "3", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG252O", "SG311", "CG2R53", "1.2000", "3", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG25C1", "CG2DC3", "HGA5", "4.4000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2RC0", "CG25C1", "CG2DC3", "HGA5", "4.4000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG251O", "CG25C1", "CG2R53", "NG2R51", "3.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG25C1", "CG2R53", "OG2D1", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG25C1", "CG2R53", "NG2R51", "0.1000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2DC3", "CG25C1", "CG2R53", "OG2D1", "1.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2RC0", "CG25C1", "CG2R53", "NG2R51", "1.2000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2RC0", "CG25C1", "CG2R53", "OG2D1", "1.2000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG251O", "CG25C1", "CG2RC0", "CG2R61", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG25C1", "CG2RC0", "CG2RC0", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG25C1", "CG2RC0", "CG2R61", "0.1000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2DC3", "CG25C1", "CG2RC0", "CG2RC0", "0.1000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C1", "CG2RC0", "CG2R61", "3.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C1", "CG2RC0", "CG2RC0", "3.5000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C2", "CG2DC3", "HGA5", "4.4000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2RC0", "CG25C2", "CG2DC3", "HGA5", "4.4000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG252O", "CG25C2", "CG2R53", "NG2R51", "3.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG25C2", "CG2R53", "OG2D1", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG25C2", "CG2R53", "NG2R51", "0.1000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2DC3", "CG25C2", "CG2R53", "OG2D1", "1.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2RC0", "CG25C2", "CG2R53", "NG2R51", "1.2000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2RC0", "CG25C2", "CG2R53", "OG2D1", "1.2000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG252O", "CG25C2", "CG2RC0", "CG2R61", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG25C2", "CG2RC0", "CG2RC0", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG25C2", "CG2RC0", "CG2R61", "0.1000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2DC3", "CG25C2", "CG2RC0", "CG2RC0", "0.1000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C2", "CG2RC0", "CG2R61", "3.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C2", "CG2RC0", "CG2RC0", "3.5000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG301", "CG2D1", "CG2D1", "CG321", "0.4500", "1", "180.00", "CHL1, cholesterol"}, {"CG301", "CG2D1", "CG2D1", "CG321", "8.5000", "2", "180.00", "CHL1, cholesterol"}, {"CG301", "CG2D1", "CG2D1", "CG331", "10.0000", "2", "180.00", "RETINOL TMCH"}, {"CG301", "CG2D1", "CG2D1", "HGA4", "1.0000", "2", "180.00", "LIPID 2-butene, adm jr., 8/98 update"}, {"CG321", "CG2D1", "CG2D1", "CG321", "0.4500", "1", "180.00", "LIPID 2-butene, adm jr., 4/04"}, {"CG321", "CG2D1", "CG2D1", "CG321", "8.5000", "2", "180.00", "LIPID"}, {"CG321", "CG2D1", "CG2D1", "CG331", "0.4500", "1", "180.00", "LIPID 2-butene, adm jr., 4/04"}, {"CG321", "CG2D1", "CG2D1", "CG331", "8.5000", "2", "180.00", "LIPID"}, {"CG321", "CG2D1", "CG2D1", "HGA4", "1.0000", "2", "180.00", "LIPID 2-butene, adm jr., 8/98 update"}, {"CG331", "CG2D1", "CG2D1", "CG331", "0.4500", "1", "180.00", "LIPID 2-butene, adm jr., 4/04"}, {"CG331", "CG2D1", "CG2D1", "CG331", "8.5000", "2", "180.00", "LIPID"}, {"CG331", "CG2D1", "CG2D1", "HGA4", "1.0000", "2", "180.00", "LIPID 2-butene, adm jr., 8/98 update"}, {"HGA4", "CG2D1", "CG2D1", "HGA4", "1.0000", "2", "180.00", "LIPID 2-butene, adm jr., 8/98 update"}, {"CG321", "CG2D1", "CG2D1O", "NG301", "3.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG321", "CG2D1", "CG2D1O", "NG311", "3.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG321", "CG2D1", "CG2D1O", "OG3R60", "3.0000", "2", "180.00", "PY01, 4h-pyran"}, {"CG321", "CG2D1", "CG2D1O", "HGA4", "6.0000", "2", "180.00", "PY01, 4h-pyran"}, {"HGA4", "CG2D1", "CG2D1O", "NG301", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1", "CG2D1O", "NG311", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1", "CG2D1O", "OG3R60", "8.0000", "2", "180.00", "PY01, 4h-pyran"}, {"HGA4", "CG2D1", "CG2D1O", "HGA4", "1.0000", "2", "180.00", "PY01, 4h-pyran"}, {"CG321", "CG2D1", "CG2D2", "HGA5", "5.2000", "2", "180.00", "LIPID propene, yin,adm jr., 12/95"}, {"CG331", "CG2D1", "CG2D2", "HGA5", "5.2000", "2", "180.00", "LIPID propene, yin,adm jr., 12/95"}, {"HGA4", "CG2D1", "CG2D2", "HGA5", "5.2000", "2", "180.00", "LIPID propene, yin,adm jr., 12/95"}, {"CG321", "CG2D1", "CG2D2O", "NG301", "3.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG321", "CG2D1", "CG2D2O", "NG311", "3.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG321", "CG2D1", "CG2D2O", "OG3R60", "3.0000", "2", "180.00", "PY01, 4h-pyran"}, {"CG321", "CG2D1", "CG2D2O", "HGA4", "6.0000", "2", "180.00", "PY01, 4h-pyran"}, {"HGA4", "CG2D1", "CG2D2O", "NG301", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1", "CG2D2O", "NG311", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1", "CG2D2O", "OG3R60", "8.0000", "2", "180.00", "PY01, 4h-pyran"}, {"HGA4", "CG2D1", "CG2D2O", "HGA4", "1.0000", "2", "180.00", "PY01, 4h-pyran"}, {"CG2D1", "CG2D1", "CG301", "CG311", "0.5000", "1", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG301", "CG311", "1.3000", "3", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG301", "CG321", "0.5000", "1", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG301", "CG321", "1.3000", "3", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG301", "CG331", "0.5000", "1", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG301", "CG331", "1.3000", "3", "180.00", "CHOLEST cholesterol"}, {"CG321", "CG2D1", "CG301", "CG311", "0.0000", "3", "180.00", "CHOLEST cholesterol"}, {"CG321", "CG2D1", "CG301", "CG321", "0.3000", "3", "180.00", "CHOLEST cholesterol"}, {"CG321", "CG2D1", "CG301", "CG331", "0.0000", "3", "180.00", "CHOLEST cholesterol"}, {"CG331", "CG2D1", "CG301", "CG321", "0.4000", "3", "0.00", "RETINOL TMCH"}, {"CG331", "CG2D1", "CG301", "CG331", "0.4000", "3", "0.00", "RETINOL TMCH"}, {"CG2D1", "CG2D1", "CG321", "CG2D1", "1.0000", "1", "180.00", "LIPID 2,5-diheptane"}, {"CG2D1", "CG2D1", "CG321", "CG2D1", "0.1000", "2", "0.00", "LIPID 2,5-diheptane"}, {"CG2D1", "CG2D1", "CG321", "CG2D1", "0.3000", "3", "180.00", "LIPID 2,5-diheptane"}, {"CG2D1", "CG2D1", "CG321", "CG2D1", "0.2000", "4", "0.00", "LIPID 2,5-diheptane"}, {"CG2D1", "CG2D1", "CG321", "CG311", "0.5000", "1", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG321", "CG311", "1.3000", "3", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG321", "CG321", "0.6000", "1", "180.00", "LIPID alkenes"}, {"CG2D1", "CG2D1", "CG321", "CG331", "0.9000", "1", "180.00", "LIPID alkenes"}, {"CG2D1", "CG2D1", "CG321", "CG331", "0.2000", "2", "180.00", "LIPID alkenes"}, {"CG2D1", "CG2D1", "CG321", "HGA2", "0.3000", "3", "180.00", "LIPID alkenes"}, {"CG2D1O", "CG2D1", "CG321", "CG2D1", "0.5000", "2", "0.00", "PY01, 4h-pyran"}, {"CG2D1O", "CG2D1", "CG321", "CG2D1", "0.4500", "4", "0.00", "PY01, 4h-pyran"}, {"CG2D1O", "CG2D1", "CG321", "CG2DC1", "0.0000", "3", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2D1O", "CG2D1", "CG321", "HGA2", "0.1000", "3", "0.00", "PY01, 4h-pyran"}, {"CG2D2", "CG2D1", "CG321", "CG2D1", "1.2000", "1", "180.00", "LIPID 1,4-dipentene"}, {"CG2D2", "CG2D1", "CG321", "CG2D1", "0.4000", "2", "180.00", "LIPID 1,4-dipentene"}, {"CG2D2", "CG2D1", "CG321", "CG2D1", "1.3000", "3", "180.00", "LIPID 1,4-dipentene"}, {"CG2D2", "CG2D1", "CG321", "CG331", "0.5000", "1", "180.00", "LIPID 1-butene, adm jr., 2/00 update"}, {"CG2D2", "CG2D1", "CG321", "CG331", "1.3000", "3", "180.00", "LIPID 1-butene, adm jr., 2/00 update"}, {"CG2D2", "CG2D1", "CG321", "OG311", "1.9000", "1", "180.00", "RETINOL PROL"}, {"CG2D2", "CG2D1", "CG321", "OG311", "0.4000", "2", "180.00", "RETINOL PROL"}, {"CG2D2", "CG2D1", "CG321", "OG311", "0.6000", "3", "180.00", "RETINOL PROL"}, {"CG2D2", "CG2D1", "CG321", "HGA2", "0.1200", "3", "0.00", "LIPID 1-butene, yin,adm jr., 12/95"}, {"CG2D2O", "CG2D1", "CG321", "CG2D1", "0.5000", "2", "0.00", "PY01, 4h-pyran"}, {"CG2D2O", "CG2D1", "CG321", "CG2D1", "0.4500", "4", "0.00", "PY01, 4h-pyran"}, {"CG2D2O", "CG2D1", "CG321", "CG2DC2", "0.0000", "3", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2D2O", "CG2D1", "CG321", "HGA2", "0.1000", "3", "0.00", "PY01, 4h-pyran"}, {"CG301", "CG2D1", "CG321", "CG311", "0.3000", "3", "180.00", "CHOLEST cholesterol"}, {"CG301", "CG2D1", "CG321", "HGA2", "0.0300", "3", "0.00", "CHOLEST cholesterol"}, {"CG331", "CG2D1", "CG321", "CG321", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG331", "CG2D1", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"HGA4", "CG2D1", "CG321", "CG2D1", "0.0000", "3", "0.00", "LIPID 1,4-dipentene"}, {"HGA4", "CG2D1", "CG321", "CG2DC1", "0.0000", "3", "0.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1", "CG321", "CG2DC2", "0.0000", "3", "0.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1", "CG321", "CG311", "0.0000", "3", "0.00", "CHOLEST cholesterol"}, {"HGA4", "CG2D1", "CG321", "CG321", "0.1200", "3", "0.00", "LIPID butene, yin,adm jr., 12/95"}, {"HGA4", "CG2D1", "CG321", "CG331", "0.1200", "3", "0.00", "LIPID butene, yin,adm jr., 12/95"}, {"HGA4", "CG2D1", "CG321", "OG311", "0.2000", "3", "0.00", "RETINOL PROL"}, {"HGA4", "CG2D1", "CG321", "HGA2", "0.0000", "3", "0.00", "LIPID butene, adm jr., 2/00 update"}, {"CG2D1", "CG2D1", "CG331", "HGA3", "0.3000", "3", "180.00", "LIPID alkenes"}, {"CG2D2", "CG2D1", "CG331", "HGA3", "0.0500", "3", "180.00", "LIPID propene, yin,adm jr., 12/95"}, {"CG301", "CG2D1", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL TMCH"}, {"CG321", "CG2D1", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL TMCH"}, {"NG2D1", "CG2D1", "CG331", "HGA3", "0.1000", "3", "180.00", "RETINOL SCH1, Schiff's base, deprotonated"}, {"NG2P1", "CG2D1", "CG331", "HGA3", "0.1500", "3", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGA4", "CG2D1", "CG331", "HGA3", "0.0000", "3", "0.00", "LIPID butene, adm jr., 2/00 update"}, {"HGR52", "CG2D1", "CG331", "HGA3", "0.1500", "3", "0.00", "RETINOL SCH2, Schiff's base, protonated"}, {"CG331", "CG2D1", "NG2D1", "CG321", "12.0000", "2", "180.00", "EEPI, from CG331 CG2D1 NG2D1 CG331, fylin"}, {"CG331", "CG2D1", "NG2D1", "CG331", "12.0000", "2", "180.00", "RETINOL SCH1, Schiff's base, deprotonated"}, {"CG331", "CG2D1", "NG2D1", "NG2S1", "12.0000", "2", "180.00", "HDZ1, hydrazone model cmpd"}, {"HGA4", "CG2D1", "NG2D1", "CG321", "8.5000", "2", "180.00", "EEPI, from HGA4 CG2D1 NG2D1 CG331, fylin"}, {"HGA4", "CG2D1", "NG2D1", "CG331", "8.5000", "2", "180.00", "RETINOL SCH1, Schiff's base, deprotonated"}, {"HGA4", "CG2D1", "NG2D1", "NG2S1", "4.0000", "2", "180.00", "HDZ1, hydrazone model cmpd"}, {"CG331", "CG2D1", "NG2P1", "CG334", "7.0000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"CG331", "CG2D1", "NG2P1", "HGP2", "5.0000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGR52", "CG2D1", "NG2P1", "CG334", "8.5000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGR52", "CG2D1", "NG2P1", "HGP2", "5.0000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"NG321", "CG2D1O", "CG2D2", "HGA5", "2.0000", "2", "180.00", "AMET, ethenamine, 1.0->2.0 to improve molvib; pram"}, {"OG301", "CG2D1O", "CG2D2", "HGA5", "9.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"HGA4", "CG2D1O", "CG2D2", "HGA5", "2.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"NG301", "CG2D1O", "CG2DC1", "CG2O1", "2.5000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG301", "CG2D1O", "CG2DC1", "CG321", "2.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"NG311", "CG2D1O", "CG2DC1", "CG2O1", "2.5000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG311", "CG2D1O", "CG2DC1", "CG321", "2.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"OG301", "CG2D1O", "CG2DC1", "CG2DC2", "1.5000", "1", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"OG301", "CG2D1O", "CG2DC1", "CG2DC2", "15.0000", "2", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"OG301", "CG2D1O", "CG2DC1", "HGA4", "3.0000", "2", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"OG3R60", "CG2D1O", "CG2DC1", "CG2DC2", "2.0000", "2", "180.00", "PY02, 2h-pyran"}, {"OG3R60", "CG2D1O", "CG2DC1", "HGA4", "7.0000", "2", "180.00", "PY02, 2h-pyran"}, {"HGA4", "CG2D1O", "CG2DC1", "CG2DC2", "6.0000", "2", "180.00", "PY02, 2h-pyran"}, {"HGA4", "CG2D1O", "CG2DC1", "CG2O1", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1O", "CG2DC1", "CG321", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1O", "CG2DC1", "HGA4", "2.5000", "2", "180.00", "PY02, 2h-pyran"}, {"CG2D1", "CG2D1O", "NG301", "CG2D1O", "0.1000", "2", "180.00", "NADH, NDPH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D1O", "NG301", "CG3C51", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC1", "CG2D1O", "NG301", "CG2D1O", "0.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG2DC1", "CG2D1O", "NG301", "CG3C51", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D1O", "NG301", "CG2D1O", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D1O", "NG301", "CG3C51", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D1O", "NG311", "CG2D1O", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D1O", "NG311", "HGPAM1", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC1", "CG2D1O", "NG311", "CG2D1O", "0.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG2DC1", "CG2D1O", "NG311", "HGPAM1", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D1O", "NG311", "CG2D1O", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D1O", "NG311", "HGPAM1", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D2", "CG2D1O", "NG321", "HGPAM2", "1.7000", "1", "0.00", "1.66 w/o 4-fold; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"CG2D2", "CG2D1O", "NG321", "HGPAM2", "3.0600", "2", "180.00", "3.02 w/o 4-fold; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"CG2D2", "CG2D1O", "NG321", "HGPAM2", "0.2300", "3", "180.00", "0.24 w/o 4-fold; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"CG2D2", "CG2D1O", "NG321", "HGPAM2", "0.1200", "4", "0.00", "needed for OOP but poorly transferable; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"HGA4", "CG2D1O", "NG321", "HGPAM2", "0.1600", "3", "0.00", "AMET, ethenamine; from MAM1, methylamine; kevo"}, {"CG2D2", "CG2D1O", "OG301", "CG331", "0.9000", "1", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D1O", "OG301", "CG331", "3.1000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D1O", "OG301", "CG331", "1.2000", "3", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2DC1", "CG2D1O", "OG301", "CG331", "0.8000", "1", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2DC1", "CG2D1O", "OG301", "CG331", "3.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2DC1", "CG2D1O", "OG301", "CG331", "1.1000", "3", "180.00", "MOET, Methoxyethene, xxwy"}, {"HGA4", "CG2D1O", "OG301", "CG331", "0.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2D1", "CG2D1O", "OG3R60", "CG2D1O", "3.0000", "2", "180.00", "PY01, 4h-pyran seems reasonable - kevo"}, {"CG2D1", "CG2D1O", "OG3R60", "CG2D2O", "3.0000", "2", "180.00", "PY01, 4h-pyran seems reasonable - kevo"}, {"CG2DC1", "CG2D1O", "OG3R60", "CG321", "2.0000", "2", "0.00", "PY02, 2h-pyran seems reasonable - kevo"}, {"HGA4", "CG2D1O", "OG3R60", "CG2D1O", "0.0000", "2", "180.00", "PY01, 4h-pyran; re-initialized from MOET, Methoxyethene; kevo"}, {"HGA4", "CG2D1O", "OG3R60", "CG2D2O", "0.0000", "2", "180.00", "PY01, 4h-pyran; re-initialized from MOET, Methoxyethene; kevo"}, {"HGA4", "CG2D1O", "OG3R60", "CG321", "0.0000", "2", "180.00", "PY02, 2h-pyran; re-initialized from MOET, Methoxyethene; kevo"}, {"HGA5", "CG2D2", "CG2D2", "HGA5", "4.9000", "2", "180.00", "LIPID ethene, yin,adm jr., 12/95"}, {"HGA5", "CG2D2", "CG2D2O", "NG321", "2.0000", "2", "180.00", "AMET, ethenamine, 1.0->2.0 to improve molvib; pram"}, {"HGA5", "CG2D2", "CG2D2O", "OG301", "9.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"HGA5", "CG2D2", "CG2D2O", "HGA4", "2.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"NG301", "CG2D2O", "CG2DC2", "CG2O1", "2.5000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG301", "CG2D2O", "CG2DC2", "CG321", "2.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"NG311", "CG2D2O", "CG2DC2", "CG2O1", "2.5000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG311", "CG2D2O", "CG2DC2", "CG321", "2.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"OG301", "CG2D2O", "CG2DC2", "CG2DC1", "1.5000", "1", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"OG301", "CG2D2O", "CG2DC2", "CG2DC1", "15.0000", "2", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"OG301", "CG2D2O", "CG2DC2", "HGA4", "3.0000", "2", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"OG3R60", "CG2D2O", "CG2DC2", "CG2DC1", "2.0000", "2", "180.00", "PY02, 2h-pyran"}, {"OG3R60", "CG2D2O", "CG2DC2", "HGA4", "7.0000", "2", "180.00", "PY02, 2h-pyran"}, {"HGA4", "CG2D2O", "CG2DC2", "CG2DC1", "6.0000", "2", "180.00", "PY02, 2h-pyran"}, {"HGA4", "CG2D2O", "CG2DC2", "CG2O1", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D2O", "CG2DC2", "CG321", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D2O", "CG2DC2", "HGA4", "2.5000", "2", "180.00", "PY02, 2h-pyran"}, {"CG2D1", "CG2D2O", "NG301", "CG2D2O", "0.1000", "2", "180.00", "NADH, NDPH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D2O", "NG301", "CG3C51", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC2", "CG2D2O", "NG301", "CG2D2O", "0.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG2DC2", "CG2D2O", "NG301", "CG3C51", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D2O", "NG301", "CG2D2O", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D2O", "NG301", "CG3C51", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D2O", "NG311", "CG2D2O", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D2O", "NG311", "HGPAM1", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC2", "CG2D2O", "NG311", "CG2D2O", "0.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG2DC2", "CG2D2O", "NG311", "HGPAM1", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D2O", "NG311", "CG2D2O", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D2O", "NG311", "HGPAM1", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D2", "CG2D2O", "NG321", "HGPAM2", "1.7000", "1", "0.00", "1.66 w/o 4-fold; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"CG2D2", "CG2D2O", "NG321", "HGPAM2", "3.0600", "2", "180.00", "3.02 w/o 4-fold; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"CG2D2", "CG2D2O", "NG321", "HGPAM2", "0.2300", "3", "180.00", "0.24 w/o 4-fold; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"CG2D2", "CG2D2O", "NG321", "HGPAM2", "0.1200", "4", "0.00", "needed for OOP but poorly transferable; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"HGA4", "CG2D2O", "NG321", "HGPAM2", "0.1600", "3", "0.00", "AMET, ethenamine; from MAM1, methylamine; kevo"}, {"CG2D2", "CG2D2O", "OG301", "CG331", "0.9000", "1", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D2O", "OG301", "CG331", "3.1000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D2O", "OG301", "CG331", "1.2000", "3", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2DC2", "CG2D2O", "OG301", "CG331", "0.8000", "1", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2DC2", "CG2D2O", "OG301", "CG331", "3.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2DC2", "CG2D2O", "OG301", "CG331", "1.1000", "3", "180.00", "MOET, Methoxyethene, xxwy"}, {"HGA4", "CG2D2O", "OG301", "CG331", "0.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2D1", "CG2D2O", "OG3R60", "CG2D1O", "3.0000", "2", "180.00", "PY01, 4h-pyran seems reasonable - kevo"}, {"CG2D1", "CG2D2O", "OG3R60", "CG2D2O", "3.0000", "2", "180.00", "PY01, 4h-pyran seems reasonable - kevo"}, {"CG2DC2", "CG2D2O", "OG3R60", "CG321", "2.0000", "2", "0.00", "PY02, 2h-pyran seems reasonable - kevo"}, {"HGA4", "CG2D2O", "OG3R60", "CG2D1O", "0.0000", "2", "180.00", "PY01, 4h-pyran; re-initialized from MOET, Methoxyethene; kevo"}, {"HGA4", "CG2D2O", "OG3R60", "CG2D2O", "0.0000", "2", "180.00", "PY01, 4h-pyran; re-initialized from MOET, Methoxyethene; kevo"}, {"HGA4", "CG2D2O", "OG3R60", "CG321", "0.0000", "2", "180.00", "PY02, 2h-pyran; re-initialized from MOET, Methoxyethene; kevo"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2DC2", "0.5600", "1", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2DC2", "7.0000", "2", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2O1", "0.5600", "1", "180.00", "RETINOL FRET"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2O1", "7.0000", "2", "180.00", "RETINOL FRET"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2O3", "0.5600", "1", "180.00", "RETINOL PRAC"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2O3", "7.0000", "2", "180.00", "RETINOL PRAC"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2O4", "0.5600", "1", "180.00", "RETINOL RTAL unmodified"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2O4", "7.0000", "2", "180.00", "RETINOL RTAL unmodified"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG321", "0.5600", "1", "180.00", "RETINOL MECH"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG321", "7.0000", "2", "180.00", "RETINOL MECH"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG331", "0.5600", "1", "180.00", "RETINOL 13DP, 1,3-Pentadiene"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG331", "7.0000", "2", "180.00", "RETINOL 13DP, 1,3-Pentadiene"}, {"CG2DC2", "CG2DC1", "CG2DC1", "HGA4", "5.2000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2O1", "CG2DC1", "CG2DC1", "CG331", "0.5600", "1", "180.00", "RETINOL CROT"}, {"CG2O1", "CG2DC1", "CG2DC1", "CG331", "7.0000", "2", "180.00", "RETINOL CROT"}, {"CG2O3", "CG2DC1", "CG2DC1", "CG331", "0.5600", "1", "180.00", "RETINOL PRAC"}, {"CG2O3", "CG2DC1", "CG2DC1", "CG331", "7.0000", "2", "180.00", "RETINOL PRAC"}, {"CG2O4", "CG2DC1", "CG2DC1", "CG331", "0.5600", "1", "180.00", "RETINOL RTAL"}, {"CG2O4", "CG2DC1", "CG2DC1", "CG331", "7.0000", "2", "180.00", "RETINOL RTAL Kenno: 0.5 -> 7.0 for the sake of transferability"}, {"CG301", "CG2DC1", "CG2DC1", "CG321", "10.0000", "2", "180.00", "RETINOL TMCH"}, {"CG301", "CG2DC1", "CG2DC1", "CG331", "10.0000", "2", "180.00", "RETINOL MECH"}, {"CG321", "CG2DC1", "CG2DC1", "CG331", "10.0000", "2", "180.00", "RETINOL BTE2, 2-butene"}, {"CG321", "CG2DC1", "CG2DC1", "HGA4", "5.2000", "2", "180.00", "PY02, 2h-pyran; re-initialized from BTE2, 2-butene; kevo"}, {"CG331", "CG2DC1", "CG2DC1", "HGA4", "5.2000", "2", "180.00", "RETINOL BTE2, 2-butene"}, {"HGA4", "CG2DC1", "CG2DC1", "HGA4", "5.2000", "2", "180.00", "RETINOL BTE2, 2-butene"}, {"CG2D1O", "CG2DC1", "CG2DC2", "CG2DC2", "1.5000", "1", "180.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2D1O", "CG2DC1", "CG2DC2", "CG2DC2", "1.0000", "2", "180.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2D1O", "CG2DC1", "CG2DC2", "CG2DC2", "1.5000", "3", "0.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2D1O", "CG2DC1", "CG2DC2", "CG2DC3", "1.5000", "1", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2D1O", "CG2DC1", "CG2DC2", "CG2DC3", "1.0000", "2", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2D1O", "CG2DC1", "CG2DC2", "CG2DC3", "1.5000", "3", "0.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2D1O", "CG2DC1", "CG2DC2", "HGA4", "1.0000", "2", "180.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2D2O", "1.5000", "1", "180.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2D2O", "1.0000", "2", "180.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2D2O", "1.5000", "3", "0.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2DC2", "0.5000", "1", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2DC2", "2.0000", "2", "0.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2DC2", "1.0000", "3", "0.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2DC3", "0.5000", "1", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2DC3", "2.0000", "2", "0.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2DC3", "1.0000", "3", "0.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG301", "0.9000", "1", "0.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG301", "2.1000", "2", "180.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG301", "0.2200", "3", "0.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG301", "0.2500", "5", "180.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG301", "0.1000", "6", "0.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG331", "1.1000", "1", "180.00", "RETINOL DMP2, 2-methyl-1,3-pentadiene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG331", "0.7000", "2", "180.00", "RETINOL DMP2, 2-methyl-1,3-pentadiene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "HGA4", "1.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2D2O", "1.5000", "1", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2D2O", "1.0000", "2", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2D2O", "1.5000", "3", "0.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2DC2", "0.5000", "1", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2DC2", "2.0000", "2", "0.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2DC2", "1.0000", "3", "0.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2DC3", "0.4000", "1", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2DC3", "0.4000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2DC3", "1.3000", "3", "0.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG301", "0.9000", "1", "0.00", "RETINOL MECH"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG301", "2.1000", "2", "180.00", "RETINOL MECH"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG301", "0.2200", "3", "0.00", "RETINOL MECH"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG301", "0.2500", "5", "180.00", "RETINOL MECH"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG301", "0.1000", "6", "0.00", "RETINOL MECH"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG331", "1.1000", "1", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG331", "0.7000", "2", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "NG2P1", "0.5000", "1", "0.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC3", "CG2DC1", "CG2DC2", "NG2P1", "2.2000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC3", "CG2DC1", "CG2DC2", "NG2P1", "1.1000", "3", "0.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC3", "CG2DC1", "CG2DC2", "NG2P1", "0.6000", "4", "0.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC3", "CG2DC1", "CG2DC2", "HGA4", "1.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "HGR52", "1.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC2", "0.9000", "1", "0.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC2", "2.1000", "2", "180.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC2", "0.2200", "3", "0.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC2", "0.2500", "5", "180.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC2", "0.1000", "6", "0.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC3", "0.9000", "1", "0.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC3", "2.1000", "2", "180.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC3", "0.2200", "3", "0.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC3", "0.2500", "5", "180.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC3", "0.1000", "6", "0.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "HGA4", "1.0000", "2", "180.00", "RETINOL MECH"}, {"CG331", "CG2DC1", "CG2DC2", "CG2DC2", "1.1000", "1", "180.00", "RETINOL DMP2, 2-methyl-1,3-pentadiene"}, {"CG331", "CG2DC1", "CG2DC2", "CG2DC2", "0.7000", "2", "180.00", "RETINOL DMP2, 2-methyl-1,3-pentadiene"}, {"CG331", "CG2DC1", "CG2DC2", "CG2DC3", "1.1000", "1", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG331", "CG2DC1", "CG2DC2", "CG2DC3", "0.7000", "2", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG331", "CG2DC1", "CG2DC2", "HGA4", "1.0000", "2", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"NG2P1", "CG2DC1", "CG2DC2", "CG2DC3", "0.5000", "1", "0.00", "RETINOL SCH3, Schiff's base, protonated"}, {"NG2P1", "CG2DC1", "CG2DC2", "CG2DC3", "2.2000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"NG2P1", "CG2DC1", "CG2DC2", "CG2DC3", "1.1000", "3", "0.00", "RETINOL SCH3, Schiff's base, protonated"}, {"NG2P1", "CG2DC1", "CG2DC2", "CG2DC3", "0.6000", "4", "0.00", "RETINOL SCH3, Schiff's base, protonated"}, {"NG2P1", "CG2DC1", "CG2DC2", "HGA4", "1.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"HGA4", "CG2DC1", "CG2DC2", "CG2D2O", "1.0000", "2", "180.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"HGA4", "CG2DC1", "CG2DC2", "CG2DC2", "1.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"HGA4", "CG2DC1", "CG2DC2", "CG2DC3", "1.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"HGA4", "CG2DC1", "CG2DC2", "CG301", "1.0000", "2", "180.00", "RETINOL MECH"}, {"HGA4", "CG2DC1", "CG2DC2", "CG331", "1.0000", "2", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"HGA4", "CG2DC1", "CG2DC2", "NG2P1", "1.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"HGA4", "CG2DC1", "CG2DC2", "HGA4", "0.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"HGA4", "CG2DC1", "CG2DC2", "HGR52", "0.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"HGR52", "CG2DC1", "CG2DC2", "CG2DC3", "1.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"HGR52", "CG2DC1", "CG2DC2", "HGA4", "0.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC2", "CG2DC1", "CG2DC3", "HGA5", "5.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2O3", "CG2DC1", "CG2DC3", "HGA5", "4.2000", "2", "180.00", "RETINOL PRAC"}, {"CG2O4", "CG2DC1", "CG2DC3", "HGA5", "3.2000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2O5", "CG2DC1", "CG2DC3", "HGA5", "3.2000", "2", "180.00", "BEON, butenone; from PRAL, acrolein; mcs"}, {"CG2R61", "CG2DC1", "CG2DC3", "HGA5", "3.5000", "2", "180.00", "STYR, styrene, xxwy and oashi"}, {"CG331", "CG2DC1", "CG2DC3", "HGA5", "5.2000", "2", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"HGA4", "CG2DC1", "CG2DC3", "HGA5", "5.2000", "2", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2D1O", "CG2DC1", "CG2O1", "NG2S2", "1.1000", "1", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2D1O", "CG2DC1", "CG2O1", "NG2S2", "1.9500", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2D1O", "CG2DC1", "CG2O1", "OG2D1", "0.3000", "1", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2D1O", "CG2DC1", "CG2O1", "OG2D1", "1.9500", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2DC1", "CG2DC1", "CG2O1", "NG2S1", "0.7000", "1", "0.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "NG2S1", "1.2000", "2", "180.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "NG2S1", "0.1000", "3", "0.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "NG2S1", "0.1500", "4", "0.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "OG2D1", "0.7000", "1", "180.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "OG2D1", "1.2000", "2", "180.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "OG2D1", "0.1000", "3", "180.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "OG2D1", "0.2000", "4", "0.00", "RETINOL CROT"}, {"CG321", "CG2DC1", "CG2O1", "NG2S2", "0.5000", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC1", "CG2O1", "NG2S2", "0.3500", "3", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC1", "CG2O1", "NG2S2", "0.4000", "6", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC1", "CG2O1", "OG2D1", "1.0000", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC1", "CG2O1", "OG2D1", "1.0000", "3", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC1", "CG2O1", "OG2D1", "0.4000", "6", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"HGA4", "CG2DC1", "CG2O1", "NG2S1", "0.3000", "3", "180.00", "RETINOL CROT"}, {"HGA4", "CG2DC1", "CG2O1", "OG2D1", "0.3000", "3", "180.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O3", "OG2D2", "1.3000", "2", "180.00", "RETINOL PRAC"}, {"CG2DC3", "CG2DC1", "CG2O3", "OG2D2", "1.3000", "2", "180.00", "RETINOL PRAC"}, {"HGA4", "CG2DC1", "CG2O3", "OG2D2", "0.0000", "2", "180.00", "RETINOL PRAC"}, {"CG2DC1", "CG2DC1", "CG2O4", "OG2D1", "1.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC1", "CG2DC1", "CG2O4", "HGR52", "3.2000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC1", "CG2O4", "OG2D1", "1.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC1", "CG2O4", "HGR52", "3.2000", "2", "180.00", "RETINOL PRAL unmodified"}, {"HGA4", "CG2DC1", "CG2O4", "OG2D1", "0.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"HGA4", "CG2DC1", "CG2O4", "HGR52", "0.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC1", "CG2O5", "CG331", "1.4000", "2", "180.00", "BEON, butenone, kevo"}, {"CG2DC3", "CG2DC1", "CG2O5", "OG2D3", "1.4000", "2", "180.00", "BEON, butenone, kevo"}, {"HGA4", "CG2DC1", "CG2O5", "CG331", "0.0000", "2", "180.00", "BEON, butenone, from PRAL, acrolein; mcs"}, {"HGA4", "CG2DC1", "CG2O5", "OG2D3", "0.0000", "2", "180.00", "BEON, butenone, from PRAL, acrolein; mcs"}, {"CG2DC3", "CG2DC1", "CG2R61", "CG2R61", "0.7500", "2", "180.00", "STYR, styrene, xxwy and oashi"}, {"CG2DC3", "CG2DC1", "CG2R61", "CG2R61", "0.1900", "4", "0.00", "STYR, styrene, xxwy and oashi"}, {"NG2D1", "CG2DC1", "CG2R61", "CG2R61", "1.6000", "2", "180.00", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"HGA4", "CG2DC1", "CG2R61", "CG2R61", "0.6000", "2", "180.00", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"CG2DC1", "CG2DC1", "CG301", "CG321", "0.5000", "2", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG2DC1", "CG301", "CG321", "0.3000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG2DC1", "CG301", "CG331", "0.5000", "2", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG2DC1", "CG301", "CG331", "0.4000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG2DC1", "CG301", "CG321", "0.3000", "3", "0.00", "RETINOL MECH"}, {"CG2DC2", "CG2DC1", "CG301", "CG331", "0.3000", "3", "0.00", "RETINOL MECH"}, {"CG2D1O", "CG2DC1", "CG321", "CG2D1", "0.0000", "3", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2D1O", "CG2DC1", "CG321", "HGA2", "0.0000", "3", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2DC1", "CG2DC1", "CG321", "CG321", "0.5000", "2", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG2DC1", "CG321", "CG321", "0.3000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG2DC1", "CG321", "OG311", "1.9000", "1", "180.00", "RETINOL PROL"}, {"CG2DC1", "CG2DC1", "CG321", "OG311", "0.4000", "2", "180.00", "RETINOL PROL"}, {"CG2DC1", "CG2DC1", "CG321", "OG311", "0.6000", "3", "180.00", "RETINOL PROL"}, {"CG2DC1", "CG2DC1", "CG321", "OG3R60", "0.7000", "3", "0.00", "PY02, 2h-pyran"}, {"CG2DC1", "CG2DC1", "CG321", "HGA2", "0.0300", "3", "0.00", "RETINOL PROL"}, {"CG2O1", "CG2DC1", "CG321", "CG2D1", "0.0000", "3", "0.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2O1", "CG2DC1", "CG321", "HGA2", "0.0000", "3", "0.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG331", "CG2DC1", "CG321", "CG321", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG331", "CG2DC1", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"HGA4", "CG2DC1", "CG321", "OG311", "0.2000", "3", "0.00", "RETINOL PROL"}, {"HGA4", "CG2DC1", "CG321", "OG3R60", "0.2000", "3", "0.00", "PY02, 2h-pyran; re-initialized from PROL, 3-propenol; kevo"}, {"HGA4", "CG2DC1", "CG321", "HGA2", "0.2000", "3", "0.00", "RETINOL PROL"}, {"CG2DC1", "CG2DC1", "CG331", "HGA3", "0.3000", "3", "180.00", "RETINOL BTE2, 2-butene @@@@@ Kenno: 0 --> 180 to fix minimum @@@@@"}, {"CG2DC2", "CG2DC1", "CG331", "HGA3", "0.3000", "3", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC3", "CG2DC1", "CG331", "HGA3", "0.3000", "3", "0.00", "RETINOL DMP2, 2-methyl-1,3-pentadiene"}, {"CG321", "CG2DC1", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL MECH"}, {"CG331", "CG2DC1", "CG331", "HGA3", "0.3000", "3", "0.00", "RETINOL DMP1, 4-methyl-1,3-pentadiene"}, {"HGA4", "CG2DC1", "CG331", "HGA3", "0.0000", "3", "0.00", "RETINOL BTE2, 2-butene @@@@@ Kenno: 0.3 --> 0.0 to fix planarity around CG2DCx @@@@@"}, {"CG2R61", "CG2DC1", "NG2D1", "NG2S1", "12.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"HGA4", "CG2DC1", "NG2D1", "NG2S1", "4.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC2", "CG2DC1", "NG2P1", "CG334", "7.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC2", "CG2DC1", "NG2P1", "HGP2", "5.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"HGR52", "CG2DC1", "NG2P1", "CG334", "8.5000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGR52", "CG2DC1", "NG2P1", "HGP2", "5.0000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2DC1", "0.5600", "1", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2DC1", "7.0000", "2", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2O1", "0.5600", "1", "180.00", "RETINOL FRET"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2O1", "7.0000", "2", "180.00", "RETINOL FRET"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2O3", "0.5600", "1", "180.00", "RETINOL PRAC"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2O3", "7.0000", "2", "180.00", "RETINOL PRAC"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2O4", "0.5600", "1", "180.00", "RETINOL RTAL unmodified"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2O4", "7.0000", "2", "180.00", "RETINOL RTAL unmodified"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG321", "0.5600", "1", "180.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG321", "7.0000", "2", "180.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG331", "0.5600", "1", "180.00", "RETINOL 13DP, 1,3-Pentadiene"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG331", "7.0000", "2", "180.00", "RETINOL 13DP, 1,3-Pentadiene"}, {"CG2DC1", "CG2DC2", "CG2DC2", "HGA4", "5.2000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2O1", "CG2DC2", "CG2DC2", "CG331", "0.5600", "1", "180.00", "RETINOL CROT"}, {"CG2O1", "CG2DC2", "CG2DC2", "CG331", "7.0000", "2", "180.00", "RETINOL CROT"}, {"CG2O3", "CG2DC2", "CG2DC2", "CG331", "0.5600", "1", "180.00", "RETINOL PRAC"}, {"CG2O3", "CG2DC2", "CG2DC2", "CG331", "7.0000", "2", "180.00", "RETINOL PRAC"}, {"CG2O4", "CG2DC2", "CG2DC2", "CG331", "0.5600", "1", "180.00", "RETINOL RTAL"}, {"CG2O4", "CG2DC2", "CG2DC2", "CG331", "7.0000", "2", "180.00", "RETINOL RTAL Kenno: 0.5 -> 7.0 for the sake of transferability"}, {"CG301", "CG2DC2", "CG2DC2", "CG321", "10.0000", "2", "180.00", "RETINOL TMCH"}, {"CG301", "CG2DC2", "CG2DC2", "CG331", "10.0000", "2", "180.00", "RETINOL MECH"}, {"CG321", "CG2DC2", "CG2DC2", "CG331", "10.0000", "2", "180.00", "RETINOL BTE2, 2-butene"}, {"CG321", "CG2DC2", "CG2DC2", "HGA4", "5.2000", "2", "180.00", "PY02, 2h-pyran; re-initialized from BTE2, 2-butene; kevo"}, {"CG331", "CG2DC2", "CG2DC2", "HGA4", "5.2000", "2", "180.00", "RETINOL BTE2, 2-butene"}, {"HGA4", "CG2DC2", "CG2DC2", "HGA4", "5.2000", "2", "180.00", "RETINOL BTE2, 2-butene"}, {"CG2DC1", "CG2DC2", "CG2DC3", "HGA5", "5.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2O3", "CG2DC2", "CG2DC3", "HGA5", "4.2000", "2", "180.00", "RETINOL PRAC"}, {"CG2O4", "CG2DC2", "CG2DC3", "HGA5", "3.2000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2O5", "CG2DC2", "CG2DC3", "HGA5", "3.2000", "2", "180.00", "BEON, butenone; from PRAL, acrolein; mcs"}, {"CG2R61", "CG2DC2", "CG2DC3", "HGA5", "3.5000", "2", "180.00", "STYR, styrene, xxwy and oashi"}, {"CG331", "CG2DC2", "CG2DC3", "HGA5", "5.2000", "2", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"HGA4", "CG2DC2", "CG2DC3", "HGA5", "5.2000", "2", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2D2O", "CG2DC2", "CG2O1", "NG2S2", "1.1000", "1", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2D2O", "CG2DC2", "CG2O1", "NG2S2", "1.9500", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2D2O", "CG2DC2", "CG2O1", "OG2D1", "0.3000", "1", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2D2O", "CG2DC2", "CG2O1", "OG2D1", "1.9500", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2DC2", "CG2DC2", "CG2O1", "NG2S1", "0.7000", "1", "0.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "NG2S1", "1.2000", "2", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "NG2S1", "0.1000", "3", "0.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "NG2S1", "0.1500", "4", "0.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "OG2D1", "0.7000", "1", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "OG2D1", "1.2000", "2", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "OG2D1", "0.1000", "3", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "OG2D1", "0.2000", "4", "0.00", "RETINOL CROT"}, {"CG321", "CG2DC2", "CG2O1", "NG2S2", "0.5000", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC2", "CG2O1", "NG2S2", "0.3500", "3", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC2", "CG2O1", "NG2S2", "0.4000", "6", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC2", "CG2O1", "OG2D1", "1.0000", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC2", "CG2O1", "OG2D1", "1.0000", "3", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC2", "CG2O1", "OG2D1", "0.4000", "6", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"HGA4", "CG2DC2", "CG2O1", "NG2S1", "0.3000", "3", "180.00", "RETINOL CROT"}, {"HGA4", "CG2DC2", "CG2O1", "OG2D1", "0.3000", "3", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O3", "OG2D2", "1.3000", "2", "180.00", "RETINOL PRAC"}, {"CG2DC3", "CG2DC2", "CG2O3", "OG2D2", "1.3000", "2", "180.00", "RETINOL PRAC"}, {"HGA4", "CG2DC2", "CG2O3", "OG2D2", "0.0000", "2", "180.00", "RETINOL PRAC"}, {"CG2DC2", "CG2DC2", "CG2O4", "OG2D1", "1.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC2", "CG2DC2", "CG2O4", "HGR52", "3.2000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC2", "CG2O4", "OG2D1", "1.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC2", "CG2O4", "HGR52", "3.2000", "2", "180.00", "RETINOL PRAL unmodified"}, {"HGA4", "CG2DC2", "CG2O4", "OG2D1", "0.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"HGA4", "CG2DC2", "CG2O4", "HGR52", "0.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC2", "CG2O5", "CG331", "1.4000", "2", "180.00", "BEON, butenone, kevo"}, {"CG2DC3", "CG2DC2", "CG2O5", "OG2D3", "1.4000", "2", "180.00", "BEON, butenone, kevo"}, {"HGA4", "CG2DC2", "CG2O5", "CG331", "0.0000", "2", "180.00", "BEON, butenone, from PRAL, acrolein; mcs"}, {"HGA4", "CG2DC2", "CG2O5", "OG2D3", "0.0000", "2", "180.00", "BEON, butenone, from PRAL, acrolein; mcs"}, {"CG2DC3", "CG2DC2", "CG2R61", "CG2R61", "0.7500", "2", "180.00", "STYR, styrene, xxwy and oashi"}, {"CG2DC3", "CG2DC2", "CG2R61", "CG2R61", "0.1900", "4", "0.00", "STYR, styrene, xxwy and oashi"}, {"NG2D1", "CG2DC2", "CG2R61", "CG2R61", "1.6000", "2", "180.00", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"HGA4", "CG2DC2", "CG2R61", "CG2R61", "0.6000", "2", "180.00", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"CG2DC1", "CG2DC2", "CG301", "CG321", "0.3000", "3", "0.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC2", "CG301", "CG331", "0.3000", "3", "0.00", "RETINOL MECH"}, {"CG2DC2", "CG2DC2", "CG301", "CG321", "0.5000", "2", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG2DC2", "CG301", "CG321", "0.3000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG2DC2", "CG301", "CG331", "0.5000", "2", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG2DC2", "CG301", "CG331", "0.4000", "3", "0.00", "RETINOL TMCH"}, {"CG2D2O", "CG2DC2", "CG321", "CG2D1", "0.0000", "3", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2D2O", "CG2DC2", "CG321", "HGA2", "0.0000", "3", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2DC2", "CG2DC2", "CG321", "CG321", "0.5000", "2", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG2DC2", "CG321", "CG321", "0.3000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG2DC2", "CG321", "OG311", "1.9000", "1", "180.00", "RETINOL PROL"}, {"CG2DC2", "CG2DC2", "CG321", "OG311", "0.4000", "2", "180.00", "RETINOL PROL"}, {"CG2DC2", "CG2DC2", "CG321", "OG311", "0.6000", "3", "180.00", "RETINOL PROL"}, {"CG2DC2", "CG2DC2", "CG321", "OG3R60", "0.7000", "3", "0.00", "PY02, 2h-pyran"}, {"CG2DC2", "CG2DC2", "CG321", "HGA2", "0.0300", "3", "0.00", "RETINOL PROL"}, {"CG2O1", "CG2DC2", "CG321", "CG2D1", "0.0000", "3", "0.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2O1", "CG2DC2", "CG321", "HGA2", "0.0000", "3", "0.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG331", "CG2DC2", "CG321", "CG321", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG331", "CG2DC2", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"HGA4", "CG2DC2", "CG321", "OG311", "0.2000", "3", "0.00", "RETINOL PROL"}, {"HGA4", "CG2DC2", "CG321", "OG3R60", "0.2000", "3", "0.00", "PY02, 2h-pyran; re-initialized from PROL, 3-propenol; kevo"}, {"HGA4", "CG2DC2", "CG321", "HGA2", "0.2000", "3", "0.00", "RETINOL PROL"}, {"CG2DC1", "CG2DC2", "CG331", "HGA3", "0.3000", "3", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC2", "CG2DC2", "CG331", "HGA3", "0.3000", "3", "180.00", "RETINOL BTE2, 2-butene @@@@@ Kenno: 0 --> 180 to fix minimum @@@@@"}, {"CG2DC3", "CG2DC2", "CG331", "HGA3", "0.3000", "3", "0.00", "RETINOL DMP2, 2-methyl-1,3-pentadiene"}, {"CG321", "CG2DC2", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL MECH"}, {"CG331", "CG2DC2", "CG331", "HGA3", "0.3000", "3", "0.00", "RETINOL DMP1, 4-methyl-1,3-pentadiene"}, {"HGA4", "CG2DC2", "CG331", "HGA3", "0.0000", "3", "0.00", "RETINOL BTE2, 2-butene @@@@@ Kenno: 0.3 --> 0.0 to fix planarity around CG2DCx @@@@@"}, {"CG2R61", "CG2DC2", "NG2D1", "NG2S1", "12.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"HGA4", "CG2DC2", "NG2D1", "NG2S1", "4.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC1", "CG2DC2", "NG2P1", "CG334", "7.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC1", "CG2DC2", "NG2P1", "HGP2", "5.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"HGR52", "CG2DC2", "NG2P1", "CG334", "8.5000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGR52", "CG2DC2", "NG2P1", "HGP2", "5.0000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"NG311", "CG2N1", "NG2D1", "HGP1", "5.2000", "2", "180.00", "MGU2, methylguanidine2"}, {"NG321", "CG2N1", "NG2D1", "CG331", "6.5000", "2", "180.00", "MGU1, methylguanidine"}, {"NG321", "CG2N1", "NG2D1", "HGP1", "5.2000", "2", "180.00", "MGU2, methylguanidine2"}, {"NG2P1", "CG2N1", "NG2P1", "CG324", "2.2500", "2", "180.00", "PROT 9.0->2.25 GUANIDINIUM (KK)"}, {"NG2P1", "CG2N1", "NG2P1", "CG334", "2.2500", "2", "180.00", "PROT 9.0->2.25 GUANIDINIUM (KK)"}, {"NG2P1", "CG2N1", "NG2P1", "HGP2", "2.2500", "2", "180.00", "PROT 9.0->2.25 GUANIDINIUM (KK)"}, {"NG2D1", "CG2N1", "NG311", "CG331", "0.5000", "2", "180.00", "MGU2, methylguanidine2"}, {"NG2D1", "CG2N1", "NG311", "HGPAM1", "2.8000", "2", "180.00", "MGU2, methylguanidine2 kevo: 3 --> 2 (counteracting forces). May benefit optimization."}, {"NG321", "CG2N1", "NG311", "CG331", "0.5000", "2", "180.00", "MGU2, methylguanidine2"}, {"NG321", "CG2N1", "NG311", "HGPAM1", "2.8000", "2", "180.00", "MGU2, methylguanidine2 kevo: 3 --> 2 (counteracting forces). May benefit optimization."}, {"NG2D1", "CG2N1", "NG321", "HGPAM2", "0.2000", "2", "180.00", "MGU1, methylguanidine; MGU2, methylguanidine2 kevo: new. Needs to be further optimized."}, {"NG2D1", "CG2N1", "NG321", "HGPAM2", "0.1500", "6", "0.00", "MGU1, methylguanidine; MGU2, methylguanidine2 kevo: new. Needs to be further optimized."}, {"NG311", "CG2N1", "NG321", "HGPAM2", "0.2000", "2", "180.00", "MGU2, methylguanidine2 kevo: new. Needs to be further optimized."}, {"NG311", "CG2N1", "NG321", "HGPAM2", "0.1500", "6", "0.00", "MGU2, methylguanidine2 kevo: new. Needs to be further optimized."}, {"NG321", "CG2N1", "NG321", "HGPAM2", "0.2000", "2", "180.00", "MGU1, methylguanidine kevo: new. Needs to be further optimized."}, {"NG321", "CG2N1", "NG321", "HGPAM2", "0.1500", "6", "0.00", "MGU1, methylguanidine kevo: new. Needs to be further optimized."}, {"NG2P1", "CG2N2", "CG2R61", "CG2R61", "0.8200", "2", "180.00", "BAMI, benzamidinium, sz (verified by pram)"}, {"NG2P1", "CG2N2", "CG2R61", "CG2R61", "0.2900", "4", "0.00", "BAMI, benzamidinium, sz (verified by pram)"}, {"NG2P1", "CG2N2", "CG2R61", "CG2R61", "0.0900", "6", "0.00", "BAMI, benzamidinium, sz (verified by pram)"}, {"NG2P1", "CG2N2", "CG331", "HGA3", "0.2500", "3", "0.00", "AMDN, amidinium amidinium, mp2 scan, pram"}, {"NG321", "CG2N2", "NG2D1", "CG321", "6.5000", "2", "180.00", "MT2A , from NG321 CG2N1 NG2D1 CG331, fylin"}, {"SG311", "CG2N2", "NG2D1", "CG321", "2.3600", "1", "180.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG2D1", "CG321", "2.0800", "2", "180.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG2D1", "CG321", "0.0600", "3", "0.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG2D1", "CG321", "1.0700", "4", "180.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG2D1", "CG321", "0.2800", "6", "0.00", "MT2A, fylin"}, {"CG2R61", "CG2N2", "NG2P1", "HGP2", "2.0000", "2", "180.00", "BAMI, benzamidinium, mp2 scan, pram"}, {"CG331", "CG2N2", "NG2P1", "HGP2", "3.5000", "2", "180.00", "AMDN, amidinium, mp2 scan, pram"}, {"NG2P1", "CG2N2", "NG2P1", "HGP2", "3.5000", "2", "180.00", "AMDN, amidinium, mp2 scan, pram"}, {"NG2D1", "CG2N2", "NG321", "HGPAM2", "0.2000", "2", "180.00", "MT2A , from NG2D1 CG2N1 NG321 HGPAM2, fylin"}, {"NG2D1", "CG2N2", "NG321", "HGPAM2", "0.1500", "6", "0.00", "MT2A , from NG2D1 CG2N1 NG321 HGPAM2, fylin"}, {"SG311", "CG2N2", "NG321", "HGPAM2", "0.0200", "1", "180.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG321", "HGPAM2", "2.8700", "2", "180.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG321", "HGPAM2", "0.1200", "3", "0.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG321", "HGPAM2", "0.2000", "4", "180.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG321", "HGPAM2", "0.2000", "6", "180.00", "MT2A, fylin"}, {"NG2D1", "CG2N2", "SG311", "CG321", "1.1200", "2", "180.00", "DH3T, fylin"}, {"NG2D1", "CG2N2", "SG311", "CG331", "1.1200", "2", "180.00", "MT2A, fylin"}, {"NG321", "CG2N2", "SG311", "CG321", "0.6400", "1", "180.00", "DH3T, fylin"}, {"NG321", "CG2N2", "SG311", "CG321", "1.1200", "2", "180.00", "DH3T, fylin"}, {"NG321", "CG2N2", "SG311", "CG321", "0.3300", "4", "0.00", "DH3T, fylin"}, {"NG321", "CG2N2", "SG311", "CG331", "0.6400", "1", "180.00", "MT2A, fylin"}, {"NG321", "CG2N2", "SG311", "CG331", "1.1200", "2", "180.00", "MT2A, fylin"}, {"NG321", "CG2N2", "SG311", "CG331", "0.3300", "4", "0.00", "MT2A, fylin"}, {"NG2S1", "CG2O1", "CG2R61", "CG2R61", "1.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"NG2S1", "CG2O1", "CG2R61", "CG2RC0", "1.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"NG2S2", "CG2O1", "CG2R61", "CG2R61", "1.0000", "2", "180.00", "3NAP, nicotinamide (PYRIDINE pyr-CONH2), yin"}, {"OG2D1", "CG2O1", "CG2R61", "CG2R61", "1.0000", "2", "180.00", "3NAP, nicotinamide (PYRIDINE pyr-CONH2), yin"}, {"OG2D1", "CG2O1", "CG2R61", "CG2RC0", "1.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"NG2S2", "CG2O1", "CG2R62", "CG2R62", "0.3500", "1", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"NG2S2", "CG2O1", "CG2R62", "CG2R62", "0.6200", "2", "0.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"OG2D1", "CG2O1", "CG2R62", "CG2R62", "2.3800", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"NG2S0", "CG2O1", "CG311", "CG311", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG311", "CG321", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG311", "CG323", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG311", "CG331", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG311", "NG2S1", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG311", "HGA1", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG311", "CG311", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG311", "CG321", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG311", "CG323", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG311", "CG331", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG311", "NG2S1", "0.6000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93"}, {"NG2S1", "CG2O1", "CG311", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"NG2S2", "CG2O1", "CG311", "CG311", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG311", "CG321", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG311", "CG323", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG311", "CG331", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG311", "NG2S1", "0.6000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93"}, {"NG2S2", "CG2O1", "CG311", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"OG2D1", "CG2O1", "CG311", "CG311", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG311", "CG321", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG311", "CG323", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG311", "CG331", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG311", "NG2S1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"OG2D1", "CG2O1", "CG311", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"NG2S0", "CG2O1", "CG314", "CG311", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG314", "CG321", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG314", "CG323", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG314", "CG331", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG314", "NG3P3", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG314", "HGA1", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG314", "CG311", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG314", "CG321", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG314", "CG323", "0.0000", "1", "0.00", "NOT OPTIMIZED! PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG314", "CG331", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG314", "NG3P3", "0.6000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93"}, {"NG2S1", "CG2O1", "CG314", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"NG2S2", "CG2O1", "CG314", "CG311", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG314", "CG321", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG314", "CG323", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG314", "CG331", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG314", "NG3P3", "0.6000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93"}, {"NG2S2", "CG2O1", "CG314", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"OG2D1", "CG2O1", "CG314", "CG311", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG314", "CG321", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG314", "CG323", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG314", "CG331", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG314", "NG3P3", "0.0000", "1", "0.00", "PROT Backbone parameter set made complete RLD 8/8/90"}, {"OG2D1", "CG2O1", "CG314", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"NG2S0", "CG2O1", "CG321", "CG331", "1.5000", "1", "0.00", "DMPR, dimethylpropanamide, mnoon"}, {"NG2S0", "CG2O1", "CG321", "NG2S1", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG321", "HGA2", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG321", "CG321", "0.0000", "1", "0.00", "PROT from NG2S1 CG2O1 CG311 CT2, for lactams, adm jr."}, {"NG2S1", "CG2O1", "CG321", "NG2S1", "0.6000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93"}, {"NG2S1", "CG2O1", "CG321", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"NG2S1", "CG2O1", "CG321", "HGA2", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"NG2S2", "CG2O1", "CG321", "CG311", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"NG2S2", "CG2O1", "CG321", "CG314", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"NG2S2", "CG2O1", "CG321", "CG321", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"NG2S2", "CG2O1", "CG321", "CG331", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"NG2S2", "CG2O1", "CG321", "NG2S1", "0.6000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93"}, {"NG2S2", "CG2O1", "CG321", "HGA2", "0.0000", "3", "180.00", "PROT adm jr., 8/13/90 geometry and vibrations"}, {"OG2D1", "CG2O1", "CG321", "CG311", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D1", "CG2O1", "CG321", "CG314", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D1", "CG2O1", "CG321", "CG321", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D1", "CG2O1", "CG321", "CG331", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D1", "CG2O1", "CG321", "NG2S1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"OG2D1", "CG2O1", "CG321", "HGA2", "0.0000", "3", "180.00", "PROT adm jr., 8/13/90 geometry and vibrations"}, {"NG2S0", "CG2O1", "CG324", "NG3P3", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG324", "HGA2", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG324", "NG3P3", "0.4000", "1", "0.00", "PROT adm jr. 3/24/92, for PRES GLYP"}, {"NG2S1", "CG2O1", "CG324", "HGA2", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"NG2S2", "CG2O1", "CG324", "NG3P3", "0.4000", "1", "0.00", "PROT adm jr. 3/24/92, for PRES GLYP"}, {"NG2S2", "CG2O1", "CG324", "HGA2", "0.0000", "3", "180.00", "PROT adm jr., 8/13/90 geometry and vibrations"}, {"OG2D1", "CG2O1", "CG324", "NG3P3", "0.0000", "1", "0.00", "PROT Backbone parameter set made complete RLD 8/8/90"}, {"OG2D1", "CG2O1", "CG324", "HGA2", "0.0000", "3", "180.00", "PROT adm jr., 8/13/90 geometry and vibrations"}, {"NG2S0", "CG2O1", "CG331", "HGA3", "0.0000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG331", "HGA3", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"NG2S2", "CG2O1", "CG331", "HGA3", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"OG2D1", "CG2O1", "CG331", "HGA3", "0.0000", "3", "180.00", "PROT adm jr., 8/13/90 geometry and vibrations"}, {"NG2S0", "CG2O1", "CG3C51", "CG3C52", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C51", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C51", "NG2S0", "0.3000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C51", "NG2S0", "-0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C51", "HGA1", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C51", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C51", "CG3C52", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C51", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C51", "NG2S0", "0.3000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C51", "NG2S0", "-0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C51", "HGA1", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C51", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C51", "CG3C52", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C51", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C51", "NG2S0", "0.3000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C51", "NG2S0", "-0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C51", "HGA1", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C51", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C51", "CG3C52", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C51", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C51", "NG2S0", "-0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C51", "HGA1", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C51", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C53", "CG3C52", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C53", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C53", "NG3P2", "0.3000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C53", "HGA1", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C53", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C53", "CG3C52", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C53", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C53", "NG3P2", "0.3000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C53", "HGA1", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C53", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C53", "CG3C52", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C53", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C53", "NG3P2", "0.3000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C53", "HGA1", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C53", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C53", "CG3C52", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C53", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C53", "NG3P2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C53", "HGA1", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C53", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG314", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG314", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG314", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG314", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG321", "CG2O1", "NG2S0", "CG331", "2.6000", "2", "180.00", "DMPR, dimethylpropanamide; from DMF, Dimethylformamide; kevo"}, {"CG321", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG321", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG321", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG321", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG324", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG324", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG324", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG324", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG331", "CG2O1", "NG2S0", "CG331", "2.6000", "2", "180.00", "DMF, Dimethylformamide, xxwy"}, {"CG331", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG331", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG331", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG331", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "NG2S0", "CG331", "2.6000", "2", "180.00", "DMF, Dimethylformamide, xxwy"}, {"OG2D1", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGR52", "CG2O1", "NG2S0", "CG331", "2.6000", "2", "180.00", "DMF, Dimethylformamide, xxwy"}, {"CG2DC1", "CG2O1", "NG2S1", "CG2R61", "1.6000", "1", "0.00", "RETINOL FRET"}, {"CG2DC1", "CG2O1", "NG2S1", "CG2R61", "2.5000", "2", "180.00", "RETINOL FRET"}, {"CG2DC1", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "RETINOL CROT"}, {"CG2DC1", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "RETINOL CROT"}, {"CG2DC1", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2O1", "NG2S1", "CG2R61", "1.6000", "1", "0.00", "RETINOL FRET"}, {"CG2DC2", "CG2O1", "NG2S1", "CG2R61", "2.5000", "2", "180.00", "RETINOL FRET"}, {"CG2DC2", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "RETINOL CROT"}, {"CG2DC2", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "RETINOL CROT"}, {"CG2R61", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "3CPD, Gamma-3-Amide Pyridine Lysine CDCA Amide; from HDZ2, hydrazone model cmpd 2; cacha"}, {"CG2R61", "CG2O1", "NG2S1", "CG321", "4.0000", "2", "180.00", "3CPD, Gamma-3-Amide Pyridine Lysine CDCA Amide; from HDZ2, hydrazone model cmpd 2; cacha"}, {"CG2R61", "CG2O1", "NG2S1", "NG2D1", "1.6000", "1", "0.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2R61", "CG2O1", "NG2S1", "NG2D1", "4.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2R61", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG311", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG311", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG311", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG311", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG311", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG311", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG311", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG314", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG314", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG314", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG314", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG314", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG314", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG314", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG321", "CG2O1", "NG2S1", "CG2R61", "1.6000", "1", "0.00", "3APP, Alpha-Benzyl Gamma-3-Amino Pyridine GA CDCA Amide, cacha"}, {"CG321", "CG2O1", "NG2S1", "CG2R61", "2.5000", "2", "180.00", "3APP, Alpha-Benzyl Gamma-3-Amino Pyridine GA CDCA Amide, cacha"}, {"CG321", "CG2O1", "NG2S1", "CG2R64", "1.6000", "1", "0.00", "2APP, Alpha-Benzyl Gamma-2-Amino Pyridine GA CDCA Amide, cacha"}, {"CG321", "CG2O1", "NG2S1", "CG2R64", "2.5000", "2", "180.00", "2APP, Alpha-Benzyl Gamma-2-Amino Pyridine GA CDCA Amide, cacha"}, {"CG321", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG321", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG321", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG321", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG321", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT from CG321 CG2O1 NG2S1 CT2, adm jr. 10/21/96"}, {"CG321", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT from CG321 CG2O1 NG2S1 CT2, adm jr. 10/21/96"}, {"CG321", "CG2O1", "NG2S1", "NG2D1", "0.9000", "1", "0.00", "PMHA, hydrazone-containing model compound:, sz"}, {"CG321", "CG2O1", "NG2S1", "NG2D1", "3.5000", "2", "180.00", "PMHA, hydrazone-containing model compound: HDZ1, hydrazone model cmpd, sz"}, {"CG321", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG324", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG324", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG324", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG324", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG324", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT from CG321 CG2O1 NG2S1 CT2, adm jr. 10/21/96"}, {"CG324", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT from CG321 CG2O1 NG2S1 CT2, adm jr. 10/21/96"}, {"CG324", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG331", "CG2O1", "NG2S1", "CG2R61", "1.6000", "1", "0.00", "RETINOL PACP 1-fold added by kevo"}, {"CG331", "CG2O1", "NG2S1", "CG2R61", "2.5000", "2", "180.00", "RETINOL PACP"}, {"CG331", "CG2O1", "NG2S1", "CG2R64", "1.6000", "1", "0.00", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"CG331", "CG2O1", "NG2S1", "CG2R64", "2.5000", "2", "180.00", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"CG331", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG331", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG331", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT for acetylated GLY N-terminus, adm jr."}, {"CG331", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT for acetylated GLY N-terminus, adm jr."}, {"CG331", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG331", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG331", "CG2O1", "NG2S1", "NG2D1", "0.9000", "1", "0.00", "HDZ1, hydrazone model cmpd"}, {"CG331", "CG2O1", "NG2S1", "NG2D1", "3.5000", "2", "180.00", "HDZ1, hydrazone model cmpd"}, {"CG331", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG3C51", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "NG2S1", "CG2R61", "2.5000", "2", "180.00", "RETINOL PACP"}, {"OG2D1", "CG2O1", "NG2S1", "CG2R64", "2.5000", "2", "180.00", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"OG2D1", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"OG2D1", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"OG2D1", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"OG2D1", "CG2O1", "NG2S1", "NG2D1", "2.5000", "2", "180.00", "HDZ1, hydrazone model cmpd"}, {"OG2D1", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG2DC1", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC2", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R61", "CG2O1", "NG2S2", "HGP1", "1.0000", "2", "180.00", "3NAP, nicotamide (PYRIDINE pyr-CONH2), yin"}, {"CG2R62", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG311", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG314", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG321", "CG2O1", "NG2S2", "HGP1", "1.4000", "2", "180.00", "PROT adm jr. 4/10/91, acetamide update"}, {"CG324", "CG2O1", "NG2S2", "HGP1", "1.4000", "2", "180.00", "PROT adm jr. 4/10/91, acetamide update"}, {"CG331", "CG2O1", "NG2S2", "HGP1", "1.4000", "2", "180.00", "PROT adm jr. 4/10/91, acetamide update"}, {"CG3C51", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "NG2S2", "HGP1", "1.4000", "2", "180.00", "PROT adm jr. 4/10/91, acetamide update"}, {"HGR52", "CG2O1", "NG2S2", "HGP1", "1.4000", "2", "180.00", "PROT, formamide"}, {"OG2D1", "CG2O2", "CG2R61", "CG2R61", "1.0250", "2", "180.00", "ZOIC, benzoic acid, MBOA, methylbenzoate, jal"}, {"OG302", "CG2O2", "CG2R61", "CG2R61", "0.8500", "2", "180.00", "MBOA, methylbenzoate, jal"}, {"OG311", "CG2O2", "CG2R61", "CG2R61", "1.0250", "2", "180.00", "ZOIC, benzoic acid, jal"}, {"OG2D1", "CG2O2", "CG311", "CG321", "0.0500", "6", "180.00", "AMGA, Alpha Methyl Tert Butyl Glu Acid, cacha, 05/06 ! corrected kevo, 01/08"}, {"OG2D1", "CG2O2", "CG311", "NG2R53", "0.0000", "1", "0.00", "drug design project, xxwy"}, {"OG2D1", "CG2O2", "CG311", "NG2S1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"OG2D1", "CG2O2", "CG311", "HGA1", "0.0000", "3", "0.00", "AMGA, Alpha Methyl Glu Acid CDCA Amide, cacha, 03/06"}, {"OG302", "CG2O2", "CG311", "CG321", "0.0500", "6", "180.00", "AMGA, Alpha Methyl Glu Acid CDCA Amide, cacha"}, {"OG302", "CG2O2", "CG311", "NG2R53", "0.0000", "1", "0.00", "B5HE, B5H6 ethyl ester, xxwy"}, {"OG302", "CG2O2", "CG311", "NG2S1", "0.0000", "1", "0.00", "AMGA, Alpha Methyl Glut Acid CDCA Amide, cacha, 05/06"}, {"OG302", "CG2O2", "CG311", "HGA1", "0.0000", "1", "0.00", "AMGA, Alpha Methyl Glut Acid CDCA Amide, cacha, 05/06"}, {"OG311", "CG2O2", "CG311", "CG321", "0.0500", "6", "180.00", "drug design project, xxwy"}, {"OG311", "CG2O2", "CG311", "NG2R53", "0.0000", "1", "0.00", "drug design project, xxwy"}, {"OG311", "CG2O2", "CG311", "HGA1", "0.0500", "6", "180.00", "drug design project, xxwy"}, {"OG2D1", "CG2O2", "CG321", "CG311", "0.0000", "6", "180.00", "576P, standard param [0.05 also acceptable]"}, {"OG2D1", "CG2O2", "CG321", "CG321", "0.0500", "6", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "CG321", "CG331", "0.0500", "6", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "CG321", "NG321", "0.0000", "6", "180.00", "PROT adm jr. 3/19/92, from lipid methyl acetate"}, {"OG2D1", "CG2O2", "CG321", "HGA2", "0.0000", "6", "180.00", "PROT adm jr. 3/19/92, from lipid methyl acetate; LIPID acetic Acid"}, {"OG302", "CG2O2", "CG321", "CG321", "0.5300", "2", "180.00", "LIPID methyl propionate, 12/92"}, {"OG302", "CG2O2", "CG321", "CG331", "-0.1500", "1", "180.00", "LIPID methyl propionate, 12/92"}, {"OG302", "CG2O2", "CG321", "HGA2", "0.0000", "3", "0.00", "LIPID acetic Acid"}, {"OG311", "CG2O2", "CG321", "CG311", "0.0000", "6", "180.00", "576P, standard param [0.05 also acceptable]"}, {"OG311", "CG2O2", "CG321", "NG321", "0.0000", "6", "180.00", "PROT adm jr. 3/19/92, from lipid methyl acetate"}, {"OG311", "CG2O2", "CG321", "HGA2", "0.0000", "6", "180.00", "PROT adm jr. 3/19/92, from lipid methyl acetate"}, {"OG2D1", "CG2O2", "CG331", "HGA3", "0.0000", "6", "180.00", "PROT adm jr. 3/19/92, from lipid methyl acetate; LIPID acetic Acid"}, {"OG302", "CG2O2", "CG331", "HGA3", "0.0000", "3", "0.00", "LIPID acetic Acid"}, {"OG311", "CG2O2", "CG331", "HGA3", "0.0000", "6", "180.00", "PROT adm jr. 3/19/92, from lipid methyl acetate"}, {"CG2R61", "CG2O2", "OG302", "CG331", "1.2500", "1", "180.00", "MBOA, methylbenzoate, jal"}, {"CG2R61", "CG2O2", "OG302", "CG331", "1.5000", "2", "180.00", "MBOA, methylbenzoate, jal"}, {"CG2R61", "CG2O2", "OG302", "CG331", "0.0500", "6", "180.00", "MBOA, methylbenzoate, jal"}, {"CG311", "CG2O2", "OG302", "CG301", "2.0500", "2", "180.00", "ATGM, GAMMA METHYL ALPHA TERT BUTYL GLU ACID CDCA AMIDE, cacha"}, {"CG311", "CG2O2", "OG302", "CG321", "2.0500", "2", "180.00", "ABGA, ALPHA BENZYL GLU ACID CDCA AMIDE, cacha"}, {"CG311", "CG2O2", "OG302", "CG331", "2.0500", "2", "180.00", "AMGA, Alpha Methyl Glu Acid CDCA Amide, cacha"}, {"CG321", "CG2O2", "OG302", "CG301", "2.0500", "2", "180.00", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide, cacha"}, {"CG321", "CG2O2", "OG302", "CG311", "2.0500", "2", "180.00", "LIPID methyl acetate"}, {"CG321", "CG2O2", "OG302", "CG321", "2.0500", "2", "180.00", "LIPID methyl acetate ! corrected kevo, 01/08"}, {"CG321", "CG2O2", "OG302", "CG331", "2.0500", "2", "180.00", "LIPID methyl acetate ! corrected kevo, 01/08"}, {"CG331", "CG2O2", "OG302", "CG311", "2.0500", "2", "180.00", "LIPID methyl acetate"}, {"CG331", "CG2O2", "OG302", "CG321", "2.0500", "2", "180.00", "LIPID methyl acetate"}, {"CG331", "CG2O2", "OG302", "CG331", "2.0500", "2", "180.00", "LIPID methyl acetate ! corrected kevo, 01/08"}, {"OG2D1", "CG2O2", "OG302", "CG301", "0.9650", "1", "180.00", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide !cacha,corrected kevo, 01/08"}, {"OG2D1", "CG2O2", "OG302", "CG301", "3.8500", "2", "180.00", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide !cacha,corrected kevo, 01/08"}, {"OG2D1", "CG2O2", "OG302", "CG311", "0.9650", "1", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "OG302", "CG311", "3.8500", "2", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "OG302", "CG321", "0.9650", "1", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "OG302", "CG321", "3.8500", "2", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "OG302", "CG331", "0.9650", "1", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "OG302", "CG331", "3.8500", "2", "180.00", "LIPID methyl acetate ! corrected kevo, 01/08"}, {"CG2R61", "CG2O2", "OG311", "HGP1", "0.9750", "1", "180.00", "ZOIC, benzoic acid, jal"}, {"CG2R61", "CG2O2", "OG311", "HGP1", "2.7000", "2", "180.00", "ZOIC, benzoic acid, jal"}, {"CG2R61", "CG2O2", "OG311", "HGP1", "0.0500", "3", "180.00", "ZOIC, benzoic acid, jal"}, {"CG2R61", "CG2O2", "OG311", "HGP1", "0.2500", "6", "180.00", "ZOIC, benzoic acid, jal"}, {"CG311", "CG2O2", "OG311", "HGP1", "2.0500", "2", "180.00", "drug design project, xxwy"}, {"CG321", "CG2O2", "OG311", "HGP1", "2.0500", "2", "180.00", "PROT adm jr, 10/17/90, acetic Acid C-Oh rotation barrier"}, {"CG331", "CG2O2", "OG311", "HGP1", "2.0500", "2", "180.00", "PROT adm jr, 10/17/90, acetic Acid C-Oh rotation barrier"}, {"OG2D1", "CG2O2", "OG311", "HGP1", "2.0500", "2", "180.00", "PROT adm jr, 10/17/90, acetic Acid C-Oh rotation barrier"}, {"HGR52", "CG2O2", "OG311", "HGP1", "3.4500", "2", "180.00", "FORH, formic acid, xxwy"}, {"OG2D2", "CG2O3", "CG2O5", "CG2R61", "0.3000", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml"}, {"OG2D2", "CG2O3", "CG2O5", "OG2D3", "0.3000", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml"}, {"OG2D2", "CG2O3", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"OG2D2", "CG2O3", "CG301", "CG331", "0.0500", "6", "180.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG2D2", "CG2O3", "CG301", "OG301", "0.5500", "2", "180.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG2D2", "CG2O3", "CG301", "OG311", "1.1100", "2", "180.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG2D2", "CG2O3", "CG311", "CG2R61", "0.0000", "1", "0.00", "FBIF, Fatty acid Binding protein Inhibitor F, cacha. Was 3.1 2 180 ==> reset by kevo. re-optimize!!!"}, {"OG2D2", "CG2O3", "CG311", "CG311", "0.0500", "6", "180.00", "PROT C-terminal AA - standard parameter"}, {"OG2D2", "CG2O3", "CG311", "CG321", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG311", "CG331", "0.0500", "6", "180.00", "deleteme DELETEME (we want to use wildcarting)"}, {"OG2D2", "CG2O3", "CG311", "NG2R53", "0.0000", "1", "0.00", "drug design project, xxwy"}, {"OG2D2", "CG2O3", "CG311", "NG2S1", "0.0000", "6", "180.00", "GA, Glut Acid CDCA Amide, cacha"}, {"OG2D2", "CG2O3", "CG311", "OG301", "0.5500", "2", "180.00", "og amop mp2/ccpvtz"}, {"OG2D2", "CG2O3", "CG311", "HGA1", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG314", "CG311", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG314", "CG321", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG314", "CG331", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG314", "NG3P3", "3.2000", "2", "180.00", "PROT adm jr. 4/17/94, zwitterionic glycine"}, {"OG2D2", "CG2O3", "CG314", "HGA1", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG321", "CG311", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG321", "CG314", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG321", "CG321", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG321", "CG331", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG321", "NG2S1", "0.0500", "6", "180.00", "GCA, Glycocholic Acid, cacha, 03/06"}, {"OG2D2", "CG2O3", "CG321", "HGA2", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG324", "NG3P3", "3.2000", "2", "180.00", "PROT adm jr. 4/17/94, zwitterionic glycine"}, {"OG2D2", "CG2O3", "CG324", "HGA2", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG331", "HGA3", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG3C51", "CG3C52", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D2", "CG2O3", "CG3C51", "NG2S0", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D2", "CG2O3", "CG3C51", "HGA1", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D2", "CG2O3", "CG3C53", "CG3C52", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D2", "CG2O3", "CG3C53", "NG3P2", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D2", "CG2O3", "CG3C53", "HGA1", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O4", "CG2R61", "CG2R61", "1.0800", "2", "180.00", "ALDEHYDE benzaldehyde unmodified"}, {"HGR52", "CG2O4", "CG2R61", "CG2R61", "1.0800", "2", "180.00", "ALDEHYDE benzaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CG331", "1.0500", "1", "180.00", "ALDEHYDE propionaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CG331", "0.4000", "2", "180.00", "ALDEHYDE propionaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CG331", "0.6000", "3", "180.00", "ALDEHYDE propionaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CG331", "0.1000", "4", "180.00", "ALDEHYDE propionaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CLGA1", "0.1000", "1", "0.00", "ALDEHYDE chloracetaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CLGA1", "1.0000", "2", "180.00", "ALDEHYDE chloracetaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CLGA1", "0.5500", "3", "180.00", "ALDEHYDE chloracetaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "HGA2", "0.0000", "3", "180.00", "PALD, Propionaldehyde, PROT adm jr. 3/19/92, from lipid methyl acetate (unmodified because this may not be analogous to AALD)"}, {"HGR52", "CG2O4", "CG321", "CG331", "0.0000", "3", "180.00", "PALD, Propionaldehyde, PROT adm jr. 3/19/92, from lipid methyl acetate unmodified"}, {"HGR52", "CG2O4", "CG321", "CLGA1", "0.0000", "3", "180.00", "CALD, Chloroacetaldehyde, PROT adm jr. 3/19/92, from lipid methyl acetate unmodified"}, {"HGR52", "CG2O4", "CG321", "HGA2", "0.0000", "3", "180.00", "acetaldehyde, adm 11/08"}, {"OG2D1", "CG2O4", "CG331", "HGA3", "0.2000", "3", "180.00", "AALD, acetaldehyde, adm 11/08"}, {"HGR52", "CG2O4", "CG331", "HGA3", "0.0000", "3", "180.00", "acetaldehyde, adm 11/08"}, {"CG2O3", "CG2O5", "CG2R61", "CG2R61", "1.5850", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml; verified by mcs"}, {"CG311", "CG2O5", "CG2R61", "CG2R61", "1.5850", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml"}, {"CG321", "CG2O5", "CG2R61", "CG2R61", "0.2700", "2", "180.00", "PHEK, phenyl ethyl ketone, mcs"}, {"CG331", "CG2O5", "CG2R61", "CG2R61", "0.2500", "2", "180.00", "PHMK, phenyl methyl ketone, mcs"}, {"OG2D3", "CG2O5", "CG2R61", "CG2R61", "1.5850", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml; verified by mcs"}, {"CG2R61", "CG2O5", "CG311", "OG311", "0.0000", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml"}, {"CG2R61", "CG2O5", "CG311", "OG312", "0.0000", "2", "0.00", "BIPHENYL ANALOGS unmodified, peml"}, {"CG2R61", "CG2O5", "CG311", "HGA1", "0.0000", "1", "180.00", "BIPHENYL ANALOGS unmodified, peml"}, {"OG2D3", "CG2O5", "CG311", "OG311", "0.0000", "2", "0.00", "reverted to BIPHENYL ANALOGS unmodified, peml"}, {"OG2D3", "CG2O5", "CG311", "OG312", "0.0000", "2", "180.00", "reverted to BIPHENYL ANALOGS unmodified, peml"}, {"OG2D3", "CG2O5", "CG311", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK) unmodified"}, {"CG2R61", "CG2O5", "CG321", "CG331", "0.4000", "1", "0.00", "PHEK, phenyl ethyl ketone, mcs"}, {"CG2R61", "CG2O5", "CG321", "CG331", "0.1700", "2", "180.00", "PHEK, phenyl ethyl ketone, mcs"}, {"CG2R61", "CG2O5", "CG321", "CG331", "0.1300", "3", "180.00", "PHEK, phenyl ethyl ketone, mcs"}, {"CG2R61", "CG2O5", "CG321", "CG331", "0.1000", "6", "180.00", "PHEK, phenyl ethyl ketone, mcs"}, {"CG2R61", "CG2O5", "CG321", "HGA2", "0.1000", "3", "0.00", "PHEK, phenyl ethyl ketone; from 3ACP, 3-acetylpyridine; mcs"}, {"CG321", "CG2O5", "CG321", "CG321", "0.7500", "1", "0.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"CG321", "CG2O5", "CG321", "CG321", "0.1800", "2", "180.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"CG321", "CG2O5", "CG321", "CG321", "0.0650", "3", "0.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"CG321", "CG2O5", "CG321", "CG321", "0.0300", "6", "0.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"CG321", "CG2O5", "CG321", "HGA2", "0.1000", "3", "0.00", "CHON, cyclohexanone; from ACO, acetone; yapol"}, {"CG331", "CG2O5", "CG321", "CG331", "0.7500", "1", "0.00", "BTON, butanone, yapol"}, {"CG331", "CG2O5", "CG321", "CG331", "0.1800", "2", "180.00", "BTON, butanone, yapol"}, {"CG331", "CG2O5", "CG321", "CG331", "0.0650", "3", "0.00", "BTON, butanone, yapol"}, {"CG331", "CG2O5", "CG321", "CG331", "0.0300", "6", "0.00", "BTON, butanone, yapol"}, {"CG331", "CG2O5", "CG321", "HGA2", "0.1000", "3", "0.00", "BTON, butanone; from ACO, acetone; yapol"}, {"OG2D3", "CG2O5", "CG321", "CG321", "0.7500", "1", "180.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"OG2D3", "CG2O5", "CG321", "CG321", "0.1800", "2", "180.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"OG2D3", "CG2O5", "CG321", "CG321", "0.0650", "3", "180.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"OG2D3", "CG2O5", "CG321", "CG321", "0.0300", "6", "0.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"OG2D3", "CG2O5", "CG321", "CG331", "0.7500", "1", "180.00", "BTON, butanone, yapol"}, {"OG2D3", "CG2O5", "CG321", "CG331", "0.1800", "2", "180.00", "BTON, butanone, yapol"}, {"OG2D3", "CG2O5", "CG321", "CG331", "0.0650", "3", "180.00", "BTON, butanone, yapol"}, {"OG2D3", "CG2O5", "CG321", "CG331", "0.0300", "6", "0.00", "BTON, butanone, yapol"}, {"OG2D3", "CG2O5", "CG321", "HGA2", "0.0000", "3", "0.00", "BTON, butanone; from ACO, acetone; yapol"}, {"CG2DC1", "CG2O5", "CG331", "HGA3", "0.1000", "3", "0.00", "BEON, butenone; from ACO, acetone; mcs"}, {"CG2DC2", "CG2O5", "CG331", "HGA3", "0.1000", "3", "0.00", "BEON, butenone; from ACO, acetone; mcs"}, {"CG2R61", "CG2O5", "CG331", "HGA3", "0.1000", "3", "0.00", "3ACP, 3-acetylpyridine; reset by kevo to ketone, RIMP2/cc-pVTZ//MP2/6-31G(d), adm 11/08"}, {"CG321", "CG2O5", "CG331", "HGA3", "0.1000", "3", "0.00", "BTON, butanone; from ACO, acetone; yapol"}, {"CG331", "CG2O5", "CG331", "HGA3", "0.1000", "3", "0.00", "ketone, RIMP2/cc-pVTZ//MP2/6-31G(d), adm 11/08"}, {"OG2D3", "CG2O5", "CG331", "HGA3", "0.0000", "3", "0.00", "3ACP, ACO; ketone, RIMP2/cc-pVTZ//MP2/6-31G(d), adm 11/08"}, {"NG2S1", "CG2O6", "NG2S1", "CG331", "1.6000", "1", "0.00", "S132R, from NMTU, pram"}, {"NG2S1", "CG2O6", "NG2S1", "CG331", "2.5000", "2", "180.00", "S132R, from NMTU, pram"}, {"OG2D1", "CG2O6", "NG2S1", "CG321", "4.0000", "2", "180.00", "DECB, diethyl carbamate, from DMCB, cacha and xxwy"}, {"OG2D1", "CG2O6", "NG2S1", "CG321", "0.9500", "4", "0.00", "DECB, diethyl carbamate, from DMCB, cacha and xxwy"}, {"OG2D1", "CG2O6", "NG2S1", "CG331", "4.0000", "2", "180.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "NG2S1", "CG331", "0.9500", "4", "0.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "NG2S1", "HGP1", "0.0000", "2", "180.00", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo"}, {"OG302", "CG2O6", "NG2S1", "CG321", "4.0000", "2", "180.00", "DECB, diethyl carbamate, from DMCB, cacha and xxwy"}, {"OG302", "CG2O6", "NG2S1", "CG321", "0.9500", "4", "0.00", "DECB, diethyl carbamate, from DMCB, cacha and xxwy"}, {"OG302", "CG2O6", "NG2S1", "CG331", "4.0000", "2", "180.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG302", "CG2O6", "NG2S1", "CG331", "0.9500", "4", "0.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG302", "CG2O6", "NG2S1", "HGP1", "0.0000", "2", "180.00", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo"}, {"NG2S2", "CG2O6", "NG2S2", "HGP1", "1.5000", "2", "180.00", "UREA, Urea"}, {"OG2D1", "CG2O6", "NG2S2", "HGP1", "1.4000", "2", "180.00", "PROT adm jr. 4/10/91, acetamide update NOW UREA ==> re-optimize???"}, {"NG2S1", "CG2O6", "OG302", "CG321", "0.1500", "1", "180.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"NG2S1", "CG2O6", "OG302", "CG321", "2.2000", "2", "180.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"NG2S1", "CG2O6", "OG302", "CG321", "0.1000", "3", "180.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"NG2S1", "CG2O6", "OG302", "CG331", "0.2500", "1", "0.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"NG2S1", "CG2O6", "OG302", "CG331", "1.8500", "2", "180.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"NG2S1", "CG2O6", "OG302", "CG331", "0.1200", "3", "180.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "OG302", "CG321", "0.1500", "1", "0.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "OG302", "CG321", "2.2000", "2", "180.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "OG302", "CG321", "0.1000", "3", "0.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "OG302", "CG331", "0.2500", "1", "180.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "OG302", "CG331", "1.8500", "2", "180.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "OG302", "CG331", "0.1200", "3", "0.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG302", "CG2O6", "OG302", "CG321", "0.1000", "1", "180.00", "DECA, diethyl carbonate, xxwy"}, {"OG302", "CG2O6", "OG302", "CG321", "3.1000", "2", "180.00", "DECA, diethyl carbonate, xxwy"}, {"OG302", "CG2O6", "OG302", "CG331", "0.5500", "1", "180.00", "DMCA, dimethyl carbonate, xxwy"}, {"OG302", "CG2O6", "OG302", "CG331", "2.9500", "2", "180.00", "DMCA, dimethyl carbonate, xxwy"}, {"OG2D2", "CG2O6", "OG311", "HGP1", "2.0000", "2", "180.00", "CO31, bicarbonate, MP2/6-31G* dihedral scan, xxwy"}, {"SG2D1", "CG2O6", "SG311", "CG331", "0.1000", "1", "180.00", "DMTT, dimethyl trithiocarbonate, kevo"}, {"SG2D1", "CG2O6", "SG311", "CG331", "2.1300", "2", "180.00", "DMTT, dimethyl trithiocarbonate, kevo"}, {"SG311", "CG2O6", "SG311", "CG331", "0.1000", "1", "0.00", "DMTT, dimethyl trithiocarbonate, kevo"}, {"SG311", "CG2O6", "SG311", "CG331", "2.1300", "2", "180.00", "DMTT, dimethyl trithiocarbonate, kevo"}, {"OG2D5", "CG2O7", "NG2D1", "CG331", "0.4000", "2", "180.00", "MICY, methyl isocyanate, xxwy"}, {"CG2R51", "CG2R51", "CG2R51", "CG2R51", "15.0000", "2", "180.00", "PYRL, pyrrole"}, {"CG2R51", "CG2R51", "CG2R51", "CG2RC0", "2.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R51", "CG2R51", "CG2R51", "CG2RC7", "9.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R51", "CG2R51", "CG2R51", "CG3C52", "4.0000", "2", "180.00", "CPDE, cyclopentadiene, kevo"}, {"CG2R51", "CG2R51", "CG2R51", "NG2R51", "4.0000", "2", "180.00", "PYRL, pyrrole"}, {"CG2R51", "CG2R51", "CG2R51", "NG2R57", "4.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 NG2R51; lf"}, {"CG2R51", "CG2R51", "CG2R51", "NG2RC0", "16.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R51", "CG2R51", "CG2R51", "OG2R50", "8.5000", "2", "180.00", "FURA, furan"}, {"CG2R51", "CG2R51", "CG2R51", "SG2R50", "8.5000", "2", "180.00", "THIP, thiophene"}, {"CG2R51", "CG2R51", "CG2R51", "HGR51", "1.0000", "2", "180.00", "PYRL, pyrrole"}, {"CG2R51", "CG2R51", "CG2R51", "HGR52", "1.5000", "2", "180.00", "PYRL, pyrrole"}, {"CG2R52", "CG2R51", "CG2R51", "CG3C52", "6.6000", "2", "180.00", "2HPR, 2H-pyrrole !1,(1a), kevo"}, {"CG2R52", "CG2R51", "CG2R51", "CG3C54", "7.5000", "2", "180.00", "2HPP, 2H-pyrrole.H+ 1a, kevo"}, {"CG2R52", "CG2R51", "CG2R51", "NG2R51", "12.0000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R52", "CG2R51", "CG2R51", "OG2R50", "9.5000", "2", "180.00", "ISOX, isoxazole"}, {"CG2R52", "CG2R51", "CG2R51", "SG2R50", "8.5000", "2", "180.00", "ISOT, isothiazole"}, {"CG2R52", "CG2R51", "CG2R51", "HGR51", "2.6000", "2", "180.00", "2HPR, 2H-pyrrole; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R52", "CG2R51", "CG2R51", "HGR52", "1.5000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R53", "CG2R51", "CG2R51", "CG3C52", "6.6000", "2", "180.00", "B2FO, from CG2R52 CG2R51 CG2R51 CG3C52, ctsai"}, {"CG2R53", "CG2R51", "CG2R51", "HGR51", "2.6000", "2", "180.00", "B2FO, from CG2R52 CG2R51 CG2R51 HGR51, ctsai"}, {"CG2R57", "CG2R51", "CG2R51", "NG2R51", "4.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 NG2R51; lf"}, {"CG2R57", "CG2R51", "CG2R51", "HGR52", "1.5000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 HGR52; lf"}, {"CG2RC0", "CG2R51", "CG2R51", "CG3C52", "6.9000", "2", "180.00", "INDE, indene, kevo"}, {"CG2RC0", "CG2R51", "CG2R51", "NG2R51", "4.0000", "2", "180.00", "PROT JWK 05/14/91 fit to indole"}, {"CG2RC0", "CG2R51", "CG2R51", "OG2R50", "8.5000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2RC0", "CG2R51", "CG2R51", "SG2R50", "8.5000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"CG2RC0", "CG2R51", "CG2R51", "HGR51", "2.8000", "2", "180.00", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG2R51", "HGR52", "2.8000", "2", "180.00", "INDO/TRP"}, {"CG2RC7", "CG2R51", "CG2R51", "HGR51", "2.7000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG321", "CG2R51", "CG2R51", "NG2R50", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89"}, {"CG321", "CG2R51", "CG2R51", "NG2R51", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89"}, {"CG321", "CG2R51", "CG2R51", "NG2R52", "2.5000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"CG321", "CG2R51", "CG2R51", "HGR52", "1.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"CG331", "CG2R51", "CG2R51", "NG2R50", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89"}, {"CG331", "CG2R51", "CG2R51", "NG2R51", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89"}, {"CG331", "CG2R51", "CG2R51", "HGR52", "1.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"CG3C52", "CG2R51", "CG2R51", "CG3C52", "12.0000", "2", "180.00", "3PRL, 3-pyrroline, kevo"}, {"CG3C52", "CG2R51", "CG2R51", "NG2R50", "7.5000", "2", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"CG3C52", "CG2R51", "CG2R51", "NG3C51", "11.0000", "2", "180.00", "2PRL, 2-pyrroline, kevo"}, {"CG3C52", "CG2R51", "CG2R51", "NG3P2", "10.5000", "2", "180.00", "2PRP, 2-pyrroline.H+, kevo"}, {"CG3C52", "CG2R51", "CG2R51", "OG3C51", "8.8900", "2", "180.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG3C52", "CG2R51", "CG2R51", "HGR51", "2.9000", "2", "180.00", "2HPR, 2H-pyrrole, kevo"}, {"CG3C52", "CG2R51", "CG2R51", "HGR52", "5.8000", "2", "180.00", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline, kevo"}, {"CG3C54", "CG2R51", "CG2R51", "CG3C54", "11.5000", "2", "180.00", "3PRP, 3-pyrroline.H+, kevo"}, {"CG3C54", "CG2R51", "CG2R51", "HGR51", "4.2500", "2", "180.00", "3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"NG2R50", "CG2R51", "CG2R51", "NG2R51", "14.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"NG2R50", "CG2R51", "CG2R51", "OG2R50", "14.0000", "2", "180.00", "OXAZ, oxazole"}, {"NG2R50", "CG2R51", "CG2R51", "SG2R50", "7.0000", "2", "180.00", "THAZ, thiazole"}, {"NG2R50", "CG2R51", "CG2R51", "HGR51", "2.7000", "2", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"NG2R50", "CG2R51", "CG2R51", "HGR52", "3.0000", "2", "180.00", "PROT adm jr., 3/24/92"}, {"NG2R51", "CG2R51", "CG2R51", "HGR51", "3.5000", "2", "180.00", "INDO/TRP"}, {"NG2R51", "CG2R51", "CG2R51", "HGR52", "3.0000", "2", "180.00", "PROT adm jr., 3/24/92"}, {"NG2R52", "CG2R51", "CG2R51", "NG2R52", "12.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"NG2R52", "CG2R51", "CG2R51", "HGR52", "2.5000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"NG2R57", "CG2R51", "CG2R51", "HGR51", "3.5000", "2", "180.00", "13BPO, 1,3-bipyrrole; from NG2R51 CG2R51 CG2R51 HGR51; lf"}, {"NG2RC0", "CG2R51", "CG2R51", "HGR51", "3.7000", "2", "180.00", "INDZ, indolizine, kevo"}, {"NG3C51", "CG2R51", "CG2R51", "HGR51", "3.5000", "2", "180.00", "2PRL, 2-pyrroline, kevo"}, {"NG3P2", "CG2R51", "CG2R51", "HGR51", "7.0000", "2", "180.00", "7.0 2PRP, 2-pyrroline.H+, kevo"}, {"OG2R50", "CG2R51", "CG2R51", "HGR51", "4.5000", "2", "180.00", "FURA, furan"}, {"OG2R50", "CG2R51", "CG2R51", "HGR52", "3.0000", "2", "180.00", "OXAZ, oxazole"}, {"OG3C51", "CG2R51", "CG2R51", "HGR51", "3.7000", "2", "180.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"SG2R50", "CG2R51", "CG2R51", "HGR51", "4.0000", "2", "180.00", "THIP, thiophene"}, {"SG2R50", "CG2R51", "CG2R51", "HGR52", "5.5000", "2", "180.00", "THAZ, thiazole"}, {"HGR51", "CG2R51", "CG2R51", "HGR51", "1.0000", "2", "180.00", "INDO/TRP"}, {"HGR51", "CG2R51", "CG2R51", "HGR52", "1.0000", "2", "180.00", "PYRL, pyrrole"}, {"HGR52", "CG2R51", "CG2R51", "HGR52", "1.0000", "2", "180.00", "PROT his, adm jr., 6/27/90, his"}, {"CG2R51", "CG2R51", "CG2R52", "NG2R50", "8.5000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R51", "CG2R51", "CG2R52", "NG2R52", "4.1500", "2", "180.00", "4.1 2HPP, 2H-pyrrole.H+ 1, kevo"}, {"CG2R51", "CG2R51", "CG2R52", "HGR52", "3.8000", "2", "180.00", "PYRZ, pyrazole"}, {"HGR51", "CG2R51", "CG2R52", "NG2R50", "4.5000", "2", "180.00", "4.25 2HPR, 2H-pyrrole !wC4H !coupled with pyrz, pyrazole, kevo"}, {"HGR51", "CG2R51", "CG2R52", "NG2R52", "4.5000", "2", "180.00", "2HPP, 2H-pyrrole.H+, kevo"}, {"HGR51", "CG2R51", "CG2R52", "HGR52", "0.1000", "2", "180.00", "2HPR, 2H-pyrrole; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R51", "CG2R51", "CG2R53", "OG2D1", "1.2000", "2", "180.00", "B2FO, from CG2RC0 CG25C1 CG2R53 OG2D1, ctsai"}, {"CG2R51", "CG2R51", "CG2R53", "OG3C51", "0.4100", "1", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"HGR51", "CG2R51", "CG2R53", "OG2D1", "4.5000", "2", "180.00", "B2FO, from OG2R50 CG2R51 CG2R51 HGR51, ctsai"}, {"HGR51", "CG2R51", "CG2R53", "OG3C51", "3.7000", "2", "180.00", "B2FO, from OG3C51 CG2R51 CG2R51 HGR51, ctsai"}, {"CG2R51", "CG2R51", "CG2R57", "CG2R51", "15.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 CG2R51; lf"}, {"CG2R51", "CG2R51", "CG2R57", "CG2R57", "2.1000", "2", "180.00", "33BPO, 3,3-bipyrrole, lf"}, {"CG2R51", "CG2R51", "CG2R57", "NG2R57", "1.9000", "2", "180.00", "13BPO, 1,3-bipyrrole, lf"}, {"NG2R51", "CG2R51", "CG2R57", "CG2R51", "4.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 NG2R51; lf"}, {"NG2R51", "CG2R51", "CG2R57", "CG2R57", "2.1000", "2", "180.00", "33BPO, 3,3-bipyrrole, lf"}, {"NG2R51", "CG2R51", "CG2R57", "NG2R57", "1.9000", "2", "180.00", "13BPO, 1,3-bipyrrole, lf"}, {"HGR51", "CG2R51", "CG2R57", "CG2R51", "1.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 HGR51; lf"}, {"HGR51", "CG2R51", "CG2R57", "CG2R57", "3.5000", "2", "180.00", "33BPO, 3,3-bipyrrole; from NG2R51 CG2R51 CG2R51 HGR51; lf"}, {"HGR51", "CG2R51", "CG2R57", "NG2R57", "3.5000", "2", "180.00", "13BPO, 1,3-bipyrrole; from NG2R51 CG2R51 CG2R51 HGR51; lf"}, {"HGR52", "CG2R51", "CG2R57", "CG2R51", "1.5000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 HGR52; lf"}, {"HGR52", "CG2R51", "CG2R57", "CG2R57", "3.0000", "2", "180.00", "33BPO, 3,3-bipyrrole, lf"}, {"HGR52", "CG2R51", "CG2R57", "NG2R57", "3.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from NG2R51 CG2R51 CG2R51 HGR52; lf"}, {"CG2R51", "CG2R51", "CG2RC0", "CG2R61", "3.0000", "2", "180.00", "PROT JWK 09/05/89"}, {"CG2R51", "CG2R51", "CG2RC0", "CG2RC0", "4.0000", "2", "180.00", "PROT JWK 05/14/91 fit to indole"}, {"CG2R51", "CG2R51", "CG2RC0", "NG2RC0", "12.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG321", "CG2R51", "CG2RC0", "CG2R61", "2.5000", "2", "180.00", "INDO/TRP"}, {"CG321", "CG2R51", "CG2RC0", "CG2RC0", "3.0000", "2", "180.00", "INDO/TRP"}, {"CG331", "CG2R51", "CG2RC0", "CG2R61", "2.5000", "2", "180.00", "INDO/TRP"}, {"CG331", "CG2R51", "CG2RC0", "CG2RC0", "2.5000", "2", "180.00", "INDO/TRP"}, {"NG2R51", "CG2R51", "CG2RC0", "CG2R61", "1.5000", "2", "180.00", "ISOI, isoindole, kevo"}, {"NG2R51", "CG2R51", "CG2RC0", "CG2RC0", "9.0000", "2", "180.00", "ISOI, isoindole, kevo"}, {"HGR51", "CG2R51", "CG2RC0", "CG2R61", "2.8000", "2", "180.00", "INDO/TRP"}, {"HGR51", "CG2R51", "CG2RC0", "CG2RC0", "2.6000", "2", "180.00", "INDO/TRP"}, {"HGR51", "CG2R51", "CG2RC0", "NG2RC0", "0.8000", "2", "180.00", "INDZ, indolizine, kevo"}, {"HGR52", "CG2R51", "CG2RC0", "CG2R61", "0.2500", "2", "180.00", "ISOI, isoindole, kevo"}, {"HGR52", "CG2R51", "CG2RC0", "CG2RC0", "0.2500", "2", "180.00", "ISOI, isoindole, kevo"}, {"CG2R51", "CG2R51", "CG2RC7", "CG2R71", "2.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R51", "CG2R51", "CG2RC7", "CG2RC7", "4.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"HGR51", "CG2R51", "CG2RC7", "CG2R71", "2.2000", "2", "180.00", "AZUL, Azulene, kevo"}, {"HGR51", "CG2R51", "CG2RC7", "CG2RC7", "2.2000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R51", "CG2R51", "CG321", "CG311", "0.2000", "1", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG311", "0.2700", "2", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG311", "0.0000", "3", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG314", "0.2000", "1", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG314", "0.2700", "2", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG314", "0.0000", "3", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG331", "0.2000", "1", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG331", "0.2700", "2", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG331", "0.0000", "3", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "HGA2", "0.0000", "3", "0.00", "PROT 4-methylimidazole 4-21G//rot bar. adm jr., 9/4/89"}, {"CG2RC0", "CG2R51", "CG321", "CG311", "0.0900", "2", "180.00", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG321", "CG311", "0.5700", "3", "0.00", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG321", "CG314", "0.0900", "2", "180.00", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG321", "CG314", "0.5700", "3", "0.00", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG321", "CG331", "0.2500", "2", "180.00", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG321", "HGA2", "0.2000", "3", "0.00", "INDO/TRP"}, {"NG2R50", "CG2R51", "CG321", "CG311", "0.1900", "3", "0.00", "PROT HIS CB-CG TORSION,"}, {"NG2R50", "CG2R51", "CG321", "CG314", "0.1900", "3", "0.00", "PROT HIS CB-CG TORSION,"}, {"NG2R50", "CG2R51", "CG321", "HGA2", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R51", "CG2R51", "CG321", "CG311", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R51", "CG2R51", "CG321", "CG314", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R51", "CG2R51", "CG321", "CG331", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R51", "CG2R51", "CG321", "HGA2", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R52", "CG2R51", "CG321", "CG311", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R52", "CG2R51", "CG321", "CG314", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R52", "CG2R51", "CG321", "CG331", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R52", "CG2R51", "CG321", "HGA2", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"CG2R51", "CG2R51", "CG331", "HGA3", "0.0000", "3", "0.00", "PROT 4-methylimidazole 4-21G//rot bar. adm jr., 9/4/89"}, {"CG2RC0", "CG2R51", "CG331", "HGA3", "0.2000", "3", "0.00", "INDO/TRP"}, {"NG2R51", "CG2R51", "CG331", "HGA3", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"CG2R51", "CG2R51", "CG3C52", "CG2R51", "2.0500", "3", "180.00", "CPDE, cyclopentadiene, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "CG2R52", "3.5000", "3", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "CG2R53", "3.5000", "3", "180.00", "A2FO, from CG2R51 CG2R51 CG3C52 CG2R52, ctsai"}, {"CG2R51", "CG2R51", "CG3C52", "CG2RC0", "1.5000", "3", "180.00", "INDE, indene, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "CG3C52", "0.0500", "3", "180.00", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "CG3C54", "0.5000", "3", "180.00", "0.05 2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "NG2R50", "3.6000", "2", "180.00", "2HPR, 2H-pyrrole !1a, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "NG3C51", "0.7000", "3", "180.00", "0.70 0.50 3PRL, 3-pyrroline, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "OG3C51", "0.2800", "1", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R51", "CG3C52", "OG3C51", "0.9800", "2", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R51", "CG3C52", "OG3C51", "1.7500", "3", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R51", "CG3C52", "HGA2", "0.0000", "3", "0.00", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline, kevo"}, {"HGR51", "CG2R51", "CG3C52", "CG2R51", "2.0500", "3", "0.00", "CPDE, cyclopentadiene, kevo"}, {"HGR51", "CG2R51", "CG3C52", "CG2R52", "1.5000", "3", "0.00", "3HPR, 3H-pyrrole, kevo"}, {"HGR51", "CG2R51", "CG3C52", "CG2R53", "1.5000", "3", "0.00", "A2FO, from HGR51 CG2R51 CG3C52 CG2R52, ctsai"}, {"HGR51", "CG2R51", "CG3C52", "CG2RC0", "1.9000", "3", "0.00", "INDE, indene, kevo"}, {"HGR51", "CG2R51", "CG3C52", "CG3C52", "2.0000", "2", "180.00", "2PRL, 2-pyrroline, kevo"}, {"HGR51", "CG2R51", "CG3C52", "CG3C54", "1.5000", "2", "180.00", "2.00 2PRL, 2-pyrroline, kevo"}, {"HGR51", "CG2R51", "CG3C52", "NG2R50", "4.3000", "2", "180.00", "2.6 2HPR, 2H-pyrrole !wC3H, kevo"}, {"HGR51", "CG2R51", "CG3C52", "NG3C51", "3.1000", "2", "180.00", "3PRL, 3-pyrroline, kevo"}, {"HGR51", "CG2R51", "CG3C52", "OG3C51", "3.1000", "2", "180.00", "B2FO, from HGR51 CG2R51 CG3C52 NG3C51, ctsai"}, {"HGR51", "CG2R51", "CG3C52", "HGA2", "0.0000", "3", "0.00", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "CG3C54", "NG2R52", "2.8000", "2", "180.00", "2.7 2.4 2HPP, 2H-pyrrole.H+ 1a, kevo"}, {"CG2R51", "CG2R51", "CG3C54", "NG3P2", "0.9000", "3", "180.00", "0.9 3PRP, 3-pyrroline.H+, kevo"}, {"CG2R51", "CG2R51", "CG3C54", "HGA2", "0.0000", "3", "0.00", "3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"HGR51", "CG2R51", "CG3C54", "NG2R52", "5.0000", "2", "180.00", "2HPP, 2H-pyrrole.H+, kevo"}, {"HGR51", "CG2R51", "CG3C54", "NG3P2", "1.7000", "2", "180.00", "3PRP, 3-pyrroline.H+, kevo"}, {"HGR51", "CG2R51", "CG3C54", "HGA2", "0.0000", "3", "0.00", "3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R51", "CG2R51", "NG2R50", "CG2R52", "5.4000", "2", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"CG2R51", "CG2R51", "NG2R50", "CG2R53", "14.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "CG2R51", "NG2R50", "NG2R50", "8.5000", "2", "180.00", "OXAD, oxadiazole123"}, {"CG321", "CG2R51", "NG2R50", "CG2R53", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89, FROM HGR52 CG2R51 NG2R50CPH2"}, {"HGR52", "CG2R51", "NG2R50", "CG2R52", "2.0000", "2", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"HGR52", "CG2R51", "NG2R50", "CG2R53", "3.0000", "2", "180.00", "PROT adm jr., 3/24/92"}, {"HGR52", "CG2R51", "NG2R50", "NG2R50", "5.5000", "2", "180.00", "OXAD, oxadiazole123"}, {"CG2R51", "CG2R51", "NG2R51", "CG2R51", "10.0000", "2", "180.00", "PYRL, pyrrole"}, {"CG2R51", "CG2R51", "NG2R51", "CG2R53", "14.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "CG2R51", "NG2R51", "CG2RC0", "5.0000", "2", "180.00", "PROT JWK 05/14/91 fit to indole"}, {"CG2R51", "CG2R51", "NG2R51", "CG321", "0.0000", "1", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, from CG2R51 CG2R51 NG2R51 CG3C51, kevo"}, {"CG2R51", "CG2R51", "NG2R51", "CG3C51", "0.0000", "1", "0.00", "NA, glycosyl linkage"}, {"CG2R51", "CG2R51", "NG2R51", "NG2R50", "10.0000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R51", "CG2R51", "NG2R51", "HGP1", "1.0000", "2", "180.00", "PROT his, adm jr., 7/20/89"}, {"CG2R57", "CG2R51", "NG2R51", "CG2R51", "10.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 NG2R51 CG2R51; lf"}, {"CG2R57", "CG2R51", "NG2R51", "HGP1", "1.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 NG2R51 HGP1; lf"}, {"CG2RC0", "CG2R51", "NG2R51", "CG2R51", "6.0000", "2", "180.00", "ISOI, isoindole, kevo"}, {"CG2RC0", "CG2R51", "NG2R51", "HGP1", "1.0000", "2", "180.00", "ISOI, isoindole, kevo"}, {"CG321", "CG2R51", "NG2R51", "CG2R53", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89, FROM HGR52 CG2R51 NG2R51CPH2"}, {"CG321", "CG2R51", "NG2R51", "HGP1", "1.0000", "2", "180.00", "PROT his, adm jr., 7/22/89, FROM HGR52 CG2R51 NG2R51H"}, {"CG331", "CG2R51", "NG2R51", "CG2R53", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89, FROM HGR52 CG2R51 NG2R51CPH2"}, {"CG331", "CG2R51", "NG2R51", "HGP1", "1.0000", "2", "180.00", "PROT his, adm jr., 7/22/89, FROM HGR52 CG2R51 NG2R51H"}, {"HGR52", "CG2R51", "NG2R51", "CG2R51", "2.6000", "2", "180.00", "PYRL, pyrrole"}, {"HGR52", "CG2R51", "NG2R51", "CG2R53", "3.0000", "2", "180.00", "PROT adm jr., 3/24/92"}, {"HGR52", "CG2R51", "NG2R51", "CG2RC0", "2.6000", "2", "180.00", "INDO/TRP"}, {"HGR52", "CG2R51", "NG2R51", "CG321", "0.0000", "2", "180.00", "ETRZ, 1-Ethyl-1,2,3-triazole, from HGR52 CG2R53 NG2R51 CG331, kevo"}, {"HGR52", "CG2R51", "NG2R51", "CG3C51", "0.0000", "2", "180.00", "NA, glycosyl linkage"}, {"HGR52", "CG2R51", "NG2R51", "NG2R50", "3.0000", "2", "180.00", "PYRZ, pyrazole"}, {"HGR52", "CG2R51", "NG2R51", "HGP1", "1.0000", "2", "180.00", "PROT adm jr., 3/24/92"}, {"CG2R51", "CG2R51", "NG2R52", "CG2R53", "12.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "CG2R51", "NG2R52", "HGP2", "1.4000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"CG321", "CG2R51", "NG2R52", "CG2R53", "2.5000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"CG321", "CG2R51", "NG2R52", "HGP2", "3.0000", "2", "180.00", "PROT his, adm jr., 7/22/89, FROM HC NG2R52CPH1 HA"}, {"HGR52", "CG2R51", "NG2R52", "CG2R53", "2.5000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"HGR52", "CG2R51", "NG2R52", "HGP2", "3.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"CG2R51", "CG2R51", "NG2R57", "CG2R51", "10.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 NG2R51 CG2R51; lf"}, {"CG2R51", "CG2R51", "NG2R57", "CG2R57", "0.2000", "2", "180.00", "13BPO, 1,3-bipyrrole, lf"}, {"CG2R51", "CG2R51", "NG2R57", "NG2R57", "0.2000", "2", "180.00", "11BPO, 1,1-bipyrrole, lf"}, {"HGR52", "CG2R51", "NG2R57", "CG2R51", "2.6000", "2", "180.00", "13BPO, 1,3-bipyrrole; from HGR52 CG2R51 NG2R51 CG2R51; lf"}, {"HGR52", "CG2R51", "NG2R57", "CG2R57", "1.5000", "2", "180.00", "13BPO, 1,3-bipyrrole, lf"}, {"HGR52", "CG2R51", "NG2R57", "NG2R57", "1.1000", "2", "180.00", "11BPO, 1,1-bipyrrole, lf"}, {"CG2R51", "CG2R51", "NG2RC0", "CG2R61", "3.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R51", "CG2R51", "NG2RC0", "CG2RC0", "9.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"HGR52", "CG2R51", "NG2RC0", "CG2R61", "1.4000", "2", "180.00", "INDZ, indolizine, kevo"}, {"HGR52", "CG2R51", "NG2RC0", "CG2RC0", "1.4000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R51", "CG2R51", "NG3C51", "CG3C52", "8.0000", "2", "180.00", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "NG3C51", "HGP1", "0.0000", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"HGR52", "CG2R51", "NG3C51", "CG3C52", "3.0000", "2", "180.00", "2PRL, 2-pyrroline, kevo"}, {"HGR52", "CG2R51", "NG3C51", "HGP1", "0.0000", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "NG3P2", "CG3C54", "0.3000", "3", "0.00", "2PRP, 2-pyrroline.H+, kevo"}, {"CG2R51", "CG2R51", "NG3P2", "HGP2", "0.3000", "3", "180.00", "2PRP, 2-pyrroline.H+, kevo"}, {"HGR52", "CG2R51", "NG3P2", "CG3C54", "0.0000", "3", "180.00", "2PRP, 2-pyrroline.H+, kevo"}, {"HGR52", "CG2R51", "NG3P2", "HGP2", "0.0000", "3", "180.00", "2PRP, 2-pyrroline.H+, kevo"}, {"CG2R51", "CG2R51", "OG2R50", "CG2R51", "7.5000", "2", "180.00", "FURA, furan @@@@@ Kenno: 8.5 --> 7.5 @@@@@"}, {"CG2R51", "CG2R51", "OG2R50", "CG2R53", "8.5000", "2", "180.00", "OXAZ, oxazole"}, {"CG2R51", "CG2R51", "OG2R50", "CG2RC0", "8.5000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2R51", "CG2R51", "OG2R50", "NG2R50", "8.5000", "2", "180.00", "ISOX, isoxazole"}, {"HGR52", "CG2R51", "OG2R50", "CG2R51", "3.8000", "2", "180.00", "FURA, furan"}, {"HGR52", "CG2R51", "OG2R50", "CG2R53", "3.8000", "2", "180.00", "OXAZ, oxazole"}, {"HGR52", "CG2R51", "OG2R50", "CG2RC0", "3.0000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"HGR52", "CG2R51", "OG2R50", "NG2R50", "5.5000", "2", "180.00", "ISOX, isoxazole"}, {"CG2R51", "CG2R51", "OG3C51", "CG2R53", "1.2310", "2", "180.00", "A2FO, 3H-furan-2-one, ctsai"}, {"CG2R51", "CG2R51", "OG3C51", "CG2R53", "2.2940", "3", "180.00", "A2FO, 3H-furan-2-one, ctsai"}, {"CG2R51", "CG2R51", "OG3C51", "CG3C52", "4.3400", "2", "180.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"HGR52", "CG2R51", "OG3C51", "CG2R53", "2.1000", "2", "180.00", "A2FO, from HGR52 CG2R51 OG3C51 CG3C52, ctsai"}, {"HGR52", "CG2R51", "OG3C51", "CG3C52", "2.1000", "2", "180.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG2R51", "CG2R51", "SG2R50", "CG2R51", "8.5000", "2", "180.00", "THIP, thiophene"}, {"CG2R51", "CG2R51", "SG2R50", "CG2R53", "8.5000", "2", "180.00", "THAZ, thiazole @@@@@ Kenno: 8.0 --> 8.5 @@@@@"}, {"CG2R51", "CG2R51", "SG2R50", "CG2RC0", "8.5000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"CG2R51", "CG2R51", "SG2R50", "NG2R50", "9.0000", "2", "180.00", "ISOT, isothiazole"}, {"HGR52", "CG2R51", "SG2R50", "CG2R51", "4.0000", "2", "180.00", "THIP, thiophene"}, {"HGR52", "CG2R51", "SG2R50", "CG2R53", "5.5000", "2", "180.00", "THAZ, thiazole"}, {"HGR52", "CG2R51", "SG2R50", "CG2RC0", "3.9000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"HGR52", "CG2R51", "SG2R50", "NG2R50", "4.5000", "2", "180.00", "ISOT, isothiazole"}, {"NG2R50", "CG2R52", "CG2R52", "NG2R50", "9.5000", "2", "180.00", "TRZ2, 2H-1,2,3-triazole, lf"}, {"NG2R50", "CG2R52", "CG2R52", "HGR52", "3.9000", "2", "180.00", "TRZ2, 2H-1,2,3-triazole, lf"}, {"HGR52", "CG2R52", "CG2R52", "HGR52", "0.1700", "2", "180.00", "TRZ2, 2H-1,2,3-triazole, lf"}, {"NG2R50", "CG2R52", "CG2RC0", "CG2R61", "2.0000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"NG2R50", "CG2R52", "CG2RC0", "CG2RC0", "8.0000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"HGR52", "CG2R52", "CG2RC0", "CG2R61", "2.4000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"HGR52", "CG2R52", "CG2RC0", "CG2RC0", "2.4000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"NG2R50", "CG2R52", "CG3C52", "CG2R51", "3.5000", "3", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"NG2R50", "CG2R52", "CG3C52", "CG2RC0", "3.5000", "3", "180.00", "3HIN, 3H-indole, kevo"}, {"NG2R50", "CG2R52", "CG3C52", "CG3C52", "2.8000", "3", "180.00", "2.85 2PRZ, 2-pyrazoline, kevo"}, {"NG2R50", "CG2R52", "CG3C52", "HGA2", "1.4000", "3", "0.00", "2PRZ, 2-pyrazoline, kevo"}, {"HGR52", "CG2R52", "CG3C52", "CG2R51", "1.3000", "3", "0.00", "3HPR, 3H-pyrrole, kevo"}, {"HGR52", "CG2R52", "CG3C52", "CG2RC0", "2.0000", "3", "0.00", "3HIN, 3H-indole, kevo"}, {"HGR52", "CG2R52", "CG3C52", "CG3C52", "4.0000", "2", "180.00", "2PRZ, 2-pyrazoline, kevo"}, {"HGR52", "CG2R52", "CG3C52", "HGA2", "0.0000", "3", "0.00", "2PRZ, 2-pyrazoline, kevo"}, {"CG2R51", "CG2R52", "NG2R50", "CG3C52", "5.5000", "2", "180.00", "2HPR, 2H-pyrrole !1,1a, kevo"}, {"CG2R51", "CG2R52", "NG2R50", "NG2R51", "12.0000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R51", "CG2R52", "NG2R50", "OG2R50", "12.0000", "2", "180.00", "ISOX, isoxazole"}, {"CG2R51", "CG2R52", "NG2R50", "SG2R50", "8.5000", "2", "180.00", "ISOT, isothiazole"}, {"CG2R52", "CG2R52", "NG2R50", "NG2R51", "12.0000", "2", "180.00", "TRZ2, 2H-1,2,3-triazole, lf"}, {"CG2RC0", "CG2R52", "NG2R50", "NG2R51", "13.5000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG3C52", "CG2R52", "NG2R50", "CG2R51", "6.5000", "2", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"CG3C52", "CG2R52", "NG2R50", "CG2RC0", "13.0000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"CG3C52", "CG2R52", "NG2R50", "NG3C51", "17.0000", "2", "180.00", "2PRZ, 2-pyrazoline, kevo"}, {"HGR52", "CG2R52", "NG2R50", "CG2R51", "5.0000", "2", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"HGR52", "CG2R52", "NG2R50", "CG2RC0", "4.0000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"HGR52", "CG2R52", "NG2R50", "CG3C52", "7.6000", "2", "180.00", "7.1 2HPR, 2H-pyrrole !wC5H, kevo"}, {"HGR52", "CG2R52", "NG2R50", "NG2R51", "3.8000", "2", "180.00", "PYRZ, pyrazole"}, {"HGR52", "CG2R52", "NG2R50", "NG3C51", "5.0000", "2", "180.00", "2PRZ, 2-pyrazoline, kevo"}, {"HGR52", "CG2R52", "NG2R50", "OG2R50", "5.5000", "2", "180.00", "ISOX, isoxazole"}, {"HGR52", "CG2R52", "NG2R50", "SG2R50", "4.5000", "2", "180.00", "ISOT, isothiazole"}, {"CG2R51", "CG2R52", "NG2R52", "CG3C54", "6.0000", "2", "180.00", "2HPP, 2H-pyrrole.H+ 1a, kevo"}, {"CG2R51", "CG2R52", "NG2R52", "HGP2", "2.7000", "2", "180.00", "2.5 2HPP, 2H-pyrrole.H+, kevo"}, {"HGR52", "CG2R52", "NG2R52", "CG3C54", "9.0000", "2", "180.00", "2HPP, 2H-pyrrole.H+, kevo"}, {"HGR52", "CG2R52", "NG2R52", "HGP2", "0.0000", "2", "180.00", "2HPP, 2H-pyrrole.H+, kevo"}, {"NG2R43", "CG2R53", "CG3C41", "CG3C41", "3.0000", "3", "0.00", "AZDO, 2-azetidinone, kevo"}, {"NG2R43", "CG2R53", "CG3C41", "HGA2", "0.5700", "3", "0.00", "AZDO, 2-azetidinone; lsk and kevo"}, {"OG2D1", "CG2R53", "CG3C41", "CG3C41", "0.5700", "3", "0.00", "AZDO, 2-azetidinone, kevo"}, {"OG2D1", "CG2R53", "CG3C41", "HGA2", "0.5700", "3", "0.00", "AZDO, 2-azetidinone, kevo"}, {"NG2R53", "CG2R53", "CG3C52", "CG3C52", "1.0500", "3", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"NG2R53", "CG2R53", "CG3C52", "HGA2", "0.0000", "3", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"OG2D1", "CG2R53", "CG3C52", "CG2R51", "0.0800", "3", "0.00", "A2FO, from OG2D1 CG2R53 CG3C52 CG3C52, ctsai"}, {"OG2D1", "CG2R53", "CG3C52", "CG3C52", "0.0800", "3", "0.00", "2PDO, 2-pyrrolidinone, kevo"}, {"OG2D1", "CG2R53", "CG3C52", "HGA2", "0.0000", "3", "0.00", "2PDO, 2-pyrrolidinone, kevo"}, {"OG3C51", "CG2R53", "CG3C52", "CG2R51", "0.2190", "3", "0.00", "A2FO, 3H-furan-2-one, ctsai"}, {"OG3C51", "CG2R53", "CG3C52", "CG2R51", "0.2890", "4", "0.00", "A2FO, 3H-furan-2-one, ctsai"}, {"OG3C51", "CG2R53", "CG3C52", "CG3C52", "2.3700", "2", "0.00", "GBL, Gamma-batyrolactone, ctsai"}, {"OG3C51", "CG2R53", "CG3C52", "HGA2", "0.0000", "3", "180.00", "GBL, from NG2R53 CG2R53 CG3C52 HGA2, ctsai"}, {"CG3C41", "CG2R53", "NG2R43", "CG3C41", "1.5000", "2", "180.00", "AZDO, 2-azetidinone, kevo"}, {"CG3C41", "CG2R53", "NG2R43", "HGP1", "0.0000", "1", "0.00", "AZDO, 2-azetidinone, kevo"}, {"OG2D1", "CG2R53", "NG2R43", "CG3C41", "2.5000", "2", "180.00", "AZDO, 2-azetidinone, kevo"}, {"OG2D1", "CG2R53", "NG2R43", "HGP1", "2.5000", "2", "180.00", "AZDO, 2-azetidinone, kevo"}, {"NG2R50", "CG2R53", "NG2R50", "CG2R53", "10.0000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"NG2R50", "CG2R53", "NG2R50", "NG2R51", "12.0000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"NG2R50", "CG2R53", "NG2R50", "OG2R50", "12.0000", "2", "180.00", "OXD4, oxadiazole124, xxwy"}, {"NG2R51", "CG2R53", "NG2R50", "CG2R51", "14.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"NG2R51", "CG2R53", "NG2R50", "CG2R53", "12.0000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"NG2R51", "CG2R53", "NG2R50", "CG2RC0", "14.0000", "2", "180.00", "NA A"}, {"NG3C51", "CG2R53", "NG2R50", "CG3C52", "18.0000", "2", "180.00", "14 ! 13 2IMI, 2-imidazoline 1, kevo"}, {"OG2R50", "CG2R53", "NG2R50", "CG2R51", "14.0000", "2", "180.00", "OXAZ, oxazole"}, {"OG2R50", "CG2R53", "NG2R50", "CG2R53", "12.0000", "2", "180.00", "OXD4, oxadiazole124, xxwy"}, {"SG2R50", "CG2R53", "NG2R50", "CG2R51", "6.0000", "2", "180.00", "THAZ, thiazole @@@@@ Kenno: 7.0 --> 6.0 @@@@@"}, {"SG2R50", "CG2R53", "NG2R50", "CG2RC0", "12.5000", "2", "180.00", "ZTHZ, benzothiazole, kevo"}, {"HGR52", "CG2R53", "NG2R50", "CG2R51", "2.0000", "2", "180.00", "NA bases"}, {"HGR52", "CG2R53", "NG2R50", "CG2R53", "5.5000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"HGR52", "CG2R53", "NG2R50", "CG2RC0", "5.2000", "2", "180.00", "NA A"}, {"HGR52", "CG2R53", "NG2R50", "CG3C52", "11.4000", "2", "180.00", "2IMI, 2-imidazoline, kevo"}, {"HGR52", "CG2R53", "NG2R50", "NG2R51", "3.3000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"HGR52", "CG2R53", "NG2R50", "OG2R50", "3.8000", "2", "180.00", "OXD4, oxadiazole124, xxwy"}, {"CG25C1", "CG2R53", "NG2R51", "CG2RC0", "2.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C1", "CG2R53", "NG2R51", "HGP1", "0.3000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2R53", "NG2R51", "CG2RC0", "2.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2R53", "NG2R51", "HGP1", "0.3000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"NG2R50", "CG2R53", "NG2R51", "CG2R51", "14.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"NG2R50", "CG2R53", "NG2R51", "CG2RC0", "6.0000", "2", "180.00", "NA A"}, {"NG2R50", "CG2R53", "NG2R51", "CG331", "11.0000", "2", "180.00", "9MAD, 9-Methyl-Adenine, kevo for gsk/ibm"}, {"NG2R50", "CG2R53", "NG2R51", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"NG2R50", "CG2R53", "NG2R51", "CG3RC1", "1.5000", "2", "180.00", "NA bases"}, {"NG2R50", "CG2R53", "NG2R51", "NG2R50", "10.0000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"NG2R50", "CG2R53", "NG2R51", "HGP1", "1.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"OG2D1", "CG2R53", "NG2R51", "CG2RC0", "2.5000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"OG2D1", "CG2R53", "NG2R51", "HGP1", "0.8600", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"HGR52", "CG2R53", "NG2R51", "CG2R51", "3.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"HGR52", "CG2R53", "NG2R51", "CG2RC0", "5.6000", "2", "180.00", "NA G"}, {"HGR52", "CG2R53", "NG2R51", "CG331", "0.0000", "2", "180.00", "9MAD, 9-Methyl-Adenine, kevo for gsk/ibm"}, {"HGR52", "CG2R53", "NG2R51", "CG3C51", "0.0000", "2", "180.00", "NA, glycosyl linkage"}, {"HGR52", "CG2R53", "NG2R51", "CG3RC1", "1.5000", "2", "180.00", "NA bases"}, {"HGR52", "CG2R53", "NG2R51", "NG2R50", "1.7000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"HGR52", "CG2R53", "NG2R51", "HGP1", "1.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"NG2R52", "CG2R53", "NG2R52", "CG2R51", "12.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"NG2R52", "CG2R53", "NG2R52", "CG3C54", "7.7000", "2", "180.00", "7.7 2IMP, 2-imidazoline.H+, kevo"}, {"NG2R52", "CG2R53", "NG2R52", "HGP2", "1.4000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"HGR53", "CG2R53", "NG2R52", "CG2R51", "3.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"HGR53", "CG2R53", "NG2R52", "CG3C54", "6.3000", "2", "180.00", "2IMP, 2-imidazoline.H+, kevo"}, {"HGR53", "CG2R53", "NG2R52", "HGP2", "0.0000", "2", "180.00", "PROT his, adm jr., 6/27/90, YES, 0.0"}, {"CG251O", "CG2R53", "NG2R53", "CG2R53", "1.5000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG2R53", "NG2R53", "CG311", "1.6000", "1", "0.00", "drug design project, xxwy"}, {"CG251O", "CG2R53", "NG2R53", "CG311", "2.5000", "2", "180.00", "drug design project, xxwy"}, {"CG251O", "CG2R53", "NG2R53", "HGP1", "1.7000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG2R53", "NG2R53", "CG2R53", "1.5000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG2R53", "NG2R53", "CG311", "1.6000", "1", "0.00", "drug design project, xxwy"}, {"CG252O", "CG2R53", "NG2R53", "CG311", "2.5000", "2", "180.00", "drug design project, xxwy"}, {"CG252O", "CG2R53", "NG2R53", "HGP1", "1.7000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG3C52", "CG2R53", "NG2R53", "CG3C52", "0.4000", "2", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"CG3C52", "CG2R53", "NG2R53", "HGP1", "1.2700", "2", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"NG2R53", "CG2R53", "NG2R53", "CG251O", "0.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"NG2R53", "CG2R53", "NG2R53", "CG252O", "0.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"NG2R53", "CG2R53", "NG2R53", "CG2R53", "0.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"NG2R53", "CG2R53", "NG2R53", "CG311", "0.5000", "2", "180.00", "drug design project, xxwy"}, {"NG2R53", "CG2R53", "NG2R53", "CG3RC1", "0.5000", "2", "180.00", "CBHH, glycoluril, (NG2R53 CG2R53 NG2R53 CG311), jing"}, {"NG2R53", "CG2R53", "NG2R53", "HGP1", "0.8000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"OG2D1", "CG2R53", "NG2R53", "CG251O", "6.0000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"OG2D1", "CG2R53", "NG2R53", "CG252O", "6.0000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"OG2D1", "CG2R53", "NG2R53", "CG2R53", "1.1000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"OG2D1", "CG2R53", "NG2R53", "CG311", "2.5000", "2", "180.00", "drug design project, xxwy"}, {"OG2D1", "CG2R53", "NG2R53", "CG3C52", "2.5900", "2", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"OG2D1", "CG2R53", "NG2R53", "CG3RC1", "2.5900", "2", "180.00", "CBHH, glycoluril, (OG2D1 CG2R53 NG2R53 CG3C52), jing"}, {"OG2D1", "CG2R53", "NG2R53", "HGP1", "0.8600", "2", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"SG2D1", "CG2R53", "NG2R53", "CG2R53", "1.5000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG2D1", "CG2R53", "NG2R53", "CG311", "1.5000", "2", "180.00", "drug design project, xxwy"}, {"SG2D1", "CG2R53", "NG2R53", "HGP1", "1.0000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG311", "CG2R53", "NG2R53", "CG2R53", "1.5000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG311", "CG2R53", "NG2R53", "CG311", "1.5000", "2", "180.00", "drug design project, xxwy"}, {"SG311", "CG2R53", "NG2R53", "HGP1", "1.7000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R50", "CG2R53", "NG3C51", "CG3C52", "4.0000", "2", "180.00", "4 2IMI, 2-imidazoline x, kevo"}, {"NG2R50", "CG2R53", "NG3C51", "HGP1", "1.2000", "3", "0.00", ".85 ! 0 ! 0.6 3 0 2IMI, 2-imidazoline -wN1H, kevo"}, {"HGR52", "CG2R53", "NG3C51", "CG3C52", "0.0000", "2", "180.00", "4.6 2IMI, 2-imidazoline, kevo"}, {"HGR52", "CG2R53", "NG3C51", "HGP1", "0.0000", "3", "0.00", "2IMI, 2-imidazoline, kevo"}, {"NG2R50", "CG2R53", "OG2R50", "CG2R51", "8.5000", "2", "180.00", "OXAZ, oxazole"}, {"NG2R50", "CG2R53", "OG2R50", "NG2R50", "9.0000", "2", "180.00", "OXD4, oxadiazole124, xxwy"}, {"HGR52", "CG2R53", "OG2R50", "CG2R51", "3.8000", "2", "180.00", "OXAZ, oxazole"}, {"HGR52", "CG2R53", "OG2R50", "NG2R50", "4.0000", "2", "180.00", "OXD4, oxadiazole124, xxwy"}, {"CG2R51", "CG2R53", "OG3C51", "CG3C52", "1.2400", "2", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R53", "OG3C51", "CG3C52", "2.2700", "3", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG3C52", "CG2R53", "OG3C51", "CG2R51", "0.2960", "2", "180.00", "A2FO, 3H-furan-2-one, ctsai"}, {"CG3C52", "CG2R53", "OG3C51", "CG2R51", "0.5120", "3", "180.00", "A2FO, 3H-furan-2-one, ctsai"}, {"CG3C52", "CG2R53", "OG3C51", "CG3C52", "3.8000", "2", "180.00", "GBL, Gamma-butyrolactone, ctsai"}, {"OG2D1", "CG2R53", "OG3C51", "CG2R51", "4.3400", "2", "180.00", "A2FO, from CG2R51 CG2R51 OG3C51 CG3C52, ctsai"}, {"OG2D1", "CG2R53", "OG3C51", "CG3C52", "4.3400", "2", "180.00", "GBL, from CG2R51 CG2R51 OG3C51 CG3C52, ctsai"}, {"NG2R50", "CG2R53", "SG2R50", "CG2R51", "8.5000", "2", "180.00", "THAZ, thiazole @@@@@ Kenno: 8.0 --> 8.5 @@@@@"}, {"NG2R50", "CG2R53", "SG2R50", "CG2RC0", "3.0000", "2", "180.00", "ZTHZ, benzothiazole, kevo"}, {"HGR52", "CG2R53", "SG2R50", "CG2R51", "5.5000", "2", "180.00", "THAZ, thiazole"}, {"HGR52", "CG2R53", "SG2R50", "CG2RC0", "3.0000", "2", "180.00", "ZTHZ, benzothiazole, kevo"}, {"NG2R53", "CG2R53", "SG311", "CG251O", "0.2500", "1", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG2R53", "SG311", "CG251O", "1.3000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG2R53", "SG311", "CG252O", "0.2500", "1", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG2R53", "SG311", "CG252O", "1.3000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"OG2D1", "CG2R53", "SG311", "CG251O", "0.2500", "1", "0.00", "MTDO, 5-methylene-2,4-thiazolidinedione, xxwy and oashi"}, {"OG2D1", "CG2R53", "SG311", "CG251O", "1.3000", "2", "180.00", "MTDO, 5-methylene-2,4-thiazolidinedione, xxwy and oashi"}, {"OG2D1", "CG2R53", "SG311", "CG252O", "0.2500", "1", "0.00", "MTDO, 5-methylene-2,4-thiazolidinedione, xxwy and oashi"}, {"OG2D1", "CG2R53", "SG311", "CG252O", "1.3000", "2", "180.00", "MTDO, 5-methylene-2,4-thiazolidinedione, xxwy and oashi"}, {"SG2D1", "CG2R53", "SG311", "CG251O", "0.2500", "1", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG2D1", "CG2R53", "SG311", "CG251O", "0.6000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG2D1", "CG2R53", "SG311", "CG252O", "0.2500", "1", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG2D1", "CG2R53", "SG311", "CG252O", "0.6000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R51", "CG2R57", "CG2R57", "CG2R51", "0.4500", "2", "180.00", "33BPO, 3,3-bipyrrole, lf"}, {"CG2R51", "CG2R57", "CG2R57", "CG2R51", "0.0800", "4", "0.00", "33BPO, 3,3-bipyrrole, lf"}, {"CG2R51", "CG2R57", "NG2R57", "CG2R51", "0.3200", "2", "180.00", "13BPO, 1,3-bipyrrole, lf"}, {"CG2R51", "CG2R57", "NG2R57", "CG2R51", "0.1200", "4", "0.00", "13BPO, 1,3-bipyrrole, lf"}, {"CG2R51", "CG2R57", "NG2R57", "CG2R51", "0.0150", "6", "0.00", "13BPO, 1,3-bipyrrole, lf"}, {"CG1N1", "CG2R61", "CG2R61", "CG2R61", "2.0000", "2", "180.00", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN), yin"}, {"CG1N1", "CG2R61", "CG2R61", "CG2RC0", "1.3000", "2", "180.00", "CYIN, 5-cyanoindole; from 3CYP, 3-Cyanopyridine; alr"}, {"CG1N1", "CG2R61", "CG2R61", "NG2R60", "1.0000", "2", "180.00", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN), yin"}, {"CG1N1", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN) Kenno: was 5.0 1 0.0 (sic!) ==> reset to default."}, {"CG1N1", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN) Kenno: was 5.0 1 0.0 (sic!) ==> reset to default."}, {"CG2DC1", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC1", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "HDZ2, hydrazone model cmpd 2 Kenno: 4.2 -> 2.4"}, {"CG2DC2", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC2", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "HDZ2, hydrazone model cmpd 2 Kenno: 4.2 -> 2.4"}, {"CG2N2", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "BAMI, benzamidinium; default parameter; sz"}, {"CG2N2", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "BAMI, benzamidinium; default parameter; sz"}, {"CG2O1", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "3NAP, nicotinamide Kenno: 1.0 -> 3.1"}, {"CG2O1", "CG2R61", "CG2R61", "NG2R60", "5.0000", "2", "180.00", "3NAP, nicotinamide"}, {"CG2O1", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "3NAP, nicotinamide Kenno: 4.2 -> 2.4"}, {"CG2O1", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "3NAP, nicotinamide Kenno: 4.2 -> 2.4"}, {"CG2O2", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "ZOIC, benzoic acid, MBOA, methylbenzoate; default parameter; kevo and jal"}, {"CG2O2", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "ZOIC, benzoic acid, MBOA, methylbenzoate; default parameter; kevo and jal"}, {"CG2O3", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2O3", "CG2R61", "CG2R61", "NG2R60", "1.0000", "2", "180.00", "PYRIDINE pyridine, yin"}, {"CG2O3", "CG2R61", "CG2R61", "NG2S1", "2.4000", "2", "180.00", "2XBD, Gamma 2-carboxy phenyl GA CDCA amide, corrected by kevo"}, {"CG2O3", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PYRIDINE aminopyridine Kenno: 4.2 -> 2.4"}, {"CG2O3", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "PYRIDINE aminopyridine Kenno: 4.2 -> 2.4"}, {"CG2O4", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-aldehyde) unmodified, yin"}, {"CG2O4", "CG2R61", "CG2R61", "NG2R60", "1.0000", "2", "180.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-aldehyde) unmodified, yin"}, {"CG2O4", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-aldehyde) Kenno: 4.2 -> 2.4 unmodified"}, {"CG2O4", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-aldehyde) Kenno: 4.2 -> 2.4 unmodified"}, {"CG2O5", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml"}, {"CG2O5", "CG2R61", "CG2R61", "NG2R60", "5.0000", "2", "180.00", "3ACP, 3-acetylpyridine unmodified"}, {"CG2O5", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "3ACP, 3-acetylpyridine reset to default by kevo; verified by mcs"}, {"CG2O5", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "3ACP, 3-acetylpyridine reset to default by kevo; verified by mcs"}, {"CG2R61", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "PROT JES 8/25/89"}, {"CG2R61", "CG2R61", "CG2R61", "CG2R62", "0.5000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R61", "CG2R61", "CG2R61", "CG2R63", "3.2000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R61", "CG2R61", "CG2R64", "3.1000", "2", "180.00", "18NFD, 1,8-naphthyridine, erh"}, {"CG2R61", "CG2R61", "CG2R61", "CG2R66", "3.1000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R61", "CG2R61", "CG2R67", "3.1000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "CG2R61", "CG2RC0", "3.0000", "2", "180.00", "INDO/TRP"}, {"CG2R61", "CG2R61", "CG2R61", "CG311", "3.1000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R61", "CG2R61", "CG312", "3.1000", "2", "180.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG2R61", "CG2R61", "CG2R61", "CG321", "3.1000", "2", "180.00", "PROT JES 8/25/89 toluene and ethylbenzene"}, {"CG2R61", "CG2R61", "CG2R61", "CG324", "3.1000", "2", "180.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG2R61", "CG2R61", "CG331", "3.1000", "2", "180.00", "PROT toluene, adm jr., 3/7/92"}, {"CG2R61", "CG2R61", "CG2R61", "NG2O1", "2.0000", "2", "180.00", "NITB, nitrobenzene"}, {"CG2R61", "CG2R61", "CG2R61", "NG2R60", "1.2000", "2", "180.00", "PYR1, pyridine, yin"}, {"CG2R61", "CG2R61", "CG2R61", "NG2R61", "3.7000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R61", "CG2R61", "NG2R62", "1.2000", "2", "180.00", "PYRD, pyridazine (also applies to PYRM, pyrimidine); from PYR1, pyridine, yin; adm"}, {"CG2R61", "CG2R61", "CG2R61", "NG2RC0", "1.5000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2R61", "CG2R61", "NG2S1", "3.1000", "2", "180.00", "RETINOL PACP"}, {"CG2R61", "CG2R61", "CG2R61", "NG2S3", "5.0000", "2", "180.00", "PYRIDINE aminopyridine, yin"}, {"CG2R61", "CG2R61", "CG2R61", "NG301", "1.4000", "2", "180.00", "DMAN, N,N-dimethylaniline, kevo"}, {"CG2R61", "CG2R61", "CG2R61", "NG311", "3.1000", "2", "180.00", "FEOZ, phenoxazine, erh based on PROT toluene, adm jr., 3/7/92"}, {"CG2R61", "CG2R61", "CG2R61", "NG3N1", "3.1000", "2", "180.00", "PHHZ, phenylhydrazine, ed; reset to default param by kevo"}, {"CG2R61", "CG2R61", "CG2R61", "OG301", "3.1000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "CG2R61", "OG303", "3.1000", "2", "180.00", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "CG2R61", "CG2R61", "OG311", "3.1000", "2", "180.00", "PYRIDINE phenol, yin"}, {"CG2R61", "CG2R61", "CG2R61", "OG312", "3.1000", "2", "180.00", "PROT adm jr. 8/27/91, phenoxide"}, {"CG2R61", "CG2R61", "CG2R61", "OG3R60", "3.1000", "2", "180.00", "FEOZ, phenoxazine, erh based on PROT toluene, adm jr., 3/7/92"}, {"CG2R61", "CG2R61", "CG2R61", "SG311", "4.5000", "2", "180.00", "FETZ, phenothiazine, erh based on toluene, adm jr., 3/7/92"}, {"CG2R61", "CG2R61", "CG2R61", "SG3O1", "3.1000", "2", "180.00", "based on toluene, adm jr., 3/7/92"}, {"CG2R61", "CG2R61", "CG2R61", "SG3O2", "3.0000", "2", "180.00", "BSAM, benzenesulfonamide and other sulfonamides, xxwy"}, {"CG2R61", "CG2R61", "CG2R61", "CLGR1", "3.0000", "2", "180.00", "CHLB, chlorobenzene"}, {"CG2R61", "CG2R61", "CG2R61", "BRGR1", "3.0000", "2", "180.00", "BROB, bromobenzene"}, {"CG2R61", "CG2R61", "CG2R61", "IGR1", "2.1000", "2", "180.00", "IODB, iodobenzene"}, {"CG2R61", "CG2R61", "CG2R61", "HGR61", "4.2000", "2", "180.00", "PROT JES 8/25/89 benzene"}, {"CG2R61", "CG2R61", "CG2R61", "HGR62", "4.2000", "2", "180.00", "BROB, bromobenzene"}, {"CG2R62", "CG2R61", "CG2R61", "HGR61", "4.2000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R63", "CG2R61", "CG2R61", "NG2R61", "0.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R63", "CG2R61", "CG2R61", "NG2R62", "1.2000", "2", "180.00", "43HSPY, 4(3H)-pyrimidinethione; from CG2R64 CG2R61 CG2R61 NG2R62; isg"}, {"CG2R63", "CG2R61", "CG2R61", "HGR61", "1.0000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R63", "CG2R61", "CG2R61", "HGR62", "0.5000", "2", "180.00", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from CG2R64 CG2R61 CG2R61 HGR62; isg"}, {"CG2R64", "CG2R61", "CG2R61", "CG331", "3.1000", "2", "180.00", "2A46PD, 2-Amino-4,6-dimethyl-pyridine CDCA conjugate, cacha"}, {"CG2R64", "CG2R61", "CG2R61", "NG2R62", "1.2000", "2", "180.00", "PTID, pteridine, erh"}, {"CG2R64", "CG2R61", "CG2R61", "HGR61", "1.0000", "2", "180.00", "18NFD, 1,8-naphthyridine, erh"}, {"CG2R64", "CG2R61", "CG2R61", "HGR62", "0.5000", "2", "180.00", "PTID, pteridine, erh"}, {"CG2R66", "CG2R61", "CG2R61", "NG2S1", "3.1000", "2", "180.00", "3FBD, 3-fluoroanilide patch. Kenno: copied from RETINOL PACP while retrofitting CG2R66 ==> re-optimize"}, {"CG2R66", "CG2R61", "CG2R61", "HGR61", "4.2000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R67", "CG2R61", "CG2R61", "HGR61", "4.2000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2RC0", "CG2R61", "CG2R61", "BRGR1", "3.1000", "2", "180.00", "drug design project, xxwy"}, {"CG2RC0", "CG2R61", "CG2R61", "HGR61", "3.0000", "2", "180.00", "INDO/TRP"}, {"CG2RC0", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "drug design project, xxwy"}, {"CG311", "CG2R61", "CG2R61", "OG311", "2.4000", "2", "180.00", "FBIB, Fatty Binding Inhibitior B, cacha Kenno: 4.2 -> 2.4"}, {"CG311", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "NAMODEL difluorotoluene Kenno: 4.2 -> 2.4"}, {"CG312", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "BDFP, BDFD, Difuorobenzylphosphonate Kenno: 4.2 -> 2.4"}, {"CG321", "CG2R61", "CG2R61", "NG2R60", "1.0000", "2", "180.00", "PYRIDINE 3-ethylpyridine, yin"}, {"CG321", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PROT JES 8/25/89 toluene and ethylbenzene Kenno: 4.2 -> 2.4"}, {"CG321", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "PROT JES 8/25/89 toluene and ethylbenzene Kenno: 4.2 -> 2.4"}, {"CG324", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "BPIP, N-Benzyl PIP, cacha Kenno: 4.2 -> 2.4"}, {"CG331", "CG2R61", "CG2R61", "CG331", "2.4000", "2", "180.00", "OXYL, o-xylene, kevo for gsk/ibm"}, {"CG331", "CG2R61", "CG2R61", "NG2R60", "1.0000", "2", "180.00", "PYRIDINE 3-methylpyridine, yin"}, {"CG331", "CG2R61", "CG2R61", "NG2S1", "2.4000", "2", "180.00", "3A2MPD, 3-amino-2-methyl-pyridine CDCA conjugate, corrected by kevo"}, {"CG331", "CG2R61", "CG2R61", "OG301", "2.4000", "2", "180.00", "FBID, Fatty acid Binding protein Inhibitor D, cacha Kenno: 4.2 -> 2.4"}, {"CG331", "CG2R61", "CG2R61", "OG311", "2.4000", "2", "180.00", "FBIA, Fatty Binding Inhibitior B, cacha Kenno: 4.2 -> 2.4"}, {"CG331", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PROT toluene, adm jr., 3/7/92 Kenno: 4.2 -> 2.4"}, {"CG331", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "PROT toluene, adm jr., 3/7/92 Kenno: 4.2 -> 2.4"}, {"NG2O1", "CG2R61", "CG2R61", "HGR61", "1.0000", "2", "180.00", "NITB, nitrobenzene"}, {"NG2R60", "CG2R61", "CG2R61", "NG2R60", "0.9000", "2", "180.00", "PYZN, pyrazine"}, {"NG2R60", "CG2R61", "CG2R61", "NG2R62", "3.0000", "2", "180.00", "PTID, pteridine, erh"}, {"NG2R60", "CG2R61", "CG2R61", "NG2S1", "5.0000", "2", "180.00", "3AMP, 3-Amino pyridine, cacha"}, {"NG2R60", "CG2R61", "CG2R61", "NG2S3", "5.0000", "2", "180.00", "PYRIDINE aminopyridine, yin"}, {"NG2R60", "CG2R61", "CG2R61", "OG311", "1.0000", "2", "180.00", "PYRIDINE 3-hydroxypyridine Kenno: 0.0 (unlikely) -> 1.0 from 3-methylpyridine, yin"}, {"NG2R60", "CG2R61", "CG2R61", "BRGR1", "3.0000", "2", "180.00", "3A5BPD, Gamma-3-Amino-5-bromo Pyridine GA CDCA Amide, cacha"}, {"NG2R60", "CG2R61", "CG2R61", "HGR61", "2.8000", "2", "180.00", "PYRIDINE pyridine, yin"}, {"NG2R60", "CG2R61", "CG2R61", "HGR62", "6.0000", "2", "180.00", "PYZN, pyrazine"}, {"NG2R61", "CG2R61", "CG2R61", "HGR61", "0.8000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg (may need to be re-evaluated; ideally re-check INDZ with molvib_energy script and also look at URA2S molvib)"}, {"NG2R61", "CG2R61", "CG2R61", "HGR62", "0.8000", "2", "180.00", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from NG2RC0 CG2R61 CG2R61 HGR61; isg (may need to be re-evaluated; ideally re-check INDZ with molvib_energy script and also look at URA2S molvib)"}, {"NG2R62", "CG2R61", "CG2R61", "NG2R62", "0.5000", "2", "180.00", "TRIB, triazine124"}, {"NG2R62", "CG2R61", "CG2R61", "HGR61", "2.8000", "2", "180.00", "PYRD, pyridazine"}, {"NG2R62", "CG2R61", "CG2R61", "HGR62", "6.0000", "2", "180.00", "TRIB, triazine124"}, {"NG2RC0", "CG2R61", "CG2R61", "HGR61", "0.8000", "2", "180.00", "INDZ, indolizine, kevo"}, {"NG2S1", "CG2R61", "CG2R61", "OG301", "2.4000", "2", "180.00", "2AMFD, Gamma 2-amino phenyl methyl ether, corrected by kevo"}, {"NG2S1", "CG2R61", "CG2R61", "OG311", "2.4000", "2", "180.00", "2AMF, 2-acetamide phenol, cacha Kenno: 4.2 -> 2.4"}, {"NG2S1", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "RETINOL PACP Kenno: 4.2 -> 2.4"}, {"NG2S1", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "3AMP, 3-Amino pyridine, cacha Kenno: 4.2 -> 2.4"}, {"NG2S3", "CG2R61", "CG2R61", "NG2S3", "3.1000", "2", "180.00", "PYRIDINE diaminopyridine. Kenno: Change to 2.4 ???"}, {"NG2S3", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PYRIDINE aminopyridine Kenno: 4.2 -> 2.4"}, {"NG2S3", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "PYRIDINE aminopyridine Kenno: 4.2 -> 2.4"}, {"NG301", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "DMAN, N,N-dimethylaniline; from NG311 CG2R61 CG2R61 HGR61; sc"}, {"NG311", "CG2R61", "CG2R61", "OG3R60", "2.5800", "2", "180.00", "FEOZ, phenoxazine fit_dihedral, erh"}, {"NG311", "CG2R61", "CG2R61", "SG311", "3.5700", "2", "180.00", "FETZ, phenothiazine fit_dihedral, erh"}, {"NG311", "CG2R61", "CG2R61", "SG3O2", "2.4000", "2", "180.00", "OBTZ, sulfonamide heterocycle in drug HCTZ, xxwy"}, {"NG311", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "FEOZ, phenoxazine, erh"}, {"NG3N1", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PHHZ, phenylhydrazine, ed; reset to default param by kevo"}, {"OG301", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "BIPHENYL ANALOGS, peml. Kenno: 4.2 -> 2.4"}, {"OG303", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PROTNA phenol phosphate, 6/94, adm jr. Kenno: 4.2 -> 2.4"}, {"OG311", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PROT JES 8/25/89 phenol Kenno: 4.2 -> 2.4"}, {"OG311", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "PROT JES 8/25/89 phenol Kenno: 4.2 -> 2.4"}, {"OG312", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PROT adm jr. 8/27/91, phenoxide Kenno: 4.2 -> 2.4"}, {"OG3R60", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "FEOZ, phenoxazine, erh"}, {"SG311", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "FETZ, phenothiazine, erh based on toluene, adm jr., 3/7/92 Kenno: 4.2 -> 2.4"}, {"SG3O1", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "based on toluene, adm jr., 3/7/92 Kenno: 4.2 -> 2.4"}, {"SG3O2", "CG2R61", "CG2R61", "HGR61", "2.1000", "2", "180.00", "BSAM, benzenesulfonamide and other sulfonamides, xxwy"}, {"CLGR1", "CG2R61", "CG2R61", "CLGR1", "2.4000", "2", "180.00", "12DCB, 1,2,dichlorobenzene, (CG331 CG2R61 CG2R61 CG311), isg/fylin"}, {"CLGR1", "CG2R61", "CG2R61", "HGR62", "3.0000", "2", "180.00", "CHLB, chlorobenzene"}, {"BRGR1", "CG2R61", "CG2R61", "BRGR1", "2.4000", "2", "180.00", "12DBB, 1,2,dibromobenzene, (CG331 CG2R61 CG2R61 CG311), isg/fylin"}, {"BRGR1", "CG2R61", "CG2R61", "HGR62", "3.0000", "2", "180.00", "BROB, bromobenzene"}, {"IGR1", "CG2R61", "CG2R61", "IGR1", "2.4000", "2", "180.00", "12DIB, 1,2,diiodobenzene, (CG331 CG2R61 CG2R61 CG311), isg/fylin"}, {"IGR1", "CG2R61", "CG2R61", "HGR62", "3.0000", "2", "180.00", "IODB, iodobenzene"}, {"HGR61", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PROT JES 8/25/89 benzene"}, {"HGR61", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "BROB, bromobenzene"}, {"HGR62", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "TRIB, triazine124"}, {"CG2R61", "CG2R61", "CG2R62", "CG2R62", "0.5000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R61", "CG2R61", "CG2R62", "CG2R63", "3.1000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R61", "CG2R62", "NG2R61", "7.0000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R61", "CG2R62", "NG2R62", "1.2000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R61", "CG2R61", "CG2R62", "OG3R60", "3.1000", "2", "180.00", "RIN, coumarin, isg"}, {"HGR61", "CG2R61", "CG2R62", "CG2R62", "3.1000", "2", "180.00", "RIN, coumarin, isg"}, {"HGR61", "CG2R61", "CG2R62", "CG2R63", "1.0000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"HGR61", "CG2R61", "CG2R62", "NG2R61", "0.4000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"HGR61", "CG2R61", "CG2R62", "NG2R62", "2.8000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"HGR61", "CG2R61", "CG2R62", "OG3R60", "2.4000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R61", "CG2R61", "CG2R63", "NG2R61", "0.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R61", "CG2R63", "NG2R67", "0.5000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from CG2R61 CG2R61 CG2R63 NG2R61, YTS2; isg"}, {"CG2R61", "CG2R61", "CG2R63", "SG2D1", "4.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"HGR62", "CG2R61", "CG2R63", "NG2R61", "1.0000", "2", "180.00", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from HGR62 CG2R62 CG2R63 NG2R61; isg"}, {"HGR62", "CG2R61", "CG2R63", "NG2R67", "1.0000", "2", "180.00", "3PH24S, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinethione; from HGR62 CG2R62 CG2R63 NG2R61, NA; isg"}, {"HGR62", "CG2R61", "CG2R63", "SG2D1", "2.4000", "2", "180.00", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from SG311 CG2R61 CG2R61 HGR61; isg"}, {"CG2R61", "CG2R61", "CG2R64", "NG2R60", "1.2000", "2", "180.00", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"CG2R61", "CG2R61", "CG2R64", "NG2R62", "1.2000", "2", "180.00", "18NFD, 1,8-naphthyridine, from PYR1, pyridine, erh"}, {"CG2R61", "CG2R61", "CG2R64", "NG2S1", "3.1000", "2", "180.00", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"NG2R60", "CG2R61", "CG2R64", "NG2R62", "1.5000", "2", "0.00", "PTID, pteridine, erh"}, {"OG311", "CG2R61", "CG2R64", "NG2R60", "3.1000", "2", "180.00", "2A3HPD, cacha"}, {"OG311", "CG2R61", "CG2R64", "NG2S1", "2.4000", "2", "180.00", "2A3HPD, cacha"}, {"HGR61", "CG2R61", "CG2R64", "NG2R60", "2.8000", "2", "180.00", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"HGR61", "CG2R61", "CG2R64", "NG2S1", "2.4000", "2", "180.00", "2AMP, 2-amino pyridine, default parameter by analogy to PACP, kevo"}, {"CG2R61", "CG2R61", "CG2R66", "CG2R61", "3.1000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R61", "CG2R66", "CG2R67", "3.1000", "2", "180.00", "PYO2F , from CG2R61 CG2R61 CG2R66 CG2R61, penalty= 0.5"}, {"CG2R61", "CG2R61", "CG2R66", "FGR1", "4.5000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R66", "CG2R61", "CG2R66", "CG2R61", "3.1000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R66", "CG2R61", "CG2R66", "FGR1", "4.5000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG331", "CG2R61", "CG2R66", "CG2R61", "3.1000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG331", "CG2R61", "CG2R66", "FGR1", "4.5000", "2", "180.00", "NAMODEL difluorotoluene"}, {"NG2R60", "CG2R61", "CG2R66", "CG2R61", "1.2000", "2", "180.00", "3FLP, 3-fluoropyridine. Kenno: copied from pyridine while retrofitting CG2R66 ==> re-optimize"}, {"NG2R60", "CG2R61", "CG2R66", "FGR1", "3.1000", "2", "180.00", "PYRIDINE fluoropyridine, yin"}, {"NG2S1", "CG2R61", "CG2R66", "CG2R61", "3.1000", "2", "180.00", "2FBD, 2-fluoroanilide patch. Kenno: copied from RETINOL PACP while retrofitting CG2R66 ==> re-optimize"}, {"NG2S1", "CG2R61", "CG2R66", "FGR1", "2.4000", "2", "180.00", "2FBD, Gamma 2-Fluoro amino benzene glutamic acid CDCA amide, cacha Kenno: 3.1 -> 2.4"}, {"HGR62", "CG2R61", "CG2R66", "CG2R61", "4.2000", "2", "180.00", "NAMODEL difluorotoluene"}, {"HGR62", "CG2R61", "CG2R66", "CG2R67", "4.2000", "2", "180.00", "PYO2F , from HGR62 CG2R61 CG2R66 CG2R61, penalty= 0.5"}, {"HGR62", "CG2R61", "CG2R66", "FGR1", "2.4000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R61", "CG2R67", "CG2R61", "3.1000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "CG2R67", "CG2R66", "3.1000", "2", "180.00", "PYO2F , from CG2R61 CG2R61 CG2R67 CG2R61, penalty= 1.5"}, {"CG2R61", "CG2R61", "CG2R67", "CG2R67", "3.1000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "CG2R67", "CG2RC0", "0.2500", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2R61", "CG2R67", "NG2R60", "1.2000", "2", "180.00", "22BPY, 2,2'-bipyridine, from CG2R61 CG2R61 CG2R61 NG2R60, kevo"}, {"CG2R61", "CG2R61", "CG2R67", "NG2R67", "3.1000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R61 CG2R61 CG2R61 CG2R61; isg"}, {"NG2R60", "CG2R61", "CG2R67", "CG2R61", "1.2000", "2", "180.00", "3PHP, 3-phenyl-pyridine; Kenno: 3.1 -> 1.2 from PYRIDINE pyridine, yin"}, {"NG2R60", "CG2R61", "CG2R67", "CG2R67", "1.0000", "2", "180.00", "3PHP, 3-phenyl-pyridine, Kenno: 3.1 -> 1.0 from 3-methylpyridine, yin"}, {"HGR61", "CG2R61", "CG2R67", "CG2R61", "4.2000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"HGR61", "CG2R61", "CG2R67", "CG2R66", "4.2000", "2", "180.00", "PYO2F , from HGR61 CG2R61 CG2R67 CG2R61, penalty= 1.5"}, {"HGR61", "CG2R61", "CG2R67", "CG2R67", "4.2000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"HGR61", "CG2R61", "CG2R67", "CG2RC0", "3.0000", "2", "180.00", "CRBZ, carbazole, erh"}, {"HGR61", "CG2R61", "CG2R67", "NG2R60", "2.8000", "2", "180.00", "22BPY, 2,2'-bipyridine, from NG2R60 CG2R61 CG2R61 HGR61, kevo"}, {"HGR61", "CG2R61", "CG2R67", "NG2R67", "2.8000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from NG2R60 CG2R61 CG2R61 HGR61; isg"}, {"HGR62", "CG2R61", "CG2R67", "CG2R61", "4.2000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"HGR62", "CG2R61", "CG2R67", "CG2R67", "4.2000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2O1", "CG2R61", "CG2RC0", "CG2RC0", "3.1000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2O1", "CG2R61", "CG2RC0", "NG2R51", "2.8000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2R61", "CG2R61", "CG2RC0", "CG25C1", "3.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R61", "CG2R61", "CG2RC0", "CG25C2", "3.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R61", "CG2R61", "CG2RC0", "CG2R51", "4.0000", "2", "180.00", "INDO/TRP"}, {"CG2R61", "CG2R61", "CG2RC0", "CG2R52", "1.5000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG2R61", "CG2R61", "CG2RC0", "CG2R67", "0.2500", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2R61", "CG2RC0", "CG2RC0", "3.0000", "2", "180.00", "INDO/TRP"}, {"CG2R61", "CG2R61", "CG2RC0", "CG3C52", "0.0000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"CG2R61", "CG2R61", "CG2RC0", "NG2R50", "1.5000", "2", "180.00", "ZIMI, benzimidazole, kevo"}, {"CG2R61", "CG2R61", "CG2RC0", "NG2R51", "3.0000", "2", "180.00", "INDO/TRP"}, {"CG2R61", "CG2R61", "CG2RC0", "NG2RC0", "3.5000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2R61", "CG2RC0", "NG3C51", "6.0000", "2", "180.00", "INDI, indoline, kevo"}, {"CG2R61", "CG2R61", "CG2RC0", "OG2R50", "0.0000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2R61", "CG2R61", "CG2RC0", "OG3C51", "2.0000", "2", "180.00", "ZDOL, 1,3-benzodioxole, pram and oashi"}, {"CG2R61", "CG2R61", "CG2RC0", "SG2R50", "0.0000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"NG2R62", "CG2R61", "CG2RC0", "CG2RC0", "2.2000", "2", "180.00", "PUR9, purine(N9H), kevo"}, {"NG2R62", "CG2R61", "CG2RC0", "NG2R50", "0.0000", "2", "180.00", "PUR9, purine(N9H), kevo"}, {"NG2R62", "CG2R61", "CG2RC0", "NG2R51", "0.0000", "2", "180.00", "PUR7, purine(N7H), kevo"}, {"HGR61", "CG2R61", "CG2RC0", "CG25C1", "3.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"HGR61", "CG2R61", "CG2RC0", "CG25C2", "3.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"HGR61", "CG2R61", "CG2RC0", "CG2R51", "4.0000", "2", "180.00", "INDO/TRP"}, {"HGR61", "CG2R61", "CG2RC0", "CG2R52", "0.0000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"HGR61", "CG2R61", "CG2RC0", "CG2R67", "3.0000", "2", "180.00", "CRBZ, carbazole, erh"}, {"HGR61", "CG2R61", "CG2RC0", "CG2RC0", "3.0000", "2", "180.00", "INDO/TRP"}, {"HGR61", "CG2R61", "CG2RC0", "CG3C52", "0.0000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"HGR61", "CG2R61", "CG2RC0", "NG2R50", "0.8000", "2", "180.00", "ZIMI, benzimidazole, kevo"}, {"HGR61", "CG2R61", "CG2RC0", "NG2R51", "3.0000", "2", "180.00", "INDO/TRP"}, {"HGR61", "CG2R61", "CG2RC0", "NG2RC0", "0.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"HGR61", "CG2R61", "CG2RC0", "NG3C51", "0.0000", "2", "180.00", "INDI, indoline, kevo"}, {"HGR61", "CG2R61", "CG2RC0", "OG2R50", "0.0000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"HGR61", "CG2R61", "CG2RC0", "OG3C51", "2.4000", "2", "180.00", "ZDOL, 1,3-benzodioxole, pram and oashi"}, {"HGR61", "CG2R61", "CG2RC0", "SG2R50", "0.0000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"HGR62", "CG2R61", "CG2RC0", "CG25C1", "2.4000", "2", "180.00", "drug design project, xxwy"}, {"HGR62", "CG2R61", "CG2RC0", "CG25C2", "2.4000", "2", "180.00", "drug design project, xxwy"}, {"HGR62", "CG2R61", "CG2RC0", "CG2RC0", "4.2000", "2", "180.00", "PUR7, purine(N7H); PUR9, purine(N9H), kevo"}, {"HGR62", "CG2R61", "CG2RC0", "NG2R50", "1.0000", "2", "180.00", "PUR9, purine(N9H), kevo"}, {"HGR62", "CG2R61", "CG2RC0", "NG2R51", "0.0000", "2", "180.00", "PUR7, purine(N7H), kevo"}, {"CG2R61", "CG2R61", "CG311", "CG2O3", "0.2300", "2", "180.00", "FBIF, Fatty acid Binding protein Inhibitor F, cacha"}, {"CG2R61", "CG2R61", "CG311", "CG321", "0.2300", "2", "180.00", "Slack parameter from difluorotoluene picked up by FBIC ==> RE-OPTIMIZE !!!"}, {"CG2R61", "CG2R61", "CG311", "CG331", "0.2300", "2", "180.00", "FBIB, Fatty Binding Inhibitior B, cacha"}, {"CG2R61", "CG2R61", "CG311", "HGA1", "0.1000", "6", "180.00", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R61", "CG312", "PG1", "0.1500", "2", "180.00", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"CG2R61", "CG2R61", "CG312", "PG2", "0.1500", "2", "180.00", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"CG2R61", "CG2R61", "CG312", "FGA2", "0.3000", "2", "0.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG2R61", "CG2R61", "CG321", "CG2R61", "0.2300", "2", "180.00", "PYRIDINE pyr-CH2C6H5, yin"}, {"CG2R61", "CG2R61", "CG321", "CG311", "0.2300", "2", "180.00", "PROT ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CG2R61", "CG2R61", "CG321", "CG314", "0.2300", "2", "180.00", "PROT ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CG2R61", "CG2R61", "CG321", "CG321", "0.2300", "2", "180.00", "PROT ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CG2R61", "CG2R61", "CG321", "CG331", "0.2300", "2", "180.00", "PROT ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CG2R61", "CG2R61", "CG321", "NG2S1", "0.1190", "2", "0.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG2R61", "CG321", "NG2S1", "0.1320", "4", "180.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG2R61", "CG321", "NG2S1", "0.0130", "6", "180.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG2R61", "CG321", "OG302", "0.0000", "2", "0.00", "ABGA, ALPHA BENZYL GLU ACID CDCA AMIDE, cacha"}, {"CG2R61", "CG2R61", "CG321", "OG311", "0.0000", "2", "0.00", "3CAP, carbinol-pyridine (PYRIDINE pyr-CH2OH), yin"}, {"CG2R61", "CG2R61", "CG321", "PG1", "0.2000", "2", "180.00", "BDFP, Benzylphosphonate re-optimize?"}, {"CG2R61", "CG2R61", "CG321", "PG2", "0.2000", "2", "180.00", "BDFD, Benzylphosphonate / re-optimize?"}, {"CG2R61", "CG2R61", "CG321", "HGA2", "0.0020", "6", "0.00", "PROT toluene, adm jr., 3/7/92"}, {"NG2R60", "CG2R61", "CG321", "CG321", "0.2300", "2", "180.00", "2AEPD, 2-ethylamino-pyridine CDCA conjugate, corrected by kevo"}, {"NG2R60", "CG2R61", "CG321", "HGA2", "0.0020", "6", "0.00", "2AEPD, 2-ethylamino-pyridine CDCA conjugate, corrected by kevo"}, {"CG2R61", "CG2R61", "CG324", "NG3P1", "0.1500", "2", "180.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG2R61", "CG324", "NG3P3", "0.3300", "2", "0.00", "4FBA, optimized using CCCN mp2 scan, pram"}, {"CG2R61", "CG2R61", "CG324", "HGA2", "0.0000", "2", "0.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG2R61", "CG331", "HGA3", "0.0020", "6", "0.00", "PYRIDINE toluene Kenno: 180 -> 0"}, {"CG2R66", "CG2R61", "CG331", "HGA3", "0.0020", "6", "0.00", "PYRIDINE toluene Kenno: 180 -> 0"}, {"NG2R60", "CG2R61", "CG331", "HGA3", "0.0030", "6", "180.00", "3A2MPD, 3-amino-2-methyl-pyridine CDCA conjugate, cacha"}, {"CG2R61", "CG2R61", "NG2O1", "OG2N1", "0.9000", "2", "180.00", "NITB, nitrobenzene"}, {"CG2R61", "CG2R61", "NG2R60", "CG2R61", "1.2000", "2", "180.00", "PYRIDINE pyridine, yin"}, {"CG2R61", "CG2R61", "NG2R60", "CG2R64", "1.2000", "2", "180.00", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"CG2R61", "CG2R61", "NG2R60", "CG2R67", "1.2000", "2", "180.00", "22BPY, 2,2'-bipyridine, from CG2R61 CG2R61 NG2R60 CG2R61, kevo"}, {"CG2R64", "CG2R61", "NG2R60", "CG2R61", "2.2000", "2", "180.00", "PTID, pteridine, erh"}, {"CG2R66", "CG2R61", "NG2R60", "CG2R61", "1.2000", "2", "180.00", "3FLP, 3-fluoropyridine. Kenno: copied from pyridine while retrofitting CG2R66 ==> re-optimize"}, {"CG2R67", "CG2R61", "NG2R60", "CG2R61", "1.2000", "2", "180.00", "3PHP, 3-phenyl-pyridine, yin"}, {"CG321", "CG2R61", "NG2R60", "CG2R61", "3.1000", "2", "180.00", "2AEPD, 2-ethylamino-pyridine CDCA conjugate, cacha"}, {"CG331", "CG2R61", "NG2R60", "CG2R61", "3.1000", "2", "180.00", "3A2MPD, 3-amino-2-methyl-pyridine CDCA conjugate, cacha"}, {"CG331", "CG2R61", "NG2R60", "CG2R64", "3.1000", "2", "180.00", "2A46PD, 2-Amino-4,6-dimethyl-pyridine CDCA conjugate, cacha"}, {"BRGR1", "CG2R61", "NG2R60", "CG2R61", "3.0000", "2", "180.00", "3A6BPD, Gamma-3-Amino-6-bromo Pyridine GA CDCA Amide, cacha"}, {"HGR62", "CG2R61", "NG2R60", "CG2R61", "5.8000", "2", "180.00", "PYR1 pyridine, yin ! got overwritten with slack parameter during big renaming operation (par_cgenff_1e_unsorted). Restored to original from toppar_all22_prot_pyridines."}, {"HGR62", "CG2R61", "NG2R60", "CG2R64", "5.8000", "2", "180.00", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"HGR62", "CG2R61", "NG2R60", "CG2R67", "5.2500", "2", "180.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R61", "NG2R61", "CG2R63", "0.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R61", "NG2R61", "HGP1", "1.0000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"HGR62", "CG2R61", "NG2R61", "CG2R63", "4.6000", "2", "180.00", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from HGR62 CG2R62 NG2R61 CG2R63; isg"}, {"HGR62", "CG2R61", "NG2R61", "HGP1", "1.2000", "2", "180.00", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from HGR62 CG2R62 NG2R61 HGP1; isg"}, {"CG2R61", "CG2R61", "NG2R62", "CG2R64", "2.0000", "2", "180.00", "PYRM, pyrimidine"}, {"CG2R61", "CG2R61", "NG2R62", "NG2R62", "0.8000", "2", "180.00", "PYRD, pyridazine"}, {"CG2RC0", "CG2R61", "NG2R62", "CG2R64", "2.2000", "2", "180.00", "PUR9, purine(N9H), kevo"}, {"HGR62", "CG2R61", "NG2R62", "CG2R64", "7.3000", "2", "180.00", "PYRM, pyrimidine"}, {"HGR62", "CG2R61", "NG2R62", "NG2R62", "2.8000", "2", "180.00", "PYRD, pyridazine"}, {"CG2R61", "CG2R61", "NG2RC0", "CG2R51", "0.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2R61", "NG2RC0", "CG2RC0", "0.5000", "2", "180.00", "INDZ, indolizine, kevo"}, {"HGR62", "CG2R61", "NG2RC0", "CG2R51", "0.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"HGR62", "CG2R61", "NG2RC0", "CG2RC0", "1.9000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2R61", "NG2S1", "CG2O1", "1.2000", "2", "180.00", "RETINOL PACP"}, {"CG2R61", "CG2R61", "NG2S1", "HGP1", "0.5000", "2", "180.00", "RETINOL PACP"}, {"CG2R66", "CG2R61", "NG2S1", "CG2O1", "1.2000", "2", "180.00", "2FBD, 2-fluoroanilide patch. Kenno: copied from RETINOL PACP while retrofitting CG2R66 ==> re-optimize"}, {"CG2R66", "CG2R61", "NG2S1", "CG2O1", "1.0000", "3", "180.00", "2FBD, 2-fluoroanilide patch. Kenno: copied from RETINOL PACP while retrofitting CG2R66 ==> re-optimize"}, {"CG2R66", "CG2R61", "NG2S1", "HGP1", "0.5000", "2", "180.00", "2FBD, 2-fluoroanilide patch. Kenno: copied from RETINOL PACP while retrofitting CG2R66 ==> re-optimize"}, {"CG2R61", "CG2R61", "NG2S3", "HGP4", "1.3500", "2", "180.00", "PYRIDINE aminopyridine. kevo: 1.80 --> 1.35"}, {"CG2R61", "CG2R61", "NG301", "CG331", "0.9600", "2", "180.00", "DMAN, N,N-dimethylaniline, kevo"}, {"CG2R61", "CG2R61", "NG301", "CG331", "0.1050", "4", "0.00", "DMAN, N,N-dimethylaniline, kevo"}, {"CG2R61", "CG2R61", "NG301", "CG331", "0.0350", "6", "180.00", "DMAN, N,N-dimethylaniline, kevo"}, {"CG2R61", "CG2R61", "NG311", "CG2R61", "0.4400", "2", "0.00", "FEOZ, phenoxazine fit_dihedral, erh"}, {"CG2R61", "CG2R61", "NG311", "CG321", "1.2000", "2", "180.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"CG2R61", "CG2R61", "NG311", "CG321", "0.3000", "4", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"CG2R61", "CG2R61", "NG311", "SG3O2", "0.2000", "2", "180.00", "PMSM, N-phenylmethanesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "CG2R61", "NG311", "HGP1", "0.5000", "2", "180.00", "PMSM, N-phenylmethanesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "CG2R61", "NG311", "HGPAM1", "0.3200", "2", "180.00", "FEOZ, phenoxazine fit_dihedral, erh"}, {"CG2R61", "CG2R61", "NG3N1", "NG3N1", "2.3700", "2", "180.00", "PHHZ, phenylhydrazine, ed"}, {"CG2R61", "CG2R61", "NG3N1", "HGP1", "0.0000", "2", "0.00", "PHHZ, phenylhydrazine, ed"}, {"CG2R61", "CG2R61", "OG301", "CG2R61", "1.2000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "OG301", "CG321", "1.6200", "2", "180.00", "ETOB, Ethoxybenzene, cacha"}, {"CG2R61", "CG2R61", "OG301", "CG321", "0.1900", "4", "180.00", "ETOB, Ethoxybenzene, cacha"}, {"CG2R61", "CG2R61", "OG301", "CG331", "1.5800", "2", "180.00", "MEOB, Methoxybenzene update, yxu"}, {"CG2R61", "CG2R61", "OG301", "CG331", "0.2000", "4", "180.00", "MEOB, Methoxybenzene update, yxu"}, {"CG2R61", "CG2R61", "OG303", "PG1", "1.4000", "2", "180.00", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "CG2R61", "OG303", "SG3O2", "0.5100", "2", "180.00", "PMST, phenyl methanesulfonate, PSMT, phenyl sulfamate, xxwy"}, {"CG2R61", "CG2R61", "OG303", "SG3O2", "0.1500", "4", "0.00", "PMST, phenyl methanesulfonate, PSMT, phenyl sulfamate, xxwy"}, {"CG2R61", "CG2R61", "OG311", "HGP1", "0.9900", "2", "180.00", "PROT phenol OH rot bar, 3.37 kcal/mole, adm jr. 3/7/92"}, {"CG2R64", "CG2R61", "OG311", "HGP1", "0.9900", "2", "180.00", "2A3HPD, from PROT phenol, cacha"}, {"CG2R61", "CG2R61", "OG3R60", "CG2R61", "0.7600", "2", "0.00", "FEOZ, phenoxazine fit_dihedral, erh"}, {"CG2R61", "CG2R61", "SG311", "CG2R61", "1.7500", "2", "0.00", "FETZ, phenothiazine fit_dihedral, erh"}, {"CG2R61", "CG2R61", "SG3O1", "OG2P1", "0.0040", "6", "0.00", "benzene sulfonic acid anion, og"}, {"CG2R61", "CG2R61", "SG3O2", "NG311", "0.2200", "2", "0.00", "MBSM, N-methylbenzenesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "CG2R61", "SG3O2", "NG321", "0.3500", "2", "0.00", "BSAM, benzenesulfonamide, xxwy"}, {"CG2R61", "CG2R61", "SG3O2", "OG2P1", "0.0000", "6", "0.00", "BSAM, benzenesulfonamide and other sulfonamides, xxwy"}, {"CG2O1", "CG2R62", "CG2R62", "CG2R62", "3.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2O1", "CG2R62", "CG2R62", "NG2R61", "2.5000", "2", "180.00", "NA ppi, jjp1/adm jr. 7/95"}, {"CG2O1", "CG2R62", "CG2R62", "HGR63", "1.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R61", "CG2R62", "CG2R62", "CG2R61", "2.5000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R61", "CG2R62", "CG2R62", "CG2R62", "2.0000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R61", "CG2R62", "CG2R62", "CG2R63", "3.7000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "CG2R62", "NG2R61", "3.5000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "CG2R62", "NG2R62", "3.1000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R61", "CG2R62", "CG2R62", "OG3R60", "3.9000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R61", "CG2R62", "CG2R62", "HGR62", "1.0000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R62", "CG2R62", "CG2R62", "CG2R62", "6.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2R62", "CG2R62", "CG2R63", "3.0000", "2", "180.00", "2PYO, 2-Pyridone, xxwy"}, {"CG2R62", "CG2R62", "CG2R62", "NG2R61", "7.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2R62", "CG2R62", "NG2R62", "1.2000", "2", "180.00", "5FOP, PYRH; from CG2R61 CG2R61 CG2R61 NG2R62, PYRD, PYRM and CG2R61 CG2R61 CG2R61 NG2R60, PYR1; yxu"}, {"CG2R62", "CG2R62", "CG2R62", "NG2R67", "3.5000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R61 CG2R62 CG2R62 NG2R61, YTHY; isg"}, {"CG2R62", "CG2R62", "CG2R62", "OG3R60", "0.4000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R62", "CG2R62", "CG2R62", "HGR62", "1.0000", "2", "180.00", "2PYO, 2-Pyridone, xxwy"}, {"CG2R62", "CG2R62", "CG2R62", "HGR63", "1.0000", "2", "180.00", "NA bases"}, {"CG2R63", "CG2R62", "CG2R62", "CG2R67", "3.7000", "2", "180.00", "pyo3b , from CG2R61 CG2R62 CG2R62 CG2R63, penalty= 0.5"}, {"CG2R63", "CG2R62", "CG2R62", "NG2R61", "3.0000", "2", "180.00", "NA T"}, {"CG2R63", "CG2R62", "CG2R62", "NG2R62", "0.5000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R63", "CG2R62", "CG2R62", "NG2R67", "3.0000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R63 CG2R62 CG2R62 NG2R61; isg"}, {"CG2R63", "CG2R62", "CG2R62", "HGR62", "1.0000", "2", "180.00", "NA bases"}, {"CG2R64", "CG2R62", "CG2R62", "NG2R61", "6.0000", "2", "180.00", "NA C"}, {"CG2R64", "CG2R62", "CG2R62", "HGR62", "4.0000", "2", "180.00", "NA 5mc, adm jr. 9/9/93"}, {"CG2R67", "CG2R62", "CG2R62", "NG2R61", "3.5000", "2", "180.00", "pyo2b , from CG2R61 CG2R62 CG2R62 NG2R61, penalty= 0.5"}, {"CG2R67", "CG2R62", "CG2R62", "HGR62", "1.0000", "2", "180.00", "pyo2b , from CG2R61 CG2R62 CG2R62 HGR62, penalty= 0.5"}, {"CG2R67", "CG2R62", "CG2R62", "HGR63", "1.0000", "2", "180.00", "PIUB , from CG2R61 CG2R62 CG2R62 HGR62, penalty= 1.5"}, {"CG331", "CG2R62", "CG2R62", "NG2R61", "4.0000", "2", "180.00", "NA 5mc, adm jr. 9/9/93"}, {"CG331", "CG2R62", "CG2R62", "HGR62", "4.0000", "2", "180.00", "NA 5mc, adm jr. 9/9/93"}, {"NG2R61", "CG2R62", "CG2R62", "HGR62", "3.4000", "2", "180.00", "NA C"}, {"NG2R61", "CG2R62", "CG2R62", "HGR63", "7.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"NG2R62", "CG2R62", "CG2R62", "HGR62", "6.0000", "2", "180.00", "43HPY, 4(3H)-pyrimidinone; from NG2R62 CG2R61 CG2R61 HGR62; isg"}, {"NG2R62", "CG2R62", "CG2R62", "HGR63", "1.1000", "2", "180.00", "PYRH ,6.0000 2 180.00 ! from NG2R62 CG2R62 CG2R62 HGR62, penalty= 1"}, {"NG2R67", "CG2R62", "CG2R62", "HGR62", "3.4000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from NG2R61 CG2R62 CG2R62 HGR62; isg"}, {"HGR62", "CG2R62", "CG2R62", "HGR62", "3.0000", "2", "180.00", "NA U"}, {"HGR63", "CG2R62", "CG2R62", "HGR63", "2.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R61", "CG2R62", "CG2R63", "NG2R61", "1.8000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "CG2R63", "OG2D4", "1.0000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "CG2R63", "SG2D1", "4.5000", "2", "180.00", "YT2S, 3,4-dihydro-4-thioxo-2(1H)-quinazolinone; from CG2R61 CG2R61 CG2R61 SG311, FETZ; isg"}, {"CG2R62", "CG2R62", "CG2R63", "CG2R62", "1.6000", "2", "180.00", "4PYO, 4(1H)-pyridinone, isg"}, {"CG2R62", "CG2R62", "CG2R63", "NG2R61", "1.8000", "2", "180.00", "NA T"}, {"CG2R62", "CG2R62", "CG2R63", "NG2R67", "1.8000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R61 CG2R62 CG2R63 NG2R61, YTHY; isg"}, {"CG2R62", "CG2R62", "CG2R63", "OG2D4", "1.0000", "2", "180.00", "NA bases"}, {"CG2R62", "CG2R62", "CG2R63", "OG3R60", "0.4000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R62", "CG2R62", "CG2R63", "SG2D1", "4.5000", "2", "180.00", "YT2S, 3,4-dihydro-4-thioxo-2(1H)-quinazolinone; from CG2R61 CG2R61 CG2R61 SG311, FETZ; isg"}, {"CG2R67", "CG2R62", "CG2R63", "NG2R61", "1.8000", "2", "180.00", "pyo2b , from CG2R61 CG2R62 CG2R63 NG2R61, penalty= 0.5"}, {"CG2R67", "CG2R62", "CG2R63", "OG2D4", "1.0000", "2", "180.00", "pyo2b , from CG2R61 CG2R62 CG2R63 OG2D4, penalty= 0.5"}, {"CG331", "CG2R62", "CG2R63", "NG2R61", "5.6000", "2", "180.00", "NA T"}, {"CG331", "CG2R62", "CG2R63", "OG2D4", "1.0000", "2", "180.00", "NA bases"}, {"HGR62", "CG2R62", "CG2R63", "CG2R62", "0.5000", "2", "180.00", "4PYO, 4(1H)-pyridinone, isg"}, {"HGR62", "CG2R62", "CG2R63", "NG2R61", "1.0000", "2", "180.00", "NA bases"}, {"HGR62", "CG2R62", "CG2R63", "NG2R67", "0.8000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from NG2R61 CG2R61 CG2R61 HGR61 , YTS2; isg"}, {"HGR62", "CG2R62", "CG2R63", "OG2D4", "6.0000", "2", "180.00", "NA U"}, {"HGR62", "CG2R62", "CG2R63", "OG3R60", "2.4000", "2", "180.00", "RIN, coumarin, isg"}, {"HGR62", "CG2R62", "CG2R63", "SG2D1", "2.4000", "2", "180.00", "URA4S, 3,4-dihydro-4-thioxo-2(1H)-pyrimidinone; from SG311 CG2R61 CG2R61 HGR61; isg"}, {"CG2R62", "CG2R62", "CG2R64", "NG2R62", "0.6000", "2", "180.00", "NA C"}, {"CG2R62", "CG2R62", "CG2R64", "NG2S3", "2.0000", "2", "180.00", "NA C"}, {"CG2R62", "CG2R62", "CG2R64", "NG301", "3.1000", "2", "180.00", "TMC, from 4MC, yxu"}, {"HGR62", "CG2R62", "CG2R64", "NG2R62", "3.4000", "2", "180.00", "NA C"}, {"HGR62", "CG2R62", "CG2R64", "NG2S3", "2.0000", "2", "180.00", "NA C"}, {"HGR62", "CG2R62", "CG2R64", "NG301", "0.0000", "2", "180.00", "TMC, from 4MC, yxu"}, {"CG2R62", "CG2R62", "CG2R67", "CG2R62", "3.1000", "2", "180.00", "pyo2b , from CG2R61 CG2R61 CG2R67 CG2R61, penalty= 6"}, {"CG2R62", "CG2R62", "CG2R67", "CG2R67", "3.1000", "2", "180.00", "pyo2b , from CG2R61 CG2R61 CG2R67 CG2R67, penalty= 5.5"}, {"CG2R63", "CG2R62", "CG2R67", "CG2R62", "3.1000", "2", "180.00", "pyo2b , from CG2R61 CG2R61 CG2R67 CG2R61, penalty= 8.5"}, {"CG2R63", "CG2R62", "CG2R67", "CG2R67", "3.1000", "2", "180.00", "pyo2b , from CG2R61 CG2R61 CG2R67 CG2R67, penalty= 8"}, {"NG2R61", "CG2R62", "CG2R67", "CG2R62", "1.2000", "2", "180.00", "pyo3b , from NG2R60 CG2R61 CG2R67 CG2R61, penalty= 27.5"}, {"NG2R61", "CG2R62", "CG2R67", "CG2R67", "1.0000", "2", "180.00", "pyo3b , from NG2R60 CG2R61 CG2R67 CG2R67, penalty= 27"}, {"NG2R62", "CG2R62", "CG2R67", "CG2R62", "1.2000", "2", "180.00", "PYRF , from NG2R60 CG2R61 CG2R67 CG2R61, penalty= 6.5"}, {"NG2R62", "CG2R62", "CG2R67", "CG2R67", "1.0000", "2", "180.00", "PYRF , from NG2R60 CG2R61 CG2R67 CG2R67, penalty= 6"}, {"HGR62", "CG2R62", "CG2R67", "CG2R62", "4.2000", "2", "180.00", "pyo2b , from HGR62 CG2R61 CG2R67 CG2R61, penalty= 5.5"}, {"HGR62", "CG2R62", "CG2R67", "CG2R67", "4.2000", "2", "180.00", "pyo2b , from HGR62 CG2R61 CG2R67 CG2R67, penalty= 5"}, {"HGR63", "CG2R62", "CG2R67", "CG2R62", "4.2000", "2", "180.00", "PIUB , from HGR62 CG2R61 CG2R67 CG2R61, penalty= 6.5"}, {"HGR63", "CG2R62", "CG2R67", "CG2R67", "4.2000", "2", "180.00", "PIUB , from HGR62 CG2R61 CG2R67 CG2R67, penalty= 6"}, {"CG2R62", "CG2R62", "CG331", "HGA3", "0.4600", "3", "0.00", "NA T"}, {"CG2R63", "CG2R62", "CG331", "HGA3", "0.4600", "3", "0.00", "NA T"}, {"CG2R61", "CG2R62", "NG2R61", "CG2R63", "0.6000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "NG2R61", "HGP1", "1.0000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R62", "CG2R62", "NG2R61", "CG2R62", "4.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2R62", "NG2R61", "CG2R63", "0.6000", "2", "180.00", "NA C"}, {"CG2R62", "CG2R62", "NG2R61", "CG331", "11.0000", "2", "180.00", "1MTH, 1-Methyl-Thymine, kevo for gsk/ibm"}, {"CG2R62", "CG2R62", "NG2R61", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"CG2R62", "CG2R62", "NG2R61", "CG3C53", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"CG2R62", "CG2R62", "NG2R61", "CG3RC1", "1.0000", "2", "180.00", "NA bases"}, {"CG2R62", "CG2R62", "NG2R61", "HGP1", "1.0000", "2", "180.00", "NA base"}, {"CG2R62", "CG2R62", "NG2R61", "HGP2", "1.0000", "2", "180.00", "NA base"}, {"CG2R67", "CG2R62", "NG2R61", "CG2R62", "4.0000", "2", "180.00", "PYRF , from CG2R62 CG2R62 NG2R61 CG2R62, penalty= 1.5"}, {"CG2R67", "CG2R62", "NG2R61", "CG2R63", "0.6000", "2", "180.00", "pyo3b , from CG2R61 CG2R62 NG2R61 CG2R63, penalty= 0.5"}, {"CG2R67", "CG2R62", "NG2R61", "HGP1", "1.0000", "2", "180.00", "pyo3b , from CG2R61 CG2R62 NG2R61 HGP1, penalty= 0.5"}, {"CG2R67", "CG2R62", "NG2R61", "HGP2", "1.0000", "2", "180.00", "PYRF , from CG2R62 CG2R62 NG2R61 HGP2, penalty= 1.5"}, {"NG2R62", "CG2R62", "NG2R61", "CG2R62", "0.1500", "2", "180.00", "PYRH ,0.2000 2 180.00 ! from NG2R62 CG2R64 NG2R61 CG2R63, penalty= 17"}, {"NG2R62", "CG2R62", "NG2R61", "HGP2", "3.2000", "2", "180.00", "PYRH ,3.6000 2 180.00 ! from NG2R62 CG2R64 NG2R61 HGP1, penalty= 18"}, {"HGR62", "CG2R62", "NG2R61", "CG2R62", "5.6000", "2", "180.00", "4PYO, 4(1H)-pyridinone, isg"}, {"HGR62", "CG2R62", "NG2R61", "CG2R63", "4.6000", "2", "180.00", "NA C"}, {"HGR62", "CG2R62", "NG2R61", "CG331", "0.3000", "2", "180.00", "1MTH, 1-Methyl-Thymine, kevo for gsk/ibm"}, {"HGR62", "CG2R62", "NG2R61", "CG3C51", "0.3000", "2", "180.00", "NA, glycosyl linkage"}, {"HGR62", "CG2R62", "NG2R61", "CG3RC1", "1.0000", "2", "180.00", "NA bases"}, {"HGR62", "CG2R62", "NG2R61", "HGP1", "1.2000", "2", "180.00", "adjusted for 2PYO,URAC,4PYO, kevo,isg,xxwy 8/13"}, {"HGR63", "CG2R62", "NG2R61", "CG2R62", "7.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"HGR63", "CG2R62", "NG2R61", "CG3C53", "1.0000", "2", "180.00", "NA base"}, {"HGR63", "CG2R62", "NG2R61", "HGP2", "3.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R61", "CG2R62", "NG2R62", "CG2R64", "2.0000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R62", "CG2R62", "NG2R62", "CG2R62", "2.7000", "2", "180.00", "PYRH ,0.5000 2 180.00 ! from CG2R62 CG2R62 NG2R62 CG2R64, penalty= 2.5"}, {"CG2R62", "CG2R62", "NG2R62", "CG2R64", "0.5000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R67", "CG2R62", "NG2R62", "CG2R62", "2.0000", "2", "180.00", "PYRF , from CG2R61 CG2R62 NG2R62 CG2R64, penalty= 3"}, {"NG2R61", "CG2R62", "NG2R62", "CG2R62", "3.0000", "2", "180.00", "PYRH ,4.0000 2 180.00 ! from NG2R61 CG2R64 NG2R62 CG2R62, penalty= 15"}, {"HGR62", "CG2R62", "NG2R62", "CG2R64", "7.3000", "2", "180.00", "43HPY, 4(3H)-pyrimidinone; from HGR62 CG2R61 NG2R62 CG2R64; isg"}, {"HGR63", "CG2R62", "NG2R62", "CG2R62", "7.4000", "2", "180.00", "PYRH ,7.3000 2 180.00 ! from HGR62 CG2R62 NG2R62 CG2R64, penalty= 3.5"}, {"CG2R62", "CG2R62", "NG2R67", "CG2R62", "4.0000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R62 CG2R62 NG2R61 CG2R62; isg"}, {"CG2R62", "CG2R62", "NG2R67", "CG2R63", "0.6000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R62 CG2R62 NG2R61 CG2R63, NA; isg"}, {"CG2R62", "CG2R62", "NG2R67", "CG2R67", "4.0000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R62 CG2R62 NG2R61 CG2R62; isg"}, {"HGR62", "CG2R62", "NG2R67", "CG2R62", "2.8000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from NG2R60 CG2R61 CG2R61 HGR61; isg"}, {"HGR62", "CG2R62", "NG2R67", "CG2R63", "4.6000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from HGR62 CG2R62 NG2R61 CG2R63, NA; isg"}, {"HGR62", "CG2R62", "NG2R67", "CG2R67", "1.0000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R62 CG2R62 CG2R62 HGR62; isg"}, {"CG2R61", "CG2R62", "OG3R60", "CG2R63", "0.7600", "2", "0.00", "RIN, coumarin, isg"}, {"CG2R62", "CG2R62", "OG3R60", "CG2R63", "0.9400", "2", "0.00", "RIN, coumarin, isg"}, {"NG2R61", "CG2R63", "CG2RC0", "CG2RC0", "0.2000", "2", "180.00", "NA G"}, {"NG2R61", "CG2R63", "CG2RC0", "NG2R50", "2.0000", "2", "180.00", "NA G"}, {"OG2D4", "CG2R63", "CG2RC0", "CG2RC0", "14.0000", "2", "180.00", "NA G"}, {"OG2D4", "CG2R63", "CG2RC0", "NG2R50", "0.0000", "2", "180.00", "NA G"}, {"CG2R61", "CG2R63", "NG2R61", "CG2R63", "0.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R63", "NG2R61", "CG2R64", "1.5000", "2", "180.00", "43HSPY, 4(3H)-pyrimidinethione; from CG2R62 CG2R63 NG2R61 CG2R63; isg"}, {"CG2R61", "CG2R63", "NG2R61", "HGP1", "4.8000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R62", "CG2R63", "NG2R61", "CG2R62", "1.5000", "2", "180.00", "2PYO, 2-Pyridone, xxwy"}, {"CG2R62", "CG2R63", "NG2R61", "CG2R63", "1.5000", "2", "180.00", "NA U"}, {"CG2R62", "CG2R63", "NG2R61", "CG2R64", "0.5000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R62", "CG2R63", "NG2R61", "HGP1", "4.8000", "2", "180.00", "NA T"}, {"CG2RC0", "CG2R63", "NG2R61", "CG2R64", "0.2000", "2", "180.00", "NA G"}, {"CG2RC0", "CG2R63", "NG2R61", "HGP1", "3.6000", "2", "180.00", "NA G"}, {"NG2R61", "CG2R63", "NG2R61", "CG2R61", "0.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"NG2R61", "CG2R63", "NG2R61", "CG2R62", "1.5000", "2", "180.00", "NA U"}, {"NG2R61", "CG2R63", "NG2R61", "CG2R63", "3.0000", "2", "180.00", "NA T"}, {"NG2R61", "CG2R63", "NG2R61", "CG331", "11.0000", "2", "180.00", "1MTH, 1-Methyl-Thymine, kevo for gsk/ibm"}, {"NG2R61", "CG2R63", "NG2R61", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"NG2R61", "CG2R63", "NG2R61", "CG3RC1", "1.0000", "2", "180.00", "NA base"}, {"NG2R61", "CG2R63", "NG2R61", "HGP1", "3.3000", "2", "180.00", "NAMODEL cytosine tautomer"}, {"NG2R62", "CG2R63", "NG2R61", "CG2R62", "0.6000", "2", "180.00", "NA C"}, {"NG2R62", "CG2R63", "NG2R61", "CG331", "11.0000", "2", "180.00", "CYT, BTMC,...; not optimized; yxu"}, {"NG2R62", "CG2R63", "NG2R61", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"NG2R62", "CG2R63", "NG2R61", "CG3RC1", "0.9000", "2", "180.00", "NA bases"}, {"NG2R67", "CG2R63", "NG2R61", "CG2R61", "1.5000", "2", "180.00", "3PH24S, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinethione; from NG2R61 CG2R63 NG2R61 CG2R62, NA; isg"}, {"NG2R67", "CG2R63", "NG2R61", "CG2R62", "1.5000", "2", "180.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from NG2R61 CG2R63 NG2R61 CG2R62, NA; isg"}, {"NG2R67", "CG2R63", "NG2R61", "HGP1", "3.3000", "2", "180.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from NG2R61 CG2R63 NG2R61 HGP1, NA; isg"}, {"OG2D4", "CG2R63", "NG2R61", "CG2R62", "1.6000", "2", "180.00", "NA C"}, {"OG2D4", "CG2R63", "NG2R61", "CG2R63", "0.9000", "2", "180.00", "NA bases"}, {"OG2D4", "CG2R63", "NG2R61", "CG2R64", "14.0000", "2", "180.00", "NA G"}, {"OG2D4", "CG2R63", "NG2R61", "CG331", "11.0000", "2", "180.00", "1MTH, 1-Methyl-Thymine, kevo for gsk/ibm"}, {"OG2D4", "CG2R63", "NG2R61", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"OG2D4", "CG2R63", "NG2R61", "CG3RC1", "1.0000", "2", "180.00", "NA base"}, {"OG2D4", "CG2R63", "NG2R61", "HGP1", "0.0000", "2", "180.00", "NA G"}, {"SG2D1", "CG2R63", "NG2R61", "CG2R61", "1.6000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"SG2D1", "CG2R63", "NG2R61", "CG2R62", "1.6000", "2", "180.00", "YT4S, 2,3-dihydro-2-thioxo-4(1H)-quinazolinone; from OG2D4 CG2R63 NG2R61 CG2R62, NA; isg"}, {"SG2D1", "CG2R63", "NG2R61", "CG2R63", "0.9000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"SG2D1", "CG2R63", "NG2R61", "CG2R64", "14.0000", "2", "180.00", "43HSPY, 4(3H)-pyrimidinethione; from OG2D4 CG2R63 NG2R61 CG2R64; isg"}, {"SG2D1", "CG2R63", "NG2R61", "HGP1", "0.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"NG2R61", "CG2R63", "NG2R62", "CG2R64", "0.6000", "2", "180.00", "NA C"}, {"OG2D4", "CG2R63", "NG2R62", "CG2R64", "1.6000", "2", "180.00", "NA C"}, {"CG2R61", "CG2R63", "NG2R67", "CG2R63", "1.5000", "2", "180.00", "3PH24S, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinethione; from CG2R62 CG2R63 NG2R61 CG2R63, NA; isg"}, {"CG2R61", "CG2R63", "NG2R67", "CG2R64", "1.5000", "2", "180.00", "43HSPP, 3-phenyl-4(3H)-pyrimidinethione; from 43HSPY; isg"}, {"CG2R61", "CG2R63", "NG2R67", "CG2R67", "1.5000", "2", "180.00", "3PH24S, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinethione; from CG2R62 CG2R63 NG2R67 CG2R67; isg"}, {"CG2R62", "CG2R63", "NG2R67", "CG2R62", "1.5000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R62 CG2R63 NG2R61 CG2R62, 2PYO; isg"}, {"CG2R62", "CG2R63", "NG2R67", "CG2R63", "1.5000", "2", "180.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from CG2R62 CG2R63 NG2R61 CG2R63, NA; isg"}, {"CG2R62", "CG2R63", "NG2R67", "CG2R64", "0.5000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from CG2R62 CG2R63 NG2R61 CG2R64, TC243C; isg"}, {"CG2R62", "CG2R63", "NG2R67", "CG2R67", "1.5000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R62 CG2R63 NG2R61 CG2R62, 2PYO; isg"}, {"NG2R61", "CG2R63", "NG2R67", "CG2R63", "3.0000", "2", "180.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from NG2R61 CG2R63 NG2R61 CG2R63, NA; isg"}, {"NG2R61", "CG2R63", "NG2R67", "CG2R67", "11.0000", "2", "180.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from NG2R61 CG2R63 NG2R61 CG3C51, NA; isg"}, {"OG2D4", "CG2R63", "NG2R67", "CG2R62", "1.6000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from OG2D4 CG2R63 NG2R61 CG2R62, NA; isg"}, {"OG2D4", "CG2R63", "NG2R67", "CG2R63", "0.9000", "2", "180.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from OG2D4 CG2R63 NG2R61 CG2R63, NA; isg"}, {"OG2D4", "CG2R63", "NG2R67", "CG2R64", "14.0000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from OG2D4 CG2R63 NG2R61 CG2R64, TC243C; isg"}, {"OG2D4", "CG2R63", "NG2R67", "CG2R67", "1.6000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from OG2D4 CG2R63 NG2R61 CG2R62, NA; isg"}, {"SG2D1", "CG2R63", "NG2R67", "CG2R63", "0.9000", "2", "180.00", "3PH2SR, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinone; from CG2R63 NG2R61 CG2R63 SG2D1, YTS2; isg"}, {"SG2D1", "CG2R63", "NG2R67", "CG2R64", "0.9000", "2", "180.00", "43HSPP, 3-phenyl-4(3H)-pyrimidinethione; from SG2D1 CG2R63 NG2R61 CG2R63, YTS2; isg"}, {"SG2D1", "CG2R63", "NG2R67", "CG2R67", "1.6000", "2", "180.00", "3PH2SR, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinone; from OG2D4 CG2R63 NG2R61 CG2R62, NA; isg"}, {"CG2R62", "CG2R63", "OG3R60", "CG2R62", "0.6000", "2", "0.00", "RIN, coumarin, isg"}, {"OG2D4", "CG2R63", "OG3R60", "CG2R62", "0.7600", "2", "0.00", "RIN, coumarin, isg"}, {"NG2R62", "CG2R64", "CG2RC0", "CG2RC0", "1.8000", "2", "180.00", "NA A"}, {"NG2R62", "CG2R64", "CG2RC0", "NG2R50", "2.0000", "2", "180.00", "NA A"}, {"NG2S3", "CG2R64", "CG2RC0", "CG2RC0", "4.0000", "2", "180.00", "NA A"}, {"NG2S3", "CG2R64", "CG2RC0", "NG2R50", "0.0000", "2", "180.00", "NA A"}, {"NG301", "CG2R64", "CG2RC0", "CG2RC0", "4.0000", "2", "180.00", "M6A, yxu"}, {"NG301", "CG2R64", "CG2RC0", "NG2R50", "4.7000", "2", "180.00", "M6A, yxu"}, {"CG2R61", "CG2R64", "NG2R60", "CG2R61", "1.2000", "2", "180.00", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"NG2S1", "CG2R64", "NG2R60", "CG2R61", "3.1000", "2", "180.00", "2AMP, 2-Amino pyridine, cacha (verified by kevo)"}, {"NG2R62", "CG2R64", "NG2R61", "CG2R63", "0.2000", "2", "180.00", "NA G"}, {"NG2R62", "CG2R64", "NG2R61", "HGP1", "3.6000", "2", "180.00", "NA G"}, {"NG2S3", "CG2R64", "NG2R61", "CG2R63", "4.0000", "2", "180.00", "NA G"}, {"NG2S3", "CG2R64", "NG2R61", "HGP1", "0.0000", "2", "180.00", "NA G"}, {"SG311", "CG2R64", "NG2R61", "CG2R63", "4.0000", "2", "180.00", "4O2SM, 2-(methylthio)-4(3H)-pyrimidinone; from NG2S3 CG2R64 NG2R61 CG2R63; isg"}, {"SG311", "CG2R64", "NG2R61", "HGP1", "0.0000", "2", "180.00", "4O2SM, 2-(methylthio)-4(3H)-pyrimidinone; from NG2S3 CG2R64 NG2R61 HGP1; isg"}, {"HGR62", "CG2R64", "NG2R61", "CG2R63", "5.5000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"HGR62", "CG2R64", "NG2R61", "HGP1", "0.5000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R61", "CG2R64", "NG2R62", "CG2R61", "2.0000", "2", "180.00", "18NFD, 1,8-naphthyridine, erh"}, {"CG2R61", "CG2R64", "NG2R62", "CG2R64", "2.0000", "2", "0.00", "PTID, pteridine, erh"}, {"CG2R62", "CG2R64", "NG2R62", "CG2R63", "6.0000", "2", "180.00", "NA C"}, {"CG2RC0", "CG2R64", "NG2R62", "CG2R64", "1.8000", "2", "180.00", "NA A"}, {"NG2R61", "CG2R64", "NG2R62", "CG2R61", "2.0000", "2", "180.00", "43HSPY, 4(3H)-pyrimidinethione; from NG2R61 CG2R64 NG2R62 CG2RC0; isg"}, {"NG2R61", "CG2R64", "NG2R62", "CG2R62", "4.0000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"NG2R61", "CG2R64", "NG2R62", "CG2RC0", "2.0000", "2", "180.00", "NA G"}, {"NG2R62", "CG2R64", "NG2R62", "CG2R61", "2.0000", "2", "180.00", "PYRM, pyrimidine"}, {"NG2R62", "CG2R64", "NG2R62", "CG2R64", "1.8000", "2", "180.00", "NA A"}, {"NG2R62", "CG2R64", "NG2R62", "CG2RC0", "2.0000", "2", "180.00", "NAMODEL guanine tautomer"}, {"NG2R62", "CG2R64", "NG2R62", "NG2R62", "0.5000", "2", "180.00", "TRIB, triazine124"}, {"NG2R67", "CG2R64", "NG2R62", "CG2R61", "2.0000", "2", "180.00", "43HSPP, 3-phenyl-4(3H)-pyrimidinethione; from NG2R62 CG2R64 NG2R62 CG2R61, PYRM; isg"}, {"NG2R67", "CG2R64", "NG2R62", "CG2R62", "4.0000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from NG2R61 CG2R64 NG2R62 CG2R62, TC243C; isg"}, {"NG2S3", "CG2R64", "NG2R62", "CG2R63", "2.0000", "2", "180.00", "NA C"}, {"NG2S3", "CG2R64", "NG2R62", "CG2R64", "1.8000", "2", "180.00", "NA A"}, {"NG2S3", "CG2R64", "NG2R62", "CG2RC0", "4.0000", "2", "180.00", "NA G"}, {"NG301", "CG2R64", "NG2R62", "CG2R63", "3.1000", "2", "180.00", "TMC, from 4MC, yxu"}, {"NG301", "CG2R64", "NG2R62", "CG2R64", "3.8000", "2", "180.00", "M6A, yxu"}, {"SG311", "CG2R64", "NG2R62", "CG2R61", "10.2000", "2", "180.00", "2SMPYR, 2-(methylthio)-pyrimidine; from NG2S1 CG2R64 NG2R60 CG2R61; isg"}, {"SG311", "CG2R64", "NG2R62", "CG2R62", "2.0000", "2", "180.00", "4O2SM, 2-(methylthio)-4(3H)-pyrimidinone; from NG2S3 CG2R64 NG2R62 CG2R63; isg"}, {"HGR62", "CG2R64", "NG2R62", "CG2R61", "7.3000", "2", "180.00", "PYRM, pyrimidine"}, {"HGR62", "CG2R64", "NG2R62", "CG2R62", "7.3000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"HGR62", "CG2R64", "NG2R62", "CG2R64", "8.5000", "2", "180.00", "NA A"}, {"HGR62", "CG2R64", "NG2R62", "CG2RC0", "8.5000", "2", "180.00", "NA A"}, {"HGR62", "CG2R64", "NG2R62", "NG2R62", "6.0000", "2", "180.00", "TRIB, triazine124"}, {"NG2R62", "CG2R64", "NG2R67", "CG2R63", "0.2000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from NG2R62 CG2R64 NG2R61 CG2R63, TC243C; isg"}, {"NG2R62", "CG2R64", "NG2R67", "CG2R67", "0.2000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from NG2R62 CG2R64 NG2R61 CG2R63, TC243C; isg"}, {"HGR62", "CG2R64", "NG2R67", "CG2R63", "5.5000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from HGR62 CG2R64 NG2R61 CG2R63, TC243C; isg"}, {"HGR62", "CG2R64", "NG2R67", "CG2R67", "1.0000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from HGR62 CG2R62 NG2R67 CG2R67, TC243C; isg"}, {"CG2R61", "CG2R64", "NG2S1", "CG2O1", "1.2000", "2", "180.00", "2AMP, 2-amino pyridine, from PACP, cacha ! not fitted because cacha's original atom typing didn't allow it ==> re-optimize"}, {"CG2R61", "CG2R64", "NG2S1", "HGP1", "0.5000", "2", "180.00", "2AMP, 2-amino pyridine, from PACP, cacha ! this one does not require re-optimization"}, {"NG2R60", "CG2R64", "NG2S1", "CG2O1", "1.5000", "1", "180.00", "2AMP, 2-Amino pyridine, dihedral fit by cacha"}, {"NG2R60", "CG2R64", "NG2S1", "CG2O1", "2.6000", "2", "180.00", "2AMP, 2-Amino pyridine, dihedral fit by cacha"}, {"NG2R60", "CG2R64", "NG2S1", "CG2O1", "0.1800", "3", "180.00", "2AMP, 2-Amino pyridine, dihedral fit by cacha"}, {"NG2R60", "CG2R64", "NG2S1", "HGP1", "0.5000", "2", "180.00", "2AMP, 2-Amino pyridine, dihedral fit by cacha"}, {"CG2R62", "CG2R64", "NG2S3", "HGP4", "2.0000", "2", "180.00", "NA 5mc, adm jr. 9/9/93"}, {"CG2RC0", "CG2R64", "NG2S3", "HGP4", "0.5000", "2", "180.00", "NA A"}, {"NG2R61", "CG2R64", "NG2S3", "HGP4", "1.2000", "2", "180.00", "NA G"}, {"NG2R62", "CG2R64", "NG2S3", "HGP4", "1.0000", "2", "180.00", "NA C"}, {"CG2R62", "CG2R64", "NG301", "CG331", "1.9800", "2", "180.00", "TMC, yxu, pyramid can be increased by adding term of 4-fold and 0.0-phase"}, {"CG2RC0", "CG2R64", "NG301", "CG331", "2.8500", "2", "180.00", "M6A, yxu"}, {"CG2RC0", "CG2R64", "NG301", "CG331", "0.9000", "4", "0.00", "M6A, yxu, pyramid can be increased by increasing this term"}, {"NG2R62", "CG2R64", "NG301", "CG331", "1.9800", "2", "180.00", "TMC, yxu"}, {"NG2R61", "CG2R64", "SG311", "CG331", "1.4500", "1", "0.00", "4O2SM, 2-(methylthio)-4(3H)-pyrimidinone, isg"}, {"NG2R62", "CG2R64", "SG311", "CG331", "2.1200", "2", "180.00", "2SMPYR, 2-(methylthio)-pyrimidine, isg"}, {"NG2R62", "CG2R64", "SG311", "CG331", "0.1900", "4", "180.00", "2SMPYR, 2-(methylthio)-pyrimidine, isg"}, {"CG2R61", "CG2R66", "CG2R67", "CG2R61", "3.1000", "2", "180.00", "PYO2F , from CG2R61 CG2R61 CG2R67 CG2R61, penalty= 5"}, {"CG2R61", "CG2R66", "CG2R67", "CG2R67", "3.1000", "2", "180.00", "PYO2F , from CG2R61 CG2R61 CG2R67 CG2R67, penalty= 5"}, {"FGR1", "CG2R66", "CG2R67", "CG2R61", "4.5000", "2", "180.00", "PYO2F , from CG2R61 CG2R61 CG2R66 FGR1, penalty= 30"}, {"FGR1", "CG2R66", "CG2R67", "CG2R67", "1.0000", "2", "180.00", "PYO2F , from NG2R60 CG2R61 CG2R67 CG2R67, penalty= 89"}, {"CG2R61", "CG2R67", "CG2R67", "CG2R61", "0.8900", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R67", "CG2R67", "CG2R62", "0.4600", "2", "180.00", "pyo2b ,tune the middle 180 from CG2R61 CG2R67 CG2R67 CG2R61, penalty= 0.5"}, {"CG2R61", "CG2R67", "CG2R67", "CG2R62", "0.2300", "4", "0.00", "low will down the two peaks;phs 4, 0 pyo2b , from CG2R61 CG2R67 CG2R67 CG2R61, penalty= 0.5"}, {"CG2R61", "CG2R67", "CG2R67", "CG2RC0", "2.0000", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2R67", "CG2R67", "NG2R60", "0.3750", "1", "0.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R67", "CG2R67", "NG2R60", "0.9400", "2", "180.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R67", "CG2R67", "NG2R60", "0.1900", "3", "180.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R67", "CG2R67", "NG2R60", "0.1600", "4", "0.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R62", "CG2R67", "CG2R67", "CG2R66", "0.4300", "2", "180.00", "compromise between pyo2f, pyo3f, piuf using weight on maxmin"}, {"CG2R62", "CG2R67", "CG2R67", "CG2R66", "0.1200", "4", "0.00", "compromise between pyo2f, pyo3f, piuf using weight on maxmin"}, {"CG2R62", "CG2R67", "CG2R67", "CG2R66", "0.0200", "6", "180.00", "compromise between pyo2f, pyo3f, piuf using weight on maxmin"}, {"CG2RC0", "CG2R67", "CG2R67", "CG2RC0", "1.5000", "2", "180.00", "CRBZ, carbazole, erh"}, {"NG2R60", "CG2R67", "CG2R67", "NG2R60", "0.3750", "1", "180.00", "22BPY, 2,2'-bipyridine, kevo"}, {"NG2R60", "CG2R67", "CG2R67", "NG2R60", "0.9400", "2", "180.00", "22BPY, 2,2'-bipyridine, kevo"}, {"NG2R60", "CG2R67", "CG2R67", "NG2R60", "0.1900", "3", "0.00", "22BPY, 2,2'-bipyridine, kevo"}, {"NG2R60", "CG2R67", "CG2R67", "NG2R60", "0.1600", "4", "0.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R67", "CG2RC0", "CG2R61", "0.0500", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2R67", "CG2RC0", "CG3C52", "6.7500", "2", "180.00", "FLRN, Fluorene, erh"}, {"CG2R61", "CG2R67", "CG2RC0", "NG2R51", "3.0000", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R67", "CG2R67", "CG2RC0", "CG2R61", "3.5000", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R67", "CG2R67", "CG2RC0", "CG3C52", "5.0000", "3", "180.00", "FLRN, Fluorene, erh"}, {"CG2R67", "CG2R67", "CG2RC0", "NG2R51", "0.2500", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2R67", "NG2R60", "CG2R61", "1.2000", "2", "180.00", "22BPY, 2,2'-bipyridine, from CG2R61 CG2R61 NG2R60 CG2R61, kevo"}, {"CG2R67", "CG2R67", "NG2R60", "CG2R61", "3.1000", "2", "180.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R62", "0.3700", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone, isg"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R62", "0.2700", "4", "0.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone, isg"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R62", "0.0200", "6", "0.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone, isg"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R63", "1.4500", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from 1PH4PO; isg"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R63", "0.1400", "4", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from 1PH4PO; isg"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R64", "0.3700", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone, isg"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R64", "0.2600", "4", "0.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone, isg"}, {"CG2R71", "CG2R71", "CG2R71", "CG2R71", "1.6000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2R71", "CG2R71", "CG2RC7", "1.6000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2R71", "CG2R71", "HGR71", "3.2000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2RC7", "CG2R71", "CG2R71", "HGR71", "4.2000", "2", "180.00", "AZUL, Azulene, kevo"}, {"HGR71", "CG2R71", "CG2R71", "HGR71", "2.4000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2R71", "CG2RC7", "CG2R51", "3.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2R71", "CG2RC7", "CG2RC7", "3.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"HGR71", "CG2R71", "CG2RC7", "CG2R51", "3.1000", "2", "180.00", "AZUL, Azulene, kevo"}, {"HGR71", "CG2R71", "CG2RC7", "CG2RC7", "3.1000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG25C1", "CG2RC0", "CG2RC0", "CG2R61", "1.5000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C1", "CG2RC0", "CG2RC0", "NG2R51", "1.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2RC0", "CG2RC0", "CG2R61", "1.5000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2RC0", "CG2RC0", "NG2R51", "1.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R51", "CG2RC0", "CG2RC0", "CG2R51", "0.0000", "2", "180.00", "ISOI, isoindole, kevo"}, {"CG2R51", "CG2RC0", "CG2RC0", "CG2R61", "1.5000", "2", "180.00", "INDO/TRP (Kenno: 4.0 --> 1.5)"}, {"CG2R51", "CG2RC0", "CG2RC0", "CG3C52", "5.0000", "2", "180.00", "INDE, indene, kevo"}, {"CG2R51", "CG2RC0", "CG2RC0", "NG2R51", "6.5000", "2", "180.00", "INDO/TRP"}, {"CG2R51", "CG2RC0", "CG2RC0", "OG2R50", "8.5000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2R51", "CG2RC0", "CG2RC0", "SG2R50", "8.5000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"CG2R52", "CG2RC0", "CG2RC0", "CG2R61", "1.5000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG2R52", "CG2RC0", "CG2RC0", "NG2R51", "12.0000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG2R61", "CG2RC0", "CG2RC0", "CG2R61", "3.0000", "2", "180.00", "INDO/TRP"}, {"CG2R61", "CG2RC0", "CG2RC0", "CG3C52", "6.5000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"CG2R61", "CG2RC0", "CG2RC0", "NG2R50", "1.5000", "2", "180.00", "ZIMI, benzimidazole, kevo"}, {"CG2R61", "CG2RC0", "CG2RC0", "NG2R51", "1.5000", "2", "180.00", "INDO/TRP (Kenno: 4.0 --> 1.5)"}, {"CG2R61", "CG2RC0", "CG2RC0", "NG2R62", "0.0000", "2", "180.00", "PUR9, purine(N9H), kevo"}, {"CG2R61", "CG2RC0", "CG2RC0", "NG3C51", "6.0000", "2", "180.00", "INDI, indoline, kevo"}, {"CG2R61", "CG2RC0", "CG2RC0", "OG2R50", "0.0000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2R61", "CG2RC0", "CG2RC0", "OG3C51", "4.0000", "2", "180.00", "ZDOL, 1,3-benzodioxole, pram and oashi"}, {"CG2R61", "CG2RC0", "CG2RC0", "SG2R50", "0.0000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"CG2R63", "CG2RC0", "CG2RC0", "NG2R51", "10.0000", "2", "180.00", "NA G"}, {"CG2R63", "CG2RC0", "CG2RC0", "NG2R62", "2.0000", "2", "180.00", "NA G"}, {"CG2R64", "CG2RC0", "CG2RC0", "NG2R51", "7.0000", "2", "180.00", "NA A"}, {"CG2R64", "CG2RC0", "CG2RC0", "NG2R62", "2.0000", "2", "180.00", "NA A"}, {"CG3C52", "CG2RC0", "CG2RC0", "NG2R50", "6.5000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"CG3C52", "CG2RC0", "CG2RC0", "NG3C51", "6.0000", "2", "180.00", "INDI, indoline, kevo"}, {"NG2R50", "CG2RC0", "CG2RC0", "NG2R51", "10.0000", "2", "180.00", "NA G"}, {"NG2R50", "CG2RC0", "CG2RC0", "NG2R62", "7.0000", "2", "180.00", "NA A"}, {"NG2R50", "CG2RC0", "CG2RC0", "SG2R50", "4.0000", "2", "180.00", "ZTHZ, benzothiazole, kevo"}, {"NG2R51", "CG2RC0", "CG2RC0", "NG2R62", "8.5000", "2", "180.00", "PUR7, purine(N7H), kevo"}, {"OG3C51", "CG2RC0", "CG2RC0", "OG3C51", "7.7000", "2", "180.00", "ZDOL, 1,3-benzodioxole, pram and oashi"}, {"CG2R61", "CG2RC0", "CG3C52", "CG2R51", "0.9000", "3", "0.00", "INDE, indene, kevo"}, {"CG2R61", "CG2RC0", "CG3C52", "CG2R52", "3.5000", "3", "0.00", "3HIN, 3H-indole, kevo"}, {"CG2R61", "CG2RC0", "CG3C52", "CG2RC0", "0.9000", "3", "0.00", "FLRN, Fluorene, erh"}, {"CG2R61", "CG2RC0", "CG3C52", "CG3C52", "3.0000", "2", "180.00", "INDI, indoline, kevo"}, {"CG2R61", "CG2RC0", "CG3C52", "HGA2", "0.5000", "3", "180.00", "3HIN, 3H-indole, kevo"}, {"CG2R67", "CG2RC0", "CG3C52", "CG2RC0", "0.7500", "3", "180.00", "FLRN, Fluorene, erh"}, {"CG2R67", "CG2RC0", "CG3C52", "HGA2", "0.5000", "3", "0.00", "FLRN, Fluorene, erh"}, {"CG2RC0", "CG2RC0", "CG3C52", "CG2R51", "1.0000", "3", "180.00", "INDE, indene, kevo"}, {"CG2RC0", "CG2RC0", "CG3C52", "CG2R52", "2.0000", "3", "180.00", "3HIN, 3H-indole, kevo"}, {"CG2RC0", "CG2RC0", "CG3C52", "CG3C52", "1.0300", "3", "180.00", "INDI, indoline, kevo"}, {"CG2RC0", "CG2RC0", "CG3C52", "HGA2", "0.5000", "3", "0.00", "3HIN, 3H-indole, kevo"}, {"CG2R61", "CG2RC0", "NG2R50", "CG2R52", "4.0000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"CG2R61", "CG2RC0", "NG2R50", "CG2R53", "15.0000", "2", "180.00", "ZIMI, benzimidazole, kevo"}, {"CG2R63", "CG2RC0", "NG2R50", "CG2R53", "2.0000", "2", "180.00", "NA G"}, {"CG2R64", "CG2RC0", "NG2R50", "CG2R53", "2.0000", "2", "180.00", "NA A"}, {"CG2RC0", "CG2RC0", "NG2R50", "CG2R52", "4.0000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"CG2RC0", "CG2RC0", "NG2R50", "CG2R53", "6.0000", "2", "180.00", "NA G"}, {"NG2R62", "CG2RC0", "NG2R50", "CG2R53", "2.0000", "2", "180.00", "PUR7, purine(N7H), kevo"}, {"CG2R61", "CG2RC0", "NG2R51", "CG2R51", "1.5000", "2", "180.00", "NA bases"}, {"CG2R61", "CG2RC0", "NG2R51", "CG2R53", "19.0000", "2", "180.00", "ZIMI, benzimidazole, kevo"}, {"CG2R61", "CG2RC0", "NG2R51", "CG2RC0", "0.5000", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2RC0", "NG2R51", "NG2R50", "3.0000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG2R61", "CG2RC0", "NG2R51", "HGP1", "0.2000", "2", "180.00", "INDO/TRP"}, {"CG2R67", "CG2RC0", "NG2R51", "CG2RC0", "0.5000", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R67", "CG2RC0", "NG2R51", "HGP1", "0.2500", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2RC0", "CG2RC0", "NG2R51", "CG2R51", "1.5000", "2", "180.00", "NA bases"}, {"CG2RC0", "CG2RC0", "NG2R51", "CG2R53", "6.0000", "2", "180.00", "NA G"}, {"CG2RC0", "CG2RC0", "NG2R51", "CG331", "11.0000", "2", "180.00", "9MAD, 9-Methyl-Adenine, kevo for gsk/ibm"}, {"CG2RC0", "CG2RC0", "NG2R51", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"CG2RC0", "CG2RC0", "NG2R51", "CG3RC1", "1.2000", "2", "180.00", "PYRIDINE pyridine, yin"}, {"CG2RC0", "CG2RC0", "NG2R51", "NG2R50", "6.5000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG2RC0", "CG2RC0", "NG2R51", "HGP1", "0.8500", "2", "180.00", "INDO/TRP"}, {"NG2R62", "CG2RC0", "NG2R51", "CG2R53", "2.0000", "2", "180.00", "NA G"}, {"NG2R62", "CG2RC0", "NG2R51", "CG331", "11.0000", "2", "180.00", "9MAD, 9-Methyl-Adenine, kevo for gsk/ibm"}, {"NG2R62", "CG2RC0", "NG2R51", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"NG2R62", "CG2RC0", "NG2R51", "CG3RC1", "1.2000", "2", "180.00", "PYRIDINE pyridine, yin"}, {"NG2R62", "CG2RC0", "NG2R51", "HGP1", "1.2000", "2", "180.00", "NA G"}, {"CG2RC0", "CG2RC0", "NG2R62", "CG2R64", "0.2000", "2", "180.00", "NA G"}, {"NG2R50", "CG2RC0", "NG2R62", "CG2R64", "2.0000", "2", "180.00", "PUR7, purine(N7H), kevo"}, {"NG2R51", "CG2RC0", "NG2R62", "CG2R64", "2.0000", "2", "180.00", "NA G"}, {"CG2R51", "CG2RC0", "NG2RC0", "CG2R51", "8.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R51", "CG2RC0", "NG2RC0", "CG2R61", "1.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2RC0", "NG2RC0", "CG2R51", "1.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2RC0", "NG2RC0", "CG2R61", "0.8000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2RC0", "NG3C51", "CG3C52", "4.0000", "2", "180.00", "INDI, indoline, kevo"}, {"CG2R61", "CG2RC0", "NG3C51", "HGP1", "0.0000", "3", "0.00", "INDI, indoline, kevo"}, {"CG2RC0", "CG2RC0", "NG3C51", "CG3C52", "1.9600", "3", "0.00", "INDI, indoline, kevo"}, {"CG2RC0", "CG2RC0", "NG3C51", "HGP1", "0.0000", "3", "0.00", "INDI, indoline, kevo"}, {"CG2R61", "CG2RC0", "OG2R50", "CG2R51", "8.5000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2RC0", "CG2RC0", "OG2R50", "CG2R51", "8.5000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2R61", "CG2RC0", "OG3C51", "CG3C52", "0.3000", "2", "180.00", "ZDOL, 1,3-benzodioxole, pram and oashi"}, {"CG2RC0", "CG2RC0", "OG3C51", "CG3C52", "0.3000", "2", "180.00", "ZDOL, 1,3-benzodioxole, pram and oashi and kevo"}, {"CG2R61", "CG2RC0", "SG2R50", "CG2R51", "8.5000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"CG2R61", "CG2RC0", "SG2R50", "CG2R53", "3.0000", "2", "180.00", "ZTHZ, benzothiazole, kevo"}, {"CG2RC0", "CG2RC0", "SG2R50", "CG2R51", "8.5000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"CG2RC0", "CG2RC0", "SG2R50", "CG2R53", "3.0000", "2", "180.00", "ZTHZ, benzothiazole, kevo"}, {"CG2R51", "CG2RC7", "CG2RC7", "CG2R51", "3.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R51", "CG2RC7", "CG2RC7", "CG2R71", "0.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2RC7", "CG2RC7", "CG2R71", "0.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2D1", "CG301", "CG311", "CG311", "0.2000", "3", "0.00", "CHL1, Cholesterol from X CTL1 CTL1 X; also consistent with RETINOL TMCH"}, {"CG2D1", "CG301", "CG311", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2D1", "CG301", "CG311", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG311", "CG301", "CG311", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG311", "CG301", "CG311", "CG321", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG311", "CG301", "CG311", "HGA1", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG321", "CG301", "CG311", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG321", "CG301", "CG311", "CG321", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG321", "CG301", "CG311", "HGA1", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG331", "CG301", "CG311", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG331", "CG301", "CG311", "CG321", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG331", "CG301", "CG311", "HGA1", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG2D1", "CG301", "CG321", "CG321", "0.2000", "3", "0.00", "CHL1, Cholesterol from X CTL1 CTL2 X; also consistent with RETINOL TMCH"}, {"CG2D1", "CG301", "CG321", "HGA2", "0.1950", "3", "0.00", "NA, sugar"}, {"CG2DC1", "CG301", "CG321", "CG321", "0.2000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG301", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG301", "CG321", "CG321", "0.2000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG301", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG311", "CG301", "CG321", "CG321", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06"}, {"CG311", "CG301", "CG321", "HGA2", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG321", "CG301", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG301", "CG321", "HGA2", "0.1950", "3", "0.00", "CHOLEST cholesterol reset to default by kevo"}, {"CG331", "CG301", "CG321", "CG321", "0.2000", "3", "0.00", "RETINOL TMCH"}, {"CG331", "CG301", "CG321", "CG331", "0.4400", "1", "0.00", "DMBU, dimethoxybutane, sna"}, {"CG331", "CG301", "CG321", "CG331", "0.0200", "2", "180.00", "DMBU, dimethoxybutane, sna"}, {"CG331", "CG301", "CG321", "CG331", "0.7300", "3", "180.00", "DMBU, dimethoxybutane, sna"}, {"CG331", "CG301", "CG321", "HGA2", "0.1950", "3", "0.00", "RETINOL TMCH kevo: reset to default"}, {"OG301", "CG301", "CG321", "CG331", "0.8000", "3", "0.00", "DMBU, dimethoxybutane, sna"}, {"OG301", "CG301", "CG321", "HGA2", "0.1600", "3", "0.00", "DMBU, dimethoxybutane, sna"}, {"CG2D1", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "CHL1, Cholesterol from RETINOL TMCH (X CTL1 CTL3 X seems woefully inaccurate)"}, {"CG2DC1", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL TMCH"}, {"CG2O3", "CG301", "CG331", "HGA3", "0.2000", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG311", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG321", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL TMCH"}, {"CG331", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL TMCH"}, {"OG301", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG302", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide, cacha reset to default by kevo"}, {"OG311", "CG301", "CG331", "HGA3", "0.1400", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CLGA3", "CG301", "CG331", "HGA3", "0.2700", "3", "0.00", "TCLE"}, {"BRGA3", "CG301", "CG331", "HGA3", "0.2600", "3", "0.00", "TBRE"}, {"CG2O3", "CG301", "OG301", "CG331", "0.2000", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG321", "CG301", "OG301", "CG331", "1.1500", "1", "0.00", "DMBU, dimethoxybutane, sna"}, {"CG321", "CG301", "OG301", "CG331", "0.2300", "2", "180.00", "DMBU, dimethoxybutane, sna"}, {"CG321", "CG301", "OG301", "CG331", "0.4900", "3", "0.00", "DMBU, dimethoxybutane, sna"}, {"CG331", "CG301", "OG301", "CG331", "0.4000", "1", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "OG301", "CG331", "0.4900", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG301", "CG301", "OG301", "CG331", "0.5100", "1", "0.00", "DMOP, dimethoxypropane, sna"}, {"OG301", "CG301", "OG301", "CG331", "0.6700", "2", "0.00", "DMOP, dimethoxypropane, sna"}, {"OG301", "CG301", "OG301", "CG331", "0.2600", "3", "0.00", "DMOP, dimethoxypropane, sna"}, {"OG311", "CG301", "OG301", "CG331", "0.4100", "1", "180.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG311", "CG301", "OG301", "CG331", "0.8900", "2", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG311", "CG301", "OG301", "CG331", "0.0500", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "OG302", "CG2O2", "0.0000", "3", "0.00", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide, cacha"}, {"CG2O3", "CG301", "OG311", "HGP1", "0.8200", "3", "180.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "OG311", "HGP1", "1.1300", "1", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "OG311", "HGP1", "0.1400", "2", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "OG311", "HGP1", "0.2400", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG301", "CG301", "OG311", "HGP1", "1.5500", "1", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG301", "CG301", "OG311", "HGP1", "1.1700", "2", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG301", "CG301", "OG311", "HGP1", "1.0700", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"FGA3", "CG302", "CG321", "OG311", "0.2500", "3", "0.00", "TFE, Trifluoroethanol"}, {"FGA3", "CG302", "CG321", "HGA2", "0.1580", "3", "0.00", "TFE, Trifluoroethanol"}, {"FGA3", "CG302", "CG331", "HGA3", "0.1580", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"CG2O1", "CG311", "CG311", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG311", "CG331", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG311", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG311", "HGA1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG311", "CG311", "CG321", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG311", "CG331", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG311", "OG311", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG311", "HGA1", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG301", "CG311", "CG311", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06"}, {"CG301", "CG311", "CG311", "CG321", "0.2000", "3", "0.00", "DCA, Deoxycholic Acid, cacha, 03/06"}, {"CG301", "CG311", "CG311", "CG3RC1", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG301", "CG311", "CG311", "HGA1", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG311", "CG311", "CG311", "CG321", "0.5000", "4", "180.00", "NA bkb"}, {"CG311", "CG311", "CG311", "OG311", "0.1400", "3", "0.00", "PROT, hydroxyl wild card"}, {"CG311", "CG311", "CG311", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG321", "CG311", "CG311", "CG321", "0.5000", "4", "180.00", "NA, sugar"}, {"CG321", "CG311", "CG311", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG311", "CG311", "NG2S1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG311", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG331", "CG311", "CG311", "NG2S1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG311", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG3RC1", "CG311", "CG311", "OG311", "0.6000", "1", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG311", "CG311", "OG311", "0.7000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG311", "CG311", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugar"}, {"NG2S1", "CG311", "CG311", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG311", "HGA1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG311", "CG311", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG311", "CG311", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG321", "CG311", "CG314", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG314", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG314", "NG3P3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG314", "HGA1", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with NA, sugar"}, {"CG331", "CG311", "CG314", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG314", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG314", "NG3P3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG314", "HGA1", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with NA, sugar"}, {"HGA1", "CG311", "CG314", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG314", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG314", "NG3P3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG314", "HGA1", "0.1950", "3", "0.00", "NPROT N-terminal AA - standard parameter collided with A, sugar"}, {"CG2O1", "CG311", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "CG2R61", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CG2O1", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "SG301", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "SG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O2", "CG311", "CG321", "CG2O2", "0.2000", "3", "0.00", "576P, standard param"}, {"CG2O2", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "AMGA, Alpha Methyl Glu Acid CDCA Amide, cacha"}, {"CG2O2", "CG311", "CG321", "HGA2", "0.2000", "3", "0.00", "AMGA, Alpha Methyl Glu Acid CDCA Amide, cacha"}, {"CG2O3", "CG311", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG321", "CG2O3", "0.2000", "3", "0.00", "drug design project, xxwy"}, {"CG2O3", "CG311", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG321", "CG2R61", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CG2O3", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG311", "CG321", "OG311", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG321", "SG301", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG321", "SG311", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2R61", "CG311", "CG321", "CG2O3", "0.0400", "3", "0.00", "FBIC(R/S), Fatty Binding Inhibitior C, cacha"}, {"CG2R61", "CG311", "CG321", "HGA2", "0.0000", "3", "0.00", "Slack parameter from difluorotoluene picked up by FBIC ==> RE-OPTIMIZE !!!"}, {"CG301", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06"}, {"CG301", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "DCA, Deoxycholic Acid, cacha, 03/06"}, {"CG301", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG311", "CG311", "CG321", "CG2D1", "0.2000", "3", "0.00", "CHL1, Cholesterol"}, {"CG311", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, reset to default by kevo"}, {"CG311", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "CHL1, Cholesterol reset to default by kevo"}, {"CG311", "CG311", "CG321", "CG331", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "NA, sugar"}, {"CG314", "CG311", "CG321", "CG331", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with NA, sugar"}, {"CG321", "CG311", "CG321", "CG2D1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG321", "CG324", "0.2000", "3", "0.00", "G4MP, Gamma-4-Methyl piperidine Glu Acid CDCA Amide, cacha reset to default by kevo"}, {"CG321", "CG311", "CG321", "NG2S1", "0.2000", "3", "0.00", "G4MP, Gamma-4-Methyl piperidine Glu Acid CDCA Amide, cacha"}, {"CG321", "CG311", "CG321", "OG302", "0.2000", "3", "180.00", "NA, sugar"}, {"CG321", "CG311", "CG321", "OG303", "0.2000", "3", "180.00", "NA, sugar"}, {"CG321", "CG311", "CG321", "OG311", "0.2000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG311", "CG321", "HGA2", "0.1950", "1", "0.00", "NA, sugar"}, {"CG324", "CG311", "CG321", "CG321", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG324", "CG311", "CG321", "NG2S1", "0.2000", "3", "0.00", "3MSB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG324", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG331", "CG311", "CG321", "CG2O3", "0.2000", "3", "0.00", "FBIC(R/S), Fatty Binding Inhibitior C"}, {"CG331", "CG311", "CG321", "CG2R61", "0.0400", "3", "0.00", "FBIF, Fatty acid Binding protein Inhibitor F, cacha"}, {"CG331", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG321", "CG314", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG321", "CG331", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG321", "OG302", "0.2000", "3", "0.00", "LIPID methyl acetate"}, {"CG331", "CG311", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 02/08 reset to default by kevo"}, {"CG3C51", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG3RC1", "CG311", "CG321", "CG2D1", "0.2000", "3", "0.00", "CHL1, Cholesterol"}, {"CG3RC1", "CG311", "CG321", "CG311", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG311", "CG321", "CG321", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG311", "CG321", "HGA2", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R53", "CG311", "CG321", "CG2O2", "0.2000", "3", "0.00", "drug design project, xxwy"}, {"NG2R53", "CG311", "CG321", "CG2O3", "0.2000", "3", "0.00", "drug design project, xxwy"}, {"NG2R53", "CG311", "CG321", "HGA2", "0.2000", "3", "0.00", "drug design project, xxwy"}, {"NG2S1", "CG311", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "CG2R61", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "CG324", "0.2000", "3", "0.00", "G4P, 01OH02"}, {"NG2S1", "CG311", "CG321", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "SG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG302", "CG311", "CG321", "OG302", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG302", "CG311", "CG321", "OG303", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG302", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "NA, sugar"}, {"OG311", "CG311", "CG321", "CG2D1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG311", "CG321", "CG311", "2.0000", "3", "180.00", "NA, sugar"}, {"OG311", "CG311", "CG321", "CG311", "0.4000", "5", "0.00", "NA, sugar"}, {"OG311", "CG311", "CG321", "CG311", "0.8000", "6", "0.00", "NA, sugar"}, {"OG311", "CG311", "CG321", "CG321", "0.5000", "1", "180.00", "NA elevates energy at 0 (c3'endo), adm"}, {"OG311", "CG311", "CG321", "CG321", "0.7000", "2", "0.00", "NA elevates energy at 0 (c3'endo), adm"}, {"OG311", "CG311", "CG321", "CG321", "0.4000", "3", "0.00", "NA abasic nucleoside"}, {"OG311", "CG311", "CG321", "CG321", "0.4000", "5", "0.00", "NA abasic nucleoside"}, {"OG311", "CG311", "CG321", "CG331", "0.1400", "3", "0.00", "2BOH, 2-butanol, kevo for gsk/ibm"}, {"OG311", "CG311", "CG321", "OG303", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG311", "CG321", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG311", "CG321", "HGA2", "0.1950", "3", "180.00", "NA, sugar"}, {"HGA1", "CG311", "CG321", "CG2D1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG321", "CG2O2", "0.2000", "3", "0.00", "576P, standard param"}, {"HGA1", "CG311", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG321", "CG2R61", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HGA1", "CG311", "CG321", "CG311", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG311", "CG321", "CG314", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with NA, sugar"}, {"HGA1", "CG311", "CG321", "CG321", "0.1950", "3", "0.00", "NA abasic nucleoside"}, {"HGA1", "CG311", "CG321", "CG324", "0.1950", "3", "0.00", "G4MP, 01OH03, cacha"}, {"HGA1", "CG311", "CG321", "CG331", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG321", "NG2S1", "0.2000", "3", "0.00", "G4MP, 01OH03, cacha"}, {"HGA1", "CG311", "CG321", "OG302", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG311", "CG321", "OG303", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG311", "CG321", "OG311", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG311", "CG321", "SG311", "0.1950", "3", "0.00", "PROTNA sahc"}, {"HGA1", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "NA, sugar"}, {"CG321", "CG311", "CG324", "NG3P1", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG321", "CG311", "CG324", "NG3P2", "0.1950", "3", "0.00", "G3P(R/S), Gamma-3-piperidine Glu Acid CDCA Amide, cacha"}, {"CG321", "CG311", "CG324", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"NG2S1", "CG311", "CG324", "NG3P2", "0.1950", "3", "0.00", "G3P(R/S), Gamma-3-piperidine Glu Acid CDCA Amide, cacha"}, {"NG2S1", "CG311", "CG324", "HGA2", "0.2000", "3", "0.00", "G3P(R/S), Gamma-3-piperidine Glu Acid CDCA Amide, cacha"}, {"OG311", "CG311", "CG324", "NG3P1", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"OG311", "CG311", "CG324", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA1", "CG311", "CG324", "NG3P1", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA1", "CG311", "CG324", "NG3P2", "0.1950", "3", "0.00", "G3P(R/S), Gamma-3-piperidine Glu Acid CDCA Amide, cacha"}, {"HGA1", "CG311", "CG324", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG2O1", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG311", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG2R61", "CG311", "CG331", "HGA3", "0.0400", "3", "0.00", "FBIB, Fatty Binding Inhibitior B, cacha"}, {"CG311", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG331", "HGA3", "0.1950", "3", "0.00", "PROTNA alkanes phospho-ser/thr"}, {"CG3C51", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"NG2S1", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG301", "CG311", "CG331", "HGA3", "0.1600", "3", "0.00", "all34_ethers_1a"}, {"OG302", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "LIPID methyl acetate"}, {"OG303", "CG311", "CG331", "HGA3", "0.1950", "3", "0.00", "PROTNA phospho-ser/thr phospho-ser/thr"}, {"OG311", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CLGA1", "CG311", "CG331", "HGA3", "0.2500", "3", "0.00", "DCLE"}, {"BRGA2", "CG311", "CG331", "HGA3", "0.2600", "3", "0.00", "DBRE"}, {"HGA1", "CG311", "CG331", "HGA3", "0.1950", "3", "0.00", "NA, sugar"}, {"CG321", "CG311", "CG3C51", "CG3C52", "0.5000", "4", "180.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG321", "CG311", "CG3C51", "CG3RC1", "0.1500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG321", "CG311", "CG3C51", "HGA1", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG331", "CG311", "CG3C51", "CG3C52", "0.2500", "1", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG311", "CG3C51", "CG3C52", "0.2500", "2", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG311", "CG3C51", "CG3C52", "0.4500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG311", "CG3C51", "CG3RC1", "0.2000", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG311", "CG3C51", "HGA1", "0.1950", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA1", "CG311", "CG3C51", "CG3C52", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA1", "CG311", "CG3C51", "CG3RC1", "0.2000", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA1", "CG311", "CG3C51", "HGA1", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"CG311", "CG311", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG311", "CG311", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG311", "CG311", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG311", "CG3RC1", "CG331", "0.0500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG321", "CG311", "CG3RC1", "CG3C51", "0.0500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG321", "CG311", "CG3RC1", "CG3C52", "0.5000", "4", "180.00", "DCA, Deoxycholic Acid, cacha, 02/08"}, {"CG321", "CG311", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG311", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG311", "CG3RC1", "CG331", "0.1580", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"OG311", "CG311", "CG3RC1", "CG3C51", "0.1580", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"OG311", "CG311", "CG3RC1", "CG3RC1", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA1", "CG311", "CG3RC1", "CG331", "0.0500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"HGA1", "CG311", "CG3RC1", "CG3C51", "0.0500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"HGA1", "CG311", "CG3RC1", "CG3C52", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"HGA1", "CG311", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA1", "CG311", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG2O2", "CG311", "NG2R53", "CG2R53", "0.0000", "1", "180.00", "drug design project, xxwy"}, {"CG2O3", "CG311", "NG2R53", "CG2R53", "0.0000", "1", "180.00", "drug design project, xxwy"}, {"CG321", "CG311", "NG2R53", "CG2R53", "0.0000", "1", "0.00", "drug design project, xxwy"}, {"HGA1", "CG311", "NG2R53", "CG2R53", "0.0000", "1", "0.00", "drug design project, xxwy"}, {"CG2O1", "CG311", "NG2S1", "CG2O1", "0.2000", "1", "180.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG2O1", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O2", "CG311", "NG2S1", "CG2O1", "0.2000", "1", "180.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG2O2", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT adm jr. 5/02/91, acetic Acid pure solvent"}, {"CG2O3", "CG311", "NG2S1", "CG2O1", "0.2000", "1", "180.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG2O3", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG311", "CG311", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG311", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG321", "CG311", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG321", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG324", "CG311", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "G3P(R/S), Gamma-3-piperidine Glu Acid CDCA Amide, cacha"}, {"CG324", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "G3P(R/S), Gamma-3-piperidine Glu Acid CDCA Amide, cacha"}, {"CG331", "CG311", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG331", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"HGA1", "CG311", "NG2S1", "CG2O1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"HGA1", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O3", "CG311", "OG301", "CG331", "0.2000", "3", "0.00", "og/sng thp CG321C CG321C OG3C6M CG321C"}, {"CG331", "CG311", "OG301", "CG331", "0.4000", "1", "0.00", "all34_ethers_1a og/gk (not affected by mistake)"}, {"CG331", "CG311", "OG301", "CG331", "0.4900", "3", "0.00", "CC33A CC32A OC30A CC33A og/gk (not affected by mistake)"}, {"HGA1", "CG311", "OG301", "CG331", "0.2840", "3", "0.00", "all34_ethers_1a og/gk (not affected by mistake)"}, {"CG321", "CG311", "OG302", "CG2O2", "0.7000", "1", "180.00", "LIPID ethyl acetate, 12/92"}, {"CG331", "CG311", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID methyl acetate"}, {"HGA1", "CG311", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG331", "CG311", "OG303", "PG2", "0.4000", "1", "180.00", "IP_2 phospho-ser/thr"}, {"CG331", "CG311", "OG303", "PG2", "0.3000", "2", "0.00", "IP_2 phospho-ser/thr"}, {"CG331", "CG311", "OG303", "PG2", "0.1000", "3", "0.00", "IP_2 phospho-ser/thr"}, {"HGA1", "CG311", "OG303", "PG2", "0.0000", "3", "0.00", "IP_2 phospho-ser/thr"}, {"CG2O5", "CG311", "OG311", "HGP1", "0.3500", "1", "0.00", "BIPHENYL re-initialized from CC2O3 CC312 OC311 HCP1 ! erh ketone, n=6 polyol"}, {"CG2O5", "CG311", "OG311", "HGP1", "0.3700", "2", "0.00", "BIPHENYL re-initialized from CC2O3 CC312 OC311 HCP1 ! erh ketone, n=6 polyol"}, {"CG2O5", "CG311", "OG311", "HGP1", "0.0100", "3", "180.00", "BIPHENYL re-initialized from CC2O3 CC312 OC311 HCP1 ! erh ketone, n=6 polyol with compensation for HCA1 CC311 OC311M HCP1 0.18 --> HGA1 CG311 OG311 HGP1 0.00 kevo ==> re-evaluate?"}, {"CG311", "CG311", "OG311", "HGP1", "1.3300", "1", "0.00", "PROT PRO2, 2-propanol OH hf/torsional surface, adm jr., 3/2/93"}, {"CG311", "CG311", "OG311", "HGP1", "0.1800", "2", "0.00", "PROT PRO2, 2-propanol OH hf/torsional surface, adm jr., 3/2/93"}, {"CG311", "CG311", "OG311", "HGP1", "0.4600", "3", "0.00", "PROT PRO2, 2-propanol OH hf/torsional surface, adm jr., 3/2/93 ! compensated for X CG311 OG311 X 0.14 --> HGA1 CG311 OG311 HGP1 0.00 kevo ==> re-optimize?"}, {"CG321", "CG311", "OG311", "HGP1", "0.3000", "1", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG311", "OG311", "HGP1", "0.3000", "3", "0.00", "CHOLEST cholesterol"}, {"CG324", "CG311", "OG311", "HGP1", "0.5000", "1", "0.00", "FLAVOP PIP3"}, {"CG324", "CG311", "OG311", "HGP1", "0.7000", "2", "0.00", "FLAVOP PIP3"}, {"CG331", "CG311", "OG311", "HGP1", "1.3300", "1", "0.00", "PROT PRO2, 2-propanol OH hf/torsional surface, adm jr., 3/2/93"}, {"CG331", "CG311", "OG311", "HGP1", "0.1800", "2", "0.00", "PROT PRO2, 2-propanol OH hf/torsional surface, adm jr., 3/2/93"}, {"CG331", "CG311", "OG311", "HGP1", "0.4600", "3", "0.00", "PROT PRO2, 2-propanol OH hf/torsional surface, adm jr., 3/2/93 ! compensated for X CG311 OG311 X 0.14 --> HGA1 CG311 OG311 HGP1 0.00 kevo ==> re-optimize?"}, {"CG3RC1", "CG311", "OG311", "HGP1", "1.5000", "1", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG311", "OG311", "HGP1", "0.3000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG311", "OG311", "HGP1", "0.5000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG312", "CG311", "OG311", "HGP1", "0.2800", "3", "0.00", "PROT EMB 11/21/89 methanol vib fit ! compensated for X CG311 OG311 X 0.14 --> HGA1 CG311 OG311 HGP1 0.00 kevo ==> re-optimize?"}, {"HGA1", "CG311", "OG311", "HGP1", "0.0000", "3", "0.00", "NA backbone. PRO2 not properly optimized in new carbohydrate FF ==> unmodified."}, {"FGA2", "CG312", "CG331", "HGA3", "0.1780", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"HGA7", "CG312", "CG331", "HGA3", "0.1780", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"CG2R61", "CG312", "PG1", "OG2P1", "0.0000", "3", "0.00", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"CG2R61", "CG312", "PG1", "OG311", "0.1000", "2", "0.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG2R61", "CG312", "PG1", "OG311", "0.4000", "3", "0.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"FGA2", "CG312", "PG1", "OG2P1", "0.0000", "3", "0.00", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"FGA2", "CG312", "PG1", "OG311", "0.1000", "3", "0.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG2R61", "CG312", "PG2", "OG2P1", "0.0000", "3", "0.00", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"FGA2", "CG312", "PG2", "OG2P1", "0.0000", "3", "0.00", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"CG2O1", "CG314", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG314", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG314", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG314", "CG321", "CG2R61", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CG2O1", "CG314", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG314", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG314", "CG321", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG314", "CG321", "SG301", "0.2000", "3", "0.00", "deleteme DELETEME (we want to use wildcarting)"}, {"CG2O1", "CG314", "CG321", "SG311", "0.2000", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"CG2O1", "CG314", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "CG2R61", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CG2O3", "CG314", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "SG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG314", "CG321", "CG321", "0.2000", "3", "0.00", "3MRB,Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG321", "CG314", "CG321", "NG2S1", "0.2000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG321", "CG314", "CG321", "HGA2", "0.1950", "3", "0.00", "3MRB,Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha reset to default by kevo"}, {"NG3P2", "CG314", "CG321", "CG321", "0.1950", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"NG3P2", "CG314", "CG321", "NG2S1", "0.1950", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"NG3P2", "CG314", "CG321", "HGA2", "0.1950", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"NG3P3", "CG314", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "CG2R61", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "SG311", "0.2000", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"NG3P3", "CG314", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG314", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG314", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG314", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG314", "CG321", "CG2R61", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HGA1", "CG314", "CG321", "CG311", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with NA, sugar"}, {"HGA1", "CG314", "CG321", "CG321", "0.1950", "3", "0.00", "NA abasic nucleoside"}, {"HGA1", "CG314", "CG321", "NG2S1", "0.2000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"HGA1", "CG314", "CG321", "OG311", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with NA, sugar"}, {"HGA1", "CG314", "CG321", "SG311", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with PROTNA sahc"}, {"HGA1", "CG314", "CG321", "HGA2", "0.1950", "3", "0.00", "NA, sugar"}, {"CG2O1", "CG314", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"NG3P3", "CG314", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"HGA1", "CG314", "CG331", "HGA3", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"CG321", "CG314", "NG3P2", "CG324", "0.1000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG321", "CG314", "NG3P2", "HGP2", "0.1000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"HGA1", "CG314", "NG3P2", "CG324", "0.1000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"HGA1", "CG314", "NG3P2", "HGP2", "0.1000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG2O1", "CG314", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"CG2O3", "CG314", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG311", "CG314", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG321", "CG314", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG331", "CG314", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"HGA1", "CG314", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG2D1", "CG321", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2D1", "CG321", "CG321", "CG321", "0.1400", "1", "180.0", "2-hexene, adm jr., 11/09"}, {"CG2D1", "CG321", "CG321", "CG321", "0.1700", "2", "0.0", "2-hexene, adm jr., 11/09"}, {"CG2D1", "CG321", "CG321", "CG321", "0.0500", "3", "180.0", "2-hexene, adm jr., 11/09"}, {"CG2D1", "CG321", "CG321", "CG331", "0.1400", "1", "180.0", "2-hexene, adm jr., 11/09"}, {"CG2D1", "CG321", "CG321", "CG331", "0.1700", "2", "0.0", "2-hexene, adm jr., 11/09"}, {"CG2D1", "CG321", "CG321", "CG331", "0.0500", "3", "180.0", "2-hexene, adm jr., 11/09"}, {"CG2D1", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2DC1", "CG321", "CG321", "CG321", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG321", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG321", "CG321", "CG321", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG321", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG2O1", "CG321", "CG321", "CG2O1", "0.2000", "3", "0.00", "PMHA, hydrazone-containing model compound: PROT alkane update, adm jr., 3/2/92, sz"}, {"CG2O1", "CG321", "CG321", "CG311", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG321", "CG321", "CG314", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"CG2O1", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O2", "CG321", "CG321", "CG311", "0.1950", "3", "0.00", "GMGA, cacha"}, {"CG2O2", "CG321", "CG321", "CG321", "0.2100", "1", "180.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG321", "0.3900", "2", "0.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG321", "0.3500", "3", "180.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG321", "0.1100", "4", "0.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG321", "0.0900", "6", "180.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG331", "0.2100", "1", "180.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG331", "0.3900", "2", "0.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG331", "0.3500", "3", "180.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG331", "0.1100", "4", "0.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG331", "0.0900", "6", "180.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "deleteme DELETEME (we want to use wildcarting)"}, {"CG2O3", "CG321", "CG321", "CG2R61", "0.0400", "3", "0.00", "FBIB, Fatty Binding Inhibitior B, cacha"}, {"CG2O3", "CG321", "CG321", "CG311", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG321", "CG321", "CG314", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"CG2O3", "CG321", "CG321", "CG321", "0.06450", "2", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG2O3", "CG321", "CG321", "CG321", "0.14975", "3", "180.00", "LIPID alkane, 4/04, jbk"}, {"CG2O3", "CG321", "CG321", "CG321", "0.09458", "4", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG2O3", "CG321", "CG321", "CG321", "0.11251", "5", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG2O3", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O5", "CG321", "CG321", "CG321", "0.2100", "1", "180.00", "CHON, cyclohexanone; from LIPID methylbutyrate; yapol"}, {"CG2O5", "CG321", "CG321", "CG321", "0.3900", "2", "0.00", "CHON, cyclohexanone; from LIPID methylbutyrate; yapol"}, {"CG2O5", "CG321", "CG321", "CG321", "0.3500", "3", "180.00", "CHON, cyclohexanone; from LIPID methylbutyrate; yapol"}, {"CG2O5", "CG321", "CG321", "CG321", "0.1100", "4", "0.00", "CHON, cyclohexanone; from LIPID methylbutyrate; yapol"}, {"CG2O5", "CG321", "CG321", "CG321", "0.0900", "6", "180.00", "CHON, cyclohexanone; from LIPID methylbutyrate; yapol"}, {"CG2O5", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "CHON, cyclohexanone; from CG2O2 CG321 CG321 HGA2; yapol"}, {"CG2R61", "CG321", "CG321", "CG321", "0.0400", "3", "0.00", "PROT ethylbenzene"}, {"CG2R61", "CG321", "CG321", "NG2S1", "0.1900", "3", "0.00", "2AEPD, 2-ethylamino-pyridine CDCA conjugate, corrected by kevo"}, {"CG2R61", "CG321", "CG321", "HGA2", "0.0400", "3", "0.00", "PROT ethylbenzene"}, {"CG301", "CG321", "CG321", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06"}, {"CG301", "CG321", "CG321", "CG321", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG301", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG321", "CG321", "CG311", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG321", "CG321", "CG321", "0.5000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG311", "CG321", "CG321", "CG321", "0.5000", "6", "180.00", "CARBOCY carbocyclic sugars"}, {"CG311", "CG321", "CG321", "CG324", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG311", "CG321", "CG321", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG311", "CG321", "CG321", "SG311", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "NA abasic nucleoside"}, {"CG314", "CG321", "CG321", "CG321", "0.5000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG314", "CG321", "CG321", "CG321", "0.5000", "6", "180.00", "CARBOCY carbocyclic sugars"}, {"CG314", "CG321", "CG321", "CG324", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with FLAVOP PIP1,2,3"}, {"CG314", "CG321", "CG321", "SG311", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "NA abasic nucleoside"}, {"CG321", "CG321", "CG321", "CG321", "0.06450", "2", "0.00", "LIPID alkane, 4/04, jbk (Jeff Klauda)"}, {"CG321", "CG321", "CG321", "CG321", "0.14975", "3", "180.00", "LIPID alkane, 4/04, jbk"}, {"CG321", "CG321", "CG321", "CG321", "0.09458", "4", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG321", "CG321", "CG321", "CG321", "0.11251", "5", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG321", "CG321", "CG321", "CG324", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG321", "CG321", "CG321", "CG331", "0.15051", "2", "0.00", "LIPID alkane, 4/04, jbk (Jeff Klauda)"}, {"CG321", "CG321", "CG321", "CG331", "0.08133", "3", "180.00", "LIPID alkane, 4/04, jbk"}, {"CG321", "CG321", "CG321", "CG331", "0.10824", "4", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG321", "CG321", "CG321", "CG331", "0.20391", "5", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG321", "CG321", "CG321", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG321", "CG321", "NG2D1", "0.7900", "1", "180.00", "from EEPI's CG331 CG321 CG321 NG2D1, fylin"}, {"CG321", "CG321", "CG321", "NG2D1", "0.2000", "2", "0.00", "from EEPI's CG331 CG321 CG321 NG2D1, fylin"}, {"CG321", "CG321", "CG321", "NG2D1", "0.1200", "3", "0.00", "from EEPI's CG331 CG321 CG321 NG2D1, fylin"}, {"CG321", "CG321", "CG321", "NG2D1", "0.1500", "4", "0.00", "from EEPI's CG331 CG321 CG321 NG2D1, fylin"}, {"CG321", "CG321", "CG321", "NG2D1", "0.0500", "6", "180.00", "from EEPI's CG331 CG321 CG321 NG2D1, fylin"}, {"CG321", "CG321", "CG321", "NG2S1", "0.2000", "3", "0.00", "ALBE, Alpha Lysine Benzyl Ester CDCA Amide, cacha"}, {"CG321", "CG321", "CG321", "OG301", "0.1600", "1", "180.00", "methylpropylether, 2/12/05, ATM"}, {"CG321", "CG321", "CG321", "OG301", "0.3900", "2", "0.00", "methylpropylether"}, {"CG321", "CG321", "CG321", "OG302", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG321", "OG303", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG321", "OG311", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG321", "OG3C61", "0.1900", "1", "180.00", "THP, tetrahydropyran"}, {"CG321", "CG321", "CG321", "OG3C61", "1.0000", "2", "180.00", "THP, tetrahydropyran"}, {"CG321", "CG321", "CG321", "OG3C61", "0.6000", "3", "0.00", "THP, tetrahydropyran"}, {"CG321", "CG321", "CG321", "OG3C61", "0.0800", "4", "180.00", "THP, tetrahydropyran"}, {"CG321", "CG321", "CG321", "SG311", "0.1950", "3", "0.00", "THPS, thiopyran"}, {"CG321", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "LIPID alkanes"}, {"CG324", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG331", "CG321", "CG321", "CG331", "0.03819", "2", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG331", "CG321", "CG321", "CG331", "0.03178", "6", "180.00", "LIPID alkane, 4/04, jbk"}, {"CG331", "CG321", "CG321", "NG2D1", "0.7900", "1", "180.00", "EEPI, fylin"}, {"CG331", "CG321", "CG321", "NG2D1", "0.2000", "2", "0.00", "EEPI, fylin"}, {"CG331", "CG321", "CG321", "NG2D1", "0.1200", "3", "0.00", "EEPI, fylin"}, {"CG331", "CG321", "CG321", "NG2D1", "0.1500", "4", "0.00", "EEPI, fylin"}, {"CG331", "CG321", "CG321", "NG2D1", "0.0500", "6", "180.00", "EEPI, fylin"}, {"CG331", "CG321", "CG321", "OG301", "0.1600", "1", "180.00", "methylpropylether, 2/12/05, ATM"}, {"CG331", "CG321", "CG321", "OG301", "0.3900", "2", "0.00", "methylpropylether"}, {"CG331", "CG321", "CG321", "OG311", "0.1950", "3", "0.00", "PROH, n-propanol, kevo for gsk/ibm"}, {"CG331", "CG321", "CG321", "SG311", "0.1950", "3", "0.00", "PRSH, n-thiopropanol, kevo for gsk/ibm"}, {"CG331", "CG321", "CG321", "SG3O1", "0.9400", "1", "180.00", "PSNA, propyl sulfonate, xhe"}, {"CG331", "CG321", "CG321", "SG3O1", "0.3800", "2", "0.00", "PSNA, propyl sulfonate, xhe"}, {"CG331", "CG321", "CG321", "SG3O1", "0.1100", "3", "0.00", "PSNA, propyl sulfonate, xhe"}, {"CG331", "CG321", "CG321", "HGA2", "0.1800", "3", "0.00", "LIPID alkane"}, {"CG3RC1", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "LIPID alkanes"}, {"NG2D1", "CG321", "CG321", "HGA2", "0.2000", "3", "0.00", "EEPI, from NG2S1 CG321 CG321 HGA2, fylin"}, {"NG2S1", "CG321", "CG321", "SG3O1", "0.9500", "1", "180.00", "NACT, N-acetyltaurine, compromise between 6-31G* and 6-31+G*, xxwy and kevo"}, {"NG2S1", "CG321", "CG321", "SG3O1", "1.3300", "2", "0.00", "NACT, N-acetyltaurine, compromise between 6-31G* and 6-31+G*, xxwy and kevo"}, {"NG2S1", "CG321", "CG321", "SG3O1", "0.0800", "3", "180.00", "NACT, N-acetyltaurine, compromise between 6-31G* and 6-31+G*, xxwy and kevo"}, {"NG2S1", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "TCA, Taurocholic Acid, cacha, 03/06 OK"}, {"NG311", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "K2Cn, cgenff_compromise, kevo"}, {"OG301", "CG321", "CG321", "OG301", "0.2500", "1", "180.00", "1,2 dimethoxyethane, 2/12/05, ATM"}, {"OG301", "CG321", "CG321", "OG301", "1.2400", "2", "0.00", "1,2 dimethoxyethane"}, {"OG301", "CG321", "CG321", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"OG302", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG303", "CG321", "CG321", "OG303", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG303", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG3C61", "CG321", "CG321", "OG3C61", "0.1950", "3", "0.00", "DIOX, dioxane"}, {"OG3C61", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "DIOX, dioxane"}, {"SG311", "CG321", "CG321", "SG311", "0.1000", "3", "0.00", "DITH, dithiane"}, {"SG311", "CG321", "CG321", "HGA2", "0.0100", "3", "0.00", "PROT DTN 8/24/90"}, {"SG3O1", "CG321", "CG321", "HGA2", "0.0100", "1", "0.00", "PSNA, propyl sulfonate, xhe"}, {"HGA2", "CG321", "CG321", "HGA2", "0.2200", "3", "0.00", "LIPID alkanes"}, {"CG311", "CG321", "CG324", "NG3P1", "1.0000", "3", "0.00", "BPAB, Gamma N-benzyl piperidine alpha benzyl CDCA amide, cacha ! @@@ Kenno: 0.1950 -> 1.0000"}, {"CG311", "CG321", "CG324", "NG3P2", "1.0000", "3", "0.00", "G4MP, Gamma-4-Methyl Piperidine Glu Acid CDCA Amide, cacha ! @@@ Kenno: 0.1950 -> 1.0000"}, {"CG311", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG321", "CG321", "CG324", "NG2P1", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG324", "NG3P1", "1.0000", "3", "0.00", "FLAVOP PIP1,2,3 ! @@@ Kenno: 0.1950 -> 1.0000"}, {"CG321", "CG321", "CG324", "NG3P2", "1.0000", "3", "0.00", "PIP, piperidine ! @@@ Kenno: 0.1950 -> 1.0000"}, {"CG321", "CG321", "CG324", "NG3P3", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG331", "CG321", "CG324", "NG2O1", "0.8773", "1", "180.00", "NIPR, nitropropane, abar"}, {"CG331", "CG321", "CG324", "NG2O1", "0.2382", "2", "0.00", "NIPR, nitropropane, abar"}, {"CG331", "CG321", "CG324", "NG2O1", "0.1465", "3", "180.00", "NIPR, nitropropane, abar"}, {"CG331", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "NIPR, nitropropane; from CG321 CG321 CG324 HGA2; abar"}, {"OG302", "CG321", "CG324", "NG3P0", "3.3000", "1", "180.00", "LIPID choline, 12/92"}, {"OG302", "CG321", "CG324", "NG3P0", "-0.4000", "3", "180.00", "LIPID choline, 12/92"}, {"OG302", "CG321", "CG324", "HGP5", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG303", "CG321", "CG324", "NG3P0", "3.3000", "1", "180.00", "LIPID choline, 12/92"}, {"OG303", "CG321", "CG324", "NG3P0", "-0.4000", "3", "180.00", "LIPID choline, 12/92"}, {"OG303", "CG321", "CG324", "NG3P3", "0.7000", "1", "180.00", "LIPID ethanolamine"}, {"OG303", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG303", "CG321", "CG324", "HGP5", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG321", "CG324", "NG3P0", "4.3000", "1", "180.00", "LIPID choline, 12/92"}, {"OG311", "CG321", "CG324", "NG3P0", "-0.4000", "3", "180.00", "LIPID choline, 12/92"}, {"OG311", "CG321", "CG324", "NG3P3", "0.7000", "1", "180.00", "LIPID ethanolamine"}, {"OG311", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG321", "CG324", "HGP5", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG3C61", "CG321", "CG324", "NG3P2", "0.8000", "3", "0.00", "MORP, morpholine"}, {"OG3C61", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "MORP, morpholine"}, {"SG311", "CG321", "CG324", "NG3P2", "0.8000", "3", "0.00", "TMOR, thiomorpholine"}, {"SG311", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "TMOR, thiomorpholine"}, {"HGA2", "CG321", "CG324", "NG2O1", "0.1950", "3", "0.00", "NIPR, nitropropane; from NG2S1 CG321 CG321 HGA2; abar"}, {"HGA2", "CG321", "CG324", "NG2P1", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA2", "CG321", "CG324", "NG3P0", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA2", "CG321", "CG324", "NG3P1", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA2", "CG321", "CG324", "NG3P2", "0.1950", "3", "0.00", "PIP, piperidine"}, {"HGA2", "CG321", "CG324", "NG3P3", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA2", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA2", "CG321", "CG324", "HGP5", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2D1", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG2O1", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG2O2", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG2O3", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG2O4", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PALD, propionaldehyde from PROT rotation barrier in Ethane (SF) unmodified"}, {"CG2O5", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "Methyl group torsion, kevo"}, {"CG2R51", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG2R61", "CG321", "CG331", "HGA3", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CG301", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "DMBU, dimethoxybutane, sna"}, {"CG311", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG321", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG324", "CG321", "CG331", "HGA3", "0.2000", "3", "0.00", "NIPR, nitropropane; from CG314 CG311 CG331 HGA3; abar"}, {"CG331", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG3C31", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "1BOX, 1-butene oxide; default from CG321 CG321 CG331 HGA3; sc"}, {"NG2D1", "CG321", "CG331", "HGA3", "0.1500", "3", "0.00", "EICY, ethyl isocyanate, xxwy"}, {"NG2R51", "CG321", "CG331", "HGA3", "0.1950", "3", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, from NG2S1 CG321 CG331 HGA3, kevo"}, {"NG2S1", "CG321", "CG331", "HGA3", "0.1950", "3", "0.00", "DECB, diethyl carbamate, cacha"}, {"NG2S3", "CG321", "CG331", "HGA3", "0.1950", "3", "0.00", "NESM, N-ethyl-sulfamate; from NG2S1 CG321 CG331 HGA3; my"}, {"NG311", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PEI polymers, default parameter, kevo"}, {"OG301", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"OG302", "CG321", "CG331", "HGA3", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG303", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"OG311", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"OG312", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"SG301", "CG321", "CG331", "HGA3", "0.0100", "3", "0.00", "PROT DTN 8/24/90"}, {"SG311", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"SG3O1", "CG321", "CG331", "HGA3", "0.1100", "3", "0.00", "ESNA, ethyl sulfonate, xhe"}, {"SG3O2", "CG321", "CG331", "HGA3", "0.0770", "3", "0.00", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"SG3O3", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "MESO, methylethylsulfoxide; default parameter; kevo"}, {"CLGA1", "CG321", "CG331", "HGA3", "0.3000", "3", "0.00", "CLET"}, {"BRGA1", "CG321", "CG331", "HGA3", "0.3000", "3", "0.00", "BRET"}, {"HGA2", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG331", "CG321", "CG3C31", "CG3C31", "0.0000", "3", "0.00", "1BOX, 1-butene oxide, kevo"}, {"CG331", "CG321", "CG3C31", "OG3C31", "0.4700", "1", "180.00", "1BOX, 1-butene oxide, kevo"}, {"CG331", "CG321", "CG3C31", "OG3C31", "0.1300", "3", "0.00", "1BOX, 1-butene oxide, kevo"}, {"CG331", "CG321", "CG3C31", "HGA1", "0.1800", "1", "0.00", "1BOX, 1-butene oxide, kevo"}, {"CG331", "CG321", "CG3C31", "HGA1", "1.0700", "3", "0.00", "1BOX, 1-butene oxide, kevo"}, {"HGA2", "CG321", "CG3C31", "CG3C31", "0.0100", "1", "0.00", "1BOX, 1-butene oxide, kevo"}, {"HGA2", "CG321", "CG3C31", "CG3C31", "0.0200", "3", "0.00", "1BOX, 1-butene oxide, kevo"}, {"HGA2", "CG321", "CG3C31", "OG3C31", "0.5000", "1", "0.00", "1BOX, 1-butene oxide, kevo"}, {"HGA2", "CG321", "CG3C31", "OG3C31", "0.2700", "3", "0.00", "1BOX, 1-butene oxide, kevo"}, {"HGA2", "CG321", "CG3C31", "HGA1", "0.0000", "3", "0.00", "1BOX, 1-butene oxide; kept at 0; sc"}, {"OG301", "CG321", "CG3C51", "CG3C52", "0.2000", "3", "180.00", "3POMP, 3-phenoxymethylpyrrolidine; from NA, sugar; kevo"}, {"OG301", "CG321", "CG3C51", "HGA1", "0.1950", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from NA, sugar; kevo"}, {"OG303", "CG321", "CG3C51", "CG3C51", "2.5000", "1", "180.00", "NA, sugar"}, {"OG303", "CG321", "CG3C51", "CG3C51", "0.4000", "2", "0.00", "NA, sugar"}, {"OG303", "CG321", "CG3C51", "CG3C51", "0.8000", "3", "180.00", "NA, sugar"}, {"OG303", "CG321", "CG3C51", "CG3C51", "0.2000", "4", "180.00", "NA, sugar"}, {"OG303", "CG321", "CG3C51", "CG3C52", "0.2000", "3", "180.00", "NA, sugar"}, {"OG303", "CG321", "CG3C51", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG321", "CG3C51", "OG3C51", "3.4000", "1", "180.00", "NA, sugar"}, {"OG303", "CG321", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"OG311", "CG321", "CG3C51", "CG3C51", "2.5000", "1", "180.00", "NA, sugar"}, {"OG311", "CG321", "CG3C51", "CG3C51", "0.4000", "2", "0.00", "NA, sugar"}, {"OG311", "CG321", "CG3C51", "CG3C51", "0.8000", "3", "180.00", "NA, sugar"}, {"OG311", "CG321", "CG3C51", "CG3C51", "0.2000", "4", "180.00", "NA, sugar"}, {"OG311", "CG321", "CG3C51", "CG3C52", "0.2000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG321", "CG3C51", "OG3C51", "3.4000", "1", "180.00", "NA, sugar"}, {"OG311", "CG321", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"SG311", "CG321", "CG3C51", "CG3C51", "2.5000", "1", "180.00", "PROTNA sahc"}, {"SG311", "CG321", "CG3C51", "CG3C51", "0.4000", "2", "0.00", "PROTNA sahc"}, {"SG311", "CG321", "CG3C51", "CG3C51", "0.8000", "3", "180.00", "PROTNA sahc"}, {"SG311", "CG321", "CG3C51", "CG3C51", "0.2000", "4", "180.00", "PROTNA sahc"}, {"SG311", "CG321", "CG3C51", "OG3C51", "3.4000", "1", "180.00", "PROTNA sahc"}, {"SG311", "CG321", "CG3C51", "HGA1", "0.1950", "3", "0.00", "PROTNA sahc"}, {"HGA2", "CG321", "CG3C51", "CG3C51", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA2", "CG321", "CG3C51", "CG3C52", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA2", "CG321", "CG3C51", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG321", "CG3C51", "OG3C51", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA2", "CG321", "CG3C51", "HGA1", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"CG321", "CG321", "CG3RC1", "CG331", "0.2000", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG321", "CG3RC1", "CG3C51", "0.1580", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG321", "CG3RC1", "CG3C52", "0.2000", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG321", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG321", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG321", "CG3RC1", "CG3C31", "0.1500", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG321", "CG3RC1", "CG3C51", "0.5000", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG321", "CG3RC1", "CG3RC1", "0.6000", "1", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG321", "CG3RC1", "CG3RC1", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG321", "CG3RC1", "CG3RC1", "0.7000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG321", "CG3RC1", "CG331", "0.1900", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA2", "CG321", "CG3RC1", "CG3C31", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG321", "CG3RC1", "CG3C51", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG321", "CG3RC1", "CG3C52", "0.1950", "1", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA2", "CG321", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG321", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG321", "NG2D1", "CG2D1", "0.6100", "1", "0.00", "EEPI, fylin"}, {"CG321", "CG321", "NG2D1", "CG2D1", "0.6200", "2", "180.00", "EEPI, fylin"}, {"CG321", "CG321", "NG2D1", "CG2D1", "0.2500", "3", "0.00", "EEPI, fylin"}, {"CG321", "CG321", "NG2D1", "CG2D1", "0.6000", "4", "0.00", "EEPI, fylin"}, {"CG321", "CG321", "NG2D1", "CG2D1", "0.2500", "6", "0.00", "EEPI, fylin"}, {"CG321", "CG321", "NG2D1", "CG2N2", "0.1900", "1", "180.00", "DH3T, fylin"}, {"CG321", "CG321", "NG2D1", "CG2N2", "0.3400", "2", "180.00", "DH3T, fylin"}, {"CG321", "CG321", "NG2D1", "CG2N2", "0.5600", "3", "180.00", "DH3T, fylin"}, {"CG321", "CG321", "NG2D1", "CG2N2", "0.1200", "4", "0.00", "DH3T, fylin"}, {"CG321", "CG321", "NG2D1", "CG2N2", "0.1200", "6", "180.00", "DH3T, fylin"}, {"CG331", "CG321", "NG2D1", "CG2N2", "0.1900", "1", "0.00", "MT2A, fylin"}, {"CG331", "CG321", "NG2D1", "CG2N2", "0.3400", "2", "180.00", "MT2A, fylin"}, {"CG331", "CG321", "NG2D1", "CG2N2", "0.5600", "3", "180.00", "MT2A, fylin"}, {"CG331", "CG321", "NG2D1", "CG2N2", "0.1200", "4", "0.00", "MT2A, fylin"}, {"CG331", "CG321", "NG2D1", "CG2N2", "0.1200", "6", "180.00", "MT2A, fylin"}, {"HGA2", "CG321", "NG2D1", "CG2D1", "0.1000", "3", "0.00", "EEPI, from HGA3 CG331 NG2D1 CG2D1, fylin"}, {"HGA2", "CG321", "NG2D1", "CG2N2", "0.1100", "3", "180.00", "MT2A, from HGA3 CG331 NG2D1 CG2N1, fylin"}, {"CG331", "CG321", "NG2R51", "CG2R51", "0.3850", "1", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "CG2R51", "0.4200", "2", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "CG2R51", "0.0800", "3", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "CG2R51", "0.0550", "4", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "NG2R50", "0.3850", "1", "180.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "NG2R50", "0.4200", "2", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "NG2R50", "0.0800", "3", "180.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "NG2R50", "0.0550", "4", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"HGA2", "CG321", "NG2R51", "CG2R51", "0.0000", "3", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, from HGA3 CG331 NG2R51 CG2R53, kevo"}, {"HGA2", "CG321", "NG2R51", "NG2R50", "0.0000", "3", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, from HGA3 CG331 NG2R51 CG2R53, kevo"}, {"CG2O1", "CG321", "NG2S1", "CG2O1", "0.2000", "1", "180.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG2O1", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O2", "CG321", "NG2S1", "CG2O1", "0.2000", "1", "180.00", "PROT Alanine dipeptide; NMA; acetate; etc. backbon adm jr., 3/3/93c"}, {"CG2O2", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT adm jr. 5/02/91, acetic Acid pure solvent"}, {"CG2O3", "CG321", "NG2S1", "CG2O1", "0.2000", "1", "180.00", "PROT Alanine dipeptide; NMA; acetate; etc. adm jr., 3/3/93c"}, {"CG2O3", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"CG2R61", "CG321", "NG2S1", "CG2O1", "0.0150", "1", "0.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG321", "NG2S1", "CG2O1", "0.2980", "2", "0.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG321", "NG2S1", "CG2O1", "0.0760", "3", "180.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG321", "NG2S1", "CG2O1", "0.6190", "4", "0.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG321", "NG2S1", "CG2O1", "0.1480", "6", "0.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "NZAD, N-benzylacetamide; from CG2O2 CG321 NG2S1 HGP1; isg"}, {"CG311", "CG321", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "G4MP, Gamma-4-Methyl Piperidine Glu Acid CDCA Amide, cacha"}, {"CG311", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "G4MP, Gamma-4-Methyl Piperidine Glu Acid CDCA Amide, cacha"}, {"CG314", "CG321", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG314", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG321", "CG321", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "slack parameter picked up by 3CPD ==> re-optimize?"}, {"CG321", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT from HGP1 NG2S1 CG321 CT3, for lactams, adm jr."}, {"CG331", "CG321", "NG2S1", "CG2O6", "0.3500", "1", "180.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"CG331", "CG321", "NG2S1", "CG2O6", "0.7500", "2", "0.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"CG331", "CG321", "NG2S1", "CG2O6", "0.1500", "4", "0.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"CG331", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"HGA1", "CG321", "NG2S1", "CG2O1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"HGA1", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"HGA2", "CG321", "NG2S1", "CG2O1", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"HGA2", "CG321", "NG2S1", "CG2O6", "0.0000", "3", "0.00", "DECB, diethyl carbamate, from DMCB, kevo"}, {"HGA2", "CG321", "NG2S1", "HGP1", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"CG331", "CG321", "NG2S3", "SG3O1", "0.7550", "1", "180.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "SG3O1", "0.8660", "2", "0.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "SG3O1", "0.6280", "3", "0.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "SG3O1", "0.1510", "4", "180.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "SG3O1", "0.1130", "6", "0.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "HGP1", "0.7410", "1", "0.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "HGP1", "0.3210", "2", "0.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "HGP1", "0.2350", "3", "180.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"HGA2", "CG321", "NG2S3", "SG3O1", "0.1500", "3", "0.00", "NESM, N-ethyl-sulfamate; from HGA3 CG331 NG2S3 PG1; my"}, {"HGA2", "CG321", "NG2S3", "HGP1", "0.0100", "3", "0.00", "NESM, N-ethyl-sulfamate; from HGA3 CG331 NG2S3 HGP1; my"}, {"CG321", "CG321", "NG311", "HGPAM1", "0.3000", "3", "0.00", "K2Cn, cgenff_compromise, kevo"}, {"CG331", "CG321", "NG311", "SG3O2", "0.1000", "1", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "CG321", "NG311", "SG3O2", "0.7000", "2", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "CG321", "NG311", "SG3O2", "0.1000", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "CG321", "NG311", "HGP1", "0.1000", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"NG311", "CG321", "NG311", "CG2R61", "2.5000", "1", "180.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "CG2R61", "1.5000", "2", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "CG2R61", "0.5000", "3", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "SG3O2", "1.4000", "1", "180.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "SG3O2", "0.5000", "2", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "SG3O2", "0.1000", "3", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "HGP1", "0.1000", "3", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "HGPAM1", "1.7000", "2", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "HGPAM1", "0.3000", "3", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"HGA2", "CG321", "NG311", "CG2R61", "0.0000", "3", "180.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"HGA2", "CG321", "NG311", "CG321", "0.0000", "3", "0.00", "5UHG, cgenff_compromise, kevo"}, {"HGA2", "CG321", "NG311", "SG3O2", "0.1000", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"HGA2", "CG321", "NG311", "HGP1", "0.0500", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"HGA2", "CG321", "NG311", "HGPAM1", "0.0500", "3", "0.00", "PEI0, OBTZ, AOBT, kevo and xxwy"}, {"CG2O2", "CG321", "NG321", "HGPAM2", "0.1600", "3", "0.00", "GLYN, Glycine neutral from AMINE aliphatic amines"}, {"HGA2", "CG321", "NG321", "HGPAM2", "0.0100", "3", "0.00", "amines"}, {"CG321", "CG321", "OG301", "CG2R61", "0.2400", "1", "0.00", "PNTM, pentamidine; from ETOB, Ethoxybenzene; kevo"}, {"CG321", "CG321", "OG301", "CG2R61", "0.2900", "2", "0.00", "PNTM, pentamidine; from ETOB, Ethoxybenzene; kevo"}, {"CG321", "CG321", "OG301", "CG2R61", "0.0200", "3", "0.00", "PNTM, pentamidine; from ETOB, Ethoxybenzene; kevo"}, {"CG321", "CG321", "OG301", "CG321", "0.5700", "1", "0.00", "1,2 dimethoxyethane, 2/12/05, ATM"}, {"CG321", "CG321", "OG301", "CG321", "0.2900", "2", "0.00", "1,2 dimethoxyethane"}, {"CG321", "CG321", "OG301", "CG321", "0.4300", "3", "0.00", "1,2 dimethoxyethane"}, {"CG321", "CG321", "OG301", "CG331", "0.5700", "1", "0.00", "1,2 dimethoxyethane (DME), 2/12/05, ATM"}, {"CG321", "CG321", "OG301", "CG331", "0.2900", "2", "0.00", "1,2 dimethoxyethane (DME)"}, {"CG321", "CG321", "OG301", "CG331", "0.4300", "3", "0.00", "1,2 dimethoxyethane (DME)"}, {"CG331", "CG321", "OG301", "CG2R61", "0.2400", "1", "0.00", "ETOB, Ethoxybenzene, cacha"}, {"CG331", "CG321", "OG301", "CG2R61", "0.2900", "2", "0.00", "ETOB, Ethoxybenzene, cacha"}, {"CG331", "CG321", "OG301", "CG2R61", "0.0200", "3", "0.00", "ETOB, Ethoxybenzene, cacha"}, {"CG331", "CG321", "OG301", "CG321", "0.4000", "1", "0.00", "diethylether, 2/12/05, ATM"}, {"CG331", "CG321", "OG301", "CG321", "0.4900", "3", "0.00", "diethylether"}, {"CG331", "CG321", "OG301", "CG331", "0.4000", "1", "0.00", "diethylether, 2/12/05, ATM!from CCT3-CCT2-OCE-CG321 MEE viv"}, {"CG331", "CG321", "OG301", "CG331", "0.4900", "3", "0.00", "diethylether !from CCT3-CCT2-OCE-CG321 MEE viv"}, {"CG3C51", "CG321", "OG301", "CG2R61", "0.2000", "1", "180.00", "3POMP, 3-phenoxymethylpyrrolidine, kevo"}, {"CG3C51", "CG321", "OG301", "CG2R61", "0.1000", "2", "0.00", "3POMP, 3-phenoxymethylpyrrolidine, kevo"}, {"CG3C51", "CG321", "OG301", "CG2R61", "0.1000", "3", "180.00", "3POMP, 3-phenoxymethylpyrrolidine, kevo"}, {"HGA2", "CG321", "OG301", "CG2R61", "0.0950", "3", "0.00", "ETOB, Ethoxybenzene, cacha"}, {"HGA2", "CG321", "OG301", "CG321", "0.2840", "3", "0.00", "diethylether, alex"}, {"HGA2", "CG321", "OG301", "CG331", "0.2840", "3", "0.00", "diethylether, alex"}, {"CG2R61", "CG321", "OG302", "CG2O2", "0.0000", "3", "0.00", "ABGA, ALPHA BENZYL GLU ACID CDCA AMIDE"}, {"CG311", "CG321", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG321", "CG321", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG324", "CG321", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG331", "CG321", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG331", "CG321", "OG302", "CG2O6", "0.1000", "1", "180.00", "DECB and DECA, diethyl carbamate and carbonate, cacha and xxwy"}, {"CG331", "CG321", "OG302", "CG2O6", "0.6000", "2", "0.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"CG331", "CG321", "OG302", "CG2O6", "0.1000", "3", "180.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"HGA2", "CG321", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"HGA2", "CG321", "OG302", "CG2O6", "0.0000", "3", "0.00", "DECB, diethyl carbamate, from DMCB, kevo"}, {"CG311", "CG321", "OG303", "PG1", "0.6000", "1", "180.00", "EP_2 phospho-ser/thr !Reorganization: GPC and others"}, {"CG311", "CG321", "OG303", "PG1", "0.6500", "2", "0.00", "EP_2 phospho-ser/thr !Reorganization: GPC and others"}, {"CG311", "CG321", "OG303", "PG1", "0.0500", "3", "0.00", "EP_2 phospho-ser/thr !Reorganization: GPC and others"}, {"CG321", "CG321", "OG303", "PG1", "0.6000", "1", "180.00", "EP_2 phospho-ser/thr !Reorganization: BPET and others"}, {"CG321", "CG321", "OG303", "PG1", "0.6500", "2", "0.00", "EP_2 phospho-ser/thr !Reorganization: BPET and others"}, {"CG321", "CG321", "OG303", "PG1", "0.0500", "3", "0.00", "EP_2 phospho-ser/thr !Reorganization: BPET and others"}, {"CG321", "CG321", "OG303", "SG3O1", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG324", "CG321", "OG303", "PG1", "0.6000", "1", "180.00", "EP_2 phospho-ser/thr !Reorganization: PC and others"}, {"CG324", "CG321", "OG303", "PG1", "0.6500", "2", "0.00", "EP_2 phospho-ser/thr !Reorganization: PC and others"}, {"CG324", "CG321", "OG303", "PG1", "0.0500", "3", "0.00", "EP_2 phospho-ser/thr !Reorganization: PC and others"}, {"CG331", "CG321", "OG303", "PG2", "0.6000", "1", "180.00", "EP_2 phospho-ser/thr"}, {"CG331", "CG321", "OG303", "PG2", "0.6500", "2", "0.00", "EP_2 phospho-ser/thr"}, {"CG331", "CG321", "OG303", "PG2", "0.0500", "3", "0.00", "EP_2 phospho-ser/thr"}, {"CG3C51", "CG321", "OG303", "PG1", "0.6000", "1", "180.00", "B5SP carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3C51", "CG321", "OG303", "PG1", "0.6500", "2", "0.00", "B5SP carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3C51", "CG321", "OG303", "PG1", "0.0500", "3", "0.00", "B5SP carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3C51", "CG321", "OG303", "PG2", "0.6000", "1", "180.00", "TH5P carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3C51", "CG321", "OG303", "PG2", "0.6500", "2", "0.00", "TH5P carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3C51", "CG321", "OG303", "PG2", "0.0500", "3", "0.00", "TH5P carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3RC1", "CG321", "OG303", "PG1", "0.6000", "1", "180.00", "B5NP carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3RC1", "CG321", "OG303", "PG1", "0.6500", "2", "0.00", "B5NP carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3RC1", "CG321", "OG303", "PG1", "0.0500", "3", "0.00", "B5NP carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"HGA2", "CG321", "OG303", "PG1", "0.0000", "3", "0.00", "NA dmp !Reorganization: PC and others"}, {"HGA2", "CG321", "OG303", "PG2", "0.0000", "3", "0.00", "NA dmp !Reorganization: TH5P and others"}, {"HGA2", "CG321", "OG303", "SG3O1", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG2D1", "CG321", "OG311", "HGP1", "1.3000", "1", "0.00", "RETINOL PROL"}, {"CG2D1", "CG321", "OG311", "HGP1", "0.7000", "2", "0.00", "RETINOL PROL"}, {"CG2D1", "CG321", "OG311", "HGP1", "0.1400", "3", "0.00", "RETINOL PROL; Kenno: empirically corrected for HGA2 CG321 OG311 HGP1 from Team sugar ==> re-evaluate."}, {"CG2DC1", "CG321", "OG311", "HGP1", "1.3000", "1", "0.00", "RETINOL PROL"}, {"CG2DC1", "CG321", "OG311", "HGP1", "0.7000", "2", "0.00", "RETINOL PROL"}, {"CG2DC1", "CG321", "OG311", "HGP1", "0.1400", "3", "0.00", "RETINOL PROL; Kenno: empirically corrected for HGA2 CG321 OG311 HGP1 from Team sugar ==> re-evaluate."}, {"CG2DC2", "CG321", "OG311", "HGP1", "1.3000", "1", "0.00", "RETINOL PROL"}, {"CG2DC2", "CG321", "OG311", "HGP1", "0.7000", "2", "0.00", "RETINOL PROL"}, {"CG2DC2", "CG321", "OG311", "HGP1", "0.1400", "3", "0.00", "RETINOL PROL; Kenno: empirically corrected for HGA2 CG321 OG311 HGP1 from Team sugar ==> re-evaluate."}, {"CG2R61", "CG321", "OG311", "HGP1", "2.1000", "1", "0.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-CH2OH), yin"}, {"CG2R61", "CG321", "OG311", "HGP1", "1.4000", "2", "0.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-CH2OH), yin"}, {"CG2R61", "CG321", "OG311", "HGP1", "0.7400", "3", "0.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-CH2OH), yin; Kenno: empirically corrected for HGA2 CG321 OG311 HGP1 from Team sugar ==> re-evaluate."}, {"CG302", "CG321", "OG311", "HGP1", "0.4000", "1", "0.00", "TFE, Trifluoroethanol"}, {"CG302", "CG321", "OG311", "HGP1", "0.9000", "2", "0.00", "TFE, Trifluoroethanol"}, {"CG302", "CG321", "OG311", "HGP1", "0.3400", "3", "0.00", "TFE, Trifluoroethanol; Kenno: empirically corrected for HGA2 CG321 OG311 HGP1 from Team sugar ==> re-evaluate."}, {"CG302", "CG321", "OG311", "HGP1", "0.1200", "4", "0.00", "TFE, Trifluoroethanol"}, {"CG311", "CG321", "OG311", "HGP1", "1.1300", "1", "0.00", "og ethanol"}, {"CG311", "CG321", "OG311", "HGP1", "0.1400", "2", "0.00", "og ethanol"}, {"CG311", "CG321", "OG311", "HGP1", "0.2400", "3", "0.00", "og ethanol"}, {"CG314", "CG321", "OG311", "HGP1", "1.1300", "1", "0.00", "og ethanol"}, {"CG314", "CG321", "OG311", "HGP1", "0.1400", "2", "0.00", "og ethanol"}, {"CG314", "CG321", "OG311", "HGP1", "0.2400", "3", "0.00", "og ethanol"}, {"CG321", "CG321", "OG311", "HGP1", "1.1300", "1", "0.00", "og ethanol"}, {"CG321", "CG321", "OG311", "HGP1", "0.1400", "2", "0.00", "og ethanol"}, {"CG321", "CG321", "OG311", "HGP1", "0.2400", "3", "0.00", "og ethanol"}, {"CG324", "CG321", "OG311", "HGP1", "1.1300", "1", "0.00", "ETAM, ethanolamine (transferred from og ethanol)"}, {"CG324", "CG321", "OG311", "HGP1", "0.1400", "2", "0.00", "ETAM, ethanolamine (transferred from og ethanol)"}, {"CG324", "CG321", "OG311", "HGP1", "0.2400", "3", "0.00", "ETAM, ethanolamine (transferred from og ethanol)"}, {"CG331", "CG321", "OG311", "HGP1", "1.1300", "1", "0.00", "og ethanol"}, {"CG331", "CG321", "OG311", "HGP1", "0.1400", "2", "0.00", "og ethanol"}, {"CG331", "CG321", "OG311", "HGP1", "0.2400", "3", "0.00", "og ethanol"}, {"CG3C51", "CG321", "OG311", "HGP1", "1.1300", "1", "0.00", "og ethanol"}, {"CG3C51", "CG321", "OG311", "HGP1", "0.1400", "2", "0.00", "og ethanol"}, {"CG3C51", "CG321", "OG311", "HGP1", "0.2400", "3", "0.00", "og ethanol"}, {"HGA2", "CG321", "OG311", "HGP1", "0.1800", "3", "0.00", "og methanol"}, {"CG321", "CG321", "OG3C61", "CG321", "0.5300", "1", "180.00", "DIOX, dioxane"}, {"CG321", "CG321", "OG3C61", "CG321", "0.6800", "2", "0.00", "DIOX, dioxane"}, {"CG321", "CG321", "OG3C61", "CG321", "0.2100", "3", "180.00", "DIOX, dioxane"}, {"CG321", "CG321", "OG3C61", "CG321", "0.1500", "4", "0.00", "DIOX, dioxane"}, {"CG324", "CG321", "OG3C61", "CG321", "0.5000", "3", "0.00", "MORP, morpholine"}, {"OG3C61", "CG321", "OG3C61", "CG321", "1.0000", "3", "0.00", "DIXB, 13dioxane"}, {"HGA2", "CG321", "OG3C61", "CG321", "0.1950", "3", "0.00", "DIOX, dioxane"}, {"CG2DC1", "CG321", "OG3R60", "CG2D2O", "0.7000", "3", "0.00", "PY02, 2h-pyran"}, {"CG2DC2", "CG321", "OG3R60", "CG2D1O", "0.7000", "3", "0.00", "PY02, 2h-pyran"}, {"HGA2", "CG321", "OG3R60", "CG2D1O", "0.9000", "3", "0.00", "PY02, 2h-pyran"}, {"HGA2", "CG321", "OG3R60", "CG2D2O", "0.9000", "3", "0.00", "PY02, 2h-pyran"}, {"CG2R61", "CG321", "PG1", "OG2P1", "0.0500", "3", "0.00", "BDFP, Benzylphosphonate re-optimize?"}, {"CG2R61", "CG321", "PG1", "OG311", "1.6500", "1", "180.00", "BDFP, BDFD, Benzylphosphonate"}, {"CG2R61", "CG321", "PG1", "OG311", "0.5000", "2", "0.00", "BDFP, BDFD, Benzylphosphonate"}, {"HGA2", "CG321", "PG1", "OG2P1", "0.1000", "3", "0.00", "BDFP, Benzylphosphonate re-optimize?"}, {"HGA2", "CG321", "PG1", "OG311", "0.1000", "3", "0.00", "BDFP, BDFD, Benzylphosphonate"}, {"CG2R61", "CG321", "PG2", "OG2P1", "0.0500", "3", "0.00", "BDFD, Benzylphosphonate / re-optimize?"}, {"HGA2", "CG321", "PG2", "OG2P1", "0.1000", "3", "0.00", "BDFD, Benzylphosphonate / re-optimize?"}, {"CG331", "CG321", "SG301", "SG301", "0.3100", "3", "0.00", "PROT S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"HGA2", "CG321", "SG301", "SG301", "0.1580", "3", "0.00", "PROT expt. dimethyldisulfide, 3/26/92 (FL)"}, {"CG311", "CG321", "SG311", "HGP3", "0.2400", "1", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG311", "CG321", "SG311", "HGP3", "0.1500", "2", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG311", "CG321", "SG311", "HGP3", "0.2700", "3", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG314", "CG321", "SG311", "HGP3", "0.2400", "1", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG314", "CG321", "SG311", "HGP3", "0.1500", "2", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG314", "CG321", "SG311", "HGP3", "0.2700", "3", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG321", "CG321", "SG311", "CG2N2", "0.2400", "1", "180.00", "DH3T , from CG321 CG321 SG311 CG321, penalty= 69 no opt."}, {"CG321", "CG321", "SG311", "CG2N2", "0.3700", "3", "0.00", "DH3T , from CG321 CG321 SG311 CG321, penalty= 69 no opt."}, {"CG321", "CG321", "SG311", "CG321", "0.2400", "1", "180.00", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG321", "CG321", "SG311", "CG321", "0.3700", "3", "0.00", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG321", "CG321", "SG311", "CG331", "0.2400", "1", "180.00", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG321", "CG321", "SG311", "CG331", "0.3700", "3", "0.00", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG321", "CG321", "SG311", "HGP3", "0.2400", "1", "0.00", "PRSH, n-thiopropanol, kevo for gsk/ibm"}, {"CG321", "CG321", "SG311", "HGP3", "0.1500", "2", "0.00", "PRSH, n-thiopropanol, kevo for gsk/ibm"}, {"CG321", "CG321", "SG311", "HGP3", "0.2700", "3", "0.00", "PRSH, n-thiopropanol, kevo for gsk/ibm"}, {"CG324", "CG321", "SG311", "CG321", "0.1950", "3", "0.00", "TMOR, thiomorpholine"}, {"CG331", "CG321", "SG311", "CG331", "0.2400", "1", "180.00", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG331", "CG321", "SG311", "CG331", "0.3700", "3", "0.00", "PROT DTN 8/24/90"}, {"CG331", "CG321", "SG311", "HGP3", "0.2400", "1", "0.00", "PROT ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"CG331", "CG321", "SG311", "HGP3", "0.1500", "2", "0.00", "PROT ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"CG331", "CG321", "SG311", "HGP3", "0.2700", "3", "0.00", "PROT ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"CG3C51", "CG321", "SG311", "CG321", "0.2400", "1", "180.00", "PROT MeEtS reset by kevo"}, {"CG3C51", "CG321", "SG311", "CG321", "0.3700", "3", "0.00", "PROT MeEtS reset by kevo"}, {"SG311", "CG321", "SG311", "CG321", "1.3000", "3", "0.00", "TRIT, trithiane"}, {"HGA2", "CG321", "SG311", "CG2N2", "0.3600", "3", "0.00", "DH3T , from HGA3 CG331 SG311 CG2O6, penalty= 19.5 no opt."}, {"HGA2", "CG321", "SG311", "CG321", "0.2800", "3", "0.00", "PROT DTN 8/24/90"}, {"HGA2", "CG321", "SG311", "CG331", "0.2800", "3", "0.00", "PROT DTN 8/24/90"}, {"HGA2", "CG321", "SG311", "HGP3", "0.2000", "3", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG321", "CG321", "SG3O1", "OG2P1", "0.2300", "3", "0.00", "PSNA, propyl sulfonate, xhe"}, {"CG331", "CG321", "SG3O1", "OG2P1", "0.2600", "3", "0.00", "ESNA, ethyl sulfonate, xhe"}, {"HGA2", "CG321", "SG3O1", "OG2P1", "0.1900", "3", "0.00", "ESNA, ethyl sulfonate, xhe"}, {"CG331", "CG321", "SG3O2", "CG331", "0.9000", "1", "0.00", "MESN, methyl ethyl sulfone, xhe and kevo"}, {"CG331", "CG321", "SG3O2", "CG331", "0.3500", "2", "0.00", "MESN, methyl ethyl sulfone, xhe and kevo"}, {"CG331", "CG321", "SG3O2", "CG331", "0.1250", "3", "0.00", "MESN, methyl ethyl sulfone, xhe and kevo"}, {"CG331", "CG321", "SG3O2", "NG311", "0.1000", "1", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "CG321", "SG3O2", "NG311", "0.4000", "2", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "CG321", "SG3O2", "NG311", "0.3600", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "CG321", "SG3O2", "OG2P1", "0.1800", "3", "0.00", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"HGA2", "CG321", "SG3O2", "CG331", "0.1250", "3", "0.00", "MESN, methyl ethyl sulfone, xhe"}, {"HGA2", "CG321", "SG3O2", "NG311", "0.1600", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"HGA2", "CG321", "SG3O2", "OG2P1", "0.1600", "3", "0.00", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"CG331", "CG321", "SG3O3", "CG331", "0.1800", "1", "180.0", "MESO, methylethylsulfoxide, kevo"}, {"CG331", "CG321", "SG3O3", "CG331", "0.5700", "3", "0.0", "MESO, methylethylsulfoxide, kevo"}, {"CG331", "CG321", "SG3O3", "OG2P1", "1.6000", "1", "180.0", "MESO, methylethylsulfoxide, kevo"}, {"CG331", "CG321", "SG3O3", "OG2P1", "0.2400", "2", "180.0", "MESO, methylethylsulfoxide, kevo"}, {"CG331", "CG321", "SG3O3", "OG2P1", "0.0300", "3", "180.0", "MESO, methylethylsulfoxide, kevo"}, {"HGA2", "CG321", "SG3O3", "CG331", "0.2000", "3", "0.00", "MESO, methylethylsulfoxide; from DMSO, dimethylsulfoxide; mnoon"}, {"HGA2", "CG321", "SG3O3", "OG2P1", "0.2000", "3", "0.00", "MESO, methylethylsulfoxide; from DMSO, dimethylsulfoxide; mnoon"}, {"FGA1", "CG322", "CG331", "HGA3", "0.1850", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"HGA6", "CG322", "CG331", "HGA3", "0.1850", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"SG302", "CG323", "CG331", "HGA3", "0.1500", "3", "0.00", "PROT ethylthiolate, adm jr., 6/1/92"}, {"HGA2", "CG323", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT ethylthiolate, adm jr., 6/1/92"}, {"NG3P0", "CG324", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"NG3P3", "CG324", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA2", "CG324", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"HGP5", "CG324", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"NG3P3", "CG324", "CG3C31", "CG3C31", "0.1950", "3", "0.00", "AMCP, aminomethyl cyclopropane; from PROT alkane update, adm jr., 3/2/92; jhs"}, {"NG3P3", "CG324", "CG3C31", "HGA1", "0.2000", "3", "0.00", "AMCP, aminomethyl cyclopropane; from PROT alkane update, adm jr., 3/2/92; jhs"}, {"HGA2", "CG324", "CG3C31", "CG3C31", "0.1950", "3", "0.00", "AMCP, aminomethyl cyclopropane; from FLAVOP PIP1,2,3; jhs"}, {"HGA2", "CG324", "CG3C31", "HGA1", "0.1950", "3", "0.00", "AMCP, aminomethyl cyclopropane; from FLAVOP PIP1,2,3; jhs"}, {"CG321", "CG324", "NG2O1", "OG2N1", "0.0840", "2", "180.00", "NIPR, nitropropane, kevo and abar"}, {"CG321", "CG324", "NG2O1", "OG2N1", "0.0330", "4", "0.00", "NIPR, nitropropane, kevo and abar"}, {"CG321", "CG324", "NG2O1", "OG2N1", "0.0242", "6", "0.00", "NIPR, nitropropane, kevo and abar ! we'll tolerate the slight dihedral strain for the sake of transferability - Kenno"}, {"HGA2", "CG324", "NG2O1", "OG2N1", "0.0150", "6", "180.00", "NIPR, nitropropane, abar"}, {"CG321", "CG324", "NG2P1", "CG2N1", "0.0000", "6", "180.00", "PROT methylguanidinium, adm jr., 3/26/92"}, {"CG321", "CG324", "NG2P1", "HGP2", "0.0000", "6", "180.00", "PROT methylguanidinium, adm jr., 3/26/92"}, {"HGA2", "CG324", "NG2P1", "CG2N1", "0.0000", "6", "180.00", "PROT methylguanidinium, adm jr., 3/26/92"}, {"HGA2", "CG324", "NG2P1", "HGP2", "0.0000", "6", "180.00", "PROT methylguanidinium, adm jr., 3/26/92"}, {"CG321", "CG324", "NG3P0", "CG334", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"CG331", "CG324", "NG3P0", "CG324", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"CG331", "CG324", "NG3P0", "CG334", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"HGP5", "CG324", "NG3P0", "CG324", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"HGP5", "CG324", "NG3P0", "CG334", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"CG2R61", "CG324", "NG3P1", "CG324", "1.7000", "1", "180.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG324", "NG3P1", "CG324", "0.8000", "2", "180.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG324", "NG3P1", "CG324", "0.5800", "3", "0.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG324", "NG3P1", "HGP2", "0.0400", "3", "0.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG311", "CG324", "NG3P1", "CG324", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3; PEI polymers, kevo"}, {"CG311", "CG324", "NG3P1", "CG334", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3; PEI polymers, kevo"}, {"CG311", "CG324", "NG3P1", "HGP2", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG321", "CG324", "NG3P1", "CG324", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3; PEI polymers, kevo"}, {"CG321", "CG324", "NG3P1", "CG334", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3; PEI polymers, kevo"}, {"CG321", "CG324", "NG3P1", "HGP2", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA2", "CG324", "NG3P1", "CG324", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3; PEI polymers, kevo"}, {"HGA2", "CG324", "NG3P1", "CG334", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3; PEI polymers, kevo"}, {"HGA2", "CG324", "NG3P1", "HGP2", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG311", "CG324", "NG3P2", "CG324", "0.4000", "1", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG311", "CG324", "NG3P2", "CG324", "0.2500", "2", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG311", "CG324", "NG3P2", "CG324", "0.6000", "3", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG311", "CG324", "NG3P2", "HGP2", "0.1000", "3", "0.00", "G3P(R/S), Gamma-3-Piperidine Glu Acid CDCA Amide, cacha"}, {"CG321", "CG324", "NG3P2", "CG314", "0.4000", "1", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG321", "CG324", "NG3P2", "CG314", "0.2500", "2", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG321", "CG324", "NG3P2", "CG314", "0.6000", "3", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG321", "CG324", "NG3P2", "CG324", "0.4000", "1", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG321", "CG324", "NG3P2", "CG324", "0.2500", "2", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG321", "CG324", "NG3P2", "CG324", "0.6000", "3", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG321", "CG324", "NG3P2", "HGP2", "0.1000", "3", "0.00", "PIP, piperidine"}, {"HGA2", "CG324", "NG3P2", "CG314", "0.1000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha; PEI polymers, kevo"}, {"HGA2", "CG324", "NG3P2", "CG324", "0.1000", "3", "0.00", "PIP, piperidine; PEI polymers, kevo"}, {"HGA2", "CG324", "NG3P2", "HGP2", "0.1000", "3", "0.00", "PIP, piperidine"}, {"CG2O1", "CG324", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG2O3", "CG324", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG321", "CG324", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG331", "CG324", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG3C31", "CG324", "NG3P3", "HGP2", "0.1000", "3", "0.00", "AMCP, aminomethyl cyclopropane; from PROT 0.715->0.10 METHYLAMMONIUM (KK); jhs"}, {"HGA2", "CG324", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"HGA3", "CG331", "CG331", "HGA3", "0.1550", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA3", "CG331", "CG3C51", "CG3C51", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA3", "CG331", "CG3C51", "CG3C52", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA3", "CG331", "CG3C51", "CG3RC1", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA3", "CG331", "CG3C51", "OG3C51", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA3", "CG331", "CG3C51", "HGA1", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA3", "CG331", "CG3RC1", "CG311", "0.1500", "3", "180.00", "CA, Cholic Acid, cacha, 02/08"}, {"HGA3", "CG331", "CG3RC1", "CG321", "0.1600", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA3", "CG331", "CG3RC1", "CG3C51", "0.1500", "3", "180.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA3", "CG331", "CG3RC1", "CG3RC1", "0.1500", "3", "180.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA3", "CG331", "NG2D1", "CG2D1", "0.1000", "3", "0.00", "RETINOL SCH1, Schiff's base, deprotonated"}, {"HGA3", "CG331", "NG2D1", "CG2N1", "0.1100", "3", "180.00", "MGU1, methylguanidine"}, {"HGA3", "CG331", "NG2D1", "CG2O7", "0.0300", "3", "0.00", "MICY, methyl isocyanate, xxwy"}, {"HGA3", "CG331", "NG2R51", "CG2R53", "0.0000", "3", "0.00", "NA 9-M-A"}, {"HGA3", "CG331", "NG2R51", "CG2RC0", "0.1900", "3", "0.00", "NA 9-M-G"}, {"HGA3", "CG331", "NG2R61", "CG2R62", "0.0000", "3", "0.00", "NA 1-M-C"}, {"HGA3", "CG331", "NG2R61", "CG2R63", "0.1900", "3", "0.00", "NA 1-M-C"}, {"HGA3", "CG331", "NG2S0", "CG2O1", "0.0000", "3", "0.00", "DMA, dimethylacetamide; from PROT, sp2-methyl, no torsion potential; xxwy and jhs"}, {"HGA3", "CG331", "NG2S0", "CG331", "0.4200", "3", "0.00", "DMF, Dimethylformamide, xxwy"}, {"HGA3", "CG331", "NG2S1", "CG2O1", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"HGA3", "CG331", "NG2S1", "CG2O6", "0.0000", "3", "0.00", "DMCB, diethyl carbamate, kevo"}, {"HGA3", "CG331", "NG2S1", "HGP1", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"HGA3", "CG331", "NG2S3", "PG1", "0.1500", "3", "0.00", "NABAKB phosphoramidates"}, {"HGA3", "CG331", "NG2S3", "SG3O1", "0.1500", "3", "0.00", "NMSM, N-methyl-sulfamate; from HGA3 CG331 NG2S3 PG1; my"}, {"HGA3", "CG331", "NG2S3", "HGP1", "0.0100", "3", "0.00", "NABAKB phosphoramidates"}, {"HGA3", "CG331", "NG301", "CG2R61", "0.4300", "3", "0.00", "DMAN, N,N-dimethylaniline, kevo"}, {"HGA3", "CG331", "NG301", "CG2R64", "0.0000", "3", "180.00", "TMC, from HGA3 CG331 NG311 CG2N1, yxu"}, {"HGA3", "CG331", "NG301", "CG331", "0.0000", "3", "180.00", "TMC, from HGA3 CG331 NG311 CG2N1, yxu"}, {"HGA3", "CG331", "NG311", "CG2N1", "0.0000", "3", "180.00", "MGU2, methylguanidine2 Taken together, these two params don't make much sense"}, {"HGA3", "CG331", "NG311", "SG3O2", "0.1000", "3", "0.00", "MMSM, N-methylmethanesulfonamide; MBSM, N-methylbenzenesulfonamide; xxwy"}, {"HGA3", "CG331", "NG311", "HGP1", "0.0500", "3", "0.00", "MMSM, N-methylmethanesulfonamide; MBSM, N-methylbenzenesulfonamide; xxwy"}, {"HGA3", "CG331", "NG311", "HGPAM1", "0.4200", "3", "0.00", "MGU2, methylguanidine2 / Taken together, these two params don't make much sense"}, {"HGA3", "CG331", "OG301", "CG2D1O", "0.0650", "3", "0.00", "MOET, Methoxyethene, xxwy"}, {"HGA3", "CG331", "OG301", "CG2D2O", "0.0650", "3", "0.00", "MOET, Methoxyethene, xxwy"}, {"HGA3", "CG331", "OG301", "CG2R61", "0.0850", "3", "0.00", "MEOB, Methoxybenzene, cacha"}, {"HGA3", "CG331", "OG301", "CG301", "0.2840", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"HGA3", "CG331", "OG301", "CG311", "0.2840", "3", "0.00", "all34_ethers_1a og/gk (not affected by mistake)"}, {"HGA3", "CG331", "OG301", "CG321", "0.2840", "3", "0.00", "diethylether, alex"}, {"HGA3", "CG331", "OG301", "CG331", "0.2840", "3", "0.00", "diethylether, alex !from HCT2-CCT2-OCE-CG321 DME, viv"}, {"HGA3", "CG331", "OG301", "CG3C51", "0.2000", "1", "180.00", "THF2, THF-2'OMe C2'-OM-CM-H, from Nucl. Acids, ed"}, {"HGA3", "CG331", "OG301", "CG3C51", "1.2000", "2", "180.00", "THF2, THF-2'OMe C2'-OM-CM-H, from Nucl. Acids, ed"}, {"HGA3", "CG331", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"HGA3", "CG331", "OG302", "CG2O6", "0.0000", "3", "0.00", "DMCB and DMCA, dimethyl carbamate and carbonate, kevo"}, {"HGA3", "CG331", "OG303", "PG0", "0.0000", "3", "0.00", "NA dmp !Reorganization:MP_0 RE-OPTIMIZE!"}, {"HGA3", "CG331", "OG303", "PG1", "0.0000", "3", "0.00", "NA dmp !Reorganization:MP_1"}, {"HGA3", "CG331", "OG303", "PG2", "0.0000", "3", "0.00", "NA dmp !Reorganization:MP_2"}, {"HGA3", "CG331", "OG303", "SG3O1", "0.0000", "3", "0.00", "LIPID methylsulfate"}, {"HGA3", "CG331", "OG303", "SG3O2", "0.0000", "3", "0.00", "MMST, methyl methanesulfonate, xxwy"}, {"HGA3", "CG331", "OG311", "HGP1", "0.1800", "3", "0.00", "og methanol"}, {"HGA3", "CG331", "SG301", "SG301", "0.1580", "3", "0.00", "PROT expt. dimethyldisulfide, 3/26/92 (FL)"}, {"HGA3", "CG331", "SG311", "CG2N2", "0.3600", "3", "0.00", "MT2A , from HGA3 CG331 SG311 CG2O6"}, {"HGA3", "CG331", "SG311", "CG2O6", "0.3600", "3", "0.00", "DMTT, dimethyl trithiocarbonate, kevo"}, {"HGA3", "CG331", "SG311", "CG2R64", "0.1500", "3", "180.00", "2SMPYR, 2-(methylthio)-pyrimidine; from HGA3 CG331 SG311 CG2O6; isg"}, {"HGA3", "CG331", "SG311", "CG321", "0.2800", "3", "0.00", "PROT DTN 8/24/90"}, {"HGA3", "CG331", "SG311", "HGP3", "0.2000", "3", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"HGA3", "CG331", "SG3O1", "OG2P1", "0.2300", "3", "0.00", "MSNA, methyl sulfonate, xhe"}, {"HGA3", "CG331", "SG3O2", "CG321", "0.0850", "3", "0.00", "MESN, methyl ethyl sulfone, xhe"}, {"HGA3", "CG331", "SG3O2", "CG331", "0.1150", "3", "0.00", "DMSN, dimethyl sulfone, xhe"}, {"HGA3", "CG331", "SG3O2", "NG311", "0.1000", "3", "0.00", "MMSM, N-methylmethanesulfonamide; PMSM, N-phenylmethanesulfonamide; xxwy"}, {"HGA3", "CG331", "SG3O2", "NG321", "0.1900", "3", "0.00", "MSAM, methanesulfonamide, xxwy"}, {"HGA3", "CG331", "SG3O2", "OG2P1", "0.1800", "3", "0.00", "DMSN, dimethyl sulfone; MSAM, methanesulfonamide and other sulfonamides; xxwy and xhe"}, {"HGA3", "CG331", "SG3O2", "OG303", "0.0000", "3", "0.00", "MMST, methyl methanesulfonate, xxwy"}, {"HGA3", "CG331", "SG3O3", "CG321", "0.2000", "3", "0.00", "MESO, methylethylsulfoxide; from DMSO, dimethylsulfoxide; mnoon"}, {"HGA3", "CG331", "SG3O3", "CG331", "0.2000", "3", "0.00", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"HGA3", "CG331", "SG3O3", "OG2P1", "0.2000", "3", "0.00", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"HGA3", "CG334", "NG2O1", "OG2N1", "0.0010", "6", "0.00", "NIME, nitromethane, abar"}, {"HGA3", "CG334", "NG2P1", "CG2D1", "0.1500", "3", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGA3", "CG334", "NG2P1", "CG2DC1", "0.1500", "3", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGA3", "CG334", "NG2P1", "CG2DC2", "0.1500", "3", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGA3", "CG334", "NG2P1", "CG2N1", "0.0000", "6", "180.00", "PROT methylguanidinium, adm jr., 3/26/92"}, {"HGA3", "CG334", "NG2P1", "HGP2", "0.0000", "6", "180.00", "PROT methylguanidinium, adm jr., 3/26/92"}, {"HGP5", "CG334", "NG3P0", "CG324", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"HGP5", "CG334", "NG3P0", "CG334", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"HGP5", "CG334", "NG3P0", "OG311", "0.1000", "3", "0.00", "TMAOP, Hydroxy(trimethyl)Ammonium, xxwy"}, {"HGP5", "CG334", "NG3P0", "OG312", "0.3500", "3", "0.00", "TMAO, xxwy and ejd"}, {"HGA3", "CG334", "NG3P1", "CG324", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA3", "CG334", "NG3P1", "HGP2", "0.9000", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA3", "CG334", "NG3P3", "HGP2", "0.0900", "3", "0.00", "PROT fine-tuned to ab initio; METHYLAMMONIUM, KK 03/10/92"}, {"HGAAM0", "CG3AM0", "NG301", "CG3AM0", "0.3150", "3", "0.00", "AMINE aliphatic amines"}, {"HGAAM1", "CG3AM1", "NG311", "CG3AM1", "0.0800", "3", "0.00", "AMINE aliphatic amines"}, {"HGAAM1", "CG3AM1", "NG311", "HGPAM1", "0.4200", "3", "0.00", "AMINE aliphatic amines"}, {"HGAAM2", "CG3AM2", "NG321", "HGPAM2", "0.1600", "3", "0.00", "AMINE aliphatic amines"}, {"CG321", "CG3C31", "CG3C31", "OG3C31", "0.1100", "6", "180.00", "1BOX, 1-butene oxide; from OG3C31 CG3C31 CG3C31 HGA2 from 1EOX, 1-ethylene oxide; kevo"}, {"CG321", "CG3C31", "CG3C31", "HGA2", "0.2000", "5", "180.00", "1BOX, 1-butene oxide; from CG324 CG3C31 CG3C31 HGA2 from PROTMOD hf/cyclopropane; sc"}, {"CG324", "CG3C31", "CG3C31", "CG3C31", "0.1000", "6", "0.00", "AMCP, aminomethyl cyclopropane; from PROTMOD hf/cyclopropane; jhs"}, {"CG324", "CG3C31", "CG3C31", "HGA2", "0.2000", "5", "180.00", "AMCP, aminomethyl cyclopropane; from PROTMOD hf/cyclopropane; jhs"}, {"CG3C31", "CG3C31", "CG3C31", "HGA1", "0.1000", "6", "0.00", "AMCP, aminomethyl cyclopropane; from PROTMOD hf/cyclopropane; jhs"}, {"CG3C31", "CG3C31", "CG3C31", "HGA2", "0.1000", "6", "0.00", "PROTMOD hf/cyclopropane"}, {"OG3C31", "CG3C31", "CG3C31", "HGA1", "0.1100", "6", "180.00", "1BOX, 1-butene oxide; from OG3C31 CG3C31 CG3C31 HGA2 from 1EOX, 1-ethylene oxide; kevo"}, {"OG3C31", "CG3C31", "CG3C31", "HGA2", "0.1100", "6", "180.00", "1EOX, 1-ethylene oxide, kevo"}, {"HGA1", "CG3C31", "CG3C31", "HGA2", "0.2000", "5", "180.00", "AMCP, aminomethyl cyclopropane; from PROTMOD hf/cyclopropane; jhs"}, {"HGA2", "CG3C31", "CG3C31", "HGA2", "0.2000", "5", "180.00", "PROTMOD hf/cyclopropane"}, {"CG3RC1", "CG3C31", "CG3RC1", "CG321", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C31", "CG3RC1", "CG3C51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C31", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C31", "CG3RC1", "NG2R51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C31", "CG3RC1", "NG2R61", "0.7000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C31", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "CG321", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "CG3C51", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "CG3C52", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "NG2R51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "NG2R61", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3C31", "OG3C31", "CG3C31", "0.6400", "5", "0.00", "1BOX, 1-butene oxide; from HGA2 CG3C31 OG3C31 CG3C31 from 1EOX, 1-ethylene oxide; kevo"}, {"CG321", "CG3C31", "OG3C31", "CG3C31", "0.8100", "6", "180.00", "1BOX, 1-butene oxide; from HGA2 CG3C31 OG3C31 CG3C31 from 1EOX, 1-ethylene oxide; kevo"}, {"HGA1", "CG3C31", "OG3C31", "CG3C31", "0.6400", "5", "0.00", "1BOX, 1-butene oxide; from HGA2 CG3C31 OG3C31 CG3C31 from 1EOX, 1-ethylene oxide; kevo"}, {"HGA1", "CG3C31", "OG3C31", "CG3C31", "0.8100", "6", "180.00", "1BOX, 1-butene oxide; from HGA2 CG3C31 OG3C31 CG3C31 from 1EOX, 1-ethylene oxide; kevo"}, {"HGA2", "CG3C31", "OG3C31", "CG3C31", "0.6400", "5", "0.00", "1EOX, 1-ethylene oxide, kevo"}, {"HGA2", "CG3C31", "OG3C31", "CG3C31", "0.8100", "6", "180.00", "1EOX, 1-ethylene oxide, kevo"}, {"CG2R53", "CG3C41", "CG3C41", "NG2R43", "3.0000", "3", "0.00", "AZDO, 2-azetidinone, kevo"}, {"CG2R53", "CG3C41", "CG3C41", "HGA2", "0.5700", "3", "0.00", "AZDO, 2-azetidinone; lsk and kevo"}, {"CG3C41", "CG3C41", "CG3C41", "CG3C41", "1.4300", "3", "0.00", "CBU, cyclobutane; QM by Nikolay Simakov; lsk"}, {"CG3C41", "CG3C41", "CG3C41", "OG3C51", "0.0000", "3", "0.00", "OXTN, oxetane, gmu"}, {"CG3C41", "CG3C41", "CG3C41", "HGA2", "0.5700", "3", "0.00", "CBU, cyclobutane; QM by Nikolay Simakov; lsk"}, {"NG2R43", "CG3C41", "CG3C41", "HGA2", "0.5700", "3", "0.00", "AZDO, 2-azetidinone; lsk and kevo"}, {"OG3C51", "CG3C41", "CG3C41", "HGA2", "0.1900", "3", "0.00", "OXTN, oxetane, gmu"}, {"HGA2", "CG3C41", "CG3C41", "HGA2", "0.0000", "3", "0.00", "CBU, cyclobutane, kevo"}, {"CG3C41", "CG3C41", "NG2R43", "CG2R53", "3.0000", "3", "0.00", "AZDO, 2-azetidinone, kevo"}, {"CG3C41", "CG3C41", "NG2R43", "HGP1", "0.2000", "3", "180.00", "AZDO, 2-azetidinone, kevo"}, {"HGA2", "CG3C41", "NG2R43", "CG2R53", "0.5700", "3", "0.00", "AZDO, 2-azetidinone; lsk and kevo"}, {"HGA2", "CG3C41", "NG2R43", "HGP1", "0.0000", "3", "0.00", "AZDO, 2-azetidinone, lsk and kevo"}, {"CG3C41", "CG3C41", "OG3C51", "CG3C41", "0.5000", "3", "0.00", "OXTN, oxetane, gmu (CG3C52 CG3C52 OG3C51 CG3C52)"}, {"HGA2", "CG3C41", "OG3C51", "CG3C41", "0.3000", "3", "0.00", "OXTN, oxetane, gmu"}, {"CG321", "CG3C51", "CG3C51", "CG3C51", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG321", "CG3C51", "CG3C51", "CG3C52", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG321", "CG3C51", "CG3C51", "NG2S3", "0.5000", "2", "180.00", "NABAKB phosphoramidates"}, {"CG321", "CG3C51", "CG3C51", "NG321", "0.3000", "3", "180.00", "amines"}, {"CG321", "CG3C51", "CG3C51", "OG303", "0.8000", "3", "180.00", "NA, sugar"}, {"CG321", "CG3C51", "CG3C51", "OG303", "0.2000", "4", "0.00", "NA, sugar"}, {"CG321", "CG3C51", "CG3C51", "OG311", "0.1400", "3", "0.00", "PROT, hydroxyl wild card"}, {"CG321", "CG3C51", "CG3C51", "HGA1", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG331", "CG3C51", "CG3C51", "CG3C51", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG331", "CG3C51", "CG3C51", "CG3C52", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG331", "CG3C51", "CG3C51", "OG303", "0.8000", "3", "180.00", "NA, sugar"}, {"CG331", "CG3C51", "CG3C51", "OG311", "0.1400", "3", "0.00", "PROT, hydroxyl wild card"}, {"CG331", "CG3C51", "CG3C51", "HGA1", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C51", "CG3C51", "CG3C51", "CG3C51", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C51", "CG3C51", "CG3C51", "CG3C52", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C51", "CG3C51", "CG3C51", "CG3C53", "0.4000", "6", "0.00", "NA bkb"}, {"CG3C51", "CG3C51", "CG3C51", "NG2R51", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3C51", "CG3C51", "CG3C51", "NG2R61", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3C51", "CG3C51", "CG3C51", "NG301", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"CG3C51", "CG3C51", "CG3C51", "OG303", "2.0000", "3", "180.00", "NA, sugar"}, {"CG3C51", "CG3C51", "CG3C51", "OG303", "0.4000", "5", "0.00", "NA, sugar"}, {"CG3C51", "CG3C51", "CG3C51", "OG303", "0.8000", "6", "0.00", "NA, sugar"}, {"CG3C51", "CG3C51", "CG3C51", "OG311", "0.2000", "3", "0.00", "par22, X CT1 CT2 X; erh 3/08"}, {"CG3C51", "CG3C51", "CG3C51", "OG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C51", "CG3C51", "FGA1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG3C51", "CG3C51", "HGA1", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C51", "CG3C51", "CG3C51", "HGA6", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C52", "CG3C51", "CG3C51", "CG3C52", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C52", "CG3C51", "CG3C51", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3C51", "NG2R51", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3C52", "CG3C51", "CG3C51", "OG303", "0.8000", "3", "180.00", "NA, sugar"}, {"CG3C52", "CG3C51", "CG3C51", "OG303", "0.2000", "4", "0.00", "NA, sugar"}, {"CG3C52", "CG3C51", "CG3C51", "OG311", "0.2000", "3", "0.00", "par22, X CT1 CT2 X; erh 3/08"}, {"CG3C52", "CG3C51", "CG3C51", "OG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C52", "CG3C51", "CG3C51", "FGA1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C52", "CG3C51", "CG3C51", "HGA1", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C52", "CG3C51", "CG3C51", "HGA6", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C53", "CG3C51", "CG3C51", "OG311", "0.1400", "3", "0.00", "PROT, hydroxyl wild card"}, {"CG3C53", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG3RC1", "CG3C51", "CG3C51", "OG311", "0.6000", "1", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "CG3C51", "OG311", "0.7000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "CG3C51", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugar"}, {"NG2R51", "CG3C51", "CG3C51", "OG303", "0.0000", "3", "0.00", "NA nadp/nadph"}, {"NG2R51", "CG3C51", "CG3C51", "OG311", "0.0000", "3", "0.00", "NA Guanine and uracil"}, {"NG2R51", "CG3C51", "CG3C51", "HGA1", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R61", "CG3C51", "CG3C51", "OG311", "0.0000", "3", "0.00", "NA Adenine and cytosine"}, {"NG2R61", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NA nadp/nadph"}, {"NG2S3", "CG3C51", "CG3C51", "OG3C51", "0.2000", "3", "0.00", "NABAKB tphc phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NABAKB tphc phosphoramidates"}, {"NG301", "CG3C51", "CG3C51", "OG311", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to Adenine and cytosine from par_all27_na.prm"}, {"NG301", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"NG321", "CG3C51", "CG3C51", "OG3C51", "0.2000", "3", "0.00", "NABAKB tphc phosphoramidates"}, {"NG321", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NABAKB tphc phosphoramidates"}, {"OG303", "CG3C51", "CG3C51", "OG311", "0.0000", "3", "0.00", "NA bkb"}, {"OG303", "CG3C51", "CG3C51", "OG3C51", "0.2000", "3", "0.00", "NA bkb"}, {"OG303", "CG3C51", "CG3C51", "OG3C51", "0.6000", "4", "180.00", "NA bkb"}, {"OG303", "CG3C51", "CG3C51", "OG3C51", "0.3000", "5", "0.00", "NA bkb"}, {"OG303", "CG3C51", "CG3C51", "OG3C51", "0.5000", "6", "0.00", "NA bkb"}, {"OG303", "CG3C51", "CG3C51", "FGA1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG303", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C51", "HGA6", "0.1950", "3", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C51", "OG311", "0.0000", "3", "0.00", "NA bkb"}, {"OG311", "CG3C51", "CG3C51", "OG3C51", "0.2000", "3", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C51", "OG3C51", "0.6000", "4", "180.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C51", "OG3C51", "0.3000", "5", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C51", "OG3C51", "0.5000", "6", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"OG3C51", "CG3C51", "CG3C51", "HGA1", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf viv"}, {"FGA1", "CG3C51", "CG3C51", "HGA1", "0.1850", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"HGA1", "CG3C51", "CG3C51", "HGA1", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"HGA1", "CG3C51", "CG3C51", "HGA6", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG2O1", "CG3C51", "CG3C52", "CG3C52", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C51", "CG3C52", "HGA2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "CG3C52", "CG3C52", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "CG3C52", "HGA2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG3C51", "CG3C52", "CG3C52", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG311", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG321", "CG3C51", "CG3C52", "CG3C52", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG321", "CG3C51", "CG3C52", "NG3C51", "0.0000", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG321", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG331", "CG3C51", "CG3C52", "CG3C52", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG331", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C51", "CG3C51", "CG3C52", "CG3C51", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C51", "CG3C51", "CG3C52", "CG3C52", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C51", "CG3C51", "CG3C52", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C51", "CG3C52", "OG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C52", "CG3C51", "CG3C52", "CG3C52", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C52", "CG3C51", "CG3C52", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3C52", "NG3C51", "0.6900", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG3C52", "CG3C51", "CG3C52", "OG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C52", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3RC1", "CG3C51", "CG3C52", "CG3C52", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "CG3C52", "OG3C51", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from THF; xxwy"}, {"CG3RC1", "CG3C51", "CG3C52", "HGA2", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R51", "CG3C51", "CG3C52", "CG3C51", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R51", "CG3C51", "CG3C52", "CG3C52", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R51", "CG3C51", "CG3C52", "HGA2", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R61", "CG3C51", "CG3C52", "CG3C51", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R61", "CG3C51", "CG3C52", "CG3C52", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R61", "CG3C51", "CG3C52", "HGA2", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2S0", "CG3C51", "CG3C52", "CG3C52", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG3C51", "CG3C52", "HGA2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S3", "CG3C51", "CG3C52", "CG3C51", "1.3500", "1", "180.00", "NABAKB phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "CG3C51", "1.0000", "2", "0.00", "NABAKB phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "CG3C51", "0.2000", "3", "180.00", "NABAKB phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "CG3C52", "1.3500", "1", "180.00", "NABAKB phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "CG3C52", "1.0000", "2", "0.00", "NABAKB phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "CG3C52", "0.2000", "3", "180.00", "NABAKB phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "OG3C51", "0.2000", "3", "0.00", "NABAKB tphc phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "HGA2", "0.1950", "3", "0.00", "NABAKB tphc phosphoramidates"}, {"NG321", "CG3C51", "CG3C52", "CG3C51", "0.3000", "3", "180.00", "amines"}, {"NG321", "CG3C51", "CG3C52", "HGA2", "0.1500", "3", "180.00", "amines"}, {"OG301", "CG3C51", "CG3C52", "CG3C52", "2.0000", "3", "180.00", "THF2, THF-2'OMe from NA, sugar, ed Kenno: was 1.0 - reset to 2.0"}, {"OG301", "CG3C51", "CG3C52", "CG3C52", "0.4000", "5", "0.00", "THF2, THF-2'OMe from NA, sugar, ed"}, {"OG301", "CG3C51", "CG3C52", "CG3C52", "0.8000", "6", "0.00", "THF2, THF-2'OMe from NA, sugar, ed"}, {"OG301", "CG3C51", "CG3C52", "OG3C51", "0.2000", "3", "0.00", "THF2, THF-2'OMe, standard parameter, ed"}, {"OG301", "CG3C51", "CG3C52", "HGA2", "0.1950", "3", "180.00", "THF2, THF-2'OMe from NA, sugar, ed. Kenno: was 1.395 - problematic when substituting away hydrogens."}, {"OG303", "CG3C51", "CG3C52", "CG3C51", "2.0000", "3", "180.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "CG3C51", "0.4000", "5", "0.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "CG3C51", "0.8000", "6", "0.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "CG3C52", "0.5000", "1", "180.00", "NA"}, {"OG303", "CG3C51", "CG3C52", "CG3C52", "0.7000", "2", "0.00", "NA"}, {"OG303", "CG3C51", "CG3C52", "CG3C52", "0.4000", "3", "0.00", "NA"}, {"OG303", "CG3C51", "CG3C52", "CG3C52", "0.4000", "5", "0.00", "NA"}, {"OG303", "CG3C51", "CG3C52", "CG3RC1", "1.9000", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3C52", "OG3C51", "0.2000", "3", "0.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "OG3C51", "0.6000", "4", "180.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "OG3C51", "0.3000", "5", "0.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "OG3C51", "0.5000", "6", "0.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "HGA2", "0.1950", "3", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "CG3C51", "2.0000", "3", "180.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "CG3C51", "0.4000", "5", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "CG3C51", "0.8000", "6", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "CG3C52", "0.5000", "1", "180.00", "NA elevates energy at 0 (c3'endo), adm"}, {"OG311", "CG3C51", "CG3C52", "CG3C52", "0.7000", "2", "0.00", "NA elevates energy at 0 (c3'endo), adm"}, {"OG311", "CG3C51", "CG3C52", "CG3C52", "0.4000", "3", "0.00", "NA abasic nucleoside"}, {"OG311", "CG3C51", "CG3C52", "CG3C52", "0.4000", "5", "0.00", "NA abasic nucleoside"}, {"OG311", "CG3C51", "CG3C52", "CG3RC1", "1.9000", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3C52", "OG3C51", "0.2000", "3", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "OG3C51", "0.6000", "4", "180.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "OG3C51", "0.3000", "5", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "OG3C51", "0.5000", "6", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "HGA2", "0.1950", "3", "180.00", "NA, sugar"}, {"OG3C51", "CG3C51", "CG3C52", "CG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"OG3C51", "CG3C51", "CG3C52", "CG3C52", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"OG3C51", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf viv"}, {"FGA1", "CG3C51", "CG3C52", "OG3C51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"FGA1", "CG3C51", "CG3C52", "HGA2", "0.1850", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"HGA1", "CG3C51", "CG3C52", "CG3C51", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"HGA1", "CG3C51", "CG3C52", "CG3C52", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"HGA1", "CG3C51", "CG3C52", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA1", "CG3C51", "CG3C52", "NG3C51", "0.0000", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"HGA1", "CG3C51", "CG3C52", "OG3C51", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf viv"}, {"HGA1", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"HGA6", "CG3C51", "CG3C52", "OG3C51", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf viv"}, {"HGA6", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C51", "CG3C51", "CG3C53", "NG2R61", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3C51", "CG3C51", "CG3C53", "OG3C51", "0.6000", "6", "0.00", "NA, sugar"}, {"CG3C51", "CG3C51", "CG3C53", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C53", "NG2R61", "0.0000", "3", "0.00", "NA Adenine and cytosine"}, {"OG311", "CG3C51", "CG3C53", "OG3C51", "0.2000", "3", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C53", "OG3C51", "0.6000", "4", "180.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C53", "OG3C51", "0.3000", "5", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C53", "OG3C51", "0.5000", "6", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C53", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG3C51", "CG3C53", "NG2R61", "0.1950", "3", "0.00", "NA nadp/nadph"}, {"HGA1", "CG3C51", "CG3C53", "OG3C51", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG3C51", "CG3C53", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG311", "CG3C51", "CG3RC1", "CG311", "0.1580", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG311", "CG3C51", "CG3RC1", "CG321", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG311", "CG3C51", "CG3RC1", "CG331", "0.1580", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG311", "CG3C51", "CG3RC1", "CG3RC1", "0.1580", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG3C51", "CG3RC1", "CG3C31", "2.2000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3C51", "CG3RC1", "CG3C31", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3C51", "CG3RC1", "CG3C31", "0.5500", "6", "180.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3C51", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG331", "CG3C51", "CG3RC1", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG3C51", "CG3RC1", "CG331", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG3C51", "CG3RC1", "CG3RC1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG3C51", "CG3RC1", "CG3C31", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C51", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG311", "0.0500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG3C52", "CG3C51", "CG3RC1", "CG321", "2.2000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG321", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG321", "0.5500", "6", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG331", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG3C52", "CG3C51", "CG3RC1", "CG3C31", "2.2000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG3C31", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG3C31", "0.5500", "6", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG3C52", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; xxwy"}, {"CG3C52", "CG3C51", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R51", "CG3C51", "CG3RC1", "CG3C31", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R51", "CG3C51", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R51", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R61", "CG3C51", "CG3RC1", "CG3C31", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R61", "CG3C51", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R61", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3RC1", "CG3C31", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3RC1", "CG3C31", "0.8000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3RC1", "CG3C31", "0.2000", "4", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3RC1", "CG3RC1", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3RC1", "CG3RC1", "0.9000", "6", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG321", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG321", "0.8000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG321", "0.2000", "4", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG3C31", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG3C31", "0.8000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG3C31", "0.2000", "4", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG3C52", "0.4500", "2", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from CARBOCY; xxwy"}, {"OG311", "CG3C51", "CG3RC1", "CG3RC1", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from CARBOCY; xxwy"}, {"HGA1", "CG3C51", "CG3RC1", "CG311", "0.0500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"HGA1", "CG3C51", "CG3RC1", "CG321", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA1", "CG3C51", "CG3RC1", "CG331", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA1", "CG3C51", "CG3RC1", "CG3C31", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA1", "CG3C51", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from CARBOCY; xxwy"}, {"HGA1", "CG3C51", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA1", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C51", "NG2R51", "CG2R51", "0.2000", "4", "0.00", "NA, glycosyl linkage"}, {"CG3C51", "CG3C51", "NG2R51", "CG2R53", "0.0000", "3", "180.00", "NA, glycosyl linkage"}, {"CG3C51", "CG3C51", "NG2R51", "CG2RC0", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3C52", "CG3C51", "NG2R51", "CG2R51", "0.2000", "4", "0.00", "NA, glycosyl linkage"}, {"CG3C52", "CG3C51", "NG2R51", "CG2R53", "0.0000", "3", "180.00", "NA, glycosyl linkage"}, {"CG3C52", "CG3C51", "NG2R51", "CG2RC0", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3RC1", "CG3C51", "NG2R51", "CG2R53", "0.5000", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "NG2R51", "CG2RC0", "1.1000", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"OG3C51", "CG3C51", "NG2R51", "CG2R51", "0.6000", "1", "180.00", "NA, glycosyl linkage 0.5 2 -70 removed by kevo"}, {"OG3C51", "CG3C51", "NG2R51", "CG2R51", "0.2000", "3", "0.00", "NA, glycosyl linkage 0.5 2 -70 removed by kevo"}, {"OG3C51", "CG3C51", "NG2R51", "CG2R53", "1.1000", "1", "0.00", "NA, glycosyl linkage"}, {"OG3C51", "CG3C51", "NG2R51", "CG2RC0", "1.1000", "1", "180.00", "NA, glycosyl linkage"}, {"OG3C51", "CG3C51", "NG2R51", "CG2RC0", "0.2000", "3", "0.00", "NA, glycosyl linkage"}, {"HGA1", "CG3C51", "NG2R51", "CG2R51", "0.2500", "2", "180.00", "NA, glycosyl linkage 0.25 2 180 to compensate for removal of OG3C51 CG3C51 NG2R51 CG2R51 0.5 2 -70"}, {"HGA1", "CG3C51", "NG2R51", "CG2R53", "0.2500", "2", "180.00", "NA, glycosyl linkage 0.25 2 180 to compensate for removal of OG3C51 CG3C51 NG2R51 CG2R51 0.5 2 -70"}, {"HGA1", "CG3C51", "NG2R51", "CG2R53", "0.1950", "3", "0.00", "NA, glycosyl linkage"}, {"HGA1", "CG3C51", "NG2R51", "CG2RC0", "0.2500", "2", "180.00", "NA, glycosyl linkage 0.25 2 180 to compensate for removal of OG3C51 CG3C51 NG2R51 CG2R51 0.5 2 -70"}, {"CG3C51", "CG3C51", "NG2R61", "CG2R62", "0.0000", "3", "180.00", "NA, glycosyl linkage"}, {"CG3C51", "CG3C51", "NG2R61", "CG2R63", "1.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3C52", "CG3C51", "NG2R61", "CG2R62", "0.0000", "3", "180.00", "NA, glycosyl linkage"}, {"CG3C52", "CG3C51", "NG2R61", "CG2R63", "1.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3RC1", "CG3C51", "NG2R61", "CG2R62", "0.4000", "4", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "NG2R61", "CG2R63", "1.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG3C51", "CG3C51", "NG2R61", "CG2R62", "1.0000", "1", "0.00", "NA, glycosyl linkage"}, {"OG3C51", "CG3C51", "NG2R61", "CG2R63", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"HGA1", "CG3C51", "NG2R61", "CG2R62", "0.1950", "3", "0.00", "NA, glycosyl linkage"}, {"HGA1", "CG3C51", "NG2R61", "CG2R63", "0.1950", "3", "0.00", "NA, glycosyl linkage"}, {"CG2O1", "CG3C51", "NG2S0", "CG2O1", "0.8000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C51", "NG2S0", "CG3C52", "0.1000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "NG2S0", "CG2O1", "0.8000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "NG2S0", "CG3C52", "0.1000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C51", "NG2S0", "CG2O1", "0.8000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C51", "NG2S0", "CG3C52", "0.1000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA1", "CG3C51", "NG2S0", "CG2O1", "0.8000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA1", "CG3C51", "NG2S0", "CG3C52", "0.1000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG3C51", "NG2S3", "PG1", "1.5000", "1", "180.00", "Questionable THNP parameters ignored"}, {"CG3C51", "CG3C51", "NG2S3", "PG1", "0.6500", "2", "180.00", "Questionable THNP parameters ignored"}, {"CG3C51", "CG3C51", "NG2S3", "PG1", "1.0000", "3", "0.00", "Questionable THNP parameters ignored"}, {"CG3C51", "CG3C51", "NG2S3", "HGP1", "0.3000", "1", "0.00", "NABAKB TPHC phosphoramidates"}, {"CG3C52", "CG3C51", "NG2S3", "PG1", "1.5000", "1", "180.00", "Questionable TPHC parameters ignored"}, {"CG3C52", "CG3C51", "NG2S3", "PG1", "0.6500", "2", "180.00", "Questionable TPHC parameters ignored"}, {"CG3C52", "CG3C51", "NG2S3", "PG1", "1.0000", "3", "0.00", "Questionable TPHC parameters ignored"}, {"CG3C52", "CG3C51", "NG2S3", "HGP1", "0.3000", "1", "0.00", "NABAKB TPHC phosphoramidates"}, {"HGA1", "CG3C51", "NG2S3", "PG1", "0.1500", "3", "0.00", "NABAKB TPHC phosphoramidates"}, {"HGA1", "CG3C51", "NG2S3", "HGP1", "0.0100", "3", "0.00", "NABAKB TPHC phosphoramidates"}, {"CG3C51", "CG3C51", "NG301", "CG2D1O", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"CG3C51", "CG3C51", "NG301", "CG2D2O", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"OG3C51", "CG3C51", "NG301", "CG2D1O", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to for NADPH from par_all27_na.prm"}, {"OG3C51", "CG3C51", "NG301", "CG2D2O", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to for NADPH from par_all27_na.prm"}, {"HGA1", "CG3C51", "NG301", "CG2D1O", "0.1950", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"HGA1", "CG3C51", "NG301", "CG2D2O", "0.1950", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"CG3C51", "CG3C51", "NG321", "HGPAM2", "0.3000", "3", "180.00", "amines"}, {"CG3C52", "CG3C51", "NG321", "HGPAM2", "0.3000", "3", "180.00", "amines"}, {"HGA1", "CG3C51", "NG321", "HGPAM2", "0.0100", "3", "0.00", "amines"}, {"CG3C52", "CG3C51", "OG301", "CG331", "0.1000", "1", "180.00", "THF2, THF-2'OMe c-C2'-OM-cm, from Nucl. Acids, ed"}, {"CG3C52", "CG3C51", "OG301", "CG331", "1.6500", "2", "180.00", "THF2, THF-2'OMe c-C2'-OM-cm, from Nucl. Acids, ed"}, {"CG3C52", "CG3C51", "OG301", "CG331", "0.4500", "3", "0.00", "THF2, THF-2'OMe c-C2'-OM-cm, from Nucl. Acids, ed"}, {"HGA1", "CG3C51", "OG301", "CG331", "0.6000", "1", "0.00", "THF2, THF-2'OMe h-C2'-OM-cm, from Nucl. Acids, ed"}, {"HGA1", "CG3C51", "OG301", "CG331", "1.8000", "2", "180.00", "THF2, THF-2'OMe h-C2'-OM-cm, from Nucl. Acids, ed"}, {"HGA1", "CG3C51", "OG301", "CG331", "0.4800", "3", "0.00", "THF2, THF-2'OMe h-C2'-OM-cm, from Nucl. Acids, ed"}, {"CG3C51", "CG3C51", "OG303", "PG1", "2.5000", "1", "180.00", "reverted to NA, sugar by kevo"}, {"CG3C51", "CG3C51", "OG303", "PG2", "2.5000", "1", "180.00", "reverted to NA, sugar by kevo"}, {"CG3C52", "CG3C51", "OG303", "PG1", "2.5000", "1", "180.00", "NA, sugar ! verified by kevo"}, {"CG3C52", "CG3C51", "OG303", "PG2", "2.5000", "1", "180.00", "NA, sugar ! verified by kevo"}, {"CG3RC1", "CG3C51", "OG303", "PG1", "2.4000", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "OG303", "PG1", "0.4000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "OG303", "PG1", "1.5000", "3", "180.00", "CARBOCY carbocyclic sugars ! phase adjusted for CGenFF by kevo"}, {"HGA1", "CG3C51", "OG303", "PG1", "0.0000", "3", "0.00", "NA, sugar ! verified by kevo"}, {"HGA1", "CG3C51", "OG303", "PG2", "0.0000", "3", "0.00", "NA, sugar ! verified by kevo"}, {"CG3C51", "CG3C51", "OG311", "HGP1", "0.2900", "1", "0.00", "Team sugar, CC3151 CC3152 OC311 HCP1"}, {"CG3C51", "CG3C51", "OG311", "HGP1", "0.6200", "2", "0.00", "Team sugar, CC3151 CC3152 OC311 HCP1"}, {"CG3C51", "CG3C51", "OG311", "HGP1", "0.0500", "3", "0.00", "Team sugar, CC3151 CC3152 OC311 HCP1"}, {"CG3C52", "CG3C51", "OG311", "HGP1", "0.2900", "1", "0.00", "Team sugar, CC3251 CC3152 OC311 HCP1"}, {"CG3C52", "CG3C51", "OG311", "HGP1", "0.6200", "2", "0.00", "Team sugar, CC3251 CC3152 OC311 HCP1"}, {"CG3C52", "CG3C51", "OG311", "HGP1", "0.0500", "3", "0.00", "Team sugar, CC3251 CC3152 OC311 HCP1"}, {"CG3C53", "CG3C51", "OG311", "HGP1", "0.2900", "1", "0.00", "Team sugar, CC3151 CC3152 OC311 HCP1"}, {"CG3C53", "CG3C51", "OG311", "HGP1", "0.6200", "2", "0.00", "Team sugar, CC3151 CC3152 OC311 HCP1"}, {"CG3C53", "CG3C51", "OG311", "HGP1", "0.0500", "3", "0.00", "Team sugar, CC3151 CC3152 OC311 HCP1"}, {"CG3RC1", "CG3C51", "OG311", "HGP1", "1.5000", "1", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "OG311", "HGP1", "0.3000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "OG311", "HGP1", "0.3200", "3", "0.00", "CARBOCY carbocyclic sugars; Kenno: empirically corrected for HGA1 CG3C51 OG311 HGP1 from Team sugar ==> re-evaluate."}, {"HGA1", "CG3C51", "OG311", "HGP1", "0.1800", "3", "0.00", "Team sugar, HCP1 OC311 CC3151 HCA1"}, {"CG321", "CG3C51", "OG3C51", "CG3C51", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG321", "CG3C51", "OG3C51", "CG3C52", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG321", "CG3C51", "OG3C51", "CG3C53", "0.8000", "3", "0.00", "NA, sugar"}, {"CG331", "CG3C51", "OG3C51", "CG3C51", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG331", "CG3C51", "OG3C51", "CG3C52", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C51", "OG3C51", "CG3C51", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C51", "OG3C51", "CG3C52", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C51", "OG3C51", "CG3C53", "0.0000", "6", "0.00", "NA, sugar"}, {"CG3C52", "CG3C51", "OG3C51", "CG3C51", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C52", "CG3C51", "OG3C51", "CG3C52", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"NG2R51", "CG3C51", "OG3C51", "CG3C51", "0.0000", "3", "0.00", "NA, sugar"}, {"NG2R51", "CG3C51", "OG3C51", "CG3C52", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R61", "CG3C51", "OG3C51", "CG3C51", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R61", "CG3C51", "OG3C51", "CG3C52", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG301", "CG3C51", "OG3C51", "CG3C51", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"HGA1", "CG3C51", "OG3C51", "CG3C51", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"HGA1", "CG3C51", "OG3C51", "CG3C52", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"HGA1", "CG3C51", "OG3C51", "CG3C53", "0.1950", "3", "0.00", "NA, sugar"}, {"CG2R51", "CG3C52", "CG3C52", "CG3C52", "3.7000", "3", "180.00", "CYPE, cyclopentene, abar and rima"}, {"CG2R51", "CG3C52", "CG3C52", "CG3C52", "2.2500", "4", "0.00", "CYPE, cyclopentene, abar and rima"}, {"CG2R51", "CG3C52", "CG3C52", "CG3C52", "0.2300", "6", "180.00", "CYPE, cyclopentene, abar and rima"}, {"CG2R51", "CG3C52", "CG3C52", "NG3C51", "1.7000", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG3C52", "CG3C52", "OG3C51", "0.2500", "3", "180.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG2R51", "CG3C52", "CG3C52", "HGA2", "0.1400", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"CG2R52", "CG3C52", "CG3C52", "NG3C51", "0.0000", "3", "0.00", "0 2PRZ, 2-pyrazoline, kevo"}, {"CG2R52", "CG3C52", "CG3C52", "HGA2", "1.0000", "3", "0.00", "2PRZ, 2-pyrazoline, kevo"}, {"CG2R53", "CG3C52", "CG3C52", "CG3C52", "0.3400", "3", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"CG2R53", "CG3C52", "CG3C52", "HGA2", "0.0000", "3", "0.00", "2PDO, 2-pyrrolidinone, kevo"}, {"CG2RC0", "CG3C52", "CG3C52", "NG3C51", "2.4800", "3", "0.00", "INDI, indoline, kevo"}, {"CG2RC0", "CG3C52", "CG3C52", "HGA2", "0.0000", "3", "0.00", "INDI, indoline, kevo"}, {"CG3C51", "CG3C52", "CG3C52", "CG3C51", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C51", "CG3C52", "CG3C52", "CG3C52", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C51", "CG3C52", "CG3C52", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C52", "CG3C52", "NG3C51", "0.6900", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG3C51", "CG3C52", "CG3C52", "OG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C52", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C52", "CG3C52", "CG3C52", "CG3C52", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C52", "CG3C52", "CG3C52", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3C52", "NG2R53", "2.1300", "3", "0.00", "2PDO, 2-pyrrolidinone, kevo"}, {"CG3C52", "CG3C52", "CG3C52", "NG2S0", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3C52", "NG3C51", "0.6900", "3", "0.00", "PRLD, pyrrolidine fit_dihedral run 31, kevo"}, {"CG3C52", "CG3C52", "CG3C52", "OG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C52", "CG3C52", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C53", "CG3C52", "CG3C52", "CG3C54", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG3C52", "CG3C52", "HGA2", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C54", "CG3C52", "CG3C52", "CG3C54", "0.3700", "3", "180.00", "0.8 3 180 ! 0.15 3 0 PRLP, pyrrolidine.H+, kevo"}, {"CG3C54", "CG3C52", "CG3C52", "CG3C54", "0.0300", "6", "180.00", "0.31 6 0 ! 0.10 6 0 PRLP, pyrrolidine.H+, kevo"}, {"CG3C54", "CG3C52", "CG3C52", "NG3C51", "0.0400", "3", "0.00", "PRZP, Pyrazolidine.H+, fit_dihedral run 14, kevo"}, {"CG3C54", "CG3C52", "CG3C52", "HGA2", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3RC1", "CG3C52", "CG3C52", "CG3RC1", "0.2100", "3", "180.00", "NORB, Norbornane, kevo"}, {"CG3RC1", "CG3C52", "CG3C52", "OG3C51", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from THF; xxwy"}, {"CG3RC1", "CG3C52", "CG3C52", "HGA2", "0.1950", "3", "0.00", "LIPID alkanes"}, {"NG2R50", "CG3C52", "CG3C52", "NG3C51", "1.0000", "3", "0.00", "0 2IMI, 2-imidazoline ! 1a,1,NCCN+, kevo"}, {"NG2R50", "CG3C52", "CG3C52", "HGA2", "0.3000", "3", "0.00", "2IMI, 2-imidazoline, kevo"}, {"NG2R53", "CG3C52", "CG3C52", "HGA2", "0.0000", "3", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"NG2S0", "CG3C52", "CG3C52", "HGA2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG3C51", "CG3C52", "CG3C52", "HGA2", "0.0000", "3", "0.00", "2PRL, 2-pyrroline; 2IMI, 2-imidazoline, kevo"}, {"OG3C51", "CG3C52", "CG3C52", "OG3C51", "0.2600", "3", "0.0", "DIOL, 1,3-Dioxolane fit_dihedral, erh"}, {"OG3C51", "CG3C52", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf viv"}, {"HGA2", "CG3C52", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C52", "CG3C52", "CG3C53", "CG2O1", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3C53", "CG2O3", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3C53", "NG3P2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3C53", "HGA1", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "CG3C53", "CG2O1", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "CG3C53", "CG2O3", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "CG3C53", "NG3P2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "CG3C53", "HGA1", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2R51", "CG3C52", "CG3C54", "NG3P2", "0.6000", "3", "180.00", "0.5 0.4 2PRP, 2-pyrroline.H+, kevo"}, {"CG2R51", "CG3C52", "CG3C54", "HGA2", "0.1400", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"CG3C52", "CG3C52", "CG3C54", "NG3P2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3C54", "HGA2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG3C51", "CG3C52", "CG3C54", "NG3P2", "0.4900", "3", "0.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"NG3C51", "CG3C52", "CG3C54", "HGA2", "0.3700", "3", "180.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"HGA2", "CG3C52", "CG3C54", "NG3P2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "CG3C54", "HGA2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG3C52", "CG3RC1", "CG3C31", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C52", "CG3RC1", "CG3RC1", "1.7500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C52", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "CG311", "0.1000", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG3C52", "CG3C52", "CG3RC1", "CG311", "0.5000", "4", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG3C52", "CG3C52", "CG3RC1", "CG321", "0.2000", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG3C52", "CG3C52", "CG3RC1", "CG3C31", "2.2000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "CG3C31", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "CG3C31", "0.5500", "6", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "CG3C51", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from NORB; xxwy"}, {"CG3C52", "CG3C52", "CG3RC1", "CG3C52", "0.0000", "3", "0.00", "NORB, Norbornane, kevo"}, {"CG3C52", "CG3C52", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "NG2R51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "NG2R61", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C52", "CG3RC1", "CG3C52", "0.0000", "3", "0.00", "NORB, Norbornane, kevo"}, {"CG3RC1", "CG3C52", "CG3RC1", "HGA1", "0.0000", "3", "0.00", "NORB, Norbornane, kevo"}, {"HGA2", "CG3C52", "CG3RC1", "CG311", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"HGA2", "CG3C52", "CG3RC1", "CG321", "0.1950", "1", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA2", "CG3C52", "CG3RC1", "CG3C31", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C52", "CG3RC1", "CG3C51", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from NORB; xxwy"}, {"HGA2", "CG3C52", "CG3RC1", "CG3C52", "0.0000", "3", "0.00", "NORB, Norbornane, kevo"}, {"HGA2", "CG3C52", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C52", "CG3RC1", "NG2R51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C52", "CG3RC1", "NG2R61", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C52", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG2R51", "CG3C52", "NG2R50", "CG2R52", "2.0000", "2", "180.00", "2HPR, 2H-pyrrole !???, kevo"}, {"CG3C52", "CG3C52", "NG2R50", "CG2R53", "1.9000", "3", "180.00", "2.0 2IMI, 2-imidazoline -1a, kevo"}, {"HGA2", "CG3C52", "NG2R50", "CG2R52", "0.0000", "3", "0.00", "2HPR, 2H-pyrrole !x, kevo"}, {"HGA2", "CG3C52", "NG2R50", "CG2R53", "0.6000", "3", "0.00", "2IMI, 2-imidazoline, kevo"}, {"CG3C52", "CG3C52", "NG2R53", "CG2R53", "2.3100", "3", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"CG3C52", "CG3C52", "NG2R53", "HGP1", "0.7600", "3", "0.00", "2PDO, 2-pyrrolidinone, kevo"}, {"HGA2", "CG3C52", "NG2R53", "CG2R53", "0.0000", "3", "0.00", "2PDO, 2-pyrrolidinone, kevo"}, {"HGA2", "CG3C52", "NG2R53", "HGP1", "0.0000", "3", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"CG3C52", "CG3C52", "NG2S0", "CG2O1", "0.0000", "3", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "NG2S0", "CG3C51", "0.1000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "NG2S0", "CG2O1", "0.0000", "3", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "NG2S0", "CG3C51", "0.1000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2R51", "CG3C52", "NG3C51", "CG3C52", "2.0500", "3", "180.00", "2.05 2.02 2.05 1.4 1.38 3PRL, 3-pyrroline, kevo"}, {"CG2R51", "CG3C52", "NG3C51", "HGP1", "1.7700", "1", "180.00", "1.77 1.60 1.0 *new* 3PRL, 3-pyrroline, kevo"}, {"CG2R51", "CG3C52", "NG3C51", "HGP1", "0.7000", "3", "0.00", "0.70 0.75 0.5 1.10 3PRL, 3-pyrroline, kevo"}, {"CG3C51", "CG3C52", "NG3C51", "CG3C52", "0.1800", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG3C51", "CG3C52", "NG3C51", "HGP1", "0.5500", "1", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG3C51", "CG3C52", "NG3C51", "HGP1", "0.8500", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG3C52", "CG3C52", "NG3C51", "CG2R51", "0.0500", "3", "180.00", "2PRL, 2-pyrroline, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "CG2R53", "1.9000", "3", "180.00", "1.6 ! 2.5 1.5 2IMI, 2-imidazoline -1a, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "CG2RC0", "1.4500", "3", "180.00", "INDI, indoline, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "CG3C52", "0.1800", "3", "0.00", "PRLD, pyrrolidine fit_dihedral run 31, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "NG2R50", "2.8000", "3", "180.00", "2.9 2PRZ, 2-pyrazoline, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "NG3P2", "0.9000", "3", "0.00", "PRZP, Pyrazolidine.H+, fit_dihedral run 14, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "HGP1", "0.5500", "1", "0.00", "PRLD, pyrrolidine fit_dihedral run 31, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "HGP1", "0.8500", "3", "0.00", "PRLD, pyrrolidine fit_dihedral run 31, kevo"}, {"CG3C54", "CG3C52", "NG3C51", "CG3C54", "1.5800", "3", "180.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"CG3C54", "CG3C52", "NG3C51", "HGP1", "1.6500", "1", "0.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"CG3C54", "CG3C52", "NG3C51", "HGP1", "0.7400", "3", "0.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"HGA2", "CG3C52", "NG3C51", "CG2R51", "0.0000", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"HGA2", "CG3C52", "NG3C51", "CG2R53", "0.1000", "3", "0.00", "2IMI, 2-imidazoline, kevo"}, {"HGA2", "CG3C52", "NG3C51", "CG2RC0", "0.0000", "3", "0.00", "INDI, indoline, kevo"}, {"HGA2", "CG3C52", "NG3C51", "CG3C52", "0.0000", "3", "0.00", "3PRL, 3-pyrroline, kevo"}, {"HGA2", "CG3C52", "NG3C51", "CG3C54", "0.4800", "3", "0.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"HGA2", "CG3C52", "NG3C51", "NG2R50", "0.3000", "3", "0.00", "2PRZ, 2-pyrazoline, kevo"}, {"HGA2", "CG3C52", "NG3C51", "NG3P2", "0.0000", "3", "0.00", "PRZP, Pyrazolidine.H+, kevo"}, {"HGA2", "CG3C52", "NG3C51", "HGP1", "0.0000", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG3C52", "OG3C51", "CG2R53", "0.3100", "1", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG3C52", "OG3C51", "CG2R53", "0.2800", "6", "0.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG3C51", "CG3C52", "OG3C51", "CG3C51", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C52", "OG3C51", "CG3C52", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C52", "OG3C51", "CG3RC1", "0.5000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from THF; xxwy"}, {"CG3C52", "CG3C52", "OG3C51", "CG2R51", "0.7300", "3", "0.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG3C52", "CG3C52", "OG3C51", "CG2R53", "2.2200", "2", "0.00", "GBL, Gamma-butyrolactone, ctsai"}, {"CG3C52", "CG3C52", "OG3C51", "CG3C51", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C52", "CG3C52", "OG3C51", "CG3C52", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C52", "CG3C52", "OG3C51", "CG3RC1", "0.5000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from THF; xxwy"}, {"OG3C51", "CG3C52", "OG3C51", "CG2RC0", "0.5000", "3", "0.00", "ZDOL, 1,3-benzodioxole; from THF, tetrahydofuran; kevo"}, {"OG3C51", "CG3C52", "OG3C51", "CG3C52", "1.6500", "3", "180.00", "DIOL, 1,3-Dioxolane fit_dihedral, erh"}, {"HGA2", "CG3C52", "OG3C51", "CG2R51", "0.0000", "3", "0.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"HGA2", "CG3C52", "OG3C51", "CG2R53", "0.0000", "3", "0.00", "GBL, from HGA2 CG3C52 OG3C51 CG2R51, ctsai"}, {"HGA2", "CG3C52", "OG3C51", "CG2RC0", "0.3000", "3", "0.00", "ZDOL, 1,3-benzodioxole; from THF, tetrahydofuran; kevo"}, {"HGA2", "CG3C52", "OG3C51", "CG3C51", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"HGA2", "CG3C52", "OG3C51", "CG3C52", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"HGA2", "CG3C52", "OG3C51", "CG3RC1", "0.3000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from THF; xxwy"}, {"CG3C51", "CG3C53", "NG2R61", "CG2R62", "0.0000", "3", "180.00", "NA, glycosyl linkage"}, {"OG3C51", "CG3C53", "NG2R61", "CG2R62", "1.0000", "1", "0.00", "NA, glycosyl linkage"}, {"HGA1", "CG3C53", "NG2R61", "CG2R62", "0.1950", "3", "0.00", "NA, glycosyl linkage"}, {"CG2O1", "CG3C53", "NG3P2", "CG3C54", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C53", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C53", "NG3P2", "CG3C54", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C53", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C53", "NG3P2", "CG3C54", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C53", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA1", "CG3C53", "NG3P2", "CG3C54", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA1", "CG3C53", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG3C53", "OG3C51", "CG3C51", "0.0000", "6", "0.00", "NA, sugar"}, {"NG2R61", "CG3C53", "OG3C51", "CG3C51", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"HGA1", "CG3C53", "OG3C51", "CG3C51", "0.1950", "3", "0.00", "NA, sugar"}, {"NG2R52", "CG3C54", "CG3C54", "NG2R52", "0.0700", "3", "0.00", "0 2IMP, 2-imidazoline.H+, kevo"}, {"NG2R52", "CG3C54", "CG3C54", "HGA2", "0.3000", "3", "0.00", "2IMP, 2-imidazoline.H+, kevo"}, {"HGA2", "CG3C54", "CG3C54", "HGA2", "0.1400", "3", "0.00", "2IMP, 2-imidazoline.H+ ! RE-OPTIMIZE !!!, kevo"}, {"CG2R51", "CG3C54", "NG2R52", "CG2R52", "2.8000", "2", "180.00", "2.7 2.3 2HPP, 2H-pyrrole.H+ 1a, kevo"}, {"CG2R51", "CG3C54", "NG2R52", "HGP2", "2.7000", "2", "180.00", "2HPP, 2H-pyrrole.H+, kevo"}, {"CG3C54", "CG3C54", "NG2R52", "CG2R53", "0.2500", "3", "180.00", "0.21 2IMP, 2-imidazoline.H+, kevo"}, {"CG3C54", "CG3C54", "NG2R52", "HGP2", "0.6000", "3", "0.00", "2IMP, 2-imidazoline.H+, kevo"}, {"HGA2", "CG3C54", "NG2R52", "CG2R52", "0.0000", "3", "180.00", "2HPP, 2H-pyrrole.H+, kevo"}, {"HGA2", "CG3C54", "NG2R52", "CG2R53", "0.0000", "3", "180.00", "2IMP, 2-imidazoline.H+, kevo"}, {"HGA2", "CG3C54", "NG2R52", "HGP2", "0.0000", "3", "0.00", "2IMP, 2-imidazoline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"NG3P2", "CG3C54", "NG3C51", "CG3C52", "1.7700", "3", "0.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"NG3P2", "CG3C54", "NG3C51", "HGP1", "1.8400", "1", "180.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"NG3P2", "CG3C54", "NG3C51", "HGP1", "0.9600", "3", "180.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"HGA2", "CG3C54", "NG3C51", "CG3C52", "0.4800", "3", "0.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"HGA2", "CG3C54", "NG3C51", "HGP1", "0.0000", "3", "0.00", "IMDP, imidazolidine, erh and kevo"}, {"CG2R51", "CG3C54", "NG3P2", "CG3C54", "1.8800", "3", "180.00", "1.9 1.5 3PRP, 3-pyrroline.H+, kevo"}, {"CG2R51", "CG3C54", "NG3P2", "HGP2", "0.3000", "3", "0.00", "3PRP, 3-pyrroline.H+, kevo"}, {"CG3C52", "CG3C54", "NG3P2", "CG2R51", "0.7000", "3", "180.00", "0.7 2PRP, 2-pyrroline.H+, kevo"}, {"CG3C52", "CG3C54", "NG3P2", "CG3C53", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C54", "NG3P2", "CG3C54", "0.1000", "3", "0.00", "PRLP, pyrrolidine.H+, kevo"}, {"CG3C52", "CG3C54", "NG3P2", "NG3C51", "0.0400", "3", "0.00", "PRZP, Pyrazolidine.H+, fit_dihedral run 14, kevo"}, {"CG3C52", "CG3C54", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG3C51", "CG3C54", "NG3P2", "CG3C54", "2.7400", "3", "180.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"NG3C51", "CG3C54", "NG3P2", "HGP2", "0.1600", "3", "180.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"HGA2", "CG3C54", "NG3P2", "CG2R51", "0.2000", "3", "0.00", "2PRP, 2-pyrroline.H+, kevo"}, {"HGA2", "CG3C54", "NG3P2", "CG3C53", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C54", "NG3P2", "CG3C54", "0.1000", "3", "0.00", "PRLP, pyrrolidine.H+, kevo"}, {"HGA2", "CG3C54", "NG3P2", "NG3C51", "0.1000", "3", "0.00", "PRZP, Pyrazolidine.H+, kevo"}, {"HGA2", "CG3C54", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG3RC1", "CG3RC1", "CG311", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG311", "CG3RC1", "CG3RC1", "CG321", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG311", "CG3RC1", "CG3RC1", "CG331", "0.1580", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG311", "CG3RC1", "CG3RC1", "CG3C51", "0.1500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG311", "CG3RC1", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08 corrected by kevo"}, {"CG311", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG3RC1", "CG321", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG3RC1", "CG331", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG3RC1", "CG3RC1", "CG3C31", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG3RC1", "CG3C51", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG3RC1", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG331", "CG3RC1", "CG3RC1", "CG3C52", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG3RC1", "CG3RC1", "HGA1", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG3C31", "CG3RC1", "CG3RC1", "CG3C51", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "CG3RC1", "NG2R51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "CG3RC1", "NG2R61", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3RC1", "CG3RC1", "CG3C52", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3RC1", "CG3RC1", "OG3C51", "1.2000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; xxwy"}, {"CG3C51", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "CG3RC1", "NG2R51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "CG3RC1", "NG2R61", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "CG3RC1", "OG3C51", "1.2000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; xxwy"}, {"CG3C52", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R51", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R53", "CG3RC1", "CG3RC1", "NG2R53", "0.1500", "3", "0.00", "CBHH, glycoluril, (CG3C52 CG3RC1 CG3RC1 NG2R51), jing"}, {"NG2R53", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CBHH, glycoluril, (NG2R51 CG3RC1 CG3RC1 HGA1), jing"}, {"NG2R61", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG3C51", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from CARBOCY; xxwy"}, {"HGA1", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "NG2R51", "CG2R53", "1.1000", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "NG2R51", "CG2RC0", "0.3000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "NG2R51", "CG2R53", "0.1000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "NG2R51", "CG2RC0", "0.3000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R51", "CG2R53", "1.1000", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R51", "CG2RC0", "1.1000", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R53", "CG2R53", "1.1000", "1", "180.00", "CBHH, glycoluril, (CG3RC1 CG3RC1 NG2R51 CG2R53), jing"}, {"CG3RC1", "CG3RC1", "NG2R53", "HGP1", "0.7600", "3", "0.00", "CBHH, glycoluril, (CG3C52 CG3C52 NG2R53 HGP1), jing"}, {"NG2R53", "CG3RC1", "NG2R53", "CG2R53", "2.3100", "3", "180.00", "CBHH, glycoluril, (CG3C52 CG3C52 NG2R53 CG2R53), jing"}, {"NG2R53", "CG3RC1", "NG2R53", "HGP1", "0.7600", "3", "0.00", "CBHH, glycoluril, (CG3C52 CG3C52 NG2R53 HGP1), jing"}, {"HGA1", "CG3RC1", "NG2R53", "CG2R53", "0.0000", "3", "0.00", "CBHH, glycoluril, (HGA2 CG3C52 NG2R53 CG2R53), jing"}, {"HGA1", "CG3RC1", "NG2R53", "HGP1", "0.0000", "3", "180.00", "CBHH, glycoluril, (HGA2 CG3C52 NG2R53 HGP1), jing"}, {"CG3C31", "CG3RC1", "NG2R61", "CG2R62", "0.0000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "NG2R61", "CG2R63", "0.3000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "NG2R61", "CG2R62", "0.0000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "NG2R61", "CG2R63", "0.3000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R61", "CG2R62", "0.0000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R61", "CG2R63", "0.2000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "OG3C51", "CG3C52", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; xxwy"}, {"OG3C51", "CG3RC1", "OG3C51", "CG3C52", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; xxwy"}, {"HGA1", "CG3RC1", "OG3C51", "CG3C52", "0.3000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from THF; xxwy"}, {"CG2D1", "NG2D1", "NG2S1", "CG2O1", "3.4000", "1", "180.00", "HDZ1, hydrazone model cmpd"}, {"CG2D1", "NG2D1", "NG2S1", "CG2O1", "1.3000", "2", "180.00", "HDZ1, hydrazone model cmpd"}, {"CG2D1", "NG2D1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "HDZ1, hydrazone model cmpd"}, {"CG2DC1", "NG2D1", "NG2S1", "CG2O1", "3.4000", "1", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC1", "NG2D1", "NG2S1", "CG2O1", "1.3000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC1", "NG2D1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC2", "NG2D1", "NG2S1", "CG2O1", "3.4000", "1", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC2", "NG2D1", "NG2S1", "CG2O1", "1.3000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC2", "NG2D1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2R51", "NG2R50", "NG2R50", "NG2R51", "14.0000", "2", "180.00", "TRZ3, triazole123"}, {"CG2R51", "NG2R50", "NG2R50", "OG2R50", "14.0000", "2", "180.00", "OXAD, oxadiazole123"}, {"CG2R52", "NG2R50", "NG2R51", "CG2R51", "12.0000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R52", "NG2R50", "NG2R51", "CG2RC0", "8.5000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG2R52", "NG2R50", "NG2R51", "NG2R50", "9.5000", "2", "180.00", "TRZ2, 2H-1,2,3-triazole, lf"}, {"CG2R52", "NG2R50", "NG2R51", "HGP1", "1.4000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R53", "NG2R50", "NG2R51", "CG2R53", "10.0000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"CG2R53", "NG2R50", "NG2R51", "HGP1", "2.3000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"NG2R50", "NG2R50", "NG2R51", "CG2R51", "8.5000", "2", "180.00", "TRZ3, triazole123"}, {"NG2R50", "NG2R50", "NG2R51", "CG321", "2.5000", "2", "180.00", "ETRZ, 1-Ethyl-1,2,3-triazole, from NG2R50 NG2R50 NG2R51 HGP1, kevo"}, {"NG2R50", "NG2R50", "NG2R51", "HGP1", "2.5000", "2", "180.00", "TRZ3, triazole123"}, {"CG2R52", "NG2R50", "NG3C51", "CG3C52", "0.5000", "2", "180.00", "9 2PRZ, 2-pyrazoline, kevo"}, {"CG2R52", "NG2R50", "NG3C51", "HGP1", "0.2500", "3", "0.00", "0.7 1.3 2PRZ, 2-pyrazoline, kevo"}, {"CG2R52", "NG2R50", "OG2R50", "CG2R51", "12.0000", "2", "180.00", "ISOX, isoxazole"}, {"CG2R53", "NG2R50", "OG2R50", "CG2R53", "9.0000", "2", "180.00", "OXD4, oxadiazole124, xxwy"}, {"NG2R50", "NG2R50", "OG2R50", "CG2R51", "8.5000", "2", "180.00", "OXAD, oxadiazole123"}, {"CG2R52", "NG2R50", "SG2R50", "CG2R51", "9.0000", "2", "180.00", "ISOT, isothiazole"}, {"CG2R51", "NG2R57", "NG2R57", "CG2R51", "0.3000", "2", "000.00", "11BPO, 1,1-bipyrrole, lf"}, {"CG2R61", "NG2R62", "NG2R62", "CG2R61", "1.2000", "2", "180.00", "PYRD, pyridazine"}, {"CG2R61", "NG2R62", "NG2R62", "CG2R64", "0.5000", "2", "180.00", "TRIB, triazine124"}, {"CG331", "NG2S3", "PG1", "OG2P1", "0.4000", "3", "0.00", "NABAKB phosphoramidates"}, {"CG331", "NG2S3", "PG1", "OG2P1", "0.5000", "4", "0.00", "NABAKB phosphoramidates"}, {"CG331", "NG2S3", "PG1", "OG303", "1.9000", "2", "0.00", "NABAKB phosphoramidates ! eliminated 0.8 2 120 for OG2P1 and compensated 1.5 -> 1.9 here"}, {"CG3C51", "NG2S3", "PG1", "OG2P1", "0.4000", "3", "0.00", "NABAKB phosphoramidates"}, {"CG3C51", "NG2S3", "PG1", "OG2P1", "0.5000", "4", "0.00", "NABAKB phosphoramidates"}, {"CG3C51", "NG2S3", "PG1", "OG303", "1.9000", "2", "0.00", "NABAKB phosphoramidates ! eliminated 0.8 2 120 for OG2P1 and compensated 1.5 -> 1.9 here"}, {"HGP1", "NG2S3", "PG1", "OG2P1", "0.0500", "3", "0.00", "NABAKB phosphoramidates"}, {"HGP1", "NG2S3", "PG1", "OG303", "0.0500", "3", "0.00", "NABAKB phosphoramidates"}, {"CG321", "NG2S3", "SG3O1", "OG2P1", "0.5520", "3", "0.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "NG2S3", "SG3O1", "OG2P1", "0.5370", "3", "0.00", "NMSM, N-methyl-sulfamate, my"}, {"HGP1", "NG2S3", "SG3O1", "OG2P1", "0.0500", "3", "0.00", "NMSM, N-methyl-sulfamate; from HGP1 NG2S3 PG1 OG2P1; my"}, {"CG2R61", "NG311", "SG3O2", "CG2R61", "1.2000", "1", "180.00", "PBSM, N-phenylbenzenesulfonamide, xxwy"}, {"CG2R61", "NG311", "SG3O2", "CG2R61", "1.4000", "2", "0.00", "PBSM, N-phenylbenzenesulfonamide, xxwy"}, {"CG2R61", "NG311", "SG3O2", "CG331", "2.2000", "2", "0.00", "PMSM, N-phenylmethanesulfonamide, xxwy"}, {"CG2R61", "NG311", "SG3O2", "CG331", "0.2000", "3", "0.00", "PMSM, N-phenylmethanesulfonamide, xxwy"}, {"CG2R61", "NG311", "SG3O2", "OG2P1", "0.2000", "3", "0.00", "PMSM, N-phenylmethanesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG321", "NG311", "SG3O2", "CG2R61", "1.5000", "2", "0.00", "OBTZ, sulfonamide heterocycle in drug HCTZ, xxwy"}, {"CG321", "NG311", "SG3O2", "CG2R61", "0.5000", "3", "0.00", "OBTZ, sulfonamide heterocycle in drug HCTZ, xxwy"}, {"CG321", "NG311", "SG3O2", "CG321", "2.0000", "2", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG321", "NG311", "SG3O2", "CG321", "0.3000", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG321", "NG311", "SG3O2", "CG331", "2.0000", "2", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"CG321", "NG311", "SG3O2", "CG331", "0.3000", "3", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"CG321", "NG311", "SG3O2", "NG311", "0.9020", "1", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG321", "NG311", "SG3O2", "NG311", "0.6350", "2", "0.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG321", "NG311", "SG3O2", "NG311", "1.4440", "3", "0.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG321", "NG311", "SG3O2", "NG311", "0.3320", "4", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG321", "NG311", "SG3O2", "OG2P1", "0.2000", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "NG311", "SG3O2", "CG2R61", "1.5000", "2", "0.00", "MBSM, N-methylbenzenesulfonamide, xxwy"}, {"CG331", "NG311", "SG3O2", "CG2R61", "0.5000", "3", "0.00", "MBSM, N-methylbenzenesulfonamide, xxwy"}, {"CG331", "NG311", "SG3O2", "CG331", "2.0000", "2", "0.00", "MMSM, N-methylmethanesulfonamide, xxwy"}, {"CG331", "NG311", "SG3O2", "CG331", "0.2000", "3", "0.00", "MMSM, N-methylmethanesulfonamide, xxwy"}, {"CG331", "NG311", "SG3O2", "NG311", "1.2560", "1", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG331", "NG311", "SG3O2", "NG311", "0.6240", "2", "0.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG331", "NG311", "SG3O2", "NG311", "1.8260", "3", "0.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG331", "NG311", "SG3O2", "NG311", "0.2140", "4", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG331", "NG311", "SG3O2", "NG311", "0.2630", "6", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG331", "NG311", "SG3O2", "OG2P1", "0.2000", "3", "0.00", "MMSM, N-methylmethanesulfonamide; MBSM, N-methylbenzenesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "CG2R61", "1.2000", "1", "180.00", "MBSM, N-methylbenzenesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "CG2R61", "1.1000", "2", "0.00", "MBSM, N-methylbenzenesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "CG2R61", "0.5000", "3", "0.00", "MBSM, N-methylbenzenesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "CG321", "1.3000", "1", "180.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"HGP1", "NG311", "SG3O2", "CG321", "1.2000", "2", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"HGP1", "NG311", "SG3O2", "CG321", "0.2000", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"HGP1", "NG311", "SG3O2", "CG331", "1.0000", "1", "180.00", "MMSM, N-methylmethanesulfonamide; PMSM, N-phenylmethanesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "CG331", "1.1000", "2", "0.00", "MMSM, N-methylmethanesulfonamide; PMSM, N-phenylmethanesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "CG331", "0.2000", "3", "0.00", "MMSM, N-methylmethanesulfonamide; PMSM, N-phenylmethanesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "NG311", "0.5750", "1", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"HGP1", "NG311", "SG3O2", "NG311", "1.0830", "2", "0.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"HGP1", "NG311", "SG3O2", "NG311", "0.9590", "3", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"HGP1", "NG311", "SG3O2", "NG311", "0.1990", "4", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"HGP1", "NG311", "SG3O2", "NG311", "0.2380", "6", "0.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"HGP1", "NG311", "SG3O2", "OG2P1", "0.2000", "3", "0.00", "MMSM, N-methylmethanesulfonamide and other sulfonamides, xxwy"}, {"HGP1", "NG321", "SG3O2", "CG2R61", "1.5000", "1", "180.00", "BSAM, benzenesulfonamide, xxwy"}, {"HGP1", "NG321", "SG3O2", "CG2R61", "1.2000", "2", "0.00", "BSAM, benzenesulfonamide, xxwy"}, {"HGP1", "NG321", "SG3O2", "CG2R61", "0.1000", "3", "0.00", "BSAM, benzenesulfonamide, xxwy"}, {"HGP1", "NG321", "SG3O2", "CG331", "0.9000", "1", "180.00", "MSAM, methanesulfonamide, xxwy"}, {"HGP1", "NG321", "SG3O2", "CG331", "1.6000", "2", "0.00", "MSAM, methanesulfonamide, xxwy"}, {"HGP1", "NG321", "SG3O2", "CG331", "0.1000", "3", "0.00", "MSAM, methanesulfonamide, xxwy"}, {"HGP1", "NG321", "SG3O2", "OG2P1", "0.2000", "3", "0.00", "MSAM, methanesulfonamide; BSAM, benzenesulfonamide; xxwy"}, {"HGP1", "NG321", "SG3O2", "OG303", "0.4000", "3", "0.00", "MSMT, methyl sulfamate, PSMT, phenyl sulfamate, xxwy"}, {"CG3C52", "NG3C51", "NG3P2", "CG3C54", "1.0200", "3", "0.00", "PRZP, Pyrazolidine.H+, fit_dihedral run 14, kevo"}, {"CG3C52", "NG3C51", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PRZP, Pyrazolidine.H+, kevo"}, {"HGP1", "NG3C51", "NG3P2", "CG3C54", "2.4500", "1", "0.00", "PRZP, Pyrazolidine.H+, fit_dihedral run 14, kevo"}, {"HGP1", "NG3C51", "NG3P2", "CG3C54", "0.0200", "3", "0.00", "PRZP, Pyrazolidine.H+, fit_dihedral run 14, kevo"}, {"HGP1", "NG3C51", "NG3P2", "HGP2", "0.0000", "3", "0.00", "PRZP, Pyrazolidine.H+, kevo"}, {"CG2R61", "NG3N1", "NG3N1", "HGP1", "1.6000", "2", "180.00", "PHHZ, phenylhydrazine, ed"}, {"HGP1", "NG3N1", "NG3N1", "HGP1", "1.1000", "1", "180.00", "HDZN, hydrazine, ed"}, {"HGP1", "NG3N1", "NG3N1", "HGP1", "4.5000", "2", "0.00", "HDZN, hydrazine, ed"}, {"HGP1", "NG3N1", "NG3N1", "HGP1", "0.0500", "3", "0.00", "HDZN, hydrazine, ed"}, {"CG334", "NG3P0", "OG311", "HGP1", "0.2770", "3", "0.00", "TMAOP, Hydroxy(trimethyl)Ammonium, xxwy"}, {"CG331", "OG303", "PG0", "OG2P1", "0.1000", "3", "0.00", "NA dmp !Reorganization:MP_0 RE-OPTIMIZE!"}, {"CG331", "OG303", "PG0", "OG311", "0.9500", "2", "0.00", "NA MP_1, adm jr. !Reorganization:MP_0 RE-OPTIMIZE!"}, {"CG331", "OG303", "PG0", "OG311", "0.5000", "3", "0.00", "NA MP_1, adm jr. !Reorganization:MP_0 RE-OPTIMIZE!"}, {"CG2R61", "OG303", "PG1", "OG2P1", "0.1000", "3", "0.00", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "OG303", "PG1", "OG311", "0.9500", "2", "0.00", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "OG303", "PG1", "OG311", "0.5000", "3", "0.00", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG321", "OG303", "PG1", "OG2P1", "0.1000", "3", "0.00", "NA dmp !Reorganization: PC and others"}, {"CG321", "OG303", "PG1", "OG303", "1.2000", "1", "180.00", "NA 10/97, DMP, adm jr. !Reorganization: PC and others"}, {"CG321", "OG303", "PG1", "OG303", "0.1000", "2", "180.00", "NA 10/97, DMP, adm jr. !Reorganization: PC and others"}, {"CG321", "OG303", "PG1", "OG303", "0.1000", "3", "180.00", "NA 10/97, DMP, adm jr. !Reorganization: PC and others"}, {"CG321", "OG303", "PG1", "OG304", "1.2000", "1", "180.00", "NA dmp !Reorganization:ADP"}, {"CG321", "OG303", "PG1", "OG304", "0.1000", "2", "180.00", "NA dmp !Reorganization:ADP"}, {"CG321", "OG303", "PG1", "OG304", "0.1000", "3", "180.00", "NA dmp !Reorganization:ADP"}, {"CG321", "OG303", "PG1", "OG311", "0.9500", "2", "0.00", "NA MP_1, adm jr."}, {"CG321", "OG303", "PG1", "OG311", "0.5000", "3", "0.00", "NA MP_1, adm jr."}, {"CG331", "OG303", "PG1", "NG2S3", "0.4000", "1", "0.00", "NABAKB phosphoramidates"}, {"CG331", "OG303", "PG1", "NG2S3", "0.2600", "2", "0.00", "NABAKB phosphoramidates ! changed 0.4 2 50 into 0.4cos(50)=0.26 2 0"}, {"CG331", "OG303", "PG1", "NG2S3", "0.3500", "3", "0.00", "NABAKB phosphoramidates"}, {"CG331", "OG303", "PG1", "OG2P1", "0.1000", "3", "0.00", "NA dmp !Reorganization:MP_1"}, {"CG331", "OG303", "PG1", "OG303", "1.2000", "1", "180.00", "NA dmp !Reorganization: PC and others"}, {"CG331", "OG303", "PG1", "OG303", "0.1000", "2", "180.00", "NA dmp !Reorganization: PC and others"}, {"CG331", "OG303", "PG1", "OG303", "0.1000", "3", "180.00", "NA dmp !Reorganization: PC and others"}, {"CG331", "OG303", "PG1", "OG304", "1.2000", "1", "180.00", "NA dmp !Reorganization:PPI1"}, {"CG331", "OG303", "PG1", "OG304", "0.1000", "2", "180.00", "NA dmp !Reorganization:PPI1"}, {"CG331", "OG303", "PG1", "OG304", "0.1000", "3", "180.00", "NA dmp !Reorganization:PPI1"}, {"CG331", "OG303", "PG1", "OG311", "0.9500", "2", "0.00", "NA MP_1, adm jr. !Reorganization:MP_1"}, {"CG331", "OG303", "PG1", "OG311", "0.5000", "3", "0.00", "NA MP_1, adm jr. !Reorganization:MP_1"}, {"CG3C51", "OG303", "PG1", "OG2P1", "0.1000", "3", "0.00", "BPNP and others dmp,eps, O1P-P-O3'-C3'"}, {"CG3C51", "OG303", "PG1", "OG303", "1.2000", "1", "180.00", "BPNP and others 10/97, DMP, adm jr."}, {"CG3C51", "OG303", "PG1", "OG303", "0.1000", "2", "180.00", "BPNP and others 10/97, DMP, adm jr."}, {"CG3C51", "OG303", "PG1", "OG303", "0.1000", "3", "180.00", "BPNP and others 10/97, DMP, adm jr."}, {"CG3C51", "OG303", "PG1", "OG311", "0.9500", "2", "0.00", "NA T3PH, adm jr."}, {"CG3C51", "OG303", "PG1", "OG311", "0.5000", "3", "0.00", "NA T3PH, adm jr."}, {"CG311", "OG303", "PG2", "OG2P1", "0.1000", "3", "0.00", "IP_2 NA dmp,eps, O1P-P-O3'-C3'"}, {"CG321", "OG303", "PG2", "OG2P1", "0.1000", "3", "0.00", "NA dmp !Reorganization: TH5P and others"}, {"CG331", "OG303", "PG2", "OG2P1", "0.1000", "3", "0.00", "NA dmp !Reorganization:MP_2"}, {"CG3C51", "OG303", "PG2", "OG2P1", "0.1000", "3", "0.00", "TH3P and others dmp,eps, O1P-P-O3'-C3'"}, {"CG321", "OG303", "SG3O1", "OG2P1", "0.0000", "3", "0.00", "LIPID methylsulfate"}, {"CG331", "OG303", "SG3O1", "OG2P1", "0.0000", "3", "0.00", "LIPID methylsulfate"}, {"CG2R61", "OG303", "SG3O2", "CG331", "1.6000", "1", "180.00", "PMST, phenyl methanesulfonate, xxwy"}, {"CG2R61", "OG303", "SG3O2", "CG331", "0.8000", "2", "0.00", "PMST, phenyl methanesulfonate, xxwy"}, {"CG2R61", "OG303", "SG3O2", "CG331", "0.1000", "3", "0.00", "PMST, phenyl methanesulfonate, xxwy"}, {"CG2R61", "OG303", "SG3O2", "NG321", "3.2000", "1", "180.00", "PSMT, phenyl sulfamate, xxwy"}, {"CG2R61", "OG303", "SG3O2", "NG321", "0.2000", "2", "0.00", "PSMT, phenyl sulfamate, xxwy"}, {"CG2R61", "OG303", "SG3O2", "NG321", "0.2000", "3", "0.00", "PSMT, phenyl sulfamate, xxwy"}, {"CG2R61", "OG303", "SG3O2", "OG2P1", "0.3000", "3", "0.00", "PMST, phenyl methanesulfonate, PSMT, phenyl sulfamate, xxwy"}, {"CG331", "OG303", "SG3O2", "CG331", "1.1000", "1", "180.00", "MMST, methyl methanesulfonate, xxwy"}, {"CG331", "OG303", "SG3O2", "CG331", "0.7000", "2", "0.00", "MMST, methyl methanesulfonate, xxwy"}, {"CG331", "OG303", "SG3O2", "CG331", "0.3000", "3", "0.00", "MMST, methyl methanesulfonate, xxwy"}, {"CG331", "OG303", "SG3O2", "NG321", "1.8000", "1", "180.00", "MSMT, methyl sulfamate, xxwy"}, {"CG331", "OG303", "SG3O2", "NG321", "0.5000", "2", "0.00", "MSMT, methyl sulfamate, xxwy"}, {"CG331", "OG303", "SG3O2", "NG321", "0.4000", "3", "0.00", "MSMT, methyl sulfamate, xxwy"}, {"CG331", "OG303", "SG3O2", "OG2P1", "0.3000", "3", "0.00", "MMST, methyl methanesulfonate, xxwy"}, {"PG1", "OG304", "PG1", "OG2P1", "0.1000", "2", "0.00", "NA ppi2 !Reorganization:PPI2"}, {"PG1", "OG304", "PG1", "OG2P1", "0.0300", "3", "0.00", "NA ppi2 !Reorganization:PPI2"}, {"PG1", "OG304", "PG1", "OG303", "0.0300", "2", "0.00", "NA ppi2 !Reorganization:PPI2"}, {"PG1", "OG304", "PG1", "OG303", "0.0300", "3", "0.00", "NA ppi2 !Reorganization:PPI2"}, {"PG1", "OG304", "PG1", "OG304", "0.0300", "2", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:METP re-optimize?"}, {"PG1", "OG304", "PG1", "OG304", "0.0300", "3", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:METP re-optimize?"}, {"PG1", "OG304", "PG1", "OG311", "0.1000", "2", "0.00", "NA ppi2 !Reorganization:PPI2"}, {"PG1", "OG304", "PG1", "OG311", "0.0300", "3", "0.00", "NA ppi2 !Reorganization:PPI2"}, {"PG2", "OG304", "PG1", "OG2P1", "0.1000", "2", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1"}, {"PG2", "OG304", "PG1", "OG2P1", "0.0300", "3", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1"}, {"PG2", "OG304", "PG1", "OG303", "0.0300", "2", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1"}, {"PG2", "OG304", "PG1", "OG303", "0.0300", "3", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1"}, {"PG2", "OG304", "PG1", "OG304", "0.0300", "2", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:METP re-optimize?"}, {"PG2", "OG304", "PG1", "OG304", "0.0300", "3", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:METP re-optimize?"}, {"PG1", "OG304", "PG2", "OG2P1", "0.0300", "3", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1"}, {"HGP1", "OG311", "PG0", "OG2P1", "0.3000", "3", "0.00", "NA MP_1, adm jr. !Reorganization:MP_0 RE-OPTIMIZE!"}, {"HGP1", "OG311", "PG0", "OG303", "1.6000", "1", "180.00", "PROTNA phenol phosphate !Reorganization:MP_0 RE-OPTIMIZE!"}, {"HGP1", "OG311", "PG0", "OG303", "0.9000", "2", "0.00", "PROTNA phenol phosphate !Reorganization:MP_0 RE-OPTIMIZE!"}, {"HGP1", "OG311", "PG0", "OG311", "0.3000", "3", "0.00", "NA MP_0, adm jr."}, {"HGP1", "OG311", "PG1", "CG312", "0.2000", "1", "180.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"HGP1", "OG311", "PG1", "CG312", "1.6000", "2", "0.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"HGP1", "OG311", "PG1", "CG321", "0.6000", "1", "180.00", "BDFP, BDFD, Benzylphosphonate"}, {"HGP1", "OG311", "PG1", "CG321", "1.1000", "2", "0.00", "BDFP, BDFD, Benzylphosphonate"}, {"HGP1", "OG311", "PG1", "OG2P1", "0.3000", "3", "0.00", "NA MP_1, adm jr. !Reorganization:MP_1"}, {"HGP1", "OG311", "PG1", "OG303", "1.6000", "1", "180.00", "PROTNA phenol phosphate !Reorganization:MP_1"}, {"HGP1", "OG311", "PG1", "OG303", "0.9000", "2", "0.00", "PROTNA phenol phosphate !Reorganization:MP_1"}, {"HGP1", "OG311", "PG1", "OG304", "1.6000", "1", "180.00", "PROTNA phenol phosphate !Reorganization:PPI2"}, {"HGP1", "OG311", "PG1", "OG304", "0.9000", "2", "0.00", "PROTNA phenol phosphate !Reorganization:PPI2"}, {"CG321", "SG301", "SG301", "CG321", "1.0000", "1", "0.00", "PROT DMDS 5/15/92 (FL)"}, {"CG321", "SG301", "SG301", "CG321", "4.1000", "2", "0.00", "PROT mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CG321", "SG301", "SG301", "CG321", "0.9000", "3", "0.00", "PROT DMDS 5/15/92 (FL)"}, {"CG321", "SG301", "SG301", "CG331", "1.0000", "1", "0.00", "PROT DMDS 5/15/92 (FL)"}, {"CG321", "SG301", "SG301", "CG331", "4.1000", "2", "0.00", "PROT mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CG321", "SG301", "SG301", "CG331", "0.9000", "3", "0.00", "PROT DMDS 5/15/92 (FL)"}, {"CG331", "SG301", "SG301", "CG331", "1.0000", "1", "0.00", "PROT DMDS 5/15/92 (FL)"}, {"CG331", "SG301", "SG301", "CG331", "4.1000", "2", "0.00", "PROT mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CG331", "SG301", "SG301", "CG331", "0.9000", "3", "0.00", "PROT DMDS 5/15/92 (FL)"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm36_cgenff info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm36_cgenff_impropers[125][8]= {{"CG2D1", "CG331", "NG2D1", "HGA4", "25.0000", "0", "0.00", "SCH1, xxwy"}, {"CG2D1", "CG331", "NG2P1", "HGR52", "18.0000", "0", "0.00", "SCH2, xxwy"}, {"CG2D1O", "CG2D1", "NG301", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D1O", "CG2D1", "NG311", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D1O", "CG2D2", "NG321", "HGA4", "53.0000", "0", "0.00", "AMET, ethenamine, from NA NICH WILDCARD; pram"}, {"CG2D1O", "CG2D2", "OG301", "HGA4", "23.0000", "0", "0.00", "MOET, Methoxyethene, xxwy"}, {"CG2D1O", "CG2DC1", "NG301", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D1O", "CG2DC1", "NG311", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D1O", "CG2DC1", "OG301", "HGA4", "10.0000", "0", "0.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2D2O", "CG2D1", "NG301", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D2O", "CG2D1", "NG311", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D2O", "CG2D2", "NG321", "HGA4", "53.0000", "0", "0.00", "AMET, ethenamine, from NA NICH WILDCARD; pram"}, {"CG2D2O", "CG2D2", "OG301", "HGA4", "23.0000", "0", "0.00", "MOET, Methoxyethene, xxwy"}, {"CG2D2O", "CG2DC2", "NG301", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D2O", "CG2DC2", "NG311", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D2O", "CG2DC2", "OG301", "HGA4", "10.0000", "0", "0.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2DC1", "CG2R61", "NG2D1", "HGA4", "30.0000", "0", "0.00", "HDZ1B, xxwy"}, {"CG2DC1", "CG2DC2", "NG2P1", "HGR52", "13.0000", "0", "0.00", "SCH3, xxwy"}, {"CG2DC2", "CG2R61", "NG2D1", "HGA4", "30.0000", "0", "0.00", "HDZ1B, xxwy"}, {"CG2DC2", "CG2DC1", "NG2P1", "HGR52", "13.0000", "0", "0.00", "SCH3, xxwy"}, {"CG2N1", "NG321", "NG321", "NG2D1", "85.0000", "0", "0.00", "MGU1, methylguanidine"}, {"CG2N1", "NG2P1", "NG2P1", "NG2P1", "40.0000", "0", "0.00", "PROT 5.75->40.0 GUANIDINIUM (KK)"}, {"CG2N1", "NG2D1", "NG311", "NG321", "85.0000", "0", "0.00", "MGU2, methylguanidine2"}, {"CG2N2", "NG2P1", "NG2P1", "CG2R61", "30.0000", "0", "0.00", "BAMI, benzamidinium; from AMDN, amidinium; pram"}, {"CG2N2", "NG2P1", "NG2P1", "CG331", "30.0000", "0", "0.00", "AMDN, amidinium, sz (verified by pram)"}, {"CG2N2", "NG2D1", "NG321", "SG311", "32.0000", "0", "0.00", "MT2A, fylin"}, {"CG2O1", "CG2DC1", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG2DC1", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG2DC2", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG2DC2", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG2R61", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG2R61", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG2R62", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG311", "NG2S0", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG311", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG311", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG311", "NG311", "OG2D1", "120.0000", "0", "0.00", "AMS1, xxwy, from PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG321", "NG2S0", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG321", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG321", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG331", "NG2S0", "OG2D1", "71.0000", "0", "0.00", "DMA, Dimethylacetamide, xxwy"}, {"CG2O1", "CG331", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG331", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG3C51", "NG2S0", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG3C51", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG3C51", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG3C53", "NG2S0", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG3C53", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG3C53", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "NG2S0", "OG2D1", "HGR52", "50.0000", "0", "0.00", "DMF, Dimethylformamide, xxwy"}, {"CG2O1", "NG2S2", "OG2D1", "HGR52", "66.0000", "0", "0.00", "FORM, formamide, xxwy"}, {"CG2O2", "CG2R61", "OG2D1", "OG302", "72.0000", "0", "0.00", "MBOA, methyl benzoate; MOLVIB looks good; jal"}, {"CG2O2", "CG311", "OG2D1", "OG302", "62.0000", "0", "0.00", "PROT and LIPID WILDCARD; from MAS, methyl acetate; xxwy"}, {"CG2O2", "CG321", "OG2D1", "OG302", "62.0000", "0", "0.00", "PROT and LIPID WILDCARD; from MAS, methyl acetate; xxwy"}, {"CG2O2", "CG331", "OG2D1", "OG302", "62.0000", "0", "0.00", "MAS, methyl acetate, xxwy"}, {"CG2O2", "CG2R61", "OG2D1", "OG311", "53.0000", "0", "0.00", "ZOIC, benzoic acid; MOLVIB 1% low (55 would be spot on); jal"}, {"CG2O2", "CG311", "OG2D1", "OG311", "65.0000", "0", "0.00", "PROT and LIPID WILDCARD; ACEH, acetic acid; xxwy"}, {"CG2O2", "CG321", "OG2D1", "OG311", "65.0000", "0", "0.00", "PROT and LIPID WILDCARD; ACEH, acetic acid; xxwy"}, {"CG2O2", "CG331", "OG2D1", "OG311", "65.0000", "0", "0.00", "ACEH, acetic acid, xxwy"}, {"CG2O2", "OG2D1", "OG311", "HGR52", "75.0000", "0", "0.00", "FORH, formic acid, xxwy"}, {"CG2O3", "OG2D2", "OG2D2", "CG2DC1", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) WILDCARD"}, {"CG2O3", "OG2D2", "OG2D2", "CG2DC2", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) WILDCARD"}, {"CG2O3", "OG2D2", "OG2D2", "CG2O5", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) WILDCARD"}, {"CG2O3", "OG2D2", "OG2D2", "CG2R61", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) WILDCARD"}, {"CG2O3", "OG2D2", "OG2D2", "CG301", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) WILDCARD"}, {"CG2O3", "OG2D2", "OG2D2", "CG311", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) correct conversion from wildcard CC X X CT1 which itself may or may not be correct"}, {"CG2O3", "OG2D2", "OG2D2", "CG314", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) WILDCARD"}, {"CG2O3", "OG2D2", "OG2D2", "CG321", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) correct conversion from wildcard CC X X CT2 which itself may or may not be correct"}, {"CG2O3", "OG2D2", "OG2D2", "CG331", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) correct conversion from wildcard CC X X CT3 which itself may or may not be correct"}, {"CG2O3", "OG2D2", "OG2D2", "HGR52", "67.0000", "0", "0.00", "FORA, formate, sz"}, {"CG2O4", "CG2DC1", "OG2D1", "HGR52", "14.0000", "0", "0.00", "RETINOL RTAL unmodified"}, {"CG2O4", "CG2DC2", "OG2D1", "HGR52", "14.0000", "0", "0.00", "RETINOL RTAL unmodified"}, {"CG2O4", "CG2R61", "OG2D1", "HGR52", "53.0000", "0", "0.00", "ALDEHYDE benzaldehyde unmodified"}, {"CG2O4", "CG321", "OG2D1", "HGR52", "50.0000", "0", "0.00", "PALD from acetaldehyde adm 11/08"}, {"CG2O4", "CG331", "OG2D1", "HGR52", "50.0000", "0", "0.00", "AALD acetaldehyde adm 11/08"}, {"CG2O5", "CG2DC1", "CG331", "OG2D3", "88.0000", "0", "0.00", "BEON, butenone, kevo"}, {"CG2O5", "CG2DC2", "CG331", "OG2D3", "88.0000", "0", "0.00", "BEON, butenone, kevo"}, {"CG2O5", "CG2O3", "CG2R61", "OG2D3", "72.0000", "0", "0.00", "BIPHENYL re-initialized by kevo from PHEK, phenyl ethyl ketone, mcs"}, {"CG2O5", "CG2R61", "CG311", "OG2D3", "72.0000", "0", "0.00", "BIPHENYL re-initialized by kevo from PHEK, phenyl ethyl ketone; mcs"}, {"CG2O5", "CG2R61", "CG321", "OG2D3", "72.0000", "0", "0.00", "PHEK, phenyl ethyl ketone; mcs"}, {"CG2O5", "CG2R61", "CG331", "OG2D3", "60.0000", "0", "0.00", "3ACP, 3-acetylpyridine; PHMK, phenyl methyl ketone; mcs"}, {"CG2O5", "CG321", "CG321", "OG2D3", "70.0000", "0", "0.00", "CHON, cyclohexanone; from ACO, acetone; yapol"}, {"CG2O5", "CG321", "CG331", "OG2D3", "70.0000", "0", "0.00", "BTON, butanone; from ACO, acetone; yapol"}, {"CG2O5", "CG331", "CG331", "OG2D3", "70.0000", "0", "0.00", "ketone, acetone adm 11/08"}, {"CG2O6", "NG2S2", "NG2S2", "OG2D1", "80.0000", "0", "0.00", "UREA, Urea"}, {"CG2O6", "OG302", "OG302", "OG2D1", "145.0000", "0", "0.00", "DMCA, dimethyl carbonate, xxwy"}, {"CG2O6", "OG2D2", "OG2D2", "OG2D2", "107.0000", "0", "0.00", "PROTMOD carbonate"}, {"CG2O6", "NG2S1", "OG2D1", "OG302", "62.0000", "0", "0.00", "DMCB, dimehtyl carbamate, xxwy"}, {"CG2O6", "OG2D2", "OG2D2", "OG311", "85.0000", "0", "0.00", "CO31, bicarbonate, xxwy"}, {"CG2O6", "SG311", "SG311", "SG2D1", "80.0000", "0", "0.00", "DMTT, dimethyl trithiocarbonate, kevo"}, {"CG2R53", "CG251O", "NG2R53", "OG2D1", "90.0000", "0", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy from 2PDO WILDCARD"}, {"CG2R53", "CG252O", "NG2R53", "OG2D1", "90.0000", "0", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy from 2PDO WILDCARD"}, {"CG2R53", "CG25C1", "NG2R51", "OG2D1", "90.0000", "0", "0.00", "MEOI, methyleneoxindole, kevo and xxwy from 2PDO WILDCARD"}, {"CG2R53", "CG25C2", "NG2R51", "OG2D1", "90.0000", "0", "0.00", "MEOI, methyleneoxindole, kevo and xxwy from 2PDO WILDCARD"}, {"CG2R53", "CG3C41", "NG2R43", "OG2D1", "120.0000", "0", "0.00", "AZDO, 2-azetidinone, kevo"}, {"CG2R53", "CG3C52", "NG2R53", "OG2D1", "90.0000", "0", "0.00", "120 2PDO, 2-pyrrolidinone, kevo"}, {"CG2R53", "NG2R53", "NG2R53", "OG2D1", "90.0000", "0", "0.00", "MHYO, 5-methylenehydantoin, xxwy from 2PDO WILDCARD"}, {"CG2R53", "CG2R51", "OG2D1", "OG3C51", "28.6000", "0", "0.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R53", "CG3C52", "OG2D1", "OG3C51", "45.0000", "0", "0.00", "GBL, Gamma-butyrolactone, ctsai"}, {"CG2R53", "NG2R53", "OG2D1", "SG311", "43.0000", "0", "0.00", "MTDO, 5-methylene-2,4-thiazolidinedione, xxwy"}, {"CG2R53", "NG2R53", "SG2D1", "SG311", "43.0000", "0", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R63", "CG2R62", "CG2R62", "OG2D4", "15.0000", "0", "0.00", "4PYO, 4(1H)-pyridinone, isg"}, {"CG2R63", "CG2R62", "NG2R61", "OG2D4", "90.0000", "0", "0.00", "NA T/O4, adm jr. 11/97 correct conversion"}, {"CG2R63", "CG2R62", "NG2R67", "OG2D4", "90.0000", "0", "0.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R63 CG2R62 NG2R61 OG2D4, NA; isg"}, {"CG2R63", "CG2RC0", "NG2R61", "OG2D4", "90.0000", "0", "0.00", "NA G correct conversion"}, {"CG2R63", "NG2R61", "NG2R61", "OG2D4", "90.0000", "0", "0.00", "RESI URAC, uracil, xxwy, from NA U WILDCARD"}, {"CG2R63", "NG2R61", "NG2R62", "OG2D4", "90.0000", "0", "0.00", "RESI CYT, cytosine, NA U WILDCARD"}, {"CG2R63", "NG2R61", "NG2R67", "OG2D4", "90.0000", "0", "0.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from CG2R63 NG2R61 NG2R61 OG2D4, URAC from NA; isg"}, {"CG2R63", "CG2R62", "OG2D4", "OG3R60", "51.0000", "0", "0.00", "RIN, coumarin, isg"}, {"CG2R63", "CG2R61", "NG2R61", "SG2D1", "31.0000", "0", "0.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R63", "CG2R61", "NG2R67", "SG2D1", "39.0000", "0", "0.00", "3PH24S, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinethione; from CG2R63 CG2R62 NG2R61 SG2D1, YTS2; isg"}, {"CG2R63", "CG2R62", "NG2R61", "SG2D1", "39.0000", "0", "0.00", "YT2S, 3,4-dihydro-4-thioxo-2(1H)-quinazolinone, isg"}, {"CG2R63", "CG2R62", "NG2R67", "SG2D1", "39.0000", "0", "0.00", "3PH4SR, 2,3-dihydro-3-phenyl-2-oxo-4(1H)pyrimidinethione; from CG2R63 CG2R62 NG2R61 SG2D1, YTS2; isg"}, {"CG2R63", "NG2R61", "NG2R61", "SG2D1", "84.0000", "0", "0.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R63", "NG2R61", "NG2R67", "SG2D1", "84.0000", "0", "0.00", "3PH2SR, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinone; from CG2R63 NG2R61 NG2R61 SG2D1, YTS2; isg"}, {"CG2R64", "CG2R61", "NG2R60", "NG2S1", "19.0000", "0", "0.00", "2AMP, 2-acetamide pyridine,xxwy"}, {"CG2R64", "CG2R62", "NG2R62", "NG2S3", "60.0000", "0", "0.00", "NA C"}, {"CG2R64", "CG2RC0", "NG2R62", "NG2S3", "40.0000", "0", "0.00", "NA A"}, {"CG2R64", "NG2R61", "NG2R62", "NG2S3", "40.0000", "0", "0.00", "NA G"}, {"CG2R64", "CG2R62", "NG2R62", "NG301", "40.0000", "0", "0.00", "TMC, yxu"}, {"CG2R64", "CG2RC0", "NG2R62", "NG301", "40.0000", "0", "0.00", "M6A, yxu"}, {"NG2O1", "OG2N1", "OG2N1", "CG324", "53.6000", "0", "0.00", "NIPR, nitropropane, abar"}, {"NG2O1", "OG2N1", "OG2N1", "CG334", "50.8000", "0", "0.00", "NIME, nitromethane, abar"}, {"NG2S3", "HGP4", "HGP4", "CG2R61", "-2.5000", "0", "0.00", "-2.0 PYRIDINE aminopyridine 11/10 kevo: sic! Compensates for in-plane force from CG2R61 CG2R61 NG2S3 HGP4"}, {"NG2S3", "HGP4", "HGP4", "CG2R64", "9.0000", "0", "0.00", "NA GUA ADE CYT; from artificially planar 2APY, 2-aminopyridine parameter set (12/2010); xxwy and kevo"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm36_cgenff info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm36_cgenff_vdw[156][6]= {{"HGA1", "-0.0450", "1.3400", " ", " ", "igor, 6/05"}, {"HGA2", "-0.0350", "1.3400", " ", " ", "igor, 6/05"}, {"HGA3", "-0.0240", "1.3400", " ", " ", "yin and mackerell, 4/98"}, {"HGA4", "-0.0310", "1.2500", " ", " ", "yin,adm jr., 12/95"}, {"HGA5", "-0.0260", "1.2600", " ", " ", "yin,adm jr., 12/95"}, {"HGA6", "-0.0280", "1.3200", " ", " ", " "}, {"HGA7", "-0.0300", "1.3000", " ", " ", " "}, {"HGAAM0", "-0.0280", "1.2800", " ", " ", "amines"}, {"HGAAM1", "-0.0280", "1.2800", " ", " ", "amines"}, {"HGAAM2", "-0.0400", "1.2600", " ", " ", "amines"}, {"HGP1", "-0.0460", "0.2245", " ", " ", "H"}, {"HGP2", "-0.0460", "0.2245", " ", " ", "polar Hydrogen, charged systems"}, {"HGP3", "-0.1000", "0.4500", " ", " ", "pure solvent, adm jr., 6/22/92"}, {"HGP4", "-0.0460", "0.2245", " ", " ", "H, conjugated amines (NA bases)"}, {"HGP5", "-0.0460", "0.7000", " ", " ", "H on quarternary amine (choline)"}, {"HGPAM1", "-0.0090", "0.8750", " ", " ", "amines"}, {"HGPAM2", "-0.0100", "0.8750", " ", " ", "amines"}, {"HGPAM3", "-0.0120", "0.8700", " ", " ", "amines"}, {"HGR51", "-0.0300", "1.3582", " ", " ", " "}, {"HGR52", "-0.0460", "0.9000", " ", " ", "jr., 6/27/90, his"}, {"HGR53", "-0.0460", "0.7000", " ", " ", "jr., 6/27/90, his"}, {"HGR61", "-0.0300", "1.3582", " ", " ", " "}, {"HGR62", "-0.0460", "1.1000", " ", " ", "aromatic Hvdw"}, {"HGR63", "-0.0460", "0.9000", " ", " ", "jjp1/adm jr."}, {"HGR71", "-0.0300", "1.3582", " ", " ", " "}, {"CG1T1", "-0.1670", "1.8400", " ", " ", "2-butyne, kevo and rima"}, {"CG1T2", "-0.1032", "1.9925", " ", " ", "propyne, rima and kevo"}, {"CG1N1", "-0.1800", "1.8700", " ", " ", "acetonitrile; 3CYP, 3-cyanopyridine, kevo"}, {"CG2D1", "-0.0680", "2.0900", " ", " ", "yin,adm jr., 12/95"}, {"CG2D2", "-0.0640", "2.0800", " ", " ", "yin,adm jr., 12/95"}, {"CG2D1O", "-0.0680", "2.0900", " ", " ", "bond carbon adjacent to O (pyran)"}, {"CG2D2O", "-0.0680", "2.0900", " ", " ", "bond carbon adjacent to O (pyran)"}, {"CG2DC1", "-0.0680", "2.0900", " ", " ", " "}, {"CG2DC2", "-0.0680", "2.0900", " ", " ", " "}, {"CG2DC3", "-0.0640", "2.0800", " ", " ", " "}, {"CG2N1", "-0.1100", "2.0000", " ", " ", "pure solvent, adm jr., 3/3/93"}, {"CG2N2", "-0.1100", "2.0000", " ", " ", "as CG2N1 of NMA pure solvent, adm jr., 3/3/93"}, {"CG2O1", "-0.1100", "2.0000", " ", " ", "pure solvent, adm jr., 3/3/93"}, {"CG2O2", "-0.0980", "1.7000", " ", " ", "acetate update viv 12/29/06"}, {"CG2O3", "-0.0700", "2.0000", " ", " ", "heat of solvation"}, {"CG2O4", "-0.0600", "1.8000", " ", " ", "acetaldehyde, 11/08"}, {"CG2O5", "-0.0900", "2.0000", " ", " ", "acetone, 11/08"}, {"CG2O6", "-0.0700", "2.0000", " ", " ", "CO3 (carbonate) from acetate heat of solvation"}, {"CG2O7", "-0.0580", "1.5630", " ", " ", "dioxide, JES"}, {"CG2R51", "-0.0500", "2.1000", " ", " ", "bulk solvent of 10 maybridge cmpds (kevo)"}, {"CG2R52", "-0.0200", "2.2000", " ", " ", "pyrazole; bulk solvent of 3 maybridge cmpds (kevo); consistent with CG2R64"}, {"CG2R53", "-0.0200", "2.2000", " ", " ", "imidazole; bulk solvent of 5 maybridge cmpds (kevo); consistent with CG2R64"}, {"CG2R57", "-0.0500", "2.1000", " ", " ", "from CG2R51; lf"}, {"CG25C1", "-0.0680", "2.0900", " ", " ", "as CG2DC1 but in 5-membered ring with exocyclic double bond"}, {"CG25C2", "-0.0680", "2.0900", " ", " ", "as CG2DC2 but in 5-membered ring with exocyclic double bond"}, {"CG251O", "-0.0680", "2.0900", " ", " ", "as CG2D1O but in 5-membered ring with exocyclic double bond"}, {"CG252O", "-0.0680", "2.0900", " ", " ", "as CG2D2O but in 5-membered ring with exocyclic double bond"}, {"CG2R61", "-0.0700", "1.9924", " ", " ", " "}, {"CG2R62", "-0.0900", "1.9000", " ", " ", " "}, {"CG2R63", "-0.1000", "1.9000", " ", " ", " "}, {"CG2R64", "-0.0400", "2.1000", " ", " ", "pyrimidine"}, {"CG2R66", "-0.0700", "1.9000", " ", " ", "dft"}, {"CG2R67", "-0.0700", "1.9924", " ", " ", " "}, {"CG2RC0", "-0.0990", "1.8600", " ", " ", " "}, {"CG2R71", "-0.0670", "1.9948", " ", " ", "extrapolation. TO BE REFINED!"}, {"CG2RC7", "-0.0990", "1.8600", " ", " ", "from INDO/TRP, ignoring single bond character ==> TO BE REFINED!"}, {"CG301", "-0.0320", "2.0000", "-0.01", "1.9", "alkane (CT0), neopentane, from CT1, viv"}, {"CG302", "-0.0200", "2.3000", " ", " ", " "}, {"CG311", "-0.0320", "2.0000", "-0.01", "1.9", "alkane (CT1), isobutane, 6/05 viv"}, {"CG312", "-0.0420", "2.0500", " ", " ", " "}, {"CG314", "-0.0310", "2.1650", "-0.01", "1.9", "extrapolation based on CG311, CG321 and CG324, kevo"}, {"CG321", "-0.0560", "2.0100", "-0.01", "1.9", "alkane (CT2), 4/98, yin, adm jr, also used by viv"}, {"CG322", "-0.0600", "1.9000", " ", " ", " "}, {"CG323", "-0.1100", "2.2000", " ", " ", "to water and F.E. of solvation, adm jr. 6/1/92"}, {"CG324", "-0.0550", "2.1750", "-0.01", "1.9", "PIP1,2,3"}, {"CG331", "-0.0780", "2.0500", "-0.01", "1.9", "alkane (CT3), 4/98, yin, adm jr; Rmin/2 modified from 2.04 to 2.05"}, {"CG334", "-0.0770", "2.2150", "-0.01", "1.9", "extrapolation based on CG331, CG321 and CG324, kevo"}, {"CG3C50", "-0.0360", "2.0100", "-0.01", "1.9", "extrapolation based on CG301, CG321 and CG3C52, kevo"}, {"CG3C51", "-0.0360", "2.0100", "-0.01", "1.9", "extrapolation based on CG311, CG321 and CG3C52, kevo"}, {"CG3C52", "-0.0600", "2.0200", "-0.01", "1.9", "CPEN, cyclopentane, 8/06 viv"}, {"CG3C53", "-0.0350", "2.1750", "-0.01", "1.9", "extrapolation based on (CG324, CG321 and CG3C51(ex)) or (CG311, CG321 and CG3C54(ex)), kevo"}, {"CG3C54", "-0.0590", "2.1850", "-0.01", "1.9", "extrapolation based on CG324, CG321 and CG3C52, kevo"}, {"CG3C31", "-0.0560", "2.0100", "-0.01", "1.9", "cyclopropane JMW (CT2), viv"}, {"CG3C41", "-0.0650", "2.0200", "-0.01", "1.9", "CBU, cyclobutane, lsk"}, {"CG3RC1", "-0.0320", "2.0000", "-0.01", "1.9", "alkane (CT1), viv"}, {"CG3AM0", "-0.0700", "1.9700", " ", " ", "amines"}, {"CG3AM1", "-0.0780", "1.9800", " ", " ", "amines"}, {"CG3AM2", "-0.0800", "1.9900", " ", " ", "amines"}, {"NG1T1", "-0.1800", "1.7900", " ", " ", "acetonitrile; 3CYP, 3-cyanopyridine, kevo"}, {"NG2D1", "-0.2000", "1.8500", " ", " ", "Schiff's base"}, {"NG2S0", "-0.2000", "1.8500", "-0.0001", "1.85", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD"}, {"NG2S1", "-0.2000", "1.8500", "-0.20", "1.55", "1,4 vdW allows the C5 dipeptide minimum to exist"}, {"NG2S2", "-0.2000", "1.8500", " ", " ", " "}, {"NG2S3", "-0.2000", "1.8500", " ", " ", " "}, {"NG2O1", "-0.2000", "1.8500", " ", " ", "nitrobenzene"}, {"NG2P1", "-0.2000", "1.8500", " ", " ", "Schiff's base"}, {"NG2R43", "-0.2000", "1.8500", " ", " ", "2-azetidinone; from 2PDO; lsk"}, {"NG2R50", "-0.2000", "1.8500", " ", " ", "Imidazole from IMIA/HS[DE]; originally from prot backbone - probably not ideal"}, {"NG2R51", "-0.2000", "1.8500", " ", " ", "Pyrrole; IMIA, Imidazole from IMIA/HS[DE] and INDO/TRP; originally from prot backbone - probably not ideal"}, {"NG2R52", "-0.2000", "1.8500", " ", " ", "imidazolium from IMIM/HSP; originally from prot backbone - probably not ideal"}, {"NG2R53", "-0.2000", "1.8500", " ", " ", "in 5-memebered ring (slightly pyramidized), 2PDO, kevo"}, {"NG2R57", "-0.2000", "1.8500", " ", " ", "from NG2R51; lf"}, {"NG2R60", "-0.0600", "1.8900", " ", " ", "pyridine"}, {"NG2R61", "-0.2000", "1.8500", " ", " ", " "}, {"NG2R62", "-0.0500", "2.0600", " ", " ", "pyrimidine"}, {"NG2R67", "-0.2000", "1.8500", " ", " ", "pyridinones etc.; from NG2R61; isg"}, {"NG2RC0", "-0.2000", "1.8500", " ", " ", "ring bridging N, indolizine, INDZ, kevo"}, {"NG301", "-0.0350", "2.0000", " ", " ", "amines"}, {"NG311", "-0.0450", "2.0000", " ", " ", "amines"}, {"NG321", "-0.0600", "1.9900", " ", " ", "amines"}, {"NG331", "-0.0700", "1.9800", " ", " ", "amines"}, {"NG3C51", "-0.2000", "1.8500", " ", " ", "2-pyrroline, kevo"}, {"NG3N1", "-0.0600", "2.0500", " ", " ", "hydrazine, ed"}, {"NG3P0", "-0.2000", "1.8500", " ", " ", "quarternary amine"}, {"NG3P1", "-0.2000", "1.8500", " ", " ", "tertiary amine"}, {"NG3P2", "-0.2000", "1.8500", " ", " ", "proline; from +ProNH2 RLD 9/28/90"}, {"NG3P3", "-0.2000", "1.8500", " ", " ", " "}, {"OG2D1", "-0.1200", "1.7000", "-0.12", "1.40", "carbonyl. Also consistent with adm, acetaldehyde, 11/08"}, {"OG2D2", "-0.1200", "1.7000", " ", " ", " "}, {"OG2D3", "-0.0500", "1.7000", "-0.12", "1.40", "adm, acetone, 11/08"}, {"OG2D4", "-0.1200", "1.7000", " ", " ", " "}, {"OG2D5", "-0.1650", "1.6920", " ", " ", "dioxide, JES"}, {"OG2N1", "-0.1200", "1.7000", " ", " ", "nitrobenzene"}, {"OG2P1", "-0.1200", "1.7000", " ", " ", " "}, {"OG2R50", "-0.1200", "1.7000", " ", " ", "furan"}, {"OG3R60", "-0.1000", "1.6500", " ", " ", "PY02, pyran; LJ from THP, sng 1/06"}, {"OG301", "-0.1000", "1.6500", " ", " ", "LJ from THP, sng 1/06 !SHOULD WE HAVE A SEPARATE ENOL ETHER??? IF YES, SHOULD WE MERGE IT WITH OG3R60???"}, {"OG302", "-0.1000", "1.6500", " ", " ", "LJ from THP, sng 1/06"}, {"OG303", "-0.1000", "1.6500", " ", " ", "ester; LJ from THP, sng 1/06"}, {"OG304", "-0.1000", "1.6500", " ", " ", "oxygen in pyrophosphate/pyrosulphate"}, {"OG311", "-0.1921", "1.7650", " ", " ", "MeOH and EtOH 1/06 (was -0.1521 1.7682)"}, {"OG312", "-0.1200", "1.7500", " ", " ", "anionic alcohol oxygen"}, {"OG3C31", "-0.1000", "1.6500", " ", " ", "from ethers; sc"}, {"OG3C51", "-0.1000", "1.6500", " ", " ", "LJ from THP, tetrahydropyran sng 1/06"}, {"OG3C61", "-0.1000", "1.6500", " ", " ", "dioxane; THP, tetrahydropyran sng 1/06 !SHOULD WE MERGE THIS WITH OG3R60???"}, {"SG2D1", "-0.5650", "2.0500", " ", " ", "dimethyl trithiocarbonate, kevo"}, {"SG2R50", "-0.4500", "2.0000", " ", " ", "thiophene"}, {"SG311", "-0.4500", "2.0000", " ", " ", "pure solvent"}, {"SG301", "-0.3800", "1.9750", " ", " ", "pure solvent"}, {"SG302", "-0.4700", "2.2000", " ", " ", "to water and F.E. of solvation, adm jr. 6/1/92"}, {"SG3O1", "-0.4700", "2.1000", " ", " ", " "}, {"SG3O2", "-0.3500", "2.0000", " ", " ", "SG3O3 (ML Strader, SE Feller, JPC-A106(6),1074(2002)), xxwy"}, {"SG3O3", "-0.3500", "2.0000", " ", " ", "Strader, SE Feller, JPC-A106(6),1074(2002), sz"}, {"FGA1", "-0.1350", "1.6300", " ", " ", " "}, {"FGA2", "-0.1050", "1.6300", " ", " ", " "}, {"FGA3", "-0.0970", "1.6000", " ", " ", " "}, {"FGP1", "-0.0970", "1.6000", " ", " ", "tetraflouride, ALF4"}, {"FGR1", "-0.1200", "1.7000", " ", " ", "F, 1,3-difluorobenzene pure solvent"}, {"CLGA1", "-0.3430", "1.9100", " ", " ", "DCLE, chloroethane, 1,1-dichloroethane"}, {"CLGA3", "-0.3100", "1.9100", " ", " ", " "}, {"BRGA1", "-0.4800", "1.9700", " ", " ", " "}, {"BRGA2", "-0.5300", "2.0500", " ", " ", " "}, {"BRGA3", "-0.5400", "2.0000", " ", " ", " "}, {"PG0", "-0.5850", "2.1500", " ", " ", "phosphate"}, {"PG1", "-0.5850", "2.1500", " ", " ", "-1"}, {"PG2", "-0.5850", "2.1500", " ", " ", "-2"}, {"ALG1", "-0.6500", "2.0000", " ", " ", "tetraflouride, ALF4"}, {"LPH", "0.0000", "0.0000", " ", " ", "on halogens attached to an aromatic group"}, {"CLGR1", "-0.2300", "1.8600", " ", " ", "chlorobenzene, adjusted for lone-pair, fylin"}, {"BRGR1", "-0.3200", "1.9800", " ", " ", "bromobenzene, adjusted for lone-pair, fylin"}, {"IGR1", "-0.5200", "2.2400", " ", " ", "iodobenzene, adjusted for lone-pair, fylin"}}; atomes_1.3.1/src/calc/force_fields/compass.c0000664000175000017500000014477315212624223020453 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file compass.c * @short Compass force field, from 'Compass.frc' * @author Sébastien Le Roux */ /* * This file: 'compass.c' * * Contains: * Compass force field, data from taken from: - the file: 'Compass.frc' This file contains several tables: Atoms : Compass_atoms[45][5] Equivalence : Compass_equivalence[46][7] Quartic bonds : Compass_bonds[54][7] Quartic angles : Compass_angles[94][8] Torsions : Compass_torsions[95][11] Inversions : Compass_inversions[22][7] Non bonded : Compass_vdw[46][4] Bond increments : Compass_bond_increments[55][5] */ #include "global.h" int Compass_objects[14] = {45, 0, 46, 0, 54, 0, 0, 94, 0, 95, 22, 0, 46, 55}; int Compass_dim[14] = {5, 0, 7, 0, 7, 0, 0, 8, 0, 11, 7, 0, 4, 5}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= Compass info */ char * Compass_atoms[45][5]= {{"Ar", "39.94400", "ar", " ", "Ver. 1.0, Ref. 5"}, {"C", "12.01115", "c3a", "carbon ", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c1o", "in CO", "Ver. 1.0, Ref. 5"}, {"C", "12.01115", "c2=", "in CO2 and CS2", "Ver. 1.0, Ref. 5"}, {"C", "12.01115", "c3'", "carbon [one polar substituent]", "Ver. 1.0, Ref. 7"}, {"C", "12.01115", "c4", "sp3 carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c41o", "sp3, in methanol", "Ver. 1.0, Ref. 8"}, {"C", "12.01115", "c43o", "sp3 in secondary alcohols", "Ver. 1.0, Ref. 8"}, {"C", "12.01115", "c43", "carbon with three heavy atoms attached", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c44", "carbon with four heavy atoms attached", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c4o", "carbon ", "Ver. 1.0, Ref. 3"}, {"C", "12.01115", "c4z", "sp3, bonded to -N3", "Ver. 1.0, Ref. 9"}, {"H", "1.00797", "h1", "hydrogen ", "Ver. 1.0, Ref. 1"}, {"H", "1.00797", "h1h", "in H2", "Ver. 1.0, Ref. 5"}, {"H", "1.00797", "h1o", "polar hydrogen, bonded to O,F", "Ver. 1.0, Ref. 3"}, {"He", "4.00300", "he", " ", "Ver. 1.0, Ref. 5"}, {"Kr", "83.80000", "kr", " ", "Ver. 1.0, Ref. 5"}, {"N", "14.00670", "n1n", "in N2", "Ver. 1.0, Ref. 5"}, {"N", "14.00670", "n1o", "in NO", "Ver. 1.0, Ref. 5"}, {"N", "14.00670", "n1z", "terminal atom in -N3", "Ver. 1.0, Ref. 5"}, {"N", "14.00670", "n2=", " ", "Ver. 1.0, Ref. 4"}, {"N", "14.00670", "n2o", "in NO2", "Ver. 1.0, Ref. 5"}, {"N", "14.00670", "n2t", "central atom in -N3", "Ver. 1.0, Ref. 9"}, {"N", "14.00670", "n2z", "first atom in -N3", "Ver. 1.0, Ref. 9"}, {"N", "14.00670", "n3m", "nitrogen in amides without hydrogen", "Ver. 1.0, Ref. 7"}, {"N", "14.00670", "n3o", "in nitro group", "Ver. 1.0, Ref. 6"}, {"Ne", "20.18300", "ne", " ", "Ver. 1.0, Ref. 5"}, {"O", "15.99940", "o1=", "in NO2 and SO2 [and carbonyl]", "Ver. 1.0, Ref. 5"}, {"O", "15.99940", "o1=*", "in CO2", "Ver. 1.0, Ref. 5"}, {"O", "15.99940", "o12", "in nitro group (-NO2)", "Ver. 1.0, Ref. 6"}, {"O", "15.99940", "o1c", "in CO", "Ver. 1.0, Ref. 5"}, {"O", "15.99940", "o1n", "in NO", "Ver. 1.0, Ref. 5"}, {"O", "15.99940", "o1o", "in O2", "Ver. 1.0, Ref. 5"}, {"O", "15.99940", "o2", "oxygen with two bonds attached", "Ver. 1.0, Ref. 2"}, {"O", "15.99940", "o2e", "oxygen ", "Ver. 1.0, Ref. 3"}, {"O", "15.99940", "o2h", "oxygen ", "Ver. 1.0, Ref. 3"}, {"O", "15.99940", "o2n", "in nitrates", "Ver. 1.0, Ref. 6"}, {"O", "15.99940", "o2s", "oxygen ", "Ver. 1.0, Ref. 7"}, {"O", "15.99940", "o2z", "in siloxanes and zeolites", "Ver. 1.0, Ref. 2"}, {"P", "30.97380", "p4=", " ", "Ver. 1.0, Ref. 4"}, {"S", "32.06400", "s1=", "in CS2", "Ver. 1.0, Ref. 5"}, {"S", "32.06400", "s2=", "in SO2", "Ver. 1.0, Ref. 5"}, {"Si", "28.08600", "si4", "silicon with four bonds attached", "Ver. 1.0, Ref. 2"}, {"Si", "28.08600", "si4c", "subset of si4, non-hydrogen atom attached [siloxanes]", "Ver. 1.0, Ref. 2"}, {"Xe", "131.30000", "xe", " ", "Ver. 1.0, Ref. 5"}}; /* Equivalence table for key symbols Compass with: 0 = Key in atom list 1 = Non-bonded 2 = Bonds 3 = Angles 4 = Torsion 5 = Inversion 6 = Compass info */ char * Compass_equivalence[46][7]= {{"ar", "ar", "ar", "ar", "ar", "ar", "Ver. 1.0, Ref. 5"}, {"c1o", "c1o", "c1o", "c1o", "c1o", "c1o", "Ver. 1.0, Ref. 5"}, {"c2=", "c2=", "c2=", "c2=", "c2=", "c2=", "Ver. 1.0, Ref. 5"}, {"c3a", "c3a", "c3a", "c3a", "c3a", "c3a", "Ver. 1.0, Ref. 1"}, {"c3'", "c3'", "c3'", "c3'", "c3'", "c3'", "Ver. 1.0, Ref. 7"}, {"c4", "c4", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 1"}, {"c41o", "c41o", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 8"}, {"c43o", "c43o", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 8"}, {"c43", "c43", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 1"}, {"c44", "c44", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 1"}, {"c4o", "c4o", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 3"}, {"c4z", "c4z", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 9"}, {"h1", "h1", "h1", "h1", "h1", "h1", "Ver. 1.0, Ref. 1"}, {"h1h", "h1h", "h1h", "h1", "h1", "h1", "Ver. 1.0, Ref. 5"}, {"h1o", "h1o", "h1", "h1", "h1", "h1", "Ver. 1.0, Ref. 3"}, {"he", "he", "he", "he", "he", "he", "Ver. 1.0, Ref. 5"}, {"kr", "kr", "kr", "kr", "kr", "kr", "Ver. 1.0, Ref. 5"}, {"n1n", "n1n", "n1n", "n1n", "n1n", "n1n", "Ver. 1.0, Ref. 5"}, {"n1o", "n1o", "n1o", "n1o", "n1o", "n1o", "Ver. 1.0, Ref. 5"}, {"n1t", "n1t", "n1t", "n1t", "n1t", "n1t", "Ver. 1.2, Ref. 1"}, {"n1z", "n1z", "n1t", "n1t", "n1t", "n1t", "Ver. 1.0, Ref. 9"}, {"n2=", "n2=", "n2=", "n2=", "n2=", "n2=", "Ver. 1.0, Ref. 4"}, {"n2o", "n2o", "n2o", "n2o", "n2o", "n2o", "Ver. 1.0, Ref. 5"}, {"n2t", "n2t", "n2t", "n2t", "n2t", "n2t", "Ver. 1.0, Ref. 9"}, {"n2z", "n2z", "n2z", "n2z", "n2z", "n2z", "Ver. 1.0, Ref. 9"}, {"n3m", "n3m", "n3m", "n3m", "n3m", "n3m", "Ver. 1.0, Ref. 7"}, {"n3o", "n3o", "n3o", "n3o", "n3o", "n3o", "Ver. 1.0, Ref. 6"}, {"ne", "ne", "ne", "ne", "ne", "ne", "Ver. 1.0, Ref. 5"}, {"o1=", "o1=", "o1=", "o1=", "o1=", "o1=", "Ver. 1.0, Ref. 5"}, {"o1=*", "o1=*", "o1=", "o1=", "o1=", "o1=", "Ver. 1.0, Ref. 5"}, {"o12", "o12", "o1=", "o1=", "o1=", "o1=", "Ver. 1.0, Ref. 6"}, {"o1c", "o1c", "o1c", "o1c", "o1c", "o1c", "Ver. 1.0, Ref. 5"}, {"o1n", "o1n", "o1n", "o1n", "o1n", "o1n", "Ver. 1.0, Ref. 5"}, {"o1o", "o1o", "o1o", "o1o", "o1o", "o1o", "Ver. 1.0, Ref. 5"}, {"o2", "o2", "o2", "o2", "o2", "o2", "Ver. 1.0, Ref. 2"}, {"o2h", "o2h", "o2h", "o2", "o2", "o2", "Ver. 1.0, Ref. 3"}, {"o2e", "o2e", "o2e", "o2", "o2", "o2", "Ver. 1.0, Ref. 3"}, {"o2n", "o2n", "o2n", "o2n", "o2", "o2", "Ver. 1.0, Ref. 6"}, {"o2s", "o2s", "o2e", "o2", "o2", "o2", "Ver. 1.0, Ref. 7"}, {"o2z", "o2z", "o2z", "o2z", "o2z", "o2z", "Ver. 1.0, Ref. 2"}, {"p4=", "p4=", "p4=", "p4=", "p4=", "p4=", "Ver. 1.0, Ref. 4"}, {"s1=", "s1=", "s1=", "s1=", "s1=", "s1=", "Ver. 1.0, Ref. 5"}, {"s2=", "s2=", "s2=", "s2=", "s2=", "s2=", "Ver. 1.0, Ref. 5"}, {"si4", "si4", "si4", "si4", "si4", "si4", "Ver. 1.0, Ref. 2"}, {"si4c", "si4c", "si4", "si4", "si4", "si4", "Ver. 1.0, Ref. 2"}, {"xe", "xe", "xe", "xe", "xe", "xe", "Ver. 1.0, Ref. 5"}}; /* Quartic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= K3 (kcal mol-1), 5= K4 (kcal mol-1), 6= Compass info E = K2 * (R - R0)^2 + K3 * (R - R0)^3 + K4 * (R - R0)^4 */ char * Compass_bonds[54][7]= {{"c3a", "c3a", "1.4170", "470.8361", "-627.6179", "1327.6345", "Ver. 1.0, Ref. 1"}, {"c3a", "c4", "1.5010", "321.9021", "-521.8208", "572.1628", "Ver. 1.0, Ref. 1"}, {"c3a", "h1", "1.0982", "372.8251", "-803.4526", "894.3173", "Ver. 1.0, Ref. 1"}, {"c4", "c4", "1.5300", "299.6700", "-501.7700", "679.8100", "Ver. 1.0, Ref. 1"}, {"c4", "h1", "1.1010", "345.0000", "-691.8900", "844.6000", "Ver. 1.0, Ref. 1"}, {"o2z", "si4", "1.6400", "350.1232", "-517.3424", "673.7067", "Ver. 1.0, Ref. 2"}, {"c3a", "o2", "1.3768", "428.8798", "-738.2350", "1114.9655", "Ver. 1.0, Ref. 3"}, {"c3a", "o2e", "1.3768", "428.8798", "-738.2351", "1114.9655", "Ver. 1.0, Ref. 3"}, {"c3a", "o2h", "1.3768", "428.8798", "-738.2351", "1114.9655", "Ver. 1.0, Ref. 3"}, {"c4", "o2e", "1.4200", "400.3954", "-835.1951", "1313.0142", "Ver. 1.0, Ref. 3"}, {"c4", "o2h", "1.4200", "400.3954", "-835.1951", "1313.0142", "Ver. 1.0, Ref. 3"}, {"h1", "o2h", "0.9494", "540.3633", "-1311.8663", "2132.4446", "Ver. 1.0, Ref. 3"}, {"c3a", "n2=", "1.4000", "350.0000", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "1.7890", "197.7020", "-332.2510", "325.7160", "Ver. 1.0, Ref. 4"}, {"c4", "n2=", "1.4740", "337.0600", "-147.3700", "213.6330", "Ver. 1.0, Ref. 4"}, {"c4", "p4=", "1.8000", "218.1400", "-329.5110", "290.3490", "Ver. 1.0, Ref. 4"}, {"cl1p", "p4=", "2.0000", "158.7770", "-239.1290", "210.0840", "Ver. 1.0, Ref. 4"}, {"f1p", "p4=", "1.5650", "340.0000", "-882.3840", "1197.9190", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "1.0310", "540.1120", "-1500.2952", "2431.0080", "Ver. 1.0, Ref. 4"}, {"h1", "p4=", "1.4300", "285.2040", "-575.6850", "677.8460", "Ver. 1.0, Ref. 4"}, {"n2=", "p4=", "1.5980", "393.0060", "-751.4050", "767.4310", "Ver. 1.0, Ref. 4"}, {"n3m", "p4=", "1.6780", "329.0000", "-713.7950", "902.9190", "Ver. 1.0, Ref. 4"}, {"o2", "p4=", "1.6000", "333.0980", "-726.6230", "924.6200", "Ver. 1.0, Ref. 4"}, {"h1h", "h1h", "0.7412", "414.2185", "-805.6549", "914.1296", "Ver. 1.0, Ref. 5"}, {"n1n", "n1n", "1.0977", "1651.3730", "-4069.3178", "5984.9629", "Ver. 1.0, Ref. 5"}, {"o1o", "o1o", "1.2074", "846.7150", "-2247.1760", "3478.9900", "Ver. 1.0, Ref. 5"}, {"c1o", "o1c", "1.1283", "1368.7676", "-3157.0007", "4247.5298", "Ver. 1.0, Ref. 5"}, {"n1o", "o1n", "1.1506", "1147.8362", "-3167.7349", "5099.5811", "Ver. 1.0, Ref. 5"}, {"o1=", "s2=", "1.4308", "730.8387", "-1531.7910", "1859.7753", "Ver. 1.0, Ref. 5"}, {"c2=", "o1=", "1.1600", "1161.3421", "-2564.5706", "3932.8735", "Ver. 1.0, Ref. 5"}, {"n2o", "o1=", "1.1930", "620.0000", "-1808.6018", "3077.5918", "Ver. 1.0, Ref. 5"}, {"c2=", "s1=", "1.5540", "559.0065", "-1348.6633", "1248.8604", "Ver. 1.0, Ref. 5"}, {"c3a", "n3o", "1.4300", "313.8329", "-568.6087", "600.9597", "Ver. 1.0, Ref. 6"}, {"c4", "n3o", "1.4740", "301.6051", "-535.7028", "555.0420", "Ver. 1.0, Ref. 6"}, {"c4", "o2n", "1.4350", "400.3954", "-835.1951", "1313.0142", "Ver. 1.0, Ref. 6"}, {"h1", "n3o", "1.0400", "439.9346", "-943.7307", "1180.9318", "Ver. 1.0, Ref. 6"}, {"n3o", "o1=", "1.2100", "765.0664", "-2070.2830", "2793.3218", "Ver. 1.0, Ref. 6"}, {"n3o", "o2n", "1.4020", "300.0000", "-1000.0000", "2000.0000", "Ver. 1.0, Ref. 6"}, {"c3'", "o2e", "1.3750", "368.7309", "-832.4784", "1274.0231", "Ver. 1.0, Ref. 7"}, {"c3'", "c4", "1.5140", "312.3719", "-465.8290", "473.8300", "Ver. 1.0, Ref. 7"}, {"c3'", "o1=", "1.2160", "823.7948", "-1878.7939", "2303.5310", "Ver. 1.0, Ref. 7"}, {"c3'", "c3a", "1.4890", "339.3574", "-655.7236", "670.2362", "Ver. 1.0, Ref. 7"}, {"c3'", "n3m", "1.3850", "359.1591", "-558.4730", "1146.3810", "Ver. 1.0, Ref. 7"}, {"c3a", "n3m", "1.3950", "344.0452", "-652.1208", "1022.2242", "Ver. 1.0, Ref. 7"}, {"n1z", "n1z", "1.1354", "1337.7450", "-2675.4900", "3121.4049", "Ver. 1.0, Ref. 9"}, {"n2z", "n2t", "1.2343", "720.3345", "-1542.6689", "1799.7804", "Ver. 1.0, Ref. 9"}, {"n2t", "n1z", "1.1354", "1198.7450", "-2675.4900", "3121.4049", "Ver. 1.0, Ref. 9"}, {"n2z", "c4", "1.4814", "324.4578", "-648.9156", "757.0681", "Ver. 1.0, Ref. 9"}, {"n2z", "h1", "1.0221", "440.1623", "-960.3246", "1120.3787", "Ver. 1.0, Ref. 9"}, {"c3a", "si4", "1.8634", "233.2433", "-276.8692", "161.6659", "Ver. 1.0, Ref. 10"}, {"c4", "si4", "1.8995", "189.6536", "-279.4210", "307.5135", "Ver. 1.0, Ref. 10"}, {"h1", "si4", "1.4783", "202.7798", "-305.3603", "280.2685", "Ver. 1.0, Ref. 10"}, {"si4", "si4", "2.3384", "114.2164", "-140.4212", "80.7084", "Ver. 1.0, Ref. 10"}, {"c4", "n3m", "1.4000", "350.0000", "0.0000", "0.0000", "Ver. 1.0, Ref. 10"}}; /* Quartic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= K3, 6= K4, 7= Compass info Delta = Theta - Theta0 E = K2 * Delta^2 + K3 * Delta^3 + K4 * Delta^4 With: - Theta = Angle - Theta0 = Equilibrium angle */ char * Compass_angles[94][8]= {{"c3a", "c3a", "c3a", "118.9000", "61.0226", "-34.9931", "0.0000", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c4", "120.0500", "44.7148", "-22.7352", "0.0000", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "h1", "117.9400", "35.1558", "-12.4682", "0.0000", "Ver. 1.0, Ref. 1"}, {"c3a", "c4", "c3a", "111.0000", "44.3234", "-9.4454", "0.0000", "Ver. 1.0, Ref. 1"}, {"c3a", "c4", "c4", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.0, Ref. 1"}, {"c3a", "c4", "h1", "111.0000", "44.3234", "-9.4454", "0.0000", "Ver. 1.0, Ref. 1"}, {"c4", "c4", "c4", "112.6700", "39.5160", "-7.4430", "-9.5583", "Ver. 1.0, Ref. 1"}, {"c4", "c4", "h1", "110.7700", "41.4530", "-10.6040", "5.1290", "Ver. 1.0, Ref. 1"}, {"h1", "c4", "h1", "107.6600", "39.6410", "-12.9210", "-2.4318", "Ver. 1.0, Ref. 1"}, {"h1", "o2z", "si4", "122.8000", "23.7764", "-19.8152", "9.6331", "Ver. 1.0, Ref. 2"}, {"si4", "o2z", "si4", "159.0000", "8.5000", "-13.4188", "-4.1785", "Ver. 1.0, Ref. 2"}, {"c3a", "si4", "o2z", "114.9060", "23.0218", "-31.3993", "24.9814", "Ver. 1.0, Ref. 2"}, {"c4", "si4", "o2z", "114.9060", "23.0218", "-31.3993", "24.9814", "Ver. 1.0, Ref. 2"}, {"h1", "si4", "o2z", "107.4000", "57.6643", "-10.6506", "4.6274", "Ver. 1.0, Ref. 2"}, {"o2z", "si4", "o2z", "110.7000", "70.3069", "-6.9375", "0.0000", "Ver. 1.0, Ref. 2"}, {"c3a", "c3a", "o2", "123.4200", "73.6781", "-21.6787", "0.0000", "Ver. 1.0, Ref. 3"}, {"c4", "c4", "o2", "111.2700", "54.5381", "-8.3642", "-13.0838", "Ver. 1.0, Ref. 3"}, {"h1", "c4", "o2", "108.7280", "58.5446", "-10.8088", "-12.4006", "Ver. 1.0, Ref. 3"}, {"c3a", "o2", "c4", "102.9695", "38.9739", "-6.2595", "-8.1710", "Ver. 1.0, Ref. 3"}, {"c3a", "o2", "h1", "108.1900", "53.1250", "-8.5016", "0.0000", "Ver. 1.0, Ref. 3"}, {"c4", "o2", "c4", "104.5000", "35.7454", "-10.0067", "-6.2729", "Ver. 1.0, Ref. 3"}, {"c4", "o2", "h1", "105.8000", "52.7061", "-12.1090", "-9.8681", "Ver. 1.0, Ref. 3"}, {"c3a", "c3a", "n2=", "120.0000", "60.0000", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"c3a", "c3a", "p4=", "120.0010", "47.8410", "-15.2290", "-10.9070", "Ver. 1.0, Ref. 4"}, {"c4", "c4", "n2=", "117.3170", "55.2420", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "n2=", "107.4990", "62.7310", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "p4=", "110.8860", "33.8300", "-7.0430", "-7.2460", "Ver. 1.0, Ref. 4"}, {"c4", "n2=", "h1", "117.2000", "37.2620", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "h1", "110.9100", "31.0910", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "p4=", "120.0000", "26.0680", "-8.2980", "-5.9430", "Ver. 1.0, Ref. 4"}, {"p4=", "n2=", "p4=", "135.0000", "23.8680", "-8.7360", "0.0000", "Ver. 1.0, Ref. 4"}, {"c4", "n3m", "p4=", "120.0830", "25.0010", "-6.1170", "-5.4570", "Ver. 1.0, Ref. 4"}, {"h1", "n3m", "p4=", "120.0830", "25.0010", "-6.1170", "-5.4570", "Ver. 1.0, Ref. 4"}, {"c4", "o2", "p4=", "118.2830", "35.0010", "-10.3600", "-7.8700", "Ver. 1.0, Ref. 4"}, {"h1", "o2", "p4=", "117.0000", "26.0310", "-5.8280", "-5.6200", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "c3a", "110.2310", "56.1850", "-17.3160", "-12.7280", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "h1", "108.2310", "36.1850", "-6.4880", "-7.6460", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "n2=", "109.6000", "63.0620", "-19.7400", "-14.3290", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "n3m", "108.1650", "70.9770", "-11.5480", "-15.1090", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "o2", "107.3650", "71.9770", "-10.9430", "-15.2900", "Ver. 1.0, Ref. 4"}, {"c4", "p4=", "c4", "102.5000", "48.2320", "-5.7980", "-9.9660", "Ver. 1.0, Ref. 4"}, {"c4", "p4=", "h1", "102.9000", "52.0710", "-6.4680", "-10.7730", "Ver. 1.0, Ref. 4"}, {"c4", "p4=", "n2=", "119.3000", "47.3660", "-14.6410", "-10.7360", "Ver. 1.0, Ref. 4"}, {"h1", "p4=", "h1", "101.4080", "39.6950", "-5.1340", "-8.2270", "Ver. 1.0, Ref. 4"}, {"h1", "p4=", "n2=", "110.0330", "45.9780", "-14.0520", "-10.3990", "Ver. 1.0, Ref. 4"}, {"h1", "p4=", "n3m", "103.9780", "68.2570", "-9.2210", "-14.1740", "Ver. 1.0, Ref. 4"}, {"h1", "p4=", "o2", "103.9780", "73.2570", "-9.8970", "-15.2120", "Ver. 1.0, Ref. 4"}, {"n2=", "p4=", "n2=", "125.0000", "90.5230", "-20.8010", "-19.6020", "Ver. 1.0, Ref. 4"}, {"n2=", "p4=", "n3m", "123.2150", "89.9230", "-32.6120", "-21.0960", "Ver. 1.0, Ref. 4"}, {"n2=", "p4=", "o2", "112.2150", "99.9230", "-32.0930", "-22.8210", "Ver. 1.0, Ref. 4"}, {"n3m", "p4=", "n3m", "107.1000", "85.7690", "-5.7790", "-17.4890", "Ver. 1.0, Ref. 4"}, {"n3m", "p4=", "o2", "108.3000", "86.7690", "-5.1750", "-17.6710", "Ver. 1.0, Ref. 4"}, {"o2", "p4=", "o2", "107.5000", "86.7690", "-4.5700", "-17.8520", "Ver. 1.0, Ref. 4"}, {"o1=", "c2=", "o1=", "180.0000", "57.1000", "0.0000", "0.0000", "Ver. 1.0, Ref. 5"}, {"s1=", "c2=", "s1=", "180.0000", "48.0000", "0.0000", "0.0000", "Ver. 1.0, Ref. 5"}, {"o1=", "n2o", "o1=", "134.1000", "150.0000", "-82.1013", "-40.0005", "Ver. 1.0, Ref. 5"}, {"o1=", "s2=", "o1=", "119.3000", "115.2627", "-35.6278", "-26.1261", "Ver. 1.0, Ref. 5"}, {"c3a", "c3a", "n3o", "118.8000", "29.2436", "-8.8495", "-6.6020", "Ver. 1.0, Ref. 6"}, {"h1", "c4", "n3o", "107.0000", "54.9318", "-9.1333", "-11.5434", "Ver. 1.0, Ref. 6"}, {"h1", "c4", "o2n", "108.7280", "58.5446", "-10.8088", "-12.4006", "Ver. 1.0, Ref. 6"}, {"c3a", "n3o", "o1=", "117.7000", "63.9404", "-18.4524", "-14.3129", "Ver. 1.0, Ref. 6"}, {"c4", "n3o", "o1=", "117.5000", "64.5228", "-18.4582", "-14.4215", "Ver. 1.0, Ref. 6"}, {"h1", "n3o", "o1=", "115.7000", "53.8034", "-14.1991", "-11.8708", "Ver. 1.0, Ref. 6"}, {"o1=", "n3o", "o1=", "128.0000", "95.1035", "-47.4240", "-27.9164", "Ver. 1.0, Ref. 6"}, {"c4", "o2n", "n3o", "108.5000", "55.7454", "-10.0067", "-6.2729", "Ver. 1.0, Ref. 6"}, {"c4", "c4", "o2n", "105.0000", "54.5381", "-8.3642", "-13.0838", "Ver. 1.0, Ref. 6"}, {"o2n", "n3o", "o1=", "112.8000", "85.5228", "-18.4582", "-14.4215", "Ver. 1.0, Ref. 6"}, {"c3'", "o2", "c4", "109.0000", "38.9739", "-6.2595", "-8.1710", "Ver. 1.0, Ref. 7"}, {"c3'", "c4", "h1", "107.8594", "38.0833", "-17.5074", "0.0000", "Ver. 1.0, Ref. 7"}, {"c3'", "n3m", "c3'", "121.9556", "76.3105", "-26.3166", "-17.6944", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "c3'", "116.0640", "71.2598", "-15.8273", "2.0506", "Ver. 1.0, Ref. 7"}, {"c3a", "c3'", "n3m", "108.4400", "84.8377", "-19.9640", "2.7405", "Ver. 1.0, Ref. 7"}, {"c3a", "c3'", "o1=", "125.5320", "72.3167", "-16.0650", "2.0818", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "n3m", "120.7640", "73.2738", "-27.4033", "13.3920", "Ver. 1.0, Ref. 7"}, {"c3a", "n3m", "c3'", "120.0700", "47.1131", "-32.5592", "13.1257", "Ver. 1.0, Ref. 7"}, {"o1=", "c3'", "o2", "118.9855", "98.6813", "-22.2485", "10.3673", "Ver. 1.0, Ref. 7"}, {"o1=", "c3'", "c4", "119.3000", "65.1016", "-17.9766", "0.0000", "Ver. 1.0, Ref. 7"}, {"o2", "c3'", "c4", "100.3182", "88.8631", "-3.8323", "-7.9802", "Ver. 1.0, Ref. 7"}, {"n3m", "c3'", "o1=", "121.5420", "92.5720", "-34.4800", "-11.1871", "Ver. 1.0, Ref. 7"}, {"n2z", "n2t", "n1z", "171.6211", "47.7899", "0.0000", "0.0000", "Ver. 1.0, Ref. 9"}, {"n2t", "n2z", "h1", "110.0345", "55.7635", "0.6618", "0.0022", "Ver. 1.0, Ref. 9"}, {"n2t", "n2z", "c4", "113.5017", "82.6294", "0.9845", "0.0033", "Ver. 1.0, Ref. 9"}, {"n2z", "c4", "h1", "107.9744", "52.7803", "0.6615", "0.0023", "Ver. 1.0, Ref. 9"}, {"n2z", "c4", "c4", "110.9900", "77.9387", "0.9499", "0.0033", "Ver. 1.0, Ref. 9"}, {"c3a", "c3a", "si4", "120.0000", "30.4689", "-23.5439", "0.0000", "Ver. 1.0, Ref. 10"}, {"c4", "c4", "si4", "112.6700", "39.5160", "-7.4430", "0.0000", "Ver. 1.0, Ref. 10"}, {"h1", "c4", "si4", "112.0355", "28.7721", "-13.9523", "0.0000", "Ver. 1.0, Ref. 10"}, {"c3a", "si4", "h1", "109.5932", "41.9497", "-42.3639", "48.1442", "Ver. 1.0, Ref. 10"}, {"c4", "si4", "c4", "113.1855", "36.2069", "-20.3939", "20.0172", "Ver. 1.0, Ref. 10"}, {"c4", "si4", "h1", "112.0977", "36.4832", "-12.8094", "0.0000", "Ver. 1.0, Ref. 10"}, {"h1", "si4", "h1", "108.6051", "32.5415", "-8.3164", "0.0000", "Ver. 1.0, Ref. 10"}, {"c4", "si4", "si4", "113.0000", "19.4692", "-34.3471", "0.0000", "Ver. 1.0, Ref. 10"}, {"h1", "si4", "si4", "112.0893", "22.5062", "-11.5926", "0.0000", "Ver. 1.0, Ref. 10"}, {"si4", "si4", "si4", "114.2676", "24.9501", "-19.5949", "0.0000", "Ver. 1.0, Ref. 10"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= V1, 5= Phi0, 6= V2, 7= Phi0, 8= V3, 9= Phi0, 10= Compass info E = SUM(n=1,3) { V(n) * [ 1 - cos(n*Phi - Phi0(n)) ] } With: - Phi0 = Equilibrium angle */ char * Compass_torsions[95][11]= {{"c3a", "c3a", "c3a", "c3a", "8.3667", "0.0", "1.2000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c3a", "c4", "0.0000", "0.0", "4.4072", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c3a", "h1", "0.0000", "0.0", "3.9661", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c4", "c3a", "c3a", "h1", "0.0000", "0.0", "1.5590", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h1", "c3a", "c3a", "h1", "0.0000", "0.0", "2.3500", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c4", "c3a", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c4", "c4", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c4", "h1", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c4", "c4", "h1", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.0, Ref. 1"}, {"c4", "c4", "c4", "c4", "0.0000", "0.0", "0.0514", "0.0", "-0.1430", "0.0", "Ver. 1.0, Ref. 1"}, {"c4", "c4", "c4", "h1", "0.0000", "0.0", "0.0316", "0.0", "-0.1681", "0.0", "Ver. 1.0, Ref. 1"}, {"h1", "c4", "c4", "h1", "-0.1432", "0.0", "0.0617", "0.0", "-0.1530", "0.0", "Ver. 1.0, Ref. 1"}, {"*", "c3a", "c3a", "*", "0.0000", "0.0", "4.5000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"*", "c4", "c4", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.1530", "0.0", "Ver. 1.0, Ref. 1"}, {"h1", "o2z", "si4", "c4", "0.0000", "0.0", "0.0000", "0.0", "-0.0500", "0.0", "Ver. 1.0, Ref. 2"}, {"h1", "o2z", "si4", "h1", "0.0000", "0.0", "0.0000", "0.0", "-0.0500", "0.0", "Ver. 1.0, Ref. 2"}, {"h1", "o2z", "si4", "o2z", "0.0000", "0.0", "0.0000", "0.0", "-0.0500", "0.0", "Ver. 1.0, Ref. 2"}, {"si4", "o2z", "si4", "c4", "0.0000", "0.0", "0.0000", "0.0", "-0.0100", "0.0", "Ver. 1.0, Ref. 2"}, {"si4", "o2z", "si4", "h1", "0.0000", "0.0", "0.0000", "0.0", "-0.0100", "0.0", "Ver. 1.0, Ref. 2"}, {"si4", "o2z", "si4", "o2z", "-0.2250", "0.0", "0.0000", "0.0", "-0.0100", "0.0", "Ver. 1.0, Ref. 2"}, {"*", "o2z", "si4", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.0100", "0.0", "Ver. 1.0, Ref. 2"}, {"c3a", "c3a", "c3a", "o2", "0.0000", "0.0", "4.8498", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 3"}, {"h1", "c3a", "c3a", "o2", "0.0000", "0.0", "1.7234", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 3"}, {"c3a", "c3a", "o2", "c4", "0.0000", "0.0", "1.5000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 3"}, {"c3a", "c3a", "o2", "h1", "-0.6900", "0.0", "0.5097", "0.0", "0.0095", "0.0", "Ver. 1.0, Ref. 3"}, {"c4", "c4", "c4", "o2", "0.7137", "0.0", "0.2660", "0.0", "-0.2545", "0.0", "Ver. 1.0, Ref. 3"}, {"h1", "c4", "c4", "o2", "-0.1435", "0.0", "0.2530", "0.0", "-0.0905", "0.0", "Ver. 1.0, Ref. 3"}, {"o2", "c4", "c4", "o2", "1.1000", "0.0", "-0.0500", "0.0", "-0.1441", "0.0", "Ver. 1.0, Ref. 3"}, {"c4", "c4", "o2", "c4", "-0.4000", "0.0", "-0.4028", "0.0", "-0.2450", "0.0", "Ver. 1.0, Ref. 3"}, {"c4", "c4", "o2", "h1", "-0.6732", "0.0", "-0.4778", "0.0", "-0.1670", "0.0", "Ver. 1.0, Ref. 3"}, {"h1", "c4", "o2", "c3a", "0.9513", "0.0", "0.1155", "0.0", "0.0720", "0.0", "Ver. 1.0, Ref. 3"}, {"h1", "c4", "o2", "c4", "0.5302", "0.0", "0.0000", "0.0", "-0.3966", "0.0", "Ver. 1.0, Ref. 3"}, {"h1", "c4", "o2", "h1", "0.1863", "0.0", "-0.4338", "0.0", "-0.2121", "0.0", "Ver. 1.0, Ref. 3"}, {"c3a", "c3a", "c3a", "p4=", "0.0000", "0.0", "5.4770", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "c3a", "c3a", "p4=", "0.0000", "0.0", "2.2700", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"c3a", "c3a", "p4=", "h1", "-0.2720", "0.0", "1.1900", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"c3a", "c3a", "p4=", "n2=", "-0.2720", "0.0", "1.1900", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"c4", "c4", "c4", "n2=", "0.0970", "0.0", "0.0720", "0.0", "-0.2580", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "c4", "n2=", "-0.1510", "0.0", "0.0100", "0.0", "-0.1860", "0.0", "Ver. 1.0, Ref. 4"}, {"c4", "c4", "n2=", "h1", "-5.0720", "0.0", "-0.4980", "0.0", "-0.4380", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "n2=", "h1", "1.2660", "0.0", "-0.7740", "0.0", "0.0380", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "p4=", "c4", "0.0000", "0.0", "0.0000", "0.0", "-0.0680", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "p4=", "h1", "0.0000", "0.0", "0.0000", "0.0", "-0.0680", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "p4=", "n2=", "0.0000", "0.0", "0.0000", "0.0", "-0.0680", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "p4=", "c3a", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "p4=", "c4", "0.0000", "0.0", "0.0000", "0.0", "-0.3690", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "p4=", "h1", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "p4=", "o2", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 1.0, Ref. 4"}, {"p4=", "n2=", "p4=", "h1", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"p4=", "n2=", "p4=", "n2=", "1.8000", "0.0", "0.5000", "0.0", "2.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n3m", "p4=", "h1", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n3m", "p4=", "n2=", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n3m", "p4=", "o2", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "o2", "p4=", "h1", "5.7080", "0.0", "2.1180", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "o2", "p4=", "n2=", "5.7080", "0.0", "2.1180", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "o2", "p4=", "o2", "5.7080", "0.0", "2.1180", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "o2", "p4=", "*", "5.7080", "0.0", "2.1180", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "c3a", "n2=", "*", "0.0000", "0.0", "1.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "c3a", "p4=", "*", "-0.2720", "0.0", "1.1900", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "c4", "n2=", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.0200", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "c4", "p4=", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.0680", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "n2=", "p4=", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "n3m", "p4=", "*", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"c3a", "c3a", "c3a", "n3o", "0.0000", "0.0", "7.2124", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 6"}, {"h1", "c3a", "c3a", "n3o", "0.0000", "0.0", "2.9126", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 6"}, {"c3a", "c3a", "n3o", "o1=", "0.0000", "0.0", "1.1600", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 6"}, {"c4", "c4", "n3o", "o1=", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 1.0, Ref. 6"}, {"h1", "c4", "n3o", "o1=", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 1.0, Ref. 6"}, {"c4", "c4", "o2", "n3o", "0.0000", "0.0", "-0.4000", "0.0", "-0.2000", "0.0", "Ver. 1.0, Ref. 6"}, {"o1=", "n3o", "o2", "c4", "0.0000", "0.0", "2.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 6"}, {"c3'", "c3a", "c3a", "c3a", "0.0000", "0.0", "4.6282", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "c3a", "c3a", "h1", "0.0000", "0.0", "2.1670", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "n3m", "c3a", "c3a", "0.0000", "0.0", "0.6500", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "n3m", "c3'", "o1c", "-0.4066", "0.0", "1.2513", "0.0", "-0.7507", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "o2", "c4", "c4", "0.1302", "0.0", "-0.3250", "0.0", "0.1134", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "o2", "c4", "h1", "0.9513", "0.0", "0.1155", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "c3'", "o1=", "0.0000", "0.0", "0.7800", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "c3a", "n3m", "0.0000", "0.0", "3.4040", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "n3m", "c3'", "o1=", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c4", "o2", "c3'", "c4", "-2.5594", "0.0", "2.2013", "0.0", "0.0325", "0.0", "Ver. 1.0, Ref. 7"}, {"c4", "o2", "c3'", "o1=", "0.8905", "0.0", "3.2644", "0.0", "0.2646", "0.0", "Ver. 1.0, Ref. 7"}, {"o1=", "c3'", "c4", "h1", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"o2", "c3'", "c4", "h1", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"n3m", "c3a", "c3a", "h1", "0.0000", "0.0", "3.4040", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"h1", "n2z", "n2t", "n1z", "0.0000", "0.0", "0.0000", "0.0", "-0.2637", "0.0", "Ver. 1.0, Ref. 9"}, {"c4", "n2z", "n2t", "n1z", "0.0000", "0.0", "0.0000", "0.0", "-0.1823", "0.0", "Ver. 1.0, Ref. 9"}, {"n2t", "n2z", "c4", "h1", "0.0000", "0.0", "0.0000", "0.0", "-0.2181", "0.0", "Ver. 1.0, Ref. 9"}, {"n2t", "n2z", "c4", "c4", "0.0000", "0.0", "0.0000", "0.0", "-0.2021", "0.0", "Ver. 1.0, Ref. 9"}, {"n2z", "c4", "c4", "h1", "0.0000", "0.0", "0.0000", "0.0", "-0.2259", "0.0", "Ver. 1.0, Ref. 9"}, {"c3a", "c3a", "c3a", "si4", "0.0000", "0.0", "4.3270", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 10"}, {"h1", "c3a", "c3a", "si4", "0.0000", "0.0", "1.5093", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 10"}, {"c3a", "c3a", "si4", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.0231", "0.0", "Ver. 1.0, Ref. 10"}, {"c4", "c4", "si4", "si4", "-0.3500", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 1.0, Ref. 10"}, {"*", "c4", "si4", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 1.0, Ref. 10"}, {"*", "si4", "si4", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 1.0, Ref. 10"}}; /* Inversions 0, 1, 2, 3 = Keys, 4= K, 5= Chi0, 6= Compass info E = K * (Chi - Chi0)^2 */ char * Compass_inversions[22][7]= {{"c3a", "c3a", "c3a", "c3a", "7.1794", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c3a", "c4", "7.8153", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c3a", "h1", "4.8912", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c3a", "o2", "13.0421", "0.0", "Ver. 1.0, Ref. 3"}, {"c3a", "c3a", "c3a", "n2=", "8.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"c3a", "c3a", "c3a", "p4=", "6.7090", "0.0", "Ver. 1.0, Ref. 4"}, {"c3a", "c3a", "c3a", "n3o", "0.9194", "0.0", "Ver. 1.0, Ref. 6"}, {"c3a", "n3o", "o1=", "o1=", "36.2612", "0.0", "Ver. 1.0, Ref. 6"}, {"c4", "n3o", "o1=", "o1=", "44.3062", "0.0", "Ver. 1.0, Ref. 6"}, {"h1", "n3o", "o1=", "o1=", "38.5581", "0.0", "Ver. 1.0, Ref. 6"}, {"o1=", "n3o", "o1=", "o2", "45.0000", "0.0", "Ver. 1.0, Ref. 6"}, {"c3'", "c3'", "n3m", "c3a", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "c3a", "c3a", "c3a", "17.0526", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "n3m", "c3'", "c3a", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "n3m", "c3a", "17.0526", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "c3a", "n3m", "17.0526", "0.0", "Ver. !1.0, Ref. 7"}, {"c3a", "c3'", "n3m", "o1=", "30.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "c3'", "c3a", "17.0526", "0.0", "Ver. !1.0, Ref. 7"}, {"c3a", "c3'", "o1=", "n3m", "30.0000", "0.0", "Ver. !1.0, Ref. 7"}, {"c3a", "o1=", "c3'", "n3m", "30.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c4", "c3'", "o2", "o1=", "46.9264", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "si4", "c3a", "5.3654", "0.0", "Ver. 1.0, Ref. 10"}}; /* Non-bonded (9-6) 0= Key, 1= r, 2= eps, 3= Compass info E = eps(ij) [2(R(ij)/r(ij))^9 - 3(R(ij)/r(ij))^6] where R(ij) = [(r(i)^6 + r(j)^6))/2]^(1/6) eps(ij) = 2 sqrt(eps(i) * eps(j)) * r(i)^3 * r(j)^3/[r(i)^6 + r(j)^6] */ char * Compass_vdw[46][4]= {{"c3a", "3.9150", "0.0680", "Ver. 1.0, Ref. 1"}, {"c4", "3.8540", "0.0620", "Ver. 1.0, Ref. 1"}, {"c43", "3.8540", "0.0400", "Ver. 1.0, Ref. 1"}, {"c44", "3.8540", "0.0200", "Ver. 1.0, Ref. 1"}, {"h1", "2.8780", "0.0230", "Ver. 1.0, Ref. 1"}, {"o2z", "3.3000", "0.0800", "Ver. 1.0, Ref. 2"}, {"si4", "4.4050", "0.1980", "Ver. 1.0, Ref. 2"}, {"si4c", "4.2900", "0.1310", "Ver. 1.0, Ref. 2"}, {"c4o", "3.8150", "0.0680", "Ver. 1.0, Ref. 3"}, {"h1o", "1.0870", "0.0080", "Ver. 1.0, Ref. 3"}, {"o2", "3.3000", "0.0800", "Ver. 1.0, Ref. 3"}, {"o2e", "3.3000", "0.1200", "Ver. 1.0, Ref. 3"}, {"o2h", "3.5800", "0.0960", "Ver. 1.0, Ref. 3"}, {"n2=", "3.8300", "0.0960", "Ver. 1.0, Ref. 4"}, {"p4=", "4.2950", "0.0650", "Ver. 1.0, Ref. 4"}, {"he", "2.9000", "0.0050", "Ver. 1.0, Ref. 5"}, {"ne", "3.2000", "0.0550", "Ver. 1.0, Ref. 5"}, {"ar", "3.8800", "0.2000", "Ver. 1.0, Ref. 5"}, {"kr", "4.3000", "0.2800", "Ver. 1.0, Ref. 5"}, {"xe", "4.2600", "0.3900", "Ver. 1.0, Ref. 5"}, {"h1h", "1.4210", "0.0216", "Ver. 1.0, Ref. 5"}, {"n1n", "3.8008", "0.0598", "Ver. 1.0, Ref. 5"}, {"c1o", "4.0120", "0.0530", "Ver. 1.0, Ref. 5"}, {"o1o", "3.4758", "0.0780", "Ver. 1.0, Ref. 5"}, {"o1c", "3.6020", "0.0850", "Ver. 1.0, Ref. 5"}, {"n1o", "3.4600", "0.1280", "Ver. 1.0, Ref. 5"}, {"o1n", "3.3000", "0.1560", "Ver. 1.0, Ref. 5"}, {"c2=", "3.9150", "0.0680", "Ver. 1.0, Ref. 5"}, {"s2=", "4.0470", "0.1250", "Ver. 1.0, Ref. 5"}, {"n2o", "3.5290", "0.3330", "Ver. 1.0, Ref. 5"}, {"o1=", "3.4300", "0.1920", "Ver. 1.0, Ref. 5"}, {"o1=*", "3.3600", "0.0670", "Ver. 1.0, Ref. 5"}, {"s1=", "4.0070", "0.3130", "Ver. 1.0, Ref. 5"}, {"n3o", "3.7600", "0.0480", "Ver. 1.0, Ref. 6"}, {"o12", "3.4000", "0.0480", "Ver. 1.0, Ref. 6"}, {"o2n", "3.6500", "0.2000", "Ver. 1.0, Ref. 6"}, {"c3'", "3.9000", "0.0640", "Ver. 1.0, Ref. 7"}, {"n3m", "3.7200", "0.1500", "Ver. 1.0, Ref. 7"}, {"o2s", "3.3000", "0.0960", "Ver. 1.0, Ref. 7"}, {"c4o", "3.8700", "0.0748", "Ver. 1.1, Ref. 8"}, {"c41o", "3.8700", "0.1080", "Ver. 1.1, Ref. 8"}, {"c43o", "3.8150", "0.0680", "Ver. 1.2, Ref. 10"}, {"c4z", "3.6500", "0.0800", "Ver. 1.0, Ref. 9"}, {"n1z", "3.5200", "0.0850", "Ver. 1.0, Ref. 9"}, {"n2t", "3.3000", "0.0500", "Ver. 1.0, Ref. 9"}, {"n2z", "3.4000", "0.1200", "Ver. 1.0, Ref. 9"}}; /* Bond increments To implement atomic charges */ char * Compass_bond_increments[55][5]= {{"c3a", "c3a", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c3a", "c4", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c3a", "h1", "-0.1268", "0.1268", "Ver. 1.0, Ref. 1"}, {"c4", "c4", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c4", "h1", "-0.0530", "0.0530", "Ver. 1.0, Ref. 1"}, {"o2z", "si4", "-0.2225", "0.2225", "Ver. 1.0, Ref. 2"}, {"c3a", "o2e", "0.0420", "-0.0420", "Ver. 1.0, Ref. 3"}, {"c3a", "o2h", "0.0420", "-0.0420", "Ver. 1.0, Ref. 3"}, {"c4", "o2e", "0.1600", "-0.1600", "Ver. 1.0, Ref. 3"}, {"c4", "o2h", "0.1600", "-0.1600", "Ver. 1.0, Ref. 3"}, {"h1", "o2", "0.4200", "-0.4200", "Ver. 1.0, Ref. 3"}, {"h1", "o2h", "0.4200", "-0.4200", "Ver. 1.0, Ref. 3"}, {"c3a", "n2=", "0.1990", "-0.1990", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "-0.0600", "0.0600", "Ver. 1.0, Ref. 4"}, {"c4", "n2=", "0.3450", "-0.3450", "Ver. 1.0, Ref. 4"}, {"c4", "p4=", "-0.0500", "0.0500", "Ver. 1.0, Ref. 4"}, {"cl1p", "p4=", "-0.1200", "0.1200", "Ver. 1.0, Ref. 4"}, {"f1p", "p4=", "-0.1800", "0.1800", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "0.3280", "-0.3280", "Ver. 1.0, Ref. 4"}, {"h1", "p4=", "-0.0500", "0.0500", "Ver. 1.0, Ref. 4"}, {"n2=", "n2=", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"n2=", "n3", "0.0250", "-0.0250", "Ver. 1.0, Ref. 4"}, {"n2=", "o2", "-0.0430", "0.0430", "Ver. 1.0, Ref. 4"}, {"n2=", "p4=", "-0.3500", "0.3500", "Ver. 1.0, Ref. 4"}, {"n3", "p4=", "-0.1200", "0.1200", "Ver. 1.0, Ref. 4"}, {"o2", "p4=", "-0.1400", "0.1400", "Ver. 1.0, Ref. 4"}, {"c1o", "o1c", "-0.0203", "0.0203", "Ver. 1.0, Ref. 5"}, {"c2=", "o1=", "0.4000", "-0.4000", "Ver. 1.0, Ref. 5"}, {"c2=", "s1=", "0.0258", "-0.0258", "Ver. 1.0, Ref. 5"}, {"n2o", "o1=", "0.0730", "-0.0730", "Ver. 1.0, Ref. 5"}, {"h1h", "h1h", "0.0000", "0.0000", "Ver. 1.0, Ref. 5"}, {"n1n", "n1n", "0.0000", "0.0000", "Ver. 1.0, Ref. 5"}, {"n1o", "o1n", "0.0288", "-0.0288", "Ver. 1.0, Ref. 5"}, {"o1=", "s2=", "-0.2351", "0.2351", "Ver. 1.0, Ref. 5"}, {"o1o", "o1o", "0.0000", "0.0000", "Ver. 1.0, Ref. 5"}, {"c3a", "n3o", "0.2390", "-0.2390", "Ver. 1.0, Ref. 6"}, {"c4", "n3o", "0.2100", "-0.2100", "Ver. 1.0, Ref. 6"}, {"c4", "o2n", "0.3170", "-0.3170", "Ver. 1.0, Ref. 6"}, {"h1", "n3o", "0.1880", "-0.1880", "Ver. 1.0, Ref. 6"}, {"n3o", "o1=", "0.4280", "-0.4280", "Ver. 1.0, Ref. 6"}, {"n3o", "o2n", "0.0010", "-0.0010", "Ver. 1.0, Ref. 6"}, {"c3'", "o2e", "0.1120", "-0.1120", "Ver. 1.0, Ref. 7"}, {"c3'", "c4", "0.0000", "0.0000", "Ver. 1.0, Ref. 7"}, {"c3'", "o1=", "0.4500", "-0.4500", "Ver. 1.0, Ref. 7"}, {"c3'", "c3a", "0.0350", "-0.0350", "Ver. 1.0, Ref. 7"}, {"c3'", "n3m", "0.0000", "0.0000", "Ver. 1.0, Ref. 7"}, {"c3a", "n3m", "0.0950", "-0.0950", "Ver. 1.0, Ref. 7"}, {"h1", "o2h", "0.4100", "-0.4100", "Ver. 1.1, Ref. 8"}, {"n2z", "c4", "-0.3110", "0.3110", "Ver. 1.0, Ref. 9"}, {"n2z", "h1", "-0.3350", "0.3350", "Ver. 1.0, Ref. 9"}, {"n2t", "n1t", "0.3860", "-0.3860", "Ver. 1.0, Ref. 9"}, {"n2t", "n2z", "0.2470", "-0.2470", "Ver. 1.0, Ref. 9"}, {"c3a", "si4", "-0.1170", "0.1170", "Ver. 1.0, Ref. 10"}, {"c4", "si4", "-0.1350", "0.1350", "Ver. 1.0, Ref. 10"}, {"h1", "si4", "-0.1260", "0.1260", "Ver. 1.0, Ref. 10"}}; atomes_1.3.1/src/calc/force_fields/oplsaap.c0000664000175000017500000062147115212624223020440 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file oplsaap.c * @short OPLSAAM force field * @author Sébastien Le Roux */ /* * This file: 'oplsaap.c' * * Contains: * OPLSAAM force field This file contains several tables: Atoms : OPLSAAM_atoms[78][4] Bonds : OPLSAAM_bonds[159][4] Angles : OPLSAAM_angles[437][5] Dihedrals : OPLSAAM_dihedrals[1446][7] Impropers : OPLSAAM_impropers[105][[7] Non bonded : OPLSAAM_vdw[78][7] */ #include "global.h" /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= OPLSAAM info */ int OPLSAAM_objects[14] = {78, 0, 0, 159, 0, 0, 437, 0, 1446, 0 , 0, 105, 78, 0}; int OPLSAAM_dim[14] = {4, 0, 0, 4, 0, 0, 5, 0, 7, 0, 0, 7, 7, 0}; /* Atoms */ char * OPLSAAM_atoms[78][4]= {{"C", "12.01100", "C135", "CH3 all-atom C: alkanes ALL-ATOM "}, {"C", "12.01100", "C136", "CH2 all-atom C: alkanes PARAMETERS"}, {"C", "12.01100", "C137", "CH all-atom C: alkanes FROM HERE ON"}, {"C", "12.01100", "C145", "Benzene C - 12 site JACS,112,4768-90"}, {"C", "12.01100", "C149", "all-atom C: CH2, ethyl benzene"}, {"C", "12.01100", "C157", "all-atom C: CH3 and CH2, alcohols"}, {"C", "12.01100", "C158", "all-atom C: CH, alcohols"}, {"C", "12.01100", "C166", "C(OH) phenol Use with all"}, {"C", "12.01100", "C206", "all-atom C: CH2, thiols"}, {"C", "12.01100", "C209", "all-atom C: CH3, sulfides"}, {"C", "12.01100", "C210", "all-atom C: CH2, sulfides"}, {"C", "12.01100", "C214", "all-atom C: CH2, disulfides"}, {"C", "12.01100", "C223", "C in RCH2NH2 and Gly CA (See 900 for amines)"}, {"C", "12.01100", "C224", "C in R2CHNH2 and Ala CA"}, {"C", "12.01100", "C235", "C: C=O in amide. Acyl R in amides"}, {"C", "12.01100", "C242", "C on N: secondary N-Me amide"}, {"C", "12.01100", "C245", "C on N: tertiary N-CH2R amide (Pro Cdelta)"}, {"C", "12.01100", "C246", "C on N: tertiary N-CHR2 amide (Pro Calpha)"}, {"C", "12.01100", "C267", "Co in CCOOH carboxylic acid"}, {"C", "12.01100", "C271", "C in COO- carboxylate"}, {"C", "12.01100", "C274", "C: CH2, carboxylate ion"}, {"C", "12.01100", "C283", "AA C-alpha on C-terminal ALA"}, {"C", "12.01100", "C284", "AA C-alpha on C-terminal GLY"}, {"C", "12.01100", "C285", "AA C-alpha on C-terminal PRO"}, {"C", "12.01100", "C292", "C in RCH2NH3+ and CA in N-term Gly"}, {"C", "12.01100", "C293", "C in R2CHNH3+ and CA in N-term Ala, etc."}, {"C", "12.01100", "C295", "AA:C-alpha in N-term PRO"}, {"C", "12.01100", "C296", "AA:C-delta in N-term PRO"}, {"C", "12.01100", "C302", "C: guanidinium C+"}, {"C", "12.01100", "C307", "C: CH2(D), ARG, ethylguanidinium"}, {"C", "12.01100", "C308", "C: CH2(G), ARG"}, {"C", "12.01100", "C500", "CG in TRP"}, {"C", "12.01100", "C501", "CD C in TRP"}, {"C", "12.01100", "C502", "CE C in TRP"}, {"C", "12.01100", "C505", "CB in HIS"}, {"C", "12.01100", "C506", "CE1 in HID, HIE"}, {"C", "12.01100", "C507", "CD2 in HID, CG in HIE"}, {"C", "12.01100", "C508", "CG in HID, CD2 in HIE"}, {"C", "12.01100", "C509", "CE1 in HIP"}, {"C", "12.01100", "C510", "CG, CD2 in HIP"}, {"C", "12.01100", "C514", "CD1 in TRP"}, {"H", "1.00800", "H140", "H all-atom H: alkanes"}, {"H", "1.00800", "H146", "Benzene H - 12 site"}, {"H", "1.00800", "H155", "all-atom H(O): mono alcohols"}, {"H", "1.00800", "H168", "H phenol 145 and 146"}, {"H", "1.00800", "H204", "all-atom H(S): thiols (mod 11/99)"}, {"H", "1.00800", "H240", "H on N: primary amide"}, {"H", "1.00800", "H241", "H on N: secondary amide"}, {"H", "1.00800", "H270", "H in CCOOH"}, {"H", "1.00800", "H290", "H (RNH3+)"}, {"H", "1.00800", "H301", "H: guanidinium NH2"}, {"H", "1.00800", "H304", "H: guanidinium NHR"}, {"H", "1.00800", "H310", "H (R2NH2+)"}, {"H", "1.00800", "H504", "H on NE in TRP"}, {"H", "1.00800", "H513", "H on N in HIP"}, {"N", "14.00700", "N237", "N: primary amide. alkane parameters."}, {"N", "14.00700", "N238", "N: secondary amide 279 for formyl H."}, {"N", "14.00700", "N239", "N: tertiary amide"}, {"N", "14.00700", "N287", "N (RNH3+)"}, {"N", "14.00700", "N300", "N: guanidinium NH2"}, {"N", "14.00700", "N303", "N: guanidinium NHR"}, {"N", "14.00700", "N309", "N (R2NH2+)"}, {"N", "14.00700", "N503", "NE in TRP"}, {"N", "14.00700", "N511", "NE in HID, ND in HIE"}, {"N", "14.00700", "N512", "N in HIP"}, {"O", "15.99940", "O154", "all-atom O: mono alcohols"}, {"O", "15.99940", "O167", "O phenol atom C, H"}, {"O", "15.99940", "O236", "O: C=O in amide. is neutral - use"}, {"O", "15.99940", "O268", "Oh in CCOOH R in RCOOH is"}, {"O", "15.99940", "O269", "Oc in CCOOH neutral; use 135-140"}, {"O", "15.99940", "O272", "O: O in COO- carboxylate"}, {"S", "32.06000", "S200", "all-atom S: thiols (mod 11/99)"}, {"S", "32.06000", "S202", "all-atom S: sulfides"}, {"S", "32.06000", "S203", "all-atom S: disulfides"}, {"O", "15.99940", "OT", " "}, {"H", "1.00800", "HT", " "}, {"Na", "22.98977", "SOD", "Sodium Ion, adm jr."}, {"Cl", "35.45000", "CLA", "Chloride Ion, adm jr."}}; /* Bonds */ char * OPLSAAM_bonds[159][4]= {{"OT", "HT", "450.0", "0.9572"}, {"HT", "HT", "0.0", "1.5139"}, {"S203", "S203", "166.0", "2.038"}, {"C135", "C136", "268.00", "1.529"}, {"C135", "C137", "268.00", "1.529"}, {"C135", "C158", "268.00", "1.529"}, {"C135", "C224", "268.00", "1.529"}, {"C135", "C235", "317.00", "1.522"}, {"C135", "C283", "268.00", "1.529"}, {"C135", "C293", "268.00", "1.529"}, {"C135", "H140", "340.00", "1.090"}, {"C136", "C136", "268.00", "1.529"}, {"C136", "C137", "268.00", "1.529"}, {"C136", "C210", "268.00", "1.529"}, {"C136", "C224", "268.00", "1.529"}, {"C136", "C235", "317.00", "1.522"}, {"C136", "C245", "268.00", "1.529"}, {"C136", "C246", "268.00", "1.529"}, {"C136", "C267", "317.00", "1.522"}, {"C136", "C274", "268.00", "1.529"}, {"C136", "C283", "268.00", "1.529"}, {"C136", "C285", "268.00", "1.529"}, {"C136", "C292", "268.00", "1.529"}, {"C136", "C293", "268.00", "1.529"}, {"C136", "C295", "268.00", "1.529"}, {"C136", "C296", "268.00", "1.529"}, {"C136", "C308", "268.00", "1.529"}, {"C136", "C500", "317.00", "1.495"}, {"C136", "H140", "340.00", "1.090"}, {"C137", "C224", "268.00", "1.529"}, {"C137", "C283", "268.00", "1.529"}, {"C137", "C293", "268.00", "1.529"}, {"C137", "H140", "340.00", "1.090"}, {"C145", "C145", "469.00", "1.400"}, {"C145", "C149", "317.00", "1.510"}, {"C145", "C166", "469.00", "1.400"}, {"C145", "C501", "469.00", "1.404"}, {"C145", "C502", "469.00", "1.400"}, {"C145", "H146", "367.00", "1.080"}, {"C149", "C224", "268.00", "1.529"}, {"C149", "C283", "268.00", "1.529"}, {"C149", "C293", "268.00", "1.529"}, {"C149", "H140", "340.00", "1.090"}, {"C157", "C224", "268.00", "1.529"}, {"C157", "C283", "268.00", "1.529"}, {"C157", "C293", "268.00", "1.529"}, {"C157", "H140", "340.00", "1.090"}, {"C157", "O154", "320.00", "1.410"}, {"C158", "C224", "268.00", "1.529"}, {"C158", "C283", "268.00", "1.529"}, {"C158", "C293", "268.00", "1.529"}, {"C158", "H140", "340.00", "1.090"}, {"C158", "O154", "320.00", "1.410"}, {"C166", "O167", "450.00", "1.364"}, {"C206", "C224", "268.00", "1.529"}, {"C206", "C283", "268.00", "1.529"}, {"C206", "C293", "268.00", "1.529"}, {"C206", "H140", "340.00", "1.090"}, {"C206", "S200", "222.00", "1.810"}, {"C209", "H140", "340.00", "1.090"}, {"C209", "S202", "222.00", "1.810"}, {"C210", "H140", "340.00", "1.090"}, {"C210", "S202", "222.00", "1.810"}, {"C214", "C224", "268.00", "1.529"}, {"C214", "C283", "268.00", "1.529"}, {"C214", "C293", "268.00", "1.529"}, {"C214", "H140", "340.00", "1.090"}, {"C214", "S203", "222.00", "1.810"}, {"C223", "C235", "317.00", "1.522"}, {"C223", "H140", "340.00", "1.090"}, {"C223", "N238", "337.00", "1.449"}, {"C223", "C267", "317.00", "1.522"}, {"C224", "C235", "317.00", "1.522"}, {"C224", "C267", "317.00", "1.522"}, {"C224", "C274", "268.00", "1.529"}, {"C224", "C505", "268.00", "1.529"}, {"C224", "H140", "340.00", "1.090"}, {"C224", "N238", "337.00", "1.449"}, {"C235", "C246", "317.00", "1.522"}, {"C235", "C292", "317.00", "1.522"}, {"C235", "C293", "317.00", "1.522"}, {"C235", "C295", "317.00", "1.522"}, {"C235", "N237", "490.00", "1.335"}, {"C235", "N238", "490.00", "1.335"}, {"C235", "N239", "490.00", "1.335"}, {"C235", "O236", "570.00", "1.229"}, {"C242", "H140", "340.00", "1.090"}, {"C242", "N238", "337.00", "1.449"}, {"C245", "H140", "340.00", "1.090"}, {"C245", "N239", "337.00", "1.449"}, {"C246", "H140", "340.00", "1.090"}, {"C246", "N239", "337.00", "1.449"}, {"C267", "O268", "450.00", "1.364"}, {"C267", "O269", "570.00", "1.229"}, {"C271", "C274", "317.00", "1.522"}, {"C271", "C283", "317.00", "1.522"}, {"C271", "C284", "317.00", "1.522"}, {"C271", "C285", "317.00", "1.522"}, {"C271", "O272", "656.00", "1.250"}, {"C274", "C283", "268.00", "1.529"}, {"C274", "C293", "268.00", "1.529"}, {"C274", "H140", "340.00", "1.090"}, {"C283", "C505", "268.00", "1.529"}, {"C283", "H140", "340.00", "1.090"}, {"C283", "N238", "337.00", "1.449"}, {"C284", "H140", "340.00", "1.090"}, {"C284", "N238", "337.00", "1.449"}, {"C285", "H140", "340.00", "1.090"}, {"C285", "N239", "337.00", "1.449"}, {"C292", "H140", "340.00", "1.090"}, {"C292", "N287", "367.00", "1.471"}, {"C293", "C505", "268.00", "1.529"}, {"C293", "H140", "340.00", "1.090"}, {"C293", "N287", "367.00", "1.471"}, {"C295", "H140", "340.00", "1.090"}, {"C295", "N309", "367.00", "1.471"}, {"C296", "H140", "340.00", "1.090"}, {"C296", "N309", "367.00", "1.471"}, {"C302", "N300", "481.00", "1.340"}, {"C302", "N303", "481.00", "1.340"}, {"C307", "C308", "268.00", "1.529"}, {"C307", "H140", "340.00", "1.090"}, {"C307", "N303", "337.00", "1.463"}, {"C308", "H140", "340.00", "1.090"}, {"C500", "C501", "388.00", "1.459"}, {"C500", "C514", "546.00", "1.352"}, {"C501", "C502", "447.00", "1.419"}, {"C502", "N503", "428.00", "1.380"}, {"C505", "C507", "317.00", "1.504"}, {"C505", "C508", "317.00", "1.504"}, {"C505", "C510", "317.00", "1.504"}, {"C505", "H140", "340.00", "1.090"}, {"C506", "H146", "367.00", "1.080"}, {"C506", "N503", "477.00", "1.343"}, {"C506", "N511", "488.00", "1.335"}, {"C507", "C508", "520.00", "1.370"}, {"C507", "H146", "367.00", "1.080"}, {"C507", "N511", "410.00", "1.394"}, {"C508", "H146", "367.00", "1.080"}, {"C508", "N503", "427.00", "1.381"}, {"C509", "H146", "367.00", "1.080"}, {"C509", "N512", "477.00", "1.343"}, {"C510", "C510", "520.00", "1.370"}, {"C510", "H146", "367.00", "1.080"}, {"C510", "N512", "427.00", "1.381"}, {"C514", "H146", "367.00", "1.080"}, {"C514", "N503", "427.00", "1.381"}, {"H155", "O154", "553.00", "0.945"}, {"H168", "O167", "553.00", "0.945"}, {"H204", "S200", "274.00", "1.336"}, {"H240", "N237", "434.00", "1.010"}, {"H241", "N238", "434.00", "1.010"}, {"H270", "O268", "553.00", "0.945"}, {"H290", "N287", "434.00", "1.010"}, {"H301", "N300", "434.00", "1.010"}, {"H304", "N303", "434.00", "1.010"}, {"H310", "N309", "434.00", "1.010"}, {"H504", "N503", "434.00", "1.010"}, {"H513", "N512", "434.00", "1.010"}}; /* Angles */ char * OPLSAAM_angles[437][5]= {{"HT", "OT", "HT", "55.0", "104.52"}, {"H140", "C135", "H140", "33.0", "107.8"}, {"H140", "C136", "H140", "33.0", "107.8"}, {"H140", "C149", "H140", "33.0", "107.8"}, {"H140", "C157", "H140", "33.0", "107.8"}, {"H140", "C206", "H140", "33.0", "107.8"}, {"H140", "C209", "H140", "33.0", "107.8"}, {"H140", "C210", "H140", "33.0", "107.8"}, {"H140", "C214", "H140", "33.0", "107.8"}, {"H140", "C223", "H140", "33.0", "107.8"}, {"H140", "C224", "H140", "33.0", "107.8"}, {"H140", "C242", "H140", "33.0", "107.8"}, {"H140", "C245", "H140", "33.0", "107.8"}, {"H140", "C274", "H140", "33.0", "107.8"}, {"H140", "C284", "H140", "33.0", "107.8"}, {"H140", "C292", "H140", "33.0", "107.8"}, {"H140", "C296", "H140", "33.0", "107.8"}, {"H140", "C307", "H140", "33.0", "107.8"}, {"H140", "C308", "H140", "33.0", "107.8"}, {"H140", "C505", "H140", "33.0", "107.8"}, {"H290", "N287", "H290", "35.0", "109.5"}, {"H310", "N309", "H310", "35.0", "109.5"}, {"C135", "C136", "C137", "58.35", "112.70"}, {"C135", "C136", "H140", "37.50", "110.70"}, {"C135", "C137", "C135", "58.35", "112.70"}, {"C135", "C137", "C136", "58.35", "112.70"}, {"C135", "C137", "C224", "58.35", "112.70"}, {"C135", "C137", "C283", "58.35", "112.70"}, {"C135", "C137", "C293", "58.35", "112.70"}, {"C135", "C137", "H140", "37.50", "110.70"}, {"C135", "C158", "C224", "58.35", "112.70"}, {"C135", "C158", "C283", "58.35", "112.70"}, {"C135", "C158", "C293", "58.35", "112.70"}, {"C135", "C158", "H140", "37.50", "110.70"}, {"C135", "C158", "O154", "50.00", "109.50"}, {"C135", "C224", "C235", "63.00", "111.10"}, {"C135", "C224", "C267", "63.00", "111.10"}, {"C135", "C224", "H140", "37.50", "110.70"}, {"C135", "C224", "N238", "80.00", "109.70"}, {"C135", "C235", "N238", "70.00", "116.60"}, {"C135", "C235", "N239", "70.00", "116.60"}, {"C135", "C235", "O236", "80.00", "120.40"}, {"C135", "C283", "C271", "63.00", "111.10"}, {"C135", "C283", "H140", "37.50", "110.70"}, {"C135", "C283", "N238", "80.00", "109.70"}, {"C135", "C293", "C235", "63.00", "111.10"}, {"C135", "C293", "H140", "37.50", "110.70"}, {"C135", "C293", "N287", "80.00", "111.20"}, {"C136", "C135", "H140", "37.50", "110.70"}, {"C136", "C136", "C136", "58.35", "112.70"}, {"C136", "C136", "C224", "58.35", "112.70"}, {"C136", "C136", "C235", "63.00", "111.10"}, {"C136", "C136", "C245", "58.35", "112.70"}, {"C136", "C136", "C246", "58.35", "112.70"}, {"C136", "C136", "C267", "63.00", "111.10"}, {"C136", "C136", "C283", "58.35", "112.70"}, {"C136", "C136", "C285", "58.35", "112.70"}, {"C136", "C136", "C292", "58.35", "112.70"}, {"C136", "C136", "C293", "58.35", "112.70"}, {"C136", "C136", "C295", "58.35", "112.70"}, {"C136", "C136", "C296", "58.35", "112.70"}, {"C136", "C136", "H140", "37.50", "110.70"}, {"C136", "C137", "C224", "58.35", "112.70"}, {"C136", "C137", "C283", "58.35", "112.70"}, {"C136", "C137", "C293", "58.35", "112.70"}, {"C136", "C137", "H140", "37.50", "110.70"}, {"C136", "C210", "H140", "37.50", "110.70"}, {"C136", "C210", "S202", "50.00", "114.70"}, {"C136", "C224", "C235", "63.00", "111.10"}, {"C136", "C224", "H140", "37.50", "110.70"}, {"C136", "C224", "N238", "80.00", "109.70"}, {"C136", "C235", "N237", "70.00", "116.60"}, {"C136", "C235", "O236", "80.00", "120.40"}, {"C136", "C245", "H140", "37.50", "110.70"}, {"C136", "C245", "N239", "80.00", "109.70"}, {"C136", "C246", "C235", "63.00", "111.10"}, {"C136", "C246", "H140", "37.50", "110.70"}, {"C136", "C246", "N239", "80.00", "109.70"}, {"C136", "C267", "O268", "70.00", "108.00"}, {"C136", "C267", "O269", "80.00", "120.40"}, {"C136", "C274", "C271", "63.00", "111.10"}, {"C136", "C274", "H140", "37.50", "110.70"}, {"C136", "C283", "C271", "63.00", "111.10"}, {"C136", "C283", "H140", "37.50", "110.70"}, {"C136", "C283", "N238", "80.00", "109.70"}, {"C136", "C285", "C271", "63.00", "111.10"}, {"C136", "C285", "H140", "37.50", "110.70"}, {"C136", "C285", "N239", "80.00", "109.70"}, {"C136", "C292", "H140", "37.50", "110.70"}, {"C136", "C292", "N287", "80.00", "111.20"}, {"C136", "C293", "C235", "63.00", "111.10"}, {"C136", "C293", "H140", "37.50", "110.70"}, {"C136", "C293", "N287", "80.00", "111.20"}, {"C136", "C295", "C235", "63.00", "111.10"}, {"C136", "C295", "H140", "37.50", "110.70"}, {"C136", "C295", "N309", "80.00", "111.20"}, {"C136", "C296", "H140", "37.50", "110.70"}, {"C136", "C296", "N309", "80.00", "111.20"}, {"C136", "C308", "C307", "58.35", "112.70"}, {"C136", "C308", "H140", "37.50", "110.70"}, {"C136", "C500", "C501", "70.00", "128.60"}, {"C136", "C500", "C514", "70.00", "125.00"}, {"C137", "C135", "H140", "37.50", "110.70"}, {"C137", "C136", "C224", "58.35", "112.70"}, {"C137", "C136", "C283", "58.35", "112.70"}, {"C137", "C136", "C293", "58.35", "112.70"}, {"C137", "C136", "H140", "37.50", "110.70"}, {"C137", "C224", "C235", "63.00", "111.10"}, {"C137", "C224", "H140", "37.50", "110.70"}, {"C137", "C224", "N238", "80.00", "109.70"}, {"C137", "C283", "C271", "63.00", "111.10"}, {"C137", "C283", "H140", "37.50", "110.70"}, {"C137", "C283", "N238", "80.00", "109.70"}, {"C137", "C293", "C235", "63.00", "111.10"}, {"C137", "C293", "H140", "37.50", "110.70"}, {"C137", "C293", "N287", "80.00", "111.20"}, {"C145", "C145", "C145", "63.00", "120.00"}, {"C145", "C145", "C149", "70.00", "120.00"}, {"C145", "C145", "C166", "63.00", "120.00"}, {"C145", "C145", "C501", "63.00", "120.00"}, {"C145", "C145", "C502", "85.00", "120.00"}, {"C145", "C145", "H146", "35.00", "120.00"}, {"C145", "C149", "C224", "63.00", "114.00"}, {"C145", "C149", "C283", "63.00", "114.00"}, {"C145", "C149", "C293", "63.00", "114.00"}, {"C145", "C149", "H140", "35.00", "109.50"}, {"C145", "C166", "C145", "63.00", "120.00"}, {"C145", "C166", "O167", "70.00", "120.00"}, {"C145", "C501", "C500", "85.00", "134.90"}, {"C145", "C501", "C502", "85.00", "116.20"}, {"C145", "C502", "C501", "85.00", "122.70"}, {"C145", "C502", "N503", "70.00", "132.80"}, {"C149", "C224", "C235", "63.00", "111.10"}, {"C149", "C224", "H140", "37.50", "110.70"}, {"C149", "C224", "N238", "80.00", "109.70"}, {"C149", "C283", "C271", "63.00", "111.10"}, {"C149", "C283", "H140", "37.50", "110.70"}, {"C149", "C283", "N238", "80.00", "109.70"}, {"C149", "C293", "C235", "63.00", "111.10"}, {"C149", "C293", "H140", "37.50", "110.70"}, {"C149", "C293", "N287", "80.00", "111.20"}, {"C157", "C224", "C235", "63.00", "111.10"}, {"C157", "C224", "H140", "37.50", "110.70"}, {"C157", "C224", "N238", "80.00", "109.70"}, {"C157", "C283", "C271", "63.00", "111.10"}, {"C157", "C283", "H140", "37.50", "110.70"}, {"C157", "C283", "N238", "80.00", "109.70"}, {"C157", "C293", "C235", "63.00", "111.10"}, {"C157", "C293", "H140", "37.50", "110.70"}, {"C157", "C293", "N287", "80.00", "111.20"}, {"C157", "O154", "H155", "55.00", "108.50"}, {"C158", "C135", "H140", "37.50", "110.70"}, {"C158", "C224", "C235", "63.00", "111.10"}, {"C158", "C224", "H140", "37.50", "110.70"}, {"C158", "C224", "N238", "80.00", "109.70"}, {"C158", "C283", "C271", "63.00", "111.10"}, {"C158", "C283", "H140", "37.50", "110.70"}, {"C158", "C283", "N238", "80.00", "109.70"}, {"C158", "C293", "C235", "63.00", "111.10"}, {"C158", "C293", "H140", "37.50", "110.70"}, {"C158", "C293", "N287", "80.00", "111.20"}, {"C158", "O154", "H155", "55.00", "108.50"}, {"C166", "C145", "H146", "35.00", "120.00"}, {"C166", "O167", "H168", "35.00", "113.00"}, {"C206", "C224", "C235", "63.00", "111.10"}, {"C206", "C224", "H140", "37.50", "110.70"}, {"C206", "C224", "N238", "80.00", "109.70"}, {"C206", "C283", "C271", "63.00", "111.10"}, {"C206", "C283", "H140", "37.50", "110.70"}, {"C206", "C283", "N238", "80.00", "109.70"}, {"C206", "C293", "C235", "63.00", "111.10"}, {"C206", "C293", "H140", "37.50", "110.70"}, {"C206", "C293", "N287", "80.00", "111.20"}, {"C206", "S200", "H204", "44.00", "96.00"}, {"C209", "S202", "C210", "62.00", "98.90"}, {"C210", "C136", "C224", "58.35", "112.70"}, {"C210", "C136", "C283", "58.35", "112.70"}, {"C210", "C136", "C293", "58.35", "112.70"}, {"C210", "C136", "H140", "37.50", "110.70"}, {"C214", "C224", "C235", "63.00", "111.10"}, {"C214", "C224", "H140", "37.50", "110.70"}, {"C214", "C224", "N238", "80.00", "109.70"}, {"C214", "C283", "C271", "63.00", "111.10"}, {"C214", "C283", "H140", "37.50", "110.70"}, {"C214", "C283", "N238", "80.00", "109.70"}, {"C214", "C293", "C235", "63.00", "111.10"}, {"C214", "C293", "H140", "37.50", "110.70"}, {"C214", "C293", "N287", "80.00", "111.20"}, {"C214", "S203", "S203", "68.00", "103.70"}, {"C223", "C235", "N238", "70.00", "116.60"}, {"C223", "C235", "N239", "70.00", "116.60"}, {"C223", "C235", "O236", "80.00", "120.40"}, {"C223", "N238", "C235", "50.00", "121.90"}, {"C223", "N238", "H241", "38.00", "118.40"}, {"C224", "C135", "H140", "37.50", "110.70"}, {"C224", "C136", "C235", "63.00", "111.10"}, {"C224", "C136", "C267", "63.00", "111.10"}, {"C224", "C136", "C274", "58.35", "112.70"}, {"C224", "C136", "C308", "58.35", "112.70"}, {"C224", "C136", "C500", "63.00", "115.60"}, {"C224", "C136", "H140", "37.50", "110.70"}, {"C224", "C137", "H140", "37.50", "110.70"}, {"C224", "C149", "H140", "37.50", "110.70"}, {"C224", "C157", "H140", "37.50", "110.70"}, {"C224", "C157", "O154", "50.00", "109.50"}, {"C224", "C158", "H140", "37.50", "110.70"}, {"C224", "C158", "O154", "50.00", "109.50"}, {"C224", "C206", "H140", "37.50", "110.70"}, {"C224", "C206", "S200", "50.00", "108.60"}, {"C224", "C214", "H140", "37.50", "110.70"}, {"C224", "C214", "S203", "50.00", "114.70"}, {"C224", "C235", "N238", "70.00", "116.60"}, {"C224", "C235", "N239", "70.00", "116.60"}, {"C224", "C235", "O236", "80.00", "120.40"}, {"C223", "C267", "O268", "70.00", "108.00"}, {"C224", "C267", "O268", "70.00", "108.00"}, {"C223", "C267", "O269", "80.00", "120.40"}, {"C224", "C267", "O269", "80.00", "120.40"}, {"C224", "C274", "C271", "63.00", "111.10"}, {"C224", "C274", "H140", "37.50", "110.70"}, {"C224", "C505", "C507", "63.00", "114.00"}, {"C224", "C505", "C508", "63.00", "114.00"}, {"C224", "C505", "C510", "63.00", "114.00"}, {"C224", "C505", "H140", "37.50", "110.70"}, {"C224", "N238", "C235", "50.00", "121.90"}, {"C224", "N238", "H241", "38.00", "118.40"}, {"C235", "C135", "H140", "35.00", "109.50"}, {"C235", "C136", "C283", "63.00", "111.10"}, {"C235", "C136", "C293", "63.00", "111.10"}, {"C235", "C136", "H140", "35.00", "109.50"}, {"C235", "C223", "H140", "35.00", "109.50"}, {"C235", "C223", "N238", "63.00", "110.10"}, {"C235", "C224", "C274", "63.00", "111.10"}, {"C235", "C224", "C505", "63.00", "111.10"}, {"C235", "C224", "H140", "35.00", "109.50"}, {"C235", "C224", "N238", "63.00", "110.10"}, {"C235", "C246", "H140", "35.00", "109.50"}, {"C235", "C246", "N239", "63.00", "110.10"}, {"C235", "C292", "H140", "35.00", "109.50"}, {"C235", "C292", "N287", "80.00", "111.20"}, {"C235", "C293", "C274", "63.00", "111.10"}, {"C235", "C293", "C505", "63.00", "111.10"}, {"C235", "C293", "H140", "35.00", "109.50"}, {"C235", "C293", "N287", "80.00", "111.20"}, {"C235", "C295", "H140", "35.00", "109.50"}, {"C235", "C295", "N309", "80.00", "111.20"}, {"C235", "N237", "H240", "35.00", "119.80"}, {"C235", "N238", "C242", "50.00", "121.90"}, {"C235", "N238", "C283", "50.00", "121.90"}, {"C235", "N238", "C284", "50.00", "121.90"}, {"C235", "N238", "H241", "35.00", "119.80"}, {"C235", "N239", "C245", "50.00", "121.90"}, {"C235", "N239", "C246", "50.00", "121.90"}, {"C235", "N239", "C285", "50.00", "121.90"}, {"C242", "N238", "H241", "38.00", "118.40"}, {"C245", "C136", "H140", "37.50", "110.70"}, {"C245", "N238", "C285", "50.00", "118.00"}, {"C245", "N239", "C246", "50.00", "118.00"}, {"C245", "N239", "C285", "50.00", "118.00"}, {"C246", "C136", "H140", "37.50", "110.70"}, {"C246", "C235", "N238", "70.00", "116.60"}, {"C246", "C235", "N239", "70.00", "116.60"}, {"C246", "C235", "O236", "80.00", "120.40"}, {"C267", "C136", "C283", "63.00", "111.10"}, {"C267", "C136", "C293", "63.00", "111.10"}, {"C267", "C136", "H140", "35.00", "109.50"}, {"C267", "C223", "H140", "35.00", "109.50"}, {"C267", "C224", "H140", "35.00", "109.50"}, {"C267", "C223", "N238", "63.00", "110.10"}, {"C267", "C224", "N238", "63.00", "110.10"}, {"C267", "O268", "H270", "35.00", "113.00"}, {"C271", "C274", "C283", "63.00", "111.10"}, {"C271", "C274", "C293", "63.00", "111.10"}, {"C271", "C274", "H140", "35.00", "109.50"}, {"C271", "C283", "C274", "63.00", "111.10"}, {"C271", "C283", "C505", "63.00", "111.10"}, {"C271", "C283", "H140", "35.00", "109.50"}, {"C271", "C283", "N238", "63.00", "110.10"}, {"C271", "C284", "H140", "35.00", "109.50"}, {"C271", "C284", "N238", "63.00", "110.10"}, {"C271", "C285", "H140", "35.00", "109.50"}, {"C271", "C285", "N239", "63.00", "110.10"}, {"C274", "C136", "C283", "58.35", "112.70"}, {"C274", "C136", "C293", "58.35", "112.70"}, {"C274", "C136", "H140", "37.50", "110.70"}, {"C274", "C224", "H140", "37.50", "110.70"}, {"C274", "C224", "N238", "80.00", "109.70"}, {"C274", "C271", "O272", "70.00", "117.00"}, {"C274", "C283", "H140", "37.50", "110.70"}, {"C274", "C283", "N238", "80.00", "109.70"}, {"C274", "C293", "H140", "37.50", "110.70"}, {"C274", "C293", "N287", "80.00", "111.20"}, {"C283", "C135", "H140", "37.50", "110.70"}, {"C283", "C136", "C308", "58.35", "112.70"}, {"C283", "C136", "C500", "63.00", "115.60"}, {"C283", "C136", "H140", "37.50", "110.70"}, {"C283", "C137", "H140", "37.50", "110.70"}, {"C283", "C149", "H140", "37.50", "110.70"}, {"C283", "C157", "H140", "37.50", "110.70"}, {"C283", "C157", "O154", "50.00", "109.50"}, {"C283", "C158", "H140", "37.50", "110.70"}, {"C283", "C158", "O154", "50.00", "109.50"}, {"C283", "C206", "H140", "37.50", "110.70"}, {"C283", "C206", "S200", "50.00", "108.60"}, {"C283", "C214", "H140", "37.50", "110.70"}, {"C283", "C214", "S203", "50.00", "114.70"}, {"C283", "C271", "O272", "70.00", "117.00"}, {"C283", "C274", "H140", "37.50", "110.70"}, {"C283", "C505", "C507", "63.00", "114.00"}, {"C283", "C505", "C508", "63.00", "114.00"}, {"C283", "C505", "C510", "63.00", "114.00"}, {"C283", "C505", "H140", "37.50", "110.70"}, {"C283", "N238", "H241", "38.00", "118.40"}, {"C284", "C271", "O272", "70.00", "117.00"}, {"C284", "N238", "H241", "38.00", "118.40"}, {"C285", "C136", "H140", "37.50", "110.70"}, {"C285", "C271", "O272", "70.00", "117.00"}, {"C292", "C136", "H140", "37.50", "110.70"}, {"C292", "C235", "N238", "70.00", "116.60"}, {"C292", "C235", "N239", "70.00", "116.60"}, {"C292", "C235", "O236", "80.00", "120.40"}, {"C292", "N287", "H290", "35.00", "109.50"}, {"C293", "C135", "H140", "37.50", "110.70"}, {"C293", "C136", "C308", "58.35", "112.70"}, {"C293", "C136", "C500", "63.00", "115.60"}, {"C293", "C136", "H140", "37.50", "110.70"}, {"C293", "C137", "H140", "37.50", "110.70"}, {"C293", "C149", "H140", "37.50", "110.70"}, {"C293", "C157", "H140", "37.50", "110.70"}, {"C293", "C157", "O154", "50.00", "109.50"}, {"C293", "C158", "H140", "37.50", "110.70"}, {"C293", "C158", "O154", "50.00", "109.50"}, {"C293", "C206", "H140", "37.50", "110.70"}, {"C293", "C206", "S200", "50.00", "108.60"}, {"C293", "C214", "H140", "37.50", "110.70"}, {"C293", "C214", "S203", "50.00", "114.70"}, {"C293", "C235", "N238", "70.00", "116.60"}, {"C293", "C235", "N239", "70.00", "116.60"}, {"C293", "C235", "O236", "80.00", "120.40"}, {"C293", "C274", "H140", "37.50", "110.70"}, {"C293", "C505", "C507", "63.00", "114.00"}, {"C293", "C505", "C508", "63.00", "114.00"}, {"C293", "C505", "C510", "63.00", "114.00"}, {"C293", "C505", "H140", "37.50", "110.70"}, {"C293", "N287", "H290", "35.00", "109.50"}, {"C295", "C136", "H140", "37.50", "110.70"}, {"C295", "C235", "N238", "70.00", "116.60"}, {"C295", "C235", "N239", "70.00", "116.60"}, {"C295", "C235", "O236", "80.00", "120.40"}, {"C295", "N309", "C296", "50.00", "113.00"}, {"C295", "N309", "H310", "35.00", "109.50"}, {"C296", "C136", "H140", "37.50", "110.70"}, {"C296", "N309", "H310", "35.00", "109.50"}, {"C302", "N300", "H301", "35.00", "120.00"}, {"C302", "N303", "C307", "50.00", "123.20"}, {"C302", "N303", "H304", "35.00", "120.00"}, {"C307", "C308", "H140", "37.50", "110.70"}, {"C307", "N303", "H304", "35.00", "118.40"}, {"C308", "C136", "H140", "37.50", "110.70"}, {"C308", "C307", "H140", "37.50", "110.70"}, {"C308", "C307", "N303", "80.00", "111.20"}, {"C500", "C136", "H140", "35.00", "109.50"}, {"C500", "C501", "C502", "85.00", "108.80"}, {"C500", "C514", "H146", "35.00", "120.00"}, {"C500", "C514", "N503", "70.00", "108.70"}, {"C501", "C145", "H146", "35.00", "120.00"}, {"C501", "C500", "C514", "85.00", "106.40"}, {"C501", "C502", "N503", "70.00", "104.40"}, {"C502", "C145", "H146", "35.00", "120.00"}, {"C502", "N503", "C514", "70.00", "111.60"}, {"C502", "N503", "H504", "35.00", "123.10"}, {"C505", "C224", "H140", "37.50", "110.70"}, {"C505", "C224", "N238", "80.00", "109.70"}, {"C505", "C283", "H140", "37.50", "110.70"}, {"C505", "C283", "N238", "80.00", "109.70"}, {"C505", "C293", "H140", "37.50", "110.70"}, {"C505", "C293", "N287", "80.00", "111.20"}, {"C505", "C507", "C508", "70.00", "130.70"}, {"C505", "C507", "N511", "70.00", "124.50"}, {"C505", "C508", "C507", "70.00", "130.70"}, {"C505", "C508", "N503", "70.00", "121.60"}, {"C505", "C510", "C510", "70.00", "130.70"}, {"C505", "C510", "N512", "70.00", "121.60"}, {"C506", "N503", "C508", "70.00", "109.80"}, {"C506", "N503", "H504", "35.00", "124.00"}, {"C506", "N511", "C507", "70.00", "110.00"}, {"C507", "C505", "H140", "35.00", "109.50"}, {"C507", "C508", "H146", "35.00", "130.70"}, {"C507", "C508", "N503", "70.00", "106.30"}, {"C508", "C505", "H140", "35.00", "109.50"}, {"C508", "C507", "H146", "35.00", "128.20"}, {"C508", "C507", "N511", "70.00", "111.00"}, {"C508", "N503", "H504", "35.00", "124.00"}, {"C509", "N512", "C510", "70.00", "109.80"}, {"C509", "N512", "H513", "35.00", "124.00"}, {"C510", "C505", "H140", "35.00", "109.50"}, {"C510", "C510", "H146", "35.00", "130.70"}, {"C510", "C510", "N512", "70.00", "106.30"}, {"C510", "N512", "H513", "35.00", "124.00"}, {"C514", "N503", "H504", "35.00", "124.00"}, {"H140", "C157", "O154", "35.00", "109.50"}, {"H140", "C158", "O154", "35.00", "109.50"}, {"H140", "C206", "S200", "35.00", "109.50"}, {"H140", "C209", "S202", "35.00", "109.50"}, {"H140", "C210", "S202", "35.00", "109.50"}, {"H140", "C214", "S203", "35.00", "109.50"}, {"H140", "C223", "N238", "35.00", "109.50"}, {"H140", "C224", "N238", "35.00", "109.50"}, {"H140", "C242", "N238", "35.00", "109.50"}, {"H140", "C245", "N239", "35.00", "109.50"}, {"H140", "C246", "N239", "35.00", "109.50"}, {"H140", "C283", "N238", "35.00", "109.50"}, {"H140", "C284", "N238", "35.00", "109.50"}, {"H140", "C285", "N239", "35.00", "109.50"}, {"H140", "C292", "N287", "35.00", "109.50"}, {"H140", "C293", "N287", "35.00", "109.50"}, {"H140", "C295", "N309", "35.00", "109.50"}, {"H140", "C296", "N309", "35.00", "109.50"}, {"H140", "C307", "N303", "35.00", "109.50"}, {"H146", "C506", "N503", "35.00", "120.00"}, {"H146", "C506", "N511", "35.00", "120.00"}, {"H146", "C507", "N511", "35.00", "120.00"}, {"H146", "C508", "N503", "35.00", "121.60"}, {"H146", "C509", "N512", "35.00", "120.00"}, {"H146", "C510", "N512", "35.00", "120.00"}, {"H146", "C514", "N503", "35.00", "121.60"}, {"H240", "N237", "H240", "35.00", "120.00"}, {"H301", "N300", "H301", "35.00", "120.00"}, {"N237", "C235", "O236", "80.00", "122.90"}, {"N238", "C235", "O236", "80.00", "122.90"}, {"N239", "C235", "O236", "80.00", "122.90"}, {"N300", "C302", "N300", "70.00", "120.00"}, {"N300", "C302", "N303", "70.00", "120.00"}, {"N503", "C506", "N511", "70.00", "120.00"}, {"N512", "C509", "N512", "70.00", "120.00"}, {"O268", "C267", "O269", "80.00", "121.00"}, {"O272", "C271", "O272", "80.00", "126.00"}}; /* Dihedrals */ char * OPLSAAM_dihedrals[1446][7]= {{"X", "C145", "C145", "X", "3.6250", "2", "180.0"}, {"X", "C145", "C166", "X", "3.6250", "2", "180.0"}, {"X", "C145", "C501", "X", "3.5000", "2", "180.0"}, {"X", "C145", "C502", "X", "3.6250", "2", "180.0"}, {"X", "C302", "N300", "X", "1.9500", "2", "180.0"}, {"X", "C500", "C501", "X", "1.6750", "2", "180.0"}, {"X", "C500", "C514", "X", "6.5250", "2", "180.0"}, {"X", "C501", "C502", "X", "3.0000", "2", "180.0"}, {"X", "C502", "N503", "X", "1.5250", "2", "180.0"}, {"X", "C506", "N503", "X", "2.3250", "2", "180.0"}, {"X", "C506", "N511", "X", "5.0000", "2", "180.0"}, {"X", "C507", "C508", "X", "5.3750", "2", "180.0"}, {"X", "C507", "N511", "X", "2.4000", "2", "180.0"}, {"X", "C509", "N512", "X", "2.3250", "2", "180.0"}, {"X", "C510", "C510", "X", "5.3750", "2", "180.0"}, {"X", "C514", "N503", "X", "1.5000", "2", "180.0"}, {"C135", "C136", "C137", "C135", "0.6500", "1", "0.0"}, {"C135", "C136", "C137", "C135", "-0.1000", "2", "180.0"}, {"C135", "C136", "C137", "C135", "0.1000", "3", "0.0"}, {"C135", "C136", "C137", "C224", "0.6500", "1", "0.0"}, {"C135", "C136", "C137", "C224", "-0.1000", "2", "180.0"}, {"C135", "C136", "C137", "C224", "0.1000", "3", "0.0"}, {"C135", "C136", "C137", "C283", "0.6500", "1", "0.0"}, {"C135", "C136", "C137", "C283", "-0.1000", "2", "180.0"}, {"C135", "C136", "C137", "C283", "0.1000", "3", "0.0"}, {"C135", "C136", "C137", "C293", "0.6500", "1", "0.0"}, {"C135", "C136", "C137", "C293", "-0.1000", "2", "180.0"}, {"C135", "C136", "C137", "C293", "0.1000", "3", "0.0"}, {"C135", "C136", "C137", "H140", "0.1500", "3", "0.0"}, {"C135", "C137", "C135", "H140", "0.1500", "3", "0.0"}, {"C135", "C137", "C136", "C224", "0.6500", "1", "0.0"}, {"C135", "C137", "C136", "C224", "-0.1000", "2", "180.0"}, {"C135", "C137", "C136", "C224", "0.1000", "3", "0.0"}, {"C135", "C137", "C136", "C283", "0.6500", "1", "0.0"}, {"C135", "C137", "C136", "C283", "-0.1000", "2", "180.0"}, {"C135", "C137", "C136", "C283", "0.1000", "3", "0.0"}, {"C135", "C137", "C136", "C293", "0.6500", "1", "0.0"}, {"C135", "C137", "C136", "C293", "-0.1000", "2", "180.0"}, {"C135", "C137", "C136", "C293", "0.1000", "3", "0.0"}, {"C135", "C137", "C136", "H140", "0.1500", "3", "0.0"}, {"C135", "C137", "C224", "C235", "-0.7110", "1", "0.0"}, {"C135", "C137", "C224", "C235", "0.5340", "2", "180.0"}, {"C135", "C137", "C224", "C235", "0.0000", "3", "0.0"}, {"C135", "C137", "C224", "H140", "0.1500", "3", "0.0"}, {"C135", "C137", "C224", "N238", "1.4970", "1", "0.0"}, {"C135", "C137", "C224", "N238", "0.1260", "2", "180.0"}, {"C135", "C137", "C224", "N238", "0.1500", "3", "0.0"}, {"C135", "C137", "C283", "C271", "-0.7110", "1", "0.0"}, {"C135", "C137", "C283", "C271", "0.5340", "2", "180.0"}, {"C135", "C137", "C283", "C271", "0.0000", "3", "0.0"}, {"C135", "C137", "C283", "H140", "0.1500", "3", "0.0"}, {"C135", "C137", "C283", "N238", "1.4970", "1", "0.0"}, {"C135", "C137", "C283", "N238", "0.1260", "2", "180.0"}, {"C135", "C137", "C283", "N238", "0.1500", "3", "0.0"}, {"C135", "C137", "C293", "C235", "-0.7110", "1", "0.0"}, {"C135", "C137", "C293", "C235", "0.5340", "2", "180.0"}, {"C135", "C137", "C293", "C235", "0.0000", "3", "0.0"}, {"C135", "C137", "C293", "H140", "0.1500", "3", "0.0"}, {"C135", "C137", "C293", "N287", "1.4970", "1", "0.0"}, {"C135", "C137", "C293", "N287", "0.1260", "2", "180.0"}, {"C135", "C137", "C293", "N287", "0.1500", "3", "0.0"}, {"C135", "C158", "C224", "C235", "-0.7110", "1", "0.0"}, {"C135", "C158", "C224", "C235", "0.5340", "2", "180.0"}, {"C135", "C158", "C224", "C235", "0.0000", "3", "0.0"}, {"C135", "C158", "C224", "H140", "0.1500", "3", "0.0"}, {"C135", "C158", "C224", "N238", "1.4970", "1", "0.0"}, {"C135", "C158", "C224", "N238", "0.1260", "2", "180.0"}, {"C135", "C158", "C224", "N238", "0.1500", "3", "0.0"}, {"C135", "C158", "C283", "C271", "-0.7110", "1", "0.0"}, {"C135", "C158", "C283", "C271", "0.5340", "2", "180.0"}, {"C135", "C158", "C283", "C271", "0.0000", "3", "0.0"}, {"C135", "C158", "C283", "H140", "0.1500", "3", "0.0"}, {"C135", "C158", "C283", "N238", "1.4970", "1", "0.0"}, {"C135", "C158", "C283", "N238", "0.1260", "2", "180.0"}, {"C135", "C158", "C283", "N238", "0.1500", "3", "0.0"}, {"C135", "C158", "C293", "C235", "-0.7110", "1", "0.0"}, {"C135", "C158", "C293", "C235", "0.5340", "2", "180.0"}, {"C135", "C158", "C293", "C235", "0.0000", "3", "0.0"}, {"C135", "C158", "C293", "H140", "0.1500", "3", "0.0"}, {"C135", "C158", "C293", "N287", "1.4970", "1", "0.0"}, {"C135", "C158", "C293", "N287", "0.1260", "2", "180.0"}, {"C135", "C158", "C293", "N287", "0.1500", "3", "0.0"}, {"C135", "C158", "O154", "H155", "-0.1780", "1", "0.0"}, {"C135", "C158", "O154", "H155", "-0.0870", "2", "180.0"}, {"C135", "C158", "O154", "H155", "0.2460", "3", "0.0"}, {"C135", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C135", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C135", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C135", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C135", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C135", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C135", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C135", "C224", "C267", "O268", "0.5000", "1", "0.0"}, {"C135", "C224", "C267", "O268", "0.2730", "2", "180.0"}, {"C135", "C224", "C267", "O268", "0.2250", "3", "0.0"}, {"C135", "C224", "C267", "O269", "0.2730", "2", "180.0"}, {"C135", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C135", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C135", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C135", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C135", "C235", "N238", "C223", "1.1500", "1", "0.0"}, {"C135", "C235", "N238", "C223", "3.0445", "2", "180.0"}, {"C135", "C235", "N238", "C224", "1.1500", "1", "0.0"}, {"C135", "C235", "N238", "C224", "3.0445", "2", "180.0"}, {"C135", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C135", "C235", "N239", "C245", "1.1500", "1", "0.0"}, {"C135", "C235", "N239", "C245", "3.0445", "2", "180.0"}, {"C135", "C235", "N239", "C246", "1.1500", "1", "0.0"}, {"C135", "C235", "N239", "C246", "3.0445", "2", "180.0"}, {"C135", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C135", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C135", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C135", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C135", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C135", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C135", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C135", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C135", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C135", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C135", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C135", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C135", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C136", "C136", "C136", "C224", "0.6500", "1", "0.0"}, {"C136", "C136", "C136", "C224", "-0.1000", "2", "180.0"}, {"C136", "C136", "C136", "C224", "0.1000", "3", "0.0"}, {"C267", "C136", "C136", "C224", "0.6500", "1", "0.0"}, {"C267", "C136", "C136", "C224", "-0.1000", "2", "180.0"}, {"C267", "C136", "C136", "C224", "0.1000", "3", "0.0"}, {"C136", "C136", "C136", "C283", "0.6500", "1", "0.0"}, {"C136", "C136", "C136", "C283", "-0.1000", "2", "180.0"}, {"C136", "C136", "C136", "C283", "0.1000", "3", "0.0"}, {"C136", "C136", "C136", "C292", "0.6500", "1", "0.0"}, {"C136", "C136", "C136", "C292", "-0.1000", "2", "180.0"}, {"C136", "C136", "C136", "C292", "0.1000", "3", "0.0"}, {"C136", "C136", "C136", "C293", "0.6500", "1", "0.0"}, {"C136", "C136", "C136", "C293", "-0.1000", "2", "180.0"}, {"C136", "C136", "C136", "C293", "0.1000", "3", "0.0"}, {"C136", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C267", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C224", "C235", "-1.1790", "1", "0.0"}, {"C136", "C136", "C224", "C235", "0.4555", "2", "180.0"}, {"C136", "C136", "C224", "C235", "0.0000", "3", "0.0"}, {"C136", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C224", "N238", "0.4420", "1", "0.0"}, {"C136", "C136", "C224", "N238", "0.4485", "2", "180.0"}, {"C136", "C136", "C224", "N238", "0.4400", "3", "0.0"}, {"C136", "C136", "C235", "N237", "1.4220", "1", "0.0"}, {"C136", "C136", "C235", "N237", "-0.1805", "2", "180.0"}, {"C136", "C136", "C235", "N237", "-0.1625", "3", "0.0"}, {"C136", "C136", "C235", "O236", "0.2030", "1", "0.0"}, {"C136", "C136", "C235", "O236", "0.6520", "2", "180.0"}, {"C136", "C136", "C235", "O236", "0.0695", "3", "0.0"}, {"C136", "C136", "C245", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C245", "N239", "0.4225", "1", "0.0"}, {"C136", "C136", "C245", "N239", "-0.4810", "2", "180.0"}, {"C136", "C136", "C245", "N239", "0.3565", "3", "0.0"}, {"C136", "C136", "C246", "C235", "-0.8755", "1", "0.0"}, {"C136", "C136", "C246", "C235", "0.8030", "2", "180.0"}, {"C136", "C136", "C246", "C235", "0.0000", "3", "0.0"}, {"C136", "C136", "C246", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C246", "N239", "0.7860", "1", "0.0"}, {"C136", "C136", "C246", "N239", "0.0795", "2", "180.0"}, {"C136", "C136", "C246", "N239", "0.1000", "3", "0.0"}, {"C136", "C136", "C267", "O268", "0.5000", "1", "0.0"}, {"C136", "C136", "C267", "O268", "0.2730", "2", "180.0"}, {"C136", "C136", "C267", "O268", "0.2250", "3", "0.0"}, {"C136", "C136", "C267", "O269", "0.2730", "2", "180.0"}, {"C136", "C136", "C283", "C271", "-1.1790", "1", "0.0"}, {"C136", "C136", "C283", "C271", "0.4555", "2", "180.0"}, {"C136", "C136", "C283", "C271", "0.0000", "3", "0.0"}, {"C136", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C283", "N238", "0.4420", "1", "0.0"}, {"C136", "C136", "C283", "N238", "0.4485", "2", "180.0"}, {"C136", "C136", "C283", "N238", "0.4400", "3", "0.0"}, {"C136", "C136", "C285", "C271", "-0.8755", "1", "0.0"}, {"C136", "C136", "C285", "C271", "0.8030", "2", "180.0"}, {"C136", "C136", "C285", "C271", "0.0000", "3", "0.0"}, {"C136", "C136", "C285", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C285", "N239", "0.7860", "1", "0.0"}, {"C136", "C136", "C285", "N239", "0.0795", "2", "180.0"}, {"C136", "C136", "C285", "N239", "0.1000", "3", "0.0"}, {"C136", "C136", "C292", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C292", "N287", "1.3660", "1", "0.0"}, {"C136", "C136", "C292", "N287", "-0.1145", "2", "180.0"}, {"C136", "C136", "C292", "N287", "0.2425", "3", "0.0"}, {"C136", "C136", "C293", "C235", "-1.1790", "1", "0.0"}, {"C136", "C136", "C293", "C235", "0.4555", "2", "180.0"}, {"C136", "C136", "C293", "C235", "0.0000", "3", "0.0"}, {"C136", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C293", "N287", "0.4420", "1", "0.0"}, {"C136", "C136", "C293", "N287", "0.4485", "2", "180.0"}, {"C136", "C136", "C293", "N287", "0.4400", "3", "0.0"}, {"C136", "C136", "C295", "C235", "-0.8755", "1", "0.0"}, {"C136", "C136", "C295", "C235", "0.8030", "2", "180.0"}, {"C136", "C136", "C295", "C235", "0.0000", "3", "0.0"}, {"C136", "C136", "C295", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C295", "N309", "1.3660", "1", "0.0"}, {"C136", "C136", "C295", "N309", "-0.1145", "2", "180.0"}, {"C136", "C136", "C295", "N309", "0.2425", "3", "0.0"}, {"C136", "C136", "C296", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C296", "N309", "1.3660", "1", "0.0"}, {"C136", "C136", "C296", "N309", "-0.1145", "2", "180.0"}, {"C136", "C136", "C296", "N309", "0.2425", "3", "0.0"}, {"C136", "C137", "C135", "H140", "0.1500", "3", "0.0"}, {"C136", "C137", "C224", "C235", "-0.7110", "1", "0.0"}, {"C136", "C137", "C224", "C235", "0.5340", "2", "180.0"}, {"C136", "C137", "C224", "C235", "0.0000", "3", "0.0"}, {"C136", "C137", "C224", "H140", "0.1500", "3", "0.0"}, {"C136", "C137", "C224", "N238", "1.4970", "1", "0.0"}, {"C136", "C137", "C224", "N238", "0.1260", "2", "180.0"}, {"C136", "C137", "C224", "N238", "0.1500", "3", "0.0"}, {"C136", "C137", "C283", "C271", "-0.7110", "1", "0.0"}, {"C136", "C137", "C283", "C271", "0.5340", "2", "180.0"}, {"C136", "C137", "C283", "C271", "0.0000", "3", "0.0"}, {"C136", "C137", "C283", "H140", "0.1500", "3", "0.0"}, {"C136", "C137", "C283", "N238", "1.4970", "1", "0.0"}, {"C136", "C137", "C283", "N238", "0.1260", "2", "180.0"}, {"C136", "C137", "C283", "N238", "0.1500", "3", "0.0"}, {"C136", "C137", "C293", "C235", "-0.7110", "1", "0.0"}, {"C136", "C137", "C293", "C235", "0.5340", "2", "180.0"}, {"C136", "C137", "C293", "C235", "0.0000", "3", "0.0"}, {"C136", "C137", "C293", "H140", "0.1500", "3", "0.0"}, {"C136", "C137", "C293", "N287", "1.4970", "1", "0.0"}, {"C136", "C137", "C293", "N287", "0.1260", "2", "180.0"}, {"C136", "C137", "C293", "N287", "0.1500", "3", "0.0"}, {"C136", "C210", "S202", "C209", "0.4625", "1", "0.0"}, {"C136", "C210", "S202", "C209", "-0.2880", "2", "180.0"}, {"C136", "C210", "S202", "C209", "0.3385", "3", "0.0"}, {"C136", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C136", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C136", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C136", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C136", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C136", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C136", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C136", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C136", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C136", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C136", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C136", "C235", "N237", "H240", "2.4500", "2", "180.0"}, {"C136", "C245", "N239", "C235", "-0.3410", "1", "0.0"}, {"C136", "C245", "N239", "C235", "0.0650", "2", "180.0"}, {"C136", "C245", "N239", "C235", "0.1690", "3", "0.0"}, {"C136", "C245", "N239", "C246", "1.4295", "1", "0.0"}, {"C136", "C245", "N239", "C246", "1.0290", "2", "180.0"}, {"C136", "C245", "N239", "C246", "-5.6330", "3", "0.0"}, {"C136", "C245", "N239", "C285", "1.4295", "1", "0.0"}, {"C136", "C245", "N239", "C285", "1.0290", "2", "180.0"}, {"C136", "C245", "N239", "C285", "-5.6330", "3", "0.0"}, {"C136", "C246", "C235", "N238", "2.5145", "1", "0.0"}, {"C136", "C246", "C235", "N238", "0.3595", "2", "180.0"}, {"C136", "C246", "C235", "N238", "1.1200", "3", "0.0"}, {"C136", "C246", "C235", "N239", "2.5145", "1", "0.0"}, {"C136", "C246", "C235", "N239", "0.3595", "2", "180.0"}, {"C136", "C246", "C235", "N239", "1.1200", "3", "0.0"}, {"C136", "C246", "C235", "O236", "0.0000", "1", "0.0"}, {"C136", "C246", "N239", "C235", "-0.3410", "1", "0.0"}, {"C136", "C246", "N239", "C235", "0.0650", "2", "180.0"}, {"C136", "C246", "N239", "C235", "0.1690", "3", "0.0"}, {"C136", "C246", "N239", "C245", "2.3765", "1", "0.0"}, {"C136", "C246", "N239", "C245", "-0.3670", "2", "180.0"}, {"C136", "C267", "O268", "H270", "0.7500", "1", "0.0"}, {"C136", "C267", "O268", "H270", "2.7500", "2", "180.0"}, {"C136", "C274", "C271", "O272", "0.2730", "2", "180.0"}, {"C136", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C136", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C136", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C136", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C136", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C136", "C285", "C271", "O272", "0.4100", "2", "180.0"}, {"C136", "C285", "N239", "C235", "-0.3410", "1", "0.0"}, {"C136", "C285", "N239", "C235", "0.0650", "2", "180.0"}, {"C136", "C285", "N239", "C235", "0.1690", "3", "0.0"}, {"C136", "C285", "N239", "C245", "2.3765", "1", "0.0"}, {"C136", "C285", "N239", "C245", "-0.3670", "2", "180.0"}, {"C136", "C292", "N287", "H290", "0.1735", "3", "0.0"}, {"C136", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C136", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C136", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C136", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C136", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C136", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C136", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C136", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C136", "C295", "C235", "N238", "2.5145", "1", "0.0"}, {"C136", "C295", "C235", "N238", "0.3595", "2", "180.0"}, {"C136", "C295", "C235", "N238", "1.1200", "3", "0.0"}, {"C136", "C295", "C235", "N239", "2.5145", "1", "0.0"}, {"C136", "C295", "C235", "N239", "0.3595", "2", "180.0"}, {"C136", "C295", "C235", "N239", "1.1200", "3", "0.0"}, {"C136", "C295", "C235", "O236", "0.0000", "1", "0.0"}, {"C136", "C295", "N309", "C296", "0.71895", "1", "0.0"}, {"C136", "C295", "N309", "C296", "-0.0619", "2", "180.0"}, {"C136", "C295", "N309", "C296", "0.13195", "3", "0.0"}, {"C136", "C295", "N309", "H310", "0.1735", "3", "0.0"}, {"C136", "C296", "N309", "C295", "0.71895", "1", "0.0"}, {"C136", "C296", "N309", "C295", "-0.0619", "2", "180.0"}, {"C136", "C296", "N309", "C295", "0.13195", "3", "0.0"}, {"C136", "C296", "N309", "H310", "0.1735", "3", "0.0"}, {"C136", "C308", "C307", "H140", "0.1500", "3", "0.0"}, {"C136", "C308", "C307", "N303", "1.3660", "1", "0.0"}, {"C136", "C308", "C307", "N303", "-0.1145", "2", "180.0"}, {"C136", "C308", "C307", "N303", "0.2425", "3", "0.0"}, {"C137", "C136", "C135", "H140", "0.1500", "3", "0.0"}, {"C137", "C136", "C224", "C235", "-0.8755", "1", "0.0"}, {"C137", "C136", "C224", "C235", "0.8030", "2", "180.0"}, {"C137", "C136", "C224", "C235", "0.0000", "3", "0.0"}, {"C137", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"C137", "C136", "C224", "N238", "0.7860", "1", "0.0"}, {"C137", "C136", "C224", "N238", "0.0795", "2", "180.0"}, {"C137", "C136", "C224", "N238", "0.1000", "3", "0.0"}, {"C137", "C136", "C283", "C271", "-0.8755", "1", "0.0"}, {"C137", "C136", "C283", "C271", "0.8030", "2", "180.0"}, {"C137", "C136", "C283", "C271", "0.0000", "3", "0.0"}, {"C137", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"C137", "C136", "C283", "N238", "0.7860", "1", "0.0"}, {"C137", "C136", "C283", "N238", "0.0795", "2", "180.0"}, {"C137", "C136", "C283", "N238", "0.1000", "3", "0.0"}, {"C137", "C136", "C293", "C235", "-0.8755", "1", "0.0"}, {"C137", "C136", "C293", "C235", "0.8030", "2", "180.0"}, {"C137", "C136", "C293", "C235", "0.0000", "3", "0.0"}, {"C137", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"C137", "C136", "C293", "N287", "0.7860", "1", "0.0"}, {"C137", "C136", "C293", "N287", "0.0795", "2", "180.0"}, {"C137", "C136", "C293", "N287", "0.1000", "3", "0.0"}, {"C137", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C137", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C137", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C137", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C137", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C137", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C137", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C137", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C137", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C137", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C137", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C137", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C137", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C137", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C137", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C137", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C137", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C137", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C137", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C137", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C137", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C137", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C137", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C137", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C145", "C145", "C149", "C224", "0.0000", "1", "0.0"}, {"C145", "C145", "C149", "C283", "0.0000", "1", "0.0"}, {"C145", "C145", "C149", "C293", "0.0000", "1", "0.0"}, {"C145", "C145", "C149", "H140", "0.0000", "1", "0.0"}, {"C145", "C149", "C224", "C235", "-0.7030", "1", "0.0"}, {"C145", "C149", "C224", "C235", "0.8885", "2", "180.0"}, {"C145", "C149", "C224", "C235", "0.0000", "3", "0.0"}, {"C145", "C149", "C224", "H140", "0.2310", "3", "0.0"}, {"C145", "C149", "C224", "N238", "0.8560", "1", "0.0"}, {"C145", "C149", "C224", "N238", "0.3625", "2", "180.0"}, {"C145", "C149", "C224", "N238", "0.1830", "3", "0.0"}, {"C145", "C149", "C283", "C271", "-0.7030", "1", "0.0"}, {"C145", "C149", "C283", "C271", "0.8885", "2", "180.0"}, {"C145", "C149", "C283", "C271", "0.0000", "3", "0.0"}, {"C145", "C149", "C283", "H140", "0.2310", "3", "0.0"}, {"C145", "C149", "C283", "N238", "0.8560", "1", "0.0"}, {"C145", "C149", "C283", "N238", "0.3625", "2", "180.0"}, {"C145", "C149", "C283", "N238", "0.1830", "3", "0.0"}, {"C145", "C149", "C293", "C235", "-0.7030", "1", "0.0"}, {"C145", "C149", "C293", "C235", "0.8885", "2", "180.0"}, {"C145", "C149", "C293", "C235", "0.0000", "3", "0.0"}, {"C145", "C149", "C293", "H140", "0.2310", "3", "0.0"}, {"C145", "C149", "C293", "N287", "0.8560", "1", "0.0"}, {"C145", "C149", "C293", "N287", "0.3625", "2", "180.0"}, {"C145", "C149", "C293", "N287", "0.1830", "3", "0.0"}, {"C145", "C166", "C145", "H146", "3.6250", "2", "180.0"}, {"C145", "C166", "O167", "H168", "0.8410", "2", "180.0"}, {"C145", "C501", "C500", "C514", "1.6750", "2", "180.0"}, {"C145", "C502", "C501", "C500", "3.0000", "2", "180.0"}, {"C149", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C149", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C149", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C149", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C149", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C149", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C149", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C149", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C149", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C149", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C149", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C149", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C149", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C149", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C149", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C149", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C149", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C149", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C149", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C149", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C149", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C149", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C149", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C149", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C157", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C157", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C157", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C157", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C157", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C157", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C157", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C157", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C157", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C157", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C157", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C157", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C157", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C157", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C157", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C157", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C157", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C157", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C157", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C157", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C157", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C158", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C158", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C158", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C158", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C158", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C158", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C158", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C158", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C158", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C158", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C158", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C158", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C158", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C158", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C158", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C158", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C158", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C158", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C158", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C158", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C158", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C158", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C158", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C158", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C206", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C206", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C206", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C206", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C206", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C206", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C206", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C206", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C206", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C206", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C206", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C206", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C206", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C206", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C206", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C206", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C206", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C206", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C206", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C206", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C206", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C206", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C206", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C206", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C209", "S202", "C210", "H140", "0.3235", "3", "0.0"}, {"C210", "C136", "C224", "C235", "-0.4555", "1", "0.0"}, {"C210", "C136", "C224", "C235", "0.3495", "2", "180.0"}, {"C210", "C136", "C224", "C235", "0.0000", "3", "0.0"}, {"C210", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"C210", "C136", "C224", "N238", "0.1070", "1", "0.0"}, {"C210", "C136", "C224", "N238", "0.2705", "2", "180.0"}, {"C210", "C136", "C224", "N238", "0.1960", "3", "0.0"}, {"C210", "C136", "C283", "C271", "-0.4555", "1", "0.0"}, {"C210", "C136", "C283", "C271", "0.3495", "2", "180.0"}, {"C210", "C136", "C283", "C271", "0.0000", "3", "0.0"}, {"C210", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"C210", "C136", "C283", "N238", "0.1070", "1", "0.0"}, {"C210", "C136", "C283", "N238", "0.2705", "2", "180.0"}, {"C210", "C136", "C283", "N238", "0.1960", "3", "0.0"}, {"C210", "C136", "C293", "C235", "-0.4555", "1", "0.0"}, {"C210", "C136", "C293", "C235", "0.3495", "2", "180.0"}, {"C210", "C136", "C293", "C235", "0.0000", "3", "0.0"}, {"C210", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"C210", "C136", "C293", "N287", "0.1070", "1", "0.0"}, {"C210", "C136", "C293", "N287", "0.2705", "2", "180.0"}, {"C210", "C136", "C293", "N287", "0.1960", "3", "0.0"}, {"C210", "S202", "C209", "H140", "0.3235", "3", "0.0"}, {"C214", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C214", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C214", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C214", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C214", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C214", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C214", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C214", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C214", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C214", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C214", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C214", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C214", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C214", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C214", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C214", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C214", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C214", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C214", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C214", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C214", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C214", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C214", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C214", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C214", "S203", "S203", "C214", "-3.7070", "2", "180.0"}, {"C214", "S203", "S203", "C214", "0.8525", "3", "0.0"}, {"C223", "C235", "N238", "C223", "1.1500", "1", "0.0"}, {"C223", "C235", "N238", "C223", "3.0445", "2", "180.0"}, {"C223", "C235", "N238", "C224", "1.1500", "1", "0.0"}, {"C223", "C235", "N238", "C224", "3.0445", "2", "180.0"}, {"C223", "C235", "N238", "C242", "1.1500", "1", "0.0"}, {"C223", "C235", "N238", "C242", "3.0445", "2", "180.0"}, {"C223", "C235", "N238", "C283", "1.1500", "1", "0.0"}, {"C223", "C235", "N238", "C283", "3.0445", "2", "180.0"}, {"C295", "C235", "N238", "C283", "1.1500", "1", "0.0"}, {"C295", "C235", "N238", "C283", "3.0445", "2", "180.0"}, {"C223", "C235", "N238", "C284", "1.1500", "1", "0.0"}, {"C223", "C235", "N238", "C284", "3.0445", "2", "180.0"}, {"C223", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C223", "C235", "N239", "C245", "1.1500", "1", "0.0"}, {"C223", "C235", "N239", "C245", "3.0445", "2", "180.0"}, {"C223", "C235", "N239", "C246", "1.1500", "1", "0.0"}, {"C223", "C235", "N239", "C246", "3.0445", "2", "180.0"}, {"C223", "C235", "N239", "C285", "1.1500", "1", "0.0"}, {"C223", "C235", "N239", "C285", "3.0445", "2", "180.0"}, {"C223", "N238", "C235", "C224", "1.1500", "1", "0.0"}, {"C223", "N238", "C235", "C224", "3.0445", "2", "180.0"}, {"C223", "N238", "C235", "C246", "1.1500", "1", "0.0"}, {"C223", "N238", "C235", "C246", "3.0445", "2", "180.0"}, {"C223", "N238", "C235", "C292", "1.1500", "1", "0.0"}, {"C223", "N238", "C235", "C292", "3.0445", "2", "180.0"}, {"C223", "N238", "C235", "C293", "1.1500", "1", "0.0"}, {"C223", "N238", "C235", "C293", "3.0445", "2", "180.0"}, {"C223", "N238", "C235", "C295", "1.1500", "1", "0.0"}, {"C223", "N238", "C235", "C295", "3.0445", "2", "180.0"}, {"C223", "N238", "C235", "O236", "3.0445", "2", "180.0"}, {"C224", "C136", "C136", "C235", "-0.6335", "1", "0.0"}, {"C224", "C136", "C136", "C235", "0.2395", "2", "180.0"}, {"C224", "C136", "C136", "C235", "-0.2430", "3", "0.0"}, {"C224", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C224", "C136", "C137", "H140", "0.1500", "3", "0.0"}, {"C224", "C136", "C210", "H140", "0.1500", "3", "0.0"}, {"C224", "C136", "C210", "S202", "-0.7825", "1", "0.0"}, {"C224", "C136", "C210", "S202", "-0.0045", "2", "180.0"}, {"C224", "C136", "C210", "S202", "-0.2250", "3", "0.0"}, {"C224", "C136", "C235", "N237", "0.7470", "1", "0.0"}, {"C224", "C136", "C235", "N237", "-0.2555", "2", "180.0"}, {"C224", "C136", "C235", "N237", "0.0625", "3", "0.0"}, {"C224", "C136", "C235", "O236", "0.8280", "1", "0.0"}, {"C224", "C136", "C235", "O236", "0.6520", "2", "180.0"}, {"C224", "C136", "C235", "O236", "0.2195", "3", "0.0"}, {"C224", "C136", "C267", "O268", "0.5000", "1", "0.0"}, {"C224", "C136", "C267", "O268", "0.2730", "2", "180.0"}, {"C224", "C136", "C267", "O268", "0.2250", "3", "0.0"}, {"C224", "C136", "C267", "O269", "0.2730", "2", "180.0"}, {"C224", "C136", "C274", "C271", "-0.4425", "1", "0.0"}, {"C224", "C136", "C274", "C271", "0.5125", "2", "180.0"}, {"C224", "C136", "C274", "C271", "-0.6465", "3", "0.0"}, {"C224", "C136", "C274", "H140", "0.1500", "3", "0.0"}, {"C224", "C136", "C308", "C307", "0.6500", "1", "0.0"}, {"C224", "C136", "C308", "C307", "-0.1000", "2", "180.0"}, {"C224", "C136", "C308", "C307", "0.1000", "3", "0.0"}, {"C224", "C136", "C308", "H140", "0.1500", "3", "0.0"}, {"C224", "C136", "C500", "C501", "0.0000", "1", "0.0"}, {"C224", "C136", "C500", "C514", "-0.3570", "1", "0.0"}, {"C224", "C137", "C135", "H140", "0.1500", "3", "0.0"}, {"C224", "C137", "C136", "H140", "0.1500", "3", "0.0"}, {"C224", "C157", "O154", "H155", "-0.1780", "1", "0.0"}, {"C224", "C157", "O154", "H155", "-0.0870", "2", "180.0"}, {"C224", "C157", "O154", "H155", "0.2460", "3", "0.0"}, {"C224", "C158", "C135", "H140", "0.1500", "3", "0.0"}, {"C224", "C158", "O154", "H155", "-0.1780", "1", "0.0"}, {"C224", "C158", "O154", "H155", "-0.0870", "2", "180.0"}, {"C224", "C158", "O154", "H155", "0.2460", "3", "0.0"}, {"C224", "C206", "S200", "H204", "-0.3795", "1", "0.0"}, {"C224", "C206", "S200", "H204", "-0.1410", "2", "180.0"}, {"C224", "C206", "S200", "H204", "0.3400", "3", "0.0"}, {"C224", "C214", "S203", "S203", "0.9705", "1", "0.0"}, {"C224", "C214", "S203", "S203", "-0.4180", "2", "180.0"}, {"C224", "C214", "S203", "S203", "0.4675", "3", "0.0"}, {"C224", "C235", "N238", "C224", "1.1500", "1", "0.0"}, {"C224", "C235", "N238", "C224", "3.0445", "2", "180.0"}, {"C224", "C235", "N238", "C242", "1.1500", "1", "0.0"}, {"C224", "C235", "N238", "C242", "3.0445", "2", "180.0"}, {"C224", "C235", "N238", "C283", "1.1500", "1", "0.0"}, {"C224", "C235", "N238", "C283", "3.0445", "2", "180.0"}, {"C224", "C235", "N238", "C284", "1.1500", "1", "0.0"}, {"C224", "C235", "N238", "C284", "3.0445", "2", "180.0"}, {"C224", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C224", "C235", "N239", "C245", "1.1500", "1", "0.0"}, {"C224", "C235", "N239", "C245", "3.0445", "2", "180.0"}, {"C224", "C235", "N239", "C246", "1.1500", "1", "0.0"}, {"C224", "C235", "N239", "C246", "3.0445", "2", "180.0"}, {"C224", "C235", "N239", "C285", "1.1500", "1", "0.0"}, {"C224", "C235", "N239", "C285", "3.0445", "2", "180.0"}, {"C223", "C267", "O268", "H270", "0.7500", "1", "0.0"}, {"C223", "C267", "O268", "H270", "2.7500", "2", "180.0"}, {"C224", "C267", "O268", "H270", "0.7500", "1", "0.0"}, {"C224", "C267", "O268", "H270", "2.7500", "2", "180.0"}, {"C224", "C274", "C271", "O272", "1.2500", "1", "0.0"}, {"C224", "C274", "C271", "O272", "0.5000", "2", "180.0"}, {"C224", "C274", "C271", "O272", "0.6750", "3", "0.0"}, {"C224", "C505", "C507", "C508", "0.0000", "1", "0.0"}, {"C224", "C505", "C507", "N511", "-0.2800", "1", "0.0"}, {"C224", "C505", "C507", "N511", "-0.3700", "2", "180.0"}, {"C224", "C505", "C507", "N511", "0.1745", "3", "0.0"}, {"C224", "C505", "C508", "C507", "0.0000", "1", "0.0"}, {"C224", "C505", "C508", "N503", "-0.2800", "1", "0.0"}, {"C224", "C505", "C508", "N503", "-0.3700", "2", "180.0"}, {"C224", "C505", "C508", "N503", "0.1745", "3", "0.0"}, {"C224", "C505", "C510", "C510", "0.0000", "1", "0.0"}, {"C224", "C505", "C510", "N512", "-1.9950", "1", "0.0"}, {"C224", "C505", "C510", "N512", "0.8400", "2", "180.0"}, {"C224", "C505", "C510", "N512", "0.1450", "3", "0.0"}, {"C224", "N238", "C235", "C246", "1.1500", "1", "0.0"}, {"C224", "N238", "C235", "C246", "3.0445", "2", "180.0"}, {"C224", "N238", "C235", "C292", "1.1500", "1", "0.0"}, {"C224", "N238", "C235", "C292", "3.0445", "2", "180.0"}, {"C224", "N238", "C235", "C293", "1.1500", "1", "0.0"}, {"C224", "N238", "C235", "C293", "3.0445", "2", "180.0"}, {"C224", "N238", "C235", "C295", "1.1500", "1", "0.0"}, {"C224", "N238", "C235", "C295", "3.0445", "2", "180.0"}, {"C224", "N238", "C235", "O236", "3.0445", "2", "180.0"}, {"C235", "C136", "C136", "C283", "-0.6335", "1", "0.0"}, {"C235", "C136", "C136", "C283", "0.2395", "2", "180.0"}, {"C235", "C136", "C136", "C283", "-0.2430", "3", "0.0"}, {"C235", "C136", "C136", "C293", "-0.6335", "1", "0.0"}, {"C235", "C136", "C136", "C293", "0.2395", "2", "180.0"}, {"C235", "C136", "C136", "C293", "-0.2430", "3", "0.0"}, {"C235", "C136", "C136", "H140", "-0.0500", "3", "0.0"}, {"C235", "C136", "C224", "C235", "0.2990", "1", "0.0"}, {"C235", "C136", "C224", "C235", "0.7790", "2", "180.0"}, {"C235", "C136", "C224", "C235", "0.1275", "3", "0.0"}, {"C235", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"C235", "C136", "C224", "N238", "-2.7505", "1", "0.0"}, {"C235", "C136", "C224", "N238", "0.7635", "2", "180.0"}, {"C235", "C136", "C224", "N238", "0.0000", "3", "0.0"}, {"C235", "C136", "C283", "C271", "0.2990", "1", "0.0"}, {"C235", "C136", "C283", "C271", "0.7790", "2", "180.0"}, {"C235", "C136", "C283", "C271", "0.1275", "3", "0.0"}, {"C235", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"C235", "C136", "C283", "N238", "-2.7505", "1", "0.0"}, {"C235", "C136", "C283", "N238", "0.7635", "2", "180.0"}, {"C235", "C136", "C283", "N238", "0.0000", "3", "0.0"}, {"C235", "C136", "C293", "C235", "0.2990", "1", "0.0"}, {"C235", "C136", "C293", "C235", "0.7790", "2", "180.0"}, {"C235", "C136", "C293", "C235", "0.1275", "3", "0.0"}, {"C235", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"C235", "C136", "C293", "N287", "-2.7505", "1", "0.0"}, {"C235", "C136", "C293", "N287", "0.7635", "2", "180.0"}, {"C235", "C136", "C293", "N287", "0.0000", "3", "0.0"}, {"C235", "C223", "N238", "C235", "-1.2555", "1", "0.0"}, {"C235", "C223", "N238", "C235", "0.1050", "2", "180.0"}, {"C235", "C223", "N238", "C235", "-0.1000", "3", "0.0"}, {"C235", "C223", "N238", "H241", "0.0000", "1", "0.0"}, {"C235", "C224", "C135", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C136", "C267", "0.2990", "1", "0.0"}, {"C235", "C224", "C136", "C267", "0.7790", "2", "180.0"}, {"C235", "C224", "C136", "C267", "0.1275", "3", "0.0"}, {"C235", "C224", "C136", "C274", "-0.8820", "1", "0.0"}, {"C235", "C224", "C136", "C274", "0.3500", "2", "180.0"}, {"C235", "C224", "C136", "C274", "0.0000", "3", "0.0"}, {"C235", "C224", "C136", "C308", "-0.9855", "1", "0.0"}, {"C235", "C224", "C136", "C308", "0.3850", "2", "180.0"}, {"C235", "C224", "C136", "C308", "0.0000", "3", "0.0"}, {"C235", "C224", "C136", "C500", "-0.2530", "1", "0.0"}, {"C235", "C224", "C136", "C500", "0.4875", "2", "180.0"}, {"C235", "C224", "C136", "C500", "0.0000", "3", "0.0"}, {"C235", "C224", "C136", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C137", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C149", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C157", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C157", "O154", "-2.8965", "1", "0.0"}, {"C235", "C224", "C157", "O154", "0.2025", "2", "180.0"}, {"C235", "C224", "C157", "O154", "0.0000", "3", "0.0"}, {"C235", "C224", "C158", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C158", "O154", "-2.8965", "1", "0.0"}, {"C235", "C224", "C158", "O154", "0.2025", "2", "180.0"}, {"C235", "C224", "C158", "O154", "0.0000", "3", "0.0"}, {"C235", "C224", "C206", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C206", "S200", "-1.6615", "1", "0.0"}, {"C235", "C224", "C206", "S200", "0.2645", "2", "180.0"}, {"C235", "C224", "C206", "S200", "0.0000", "3", "0.0"}, {"C235", "C224", "C214", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C214", "S203", "-1.6615", "1", "0.0"}, {"C235", "C224", "C214", "S203", "0.2645", "2", "180.0"}, {"C235", "C224", "C214", "S203", "0.0000", "3", "0.0"}, {"C235", "C224", "C274", "C271", "0.7715", "1", "0.0"}, {"C235", "C224", "C274", "C271", "0.3480", "2", "180.0"}, {"C235", "C224", "C274", "C271", "0.0000", "3", "0.0"}, {"C235", "C224", "C274", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C505", "C507", "-0.6410", "1", "0.0"}, {"C235", "C224", "C505", "C507", "0.8225", "2", "180.0"}, {"C235", "C224", "C505", "C507", "-0.0085", "3", "0.0"}, {"C235", "C224", "C505", "C508", "-0.6410", "1", "0.0"}, {"C235", "C224", "C505", "C508", "0.8225", "2", "180.0"}, {"C235", "C224", "C505", "C508", "-0.0085", "3", "0.0"}, {"C235", "C224", "C505", "C510", "-0.8540", "1", "0.0"}, {"C235", "C224", "C505", "C510", "0.7580", "2", "180.0"}, {"C235", "C224", "C505", "C510", "-0.2510", "3", "0.0"}, {"C235", "C224", "C505", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "N238", "C235", "-1.2555", "1", "0.0"}, {"C235", "C224", "N238", "C235", "0.1050", "2", "180.0"}, {"C235", "C224", "N238", "C235", "-0.1000", "3", "0.0"}, {"C235", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C235", "N238", "C223", "C267", "-1.2555", "1", "0.0"}, {"C235", "N238", "C223", "C267", "0.1050", "2", "180.0"}, {"C235", "N238", "C223", "C267", "-0.1000", "3", "0.0"}, {"C235", "N238", "C224", "C267", "-1.2555", "1", "0.0"}, {"C235", "N238", "C224", "C267", "0.1050", "2", "180.0"}, {"C235", "N238", "C224", "C267", "-0.1000", "3", "0.0"}, {"C235", "C246", "C136", "H140", "-0.0380", "3", "0.0"}, {"C235", "C246", "N239", "C235", "-1.2555", "1", "0.0"}, {"C235", "C246", "N239", "C235", "0.1050", "2", "180.0"}, {"C235", "C246", "N239", "C235", "-0.1000", "3", "0.0"}, {"C235", "C246", "N239", "C245", "-0.8685", "1", "0.0"}, {"C235", "C246", "N239", "C245", "0.6255", "2", "180.0"}, {"C235", "C246", "N239", "C245", "-1.7505", "3", "0.0"}, {"C235", "C292", "N287", "H290", "0.1735", "3", "0.0"}, {"C235", "C293", "C135", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C136", "C274", "-0.8820", "1", "0.0"}, {"C235", "C293", "C136", "C274", "0.3500", "2", "180.0"}, {"C235", "C293", "C136", "C274", "0.0000", "3", "0.0"}, {"C235", "C293", "C136", "C308", "-0.9855", "1", "0.0"}, {"C235", "C293", "C136", "C308", "0.3850", "2", "180.0"}, {"C235", "C293", "C136", "C308", "0.0000", "3", "0.0"}, {"C235", "C293", "C136", "C500", "-0.2530", "1", "0.0"}, {"C235", "C293", "C136", "C500", "0.4875", "2", "180.0"}, {"C235", "C293", "C136", "C500", "0.0000", "3", "0.0"}, {"C235", "C293", "C136", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C137", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C149", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C157", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C157", "O154", "-2.8965", "1", "0.0"}, {"C235", "C293", "C157", "O154", "0.2025", "2", "180.0"}, {"C235", "C293", "C157", "O154", "0.0000", "3", "0.0"}, {"C235", "C293", "C158", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C158", "O154", "-2.8965", "1", "0.0"}, {"C235", "C293", "C158", "O154", "0.2025", "2", "180.0"}, {"C235", "C293", "C158", "O154", "0.0000", "3", "0.0"}, {"C235", "C293", "C206", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C206", "S200", "-1.6615", "1", "0.0"}, {"C235", "C293", "C206", "S200", "0.2645", "2", "180.0"}, {"C235", "C293", "C206", "S200", "0.0000", "3", "0.0"}, {"C235", "C293", "C214", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C214", "S203", "-1.6615", "1", "0.0"}, {"C235", "C293", "C214", "S203", "0.2645", "2", "180.0"}, {"C235", "C293", "C214", "S203", "0.0000", "3", "0.0"}, {"C235", "C293", "C274", "C271", "0.7715", "1", "0.0"}, {"C235", "C293", "C274", "C271", "0.3480", "2", "180.0"}, {"C235", "C293", "C274", "C271", "0.0000", "3", "0.0"}, {"C235", "C293", "C274", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C505", "C507", "-0.6410", "1", "0.0"}, {"C235", "C293", "C505", "C507", "0.8225", "2", "180.0"}, {"C235", "C293", "C505", "C507", "-0.0085", "3", "0.0"}, {"C235", "C293", "C505", "C508", "-0.6410", "1", "0.0"}, {"C235", "C293", "C505", "C508", "0.8225", "2", "180.0"}, {"C235", "C293", "C505", "C508", "-0.0085", "3", "0.0"}, {"C235", "C293", "C505", "C510", "-0.8540", "1", "0.0"}, {"C235", "C293", "C505", "C510", "0.7580", "2", "180.0"}, {"C235", "C293", "C505", "C510", "-0.2510", "3", "0.0"}, {"C235", "C293", "C505", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C235", "C295", "C136", "H140", "-0.0380", "3", "0.0"}, {"C235", "C295", "N309", "C296", "0.71895", "1", "0.0"}, {"C235", "C295", "N309", "C296", "-0.0619", "2", "180.0"}, {"C235", "C295", "N309", "C296", "0.13195", "3", "0.0"}, {"C235", "C295", "N309", "H310", "0.1735", "3", "0.0"}, {"C235", "N238", "C223", "H140", "0.0000", "1", "0.0"}, {"C235", "N238", "C224", "C274", "-0.3410", "1", "0.0"}, {"C235", "N238", "C224", "C274", "0.0650", "2", "180.0"}, {"C235", "N238", "C224", "C274", "0.1690", "3", "0.0"}, {"C235", "N238", "C224", "C505", "-0.3410", "1", "0.0"}, {"C235", "N238", "C224", "C505", "0.0650", "2", "180.0"}, {"C235", "N238", "C224", "C505", "0.1690", "3", "0.0"}, {"C235", "N238", "C224", "H140", "0.0000", "1", "0.0"}, {"C235", "N238", "C242", "H140", "0.0000", "1", "0.0"}, {"C235", "N238", "C283", "C271", "-1.2555", "1", "0.0"}, {"C235", "N238", "C283", "C271", "0.1050", "2", "180.0"}, {"C235", "N238", "C283", "C271", "-0.1000", "3", "0.0"}, {"C235", "N238", "C283", "C274", "-0.3410", "1", "0.0"}, {"C235", "N238", "C283", "C274", "0.0650", "2", "180.0"}, {"C235", "N238", "C283", "C274", "0.1690", "3", "0.0"}, {"C235", "N238", "C283", "C505", "-0.3410", "1", "0.0"}, {"C235", "N238", "C283", "C505", "0.0650", "2", "180.0"}, {"C235", "N238", "C283", "C505", "0.1690", "3", "0.0"}, {"C235", "N238", "C283", "H140", "0.0000", "1", "0.0"}, {"C235", "N238", "C284", "C271", "-1.2555", "1", "0.0"}, {"C235", "N238", "C284", "C271", "0.1050", "2", "180.0"}, {"C235", "N238", "C284", "C271", "-0.1000", "3", "0.0"}, {"C235", "N238", "C284", "H140", "0.0000", "1", "0.0"}, {"C235", "N239", "C245", "H140", "0.0000", "1", "0.0"}, {"C235", "N239", "C246", "H140", "0.0000", "1", "0.0"}, {"C235", "N239", "C285", "C271", "-1.2555", "1", "0.0"}, {"C235", "N239", "C285", "C271", "0.1050", "2", "180.0"}, {"C235", "N239", "C285", "C271", "-0.1000", "3", "0.0"}, {"C235", "N239", "C285", "H140", "0.0000", "1", "0.0"}, {"C242", "N238", "C235", "C246", "1.1500", "1", "0.0"}, {"C242", "N238", "C235", "C246", "3.0445", "2", "180.0"}, {"C242", "N238", "C235", "O236", "3.0445", "2", "180.0"}, {"C245", "C136", "C136", "C246", "0.6500", "1", "0.0"}, {"C245", "C136", "C136", "C246", "-0.1000", "2", "180.0"}, {"C245", "C136", "C136", "C246", "0.1000", "3", "0.0"}, {"C245", "C136", "C136", "C285", "0.6500", "1", "0.0"}, {"C245", "C136", "C136", "C285", "-0.1000", "2", "180.0"}, {"C245", "C136", "C136", "C285", "0.1000", "3", "0.0"}, {"C245", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C245", "N239", "C235", "C246", "1.1500", "1", "0.0"}, {"C245", "N239", "C235", "C246", "3.0445", "2", "180.0"}, {"C245", "N239", "C235", "C292", "1.1500", "1", "0.0"}, {"C245", "N239", "C235", "C292", "3.0445", "2", "180.0"}, {"C245", "N239", "C235", "C293", "1.1500", "1", "0.0"}, {"C245", "N239", "C235", "C293", "3.0445", "2", "180.0"}, {"C245", "N239", "C235", "C295", "1.1500", "1", "0.0"}, {"C245", "N239", "C235", "C295", "3.0445", "2", "180.0"}, {"C245", "N239", "C235", "O236", "3.0445", "2", "180.0"}, {"C245", "N239", "C246", "H140", "0.0000", "1", "0.0"}, {"C245", "N239", "C285", "C271", "-0.8685", "1", "0.0"}, {"C245", "N239", "C285", "C271", "0.6255", "2", "180.0"}, {"C245", "N239", "C285", "C271", "-1.7505", "3", "0.0"}, {"C245", "N239", "C285", "H140", "0.0000", "1", "0.0"}, {"C246", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C246", "C235", "N238", "C283", "1.1500", "1", "0.0"}, {"C246", "C235", "N238", "C283", "3.0445", "2", "180.0"}, {"C246", "C235", "N238", "C284", "1.1500", "1", "0.0"}, {"C246", "C235", "N238", "C284", "3.0445", "2", "180.0"}, {"C246", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C246", "C235", "N239", "C246", "1.1500", "1", "0.0"}, {"C246", "C235", "N239", "C246", "3.0445", "2", "180.0"}, {"C246", "C235", "N239", "C285", "1.1500", "1", "0.0"}, {"C246", "C235", "N239", "C285", "3.0445", "2", "180.0"}, {"C246", "N239", "C235", "C292", "1.1500", "1", "0.0"}, {"C246", "N239", "C235", "C292", "3.0445", "2", "180.0"}, {"C246", "N239", "C235", "C293", "1.1500", "1", "0.0"}, {"C246", "N239", "C235", "C293", "3.0445", "2", "180.0"}, {"C246", "N239", "C235", "C295", "1.1500", "1", "0.0"}, {"C246", "N239", "C235", "C295", "3.0445", "2", "180.0"}, {"C246", "N239", "C235", "O236", "3.0445", "2", "180.0"}, {"C246", "N239", "C245", "H140", "0.0000", "1", "0.0"}, {"C267", "C136", "C224", "H140", "-0.0380", "3", "0.0"}, {"C267", "C136", "C224", "N238", "-2.7505", "1", "0.0"}, {"C267", "C136", "C224", "N238", "0.7635", "2", "180.0"}, {"C267", "C136", "C224", "N238", "0.0000", "3", "0.0"}, {"C267", "C224", "C135", "H140", "0.0370", "3", "0.0"}, {"C267", "C223", "N238", "H241", "0.0000", "1", "0.0"}, {"C267", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C271", "C274", "C136", "C283", "-0.4425", "1", "0.0"}, {"C271", "C274", "C136", "C283", "0.5125", "2", "180.0"}, {"C271", "C274", "C136", "C283", "-0.6465", "3", "0.0"}, {"C271", "C274", "C136", "C293", "-0.4425", "1", "0.0"}, {"C271", "C274", "C136", "C293", "0.5125", "2", "180.0"}, {"C271", "C274", "C136", "C293", "-0.6465", "3", "0.0"}, {"C271", "C274", "C136", "H140", "-0.1125", "3", "0.0"}, {"C271", "C274", "C224", "H140", "0.1500", "3", "0.0"}, {"C271", "C274", "C224", "N238", "-3.9450", "1", "0.0"}, {"C271", "C274", "C224", "N238", "0.3310", "2", "180.0"}, {"C271", "C274", "C224", "N238", "0.4985", "3", "0.0"}, {"C271", "C274", "C283", "C271", "0.7715", "1", "0.0"}, {"C271", "C274", "C283", "C271", "0.3480", "2", "180.0"}, {"C271", "C274", "C283", "C271", "0.0000", "3", "0.0"}, {"C271", "C274", "C283", "H140", "0.1500", "3", "0.0"}, {"C271", "C274", "C283", "N238", "-3.9450", "1", "0.0"}, {"C271", "C274", "C283", "N238", "0.3310", "2", "180.0"}, {"C271", "C274", "C283", "N238", "0.4985", "3", "0.0"}, {"C271", "C274", "C293", "H140", "0.1500", "3", "0.0"}, {"C271", "C274", "C293", "N287", "-3.9450", "1", "0.0"}, {"C271", "C274", "C293", "N287", "0.3310", "2", "180.0"}, {"C271", "C274", "C293", "N287", "0.4985", "3", "0.0"}, {"C271", "C283", "C135", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C136", "C274", "-0.8820", "1", "0.0"}, {"C271", "C283", "C136", "C274", "0.3500", "2", "180.0"}, {"C271", "C283", "C136", "C274", "0.0000", "3", "0.0"}, {"C271", "C283", "C136", "C308", "-0.9855", "1", "0.0"}, {"C271", "C283", "C136", "C308", "0.3850", "2", "180.0"}, {"C271", "C283", "C136", "C308", "0.0000", "3", "0.0"}, {"C271", "C283", "C136", "C500", "-0.2530", "1", "0.0"}, {"C271", "C283", "C136", "C500", "0.4875", "2", "180.0"}, {"C271", "C283", "C136", "C500", "0.0000", "3", "0.0"}, {"C271", "C283", "C136", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C137", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C149", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C157", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C157", "O154", "-2.8965", "1", "0.0"}, {"C271", "C283", "C157", "O154", "0.2025", "2", "180.0"}, {"C271", "C283", "C157", "O154", "0.0000", "3", "0.0"}, {"C271", "C283", "C158", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C158", "O154", "-2.8965", "1", "0.0"}, {"C271", "C283", "C158", "O154", "0.2025", "2", "180.0"}, {"C271", "C283", "C158", "O154", "0.0000", "3", "0.0"}, {"C271", "C283", "C206", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C206", "S200", "-1.6615", "1", "0.0"}, {"C271", "C283", "C206", "S200", "0.2645", "2", "180.0"}, {"C271", "C283", "C206", "S200", "0.0000", "3", "0.0"}, {"C271", "C283", "C214", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C214", "S203", "-1.6615", "1", "0.0"}, {"C271", "C283", "C214", "S203", "0.2645", "2", "180.0"}, {"C271", "C283", "C214", "S203", "0.0000", "3", "0.0"}, {"C271", "C283", "C274", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C505", "C507", "-0.6410", "1", "0.0"}, {"C271", "C283", "C505", "C507", "0.8225", "2", "180.0"}, {"C271", "C283", "C505", "C507", "-0.0085", "3", "0.0"}, {"C271", "C283", "C505", "C508", "-0.6410", "1", "0.0"}, {"C271", "C283", "C505", "C508", "0.8225", "2", "180.0"}, {"C271", "C283", "C505", "C508", "-0.0085", "3", "0.0"}, {"C271", "C283", "C505", "C510", "-0.8540", "1", "0.0"}, {"C271", "C283", "C505", "C510", "0.7580", "2", "180.0"}, {"C271", "C283", "C505", "C510", "-0.2510", "3", "0.0"}, {"C271", "C283", "C505", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C271", "C284", "N238", "H241", "0.0000", "1", "0.0"}, {"C271", "C285", "C136", "H140", "-0.0380", "3", "0.0"}, {"C274", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"C274", "C136", "C224", "N238", "0.9935", "1", "0.0"}, {"C274", "C136", "C224", "N238", "0.2285", "2", "180.0"}, {"C274", "C136", "C224", "N238", "0.4100", "3", "0.0"}, {"C274", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"C274", "C136", "C283", "N238", "0.9935", "1", "0.0"}, {"C274", "C136", "C283", "N238", "0.2285", "2", "180.0"}, {"C274", "C136", "C283", "N238", "0.4100", "3", "0.0"}, {"C274", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"C274", "C136", "C293", "N287", "0.9935", "1", "0.0"}, {"C274", "C136", "C293", "N287", "0.2285", "2", "180.0"}, {"C274", "C136", "C293", "N287", "0.4100", "3", "0.0"}, {"C274", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C274", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C274", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C274", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C274", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C274", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C274", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C274", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C274", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C274", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C274", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C274", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C274", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C274", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C274", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C274", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C274", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C274", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C283", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C283", "C136", "C137", "H140", "0.1500", "3", "0.0"}, {"C283", "C136", "C210", "H140", "0.1500", "3", "0.0"}, {"C283", "C136", "C210", "S202", "-0.7825", "1", "0.0"}, {"C283", "C136", "C210", "S202", "-0.0045", "2", "180.0"}, {"C283", "C136", "C210", "S202", "-0.2250", "3", "0.0"}, {"C283", "C136", "C235", "N237", "0.7470", "1", "0.0"}, {"C283", "C136", "C235", "N237", "-0.2555", "2", "180.0"}, {"C283", "C136", "C235", "N237", "0.0625", "3", "0.0"}, {"C283", "C136", "C235", "O236", "0.8280", "1", "0.0"}, {"C283", "C136", "C235", "O236", "0.6520", "2", "180.0"}, {"C283", "C136", "C235", "O236", "0.2195", "3", "0.0"}, {"C283", "C136", "C267", "O268", "0.5000", "1", "0.0"}, {"C283", "C136", "C267", "O268", "0.2730", "2", "180.0"}, {"C283", "C136", "C267", "O268", "0.2250", "3", "0.0"}, {"C283", "C136", "C267", "O269", "0.2730", "2", "180.0"}, {"C283", "C136", "C274", "H140", "0.1500", "3", "0.0"}, {"C283", "C136", "C308", "C307", "0.6500", "1", "0.0"}, {"C283", "C136", "C308", "C307", "-0.1000", "2", "180.0"}, {"C283", "C136", "C308", "C307", "0.1000", "3", "0.0"}, {"C283", "C136", "C308", "H140", "0.1500", "3", "0.0"}, {"C283", "C136", "C500", "C501", "0.0000", "1", "0.0"}, {"C283", "C136", "C500", "C514", "-0.3570", "1", "0.0"}, {"C283", "C137", "C135", "H140", "0.1500", "3", "0.0"}, {"C283", "C137", "C136", "H140", "0.1500", "3", "0.0"}, {"C283", "C157", "O154", "H155", "-0.1780", "1", "0.0"}, {"C283", "C157", "O154", "H155", "-0.0870", "2", "180.0"}, {"C283", "C157", "O154", "H155", "0.2460", "3", "0.0"}, {"C283", "C158", "C135", "H140", "0.1500", "3", "0.0"}, {"C283", "C158", "O154", "H155", "-0.1780", "1", "0.0"}, {"C283", "C158", "O154", "H155", "-0.0870", "2", "180.0"}, {"C283", "C158", "O154", "H155", "0.2460", "3", "0.0"}, {"C283", "C206", "S200", "H204", "-0.3795", "1", "0.0"}, {"C283", "C206", "S200", "H204", "-0.1410", "2", "180.0"}, {"C283", "C206", "S200", "H204", "0.3400", "3", "0.0"}, {"C283", "C214", "S203", "S203", "0.9705", "1", "0.0"}, {"C283", "C214", "S203", "S203", "-0.4180", "2", "180.0"}, {"C283", "C214", "S203", "S203", "0.4675", "3", "0.0"}, {"C283", "C274", "C271", "O272", "1.2500", "1", "0.0"}, {"C283", "C274", "C271", "O272", "0.5000", "2", "180.0"}, {"C283", "C274", "C271", "O272", "0.6750", "3", "0.0"}, {"C283", "C505", "C507", "C508", "0.0000", "1", "0.0"}, {"C283", "C505", "C507", "N511", "-0.2800", "1", "0.0"}, {"C283", "C505", "C507", "N511", "-0.3700", "2", "180.0"}, {"C283", "C505", "C507", "N511", "0.1745", "3", "0.0"}, {"C283", "C505", "C508", "C507", "0.0000", "1", "0.0"}, {"C283", "C505", "C508", "N503", "-0.2800", "1", "0.0"}, {"C283", "C505", "C508", "N503", "-0.3700", "2", "180.0"}, {"C283", "C505", "C508", "N503", "0.1745", "3", "0.0"}, {"C283", "C505", "C510", "C510", "0.0000", "1", "0.0"}, {"C283", "C505", "C510", "N512", "-1.9950", "1", "0.0"}, {"C283", "C505", "C510", "N512", "0.8400", "2", "180.0"}, {"C283", "C505", "C510", "N512", "0.1450", "3", "0.0"}, {"C283", "N238", "C235", "O236", "3.0445", "2", "180.0"}, {"C284", "N238", "C235", "O236", "3.0445", "2", "180.0"}, {"C285", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C285", "N239", "C235", "O236", "3.0445", "2", "180.0"}, {"C285", "N239", "C245", "H140", "0.0000", "1", "0.0"}, {"C292", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C292", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C293", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C293", "C136", "C137", "H140", "0.1500", "3", "0.0"}, {"C293", "C136", "C210", "H140", "0.1500", "3", "0.0"}, {"C293", "C136", "C210", "S202", "-0.7825", "1", "0.0"}, {"C293", "C136", "C210", "S202", "-0.0045", "2", "180.0"}, {"C293", "C136", "C210", "S202", "-0.2250", "3", "0.0"}, {"C293", "C136", "C235", "N237", "0.7470", "1", "0.0"}, {"C293", "C136", "C235", "N237", "-0.2555", "2", "180.0"}, {"C293", "C136", "C235", "N237", "0.0625", "3", "0.0"}, {"C293", "C136", "C235", "O236", "0.8280", "1", "0.0"}, {"C293", "C136", "C235", "O236", "0.6520", "2", "180.0"}, {"C293", "C136", "C235", "O236", "0.2195", "3", "0.0"}, {"C293", "C136", "C267", "O268", "0.5000", "1", "0.0"}, {"C293", "C136", "C267", "O268", "0.2730", "2", "180.0"}, {"C293", "C136", "C267", "O268", "0.2250", "3", "0.0"}, {"C293", "C136", "C267", "O269", "0.2730", "2", "180.0"}, {"C293", "C136", "C274", "H140", "0.1500", "3", "0.0"}, {"C293", "C136", "C308", "C307", "0.6500", "1", "0.0"}, {"C293", "C136", "C308", "C307", "-0.1000", "2", "180.0"}, {"C293", "C136", "C308", "C307", "0.1000", "3", "0.0"}, {"C293", "C136", "C308", "H140", "0.1500", "3", "0.0"}, {"C293", "C136", "C500", "C501", "0.0000", "1", "0.0"}, {"C293", "C136", "C500", "C514", "-0.3570", "1", "0.0"}, {"C293", "C137", "C135", "H140", "0.1500", "3", "0.0"}, {"C293", "C137", "C136", "H140", "0.1500", "3", "0.0"}, {"C293", "C157", "O154", "H155", "-0.1780", "1", "0.0"}, {"C293", "C157", "O154", "H155", "-0.0870", "2", "180.0"}, {"C293", "C157", "O154", "H155", "0.2460", "3", "0.0"}, {"C293", "C158", "C135", "H140", "0.1500", "3", "0.0"}, {"C293", "C158", "O154", "H155", "-0.1780", "1", "0.0"}, {"C293", "C158", "O154", "H155", "-0.0870", "2", "180.0"}, {"C293", "C158", "O154", "H155", "0.2460", "3", "0.0"}, {"C293", "C206", "S200", "H204", "-0.3795", "1", "0.0"}, {"C293", "C206", "S200", "H204", "-0.1410", "2", "180.0"}, {"C293", "C206", "S200", "H204", "0.3400", "3", "0.0"}, {"C293", "C214", "S203", "S203", "0.9705", "1", "0.0"}, {"C293", "C214", "S203", "S203", "-0.4180", "2", "180.0"}, {"C293", "C214", "S203", "S203", "0.4675", "3", "0.0"}, {"C293", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C293", "C274", "C271", "O272", "1.2500", "1", "0.0"}, {"C293", "C274", "C271", "O272", "0.5000", "2", "180.0"}, {"C293", "C274", "C271", "O272", "0.6750", "3", "0.0"}, {"C293", "C505", "C507", "C508", "0.0000", "1", "0.0"}, {"C293", "C505", "C507", "N511", "-0.2800", "1", "0.0"}, {"C293", "C505", "C507", "N511", "-0.3700", "2", "180.0"}, {"C293", "C505", "C507", "N511", "0.1745", "3", "0.0"}, {"C293", "C505", "C508", "C507", "0.0000", "1", "0.0"}, {"C293", "C505", "C508", "N503", "-0.2800", "1", "0.0"}, {"C293", "C505", "C508", "N503", "-0.3700", "2", "180.0"}, {"C293", "C505", "C508", "N503", "0.1745", "3", "0.0"}, {"C293", "C505", "C510", "C510", "0.0000", "1", "0.0"}, {"C293", "C505", "C510", "N512", "-1.9950", "1", "0.0"}, {"C293", "C505", "C510", "N512", "0.8400", "2", "180.0"}, {"C293", "C505", "C510", "N512", "0.1450", "3", "0.0"}, {"C295", "C136", "C136", "C296", "0.6500", "1", "0.0"}, {"C295", "C136", "C136", "C296", "-0.1000", "2", "180.0"}, {"C295", "C136", "C136", "C296", "0.1000", "3", "0.0"}, {"C295", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C295", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C295", "N309", "C296", "H140", "0.15085", "3", "0.0"}, {"C296", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C296", "N309", "C295", "H140", "0.15085", "3", "0.0"}, {"C302", "N303", "C307", "C308", "0.9145", "1", "0.0"}, {"C302", "N303", "C307", "C308", "0.1215", "2", "180.0"}, {"C302", "N303", "C307", "C308", "-0.2490", "3", "0.0"}, {"C302", "N303", "C307", "H140", "0.0885", "3", "0.0"}, {"C307", "C308", "C136", "H140", "0.1500", "3", "0.0"}, {"C307", "N303", "C302", "N300", "3.9680", "2", "180.0"}, {"C308", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"C308", "C136", "C224", "N238", "0.0515", "1", "0.0"}, {"C308", "C136", "C224", "N238", "0.3265", "2", "180.0"}, {"C308", "C136", "C224", "N238", "0.2815", "3", "0.0"}, {"C308", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"C308", "C136", "C283", "N238", "0.0515", "1", "0.0"}, {"C308", "C136", "C283", "N238", "0.3265", "2", "180.0"}, {"C308", "C136", "C283", "N238", "0.2815", "3", "0.0"}, {"C308", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"C308", "C136", "C293", "N287", "0.0515", "1", "0.0"}, {"C308", "C136", "C293", "N287", "0.3265", "2", "180.0"}, {"C308", "C136", "C293", "N287", "0.2815", "3", "0.0"}, {"C308", "C307", "N303", "H304", "-0.0950", "1", "0.0"}, {"C308", "C307", "N303", "H304", "-0.2085", "2", "180.0"}, {"C308", "C307", "N303", "H304", "0.2090", "3", "0.0"}, {"C500", "C136", "C224", "H140", "0.2310", "3", "0.0"}, {"C500", "C136", "C224", "N238", "-0.2940", "1", "0.0"}, {"C500", "C136", "C224", "N238", "0.5100", "2", "180.0"}, {"C500", "C136", "C224", "N238", "0.3325", "3", "0.0"}, {"C500", "C136", "C283", "H140", "0.2310", "3", "0.0"}, {"C500", "C136", "C283", "N238", "-0.2940", "1", "0.0"}, {"C500", "C136", "C283", "N238", "0.5100", "2", "180.0"}, {"C500", "C136", "C283", "N238", "0.3325", "3", "0.0"}, {"C500", "C136", "C293", "H140", "0.2310", "3", "0.0"}, {"C500", "C136", "C293", "N287", "-0.2940", "1", "0.0"}, {"C500", "C136", "C293", "N287", "0.5100", "2", "180.0"}, {"C500", "C136", "C293", "N287", "0.3325", "3", "0.0"}, {"C500", "C501", "C145", "H146", "3.5000", "2", "180.0"}, {"C501", "C500", "C136", "H140", "0.0000", "1", "0.0"}, {"C501", "C502", "C145", "H146", "3.6250", "2", "180.0"}, {"C502", "C501", "C145", "H146", "3.5000", "2", "180.0"}, {"C502", "C501", "C500", "C514", "1.6750", "2", "180.0"}, {"C502", "N503", "C514", "H146", "1.5000", "2", "180.0"}, {"C505", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C505", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C505", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C505", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C505", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C505", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C505", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C505", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C505", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C505", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C505", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C505", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C505", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C505", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C505", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C505", "C508", "C507", "H146", "5.3750", "2", "180.0"}, {"C505", "C508", "C507", "N511", "5.3750", "2", "180.0"}, {"C505", "C508", "N503", "C506", "1.4000", "2", "180.0"}, {"C505", "C508", "N503", "H504", "1.4000", "2", "180.0"}, {"C505", "C510", "N512", "C509", "1.4000", "2", "180.0"}, {"C505", "C510", "N512", "H513", "1.4000", "2", "180.0"}, {"C506", "N503", "C508", "C507", "1.4000", "2", "180.0"}, {"C506", "N503", "C508", "H146", "2.5000", "2", "180.0"}, {"C506", "N511", "C507", "C508", "2.4000", "2", "180.0"}, {"C506", "N511", "C507", "H146", "2.4000", "2", "180.0"}, {"C507", "C505", "C224", "H140", "0.2310", "3", "0.0"}, {"C507", "C505", "C224", "N238", "-0.2710", "1", "0.0"}, {"C507", "C505", "C224", "N238", "0.2175", "2", "180.0"}, {"C507", "C505", "C224", "N238", "0.0000", "3", "0.0"}, {"C507", "C505", "C283", "H140", "0.2310", "3", "0.0"}, {"C507", "C505", "C283", "N238", "-0.2710", "1", "0.0"}, {"C507", "C505", "C283", "N238", "0.2175", "2", "180.0"}, {"C507", "C505", "C283", "N238", "0.0000", "3", "0.0"}, {"C507", "C505", "C293", "H140", "0.2310", "3", "0.0"}, {"C507", "C505", "C293", "N287", "-0.2710", "1", "0.0"}, {"C507", "C505", "C293", "N287", "0.2175", "2", "180.0"}, {"C507", "C505", "C293", "N287", "0.0000", "3", "0.0"}, {"C507", "C508", "C505", "H140", "0.0000", "1", "0.0"}, {"C507", "C508", "N503", "H504", "1.4000", "2", "180.0"}, {"C507", "N511", "C506", "H146", "5.0000", "2", "180.0"}, {"C507", "N511", "C506", "N503", "5.0000", "2", "180.0"}, {"C508", "C505", "C224", "H140", "0.2310", "3", "0.0"}, {"C508", "C505", "C224", "N238", "-0.2710", "1", "0.0"}, {"C508", "C505", "C224", "N238", "0.2175", "2", "180.0"}, {"C508", "C505", "C224", "N238", "0.0000", "3", "0.0"}, {"C508", "C505", "C283", "H140", "0.2310", "3", "0.0"}, {"C508", "C505", "C283", "N238", "-0.2710", "1", "0.0"}, {"C508", "C505", "C283", "N238", "0.2175", "2", "180.0"}, {"C508", "C505", "C283", "N238", "0.0000", "3", "0.0"}, {"C508", "C505", "C293", "H140", "0.2310", "3", "0.0"}, {"C508", "C505", "C293", "N287", "-0.2710", "1", "0.0"}, {"C508", "C505", "C293", "N287", "0.2175", "2", "180.0"}, {"C508", "C505", "C293", "N287", "0.0000", "3", "0.0"}, {"C508", "C507", "C505", "H140", "0.0000", "1", "0.0"}, {"C508", "N503", "C506", "H146", "2.3250", "2", "180.0"}, {"C508", "N503", "C506", "N511", "2.3250", "2", "180.0"}, {"C509", "N512", "C510", "C510", "1.4000", "2", "180.0"}, {"C509", "N512", "C510", "H146", "2.5000", "2", "180.0"}, {"C510", "C505", "C224", "H140", "0.2310", "3", "0.0"}, {"C510", "C505", "C224", "N238", "-1.5190", "1", "0.0"}, {"C510", "C505", "C224", "N238", "0.2095", "2", "180.0"}, {"C510", "C505", "C224", "N238", "0.0000", "3", "0.0"}, {"C510", "C505", "C283", "H140", "0.2310", "3", "0.0"}, {"C510", "C505", "C283", "N238", "-1.5190", "1", "0.0"}, {"C510", "C505", "C283", "N238", "0.2095", "2", "180.0"}, {"C510", "C505", "C283", "N238", "0.0000", "3", "0.0"}, {"C510", "C505", "C293", "H140", "0.2310", "3", "0.0"}, {"C510", "C505", "C293", "N287", "-1.5190", "1", "0.0"}, {"C510", "C505", "C293", "N287", "0.2095", "2", "180.0"}, {"C510", "C505", "C293", "N287", "0.0000", "3", "0.0"}, {"C510", "C510", "C505", "H140", "0.0000", "1", "0.0"}, {"C510", "C510", "N512", "H513", "1.4000", "2", "180.0"}, {"C510", "N512", "C509", "H146", "2.3250", "2", "180.0"}, {"C510", "N512", "C509", "N512", "2.3250", "2", "180.0"}, {"C514", "C500", "C136", "H140", "-0.2400", "3", "0.0"}, {"H140", "C135", "C136", "H140", "0.1500", "3", "0.0"}, {"H140", "C135", "C137", "H140", "0.1500", "3", "0.0"}, {"H140", "C135", "C158", "H140", "0.1500", "3", "0.0"}, {"H140", "C135", "C158", "O154", "0.2340", "3", "0.0"}, {"H140", "C135", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C135", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C135", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C135", "C235", "N239", "0.0000", "1", "0.0"}, {"H140", "C135", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C135", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C135", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C135", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C135", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C137", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C210", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C210", "S202", "0.2260", "3", "0.0"}, {"H140", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C136", "C235", "N237", "0.0000", "1", "0.0"}, {"H140", "C136", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C136", "C245", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C245", "N239", "0.2320", "3", "0.0"}, {"H140", "C136", "C246", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C246", "N239", "0.2320", "3", "0.0"}, {"H140", "C136", "C267", "O268", "0.0000", "1", "0.0"}, {"H140", "C136", "C267", "O269", "0.0000", "1", "0.0"}, {"H140", "C136", "C274", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C136", "C285", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C285", "N239", "0.2320", "3", "0.0"}, {"H140", "C136", "C292", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C292", "N287", "0.1920", "3", "0.0"}, {"H140", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C136", "C295", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C295", "N309", "0.1920", "3", "0.0"}, {"H140", "C136", "C296", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C296", "N309", "0.1920", "3", "0.0"}, {"H140", "C136", "C308", "H140", "0.1500", "3", "0.0"}, {"H140", "C137", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C137", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C137", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C137", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C137", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C137", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C149", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C149", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C149", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C149", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C149", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C149", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C157", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C157", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C157", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C157", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C157", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C157", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C157", "O154", "H155", "0.1762", "3", "0.0"}, {"H140", "C158", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C158", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C158", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C158", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C158", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C158", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C158", "O154", "H155", "0.1762", "3", "0.0"}, {"H140", "C206", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C206", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C206", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C206", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C206", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C206", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C206", "S200", "H204", "0.2400", "3", "0.0"}, {"H140", "C214", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C214", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C214", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C214", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C214", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C214", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C214", "S203", "S203", "0.2790", "3", "0.0"}, {"H140", "C223", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C223", "C235", "N239", "0.0000", "1", "0.0"}, {"H140", "C223", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C223", "N238", "H241", "0.0000", "1", "0.0"}, {"H140", "C224", "C157", "O154", "0.2340", "3", "0.0"}, {"H140", "C224", "C158", "O154", "0.2340", "3", "0.0"}, {"H140", "C224", "C206", "S200", "0.2260", "3", "0.0"}, {"H140", "C224", "C214", "S203", "0.2260", "3", "0.0"}, {"H140", "C224", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C224", "C235", "N239", "0.0000", "1", "0.0"}, {"H140", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C223", "C267", "O268", "0.0000", "1", "0.0"}, {"H140", "C223", "C267", "O269", "0.0000", "1", "0.0"}, {"H140", "C224", "C267", "O268", "0.0000", "1", "0.0"}, {"H140", "C224", "C267", "O269", "0.0000", "1", "0.0"}, {"H140", "C224", "C274", "H140", "0.1500", "3", "0.0"}, {"H140", "C224", "C505", "H140", "0.1500", "3", "0.0"}, {"H140", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"H140", "C242", "N238", "H241", "0.0000", "1", "0.0"}, {"H140", "C246", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C246", "C235", "N239", "0.0000", "1", "0.0"}, {"H140", "C246", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C274", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C274", "C271", "O272", "0.0000", "1", "0.0"}, {"H140", "C274", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C274", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C274", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C274", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C283", "C157", "O154", "0.2340", "3", "0.0"}, {"H140", "C283", "C158", "O154", "0.2340", "3", "0.0"}, {"H140", "C283", "C206", "S200", "0.2260", "3", "0.0"}, {"H140", "C283", "C214", "S203", "0.2260", "3", "0.0"}, {"H140", "C283", "C271", "O272", "0.0000", "1", "0.0"}, {"H140", "C283", "C505", "H140", "0.1500", "3", "0.0"}, {"H140", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"H140", "C284", "C271", "O272", "0.0000", "1", "0.0"}, {"H140", "C284", "N238", "H241", "0.0000", "1", "0.0"}, {"H140", "C285", "C271", "O272", "0.0000", "1", "0.0"}, {"H140", "C292", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C292", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C292", "N287", "H290", "0.1305", "3", "0.0"}, {"H140", "C293", "C157", "O154", "0.2340", "3", "0.0"}, {"H140", "C293", "C158", "O154", "0.2340", "3", "0.0"}, {"H140", "C293", "C206", "S200", "0.2260", "3", "0.0"}, {"H140", "C293", "C214", "S203", "0.2260", "3", "0.0"}, {"H140", "C293", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C293", "C235", "N239", "0.0000", "1", "0.0"}, {"H140", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C293", "C505", "H140", "0.1500", "3", "0.0"}, {"H140", "C293", "N287", "H290", "0.1305", "3", "0.0"}, {"H140", "C295", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C295", "C235", "N239", "0.0000", "1", "0.0"}, {"H140", "C295", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C295", "N309", "H310", "0.1305", "3", "0.0"}, {"H140", "C296", "N309", "H310", "0.1920", "3", "0.0"}, {"H140", "C307", "C308", "H140", "0.1500", "3", "0.0"}, {"H140", "C307", "N303", "H304", "0.0000", "1", "0.0"}, {"H140", "C308", "C307", "N303", "-0.2910", "3", "0.0"}, {"H140", "C505", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C505", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C505", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C505", "C507", "N511", "0.2095", "3", "0.0"}, {"H140", "C505", "C508", "N503", "0.2095", "3", "0.0"}, {"H140", "C505", "C510", "N512", "0.2095", "3", "0.0"}, {"H146", "C508", "C507", "N511", "5.3750", "2", "180.0"}, {"H146", "C508", "N503", "H504", "2.5000", "2", "180.0"}, {"H146", "C510", "N512", "H513", "2.5000", "2", "180.0"}, {"H240", "N237", "C235", "O236", "2.4500", "2", "180.0"}, {"H241", "N238", "C235", "O236", "2.4500", "2", "180.0"}, {"H270", "O268", "C267", "O269", "2.7500", "2", "180.0"}, {"H301", "N300", "C302", "N300", "1.9500", "2", "180.0"}, {"H301", "N300", "C302", "N303", "1.9500", "2", "180.0"}, {"H304", "N303", "C302", "N300", "1.9500", "2", "180.0"}, {"H504", "N503", "C506", "N511", "2.3250", "2", "180.0"}, {"H513", "N512", "C509", "N512", "2.3250", "2", "180.0"}, {"N238", "C223", "C235", "N238", "0.9050", "1", "0.0"}, {"N238", "C223", "C235", "N238", "1.0775", "2", "180.0"}, {"N238", "C223", "C235", "N238", "-0.2350", "3", "0.0"}, {"N238", "C223", "C235", "N239", "0.9050", "1", "0.0"}, {"N238", "C223", "C235", "N239", "1.0775", "2", "180.0"}, {"N238", "C223", "C235", "N239", "-0.2350", "3", "0.0"}, {"N238", "C223", "C235", "O236", "0.0000", "1", "0.0"}, {"N238", "C224", "C157", "O154", "3.1290", "1", "0.0"}, {"N238", "C224", "C157", "O154", "-0.5185", "2", "180.0"}, {"N238", "C224", "C157", "O154", "0.6835", "3", "0.0"}, {"N238", "C224", "C158", "O154", "3.1290", "1", "0.0"}, {"N238", "C224", "C158", "O154", "-0.5185", "2", "180.0"}, {"N238", "C224", "C158", "O154", "0.6835", "3", "0.0"}, {"N238", "C224", "C206", "S200", "1.0275", "1", "0.0"}, {"N238", "C224", "C206", "S200", "0.2645", "2", "180.0"}, {"N238", "C224", "C206", "S200", "0.2720", "3", "0.0"}, {"N238", "C224", "C214", "S203", "1.0275", "1", "0.0"}, {"N238", "C224", "C214", "S203", "0.2645", "2", "180.0"}, {"N238", "C224", "C214", "S203", "0.2720", "3", "0.0"}, {"N238", "C224", "C235", "N238", "0.9050", "1", "0.0"}, {"N238", "C224", "C235", "N238", "1.0775", "2", "180.0"}, {"N238", "C224", "C235", "N238", "-0.2350", "3", "0.0"}, {"N238", "C224", "C235", "N239", "0.9050", "1", "0.0"}, {"N238", "C224", "C235", "N239", "1.0775", "2", "180.0"}, {"N238", "C224", "C235", "N239", "-0.2350", "3", "0.0"}, {"N238", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"N238", "C223", "C267", "O268", "2.6300", "1", "0.0"}, {"N238", "C223", "C267", "O268", "0.4100", "2", "180.0"}, {"N238", "C223", "C267", "O268", "0.0000", "3", "0.0"}, {"N238", "C224", "C267", "O268", "2.6300", "1", "0.0"}, {"N238", "C224", "C267", "O268", "0.4100", "2", "180.0"}, {"N238", "C224", "C267", "O268", "0.0000", "3", "0.0"}, {"N238", "C223", "C267", "O269", "0.0000", "1", "0.0"}, {"N238", "C224", "C267", "O269", "0.0000", "1", "0.0"}, {"N238", "C235", "C246", "N239", "-0.4700", "1", "0.0"}, {"N238", "C235", "C246", "N239", "1.3775", "2", "180.0"}, {"N238", "C235", "C246", "N239", "-1.3350", "3", "0.0"}, {"N238", "C235", "C292", "N287", "0.9050", "1", "0.0"}, {"N238", "C235", "C292", "N287", "1.0775", "2", "180.0"}, {"N238", "C235", "C292", "N287", "-0.2350", "3", "0.0"}, {"N238", "C235", "C293", "N287", "0.9050", "1", "0.0"}, {"N238", "C235", "C293", "N287", "1.0775", "2", "180.0"}, {"N238", "C235", "C293", "N287", "-0.2350", "3", "0.0"}, {"N238", "C235", "C295", "N309", "-0.4700", "1", "0.0"}, {"N238", "C235", "C295", "N309", "1.3775", "2", "180.0"}, {"N238", "C235", "C295", "N309", "-1.3350", "3", "0.0"}, {"N238", "C283", "C157", "O154", "3.1290", "1", "0.0"}, {"N238", "C283", "C157", "O154", "-0.5185", "2", "180.0"}, {"N238", "C283", "C157", "O154", "0.6835", "3", "0.0"}, {"N238", "C283", "C158", "O154", "3.1290", "1", "0.0"}, {"N238", "C283", "C158", "O154", "-0.5185", "2", "180.0"}, {"N238", "C283", "C158", "O154", "0.6835", "3", "0.0"}, {"N238", "C283", "C206", "S200", "1.0275", "1", "0.0"}, {"N238", "C283", "C206", "S200", "0.2645", "2", "180.0"}, {"N238", "C283", "C206", "S200", "0.2720", "3", "0.0"}, {"N238", "C283", "C214", "S203", "1.0275", "1", "0.0"}, {"N238", "C283", "C214", "S203", "0.2645", "2", "180.0"}, {"N238", "C283", "C214", "S203", "0.2720", "3", "0.0"}, {"N238", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"N238", "C284", "C271", "O272", "0.4100", "2", "180.0"}, {"N239", "C235", "C246", "N239", "-0.4700", "1", "0.0"}, {"N239", "C235", "C246", "N239", "1.3775", "2", "180.0"}, {"N239", "C235", "C246", "N239", "-1.3350", "3", "0.0"}, {"N239", "C235", "C293", "N287", "0.9050", "1", "0.0"}, {"N239", "C235", "C293", "N287", "1.0775", "2", "180.0"}, {"N239", "C235", "C293", "N287", "-0.2350", "3", "0.0"}, {"N239", "C235", "C295", "N309", "-0.4700", "1", "0.0"}, {"N239", "C235", "C295", "N309", "1.3775", "2", "180.0"}, {"N239", "C235", "C295", "N309", "-1.3350", "3", "0.0"}, {"N239", "C246", "C235", "O236", "0.0000", "1", "0.0"}, {"N239", "C285", "C271", "O272", "0.4100", "2", "180.0"}, {"N287", "C292", "C235", "O236", "0.0000", "1", "0.0"}, {"N287", "C293", "C157", "O154", "3.1290", "1", "0.0"}, {"N287", "C293", "C157", "O154", "-0.5185", "2", "180.0"}, {"N287", "C293", "C157", "O154", "0.6835", "3", "0.0"}, {"N287", "C293", "C158", "O154", "3.1290", "1", "0.0"}, {"N287", "C293", "C158", "O154", "-0.5185", "2", "180.0"}, {"N287", "C293", "C158", "O154", "0.6835", "3", "0.0"}, {"N287", "C293", "C206", "S200", "1.0275", "1", "0.0"}, {"N287", "C293", "C206", "S200", "0.2645", "2", "180.0"}, {"N287", "C293", "C206", "S200", "0.2720", "3", "0.0"}, {"N287", "C293", "C214", "S203", "1.0275", "1", "0.0"}, {"N287", "C293", "C214", "S203", "0.2645", "2", "180.0"}, {"N287", "C293", "C214", "S203", "0.2720", "3", "0.0"}, {"N287", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"N309", "C295", "C235", "O236", "0.0000", "1", "0.0"}, {"N503", "C508", "C507", "N511", "5.3750", "2", "180.0"}, {"C267", "C136", "C293", "N287", "-2.7505", "1", "0.0"}, {"C267", "C136", "C293", "N287", "0.7635", "2", "180.0"}, {"C267", "C136", "C293", "N287", "0.0000", "3", "0.0"}, {"C235", "C293", "C136", "C267", "0.2990", "1", "0.0"}, {"C235", "C293", "C136", "C267", "0.7790", "2", "180.0"}, {"C235", "C293", "C136", "C267", "0.1275", "3", "0.0"}, {"C267", "C136", "C283", "N238", "-2.7505", "1", "0.0"}, {"C267", "C136", "C283", "N238", "0.7635", "2", "180.0"}, {"C267", "C136", "C283", "N238", "0.0000", "3", "0.0"}, {"C267", "C136", "C283", "C271", "0.2990", "1", "0.0"}, {"C267", "C136", "C283", "C271", "0.7790", "2", "180.0"}, {"C267", "C136", "C283", "C271", "0.1275", "3", "0.0"}}; /* Impropers */ char * OPLSAAM_impropers[105][7]= {{"C136", "C500", "C501", "C514", "1.1000", "2", "180.0"}, {"C136", "C500", "C514", "C501", "1.1000", "2", "180.0"}, {"C145", "C502", "C501", "N503", "1.1000", "2", "180.0"}, {"C145", "C502", "N503", "C501", "1.1000", "2", "180.0"}, {"C149", "C145", "C145", "C145", "1.1000", "2", "180.0"}, {"C245", "N238", "C235", "C285", "2.5000", "2", "180.0"}, {"C245", "N238", "C285", "C235", "2.5000", "2", "180.0"}, {"C245", "N239", "C235", "C246", "2.5000", "2", "180.0"}, {"C245", "N239", "C235", "C285", "2.5000", "2", "180.0"}, {"C245", "N239", "C246", "C235", "2.5000", "2", "180.0"}, {"C245", "N239", "C285", "C235", "2.5000", "2", "180.0"}, {"C502", "C501", "C145", "C500", "1.1000", "2", "180.0"}, {"C502", "C501", "C500", "C145", "1.1000", "2", "180.0"}, {"C505", "C507", "C508", "N511", "1.1000", "2", "180.0"}, {"C505", "C507", "N511", "C508", "1.1000", "2", "180.0"}, {"C505", "C508", "C507", "N503", "1.1000", "2", "180.0"}, {"C505", "C508", "N503", "C507", "1.1000", "2", "180.0"}, {"C505", "C510", "C510", "N512", "1.1000", "2", "180.0"}, {"C505", "C510", "N512", "C510", "1.1000", "2", "180.0"}, {"H146", "C145", "C145", "C145", "1.1000", "2", "180.0"}, {"H146", "C145", "C166", "C145", "1.1000", "2", "180.0"}, {"H146", "C145", "C145", "C166", "1.1000", "2", "180.0"}, {"H146", "C145", "C145", "C501", "1.1000", "2", "180.0"}, {"H146", "C145", "C501", "C145", "1.1000", "2", "180.0"}, {"H146", "C145", "C145", "C502", "1.1000", "2", "180.0"}, {"H146", "C145", "C502", "C145", "1.1000", "2", "180.0"}, {"H146", "C506", "N503", "N511", "1.1000", "2", "180.0"}, {"H146", "C506", "N511", "N503", "1.1000", "2", "180.0"}, {"H146", "C507", "C508", "N511", "1.1000", "2", "180.0"}, {"H146", "C507", "N511", "C508", "1.1000", "2", "180.0"}, {"H146", "C508", "C507", "N503", "1.1000", "2", "180.0"}, {"H146", "C508", "N503", "C507", "1.1000", "2", "180.0"}, {"H146", "C509", "N512", "N512", "1.1000", "2", "180.0"}, {"H146", "C510", "C510", "N512", "1.1000", "2", "180.0"}, {"H146", "C510", "N512", "C510", "1.1000", "2", "180.0"}, {"H146", "C514", "C500", "N503", "1.1000", "2", "180.0"}, {"H146", "C514", "N503", "C500", "1.1000", "2", "180.0"}, {"H240", "N237", "C235", "H240", "2.5000", "2", "180.0"}, {"H240", "N237", "H240", "C235", "2.5000", "2", "180.0"}, {"H241", "N238", "C223", "C235", "2.5000", "2", "180.0"}, {"H241", "N238", "C224", "C235", "2.5000", "2", "180.0"}, {"H241", "N238", "C235", "C223", "2.5000", "2", "180.0"}, {"H241", "N238", "C235", "C224", "2.5000", "2", "180.0"}, {"H241", "N238", "C235", "C242", "2.5000", "2", "180.0"}, {"H241", "N238", "C235", "C283", "2.5000", "2", "180.0"}, {"H241", "N238", "C235", "C284", "2.5000", "2", "180.0"}, {"H241", "N238", "C242", "C235", "2.5000", "2", "180.0"}, {"H241", "N238", "C283", "C235", "2.5000", "2", "180.0"}, {"H241", "N238", "C284", "C235", "2.5000", "2", "180.0"}, {"H301", "N300", "C302", "H301", "2.5000", "2", "180.0"}, {"H301", "N300", "H301", "C302", "2.5000", "2", "180.0"}, {"H304", "N303", "C302", "C307", "2.5000", "2", "180.0"}, {"H304", "N303", "C307", "C302", "2.5000", "2", "180.0"}, {"H504", "N503", "C502", "C514", "2.5000", "2", "180.0"}, {"H504", "N503", "C506", "C508", "2.5000", "2", "180.0"}, {"H504", "N503", "C508", "C506", "2.5000", "2", "180.0"}, {"H504", "N503", "C514", "C502", "2.5000", "2", "180.0"}, {"H513", "N512", "C509", "C510", "2.5000", "2", "180.0"}, {"H513", "N512", "C510", "C509", "2.5000", "2", "180.0"}, {"N300", "C302", "N300", "N303", "10.5000", "2", "180.0"}, {"N300", "C302", "N303", "N300", "10.5000", "2", "180.0"}, {"O167", "C166", "C145", "C145", "1.1000", "2", "180.0"}, {"O236", "C235", "C135", "N239", "10.5", "2", "180.0"}, {"O236", "C235", "C135", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C136", "N237", "10.5000", "2", "180.0"}, {"O236", "C235", "C223", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C223", "N239", "10.5000", "2", "180.0"}, {"O236", "C235", "C224", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C224", "N239", "10.5000", "2", "180.0"}, {"O236", "C235", "C246", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C246", "N239", "10.5000", "2", "180.0"}, {"O236", "C235", "C292", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C293", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C293", "N239", "10.5000", "2", "180.0"}, {"O236", "C235", "C295", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C295", "N239", "10.5000", "2", "180.0"}, {"O236", "C235", "N237", "C136", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C135", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C223", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C224", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C246", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C292", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C293", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C295", "10.5000", "2", "180.0"}, {"O236", "C235", "N239", "C135", "10.5000", "2", "180.0"}, {"O236", "C235", "N239", "C223", "10.5000", "2", "180.0"}, {"O236", "C235", "N239", "C224", "10.5000", "2", "180.0"}, {"O236", "C235", "N239", "C246", "10.5000", "2", "180.0"}, {"O236", "C235", "N239", "C293", "10.5000", "2", "180.0"}, {"O236", "C235", "N239", "C295", "10.5000", "2", "180.0"}, {"O269", "C267", "C136", "O268", "10.5000", "2", "180.0"}, {"O269", "C267", "O268", "C136", "10.5000", "2", "180.0"}, {"O269", "C267", "C224", "O268", "10.5000", "2", "180.0"}, {"O269", "C267", "O268", "C224", "10.5000", "2", "180.0"}, {"O272", "C271", "C274", "O272", "10.5000", "2", "180.0"}, {"O272", "C271", "C283", "O272", "10.5000", "2", "180.0"}, {"O272", "C271", "C284", "O272", "10.5000", "2", "180.0"}, {"O272", "C271", "C285", "O272", "10.5000", "2", "180.0"}, {"O272", "C271", "O272", "C274", "10.5000", "2", "180.0"}, {"O272", "C271", "O272", "C283", "10.5000", "2", "180.0"}, {"O272", "C271", "O272", "C284", "10.5000", "2", "180.0"}, {"O272", "C271", "O272", "C285", "10.5000", "2", "180.0"}, {"O268", "C267", "C136", "O269", "10.5", "2", "180.0"}, {"O268", "C267", "C223", "O269", "10.5", "2", "180.0"}, {"O268", "C267", "C224", "O269", "10.5", "2", "180.0"}}; /* Non-bonded */ char * OPLSAAM_vdw[78][7]= {{"C135", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C136", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C137", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C145", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C149", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C157", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C158", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C166", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C206", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C209", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C210", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C214", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C223", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C224", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C235", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"C242", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C245", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C246", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C267", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"C271", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"C274", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C283", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C284", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C285", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C292", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C293", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C295", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C296", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C302", "0.00", "-0.050000", "1.2627698", "0.00", "-0.025000", "1.2627698"}, {"C307", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C308", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C500", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C501", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C502", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C505", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C506", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C507", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C508", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C509", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C510", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C514", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"H140", "0.00", "-0.030000", "1.4030776", "0.00", "-0.015000", "1.4030776"}, {"H146", "0.00", "-0.030000", "1.3581791", "0.00", "-0.015000", "1.3581791"}, {"H155", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H168", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H204", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H240", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H241", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H270", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H290", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H301", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H304", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H310", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H504", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H513", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"N237", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N238", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N239", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N287", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N300", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N303", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N309", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N503", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N511", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N512", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"O154", "0.00", "-0.170000", "1.7510408", "0.00", "-0.085000", "1.7510408"}, {"O167", "0.00", "-0.170000", "1.7229792", "0.00", "-0.085000", "1.7229792"}, {"O236", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"O268", "0.00", "-0.170000", "1.6836931", "0.00", "-0.085000", "1.6836931"}, {"O269", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"O272", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"S200", "0.00", "-0.425000", "2.0204317", "0.00", "-0.212500", "2.0204317"}, {"S202", "0.00", "-0.355000", "2.0204317", "0.00", "-0.177500", "2.0204317"}, {"S203", "0.00", "-0.355000", "2.0204317", "0.00", "-0.177500", "2.0204317"}, {"OT", "0.00", "-0.152100", "1.768200", "0.00", "-0.152100", "1.768200"}, {"HT", "0.00", "-0.046000", "0.224500", "0.00", "-0.046000", "0.22450"}, {"SOD", "0.00", "-0.000500", "2.9969737", "0.00", "-0.000500", "2.9969737"}, {"CLA", "0.00", "-0.710000", "2.2561487", "0.00", "-0.710000", "2.2561487"}}; atomes_1.3.1/src/calc/force_fields/cvff_aug.c0000664000175000017500000141745315212624223020565 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cvff_aug.c * @short CVFF_aug force field, from 'CVFF_aug.frc' * @author Sébastien Le Roux */ /* * This file: 'cvff_aug.c' * * Contains: * CVFF_aug force field, data from taken from: - the 'CVFF_aug.frc' file This file contains several tables: Atoms : CVFF_aug_atoms[172][5] Equivalence : CVFF_aug_equivalence_auto[162][11] Equivalence : CVFF_aug_equivalence[168][7] Quadractic bonds : CVFF_aug_bonds_auto[798][5] Morse bonds : CVFF_aug_morse_bonds[752][6] Quadratic angles : CVFF_aug_angles_auto[640][6] Torsions : CVFF_aug_torsions_auto[342][8] Impropers : CVFF_aug_impropers[41][8] Non bonded : CVFF_aug_vdw[86][4] Bond increments : CVFF_aug_bond_increments[717][5] */ #include "global.h" int CVFF_aug_objects[14] = {172, 162, 168, 798, 0, 752, 640, 0, 342, 0, 0, 41, 86, 717}; int CVFF_aug_dim[14] = {5, 11, 7, 5, 0, 6, 6, 0, 8, 0, 0, 8, 4, 5}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= CVFF_aug info */ char * CVFF_aug_atoms[172][5]= {{"H", "1.007970", "h", "Hydrogen bonded to C. Masses from CRC 1973/74 pages B-250.", "Ver. 1.0, Ref. 1"}, {"H", "2.014000", "d", "General Deuterium", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hn", "Hydrogen bonded to N", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "ho", "Hydrogen bonded to O", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hp", "Hydrogen bonded to P", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hs", "Hydrogen bonded to S", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "h*", "Hydrogen in water molecule", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "h$", "Hydrogen atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"L", "0.001097", "lp", "Lone Pair", "Ver. 1.0, Ref. 1"}, {"L", "1.000000", "lp", "Lone Pair", "Ver. 1.1, Ref. 2"}, {"H", "1.007970", "h+", "Charged hydrogen in cations", "Ver. 2.0, Ref. 18"}, {"H", "1.007970", "hc", "Hydrogen bonded to carbon", "Ver. 2.0, Ref. 18"}, {"H", "1.007970", "hi", "Hydrogen in charged imidazole ring", "Ver. 2.0, Ref. 18"}, {"H", "1.007970", "hw", "Hydrogen in water", "Ver. 2.0, Ref. 18"}, {"D", "2.014000", "dw", "Deuterium in heivy water", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c", "Sp3 aliphatic carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cg", "Sp3 alpha carbon in glycine", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c'", "Sp2 carbon in carbonyl (C=O) group", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c*", "Carbon in carbonyl group, non_amides", "Ver. 2.0, Ref. 21"}, {"C", "12.011150", "c\"", "Carbon in carbonyl group, non_amides", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "cp", "Sp2 aromatic carbon (partial double bonds)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cr", "Carbon in guanidinium group (HN=C(NH2)2)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c+", "C in guanidinium group", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c-", "Carbon in charged carboxylate (COO-) group", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "ca", "General amino acid alpha carbon (sp3)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c3", "Sp3 carbon in methyl (CH3) group", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cn", "Sp3 Carbon bonded to N", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c2", "Sp3 carbon bonded to 2 H's, 2 heavy atoms", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c1", "Sp3 carbon bonded to 1 H, 3 Heavy atoms", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c5", "Sp2 aromatic carbon in five membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cs", "Sp2 carbon involved in thiophene", "Ver. 1.3, Ref. 6"}, {"C", "12.011150", "c=", "Non aromatic end doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c=1", "Non aromatic, next to end doubly bonded carbon", "Ver. 2.0, Ref. 19"}, {"C", "12.011150", "c=2", "Non aromatic doubly bonded carbon", "Ver. 2.0, Ref. 19"}, {"C", "12.011150", "ct", "Sp carbon involved in triple bond", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "ci", "Aromatic carbon in a charged imidazole ring (HIS+)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c$", "Carbon atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "co", "Sp3 carbon in acetals", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c3m", "Sp3 carbon in 3-membered ring", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c4m", "Sp3 carbon in 4-membered ring", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "coh", "Sp3 carbon in acetals with hydrogen", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c3h", "Sp3 carbon in 3-membered ring with hydrogens", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c4h", "Sp3 carbon in 4-membered ring with hydrogens", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "ci", "Sp2 aromatic carbon in charged imidazole ring (His+)", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n", "Sp2 nitrogen with 1 H, 2 heavy atoms (amide group)", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "no", "Sp2 nitrogen in nitro group", "Ver. 3.0, Ref. 22"}, {"N", "14.006700", "n2", "Sp2 nitrogen (NH2 in the guanidinium group (HN=C(NH2)2))", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "np", "Sp2 aromatic nitrogen (partial double bonds)", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n3", "Sp3 nitrogen with three substituents", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n4", "Sp3 nitrogen with four substituents", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n=", "Non aromatic end double bonded nitrogen", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n=1", "Non aromatic, next to end doubly bonded carbon", "Ver. 2.0, Ref. 19"}, {"N", "14.006700", "n=2", "Non aromatic doubly bonded nitrogen", "Ver. 2.0, Ref. 19"}, {"N", "14.006700", "nt", "Sp nitrogen involved in triple bond", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "nz", "Sp nitrogen in N2", "Ver. 1.3, Ref. 4"}, {"N", "14.006700", "n1", "Sp2 nitrogen in charged arginine", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "ni", "Sp2 nitrogen in a charged imidazole ring (HIS+)", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n$", "Nitrogen atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "na", "Sp3 nitrogen in amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n3m", "Sp3 nitrogen in 3- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n4m", "Sp3 nitrogen in 4- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.00670", "n3n", "Sp2 nitrogen in 3- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.00670", "n4n", "Sp2 nitrogen in 4- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nb", "sp2 nitrogen in aromatic amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nn", "sp2 nitrogen in aromatic amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "npc", "sp2 nitrogen in 5- or 6- membered ring bonded to a heavy atom", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nh", "sp2 nitrogen in 5-or 6- membered ring with hydrogen attached", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nho", "sp2 nitrogen in 6- membered ring next to a carbonyl group and with a hydrogen", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nh+", "protonated nitrogen in 6- membered ring with hydrogen attached", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n+", "sp3 nitrogen in protonated amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nr", "sp2 nitrogen (NH2) in guanidinium group (HN=C(NH2)2)", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "o'", "Oxygen in carbonyl (C=O) group", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o", "sp3 oxygen in ether or ester groups", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o-", "Oxygen in charged carboxylate (COO-) group", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "oh", "Oxygen in hydroxyl (OH) group", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o*", "Oxygen in water molecule", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "op", "Oxygen in aromatic rings. e.g. furan", "Ver. 1.3, Ref. 8"}, {"O", "15.999400", "of", "Oxygen in", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o$", "Oxygen atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "oc", "sp3 oxygen in ether or acetals", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "oe", "sp3 oxygen in ester", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "o3e", "sp3 oxygen in three membered ring", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "o4e", "sp3 oxygen in four membered ring", "Ver. 2.0, Ref. 18"}, {"S", "32.064000", "s", "Sulfur in methionine (C-S-C) group", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "s1", "Sulfur involved in S-S disulfide bond", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "sh", "Sulfur in sulfhydryl (-SH) group", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "sp", "Sulfur in thiophene", "Ver. 1.3, Ref. 6"}, {"S", "32.064000", "s'", "Sulfur in thioketone (>C=S) group", "Ver. 1.3, Ref. 7"}, {"S", "32.064000", "s$", "Sulfur atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "sc", "sp3 sulfur in methionines (C-S-C) group", "Ver. 2.0, Ref. 18"}, {"S", "32.06400", "s3e", "Sulfur in three membered ring", "Ver. 2.0, Ref. 18"}, {"S", "32.06400", "s4e", "Sulfur in four membered ring", "Ver. 2.0, Ref. 18"}, {"S", "32.064000", "s-", "Sulfur bonded to something then bonded to another partial double O or S", "Ver. 2.0, Ref. 18"}, {"P", "30.973800", "p", "General phosphorous atom", "Ver. 1.0, Ref. 1"}, {"P", "30.973800", "p$", "Phosphorous atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"Ca", "40.079800", "ca+", "Calcium ion - Ca++, mass = mass of Ca - 2*electron mass.", "Ver. 2.0, Ref. 18"}, {"F", "18.998400", "f", "Fluorine bonded to a carbon", "Ver. 1.0, Ref. 1"}, {"Cl", "35.453000", "cl", "Chlorine bonded to a carbon", "Ver. 1.0, Ref. 1"}, {"Br", "79.909000", "br", "Bromine bonded to a carbon", "Ver. 1.0, Ref. 1"}, {"I", "126.9045", "i", "Covalently bound Iodine", "Ver. 1.3, Ref. 4"}, {"Si", "28.086000", "si", "Silicon atom (General)", "Ver. 1.0, Ref. 1"}, {"H", "12.000000", "nu", "NULL atom for relative free energy", "Ver. 1.0, Ref. 1"}, {"Cl", "35.453000", "Cl", "Chloride ion Cl-", "Ver. 1.0, Ref. 1"}, {"Br", "79.904000", "Br", "Bromide ion Br-", "Ver. 1.0, Ref. 1"}, {"Na", "22.989800", "Na", "Sodium ion", "Ver. 1.0, Ref. 1"}, {"Ar", "39.948", "ar", "Argon ", "Ver. 1.3, Ref. 9"}, {"Si", "28.086000", "sz", "Silicon atom in zeolites", "Ver. 3.1, Ref. 23"}, {"Si", "28.086000", "sy", "Tetrahedral Silicon atom in Clays", "Ver. 3.2, Ref. 24"}, {"O", "15.999400", "oz", "Oxygen atom in zeolites", "Ver. 3.1, Ref. 23"}, {"O", "15.999400", "oy", "Oxygen atom in Clays", "Ver. 3.2, Ref. 24"}, {"Al", "26.981539", "az", "Tetrahedral Aluminum atom in zeolites", "Ver. 3.1, Ref. 23"}, {"Al", "26.981539", "ay", "Octahedral Aluminum atom in Clays", "Ver. 3.2, Ref. 24"}, {"Al", "26.981539", "ayt", "Tetrahedral Aluminum atom to be used with oy", "Ver. 3.2, Ref. 34"}, {"P", "30.973800", "pz", "Phosphorous atom in zeolites", "Ver. 3.1, Ref. 23"}, {"P", "30.973800", "py", "Phosphorous atom to be used with oy", "Ver. 3.1, Ref. 34"}, {"Ga", "69.723000", "ga", "Gallium atom in zeolites", "Ver. 3.1, Ref. 23"}, {"Ge", "72.610000", "ge", "Germanium atom in zeolites", "Ver. 3.1, Ref. 23"}, {"Ti", "47.880000", "tioc", "Titanium (Octahedral) in zeolites", "Ver. 3.1, Ref. 23"}, {"Ti", "47.880000", "ti4c", "Titanium (Octahedral) to be used with oy", "Ver. 3.1, Ref. 35"}, {"Ti", "47.880000", "titd", "Titanium (Tetrahedral) in zeolites", "Ver. 3.1, Ref. 23"}, {"Li", "6.941000", "li+", "Lithium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Li", "6.941000", "lic+", "Lithium ion to be used with oy in Clays", "Ver. 3.3, Ref. 25"}, {"Li", "6.941000", "lioh", "Lithium ion in water to be used with o*", "Ver. 3.4, Ref. 30"}, {"Na", "22.989800", "na+", "Sodium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Na", "22.989800", "nac+", "Sodium ion in Clays", "Ver. 3.2, Ref. 24"}, {"Na", "22.989800", "naoh", "Sodium ion in water to be used with o*", "Ver. 3.4, Ref. 30"}, {"K", "39.098300", "k+", "Potassium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"K", "39.098300", "koh", "Potassium ion in water to be used with o*", "Ver. 3.4, Ref. 30"}, {"Rb", "85.467800", "rb+", "Rubidium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Cs", "132.905430", "cs+", "Cesium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"N", "14.006740", "nh4+", "United atom type for ammonium ion to be used with oy", "Ver. 3.1, Ref. 36"}, {"Mg", "24.305000", "mg2+", "Magnesium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Mg", "24.305000", "mg2c", "Octahedral Magnesium ion in Clays", "Ver. 3.2, Ref. 24"}, {"Mn", "54.938050", "mn4c", "Manganese (IV) ion to be used with oy in Clays", "Ver. 3.3, Ref. 25"}, {"Mn", "54.938050", "mn3c", "Manganese (III) ion to be used with oy in Clays", "Ver. 3.3, Ref. 25"}, {"Co", "58.933200", "co2c", "Cobalt (II) ion to be used with oy in Clays", "Ver. 3.3, Ref. 25"}, {"Ni", "58.690000", "ni2c", "Nickel (II) ion to be used with oy in Clays", "Ver. 3.3, Ref. 25"}, {"Ca", "40.078000", "ca2+", "Calcium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Ca", "40.078000", "ca2c", "Calcium ion to be used with oy in Clays", "Ver. 3.1, Ref. 35"}, {"Sr", "87.620000", "sr2c", "Strontium ion to be used with oy in Clays", "Ver. 3.1, Ref. 35"}, {"Ba", "137.327000", "ba2+", "Barium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Cu", "63.546000", "cu2+", "Copper(II) ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Fe", "55.847000", "fe2c", "Octahedral Fe(II) ion in clays", "Ver. 3.2, Ref. 24"}, {"F", "18.998403", "f-", "Fluoride ion in zeolites", "Ver. 3.1, Ref. 26"}, {"Be", "9.012182", "beoh", "Beryllium (II) in water to be used with o*", "Ver. 3.4, Ref. 33"}, {"F", "18.998400", "foh", "Fluoride ion in water to be used with o*", "Ver. 3.4, Ref. 30"}, {"Cl", "35.452700", "cl-", "Chloride ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Cl", "35.452700", "cloh", "Chloride ion in water to be used with o*", "Ver. 3.4, Ref. 30"}, {"Cl", "35.452700", "cly-", "Chloride ion to be used with oy in Clays", "Ver. 3.4, Ref. 36"}, {"Br", "79.904000", "br-", "Bromide ion in zeolites", "Ver. 3.1, Ref. 23"}, {"I", "126.904470", "i-", "Iodide ion in zeolites", "Ver. 3.1, Ref. 23"}, {"S", "32.066000", "so4", "Sulfur in sulphate ion to be used with oz", "Ver. 3.1, Ref. 23"}, {"S", "32.066000", "so4y", "Sulfur in sulphate ion to be used with oy in Clays", "Ver. 3.1, Ref. 36"}, {"H", "1.008000", "hocl", "Hydrogen in hydroxyl group in Clays", "Ver. 3.2, Ref. 24"}, {"Pd", "106.4200", "pd2+", "Palladium(II) ", "Ver. 3.2, Ref. 27"}, {"V", "50.941500", "vy", "Tetrahedral Vanadium to be used with oy", "Ver. 3.2, Ref. 34"}, {"Al", "26.982000", "al", "Aluminium metal", "Ver. 2.1, Ref. 26"}, {"Na", "22.990000", "Na", "Sodium metal", "Ver. 2.1, Ref. 26"}, {"Pt", "195.090000", "Pt", "Platinum metal", "Ver. 2.1, Ref. 26"}, {"Pd", "106.400000", "Pd", "Palladium metal", "Ver. 2.1, Ref. 26"}, {"Au", "196.967000", "Au", "Gold metal", "Ver. 2.1, Ref. 26"}, {"Ag", "107.868000", "Ag", "Silver metal", "Ver. 2.1, Ref. 26"}, {"Sn", "118.690000", "Sn", "Tin metal", "Ver. 2.1, Ref. 26"}, {"K", "39.102000", "K", "Potassium metal", "Ver. 2.1, Ref. 26"}, {"Li", "6.940000", "Li", "Lithium metal", "Ver. 2.1, Ref. 26"}, {"Mo", "95.940000", "Mo", "Molybdenum metal", "Ver. 2.1, Ref. 26"}, {"Fe", "55.847000", "Fe", "Iron metal", "Ver. 2.1, Ref. 26"}, {"W", "183.850000", "W", "Tungsten metal", "Ver. 2.1, Ref. 26"}, {"Ni", "58.710000", "Ni", "Nickel metal", "Ver. 2.1, Ref. 26"}, {"Cr", "51.996000", "Cr", "Chromium metal", "Ver. 2.1, Ref. 26"}, {"Cu", "63.546000", "Cu", "Copper metal", "Ver. 2.1, Ref. 26"}, {"Pb", "207.200000", "Pb", "Lead metal", "Ver. 2.1, Ref. 26"}}; /* Equivalence table for key symbols CVFF_aug auto with: 0 = Key in atom list 1 = Non-bonded 2 = Bond increments 3 = Bonds 4 = Angles end atom 5 = Angles appex atom 6 = Torsion end atom 7 = Torsion center atom 8 = Inversion end atom 9 = Inversion center atom 10 = CVFF_aug info */ char * CVFF_aug_equivalence_auto[162][11]= {{"h", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"d", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hc", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hp", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hs", "h", "hs", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hn", "hn", "hn", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hi", "hn", "hn", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"h+", "hn", "hn", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"ho", "hn", "ho", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"h*", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"dw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"lp", "h", "lp", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"c", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"co", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c3m", "c", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c4m", "c", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"coh", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c3h", "cg", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c4h", "cg", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"cg", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"ca", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"cn", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c3", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c2", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c1", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"ci", "c'", "ci", "ci_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"c*", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 21"}, {"c\"", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c'", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"cp", "c'", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"c5", "c'", "c5", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"cs", "c'", "cs", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"cr", "c'", "cr", "cr_", "c_", "c'_", "c_", "c=_3", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c+", "c'", "cr", "cr_", "c_", "c'_", "c_", "c+_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c-", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c=", "c'", "c=", "c=_3", "c_", "c=_", "c_", "c=_3", "c_", "c=_", "Ver. 2.0, Ref. 18"}, {"c=1", "c'", "c=", "c=_1", "c_", "c=_", "c_", "c=_1", "c_", "c=_", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "c=", "c=_2", "c_", "c=_", "c_", "c=_2", "c_", "c=_", "Ver. 2.0, Ref. 19"}, {"ct", "c'", "ct", "ct_", "c_", "ct_", "c_", "ct_", "c_", "ct_", "Ver. 2.0, Ref. 18"}, {"na", "n", "n3", "na_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n3", "n", "n3", "na_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n3m", "n", "n3", "n3m_", "n3m_", "n3m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n4m", "n", "n3", "n4m_", "n4m_", "n4m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"np", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"npc", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nh", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nho", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nh+", "n", "nh+", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"ni", "n", "ni", "ni_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nn", "n", "n3", "na_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"nb", "n", "n3", "np_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n+", "n", "n4", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n4", "n", "n4", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n", "n", "n", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"no", "n", "n", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 3.0, Ref. 22"}, {"n3n", "n", "n", "n3m_", "n3m_", "n3m_", "n_", "n3n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n4n", "n", "n", "n4m_", "n4m_", "n4m_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"nr", "n", "n2", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n2", "n", "n2", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n1", "n", "n1", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n=", "n", "n=", "n=_3", "n_", "n_", "n_", "n=_3", "n_", "n=_", "Ver. 2.0, Ref. 18"}, {"n=1", "n", "n=", "n=_1", "n_", "n_", "n_", "n=_1", "n_", "n=_", "Ver. 2.0, Ref. 19"}, {"n=2", "n", "n=", "n=_2", "n_", "n_", "n_", "n=_2", "n_", "n=_", "Ver. 2.0, Ref. 19"}, {"nt", "n", "nt", "nt_", "n_", "nt_", "n_", "nt_", "n_", "nt_", "Ver. 2.0, Ref. 18"}, {"nz", "n", "nz", "nz_", "n_", "nz_", "n_", "nz_", "n_", "nz_", "Ver. 2.0, Ref. 18"}, {"o", "o'", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o*", "o*", "o*", "o_", "o_", "o*_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"oh", "o'", "oh", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"oc", "o'", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"oe", "o'", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o3e", "o'", "o", "o3e_", "o3e_", "o3e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o4e", "o'", "o", "o4e_", "o4e_", "o4e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"op", "o'", "op", "op_", "o_", "op_", "o_", "o_", "o_", "op_", "Ver. 2.0, Ref. 18"}, {"o'", "o'", "o'", "o'_", "o'_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"of", "o'", "oh", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o-", "o'", "o-", "o-_", "o'_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"s", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s'", "s'", "s'", "s'_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s-", "s'", "s-", "s-_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"sc", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s3e", "s", "s", "s3e_", "s3e_", "s3e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s4e", "s", "s", "s4e_", "s4e_", "s4e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s1", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"sh", "s", "sh", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"sp", "s'", "sp", "sp_", "s_", "sp_", "s_", "sp_", "s_", "sp_", "Ver. 2.0, Ref. 18"}, {"p", "p", "p", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 18"}, {"ca+", "ca+", "ca+", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "Ver. 2.0, Ref. 18"}, {"f", "f", "f", "f_", "f_", "f_", "f_", "f_", "f_", "f_", "Ver. 2.0, Ref. 18"}, {"i", "i", "i", "i_", "f_", "i_", "i_", "i_", "i_", "i_", "Ver. 2.0, Ref. 18"}, {"cl", "cl", "cl", "cl_", "f_", "cl_", "c_", "cl_", "cl_", "cl_", "Ver. 2.0, Ref. 18"}, {"br", "br", "br", "br_", "f_", "br_", "br_", "br_", "br_", "br_", "Ver. 2.0, Ref. 18"}, {"si", "si", "si", "si_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.0, Ref. 18"}, {"nu", "nu", "nu", "nu_", "nu_", "nu_", "nu_", "nu_", "nu_", "nu_", "Ver. 2.0, Ref. 18"}, {"Cl", "Cl", "Cl", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Ver. 2.0, Ref. 18"}, {"Br", "Br", "Br", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Ver. 2.0, Ref. 18"}, {"Na", "Na", "Na", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Ver. 2.0, Ref. 18"}, {"ar", "ar", "ar", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "Ver. 2.0, Ref. 18"}, {"sz", "sz", "sz", "sz_", "sz_", "sz_", "sz_", "sz_", "sz_", "sz_", "Ver. 3.1, Ref. 23"}, {"sy", "sy", "sy", "sy_", "sy_", "sy_", "sy_", "sy_", "sy_", "sy_", "Ver. 3.2, Ref. 24"}, {"py", "py", "py", "py_", "py_", "py_", "py_", "py_", "py_", "py_", "Ver. 3.2, Ref. 34"}, {"vy", "vy", "vy", "vy_", "vy_", "vy_", "vy_", "vy_", "vy_", "vy_", "Ver. 3.2, Ref. 34"}, {"ti4c", "ti4c", "ti4c", "ti4c_", "ti4c_", "ti4c_", "ti4c_", "ti4c_", "ti4c_", "ti4c_", "Ver. 3.2, Ref. 35"}, {"ca2c", "ca2c", "ca2c", "ca2c_", "ca2c_", "ca2c_", "ca2c_", "ca2c_", "ca2c_", "ca2c_", "Ver. 3.2, Ref. 35"}, {"cly-", "cly-", "cly-", "cly-_", "cly-_", "cly-_", "cly-_", "cly-_", "cly-_", "cly-_", "Ver. 3.2, Ref. 36"}, {"so4y", "so4y", "so4y", "so4y_", "so4y_", "so4y_", "so4y_", "so4y_", "so4y_", "so4y_", "Ver. 3.2, Ref. 36"}, {"nh4+", "nh4+", "nh4+", "nh4+_", "nh4+_", "nh4+_", "nh4+_", "nh4+_", "nh4+_", "nh4+_", "Ver. 3.2, Ref. 36"}, {"sr2c", "sr2c", "sr2c", "sr2c_", "sr2c_", "sr2c_", "sr2c_", "sr2c_", "sr2c_", "sr2c_", "Ver. 3.2, Ref. 35"}, {"ayt", "ayt", "ayt", "ayt_", "ayt_", "ayt_", "ayt_", "ayt_", "ayt_", "ayt_", "Ver. 3.2, Ref. 34"}, {"oz", "oz", "oz", "oz_", "oz_", "oz_", "oz_", "oz_", "oz_", "oz_", "Ver. 3.1, Ref. 23"}, {"oy", "oy", "oy", "oy_", "oy_", "oy_", "oy_", "oy_", "oy_", "oy_", "Ver. 3.2, Ref. 24"}, {"az", "az", "az", "az_", "az_", "az_", "az_", "az_", "az_", "az_", "Ver. 3.1, Ref. 23"}, {"ay", "ay", "ay", "ay_", "ay_", "ay_", "ay_", "ay_", "ay_", "ay_", "Ver. 3.2, Ref. 24"}, {"pz", "pz", "pz", "pz_", "pz_", "pz_", "pz_", "pz_", "pz_", "pz_", "Ver. 3.1, Ref. 23"}, {"ga", "ga", "ga", "ga_", "ga_", "ga_", "ga_", "ga_", "ga_", "ga_", "Ver. 3.1, Ref. 23"}, {"ge", "ge", "ge", "ge_", "ge_", "ge_", "ge_", "ge_", "ge_", "ge_", "Ver. 3.1, Ref. 23"}, {"tioc", "tioc", "tioc", "tioc_", "tioc_", "tioc_", "tioc_", "tioc_", "tioc_", "tioc_", "Ver. 3.1, Ref. 23"}, {"titd", "titd", "titd", "titd_", "titd_", "titd_", "titd_", "titd_", "titd_", "titd_", "Ver. 3.1, Ref. 23"}, {"li+", "li+", "li+", "li+_", "li+_", "li+_", "li+_", "li+_", "li+_", "li+_", "Ver. 3.1, Ref. 23"}, {"na+", "na+", "na+", "na+_", "na+_", "na+_", "na+_", "na+_", "na+_", "na+_", "Ver. 3.1, Ref. 23"}, {"nac+", "nac+", "nac+", "nac+_", "nac+_", "nac+_", "nac+_", "nac+_", "nac+_", "nac+_", "Ver. 3.2, Ref. 24"}, {"k+", "k+", "k+", "k+_", "k+_", "k+_", "k+_", "k+_", "k+_", "k+_", "Ver. 3.1, Ref. 23"}, {"rb+", "rb+", "rb+", "rb+_", "rb+_", "rb+_", "rb+_", "rb+_", "rb+_", "rb+_", "Ver. 3.1, Ref. 23"}, {"cs+", "cs+", "cs+", "cs+_", "cs+_", "cs+_", "cs+_", "cs+_", "cs+_", "cs+_", "Ver. 3.1, Ref. 23"}, {"mg2+", "mg2+", "mg2+", "mg2+_", "mg2+_", "mg2+_", "mg2+_", "mg2+_", "mg2+_", "mg2+_", "Ver. 3.1, Ref. 23"}, {"mg2c", "mg2c", "mg2c", "mg2c_", "mg2c_", "mg2c_", "mg2c_", "mg2c_", "mg2c_", "mg2c_", "Ver. 3.2, Ref. 24"}, {"mn4c", "mn4c", "mn4c", "mn4c_", "mn4c_", "mn4c_", "mn4c_", "mn4c_", "mn4c_", "mn4c_", "Ver. 3.3, Ref. 25"}, {"mn3c", "mn3c", "mn3c", "mn3c_", "mn3c_", "mn3c_", "mn3c_", "mn3c_", "mn3c_", "mn3c_", "Ver. 3.3, Ref. 25"}, {"co2c", "co2c", "co2c", "co2c_", "co2c_", "co2c_", "co2c_", "co2c_", "co2c_", "co2c_", "Ver. 3.3, Ref. 25"}, {"ni2c", "ni2c", "ni2c", "ni2c_", "ni2c_", "ni2c_", "ni2c_", "ni2c_", "ni2c_", "ni2c_", "Ver. 3.3, Ref. 25"}, {"lic+", "lic+", "lic+", "lic+_", "lic+_", "lic+_", "lic+_", "lic+_", "lic+_", "lic+_", "Ver. 3.3, Ref. 25"}, {"ca2+", "ca2+", "ca2+", "ca2+_", "ca2+_", "ca2+_", "ca2+_", "ca2+_", "ca2+_", "ca2+_", "Ver. 3.1, Ref. 23"}, {"ba2+", "ba2+", "ba2+", "ba2+_", "ba2+_", "ba2+_", "ba2+_", "ba2+_", "ba2+_", "ba2+_", "Ver. 3.1, Ref. 23"}, {"cu2+", "cu2+", "cu2+", "cu2+_", "cu2+_", "cu2+_", "cu2+_", "cu2+_", "cu2+_", "cu2+_", "Ver. 3.1, Ref. 23"}, {"fe2c", "fe2c", "fe2c", "fe2c_", "fe2c_", "fe2c_", "fe2c_", "fe2c_", "fe2c_", "fe2c_", "Ver. 3.2, Ref. 24"}, {"f-", "f-", "f-", "f-_", "f-_", "f-_", "f-_", "f-_", "f-_", "f-_", "Ver. 3.1, Ref. 26"}, {"cl-", "cl-", "cl-", "cl-_", "cl-_", "cl-_", "cl-_", "cl-_", "cl-_", "cl-_", "Ver. 3.1, Ref. 23"}, {"br-", "br-", "br-", "br-_", "br-_", "br-_", "br-_", "br-_", "br-_", "br-_", "Ver. 3.1, Ref. 23"}, {"i-", "i-", "i-", "i-_", "i-_", "i-_", "i-_", "i-_", "i-_", "i-_", "Ver. 3.1, Ref. 23"}, {"so4", "so4", "so4", "so4_", "so4_", "so4_", "so4_", "so4_", "so4_", "so4_", "Ver. 3.1, Ref. 23"}, {"hocl", "hocl", "hocl", "hocl_", "hocl_", "hocl_", "hocl_", "hocl_", "hocl_", "hocl_", "Ver. 3.2, Ref. 24"}, {"pd2+", "pd2+", "pd2+", "pd2+_", "pd2+_", "pd2+_", "pd2+_", "pd2+_", "pd2+_", "pd2+_", "Ver. 3.2, Ref. 27"}, {"lioh", "lioh", "lioh", "lioh_", "lioh_", "lioh_", "lioh_", "lioh_", "lioh_", "lioh_", "Ver. 3.4, Ref. 30"}, {"naoh", "naoh", "naoh", "naoh_", "naoh_", "naoh_", "naoh_", "naoh_", "naoh_", "naoh_", "Ver. 3.4, Ref. 30"}, {"koh", "koh", "koh", "koh_", "koh_", "koh_", "koh_", "koh_", "koh_", "koh_", "Ver. 3.4, Ref. 30"}, {"foh", "foh", "foh", "foh_", "foh_", "foh_", "foh_", "foh_", "foh_", "foh_", "Ver. 3.4, Ref. 30"}, {"cloh", "cloh", "cloh", "cloh_", "cloh_", "cloh_", "cloh_", "cloh_", "cloh_", "cloh_", "Ver. 3.4, Ref. 30"}, {"beoh", "beoh", "beoh", "beoh_", "beoh_", "beoh_", "beoh_", "beoh_", "beoh_", "beoh_", "Ver. 3.4, Ref. 33"}, {"al", "si", "si", "al_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.1, Ref. 26"}, {"Pb", "Pb", "Pb", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Pt", "Pt", "Pt", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Pd", "Pd", "Pd", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Au", "Au", "Au", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Ag", "Ag", "Ag", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Sn", "Sn", "Sn", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Li", "Li", "Li", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Mo", "Mo", "Mo", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Fe", "Fe", "Fe", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"W", "W", "W", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Ni", "Ni", "Ni", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Cr", "Cr", "Cr", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Cu", "Cu", "Cu", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}}; /* Equivalence table for key symbols CVFF_aug with: 0 = Key in atom list 1 = Non-bonded 2 = Bonds 3 = Angles 4 = Torsion 5 = Inversion 6 = CVFF_aug info */ char * CVFF_aug_equivalence[168][7]= {{"h", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"d", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hp", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hc", "h", "h", "h", "h", "h", "Ver. 2.0, Ref. 18"}, {"hs", "h", "hs", "hs", "hs", "hs", "Ver. 1.0, Ref. 1"}, {"hn", "hn", "hn", "hn", "hn", "hn", "Ver. 1.0, Ref. 1"}, {"ho", "hn", "ho", "ho", "ho", "ho", "Ver. 1.0, Ref. 1"}, {"hi", "hn", "hn", "hn", "hn", "hn", "Ver. 2.0, Ref. 18"}, {"h+", "hn", "hn", "hn", "hn", "hn", "Ver. 2.0, Ref. 18"}, {"h*", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hw", "h*", "h*", "h*", "h*", "h*", "Ver. 2.0, Ref. 18"}, {"dw", "h*", "h*", "h*", "h*", "h*", "Ver. 2.0, Ref. 18"}, {"h$", "h$", "h$", "h$", "h$", "h$", "Ver. 1.0, Ref. 1"}, {"lp", "h", "lp", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"co", "c", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"c3m", "c", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"c4m", "c", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"coh", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"c3h", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"c4h", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"cg", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"ca", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"cn", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c2", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c1", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c'", "c'", "c'", "c'", "c'", "c'", "Ver. 1.0, Ref. 1"}, {"c\"", "c'", "c'", "c'", "c'", "c'", "Ver. 2.0, Ref. 18"}, {"c*", "c'", "c'", "c'", "c'", "c'", "Ver. 2.0, Ref. 21"}, {"cp", "c'", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"c5", "c'", "c5", "c5", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"cs", "c'", "cs", "cs", "cs", "cs", "Ver. 1.3, Ref. 6"}, {"cr", "c'", "cr", "c'", "cr", "c'", "Ver. 1.0, Ref. 1"}, {"c+", "c'", "cr", "c'", "cr", "c'", "Ver. 2.0, Ref. 18"}, {"c-", "c'", "c'", "c'", "c'", "c'", "Ver. 1.0, Ref. 1"}, {"c=", "c'", "c=", "c=", "c=", "c=", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "c=1", "c=", "c=1", "c=", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "c=2", "c=", "c=2", "c=", "Ver. 2.0, Ref. 19"}, {"ct", "c'", "ct", "ct", "ct", "ct", "Ver. 1.0, Ref. 1"}, {"ci", "c'", "ci", "c5", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"c$", "c$", "c$", "c$", "c$", "c$", "Ver. 1.0, Ref. 1"}, {"n", "n", "n", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"no", "n", "no", "no", "no", "no", "Ver. 3.0, Ref. 22"}, {"n3n", "n", "n", "n", "n", "n", "Ver. 2.0, Ref. 18"}, {"n4n", "n", "n", "n", "n", "n", "Ver. 2.0, Ref. 18"}, {"n2", "n", "n2", "n", "n2", "n2", "Ver. 1.0, Ref. 1"}, {"n3", "n", "n3", "n3", "n3", "n3", "Ver. 1.0, Ref. 1"}, {"na", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"n3m", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"n4m", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"n4", "n", "n4", "n3", "n3", "n3", "Ver. 1.0, Ref. 1"}, {"n+", "n", "n4", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"nn", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"nb", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"np", "n", "np", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"n=", "n", "n=", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"n=1", "n", "n=1", "np", "np", "np", "Ver. 2.0, Ref. 19"}, {"n=2", "n", "n=2", "np", "np", "np", "Ver. 2.0, Ref. 19"}, {"nt", "n", "nt", "nt", "nt", "nt", "Ver. 1.0, Ref. 1"}, {"nz", "n", "nz", "nz", "nz", "nz", "Ver. 1.3, Ref. 4"}, {"n1", "n", "n1", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"ni", "n", "ni", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"nh", "n", "np", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"npc", "n", "np", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"nho", "n", "np", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"nh+", "n", "nh+", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"nr", "n", "n2", "n2", "n2", "n2", "Ver. 2.0, Ref. 18"}, {"n$", "n$", "n$", "n$", "n$", "n$", "Ver. 1.0, Ref. 1"}, {"o'", "o'", "o'", "o'", "o'", "o'", "Ver. 1.0, Ref. 1"}, {"o", "o'", "o", "o", "o", "o'", "Ver. 1.0, Ref. 1"}, {"o-", "o'", "o-", "o-", "o'", "o'", "Ver. 1.0, Ref. 1"}, {"oh", "o'", "oh", "o", "o", "o'", "Ver. 1.0, Ref. 1"}, {"o*", "o*", "o*", "o*", "o*", "o*", "Ver. 1.0, Ref. 1"}, {"op", "o'", "op", "op", "op", "op", "Ver. 1.3, Ref. 8"}, {"of", "o'", "oh", "o", "of", "o'", "Ver. 1.0, Ref. 1"}, {"o$", "o$", "o$", "o$", "o$", "o$", "Ver. 1.0, Ref. 1"}, {"oc", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"oe", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"o3e", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"o4e", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"s", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"s1", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sh", "s", "sh", "sh", "sh", "sh", "Ver. 1.0, Ref. 1"}, {"s'", "s'", "s'", "s'", "s'", "s'", "Ver. 1.3, Ref. 7"}, {"sp", "s'", "sp", "sp", "sp", "sp", "Ver. 1.3, Ref. 6"}, {"s$", "s$", "s$", "s$", "s$", "s$", "Ver. 1.0, Ref. 1"}, {"sc", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 18"}, {"s3e", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 18"}, {"s4e", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 18"}, {"p", "p", "p", "p", "p", "p", "Ver. 1.0, Ref. 1"}, {"p$", "p$", "p$", "p$", "p$", "p$", "Ver. 1.0, Ref. 1"}, {"ca+", "ca+", "ca+", "ca+", "ca+", "ca+", "Ver. 1.0, Ref. 1"}, {"f", "f", "f", "f", "f", "f", "Ver. 1.0, Ref. 1"}, {"i", "i", "i", "i", "i", "i", "Ver. 1.3, Ref. 4"}, {"cl", "cl", "cl", "cl", "cl", "cl", "Ver. 1.0, Ref. 1"}, {"br", "br", "br", "br", "br", "br", "Ver. 1.0, Ref. 1"}, {"si", "si", "si", "si", "si", "si", "Ver. 1.0, Ref. 1"}, {"nu", "nu", "nu", "nu", "nu", "nu", "Ver. 1.0, Ref. 1"}, {"Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Ver. 1.0, Ref. 1"}, {"Br", "Br", "Br", "Br", "Br", "Br", "Ver. 1.0, Ref. 1"}, {"Na", "Na", "Na", "Na", "Na", "Na", "Ver. 1.0, Ref. 1"}, {"ar", "ar", "ar", "ar", "ar", "ar", "Ver. 1.3, Ref. 9"}, {"sz", "sz", "sz", "sz", "sz", "sz", "Ver. 3.1, Ref. 23"}, {"sy", "sy", "sy", "sy", "sy", "sy", "Ver. 3.2, Ref. 24"}, {"oz", "oz", "oz", "oz", "oz", "oz", "Ver. 3.1, Ref. 23"}, {"oy", "oy", "oy", "oy", "oy", "oy", "Ver. 3.2, Ref. 24"}, {"az", "az", "az", "az", "az", "az", "Ver. 3.1, Ref. 23"}, {"ay", "ay", "ay", "ay", "ay", "ay", "Ver. 3.2, Ref. 24"}, {"pz", "pz", "pz", "pz", "pz", "pz", "Ver. 3.1, Ref. 23"}, {"ga", "ga", "ga", "ga", "ga", "ga", "Ver. 3.1, Ref. 23"}, {"ge", "ge", "ge", "ge", "ge", "ge", "Ver. 3.1, Ref. 23"}, {"tioc", "tioc", "tioc", "tioc", "tioc", "tioc", "Ver. 3.1, Ref. 23"}, {"titd", "titd", "titd", "titd", "titd", "titd", "Ver. 3.1, Ref. 23"}, {"li+", "li+", "li+", "li+", "li+", "li+", "Ver. 3.1, Ref. 23"}, {"na+", "na+", "na+", "na+", "na+", "na+", "Ver. 3.1, Ref. 23"}, {"nac+", "nac+", "nac+", "nac+", "nac+", "nac+", "Ver. 3.2, Ref. 24"}, {"k+", "k+", "k+", "k+", "k+", "k+", "Ver. 3.1, Ref. 23"}, {"rb+", "rb+", "rb+", "rb+", "rb+", "rb+", "Ver. 3.1, Ref. 23"}, {"cs+", "cs+", "cs+", "cs+", "cs+", "cs+", "Ver. 3.1, Ref. 23"}, {"mg2+", "mg2+", "mg2+", "mg2+", "mg2+", "mg2+", "Ver. 3.1, Ref. 23"}, {"mg2c", "mg2c", "mg2c", "mg2c", "mg2c", "mg2c", "Ver. 3.2, Ref. 24"}, {"mn4c", "mn4c", "mn4c", "mn4c", "mn4c", "mn4c", "Ver. 3.3, Ref. 25"}, {"mn3c", "mn3c", "mn3c", "mn3c", "mn3c", "mn3c", "Ver. 3.3, Ref. 25"}, {"co2c", "co2c", "co2c", "co2c", "co2c", "co2c", "Ver. 3.3, Ref. 25"}, {"ni2c", "ni2c", "ni2c", "ni2c", "ni2c", "ni2c", "Ver. 3.3, Ref. 25"}, {"lic+", "lic+", "lic+", "lic+", "lic+", "lic+", "Ver. 3.3, Ref. 25"}, {"ca2+", "ca2+", "ca2+", "ca2+", "ca2+", "ca2+", "Ver. 3.1, Ref. 23"}, {"ba2+", "ba2+", "ba2+", "ba2+", "ba2+", "ba2+", "Ver. 3.1, Ref. 23"}, {"cu2+", "cu2+", "cu2+", "cu2+", "cu2+", "cu2+", "Ver. 3.1, Ref. 23"}, {"fe2c", "fe2c", "fe2c", "fe2c", "fe2c", "fe2c", "Ver. 3.2, Ref. 24"}, {"f-", "f-", "f-", "f-", "f-", "f-", "Ver. 3.1, Ref. 26"}, {"cl-", "cl-", "cl-", "cl-", "cl-", "cl-", "Ver. 3.1, Ref. 23"}, {"br-", "br-", "br-", "br-", "br-", "br-", "Ver. 3.1, Ref. 23"}, {"i-", "i-", "i-", "i-", "i-", "i-", "Ver. 3.1, Ref. 23"}, {"so4", "so4", "so4", "so4", "so4", "so4", "Ver. 3.1, Ref. 23"}, {"ayt", "ayt", "ayt", "ayt", "ayt", "ayt", "Ver. 3.1, Ref. 34"}, {"py", "py", "py", "py", "py", "py", "Ver. 3.1, Ref. 34"}, {"vy", "vy", "vy", "vy", "vy", "vy", "Ver. 3.1, Ref. 34"}, {"ti4c", "ti4c", "ti4c", "ti4c", "ti4c", "ti4c", "Ver. 3.1, Ref. 35"}, {"ca2c", "ca2c", "ca2c", "ca2c", "ca2c", "ca2c", "Ver. 3.1, Ref. 35"}, {"cly-", "cly-", "cly-", "cly-", "cly-", "cly-", "Ver. 3.1, Ref. 36"}, {"nh4+", "nh4+", "nh4+", "nh4+", "nh4+", "nh4+", "Ver. 3.1, Ref. 36"}, {"so4y", "so4y", "so4y", "so4y", "so4y", "so4y", "Ver. 3.1, Ref. 36"}, {"sr2c", "sr2c", "sr2c", "sr2c", "sr2c", "sr2c", "Ver. 3.1, Ref. 35"}, {"hocl", "hocl", "hocl", "hocl", "hocl", "hocl", "Ver. 3.2, Ref. 24"}, {"pd2+", "pd2+", "pd2+", "pd2+", "pd2+", "pd2+", "Ver. 3.2, Ref. 27"}, {"lioh", "lioh", "lioh", "lioh", "lioh", "lioh", "Ver. 3.4, Ref. 30"}, {"naoh", "naoh", "naoh", "naoh", "naoh", "naoh", "Ver. 3.4, Ref. 30"}, {"koh", "koh", "koh", "koh", "koh", "koh", "Ver. 3.4, Ref. 30"}, {"foh", "foh", "foh", "foh", "foh", "foh", "Ver. 3.4, Ref. 30"}, {"cloh", "cloh", "cloh", "cloh", "cloh", "cloh", "Ver. 3.4, Ref. 30"}, {"beoh", "beoh", "beoh", "beoh", "beoh", "beoh", "Ver. 3.4, Ref. 33"}, {"al", "si", "al", "si", "si", "si", "Ver. 2.1, Ref. 26"}, {"Pt", "Pt", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Pd", "Pd", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Au", "Au", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Ag", "Ag", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Sn", "Na", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"K", "Pb", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Li", "Li", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Mo", "Mo", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Fe", "Fe", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"W", "W", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Ni", "Ni", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Cr", "Cr", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Cu", "Cu", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Pb", "Pb", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= CVFF_aug info E = K2 * (R - R0)^2 */ char * CVFF_aug_bonds_auto[798][5]= {{"mg2+", "cl-", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"sz", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"sy", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 24"}, {"py", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 34"}, {"vy", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 34"}, {"ti4c", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 35"}, {"ca2c", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 35"}, {"cly-", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 36"}, {"nh4+", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 36"}, {"so4y", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 36"}, {"sr2c", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 35"}, {"ayt", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 34"}, {"az", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"ay", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 24"}, {"pz", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"ga", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"ge", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"tioc", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"titd", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"li+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"na+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"nac+", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 24"}, {"k+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"rb+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"cs+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"mg2+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"mg2c", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 24"}, {"mn4c", "oy", "1.6200", "000.0000", "Ver. 3.3, Ref. 25"}, {"mn3c", "oy", "1.6200", "000.0000", "Ver. 3.3, Ref. 25"}, {"co2c", "oy", "1.6200", "000.0000", "Ver. 3.3, Ref. 25"}, {"ni2c", "oy", "1.6200", "000.0000", "Ver. 3.3, Ref. 25"}, {"lic+", "oy", "1.6200", "000.0000", "Ver. 3.3, Ref. 25"}, {"ca2+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"ba2+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"cu2+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"fe2c", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 24"}, {"f-", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 26"}, {"cl-", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"br-", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"i-", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"so4", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"hocl", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 24"}, {"pd2+", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 27"}, {"lioh", "o*", "1.6200", "000.0000", "Ver. 3.4, Ref. 30"}, {"naoh", "o*", "1.6200", "000.0000", "Ver. 3.4, Ref. 30"}, {"koh", "o*", "1.6200", "000.0000", "Ver. 3.4, Ref. 30"}, {"foh", "o*", "1.6200", "000.0000", "Ver. 3.4, Ref. 30"}, {"cloh", "o*", "1.6200", "000.0000", "Ver. 3.4, Ref. 30"}, {"beoh", "o*", "1.6200", "000.0000", "Ver. 3.4, Ref. 33"}, {"no", "o-", "1.2178", "560.9942", "Ver. 3.0, Ref. 22"}, {"no", "cp", "1.4720", "351.2527", "Ver. 3.0, Ref. 22"}, {"c'", "cp", "1.4720", "351.2527", "Ver. 3.0, Ref. 22"}, {"c", "o", "1.4250", "273.2000", "Ver. 1.0, Ref. 1"}, {"c", "h", "1.1050", "340.6175", "Ver. 1.0, Ref. 1"}, {"c", "c", "1.5260", "322.7158", "Ver. 1.0, Ref. 1"}, {"c", "c'", "1.5200", "283.0924", "Ver. 1.0, Ref. 1"}, {"c'", "o'", "1.2300", "615.3220", "Ver. 1.0, Ref. 1"}, {"n", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"n", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"n", "c'", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n", "cr", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "1.4600", "377.5752", "Ver. 1.0, Ref. 1"}, {"n1", "cr", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n1", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"n1", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"c", "n1", "1.4600", "377.5752", "Ver. 1.0, Ref. 1"}, {"oz", "ho", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"oh", "ho", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"oh", "lp", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"oh", "c", "1.4200", "384.0000", "Ver. 1.0, Ref. 1"}, {"o", "ho", "0.9600", "493.8480", "Ver. 1.0, Ref. 1"}, {"o", "lp", "0.9600", "493.8480", "Ver. 1.0, Ref. 1"}, {"c'", "h", "1.1050", "340.6175", "Ver. 1.0, Ref. 1"}, {"c'", "o", "1.3700", "400.0000", "Ver. 1.0, Ref. 1"}, {"c'", "oh", "1.3700", "400.0000", "Ver. 1.0, Ref. 1"}, {"c'", "o-", "1.2500", "540.0000", "Ver. 1.0, Ref. 1"}, {"cp", "h", "1.0800", "363.4164", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "1.3400", "480.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "1.5100", "283.0924", "Ver. 1.0, Ref. 1"}, {"cp", "oh", "1.3700", "384.0000", "Ver. 1.0, Ref. 1"}, {"sh", "hs", "1.3300", "274.1288", "Ver. 1.0, Ref. 1"}, {"sh", "lp", "1.3300", "274.1288", "Ver. 1.0, Ref. 1"}, {"c", "sh", "1.8200", "228.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "1.8000", "228.0000", "Ver. 1.0, Ref. 1"}, {"c", "s1", "1.8000", "228.0000", "Ver. 1.0, Ref. 1"}, {"s", "s", "2.0000", "180.0000", "Ver. 1.0, Ref. 1"}, {"s1", "s1", "2.0000", "180.0000", "Ver. 1.0, Ref. 1"}, {"n2", "hn", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"n2", "lp", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"c", "n2", "1.4700", "356.5988", "Ver. 1.0, Ref. 1"}, {"n2", "c'", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cr", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n3", "hn", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"n3", "lp", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"c", "n3", "1.4700", "356.5988", "Ver. 1.0, Ref. 1"}, {"n4", "hn", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"n4", "lp", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"c", "n4", "1.4700", "356.5988", "Ver. 1.0, Ref. 1"}, {"cp", "np", "1.2600", "560.0000", "Ver. 1.0, Ref. 1"}, {"np", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"np", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "1.3400", "280.0000", "Ver. 1.0, Ref. 1"}, {"c5", "h", "1.0800", "363.4164", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "1.3900", "280.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c", "1.5100", "283.0924", "Ver. 1.0, Ref. 1"}, {"c5", "np", "1.3800", "320.0000", "Ver. 1.0, Ref. 1"}, {"c5", "o", "1.3700", "420.0000", "Ver. 1.2, Ref. 3"}, {"c5", "op", "1.3700", "420.0000", "Ver. 1.3, Ref. 8"}, {"c5", "s", "1.7300", "228.0000", "Ver. 1.2, Ref. 3"}, {"cs", "h", "1.0800", "379.0809", "Ver. 1.3, Ref. 6"}, {"cs", "c5", "1.3630", "400.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "1.7106", "320.0000", "Ver. 1.3, Ref. 6"}, {"ci", "h", "1.0800", "363.4164", "Ver. 1.0, Ref. 1"}, {"ci", "ci", "1.3900", "280.0000", "Ver. 1.0, Ref. 1"}, {"ci", "c", "1.5100", "283.0924", "Ver. 1.0, Ref. 1"}, {"ci", "ni", "1.3800", "320.0000", "Ver. 1.0, Ref. 1"}, {"ni", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"ni", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"cp", "n", "1.4200", "280.0000", "Ver. 1.0, Ref. 1"}, {"o*", "h*", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"o*", "lp", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"p", "oh", "1.5700", "300.0000", "Ver. 1.0, Ref. 1"}, {"p", "o'", "1.5300", "560.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "1.6100", "245.2000", "Ver. 1.0, Ref. 1"}, {"p", "o-", "1.5300", "480.0000", "Ver. 1.0, Ref. 1"}, {"p", "h", "1.5000", "224.0000", "Ver. 1.0, Ref. 1"}, {"p", "lp", "1.5000", "224.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "1.4750", "336.8000", "Ver. 1.0, Ref. 1"}, {"n=", "c", "1.4750", "336.8000", "Ver. 1.0, Ref. 1"}, {"n=1", "c", "1.4750", "336.8000", "Ver. 2.0, Ref. 19"}, {"n=2", "c", "1.4750", "336.8000", "Ver. 2.0, Ref. 19"}, {"c=", "n=", "1.2600", "560.0000", "Ver. 1.0, Ref. 1"}, {"c=", "n=1", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=", "1.2600", "560.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n=1", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=2", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c'", "1.5000", "322.8000", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c", "1.5000", "322.8000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "1.3300", "655.2000", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "1.3300", "655.2000", "Ver. 2.0, Ref. 19"}, {"c=", "h", "1.0900", "361.6000", "Ver. 1.0, Ref. 1"}, {"c=1", "h", "1.0900", "361.6000", "Ver. 2.0, Ref. 19"}, {"c=2", "h", "1.0900", "361.6000", "Ver. 2.0, Ref. 19"}, {"f", "c", "1.3630", "496.0000", "Ver. 1.0, Ref. 1"}, {"f", "lp", "1.3630", "496.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "1.7610", "314.0000", "Ver. 1.0, Ref. 1"}, {"cl", "lp", "1.7610", "314.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "1.9200", "223.6000", "Ver. 1.0, Ref. 1"}, {"br", "lp", "1.9200", "223.6000", "Ver. 1.0, Ref. 1"}, {"f", "cp", "1.3630", "496.0000", "Ver. 1.0, Ref. 1"}, {"cl", "cp", "1.7610", "314.0000", "Ver. 1.0, Ref. 1"}, {"br", "cp", "1.9200", "223.6000", "Ver. 1.0, Ref. 1"}, {"si", "c", "1.8090", "238.0000", "Ver. 1.0, Ref. 1"}, {"si", "h", "1.3820", "222.4000", "Ver. 1.0, Ref. 1"}, {"si", "o", "1.6650", "392.8000", "Ver. 1.0, Ref. 1"}, {"h", "h", "0.74611", "398.75", "Ver. 1.3, Ref. 4"}, {"d", "d", "0.74164", "398.24", "Ver. 1.3, Ref. 4"}, {"f", "f", "1.417", "259.07", "Ver. 1.3, Ref. 4"}, {"cl", "cl", "1.988", "236.55", "Ver. 1.3, Ref. 4"}, {"br", "br", "2.290", "175.64", "Ver. 1.3, Ref. 4"}, {"i", "i", "2.662", "123.21", "Ver. 1.3, Ref. 4"}, {"o", "o", "1.208", "833.72", "Ver. 1.3, Ref. 4"}, {"nz", "nz", "1.09758", "1632.51", "Ver. 1.3, Ref. 4"}, {"nt", "nt", "1.09758", "1632.51", "Ver. 1.3, Ref. 5"}, {"c'", "s'", "1.6110", "510.2775", "Ver. 1.3, Ref. 7"}, {"c3m_", "c3m_", "1.5100", "322.7158", "Ver. 2.0, Ref. 18"}, {"c3m_", "c4m_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c3m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c3m_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 18"}, {"c3m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c3m_", "n3m_", "1.4850", "356.5988", "Ver. 2.0, Ref. 18"}, {"c3m_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c3m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 18"}, {"c3m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 18"}, {"c3m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 18"}, {"c3m_", "o3e_", "1.4340", "273.2000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o4e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c3m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 18"}, {"c3m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 18"}, {"c3m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s4e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c3m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 18"}, {"c3m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"c3m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "1.5520", "322.7158", "Ver. 2.0, Ref. 18"}, {"c4m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c4m_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 18"}, {"c4m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c4m_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c4m_", "n4m_", "1.4670", "356.5988", "Ver. 2.0, Ref. 18"}, {"c4m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 18"}, {"c4m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 18"}, {"c4m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 18"}, {"c4m_", "o3e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o4e_", "1.4462", "273.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 18"}, {"c4m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 18"}, {"c4m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 18"}, {"c4m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "1.8470", "228.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c4m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 18"}, {"c4m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"c4m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c'_", "n3m_", "1.4460", "272.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n4m_", "1.4000", "332.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "s3e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 18"}, {"c'_", "s4e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 18"}, {"cp_", "n3m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n4m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s3e", "1.7300", "228.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s4e", "1.7300", "228.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_1", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_1", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_2", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_2", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_3", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_3", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_1", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_1", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_2", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_2", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_3", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_3", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"ct_", "n3m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 18"}, {"ct_", "n4m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 18"}, {"ct_", "s3e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 18"}, {"ct_", "s4e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 18"}, {"na_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"na_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"na_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"na_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 18"}, {"n3m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 18"}, {"n3m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 18"}, {"n3m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 18"}, {"n3m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 18"}, {"n3m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 18"}, {"n3m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 18"}, {"n3m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 18"}, {"n3m_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 18"}, {"n3m_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 18"}, {"n3m_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 18"}, {"n3m_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 18"}, {"n3m_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 18"}, {"n3m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 18"}, {"n4m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 18"}, {"n4m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 18"}, {"n4m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 18"}, {"n4m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 18"}, {"n4m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 18"}, {"n4m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n4m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 18"}, {"n4m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 18"}, {"n4m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n4m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n4m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 18"}, {"n4m_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 18"}, {"n4m_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 18"}, {"n4m_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 18"}, {"n4m_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 18"}, {"n4m_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 18"}, {"n4m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 18"}, {"n_", "s3e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 18"}, {"n_", "s4e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 18"}, {"np_", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"np_", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_1", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_1", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_2", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_2", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_3", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_3", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"o_", "s3e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 18"}, {"o_", "s4e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 18"}, {"op_", "s3e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 18"}, {"op_", "s4e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 18"}, {"o'_", "s3e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 18"}, {"o'_", "s4e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 18"}, {"s_", "s3e_", "2.1000", "160.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s4e_", "2.1000", "160.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s3e_", "2.0400", "175.1260", "Ver. 2.0, Ref. 18"}, {"sp_", "s4e_", "2.0400", "175.1260", "Ver. 2.0, Ref. 18"}, {"s'_", "s3e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 18"}, {"s'_", "s4e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 18"}, {"s3e_", "s3e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 18"}, {"s3e_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 18"}, {"s3e_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 18"}, {"s3e_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 18"}, {"s3e_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 18"}, {"s3e_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 18"}, {"s3e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 18"}, {"s4e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 18"}, {"s4e_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 18"}, {"s4e_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 18"}, {"s4e_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 18"}, {"s4e_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 18"}, {"s4e_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 18"}, {"s4e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 18"}, {"c_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 18"}, {"c_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 18"}, {"c_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 18"}, {"c_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 18"}, {"c_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 18"}, {"c_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 18"}, {"c_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 18"}, {"c_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 18"}, {"c_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 18"}, {"c_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"c_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"c_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"c_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 18"}, {"c_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c'_", "1.5000", "266.4000", "Ver. 2.0, Ref. 18"}, {"c'_", "cp_", "1.5000", "284.3316", "Ver. 2.0, Ref. 18"}, {"c'_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "ct_", "1.4200", "311.1492", "Ver. 2.0, Ref. 18"}, {"c'_", "n_", "1.3600", "388.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_1", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_2", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_3", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "np_", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "o_", "1.3400", "400.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "o'_", "1.2200", "615.3220", "Ver. 2.0, Ref. 18"}, {"c'_", "o-_", "1.2500", "572.8860", "Ver. 2.0, Ref. 18"}, {"c'_", "op_", "1.3500", "294.1008", "Ver. 2.0, Ref. 18"}, {"c'_", "s_", "1.7700", "175.0035", "Ver. 2.0, Ref. 18"}, {"c'_", "s'_", "1.6110", "510.2775", "Ver. 2.0, Ref. 18"}, {"c'_", "s-_", "1.6800", "280.3060", "Ver. 2.0, Ref. 18"}, {"c'_", "sp_", "1.7400", "215.3532", "Ver. 2.0, Ref. 18"}, {"c'_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c'_", "p_", "1.7200", "241.3820", "Ver. 2.0, Ref. 18"}, {"c'_", "f_", "1.3900", "217.7092", "Ver. 2.0, Ref. 18"}, {"c'_", "cl_", "1.7270", "249.8588", "Ver. 2.0, Ref. 18"}, {"c'_", "br_", "1.8750", "228.2808", "Ver. 2.0, Ref. 18"}, {"c'_", "si_", "1.8300", "239.3552", "Ver. 2.0, Ref. 18"}, {"c'_", "i_", "2.0610", "208.6024", "Ver. 2.0, Ref. 18"}, {"cp_", "cp_", "1.3900", "480.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "ct_", "1.4000", "321.6716", "Ver. 2.0, Ref. 18"}, {"cp_", "na_", "1.4120", "257.7752", "Ver. 2.0, Ref. 18"}, {"cp_", "n_", "1.4200", "280.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_1", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_2", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_3", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "np_", "1.3500", "440.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n+_", "1.4120", "251.3344", "Ver. 2.0, Ref. 18"}, {"cp_", "o_", "1.3700", "384.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "o'_", "1.3300", "297.4852", "Ver. 2.0, Ref. 18"}, {"cp_", "op_", "1.3700", "420.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s_", "1.7300", "228.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s'_", "1.7200", "239.8024", "Ver. 2.0, Ref. 18"}, {"cp_", "sp_", "1.7106", "320.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 18"}, {"cp_", "p_", "1.7000", "235.0428", "Ver. 2.0, Ref. 18"}, {"cp_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"cp_", "i_", "2.0410", "217.4512", "Ver. 2.0, Ref. 18"}, {"cp_", "si_", "1.8100", "225.1676", "Ver. 2.0, Ref. 18"}, {"ci_", "ci_", "1.3900", "280.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "ni_", "1.3800", "320.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 18"}, {"c=", "c=", "1.3300", "655.2000", "Ver. 2.0, Ref. 18"}, {"c=_3", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_2", "1.4100", "480.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_2", "1.4800", "320.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_1", "1.4800", "320.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_3", "1.4800", "320.0000", "Ver. 2.0, Ref. 18"}, {"c=", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=_1", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=_1", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_1", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=_2", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=_2", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_2", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=_3", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=_3", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_3", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_2", "1.3430", "493.5268", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_3", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"c=_1", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_1", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=_1", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=_1", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=_1", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=_1", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=_1", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_1", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=_1", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=_1", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=_1", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=_1", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=_1", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=_1", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"c=_2", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_2", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=_2", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=_2", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=_2", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=_2", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=_2", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_2", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=_2", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=_2", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=_2", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=_2", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=_2", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=_2", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"c=_3", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_3", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=_3", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=_3", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=_3", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=_3", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=_3", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_3", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=_3", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=_3", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=_3", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=_3", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=_3", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=_3", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"cr_", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_2", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n_", "1.3200", "388.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "ct_", "1.2040", "800.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "nt_", "1.1580", "880.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "na_", "1.3820", "286.8096", "Ver. 2.0, Ref. 18"}, {"ct_", "n_", "1.3550", "289.4448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_1", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_2", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_3", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n+_", "1.3820", "278.3768", "Ver. 2.0, Ref. 18"}, {"ct_", "o_", "1.3130", "367.8164", "Ver. 2.0, Ref. 18"}, {"ct_", "s_", "1.7200", "271.4328", "Ver. 2.0, Ref. 18"}, {"ct_", "op_", "1.3000", "346.4680", "Ver. 2.0, Ref. 18"}, {"ct_", "o'_", "1.3000", "318.8680", "Ver. 2.0, Ref. 18"}, {"ct_", "sp_", "1.6900", "256.0344", "Ver. 2.0, Ref. 18"}, {"ct_", "s'_", "1.6900", "270.8344", "Ver. 2.0, Ref. 18"}, {"ct_", "p_", "1.6700", "273.4668", "Ver. 2.0, Ref. 18"}, {"ct_", "h_", "1.0530", "316.9016", "Ver. 2.0, Ref. 18"}, {"ct_", "f_", "1.3400", "278.3932", "Ver. 2.0, Ref. 18"}, {"ct_", "cl_", "1.6770", "292.1952", "Ver. 2.0, Ref. 18"}, {"ct_", "br_", "1.8250", "268.8528", "Ver. 2.0, Ref. 18"}, {"ct_", "i_", "2.0110", "248.9268", "Ver. 2.0, Ref. 18"}, {"ct_", "si_", "1.7800", "267.2964", "Ver. 2.0, Ref. 18"}, {"na_", "na_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"na_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 18"}, {"na_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 18"}, {"na_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 18"}, {"na_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"na_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 18"}, {"na_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 18"}, {"na_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 18"}, {"na_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 18"}, {"na_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 18"}, {"na_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 18"}, {"na_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 18"}, {"na_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 18"}, {"na_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 18"}, {"na_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 18"}, {"na_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 18"}, {"n_", "n_", "1.3400", "220.0000", "Ver. 2.0, Ref. 18"}, {"n_", "np_", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_1", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_2", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_3", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n+_", "1.3670", "210.6360", "Ver. 2.0, Ref. 18"}, {"n_", "o_", "1.2980", "301.2632", "Ver. 2.0, Ref. 18"}, {"n_", "s_", "1.7050", "210.6208", "Ver. 2.0, Ref. 18"}, {"n_", "op_", "1.2850", "267.1080", "Ver. 2.0, Ref. 18"}, {"n_", "o'_", "1.2850", "239.5080", "Ver. 2.0, Ref. 18"}, {"n_", "sp_", "1.6750", "193.4844", "Ver. 2.0, Ref. 18"}, {"n_", "s'_", "1.6750", "208.2844", "Ver. 2.0, Ref. 18"}, {"n_", "p_", "1.6550", "219.9524", "Ver. 2.0, Ref. 18"}, {"n_", "h_", "1.0260", "483.4512", "Ver. 2.0, Ref. 18"}, {"n_", "f_", "1.3250", "189.3856", "Ver. 2.0, Ref. 18"}, {"n_", "cl_", "1.6620", "227.5604", "Ver. 2.0, Ref. 18"}, {"n_", "br_", "1.8100", "206.3980", "Ver. 2.0, Ref. 18"}, {"n_", "i_", "1.9960", "186.6972", "Ver. 2.0, Ref. 18"}, {"n_", "si_", "1.7650", "216.8064", "Ver. 2.0, Ref. 18"}, {"np_", "np_", "1.3400", "408.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"np_", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"np_", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 18"}, {"np_", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"np_", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"np_", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 18"}, {"np_", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"np_", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"np_", "h_", "1.0260", "483.4512", "Ver. 2.0, Ref. 18"}, {"np_", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"np_", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"np_", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"np_", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"np_", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=", "n=", "1.2100", "651.2000", "Ver. 2.0, Ref. 18"}, {"n=_3", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_2", "1.2760", "488.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"n=", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=_1", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=_1", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=_2", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=_2", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=_3", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=_3", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 18"}, {"n=_1", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 18"}, {"n=_2", "o'_", "1.2225", "434.0900", "Ver. 2.0, Ref. 18"}, {"n=_3", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 18"}, {"n=", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_1", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_2", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_3", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_1", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_2", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_3", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=_1", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=_2", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=_3", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 18"}, {"n=_1", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 18"}, {"n=_2", "s'_", "1.6325", "375.1624", "Ver. 2.0, Ref. 18"}, {"n=_3", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 18"}, {"n=", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=_1", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=_1", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=_1", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=_1", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=_1", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=_1", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=_1", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=_2", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=_2", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=_2", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=_2", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=_2", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=_2", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=_2", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=_3", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=_3", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=_3", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=_3", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=_3", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=_3", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=_3", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n+_", "n+_", "1.3940", "193.5604", "Ver. 2.0, Ref. 18"}, {"n+_", "o_", "1.3250", "291.0020", "Ver. 2.0, Ref. 18"}, {"n+_", "s_", "1.7320", "200.1168", "Ver. 2.0, Ref. 18"}, {"n+_", "op_", "1.3120", "261.7060", "Ver. 2.0, Ref. 18"}, {"n+_", "o'_", "1.3120", "234.1060", "Ver. 2.0, Ref. 18"}, {"n+_", "sp_", "1.7020", "183.2952", "Ver. 2.0, Ref. 18"}, {"n+_", "s'_", "1.7020", "198.0952", "Ver. 2.0, Ref. 18"}, {"n+_", "p_", "1.6820", "209.1536", "Ver. 2.0, Ref. 18"}, {"n+_", "h_", "1.0650", "461.1848", "Ver. 2.0, Ref. 18"}, {"n+_", "f_", "1.3520", "178.0372", "Ver. 2.0, Ref. 18"}, {"n+_", "cl_", "1.6890", "217.7248", "Ver. 2.0, Ref. 18"}, {"n+_", "br_", "1.8370", "196.5940", "Ver. 2.0, Ref. 18"}, {"n+_", "i_", "2.0230", "177.2764", "Ver. 2.0, Ref. 18"}, {"n+_", "si_", "1.7920", "206.9412", "Ver. 2.0, Ref. 18"}, {"nz_", "nz_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 18"}, {"nt_", "nt_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 18"}, {"o_", "o_", "1.2080", "833.6868", "Ver. 2.0, Ref. 18"}, {"o_", "s_", "1.6930", "288.0848", "Ver. 2.0, Ref. 18"}, {"o_", "op_", "1.2430", "350.7720", "Ver. 2.0, Ref. 18"}, {"o_", "o'_", "1.2430", "323.1720", "Ver. 2.0, Ref. 18"}, {"o_", "sp_", "1.6330", "271.9584", "Ver. 2.0, Ref. 18"}, {"o_", "s'_", "1.6330", "286.7584", "Ver. 2.0, Ref. 18"}, {"o_", "p_", "1.6100", "245.2000", "Ver. 2.0, Ref. 18"}, {"o_", "si_", "1.6650", "392.8000", "Ver. 2.0, Ref. 18"}, {"o_", "h_", "0.9600", "493.8480", "Ver. 2.0, Ref. 18"}, {"o_", "f_", "1.4180", "224.0000", "Ver. 2.0, Ref. 18"}, {"o_", "cl_", "1.6500", "307.0632", "Ver. 2.0, Ref. 18"}, {"o_", "br_", "1.7980", "284.7988", "Ver. 2.0, Ref. 18"}, {"o_", "i_", "1.9840", "264.9868", "Ver. 2.0, Ref. 18"}, {"o'_", "o'_", "1.1100", "484.8000", "Ver. 2.0, Ref. 18"}, {"o'_", "op_", "1.2300", "272.4000", "Ver. 2.0, Ref. 18"}, {"o'_", "s_", "1.5900", "360.4188", "Ver. 2.0, Ref. 18"}, {"o'_", "sp_", "1.5600", "341.2736", "Ver. 2.0, Ref. 18"}, {"o'_", "s'_", "1.5400", "421.5188", "Ver. 2.0, Ref. 18"}, {"o'_", "p_", "1.4800", "524.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "h_", "0.9830", "458.4610", "Ver. 2.0, Ref. 18"}, {"o'_", "f_", "1.2700", "204.0505", "Ver. 2.0, Ref. 18"}, {"o'_", "cl_", "1.6070", "251.7939", "Ver. 2.0, Ref. 18"}, {"o'_", "br_", "1.7550", "233.2954", "Ver. 2.0, Ref. 18"}, {"o'_", "i_", "1.9410", "213.2317", "Ver. 2.0, Ref. 18"}, {"o'_", "si_", "1.6500", "454.7464", "Ver. 2.0, Ref. 18"}, {"op_", "op_", "1.2300", "300.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s_", "1.6800", "266.7748", "Ver. 2.0, Ref. 18"}, {"op_", "sp_", "1.6500", "247.8440", "Ver. 2.0, Ref. 18"}, {"op_", "s'_", "1.6200", "262.9744", "Ver. 2.0, Ref. 18"}, {"op_", "p_", "1.6300", "286.0904", "Ver. 2.0, Ref. 18"}, {"op_", "h_", "0.9830", "486.0610", "Ver. 2.0, Ref. 18"}, {"op_", "f_", "1.2700", "231.6505", "Ver. 2.0, Ref. 18"}, {"op_", "cl_", "1.6070", "279.3939", "Ver. 2.0, Ref. 18"}, {"op_", "br_", "1.7550", "260.8954", "Ver. 2.0, Ref. 18"}, {"op_", "i_", "1.9410", "240.8317", "Ver. 2.0, Ref. 18"}, {"op_", "si", "1.5870", "292.2400", "Ver. 2.0, Ref. 18"}, {"o-_", "p_", "1.4800", "428.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s_", "2.0547", "180.0000", "Ver. 2.0, Ref. 18"}, {"s_", "sp_", "2.0400", "175.1260", "Ver. 2.0, Ref. 18"}, {"s_", "s'_", "2.0400", "189.9260", "Ver. 2.0, Ref. 18"}, {"s_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 18"}, {"s_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 18"}, {"s_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 18"}, {"s_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 18"}, {"s_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 18"}, {"s_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 18"}, {"s_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 18"}, {"s'_", "s'_", "1.9700", "320.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "p_", "1.9700", "255.2524", "Ver. 2.0, Ref. 18"}, {"s'_", "h_", "1.3730", "316.8138", "Ver. 2.0, Ref. 18"}, {"s'_", "f_", "1.6600", "195.3021", "Ver. 2.0, Ref. 18"}, {"s'_", "cl_", "1.9970", "211.1368", "Ver. 2.0, Ref. 18"}, {"s'_", "br_", "2.1450", "187.6017", "Ver. 2.0, Ref. 18"}, {"s'_", "i_", "2.3310", "167.6272", "Ver. 2.0, Ref. 18"}, {"s'_", "si_", "2.0800", "247.5744", "Ver. 2.0, Ref. 18"}, {"s-_", "p_", "1.9800", "210.9800", "Ver. 2.0, Ref. 18"}, {"sp_", "sp_", "2.0100", "160.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s'_", "1.9900", "240.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "p_", "1.9900", "175.1796", "Ver. 2.0, Ref. 18"}, {"sp_", "h_", "1.3730", "236.5449", "Ver. 2.0, Ref. 18"}, {"sp_", "f_", "1.6600", "180.5021", "Ver. 2.0, Ref. 18"}, {"sp_", "cl_", "1.9970", "196.3368", "Ver. 2.0, Ref. 18"}, {"sp_", "br_", "2.1450", "172.8017", "Ver. 2.0, Ref. 18"}, {"sp_", "i_", "2.3310", "152.8272", "Ver. 2.0, Ref. 18"}, {"sp_", "si_", "2.1000", "167.4260", "Ver. 2.0, Ref. 18"}, {"p_", "p_", "1.9700", "176.0000", "Ver. 2.0, Ref. 18"}, {"p_", "h_", "1.4300", "224.0000", "Ver. 2.0, Ref. 18"}, {"p_", "f_", "1.5400", "230.3664", "Ver. 2.0, Ref. 18"}, {"p_", "cl_", "2.0430", "208.8228", "Ver. 2.0, Ref. 18"}, {"p_", "br_", "2.1800", "183.1472", "Ver. 2.0, Ref. 18"}, {"p_", "i_", "2.3110", "162.7080", "Ver. 2.0, Ref. 18"}, {"p_", "si_", "1.9170", "168.2072", "Ver. 2.0, Ref. 18"}, {"h_", "h_", "0.7461", "398.7301", "Ver. 2.0, Ref. 18"}, {"h_", "f_", "1.0230", "520.7304", "Ver. 2.0, Ref. 18"}, {"h_", "cl_", "1.3600", "345.9024", "Ver. 2.0, Ref. 18"}, {"h_", "br_", "1.5080", "314.1728", "Ver. 2.0, Ref. 18"}, {"h_", "i_", "1.6940", "292.0432", "Ver. 2.0, Ref. 18"}, {"h_", "si_", "1.4630", "288.3168", "Ver. 2.0, Ref. 18"}, {"dw", "dw", "0.7416", "398.2392", "Ver. 2.0, Ref. 18"}, {"f_", "f_", "1.4170", "259.0683", "Ver. 2.0, Ref. 18"}, {"f_", "cl_", "1.6470", "207.1180", "Ver. 2.0, Ref. 18"}, {"f_", "br_", "1.7950", "193.5000", "Ver. 2.0, Ref. 18"}, {"f_", "i_", "1.9810", "174.1664", "Ver. 2.0, Ref. 18"}, {"f_", "si_", "1.5870", "297.3400", "Ver. 2.0, Ref. 18"}, {"cl_", "cl_", "1.9880", "236.5339", "Ver. 2.0, Ref. 18"}, {"cl_", "br_", "2.1320", "209.1876", "Ver. 2.0, Ref. 18"}, {"cl_", "i_", "2.3180", "189.3396", "Ver. 2.0, Ref. 18"}, {"cl_", "si_", "2.0870", "207.9748", "Ver. 2.0, Ref. 18"}, {"br_", "br_", "2.2900", "175.6329", "Ver. 2.0, Ref. 18"}, {"br_", "i_", "2.4660", "165.6156", "Ver. 2.0, Ref. 18"}, {"br_", "si_", "2.2350", "180.2320", "Ver. 2.0, Ref. 18"}, {"i_", "i_", "2.6620", "123.2110", "Ver. 2.0, Ref. 18"}, {"i_", "si_", "2.4210", "158.9664", "Ver. 2.0, Ref. 18"}, {"si_", "si_", "2.1900", "144.0000", "Ver. 2.0, Ref. 18"}}; /* Morse bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= D, 4= ALPHA, 5= CVFF_aug info E = D * (1 - exp(-ALPHA*(R - R0)))^2 */ char * CVFF_aug_morse_bonds[752][6]= {{"no", "o-", "1.2178", "140.2486", "2.0000", "Ver. 3.0, Ref. 22"}, {"no", "cp", "1.4720", "87.8132", "2.0000", "Ver. 3.0, Ref. 22"}, {"c'", "cp", "1.4720", "87.8132", "2.0000", "Ver. 3.0, Ref. 22"}, {"c", "o", "1.4250", "68.3000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "h", "1.1050", "108.6000", "1.7710", "Ver. 1.0, Ref. 1"}, {"c", "c", "1.5260", "88.0000", "1.9150", "Ver. 1.0, Ref. 1"}, {"c", "c'", "1.5200", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"c'", "o'", "1.2300", "145.0000", "2.0600", "Ver. 1.0, Ref. 1"}, {"n", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n", "c'", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n", "cr", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "1.4600", "72.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"n1", "cr", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n1", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n1", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n1", "1.4600", "72.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"oh", "ho", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"oh", "lp", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"oh", "c", "1.4200", "96.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"o", "ho", "0.9600", "95.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"o", "lp", "0.9600", "95.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c'", "h", "1.1050", "108.6000", "1.7710", "Ver. 1.0, Ref. 1"}, {"c'", "o", "1.3700", "100.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c'", "oh", "1.3700", "100.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c'", "o-", "1.2500", "135.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cp", "h", "1.0800", "116.0000", "1.7700", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "1.3400", "120.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "1.5100", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"cp", "oh", "1.3700", "96.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"sh", "hs", "1.3300", "87.5000", "1.7700", "Ver. 1.0, Ref. 1"}, {"sh", "lp", "1.3300", "87.5000", "1.7700", "Ver. 1.0, Ref. 1"}, {"c", "sh", "1.8200", "57.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "1.8000", "57.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "s1", "1.8000", "57.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"s", "s", "2.0000", "45.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"s1", "s1", "2.0000", "45.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n2", "hn", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n2", "lp", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n2", "1.4700", "68.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"n2", "c'", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cr", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n3", "hn", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n3", "lp", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n3", "1.4700", "68.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"n4", "hn", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n4", "lp", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n4", "1.4700", "68.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"cp", "np", "1.2600", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"np", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"np", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "1.3400", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c5", "h", "1.0800", "116.0000", "1.7700", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "1.3900", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c", "1.5100", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"c5", "np", "1.3800", "80.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c5", "o", "1.3700", "105.0000", "2.0000", "Ver. 1.2, Ref. 3"}, {"c5", "op", "1.3700", "105.0000", "2.0000", "Ver. 1.3, Ref. 8"}, {"c5", "s", "1.7300", "57.0000", "2.0000", "Ver. 1.2, Ref. 3"}, {"cs", "h", "1.0800", "121.0000", "1.7700", "Ver. 1.3, Ref. 6"}, {"cs", "c5", "1.3630", "100.0000", "2.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "1.7106", "80.0000", "2.0000", "Ver. 1.3, Ref. 6"}, {"ci", "h", "1.0800", "116.0000", "1.7700", "Ver. 1.0, Ref. 1"}, {"ci", "ci", "1.3900", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"ci", "c", "1.5100", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"ci", "ni", "1.3800", "80.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"ni", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"ni", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"cp", "n", "1.4200", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"o*", "h*", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"o*", "beoh", "1.5000", "5.7319", "1.0000", "Ver. 3.4, Ref. 33"}, {"o*", "lp", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"p", "oh", "1.5700", "75.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "o'", "1.5300", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "1.6100", "61.3000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "o-", "1.5300", "120.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "h", "1.5000", "56.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "lp", "1.5000", "56.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "1.4750", "84.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n=", "c", "1.4750", "84.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n=1", "c", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 19"}, {"n=2", "c", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "n=", "1.2600", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=", "n=1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "n=", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=", "1.2600", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n=1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=2", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c'", "1.5000", "80.7000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c", "1.5000", "80.7000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "1.3300", "163.8000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "h", "1.0900", "90.4000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "h", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "h", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 19"}, {"f", "c", "1.3630", "124.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"f", "lp", "1.3630", "124.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "1.7610", "78.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cl", "lp", "1.7610", "78.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "1.9200", "55.9000", "2.0000", "Ver. 1.0, Ref. 1"}, {"br", "lp", "1.9200", "55.9000", "2.0000", "Ver. 1.0, Ref. 1"}, {"f", "cp", "1.3630", "124.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cl", "cp", "1.7610", "78.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"br", "cp", "1.9200", "55.9000", "2.0000", "Ver. 1.0, Ref. 1"}, {"si", "c", "1.8090", "59.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"si", "h", "1.3820", "55.6000", "2.0000", "Ver. 1.0, Ref. 1"}, {"si", "o", "1.6650", "98.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"h", "h", "0.74611", "104.207", "1.9561", "Ver. 1.3, Ref. 4"}, {"d", "d", "0.74164", "106.010", "1.9382", "Ver. 1.3, Ref. 4"}, {"f", "f", "1.417", "37.5", "2.6284", "Ver. 1.3, Ref. 4"}, {"cl", "cl", "1.988", "58.066", "2.0183", "Ver. 1.3, Ref. 4"}, {"br", "br", "2.290", "46.336", "1.9469", "Ver. 1.3, Ref. 4"}, {"i", "i", "2.662", "36.46", "1.8383", "Ver. 1.3, Ref. 4"}, {"o", "o", "1.208", "118.86", "2.6484", "Ver. 1.3, Ref. 4"}, {"nz", "nz", "1.09758", "226.8", "2.6829", "Ver. 1.3, Ref. 4"}, {"nt", "nt", "1.09758", "226.8", "2.6829", "Ver. 1.3, Ref. 5"}, {"c'", "s'", "1.6110", "169.3000", "1.7361", "Ver. 1.3, Ref. 7"}, {"c3m_", "c3m_", "1.5100", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c3m_", "c4m_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c3m_", "c_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c3m_", "c'_", "1.5200", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c3m_", "cp_", "1.5100", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "ct_", "1.4000", "85.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "na_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "n3m_", "1.4850", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "n4m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "n_", "1.4600", "72.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "np_", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_1", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_2", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_3", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n+_", "1.4620", "67.7209", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o'_", "1.3800", "79.7371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o3e_", "1.4340", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o4e_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "op_", "1.3800", "86.6371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "sp_", "1.7700", "60.6331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s'_", "1.7700", "64.3331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s4e_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c3m_", "p_", "1.7500", "62.2836", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "si_", "1.8090", "59.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "i_", "2.1200", "50.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "1.5520", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c4m_", "c_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c4m_", "c'_", "1.5200", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c4m_", "cp_", "1.5100", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "ct_", "1.4000", "85.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "na_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "n3m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "n4m_", "1.4670", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "n_", "1.4600", "72.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "np_", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_1", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_2", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_3", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n+_", "1.4620", "67.7209", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o'_", "1.3800", "79.7371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o3e_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o4e_", "1.4462", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "op_", "1.3800", "86.6371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "sp_", "1.7700", "60.6331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s'_", "1.7700", "64.3331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s3e_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "1.8470", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c4m_", "p_", "1.7500", "62.2836", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "si_", "1.8090", "59.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "i_", "2.1200", "50.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c_", "n4m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c'_", "n3m_", "1.4460", "68.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n4m_", "1.4000", "83.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "s3e_", "1.7700", "58.0627", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "s4e_", "1.7700", "58.0627", "1.7361", "Ver. 2.0, Ref. 18"}, {"cp_", "n3m_", "1.4200", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n4m_", "1.4200", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s3e", "1.7300", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s4e", "1.7300", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n3m_", "1.3820", "71.7024", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n4m_", "1.3820", "71.7024", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s3e_", "1.7200", "67.8582", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s4e_", "1.7200", "67.8582", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n3m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n4m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s3e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s4e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n3m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n4m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n_", "1.3670", "55.4242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "np_", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_1", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_2", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_3", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n+_", "1.3940", "52.7898", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "o_", "1.3250", "75.3375", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "op_", "1.3120", "68.5440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "o'_", "1.3120", "61.6440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "sp_", "1.7020", "47.7438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s'_", "1.7020", "51.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s3e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s4e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "p_", "1.6820", "52.6350", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "h_", "1.0260", "88.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"n3m_", "f_", "1.3520", "50.2463", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "cl_", "1.6890", "56.6065", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "br_", "1.8370", "50.9585", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "i_", "2.0230", "46.0026", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "si_", "1.7920", "51.1059", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n4m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n_", "1.3670", "55.4242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "np_", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_1", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_2", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_3", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n+_", "1.3940", "52.7898", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "o_", "1.3250", "75.3375", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "op_", "1.3120", "68.5440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "o'_", "1.3120", "61.6440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "sp_", "1.7020", "47.7438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s'_", "1.7020", "51.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s3e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s4e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "p_", "1.6820", "52.6350", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "h_", "1.0260", "88.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"n4m_", "f_", "1.3520", "50.2463", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "cl_", "1.6890", "56.6065", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "br_", "1.8370", "50.9585", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "i_", "2.0230", "46.0026", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "si_", "1.7920", "51.1059", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s3e_", "1.7050", "52.6552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s4e_", "1.7050", "52.6552", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "s3e_", "1.6930", "72.0212", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "beoh_", "1.4000", "5.7634", "1.0000", "Ver. 3.4, Ref. 33"}, {"o_", "s4e_", "1.6930", "72.0212", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s3e_", "1.6800", "66.6937", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s4e_", "1.6800", "66.6937", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s3e_", "1.6500", "59.8936", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s4e_", "1.6500", "59.8936", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s3e_", "2.1000", "40.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s4e_", "2.1000", "40.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s3e_", "2.0400", "43.7815", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s4e_", "2.0400", "43.7815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s3e_", "2.0400", "47.4815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s4e_", "2.0400", "47.4815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s3e_", "2.0000", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s4e_", "2.0000", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "p_", "2.0200", "46.7198", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "h_", "1.3300", "87.5000", "1.7700", "Ver. 2.0, Ref. 18"}, {"s3e_", "f_", "1.6900", "51.2046", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "cl_", "2.0270", "53.0203", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "br_", "2.1750", "46.9709", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "i_", "2.3610", "41.9406", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "si_", "2.1300", "44.3232", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s4e_", "2.0000", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "p_", "2.0200", "46.7198", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "h_", "1.3300", "87.5000", "1.7700", "Ver. 2.0, Ref. 18"}, {"s4e_", "f_", "1.6900", "51.2046", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "cl_", "2.0270", "53.0203", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "br_", "2.1750", "46.9709", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "i_", "2.3610", "41.9406", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "si_", "2.1300", "44.3232", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "1.5200", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c_", "cp_", "1.5100", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "ct_", "1.4000", "85.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "na_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c_", "n_", "1.4600", "72.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c_", "np_", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_1", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_2", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_3", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n+_", "1.4620", "67.7209", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "o_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "op_", "1.3800", "86.6371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "o'_", "1.3800", "79.7371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "sp_", "1.7700", "60.6331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s'_", "1.7700", "64.3331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c_", "p_", "1.7500", "62.2836", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "si_", "1.8090", "59.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "i_", "2.1200", "50.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c'_", "1.5000", "66.6000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "cp_", "1.5000", "71.0829", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "ct_", "1.4200", "77.7873", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n_", "1.3600", "97.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_1", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_2", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_3", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "np_", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "o_", "1.3400", "100.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "o'_", "1.2200", "145.0000", "2.0600", "Ver. 2.0, Ref. 18"}, {"c'_", "o-_", "1.2500", "135.0000", "2.0600", "Ver. 2.0, Ref. 18"}, {"c'_", "op_", "1.3500", "73.5252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "s_", "1.7700", "58.0627", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "s'_", "1.6110", "169.3000", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "s-_", "1.6800", "93.0000", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "sp_", "1.7400", "53.8383", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c'_", "p_", "1.7200", "60.3455", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "f_", "1.3900", "54.4273", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "cl_", "1.7270", "62.4647", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "br_", "1.8750", "57.0702", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "si_", "1.8300", "59.8388", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "i_", "2.0610", "52.1506", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "cp_", "1.3900", "120.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "ct_", "1.4000", "80.4179", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "na_", "1.4120", "64.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n_", "1.4200", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_1", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_2", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_3", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "np_", "1.3500", "110.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n+_", "1.4120", "62.8336", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "o_", "1.3700", "96.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "o'_", "1.3300", "74.3713", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "op_", "1.3700", "105.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s_", "1.7300", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s'_", "1.7200", "59.9506", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "sp_", "1.7106", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "h_", "1.0800", "116.0000", "1.7700", "Ver. 2.0, Ref. 18"}, {"cp_", "p_", "1.7000", "58.7607", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "i_", "2.0410", "54.3628", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "si_", "1.8100", "56.2919", "2.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "ci_", "1.3900", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "ni", "1.3800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "h_", "1.0800", "116.0000", "1.7700", "Ver. 2.0, Ref. 18"}, {"c=", "c=", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "c=_3", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_3", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_2", "1.4100", "120.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_2", "1.4800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_1", "1.4800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_3", "1.4800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n=", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_3", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_3", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_2", "1.3430", "123.3817", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_2", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_1", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_1", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_2", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_3", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_2", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_3", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n_", "1.3200", "97.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "ct_", "1.2040", "200.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "nt_", "1.1580", "220.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "na_", "1.3820", "71.7024", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n_", "1.3550", "72.3612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_1", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_2", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_3", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n+_", "1.3820", "69.5942", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "o_", "1.3130", "91.9541", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s_", "1.7200", "67.8582", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "op_", "1.3000", "86.6170", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "o'_", "1.3000", "79.7170", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "sp_", "1.6900", "64.0086", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s'_", "1.6900", "67.7086", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "p_", "1.6700", "68.3667", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "h_", "1.0530", "101.1528", "1.7700", "Ver. 2.0, Ref. 18"}, {"ct_", "f_", "1.3400", "69.5983", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "cl_", "1.6770", "73.0488", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "br_", "1.8250", "67.2132", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "i_", "2.0110", "62.2317", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "si_", "1.7800", "66.8241", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "na_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n_", "1.3670", "55.4242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "np_", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=_1", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=_2", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=_3", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n+_", "1.3940", "52.7898", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "o_", "1.3250", "75.3375", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "op_", "1.3120", "68.5440", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "o'_", "1.3120", "61.6440", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "sp_", "1.7020", "47.7438", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s'_", "1.7020", "51.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "p_", "1.6820", "52.6350", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "h_", "1.0260", "88.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"na_", "f_", "1.3520", "50.2463", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "cl_", "1.6890", "56.6065", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "br_", "1.8370", "50.9585", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "i_", "2.0230", "46.0026", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "si_", "1.7920", "51.1059", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n_", "1.3400", "55.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "np_", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_1", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_2", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_3", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n+_", "1.3670", "52.6590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "o_", "1.2980", "75.3158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s_", "1.7050", "52.6552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "op_", "1.2850", "66.7770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "o'_", "1.2850", "59.8770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "sp_", "1.6750", "48.3711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s'_", "1.6750", "52.0711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "p_", "1.6550", "54.9881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "h_", "1.0260", "93.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"n_", "f_", "1.3250", "47.3464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "cl_", "1.6620", "56.8901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "br_", "1.8100", "51.5995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "i_", "1.9960", "46.6743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "si_", "1.7650", "54.2016", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "np_", "1.3400", "102.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_1", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_2", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_3", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "o'_", "1.2850", "73.0770", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "o-_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s'_", "1.6750", "65.2711", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "h_", "1.0260", "93.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"np_", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n=", "1.2100", "162.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "n=_3", "1.2100", "162.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_3", "1.2100", "162.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_2", "1.2760", "122.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_2", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_1", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_3", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o'_", "1.1600", "143.9680", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "o'_", "1.2850", "73.0770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "o'_", "1.2225", "108.5225", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "o'_", "1.1600", "143.9680", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o-_", "1.2225", "108.5225", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s'_", "1.5900", "122.3100", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s'_", "1.6750", "65.2711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s'_", "1.6325", "93.7906", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s'_", "1.5900", "122.3100", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=_1", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=_2", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=_3", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "n+_", "1.3940", "48.3901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "o_", "1.3250", "72.7505", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "s_", "1.7320", "50.0292", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "op_", "1.3120", "65.4265", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "o'_", "1.3120", "58.5265", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "sp_", "1.7020", "45.8238", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "s'_", "1.7020", "49.5238", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "p_", "1.6820", "52.2884", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "h_", "1.0650", "88.7167", "2.2800", "Ver. 2.0, Ref. 18"}, {"n+_", "f_", "1.3520", "44.5093", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "cl_", "1.6890", "54.4312", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "br_", "1.8370", "49.1485", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "i_", "2.0230", "44.3191", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "si_", "1.7920", "51.7353", "2.0000", "Ver. 2.0, Ref. 18"}, {"nz_", "nz_", "1.09758", "226.8", "2.6829", "Ver. 2.0, Ref. 18"}, {"nt_", "nt_", "1.09758", "226.8000", "2.6829", "Ver. 2.0, Ref. 18"}, {"o_", "o_", "1.20800", "118.86", "2.6484", "Ver. 2.0, Ref. 18"}, {"o_", "s_", "1.6930", "72.0212", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "op_", "1.2430", "87.6930", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "o'_", "1.2430", "80.7930", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "sp_", "1.6330", "67.9896", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "s'_", "1.6330", "71.6896", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "p_", "1.6100", "61.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "si_", "1.6650", "98.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "h_", "0.9600", "95.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"o_", "f_", "1.4180", "56.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "cl_", "1.6500", "76.7658", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "br_", "1.7980", "71.1997", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "i_", "1.9840", "66.2467", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "o'_", "1.1100", "121.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "op_", "1.2300", "68.1000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s_", "1.5900", "90.1047", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "sp_", "1.5600", "85.3184", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s'_", "1.5400", "105.3797", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "p_", "1.4800", "131.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "h_", "0.9830", "114.6152", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "f_", "1.2700", "51.0126", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "cl_", "1.6070", "62.9485", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "br_", "1.7550", "58.3239", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "i_", "1.9410", "53.3079", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "si_", "1.6500", "113.6866", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "op_", "1.2300", "75.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s_", "1.6800", "66.6937", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "sp_", "1.6500", "61.9610", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s'_", "1.6200", "65.7436", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "p_", "1.6300", "71.5226", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "h_", "0.9830", "121.5152", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "f_", "1.2700", "57.9126", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "cl_", "1.6070", "69.8485", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "br_", "1.7550", "65.2239", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "i_", "1.9410", "60.2079", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "si", "1.5870", "73.0600", "2.0000", "Ver. 2.0, Ref. 18"}, {"o-_", "p_", "1.4800", "107.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s_", "2.0547", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "sp_", "2.0400", "43.7815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s'_", "2.0400", "47.4815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "p_", "2.0200", "46.7198", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "h_", "1.3300", "87.5000", "1.7700", "Ver. 2.0, Ref. 18"}, {"s_", "f_", "1.6900", "51.2046", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "cl_", "2.0270", "53.0203", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "br_", "2.1750", "46.9709", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "i_", "2.3610", "41.9406", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "si_", "2.1300", "44.3232", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s'_", "1.9700", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "p_", "1.9700", "63.8131", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "h_", "1.3730", "79.2035", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "f_", "1.6600", "48.8255", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "cl_", "1.9970", "52.7842", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "br_", "2.1450", "46.9004", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "i_", "2.3310", "41.9068", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "si_", "2.0800", "61.8936", "2.0000", "Ver. 2.0, Ref. 18"}, {"s-_", "p_", "1.9800", "52.7450", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "sp_", "2.0100", "40.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s'_", "1.9900", "60.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "p_", "1.9900", "43.7949", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "h_", "1.3730", "75.5035", "1.7700", "Ver. 2.0, Ref. 18"}, {"sp_", "f_", "1.6600", "45.1255", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "cl_", "1.9970", "49.0842", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "br_", "2.1450", "43.2004", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "i_", "2.3310", "38.2068", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "si_", "2.1000", "41.8565", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "p_", "1.9700", "44.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "h_", "1.4300", "56.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "f_", "1.5400", "57.5916", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "cl_", "2.0430", "52.2057", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "br_", "2.1800", "45.7868", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "i_", "2.3110", "40.6770", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "si_", "1.9170", "42.0518", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "h_", "0.74611", "104.207", "1.9561", "Ver. 2.0, Ref. 18"}, {"h_", "f_", "1.0230", "130.1826", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "cl_", "1.3600", "86.4756", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "br_", "1.5080", "78.5432", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "i_", "1.6940", "73.0108", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "si_", "1.4630", "72.0792", "2.0000", "Ver. 2.0, Ref. 18"}, {"dw", "dw", "0.74164", "106.010", "1.9382", "Ver. 2.0, Ref. 18"}, {"f_", "f_", "1.4170", "37.5", "2.6284", "Ver. 2.0, Ref. 18"}, {"f_", "cl_", "1.6470", "51.7795", "2.0000", "Ver. 2.0, Ref. 18"}, {"f_", "br_", "1.7950", "48.3750", "2.0000", "Ver. 2.0, Ref. 18"}, {"f_", "i_", "1.9810", "43.5416", "2.0000", "Ver. 2.0, Ref. 18"}, {"f_", "si_", "1.5870", "74.3350", "2.0000", "Ver. 2.0, Ref. 18"}, {"cl_", "cl_", "1.988", "58.066", "2.0183", "Ver. 2.0, Ref. 18"}, {"cl_", "br_", "2.1320", "52.2969", "2.0000", "Ver. 2.0, Ref. 18"}, {"cl_", "i_", "2.3180", "47.3349", "2.0000", "Ver. 2.0, Ref. 18"}, {"cl_", "si_", "2.0870", "51.9937", "2.0000", "Ver. 2.0, Ref. 18"}, {"br_", "br_", "2.290", "46.336", "1.9469", "Ver. 2.0, Ref. 18"}, {"br_", "i_", "2.4660", "41.4039", "2.0000", "Ver. 2.0, Ref. 18"}, {"br_", "si_", "2.2350", "45.0580", "2.0000", "Ver. 2.0, Ref. 18"}, {"i_", "i_", "2.662", "36.46", "1.8383", "Ver. 2.0, Ref. 18"}, {"i_", "si_", "2.4210", "39.7416", "2.0000", "Ver. 2.0, Ref. 18"}, {"si_", "si_", "2.1900", "36.0000", "2.0000", "Ver. 2.0, Ref. 18"}}; /* Quadratic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= CVFF_aug info E = K2 * (Theta - Theta0)^2 With: - Theta = Angle - Theta0 = Equilibrium angle - K2 = Spring constant */ char * CVFF_aug_angles_auto[640][6]= {{"mg2+", "cl-", "mg2+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"mg2+", "oz", "sz", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"cl-", "mg2+", "cl-", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "mg2+", "cl-", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"sy", "oy", "sy", "144.0000", "00.0000", "Ver. 3.2, Ref. 24"}, {"py", "oy", "py", "144.0000", "00.0000", "Ver. 3.2, Ref. 34"}, {"vy", "oy", "vy", "144.0000", "00.0000", "Ver. 3.2, Ref. 34"}, {"ti4c", "oy", "ti4c", "144.0000", "00.0000", "Ver. 3.2, Ref. 35"}, {"ca2c", "oy", "ca2c", "144.0000", "00.0000", "Ver. 3.2, Ref. 35"}, {"nh4+", "oy", "nh4+", "144.0000", "00.0000", "Ver. 3.2, Ref. 36"}, {"so4y", "oy", "so4y", "144.0000", "00.0000", "Ver. 3.2, Ref. 36"}, {"cly-", "oy", "cly-", "144.0000", "00.0000", "Ver. 3.2, Ref. 36"}, {"sr2c", "oy", "sr2c", "144.0000", "00.0000", "Ver. 3.2, Ref. 35"}, {"ayt", "oy", "ayt", "144.0000", "00.0000", "Ver. 3.2, Ref. 34"}, {"ay", "oy", "ay", "144.0000", "00.0000", "Ver. 3.2, Ref. 24"}, {"sz", "oz", "sz", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"az", "oz", "az", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"pz", "oz", "pz", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"ga", "oz", "ga", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"ge", "oz", "ge", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"tioc", "oz", "tioc", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"titd", "oz", "titd", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"li+", "oz", "li+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"na+", "oz", "na+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"nac+", "oy", "nac+", "144.0000", "00.0000", "Ver. 3.2, Ref. 24"}, {"k+", "oz", "k+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"rb+", "oz", "rb+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"cs+", "oz", "cs+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"mg2+", "oz", "mg2+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"mg2c", "oy", "mg2c", "144.0000", "00.0000", "Ver. 3.3, Ref. 24"}, {"mn4c", "oy", "mn4c", "144.0000", "00.0000", "Ver. 3.2, Ref. 25"}, {"mn3c", "oy", "mn3c", "144.0000", "00.0000", "Ver. 3.3, Ref. 25"}, {"co2c", "oy", "co2c", "144.0000", "00.0000", "Ver. 3.3, Ref. 25"}, {"ni2c", "oy", "ni2c", "144.0000", "00.0000", "Ver. 3.3, Ref. 25"}, {"lic+", "oy", "lic+", "144.0000", "00.0000", "Ver. 3.3, Ref. 25"}, {"ca2+", "oz", "ca2+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"ba2+", "oz", "ba2+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"cu2+", "oz", "cu2+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"fe2c", "oy", "fe2c", "144.0000", "00.0000", "Ver. 3.2, Ref. 24"}, {"f-", "oz", "f-", "144.0000", "00.0000", "Ver. 3.1, Ref. 26"}, {"cl-", "oz", "cl-", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"br-", "oz", "br-", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"i-", "oz", "i-", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"so4", "oz", "so4", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"hocl", "oy", "hocl", "144.0000", "00.0000", "Ver. 3.2, Ref. 24"}, {"pd2+", "oy", "pd2+", "144.0000", "00.0000", "Ver. 3.2, Ref. 27"}, {"lioh", "o*", "lioh", "144.0000", "00.0000", "Ver. 3.4, Ref. 30"}, {"naoh", "o*", "naoh", "144.0000", "00.0000", "Ver. 3.4, Ref. 30"}, {"koh", "o*", "koh", "144.0000", "00.0000", "Ver. 3.4, Ref. 30"}, {"foh", "o*", "foh", "144.0000", "00.0000", "Ver. 3.4, Ref. 30"}, {"cloh", "o*", "cloh", "144.0000", "00.0000", "Ver. 3.4, Ref. 30"}, {"beoh", "o*", "beoh", "144.0000", "00.0000", "Ver. 3.4, Ref. 33"}, {"beoh", "o*", "h*", "144.0000", "00.0000", "Ver. 3.4, Ref. 33"}, {"cp", "cp", "c'", "120.0000", "34.6799", "Ver. 3.0, Ref. 22"}, {"cp", "c'", "o", "120.0000", "54.4949", "Ver. 3.0, Ref. 22"}, {"cp", "c'", "o'", "120.0000", "54.4949", "Ver. 3.0, Ref. 22"}, {"cp", "cp", "no", "120.0000", "34.6799", "Ver. 3.0, Ref. 22"}, {"cp", "no", "o-", "120.0000", "54.4949", "Ver. 3.0, Ref. 22"}, {"o-", "no", "o-", "120.0000", "113.5731", "Ver. 3.0, Ref. 22"}, {"c", "o", "c'", "109.5000", "60.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "h", "106.4000", "39.5000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o'", "120.0000", "68.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c'", "109.5000", "45.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c'", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "hn", "115.0000", "37.5000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c", "118.0000", "111.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n", "c", "122.0000", "35.0000", "Ver. 1.0, Ref. 1"}, {"n", "c", "c", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"n", "c", "h", "109.5000", "51.5000", "Ver. 1.0, Ref. 1"}, {"n", "c", "c'", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "114.1000", "53.5000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "120.0000", "68.0000", "Ver. 1.0, Ref. 1"}, {"c", "o", "ho", "106.0000", "58.5000", "Ver. 1.0, Ref. 1"}, {"o", "c", "h", "109.5000", "57.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "109.5000", "70.0000", "Ver. 1.0, Ref. 1"}, {"o", "c", "o", "109.5000", "70.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n", "hn", "125.0000", "33.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "o", "123.0000", "145.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o", "110.0000", "122.8000", "Ver. 1.0, Ref. 1"}, {"c'", "o", "ho", "112.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o", "110.0000", "55.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "120.0000", "55.0000", "Ver. 1.0, Ref. 1"}, {"o-", "c'", "o-", "123.0000", "145.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o-", "120.0000", "68.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o-", "120.0000", "55.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "c", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "120.0000", "45.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "cp", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "120.0000", "44.2000", "Ver. 1.0, Ref. 1"}, {"c", "c", "cp", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"cp", "o", "ho", "109.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"o", "cp", "cp", "120.0000", "60.0000", "Ver. 1.0, Ref. 1"}, {"c", "sh", "hs", "96.0000", "48.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "sh", "109.0000", "45.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "109.0000", "45.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "sh", "109.0000", "62.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "109.0000", "62.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "c", "99.0000", "58.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "109.5000", "75.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "n3", "109.5000", "57.3000", "Ver. 1.0, Ref. 1"}, {"hn", "n3", "hn", "105.5000", "36.0000", "Ver. 1.0, Ref. 1"}, {"c", "n3", "c", "112.0000", "86.3000", "Ver. 1.0, Ref. 1"}, {"c", "n3", "hn", "110.0000", "41.6000", "Ver. 1.0, Ref. 1"}, {"c", "c", "n3", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "np", "134.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "cp", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "hn", "120.0000", "27.5000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "c5", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "c5", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "c5", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "h", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "c5", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c5", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "c5", "c5", "120.0000", "44.2000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c5", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"np", "c5", "np", "134.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "c5", "np", "120.0000", "40.0000", "Ver. 1.0, Ref. 1"}, {"c5", "np", "c5", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"c5", "np", "hn", "120.0000", "27.5000", "Ver. 1.0, Ref. 1"}, {"c", "c5", "np", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"cp", "o", "c", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n", "cp", "115.0000", "37.5000", "Ver. 1.0, Ref. 1"}, {"n3", "c", "c'", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "cp", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c", "o", "c", "109.5000", "60.0000", "Ver. 1.0, Ref. 1"}, {"h*", "o*", "h*", "104.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "c", "120.0000", "72.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "p", "120.0000", "72.0000", "Ver. 1.0, Ref. 1"}, {"o", "p", "o", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o'", "p", "o", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o'", "p", "o'", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o-", "p", "o-", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o", "p", "o-", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"h", "p", "o-", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"c5", "np", "c", "128.8000", "70.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "o", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "h", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "c", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c'", "n", "114.1000", "53.5000", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "n", "114.1000", "53.5000", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "n", "114.1000", "53.5000", "Ver. 2.0, Ref. 19"}, {"c'", "c=", "c=", "122.3000", "36.2000", "Ver. 1.0, Ref. 1"}, {"c'", "c=1", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=2", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=1", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=2", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=1", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=2", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c=", "122.3000", "36.2000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=1", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=1", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "h", "120.0000", "37.5000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "h", "120.0000", "37.5000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "h", "120.0000", "37.5000", "Ver. 2.0, Ref. 19"}, {"c=", "c", "c=", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "c=", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=1", "c", "c=1", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=1", "c", "c=2", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "c=2", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c'", "c", "c=", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c'", "c", "c=1", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c'", "c", "c=2", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"h", "c", "c=", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "110.0000", "44.4000", "Ver. 2.0, Ref. 19"}, {"h", "c", "c=2", "110.0000", "44.4000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "h", "121.2000", "33.8000", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=1", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=1", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=1", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=2", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=2", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=2", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c=1", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=1", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=1", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c=2", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=2", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=2", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=", "np", "c=", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"c=1", "np", "c=", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=2", "np", "c=", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=1", "np", "c=1", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=1", "np", "c=2", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=2", "np", "c=2", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"o'", "c'", "c=", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "c=1", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"o'", "c'", "c=2", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c'", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c'", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c'", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"h", "c=", "np", "120.0000", "40.0000", "Ver. 1.0, Ref. 1"}, {"h", "c=1", "np", "120.0000", "40.0000", "Ver. 2.0, Ref. 19"}, {"h", "c=2", "np", "120.0000", "40.0000", "Ver. 2.0, Ref. 19"}, {"c", "np", "c=", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"c", "np", "c=1", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"c", "np", "c=2", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"cp", "np", "c5", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"c5", "cp", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"c5", "cp", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"f", "c", "c", "107.8000", "99.0000", "Ver. 1.0, Ref. 1"}, {"f", "c", "h", "107.1000", "62.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "c", "107.8000", "85.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "h", "107.1000", "67.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "c", "107.8000", "96.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "h", "107.1000", "56.0000", "Ver. 1.0, Ref. 1"}, {"f", "cp", "cp", "120.0000", "99.0000", "Ver. 1.0, Ref. 1"}, {"cl", "cp", "cp", "120.0000", "85.0000", "Ver. 1.0, Ref. 1"}, {"br", "cp", "cp", "120.0000", "96.0000", "Ver. 1.0, Ref. 1"}, {"si", "c", "h", "112.3000", "34.6000", "Ver. 1.0, Ref. 1"}, {"c", "si", "c", "113.5000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "si", "h", "109.1000", "32.7000", "Ver. 1.0, Ref. 1"}, {"h", "si", "h", "112.0000", "31.8000", "Ver. 1.0, Ref. 1"}, {"si", "c", "si", "122.5000", "42.2000", "Ver. 1.0, Ref. 1"}, {"c", "si", "o", "117.3000", "44.1000", "Ver. 1.0, Ref. 1"}, {"o", "si", "h", "113.4000", "33.3000", "Ver. 1.0, Ref. 1"}, {"si", "o", "si", "149.8000", "31.1000", "Ver. 1.0, Ref. 1"}, {"o", "si", "o", "113.1000", "42.3000", "Ver. 1.0, Ref. 1"}, {"si", "o", "c", "124.1000", "56.4000", "Ver. 1.0, Ref. 1"}, {"nt", "nt", "cp", "180.0", "50.0", "Ver. 1.3, Ref. 5"}, {"nt", "nt", "c", "180.0", "50.0", "Ver. 1.3, Ref. 5"}, {"cs", "c5", "c5", "112.7000", "70.0000", "Ver. 1.3, Ref. 6"}, {"cs", "c5", "h", "124.0000", "30.0000", "Ver. 1.3, Ref. 6"}, {"c5", "cs", "h", "124.0000", "30.0000", "Ver. 1.3, Ref. 6"}, {"cs", "sp", "cs", "92.5670", "126.5060", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "c5", "111.0390", "88.7595", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "h", "119.9000", "30.2723", "Ver. 1.3, Ref. 6"}, {"s'", "c'", "h", "121.6300", "40.9360", "Ver. 1.3, Ref. 7"}, {"h", "c'", "h", "117.0200", "26.3900", "Ver. 1.3, Ref. 7"}, {"c", "c'", "c", "120.0000", "40.0000", "Ver. 1.3, Ref. 7"}, {"s'", "c'", "c", "120.0000", "40.0000", "Ver. 1.3, Ref. 7"}, {"c5", "op", "c5", "120.0000", "75.0000", "Ver. 1.3, Ref. 8"}, {"oy", "sy", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 24"}, {"oy", "py", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 34"}, {"oy", "vy", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 34"}, {"oy", "ti4c", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 35"}, {"oy", "ca2c", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 35"}, {"oy", "nh4+", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 36"}, {"oy", "so4y", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 36"}, {"oy", "cly-", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 36"}, {"oy", "sr2c", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 35"}, {"oy", "ayt", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 34"}, {"oy", "ay", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 24"}, {"oz", "sz", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "az", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "pz", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "ga", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "ge", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "tioc", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "titd", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "li+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oy", "nac+", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 24"}, {"oz", "na+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "k+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "rb+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "cs+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oy", "mg2c", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 24"}, {"oy", "mn4c", "oy", "109.4700", "00.0000", "Ver. 3.3, Ref. 25"}, {"oy", "mn3c", "oy", "109.4700", "00.0000", "Ver. 3.3, Ref. 25"}, {"oy", "co2c", "oy", "109.4700", "00.0000", "Ver. 3.3, Ref. 25"}, {"oy", "ni2c", "oy", "109.4700", "00.0000", "Ver. 3.3, Ref. 25"}, {"oy", "lic+", "oy", "109.4700", "00.0000", "Ver. 3.3, Ref. 25"}, {"oz", "mg2+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "ca2+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "ba2+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "cu2+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oy", "fe2c", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 24"}, {"oz", "f-", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 26"}, {"oz", "cl-", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "br-", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "i-", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "so4", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oy", "hocl", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 24"}, {"oy", "pd2+", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 27"}, {"o*", "lioh", "o*", "109.4700", "00.0000", "Ver. 3.4, Ref. 30"}, {"o*", "naoh", "o*", "109.4700", "00.0000", "Ver. 3.4, Ref. 30"}, {"o*", "koh", "o*", "109.4700", "00.0000", "Ver. 3.4, Ref. 30"}, {"o*", "foh", "o*", "109.4700", "00.0000", "Ver. 3.4, Ref. 30"}, {"o*", "beoh", "o*", "109.4700", "00.0000", "Ver. 3.4, Ref. 33"}, {"o*", "cloh", "o*", "109.4700", "00.0000", "Ver. 3.4, Ref. 30"}, {"al", "oz", "al", "149.8000", "31.1000", "Ver. 2.1, Ref. 26"}, {"oz", "al", "oz", "113.1000", "42.3000", "Ver. 2.1, Ref. 26"}, {"oz", "al", "h", "113.4000", "33.3000", "Ver. 2.1, Ref. 26"}, {"h", "al", "h", "112.0000", "31.8000", "Ver. 2.1, Ref. 26"}, {"o", "al", "o", "113.1000", "42.3000", "Ver. 2.1, Ref. 26"}, {"o", "al", "h", "113.4000", "33.3000", "Ver. 2.1, Ref. 26"}, {"c3m_", "c3m_", "c3m_", "60.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c3m_", "c3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c3m_", "n3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "c_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "c3m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "c4m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o3e_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o3e_", "c3m_", "c3m_", "60.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c3m_", "c3m_", "60.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c3m_", "s3e_", "60.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c3m_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c3m_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c3m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c3m_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c3m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "c4m_", "95.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "n4m_", "88.3400", "50.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "o4e_", "91.8400", "70.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "s4e_", "94.5900", "62.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "o_", "121.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "n4m_", "88.4000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "s4e_", "89.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "c_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "c3m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "c4m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"beoh_", "o_", "h_", "109.5000", "0.0000", "Ver. 3.3, Ref. 33"}, {"o'_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o3e_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c4m_", "s4e_", "89.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c4m_", "s4e_", "91.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c4m_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c4m_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c4m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c4m_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c4m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "c3m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "c4m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "n3m_", "125.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "n4m_", "123.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "c3m_", "113.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n3m_", "c3m_", "60.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "n3m_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"h_", "n3m_", "c3m_", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"f_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"si_", "n3m_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"*", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n4m_", "*", "110.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n4m_", "c4m_", "91.3800", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "n4m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "n4m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "n4m_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"h_", "n4m_", "c4m_", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"f_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"si_", "n4m_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"*", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o3e_", "c3m_", "58.9580", "60.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o4e_", "c4m_", "91.7370", "60.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "o_", "*", "120.0000", "72.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "o_", "*", "120.0010", "72.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"*", "op_", "*", "108.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "op_", "*", "106.0000", "27.5000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "c3m_", "44.5000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o'_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s3e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s3e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "s3e_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "s3e_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "c4m_", "85.9200", "58.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o'_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s4e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s4e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "s4e_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "s4e_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"c4m_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"c3m_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"c4m_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "o_", "110.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "s_", "115.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "c_", "115.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 18"}, {"o_", "c'_", "*", "110.0000", "122.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c'_", "*", "123.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c'_", "*", "110.0000", "55.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c'_", "n_", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "o_", "123.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "h_", "120.0000", "55.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "n_", "123.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c'_", "h_", "117.0200", "26.3900", "Ver. 2.0, Ref. 18"}, {"f_", "c'_", "*", "120.0000", "99.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c'_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 18"}, {"c_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"o_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"s_", "cp_", "c_", "114.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"h_", "cp_", "*", "120.0000", "37.0000", "Ver. 2.0, Ref. 18"}, {"f_", "cp_", "*", "120.0000", "99.0000", "Ver. 2.0, Ref. 18"}, {"si_", "cp_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 18"}, {"n_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c=_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c=_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c=_", "*", "120.0000", "37.5000", "Ver. 2.0, Ref. 18"}, {"f_", "c=_", "*", "120.0000", "96.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c=_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c=_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "*", "180.0000", "200.0000", "Ver. 2.0, Ref. 18"}, {"c_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "na_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "na_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"f_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "na_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"si_", "na_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"*", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "n_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "n_", "*", "120.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"f_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"h_", "n_", "*", "122.0000", "35.0000", "Ver. 2.0, Ref. 18"}, {"si_", "n_", "*", "120.0000", "35.0000", "Ver. 2.0, Ref. 18"}, {"*", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"n_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"o_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"f_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "*", "120.0000", "27.5000", "Ver. 2.0, Ref. 18"}, {"si_", "np_", "*", "120.0000", "27.5000", "Ver. 2.0, Ref. 18"}, {"*", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"*", "nt_", "*", "180.0", "50.0", "Ver. 2.0, Ref. 18"}, {"c_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"n_", "o_", "*", "120.0000", "72.0000", "Ver. 2.0, Ref. 18"}, {"o_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"h_", "o_", "*", "109.0000", "58.5000", "Ver. 2.0, Ref. 18"}, {"h_", "o*_", "h_", "104.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"f_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"si_", "o_", "*", "124.1000", "56.4000", "Ver. 2.0, Ref. 18"}, {"si_", "o_", "si", "149.8000", "31.1000", "Ver. 2.0, Ref. 18"}, {"*", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s_", "*", "102.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o'_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "s_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "s_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "s_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "s_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"n_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"o_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"o'_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"s_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"s'_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"h_", "sp_", "*", "96.0000", "48.0000", "Ver. 2.0, Ref. 18"}, {"f_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"si_", "sp_", "*", "96.0000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "sp_", "*", "92.5670", "120.0000", "Ver. 2.0, Ref. 18"}, {"c_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"n_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"o_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "p_", "*", "120.0000", "110.0000", "Ver. 2.0, Ref. 18"}, {"s_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "p_", "*", "120.0000", "100.0000", "Ver. 2.0, Ref. 18"}, {"h_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"f_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"si_", "p_", "*", "109.5000", "30.0000", "Ver. 2.0, Ref. 18"}, {"*", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"c_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"n_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"o_", "si_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s_", "si_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"h_", "si_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "si_", "*", "117.3000", "44.1000", "Ver. 2.0, Ref. 18"}, {"si_", "si_", "*", "113.4000", "33.3000", "Ver. 2.0, Ref. 18"}, {"*", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= Kphi, 5= n, 6= Phi0, 7= CVFF_aug info E = Kphi * [ 1 + cos(n*Phi - Phi0) ] With: - Kphi = Rotation barrier - n = Periodicity / multiplicity - Phi0 = Equilibrium angle */ char * CVFF_aug_torsions_auto[342][8]= {{"*", "cl-", "mg2+", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "sy", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 24"}, {"*", "py", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 34"}, {"*", "vy", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 34"}, {"*", "ti4c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 35"}, {"*", "ca2c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 35"}, {"*", "nh4+", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 36"}, {"*", "so4y", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 36"}, {"*", "cly-", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 36"}, {"*", "sr2c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 35"}, {"*", "ayt", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 34"}, {"*", "ay", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 24"}, {"*", "sz", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "az", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "pz", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "ga", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "ge", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "tioc", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "titd", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "li+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "nac+", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 24"}, {"*", "na+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "k+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "rb+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "cs+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "mg2c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 24"}, {"*", "mn4c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.3, Ref. 25"}, {"*", "mn3c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.3, Ref. 25"}, {"*", "co2c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.3, Ref. 25"}, {"*", "ni2c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.3, Ref. 25"}, {"*", "lic+", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.3, Ref. 25"}, {"*", "mg2+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "ca2+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "ba2+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "cu2+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "fe2c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 24"}, {"*", "f-", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 26"}, {"*", "cl-", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "br-", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "i-", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "so4", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "hocl", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 24"}, {"*", "pd2+", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 27"}, {"*", "lioh", "o*", "*", "00.0000", "2", "000.0000", "Ver. 3.4, Ref. 30"}, {"*", "naoh", "o*", "*", "00.0000", "2", "000.0000", "Ver. 3.4, Ref. 30"}, {"*", "koh", "o*", "*", "00.0000", "2", "000.0000", "Ver. 3.4, Ref. 30"}, {"*", "foh", "o*", "*", "00.0000", "2", "000.0000", "Ver. 3.4, Ref. 30"}, {"*", "cloh", "o*", "*", "00.0000", "2", "000.0000", "Ver. 3.4, Ref. 30"}, {"*", "beoh", "o*", "*", "00.0000", "2", "000.0000", "Ver. 3.4, Ref. 33"}, {"*", "cp", "no", "*", "10.0000", "2", "180.0000", "Ver. 3.0, Ref. 22"}, {"*", "cp", "c'", "*", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "c", "*", "1.4225", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "c'", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "n", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "o", "*", "0.3900", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "of", "*", "0.3900", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "n2", "*", "6.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cr", "n2", "*", "13.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "n", "cr", "*", "13.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "o", "*", "4.5000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "cp", "*", "12.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "c", "*", "0.0000", "2", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "c", "cp", "0.6750", "4", "0.0000", "Ver. 1.9, Ref. 17"}, {"*", "ct", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "o", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "n", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "s", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "ct", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "c'", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "o", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "n", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "s", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "cp", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "cp", "o", "*", "1.5000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o", "c", "1.8000", "2", "180.0000", "Ver. 1.9, Ref. 16"}, {"*", "cp", "of", "*", "3.5000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "sh", "*", "0.4200", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "s", "*", "0.4200", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "s", "s", "*", "5.5000", "2", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "n3", "c", "*", "0.8000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "n2", "c", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "np", "*", "4.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "n2", "*", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "n", "*", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "p", "o", "*", "0.7500", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=", "np", "*", "4.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=1", "np", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "np", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=", "c=", "*", "16.3000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=1", "c=", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "c=", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=1", "c=1", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=1", "c=2", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "c=2", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=", "c", "*", "1.2660", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=1", "c", "*", "1.2660", "3", "0.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "c", "*", "1.2660", "3", "0.0000", "Ver. 2.0, Ref. 19"}, {"*", "np", "c", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "c=", "*", "1.8000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "c=1", "*", "1.8000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c'", "c=2", "*", "1.8000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "cs", "cp", "*", "6.0000", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"cs", "sp", "cs", "cp", "12.0000", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"cs", "sp", "cs", "h", "3.9316", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "cp", "cp", "6.4517", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "cp", "h", "2.0000", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"c", "c'", "n", "c", "3.2000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "hn", "1.2000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "c", "3.8000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "hn", "1.8000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "c", "3.2000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "c", "0.4000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "h", "0.2800", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "si", "c", "si", "-1.7000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "si", "c", "si", "1.0000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "o", "-0.1000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "si", "o", "si", "0.4000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "si", "o", "si", "1.0000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"si", "o", "si", "o", "0.3000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"o", "si", "o", "c", "0.1000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "si", "o", "c", "-0.1000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"si", "o", "c", "h", "0.7000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c_", "n3n_", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n3n_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "n3n_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "n3n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n3n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n3n_", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "n3n_", "*", "0.3000", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "n3n_", "*", "0.3000", "2", "0.", "Ver. 2.0, Ref. 18"}, {"*", "si_", "n3n_", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c_", "*", "0.1580", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c'_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "cp_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=_1", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=_2", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=_3", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "na_", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "np_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=_1", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=_2", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=_3", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "o_", "*", "0.1300", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "s_", "*", "0.1367", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "p_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "si_", "*", "0.1111", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c'_", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "cp_", "*", "2.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=_1", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=_2", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=_3", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n_", "*", "3.2000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n_", "h_", "1.2000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=_1", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=_2", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=_3", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "np_", "*", "5.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "np_", "h", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "o_", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "op", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "sp_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "si_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "cp_", "*", "3.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=_1", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=_2", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=_3", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "na_", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n_", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "np_", "*", "2.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "np_", "h_", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=_1", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=_2", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=_3", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "o_", "*", "1.8000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "o_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "op", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "si_", "*", "0.1667", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "p_", "*", "0.2500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "c=", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "c=_3", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "c=_3", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "c=_2", "*", "3.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "c=_1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "c=_2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "c=_3", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "n=", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n=_3", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n=_3", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n=_1", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n=_2", "*", "2.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n=_1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n=_2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n=_1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n=_3", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n=_2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c+_", "n_", "*", "3.4000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "np_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "o_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "s_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "si_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "na_", "*", "0.2500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "np_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=_1", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=_2", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=_3", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "o_", "*", "0.0975", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "s_", "*", "0.0975", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "si_", "*", "0.0667", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n_", "*", "0.3750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "np_", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "np_", "h_", "0.3750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=_1", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=_2", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=_3", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "o_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "s_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "si_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=_1", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=_2", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=_3", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "np_", "*", "11.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "o_", "*", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "op", "*", "11.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "s_", "*", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "sp_", "*", "10.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "si_", "*", "0.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=_1", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=_2", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=_3", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "np_", "*", "5.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "o_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "op", "*", "5.50000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "s_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "sp_", "*", "5.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "si_", "*", "0.1250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "n=", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "n=_3", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n=_3", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "n=_2", "*", "7.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n=_1", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n=_2", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "n=_3", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "o_", "*", "1.0000", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "s_", "*", "1.0000", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "si_", "*", "0.3333", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "p_", "*", "0.3750", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "s_", "*", "5.5000", "2", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "si_", "*", "0.2333", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "p_", "*", "0.3750", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "si_", "si_", "*", "0.1667", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "si_", "p_", "*", "0.0000", "3", "0.", "Ver. 2.0, Ref. 18"}}; /* Out of plane / impropers / improper 0, 1, 2, 3 = Keys, 4= K, 5= Chi0, 6= CVFF_aug info E = K * (Chi - Chi0)^2 */ char * CVFF_aug_impropers[41][8]= {{"c'", "cp", "cp", "cp", "10.0000", "2", "180.0000", "Ver. 3.0, Ref. 22"}, {"cp", "c'", "o'", "o'", "10.0000", "2", "180.0000", "Ver. 3.0, Ref. 22"}, {"cp", "no", "o'", "o'", "10.0000", "2", "180.0000", "Ver. 3.0, Ref. 22"}, {"cp", "cp", "cp", "no", "10.0000", "2", "180.0000", "Ver. 3.0, Ref. 22"}, {"c", "c'", "n", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c", "hn", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n2", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n2", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n2", "c'", "hn", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o'", "o'", "11.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "o'", "11.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c", "c", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "n", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "h", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "c", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "cp", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o'", "0.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "np", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "n2", "hn", "hn", "0.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n2", "n2", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"hn", "np", "cp", "cp", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "cp", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c'", "n2", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c'", "c=", "11.1000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c=", "np", "c=", "11.1000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c", "c=", "11.1000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "np", "cp", "cp", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"sp", "cs", "cp", "h", "2.9998", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"cp", "cp", "cs", "h", "0.3700", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"h", "c'", "s'", "h", "7.5300", "2", "180.0000", "Ver. 1.3, Ref. 7"}, {"c", "c'", "c", "s'", "7.5300", "2", "180.0000", "Ver. 1.3, Ref. 7"}, {"*", "c'_", "*", "*", "10.0000", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "*", "*", "0.3700", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "c=_", "*", "*", "11.1000", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "n_", "*", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "np_", "*", "*", "0.3700", "2", "180.0000", "Ver. 2.0, Ref. 18"}}; /* Non-bonded (12-6) 0= Key, 1= A, 2= B, 3= CVFF_aug info E = Aij/r^12 - Bij/r^6 where Aij = sqrt( Ai * Aj ) Bij = sqrt( Bi * Bj )0 */ char * CVFF_aug_vdw[86][4]= {{"h", "7108.4660", "32.87076", "Ver. 1.0, Ref. 1"}, {"cg", "1790340.7240", "528.48190", "Ver. 1.0, Ref. 1"}, {"o'", "272894.7846", "498.87880", "Ver. 1.0, Ref. 1"}, {"n", "2266872.4000", "1230.55700", "Ver. 1.0, Ref. 1"}, {"c'", "2968753.3590", "1325.70810", "Ver. 1.0, Ref. 1"}, {"c", "1981049.2250", "1125.99800", "Ver. 1.0, Ref. 1"}, {"hn", "0.00000001", "0.00000", "Ver. 1.0, Ref. 1"}, {"s", "365906.4000", "250.80000", "Ver. 1.0, Ref. 1"}, {"s'", "1395550.1000", "956.80800", "Ver. 1.3, Ref. 6"}, {"o*", "629358.0000", "625.50000", "Ver. 1.0, Ref. 1"}, {"h*", "0.00000001", "0.00000", "Ver. 1.0, Ref. 1"}, {"beoh", "0.00000001", "0.00000", "Ver. 3.4, Ref. 33"}, {"p", "6025894.0000", "2195.60000", "Ver. 1.0, Ref. 1"}, {"ca+", "119025.0000", "240.25000", "Ver. 2.0, Ref. 20"}, {"si", "3149175.0000", "710.00000", "Ver. 1.0, Ref. 1"}, {"f", "201106.0000", "235.20000", "Ver. 1.0, Ref. 1"}, {"cl", "1059166.0000", "541.00000", "Ver. 1.0, Ref. 1"}, {"br", "3572030.0000", "1195.00000", "Ver. 1.0, Ref. 1"}, {"Na", "14000.0000", "300.00000", "Ver. 1.0, Ref. 1"}, {"Cl", "25552052.0000", "3307.00450", "Ver. 1.0, Ref. 1"}, {"Br", "34375640.0000", "3517.84460", "Ver. 1.0, Ref. 1"}, {"ar", "2312930.0", "1484.0920", "Ver. 1.3, Ref. 9"}, {"nu", "0.00000001", "0.00000", "Ver. 1.0, Ref. 1"}, {"py", "305.7467", "0.00111", "Ver. 3.2, Ref. 34"}, {"vy", "5798.1994", "0.00000", "Ver. 3.2, Ref. 34"}, {"ayt", "183.7928", "20.42565", "Ver. 3.2, Ref. 34"}, {"ti4c", "33874.9079", "0.00025", "Ver. 3.2, Ref. 35"}, {"ca2c", "430342.8075", "1535.58846", "Ver. 3.2, Ref. 35"}, {"nh4+", "3832879.5370", "2377.46428", "Ver. 3.2, Ref. 36"}, {"cly-", "5328228.5280", "676.85728", "Ver. 3.2, Ref. 36"}, {"so4y", "0.2431", "44.55457", "Ver. 3.2, Ref. 36"}, {"sr2c", "1097544.2980", "0.00000", "Ver. 3.2, Ref. 35"}, {"sy", "368.5103", "0.00118", "Ver. 3.2, Ref. 24"}, {"sz", "103.8039", "0.00069", "Ver. 3.1, Ref. 23"}, {"oy", "989199.2750", "676.85728", "Ver. 3.2, Ref. 24"}, {"oz", "388611.3727", "0.18928", "Ver. 3.1, Ref. 23"}, {"ay", "2326.0964", "2.04660", "Ver. 3.2, Ref. 24"}, {"az", "278.3910", "1690.14959", "Ver. 3.1, Ref. 23"}, {"pz", "0.1326", "874.40119", "Ver. 3.1, Ref. 23"}, {"ga", "80.9632", "0.00000", "Ver. 3.1, Ref. 23"}, {"ge", "82.8131", "27.40220", "Ver. 3.1, Ref. 23"}, {"tioc", "6915.3989", "3262.49972", "Ver. 3.1, Ref. 23"}, {"titd", "1231.5903", "0.00000", "Ver. 3.1, Ref. 23"}, {"li+", "1252.1495", "0.03437", "Ver. 3.1, Ref. 23"}, {"nac+", "224513.0317", "2377.46428", "Ver. 3.2, Ref. 24"}, {"na+", "67423.6364", "0.00046", "Ver. 3.1, Ref. 23"}, {"k+", "12886.4561", "0.00009", "Ver. 3.1, Ref. 23"}, {"rb+", "4300534.1423", "6957.88573", "Ver. 3.1, Ref. 23"}, {"cs+", "7280468.2656", "1021.07213", "Ver. 3.1, Ref. 23"}, {"fe2c", "56757.5734", "2377.46428", "Ver. 3.2, Ref. 24"}, {"mg2c", "27194.3713", "2377.46428", "Ver. 3.2, Ref. 24"}, {"mn4c", "15940.6170", "6429.8290", "Ver. 3.3, Ref. 25"}, {"co2c", "29906.3803", "1995.4833", "Ver. 3.3, Ref. 25"}, {"mn3c", "2211.2096", "0.0138", "Ver. 3.3, Ref. 25"}, {"lic+", "1154.3029", "0.0000", "Ver. 3.3, Ref. 25"}, {"ni2c", "8579.4845", "0.0000", "Ver. 3.3, Ref. 25"}, {"mg2+", "12275.1109", "1383.78426", "Ver. 3.1, Ref. 23"}, {"ca2+", "300393.7486", "432.82651", "Ver. 3.1, Ref. 23"}, {"ba2+", "2641062.0890", "14.11481", "Ver. 3.1, Ref. 23"}, {"cu2+", "8568.2586", "0.00071", "Ver. 3.1, Ref. 23"}, {"f-", "98927.2590", "0.18928", "Ver. 3.1, Ref. 26"}, {"cl-", "536839.0775", "0.02976", "Ver. 3.1, Ref. 23"}, {"br-", "2.8937", "0.02976", "Ver. 3.1, Ref. 23"}, {"i-", "394.6286", "0.02976", "Ver. 3.1, Ref. 23"}, {"so4", "12.9538", "3277.36445", "Ver. 3.1, Ref. 23"}, {"hocl", "0.0046", "0.00000", "Ver. 3.2, Ref. 24"}, {"pd2+", "7748.8541", "0.00000", "Ver. 3.2, Ref. 27"}, {"lioh", "205.1053", "10.45753", "Ver. 3.4, Ref. 30"}, {"naoh", "12250.6790", "75.16294", "Ver. 3.4, Ref. 30"}, {"koh", "428660.3697", "435.04961", "Ver. 3.4, Ref. 30"}, {"foh", "397492.5026", "920.73615", "Ver. 3.4, Ref. 30"}, {"cloh", "52832487.3113", "13268.78826", "Ver. 3.4, Ref. 30"}, {"al", "3784321.4254", "11699.84934", "Ver. 2.1, Ref. 27"}, {"Au", "4603936.5046", "13692.05223", "Ver. 2.1, Ref. 27"}, {"Pb", "24856948.1942", "23280.48320", "Ver. 2.1, Ref. 27"}, {"Ni", "955901.6916", "6768.92014", "Ver. 2.1, Ref. 27"}, {"Pd", "2581174.9390", "10078.92459", "Ver. 2.1, Ref. 27"}, {"Pt", "4576819.9618", "16963.30818", "Ver. 2.1, Ref. 27"}, {"Ag", "3712095.6064", "10865.51833", "Ver. 2.1, Ref. 27"}, {"Cu", "1007210.0670", "6166.70278", "Ver. 2.1, Ref. 27"}, {"Cr", "1222517.4049", "7523.46700", "Ver. 2.1, Ref. 27"}, {"Fe", "1186612.1982", "7590.28296", "Ver. 2.1, Ref. 27"}, {"Li", "5192358.6600", "9916.81768", "Ver. 2.1, Ref. 27"}, {"Mo", "5869689.0344", "21298.66304", "Ver. 2.1, Ref. 27"}, {"W", "7876811.6340", "27853.23915", "Ver. 2.1, Ref. 27"}, {"al", "11422865.0000", "2282.96606", "Ver. 2.2, Ref. 29"}}; /* Bond increments To implement atomic charges */ char * CVFF_aug_bond_increments[717][5]= {{"no", "o-", "0.1684", "-0.1684", "Ver. 3.0, Ref. 22"}, {"no", "cp", "-0.1792", "0.1792", "Ver. 3.0, Ref. 22"}, {"c'", "cp", "-0.1792", "0.1792", "Ver. 2.0, Ref. 18"}, {"c", "cr", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "ci", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n1", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "s1", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c'", "o-", "0.0700", "-0.5700", "Ver. 1.0, Ref. 1"}, {"ci", "h", "-0.2300", "0.2300", "Ver. 1.0, Ref. 1"}, {"ci", "ci", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"ci", "ni", "0.3200", "-0.0700", "Ver. 1.0, Ref. 1"}, {"cr", "n", "0.3800", "-0.3800", "Ver. 1.0, Ref. 1"}, {"cr", "n1", "0.5000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n=", "0.4000", "-0.4000", "Ver. 1.0, Ref. 1"}, {"n", "hn", "-0.2800", "0.2800", "Ver. 1.0, Ref. 1"}, {"n", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n1", "hn", "0.0000", "0.5000", "Ver. 1.0, Ref. 1"}, {"n1", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n2", "hn", "-0.2800", "0.2800", "Ver. 1.0, Ref. 1"}, {"n2", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n3", "hn", "-0.1400", "0.1400", "Ver. 1.0, Ref. 1"}, {"n3", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n4", "hn", "-0.1100", "0.3600", "Ver. 1.0, Ref. 1"}, {"n4", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "hn", "-0.2800", "0.2800", "Ver. 1.0, Ref. 1"}, {"np", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"ni", "hn", "-0.3600", "0.3600", "Ver. 1.0, Ref. 1"}, {"ni", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o", "ho", "-0.2233", "0.2233", "Ver. 1.0, Ref. 1"}, {"o", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"oh", "ho", "-0.3500", "0.3500", "Ver. 1.0, Ref. 1"}, {"oh", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o*", "h*", "-0.4100", "0.4100", "Ver. 1.0, Ref. 1"}, {"o*", "beoh", "0.0000", "0.0000", "Ver. 3.4, Ref. 33"}, {"o*", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o-", "p", "-0.8500", "0.3500", "Ver. 1.0, Ref. 1"}, {"s-", "p", "-0.6824", "0.1824", "Ver. 2.0, Ref. 18"}, {"sh", "hs", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"sh", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"s1", "s1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "p", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"d", "d", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"p", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"f", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cl", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"br", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c5", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cs", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "c-", "0.0865", "-0.0865", "Ver. 2.0, Ref. 18"}, {"c", "ct", "0.0400", "-0.0400", "Ver. 1.2, Ref. 3"}, {"c", "n3", "0.2200", "-0.2200", "Ver. 1.0, Ref. 1"}, {"c", "n", "0.2200", "-0.2200", "Ver. 1.0, Ref. 1"}, {"c", "n2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n=", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "n=1", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "n=2", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "np", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "n4", "0.4200", "-0.1700", "Ver. 1.0, Ref. 1"}, {"c", "nt", "0.1000", "-0.1000", "Ver. 1.3, Ref. 5"}, {"c", "nz", "0.3640", "-0.3640", "Ver. 2.0, Ref. 18"}, {"c", "o", "0.1500", "-0.1500", "Ver. 1.0, Ref. 1"}, {"c", "oh", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"c", "oz", "0.1742", "-0.1742", "Ver. 2.0, Ref. 18"}, {"c", "op", "0.3957", "-0.3957", "Ver. 2.0, Ref. 18"}, {"c", "s", "-0.0500", "0.0500", "Ver. 1.0, Ref. 1"}, {"c", "sh", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c", "sp", "0.1180", "-0.1180", "Ver. 2.0, Ref. 18"}, {"c", "s'", "0.1180", "-0.1180", "Ver. 2.0, Ref. 18"}, {"c", "p", "-0.0785", "0.0785", "Ver. 2.0, Ref. 18"}, {"c", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c", "f", "0.2750", "-0.2750", "Ver. 1.0, Ref. 1"}, {"c", "cl", "0.2260", "-0.2260", "Ver. 1.0, Ref. 1"}, {"c", "br", "0.1920", "-0.1920", "Ver. 1.0, Ref. 1"}, {"c", "i", "0.1120", "-0.1120", "Ver. 2.0, Ref. 18"}, {"c", "si", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c'", "c5", "0.0", "0.0", "Ver. 1.5, Ref. 11"}, {"c'", "cs", "0.0", "0.0", "Ver. 1.5, Ref. 11"}, {"c'", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c=1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c=2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c-", "-0.1368", "0.1368", "Ver. 2.0, Ref. 18"}, {"c'", "ct", "-0.0927", "0.0927", "Ver. 2.0, Ref. 18"}, {"c'", "n3", "-0.0442", "0.0442", "Ver. 2.0, Ref. 18"}, {"c'", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n=", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "n=1", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "n=2", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "np", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "n4", "0.1331", "0.1169", "Ver. 2.0, Ref. 18"}, {"c'", "nz", "0.1641", "-0.1641", "Ver. 2.0, Ref. 18"}, {"c'", "o", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"c'", "oh", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"c'", "oz", "-0.0135", "0.0135", "Ver. 2.0, Ref. 18"}, {"c'", "op", "0.0300", "-0.0300", "Ver. 1.4, Ref. 10"}, {"c'", "o'", "0.3800", "-0.3800", "Ver. 1.0, Ref. 1"}, {"c'", "s", "-0.1528", "0.1528", "Ver. 2.0, Ref. 18"}, {"c'", "sh", "-0.2033", "0.2033", "Ver. 2.0, Ref. 18"}, {"c'", "sp", "-0.1079", "0.1079", "Ver. 2.0, Ref. 18"}, {"c'", "s'", "0.0", "0.0", "Ver. 1.3, Ref. 7"}, {"c'", "p", "-0.3283", "0.3283", "Ver. 2.0, Ref. 18"}, {"c'", "h", "-0.2132", "0.2132", "Ver. 1.0, Ref. 1"}, {"c'", "f", "0.1116", "-0.1116", "Ver. 2.0, Ref. 18"}, {"c'", "cl", "-0.0594", "0.0594", "Ver. 2.0, Ref. 18"}, {"c'", "br", "-0.1152", "0.1152", "Ver. 2.0, Ref. 18"}, {"c'", "i", "-0.1291", "0.1291", "Ver. 2.0, Ref. 18"}, {"c'", "si", "-0.4405", "0.4405", "Ver. 2.0, Ref. 18"}, {"cp", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cs", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"cp", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"cp", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"cp", "n", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"cp", "n2", "0.1050", "-0.1050", "Ver. 1.1, Ref. 2"}, {"cp", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cp", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cp", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cp", "np", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"cp", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"cp", "nz", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"cp", "o", "0.0282", "-0.0282", "Ver. 1.9, Ref. 16"}, {"cp", "oh", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"cp", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"cp", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cp", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cp", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"cp", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"cp", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"cp", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"cp", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"cp", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"cp", "f", "0.1300", "-0.1300", "Ver. 1.0, Ref. 1"}, {"cp", "cl", "0.1020", "-0.1020", "Ver. 1.0, Ref. 1"}, {"cp", "br", "0.0800", "-0.0800", "Ver. 1.0, Ref. 1"}, {"cp", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"cp", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c5", "c5", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c5", "cs", "0.0000", "0.0000", "Ver. 1.3, Ref. 6"}, {"c5", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c5", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c5", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c5", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c5", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c5", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c5", "n", "0.1100", "-0.1100", "Ver. 1.4, Ref. 10"}, {"c5", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "np", "0.1400", "-0.1400", "Ver. 1.0, Ref. 1"}, {"c5", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c5", "nz", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c5", "o", "0.1100", "-0.1100", "Ver. 1.2, Ref. 3"}, {"c5", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c5", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c5", "op", "0.1100", "-0.1100", "Ver. 1.3, Ref. 8"}, {"c5", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c5", "s", "-0.1500", "0.1500", "Ver. 1.2, Ref. 3"}, {"c5", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c5", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c5", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c5", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c5", "h", "-0.1300", "0.1300", "Ver. 1.0, Ref. 1"}, {"c5", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c5", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c5", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c5", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c5", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"cs", "cs", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"cs", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"cs", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"cs", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"cs", "nz", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"cs", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"cs", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"cs", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"cs", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cs", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cs", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"cs", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"cs", "sp", "-0.1500", "0.1500", "Ver. 1.3, Ref. 6"}, {"cs", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"cs", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"cs", "h", "-0.1300", "0.1300", "Ver. 1.3, Ref. 6"}, {"cs", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"cs", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"cs", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"cs", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"cs", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c=", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c=", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c=", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c=", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c=", "nz", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c=", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c=", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"c=", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c=", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c=", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c=", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c=", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c=", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c=", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c=", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c=1", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=1", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=1", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c=1", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c=1", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c=1", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=1", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=1", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=1", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=1", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=1", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=1", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c=1", "nz", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c=1", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=1", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c=1", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=1", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=1", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=1", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"c=1", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c=1", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=1", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=1", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c=1", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c=1", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c=1", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c=1", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c=1", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c=1", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c=2", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=2", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c=2", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c=2", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c=2", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=2", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=2", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=2", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=2", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=2", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=2", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c=2", "nz", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c=2", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=2", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c=2", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=2", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=2", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=2", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"c=2", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c=2", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=2", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=2", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c=2", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c=2", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c=2", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c=2", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c=2", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c=2", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c-", "c-", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c-", "ct", "0.0432", "-0.0432", "Ver. 2.0, Ref. 18"}, {"c-", "n3", "0.0824", "-0.0824", "Ver. 2.0, Ref. 18"}, {"c-", "n", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n2", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n=", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n=1", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n=2", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "np", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n4", "0.2597", "-0.0097", "Ver. 2.0, Ref. 18"}, {"c-", "nz", "0.2854", "-0.2854", "Ver. 2.0, Ref. 18"}, {"c-", "o", "0.1012", "-0.1012", "Ver. 2.0, Ref. 18"}, {"c-", "oh", "-0.0058", "0.0058", "Ver. 2.0, Ref. 18"}, {"c-", "oz", "0.1012", "-0.1012", "Ver. 2.0, Ref. 18"}, {"c-", "op", "0.3241", "-0.3241", "Ver. 2.0, Ref. 18"}, {"c-", "o'", "0.3241", "-0.3241", "Ver. 2.0, Ref. 18"}, {"c-", "s", "-0.0146", "0.0146", "Ver. 2.0, Ref. 18"}, {"c-", "sh", "-0.0650", "0.0650", "Ver. 2.0, Ref. 18"}, {"c-", "sp", "0.0304", "-0.0304", "Ver. 2.0, Ref. 18"}, {"c-", "s'", "0.0304", "-0.0304", "Ver. 2.0, Ref. 18"}, {"c-", "s-", "-0.1223", "-0.3777", "Ver. 2.0, Ref. 18"}, {"c-", "p", "-0.1744", "0.1744", "Ver. 2.0, Ref. 18"}, {"c-", "h", "-0.1549", "0.1549", "Ver. 2.0, Ref. 18"}, {"c-", "f", "0.2241", "-0.2241", "Ver. 2.0, Ref. 18"}, {"c-", "cl", "0.0747", "-0.0747", "Ver. 2.0, Ref. 18"}, {"c-", "br", "0.0281", "-0.0281", "Ver. 2.0, Ref. 18"}, {"c-", "i", "0.0185", "-0.0185", "Ver. 2.0, Ref. 18"}, {"c-", "si", "-0.2775", "0.2775", "Ver. 2.0, Ref. 18"}, {"ct", "ct", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"ct", "n3", "0.0419", "-0.0419", "Ver. 2.0, Ref. 18"}, {"ct", "n", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n2", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n=", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n=1", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n=2", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "np", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n4", "0.2181", "0.0319", "Ver. 2.0, Ref. 18"}, {"ct", "nz", "0.2454", "-0.2454", "Ver. 2.0, Ref. 18"}, {"ct", "o", "0.0644", "-0.0644", "Ver. 2.0, Ref. 18"}, {"ct", "oh", "-0.0420", "0.0420", "Ver. 2.0, Ref. 18"}, {"ct", "oz", "0.0644", "-0.0644", "Ver. 2.0, Ref. 18"}, {"ct", "op", "0.2874", "-0.2874", "Ver. 2.0, Ref. 18"}, {"ct", "o'", "0.2874", "-0.2874", "Ver. 2.0, Ref. 18"}, {"ct", "s", "-0.0581", "0.0581", "Ver. 2.0, Ref. 18"}, {"ct", "sh", "-0.1082", "0.1082", "Ver. 2.0, Ref. 18"}, {"ct", "sp", "-0.0135", "0.0135", "Ver. 2.0, Ref. 18"}, {"ct", "s'", "-0.0135", "0.0135", "Ver. 2.0, Ref. 18"}, {"ct", "p", "-0.2216", "0.2216", "Ver. 2.0, Ref. 18"}, {"ct", "h", "-0.2000", "0.2000", "Ver. 1.2, Ref. 3"}, {"ct", "f", "0.1873", "-0.1873", "Ver. 2.0, Ref. 18"}, {"ct", "cl", "0.0319", "-0.0319", "Ver. 2.0, Ref. 18"}, {"ct", "br", "-0.0173", "0.0173", "Ver. 2.0, Ref. 18"}, {"ct", "i", "-0.0281", "0.0281", "Ver. 2.0, Ref. 18"}, {"ct", "si", "-0.3266", "0.3266", "Ver. 2.0, Ref. 18"}, {"n3", "n3", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n3", "n", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n2", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n=", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n=1", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n=2", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "np", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n4", "0.1650", "0.0850", "Ver. 2.0, Ref. 18"}, {"n3", "nz", "0.1927", "-0.1927", "Ver. 2.0, Ref. 18"}, {"n3", "o", "0.0249", "-0.0249", "Ver. 2.0, Ref. 18"}, {"n3", "oh", "-0.0754", "0.0754", "Ver. 2.0, Ref. 18"}, {"n3", "oz", "0.0249", "-0.0249", "Ver. 2.0, Ref. 18"}, {"n3", "op", "0.2369", "-0.2369", "Ver. 2.0, Ref. 18"}, {"n3", "o'", "0.2369", "-0.2369", "Ver. 2.0, Ref. 18"}, {"n3", "s", "-0.0967", "0.0967", "Ver. 2.0, Ref. 18"}, {"n3", "sh", "-0.1434", "0.1434", "Ver. 2.0, Ref. 18"}, {"n3", "sp", "-0.0551", "0.0551", "Ver. 2.0, Ref. 18"}, {"n3", "s'", "-0.0551", "0.0551", "Ver. 2.0, Ref. 18"}, {"n3", "p", "-0.2518", "0.2518", "Ver. 2.0, Ref. 18"}, {"n3", "h", "-0.2386", "0.2386", "Ver. 2.0, Ref. 18"}, {"n3", "f", "0.1415", "-0.1415", "Ver. 2.0, Ref. 18"}, {"n3", "cl", "-0.0117", "0.0117", "Ver. 2.0, Ref. 18"}, {"n3", "br", "-0.0601", "0.0601", "Ver. 2.0, Ref. 18"}, {"n3", "i", "-0.0714", "0.0714", "Ver. 2.0, Ref. 18"}, {"n3", "si", "-0.3501", "0.3501", "Ver. 2.0, Ref. 18"}, {"n", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n", "nz", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n2", "n2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n2", "nz", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n2", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n2", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n2", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n2", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n2", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n2", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n2", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n2", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n2", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n2", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n2", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n2", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n2", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n2", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n2", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n2", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n=", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n=", "nz", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n=", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n=", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=", "o-", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n=", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n=", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n=", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n=", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n=", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n=", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n=", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n=", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n=1", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=1", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=1", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=1", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n=1", "nz", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n=1", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=1", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n=1", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=1", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=1", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=1", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n=1", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n=1", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=1", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=1", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n=1", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n=1", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n=1", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n=1", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n=1", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n=1", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n=2", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=2", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=2", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n=2", "nz", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n=2", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=2", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n=2", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=2", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=2", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=2", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n=2", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n=2", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=2", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=2", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n=2", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n=2", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n=2", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n=2", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n=2", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n=2", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"np", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"np", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"np", "nz", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"np", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"np", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"np", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"np", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"np", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"np", "o-", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"np", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"np", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"np", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"np", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"np", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"np", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"np", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"np", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"np", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"np", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"np", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n4", "n4", "0.2500", "0.2500", "Ver. 2.0, Ref. 18"}, {"n4", "nz", "0.2842", "-0.0342", "Ver. 2.0, Ref. 18"}, {"n4", "o", "0.1245", "0.1255", "Ver. 2.0, Ref. 18"}, {"n4", "oh", "0.0242", "0.2258", "Ver. 2.0, Ref. 18"}, {"n4", "oz", "0.1245", "0.1255", "Ver. 2.0, Ref. 18"}, {"n4", "op", "0.3418", "-0.0918", "Ver. 2.0, Ref. 18"}, {"n4", "o'", "0.3418", "-0.0918", "Ver. 2.0, Ref. 18"}, {"n4", "s", "-0.0257", "0.2757", "Ver. 2.0, Ref. 18"}, {"n4", "sh", "-0.0723", "0.3223", "Ver. 2.0, Ref. 18"}, {"n4", "sp", "0.0159", "0.2341", "Ver. 2.0, Ref. 18"}, {"n4", "s'", "0.0159", "0.2341", "Ver. 2.0, Ref. 18"}, {"n4", "p", "-0.1994", "0.4494", "Ver. 2.0, Ref. 18"}, {"n4", "h", "-0.1978", "0.4478", "Ver. 2.0, Ref. 18"}, {"n4", "f", "0.2438", "0.0062", "Ver. 2.0, Ref. 18"}, {"n4", "cl", "0.0642", "0.1858", "Ver. 2.0, Ref. 18"}, {"n4", "br", "0.0048", "0.2452", "Ver. 2.0, Ref. 18"}, {"n4", "i", "-0.0114", "0.2614", "Ver. 2.0, Ref. 18"}, {"n4", "si", "-0.3083", "0.5583", "Ver. 2.0, Ref. 18"}, {"nz", "nz", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"nz", "o", "-0.1523", "0.1523", "Ver. 2.0, Ref. 18"}, {"nz", "oh", "-0.2490", "0.2490", "Ver. 2.0, Ref. 18"}, {"nz", "oz", "-0.1523", "0.1523", "Ver. 2.0, Ref. 18"}, {"nz", "op", "0.0585", "-0.0585", "Ver. 2.0, Ref. 18"}, {"nz", "o'", "0.0585", "-0.0585", "Ver. 2.0, Ref. 18"}, {"nz", "s", "-0.3010", "0.3010", "Ver. 2.0, Ref. 18"}, {"nz", "sh", "-0.3457", "0.3457", "Ver. 2.0, Ref. 18"}, {"nz", "sp", "-0.2612", "0.2612", "Ver. 2.0, Ref. 18"}, {"nz", "s'", "-0.2612", "0.2612", "Ver. 2.0, Ref. 18"}, {"nz", "p", "-0.4691", "0.4691", "Ver. 2.0, Ref. 18"}, {"nz", "h", "-0.4688", "0.4688", "Ver. 2.0, Ref. 18"}, {"nz", "f", "-0.0367", "0.0367", "Ver. 2.0, Ref. 18"}, {"nz", "cl", "-0.2141", "0.2141", "Ver. 2.0, Ref. 18"}, {"nz", "br", "-0.2727", "0.2727", "Ver. 2.0, Ref. 18"}, {"nz", "i", "-0.2889", "0.2889", "Ver. 2.0, Ref. 18"}, {"nz", "si", "-0.5738", "0.5738", "Ver. 2.0, Ref. 18"}, {"o", "o", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"o", "oh", "-0.0921", "0.0921", "Ver. 2.0, Ref. 18"}, {"o", "oz", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"o", "op", "0.1962", "-0.1962", "Ver. 2.0, Ref. 18"}, {"o", "s", "-0.1143", "0.1143", "Ver. 2.0, Ref. 18"}, {"o", "sh", "-0.1565", "0.1565", "Ver. 2.0, Ref. 18"}, {"o", "sp", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"o", "s'", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"o", "p", "-0.3500", "0.3500", "Ver. 1.0, Ref. 1"}, {"o", "h", "-0.2432", "0.2432", "Ver. 2.0, Ref. 18"}, {"o", "f", "0.1077", "-0.1077", "Ver. 2.0, Ref. 18"}, {"o", "cl", "-0.0367", "0.0367", "Ver. 2.0, Ref. 18"}, {"o", "br", "-0.0818", "0.0818", "Ver. 2.0, Ref. 18"}, {"o", "i", "-0.0924", "0.0924", "Ver. 2.0, Ref. 18"}, {"o", "si", "-0.1500", "0.1500", "Ver. 1.0, Ref. 1"}, {"oh", "oh", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"oh", "oz", "0.0921", "-0.0921", "Ver. 2.0, Ref. 18"}, {"oh", "op", "0.2853", "-0.2853", "Ver. 2.0, Ref. 18"}, {"oh", "s", "-0.0063", "0.0063", "Ver. 2.0, Ref. 18"}, {"oh", "sh", "-0.0485", "0.0485", "Ver. 2.0, Ref. 18"}, {"oh", "sp", "0.0313", "-0.0313", "Ver. 2.0, Ref. 18"}, {"oh", "s'", "0.0313", "-0.0313", "Ver. 2.0, Ref. 18"}, {"oh", "p", "-0.1500", "0.1500", "Ver. 1.0, Ref. 1"}, {"oh", "h", "-0.1190", "0.1190", "Ver. 2.0, Ref. 18"}, {"oh", "f", "0.1983", "-0.1983", "Ver. 2.0, Ref. 18"}, {"oh", "cl", "0.0686", "-0.0686", "Ver. 2.0, Ref. 18"}, {"oh", "br", "0.0295", "-0.0295", "Ver. 2.0, Ref. 18"}, {"oh", "i", "0.0216", "-0.0216", "Ver. 2.0, Ref. 18"}, {"oh", "si", "-0.2188", "0.2188", "Ver. 2.0, Ref. 18"}, {"oz", "oz", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"oz", "op", "0.1962", "-0.1962", "Ver. 2.0, Ref. 18"}, {"oz", "s", "-0.1143", "0.1143", "Ver. 2.0, Ref. 18"}, {"oz", "sh", "-0.1565", "0.1565", "Ver. 2.0, Ref. 18"}, {"oz", "sp", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"oz", "s'", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"oz", "p", "-0.2548", "0.2548", "Ver. 2.0, Ref. 18"}, {"oz", "h", "-0.2432", "0.2432", "Ver. 2.0, Ref. 18"}, {"oz", "f", "0.1077", "-0.1077", "Ver. 2.0, Ref. 18"}, {"oz", "cl", "-0.0367", "0.0367", "Ver. 2.0, Ref. 18"}, {"oz", "br", "-0.0818", "0.0818", "Ver. 2.0, Ref. 18"}, {"oz", "i", "-0.0924", "0.0924", "Ver. 2.0, Ref. 18"}, {"oz", "si", "-0.3425", "0.3425", "Ver. 2.0, Ref. 18"}, {"op", "op", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"op", "s", "-0.3386", "0.3386", "Ver. 2.0, Ref. 18"}, {"op", "sh", "-0.3791", "0.3791", "Ver. 2.0, Ref. 18"}, {"op", "sp", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"op", "s'", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"op", "p", "-0.4933", "0.4933", "Ver. 2.0, Ref. 18"}, {"op", "h", "-0.4943", "0.4943", "Ver. 2.0, Ref. 18"}, {"op", "f", "-0.0888", "0.0888", "Ver. 2.0, Ref. 18"}, {"op", "cl", "-0.2585", "0.2585", "Ver. 2.0, Ref. 18"}, {"op", "br", "-0.3140", "0.3140", "Ver. 2.0, Ref. 18"}, {"op", "i", "-0.3297", "0.3297", "Ver. 2.0, Ref. 18"}, {"op", "si", "-0.5883", "0.5883", "Ver. 2.0, Ref. 18"}, {"o'", "o'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"o'", "s", "-0.3386", "0.3386", "Ver. 2.0, Ref. 18"}, {"o'", "sh", "-0.3791", "0.3791", "Ver. 2.0, Ref. 18"}, {"o'", "sp", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"o'", "s'", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"o'", "p", "-0.8500", "0.3500", "Ver. 1.0, Ref. 1"}, {"o'", "h", "-0.4943", "0.4943", "Ver. 2.0, Ref. 18"}, {"o'", "f", "-0.0888", "0.0888", "Ver. 2.0, Ref. 18"}, {"o'", "cl", "-0.2585", "0.2585", "Ver. 2.0, Ref. 18"}, {"o'", "br", "-0.3140", "0.3140", "Ver. 2.0, Ref. 18"}, {"o'", "i", "-0.3297", "0.3297", "Ver. 2.0, Ref. 18"}, {"o'", "si", "-0.5883", "0.5883", "Ver. 2.0, Ref. 18"}, {"s", "s", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"s", "sh", "-0.0509", "0.0509", "Ver. 2.0, Ref. 18"}, {"s", "sp", "0.0455", "-0.0455", "Ver. 2.0, Ref. 18"}, {"s", "s'", "0.0455", "-0.0455", "Ver. 2.0, Ref. 18"}, {"s", "p", "-0.1600", "0.1600", "Ver. 2.0, Ref. 18"}, {"s", "h", "-0.1392", "0.1392", "Ver. 2.0, Ref. 18"}, {"s", "f", "0.2380", "-0.2380", "Ver. 2.0, Ref. 18"}, {"s", "cl", "0.0898", "-0.0898", "Ver. 2.0, Ref. 18"}, {"s", "br", "0.0437", "-0.0437", "Ver. 2.0, Ref. 18"}, {"s", "i", "0.0345", "-0.0345", "Ver. 2.0, Ref. 18"}, {"s", "si", "-0.2634", "0.2634", "Ver. 2.0, Ref. 18"}, {"sh", "sh", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"sh", "sp", "0.0964", "-0.0964", "Ver. 2.0, Ref. 18"}, {"sh", "s'", "0.0964", "-0.0964", "Ver. 2.0, Ref. 18"}, {"sh", "p", "-0.1032", "0.1032", "Ver. 2.0, Ref. 18"}, {"sh", "h", "-0.0787", "0.0787", "Ver. 2.0, Ref. 18"}, {"sh", "f", "0.2794", "-0.2794", "Ver. 2.0, Ref. 18"}, {"sh", "cl", "0.1392", "-0.1392", "Ver. 2.0, Ref. 18"}, {"sh", "br", "0.0966", "-0.0966", "Ver. 2.0, Ref. 18"}, {"sh", "i", "0.0889", "-0.0889", "Ver. 2.0, Ref. 18"}, {"sh", "si", "-0.2032", "0.2032", "Ver. 2.0, Ref. 18"}, {"sp", "sp", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"sp", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"sp", "p", "-0.2106", "0.2106", "Ver. 2.0, Ref. 18"}, {"sp", "h", "-0.1932", "0.1932", "Ver. 2.0, Ref. 18"}, {"sp", "f", "0.2011", "-0.2011", "Ver. 2.0, Ref. 18"}, {"sp", "cl", "0.0457", "-0.0457", "Ver. 2.0, Ref. 18"}, {"sp", "br", "-0.0034", "0.0034", "Ver. 2.0, Ref. 18"}, {"sp", "i", "-0.0140", "0.0140", "Ver. 2.0, Ref. 18"}, {"sp", "si", "-0.3172", "0.3172", "Ver. 2.0, Ref. 18"}, {"s'", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"s'", "p", "-0.2106", "0.2106", "Ver. 2.0, Ref. 18"}, {"s'", "h", "-0.1932", "0.1932", "Ver. 2.0, Ref. 18"}, {"s'", "f", "0.2011", "-0.2011", "Ver. 2.0, Ref. 18"}, {"s'", "cl", "0.0457", "-0.0457", "Ver. 2.0, Ref. 18"}, {"s'", "br", "-0.0034", "0.0034", "Ver. 2.0, Ref. 18"}, {"s'", "i", "-0.0140", "0.0140", "Ver. 2.0, Ref. 18"}, {"s'", "si", "-0.3172", "0.3172", "Ver. 2.0, Ref. 18"}, {"p", "p", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"p", "h", "0.0356", "-0.0356", "Ver. 2.0, Ref. 18"}, {"p", "f", "0.3869", "-0.3869", "Ver. 2.0, Ref. 18"}, {"p", "cl", "0.2544", "-0.2544", "Ver. 2.0, Ref. 18"}, {"p", "br", "0.2156", "-0.2156", "Ver. 2.0, Ref. 18"}, {"p", "i", "0.2110", "-0.2110", "Ver. 2.0, Ref. 18"}, {"p", "si", "-0.1069", "0.1069", "Ver. 2.0, Ref. 18"}, {"h", "h", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"h", "f", "0.3823", "-0.3823", "Ver. 2.0, Ref. 18"}, {"h", "cl", "0.2404", "-0.2404", "Ver. 2.0, Ref. 18"}, {"h", "br", "0.1978", "-0.1978", "Ver. 2.0, Ref. 18"}, {"h", "i", "0.1923", "-0.1923", "Ver. 2.0, Ref. 18"}, {"h", "si", "0.0200", "-0.0200", "Ver. 1.0, Ref. 1"}, {"f", "f", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"f", "cl", "-0.1589", "0.1589", "Ver. 2.0, Ref. 18"}, {"f", "br", "-0.2099", "0.2099", "Ver. 2.0, Ref. 18"}, {"f", "i", "-0.2234", "0.2234", "Ver. 2.0, Ref. 18"}, {"f", "si", "-0.4789", "0.4789", "Ver. 2.0, Ref. 18"}, {"cl", "cl", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"cl", "br", "-0.0507", "0.0507", "Ver. 2.0, Ref. 18"}, {"cl", "i", "-0.0623", "0.0623", "Ver. 2.0, Ref. 18"}, {"cl", "si", "-0.3598", "0.3598", "Ver. 2.0, Ref. 18"}, {"br", "br", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"br", "i", "-0.0110", "0.0110", "Ver. 2.0, Ref. 18"}, {"br", "si", "-0.3272", "0.3272", "Ver. 2.0, Ref. 18"}, {"i", "i", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"i", "si", "-0.3263", "0.3263", "Ver. 2.0, Ref. 18"}, {"si", "si", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"oy", "py", "-1.0000", "1.0000", "Ver. 3.2, Ref. 34"}, {"oy", "vy", "-1.0000", "1.0000", "Ver. 3.2, Ref. 34"}, {"oy", "ti4c", "-1.0000", "1.0000", "Ver. 3.2, Ref. 35"}, {"oy", "ca2c", "-1.0000", "1.0000", "Ver. 3.2, Ref. 35"}, {"oy", "cly-", "-1.0000", "1.0000", "Ver. 3.2, Ref. 36"}, {"oy", "so4y", "-1.0000", "1.0000", "Ver. 3.2, Ref. 36"}, {"oy", "nh4+", "-1.0000", "1.0000", "Ver. 3.2, Ref. 36"}, {"oy", "sr2c", "-1.0000", "1.0000", "Ver. 3.2, Ref. 35"}, {"oy", "ayt", "-1.0000", "1.0000", "Ver. 3.2, Ref. 34"}, {"oy", "sy", "-1.0000", "1.0000", "Ver. 3.2, Ref. 24"}, {"oz", "sz", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oy", "ay", "-1.0000", "1.0000", "Ver. 3.2, Ref. 24"}, {"oz", "az", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "pz", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "ga", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "ge", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "tioc", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "titd", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "li+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oy", "nac+", "-1.0000", "1.0000", "Ver. 3.2, Ref. 24"}, {"oz", "na+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "k+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "rb+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "cs+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oy", "mg2c", "-1.0000", "1.0000", "Ver. 3.2, Ref. 24"}, {"oy", "mn4c", "-1.0000", "1.0000", "Ver. 3.3, Ref. 25"}, {"oy", "mn3c", "-1.0000", "1.0000", "Ver. 3.3, Ref. 25"}, {"oy", "co2c", "-1.0000", "1.0000", "Ver. 3.3, Ref. 25"}, {"oy", "ni2c", "-1.0000", "1.0000", "Ver. 3.3, Ref. 25"}, {"oy", "lic+", "-1.0000", "1.0000", "Ver. 3.3, Ref. 25"}, {"oz", "mg2+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "ca2+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "ba2+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "cu2+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oy", "fe2c", "-1.0000", "1.0000", "Ver. 3.2, Ref. 24"}, {"oz", "f-", "-0.6000", "0.6000", "Ver. 3.1, Ref. 26"}, {"oz", "cl-", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "br-", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "i-", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "so4", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oy", "hocl", "-1.0000", "1.0000", "Ver. 3.2, Ref. 24"}, {"oy", "pd2+", "-1.0000", "1.0000", "Ver. 3.2, Ref. 27"}}; atomes_1.3.1/src/calc/force_fields/cvff.c0000664000175000017500000126116215212624223017723 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cvff.c * @short CVFF force field, from 'CVFF.frc' * @author Sébastien Le Roux */ /* * This file: 'cvff.c' * * Contains: * CVFF force field, data from taken from: - the 'CVFF.frc' file This file contains several tables: Atoms : CVFF_atoms[133][5] Equivalence : CVFF_equivalence_auto[123][11] Equivalence : CVFF_equivalence[129][7] Quadractic bonds : CVFF_bonds_auto[776][5] Morse bonds : CVFF_morse_bonds[775][6] Quadratic angles : CVFF_angles_auto[563][6] Torsions : CVFF_torsions_auto[295][8] Impropers : CVFF_impropers[41][8] Non bonded : CVFF_vdw[45][4] Bond increments : CVFF_bond_increments[683][5] */ #include "global.h" int CVFF_objects[14] = {133, 123, 129, 776, 0, 775, 563, 0, 295, 0, 0, 41, 45, 683}; int CVFF_dim[14] = {5, 11, 7, 5, 0, 6, 6, 0, 8, 0, 0, 8, 4, 5}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= CVFF info */ char * CVFF_atoms[133][5]= {{"H", "1.007970", "h", "Hydrogen bonded to C. Masses from CRC 1973/74 pages B-250.", "Ver. 1.0, Ref. 1"}, {"D", "2.014000", "d", "General Deuterium Atom", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hn", "Hydrogen bonded to N", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "ho", "Hydrogen bonded to O", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hp", "Hydrogen bonded to P", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hs", "Hydrogen bonded to S", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "h*", "Hydrogen in water molecule", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hspc", "Hydrogen in SPC water molecule", "Ver. 2.3, Ref. 25"}, {"H", "1.007970", "htip", "Hydrogen in TIP water molecule", "Ver. 2.3, Ref. 25"}, {"H", "1.007970", "h$", "Hydrogen atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"L", "0.001097", "lp", "Lone Pair (massless)", "Ver. 1.0, Ref. 1"}, {"L", "1.000000", "lp", "Lone Pair", "Ver. 1.1, Ref. 2"}, {"H", "1.007970", "h+", "Charged hydrogen in cations", "Ver. 2.0, Ref. 18"}, {"H", "1.007970", "hc", "Hydrogen bonded to carbon", "Ver. 2.0, Ref. 18"}, {"H", "1.007970", "hi", "Hydrogen in charged imidazole ring", "Ver. 2.0, Ref. 18"}, {"H", "1.007970", "hw", "Hydrogen in water molecule", "Ver. 2.0, Ref. 18"}, {"D", "2.014000", "dw", "Deuterium in heavy water", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c", "Sp3 aliphatic carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cg", "Sp3 alpha carbon in glycine", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c'", "Sp2 carbon in carbonyl (C=O) group", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c*", "Carbon in carbonyl group, non_amides", "Ver. 2.0, Ref. 21"}, {"C", "12.011150", "c\"", "Carbon in carbonyl group, non_amides", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "cp", "Sp2 aromatic carbon (partial double bonds)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cr", "Carbon in guanidinium group (HN=C(NH2)2)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c+", "C in guanidinium group", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c-", "Carbon in charged carboxylate (COO-) group", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "ca", "General amino acid alpha carbon (sp3)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c3", "Sp3 carbon in methyl (CH3) group", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cn", "Sp3 Carbon bonded to N", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c2", "Sp3 carbon bonded to 2 H's, 2 heavy atoms", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c1", "Sp3 carbon bonded to 1 H, 3 Heavy atoms", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c5", "Sp2 aromatic carbon in five membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cs", "Sp2 carbon involved in thiophene", "Ver. 1.3, Ref. 6"}, {"C", "12.011150", "c=", "Non-aromatic end doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c=1", "Non-aromatic, next to end doubly bonded carbon", "Ver. 2.0, Ref. 19"}, {"C", "12.011150", "c=2", "Non-aromatic doubly bonded carbon", "Ver. 2.0, Ref. 19"}, {"C", "12.011150", "ct", "Sp carbon involved in triple bond", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "ci", "Aromatic carbon in a charged imidazole ring (HIS+)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c$", "Carbon atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "co", "Sp3 carbon in acetals", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c3m", "Sp3 carbon in 3-membered ring", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c4m", "Sp3 carbon in 4-membered ring", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "coh", "Sp3 carbon in acetals with hydrogen", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c3h", "Sp3 carbon in 3-membered ring with hydrogens", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c4h", "Sp3 carbon in 4-membered ring with hydrogens", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "ci", "Sp2 aromatic carbon in charged imidazole ring (His+)", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n", "Sp2 nitrogen with 1 H, 2 heavy atoms (amide group)", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "no", "Sp2 nitrogen in nitro group", "Ver. 2.3, Ref. 23"}, {"N", "14.006700", "n2", "Sp2 nitrogen (NH2 in the guanidinium group (HN=C(NH2)2))", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "np", "Sp2 aromatic nitrogen (partial double bonds)", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n3", "Sp3 nitrogen with three substituents", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n4", "Sp3 nitrogen with four substituents", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n=", "Non-aromatic end double bonded nitrogen", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n=1", "Non-aromatic, next to end doubly bonded carbon", "Ver. 2.0, Ref. 19"}, {"N", "14.006700", "n=2", "Non-aromatic doubly bonded nitrogen", "Ver. 2.0, Ref. 19"}, {"N", "14.006700", "nt", "Sp nitrogen involved in triple bond", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "nz", "Sp nitrogen in N2", "Ver. 1.3, Ref. 4"}, {"N", "14.006700", "n1", "Sp2 nitrogen in charged arginine", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "ni", "Sp2 nitrogen in a charged imidazole ring (HIS+)", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n$", "Nitrogen atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "na", "Sp3 nitrogen in amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n3m", "Sp3 nitrogen in 3- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n4m", "Sp3 nitrogen in 4- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.00670", "n3n", "Sp2 nitrogen in 3- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.00670", "n4n", "Sp2 nitrogen in 4- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nb", "Sp2 nitrogen in aromatic amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nn", "Sp2 nitrogen in aromatic amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "npc", "Sp2 nitrogen in 5- or 6- membered ring bonded to a heavy atom", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nh", "Sp2 nitrogen in 5-or 6- membered ring with hydrogen attached", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nho", "Sp2 nitrogen in 6- membered ring next to a carbonyl group and with a hydrogen", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nh+", "Protonated nitrogen in 6- membered ring with hydrogen attached", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n+", "Sp3 nitrogen in protonated amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nr", "Sp2 nitrogen (NH2) in guanidinium group (HN=C(NH2)2)", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "o'", "Oxygen in carbonyl (C=O) group", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o", "Sp3 oxygen in ether or ester groups", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "oz", "Oxygen in Zeolite", "Ver. 1.8, Ref. 14"}, {"O", "15.999400", "o-", "Oxygen in charged carboxylate (COO-) group", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "oh", "Oxygen in hydroxyl (OH) group", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o*", "Oxygen in water molecule", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "ospc", "Oxygen in SPC water molecule", "Ver. 2.3, Ref. 25"}, {"O", "15.999400", "otip", "Oxygen in TIP3P water molecule", "Ver. 2.3, Ref. 25"}, {"O", "15.999400", "op", "Oxygen in aromatic rings. e.g. furan", "Ver. 1.3, Ref. 8"}, {"O", "15.999400", "of", "Oxygen ", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o$", "Oxygen atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "oc", "Sp3 oxygen in ether or acetals", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "oe", "Sp3 oxygen in ester", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "o3e", "Sp3 oxygen in three membered ring", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "o4e", "Sp3 oxygen in four membered ring", "Ver. 2.0, Ref. 18"}, {"S", "32.064000", "s", "Sulfur in methionine (C-S-C) group", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "s1", "Sulfur involved in S-S disulfide bond", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "sh", "Sulfur in sulfhydryl (-SH) group", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "sp", "Sulfur in thiophene", "Ver. 1.3, Ref. 6"}, {"S", "32.064000", "s'", "Sulfur in thioketone (>C=S) group", "Ver. 1.3, Ref. 7"}, {"S", "32.064000", "s$", "Sulfur atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "sc", "Sp3 sulfur in methionines (C-S-C) group", "Ver. 2.0, Ref. 18"}, {"S", "32.06400", "s3e", "Sulfur in three membered ring", "Ver. 2.0, Ref. 18"}, {"S", "32.06400", "s4e", "Sulfur in four membered ring", "Ver. 2.0, Ref. 18"}, {"S", "32.064000", "s-", "Partial double sulfur bonded to something then bonded to another partial double oxygen or sulfur", "Ver. 2.0, Ref. 18"}, {"P", "30.973800", "p", "General phosphorous atom", "Ver. 1.0, Ref. 1"}, {"P", "30.973800", "pz", "Phosphorous atom in ALPO type structure", "Ver. 1.8, Ref. 14"}, {"P", "30.973800", "p$", "Phosphorous atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"Ca", "40.079800", "ca+", "ion Ca2+, mass = mass of Ca - 2*electron mass.", "Ver. 2.0, Ref. 18"}, {"F", "18.998400", "f", "Fluorine bonded to a carbon", "Ver. 1.0, Ref. 1"}, {"Cl", "35.453000", "cl", "Chlorine bonded to a carbon", "Ver. 1.0, Ref. 1"}, {"Br", "79.909000", "br", "Bromine bonded to a carbon", "Ver. 1.0, Ref. 1"}, {"I", "126.9045", "i", "Covalently bound Iodine", "Ver. 1.3, Ref. 4"}, {"Si", "28.086000", "si", "Silicon ", "Ver. 1.0, Ref. 1"}, {"Si", "28.086000", "sz", "Silicon atom in a Zeolite or Silicate", "Ver. 1.8, Ref. 14"}, {"D", "12.000000", "nu", "atom for relative free energy", "Ver. 1.0, Ref. 1"}, {"Cl", "35.453000", "Cl", "Chloride ion Cl-", "Ver. 1.0, Ref. 1"}, {"Br", "79.904000", "Br", "Bromide ion Br-", "Ver. 1.0, Ref. 1"}, {"Na", "22.989800", "Na", "Sodium ion", "Ver. 1.0, Ref. 1"}, {"Ar", "39.948", "ar", "Argon atom", "Ver. 1.3, Ref. 9"}, {"He", "4.002600", "he", "Helium atom", "Ver. 2.4, Ref. 30"}, {"Al", "26.982000", "al", "Aluminium in alumino-silicate", "Ver. 2.1, Ref. 26"}, {"Al", "26.982000", "az", "Aluminium in alumino-silicate", "Ver. 2.1, Ref. 26"}, {"Al", "26.982000", "Al", "Aluminium metal", "Ver. 2.1, Ref. 26"}, {"Na", "22.990000", "Na", "Sodium metal", "Ver. 2.1, Ref. 26"}, {"Pt", "195.090000", "Pt", "Platinum metal", "Ver. 2.1, Ref. 26"}, {"Pd", "106.400000", "Pd", "Palladium metal", "Ver. 2.1, Ref. 26"}, {"Au", "196.967000", "Au", "Gold metal", "Ver. 2.1, Ref. 26"}, {"Ag", "107.868000", "Ag", "Silver metal", "Ver. 2.1, Ref. 26"}, {"Sn", "118.690000", "Sn", "Tin metal", "Ver. 2.1, Ref. 26"}, {"K", "39.102000", "K", "Potassium metal", "Ver. 2.1, Ref. 26"}, {"Li", "6.940000", "Li", "Lithium metal", "Ver. 2.1, Ref. 26"}, {"Mo", "95.940000", "Mo", "Molybdenum metal", "Ver. 2.1, Ref. 26"}, {"Fe", "55.847000", "Fe", "Iron metal", "Ver. 2.1, Ref. 26"}, {"W", "183.850000", "W", "Tungsten metal", "Ver. 2.1, Ref. 26"}, {"Ni", "58.710000", "Ni", "Nickel metal", "Ver. 2.1, Ref. 26"}, {"Cr", "51.996000", "Cr", "Chromium metal", "Ver. 2.1, Ref. 26"}, {"Cu", "63.546000", "Cu", "Copper metal", "Ver. 2.1, Ref. 26"}, {"Pb", "207.200000", "Pb", "Lead metal", "Ver. 2.1, Ref. 26"}, {"Mg", "100.000000", "mg", "Magnesium ", "Ver. 2.1, Ref. 27"}}; /* Equivalence table for key symbols CVFF auto with: 0 = Key in atom list 1 = Non-bonded 2 = Bond increments 3 = Bonds 4 = Angles end atom 5 = Angles appex atom 6 = Torsion end atom 7 = Torsion center atom 8 = Inversion end atom 9 = Inversion center atom 10 = CVFF info */ char * CVFF_equivalence_auto[123][11]= {{"h", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"d", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hc", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hp", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hs", "h", "hs", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hn", "hn", "hn", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hi", "hn", "hn", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"h+", "hn", "hn", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"ho", "hn", "ho", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"h*", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hspc", "hspc", "hspc", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.3, Ref. 25"}, {"htip", "htip", "htip", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.3, Ref. 25"}, {"hw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"dw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"lp", "h", "lp", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"c", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 24"}, {"co", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 24"}, {"c3m", "cg", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 24"}, {"c4m", "cg", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 24"}, {"coh", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c3h", "cg", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c4h", "cg", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"cg", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"ca", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"cn", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c3", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c2", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c1", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"ci", "c'", "ci", "ci_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"c*", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 21"}, {"c\"", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c'", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"cp", "c'", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"c5", "c'", "c5", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"cs", "c'", "cs", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"cr", "c'", "cr", "cr_", "c_", "c'_", "c_", "c=_3", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c+", "c'", "cr", "cr_", "c_", "c'_", "c_", "c+_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c-", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c=", "c'", "c=", "c=_3", "c_", "c=_", "c_", "c=_3", "c_", "c=_", "Ver. 2.0, Ref. 18"}, {"c=1", "c'", "c=", "c=_1", "c_", "c=_", "c_", "c=_1", "c_", "c=_", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "c=", "c=_2", "c_", "c=_", "c_", "c=_2", "c_", "c=_", "Ver. 2.0, Ref. 19"}, {"ct", "c'", "ct", "ct_", "c_", "ct_", "c_", "ct_", "c_", "ct_", "Ver. 2.0, Ref. 18"}, {"na", "n", "n3", "na_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n3", "n", "n3", "na_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n3m", "n", "n3", "n3m_", "n3m_", "n3m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n4m", "n", "n3", "n4m_", "n4m_", "n4m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"np", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"npc", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nh", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nho", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nh+", "n", "nh+", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"ni", "n", "ni", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nn", "n", "n3", "na_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"nb", "n", "n3", "np_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n+", "n", "n4", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n4", "n", "n4", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n", "n", "n", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"no", "n", "n", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.3, Ref. 23"}, {"n3n", "n", "n", "n3m_", "n3m_", "n3m_", "n_", "n3n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n4n", "n", "n", "n4m_", "n4m_", "n4m_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"nr", "n", "n2", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n2", "n", "n2", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n1", "n", "n1", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n=", "n", "n=", "n=_3", "n_", "n_", "n_", "n=_3", "n_", "n=_", "Ver. 2.0, Ref. 18"}, {"n=1", "n", "n=", "n=_1", "n_", "n_", "n_", "n=_1", "n_", "n=_", "Ver. 2.0, Ref. 19"}, {"n=2", "n", "n=", "n=_2", "n_", "n_", "n_", "n=_2", "n_", "n=_", "Ver. 2.0, Ref. 19"}, {"nt", "n", "nt", "nt_", "n_", "nt_", "n_", "nt_", "n_", "nt_", "Ver. 2.0, Ref. 18"}, {"nz", "n", "nz", "nz_", "n_", "nz_", "n_", "nz_", "n_", "nz_", "Ver. 2.0, Ref. 18"}, {"o", "o'", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"oz", "oz", "oz", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o*", "o*", "o*", "o_", "o_", "o*_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"otip", "otip", "otip", "o_", "o_", "o*_", "o_", "o_", "o_", "o_", "Ver. 2.3, Ref. 25"}, {"ospc", "ospc", "ospc", "o_", "o_", "o*_", "o_", "o_", "o_", "o_", "Ver. 2.3, Ref. 25"}, {"oh", "o'", "oh", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"oc", "o'", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"oe", "o'", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o3e", "o'", "o", "o3e_", "o3e_", "o3e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o4e", "o'", "o", "o4e_", "o4e_", "o4e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"op", "o'", "op", "op_", "o_", "op_", "o_", "o_", "o_", "op_", "Ver. 2.0, Ref. 18"}, {"o'", "o'", "o'", "o'_", "o'_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"of", "o'", "oh", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o-", "o'", "o-", "o-_", "o'_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"s", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s'", "s'", "s'", "s'_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s-", "s'", "s-", "s-_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"sc", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s3e", "s", "s", "s3e_", "s3e_", "s3e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s4e", "s", "s", "s4e_", "s4e_", "s4e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s1", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"sh", "s", "sh", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"sp", "s'", "sp", "sp_", "s_", "sp_", "s_", "sp_", "s_", "sp_", "Ver. 2.0, Ref. 18"}, {"p", "p", "p", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 18"}, {"pz", "p", "p", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 18"}, {"ca+", "ca+", "ca+", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "Ver. 2.0, Ref. 18"}, {"f", "f", "f", "f_", "f_", "f_", "f_", "f_", "f_", "f_", "Ver. 2.0, Ref. 18"}, {"i", "i", "i", "i_", "f_", "i_", "i_", "i_", "i_", "i_", "Ver. 2.0, Ref. 18"}, {"cl", "cl", "cl", "cl_", "f_", "cl_", "c_", "cl_", "cl_", "cl_", "Ver. 2.0, Ref. 18"}, {"br", "br", "br", "br_", "f_", "br_", "br_", "br_", "br_", "br_", "Ver. 2.0, Ref. 18"}, {"si", "si", "si", "si_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.0, Ref. 18"}, {"sz", "sz", "sz", "sz", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.0, Ref. 18"}, {"nu", "nu", "nu", "nu_", "nu_", "nu_", "nu_", "nu_", "nu_", "nu_", "Ver. 2.0, Ref. 18"}, {"Cl", "Cl", "Cl", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Ver. 2.0, Ref. 18"}, {"Br", "Br", "Br", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Ver. 2.0, Ref. 18"}, {"Na", "Na", "Na", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Ver. 2.0, Ref. 18"}, {"ar", "ar", "ar", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "Ver. 2.0, Ref. 18"}, {"he", "he", "he", "he_", "he_", "he_", "he_", "he_", "he_", "he_", "Ver. 2.4, Ref. 30"}, {"az", "si", "az", "az_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.1, Ref. 26"}, {"al", "si", "az", "az_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.1, Ref. 26"}, {"mg", "mg", "si", "si_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.1, Ref. 26"}, {"Al", "Al", "Al", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Pb", "Pb", "Pb", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Pt", "Pt", "Pt", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Pd", "Pd", "Pd", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Au", "Au", "Au", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Ag", "Ag", "Ag", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Sn", "Sn", "Sn", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Li", "Li", "Li", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Mo", "Mo", "Mo", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Fe", "Fe", "Fe", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"W", "W", "W", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Ni", "Ni", "Ni", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Cr", "Cr", "Cr", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Cu", "Cu", "Cu", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}}; /* Equivalence table for key symbols CVFF with: 0 = Key in atom list 1 = Non-bonded 2 = Bonds 3 = Angles 4 = Torsion 5 = Inversion 6 = CVFF info */ char * CVFF_equivalence[129][7]= {{"h", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"d", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hp", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hc", "h", "h", "h", "h", "h", "Ver. 2.0, Ref. 18"}, {"hs", "h", "hs", "hs", "hs", "hs", "Ver. 1.0, Ref. 1"}, {"hn", "hn", "hn", "hn", "hn", "hn", "Ver. 1.0, Ref. 1"}, {"ho", "hn", "ho", "ho", "ho", "ho", "Ver. 1.0, Ref. 1"}, {"hi", "hn", "hn", "hn", "hn", "hn", "Ver. 2.0, Ref. 18"}, {"h+", "hn", "hn", "hn", "hn", "hn", "Ver. 2.0, Ref. 18"}, {"h*", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hspc", "hspc", "hspc", "hspc", "hspc", "hspc", "Ver. 2.3, Ref. 25"}, {"htip", "htip", "htip", "htip", "htip", "htip", "Ver. 2.3, Ref. 25"}, {"hw", "h*", "h*", "h*", "h*", "h*", "Ver. 2.0, Ref. 18"}, {"dw", "h*", "h*", "h*", "h*", "h*", "Ver. 2.0, Ref. 18"}, {"h$", "h$", "h$", "h$", "h$", "h$", "Ver. 1.0, Ref. 1"}, {"lp", "h", "lp", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"c", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 24"}, {"co", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 24"}, {"c3m", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 24"}, {"c4m", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 24"}, {"coh", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"c3h", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"c4h", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"cg", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"ca", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"cn", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c2", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c1", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c'", "c'", "c'", "c'", "c'", "c'", "Ver. 1.0, Ref. 1"}, {"c\"", "c'", "c'", "c'", "c'", "c'", "Ver. 2.0, Ref. 18"}, {"c*", "c'", "c'", "c'", "c'", "c'", "Ver. 2.0, Ref. 21"}, {"cp", "c'", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"c5", "c'", "c5", "c5", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"cs", "c'", "cs", "cs", "cs", "cs", "Ver. 1.3, Ref. 6"}, {"cr", "c'", "cr", "c'", "cr", "c'", "Ver. 1.0, Ref. 1"}, {"c+", "c'", "cr", "c'", "cr", "c'", "Ver. 2.0, Ref. 18"}, {"c-", "c'", "c'", "c'", "c'", "c'", "Ver. 1.0, Ref. 1"}, {"c=", "c'", "c=", "c=", "c=", "c=", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "c=1", "c=", "c=1", "c=", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "c=2", "c=", "c=2", "c=", "Ver. 2.0, Ref. 19"}, {"ct", "c'", "ct", "ct", "ct", "ct", "Ver. 1.0, Ref. 1"}, {"ci", "c'", "ci", "c5", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"c$", "c$", "c$", "c$", "c$", "c$", "Ver. 1.0, Ref. 1"}, {"n", "n", "n", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"no", "n", "no", "no", "no", "no", "Ver. 2.3, Ref. 23"}, {"n3n", "n", "n", "n", "n", "n", "Ver. 2.0, Ref. 18"}, {"n4n", "n", "n", "n", "n", "n", "Ver. 2.0, Ref. 18"}, {"n2", "n", "n2", "n", "n2", "n2", "Ver. 1.0, Ref. 1"}, {"n3", "n", "n3", "n3", "n3", "n3", "Ver. 1.0, Ref. 1"}, {"na", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"n3m", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"n4m", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"n4", "n", "n4", "n3", "n3", "n3", "Ver. 1.0, Ref. 1"}, {"n+", "n", "n4", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"nn", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"nb", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"np", "n", "np", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"n=", "n", "n=", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"n=1", "n", "n=1", "np", "np", "np", "Ver. 2.0, Ref. 19"}, {"n=2", "n", "n=2", "np", "np", "np", "Ver. 2.0, Ref. 19"}, {"nt", "n", "nt", "nt", "nt", "nt", "Ver. 1.0, Ref. 1"}, {"nz", "n", "nz", "nz", "nz", "nz", "Ver. 1.3, Ref. 4"}, {"n1", "n", "n1", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"ni", "n", "ni", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"nh", "n", "np", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"npc", "n", "np", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"nho", "n", "np", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"nh+", "n", "nh+", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"nr", "n", "n2", "n2", "n2", "n2", "Ver. 2.0, Ref. 18"}, {"n$", "n$", "n$", "n$", "n$", "n$", "Ver. 1.0, Ref. 1"}, {"o'", "o'", "o'", "o'", "o'", "o'", "Ver. 1.0, Ref. 1"}, {"o", "o'", "o", "o", "o", "o'", "Ver. 1.0, Ref. 1"}, {"oz", "oz", "oz", "oz", "oz", "oz", "Ver. 1.8, Ref. 14"}, {"o-", "o'", "o-", "o-", "o'", "o'", "Ver. 1.0, Ref. 1"}, {"oh", "o'", "oh", "o", "o", "o'", "Ver. 1.0, Ref. 1"}, {"o*", "o*", "o*", "o*", "o*", "o*", "Ver. 1.0, Ref. 1"}, {"ospc", "ospc", "ospc", "o*", "o*", "o*", "Ver. 2.3, Ref. 25"}, {"otip", "otip", "otip", "o*", "o*", "o*", "Ver. 2.3, Ref. 25"}, {"op", "o'", "op", "op", "op", "op", "Ver. 1.3, Ref. 8"}, {"of", "o'", "oh", "o", "of", "o'", "Ver. 1.0, Ref. 1"}, {"o$", "o$", "o$", "o$", "o$", "o$", "Ver. 1.0, Ref. 1"}, {"oc", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"oe", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"o3e", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"o4e", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"s", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"s1", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sh", "s", "sh", "sh", "sh", "sh", "Ver. 1.0, Ref. 1"}, {"s'", "s'", "s'", "s'", "s'", "s'", "Ver. 1.3, Ref. 7"}, {"sp", "s'", "sp", "sp", "sp", "sp", "Ver. 1.3, Ref. 6"}, {"s$", "s$", "s$", "s$", "s$", "s$", "Ver. 1.0, Ref. 1"}, {"sc", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 18"}, {"s3e", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 18"}, {"s4e", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 18"}, {"p", "p", "p", "p", "p", "p", "Ver. 1.0, Ref. 1"}, {"pz", "p", "p", "p", "p", "p", "Ver. 1.8, Ref. 14"}, {"p$", "p$", "p$", "p$", "p$", "p$", "Ver. 1.0, Ref. 1"}, {"ca+", "ca+", "ca+", "ca+", "ca+", "ca+", "Ver. 1.0, Ref. 1"}, {"f", "f", "f", "f", "f", "f", "Ver. 1.0, Ref. 1"}, {"i", "i", "i", "i", "i", "i", "Ver. 1.3, Ref. 4"}, {"cl", "cl", "cl", "cl", "cl", "cl", "Ver. 1.0, Ref. 1"}, {"br", "br", "br", "br", "br", "br", "Ver. 1.0, Ref. 1"}, {"si", "si", "si", "si", "si", "si", "Ver. 1.0, Ref. 1"}, {"sz", "sz", "sz", "sz", "sz", "sz", "Ver. 1.8, Ref. 14"}, {"nu", "nu", "nu", "nu", "nu", "nu", "Ver. 1.0, Ref. 1"}, {"Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Ver. 1.0, Ref. 1"}, {"Br", "Br", "Br", "Br", "Br", "Br", "Ver. 1.0, Ref. 1"}, {"Na", "Na", "Na", "Na", "Na", "Na", "Ver. 1.0, Ref. 1"}, {"ar", "ar", "ar", "ar", "ar", "ar", "Ver. 1.3, Ref. 9"}, {"he", "he", "he", "he", "he", "he", "Ver. 2.4, Ref. 30"}, {"al", "sz", "al", "si", "si", "si", "Ver. 2.1, Ref. 26"}, {"az", "sz", "az", "sz", "sz", "sz", "Ver. 2.1, Ref. 26"}, {"Al", "Al", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Pt", "Pt", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Pd", "Pd", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Au", "Au", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Ag", "Ag", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Sn", "Na", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"K", "K", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Li", "Li", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Mo", "Mo", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Fe", "Fe", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"W", "W", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Ni", "Ni", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Cr", "Cr", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Cu", "Cu", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Pb", "Pb", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"mg", "mg", "sz", "sz", "sz", "sz", "Ver. 2.1, Ref. 27"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= CVFF info E = K2 * (R - R0)^2 */ char * CVFF_bonds_auto[776][5]= {{"no", "o-", "1.2178", "560.9942", "Ver. 2.3, Ref. 23"}, {"no", "cp", "1.4720", "351.2527", "Ver. 2.3, Ref. 23"}, {"c'", "cp", "1.4720", "351.2527", "Ver. 2.3, Ref. 23"}, {"c", "o", "1.4250", "273.2000", "Ver. 1.0, Ref. 1"}, {"c", "h", "1.1050", "340.6175", "Ver. 1.0, Ref. 1"}, {"c", "c", "1.5260", "322.7158", "Ver. 1.0, Ref. 1"}, {"c", "c'", "1.5200", "283.0924", "Ver. 1.0, Ref. 1"}, {"c'", "o'", "1.2300", "615.3220", "Ver. 1.0, Ref. 1"}, {"n", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"n", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"n", "c'", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n", "cr", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "1.4600", "377.5752", "Ver. 1.0, Ref. 1"}, {"n1", "cr", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n1", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"n1", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"c", "n1", "1.4600", "377.5752", "Ver. 1.0, Ref. 1"}, {"oh", "ho", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"oh", "lp", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"oh", "c", "1.4200", "384.0000", "Ver. 1.0, Ref. 1"}, {"o", "ho", "0.9600", "493.8480", "Ver. 1.0, Ref. 1"}, {"o", "lp", "0.9600", "493.8480", "Ver. 1.0, Ref. 1"}, {"c'", "h", "1.1050", "340.6175", "Ver. 1.0, Ref. 1"}, {"c'", "o", "1.3700", "400.0000", "Ver. 1.0, Ref. 1"}, {"c'", "oh", "1.3700", "400.0000", "Ver. 1.0, Ref. 1"}, {"c'", "o-", "1.2500", "540.0000", "Ver. 1.0, Ref. 1"}, {"cp", "h", "1.0800", "363.4164", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "1.3400", "480.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "1.5100", "283.0924", "Ver. 1.0, Ref. 1"}, {"cp", "oh", "1.3700", "384.0000", "Ver. 1.0, Ref. 1"}, {"sh", "hs", "1.3300", "274.1288", "Ver. 1.0, Ref. 1"}, {"sh", "lp", "1.3300", "274.1288", "Ver. 1.0, Ref. 1"}, {"c", "sh", "1.8200", "228.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "1.8000", "228.0000", "Ver. 1.0, Ref. 1"}, {"c", "s1", "1.8000", "228.0000", "Ver. 1.0, Ref. 1"}, {"s", "s", "2.0000", "180.0000", "Ver. 1.0, Ref. 1"}, {"s1", "s1", "2.0000", "180.0000", "Ver. 1.0, Ref. 1"}, {"n2", "hn", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"n2", "lp", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"c", "n2", "1.4700", "356.5988", "Ver. 1.0, Ref. 1"}, {"n2", "c'", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cr", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n3", "hn", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"n3", "lp", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"c", "n3", "1.4700", "356.5988", "Ver. 1.0, Ref. 1"}, {"n4", "hn", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"n4", "lp", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"c", "n4", "1.4700", "356.5988", "Ver. 1.0, Ref. 1"}, {"cp", "np", "1.2600", "560.0000", "Ver. 1.0, Ref. 1"}, {"np", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"np", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "1.3400", "280.0000", "Ver. 1.0, Ref. 1"}, {"c5", "h", "1.0800", "363.4164", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "1.3900", "280.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c", "1.5100", "283.0924", "Ver. 1.0, Ref. 1"}, {"c5", "np", "1.3800", "320.0000", "Ver. 1.0, Ref. 1"}, {"c5", "o", "1.3700", "420.0000", "Ver. 1.2, Ref. 3"}, {"c5", "op", "1.3700", "420.0000", "Ver. 1.3, Ref. 8"}, {"c5", "s", "1.7300", "228.0000", "Ver. 1.2, Ref. 3"}, {"cs", "h", "1.0800", "379.0809", "Ver. 1.3, Ref. 6"}, {"cs", "c5", "1.3630", "400.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "1.7106", "320.0000", "Ver. 1.3, Ref. 6"}, {"ci", "h", "1.0800", "363.4164", "Ver. 1.0, Ref. 1"}, {"ci", "ci", "1.3900", "280.0000", "Ver. 1.0, Ref. 1"}, {"ci", "c", "1.5100", "283.0924", "Ver. 1.0, Ref. 1"}, {"ci", "ni", "1.3800", "320.0000", "Ver. 1.0, Ref. 1"}, {"ni", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"ni", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"cp", "n", "1.4200", "280.0000", "Ver. 1.0, Ref. 1"}, {"o*", "h*", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"ospc", "hspc", "1.0000", "540.6336", "Ver. 2.3, Ref. 25"}, {"otip", "htip", "0.9570", "540.6336", "Ver. 2.3, Ref. 25"}, {"o*", "lp", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"p", "oh", "1.5700", "300.0000", "Ver. 1.0, Ref. 1"}, {"p", "o'", "1.5300", "560.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "1.6100", "245.2000", "Ver. 1.0, Ref. 1"}, {"p", "o-", "1.5300", "480.0000", "Ver. 1.0, Ref. 1"}, {"p", "h", "1.5000", "224.0000", "Ver. 1.0, Ref. 1"}, {"p", "lp", "1.5000", "224.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "1.4750", "336.8000", "Ver. 1.0, Ref. 1"}, {"n=", "c", "1.4750", "336.8000", "Ver. 1.0, Ref. 1"}, {"n=1", "c", "1.4750", "336.8000", "Ver. 2.0, Ref. 19"}, {"n=2", "c", "1.4750", "336.8000", "Ver. 2.0, Ref. 19"}, {"c=", "n=", "1.2600", "560.0000", "Ver. 1.0, Ref. 1"}, {"c=", "n=1", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=", "1.2600", "560.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n=1", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=2", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c'", "1.5000", "322.8000", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c", "1.5000", "322.8000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "1.3300", "655.2000", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "1.3300", "655.2000", "Ver. 2.0, Ref. 19"}, {"c=", "h", "1.0900", "361.6000", "Ver. 1.0, Ref. 1"}, {"c=1", "h", "1.0900", "361.6000", "Ver. 2.0, Ref. 19"}, {"c=2", "h", "1.0900", "361.6000", "Ver. 2.0, Ref. 19"}, {"f", "c", "1.3630", "496.0000", "Ver. 1.0, Ref. 1"}, {"f", "lp", "1.3630", "496.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "1.7610", "314.0000", "Ver. 1.0, Ref. 1"}, {"cl", "lp", "1.7610", "314.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "1.9200", "223.6000", "Ver. 1.0, Ref. 1"}, {"br", "lp", "1.9200", "223.6000", "Ver. 1.0, Ref. 1"}, {"f", "cp", "1.3630", "496.0000", "Ver. 1.0, Ref. 1"}, {"cl", "cp", "1.7610", "314.0000", "Ver. 1.0, Ref. 1"}, {"br", "cp", "1.9200", "223.6000", "Ver. 1.0, Ref. 1"}, {"si", "c", "1.8090", "238.0000", "Ver. 1.0, Ref. 1"}, {"si", "h", "1.3820", "222.4000", "Ver. 1.0, Ref. 1"}, {"si", "o", "1.6650", "392.8000", "Ver. 1.0, Ref. 1"}, {"h", "h", "0.74611", "398.7500", "Ver. 1.3, Ref. 4"}, {"d", "d", "0.74164", "398.2400", "Ver. 1.3, Ref. 4"}, {"f", "f", "1.417", "259.0700", "Ver. 1.3, Ref. 4"}, {"cl", "cl", "1.988", "236.5500", "Ver. 1.3, Ref. 4"}, {"br", "br", "2.290", "175.6400", "Ver. 1.3, Ref. 4"}, {"i", "i", "2.662", "123.2100", "Ver. 1.3, Ref. 4"}, {"o", "o", "1.208", "833.7200", "Ver. 1.3, Ref. 4"}, {"nz", "nz", "1.09758", "1632.5100", "Ver. 1.3, Ref. 4"}, {"nt", "nt", "1.09758", "1632.5100", "Ver. 1.3, Ref. 5"}, {"c'", "s'", "1.6110", "510.2775", "Ver. 1.3, Ref. 7"}, {"sz", "c", "1.8090", "238.0000", "Ver. 1.0, Ref. 1"}, {"sz", "o", "1.6150", "392.8000", "Ver. 1.8, Ref. 14"}, {"sz", "oz", "1.6150", "392.8000", "Ver. 1.8, Ref. 14"}, {"sz", "oh", "1.6350", "392.8000", "Ver. 1.8, Ref. 14"}, {"sz", "h", "1.3820", "222.4000", "Ver. 1.8, Ref. 14"}, {"oz", "ho", "0.9600", "540.6336", "Ver. 1.8, Ref. 14"}, {"al", "c", "1.8090", "392.8000", "Ver. 2.1, Ref. 26"}, {"al", "h", "1.3820", "392.8000", "Ver. 2.1, Ref. 26"}, {"al", "o", "1.7750", "392.8000", "Ver. 2.1, Ref. 26"}, {"al", "oz", "1.7750", "392.8000", "Ver. 2.1, Ref. 26"}, {"az", "c", "1.8090", "392.8000", "Ver. 2.1, Ref. 26"}, {"az", "o", "1.7750", "392.8000", "Ver. 2.1, Ref. 26"}, {"az", "oz", "1.7750", "392.8000", "Ver. 2.1, Ref. 26"}, {"az", "oh", "1.7750", "392.8000", "Ver. 2.1, Ref. 26"}, {"az", "h", "1.3820", "392.8000", "Ver. 2.1, Ref. 26"}, {"sz", "f", "1.6650", "392.8000", "Ver. 2.1, Ref. 28"}, {"sz", "sz", "3.0900", "392.8000", "Ver. 2.1, Ref. 28"}, {"sz", "az", "3.0900", "392.8000", "Ver. 2.1, Ref. 28"}, {"az", "az", "3.0900", "392.8000", "Ver. 2.1, Ref. 28"}, {"sz", "al", "3.0900", "392.8000", "Ver. 2.1, Ref. 28"}, {"si", "al", "3.0900", "392.8000", "Ver. 2.1, Ref. 28"}, {"c3m_", "c3m_", "1.5100", "322.7158", "Ver. 2.0, Ref. 18"}, {"c3m_", "c4m_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c3m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c3m_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 18"}, {"c3m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c3m_", "n3m_", "1.4850", "356.5988", "Ver. 2.0, Ref. 18"}, {"c3m_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c3m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 18"}, {"c3m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 18"}, {"c3m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 18"}, {"c3m_", "o3e_", "1.4340", "273.2000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o4e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c3m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 18"}, {"c3m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 18"}, {"c3m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s4e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c3m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 18"}, {"c3m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"c3m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "1.5520", "322.7158", "Ver. 2.0, Ref. 18"}, {"c4m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c4m_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 18"}, {"c4m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c4m_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c4m_", "n4m_", "1.4670", "356.5988", "Ver. 2.0, Ref. 18"}, {"c4m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 18"}, {"c4m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 18"}, {"c4m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 18"}, {"c4m_", "o3e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o4e_", "1.4462", "273.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 18"}, {"c4m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 18"}, {"c4m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 18"}, {"c4m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "1.8470", "228.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c4m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 18"}, {"c4m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"c4m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c'_", "n3m_", "1.4460", "272.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n4m_", "1.4000", "332.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "s3e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 18"}, {"c'_", "s4e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 18"}, {"cp_", "n3m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n4m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s3e", "1.7300", "228.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s4e", "1.7300", "228.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_1", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_1", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_2", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_2", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_3", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_3", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_1", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_1", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_2", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_2", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_3", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_3", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"ct_", "n3m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 18"}, {"ct_", "n4m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 18"}, {"ct_", "s3e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 18"}, {"ct_", "s4e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 18"}, {"na_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"na_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"na_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"na_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 18"}, {"n3m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 18"}, {"n3m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 18"}, {"n3m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 18"}, {"n3m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 18"}, {"n3m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 18"}, {"n3m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 18"}, {"n3m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 18"}, {"n3m_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 18"}, {"n3m_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 18"}, {"n3m_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 18"}, {"n3m_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 18"}, {"n3m_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 18"}, {"n3m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 18"}, {"n4m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 18"}, {"n4m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 18"}, {"n4m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 18"}, {"n4m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 18"}, {"n4m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 18"}, {"n4m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n4m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 18"}, {"n4m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 18"}, {"n4m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n4m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n4m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 18"}, {"n4m_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 18"}, {"n4m_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 18"}, {"n4m_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 18"}, {"n4m_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 18"}, {"n4m_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 18"}, {"n4m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 18"}, {"n_", "s3e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 18"}, {"n_", "s4e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 18"}, {"np_", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"np_", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_1", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_1", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_2", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_2", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_3", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_3", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"o_", "s3e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 18"}, {"o_", "s4e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 18"}, {"op_", "s3e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 18"}, {"op_", "s4e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 18"}, {"o'_", "s3e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 18"}, {"o'_", "s4e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 18"}, {"s_", "s3e_", "2.1000", "160.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s4e_", "2.1000", "160.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s3e_", "2.0400", "175.1260", "Ver. 2.0, Ref. 18"}, {"sp_", "s4e_", "2.0400", "175.1260", "Ver. 2.0, Ref. 18"}, {"s'_", "s3e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 18"}, {"s'_", "s4e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 18"}, {"s3e_", "s3e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 18"}, {"s3e_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 18"}, {"s3e_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 18"}, {"s3e_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 18"}, {"s3e_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 18"}, {"s3e_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 18"}, {"s3e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 18"}, {"s4e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 18"}, {"s4e_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 18"}, {"s4e_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 18"}, {"s4e_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 18"}, {"s4e_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 18"}, {"s4e_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 18"}, {"s4e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 18"}, {"c_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 18"}, {"c_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 18"}, {"c_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 18"}, {"c_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 18"}, {"c_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 18"}, {"c_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 18"}, {"c_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 18"}, {"c_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 18"}, {"c_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 18"}, {"c_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"c_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"c_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"c_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 18"}, {"c_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c'_", "1.5000", "266.4000", "Ver. 2.0, Ref. 18"}, {"c'_", "cp_", "1.5000", "284.3316", "Ver. 2.0, Ref. 18"}, {"c'_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "ct_", "1.4200", "311.1492", "Ver. 2.0, Ref. 18"}, {"c'_", "n_", "1.3600", "388.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_1", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_2", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_3", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "np_", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "o_", "1.3400", "400.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "o'_", "1.2200", "615.3220", "Ver. 2.0, Ref. 18"}, {"c'_", "o-_", "1.2500", "572.8860", "Ver. 2.0, Ref. 18"}, {"c'_", "op_", "1.3500", "294.1008", "Ver. 2.0, Ref. 18"}, {"c'_", "s_", "1.7700", "175.0035", "Ver. 2.0, Ref. 18"}, {"c'_", "s'_", "1.6110", "510.2775", "Ver. 2.0, Ref. 18"}, {"c'_", "s-_", "1.6800", "280.3060", "Ver. 2.0, Ref. 18"}, {"c'_", "sp_", "1.7400", "215.3532", "Ver. 2.0, Ref. 18"}, {"c'_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c'_", "p_", "1.7200", "241.3820", "Ver. 2.0, Ref. 18"}, {"c'_", "f_", "1.3900", "217.7092", "Ver. 2.0, Ref. 18"}, {"c'_", "cl_", "1.7270", "249.8588", "Ver. 2.0, Ref. 18"}, {"c'_", "br_", "1.8750", "228.2808", "Ver. 2.0, Ref. 18"}, {"c'_", "si_", "1.8300", "239.3552", "Ver. 2.0, Ref. 18"}, {"c'_", "i_", "2.0610", "208.6024", "Ver. 2.0, Ref. 18"}, {"cp_", "cp_", "1.3900", "480.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "ct_", "1.4000", "321.6716", "Ver. 2.0, Ref. 18"}, {"cp_", "na_", "1.4120", "257.7752", "Ver. 2.0, Ref. 18"}, {"cp_", "n_", "1.4200", "280.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_1", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_2", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_3", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "np_", "1.3500", "440.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n+_", "1.4120", "251.3344", "Ver. 2.0, Ref. 18"}, {"cp_", "o_", "1.3700", "384.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "o'_", "1.3300", "297.4852", "Ver. 2.0, Ref. 18"}, {"cp_", "op_", "1.3700", "420.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s_", "1.7300", "228.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s'_", "1.7200", "239.8024", "Ver. 2.0, Ref. 18"}, {"cp_", "sp_", "1.7106", "320.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 18"}, {"cp_", "p_", "1.7000", "235.0428", "Ver. 2.0, Ref. 18"}, {"cp_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"cp_", "i_", "2.0410", "217.4512", "Ver. 2.0, Ref. 18"}, {"cp_", "si_", "1.8100", "225.1676", "Ver. 2.0, Ref. 18"}, {"ci", "ci", "1.3900", "280.0000", "Ver. 2.0, Ref. 18"}, {"ci", "ni", "1.3800", "320.0000", "Ver. 2.0, Ref. 18"}, {"ci", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 18"}, {"c=", "c=", "1.3300", "655.2000", "Ver. 2.0, Ref. 18"}, {"c=_3", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_2", "1.4100", "480.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_2", "1.4800", "320.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_1", "1.4800", "320.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_3", "1.4800", "320.0000", "Ver. 2.0, Ref. 18"}, {"c=", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=_1", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=_1", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_1", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=_2", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=_2", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_2", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=_3", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=_3", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_3", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_2", "1.3430", "493.5268", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_3", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"c=_1", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_1", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=_1", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=_1", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=_1", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=_1", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=_1", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_1", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=_1", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=_1", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=_1", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=_1", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=_1", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=_1", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"c=_2", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_2", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=_2", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=_2", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=_2", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=_2", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=_2", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_2", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=_2", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=_2", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=_2", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=_2", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=_2", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=_2", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"c=_3", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_3", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=_3", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=_3", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=_3", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=_3", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=_3", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_3", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=_3", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=_3", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=_3", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=_3", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=_3", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=_3", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"cr_", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_2", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n_", "1.3200", "388.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "ct_", "1.2040", "800.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "nt_", "1.1580", "880.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "na_", "1.3820", "286.8096", "Ver. 2.0, Ref. 18"}, {"ct_", "n_", "1.3550", "289.4448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_1", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_2", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_3", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n+_", "1.3820", "278.3768", "Ver. 2.0, Ref. 18"}, {"ct_", "o_", "1.3130", "367.8164", "Ver. 2.0, Ref. 18"}, {"ct_", "s_", "1.7200", "271.4328", "Ver. 2.0, Ref. 18"}, {"ct_", "op_", "1.3000", "346.4680", "Ver. 2.0, Ref. 18"}, {"ct_", "o'_", "1.3000", "318.8680", "Ver. 2.0, Ref. 18"}, {"ct_", "sp_", "1.6900", "256.0344", "Ver. 2.0, Ref. 18"}, {"ct_", "s'_", "1.6900", "270.8344", "Ver. 2.0, Ref. 18"}, {"ct_", "p_", "1.6700", "273.4668", "Ver. 2.0, Ref. 18"}, {"ct_", "h_", "1.0530", "316.9016", "Ver. 2.0, Ref. 18"}, {"ct_", "f_", "1.3400", "278.3932", "Ver. 2.0, Ref. 18"}, {"ct_", "cl_", "1.6770", "292.1952", "Ver. 2.0, Ref. 18"}, {"ct_", "br_", "1.8250", "268.8528", "Ver. 2.0, Ref. 18"}, {"ct_", "i_", "2.0110", "248.9268", "Ver. 2.0, Ref. 18"}, {"ct_", "si_", "1.7800", "267.2964", "Ver. 2.0, Ref. 18"}, {"na_", "na_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"na_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 18"}, {"na_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 18"}, {"na_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 18"}, {"na_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"na_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 18"}, {"na_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 18"}, {"na_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 18"}, {"na_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 18"}, {"na_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 18"}, {"na_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 18"}, {"na_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 18"}, {"na_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 18"}, {"na_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 18"}, {"na_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 18"}, {"na_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 18"}, {"n_", "n_", "1.3400", "220.0000", "Ver. 2.0, Ref. 18"}, {"n_", "np_", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_1", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_2", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_3", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n+_", "1.3670", "210.6360", "Ver. 2.0, Ref. 18"}, {"n_", "o_", "1.2980", "301.2632", "Ver. 2.0, Ref. 18"}, {"n_", "s_", "1.7050", "210.6208", "Ver. 2.0, Ref. 18"}, {"n_", "op_", "1.2850", "267.1080", "Ver. 2.0, Ref. 18"}, {"n_", "o'_", "1.2850", "239.5080", "Ver. 2.0, Ref. 18"}, {"n_", "sp_", "1.6750", "193.4844", "Ver. 2.0, Ref. 18"}, {"n_", "s'_", "1.6750", "208.2844", "Ver. 2.0, Ref. 18"}, {"n_", "p_", "1.6550", "219.9524", "Ver. 2.0, Ref. 18"}, {"n_", "h_", "1.0260", "483.4512", "Ver. 2.0, Ref. 18"}, {"n_", "f_", "1.3250", "189.3856", "Ver. 2.0, Ref. 18"}, {"n_", "cl_", "1.6620", "227.5604", "Ver. 2.0, Ref. 18"}, {"n_", "br_", "1.8100", "206.3980", "Ver. 2.0, Ref. 18"}, {"n_", "i_", "1.9960", "186.6972", "Ver. 2.0, Ref. 18"}, {"n_", "si_", "1.7650", "216.8064", "Ver. 2.0, Ref. 18"}, {"np_", "np_", "1.3400", "408.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"np_", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"np_", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 18"}, {"np_", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"np_", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"np_", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 18"}, {"np_", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"np_", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"np_", "h_", "1.0260", "483.4512", "Ver. 2.0, Ref. 18"}, {"np_", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"np_", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"np_", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"np_", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"np_", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=", "n=", "1.2100", "651.2000", "Ver. 2.0, Ref. 18"}, {"n=_3", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_2", "1.2760", "488.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"n=", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=_1", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=_1", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=_2", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=_2", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=_3", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=_3", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 18"}, {"n=_1", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 18"}, {"n=_2", "o'_", "1.2225", "434.0900", "Ver. 2.0, Ref. 18"}, {"n=_3", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 18"}, {"n=", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_1", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_2", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_3", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"np_", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_1", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_2", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_3", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_1", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_2", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_3", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=_1", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=_2", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=_3", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 18"}, {"n=_1", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 18"}, {"n=_2", "s'_", "1.6325", "375.1624", "Ver. 2.0, Ref. 18"}, {"n=_3", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 18"}, {"n=", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=_1", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=_1", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=_1", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=_1", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=_1", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=_1", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=_1", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=_2", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=_2", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=_2", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=_2", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=_2", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=_2", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=_2", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=_3", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=_3", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=_3", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=_3", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=_3", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=_3", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=_3", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n+_", "n+_", "1.3940", "193.5604", "Ver. 2.0, Ref. 18"}, {"n+_", "o_", "1.3250", "291.0020", "Ver. 2.0, Ref. 18"}, {"n+_", "s_", "1.7320", "200.1168", "Ver. 2.0, Ref. 18"}, {"n+_", "op_", "1.3120", "261.7060", "Ver. 2.0, Ref. 18"}, {"n+_", "o'_", "1.3120", "234.1060", "Ver. 2.0, Ref. 18"}, {"n+_", "sp_", "1.7020", "183.2952", "Ver. 2.0, Ref. 18"}, {"n+_", "s'_", "1.7020", "198.0952", "Ver. 2.0, Ref. 18"}, {"n+_", "p_", "1.6820", "209.1536", "Ver. 2.0, Ref. 18"}, {"n+_", "h_", "1.0650", "461.1848", "Ver. 2.0, Ref. 18"}, {"n+_", "f_", "1.3520", "178.0372", "Ver. 2.0, Ref. 18"}, {"n+_", "cl_", "1.6890", "217.7248", "Ver. 2.0, Ref. 18"}, {"n+_", "br_", "1.8370", "196.5940", "Ver. 2.0, Ref. 18"}, {"n+_", "i_", "2.0230", "177.2764", "Ver. 2.0, Ref. 18"}, {"n+_", "si_", "1.7920", "206.9412", "Ver. 2.0, Ref. 18"}, {"nz_", "nz_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 18"}, {"nt_", "nt_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 18"}, {"o_", "o_", "1.2080", "833.6868", "Ver. 2.0, Ref. 18"}, {"o_", "s_", "1.6930", "288.0848", "Ver. 2.0, Ref. 18"}, {"o_", "op_", "1.2430", "350.7720", "Ver. 2.0, Ref. 18"}, {"o_", "o'_", "1.2430", "323.1720", "Ver. 2.0, Ref. 18"}, {"o_", "sp_", "1.6330", "271.9584", "Ver. 2.0, Ref. 18"}, {"o_", "s'_", "1.6330", "286.7584", "Ver. 2.0, Ref. 18"}, {"o_", "p_", "1.6100", "245.2000", "Ver. 2.0, Ref. 18"}, {"o_", "si_", "1.6650", "392.8000", "Ver. 2.0, Ref. 18"}, {"o_", "h_", "0.9600", "493.8480", "Ver. 2.0, Ref. 18"}, {"o_", "f_", "1.4180", "224.0000", "Ver. 2.0, Ref. 18"}, {"o_", "cl_", "1.6500", "307.0632", "Ver. 2.0, Ref. 18"}, {"o_", "br_", "1.7980", "284.7988", "Ver. 2.0, Ref. 18"}, {"o_", "i_", "1.9840", "264.9868", "Ver. 2.0, Ref. 18"}, {"o'_", "o'_", "1.1100", "484.8000", "Ver. 2.0, Ref. 18"}, {"o'_", "op_", "1.2300", "272.4000", "Ver. 2.0, Ref. 18"}, {"o'_", "s_", "1.5900", "360.4188", "Ver. 2.0, Ref. 18"}, {"o'_", "sp_", "1.5600", "341.2736", "Ver. 2.0, Ref. 18"}, {"o'_", "s'_", "1.5400", "421.5188", "Ver. 2.0, Ref. 18"}, {"o'_", "p_", "1.4800", "524.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "h_", "0.9830", "458.4610", "Ver. 2.0, Ref. 18"}, {"o'_", "f_", "1.2700", "204.0505", "Ver. 2.0, Ref. 18"}, {"o'_", "cl_", "1.6070", "251.7939", "Ver. 2.0, Ref. 18"}, {"o'_", "br_", "1.7550", "233.2954", "Ver. 2.0, Ref. 18"}, {"o'_", "i_", "1.9410", "213.2317", "Ver. 2.0, Ref. 18"}, {"o'_", "si_", "1.6500", "454.7464", "Ver. 2.0, Ref. 18"}, {"op_", "op_", "1.2300", "300.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s_", "1.6800", "266.7748", "Ver. 2.0, Ref. 18"}, {"op_", "sp_", "1.6500", "247.8440", "Ver. 2.0, Ref. 18"}, {"op_", "s'_", "1.6200", "262.9744", "Ver. 2.0, Ref. 18"}, {"op_", "p_", "1.6300", "286.0904", "Ver. 2.0, Ref. 18"}, {"op_", "h_", "0.9830", "486.0610", "Ver. 2.0, Ref. 18"}, {"op_", "f_", "1.2700", "231.6505", "Ver. 2.0, Ref. 18"}, {"op_", "cl_", "1.6070", "279.3939", "Ver. 2.0, Ref. 18"}, {"op_", "br_", "1.7550", "260.8954", "Ver. 2.0, Ref. 18"}, {"op_", "i_", "1.9410", "240.8317", "Ver. 2.0, Ref. 18"}, {"op_", "si", "1.5870", "292.2400", "Ver. 2.0, Ref. 18"}, {"o-_", "p_", "1.4800", "428.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s_", "2.0547", "180.0000", "Ver. 2.0, Ref. 18"}, {"s_", "sp_", "2.0400", "175.1260", "Ver. 2.0, Ref. 18"}, {"s_", "s'_", "2.0400", "189.9260", "Ver. 2.0, Ref. 18"}, {"s_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 18"}, {"s_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 18"}, {"s_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 18"}, {"s_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 18"}, {"s_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 18"}, {"s_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 18"}, {"s_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 18"}, {"s'_", "s'_", "1.9700", "320.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "p_", "1.9700", "255.2524", "Ver. 2.0, Ref. 18"}, {"s'_", "h_", "1.3730", "316.8138", "Ver. 2.0, Ref. 18"}, {"s'_", "f_", "1.6600", "195.3021", "Ver. 2.0, Ref. 18"}, {"s'_", "cl_", "1.9970", "211.1368", "Ver. 2.0, Ref. 18"}, {"s'_", "br_", "2.1450", "187.6017", "Ver. 2.0, Ref. 18"}, {"s'_", "i_", "2.3310", "167.6272", "Ver. 2.0, Ref. 18"}, {"s'_", "si_", "2.0800", "247.5744", "Ver. 2.0, Ref. 18"}, {"s-_", "p_", "1.9800", "210.9800", "Ver. 2.0, Ref. 18"}, {"sp_", "sp_", "2.0100", "160.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s'_", "1.9900", "240.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "p_", "1.9900", "175.1796", "Ver. 2.0, Ref. 18"}, {"sp_", "h_", "1.3730", "236.5449", "Ver. 2.0, Ref. 18"}, {"sp_", "f_", "1.6600", "180.5021", "Ver. 2.0, Ref. 18"}, {"sp_", "cl_", "1.9970", "196.3368", "Ver. 2.0, Ref. 18"}, {"sp_", "br_", "2.1450", "172.8017", "Ver. 2.0, Ref. 18"}, {"sp_", "i_", "2.3310", "152.8272", "Ver. 2.0, Ref. 18"}, {"sp_", "si_", "2.1000", "167.4260", "Ver. 2.0, Ref. 18"}, {"p_", "p_", "1.9700", "176.0000", "Ver. 2.0, Ref. 18"}, {"p_", "h_", "1.4300", "224.0000", "Ver. 2.0, Ref. 18"}, {"p_", "f_", "1.5400", "230.3664", "Ver. 2.0, Ref. 18"}, {"p_", "cl_", "2.0430", "208.8228", "Ver. 2.0, Ref. 18"}, {"p_", "br_", "2.1800", "183.1472", "Ver. 2.0, Ref. 18"}, {"p_", "i_", "2.3110", "162.7080", "Ver. 2.0, Ref. 18"}, {"p_", "si_", "1.9170", "168.2072", "Ver. 2.0, Ref. 18"}, {"h_", "h_", "0.7461", "398.7301", "Ver. 2.0, Ref. 18"}, {"h_", "f_", "1.0230", "520.7304", "Ver. 2.0, Ref. 18"}, {"h_", "cl_", "1.3600", "345.9024", "Ver. 2.0, Ref. 18"}, {"h_", "br_", "1.5080", "314.1728", "Ver. 2.0, Ref. 18"}, {"h_", "i_", "1.6940", "292.0432", "Ver. 2.0, Ref. 18"}, {"h_", "si_", "1.4630", "288.3168", "Ver. 2.0, Ref. 18"}, {"dw", "dw", "0.7416", "398.2392", "Ver. 2.0, Ref. 18"}, {"f_", "f_", "1.4170", "259.0683", "Ver. 2.0, Ref. 18"}, {"f_", "cl_", "1.6470", "207.1180", "Ver. 2.0, Ref. 18"}, {"f_", "br_", "1.7950", "193.5000", "Ver. 2.0, Ref. 18"}, {"f_", "i_", "1.9810", "174.1664", "Ver. 2.0, Ref. 18"}, {"f_", "si_", "1.5870", "297.3400", "Ver. 2.0, Ref. 18"}, {"cl_", "cl_", "1.9880", "236.5339", "Ver. 2.0, Ref. 18"}, {"cl_", "br_", "2.1320", "209.1876", "Ver. 2.0, Ref. 18"}, {"cl_", "i_", "2.3180", "189.3396", "Ver. 2.0, Ref. 18"}, {"cl_", "si_", "2.0870", "207.9748", "Ver. 2.0, Ref. 18"}, {"br_", "br_", "2.2900", "175.6329", "Ver. 2.0, Ref. 18"}, {"br_", "i_", "2.4660", "165.6156", "Ver. 2.0, Ref. 18"}, {"br_", "si_", "2.2350", "180.2320", "Ver. 2.0, Ref. 18"}, {"i_", "i_", "2.6620", "123.2110", "Ver. 2.0, Ref. 18"}, {"i_", "si_", "2.4210", "158.9664", "Ver. 2.0, Ref. 18"}, {"si_", "si_", "2.4200", "144.0000", "Ver. 2.0, Ref. 18"}}; /* Morse bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= D, 4= ALPHA, 5= CVFF info E = D * (1 - exp(-ALPHA*(R - R0)))^2 */ char * CVFF_morse_bonds[775][6]= {{"c3m_", "c3m_", "1.5100", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c3m_", "c4m_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c3m_", "c_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c3m_", "c'_", "1.5200", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c3m_", "cp_", "1.5100", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "ct_", "1.4000", "85.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "na_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "n3m_", "1.4850", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "n4m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "n_", "1.4600", "72.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "np_", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_1", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_2", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_3", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n+_", "1.4620", "67.7209", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o'_", "1.3800", "79.7371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o3e_", "1.4340", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o4e_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "op_", "1.3800", "86.6371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "sp_", "1.7700", "60.6331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s'_", "1.7700", "64.3331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s4e_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c3m_", "p_", "1.7500", "62.2836", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "si_", "1.8090", "59.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "i_", "2.1200", "50.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "1.5520", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c4m_", "c_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c4m_", "c'_", "1.5200", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c4m_", "cp_", "1.5100", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "ct_", "1.4000", "85.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "na_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "n3m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "n4m_", "1.4670", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "n_", "1.4600", "72.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "np_", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_1", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_2", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_3", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n+_", "1.4620", "67.7209", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o'_", "1.3800", "79.7371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o3e_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o4e_", "1.4462", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "op_", "1.3800", "86.6371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "sp_", "1.7700", "60.6331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s'_", "1.7700", "64.3331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s3e_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "1.8470", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c4m_", "p_", "1.7500", "62.2836", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "si_", "1.8090", "59.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "i_", "2.1200", "50.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c_", "n4m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c'_", "n3m_", "1.4460", "68.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n4m_", "1.4000", "83.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "s3e_", "1.7700", "58.0627", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "s4e_", "1.7700", "58.0627", "1.7361", "Ver. 2.0, Ref. 18"}, {"cp_", "n3m_", "1.4200", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n4m_", "1.4200", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s3e", "1.7300", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s4e", "1.7300", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n3m_", "1.3820", "71.7024", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n4m_", "1.3820", "71.7024", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s3e_", "1.7200", "67.8582", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s4e_", "1.7200", "67.8582", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n3m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n4m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s3e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s4e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n3m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n4m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n_", "1.3670", "55.4242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "np_", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_1", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_2", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_3", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n+_", "1.3940", "52.7898", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "o_", "1.3250", "75.3375", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "op_", "1.3120", "68.5440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "o'_", "1.3120", "61.6440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "sp_", "1.7020", "47.7438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s'_", "1.7020", "51.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s3e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s4e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "p_", "1.6820", "52.6350", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "h_", "1.0260", "88.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"n3m_", "f_", "1.3520", "50.2463", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "cl_", "1.6890", "56.6065", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "br_", "1.8370", "50.9585", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "i_", "2.0230", "46.0026", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "si_", "1.7920", "51.1059", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n4m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n_", "1.3670", "55.4242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "np_", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_1", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_2", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_3", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n+_", "1.3940", "52.7898", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "o_", "1.3250", "75.3375", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "op_", "1.3120", "68.5440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "o'_", "1.3120", "61.6440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "sp_", "1.7020", "47.7438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s'_", "1.7020", "51.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s3e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s4e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "p_", "1.6820", "52.6350", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "h_", "1.0260", "88.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"n4m_", "f_", "1.3520", "50.2463", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "cl_", "1.6890", "56.6065", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "br_", "1.8370", "50.9585", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "i_", "2.0230", "46.0026", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "si_", "1.7920", "51.1059", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s3e_", "1.7050", "52.6552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s4e_", "1.7050", "52.6552", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "s3e_", "1.6930", "72.0212", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "s4e_", "1.6930", "72.0212", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s3e_", "1.6800", "66.6937", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s4e_", "1.6800", "66.6937", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s3e_", "1.6500", "59.8936", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s4e_", "1.6500", "59.8936", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s3e_", "2.1000", "40.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s4e_", "2.1000", "40.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s3e_", "2.0400", "43.7815", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s4e_", "2.0400", "43.7815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s3e_", "2.0400", "47.4815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s4e_", "2.0400", "47.4815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s3e_", "2.0000", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s4e_", "2.0000", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "p_", "2.0200", "46.7198", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "h_", "1.3300", "87.5000", "1.7700", "Ver. 2.0, Ref. 18"}, {"s3e_", "f_", "1.6900", "51.2046", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "cl_", "2.0270", "53.0203", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "br_", "2.1750", "46.9709", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "i_", "2.3610", "41.9406", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "si_", "2.1300", "44.3232", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s4e_", "2.0000", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "p_", "2.0200", "46.7198", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "h_", "1.3300", "87.5000", "1.7700", "Ver. 2.0, Ref. 18"}, {"s4e_", "f_", "1.6900", "51.2046", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "cl_", "2.0270", "53.0203", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "br_", "2.1750", "46.9709", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "i_", "2.3610", "41.9406", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "si_", "2.1300", "44.3232", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "1.5200", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c_", "cp_", "1.5100", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "ct_", "1.4000", "85.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "na_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c_", "n_", "1.4600", "72.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c_", "np_", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_1", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_2", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_3", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n+_", "1.4620", "67.7209", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "o_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "op_", "1.3800", "86.6371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "o'_", "1.3800", "79.7371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "sp_", "1.7700", "60.6331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s'_", "1.7700", "64.3331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c_", "p_", "1.7500", "62.2836", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "si_", "1.8090", "59.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "i_", "2.1200", "50.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c'_", "1.5000", "66.6000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "cp_", "1.5000", "71.0829", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "ct_", "1.4200", "77.7873", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n_", "1.3600", "97.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_1", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_2", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_3", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "np_", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "o_", "1.3400", "100.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "o'_", "1.2200", "145.0000", "2.0600", "Ver. 2.0, Ref. 18"}, {"c'_", "o-_", "1.2500", "135.0000", "2.0600", "Ver. 2.0, Ref. 18"}, {"c'_", "op_", "1.3500", "73.5252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "s_", "1.7700", "58.0627", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "s'_", "1.6110", "169.3000", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "s-_", "1.6800", "93.0000", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "sp_", "1.7400", "53.8383", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c'_", "p_", "1.7200", "60.3455", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "f_", "1.3900", "54.4273", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "cl_", "1.7270", "62.4647", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "br_", "1.8750", "57.0702", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "si_", "1.8300", "59.8388", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "i_", "2.0610", "52.1506", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "cp_", "1.3900", "120.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "ct_", "1.4000", "80.4179", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "na_", "1.4120", "64.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n_", "1.4200", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_1", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_2", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_3", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "np_", "1.3500", "110.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n+_", "1.4120", "62.8336", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "o_", "1.3700", "96.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "o'_", "1.3300", "74.3713", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "op_", "1.3700", "105.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s_", "1.7300", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s'_", "1.7200", "59.9506", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "sp_", "1.7106", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "h_", "1.0800", "116.0000", "1.7700", "Ver. 2.0, Ref. 18"}, {"cp_", "p_", "1.7000", "58.7607", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "i_", "2.0410", "54.3628", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "si_", "1.8100", "56.2919", "2.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "ci_", "1.3900", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "ni", "1.3800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "h_", "1.0800", "116.0000", "1.7700", "Ver. 2.0, Ref. 18"}, {"c=", "c=", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "c=_3", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_3", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_2", "1.4100", "120.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_2", "1.4800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_1", "1.4800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_3", "1.4800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n=", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_3", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_3", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_2", "1.3430", "123.3817", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_2", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_1", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_1", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_2", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_3", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_2", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_3", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n_", "1.3200", "97.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "ct_", "1.2040", "200.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "nt_", "1.1580", "220.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "na_", "1.3820", "71.7024", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n_", "1.3550", "72.3612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_1", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_2", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_3", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n+_", "1.3820", "69.5942", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "o_", "1.3130", "91.9541", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s_", "1.7200", "67.8582", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "op_", "1.3000", "86.6170", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "o'_", "1.3000", "79.7170", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "sp_", "1.6900", "64.0086", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s'_", "1.6900", "67.7086", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "p_", "1.6700", "68.3667", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "h_", "1.0530", "101.1528", "1.7700", "Ver. 2.0, Ref. 18"}, {"ct_", "f_", "1.3400", "69.5983", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "cl_", "1.6770", "73.0488", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "br_", "1.8250", "67.2132", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "i_", "2.0110", "62.2317", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "si_", "1.7800", "66.8241", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "na_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n_", "1.3670", "55.4242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "np_", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=_1", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=_2", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=_3", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n+_", "1.3940", "52.7898", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "o_", "1.3250", "75.3375", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "op_", "1.3120", "68.5440", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "o'_", "1.3120", "61.6440", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "sp_", "1.7020", "47.7438", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s'_", "1.7020", "51.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "p_", "1.6820", "52.6350", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "h_", "1.0260", "88.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"na_", "f_", "1.3520", "50.2463", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "cl_", "1.6890", "56.6065", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "br_", "1.8370", "50.9585", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "i_", "2.0230", "46.0026", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "si_", "1.7920", "51.1059", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n_", "1.3400", "55.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "np_", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_1", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_2", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_3", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n+_", "1.3670", "52.6590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "o_", "1.2980", "75.3158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s_", "1.7050", "52.6552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "op_", "1.2850", "66.7770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "o'_", "1.2850", "59.8770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "sp_", "1.6750", "48.3711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s'_", "1.6750", "52.0711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "p_", "1.6550", "54.9881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "h_", "1.0260", "93.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"n_", "f_", "1.3250", "47.3464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "cl_", "1.6620", "56.8901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "br_", "1.8100", "51.5995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "i_", "1.9960", "46.6743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "si_", "1.7650", "54.2016", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "np_", "1.3400", "102.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_1", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_2", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_3", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "o'_", "1.2850", "73.0770", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "o-_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s'_", "1.6750", "65.2711", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "h_", "1.0260", "93.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"np_", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n=", "1.2100", "162.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "n=_3", "1.2100", "162.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_3", "1.2100", "162.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_2", "1.2760", "122.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_2", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_1", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_3", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o'_", "1.1600", "143.9680", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "o'_", "1.2850", "73.0770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "o'_", "1.2225", "108.5225", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "o'_", "1.1600", "143.9680", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o-_", "1.2225", "108.5225", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o-_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "o-_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "o-_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "o-_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s'_", "1.5900", "122.3100", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s'_", "1.6750", "65.2711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s'_", "1.6325", "93.7906", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s'_", "1.5900", "122.3100", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=_1", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=_2", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=_3", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "n+_", "1.3940", "48.3901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "o_", "1.3250", "72.7505", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "s_", "1.7320", "50.0292", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "op_", "1.3120", "65.4265", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "o'_", "1.3120", "58.5265", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "sp_", "1.7020", "45.8238", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "s'_", "1.7020", "49.5238", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "p_", "1.6820", "52.2884", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "h_", "1.0650", "88.7167", "2.2800", "Ver. 2.0, Ref. 18"}, {"n+_", "f_", "1.3520", "44.5093", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "cl_", "1.6890", "54.4312", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "br_", "1.8370", "49.1485", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "i_", "2.0230", "44.3191", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "si_", "1.7920", "51.7353", "2.0000", "Ver. 2.0, Ref. 18"}, {"nz_", "nz_", "1.09758", "226.8", "2.6829", "Ver. 2.0, Ref. 18"}, {"nt_", "nt_", "1.09758", "226.8000", "2.6829", "Ver. 2.0, Ref. 18"}, {"o_", "o_", "1.20800", "118.86", "2.6484", "Ver. 2.0, Ref. 18"}, {"o_", "s_", "1.6930", "72.0212", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "op_", "1.2430", "87.6930", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "o'_", "1.2430", "80.7930", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "sp_", "1.6330", "67.9896", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "s'_", "1.6330", "71.6896", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "p_", "1.6100", "61.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "si_", "1.6650", "98.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "h_", "0.9600", "95.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"o_", "f_", "1.4180", "56.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "cl_", "1.6500", "76.7658", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "br_", "1.7980", "71.1997", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "i_", "1.9840", "66.2467", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "o'_", "1.1100", "121.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "op_", "1.2300", "68.1000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s_", "1.5900", "90.1047", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "sp_", "1.5600", "85.3184", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s'_", "1.5400", "105.3797", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "p_", "1.4800", "131.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "h_", "0.9830", "114.6152", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "f_", "1.2700", "51.0126", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "cl_", "1.6070", "62.9485", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "br_", "1.7550", "58.3239", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "i_", "1.9410", "53.3079", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "si_", "1.6500", "113.6866", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "op_", "1.2300", "75.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s_", "1.6800", "66.6937", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "sp_", "1.6500", "61.9610", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s'_", "1.6200", "65.7436", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "p_", "1.6300", "71.5226", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "h_", "0.9830", "121.5152", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "f_", "1.2700", "57.9126", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "cl_", "1.6070", "69.8485", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "br_", "1.7550", "65.2239", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "i_", "1.9410", "60.2079", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "si", "1.5870", "73.0600", "2.0000", "Ver. 2.0, Ref. 18"}, {"o-_", "p_", "1.4800", "107.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s_", "2.0547", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "sp_", "2.0400", "43.7815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s'_", "2.0400", "47.4815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "p_", "2.0200", "46.7198", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "h_", "1.3300", "87.5000", "1.7700", "Ver. 2.0, Ref. 18"}, {"s_", "f_", "1.6900", "51.2046", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "cl_", "2.0270", "53.0203", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "br_", "2.1750", "46.9709", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "i_", "2.3610", "41.9406", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "si_", "2.1300", "44.3232", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s'_", "1.9700", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "p_", "1.9700", "63.8131", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "h_", "1.3730", "79.2035", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "f_", "1.6600", "48.8255", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "cl_", "1.9970", "52.7842", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "br_", "2.1450", "46.9004", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "i_", "2.3310", "41.9068", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "si_", "2.0800", "61.8936", "2.0000", "Ver. 2.0, Ref. 18"}, {"s-_", "p_", "1.9800", "52.7450", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "sp_", "2.0100", "40.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s'_", "1.9900", "60.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "p_", "1.9900", "43.7949", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "h_", "1.3730", "75.5035", "1.7700", "Ver. 2.0, Ref. 18"}, {"sp_", "f_", "1.6600", "45.1255", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "cl_", "1.9970", "49.0842", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "br_", "2.1450", "43.2004", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "i_", "2.3310", "38.2068", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "si_", "2.1000", "41.8565", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "p_", "1.9700", "44.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "h_", "1.4300", "56.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "f_", "1.5400", "57.5916", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "cl_", "2.0430", "52.2057", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "br_", "2.1800", "45.7868", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "i_", "2.3110", "40.6770", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "si_", "1.9170", "42.0518", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "h_", "0.74611", "104.207", "1.9561", "Ver. 2.0, Ref. 18"}, {"h_", "f_", "1.0230", "130.1826", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "cl_", "1.3600", "86.4756", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "br_", "1.5080", "78.5432", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "i_", "1.6940", "73.0108", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "si_", "1.4630", "72.0792", "2.0000", "Ver. 2.0, Ref. 18"}, {"dw", "dw", "0.74164", "106.010", "1.9382", "Ver. 2.0, Ref. 18"}, {"f_", "f_", "1.4170", "37.5", "2.6284", "Ver. 2.0, Ref. 18"}, {"f_", "cl_", "1.6470", "51.7795", "2.0000", "Ver. 2.0, Ref. 18"}, {"f_", "br_", "1.7950", "48.3750", "2.0000", "Ver. 2.0, Ref. 18"}, {"f_", "i_", "1.9810", "43.5416", "2.0000", "Ver. 2.0, Ref. 18"}, {"f_", "si_", "1.5870", "74.3350", "2.0000", "Ver. 2.0, Ref. 18"}, {"cl_", "cl_", "1.988", "58.066", "2.0183", "Ver. 2.0, Ref. 18"}, {"cl_", "br_", "2.1320", "52.2969", "2.0000", "Ver. 2.0, Ref. 18"}, {"cl_", "i_", "2.3180", "47.3349", "2.0000", "Ver. 2.0, Ref. 18"}, {"cl_", "si_", "2.0870", "51.9937", "2.0000", "Ver. 2.0, Ref. 18"}, {"br_", "br_", "2.290", "46.336", "1.9469", "Ver. 2.0, Ref. 18"}, {"br_", "i_", "2.4660", "41.4039", "2.0000", "Ver. 2.0, Ref. 18"}, {"br_", "si_", "2.2350", "45.0580", "2.0000", "Ver. 2.0, Ref. 18"}, {"i_", "i_", "2.662", "36.46", "1.8383", "Ver. 2.0, Ref. 18"}, {"i_", "si_", "2.4210", "39.7416", "2.0000", "Ver. 2.0, Ref. 18"}, {"si_", "si_", "3.0900", "36.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"no", "o-", "1.2178", "140.2486", "2.0000", "Ver. 2.3, Ref. 23"}, {"no", "cp", "1.4720", "87.8132", "2.0000", "Ver. 2.3, Ref. 23"}, {"c'", "cp", "1.4720", "87.8132", "2.0000", "Ver. 2.3, Ref. 23"}, {"c", "o", "1.4250", "68.3000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "h", "1.1050", "108.6000", "1.7710", "Ver. 1.0, Ref. 1"}, {"c", "c", "1.5260", "88.0000", "1.9150", "Ver. 1.0, Ref. 1"}, {"c", "c'", "1.5200", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"c'", "o'", "1.2300", "145.0000", "2.0600", "Ver. 1.0, Ref. 1"}, {"n", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n", "c'", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n", "cr", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "1.4600", "72.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"n1", "cr", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n1", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n1", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n1", "1.4600", "72.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"oh", "ho", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"oh", "lp", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"oh", "c", "1.4200", "96.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"o", "ho", "0.9600", "95.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"o", "lp", "0.9600", "95.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c'", "h", "1.1050", "108.6000", "1.7710", "Ver. 1.0, Ref. 1"}, {"c'", "o", "1.3700", "100.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c'", "oh", "1.3700", "100.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c'", "o-", "1.2500", "135.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cp", "h", "1.0800", "116.0000", "1.7700", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "1.3400", "120.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "1.5100", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"cp", "oh", "1.3700", "96.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"sh", "hs", "1.3300", "87.5000", "1.7700", "Ver. 1.0, Ref. 1"}, {"sh", "lp", "1.3300", "87.5000", "1.7700", "Ver. 1.0, Ref. 1"}, {"c", "sh", "1.8200", "57.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "1.8000", "57.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "s1", "1.8000", "57.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"s", "s", "2.0000", "45.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"s1", "s1", "2.0000", "45.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n2", "hn", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n2", "lp", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n2", "1.4700", "68.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"n2", "c'", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cr", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n3", "hn", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n3", "lp", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n3", "1.4700", "68.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"n4", "hn", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n4", "lp", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n4", "1.4700", "68.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"cp", "np", "1.2600", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"np", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"np", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "1.3400", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c5", "h", "1.0800", "116.0000", "1.7700", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "1.3900", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c", "1.5100", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"c5", "np", "1.3800", "80.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c5", "o", "1.3700", "105.0000", "2.0000", "Ver. 1.2, Ref. 3"}, {"c5", "op", "1.3700", "105.0000", "2.0000", "Ver. 1.3, Ref. 8"}, {"c5", "s", "1.7300", "57.0000", "2.0000", "Ver. 1.2, Ref. 3"}, {"cs", "h", "1.0800", "121.0000", "1.7700", "Ver. 1.3, Ref. 6"}, {"cs", "c5", "1.3630", "100.0000", "2.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "1.7106", "80.0000", "2.0000", "Ver. 1.3, Ref. 6"}, {"ci", "h", "1.0800", "116.0000", "1.7700", "Ver. 1.0, Ref. 1"}, {"ci", "ci", "1.3900", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"ci", "c", "1.5100", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"ci", "ni", "1.3800", "80.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"ni", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"ni", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"cp", "n", "1.4200", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"o*", "h*", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"ospc", "hspc", "1.0000", "104.0000", "2.2800", "Ver. 2.3, Ref. 25"}, {"otip", "htip", "0.9570", "104.0000", "2.2800", "Ver. 2.3, Ref. 25"}, {"o*", "lp", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"p", "oh", "1.5700", "75.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "o'", "1.5300", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "1.6100", "61.3000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "o-", "1.5300", "120.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "h", "1.5000", "56.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "lp", "1.5000", "56.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "1.4750", "84.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n=", "c", "1.4750", "84.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n=1", "c", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 19"}, {"n=2", "c", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "n=", "1.2600", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=", "n=1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "n=", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=", "1.2600", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n=1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=2", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c'", "1.5000", "80.7000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c", "1.5000", "80.7000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "1.3300", "163.8000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "h", "1.0900", "90.4000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "h", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "h", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 19"}, {"f", "c", "1.3630", "124.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"f", "lp", "1.3630", "124.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "1.7610", "78.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cl", "lp", "1.7610", "78.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "1.9200", "55.9000", "2.0000", "Ver. 1.0, Ref. 1"}, {"br", "lp", "1.9200", "55.9000", "2.0000", "Ver. 1.0, Ref. 1"}, {"f", "cp", "1.3630", "124.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cl", "cp", "1.7610", "78.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"br", "cp", "1.9200", "55.9000", "2.0000", "Ver. 1.0, Ref. 1"}, {"si", "c", "1.8090", "59.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"si", "h", "1.3820", "55.6000", "2.0000", "Ver. 1.0, Ref. 1"}, {"si", "o", "1.6650", "98.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"h", "h", "0.74611", "104.207", "1.9561", "Ver. 1.3, Ref. 4"}, {"d", "d", "0.74164", "106.010", "1.9382", "Ver. 1.3, Ref. 4"}, {"f", "f", "1.417", "37.5", "2.6284", "Ver. 1.3, Ref. 4"}, {"cl", "cl", "1.988", "58.066", "2.0183", "Ver. 1.3, Ref. 4"}, {"br", "br", "2.290", "46.336", "1.9469", "Ver. 1.3, Ref. 4"}, {"i", "i", "2.662", "36.46", "1.8383", "Ver. 1.3, Ref. 4"}, {"o", "o", "1.208", "118.86", "2.6484", "Ver. 1.3, Ref. 4"}, {"nz", "nz", "1.09758", "226.8", "2.6829", "Ver. 1.3, Ref. 4"}, {"nt", "nt", "1.09758", "226.8", "2.6829", "Ver. 1.3, Ref. 5"}, {"c'", "s'", "1.6110", "169.3000", "1.7361", "Ver. 1.3, Ref. 7"}, {"oz", "ho", "0.9600", "104.0000", "2.2800", "Ver. 1.8, Ref. 14"}, {"sz", "o", "1.6150", "98.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"sz", "oz", "1.6150", "98.2000", "2.0000", "Ver. 1.8, Ref. 14"}, {"sz", "oh", "1.6350", "98.2000", "2.0000", "Ver. 1.8, Ref. 14"}, {"sz", "h", "1.3820", "55.6000", "2.0000", "Ver. 1.8, Ref. 14"}, {"sz", "c", "1.8090", "59.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"al", "c", "1.8090", "59.5000", "2.0000", "Ver. 2.1, Ref. 26"}, {"al", "h", "1.3820", "55.6000", "2.0000", "Ver. 2.1, Ref. 26"}, {"al", "o", "1.7750", "98.2000", "2.0000", "Ver. 2.1, Ref. 26"}, {"al", "oz", "1.7750", "98.2000", "2.0000", "Ver. 2.1, Ref. 26"}, {"az", "oz", "1.7750", "98.2000", "2.0000", "Ver. 2.1, Ref. 26"}, {"az", "oh", "1.7750", "98.2000", "2.0000", "Ver. 2.1, Ref. 26"}, {"az", "h", "1.3820", "55.6000", "2.0000", "Ver. 2.1, Ref. 26"}, {"az", "c", "1.8090", "59.5000", "2.0000", "Ver. 2.1, Ref. 26"}, {"az", "o", "1.7750", "98.2000", "2.0000", "Ver. 2.1, Ref. 26"}, {"sz", "sz", "3.0900", "392.8000", "2.0000", "Ver. 2.1, Ref. 28"}, {"sz", "az", "3.0900", "392.8000", "2.0000", "Ver. 2.1, Ref. 28"}, {"si", "al", "3.0900", "392.8000", "2.0000", "Ver. 2.1, Ref. 28"}, {"az", "az", "3.0900", "392.8000", "2.0000", "Ver. 2.1, Ref. 28"}}; /* Quadratic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= CVFF info E = K2 * (Theta - Theta0)^2 With: - Theta = Angle - Theta0 = Equilibrium angle - K2 = Spring constant */ char * CVFF_angles_auto[563][6]= {{"cp", "cp", "c'", "120.0000", "34.6799", "Ver. 2.3, Ref. 23"}, {"cp", "c'", "o", "120.0000", "54.4949", "Ver. 2.3, Ref. 23"}, {"cp", "c'", "o'", "120.0000", "54.4949", "Ver. 2.3, Ref. 23"}, {"cp", "cp", "no", "120.0000", "34.6799", "Ver. 2.3, Ref. 23"}, {"cp", "no", "o-", "120.0000", "54.4949", "Ver. 2.3, Ref. 23"}, {"o-", "no", "o-", "120.0000", "113.5731", "Ver. 2.3, Ref. 23"}, {"c", "o", "c'", "109.5000", "60.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "h", "106.4000", "39.5000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o'", "120.0000", "68.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c'", "109.5000", "45.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c'", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "hn", "115.0000", "37.5000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c", "118.0000", "111.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n", "c", "122.0000", "35.0000", "Ver. 1.0, Ref. 1"}, {"n", "c", "c", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"n", "c", "h", "109.5000", "51.5000", "Ver. 1.0, Ref. 1"}, {"n", "c", "c'", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "114.1000", "53.5000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "120.0000", "68.0000", "Ver. 1.0, Ref. 1"}, {"c", "o", "ho", "106.0000", "58.5000", "Ver. 1.0, Ref. 1"}, {"o", "c", "h", "109.5000", "57.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "109.5000", "70.0000", "Ver. 1.0, Ref. 1"}, {"o", "c", "o", "109.5000", "70.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n", "hn", "125.0000", "33.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "o", "123.0000", "145.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o", "110.0000", "122.8000", "Ver. 1.0, Ref. 1"}, {"c'", "o", "ho", "112.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o", "110.0000", "55.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "120.0000", "55.0000", "Ver. 1.0, Ref. 1"}, {"o-", "c'", "o-", "123.0000", "145.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o-", "120.0000", "68.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o-", "120.0000", "55.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "c", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "120.0000", "45.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "cp", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "120.0000", "44.2000", "Ver. 1.0, Ref. 1"}, {"c", "c", "cp", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"cp", "o", "ho", "109.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"o", "cp", "cp", "120.0000", "60.0000", "Ver. 1.0, Ref. 1"}, {"c", "sh", "hs", "96.0000", "48.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "sh", "109.0000", "45.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "109.0000", "45.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "sh", "109.0000", "62.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "109.0000", "62.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "c", "99.0000", "58.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "109.5000", "75.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "n3", "109.5000", "57.3000", "Ver. 1.0, Ref. 1"}, {"hn", "n3", "hn", "105.5000", "36.0000", "Ver. 1.0, Ref. 1"}, {"c", "n3", "c", "112.0000", "86.3000", "Ver. 1.0, Ref. 1"}, {"c", "n3", "hn", "110.0000", "41.6000", "Ver. 1.0, Ref. 1"}, {"c", "c", "n3", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "np", "134.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "cp", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "hn", "120.0000", "27.5000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "c5", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "c5", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "c5", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "h", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "c5", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c5", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "c5", "c5", "120.0000", "44.2000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c5", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"np", "c5", "np", "134.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "c5", "np", "120.0000", "40.0000", "Ver. 1.0, Ref. 1"}, {"c5", "np", "c5", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"c5", "np", "hn", "120.0000", "27.5000", "Ver. 1.0, Ref. 1"}, {"c", "c5", "np", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"cp", "o", "c", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n", "cp", "115.0000", "37.5000", "Ver. 1.0, Ref. 1"}, {"n3", "c", "c'", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "cp", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c", "o", "c", "109.5000", "60.0000", "Ver. 1.0, Ref. 1"}, {"h*", "o*", "h*", "104.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"hspc", "ospc", "hspc", "109.4700", "50.0000", "Ver. 2.3, Ref. 25"}, {"htip", "otip", "htip", "104.5200", "50.0000", "Ver. 2.3, Ref. 25"}, {"p", "o", "c", "120.0000", "72.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "p", "120.0000", "72.0000", "Ver. 1.0, Ref. 1"}, {"o", "p", "o", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o'", "p", "o", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o'", "p", "o'", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o-", "p", "o-", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o", "p", "o-", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"h", "p", "o-", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"c5", "np", "c", "128.8000", "70.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "o", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "h", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "c", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c'", "n", "114.1000", "53.5000", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "n", "114.1000", "53.5000", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "n", "114.1000", "53.5000", "Ver. 2.0, Ref. 19"}, {"c'", "c=", "c=", "122.3000", "36.2000", "Ver. 1.0, Ref. 1"}, {"c'", "c=1", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=2", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=1", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=2", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=1", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=2", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c=", "122.3000", "36.2000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=1", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=1", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "h", "120.0000", "37.5000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "h", "120.0000", "37.5000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "h", "120.0000", "37.5000", "Ver. 2.0, Ref. 19"}, {"c=", "c", "c=", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "c=", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=1", "c", "c=1", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=1", "c", "c=2", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "c=2", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c'", "c", "c=", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c'", "c", "c=1", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c'", "c", "c=2", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"h", "c", "c=", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "110.0000", "44.4000", "Ver. 2.0, Ref. 19"}, {"h", "c", "c=2", "110.0000", "44.4000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "h", "121.2000", "33.8000", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=1", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=1", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=1", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=2", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=2", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=2", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c=1", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=1", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=1", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c=2", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=2", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=2", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=", "np", "c=", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"c=1", "np", "c=", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=2", "np", "c=", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=1", "np", "c=1", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=1", "np", "c=2", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=2", "np", "c=2", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"o'", "c'", "c=", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "c=1", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"o'", "c'", "c=2", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c'", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c'", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c'", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"h", "c=", "np", "120.0000", "40.0000", "Ver. 1.0, Ref. 1"}, {"h", "c=1", "np", "120.0000", "40.0000", "Ver. 2.0, Ref. 19"}, {"h", "c=2", "np", "120.0000", "40.0000", "Ver. 2.0, Ref. 19"}, {"c", "np", "c=", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"c", "np", "c=1", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"c", "np", "c=2", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"cp", "np", "c5", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"c5", "cp", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"c5", "cp", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"f", "c", "c", "107.8000", "99.0000", "Ver. 1.0, Ref. 1"}, {"f", "c", "h", "107.1000", "62.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "c", "107.8000", "85.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "h", "107.1000", "67.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "c", "107.8000", "96.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "h", "107.1000", "56.0000", "Ver. 1.0, Ref. 1"}, {"f", "cp", "cp", "120.0000", "99.0000", "Ver. 1.0, Ref. 1"}, {"cl", "cp", "cp", "120.0000", "85.0000", "Ver. 1.0, Ref. 1"}, {"br", "cp", "cp", "120.0000", "96.0000", "Ver. 1.0, Ref. 1"}, {"si", "c", "h", "112.3000", "34.6000", "Ver. 1.0, Ref. 1"}, {"c", "si", "c", "113.5000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "si", "h", "109.1000", "32.7000", "Ver. 1.0, Ref. 1"}, {"h", "si", "h", "112.0000", "31.8000", "Ver. 1.0, Ref. 1"}, {"si", "c", "si", "122.5000", "42.2000", "Ver. 1.0, Ref. 1"}, {"c", "si", "o", "117.3000", "44.1000", "Ver. 1.0, Ref. 1"}, {"o", "si", "h", "113.4000", "33.3000", "Ver. 1.0, Ref. 1"}, {"si", "o", "si", "149.8000", "31.1000", "Ver. 1.0, Ref. 1"}, {"o", "si", "o", "113.1000", "42.3000", "Ver. 1.0, Ref. 1"}, {"si", "o", "c", "124.1000", "56.4000", "Ver. 1.0, Ref. 1"}, {"nt", "nt", "cp", "180.0", "50.0", "Ver. 1.3, Ref. 5"}, {"nt", "nt", "c", "180.0", "50.0", "Ver. 1.3, Ref. 5"}, {"cs", "c5", "c5", "112.7000", "70.0000", "Ver. 1.3, Ref. 6"}, {"cs", "c5", "h", "124.0000", "30.0000", "Ver. 1.3, Ref. 6"}, {"c5", "cs", "h", "124.0000", "30.0000", "Ver. 1.3, Ref. 6"}, {"cs", "sp", "cs", "92.5670", "126.5060", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "c5", "111.0390", "88.7595", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "h", "119.9000", "30.2723", "Ver. 1.3, Ref. 6"}, {"s'", "c'", "h", "121.6300", "40.9360", "Ver. 1.3, Ref. 7"}, {"h", "c'", "h", "117.0200", "26.3900", "Ver. 1.3, Ref. 7"}, {"c", "c'", "c", "120.0000", "40.0000", "Ver. 1.3, Ref. 7"}, {"s'", "c'", "c", "120.0000", "40.0000", "Ver. 1.3, Ref. 7"}, {"c5", "op", "c5", "120.0000", "75.0000", "Ver. 1.3, Ref. 8"}, {"sz", "oz", "sz", "149.8000", "31.1000", "Ver. 1.8, Ref. 14"}, {"oz", "sz", "oz", "109.4700", "100.3000", "Ver. 1.8, Ref. 14"}, {"oz", "sz", "h", "113.4000", "33.3000", "Ver. 1.8, Ref. 14"}, {"sz", "oz", "ho", "113.4000", "33.3000", "Ver. 1.8, Ref. 14"}, {"az", "oz", "ho", "113.4000", "33.3000", "Ver. 1.8, Ref. 14"}, {"h", "sz", "h", "112.0000", "31.8000", "Ver. 1.8, Ref. 14"}, {"al", "oz", "al", "149.8000", "31.1000", "Ver. 2.1, Ref. 26"}, {"oz", "al", "oz", "109.4700", "100.3000", "Ver. 2.1, Ref. 26"}, {"oz", "al", "h", "113.4000", "33.3000", "Ver. 2.1, Ref. 26"}, {"h", "al", "h", "112.0000", "31.8000", "Ver. 2.1, Ref. 26"}, {"az", "oz", "az", "149.8000", "31.1000", "Ver. 2.1, Ref. 26"}, {"oz", "az", "oz", "109.4700", "100.3000", "Ver. 2.1, Ref. 26"}, {"oz", "az", "h", "113.4000", "33.3000", "Ver. 2.1, Ref. 26"}, {"h", "az", "h", "112.0000", "31.8000", "Ver. 2.1, Ref. 26"}, {"o", "al", "o", "113.1000", "42.3000", "Ver. 2.1, Ref. 26"}, {"o", "al", "h", "113.4000", "33.3000", "Ver. 2.1, Ref. 26"}, {"al", "oz", "sz", "149.8000", "31.1000", "Ver. 2.1, Ref. 26"}, {"o", "az", "o", "109.4700", "42.3000", "Ver. 2.1, Ref. 26"}, {"o", "az", "h", "113.4000", "33.3000", "Ver. 2.1, Ref. 26"}, {"f", "sz", "oz", "113.1000", "42.3000", "Ver. 2.1, Ref. 28"}, {"sz", "f", "sz", "113.1000", "42.3000", "Ver. 2.1, Ref. 28"}, {"f", "sz", "sz", "113.1000", "42.3000", "Ver. 2.1, Ref. 28"}, {"f", "sz", "f", "113.1000", "42.3000", "Ver. 2.1, Ref. 28"}, {"sz", "sz", "sz", "109.4700", "5.0000", "Ver. 2.1, Ref. 28"}, {"sz", "az", "sz", "109.4700", "5.0000", "Ver. 2.1, Ref. 28"}, {"az", "sz", "sz", "109.4700", "5.0000", "Ver. 2.1, Ref. 28"}, {"si", "si", "si", "109.4700", "5.0000", "Ver. 2.1, Ref. 28"}, {"si", "al", "si", "109.4700", "5.0000", "Ver. 2.1, Ref. 28"}, {"al", "si", "si", "109.4700", "5.0000", "Ver. 2.1, Ref. 28"}, {"c3m_", "c3m_", "c3m_", "60.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c3m_", "c3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c3m_", "n3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "c_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "c3m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "c4m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o3e_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o3e_", "c3m_", "c3m_", "60.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c3m_", "c3m_", "60.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c3m_", "s3e_", "60.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c3m_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c3m_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c3m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c3m_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c3m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "c4m_", "95.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "n4m_", "88.3400", "50.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "o4e_", "91.8400", "70.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "s4e_", "94.5900", "62.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "o_", "121.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "n4m_", "88.4000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "s4e_", "89.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "c_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "c3m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "c4m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o3e_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c4m_", "s4e_", "89.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c4m_", "s4e_", "91.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c4m_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c4m_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c4m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c4m_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c4m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "c3m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "c4m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "n3m_", "125.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "n4m_", "123.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "c3m_", "113.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n3m_", "c3m_", "60.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "n3m_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"h_", "n3m_", "c3m_", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"f_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"si_", "n3m_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"*", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n4m_", "*", "110.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n4m_", "c4m_", "91.3800", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "n4m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "n4m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "n4m_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"h_", "n4m_", "c4m_", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"f_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"si_", "n4m_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"*", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o3e_", "c3m_", "58.9580", "60.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o4e_", "c4m_", "91.7370", "60.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "o_", "*", "120.0000", "72.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "o_", "*", "120.0010", "72.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"*", "op_", "*", "108.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "op_", "*", "106.0000", "27.5000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "c3m_", "44.5000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o'_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s3e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s3e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "s3e_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "s3e_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "c4m_", "85.9200", "58.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o'_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s4e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s4e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "s4e_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "s4e_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"c4m_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"c3m_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"c4m_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "o_", "110.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "s_", "115.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "c_", "115.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 18"}, {"o_", "c'_", "*", "110.0000", "122.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c'_", "*", "123.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c'_", "*", "110.0000", "55.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c'_", "n_", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "o_", "123.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "h_", "120.0000", "55.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "n_", "123.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c'_", "h_", "117.0200", "26.3900", "Ver. 2.0, Ref. 18"}, {"f_", "c'_", "*", "120.0000", "99.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c'_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 18"}, {"c_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"o_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"s_", "cp_", "c_", "114.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"h_", "cp_", "*", "120.0000", "37.0000", "Ver. 2.0, Ref. 18"}, {"f_", "cp_", "*", "120.0000", "99.0000", "Ver. 2.0, Ref. 18"}, {"si_", "cp_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 18"}, {"n_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c=_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c=_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c=_", "*", "120.0000", "37.5000", "Ver. 2.0, Ref. 18"}, {"f_", "c=_", "*", "120.0000", "96.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c=_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c=_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "*", "180.0000", "200.0000", "Ver. 2.0, Ref. 18"}, {"c_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "na_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "na_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"f_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "na_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"si_", "na_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"*", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "n_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "n_", "*", "120.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"f_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"h_", "n_", "*", "122.0000", "35.0000", "Ver. 2.0, Ref. 18"}, {"si_", "n_", "*", "120.0000", "35.0000", "Ver. 2.0, Ref. 18"}, {"*", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"n_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"o_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"f_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "*", "120.0000", "27.5000", "Ver. 2.0, Ref. 18"}, {"si_", "np_", "*", "120.0000", "27.5000", "Ver. 2.0, Ref. 18"}, {"*", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"*", "nt_", "*", "180.0", "50.0", "Ver. 2.0, Ref. 18"}, {"c_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"n_", "o_", "*", "120.0000", "72.0000", "Ver. 2.0, Ref. 18"}, {"o_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"h_", "o_", "*", "109.0000", "58.5000", "Ver. 2.0, Ref. 18"}, {"h_", "o*_", "h_", "104.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"f_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"si_", "o_", "*", "124.1000", "56.4000", "Ver. 2.0, Ref. 18"}, {"si_", "o_", "si", "149.8000", "31.1000", "Ver. 2.0, Ref. 18"}, {"*", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s_", "*", "102.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o'_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "s_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "s_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "s_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "s_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"n_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"o_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"o'_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"s_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"s'_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"h_", "sp_", "*", "96.0000", "48.0000", "Ver. 2.0, Ref. 18"}, {"f_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"si_", "sp_", "*", "96.0000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "sp_", "*", "92.5670", "120.0000", "Ver. 2.0, Ref. 18"}, {"c_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"n_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"o_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "p_", "*", "120.0000", "110.0000", "Ver. 2.0, Ref. 18"}, {"s_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "p_", "*", "120.0000", "100.0000", "Ver. 2.0, Ref. 18"}, {"h_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"f_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"si_", "p_", "*", "109.5000", "30.0000", "Ver. 2.0, Ref. 18"}, {"*", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"c_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"n_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"o_", "si_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s_", "si_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"h_", "si_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "si_", "*", "117.3000", "44.1000", "Ver. 2.0, Ref. 18"}, {"si_", "si_", "*", "113.4000", "33.3000", "Ver. 2.0, Ref. 18"}, {"*", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= Kphi, 5= n, 6= Phi0, 7= CVFF info E = Kphi * [ 1 + cos(n*Phi - Phi0) ] With: - Kphi = Rotation barrier - n = Periodicity / multiplicity - Phi0 = Equilibrium angle */ char * CVFF_torsions_auto[295][8]= {{"*", "c_", "n3n_", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n3n_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "n3n_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "n3n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n3n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n3n_", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "n3n_", "*", "0.3000", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "n3n_", "*", "0.3000", "2", "0.", "Ver. 2.0, Ref. 18"}, {"*", "si_", "n3n_", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c_", "*", "0.1580", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c'_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "cp_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=_1", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=_2", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=_3", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "na_", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "np_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=_1", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=_2", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=_3", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "o_", "*", "0.1300", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "s_", "*", "0.1367", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "p_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "si_", "*", "0.1111", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c'_", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "cp_", "*", "2.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=_1", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=_2", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=_3", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n_", "*", "3.2000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n_", "h_", "1.2000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=_1", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=_2", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=_3", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "np_", "*", "5.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "np_", "h", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "o_", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "op", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "sp_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "si_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "cp_", "*", "3.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=_1", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=_2", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=_3", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "na_", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n_", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "np_", "*", "2.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "np_", "h_", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=_1", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=_2", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=_3", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "o_", "*", "1.8000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "o_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "op", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "si_", "*", "0.1667", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "p_", "*", "0.2500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "c=", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "c=_3", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "c=_3", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "c=_2", "*", "3.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "c=_1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "c=_2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "c=_3", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "n=", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n=_3", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n=_3", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n=_1", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n=_2", "*", "2.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n=_1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n=_2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n=_1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n=_3", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n=_2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c+_", "n_", "*", "3.4000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "np_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "o_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "s_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "si_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "na_", "*", "0.2500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "np_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=_1", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=_2", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=_3", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "o_", "*", "0.0975", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "s_", "*", "0.0975", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "si_", "*", "0.0667", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n_", "*", "0.3750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "np_", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "np_", "h_", "0.3750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=_1", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=_2", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=_3", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "o_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "s_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "si_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=_1", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=_2", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=_3", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "np_", "*", "11.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "o_", "*", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "op", "*", "11.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "s_", "*", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "sp_", "*", "10.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "si_", "*", "0.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=_1", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=_2", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=_3", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "np_", "*", "5.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "o_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "op", "*", "5.50000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "s_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "sp_", "*", "5.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "si_", "*", "0.1250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "n=", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "n=_3", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n=_3", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "n=_2", "*", "7.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n=_1", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n=_2", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "n=_3", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "o_", "*", "5.0000", "3", "0.", "Ver. 2.0, Ref. 22"}, {"*", "o_", "s_", "*", "5.0000", "3", "0.", "Ver. 2.0, Ref. 22"}, {"*", "o_", "si_", "*", "0.3333", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "p_", "*", "0.3750", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "s_", "*", "5.5000", "2", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "si_", "*", "0.2333", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "p_", "*", "0.3750", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "si_", "si_", "*", "0.1667", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "si_", "p_", "*", "0.0000", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp", "no", "*", "10.0000", "2", "180.0000", "Ver. 2.3, Ref. 23"}, {"*", "cp", "c'", "*", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "c", "*", "1.4225", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "c'", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "n", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "o", "*", "0.3900", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "of", "*", "0.3900", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "n2", "*", "6.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cr", "n2", "*", "13.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "n", "cr", "*", "13.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "o", "*", "4.5000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "cp", "*", "12.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "c", "*", "0.0000", "2", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "c", "cp", "0.6750", "4", "0.0000", "Ver. 1.9, Ref. 17"}, {"*", "ct", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "o", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "n", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "s", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "ct", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "c'", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "o", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "n", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "s", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "cp", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "cp", "o", "*", "1.5000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o", "c", "1.8000", "2", "180.0000", "Ver. 1.9, Ref. 16"}, {"*", "cp", "of", "*", "3.5000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "sh", "*", "0.4200", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "s", "*", "0.4200", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "s", "s", "*", "5.5000", "2", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "n3", "c", "*", "0.8000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "n2", "c", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "np", "*", "4.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "n2", "*", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "n", "*", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "p", "o", "*", "0.7500", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=", "np", "*", "4.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=1", "np", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "np", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=", "c=", "*", "16.3000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=1", "c=", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "c=", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=1", "c=1", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=1", "c=2", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "c=2", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=", "c", "*", "1.2660", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=1", "c", "*", "1.2660", "3", "0.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "c", "*", "1.2660", "3", "0.0000", "Ver. 2.0, Ref. 19"}, {"*", "np", "c", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "c=", "*", "1.8000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "c=1", "*", "1.8000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c'", "c=2", "*", "1.8000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "cs", "cp", "*", "6.0000", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"cs", "sp", "cs", "cp", "12.0000", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"cs", "sp", "cs", "h", "3.9316", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "cp", "cp", "6.4517", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "cp", "h", "2.0000", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"c", "c'", "n", "c", "3.2000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "hn", "1.2000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "c", "3.8000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "hn", "1.8000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "c", "3.2000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "c", "0.4000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "h", "0.2800", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "si", "c", "si", "-1.7000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "si", "c", "si", "1.0000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "o", "-0.1000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "si", "o", "si", "0.4000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "si", "o", "si", "1.0000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"si", "o", "si", "o", "0.3000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"o", "si", "o", "c", "0.1000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "si", "o", "c", "-0.1000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"si", "o", "c", "h", "0.7000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"sz", "oz", "sz", "oz", "0.3000", "3", "0.0000", "Ver. 1.8, Ref. 14"}, {"h", "sz", "oz", "sz", "1.0000", "3", "0.0000", "Ver. 1.8, Ref. 14"}}; /* Out of plane / impropers / improper 0, 1, 2, 3 = Keys, 4= K, 5= Chi0, 6= CVFF info E = K * (Chi - Chi0)^2 */ char * CVFF_impropers[41][8]= {{"c'", "cp", "cp", "cp", "10.0000", "2", "180.0000", "Ver. 2.3, Ref. 23"}, {"cp", "c'", "o'", "o'", "10.0000", "2", "180.0000", "Ver. 2.3, Ref. 23"}, {"cp", "no", "o'", "o'", "10.0000", "2", "180.0000", "Ver. 2.3, Ref. 23"}, {"cp", "cp", "cp", "no", "10.0000", "2", "180.0000", "Ver. 2.3, Ref. 23"}, {"c", "c'", "n", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c", "hn", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n2", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n2", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n2", "c'", "hn", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o'", "o'", "11.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "o'", "11.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c", "c", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "n", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "h", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "c", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "cp", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o'", "0.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "np", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "n2", "hn", "hn", "0.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n2", "n2", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"hn", "np", "cp", "cp", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "cp", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c'", "n2", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c'", "c=", "11.1000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c=", "np", "c=", "11.1000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c", "c=", "11.1000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "np", "cp", "cp", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"sp", "cs", "cp", "h", "2.9998", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"cp", "cp", "cs", "h", "0.3700", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"h", "c'", "s'", "h", "7.5300", "2", "180.0000", "Ver. 1.3, Ref. 7"}, {"c", "c'", "c", "s'", "7.5300", "2", "180.0000", "Ver. 1.3, Ref. 7"}, {"*", "c'_", "*", "*", "10.0000", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "*", "*", "0.3700", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "c=_", "*", "*", "11.1000", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "n_", "*", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "np_", "*", "*", "0.3700", "2", "180.0000", "Ver. 2.0, Ref. 18"}}; /* Non-bonded (12-6) 0= Key, 1= A, 2= B, 3= CVFF info E = Aij/r^12 - Bij/r^6 where Aij = sqrt( Ai * Aj ) Bij = sqrt( Bi * Bj )0 */ char * CVFF_vdw[45][4]= {{"h", "7108.4660", "32.87076", "Ver. 1.0, Ref. 1"}, {"cg", "1790340.7240", "528.48190", "Ver. 1.0, Ref. 1"}, {"o'", "272894.7846", "498.87880", "Ver. 1.0, Ref. 1"}, {"oz", "272894.7846", "498.87880", "Ver. 1.8, Ref. 14"}, {"n", "2266872.4000", "1230.55700", "Ver. 1.0, Ref. 1"}, {"c'", "2968753.3590", "1325.70810", "Ver. 1.0, Ref. 1"}, {"c", "1981049.2250", "1125.99800", "Ver. 1.0, Ref. 1"}, {"hn", "0.00000001", "0.00000", "Ver. 1.0, Ref. 1"}, {"s", "365906.4000", "250.80000", "Ver. 1.0, Ref. 1"}, {"s'", "1395550.1000", "956.80800", "Ver. 1.3, Ref. 6"}, {"o*", "629358.0000", "625.50000", "Ver. 1.0, Ref. 1"}, {"ospc", "629358.0000", "625.50000", "Ver. 2.3, Ref. 25"}, {"otip", "582000.0000", "595.00000", "Ver. 2.3, Ref. 25"}, {"h*", "0.00000001", "0.00000", "Ver. 1.0, Ref. 1"}, {"hspc", "0.00000001", "0.00000", "Ver. 2.3, Ref. 25"}, {"htip", "0.00000001", "0.00000", "Ver. 2.3, Ref. 25"}, {"p", "6025894.0000", "2195.60000", "Ver. 1.0, Ref. 1"}, {"ca+", "119025.0000", "240.25000", "Ver. 2.0, Ref. 20"}, {"si", "3149175.0000", "710.00000", "Ver. 1.0, Ref. 1"}, {"sz", "3149175.0000", "710.00000", "Ver. 1.8, Ref. 14"}, {"f", "201106.0000", "235.20000", "Ver. 1.0, Ref. 1"}, {"cl", "1059166.0000", "541.00000", "Ver. 1.0, Ref. 1"}, {"br", "3572030.0000", "1195.00000", "Ver. 1.0, Ref. 1"}, {"Na", "14000.0000", "300.00000", "Ver. 1.0, Ref. 1"}, {"Cl", "25552052.0000", "3307.00450", "Ver. 1.0, Ref. 1"}, {"Br", "34375640.0000", "3517.84460", "Ver. 1.0, Ref. 1"}, {"ar", "2312930.0000", "1484.09200", "Ver. 1.3, Ref. 9"}, {"he", "6315.5582", "22.64953", "Ver. 2.4, Ref. 30"}, {"nu", "0.00000001", "0.00000", "Ver. 1.0, Ref. 1"}, {"Al", "3784321.4254", "11699.84934", "Ver. 2.1, Ref. 27"}, {"Au", "4603936.5046", "13692.05223", "Ver. 2.1, Ref. 27"}, {"Pb", "24856948.1942", "23280.48320", "Ver. 2.1, Ref. 27"}, {"Ni", "955901.6916", "6768.92014", "Ver. 2.1, Ref. 27"}, {"Pd", "2581174.9390", "10078.92459", "Ver. 2.1, Ref. 27"}, {"Pt", "4576819.9618", "16963.30818", "Ver. 2.1, Ref. 27"}, {"Ag", "3712095.6064", "10865.51833", "Ver. 2.1, Ref. 27"}, {"Cu", "1007210.0670", "6166.70278", "Ver. 2.1, Ref. 27"}, {"Cr", "1222517.4049", "7523.46700", "Ver. 2.1, Ref. 27"}, {"Fe", "1186612.1982", "7590.28296", "Ver. 2.1, Ref. 27"}, {"Li", "5192358.6600", "9916.81768", "Ver. 2.1, Ref. 27"}, {"Mo", "5869689.0344", "21298.66304", "Ver. 2.1, Ref. 27"}, {"W", "7876811.6340", "27853.23915", "Ver. 2.1, Ref. 27"}, {"al", "11422865.0000", "2282.96606", "Ver. 2.2, Ref. 29"}, {"mg", "3149175.0000", "710.00000", "Ver. 2.1, Ref. 27"}, {"K", "24856948.1942", "23280.48320", "Ver. 2.1, Ref. 27"}}; /* Bond increments To implement atomic charges */ char * CVFF_bond_increments[683][5]= {{"no", "o-", "0.1684", "-0.1684", "Ver. 2.3, Ref. 23"}, {"no", "cp", "-0.1792", "0.1792", "Ver. 2.3, Ref. 23"}, {"c'", "cp", "-0.1792", "0.1792", "Ver. 2.0, Ref. 18"}, {"c", "cr", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "ci", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n1", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "s1", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c'", "o-", "0.0700", "-0.5700", "Ver. 1.0, Ref. 1"}, {"ci", "h", "-0.2300", "0.2300", "Ver. 1.0, Ref. 1"}, {"ci", "ci", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"ci", "ni", "0.3200", "-0.0700", "Ver. 1.0, Ref. 1"}, {"cr", "n", "0.3800", "-0.3800", "Ver. 1.0, Ref. 1"}, {"cr", "n1", "0.5000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n=", "0.4000", "-0.4000", "Ver. 1.0, Ref. 1"}, {"n", "hn", "-0.2800", "0.2800", "Ver. 1.0, Ref. 1"}, {"n", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n1", "hn", "0.0000", "0.5000", "Ver. 1.0, Ref. 1"}, {"n1", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n2", "hn", "-0.2800", "0.2800", "Ver. 1.0, Ref. 1"}, {"n2", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n3", "hn", "-0.1400", "0.1400", "Ver. 1.0, Ref. 1"}, {"n3", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n4", "hn", "-0.1100", "0.3600", "Ver. 1.0, Ref. 1"}, {"n4", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "hn", "-0.2800", "0.2800", "Ver. 1.0, Ref. 1"}, {"np", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"ni", "hn", "-0.3600", "0.3600", "Ver. 1.0, Ref. 1"}, {"ni", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o", "ho", "-0.2233", "0.2233", "Ver. 1.0, Ref. 1"}, {"o", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"oh", "ho", "-0.3500", "0.3500", "Ver. 1.0, Ref. 1"}, {"oh", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o*", "h*", "-0.4100", "0.4100", "Ver. 1.0, Ref. 1"}, {"ospc", "hspc", "-0.4100", "0.4100", "Ver. 2.3, Ref. 25"}, {"otip", "htip", "-0.4170", "0.4170", "Ver. 2.3, Ref. 25"}, {"o*", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o-", "p", "-0.8500", "0.3500", "Ver. 1.0, Ref. 1"}, {"s-", "p", "-0.6824", "0.1824", "Ver. 2.0, Ref. 18"}, {"oz", "sz", "-0.1500", "0.1500", "Ver. 1.8, Ref. 14"}, {"sh", "hs", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"sh", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"s1", "s1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "p", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"h", "sz", "0.0200", "-0.0200", "Ver. 1.8, Ref. 14"}, {"d", "d", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"p", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"f", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cl", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"br", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c5", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cs", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "c-", "0.0865", "-0.0865", "Ver. 2.0, Ref. 18"}, {"c", "ct", "0.0400", "-0.0400", "Ver. 1.2, Ref. 3"}, {"c", "n3", "0.2200", "-0.2200", "Ver. 1.0, Ref. 1"}, {"c", "n", "0.2200", "-0.2200", "Ver. 1.0, Ref. 1"}, {"c", "n2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n=", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "n=1", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "n=2", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "np", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "n4", "0.4200", "-0.1700", "Ver. 1.0, Ref. 1"}, {"c", "nt", "0.1000", "-0.1000", "Ver. 1.3, Ref. 5"}, {"c", "nz", "0.3640", "-0.3640", "Ver. 2.0, Ref. 18"}, {"c", "o", "0.1500", "-0.1500", "Ver. 1.0, Ref. 1"}, {"c", "oh", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"c", "oz", "0.1742", "-0.1742", "Ver. 2.0, Ref. 18"}, {"c", "op", "0.3957", "-0.3957", "Ver. 2.0, Ref. 18"}, {"c", "s", "-0.0500", "0.0500", "Ver. 1.0, Ref. 1"}, {"c", "sh", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c", "sp", "0.1180", "-0.1180", "Ver. 2.0, Ref. 18"}, {"c", "s'", "0.1180", "-0.1180", "Ver. 2.0, Ref. 18"}, {"c", "p", "-0.0785", "0.0785", "Ver. 2.0, Ref. 18"}, {"c", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c", "f", "0.2750", "-0.2750", "Ver. 1.0, Ref. 1"}, {"c", "cl", "0.2260", "-0.2260", "Ver. 1.0, Ref. 1"}, {"c", "br", "0.1920", "-0.1920", "Ver. 1.0, Ref. 1"}, {"c", "i", "0.1120", "-0.1120", "Ver. 2.0, Ref. 18"}, {"c", "si", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c'", "c5", "0.0", "0.0", "Ver. 1.5, Ref. 11"}, {"c'", "cs", "0.0", "0.0", "Ver. 1.5, Ref. 11"}, {"c'", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c=1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c=2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c-", "-0.1368", "0.1368", "Ver. 2.0, Ref. 18"}, {"c'", "ct", "-0.0927", "0.0927", "Ver. 2.0, Ref. 18"}, {"c'", "n3", "-0.0442", "0.0442", "Ver. 2.0, Ref. 18"}, {"c'", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n=", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "n=1", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "n=2", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "np", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "n4", "0.1331", "0.1169", "Ver. 2.0, Ref. 18"}, {"c'", "nt", "0.1641", "-0.1641", "Ver. 2.0, Ref. 18"}, {"c'", "o", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"c'", "oh", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"c'", "oz", "-0.0135", "0.0135", "Ver. 2.0, Ref. 18"}, {"c'", "op", "0.0300", "-0.0300", "Ver. 1.4, Ref. 10"}, {"c'", "o'", "0.3800", "-0.3800", "Ver. 1.0, Ref. 1"}, {"c'", "s", "-0.1528", "0.1528", "Ver. 2.0, Ref. 18"}, {"c'", "sh", "-0.2033", "0.2033", "Ver. 2.0, Ref. 18"}, {"c'", "sp", "-0.1079", "0.1079", "Ver. 2.0, Ref. 18"}, {"c'", "s'", "0.0", "0.0", "Ver. 1.3, Ref. 7"}, {"c'", "p", "-0.3283", "0.3283", "Ver. 2.0, Ref. 18"}, {"c'", "h", "-0.2132", "0.2132", "Ver. 1.0, Ref. 1"}, {"c'", "f", "0.1116", "-0.1116", "Ver. 2.0, Ref. 18"}, {"c'", "cl", "-0.0594", "0.0594", "Ver. 2.0, Ref. 18"}, {"c'", "br", "-0.1152", "0.1152", "Ver. 2.0, Ref. 18"}, {"c'", "i", "-0.1291", "0.1291", "Ver. 2.0, Ref. 18"}, {"c'", "si", "-0.4405", "0.4405", "Ver. 2.0, Ref. 18"}, {"cp", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cs", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"cp", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"cp", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"cp", "n", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"cp", "n2", "0.1050", "-0.1050", "Ver. 1.1, Ref. 2"}, {"cp", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cp", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cp", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cp", "np", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"cp", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"cp", "nt", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"cp", "o", "0.0282", "-0.0282", "Ver. 1.9, Ref. 16"}, {"cp", "oh", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"cp", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"cp", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cp", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cp", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"cp", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"cp", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"cp", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"cp", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"cp", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"cp", "f", "0.1300", "-0.1300", "Ver. 1.0, Ref. 1"}, {"cp", "cl", "0.1020", "-0.1020", "Ver. 1.0, Ref. 1"}, {"cp", "br", "0.0800", "-0.0800", "Ver. 1.0, Ref. 1"}, {"cp", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"cp", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c5", "c5", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c5", "cs", "0.0000", "0.0000", "Ver. 1.3, Ref. 6"}, {"c5", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c5", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c5", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c5", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c5", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c5", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c5", "n", "0.1100", "-0.1100", "Ver. 1.4, Ref. 10"}, {"c5", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "np", "0.1400", "-0.1400", "Ver. 1.0, Ref. 1"}, {"c5", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c5", "nt", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c5", "o", "0.1100", "-0.1100", "Ver. 1.2, Ref. 3"}, {"c5", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c5", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c5", "op", "0.1100", "-0.1100", "Ver. 1.3, Ref. 8"}, {"c5", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c5", "s", "-0.1500", "0.1500", "Ver. 1.2, Ref. 3"}, {"c5", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c5", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c5", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c5", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c5", "h", "-0.1300", "0.1300", "Ver. 1.0, Ref. 1"}, {"c5", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c5", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c5", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c5", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c5", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"cs", "cs", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"cs", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"cs", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"cs", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"cs", "nt", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"cs", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"cs", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"cs", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"cs", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cs", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cs", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"cs", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"cs", "sp", "-0.1500", "0.1500", "Ver. 1.3, Ref. 6"}, {"cs", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"cs", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"cs", "h", "-0.1300", "0.1300", "Ver. 1.3, Ref. 6"}, {"cs", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"cs", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"cs", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"cs", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"cs", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c=", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c=", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c=", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c=", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c=", "nt", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c=", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c=", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"c=", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c=", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c=", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c=", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c=", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c=", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c=", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c=", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c=1", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=1", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=1", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c=1", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c=1", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c=1", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=1", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=1", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=1", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=1", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=1", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=1", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c=1", "nt", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c=1", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=1", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c=1", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=1", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=1", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=1", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"c=1", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c=1", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=1", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=1", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c=1", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c=1", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c=1", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c=1", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c=1", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c=1", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c=2", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=2", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c=2", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c=2", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c=2", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=2", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=2", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=2", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=2", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=2", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=2", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c=2", "nt", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c=2", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=2", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c=2", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=2", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=2", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=2", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"c=2", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c=2", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=2", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=2", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c=2", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c=2", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c=2", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c=2", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c=2", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c=2", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c-", "c-", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c-", "ct", "0.0432", "-0.0432", "Ver. 2.0, Ref. 18"}, {"c-", "n3", "0.0824", "-0.0824", "Ver. 2.0, Ref. 18"}, {"c-", "n", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n2", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n=", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n=1", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n=2", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "np", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n4", "0.2597", "-0.0097", "Ver. 2.0, Ref. 18"}, {"c-", "nt", "0.2854", "-0.2854", "Ver. 2.0, Ref. 18"}, {"c-", "o", "0.1012", "-0.1012", "Ver. 2.0, Ref. 18"}, {"c-", "oh", "-0.0058", "0.0058", "Ver. 2.0, Ref. 18"}, {"c-", "oz", "0.1012", "-0.1012", "Ver. 2.0, Ref. 18"}, {"c-", "op", "0.3241", "-0.3241", "Ver. 2.0, Ref. 18"}, {"c-", "o'", "0.3241", "-0.3241", "Ver. 2.0, Ref. 18"}, {"c-", "s", "-0.0146", "0.0146", "Ver. 2.0, Ref. 18"}, {"c-", "sh", "-0.0650", "0.0650", "Ver. 2.0, Ref. 18"}, {"c-", "sp", "0.0304", "-0.0304", "Ver. 2.0, Ref. 18"}, {"c-", "s'", "0.0304", "-0.0304", "Ver. 2.0, Ref. 18"}, {"c-", "s-", "-0.1223", "-0.3777", "Ver. 2.0, Ref. 18"}, {"c-", "p", "-0.1744", "0.1744", "Ver. 2.0, Ref. 18"}, {"c-", "h", "-0.1549", "0.1549", "Ver. 2.0, Ref. 18"}, {"c-", "f", "0.2241", "-0.2241", "Ver. 2.0, Ref. 18"}, {"c-", "cl", "0.0747", "-0.0747", "Ver. 2.0, Ref. 18"}, {"c-", "br", "0.0281", "-0.0281", "Ver. 2.0, Ref. 18"}, {"c-", "i", "0.0185", "-0.0185", "Ver. 2.0, Ref. 18"}, {"c-", "si", "-0.2775", "0.2775", "Ver. 2.0, Ref. 18"}, {"ct", "ct", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"ct", "n3", "0.0419", "-0.0419", "Ver. 2.0, Ref. 18"}, {"ct", "n", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n2", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n=", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n=1", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n=2", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "np", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n4", "0.2181", "0.0319", "Ver. 2.0, Ref. 18"}, {"ct", "nt", "0.2454", "-0.2454", "Ver. 2.0, Ref. 18"}, {"ct", "o", "0.0644", "-0.0644", "Ver. 2.0, Ref. 18"}, {"ct", "oh", "-0.0420", "0.0420", "Ver. 2.0, Ref. 18"}, {"ct", "oz", "0.0644", "-0.0644", "Ver. 2.0, Ref. 18"}, {"ct", "op", "0.2874", "-0.2874", "Ver. 2.0, Ref. 18"}, {"ct", "o'", "0.2874", "-0.2874", "Ver. 2.0, Ref. 18"}, {"ct", "s", "-0.0581", "0.0581", "Ver. 2.0, Ref. 18"}, {"ct", "sh", "-0.1082", "0.1082", "Ver. 2.0, Ref. 18"}, {"ct", "sp", "-0.0135", "0.0135", "Ver. 2.0, Ref. 18"}, {"ct", "s'", "-0.0135", "0.0135", "Ver. 2.0, Ref. 18"}, {"ct", "p", "-0.2216", "0.2216", "Ver. 2.0, Ref. 18"}, {"ct", "h", "-0.2000", "0.2000", "Ver. 1.2, Ref. 3"}, {"ct", "f", "0.1873", "-0.1873", "Ver. 2.0, Ref. 18"}, {"ct", "cl", "0.0319", "-0.0319", "Ver. 2.0, Ref. 18"}, {"ct", "br", "-0.0173", "0.0173", "Ver. 2.0, Ref. 18"}, {"ct", "i", "-0.0281", "0.0281", "Ver. 2.0, Ref. 18"}, {"ct", "si", "-0.3266", "0.3266", "Ver. 2.0, Ref. 18"}, {"n3", "n3", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n3", "n", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n2", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n=", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n=1", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n=2", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "np", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n4", "0.1650", "0.0850", "Ver. 2.0, Ref. 18"}, {"n3", "nt", "0.1927", "-0.1927", "Ver. 2.0, Ref. 18"}, {"n3", "o", "0.0249", "-0.0249", "Ver. 2.0, Ref. 18"}, {"n3", "oh", "-0.0754", "0.0754", "Ver. 2.0, Ref. 18"}, {"n3", "oz", "0.0249", "-0.0249", "Ver. 2.0, Ref. 18"}, {"n3", "op", "0.2369", "-0.2369", "Ver. 2.0, Ref. 18"}, {"n3", "o'", "0.2369", "-0.2369", "Ver. 2.0, Ref. 18"}, {"n3", "s", "-0.0967", "0.0967", "Ver. 2.0, Ref. 18"}, {"n3", "sh", "-0.1434", "0.1434", "Ver. 2.0, Ref. 18"}, {"n3", "sp", "-0.0551", "0.0551", "Ver. 2.0, Ref. 18"}, {"n3", "s'", "-0.0551", "0.0551", "Ver. 2.0, Ref. 18"}, {"n3", "p", "-0.2518", "0.2518", "Ver. 2.0, Ref. 18"}, {"n3", "h", "-0.2386", "0.2386", "Ver. 2.0, Ref. 18"}, {"n3", "f", "0.1415", "-0.1415", "Ver. 2.0, Ref. 18"}, {"n3", "cl", "-0.0117", "0.0117", "Ver. 2.0, Ref. 18"}, {"n3", "br", "-0.0601", "0.0601", "Ver. 2.0, Ref. 18"}, {"n3", "i", "-0.0714", "0.0714", "Ver. 2.0, Ref. 18"}, {"n3", "si", "-0.3501", "0.3501", "Ver. 2.0, Ref. 18"}, {"n", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n", "nt", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n2", "n2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n2", "nt", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n2", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n2", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n2", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n2", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n2", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n2", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n2", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n2", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n2", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n2", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n2", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n2", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n2", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n2", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n2", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n2", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n=", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n=", "nt", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n=", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n=", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=", "o-", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n=", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n=", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n=", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n=", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n=", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n=", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n=", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n=", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n=1", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=1", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=1", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=1", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n=1", "nt", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n=1", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=1", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n=1", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=1", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=1", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=1", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n=1", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n=1", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=1", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=1", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n=1", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n=1", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n=1", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n=1", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n=1", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n=1", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n=2", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=2", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=2", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n=2", "nt", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n=2", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=2", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n=2", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=2", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=2", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=2", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n=2", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n=2", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=2", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=2", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n=2", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n=2", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n=2", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n=2", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n=2", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n=2", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"np", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"np", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"np", "nt", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"np", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"np", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"np", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"np", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"np", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"np", "o-", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"np", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"np", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"np", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"np", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"np", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"np", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"np", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"np", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"np", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"np", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"np", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n4", "n4", "0.2500", "0.2500", "Ver. 2.0, Ref. 18"}, {"n4", "nt", "0.2842", "-0.0342", "Ver. 2.0, Ref. 18"}, {"n4", "o", "0.1245", "0.1255", "Ver. 2.0, Ref. 18"}, {"n4", "oh", "0.0242", "0.2258", "Ver. 2.0, Ref. 18"}, {"n4", "oz", "0.1245", "0.1255", "Ver. 2.0, Ref. 18"}, {"n4", "op", "0.3418", "-0.0918", "Ver. 2.0, Ref. 18"}, {"n4", "o'", "0.3418", "-0.0918", "Ver. 2.0, Ref. 18"}, {"n4", "s", "-0.0257", "0.2757", "Ver. 2.0, Ref. 18"}, {"n4", "sh", "-0.0723", "0.3223", "Ver. 2.0, Ref. 18"}, {"n4", "sp", "0.0159", "0.2341", "Ver. 2.0, Ref. 18"}, {"n4", "s'", "0.0159", "0.2341", "Ver. 2.0, Ref. 18"}, {"n4", "p", "-0.1994", "0.4494", "Ver. 2.0, Ref. 18"}, {"n4", "h", "-0.1978", "0.4478", "Ver. 2.0, Ref. 18"}, {"n4", "f", "0.2438", "0.0062", "Ver. 2.0, Ref. 18"}, {"n4", "cl", "0.0642", "0.1858", "Ver. 2.0, Ref. 18"}, {"n4", "br", "0.0048", "0.2452", "Ver. 2.0, Ref. 18"}, {"n4", "i", "-0.0114", "0.2614", "Ver. 2.0, Ref. 18"}, {"n4", "si", "-0.3083", "0.5583", "Ver. 2.0, Ref. 18"}, {"nt", "nt", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"nt", "o", "-0.1523", "0.1523", "Ver. 2.0, Ref. 18"}, {"nt", "oh", "-0.2490", "0.2490", "Ver. 2.0, Ref. 18"}, {"nt", "oz", "-0.1523", "0.1523", "Ver. 2.0, Ref. 18"}, {"nt", "op", "0.0585", "-0.0585", "Ver. 2.0, Ref. 18"}, {"nt", "o'", "0.0585", "-0.0585", "Ver. 2.0, Ref. 18"}, {"nt", "s", "-0.3010", "0.3010", "Ver. 2.0, Ref. 18"}, {"nt", "sh", "-0.3457", "0.3457", "Ver. 2.0, Ref. 18"}, {"nt", "sp", "-0.2612", "0.2612", "Ver. 2.0, Ref. 18"}, {"nt", "s'", "-0.2612", "0.2612", "Ver. 2.0, Ref. 18"}, {"nt", "p", "-0.4691", "0.4691", "Ver. 2.0, Ref. 18"}, {"nt", "h", "-0.4688", "0.4688", "Ver. 2.0, Ref. 18"}, {"nt", "f", "-0.0367", "0.0367", "Ver. 2.0, Ref. 18"}, {"nt", "cl", "-0.2141", "0.2141", "Ver. 2.0, Ref. 18"}, {"nt", "br", "-0.2727", "0.2727", "Ver. 2.0, Ref. 18"}, {"nt", "i", "-0.2889", "0.2889", "Ver. 2.0, Ref. 18"}, {"nt", "si", "-0.5738", "0.5738", "Ver. 2.0, Ref. 18"}, {"o", "o", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"o", "oh", "-0.0921", "0.0921", "Ver. 2.0, Ref. 18"}, {"o", "oz", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"o", "op", "0.1962", "-0.1962", "Ver. 2.0, Ref. 18"}, {"o", "s", "-0.1143", "0.1143", "Ver. 2.0, Ref. 18"}, {"o", "sh", "-0.1565", "0.1565", "Ver. 2.0, Ref. 18"}, {"o", "sp", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"o", "s'", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"o", "p", "-0.3500", "0.3500", "Ver. 1.0, Ref. 1"}, {"o", "h", "-0.2432", "0.2432", "Ver. 2.0, Ref. 18"}, {"o", "f", "0.1077", "-0.1077", "Ver. 2.0, Ref. 18"}, {"o", "cl", "-0.0367", "0.0367", "Ver. 2.0, Ref. 18"}, {"o", "br", "-0.0818", "0.0818", "Ver. 2.0, Ref. 18"}, {"o", "i", "-0.0924", "0.0924", "Ver. 2.0, Ref. 18"}, {"o", "si", "-0.1500", "0.1500", "Ver. 1.0, Ref. 1"}, {"oh", "oh", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"oh", "oz", "0.0921", "-0.0921", "Ver. 2.0, Ref. 18"}, {"oh", "op", "0.2853", "-0.2853", "Ver. 2.0, Ref. 18"}, {"oh", "s", "-0.0063", "0.0063", "Ver. 2.0, Ref. 18"}, {"oh", "sh", "-0.0485", "0.0485", "Ver. 2.0, Ref. 18"}, {"oh", "sp", "0.0313", "-0.0313", "Ver. 2.0, Ref. 18"}, {"oh", "s'", "0.0313", "-0.0313", "Ver. 2.0, Ref. 18"}, {"oh", "p", "-0.1500", "0.1500", "Ver. 1.0, Ref. 1"}, {"oh", "h", "-0.1190", "0.1190", "Ver. 2.0, Ref. 18"}, {"oh", "f", "0.1983", "-0.1983", "Ver. 2.0, Ref. 18"}, {"oh", "cl", "0.0686", "-0.0686", "Ver. 2.0, Ref. 18"}, {"oh", "br", "0.0295", "-0.0295", "Ver. 2.0, Ref. 18"}, {"oh", "i", "0.0216", "-0.0216", "Ver. 2.0, Ref. 18"}, {"oh", "si", "-0.2188", "0.2188", "Ver. 2.0, Ref. 18"}, {"oh", "sz", "-0.2188", "0.2188", "Ver. 2.0, Ref. 18"}, {"oh", "az", "-0.2188", "0.2188", "Ver. 2.0, Ref. 18"}, {"oz", "oz", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"oz", "op", "0.1962", "-0.1962", "Ver. 2.0, Ref. 18"}, {"oz", "s", "-0.1143", "0.1143", "Ver. 2.0, Ref. 18"}, {"oz", "sh", "-0.1565", "0.1565", "Ver. 2.0, Ref. 18"}, {"oz", "sp", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"oz", "s'", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"oz", "p", "-0.2548", "0.2548", "Ver. 2.0, Ref. 18"}, {"oz", "h", "-0.2432", "0.2432", "Ver. 2.0, Ref. 18"}, {"oz", "ho", "-0.1", "0.1", "Ver. 2.0, Ref. 18"}, {"oz", "f", "0.1077", "-0.1077", "Ver. 2.0, Ref. 18"}, {"oz", "cl", "-0.0367", "0.0367", "Ver. 2.0, Ref. 18"}, {"oz", "br", "-0.0818", "0.0818", "Ver. 2.0, Ref. 18"}, {"oz", "i", "-0.0924", "0.0924", "Ver. 2.0, Ref. 18"}, {"oz", "si", "-0.1500", "0.1500", "Ver. 2.0, Ref. 18"}, {"oz", "sz", "-0.1500", "0.1500", "Ver. 2.0, Ref. 18"}, {"oz", "az", "-0.0", "0.0", "Ver. 2.0, Ref. 18"}, {"op", "op", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"op", "s", "-0.3386", "0.3386", "Ver. 2.0, Ref. 18"}, {"op", "sh", "-0.3791", "0.3791", "Ver. 2.0, Ref. 18"}, {"op", "sp", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"op", "s'", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"op", "p", "-0.4933", "0.4933", "Ver. 2.0, Ref. 18"}, {"op", "h", "-0.4943", "0.4943", "Ver. 2.0, Ref. 18"}, {"op", "f", "-0.0888", "0.0888", "Ver. 2.0, Ref. 18"}, {"op", "cl", "-0.2585", "0.2585", "Ver. 2.0, Ref. 18"}, {"op", "br", "-0.3140", "0.3140", "Ver. 2.0, Ref. 18"}, {"op", "i", "-0.3297", "0.3297", "Ver. 2.0, Ref. 18"}, {"op", "si", "-0.5883", "0.5883", "Ver. 2.0, Ref. 18"}, {"o'", "o'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"o'", "s", "-0.3386", "0.3386", "Ver. 2.0, Ref. 18"}, {"o'", "sh", "-0.3791", "0.3791", "Ver. 2.0, Ref. 18"}, {"o'", "sp", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"o'", "s'", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"o'", "p", "-0.8500", "0.3500", "Ver. 1.0, Ref. 1"}, {"o'", "h", "-0.4943", "0.4943", "Ver. 2.0, Ref. 18"}, {"o'", "f", "-0.0888", "0.0888", "Ver. 2.0, Ref. 18"}, {"o'", "cl", "-0.2585", "0.2585", "Ver. 2.0, Ref. 18"}, {"o'", "br", "-0.3140", "0.3140", "Ver. 2.0, Ref. 18"}, {"o'", "i", "-0.3297", "0.3297", "Ver. 2.0, Ref. 18"}, {"o'", "si", "-0.5883", "0.5883", "Ver. 2.0, Ref. 18"}, {"s", "s", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"s", "sh", "-0.0509", "0.0509", "Ver. 2.0, Ref. 18"}, {"s", "sp", "0.0455", "-0.0455", "Ver. 2.0, Ref. 18"}, {"s", "s'", "0.0455", "-0.0455", "Ver. 2.0, Ref. 18"}, {"s", "p", "-0.1600", "0.1600", "Ver. 2.0, Ref. 18"}, {"s", "h", "-0.1392", "0.1392", "Ver. 2.0, Ref. 18"}, {"s", "f", "0.2380", "-0.2380", "Ver. 2.0, Ref. 18"}, {"s", "cl", "0.0898", "-0.0898", "Ver. 2.0, Ref. 18"}, {"s", "br", "0.0437", "-0.0437", "Ver. 2.0, Ref. 18"}, {"s", "i", "0.0345", "-0.0345", "Ver. 2.0, Ref. 18"}, {"s", "si", "-0.2634", "0.2634", "Ver. 2.0, Ref. 18"}, {"sh", "sh", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"sh", "sp", "0.0964", "-0.0964", "Ver. 2.0, Ref. 18"}, {"sh", "s'", "0.0964", "-0.0964", "Ver. 2.0, Ref. 18"}, {"sh", "p", "-0.1032", "0.1032", "Ver. 2.0, Ref. 18"}, {"sh", "h", "-0.0787", "0.0787", "Ver. 2.0, Ref. 18"}, {"sh", "f", "0.2794", "-0.2794", "Ver. 2.0, Ref. 18"}, {"sh", "cl", "0.1392", "-0.1392", "Ver. 2.0, Ref. 18"}, {"sh", "br", "0.0966", "-0.0966", "Ver. 2.0, Ref. 18"}, {"sh", "i", "0.0889", "-0.0889", "Ver. 2.0, Ref. 18"}, {"sh", "si", "-0.2032", "0.2032", "Ver. 2.0, Ref. 18"}, {"sp", "sp", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"sp", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"sp", "p", "-0.2106", "0.2106", "Ver. 2.0, Ref. 18"}, {"sp", "h", "-0.1932", "0.1932", "Ver. 2.0, Ref. 18"}, {"sp", "f", "0.2011", "-0.2011", "Ver. 2.0, Ref. 18"}, {"sp", "cl", "0.0457", "-0.0457", "Ver. 2.0, Ref. 18"}, {"sp", "br", "-0.0034", "0.0034", "Ver. 2.0, Ref. 18"}, {"sp", "i", "-0.0140", "0.0140", "Ver. 2.0, Ref. 18"}, {"sp", "si", "-0.3172", "0.3172", "Ver. 2.0, Ref. 18"}, {"s'", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"s'", "p", "-0.2106", "0.2106", "Ver. 2.0, Ref. 18"}, {"s'", "h", "-0.1932", "0.1932", "Ver. 2.0, Ref. 18"}, {"s'", "f", "0.2011", "-0.2011", "Ver. 2.0, Ref. 18"}, {"s'", "cl", "0.0457", "-0.0457", "Ver. 2.0, Ref. 18"}, {"s'", "br", "-0.0034", "0.0034", "Ver. 2.0, Ref. 18"}, {"s'", "i", "-0.0140", "0.0140", "Ver. 2.0, Ref. 18"}, {"s'", "si", "-0.3172", "0.3172", "Ver. 2.0, Ref. 18"}, {"p", "p", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"p", "h", "0.0356", "-0.0356", "Ver. 2.0, Ref. 18"}, {"p", "f", "0.3869", "-0.3869", "Ver. 2.0, Ref. 18"}, {"p", "cl", "0.2544", "-0.2544", "Ver. 2.0, Ref. 18"}, {"p", "br", "0.2156", "-0.2156", "Ver. 2.0, Ref. 18"}, {"p", "i", "0.2110", "-0.2110", "Ver. 2.0, Ref. 18"}, {"p", "si", "-0.1069", "0.1069", "Ver. 2.0, Ref. 18"}, {"h", "h", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"h", "f", "0.3823", "-0.3823", "Ver. 2.0, Ref. 18"}, {"h", "cl", "0.2404", "-0.2404", "Ver. 2.0, Ref. 18"}, {"h", "br", "0.1978", "-0.1978", "Ver. 2.0, Ref. 18"}, {"h", "i", "0.1923", "-0.1923", "Ver. 2.0, Ref. 18"}, {"h", "si", "0.0200", "-0.0200", "Ver. 1.0, Ref. 1"}, {"f", "f", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"f", "cl", "-0.1589", "0.1589", "Ver. 2.0, Ref. 18"}, {"f", "br", "-0.2099", "0.2099", "Ver. 2.0, Ref. 18"}, {"f", "i", "-0.2234", "0.2234", "Ver. 2.0, Ref. 18"}, {"f", "si", "-0.4789", "0.4789", "Ver. 2.0, Ref. 18"}, {"cl", "cl", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"cl", "br", "-0.0507", "0.0507", "Ver. 2.0, Ref. 18"}, {"cl", "i", "-0.0623", "0.0623", "Ver. 2.0, Ref. 18"}, {"cl", "si", "-0.3598", "0.3598", "Ver. 2.0, Ref. 18"}, {"br", "br", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"br", "i", "-0.0110", "0.0110", "Ver. 2.0, Ref. 18"}, {"br", "si", "-0.3272", "0.3272", "Ver. 2.0, Ref. 18"}, {"i", "i", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"i", "si", "-0.3263", "0.3263", "Ver. 2.0, Ref. 18"}, {"si", "si", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}}; atomes_1.3.1/src/calc/force_fields/force_fields.h0000664000175000017500000002160515212624223021423 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file force_fields.h * @short Variable declarations for the creation of the force field database * @author Sébastien Le Roux */ /* * This header file: 'force_fields.h' * * Contains: - Variable declarations for the creation of the force field database */ #ifndef FORCE_FIELDS_H_ #define FORCE_FIELDS_H_ /* Amber force fields */ // amber94 extern int amber94_objects[14]; extern int amber94_dim[14]; extern char * amber94_atoms[2][4]; extern char * amber94_equi[2][15]; extern char * amber94_bonds[83][5]; extern char * amber94_angles[191][6]; extern char * amber94_dihedrals[81][9]; extern char * amber94_impropers[31][8]; extern char * amber94_vdw[34][4]; // amber96 extern int amber96_objects[14]; extern int amber96_dim[14]; extern char * amber96_atoms[2][4]; extern char * amber96_equi[2][15]; extern char * amber96_bonds[83][5]; extern char * amber96_angles[191][6]; extern char * amber96_dihedrals[81][9]; extern char * amber96_impropers[31][8]; extern char * amber96_vdw[35][4]; // amber98 extern int amber98_objects[14]; extern int amber98_dim[14]; extern char * amber98_atoms[2][4]; extern char * amber98_equi[2][15]; extern char * amber98_bonds[83][5]; extern char * amber98_angles[191][6]; extern char * amber98_dihedrals[83][9]; extern char * amber98_impropers[31][8]; extern char * amber98_vdw[35][4]; // amber99 extern int amber99_objects[14]; extern int amber99_dim[14]; extern char * amber99_atoms[2][5]; extern char * amber99_equi[2][15]; extern char * amber99_bonds[116][5]; extern char * amber99_angles[281][6]; extern char * amber99_dihedrals[164][9]; extern char * amber99_impropers[38][8]; extern char * amber99_vdw[42][4]; /* CHARMM force fields */ // CHARMM-charmm22_prot extern int charmm22_prot_objects[14]; extern int charmm22_prot_dim[14]; extern char * charmm22_prot_atoms[47][5]; extern char * charmm22_prot_bonds[122][5]; extern char * charmm22_prot_angles[324][8]; extern char * charmm22_prot_dihedrals[445][8]; extern char * charmm22_prot_impropers[34][8]; extern char * charmm22_prot_vdw[47][6]; // CHARMM-charmm22_prot_metals extern int charmm22_prot_metals_objects[14]; extern int charmm22_prot_metals_dim[14]; extern char * charmm22_prot_metals_atoms[98][5]; extern char * charmm22_prot_metals_bonds[139][5]; extern char * charmm22_prot_metals_angles[345][8]; extern char * charmm22_prot_metals_dihedrals[452][8]; extern char * charmm22_prot_metals_impropers[43][8]; extern char * charmm22_prot_metals_vdw[98][6]; // CHARMM-charmm35_ethers extern int charmm35_ethers_objects[14]; extern int charmm35_ethers_dim[14]; extern char * charmm35_ethers_atoms[13][5]; extern char * charmm35_ethers_bonds[22][5]; extern char * charmm35_ethers_angles[55][8]; extern char * charmm35_ethers_dihedrals[106][8]; extern char * charmm35_ethers_vdw[13][6]; // CHARMM-charmm36_carb extern int charmm36_carb_objects[14]; extern int charmm36_carb_dim[14]; extern char * charmm36_carb_atoms[59][5]; extern char * charmm36_carb_bonds[153][5]; extern char * charmm36_carb_angles[438][8]; extern char * charmm36_carb_dihedrals[1354][8]; extern char * charmm36_carb_impropers[14][8]; extern char * charmm36_carb_vdw[57][6]; // CHARMM-charmm36_cgenff extern int charmm36_cgenff_objects[14]; extern int charmm36_cgenff_dim[14]; extern char * charmm36_cgenff_atoms[163][5]; extern char * charmm36_cgenff_bonds[506][5]; extern char * charmm36_cgenff_angles[1561][8]; extern char * charmm36_cgenff_dihedrals[3937][8]; extern char * charmm36_cgenff_impropers[125][8]; extern char * charmm36_cgenff_vdw[156][6]; // CHARMM-charmm36_lipid extern int charmm36_lipid_objects[14]; extern int charmm36_lipid_dim[14]; extern char * charmm36_lipid_atoms[29][5]; extern char * charmm36_lipid_bonds[50][5]; extern char * charmm36_lipid_angles[131][8]; extern char * charmm36_lipid_dihedrals[180][8]; extern char * charmm36_lipid_impropers[4][8]; extern char * charmm36_lipid_vdw[29][6]; // CHARMM-charmm36m_prot extern int charmm36m_prot_objects[14]; extern int charmm36m_prot_dim[14]; extern char * charmm36m_prot_atoms[53][5]; extern char * charmm36m_prot_bonds[132][5]; extern char * charmm36m_prot_angles[364][8]; extern char * charmm36m_prot_dihedrals[706][8]; extern char * charmm36m_prot_impropers[35][8]; extern char * charmm36m_prot_vdw[53][6]; // CHARMM-charmm36_na extern int charmm36_na_objects[14]; extern int charmm36_na_dim[14]; extern char * charmm36_na_atoms[42][5]; extern char * charmm36_na_bonds[89][5]; extern char * charmm36_na_angles[226][8]; extern char * charmm36_na_dihedrals[502][8]; extern char * charmm36_na_impropers[15][8]; extern char * charmm36_na_vdw[42][6]; // CHARMM-charmm36_prot extern int charmm36_prot_objects[14]; extern int charmm36_prot_dim[14]; extern char * charmm36_prot_atoms[53][5]; extern char * charmm36_prot_bonds[132][5]; extern char * charmm36_prot_angles[364][8]; extern char * charmm36_prot_dihedrals[705][8]; extern char * charmm36_prot_impropers[35][8]; extern char * charmm36_prot_vdw[53][6]; // CHARMM-charmm_silicates extern int charmm_silicates_objects[14]; extern int charmm_silicates_dim[14]; extern char * charmm_silicates_atoms[13][5]; extern char * charmm_silicates_bonds[14][5]; extern char * charmm_silicates_angles[27][8]; extern char * charmm_silicates_dihedrals[34][8]; extern char * charmm_silicates_vdw[13][6]; /* FF force fields */ // Compass extern int Compass_objects[14]; extern int Compass_dim[14]; extern char * Compass_atoms[45][5]; extern char * Compass_equivalence[46][7]; extern char * Compass_bonds[54][7]; extern char * Compass_angles[94][8]; extern char * Compass_torsions[95][11]; extern char * Compass_inversions[22][7]; extern char * Compass_vdw[46][4]; extern char * Compass_bond_increments[55][5]; // PCFF extern int PCFF_objects[14]; extern int PCFF_dim[14]; extern char * PCFF_atoms[133][5]; extern char * PCFF_equivalence_auto[108][11]; extern char * PCFF_equivalence[134][7]; extern char * PCFF_bonds_auto[627][5]; extern char * PCFF_bonds[126][7]; extern char * PCFF_angles_auto[329][6]; extern char * PCFF_angles[302][8]; extern char * PCFF_torsions_auto[216][8]; extern char * PCFF_torsions[492][11]; extern char * PCFF_inversions[83][7]; extern char * PCFF_vdw[94][4]; extern char * PCFF_bond_increments[564][5]; // CFF91 extern int CFF91_objects[14]; extern int CFF91_dim[14]; extern char * CFF91_atoms[93][5]; extern char * CFF91_equivalence_auto[97][11]; extern char * CFF91_equivalence[95][7]; extern char * CFF91_bonds_auto[667][5]; extern char * CFF91_bonds[58][7]; extern char * CFF91_angles_auto[330][6]; extern char * CFF91_angles[155][8]; extern char * CFF91_torsions_auto[216][8]; extern char * CFF91_torsions[294][11]; extern char * CFF91_inversions[70][7]; extern char * CFF91_vdw[40][4]; extern char * CFF91_bond_increments[560][5]; // CVFF extern int CVFF_objects[14]; extern int CVFF_dim[14]; extern char * CVFF_atoms[133][5]; extern char * CVFF_equivalence_auto[123][11]; extern char * CVFF_equivalence[129][7]; extern char * CVFF_bonds_auto[776][5]; extern char * CVFF_morse_bonds[775][6]; extern char * CVFF_angles_auto[563][6]; extern char * CVFF_torsions_auto[295][8]; extern char * CVFF_impropers[41][8]; extern char * CVFF_vdw[45][4]; extern char * CVFF_bond_increments[683][5]; // CVFF_aug extern int CVFF_aug_objects[14]; extern int CVFF_aug_dim[14]; extern char * CVFF_aug_atoms[172][5]; extern char * CVFF_aug_equivalence_auto[162][11]; extern char * CVFF_aug_equivalence[168][7]; extern char * CVFF_aug_bonds_auto[798][5]; extern char * CVFF_aug_morse_bonds[752][6]; extern char * CVFF_aug_angles_auto[640][6]; extern char * CVFF_aug_torsions_auto[342][8]; extern char * CVFF_aug_impropers[41][8]; extern char * CVFF_aug_vdw[86][4]; extern char * CVFF_aug_bond_increments[717][5]; // OPLSAAM extern int OPLSAAM_objects[14]; extern int OPLSAAM_dim[14]; extern char * OPLSAAM_atoms[78][4]; extern char * OPLSAAM_bonds[159][5]; extern char * OPLSAAM_angles[437][5]; extern char * OPLSAAM_dihedrals[1446][7]; extern char * OPLSAAM_impropers[105][7]; extern char * OPLSAAM_vdw[78][7]; // OPLSAAR extern int OPLSAAR_objects[14]; extern int OPLSAAR_dim[14]; extern char * OPLSAAR_atoms[145][4]; extern char * OPLSAAR_bonds[242][5]; extern char * OPLSAAR_angles[593][5]; extern char * OPLSAAR_dihedrals[2482][7]; extern char * OPLSAAR_impropers[131][7]; extern char * OPLSAAR_vdw[145][7]; #endif atomes_1.3.1/src/calc/force_fields/charmm22_prot_metals.c0000664000175000017500000045547115212624223023032 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm22_prot_metals.c * @short * @author Sébastien Le Roux */ /* * This file: 'charmm22_prot_metals.c' * * Contains: * CHARMM-charmm22_prot_metals force field, data from taken from: - the file: 'charmm22_prot_metals' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm22_prot_metals_atoms[98][5] Bonds : charmm22_prot_metals_bonds[139][5] Angles : charmm22_prot_metals_angles[345][8] Dihedrals : charmm22_prot_metals_dihedrals[452][8] Impropers : charmm22_prot_metals_impropers[43][8] Non bonded : charmm22_prot_metals_vdw[98][6] */ #include "global.h" int charmm22_prot_metals_objects[14] = {98, 0, 0, 139, 0, 0, 345, 0, 452, 0 , 0, 43, 98, 0}; int charmm22_prot_metals_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm22_prot_metals info */ char * charmm22_prot_metals_atoms[98][5]= {{"H", "1.00800", "H", "polar H", "1"}, {"H", "1.00800", "HC", "N-ter H", "2"}, {"H", "1.00800", "HA", "nonpolar H", "3"}, {"H", "1.00800", "HT", "TIPS3P WATER HYDROGEN", "4"}, {"H", "1.00800", "HP", "aromatic H", "5"}, {"H", "1.00800", "HB", "backbone H", "6"}, {"H", "1.00800", "HR1", "his he1, (+) his HG,HD2", "7"}, {"H", "1.00800", "HR2", "(+) his HE1", "8"}, {"H", "1.00800", "HR3", "neutral his HG, HD2", "9"}, {"H", "1.00800", "HS", "thiol hydrogen", "10"}, {"H", "1.00800", "HE1", "for alkene; RHC=CR", "11"}, {"H", "1.00800", "HE2", "for alkene; H2C=CR", "12"}, {"H", "1.00800", "HA1", "alkane, CH, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "13"}, {"H", "1.00800", "HA2", "alkane, CH2, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "14"}, {"H", "1.00800", "HA3", "alkane, CH3, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "15"}, {"H", "1.00800", "HF1", "Aliphatic H on fluorinated C (see toppar_all22_prot_fluoro_alkanes.str)", "16"}, {"H", "1.00800", "HF2", "Aliphatic H on fluorinated C (see toppar_all22_prot_fluoro_alkanes.str)", "17"}, {"C", "12.01100", "C", "carbonyl C, peptide backbone", "20"}, {"C", "12.01100", "CA", "aromatic C", "21"}, {"C", "12.01100", "CT1", "aliphatic sp3 C for CH", "22"}, {"C", "12.01100", "CT2", "aliphatic sp3 C for CH2", "23"}, {"C", "12.01100", "CT3", "aliphatic sp3 C for CH3", "24"}, {"C", "12.01100", "CPH1", "his CG and CD2 carbons", "25"}, {"C", "12.01100", "CPH2", "his CE1 carbon", "26"}, {"C", "12.01100", "CPT", "trp C between rings", "27"}, {"C", "12.01100", "CY", "TRP C in pyrrole ring", "28"}, {"C", "12.01100", "CP1", "tetrahedral C (proline CA)", "29"}, {"C", "12.01100", "CP2", "tetrahedral C (proline CB/CG)", "30"}, {"C", "12.01100", "CP3", "tetrahedral C (proline CD)", "31"}, {"C", "12.01100", "CC", "carbonyl C, asn,asp,gln,glu,cter,ct2", "32"}, {"C", "12.01100", "CD", "carbonyl C, pres aspp,glup,ct1", "33"}, {"C", "12.01100", "CPA", "heme alpha-C", "34"}, {"C", "12.01100", "CPB", "heme beta-C", "35"}, {"C", "12.01100", "CPM", "heme meso-C", "36"}, {"C", "12.01100", "CM", "heme CO carbon", "37"}, {"C", "12.01100", "CS", "thiolate carbon", "38"}, {"C", "12.01100", "CE1", "for alkene; RHC=CR", "39"}, {"C", "12.01100", "CE2", "for alkene; H2C=CR", "40"}, {"C", "12.01100", "CST", "CO2 carbon ", "41"}, {"C", "12.01100", "CT", "aliphatic sp3 C, new LJ params, no hydrogens (see toppar_all22_prot_aliphatic_c27.str)", "42"}, {"C", "12.01100", "CT1x", "aliphatic sp3 C for CH, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "43"}, {"C", "12.01100", "CT2x", "aliphatic sp3 C for CH2, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "44"}, {"C", "12.01100", "CT3x", "aliphatic sp3 C for CH3, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "45"}, {"C", "12.01100", "CN", "C for cyano group (see toppar_all22_prot_pyridines.str)", "46"}, {"C", "12.01100", "CAP", "aromatic C for pyrimidines (see toppar_all22_prot_pyridines.str)", "47"}, {"C", "12.01100", "COA", "carbonyl C for pyrimidines (see toppar_all22_prot_pyridines.str)", "48"}, {"C", "12.01100", "C3", "cyclopropyl carbon", "49"}, {"N", "14.00700", "N", "proline N", "50"}, {"N", "14.00700", "NR1", "neutral his protonated ring nitrogen", "51"}, {"N", "14.00700", "NR2", "neutral his unprotonated ring nitrogen", "52"}, {"N", "14.00700", "NR3", "charged his ring nitrogen", "53"}, {"N", "14.00700", "NH1", "peptide nitrogen", "54"}, {"N", "14.00700", "NH2", "amide nitrogen", "55"}, {"N", "14.00700", "NH3", "ammonium nitrogen", "56"}, {"N", "14.00700", "NC2", "guanidinium nitroogen", "57"}, {"N", "14.00700", "NY", "TRP N in pyrrole ring", "58"}, {"N", "14.00700", "NP", "Proline ring NH2+ (N-terminal)", "59"}, {"N", "14.00700", "NPH", "heme pyrrole N", "60"}, {"N", "14.00700", "NC", "N for cyano group (see toppar_all22_prot_pyridines.str)", "61"}, {"O", "15.99900", "O", "carbonyl oxygen", "70"}, {"O", "15.99900", "OB", "carbonyl oxygen in acetic acid", "71"}, {"O", "15.99900", "OC", "carboxylate oxygen", "72"}, {"O", "15.99900", "OH1", "hydroxyl oxygen", "73"}, {"O", "15.99940", "OS", "ester oxygen", "74"}, {"O", "15.99940", "OT", "TIPS3P WATER OXYGEN", "75"}, {"O", "15.99900", "OM", "heme CO/O2 oxygen", "76"}, {"O", "15.99900", "OST", "CO2 oxygen", "77"}, {"O", "15.99900", "OCA", "carbonyl O for pyrimidines (see toppar_all22_prot_pyridines.str)", "78"}, {"S", "32.06000", "S", "sulphur", "81"}, {"S", "32.06000", "SM", "sulfur C-S-S-C type", "82"}, {"S", "32.06000", "SS", "thiolate sulfur", "83"}, {"He", "4.00260", "HE", "helium", "85"}, {"Ne", "20.17970", "NE", "neon", "86"}, {"C", "12.01100", "CF1", "monofluoromethyl (see toppar_all22_prot_fluoro_alkanes.str)", "87"}, {"C", "12.01100", "CF2", "difluoromethyl (see toppar_all22_prot_fluoro_alkanes.str)", "88"}, {"C", "12.01100", "CF3", "trifluoromethyl (see toppar_all22_prot_fluoro_alkanes.str)", "89"}, {"Fe", "55.84700", "FE", "heme iron 56", "90"}, {"Cl", "35.45300", "CLAL", "Chlorine Atom (see toppar_all22_prot_aldehydes.str)", "91"}, {"F", "18.99800", "FA", "aromatic flourine (see toppar_all22_prot_pyridines.str)", "92"}, {"F", "18.99800", "F1", "Fluorine, monofluoro (see toppar_all22_prot_fluoro_alkanes.str)", "93"}, {"F", "18.99800", "F2", "Fluorine, difluoro (see toppar_all22_prot_fluoro_alkanes.str)", "94"}, {"F", "18.99800", "F3", "Fluorine, trifluoro (see toppar_all22_prot_fluoro_alkanes.str)", "95"}, {"D", "0.00000", "DUM", "dummy atom", "99"}, {"Na", "22.989770", "SOD", "Sodium Ion", "100"}, {"Mg", "24.305000", "MG", "Magnesium Ion", "101"}, {"P", "39.102000", "POT", "Potassium Ion! check masses", "102"}, {"Cs", "132.900000", "CES", "Cesium Ion", "103"}, {"Ca", "40.080000", "CAL", "Calcium Ion", "104"}, {"Cl", "35.450000", "CLA", "Chloride Ion", "105"}, {"Zn", "65.370000", "ZN", "zinc (II) cation", "106"}, {"Ag", "107.868200", "AG", "Silver metal (HH et al. 2008) ", "107"}, {"Al", "26.981539", "AL", "Aluminium metal (HH et al. 2008)", "108"}, {"Au", "196.966500", "AU", "Gold metal (HH et al. 2008)", "109"}, {"Cu", "63.546000", "CU", "Copper metal (HH et al. 2008)", "110"}, {"Ni", "58.693400", "NI", "Nickel metal (HH et al. 2008)", "111"}, {"Pb", "207.200000", "PB", "Lead metal (HH et al. 2008)", "112"}, {"Pd", "106.420000", "PD", "Palladium metal (HH et al. 2008)", "113"}, {"Pt", "195.084000", "PT", "Platinum metal (HH et al. 2008)", "114"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm22_prot_metals info V(R) = Kb x (R - R0)^2 */ char * charmm22_prot_metals_bonds[139][5]= {{"CST", "OST", "937.96", "1.1600", "to Sulfate (PSUL) link"}, {"SS", "FE", "250.0", "2.3200", "bond length optimized to reproduce "}, {"C", "C", "600.000", "1.3350", "Heme vinyl substituent (KK, from propene (JCS))"}, {"CA", "CA", "305.000", "1.3750", "benzene, JES 8/25/89"}, {"CE1", "CE1", "440.000", "1.3400", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CE2", "500.000", "1.3420", "for propene, yin/adm jr., 12/95"}, {"CE1", "CT2", "365.000", "1.5020", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CT3", "383.000", "1.5040", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE2", "510.000", "1.3300", "for ethene, yin/adm jr., 12/95"}, {"CP1", "C", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CC", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CD", "200.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "222.500", "1.5270", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPB", "CE1", "450.000", "1.3800", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CPB", "CPA", "299.800", "1.4432", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPB", "CPB", "340.700", "1.3464", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPH1", "CPH1", "410.000", "1.3600", "histidine, adm jr., 6/27/90"}, {"CPM", "CPA", "360.000", "1.3716", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPT", "CA", "305.000", "1.3680", "adm jr., 12/30/91, for jwk"}, {"CPT", "CPT", "360.000", "1.4000", "jr., 12/30/91, for jwk"}, {"CT1", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT1", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT1", "222.500", "1.5000", "alkane update, adm jr., 3/2/92"}, {"CT2", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT2", "CA", "230.000", "1.4900", "phe,tyr, JES 8/25/89"}, {"CT2", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CPB", "230.000", "1.4900", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT2", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT2", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"CT3", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT3", "CA", "230.000", "1.4900", "toluene, adm jr. 3/7/92"}, {"CT3", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CPB", "230.000", "1.4900", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT3", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT3", "CS", "190.000", "1.5310", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CT3", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "222.500", "1.5280", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT3", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"CY", "CA", "350.000", "1.3650", "jr., 5/08/91, indole CCDB structure search"}, {"CY", "CPT", "350.000", "1.4400", "jr., 12/30/91, for jwk"}, {"CY", "CT2", "230.000", "1.5100", "Kb from alkane freq.. b0 from TRP crystal"}, {"FE", "CM", "258.000", "1.9000", "Heme (6-liganded): CO ligand (KK 05/13/91)"}, {"FE", "CPM", "0.000", "3.3814", "Heme (6-liganded): for ic para only (KK 05/13/91)"}, {"H", "CD", "330.000", "1.1100", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CA", "340.000", "1.0830", "trp, adm jr., 10/02/89"}, {"HA", "CC", "317.130", "1.1000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"HA", "CP2", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CPM", "367.600", "1.0900", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"HA", "CS", "300.000", "1.1110", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT1", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA", "CT2", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "322.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA", "CY", "330.000", "1.0800", "JWK 05/14/91 new r0 from indole"}, {"HE1", "CE1", "360.500", "1.1000", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "365.000", "1.1000", "for ethene, yin/adm jr., 12/95"}, {"HB", "CP1", "330.000", "1.0800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CT1", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HP", "CA", "340.000", "1.0800", "phe,tyr JES 8/25/89"}, {"HP", "CY", "350.000", "1.0800", "jr., 12/30/91, for jwk"}, {"HR1", "CPH1", "375.000", "1.0830", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "340.000", "1.0900", "his, adm jr., 6/28/29"}, {"HR2", "CPH2", "333.000", "1.0700", "his, adm jr., 6/27/90"}, {"HR3", "CPH1", "365.000", "1.0830", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HT", "HT", "0.000", "1.5139", "FROM TIPS3P GEOMETRY (FOR SHAKE/W PARAM)"}, {"N", "C", "260.000", "1.3000", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "320.000", "1.4340", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "320.000", "1.4550", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "463.000", "1.3650", "403.0->463.0, 1.305->1.365 guanidinium (KK)"}, {"NC2", "CT2", "261.000", "1.4900", "arg, (DS)"}, {"NC2", "CT3", "261.000", "1.4900", "methylguanidinium, adm jr., 3/26/92"}, {"NC2", "HC", "455.000", "1.0000", "405.0->455.0 GUANIDINIUM (KK)"}, {"NH1", "C", "370.000", "1.3450", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT2", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT3", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "H", "440.000", "0.9970", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "HC", "405.000", "0.9800", "(DS)"}, {"NH2", "CC", "430.000", "1.3600", "adm jr. 4/10/91, acetamide"}, {"NH2", "CT2", "240.000", "1.4550", "from NH2 CT3, neutral glycine, adm jr."}, {"NH2", "CT3", "240.000", "1.4550", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH2", "H", "480.000", "1.0000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "HC", "460.000", "1.0000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT3", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "HC", "403.000", "1.0400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "320.000", "1.4850", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "320.000", "1.5020", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "HC", "460.000", "1.0060", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NPH", "CPA", "377.200", "1.3757", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NPH", "FE", "270.200", "1.9580", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NR1", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR1", "CPH2", "400.000", "1.3600", "his, ADM JR., 7/20/89"}, {"NR1", "H", "466.000", "1.0000", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "400.000", "1.3200", "his, ADM JR., 7/20/89"}, {"NR2", "FE", "65.000", "2.2000", "Heme (6-liganded): His ligand (KK 05/13/91)"}, {"NR3", "CPH1", "380.000", "1.3700", "his, adm jr., 6/28/90"}, {"NR3", "CPH2", "380.000", "1.3200", "his, adm jr., 6/27/90"}, {"NR3", "H", "453.000", "1.0000", "his, adm jr., 6/27/90"}, {"NY", "CA", "270.000", "1.3700", "jr., 12/30/91, for jwk"}, {"NY", "CPT", "270.000", "1.3750", "jr., 12/30/91, for jwk"}, {"NY", "H", "465.000", "0.9760", "indole JWK 08/28/89"}, {"O", "C", "620.000", "1.2300", "Peptide geometry, condensed phase (LK)"}, {"O", "CC", "650.000", "1.2300", "adm jr. 4/10/91, acetamide"}, {"OB", "CC", "750.000", "1.2200", "adm jr., 10/17/90, acetic acid vibrations and geom."}, {"OB", "CD", "750.000", "1.2200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "525.000", "1.2600", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "525.000", "1.2600", "adm jr. 7/23/91, acetic acid"}, {"OC", "CT2", "450.000", "1.3300", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "450.000", "1.3300", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "334.300", "1.4110", "MeOH, EMB 10/10/89,"}, {"OH1", "CD", "230.000", "1.4000", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OH1", "CT1", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT2", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT3", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "H", "545.000", "0.9600", "EMB 11/21/89 methanol vib fit"}, {"OM", "CM", "1115.000", "1.1280", "Heme (6-liganded): CO ligand (KK 05/13/91)"}, {"OM", "FE", "250.000", "1.8000", "Heme (6-liganded): O2 ligand (KK 05/13/91)"}, {"OM", "OM", "600.000", "1.2300", "Heme (6-liganded): O2 ligand (KK 05/13/91)"}, {"OS", "CD", "150.000", "1.3340", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OS", "CT3", "340.000", "1.4300", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OT", "HT", "450.000", "0.9572", "FROM TIPS3P GEOM"}, {"S", "CT2", "198.000", "1.8180", "fitted to C-S s 9/26/92 (FL)"}, {"S", "CT3", "240.000", "1.8160", "fitted to C-S s 9/26/92 (FL)"}, {"S", "HS", "275.000", "1.3250", "methanethiol pure solvent, adm jr., 6/22/92"}, {"SM", "CT2", "214.000", "1.8160", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"SM", "CT3", "214.000", "1.8160", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"SM", "SM", "173.000", "2.0290", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"SS", "CS", "205.000", "1.8360", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm22_prot_metals info V(S) = Kub x (S - S0)^2 */ char * charmm22_prot_metals_angles[345][8]= {{"OST", "CST", "OST", "3000.00", "180.0000", " ", " ", "to Sulfate (PSUL) link"}, {"CS", "SS", "FE", "50.0", "100.6", " ", " ", "angle optimized to reproduce"}, {"SS", "FE", "NPH", "100.0", "90.0", " ", " ", "jr., 7/01"}, {"CA", "CA", "CA", "40.000", "120.00", "35.00", "2.41620", "JES 8/25/89"}, {"CE1", "CE1", "CT2", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CE1", "CT3", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CT2", "CT3", "32.00", "112.20", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "48.00", "126.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "47.00", "125.20", " ", " ", "for propene, yin/adm jr., 12/95"}, {"CP1", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "C", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CC", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CD", "50.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "CP1", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "100.000", "114.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "100.000", "111.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPA", "CPB", "CE1", "70.000", "126.7400", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CPA", "CPM", "CPA", "94.200", "125.1200", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPA", "NPH", "CPA", "139.300", "103.9000", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPB", "CE1", "CE2", "70.000", "121.5000", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CPB", "CPB", "CE1", "70.000", "126.7500", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CPB", "CPB", "CPA", "30.800", "106.5100", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPH2", "NR1", "CPH1", "130.000", "107.5000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR2", "CPH1", "130.000", "104.0000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR3", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"CPM", "CPA", "CPB", "61.600", "124.0700", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPT", "CA", "CA", "60.000", "118.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"CPT", "CPT", "CA", "60.000", "122.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"CPT", "CY", "CA", "120.000", "107.40", "25.00", "2.26100", "jr., 12/30/91, for jwk"}, {"CPT", "NY", "CA", "110.000", "108.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"CT1", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT1", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT1", "CT2", "CA", "51.800", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"CT1", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT1", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT1", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "CA", "CA", "45.800", "122.3000", " ", " ", "PARALLH19 (JES)"}, {"CT2", "CPB", "CPA", "65.000", "126.7400", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT2", "CPB", "CPB", "65.000", "126.7500", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT2", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT2", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT2", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C, for lactams, adm jr."}, {"CT2", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CT2", "CPB", "70.000", "113.0000", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT2", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "CT2", "CT2", "58.350", "113.60", "11.16", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT3", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "CY", "CA", "45.800", "129.4000", " ", " ", "jr., 5/08/91, indole CCDB structure search"}, {"CT2", "CY", "CPT", "45.800", "124.0000", " ", " ", "jr., 5/08/91, indole CCDB structure search"}, {"CT2", "NC2", "C", "62.300", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"CT2", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CA", "CA", "45.800", "122.3000", " ", " ", "toluene, adm jr., 3/7/92"}, {"CT3", "CPB", "CPA", "65.000", "126.7400", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT3", "CPB", "CPB", "65.000", "126.7500", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT3", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT3", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT3", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/09/92, for ALA cter"}, {"CT3", "CT1", "CT1", "53.350", "108.50", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT2", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CA", "51.800", "107.5000", " ", " ", "ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT3", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT3", "CT2", "CT2", "58.000", "115.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "NC2", "C", "62.300", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"CT3", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT3", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "S", "CT2", "34.000", "95.0000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"CY", "CPT", "CA", "160.000", "130.6000", " ", " ", "jr., 12/30/91, for jwk"}, {"CY", "CPT", "CPT", "110.000", "107.4000", " ", " ", "jr., 12/30/91, for jwk"}, {"CY", "CT2", "CT1", "58.350", "114.0000", " ", " ", "from TRP crystal, JWK"}, {"CY", "CT2", "CT3", "58.350", "114.0000", " ", " ", "from TRP crystal, JWK"}, {"FE", "NPH", "CPA", "96.150", "128.0500", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"FE", "NR2", "CPH1", "30.000", "133.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"FE", "NR2", "CPH2", "30.000", "123.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"H", "NH1", "C", "34.000", "123.0000", " ", " ", "NMA Vib Modes (LK)"}, {"H", "NH1", "CT1", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT2", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT3", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH2", "CC", "50.000", "120.0000", " ", " ", "his, adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NH2", "H", "23.000", "120.0000", " ", " ", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NR1", "CPH1", "30.000", "125.50", "20.00", "2.15000", "his, adm jr., 6/27/90"}, {"H", "NR1", "CPH2", "30.000", "127.00", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "25.000", "126.00", "15.00", "2.13000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH2", "25.000", "126.00", "15.00", "2.09000", "his, adm jr., 6/27/90"}, {"H", "NY", "CA", "28.000", "126.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"H", "NY", "CPT", "28.000", "126.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"H", "OH1", "CA", "65.000", "108.0000", " ", " ", "JES 8/25/89 phenol"}, {"H", "OH1", "CD", "55.000", "115.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "OH1", "CT1", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT2", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT3", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"HA", "CA", "CA", "29.000", "120.00", "25.00", "2.15250", "trp, adm jr., 10/02/89"}, {"HA", "CA", "CPT", "41.000", "122.0000", " ", " ", "jr., 5/08/91, indole CCDB structure search"}, {"HA", "CA", "CY", "32.000", "125.00", "25.00", "2.17300", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HA", "CP2", "CP1", "33.430", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP2", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP2", "CP3", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP2", "HA", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "HA", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CPM", "CPA", "12.700", "117.4400", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"HA", "CPM", "FE", "0.000", "180.0000", " ", " ", "Heme (6-liganded): for ic para only (KK 05/13/91)"}, {"HA", "CS", "CT3", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CS", "HA", "35.500", "108.40", "14.00", "1.77500", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT1", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA", "CT1", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CT1", "CT1", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT1", "CT2", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT1", "CT3", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT1", "HA", "35.500", "109.00", "5.40", "1.80200", "based on HA CT2 HA"}, {"HA", "CT2", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA", "CT2", "CA", "49.300", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"HA", "CT2", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA", "CT2", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CT2", "CE1", "45.00", "111.50", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HA", "CT2", "CPB", "50.000", "109.5000", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"HA", "CT2", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA", "CT2", "CT1", "33.430", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA", "CT2", "CT2", "26.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT2", "CT3", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT2", "CY", "33.430", "109.5000", " ", " ", "ADM JR., 10/02/89, from CT2CT2HA (U-B OMITTED), FOR JOANNA"}, {"HA", "CT2", "HA", "35.500", "109.00", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA", "CT3", "CA", "49.300", "107.5000", " ", " ", "toluene, adm jr. 3/7/92"}, {"HA", "CT3", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA", "CT3", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CT3", "CE1", "42.00", "111.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HA", "CT3", "CPB", "50.000", "109.5000", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"HA", "CT3", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA", "CT3", "CS", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT3", "CT1", "33.430", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA", "CT3", "CT2", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "CT3", "37.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "HA", "35.500", "108.40", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HA", "CY", "CA", "20.000", "126.40", "25.00", "2.18600", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HA", "CY", "CPT", "32.000", "126.40", "25.00", "2.25500", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HE1", "CE1", "CE1", "52.00", "119.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CE2", "42.00", "118.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "40.00", "116.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "22.00", "117.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CPB", "50.000", "120.0000", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"HE2", "CE2", "CE1", "45.00", "120.50", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE2", "55.50", "120.50", " ", " ", "for ethene, yin/adm jr., 12/95"}, {"HE2", "CE2", "HE2", "19.00", "119.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HB", "CP1", "C", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "CC", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "CD", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "CP2", "35.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CT1", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB", "CT1", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB", "CT1", "CT1", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "CT2", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "CT3", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB", "CT2", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB", "CT2", "HB", "36.000", "115.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NC2", "C", "49.000", "120.0000", " ", " ", "35.3->49.0 GUANIDINIUM (KK)"}, {"HC", "NC2", "CT2", "40.400", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"HC", "NC2", "CT3", "40.400", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"HC", "NC2", "HC", "25.000", "120.0000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH2", "CT2", "50.000", "111.0000", " ", " ", "from HC NH2 CT3, neutral glycine, adm jr."}, {"HC", "NH2", "CT3", "50.000", "111.0000", " ", " ", "methylamine geom/freq, adm jr., 6/2/92"}, {"HC", "NH2", "HC", "39.000", "106.5000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH3", "CT1", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT2", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT3", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "HC", "44.000", "109.5000", " ", " ", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NP", "CP1", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "HC", "51.000", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "30.000", "120.00", "22.00", "2.15250", "JES 8/25/89 benzene"}, {"HP", "CA", "CPT", "30.000", "122.00", "22.00", "2.14600", "jr., 12/30/91, for jwk"}, {"HP", "CA", "CY", "32.000", "125.00", "25.00", "2.17300", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HP", "CY", "CA", "32.000", "126.40", "25.00", "2.18600", "jr., 12/30/91, for jwk"}, {"HP", "CY", "CPT", "32.000", "126.40", "25.00", "2.25500", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HR1", "CPH1", "CPH1", "22.000", "130.00", "15.00", "2.21500", "adm jr., 6/27/90, his"}, {"HR3", "CPH1", "CPH1", "25.000", "130.00", "20.00", "2.20000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "38.800", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "43.000", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HT", "OT", "HT", "55.000", "104.5200", " ", " ", "TIP3P GEOMETRY, ADM JR."}, {"N", "C", "CP1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "C", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CC", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CD", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CP2", "70.000", "110.8000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "HB", "48.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "CP2", "70.000", "110.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "HA", "48.000", "108.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "NC2", "52.000", "120.00", "90.00", "2.36420", "changed from 60.0/120.3 for guanidinium (KK)"}, {"NC2", "CT2", "CT2", "67.700", "107.5000", " ", " ", "arg, (DS)"}, {"NC2", "CT2", "HA", "51.500", "107.5000", " ", " ", "arg, (DS)"}, {"NC2", "CT3", "HA", "51.500", "107.5000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"NH1", "C", "CP1", "80.000", "116.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT2", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT3", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "CT1", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CC", "50.000", "107.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH1", "CT1", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT1", "CT1", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT2", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT3", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "HB", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "CC", "50.000", "107.0000", " ", " ", "adm jr. 5/20/92, for asn,asp,gln,glu and cters"}, {"NH1", "CT2", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT2", "CT2", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2, for lactams, adm jr."}, {"NH1", "CT2", "HA", "51.500", "109.5000", " ", " ", "from NH1 CT3 HA, for lactams, adm jr."}, {"NH1", "CT2", "HB", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT3", "HA", "51.500", "109.5000", " ", " ", "NMA crystal (JCS)"}, {"NH2", "CC", "CP1", "80.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT1", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT2", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT3", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "HA", "44.000", "111.00", "50.00", "1.98000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"NH2", "CT2", "HA", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral lysine"}, {"NH2", "CT2", "HB", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral glycine, adm jr."}, {"NH2", "CT2", "CD", "52.000", "108.0000", " ", " ", "CT2 CT2 CD, neutral glycine, adm jr."}, {"NH2", "CT2", "CT2", "67.700", "110.0000", " ", " ", "NH3 CT2 CT2, neutral lysine"}, {"NH2", "CT3", "HA", "38.000", "109.50", "50.00", "2.14000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "C", "43.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT1", "CT1", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT2", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT3", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "HB", "51.500", "107.5000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT2", "C", "43.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT2", "CD", "43.700", "110.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH3", "CT2", "CT2", "67.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "HA", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "HB", "51.500", "107.5000", " ", " ", "for use on NTER -- from NH3 CT2HA (JCS) -- (LK)"}, {"NH3", "CT3", "HA", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "C", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CD", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "HB", "51.500", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "HA", "51.500", "109.1500", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NPH", "CPA", "CPB", "122.000", "111.5400", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NPH", "CPA", "CPM", "88.000", "124.3900", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NPH", "FE", "CM", "50.000", "90.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"NPH", "FE", "CPM", "0.000", "45.0000", " ", " ", "Heme (6-liganded): for ic para only (KK 05/13/91)"}, {"NPH", "FE", "NPH", "14.390", "90.0000", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NR1", "CPH1", "CPH1", "130.000", "106.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR1", "CPH1", "CT2", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "CT3", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "HR3", "25.000", "124.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH2", "HR1", "25.000", "122.50", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR2", "CPH1", "CPH1", "130.000", "110.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "45.800", "120.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR2", "CPH1", "HR3", "25.000", "120.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH2", "HR1", "25.000", "125.00", "20.00", "2.12000", "his, adm jr., 6/27/90"}, {"NR2", "CPH2", "NR1", "130.000", "112.5000", " ", " ", "his, adm jr., 6/27/90"}, {"NR2", "FE", "CM", "50.000", "180.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"NR2", "FE", "NPH", "50.000", "90.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"NR3", "CPH1", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CT2", "45.800", "122.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR3", "CPH1", "HR1", "22.000", "122.00", "15.00", "2.18000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "HR2", "32.000", "126.00", "25.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "NR3", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NY", "CA", "CY", "120.000", "110.00", "25.00", "2.24000", "jr., 12/30/91, for jwk"}, {"NY", "CA", "HA", "32.000", "125.00", "25.00", "2.17700", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CA", "HP", "32.000", "125.00", "25.00", "2.17700", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CPT", "CA", "160.000", "130.6000", " ", " ", "jr., 12/30/91, for jwk"}, {"NY", "CPT", "CPT", "110.000", "107.4000", " ", " ", "jr., 12/30/91, for jwk"}, {"O", "C", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT3", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "H", "50.000", "121.7000", " ", " ", "acetaldehyde (JCS)"}, {"O", "C", "N", "80.000", "122.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "80.000", "122.5000", " ", " ", "NMA Vib Modes (LK)"}, {"O", "CC", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT1", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT2", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT3", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "HA", "44.000", "122.0000", " ", " ", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "CC", "NH2", "75.000", "122.50", "50.00", "2.37000", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "CP1", "70.000", "125.00", "20.00", "2.44200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OB", "CD", "CT1", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT2", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT3", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "CA", "40.000", "120.0000", " ", " ", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "40.000", "118.00", "50.00", "2.38800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT2", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT3", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "OC", "100.000", "124.00", "70.00", "2.22500", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CT2", "CT3", "65.000", "122.0000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT2", "HA", "65.000", "118.3000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "HA", "65.000", "118.3000", " ", " ", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "CA", "45.200", "120.0000", " ", " ", "PARALLH19 WITH [122.3] (JES)"}, {"OH1", "CD", "CT2", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "CT3", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "OB", "50.000", "123.00", "210.00", "2.26200", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CT1", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "HA", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT2", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "HA", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT3", "HA", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OM", "CM", "FE", "35.000", "180.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"OM", "FE", "NPH", "5.000", "90.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"OM", "OM", "FE", "0.000", "180.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"OS", "CD", "CP1", "55.000", "109.00", "20.00", "2.32600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OS", "CD", "CT1", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT2", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT3", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "OB", "90.000", "125.90", "160.00", "2.25760", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OS", "CT2", "HA", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"OS", "CT3", "HA", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"S", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"S", "CT2", "CT2", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "CT3", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "HA", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"S", "CT3", "HA", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"SM", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "HA", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "CT3", "HA", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "SM", "CT2", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "55.000", "118.0000", " ", " ", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"SS", "CS", "HA", "40.000", "112.3000", " ", " ", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm22_prot_metals info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm22_prot_metals_dihedrals[452][8]= {{"X", "FE", "SS", "X", "0.0000", "4", "0.00", "jr., 7/01"}, {"X", "CS", "SS", "X", "0.0000", "3", "0.20", "methanethiol, HS S CT3 HA"}, {"C", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "CT2", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "N", "CP1", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CA", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89"}, {"CA", "CPT", "CPT", "CA", "3.1000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CA", "CT2", "CT1", "C", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CA", "CY", "CPT", "CA", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"CA", "NY", "CPT", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CC", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CC", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CC", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CC", "CT2", "NH1", "C", "0.2000", "1", "180.00", "Alanine dipeptide; NMA; acetate; etc. adm jr., 3/3/93c"}, {"CD", "CP1", "N", "C", "0.0000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CD", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CD", "CT2", "NH1", "C", "0.2000", "1", "180.00", "Alanine dipeptide; NMA; acetate; etc. backbon adm jr., 3/3/93c"}, {"CE1", "CE1", "CT3", "HA", "0.0300", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "CT3", "0.5000", "1", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "CT3", "1.3000", "3", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "HA", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "HA", "0.0500", "3", "180.00", "for propene, yin/adm jr., 12/95"}, {"CP1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "C", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CC", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CP2", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR2", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR3", "CPH1", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPT", "CA", "CA", "CA", "3.1000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CA", "CA", "3.1000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CY", "CA", "4.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "NY", "CA", "5.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CT1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT1", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT1", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT1", "CT2", "CA", "CA", "0.2300", "2", "180.00", "ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CT1", "CT2", "CPH1", "CPH1", "0.2000", "1", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT1", "CT2", "CPH1", "CPH1", "0.2700", "2", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT1", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT1", "CT2", "CY", "CA", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT1", "CT2", "CY", "CPT", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT1", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT2", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT3", "1.6000", "1", "0.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "C", "NH1", "CT3", "2.5000", "2", "180.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"CT2", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT2", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR2 CPH2"}, {"CT2", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"CT2", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT2", "CT2", "CPH1", "CPH1", "0.4000", "1", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. ADM JR., 9/4/89"}, {"CT2", "CT2", "CT2", "CT2", "0.1500", "1", "0.00", "alkane update, adm jr., 3/2/92, butane trans/gauche"}, {"CT2", "CT2", "NH1", "C", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C, for lactams, adm jr."}, {"CT2", "CY", "CPT", "CA", "3.0000", "2", "180.00", "JWK"}, {"CT2", "CY", "CPT", "CPT", "3.0000", "2", "180.00", " "}, {"CT2", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "SM", "SM", "CT2", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "C", "NH1", "CT2", "1.6000", "1", "0.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT2", "2.5000", "2", "180.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT3", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "CA", "CA", "CA", "3.1000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"CT3", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"CT3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT3", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT3", "CT2", "CA", "CA", "0.2300", "2", "180.00", "ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2000", "1", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2700", "2", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CT2", "CT2", "0.1500", "1", "0.00", "alkane update, adm jr., 3/2/92, butane trans/gauche"}, {"CT3", "CT2", "CT2", "CT3", "0.1500", "1", "0.00", "alkane update, adm jr., 3/2/92, butane trans/gauche"}, {"CT3", "CT2", "CY", "CA", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CY", "CPT", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "S", "CT3", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "CT2", "S", "CT3", "0.3700", "3", "0.00", "DTN 8/24/90"}, {"CT3", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "S", "CT2", "CT2", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "S", "CT2", "CT2", "0.3700", "3", "0.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CY", "CA", "NY", "CPT", "5.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CY", "CPT", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CY", "CPT", "CPT", "CA", "10.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"H", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "CT1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CC", "0.0000", "1", "0.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"H", "NH1", "CT1", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT1", "CT1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "CC", "0.0000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"H", "NH1", "CT2", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT2", "CT2", "0.0000", "1", "0.00", "from H NH1 CT2 CT3, for lactams, adm jr."}, {"H", "NH1", "CT2", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH2", "CC", "CT1", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT2", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT3", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NR1", "CPH1", "CPH1", "1.0000", "2", "180.00", "his, adm jr., 7/20/89"}, {"H", "NR1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR3", "CPH1", "CPH1", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "CT2", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "NR3", "CPH1", "CT3", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "NY", "CA", "CY", "0.8000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"H", "NY", "CPT", "CA", "0.8000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"H", "NY", "CPT", "CPT", "0.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"H", "OH1", "CA", "CA", "0.9900", "2", "180.00", "phenol OH rot bar, 3.37 kcal/mole, adm jr. 3/7/92"}, {"H", "OH1", "CT1", "CT1", "1.3300", "1", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT1", "0.1800", "2", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT1", "0.3200", "3", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "1.3300", "1", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.1800", "2", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.3200", "3", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT1", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT1", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT1", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"HA", "CA", "CA", "CA", "3.5000", "2", "180.00", "adm jr., 10/02/89"}, {"HA", "CA", "CA", "CPT", "3.5000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CA", "CA", "HA", "2.5000", "2", "180.00", "ADM JR., 10/02/89"}, {"HA", "CA", "CPT", "CPT", "3.0000", "2", "180.00", "TRP (JES)"}, {"HA", "CA", "CPT", "CY", "4.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CA", "CY", "CPT", "1.2000", "2", "180.00", "JWK"}, {"HA", "CA", "CY", "CT2", "1.2000", "2", "180.00", "JWK"}, {"HA", "CA", "NY", "CPT", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CA", "NY", "H", "1.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"HA", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA", "CT2", "CY", "CA", "0.2500", "2", "180.00", "JWK"}, {"HA", "CT2", "CY", "CPT", "0.2500", "2", "180.00", "JWK"}, {"HA", "CT2", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT2", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT2", "S", "CT3", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HA", "CT3", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA", "CT3", "CS", "HA", "0.1600", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT3", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA", "CT3", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT3", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT3", "S", "CT2", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HA", "CY", "CA", "CPT", "1.2000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CY", "CA", "HA", "1.2000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CY", "CPT", "CA", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CY", "CPT", "CPT", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"HE1", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"CT3", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"HE1", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "HA", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE1", "CE1", "CT2", "CT3", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "HA", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE2", "CE2", "CE1", "CT2", "5.2000", "2", "180.00", "for butene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE1", "CPB", "5.2000", "2", "180.00", "for vinyl, from butene, yin/adm jr., 12/95"}, {"HB", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "N", "CP3", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "NP", "CP3", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CT1", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NH2", "CT2", "CT2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NH2", "CT2", "HA", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NH2", "CT2", "HB", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NH2", "CT2", "CD", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "HB", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "HA", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "CA", "4.2000", "2", "180.00", "JES 8/25/89 benzene"}, {"HP", "CA", "CA", "CPT", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CA", "CA", "CT2", "4.2000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"HP", "CA", "CA", "CT3", "4.2000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"HP", "CA", "CA", "HP", "2.4000", "2", "180.00", "JES 8/25/89 benzene"}, {"HP", "CA", "CPT", "CPT", "3.0000", "2", "180.00", "JWK indole 05/14/91"}, {"HP", "CA", "CPT", "CY", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CA", "CY", "CPT", "2.0000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"HP", "CA", "CY", "CT2", "1.2000", "2", "180.00", "JWK indole 05/14/91"}, {"HP", "CA", "NY", "CPT", "2.0000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"HP", "CA", "NY", "H", "0.4000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CA", "HP", "1.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CA", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CPT", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HR1", "CPH1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "HR1", "1.0000", "2", "180.00", "his, adm jr., 6/27/90, his"}, {"HR1", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "NR3", "H", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR2", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "H", "0.0000", "2", "180.00", "his, adm jr., 6/27/90, YES, 0.0"}, {"HR3", "CPH1", "CPH1", "CT2", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "CT3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "HR3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "H", "1.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "CT1", "0.2400", "1", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT2", "CT1", "0.1500", "2", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT2", "CT1", "0.2700", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT2", "CT3", "0.2400", "1", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.1500", "2", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.2700", "3", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "HA", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "HA", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT1", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT2", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT3", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "HB", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "HB", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "HA", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"NH1", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "CT1", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT2", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT3", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT1", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT2", "CT2", "0.0000", "1", "0.00", "from NH1 C CT1 CT2, for lactams, adm jr."}, {"NH1", "C", "CT2", "HA", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "C", "CT2", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT2", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT3", "HA", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT2", "HA", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NH3", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT1", "C", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH3", "CT1", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NH3", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT2", "C", "NH1", "0.4000", "1", "0.00", "adm jr. 3/24/92, for PRES GLYP"}, {"NH3", "CT2", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NP", "CP1", "C", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "C", "NH1", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "NH2", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH1", "CT2", "CT1", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT3", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH2", "NR2", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH1", "CPH1", "NR1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "CT1", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH1", "CT3", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH2", "NR1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CPH1", "CT2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "CT3", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "HR1", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "NR3", "12.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CT2", "CT1", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT3", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH2", "NR3", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH2", "NR3", "H", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NY", "CA", "CY", "CPT", "4.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CA", "CY", "CT2", "3.5000", "2", "180.00", "JWK"}, {"NY", "CA", "CY", "HA", "3.5000", "2", "180.00", "JWK 09/05/89"}, {"NY", "CA", "CY", "HP", "3.5000", "2", "180.00", "JWK indole 05/14/91"}, {"NY", "CPT", "CA", "CA", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CPT", "CA", "HA", "4.0000", "2", "180.00", "JWK 09/05/89"}, {"NY", "CPT", "CA", "HP", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CPT", "CPT", "CA", "10.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CPT", "CPT", "CY", "5.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"O", "C", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "CT1", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT2", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT3", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT2", "CT2", "1.4000", "1", "0.00", "from O C CT1 CT2, for lactams, adm jr."}, {"O", "C", "CT2", "HA", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "CT2", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT3", "HA", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "H", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "CC", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT2", "HA", "0.0000", "3", "180.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"O", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "OS", "CT2", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT2", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OC", "CA", "CA", "CA", "3.1000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CA", "CA", "HP", "4.2000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "CP2", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "HB", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "N", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "NP", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OC", "CC", "CT2", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OH1", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 phenol"}, {"OH1", "CA", "CA", "HP", "4.2000", "2", "180.00", "JES 8/25/89 phenol"}, {"S", "CT2", "CT2", "HA", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "CT2", "CT2", "HA", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "SM", "CT2", "CT1", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "CT2", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "HA", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "HA", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "HA", "0.1500", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"X", "C", "NC2", "X", "2.2500", "2", "180.00", "9.0->2.25 GUANIDINIUM (KK)"}, {"X", "CD", "OH1", "X", "2.0500", "2", "180.00", "adm jr, 10/17/90, acetic acid C-Oh rotation barrier"}, {"X", "CD", "OS", "X", "2.0500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CE1", "CE1", "X", "0.1500", "1", "0.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE1", "CE1", "X", "8.5000", "2", "180.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE2", "CE2", "X", "4.9000", "2", "180.00", "for ethene, yin/adm jr., 12/95"}, {"X", "CP1", "C", "X", "0.0000", "6", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP1", "CC", "X", "0.0000", "6", "180.00", "changed to 0.0 RLD 5/19/92"}, {"X", "CP1", "CD", "X", "0.0000", "6", "180.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"X", "CP1", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP2", "CP2", "X", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP3", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CPA", "CPB", "X", "0.0000", "2", "0.00", "Heme (6-liganded): dummy for auto dihe (KK 05/13/91)"}, {"X", "CPA", "CPM", "X", "0.0000", "2", "0.00", "Heme (6-liganded): dummy for auto dihe (KK 05/13/91)"}, {"X", "CPB", "CE1", "X", "3.0000", "2", "180.00", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"X", "CPB", "CPB", "X", "0.0000", "2", "0.00", "Heme (6-liganded): dummy for auto dihe (KK 05/13/91)"}, {"X", "CPB", "CT2", "X", "0.0000", "6", "0.00", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"X", "CPB", "CT3", "X", "0.0000", "6", "0.00", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"X", "CPT", "CPT", "X", "0.0000", "2", "180.00", "JWK indole 05/14/91"}, {"X", "CT1", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT1", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT1", "CT1", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT2", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT3", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT1", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT1", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT2", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT2", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CT2", "X", "0.1950", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT2", "CT3", "X", "0.1600", "3", "0.00", "rotation barrier in Ethane (SF)"}, {"X", "CT2", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT2", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT2", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT2", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT3", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT3", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CT3", "X", "0.1550", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT3", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT3", "NH2", "X", "0.1100", "3", "0.00", "methylamine geom/freq, adm jr., 6/2/92"}, {"X", "CT3", "NH3", "X", "0.0900", "3", "0.00", "fine-tuned to ab initio; METHYLAMMONIUM, KK 03/10/92"}, {"X", "CT3", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT3", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "FE", "CM", "X", "0.0500", "4", "0.00", "Heme (6-liganded): ligands (KK 05/13/91)"}, {"X", "FE", "NPH", "X", "0.0000", "2", "0.00", "Heme (6-liganded): for ic para only (KK 05/13/91)"}, {"X", "FE", "NR2", "X", "0.0500", "4", "0.00", "Heme (6-liganded): from param19.inp"}, {"X", "FE", "OM", "X", "0.0000", "4", "0.00", "Heme (6-liganded): ligands (KK 05/13/91)"}, {"X", "NPH", "CPA", "X", "0.0000", "2", "0.00", "Heme (6-liganded): dummy for auto dihe (KK 05/13/91)"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm22_prot_metals info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm22_prot_metals_impropers[43][8]= {{"CPB", "CPA", "NPH", "CPA", "20.8000", "0", "0.0000", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPB", "X", "X", "CE1", "90.0000", "0", "0.0000", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT2", "X", "X", "CPB", "90.0000", "0", "0.0000", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT3", "X", "X", "CPB", "90.0000", "0", "0.0000", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"HA", "CPA", "CPA", "CPM", "29.4000", "0", "0.0000", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"HE2", "HE2", "CE2", "CE2", "3.0", "0", "0.00", "for ethene, yin/adm jr., 12/95"}, {"HR1", "NR1", "NR2", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR1", "NR2", "NR1", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR3", "CPH1", "NR1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR3", "CPH1", "1.0000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR1", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR2", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "CP1", "CP3", "0.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"NC2", "X", "X", "C", "40.0000", "0", "0.0000", "5.75->40.0 GUANIDINIUM (KK)"}, {"NH1", "X", "X", "H", "20.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"NH2", "X", "X", "H", "4.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NPH", "CPA", "CPA", "FE", "137.4000", "0", "0.0000", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NPH", "CPA", "CPB", "CPB", "40.6000", "0", "0.0000", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NPH", "CPA", "CPM", "CPA", "18.3000", "0", "0.0000", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NPH", "CPM", "CPB", "CPA", "32.7000", "0", "0.0000", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NR1", "CPH1", "CPH2", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR1", "CPH2", "CPH1", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR3", "CPH1", "CPH2", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "CPH1", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"NY", "CA", "CY", "CPT", "100.0000", "0", "0.0000", "jr., 5/15/91, indole 3-21G HE1 out-of-plane surf."}, {"O", "CP1", "NH2", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "CT1", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT2", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT3", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "HA", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "N", "CT2", "CC", "120.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CP1", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CT1", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT3", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "HA", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "X", "X", "C", "120.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"OB", "X", "X", "CD", "100.0000", "0", "0.0000", "adm jr., 10/17/90, acetic acid vibrations"}, {"OC", "X", "X", "CC", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT1", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT2", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT3", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm22_prot_metals info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm22_prot_metals_vdw[98][6]= {{"C", "-0.110000", "2.000000", " ", " ", " "}, {"CA", "-0.070000", "1.992400", " ", " ", " "}, {"CC", "-0.070000", "2.000000", " ", " ", " "}, {"CD", "-0.070000", "2.000000", " ", " ", " "}, {"CE1", "-0.068000", "2.090000", " ", " ", " "}, {"CE2", "-0.064000", "2.080000", " ", " ", " "}, {"CM", "-0.110000", "2.100000", " ", " ", " "}, {"CP1", "-0.020000", "2.275000", "-0.010000", "1.900000", " "}, {"CP2", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CP3", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CPA", "-0.090000", "1.800000", " ", " ", " "}, {"CPB", "-0.090000", "1.800000", " ", " ", " "}, {"CPH1", "-0.050000", "1.800000", " ", " ", " "}, {"CPH2", "-0.050000", "1.800000", " ", " ", " "}, {"CPM", "-0.090000", "1.800000", " ", " ", " "}, {"CPT", "-0.090000", "1.800000", "-0.090000", "1.900000", " "}, {"CS", "-0.110000", "2.200000", " ", " ", " "}, {"CST", "-0.058000", "1.563000", " ", " ", " "}, {"CT1", "-0.020000", "2.275000", "-0.010000", "1.900000", " "}, {"CT2", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CT3", "-0.080000", "2.060000", "-0.010000", "1.900000", " "}, {"CY", "-0.070000", "1.992400", " ", " ", " "}, {"CT", "-0.0200", "2.275", "-0.01", "1.9", " "}, {"CT1x", "-0.0200", "2.275", "-0.01", "1.9", " "}, {"CT2x", "-0.0560", "2.010", "-0.01", "1.9", " "}, {"CT3x", "-0.0780", "2.040", "-0.01", "1.9", " "}, {"H", "-0.046000", "0.224500", " ", " ", " "}, {"HA", "-0.022000", "1.320000", " ", " ", " "}, {"HE1", "-0.031000", "1.250000", " ", " ", " "}, {"HE2", "-0.026000", "1.260000", " ", " ", " "}, {"HB", "-0.022000", "1.320000", " ", " ", " "}, {"HC", "-0.046000", "0.224500", " ", " ", " "}, {"HP", "-0.030000", "1.358200", "-0.030000", "1.358200", " "}, {"HR1", "-0.046000", "0.900000", " ", " ", " "}, {"HR2", "-0.046000", "0.700000", " ", " ", " "}, {"HR3", "-0.007800", "1.468000", " ", " ", " "}, {"HS", "-0.100000", "0.450000", " ", " ", " "}, {"HT", "-0.046000", "0.224500", " ", " ", " "}, {"HA1", "-0.022", "1.3200", " ", " ", " "}, {"HA2", "-0.028", "1.3400", " ", " ", " "}, {"HA3", "-0.024", "1.3400", " ", " ", " "}, {"N", "-0.200000", "1.850000", "-0.000100", "1.850000", " "}, {"NC2", "-0.200000", "1.850000", " ", " ", " "}, {"NH1", "-0.200000", "1.850000", "-0.200000", "1.550000", " "}, {"NH2", "-0.200000", "1.850000", " ", " ", " "}, {"NH3", "-0.200000", "1.850000", " ", " ", " "}, {"NP", "-0.200000", "1.850000", " ", " ", " "}, {"NPH", "-0.200000", "1.850000", " ", " ", " "}, {"NR1", "-0.200000", "1.850000", " ", " ", " "}, {"NR2", "-0.200000", "1.850000", " ", " ", " "}, {"NR3", "-0.200000", "1.850000", " ", " ", " "}, {"NY", "-0.200000", "1.850000", " ", " ", " "}, {"O", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OB", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OC", "-0.120000", "1.700000", " ", " ", " "}, {"OH1", "-0.152100", "1.770000", " ", " ", " "}, {"OM", "-0.120000", "1.700000", " ", " ", " "}, {"OS", "-0.152100", "1.770000", " ", " ", " "}, {"OST", "-0.165000", "1.692000", " ", " ", " "}, {"OT", "-0.152100", "1.768200", " ", " ", " "}, {"S", "-0.450000", "2.000000", " ", " ", " "}, {"SM", "-0.380000", "1.975000", " ", " ", " "}, {"SS", "-0.470000", "2.200000", " ", " ", " "}, {"SOD", "-0.0469", "1.36375", " ", " ", " "}, {"POT", "-0.0870", "1.76375", " ", " ", " "}, {"CLA", "-0.150", "2.27", " ", " ", " "}, {"CAL", "-0.120", "1.367", " ", " ", " "}, {"MG", "-0.0150", "1.18500", " ", " ", " "}, {"CES", "-0.1900", "2.100", " ", " ", " "}, {"ZN", "-0.250000", "1.090000", " ", " ", " "}, {"FE", "0.000000", "0.650000", " ", " ", " "}, {"HE", "-0.021270", "1.4800", " ", " ", " "}, {"NE", "-0.086000", "1.5300", " ", " ", " "}, {"CLAL", "-0.030000", "1.908200", " ", " ", " "}, {"DUM", "-0.000000", "0.000000", " ", " ", " "}, {"AG", "-4.56", "1.4775", " ", " ", " "}, {"AL", "-4.02", "1.4625", " ", " ", " "}, {"AU", "-5.29", "1.4755", " ", " ", " "}, {"CU", "-4.72", "1.3080", " ", " ", " "}, {"NI", "-5.65", "1.2760", " ", " ", " "}, {"PB", "-2.93", "1.7825", " ", " ", " "}, {"PD", "-6.15", "1.4095", " ", " ", " "}, {"PT", "-7.80", "1.4225", " ", " ", " "}, {"CAP", "-0.070000", "1.992400", " ", " ", " "}, {"FA", "-0.12000", "1.700000", " ", " ", " "}, {"CN", "-0.200000", "1.750000", " ", " ", " "}, {"NC", "-0.600000", "1.850000", " ", " ", " "}, {"OCA", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"COA", "-0.110000", "2.000000", " ", " ", " "}, {"CF1", "-0.060000", "1.900000", " ", " ", " "}, {"CF2", "-0.042000", "2.050000", " ", " ", " "}, {"CF3", "-0.020000", "2.300000", " ", " ", " "}, {"HF1", "-0.028000", "1.3200", " ", " ", " "}, {"HF2", "-0.030000", "1.3000", " ", " ", " "}, {"F1", "-0.135", "1.63", " ", " ", " "}, {"F2", "-0.105", "1.63", " ", " ", " "}, {"F3", "-0.097", "1.60", " ", " ", " "}, {"C3", "-0.020000", "2.275000", " ", " ", " "}}; atomes_1.3.1/src/calc/force_fields/charmm36_na.c0000664000175000017500000025554315212624223021102 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm36_na.c * @short CHARMM-charmm36_na force field, from 'charmm36_na' * @author Sébastien Le Roux */ /* * This file: 'charmm36_na.c' * * Contains: * CHARMM-charmm36_na force field, data from taken from: - the file: 'charmm36_na' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm36_na_atoms[42][5] Bonds : charmm36_na_bonds[89][5] Angles : charmm36_na_angles[226][8] Dihedrals : charmm36_na_dihedrals[502][8] Impropers : charmm36_na_impropers[15][8] Non bonded : charmm36_na_vdw[42][6] */ #include "global.h" int charmm36_na_objects[14] = {42, 0, 0, 89, 0, 0, 226, 0, 502, 0 , 0, 15, 42, 0}; int charmm36_na_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm36_na info */ char * charmm36_na_atoms[42][5]= {{"H", "1.008000", "HN1", "Nucleic acid amine proton", "91"}, {"H", "1.008000", "HN2", "Nucleic acid ring nitrogen proton", "92"}, {"H", "1.008000", "HN3", "Nucleic acid aromatic carbon proton", "93"}, {"H", "1.008000", "HN4", "Nucleic acid phosphate hydroxyl proton", "94"}, {"H", "1.008000", "HN5", "Nucleic acid ribose hydroxyl proton", "95"}, {"H", "1.008000", "HN6", "Nucleic acid ribose aliphatic proton", "96"}, {"H", "1.008000", "HN7", "Nucleic acid proton (equivalent to protein HA)", "97"}, {"H", "1.008000", "HN8", "Bound to CN8 in nucleic acids/model compounds", "98"}, {"H", "1.008000", "HN9", "Bound to CN9 in nucleic acids/model compounds", "99"}, {"C", "12.011000", "CN1", "Nucleic acid carbonyl carbon", "100"}, {"C", "12.011000", "CN1T", "Nucleic acid carbonyl carbon (T/U C2)", "101"}, {"C", "12.011000", "CN2", "Nucleic acid aromatic carbon to amide", "102"}, {"C", "12.011000", "CN3", "Nucleic acid aromatic carbon", "103"}, {"C", "12.011000", "CN3T", "Nucleic acid aromatic carbon, Thy C5", "104"}, {"C", "12.011000", "CN4", "Nucleic acid purine C8 and ADE C2", "105"}, {"C", "12.011000", "CN5", "Nucleic acid purine C4 and C5", "106"}, {"C", "12.011000", "CN5G", "Nucleic acid guanine C5", "107"}, {"C", "12.011000", "CN7", "Nucleic acid carbon (equivalent to protein CT1)", "108"}, {"C", "12.011000", "CN7B", "Nucleic acid aliphatic carbon for C1'", "109"}, {"C", "12.011000", "CN8", "Nucleic acid carbon (equivalent to protein CT2)", "110"}, {"C", "12.011000", "CN8B", "Nucleic acid carbon (equivalent to protein CT2)", "111"}, {"C", "12.011000", "CN9", "Nucleic acid carbon (equivalent to protein CT3)", "112"}, {"N", "14.007000", "NN1", "Nucleic acid amide nitrogen", "113"}, {"N", "14.007000", "NN2", "Nucleic acid protonated ring nitrogen", "114"}, {"N", "14.007000", "NN2B", "From NN2, for N9 in GUA different from ADE", "115"}, {"N", "14.007000", "NN2U", "Nucleic acid protonated ring nitrogen, ura N3", "116"}, {"N", "14.007000", "NN2G", "Nucleic acid protonated ring nitrogen, gua N1", "117"}, {"N", "14.007000", "NN3", "Nucleic acid unprotonated ring nitrogen", "118"}, {"N", "14.007000", "NN3A", "Nucleic acid unprotonated ring nitrogen, ade N1 and N3", "119"}, {"N", "14.007000", "NN3G", "Nucleic acid unprotonated ring nitrogen, gua N3", "120"}, {"N", "14.007000", "NN4", "Nucleic acid purine N7", "121"}, {"N", "14.007000", "NN6", "Nucleic acid sp3 amine nitrogen (equiv to protein nh3)", "122"}, {"O", "15.999400", "ON1", "Nucleic acid carbonyl oxygen", "123"}, {"O", "15.999400", "ON1C", "Nucleic acid carbonyl oxygen, cyt O2", "124"}, {"O", "15.999400", "ON2", "Nucleic acid phosphate ester oxygen", "125"}, {"O", "15.999400", "ON3", "Nucleic acid =O in phosphate", "126"}, {"O", "15.999400", "ON4", "Nucleic acid phosphate hydroxyl oxygen", "127"}, {"O", "15.999400", "ON5", "Nucleic acid ribose hydroxyl oxygen", "128"}, {"O", "15.999400", "ON6", "Nucleic acid deoxyribose ring oxygen", "129"}, {"O", "15.999400", "ON6B", "Nucleic acid ribose ring oxygen", "130"}, {"P", "30.974000", "P", "phosphorus", "131"}, {"P", "30.974000", "P2", "phosphorus, adm, 2011 DNA update", "132"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm36_na info V(R) = Kb x (R - R0)^2 */ char * charmm36_na_bonds[89][5]= {{"CN8", "NN6", "200.000", "1.480", "methylammonium"}, {"NN6", "HN1", "403.000", "1.040", "methylammonium"}, {"ON6", "CN8B", "260.0", "1.420", "susil"}, {"CN8", "CN8B", "222.50", "1.528", "Alkanes, sacred"}, {"CN1", "CN3", "302.0", "1.409", "adm jr. 11/97"}, {"CN1", "CN3T", "302.0", "1.403", "adm jr. 11/97"}, {"CN1", "CN5G", "302.0", "1.360", "adm jr. 11/97"}, {"CN1", "NN2", "380.0", "1.367", "adm jr. 11/97"}, {"CN1T", "NN2B", "302.0", "1.348", "adm jr. 11/97"}, {"CN1", "NN2G", "340.0", "1.396", "adm jr. 11/97"}, {"CN1", "NN2U", "340.0", "1.389", "adm jr. 11/97"}, {"CN1T", "NN2U", "340.0", "1.383", "adm jr. 11/97"}, {"CN1", "NN3", "350.0", "1.335", "adm jr. 11/97"}, {"CN1T", "ON1", "860.0", "1.230", "jjp1/adm jr. 7/95"}, {"CN1", "ON1", "660.0", "1.234", "par_a4 adm jr. 10/2/91"}, {"CN1", "ON1C", "620.0", "1.245", "adm jr. 10/2/91"}, {"CN2", "CN3", "320.0", "1.406", "adm jr. 11/97"}, {"CN2", "CN5", "360.0", "1.358", "adm jr. 11/97"}, {"CN2", "NN1", "360.0", "1.366", "JWK, adm jr. 10/2/91"}, {"CN2", "NN2G", "400.0", "1.392", " "}, {"CN2", "NN3", "450.0", "1.343", " "}, {"CN2", "NN3A", "400.0", "1.342", "adm jr. 11/97"}, {"CN2", "NN3G", "320.0", "1.326", "adm jr. 11/97"}, {"CN3", "CN3", "500.0", "1.326", "adm jr. 11/97"}, {"CN3", "CN3T", "560.0", "1.320", "adm jr. 11/97"}, {"CN3T", "CN9", "230.0", "1.478", "adm jr. 11/97"}, {"CN3", "HN3", "350.0", "1.09", "JWK"}, {"CN3T", "HN3", "350.0", "1.09", "JWK"}, {"CN3", "NN2", "302.0", "1.343", "adm jr. 11/97"}, {"CN3", "NN2B", "320.0", "1.343", "adm jr. 11/97"}, {"CN4", "HN3", "380.0", "1.09", "JWK par_a7 9/30/91"}, {"CN4", "NN2", "320.0", "1.374", "adm jr. 11/97"}, {"CN4", "NN2B", "300.0", "1.378", "adm jr. 11/97"}, {"CN4", "NN3A", "420.0", "1.322", "adm jr. 11/97"}, {"CN4", "NN4", "400.0", "1.305", "adm jr. 11/97"}, {"CN5", "CN5", "310.0", "1.361", "adm jr. 11/97"}, {"CN5", "CN5G", "320.0", "1.350", "adm jr. 11/97"}, {"CN5", "NN2", "300.0", "1.375", "adm jr. 11/97"}, {"CN5", "NN2B", "302.0", "1.375", "adm jr. 11/97"}, {"CN5", "NN3A", "350.0", "1.312", "JWK par_a8 9/30/91"}, {"CN5", "NN3G", "350.0", "1.315", "adm jr. 11/97"}, {"CN5", "NN4", "310.0", "1.355", "adm jr. 11/97"}, {"CN5G", "NN4", "310.0", "1.365", "adm jr. 11/97"}, {"CN8", "CN8", "222.50", "1.528", "sacred"}, {"CN8", "CN9", "222.50", "1.528", "sacred"}, {"CN8", "NN2", "400.0", "1.460", "ADM JR."}, {"CN8", "ON5", "428.0", "1.42", "MeOH"}, {"CN9", "HN9", "322.0", "1.111", " "}, {"CN9", "ON2", "340.0", "1.43", "ADM Jr."}, {"HN1", "NN1", "488.0", "1.00", "JWK, adm jr. 7/24/91"}, {"HN2", "NN2", "474.0", "1.01", "JWK"}, {"HN2", "NN2B", "474.0", "1.01", "adm jr. 11/97"}, {"HN2", "NN2G", "471.0", "1.01", "JWK, par_a12 9/30/91"}, {"HN2", "NN2U", "474.0", "1.01", "JWK, adm jr. 7/24/91"}, {"HN4", "ON4", "545.0", "0.960", "ADM Jr."}, {"ON2", "P", "270.0", "1.60", "ADM Jr."}, {"ON2", "P2", "270.0", "1.60", "ADM Jr., adm, 2011 DNA update"}, {"ON3", "P", "580.0", "1.48", "ADM Jr."}, {"ON3", "P2", "580.0", "1.48", "ADM Jr., adm, 2011 DNA update"}, {"ON4", "P", "237.0", "1.58", "ADM Jr."}, {"ON4", "P2", "237.0", "1.58", "ADM Jr., adm, 2011 DNA update"}, {"CN7B", "ON6", "260.0", "1.420", "From exp"}, {"CN7B", "CN8", "200.0", "1.518", "From exp"}, {"CN7", "ON6", "240.0", "1.446", "Fom exp."}, {"CN7", "CN7", "222.5", "1.529", "From exp"}, {"CN7", "CN8", "222.5", "1.516", "From exp."}, {"CN7", "CN9", "222.5", "1.516", "for 5MET, From alkanes"}, {"CN7", "HN7", "309.0", "1.111", "sacred"}, {"CN8", "HN8", "309.0", "1.111", "sacred"}, {"CN7B", "HN7", "309.0", "1.111", "From CN8 HN7 (NF)"}, {"CN7B", "ON6B", "260.0", "1.420", "From CN7B ON6"}, {"CN7", "ON6B", "240.0", "1.480", "From CN7 ON6"}, {"CN7B", "CN7B", "200.0", "1.450", " "}, {"CN7", "CN7B", "222.5", "1.460", "Specific to RNA"}, {"CN7", "CN8B", "222.5", "1.512", "From exp."}, {"CN8B", "ON2", "320.0", "1.44", "From exp"}, {"CN8B", "ON5", "428.0", "1.42", "CN8 ON2, adm jr., 8/30/98"}, {"CN7", "ON2", "310.0", "1.433", "From exp"}, {"CN7B", "ON2", "310.0", "1.433", "From exp, for NADPH and bkbmod"}, {"CN7", "ON5", "428.0", "1.42", "CN8 ON2, adm jr., 8/30/98"}, {"CN9", "NN2", "400.0", "1.456", "adm jr."}, {"CN8", "NN2B", "400.0", "1.458", "adm jr."}, {"CN9", "NN2B", "400.0", "1.458", "adm jr."}, {"CN7B", "NN2", "220.0", "1.456", " "}, {"CN7B", "NN2B", "220.0", "1.458", " "}, {"CN8B", "HN8", "309.0", "1.111", "sacred"}, {"ON5", "HN5", "545.0", "0.960", "MeOH"}, {"CN7B", "ON5", "428.0", "1.400", "check adm jr.,"}, {"CN8", "ON2", "340.0", "1.44", " "}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm36_na info V(S) = Kub x (S - S0)^2 */ char * charmm36_na_angles[226][8]= {{"CN7", "CN8", "CN8", "58.35", "113.60", "11.16", "2.561", " "}, {"CN8", "CN7", "CN8", "58.35", "113.60", "11.16", "2.561", " "}, {"CN8", "CN8", "CN8", "58.35", "113.60", "11.16", "2.561", " "}, {"HN1", "NN6", "CN8", "30.00", "109.50", "20.00", "2.074", " "}, {"NN6", "CN8", "HN8", "45.00", "107.50", "35.00", "2.101", " "}, {"CN7", "CN8", "ON2", "115.00", "109.70", " ", " ", "exocyclic angles"}, {"NN6", "CN8", "CN8", "67.70", "110.00", " ", " ", " "}, {"HN1", "NN6", "HN1", "44.00", "109.50", " ", " ", " "}, {"ON2", "CN8", "CN8", "115.0", "109.7", " ", " ", "exocyclic angles"}, {"CN7", "ON6", "CN8B", "110.0", "109.0", " ", " ", " "}, {"ON6", "CN8B", "CN8", "90.0", "106.0", " ", " ", " "}, {"CN8B", "CN8", "CN7", "80.0", "106.0", " ", " ", " "}, {"ON6", "CN8B", "HN8", "45.2", "107.24", " ", " ", " "}, {"HN8", "CN8B", "CN8", "34.53", "110.10", "22.53", "2.179", "alkane"}, {"HN8", "CN8", "CN8B", "34.53", "110.10", "22.53", "2.179", "alkane"}, {"CN2", "NN3A", "CN4", "90.0", "117.8", " ", " ", "adm jr. 11/97"}, {"NN3A", "CN4", "NN3A", "60.0", "133.0", " ", " ", " "}, {"CN4", "NN3A", "CN5", "90.0", "110.1", " ", " ", " "}, {"CN5", "CN5", "NN3A", "60.0", "127.4", " ", " ", "bridgeC4"}, {"CN2", "CN5", "CN5", "60.0", "121.0", " ", " ", "bridgeC5"}, {"CN5", "CN2", "NN3A", "60.0", "110.7", " ", " ", " "}, {"CN5", "CN5", "NN2", "100.0", "105.7", " ", " ", "bridgeC4"}, {"CN5", "CN5", "NN4", "100.0", "110.0", " ", " ", "bridgeC5"}, {"CN4", "NN4", "CN5", "120.0", "104.6", " ", " ", " "}, {"NN2", "CN4", "NN4", "100.0", "113.4", " ", " ", " "}, {"CN4", "NN2", "CN5", "100.0", "106.3", " ", " ", " "}, {"NN2", "CN5", "NN3A", "100.0", "126.9", " ", " ", " "}, {"CN2", "CN5", "NN4", "100.0", "129.0", " ", " ", " "}, {"HN3", "CN4", "NN3A", "38.0", "113.5", " ", " ", " "}, {"NN3A", "CN2", "NN1", "50.0", "130.7", " ", " ", " "}, {"CN5", "CN2", "NN1", "50.0", "118.6", " ", " ", " "}, {"CN2", "NN1", "HN1", "40.0", "121.5", " ", " ", "C,A,G"}, {"HN1", "NN1", "HN1", "31.0", "117.0", " ", " ", " "}, {"NN4", "CN4", "HN3", "39.0", "124.8", " ", " ", "G,A"}, {"NN2", "CN4", "HN3", "39.0", "121.8", " ", " ", " "}, {"CN5", "NN2", "HN2", "30.0", "129.4", " ", " ", " "}, {"CN4", "NN2", "HN2", "30.0", "125.0", " ", " ", " "}, {"CN1", "NN2G", "CN2", "70.0", "131.1", " ", " ", "adm jr. 11/97"}, {"NN2G", "CN2", "NN3G", "70.0", "122.2", " ", " ", " "}, {"CN2", "NN3G", "CN5", "90.0", "109.4", " ", " ", " "}, {"CN5G", "CN5", "NN3G", "70.0", "129.9", " ", " ", "bridgeC4"}, {"CN1", "CN5G", "CN5", "70.0", "119.6", " ", " ", "bridgeC5"}, {"CN5G", "CN1", "NN2G", "70.0", "107.8", " ", " ", " "}, {"CN5G", "CN5", "NN2B", "100.0", "104.6", " ", " ", "bridgeC4"}, {"CN5", "CN5G", "NN4", "100.0", "111.4", " ", " ", "bridgeC5"}, {"CN4", "NN4", "CN5G", "120.0", "103.8", " ", " ", " "}, {"NN2B", "CN4", "NN4", "100.0", "113.0", " ", " ", " "}, {"CN4", "NN2B", "CN5", "100.0", "107.2", " ", " ", " "}, {"NN2B", "CN5", "NN3G", "140.0", "125.5", " ", " ", "bridgeC4"}, {"CN1", "CN5G", "NN4", "125.0", "129.0", " ", " ", "bridgeC5"}, {"CN1", "NN2G", "HN2", "45.0", "113.3", " ", " ", "h1"}, {"CN2", "NN2G", "HN2", "45.0", "115.6", " ", " ", " "}, {"NN1", "CN2", "NN2G", "95.0", "115.4", " ", " ", "n2"}, {"NN1", "CN2", "NN3G", "95.0", "122.4", " ", " ", " "}, {"NN2G", "CN1", "ON1", "50.0", "127.5", " ", " ", "o6"}, {"CN5G", "CN1", "ON1", "50.0", "124.7", " ", " ", " "}, {"HN3", "CN4", "NN2B", "40.0", "122.2", " ", " ", "h8 (NN4 CN4 HN3 124.8)"}, {"CN4", "NN2B", "HN2", "30.0", "124.6", " ", " ", "h9"}, {"CN5", "NN2B", "HN2", "30.0", "129.3", " ", " ", " "}, {"CN1", "NN2", "CN3", "50.0", "124.1", " ", " ", "adm jr. 11/97"}, {"NN2", "CN1", "NN3", "50.0", "116.8", " ", " ", " "}, {"CN1", "NN3", "CN2", "85.0", "119.1", " ", " ", " "}, {"CN3", "CN2", "NN3", "85.0", "119.3", " ", " ", " "}, {"CN2", "CN3", "CN3", "85.0", "117.8", " ", " ", " "}, {"CN3", "CN3", "NN2", "85.0", "122.9", " ", " ", " "}, {"CN1", "NN2", "HN2", "37.0", "121.2", " ", " ", "h1"}, {"CN3", "NN2", "HN2", "37.0", "114.7", " ", " ", " "}, {"NN2", "CN1", "ON1C", "130.0", "119.4", " ", " ", "o2"}, {"NN3", "CN1", "ON1C", "130.0", "123.8", " ", " ", " "}, {"NN3", "CN2", "NN1", "81.0", "122.3", " ", " ", "n4"}, {"CN3", "CN2", "NN1", "81.0", "118.4", " ", " ", " "}, {"CN2", "CN3", "HN3", "38.0", "120.1", " ", " ", "h5"}, {"CN3", "CN3", "HN3", "38.0", "122.1", " ", " ", " "}, {"HN3", "CN3", "NN2", "44.0", "115.0", " ", " ", "h6"}, {"CN1T", "NN2B", "CN3", "70.0", "122.0", " ", " ", "adm jr. 11/97"}, {"NN2B", "CN1T", "NN2U", "50.0", "114.0", " ", " ", " "}, {"CN1T", "NN2U", "CN1", "50.0", "130.2", " ", " ", " "}, {"NN2U", "CN1", "CN3", "70.0", "112.6", " ", " ", " "}, {"CN1", "CN3", "CN3", "100.0", "117.6", " ", " ", " "}, {"CN3", "CN3", "NN2B", "100.0", "123.6", " ", " ", " "}, {"CN1T", "NN2B", "HN2", "40.5", "122.0", " ", " ", "h1"}, {"CN3", "NN2B", "HN2", "32.0", "116.0", " ", " ", " "}, {"NN2B", "CN1T", "ON1", "100.0", "121.6", " ", " ", "o2"}, {"NN2U", "CN1T", "ON1", "100.0", "124.4", " ", " ", " "}, {"CN1T", "NN2U", "HN2", "40.5", "114.4", " ", " ", "h3"}, {"CN1", "NN2U", "HN2", "40.5", "115.4", " ", " ", " "}, {"NN2U", "CN1", "ON1", "100.0", "121.9", " ", " ", "o4"}, {"CN3", "CN1", "ON1", "100.0", "125.5", " ", " ", " "}, {"CN1", "CN3", "HN3", "30.0", "120.3", " ", " ", "h5"}, {"HN3", "CN3", "NN2B", "30.0", "114.3", " ", " ", "h6"}, {"CN3T", "CN1", "NN2U", "70.0", "113.5", " ", " ", "adm jr. 11/97"}, {"CN1", "CN3T", "CN3", "120.0", "116.7", " ", " ", " "}, {"CN3T", "CN3", "NN2B", "120.0", "123.6", " ", " ", "!T"}, {"CN3T", "CN1", "ON1", "100.0", "124.6", " ", " ", "o4"}, {"CN1", "CN3T", "CN9", "38.0", "118.7", " ", " ", "c5 methyl"}, {"CN3", "CN3T", "CN9", "38.0", "124.6", " ", " ", " "}, {"CN3T", "CN3", "HN3", "30.0", "122.1", " ", " ", "h6"}, {"CN1T", "NN2B", "CN9", "70.0", "116.0", " ", " ", "adm jr."}, {"CN3", "NN2B", "CN9", "70.0", "122.0", " ", " ", "adm jr. 7/24/91"}, {"CN1", "NN2", "CN9", "70.0", "115.4", " ", " ", "adm jr."}, {"CN3", "NN2", "CN9", "70.0", "120.5", " ", " ", "adm jr. 7/24/91"}, {"CN5", "NN2", "CN9", "70.0", "125.9", " ", " ", "adm jr."}, {"CN4", "NN2", "CN9", "70.0", "127.8", " ", " ", "adm jr."}, {"CN5", "NN2B", "CN9", "70.0", "125.9", " ", " ", "adm jr."}, {"CN4", "NN2B", "CN9", "70.0", "126.9", " ", " ", "adm jr."}, {"CN5", "NN2B", "CN8", "70.0", "125.9", " ", " ", "adm jr."}, {"CN4", "NN2B", "CN8", "70.0", "126.9", " ", " ", "adm jr."}, {"NN2B", "CN8", "CN9", "70.0", "113.7", " ", " ", "adm jr."}, {"CN1T", "NN2B", "CN7B", "45.0", "118.4", " ", " ", "FC from A"}, {"CN3", "NN2B", "CN7B", "45.0", "119.6", " ", " ", " "}, {"CN1", "NN2", "CN7B", "45.0", "120.0", " ", " ", "FC from A"}, {"CN3", "NN2", "CN7B", "45.0", "115.9", " ", " ", " "}, {"CN5", "NN2", "CN7B", "45.0", "126.1", " ", " ", " "}, {"CN4", "NN2", "CN7B", "45.0", "127.6", " ", " ", " "}, {"CN5", "NN2B", "CN7B", "45.0", "126.5", " ", " ", " "}, {"CN4", "NN2B", "CN7B", "45.0", "126.3", " ", " ", " "}, {"ON6", "CN7B", "NN2", "110.0", "108.0", " ", " ", "DNA"}, {"ON6B", "CN7B", "NN2", "110.0", "112.0", " ", " ", "RNA"}, {"CN8", "CN7B", "NN2", "110.0", "113.7", " ", " ", " "}, {"CN7B", "CN7B", "NN2", "110.0", "111.0", " ", " ", "RNA"}, {"ON6", "CN7B", "NN2B", "110.0", "108.0", " ", " ", "(DNA) FC from A"}, {"ON6B", "CN7B", "NN2B", "110.0", "112.0", " ", " ", "(RNA) FC from A"}, {"CN8", "CN7B", "NN2B", "110.0", "113.7", " ", " ", " "}, {"CN7B", "CN7B", "NN2B", "110.0", "111.0", " ", " ", "RNA"}, {"HN7", "CN7B", "NN2", "43.0", "111.0", " ", " ", " "}, {"HN7", "CN7B", "NN2B", "43.0", "111.0", " ", " ", "HN7 CN7B NN2"}, {"CN9", "CN8", "HN8", "34.6", "110.10", "22.53", "2.179", "Alkanes, sacred"}, {"CN9", "CN7", "HN7", "34.6", "110.10", "22.53", "2.179", "Alkanes, sacred"}, {"HN8", "CN8", "NN2", "33.43", "110.1", " ", " ", "9-M-ADE(THY), ADM"}, {"HN8", "CN8", "ON5", "45.9", "108.89", " ", " ", "Adm Jr. MeOH"}, {"CN3", "CN9", "HN9", "33.43", "110.10", "22.53", "2.179", "Alkanes, sacred"}, {"CN3T", "CN9", "HN9", "33.43", "110.10", "22.53", "2.179", "Alkanes, sacred"}, {"CN8", "CN9", "HN9", "34.60", "110.10", "22.53", "2.179", "Alkanes, sacred"}, {"HN9", "CN9", "CN7", "33.43", "110.1", "22.53", "2.179", "Alkanes, sacred"}, {"HN9", "CN9", "NN2", "33.43", "110.1", " ", " ", "9-M-A(T), adm jr."}, {"HN9", "CN9", "NN2B", "33.43", "110.1", " ", " ", "9-M-G(C), adm jr."}, {"HN8", "CN8", "NN2B", "33.43", "110.1", " ", " ", "9-E-G, adm jr."}, {"HN9", "CN9", "ON2", "60.0", "109.5", " ", " ", "ADM Jr."}, {"CN9", "ON2", "P", "20.0", "120.0", "35.", "2.33", "ADM Jr."}, {"HN4", "ON4", "P", "30.0", "115.0", "40.0", "2.35", "ADM Jr."}, {"HN4", "ON4", "P2", "30.0", "115.0", "40.0", "2.35", "ADM Jr. , adm, 2011 DNA update"}, {"HN5", "ON5", "CN8", "57.5", "106.0", " ", " ", "Adm Jr. MeOH"}, {"HN5", "ON5", "CN9", "57.5", "106.0", " ", " ", "Adm Jr. MeOH"}, {"ON2", "P", "ON2", "80.0", "104.3", " ", " ", "ADM Jr."}, {"ON2", "P2", "ON2", "80.0", "104.3", " ", " ", "ADM Jr., adm, 2011 DNA update"}, {"ON2", "P", "ON4", "48.1", "108.0", " ", " ", "ADM Jr."}, {"ON2", "P2", "ON4", "48.1", "108.0", " ", " ", "ADM Jr., adm, 2011 DNA update"}, {"ON3", "P", "ON4", "98.9", "108.23", " ", " ", "ADM Jr."}, {"ON3", "P2", "ON4", "98.9", "108.23", " ", " ", "ADM Jr., adm, 2011 DNA update"}, {"ON4", "P", "ON4", "98.9", "104.0", " ", " ", "ADM Jr."}, {"ON4", "P2", "ON4", "98.9", "104.0", " ", " ", "ADM Jr., adm, 2011 DNA update"}, {"CN7", "CN8", "ON5", "75.7", "110.10", " ", " ", "adm jr. MeOH"}, {"HN9", "CN9", "HN9", "35.500", "108.40", "5.40", "1.802", "update, adm jr. 3/2/92"}, {"CN7", "ON6", "CN7B", "110.0", "108.0", " ", " ", "NF, 11/97, C4'O4'C1'"}, {"ON6", "CN7B", "CN8", "90.0", "102.0", " ", " ", "NF, 11/97, C4'O4'C1'"}, {"CN7B", "CN8", "CN7", "80.00", "100.0", " ", " ", "NF, 11/97, C1'C2'C3'"}, {"CN8", "CN7", "CN7", "60.00", "102.0", "8.0", "2.561", "11/97, C2'C3'C4'"}, {"CN9", "CN7", "CN7", "60.00", "102.0", "8.0", "2.561", "5MET, adm jr."}, {"CN7", "CN7", "ON6", "100.0", "104.0", " ", " ", "NF, 11/97, C3'C4'O4'"}, {"HN7", "CN7", "ON6", "45.2", "107.24", " ", " ", " "}, {"HN7", "CN7B", "ON6", "45.2", "107.24", " ", " ", " "}, {"HN7", "CN7", "CN7", "40.0", "108.00", " ", " ", " "}, {"CN7B", "CN8", "HN8", "33.4", "110.10", "22.53", "2.179", "following terms directly"}, {"CN8", "CN7B", "HN7", "33.4", "110.10", "22.53", "2.179", "from alkanes"}, {"HN7", "CN7", "CN8", "34.5", "110.1", "22.53", "2.179", " "}, {"HN8", "CN8", "CN7", "34.53", "110.10", "22.53", "2.179", " "}, {"HN8", "CN8", "CN8", "34.53", "110.10", "22.53", "2.179", " "}, {"HN8", "CN8", "HN8", "35.5", "109.00", "5.40", "1.802", " "}, {"HN7", "CN7", "HN7", "35.5", "109.00", "5.40", "1.802", " "}, {"CN7", "ON6B", "CN7B", "110.0", "115.0", " ", " ", "From CN7 ON6 CN7B"}, {"CN7", "CN7", "ON6B", "100.0", "110.0", " ", " ", "From CN7 CN7 ON6"}, {"ON6B", "CN7B", "CN7B", "90.0", "106.0", " ", " ", "030998"}, {"CN7B", "CN7B", "CN7", "110.0", "96.0", " ", " ", " "}, {"CN7B", "CN7", "CN7", "60.0", "100.0", "8.00", "2.561", "11/97, C2'C3'C4'"}, {"HN7", "CN7", "ON6B", "45.2", "107.24", " ", " ", " "}, {"HN7", "CN7B", "ON6B", "45.2", "107.24", " ", " ", " "}, {"CN7B", "CN7B", "HN7", "33.4", "110.10", "22.53", "2.179", "following terms directly"}, {"HN7", "CN7B", "HN7", "35.5", "109.00", "5.40", "1.802", " "}, {"ON6", "CN7", "CN8B", "90.0", "108.2", " ", " ", "11/97, O4'C4'C5'"}, {"ON6", "CN7", "CN9", "90.0", "108.2", " ", " ", "5MET, adm jr."}, {"CN7", "CN7", "CN8B", "45.0", "110.0", " ", " ", "11/97, C3'C4'C5'"}, {"CN8", "CN7", "CN8B", "58.35", "113.60", "11.16", "2.561", "from alkane, 25P1"}, {"CN7", "CN8B", "ON2", "70.0", "108.4", " ", " ", "11/97, C4'C5'O5'"}, {"CN7", "CN7", "ON2", "115.0", "109.7", " ", " ", "11/97, C4'C3'O3'"}, {"CN7B", "CN7B", "ON2", "115.0", "109.7", " ", " ", "11/97, C4'C3'O3' for NADPH and bkbmod"}, {"CN8", "CN7", "ON2", "115.0", "109.7", " ", " ", "11/97, C2'C3'O3'"}, {"CN8B", "ON2", "P", "20.0", "120.0", "35.00", "2.33", "11/97, C5'O5'P"}, {"CN8B", "ON2", "P2", "20.0", "120.0", "35.00", "2.33", "11/97, C5'O5'P, adm, 2011 DNA update"}, {"CN7", "ON2", "P", "20.0", "120.0", "35.00", "2.33", "11/97, C3'O3'P"}, {"CN7", "ON2", "P2", "20.0", "120.0", "35.00", "2.33", "11/97, C3'O3'P, adm, 2011 DNA update"}, {"CN7B", "ON2", "P", "20.0", "120.0", "35.00", "2.33", "11/97, C3'O3'P, for NADPH and bkbmod"}, {"CN7B", "ON2", "P2", "20.0", "120.0", "35.00", "2.33", "11/97, C3'O3'P, for NADPH and bkbmod, adm, 2011 DNA update"}, {"HN7", "CN7", "CN8B", "34.5", "110.1", "22.53", "2.179", "From HN7 CN7 CN8"}, {"HN8", "CN8B", "ON2", "60.0", "109.5", " ", " ", "From HN7 CN8 ON2"}, {"HN5", "ON5", "CN8B", "57.5", "106.0", " ", " ", "From HN5 ON5 CN8"}, {"HN8", "CN8B", "HN8", "35.5", "109.0", "5.40", "1.802", "Alkanes, sacred"}, {"HN8", "CN8B", "CN7", "34.53", "110.1", "22.53", "2.179", "Alkanes, sacred"}, {"HN7", "CN7", "ON2", "60.0", "109.5", " ", " ", "adm jr. from HN7 CN8 ON2"}, {"HN7", "CN7B", "ON2", "60.0", "109.5", " ", " ", "adm jr. from HN7 CN8 ON2, for NADPH and bkbmod"}, {"CN7", "CN8B", "ON5", "75.7", "110.10", " ", " ", "From CN7 CN8B ON5"}, {"CN8B", "CN7", "ON5", "90.0", "108.2", " ", " ", "phosphoramidate, carbocyclic"}, {"HN8", "CN8B", "ON5", "45.9", "108.89", " ", " ", "From HN7 CN8 ON5"}, {"ON5", "CN7", "CN8", "75.7", "110.0", " ", " ", "from CHARMM22"}, {"ON5", "CN7", "CN7", "75.7", "110.1", " ", " ", " "}, {"HN7", "CN7", "ON5", "60.0", "109.5", " ", " ", " "}, {"HN5", "ON5", "CN7", "57.5", "109.0", " ", " ", " "}, {"ON6B", "CN7", "CN8B", "90.0", "108.2", " ", " ", " "}, {"ON6B", "CN7", "CN9", "90.0", "108.2", " ", " ", "for 5MET patch, adm jr."}, {"ON2", "CN7", "CN7B", "90.0", "110.0", " ", " ", " "}, {"ON5", "CN7", "CN7B", "90.0", "110.0", " ", " ", "From ON5 CN7 CN8"}, {"ON5", "CN7B", "CN7B", "80.0", "108.4", " ", " ", " "}, {"ON5", "CN7B", "CN7", "90.0", "108.0", " ", " ", " "}, {"HN7", "CN7B", "ON5", "60.0", "109.5", " ", " ", " "}, {"HN5", "ON5", "CN7B", "57.5", "109.0", " ", " ", " "}, {"HN7", "CN7B", "CN7", "34.53", "110.10", "22.53", "2.179", " "}, {"HN7", "CN7", "CN7B", "34.53", "110.10", "22.53", "2.179", " "}, {"CN8", "ON2", "P", "20.0", "120.0", "35.", "2.33", "adm jr."}, {"CN8", "ON2", "P2", "20.0", "120.0", "35.", "2.33", "adm jr., adm 2011 DNA update"}, {"ON2", "P", "ON3", "98.9", "111.6", " ", " ", "adm jr."}, {"ON2", "P2", "ON3", "98.9", "111.6", " ", " ", "adm jr., adm, 2011 DNA update"}, {"ON3", "P", "ON3", "120.0", "120.0", " ", " ", "adm jr."}, {"ON3", "P2", "ON3", "120.0", "120.0", " ", " ", "adm jr., adm, 2011 DNA update"}, {"HN8", "CN8", "ON2", "60.0", "109.5", " ", " ", "adm jr."}, {"ON5", "P", "ON3", "98.9", "111.6", " ", " ", "From ON2 P ON3"}, {"ON6", "CN7B", "CN7", "120.0", "106.25", " ", " ", " "}, {"CN7B", "CN7", "CN8", "58.35", "113.6", "11.16", "2.561", " "}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm36_na info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm36_na_dihedrals[502][8]= {{"X", "CN8", "ON2", "X", "-0.10", "3", "0.0", "phosphate ester"}, {"X", "CN7", "CN8", "X", "0.20", "3", "0.0", "alkane"}, {"X", "CN8", "NN6", "X", "0.10", "3", "0.0", "methylammonium"}, {"CN7", "ON6", "CN8B", "HN8", "0.195", "1", "0.0", " "}, {"ON6", "CN8B", "CN8", "HN8", "0.195", "1", "0.0", " "}, {"HN7", "CN7", "ON6", "CN8B", "0.195", "3", "0.0", " "}, {"CN8B", "CN8", "CN7", "HN7", "0.195", "3", "0.0", " "}, {"HN8", "CN8B", "CN8", "HN8", "0.195", "3", "0.0", " "}, {"HN8", "CN8B", "CN8", "CN7", "0.195", "3", "0.0", " "}, {"CN8B", "CN7", "ON6", "CN8B", "0.5", "5", "0.0", "min at 150 310 max at 25 200"}, {"CN8B", "CN7", "ON6", "CN8B", "0.1", "3", "180.0", " "}, {"CN8B", "CN7", "ON6", "CN8B", "0.5", "1", "0.0", " "}, {"CN8B", "CN8", "CN7", "ON5", "0.4", "5", "0.0", " "}, {"CN8B", "CN8", "CN7", "ON5", "0.4", "3", "0.0", " "}, {"CN8B", "CN8", "CN7", "ON5", "0.7", "2", "0.0", "energy at 0 (c3'endo), adm"}, {"CN8B", "CN8", "CN7", "ON5", "0.5", "1", "180.0", "energy at 0 (c3'endo), adm"}, {"CN8B", "CN8", "CN7", "ON2", "0.4", "5", "0.0", "for oligonuclotide"}, {"CN8B", "CN8", "CN7", "ON2", "0.4", "3", "0.0", " "}, {"CN8B", "CN8", "CN7", "ON2", "0.7", "2", "0.0", " "}, {"CN8B", "CN8", "CN7", "ON2", "0.5", "1", "180.0", " "}, {"CN7", "ON6", "CN8B", "CN8", "0.6", "6", "180.0", " "}, {"CN7", "ON6", "CN8B", "CN8", "0.6", "3", "0.0", " "}, {"ON6", "CN8B", "CN8", "CN7", "0.7", "5", "180.0", "90, shifts c2endo minimum towards 200"}, {"ON6", "CN8B", "CN8", "CN7", "0.4", "4", "0.0", "90, shifts c2endo minimum towards 200"}, {"ON6", "CN8B", "CN8", "CN7", "0.4", "3", "180.0", "90, shifts c2endo minimum towards 200"}, {"CN7", "CN7", "CN8", "CN8B", "0.5", "4", "0.0", " "}, {"CN7", "CN7", "CN8", "CN8B", "0.1", "3", "0.0", "energy in 150 to 250 range"}, {"CN8B", "ON6", "CN7", "CN7", "0.5", "3", "0.0", "surface in 200-360 region"}, {"ON2", "P2", "ON2", "CN7", "0.90", "1", "180.0", "adm, 2011 DNA update new param, zeta, kat2 set"}, {"ON2", "P2", "ON2", "CN7", "0.40", "2", "180.0", "adm, 2011 DNA update new param, zeta, kat2 set"}, {"ON2", "P2", "ON2", "CN7", "0.20", "3", "180.0", "adm, 2011 DNA update new param, zeta, kat2 set"}, {"ON2", "P", "ON2", "CN7", "1.20", "1", "180.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN7", "0.10", "2", "180.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN7", "0.10", "3", "180.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN7", "0.00", "6", "0.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN8", "1.20", "1", "180.0", "DMP, adm jr."}, {"ON2", "P", "ON2", "CN8", "0.10", "2", "180.0", "DMP, adm jr."}, {"ON2", "P", "ON2", "CN8", "0.10", "3", "180.0", "DMP, adm jr."}, {"ON2", "P", "ON2", "CN8", "0.00", "6", "0.0", "DMP, adm jr."}, {"ON2", "P2", "ON2", "CN8", "1.20", "1", "180.0", "DMP, adm jr., adm 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8", "0.10", "2", "180.0", "DMP, adm jr., adm 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8", "0.10", "3", "180.0", "DMP, adm jr., adm 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8", "0.00", "6", "0.0", "DMP, adm jr., adm 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8B", "1.20", "1", "180.0", "DMP, adm jr., adm, 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8B", "0.10", "2", "180.0", "DMP, adm jr., adm, 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8B", "0.10", "3", "180.0", "DMP, adm jr., adm, 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8B", "0.00", "6", "0.0", "DMP, adm jr., adm, 2011 DNA update"}, {"ON2", "P", "ON2", "CN8B", "1.20", "1", "180.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN8B", "0.10", "2", "180.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN8B", "0.10", "3", "180.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN8B", "0.00", "6", "0.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN9", "1.20", "1", "180.0", " "}, {"ON2", "P", "ON2", "CN9", "0.10", "2", "180.0", " "}, {"ON2", "P", "ON2", "CN9", "0.10", "3", "180.0", " "}, {"ON2", "P", "ON2", "CN9", "0.00", "6", "0.0", " "}, {"ON2", "P2", "ON2", "CN9", "1.20", "1", "180.0", "adm, 2011 DNA update"}, {"ON2", "P2", "ON2", "CN9", "0.10", "2", "180.0", "adm, 2011 DNA update"}, {"ON2", "P2", "ON2", "CN9", "0.10", "3", "180.0", "adm, 2011 DNA update"}, {"ON2", "P2", "ON2", "CN9", "0.00", "6", "0.0", "adm, 2011 DNA update"}, {"ON3", "P", "ON2", "CN7", "0.10", "3", "0.0", "O1P-P-O3'-C3'"}, {"ON3", "P2", "ON2", "CN7", "0.10", "3", "0.0", "O1P-P-O3'-C3', adm, 2011 DNA update"}, {"ON3", "P", "ON2", "CN7B", "0.10", "3", "0.0", "NADPH and bkbmod"}, {"ON3", "P", "ON2", "CN8", "0.10", "3", "0.0", " "}, {"ON3", "P2", "ON2", "CN8", "0.10", "3", "0.0", "adm 2011 DNA update"}, {"ON3", "P", "ON2", "CN8B", "0.10", "3", "0.0", "O1P-P-O5'-C5'"}, {"ON3", "P2", "ON2", "CN8B", "0.10", "3", "0.0", "O1P-P-O5'-C5', adm, 2011 DNA update"}, {"ON3", "P", "ON2", "CN9", "0.10", "3", "0.0", " "}, {"ON3", "P2", "ON2", "CN9", "0.10", "3", "0.0", "adm, 2011 DNA update"}, {"ON4", "P", "ON2", "CN7", "0.95", "2", "0.0", "adm jr."}, {"ON4", "P", "ON2", "CN7", "0.50", "3", "0.0", "adm jr."}, {"ON4", "P2", "ON2", "CN7", "0.95", "2", "0.0", "adm jr., adm, 2011 DNA update"}, {"ON4", "P2", "ON2", "CN7", "0.50", "3", "0.0", "adm jr., adm, 2011 DNA update"}, {"ON4", "P", "ON2", "CN8", "0.95", "2", "0.0", "adm jr."}, {"ON4", "P", "ON2", "CN8", "0.50", "3", "0.0", "adm jr."}, {"ON4", "P", "ON2", "CN8B", "0.95", "2", "0.0", "adm jr."}, {"ON4", "P", "ON2", "CN8B", "0.50", "3", "0.0", "adm jr."}, {"ON4", "P2", "ON2", "CN8B", "0.95", "2", "0.0", "adm jr., adm, 2011 DNA update"}, {"ON4", "P2", "ON2", "CN8B", "0.50", "3", "0.0", "adm jr., adm, 2011 DNA update"}, {"ON4", "P", "ON2", "CN9", "0.95", "2", "0.0", "adm jr."}, {"ON4", "P", "ON2", "CN9", "0.50", "3", "0.0", "adm jr."}, {"ON4", "P2", "ON2", "CN9", "0.95", "2", "0.0", "adm jr., adm, 2011 DNA update"}, {"ON4", "P2", "ON2", "CN9", "0.50", "3", "0.0", "adm jr., adm, 2011 DNA update"}, {"X", "ON4", "P", "X", "0.30", "3", "0.0", "adm jr."}, {"X", "ON4", "P2", "X", "0.30", "3", "0.0", "adm jr., adm, 2011 DNA update"}, {"P", "ON2", "CN7", "HN7", "0.000", "3", "0.0", "H-C3'-O3'-P"}, {"P2", "ON2", "CN7", "HN7", "0.000", "3", "0.0", "H-C3'-O3'-P, adm, 2011 DNA update"}, {"P", "ON2", "CN7B", "HN7", "0.000", "3", "0.0", "NADPH and bkbmod"}, {"P", "ON2", "CN8B", "HN8", "0.000", "3", "0.0", "H-C5'-O5'-P"}, {"P2", "ON2", "CN8B", "HN8", "0.000", "3", "0.0", "H-C5'-O5'-P, adm, 2011 DNA update"}, {"P", "ON2", "CN8", "HN8", "0.000", "3", "0.0", " "}, {"P", "ON2", "CN9", "HN9", "0.000", "3", "0.0", " "}, {"P2", "ON2", "CN9", "HN9", "0.000", "3", "0.0", "adm, 2011 DNA update"}, {"CN9", "CN8", "CN8", "CN9", "0.15", "1", "0.0", " "}, {"CN9", "CN8", "CN8", "CN8", "0.15", "1", "0.0", " "}, {"NN2B", "CN1T", "NN2U", "CN1", "1.5", "2", "180.0", "adm jr. 11/97"}, {"CN1T", "NN2U", "CN1", "CN3", "1.5", "2", "180.0", "adm jr. 11/97"}, {"NN2U", "CN1", "CN3", "CN3", "1.5", "2", "180.0", "adm jr. 11/97"}, {"CN1", "CN3", "CN3", "NN2B", "6.0", "2", "180.0", "adm jr. 11/97"}, {"CN3", "CN3", "NN2B", "CN1T", "1.5", "2", "180.0", "adm jr. 11/97"}, {"CN3", "NN2B", "CN1T", "NN2U", "1.5", "2", "180.0", "adm jr. 11/97"}, {"HN3", "CN3", "CN3", "HN3", "3.0", "2", "180.0", "adm jr. 11/97"}, {"HN3", "CN3", "CN1", "ON1", "6.0", "2", "180.0", "adm jr. 11/97"}, {"ON1", "CN1T", "NN2B", "HN2", "0.0", "2", "180.0", "adm jr. 11/97"}, {"ON1", "CN1", "NN2U", "HN2", "0.0", "2", "180.0", "adm jr. 11/97"}, {"ON1", "CN1T", "NN2U", "HN2", "0.0", "2", "180.0", "adm jr. 11/97"}, {"HN2", "NN2B", "CN3", "HN3", "1.5", "2", "180.0", "adm jr. 11/97"}, {"NN2B", "CN1T", "NN2U", "HN2", "3.8", "2", "180.0", "adm jr. 11/97"}, {"CN3", "CN1", "NN2U", "HN2", "3.8", "2", "180.0", "adm jr. 11/97"}, {"CN3", "CN3", "NN2B", "HN2", "1.6", "2", "180.0", "adm jr. 11/97"}, {"NN2U", "CN1T", "NN2B", "HN2", "1.6", "2", "180.0", "adm jr. 11/97"}, {"CN1T", "NN2B", "CN3", "CN3T", "1.8", "2", "180.0", "adm jr. 11/97"}, {"NN2U", "CN1", "CN3T", "CN3", "1.8", "2", "180.0", "adm jr. 11/97"}, {"CN1", "CN3T", "CN3", "NN2B", "3.0", "2", "180.0", "adm jr. 11/97"}, {"NN2B", "CN1", "CN3T", "CN9", "5.6", "2", "180.0", "adm jr. 11/97"}, {"NN2B", "CN3", "CN3T", "CN9", "5.6", "2", "180.0", "adm jr. 11/97"}, {"CN1", "CN3T", "CN9", "HN9", "0.46", "3", "0.0", "adm jr. 11/97"}, {"CN3", "CN3T", "CN9", "HN9", "0.46", "3", "0.0", "adm jr. 11/97"}, {"CN3T", "CN1", "NN2U", "HN2", "4.8", "2", "180.0", "adm jr. 11/97"}, {"CN3", "NN2", "CN1", "NN3", "0.6", "2", "180.0", "adm jr. 11/97"}, {"NN2", "CN1", "NN3", "CN2", "0.6", "2", "180.0", "adm jr. 11/97"}, {"CN1", "NN3", "CN2", "CN3", "6.0", "2", "180.0", "adm jr. 11/97"}, {"NN3", "CN2", "CN3", "CN3", "0.6", "2", "180.0", "adm jr. 11/97"}, {"CN2", "CN3", "CN3", "NN2", "6.0", "2", "180.0", "adm jr. 11/97"}, {"CN3", "CN3", "NN2", "CN1", "0.6", "2", "180.0", "adm jr. 11/97"}, {"NN3", "CN2", "NN1", "HN1", "1.0", "2", "180.0", "adm jr. 11/97"}, {"CN3", "CN2", "NN1", "HN1", "1.0", "2", "180.0", "adm jr. 11/97"}, {"NN1", "CN2", "NN3", "CN1", "2.0", "2", "180.0", "adm jr. 11/97"}, {"NN1", "CN2", "CN3", "CN3", "2.0", "2", "180.0", "adm jr. 11/97"}, {"NN1", "CN2", "CN3", "HN3", "2.0", "2", "180.0", "adm jr. 11/97"}, {"ON1C", "CN1", "NN2", "HN2", "3.0", "2", "180.0", "adm jr. 11/97"}, {"ON1C", "CN1", "NN3", "CN2", "1.6", "2", "180.0", "adm jr. 11/97"}, {"ON1C", "CN1", "NN2", "CN3", "1.6", "2", "180.0", "adm jr. 11/97"}, {"NN3", "CN2", "CN3", "HN3", "3.4", "2", "180.0", "adm jr. 11/97"}, {"NN2", "CN3", "CN3", "HN3", "3.4", "2", "180.0", "adm jr. 11/97"}, {"CN2", "CN3", "CN3", "HN3", "4.6", "2", "180.0", "adm jr. 11/97"}, {"CN1", "NN2", "CN3", "HN3", "4.6", "2", "180.0", "adm jr. 11/97"}, {"X", "CN2", "NN3", "X", "2.0", "2", "180.0", "adm jr. 11/97"}, {"CN2", "NN3A", "CN4", "NN3A", "1.8", "2", "180.0", "adm jr. 11/97, 6-mem"}, {"NN3A", "CN4", "NN3A", "CN5", "2.0", "2", "180.0", " "}, {"CN4", "NN3A", "CN5", "CN5", "1.8", "2", "180.0", " "}, {"NN3A", "CN5", "CN5", "CN2", "2.0", "2", "180.0", "treated 2x"}, {"CN5", "CN5", "CN2", "NN3A", "1.8", "2", "180.0", " "}, {"CN5", "CN2", "NN3A", "CN4", "10.0", "2", "180.0", " "}, {"CN5", "CN5", "NN4", "CN4", "6.0", "2", "180.0", "5-mem"}, {"CN5", "NN4", "CN4", "NN2", "14.0", "2", "180.0", " "}, {"NN4", "CN4", "NN2", "CN5", "6.0", "2", "180.0", " "}, {"CN4", "NN2", "CN5", "CN5", "6.0", "2", "180.0", " "}, {"NN2", "CN5", "CN5", "NN4", "14.0", "2", "180.0", "treated 2x"}, {"CN2", "NN3A", "CN4", "HN3", "8.5", "2", "180.0", "H2"}, {"CN5", "NN3A", "CN4", "HN3", "8.5", "2", "180.0", "H2"}, {"CN5", "NN4", "CN4", "HN3", "5.2", "2", "180.0", "H8"}, {"CN5", "NN2", "CN4", "HN3", "5.2", "2", "180.0", "H8"}, {"CN5", "CN5", "NN2", "HN2", "1.2", "2", "180.0", "H9"}, {"NN4", "CN4", "NN2", "HN2", "1.2", "2", "180.0", "H9"}, {"HN2", "NN2", "CN4", "HN3", "0.0", "2", "180.0", "H8-C-N-H9"}, {"CN4", "NN3A", "CN2", "NN1", "4.0", "2", "180.0", "N6"}, {"CN5", "CN5", "CN2", "NN1", "4.0", "2", "180.0", "N6"}, {"NN4", "CN5", "CN2", "NN1", "0.0", "2", "180.0", "N6"}, {"CN5", "CN2", "NN1", "HN1", "0.5", "2", "180.0", "6-NH2"}, {"NN3A", "CN2", "NN1", "HN1", "0.5", "2", "180.0", " "}, {"NN3A", "CN5", "CN5", "NN4", "7.0", "2", "180.0", "adm jr. 11/97"}, {"CN2", "CN5", "CN5", "NN2", "7.0", "2", "180.0", " "}, {"NN3A", "CN2", "CN5", "NN4", "2.0", "2", "180.0", " "}, {"CN2", "CN5", "NN4", "CN4", "2.0", "2", "180.0", " "}, {"CN4", "NN3A", "CN5", "NN2", "2.0", "2", "180.0", " "}, {"NN3A", "CN5", "NN2", "CN4", "2.0", "2", "180.0", " "}, {"CN1", "NN2G", "CN2", "NN3G", "0.2", "2", "180.0", "jr. 11/97, 6-mem"}, {"NN2G", "CN2", "NN3G", "CN5", "2.0", "2", "180.0", " "}, {"CN2", "NN3G", "CN5", "CN5G", "0.2", "2", "180.0", " "}, {"NN3G", "CN5", "CN5G", "CN1", "2.0", "2", "180.0", " "}, {"CN5", "CN5G", "CN1", "NN2G", "0.2", "2", "180.0", " "}, {"CN5G", "CN1", "NN2G", "CN2", "0.2", "2", "180.0", " "}, {"CN5", "CN5G", "NN4", "CN4", "6.0", "2", "180.0", " "}, {"CN5G", "NN4", "CN4", "NN2B", "16.0", "2", "180.0", " "}, {"NN4", "CN4", "NN2B", "CN5", "6.0", "2", "180.0", " "}, {"CN4", "NN2B", "CN5", "CN5G", "6.0", "2", "180.0", " "}, {"NN2B", "CN5", "CN5G", "NN4", "10.0", "2", "180.0", " "}, {"ON1", "CN1", "CN5G", "CN5", "14.0", "2", "180.0", "O6"}, {"ON1", "CN1", "CN5G", "NN4", "0.0", "2", "180.0", " "}, {"ON1", "CN1", "NN2G", "CN2", "14.0", "2", "180.0", " "}, {"ON1", "CN1", "NN2G", "HN2", "0.0", "2", "180.0", " "}, {"NN1", "CN2", "NN2G", "CN1", "4.0", "2", "180.0", "N2"}, {"NN1", "CN2", "NN3G", "CN5", "4.0", "2", "180.0", " "}, {"NN1", "CN2", "NN2G", "HN2", "0.0", "2", "180.0", " "}, {"NN2G", "CN2", "NN1", "HN1", "1.2", "2", "180.0", " "}, {"NN3G", "CN2", "NN1", "HN1", "1.2", "2", "180.0", " "}, {"HN2", "NN2G", "CN1", "CN5G", "3.6", "2", "180.0", "H1"}, {"HN2", "NN2G", "CN2", "NN3G", "3.6", "2", "180.0", " "}, {"HN3", "CN4", "NN4", "CN5G", "5.6", "2", "180.0", "H8"}, {"HN3", "CN4", "NN2B", "CN5", "5.6", "2", "180.0", " "}, {"HN3", "CN4", "NN2B", "HN2", "0.0", "2", "180.0", " "}, {"HN2", "NN2B", "CN5", "CN5G", "1.2", "2", "180.0", "H9"}, {"HN2", "NN2B", "CN5", "NN3G", "1.2", "2", "180.0", " "}, {"HN2", "NN2B", "CN4", "NN4", "1.2", "2", "180.0", " "}, {"NN3G", "CN5", "CN5G", "NN4", "10.0", "2", "180.0", "jr. 11/97"}, {"CN1", "CN5G", "CN5", "NN2", "10.0", "2", "180.0", " "}, {"NN2G", "CN1", "CN5G", "NN4", "2.0", "2", "180.0", " "}, {"CN1", "CN5G", "NN4", "CN4", "2.0", "2", "180.0", " "}, {"CN2", "NN3G", "CN5", "NN2B", "2.0", "2", "180.0", " "}, {"NN3G", "CN5", "NN2B", "CN4", "2.0", "2", "180.0", " "}, {"X", "CN1", "NN3", "X", "1.0", "2", "180.0", "c22"}, {"X", "CN1", "NN2", "X", "0.9", "2", "180.0", "c22"}, {"X", "CN1T", "NN2B", "X", "0.9", "2", "180.0", "From X CN1 NN2 X, for thymines"}, {"X", "CN1", "NN2G", "X", "0.9", "2", "180.0", "c22"}, {"X", "CN1", "NN2U", "X", "0.9", "2", "180.0", "c22"}, {"X", "CN1T", "NN2U", "X", "0.9", "2", "180.0", "c22"}, {"X", "CN3", "NN2", "X", "1.0", "2", "180.0", "c22"}, {"X", "CN3", "NN2B", "X", "1.0", "2", "180.0", "From X CN3 NN2 X, for thymines"}, {"X", "CN3", "CN3", "X", "1.0", "2", "180.0", "c22"}, {"X", "CN3", "CN3T", "X", "1.0", "2", "180.0", "adm jr. 11/97"}, {"X", "CN1", "CN3", "X", "1.0", "2", "180.0", "c22"}, {"X", "CN1", "CN3T", "X", "1.0", "2", "180.0", "adm jr. 11/97"}, {"X", "CN2", "CN3", "X", "0.8", "2", "180.0", "c22"}, {"X", "CN1", "CN5G", "X", "1.0", "2", "180.0", "adm jr. 11/97"}, {"X", "CN2", "NN2G", "X", "1.0", "2", "180.0", " "}, {"X", "CN2", "CN5", "X", "1.0", "2", "180.0", " "}, {"X", "CN4", "NN2", "X", "1.5", "2", "180.0", " "}, {"X", "CN4", "NN2B", "X", "1.5", "2", "180.0", "From X CN4 NN2 X"}, {"X", "CN4", "NN3A", "X", "3.5", "2", "180.0", " "}, {"X", "CN4", "NN4", "X", "2.0", "2", "180.0", "A,G"}, {"X", "CN5", "CN5", "X", "0.0", "2", "180.0", " "}, {"X", "CN5G", "CN5", "X", "0.0", "2", "180.0", "adm jr. 11/97"}, {"X", "CN5", "NN2", "X", "1.5", "2", "180.0", " "}, {"X", "CN5", "NN2B", "X", "1.5", "2", "180.0", "From X CN5 NN2 X"}, {"X", "CN5", "NN3A", "X", "1.0", "2", "180.0", " "}, {"X", "CN5", "NN3G", "X", "1.0", "2", "180.0", "adm jr. 11/97"}, {"X", "CN5", "NN4", "X", "1.0", "2", "180.0", " "}, {"X", "CN5G", "NN4", "X", "1.0", "2", "180.0", "adm jr. 11/97"}, {"X", "CN2", "NN3A", "X", "1.0", "2", "180.0", " "}, {"X", "CN2", "NN3G", "X", "1.0", "2", "180.0", "adm jr. 11/97"}, {"CN1", "NN2", "CN9", "HN9", "0.19", "3", "0.0", "1-M-C"}, {"CN3", "NN2", "CN9", "HN9", "0.00", "3", "0.0", "1-M-C"}, {"CN4", "NN2", "CN9", "HN9", "0.00", "3", "0.0", "9-M-A"}, {"CN5", "NN2", "CN9", "HN9", "0.19", "3", "0.0", "9-M-A"}, {"CN1", "NN2B", "CN9", "HN9", "0.19", "3", "0.0", "1-M-U"}, {"CN1T", "NN2B", "CN9", "HN9", "0.19", "3", "0.0", "1-M-T"}, {"CN3", "NN2B", "CN9", "HN9", "0.00", "3", "0.0", "1-M-T/U"}, {"CN4", "NN2B", "CN9", "HN9", "0.00", "3", "0.0", "9-M-G"}, {"CN5", "NN2B", "CN9", "HN9", "0.19", "3", "0.0", "9-M-G"}, {"CN4", "NN2B", "CN8", "HN8", "0.00", "3", "0.0", "9-E-G"}, {"CN5", "NN2B", "CN8", "HN8", "0.19", "3", "0.0", "9-E-G"}, {"CN4", "NN2B", "CN8", "CN9", "0.00", "3", "0.0", "9-E-G"}, {"CN5", "NN2B", "CN8", "CN9", "0.19", "3", "0.0", "9-E-G"}, {"X", "CN8", "CN8", "X", "0.15", "3", "0.0", "Alkanes (0.2 to 0.15)"}, {"X", "CN8", "CN9", "X", "0.15", "3", "0.0", "Alkanes (0.2 to 0.15)"}, {"HN7", "CN7B", "CN7B", "ON2", "0.195", "3", "0.0", "NADPH and bkbmod"}, {"ON2", "CN7B", "CN7B", "NN2", "0.0", "3", "0.0", "NADPH and bkbmod"}, {"CN7", "CN7B", "ON6", "CN7", "0.6", "6", "180.0", " "}, {"CN7B", "CN7", "CN7", "CN7", "0.4", "6", "0.0", "good for amplitudes"}, {"CN7B", "CN7", "CN7", "CN9", "0.4", "6", "0.0", "good for amplitudes, 5MET"}, {"CN7", "CN7", "CN7", "ON6", "0.6", "6", "0.0", " "}, {"CN7", "CN7", "CN7B", "ON6", "0.6", "6", "0.0", " "}, {"ON2", "CN7", "CN7", "CN7", "0.8", "6", "0.0", " "}, {"ON2", "CN7", "CN7", "CN7", "0.4", "5", "0.0", "Moves the barrier right"}, {"ON2", "CN7", "CN7", "CN7", "2.0", "3", "180.0", " "}, {"ON2", "CN7B", "CN7", "CN7", "0.8", "6", "0.0", " "}, {"ON2", "CN7B", "CN7", "CN7", "0.4", "5", "0.0", "Moves the barrier right"}, {"ON2", "CN7B", "CN7", "CN7", "2.0", "3", "180.0", " "}, {"ON5", "CN7", "CN7", "CN7", "0.8", "6", "0.0", " "}, {"ON5", "CN7", "CN7", "CN7", "0.4", "5", "0.0", "Moves the barrier right"}, {"ON5", "CN7", "CN7", "CN7", "2.0", "3", "180.0", " "}, {"ON5", "CN7", "CN7", "ON5", "0.0", "3", "0.0", " "}, {"ON5", "CN7", "CN7", "ON2", "0.0", "3", "0.0", " "}, {"ON2", "CN7", "CN7B", "ON6", "0.5", "6", "0.0", "for amplitudes"}, {"ON2", "CN7", "CN7B", "ON6", "0.3", "5", "0.0", "on amplitudes"}, {"ON2", "CN7", "CN7B", "ON6", "0.6", "4", "180.0", "c2'endo"}, {"ON2", "CN7", "CN7B", "ON6", "0.2", "3", "0.0", " "}, {"CN7", "CN7", "CN7", "CN8B", "0.5", "4", "180.0", "lowers 180 deg."}, {"CN7B", "NN2", "CN4", "HN3", "0.3", "2", "180.0", "NF"}, {"CN7B", "NN2", "CN5", "CN5", "11.0", "2", "180.0", "adm jr."}, {"CN7B", "NN2", "CN4", "NN4", "11.0", "2", "180.0", "adm jr."}, {"CN7B", "NN2", "CN4", "NN3A", "11.0", "2", "180.0", "adm jr."}, {"ON6", "CN7B", "NN2", "CN5", "1.1", "1", "180.0", " "}, {"ON6", "CN7B", "NN2", "CN4", "1.1", "1", "0.0", "NF"}, {"ON6B", "CN7B", "NN2", "CN5", "1.1", "1", "180.0", " "}, {"ON6B", "CN7B", "NN2", "CN4", "1.1", "1", "0.0", " "}, {"CN8", "CN7B", "NN2", "CN5", "0.3", "3", "0.0", "NF"}, {"CN8", "CN7B", "NN2", "CN4", "0.0", "3", "180.0", "NF"}, {"CN7B", "CN7B", "NN2", "CN5", "0.3", "3", "0.0", "NF"}, {"CN7B", "CN7B", "NN2", "CN4", "0.0", "3", "180.0", "NF"}, {"HN7", "CN7B", "NN2", "CN5", "0.0", "3", "0.0", "NF"}, {"HN7", "CN7B", "NN2", "CN4", "0.195", "3", "0.0", "NF"}, {"CN7B", "NN2", "CN3", "HN3", "0.3", "2", "180.0", "NF"}, {"CN7B", "NN2", "CN1", "ON1C", "11.0", "2", "180.0", "adm jr. from A"}, {"CN7B", "NN2", "CN1", "NN3", "11.0", "2", "180.0", "adm jr."}, {"CN7B", "NN2", "CN3", "CN3", "11.0", "2", "180.0", "adm jr."}, {"ON6", "CN7B", "NN2", "CN1", "0.0", "3", "0.0", " "}, {"ON6", "CN7B", "NN2", "CN3", "1.0", "1", "0.0", "NF"}, {"ON6B", "CN7B", "NN2", "CN1", "0.0", "3", "0.0", " "}, {"ON6B", "CN7B", "NN2", "CN3", "1.0", "1", "0.0", " "}, {"CN8", "CN7B", "NN2", "CN1", "1.0", "3", "0.0", " "}, {"CN8", "CN7B", "NN2", "CN3", "0.0", "3", "180.0", "NF 030697"}, {"CN7B", "CN7B", "NN2", "CN1", "1.0", "3", "0.0", " "}, {"CN7B", "CN7B", "NN2", "CN3", "0.0", "3", "180.0", " "}, {"HN7", "CN7B", "NN2", "CN1", "0.0", "3", "0.0", "NF"}, {"HN7", "CN7B", "NN2", "CN3", "0.195", "3", "0.0", "NF"}, {"CN7B", "NN2B", "CN3", "HN3", "0.3", "2", "180.0", "NF"}, {"CN7B", "NN2B", "CN1T", "ON1", "11.0", "2", "180.0", "adm jr. from A"}, {"CN7B", "NN2B", "CN1T", "NN2U", "11.0", "2", "180.0", "adm jr."}, {"CN7B", "NN2B", "CN3", "CN3T", "11.0", "2", "180.0", "adm jr."}, {"ON6", "CN7B", "NN2B", "CN1", "0.0", "3", "0.0", " "}, {"ON6", "CN7B", "NN2B", "CN1T", "0.7", "3", "0.0", " "}, {"ON6", "CN7B", "NN2B", "CN1T", "0.8", "1", "180.0", " "}, {"ON6", "CN7B", "NN2B", "CN3", "0.9", "1", "0.0", "NF"}, {"ON6B", "CN7B", "NN2B", "CN1", "0.0", "3", "0.0", " "}, {"ON6B", "CN7B", "NN2B", "CN1T", "0.7", "3", "0.0", " "}, {"ON6B", "CN7B", "NN2B", "CN1T", "0.8", "1", "180.0", " "}, {"ON6B", "CN7B", "NN2B", "CN3", "0.9", "1", "0.0", " "}, {"CN8", "CN7B", "NN2B", "CN1T", "0.2", "3", "180.0", " "}, {"CN8", "CN7B", "NN2B", "CN3", "0.0", "3", "180.0", "NF"}, {"CN7B", "CN7B", "NN2B", "CN1T", "0.2", "3", "180.0", " "}, {"CN7B", "CN7B", "NN2B", "CN3", "0.0", "3", "180.0", " "}, {"HN7", "CN7B", "NN2B", "CN1T", "0.0", "3", "0.0", "NF"}, {"HN7", "CN7B", "NN2B", "CN3", "0.195", "3", "0.0", "NF"}, {"CN7B", "NN2B", "CN4", "HN3", "0.3", "2", "180.0", "NF"}, {"CN7B", "NN2B", "CN4", "NN4", "11.0", "2", "180.0", "adm jr."}, {"CN7B", "NN2B", "CN5", "CN5G", "11.0", "2", "180.0", "adm jr. from U"}, {"CN7B", "NN2B", "CN5", "NN3G", "11.0", "2", "180.0", "adm jr."}, {"ON6", "CN7B", "NN2B", "CN5", "0.2", "3", "0.0", " "}, {"ON6", "CN7B", "NN2B", "CN5", "1.1", "1", "180.0", " "}, {"ON6", "CN7B", "NN2B", "CN4", "1.4", "1", "0.0", "NF"}, {"ON6B", "CN7B", "NN2B", "CN5", "0.2", "3", "0.0", " "}, {"ON6B", "CN7B", "NN2B", "CN5", "1.1", "1", "180.0", " "}, {"ON6B", "CN7B", "NN2B", "CN4", "1.4", "1", "0.0", " "}, {"CN8", "CN7B", "NN2B", "CN5", "0.0", "3", "0.0", "NF"}, {"CN8", "CN7B", "NN2B", "CN4", "0.0", "3", "180.0", "NF 030697"}, {"CN7B", "CN7B", "NN2B", "CN5", "0.0", "3", "0.0", "NF"}, {"CN7B", "CN7B", "NN2B", "CN4", "0.0", "3", "180.0", " "}, {"HN7", "CN7B", "NN2B", "CN5", "0.0", "3", "0.0", "NF"}, {"HN7", "CN7B", "NN2B", "CN4", "0.195", "3", "0.0", "NF"}, {"CN7", "ON6", "CN7B", "NN2", "0.0", "3", "0.0", " "}, {"CN7", "ON6", "CN7B", "NN2B", "0.0", "3", "0.0", " "}, {"CN7", "ON6B", "CN7B", "NN2", "0.0", "3", "0.0", " "}, {"CN7", "ON6B", "CN7B", "NN2B", "0.0", "3", "0.0", " "}, {"CN7", "CN8", "CN7B", "NN2", "0.0", "3", "0.0", " "}, {"CN7", "CN8", "CN7B", "NN2B", "0.0", "3", "0.0", " "}, {"HN8", "CN8", "CN7B", "NN2", "0.0", "3", "0.0", " "}, {"HN8", "CN8", "CN7B", "NN2B", "0.0", "3", "0.0", " "}, {"CN7", "CN7B", "CN7B", "NN2", "0.0", "3", "0.0", " "}, {"CN7", "CN7B", "CN7B", "NN2B", "0.0", "3", "0.0", " "}, {"HN7", "CN7B", "CN7B", "NN2", "0.0", "3", "0.0", " "}, {"HN7", "CN7B", "CN7B", "NN2B", "0.0", "3", "0.0", " "}, {"CN7", "CN8B", "ON2", "P", "0.2", "1", "120.0", "C4'-C5'-O5'-P, adm jr."}, {"CN7", "CN8B", "ON2", "P2", "0.2", "1", "120.0", "C4'-C5'-O5'-P, adm jr., adm, 2011 DNA update"}, {"CN7", "CN8B", "ON5", "HN5", "1.3300", "1", "0.00", " "}, {"CN7", "CN8B", "ON5", "HN5", "0.1800", "2", "0.00", " "}, {"CN7", "CN8B", "ON5", "HN5", "0.3200", "3", "0.00", " "}, {"HN8", "CN8B", "ON5", "HN5", "0.0", "3", "0.0", " "}, {"CN7", "CN7", "CN8B", "ON2", "0.20", "4", "180.0", "adm jr."}, {"CN7", "CN7", "CN8B", "ON2", "0.80", "3", "180.0", "C3'-C4'-C5'-O5'"}, {"CN7", "CN7", "CN8B", "ON2", "0.40", "2", "0.0", " "}, {"CN7", "CN7", "CN8B", "ON2", "2.50", "1", "180.0", " "}, {"CN8", "CN7", "CN8B", "ON2", "0.2", "3", "180.0", "from gam, carbocyclic and 25P1"}, {"CN7", "CN7", "CN8B", "ON5", "0.20", "4", "180.0", "adm jr."}, {"CN7", "CN7", "CN8B", "ON5", "0.80", "3", "180.0", "C3'-C4'-C5'-O5'"}, {"CN7", "CN7", "CN8B", "ON5", "0.40", "2", "0.0", " "}, {"CN7", "CN7", "CN8B", "ON5", "2.50", "1", "180.0", " "}, {"ON6", "CN7", "CN8B", "ON2", "3.4", "1", "180.0", "O4'-C4'-C5'-O5',influences +60"}, {"ON6B", "CN7", "CN8B", "ON2", "3.4", "1", "180.0", "RNA"}, {"ON6", "CN7", "CN8B", "ON5", "3.4", "1", "180.0", " "}, {"ON6B", "CN7", "CN8B", "ON5", "3.4", "1", "180.0", "RNA"}, {"HN8", "CN8B", "CN7", "CN7", "0.195", "3", "0.0", " "}, {"HN8", "CN8B", "CN7", "CN8", "0.195", "1", "0.0", "carbocylic, 25P1"}, {"HN8", "CN8B", "CN7", "ON6", "0.195", "1", "0.0", " "}, {"HN8", "CN8B", "CN7", "ON6B", "0.195", "1", "0.0", "RNA"}, {"HN7", "CN7", "CN8B", "ON2", "0.195", "3", "0.0", "H-C4'-C5'-O5'"}, {"HN7", "CN7", "CN8B", "ON5", "0.195", "3", "0.0", " "}, {"HN8", "CN8", "CN8", "ON6", "0.195", "1", "0.0", " "}, {"CN9", "CN7", "CN7", "CN8B", "0.5", "4", "180.0", "-> CN9"}, {"HN7", "CN7", "CN9", "HN9", "0.195", "3", "0.0", "-> CN9"}, {"CN7", "CN7", "CN9", "HN9", "0.195", "3", "0.0", "-> CN9"}, {"ON6", "CN7", "CN9", "HN9", "0.195", "3", "0.0", "-> CN9"}, {"HN7", "CN7", "CN7", "CN9", "0.195", "3", "0.0", "-> CN9"}, {"ON2", "CN7", "CN7", "CN9", "0.2", "4", "0.0", "-> CN9"}, {"ON2", "CN7", "CN7", "CN9", "0.8", "3", "180.0", "-> CN9"}, {"CN8", "CN7", "CN7", "CN9", "0.5", "4", "180.0", "-> CN9"}, {"CN8", "CN7", "CN7", "CN8B", "0.5", "4", "180.0", "lowers 180 deg."}, {"CN7B", "CN7", "CN7", "CN8B", "0.2", "4", "180.0", "RNA"}, {"ON2", "CN7", "CN7", "CN8B", "0.2", "4", "0.0", " "}, {"ON2", "CN7", "CN7", "CN8B", "0.8", "3", "180.0", "P [100,250]"}, {"ON5", "CN7", "CN7", "CN8B", "0.2", "4", "0.0", " "}, {"ON5", "CN7", "CN7", "CN8B", "0.8", "3", "180.0", " "}, {"ON2", "CN7", "CN7", "ON6", "0.5", "6", "0.0", "good for amplitudes"}, {"ON2", "CN7", "CN7", "ON6", "0.3", "5", "0.0", "impact on amplitudes"}, {"ON2", "CN7", "CN7", "ON6", "0.6", "4", "180.0", "increases c2'endo"}, {"ON2", "CN7", "CN7", "ON6", "0.2", "3", "0.0", " "}, {"ON2", "CN7", "CN7", "ON6B", "0.4", "6", "0.0", "RNA, good for amplitudes"}, {"ON2", "CN7", "CN7", "ON6B", "0.0", "5", "0.0", "RNA, impact on amplitudes"}, {"ON2", "CN7", "CN7", "ON6B", "0.0", "4", "180.0", "RNA, increases c2'endo"}, {"ON2", "CN7", "CN7", "ON6B", "1.6", "3", "0.0", "RNA, increases C2'endo"}, {"ON2", "CN7B", "CN7B", "ON6B", "0.4", "6", "0.0", "RNA, good for amplitudes"}, {"ON2", "CN7B", "CN7B", "ON6B", "0.0", "5", "0.0", "RNA, impact on amplitudes"}, {"ON2", "CN7B", "CN7B", "ON6B", "0.0", "4", "180.0", "RNA, increases c2'endo"}, {"ON2", "CN7B", "CN7B", "ON6B", "1.6", "3", "0.0", "RNA, increases C2'endo"}, {"ON5", "CN7", "CN7", "ON6", "0.5", "6", "0.0", " "}, {"ON5", "CN7", "CN7", "ON6", "0.3", "5", "0.0", " "}, {"ON5", "CN7", "CN7", "ON6", "0.6", "4", "180.0", " "}, {"ON5", "CN7", "CN7", "ON6", "0.2", "3", "0.0", " "}, {"ON5", "CN7", "CN7", "ON6B", "0.4", "6", "0.0", " "}, {"ON5", "CN7", "CN7", "ON6B", "0.0", "5", "0.0", " "}, {"ON5", "CN7", "CN7", "ON6B", "0.0", "4", "180.0", " "}, {"ON5", "CN7", "CN7", "ON6B", "1.6", "3", "0.0", "increases c2'endo"}, {"CN7B", "ON6", "CN7", "CN8B", "0.8", "3", "0.0", "P [30,80]"}, {"CN7B", "ON6B", "CN7", "CN8B", "2.0", "3", "0.0", "To lower barrier in RNA"}, {"CN7B", "ON6B", "CN7", "CN9", "2.0", "3", "0.0", "To lower barrier in RNA, 5MET"}, {"ON2", "CN7", "CN8", "CN7B", "0.8", "6", "0.0", " "}, {"ON2", "CN7", "CN8", "CN7B", "0.4", "5", "0.0", "Moves the barrier right"}, {"ON2", "CN7", "CN8", "CN7B", "2.0", "3", "180.0", " "}, {"ON2", "CN7", "CN7B", "CN7B", "0.6", "6", "0.0", "RNA"}, {"ON2", "CN7", "CN7B", "CN7B", "0.0", "5", "0.0", "RNA c2/c3 endo in RNA"}, {"ON2", "CN7", "CN7B", "CN7B", "1.6", "3", "180.0", " "}, {"ON5", "CN7", "CN8", "CN7B", "0.8", "6", "0.0", " "}, {"ON5", "CN7", "CN8", "CN7B", "0.4", "5", "0.0", " "}, {"ON5", "CN7", "CN8", "CN7B", "2.0", "3", "180.0", " "}, {"ON5", "CN7", "CN7B", "CN7B", "0.6", "6", "0.0", "RNA, c2/c3 endo"}, {"ON5", "CN7", "CN7B", "CN7B", "0.0", "5", "0.0", "RNA"}, {"ON5", "CN7", "CN7B", "CN7B", "1.6", "3", "180.0", "RNA"}, {"ON2", "CN7", "CN8", "HN8", "0.195", "3", "0.0", " "}, {"ON5", "CN7", "CN8", "HN8", "0.195", "3", "180.0", " "}, {"ON2", "CN7", "CN7B", "HN7", "0.195", "3", "0.0", "RNA"}, {"ON5", "CN7", "CN7B", "HN7", "0.195", "3", "180.0", "RNA"}, {"HN7", "CN7", "CN7", "ON2", "0.195", "3", "0.0", " "}, {"HN7", "CN7", "CN7", "ON5", "0.195", "3", "0.0", " "}, {"CN7", "CN7", "ON2", "P2", "0.6", "5", "0.0", "adm, 2011 DNA update"}, {"CN7", "CN7", "ON2", "P2", "0.2", "4", "0.0", "locat of 200 mimima, adm, 2011 DNA update"}, {"CN7", "CN7", "ON2", "P2", "0.0", "3", "180.0", "barE beteen minima, adm, 2011 DNA update"}, {"CN7", "CN7", "ON2", "P2", "0.4", "2", "0.0", "relE of 200 vs 275 min, adm, 2011 DNA update"}, {"CN7", "CN7", "ON2", "P2", "1.9", "1", "180.0", "adm, 2011 DNA update"}, {"CN7", "CN7", "ON2", "P", "0.6", "5", "0.0", "RNA"}, {"CN7", "CN7", "ON2", "P", "0.2", "4", "0.0", "locat of 200 mimima, RNA"}, {"CN7", "CN7", "ON2", "P", "0.0", "3", "180.0", "barE beteen minima, RNA"}, {"CN7", "CN7", "ON2", "P", "0.4", "2", "0.0", "relE of 200 vs 275 min, RNA"}, {"CN7", "CN7", "ON2", "P", "1.9", "1", "180.0", "RNA"}, {"CN8", "CN7", "ON2", "P", "2.5", "1", "180.0", "3-terminal phosphate"}, {"CN8", "CN7", "ON2", "P2", "1.9", "1", "180.0", "adm, 2011 DNA update new param, eps"}, {"CN7B", "CN7", "ON2", "P", "2.5", "1", "180.0", "RNA"}, {"CN7B", "CN7B", "ON2", "P", "2.5", "1", "180.0", "NADPH and bkbmod"}, {"CN7", "CN7B", "ON2", "P", "2.5", "1", "180.0", "NADPH and bkbmod"}, {"CN7", "CN7", "ON5", "HN5", "0.5", "3", "0.0", " "}, {"CN7", "CN7", "ON5", "HN5", "0.3", "2", "180.0", " "}, {"CN7", "CN7", "ON5", "HN5", "1.5", "1", "0.0", " "}, {"CN8", "CN7", "ON5", "HN5", "0.5", "3", "0.0", " "}, {"CN8", "CN7", "ON5", "HN5", "1.0", "2", "180.0", " "}, {"CN8", "CN7", "ON5", "HN5", "0.3", "1", "0.0", " "}, {"CN7B", "CN7", "ON5", "HN5", "0.8", "3", "0.0", "RNA"}, {"CN7B", "CN7", "ON5", "HN5", "0.5", "1", "0.0", "RNA"}, {"HN7", "CN7", "ON5", "HN5", "0.0", "3", "0.0", " "}, {"HN7", "CN7", "CN8B", "HN8", "0.195", "3", "0.0", "H-C4'-C5'-H"}, {"HN7", "CN7", "CN7", "CN8B", "0.195", "3", "0.0", "H-C3'-C4'-C5'"}, {"CN8", "CN7B", "ON6", "CN7", "0.6", "6", "180.0", " "}, {"CN8", "CN7", "CN7", "ON6", "1.0", "4", "0.0", "adm, 2011 DNA update new param, C2'-C3'-C4'-O4'; lowers c3'endo"}, {"CN8", "CN7", "CN7", "ON6", "0.3", "5", "180.0", "adm, 2011 DNA update new param, C2'-C3'-C4'-O4'; position of minima"}, {"CN8", "CN7", "CN7", "ON6", "0.3", "6", "180.0", "adm, 2011 DNA update new param, C2'-C3'-C4'-O4'; position of minima"}, {"CN7B", "CN7B", "ON6B", "CN7", "0.0", "6", "0.0", "RNA, Lowers barrier"}, {"CN7B", "CN7", "CN7", "ON6B", "0.0", "3", "0.0", "RNA"}, {"CN7", "CN8", "CN7B", "ON6", "0.6", "6", "0.0", "C3'-C2'-C1'-O4', adjust barrier"}, {"CN7", "CN7B", "CN7B", "ON6B", "0.4", "6", "0.0", "RNA"}, {"CN7B", "CN8", "CN7", "CN7", "0.4", "6", "0.0", "good for amplitudes"}, {"CN7B", "CN7B", "CN7", "CN7", "0.0", "6", "0.0", "RNA"}, {"CN7", "CN7", "ON6", "CN7B", "0.6", "6", "180.0", "C3'-C4'-O4'-C1'"}, {"CN7", "CN7", "ON6B", "CN7B", "0.0", "6", "180.0", "RNA"}, {"HN7", "CN7", "CN7", "CN8", "0.0", "3", "0.0", " "}, {"HN7", "CN7", "CN8", "CN7B", "0.195", "3", "0.0", " "}, {"HN7", "CN7B", "CN8", "CN7", "0.195", "3", "0.0", " "}, {"HN7", "CN7", "CN7", "ON6", "0.195", "3", "180.0", "useful"}, {"HN8", "CN8", "CN7B", "ON6", "0.195", "3", "0.0", " "}, {"HN7", "CN7", "CN7", "HN7", "0.195", "3", "0.0", " "}, {"HN7", "CN7B", "CN8", "HN8", "0.195", "3", "0.0", " "}, {"HN7", "CN7", "CN8", "HN8", "0.195", "3", "0.0", " "}, {"HN8", "CN8", "CN7", "CN7", "0.195", "3", "0.0", "useful *cccc*"}, {"HN7", "CN7", "ON6", "CN7B", "0.195", "3", "0.0", " "}, {"HN7", "CN7B", "ON6", "CN7", "0.000", "3", "0.0", " "}, {"HN7", "CN7", "CN7", "ON6B", "0.195", "3", "180.0", "RNA"}, {"HN9", "CN9", "CN7", "ON6B", "0.195", "3", "180.0", "RNA, 5MET"}, {"HN8", "CN8", "CN7B", "ON6B", "0.195", "3", "0.0", "RNA"}, {"HN7", "CN7B", "ON6B", "CN7", "0.000", "3", "0.0", "RNA"}, {"HN7", "CN7", "ON6B", "CN7B", "0.195", "3", "0.0", "RNA"}, {"HN7", "CN7", "CN7B", "CN7B", "0.195", "3", "0.0", "RNA, H-C3'-C2'-C1'"}, {"HN7", "CN7B", "CN7B", "CN7", "0.195", "3", "0.0", "RNA, H-C1'-C2'-C3'"}, {"HN7", "CN7B", "CN7B", "ON6B", "0.195", "3", "0.0", "RNA, H-C2'-C1'-O4'"}, {"NN2", "CN7B", "CN7B", "ON5", "0.000", "3", "0.0", "Adenine and cytosine"}, {"NN2B", "CN7B", "CN7B", "ON5", "0.000", "3", "0.0", "Guanine and uracil"}, {"ON5", "CN7B", "CN7B", "HN7", "0.000", "3", "0.0", " "}, {"HN7", "CN7B", "CN7B", "HN7", "0.000", "3", "0.0", " "}, {"CN7", "CN7", "CN7B", "ON5", "0.000", "3", "0.0", " "}, {"ON6B", "CN7B", "CN7B", "ON5", "0.000", "3", "0.0", " "}, {"ON5", "CN7B", "CN7", "ON2", "0.000", "3", "0.0", " "}, {"ON5", "CN7", "CN7B", "ON2", "0.000", "3", "0.0", " "}, {"ON5", "CN7B", "CN7", "ON5", "0.000", "3", "0.0", " "}, {"HN7", "CN7B", "ON5", "HN5", "0.000", "3", "0.0", " "}, {"HN5", "ON5", "CN7B", "CN7B", "0.000", "6", "180.0", "ejd, 2010 RNA update"}, {"HN5", "ON5", "CN7B", "CN7B", "0.400", "3", "0.0", "shifts min, ejd, 2010 RNA update"}, {"HN5", "ON5", "CN7B", "CN7B", "0.400", "2", "0.0", "ejd, 2010 RNA update"}, {"HN5", "ON5", "CN7B", "CN7B", "0.800", "1", "0.0", "height of right barrier and can shift min, ejd, 2010 RNA update"}, {"HN5", "ON5", "CN7B", "CN7", "0.200", "3", "0.0", "ejd, 2010 RNA update"}, {"HN5", "ON5", "CN7B", "CN7", "0.000", "2", "180.0", "ejd, 2010 RNA update"}, {"HN5", "ON5", "CN7B", "CN7", "2.000", "1", "0.0", "height of left side barrier, ejd, 2010 RNA update"}, {"CN7B", "ON6", "CN7", "CN9", "0.0", "3", "0.0", "added for sugar model compounds"}, {"HN7", "CN7", "CN7B", "ON5", "0.195", "3", "0.0", "for nadp/nadph (NOT!), adm jr."}, {"HN7", "CN7B", "CN7", "CN7", "0.195", "3", "0.0", "for nadp/nadph (NOT!), adm jr."}, {"HN7", "CN7", "CN7", "CN7B", "0.195", "3", "0.0", "for nadp/nadph (NOT!), adm jr."}, {"HN7", "CN7", "CN7B", "HN7", "0.195", "3", "0.0", "for nadp/nadph (NOT!), adm jr."}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm36_na info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm36_na_impropers[15][8]= {{"HN2", "X", "X", "NN2", "1.0", "0", "0.0", "adm jr. 11/97"}, {"NN2B", "CN4", "CN5", "HN2", "7.0", "0", "0.0", "adm jr. 11/97"}, {"HN1", "X", "X", "NN1", "4.0", "0", "0.0", "adm jr. 11/97"}, {"NN1", "CN2", "HN1", "HN1", "6.0", "0", "0.0", "adm jr. 11/97"}, {"CN1", "X", "X", "ON1", "90.0", "0", "0.0", " "}, {"CN1T", "X", "X", "ON1", "90.0", "0", "0.0", " "}, {"CN1", "NN2G", "CN5G", "ON1", "90.0", "0", "0.0", " "}, {"CN1T", "NN2B", "NN2U", "ON1", "110.0", "0", "0.0", "adm jr. 11/97"}, {"CN1", "NN2U", "CN3T", "ON1", "90.0", "0", "0.0", "adm jr. 11/97"}, {"CN1", "X", "X", "ON1C", "80.0", "0", "0.0", "par_32, adm jr. 10/2/91"}, {"CN2", "X", "X", "NN1", "90.0", "0", "0.0", " "}, {"CN2", "NN3G", "NN2G", "NN1", "40.0", "0", "0.0", " "}, {"CN2", "NN3A", "CN5", "NN1", "40.0", "0", "0.0", " "}, {"CN2", "NN3", "CN3", "NN1", "60.0", "0", "0.0", " "}, {"CN9", "X", "X", "CN3T", "14.0", "0", "0.0", "adm jr. 11/97"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm36_na info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm36_na_vdw[42][6]= {{"HN1", "-0.0460", "0.2245", " ", " ", " "}, {"HN2", "-0.0460", "0.2245", " ", " ", " "}, {"HN3", "-0.046", "1.1000", " ", " ", "aromatic Hvdw"}, {"HN4", "-0.0460", "0.2245", " ", " ", " "}, {"HN5", "-0.0460", "0.2245", " ", " ", " "}, {"HN6", "-0.0220", "1.3200", " ", " ", " "}, {"HN7", "-0.0220", "1.3200", " ", " ", " "}, {"HN8", "-0.0280", "1.3400", " ", " ", "bound to CN8"}, {"HN9", "-0.0240", "1.3400", " ", " ", "bound to CN9"}, {"NN1", "-0.20", "1.85", " ", " ", " "}, {"NN2", "-0.20", "1.85", " ", " ", " "}, {"NN2B", "-0.20", "1.85", " ", " ", "NN2, for N9 in guanines"}, {"NN2G", "-0.20", "1.85", " ", " ", " "}, {"NN2U", "-0.20", "1.85", " ", " ", " "}, {"NN3", "-0.20", "1.85", " ", " ", " "}, {"NN3A", "-0.20", "1.85", " ", " ", " "}, {"NN3G", "-0.20", "1.85", " ", " ", " "}, {"NN4", "-0.20", "1.85", " ", " ", " "}, {"NN6", "-0.20", "1.85", " ", " ", " "}, {"ON1", "-0.1200", "1.70", " ", " ", " "}, {"ON1C", "-0.1200", "1.70", " ", " ", " "}, {"ON2", "-0.1521", "1.77", " ", " ", " "}, {"ON3", "-0.1200", "1.70", " ", " ", " "}, {"ON4", "-0.1521", "1.77", " ", " ", " "}, {"ON5", "-0.1521", "1.77", " ", " ", " "}, {"ON6", "-0.1521", "1.77", " ", " ", " "}, {"ON6B", "-0.1521", "1.77", " ", " ", " "}, {"CN1", "-0.10", "1.9000", " ", " ", " "}, {"CN1T", "-0.10", "1.9000", " ", " ", " "}, {"CN2", "-0.10", "1.9000", " ", " ", " "}, {"CN3", "-0.09", "1.9000", " ", " ", " "}, {"CN3T", "-0.09", "1.9000", " ", " ", "adm jr."}, {"CN4", "-0.075", "1.9000", " ", " ", " "}, {"CN5", "-0.075", "1.9000", " ", " ", " "}, {"CN5G", "-0.075", "1.9000", " ", " ", " "}, {"CN7", "-0.02", "2.275", "-0.01", "1.90", "to protein CT1"}, {"CN7B", "-0.02", "2.275", "-0.01", "1.90", "to protein CT1"}, {"CN8", "-0.0560", "2.010", "-0.01", "1.90", " "}, {"CN8B", "-0.0560", "2.010", "-0.01", "1.90", " "}, {"CN9", "-0.0780", "2.040", "-0.01", "1.90", " "}, {"P", "-0.585", "2.15", " ", " ", " "}, {"P2", "-0.585", "2.15", " ", " ", " "}}; atomes_1.3.1/src/calc/force_fields/charmm_silicates.c0000664000175000017500000002754615212624223022313 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm_silicates.c * @short CHARMM-charmm_silicates force field, from 'charmm_silicates' * @author Sébastien Le Roux */ /* * This file: 'charmm_silicates.c' * * Contains: * CHARMM-charmm_silicates force field, data from taken from: - the file: 'charmm_silicates' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm_silicates_atoms[13][5] Bonds : charmm_silicates_bonds[14][5] Angles : charmm_silicates_angles[27][8] Dihedrals : charmm_silicates_dihedrals[34][8] Non bonded : charmm_silicates_vdw[13][6] */ #include "global.h" int charmm_silicates_objects[14] = {13, 0, 0, 14, 0, 0, 27, 0, 34, 0 , 0, 0, 13, 0}; int charmm_silicates_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 0, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm_silicates info */ char * charmm_silicates_atoms[13][5]= {{"H", "1.008000", "HT", "TIPS3P WATER HYDROGEN", "1"}, {"O", "15.99940", "OT", "TIPS3P WATER OXYGEN", "2"}, {"D", "1.008000", "DUM", "dummy atom", "3"}, {"H", "1.008000", "HSiO", "Si hydroxyl hydrogen;", "100"}, {"H", "1.008000", "HSiA", "Si aliphatic hydrogen;", "101"}, {"H", "1.008000", "HAl", "Si aliphatic hydrogen;", "102"}, {"O", "15.999000", "OSiH", "Si Hydroxyl Oxygen;", "103"}, {"O", "15.999000", "OSiE", "Si Ester Oxygen;", "104"}, {"O", "15.999000", "OSiA", "Si Ester Oxygen;", "105"}, {"O", "15.999000", "OAl", "Si Hydroxyl Oxygen;", "106"}, {"Si", "28.085500", "Si", "Si Atom;", "107"}, {"Si", "28.085500", "SiH3", "Si Atom;", "108"}, {"Al", "26.981540", "Al", "Aluminum Atom;", "110"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm_silicates info V(R) = Kb x (R - R0)^2 */ char * charmm_silicates_bonds[14][5]= {{"Si", "OSiE", "302.000", "1.698", " "}, {"Al", "OSiE", "302.000", "1.698", " "}, {"Si", "OSiA", "302.000", "1.698", " "}, {"Si", "OSiH", "325.000", "1.68", " "}, {"Al", "OAl", "302.000", "2.00", " "}, {"SiH3", "OSiE", "304.000", "1.682", " "}, {"HSiO", "OSiH", "566.000", "0.975", " "}, {"HAl", "OAl", "566.000", "0.9600", " "}, {"Al", "HAl", "450.000", "0.9572", " "}, {"Si", "HSiA", "204.0", "1.489", " "}, {"HSiA", "SiH3", "204.0", "1.489", " "}, {"Si", "OAl", "304.000", "1.682", " "}, {"HT", "HT", "0.0", "1.5139", "from TIPS3P geometry (for SHAKE w/PARAM)"}, {"HT", "OT", "450.0", "0.9572", "from TIPS3P geometry"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm_silicates info V(S) = Kub x (S - S0)^2 */ char * charmm_silicates_angles[27][8]= {{"OSiE", "Si", "OSiE", "30.000", "117.00", " ", " ", "from sim1"}, {"OSiE", "SiH3", "OSiE", "30.000", "121.50", " ", " ", "from sim1"}, {"Si", "OSiE", "SiH3", "34.000", "150.50", " ", " ", "from sim1"}, {"Si", "OSiE", "Si", "34.000", "150.00", " ", " ", "from sim1"}, {"Si", "OSiA", "Si", "34.000", "150.00", " ", " ", "from sim1"}, {"OSiA", "Si", "OSiH", "32.000", "126.00", " ", " ", "from sim1"}, {"OSiA", "Si", "OSiA", "30.000", "121.50", " ", " ", "from sim1"}, {"OSiA", "Si", "OSiE", "30.000", "121.50", " ", " ", "from sim1"}, {"SiH3", "OSiE", "SiH3", "34.000", "159.00", " ", " ", "from sim1"}, {"HSiA", "SiH3", "HSiA", "30.00", "119.00", " ", " ", "from sim1"}, {"HSiA", "SiH3", "OSiE", "44.000", "118.00", " ", " ", "from sim1"}, {"Si", "OSiH", "HSiO", "34.00", "122.50", " ", " ", "quartz, from sim2"}, {"OSiE", "Si", "OSiH", "32.000", "126.00", " ", " ", "from sim2"}, {"OSiH", "Si", "OSiH", "30.000", "117.00", " ", " ", "from sim2"}, {"Al", "OAl", "Al", "30.000", "98.00", " ", " ", " "}, {"Al", "OAl", "Si", "30.000", "117.00", " ", " ", " "}, {"OAl", "Si", "OSiE", "30.000", "117.00", " ", " ", " "}, {"HAl", "OAl", "Al", "35.000", "93.40", " ", " ", " "}, {"OAl", "Al", "HAl", "35.000", "93.40", " ", " ", " "}, {"OAl", "Al", "OAl", "30.000", "90.00", " ", " ", " "}, {"OSiE", "Al", "OSiE", "30.000", "117.00", " ", " ", " "}, {"OSiE", "Al", "OAl", "30.000", "117.00", " ", " ", " "}, {"OSiE", "Al", "HAl", "30.00", "119.00", " ", " ", " "}, {"Al", "OSiE", "Si", "30.000", "117.00", " ", " ", " "}, {"Al", "OSiE", "Al", "30.000", "117.00", " ", " ", " "}, {"OSiE", "Si", "HSiA", "44.000", "118.00", " ", " ", " "}, {"HT", "OT", "HT", "55.0", "104.52", " ", " ", "FROM TIPS3P GEOMETRY"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm_silicates info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm_silicates_dihedrals[34][8]= {{"OSiE", "Si", "OSiE", "SiH3", "0.18000", "5", "0.00", "quartz, from sim1"}, {"OSiE", "Si", "OSiE", "Si", "0.18000", "5", "0.00", "quartz, from sim1"}, {"OSiA", "Si", "OSiA", "Si", "0.18000", "5", "0.00", "quartz, from sim1"}, {"OSiE", "Si", "OSiA", "Si", "0.18000", "5", "0.00", "quartz, from sim1"}, {"OSiE", "SiH3", "OSiE", "Si", "0.18000", "5", "0.00", "quartz, from sim1"}, {"OSiH", "Si", "OSiE", "SiH3", "0.12000", "5", "0.00", "quartz, from sim1"}, {"Si", "OSiE", "Si", "OSiA", "0.12000", "5", "0.00", "quartz, from sim1"}, {"HSiA", "SiH3", "OSiE", "Si", "0.20000", "3", "0.00", "quartz, from sim1"}, {"HSiA", "SiH3", "OSiE", "SiH3", "0.20000", "3", "0.00", "quartz, from sim1"}, {"OSiE", "Si", "OSiH", "HSiO", "0.30000", "3", "0.00", "quartz, from sim2"}, {"OSiH", "Si", "OSiH", "HSiO", "0.35000", "3", "0.00", "quartz, from sim2"}, {"Si", "OSiA", "Si", "OSiH", "0.12000", "5", "0.00", "quartz, from sim1"}, {"SiH3", "OSiE", "SiH3", "OSiE", "0.18000", "5", "0.00", "quartz, from sim1"}, {"Si", "OSiE", "Si", "HSiA", "0.20000", "3", "0.00", " "}, {"Si", "OSiE", "Si", "OSiH", "0.18000", "5", "0.00", " "}, {"SiH3", "OSiE", "Si", "OSiA", "0.18000", "5", "0.00", " "}, {"OSiA", "Si", "OSiH", "HSiO", "0.35000", "3", "0.00", "quartz, from sim2"}, {"OAl", "Al", "OAl", "HAl", "0.10000", "3", "0.00", " "}, {"Al", "OAl", "Si", "OSiE", "0.10000", "3", "0.00", " "}, {"Al", "OAl", "Al", "OAl", "0.10000", "3", "0.00", " "}, {"Al", "OAl", "Al", "HAl", "0.30000", "3", "0.00", " "}, {"Si", "OAl", "Al", "OAl", "0.10000", "3", "0.00", " "}, {"Si", "OSiE", "Si", "OAl", "0.10000", "3", "0.00", " "}, {"Si", "OAl", "Al", "HAl", "0.30000", "3", "0.00", " "}, {"HAl", "OAl", "Al", "HAl", "0.30000", "3", "0.00", " "}, {"Al", "OSiE", "Si", "OSiE", "0.10000", "3", "0.00", " "}, {"Al", "OSiE", "Al", "OSiE", "0.10000", "3", "0.00", " "}, {"Al", "OSiE", "Al", "OAl", "0.10000", "3", "0.00", " "}, {"Al", "OAl", "Al", "OSiE", "0.10000", "3", "0.00", " "}, {"Al", "OSiE", "Al", "HAl", "0.30000", "3", "0.00", " "}, {"Si", "OSiE", "Al", "OSiE", "0.30000", "3", "0.00", " "}, {"Si", "OSiE", "Al", "OAl", "0.30000", "3", "0.00", " "}, {"Si", "OSiE", "Al", "HAl", "0.10000", "3", "0.00", " "}, {"OSiE", "Al", "OAl", "HAl", "0.10000", "3", "0.00", " "}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm_silicates info V(psi) = Kpsi x (psi - psi0)^2 */ /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm_silicates info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm_silicates_vdw[13][6]= {{"HSiO", "-0.0460", "0.2245", " ", " ", "proteins"}, {"HSiA", "-0.022", "1.3200", " ", " ", "alkane"}, {"HAl", "-0.022", "1.3200", " ", " ", "alkane"}, {"Al", "-0.650", "2.2000", " ", " ", "to Phos"}, {"Si", "-0.600", "2.2000", " ", " ", "to Phos"}, {"SiH3", "-0.600", "2.2000", " ", " ", "to Phos"}, {"OSiH", "-0.1521", "1.7700", " ", " ", "proteins"}, {"OSiE", "-0.1521", "1.7700", " ", " ", "nucleic acids"}, {"OSiA", "-0.1521", "1.7700", " ", " ", "nucleic acids"}, {"OAl", "-0.1521", "1.7700", " ", " ", "proteins"}, {"HT", "-0.046", "0.2245", " ", " ", "water"}, {"OT", "-0.1521", "1.7682", " ", " ", "water"}, {"DUM", "-0.0000", "0.0000", " ", " ", "atom"}}; atomes_1.3.1/src/calc/force_fields/amber98.c0000664000175000017500000013163115212624223020242 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file amber98.c * @short Amber-98 force field, from 'parm98' * @author Sébastien Le Roux */ /* * This file: 'amber98.c' * * Contains: * Amber-98 force field, data from taken from: - the file: 'parm98' This file contains several tables: Atoms : amber98_atoms[54][4] Equi vdw : amber98_equi[2][12] Bonds : amber98_bonds[83][5] Angles : amber98_angles[191][6] Dihedrals : amber98_dihedrals[83][9] Impropers : amber98_impropers[31][8] Non bonded : amber98_vdw[35][4] */ #include "global.h" int amber98_objects[14] = {54, 2, 0, 83, 0, 0, 191, 0, 83, 0 , 0, 31, 35, 0}; int amber98_dim[14] = {4, 12, 0, 5, 0, 0, 6, 0, 9, 0, 0, 8, 4, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= Amber_98 info */ char * amber98_atoms[54][4]= {{"Br", "79.90", "BR", "! bromine"}, {"C", "12.01", "C", "sp2 C carbonyl group"}, {"C", "12.01", "CA", "sp2 C pure aromatic (benzene)"}, {"C", "12.01", "CB", "sp2 aromatic C, 5 and 6 membered ring junction"}, {"C", "12.01", "CC", "sp2 aromatic C, 5 memb. ring HIS"}, {"C", "12.01", "CK", "sp2 C 5 memb.ring in purines"}, {"C", "12.01", "CM", "sp2 C pyrimidines in pos. 5 and 6"}, {"C", "12.01", "CN", "sp2 C aromatic 5 and 6 memb.ring junct.(TRP)"}, {"C", "12.01", "CQ", "sp2 C in 5 mem.ring of purines between 2 N"}, {"C", "12.01", "CR", "sp2 arom as CQ but in HIS"}, {"C", "12.01", "CT", "sp3 aliphatic C"}, {"C", "12.01", "CV", "sp2 arom. 5 memb.ring w/1 N and 1 H (HIS)"}, {"C", "12.01", "CW", "sp2 arom. 5 memb.ring w/1 N-H and 1 H (HIS)"}, {"C", "12.01", "C*", "sp2 arom. 5 memb.ring w/1 subst. (TRP)"}, {"Ca", "40.08", "C0", "calcium"}, {"F", "19.00", "F", "fluorine"}, {"H", "1.008", "H", "H bonded to nitrogen atoms"}, {"H", "1.008", "HC", "H aliph. bond. to C without electrwd.group"}, {"H", "1.008", "H1", "H aliph. bond. to C with 1 electrwd. group"}, {"H", "1.008", "H2", "H aliph. bond. to C with 2 electrwd.groups"}, {"H", "1.008", "H3", "H aliph. bond. to C with 3 eletrwd.groups"}, {"H", "1.008", "HA", "H arom. bond. to C without elctrwd. groups"}, {"H", "1.008", "H4", "H arom. bond. to C with 1 electrwd. group"}, {"H", "1.008", "H5", "H arom. bond. to C with 2 electrwd. groups"}, {"H", "1.008", "HO", "hydroxyl group"}, {"H", "1.008", "HS", "hydrogen bonded to sulphur"}, {"H", "1.008", "HW", "H in TIP3P water"}, {"H", "1.008", "HP", "H bonded to C next to positively charged gr"}, {"I", "126.9", "I", "iodine"}, {"I", "35.45", "IM", "assumed to be Cl-"}, {"I", "22.99", "IP", "assumed to be Na+"}, {"I", "131.0", "IB", "'big ion w/ waters' for vacuum (Na+, 6H2O)"}, {"Mg", "24.305", "MG", "magnesium"}, {"N", "14.01", "N", "sp2 nitrogen in amide groups"}, {"N", "14.01", "NA", "sp2 N in 5 memb.ring w/H atom (HIS)"}, {"N", "14.01", "NB", "sp2 N in 5 memb.ring w/LP (HIS,ADE,GUA)"}, {"N", "14.01", "NC", "sp2 N in 6 memb.ring w/LP (ADE,GUA)"}, {"N", "14.01", "N2", "sp2 N in amino groups"}, {"N", "14.01", "N3", "sp3 N for charged amino groups (Lys, etc)"}, {"N", "14.01", "N*", "sp2 N"}, {"O", "16.00", "O", "carbonyl group oxygen"}, {"O", "16.00", "OW", "oxygen in TIP3P water"}, {"O", "16.00", "OH", "oxygen in hydroxyl group"}, {"O", "16.00", "OS", "ether and ester oxygen"}, {"O", "16.00", "O2", "carboxyl and phosphate group oxygen"}, {"P", "30.97", "P", "phosphate"}, {"S", "32.06", "S", "sulphur in disulfide linkage"}, {"S", "32.06", "SH", "sulphur in cystine"}, {"Cu", "63.55", "CU", "copper"}, {"Fe", "55.00", "FE", "iron"}, {"Li", "6.94", "Li", "lithium"}, {"K", "39.10", "K", "potassium"}, {"Rb", "85.47", "Rb", "rubidium"}, {"Cs", "132.91", "Cs", "cesium"}}; /* Non-bonded equivalence 0= Key_a, then equi with Key_a */ char * amber98_equi[2][12]= {{"N", "NA", "N2", "N*", "NC", "NB", " ", " ", " ", " ", " ", " "}, {"C", "C*", "CA", "CB", "CC", "CN", "CM", "CK", "CQ", "CW", "CV", "CR"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= Kb (kcal mol^-1 A^2), 3= R0 (A), 4= amber98 info V(R) = Kb x (R - R0)^2 */ char * amber98_bonds[83][5]= {{"OW", "HW", "553.0", "0.9572", "! TIP3P water"}, {"HW", "HW", "553.0", "1.5136", "TIP3P water"}, {"C", "CA", "469.0", "1.409", "JCC,7,(1986),230; TYR"}, {"C", "CB", "447.0", "1.419", "JCC,7,(1986),230; GUA"}, {"C", "CM", "410.0", "1.444", "JCC,7,(1986),230; THY,URA"}, {"C", "CT", "317.0", "1.522", "JCC,7,(1986),230; AA"}, {"C", "N*", "424.0", "1.383", "JCC,7,(1986),230; CYT,URA"}, {"C", "NA", "418.0", "1.388", "JCC,7,(1986),230; GUA.URA"}, {"C", "NC", "457.0", "1.358", "JCC,7,(1986),230; CYT"}, {"C", "O", "570.0", "1.229", "JCC,7,(1986),230; AA,CYT,GUA,THY,URA"}, {"C", "O2", "656.0", "1.250", "JCC,7,(1986),230; GLU,ASP"}, {"C", "OH", "450.0", "1.364", "JCC,7,(1986),230; TYR"}, {"CA", "CA", "469.0", "1.400", "JCC,7,(1986),230; BENZENE,PHE,TRP,TYR"}, {"CA", "CB", "469.0", "1.404", "JCC,7,(1986),230; ADE,TRP"}, {"CA", "CM", "427.0", "1.433", "JCC,7,(1986),230; CYT"}, {"CA", "CT", "317.0", "1.510", "JCC,7,(1986),230; PHE,TYR"}, {"CA", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; PHE,TRP,TYR"}, {"CA", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; no assigned"}, {"CA", "N2", "481.0", "1.340", "JCC,7,(1986),230; ARG,CYT,GUA"}, {"CA", "NA", "427.0", "1.381", "JCC,7,(1986),230; GUA"}, {"CA", "NC", "483.0", "1.339", "JCC,7,(1986),230; ADE,CYT,GUA"}, {"CB", "CB", "520.0", "1.370", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "N*", "436.0", "1.374", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NB", "414.0", "1.391", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NC", "461.0", "1.354", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE,GUA"}, {"CK", "N*", "440.0", "1.371", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "NB", "529.0", "1.304", "JCC,7,(1986),230; ADE,GUA"}, {"CM", "CM", "549.0", "1.350", "JCC,7,(1986),230; CYT,THY,URA"}, {"CM", "CT", "317.0", "1.510", "JCC,7,(1986),230; THY"}, {"CM", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; not assigned"}, {"CM", "N*", "448.0", "1.365", "JCC,7,(1986),230; CYT,THY,URA"}, {"CQ", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE"}, {"CQ", "NC", "502.0", "1.324", "JCC,7,(1986),230; ADE"}, {"CT", "CT", "310.0", "1.526", "JCC,7,(1986),230; AA, SUGARS"}, {"CT", "HC", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, SUGARS"}, {"CT", "H1", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, RIBOSE"}, {"CT", "H2", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; SUGARS"}, {"CT", "H3", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; not assigned"}, {"CT", "HP", "340.0", "1.090", "changed from 331; AA-lysine, methyl ammonium cation"}, {"CT", "N*", "337.0", "1.475", "JCC,7,(1986),230; ADE,CYT,GUA,THY,URA"}, {"CT", "N2", "337.0", "1.463", "JCC,7,(1986),230; ARG"}, {"CT", "OH", "320.0", "1.410", "JCC,7,(1986),230; SUGARS"}, {"CT", "OS", "320.0", "1.410", "JCC,7,(1986),230; NUCLEIC ACIDS"}, {"H", "N2", "434.0", "1.010", "JCC,7,(1986),230; ADE,CYT,GUA,ARG"}, {"H", "N*", "434.0", "1.010", "for plain unmethylated bases ADE,CYT,GUA,ARG"}, {"H", "NA", "434.0", "1.010", "JCC,7,(1986),230; GUA,URA,HIS"}, {"HO", "OH", "553.0", "0.960", "JCC,7,(1986),230; SUGARS,SER,TYR"}, {"HO", "OS", "553.0", "0.960", "JCC,7,(1986),230; NUCLEOTIDE ENDS"}, {"O2", "P", "525.0", "1.480", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OH", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OS", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"C*", "HC", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes, not needed AA"}, {"C", "N", "490.0", "1.335", "JCC,7,(1986),230; AA"}, {"C*", "CB", "388.0", "1.459", "JCC,7,(1986),230; TRP"}, {"C*", "CT", "317.0", "1.495", "JCC,7,(1986),230; TRP"}, {"C*", "CW", "546.0", "1.352", "JCC,7,(1986),230; TRP"}, {"CA", "CN", "469.0", "1.400", "JCC,7,(1986),230; TRP"}, {"CB", "CN", "447.0", "1.419", "JCC,7,(1986),230; TRP"}, {"CC", "CT", "317.0", "1.504", "JCC,7,(1986),230; HIS"}, {"CC", "CV", "512.0", "1.375", "JCC,7,(1986),230; HIS(delta)"}, {"CC", "CW", "518.0", "1.371", "JCC,7,(1986),230; HIS(epsilon)"}, {"CC", "NA", "422.0", "1.385", "JCC,7,(1986),230; HIS"}, {"CC", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CN", "NA", "428.0", "1.380", "JCC,7,(1986),230; TRP"}, {"CR", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS"}, {"CR", "NA", "477.0", "1.343", "JCC,7,(1986),230; HIS"}, {"CR", "NB", "488.0", "1.335", "JCC,7,(1986),230; HIS"}, {"CT", "N", "337.0", "1.449", "JCC,7,(1986),230; AA"}, {"CT", "N3", "367.0", "1.471", "JCC,7,(1986),230; LYS"}, {"CT", "S", "227.0", "1.810", "changed from 222.0 based on dimethylS nmodes"}, {"CT", "SH", "237.0", "1.810", "changed from 222.0 based on methanethiol nmodes"}, {"CV", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; HIS"}, {"CV", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CW", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS(epsilon,+)"}, {"CW", "NA", "427.0", "1.381", "JCC,7,(1986),230; HIS,TRP"}, {"H", "N", "434.0", "1.010", "JCC,7,(1986),230; AA"}, {"H", "N3", "434.0", "1.010", "JCC,7,(1986),230; LYS"}, {"HS", "SH", "274.0", "1.336", "JCC,7,(1986),230; CYS"}, {"S", "S", "166.0", "2.038", "JCC,7,(1986),230; CYX (SCHERAGA)"}, {"CT", "F", "367.0", "1.380", "JCC,13,(1992),963;CF4; R0=1.332 FOR CHF3"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 */ char * amber98_angles[191][6]= {{"HW", "OW", "HW", "100.", "104.52", "TIP3P water"}, {"HW", "HW", "OW", "0.", "127.74", "(found in crystallographic water with 3 bonds)"}, {"CB", "C", "NA", "70.0", "111.30", "NA"}, {"CB", "C", "O", "80.0", "128.80", " "}, {"CM", "C", "NA", "70.0", "114.10", " "}, {"CM", "C", "O", "80.0", "125.30", " "}, {"CT", "C", "O", "80.0", "120.40", " "}, {"CT", "C", "O2", "70.0", "117.00", " "}, {"CT", "C", "OH", "70.0", "117.00", " "}, {"N*", "C", "NA", "70.0", "115.40", " "}, {"N*", "C", "NC", "70.0", "118.60", " "}, {"N*", "C", "O", "80.0", "120.90", " "}, {"NA", "C", "O", "80.0", "120.60", " "}, {"NC", "C", "O", "80.0", "122.50", " "}, {"CT", "C", "N", "70.0", "116.60", "AA general"}, {"N", "C", "O", "80.0", "122.90", "AA general"}, {"O", "C", "O", "80.0", "126.00", "AA COO- terminal residues"}, {"O2", "C", "O2", "80.0", "126.00", "AA GLU (SCH JPC 79,2379)"}, {"O", "C", "OH", "80.0", "126.00", " "}, {"CA", "C", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA tyr"}, {"CA", "C", "OH", "70.0", "120.00", "AA tyr"}, {"C", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CB", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CT", "70.0", "120.00", " "}, {"CA", "CA", "HA", "35.0", "120.00", " "}, {"CA", "CA", "H4", "35.0", "120.00", " "}, {"CB", "CA", "HA", "35.0", "120.00", " "}, {"CB", "CA", "H4", "35.0", "120.00", " "}, {"CB", "CA", "N2", "70.0", "123.50", " "}, {"CB", "CA", "NC", "70.0", "117.30", " "}, {"CM", "CA", "N2", "70.0", "120.10", " "}, {"CM", "CA", "NC", "70.0", "121.50", " "}, {"N2", "CA", "NA", "70.0", "116.00", " "}, {"N2", "CA", "NC", "70.0", "119.30", " "}, {"NA", "CA", "NC", "70.0", "123.30", " "}, {"C", "CA", "HA", "35.0", "120.00", "AA tyr"}, {"N2", "CA", "N2", "70.0", "120.00", "AA arg"}, {"CN", "CA", "HA", "35.0", "120.00", "AA trp"}, {"CA", "CA", "CN", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C", "CB", "CB", "63.0", "119.20", "changed from 85.0 bsd on C6H6 nmodes; NA gua"}, {"C", "CB", "NB", "70.0", "130.00", " "}, {"CA", "CB", "CB", "63.0", "117.30", "changed from 85.0 bsd on C6H6 nmodes; NA ade"}, {"CA", "CB", "NB", "70.0", "132.40", " "}, {"CB", "CB", "N*", "70.0", "106.20", " "}, {"CB", "CB", "NB", "70.0", "110.40", " "}, {"CB", "CB", "NC", "70.0", "127.70", " "}, {"N*", "CB", "NC", "70.0", "126.20", " "}, {"C*", "CB", "CA", "63.0", "134.90", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C*", "CB", "CN", "63.0", "108.80", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CB", "CN", "63.0", "116.20", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"H5", "CK", "N*", "35.0", "123.05", " "}, {"H5", "CK", "NB", "35.0", "123.05", " "}, {"N*", "CK", "NB", "70.0", "113.90", " "}, {"C", "CM", "CM", "63.0", "120.70", "changed from 85.0 bsd on C6H6 nmodes; NA thy"}, {"C", "CM", "CT", "70.0", "119.70", " "}, {"C", "CM", "HA", "35.0", "119.70", " "}, {"C", "CM", "H4", "35.0", "119.70", " "}, {"CA", "CM", "CM", "63.0", "117.00", "changed from 85.0 bsd on C6H6 nmodes; NA cyt"}, {"CA", "CM", "HA", "35.0", "123.30", " "}, {"CA", "CM", "H4", "35.0", "123.30", " "}, {"CM", "CM", "CT", "70.0", "119.70", " "}, {"CM", "CM", "HA", "35.0", "119.70", " "}, {"CM", "CM", "H4", "35.0", "119.70", " "}, {"CM", "CM", "N*", "70.0", "121.20", " "}, {"H4", "CM", "N*", "35.0", "119.10", " "}, {"H5", "CQ", "NC", "35.0", "115.45", " "}, {"NC", "CQ", "NC", "70.0", "129.10", " "}, {"CM", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "CT", "40.0", "109.50", " "}, {"CT", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H1", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H2", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "HP", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "N*", "50.0", "109.50", " "}, {"CT", "CT", "OH", "50.0", "109.50", " "}, {"CT", "CT", "OS", "50.0", "109.50", " "}, {"HC", "CT", "HC", "35.0", "109.50", " "}, {"H1", "CT", "H1", "35.0", "109.50", " "}, {"HP", "CT", "HP", "35.0", "109.50", "AA lys, ch3nh4+"}, {"H2", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OH", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"H2", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"N*", "CT", "OS", "50.0", "109.50", " "}, {"H1", "CT", "N", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "H1", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "HP", "50.0", "109.50", "AA zwitterion changed based on NMA nmodes"}, {"H1", "CT", "S", "50.0", "109.50", "AA cys changed based on NMA nmodes"}, {"H1", "CT", "SH", "50.0", "109.50", "AA cyx changed based on NMA nmodes"}, {"CT", "CT", "S", "50.0", "114.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "CT", "SH", "50.0", "108.60", "AA cys"}, {"H2", "CT", "H2", "35.0", "109.50", "AA lys"}, {"H1", "CT", "N2", "50.0", "109.50", "AA arg changed based on NMA nmodes"}, {"HP", "CT", "N3", "50.0", "109.50", "AA lys, ch3nh3+, changed based on NMA nmodes"}, {"CA", "CT", "CT", "63.0", "114.00", "AA phe tyr (SCH JPC 79,2379)"}, {"C", "CT", "HC", "50.0", "109.50", "AA gln changed based on NMA nmodes"}, {"C", "CT", "N", "63.0", "110.10", "AA general"}, {"CT", "CT", "N2", "80.0", "111.20", "AA arg (JCP 76, 1439)"}, {"CT", "CT", "N", "80.0", "109.70", "AA ala, general (JACS 94, 2657)"}, {"C", "CT", "CT", "63.0", "111.10", "AA general"}, {"CA", "CT", "HC", "50.0", "109.50", "AA tyr changed based on NMA nmodes"}, {"CT", "CT", "N3", "80.0", "111.20", "AA lys (JCP 76, 1439)"}, {"CC", "CT", "CT", "63.0", "113.10", "AA his"}, {"CC", "CT", "HC", "50.0", "109.50", "AA his changed based on NMA nmodes"}, {"C", "CT", "N3", "80.0", "111.20", "AA amino terminal residues"}, {"C*", "CT", "CT", "63.0", "115.60", "AA trp"}, {"C*", "CT", "HC", "50.0", "109.50", "AA trp changed based on NMA nmodes"}, {"CT", "CC", "NA", "70.0", "120.00", "AA his"}, {"CT", "CC", "CV", "70.0", "120.00", "AA his"}, {"CT", "CC", "NB", "70.0", "120.00", "AA his"}, {"CV", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NB", "70.0", "120.00", "AA his"}, {"CT", "CC", "CW", "70.0", "120.00", "AA his"}, {"H5", "CR", "NA", "35.0", "120.00", "AA his"}, {"H5", "CR", "NB", "35.0", "120.00", "AA his"}, {"NA", "CR", "NA", "70.0", "120.00", "AA his"}, {"NA", "CR", "NB", "70.0", "120.00", "AA his"}, {"CC", "CV", "H4", "35.0", "120.00", "AA his"}, {"CC", "CV", "NB", "70.0", "120.00", "AA his"}, {"H4", "CV", "NB", "35.0", "120.00", "AA his"}, {"CC", "CW", "H4", "35.0", "120.00", "AA his"}, {"CC", "CW", "NA", "70.0", "120.00", "AA his"}, {"H4", "CW", "NA", "35.0", "120.00", "AA his"}, {"C*", "CW", "H4", "35.0", "120.00", "AA trp"}, {"C*", "CW", "NA", "70.0", "108.70", "AA trp"}, {"CT", "C*", "CW", "70.0", "125.00", "AA trp"}, {"CB", "C*", "CT", "70.0", "128.60", "AA trp"}, {"CB", "C*", "CW", "63.0", "106.40", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CN", "NA", "70.0", "132.80", "AA trp"}, {"CB", "CN", "NA", "70.0", "104.40", "AA trp"}, {"CA", "CN", "CB", "63.0", "122.70", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C", "N", "CT", "50.0", "121.90", "AA general"}, {"C", "N", "H", "30.0", "120.00", "AA general, gln, asn,changed based on NMA nmodes"}, {"CT", "N", "H", "30.0", "118.04", "AA general, changed based on NMA nmodes"}, {"CT", "N", "CT", "50.0", "118.00", "AA pro (DETAR JACS 99,1232)"}, {"H", "N", "H", "35.0", "120.00", "ade,cyt,gua,gln,asn **"}, {"C", "N*", "CM", "70.0", "121.60", " "}, {"C", "N*", "CT", "70.0", "117.60", " "}, {"C", "N*", "H", "30.0", "119.20", "changed based on NMA nmodes"}, {"CB", "N*", "CK", "70.0", "105.40", " "}, {"CB", "N*", "CT", "70.0", "125.80", " "}, {"CB", "N*", "H", "30.0", "125.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CK", "N*", "CT", "70.0", "128.80", " "}, {"CK", "N*", "H", "30.0", "128.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CM", "N*", "CT", "70.0", "121.20", " "}, {"CM", "N*", "H", "30.0", "121.20", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CA", "N2", "H", "35.0", "120.00", " "}, {"H", "N2", "H", "35.0", "120.00", " "}, {"CT", "N2", "H", "35.0", "118.40", "AA arg"}, {"CA", "N2", "CT", "50.0", "123.20", "AA arg"}, {"CT", "N3", "H", "50.0", "109.50", "AA lys, changed based on NMA nmodes"}, {"CT", "N3", "CT", "50.0", "109.50", "AA pro/nt"}, {"H", "N3", "H", "35.0", "109.50", "AA lys, AA(end)"}, {"C", "NA", "C", "70.0", "126.40", " "}, {"C", "NA", "CA", "70.0", "125.20", " "}, {"C", "NA", "H", "30.0", "116.80", "changed based on NMA nmodes"}, {"CA", "NA", "H", "30.0", "118.00", "changed based on NMA nmodes"}, {"CC", "NA", "CR", "70.0", "120.00", "AA his"}, {"CC", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CR", "NA", "CW", "70.0", "120.00", "AA his"}, {"CR", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CW", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CN", "NA", "CW", "70.0", "111.60", "AA trp"}, {"CN", "NA", "H", "30.0", "123.10", "AA trp, changed based on NMA nmodes"}, {"CB", "NB", "CK", "70.0", "103.80", " "}, {"CC", "NB", "CR", "70.0", "117.00", "AA his"}, {"CR", "NB", "CV", "70.0", "117.00", "AA his"}, {"C", "NC", "CA", "70.0", "120.50", " "}, {"CA", "NC", "CB", "70.0", "112.20", " "}, {"CA", "NC", "CQ", "70.0", "118.60", " "}, {"CB", "NC", "CQ", "70.0", "111.00", " "}, {"C", "OH", "HO", "35.0", "113.00", " "}, {"CT", "OH", "HO", "55.0", "108.50", " "}, {"HO", "OH", "P", "45.0", "108.50", " "}, {"CT", "OS", "CT", "60.0", "109.50", " "}, {"CT", "OS", "P", "100.0", "120.50", " "}, {"P", "OS", "P", "100.0", "120.50", " "}, {"O2", "P", "OH", "45.0", "108.23", " "}, {"O2", "P", "O2", "140.0", "119.90", " "}, {"O2", "P", "OS", "100.0", "108.23", " "}, {"OH", "P", "OS", "45.0", "102.60", " "}, {"OS", "P", "OS", "45.0", "102.60", " "}, {"CT", "S", "CT", "62.0", "98.90", "AA met"}, {"CT", "S", "S", "68.0", "103.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "SH", "HS", "43.0", "96.00", "changed from 44.0 based on methanethiol nmodes"}, {"HS", "SH", "HS", "35.0", "92.07", "AA cys"}, {"F", "CT", "F", "77.0", "109.10", "JCC,13,(1992),963;"}, {"F", "CT", "H1", "35.0", "109.50", "JCC,13,(1992),963;"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= delta (deg), 6= n (multi), 7= amber98 info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * amber98_dihedrals[83][9]= {{"X", "C", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CB", "X", "4", "12.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CM", "X", "4", "8.70", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "N*", "X", "4", "5.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NA", "X", "4", "5.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NC", "X", "2", "8.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "OH", "X", "2", "1.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "CT", "X", "4", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CB", "X", "4", "14.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CM", "X", "4", "10.20", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "N2", "X", "4", "9.60", "180.0", "2.", "reinterpolated 93'"}, {"X", "CA", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "NC", "X", "2", "9.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "CB", "X", "4", "21.80", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CB", "N*", "X", "4", "6.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NB", "X", "2", "5.10", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NC", "X", "2", "8.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "N*", "X", "4", "6.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "NB", "X", "2", "20.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CM", "CM", "X", "4", "26.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CM", "CT", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CM", "N*", "X", "4", "7.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CQ", "NC", "X", "2", "13.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "CT", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "N", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N*", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N2", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OH", "X", "3", "0.50", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OS", "X", "3", "1.15", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OH", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OS", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C", "N", "X", "4", "10.00", "180.0", "2.", "AA|check Wendy? and NMA"}, {"X", "CT", "N3", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "S", "X", "3", "1.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "SH", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C*", "CB", "X", "4", "6.70", "180.0", "2.", "intrpol.bsd.onC6H6aa"}, {"X", "C*", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "C*", "CW", "X", "4", "26.10", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CN", "X", "4", "14.50", "180.0", "2.", "reinterpolated 93'"}, {"X", "CB", "CN", "X", "4", "12.00", "180.0", "2.", "reinterpolated 93'"}, {"X", "CC", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "CV", "X", "4", "20.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "CW", "X", "4", "21.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "NA", "X", "4", "5.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CN", "NA", "X", "4", "6.10", "180.0", "2.", "reinterpolated 93'"}, {"X", "CR", "NA", "X", "4", "9.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CR", "NB", "X", "2", "10.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CV", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CW", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"CT", "CT", "OS", "CT", "1", "0.383", "0.0", "-3.", " "}, {"CT", "CT", "OS", "CT", "1", "0.1", "180.0", "2.", " "}, {"CT", "OS", "CT", "N*", "1", "0.383", "0.0", "-3.", " "}, {"CT", "OS", "CT", "N*", "1", "1.0", "000.0", "2.", " "}, {"C", "N", "CT", "C", "1", "0.20", "180.0", "2.", " "}, {"N", "CT", "C", "N", "1", "0.40", "180.0", "-4.", " "}, {"N", "CT", "C", "N", "1", "1.35", "180.0", "-2.", " "}, {"N", "CT", "C", "N", "1", "0.75", "180.0", "1.", " "}, {"CT", "CT", "N", "C", "1", "0.50", "180.0", "-4.", " "}, {"CT", "CT", "N", "C", "1", "0.15", "180.0", "-3.", " "}, {"CT", "CT", "N", "C", "1", "0.53", "0.0", "1.", " "}, {"CT", "CT", "C", "N", "1", "0.100", "0.0", "-4.", " "}, {"CT", "CT", "C", "N", "1", "0.07", "0.0", "2.", " "}, {"H", "N", "C", "O", "1", "2.50", "180.0", "-2.", "JCC,7,(1986),230"}, {"H", "N", "C", "O", "1", "2.00", "0.0", "1.", "J.C.cistrans-NMA DE"}, {"CT", "S", "S", "CT", "1", "3.50", "0.0", "-2.", "JCC,7,(1986),230"}, {"CT", "S", "S", "CT", "1", "0.60", "0.0", "3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OS", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OS", "1", "1.50", "0.0", "2.", "pucker anal (93')"}, {"OS", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OH", "1", "1.50", "0.0", "2.", "pucker anal (93')"}, {"OH", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "CT", "CT", "OH", "1", "1.50", "0.0", "2.", "check glicolWC? puc"}, {"OH", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "CT", "N*", "CK", "1", "0.00", "000.0", "-2.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CK", "1", "2.50", "0.0", "1.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CM", "1", "0.00", "000.0", "-2.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CM", "1", "2.50", "0.0", "1.", "sugar frag calc (PC)"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= n (multi), 7= amber98 info V(psi) = Kpsi x (psi - psi0)^2 */ char * amber98_impropers[31][8]= {{"X", "X", "C", "O", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "O2", "C", "O2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N2", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "NA", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "N2", "CA", "N2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N", "CT", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "CA", "HA", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CW", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CR", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CV", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CQ", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CK", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "HA", "1.1", "180.", "2.", " "}, {"X", "X", "CA", "H4", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CA", "H5", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"CB", "CK", "N*", "CT", "1.0", "180.", "2.", " "}, {"C", "CM", "N*", "CT", "1.0", "180.", "2.", "dac guess, 9/94"}, {"C", "CM", "CM", "CT", "1.1", "180.", "2.", " "}, {"CT", "O", "C", "OH", "10.5", "180.", "2.", " "}, {"CT", "CV", "CC", "NA", "1.1", "180.", "2.", " "}, {"CT", "CW", "CC", "NB", "1.1", "180.", "2.", " "}, {"CT", "CW", "CC", "NA", "1.1", "180.", "2.", " "}, {"CB", "CT", "C*", "CW", "1.1", "180.", "2.", " "}, {"CA", "CA", "CA", "CT", "1.1", "180.", "2.", " "}, {"C", "CM", "CM", "CT", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CM", "N2", "CA", "NC", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CB", "N2", "CA", "NC", "1.1", "180.", "2.", "dac, 10/94"}, {"N2", "NA", "CA", "NC", "1.1", "180.", "2.", "dac, 10/94"}, {"CA", "CA", "C", "OH", "1.1", "180.", "2.", " "}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= amber98 info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * amber98_vdw[35][4]= {{"H", "0.6000", "0.0157", "!Ferguson base pair geom."}, {"HO", "0.0000", "0.0000", "OPLS Jorgensen, JACS,110,(1988),1657"}, {"HS", "0.6000", "0.0157", "W. Cornell CH3SH --> CH3OH FEP"}, {"HC", "1.4870", "0.0157", "OPLS"}, {"H1", "1.3870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H2", "1.2870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H3", "1.1870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HP", "1.1000", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HA", "1.4590", "0.0150", "Spellmeyer"}, {"H4", "1.4090", "0.0150", "Spellmeyer, one electrowithdr. neighbor"}, {"H5", "1.3590", "0.0150", "Spellmeyer, two electrowithdr. neighbor"}, {"HW", "0.0000", "0.0000", "TIP3P water model"}, {"O", "1.6612", "0.2100", "OPLS"}, {"O2", "1.6612", "0.2100", "OPLS"}, {"OW", "1.7683", "0.1520", "TIP3P water model"}, {"OH", "1.7210", "0.2104", "OPLS"}, {"OS", "1.6837", "0.1700", "OPLS ether"}, {"CT", "1.9080", "0.1094", "Spellmeyer"}, {"CA", "1.9080", "0.0860", "Spellmeyer"}, {"CM", "1.9080", "0.0860", "Spellmeyer"}, {"C", "1.9080", "0.0860", "OPLS"}, {"N", "1.8240", "0.1700", "OPLS"}, {"N3", "1.8240", "0.1700", "OPLS"}, {"S", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"SH", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"P", "2.1000", "0.2000", "JCC,7,(1986),230;"}, {"IM", "2.47", "0.1", "Cl- Smith and Dang, JCP 1994,100:5,3757"}, {"Li", "1.1370", "0.0183", "Li+ Aqvist JPC 1990,94,8021. (adapted)"}, {"IP", "1.8680", "0.00277", "Na+ Aqvist JPC 1990,94,8021. (adapted)"}, {"K", "2.6580", "0.000328", "K+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Rb", "2.9560", "0.00017", "Rb+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Cs", "3.3950", "0.0000806", "Cs+ Aqvist JPC 1990,94,8021. (adapted)"}, {"I", "2.35", "0.40", "JCC,7,(1986),230;"}, {"F", "1.75", "0.061", "Gough et al. JCC 13,(1992),963."}, {"IB", "5.0", "0.1", "solvated ion for vacuum approximation"}}; atomes_1.3.1/src/calc/force_fields/pcff.c0000664000175000017500000122022515212624223017710 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file pcff.c * @short PCFF force field, from 'PCFF.frc' * @author Sébastien Le Roux */ /* * This file: 'pcff.c' * * Contains: * PCFF force field, data from taken from: - the file: 'PCFF.frc' This file contains several tables: Atoms : PCFF_atoms[133][5] Equivalence : PCFF_equivalence_auto[108][11] Equivalence : PCFF_equivalence[134][7] Quadractic bonds : PCFF_bonds_auto[627][5] Quartic bonds : PCFF_bonds[126][7] Quadratic angles : PCFF_angles_auto[329][6] Quartic angles : PCFF_angles[302][8] Torsions : PCFF_torsions_auto[216][8] Torsions : PCFF_torsions[492][11] Inversions : PCFF_inversions[83][7] Non bonded : PCFF_vdw[94][4] Bond increments : PCFF_bond_increments[564][5] */ #include "global.h" int PCFF_objects[14] = {133, 108, 134, 627, 126, 0, 329, 302, 216, 492, 83, 0, 94, 564}; int PCFF_dim[14] = {5, 11, 7, 5, 7, 0, 6, 8, 8, 11, 7, 0, 4, 5}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= PCFF info */ char * PCFF_atoms[133][5]= {{"Ag", "107.86800", "Ag", "Silver metal", "Ver. 2.1, Ref. 11"}, {"Al", "26.98200", "Al", "Aluminium metal", "Ver. 2.1, Ref. 11"}, {"Au", "196.96700", "Au", "Gold metal", "Ver. 2.1, Ref. 11"}, {"Br", "79.90900", "Br", "bromine ion", "Ver. 1.0, Ref. 1"}, {"Cl", "35.45300", "Cl", "chlorine ion", "Ver. 1.0, Ref. 1"}, {"Cr", "51.99600", "Cr", "Chromium metal", "Ver. 2.1, Ref. 11"}, {"Cu", "63.54600", "Cu", "Copper metal", "Ver. 2.1, Ref. 11"}, {"Fe", "55.84700", "Fe", "Iron metal", "Ver. 2.1, Ref. 11"}, {"K", "39.10200", "K", "Potassium metal", "Ver. 2.1, Ref. 11"}, {"Li", "6.94000", "Li", "Lithium metal", "Ver. 2.1, Ref. 11"}, {"Mo", "95.94000", "Mo", "Molybdenum metal", "Ver. 2.1, Ref. 11"}, {"Na", "22.99000", "Na", "Sodium metal", "Ver. 2.1, Ref. 11"}, {"Ni", "58.71000", "Ni", "Nickel metal", "Ver. 2.1, Ref. 11"}, {"Pb", "207.20000", "Pb", "Lead metal", "Ver. 2.1, Ref. 11"}, {"Pd", "106.40000", "Pd", "Palladium metal", "Ver. 2.1, Ref. 11"}, {"Pt", "195.09000", "Pt", "Platinum metal", "Ver. 2.1, Ref. 11"}, {"Sn", "118.69000", "Sn", "Tin metal", "Ver. 2.1, Ref. 11"}, {"W", "183.85000", "W", "Tungsten metal", "Ver. 2.1, Ref. 11"}, {"Ar", "39.94400", "ar", "Argon ", "Ver. 2.1, Ref. 8"}, {"Al", "26.98200", "az", "aluminium atom in zeolites", "Ver. 3.0, Ref. 10"}, {"Br", "79.90900", "br", "bromine atom", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c", "generic SP3 carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c+", "C in guanidinium group", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c-", "C in charged carboxylate", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c1", "sp3 carbon with 1 H 3 heavies", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c2", "sp3 carbon with 2 H's, 2 Heavy's", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c3", "sp3 carbon with 3 hHs 1 heavy", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c3h", "sp3 carbon in 3-membered ring with hydrogens", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c3m", "sp3 carbon in 3-membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c4h", "sp3 carbon in 4-membered ring with hydrogens", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c4m", "sp3 carbon in 4-membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c5", "sp2 aromatic carbon in 5-membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c=", "non aromatic end doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c=1", "non aromatic, next to end doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c=2", "non aromatic doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c_0", "carbonyl carbon of aldehydes, ketones", "Ver. 2.1, Ref. 8"}, {"C", "12.01115", "c_1", "carbonyl carbon of acid, ester, amide", "Ver. 2.1, Ref. 8"}, {"C", "12.01100", "c_2", "carbonyl carbon of carbamate, urea", "Ver. 2.1, Ref. 8"}, {"C", "12.01115", "c_a", "general amino acid alpha carbon (sp3)", "Ver. 1.0, Ref. 1"}, {"Ca", "40.08000", "ca+", "calcium ion", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cg", "sp3 alpha carbon in glycine", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "ci", "sp2 aromatic carbon in charged imidazole ring (His+)", "Ver. 1.0, Ref. 1"}, {"Cl", "35.45300", "cl", "chlorine atom", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "co", "sp3 carbon in acetals", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "coh", "sp3 carbon in acetals with hydrogen", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cp", "sp2 aromatic carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cr", "C in neutral arginine", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cs", "sp2 aromatic carbon in 5 membered ring next to S", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "ct", "sp carbon involved in a triple bond", "Ver. 1.0, Ref. 1"}, {"C", "12.01100", "cz", "carbonyl carbon of carbonate", "Ver. 2.0, Ref. 5"}, {"D", "2.01400", "dw", "deuterium in heivy water", "Ver. 1.0, Ref. 1"}, {"F", "18.99840", "f", "fluorine atom", "Ver. 2.1, Ref. 8"}, {"H", "1.00797", "h", "generic hydrogen bound to C, Si,or H", "Ver. 1.0, Ref. 1"}, {"H", "1.00797", "h*", "hydrogen bonded to nitrogen, Oxygen", "Ver. 1.0, Ref. 1"}, {"H", "1.00797", "h+", "charged hydrogen in cations", "Ver. 1.0, Ref. 1"}, {"H", "1.00782", "hb", "hydrogen atom in bridging hydroxyl group", "Ver. 3.0, Ref. 10"}, {"H", "1.00797", "hc", "hydrogen bonded to carbon", "Ver. 1.0, Ref. 1"}, {"He", "4.00300", "he", "Helium ", "Ver. 2.1, Ref. 8"}, {"H", "1.00797", "hi", "Hydrogen in charged imidazole ring", "Ver. 1.0, Ref. 1"}, {"H", "1.00797", "hn", "hydrogen bonded to nitrogen", "Ver. 1.0, Ref. 1"}, {"H", "1.00800", "hn2", "amino hydrogen", "Ver. 2.1, Ref. 8"}, {"H", "1.00797", "ho", "hydrogen bonded to oxygen", "Ver. 1.0, Ref. 1"}, {"H", "1.00800", "ho2", "hydroxyl hydrogen", "Ver. 2.1, Ref. 8"}, {"H", "1.00782", "hoa", "hydrogen atom in terminal hydroxyl group on aluminium", "Ver. 3.0, Ref. 10"}, {"H", "1.00782", "hos", "hydrogen atom in terminal hydroxyl group on silicon", "Ver. 3.0, Ref. 10"}, {"H", "1.00797", "hp", "hydrogen bonded to phosphorus", "Ver. 1.0, Ref. 1"}, {"H", "1.00797", "hs", "hydrogen bonded to sulfur", "Ver. 1.0, Ref. 1"}, {"H", "1.00800", "hsi", "silane hydrogen", "Ver. 2.2, Ref. 9"}, {"H", "1.00797", "hw", "hydrogen in water", "Ver. 1.0, Ref. 1"}, {"I", "126.90440", "i", "iodine atom", "Ver. 1.0, Ref. 1"}, {"Kr", "83.80000", "kr", "Krypton ", "Ver. 2.1, Ref. 8"}, {"N", "14.00670", "n", "generic sp2 nitrogen (in amids))", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n+", "sp3 nitrogen in protonated amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n1", "sp2 nitrogen in charged arginine", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n2", "sp2 nitrogen (NH2) in guanidinium group (HN=C(NH2)2)", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n3m", "sp3 nitrogen in 3- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n3n", "sp2 nitrogen in 3- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n4", "sp3 nitrogen in protonated amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n4m", "sp3 nitrogen in 4- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n4n", "sp2 nitrogen in 4- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n=", "non aromatic end doubly bonded nitrogen", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n=1", "non aromatic, next to end doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n=2", "non aromatic doubly bonded nitrogen", "Ver. 1.0, Ref. 1"}, {"N", "14.01000", "n_2", "nitrogen of urethane", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "na", "sp3 nitrogen in amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nb", "sp2 nitrogen in aromatic amines", "Ver. 1.0, Ref. 1"}, {"Ne", "20.18300", "ne", "Neon ", "Ver. 2.1, Ref. 8"}, {"N", "14.00670", "nh", "sp2 nitrogen in 5 or 6 membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nh+", "protonated nitrogen in 6 membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nho", "sp2 nitrogen in 6 membered ring next to a carbonyl", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "ni", "nitrogen in charged imidazole ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nn", "sp2 nitrogen in aromatic amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "np", "sp2 nitrogen in 5- or 6- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "npc", "sp2 nitrogen in 5- or 6- membered ring and with a heavy atom", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nr", "sp2 nitrogen (NH2) in guanidinium group (HN=C(NH2)2)", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nt", "sp nitrogen involved in a triple bond", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nz", "sp3 nitrogen bonded to two atoms", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o", "generic SP3 oxygen", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o*", "oxygen in water", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o-", "partial double oxygen", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o3e", "sp3 oxygen in three membered ring", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o4e", "sp3 oxygen in four membered ring", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o=", "oxygen double bonded to O, C, S, N, P", "Ver. 2.1, Ref. 8"}, {"O", "15.99940", "o_1", "oxygen in carbonyl group", "Ver. 2.1, Ref. 8"}, {"O", "15.99940", "o_2", "ester oxygen", "Ver. 2.1, Ref. 8"}, {"O", "15.99491", "oah", "oxygen atom in terminal hydroxyl group on aluminium", "Ver. 3.0, Ref. 10"}, {"O", "15.99491", "oas", "oxygen atom between aluminium and silicon", "Ver. 3.0, Ref. 10"}, {"O", "15.99491", "ob", "oxygen atom in bridging hydroxyl group", "Ver. 3.0, Ref. 10"}, {"O", "15.99940", "oc", "sp3 oxygen in ether or acetals", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "oe", "sp3 oxygen in ester", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "oh", "oxygen bonded to hydrogen", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "oo", "oxygen in carbonyl group, carbonate only", "Ver. 2.0, Ref. 5"}, {"O", "15.99940", "op", "sp2 aromatic in 5 membered ring", "Ver. 1.0, Ref. 1"}, {"O", "15.99491", "osh", "oxygen atom in terminal hydroxyl group on silicon", "Ver. 3.0, Ref. 10"}, {"O", "16.00000", "osi", "siloxane oxygen", "Ver. 1.0, Ref. 1"}, {"O", "15.99491", "oss", "oxygen atom betweem two silicons", "Ver. 3.0, Ref. 10"}, {"O", "15.99940", "oz", "ester oxygen in carbonate", "Ver. 2.0, Ref. 5"}, {"P", "30.97380", "p", "general phosphorous atom", "Ver. 1.0, Ref. 1"}, {"P", "30.97380", "p=", "phosphazene phosphorous atom", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s", "sp3 sulfur", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s'", "S in thioketone group", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s-", "partial double sulfur", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s1", "sp3 sulfur involved in (S-S) group of disulfides", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s3e", "sulfur in three membered ring", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s4e", "sulfur in four membered ring", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sc", "sp3 sulfur in methionines (C-S-C) group", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sf", "S in sulfonate group", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sh", "sp3 sulfur in sulfhydryl (-SH) group (e.g. cysteine)", "Ver. 1.0, Ref. 1"}, {"Si", "28.08600", "si", "silicon atom", "Ver. 1.0, Ref. 1"}, {"Si", "28.08600", "sio", "siloxane silicon", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sp", "sulfur in an aromatic ring (e.g. thiophene)", "Ver. 1.0, Ref. 1"}, {"Si", "28.08600", "sz", "silicon atom in zeolites", "Ver. 3.0, Ref. 10"}, {"Xe", "131.30000", "xe", "Xenon ", "Ver. 2.1, Ref. 8"}}; /* Equivalence table for key symbols PCFF auto with: 0 = Key in atom list 1 = Non-bonded 2 = Bond increments 3 = Bonds 4 = Angles end atom 5 = Angles appex atom 6 = Torsion end atom 7 = Torsion center atom 8 = Inversion end atom 9 = Inversion center atom 10 = PCFF info */ char * PCFF_equivalence_auto[108][11]= {{"Br", "Br", "Br", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Ver. 2.0, Ref. 1"}, {"Cl", "Cl", "Cl", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Ver. 2.0, Ref. 1"}, {"Na", "Na", "Na", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Ver. 2.0, Ref. 1"}, {"ar", "ar", "ar", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "Ver. 2.1, Ref. 8"}, {"br", "br", "br", "br_", "br_", "br_", "br_", "br_", "br_", "br_", "Ver. 2.0, Ref. 1"}, {"c", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c+", "c+", "c+", "cr_", "c_", "c'_", "c_", "c+_", "c_", "c'_", "Ver. 2.0, Ref. 1"}, {"c-", "c-", "c-", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 1"}, {"c1", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c2", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c3", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c3h", "c", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c3m", "c", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c4h", "c", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c4m", "c", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c5", "cp", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 1"}, {"c=", "c=", "c=", "c=_3", "c_", "c=_", "c_", "c=_3", "c_", "c=_", "Ver. 2.0, Ref. 1"}, {"c=1", "c=", "c=", "c=_1", "c_", "c=_", "c_", "c=_1", "c_", "c=_", "Ver. 2.0, Ref. 1"}, {"c=2", "c=", "c=", "c=_2", "c_", "c=_", "c_", "c=_2", "c_", "c=_", "Ver. 2.0, Ref. 1"}, {"c_0", "c_0", "c_0", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 1"}, {"c_1", "c_1", "c_1", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 1"}, {"c_2", "c_2", "c_2", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 1"}, {"c_a", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"ca+", "ca+", "ca+", "ca_", "ca_", "ca_", "ca_", "ca_", "ca_", "ca_", "Ver. 2.0, Ref. 1"}, {"cg", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"ci", "cp", "ci", "ci_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 1"}, {"cl", "cl", "cl", "cl_", "cl_", "cl_", "c_", "cl_", "cl_", "cl_", "Ver. 2.0, Ref. 1"}, {"co", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"coh", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"cp", "cp", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 1"}, {"cr", "cr", "cr", "cr_", "c_", "c'_", "c_", "c=_3", "c_", "c'_", "Ver. 2.0, Ref. 1"}, {"cs", "cp", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 1"}, {"ct", "ct", "ct", "ct_", "c_", "ct_", "c_", "ct_", "c_", "ct_", "Ver. 2.0, Ref. 1"}, {"cz", "cz", "cz", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 5"}, {"dw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"f", "f", "f", "f_", "f_", "f_", "f_", "f_", "f_", "f_", "Ver. 2.0, Ref. 1"}, {"h", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"h*", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"h+", "h+", "h+", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"hc", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"he", "he", "he", "he_", "he_", "he_", "he_", "he_", "he_", "he_", "Ver. 2.1, Ref. 8"}, {"hi", "h*", "hi", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"hn", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"hn2", "hn2", "hn2", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"ho", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"ho2", "ho2", "ho2", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"hp", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"hs", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"hsi", "hsi", "hsi", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.2, Ref. 9"}, {"hw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"i", "i", "i", "i_", "i_", "i_", "i_", "i_", "i_", "i_", "Ver. 2.0, Ref. 1"}, {"kr", "kr", "kr", "kr_", "kr_", "kr_", "kr_", "kr_", "kr_", "kr_", "Ver. 2.1, Ref. 8"}, {"n", "n", "n", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 1"}, {"n+", "n+", "n+", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 1"}, {"n1", "nr", "nr", "n_", "n_", "n_", "n_", "n_", "n_", "nr_", "Ver. 2.0, Ref. 1"}, {"n2", "nr", "nr", "n_", "n_", "n_", "n_", "n_", "n_", "nr_", "Ver. 2.0, Ref. 1"}, {"n3m", "na", "na", "n3m_", "n3m_", "n3m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 1"}, {"n3n", "n", "n", "n3m_", "n3m_", "n3m_", "n_", "n3n_", "n_", "n_", "Ver. 2.0, Ref. 1"}, {"n4", "n+", "n+", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 1"}, {"n4m", "na", "na", "n4m_", "n4m_", "n4m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 1"}, {"n4n", "n", "n", "n4m_", "n4m_", "n4m_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 1"}, {"n=", "n=", "n=", "n=_3", "n_", "n_", "n_", "n=_3", "n_", "n=_", "Ver. 2.0, Ref. 1"}, {"n=1", "n=", "n=", "n=_1", "n_", "n_", "n_", "n=_1", "n_", "n=_", "Ver. 2.0, Ref. 1"}, {"n=2", "n=", "n=", "n=_2", "n_", "n_", "n_", "n=_2", "n_", "n=_", "Ver. 2.0, Ref. 1"}, {"n_2", "n_2", "n_2", "n_", "n_", "n_", "n_", "n=_2", "n_", "n=_", "Ver. 2.0, Ref. 1"}, {"na", "na", "na", "na_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 1"}, {"nb", "nn", "nn", "np_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 1"}, {"ne", "ne", "ne", "ne_", "ne_", "ne_", "ne_", "ne_", "ne_", "ne_", "Ver. 2.1, Ref. 8"}, {"nh", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 1"}, {"nh+", "nh", "nh+", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 1"}, {"nho", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 1"}, {"ni", "nh", "nh", "ni_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 1"}, {"nn", "nn", "nn", "na_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 1"}, {"np", "np", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 1"}, {"npc", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 1"}, {"nr", "nr", "nr", "n_", "n_", "n_", "n_", "n_", "n_", "nr_", "Ver. 2.0, Ref. 1"}, {"nt", "nt", "nt", "nt_", "n_", "nt_", "n_", "nt_", "n_", "nt_", "Ver. 2.0, Ref. 1"}, {"nz", "nz", "nz", "nz_", "n_", "nz_", "n_", "nz_", "n_", "nz_", "Ver. 2.0, Ref. 1"}, {"o", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"o*", "o*", "o*", "o_", "o_", "o*_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"o-", "o-", "o-", "o-_", "o'_", "o'_", "o_", "o'_", "o_", "o'_", "Ver. 2.0, Ref. 1"}, {"o3e", "o", "o", "o3e_", "o3e_", "o3e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"o4e", "o", "o", "o4e_", "o4e_", "o4e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"o=", "o-", "o-", "o-_", "o'_", "o'_", "o_", "o'_", "o_", "o'_", "Ver. 2.0, Ref. 1"}, {"o_1", "o_1", "o_1", "o'_", "o'_", "o'_", "o_", "o'_", "o_", "o'_", "Ver. 2.0, Ref. 1"}, {"o_2", "o_2", "o_2", "o'_", "o'_", "o'_", "o_", "o'_", "o_", "o'_", "Ver. 2.0, Ref. 1"}, {"oc", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"oe", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"oh", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"oo", "oo", "oo", "o'_", "o'_", "o'_", "o_", "o'_", "o_", "o'_", "Ver. 2.0, Ref. 5"}, {"op", "op", "op", "op_", "o_", "op_", "o_", "o_", "o_", "op_", "Ver. 2.0, Ref. 1"}, {"osi", "osi", "osi", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"oz", "oz", "oz", "o'_", "o'_", "o'_", "o_", "o'_", "o_", "o'_", "Ver. 2.0, Ref. 5"}, {"p", "p", "p", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 1"}, {"p=", "p=", "p=", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 1"}, {"s", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"s'", "s", "s'", "s'_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"s-", "s", "s-", "s-_", "s'_", "s'_", "s_", "s'_", "s_", "s'_", "Ver. 2.0, Ref. 1"}, {"s1", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"s3e", "s", "s", "s3e_", "s3e_", "s3e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"s4e", "s", "s", "s4e_", "s4e_", "s4e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"sc", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"sf", "s", "s'", "s'_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"sh", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"si", "si", "si", "si_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.0, Ref. 1"}, {"sio", "sio", "sio", "si_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.0, Ref. 1"}, {"sp", "sp", "sp", "sp_", "s_", "sp_", "s_", "sp_", "s_", "sp_", "Ver. 2.0, Ref. 1"}, {"xe", "xe", "xe", "xe_", "xe_", "xe_", "xe_", "xe_", "xe_", "xe_", "Ver. 2.1, Ref. 8"}}; /* Equivalence table for key symbols PCFF with: 0 = Key in atom list 1 = Non-bonded 2 = Bonds 3 = Angles 4 = Torsion 5 = Inversion 6 = PCFF info */ char * PCFF_equivalence[134][7]= {{"Ag", "Ag", "Ag", "Ag", "Ag", "Ag", "Ver. 2.1, Ref. 11"}, {"Al", "Al", "Al", "Al", "Al", "Al", "Ver. 2.1, Ref. 11"}, {"Au", "Au", "Au", "Au", "Au", "Au", "Ver. 2.1, Ref. 11"}, {"Br", "Br", "Br", "Br", "Br", "Br", "Ver. 1.0, Ref. 1"}, {"Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Ver. 1.0, Ref. 1"}, {"Cr", "Cr", "Cr", "Cr", "Cr", "Cr", "Ver. 2.1, Ref. 11"}, {"Cu", "Cu", "Cu", "Cu", "Cu", "Cu", "Ver. 2.1, Ref. 11"}, {"Fe", "Fe", "Fe", "Fe", "Fe", "Fe", "Ver. 2.1, Ref. 11"}, {"K", "K", "K", "K", "K", "K", "Ver. 2.1, Ref. 11"}, {"Li", "Li", "Li", "Li", "Li", "Li", "Ver. 2.1, Ref. 11"}, {"Mo", "Mo", "Mo", "Mo", "Mo", "Mo", "Ver. 2.1, Ref. 11"}, {"Na", "Na", "Na", "Na", "Na", "Na", "Ver. 2.1, Ref. 11"}, {"Na", "Na", "Na", "Na", "Na", "Na", "Ver. 1.0, Ref. 1"}, {"Ni", "Ni", "Ni", "Ni", "Ni", "Ni", "Ver. 2.1, Ref. 11"}, {"Pb", "Pb", "Pb", "Pb", "Pb", "Pb", "Ver. 2.1, Ref. 11"}, {"Pd", "Pd", "Pd", "Pd", "Pd", "Pd", "Ver. 2.1, Ref. 11"}, {"Pt", "Pt", "Pt", "Pt", "Pt", "Pt", "Ver. 2.1, Ref. 11"}, {"Sn", "Sn", "Sn", "Sn", "Sn", "Sn", "Ver. 2.1, Ref. 11"}, {"W", "W", "W", "W", "W", "W", "Ver. 2.1, Ref. 11"}, {"ar", "ar", "ar", "ar", "ar", "ar", "Ver. 2.1, Ref. 8"}, {"az", "az", "az", "az", "az", "az", "Ver. 3.0, Ref. 10"}, {"br", "br", "br", "br", "br", "br", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c+", "c+", "c+", "c+", "c+", "c+", "Ver. 1.0, Ref. 1"}, {"c-", "c-", "c-", "c-", "c-", "c-", "Ver. 1.0, Ref. 1"}, {"c1", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c2", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3h", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3m", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c4h", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c4m", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c5", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "c=", "c=", "c=", "c=", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "c=1", "c=", "c=1", "c=", "Ver. 1.0, Ref. 1"}, {"c=2", "c=", "c=2", "c=", "c=2", "c=", "Ver. 1.0, Ref. 1"}, {"c_0", "c_0", "c_0", "c_0", "c_0", "c_0", "Ver. 1.0, Ref. 1"}, {"c_1", "c_1", "c_1", "c_1", "c_1", "c_1", "Ver. 1.0, Ref. 1"}, {"c_2", "c_2", "c_2", "c_2", "c_2", "c_2", "Ver. 1.0, Ref. 1"}, {"c_a", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"ca+", "ca+", "ca+", "ca+", "ca+", "ca+", "Ver. 1.0, Ref. 1"}, {"cg", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"ci", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"cl", "cl", "cl", "cl", "cl", "cl", "Ver. 1.0, Ref. 1"}, {"co", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"coh", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"cr", "cr", "cr", "cr", "cr", "cr", "Ver. 1.0, Ref. 1"}, {"cs", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"ct", "ct", "ct", "ct", "ct", "ct", "Ver. 1.0, Ref. 1"}, {"cz", "cz", "cz", "cz", "cz", "cz", "Ver. 2.0, Ref. 5"}, {"dw", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"f", "f", "f", "f", "f", "f", "Ver. 1.0, Ref. 1"}, {"h", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"h*", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"h+", "h+", "h+", "h+", "h+", "h+", "Ver. 1.0, Ref. 1"}, {"hb", "hb", "hb", "hb", "hb", "hb", "Ver. 3.0, Ref. 10"}, {"hc", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"he", "he", "he", "he", "he", "he", "Ver. 2.1, Ref. 8"}, {"hi", "h*", "hi", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hn", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hn2", "hn2", "hn2", "hn2", "hn2", "hn2", "Ver. 1.0, Ref. 1"}, {"ho", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"ho2", "ho2", "ho2", "ho2", "ho2", "ho2", "Ver. 1.0, Ref. 1"}, {"hoa", "hoa", "hoa", "hoa", "hoa", "hoa", "Ver. 3.0, Ref. 10"}, {"hos", "hos", "hos", "hos", "hos", "hos", "Ver. 3.0, Ref. 10"}, {"hp", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hs", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hsi", "hsi", "h", "h", "h", "h", "Ver. 2.0, Ref. 1"}, {"hw", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"i", "i", "i", "i", "i", "i", "Ver. 1.0, Ref. 1"}, {"kr", "kr", "kr", "kr", "kr", "kr", "Ver. 2.1, Ref. 8"}, {"n", "n", "n", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"n+", "n+", "n+", "n+", "n+", "n+", "Ver. 1.0, Ref. 1"}, {"n1", "nr", "nr", "nr", "nr", "nr", "Ver. 1.0, Ref. 1"}, {"n2", "nr", "nr", "nr", "nr", "nr", "Ver. 1.0, Ref. 1"}, {"n3m", "na", "na", "na", "na", "na", "Ver. 1.0, Ref. 1"}, {"n3n", "n", "n", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"n4", "n+", "n+", "n+", "n+", "n+", "Ver. 1.0, Ref. 1"}, {"n4m", "na", "na", "na", "na", "na", "Ver. 1.0, Ref. 1"}, {"n4n", "n", "n", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"n=", "n=", "n=", "n=", "n=", "n=", "Ver. 1.0, Ref. 1"}, {"n=1", "n=", "n=1", "n=", "n=1", "n=", "Ver. 1.0, Ref. 1"}, {"n=2", "n=", "n=2", "n=", "n=2", "n=", "Ver. 1.0, Ref. 1"}, {"n_2", "n_2", "n_2", "n_2", "n_2", "n_2", "Ver. 1.0, Ref. 1"}, {"na", "na", "na", "na", "na", "na", "Ver. 1.0, Ref. 1"}, {"nb", "nn", "nn", "nn", "nn", "nn", "Ver. 1.0, Ref. 1"}, {"ne", "ne", "ne", "ne", "ne", "ne", "Ver. 2.1, Ref. 8"}, {"nh", "nh", "nh", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"nh+", "nh", "nh+", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"nho", "nh", "nh", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"ni", "nh", "nh", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"nn", "nn", "nn", "nn", "nn", "nn", "Ver. 1.0, Ref. 1"}, {"np", "np", "np", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"npc", "nh", "nh", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"nr", "nr", "nr", "nr", "nr", "nr", "Ver. 1.0, Ref. 1"}, {"nt", "nt", "nt", "nt", "nt", "nt", "Ver. 1.0, Ref. 1"}, {"nz", "nz", "nz", "nz", "nz", "nz", "Ver. 1.0, Ref. 1"}, {"o", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"o*", "o*", "o*", "o*", "o*", "o*", "Ver. 1.0, Ref. 1"}, {"o-", "o-", "o-", "o-", "o-", "o-", "Ver. 1.0, Ref. 1"}, {"o3e", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"o4e", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"o=", "o=", "o=", "o-", "o-", "o-", "Ver. 1.0, Ref. 1"}, {"o_1", "o_1", "o_1", "o_1", "o_1", "o_1", "Ver. 1.0, Ref. 1"}, {"o_2", "o_2", "o_2", "o_2", "o_2", "o_2", "Ver. 1.0, Ref. 1"}, {"oah", "oah", "oah", "oah", "oah", "oah", "Ver. 3.0, Ref. 10"}, {"oas", "oas", "oas", "oas", "oas", "oas", "Ver. 3.0, Ref. 10"}, {"ob", "ob", "ob", "ob", "ob", "ob", "Ver. 3.0, Ref. 10"}, {"oc", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"oe", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"oh", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"oo", "oo", "oo", "oo", "oo", "oo", "Ver. 2.0, Ref. 5"}, {"op", "op", "op", "op", "op", "op", "Ver. 1.0, Ref. 1"}, {"osh", "osh", "osh", "osh", "osh", "osh", "Ver. 3.0, Ref. 10"}, {"osi", "osi", "osi", "osi", "osi", "osi", "Ver. 1.0, Ref. 1"}, {"oss", "oss", "oss", "oss", "oss", "oss", "Ver. 3.0, Ref. 10"}, {"oz", "oz", "oz", "oz", "oz", "oz", "Ver. 2.0, Ref. 5"}, {"p", "p", "p", "p", "p", "p", "Ver. 1.0, Ref. 1"}, {"p=", "p=", "p=", "p=", "p=", "p=", "Ver. 1.0, Ref. 1"}, {"s", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"s'", "s'", "s'", "s'", "s'", "s'", "Ver. 1.0, Ref. 1"}, {"s-", "sp", "sp", "sp", "sp", "sp", "Ver. 1.0, Ref. 1"}, {"s1", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"s3e", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"s4e", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sc", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sf", "s'", "s'", "s'", "s'", "s'", "Ver. 1.0, Ref. 1"}, {"sh", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"si", "si", "si", "si", "si", "si", "Ver. 1.0, Ref. 1"}, {"sio", "sio", "sio", "sio", "sio", "sio", "Ver. 1.0, Ref. 1"}, {"sp", "sp", "sp", "sp", "sp", "sp", "Ver. 1.0, Ref. 1"}, {"sz", "sz", "sz", "sz", "sz", "sz", "Ver. 3.0, Ref. 10"}, {"xe", "xe", "xe", "xe", "xe", "xe", "Ver. 2.1, Ref. 8"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= PCFF info E = K2 * (R - R0)^2 */ char * PCFF_bonds_auto[627][5]= {{"br_", "br_", "2.2900", "175.6329", "Ver. 2.0, Ref. 2"}, {"br_", "c'_", "1.8750", "228.2808", "Ver. 2.0, Ref. 2"}, {"br_", "c3m_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"br_", "c4m_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"br_", "c=", "1.8800", "253.7008", "Ver. 2.0, Ref. 2"}, {"br_", "c=_1", "1.8800", "253.7008", "Ver. 2.0, Ref. 3"}, {"br_", "c=_2", "1.8800", "253.7008", "Ver. 2.0, Ref. 3"}, {"br_", "c=_3", "1.8800", "253.7008", "Ver. 2.0, Ref. 3"}, {"br_", "c_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"br_", "cl_", "2.1320", "209.1876", "Ver. 2.0, Ref. 2"}, {"br_", "cp_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"br_", "ct_", "1.8250", "268.8528", "Ver. 2.0, Ref. 2"}, {"br_", "f_", "1.7950", "193.5000", "Ver. 2.0, Ref. 2"}, {"br_", "h_", "1.5080", "314.1728", "Ver. 2.0, Ref. 2"}, {"br_", "i_", "2.4660", "165.6156", "Ver. 2.0, Ref. 2"}, {"br_", "n+_", "1.8370", "196.5940", "Ver. 2.0, Ref. 2"}, {"br_", "n3m_", "1.8370", "203.8340", "Ver. 2.0, Ref. 2"}, {"br_", "n4m_", "1.8370", "203.8340", "Ver. 2.0, Ref. 2"}, {"br_", "n=", "1.8100", "259.1980", "Ver. 2.0, Ref. 2"}, {"br_", "n=_1", "1.8100", "259.1980", "Ver. 2.0, Ref. 3"}, {"br_", "n=_2", "1.8100", "259.1980", "Ver. 2.0, Ref. 3"}, {"br_", "n=_3", "1.8100", "259.1980", "Ver. 2.0, Ref. 3"}, {"br_", "n_", "1.8100", "206.3980", "Ver. 2.0, Ref. 2"}, {"br_", "na_", "1.8370", "203.8340", "Ver. 2.0, Ref. 2"}, {"br_", "np_", "1.8100", "259.1980", "Ver. 2.0, Ref. 2"}, {"br_", "o'_", "1.7550", "233.2954", "Ver. 2.0, Ref. 2"}, {"br_", "o_", "1.7980", "284.7988", "Ver. 2.0, Ref. 2"}, {"br_", "op_", "1.7550", "260.8954", "Ver. 2.0, Ref. 2"}, {"br_", "p_", "2.1800", "183.1472", "Ver. 2.0, Ref. 2"}, {"br_", "s'_", "2.1450", "187.6017", "Ver. 2.0, Ref. 2"}, {"br_", "s3e_", "2.1750", "187.8836", "Ver. 2.0, Ref. 2"}, {"br_", "s4e_", "2.1750", "187.8836", "Ver. 2.0, Ref. 2"}, {"br_", "s_", "2.1750", "187.8836", "Ver. 2.0, Ref. 2"}, {"br_", "si_", "2.2350", "180.2320", "Ver. 2.0, Ref. 2"}, {"br_", "sp_", "2.1450", "172.8017", "Ver. 2.0, Ref. 2"}, {"c'_", "c'_", "1.5000", "266.4000", "Ver. 2.0, Ref. 2"}, {"c'_", "c3m_", "1.5200", "283.0924", "Ver. 2.0, Ref. 2"}, {"c'_", "c4m_", "1.5200", "283.0924", "Ver. 2.0, Ref. 2"}, {"c'_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c'_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c'_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c'_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c'_", "c_", "1.5200", "283.0924", "Ver. 2.0, Ref. 2"}, {"c'_", "cl_", "1.7270", "249.8588", "Ver. 2.0, Ref. 2"}, {"c'_", "cp_", "1.5000", "284.3316", "Ver. 2.0, Ref. 2"}, {"c'_", "ct_", "1.4200", "311.1492", "Ver. 2.0, Ref. 2"}, {"c'_", "f_", "1.3900", "217.7092", "Ver. 2.0, Ref. 2"}, {"c'_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c'_", "i_", "2.0610", "208.6024", "Ver. 2.0, Ref. 2"}, {"c'_", "n3m_", "1.4460", "272.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "n4m_", "1.4000", "332.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "n=", "1.4050", "296.2996", "Ver. 2.0, Ref. 2"}, {"c'_", "n=_1", "1.4050", "296.2996", "Ver. 2.0, Ref. 3"}, {"c'_", "n=_2", "1.4050", "296.2996", "Ver. 2.0, Ref. 3"}, {"c'_", "n=_3", "1.4050", "296.2996", "Ver. 2.0, Ref. 3"}, {"c'_", "n_", "1.3600", "388.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "np_", "1.4050", "296.2996", "Ver. 2.0, Ref. 2"}, {"c'_", "o'_", "1.2200", "615.3220", "Ver. 2.0, Ref. 2"}, {"c'_", "o-_", "1.2500", "572.8860", "Ver. 2.0, Ref. 2"}, {"c'_", "o_", "1.3400", "400.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "op_", "1.3500", "294.1008", "Ver. 2.0, Ref. 2"}, {"c'_", "p_", "1.7200", "241.3820", "Ver. 2.0, Ref. 2"}, {"c'_", "s'_", "1.6110", "510.2775", "Ver. 2.0, Ref. 2"}, {"c'_", "s-_", "1.6800", "280.3060", "Ver. 2.0, Ref. 2"}, {"c'_", "s3e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 2"}, {"c'_", "s4e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 2"}, {"c'_", "s_", "1.7700", "175.0035", "Ver. 2.0, Ref. 2"}, {"c'_", "si_", "1.8300", "239.3552", "Ver. 2.0, Ref. 2"}, {"c'_", "sp_", "1.7400", "215.3532", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "1.5100", "322.7158", "Ver. 2.0, Ref. 2"}, {"c3m_", "c4m_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c3m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c3m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 2"}, {"c3m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c3m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 2"}, {"c3m_", "n3m_", "1.4850", "356.5988", "Ver. 2.0, Ref. 2"}, {"c3m_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c3m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 2"}, {"c3m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c3m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 2"}, {"c3m_", "o3e_", "1.4340", "273.2000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o4e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c3m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 2"}, {"c3m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 2"}, {"c3m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 2"}, {"c3m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s4e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "1.5520", "322.7158", "Ver. 2.0, Ref. 2"}, {"c4m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c4m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 2"}, {"c4m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c4m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 2"}, {"c4m_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c4m_", "n4m_", "1.4670", "356.5988", "Ver. 2.0, Ref. 2"}, {"c4m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 2"}, {"c4m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c4m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 2"}, {"c4m_", "o3e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o4e_", "1.4462", "273.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 2"}, {"c4m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 2"}, {"c4m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 2"}, {"c4m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s4e_", "1.8470", "228.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 2"}, {"c=", "c=", "1.3300", "655.2000", "Ver. 2.0, Ref. 2"}, {"c=", "c_", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c=", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 2"}, {"c=", "cp_", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c=", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 2"}, {"c=", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 2"}, {"c=", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 2"}, {"c=", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 2"}, {"c=", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 2"}, {"c=", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 2"}, {"c=", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 2"}, {"c=", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 2"}, {"c=", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 2"}, {"c=", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 2"}, {"c=", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 2"}, {"c=", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 2"}, {"c=", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 2"}, {"c=", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 2"}, {"c=", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 2"}, {"c=", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 2"}, {"c=", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 2"}, {"c=", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 2"}, {"c=", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 2"}, {"c=", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 2"}, {"c=_1", "c=_1", "1.4800", "320.0000", "Ver. 2.0, Ref. 3"}, {"c=_1", "c=_2", "1.4800", "320.0000", "Ver. 2.0, Ref. 3"}, {"c=_1", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 3"}, {"c=_1", "c_", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c=_1", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 3"}, {"c=_1", "cp_", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c=_1", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_1", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 3"}, {"c=_1", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 3"}, {"c=_1", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 3"}, {"c=_1", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_1", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_1", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_1", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_1", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"c=_1", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 3"}, {"c=_1", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_1", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_1", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 3"}, {"c=_1", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 3"}, {"c=_1", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 3"}, {"c=_1", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 3"}, {"c=_1", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 3"}, {"c=_1", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_1", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_1", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_1", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 3"}, {"c=_1", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 3"}, {"c=_2", "c=_2", "1.4100", "480.0000", "Ver. 2.0, Ref. 3"}, {"c=_2", "c=_3", "1.4800", "320.0000", "Ver. 2.0, Ref. 3"}, {"c=_2", "c_", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c=_2", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 3"}, {"c=_2", "cp_", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c=_2", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_2", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 3"}, {"c=_2", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 3"}, {"c=_2", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 3"}, {"c=_2", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_2", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_2", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_2", "n=_2", "1.3430", "493.5268", "Ver. 2.0, Ref. 3"}, {"c=_2", "n=_3", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_2", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 3"}, {"c=_2", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_2", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_2", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 3"}, {"c=_2", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 3"}, {"c=_2", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 3"}, {"c=_2", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 3"}, {"c=_2", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 3"}, {"c=_2", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_2", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_2", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_2", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 3"}, {"c=_2", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 3"}, {"c=_3", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 3"}, {"c=_3", "c_", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c=_3", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 3"}, {"c=_3", "cp_", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c=_3", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_3", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 3"}, {"c=_3", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 3"}, {"c=_3", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 3"}, {"c=_3", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_3", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_3", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"c=_3", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_3", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"c=_3", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 3"}, {"c=_3", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_3", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_3", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 3"}, {"c=_3", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 3"}, {"c=_3", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 3"}, {"c=_3", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 3"}, {"c=_3", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 3"}, {"c=_3", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_3", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_3", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_3", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 3"}, {"c=_3", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 3"}, {"c_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"c_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 2"}, {"c_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 2"}, {"c_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"c_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 2"}, {"c_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 2"}, {"c_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 2"}, {"c_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 2"}, {"c_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 2"}, {"c_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 2"}, {"c_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 2"}, {"c_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 2"}, {"c_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 2"}, {"ci_", "ci_", "1.3900", "280.0000", "Ver. 2.0, Ref. 2"}, {"ci_", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 2"}, {"ci_", "ni_", "1.3800", "320.0000", "Ver. 2.0, Ref. 2"}, {"cl_", "cl_", "1.9880", "236.5339", "Ver. 2.0, Ref. 2"}, {"cl_", "cp_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"cl_", "ct_", "1.6770", "292.1952", "Ver. 2.0, Ref. 2"}, {"cl_", "f_", "1.6470", "207.1180", "Ver. 2.0, Ref. 2"}, {"cl_", "h_", "1.3600", "345.9024", "Ver. 2.0, Ref. 2"}, {"cl_", "i_", "2.3180", "189.3396", "Ver. 2.0, Ref. 2"}, {"cl_", "n+_", "1.6890", "217.7248", "Ver. 2.0, Ref. 2"}, {"cl_", "n3m_", "1.6890", "226.4260", "Ver. 2.0, Ref. 2"}, {"cl_", "n4m_", "1.6890", "226.4260", "Ver. 2.0, Ref. 2"}, {"cl_", "n=", "1.6620", "280.3604", "Ver. 2.0, Ref. 2"}, {"cl_", "n=_1", "1.6620", "280.3604", "Ver. 2.0, Ref. 3"}, {"cl_", "n=_2", "1.6620", "280.3604", "Ver. 2.0, Ref. 3"}, {"cl_", "n=_3", "1.6620", "280.3604", "Ver. 2.0, Ref. 3"}, {"cl_", "n_", "1.6620", "227.5604", "Ver. 2.0, Ref. 2"}, {"cl_", "na_", "1.6890", "226.4260", "Ver. 2.0, Ref. 2"}, {"cl_", "np_", "1.6620", "280.3604", "Ver. 2.0, Ref. 2"}, {"cl_", "o'_", "1.6070", "251.7939", "Ver. 2.0, Ref. 2"}, {"cl_", "o_", "1.6500", "307.0632", "Ver. 2.0, Ref. 2"}, {"cl_", "op_", "1.6070", "279.3939", "Ver. 2.0, Ref. 2"}, {"cl_", "p_", "2.0430", "208.8228", "Ver. 2.0, Ref. 2"}, {"cl_", "s'_", "1.9970", "211.1368", "Ver. 2.0, Ref. 2"}, {"cl_", "s3e_", "2.0270", "212.0812", "Ver. 2.0, Ref. 2"}, {"cl_", "s4e_", "2.0270", "212.0812", "Ver. 2.0, Ref. 2"}, {"cl_", "s_", "2.0270", "212.0812", "Ver. 2.0, Ref. 2"}, {"cl_", "si_", "2.0870", "207.9748", "Ver. 2.0, Ref. 2"}, {"cl_", "sp_", "1.9970", "196.3368", "Ver. 2.0, Ref. 2"}, {"cp_", "cp_", "1.3900", "480.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "ct_", "1.4000", "321.6716", "Ver. 2.0, Ref. 2"}, {"cp_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 2"}, {"cp_", "i_", "2.0410", "217.4512", "Ver. 2.0, Ref. 2"}, {"cp_", "n+_", "1.4120", "251.3344", "Ver. 2.0, Ref. 2"}, {"cp_", "n3m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "n4m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "n=", "1.3850", "316.0380", "Ver. 2.0, Ref. 2"}, {"cp_", "n=_1", "1.3850", "316.0380", "Ver. 2.0, Ref. 3"}, {"cp_", "n=_2", "1.3850", "316.0380", "Ver. 2.0, Ref. 3"}, {"cp_", "n=_3", "1.3850", "316.0380", "Ver. 2.0, Ref. 3"}, {"cp_", "n_", "1.4200", "280.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "na_", "1.4120", "257.7752", "Ver. 2.0, Ref. 2"}, {"cp_", "np_", "1.3500", "440.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "o'_", "1.3300", "297.4852", "Ver. 2.0, Ref. 2"}, {"cp_", "o_", "1.3700", "384.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "op_", "1.3700", "420.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "p_", "1.7000", "235.0428", "Ver. 2.0, Ref. 2"}, {"cp_", "s'_", "1.7200", "239.8024", "Ver. 2.0, Ref. 2"}, {"cp_", "s3e", "1.7300", "228.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "s4e", "1.7300", "228.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "s_", "1.7300", "228.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "si_", "1.8100", "225.1676", "Ver. 2.0, Ref. 2"}, {"cp_", "sp_", "1.7106", "320.0000", "Ver. 2.0, Ref. 2"}, {"cr_", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 2"}, {"cr_", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"cr_", "n=_2", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"cr_", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"cr_", "n_", "1.3200", "388.0000", "Ver. 2.0, Ref. 2"}, {"ct_", "ct_", "1.2040", "800.0000", "Ver. 2.0, Ref. 2"}, {"ct_", "f_", "1.3400", "278.3932", "Ver. 2.0, Ref. 2"}, {"ct_", "h_", "1.0530", "316.9016", "Ver. 2.0, Ref. 2"}, {"ct_", "i_", "2.0110", "248.9268", "Ver. 2.0, Ref. 2"}, {"ct_", "n+_", "1.3820", "278.3768", "Ver. 2.0, Ref. 2"}, {"ct_", "n3m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 2"}, {"ct_", "n4m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 2"}, {"ct_", "n=", "1.3550", "342.2448", "Ver. 2.0, Ref. 2"}, {"ct_", "n=_1", "1.3550", "342.2448", "Ver. 2.0, Ref. 3"}, {"ct_", "n=_2", "1.3550", "342.2448", "Ver. 2.0, Ref. 3"}, {"ct_", "n=_3", "1.3550", "342.2448", "Ver. 2.0, Ref. 3"}, {"ct_", "n_", "1.3550", "289.4448", "Ver. 2.0, Ref. 2"}, {"ct_", "na_", "1.3820", "286.8096", "Ver. 2.0, Ref. 2"}, {"ct_", "nt_", "1.1580", "880.0000", "Ver. 2.0, Ref. 2"}, {"ct_", "o'_", "1.3000", "318.8680", "Ver. 2.0, Ref. 2"}, {"ct_", "o_", "1.3130", "367.8164", "Ver. 2.0, Ref. 2"}, {"ct_", "op_", "1.3000", "346.4680", "Ver. 2.0, Ref. 2"}, {"ct_", "p_", "1.6700", "273.4668", "Ver. 2.0, Ref. 2"}, {"ct_", "s'_", "1.6900", "270.8344", "Ver. 2.0, Ref. 2"}, {"ct_", "s3e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 2"}, {"ct_", "s4e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 2"}, {"ct_", "s_", "1.7200", "271.4328", "Ver. 2.0, Ref. 2"}, {"ct_", "si_", "1.7800", "267.2964", "Ver. 2.0, Ref. 2"}, {"ct_", "sp_", "1.6900", "256.0344", "Ver. 2.0, Ref. 2"}, {"dw", "dw", "0.7416", "398.2392", "Ver. 2.0, Ref. 2"}, {"f_", "f_", "1.4170", "259.0683", "Ver. 2.0, Ref. 2"}, {"f_", "h_", "1.0230", "520.7304", "Ver. 2.0, Ref. 2"}, {"f_", "i_", "1.9810", "174.1664", "Ver. 2.0, Ref. 2"}, {"f_", "n+_", "1.3520", "178.0372", "Ver. 2.0, Ref. 2"}, {"f_", "n3m_", "1.3520", "200.9852", "Ver. 2.0, Ref. 2"}, {"f_", "n4m_", "1.3520", "200.9852", "Ver. 2.0, Ref. 2"}, {"f_", "n=", "1.3250", "242.1856", "Ver. 2.0, Ref. 2"}, {"f_", "n=_1", "1.3250", "242.1856", "Ver. 2.0, Ref. 3"}, {"f_", "n=_2", "1.3250", "242.1856", "Ver. 2.0, Ref. 3"}, {"f_", "n=_3", "1.3250", "242.1856", "Ver. 2.0, Ref. 3"}, {"f_", "n_", "1.3250", "189.3856", "Ver. 2.0, Ref. 2"}, {"f_", "na_", "1.3520", "200.9852", "Ver. 2.0, Ref. 2"}, {"f_", "np_", "1.3250", "242.1856", "Ver. 2.0, Ref. 2"}, {"f_", "o'_", "1.2700", "204.0505", "Ver. 2.0, Ref. 2"}, {"f_", "o_", "1.4180", "224.0000", "Ver. 2.0, Ref. 2"}, {"f_", "op_", "1.2700", "231.6505", "Ver. 2.0, Ref. 2"}, {"f_", "p_", "1.5400", "230.3664", "Ver. 2.0, Ref. 2"}, {"f_", "s'_", "1.6600", "195.3021", "Ver. 2.0, Ref. 2"}, {"f_", "s3e_", "1.6900", "204.8184", "Ver. 2.0, Ref. 2"}, {"f_", "s4e_", "1.6900", "204.8184", "Ver. 2.0, Ref. 2"}, {"f_", "s_", "1.6900", "204.8184", "Ver. 2.0, Ref. 2"}, {"f_", "si_", "1.5870", "297.3400", "Ver. 2.0, Ref. 2"}, {"f_", "sp_", "1.6600", "180.5021", "Ver. 2.0, Ref. 2"}, {"h_", "h_", "0.7461", "398.7301", "Ver. 2.0, Ref. 2"}, {"h_", "i_", "1.6940", "292.0432", "Ver. 2.0, Ref. 2"}, {"h_", "n+_", "1.0650", "461.1848", "Ver. 2.0, Ref. 2"}, {"h_", "n3m_", "1.0260", "457.4592", "Ver. 2.0, Ref. 2"}, {"h_", "n4m_", "1.0260", "457.4592", "Ver. 2.0, Ref. 2"}, {"h_", "n=", "1.0380", "551.2061", "Ver. 2.0, Ref. 2"}, {"h_", "n=_1", "1.0380", "551.2061", "Ver. 2.0, Ref. 3"}, {"h_", "n=_2", "1.0380", "551.2061", "Ver. 2.0, Ref. 3"}, {"h_", "n=_3", "1.0380", "551.2061", "Ver. 2.0, Ref. 3"}, {"h_", "n_", "1.0260", "483.4512", "Ver. 2.0, Ref. 2"}, {"h_", "na_", "1.0260", "457.4592", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "1.0260", "483.4512", "Ver. 2.0, Ref. 2"}, {"h_", "o'_", "0.9830", "458.4610", "Ver. 2.0, Ref. 2"}, {"h_", "o_", "0.9600", "493.8480", "Ver. 2.0, Ref. 2"}, {"h_", "op_", "0.9830", "486.0610", "Ver. 2.0, Ref. 2"}, {"h_", "p_", "1.4300", "224.0000", "Ver. 2.0, Ref. 2"}, {"h_", "s'_", "1.3730", "316.8138", "Ver. 2.0, Ref. 2"}, {"h_", "s3e_", "1.3300", "274.1288", "Ver. 2.0, Ref. 2"}, {"h_", "s4e_", "1.3300", "274.1288", "Ver. 2.0, Ref. 2"}, {"h_", "s_", "1.3300", "274.1288", "Ver. 2.0, Ref. 2"}, {"h_", "si_", "1.4630", "288.3168", "Ver. 2.0, Ref. 2"}, {"h_", "sp_", "1.3730", "236.5449", "Ver. 2.0, Ref. 2"}, {"i_", "i_", "2.6620", "123.2110", "Ver. 2.0, Ref. 2"}, {"i_", "n+_", "2.0230", "177.2764", "Ver. 2.0, Ref. 2"}, {"i_", "n3m_", "2.0230", "184.0104", "Ver. 2.0, Ref. 2"}, {"i_", "n4m_", "2.0230", "184.0104", "Ver. 2.0, Ref. 2"}, {"i_", "n=", "1.9960", "239.4972", "Ver. 2.0, Ref. 2"}, {"i_", "n=_1", "1.9960", "239.4972", "Ver. 2.0, Ref. 3"}, {"i_", "n=_2", "1.9960", "239.4972", "Ver. 2.0, Ref. 3"}, {"i_", "n=_3", "1.9960", "239.4972", "Ver. 2.0, Ref. 3"}, {"i_", "n_", "1.9960", "186.6972", "Ver. 2.0, Ref. 2"}, {"i_", "na_", "2.0230", "184.0104", "Ver. 2.0, Ref. 2"}, {"i_", "np_", "1.9960", "239.4972", "Ver. 2.0, Ref. 2"}, {"i_", "o'_", "1.9410", "213.2317", "Ver. 2.0, Ref. 2"}, {"i_", "o_", "1.9840", "264.9868", "Ver. 2.0, Ref. 2"}, {"i_", "op_", "1.9410", "240.8317", "Ver. 2.0, Ref. 2"}, {"i_", "p_", "2.3110", "162.7080", "Ver. 2.0, Ref. 2"}, {"i_", "s'_", "2.3310", "167.6272", "Ver. 2.0, Ref. 2"}, {"i_", "s3e_", "2.3610", "167.7624", "Ver. 2.0, Ref. 2"}, {"i_", "s4e_", "2.3610", "167.7624", "Ver. 2.0, Ref. 2"}, {"i_", "s_", "2.3610", "167.7624", "Ver. 2.0, Ref. 2"}, {"i_", "si_", "2.4210", "158.9664", "Ver. 2.0, Ref. 2"}, {"i_", "sp_", "2.3310", "152.8272", "Ver. 2.0, Ref. 2"}, {"n+_", "n+_", "1.3940", "193.5604", "Ver. 2.0, Ref. 2"}, {"n+_", "n3m_", "1.3940", "211.1592", "Ver. 2.0, Ref. 2"}, {"n+_", "n4m_", "1.3940", "211.1592", "Ver. 2.0, Ref. 2"}, {"n+_", "n=", "1.3670", "263.4360", "Ver. 2.0, Ref. 2"}, {"n+_", "n=_1", "1.3670", "263.4360", "Ver. 2.0, Ref. 3"}, {"n+_", "n=_2", "1.3670", "263.4360", "Ver. 2.0, Ref. 3"}, {"n+_", "n=_3", "1.3670", "263.4360", "Ver. 2.0, Ref. 3"}, {"n+_", "n_", "1.3670", "210.6360", "Ver. 2.0, Ref. 2"}, {"n+_", "na_", "1.3940", "211.1592", "Ver. 2.0, Ref. 2"}, {"n+_", "np_", "1.3670", "263.4360", "Ver. 2.0, Ref. 2"}, {"n+_", "o'_", "1.3120", "234.1060", "Ver. 2.0, Ref. 2"}, {"n+_", "o_", "1.3250", "291.0020", "Ver. 2.0, Ref. 2"}, {"n+_", "op_", "1.3120", "261.7060", "Ver. 2.0, Ref. 2"}, {"n+_", "p_", "1.6820", "209.1536", "Ver. 2.0, Ref. 2"}, {"n+_", "s'_", "1.7020", "198.0952", "Ver. 2.0, Ref. 2"}, {"n+_", "s_", "1.7320", "200.1168", "Ver. 2.0, Ref. 2"}, {"n+_", "si_", "1.7920", "206.9412", "Ver. 2.0, Ref. 2"}, {"n+_", "sp_", "1.7020", "183.2952", "Ver. 2.0, Ref. 2"}, {"n3m_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n3m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n3m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n3m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n3m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n3m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n3m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 2"}, {"n3m_", "na_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n3m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n3m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 2"}, {"n3m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 2"}, {"n3m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 2"}, {"n3m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 2"}, {"n3m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 2"}, {"n3m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 2"}, {"n3m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 2"}, {"n4m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n4m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n4m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n4m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n4m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n4m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 2"}, {"n4m_", "na_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n4m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n4m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 2"}, {"n4m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 2"}, {"n4m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 2"}, {"n4m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 2"}, {"n4m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 2"}, {"n4m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n4m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n4m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n4m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 2"}, {"n4m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 2"}, {"n=", "n=", "1.2100", "651.2000", "Ver. 2.0, Ref. 2"}, {"n=", "n_", "1.3400", "272.8000", "Ver. 2.0, Ref. 2"}, {"n=", "na_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n=", "np_", "1.3400", "325.6000", "Ver. 2.0, Ref. 2"}, {"n=", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 2"}, {"n=", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 2"}, {"n=", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 2"}, {"n=", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 2"}, {"n=", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 2"}, {"n=", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 2"}, {"n=", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 2"}, {"n=_1", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_1", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_1", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 3"}, {"n=_1", "n_", "1.3400", "272.8000", "Ver. 2.0, Ref. 3"}, {"n=_1", "na_", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n=_1", "np_", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_1", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 3"}, {"n=_1", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 3"}, {"n=_1", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_1", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 3"}, {"n=_1", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 3"}, {"n=_1", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_1", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_1", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_1", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 3"}, {"n=_1", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 3"}, {"n=_2", "n=_2", "1.2760", "488.0000", "Ver. 2.0, Ref. 3"}, {"n=_2", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 2"}, {"n=_2", "n_", "1.3400", "272.8000", "Ver. 2.0, Ref. 3"}, {"n=_2", "na_", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n=_2", "np_", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_2", "o'_", "1.2225", "434.0900", "Ver. 2.0, Ref. 3"}, {"n=_2", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 3"}, {"n=_2", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_2", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 3"}, {"n=_2", "s'_", "1.6325", "375.1624", "Ver. 2.0, Ref. 3"}, {"n=_2", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_2", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_2", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_2", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 3"}, {"n=_2", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 3"}, {"n=_3", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 3"}, {"n=_3", "n_", "1.3400", "272.8000", "Ver. 2.0, Ref. 3"}, {"n=_3", "na_", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n=_3", "np_", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_3", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 3"}, {"n=_3", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 3"}, {"n=_3", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_3", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 3"}, {"n=_3", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 3"}, {"n=_3", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_3", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_3", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=_3", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 3"}, {"n=_3", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 2"}, {"n_", "n_", "1.3400", "220.0000", "Ver. 2.0, Ref. 2"}, {"n_", "na_", "1.3670", "221.6968", "Ver. 2.0, Ref. 2"}, {"n_", "np_", "1.3400", "272.8000", "Ver. 2.0, Ref. 2"}, {"n_", "o'_", "1.2850", "239.5080", "Ver. 2.0, Ref. 2"}, {"n_", "o_", "1.2980", "301.2632", "Ver. 2.0, Ref. 2"}, {"n_", "op_", "1.2850", "267.1080", "Ver. 2.0, Ref. 2"}, {"n_", "p_", "1.6550", "219.9524", "Ver. 2.0, Ref. 2"}, {"n_", "s'_", "1.6750", "208.2844", "Ver. 2.0, Ref. 2"}, {"n_", "s3e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 2"}, {"n_", "s4e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 2"}, {"n_", "s_", "1.7050", "210.6208", "Ver. 2.0, Ref. 2"}, {"n_", "si_", "1.7650", "216.8064", "Ver. 2.0, Ref. 2"}, {"n_", "sp_", "1.6750", "193.4844", "Ver. 2.0, Ref. 2"}, {"na_", "na_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"na_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"na_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 2"}, {"na_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 2"}, {"na_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 2"}, {"na_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 2"}, {"na_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 2"}, {"na_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"na_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"na_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"na_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 2"}, {"na_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 2"}, {"np_", "np_", "1.3400", "408.0000", "Ver. 2.0, Ref. 2"}, {"np_", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 2"}, {"np_", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 2"}, {"np_", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 2"}, {"np_", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 2"}, {"np_", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 2"}, {"np_", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"np_", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"np_", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"np_", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 2"}, {"np_", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 2"}, {"nt_", "nt_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 2"}, {"nz_", "nz_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 2"}, {"o'_", "o'_", "1.1100", "484.8000", "Ver. 2.0, Ref. 2"}, {"o'_", "o_", "1.2430", "323.1720", "Ver. 2.0, Ref. 2"}, {"o'_", "op_", "1.2300", "272.4000", "Ver. 2.0, Ref. 2"}, {"o'_", "p_", "1.4800", "524.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "s'_", "1.5400", "421.5188", "Ver. 2.0, Ref. 2"}, {"o'_", "s3e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 2"}, {"o'_", "s4e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 2"}, {"o'_", "s_", "1.5900", "360.4188", "Ver. 2.0, Ref. 2"}, {"o'_", "si_", "1.6500", "454.7464", "Ver. 2.0, Ref. 2"}, {"o'_", "sp_", "1.5600", "341.2736", "Ver. 2.0, Ref. 2"}, {"o-_", "p_", "1.4800", "428.0000", "Ver. 2.0, Ref. 2"}, {"o_", "o_", "1.2080", "833.6868", "Ver. 2.0, Ref. 2"}, {"o_", "op_", "1.2430", "350.7720", "Ver. 2.0, Ref. 2"}, {"o_", "p_", "1.6100", "245.2000", "Ver. 2.0, Ref. 2"}, {"o_", "s'_", "1.6330", "286.7584", "Ver. 2.0, Ref. 2"}, {"o_", "s3e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 2"}, {"o_", "s4e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 2"}, {"o_", "s_", "1.6930", "288.0848", "Ver. 2.0, Ref. 2"}, {"o_", "si_", "1.6650", "392.8000", "Ver. 2.0, Ref. 2"}, {"o_", "sp_", "1.6330", "271.9584", "Ver. 2.0, Ref. 2"}, {"op_", "op_", "1.2300", "300.0000", "Ver. 2.0, Ref. 2"}, {"op_", "p_", "1.6300", "286.0904", "Ver. 2.0, Ref. 2"}, {"op_", "s'_", "1.6200", "262.9744", "Ver. 2.0, Ref. 2"}, {"op_", "s3e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 2"}, {"op_", "s4e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 2"}, {"op_", "s_", "1.6800", "266.7748", "Ver. 2.0, Ref. 2"}, {"op_", "si", "1.5870", "292.2400", "Ver. 2.0, Ref. 2"}, {"op_", "sp_", "1.6500", "247.8440", "Ver. 2.0, Ref. 2"}, {"p_", "p_", "1.9700", "176.0000", "Ver. 2.0, Ref. 2"}, {"p_", "s'_", "1.9700", "255.2524", "Ver. 2.0, Ref. 2"}, {"p_", "s-_", "1.9800", "210.9800", "Ver. 2.0, Ref. 2"}, {"p_", "s3e_", "2.0200", "186.8792", "Ver. 2.0, Ref. 2"}, {"p_", "s4e_", "2.0200", "186.8792", "Ver. 2.0, Ref. 2"}, {"p_", "s_", "2.0200", "186.8792", "Ver. 2.0, Ref. 2"}, {"p_", "si_", "1.9170", "168.2072", "Ver. 2.0, Ref. 2"}, {"p_", "sp_", "1.9900", "175.1796", "Ver. 2.0, Ref. 2"}, {"s'_", "s'_", "1.9700", "320.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "s3e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 2"}, {"s'_", "s4e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 2"}, {"s'_", "s_", "2.0400", "189.9260", "Ver. 2.0, Ref. 2"}, {"s'_", "si_", "2.0800", "247.5744", "Ver. 2.0, Ref. 2"}, {"s'_", "sp_", "1.9900", "240.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s3e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s_", "2.1000", "160.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 2"}, {"s3e_", "sp_", "2.0400", "175.1260", "Ver. 2.0, Ref. 2"}, {"s4e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "s_", "2.1000", "160.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 2"}, {"s4e_", "sp_", "2.0400", "175.1260", "Ver. 2.0, Ref. 2"}, {"s_", "s_", "2.0547", "180.0000", "Ver. 2.0, Ref. 2"}, {"s_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 2"}, {"s_", "sp_", "2.0400", "175.1260", "Ver. 2.0, Ref. 2"}, {"si_", "si_", "2.1900", "144.0000", "Ver. 2.0, Ref. 2"}, {"si_", "sp_", "2.1000", "167.4260", "Ver. 2.0, Ref. 2"}, {"sp_", "sp_", "2.0100", "160.0000", "Ver. 2.0, Ref. 2"}}; /* Quartic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= K3 (kcal mol-1), 5= K4 (kcal mol-1), 6= PCFF info E = K2 * (R - R0)^2 + K3 * (R - R0)^3 + K4 * (R - R0)^4 */ char * PCFF_bonds[126][7]= {{"az", "oah", "1.6987", "330.3950", "-600.3590", "662.1600", "Ver. 3.0, Ref. 10"}, {"az", "oas", "1.6614", "378.8170", "-590.1830", "419.2000", "Ver. 3.0, Ref. 10"}, {"az", "ob", "2.2643", "131.8700", "462.6760", "650.2020", "Ver. 3.0, Ref. 10"}, {"br", "c", "1.9390", "151.1370", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "c", "1.5300", "299.6700", "-501.7700", "679.8100", "Ver. 2.1, Ref. 8"}, {"c", "c", "1.5300", "299.6700", "-501.7700", "679.8100", "Ver. 1.0, Ref. 1"}, {"c", "c-", "1.5483", "253.0800", "-449.0300", "457.3200", "Ver. 1.0, Ref. 1"}, {"c", "c=", "1.5060", "312.3517", "-582.1861", "339.8971", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "1.5060", "312.3517", "-582.1861", "339.8971", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "1.5060", "312.3517", "-582.1861", "339.8971", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "1.5140", "312.3719", "-465.8290", "473.8300", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "1.5202", "253.7067", "-423.0370", "396.9000", "Ver. 1.0, Ref. 1"}, {"c", "cl", "1.7900", "194.3190", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "cp", "1.5010", "321.9021", "-521.8208", "572.1628", "Ver. 1.0, Ref. 1"}, {"c", "f", "1.3900", "403.0320", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "h", "1.1010", "345.0000", "-691.8900", "844.6000", "Ver. 2.1, Ref. 8"}, {"c", "h", "1.1010", "341.0000", "-691.8900", "844.6000", "Ver. 1.0, Ref. 1"}, {"c", "n", "1.4520", "327.1657", "-547.8990", "526.5000", "Ver. 1.0, Ref. 1"}, {"c", "n+", "1.5185", "293.1700", "-603.7882", "629.6900", "Ver. 1.0, Ref. 1"}, {"c", "n=", "1.4750", "336.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"c", "n=1", "1.4750", "336.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"c", "n=2", "1.4750", "336.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"c", "n_2", "1.4632", "319.1593", "-586.3243", "961.4143", "Ver. 2.1, Ref. 7"}, {"c", "na", "1.4570", "365.8052", "-699.6368", "998.4842", "Ver. 1.0, Ref. 1"}, {"c", "nr", "1.4695", "340.2400", "-589.4800", "854.5300", "Ver. 1.0, Ref. 1"}, {"c", "o", "1.4200", "400.3954", "-835.1951", "1313.0142", "Ver. 1.0, Ref. 1"}, {"c", "o_2", "1.4300", "326.7273", "-608.5306", "689.0333", "Ver. 2.2, Ref. 7"}, {"c", "o_2", "1.4457", "326.7273", "-608.5306", "689.0333", "Ver. 2.1, Ref. 6"}, {"c", "oz", "1.4457", "326.7273", "-608.5306", "689.0333", "Ver. 2.0, Ref. 5"}, {"c", "s", "1.8230", "225.2768", "-327.7057", "488.9722", "Ver. 1.0, Ref. 1"}, {"c", "si", "1.8995", "189.6536", "-279.4210", "307.5135", "Ver. 2.2, Ref. 9"}, {"c", "sio", "1.9073", "157.0049", "-237.7023", "356.0328", "Ver. 1.0, Ref. 4"}, {"c+", "nr", "1.3834", "380.4600", "-814.4300", "1153.3000", "Ver. 1.0, Ref. 1"}, {"c-", "h", "1.1331", "241.0600", "-574.7800", "853.7500", "Ver. 1.0, Ref. 1"}, {"c-", "o-", "1.2339", "711.3500", "-1543.9000", "1858.6000", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "1.3521", "545.2663", "-1005.6330", "1225.7415", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "1.3400", "543.9900", "-1238.2025", "1644.0282", "Ver. 3.1, Ref. 12"}, {"c=", "c=1", "1.3521", "545.2663", "-1005.6330", "1225.7415", "Ver. 1.0, Ref. 1"}, {"c=", "c=2", "1.3521", "545.2663", "-1005.6330", "1225.7415", "Ver. 1.0, Ref. 1"}, {"c=", "c_1", "1.4600", "270.1200", "-433.2519", "405.3601", "Ver. 3.1, Ref. 12"}, {"c=", "h", "1.0883", "365.7679", "-725.5404", "781.6621", "Ver. 1.0, Ref. 1"}, {"c=", "n_2", "1.3600", "380.8100", "-725.2168", "805.6459", "Ver. 3.1, Ref. 12"}, {"c=1", "c=2", "1.4400", "304.9700", "-519.7458", "516.7039", "Ver. 3.1, Ref. 12"}, {"c=1", "h", "1.0883", "365.7679", "-725.5404", "781.6621", "Ver. 1.0, Ref. 1"}, {"c=2", "c=2", "1.3400", "543.9900", "-1238.2025", "1644.0282", "Ver. 3.1, Ref. 12"}, {"c=2", "c_1", "1.4600", "270.1200", "-433.2519", "405.3601", "Ver. 3.1, Ref. 12"}, {"c=2", "h", "1.0883", "365.7679", "-725.5404", "781.6621", "Ver. 1.0, Ref. 1"}, {"c=2", "o=", "1.1600", "1112.0000", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c=2", "s'", "1.5526", "567.3600", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c_0", "cp", "1.4890", "339.3574", "-655.7236", "670.2362", "Ver. 2.1, Ref. 8"}, {"c_0", "h", "1.1220", "304.8631", "-623.3705", "700.2828", "Ver. 2.1, Ref. 8"}, {"c_0", "o_1", "1.2160", "823.7948", "-1878.7940", "2303.5311", "Ver. 2.1, Ref. 8"}, {"c_1", "cp", "1.4890", "339.3574", "-655.7236", "670.2362", "Ver. 2.1, Ref. 6"}, {"c_1", "h", "1.1110", "325.5717", "-632.1990", "726.0003", "Ver. 1.0, Ref. 1"}, {"c_1", "n", "1.4160", "359.1591", "-558.4730", "1146.3810", "Ver. 1.0, Ref. 1"}, {"c_1", "n_2", "1.3660", "390.6783", "-768.3798", "923.2418", "Ver. 2.1, Ref. 8"}, {"c_1", "o", "1.3649", "368.7309", "-832.4784", "1274.0231", "Ver. 1.0, Ref. 1"}, {"c_1", "o_1", "1.2020", "851.1403", "-1918.4882", "2160.7659", "Ver. 2.1, Ref. 6"}, {"c_1", "o_1", "1.2195", "820.7018", "-1875.1000", "2303.7600", "Ver. 1.0, Ref. 1"}, {"c_1", "o_2", "1.3683", "367.1481", "-794.7908", "1055.2319", "Ver. 2.1, Ref. 6"}, {"c_2", "n_2", "1.3580", "440.6783", "-828.3798", "1423.2418", "Ver. 2.1, Ref. 7"}, {"c_2", "o_1", "1.2063", "854.2903", "-1922.3407", "2101.6824", "Ver. 2.1, Ref. 7"}, {"c_2", "o_2", "1.3598", "391.3310", "-788.5655", "1212.3812", "Ver. 2.1, Ref. 7"}, {"cl", "p=", "2.0378", "158.7770", "-239.1290", "210.0844", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "1.4170", "470.8361", "-627.6179", "1327.6345", "Ver. 2.1, Ref. 8"}, {"cp", "cp", "1.3823", "476.2720", "-869.7532", "1281.3640", "Ver. 2.0, Ref. 5"}, {"cp", "cp", "1.4314", "356.0904", "-627.6179", "1327.6345", "Ver. 1.0, Ref. 1"}, {"cp", "h", "1.0982", "372.8251", "-803.4526", "894.3173", "Ver. 2.1, Ref. 8"}, {"cp", "h", "1.0731", "374.9058", "-799.8437", "899.9151", "Ver. 2.0, Ref. 5"}, {"cp", "n_2", "1.4390", "344.0452", "-652.1208", "1022.2242", "Ver. 2.1, Ref. 7"}, {"cp", "nh", "1.3749", "477.5202", "-848.5592", "1022.3909", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "1.3912", "447.0438", "-784.5346", "886.1671", "Ver. 1.0, Ref. 1"}, {"cp", "np", "1.3485", "508.8587", "-977.6914", "1772.5134", "Ver. 1.0, Ref. 1"}, {"cp", "o", "1.3768", "428.8798", "-738.2351", "1114.9655", "Ver. 1.0, Ref. 1"}, {"cp", "o_2", "1.4098", "387.9119", "-715.9186", "660.2442", "Ver. 2.1, Ref. 6"}, {"cp", "op", "1.3597", "547.5169", "-834.0665", "544.3090", "Ver. 1.0, Ref. 1"}, {"cp", "oz", "1.3828", "387.9119", "-715.9186", "660.2442", "Ver. 2.0, Ref. 5"}, {"cp", "p=", "1.7886", "197.7015", "-332.2507", "325.7157", "Ver. 3.1, Ref. 12"}, {"cp", "si", "1.8634", "233.2433", "-276.8692", "161.6659", "Ver. 2.2, Ref. 9"}, {"cp", "sp", "1.7053", "364.2568", "-457.7758", "291.1498", "Ver. 1.0, Ref. 1"}, {"cr", "n=", "1.2600", "560.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 2"}, {"cr", "n=1", "1.2600", "560.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"cr", "n=2", "1.2600", "560.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"cr", "nr", "1.3200", "388.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 2"}, {"cz", "oo", "1.1953", "854.2903", "-1922.3407", "2301.6824", "Ver. 2.0, Ref. 5"}, {"cz", "oz", "1.3398", "391.3310", "-788.5655", "1212.3812", "Ver. 2.0, Ref. 5"}, {"f", "f", "1.4200", "330.3795", "-647.0052", "760.1593", "Ver. 1.0, Ref. 4"}, {"f", "h*", "0.9170", "695.3795", "-1736.0052", "2430.1593", "Ver. 1.0, Ref. 4"}, {"f", "p=", "1.5632", "379.1441", "-882.3835", "1197.9185", "Ver. 3.1, Ref. 12"}, {"h", "h", "0.7414", "414.0000", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"h", "p=", "1.3861", "285.2043", "-575.6851", "677.8456", "Ver. 3.1, Ref. 12"}, {"h", "s", "1.3261", "275.1123", "-531.3181", "562.9630", "Ver. 1.0, Ref. 1"}, {"h", "si", "1.4783", "202.7798", "-305.3603", "280.2685", "Ver. 2.2, Ref. 9"}, {"h", "sio", "1.4802", "187.1010", "-280.7306", "258.8998", "Ver. 1.0, Ref. 4"}, {"h*", "n", "1.0100", "462.7500", "-1053.6300", "1545.7570", "Ver. 1.0, Ref. 1"}, {"h*", "n=", "1.0025", "540.1120", "-1500.2952", "2431.0081", "Ver. 3.1, Ref. 12"}, {"h*", "na", "1.0060", "466.7400", "-1073.6018", "1251.1056", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "1.0053", "463.9230", "-1050.8070", "1284.7262", "Ver. 1.0, Ref. 1"}, {"h*", "nn", "1.0012", "465.8608", "-1066.2360", "1496.5647", "Ver. 1.0, Ref. 1"}, {"h*", "nr", "1.0023", "462.3900", "-1044.6000", "1468.7000", "Ver. 1.0, Ref. 1"}, {"h*", "o", "0.9650", "532.5062", "-1282.9050", "2004.7658", "Ver. 1.0, Ref. 1"}, {"h*", "o*", "0.9700", "563.2800", "-1428.2200", "1902.1200", "Ver. 1.2, Ref. 3"}, {"h*", "osi", "0.9494", "540.3633", "-1311.8663", "2132.4446", "Ver. 1.0, Ref. 4"}, {"h+", "n+", "1.0119", "448.6300", "-963.1917", "1248.4000", "Ver. 1.0, Ref. 1"}, {"hb", "ob", "0.9513", "665.5370", "-1616.9700", "2259.4700", "Ver. 3.0, Ref. 10"}, {"hi", "nh", "1.0053", "463.9230", "-1050.8070", "1284.7262", "Ver. 1.1, Ref. 2"}, {"hn2", "n_2", "0.9959", "495.8294", "-1092.7239", "1441.1290", "Ver. 2.1, Ref. 7"}, {"ho2", "o_2", "0.9520", "534.2994", "-1287.1937", "1889.1396", "Ver. 2.1, Ref. 6"}, {"ho2", "oz", "0.9520", "534.2994", "-1287.1937", "1889.1396", "Ver. 2.0, Ref. 5"}, {"hoa", "oah", "0.9421", "719.2330", "-1606.4200", "2199.7200", "Ver. 3.0, Ref. 10"}, {"hos", "osh", "0.9457", "702.8730", "-1531.8700", "1814.8300", "Ver. 3.0, Ref. 10"}, {"n", "p=", "1.6580", "329.1660", "-713.7949", "902.9188", "Ver. 3.1, Ref. 12"}, {"n=", "p=", "1.5880", "429.1660", "-751.4047", "767.4308", "Ver. 3.1, Ref. 12"}, {"nh", "np", "1.3204", "646.7598", "-1639.8800", "6799.7099", "Ver. 1.0, Ref. 1"}, {"np", "np", "1.3121", "513.0111", "-873.6366", "1634.3437", "Ver. 1.0, Ref. 1"}, {"nz", "nz", "1.0977", "1652.4000", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"o", "p=", "1.6090", "333.0981", "-726.6232", "924.6198", "Ver. 3.1, Ref. 12"}, {"o=", "o=", "1.2074", "847.4400", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"o=", "s'", "1.4308", "743.7600", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"oas", "sz", "1.5923", "392.6680", "-1004.4800", "3452.8601", "Ver. 3.0, Ref. 10"}, {"ob", "sz", "1.6446", "393.6690", "-989.8420", "1461.9800", "Ver. 3.0, Ref. 10"}, {"osh", "sz", "1.6125", "420.0240", "-845.6110", "1438.6300", "Ver. 3.0, Ref. 10"}, {"osi", "sio", "1.6562", "306.1232", "-517.3424", "673.7067", "Ver. 1.0, Ref. 4"}, {"oss", "sz", "1.6155", "325.4430", "-943.3640", "1454.6700", "Ver. 3.0, Ref. 10"}, {"s", "s", "2.0559", "197.6560", "-196.1366", "644.4103", "Ver. 1.0, Ref. 1"}, {"si", "si", "2.3384", "114.2164", "-140.4212", "80.7084", "Ver. 2.2, Ref. 9"}}; /* Quadratic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= PCFF info E = K2 * (Theta - Theta0)^2 With: - Theta = Angle - Theta0 = Equilibrium angle - K2 = Spring constant */ char * PCFF_angles_auto[329][6]= {{"*", "c'_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "si_", "120.0000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "h_", "110.0000", "55.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "f_", "120.0000", "99.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "s'_", "123.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "s3e_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "s4e_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "s_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "o'_", "120.0000", "68.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "o_", "110.0000", "122.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n3m_", "120.0000", "53.5000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n4m_", "120.0000", "53.5000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n_", "120.0000", "53.5000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "c3m_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "c4m_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "c_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "c_", "115.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "n3m_", "114.0000", "82.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "n4m_", "114.0000", "82.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "n_", "114.0000", "82.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c'_", "h_", "117.0200", "26.3900", "Ver. 2.0, Ref. 2"}, {"h_", "c'_", "o'_", "120.0000", "55.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c'_", "o'_", "125.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c'_", "o'_", "123.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c'_", "n_", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c'_", "o'_", "123.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "o_", "123.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "si_", "112.3000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "h_", "109.5000", "44.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "f_", "107.8000", "95.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "s'_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "s3e_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "s4e_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "s_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "o'_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "o3e_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "o4e_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "o_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "n3m_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "n4m_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "n_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "c3m_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "c4m_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "c_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "c3m_", "60.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "n3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "n_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "o3e_", "60.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "s3e_", "60.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c3m_", "n_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c3m_", "n_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c3m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c3m_", "n3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c3m_", "s3e_", "60.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "si_", "112.3000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "h_", "109.5000", "44.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "f_", "107.8000", "95.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "s'_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "s3e_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "s4e_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "s_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "o'_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "o3e_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "o4e_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "o_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "n3m_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "n4m_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "n_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "c3m_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "c4m_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "c_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c4m_", "n_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "c4m_", "95.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "n4m_", "88.3400", "50.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "n_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "o4e_", "91.8400", "70.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "o_", "121.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "s4e_", "94.5900", "62.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c4m_", "n_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c4m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "n4m_", "88.4000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "s4e_", "89.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"o4e_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o4e_", "c4m_", "s4e_", "89.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c4m_", "s4e_", "91.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "si_", "120.0000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "h_", "120.0000", "37.5000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "f_", "120.0000", "96.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "s'_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "s3e_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "s4e_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "s_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "o'_", "120.0000", "68.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "o_", "120.0000", "68.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "n3m_", "120.0000", "90.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "n4m_", "120.0000", "90.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "n_", "120.0000", "90.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "c3m_", "120.0000", "36.2000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "c4m_", "120.0000", "36.2000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "c_", "120.0000", "36.2000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "si_", "112.3000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "h_", "109.5000", "44.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "f_", "107.8000", "95.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "s'_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "s3e_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "s4e_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "s_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "o_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "n3m_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "n4m_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "n_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "c3m_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "c4m_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "c_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c_", "n_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c_", "n_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "n3m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "n4m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "n_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "o_", "110.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "s_", "115.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "si_", "120.0000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "h_", "120.0000", "37.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "f_", "120.0000", "99.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "s'_", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "s3e_", "120.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "s4e_", "120.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "s_", "120.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "o'_", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "o_", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "n3m_", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "n4m_", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "n_", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "c3m_", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "c4m_", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "c_", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c_", "cp_", "s_", "114.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "*", "180.0000", "200.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "si_", "109.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "f_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "h_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "s'_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "s3e_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "s4e_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "s_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "o'_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "o_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "n3m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "n4m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "n_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "c_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n3m_", "c3m_", "60.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n3m_", "c_", "113.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n3m_", "h_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "si_", "109.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "f_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "h_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "s'_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "s3e_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "s4e_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "s_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "o'_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "o_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "n3m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "n4m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "n_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "c_", "110.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n4m_", "c4m_", "91.3800", "80.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n4m_", "h_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "si_", "120.0000", "35.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "f_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "h_", "122.0000", "35.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "s'_", "120.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "s3e_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "s4e_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "s_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "o'_", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "o_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "n_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "c3m_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "c4m_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "c_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "si_", "109.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "f_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "h_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "s'_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "s3e_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "s4e_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "s_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "o'_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "o_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "n3m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "n4m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "n_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "c3m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "c4m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "c_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "si_", "120.0000", "27.5000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "f_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "h_", "120.0000", "27.5000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "s'_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "s3e_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "s4e_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "s_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "o'_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "o_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "n_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "c3m_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "c4m_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "c_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "nt_", "*", "180.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"h_", "o*_", "h_", "104.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o3e_", "c3m_", "58.9580", "60.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o4e_", "c4m_", "91.7370", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "si_", "124.1000", "56.4000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "h_", "109.0000", "58.5000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "f_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "s'_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "s3e_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "s4e_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "s_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "o'_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "o_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "n3m_", "120.0000", "72.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "n4m_", "120.0010", "72.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "n_", "120.0000", "72.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "c3m_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "c4m_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "c_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"si", "o_", "si_", "149.8000", "31.1000", "Ver. 2.0, Ref. 2"}, {"*", "op_", "*", "108.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "op_", "si_", "106.0000", "27.5000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "si_", "109.5000", "30.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "h_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "f_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "s'_", "120.0000", "100.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "s_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "o'_", "120.0000", "110.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "o_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "n_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "c3m_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "c4m_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "c_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "si_", "109.5000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "h_", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "f_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "s'_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "s3e_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "s4e_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "s_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "o'_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "o_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "n3m_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "n4m_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "n_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "c3m_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "c4m_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "c_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s3e_", "c3m_", "44.5000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "si_", "109.5000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "h_", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "f_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "s'_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "s3e_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "s4e_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "s_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "o'_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "o_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "n3m_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "n4m_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "n_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "c3m_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "c4m_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "c_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s4e_", "c4m_", "85.9200", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "si_", "109.5000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "h_", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "f_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "s'_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "s3e_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "s4e_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "s_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "o'_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "o_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "n3m_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "n4m_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "n_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "c3m_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "c4m_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "c_", "102.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "si_", "113.4000", "33.3000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "h_", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "f_", "117.3000", "44.1000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "s_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "o_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "n_", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "c3m_", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "c4m_", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "c_", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "*", "92.5670", "120.0000", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "si_", "96.0000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "h_", "96.0000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "f_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "s'_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "s_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "o'_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "o_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "n_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "c3m_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "c4m_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "c_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}}; /* Quartic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= K3, 6= K4, 7= PCFF info Delta = Theta - Theta0 E = K2 * Delta^2 + K3 * Delta^3 + K4 * Delta^4 With: - Theta = Angle - Theta0 = Equilibrium angle */ char * PCFF_angles[302][8]= {{"oah", "az", "oah", "119.5540", "56.2161", "67.5146", "75.6704", "Ver. 3.0, Ref. 10"}, {"oah", "az", "oas", "135.8500", "1.5716", "-23.2602", "24.2341", "Ver. 3.0, Ref. 10"}, {"oah", "az", "ob", "96.9383", "41.2978", "-101.1850", "180.8230", "Ver. 3.0, Ref. 10"}, {"oas", "az", "oas", "114.1500", "112.9470", "-37.6330", "22.7467", "Ver. 3.0, Ref. 10"}, {"oas", "az", "ob", "97.0360", "73.0531", "-31.9551", "5.5982", "Ver. 3.0, Ref. 10"}, {"ob", "az", "ob", "97.0360", "73.0531", "-31.9551", "5.5982", "Ver. 3.0, Ref. 10"}, {"br", "c", "br", "109.6985", "71.9700", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"br", "c", "c", "109.1026", "64.7730", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"br", "c", "cl", "111.6408", "71.9700", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"br", "c", "f", "109.1026", "71.9700", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"br", "c", "h", "106.9999", "46.0608", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "112.6700", "39.5160", "-7.4430", "-9.5583", "Ver. 1.0, Ref. 1"}, {"c", "c", "c-", "104.4900", "31.3750", "-4.4023", "-6.5271", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=", "111.7600", "45.7026", "-10.6396", "-9.9121", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "111.7600", "45.7026", "-10.6396", "-9.9121", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=2", "111.7600", "45.7026", "-10.6396", "-9.9121", "Ver. 1.0, Ref. 1"}, {"c", "c", "c_0", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.0, Ref. 1"}, {"c", "c", "c_1", "108.5295", "51.9747", "-9.4851", "-10.9985", "Ver. 2.1, Ref. 8"}, {"c", "c", "cl", "107.0000", "61.1745", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "c", "cp", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.3, Ref. 1"}, {"c", "c", "f", "109.2000", "68.3715", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "c", "h", "110.7700", "41.4530", "-10.6040", "5.1290", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "114.3018", "42.6589", "-10.5464", "-9.3243", "Ver. 1.0, Ref. 1"}, {"c", "c", "n+", "112.1300", "66.4520", "4.8694", "37.7860", "Ver. 1.0, Ref. 1"}, {"c", "c", "n=", "117.2847", "55.4431", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"c", "c", "n_2", "109.8300", "76.8966", "-48.7334", "18.0162", "Ver. 2.1, Ref. 7"}, {"c", "c", "na", "111.9100", "60.7147", "-13.3366", "-13.0785", "Ver. 1.0, Ref. 1"}, {"c", "c", "nr", "117.3500", "55.0400", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "111.2700", "54.5381", "-8.3642", "-13.0838", "Ver. 1.0, Ref. 1"}, {"c", "c", "o_2", "107.4100", "63.3907", "-13.4513", "1.6650", "Ver. 2.1, Ref. 6"}, {"c", "c", "oz", "105.4100", "63.3907", "-13.4513", "0.0000", "Ver. 2.0, Ref. 5"}, {"c", "c", "s", "112.5642", "47.0276", "-10.6790", "-10.1687", "Ver. 1.0, Ref. 1"}, {"c", "c", "si", "112.6700", "39.5160", "-7.4430", "0.0000", "Ver. 2.2, Ref. 9"}, {"c-", "c", "h", "109.6700", "37.9190", "-7.3877", "-8.0694", "Ver. 1.0, Ref. 1"}, {"c-", "c", "n", "100.5663", "52.0966", "-5.2642", "-10.7045", "Ver. 1.3, Ref. 1"}, {"c=", "c", "c=", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=1", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=2", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=", "c", "h", "110.0600", "41.2784", "-14.2963", "5.2229", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=1", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=2", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "h", "110.0600", "41.2784", "-14.2963", "5.2229", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=2", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "h", "110.0600", "41.2784", "-14.2963", "5.2229", "Ver. 1.0, Ref. 1"}, {"c_0", "c", "cp", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.0, Ref. 1"}, {"c_0", "c", "h", "107.8594", "38.0833", "-17.5074", "0.0000", "Ver. 1.0, Ref. 1"}, {"c_0", "c", "o", "106.1764", "74.4143", "-12.6018", "-48.7850", "Ver. 1.0, Ref. 1"}, {"c_1", "c", "h", "107.7336", "40.6099", "-28.8121", "0.0000", "Ver. 2.1, Ref. 8"}, {"c_1", "c", "n", "100.5663", "52.0966", "-5.2642", "-10.7045", "Ver. 1.0, Ref. 1"}, {"c_1", "c", "n+", "100.5663", "52.0966", "-5.2642", "-10.7045", "Ver. 1.3, Ref. 1"}, {"cl", "c", "cl", "111.6408", "71.9700", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"cl", "c", "f", "109.1026", "71.9700", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"cl", "c", "h", "107.9968", "51.0987", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"cp", "c", "cp", "111.0000", "44.3234", "-9.4454", "0.0000", "Ver. 1.5, Ref. 4"}, {"cp", "c", "h", "111.0000", "44.3234", "-9.4454", "0.0000", "Ver. 1.0, Ref. 1"}, {"f", "c", "f", "109.1026", "71.9700", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"f", "c", "h", "108.5010", "57.5760", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"h", "c", "h", "107.6600", "39.6410", "-12.9210", "-2.4318", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "108.9372", "57.4010", "2.9374", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "n+", "105.8500", "72.2630", "-28.1923", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "n=", "107.4989", "62.7484", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"h", "c", "n=1", "107.4989", "62.7484", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"h", "c", "n=2", "107.4989", "62.7484", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"h", "c", "n_2", "108.5330", "66.9202", "-13.6480", "10.3280", "Ver. 2.1, Ref. 7"}, {"h", "c", "na", "110.6204", "51.3137", "-6.7198", "-2.6003", "Ver. 1.0, Ref. 1"}, {"h", "c", "nr", "107.5000", "62.6790", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "o", "108.7280", "58.5446", "-10.8088", "-12.4006", "Ver. 1.0, Ref. 1"}, {"h", "c", "o_2", "107.6880", "65.4801", "-10.3498", "5.8866", "Ver. 2.1, Ref. 6"}, {"h", "c", "oz", "107.6880", "70.4801", "-10.3498", "0.0000", "Ver. 2.0, Ref. 5"}, {"h", "c", "s", "107.8522", "51.4949", "-13.5270", "7.0260", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "112.0355", "28.7721", "-13.9523", "0.0000", "Ver. 2.2, Ref. 9"}, {"h", "c", "sio", "111.5360", "30.2481", "-15.5255", "0.0000", "Ver. 1.0, Ref. 4"}, {"s", "c", "s", "111.5000", "27.9677", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"nr", "c+", "nr", "117.4500", "83.9840", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c-", "o-", "115.0600", "59.0960", "-15.1430", "-12.9820", "Ver. 1.0, Ref. 1"}, {"h", "c-", "o-", "112.7500", "61.1530", "-14.0190", "-13.2380", "Ver. 1.0, Ref. 1"}, {"o-", "c-", "o-", "130.0100", "111.2900", "-52.3390", "-28.1070", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c", "121.0100", "29.2704", "-10.1175", "-6.7906", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=1", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=2", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=", "h", "117.2700", "30.0944", "-8.0826", "-8.6781", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "c=", "117.6000", "56.4800", "-16.2283", "-12.6333", "Ver. 3.1, Ref. 12"}, {"c=", "c=", "c_1", "121.1000", "66.1100", "-22.0206", "-15.2133", "Ver. 3.1, Ref. 12"}, {"c=", "c=", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "n_2", "121.0000", "55.9100", "-18.5471", "-12.8549", "Ver. 3.1, Ref. 12"}, {"c=1", "c=", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=2", "c=", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c_1", "c=", "h", "120.3000", "35.7000", "-11.5062", "-8.1591", "Ver. 3.1, Ref. 12"}, {"h", "c=", "h", "115.4900", "29.6363", "-12.4853", "-6.2218", "Ver. 1.0, Ref. 1"}, {"h", "c=", "n_2", "115.7000", "38.2900", "-10.1050", "-8.4480", "Ver. 3.1, Ref. 12"}, {"o-", "c=", "o-", "180.0000", "200.0000", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"s'", "c=", "s'", "180.0000", "70.0000", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "c=1", "c", "121.0100", "29.2704", "-10.1175", "-6.7906", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c=", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c=1", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c=2", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "h", "117.2700", "30.0944", "-8.0826", "-8.6781", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=1", "c=1", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=2", "c=1", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"h", "c=1", "h", "115.4900", "29.6363", "-12.4853", "-6.2218", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "c", "121.0100", "29.2704", "-10.1175", "-6.7906", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "c=", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "c=1", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "c=2", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "h", "117.2700", "30.0944", "-8.0826", "-8.6781", "Ver. 1.0, Ref. 1"}, {"c=", "c=2", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=1", "c=2", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=2", "c=2", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"h", "c=2", "h", "115.4900", "29.6363", "-12.4853", "-6.2218", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "c", "110.5884", "34.6214", "-7.0939", "-7.4032", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "cp", "110.5884", "34.6214", "-7.0939", "-7.4032", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "h", "106.2000", "27.4878", "-1.9350", "14.5545", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "o_1", "119.3000", "65.1016", "-17.9766", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c_0", "cp", "110.5884", "34.6214", "-7.0939", "-7.4032", "Ver. 1.0, Ref. 1"}, {"cp", "c_0", "h", "106.2000", "27.4878", "-1.9350", "14.5545", "Ver. 1.0, Ref. 1"}, {"cp", "c_0", "o_1", "119.3000", "65.1016", "-17.9766", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c_0", "h", "108.6000", "40.0764", "-6.8139", "-8.4349", "Ver. 1.0, Ref. 1"}, {"h", "c_0", "o_1", "116.5000", "59.6420", "-21.9179", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_1", "n_2", "116.9257", "39.4193", "-10.9945", "-8.7733", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "o_1", "123.1451", "55.5431", "-17.2123", "0.1348", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "o_2", "100.3182", "38.8631", "-3.8323", "-7.9802", "Ver. 2.1, Ref. 8"}, {"c=", "c_1", "n_2", "113.6000", "41.1200", "-9.8283", "-8.9479", "Ver. 3.1, Ref. 12"}, {"c=", "c_1", "o_1", "125.9000", "46.0600", "-18.5463", "-11.0998", "Ver. 3.1, Ref. 12"}, {"cp", "c_1", "n_2", "108.4400", "84.8377", "-19.9640", "2.7405", "Ver. 2.1, Ref. 8"}, {"cp", "c_1", "o_1", "125.5320", "72.3167", "-16.0650", "2.0818", "Ver. 2.1, Ref. 6"}, {"cp", "c_1", "o_2", "108.4400", "84.8377", "-19.9640", "2.7405", "Ver. 2.1, Ref. 6"}, {"h", "c_1", "n_2", "110.3935", "52.1647", "-18.4845", "0.0000", "Ver. 2.1, Ref. 8"}, {"h", "c_1", "o_1", "117.8326", "45.9187", "-22.5264", "0.0000", "Ver. 2.1, Ref. 8"}, {"h", "c_1", "o_2", "110.5209", "32.3751", "-0.6174", "-6.5639", "Ver. 2.1, Ref. 8"}, {"n", "c_1", "n", "122.5292", "104.0857", "-36.7315", "-24.2616", "Ver. 1.0, Ref. 1"}, {"n", "c_1", "o_1", "125.5420", "92.5720", "-34.4800", "-11.1871", "Ver. 1.0, Ref. 1"}, {"n_2", "c_1", "o_1", "125.5320", "101.8765", "-41.8094", "0.0000", "Ver. 2.1, Ref. 8"}, {"o", "c_1", "o_1", "118.9855", "98.6813", "-22.2485", "10.3673", "Ver. 1.0, Ref. 1"}, {"o_1", "c_1", "o_2", "120.7970", "95.3446", "-32.2869", "6.3778", "Ver. 2.1, Ref. 6"}, {"n_2", "c_2", "n_2", "114.5292", "104.0857", "-36.7315", "24.2616", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "o_1", "125.5320", "101.8765", "-41.8094", "7.7236", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "o_2", "108.4400", "112.4403", "-59.9730", "38.3067", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "o_2", "120.7970", "95.3446", "-32.2869", "6.3778", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "o_2", "109.4930", "137.9111", "-39.8755", "59.0768", "Ver. 2.1, Ref. 7"}, {"c", "cp", "cp", "120.0500", "44.7148", "-22.7352", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "np", "120.0500", "44.7148", "-22.7352", "0.0000", "Ver. 1.3, Ref. 1"}, {"c_0", "cp", "cp", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.0, Ref. 1"}, {"c_1", "cp", "cp", "116.0640", "71.2598", "-15.8273", "2.0506", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "cp", "118.9000", "61.0226", "-34.9931", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "117.9400", "35.1558", "-12.4682", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "n_2", "120.7640", "73.2738", "-27.4033", "13.3920", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "nh", "112.5900", "78.6418", "-16.3888", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nn", "121.4584", "61.0647", "-21.6172", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "116.5100", "76.6970", "-35.3868", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o", "123.4200", "73.6781", "-21.6787", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o_2", "117.1400", "33.0391", "-14.7807", "3.8573", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "op", "104.1700", "101.3206", "-17.3072", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "oz", "120.1400", "33.0391", "-14.7807", "0.0000", "Ver. 2.0, Ref. 5"}, {"cp", "cp", "p=", "120.0007", "47.8413", "-15.2288", "-10.9066", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "si", "120.0000", "30.4689", "-23.5439", "0.0000", "Ver. 2.2, Ref. 9"}, {"cp", "cp", "sp", "105.5300", "96.2006", "-44.9267", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "109.8000", "43.8408", "-9.5153", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "110.5500", "40.8275", "-13.0318", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "op", "106.1700", "48.0995", "-9.0144", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "sp", "115.9800", "36.7902", "-13.1342", "0.0000", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "nh", "105.0080", "107.0693", "-27.7154", "0.0000", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "np", "108.9100", "98.8519", "-5.7502", "0.0000", "Ver. 1.0, Ref. 1"}, {"nn", "cp", "np", "118.5414", "56.9522", "-7.2655", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "np", "115.3800", "85.4923", "-6.5225", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "op", "104.0100", "104.4800", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "sp", "114.2300", "92.3110", "-35.5956", "0.0000", "Ver. 1.0, Ref. 1"}, {"n=", "cr", "nr", "125.5320", "101.8765", "-41.8094", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=1", "cr", "nr", "125.5320", "101.8765", "-41.8094", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=2", "cr", "nr", "125.5320", "101.8765", "-41.8094", "0.0000", "Ver. 1.1, Ref. 1"}, {"nr", "cr", "nr", "122.5292", "104.0857", "-36.7315", "-24.2616", "Ver. 1.1, Ref. 1"}, {"oo", "cz", "oz", "120.0510", "97.3782", "-26.5619", "0.0000", "Ver. 2.0, Ref. 5"}, {"oz", "cz", "oz", "109.4930", "137.9111", "-39.8755", "59.0768", "Ver. 2.0, Ref. 5"}, {"c", "n", "c", "111.5635", "39.6084", "-8.5459", "-8.5152", "Ver. 1.0, Ref. 1"}, {"c", "n", "c_1", "111.0372", "31.8958", "-6.6942", "-6.8370", "Ver. 1.0, Ref. 1"}, {"c", "n", "h*", "113.8683", "45.9271", "-20.0824", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "p=", "120.0833", "25.0010", "-6.1167", "-5.4570", "Ver. 3.1, Ref. 12"}, {"c_1", "n", "c_1", "121.9556", "76.3105", "-26.3166", "-17.6944", "Ver. 1.0, Ref. 1"}, {"c_1", "n", "h*", "117.9607", "37.4964", "-8.1837", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "n", "h*", "116.9402", "37.5749", "-8.6676", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "n", "p=", "114.0833", "25.0010", "-6.1167", "-5.4570", "Ver. 3.1, Ref. 12"}, {"c", "n+", "c", "109.7700", "44.8220", "-3.9132", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n+", "h+", "110.5100", "49.2170", "-12.2153", "-18.9667", "Ver. 1.0, Ref. 1"}, {"h+", "n+", "h+", "106.1100", "45.3280", "-14.0474", "1.9350", "Ver. 1.0, Ref. 1"}, {"c", "n=", "cr", "117.0900", "31.6888", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"h*", "n=", "p=", "120.0000", "26.0683", "-8.2978", "-5.9429", "Ver. 3.1, Ref. 12"}, {"p=", "n=", "p=", "118.2000", "36.0683", "-7.6881", "-5.8576", "Ver. 3.1, Ref. 12"}, {"c", "n_2", "c_1", "122.7520", "60.4647", "-29.6188", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "n_2", "c_2", "122.7520", "60.4647", "-29.6188", "5.3290", "Ver. 2.1, Ref. 7"}, {"c", "n_2", "hn2", "120.1350", "29.2218", "-14.1448", "7.2380", "Ver. 2.1, Ref. 7"}, {"c=", "n_2", "c_1", "125.1000", "67.5900", "-26.3889", "-16.1536", "Ver. 3.1, Ref. 12"}, {"c=", "n_2", "hn2", "120.1000", "52.1200", "-16.6595", "-11.8919", "Ver. 3.1, Ref. 12"}, {"c_1", "n_2", "cp", "116.6260", "42.4711", "-10.4269", "0.0000", "Ver. 2.1, Ref. 8"}, {"c_1", "n_2", "hn2", "122.9480", "40.4820", "-16.2028", "0.0000", "Ver. 2.1, Ref. 8"}, {"c_2", "n_2", "cp", "120.0700", "47.1131", "-32.5592", "13.1257", "Ver. 2.1, Ref. 7"}, {"c_2", "n_2", "hn2", "122.9480", "40.4820", "-16.2028", "8.3280", "Ver. 2.1, Ref. 7"}, {"cp", "n_2", "hn2", "116.3230", "18.3123", "-7.8325", "5.3290", "Ver. 2.1, Ref. 7"}, {"hn2", "n_2", "hn2", "122.3730", "27.6081", "-10.3291", "9.2800", "Ver. 2.1, Ref. 7"}, {"c", "na", "c", "112.4436", "47.2337", "-10.6612", "-10.2062", "Ver. 1.0, Ref. 1"}, {"c", "na", "h*", "110.9538", "50.8652", "-4.4522", "-10.0298", "Ver. 1.0, Ref. 1"}, {"h*", "na", "h*", "107.0671", "45.2520", "-7.5558", "-9.5120", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "cp", "106.0100", "109.7746", "-9.0636", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "h*", "109.3800", "47.0120", "-17.3556", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "np", "109.3900", "119.1811", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "np", "99.4530", "41.6499", "-5.7422", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "h*", "111.8725", "40.8369", "-15.6673", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "nn", "h*", "107.5130", "42.5182", "-21.7566", "-4.3372", "Ver. 1.0, Ref. 1"}, {"cp", "np", "cp", "111.6800", "84.5159", "-48.5528", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "nh", "108.2200", "119.0383", "-24.2061", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "np", "106.0400", "109.1158", "-42.9319", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "nr", "c+", "117.0900", "31.4400", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "nr", "h*", "117.2000", "37.2620", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c+", "nr", "h*", "119.0700", "45.8110", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "nr", "h*", "122.9480", "40.4820", "-16.2028", "0.0000", "Ver. 1.1, Ref. 1"}, {"h*", "nr", "h*", "110.9100", "31.0910", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "o", "c", "104.5000", "35.7454", "-10.0067", "-6.2729", "Ver. 1.0, Ref. 1"}, {"c", "o", "c_1", "102.9695", "38.9739", "-6.2595", "-8.1710", "Ver. 1.0, Ref. 1"}, {"c", "o", "cp", "102.9695", "38.9739", "-6.2595", "-8.1710", "Ver. 1.4, Ref. 1"}, {"c", "o", "h*", "105.8000", "52.7061", "-12.1090", "-9.8681", "Ver. 1.0, Ref. 1"}, {"c", "o", "p=", "118.2833", "35.0010", "-10.3597", "-7.8699", "Ver. 3.1, Ref. 12"}, {"c_1", "o", "h*", "111.2537", "53.5303", "-11.8454", "-11.5405", "Ver. 1.0, Ref. 1"}, {"cp", "o", "h*", "108.1900", "53.1250", "-8.5016", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "o", "p=", "112.2833", "26.0310", "-5.8280", "-5.6195", "Ver. 3.1, Ref. 12"}, {"h*", "o*", "h*", "103.7000", "49.8400", "-11.6000", "-8.0000", "Ver. 1.2, Ref. 1"}, {"c", "o_2", "c_1", "113.2880", "61.2868", "-28.9786", "7.9929", "Ver. 2.1, Ref. 6"}, {"c", "o_2", "c_2", "113.6200", "57.9274", "-17.1312", "23.5480", "Ver. 2.1, Ref. 7"}, {"c_1", "o_2", "cp", "113.0700", "47.1131", "-32.5592", "13.1257", "Ver. 2.1, Ref. 6"}, {"c_1", "o_2", "ho2", "112.8740", "53.2512", "-14.9979", "2.4640", "Ver. 2.1, Ref. 6"}, {"c_2", "o_2", "cp", "115.0700", "47.1131", "-32.5592", "13.1257", "Ver. 2.1, Ref. 7"}, {"c_2", "o_2", "ho2", "113.1580", "49.6892", "-25.9467", "5.3280", "Ver. 2.1, Ref. 7"}, {"az", "oah", "hoa", "129.6770", "15.5877", "-23.6906", "9.7663", "Ver. 3.0, Ref. 10"}, {"az", "oas", "sz", "167.7890", "21.3772", "-3.8146", "8.1995", "Ver. 3.0, Ref. 10"}, {"az", "ob", "hb", "106.4920", "73.8986", "-23.9590", "8.0039", "Ver. 3.0, Ref. 10"}, {"az", "ob", "sz", "139.4630", "62.0713", "-30.7987", "16.6347", "Ver. 3.0, Ref. 10"}, {"hb", "ob", "sz", "113.0480", "26.6270", "-29.5879", "19.8910", "Ver. 3.0, Ref. 10"}, {"cp", "op", "cp", "103.4300", "112.4497", "-25.7326", "0.0000", "Ver. 1.0, Ref. 1"}, {"hos", "osh", "sz", "123.4920", "14.8634", "-17.2643", "57.7495", "Ver. 3.0, Ref. 10"}, {"h*", "osi", "sio", "122.8880", "23.7764", "-19.8152", "9.6331", "Ver. 1.0, Ref. 4"}, {"sio", "osi", "sio", "157.0260", "9.0740", "-19.5576", "8.5000", "Ver. 1.0, Ref. 4"}, {"sz", "oss", "sz", "176.2650", "18.8146", "37.9749", "42.8222", "Ver. 3.0, Ref. 10"}, {"c", "oz", "cz", "113.6200", "57.9274", "-17.1312", "60.0000", "Ver. 2.0, Ref. 5"}, {"cp", "oz", "cz", "115.0700", "47.1131", "-32.5592", "13.1257", "Ver. 2.0, Ref. 5"}, {"cz", "oz", "ho2", "113.1580", "49.6892", "-25.9467", "0.0000", "Ver. 2.0, Ref. 5"}, {"cl", "p=", "cl", "100.6000", "94.7390", "-9.6046", "-19.4682", "Ver. 3.1, Ref. 12"}, {"cl", "p=", "cp", "109.9153", "75.4619", "-13.4603", "-16.0981", "Ver. 3.1, Ref. 12"}, {"cl", "p=", "f", "98.4500", "104.3358", "-8.2038", "-21.3348", "Ver. 3.1, Ref. 12"}, {"cl", "p=", "h", "100.0557", "59.5624", "-5.7203", "-12.2224", "Ver. 3.1, Ref. 12"}, {"cl", "p=", "n", "98.8500", "90.2538", "-7.6919", "-18.4787", "Ver. 3.1, Ref. 12"}, {"cl", "p=", "n=", "119.5000", "83.6226", "-26.0666", "-18.9852", "Ver. 3.1, Ref. 12"}, {"cl", "p=", "o", "98.0500", "91.2538", "-7.0872", "-18.6603", "Ver. 3.1, Ref. 12"}, {"cp", "p=", "cp", "119.2306", "56.1847", "-17.3159", "-12.7280", "Ver. 3.1, Ref. 12"}, {"cp", "p=", "f", "107.7653", "85.0587", "-12.0595", "-17.9646", "Ver. 3.1, Ref. 12"}, {"cp", "p=", "h", "108.2306", "36.1847", "-6.4878", "-7.6463", "Ver. 3.1, Ref. 12"}, {"cp", "p=", "n", "108.1653", "70.9767", "-11.5476", "-15.1086", "Ver. 3.1, Ref. 12"}, {"cp", "p=", "n=", "119.6000", "63.0624", "-19.7404", "-14.3290", "Ver. 3.1, Ref. 12"}, {"cp", "p=", "o", "107.3653", "71.9767", "-10.9429", "-15.2901", "Ver. 3.1, Ref. 12"}, {"f", "p=", "f", "96.3000", "113.9327", "-6.8030", "-23.2013", "Ver. 3.1, Ref. 12"}, {"f", "p=", "h", "99.9197", "80.7297", "-7.6457", "-16.5604", "Ver. 3.1, Ref. 12"}, {"f", "p=", "n", "96.7000", "99.8506", "-6.2912", "-20.3452", "Ver. 3.1, Ref. 12"}, {"f", "p=", "n=", "120.0245", "99.8462", "-31.8145", "-22.7669", "Ver. 3.1, Ref. 12"}, {"f", "p=", "o", "95.9000", "100.8506", "-5.6865", "-20.5268", "Ver. 3.1, Ref. 12"}, {"h", "p=", "h", "103.4084", "39.6953", "-5.1338", "-8.2266", "Ver. 3.1, Ref. 12"}, {"h", "p=", "n", "103.9784", "68.2569", "-9.2212", "-14.1736", "Ver. 3.1, Ref. 12"}, {"h", "p=", "n=", "119.0329", "45.9784", "-14.0522", "-10.3994", "Ver. 3.1, Ref. 12"}, {"h", "p=", "o", "103.9784", "73.2569", "-9.8966", "-15.2119", "Ver. 3.1, Ref. 12"}, {"n", "p=", "n", "97.1000", "85.7686", "-5.7793", "-17.4892", "Ver. 3.1, Ref. 12"}, {"n", "p=", "n=", "123.2153", "89.9233", "-32.6119", "-21.0956", "Ver. 3.1, Ref. 12"}, {"n", "p=", "o", "96.3000", "86.7686", "-5.1746", "-17.6707", "Ver. 3.1, Ref. 12"}, {"n=", "p=", "n=", "112.8000", "90.5233", "-20.8007", "-19.6019", "Ver. 3.1, Ref. 12"}, {"n=", "p=", "o", "120.2153", "99.9233", "-32.0927", "-22.8209", "Ver. 3.1, Ref. 12"}, {"o", "p=", "o", "95.5000", "87.7686", "-4.5699", "-17.8523", "Ver. 3.1, Ref. 12"}, {"c", "s", "c", "97.5000", "57.6938", "-5.0559", "-11.8206", "Ver. 1.0, Ref. 1"}, {"c", "s", "h", "96.8479", "56.7336", "14.2713", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "100.3000", "57.2900", "-6.5301", "-11.8204", "Ver. 1.0, Ref. 1"}, {"h", "s", "h", "94.3711", "54.9676", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "s", "s", "97.2876", "54.4281", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o-", "s'", "o-", "119.3290", "135.0000", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "si", "c", "113.1855", "36.2069", "-20.3939", "20.0172", "Ver. 2.2, Ref. 9"}, {"c", "si", "h", "112.0977", "36.4832", "-12.8094", "0.0000", "Ver. 2.2, Ref. 9"}, {"c", "si", "si", "113.0000", "19.4692", "-34.3471", "0.0000", "Ver. 2.2, Ref. 9"}, {"cp", "si", "h", "109.5932", "41.9497", "-42.3639", "48.1442", "Ver. 2.2, Ref. 9"}, {"h", "si", "h", "108.6051", "32.5415", "-8.3164", "0.0000", "Ver. 2.2, Ref. 9"}, {"h", "si", "si", "112.0893", "22.5062", "-11.5926", "0.0000", "Ver. 2.2, Ref. 9"}, {"si", "si", "si", "114.2676", "24.9501", "-19.5949", "0.0000", "Ver. 2.2, Ref. 9"}, {"c", "sio", "c", "114.9060", "23.0218", "-31.3993", "24.9814", "Ver. 1.0, Ref. 4"}, {"c", "sio", "h", "110.1810", "38.5645", "-17.8735", "0.0000", "Ver. 1.0, Ref. 4"}, {"c", "sio", "osi", "114.9060", "23.0218", "-31.3993", "24.9814", "Ver. 1.0, Ref. 4"}, {"h", "sio", "h", "106.0360", "48.9872", "-9.1607", "0.0000", "Ver. 1.0, Ref. 4"}, {"h", "sio", "osi", "107.3550", "57.6643", "-10.6506", "4.6274", "Ver. 1.0, Ref. 4"}, {"osi", "sio", "osi", "110.6930", "70.3069", "-6.9375", "0.0000", "Ver. 1.0, Ref. 4"}, {"cp", "sp", "cp", "88.2540", "130.6992", "-18.4789", "0.0000", "Ver. 1.0, Ref. 1"}, {"oas", "sz", "oas", "104.4940", "83.7103", "-97.1839", "16.9574", "Ver. 3.0, Ref. 10"}, {"oas", "sz", "ob", "104.4940", "83.7103", "-97.1839", "16.9574", "Ver. 3.0, Ref. 10"}, {"oas", "sz", "osh", "119.3400", "28.1962", "-64.3068", "4.7117", "Ver. 3.0, Ref. 10"}, {"oas", "sz", "oss", "108.3940", "127.0520", "-16.5736", "0.0000", "Ver. 3.0, Ref. 10"}, {"ob", "sz", "ob", "104.4940", "83.7103", "-97.1839", "16.9574", "Ver. 3.0, Ref. 10"}, {"ob", "sz", "osh", "107.3310", "79.2578", "-46.7537", "108.6900", "Ver. 3.0, Ref. 10"}, {"ob", "sz", "oss", "104.4940", "83.7103", "-97.1839", "16.9574", "Ver. 3.0, Ref. 10"}, {"osh", "sz", "osh", "115.0310", "68.3381", "49.4314", "116.2400", "Ver. 3.0, Ref. 10"}, {"osh", "sz", "oss", "110.6700", "117.5060", "-49.8921", "0.0000", "Ver. 3.0, Ref. 10"}, {"oss", "sz", "oss", "110.6120", "154.1860", "-68.6595", "23.6292", "Ver. 3.0, Ref. 10"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= Kphi, 5= n, 6= Phi0, 7= PCFF info E = Kphi * [ 1 + cos(n*Phi - Phi0) ] With: - Kphi = Rotation barrier - n = Periodicity / multiplicity - Phi0 = Equilibrium angle */ char * PCFF_torsions_auto[216][8]= {{"*", "c'_", "c'_", "*", "0.4500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "c=", "*", "0.4500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "c=_1", "*", "0.4500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c'_", "c=_2", "*", "0.4500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c'_", "c=_3", "*", "0.4500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c'_", "c_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "cp_", "*", "2.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n3n_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n=", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n=_1", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c'_", "n=_2", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c'_", "n=_3", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c'_", "n_", "*", "3.2000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n_", "h_", "1.2000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "np_", "*", "5.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "np_", "h", "1.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "o_", "*", "2.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "op", "*", "2.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "s_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "si_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "sp_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c+_", "n_", "*", "3.4000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "c=", "*", "4.0750", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "c_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "cp_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "n3n_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "n=", "*", "8.1500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "n_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "o_", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "op", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "p_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "s_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "si_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "sp_", "*", "6.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_1", "c=_1", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "c=_2", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "c=_3", "*", "4.0750", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "c_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "cp_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "n3n_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "n=_1", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "n=_2", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "n=_3", "*", "8.1500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "n_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "o_", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "op", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "p_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "s_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "si_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "sp_", "*", "6.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "c=_2", "*", "3.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "c=_3", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "c_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "cp_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "n3n_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "n=_1", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "n=_2", "*", "2.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "n=_3", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "n_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "o_", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "op", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "p_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "s_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "si_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "sp_", "*", "6.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "c=_3", "*", "4.0750", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "c_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "cp_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n3n_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n=_1", "*", "8.1500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n=_2", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n=_3", "*", "8.1500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "o_", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "op", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "p_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "s_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "si_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "sp_", "*", "6.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c_", "c_", "*", "0.1580", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "cp_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "n3n_", "*", "0.0500", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "n=", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "n=_1", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c_", "n=_2", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c_", "n=_3", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c_", "n_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "na_", "*", "0.0500", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "np_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "o_", "*", "0.1300", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "p_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "s_", "*", "0.1367", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "si_", "*", "0.1111", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "cp_", "*", "3.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "n3n_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "n=", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "n=_1", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "cp_", "n=_2", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "cp_", "n=_3", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "cp_", "n_", "*", "2.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "na_", "*", "2.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "np_", "*", "2.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "np_", "h_", "1.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "o_", "*", "1.8000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "o_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "op", "*", "6.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "p_", "*", "0.2500", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "s_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "si_", "*", "0.1667", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "sp_", "*", "6.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "n3n_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "n_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "np_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "o_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "s_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "si_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "n3n_", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "n=", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "n=_1", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n3n_", "n=_2", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n3n_", "n=_3", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n3n_", "n_", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "np_", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "o_", "*", "0.3000", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "s_", "*", "0.3000", "2", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "si_", "*", "0.0500", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "n=", "*", "15.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "n_", "*", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "o_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "s_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "si_", "*", "0.2333", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=_1", "n=_1", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "n=_2", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "n=_3", "*", "15.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "n_", "*", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "o_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "s_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "si_", "*", "0.2333", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "n=_2", "*", "7.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "n=_3", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "n_", "*", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "o_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "s_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "si_", "*", "0.2333", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "n=_3", "*", "15.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "n_", "*", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "o_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "s_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "si_", "*", "0.2333", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n_", "n_", "*", "0.3750", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "np_", "*", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "np_", "h_", "0.3750", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "o_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "s_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "si_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "na_", "*", "0.2500", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "np_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "o_", "*", "0.0975", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "s_", "*", "0.0975", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "si_", "*", "0.0667", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "np_", "*", "11.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "np_", "h_", "5.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "o_", "*", "1.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "o_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "op", "*", "11.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "op", "*", "5.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "s_", "*", "1.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "s_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "si_", "*", "0.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "si_", "*", "0.1250", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "sp_", "*", "10.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "sp_", "*", "5.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "o_", "*", "1.0000", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "p_", "*", "0.3750", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "s_", "*", "1.0000", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "si_", "*", "0.3333", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "s_", "*", "0.3750", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "si_", "*", "0.0000", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "s_", "*", "5.5000", "2", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "si_", "*", "0.2333", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "si_", "*", "0.1667", "3", "0.0000", "Ver. 2.0, Ref. 2"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= V1, 5= Phi0, 6= V2, 7= Phi0, 8= V3, 9= Phi0, 10= PCFF info E = SUM(n=1,3) { V(n) * [ 1 - cos(n*Phi - Phi0(n)) ] } With: - Phi0 = Equilibrium angle */ char * PCFF_torsions[492][11]= {{"oah", "az", "oah", "hoa", "0.2821", "0.0", "-0.0644", "0.0", "0.0752", "0.0", "Ver. 3.0, Ref. 10"}, {"oas", "az", "oah", "hoa", "0.0574", "0.0", "-0.3288", "0.0", "0.1277", "0.0", "Ver. 3.0, Ref. 10"}, {"ob", "az", "oah", "hoa", "-0.7542", "0.0", "-0.7885", "0.0", "-0.3199", "0.0", "Ver. 3.0, Ref. 10"}, {"oah", "az", "oas", "sz", "1.5821", "0.0", "2.8457", "0.0", "0.8378", "0.0", "Ver. 3.0, Ref. 10"}, {"oas", "az", "oas", "sz", "-4.8417", "0.0", "-0.6233", "0.0", "-1.7530", "0.0", "Ver. 3.0, Ref. 10"}, {"ob", "az", "oas", "sz", "-0.0282", "0.0", "5.2299", "0.0", "-1.6555", "0.0", "Ver. 3.0, Ref. 10"}, {"oah", "az", "ob", "hb", "8.3762", "0.0", "0.4366", "0.0", "-0.2767", "0.0", "Ver. 3.0, Ref. 10"}, {"oah", "az", "ob", "sz", "1.1339", "0.0", "-0.4378", "0.0", "0.2658", "0.0", "Ver. 3.0, Ref. 10"}, {"oas", "az", "ob", "hb", "6.7872", "0.0", "1.7367", "0.0", "0.1690", "0.0", "Ver. 3.0, Ref. 10"}, {"oas", "az", "ob", "sz", "-0.5306", "0.0", "-1.2578", "0.0", "-0.1954", "0.0", "Ver. 3.0, Ref. 10"}, {"ob", "az", "ob", "hb", "6.7872", "0.0", "1.7367", "0.0", "0.1690", "0.0", "Ver. 3.0, Ref. 10"}, {"ob", "az", "ob", "hoa", "-0.7542", "0.0", "-0.7885", "0.0", "-0.3199", "0.0", "Ver. 3.0, Ref. 10"}, {"ob", "az", "ob", "sz", "-0.5306", "0.0", "-1.2578", "0.0", "-0.1954", "0.0", "Ver. 3.0, Ref. 10"}, {"br", "c", "c", "br", "0.0000", "0.0", "0.0000", "0.0", "-0.2000", "0.0", "Ver. 2.1, Ref. 8"}, {"br", "c", "c", "c", "0.0000", "0.0", "0.0000", "0.0", "0.1500", "0.0", "Ver. 2.1, Ref. 8"}, {"br", "c", "c", "cl", "0.0000", "0.0", "0.0000", "0.0", "-0.2000", "0.0", "Ver. 2.1, Ref. 8"}, {"br", "c", "c", "f", "0.0000", "0.0", "0.0000", "0.0", "-0.2000", "0.0", "Ver. 2.1, Ref. 8"}, {"br", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.2000", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "c", "0.0000", "0.0", "0.0514", "0.0", "-0.1430", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "c", "0.1223", "0.0", "0.0514", "0.0", "-0.2230", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c-", "-0.4054", "0.0", "0.4825", "0.0", "0.4345", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c=", "0.0883", "0.0", "0.0000", "0.0", "-0.0198", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c=1", "0.0883", "0.0", "0.0000", "0.0", "-0.0198", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c=2", "0.0883", "0.0", "0.0000", "0.0", "-0.0198", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c_0", "0.0929", "0.0", "0.0689", "0.0", "-0.2466", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "c_1", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "cl", "0.0000", "0.0", "0.0000", "0.0", "0.1500", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "f", "0.0000", "0.0", "0.0000", "0.0", "0.1500", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "h", "0.0000", "0.0", "0.0316", "0.0", "-0.1681", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "h", "0.0000", "0.0", "0.0316", "0.0", "-0.1781", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "n+", "-1.9394", "0.0", "0.0086", "0.0", "0.2775", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "n=", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "c", "n=1", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "c", "n=2", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "c", "n_2", "0.0000", "0.0", "0.0000", "0.0", "-0.1441", "0.0", "Ver. 2.1, Ref. 7"}, {"c", "c", "c", "na", "0.1764", "0.0", "0.1766", "0.0", "-0.5206", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "o", "0.7137", "0.0", "0.2660", "0.0", "-0.2545", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "o_2", "0.0000", "0.0", "0.0000", "0.0", "-0.2500", "0.0", "Ver. 2.1, Ref. 6"}, {"c", "c", "c", "oz", "-3.6896", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"c", "c", "c", "s", "-0.7017", "0.0", "0.0201", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "si", "0.0000", "0.0", "0.0514", "0.0", "-0.1430", "0.0", "Ver. 2.2, Ref. 9"}, {"c-", "c", "c", "c_1", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "c", "cp", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "c", "h", "-1.2767", "0.0", "0.5949", "0.0", "0.2379", "0.0", "Ver. 1.0, Ref. 1"}, {"c-", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c=", "c", "c", "c=", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c", "c=1", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c", "c=2", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1166", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c", "c=1", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c", "c=2", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1166", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c", "c=2", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1166", "0.0", "Ver. 1.0, Ref. 1"}, {"c_0", "c", "c", "c_0", "-1.2352", "0.0", "-0.2551", "0.0", "-0.1335", "0.0", "Ver. 2.1, Ref. 8"}, {"c_0", "c", "c", "c_1", "-1.2352", "0.0", "-0.2551", "0.0", "-0.1335", "0.0", "Ver. 1.3, Ref. 1"}, {"c_0", "c", "c", "cp", "0.0929", "0.0", "0.0689", "0.0", "-0.2466", "0.0", "Ver. 2.1, Ref. 8"}, {"c_0", "c", "c", "h", "-0.1569", "0.0", "-0.2030", "0.0", "-0.1599", "0.0", "Ver. 2.1, Ref. 8"}, {"c_0", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c_0", "c", "c", "o", "-0.0858", "0.0", "-0.1320", "0.0", "-0.5909", "0.0", "Ver. 2.1, Ref. 8"}, {"c_1", "c", "c", "c_1", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c_1", "c", "c", "cp", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c_1", "c", "c", "h", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 2.1, Ref. 8"}, {"c_1", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c_1", "c", "c", "o", "-0.0858", "0.0", "-0.1320", "0.0", "-0.5909", "0.0", "Ver. 1.3, Ref. 1"}, {"c_1", "c", "c", "s", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"cl", "c", "c", "cl", "0.0000", "0.0", "0.0000", "0.0", "-0.1000", "0.0", "Ver. 2.1, Ref. 8"}, {"cl", "c", "c", "f", "0.0000", "0.0", "0.0000", "0.0", "-0.1000", "0.0", "Ver. 2.1, Ref. 8"}, {"cl", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1000", "0.0", "Ver. 2.1, Ref. 8"}, {"cp", "c", "c", "h", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.3, Ref. 1"}, {"cp", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"cp", "c", "c", "si", "0.0000", "0.0", "0.0514", "0.0", "-0.1430", "0.0", "Ver. 2.2, Ref. 9"}, {"f", "c", "c", "f", "0.0000", "0.0", "0.0000", "0.0", "-0.1000", "0.0", "Ver. 2.1, Ref. 8"}, {"f", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1000", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c", "h", "-0.1432", "0.0", "0.0617", "0.0", "-0.1083", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c", "h", "-0.2432", "0.0", "0.0617", "0.0", "-0.1383", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "n", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "n+", "-0.2179", "0.0", "-0.4127", "0.0", "-0.1252", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "n=", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "c", "n=1", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "c", "n=2", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "c", "n_2", "0.0000", "0.0", "0.0000", "0.0", "-0.1441", "0.0", "Ver. 2.1, Ref. 7"}, {"h", "c", "c", "na", "-0.2428", "0.0", "0.4065", "0.0", "-0.3079", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "nr", "-0.5336", "0.0", "-0.0444", "0.0", "-0.1432", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "o", "-0.1435", "0.0", "0.2530", "0.0", "-0.0905", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "o_2", "0.0000", "0.0", "0.0000", "0.0", "-0.2500", "0.0", "Ver. 2.1, Ref. 6"}, {"h", "c", "c", "oz", "-3.6896", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"h", "c", "c", "s", "-0.2078", "0.0", "-0.1060", "0.0", "-0.3595", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "si", "0.0000", "0.0", "0.0514", "0.0", "-0.1430", "0.0", "Ver. 2.2, Ref. 9"}, {"n", "c", "c", "o", "-0.1820", "0.0", "-0.1084", "0.0", "-0.7047", "0.0", "Ver. 1.3, Ref. 1"}, {"n", "c", "c", "s", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"n_2", "c", "c", "n_2", "0.0000", "0.0", "0.0060", "0.0", "-0.1441", "0.0", "Ver. 2.1, Ref. 7"}, {"n_2", "c", "c", "o_2", "0.0000", "0.0", "0.0000", "0.0", "-0.1441", "0.0", "Ver. 2.1, Ref. 7"}, {"na", "c", "c", "na", "0.3805", "0.0", "0.3547", "0.0", "-0.1102", "0.0", "Ver. 1.0, Ref. 1"}, {"o", "c", "c", "o", "-0.1820", "0.0", "-0.1084", "0.0", "-0.7047", "0.0", "Ver. 1.0, Ref. 1"}, {"o_2", "c", "c", "o_2", "-0.6070", "0.0", "0.0060", "0.0", "-0.1441", "0.0", "Ver. 2.1, Ref. 6"}, {"oz", "c", "c", "oz", "-0.6070", "0.0", "0.0060", "0.0", "-0.1441", "0.0", "Ver. 2.0, Ref. 5"}, {"s", "c", "c", "s", "-1.2002", "0.0", "-1.2999", "0.0", "-0.1626", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c-", "o-", "1.7311", "0.0", "1.8510", "0.0", "-0.1933", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c-", "o-", "-2.5999", "0.0", "1.0488", "0.0", "-0.2089", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c", "c-", "o-", "0.0899", "0.0", "0.1220", "0.0", "0.0905", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "c", "c=", "c", "-0.0871", "0.0", "0.0619", "0.0", "-0.7371", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=", "c=", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=", "c=1", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=", "c=2", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=", "h", "-0.2433", "0.0", "0.0000", "0.0", "-0.3281", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=", "c", "-0.1143", "0.0", "0.0000", "0.0", "-0.1682", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=", "c=", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=", "c=1", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=", "c=2", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=", "h", "-0.1143", "0.0", "0.0000", "0.0", "-0.1349", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "c", "-0.0871", "0.0", "0.0619", "0.0", "-0.7371", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "c=", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "c=1", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "c=2", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "h", "-0.2433", "0.0", "0.0000", "0.0", "-0.3281", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=1", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=1", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=1", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=1", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=1", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=1", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=1", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=1", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=1", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=1", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=1", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=1", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "c", "-0.1143", "0.0", "0.0000", "0.0", "-0.1682", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "c=", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "c=1", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "c=2", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "h", "-0.1143", "0.0", "0.0000", "0.0", "-0.1349", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=2", "c", "-0.0871", "0.0", "0.0619", "0.0", "-0.7371", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=2", "c=", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=2", "c=1", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=2", "c=2", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=2", "h", "-0.2433", "0.0", "0.0000", "0.0", "-0.3281", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=2", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=2", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=2", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=2", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=2", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=2", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=2", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=2", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=2", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=2", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=2", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=2", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=2", "c", "-0.1143", "0.0", "0.0000", "0.0", "-0.1682", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=2", "c=", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=2", "c=1", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=2", "c=2", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=2", "h", "-0.1143", "0.0", "0.0000", "0.0", "-0.1349", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c_0", "c", "0.2904", "0.0", "1.0177", "0.0", "-0.1085", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c_0", "cp", "0.2904", "0.0", "1.0177", "0.0", "-0.1085", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c_0", "h", "0.3055", "0.0", "0.6703", "0.0", "-0.2816", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c_0", "o_1", "0.6989", "0.0", "1.2089", "0.0", "-0.0445", "0.0", "Ver. 2.1, Ref. 8"}, {"cp", "c", "c_0", "o_1", "0.6989", "0.0", "1.2089", "0.0", "-0.0445", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_0", "c", "-0.4768", "0.0", "0.6051", "0.0", "-0.1205", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_0", "cp", "-0.4768", "0.0", "0.6051", "0.0", "-0.1205", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_0", "h", "-0.5265", "0.0", "0.3627", "0.0", "-0.1792", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_0", "o_1", "-0.9975", "0.0", "0.9060", "0.0", "-0.0195", "0.0", "Ver. 2.1, Ref. 8"}, {"o", "c", "c_0", "h", "-0.0390", "0.0", "1.4052", "0.0", "0.0757", "0.0", "Ver. 1.0, Ref. 1"}, {"o", "c", "c_0", "o_1", "0.6444", "0.0", "0.7897", "0.0", "1.0604", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c_1", "n_2", "0.1693", "0.0", "-0.0090", "0.0", "-0.0687", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c_1", "o_1", "0.0442", "0.0", "0.0292", "0.0", "0.0562", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c_1", "o_2", "1.8341", "0.0", "2.0603", "0.0", "-0.0195", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_1", "n_2", "0.1693", "0.0", "-0.0090", "0.0", "-0.0687", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_1", "o_1", "-0.1804", "0.0", "0.0012", "0.0", "0.0371", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_1", "o_2", "-0.6359", "0.0", "1.4807", "0.0", "-0.0438", "0.0", "Ver. 2.1, Ref. 8"}, {"n", "c", "c_1", "n", "-0.0892", "0.0", "0.1259", "0.0", "-0.0884", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c", "c_1", "o_1", "0.0899", "0.0", "0.1220", "0.0", "0.0905", "0.0", "Ver. 1.0, Ref. 1"}, {"n+", "c", "c_1", "n", "-0.0892", "0.0", "0.1259", "0.0", "-0.0884", "0.0", "Ver. 1.3, Ref. 1"}, {"n+", "c", "c_1", "o_1", "0.0899", "0.0", "0.1220", "0.0", "0.0905", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "c", "cp", "cp", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "c", "cp", "np", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.3, Ref. 1"}, {"cp", "c", "cp", "cp", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.5, Ref. 1"}, {"h", "c", "cp", "cp", "-0.2801", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 2.0, Ref. 1"}, {"h", "c", "cp", "cp", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "cp", "np", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "c", "n", "c", "-0.0017", "0.0", "-0.0072", "0.0", "0.0008", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "c_1", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "h*", "-0.0483", "0.0", "-0.0077", "0.0", "-0.0014", "0.0", "Ver. 1.0, Ref. 1"}, {"c-", "c", "n", "c_1", "-0.0688", "0.0", "0.0762", "0.0", "-0.0618", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "n", "h*", "0.0546", "0.0", "0.0756", "0.0", "0.0728", "0.0", "Ver. 1.3, Ref. 1"}, {"c_1", "c", "n", "c", "-0.0036", "0.0", "0.0049", "0.0", "0.0039", "0.0", "Ver. 1.0, Ref. 1"}, {"c_1", "c", "n", "c_1", "-0.0688", "0.0", "0.0762", "0.0", "-0.0618", "0.0", "Ver. 1.0, Ref. 1"}, {"c_1", "c", "n", "h*", "0.0546", "0.0", "0.0756", "0.0", "0.0728", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "c", "0.0406", "0.0", "0.0354", "0.0", "-0.1649", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "c_1", "0.0219", "0.0", "-0.0260", "0.0", "0.0714", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "h*", "-0.0148", "0.0", "-0.0791", "0.0", "-0.0148", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n+", "c", "0.7077", "0.0", "-0.3744", "0.0", "-0.1914", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n+", "h+", "-0.8792", "0.0", "-0.5978", "0.0", "-0.3242", "0.0", "Ver. 1.0, Ref. 1"}, {"c_0", "c", "n+", "h+", "-0.8792", "0.0", "-0.5978", "0.0", "-0.3242", "0.0", "Ver. 1.3, Ref. 1"}, {"c_1", "c", "n+", "h+", "-0.8792", "0.0", "-0.5978", "0.0", "-0.3242", "0.0", "Ver. 1.3, Ref. 1"}, {"h", "c", "n+", "c", "0.3624", "0.0", "0.1012", "0.0", "-0.2486", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n+", "h+", "-0.2458", "0.0", "-0.2789", "0.0", "-0.0294", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n=", "cr", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "n=", "cr", "0.5865", "0.0", "-0.5482", "0.0", "-0.2767", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "n=1", "cr", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "n=1", "cr", "0.5865", "0.0", "-0.5482", "0.0", "-0.2767", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "n=2", "cr", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "n=2", "cr", "0.5865", "0.0", "-0.5482", "0.0", "-0.2767", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "n_2", "c_1", "0.0000", "0.0", "0.0000", "0.0", "-0.2263", "0.0", "Ver. 2.1, Ref. 7"}, {"c", "c", "n_2", "c_2", "0.0000", "0.0", "0.0000", "0.0", "-0.2263", "0.0", "Ver. 2.1, Ref. 7"}, {"c", "c", "n_2", "hn2", "0.0000", "0.0", "0.0000", "0.0", "-0.3263", "0.0", "Ver. 2.1, Ref. 7"}, {"h", "c", "n_2", "c_1", "0.0000", "0.0", "0.0000", "0.0", "-0.2263", "0.0", "Ver. 2.1, Ref. 7"}, {"h", "c", "n_2", "c_2", "0.0000", "0.0", "0.0000", "0.0", "-0.2263", "0.0", "Ver. 2.1, Ref. 7"}, {"h", "c", "n_2", "hn2", "0.0000", "0.0", "0.0000", "0.0", "-0.3263", "0.0", "Ver. 2.1, Ref. 7"}, {"c", "c", "na", "c", "-0.1406", "0.0", "0.4168", "0.0", "0.0150", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "na", "h*", "-1.1506", "0.0", "-0.6344", "0.0", "-0.1845", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "na", "c", "0.1904", "0.0", "-0.1342", "0.0", "-0.2460", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "na", "h*", "-0.5187", "0.0", "-0.4837", "0.0", "-0.1692", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "nr", "c+", "-5.4418", "0.0", "-0.0437", "0.0", "0.8035", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "nr", "h*", "-5.0724", "0.0", "-0.4980", "0.0", "-0.4381", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "nr", "c+", "2.8272", "0.0", "-0.3930", "0.0", "-0.3847", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "nr", "h*", "1.2659", "0.0", "-0.7739", "0.0", "0.0378", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "c", "-0.5203", "0.0", "-0.3028", "0.0", "-0.3450", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "c_0", "0.1302", "0.0", "-0.3250", "0.0", "0.1134", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "h*", "-0.6732", "0.0", "-0.4778", "0.0", "-0.1670", "0.0", "Ver. 1.0, Ref. 1"}, {"c_0", "c", "o", "c_0", "-1.8534", "0.0", "0.1981", "0.0", "0.2423", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "o", "c", "0.5302", "0.0", "0.0000", "0.0", "-0.3966", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "o", "c_0", "0.9513", "0.0", "0.1155", "0.0", "0.0720", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "o", "cp", "0.9513", "0.0", "0.1155", "0.0", "0.0720", "0.0", "Ver. 1.4, Ref. 1"}, {"h", "c", "o", "h*", "0.1863", "0.0", "-0.4338", "0.0", "-0.2121", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "o_2", "c_1", "0.0000", "0.0", "0.0000", "0.0", "-0.1932", "0.0", "Ver. 2.1, Ref. 6"}, {"c", "c", "o_2", "c_2", "0.0000", "0.0", "0.0000", "0.0", "-0.0882", "0.0", "Ver. 2.1, Ref. 7"}, {"c_1", "c", "o_2", "c_1", "0.0000", "0.0", "0.0000", "0.0", "-0.1932", "0.0", "Ver. 2.1, Ref. 6"}, {"h", "c", "o_2", "c_1", "0.0000", "0.0", "0.0000", "0.0", "-0.1932", "0.0", "Ver. 2.1, Ref. 6"}, {"h", "c", "o_2", "c_2", "0.0000", "0.0", "0.0000", "0.0", "-0.0882", "0.0", "Ver. 2.1, Ref. 7"}, {"c", "c", "oz", "cz", "0.0000", "0.0", "0.0000", "0.0", "-0.1932", "0.0", "Ver. 2.0, Ref. 5"}, {"h", "c", "oz", "cz", "0.0000", "0.0", "0.0000", "0.0", "-0.1932", "0.0", "Ver. 2.0, Ref. 5"}, {"oz", "c", "oz", "cz", "0.0000", "0.0", "0.0000", "0.0", "-0.1932", "0.0", "Ver. 2.0, Ref. 5"}, {"c", "c", "s", "c", "-0.5073", "0.0", "0.0155", "0.0", "-0.0671", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "h", "-0.4871", "0.0", "-0.4514", "0.0", "-0.1428", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "s", "-0.6269", "0.0", "-0.9598", "0.0", "-0.4957", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "c", "-0.3338", "0.0", "-0.0684", "0.0", "-0.1706", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "h", "-0.5374", "0.0", "-0.5091", "0.0", "-0.1361", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "s", "-0.0610", "0.0", "-0.6387", "0.0", "-0.3072", "0.0", "Ver. 1.0, Ref. 1"}, {"s", "c", "s", "c", "-1.9835", "0.0", "-1.9213", "0.0", "-0.3816", "0.0", "Ver. 1.0, Ref. 1"}, {"s", "c", "s", "h", "-0.0591", "0.0", "-0.6235", "0.0", "-0.0788", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "si", "c", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"c", "c", "si", "cp", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"c", "c", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"c", "c", "si", "si", "-0.3500", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "c", "si", "c", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "c", "si", "cp", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "c", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "c", "si", "si", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "c", "si", "c", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "c", "si", "cp", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "c", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "c", "si", "si", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "c", "sio", "c", "-1.3513", "0.0", "0.0000", "0.0", "-0.0580", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "sio", "h", "-0.9301", "0.0", "0.0000", "0.0", "-0.1259", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "sio", "osi", "-1.3513", "0.0", "0.0000", "0.0", "-0.0580", "0.0", "Ver. 1.0, Ref. 4"}, {"nr", "c+", "nr", "c", "-0.6197", "0.0", "3.0539", "0.0", "0.1861", "0.0", "Ver. 1.0, Ref. 1"}, {"nr", "c+", "nr", "h*", "-7.2378", "0.0", "1.9150", "0.0", "0.1436", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=", "c", "0.0860", "0.0", "5.1995", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c=", "h", "0.0000", "0.0", "4.8974", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=1", "c", "0.0860", "0.0", "5.1995", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=1", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c=1", "c", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c=1", "h", "0.0000", "0.0", "4.8974", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=2", "c", "0.0860", "0.0", "5.1995", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=2", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c=2", "c", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c=2", "h", "0.0000", "0.0", "4.8974", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"o_1", "c_0", "cp", "cp", "0.0000", "0.0", "0.9063", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"o_1", "c_0", "o", "c", "0.8905", "0.0", "3.2644", "0.0", "0.2646", "0.0", "Ver. 1.0, Ref. 1"}, {"n_2", "c_1", "cp", "cp", "0.0000", "0.0", "0.9063", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"o_1", "c_1", "cp", "cp", "0.0000", "0.0", "0.9063", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"o_2", "c_1", "cp", "cp", "0.0000", "0.0", "0.9063", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"h", "c_1", "n", "c_1", "0.1907", "0.0", "1.1212", "0.0", "0.0426", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c_1", "n", "h*", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 1.0, Ref. 1"}, {"o_1", "c_1", "n", "c", "0.8297", "0.0", "3.7234", "0.0", "-0.0495", "0.0", "Ver. 1.0, Ref. 1"}, {"o_1", "c_1", "n", "c_1", "-0.4066", "0.0", "1.2513", "0.0", "-0.7507", "0.0", "Ver. 1.0, Ref. 1"}, {"o_1", "c_1", "n", "h*", "-1.6938", "0.0", "2.7386", "0.0", "-0.3360", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c_1", "n_2", "c", "-0.7532", "0.0", "2.7392", "0.0", "0.0907", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "n_2", "hn2", "-0.8236", "0.0", "2.1467", "0.0", "-0.2142", "0.0", "Ver. 2.1, Ref. 8"}, {"cp", "c_1", "n_2", "c", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"cp", "c_1", "n_2", "cp", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"cp", "c_1", "n_2", "hn2", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c_1", "n_2", "c", "0.3345", "0.0", "2.5838", "0.0", "-0.4006", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c_1", "n_2", "hn2", "-0.0078", "0.0", "2.6186", "0.0", "-0.0900", "0.0", "Ver. 2.1, Ref. 8"}, {"o_1", "c_1", "n_2", "c", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_1", "n_2", "cp", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_1", "n_2", "hn2", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_1", "o", "h*", "-2.7332", "0.0", "2.9646", "0.0", "-0.0155", "0.0", "Ver. 1.0, Ref. 1"}, {"*", "c_1", "o_2", "*", "-2.5594", "0.0", "2.2013", "0.0", "0.0325", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "o_2", "c", "-2.5594", "0.0", "2.2013", "0.0", "0.0325", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "o_2", "ho2", "-2.9126", "0.0", "1.0199", "0.0", "-0.2077", "0.0", "Ver. 2.1, Ref. 8"}, {"c=1", "c_1", "o_2", "ho2", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"cp", "c_1", "o_2", "c", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"cp", "c_1", "o_2", "cp", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"cp", "c_1", "o_2", "ho2", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"h", "c_1", "o_2", "c", "-0.9993", "0.0", "0.2131", "0.0", "-0.4274", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c_1", "o_2", "ho2", "-1.4540", "0.0", "0.8387", "0.0", "-0.4912", "0.0", "Ver. 2.1, Ref. 8"}, {"o_1", "c_1", "o_2", "c", "0.0000", "0.0", "2.2089", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"o_1", "c_1", "o_2", "cp", "0.0000", "0.0", "2.2089", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"o_1", "c_1", "o_2", "ho2", "0.0000", "0.0", "2.2089", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"n_2", "c_2", "n_2", "c", "-1.0632", "0.0", "1.5632", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "n_2", "cp", "-1.0632", "0.0", "1.5632", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "n_2", "hn2", "-1.0632", "0.0", "1.5632", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "n_2", "c", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "n_2", "cp", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "n_2", "hn2", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "n_2", "c", "-1.7177", "0.0", "1.8863", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "n_2", "cp", "-1.7177", "0.0", "1.8863", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "n_2", "hn2", "-1.7177", "0.0", "1.8863", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "o_2", "c", "-2.9522", "0.0", "2.4047", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "o_2", "cp", "-2.9522", "0.0", "2.4047", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "o_2", "ho2", "-2.9522", "0.0", "2.4047", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "o_2", "c", "0.0000", "0.0", "1.8099", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "o_2", "cp", "0.0000", "0.0", "1.8099", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "o_2", "ho2", "0.0000", "0.0", "1.8099", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "o_2", "c", "-2.9522", "0.0", "2.4047", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "o_2", "cp", "-2.9522", "0.0", "2.4047", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "o_2", "ho2", "-2.9522", "0.0", "2.4047", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"c", "cp", "cp", "cp", "0.0000", "0.0", "4.4072", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "h", "0.0000", "0.0", "1.5590", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "nh", "0.0000", "0.0", "3.0202", "0.0", "0.0000", "0.0", "Ver. 1.3, Ref. 1"}, {"c_0", "cp", "cp", "cp", "0.0000", "0.0", "4.6282", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"c_0", "cp", "cp", "h", "0.0000", "0.0", "2.1670", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"c_1", "cp", "cp", "cp", "0.0000", "0.0", "4.6282", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"c_1", "cp", "cp", "h", "0.0000", "0.0", "2.1670", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "cp", "cp", "8.3667", "0.0", "1.1932", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "h", "0.0000", "0.0", "3.9661", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "n_2", "0.0000", "0.0", "3.4040", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "cp", "nh", "11.5270", "0.0", "2.7183", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "nn", "0.0000", "0.0", "5.3826", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "np", "0.0000", "0.0", "4.7675", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o", "0.0000", "0.0", "4.8498", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o_2", "0.0000", "0.0", "2.5372", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "cp", "op", "0.0000", "0.0", "10.6923", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "oz", "0.0000", "0.0", "4.6282", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"cp", "cp", "cp", "p=", "0.0000", "0.0", "5.4768", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "cp", "si", "0.0000", "0.0", "4.3270", "0.0", "0.0000", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "cp", "cp", "sp", "0.0000", "0.0", "9.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "h", "0.0000", "0.0", "1.8769", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "n_2", "0.0000", "0.0", "3.4040", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"h", "cp", "cp", "nh", "0.0000", "0.0", "3.0202", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "nn", "0.0000", "0.0", "1.3331", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "np", "0.0000", "0.0", "3.6689", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "o", "0.0000", "0.0", "1.7234", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "o_2", "0.0000", "0.0", "2.1670", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"h", "cp", "cp", "op", "0.0000", "0.0", "3.3516", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "oz", "0.0000", "0.0", "2.1670", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"h", "cp", "cp", "p=", "0.0000", "0.0", "2.2698", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h", "cp", "cp", "si", "0.0000", "0.0", "1.5093", "0.0", "0.0000", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "cp", "cp", "sp", "0.0000", "0.0", "3.7957", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "cp", "nh", "0.0000", "0.0", "12.7748", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "cp", "np", "0.0000", "0.0", "4.8266", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "cp", "np", "0.0000", "0.0", "8.8338", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "cp", "op", "0.0000", "0.0", "9.7415", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "cp", "sp", "0.0000", "0.0", "8.5974", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "n_2", "c_1", "0.0000", "0.0", "0.8107", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "n_2", "c_2", "0.0000", "0.0", "0.8107", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "n_2", "hn2", "0.0000", "0.0", "0.6107", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "nh", "cp", "10.8765", "0.0", "6.3475", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nh", "h*", "0.0000", "0.0", "1.8202", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nh", "np", "0.0000", "0.0", "10.7803", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "cp", "0.0000", "0.0", "3.7848", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "h*", "0.0000", "0.0", "1.3342", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "np", "0.0000", "0.0", "4.1751", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "nh", "cp", "0.0000", "0.0", "23.0443", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "nh", "h*", "0.0000", "0.0", "7.0570", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "nh", "cp", "0.0000", "0.0", "20.0173", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "nh", "h*", "0.0000", "0.0", "3.5096", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nn", "h*", "0.0000", "0.0", "1.2190", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "nn", "h*", "0.0000", "0.0", "2.0184", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "cp", "np", "cp", "0.0000", "0.0", "5.6183", "0.0", "0.0000", "0.0", "Ver. 1.3, Ref. 1"}, {"cp", "cp", "np", "cp", "0.0000", "0.0", "6.8517", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "nh", "0.0000", "0.0", "5.1942", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "np", "0.0000", "0.0", "12.0680", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "cp", "0.0000", "0.0", "5.6183", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "nh", "0.0000", "0.0", "5.2455", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "np", "0.0000", "0.0", "6.3346", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "np", "cp", "0.0000", "0.0", "9.7830", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nn", "cp", "np", "cp", "0.0000", "0.0", "6.7119", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "np", "cp", "0.0000", "0.0", "7.4664", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"op", "cp", "np", "cp", "0.0000", "0.0", "15.3660", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"op", "cp", "np", "np", "0.0000", "0.0", "11.8577", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"sp", "cp", "np", "cp", "0.0000", "0.0", "13.6743", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"sp", "cp", "np", "np", "0.0000", "0.0", "11.5762", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o", "c", "0.0000", "0.0", "1.5000", "0.0", "0.0000", "0.0", "Ver. 1.4, Ref. 1"}, {"cp", "cp", "o", "h*", "-0.6900", "0.0", "0.5097", "0.0", "0.0095", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o_2", "c_1", "0.0000", "0.0", "0.4561", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "o_2", "c_2", "0.0000", "0.0", "0.4961", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "op", "cp", "0.0000", "0.0", "27.5402", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "op", "cp", "0.0000", "0.0", "2.6043", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "op", "cp", "0.0000", "0.0", "30.4292", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "oz", "cz", "-2.4045", "0.0", "0.4561", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"h", "cp", "oz", "cz", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"*", "cp", "p=", "*", "-0.2717", "0.0", "1.1901", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "p=", "h", "-0.2717", "0.0", "1.1901", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "p=", "n=", "-0.2717", "0.0", "1.1901", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "si", "c", "0.0000", "0.0", "0.0000", "0.0", "-0.0231", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "cp", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0231", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "cp", "si", "si", "0.0000", "0.0", "-0.1000", "0.0", "-0.0231", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "cp", "sp", "cp", "0.0000", "0.0", "31.5576", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "sp", "cp", "0.0000", "0.0", "4.2145", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "sp", "cp", "0.0000", "0.0", "21.1715", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nr", "cr", "n=", "c", "-7.3589", "0.0", "0.4643", "0.0", "-0.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"nr", "cr", "n=1", "c", "-7.3589", "0.0", "0.4643", "0.0", "-0.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"nr", "cr", "n=2", "c", "-7.3589", "0.0", "0.4643", "0.0", "-0.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"n=", "cr", "nr", "h*", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"n=1", "cr", "nr", "h*", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"n=2", "cr", "nr", "h*", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"nr", "cr", "nr", "h*", "-7.2378", "0.0", "1.9150", "0.0", "0.1436", "0.0", "Ver. 1.1, Ref. 1"}, {"oo", "cz", "oz", "c", "-4.2342", "0.0", "1.8099", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"oo", "cz", "oz", "cp", "-3.4253", "0.0", "2.3292", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"oo", "cz", "oz", "ho2", "-3.0147", "0.0", "1.6536", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"oz", "cz", "oz", "c", "-4.0149", "0.0", "1.8643", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"oz", "cz", "oz", "cp", "-3.2773", "0.0", "1.3788", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"oz", "cz", "oz", "ho2", "-3.0513", "0.0", "1.4279", "0.0", "-0.1216", "0.0", "Ver. 2.0, Ref. 5"}, {"*", "n", "p=", "*", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n", "p=", "h", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n", "p=", "n=", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n", "p=", "o", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"*", "n=", "p=", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n=", "p=", "cl", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n=", "p=", "cp", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n=", "p=", "f", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n=", "p=", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n=", "p=", "o", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 3.1, Ref. 12"}, {"p=", "n=", "p=", "h", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"p=", "n=", "p=", "n=", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"cp", "nh", "np", "cp", "0.0000", "0.0", "14.4766", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "np", "cp", "0.0000", "0.0", "7.4549", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "np", "np", "cp", "0.0000", "0.0", "13.7232", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"*", "o", "p=", "*", "5.7083", "0.0", "2.1176", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "o", "p=", "h", "5.7083", "0.0", "2.1176", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "o", "p=", "n=", "5.7083", "0.0", "2.1176", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "o", "p=", "o", "5.7083", "0.0", "2.1176", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"az", "oas", "sz", "oas", "-4.8417", "0.0", "-0.6233", "0.0", "-1.7530", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "oas", "sz", "ob", "-2.3957", "0.0", "0.4026", "0.0", "0.0077", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "oas", "sz", "osh", "1.0239", "0.0", "0.2734", "0.0", "0.0173", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "oas", "sz", "oss", "0.2875", "0.0", "1.0574", "0.0", "-0.0222", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "ob", "sz", "oas", "-23.4547", "0.0", "5.3019", "0.0", "1.7206", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "ob", "sz", "ob", "-2.3957", "0.0", "0.4026", "0.0", "0.0077", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "ob", "sz", "osh", "-20.7064", "0.0", "4.3987", "0.0", "-0.5242", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "ob", "sz", "oss", "-23.4547", "0.0", "5.3019", "0.0", "1.7206", "0.0", "Ver. 3.0, Ref. 10"}, {"hb", "ob", "sz", "oas", "-15.3826", "0.0", "-4.7952", "0.0", "0.6596", "0.0", "Ver. 3.0, Ref. 10"}, {"hb", "ob", "sz", "ob", "-12.5965", "0.0", "-5.0843", "0.0", "0.2414", "0.0", "Ver. 3.0, Ref. 10"}, {"hb", "ob", "sz", "osh", "-12.5965", "0.0", "-5.0843", "0.0", "0.2414", "0.0", "Ver. 3.0, Ref. 10"}, {"hb", "ob", "sz", "oss", "-15.3826", "0.0", "-4.7952", "0.0", "0.6596", "0.0", "Ver. 3.0, Ref. 10"}, {"hos", "ob", "sz", "ob", "-0.5851", "0.0", "-1.4467", "0.0", "-0.3115", "0.0", "Ver. 3.0, Ref. 10"}, {"sz", "ob", "sz", "ob", "-2.3957", "0.0", "0.4026", "0.0", "0.0077", "0.0", "Ver. 3.0, Ref. 10"}, {"hos", "osh", "sz", "oas", "1.1145", "0.0", "-0.4708", "0.0", "-0.3937", "0.0", "Ver. 3.0, Ref. 10"}, {"hos", "osh", "sz", "ob", "-0.5851", "0.0", "-1.4467", "0.0", "-0.3115", "0.0", "Ver. 3.0, Ref. 10"}, {"hos", "osh", "sz", "osh", "0.4627", "0.0", "0.1147", "0.0", "0.0390", "0.0", "Ver. 3.0, Ref. 10"}, {"hos", "osh", "sz", "oss", "2.3777", "0.0", "-0.0069", "0.0", "-0.5244", "0.0", "Ver. 3.0, Ref. 10"}, {"h*", "osi", "sio", "c", "-0.6741", "0.0", "0.3661", "0.0", "-0.1008", "0.0", "Ver. 1.0, Ref. 4"}, {"h*", "osi", "sio", "h", "-0.7720", "0.0", "0.9364", "0.0", "-0.1169", "0.0", "Ver. 1.0, Ref. 4"}, {"h*", "osi", "sio", "osi", "-0.6741", "0.0", "0.3661", "0.0", "-0.1008", "0.0", "Ver. 1.0, Ref. 4"}, {"sio", "osi", "sio", "c", "0.0000", "0.0", "0.0000", "0.0", "-0.1300", "0.0", "Ver. 1.0, Ref. 4"}, {"sio", "osi", "sio", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1300", "0.0", "Ver. 1.0, Ref. 4"}, {"sio", "osi", "sio", "osi", "0.3000", "0.0", "0.3658", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"sz", "oss", "sz", "oas", "-0.3747", "0.0", "0.3232", "0.0", "-0.0194", "0.0", "Ver. 3.0, Ref. 10"}, {"sz", "oss", "sz", "ob", "-2.3957", "0.0", "0.4026", "0.0", "0.0077", "0.0", "Ver. 3.0, Ref. 10"}, {"sz", "oss", "sz", "osh", "-0.2403", "0.0", "0.1673", "0.0", "0.0002", "0.0", "Ver. 3.0, Ref. 10"}, {"sz", "oss", "sz", "oss", "-0.3417", "0.0", "0.0961", "0.0", "0.1683", "0.0", "Ver. 3.0, Ref. 10"}, {"c", "s", "s", "c", "-1.8578", "0.0", "-3.8321", "0.0", "-0.4469", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "h", "-0.4956", "0.0", "-3.4601", "0.0", "-0.2482", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "s", "s", "h", "-0.0528", "0.0", "-3.5171", "0.0", "-0.2394", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "si", "si", "c", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"c", "si", "si", "cp", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"c", "si", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"c", "si", "si", "si", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "si", "si", "cp", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "si", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "si", "si", "si", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "si", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "si", "si", "si", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"si", "si", "si", "si", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}}; /* Inversions 0, 1, 2, 3 = Keys, 4= K, 5= Chi0, 6= PCFF info E = K * (Chi - Chi0)^2 */ char * PCFF_inversions[83][7]= {{"nr", "c+", "nr", "nr", "54.4060", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c-", "o-", "o-", "44.1500", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c-", "o-", "o-", "45.7520", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c", "c=", "2.0568", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=", "h", "2.0765", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "h", "h", "2.8561", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "c", "o_1", "38.7949", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "cp", "o_1", "38.7949", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "h", "o_1", "38.4069", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "o", "o_1", "46.9264", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c_0", "cp", "o_1", "38.7949", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c_0", "h", "o_1", "38.4069", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c_0", "h", "o_1", "37.8733", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c_0", "o", "o_1", "45.3800", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_1", "n_2", "o_1", "24.3329", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "o_1", "o_2", "46.9264", "0.0000", "Ver. 2.1, Ref. 8"}, {"cp", "c_1", "n_2", "o_1", "49.3740", "0.0000", "Ver. 2.1, Ref. 8"}, {"cp", "c_1", "o_1", "o_2", "49.3740", "0.0000", "Ver. 2.1, Ref. 6"}, {"h", "c_1", "n_2", "o_1", "23.1691", "0.0000", "Ver. 2.1, Ref. 7"}, {"h", "c_1", "o_1", "o_2", "45.3800", "0.0000", "Ver. 2.1, Ref. 8"}, {"n_2", "c_2", "n_2", "o_1", "59.3740", "0.0000", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "o_1", "o_2", "49.3740", "0.0000", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "o_2", "o_2", "51.6374", "0.0000", "Ver. 2.1, Ref. 7"}, {"c", "cp", "cp", "cp", "7.8153", "0.0000", "Ver. 2.0, Ref. 5"}, {"c", "cp", "cp", "cp", "6.9644", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "np", "10.4920", "0.0000", "Ver. 1.3, Ref. 1"}, {"c_1", "cp", "cp", "cp", "17.0526", "0.0000", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "cp", "cp", "7.1794", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "h", "4.8912", "0.0000", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "cp", "h", "7.6012", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "n_2", "17.0526", "0.0000", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "cp", "nh", "8.3206", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "nn", "10.7855", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o", "13.0421", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o_2", "-8.8126", "0.0000", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "cp", "oz", "19.8126", "0.0000", "Ver. 2.0, Ref. 5"}, {"cp", "cp", "cp", "p=", "6.7092", "0.0000", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "cp", "si", "5.3654", "0.0000", "Ver. 2.2, Ref. 9"}, {"cp", "cp", "h", "nh", "7.9682", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "np", "10.4920", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "op", "8.1654", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "sp", "5.5684", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "nh", "10.2877", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "np", "8.8464", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "np", "14.3802", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "op", "10.8102", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "sp", "7.3414", "0.0000", "Ver. 1.0, Ref. 1"}, {"nn", "cp", "np", "np", "15.0921", "0.0000", "Ver. 1.0, Ref. 1"}, {"n=", "cr", "nr", "nr", "54.4060", "0.0000", "Ver. 1.1, Ref. 1"}, {"oo", "cz", "oz", "oz", "51.6374", "0.0000", "Ver. 2.0, Ref. 5"}, {"c", "n", "c", "c_1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "c_1", "h*", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c_1", "n", "c_1", "h*", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c_1", "n", "h*", "h*", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n=", "cr", "h*", "0.3176", "0.0000", "Ver. 1.1, Ref. 1"}, {"c", "n_2", "c_1", "hn2", "-5.3119", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "n_2", "c_2", "hn2", "-5.3119", "0.0000", "Ver. 2.1, Ref. 7"}, {"c_1", "n_2", "cp", "hn2", "4.4181", "0.0000", "Ver. 2.1, Ref. 8"}, {"c_1", "n_2", "hn2", "hn2", "-6.5636", "0.0000", "Ver. 2.1, Ref. 8"}, {"c_2", "n_2", "cp", "hn2", "4.4181", "0.0000", "Ver. 2.1, Ref. 7"}, {"c_2", "n_2", "hn2", "hn2", "-6.5636", "0.0000", "Ver. 2.1, Ref. 7"}, {"c", "na", "c", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "na", "c", "h*", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "na", "h*", "h*", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "cp", "h*", "5.9154", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "h*", "np", "4.9959", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "h*", "h*", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "nr", "c+", "h*", "0.3176", "0.0000", "Ver. 1.0, Ref. 1"}, {"c+", "nr", "h*", "h*", "1.0035", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "nr", "h*", "h*", "1.0035", "0.0000", "Ver. 1.1, Ref. 1"}, {"az", "ob", "hb", "sz", "116.0100", "3.8934", "Ver. 3.0, Ref. 10"}, {"*", "c'_", "*", "*", "36.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "c+", "*", "*", "54.4060", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "c=_", "*", "*", "2.0568", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "cp_", "*", "*", "10.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "n=_", "*", "*", "0.5000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "n_", "*", "*", "0.1000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "na_", "*", "*", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "np_", "*", "*", "5.5000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "nr_", "*", "*", "1.0035", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "o_", "*", "*", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "p_", "*", "*", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "s_", "*", "*", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}}; /* Non-bonded (9-6) 0= Key, 1= r, 2= eps, 3= PCFF info E = eps(ij) [2(R(ij)/r(ij))^9 - 3(R(ij)/r(ij))^6] where R(ij) = [(r(i)^6 + r(j)^6))/2]^(1/6) eps(ij) = 2 sqrt(eps(i) * eps(j)) * r(i)^3 * r(j)^3/[r(i)^6 + r(j)^6] */ char * PCFF_vdw[94][4]= {{"Ag", "3.0222", "4.10020", "Ver. 2.1, Ref. 11"}, {"Al", "2.9964", "3.32320", "Ver. 2.1, Ref. 11"}, {"Au", "3.0177", "6.09800", "Ver. 2.1, Ref. 11"}, {"Br", "4.2150", "0.30500", "Ver. 2.0, Ref. 3"}, {"Cl", "3.9150", "0.30500", "Ver. 2.0, Ref. 3"}, {"Cr", "2.6764", "5.80440", "Ver. 2.1, Ref. 11"}, {"Cu", "2.6775", "3.81870", "Ver. 2.1, Ref. 11"}, {"Fe", "2.6595", "13.88920", "Ver. 2.1, Ref. 11"}, {"K", "4.8858", "0.74410", "Ver. 2.1, Ref. 11"}, {"Li", "3.2494", "0.72140", "Ver. 2.1, Ref. 11"}, {"Mo", "2.9184", "9.78710", "Ver. 2.1, Ref. 11"}, {"Na", "3.9624", "0.73800", "Ver. 2.1, Ref. 11"}, {"Ni", "2.6105", "5.07370", "Ver. 2.1, Ref. 11"}, {"Pb", "3.6541", "34.18600", "Ver. 2.1, Ref. 11"}, {"Pd", "2.8810", "6.08460", "Ver. 2.1, Ref. 11"}, {"Pt", "2.9034", "9.14470", "Ver. 2.1, Ref. 11"}, {"Sn", "2.9927", "4.84330", "Ver. 2.1, Ref. 11"}, {"W", "2.9344", "12.04700", "Ver. 2.1, Ref. 11"}, {"ar", "3.8400", "0.24640", "Ver. 2.1, Ref. 8"}, {"az", "0.0001", "0.00000", "Ver. 3.0, Ref. 10"}, {"br", "4.3000", "0.34890", "Ver. 2.1, Ref. 8"}, {"c", "4.0100", "0.05400", "Ver. 2.0, Ref. 1"}, {"c+", "3.3080", "0.12000", "Ver. 2.0, Ref. 1"}, {"c-", "3.9080", "0.12000", "Ver. 2.0, Ref. 1"}, {"c=", "3.9000", "0.06400", "Ver. 2.1, Ref. 8"}, {"c=", "4.0100", "0.06400", "Ver. 2.0, Ref. 1"}, {"c=1", "4.0100", "0.06400", "Ver. 2.0, Ref. 1"}, {"c=2", "4.0100", "0.06400", "Ver. 2.0, Ref. 1"}, {"c_0", "3.3080", "0.12000", "Ver. 2.0, Ref. 1"}, {"c_1", "3.8100", "0.12000", "Ver. 2.1, Ref. 6"}, {"c_2", "3.8100", "0.12000", "Ver. 2.1, Ref. 7"}, {"ca+", "3.9800", "0.30150", "Ver. 2.1, Ref. 8"}, {"cl", "3.9200", "0.22470", "Ver. 2.1, Ref. 8"}, {"cp", "4.0100", "0.06400", "Ver. 2.0, Ref. 1"}, {"cr", "3.3080", "0.12000", "Ver. 2.0, Ref. 1"}, {"ct", "4.0100", "0.06400", "Ver. 2.0, Ref. 1"}, {"cz", "3.9000", "0.06400", "Ver. 2.0, Ref. 5"}, {"f", "3.2000", "0.05980", "Ver. 2.1, Ref. 8"}, {"h", "2.9950", "0.02000", "Ver. 2.0, Ref. 1"}, {"h*", "1.0980", "0.01300", "Ver. 2.0, Ref. 1"}, {"h+", "1.0980", "0.01300", "Ver. 2.0, Ref. 1"}, {"hb", "1.2149", "5.23020", "Ver. 3.0, Ref. 10"}, {"he", "2.9000", "0.02030", "Ver. 2.1, Ref. 8"}, {"hn2", "1.6500", "0.01300", "Ver. 2.1, Ref. 7"}, {"ho2", "1.1100", "0.01300", "Ver. 2.1, Ref. 6"}, {"ho2", "1.0100", "0.15000", "Ver. 2.0, Ref. 5"}, {"hoa", "1.2879", "3.68600", "Ver. 3.0, Ref. 10"}, {"hos", "2.3541", "0.09880", "Ver. 3.0, Ref. 10"}, {"hsi", "2.9400", "0.02300", "Ver. 2.2, Ref. 9"}, {"i", "4.8000", "0.40000", "Ver. 2.0, Ref. 3"}, {"kr", "4.3000", "0.40280", "Ver. 2.1, Ref. 8"}, {"n", "4.0700", "0.10600", "Ver. 2.0, Ref. 1"}, {"n+", "3.2620", "0.06500", "Ver. 2.0, Ref. 1"}, {"n=", "3.8000", "0.08000", "Ver. 3.1, Ref. 12"}, {"n=", "4.1210", "0.06200", "Ver. 2.0, Ref. 1"}, {"n=1", "4.1210", "0.06200", "Ver. 2.0, Ref. 1"}, {"n=2", "4.1210", "0.06200", "Ver. 2.0, Ref. 1"}, {"n_2", "3.6000", "0.10600", "Ver. 2.1, Ref. 7"}, {"na", "4.0700", "0.06500", "Ver. 2.0, Ref. 1"}, {"ne", "3.1300", "0.07090", "Ver. 2.1, Ref. 8"}, {"nh", "4.0700", "0.13400", "Ver. 2.0, Ref. 1"}, {"nn", "4.0700", "0.06500", "Ver. 2.0, Ref. 1"}, {"np", "3.5700", "0.04100", "Ver. 2.0, Ref. 1"}, {"nr", "4.0700", "0.10600", "Ver. 2.0, Ref. 1"}, {"nt", "3.5700", "0.06500", "Ver. 2.0, Ref. 1"}, {"nz", "3.7500", "0.06500", "Ver. 2.1, Ref. 8"}, {"nz", "3.5700", "0.06500", "Ver. 2.0, Ref. 1"}, {"o", "3.5350", "0.24000", "Ver. 2.0, Ref. 1"}, {"o*", "3.6080", "0.27400", "Ver. 2.0, Ref. 1"}, {"o-", "3.5960", "0.16700", "Ver. 2.0, Ref. 1"}, {"o=", "3.5350", "0.06000", "Ver. 2.1, Ref. 8"}, {"o_1", "3.3000", "0.26700", "Ver. 2.1, Ref. 6"}, {"o_1", "3.5350", "0.26700", "Ver. 2.0, Ref. 1"}, {"o_2", "3.4200", "0.24000", "Ver. 2.1, Ref. 6"}, {"oah", "3.7245", "0.10260", "Ver. 3.0, Ref. 10"}, {"oas", "5.2591", "0.01290", "Ver. 3.0, Ref. 10"}, {"ob", "5.2191", "0.01350", "Ver. 3.0, Ref. 10"}, {"oo", "3.2000", "0.25700", "Ver. 2.0, Ref. 5"}, {"op", "3.5350", "0.10900", "Ver. 2.0, Ref. 1"}, {"osh", "3.4618", "0.15910", "Ver. 3.0, Ref. 10"}, {"osi", "3.3500", "0.24000", "Ver. 1.0, Ref. 4"}, {"oss", "3.4506", "0.16220", "Ver. 3.0, Ref. 10"}, {"oz", "3.3200", "0.24000", "Ver. 2.0, Ref. 5"}, {"p", "4.2950", "0.21500", "Ver. 2.0, Ref. 3"}, {"p=", "4.3000", "0.21500", "Ver. 3.1, Ref. 12"}, {"s", "4.0270", "0.07100", "Ver. 2.0, Ref. 1"}, {"s'", "4.0270", "0.25000", "Ver. 2.1, Ref. 8"}, {"s'", "4.0270", "0.07100", "Ver. 2.0, Ref. 1"}, {"si", "4.4500", "0.19000", "Ver. 2.2, Ref. 9"}, {"si", "4.4350", "0.09500", "Ver. 2.0, Ref. 3"}, {"sio", "4.2840", "0.07000", "Ver. 1.0, Ref. 4"}, {"sp", "4.0270", "0.07100", "Ver. 2.0, Ref. 1"}, {"sz", "0.0001", "0.00000", "Ver. 3.0, Ref. 10"}, {"xe", "4.5600", "0.45500", "Ver. 2.1, Ref. 8"}}; /* Bond increments To implement atomic charges */ char * PCFF_bond_increments[564][5]= {{"Ag", "Ag", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Al", "Al", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Au", "Au", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Cr", "Cr", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Cu", "Cu", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Fe", "Fe", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"K", "K", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Li", "Li", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Mo", "Mo", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Na", "Na", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Ni", "Ni", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Pb", "Pb", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Pd", "Pd", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Pt", "Pt", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Sn", "Sn", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"W", "W", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"az", "oah", "0.3013", "-0.3013", "Ver. 3.0, Ref. 10"}, {"az", "oas", "0.1694", "-0.1694", "Ver. 3.0, Ref. 10"}, {"az", "ob", "0.0284", "-0.0284", "Ver. 3.0, Ref. 10"}, {"br", "br", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"br", "c", "-0.1600", "0.1600", "Ver. 2.1, Ref. 8"}, {"br", "c-", "-0.0281", "0.0281", "Ver. 2.0, Ref. 2"}, {"br", "c=", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"br", "c=1", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"br", "c=2", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"br", "c_0", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"br", "c_1", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"br", "cl", "0.0507", "-0.0507", "Ver. 2.0, Ref. 2"}, {"br", "cp", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"br", "ct", "0.0173", "-0.0173", "Ver. 2.0, Ref. 2"}, {"br", "f", "0.2099", "-0.2099", "Ver. 2.0, Ref. 2"}, {"br", "h", "-0.1978", "0.1978", "Ver. 2.0, Ref. 2"}, {"br", "i", "-0.0110", "0.0110", "Ver. 2.0, Ref. 2"}, {"br", "n", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"br", "n+", "0.2452", "0.0048", "Ver. 2.0, Ref. 2"}, {"br", "n=", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"br", "n=1", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"br", "n=2", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"br", "na", "0.0601", "-0.0601", "Ver. 2.0, Ref. 2"}, {"br", "nh", "-0.0438", "0.0438", "Ver. 2.0, Ref. 2"}, {"br", "nn", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"br", "np", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"br", "o", "0.0818", "-0.0818", "Ver. 2.0, Ref. 2"}, {"br", "op", "0.3140", "-0.3140", "Ver. 2.0, Ref. 2"}, {"br", "p", "-0.2156", "0.2156", "Ver. 2.0, Ref. 2"}, {"br", "s", "-0.0437", "0.0437", "Ver. 2.0, Ref. 2"}, {"br", "s'", "0.0034", "-0.0034", "Ver. 2.0, Ref. 2"}, {"br", "si", "-0.3273", "0.3273", "Ver. 2.0, Ref. 2"}, {"br", "sp", "0.0034", "-0.0034", "Ver. 2.0, Ref. 2"}, {"c", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c-", "-0.2300", "0.2300", "Ver. 1.0, Ref. 1"}, {"c", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cl", "0.1840", "-0.1840", "Ver. 2.1, Ref. 8"}, {"c", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cr", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "ct", "0.0400", "-0.0400", "Ver. 1.0, Ref. 1"}, {"c", "f", "0.2500", "-0.2500", "Ver. 2.1, Ref. 8"}, {"c", "h", "-0.0530", "0.0530", "Ver. 1.0, Ref. 1"}, {"c", "i", "0.1120", "-0.1120", "Ver. 2.0, Ref. 2"}, {"c", "n", "0.2108", "-0.2108", "Ver. 1.0, Ref. 1"}, {"c", "n+", "0.4071", "-0.1571", "Ver. 1.0, Ref. 1"}, {"c", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c", "n_2", "0.2100", "-0.2100", "Ver. 2.1, Ref. 7"}, {"c", "na", "0.0827", "-0.0827", "Ver. 1.0, Ref. 1"}, {"c", "nh", "0.0610", "-0.0610", "Ver. 1.0, Ref. 2"}, {"c", "nn", "0.2108", "-0.2108", "Ver. 1.0, Ref. 2"}, {"c", "np", "0.1100", "-0.1100", "Ver. 1.0, Ref. 3"}, {"c", "nr", "0.4802", "-0.4802", "Ver. 1.0, Ref. 1"}, {"c", "nt", "0.3640", "-0.3640", "Ver. 1.0, Ref. 2"}, {"c", "o", "0.1330", "-0.1330", "Ver. 2.1, Ref. 8"}, {"c", "o_2", "0.2250", "-0.2250", "Ver. 2.1, Ref. 6"}, {"c", "oz", "0.0500", "-0.0500", "Ver. 2.0, Ref. 4"}, {"c", "p", "0.0110", "-0.0110", "Ver. 2.0, Ref. 2"}, {"c", "p=", "-0.0500", "0.0500", "Ver. 3.1, Ref. 12"}, {"c", "s", "0.0650", "-0.0650", "Ver. 1.0, Ref. 1"}, {"c", "si", "-0.1350", "0.1350", "Ver. 2.2, Ref. 9"}, {"c", "si", "-0.1767", "0.1767", "Ver. 2.0, Ref. 2"}, {"c", "sio", "-0.1000", "0.1000", "Ver. 1.0, Ref. 4"}, {"c+", "nr", "0.2653", "0.0680", "Ver. 1.0, Ref. 1"}, {"c-", "c-", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c-", "c_0", "0.1368", "-0.1368", "Ver. 2.0, Ref. 2"}, {"c-", "c_1", "0.1368", "-0.1368", "Ver. 2.0, Ref. 2"}, {"c-", "cl", "0.0747", "-0.0747", "Ver. 2.0, Ref. 2"}, {"c-", "cp", "-0.0424", "0.0424", "Ver. 2.0, Ref. 2"}, {"c-", "ct", "0.0432", "-0.0432", "Ver. 2.0, Ref. 2"}, {"c-", "f", "0.2241", "-0.2241", "Ver. 2.0, Ref. 2"}, {"c-", "h", "-0.0530", "0.0530", "Ver. 1.0, Ref. 1"}, {"c-", "i", "0.0185", "-0.0185", "Ver. 2.0, Ref. 2"}, {"c-", "n", "0.1607", "-0.1607", "Ver. 2.0, Ref. 2"}, {"c-", "n+", "0.2597", "-0.0097", "Ver. 2.0, Ref. 2"}, {"c-", "n=", "0.1607", "-0.1607", "Ver. 2.0, Ref. 2"}, {"c-", "n=1", "0.1607", "-0.1607", "Ver. 2.0, Ref. 2"}, {"c-", "n=2", "0.1607", "-0.1607", "Ver. 2.0, Ref. 2"}, {"c-", "nh", "-0.0176", "0.0176", "Ver. 2.0, Ref. 2"}, {"c-", "nn", "0.1607", "-0.1607", "Ver. 2.0, Ref. 2"}, {"c-", "np", "0.1607", "-0.1607", "Ver. 2.0, Ref. 2"}, {"c-", "o", "0.1012", "-0.1012", "Ver. 2.0, Ref. 2"}, {"c-", "o-", "0.0337", "-0.5337", "Ver. 1.0, Ref. 1"}, {"c-", "o_1", "0.3241", "-0.3241", "Ver. 2.0, Ref. 2"}, {"c-", "op", "0.3241", "-0.3241", "Ver. 2.0, Ref. 2"}, {"c-", "p", "-0.0857", "0.0857", "Ver. 2.0, Ref. 2"}, {"c-", "s", "-0.0087", "0.0087", "Ver. 2.0, Ref. 2"}, {"c-", "s-", "-0.1223", "-0.3777", "Ver. 2.0, Ref. 2"}, {"c-", "si", "-0.2775", "0.2775", "Ver. 2.0, Ref. 2"}, {"c=", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=", "c_0", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=", "c_1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=", "cl", "0.1020", "-0.1020", "Ver. 2.0, Ref. 3"}, {"c=", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 2"}, {"c=", "f", "0.1300", "-0.1300", "Ver. 2.0, Ref. 3"}, {"c=", "h", "-0.1268", "0.1268", "Ver. 1.0, Ref. 1"}, {"c=", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 2"}, {"c=", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "n+", "0.2989", "-0.0489", "Ver. 2.0, Ref. 2"}, {"c=", "n=", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=", "n=1", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=", "n=2", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=", "n_2", "0.1000", "-0.1000", "Ver. 3.1, Ref. 12"}, {"c=", "na", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "nh", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=", "np", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "o", "0.0265", "-0.0265", "Ver. 1.0, Ref. 1"}, {"c=", "o_1", "0.3583", "-0.3583", "Ver. 2.0, Ref. 2"}, {"c=", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 2"}, {"c=", "p", "-0.0380", "0.0380", "Ver. 2.0, Ref. 2"}, {"c=", "s", "-0.0120", "0.0120", "Ver. 2.0, Ref. 2"}, {"c=", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"c=", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 2"}, {"c=", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"c=1", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=1", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=1", "c_0", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=1", "c_1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=1", "cl", "0.1020", "-0.1020", "Ver. 2.0, Ref. 3"}, {"c=1", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=1", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 2"}, {"c=1", "f", "0.1300", "-0.1300", "Ver. 2.0, Ref. 3"}, {"c=1", "h", "-0.1268", "0.1268", "Ver. 1.0, Ref. 1"}, {"c=1", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 2"}, {"c=1", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "n+", "0.2989", "-0.0489", "Ver. 2.0, Ref. 2"}, {"c=1", "n=", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=1", "n=1", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=1", "n=2", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=1", "na", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "nh", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=1", "np", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "o", "0.0265", "-0.0265", "Ver. 1.0, Ref. 1"}, {"c=1", "o_1", "0.3583", "-0.3583", "Ver. 2.0, Ref. 2"}, {"c=1", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 2"}, {"c=1", "p", "-0.0380", "0.0380", "Ver. 2.0, Ref. 2"}, {"c=1", "s", "-0.0120", "0.0120", "Ver. 2.0, Ref. 2"}, {"c=1", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"c=1", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 2"}, {"c=1", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"c=2", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=2", "c_0", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=2", "c_1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=2", "cl", "0.1020", "-0.1020", "Ver. 2.0, Ref. 3"}, {"c=2", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=2", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 2"}, {"c=2", "f", "0.1300", "-0.1300", "Ver. 2.0, Ref. 3"}, {"c=2", "h", "-0.1268", "0.1268", "Ver. 1.0, Ref. 1"}, {"c=2", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 2"}, {"c=2", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=2", "n+", "0.2989", "-0.0489", "Ver. 2.0, Ref. 2"}, {"c=2", "n=", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=2", "n=1", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=2", "n=2", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=2", "n_2", "0.1000", "-0.1000", "Ver. 3.1, Ref. 12"}, {"c=2", "na", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=2", "nh", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=2", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=2", "np", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=2", "o", "0.0265", "-0.0265", "Ver. 1.0, Ref. 1"}, {"c=2", "o=", "0.1200", "-0.1200", "Ver. 2.1, Ref. 8"}, {"c=2", "o_1", "0.3583", "-0.3583", "Ver. 2.0, Ref. 2"}, {"c=2", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 2"}, {"c=2", "p", "-0.0380", "0.0380", "Ver. 2.0, Ref. 2"}, {"c=2", "s", "-0.0120", "0.0120", "Ver. 2.0, Ref. 2"}, {"c=2", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"c=2", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 2"}, {"c=2", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"c_0", "c_0", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c_0", "c_1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c_0", "cl", "0.1020", "-0.1020", "Ver. 2.0, Ref. 3"}, {"c_0", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c_0", "ct", "-0.0927", "0.0927", "Ver. 2.0, Ref. 2"}, {"c_0", "f", "0.1300", "-0.1300", "Ver. 2.0, Ref. 3"}, {"c_0", "h", "-0.0456", "0.0456", "Ver. 1.0, Ref. 1"}, {"c_0", "i", "-0.1291", "0.1291", "Ver. 2.0, Ref. 2"}, {"c_0", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c_0", "n+", "0.1331", "0.1169", "Ver. 2.0, Ref. 2"}, {"c_0", "n=", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_0", "n=1", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_0", "n=2", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_0", "nh", "-0.1422", "0.1422", "Ver. 2.0, Ref. 2"}, {"c_0", "nn", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_0", "np", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_0", "nt", "0.1641", "-0.1641", "Ver. 2.0, Ref. 2"}, {"c_0", "o", "0.0030", "-0.0030", "Ver. 1.0, Ref. 1"}, {"c_0", "o_1", "0.3964", "-0.3964", "Ver. 1.0, Ref. 1"}, {"c_0", "op", "0.0283", "-0.0283", "Ver. 1.0, Ref. 1"}, {"c_0", "p", "-0.2396", "0.2396", "Ver. 2.0, Ref. 2"}, {"c_0", "s", "-0.0140", "0.0140", "Ver. 2.0, Ref. 2"}, {"c_0", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c_0", "si", "-0.4405", "0.4405", "Ver. 2.0, Ref. 2"}, {"c_0", "sp", "-0.0130", "0.0130", "Ver. 1.0, Ref. 1"}, {"c_1", "c_1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c_1", "cl", "0.1020", "-0.1020", "Ver. 2.0, Ref. 3"}, {"c_1", "cp", "0.0180", "-0.0180", "Ver. 2.1, Ref. 6"}, {"c_1", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c_1", "ct", "-0.0927", "0.0927", "Ver. 2.0, Ref. 2"}, {"c_1", "f", "0.1300", "-0.1300", "Ver. 2.0, Ref. 3"}, {"c_1", "h", "-0.0456", "0.0456", "Ver. 1.0, Ref. 1"}, {"c_1", "i", "-0.1291", "0.1291", "Ver. 2.0, Ref. 2"}, {"c_1", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c_1", "n+", "0.1331", "0.1169", "Ver. 2.0, Ref. 2"}, {"c_1", "n=", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_1", "n=1", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_1", "n=2", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_1", "n_2", "0.1110", "-0.1110", "Ver. 2.1, Ref. 7"}, {"c_1", "nh", "-0.1422", "0.1422", "Ver. 2.0, Ref. 2"}, {"c_1", "nn", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_1", "np", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_1", "nt", "0.1641", "-0.1641", "Ver. 2.0, Ref. 2"}, {"c_1", "o", "0.0030", "-0.0030", "Ver. 1.0, Ref. 1"}, {"c_1", "o_1", "0.5310", "-0.5310", "Ver. 2.1, Ref. 6"}, {"c_1", "o_2", "0.1710", "-0.1710", "Ver. 2.1, Ref. 6"}, {"c_1", "op", "0.0283", "-0.0283", "Ver. 1.0, Ref. 1"}, {"c_1", "p", "-0.2396", "0.2396", "Ver. 2.0, Ref. 2"}, {"c_1", "s", "-0.0140", "0.0140", "Ver. 2.0, Ref. 2"}, {"c_1", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c_1", "si", "-0.4405", "0.4405", "Ver. 2.0, Ref. 2"}, {"c_1", "sp", "-0.0130", "0.0130", "Ver. 1.0, Ref. 1"}, {"c_2", "n_2", "0.1110", "-0.1110", "Ver. 2.1, Ref. 7"}, {"c_2", "o_1", "0.5850", "-0.5850", "Ver. 2.1, Ref. 7"}, {"c_2", "o_2", "0.1890", "-0.1890", "Ver. 2.1, Ref. 7"}, {"cl", "cl", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"cl", "cp", "-0.1020", "0.1020", "Ver. 2.0, Ref. 3"}, {"cl", "ct", "-0.0319", "0.0319", "Ver. 2.0, Ref. 2"}, {"cl", "f", "0.1589", "-0.1589", "Ver. 2.0, Ref. 2"}, {"cl", "h", "-0.2404", "0.2404", "Ver. 2.0, Ref. 2"}, {"cl", "i", "-0.0623", "0.0623", "Ver. 2.0, Ref. 2"}, {"cl", "n", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"cl", "n+", "0.1858", "0.0642", "Ver. 2.0, Ref. 2"}, {"cl", "n=", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"cl", "n=1", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"cl", "n=2", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"cl", "na", "0.0117", "-0.0117", "Ver. 2.0, Ref. 2"}, {"cl", "nh", "-0.0854", "0.0854", "Ver. 2.0, Ref. 2"}, {"cl", "nn", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"cl", "np", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"cl", "o", "0.0367", "-0.0367", "Ver. 2.0, Ref. 2"}, {"cl", "op", "0.2585", "-0.2585", "Ver. 2.0, Ref. 2"}, {"cl", "p", "-0.2544", "0.2544", "Ver. 2.0, Ref. 2"}, {"cl", "p=", "-0.1200", "0.1200", "Ver. 3.1, Ref. 12"}, {"cl", "s", "-0.0898", "0.0898", "Ver. 2.0, Ref. 2"}, {"cl", "s'", "-0.0457", "0.0457", "Ver. 2.0, Ref. 2"}, {"cl", "si", "-0.3598", "0.3598", "Ver. 2.0, Ref. 2"}, {"cl", "sp", "-0.0457", "0.0457", "Ver. 2.0, Ref. 2"}, {"cp", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 2"}, {"cp", "f", "0.1300", "-0.1300", "Ver. 2.0, Ref. 3"}, {"cp", "h", "-0.1268", "0.1268", "Ver. 1.0, Ref. 1"}, {"cp", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 2"}, {"cp", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "n+", "0.2989", "-0.0489", "Ver. 2.0, Ref. 2"}, {"cp", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 2"}, {"cp", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 2"}, {"cp", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 2"}, {"cp", "n_2", "0.2370", "-0.2370", "Ver. 2.1, Ref. 7"}, {"cp", "na", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "-0.0500", "0.0500", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "0.0827", "-0.0827", "Ver. 1.0, Ref. 1"}, {"cp", "np", "0.2405", "-0.2405", "Ver. 1.0, Ref. 1"}, {"cp", "o", "0.0265", "-0.0265", "Ver. 1.0, Ref. 1"}, {"cp", "o_1", "0.3964", "-0.3964", "Ver. 2.0, Ref. 2"}, {"cp", "o_2", "0.2790", "-0.2790", "Ver. 2.1, Ref. 6"}, {"cp", "op", "0.0283", "-0.0283", "Ver. 1.0, Ref. 1"}, {"cp", "oz", "0.1700", "-0.1700", "Ver. 2.0, Ref. 4"}, {"cp", "p", "-0.0380", "0.0380", "Ver. 1.0, Ref. 2"}, {"cp", "p=", "-0.0600", "0.0600", "Ver. 3.1, Ref. 12"}, {"cp", "s", "-0.0120", "0.0120", "Ver. 2.0, Ref. 2"}, {"cp", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"cp", "si", "-0.1170", "0.1170", "Ver. 2.2, Ref. 9"}, {"cp", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 2"}, {"cp", "sio", "-0.1500", "0.1500", "Ver. 1.0, Ref. 4"}, {"cp", "sp", "-0.0130", "0.0130", "Ver. 1.0, Ref. 1"}, {"cr", "n=", "0.4000", "-0.4000", "Ver. 1.0, Ref. 1"}, {"cr", "n=1", "0.4000", "-0.4000", "Ver. 1.0, Ref. 1"}, {"cr", "n=2", "0.4000", "-0.4000", "Ver. 1.0, Ref. 1"}, {"cr", "nr", "0.0000", "-0.0000", "Ver. 2.0, Ref. 2"}, {"ct", "ct", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"ct", "f", "0.1873", "-0.1873", "Ver. 2.0, Ref. 2"}, {"ct", "h", "-0.2052", "0.2052", "Ver. 2.0, Ref. 2"}, {"ct", "i", "-0.0281", "0.0281", "Ver. 2.0, Ref. 2"}, {"ct", "n", "0.1204", "-0.1204", "Ver. 2.0, Ref. 2"}, {"ct", "n+", "0.0992", "0.1508", "Ver. 2.0, Ref. 2"}, {"ct", "n=", "0.1204", "-0.1204", "Ver. 2.0, Ref. 2"}, {"ct", "n=1", "0.1204", "-0.1204", "Ver. 2.0, Ref. 2"}, {"ct", "n=2", "0.1204", "-0.1204", "Ver. 2.0, Ref. 2"}, {"ct", "na", "-0.0636", "0.0636", "Ver. 2.0, Ref. 2"}, {"ct", "nh", "-0.0568", "0.0568", "Ver. 2.0, Ref. 2"}, {"ct", "nn", "0.0920", "-0.0920", "Ver. 2.0, Ref. 2"}, {"ct", "np", "0.1204", "-0.1204", "Ver. 2.0, Ref. 2"}, {"ct", "nt", "0.1204", "-0.1204", "Ver. 2.0, Ref. 2"}, {"ct", "o", "0.0675", "-0.0675", "Ver. 2.0, Ref. 2"}, {"ct", "p", "-0.1335", "0.1335", "Ver. 2.0, Ref. 2"}, {"ct", "s", "-0.0522", "0.0522", "Ver. 2.0, Ref. 2"}, {"ct", "si", "-0.3266", "0.3266", "Ver. 2.0, Ref. 2"}, {"cz", "oo", "0.5000", "-0.5000", "Ver. 2.0, Ref. 4"}, {"cz", "oz", "0.1000", "-0.1000", "Ver. 2.0, Ref. 4"}, {"f", "f", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"f", "h", "-0.3823", "0.3823", "Ver. 2.0, Ref. 2"}, {"f", "h*", "-0.4089", "0.4089", "Ver. 1.0, Ref. 4"}, {"f", "i", "-0.2234", "0.2234", "Ver. 2.0, Ref. 2"}, {"f", "n", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"f", "n+", "0.0062", "0.2438", "Ver. 2.0, Ref. 2"}, {"f", "n=", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"f", "n=1", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"f", "n=2", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"f", "na", "-0.1415", "0.1415", "Ver. 2.0, Ref. 2"}, {"f", "nh", "-0.2220", "0.2220", "Ver. 2.0, Ref. 2"}, {"f", "nn", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"f", "np", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"f", "o", "-0.1077", "0.1077", "Ver. 2.0, Ref. 2"}, {"f", "op", "0.0888", "-0.0888", "Ver. 2.0, Ref. 2"}, {"f", "p", "-0.3869", "0.3869", "Ver. 2.0, Ref. 2"}, {"f", "p=", "-0.1800", "0.1800", "Ver. 3.1, Ref. 12"}, {"f", "s", "-0.2380", "0.2380", "Ver. 2.0, Ref. 2"}, {"f", "s'", "-0.2011", "0.2011", "Ver. 2.0, Ref. 2"}, {"f", "si", "-0.4789", "0.4789", "Ver. 2.0, Ref. 2"}, {"f", "sp", "-0.2011", "0.2011", "Ver. 2.0, Ref. 2"}, {"h", "h", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"h", "i", "0.1923", "-0.1923", "Ver. 2.0, Ref. 2"}, {"h", "op", "0.4943", "-0.4943", "Ver. 2.0, Ref. 2"}, {"h", "p", "-0.0356", "0.0356", "Ver. 2.0, Ref. 2"}, {"h", "p=", "-0.0500", "0.0500", "Ver. 3.1, Ref. 12"}, {"h", "s", "0.1392", "-0.1392", "Ver. 2.0, Ref. 2"}, {"h", "s'", "0.1932", "-0.1932", "Ver. 2.0, Ref. 2"}, {"h", "si", "-0.1260", "0.1260", "Ver. 2.2, Ref. 9"}, {"h", "si", "-0.1537", "0.1537", "Ver. 2.0, Ref. 2"}, {"h", "sio", "-0.1300", "0.1300", "Ver. 1.0, Ref. 4"}, {"h", "sp", "0.1932", "-0.1932", "Ver. 2.0, Ref. 2"}, {"h*", "n", "0.4395", "-0.4395", "Ver. 1.0, Ref. 1"}, {"h*", "n=", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"h*", "n=1", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"h*", "n=2", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"h*", "na", "0.2487", "-0.2487", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "0.3925", "-0.3925", "Ver. 1.0, Ref. 1"}, {"h*", "nn", "0.2487", "-0.2487", "Ver. 1.0, Ref. 1"}, {"h*", "np", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"h*", "nr", "0.4068", "-0.4068", "Ver. 1.0, Ref. 1"}, {"h*", "nt", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"h*", "o", "0.4241", "-0.4241", "Ver. 1.0, Ref. 1"}, {"h*", "o*", "0.3991", "-0.3991", "Ver. 1.0, Ref. 1"}, {"h*", "osi", "0.3400", "-0.3400", "Ver. 1.0, Ref. 4"}, {"h+", "n+", "0.2800", "-0.0300", "Ver. 1.0, Ref. 1"}, {"hb", "ob", "0.0839", "-0.0839", "Ver. 3.0, Ref. 10"}, {"hi", "nh", "0.3925", "0.1075", "Ver. 1.0, Ref. 1"}, {"hn2", "n_2", "0.3780", "-0.3780", "Ver. 2.1, Ref. 7"}, {"ho2", "o_2", "0.4230", "-0.4230", "Ver. 2.1, Ref. 6"}, {"ho2", "oz", "0.4500", "-0.4500", "Ver. 2.0, Ref. 4"}, {"hoa", "oah", "0.0575", "-0.0575", "Ver. 3.0, Ref. 10"}, {"hos", "osh", "0.0641", "-0.0641", "Ver. 3.0, Ref. 10"}, {"hsi", "si", "-0.1260", "0.1260", "Ver. 2.2, Ref. 9"}, {"i", "i", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"i", "n", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"i", "n+", "0.2615", "-0.0115", "Ver. 2.0, Ref. 2"}, {"i", "n=", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"i", "n=1", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"i", "n=2", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"i", "na", "0.0714", "-0.0714", "Ver. 2.0, Ref. 2"}, {"i", "nh", "-0.0356", "0.0358", "Ver. 2.0, Ref. 2"}, {"i", "nn", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"i", "np", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"i", "o", "0.0924", "-0.0924", "Ver. 2.0, Ref. 2"}, {"i", "op", "0.3297", "-0.3297", "Ver. 2.0, Ref. 2"}, {"i", "p", "-0.2110", "0.2110", "Ver. 2.0, Ref. 2"}, {"i", "s", "-0.0345", "0.0345", "Ver. 2.0, Ref. 2"}, {"i", "s'", "0.0140", "-0.0140", "Ver. 2.0, Ref. 2"}, {"i", "si", "-0.3263", "0.3263", "Ver. 2.0, Ref. 2"}, {"i", "sp", "0.0140", "-0.0140", "Ver. 2.0, Ref. 2"}, {"n", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "n+", "0.0883", "0.1617", "Ver. 2.0, Ref. 2"}, {"n", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"n", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 2"}, {"n", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "o", "-0.0427", "0.0427", "Ver. 2.0, Ref. 2"}, {"n", "o_1", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 2"}, {"n", "p=", "-0.1200", "0.1200", "Ver. 3.1, Ref. 12"}, {"n", "s", "-0.1753", "0.1753", "Ver. 2.0, Ref. 2"}, {"n", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n", "si", "-0.4368", "0.4368", "Ver. 2.0, Ref. 2"}, {"n", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n+", "n+", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n+", "n=", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"n+", "n=1", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"n+", "n=2", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"n+", "na", "0.0850", "0.1650", "Ver. 2.0, Ref. 2"}, {"n+", "nh", "-0.0044", "0.2544", "Ver. 2.0, Ref. 2"}, {"n+", "nn", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"n+", "np", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"n+", "o", "0.1250", "0.1250", "Ver. 2.0, Ref. 2"}, {"n+", "o_1", "0.3418", "-0.0918", "Ver. 2.0, Ref. 2"}, {"n+", "op", "0.3418", "-0.0918", "Ver. 2.0, Ref. 2"}, {"n+", "p", "-0.1994", "0.4494", "Ver. 2.0, Ref. 2"}, {"n+", "s", "-0.0255", "0.2755", "Ver. 2.0, Ref. 2"}, {"n+", "s'", "0.0159", "0.2341", "Ver. 2.0, Ref. 2"}, {"n+", "si", "-0.3083", "0.5583", "Ver. 2.0, Ref. 2"}, {"n+", "sp", "0.0159", "0.2341", "Ver. 2.0, Ref. 2"}, {"n=", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"n=", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 2"}, {"n=", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=", "o", "-0.0427", "0.0427", "Ver. 2.0, Ref. 2"}, {"n=", "o_1", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 2"}, {"n=", "p=", "-0.3500", "0.3500", "Ver. 3.1, Ref. 12"}, {"n=", "s", "-0.1753", "0.1753", "Ver. 2.0, Ref. 2"}, {"n=", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n=", "si", "-0.4368", "0.4368", "Ver. 2.0, Ref. 2"}, {"n=", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n=1", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"n=1", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 2"}, {"n=1", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "o", "-0.0427", "0.0427", "Ver. 2.0, Ref. 2"}, {"n=1", "o_1", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=1", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=1", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 2"}, {"n=1", "s", "-0.1753", "0.1753", "Ver. 2.0, Ref. 2"}, {"n=1", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n=1", "si", "-0.4368", "0.4368", "Ver. 2.0, Ref. 2"}, {"n=1", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n=2", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=2", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"n=2", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 2"}, {"n=2", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=2", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=2", "o", "-0.0427", "0.0427", "Ver. 2.0, Ref. 2"}, {"n=2", "o=", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=2", "o_1", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=2", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=2", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 2"}, {"n=2", "s", "-0.1753", "0.1753", "Ver. 2.0, Ref. 2"}, {"n=2", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n=2", "si", "-0.4368", "0.4368", "Ver. 2.0, Ref. 2"}, {"n=2", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"na", "na", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"na", "nh", "-0.0919", "0.0919", "Ver. 2.0, Ref. 2"}, {"na", "nn", "0.0371", "-0.0371", "Ver. 2.0, Ref. 2"}, {"na", "np", "0.0742", "-0.0742", "Ver. 2.0, Ref. 2"}, {"na", "o", "0.0254", "-0.0254", "Ver. 2.0, Ref. 2"}, {"na", "o_1", "0.2369", "-0.2369", "Ver. 2.0, Ref. 2"}, {"na", "op", "0.2369", "-0.2369", "Ver. 2.0, Ref. 2"}, {"na", "p", "-0.2518", "0.2518", "Ver. 2.0, Ref. 2"}, {"na", "s", "-0.0966", "0.0966", "Ver. 2.0, Ref. 2"}, {"na", "s'", "-0.0551", "0.0551", "Ver. 2.0, Ref. 2"}, {"na", "si", "-0.3501", "0.3501", "Ver. 2.0, Ref. 2"}, {"na", "sp", "-0.0551", "0.0551", "Ver. 2.0, Ref. 2"}, {"nh", "nh", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"nh", "nn", "0.1637", "-0.1637", "Ver. 2.0, Ref. 2"}, {"nh", "np", "-0.2823", "0.2823", "Ver. 1.0, Ref. 1"}, {"nh", "o", "-0.1090", "-0.1090", "Ver. 2.0, Ref. 2"}, {"nh", "o_1", "0.3148", "-0.3148", "Ver. 2.0, Ref. 2"}, {"nh", "op", "0.3148", "-0.3148", "Ver. 2.0, Ref. 2"}, {"nh", "p", "-0.1375", "0.1375", "Ver. 2.0, Ref. 2"}, {"nh", "s", "0.0046", "-0.0046", "Ver. 2.0, Ref. 2"}, {"nh", "s'", "0.0454", "-0.0454", "Ver. 2.0, Ref. 2"}, {"nh", "si", "-0.2278", "0.2278", "Ver. 2.0, Ref. 2"}, {"nh", "sp", "0.0454", "-0.0454", "Ver. 2.0, Ref. 2"}, {"nn", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"nn", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"nn", "o", "-0.0427", "0.0427", "Ver. 2.0, Ref. 2"}, {"nn", "o_1", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"nn", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"nn", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 2"}, {"nn", "s", "-0.1753", "0.1753", "Ver. 2.0, Ref. 2"}, {"nn", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"nn", "si", "-0.4368", "0.4368", "Ver. 2.0, Ref. 2"}, {"nn", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"np", "np", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "o", "-0.0427", "0.0427", "Ver. 2.0, Ref. 2"}, {"np", "o_1", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"np", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"np", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 2"}, {"np", "s", "-0.1753", "0.1753", "Ver. 2.0, Ref. 2"}, {"np", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"np", "si", "-0.4368", "0.4368", "Ver. 2.0, Ref. 2"}, {"np", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"nt", "nt", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"nz", "nz", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"o", "o", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o", "op", "0.1962", "-0.1962", "Ver. 2.0, Ref. 2"}, {"o", "p", "-0.2548", "0.2548", "Ver. 2.0, Ref. 2"}, {"o", "p=", "-0.1400", "0.1400", "Ver. 3.1, Ref. 12"}, {"o", "s", "-0.1143", "0.1143", "Ver. 2.0, Ref. 2"}, {"o", "s'", "-0.0766", "0.0766", "Ver. 2.0, Ref. 2"}, {"o", "si", "-0.3425", "0.3425", "Ver. 2.0, Ref. 2"}, {"o", "sp", "-0.0766", "0.0766", "Ver. 2.0, Ref. 2"}, {"o-", "p", "-0.8500", "0.3500", "Ver. 2.0, Ref. 3"}, {"o-", "s'", "-0.1143", "0.1143", "Ver. 2.1, Ref. 8"}, {"o=", "o=", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"o=", "s'", "-0.1143", "0.1143", "Ver. 2.1, Ref. 8"}, {"o_1", "o_1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o_1", "op", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o_1", "p", "-0.4933", "0.4933", "Ver. 2.0, Ref. 2"}, {"o_1", "s", "-0.3386", "0.3386", "Ver. 2.0, Ref. 2"}, {"o_1", "s'", "-0.3024", "0.3024", "Ver. 2.0, Ref. 2"}, {"o_1", "si", "-0.5883", "0.5883", "Ver. 2.0, Ref. 2"}, {"o_1", "sp", "-0.3024", "0.3024", "Ver. 2.0, Ref. 2"}, {"oas", "sz", "-0.1265", "0.1265", "Ver. 3.0, Ref. 10"}, {"ob", "sz", "-0.1392", "0.1392", "Ver. 3.0, Ref. 10"}, {"op", "op", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"op", "p", "-0.4933", "0.4933", "Ver. 2.0, Ref. 2"}, {"op", "s", "-0.3386", "0.3386", "Ver. 2.0, Ref. 2"}, {"op", "s'", "-0.3024", "0.3024", "Ver. 2.0, Ref. 2"}, {"op", "si", "-0.5883", "0.5883", "Ver. 2.0, Ref. 2"}, {"op", "sp", "-0.3024", "0.3024", "Ver. 2.0, Ref. 2"}, {"osh", "sz", "-0.1303", "0.1303", "Ver. 3.0, Ref. 10"}, {"osi", "sio", "-0.2200", "0.2200", "Ver. 1.0, Ref. 4"}, {"oss", "sz", "-0.1309", "0.1309", "Ver. 3.0, Ref. 10"}, {"p", "p", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"p", "s", "0.1600", "-0.1600", "Ver. 2.0, Ref. 2"}, {"p", "s'", "0.2106", "-0.2106", "Ver. 2.0, Ref. 2"}, {"p", "s-", "0.1824", "-0.6824", "Ver. 2.0, Ref. 2"}, {"p", "si", "-0.1069", "0.1069", "Ver. 2.0, Ref. 2"}, {"p", "sp", "0.2106", "-0.2106", "Ver. 2.0, Ref. 2"}, {"s", "s", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"s", "s'", "0.0455", "-0.0455", "Ver. 2.0, Ref. 2"}, {"s", "si", "-0.2634", "0.2634", "Ver. 2.0, Ref. 2"}, {"s", "sp", "0.0455", "-0.0455", "Ver. 2.0, Ref. 2"}, {"s'", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"s'", "si", "-0.3172", "0.3172", "Ver. 2.0, Ref. 2"}, {"s'", "sp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"si", "si", "0.0000", "0.0000", "Ver. 2.2, Ref. 9"}, {"si", "si", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"si", "sp", "0.3172", "-0.3172", "Ver. 2.0, Ref. 2"}, {"sp", "sp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}}; atomes_1.3.1/src/calc/force_fields/force_fields.c0000664000175000017500000030321515212624223021416 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file force_fields.c * @short Functions to prepare the force field XML files from the sources in atomes \n Functions to read the force field XML files * @author Sébastien Le Roux */ /* * This file: 'force_fields.c' * * Contains: * - The functions to prepare the force field XML files from the sources in atomes - The functions to read the force field XML files * * List of functions: int get_pdim(int fid, int prop, int col); int get_fkey(int fid, int prop, int col); int find_atom_id (int print, char * keyw); int find_atom_z (char * keyw); int get_z (int faid); int get_atoms (int z); int get_bond (int faid, int bid); int get_angle (int faid, int aid); int get_apex (int faid, int aid); int get_torsion (int faid, int tid, int a, int b); int get_improper (int faid, int a, int b); int get_vdw (int faid); int get_bi (int faid); int field_find_atoms (); float get_force_field_atom_mass (int sp, int num); gboolean not_done (int eid, int a, int b); gboolean not_done_an (int eid, int a, int b, int c); gboolean is_a_match (int * data, int num, int val[4]); gchar * find_atom_key (int fid, int prop, char * keyw); gchar * open_field_file (int field); void associate_pointers_to_field_data (int id); void print_object_dim_and_key_tables (int fid); void set_data (int pid, int obj, int oid, int faid); void field_has_element (int aid); void print_atom_table (int fid); void print_this_bond (int eid, int h, int fid, int inum, char * at_a, char * at_b, char ** the_bond); void print_bond_table (int fid, int inum); void print_this_angle (int eid, int h, int fid, int inum, int ub, char * at_a, char * at_b, char * at_c, char ** the_angle); void print_angle_table (int fid, int inum); void print_dihedral_table (int fid, int inum); void print_improper_table (int fid, int inum); void print_inversion_table (int fid, int inum); void print_vdw_table (int fid, int inum); void find_object_ijkl (int hid, int foid, int oid, int sa, int za, int sb, int zb, int sc, int zc, int sd, int zd); void field_find_bonds (); void field_find_angles (); void field_find_dihedrals (int id); void field_find_vdw (); void print_all (int oid); void clean_this_field_data (xmlDoc * doc, xmlTextReaderPtr reader); G_MODULE_EXPORT void setup_this_force_field (int id); */ #include "global.h" #include "interface.h" #include "dlp_field.h" #include "force_fields.h" #include extern xmlNodePtr findnode (xmlNodePtr startnode, char * nname); extern int clean_xml_data (xmlDoc * doc, xmlTextReaderPtr reader); #define N_FIELDS 21 #define N_PARAMS #define ALL_PARAMS 9 // Define Fields order and id #define FATS 0 #define FEQI 1 #define FBDS 2 #define FANG 3 #define FDIH 4 #define FIMP 5 #define FINV 6 #define FNBD 7 #define FINC 8 #define USE_ATOMS /* AMBER*: In atoms check label (1 letter only) CHARMM*: In atoms check label (1 letter only) CVFF/CVFF_aug/CFF91/PCFF: - Bonds: 'c=_' in 'c=', 'n=_' in 'n=', 'd_' in 'dw', 'ci_' in 'ci', 'ni_' in 'ni' - Quadratic angles: 's3m_' in 's3e_', 's4m_' in 's4e_', 'o4m_' in 'o4e_', '*?' in '*' CVFF: - Atoms: 'mg' in 'Mg' CVFF_aug: - Non-bonded : 'Al' in 'al' Compass : OPLSAA?: - In atoms : 'NA' to 'Na', 'CLA' to 'Cl', 'MG' to 'Mg' */ char * field_keyw[N_FIELDS] = {"amber94", "amber96", "amber98", "amber99", "prot_22", "prot_metals_22", "ethers_35", "carb_36", "cgenff_36", "lipid_36", "na_36", "prot_36", "prot_metals_36", "silicates", "CVFF", "CVFF_Aug", "CFF91", "PCFF", "Compass", "OPLSAAP", "OPLSAAR"}; char * field_ffl[N_FIELDS] = {"amber94", "amber96", "amber98", "amber99", "charmm-prot_22", "charmm-prot_metals_22", "charmm-ethers_35", "charmm-carb_36", "charmm-cgenff_36", "charmm-lipid_36", "charmm-na_36", "charmm-prot_36", "charmm-prot_metals_36", "charmm-silicates", "cvff", "cvff_aug", "cff91", "pcff", "compass", "oplsaap", "oplsaar"}; char * field_name[N_FIELDS] = {"Assisted Model Building with Energy Refinement 94", "Assisted Model Building with Energy Refinement 96", "Assisted Model Building with Energy Refinement 98", "Assisted Model Building with Energy Refinement 99", "Chemistry at HARvard Macromolecular Mechanics 22 Proteins", "Chemistry at HARvard Macromolecular Mechanics 22 Proteins and metals", "Chemistry at HARvard Macromolecular Mechanics 35 Ethers", "Chemistry at HARvard Macromolecular Mechanics 36 Carbohydrates", "Chemistry at HARvard Macromolecular Mechanics 36 General", "Chemistry at HARvard Macromolecular Mechanics 36 Lipids", "Chemistry at HARvard Macromolecular Mechanics 36 Nucleid acids", "Chemistry at HARvard Macromolecular Mechanics 36 Proteins", "Chemistry at HARvard Macromolecular Mechanics 36 proteins and metals", "Chemistry at HARvard Macromolecular Mechanics Silicates", "Consistent Valence Force Field", "Consistent Valence Force Field Augmented", "Consistent Force Field 91", "Polymer Consistent Force Field", "Condensed-phase Optimized Molecular Potentials for Atomistic Simulation Studies", "Optimized Potentials for Liquid Simulation All-atoms for Proteins", "Optimized Potentials for Liquid Simulation All-atoms for Proteins, Nucleosides, and Nucleotides"}; char * field_acro[N_FIELDS] = {"AMBER 94", "AMBER 96", "AMBER 98", "AMBER 99", "CHARMM 22 Proteins", "CHARMM 22 Proteins and metals", "CHARMM 35 Ethers", "CHARMM 36 Carbohydrates", "CHARMM 36 General", "CHARMM 36 Lipids", "CHARMM 36 Nucleid acids", "CHARMM 36 Proteins", "CHARMM 36 Proteins and metals", "CHARMM Silicates", "CVFF", "CVFF Augmented", "CFF 91", "PCFF", "COMPASS", "OPLS All-atoms for proteins", "OPLS All-atoms for RNA"}; char *** field_atoms; char *** field_equi[2]; // 0 = Quadratic, 1 = Quartic, 2 = Morse char *** field_bonds[3]; // 0 = Quadratic, 1 = Quartic char *** field_angles[2]; char *** field_dihedrals[2]; char *** field_inversions; char *** field_impropers; char *** field_vdw; int * field_objects; int * field_dim; gboolean is_99; int * atoms_id; int ** atoms_id_list; int ** extraz_id; FILE * fp; gchar * ffo_file[21]={"parm94.dat", "parm96.dat", "parm98.dat", "parm99.dat", "par_all22_prot.prm", "par_all22_prot_metals.prm", "par_all35_ethers.prm", "par_all36_carb.prm", "par_all36_cgenff.prm", "par_all36_lipid.prm", "par_all36_na.prm", "par_all36_prot.prm", "par_all36m_prot.prm", "par_all_silicates.prm", "CVFF.frc", "CVFF_aug.frc", "CFF91.frc", "PCFF.frc", "compass.frc", "par_opls_aam.inp", "par_opls_rna.inp"}; gchar * prop_name[11]= {"Quadratic bonds", "Quartic bonds", "Morse bonds", "Quadratic angles", "Quartic angles", "Dihedrals", "Torsions 3", "Inversions", "Impropers", "Non-bonded", "Bond increments"}; gchar * table_name[11]= {"qbonds", "sbonds", "mbonds", "qangles", "sangles", "dih", "tor", "inv", "imp", "vdw", "bdi"}; int ffdim[14][2] = {{1, 0}, {1, 1}, {1, 1}, {2, 2}, {2, 4}, {2, 3}, {3, 2}, {3, 4}, {4, 3}, {4, 4}, {4, 2}, {4, 3}, {1, 2}, {2, 0}}; // Pot +1 ou (-Pot+1) si special int ffpot[N_FIELDS][10]={{1, 0, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 2, 1, 0, 1, -4, 1, 0, 1}, {1, 0, 2, 1, 0, 1, -4, 1, 0, 0}, {1, 6, 0, 0, 2, 1, -4, 0, 2, 0}, {1, 6, 0, 1, 2, 1, -4, 0, 2, 0}, {0, 6, 0, 0, 2, 0, -4, 0, 2, -2}, {1, 0, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 0, 1, 0, 1, 0, 1, 0, 1}}; /*! \fn int get_pdim(int fid, int prop, int col) \brief retrieve number of parameters for property in force field database \param fid the force field id \param prop the type of property \param col the column id */ int get_pdim(int fid, int prop, int col) { if (prop == 0) return field_dim[0]; if (field_dim[prop] == 0) return 0; if (prop == 6 && col == 1 && (fid >= CHARMM22P && fid <= CHARMMSI)) return 4; if (prop == 12 && col == 1 && ((fid >= CHARMM22P && fid <= CHARMMSI) || (fid >= OPLSAAP))) return 4; return ffdim[prop][col]; } /*! \fn int get_fkey(int fid, int prop, int col) \brief retrieve key for property in force field database \param fid the force field id \param prop the property id \param col the column id */ int get_fkey(int fid, int prop, int col) { return ffdim[prop][col]; } #ifndef USE_ATOMS void allocate_field_data (int * objects, int * dim, char * atoms[objects[0]][dim[0]], char * equi_a[objects[1]][dim[1]], char * equi_b[objects[2]][dim[2]], char * bonds[objects[3]][dim[3]], char * q_bonds[objects[4]][dim[4]], char * m_bonds[objects[5]][dim[5]], char * angles[objects[6]][dim[6]], char * q_angles[objects[7]][dim[7]], char * dihedrals[objects[8]][dim[8]], char * q_dihedrals[objects[9]][dim[9]], char * inversions[objects[10]][dim[10]], char * impropers[objects[11]][dim[11]], char * vdw[objects[12]][dim[12]], char * bond_inc[objects[13]][dim[13]]) { int h, i; field_objects = objects; field_dim = dim; field_atoms = g_malloc0(field_objects[0]*sizeof*field_atoms); for (i=0; i CHARMMSI && fid < OPLSAAP) { if (find_atom_id(0, keyw) == -10) { int i; for (i=0; i 2) { for (i=0; i\n"); int i, j, k, l, n, m; k = -1; for (i=0; i<13; i++) { if (i != 1 && i != 2) { k ++; j = (i == 10) ? 11 : (i == 11) ? 10 : i; if (i == 0) { fprintf (fp, " <%s dim=\"%d\">%d\n", nodes[k], (field_objects[j]) ? get_pdim(fid, j, 1) : 0, field_objects[j], nodes[k]); } else if (i < 12) { fprintf (fp, " <%s dim=\"%d\" pot=\"%d\">%d\n", nodes[k], (field_objects[j]) ? get_pdim(fid, j, 1) : 0, ffpot[fid][k-1], field_objects[j], nodes[k]); } else { l = 0; if (fid <= AMBER99) { for (n=0; n%d\n", nodes[k], (field_objects[j]) ? get_pdim(fid, j, 1) : 0, ffpot[fid][k-1], field_objects[j]+l, nodes[k]); } } } fprintf (fp, " \n"); } field_object_match ** all_data[10]; field_object_match * om_tmp; /*! \fn void set_data (int pid, int obj, int oid, int faid) \brief save retrieved force field data \param pid the type of structural element \param obj the element id \param oid the parameter id the force field database \param faid the field atom id */ void set_data (int pid, int obj, int oid, int faid) { if (all_data[pid][faid] == NULL) { all_data[pid][faid] = g_malloc0(sizeof*all_data[pid][faid]); om_tmp = all_data[pid][faid]; } else { om_tmp -> next = g_malloc0(sizeof*om_tmp -> next); om_tmp -> next -> id = om_tmp -> id + 1; om_tmp -> next -> prev = om_tmp; } om_tmp -> obj = obj; om_tmp -> oid = oid; } /*! \fn int get_z (int faid) \brief get field atom Z \param faid the field atom id */ int get_z (int faid) { int i; for (i=0; i<120; i++) { if (g_strcmp0 (periodic_table_info[i].lab, field_atoms[faid][0]) == 0) return periodic_table_info[i].Z; } return -1; } /*! \fn int get_atoms (int z) \brief retrieve all field atom(s) with matching Z \param z the target Z */ int get_atoms (int z) { int i, j; j = 0; for (i=0; i\n"); for (i=0; i\n"); } fprintf (fp, " \n"); } typedef struct f_bond f_bond; struct f_bond { int a; int b; float v[2]; f_bond * next; f_bond * prev; }; f_bond * the_bonds[2]; f_bond * tmpbd; /*! \fn gboolean not_done (int eid, int a, int b) \brief was this case already considered ? \param eid equivalence id (not used for the time being) \param a 1st atom id \param b 2nd atom id */ gboolean not_done (int eid, int a, int b) { tmpbd = the_bonds[eid]; while (tmpbd) { if (tmpbd -> a == a && tmpbd -> b == b) return FALSE; if (tmpbd -> a == b && tmpbd -> b == a) return FALSE; tmpbd = tmpbd -> next; } return TRUE; } /*! \fn void print_this_bond (int eid, int h, int fid, int inum, char * at_a, char * at_b, char ** the_bond) \brief print this bond to file \param eid equivalence id (not used for the time being) \param h the bond type \param fid the force field id \param inum the structural element id \param at_a 1st atom name \param at_b 2nd atom name \param the_bond the force field parameter(s) for this bond */ void print_this_bond (int eid, int h, int fid, int inum, char * at_a, char * at_b, char ** the_bond) { int j; gchar * node[3] = {"bd-h", "bd-q", "bd-m"}; gchar * aaa = g_strdup_printf ("%s", find_atom_key(fid, 2, at_a)); gchar * bbb = g_strdup_printf ("%s", find_atom_key(fid, 2, at_b)); if (eid < 0 || not_done (eid, find_atom_id (1, aaa), find_atom_id (1, bbb))) { if (eid > -1) { if (the_bonds[eid]) { tmpbd = the_bonds[eid]; while (tmpbd -> next) tmpbd = tmpbd -> next; tmpbd -> next = g_malloc0(sizeof*tmpbd -> next); tmpbd -> next -> prev = tmpbd; tmpbd = tmpbd -> next; } else { the_bonds[eid] = g_malloc0(sizeof*the_bonds[eid]); tmpbd = the_bonds[eid]; } tmpbd -> a = find_atom_id (0, aaa); tmpbd -> b = find_atom_id (0, bbb); tmpbd -> v[0] = string_to_double ((gpointer)the_bond[2]); tmpbd -> v[1] = string_to_double ((gpointer)the_bond[3]); } fprintf (fp, " <%s a=\"%d\" b=\"%d\" z_a=\"%d\" z_b=\"%d\"", node[h], find_atom_id (0, aaa), find_atom_id (0, bbb), find_atom_z (aaa), find_atom_z (bbb)); switch (h) { case 0: if (fid == CVFF || fid == CVFF_AUG || fid == CFF91 || fid == PCFF) { fprintf (fp, " K=\"%f\" R_zero=\"%f\"", string_to_double ((gpointer)the_bond[3]), string_to_double ((gpointer)the_bond[2])); } else { fprintf (fp, " K=\"%f\" R_zero=\"%f\"", string_to_double ((gpointer)the_bond[2]), string_to_double ((gpointer)the_bond[3])); } j = 4; break; case 1: fprintf (fp, " K=\"%f\" R_zero=\"%f\" KK=\"%f\" KKK=\"%f\"", string_to_double ((gpointer)the_bond[3]), string_to_double ((gpointer)the_bond[2]), string_to_double ((gpointer)the_bond[4]), string_to_double ((gpointer)the_bond[5])); j = 6; break; case 2: fprintf (fp, " D=\"%f\" R_zero=\"%f\" Alpha=\"%f\"", string_to_double ((gpointer)the_bond[3]), string_to_double ((gpointer)the_bond[2]), string_to_double ((gpointer)the_bond[4])); j = 5; break; } if (field_dim[inum+h] > j) { fprintf (fp, " info=\"%s\"", the_bond[j]); } fprintf (fp, "/>\n"); } else if (eid > -1) { g_debug ("Done:: tmpbd -> a= %d, tmpbd -> b= %d, tmpbd -> v[0]= %f, tmpbd -> v[1]= %f, this.v[0]= %f, this.v[1]=%f", tmpbd -> a, tmpbd -> b, tmpbd -> v[0], tmpbd -> v[1], string_to_double ((gpointer)the_bond[2]), string_to_double ((gpointer)the_bond[3])); } g_free (aaa); g_free (bbb); } /*! \fn void print_bond_table (int fid, int inum) \brief print force field bond table to file \param fid the force field id \param inum the structural element id */ void print_bond_table (int fid, int inum) { int h, i;//, j, k, l, m; gchar * bode[3] = {"bonds-h", "bonds-q", "bonds-m"}; gchar * desc[3] = {"Quadratic bonds:\n\n V(R) = K x (R - R0)^2\n" " With:\n - K = spring constant (kcal mol^-1 A^-2)\n - R = bond distance (A)\n - R0 = equilibrium distance (A)\n", "Quartic bonds:\n\n V(R) = K x (R - R0)^2 + K' x (R - R0)^3 + K'' x (R - R0)^4\n" " With:\n - K, K' and K'' = nth order spring constants (kcal mol^-1 A^-2)\n" " - R = bond distance (A)\n - R0 = equilibrium distance (A)", "Morse bonds:\n\n V(R) = D x (1 - exp(-ALPHA x (R - R0)))^2\n" " With:\n - D = well depth\n - ALPHA = well width\n - R = bond distance\n - R0 = equilibrium distance (A)"}; for (h=0; h<3; h++) { the_bonds[0] = the_bonds[1] = NULL; if (field_objects[inum+h]) { fprintf (fp, " <%s>\n", bode[h]); fprintf (fp, " \n", desc[h]); /*if (fid > CHARMMSI && fid < OPLSAAP) { for (i=0; i next) { tmpbd = tmpbd -> next; g_free (tmpbd -> prev); } g_free (tmpbd); the_bonds[j] = NULL; } } } fprintf (fp, " \n", bode[h]); } else*/ { for (i=0; i\n", bode[h]); } } /*if (the_bonds[0] || the_bonds[1]) { for (i=0; i<2; i++) { if (the_bonds[i]) { tmpbd = the_bonds[i]; while (tmpbd -> next) { tmpbd = tmpbd -> next; g_free (tmpbd -> prev); } g_free (tmpbd); } } }*/ } } typedef struct f_angl f_angl; struct f_angl { int a; int b; int c; float v[2]; f_angl * next; f_angl * prev; }; f_angl * the_angles[2]; f_angl * tmpan; /*! \fn gboolean not_done_an (int eid, int a, int b, int c) \brief was this case already considered ? \param eid equivalence id (not used for the time being) \param a 1st atom id \param b 2nd atom id \param c 3rd atom id */ gboolean not_done_an (int eid, int a, int b, int c) { tmpan = the_angles[eid]; while (tmpan) { if (tmpan -> a == a && tmpan -> b == b && tmpan -> c == c) return FALSE; if (tmpan -> a == c && tmpan -> b == b && tmpan -> c == a) return FALSE; tmpan = tmpan -> next; } return TRUE; } /*! \fn void print_this_angle (int eid, int h, int fid, int inum, int ub, char * at_a, char * at_b, char * at_c, char ** the_angle) \brief print this angle to file \param eid equivalence id (not used for the time being) \param h 0 = angle, 1 = angle restraints \param fid the force field id \param inum the structural element id \param ub Urey-Bradley parameter for the CHARRM FF, 2 for CHARMM FF, 0 otherwise \param at_a 1st atom name \param at_b 2nd atom name \param at_c 3rd atom name \param the_angle the force field parameter(s) for this angle */ void print_this_angle (int eid, int h, int fid, int inum, int ub, char * at_a, char * at_b, char * at_c, char ** the_angle) { int j; gchar * node[2] = {"ang-h", "ang-q"}; gchar * aaa = g_strdup_printf ("%s", find_atom_key(fid, 3, at_a)); gchar * bbb = g_strdup_printf ("%s", find_atom_key(fid, 3, at_b)); gchar * ccc = g_strdup_printf ("%s", find_atom_key(fid, 3, at_c)); if (eid < 0 || not_done_an (eid, find_atom_id (1, aaa), find_atom_id (1, bbb), find_atom_id (1, ccc))) { if (eid > -1) { if (the_angles[eid]) { tmpan = the_angles[eid]; while (tmpan -> next) tmpan = tmpan -> next; tmpan -> next = g_malloc0(sizeof*tmpan -> next); tmpan -> next -> prev = tmpan; tmpan = tmpan -> next; } else { the_angles[eid] = g_malloc0(sizeof*the_angles[eid]); tmpan = the_angles[eid]; } tmpan -> a = find_atom_id (0, aaa); tmpan -> b = find_atom_id (0, bbb); tmpan -> c = find_atom_id (0, ccc); tmpan -> v[0] = string_to_double ((gpointer)the_angle[3]); tmpan -> v[1] = string_to_double ((gpointer)the_angle[4]); } fprintf (fp, " <%s a=\"%d\" b=\"%d\" c=\"%d\" z_a=\"%d\" z_b=\"%d\" z_c=\"%d\"", node[h], find_atom_id (0, aaa), find_atom_id (0, bbb), find_atom_id (0, ccc), find_atom_z (aaa), find_atom_z (bbb), find_atom_z (ccc)); switch (h) { case 0: if (fid >= CVFF && fid < COMPASS) { fprintf (fp, " K=\"%f\" Theta_zero=\"%f\"", string_to_double ((gpointer)the_angle[4]), string_to_double ((gpointer)the_angle[3])); } else { fprintf (fp, " K=\"%f\" Theta_zero=\"%f\"", string_to_double ((gpointer)the_angle[3]), string_to_double ((gpointer)the_angle[4])); } if (ub) { fprintf (fp, " Kub=\"%f\" S_zero=\"%f\"", string_to_double ((gpointer)the_angle[5]), string_to_double ((gpointer)the_angle[6])); } j = (ub) ? 7 : 5; break; case 1: fprintf (fp, " K=\"%f\" Theta_zero=\"%f\" KK=\"%f\" KKK=\"%f\"", string_to_double ((gpointer)the_angle[4]), string_to_double ((gpointer)the_angle[3]), string_to_double ((gpointer)the_angle[5]), string_to_double ((gpointer)the_angle[6])); j = 7; break; } if (field_dim[inum+h] > j) { fprintf (fp, " info=\"%s\"", the_angle[j]); } fprintf (fp, "/>\n"); } else if (eid > -1) { g_debug ("Done:: tmpan -> a= %d, tmpan -> b= %d, tmpan -> c= %d, tmpan -> v[0]= %f, tmpan -> v[1]= %f, this.v[0]= %f, this.v[1]=%f", tmpan -> a, tmpan -> b, tmpan -> c, tmpan -> v[0], tmpan -> v[1], string_to_double ((gpointer)the_angle[3]), string_to_double ((gpointer)the_angle[4])); } g_free (aaa); g_free (bbb); g_free (ccc); } /*! \fn void print_angle_table (int fid, int inum) \brief print angle(s) table to file \param fid the field id \param inum the object id */ void print_angle_table (int fid, int inum) { int h, i;//, j, k, l; int ub = (fid > AMBER99 && fid <= CHARMMSI) ? 2 : 0; // Urey-Bradley parameter for the CHARMM FF gchar * aode[2] = {"angles-h", "angles-q"}; gchar * desc[3] = {"Quadratic angles:\n\n V(Theta) = K x (Theta - Theta0)^2\n" " With:\n - K = spring constant (kcal mol^-1 rad^-2)\n - Theta = angle (°)\n - Theta0 = equilibrium angle (°)", "Quartic angles:\n\n V(Theta) = K x (Theta - Theta0)^2 + K' x (Theta - Theta0)^3 + K' x (Theta - Theta0)^4\n" " With:\n - K, K' and K'' = nth order spring constant (kcal mol^-1 rad^-nth)\n - Theta = angle (°)\n - Theta0 = equilibrium angle (°)", "Quadratic angles + Urey-Bradley (UB) parameters:\n\n V(Theta) = K x (Theta - Theta0)^2\n" " With:\n - K = spring constant (kcal mol^-1 rad^-2)\n - Theta = angle (°)\n - Theta0 = equilibrium angle(°)\n" " V(S) = Kub x (R - Rub)^2\n" " With:\n - Kub = spring constant (kcal mol^-1 A^-2)\n - S = distance 1-3 (A)\n - S0 = equilibrium distance 1-3 (A)"}; for (h=0; h<2; h++) { the_angles[0] = the_angles[1] = NULL; if (field_objects[inum+h]) { fprintf (fp, " <%s>\n", aode[h]); fprintf (fp, " \n", desc[h+ub]); /*if (fid > CHARMMSI && fid < OPLSAAP) { for (i=0; i next) { tmpan = tmpan -> next; g_free (tmpan -> prev); } g_free (tmpan); the_angles[j] = NULL; } } } } else*/ { for (i=0; i\n", aode[h]); } } } /*! \fn void print_dihedral_table (int fid, int inum) \brief print dihedral(s) table to file \param fid the force field id \param inum the object id */ void print_dihedral_table (int fid, int inum) { int h, i, j; gchar * dode[2] = {"dihedrals-c", "dihedrals-ccc"}; gchar * node[2] = {"dih-c", "dih-ccc"}; gchar * desc[2] = {"Dihedrals / torsions:\n\n V(Phi) = K x (1 + cos(n x Phi - Phi0))\n" " With:\n - K = spring constant (kcal mol^-1 rad^-2)\n - Phi = dihedral angle (°)\n - n = multiplicity\n - Phi0 = phase shift angle (°)", "Dihedrals / torsions\n\n V(Phi) = K x (Phi - Phi0)^2 + K' x (Phi - Phi0)^3 + K'' x (Phi - Phi0)^4\n" " With:\n - K, K' and K'' = nth order spring constant (kcal mol^-1 rad^-nth)\n - Phi = dihedral angle (°)\n - Phi0 = phase shift angle (°)"}; for (h=0; h<2; h++) { if (field_objects[inum+h]) { fprintf (fp, " <%s>\n", dode[h]); fprintf (fp, " \n", desc[h]); for (i=0; i j) { fprintf (fp, " info=\"%s\"", field_dihedrals[h][i][j]); } fprintf (fp, "/>\n"); } fprintf (fp, " \n", dode[h]); } } } /*! \fn void print_improper_table (int fid, int inum) \brief print improper(s) table to file \param fid the force field id \param inum the object id */ void print_improper_table (int fid, int inum) { int i, j; gchar * desc[2] = {"Impropers:\n\n V(Phi) = K x (1 + cos(n x Phi - Phi0))\n" " With:\n - K = spring constant (kcal mol^-1 rad^-2)\n - Phi = angle (°)\n - n = multiplicity\n - Phi0 = equilibrium angle (°)", "Impropers: V(Phi) = K x (Phi - Phi0)^2\n\n" " With:\n - K = spring constant (kcal mol^-1 rad^-2)\n - Phi = angle (°)\n - Phi0 = equilibrium angle (°)"}; int wid = (fid < 4 || fid == OPLSAAP || fid == OPLSAAR) ? 3 : 2; if (field_objects[inum]) { fprintf (fp, " \n"); fprintf (fp, " \n", desc[wid == 3 ? 0 : 1]); for (i=0; i AMBER99 && fid < CVFF) ? field_impropers[i][0]: field_impropers[i][1])); gchar * bbb = g_strdup_printf ("%s", find_atom_key(fid, 5, (fid > AMBER99 && fid < CVFF) ? field_impropers[i][1]: field_impropers[i][0])); gchar * ccc = g_strdup_printf ("%s", find_atom_key(fid, 5, field_impropers[i][2])); gchar * ddd = g_strdup_printf ("%s", find_atom_key(fid, 5, field_impropers[i][3])); fprintf (fp, " AMBER99 && fid < CVFF) { fprintf (fp, " K=\"%f\" Phi_zero=\"%f\"", string_to_double ((gpointer)field_impropers[i][4]), string_to_double ((gpointer)field_impropers[i][6])); j = 7; } else { fprintf (fp, " K=\"%f\" Phi_zero=\"%f\"", string_to_double ((gpointer)field_impropers[i][4]), string_to_double ((gpointer)field_impropers[i][5])); j = 6; } if (field_dim[inum] > j) { fprintf (fp, " info=\"%s\"", field_impropers[i][j]); } fprintf (fp, "/>\n"); } fprintf (fp, " \n"); } } /*! \fn void print_inversion_table (int fid, int inum) \brief print inversion(s) table to file \param fid the force field id \param inum the object id */ void print_inversion_table (int fid, int inum) { int i; gchar * desc = {"Inversions\n 0= Key_a, 1= Key_b, 2= Key_c, 3= Key_d, 4= K, 5= Phi0, 7= FF info\n\n V(φ) = K x (Phi - Phi0)^2\n" " With:\n - K = spring constant (kcal mol^-1 rad^-2)\n - Phi = angle (°)\n - Phi0 = equilibrium angle (°)"}; if (field_objects[inum]) { fprintf (fp, " \n"); fprintf (fp, " \n", desc); for (i=0; i 6) { fprintf (fp, " info=\"%s\"", field_inversions[i][6]); } fprintf (fp, "/>\n"); } fprintf (fp, " \n"); } } /*! \fn void print_vdw_table (int fid, int inum) \brief print VdW table to file \param fid the force field id \param inum the object id */ void print_vdw_table (int fid, int inum) { int i, j, k, l; gchar * desc[3] = {"Non-bonded 12-6\n 0= Key_a, 1= Epslion, 2= R0 (A), 3= FF info\n\n Non-bonded (12-6): V(rij) = Epslion(ij) x [(R0(ij)/rij)^12 - 2 x (R0(ij)/rij)^6]\n" " With:\n" " Epslion(ij) = sqrt(Epslion(i) x Epslion(j)) and Epslion(i) (kcal mol^-1)\n" " R0(ij)= (R0(i) + R0(j))/2 and R0(i) (A)\n", "Non-bonded 12-6\n 0= Key_a, 1= A, 2= B, 3= FF info\n\n Non-bonded (12-6): V(rij) = A(ij)/rij^12 - B(ij)/rij^6\n" " With:\n" " A(ij) = sqrt(Ai x Aj)\n" " B(ij) = sqrt(Bi x Bj)\n", "Non-bonded 9-6\n 0= Key_a, 1= Epslion, 2= R0 (A), 3= FF info\n\n Non-bonded (9-6): V(rij) = Epslion(ij) x [2 x (R0(ij)/rij)^9 - 3 x (R0(ij)/rij)^6]\n" " With:\n" " Epslion(ij) = 2 x sqrt(Epslion(i) x Epslion(j)) x R0(i)^3 x R0(j)^3 / [ R0(i)^6 + R0(j)^6 ] and Epslion(i) (kcal mol^-1)\n" " R0(ij)= ((R0(i)^6 + R0(j)^6)/2) ^ 1/6 and R0(i) (A)\n"}; int wid = ((fid >= CHARMM22P && fid <= CHARMMSI) || (fid >= OPLSAAP)) ? 1 : 0; int did = (fid <= CHARMMSI || fid >= OPLSAAP) ? 0 : (fid == CVFF || fid == CVFF_AUG) ? 1 : 2; int cid = (fid > COMPASS) ? 1 : 0; int wdi[2] = {2, 4}; if (field_objects[inum]) { fprintf (fp, " \n"); fprintf (fp, " \n", desc[did]); for (i=0; i= CHARMM22P && fid <= CHARMMSI) || fid > COMPASS) { fprintf (fp, " Eii=\"%f\" Rii=\"%f\"", string_to_double ((gpointer)field_vdw[i][3+2*cid]), string_to_double ((gpointer)field_vdw[i][4+2*cid])); } } j = wdi[wid]+1+2*cid; if (field_dim[inum] > j) { fprintf (fp, " info=\"%s\"", field_vdw[i][j]); } fprintf (fp, "/>\n"); if (fid <= AMBER99) { for (k=0; k j) { fprintf (fp, " info=\"Equi. to %s\"", field_vdw[i][0]); } fprintf (fp, "/>\n"); } } } } } } fprintf (fp, " \n"); } } field_object_match * field_objects_id[6] = {NULL, NULL, NULL, NULL, NULL, NULL}; field_object_match * tmp_obj_id; char *** ff_atoms; // 0 = Quadratic, 1 = Quartic, 2 = Morse field_data * ff_bonds[3]; field_data * ff_angles[2]; field_data * ff_dih[2]; field_data * ff_imp; field_data * ff_inv; field_data * ff_vdw; int ff_unit; int * ff_objects; int * ff_dim; int * ff_info; int * ff_key; /*! \fn int field_find_atoms () \brief retrieve matching atom from force field data base */ int field_find_atoms () { int i, j, k, l; atoms_id = allocint (tmp_proj -> nspec); extraz_id = allocdint (5, tmp_proj -> nspec); atoms_id_list = g_malloc0(tmp_proj -> nspec*sizeof*atoms_id_list); k = 0; for (i=0; i nspec; i++) { atoms_id[i] = 0; #ifdef DEBUG g_debug ("Searching field atoms for spec: %d, label= %s, z= %d", i, tmp_proj -> chemistry -> label[i], (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][i]); #endif for (j=0; j chemistry -> label[i]), exact_name(ff_atoms[j][0])) == 0) { atoms_id[i] ++; } } if (atoms_id[i] > 0) k ++; } for (i=0; i nspec; i++) { #ifdef DEBUG g_debug ("For spec: %d, number of match = %d", i, atoms_id[i]); #endif if (atoms_id[i]) { atoms_id_list[i] = g_malloc0(atoms_id[i]*sizeof*atoms_id_list[i]); l = 0; for (j=0; j chemistry -> label[i]), exact_name(ff_atoms[j][0])) == 0) { atoms_id_list[i][l] = j; l ++; } } } } return k; } int is_extra; /*! \fn gboolean is_a_match (int * data, int num, int val[4]) \brief is this a match ? \param data the set of parameter(s) \param num the number of parameter \param val the target value(s) */ gboolean is_a_match (int * data, int num, int val[4]) { int i; for (i=0; i 0) { for (i=0; i atoms_z[i], 2, val); break; case FANG: do_this_id = is_a_match (ff_angles[h] -> atoms_z[i], 3, val); break; case FDIH: do_this_id = is_a_match (ff_dih[h] -> atoms_z[i], 4, val); break; case FIMP: do_this_id = is_a_match (ff_imp -> atoms_z[i], 4, val); break; case FINV: do_this_id = is_a_match (ff_inv -> atoms_z[i], 4, val); break; case FNBD: do_this_id = is_a_match (ff_vdw -> atoms_z[i], 1, val); break; default: break; } if (do_this_id) { save_this_id = TRUE; if (field_objects_id[oid]) { test_obj_id = field_objects_id[oid]; while (test_obj_id != NULL) { if (test_obj_id -> type == h && test_obj_id -> oid == i) { save_this_id = FALSE; break; } test_obj_id = test_obj_id -> next; } if (save_this_id) { tmp_obj_id -> next = g_malloc0(sizeof*tmp_obj_id -> next); tmp_obj_id -> next -> id = tmp_obj_id -> id + 1; tmp_obj_id = tmp_obj_id -> next; } } else { field_objects_id[oid] = g_malloc0(sizeof*field_objects_id[oid]); tmp_obj_id = field_objects_id[oid]; } if (save_this_id) { // if (oid == 3) g_debug ("Saving Impropers, sa= %d, sb= %d, sc= %d, sd= %d", sa, sb, sc, sd); tmp_obj_id -> obj = oid; tmp_obj_id -> type = h; tmp_obj_id -> oid = i; if (oid < 5) { if (sa > -1) extraz_id[oid][sa] += is_extra; if (sb > -1) extraz_id[oid][sb] += is_extra; if (sc > -1) extraz_id[oid][sc] += is_extra; if (sd > -1) extraz_id[oid][sd] += is_extra; } } } } } } } /*! \fn void field_find_bonds () \brief retrieve available bond parameters in force field database */ void field_find_bonds () { int i, j, k, l; for (i=0; i nspec-1; i++) { if (atoms_id[i] > 0) { for (j=i+1; j nspec; j++) { if (atoms_id[j] > 0) { k = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][i]; l = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][j]; find_object_ijkl (1, 1, 0, i, k, j, l, -1, -1, -1, -1); find_object_ijkl (1, 1, 0, j, l, i, k, -1, -1, -1, -1); } } } } for (i=0; i nspec; i++) { if (atoms_id[i] > 0) { k = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][i]; find_object_ijkl (1, 1, 0, i, k, i, k, -1, -1, -1, -1); } } } /*! \fn void field_find_angles () \brief retrieve available angle parameters in force field database */ void field_find_angles () { int i, j, k, l, m, n; for (i=0; i nspec; i++) { if (atoms_id[i] > 0) { l = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][i]; for (j=0; j nspec; j++) { if (atoms_id[j] > 0) { m = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][j]; for (k=0; k nspec; k++) { if (atoms_id[k] > 0) { n = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][k]; find_object_ijkl (0, 4, 1, i, l, j, m, k, n, -1, -1); } } } } } } } /*! \fn void field_find_dihedrals (int id) \brief retrieve available dihedral parameters in force field database \param id 0 = dihedral(s), 1 = improper(s), 2 = inversion(s) */ void field_find_dihedrals (int id) { int i, j, k, l, m, n, o, p, q; for (i=0; i nspec; i++) { if (atoms_id[i] > 0) { m = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][i]; for (j=0; j nspec; j++) { if (atoms_id[j] > 0) { n = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][j]; for (k=0; k nspec; k++) { if (atoms_id[k] > 0) { o = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][k]; for (l=0; l nspec; l++) { if (atoms_id[l] > 0) { p = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][l]; q = (id) ? 1 : 0; find_object_ijkl (-q, 6+q*2+q*(id-1), 2+id, i, m, j, n, k, o, l, p); } } } } } } } } } /*! \fn void field_find_vdw () \brief retrieve available VdW parameters in force field database */ void field_find_vdw () { int i, j; for (i=0; i nspec; i++) { if (atoms_id[i] > 0) { j = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][i]; find_object_ijkl (-1, 10, 5, i, j, -1, -1, -1, -1, -1, -1); } } } #ifdef DEBUG /*! \fn void print_all (int oid) \brief print found force field data \param oid the type of structural element */ void print_all (int oid) { gchar * prop[7] = {"atom", "bond", "angle", "dihedral", "improper", "inversion", "vdw"}; g_debug ("Field %s found: %d", prop[oid-1], tmp_obj_id -> id+1); while (tmp_obj_id != NULL) { g_debug (" %s N° %d: h= %d, oid= %d", prop[oid-1], tmp_obj_id -> id+1, tmp_obj_id -> type, tmp_obj_id -> oid); tmp_obj_id = tmp_obj_id -> next; } } #endif /*! \fn float get_force_field_atom_mass (int sp, int num) \brief get force field atomic mass \param sp the target chemical species \param num the atom id */ float get_force_field_atom_mass (int sp, int num) { g_debug ("sp= %d, atoms_id[%d]= %d, num= %d", sp, sp, atoms_id[sp], num); if (atoms_id[sp] > 0 && num >= 0 && num <= atoms_id[sp]) { return string_to_double ((gpointer)ff_atoms[atoms_id_list[sp][num]][1]); } else { return 0.0; } } #ifdef USE_ATOMS gchar * filetoread; /*! \fn void clean_this_field_data (xmlDoc * doc, xmlTextReaderPtr reader) \brief free force field XML file data \param doc the xmlDoc pointer to free \param reader the XML reader to free */ void clean_this_field_data (xmlDoc * doc, xmlTextReaderPtr reader) { clean_xml_data (doc, reader); if (filetoread) g_free (filetoread); filetoread = NULL; if (ff_objects) g_free (ff_objects); ff_objects = NULL; if (ff_dim) g_free (ff_dim); ff_dim = NULL; if (ff_key) g_free (ff_key); ff_key = NULL; if (ff_info) g_free (ff_info); ff_info = NULL; int i; for (i=0; i<3; i++) { if (i < 2) { if (ff_angles[i]) { g_free (ff_angles[i]); ff_angles[i] = NULL; } if (ff_dih[i]) { g_free (ff_dih[i]); ff_dih[i] = NULL; } } if (ff_bonds[i]) { g_free (ff_bonds[i]); ff_bonds[i] = NULL; } } if (ff_imp) { g_free (ff_imp); ff_imp = NULL; } if (ff_inv) { g_free (ff_inv); ff_inv = NULL; } if (ff_vdw) { g_free (ff_vdw); ff_vdw = NULL; } } /*! \fn gchar * open_field_file (int field) \brief open force field XML file \param field the id of the force field to open */ gchar * open_field_file (int field) { int i, j; xmlDoc * doc; xmlTextReaderPtr reader; xmlNodePtr racine, f_node; xmlNodePtr n_node, m_node, o_node; field_data * ff_data; xmlAttrPtr prop; xmlChar * content; const xmlChar fml[7]="ff-xml"; gchar * data_nodes[11]={"atoms", "bonds-h", "bonds-q", "bonds-m", "angles-h", "angles-q", "dihedrals-c", "dihedrals-ccc", "impropers", "inversions", "non-bonded"}; gchar * data_n[11]={"at", "bd-h", "bd-q", "bd-m", "ang-h", "ang-q", "dih-c", "dih-ccc", "imp", "inv", "non-bd"}; gchar * str; filetoread = NULL; ff_objects = NULL; ff_dim = NULL; ff_key = NULL; ff_info = NULL; ff_unit = -1; gchar * force_field_name; gboolean setinfo; int odim[10] = {2, 2, 2, 3, 3, 4, 4, 4, 4, 1}; /* * build an xmlReader for that file */ #ifdef G_OS_WIN32 filetoread = g_strdup_printf ("%s\\force_fields\\%s.ffl", PACKAGE_LIB_DIR, field_ffl[field]); #else filetoread = g_strdup_printf ("%s/force_fields/%s.ffl", PACKAGE_LIB_DIR, field_ffl[field]); #endif reader = xmlReaderForFile(filetoread, NULL, 0); if (reader == NULL) { g_warning ("Error reading FF file %s, reader error ?!", filetoread); return NULL; } else { doc = xmlParseFile(filetoread); if (doc == NULL) { g_warning ("Error reading FF file %s, xmlParsing error ?!", filetoread); clean_this_field_data (doc, reader); return NULL; } racine = xmlDocGetRootElement(doc); if (racine == NULL) { g_warning ("Error reading FF file %s, missing XML root node ?!", filetoread); clean_this_field_data (doc, reader); return NULL; } if (g_strcmp0 ((char *)(racine -> name), (char *)fml) != 0) { g_warning ("Error reading FF file %s, missing ff-xml node ?!", filetoread); clean_this_field_data (doc, reader); return NULL; } // nodes :: field-name, data, atoms, bonds, angles, dihedrals, impropers, inversons, non-bonded, bond-inc ? f_node = findnode (racine -> children, "force-field"); if (f_node == NULL) { g_warning ("Error reading FF file %s, missing force field node ?!", filetoread); clean_this_field_data (doc, reader); return NULL; } content = xmlNodeGetContent(f_node); force_field_name = g_strdup_printf ("%s", content); xmlFree (content); f_node = findnode (racine -> children, "units"); if (f_node == NULL) { g_warning ("Error reading FF file %s, missing units node ?!", filetoread); clean_this_field_data (doc, reader); return NULL; } content = xmlNodeGetContent(f_node); str = g_strdup_printf ("%s", content); xmlFree (content); for (i=0; i<4;i++) { if (g_strcmp0 (str, fnames[activef][0][i]) == 0) { ff_unit = i; break; } } if (ff_unit < 0) { g_warning ("Error reading FF file %s, units, ff_unit = %d < 0 ?!", filetoread, ff_unit); clean_this_field_data (doc, reader); return NULL; } f_node = findnode (racine -> children, "ff-data"); if (f_node == NULL) { g_warning ("Error reading FF file %s, missing ff-data node ?!", filetoread); clean_this_field_data (doc, reader); return NULL; } ff_objects = g_malloc0(11*sizeof*ff_objects); ff_dim = g_malloc0(11*sizeof*ff_dim); //ff_info = g_malloc0(11*sizeof*ff_key); ff_key = g_malloc0(10*sizeof*ff_key); for (i=0; i<11; i++) { m_node = findnode (f_node -> children, data_nodes[i]); if (m_node == NULL) { g_warning ("Error reading FF file %s, ff-data, i= %d, missing node ?!", filetoread, i); clean_this_field_data (doc, reader); return NULL; } content = xmlNodeGetContent(m_node); ff_objects[i] = (int)string_to_double ((gpointer)content); xmlFree (content); if (ff_objects[i] < 0) { g_warning ("Error reading FF file %s, ff-data, ff_objects[%d] = %d < 0 ?!", filetoread, i, ff_objects[i]); clean_this_field_data (doc, reader); return NULL; } else if (ff_objects[i]) { prop = m_node -> properties; if (prop == NULL) { g_warning ("Error reading FF file %s, ff-data, i= %d, missing node prop ?!", filetoread, i); clean_this_field_data (doc, reader); return NULL; } while (prop) { o_node = prop -> children; if (o_node == NULL) { g_warning ("Error reading FF file %s, ff-data, i= %d, missing prop data ?!", filetoread, i); clean_this_field_data (doc, reader); return NULL; } content = xmlNodeGetContent(o_node); if (g_strcmp0 ("dim",(char *)prop -> name) == 0) { ff_dim[i] = (int) string_to_double ((gpointer)content); } /*else if (g_strcmp0 ("info",(char *)prop -> name) == 0) { ff_info[i] = (int)string_to_double ((gpointer)content); }*/ else if (g_strcmp0 ("pot",(char *)prop -> name) == 0) { ff_key[i-1] = (int)string_to_double ((gpointer)content); } xmlFree (content); prop = prop -> next; } } } for (i=0; i<11; i++) { if (ff_objects[i]) { f_node = findnode (racine -> children, data_nodes[i]); if (f_node == NULL) { g_warning ("Error reading FF file %s, i= %d, missing node ?!", filetoread, i); clean_this_field_data (doc, reader); return NULL; } n_node = f_node -> children; if (n_node == NULL) { g_warning ("Error reading FF file %s, i= %d, missing child node ?!", filetoread, i); clean_this_field_data (doc, reader); return NULL; } if (i == 0) { ff_atoms = g_malloc0(ff_objects[0]*sizeof*ff_atoms); for (j=0; j 0) { ff_data -> atoms_z = g_malloc0(ff_objects[i]*sizeof*ff_data -> atoms_z); ff_data -> atoms_id = g_malloc0(ff_objects[i]*sizeof*ff_data -> atoms_id); ff_data -> npar = ff_dim[i]; ff_data -> key = ff_key[i-1]; ff_data -> param = g_malloc0(ff_objects[i]*sizeof*ff_data -> param); for (j=0; j atoms_z[j] = g_malloc0(odim[i-1]*sizeof*ff_data -> atoms_z[j]); ff_data -> atoms_id[j] = g_malloc0(odim[i-1]*sizeof*ff_data -> atoms_id[j]); ff_data -> param[j] = g_malloc0(ff_dim[i]*sizeof*ff_data -> param[j]); } ff_data -> info = g_malloc0(ff_objects[i]*sizeof*ff_data -> info); } setinfo = FALSE; for (j=0; j properties; if (prop == NULL) { g_warning ("Error reading FF file %s, i= %d, j= %d, missing prop ?!", filetoread, i, j); clean_this_field_data (doc, reader); return NULL; } while (prop) { o_node = prop -> children; if (o_node == NULL) { g_warning ("Error reading FF file %s, i= %d, j= %d, missing prop node ?!", filetoread, i, j); clean_this_field_data (doc, reader); return NULL; } content = xmlNodeGetContent(o_node); switch (i) { case 0: if (g_strcmp0 ("label",(char *)prop -> name) == 0) { ff_atoms[j][0] = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("mass",(char *)prop -> name) == 0) { ff_atoms[j][1] = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("key",(char *)prop -> name) == 0) { ff_atoms[j][2] = g_strdup_printf ("%s", content); } else if (g_strcmp0 ("info",(char *)prop -> name) == 0) { ff_atoms[j][3] = g_strdup_printf ("%s", content); } else { g_warning ("Error reading FF file %s, i= %d, j= %d, unexpected node ?!", filetoread, i, j); clean_this_field_data (doc, reader); return NULL; } break; default: if (g_strcmp0 ("a",(char *)prop -> name) == 0) { ff_data -> atoms_id[j][0] = (int) string_to_double ((gpointer)content); } else if (g_strcmp0 ("b",(char *)prop -> name) == 0) { ff_data -> atoms_id[j][1] = (int) string_to_double ((gpointer)content); } else if (g_strcmp0 ("c",(char *)prop -> name) == 0) { ff_data -> atoms_id[j][2] = (int) string_to_double ((gpointer)content); } else if (g_strcmp0 ("d",(char *)prop -> name) == 0) { ff_data -> atoms_id[j][3] = (int) string_to_double ((gpointer)content); } else if (g_strcmp0 ("z_a",(char *)prop -> name) == 0) { ff_data -> atoms_z[j][0] = (int) string_to_double ((gpointer)content); } else if (g_strcmp0 ("z_b",(char *)prop -> name) == 0) { ff_data -> atoms_z[j][1] = (int) string_to_double ((gpointer)content); } else if (g_strcmp0 ("z_c",(char *)prop -> name) == 0) { ff_data -> atoms_z[j][2] = (int) string_to_double ((gpointer)content); } else if (g_strcmp0 ("z_d",(char *)prop -> name) == 0) { ff_data -> atoms_z[j][3] = (int) string_to_double ((gpointer)content); } else if (i > 0 && g_strcmp0 ("info",(char *)prop -> name) == 0) { ff_data -> info[j] = g_strdup_printf ("%s", content); setinfo = TRUE; } else { if (i == 10) { // Non-bonded: 12-6: E_i, R_i, E_14, R_14 if (g_strcmp0 ("Ei",(char *)prop -> name) == 0) { ff_data -> param[j][0] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("Ri",(char *)prop -> name) == 0) { ff_data -> param[j][1] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("Eii",(char *)prop -> name) == 0) { ff_data -> param[j][2] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("Rii",(char *)prop -> name) == 0) { ff_data -> param[j][3] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("A",(char *)prop -> name) == 0) { ff_data -> param[j][0] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("B",(char *)prop -> name) == 0) { ff_data -> param[j][1] = string_to_double ((gpointer)content); } else { g_warning ("Error reading FF file %s, i= %d, j= %d, unexpected node ?! node name= %s", filetoread, i, j, (char *)prop -> name); clean_this_field_data (doc, reader); xmlFree (content); return NULL; } } else { // Bonds: Harm: K, R0 // Bonds: Quartic: K, R_0, K', K'' // Bonds: Morse: D, R_0, Alpha // Angle: Quartic: K, Theta_0, K', K'' // Dihedral: Cosine: K, Phi_0, n // Dihedral: Cosine 3: K, Phi_0, K', K'' // Improper: Cosine: K, n, Phi_0 / Harm: K, Phi_0 // Inversion: Harm: K, Phi_0 if (g_strcmp0 ("K",(char *)prop -> name) == 0) { ff_data -> param[j][0] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("R_zero",(char *)prop -> name) == 0) { ff_data -> param[j][1] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("Theta_zero",(char *)prop -> name) == 0) { ff_data -> param[j][1] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("Phi_zero",(char *)prop -> name) == 0) { ff_data -> param[j][1] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("KK",(char *)prop -> name) == 0) { ff_data -> param[j][2] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("KKK",(char *)prop -> name) == 0) { ff_data -> param[j][3] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("Kub",(char *)prop -> name) == 0) { ff_data -> param[j][2] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("S_zero",(char *)prop -> name) == 0) { ff_data -> param[j][3] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("n",(char *)prop -> name) == 0) { ff_data -> param[j][2] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("D",(char *)prop -> name) == 0) { ff_data -> param[j][0] = string_to_double ((gpointer)content); } else if (g_strcmp0 ("Alpha",(char *)prop -> name) == 0) { ff_data -> param[j][2] = string_to_double ((gpointer)content); } else { g_warning ("Error reading FF file %s, i= %d, j= %d, unexpected node ?! node name= %s", filetoread, i, j, (char *)prop -> name); xmlFree (content); clean_this_field_data (doc, reader); return NULL; } } } break; } xmlFree (content); prop = prop -> next; } n_node = n_node -> next; } if (i > 0 && ! setinfo) { g_free (ff_data -> info); ff_data -> info = NULL; } /*if (i==0) { for (j=0; j next) { tmp_obj_id = tmp_obj_id -> next; g_free (tmp_obj_id -> prev); } g_free (tmp_obj_id); field_objects_id[i] = NULL; } } gchar * name = open_field_file (id); if (g_strcmp0 (name, field_acro[id]) != 0) { // Error in xml file ?! tmp_field -> type = -1; } else if (name) { int spf = field_find_atoms (); if (spf < tmp_proj -> nspec) { // Some atomic species are not described in this force field // Take action ? } int i; for (i=0; i<6; i++) { if (field_objects_id[i]) { tmp_obj_id = field_objects_id[i]; while (tmp_obj_id -> next) { tmp_obj_id = tmp_obj_id -> next; g_free (tmp_obj_id -> prev); } g_free (tmp_obj_id); field_objects_id[i] = NULL; } } // Bonds tmp_obj_id = NULL; field_find_bonds (); #ifdef DEBUG if (tmp_obj_id) print_all (FBDS); #endif // Angles tmp_obj_id = NULL; field_find_angles (); #ifdef DEBUG if (tmp_obj_id) print_all (FANG); #endif // Dihedrals tmp_obj_id = NULL; field_find_dihedrals (0); #ifdef DEBUG if (tmp_obj_id) print_all (FDIH); #endif // Impropers tmp_obj_id = NULL; field_find_dihedrals (1); #ifdef DEBUG if (tmp_obj_id) print_all (FIMP); #endif // Inversions tmp_obj_id = NULL; field_find_dihedrals (2); #ifdef DEBUG if (tmp_obj_id) print_all (FINV); #endif // Vdw tmp_obj_id = NULL; field_find_vdw (); #ifdef DEBUG if (tmp_obj_id) print_all (FNBD); #endif } #else int i; gchar * str; //FILE * hp = fopen ("force_fields.h", "w"); for (i=0; i\n"); fprintf (fp, "\n"); fprintf (fp, "\n"); fprintf (fp, " %s\n", field_acro[i]); fprintf (fp, " \n", ffo_file[i]); fprintf (fp, " k-calories per mol\n"); g_free (str); print_object_dim_and_key_tables (i); print_atom_table (i); print_bond_table (i, 3); print_angle_table (i, 6); print_dihedral_table (i, 8); print_improper_table (i, 11); print_inversion_table (i, 10); print_vdw_table (i, 12); //print_increment_table (i, 13) fprintf (fp, "\n"); fclose (fp); } //fclose (hp); #endif } atomes_1.3.1/src/calc/force_fields/charmm22_prot.c0000664000175000017500000037463515212624223021467 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm22_prot.c * @short CHARMM-charmm22_prot force field, from 'charmm22_prot' * @author Sébastien Le Roux */ /* * This file: 'charmm22_prot.c' * * Contains: * CHARMM-charmm22_prot force field, data from taken from: - the file: 'charmm22_prot' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm22_prot_atoms[47][5] Bonds : charmm22_prot_bonds[122][5] Angles : charmm22_prot_angles[324][8] Dihedrals : charmm22_prot_dihedrals[445][8] Impropers : charmm22_prot_impropers[34][8] Non bonded : charmm22_prot_vdw[47][6] */ #include "global.h" int charmm22_prot_objects[14] = {47, 0, 0, 122, 0, 0, 324, 0, 445, 0 , 0, 34, 47, 0}; int charmm22_prot_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm22_prot info */ char * charmm22_prot_atoms[47][5]= {{"H", "1.00800", "H", "polar H", "41"}, {"H", "1.00800", "HC", "N-ter H", "42"}, {"H", "1.00800", "HA", "nonpolar H", "43"}, {"H", "1.00800", "HP", "aromatic H", "44"}, {"H", "1.00800", "HB", "backbone H", "45"}, {"H", "1.00800", "HR1", "his he1, (+) his HG,HD2", "46"}, {"H", "1.00800", "HR2", "(+) his HE1", "47"}, {"H", "1.00800", "HR3", "neutral his HG, HD2", "48"}, {"H", "1.00800", "HS", "thiol hydrogen", "49"}, {"H", "1.00800", "HE1", "for alkene; RHC=CR", "50"}, {"H", "1.00800", "HE2", "for alkene; H2C=CR", "51"}, {"C", "12.01100", "C", "carbonyl C, peptide backbone", "52"}, {"C", "12.01100", "CA", "aromatic C", "53"}, {"C", "12.01100", "CT1", "aliphatic sp3 C for CH", "54"}, {"C", "12.01100", "CT2", "aliphatic sp3 C for CH2", "55"}, {"C", "12.01100", "CT3", "aliphatic sp3 C for CH3", "56"}, {"C", "12.01100", "CPH1", "his CG and CD2 carbons", "57"}, {"C", "12.01100", "CPH2", "his CE1 carbon", "58"}, {"C", "12.01100", "CPT", "trp C between rings", "59"}, {"C", "12.01100", "CY", "TRP C in pyrrole ring", "60"}, {"C", "12.01100", "CP1", "tetrahedral C (proline CA)", "61"}, {"C", "12.01100", "CP2", "tetrahedral C (proline CB/CG)", "62"}, {"C", "12.01100", "CP3", "tetrahedral C (proline CD)", "63"}, {"C", "12.01100", "CC", "carbonyl C, asn,asp,gln,glu,cter,ct2", "64"}, {"C", "12.01100", "CD", "carbonyl C, pres aspp,glup,ct1", "65"}, {"C", "12.01100", "CS", "thiolate carbon", "66"}, {"C", "12.01100", "CE1", "for alkene; RHC=CR", "67"}, {"C", "12.01100", "CE2", "for alkene; H2C=CR", "68"}, {"C", "12.01100", "C3", "cyclopropyl carbon", "69"}, {"N", "14.00700", "N", "proline N", "70"}, {"N", "14.00700", "NR1", "neutral his protonated ring nitrogen", "71"}, {"N", "14.00700", "NR2", "neutral his unprotonated ring nitrogen", "72"}, {"N", "14.00700", "NR3", "charged his ring nitrogen", "73"}, {"N", "14.00700", "NH1", "peptide nitrogen", "74"}, {"N", "14.00700", "NH2", "amide nitrogen", "75"}, {"N", "14.00700", "NH3", "ammonium nitrogen", "76"}, {"N", "14.00700", "NC2", "guanidinium nitroogen", "77"}, {"N", "14.00700", "NY", "TRP N in pyrrole ring", "78"}, {"N", "14.00700", "NP", "Proline ring NH2+ (N-terminal)", "79"}, {"O", "15.99900", "O", "carbonyl oxygen", "80"}, {"O", "15.99900", "OB", "carbonyl oxygen in acetic acid", "81"}, {"O", "15.99900", "OC", "carboxylate oxygen", "82"}, {"O", "15.99900", "OH1", "hydroxyl oxygen", "83"}, {"O", "15.99940", "OS", "ester oxygen", "84"}, {"S", "32.06000", "S", "sulphur", "85"}, {"S", "32.06000", "SM", "sulfur C-S-S-C type", "86"}, {"S", "32.06000", "SS", "thiolate sulfur", "87"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm22_prot info V(R) = Kb x (R - R0)^2 */ char * charmm22_prot_bonds[122][5]= {{"NH2", "CT1", "240.00", "1.455", " "}, {"CA", "CA", "305.000", "1.3750", "benzene, JES 8/25/89"}, {"CE1", "CE1", "440.000", "1.3400", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CE2", "500.000", "1.3420", "for propene, yin/adm jr., 12/95"}, {"CE1", "CT2", "365.000", "1.5020", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CT3", "383.000", "1.5040", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE2", "510.000", "1.3300", "for ethene, yin/adm jr., 12/95"}, {"CP1", "C", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CC", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CD", "200.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "222.500", "1.5270", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH1", "CPH1", "410.000", "1.3600", "histidine, adm jr., 6/27/90"}, {"CPT", "CA", "305.000", "1.3680", "adm jr., 12/30/91, for jwk"}, {"CPT", "CPT", "360.000", "1.4000", "jr., 12/30/91, for jwk"}, {"CT1", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT1", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT1", "222.500", "1.5000", "alkane update, adm jr., 3/2/92"}, {"CT2", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT2", "CA", "230.000", "1.4900", "phe,tyr, JES 8/25/89"}, {"CT2", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT2", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"CT3", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT3", "CA", "230.000", "1.4900", "toluene, adm jr. 3/7/92"}, {"CT3", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT3", "CS", "190.000", "1.5310", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CT3", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "222.500", "1.5280", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT3", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"CY", "CA", "350.000", "1.3650", "jr., 5/08/91, indole CCDB structure search"}, {"CY", "CPT", "350.000", "1.4400", "jr., 12/30/91, for jwk"}, {"CY", "CT2", "230.000", "1.5100", "Kb from alkane freq.. b0 from TRP crystal"}, {"H", "CD", "330.000", "1.1100", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CA", "340.000", "1.0830", "trp, adm jr., 10/02/89"}, {"HA", "CC", "317.130", "1.1000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"HA", "CP2", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CS", "300.000", "1.1110", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT1", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA", "CT2", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "322.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA", "CY", "330.000", "1.0800", "JWK 05/14/91 new r0 from indole"}, {"HE1", "CE1", "360.500", "1.1000", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "365.000", "1.1000", "for ethene, yin/adm jr., 12/95"}, {"HB", "CP1", "330.000", "1.0800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CT1", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HP", "CA", "340.000", "1.0800", "phe,tyr JES 8/25/89"}, {"HP", "CY", "350.000", "1.0800", "jr., 12/30/91, for jwk"}, {"HR1", "CPH1", "375.000", "1.0830", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "340.000", "1.0900", "his, adm jr., 6/28/29"}, {"HR2", "CPH2", "333.000", "1.0700", "his, adm jr., 6/27/90"}, {"HR3", "CPH1", "365.000", "1.0830", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "260.000", "1.3000", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "320.000", "1.4340", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "320.000", "1.4550", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "463.000", "1.3650", "403.0->463.0, 1.305->1.365 guanidinium (KK)"}, {"NC2", "CT2", "261.000", "1.4900", "arg, (DS)"}, {"NC2", "CT3", "261.000", "1.4900", "methylguanidinium, adm jr., 3/26/92"}, {"NC2", "HC", "455.000", "1.0000", "405.0->455.0 GUANIDINIUM (KK)"}, {"NH1", "C", "370.000", "1.3450", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT2", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT3", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "H", "440.000", "0.9970", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "HC", "405.000", "0.9800", "(DS)"}, {"NH2", "CC", "430.000", "1.3600", "adm jr. 4/10/91, acetamide"}, {"NH2", "CT2", "240.000", "1.4550", "from NH2 CT3, neutral glycine, adm jr."}, {"NH2", "CT3", "240.000", "1.4550", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH2", "H", "480.000", "1.0000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "HC", "460.000", "1.0000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT3", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "HC", "403.000", "1.0400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "320.000", "1.4850", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "320.000", "1.5020", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "HC", "460.000", "1.0060", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR1", "CPH2", "400.000", "1.3600", "his, ADM JR., 7/20/89"}, {"NR1", "H", "466.000", "1.0000", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "400.000", "1.3200", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "380.000", "1.3700", "his, adm jr., 6/28/90"}, {"NR3", "CPH2", "380.000", "1.3200", "his, adm jr., 6/27/90"}, {"NR3", "H", "453.000", "1.0000", "his, adm jr., 6/27/90"}, {"NY", "CA", "270.000", "1.3700", "jr., 12/30/91, for jwk"}, {"NY", "CPT", "270.000", "1.3750", "jr., 12/30/91, for jwk"}, {"NY", "H", "465.000", "0.9760", "indole JWK 08/28/89"}, {"O", "C", "620.000", "1.2300", "Peptide geometry, condensed phase (LK)"}, {"O", "CC", "650.000", "1.2300", "adm jr. 4/10/91, acetamide"}, {"OB", "CC", "750.000", "1.2200", "adm jr., 10/17/90, acetic acid vibrations and geom."}, {"OB", "CD", "750.000", "1.2200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "525.000", "1.2600", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "525.000", "1.2600", "adm jr. 7/23/91, acetic acid"}, {"OC", "CT2", "450.000", "1.3300", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "450.000", "1.3300", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "334.300", "1.4110", "MeOH, EMB 10/10/89,"}, {"OH1", "CD", "230.000", "1.4000", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OH1", "CT1", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT2", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT3", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "H", "545.000", "0.9600", "EMB 11/21/89 methanol vib fit"}, {"OS", "CD", "150.000", "1.3340", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OS", "CT3", "340.000", "1.4300", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"S", "CT2", "198.000", "1.8180", "fitted to C-S s 9/26/92 (FL)"}, {"S", "CT3", "240.000", "1.8160", "fitted to C-S s 9/26/92 (FL)"}, {"S", "HS", "275.000", "1.3250", "methanethiol pure solvent, adm jr., 6/22/92"}, {"SM", "CT2", "214.000", "1.8160", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"SM", "CT3", "214.000", "1.8160", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"SM", "SM", "173.000", "2.0290", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"SS", "CS", "205.000", "1.8360", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HR1", "CD", "330.000", "1.1100", " "}, {"O", "CD", "720.000", "1.2050", " "}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm22_prot info V(S) = Kub x (S - S0)^2 */ char * charmm22_prot_angles[324][8]= {{"H", "NH2", "CT1", "50.000", "111.00", " ", " ", "From LSN HC-NH2-CT2"}, {"NH2", "CT1", "CT2", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"NH2", "CT1", "CT3", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"CT1", "CD", "OH1", "55.000", "110.50", " ", " ", "From ASPP CT2-CD-OH1"}, {"CT3", "CT1", "CD", "52.000", "108.00", " ", " ", "Ala cter"}, {"NH2", "CT1", "HB", "38.000", "109.50", "50.00", "2.1400", "From LSN NH2-CT2-HA"}, {"NH2", "CT1", "C", "50.000", "107.00", " ", " ", "From ALA Dipep. NH1-CT2-C"}, {"CA", "CA", "CA", "40.000", "120.00", "35.00", "2.41620", "JES 8/25/89"}, {"CE1", "CE1", "CT2", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CE1", "CT3", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CT2", "CT3", "32.00", "112.20", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "48.00", "126.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "47.00", "125.20", " ", " ", "for propene, yin/adm jr., 12/95"}, {"CP1", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "C", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CC", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CD", "50.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "CP1", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "100.000", "114.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "100.000", "111.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "130.000", "107.5000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR2", "CPH1", "130.000", "104.0000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR3", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"CPT", "CA", "CA", "60.000", "118.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"CPT", "CPT", "CA", "60.000", "122.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"CPT", "CY", "CA", "120.000", "107.40", "25.00", "2.26100", "jr., 12/30/91, for jwk"}, {"CPT", "NY", "CA", "110.000", "108.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"CT1", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT1", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 6/27/2012, for Thr with CT1 patch"}, {"CT1", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT1", "CT2", "CA", "51.800", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"CT1", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT1", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT1", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "CA", "CA", "45.800", "122.3000", " ", " ", "PARALLH19 (JES)"}, {"CT2", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT2", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT2", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C, for lactams, adm jr."}, {"CT2", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "CT2", "CT2", "58.350", "113.60", "11.16", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT3", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "CY", "CA", "45.800", "129.4000", " ", " ", "jr., 5/08/91, indole CCDB structure search"}, {"CT2", "CY", "CPT", "45.800", "124.0000", " ", " ", "jr., 5/08/91, indole CCDB structure search"}, {"CT2", "NC2", "C", "62.300", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"CT2", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CA", "CA", "45.800", "122.3000", " ", " ", "toluene, adm jr., 3/7/92"}, {"CT3", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT3", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT3", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/09/92, for ALA cter"}, {"CT3", "CT1", "CT1", "53.350", "108.50", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT2", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CA", "51.800", "107.5000", " ", " ", "ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT3", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT3", "CT2", "CT2", "58.000", "115.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "NC2", "C", "62.300", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"CT3", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT3", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "S", "CT2", "34.000", "95.0000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"CY", "CPT", "CA", "160.000", "130.6000", " ", " ", "jr., 12/30/91, for jwk"}, {"CY", "CPT", "CPT", "110.000", "107.4000", " ", " ", "jr., 12/30/91, for jwk"}, {"CY", "CT2", "CT1", "58.350", "114.0000", " ", " ", "from TRP crystal, JWK"}, {"CY", "CT2", "CT3", "58.350", "114.0000", " ", " ", "from TRP crystal, JWK"}, {"H", "NH1", "C", "34.000", "123.0000", " ", " ", "NMA Vib Modes (LK)"}, {"H", "NH1", "CT1", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT2", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT3", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH2", "CC", "50.000", "120.0000", " ", " ", "his, adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NH2", "H", "23.000", "120.0000", " ", " ", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NR1", "CPH1", "30.000", "125.50", "20.00", "2.15000", "his, adm jr., 6/27/90"}, {"H", "NR1", "CPH2", "30.000", "127.00", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "25.000", "126.00", "15.00", "2.13000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH2", "25.000", "126.00", "15.00", "2.09000", "his, adm jr., 6/27/90"}, {"H", "NY", "CA", "28.000", "126.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"H", "NY", "CPT", "28.000", "126.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"H", "OH1", "CA", "65.000", "108.0000", " ", " ", "JES 8/25/89 phenol"}, {"H", "OH1", "CD", "55.000", "115.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "OH1", "CT1", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT2", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT3", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"HA", "CA", "CA", "29.000", "120.00", "25.00", "2.15250", "trp, adm jr., 10/02/89"}, {"HA", "CA", "CPT", "41.000", "122.0000", " ", " ", "jr., 5/08/91, indole CCDB structure search"}, {"HA", "CA", "CY", "32.000", "125.00", "25.00", "2.17300", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HA", "CP2", "CP1", "33.430", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP2", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP2", "CP3", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP2", "HA", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "HA", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CS", "CT3", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CS", "HA", "35.500", "108.40", "14.00", "1.77500", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT1", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA", "CT1", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CT1", "CT1", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT1", "CT2", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT1", "CT3", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT1", "HA", "35.500", "109.00", "5.40", "1.80200", "based on HA CT2 HA"}, {"HA", "CT2", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA", "CT2", "CA", "49.300", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"HA", "CT2", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA", "CT2", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CT2", "CE1", "45.00", "111.50", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HA", "CT2", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA", "CT2", "CT1", "33.430", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA", "CT2", "CT2", "26.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT2", "CT3", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT2", "CY", "33.430", "109.5000", " ", " ", "ADM JR., 10/02/89, from CT2CT2HA (U-B OMITTED), FOR JOANNA"}, {"HA", "CT2", "HA", "35.500", "109.00", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA", "CT3", "CA", "49.300", "107.5000", " ", " ", "toluene, adm jr. 3/7/92"}, {"HA", "CT3", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA", "CT3", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CT3", "CE1", "42.00", "111.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HA", "CT3", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA", "CT3", "CS", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT3", "CT1", "33.430", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA", "CT3", "CT2", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "CT3", "37.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "HA", "35.500", "108.40", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HA", "CY", "CA", "20.000", "126.40", "25.00", "2.18600", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HA", "CY", "CPT", "32.000", "126.40", "25.00", "2.25500", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HE1", "CE1", "CE1", "52.00", "119.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CE2", "42.00", "118.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "40.00", "116.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "22.00", "117.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE1", "45.00", "120.50", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE2", "55.50", "120.50", " ", " ", "for ethene, yin/adm jr., 12/95"}, {"HE2", "CE2", "HE2", "19.00", "119.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HB", "CP1", "C", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "CC", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "CD", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "CP2", "35.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CT1", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB", "CT1", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB", "CT1", "CT1", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "CT2", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "CT3", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB", "CT2", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB", "CT2", "HB", "36.000", "115.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NC2", "C", "49.000", "120.0000", " ", " ", "35.3->49.0 GUANIDINIUM (KK)"}, {"HC", "NC2", "CT2", "40.400", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"HC", "NC2", "CT3", "40.400", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"HC", "NC2", "HC", "25.000", "120.0000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH2", "CT2", "50.000", "111.0000", " ", " ", "from HC NH2 CT3, neutral glycine, adm jr."}, {"HC", "NH2", "CT3", "50.000", "111.0000", " ", " ", "methylamine geom/freq, adm jr., 6/2/92"}, {"HC", "NH2", "HC", "39.000", "106.5000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH3", "CT1", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT2", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT3", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "HC", "44.000", "109.5000", " ", " ", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NP", "CP1", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "HC", "51.000", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "30.000", "120.00", "22.00", "2.15250", "JES 8/25/89 benzene"}, {"HP", "CA", "CPT", "30.000", "122.00", "22.00", "2.14600", "jr., 12/30/91, for jwk"}, {"HP", "CA", "CY", "32.000", "125.00", "25.00", "2.17300", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HP", "CY", "CA", "32.000", "126.40", "25.00", "2.18600", "jr., 12/30/91, for jwk"}, {"HP", "CY", "CPT", "32.000", "126.40", "25.00", "2.25500", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HR1", "CPH1", "CPH1", "22.000", "130.00", "15.00", "2.21500", "adm jr., 6/27/90, his"}, {"HR3", "CPH1", "CPH1", "25.000", "130.00", "20.00", "2.20000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "38.800", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "43.000", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "C", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CC", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CD", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CP2", "70.000", "110.8000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "HB", "48.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "CP2", "70.000", "110.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "HA", "48.000", "108.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "NC2", "52.000", "120.00", "90.00", "2.36420", "changed from 60.0/120.3 for guanidinium (KK)"}, {"NC2", "CT2", "CT2", "67.700", "107.5000", " ", " ", "arg, (DS)"}, {"NC2", "CT2", "HA", "51.500", "107.5000", " ", " ", "arg, (DS)"}, {"NC2", "CT3", "HA", "51.500", "107.5000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"NH1", "C", "CP1", "80.000", "116.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT2", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT3", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "CT1", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CC", "50.000", "107.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH1", "CT1", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT1", "CT1", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT2", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT3", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "HB", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "CC", "50.000", "107.0000", " ", " ", "adm jr. 5/20/92, for asn,asp,gln,glu and cters"}, {"NH1", "CT2", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT2", "CT2", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2, for lactams, adm jr."}, {"NH1", "CT2", "HA", "51.500", "109.5000", " ", " ", "from NH1 CT3 HA, for lactams, adm jr."}, {"NH1", "CT2", "HB", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT3", "HA", "51.500", "109.5000", " ", " ", "NMA crystal (JCS)"}, {"NH2", "CC", "CP1", "80.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT1", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT2", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT3", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "HA", "44.000", "111.00", "50.00", "1.98000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"NH2", "CT2", "HA", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral lysine"}, {"NH2", "CT2", "HB", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral glycine, adm jr."}, {"NH2", "CT2", "CD", "52.000", "108.0000", " ", " ", "CT2 CT2 CD, neutral glycine, adm jr."}, {"NH2", "CT2", "CT2", "67.700", "110.0000", " ", " ", "NH3 CT2 CT2, neutral lysine"}, {"NH2", "CT3", "HA", "38.000", "109.50", "50.00", "2.14000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "C", "43.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT1", "CT1", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT2", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT3", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "HB", "51.500", "107.5000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT2", "C", "43.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT2", "CD", "43.700", "110.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH3", "CT2", "CT2", "67.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "CT3", "67.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "HA", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "HB", "51.500", "107.5000", " ", " ", "for use on NTER -- from NH3 CT2HA (JCS) -- (LK)"}, {"NH3", "CT3", "HA", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "C", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CD", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "HB", "51.500", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "HA", "51.500", "109.1500", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "130.000", "106.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR1", "CPH1", "CT2", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "CT3", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "HR3", "25.000", "124.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH2", "HR1", "25.000", "122.50", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR2", "CPH1", "CPH1", "130.000", "110.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "45.800", "120.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR2", "CPH1", "HR3", "25.000", "120.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH2", "HR1", "25.000", "125.00", "20.00", "2.12000", "his, adm jr., 6/27/90"}, {"NR2", "CPH2", "NR1", "130.000", "112.5000", " ", " ", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CT2", "45.800", "122.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR3", "CPH1", "HR1", "22.000", "122.00", "15.00", "2.18000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "HR2", "32.000", "126.00", "25.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "NR3", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NY", "CA", "CY", "120.000", "110.00", "25.00", "2.24000", "jr., 12/30/91, for jwk"}, {"NY", "CA", "HA", "32.000", "125.00", "25.00", "2.17700", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CA", "HP", "32.000", "125.00", "25.00", "2.17700", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CPT", "CA", "160.000", "130.6000", " ", " ", "jr., 12/30/91, for jwk"}, {"NY", "CPT", "CPT", "110.000", "107.4000", " ", " ", "jr., 12/30/91, for jwk"}, {"O", "C", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT3", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "H", "50.000", "121.7000", " ", " ", "acetaldehyde (JCS)"}, {"O", "C", "N", "80.000", "122.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "80.000", "122.5000", " ", " ", "NMA Vib Modes (LK)"}, {"O", "CC", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT1", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT2", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT3", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "HA", "44.000", "122.0000", " ", " ", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "CC", "NH2", "75.000", "122.50", "50.00", "2.37000", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "CP1", "70.000", "125.00", "20.00", "2.44200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OB", "CD", "CT1", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT2", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT3", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "CA", "40.000", "120.0000", " ", " ", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "40.000", "118.00", "50.00", "2.38800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT2", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT3", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "OC", "100.000", "124.00", "70.00", "2.22500", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CT2", "CT3", "65.000", "122.0000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT2", "HA", "65.000", "118.3000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "HA", "65.000", "118.3000", " ", " ", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "CA", "45.200", "120.0000", " ", " ", "PARALLH19 WITH [122.3] (JES)"}, {"OH1", "CD", "CT2", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "CT3", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "OB", "50.000", "123.00", "210.00", "2.26200", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CT1", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "HA", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT2", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "HA", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT3", "HA", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OS", "CD", "CP1", "55.000", "109.00", "20.00", "2.32600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OS", "CD", "CT1", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT2", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT3", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "OB", "90.000", "125.90", "160.00", "2.25760", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OS", "CT2", "HA", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"OS", "CT3", "HA", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"S", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"S", "CT2", "CT2", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "CT3", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "HA", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"S", "CT3", "HA", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"SM", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "CT2", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "CT3", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "HA", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "CT3", "HA", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "SM", "CT2", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "55.000", "118.0000", " ", " ", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"SS", "CS", "HA", "40.000", "112.3000", " ", " ", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"O", "CD", "HR1", "75.000", "121.0000", " ", " ", " "}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm22_prot info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm22_prot_dihedrals[445][8]= {{"NH2", "CT1", "C", "O", "0.0000", "1", "0.00", " "}, {"NH2", "CT1", "C", "NH1", "0.0000", "1", "0.00", " "}, {"H", "NH2", "CT1", "CT1", "0.0000", "1", "0.00", " "}, {"H", "NH2", "CT1", "C", "0.000", "1", "0.00", " "}, {"H", "NH2", "CT1", "HB", "0.110", "3", "0.00", "From LSN HC-NH2-CT2-HA"}, {"H", "NH2", "CT1", "CT2", "0.110", "3", "0.00", "From LSN HC-NH2-CT2-CT2"}, {"H", "NH2", "CT1", "CT3", "0.110", "3", "0.00", "From LSN HC-NH2-CT2-CT2"}, {"C", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "CT2", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "N", "CP1", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CA", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89"}, {"CA", "CPT", "CPT", "CA", "3.1000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CA", "CT2", "CT1", "C", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CA", "CY", "CPT", "CA", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"CA", "NY", "CPT", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CC", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CC", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CC", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CC", "CT2", "NH1", "C", "0.2000", "1", "180.00", "Alanine dipeptide; NMA; acetate; etc. adm jr., 3/3/93c"}, {"CD", "CP1", "N", "C", "0.0000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CD", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CD", "CT2", "NH1", "C", "0.2000", "1", "180.00", "Alanine dipeptide; NMA; acetate; etc. backbon adm jr., 3/3/93c"}, {"CE1", "CE1", "CT3", "HA", "0.0300", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "CT3", "0.5000", "1", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "CT3", "1.3000", "3", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "HA", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "HA", "0.0500", "3", "180.00", "for propene, yin/adm jr., 12/95"}, {"CP1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "C", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CC", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CP2", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR2", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR3", "CPH1", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPT", "CA", "CA", "CA", "3.1000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CA", "CA", "3.1000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CY", "CA", "4.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "NY", "CA", "5.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CT1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT1", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT1", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT1", "CT2", "CA", "CA", "0.2300", "2", "180.00", "ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CT1", "CT2", "CPH1", "CPH1", "0.2000", "1", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT1", "CT2", "CPH1", "CPH1", "0.2700", "2", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT1", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT1", "CT2", "CY", "CA", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT1", "CT2", "CY", "CPT", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT1", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT2", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT3", "1.6000", "1", "0.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "C", "NH1", "CT3", "2.5000", "2", "180.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"CT2", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT2", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR2 CPH2"}, {"CT2", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"CT2", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT2", "CT2", "CPH1", "CPH1", "0.4000", "1", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. ADM JR., 9/4/89"}, {"CT2", "CT2", "CT2", "CT2", "0.1500", "1", "0.00", "alkane update, adm jr., 3/2/92, butane trans/gauche"}, {"CT2", "CT2", "NH1", "C", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C, for lactams, adm jr."}, {"CT2", "CY", "CPT", "CA", "3.0000", "2", "180.00", "JWK"}, {"CT2", "CY", "CPT", "CPT", "3.0000", "2", "180.00", " "}, {"CT2", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "SM", "SM", "CT2", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "C", "NH1", "CT2", "1.6000", "1", "0.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT2", "2.5000", "2", "180.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT3", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "CA", "CA", "CA", "3.1000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"CT3", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"CT3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT3", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT3", "CT2", "CA", "CA", "0.2300", "2", "180.00", "ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2000", "1", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2700", "2", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CT2", "CT2", "0.1500", "1", "0.00", "alkane update, adm jr., 3/2/92, butane trans/gauche"}, {"CT3", "CT2", "CT2", "CT3", "0.1500", "1", "0.00", "alkane update, adm jr., 3/2/92, butane trans/gauche"}, {"CT3", "CT2", "CY", "CA", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CY", "CPT", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "S", "CT3", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "CT2", "S", "CT3", "0.3700", "3", "0.00", "DTN 8/24/90"}, {"CT3", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "S", "CT2", "CT2", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "S", "CT2", "CT2", "0.3700", "3", "0.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CY", "CA", "NY", "CPT", "5.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CY", "CPT", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CY", "CPT", "CPT", "CA", "10.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"H", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "CT1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CC", "0.0000", "1", "0.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"H", "NH1", "CT1", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT1", "CT1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "CC", "0.0000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"H", "NH1", "CT2", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT2", "CT2", "0.0000", "1", "0.00", "from H NH1 CT2 CT3, for lactams, adm jr."}, {"H", "NH1", "CT2", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH2", "CC", "CT1", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT2", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT3", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NR1", "CPH1", "CPH1", "1.0000", "2", "180.00", "his, adm jr., 7/20/89"}, {"H", "NR1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR3", "CPH1", "CPH1", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "CT2", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "NR3", "CPH1", "CT3", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "NY", "CA", "CY", "0.8000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"H", "NY", "CPT", "CA", "0.8000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"H", "NY", "CPT", "CPT", "0.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"H", "OH1", "CA", "CA", "0.9900", "2", "180.00", "phenol OH rot bar, 3.37 kcal/mole, adm jr. 3/7/92"}, {"H", "OH1", "CT1", "CT1", "1.3300", "1", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT1", "0.1800", "2", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT1", "0.3200", "3", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "1.3300", "1", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.1800", "2", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.3200", "3", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT1", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT1", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT1", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"HA", "CA", "CA", "CA", "3.5000", "2", "180.00", "adm jr., 10/02/89"}, {"HA", "CA", "CA", "CPT", "3.5000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CA", "CA", "HA", "2.5000", "2", "180.00", "ADM JR., 10/02/89"}, {"HA", "CA", "CPT", "CPT", "3.0000", "2", "180.00", "TRP (JES)"}, {"HA", "CA", "CPT", "CY", "4.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CA", "CY", "CPT", "1.2000", "2", "180.00", "JWK"}, {"HA", "CA", "CY", "CT2", "1.2000", "2", "180.00", "JWK"}, {"HA", "CA", "NY", "CPT", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CA", "NY", "H", "1.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"HA", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA", "CT2", "CY", "CA", "0.2500", "2", "180.00", "JWK"}, {"HA", "CT2", "CY", "CPT", "0.2500", "2", "180.00", "JWK"}, {"HA", "CT2", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT2", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT2", "S", "CT3", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HA", "CT3", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA", "CT3", "CS", "HA", "0.1600", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT3", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA", "CT3", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT3", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT3", "S", "CT2", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HA", "CY", "CA", "CPT", "1.2000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CY", "CA", "HA", "1.2000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CY", "CPT", "CA", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CY", "CPT", "CPT", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"HE1", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"CT3", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"HE1", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "HA", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE1", "CE1", "CT2", "CT3", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "HA", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE2", "CE2", "CE1", "CT2", "5.2000", "2", "180.00", "for butene, yin/adm jr., 12/95"}, {"HB", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "N", "CP3", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "NP", "CP3", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CT1", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NH2", "CT2", "CT2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NH2", "CT2", "HA", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NH2", "CT2", "HB", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NH2", "CT2", "CD", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "HB", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "HA", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "CA", "4.2000", "2", "180.00", "JES 8/25/89 benzene"}, {"HP", "CA", "CA", "CPT", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CA", "CA", "CT2", "4.2000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"HP", "CA", "CA", "CT3", "4.2000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"HP", "CA", "CA", "HP", "2.4000", "2", "180.00", "JES 8/25/89 benzene"}, {"HP", "CA", "CPT", "CPT", "3.0000", "2", "180.00", "JWK indole 05/14/91"}, {"HP", "CA", "CPT", "CY", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CA", "CY", "CPT", "2.0000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"HP", "CA", "CY", "CT2", "1.2000", "2", "180.00", "JWK indole 05/14/91"}, {"HP", "CA", "NY", "CPT", "2.0000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"HP", "CA", "NY", "H", "0.4000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CA", "HP", "1.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CA", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CPT", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HR1", "CPH1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "HR1", "1.0000", "2", "180.00", "his, adm jr., 6/27/90, his"}, {"HR1", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "NR3", "H", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR2", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "H", "0.0000", "2", "180.00", "his, adm jr., 6/27/90, YES, 0.0"}, {"HR3", "CPH1", "CPH1", "CT2", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "CT3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "HR3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "H", "1.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "CT1", "0.2400", "1", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT2", "CT1", "0.1500", "2", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT2", "CT1", "0.2700", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT2", "CT3", "0.2400", "1", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.1500", "2", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.2700", "3", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "HA", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "HA", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT1", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT2", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT3", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "HB", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "HB", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "HA", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"NH1", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "CT1", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT2", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT3", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT1", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT2", "CT2", "0.0000", "1", "0.00", "from NH1 C CT1 CT2, for lactams, adm jr."}, {"NH1", "C", "CT2", "HA", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "C", "CT2", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT2", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT3", "HA", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT2", "HA", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NH3", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT1", "C", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH3", "CT1", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NH3", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT2", "C", "NH1", "0.4000", "1", "0.00", "adm jr. 3/24/92, for PRES GLYP"}, {"NH3", "CT2", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NP", "CP1", "C", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "C", "NH1", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "NH2", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH1", "CT2", "CT1", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT3", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH2", "NR2", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH1", "CPH1", "NR1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "CT1", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH1", "CT3", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH2", "NR1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CPH1", "CT2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "CT3", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "HR1", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "NR3", "12.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CT2", "CT1", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT3", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH2", "NR3", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH2", "NR3", "H", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NY", "CA", "CY", "CPT", "4.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CA", "CY", "CT2", "3.5000", "2", "180.00", "JWK"}, {"NY", "CA", "CY", "HA", "3.5000", "2", "180.00", "JWK 09/05/89"}, {"NY", "CA", "CY", "HP", "3.5000", "2", "180.00", "JWK indole 05/14/91"}, {"NY", "CPT", "CA", "CA", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CPT", "CA", "HA", "4.0000", "2", "180.00", "JWK 09/05/89"}, {"NY", "CPT", "CA", "HP", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CPT", "CPT", "CA", "10.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CPT", "CPT", "CY", "5.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"O", "C", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "CT1", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT2", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT3", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT2", "CT2", "1.4000", "1", "0.00", "from O C CT1 CT2, for lactams, adm jr."}, {"O", "C", "CT2", "HA", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "CT2", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT3", "HA", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "H", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "CC", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT2", "HA", "0.0000", "3", "180.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"O", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "OS", "CT2", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT2", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OC", "CA", "CA", "CA", "3.1000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CA", "CA", "HP", "4.2000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "CP2", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "HB", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "N", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "NP", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OC", "CC", "CT2", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OH1", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 phenol"}, {"OH1", "CA", "CA", "HP", "4.2000", "2", "180.00", "JES 8/25/89 phenol"}, {"S", "CT2", "CT2", "HA", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "CT2", "CT2", "HA", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "SM", "CT2", "CT1", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "CT2", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "HA", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "HA", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "HA", "0.1500", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"X", "C", "NC2", "X", "2.2500", "2", "180.00", "9.0->2.25 GUANIDINIUM (KK)"}, {"X", "CD", "OH1", "X", "2.0500", "2", "180.00", "adm jr, 10/17/90, acetic acid C-Oh rotation barrier"}, {"X", "CD", "OS", "X", "2.0500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CE1", "CE1", "X", "0.1500", "1", "0.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE1", "CE1", "X", "8.5000", "2", "180.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE2", "CE2", "X", "4.9000", "2", "180.00", "for ethene, yin/adm jr., 12/95"}, {"X", "CP1", "C", "X", "0.0000", "6", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP1", "CC", "X", "0.0000", "6", "180.00", "changed to 0.0 RLD 5/19/92"}, {"X", "CP1", "CD", "X", "0.0000", "6", "180.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"X", "CP1", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP2", "CP2", "X", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP3", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CPT", "CPT", "X", "0.0000", "2", "180.00", "JWK indole 05/14/91"}, {"X", "CT1", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT1", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT1", "CT1", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT2", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT3", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT1", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT1", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT2", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT2", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CT2", "X", "0.1950", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT2", "CT3", "X", "0.1600", "3", "0.00", "rotation barrier in Ethane (SF)"}, {"X", "CT2", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT2", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT2", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT2", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT3", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT3", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CT3", "X", "0.1550", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT3", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT3", "NH2", "X", "0.1100", "3", "0.00", "methylamine geom/freq, adm jr., 6/2/92"}, {"X", "CT3", "NH3", "X", "0.0900", "3", "0.00", "fine-tuned to ab initio; METHYLAMMONIUM, KK 03/10/92"}, {"X", "CT3", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT3", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm22_prot info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm22_prot_impropers[34][8]= {{"HE2", "HE2", "CE2", "CE2", "3.0", "0", "0.00", "for ethene, yin/adm jr., 12/95"}, {"HR1", "NR1", "NR2", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR1", "NR2", "NR1", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR3", "CPH1", "NR1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR3", "CPH1", "1.0000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR1", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR2", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "CP1", "CP3", "0.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"NC2", "X", "X", "C", "40.0000", "0", "0.0000", "5.75->40.0 GUANIDINIUM (KK)"}, {"NH1", "X", "X", "H", "20.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"NH2", "X", "X", "H", "4.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NR1", "CPH1", "CPH2", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR1", "CPH2", "CPH1", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR3", "CPH1", "CPH2", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "CPH1", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"NY", "CA", "CY", "CPT", "100.0000", "0", "0.0000", "jr., 5/15/91, indole 3-21G HE1 out-of-plane surf."}, {"O", "CP1", "NH2", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "CT1", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT2", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT3", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "HA", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "N", "CT2", "CC", "120.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CP1", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CT1", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT3", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "HA", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "X", "X", "C", "120.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"OB", "X", "X", "CD", "100.0000", "0", "0.0000", "adm jr., 10/17/90, acetic acid vibrations"}, {"OC", "X", "X", "CC", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT1", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT2", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT3", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm22_prot info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm22_prot_vdw[47][6]= {{"C", "-0.110000", "2.000000", " ", " ", " "}, {"CA", "-0.070000", "1.992400", " ", " ", " "}, {"CC", "-0.070000", "2.000000", " ", " ", " "}, {"CD", "-0.070000", "2.000000", " ", " ", " "}, {"CE1", "-0.068000", "2.090000", " ", " ", " "}, {"CE2", "-0.064000", "2.080000", " ", " ", " "}, {"CP1", "-0.020000", "2.275000", "-0.010000", "1.900000", " "}, {"CP2", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CP3", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CPH1", "-0.050000", "1.800000", " ", " ", " "}, {"CPH2", "-0.050000", "1.800000", " ", " ", " "}, {"CPT", "-0.090000", "1.800000", "-0.090000", "1.900000", " "}, {"CS", "-0.110000", "2.200000", " ", " ", " "}, {"CT1", "-0.020000", "2.275000", "-0.010000", "1.900000", " "}, {"CT2", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CT3", "-0.080000", "2.060000", "-0.010000", "1.900000", " "}, {"CY", "-0.070000", "1.992400", " ", " ", " "}, {"H", "-0.046000", "0.224500", " ", " ", " "}, {"HA", "-0.022000", "1.320000", " ", " ", " "}, {"HE1", "-0.031000", "1.250000", " ", " ", " "}, {"HE2", "-0.026000", "1.260000", " ", " ", " "}, {"HB", "-0.022000", "1.320000", " ", " ", " "}, {"HC", "-0.046000", "0.224500", " ", " ", " "}, {"HP", "-0.030000", "1.358200", "-0.030000", "1.358200", " "}, {"HR1", "-0.046000", "0.900000", " ", " ", " "}, {"HR2", "-0.046000", "0.700000", " ", " ", " "}, {"HR3", "-0.007800", "1.468000", " ", " ", " "}, {"HS", "-0.100000", "0.450000", " ", " ", " "}, {"N", "-0.200000", "1.850000", "-0.000100", "1.850000", " "}, {"NC2", "-0.200000", "1.850000", " ", " ", " "}, {"NH1", "-0.200000", "1.850000", "-0.200000", "1.550000", " "}, {"NH2", "-0.200000", "1.850000", " ", " ", " "}, {"NH3", "-0.200000", "1.850000", " ", " ", " "}, {"NP", "-0.200000", "1.850000", " ", " ", " "}, {"NR1", "-0.200000", "1.850000", " ", " ", " "}, {"NR2", "-0.200000", "1.850000", " ", " ", " "}, {"NR3", "-0.200000", "1.850000", " ", " ", " "}, {"NY", "-0.200000", "1.850000", " ", " ", " "}, {"O", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OB", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OC", "-0.120000", "1.700000", " ", " ", " "}, {"OH1", "-0.152100", "1.770000", " ", " ", " "}, {"OS", "-0.152100", "1.770000", " ", " ", " "}, {"S", "-0.450000", "2.000000", " ", " ", " "}, {"SM", "-0.380000", "1.975000", " ", " ", " "}, {"SS", "-0.470000", "2.200000", " ", " ", " "}, {"C3", "-0.020000", "2.275000", " ", " ", " "}}; atomes_1.3.1/src/calc/force_fields/cff91.c0000664000175000017500000103234615212624223017707 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cff91.c * @short CFF91 force field, from 'CFF91.frc' * @author Sébastien Le Roux */ /* * This file: 'cff91.c' * * Contains: * CFF91 force field, data from taken from: - the file: 'CFF91.frc' This file contains several tables: Atoms : CFF91_atoms[93][5] Equivalence : CFF91_equivalence_auto[97][11] Equivalence : CFF91_equivalence[95][7] Quadractic bonds : CFF91_bonds_auto[667][5] Quartic bonds : CFF91_bonds[58][7] Quadratic angles : CFF91_angles_auto[330][6] Quartic angles : CFF91_angles[155][8] Torsions : CFF91_torsions_auto[216][8] Torsions : CFF91_torsions[294][11] Inversions : CFF91_inversions[70][7] Non bonded : CFF91_vdw[40][4] Bond increments : CFF91_bond_increments[560][5] */ #include "global.h" int CFF91_objects[14] = {93, 97, 95, 667, 58, 0, 330, 155, 216, 294, 70, 0, 40, 560}; int CFF91_dim[14] = {5, 11, 7, 5, 7, 0, 6, 8, 8, 11, 7, 0, 4, 5}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= CFF91 info */ char * CFF91_atoms[93][5]= {{"C", "12.01115", "c", "generic SP3 carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c3", "sp3 carbon with 3 hHs 1 heavy", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c2", "sp3 carbon with 2 H's, 2 Heavy's", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "co", "sp3 carbon in acetals", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c3m", "sp3 carbon in 3-membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c4m", "sp3 carbon in 4-membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "coh", "sp3 carbon in acetals with hydrogen", "Ver. 2.0, Ref. 1"}, {"C", "12.01115", "c3h", "sp3 carbon in 3-membered ring with hydrogens", "Ver. 2.0, Ref. 2"}, {"C", "12.01115", "c4h", "sp3 carbon in 4-membered ring with hydrogens", "Ver. 2.0, Ref. 2"}, {"C", "12.01115", "c1", "sp3 carbon with 1 H 3 heavies", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "ca", "general amino acid alpha carbon (sp3)", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cg", "sp3 alpha carbon in glycine", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c=", "non aromatic end doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c=1", "non aromatic, next to end doubly bonded carbon", "Ver. 2.0, Ref. 3"}, {"C", "12.01115", "c=2", "non aromatic doubly bonded carbon", "Ver. 2.0, Ref. 3"}, {"C", "12.01115", "c*", "carbon in carbonyl group, non_amides", "Ver. 2.0, Ref. 4"}, {"C", "12.01115", "c\"", "carbon in carbonyl group, non_amides", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c'", "carbon in carbonyl group of amides", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cp", "sp2 aromatic carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c5", "sp2 aromatic carbon in 5-membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c-", "C in charged carboxylate", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cr", "C in neutral arginine", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c+", "C in guanidinium group", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cs", "sp2 aromatic carbon in 5 membered ring next to S", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "ci", "sp2 aromatic carbon in charged imidazole ring (His+)", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "ct", "sp carbon involved in a triple bond", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "ct2", "sp carbon in CO2", "Ver. 2.0, Ref. 6"}, {"N", "14.00670", "na", "sp3 nitrogen in amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n3m", "sp3 nitrogen in 3- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n4m", "sp3 nitrogen in 4- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n3n", "sp2 nitrogen in 3- membered ring", "Ver. 2.0, Ref. 2"}, {"N", "14.00670", "n4n", "sp2 nitrogen in 4- membered ring", "Ver. 2.0, Ref. 2"}, {"N", "14.00670", "nb", "sp2 nitrogen in aromatic amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nn", "sp2 nitrogen in aromatic amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n", "generic sp2 nitrogen (in amids))", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "np", "sp2 nitrogen in 5- or 6-membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "npc", "sp2 nitrogen in 5- or 6-membered ring bonded to a heavy atom", "Ver. 2.0, Ref. 2"}, {"N", "14.00670", "nh", "sp2 nitrogen in 5- or 6- membered ring with hydrogen attached", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nho", "sp2 nitrogen in 6- membered ring next to a carbonyl group and with a hydrogen", "Ver. 2.0, Ref. 2"}, {"N", "14.00670", "nh+", "protonated nitrogen in 6- membered ring with hydrogen attached", "Ver. 2.0, Ref. 2"}, {"N", "14.00670", "n+", "sp3 nitrogen in protonated amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n4", "sp3 nitrogen in protonated amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nr", "sp2 nitrogen (NH2) in guanidinium group (HN=C(NH2)2)", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n=", "non aromatic end doubly bonded nitrogen", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n=1", "non aromatic, next to end doubly bonded carbon", "Ver. 2.0, Ref. 3"}, {"N", "14.00670", "n=2", "non aromatic doubly bonded nitrogen", "Ver. 2.0, Ref. 3"}, {"N", "14.00670", "ni", "nitrogen in charged imidazole ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n1", "sp2 nitrogen in charged arginine", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n2", "sp2 nitrogen (NH2) in guanidinium group (HN=C(NH2)2)", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nt", "sp nitrogen involved in a triple bond", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nz", "sp nitrogen in N2", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o", "generic SP3 oxygen", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "oh", "oxygen bonded to hydrogen", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "oc", "sp3 oxygen in ether or acetals", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "oe", "sp3 oxygen in ester", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o3e", "sp3 oxygen in three membered ring", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o4e", "sp3 oxygen in four membered ring", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o'", "oxygen in carbonyl group", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "op", "sp2 aromatic in 5 membered ring", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o*", "oxygen in water", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o-", "partial double oxygen bonded to something then bonded to another partial double oxygen", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "h", "generic hydrogen bound to C, Si,or H", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "h*", "hydrogen bonded to nitrogen, Oxygen", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "h+", "charged hydrogen in cations", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hs", "hydrogen bonded to sulfur", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hc", "hydrogen bonded to carbon", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hp", "hydrogen bonded to phosphorus", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "ho", "hydrogen bonded to oxygen", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hn", "hydrogen bonded to nitrogen", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hi", "Hydrogen in charged imidazole ring", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hw", "hydrogen in water", "Ver. 1.0, Ref. 1"}, {"D", "2.014000", "dw", "deuterium in heivy water", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s", "sp3 sulfur", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sc", "sp3 sulfur in methionines (C-S-C) group", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s3e", "sulfur in three membered ring", "Ver. 2.0, Ref. 2"}, {"S", "32.06400", "s4e", "sulfur in four membered ring", "Ver. 2.0, Ref. 2"}, {"S", "32.06400", "s1", "sp3 sulfur involved in (S-S) group of disulfides", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sh", "sp3 sulfur in sulfhydryl (-SH) group (e.g. cysteine)", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sp", "sulfur in an aromatic ring (e.g. thiophene)", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s'", "S in thioketone group", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s-", "partial double sulfur bonded to something then bonded to another partial double oxygen or sulfur", "Ver. 1.0, Ref. 1"}, {"P", "30.97380", "p", "general phosphorous atom", "Ver. 1.0, Ref. 1"}, {"Si", "28.08600", "si", "silicon atom", "Ver. 1.0, Ref. 1"}, {"Ca", "40.08000", "ca+", "calcium ion", "Ver. 1.0, Ref. 1"}, {"F", "18.99840", "f", "fluorine atom", "Ver. 1.0, Ref. 1"}, {"Cl", "35.45300", "cl", "chlorine atom", "Ver. 1.0, Ref. 1"}, {"Cl", "35.45300", "Cl", "chlorine ion", "Ver. 1.0, Ref. 1"}, {"Br", "79.90900", "br", "bromine atom", "Ver. 1.0, Ref. 1"}, {"Br", "79.90900", "Br", "bromine ion", "Ver. 1.0, Ref. 1"}, {"I", "126.9044", "i", "iodine atom", "Ver. 1.0, Ref. 1"}, {"Na", "22.98980", "Na", "sodium ion", "Ver. 1.0, Ref. 1"}, {"L", "1.000000", "lp", "lone pair", "Ver. 1.0, Ref. 1"}, {"Ar", "39.94800", "ar", "Argon atom", "Ver. 1.0, Ref. 1"}}; /* Equivalence table for key symbols CFF91 auto with: 0 = Key in atom list 1 = Non-bonded 2 = Bond increments 3 = Bonds 4 = Angles end atom 5 = Angles appex atom 6 = Torsion end atom 7 = Torsion center atom 8 = Inversion end atom 9 = Inversion center atom 10 = CFF91 info */ char * CFF91_equivalence_auto[97][11]= {{"h", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"d", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"hc", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"hn", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"ho", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"hp", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"hs", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"h*", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"hw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"hi", "h*", "hi", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"h+", "h+", "h+", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"dw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"c", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"cg", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"ca", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c3", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"cn", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c2", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c1", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"co", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c3m", "c", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c4m", "c", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"coh", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c3h", "c", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c4h", "c", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"cp", "cp", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 2"}, {"c5", "cp", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 2"}, {"cs", "cp", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 2"}, {"ci", "cp", "ci", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 2"}, {"c*", "c*", "c*", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 4"}, {"c\"", "c*", "c*", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 4"}, {"c'", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 2"}, {"cr", "cr", "cr", "cr_", "c_", "c'_", "c_", "c=_3", "c_", "c'_", "Ver. 2.0, Ref. 2"}, {"c-", "c-", "c-", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 2"}, {"c+", "c+", "c+", "cr_", "c_", "c'_", "c_", "c+_", "c_", "c'_", "Ver. 2.0, Ref. 2"}, {"c=", "c=", "c=", "c=_3", "c_", "c=_", "c_", "c=_3", "c_", "c=_", "Ver. 2.0, Ref. 2"}, {"c=1", "c=", "c=", "c=_1", "c_", "c=_", "c_", "c=_1", "c_", "c=_", "Ver. 2.0, Ref. 2"}, {"c=2", "c=", "c=", "c=_2", "c_", "c=_", "c_", "c=_2", "c_", "c=_", "Ver. 2.0, Ref. 2"}, {"ct", "c=", "ct", "ct_", "c_", "ct_", "c_", "ct_", "c_", "ct_", "Ver. 2.0, Ref. 7"}, {"ct2", "c=", "ct", "ct2_", "c_", "ct2_", "c_", "ct_", "c_", "ct_", "Ver. 2.0, Ref. 6"}, {"na", "na", "na", "na_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 2"}, {"n3m", "na", "na", "n3m_", "n3m_", "n3m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 2"}, {"n4m", "na", "na", "n4m_", "n4m_", "n4m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 2"}, {"np", "np", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 2"}, {"npc", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 2"}, {"nh", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 2"}, {"nho", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 2"}, {"nh+", "nh", "nh+", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 2"}, {"ni", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 2"}, {"nn", "nn", "nn", "na_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 2"}, {"nb", "nn", "nn", "np_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 2"}, {"n+", "n+", "n+", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 2"}, {"n4", "n+", "n+", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 2"}, {"n", "n", "n", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 2"}, {"n3n", "n", "n", "n3m_", "n3m_", "n3m_", "n_", "n3n_", "n_", "n_", "Ver. 2.0, Ref. 2"}, {"n4n", "n", "n", "n4m_", "n4m_", "n4m_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 2"}, {"nr", "nr", "nr", "n_", "n_", "n_", "n_", "n_", "n_", "nr_", "Ver. 2.0, Ref. 2"}, {"n2", "nr", "nr", "n_", "n_", "n_", "n_", "n_", "n_", "nr_", "Ver. 2.0, Ref. 2"}, {"n1", "nr", "nr", "n_", "n_", "n_", "n_", "n_", "n_", "nr_", "Ver. 2.0, Ref. 2"}, {"n=", "n=", "n=", "n=_3", "n_", "n_", "n_", "n=_3", "n_", "n=_", "Ver. 2.0, Ref. 2"}, {"n=1", "n=", "n=", "n=_1", "n_", "n_", "n_", "n=_1", "n_", "n=_", "Ver. 2.0, Ref. 2"}, {"n=2", "n=", "n=", "n=_2", "n_", "n_", "n_", "n=_2", "n_", "n=_", "Ver. 2.0, Ref. 2"}, {"nt", "nt", "nt", "nt_", "n_", "nt_", "n_", "nt_", "n_", "nt_", "Ver. 2.0, Ref. 2"}, {"nz", "nz", "nz", "nz_", "n_", "nz_", "n_", "nz_", "n_", "nz_", "Ver. 2.0, Ref. 2"}, {"o", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"o*", "o*", "o*", "o_", "o_", "o*_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"oh", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"oc", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"oe", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"o3e", "o", "o", "o3e_", "o3e_", "o3e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"o4e", "o", "o", "o4e_", "o4e_", "o4e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"op", "op", "op", "op_", "o_", "op_", "o_", "o_", "o_", "op_", "Ver. 2.0, Ref. 2"}, {"o'", "o'", "o'", "o'_", "o'_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"o-", "o-", "o-", "o-_", "o'_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"s", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"s'", "s", "s'", "s'_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"s-", "s", "s-", "s-_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"sc", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"s3e", "s", "s", "s3e_", "s3e_", "s3e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"s4e", "s", "s", "s4e_", "s4e_", "s4e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"s1", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"sh", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"sp", "sp", "sp", "sp_", "s_", "sp_", "s_", "sp_", "s_", "sp_", "Ver. 2.0, Ref. 2"}, {"p", "p", "p", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 2"}, {"pz", "p", "p", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 2"}, {"f", "f", "f", "f_", "f_", "f_", "f_", "f_", "f_", "f_", "Ver. 2.0, Ref. 2"}, {"i", "i", "i", "i_", "f_", "i_", "i_", "i_", "i_", "i_", "Ver. 2.0, Ref. 2"}, {"cl", "cl", "cl", "cl_", "f_", "cl_", "cl_", "cl_", "cl_", "cl_", "Ver. 2.0, Ref. 2"}, {"br", "br", "br", "br_", "f_", "br_", "br_", "br_", "br_", "br_", "Ver. 2.0, Ref. 2"}, {"si", "si", "si", "si_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.0, Ref. 2"}, {"sz", "sz", "sz", "sz_", "sz_", "sz_", "sz_", "sz_", "sz_", "sz_", "Ver. 2.0, Ref. 2"}, {"nu", "nu", "nu", "nu_", "nu_", "nu_", "nu_", "nu_", "nu_", "nu_", "Ver. 2.0, Ref. 2"}, {"Cl", "Cl", "Cl", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Ver. 2.0, Ref. 2"}, {"Br", "Br", "Br", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Ver. 2.0, Ref. 2"}, {"Na", "Na", "Na", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Ver. 2.0, Ref. 2"}, {"ar", "ar", "ar", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "Ver. 2.0, Ref. 2"}, {"ca+", "ca+", "ca+", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "Ver. 2.0, Ref. 9"}}; /* Equivalence table for key symbols CFF91 with: 0 = Key in atom list 1 = Non-bonded 2 = Bonds 3 = Angles 4 = Torsion 5 = Inversion 6 = CFF91 info */ char * CFF91_equivalence[95][7]= {{"h", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hs", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hc", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hp", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"h*", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hn", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hi", "h*", "hi", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"ho", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hw", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"h+", "h+", "h+", "h+", "h+", "h+", "Ver. 1.0, Ref. 1"}, {"dw", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c2", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"co", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3m", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c4m", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"coh", "c", "c", "c", "c", "c", "Ver. 2.0, Ref. 2"}, {"c3h", "c", "c", "c", "c", "c", "Ver. 2.0, Ref. 2"}, {"c4h", "c", "c", "c", "c", "c", "Ver. 2.0, Ref. 2"}, {"c1", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"ca", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"cg", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "c=", "c=", "c=", "c=", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "c=1", "c=", "c=1", "c=", "Ver. 2.0, Ref. 3"}, {"c=2", "c=", "c=2", "c=", "c=2", "c=", "Ver. 2.0, Ref. 3"}, {"c*", "c*", "c*", "c*", "c*", "c*", "Ver. 2.0, Ref. 4"}, {"c\"", "c*", "c*", "c*", "c*", "c*", "Ver. 2.0, Ref. 4"}, {"c'", "c'", "c'", "c'", "c'", "c'", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"c5", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"cs", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"ci", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"cr", "cr", "cr", "cr", "cr", "cr", "Ver. 1.0, Ref. 1"}, {"c+", "c+", "c+", "c+", "c+", "c+", "Ver. 1.0, Ref. 1"}, {"c-", "c-", "c-", "c-", "c-", "c-", "Ver. 1.0, Ref. 1"}, {"ct", "c=", "ct", "ct", "ct", "ct", "Ver. 2.0, Ref. 7"}, {"ct2", "c=", "ct2", "ct2", "ct2", "ct2", "Ver. 2.0, Ref. 6"}, {"n", "n", "n", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"n3n", "n", "n", "n", "n", "n", "Ver. 2.0, Ref. 2"}, {"n4n", "n", "n", "n", "n", "n", "Ver. 2.0, Ref. 2"}, {"na", "na", "na", "na", "na", "na", "Ver. 1.0, Ref. 1"}, {"n3m", "na", "na", "na", "na", "na", "Ver. 1.0, Ref. 1"}, {"n4m", "na", "na", "na", "na", "na", "Ver. 1.0, Ref. 1"}, {"nn", "nn", "nn", "nn", "nn", "nn", "Ver. 1.0, Ref. 1"}, {"nb", "nn", "nn", "nn", "nn", "nn", "Ver. 1.0, Ref. 1"}, {"n+", "n+", "n+", "n+", "n+", "n+", "Ver. 1.0, Ref. 1"}, {"n4", "n+", "n+", "n+", "n+", "n+", "Ver. 1.0, Ref. 1"}, {"np", "np", "np", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"npc", "nh", "nh", "nh", "nh", "nh", "Ver. 2.0, Ref. 2"}, {"nh", "nh", "nh", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"nho", "nh", "nh", "nh", "nh", "nh", "Ver. 2.0, Ref. 2"}, {"nh+", "nh", "nh+", "nh", "nh", "nh", "Ver. 2.0, Ref. 2"}, {"nr", "nr", "nr", "nr", "nr", "nr", "Ver. 1.0, Ref. 1"}, {"n2", "nr", "nr", "nr", "nr", "nr", "Ver. 1.0, Ref. 1"}, {"n=", "n=", "n=", "n=", "n=", "n=", "Ver. 1.0, Ref. 1"}, {"n=1", "n=", "n=1", "n=", "n=1", "n=", "Ver. 1.0, Ref. 1"}, {"n=2", "n=", "n=2", "n=", "n=2", "n=", "Ver. 1.0, Ref. 1"}, {"n1", "nr", "nr", "nr", "nr", "nr", "Ver. 1.0, Ref. 1"}, {"ni", "nh", "nh", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"nt", "n=", "nt", "nt", "nt", "nt", "Ver. 2.0, Ref. 5"}, {"nz", "n=", "nz", "nz", "nz", "nz", "Ver. 1.0, Ref. 10"}, {"o'", "o'", "o'", "o'", "o'", "o'", "Ver. 1.0, Ref. 1"}, {"op", "op", "op", "op", "op", "op", "Ver. 1.0, Ref. 1"}, {"o", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"oc", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"oe", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"o3e", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"o4e", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"o-", "o-", "o-", "o-", "o-", "o-", "Ver. 1.0, Ref. 1"}, {"o*", "o*", "o*", "o*", "o*", "o*", "Ver. 1.0, Ref. 1"}, {"oh", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"s", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sc", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"s3e", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 2"}, {"s4e", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 2"}, {"s1", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sh", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sp", "sp", "sp", "sp", "sp", "sp", "Ver. 1.0, Ref. 1"}, {"s'", "sp", "s'", "s'", "s'", "s'", "Ver. 1.0, Ref. 11"}, {"s-", "sp", "s-", "s-", "s-", "s-", "Ver. 1.0, Ref. 11"}, {"p", "p", "p", "p", "p", "p", "Ver. 1.0, Ref. 1"}, {"pz", "p", "p", "p", "p", "p", "Ver. 1.0, Ref. 1"}, {"f", "f", "f", "f", "f", "f", "Ver. 1.0, Ref. 1"}, {"i", "i", "i", "i", "i", "i", "Ver. 1.0, Ref. 1"}, {"cl", "cl", "cl", "cl", "cl", "cl", "Ver. 1.0, Ref. 1"}, {"br", "br", "br", "br", "br", "br", "Ver. 1.0, Ref. 1"}, {"si", "si", "si", "si", "si", "si", "Ver. 1.0, Ref. 1"}, {"sz", "sz", "sz", "sz", "sz", "sz", "Ver. 1.0, Ref. 1"}, {"nu", "nu", "nu", "nu", "nu", "nu", "Ver. 1.0, Ref. 1"}, {"Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Ver. 1.0, Ref. 1"}, {"Br", "Br", "Br", "Br", "Br", "Br", "Ver. 1.0, Ref. 1"}, {"Na", "Na", "Na", "Na", "Na", "Na", "Ver. 1.0, Ref. 1"}, {"ar", "ar", "ar", "ar", "ar", "ar", "Ver. 1.0, Ref. 1"}, {"ca+", "ca+", "ca+", "ca+", "ca+", "ca+", "Ver. 2.0, Ref. 9"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= CFF91 info E = K2 * (R - R0)^2 */ char * CFF91_bonds_auto[667][5]= {{"c3m_", "c3m_", "1.5100", "322.7158", "Ver. 2.0, Ref. 2"}, {"c3m_", "c4m_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c3m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c3m_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 2"}, {"c3m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 2"}, {"c3m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "ct_", "1.4000", "340.000", "Ver. 2.0, Ref. 2"}, {"c3m_", "ct2_", "1.4000", "340.0000", "Ver. 2.0, Ref. 6"}, {"c3m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c3m_", "n3m_", "1.4850", "356.5988", "Ver. 2.0, Ref. 2"}, {"c3m_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c3m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 2"}, {"c3m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 2"}, {"c3m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 2"}, {"c3m_", "o3e_", "1.4340", "273.2000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o4e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c3m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 2"}, {"c3m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 2"}, {"c3m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 2"}, {"c3m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s4e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c3m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 2"}, {"c3m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"c3m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "1.5520", "322.7158", "Ver. 2.0, Ref. 2"}, {"c4m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c4m_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 2"}, {"c4m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 2"}, {"c4m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "ct2_", "1.4000", "340.0000", "Ver. 2.0, Ref. 6"}, {"c4m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c4m_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c4m_", "n4m_", "1.4670", "356.5988", "Ver. 2.0, Ref. 2"}, {"c4m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 2"}, {"c4m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 2"}, {"c4m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 2"}, {"c4m_", "o3e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o4e_", "1.4462", "273.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 2"}, {"c4m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 2"}, {"c4m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 2"}, {"c4m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s4e_", "1.8470", "228.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c4m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 2"}, {"c4m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"c4m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 2"}, {"c_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c'_", "n3m_", "1.4460", "272.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "n4m_", "1.4000", "332.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "s3e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 2"}, {"c'_", "s4e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 2"}, {"cp_", "n3m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "n4m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "s3e", "1.7300", "228.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "s4e", "1.7300", "228.0000", "Ver. 2.0, Ref. 2"}, {"c=", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 2"}, {"c=", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 2"}, {"c=_1", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_1", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_2", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_2", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_3", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_3", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 2"}, {"c=", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 2"}, {"c=_1", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_1", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_2", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_2", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_3", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_3", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"ct_", "n3m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 2"}, {"ct2_", "n3m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 6"}, {"ct_", "n4m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 2"}, {"ct2_", "n4m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 6"}, {"ct_", "s3e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 2"}, {"ct2_", "s3e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 6"}, {"ct_", "s4e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 2"}, {"ct2_", "s4e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 6"}, {"na_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"na_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"na_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"na_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n3m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n3m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 2"}, {"n3m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n3m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n3m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n3m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n3m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n3m_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 2"}, {"n3m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 2"}, {"n3m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 2"}, {"n3m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 2"}, {"n3m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 2"}, {"n3m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 2"}, {"n3m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 2"}, {"n3m_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 2"}, {"n3m_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 2"}, {"n3m_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 2"}, {"n3m_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 2"}, {"n3m_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 2"}, {"n3m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 2"}, {"n4m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n4m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 2"}, {"n4m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n4m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n4m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n4m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n4m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n4m_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 2"}, {"n4m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 2"}, {"n4m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 2"}, {"n4m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 2"}, {"n4m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n4m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 2"}, {"n4m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 2"}, {"n4m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n4m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n4m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 2"}, {"n4m_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 2"}, {"n4m_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 2"}, {"n4m_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 2"}, {"n4m_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 2"}, {"n4m_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 2"}, {"n4m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 2"}, {"n_", "s3e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 2"}, {"n_", "s4e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 2"}, {"np_", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"np_", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=_1", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_1", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_2", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_2", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_3", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_3", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"o_", "s3e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 2"}, {"o_", "s4e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 2"}, {"op_", "s3e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 2"}, {"op_", "s4e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 2"}, {"o'_", "s3e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 2"}, {"o'_", "s4e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 2"}, {"s_", "s3e_", "2.1000", "160.0000", "Ver. 2.0, Ref. 2"}, {"s_", "s4e_", "2.1000", "160.0000", "Ver. 2.0, Ref. 2"}, {"sp_", "s3e_", "2.0400", "175.1260", "Ver. 2.0, Ref. 2"}, {"sp_", "s4e_", "2.0400", "175.1260", "Ver. 2.0, Ref. 2"}, {"s'_", "s3e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 2"}, {"s'_", "s4e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 2"}, {"s3e_", "s3e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 2"}, {"s3e_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 2"}, {"s3e_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 2"}, {"s3e_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 2"}, {"s3e_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 2"}, {"s3e_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 2"}, {"s3e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 2"}, {"s4e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 2"}, {"s4e_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 2"}, {"s4e_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 2"}, {"s4e_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 2"}, {"s4e_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 2"}, {"s4e_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 2"}, {"s4e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 2"}, {"c_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 2"}, {"c_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 2"}, {"c_", "ct2_", "1.4000", "340.0000", "Ver. 2.0, Ref. 6"}, {"c_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 2"}, {"c_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 2"}, {"c_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 2"}, {"c_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 2"}, {"c_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 2"}, {"c_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 2"}, {"c_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 2"}, {"c_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"c_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"c_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"c_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 2"}, {"c_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "c'_", "1.5000", "266.4000", "Ver. 2.0, Ref. 2"}, {"c'_", "cp_", "1.5000", "284.3316", "Ver. 2.0, Ref. 2"}, {"c'_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c'_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c'_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c'_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c'_", "ct_", "1.4200", "311.1492", "Ver. 2.0, Ref. 2"}, {"c'_", "ct2_", "1.4200", "311.1492", "Ver. 2.0, Ref. 6"}, {"c'_", "n_", "1.3600", "388.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "n=", "1.4050", "296.2996", "Ver. 2.0, Ref. 2"}, {"c'_", "n=_1", "1.4050", "296.2996", "Ver. 2.0, Ref. 3"}, {"c'_", "n=_2", "1.4050", "296.2996", "Ver. 2.0, Ref. 3"}, {"c'_", "n=_3", "1.4050", "296.2996", "Ver. 2.0, Ref. 3"}, {"c'_", "np_", "1.4050", "296.2996", "Ver. 2.0, Ref. 2"}, {"c'_", "o_", "1.3400", "400.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "o'_", "1.2200", "615.3220", "Ver. 2.0, Ref. 2"}, {"c'_", "o-_", "1.2500", "572.8860", "Ver. 2.0, Ref. 2"}, {"c'_", "op_", "1.3500", "294.1008", "Ver. 2.0, Ref. 2"}, {"c'_", "s_", "1.7700", "175.0035", "Ver. 2.0, Ref. 2"}, {"c'_", "s'_", "1.6110", "510.2775", "Ver. 2.0, Ref. 2"}, {"c'_", "s-_", "1.6800", "280.3060", "Ver. 2.0, Ref. 2"}, {"c'_", "sp_", "1.7400", "215.3532", "Ver. 2.0, Ref. 2"}, {"c'_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c'_", "p_", "1.7200", "241.3820", "Ver. 2.0, Ref. 2"}, {"c'_", "f_", "1.3900", "217.7092", "Ver. 2.0, Ref. 2"}, {"c'_", "cl_", "1.7270", "249.8588", "Ver. 2.0, Ref. 2"}, {"c'_", "br_", "1.8750", "228.2808", "Ver. 2.0, Ref. 2"}, {"c'_", "si_", "1.8300", "239.3552", "Ver. 2.0, Ref. 2"}, {"c'_", "i_", "2.0610", "208.6024", "Ver. 2.0, Ref. 2"}, {"cp_", "cp_", "1.3900", "480.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"cp_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"cp_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"cp_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"cp_", "ct_", "1.4000", "321.6716", "Ver. 2.0, Ref. 2"}, {"cp_", "ct2_", "1.4000", "321.6716", "Ver. 2.0, Ref. 6"}, {"cp_", "na_", "1.4120", "257.7752", "Ver. 2.0, Ref. 2"}, {"cp_", "n_", "1.4200", "280.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "n=", "1.3850", "316.0380", "Ver. 2.0, Ref. 2"}, {"cp_", "n=_1", "1.3850", "316.0380", "Ver. 2.0, Ref. 3"}, {"cp_", "n=_2", "1.3850", "316.0380", "Ver. 2.0, Ref. 3"}, {"cp_", "n=_3", "1.3850", "316.0380", "Ver. 2.0, Ref. 3"}, {"cp_", "np_", "1.3500", "440.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "n+_", "1.4120", "251.3344", "Ver. 2.0, Ref. 2"}, {"cp_", "o_", "1.3700", "384.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "o'_", "1.3300", "297.4852", "Ver. 2.0, Ref. 2"}, {"cp_", "op_", "1.3700", "420.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "s_", "1.7300", "228.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "s'_", "1.7200", "239.8024", "Ver. 2.0, Ref. 2"}, {"cp_", "sp_", "1.7106", "320.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 2"}, {"cp_", "p_", "1.7000", "235.0428", "Ver. 2.0, Ref. 2"}, {"cp_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"cp_", "i_", "2.0410", "217.4512", "Ver. 2.0, Ref. 2"}, {"cp_", "si_", "1.8100", "225.1676", "Ver. 2.0, Ref. 2"}, {"ci", "ci", "1.3900", "280.0000", "Ver. 2.0, Ref. 2"}, {"ci", "ni", "1.3800", "320.0000", "Ver. 2.0, Ref. 2"}, {"ci", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 2"}, {"c=", "c=", "1.3300", "655.2000", "Ver. 2.0, Ref. 2"}, {"c=_3", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 3"}, {"c=_1", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 3"}, {"c=_2", "c=_2", "1.4100", "480.0000", "Ver. 2.0, Ref. 3"}, {"c=_1", "c=_2", "1.4800", "320.0000", "Ver. 2.0, Ref. 3"}, {"c=_1", "c=_1", "1.4800", "320.0000", "Ver. 2.0, Ref. 3"}, {"c=_2", "c=_3", "1.4800", "320.0000", "Ver. 2.0, Ref. 3"}, {"c=", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 2"}, {"c=", "ct2_", "1.3300", "655.2000", "Ver. 2.0, Ref. 6"}, {"c=", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 2"}, {"c=", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 2"}, {"c=_1", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_1", "ct2_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_1", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_1", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 3"}, {"c=_2", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_2", "ct2_", "1.3300", "655.2000", "Ver. 2.0, Ref. 3"}, {"c=_2", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_2", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 3"}, {"c=_3", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_3", "ct2_", "1.3300", "655.2000", "Ver. 2.0, Ref. 3"}, {"c=_3", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_3", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 3"}, {"c=", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 2"}, {"c=_3", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"c=_1", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"c=_3", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"c=_2", "n=_2", "1.3430", "493.5268", "Ver. 2.0, Ref. 3"}, {"c=_1", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_2", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_1", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_3", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_2", "n=_3", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 2"}, {"c=", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 2"}, {"c=", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 2"}, {"c=", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 2"}, {"c=", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 2"}, {"c=", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 2"}, {"c=", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 2"}, {"c=", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 2"}, {"c=", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 2"}, {"c=", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 2"}, {"c=", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 2"}, {"c=", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 2"}, {"c=", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 2"}, {"c=", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 2"}, {"c=_1", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_1", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 3"}, {"c=_1", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 3"}, {"c=_1", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 3"}, {"c=_1", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 3"}, {"c=_1", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 3"}, {"c=_1", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_1", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 3"}, {"c=_1", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 3"}, {"c=_1", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 3"}, {"c=_1", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 3"}, {"c=_1", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 3"}, {"c=_1", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 3"}, {"c=_1", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 3"}, {"c=_2", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_2", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 3"}, {"c=_2", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 3"}, {"c=_2", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 3"}, {"c=_2", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 3"}, {"c=_2", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 3"}, {"c=_2", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_2", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 3"}, {"c=_2", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 3"}, {"c=_2", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 3"}, {"c=_2", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 3"}, {"c=_2", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 3"}, {"c=_2", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 3"}, {"c=_2", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 3"}, {"c=_3", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_3", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 3"}, {"c=_3", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 3"}, {"c=_3", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 3"}, {"c=_3", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 3"}, {"c=_3", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 3"}, {"c=_3", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_3", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 3"}, {"c=_3", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 3"}, {"c=_3", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 3"}, {"c=_3", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 3"}, {"c=_3", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 3"}, {"c=_3", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 3"}, {"c=_3", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 3"}, {"cr_", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 2"}, {"cr_", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"cr_", "n=_2", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"cr_", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"cr_", "n_", "1.3200", "388.0000", "Ver. 2.0, Ref. 2"}, {"ct_", "ct_", "1.2040", "800.0000", "Ver. 2.0, Ref. 2"}, {"ct_", "nt_", "1.1580", "880.0000", "Ver. 2.0, Ref. 2"}, {"ct_", "na_", "1.3820", "286.8096", "Ver. 2.0, Ref. 2"}, {"ct_", "n_", "1.3550", "289.4448", "Ver. 2.0, Ref. 2"}, {"ct_", "n=", "1.3550", "342.2448", "Ver. 2.0, Ref. 2"}, {"ct_", "n=_1", "1.3550", "342.2448", "Ver. 2.0, Ref. 3"}, {"ct_", "n=_2", "1.3550", "342.2448", "Ver. 2.0, Ref. 3"}, {"ct_", "n=_3", "1.3550", "342.2448", "Ver. 2.0, Ref. 3"}, {"ct_", "n+_", "1.3820", "278.3768", "Ver. 2.0, Ref. 2"}, {"ct_", "o_", "1.3130", "367.8164", "Ver. 2.0, Ref. 2"}, {"ct_", "s_", "1.7200", "271.4328", "Ver. 2.0, Ref. 2"}, {"ct_", "op_", "1.3000", "346.4680", "Ver. 2.0, Ref. 2"}, {"ct_", "o'_", "1.3000", "318.8680", "Ver. 2.0, Ref. 2"}, {"ct_", "sp_", "1.6900", "256.0344", "Ver. 2.0, Ref. 2"}, {"ct_", "s'_", "1.6900", "270.8344", "Ver. 2.0, Ref. 2"}, {"ct_", "p_", "1.6700", "273.4668", "Ver. 2.0, Ref. 2"}, {"ct_", "h_", "1.0530", "316.9016", "Ver. 2.0, Ref. 2"}, {"ct_", "f_", "1.3400", "278.3932", "Ver. 2.0, Ref. 2"}, {"ct_", "cl_", "1.6770", "292.1952", "Ver. 2.0, Ref. 2"}, {"ct_", "br_", "1.8250", "268.8528", "Ver. 2.0, Ref. 2"}, {"ct_", "i_", "2.0110", "248.9268", "Ver. 2.0, Ref. 2"}, {"ct_", "si_", "1.7800", "267.2964", "Ver. 2.0, Ref. 2"}, {"ct2_", "ct2_", "1.2040", "800.0000", "Ver. 2.0, Ref. 6"}, {"ct2_", "nt_", "1.1580", "880.0000", "Ver. 2.0, Ref. 6"}, {"ct2_", "na_", "1.3820", "286.8096", "Ver. 2.0, Ref. 6"}, {"ct2_", "n_", "1.3550", "289.4448", "Ver. 2.0, Ref. 6"}, {"ct2_", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 6"}, {"ct2_", "n=_1", "1.3550", "342.2448", "Ver. 2.0, Ref. 6"}, {"ct2_", "n=_2", "1.2600", "560.0000", "Ver. 2.0, Ref. 6"}, {"ct2_", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 6"}, {"ct2_", "n+_", "1.3820", "278.3768", "Ver. 2.0, Ref. 6"}, {"ct2_", "o_", "1.3130", "367.8164", "Ver. 2.0, Ref. 6"}, {"ct2_", "s_", "1.7200", "271.4328", "Ver. 2.0, Ref. 6"}, {"ct2_", "op_", "1.3000", "346.4680", "Ver. 2.0, Ref. 6"}, {"ct2_", "o'_", "1.1600", "615.3220", "Ver. 2.0, Ref. 6"}, {"ct2_", "sp_", "1.6900", "256.0344", "Ver. 2.0, Ref. 6"}, {"ct2_", "s'_", "1.6000", "510.2775", "Ver. 2.0, Ref. 6"}, {"ct2_", "p_", "1.6700", "273.4668", "Ver. 2.0, Ref. 6"}, {"ct2_", "h_", "1.0530", "316.9016", "Ver. 2.0, Ref. 6"}, {"ct2_", "f_", "1.3400", "278.3932", "Ver. 2.0, Ref. 6"}, {"ct2_", "cl_", "1.6770", "292.1952", "Ver. 2.0, Ref. 6"}, {"ct2_", "br_", "1.8250", "268.8528", "Ver. 2.0, Ref. 6"}, {"ct2_", "i_", "2.0110", "248.9268", "Ver. 2.0, Ref. 6"}, {"ct2_", "si_", "1.7800", "267.2964", "Ver. 2.0, Ref. 6"}, {"na_", "na_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"na_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 2"}, {"na_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"na_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"na_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"na_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"na_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"na_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 2"}, {"na_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 2"}, {"na_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"na_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 2"}, {"na_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 2"}, {"na_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 2"}, {"na_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 2"}, {"na_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 2"}, {"na_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 2"}, {"na_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 2"}, {"na_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 2"}, {"na_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 2"}, {"na_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 2"}, {"na_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 2"}, {"n_", "n_", "1.3400", "220.0000", "Ver. 2.0, Ref. 2"}, {"n_", "np_", "1.3400", "272.8000", "Ver. 2.0, Ref. 2"}, {"n_", "n=", "1.3400", "272.8000", "Ver. 2.0, Ref. 2"}, {"n_", "n=_1", "1.3400", "272.8000", "Ver. 2.0, Ref. 3"}, {"n_", "n=_2", "1.3400", "272.8000", "Ver. 2.0, Ref. 3"}, {"n_", "n=_3", "1.3400", "272.8000", "Ver. 2.0, Ref. 3"}, {"n_", "n+_", "1.3670", "210.6360", "Ver. 2.0, Ref. 2"}, {"n_", "o_", "1.2980", "301.2632", "Ver. 2.0, Ref. 2"}, {"n_", "s_", "1.7050", "210.6208", "Ver. 2.0, Ref. 2"}, {"n_", "op_", "1.2850", "267.1080", "Ver. 2.0, Ref. 2"}, {"n_", "o'_", "1.2850", "239.5080", "Ver. 2.0, Ref. 2"}, {"n_", "sp_", "1.6750", "193.4844", "Ver. 2.0, Ref. 2"}, {"n_", "s'_", "1.6750", "208.2844", "Ver. 2.0, Ref. 2"}, {"n_", "p_", "1.6550", "219.9524", "Ver. 2.0, Ref. 2"}, {"n_", "h_", "1.0260", "483.4512", "Ver. 2.0, Ref. 2"}, {"n_", "f_", "1.3250", "189.3856", "Ver. 2.0, Ref. 2"}, {"n_", "cl_", "1.6620", "227.5604", "Ver. 2.0, Ref. 2"}, {"n_", "br_", "1.8100", "206.3980", "Ver. 2.0, Ref. 2"}, {"n_", "i_", "1.9960", "186.6972", "Ver. 2.0, Ref. 2"}, {"n_", "si_", "1.7650", "216.8064", "Ver. 2.0, Ref. 2"}, {"np_", "np_", "1.3400", "408.0000", "Ver. 2.0, Ref. 2"}, {"np_", "n=", "1.3400", "325.6000", "Ver. 2.0, Ref. 2"}, {"np_", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"np_", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"np_", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"np_", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 2"}, {"np_", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 2"}, {"np_", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 2"}, {"np_", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 2"}, {"np_", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 2"}, {"np_", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"np_", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 2"}, {"np_", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 2"}, {"np_", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 2"}, {"np_", "h_", "1.0260", "483.4512", "Ver. 2.0, Ref. 2"}, {"np_", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 2"}, {"np_", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 2"}, {"np_", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 2"}, {"np_", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 2"}, {"np_", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 2"}, {"n=", "n=", "1.2100", "651.2000", "Ver. 2.0, Ref. 2"}, {"n=_3", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 3"}, {"n=_1", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 3"}, {"n=_2", "n=_2", "1.2760", "488.0000", "Ver. 2.0, Ref. 3"}, {"n=_1", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_1", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_2", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 2"}, {"n=", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 2"}, {"n=", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 2"}, {"n=_1", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 3"}, {"n=_1", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 3"}, {"n=_2", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 3"}, {"n=_2", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 3"}, {"n=_3", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 3"}, {"n=_3", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 3"}, {"n=", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 2"}, {"n=_1", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 3"}, {"n=_2", "o'_", "1.2225", "434.0900", "Ver. 2.0, Ref. 3"}, {"n=_3", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 3"}, {"n=", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 2"}, {"n=_1", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_2", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_3", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 2"}, {"n=_1", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_2", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_3", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=_1", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_2", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_3", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 2"}, {"n=_1", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 3"}, {"n=_2", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 3"}, {"n=_3", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 2"}, {"n=", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 2"}, {"n=_1", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 3"}, {"n=_2", "s'_", "1.6325", "375.1624", "Ver. 2.0, Ref. 3"}, {"n=_3", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 3"}, {"n=", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 2"}, {"n=", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 2"}, {"n=", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 2"}, {"n=", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 2"}, {"n=", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 2"}, {"n=", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 2"}, {"n=", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 2"}, {"n=_1", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 3"}, {"n=_1", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 3"}, {"n=_1", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 3"}, {"n=_1", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 3"}, {"n=_1", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 3"}, {"n=_1", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 3"}, {"n=_1", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 3"}, {"n=_2", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 3"}, {"n=_2", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 3"}, {"n=_2", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 3"}, {"n=_2", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 3"}, {"n=_2", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 3"}, {"n=_2", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 3"}, {"n=_2", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 3"}, {"n=_3", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 3"}, {"n=_3", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 3"}, {"n=_3", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 3"}, {"n=_3", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 3"}, {"n=_3", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 3"}, {"n=_3", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 3"}, {"n=_3", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 3"}, {"n+_", "n+_", "1.3940", "193.5604", "Ver. 2.0, Ref. 2"}, {"n+_", "o_", "1.3250", "291.0020", "Ver. 2.0, Ref. 2"}, {"n+_", "s_", "1.7320", "200.1168", "Ver. 2.0, Ref. 2"}, {"n+_", "op_", "1.3120", "261.7060", "Ver. 2.0, Ref. 2"}, {"n+_", "o'_", "1.3120", "234.1060", "Ver. 2.0, Ref. 2"}, {"n+_", "sp_", "1.7020", "183.2952", "Ver. 2.0, Ref. 2"}, {"n+_", "s'_", "1.7020", "198.0952", "Ver. 2.0, Ref. 2"}, {"n+_", "p_", "1.6820", "209.1536", "Ver. 2.0, Ref. 2"}, {"n+_", "h_", "1.0650", "461.1848", "Ver. 2.0, Ref. 2"}, {"n+_", "f_", "1.3520", "178.0372", "Ver. 2.0, Ref. 2"}, {"n+_", "cl_", "1.6890", "217.7248", "Ver. 2.0, Ref. 2"}, {"n+_", "br_", "1.8370", "196.5940", "Ver. 2.0, Ref. 2"}, {"n+_", "i_", "2.0230", "177.2764", "Ver. 2.0, Ref. 2"}, {"n+_", "si_", "1.7920", "206.9412", "Ver. 2.0, Ref. 2"}, {"nz_", "nz_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 2"}, {"nt_", "nt_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 2"}, {"o_", "o_", "1.2080", "833.6868", "Ver. 2.0, Ref. 2"}, {"o_", "s_", "1.6930", "288.0848", "Ver. 2.0, Ref. 2"}, {"o_", "op_", "1.2430", "350.7720", "Ver. 2.0, Ref. 2"}, {"o_", "o'_", "1.2430", "323.1720", "Ver. 2.0, Ref. 2"}, {"o_", "sp_", "1.6330", "271.9584", "Ver. 2.0, Ref. 2"}, {"o_", "s'_", "1.6330", "286.7584", "Ver. 2.0, Ref. 2"}, {"o_", "p_", "1.6100", "245.2000", "Ver. 2.0, Ref. 2"}, {"o_", "si_", "1.6650", "392.8000", "Ver. 2.0, Ref. 2"}, {"o_", "h_", "0.9600", "493.8480", "Ver. 2.0, Ref. 2"}, {"o_", "f_", "1.4180", "224.0000", "Ver. 2.0, Ref. 2"}, {"o_", "cl_", "1.6500", "307.0632", "Ver. 2.0, Ref. 2"}, {"o_", "br_", "1.7980", "284.7988", "Ver. 2.0, Ref. 2"}, {"o_", "i_", "1.9840", "264.9868", "Ver. 2.0, Ref. 2"}, {"o'_", "o'_", "1.1100", "484.8000", "Ver. 2.0, Ref. 2"}, {"o'_", "op_", "1.2300", "272.4000", "Ver. 2.0, Ref. 2"}, {"o'_", "s_", "1.5900", "360.4188", "Ver. 2.0, Ref. 2"}, {"o'_", "sp_", "1.5600", "341.2736", "Ver. 2.0, Ref. 2"}, {"o'_", "s'_", "1.5400", "421.5188", "Ver. 2.0, Ref. 2"}, {"o'_", "p_", "1.4800", "524.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "h_", "0.9830", "458.4610", "Ver. 2.0, Ref. 2"}, {"o'_", "f_", "1.2700", "204.0505", "Ver. 2.0, Ref. 2"}, {"o'_", "cl_", "1.6070", "251.7939", "Ver. 2.0, Ref. 2"}, {"o'_", "br_", "1.7550", "233.2954", "Ver. 2.0, Ref. 2"}, {"o'_", "i_", "1.9410", "213.2317", "Ver. 2.0, Ref. 2"}, {"o'_", "si_", "1.6500", "454.7464", "Ver. 2.0, Ref. 2"}, {"op_", "op_", "1.2300", "300.0000", "Ver. 2.0, Ref. 2"}, {"op_", "s_", "1.6800", "266.7748", "Ver. 2.0, Ref. 2"}, {"op_", "sp_", "1.6500", "247.8440", "Ver. 2.0, Ref. 2"}, {"op_", "s'_", "1.6200", "262.9744", "Ver. 2.0, Ref. 2"}, {"op_", "p_", "1.6300", "286.0904", "Ver. 2.0, Ref. 2"}, {"op_", "h_", "0.9830", "486.0610", "Ver. 2.0, Ref. 2"}, {"op_", "f_", "1.2700", "231.6505", "Ver. 2.0, Ref. 2"}, {"op_", "cl_", "1.6070", "279.3939", "Ver. 2.0, Ref. 2"}, {"op_", "br_", "1.7550", "260.8954", "Ver. 2.0, Ref. 2"}, {"op_", "i_", "1.9410", "240.8317", "Ver. 2.0, Ref. 2"}, {"op_", "si", "1.5870", "292.2400", "Ver. 2.0, Ref. 2"}, {"o-_", "p_", "1.4800", "428.0000", "Ver. 2.0, Ref. 2"}, {"s_", "s_", "2.0547", "180.0000", "Ver. 2.0, Ref. 2"}, {"s_", "sp_", "2.0400", "175.1260", "Ver. 2.0, Ref. 2"}, {"s_", "s'_", "2.0400", "189.9260", "Ver. 2.0, Ref. 2"}, {"s_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 2"}, {"s_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 2"}, {"s_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 2"}, {"s_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 2"}, {"s_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 2"}, {"s_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 2"}, {"s_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 2"}, {"s'_", "s'_", "1.9700", "320.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "p_", "1.9700", "255.2524", "Ver. 2.0, Ref. 2"}, {"s'_", "h_", "1.3730", "316.8138", "Ver. 2.0, Ref. 2"}, {"s'_", "f_", "1.6600", "195.3021", "Ver. 2.0, Ref. 2"}, {"s'_", "cl_", "1.9970", "211.1368", "Ver. 2.0, Ref. 2"}, {"s'_", "br_", "2.1450", "187.6017", "Ver. 2.0, Ref. 2"}, {"s'_", "i_", "2.3310", "167.6272", "Ver. 2.0, Ref. 2"}, {"s'_", "si_", "2.0800", "247.5744", "Ver. 2.0, Ref. 2"}, {"s-_", "p_", "1.9800", "210.9800", "Ver. 2.0, Ref. 2"}, {"sp_", "sp_", "2.0100", "160.0000", "Ver. 2.0, Ref. 2"}, {"sp_", "s'_", "1.9900", "240.0000", "Ver. 2.0, Ref. 2"}, {"sp_", "p_", "1.9900", "175.1796", "Ver. 2.0, Ref. 2"}, {"sp_", "h_", "1.3730", "236.5449", "Ver. 2.0, Ref. 2"}, {"sp_", "f_", "1.6600", "180.5021", "Ver. 2.0, Ref. 2"}, {"sp_", "cl_", "1.9970", "196.3368", "Ver. 2.0, Ref. 2"}, {"sp_", "br_", "2.1450", "172.8017", "Ver. 2.0, Ref. 2"}, {"sp_", "i_", "2.3310", "152.8272", "Ver. 2.0, Ref. 2"}, {"sp_", "si_", "2.1000", "167.4260", "Ver. 2.0, Ref. 2"}, {"p_", "p_", "1.9700", "176.0000", "Ver. 2.0, Ref. 2"}, {"p_", "h_", "1.4300", "224.0000", "Ver. 2.0, Ref. 2"}, {"p_", "f_", "1.5400", "230.3664", "Ver. 2.0, Ref. 2"}, {"p_", "cl_", "2.0430", "208.8228", "Ver. 2.0, Ref. 2"}, {"p_", "br_", "2.1800", "183.1472", "Ver. 2.0, Ref. 2"}, {"p_", "i_", "2.3110", "162.7080", "Ver. 2.0, Ref. 2"}, {"p_", "si_", "1.9170", "168.2072", "Ver. 2.0, Ref. 2"}, {"h_", "h_", "0.7461", "398.7301", "Ver. 2.0, Ref. 2"}, {"h_", "f_", "1.0230", "520.7304", "Ver. 2.0, Ref. 2"}, {"h_", "cl_", "1.3600", "345.9024", "Ver. 2.0, Ref. 2"}, {"h_", "br_", "1.5080", "314.1728", "Ver. 2.0, Ref. 2"}, {"h_", "i_", "1.6940", "292.0432", "Ver. 2.0, Ref. 2"}, {"h_", "si_", "1.4630", "288.3168", "Ver. 2.0, Ref. 2"}, {"dw", "dw", "0.7416", "398.2392", "Ver. 2.0, Ref. 2"}, {"f_", "f_", "1.4170", "259.0683", "Ver. 2.0, Ref. 2"}, {"f_", "cl_", "1.6470", "207.1180", "Ver. 2.0, Ref. 2"}, {"f_", "br_", "1.7950", "193.5000", "Ver. 2.0, Ref. 2"}, {"f_", "i_", "1.9810", "174.1664", "Ver. 2.0, Ref. 2"}, {"f_", "si_", "1.5870", "297.3400", "Ver. 2.0, Ref. 2"}, {"cl_", "cl_", "1.9880", "236.5339", "Ver. 2.0, Ref. 2"}, {"cl_", "br_", "2.1320", "209.1876", "Ver. 2.0, Ref. 2"}, {"cl_", "i_", "2.3180", "189.3396", "Ver. 2.0, Ref. 2"}, {"cl_", "si_", "2.0870", "207.9748", "Ver. 2.0, Ref. 2"}, {"br_", "br_", "2.2900", "175.6329", "Ver. 2.0, Ref. 2"}, {"br_", "i_", "2.4660", "165.6156", "Ver. 2.0, Ref. 2"}, {"br_", "si_", "2.2350", "180.2320", "Ver. 2.0, Ref. 2"}, {"i_", "i_", "2.6620", "123.2110", "Ver. 2.0, Ref. 2"}, {"i_", "si_", "2.4210", "158.9664", "Ver. 2.0, Ref. 2"}, {"si_", "si_", "2.1900", "144.0000", "Ver. 2.0, Ref. 2"}}; /* Quartic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= K3 (kcal mol-1), 5= K4 (kcal mol-1), 6= CFF91 info E = K2 * (R - R0)^2 + K3 * (R - R0)^3 + K4 * (R - R0)^4 */ char * CFF91_bonds[58][7]= {{"c", "h", "1.1010", "341.0000", "-691.8900", "844.6000", "Ver. 1.0, Ref. 1"}, {"c", "c", "1.5330", "299.6700", "-501.7700", "679.8100", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "1.3521", "545.2663", "-1005.6330", "1225.7415", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "1.3521", "545.2663", "-1005.6330", "1225.7415", "Ver. 2.0, Ref. 3"}, {"c=", "c=2", "1.3521", "545.2663", "-1005.6330", "1225.7415", "Ver. 2.0, Ref. 3"}, {"c", "c=", "1.5060", "312.3517", "-582.1861", "339.8971", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "1.5060", "312.3517", "-582.1861", "339.8971", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "1.5060", "312.3517", "-582.1861", "339.8971", "Ver. 2.0, Ref. 3"}, {"c=", "h", "1.0883", "365.7679", "-725.5404", "781.6621", "Ver. 1.0, Ref. 1"}, {"c=1", "h", "1.0883", "365.7679", "-725.5404", "781.6621", "Ver. 2.0, Ref. 3"}, {"c=2", "h", "1.0883", "365.7679", "-725.5404", "781.6621", "Ver. 2.0, Ref. 3"}, {"c", "o", "1.4200", "400.3954", "-835.1951", "1313.0142", "Ver. 1.0, Ref. 1"}, {"h*", "o", "0.9650", "532.5062", "-1282.9050", "2004.7658", "Ver. 1.0, Ref. 1"}, {"c", "na", "1.4570", "365.8052", "-699.6368", "998.4842", "Ver. 1.0, Ref. 1"}, {"h*", "na", "1.0060", "466.7400", "-1073.6018", "1251.1056", "Ver. 1.0, Ref. 1"}, {"c", "s", "1.8230", "225.2768", "-327.7057", "488.9722", "Ver. 1.0, Ref. 1"}, {"h", "s", "1.3261", "275.1123", "-531.3181", "562.9630", "Ver. 1.0, Ref. 1"}, {"s", "s", "2.0559", "197.6560", "-196.1366", "644.4103", "Ver. 1.0, Ref. 1"}, {"c", "c*", "1.5140", "312.3719", "-465.8290", "473.8300", "Ver. 1.0, Ref. 4"}, {"c*", "h", "1.1220", "304.8631", "-623.3705", "700.2828", "Ver. 1.0, Ref. 4"}, {"c*", "o'", "1.2160", "823.7948", "-1878.7940", "2303.5311", "Ver. 1.0, Ref. 4"}, {"c*", "o", "1.3649", "368.7309", "-832.4784", "1274.0231", "Ver. 1.0, Ref. 4"}, {"c'", "o'", "1.2195", "820.7018", "-1875.1000", "2303.7600", "Ver. 1.0, Ref. 1"}, {"c'", "n", "1.4160", "359.1591", "-558.4730", "1146.3810", "Ver. 1.0, Ref. 1"}, {"c", "c'", "1.5202", "253.7067", "-423.0370", "396.9000", "Ver. 1.0, Ref. 1"}, {"c", "n", "1.4520", "327.1657", "-547.8990", "526.5000", "Ver. 1.0, Ref. 1"}, {"h*", "n", "1.0100", "462.7500", "-1053.6300", "1545.7570", "Ver. 1.0, Ref. 1"}, {"c'", "h", "1.1110", "325.5717", "-632.1990", "726.0003", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "1.4314", "356.0904", "-627.6179", "1327.6345", "Ver. 1.0, Ref. 1"}, {"cp", "h", "1.0862", "377.7644", "-803.4526", "894.3173", "Ver. 1.0, Ref. 1"}, {"cp", "np", "1.3485", "508.8587", "-977.6914", "1772.5134", "Ver. 1.0, Ref. 1"}, {"np", "np", "1.3121", "513.0111", "-873.6366", "1634.3437", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "1.0053", "463.9230", "-1050.8070", "1284.7262", "Ver. 1.0, Ref. 1"}, {"hi", "nh", "1.0053", "463.9230", "-1050.8070", "1284.7262", "Ver. 1.1, Ref. 1"}, {"cp", "nh", "1.3749", "477.5202", "-848.5592", "1022.3909", "Ver. 1.0, Ref. 1"}, {"nh", "np", "1.3204", "646.7598", "-1639.8800", "6799.7099", "Ver. 1.0, Ref. 1"}, {"cp", "op", "1.3597", "547.5169", "-834.0665", "544.3090", "Ver. 1.0, Ref. 1"}, {"cp", "sp", "1.7053", "364.2568", "-457.7758", "291.1498", "Ver. 1.0, Ref. 1"}, {"cp", "o", "1.3768", "428.8798", "-738.2351", "1114.9655", "Ver. 1.0, Ref. 1"}, {"c", "cp", "1.5010", "321.9021", "-521.8208", "572.1628", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "1.3912", "447.0438", "-784.5346", "886.1671", "Ver. 1.0, Ref. 1"}, {"h*", "nn", "1.0012", "465.8608", "-1066.2360", "1496.5647", "Ver. 1.0, Ref. 1"}, {"h+", "n+", "1.0119", "448.6300", "-963.1917", "1248.4000", "Ver. 1.0, Ref. 1"}, {"c", "n+", "1.5185", "293.1700", "-603.7882", "629.6900", "Ver. 1.0, Ref. 1"}, {"c", "c-", "1.5483", "253.0800", "-449.0300", "457.3200", "Ver. 1.0, Ref. 1"}, {"c-", "o-", "1.2339", "711.3500", "-1543.9000", "1858.6000", "Ver. 1.0, Ref. 1"}, {"c-", "h", "1.1331", "241.0600", "-574.7800", "853.7500", "Ver. 1.0, Ref. 1"}, {"c+", "nr", "1.3834", "380.4600", "-814.4300", "1153.3000", "Ver. 1.0, Ref. 1"}, {"h*", "nr", "1.0023", "462.3900", "-1044.6000", "1468.7000", "Ver. 1.0, Ref. 1"}, {"c", "nr", "1.4695", "340.2400", "-589.4800", "854.5300", "Ver. 1.0, Ref. 1"}, {"nr", "cr", "1.3200", "388.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=", "cr", "1.2600", "560.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=1", "cr", "1.2600", "560.0000", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "cr", "1.2600", "560.0000", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=", "c", "1.4750", "336.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=1", "c", "1.4750", "336.0000", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "c", "1.4750", "336.0000", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"h*", "o*", "0.9700", "563.2800", "-1428.2200", "1902.1200", "Ver. 1.1, Ref. 3"}}; /* Quadratic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= CFF91 info E = K2 * (Theta - Theta0)^2 With: - Theta = Angle - Theta0 = Equilibrium angle - K2 = Spring constant */ char * CFF91_angles_auto[330][6]= {{"c3m_", "c3m_", "c3m_", "60.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c3m_", "c3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c3m_", "n3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c3m_", "c_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c3m_", "c3m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c3m_", "c4m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"o_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o3e_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o3e_", "c3m_", "c3m_", "60.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o4e_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"s_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c3m_", "c3m_", "60.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c3m_", "s3e_", "60.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c3m_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c3m_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c3m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 2"}, {"si_", "c3m_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "c4m_", "95.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "n4m_", "88.3400", "50.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "o4e_", "91.8400", "70.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "s4e_", "94.5900", "62.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "o_", "121.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "n4m_", "88.4000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "s4e_", "89.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c4m_", "c_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c4m_", "c3m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c4m_", "c4m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"o_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o3e_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o4e_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o4e_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o4e_", "c4m_", "s4e_", "89.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"s_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c4m_", "s4e_", "91.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c4m_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c4m_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c4m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 2"}, {"si_", "c4m_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c_", "c3m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c_", "c4m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "n3m_", "125.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "n4m_", "123.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c_", "n3m_", "c3m_", "113.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n3m_", "c3m_", "60.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"o_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"h_", "n3m_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"h_", "n3m_", "c3m_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"f_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"si_", "n3m_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c_", "n4m_", "*", "110.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n4m_", "c4m_", "91.3800", "80.0000", "Ver. 2.0, Ref. 2"}, {"n_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"o_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "n4m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "n4m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"h_", "n4m_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"h_", "n4m_", "c4m_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"f_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"si_", "n4m_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o3e_", "c3m_", "58.9580", "60.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o4e_", "c4m_", "91.7370", "60.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "o_", "*", "120.0000", "72.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "o_", "*", "120.0010", "72.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "op_", "*", "108.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"si_", "op_", "*", "106.0000", "27.5000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"n4m_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s3e_", "c3m_", "44.5000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"n_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"n3m_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"n4m_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"o_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"o'_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s3e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "s3e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"h_", "s3e_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"f_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"si_", "s3e_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s4e_", "c4m_", "85.9200", "58.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"n_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"n3m_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"n4m_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"o_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"o'_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s4e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "s4e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"h_", "s4e_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"f_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"si_", "s4e_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"c4m_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"c3m_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"c4m_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"o_", "c_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"s_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "o_", "110.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "s_", "115.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 2"}, {"si_", "c_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "c_", "115.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 2"}, {"o_", "c'_", "*", "110.0000", "122.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 2"}, {"s_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "c'_", "*", "123.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c'_", "*", "110.0000", "55.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c'_", "n_", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "o_", "123.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "h_", "120.0000", "55.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "n_", "123.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c'_", "h_", "117.0200", "26.3900", "Ver. 2.0, Ref. 2"}, {"f_", "c'_", "*", "120.0000", "99.0000", "Ver. 2.0, Ref. 2"}, {"si_", "c'_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 2"}, {"c_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"o_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"s_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"s_", "cp_", "c_", "114.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"h_", "cp_", "*", "120.0000", "37.0000", "Ver. 2.0, Ref. 2"}, {"f_", "cp_", "*", "120.0000", "99.0000", "Ver. 2.0, Ref. 2"}, {"si_", "cp_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 2"}, {"n_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 2"}, {"o_", "c=_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c=_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"s_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c=_", "*", "120.0000", "37.5000", "Ver. 2.0, Ref. 2"}, {"f_", "c=_", "*", "120.0000", "96.0000", "Ver. 2.0, Ref. 2"}, {"si_", "c=_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "*", "180.0000", "200.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct2_", "*", "180.0000", "200.0000", "Ver. 2.0, Ref. 6"}, {"c_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"o_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "na_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "na_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"f_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"h_", "na_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"si_", "na_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"o_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "n_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "n_", "*", "120.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"f_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"h_", "n_", "*", "122.0000", "35.0000", "Ver. 2.0, Ref. 2"}, {"si_", "n_", "*", "120.0000", "35.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"n_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"o_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"f_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "*", "120.0000", "27.5000", "Ver. 2.0, Ref. 2"}, {"si_", "np_", "*", "120.0000", "27.5000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "nt_", "*", "180.0", "50.0", "Ver. 2.0, Ref. 2"}, {"c_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"n_", "o_", "*", "120.0000", "72.0000", "Ver. 2.0, Ref. 2"}, {"o_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"s_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"h_", "o_", "*", "109.0000", "58.5000", "Ver. 2.0, Ref. 2"}, {"h_", "o*_", "h_", "104.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"f_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"si_", "o_", "*", "124.1000", "56.4000", "Ver. 2.0, Ref. 2"}, {"si_", "o_", "si", "149.8000", "31.1000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"c_", "s_", "*", "102.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"n_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"o_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"o'_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"s_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "s_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"h_", "s_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"f_", "s_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"si_", "s_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"n_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"o_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"o'_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"s_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"s'_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"h_", "sp_", "*", "96.0000", "48.0000", "Ver. 2.0, Ref. 2"}, {"f_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"si_", "sp_", "*", "96.0000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "*", "92.5670", "120.0000", "Ver. 2.0, Ref. 2"}, {"c_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"n_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"o_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "p_", "*", "120.0000", "110.0000", "Ver. 2.0, Ref. 2"}, {"s_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "p_", "*", "120.0000", "100.0000", "Ver. 2.0, Ref. 2"}, {"h_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"f_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"si_", "p_", "*", "109.5000", "30.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"c_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"n_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"o_", "si_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"s_", "si_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"h_", "si_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"f_", "si_", "*", "117.3000", "44.1000", "Ver. 2.0, Ref. 2"}, {"si_", "si_", "*", "113.4000", "33.3000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}}; /* Quartic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= K3, 6= K4, 7= CFF91 info Delta = Theta - Theta0 E = K2 * Delta^2 + K3 * Delta^3 + K4 * Delta^4 With: - Theta = Angle - Theta0 = Equilibrium angle */ char * CFF91_angles[155][8]= {{"h", "c", "h", "107.6600", "39.6410", "-12.9210", "-2.4318", "Ver. 1.0, Ref. 1"}, {"c", "c", "h", "110.7700", "41.4530", "-10.6040", "5.1290", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "112.6700", "39.5160", "-7.4430", "-9.5583", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=1", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=", "c=2", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=1", "c=", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=1", "c=1", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=1", "c=2", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "c=", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "c=1", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "c=2", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c=", "c=", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=2", "c=", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=", "c=1", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=1", "c=1", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=2", "c=1", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=", "c=2", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=1", "c=2", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=2", "c=2", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c", "c=", "h", "117.2700", "30.0944", "-8.0826", "-8.6781", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "h", "117.2700", "30.0944", "-8.0826", "-8.6781", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "h", "117.2700", "30.0944", "-8.0826", "-8.6781", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=", "111.7600", "45.7026", "-10.6396", "-9.9121", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "111.7600", "45.7026", "-10.6396", "-9.9121", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=2", "111.7600", "45.7026", "-10.6396", "-9.9121", "Ver. 2.0, Ref. 3"}, {"c=", "c", "h", "110.0600", "41.2784", "-14.2963", "5.2229", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "h", "110.0600", "41.2784", "-14.2963", "5.2229", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "h", "110.0600", "41.2784", "-14.2963", "5.2229", "Ver. 2.0, Ref. 3"}, {"h", "c=", "h", "115.4900", "29.6363", "-12.4853", "-6.2218", "Ver. 1.0, Ref. 1"}, {"h", "c=1", "h", "115.4900", "29.6363", "-12.4853", "-6.2218", "Ver. 2.0, Ref. 3"}, {"h", "c=2", "h", "115.4900", "29.6363", "-12.4853", "-6.2218", "Ver. 2.0, Ref. 3"}, {"c", "c=", "c", "121.0100", "29.2704", "-10.1175", "-6.7906", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c", "121.0100", "29.2704", "-10.1175", "-6.7906", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "c", "121.0100", "29.2704", "-10.1175", "-6.7906", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=1", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=2", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=2", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 2.0, Ref. 3"}, {"c", "o", "c", "104.5000", "35.7454", "-10.0067", "-6.2729", "Ver. 1.0, Ref. 1"}, {"h", "c", "o", "108.7280", "58.5446", "-10.8088", "-12.4006", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "111.2700", "54.5381", "-8.3642", "-13.0838", "Ver. 1.0, Ref. 1"}, {"c", "o", "h*", "105.8000", "52.7061", "-12.1090", "-9.8681", "Ver. 1.0, Ref. 1"}, {"c", "na", "c", "112.4436", "47.2337", "-10.6612", "-10.2062", "Ver. 1.0, Ref. 1"}, {"c", "na", "h*", "110.9538", "50.8652", "-4.4522", "-10.0298", "Ver. 1.0, Ref. 1"}, {"h*", "na", "h*", "107.0671", "45.2520", "-7.5558", "-9.5120", "Ver. 1.0, Ref. 1"}, {"c", "c", "na", "111.9100", "60.7147", "-13.3366", "-13.0785", "Ver. 1.0, Ref. 1"}, {"h", "c", "na", "110.6204", "51.3137", "-6.7198", "-2.6003", "Ver. 1.0, Ref. 1"}, {"c", "s", "h", "96.8479", "56.7336", "14.2713", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "112.5642", "47.0276", "-10.6790", "-10.1687", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "107.8522", "51.4949", "-13.5270", "7.0260", "Ver. 1.0, Ref. 1"}, {"c", "s", "c", "97.5000", "57.6938", "-5.0559", "-11.8206", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "100.3000", "57.2900", "-6.5301", "-11.8204", "Ver. 1.0, Ref. 1"}, {"s", "c", "s", "111.5000", "27.9677", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "s", "s", "97.2876", "54.4281", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "s", "h", "94.3711", "54.9676", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c*", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.0, Ref. 4"}, {"c*", "c", "h", "107.8594", "38.0833", "-17.5074", "0.0000", "Ver. 1.0, Ref. 4"}, {"c", "c*", "h", "106.2000", "27.4878", "-1.9350", "14.5545", "Ver. 1.0, Ref. 4"}, {"c", "c*", "o'", "119.3000", "65.1016", "-17.9766", "0.0000", "Ver. 1.0, Ref. 4"}, {"h", "c*", "o'", "116.5000", "59.6420", "-21.9179", "0.0000", "Ver. 1.0, Ref. 4"}, {"c", "c*", "c", "110.5884", "34.6214", "-7.0939", "-7.4032", "Ver. 1.0, Ref. 4"}, {"h", "c*", "h", "108.6000", "40.0764", "-6.8139", "-8.4349", "Ver. 1.0, Ref. 4"}, {"o", "c*", "o'", "118.9855", "98.6813", "-22.2485", "10.3673", "Ver. 1.0, Ref. 4"}, {"c", "c*", "o", "100.3182", "38.8631", "-3.8323", "-7.9802", "Ver. 1.0, Ref. 4"}, {"c*", "o", "h*", "111.2537", "53.5303", "-11.8454", "-11.5405", "Ver. 1.0, Ref. 4"}, {"c*", "c", "o", "106.1764", "74.4143", "-12.6018", "-48.7850", "Ver. 1.0, Ref. 4"}, {"c", "o", "c*", "102.9695", "38.9739", "-6.2595", "-8.1710", "Ver. 1.0, Ref. 4"}, {"h", "c*", "o", "94.5209", "32.3751", "-0.6174", "-6.5639", "Ver. 1.0, Ref. 4"}, {"n", "c'", "o'", "125.5420", "92.5720", "-34.4800", "-11.1871", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o'", "123.1451", "55.5431", "-17.2123", "0.1348", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "116.9257", "39.4193", "-10.9945", "-8.7733", "Ver. 1.0, Ref. 1"}, {"c", "n", "c'", "111.0372", "31.8958", "-6.6942", "-6.8370", "Ver. 1.0, Ref. 1"}, {"c'", "n", "h*", "117.9607", "37.4964", "-8.1837", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "h*", "113.8683", "45.9271", "-20.0824", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c", "n", "100.5663", "52.0966", "-5.2642", "-10.7045", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "114.3018", "42.6589", "-10.5464", "-9.3243", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "108.9372", "57.4010", "2.9374", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c'", "108.5295", "51.9747", "-9.4851", "-10.9985", "Ver. 1.0, Ref. 1"}, {"c'", "c", "h", "107.7336", "40.6099", "-28.8121", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "117.8326", "45.9187", "-22.5264", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "110.3935", "52.1647", "-18.4845", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "n", "h*", "116.9402", "37.5749", "-8.6676", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "c", "111.5635", "39.6084", "-8.5459", "-8.5152", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n", "122.5292", "104.0857", "-36.7315", "-24.2616", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c'", "121.9556", "76.3105", "-26.3166", "-17.6944", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "118.9000", "61.0226", "-34.9931", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "117.9400", "35.1558", "-12.4682", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "cp", "111.6800", "84.5159", "-48.5528", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "116.5100", "76.6970", "-35.3868", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "110.5500", "40.8275", "-13.0318", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "np", "115.3800", "85.4923", "-6.5225", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "np", "106.0400", "109.1158", "-42.9319", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "h*", "109.3800", "47.0120", "-17.3556", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "cp", "106.0100", "109.7746", "-9.0636", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nh", "112.5900", "78.6418", "-16.3888", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "109.8000", "43.8408", "-9.5153", "0.0000", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "np", "108.9100", "98.8519", "-5.7502", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "np", "109.3900", "119.1811", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "np", "99.4530", "41.6499", "-5.7422", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "nh", "108.2200", "119.0383", "-24.2061", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "op", "cp", "103.4300", "112.4497", "-25.7326", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "op", "104.1700", "101.3206", "-17.3072", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "op", "106.1700", "48.0995", "-9.0144", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "op", "104.0100", "104.4800", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "sp", "cp", "88.2540", "130.6992", "-18.4789", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "sp", "105.5300", "96.2006", "-44.9267", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "sp", "115.9800", "36.7902", "-13.1342", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "sp", "114.2300", "92.3110", "-35.5956", "0.0000", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "nh", "105.0080", "107.0693", "-27.7154", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o", "123.4200", "73.6781", "-21.6787", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "o", "h*", "108.1900", "53.1250", "-8.5016", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "120.0500", "44.7148", "-22.7352", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "h", "111.0000", "44.3234", "-9.4454", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nn", "121.4584", "61.0647", "-21.6172", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "h*", "111.8725", "40.8369", "-15.6673", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "nn", "h*", "107.5130", "42.5182", "-21.7566", "-4.3372", "Ver. 1.0, Ref. 1"}, {"nn", "cp", "np", "118.5414", "56.9522", "-7.2655", "0.0000", "Ver. 1.0, Ref. 1"}, {"h+", "n+", "h+", "106.1100", "45.3280", "-14.0474", "1.9350", "Ver. 1.0, Ref. 1"}, {"c", "n+", "h+", "110.5100", "49.2170", "-12.2153", "-18.9667", "Ver. 1.0, Ref. 1"}, {"c", "c", "n+", "112.1300", "66.4520", "4.8694", "37.7860", "Ver. 1.0, Ref. 1"}, {"h", "c", "n+", "105.8500", "72.2630", "-28.1923", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n+", "c", "109.7700", "44.8220", "-3.9132", "0.0000", "Ver. 1.0, Ref. 1"}, {"c-", "c", "h", "109.6700", "37.9190", "-7.3877", "-8.0694", "Ver. 1.0, Ref. 1"}, {"c", "c-", "o-", "115.0600", "59.0960", "-15.1430", "-12.9820", "Ver. 1.0, Ref. 1"}, {"o-", "c-", "o-", "130.0100", "111.2900", "-52.3390", "-28.1070", "Ver. 1.0, Ref. 1"}, {"c", "c", "c-", "104.4900", "31.3750", "-4.4023", "-6.5271", "Ver. 1.0, Ref. 1"}, {"h", "c-", "o-", "112.7500", "61.1530", "-14.0190", "-13.2380", "Ver. 1.0, Ref. 1"}, {"c+", "nr", "h*", "119.0700", "45.8110", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "nr", "h*", "110.9100", "31.0910", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"nr", "c+", "nr", "117.4500", "83.9840", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "nr", "117.3500", "55.0400", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "nr", "107.5000", "62.6790", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "nr", "c+", "117.0900", "31.4400", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "nr", "h*", "117.2000", "37.2620", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "nr", "h*", "122.9480", "40.482", "-16.2028", "0.0", "Ver. 1.1, Ref. 1"}, {"n=", "cr", "nr", "125.532", "101.8765", "-41.8094", "0.0", "Ver. 1.1, Ref. 1"}, {"n=1", "cr", "nr", "125.532", "101.8765", "-41.8094", "0.0", "Ver. 2.0, Ref. 3"}, {"n=2", "cr", "nr", "125.532", "101.8765", "-41.8094", "0.0", "Ver. 2.0, Ref. 3"}, {"nr", "cr", "nr", "122.5292", "104.0857", "-36.7315", "-24.2616", "Ver. 1.1, Ref. 1"}, {"c", "n=", "cr", "117.0900", "31.6888", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=", "c", "h", "107.4989", "62.7484", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=1", "c", "h", "107.4989", "62.7484", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "c", "h", "107.4989", "62.7484", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c", "c", "n=", "117.2847", "55.4431", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"h*", "o*", "h*", "103.7000", "49.8400", "-11.6000", "-8.0000", "Ver. 1.2, Ref. 1"}, {"c'", "c", "n+", "100.5663", "52.0966", "-5.2642", "-10.7045", "Ver. 1.3, Ref. 1"}, {"c", "c", "cp", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.3, Ref. 1"}, {"c", "cp", "np", "120.0500", "44.7148", "-22.7352", "0.0000", "Ver. 1.3, Ref. 1"}, {"c-", "c", "n", "100.5663", "52.0966", "-5.2642", "-10.7045", "Ver. 1.3, Ref. 1"}, {"c", "o", "cp", "102.9695", "38.9739", "-6.2595", "-8.1710", "Ver. 1.4, Ref. 1"}, {"cp", "c", "cp", "111.0000", "44.3234", "-9.4454", "0.0000", "Ver. 1.5, Ref. 1"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= Kphi, 5= n, 6= Phi0, 7= CFF91 info E = Kphi * [ 1 + cos(n*Phi - Phi0) ] With: - Kphi = Rotation barrier - n = Periodicity / multiplicity - Phi0 = Equilibrium angle */ char * CFF91_torsions_auto[216][8]= {{"*", "c", "n3n", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "n3n", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "n3n", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "n3n", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=1", "n3n", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "n3n", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n3n", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "ct", "n3n", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "n3n", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "n", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n3n", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=1", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=2", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "o", "n3n", "*", "0.3000", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "s", "n3n", "*", "0.3000", "2", "0.", "Ver. 2.0, Ref. 2"}, {"*", "si", "n3n", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "c", "*", "0.1580", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "c'", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "cp", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "c=", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "c=1", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c", "c=2", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c", "c=_3", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "na", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "n", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "np", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "n=", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "n=1", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c", "n=2", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c", "n=_3", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c", "o", "*", "0.1300", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "s", "*", "0.1367", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "p", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "si", "*", "0.1111", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "c'", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "cp", "*", "2.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "c=", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "c=1", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c'", "c=2", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c'", "c=_3", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c'", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "n", "*", "3.2000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "n", "h", "1.2000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "n=", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "n=1", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c'", "n=2", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c'", "n=_3", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c'", "np", "*", "5.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "np", "h", "1.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "o", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "op", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "s", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "sp", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "si", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "cp", "*", "3.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "c=", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "c=1", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "cp", "c=2", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "cp", "c=_3", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "cp", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "na", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "n", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "np", "*", "2.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "np", "h", "1.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "n=", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "n=1", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "cp", "n=2", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "cp", "n=_3", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "cp", "o", "*", "1.8000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "o", "h", "0.7500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "op", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "s", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "sp", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "si", "*", "0.1667", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "p", "*", "0.2500", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "c=", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=_3", "c=_3", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "c=_3", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "c=2", "*", "3.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "c=1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "c=2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "c=_3", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "na", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "n", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "np", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "np", "h", "0.7500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=1", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "na", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "n", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "np", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "np", "h", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "na", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "n", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "np", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "np", "h", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "na", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "np", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "np", "h", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=", "n=", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=_3", "n=_3", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "n=_3", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n=1", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "n=2", "*", "2.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "n=1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "n=2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "n=1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "n=_3", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n=2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=", "o", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "s", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "sp", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "si", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "p", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=1", "o", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "s", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "sp", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "si", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "p", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "o", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "s", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "sp", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "si", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "p", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "o", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "s", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "sp", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "si", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "p", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c+", "n", "*", "3.4000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "na", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "n", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "np", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "o", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "s", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "si", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "na", "*", "0.2500", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "n", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "np", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "n=", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "n=1", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "na", "n=2", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "na", "n=_3", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "na", "o", "*", "0.0975", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "s", "*", "0.0975", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "si", "*", "0.0667", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "n", "n", "*", "0.3750", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n", "np", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n", "np", "h", "0.3750", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n", "n=", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n", "n=1", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n", "n=2", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n", "n=_3", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n", "o", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n", "s", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n", "si", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "np", "n=", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "n=1", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "np", "n=2", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "np", "n=_3", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "np", "np", "*", "11.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "o", "*", "1.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "op", "*", "11.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "s", "*", "1.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "sp", "*", "10.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "si", "*", "0.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "n=", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "n=1", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"h", "np", "n=2", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"h", "np", "n=_3", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"h", "np", "np", "*", "5.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "o", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "op", "*", "5.50000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "s", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "sp", "*", "5.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "si", "*", "0.1250", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=", "n=", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=_3", "n=_3", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=1", "n=_3", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=2", "n=2", "*", "7.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=1", "n=1", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=1", "n=2", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=2", "n=_3", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=", "o", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=", "s", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=", "si", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=1", "o", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=1", "s", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=1", "si", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=2", "o", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=2", "s", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=2", "si", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "o", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "s", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "si", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "o", "o", "*", "5.0000", "2", "0.", "Ver. 2.0, Ref. 8"}, {"*", "o", "s", "*", "5.0000", "2", "0.", "Ver. 2.0, Ref. 8"}, {"*", "o", "si", "*", "0.3333", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "o", "p", "*", "0.3750", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "s", "s", "*", "5.5000", "2", "0.", "Ver. 2.0, Ref. 2"}, {"*", "s", "si", "*", "0.2333", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "s", "p", "*", "0.3750", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "si", "si", "*", "0.1667", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "si", "p", "*", "0.0000", "3", "0.", "Ver. 2.0, Ref. 2"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= V1, 5= Phi0, 6= V2, 7= Phi0, 8= V3, 9= Phi0, 10= CFF91 info E = SUM(n=1,3) { V(n) * [ 1 - cos(n*Phi - Phi0(n)) ] } With: - Phi0 = Equilibrium angle */ char * CFF91_torsions[294][11]= {{"h", "c", "c", "h", "-0.2432", "0.0", "0.0617", "0.0", "-0.1383", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "h", "0.0000", "0.0", "0.0316", "0.0", "-0.1781", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c", "0.1223", "0.0", "0.0514", "0.0", "-0.2230", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=", "c", "0.0860", "0.0", "5.1995", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=1", "c", "0.0860", "0.0", "5.1995", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c=", "c=2", "c", "0.0860", "0.0", "5.1995", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c=", "c=", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=1", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c=", "c=2", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c=1", "c=", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "c=", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c=", "c=", "h", "0.0000", "0.0", "4.8974", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c=1", "h", "0.0000", "0.0", "4.8974", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c=", "c=2", "h", "0.0000", "0.0", "4.8974", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=", "c=", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=", "c=1", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=", "c=2", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=1", "c=", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=1", "c=1", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=1", "c=2", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=2", "c=", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=2", "c=1", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=2", "c=2", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=", "c=", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=", "c=1", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=", "c=2", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=1", "c=", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=1", "c=1", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=1", "c=2", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=2", "c=", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=2", "c=1", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=2", "c=2", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=", "h", "-0.2433", "0.0", "0.0000", "0.0", "-0.3281", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "h", "-0.2433", "0.0", "0.0000", "0.0", "-0.3281", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=2", "h", "-0.2433", "0.0", "0.0000", "0.0", "-0.3281", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=", "h", "-0.1143", "0.0", "0.0000", "0.0", "-0.1349", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "h", "-0.1143", "0.0", "0.0000", "0.0", "-0.1349", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=2", "h", "-0.1143", "0.0", "0.0000", "0.0", "-0.1349", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c", "c=", "0.0883", "0.0", "0.0000", "0.0", "-0.0198", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c=1", "0.0883", "0.0", "0.0000", "0.0", "-0.0198", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c", "c=2", "0.0883", "0.0", "0.0000", "0.0", "-0.0198", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1166", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1166", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1166", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=", "c", "-0.1143", "0.0", "0.0000", "0.0", "-0.1682", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "c", "-0.1143", "0.0", "0.0000", "0.0", "-0.1682", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=2", "c", "-0.1143", "0.0", "0.0000", "0.0", "-0.1682", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=", "c", "-0.0871", "0.0", "0.0619", "0.0", "-0.7371", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "c", "-0.0871", "0.0", "0.0619", "0.0", "-0.7371", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=2", "c", "-0.0871", "0.0", "0.0619", "0.0", "-0.7371", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=1", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=2", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=1", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=2", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=1", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=2", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=1", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=2", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=1", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=2", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=1", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=2", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=1", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=2", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=1", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=2", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=1", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=2", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=1", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=1", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=1", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=2", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=2", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=2", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c", "c=", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c", "c=", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c", "c=", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c", "c=1", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c", "c=1", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c", "c=2", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "o", "c", "0.5302", "0.0", "0.0000", "0.0", "-0.2836", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "c", "-0.5203", "0.0", "-0.3028", "0.0", "-0.3450", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "o", "-0.1435", "0.0", "0.2530", "0.0", "-0.0905", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "o", "0.7137", "0.0", "0.2660", "0.0", "-0.2545", "0.0", "Ver. 1.0, Ref. 1"}, {"o", "c", "c", "o", "-0.1820", "0.0", "-0.1084", "0.0", "-0.7047", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "o", "h*", "0.1863", "0.0", "-0.4338", "0.0", "-0.2121", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "h*", "-0.6732", "0.0", "-0.4778", "0.0", "-0.1670", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "na", "c", "0.1904", "0.0", "-0.1342", "0.0", "-0.2460", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "na", "h*", "-0.5187", "0.0", "-0.4837", "0.0", "-0.1692", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "na", "h*", "-1.1506", "0.0", "-0.6344", "0.0", "-0.1845", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "na", "c", "-0.1406", "0.0", "0.4168", "0.0", "0.0150", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "na", "-0.2428", "0.0", "0.4065", "0.0", "-0.3079", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "na", "0.1764", "0.0", "0.1766", "0.0", "-0.5206", "0.0", "Ver. 1.0, Ref. 1"}, {"na", "c", "c", "na", "0.3805", "0.0", "0.3547", "0.0", "-0.1102", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "h", "-0.4871", "0.0", "-0.4514", "0.0", "-0.1428", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "h", "-0.5374", "0.0", "-0.5091", "0.0", "-0.1361", "0.0", "Ver. 1.0, Ref. 1"}, {"s", "c", "c", "s", "-1.2002", "0.0", "-1.2999", "0.0", "-0.1626", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "s", "-0.2078", "0.0", "-0.1060", "0.0", "-0.3595", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "c", "-0.5073", "0.0", "0.0155", "0.0", "-0.0671", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "c", "-0.3338", "0.0", "-0.0684", "0.0", "-0.1706", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "c", "-1.8578", "0.0", "-3.8321", "0.0", "-0.4469", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "s", "-0.6269", "0.0", "-0.9598", "0.0", "-0.4957", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "s", "-0.0610", "0.0", "-0.6387", "0.0", "-0.3072", "0.0", "Ver. 1.0, Ref. 1"}, {"s", "c", "s", "c", "-1.9835", "0.0", "-1.9213", "0.0", "-0.3816", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "s", "-0.7017", "0.0", "0.0201", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "h", "-0.4956", "0.0", "-3.4601", "0.0", "-0.2482", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "s", "s", "h", "-0.0528", "0.0", "-3.5171", "0.0", "-0.2394", "0.0", "Ver. 1.0, Ref. 1"}, {"s", "c", "s", "h", "-0.0591", "0.0", "-0.6235", "0.0", "-0.0788", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c*", "0.0929", "0.0", "0.0689", "0.0", "-0.2466", "0.0", "Ver. 1.0, Ref. 4"}, {"c*", "c", "c", "h", "-0.1569", "0.0", "-0.2030", "0.0", "-0.1599", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c", "c*", "h", "0.3055", "0.0", "0.6703", "0.0", "-0.2816", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c", "c*", "o'", "0.6989", "0.0", "1.2089", "0.0", "-0.0445", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "c*", "h", "-0.5265", "0.0", "0.3627", "0.0", "-0.1792", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "c*", "o'", "-0.9975", "0.0", "0.9060", "0.0", "-0.0195", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c", "c*", "c", "0.2904", "0.0", "1.0177", "0.0", "-0.1085", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "c*", "c", "-0.4768", "0.0", "0.6051", "0.0", "-0.1205", "0.0", "Ver. 1.0, Ref. 4"}, {"c*", "c", "c", "c*", "-1.2352", "0.0", "-0.2551", "0.0", "-0.1335", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "c*", "o", "-0.6359", "0.0", "1.4807", "0.0", "-0.0438", "0.0", "Ver. 1.0, Ref. 4"}, {"o'", "c*", "o", "h*", "-2.7332", "0.0", "2.9646", "0.0", "-0.0155", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c*", "o", "h*", "-2.9126", "0.0", "1.0199", "0.0", "-0.2077", "0.0", "Ver. 1.0, Ref. 4"}, {"o", "c", "c*", "o'", "0.6444", "0.0", "0.7897", "0.0", "1.0604", "0.0", "Ver. 1.0, Ref. 4"}, {"o'", "c*", "o", "c", "0.8905", "0.0", "3.2644", "0.0", "0.2646", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "o", "c*", "0.9513", "0.0", "0.1155", "0.0", "0.0720", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c*", "o", "c", "-2.5594", "0.0", "2.2013", "0.0", "0.0325", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c", "c*", "o", "1.8341", "0.0", "2.0603", "0.0", "-0.0195", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c", "o", "c*", "0.1302", "0.0", "-0.3250", "0.0", "0.1134", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c*", "o", "c", "-0.9993", "0.0", "0.2131", "0.0", "-0.4274", "0.0", "Ver. 1.0, Ref. 4"}, {"c*", "c", "o", "c*", "-1.8534", "0.0", "0.1981", "0.0", "0.2423", "0.0", "Ver. 1.0, Ref. 4"}, {"o", "c", "c*", "h", "-0.0390", "0.0", "1.4052", "0.0", "0.0757", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c*", "o", "h*", "-1.4540", "0.0", "0.8387", "0.0", "-0.4912", "0.0", "Ver. 1.0, Ref. 4"}, {"c*", "c", "c", "o", "-0.0858", "0.0", "-0.1320", "0.0", "-0.5909", "0.0", "Ver. 1.0, Ref. 4"}, {"o'", "c'", "n", "c", "0.8297", "0.0", "3.7234", "0.0", "-0.0495", "0.0", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "h*", "-1.6938", "0.0", "2.7386", "0.0", "-0.3360", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "c", "-0.7532", "0.0", "2.7392", "0.0", "0.0907", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "h*", "-0.8236", "0.0", "2.1467", "0.0", "-0.2142", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c'", "o'", "-0.1804", "0.0", "0.0012", "0.0", "0.0371", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c'", "n", "0.1693", "0.0", "-0.0090", "0.0", "-0.0687", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "c", "n", "c'", "-0.0688", "0.0", "0.0762", "0.0", "-0.0618", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "c'", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "c'", "0.0219", "0.0", "-0.0260", "0.0", "0.0714", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "c", "n", "h*", "0.0546", "0.0", "0.0756", "0.0", "0.0728", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "h*", "-0.0483", "0.0", "-0.0077", "0.0", "-0.0014", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "h*", "-0.0148", "0.0", "-0.0791", "0.0", "-0.0148", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c", "c'", "o'", "0.0899", "0.0", "0.1220", "0.0", "0.0905", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c", "c'", "n", "-0.0892", "0.0", "0.1259", "0.0", "-0.0884", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c'", "o'", "0.0442", "0.0", "0.0292", "0.0", "0.0562", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c'", "n", "-0.0368", "0.0", "0.0389", "0.0", "-0.0529", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "n", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "c", "c", "h", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "c", "0.3345", "0.0", "2.5838", "0.0", "-0.4006", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "h*", "-0.0078", "0.0", "2.6186", "0.0", "-0.0900", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c'", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "c", "-0.0017", "0.0", "-0.0072", "0.0", "0.0008", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "c", "0.0406", "0.0", "0.0354", "0.0", "-0.1649", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "c", "c", "c'", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "c", "n", "c", "-0.0036", "0.0", "0.0049", "0.0", "0.0039", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n", "h*", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "c'", "-0.4066", "0.0", "1.2513", "0.0", "-0.7507", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "c'", "0.1907", "0.0", "1.1212", "0.0", "0.0426", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "cp", "8.3667", "0.0", "1.1932", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "h", "0.0000", "0.0", "3.9661", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "h", "0.0000", "0.0", "1.8769", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "cp", "0.0000", "0.0", "6.8517", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "cp", "0.0000", "0.0", "5.6183", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "np", "0.0000", "0.0", "4.7675", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "np", "0.0000", "0.0", "3.6689", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "np", "cp", "0.0000", "0.0", "7.4664", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "cp", "np", "0.0000", "0.0", "8.8338", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "np", "np", "cp", "0.0000", "0.0", "13.7232", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "np", "0.0000", "0.0", "12.0680", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "np", "0.0000", "0.0", "6.3346", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nh", "h*", "0.0000", "0.0", "1.8202", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "h*", "0.0000", "0.0", "1.3342", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nh", "cp", "10.8765", "0.0", "6.3475", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "cp", "0.0000", "0.0", "3.7848", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "nh", "11.5270", "0.0", "2.7183", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "nh", "0.0000", "0.0", "3.0202", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "nh", "cp", "0.0000", "0.0", "20.0173", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "nh", "h*", "0.0000", "0.0", "3.5096", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "np", "cp", "0.0000", "0.0", "9.7830", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "cp", "np", "0.0000", "0.0", "4.8266", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "np", "cp", "0.0000", "0.0", "14.4766", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "np", "cp", "0.0000", "0.0", "7.4549", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nh", "np", "0.0000", "0.0", "10.7803", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "np", "0.0000", "0.0", "4.1751", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "nh", "0.0000", "0.0", "5.1942", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "nh", "0.0000", "0.0", "5.2455", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "op", "cp", "0.0000", "0.0", "27.5402", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "op", "cp", "0.0000", "0.0", "2.6043", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "op", "0.0000", "0.0", "10.6923", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "op", "0.0000", "0.0", "3.3516", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "op", "cp", "0.0000", "0.0", "30.4292", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"op", "cp", "np", "cp", "0.0000", "0.0", "15.3660", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "cp", "op", "0.0000", "0.0", "9.7415", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"op", "cp", "np", "np", "0.0000", "0.0", "11.8577", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "sp", "cp", "0.0000", "0.0", "31.5576", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "sp", "cp", "0.0000", "0.0", "4.2145", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "sp", "0.0000", "0.0", "9.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "sp", "0.0000", "0.0", "3.7957", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "sp", "cp", "0.0000", "0.0", "21.1715", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"sp", "cp", "np", "cp", "0.0000", "0.0", "13.6743", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "cp", "sp", "0.0000", "0.0", "8.5974", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"sp", "cp", "np", "np", "0.0000", "0.0", "11.5762", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "nh", "cp", "0.0000", "0.0", "23.0443", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "nh", "h*", "0.0000", "0.0", "7.0570", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "cp", "nh", "0.0000", "0.0", "12.7748", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o", "0.0000", "0.0", "4.8498", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "o", "0.0000", "0.0", "1.7234", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o", "h*", "-0.6900", "0.0", "0.5097", "0.0", "0.0095", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "cp", "0.0000", "0.0", "4.4072", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "h", "0.0000", "0.0", "1.5590", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "cp", "cp", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "nn", "0.0000", "0.0", "5.3826", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "nn", "0.0000", "0.0", "1.3331", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nn", "h*", "0.0000", "0.0", "1.2190", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nn", "cp", "np", "cp", "0.0000", "0.0", "6.7119", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "nn", "h*", "0.0000", "0.0", "2.0184", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n+", "h+", "-0.8792", "0.0", "-0.5978", "0.0", "-0.3242", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n+", "h+", "-0.2458", "0.0", "-0.2789", "0.0", "-0.0294", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "n+", "-1.9394", "0.0", "0.0086", "0.0", "0.2775", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "n+", "-0.2179", "0.0", "-0.4127", "0.0", "-0.1252", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n+", "c", "0.3624", "0.0", "0.1012", "0.0", "-0.2486", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n+", "c", "0.7077", "0.0", "-0.3744", "0.0", "-0.1914", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c-", "o-", "-2.5999", "0.0", "1.0488", "0.0", "-0.2089", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c-", "-0.4054", "0.0", "0.4825", "0.0", "0.4345", "0.0", "Ver. 1.0, Ref. 1"}, {"c-", "c", "c", "h", "-1.2767", "0.0", "0.5949", "0.0", "0.2379", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c-", "o-", "1.7311", "0.0", "1.8510", "0.0", "-0.1933", "0.0", "Ver. 1.0, Ref. 1"}, {"nr", "c+", "nr", "h*", "-7.2378", "0.0", "1.9150", "0.0", "0.1436", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "nr", "-0.5336", "0.0", "-0.0444", "0.0", "-0.1432", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "nr", "c+", "-5.4418", "0.0", "-0.0437", "0.0", "0.8035", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "nr", "h*", "-5.0724", "0.0", "-0.4980", "0.0", "-0.4381", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "nr", "c+", "2.8272", "0.0", "-0.3930", "0.0", "-0.3847", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "nr", "h*", "1.2659", "0.0", "-0.7739", "0.0", "0.0378", "0.0", "Ver. 1.0, Ref. 1"}, {"nr", "c+", "nr", "c", "-0.6197", "0.0", "3.0539", "0.0", "0.1861", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n=", "cr", "0.5865", "0.0", "-0.5482", "0.0", "-0.2767", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "n=1", "cr", "0.5865", "0.0", "-0.5482", "0.0", "-0.2767", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "n=2", "cr", "0.5865", "0.0", "-0.5482", "0.0", "-0.2767", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "n=", "cr", "nr", "-7.3589", "0.0", "0.4643", "0.0", "-0.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "n=1", "cr", "nr", "-7.3589", "0.0", "0.4643", "0.0", "-0.1098", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "n=2", "cr", "nr", "-7.3589", "0.0", "0.4643", "0.0", "-0.1098", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "n=", "cr", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "n=1", "cr", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "n=2", "cr", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c", "n=", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "c", "n=1", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c", "n=2", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 2.0, Ref. 3"}, {"h*", "nr", "cr", "n=", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"h*", "nr", "cr", "n=1", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 2.0, Ref. 3"}, {"h*", "nr", "cr", "n=2", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 2.0, Ref. 3"}, {"n=", "c", "c", "c", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.1, Ref. 1"}, {"n=1", "c", "c", "c", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 2.0, Ref. 3"}, {"n=2", "c", "c", "c", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 2.0, Ref. 3"}, {"nr", "cr", "nr", "h*", "-7.2378", "0.0", "1.9150", "0.0", "0.1436", "0.0", "Ver. 1.1, Ref. 1"}, {"c'", "c", "n+", "h+", "-0.8792", "0.0", "-0.5978", "0.0", "-0.3242", "0.0", "Ver. 1.3, Ref. 1"}, {"c*", "c", "n+", "h+", "-0.8792", "0.0", "-0.5978", "0.0", "-0.3242", "0.0", "Ver. 1.3, Ref. 4"}, {"n+", "c", "c'", "o'", "0.0899", "0.0", "0.1220", "0.0", "0.0905", "0.0", "Ver. 1.3, Ref. 1"}, {"n", "c", "c", "o", "-0.1820", "0.0", "-0.1084", "0.0", "-0.7047", "0.0", "Ver. 1.3, Ref. 1"}, {"cp", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"cp", "c", "c", "h", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.3, Ref. 1"}, {"c'", "c", "c", "cp", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "c", "cp", "cp", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "c", "cp", "np", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.3, Ref. 1"}, {"h", "c", "cp", "np", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "cp", "cp", "nh", "0.0000", "0.0", "3.0202", "0.0", "0.0000", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "cp", "np", "cp", "0.0000", "0.0", "5.6183", "0.0", "0.0000", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "n", "c'", "-0.0688", "0.0", "0.0762", "0.0", "-0.0618", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "n", "h*", "0.0546", "0.0", "0.0756", "0.0", "0.0728", "0.0", "Ver. 1.3, Ref. 1"}, {"n", "c", "c-", "o-", "0.0899", "0.0", "0.1220", "0.0", "0.0905", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "c", "cp", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"n+", "c", "c'", "n", "-0.0892", "0.0", "0.1259", "0.0", "-0.0884", "0.0", "Ver. 1.3, Ref. 1"}, {"c'", "c", "c", "c-", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"s", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c'", "c", "c", "s", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c'", "c", "c", "o", "-0.0858", "0.0", "-0.1320", "0.0", "-0.5909", "0.0", "Ver. 1.3, Ref. 1"}, {"c*", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 4"}, {"c*", "c", "c", "c'", "-1.2352", "0.0", "-0.2551", "0.0", "-0.1335", "0.0", "Ver. 1.3, Ref. 4"}, {"h", "c", "o", "cp", "0.9513", "0.0", "0.1155", "0.0", "0.0720", "0.0", "Ver. 1.4, Ref. 1"}, {"cp", "cp", "o", "c", "0.0000", "0.0", "1.8000", "0.0", "0.0000", "0.0", "Ver. 1.4, Ref. 1"}, {"cp", "c", "cp", "cp", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.5, Ref. 1"}}; /* Inversions 0, 1, 2, 3 = Keys, 4= K, 5= Chi0, 6= CFF91 info E = K * (Chi - Chi0)^2 */ char * CFF91_inversions[70][7]= {{"c", "c=", "c=", "h", "2.0765", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "h", "h", "2.8561", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c", "c=", "2.0568", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "na", "c", "h*", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "na", "h*", "h*", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "na", "c", "c", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c*", "h", "o'", "38.4069", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c*", "c", "o'", "38.7949", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c*", "h", "o'", "37.8733", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c*", "o", "o'", "46.9264", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c*", "o", "o'", "45.3800", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c'", "n", "o'", "24.3329", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "n", "c'", "h*", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "o'", "23.1691", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "n", "h*", "h*", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "n", "c", "c'", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n", "o'", "27.0615", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c'", "h*", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "h", "7.6012", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "np", "10.4920", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "np", "14.3802", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "cp", "h*", "5.9154", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "nh", "7.9682", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "np", "8.8464", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "h*", "np", "4.9959", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "op", "8.1654", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "op", "10.8102", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "sp", "5.5684", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "sp", "7.3414", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "nh", "10.2877", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "nh", "8.3206", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "cp", "7.1794", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o", "13.0421", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "cp", "6.9644", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "nn", "10.7855", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "h*", "h*", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nn", "cp", "np", "np", "15.0921", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c-", "o-", "o-", "44.1500", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c-", "o-", "o-", "45.7520", "0.0", "Ver. 1.0, Ref. 1"}, {"c+", "nr", "h*", "h*", "1.0035", "0.0", "Ver. 1.0, Ref. 1"}, {"nr", "c+", "nr", "nr", "54.4060", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "nr", "c+", "h*", "0.3176", "0.0", "Ver. 1.0, Ref. 1"}, {"cr", "nr", "h*", "h*", "1.0035", "0.0", "Ver. 1.1, Ref. 1"}, {"n=", "cr", "nr", "nr", "54.4060", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "n=", "cr", "h*", "0.3176", "0.0", "Ver. 1.1, Ref. 1"}, {"cp", "cp", "c", "np", "10.4920", "0.0", "Ver. 1.3, Ref. 1"}, {"*", "c'", "*", "*", "36.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "cp", "*", "*", "10.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "c=", "*", "*", "2.0568", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "c+", "*", "*", "54.4060", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "na", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "n", "*", "*", "0.1000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "np", "*", "*", "5.5000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "n=", "*", "*", "0.5000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "nr", "*", "*", "1.0035", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "o", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "s", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "p", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "c'", "*", "*", "36.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "cp", "*", "*", "10.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "c=", "*", "*", "2.0568", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "c+", "*", "*", "54.4060", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "na", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "n", "*", "*", "0.1000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "np", "*", "*", "5.5000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "n=", "*", "*", "0.5000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "nr", "*", "*", "1.0035", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "o", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "s", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "p", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}}; /* Non-bonded (9-6) 0= Key, 1= r, 2= eps, 3= CFF91 info E = eps(ij) [2(R(ij)/r(ij))^9 - 3(R(ij)/r(ij))^6] where R(ij) = [(r(i)^6 + r(j)^6))/2]^(1/6) eps(ij) = 2 sqrt(eps(i) * eps(j)) * r(i)^3 * r(j)^3/[r(i)^6 + r(j)^6] */ char * CFF91_vdw[40][4]= {{"c", "4.0100", "0.0540", "Ver. 2.0, Ref. 1"}, {"c*", "3.3080", "0.1200", "Ver. 2.0, Ref. 4"}, {"c'", "3.3080", "0.1200", "Ver. 2.0, Ref. 1"}, {"cp", "4.0100", "0.0640", "Ver. 2.0, Ref. 1"}, {"c=", "4.0100", "0.0640", "Ver. 2.0, Ref. 1"}, {"c=1", "4.0100", "0.0640", "Ver. 2.0, Ref. 3"}, {"c=2", "4.0100", "0.0640", "Ver. 2.0, Ref. 3"}, {"c-", "3.9080", "0.1200", "Ver. 2.0, Ref. 1"}, {"c+", "3.3080", "0.1200", "Ver. 2.0, Ref. 1"}, {"cr", "3.3080", "0.1200", "Ver. 2.0, Ref. 1"}, {"na", "4.0700", "0.0650", "Ver. 2.0, Ref. 1"}, {"n", "4.0700", "0.1060", "Ver. 2.0, Ref. 1"}, {"nr", "4.0700", "0.1060", "Ver. 2.0, Ref. 1"}, {"np", "3.5700", "0.0410", "Ver. 2.0, Ref. 1"}, {"nh", "4.0700", "0.1340", "Ver. 2.0, Ref. 1"}, {"nn", "4.0700", "0.0650", "Ver. 2.0, Ref. 1"}, {"n=", "4.1210", "0.0620", "Ver. 2.0, Ref. 1"}, {"n=1", "4.1210", "0.0620", "Ver. 2.0, Ref. 3"}, {"n=2", "4.1210", "0.0620", "Ver. 2.0, Ref. 3"}, {"n+", "3.2620", "0.0650", "Ver. 2.0, Ref. 1"}, {"o", "3.5350", "0.2400", "Ver. 2.0, Ref. 1"}, {"o*", "3.6080", "0.2740", "Ver. 2.0, Ref. 1"}, {"o'", "3.5350", "0.2670", "Ver. 2.0, Ref. 1"}, {"op", "3.5350", "0.1090", "Ver. 2.0, Ref. 1"}, {"o-", "3.5960", "0.1670", "Ver. 2.0, Ref. 1"}, {"s", "4.0270", "0.0710", "Ver. 2.0, Ref. 1"}, {"sp", "4.0270", "0.0710", "Ver. 2.0, Ref. 1"}, {"h", "2.9950", "0.0200", "Ver. 2.0, Ref. 1"}, {"h*", "1.0980", "0.0130", "Ver. 2.0, Ref. 1"}, {"h+", "1.0980", "0.0130", "Ver. 2.0, Ref. 1"}, {"p", "4.2950", "0.2150", "Ver. 2.0, Ref. 2"}, {"f", "3.2850", "0.3050", "Ver. 2.0, Ref. 2"}, {"cl", "3.9150", "0.3050", "Ver. 2.0, Ref. 2"}, {"Cl", "4.0000", "0.4000", "Ver. 2.0, Ref. 2"}, {"br", "4.2150", "0.3050", "Ver. 2.0, Ref. 2"}, {"Br", "4.3000", "0.3600", "Ver. 2.0, Ref. 2"}, {"i", "4.8000", "0.4000", "Ver. 2.0, Ref. 2"}, {"si", "4.4350", "0.0950", "Ver. 2.0, Ref. 2"}, {"Na", "3.1440", "0.5000", "Ver. 2.0, Ref. 2"}, {"ca+", "3.4720", "0.0500", "Ver. 2.0, Ref. 2"}}; /* Bond increments To implement atomic charges */ char * CFF91_bond_increments[560][5]= {{"c", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c*", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"c'", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"cr", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c-", "c", "0.2300", "-0.2300", "Ver. 1.0, Ref. 1"}, {"ct", "c", "-0.0400", "0.0400", "Ver. 1.0, Ref. 1"}, {"ct2", "c", "-0.0400", "0.0400", "Ver. 2.0, Ref. 6"}, {"na", "c", "-0.0827", "0.0827", "Ver. 1.0, Ref. 1"}, {"n", "c", "-0.2108", "0.2108", "Ver. 1.0, Ref. 1"}, {"nn", "c", "-0.2108", "0.2108", "Ver. 1.0, Ref. 2"}, {"nr", "c", "-0.4802", "0.4802", "Ver. 1.0, Ref. 1"}, {"np", "c", "-0.1100", "0.1100", "Ver. 1.0, Ref. 2"}, {"nh", "c", "-0.0610", "0.0610", "Ver. 1.0, Ref. 2"}, {"n=", "c", "-0.3000", "0.3000", "Ver. 1.0, Ref. 1"}, {"n=1", "c", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n=2", "c", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n+", "c", "-0.1571", "0.4071", "Ver. 1.0, Ref. 1"}, {"nt", "c", "-0.3640", "0.3640", "Ver. 1.0, Ref. 2"}, {"o", "c", "-0.1133", "0.1133", "Ver. 1.0, Ref. 1"}, {"op", "c", "-0.3957", "0.3957", "Ver. 2.0, Ref. 2"}, {"s", "c", "-0.0650", "0.0650", "Ver. 1.0, Ref. 1"}, {"s'", "c", "-0.1180", "0.1180", "Ver. 2.0, Ref. 2"}, {"sp", "c", "-0.1180", "0.1180", "Ver. 2.0, Ref. 2"}, {"h", "c", "0.0530", "-0.0530", "Ver. 1.0, Ref. 1"}, {"p", "c", "-0.0110", "0.0110", "Ver. 2.0, Ref. 2"}, {"f", "c", "-0.2750", "0.2750", "Ver. 2.0, Ref. 2"}, {"cl", "c", "-0.2260", "0.2260", "Ver. 2.0, Ref. 2"}, {"br", "c", "-0.1920", "0.1920", "Ver. 2.0, Ref. 2"}, {"i", "c", "-0.1120", "0.1120", "Ver. 2.0, Ref. 2"}, {"si", "c", "0.1767", "-0.1767", "Ver. 2.0, Ref. 2"}, {"c'", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c*", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"c*", "c*", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"cp", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=1", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=2", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c-", "c'", "0.1368", "-0.1368", "Ver. 2.0, Ref. 2"}, {"ct", "c'", "0.0927", "-0.0927", "Ver. 2.0, Ref. 2"}, {"ct2", "c'", "0.0927", "-0.0927", "Ver. 2.0, Ref. 6"}, {"n", "c'", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"nn", "c'", "-0.0362", "0.0362", "Ver. 2.0, Ref. 2"}, {"np", "c'", "-0.0362", "0.0362", "Ver. 2.0, Ref. 2"}, {"nh", "c'", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"n=", "c'", "-0.0362", "0.0362", "Ver. 2.0, Ref. 2"}, {"n=1", "c'", "-0.0362", "0.0362", "Ver. 2.0, Ref. 3"}, {"n=2", "c'", "-0.0362", "0.0362", "Ver. 2.0, Ref. 3"}, {"n+", "c'", "0.1169", "0.1331", "Ver. 2.0, Ref. 2"}, {"nt", "c'", "-0.1641", "0.1641", "Ver. 2.0, Ref. 2"}, {"cp", "c*", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"c=", "c*", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"c=1", "c*", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"c=2", "c*", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"c-", "c*", "0.1368", "-0.1368", "Ver. 2.0, Ref. 4"}, {"ct", "c*", "0.0927", "-0.0927", "Ver. 2.0, Ref. 4"}, {"ct2", "c*", "0.0927", "-0.0927", "Ver. 2.0, Ref. 6"}, {"n", "c*", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"nn", "c*", "-0.0362", "0.0362", "Ver. 2.0, Ref. 4"}, {"np", "c*", "-0.0362", "0.0362", "Ver. 2.0, Ref. 4"}, {"nh", "c*", "0.1422", "-0.1422", "Ver. 2.0, Ref. 4"}, {"n=", "c*", "-0.0362", "0.0362", "Ver. 2.0, Ref. 4"}, {"n=1", "c*", "-0.0362", "0.0362", "Ver. 2.0, Ref. 4"}, {"n=2", "c*", "-0.0362", "0.0362", "Ver. 2.0, Ref. 4"}, {"n+", "c*", "0.1169", "0.1331", "Ver. 2.0, Ref. 4"}, {"nt", "c*", "-0.1641", "0.1641", "Ver. 2.0, Ref. 4"}, {"o", "c'", "-0.0030", "0.0030", "Ver. 1.0, Ref. 1"}, {"o", "c*", "-0.0030", "0.0030", "Ver. 1.0, Ref. 4"}, {"o'", "c'", "-0.3964", "0.3964", "Ver. 1.0, Ref. 1"}, {"o'", "c*", "-0.3964", "0.3964", "Ver. 1.0, Ref. 4"}, {"op", "c'", "-0.0283", "0.0283", "Ver. 1.0, Ref. 1"}, {"sp", "c'", "0.0130", "-0.0130", "Ver. 1.0, Ref. 1"}, {"s", "c'", "0.0140", "-0.0140", "Ver. 2.0, Ref. 2"}, {"s'", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"op", "c*", "-0.0283", "0.0283", "Ver. 1.0, Ref. 4"}, {"sp", "c*", "0.0130", "-0.0130", "Ver. 1.0, Ref. 4"}, {"s", "c*", "0.0140", "-0.0140", "Ver. 2.0, Ref. 4"}, {"s'", "c*", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"h", "c'", "0.0456", "-0.0456", "Ver. 1.0, Ref. 1"}, {"h", "c*", "0.0456", "-0.0456", "Ver. 1.0, Ref. 4"}, {"p", "c'", "0.2396", "-0.2396", "Ver. 2.0, Ref. 2"}, {"f", "c'", "-0.1300", "0.1300", "Ver. 2.0, Ref. 2"}, {"cl", "c'", "-0.1020", "0.1020", "Ver. 2.0, Ref. 2"}, {"br", "c'", "-0.0800", "0.0800", "Ver. 2.0, Ref. 2"}, {"i", "c'", "0.1291", "-0.1291", "Ver. 2.0, Ref. 2"}, {"si", "c'", "0.4405", "-0.4405", "Ver. 2.0, Ref. 2"}, {"p", "c*", "0.2396", "-0.2396", "Ver. 2.0, Ref. 4"}, {"f", "c*", "-0.1300", "0.1300", "Ver. 2.0, Ref. 4"}, {"cl", "c*", "-0.1020", "0.1020", "Ver. 2.0, Ref. 4"}, {"br", "c*", "-0.0800", "0.0800", "Ver. 2.0, Ref. 4"}, {"i", "c*", "0.1291", "-0.1291", "Ver. 2.0, Ref. 4"}, {"si", "c*", "0.4405", "-0.4405", "Ver. 2.0, Ref. 4"}, {"cp", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=1", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=2", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c-", "cp", "-0.0424", "0.0424", "Ver. 2.0, Ref. 2"}, {"ct", "cp", "-0.0852", "0.0852", "Ver. 2.0, Ref. 2"}, {"ct2", "cp", "-0.0852", "0.0852", "Ver. 2.0, Ref. 6"}, {"na", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n+", "cp", "-0.0489", "0.2989", "Ver. 2.0, Ref. 2"}, {"nn", "cp", "-0.0827", "0.0827", "Ver. 1.0, Ref. 1"}, {"np", "cp", "-0.2405", "0.2405", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "0.0500", "-0.0500", "Ver. 1.0, Ref. 1"}, {"n=", "cp", "-0.1993", "0.1993", "Ver. 2.0, Ref. 2"}, {"n=1", "cp", "-0.1993", "0.1993", "Ver. 2.0, Ref. 3"}, {"n=2", "cp", "-0.1993", "0.1993", "Ver. 2.0, Ref. 3"}, {"o", "cp", "-0.0265", "0.0265", "Ver. 1.0, Ref. 1"}, {"o'", "cp", "-0.3964", "0.3964", "Ver. 2.0, Ref. 2"}, {"op", "cp", "-0.0283", "0.0283", "Ver. 1.0, Ref. 1"}, {"sp", "cp", "0.0130", "-0.0130", "Ver. 1.0, Ref. 1"}, {"s", "cp", "0.0120", "-0.0120", "Ver. 2.0, Ref. 2"}, {"s'", "cp", "-0.0732", "0.0732", "Ver. 2.0, Ref. 2"}, {"h", "cp", "0.1268", "-0.1268", "Ver. 1.0, Ref. 1"}, {"p", "cp", "0.0380", "-0.0380", "Ver. 1.0, Ref. 2"}, {"f", "cp", "-0.1300", "0.1300", "Ver. 2.0, Ref. 2"}, {"cl", "cp", "-0.1020", "0.1020", "Ver. 2.0, Ref. 2"}, {"br", "cp", "-0.0800", "0.0800", "Ver. 2.0, Ref. 2"}, {"i", "cp", "-0.0642", "0.0642", "Ver. 2.0, Ref. 2"}, {"si", "cp", "0.2270", "-0.2270", "Ver. 2.0, Ref. 2"}, {"c=", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=1", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=2", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=1", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=1", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=2", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"ct", "c=", "-0.0852", "0.0852", "Ver. 2.0, Ref. 2"}, {"ct2", "c=", "-0.0852", "0.0852", "Ver. 2.0, Ref. 6"}, {"na", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"nn", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n+", "c=", "-0.0489", "0.2989", "Ver. 2.0, Ref. 2"}, {"np", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"nh", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n=", "c=", "-0.3000", "0.3000", "Ver. 2.0, Ref. 2"}, {"n=1", "c=", "-0.3000", "0.3000", "Ver. 2.0, Ref. 2"}, {"n=2", "c=", "-0.3000", "0.3000", "Ver. 2.0, Ref. 2"}, {"n=", "c=1", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n=1", "c=1", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n=2", "c=1", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n=", "c=2", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n=1", "c=2", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n=2", "c=2", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"o", "c=", "-0.0265", "0.0265", "Ver. 1.0, Ref. 1"}, {"op", "c=", "-0.3583", "0.3583", "Ver. 2.0, Ref. 2"}, {"o'", "c=", "-0.3583", "0.3583", "Ver. 2.0, Ref. 2"}, {"s", "c=", "0.0120", "-0.0120", "Ver. 2.0, Ref. 2"}, {"sp", "c=", "-0.0732", "0.0732", "Ver. 2.0, Ref. 2"}, {"s'", "c=", "-0.0732", "0.0732", "Ver. 2.0, Ref. 2"}, {"h", "c=", "0.1268", "-0.1268", "Ver. 1.0, Ref. 1"}, {"p", "c=", "0.0380", "-0.0380", "Ver. 2.0, Ref. 2"}, {"f", "c=", "-0.1300", "0.1300", "Ver. 2.0, Ref. 2"}, {"cl", "c=", "-0.1020", "0.1020", "Ver. 2.0, Ref. 2"}, {"br", "c=", "-0.0800", "0.0800", "Ver. 2.0, Ref. 2"}, {"i", "c=", "-0.0642", "0.0642", "Ver. 2.0, Ref. 2"}, {"si", "c=", "0.2270", "-0.2270", "Ver. 2.0, Ref. 2"}, {"ct", "c=1", "-0.0852", "0.0852", "Ver. 2.0, Ref. 3"}, {"ct2", "c=1", "-0.0852", "0.0852", "Ver. 2.0, Ref. 6"}, {"na", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"nn", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n+", "c=1", "-0.0489", "0.2989", "Ver. 2.0, Ref. 3"}, {"np", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"nh", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"o", "c=1", "-0.0265", "0.0265", "Ver. 2.0, Ref. 3"}, {"op", "c=1", "-0.3583", "0.3583", "Ver. 2.0, Ref. 3"}, {"o'", "c=1", "-0.3583", "0.3583", "Ver. 2.0, Ref. 3"}, {"s", "c=1", "0.0120", "-0.0120", "Ver. 2.0, Ref. 3"}, {"sp", "c=1", "-0.0732", "0.0732", "Ver. 2.0, Ref. 3"}, {"s'", "c=1", "-0.0732", "0.0732", "Ver. 2.0, Ref. 3"}, {"h", "c=1", "0.1268", "-0.1268", "Ver. 2.0, Ref. 3"}, {"p", "c=1", "0.0380", "-0.0380", "Ver. 2.0, Ref. 3"}, {"f", "c=1", "-0.1300", "0.1300", "Ver. 2.0, Ref. 3"}, {"cl", "c=1", "-0.1020", "0.1020", "Ver. 2.0, Ref. 3"}, {"br", "c=1", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"i", "c=1", "-0.0642", "0.0642", "Ver. 2.0, Ref. 3"}, {"si", "c=1", "0.2270", "-0.2270", "Ver. 2.0, Ref. 3"}, {"ct", "c=2", "-0.0852", "0.0852", "Ver. 2.0, Ref. 3"}, {"ct2", "c=2", "-0.0852", "0.0852", "Ver. 2.0, Ref. 6"}, {"na", "c=2", "0.0000", "0.0000", "Ver. 1.0, Ref. 3"}, {"n", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"nn", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n+", "c=2", "-0.0489", "0.2989", "Ver. 2.0, Ref. 3"}, {"np", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"nh", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"o", "c=2", "-0.0265", "0.0265", "Ver. 2.0, Ref. 3"}, {"op", "c=2", "-0.3583", "0.3583", "Ver. 2.0, Ref. 3"}, {"o'", "c=2", "-0.3583", "0.3583", "Ver. 2.0, Ref. 3"}, {"s", "c=2", "0.0120", "-0.0120", "Ver. 2.0, Ref. 3"}, {"sp", "c=2", "-0.0732", "0.0732", "Ver. 2.0, Ref. 3"}, {"s'", "c=2", "-0.0732", "0.0732", "Ver. 2.0, Ref. 3"}, {"h", "c=2", "0.1268", "-0.1268", "Ver. 2.0, Ref. 3"}, {"p", "c=2", "0.0380", "-0.0380", "Ver. 2.0, Ref. 3"}, {"f", "c=2", "-0.1300", "0.1300", "Ver. 2.0, Ref. 3"}, {"cl", "c=2", "-0.1020", "0.1020", "Ver. 2.0, Ref. 3"}, {"br", "c=2", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"i", "c=2", "-0.0642", "0.0642", "Ver. 2.0, Ref. 3"}, {"si", "c=2", "0.2270", "-0.2270", "Ver. 2.0, Ref. 3"}, {"n=", "cr", "-0.4000", "0.4000", "Ver. 1.0, Ref. 1"}, {"n=1", "cr", "-0.4000", "0.4000", "Ver. 2.0, Ref. 3"}, {"n=2", "cr", "-0.4000", "0.4000", "Ver. 2.0, Ref. 3"}, {"nr", "cr", "-0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o-", "c-", "-0.5337", "0.0337", "Ver. 1.0, Ref. 1"}, {"h", "c-", "0.0530", "-0.0530", "Ver. 1.0, Ref. 1"}, {"c-", "c-", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"ct", "c-", "-0.0432", "0.0432", "Ver. 2.0, Ref. 2"}, {"ct2", "c-", "-0.0432", "0.0432", "Ver. 2.0, Ref. 6"}, {"n", "c-", "-0.1607", "0.1607", "Ver. 2.0, Ref. 2"}, {"n+", "c-", "-0.0097", "0.2597", "Ver. 2.0, Ref. 2"}, {"nn", "c-", "-0.1607", "0.1607", "Ver. 2.0, Ref. 2"}, {"np", "c-", "-0.1607", "0.1607", "Ver. 2.0, Ref. 2"}, {"n=", "c-", "-0.1607", "0.1607", "Ver. 2.0, Ref. 2"}, {"n=1", "c-", "-0.1607", "0.1607", "Ver. 2.0, Ref. 3"}, {"n=2", "c-", "-0.1607", "0.1607", "Ver. 2.0, Ref. 3"}, {"nh", "c-", "0.0176", "-0.0176", "Ver. 2.0, Ref. 2"}, {"o", "c-", "-0.1012", "0.1012", "Ver. 2.0, Ref. 2"}, {"op", "c-", "-0.3241", "0.3241", "Ver. 2.0, Ref. 2"}, {"o'", "c-", "-0.3241", "0.3241", "Ver. 2.0, Ref. 2"}, {"s", "c-", "0.0087", "-0.0087", "Ver. 2.0, Ref. 2"}, {"s-", "c-", "-0.3777", "-0.1223", "Ver. 2.0, Ref. 2"}, {"p", "c-", "0.0857", "-0.0857", "Ver. 2.0, Ref. 2"}, {"f", "c-", "-0.2241", "0.2241", "Ver. 2.0, Ref. 2"}, {"cl", "c-", "-0.0747", "0.0747", "Ver. 2.0, Ref. 2"}, {"br", "c-", "-0.0281", "0.0281", "Ver. 2.0, Ref. 2"}, {"i", "c-", "-0.0185", "0.0185", "Ver. 2.0, Ref. 2"}, {"si", "c-", "0.2775", "-0.2775", "Ver. 2.0, Ref. 2"}, {"nr", "c+", "0.0680", "0.2653", "Ver. 1.0, Ref. 1"}, {"ct", "ct", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"ct2", "ct2", "0.0000", "0.0000", "Ver. 1.0, Ref. 6"}, {"na", "ct", "0.0636", "-0.0636", "Ver. 2.0, Ref. 2"}, {"n", "ct", "-0.1204", "0.1204", "Ver. 2.0, Ref. 2"}, {"nn", "ct", "-0.0920", "0.0920", "Ver. 2.0, Ref. 2"}, {"n+", "ct", "0.1508", "0.0992", "Ver. 2.0, Ref. 2"}, {"nt", "ct", "-0.2454", "0.2454", "Ver. 2.0, Ref. 2"}, {"np", "ct", "-0.1204", "0.1204", "Ver. 2.0, Ref. 2"}, {"nh", "ct", "0.0568", "-0.0568", "Ver. 2.0, Ref. 2"}, {"n=", "ct", "-0.1204", "0.1204", "Ver. 2.0, Ref. 2"}, {"n=1", "ct", "-0.1204", "0.1204", "Ver. 2.0, Ref. 3"}, {"n=2", "ct", "-0.1204", "0.1204", "Ver. 2.0, Ref. 3"}, {"o", "ct", "-0.0675", "0.0675", "Ver. 2.0, Ref. 2"}, {"op", "ct", "-0.2874", "0.2874", "Ver. 2.0, Ref. 2"}, {"o'", "ct", "-0.2874", "0.2874", "Ver. 2.0, Ref. 2"}, {"s", "ct", "0.0581", "-0.0581", "Ver. 2.0, Ref. 2"}, {"sp", "ct", "0.0135", "-0.0135", "Ver. 2.0, Ref. 2"}, {"s'", "ct", "0.0135", "-0.0135", "Ver. 2.0, Ref. 2"}, {"p", "ct", "0.1335", "-0.1335", "Ver. 2.0, Ref. 2"}, {"h", "ct", "0.2052", "-0.2052", "Ver. 2.0, Ref. 2"}, {"f", "ct", "-0.1873", "0.1873", "Ver. 2.0, Ref. 2"}, {"cl", "ct", "-0.0319", "0.0319", "Ver. 2.0, Ref. 2"}, {"br", "ct", "0.0173", "-0.0173", "Ver. 2.0, Ref. 2"}, {"i", "ct", "0.0281", "-0.0281", "Ver. 2.0, Ref. 2"}, {"na", "ct2", "0.0636", "-0.0636", "Ver. 2.0, Ref. 6"}, {"n", "ct2", "-0.1204", "0.1204", "Ver. 2.0, Ref. 6"}, {"nn", "ct2", "-0.0920", "0.0920", "Ver. 2.0, Ref. 6"}, {"n+", "ct2", "0.1508", "0.0992", "Ver. 2.0, Ref. 6"}, {"nt", "ct2", "-0.2454", "0.2454", "Ver. 2.0, Ref. 2"}, {"np", "ct2", "-0.1204", "0.1204", "Ver. 2.0, Ref. 6"}, {"nh", "ct2", "0.0568", "-0.0568", "Ver. 2.0, Ref. 6"}, {"n=", "ct2", "-0.1204", "0.1204", "Ver. 2.0, Ref. 6"}, {"n=1", "ct2", "-0.1204", "0.1204", "Ver. 2.0, Ref. 6"}, {"n=2", "ct2", "-0.1204", "0.1204", "Ver. 2.0, Ref. 6"}, {"o", "ct2", "-0.0675", "0.0675", "Ver. 2.0, Ref. 6"}, {"op", "ct2", "-0.2874", "0.2874", "Ver. 2.0, Ref. 6"}, {"o'", "ct2", "-0.2874", "0.2874", "Ver. 2.0, Ref. 6"}, {"s", "ct2", "0.0581", "-0.0581", "Ver. 2.0, Ref. 6"}, {"sp", "ct2", "0.0135", "-0.0135", "Ver. 2.0, Ref. 6"}, {"s'", "ct2", "0.0135", "-0.0135", "Ver. 2.0, Ref. 6"}, {"p", "ct2", "0.1335", "-0.1335", "Ver. 2.0, Ref. 6"}, {"h", "ct2", "0.2052", "-0.2052", "Ver. 2.0, Ref. 6"}, {"f", "ct2", "-0.1873", "0.1873", "Ver. 2.0, Ref. 6"}, {"cl", "ct2", "-0.0319", "0.0319", "Ver. 2.0, Ref. 6"}, {"br", "ct2", "0.0173", "-0.0173", "Ver. 2.0, Ref. 6"}, {"i", "ct2", "0.0281", "-0.0281", "Ver. 2.0, Ref. 6"}, {"si", "ct2", "0.3266", "-0.3266", "Ver. 2.0, Ref. 6"}, {"na", "na", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"nn", "na", "-0.0371", "0.0371", "Ver. 2.0, Ref. 2"}, {"np", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"nh", "na", "0.0919", "-0.0919", "Ver. 2.0, Ref. 2"}, {"n+", "na", "0.0850", "0.1650", "Ver. 2.0, Ref. 2"}, {"nt", "na", "-0.1927", "0.1927", "Ver. 2.0, Ref. 2"}, {"n=", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"n=1", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 3"}, {"n=2", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 3"}, {"o", "na", "-0.0254", "0.0254", "Ver. 2.0, Ref. 2"}, {"op", "na", "-0.2369", "0.2369", "Ver. 2.0, Ref. 2"}, {"o'", "na", "-0.2369", "0.2369", "Ver. 2.0, Ref. 2"}, {"s", "na", "0.0966", "-0.0966", "Ver. 2.0, Ref. 2"}, {"sp", "na", "0.0551", "-0.0551", "Ver. 2.0, Ref. 2"}, {"s'", "na", "0.0551", "-0.0551", "Ver. 2.0, Ref. 2"}, {"p", "na", "0.2518", "-0.2518", "Ver. 2.0, Ref. 2"}, {"f", "na", "-0.1415", "0.1415", "Ver. 2.0, Ref. 2"}, {"cl", "na", "0.0117", "-0.0117", "Ver. 2.0, Ref. 2"}, {"br", "na", "0.0601", "-0.0601", "Ver. 2.0, Ref. 2"}, {"i", "na", "0.0714", "-0.0714", "Ver. 2.0, Ref. 2"}, {"si", "na", "0.3501", "-0.3501", "Ver. 2.0, Ref. 2"}, {"h*", "na", "0.2487", "-0.2487", "Ver. 1.0, Ref. 1"}, {"n", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"nn", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"np", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"nh", "n", "0.1637", "-0.1637", "Ver. 2.0, Ref. 2"}, {"n=", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n+", "n", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"nt", "n", "-0.1186", "0.1186", "Ver. 2.0, Ref. 2"}, {"o", "n", "0.0427", "-0.0427", "Ver. 2.0, Ref. 2"}, {"op", "n", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"o'", "n", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"s", "n", "0.1753", "-0.1753", "Ver. 2.0, Ref. 2"}, {"sp", "n", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"s'", "n", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"h*", "n", "0.4395", "-0.4395", "Ver. 1.0, Ref. 1"}, {"p", "n", "0.3359", "-0.3359", "Ver. 2.0, Ref. 2"}, {"f", "n", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"cl", "n", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"br", "n", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"i", "n", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"si", "n", "0.4368", "-0.4368", "Ver. 2.0, Ref. 2"}, {"nn", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"np", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"nh", "nn", "0.1637", "-0.1637", "Ver. 2.0, Ref. 2"}, {"n=", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n+", "nn", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"nt", "nn", "-0.1186", "0.1186", "Ver. 2.0, Ref. 2"}, {"o", "nn", "0.0427", "-0.0427", "Ver. 2.0, Ref. 2"}, {"op", "nn", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"o'", "nn", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"s", "nn", "0.1753", "-0.1753", "Ver. 2.0, Ref. 2"}, {"sp", "nn", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"s'", "nn", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"h*", "nn", "0.2487", "-0.2487", "Ver. 1.0, Ref. 1"}, {"p", "nn", "0.3359", "-0.3359", "Ver. 2.0, Ref. 2"}, {"f", "nn", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"cl", "nn", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"br", "nn", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"i", "nn", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"si", "nn", "0.4368", "-0.4368", "Ver. 2.0, Ref. 2"}, {"np", "np", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"nh", "np", "-0.2823", "0.2823", "Ver. 1.0, Ref. 1"}, {"n=", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n+", "np", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"nt", "np", "-0.1186", "0.1186", "Ver. 2.0, Ref. 2"}, {"o", "np", "0.0427", "-0.0427", "Ver. 2.0, Ref. 2"}, {"op", "np", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"o'", "np", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"o-", "np", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"s", "np", "0.1753", "-0.1753", "Ver. 2.0, Ref. 2"}, {"sp", "np", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"s'", "np", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"h*", "np", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"p", "np", "0.3359", "-0.3359", "Ver. 2.0, Ref. 2"}, {"f", "np", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"cl", "np", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"br", "np", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"i", "np", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"si", "np", "0.4368", "-0.4368", "Ver. 2.0, Ref. 2"}, {"nh", "nh", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 2"}, {"n=1", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 3"}, {"n=2", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 3"}, {"n+", "nh", "-0.0044", "0.2544", "Ver. 2.0, Ref. 2"}, {"nt", "nh", "-0.2783", "0.2783", "Ver. 2.0, Ref. 2"}, {"o", "nh", "-0.1090", "0.1090", "Ver. 2.0, Ref. 2"}, {"op", "nh", "-0.3148", "0.3148", "Ver. 2.0, Ref. 2"}, {"o'", "nh", "-0.3148", "0.3148", "Ver. 2.0, Ref. 2"}, {"s", "nh", "-0.0046", "0.0046", "Ver. 2.0, Ref. 2"}, {"sp", "nh", "-0.0454", "0.0454", "Ver. 2.0, Ref. 2"}, {"s'", "nh", "-0.0454", "0.0454", "Ver. 2.0, Ref. 2"}, {"h*", "nh", "0.3925", "-0.3925", "Ver. 1.0, Ref. 1"}, {"hi", "nh", "0.3925", "0.1075", "Ver. 1.0, Ref. 1"}, {"p", "nh", "0.1375", "-0.1375", "Ver. 2.0, Ref. 2"}, {"f", "nh", "-0.2220", "0.2220", "Ver. 2.0, Ref. 2"}, {"cl", "nh", "-0.0854", "0.0854", "Ver. 2.0, Ref. 2"}, {"br", "nh", "-0.0438", "0.0438", "Ver. 2.0, Ref. 2"}, {"i", "nh", "-0.0356", "0.0358", "Ver. 2.0, Ref. 2"}, {"si", "nh", "0.2278", "-0.2278", "Ver. 2.0, Ref. 2"}, {"n=", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=1", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=1", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n+", "n=", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"nt", "n=", "-0.1186", "0.1186", "Ver. 2.0, Ref. 2"}, {"nt", "n=1", "-0.1186", "0.1186", "Ver. 2.0, Ref. 2"}, {"nt", "n=2", "-0.1186", "0.1186", "Ver. 2.0, Ref. 2"}, {"o", "n=", "0.0427", "-0.0427", "Ver. 2.0, Ref. 2"}, {"op", "n=", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"o'", "n=", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"o-", "n=", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"s", "n=", "0.1753", "-0.1753", "Ver. 2.0, Ref. 2"}, {"sp", "n=", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"s'", "n=", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"h*", "n=", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"p", "n=", "0.3359", "-0.3359", "Ver. 2.0, Ref. 2"}, {"f", "n=", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"cl", "n=", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"br", "n=", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"i", "n=", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"si", "n=", "0.4368", "-0.4368", "Ver. 2.0, Ref. 2"}, {"n+", "n=1", "0.1617", "0.0883", "Ver. 2.0, Ref. 3"}, {"o", "n=1", "0.0427", "-0.0427", "Ver. 2.0, Ref. 3"}, {"op", "n=1", "-0.1684", "0.1684", "Ver. 2.0, Ref. 3"}, {"o'", "n=1", "-0.1684", "0.1684", "Ver. 2.0, Ref. 3"}, {"s", "n=1", "0.1753", "-0.1753", "Ver. 2.0, Ref. 3"}, {"sp", "n=1", "0.1346", "-0.1346", "Ver. 2.0, Ref. 3"}, {"s'", "n=1", "0.1346", "-0.1346", "Ver. 2.0, Ref. 3"}, {"h*", "n=1", "0.3278", "-0.3278", "Ver. 2.0, Ref. 3"}, {"p", "n=1", "0.3359", "-0.3359", "Ver. 2.0, Ref. 3"}, {"f", "n=1", "-0.0731", "0.0731", "Ver. 2.0, Ref. 3"}, {"cl", "n=1", "0.0897", "-0.0897", "Ver. 2.0, Ref. 3"}, {"br", "n=1", "0.1422", "-0.1422", "Ver. 2.0, Ref. 3"}, {"i", "n=1", "0.1554", "-0.1554", "Ver. 2.0, Ref. 3"}, {"si", "n=1", "0.4368", "-0.4368", "Ver. 2.0, Ref. 3"}, {"n+", "n=2", "0.1617", "0.0883", "Ver. 2.0, Ref. 3"}, {"o", "n=2", "0.0427", "-0.0427", "Ver. 2.0, Ref. 3"}, {"op", "n=2", "-0.1684", "0.1684", "Ver. 2.0, Ref. 3"}, {"s", "n=2", "0.1753", "-0.1753", "Ver. 2.0, Ref. 3"}, {"sp", "n=2", "0.1346", "-0.1346", "Ver. 2.0, Ref. 3"}, {"o'", "n=2", "-0.1684", "0.1684", "Ver. 2.0, Ref. 3"}, {"s'", "n=2", "0.1346", "-0.1346", "Ver. 2.0, Ref. 3"}, {"h*", "n=2", "0.3278", "-0.3278", "Ver. 2.0, Ref. 3"}, {"p", "n=2", "0.3359", "-0.3359", "Ver. 2.0, Ref. 3"}, {"f", "n=2", "-0.0731", "0.0731", "Ver. 2.0, Ref. 3"}, {"cl", "n=2", "0.0897", "-0.0897", "Ver. 2.0, Ref. 3"}, {"br", "n=2", "0.1422", "-0.1422", "Ver. 2.0, Ref. 3"}, {"i", "n=2", "0.1554", "-0.1554", "Ver. 2.0, Ref. 3"}, {"si", "n=2", "0.4368", "-0.4368", "Ver. 2.0, Ref. 3"}, {"n+", "n+", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o", "n+", "0.1250", "0.1250", "Ver. 2.0, Ref. 2"}, {"op", "n+", "-0.0918", "0.3418", "Ver. 2.0, Ref. 2"}, {"o'", "n+", "-0.0918", "0.3418", "Ver. 2.0, Ref. 2"}, {"s", "n+", "0.2755", "-0.0255", "Ver. 2.0, Ref. 2"}, {"sp", "n+", "0.2341", "0.0159", "Ver. 2.0, Ref. 2"}, {"s'", "n+", "0.2341", "0.0159", "Ver. 2.0, Ref. 2"}, {"h+", "n+", "0.2800", "-0.0300", "Ver. 1.0, Ref. 1"}, {"p", "n+", "0.4494", "-0.1994", "Ver. 2.0, Ref. 2"}, {"f", "n+", "0.0062", "0.2438", "Ver. 2.0, Ref. 2"}, {"cl", "n+", "0.1858", "0.0642", "Ver. 2.0, Ref. 2"}, {"br", "n+", "0.2452", "0.0048", "Ver. 2.0, Ref. 2"}, {"i", "n+", "0.2615", "-0.0115", "Ver. 2.0, Ref. 2"}, {"si", "n+", "0.5583", "-0.3083", "Ver. 2.0, Ref. 2"}, {"h*", "nr", "0.4068", "-0.4068", "Ver. 1.0, Ref. 1"}, {"nt", "nt", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o", "nt", "0.1523", "-0.1523", "Ver. 2.0, Ref. 2"}, {"op", "nt", "-0.0585", "0.0585", "Ver. 2.0, Ref. 2"}, {"o'", "nt", "-0.0585", "0.0585", "Ver. 2.0, Ref. 2"}, {"s", "nt", "0.3010", "-0.3010", "Ver. 2.0, Ref. 2"}, {"sp", "nt", "0.2612", "-0.2612", "Ver. 2.0, Ref. 2"}, {"s'", "nt", "0.2612", "-0.2612", "Ver. 2.0, Ref. 2"}, {"p", "nt", "0.4691", "-0.4691", "Ver. 2.0, Ref. 2"}, {"h", "nt", "0.4688", "-0.4688", "Ver. 2.0, Ref. 2"}, {"f", "nt", "0.0367", "-0.0367", "Ver. 2.0, Ref. 2"}, {"cl", "nt", "0.2141", "-0.2141", "Ver. 2.0, Ref. 2"}, {"br", "nt", "0.2727", "-0.2727", "Ver. 2.0, Ref. 2"}, {"i", "nt", "0.2889", "-0.2889", "Ver. 2.0, Ref. 2"}, {"si", "nt", "0.5738", "-0.5738", "Ver. 2.0, Ref. 2"}, {"h*", "o*", "0.3991", "-0.3991", "Ver. 1.0, Ref. 1"}, {"h*", "o", "0.4241", "-0.4241", "Ver. 1.0, Ref. 1"}, {"o", "o", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"op", "o", "-0.1962", "0.1962", "Ver. 2.0, Ref. 2"}, {"o'", "o", "-0.1962", "0.1962", "Ver. 2.0, Ref. 2"}, {"s", "o", "0.1143", "-0.1143", "Ver. 2.0, Ref. 2"}, {"sp", "o", "0.0766", "-0.0766", "Ver. 2.0, Ref. 2"}, {"s'", "o", "0.0766", "-0.0766", "Ver. 2.0, Ref. 2"}, {"p", "o", "0.2548", "-0.2548", "Ver. 2.0, Ref. 2"}, {"f", "o", "-0.1077", "0.1077", "Ver. 2.0, Ref. 2"}, {"cl", "o", "0.0367", "-0.0367", "Ver. 2.0, Ref. 2"}, {"br", "o", "0.0818", "-0.0818", "Ver. 2.0, Ref. 2"}, {"i", "o", "0.0924", "-0.0924", "Ver. 2.0, Ref. 2"}, {"si", "o", "0.3425", "-0.3425", "Ver. 2.0, Ref. 2"}, {"op", "op", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o'", "op", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"s", "op", "0.3386", "-0.3386", "Ver. 2.0, Ref. 2"}, {"sp", "op", "0.3024", "-0.3024", "Ver. 2.0, Ref. 2"}, {"s'", "op", "0.3024", "-0.3024", "Ver. 2.0, Ref. 2"}, {"p", "op", "0.4933", "-0.4933", "Ver. 2.0, Ref. 2"}, {"h", "op", "0.4943", "-0.4943", "Ver. 2.0, Ref. 2"}, {"f", "op", "0.0888", "-0.0888", "Ver. 2.0, Ref. 2"}, {"cl", "op", "0.2585", "-0.2585", "Ver. 2.0, Ref. 2"}, {"br", "op", "0.3140", "-0.3140", "Ver. 2.0, Ref. 2"}, {"i", "op", "0.3297", "-0.3297", "Ver. 2.0, Ref. 2"}, {"si", "op", "0.5883", "-0.5883", "Ver. 2.0, Ref. 2"}, {"o'", "o'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"s", "o'", "0.3386", "-0.3386", "Ver. 2.0, Ref. 2"}, {"sp", "o'", "0.3024", "-0.3024", "Ver. 2.0, Ref. 2"}, {"s'", "o'", "0.3024", "-0.3024", "Ver. 2.0, Ref. 2"}, {"p", "o'", "0.4933", "-0.4933", "Ver. 2.0, Ref. 2"}, {"h", "o'", "0.4943", "-0.4943", "Ver. 2.0, Ref. 2"}, {"f", "o'", "0.0888", "-0.0888", "Ver. 2.0, Ref. 2"}, {"cl", "o'", "0.2585", "-0.2585", "Ver. 2.0, Ref. 2"}, {"br", "o'", "0.3140", "-0.3140", "Ver. 2.0, Ref. 2"}, {"i", "o'", "0.3297", "-0.3297", "Ver. 2.0, Ref. 2"}, {"si", "o'", "0.5883", "-0.5883", "Ver. 2.0, Ref. 2"}, {"p", "o-", "0.3500", "-0.8500", "Ver. 2.0, Ref. 2"}, {"s", "s", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"sp", "s", "-0.0455", "0.0455", "Ver. 2.0, Ref. 2"}, {"s'", "s", "-0.0455", "0.0455", "Ver. 2.0, Ref. 2"}, {"p", "s", "0.1600", "-0.1600", "Ver. 2.0, Ref. 2"}, {"h", "s", "0.1392", "-0.1392", "Ver. 2.0, Ref. 2"}, {"f", "s", "-0.2380", "0.2380", "Ver. 2.0, Ref. 2"}, {"cl", "s", "-0.0898", "0.0898", "Ver. 2.0, Ref. 2"}, {"br", "s", "-0.0437", "0.0437", "Ver. 2.0, Ref. 2"}, {"i", "s", "-0.0345", "0.0345", "Ver. 2.0, Ref. 2"}, {"si", "s", "0.2634", "-0.2634", "Ver. 2.0, Ref. 2"}, {"sp", "sp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"s'", "sp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"p", "sp", "0.2106", "-0.2106", "Ver. 2.0, Ref. 2"}, {"h", "sp", "0.1932", "-0.1932", "Ver. 2.0, Ref. 2"}, {"f", "sp", "-0.2011", "0.2011", "Ver. 2.0, Ref. 2"}, {"cl", "sp", "-0.0457", "0.0457", "Ver. 2.0, Ref. 2"}, {"br", "sp", "0.0034", "-0.0034", "Ver. 2.0, Ref. 2"}, {"i", "sp", "0.0140", "-0.0140", "Ver. 2.0, Ref. 2"}, {"si", "sp", "0.3172", "-0.3172", "Ver. 2.0, Ref. 2"}, {"s'", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"p", "s'", "0.2106", "-0.2106", "Ver. 2.0, Ref. 2"}, {"h", "s'", "0.1932", "-0.1932", "Ver. 2.0, Ref. 2"}, {"f", "s'", "-0.2011", "0.2011", "Ver. 2.0, Ref. 2"}, {"cl", "s'", "-0.0457", "0.0457", "Ver. 2.0, Ref. 2"}, {"br", "s'", "0.0034", "-0.0034", "Ver. 2.0, Ref. 2"}, {"i", "s'", "0.0140", "-0.0140", "Ver. 2.0, Ref. 2"}, {"si", "s'", "0.3172", "-0.3172", "Ver. 2.0, Ref. 2"}, {"p", "s-", "0.1824", "-0.6824", "Ver. 2.0, Ref. 2"}, {"p", "p", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"h", "p", "-0.0356", "0.0356", "Ver. 2.0, Ref. 2"}, {"f", "p", "-0.3869", "0.3869", "Ver. 2.0, Ref. 2"}, {"cl", "p", "-0.2544", "0.2544", "Ver. 2.0, Ref. 2"}, {"br", "p", "-0.2156", "0.2156", "Ver. 2.0, Ref. 2"}, {"i", "p", "-0.2110", "0.2110", "Ver. 2.0, Ref. 2"}, {"si", "p", "0.1069", "-0.1069", "Ver. 2.0, Ref. 2"}, {"h", "h", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"f", "h", "-0.3823", "0.3823", "Ver. 2.0, Ref. 2"}, {"cl", "h", "-0.2404", "0.2404", "Ver. 2.0, Ref. 2"}, {"br", "h", "-0.1978", "0.1978", "Ver. 2.0, Ref. 2"}, {"i", "h", "-0.1923", "0.1923", "Ver. 2.0, Ref. 2"}, {"si", "h", "0.1537", "-0.1537", "Ver. 2.0, Ref. 2"}, {"f", "f", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"cl", "f", "0.1589", "-0.1589", "Ver. 2.0, Ref. 2"}, {"br", "f", "0.2099", "-0.2099", "Ver. 2.0, Ref. 2"}, {"i", "f", "0.2234", "-0.2234", "Ver. 2.0, Ref. 2"}, {"si", "f", "0.4789", "-0.4789", "Ver. 2.0, Ref. 2"}, {"cl", "cl", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"br", "cl", "0.0507", "-0.0507", "Ver. 2.0, Ref. 2"}, {"i", "cl", "0.0623", "-0.0623", "Ver. 2.0, Ref. 2"}, {"si", "cl", "0.3598", "-0.3598", "Ver. 2.0, Ref. 2"}, {"br", "br", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"i", "br", "0.0110", "-0.0110", "Ver. 2.0, Ref. 2"}, {"si", "br", "0.3273", "-0.3273", "Ver. 2.0, Ref. 2"}, {"i", "i", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"si", "i", "0.3263", "-0.3263", "Ver. 2.0, Ref. 2"}, {"si", "si", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}}; atomes_1.3.1/src/calc/force_fields/charmm36_carb.c0000664000175000017500000073036615212624223021414 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm36_carb.c * @short CHARMM-charmm36_carb force field, from 'charmm36_carb' * @author Sébastien Le Roux */ /* * This file: 'charmm36_carb.c' * * Contains: * CHARMM-charmm36_carb force field, data from taken from: - the file: 'charmm36_carb' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm36_carb_atoms[59][5] Bonds : charmm36_carb_bonds[153][5] Angles : charmm36_carb_angles[438][8] Dihedrals : charmm36_carb_dihedrals[1354][8] Non bonded : charmm36_carb_vdw[57][6] */ #include "global.h" int charmm36_carb_objects[14] = {59, 0, 0, 153, 0, 0, 438, 0, 1354, 0 , 0, 14, 57, 0}; int charmm36_carb_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm36_carb info */ char * charmm36_carb_atoms[59][5]= {{"H", "1.00800", "HCTIP3", "TIP3P water hydrogen", "1"}, {"O", "15.99940", "OCTIP3", "TIP3P water oxygen", "2"}, {"C", "12.01100", "CC301", "aliphatic C, no H's", "171"}, {"C", "12.01100", "CC311", "generic acyclic CH carbon", "172"}, {"C", "12.01100", "CC312", "CH carbon in linear polyols", "173"}, {"C", "12.01100", "CC3161", "C2, C3, C4 CH bound to OH", "174"}, {"C", "12.01100", "CC3162", "C1 (anomeric) CH bound to OH", "175"}, {"C", "12.01100", "CC3163", "C5 CH bound to exocylic CH2OH", "176"}, {"C", "12.01100", "CC321", "generic acyclic CH2 carbon (hexopyranose C6)", "177"}, {"C", "12.01100", "CC322", "CH2 carbon in linear polyols erh", "178"}, {"C", "12.01100", "CC3263", "C5 in xylose", "179"}, {"C", "12.01100", "CC331", "generic acyclic CH3 carbon (xyl C6, glcna/galna CT)", "180"}, {"C", "12.01100", "CC2O1", "sp2 carbon in amides, aldoses", "181"}, {"C", "12.01100", "CC2O2", "sp2 carbon in carboxylates", "182"}, {"C", "12.01100", "CC2O3", "sp2 carbon in acetone, ketoses", "183"}, {"C", "12.01100", "CC2O4", "c22 CD", "184"}, {"H", "1.00800", "HCA1", "aliphatic proton, CH", "185"}, {"H", "1.00800", "HCA2", "aliphatic proton, CH2", "186"}, {"H", "1.00800", "HCA3", "aliphatic proton, CH3", "187"}, {"H", "1.00800", "HCP1", "polar H", "188"}, {"H", "1.00800", "HCR1", "c22 HR1", "189"}, {"O", "15.99940", "OC311", "hydroxyl oxygen", "191"}, {"O", "15.99940", "OC3C61", "ether in six membered ring", "192"}, {"O", "15.99940", "OC301", "generic linear ether", "193"}, {"O", "15.99940", "OC302", "linear ether in 1-1 glycosidic linkage", "194"}, {"O", "15.99940", "OC2D1", "sp2 oxygen in amides, aldoses", "195"}, {"O", "15.99940", "OC2D2", "sp2 oxygen in carboxylates", "196"}, {"O", "15.99940", "OC2D3", "sp2 oxygen in acetone, ketoses", "197"}, {"O", "15.99940", "OC2D4", "par22 O", "198"}, {"N", "14.00700", "NC2D1", "peptide, NMA, IPAA nitrogen (C=NHR)", "200"}, {"C", "12.01100", "CC321C", "cyclohexane, thp CH2", "201"}, {"H", "1.00800", "HCA3M", "alcohol aliphatic proton, CH3", "202"}, {"H", "1.00800", "HCP1M", "EGLY hydroxyl H", "203"}, {"O", "15.99940", "OC311M", "MEOH, ETOH, PRO2, EGLY hydroxyl O", "204"}, {"C", "12.01100", "CC321D", "cyclohexane, thp CH2 model for 1-1 linkage", "205"}, {"C", "12.01100", "CC311C", "patch C1 in model compound", "206"}, {"C", "12.01100", "CC311D", "patch C1 in model compound", "207"}, {"O", "15.99940", "OC3C5M", "thf ring oxygen", "208"}, {"C", "12.01100", "CC322C", "cyclopentane, thf CH2", "209"}, {"H", "1.00800", "HCA2C2", "cyclopentane, thp aliphatic proton, CH2", "210"}, {"C", "12.01100", "CC312C", "tf2m CH1", "211"}, {"H", "1.00800", "HCA1C2", "tf2m aliphatic proton, CH1", "212"}, {"O", "15.99940", "OC3C51", "furan ring oxygen", "213"}, {"C", "12.01100", "CC3152", "furan ring carbon", "214"}, {"C", "12.01100", "CC3153", "furan ring carbon", "215"}, {"C", "12.01100", "CC3251", "furan ring carbon; C2 deoxy", "216"}, {"C", "12.01100", "CC3151", "furan ring carbon", "217"}, {"C", "12.01100", "CC3051", "furan ring carbon; C2 fructose", "218"}, {"C", "12.01100", "CC3062", "C2 on NE5AC", "219"}, {"C", "12.01100", "CC3261", "C3 on NE5AC", "220"}, {"O", "15.99940", "OC312", "OH in PO3H (phosphate) || OHL in top_all27_lipid.rtf", "221"}, {"O", "15.99940", "OC30P", "ester O in PO3H (phosphate) || OSL in top_all27_lipid.rtf", "222"}, {"O", "15.99940", "OC2DP", "=0 in P03H (phosphate) || O2L in top_all27_lipid.rtf", "223"}, {"P", "30.97400", "PC", "phosphorus || PL in top_all27_lipid.rtf", "224"}, {"S", "32.06000", "SC", "Sulfate sulfur", "225"}, {"C", "12.01100", "CC312D", "from CC322C; THF anomeric carbon", "226"}, {"O", "15.99940", "OC303", "from OC301; linear ether in P1->F3 pyranose-furanose glycosidic linkage", "227"}, {"C", "12.01100", "CC2O5", "carbonyl C on acetyl", "228"}, {"N", "14.00700", "NC311", "! Sulfamate nitrogen, xxwy", "229"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm36_carb info V(R) = Kb x (R - R0)^2 */ char * charmm36_carb_bonds[153][5]= {{"OC2D3", "CC2O3", "700.00", "1.215", "ketone MP2/6-31g*, CSD geometry"}, {"CC2O3", "CC331", "330.00", "1.500", "ketone MP2/6-31g*, CSD geometry"}, {"CC2O3", "CC312", "330.00", "1.500", "ketone"}, {"CC2O3", "CC322", "330.00", "1.500", "ketone"}, {"OC2D4", "CC2O4", "700.00", "1.215", "acetaldehyde, adm"}, {"HCR1", "CC2O4", "330.00", "1.110", "acetaldehyde, adm"}, {"CC2O4", "CC331", "250.00", "1.500", "acetaldehyde, adm"}, {"CC2O4", "CC312", "250.00", "1.500", "acetaldehyde, adm"}, {"CC311", "CC311", "222.50", "1.500", "par22 CT1 CT1"}, {"CC312", "CC312", "222.50", "1.485", "adm 11/08, glycerol"}, {"CC3161", "CC3163", "222.50", "1.500", "par22 CT1 CT1"}, {"CC3161", "CC3263", "222.50", "1.500", "CC3161 CC3163 og xtal xylose"}, {"CC312", "CC322", "222.50", "1.485", "adm 11/08, glycerol"}, {"CC301", "CC331", "222.50", "1.538", "genff CG301 CG331"}, {"CC311", "CC321", "222.50", "1.538", "par22 CT2 CT1"}, {"CC311", "CC331", "222.50", "1.538", "par22 CT3 CT1"}, {"CC331", "CC3163", "222.50", "1.538", "par22 CT3 CT1 og xtal alfuco"}, {"CC3161", "CC3161", "222.50", "1.480", "sng qm and crystal analysis"}, {"CC3261", "CC3161", "222.50", "1.480", "from CC3161 CC3161"}, {"CC3161", "CC3162", "222.50", "1.480", "sng qm and crystal analysis"}, {"CC3261", "CC3062", "222.50", "1.515", "og xtal kemyac"}, {"CC321", "CC3163", "222.50", "1.490", "sng qm and crystal analysis"}, {"CC312", "CC3163", "222.50", "1.490", "from CC321 CC3163"}, {"CC301", "CC2O2", "200.00", "1.522", "par22 CT1 CC"}, {"CC311", "CC2O2", "200.00", "1.522", "par22 CT1 CC"}, {"CC3163", "CC2O2", "200.00", "1.480", "og xtal"}, {"CC3062", "CC2O2", "200.00", "1.480", "og xtal"}, {"CC2O1", "CC331", "250.00", "1.520", "og ipaa and xtal acglua11 agalam10 nacman10"}, {"CC321", "CC331", "222.50", "1.528", "par22 CT3 CT2"}, {"CC321", "CC321", "222.50", "1.530", "par22 CT2 CT2"}, {"CC321C", "CC321C", "222.50", "1.530", "par22 CT2 CT2"}, {"CC321C", "CC321D", "222.50", "1.530", "par22 CT2 CT2"}, {"CC321C", "CC311C", "222.50", "1.538", "par22 CT2 CT1"}, {"CC321", "CC311C", "222.50", "1.490", "from CC321 CC3163"}, {"CC321C", "CC311D", "222.50", "1.538", "par22 CT2 CT1"}, {"CC321D", "CC311C", "222.50", "1.538", "par22 CT2 CT1"}, {"CC321", "CC2O2", "200.00", "1.522", "par22 CT2 CC"}, {"CC3161", "OC311", "410.00", "1.410", "og crystal analysis"}, {"CC3162", "OC311", "428.00", "1.400", "og crystal analysis"}, {"CC3062", "OC311", "428.00", "1.400", "from CC3162 OC311"}, {"CC301", "OC311", "428.00", "1.420", "par22 OH1 CT1"}, {"CC311", "OC311", "428.00", "1.420", "par22 OH1 CT1"}, {"CC312", "OC311", "400.00", "1.420", "adm 11/08, glycerol"}, {"CC311", "OC311M", "428.00", "1.420", "par22 OH1 CT1"}, {"CC321", "OC311", "428.00", "1.420", "par22 OH1 CT2"}, {"CC321", "OC311M", "428.00", "1.420", "par22 OH1 CT2"}, {"CC331", "OC311M", "428.00", "1.420", "par22 OH1 CT3"}, {"CC322", "OC311", "400.00", "1.420", "adm 11/08, glycerol"}, {"CC2O1", "OC2D1", "620.00", "1.230", "par22 O C"}, {"CC2O2", "OC2D2", "525.00", "1.260", "par22 OC CC"}, {"CC301", "OC301", "360.00", "1.415", "par35 CC32A OC30A"}, {"CC311", "OC301", "360.00", "1.415", "par35 CC32A OC30A"}, {"CC321", "OC301", "360.00", "1.415", "par35 CC32A OC30A"}, {"CC331", "OC301", "360.00", "1.415", "par35 CC33A OC30A"}, {"CC311D", "OC301", "360.00", "1.395", "og disac model compounds 2 and 3"}, {"CC3162", "OC301", "360.00", "1.395", "og disac model compounds 2 3 og/rmv crystals"}, {"CC3062", "OC301", "360.00", "1.395", "from CC3162 OC301"}, {"CC311D", "OC302", "360.00", "1.415", "og disac model compounds 4 5 6"}, {"CC3162", "OC302", "360.00", "1.415", "og disac model comps 4 5 6 og/rmv crystals"}, {"CC311C", "OC301", "360.00", "1.435", "og disac model compounds 7 8 9 and 10"}, {"CC3161", "OC301", "360.00", "1.415", "og/rmv disac crystals"}, {"CC321D", "OC3C61", "360.00", "1.415", "par34 CC326A OC30A"}, {"CC311D", "OC3C61", "360.00", "1.415", "par34 CC326A OC30A"}, {"CC3162", "OC3C61", "360.00", "1.425", "og crystal analysis"}, {"CC3062", "OC3C61", "360.00", "1.425", "from CC3162 OC3C61"}, {"CC321C", "OC3C61", "360.00", "1.415", "par34 CC326A OC30A"}, {"CC311C", "OC3C61", "360.00", "1.415", "par34 CC326A OC30A"}, {"CC3163", "OC3C61", "360.00", "1.425", "sng qm and crystal analysis"}, {"CC3263", "OC3C61", "360.00", "1.425", "CC3263 OC3C61 og xylose xtal ok"}, {"NC2D1", "CC311", "320.00", "1.430", "par22 NH1 CT1"}, {"NC2D1", "CC3161", "320.00", "1.430", "par22 NH1 CT1"}, {"NC2D1", "CC331", "320.00", "1.430", "par22 NH1 CT3"}, {"NC2D1", "CC2O1", "370.00", "1.345", "par22 NH1 C"}, {"CC311", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC312", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC3161", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC3162", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC3163", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC311C", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC311D", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC321", "HCA2", "309.00", "1.111", "par22 HA CT2"}, {"CC322", "HCA2", "309.00", "1.111", "par22 HA CT2"}, {"CC3263", "HCA2", "309.00", "1.111", "par22 HA CT2"}, {"CC331", "HCA3", "322.00", "1.111", "par22 HA CT3"}, {"CC321C", "HCA2", "309.00", "1.111", "par22 HA CT2"}, {"CC321D", "HCA2", "309.00", "1.111", "par22 HA CT2"}, {"CC3261", "HCA2", "309.00", "1.111", "par22 HA CT2"}, {"OC311", "HCP1", "545.00", "0.960", "par22 OH1 H"}, {"OC311M", "HCP1", "545.00", "0.960", "par22 OH1 H"}, {"OC311M", "HCP1M", "545.00", "0.960", "par22 OH1 H"}, {"NC2D1", "HCP1", "440.00", "0.997", "par22 NH1 H"}, {"CC322C", "OC3C5M", "350.00", "1.425", "par34 CC325B OC305A"}, {"CC322C", "CC322C", "195.00", "1.518", "par34 CC325B CC325B"}, {"CC322C", "HCA2C2", "307.00", "1.100", "par34 CC325B HCA25A"}, {"CC312C", "CC331", "222.50", "1.528", "par34 CC325B CC33A"}, {"CC312C", "OC3C5M", "350.00", "1.425", "par34 CC325B OC305A"}, {"CC312C", "CC322C", "195.00", "1.518", "par34 CC325B CC325B"}, {"CC312C", "HCA1C2", "307.00", "1.100", "par34 CC325B HCA25A"}, {"CC312C", "OC301", "360.00", "1.395", "erh xtal analysis on disac"}, {"OC3C51", "CC3152", "350.00", "1.425", "par34 CC325B OC305A"}, {"OC3C51", "CC3051", "350.00", "1.425", "par34 CC325B OC305A"}, {"OC3C51", "CC3153", "350.00", "1.425", "par34 CC325B OC305A"}, {"OC311", "CC3152", "428.00", "1.395", "erh crystal analysis on furanose 3/09"}, {"OC311", "CC3051", "428.00", "1.395", "erh crystal analysis on furanose 3/09"}, {"OC311", "CC3151", "410.00", "1.395", "erh crystal analysis on furanose 3/09"}, {"CC3152", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC3251", "HCA2", "307.00", "1.100", "par_carb CC322C HCA2C2"}, {"CC3151", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC3153", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC3152", "CC3251", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3051", "CC3251", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3251", "CC3151", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3151", "CC3153", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3151", "CC3152", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3151", "CC3051", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3151", "CC3151", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3153", "CC321", "222.50", "1.490", "par_carb CC321 CC3163 (sng qm/crystal mod); erh 2/09"}, {"CC3051", "CC321", "222.50", "1.490", "par_carb CC321 CC3163 (sng qm/crystal mod); erh 2/09"}, {"CC3152", "OC301", "360.00", "1.395", "erh xtal analysis on disac"}, {"CC321D", "CC311D", "222.50", "1.538", "par22 CT2 CT1"}, {"CC311D", "CC311D", "222.50", "1.538", "par22 CT2 CT1"}, {"CC3161", "OC30P", "360.00", "1.425", " "}, {"CC311D", "OC30P", "360.00", "1.425", " "}, {"CC3162", "OC30P", "360.00", "1.425", " "}, {"CC321", "OC30P", "360.00", "1.452", " "}, {"OC30P", "PC", "270.0", "1.675", " "}, {"OC2DP", "PC", "580.0", "1.525", " "}, {"OC312", "PC", "237.0", "1.61", " "}, {"OC312", "HCP1", "545.0", "0.960", " "}, {"SC", "OC2DP", "540.0", "1.448", "methylsulfate"}, {"SC", "OC30P", "250.0", "1.610", "methylsulfate"}, {"CC312D", "OC301", "360.00", "1.395", "OMe-THF CC312C OC301"}, {"CC312D", "OC3C5M", "350.00", "1.425", "OMe-THF CC312C OC3C5M"}, {"CC312D", "CC322C", "195.00", "1.518", "THF w/me CC312C CC322C"}, {"CC312D", "HCA1", "307.00", "1.100", "THF w/me CC312C HCA1C2"}, {"CC312D", "OC302", "360.00", "1.425", "pram, modified (from OMe-THF) to match model comp 1(raman et al.) QM minima geometry and SUCROS04 crystal"}, {"CC312C", "HCA1", "307.00", "1.100", "THF w/me CC312C HCA1C2"}, {"CC312C", "CC321", "222.50", "1.500", "pram, modified 12/26/2010 (from THF w/me) to match model comp 2(raman et al.) QM minima geometry"}, {"CC331", "OC303", "360.00", "1.415", "Ome-THF CC331 OC301"}, {"CC312C", "OC303", "360.00", "1.425", "pram, modified (from OMe-THF) to match model comp 3(raman et al.) QM minima geometry"}, {"CC311D", "OC303", "360.00", "1.395", "CC311D OC301"}, {"CC3051", "OC302", "360.00", "1.425", "CC312D OC301 - model compound 1 (raman et. al.), crystal analysis"}, {"CC3162", "OC303", "360.00", "1.395", "CC311D OC303 - model compound 3 (raman et. al.)"}, {"OC303", "CC3151", "360.00", "1.425", "CC312C OC303 - model compound 3 (raman et. al.)"}, {"OC301", "CC3051", "360.00", "1.395", "CC312C OC301 - Ome-THF"}, {"OC301", "CC312", "400.00", "1.420", "from CC312 OC311"}, {"OC301", "CC322", "400.00", "1.420", "from CC312 OC311"}, {"CC2O5", "OC301", "150.00", "1.3340", "CG2O2 OG302"}, {"CC2O5", "CC331", "200.00", "1.5220", "CG2O2 CG331"}, {"CC2O5", "OC2D1", "750.00", "1.2200", "CG2O2 OG2D1"}, {"SC", "NC311", "185.00", "1.700", "SUFMA/B, Targeting crystal survey value instead of QM, xxwy"}, {"CC3161", "NC311", "270.00", "1.455", "SUFMA/B, xxwy"}, {"NC311", "HCP1", "432.00", "1.030", "SUFMA/B, xxwy"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm36_carb info V(S) = Kub x (S - S0)^2 */ char * charmm36_carb_angles[438][8]= {{"CC311", "CC311", "CC321", "53.35", "111.00", "8.00", "2.561", "par22 CT2 CT1 CT1"}, {"CC322", "CC312", "CC322", "45.00", "111.00", " ", " ", "adm 11/08, glycerol"}, {"CC312", "CC312", "CC322", "45.00", "111.00", " ", " ", "adm 11/08, glycerol"}, {"CC312", "CC2O3", "OC2D3", "75.00", "121.50", " ", " ", "ketone, par22 O CD CT2"}, {"CC331", "CC2O3", "OC2D3", "75.00", "121.50", " ", " ", "ketone, par22 aldehydes.str"}, {"CC322", "CC2O3", "OC2D3", "75.00", "121.50", " ", " ", "ketone, par22 O CD CT2"}, {"CC331", "CC2O3", "CC331", "35.00", "116.00", " ", " ", "ketone, C-C-C"}, {"CC312", "CC2O3", "CC322", "35.00", "116.00", " ", " ", "ketone"}, {"CC322", "CC2O3", "CC322", "35.00", "116.00", " ", " ", "ketone"}, {"CC312", "CC312", "CC2O3", "60.00", "113.80", " ", " ", "ketone, par22 str CT3 CT2 CD"}, {"CC2O3", "CC331", "HCA3", "50.00", "109.50", " ", " ", "ketone"}, {"CC2O3", "CC322", "HCA2", "50.00", "109.50", " ", " ", "ketone, par22 HB CT2 CD"}, {"HCA1", "CC312", "CC2O3", "50.00", "109.50", " ", " ", "ketone, par22 HB CT1 CD"}, {"OC311", "CC312", "CC2O3", "55.00", "108.89", " ", " ", "ketone, og 1/06 EtOH NIST IR fit"}, {"CC2O3", "CC322", "OC311", "55.00", "108.89", " ", " ", "ketone, og 1/06 EtOH NIST IR fit"}, {"OC2D4", "CC2O4", "HCR1", "65.00", "118.00", " ", " ", "acetaldehyde, adm"}, {"HCR1", "CC2O4", "CC331", "65.00", "116.00", " ", " ", "acetaldehyde, adm"}, {"HCR1", "CC2O4", "CC312", "65.00", "116.00", " ", " ", "acetaldehyde, adm"}, {"CC312", "CC2O4", "OC2D4", "45.00", "126.00", " ", " ", "acetaldehyde, adm"}, {"CC331", "CC2O4", "OC2D4", "45.00", "126.00", " ", " ", "acetaldehyde, adm"}, {"CC312", "CC312", "CC2O4", "60.00", "113.80", " ", " ", "aldehyde, par22 CT3 CT2 CD"}, {"OC311", "CC312", "CC2O4", "55.00", "108.89", " ", " ", "aldehyde, og 1/06 EtOH NIST IR fit"}, {"CC2O4", "CC312", "HCA1", "33.00", "109.50", "30.00", "2.16300", "acetaldehyde, adm"}, {"CC2O4", "CC331", "HCA3", "33.00", "109.50", "30.00", "2.16300", "acetaldehyde, adm"}, {"CC3161", "CC3161", "CC3161", "53.35", "111.00", "8.00", "2.561", "par22 CT1 CT1 CT1"}, {"CC3261", "CC3161", "CC3161", "53.35", "111.00", "8.00", "2.561", "par22 CT2 CT1 CT1"}, {"CC3161", "CC3161", "CC3163", "53.35", "111.00", "8.00", "2.561", "par22 CT1 CT1 CT1"}, {"CC3161", "CC3161", "CC3263", "53.35", "111.00", "8.00", "2.561", "par22 CT1 CT1 CT1; erh transferred by analogy"}, {"CC312", "CC312", "CC312", "45.00", "111.00", " ", " ", "adm 11/08, glycerol"}, {"CC3162", "CC3161", "CC3161", "53.35", "111.00", "8.00", "2.561", "par22 CT1 CT1 CT1"}, {"CC3163", "CC312", "CC312", "53.35", "111.00", "8.00", "2.561", "par22 CT1 CT1 CT1"}, {"CC3062", "CC3261", "CC3161", "58.35", "113.50", "11.16", "2.561", "par22 CT1 CT2 CT1"}, {"CC3161", "CC3163", "CC321", "58.35", "113.50", "11.16", "2.561", "sng"}, {"CC3161", "CC3163", "CC312", "58.35", "113.50", "11.16", "2.561", "from CC3161 CC3163 CC321"}, {"CC3161", "CC3163", "CC331", "58.35", "113.50", "11.16", "2.561", "CC3161 CC3163 CC321 og xylose xtal ok"}, {"CC2O2", "CC311", "CC331", "52.00", "108.00", " ", " ", "par22 CT3 CT1 CC"}, {"CC2O2", "CC3163", "CC3161", "52.00", "108.00", " ", " ", "par22 CT1 CT1 CC"}, {"CC2O2", "CC301", "CC331", "52.00", "112.00", " ", " ", "og amol mp2/6-31g*"}, {"CC2O2", "CC3062", "CC3261", "52.00", "112.00", " ", " ", "from CC2O2 CC301 CC331 for ne5ac"}, {"CC321", "CC321", "CC321", "58.35", "113.60", "11.16", "2.561", "par22 CT2 CT2 CT2"}, {"CC331", "CC321", "CC321", "58.00", "115.00", "8.00", "2.561", "par22 CT3 CT2 CT2"}, {"CC331", "CC311", "CC331", "53.35", "114.00", "8.00", "2.561", "par22 CT3 CT1 CT3"}, {"CC321C", "CC321C", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321C", "CC311C", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321D", "CC321C", "CC311C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321D", "CC311C", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321D", "CC321C", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC311D", "CC321C", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC311C", "CC321C", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321C", "CC321D", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321", "CC311C", "CC321C", "58.35", "113.50", "11.16", "2.561", "from CC3161 CC3163 CC321"}, {"CC2O2", "CC321", "CC331", "52.00", "108.00", " ", " ", "par22 CT2 CT2 CC"}, {"CC312", "CC312", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC312", "CC3163", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC3161", "CC3161", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC3161", "CC3162", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC3261", "CC3161", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"CC3162", "CC3161", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC3163", "CC3161", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC3161", "CC3163", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC3163", "CC312", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC322", "CC312", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"CC321", "CC3163", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"CC331", "CC311", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT3"}, {"CC331", "CC3163", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT3"}, {"CC3263", "CC3161", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"CC321", "CC311", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"CC312", "CC322", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"CC3163", "CC321", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"CC3062", "CC3261", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"CC3161", "CC3261", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"CC311", "CC321", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"CC3161", "CC3263", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"CC3163", "CC331", "HCA3", "33.43", "110.10", "22.53", "2.179", "par22 HA CT3 CT1"}, {"CC311", "CC331", "HCA3", "33.43", "110.10", "22.53", "2.179", "par22 HA CT3 CT1"}, {"CC301", "CC331", "HCA3", "33.43", "110.10", "22.53", "2.179", "par22 HA CT3 CT1"}, {"CC2O2", "CC3163", "HCA1", "50.00", "109.50", " ", " ", "par 22 HB CT1 CC"}, {"CC2O2", "CC311", "HCA1", "50.00", "109.50", " ", " ", "par 22 HB CT1 CC"}, {"CC2O1", "CC331", "HCA3", "33.00", "109.50", "30.00", "2.163", "par22 HA CT3 C"}, {"HCA1", "CC311C", "CC321", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"HCA1", "CC311D", "CC321C", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"HCA1", "CC311C", "CC321C", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"HCA1", "CC311C", "CC321D", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"HCA2", "CC321", "CC311C", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"HCA2", "CC321", "CC321", "26.50", "110.10", "22.53", "2.179", "par22 HA CT2 CT2"}, {"HCA2", "CC321", "CC331", "34.60", "110.10", "22.53", "2.179", "par22 HA CT2 CT3"}, {"HCA3", "CC331", "CC321", "34.60", "110.10", "22.53", "2.179", "par22 HA CT3 CT2"}, {"HCA2", "CC321C", "CC321C", "34.50", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"HCA2", "CC321D", "CC321C", "34.50", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"HCA2", "CC321C", "CC321D", "34.50", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"HCA2", "CC321C", "CC311D", "34.50", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"HCA2", "CC321C", "CC311C", "34.50", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"HCA2", "CC321D", "CC311C", "34.50", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"CC2O2", "CC321", "HCA2", "33.00", "109.50", "30.00", "2.163", "par22 HA CT2 CC"}, {"CC3161", "CC3161", "NC2D1", "70.00", "113.50", " ", " ", "par22 NH1 CT1 CT1"}, {"CC3162", "CC3161", "NC2D1", "70.00", "113.50", " ", " ", "par22 NH1 CT1 CT1"}, {"CC3163", "CC3161", "NC2D1", "70.00", "113.50", " ", " ", "par22 NH1 CT1 CT1"}, {"CC331", "CC311", "NC2D1", "70.00", "113.50", " ", " ", "par22 NH1 CT1 CT3"}, {"NC2D1", "CC2O1", "CC331", "80.00", "116.50", " ", " ", "par22 NH1 C CT3"}, {"CC3161", "NC2D1", "CC2O1", "50.00", "120.00", " ", " ", "par22 CT1 NH1 C"}, {"CC2O1", "NC2D1", "CC311", "50.00", "120.00", " ", " ", "par22 CT1 NH1 C"}, {"CC2O1", "NC2D1", "CC331", "50.00", "120.00", " ", " ", "par22 CT3 NH1 C"}, {"NC2D1", "CC2O1", "OC2D1", "80.00", "122.50", " ", " ", "par22 O C NH1"}, {"NC2D1", "CC3161", "HCA1", "48.00", "108.00", " ", " ", "par22 NH1 CT1 HB"}, {"NC2D1", "CC311", "HCA1", "48.00", "108.00", " ", " ", "par22 NH1 CT1 HB"}, {"NC2D1", "CC331", "HCA3", "51.50", "109.50", " ", " ", "par22 NH1 CT3 HA"}, {"HCP1", "NC2D1", "CC2O1", "34.00", "123.00", " ", " ", "par22 H NH1 C"}, {"CC3161", "NC2D1", "HCP1", "35.00", "117.00", " ", " ", "par22 H NH1 CT1"}, {"HCP1", "NC2D1", "CC311", "35.00", "117.00", " ", " ", "par22 H NH1 CT1"}, {"HCP1", "NC2D1", "CC331", "35.00", "117.00", " ", " ", "par22 H NH1 CT3"}, {"HCA2", "CC321", "HCA2", "35.50", "109.00", "5.40", "1.802", "par22 HA CT2 HA"}, {"HCA2", "CC322", "HCA2", "35.50", "109.00", "5.40", "1.802", "par22 HA CT2 HA"}, {"HCA2", "CC321C", "HCA2", "35.50", "109.00", "5.40", "1.802", "par22 HA CT2 HA"}, {"HCA2", "CC321D", "HCA2", "35.50", "109.00", "5.40", "1.802", "par22 HA CT2 HA"}, {"HCA2", "CC3261", "HCA2", "35.50", "109.00", "5.40", "1.802", "par22 HA CT2 HA"}, {"HCA2", "CC3263", "HCA2", "35.50", "109.00", "5.40", "1.802", "par22 HA CT2 HA"}, {"HCA3", "CC331", "HCA3", "35.50", "108.40", "5.40", "1.802", "par22 HA CT3 HA"}, {"CC3161", "CC3163", "OC3C61", "45.00", "110.00", " ", " ", "sng mod (qm and crystal data)"}, {"CC3161", "CC3263", "OC3C61", "45.00", "110.00", " ", " ", "CC3161 CC3163 OC3C61 + og xtal xylose"}, {"CC3161", "CC3162", "OC3C61", "45.00", "106.00", " ", " ", "og crystal analysis"}, {"OC3C61", "CC3062", "CC3261", "45.00", "111.50", " ", " ", "og xtal kemyac"}, {"CC321", "CC3163", "OC3C61", "45.00", "109.00", " ", " ", "sng mod (qm and crystal data) II"}, {"CC312", "CC3163", "OC3C61", "45.00", "109.00", " ", " ", "from C321 CC3163 OC3C61"}, {"CC331", "CC3163", "OC3C61", "45.00", "111.50", " ", " ", "par34 OC30A CC32A CC33A"}, {"CC2O2", "CC311", "OC301", "45.00", "103.00", " ", " ", "og amop mp2/631gd"}, {"CC2O2", "CC3163", "OC3C61", "45.00", "103.00", " ", " ", "og amop mp2/631gd + xtals"}, {"CC2O2", "CC301", "OC301", "45.00", "103.00", " ", " ", "from CC2O2 CC311 OC301; og amol ok"}, {"CC2O2", "CC3062", "OC301", "45.00", "103.00", " ", " ", "from CC2O2 CC301 OC301"}, {"CC2O2", "CC3062", "OC3C61", "45.00", "103.00", " ", " ", "from CC2O2 CC301 OC301"}, {"CC3161", "CC3162", "OC311", "75.70", "107.00", " ", " ", "sng mod (qm and crystal data) III"}, {"CC312", "CC312", "OC311", "75.70", "108.00", " ", " ", "adm 11/08, glycerol"}, {"CC3161", "CC3161", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"CC3261", "CC3161", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"CC3162", "CC3161", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"CC3163", "CC3161", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"CC3163", "CC312", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"CC3263", "CC3161", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"CC312", "CC322", "OC311", "50.00", "106.00", " ", " ", "adm 11/08, glycerol"}, {"CC3163", "CC321", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT1"}, {"CC311", "CC321", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT1"}, {"CC321", "CC311", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1/CT3"}, {"CC322", "CC312", "OC311", "75.70", "108.00", " ", " ", "adm 11/08, glycerol"}, {"CC331", "CC301", "OC311", "75.70", "113.00", " ", " ", "og amol mp2/631g*"}, {"CC3261", "CC3062", "OC311", "75.70", "113.00", " ", " ", "from CC331 CC301 OC311 for ne5ac"}, {"CC2O2", "CC301", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT3; og amol ok"}, {"CC2O2", "CC3062", "OC311", "75.70", "110.10", " ", " ", "from CC2O2 CC301 OC311 for ne5ac"}, {"CC3163", "CC2O2", "OC2D2", "40.00", "114.00", "50.00", "2.388", "og amop amol and xtals"}, {"CC3062", "CC2O2", "OC2D2", "40.00", "114.00", "50.00", "2.388", "og amop amol and xtals"}, {"CC311", "CC2O2", "OC2D2", "40.00", "114.00", "50.00", "2.388", "og amop amol and xtals"}, {"CC301", "CC2O2", "OC2D2", "40.00", "114.00", "50.00", "2.388", "og amop amol and xtals"}, {"CC321", "CC2O2", "OC2D2", "40.00", "114.00", "50.00", "2.388", "og amop amol and xtals"}, {"OC2D1", "CC2O1", "CC331", "80.00", "121.00", " ", " ", "par22 O C CT3"}, {"OC301", "CC311", "CC331", "45.00", "111.50", " ", " ", "par35 OC30A CC32A CC33A"}, {"OC301", "CC321", "CC321", "45.00", "111.50", " ", " ", "par35 OC30A CC32A CC32A"}, {"OC301", "CC301", "CC331", "45.00", "109.00", " ", " ", "og amol mp2/631g*"}, {"OC3C61", "CC311C", "CC321", "45.00", "109.00", " ", " ", "from CC321 CC3163 OC3C61"}, {"OC3C61", "CC311C", "CC321C", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC3C61", "CC321C", "CC321C", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC3C61", "CC321C", "CC311C", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC3C61", "CC321D", "CC321C", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC3C61", "CC321D", "CC311C", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC3C61", "CC311D", "CC321C", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC301", "CC311D", "CC321C", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC3162", "CC3161", "45.00", "105.00", " ", " ", "og/rmv disac crystal analysis"}, {"OC301", "CC3062", "CC3261", "45.00", "105.00", " ", " ", "from OC301 CC3162 CC3161"}, {"OC302", "CC311D", "CC321C", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC302", "CC3162", "CC3161", "45.00", "105.00", " ", " ", "og/rmv disac crystal analysis"}, {"OC301", "CC311C", "CC321C", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC3161", "CC3161", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC3161", "CC3163", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC311C", "CC321D", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC3161", "CC3162", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC321", "CC311C", "45.00", "106.00", " ", " ", "og fit compounds 11 and 12"}, {"OC301", "CC321", "CC3163", "45.00", "106.00", " ", " ", "og fit compounds 11 and 12"}, {"CC321", "CC321", "OC311M", "75.70", "110.10", " ", " ", "From CN7 CN8B ON5"}, {"CC331", "CC321", "OC311M", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT3"}, {"CC331", "CC311", "OC311M", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT3"}, {"CC3161", "OC311", "HCP1", "50.00", "109.00", " ", " ", "sng mod (qm and crystal data) II"}, {"CC321", "OC311", "HCP1", "50.00", "109.00", " ", " ", "sng mod (qm and crystal data)"}, {"CC3162", "OC311", "HCP1", "50.00", "109.00", " ", " ", "sng mod (qm and crystal data) II"}, {"CC3062", "OC311", "HCP1", "50.00", "109.00", " ", " ", "from CC3162 OC311 HCP1 for ne5ac"}, {"HCP1", "OC311", "CC311", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit"}, {"HCP1", "OC311", "CC312", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit"}, {"HCP1", "OC311", "CC301", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit"}, {"HCP1", "OC311", "CC322", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit"}, {"HCP1", "OC311M", "CC321", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit"}, {"HCP1M", "OC311M", "CC321", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit for egly"}, {"HCP1", "OC311M", "CC311", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit"}, {"HCP1", "OC311M", "CC331", "57.50", "106.00", " ", " ", "par22 H OH1 CT3"}, {"OC311", "CC3162", "OC3C61", "45.00", "116.50", " ", " ", "og crystal analysis"}, {"OC311", "CC301", "OC301", "45.00", "116.50", " ", " ", "OC311 CC3162 OC3C61; og amol ok"}, {"OC311", "CC3062", "OC3C61", "45.00", "113.00", " ", " ", "og xtal kemyac"}, {"OC2D2", "CC2O2", "OC2D2", "100.00", "132.00", "70.00", "2.225", "og amop amol and xtals"}, {"OC301", "CC311D", "OC3C61", "90.00", "110.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC3162", "OC3C61", "90.00", "112.00", " ", " ", "og/rmv disac crystal analysis"}, {"OC301", "CC3062", "OC3C61", "90.00", "112.00", " ", " ", "from OC301 CC3162 OC3C61"}, {"OC302", "CC311D", "OC3C61", "90.00", "110.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC302", "CC3162", "OC3C61", "90.00", "112.00", " ", " ", "og/rmv disac crystal analysis"}, {"CC3163", "OC3C61", "CC3162", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC3163", "OC3C61", "CC3062", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC3263", "OC3C61", "CC3162", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC311", "OC301", "CC331", "95.00", "109.70", " ", " ", "par35 CC32A OC30A CC32A"}, {"CC301", "OC301", "CC331", "95.00", "109.70", " ", " ", "par35 CC33A OC30A CC32A"}, {"CC321C", "OC3C61", "CC321C", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC321D", "OC3C61", "CC321C", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC321D", "OC3C61", "CC311C", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC311D", "OC3C61", "CC321C", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC311D", "OC301", "CC331", "95.00", "109.70", " ", " ", "par35 CC33A OC30A CC32A"}, {"CC3162", "OC301", "CC331", "95.00", "109.70", " ", " ", "par35 CC33A OC30A CC32A"}, {"CC3162", "OC301", "CC321", "95.00", "109.70", " ", " ", "par35 CC33A OC30A CC32A"}, {"CC321", "OC301", "CC331", "95.00", "109.70", " ", " ", "par35 CC33A OC30A CC32A"}, {"CC311D", "OC302", "CC311D", "50.00", "111.50", " ", " ", "og QM theta vs phi/psi comp 4 to 6"}, {"CC3162", "OC302", "CC3162", "50.00", "111.50", " ", " ", "og QM theta vs phi/psi comp 4 to 6"}, {"CC311C", "OC301", "CC311D", "50.00", "109.20", " ", " ", "og QM theta vs phi/psi comp 7 to 10"}, {"CC3161", "OC301", "CC3162", "50.00", "109.20", " ", " ", "og QM theta vs phi/psi comp 7 to 10"}, {"CC3161", "OC301", "CC3062", "50.00", "109.20", " ", " ", "from CC3161 OC301 CC3162"}, {"HCA1", "CC312", "OC311", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA1", "CC3161", "OC311", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA1", "CC3162", "OC311", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA1", "CC3163", "OC311", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA2", "CC321", "OC311", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA2", "CC322", "OC311", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA1", "CC3162", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA1", "CC3163", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA2", "CC3263", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA1", "CC311", "OC301", "60.00", "109.50", " ", " ", "par34 HCA2 CC32A OC30A"}, {"OC301", "CC321", "HCA2", "60.00", "109.50", " ", " ", "par34 HCA2 CC32A OC30A"}, {"OC301", "CC331", "HCA3", "60.00", "109.50", " ", " ", "par34 HCA3 CC33A OC30A"}, {"HCA3", "CC331", "OC311M", "55.00", "108.89", " ", " ", "og 1/06 MeOH NIST IR fit"}, {"HCA2", "CC321", "OC311M", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA1", "CC311", "OC311M", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA2", "CC321C", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA2", "CC321D", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA1", "CC311C", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA1", "CC311D", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA1", "CC311D", "OC301", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"HCA1", "CC3162", "OC301", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"HCA1", "CC311D", "OC302", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"HCA1", "CC3162", "OC302", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"HCA1", "CC311C", "OC301", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"HCA1", "CC3161", "OC301", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"CC322C", "CC322C", "CC322C", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"HCA2C2", "CC322C", "CC322C", "35.00", "111.40", "22.53", "2.179", "viv cyclopentane 10/17/05"}, {"HCA2C2", "CC322C", "HCA2C2", "38.50", "106.80", "5.40", "1.802", "viv cyclopentane 10/17/05"}, {"OC3C5M", "CC322C", "CC322C", "45.00", "111.10", " ", " ", "viv THF 10/21/05"}, {"CC322C", "OC3C5M", "CC322C", "95.00", "111.00", " ", " ", "viv THF 10/21/05"}, {"HCA2C2", "CC322C", "OC3C5M", "70.00", "107.30", " ", " ", "viv THF 10/21/05"}, {"HCA3", "CC331", "CC312C", "33.43", "110.10", "22.53", "2.179", "par22 HA CT3 CT1"}, {"CC322C", "CC312C", "CC331", "53.35", "114.00", "8.00", "2.561", "par22 CT3 CT1 CT2"}, {"HCA1C2", "CC312C", "CC331", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT3"}, {"OC3C5M", "CC312C", "CC331", "45.00", "111.50", " ", " ", "viv TF2M (DEE)"}, {"HCA1C2", "CC312C", "CC322C", "35.00", "111.40", "22.53", "2.179", "viv cyclopentane 10/17/05; erh 7/08"}, {"HCA2C2", "CC322C", "CC312C", "35.00", "111.40", "22.53", "2.179", "viv cyclopentane 10/17/05; erh 7/08"}, {"CC312C", "CC322C", "CC322C", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv ; erh 7/08"}, {"CC322C", "CC312C", "CC322C", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv ; erh 7/08"}, {"OC3C5M", "CC312C", "CC322C", "45.00", "111.10", " ", " ", "viv THF 10/21/05; erh 7/08"}, {"CC312C", "OC3C5M", "CC322C", "95.00", "111.00", " ", " ", "viv THF 10/21/05; erh 7/08"}, {"HCA1C2", "CC312C", "OC3C5M", "70.00", "107.30", " ", " ", "viv THF 10/21/05; erh 7/08"}, {"HCA1C2", "CC312C", "OC301", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"OC301", "CC312C", "CC322C", "45.00", "106.50", " ", " ", "erh xtal analysis on disac"}, {"CC312C", "OC301", "CC331", "95.00", "109.70", " ", " ", "par35 CC33A OC30A CC32A"}, {"OC301", "CC312C", "OC3C5M", "90.00", "112.00", " ", " ", "og,erh xtal analysis on disac"}, {"OC3C51", "CC3152", "CC3251", "45.00", "111.10", " ", " ", "THF par_carb OC3C5M CC322C CC322C"}, {"OC3C51", "CC3051", "CC3251", "45.00", "111.10", " ", " ", "THF par_carb OC3C5M CC322C CC322C"}, {"OC3C51", "CC3152", "CC3151", "45.00", "111.10", " ", " ", "THF par_carb OC3C5M CC322C CC322C"}, {"OC3C51", "CC3051", "CC3151", "45.00", "111.10", " ", " ", "THF par_carb OC3C5M CC322C CC322C"}, {"OC3C51", "CC3153", "CC3151", "45.00", "111.10", " ", " ", "THF par_carb OC3C5M CC322C CC322C"}, {"OC3C51", "CC3153", "CC321", "45.00", "108.00", " ", " ", "erh crystal analysis on furanose 3/09"}, {"OC3C51", "CC3051", "CC321", "45.00", "108.00", " ", " ", "erh crystal analysis on furanose 3/09"}, {"OC311", "CC3151", "CC3251", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1; par_Sugars, CC3263 CC3161 OC311"}, {"OC311", "CC3151", "CC3153", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"OC311", "CC3151", "CC3152", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"OC311", "CC3151", "CC3051", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"OC311", "CC3151", "CC3151", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"OC311", "CC321", "CC3153", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT1"}, {"OC311", "CC321", "CC3152", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT1; erh 3/08"}, {"OC311", "CC321", "CC3051", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT1; erh 3/08"}, {"OC311", "CC3152", "CC3251", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1; par_carb, CC3263 CC3161 OC311"}, {"OC311", "CC3051", "CC3251", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1; par_carb, CC3263 CC3161 OC311"}, {"OC311", "CC3152", "CC321", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1/CT3"}, {"OC311", "CC3051", "CC321", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1/CT3"}, {"OC311", "CC3152", "CC3151", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"OC311", "CC3051", "CC3151", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"OC3C51", "CC3152", "OC311", "45.00", "116.50", " ", " ", "par_carb, OC3C61 CC3162 OC311"}, {"OC3C51", "CC3051", "OC311", "45.00", "116.50", " ", " ", "par_carb, OC3C61 CC3162 OC311"}, {"OC3C51", "CC3152", "HCA1", "70.00", "107.30", " ", " ", "THF, par_carb, OC3C5M CC322C HCA2C2"}, {"OC3C51", "CC3153", "HCA1", "70.00", "107.30", " ", " ", "THF, par_carb, OC3C5M CC322C HCA2C2"}, {"OC311", "CC3152", "HCA1", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit; par_carb, HCA1 CC3162 OC311"}, {"OC311", "CC3151", "HCA1", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit; par_carb, HCA1 CC3161 OC311"}, {"CC3152", "OC311", "HCP1", "50.00", "109.00", " ", " ", "par_carb CC3162 OC311 HCP1"}, {"CC3051", "OC311", "HCP1", "50.00", "109.00", " ", " ", "par_carb CC3162 OC311 HCP1"}, {"CC3151", "OC311", "HCP1", "50.00", "109.00", " ", " ", "par_carb CC3161 OC311 HCP1"}, {"CC3153", "OC3C51", "CC3152", "95.00", "111.00", " ", " ", "THF, par_carb CC322C OC3C5M CC322C"}, {"CC3153", "OC3C51", "CC3051", "95.00", "111.00", " ", " ", "THF, par_carb CC322C OC3C5M CC322C"}, {"CC3152", "CC3251", "CC3151", "58.00", "109.50", "11.16", "2.561", "THF, par_carb CC322C CC322C CC322C"}, {"CC3051", "CC3251", "CC3151", "58.00", "109.50", "11.16", "2.561", "THF, par_carb CC322C CC322C CC322C"}, {"CC3152", "CC3151", "CC3151", "58.00", "109.50", "11.16", "2.561", "THF, par_carb CC322C CC322C CC322C"}, {"CC3051", "CC3151", "CC3151", "58.00", "109.50", "11.16", "2.561", "THF, par_carb CC322C CC322C CC322C"}, {"CC3251", "CC3151", "CC3153", "58.00", "109.50", "11.16", "2.561", "THF, par_carb CC322C CC322C CC322C"}, {"CC3151", "CC3151", "CC3153", "58.00", "109.50", "11.16", "2.561", "THF, par_carb CC322C CC322C CC322C"}, {"CC3151", "CC3153", "CC321", "58.35", "113.50", "11.16", "2.561", "sng, par_carb CC3161 CC3163 CC321; erh 7/08"}, {"CC3151", "CC3051", "CC321", "58.35", "113.50", "11.16", "2.561", "sng, par_carb CC3161 CC3163 CC321; erh 7/08"}, {"CC3152", "CC3251", "HCA2", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3051", "CC3251", "HCA2", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3251", "CC3152", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3251", "CC3151", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3151", "CC3251", "HCA2", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3153", "CC3151", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3152", "CC3151", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3051", "CC3151", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3151", "CC3151", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3151", "CC3152", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3151", "CC3153", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3153", "CC321", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1; erh 7/08"}, {"CC3152", "CC321", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1; erh 7/08"}, {"CC3051", "CC321", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1; erh 7/08"}, {"CC321", "CC3153", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"HCA2", "CC3251", "HCA2", "38.50", "106.80", "5.40", "1.802", "cyclopentane, par_carb HCA2C2 CC322C HCA2C2"}, {"HCA1", "CC3152", "OC301", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"OC301", "CC3152", "CC3151", "45.00", "105.00", " ", " ", "erh xtal anal on disac/furanose 3/09"}, {"CC3152", "OC301", "CC331", "95.00", "111.00", " ", " ", "erh xtal anal on furanose 3/09"}, {"OC301", "CC3152", "OC3C51", "90.00", "112.00", " ", " ", "erh xtal anal on disac"}, {"CC321C", "CC311D", "CC321C", "58.350", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321D", "CC311D", "CC321C", "58.350", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC311D", "CC311D", "CC321C", "58.350", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"OC3C61", "CC311D", "CC311D", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC3C61", "CC321D", "CC311D", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"HCA1", "CC311D", "CC311D", "34.500", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"HCA2", "CC321D", "CC311D", "34.500", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"HCA1", "CC311D", "CC321D", "34.500", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"OC30P", "CC311D", "CC321C", "45.00", "107.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC30P", "CC311D", "CC311D", "45.000", "107.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC30P", "CC3161", "CC3161", "45.00", "107.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC30P", "CC3161", "CC3163", "45.00", "107.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC30P", "CC311D", "CC321D", "45.00", "109.00", " ", " ", " "}, {"OC30P", "CC3162", "CC3161", "45.00", "109.00", " ", " ", " "}, {"OC30P", "CC3161", "CC3162", "45.00", "109.00", " ", " ", " "}, {"OC30P", "CC321", "CC311C", "75.700", "107.50", " ", " ", " "}, {"OC30P", "CC321", "CC3163", "75.700", "107.50", " ", " ", " "}, {"OC30P", "CC311D", "OC3C61", "90.00", "110.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC30P", "CC3162", "OC3C61", "90.00", "110.00", " ", " ", " "}, {"OC30P", "CC321", "HCA2", "60.0", "109.5", " ", " ", " "}, {"OC30P", "CC3162", "HCA1", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"OC30P", "CC3161", "HCA1", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"OC30P", "CC311D", "HCA1", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"OC30P", "PC", "OC2DP", "98.9", "111.6", " ", " ", " "}, {"OC2DP", "PC", "OC2DP", "120.0", "120.0", " ", " ", " "}, {"OC2DP", "PC", "OC312", "98.9", "113.23", " ", " ", "ON3 P ON4 98.9 108.23 !MP_1, ADM Jr. !"}, {"OC312", "PC", "OC312", "98.9", "104.413", " ", " ", "ON4 P ON4 98.9 104.0 !MP_0, ADM Jr. !"}, {"OC30P", "PC", "OC312", "48.1", "108.0", " ", " ", "ON2 P ON4 48.1 108.0 !MP_1, ADM Jr. !"}, {"HCP1", "OC312", "PC", "30.0", "115.0", "40.0", "2.35", " "}, {"CC3161", "OC30P", "PC", "20.0", "120.0", "35.0", "2.33", " "}, {"CC311D", "OC30P", "PC", "20.0", "120.0", "35.0", "2.33", " "}, {"CC3162", "OC30P", "PC", "20.0", "120.0", "35.0", "2.33", " "}, {"CC311D", "OC30P", "SC", "15.0", "109.00", "27.00", "1.90", "methylsulfate"}, {"CC3161", "OC30P", "SC", "15.0", "109.00", "27.00", "1.90", "methylsulfate"}, {"CC321", "OC30P", "SC", "15.0", "110.10", "27.00", "1.90", "methylsulfate"}, {"OC2DP", "SC", "OC2DP", "130.0", "109.47", "35.0", "2.45", "methylsulfate"}, {"OC30P", "SC", "OC2DP", "85.0", "98.0", " ", " ", "methylsulfate"}, {"CC311D", "OC301", "CC321", "95.00", "109.70", " ", " ", "pram, OMeTHP CC311D OC301 CC331"}, {"OC301", "CC321", "CC331", "45.00", "111.50", " ", " ", "pram, par35 OC3C7M CC321 CC331"}, {"OC301", "CC312D", "OC3C5M", "90.00", "112.00", " ", " ", "OMe-THF OC301 CC312C OC3C5M"}, {"HCA1", "CC312D", "OC301", "60.00", "109.50", " ", " ", "OMe-THF HCA1C2 CC312C OC301"}, {"OC301", "CC312D", "CC322C", "45.00", "106.50", " ", " ", "OMe-THF OC301 CC312C CC322C"}, {"CC312D", "OC301", "CC331", "95.00", "109.70", " ", " ", "OMe-THF CC312C OC301 CC331"}, {"CC311D", "OC302", "CC312D", "50.00", "111.50", " ", " ", "THP-O-THP CC311D OC302 CC311D"}, {"CC312D", "OC3C5M", "CC322C", "95.00", "111.00", " ", " ", "THF w/me CC312C OC3C5M CC322C"}, {"OC302", "CC312D", "OC3C5M", "90.00", "112.00", " ", " ", "OMe-THF OC301 CC312C OC3C5M"}, {"HCA2C2", "CC322C", "CC312D", "35.00", "111.40", "22.53", "2.179", "THF w/me HCA2C2 CC322C CC312C"}, {"CC312D", "CC322C", "CC322C", "58.00", "109.50", "11.16", "2.561", "THF w/me CC312C CC322C CC322C"}, {"OC3C5M", "CC312D", "CC322C", "45.00", "111.10", " ", " ", "THF w/me OC3C5M CC312C CC322C"}, {"OC302", "CC312D", "CC322C", "45.00", "106.50", " ", " ", "OMe-THF OC301 CC312C CC322C"}, {"HCA1", "CC312D", "OC302", "60.00", "109.50", " ", " ", "OMe-THF HCA1C2 CC312C OC301"}, {"HCA1", "CC312D", "OC3C5M", "70.00", "107.30", " ", " ", "THF w/me HCA1C2 CC312C OC3C5M"}, {"HCA1", "CC312D", "CC322C", "35.00", "111.40", "22.53", "2.179", "THF w/me HCA1C2 CC312C CC322C"}, {"HCA1", "CC312C", "OC3C5M", "70.00", "107.30", " ", " ", "THF w/me HCA1C2 CC312C OC3C5M"}, {"HCA1", "CC312C", "CC322C", "35.00", "111.40", "22.53", "2.179", "THF w/me HCA1C2 CC312C CC322C"}, {"CC321", "CC312C", "CC322C", "58.350", "113.00", "11.16", "2.561", "pram, angle eq. value modified (from CC321 CC311C CC321C),QM minima, MOLVIB on model compound 2 (raman et. al)"}, {"HCA1", "CC312C", "CC321", "34.50", "110.10", "22.53", "2.179", "THF w/me HCA1C2 CC312C CC331"}, {"HCA2", "CC321", "CC312C", "33.43", "110.10", "22.53", "2.179", "COCA-THP2 HCA2 CC321 CC311C"}, {"OC301", "CC321", "CC312C", "45.00", "106.00", " ", " ", "COCA-THP2 OC301 CC321 CC311C"}, {"OC3C5M", "CC312C", "CC321", "60.00", "109.00", " ", " ", "pram, modified (from OC3C61 CC311C CC321),QM minima, MOLVIB on model compound 2 (raman et. al)"}, {"CC312C", "OC303", "CC331", "95.00", "109.70", " ", " ", "OMe-THF CC312C OC301 CC331"}, {"OC303", "CC331", "HCA3", "60.00", "109.50", " ", " ", "OMe-THF"}, {"OC303", "CC311D", "CC321C", "45.00", "109.00", " ", " ", "OC301 CC311D CC321C"}, {"OC303", "CC311D", "OC3C61", "90.00", "110.00", " ", " ", "OC301 CC311D OC3C61"}, {"HCA1", "CC311D", "OC303", "60.00", "109.50", " ", " ", "HCA1 CC311D OC301"}, {"HCA1", "CC312C", "OC303", "60.00", "109.50", " ", " ", "HCA1C2 CC312C OC301"}, {"OC303", "CC312C", "CC322C", "45.00", "110.50", " ", " ", "pram, modified (from OC301 CC312C CC322C), model compound 3 (raman et. al) QM minima"}, {"CC311D", "OC303", "CC312C", "50.00", "109.50", " ", " ", "pram, modified (from CC311D OC302 CC311D), model compound 3 (raman et. al) QM minima, MOLVIB"}, {"OC3C5M", "CC322C", "CC312C", "45.00", "111.10", " ", " ", "THF OC3C5M CC322C CC322C"}, {"CC311C", "OC301", "CC312D", "50.00", "109.20", " ", " ", "CC311C OC301 CC311D"}, {"CC3162", "OC302", "CC3051", "50.00", "111.50", " ", " ", "CC3162 OC302 CC3162"}, {"OC302", "CC3051", "OC3C51", "90.00", "112.00", " ", " ", "OC301 CC312C OC3C51"}, {"OC302", "CC3051", "CC321", "75.70", "110.10", " ", " ", "OC311 CC3051 CC321"}, {"OC302", "CC3051", "CC3151", "45.00", "105.00", " ", " ", "OC301 CC3152 CC3151"}, {"HCA1", "CC3162", "OC303", "60.00", "109.50", " ", " ", "pram, model compound 3(raman et al) HCA1 CC311D OC303"}, {"OC303", "CC3162", "OC3C61", "90.00", "112.00", " ", " ", "OC301 CC3162 OC3C61"}, {"OC303", "CC3162", "CC3161", "45.00", "105.00", " ", " ", "OC301 CC3162 CC3161"}, {"CC3162", "OC303", "CC3151", "50.00", "109.50", " ", " ", "pram, model compound 3(raman et al) CC311D OC303 CC312C"}, {"OC303", "CC3151", "CC3153", "45.00", "110.50", " ", " ", "pram, model compound 3(raman et al) OC303 CC312C CC322C"}, {"OC303", "CC3151", "CC3151", "45.00", "110.50", " ", " ", "pram, model compound 3(raman et al) OC303 CC312C CC322C"}, {"OC303", "CC3151", "HCA1", "60.00", "109.50", " ", " ", "pram, model compound 3(raman et al) HCA1 CC312C OC303"}, {"OC303", "CC3151", "CC3051", "45.00", "110.50", " ", " ", "pram, model compound 3(raman et al) OC303 CC312C CC322C"}, {"CC3051", "CC321", "OC301", "45.00", "106.00", " ", " ", "pram, model compound 2 OC301 CC321 CC312C"}, {"CC321", "OC301", "CC3051", "95.00", "112.20", " ", " ", "pram, modified based on KESTOS,CELGIJ,PEKHES(2) crystal simulations (from OMe-thf CC312C OC301 CC331) 2/15/2010"}, {"OC301", "CC3051", "OC3C51", "90.00", "112.00", " ", " ", "OMe-THF OC301 CC312C OC3C5M"}, {"OC301", "CC3051", "CC321", "75.70", "110.10", " ", " ", "OC311 CC3051 CC321"}, {"OC301", "CC3051", "CC3151", "45.00", "106.50", " ", " ", "OMe-thf OC301 CC312C CC322C"}, {"CC3153", "CC321", "OC301", "45.00", "106.00", " ", " ", "pram, model compound 2(raman et al) OC301 CC321 CC312C"}, {"CC3152", "OC301", "CC321", "95.00", "111.00", " ", " ", "CC3152 OC301 CC331"}, {"CC3161", "OC301", "CC3152", "50.00", "109.20", " ", " ", "CC311C OC301 CC311D, model compound 4"}, {"OC301", "CC3161", "CC3263", "45.00", "109.00", " ", " ", "from OC301 CC3161 CC3163"}, {"CC3162", "OC30P", "SC", "15.00", "109.00", "27.00", "1.90", "sairam"}, {"CC321", "OC301", "CC3062", "95.00", "109.70", " ", " ", "CC3162 OC301 CC321; mjyang"}, {"OC301", "CC312", "CC312", "45.00", "106.00", " ", " ", "OC301 CC321 CC3163"}, {"OC301", "CC312", "CC322", "45.00", "106.00", " ", " ", "OC301 CC321 CC3163"}, {"CC312", "OC301", "CC3062", "95.00", "109.70", " ", " ", "from CC3162 OC301 CC321"}, {"OC301", "CC312", "HCA1", "60.00", "109.50", " ", " ", "OC301 CC321 HCA2"}, {"OC301", "CC322", "HCA2", "60.00", "109.50", " ", " ", "OC301 CC321 HCA2"}, {"OC301", "CC322", "CC312", "45.00", "106.00", " ", " ", "OC301 CC321 CC3163"}, {"CC322", "OC301", "CC3062", "95.00", "109.70", " ", " ", "from CC3162 OC301 CC321"}, {"CC3162", "CC3161", "CC3261", "53.35", "111.00", "8.00", "2.561", "from CC3162 CC3161 CC3161"}, {"CC3161", "CC3261", "CC3161", "53.35", "111.00", "8.00", "2.561", "from CC3161 CC3161 CC3161"}, {"CC3261", "CC3161", "CC3163", "53.35", "111.00", "8.00", "2.561", "from CC3161 CC3161 CC3163"}, {"CC3261", "CC3161", "OC301", "75.70", "110.10", " ", " ", "CC3261 CC3161 OC311"}, {"CC331", "CC2O5", "OC301", "55.00", "109.00", "20.00", "2.3260", "CG331 CG2O2 OG302"}, {"CC331", "CC2O5", "OC2D1", "70.00", "125.00", "20.00", "2.4420", "CG331 CG2O2 OG2D1"}, {"CC2O5", "CC331", "HCA3", "33.00", "109.50", "30.00", "2.1630", "CG2O2 CG331 HGA3"}, {"OC2D1", "CC2O5", "OC301", "90.00", "125.90", "160.00", "2.2576", "OG2D1 CG2O2 OG302"}, {"CC2O5", "OC301", "CC3161", "40.00", "109.60", "30.00", "2.2651", "CG2O2 OG302 CG311"}, {"OC2DP", "SC", "NC311", "85.00", "103.00", " ", " ", "SUFMA/B, xxwy"}, {"SC", "NC311", "HCP1", "48.00", "118.00", " ", " ", "SUFMA/B, xxwy"}, {"CC3161", "NC311", "HCP1", "48.00", "111.00", " ", " ", "SUFMA/B, xxwy"}, {"SC", "NC311", "CC3161", "50.00", "113.00", " ", " ", "SUFMA/B, xxwy"}, {"CC3161", "CC3161", "NC311", "52.00", "109.00", " ", " ", "SUFMA/B, xxwy"}, {"CC3162", "CC3161", "NC311", "52.00", "109.00", " ", " ", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "HCA1", "36.00", "109.50", " ", " ", "SUFMA/B, xxwy"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm36_carb info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm36_carb_dihedrals[1354][8]= {{"CC312", "CC312", "CC312", "CC2O3", "0.02", "1", "180.0", "erh ketone, n=6 polyol"}, {"CC312", "CC312", "CC312", "CC2O3", "0.06", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC312", "CC2O3", "2.47", "3", "0.0", "C2-C3-C4-C5"}, {"CC312", "CC312", "CC2O3", "CC322", "0.02", "1", "180.0", "erh ketone, n=6 polyol"}, {"CC312", "CC312", "CC2O3", "CC322", "0.06", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC2O3", "CC322", "2.47", "3", "0.0", "C2-C3-C4-C5"}, {"CC2O3", "CC312", "CC312", "OC311", "2.62", "1", "180.0", "erh ketone, fit psicose"}, {"CC2O3", "CC312", "CC312", "OC311", "0.28", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC2O3", "CC312", "CC312", "OC311", "2.28", "3", "0.0", "C2-C3-C4-O4"}, {"CC312", "CC312", "CC2O3", "OC2D3", "2.06", "1", "0.0", "erh ketone, fit psicose"}, {"CC312", "CC312", "CC2O3", "OC2D3", "0.13", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC2O3", "OC2D3", "2.87", "3", "0.0", "C4-C3-C2-O2"}, {"CC312", "CC2O3", "CC322", "OC311", "2.94", "1", "0.0", "erh ketone, fit psicose"}, {"CC312", "CC2O3", "CC322", "OC311", "1.48", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC2O3", "CC322", "OC311", "0.50", "3", "180.0", "C3-C2-C1-O1"}, {"CC322", "CC2O3", "CC322", "OC311", "1.03", "1", "0.0", "erh ketone, fit psicose"}, {"CC322", "CC2O3", "CC322", "OC311", "2.44", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC322", "CC2O3", "CC322", "OC311", "1.24", "3", "180.0", "C1-C2-C3-O3"}, {"CC322", "CC2O3", "CC312", "OC311", "1.03", "1", "0.0", "erh ketone, fit psicose"}, {"CC322", "CC2O3", "CC312", "OC311", "2.44", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC322", "CC2O3", "CC312", "OC311", "1.24", "3", "180.0", "C1-C2-C3-O3"}, {"OC2D3", "CC2O3", "CC312", "OC311", "2.09", "1", "0.0", "erh ketone, fit psicose"}, {"OC2D3", "CC2O3", "CC312", "OC311", "0.17", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"OC2D3", "CC2O3", "CC312", "OC311", "2.15", "3", "180.0", "O2-C2-C3-O3"}, {"OC2D3", "CC2O3", "CC322", "OC311", "2.80", "1", "0.0", "erh ketone, fit psicose"}, {"OC2D3", "CC2O3", "CC322", "OC311", "0.75", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"OC2D3", "CC2O3", "CC322", "OC311", "0.32", "3", "180.0", "O2-C2-C1-O1"}, {"CC331", "CC2O3", "CC331", "HCA3", "0.10", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"CC2O3", "CC312", "CC312", "HCA1", "0.10", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"CC322", "CC2O3", "CC312", "HCA1", "0.10", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"CC312", "CC2O3", "CC322", "HCA2", "0.10", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"CC322", "CC2O3", "CC322", "HCA2", "0.10", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"OC2D3", "CC2O3", "CC331", "HCA3", "0.00", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"OC2D3", "CC2O3", "CC322", "HCA2", "0.00", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"OC2D3", "CC2O3", "CC312", "HCA1", "0.00", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"CC2O3", "CC312", "OC311", "HCP1", "0.35", "1", "0.0", "erh ketone, n=6 polyol"}, {"CC2O3", "CC312", "OC311", "HCP1", "0.37", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC2O3", "CC312", "OC311", "HCP1", "0.19", "3", "180.0", "C-C-O-H"}, {"CC2O3", "CC322", "OC311", "HCP1", "0.35", "1", "0.0", "erh ketone, n=6 polyol"}, {"CC2O3", "CC322", "OC311", "HCP1", "0.37", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC2O3", "CC322", "OC311", "HCP1", "0.19", "3", "180.0", "C-C-O-H"}, {"CC312", "CC312", "CC312", "CC2O4", "0.02", "1", "180.0", "erh aldehyde, n=6 polyol"}, {"CC312", "CC312", "CC312", "CC2O4", "0.06", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC312", "CC2O4", "2.47", "3", "0.0", "C2-C3-C4-C5"}, {"CC312", "CC312", "CC2O4", "OC2D4", "0.17", "1", "180.0", "erh aldehyde, fit allose"}, {"CC312", "CC312", "CC2O4", "OC2D4", "0.26", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC2O4", "OC2D4", "1.04", "3", "180.0", "C3-C2-C1-O1"}, {"CC2O4", "CC312", "CC312", "OC311", "1.15", "1", "0.0", "erh aldehyde, fit allose"}, {"CC2O4", "CC312", "CC312", "OC311", "3.00", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC2O4", "CC312", "CC312", "OC311", "2.39", "3", "180.0", "C1-C2-C3-O3"}, {"OC2D4", "CC2O4", "CC312", "OC311", "0.56", "1", "180.0", "erh aldehyde, fit allose"}, {"OC2D4", "CC2O4", "CC312", "OC311", "1.60", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"OC2D4", "CC2O4", "CC312", "OC311", "0.93", "3", "0.0", "O1-C1-C2-O2"}, {"HCP1", "OC311", "CC312", "CC2O4", "0.35", "1", "0.0", "erh aldehyde, n=6 polyol"}, {"HCP1", "OC311", "CC312", "CC2O4", "0.37", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"HCP1", "OC311", "CC312", "CC2O4", "0.19", "3", "180.0", "C-C-O-H"}, {"HCR1", "CC2O4", "CC331", "HCA3", "0.00", "3", "180.0", "acetaldehyde, adm"}, {"OC2D4", "CC2O4", "CC331", "HCA3", "0.20", "3", "180.0", "acetaldehyde, adm"}, {"CC312", "CC312", "CC2O4", "HCR1", "0.00", "6", "180.0", "aldehdye par22 X CT1 CD X"}, {"CC2O4", "CC312", "CC312", "HCA1", "0.20", "3", "0.0", "aldehyde par22 X CT1 CT1 X"}, {"OC2D4", "CC2O4", "CC312", "HCA1", "0.00", "6", "180.0", "aldehdye par22 X CT1 CD X"}, {"OC311", "CC312", "CC2O4", "HCR1", "0.00", "6", "180.0", "aldehdye par22 X CT1 CD X"}, {"CC3161", "CC3161", "CC3161", "CC3162", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC3161", "CC3161", "CC3261", "CC3062", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC3161", "CC3161", "CC3161", "CC3163", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC3161", "CC3161", "CC3161", "CC3263", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC3261", "CC3161", "CC3161", "CC3163", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC3161", "CC3161", "CC3163", "CC321", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3163", "CC331", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3163", "CC2O2", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3261", "CC3062", "CC2O2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC3163", "CC312", "CC312", "CC322", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3163", "CC312", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3163", "CC312", "CC312", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC312", "CC312", "CC312", "CC322", "0.02", "1", "180.0", "erh n=6 polyol"}, {"CC312", "CC312", "CC312", "CC322", "0.06", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC312", "CC322", "2.47", "3", "0.0", "C2-C3-C4-C5"}, {"CC322", "CC312", "CC312", "CC322", "0.02", "1", "180.0", "erh glycerol, n=6 polyol"}, {"CC322", "CC312", "CC312", "CC322", "0.06", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC322", "CC312", "CC312", "CC322", "2.47", "3", "0.0", "C2-C3-C4-C5"}, {"CC312", "CC312", "CC312", "CC312", "0.02", "1", "180.0", "erh n=6 polyol"}, {"CC312", "CC312", "CC312", "CC312", "0.06", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC312", "CC312", "2.47", "3", "0.0", "C2-C3-C4-C5"}, {"CC3161", "CC3161", "CC3161", "CC3161", "2.31", "3", "180.0", "erh fit inositol RIMP2/cc-pVTZ//MP2/631gd C1-C2-C3-C4"}, {"CC311C", "CC321C", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321C", "CC311C", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321C", "CC321C", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321D", "CC321C", "CC311C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321D", "CC321C", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321D", "CC321C", "CC321C", "CC311C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321D", "CC311C", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC311D", "CC321C", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC3162", "CC3163", "CC3161", "CC3161", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321", "CC311C", "CC321C", "CC321C", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X og preserve ring def energy"}, {"CC3161", "CC3161", "CC3162", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC3161", "CC3261", "CC3062", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC3161", "CC3161", "CC3163", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC3161", "CC3161", "CC3263", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC3161", "CC3161", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3162", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3163", "CC312", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3163", "CC321", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC3161", "CC3261", "CC3062", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC3162", "CC3161", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3062", "CC3261", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC3163", "CC3161", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3163", "CC312", "CC312", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3263", "CC3161", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC321", "CC3163", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC331", "CC3163", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC331", "CC3163", "CC3161", "OC301", "0.20", "3", "0.0", "CC331 CC3163 CC3161 OC311, pram"}, {"CC2O2", "CC3163", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC2O2", "CC3163", "CC3161", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC321", "CC3163", "CC3161", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3161", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3162", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3162", "OC302", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3162", "CC3161", "CC3161", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3163", "CC3161", "CC3161", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC312", "CC312", "CC3163", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC321", "CC321", "CC321", "OC301", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC322", "CC312", "CC312", "OC311", "0.35", "1", "0.0", "erh n=6 polyol"}, {"CC322", "CC312", "CC312", "OC311", "0.69", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC322", "CC312", "CC312", "OC311", "2.79", "3", "180.0", "C1-C2-C3-O3"}, {"CC312", "CC312", "CC322", "OC311", "0.35", "1", "0.0", "erh n=6 polyol"}, {"CC312", "CC312", "CC322", "OC311", "0.69", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC322", "OC311", "2.79", "3", "180.0", "C3-C2-C1-O1"}, {"CC312", "CC312", "CC312", "OC311", "0.35", "1", "0.0", "erh n=6 polyol"}, {"CC312", "CC312", "CC312", "OC311", "0.69", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC312", "OC311", "2.79", "3", "180.0", "C4-C3-C2-O2"}, {"CC322", "CC312", "CC322", "OC311", "0.35", "1", "0.0", "erh glycerol, n=6 polyol"}, {"CC322", "CC312", "CC322", "OC311", "0.69", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC322", "CC312", "CC322", "OC311", "2.79", "3", "180.0", "C1-C2-C3-O3"}, {"CC3161", "CC3163", "CC2O2", "OC2D2", "0.05", "6", "180.00", "par22 X CT1 CC X"}, {"OC2D2", "CC2O2", "CC311", "CC331", "0.05", "6", "180.00", "par22 X CT1 CC X"}, {"OC2D2", "CC2O2", "CC301", "CC331", "0.05", "6", "180.00", "par22 X CT1 CC X"}, {"OC2D2", "CC2O2", "CC3062", "CC3261", "0.05", "6", "180.00", "par22 X CT1 CC X"}, {"CC321C", "CC321C", "CC321C", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC321C", "CC321C", "CC311C", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC321C", "CC311C", "CC321C", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC321C", "CC321C", "CC321D", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC321C", "CC311C", "CC321D", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC321C", "CC321C", "CC311D", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC311C", "CC321C", "CC321C", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC311C", "CC321C", "CC321D", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"OC301", "CC311C", "CC321C", "CC321C", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC311C", "CC321C", "CC321D", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC311D", "CC321C", "CC321C", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC302", "CC311D", "CC321C", "CC321C", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC2D2", "CC2O2", "CC321", "CC331", "0.05", "6", "180.0", "par22 X CT2 CC X"}, {"CC321C", "CC311C", "CC321", "OC301", "1.10", "1", "180.0", "og compounds 11 and 12"}, {"CC321C", "CC311C", "CC321", "OC301", "0.07", "2", "180.0", "MCSA fit"}, {"CC321C", "CC311C", "CC321", "OC301", "0.15", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3163", "CC321", "OC301", "0.50", "1", "180.0", "dpatel, modified"}, {"CC3161", "CC3163", "CC321", "OC301", "0.37", "2", "180.0", "LS fit"}, {"CC3161", "CC3163", "CC321", "OC301", "0.15", "3", "0.0", " "}, {"NC2D1", "CC3161", "CC3161", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"NC2D1", "CC3161", "CC3161", "CC3261", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC312", "CC3163", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3162", "OC3C61", "CC3163", "0.20", "3", "0.0", "og/sng thp"}, {"CC3161", "CC3162", "OC3C61", "CC3263", "0.20", "3", "0.0", "og/sng thp"}, {"CC3161", "CC3163", "OC3C61", "CC3162", "0.20", "3", "0.0", "og/sng thp"}, {"CC3161", "CC3163", "OC3C61", "CC3062", "0.20", "3", "0.0", "og/sng thp"}, {"CC3161", "CC3263", "OC3C61", "CC3162", "0.20", "3", "0.0", "og/sng thp"}, {"CC321", "CC3163", "OC3C61", "CC3162", "0.20", "3", "0.0", "og/sng thp"}, {"CC312", "CC3163", "OC3C61", "CC3062", "0.20", "3", "0.0", "og/sng thp"}, {"CC331", "CC3163", "OC3C61", "CC3162", "0.20", "3", "0.0", "og/sng thp"}, {"CC2O2", "CC3163", "OC3C61", "CC3162", "0.20", "3", "0.0", "og/sng thp"}, {"CC2O2", "CC3062", "OC3C61", "CC3163", "0.20", "3", "0.0", "og/sng thp"}, {"CC331", "OC301", "CC311", "CC331", "0.40", "1", "0.0", "par35"}, {"CC331", "OC301", "CC311", "CC331", "0.49", "3", "0.0", "CC33A CC32A OC30A CC33A"}, {"CC331", "OC301", "CC301", "CC331", "0.40", "1", "0.0", "par35"}, {"CC331", "OC301", "CC301", "CC331", "0.49", "3", "0.0", "CC33A CC32A OC30A CC33A"}, {"CC3162", "OC301", "CC321", "CC321", "0.40", "1", "0.0", "par35"}, {"CC3162", "OC301", "CC321", "CC321", "0.49", "3", "0.0", "CC33A CC32A OC30A CC32A"}, {"CC2O2", "CC301", "OC301", "CC331", "0.20", "3", "0.0", "og/sng thp CC321C CC321C OC3C61 CC321C"}, {"CC2O2", "CC311", "OC301", "CC331", "0.20", "3", "0.0", "og/sng thp CC321C CC321C OC3C61 CC321C"}, {"CC3261", "CC3062", "OC3C61", "CC3163", "0.20", "3", "0.0", "og/sng thp"}, {"CC311C", "CC321C", "OC3C61", "CC321D", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC321C", "OC3C61", "CC321C", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC321C", "OC3C61", "CC321D", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC321D", "OC3C61", "CC311C", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC321C", "OC3C61", "CC311D", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC321D", "OC3C61", "CC321C", "0.20", "3", "0.0", "og/sng thp"}, {"CC311C", "CC321D", "OC3C61", "CC321C", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC311C", "OC3C61", "CC321D", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC311D", "OC3C61", "CC321C", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC311D", "OC301", "CC331", "0.22", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC321C", "CC311D", "OC301", "CC331", "0.28", "2", "180.0", "MCSA fit"}, {"CC321C", "CC311D", "OC301", "CC331", "0.89", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3162", "OC301", "CC331", "0.22", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC3161", "CC3162", "OC301", "CC331", "0.28", "2", "180.0", "MCSA fit"}, {"CC3161", "CC3162", "OC301", "CC331", "0.89", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3162", "OC301", "CC321", "0.22", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC3161", "CC3162", "OC301", "CC321", "0.28", "2", "180.0", "MCSA fit"}, {"CC3161", "CC3162", "OC301", "CC321", "0.89", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321C", "CC311D", "OC302", "CC311D", "0.73", "1", "0.0", "og THP-1-O-1-THP"}, {"CC321C", "CC311D", "OC302", "CC311D", "0.61", "2", "180.0", "MCSA fit"}, {"CC321C", "CC311D", "OC302", "CC311D", "0.00", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3162", "OC302", "CC3162", "0.73", "1", "0.0", "og THP-1-O-1-THP"}, {"CC3161", "CC3162", "OC302", "CC3162", "0.61", "2", "180.0", "MCSA fit"}, {"CC3161", "CC3162", "OC302", "CC3162", "0.00", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321C", "CC311D", "OC301", "CC311C", "0.41", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC321C", "CC311D", "OC301", "CC311C", "0.66", "2", "180.0", "MCSA fit"}, {"CC321C", "CC311D", "OC301", "CC311C", "1.60", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3162", "OC301", "CC3161", "0.41", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC3161", "CC3162", "OC301", "CC3161", "0.66", "2", "180.0", "MCSA fit"}, {"CC3161", "CC3162", "OC301", "CC3161", "1.60", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321D", "CC311C", "OC301", "CC311D", "0.13", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC321D", "CC311C", "OC301", "CC311D", "0.25", "2", "180.0", "MCSA fit"}, {"CC321D", "CC311C", "OC301", "CC311D", "0.06", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "CC3161", "OC301", "CC3162", "0.13", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC3162", "CC3161", "OC301", "CC3162", "0.25", "2", "180.0", "MCSA fit"}, {"CC3162", "CC3161", "OC301", "CC3162", "0.06", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321C", "CC311C", "OC301", "CC311D", "0.13", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC321C", "CC311C", "OC301", "CC311D", "0.25", "2", "180.0", "MCSA fit"}, {"CC321C", "CC311C", "OC301", "CC311D", "0.06", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3161", "OC301", "CC3162", "0.13", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC3161", "CC3161", "OC301", "CC3162", "0.25", "2", "180.0", "MCSA fit"}, {"CC3161", "CC3161", "OC301", "CC3162", "0.06", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3163", "CC3161", "OC301", "CC3162", "0.13", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC3163", "CC3161", "OC301", "CC3162", "0.25", "2", "180.0", "MCSA fit"}, {"CC3163", "CC3161", "OC301", "CC3162", "0.06", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321D", "OC3C61", "CC311C", "CC321", "0.284", "3", "0.0", "from CC321C OC3C61 CC311D HCA1"}, {"CC311C", "CC321", "OC301", "CC331", "0.64", "1", "180.0", "og compounds 11 and 12"}, {"CC311C", "CC321", "OC301", "CC331", "0.03", "2", "180.0", "MCSA fit"}, {"CC311C", "CC321", "OC301", "CC331", "0.61", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3163", "CC321", "OC301", "CC3162", "0.64", "1", "180.0", "og compounds 11 and 12"}, {"CC3163", "CC321", "OC301", "CC3162", "0.03", "2", "180.0", "MCSA fit"}, {"CC3163", "CC321", "OC301", "CC3162", "0.61", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3161", "CC3161", "OC311", "2.65", "1", "180.0", "og ethylene glycol combo"}, {"OC311", "CC3161", "CC3161", "OC311", "0.00", "2", "0.0", " "}, {"OC311", "CC3161", "CC3161", "OC311", "0.13", "3", "180.0", " "}, {"OC311", "CC3162", "CC3161", "OC311", "2.65", "1", "180.0", "og ethylene glycol combo"}, {"OC311", "CC3162", "CC3161", "OC311", "0.00", "2", "0.0", " "}, {"OC311", "CC3162", "CC3161", "OC311", "0.13", "3", "180.0", " "}, {"OC301", "CC3162", "CC3161", "OC311", "2.65", "1", "180.0", "og ethylene glycol combo"}, {"OC301", "CC3162", "CC3161", "OC311", "0.00", "2", "0.0", " "}, {"OC301", "CC3162", "CC3161", "OC311", "0.13", "3", "180.0", " "}, {"OC302", "CC3162", "CC3161", "OC311", "2.65", "1", "180.0", "og ethylene glycol combo"}, {"OC302", "CC3162", "CC3161", "OC311", "0.00", "2", "0.0", " "}, {"OC302", "CC3162", "CC3161", "OC311", "0.13", "3", "180.0", " "}, {"OC301", "CC3161", "CC3161", "OC311", "2.65", "1", "180.0", "og ethylene glycol combo"}, {"OC301", "CC3161", "CC3161", "OC311", "0.00", "2", "0.0", " "}, {"OC301", "CC3161", "CC3161", "OC311", "0.13", "3", "180.0", " "}, {"OC301", "CC3161", "CC3162", "OC311", "2.65", "1", "180.0", "og ethylene glycol combo"}, {"OC301", "CC3161", "CC3162", "OC311", "0.00", "2", "0.0", " "}, {"OC301", "CC3161", "CC3162", "OC311", "0.13", "3", "180.0", " "}, {"OC301", "CC3161", "CC3162", "OC301", "0.59", "1", "180.0", "par35 OC30A CC32A CC32A OC30A"}, {"OC301", "CC3161", "CC3162", "OC301", "1.16", "2", "0.0", "og/rmv RESMOR and FABYOW10"}, {"OC311", "CC312", "CC322", "OC311", "1.34", "1", "180.0", "erh n=6 polyol"}, {"OC311", "CC312", "CC322", "OC311", "1.19", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"OC311", "CC312", "CC322", "OC311", "2.58", "3", "0.0", "O2-C2-C1-O1"}, {"OC311", "CC312", "CC312", "OC311", "1.34", "1", "180.0", "erh n=6 polyol"}, {"OC311", "CC312", "CC312", "OC311", "1.19", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"OC311", "CC312", "CC312", "OC311", "2.58", "3", "0.0", "O2-C2-C3-O3"}, {"OC301", "CC3161", "CC3162", "OC3C61", "2.75", "1", "180.0", "from"}, {"OC301", "CC3161", "CC3162", "OC3C61", "0.26", "2", "180.0", "OC311 CC3161 CC3162 OC3C61"}, {"OC301", "CC3161", "CC3162", "OC3C61", "0.10", "3", "0.0", " "}, {"OC301", "CC3161", "CC3163", "OC3C61", "1.36", "1", "180.0", "from"}, {"OC301", "CC3161", "CC3163", "OC3C61", "0.16", "2", "0.0", "OC311 CC3161 CC3163 OC3C61"}, {"OC301", "CC3161", "CC3163", "OC3C61", "1.01", "3", "0.0", " "}, {"OC2D2", "CC2O2", "CC311", "OC301", "0.64", "2", "180.0", "og amop mp2/ccpvtz"}, {"OC301", "CC301", "CC2O2", "OC2D2", "0.64", "2", "180.0", "og amop mp2/ccpvtz"}, {"OC3C61", "CC3163", "CC2O2", "OC2D2", "0.64", "2", "180.0", "og amop mp2/ccpvtz"}, {"OC3C61", "CC3062", "CC2O2", "OC2D2", "0.64", "2", "180.0", "from OC301 CC301 CC2O2 OC2D2"}, {"OC311", "CC301", "CC2O2", "OC2D2", "1.11", "2", "180.0", "og amol mp2/ccpvtz"}, {"OC311", "CC3062", "CC2O2", "OC2D2", "1.11", "2", "180.0", "from OC311 CC301 CC2O2 OC2D2"}, {"OC311M", "CC321", "CC321", "OC311M", "0.33", "1", "0.0", "og ethylene glycol combo_star"}, {"OC311M", "CC321", "CC321", "OC311M", "2.17", "2", "0.0", "*** ONLY for RESI EGLY ***"}, {"OC311M", "CC321", "CC321", "OC311M", "0.45", "3", "0.0", "use combo for all else"}, {"OC301", "CC311C", "CC321C", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC311C", "CC321D", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC321", "CC311C", "OC3C61", "1.93", "1", "180.0", "og compounds 11 and 12"}, {"OC301", "CC321", "CC311C", "OC3C61", "0.43", "2", "0.0", "MCSA fit"}, {"OC301", "CC321", "CC311C", "OC3C61", "0.12", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC301", "CC321", "CC3163", "OC3C61", "1.4906", "1", "180.00", "modified by LS fitting"}, {"OC301", "CC321", "CC3163", "OC3C61", "0.3759", "2", "0.00", " "}, {"OC301", "CC321", "CC3163", "OC3C61", "0.5916", "3", "0.00", " "}, {"HCP1", "OC311", "CC3161", "HCA1", "0.18", "3", "0.0", "og methanol"}, {"HCP1", "OC311", "CC3162", "HCA1", "0.18", "3", "0.0", "og methanol"}, {"HCP1", "OC311", "CC321", "HCA2", "0.18", "3", "0.0", "og methanol"}, {"HCP1", "OC311", "CC322", "HCA2", "0.18", "3", "0.0", "og methanol"}, {"HCP1", "OC311", "CC312", "HCA1", "0.18", "3", "0.0", "og methanol"}, {"HCA3", "CC331", "OC311M", "HCP1", "0.18", "3", "0.0", "og methanol"}, {"HCA2", "CC321", "OC311M", "HCP1", "0.18", "3", "0.0", "og methanol"}, {"HCA2", "CC321", "OC311M", "HCP1M", "0.18", "3", "0.0", "og methanol for egly"}, {"HCA1", "CC311", "OC311M", "HCP1", "0.18", "3", "0.0", "og methanol"}, {"HCA1", "CC3161", "CC3161", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC3161", "CC3162", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA2", "CC3261", "CC3161", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA2", "CC3261", "CC3062", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC3162", "CC3161", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC3163", "CC3161", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC3163", "CC321", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC3163", "CC312", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA2", "CC3263", "CC3161", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA3", "CC331", "CC301", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC3161", "CC3163", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3263", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3161", "CC3162", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA2", "CC3261", "CC3062", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3161", "CC3162", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3162", "OC302", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC312", "CC3163", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA2", "CC321", "CC3163", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA3", "CC331", "CC3163", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"HCA3", "CC331", "CC311", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"HCA3", "CC331", "CC301", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"HCA2", "CC321", "CC321", "OC301", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"HCA1", "CC311", "CC2O2", "OC2D2", "0.05", "6", "180.0", "par22 X CT1 CC X"}, {"HCA1", "CC3163", "CC2O2", "OC2D2", "0.05", "6", "180.0", "par22 X CT1 CC X"}, {"HCA3", "CC331", "CC2O1", "OC2D1", "0.00", "3", "180.0", "par22 O C CT3 HA"}, {"HCA2", "CC322", "CC312", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC312", "CC322", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC312", "CC312", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"OC311M", "CC321", "CC331", "HCA3", "0.14", "3", "0.0", "og ethanol"}, {"OC311M", "CC311", "CC331", "HCA3", "0.14", "3", "0.0", "og ethanol"}, {"OC311M", "CC321", "CC321", "HCA2", "0.14", "3", "0.0", "og ethanol"}, {"OC3C61", "CC321C", "CC321C", "HCA2", "0.16", "3", "0.0", "thp H-Cring-Cring-O"}, {"OC3C61", "CC321D", "CC321C", "HCA2", "0.16", "3", "0.0", "thp H-Cring-Cring-O"}, {"OC3C61", "CC311C", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC3C61", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC3C61", "CC311C", "CC321", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC3C61", "CC321C", "CC311C", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC3C61", "CC321D", "CC311C", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC302", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC311C", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC321", "CC311C", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC321", "CC3163", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC3161", "CC3161", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC301", "CC311C", "CC321D", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC3161", "CC3162", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC301", "CC3161", "CC3163", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA2", "CC321", "CC2O2", "OC2D2", "0.05", "6", "180.0", "par22 X CT2 CC X"}, {"HCA1", "CC3161", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3162", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3163", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"NC2D1", "CC311", "CC331", "HCA3", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"NC2D1", "CC2O1", "CC331", "HCA3", "0.00", "3", "0.0", "par22 NH1 C CT3 HA"}, {"OC301", "CC3162", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC311", "CC3162", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC301", "CC3161", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC311", "CC3161", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC3C61", "CC3162", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC3C61", "CC3163", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC2D1", "CC2O1", "NC2D1", "CC311", "2.50", "2", "180.0", "par22 O C NH1 CT1"}, {"OC2D1", "CC2O1", "NC2D1", "CC3161", "2.50", "2", "180.0", "par22 O C NH1 CT1"}, {"OC2D1", "CC2O1", "NC2D1", "CC331", "2.50", "2", "180.0", "par22 O C NH1 CT3"}, {"CC311", "NC2D1", "CC2O1", "CC331", "1.60", "1", "0.0", "par22 CT1 NH1 C CT3"}, {"CC311", "NC2D1", "CC2O1", "CC331", "2.50", "2", "180.0", " "}, {"CC3161", "NC2D1", "CC2O1", "CC331", "1.60", "1", "0.0", "par22 CT1 NH1 C CT3"}, {"CC3161", "NC2D1", "CC2O1", "CC331", "2.50", "2", "180.0", " "}, {"CC331", "NC2D1", "CC2O1", "CC331", "1.60", "1", "0.0", "par22 CT3 NH1 C CT3"}, {"CC331", "NC2D1", "CC2O1", "CC331", "2.50", "2", "180.0", " "}, {"CC2O1", "NC2D1", "CC311", "CC331", "0.50", "1", "180.0", "og fit to IPAA"}, {"CC2O1", "NC2D1", "CC3161", "CC3162", "0.50", "1", "180.0", "og fit to IPAA"}, {"CC2O1", "NC2D1", "CC3161", "CC3161", "0.50", "1", "180.0", "og fit to IPAA"}, {"CC2O1", "NC2D1", "CC3161", "CC3163", "0.50", "1", "180.0", "og fit to IPAA"}, {"HCA1", "CC3161", "CC3161", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3162", "CC3161", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3163", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3263", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC3261", "CC3161", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3163", "CC321", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3163", "CC312", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC311C", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC311C", "CC321D", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC311C", "CC321", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC311", "CC331", "HCA3", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"HCA1", "CC3163", "CC331", "HCA3", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"HCA2", "CC321", "CC321", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"HCA2", "CC321C", "CC321C", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"HCA2", "CC321D", "CC321C", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"HCA2", "CC321", "CC331", "HCA3", "0.16", "3", "0.0", "par27 X CTL2 CTL3 X"}, {"HCA1", "CC312", "CC322", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC312", "CC312", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC312", "CC2O4", "HCR1", "0.00", "6", "180.0", "par22 X CT3 CD X"}, {"HCA1", "CC3162", "OC3C61", "CC3163", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"HCA1", "CC3162", "OC3C61", "CC3263", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A;erh transferred by analogy"}, {"HCA1", "CC3163", "OC3C61", "CC3162", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"HCA1", "CC3163", "OC3C61", "CC3062", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"HCA2", "CC3263", "OC3C61", "CC3162", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A;erh transferred by analogy"}, {"HCA1", "CC311", "OC301", "CC331", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC311", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA3 CC33A OC30A CC32A"}, {"CC301", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA3 CC33A OC30A CC32A"}, {"CC331", "OC301", "CC311D", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC331", "OC301", "CC3162", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321", "OC301", "CC3162", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321C", "OC3C61", "CC321C", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321D", "OC3C61", "CC321C", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC311D", "OC3C61", "CC321C", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321C", "OC3C61", "CC321D", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC311C", "OC3C61", "CC321D", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321C", "OC3C61", "CC311D", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321D", "OC3C61", "CC311C", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC311C", "OC301", "CC311D", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC3161", "OC301", "CC3162", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC311D", "OC302", "CC311D", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC3162", "OC302", "CC3162", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC311D", "OC301", "CC311C", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC3162", "OC301", "CC3161", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA3 CC33A OC30A CC32A"}, {"CC311D", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA3 CC33A OC30A CC32A"}, {"CC3162", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA3 CC33A OC30A CC32A"}, {"CC3162", "OC301", "CC321", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC331", "OC301", "CC321", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC33A"}, {"HCA1", "CC3161", "CC3161", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3162", "CC3161", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3161", "CC3163", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3161", "CC3261", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3161", "CC3263", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3163", "CC312", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC312", "CC312", "CC322", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC312", "CC3163", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3161", "CC3162", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3163", "CC3161", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3163", "CC312", "CC312", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA2", "CC3263", "CC3161", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3161", "CC3163", "CC321", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3163", "CC331", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3163", "CC2O2", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3261", "CC3062", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC321", "CC311C", "CC321C", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC321", "CC3163", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC3261", "CC3062", "CC2O2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC3261", "CC3161", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA3", "CC331", "CC3163", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"CC2O2", "CC311", "CC331", "HCA3", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"CC2O2", "CC301", "CC331", "HCA3", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"CC312", "CC312", "CC312", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3163", "CC312", "CC312", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC312", "CC312", "CC322", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC322", "CC312", "CC322", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC321C", "CC311C", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC321C", "CC311D", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321D", "CC321C", "CC311C", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321", "CC311C", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC311C", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC311C", "CC321D", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321D", "CC311C", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC331", "CC311", "CC331", "HCA3", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"CC311C", "CC321C", "CC321C", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC311C", "CC321C", "CC321D", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC321", "CC321", "CC321", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC331", "CC321", "CC321", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC321C", "CC321C", "CC321C", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC321C", "CC321C", "CC321D", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC321D", "CC321C", "CC321C", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC311D", "CC321C", "CC321C", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC321", "CC321", "CC331", "HCA3", "0.16", "3", "0.0", "par27 X CTL2 CTL3 X"}, {"CC2O2", "CC321", "CC331", "HCA3", "0.16", "3", "0.0", "par27 X CTL2 CTL3 X"}, {"HCP1", "NC2D1", "CC3161", "CC3161", "0.00", "1", "0.0", "par22 H NH1 CT1 CT1"}, {"HCP1", "NC2D1", "CC3161", "CC3162", "0.00", "1", "0.0", "par22 H NH1 CT1 CT1"}, {"HCP1", "NC2D1", "CC3161", "CC3163", "0.00", "1", "0.0", "par22 H NH1 CT1 CT1"}, {"HCP1", "NC2D1", "CC311", "CC331", "0.00", "1", "0.00", "par22 H NH1 CT1 CT3"}, {"HCP1", "NC2D1", "CC2O1", "CC331", "2.50", "2", "180.0", "par22 H NH1 C CT3"}, {"HCP1", "NC2D1", "CC3161", "HCA1", "0.00", "1", "0.0", "par22 HB CT1 NH1 H"}, {"HCP1", "NC2D1", "CC311", "HCA1", "0.00", "1", "0.0", "par22 HB CT1 NH1 H"}, {"HCP1", "NC2D1", "CC331", "HCA3", "0.00", "3", "0.0", "par22 HA CT3 NH1 H"}, {"HCP1", "NC2D1", "CC2O1", "OC2D1", "2.50", "2", "180.0", "par22 O C NH1 H"}, {"CC2O1", "NC2D1", "CC3161", "HCA1", "0.00", "1", "0.0", "par22 HB CT1 NH1 C"}, {"CC2O1", "NC2D1", "CC311", "HCA1", "0.00", "1", "0.0", "par22 HB CT1 NH1 C"}, {"CC2O1", "NC2D1", "CC331", "HCA3", "0.00", "3", "0.0", "par22 HA CT3 NH1 C"}, {"CC312", "CC322", "OC311", "HCP1", "0.35", "1", "0.0", "erh n=6 polyol"}, {"CC312", "CC322", "OC311", "HCP1", "0.37", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC322", "OC311", "HCP1", "0.19", "3", "180.0", "C2-C1-O1-HO1"}, {"CC322", "CC312", "OC311", "HCP1", "0.35", "1", "0.0", "erh n=6 polyol"}, {"CC322", "CC312", "OC311", "HCP1", "0.37", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC322", "CC312", "OC311", "HCP1", "0.19", "3", "180.0", "C1-C2-O2-HO2"}, {"CC312", "CC312", "OC311", "HCP1", "0.35", "1", "0.0", "erh n=6 polyol"}, {"CC312", "CC312", "OC311", "HCP1", "0.37", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "OC311", "HCP1", "0.19", "3", "180.0", "C2-C3-O3-HO3"}, {"CC2O2", "CC301", "OC311", "HCP1", "0.82", "3", "180.0", "og amol mp2/ccpvtz"}, {"CC2O2", "CC3062", "OC311", "HCP1", "0.82", "3", "180.0", "from CC2O2 CC301 OC311 HCP1"}, {"HCP1", "OC311", "CC301", "CC331", "0.24", "3", "0.0", "og ethanol"}, {"HCP1", "OC311", "CC301", "CC331", "0.14", "2", "0.0", " "}, {"HCP1", "OC311", "CC301", "CC331", "1.13", "1", "0.0", " "}, {"HCP1", "OC311M", "CC321", "CC331", "0.24", "3", "0.0", "og ethanol"}, {"HCP1", "OC311M", "CC321", "CC331", "0.14", "2", "0.0", " "}, {"HCP1", "OC311M", "CC321", "CC331", "1.13", "1", "0.0", " "}, {"HCP1", "OC311M", "CC311", "CC331", "0.24", "3", "0.0", "og ethanol"}, {"HCP1", "OC311M", "CC311", "CC331", "0.14", "2", "0.0", " "}, {"HCP1", "OC311M", "CC311", "CC331", "1.13", "1", "0.0", " "}, {"HCP1M", "OC311M", "CC321", "CC321", "0.40", "1", "180.0", "og ethylene glycol combo_star"}, {"HCP1M", "OC311M", "CC321", "CC321", "0.01", "2", "0.0", "*** NOT suitable for"}, {"HCP1M", "OC311M", "CC321", "CC321", "0.26", "3", "0.0", "*** HO-C-C-C- type alcohols"}, {"OC311", "CC301", "OC301", "CC331", "0.41", "1", "180.0", "from"}, {"OC311", "CC301", "OC301", "CC331", "0.89", "2", "0.0", "CC3163 OC3C61 CC3162 OC311"}, {"OC311", "CC301", "OC301", "CC331", "0.05", "3", "0.0", " "}, {"CC321C", "OC3C61", "CC311D", "OC301", "0.62", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC321C", "OC3C61", "CC311D", "OC301", "1.54", "2", "0.0", "MCSA fit"}, {"CC321C", "OC3C61", "CC311D", "OC301", "0.48", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321C", "OC3C61", "CC311D", "OC302", "0.62", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC321C", "OC3C61", "CC311D", "OC302", "1.54", "2", "0.0", "MCSA fit"}, {"CC321C", "OC3C61", "CC311D", "OC302", "0.48", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3163", "OC3C61", "CC3162", "OC301", "0.41", "1", "180.0", "og from"}, {"CC3163", "OC3C61", "CC3162", "OC301", "0.89", "2", "0.0", "CC3163 OC3C61 CC3162 OC311"}, {"CC3163", "OC3C61", "CC3162", "OC301", "0.05", "3", "0.0", " "}, {"CC3163", "OC3C61", "CC3162", "OC302", "0.41", "1", "180.0", "og from"}, {"CC3163", "OC3C61", "CC3162", "OC302", "0.89", "2", "0.0", "CC3163 OC3C61 CC3162 OC311"}, {"CC3163", "OC3C61", "CC3162", "OC302", "0.05", "3", "0.0", " "}, {"CC331", "OC301", "CC311D", "OC3C61", "0.14", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC331", "OC301", "CC311D", "OC3C61", "0.97", "2", "0.0", "MCSA fit"}, {"CC331", "OC301", "CC311D", "OC3C61", "0.11", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC331", "OC301", "CC3162", "OC3C61", "0.14", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC331", "OC301", "CC3162", "OC3C61", "0.97", "2", "0.0", "MCSA fit"}, {"CC331", "OC301", "CC3162", "OC3C61", "0.11", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321", "OC301", "CC3162", "OC3C61", "0.14", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC321", "OC301", "CC3162", "OC3C61", "0.97", "2", "0.0", "MCSA fit"}, {"CC321", "OC301", "CC3162", "OC3C61", "0.11", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311D", "OC302", "CC311D", "OC3C61", "0.53", "1", "0.0", "og THP-1-O-1-THP"}, {"CC311D", "OC302", "CC311D", "OC3C61", "0.74", "2", "0.0", "MCSA fit"}, {"CC311D", "OC302", "CC311D", "OC3C61", "0.16", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "OC302", "CC3162", "OC3C61", "0.53", "1", "0.0", "og THP-1-O-1-THP"}, {"CC3162", "OC302", "CC3162", "OC3C61", "0.74", "2", "0.0", "MCSA fit"}, {"CC3162", "OC302", "CC3162", "OC3C61", "0.16", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311C", "OC301", "CC311D", "OC3C61", "0.05", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC311C", "OC301", "CC311D", "OC3C61", "0.91", "2", "0.0", "MCSA fit"}, {"CC311C", "OC301", "CC311D", "OC3C61", "1.27", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "OC301", "CC3162", "OC3C61", "0.05", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC3161", "OC301", "CC3162", "OC3C61", "0.91", "2", "0.0", "MCSA fit"}, {"CC3161", "OC301", "CC3162", "OC3C61", "1.27", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"HCP1", "OC311", "CC301", "OC301", "1.55", "1", "0.0", "HCP1 OC311 CC3162 OC3C61"}, {"HCP1", "OC311", "CC301", "OC301", "1.17", "2", "0.0", " "}, {"HCP1", "OC311", "CC301", "OC301", "1.07", "3", "0.0", " "}, {"CC3163", "CC321", "OC311", "HCP1", "0.29", "1", "0.0", " "}, {"CC3163", "CC321", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3163", "CC321", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"CC3161", "CC3162", "OC311", "HCP1", "0.29", "1", "0.0", " "}, {"CC3161", "CC3162", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3161", "CC3162", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"HCP1", "OC311", "CC3162", "OC3C61", "1.55", "1", "0.0", " "}, {"HCP1", "OC311", "CC3162", "OC3C61", "1.17", "2", "0.0", " "}, {"HCP1", "OC311", "CC3162", "OC3C61", "1.07", "3", "0.0", " "}, {"CC3162", "CC3161", "OC311", "HCP1", "0.29", "1", "0.0", " "}, {"CC3162", "CC3161", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3162", "CC3161", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"CC3161", "CC3161", "OC311", "HCP1", "0.29", "1", "0.0", " "}, {"CC3161", "CC3161", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3161", "CC3161", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"CC3163", "CC3161", "OC311", "HCP1", "0.29", "1", "0.0", " "}, {"CC3163", "CC3161", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3163", "CC3161", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"OC311", "CC3161", "CC3162", "OC3C61", "2.75", "1", "180.0", " "}, {"OC311", "CC3161", "CC3162", "OC3C61", "0.26", "2", "180.0", " "}, {"OC311", "CC3161", "CC3162", "OC3C61", "0.10", "3", "0.0", " "}, {"CC3163", "OC3C61", "CC3162", "OC311", "0.41", "1", "180.0", " "}, {"CC3163", "OC3C61", "CC3162", "OC311", "0.89", "2", "0.0", " "}, {"CC3163", "OC3C61", "CC3162", "OC311", "0.05", "3", "0.0", " "}, {"OC311", "CC3161", "CC3163", "OC3C61", "1.36", "1", "180.0", " "}, {"OC311", "CC3161", "CC3163", "OC3C61", "0.16", "2", "0.0", " "}, {"OC311", "CC3161", "CC3163", "OC3C61", "1.01", "3", "0.0", " "}, {"OC311", "CC321", "CC3163", "OC3C61", "0.75", "1", "180.0", " "}, {"OC311", "CC321", "CC3163", "OC3C61", "0.17", "2", "0.0", " "}, {"OC311", "CC321", "CC3163", "OC3C61", "0.25", "3", "180.0", "og empirical lower barrier by 1.5 kcal"}, {"CC3163", "OC3C61", "CC3062", "OC311", "0.41", "1", "180.0", "CC3163 OC3C61 CC3162 OC311"}, {"CC3163", "OC3C61", "CC3062", "OC311", "0.89", "2", "0.0", " "}, {"CC3163", "OC3C61", "CC3062", "OC311", "0.05", "3", "0.0", " "}, {"HCP1", "OC311", "CC3062", "OC3C61", "1.55", "1", "0.0", "from HCP1 OC311 CC3162 OC3C61"}, {"HCP1", "OC311", "CC3062", "OC3C61", "1.17", "2", "0.0", " "}, {"HCP1", "OC311", "CC3062", "OC3C61", "1.07", "3", "0.0", " "}, {"CC3261", "CC3062", "OC311", "HCP1", "0.29", "1", "0.0", "from CC3161 CC3162 OC311 HCP1"}, {"CC3261", "CC3062", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3261", "CC3062", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"CC3163", "CC312", "OC311", "HCP1", "0.29", "1", "0.0", "from CC3163 CC321 OC311 HCP1"}, {"CC3163", "CC312", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3163", "CC312", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"OC311", "CC312", "CC3163", "OC3C61", "0.75", "1", "180.0", "from OC311 CC321 CC3163 OC3C61"}, {"OC311", "CC312", "CC3163", "OC3C61", "0.17", "2", "0.0", " "}, {"OC311", "CC312", "CC3163", "OC3C61", "0.25", "3", "180.0", " "}, {"CC3261", "CC3161", "OC311", "HCP1", "0.29", "1", "0.0", "from CC3161 CC3161 OC311 HCP1"}, {"CC3261", "CC3161", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3261", "CC3161", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"CC3263", "CC3161", "OC311", "HCP1", "0.29", "1", "0.0", " "}, {"CC3263", "CC3161", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3263", "CC3161", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"CC3263", "OC3C61", "CC3162", "OC311", "0.41", "1", "180.0", " "}, {"CC3263", "OC3C61", "CC3162", "OC311", "0.89", "2", "0.0", " "}, {"CC3263", "OC3C61", "CC3162", "OC311", "0.05", "3", "0.0", " "}, {"OC311", "CC3161", "CC3263", "OC3C61", "1.36", "1", "180.0", " "}, {"OC311", "CC3161", "CC3263", "OC3C61", "0.16", "2", "0.0", " "}, {"OC311", "CC3161", "CC3263", "OC3C61", "1.01", "3", "0.0", " "}, {"CC3161", "CC3161", "OC301", "CC3062", "0.13", "1", "180.0", "CC3161 CC3161 OC301 CC3162"}, {"CC3161", "CC3161", "OC301", "CC3062", "0.25", "2", "180.0", " "}, {"CC3161", "CC3161", "OC301", "CC3062", "0.06", "3", "180.0", " "}, {"CC3161", "OC301", "CC3062", "OC3C61", "0.05", "1", "180.0", "CC3161 OC301 CC3162 OC3C61"}, {"CC3161", "OC301", "CC3062", "OC3C61", "0.91", "2", "0.0", " "}, {"CC3161", "OC301", "CC3062", "OC3C61", "1.27", "3", "180.0", " "}, {"CC3261", "CC3062", "OC301", "CC3161", "0.41", "1", "180.0", "CC3161 CC3162 OC301 CC3161"}, {"CC3261", "CC3062", "OC301", "CC3161", "0.66", "2", "180.0", " "}, {"CC3261", "CC3062", "OC301", "CC3161", "1.60", "3", "0.0", " "}, {"CC3161", "OC301", "CC3062", "CC2O2", "0.284", "3", "0.0", "CC3161 OC301 CC3162 HCA1"}, {"CC3062", "OC301", "CC3161", "HCA1", "0.284", "3", "0.0", "CC3162 OC301 CC3161 HCA1"}, {"OC301", "CC3062", "CC2O2", "OC2D2", "0.64", "2", "180.0", "OC301 CC301 CC2O2 OC2D2"}, {"CC3163", "OC3C61", "CC3062", "OC301", "0.41", "1", "180.0", "CC3163 OC3C61 CC3162 OC301"}, {"CC3163", "OC3C61", "CC3062", "OC301", "0.89", "2", "0.0", " "}, {"CC3163", "OC3C61", "CC3062", "OC301", "0.05", "3", "0.0", " "}, {"HCA2", "CC3261", "CC3062", "OC301", "0.20", "3", "0.0", "HCA1 CC3161 CC3162 OC301"}, {"CC3161", "CC3261", "CC3062", "OC301", "0.20", "3", "0.0", "CC3161 CC3161 CC3162 OC301"}, {"OC301", "CC3161", "CC3161", "OC301", "0.59", "1", "180.0", "OC301 CC3161 CC3162 OC301"}, {"OC301", "CC3161", "CC3161", "OC301", "1.16", "2", "0.0", " "}, {"CC3263", "CC3161", "OC301", "CC3162", "0.13", "1", "180.0", "from CC3163 CC3161 OC301 CC3162"}, {"CC3263", "CC3161", "OC301", "CC3162", "0.25", "2", "180.0", " "}, {"CC3263", "CC3161", "OC301", "CC3162", "0.06", "3", "180.0", " "}, {"OC301", "CC3161", "CC3263", "HCA2", "0.20", "3", "0.0", "from OC301 CC3161 CC3163 HCA1"}, {"OC301", "CC3161", "CC3263", "OC3C61", "1.36", "1", "180.0", "from OC301 CC3161 CC3163 OC3C61"}, {"OC301", "CC3161", "CC3263", "OC3C61", "0.16", "2", "0.0", " "}, {"OC301", "CC3161", "CC3263", "OC3C61", "1.01", "3", "0.0", " "}, {"CC3263", "OC3C61", "CC3162", "OC301", "0.41", "1", "180.0", "from CC3163 OC3C61 CC3162 OC301"}, {"CC3263", "OC3C61", "CC3162", "OC301", "0.89", "2", "0.0", " "}, {"CC3263", "OC3C61", "CC3162", "OC301", "0.05", "3", "0.0", " "}, {"HCA2C2", "CC322C", "CC322C", "HCA2C2", "0.19", "3", "0.0", "4/98, yin and mackerell!from X-CCT2-CCT2-X thf, viv"}, {"CC322C", "CC322C", "CC322C", "HCA2C2", "0.19", "3", "0.0", "4/98, yin and mackerell!from X-CCT2-CCT2-X thf, viv"}, {"OC3C5M", "CC322C", "CC322C", "HCA2C2", "0.19", "3", "0.0", "alkane, 4/98, yin and mackerell!from X-CCT2-CCT2-X thf viv"}, {"CC322C", "CC322C", "CC322C", "CC322C", "0.41", "3", "180.0", "viv 10/4/05 !from CCP2-CCP2-CCP2-CCP2 THF, 05/30/06, viv"}, {"HCA2C2", "CC322C", "OC3C5M", "CC322C", "0.30", "3", "0.0", "THF, 05/30/06, viv"}, {"OC3C5M", "CC322C", "CC322C", "CC322C", "0.00", "3", "0.0", "THF, 05/30/06, viv"}, {"CC322C", "CC322C", "OC3C5M", "CC322C", "0.50", "3", "0.0", "THF, 05/30/06, viv"}, {"CC331", "CC312C", "CC312C", "CC331", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC331", "CC312C", "CC322C", "CC322C", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"CC331", "CC312C", "CC322C", "HCA2C2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"HCA1C2", "CC312C", "CC331", "HCA3", "0.20", "3", "0.0", "par22 X CT1 CT3 X"}, {"CC322C", "CC312C", "CC331", "HCA3", "0.20", "3", "0.0", "par22 X CT1 CT3 X"}, {"OC3C5M", "CC312C", "CC331", "HCA3", "0.20", "3", "0.0", "par22 X CT1 CT3 X"}, {"HCA1C2", "CC312C", "CC322C", "HCA2C2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"CC322C", "CC312C", "CC322C", "HCA2C2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"CC322C", "CC322C", "CC312C", "HCA1C2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"OC3C5M", "CC312C", "CC322C", "HCA2C2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"CC312C", "CC322C", "CC322C", "HCA2C2", "0.19", "3", "0.0", "alkane, 4/98, yin and mackerell!from X-CCT2-CCT2-X thf, viv"}, {"CC312C", "CC322C", "CC322C", "CC322C", "0.41", "3", "180.0", "cpen viv 10/4/05 !from CCP2-CCP2-CCP2-CCP2 THF, 05/30/06, viv;"}, {"CC322C", "CC312C", "CC322C", "CC322C", "0.41", "3", "180.0", "cpen viv 10/4/05 !from CCP2-CCP2-CCP2-CCP2 THF, 05/30/06, viv;"}, {"HCA2C2", "CC322C", "OC3C5M", "CC312C", "0.30", "3", "0.0", "THF, 05/30/06, viv; erh 7/08"}, {"HCA1C2", "CC312C", "OC3C5M", "CC322C", "0.30", "3", "0.0", "THF, 05/30/06, viv; erh 7/08"}, {"OC3C5M", "CC312C", "CC322C", "CC322C", "0.00", "3", "0.0", "THF, 05/30/06, viv; erh 7/08"}, {"CC322C", "CC312C", "OC3C5M", "CC322C", "0.50", "3", "0.0", "THF, 05/30/06, viv; erh 7/08"}, {"CC322C", "CC322C", "OC3C5M", "CC312C", "0.50", "3", "0.0", "THF, 05/30/06, viv; erh 7/08"}, {"CC331", "CC312C", "OC3C5M", "CC322C", "0.30", "3", "0.0", "THF, 05/30/06, viv ! from TF2M viv"}, {"CC312C", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"HCA1C2", "CC312C", "OC301", "CC331", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"OC301", "CC312C", "CC322C", "HCA2C2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC322C", "CC322C", "CC312C", "OC301", "0.20", "3", "0.0", "par27 X CTL2 CTL1 X"}, {"OC301", "CC312C", "OC3C5M", "CC322C", "0.30", "3", "0.0", "THF, 05/30/06, viv"}, {"CC322C", "CC312C", "OC301", "CC331", "0.21", "1", "180.0", "erh OMeTHF patch for model THF"}, {"CC322C", "CC312C", "OC301", "CC331", "0.34", "2", "180.0", "MCSA fit"}, {"CC322C", "CC312C", "OC301", "CC331", "0.74", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC331", "OC301", "CC312C", "OC3C5M", "0.08", "1", "0.0", "erh OMeTHF patch for model THF"}, {"CC331", "OC301", "CC312C", "OC3C5M", "0.76", "2", "0.0", "MCSA fit"}, {"CC331", "OC301", "CC312C", "OC3C5M", "1.18", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3152", "OC311", "HCP1", "1.17", "1", "0.0", "erh aldopentose monosac"}, {"OC3C51", "CC3152", "OC311", "HCP1", "0.85", "2", "0.0", "MCSA fit"}, {"OC3C51", "CC3152", "OC311", "HCP1", "0.37", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3051", "OC311", "HCP1", "0.90", "1", "0.0", "erh ketopentose monosac"}, {"OC3C51", "CC3051", "OC311", "HCP1", "1.14", "2", "0.0", "MCSA fit"}, {"OC3C51", "CC3051", "OC311", "HCP1", "0.11", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3152", "CC3251", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"OC3C51", "CC3051", "CC3251", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"OC3C51", "CC3152", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"OC3C51", "CC3051", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"OC3C51", "CC3153", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"OC3C51", "CC3153", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"OC3C51", "CC3152", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"OC3C51", "CC3051", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"OC311", "CC3152", "CC3251", "HCA2", "0.14", "3", "0.0", "ethanol, par_carb HCA2 CC3263 CC3161 OC311"}, {"OC311", "CC3051", "CC3251", "HCA2", "0.14", "3", "0.0", "ethanol, par_carb HCA2 CC3263 CC3161 OC311"}, {"OC311", "CC3051", "CC321", "HCA2", "0.14", "3", "0.0", "ethanol, par_carb HCA2 CC3263 CC3161 OC311; erh 3/08"}, {"OC311", "CC3151", "CC3251", "HCA2", "0.14", "3", "0.0", "ethanol, par_carb HCA2 CC3263 CC3161 OC311"}, {"OC311", "CC3151", "CC3153", "HCA1", "0.14", "3", "0.0", "ethanol, par_carb HCA1 CC3163 CC3161 OC311"}, {"OC311", "CC3151", "CC3152", "HCA1", "0.14", "3", "0.0", "ethanol, par_carb HCA1 CC3162 CC3161 OC311"}, {"OC311", "CC3151", "CC3151", "HCA1", "0.14", "3", "0.0", "ethanol, par_carb HCA1 CC3161 CC3161 OC311"}, {"OC311", "CC3152", "CC3151", "HCA1", "0.14", "3", "0.0", "ethanol, par_carb HCA1 CC3161 CC3162 OC311"}, {"OC311", "CC3051", "CC3151", "HCA1", "0.14", "3", "0.0", "ethanol, par_carb HCA1 CC3161 CC3162 OC311"}, {"OC311", "CC321", "CC3153", "HCA1", "0.14", "3", "0.0", "ethanol, par_carb HCA1 CC3163 CC321 OC311"}, {"OC3C51", "CC3153", "CC3151", "OC311", "0.14", "1", "0.0", "erh aldopentose monosac"}, {"OC3C51", "CC3153", "CC3151", "OC311", "0.70", "2", "0.0", "MCSA fit"}, {"OC3C51", "CC3153", "CC3151", "OC311", "0.18", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3152", "CC3151", "OC311", "1.26", "1", "180.0", "erh aldopentose monosac"}, {"OC3C51", "CC3152", "CC3151", "OC311", "1.27", "2", "0.0", "MCSA fit"}, {"OC3C51", "CC3152", "CC3151", "OC311", "0.53", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3051", "CC3151", "OC311", "0.32", "1", "180.0", "erh ketopentose monosac"}, {"OC3C51", "CC3051", "CC3151", "OC311", "0.65", "2", "180.0", "MCSA fit"}, {"OC3C51", "CC3051", "CC3151", "OC311", "2.62", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3153", "CC321", "OC311", "1.50", "1", "180.0", "erh aldopentose monosac"}, {"OC3C51", "CC3153", "CC321", "OC311", "0.58", "2", "0.0", "MCSA fit"}, {"OC3C51", "CC3153", "CC321", "OC311", "0.54", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3051", "CC321", "OC311", "0.52", "1", "0.0", "erh ketopentose monosac"}, {"OC3C51", "CC3051", "CC321", "OC311", "1.16", "2", "180.0", "MCSA fit"}, {"OC3C51", "CC3051", "CC321", "OC311", "0.33", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3152", "CC3151", "OC311", "2.87", "1", "180.0", "erh aldopentose monosac"}, {"OC311", "CC3152", "CC3151", "OC311", "0.03", "2", "0.0", "MCSA fit"}, {"OC311", "CC3152", "CC3151", "OC311", "0.23", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3051", "CC3151", "OC311", "0.12", "1", "180.0", "erh ketopentose monosac"}, {"OC311", "CC3051", "CC3151", "OC311", "1.87", "2", "180.0", "MCSA fit"}, {"OC311", "CC3051", "CC3151", "OC311", "1.64", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3151", "CC3151", "OC311", "2.87", "1", "180.0", "erh aldopentose monosac"}, {"OC311", "CC3151", "CC3151", "OC311", "0.03", "2", "0.0", "MCSA fit"}, {"OC311", "CC3151", "CC3151", "OC311", "0.23", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3051", "CC321", "OC311", "0.07", "1", "0.0", "erh ketopentose monosac"}, {"OC311", "CC3051", "CC321", "OC311", "1.99", "2", "180.0", "MCSA fit"}, {"OC311", "CC3051", "CC321", "OC311", "1.72", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3152", "OC3C51", "CC3153", "0.76", "1", "180.0", "erh aldopentose monosac"}, {"OC311", "CC3152", "OC3C51", "CC3153", "1.25", "2", "0.0", "MCSA fit"}, {"OC311", "CC3152", "OC3C51", "CC3153", "0.48", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3051", "OC3C51", "CC3153", "0.19", "1", "180.0", "erh ketopentose monosac"}, {"OC311", "CC3051", "OC3C51", "CC3153", "2.85", "2", "180.0", "MCSA fit"}, {"OC311", "CC3051", "OC3C51", "CC3153", "0.86", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "CC3251", "CC3151", "CC3153", "1.83", "3", "0.0", "erh deoxy aldopentose MCSA fit"}, {"CC3051", "CC3251", "CC3151", "CC3153", "1.83", "3", "0.0", "erh xfer from deoxyaldopentose"}, {"CC3152", "CC3151", "CC3151", "CC3153", "0.64", "3", "180.0", "erh aldopentose MCSA fit"}, {"CC3051", "CC3151", "CC3151", "CC3153", "2.37", "3", "0.0", "erh ketopentose MCSA fit"}, {"CC3251", "CC3151", "CC3153", "CC321", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3151", "CC3151", "CC3153", "CC321", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3151", "CC3151", "CC3051", "CC321", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3152", "CC3251", "CC3151", "OC311", "0.39", "1", "0.0", "erh deoxy aldopentose monosac"}, {"CC3152", "CC3251", "CC3151", "OC311", "1.20", "2", "0.0", "MCSA fit"}, {"CC3152", "CC3251", "CC3151", "OC311", "1.42", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "CC3251", "CC3151", "OC311", "0.39", "1", "0.0", "erh deoxy aldopentose monosac"}, {"CC3051", "CC3251", "CC3151", "OC311", "1.20", "2", "0.0", "transferred"}, {"CC3051", "CC3251", "CC3151", "OC311", "1.42", "3", "180.0", " "}, {"CC3153", "CC3151", "CC3151", "OC311", "0.01", "1", "180.0", "erh aldopentose monosac"}, {"CC3153", "CC3151", "CC3151", "OC311", "0.72", "2", "0.0", "MCSA fit"}, {"CC3153", "CC3151", "CC3151", "OC311", "0.73", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "CC3151", "CC3151", "OC311", "0.81", "1", "180.0", "erh aldopentose monosac"}, {"CC3152", "CC3151", "CC3151", "OC311", "1.07", "2", "0.0", "MCSA fit"}, {"CC3152", "CC3151", "CC3151", "OC311", "0.11", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "CC3151", "CC3151", "OC311", "2.07", "1", "0.0", "erh ketopentose monosac"}, {"CC3051", "CC3151", "CC3151", "OC311", "2.13", "2", "0.0", "MCSA fit"}, {"CC3051", "CC3151", "CC3151", "OC311", "2.71", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3251", "CC3152", "OC311", "0.56", "1", "180.0", "erh deoxy aldopentose monosac"}, {"CC3151", "CC3251", "CC3152", "OC311", "0.30", "2", "180.0", "MCSA fit"}, {"CC3151", "CC3251", "CC3152", "OC311", "0.35", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3251", "CC3051", "OC311", "0.56", "1", "180.0", "erh deoxy aldopentose monosac"}, {"CC3151", "CC3251", "CC3051", "OC311", "0.30", "2", "180.0", "transferred"}, {"CC3151", "CC3251", "CC3051", "OC311", "0.35", "3", "180.0", " "}, {"CC3151", "CC3151", "CC3152", "OC311", "0.11", "1", "180.0", "erh aldopentose monosac"}, {"CC3151", "CC3151", "CC3152", "OC311", "0.66", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3151", "CC3152", "OC311", "0.02", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3151", "CC3051", "OC311", "2.23", "1", "0.0", "erh ketopentose monosac"}, {"CC3151", "CC3151", "CC3051", "OC311", "3.00", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3151", "CC3051", "OC311", "0.88", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3153", "CC321", "OC311", "0.01", "1", "0.0", "erh aldopentose monosac"}, {"CC3151", "CC3153", "CC321", "OC311", "0.14", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3153", "CC321", "OC311", "0.70", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3051", "CC321", "OC311", "1.59", "1", "0.0", "erh ketopentose monosac"}, {"CC3151", "CC3051", "CC321", "OC311", "0.95", "2", "180.0", "MCSA fit"}, {"CC3151", "CC3051", "CC321", "OC311", "1.95", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321", "CC3153", "CC3151", "OC311", "0.76", "1", "180.0", "erh aldopentose monosac"}, {"CC321", "CC3153", "CC3151", "OC311", "0.40", "2", "180.0", "MCSA fit"}, {"CC321", "CC3153", "CC3151", "OC311", "0.40", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321", "CC3051", "CC3151", "OC311", "0.94", "1", "0.0", "erh ketopentose monosac"}, {"CC321", "CC3051", "CC3151", "OC311", "1.59", "2", "180.0", "MCSA fit"}, {"CC321", "CC3051", "CC3151", "OC311", "0.84", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3151", "CC3153", "OC3C51", "1.24", "3", "0.0", "erh aldopentose monosac MCSA"}, {"CC3151", "CC3151", "CC3152", "OC3C51", "1.24", "3", "0.0", "erh aldopentose monosac MCSA"}, {"CC3251", "CC3151", "CC3153", "OC3C51", "0.94", "3", "0.0", "erh deoxy aldopentose MCSA"}, {"CC3151", "CC3251", "CC3152", "OC3C51", "0.94", "3", "0.0", "erh deoxy aldopentose MCSA"}, {"CC3151", "CC3251", "CC3051", "OC3C51", "0.94", "3", "0.0", "erh deoxy aldopentose transfer"}, {"CC3151", "CC3151", "CC3051", "OC3C51", "0.62", "3", "0.0", "erh ketopentose monosac MCSA"}, {"CC3251", "CC3152", "OC311", "HCP1", "0.59", "1", "0.0", "erh deoxy aldopentose monosac"}, {"CC3251", "CC3152", "OC311", "HCP1", "0.38", "2", "0.0", "MCSA fit"}, {"CC3251", "CC3152", "OC311", "HCP1", "0.13", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3251", "CC3051", "OC311", "HCP1", "0.59", "1", "0.0", "erh deoxy aldopentose monosac"}, {"CC3251", "CC3051", "OC311", "HCP1", "0.38", "2", "0.0", "transferred"}, {"CC3251", "CC3051", "OC311", "HCP1", "0.13", "3", "0.0", " "}, {"CC321", "CC3051", "OC311", "HCP1", "0.40", "1", "180.0", "erh ketopentose monosac"}, {"CC321", "CC3051", "OC311", "HCP1", "0.48", "2", "0.0", "MCSA fit"}, {"CC321", "CC3051", "OC311", "HCP1", "0.19", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3152", "OC311", "HCP1", "0.29", "1", "0.0", "erh aldopentose monosac"}, {"CC3151", "CC3152", "OC311", "HCP1", "0.55", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3152", "OC311", "HCP1", "0.08", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3051", "OC311", "HCP1", "0.40", "1", "180.0", "erh ketopentose monosac"}, {"CC3151", "CC3051", "OC311", "HCP1", "0.48", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3051", "OC311", "HCP1", "0.19", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3151", "OC311", "HCP1", "0.29", "1", "0.0", "erh aldopentose monosac"}, {"CC3151", "CC3151", "OC311", "HCP1", "0.55", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3151", "OC311", "HCP1", "0.08", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "CC3151", "OC311", "HCP1", "0.29", "1", "0.0", "erh aldopentose monosac"}, {"CC3152", "CC3151", "OC311", "HCP1", "0.55", "2", "0.0", "MCSA fit"}, {"CC3152", "CC3151", "OC311", "HCP1", "0.08", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "CC3151", "OC311", "HCP1", "0.40", "1", "180.0", "erh ketopentose monosac"}, {"CC3051", "CC3151", "OC311", "HCP1", "0.48", "2", "0.0", "MCSA fit"}, {"CC3051", "CC3151", "OC311", "HCP1", "0.19", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3251", "CC3151", "OC311", "HCP1", "0.59", "1", "0.0", "erh deoxy aldopentose monosac"}, {"CC3251", "CC3151", "OC311", "HCP1", "0.38", "2", "0.0", "MCSA fit"}, {"CC3251", "CC3151", "OC311", "HCP1", "0.13", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "CC3151", "OC311", "HCP1", "0.29", "1", "0.0", "erh aldopentose monosac"}, {"CC3153", "CC3151", "OC311", "HCP1", "0.55", "2", "0.0", "MCSA fit"}, {"CC3153", "CC3151", "OC311", "HCP1", "0.08", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "CC321", "OC311", "HCP1", "0.12", "1", "0.0", "erh aldopentose monosac"}, {"CC3153", "CC321", "OC311", "HCP1", "0.42", "2", "0.0", "MCSA fit"}, {"CC3153", "CC321", "OC311", "HCP1", "0.29", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "CC321", "OC311", "HCP1", "0.40", "1", "180.0", "erh ketopentose monosac"}, {"CC3051", "CC321", "OC311", "HCP1", "0.48", "2", "0.0", "MCSA fit"}, {"CC3051", "CC321", "OC311", "HCP1", "0.19", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "CC3251", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT2 CT1 X"}, {"CC3051", "CC3251", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT2 CT1 X"}, {"CC3151", "CC3251", "CC3152", "HCA1", "0.20", "3", "0.0", "par22 X CT2 CT1 X"}, {"CC3151", "CC3151", "CC3152", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3151", "CC3151", "CC3153", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3151", "CC3153", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT2 CT1 X"}, {"CC3151", "CC3152", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT2 CT1 X erh 3/08"}, {"CC3151", "CC3051", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT2 CT1 X erh 3/08"}, {"CC3153", "CC3151", "CC3251", "HCA2", "0.20", "3", "0.0", "par22 X CT2 CT1 X"}, {"CC3153", "CC3151", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3152", "CC3151", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3051", "CC3151", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC321", "CC3153", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC321", "CC3152", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X erh3/08"}, {"CC321", "CC3051", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X erh3/08"}, {"CC3251", "CC3151", "CC3153", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3152", "OC3C51", "CC3153", "CC3151", "1.00", "3", "0.0", "erh aldopentose MCSA"}, {"CC3153", "OC3C51", "CC3152", "CC3151", "1.00", "3", "0.0", "erh aldopentose MCSA"}, {"CC3153", "OC3C51", "CC3152", "CC3251", "0.45", "3", "0.0", "erh deoxy aldopentose MCSA"}, {"CC3153", "OC3C51", "CC3051", "CC3151", "0.61", "3", "0.0", "erh ketopentose MCSA"}, {"CC3153", "OC3C51", "CC3051", "CC3251", "0.61", "3", "0.0", "erh from ketopentose"}, {"CC3051", "OC3C51", "CC3153", "CC3151", "0.43", "3", "0.0", "erh ketopentose MCSA"}, {"CC3152", "OC3C51", "CC3153", "CC321", "0.30", "3", "0.0", "TF2M par_carb CC331C CC322C OC3C5M CC322C"}, {"CC3051", "OC3C51", "CC3153", "CC321", "2.58", "1", "0.0", "erh ketopentose monosac"}, {"CC3051", "OC3C51", "CC3153", "CC321", "0.24", "2", "180.0", "MCSA fit"}, {"CC3051", "OC3C51", "CC3153", "CC321", "0.36", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "OC3C51", "CC3051", "CC321", "0.24", "1", "0.0", "erh ketopentose monosac"}, {"CC3153", "OC3C51", "CC3051", "CC321", "3.00", "2", "180.0", "MCSA fit"}, {"CC3153", "OC3C51", "CC3051", "CC321", "1.38", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "OC3C51", "CC3153", "HCA1", "0.30", "3", "0.0", "THF par_carb HCA2C2 CC322C OC3C5M CC322C"}, {"CC3051", "OC3C51", "CC3153", "HCA1", "0.30", "3", "0.0", "THF par_carb HCA2C2 CC322C OC3C5M CC322C"}, {"CC3153", "OC3C51", "CC3152", "HCA1", "0.30", "3", "0.0", "THF par_carb HCA2C2 CC322C OC3C5M CC322C"}, {"HCA1", "CC3152", "CC3251", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"HCA2", "CC3251", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT2 CT1 X"}, {"HCA1", "CC3151", "CC3153", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"HCA1", "CC3151", "CC3152", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"HCA1", "CC3151", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"HCA1", "CC3153", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"HCP1", "OC311", "CC3152", "HCA1", "0.18", "3", "0.0", "methanol par_carb HCP1 OC311 CC3162 HCA1"}, {"HCP1", "OC311", "CC3151", "HCA1", "0.18", "3", "0.0", "methanol par_carb HCP1 OC311 CC3161 HCA1"}, {"OC301", "CC3152", "CC3151", "OC311", "2.87", "1", "180.0", "erh aldopentose monosac"}, {"OC301", "CC3152", "CC3151", "OC311", "0.03", "2", "0.0", "MCSA fit"}, {"OC301", "CC3152", "CC3151", "OC311", "0.23", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"HCA1", "CC3152", "OC301", "CC331", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"OC301", "CC3152", "CC3151", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3151", "CC3151", "CC3152", "OC301", "0.11", "1", "180.0", "erh aldopentose monosac"}, {"CC3151", "CC3151", "CC3152", "OC301", "0.66", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3151", "CC3152", "OC301", "0.02", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3151", "CC3051", "OC301", "2.23", "1", "0.0", "erh ketopentose monosac"}, {"CC3151", "CC3151", "CC3051", "OC301", "3.00", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3151", "CC3051", "OC301", "0.88", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC301", "CC3152", "OC3C51", "CC3153", "0.76", "1", "180.0", "erh aldopentose monosac"}, {"OC301", "CC3152", "OC3C51", "CC3153", "1.25", "2", "0.0", "MCSA fit"}, {"OC301", "CC3152", "OC3C51", "CC3153", "0.48", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "OC3C51", "CC3051", "OC301", "0.19", "1", "180.0", "erh ketopentose monosac"}, {"CC3153", "OC3C51", "CC3051", "OC301", "2.85", "2", "180.0", "MCSA fit"}, {"CC3153", "OC3C51", "CC3051", "OC301", "0.86", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3152", "OC301", "CC331", "0.21", "1", "180.0", "erh OMeTHF patch for model THF"}, {"CC3151", "CC3152", "OC301", "CC331", "0.34", "2", "180.0", "MCSA fit"}, {"CC3151", "CC3152", "OC301", "CC331", "0.74", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC331", "OC301", "CC3152", "OC3C51", "0.08", "1", "0.0", "erh OMeTHF patch for model THF"}, {"CC331", "OC301", "CC3152", "OC3C51", "0.76", "2", "0.0", "MCSA fit"}, {"CC331", "OC301", "CC3152", "OC3C51", "1.18", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321D", "CC311D", "OC30P", "PC", "0.02", "3", "180.0", " "}, {"CC3161", "CC3162", "OC30P", "PC", "0.02", "3", "180.0", " "}, {"CC3161", "CC3161", "OC30P", "PC", "0.02", "3", "180.0", " "}, {"CC321C", "CC311D", "OC30P", "PC", "0.02", "3", "180.0", " "}, {"CC311D", "CC311D", "OC30P", "PC", "0.02", "3", "180.0", " "}, {"HCA1", "CC311D", "OC30P", "PC", "0.284", "3", "0.0", "dmp,eps, H-C3'-O3'-P || from the par_all27_na.prm"}, {"HCA1", "CC3161", "OC30P", "PC", "0.284", "3", "0.0", "dmp,eps, H-C3'-O3'-P || from the par_all27_na.prm"}, {"HCA1", "CC3162", "OC30P", "PC", "0.284", "3", "0.0", "dmp,eps, H-C3'-O3'-P || from the par_all27_na.prm"}, {"OC3C61", "CC311D", "OC30P", "PC", "0.38", "2", "0.0", " "}, {"OC3C61", "CC311D", "OC30P", "PC", "0.41", "3", "180.0", " "}, {"OC3C61", "CC3162", "OC30P", "PC", "0.38", "2", "0.0", " "}, {"OC3C61", "CC3162", "OC30P", "PC", "0.41", "3", "180.0", " "}, {"HCA1", "CC311D", "CC311D", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC321D", "CC311D", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC3C61", "CC311D", "CC311D", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC3C61", "CC321D", "CC311D", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321D", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2"}, {"CC311D", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC311D", "CC311D", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC311D", "CC321D", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC311D", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC311D", "CC311D", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321D", "CC311D", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"OC3C61", "CC311D", "CC311D", "CC321C", "0.31", "3", "180.0", "og/sng thp"}, {"OC3C61", "CC321D", "CC311D", "CC321C", "0.31", "3", "180.0", "og/sng thp"}, {"CC311D", "CC311D", "OC3C61", "CC321C", "0.20", "3", "0.0", "og/sng thp"}, {"CC311D", "CC321D", "OC3C61", "CC321C", "0.20", "3", "0.0", "og/sng thp"}, {"HCA1", "CC3161", "CC3162", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3162", "CC3161", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3163", "CC3161", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3161", "CC3161", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC311D", "CC311D", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC321C", "CC311D", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC321D", "CC311D", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC311C", "CC321", "OC30P", "0.00", "6", "180.00", " "}, {"HCA1", "CC3163", "CC321", "OC30P", "0.00", "6", "180.00", " "}, {"CC321C", "CC311C", "CC321", "OC30P", "0.43", "3", "0.0", " "}, {"CC3161", "CC3163", "CC321", "OC30P", "0.43", "3", "0.0", " "}, {"CC3161", "CC3161", "CC3162", "OC30P", "1.76", "1", "0.0", " "}, {"CC3161", "CC3161", "CC3162", "OC30P", "2.56", "2", "0.0", " "}, {"CC3161", "CC3161", "CC3162", "OC30P", "0.01", "3", "0.0", " "}, {"CC321C", "CC321C", "CC311D", "OC30P", "1.76", "1", "0.0", " "}, {"CC321C", "CC321C", "CC311D", "OC30P", "2.56", "2", "0.0", " "}, {"CC321C", "CC321C", "CC311D", "OC30P", "0.01", "3", "0.0", " "}, {"CC3161", "CC3161", "CC3161", "OC30P", "1.76", "1", "0.0", " "}, {"CC3161", "CC3161", "CC3161", "OC30P", "2.56", "2", "0.0", " "}, {"CC3161", "CC3161", "CC3161", "OC30P", "0.01", "3", "0.0", " "}, {"CC3162", "CC3161", "CC3161", "OC30P", "1.76", "1", "0.0", " "}, {"CC3162", "CC3161", "CC3161", "OC30P", "2.56", "2", "0.0", " "}, {"CC3162", "CC3161", "CC3161", "OC30P", "0.01", "3", "0.0", " "}, {"CC3163", "CC3161", "CC3161", "OC30P", "1.76", "1", "0.0", " "}, {"CC3163", "CC3161", "CC3161", "OC30P", "2.56", "2", "0.0", " "}, {"CC3163", "CC3161", "CC3161", "OC30P", "0.01", "3", "0.0", " "}, {"CC321C", "CC311D", "CC311D", "OC30P", "1.76", "1", "0.0", " "}, {"CC321C", "CC311D", "CC311D", "OC30P", "2.56", "2", "0.0", " "}, {"CC321C", "CC311D", "CC311D", "OC30P", "0.01", "3", "0.0", " "}, {"CC321C", "OC3C61", "CC311D", "OC30P", "2.44", "3", "180.0", " "}, {"CC3163", "OC3C61", "CC3162", "OC30P", "2.44", "3", "180.0", " "}, {"OC30P", "CC3161", "CC3161", "OC311", "2.50", "1", "180.0", " "}, {"OC30P", "CC3161", "CC3161", "OC311", "2.00", "2", "0.0", " "}, {"OC30P", "CC3161", "CC3161", "OC311", "2.50", "3", "0.0", " "}, {"OC30P", "CC311D", "CC3161", "OC311", "2.50", "1", "180.0", " "}, {"OC30P", "CC311D", "CC3161", "OC311", "2.00", "2", "0.0", " "}, {"OC30P", "CC311D", "CC3161", "OC311", "2.50", "3", "0.0", " "}, {"OC30P", "CC3162", "CC3161", "OC311", "2.50", "1", "180.0", " "}, {"OC30P", "CC3162", "CC3161", "OC311", "2.00", "2", "0.0", " "}, {"OC30P", "CC3162", "CC3161", "OC311", "2.50", "3", "0.0", " "}, {"OC30P", "CC3161", "CC3162", "OC301", "2.50", "1", "180.0", " "}, {"OC30P", "CC3161", "CC3162", "OC301", "2.00", "2", "0.0", " "}, {"OC30P", "CC3161", "CC3162", "OC301", "2.50", "3", "0.0", " "}, {"OC30P", "CC3161", "CC3161", "OC301", "2.50", "1", "180.0", " "}, {"OC30P", "CC3161", "CC3161", "OC301", "2.00", "2", "0.0", " "}, {"OC30P", "CC3161", "CC3161", "OC301", "2.50", "3", "0.0", " "}, {"OC30P", "CC3161", "CC3161", "OC30P", "1.27", "3", "0.0", " "}, {"OC30P", "CC311D", "CC311D", "OC30P", "1.27", "3", "0.0", " "}, {"OC3C61", "CC311D", "CC311D", "OC30P", "0.61", "3", "0.0", " "}, {"OC3C61", "CC321D", "CC311D", "OC30P", "0.61", "3", "0.0", " "}, {"OC3C61", "CC3162", "CC3161", "OC30P", "0.61", "3", "0.0", " "}, {"OC3C61", "CC3163", "CC3161", "OC30P", "0.61", "3", "0.0", " "}, {"OC3C61", "CC311C", "CC321", "OC30P", "0.06", "1", "0.0", " "}, {"OC3C61", "CC311C", "CC321", "OC30P", "0.78", "2", "0.0", " "}, {"OC3C61", "CC311C", "CC321", "OC30P", "0.74", "3", "180.0", " "}, {"OC3C61", "CC3163", "CC321", "OC30P", "0.06", "1", "0.0", " "}, {"OC3C61", "CC3163", "CC321", "OC30P", "0.78", "2", "0.0", " "}, {"OC3C61", "CC3163", "CC321", "OC30P", "0.74", "3", "180.0", " "}, {"CC3161", "OC30P", "PC", "OC2DP", "0.33", "3", "0.0", " "}, {"CC3162", "OC30P", "PC", "OC2DP", "0.33", "3", "0.0", " "}, {"CC311D", "OC30P", "PC", "OC2DP", "0.33", "3", "0.0", " "}, {"CC311D", "OC30P", "PC", "OC312", "1.45", "2", "0.0", " "}, {"OC312", "PC", "OC312", "HCP1", "0.30", "3", "0.00", "terminal phosphate"}, {"OC30P", "PC", "OC312", "HCP1", "0.30", "3", "0.00", "terminal phosphate"}, {"OC2DP", "PC", "OC312", "HCP1", "0.30", "3", "0.00", "terminal phosphate"}, {"CC3161", "OC30P", "PC", "OC312", "1.45", "2", "0.0", "OC30P PC OC312 1.45 2 0.0"}, {"CC3162", "OC30P", "PC", "OC312", "1.45", "2", "0.0", " "}, {"CC321C", "CC311D", "OC30P", "SC", "0.21", "3", "0.0", " "}, {"CC3162", "CC3161", "OC30P", "SC", "0.21", "3", "0.0", " "}, {"CC3163", "CC3161", "OC30P", "SC", "0.21", "3", "0.0", " "}, {"CC3161", "CC3161", "OC30P", "SC", "0.21", "3", "0.0", " "}, {"HCA1", "CC311D", "OC30P", "SC", "0.00", "3", "0.00", "methylsulfate"}, {"HCA1", "CC3161", "OC30P", "SC", "0.00", "3", "0.00", "methylsulfate"}, {"HCA2", "CC321", "OC30P", "SC", "0.284", "3", "0.0", " "}, {"OC3C61", "CC311D", "OC30P", "SC", "0.76", "1", "0.0", " "}, {"OC3C61", "CC311D", "OC30P", "SC", "0.68", "2", "0.0", " "}, {"OC3C61", "CC311D", "OC30P", "SC", "0.26", "3", "180.0", " "}, {"CC311C", "CC321", "OC30P", "SC", "1.41", "1", "180.0", " "}, {"CC311C", "CC321", "OC30P", "SC", "0.40", "2", "0.0", " "}, {"CC311C", "CC321", "OC30P", "SC", "0.21", "3", "180.0", " "}, {"CC3163", "CC321", "OC30P", "SC", "1.41", "1", "180.0", " "}, {"CC3163", "CC321", "OC30P", "SC", "0.40", "2", "0.0", " "}, {"CC3163", "CC321", "OC30P", "SC", "0.21", "3", "180.0", " "}, {"CC3161", "OC30P", "SC", "OC2DP", "0.17", "3", "0.0", " "}, {"CC311D", "OC30P", "SC", "OC2DP", "0.17", "3", "0.0", " "}, {"CC321", "OC30P", "SC", "OC2DP", "0.17", "3", "0.0", " "}, {"CC321", "CC3163", "CC3161", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC321", "OC301", "CC311D", "HCA1", "0.284", "3", "0.0", "OMeTHP CC331 OC301 CC311D HCA1"}, {"OC301", "CC321", "CC331", "HCA3", "0.20", "3", "0.0", "OC301 CC321 CC3163 HCA1"}, {"CC311D", "OC301", "CC321", "HCA2", "0.284", "3", "0.0", "OMeTHP CC311D OC301 CC331 HCA3"}, {"CC321", "OC301", "CC311D", "OC3C61", "0.36", "1", "180.0", "pr, 1-ethoxy-THP2 QM phi-psi scan"}, {"CC321", "OC301", "CC311D", "OC3C61", "0.52", "2", "0.0", "MCSA fit"}, {"CC321", "OC301", "CC311D", "OC3C61", "0.83", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311D", "OC301", "CC321", "CC331", "0.72", "1", "180.0", "pr, 1-ethoxy-THP2 QM phi-psi scan"}, {"CC311D", "OC301", "CC321", "CC331", "0.34", "2", "180.0", "MCSA fit"}, {"CC311D", "OC301", "CC321", "CC331", "0.12", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321", "OC301", "CC311D", "CC321C", "0.58", "1", "180.0", "pr, 1-ethoxy-THP2 QM phi-psi scan"}, {"CC321", "OC301", "CC311D", "CC321C", "0.69", "2", "180.0", "MCSA fit"}, {"CC321", "OC301", "CC311D", "CC321C", "1.16", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC322C", "CC322C", "CC312D", "OC301", "1.98", "1", "0.0", "pram OMeTHF compound 5 (raman et al)"}, {"CC322C", "CC322C", "CC312D", "OC301", "2.56", "2", "0.0", "MCSA fit"}, {"CC322C", "CC322C", "CC312D", "OC301", "1.80", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC322C", "OC3C5M", "CC312D", "OC301", "1.88", "1", "0.0", "pram OMeTHF compound 5 (raman et al)"}, {"CC322C", "OC3C5M", "CC312D", "OC301", "2.18", "2", "0.0", "MCSA fit"}, {"CC322C", "OC3C5M", "CC312D", "OC301", "0.24", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC322C", "CC312D", "OC301", "CC331", "0.97", "1", "180.0", "pram OMeTHF compound 5 (raman et al)"}, {"CC322C", "CC312D", "OC301", "CC331", "0.44", "3", "180.0", "MCSA fit"}, {"CC331", "OC301", "CC312D", "OC3C5M", "0.98", "2", "0.0", "pram OMeTHF compound 5 (raman et al)"}, {"CC331", "OC301", "CC312D", "OC3C5M", "1.50", "3", "0.0", "MCSA fit"}, {"CC312D", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "OMe-THF CC312C OC301 CC331 HCA3"}, {"HCA1", "CC312D", "OC301", "CC331", "0.284", "3", "0.0", "OMe-THF HCA1C2 CC312C OC301 CC331"}, {"OC301", "CC312D", "CC322C", "HCA2C2", "0.20", "3", "0.0", "OMe-THF OC301 CC312C CC322C HCA2C2"}, {"CC312D", "OC302", "CC311D", "OC3C61", "0.21", "1", "0.0", "pram model compound 1 (raman et al)"}, {"CC312D", "OC302", "CC311D", "OC3C61", "0.86", "2", "0.0", "MCSA fit"}, {"CC312D", "OC302", "CC311D", "OC3C61", "0.35", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311D", "OC302", "CC312D", "OC3C5M", "0.70", "1", "180.0", "pram model compound 1 (raman et al)"}, {"CC311D", "OC302", "CC312D", "OC3C5M", "1.41", "2", "0.0", "MCSA fit"}, {"CC311D", "OC302", "CC312D", "OC3C5M", "0.75", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311D", "OC302", "CC312D", "CC322C", "1.23", "1", "180.0", "pram model compound 1 (raman et al)"}, {"CC311D", "OC302", "CC312D", "CC322C", "0.15", "2", "0.0", "MCSA fit"}, {"CC311D", "OC302", "CC312D", "CC322C", "0.54", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC312D", "OC302", "CC311D", "CC321C", "0.18", "1", "180.0", "pram model compound 1 (raman et al)"}, {"CC312D", "OC302", "CC311D", "CC321C", "0.45", "2", "180.0", "MCSA fit"}, {"CC312D", "OC302", "CC311D", "CC321C", "0.75", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC312D", "OC302", "CC311D", "HCA1", "0.284", "3", "0.0", "CC311D OC302 CC311D HCA1"}, {"CC322C", "CC322C", "CC312D", "OC302", "1.98", "1", "0.0", "pram model compound 5 (raman et al)"}, {"CC322C", "CC322C", "CC312D", "OC302", "2.56", "2", "0.0", "pram model compound 5 (raman et al)"}, {"CC322C", "CC322C", "CC312D", "OC302", "1.80", "3", "0.0", "pram model compound 5 (raman et al)"}, {"CC322C", "OC3C5M", "CC312D", "OC302", "1.88", "1", "0.0", "pram model compound 5 (raman et al)"}, {"CC322C", "OC3C5M", "CC312D", "OC302", "2.18", "2", "0.0", "pram model compound 5 (raman et al)"}, {"CC322C", "OC3C5M", "CC312D", "OC302", "0.24", "3", "0.0", "pram model compound 5 (raman et al)"}, {"OC302", "CC312D", "CC322C", "HCA2C2", "0.20", "3", "0.0", "OMe-THF OC301 CC312C CC322C HCA2C2"}, {"OC3C5M", "CC312D", "CC322C", "HCA2C2", "0.20", "3", "0.0", "THF w/me OC3C5M CC312C CC322C HCA2C2"}, {"OC3C5M", "CC312D", "CC322C", "CC322C", "0.00", "3", "0.0", "THF w/me OC3C5M CC312C CC322C CC322C"}, {"CC322C", "CC322C", "OC3C5M", "CC312D", "0.50", "3", "0.0", "THF w/me CC322C CC322C OC3C5M CC322C"}, {"CC312D", "CC322C", "CC322C", "HCA2C2", "0.19", "3", "0.0", "THF w/me CC312C CC322C CC322C HCA2C2"}, {"CC312D", "CC322C", "CC322C", "CC322C", "0.41", "3", "180.0", "THF w/me CC312C CC322C CC322C CC322C"}, {"HCA1", "CC312D", "OC3C5M", "CC322C", "0.30", "3", "0.0", "THF w/me HCA1C2 CC312C OC3C5M CC322C"}, {"HCA1", "CC312D", "CC322C", "HCA2C2", "0.20", "3", "0.0", "THF w/me HCA1C2 CC312C CC322C HCA2C2"}, {"CC322C", "CC322C", "CC312D", "HCA1", "0.20", "3", "0.0", "THF w/me CC322C CC322C CC312C HCA1C2"}, {"CC322C", "CC312D", "OC3C5M", "CC322C", "0.50", "3", "0.0", "THF w/me CC322C CC312C OC3C5M CC322C"}, {"HCA1", "CC312D", "OC302", "CC311D", "0.284", "3", "0.0", "OMe-THF HCA1C2 CC312C OC301 CC331"}, {"HCA2C2", "CC322C", "OC3C5M", "CC312D", "0.30", "3", "0.0", "THF w/me HCA2C2 CC322C OC3C5M CC312C"}, {"OC3C5M", "CC312C", "CC321", "HCA2", "0.20", "3", "0.0", "COCA-THP2 OC3C61 CC311C CC321 HCA2"}, {"HCA1", "CC312C", "OC3C5M", "CC322C", "0.30", "3", "0.0", "THF w/me HCA1C2 CC312C OC3C5M CC322C"}, {"CC322C", "CC322C", "CC312C", "HCA1", "0.20", "3", "0.0", "THF w/me CC322C CC322C CC312C HCA1C2"}, {"CC322C", "CC312C", "CC321", "HCA2", "0.20", "3", "0.0", "THF w/me CC322C CC312C CC331 HCA3"}, {"HCA2C2", "CC322C", "CC312C", "HCA1", "0.20", "3", "0.0", "THF w/me HCA1C2 CC312C CC322C HCA2C2"}, {"HCA2C2", "CC322C", "CC312C", "CC321", "0.20", "3", "0.0", "THF w/me CC331 CC312C CC322C HCA2C2"}, {"HCA1", "CC312C", "CC321", "HCA2", "0.20", "3", "0.0", "THF w/me HCA1C2 CC312C CC331 HCA3"}, {"HCA1", "CC312C", "CC321", "OC301", "0.20", "3", "0.0", "OC301 CC321 CC3163 HCA1"}, {"CC321", "CC312C", "OC3C5M", "CC322C", "1.17", "3", "180.0", "pram 11/2009, model comp2 (raman et al)"}, {"CC321", "CC312C", "CC322C", "CC322C", "1.92", "3", "180.0", "MCSA fit to (psi=-180 1-D MP2/cc-pVTZ//MP2/6-31G*)"}, {"OC301", "CC321", "CC312C", "OC3C5M", "1.93", "1", "180.0", "COCA-THP2 OC301 CC321 CC311C OC3C61"}, {"OC301", "CC321", "CC312C", "OC3C5M", "0.43", "2", "0.0", " "}, {"OC301", "CC321", "CC312C", "OC3C5M", "0.12", "3", "180.0", " "}, {"CC322C", "CC312C", "CC321", "OC301", "1.10", "1", "180.0", "COCA-THP2 CC322C CC312C CC321 OC301"}, {"CC322C", "CC312C", "CC321", "OC301", "0.07", "2", "180.0", " "}, {"CC322C", "CC312C", "CC321", "OC301", "0.15", "3", "0.0", " "}, {"CC312C", "CC321", "OC301", "CC331", "0.64", "1", "180.0", "COCA-THP2 CC311C CC321 OC301 CC331"}, {"CC312C", "CC321", "OC301", "CC331", "0.03", "2", "180.0", " "}, {"CC312C", "CC321", "OC301", "CC331", "0.61", "3", "0.0", " "}, {"CC322C", "CC312C", "OC303", "CC331", "0.41", "1", "180.0", "pram model compound 6 (raman et al)"}, {"CC322C", "CC312C", "OC303", "CC331", "0.29", "2", "0.0", "MCSA fit"}, {"CC322C", "CC312C", "OC303", "CC331", "0.42", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC303", "CC312C", "CC322C", "OC3C5M", "0.73", "1", "0.0", "pram model compound 6 (raman et al)"}, {"OC303", "CC312C", "CC322C", "OC3C5M", "2.96", "2", "0.0", "MCSA fit"}, {"OC303", "CC312C", "CC322C", "OC3C5M", "1.39", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC312C", "OC303", "CC331", "HCA3", "0.284", "3", "0.0", "CC312C OC301 CC331 HCA3"}, {"HCA1", "CC312C", "OC303", "CC331", "0.284", "3", "0.0", "THF w/me HCA1C2 CC312C OC301 CC331"}, {"CC322C", "CC322C", "CC312C", "OC303", "0.20", "3", "0.0", "CC322C CC322C CC312C OC301"}, {"OC3C5M", "CC322C", "CC312C", "HCA1", "0.20", "3", "0.0", "THF OC3C5M CC312C CC322C HCA2C2"}, {"CC312C", "CC322C", "OC3C5M", "CC322C", "0.50", "3", "0.0", "THF CC322C CC322C OC3C5M CC322C"}, {"OC3C5M", "CC322C", "CC312C", "CC322C", "0.00", "3", "0.0", "THF OC3C5M CC322C CC322C CC322C"}, {"OC3C5M", "CC322C", "CC322C", "CC312C", "0.00", "3", "0.0", "THF OC3C5M CC322C CC322C CC322C"}, {"HCA1", "CC312C", "OC303", "CC311D", "0.284", "3", "0.0", "OMe-THF HCA1C2 CC312C OC301 CC331"}, {"CC312C", "OC303", "CC311D", "HCA1", "0.284", "3", "0.0", "CC311D OC302 CC311D HCA1"}, {"OC303", "CC311D", "CC321C", "CC321C", "0.20", "3", "0.0", "OC301 CC311D CC321C CC321C"}, {"OC303", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "OC301 CC311D CC321C HCA2"}, {"CC321C", "OC3C61", "CC311D", "OC303", "0.62", "1", "0.0", "CC321C OC3C61 CC311D OC301"}, {"CC321C", "OC3C61", "CC311D", "OC303", "1.54", "2", "0.0", " "}, {"CC321C", "OC3C61", "CC311D", "OC303", "0.48", "3", "0.0", " "}, {"OC303", "CC312C", "CC322C", "HCA2C2", "0.20", "3", "0.0", "OC301 CC312C CC322C HCA2C2"}, {"CC312C", "OC303", "CC311D", "OC3C61", "0.08", "1", "0.0", "pram model compound 3 (raman et al)"}, {"CC312C", "OC303", "CC311D", "OC3C61", "0.93", "2", "0.0", "MCSA fit"}, {"CC312C", "OC303", "CC311D", "OC3C61", "0.05", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC312C", "OC303", "CC311D", "CC321C", "0.05", "1", "180.0", "pram model compound 3 (raman et al)"}, {"CC312C", "OC303", "CC311D", "CC321C", "0.38", "2", "180.0", "MCSA fit"}, {"CC312C", "OC303", "CC311D", "CC321C", "0.36", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311D", "OC303", "CC312C", "CC322C", "0.07", "1", "180.0", "pram model compound 3 (raman et al)"}, {"CC311D", "OC303", "CC312C", "CC322C", "0.04", "2", "0.0", "MCSA fit"}, {"CC311D", "OC303", "CC312C", "CC322C", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"HCA1", "CC312D", "OC301", "CC311C", "0.284", "3", "0.0", "OMe-THF HCA1C2 CC312C OC301 CC331"}, {"CC312D", "OC301", "CC311C", "HCA1", "0.284", "3", "0.0", "CC311D OC301 CC311C HCA1"}, {"CC312D", "OC301", "CC311C", "CC321C", "0.12", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC312D", "OC301", "CC311C", "CC321C", "0.03", "2", "180.0", "MCSA fit"}, {"CC312D", "OC301", "CC311C", "CC321C", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311C", "OC301", "CC312D", "OC3C5M", "0.52", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC311C", "OC301", "CC312D", "OC3C5M", "1.50", "2", "0.0", "MCSA fit"}, {"CC311C", "OC301", "CC312D", "OC3C5M", "0.98", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311C", "OC301", "CC312D", "CC322C", "1.19", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC311C", "OC301", "CC312D", "CC322C", "0.16", "2", "180.0", "MCSA fit"}, {"CC311C", "OC301", "CC312D", "CC322C", "0.49", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "OC302", "CC3162", "OC3C61", "0.21", "1", "0.0", "pram model compound 1 (raman et al)"}, {"CC3051", "OC302", "CC3162", "OC3C61", "0.86", "2", "0.0", "MCSA fit"}, {"CC3051", "OC302", "CC3162", "OC3C61", "0.35", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "OC302", "CC3051", "OC3C51", "0.70", "1", "180.0", "pram model compound 1 (raman et al)"}, {"CC3162", "OC302", "CC3051", "OC3C51", "1.41", "2", "0.0", "MCSA fit"}, {"CC3162", "OC302", "CC3051", "OC3C51", "0.75", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "OC302", "CC3051", "CC3151", "1.23", "1", "180.0", "pram model compound 1 (raman et al)"}, {"CC3162", "OC302", "CC3051", "CC3151", "0.15", "2", "0.0", "MCSA fit"}, {"CC3162", "OC302", "CC3051", "CC3151", "0.54", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "OC302", "CC3162", "CC3161", "0.18", "1", "180.0", "pram model compound 1 (raman et al)"}, {"CC3051", "OC302", "CC3162", "CC3161", "0.45", "2", "180.0", "MCSA fit"}, {"CC3051", "OC302", "CC3162", "CC3161", "0.75", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC302", "CC3051", "OC3C51", "CC3153", "0.19", "1", "180.0", "OC311 CC3051 OC3C51 CC3153 BFRU"}, {"OC302", "CC3051", "OC3C51", "CC3153", "2.85", "2", "180.0", " "}, {"OC302", "CC3051", "OC3C51", "CC3153", "0.86", "3", "0.0", " "}, {"CC3151", "CC3151", "CC3051", "OC302", "2.23", "1", "0.0", "CC3151 CC3151 CC3051 OC311"}, {"CC3151", "CC3151", "CC3051", "OC302", "3.00", "2", "0.0", " "}, {"CC3151", "CC3151", "CC3051", "OC302", "0.88", "3", "180.0", " "}, {"OC302", "CC3051", "CC321", "HCA2", "0.14", "3", "0.0", "OC311 CC3051 CC321 HCA2"}, {"OC302", "CC3051", "CC3151", "HCA1", "0.14", "3", "0.0", "OC311 CC3051 CC3151 HCA1"}, {"OC302", "CC3051", "CC321", "OC311", "0.07", "1", "0.0", "OC311 CC3051 CC321 OC311"}, {"OC302", "CC3051", "CC321", "OC311", "1.99", "2", "180.0", " "}, {"OC302", "CC3051", "CC321", "OC311", "1.72", "3", "180.0", " "}, {"OC302", "CC3051", "CC3151", "OC311", "0.12", "1", "180.0", "OC311 CC3051 CC3151 OC311"}, {"OC302", "CC3051", "CC3151", "OC311", "1.87", "2", "180.0", " "}, {"OC302", "CC3051", "CC3151", "OC311", "1.64", "3", "180.0", " "}, {"CC3051", "OC302", "CC3162", "HCA1", "0.284", "3", "0.0", "CC3162 OC302 CC3162 HCA1"}, {"CC321", "CC3051", "OC302", "CC3162", "0.40", "1", "180.0", "CC321 CC3051 OC311 HCP1 Fructose"}, {"CC321", "CC3051", "OC302", "CC3162", "0.48", "2", "0.0", " "}, {"CC321", "CC3051", "OC302", "CC3162", "0.19", "3", "0.0", " "}, {"OC3C61", "CC3162", "OC303", "CC3151", "0.08", "1", "0.0", "pram model compound 3 (raman et al)"}, {"OC3C61", "CC3162", "OC303", "CC3151", "0.93", "2", "0.0", "MCSA fit"}, {"OC3C61", "CC3162", "OC303", "CC3151", "0.05", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3162", "OC303", "CC3151", "0.05", "1", "180.0", "pram model compound 3 (raman et al)"}, {"CC3161", "CC3162", "OC303", "CC3151", "0.38", "2", "180.0", "MCSA fit"}, {"CC3161", "CC3162", "OC303", "CC3151", "0.36", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "OC303", "CC3151", "CC3153", "0.07", "1", "180.0", "pram model compound 3 (raman et al)"}, {"CC3162", "OC303", "CC3151", "CC3153", "0.04", "2", "0.0", "MCSA fit"}, {"CC3162", "OC303", "CC3151", "CC3153", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "OC303", "CC3151", "CC3151", "0.07", "1", "180.0", "pram model compound 3 (raman et al)"}, {"CC3162", "OC303", "CC3151", "CC3151", "0.04", "2", "0.0", "MCSA fit"}, {"CC3162", "OC303", "CC3151", "CC3151", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "OC303", "CC3151", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"HCA1", "CC3162", "OC303", "CC3151", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC3163", "OC3C61", "CC3162", "OC303", "0.41", "1", "180.0", "CC3163 OC3C61 CC3162 OC301"}, {"CC3163", "OC3C61", "CC3162", "OC303", "0.89", "2", "0.0", " "}, {"CC3163", "OC3C61", "CC3162", "OC303", "0.05", "3", "0.0", " "}, {"OC303", "CC3162", "CC3161", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC303", "CC3162", "CC3161", "OC311", "2.65", "1", "180.0", "OC301 CC3162 CC3161 OC311"}, {"OC303", "CC3162", "CC3161", "OC311", "0.00", "2", "0.0", " "}, {"OC303", "CC3162", "CC3161", "OC311", "0.13", "3", "180.0", " "}, {"CC3161", "CC3161", "CC3162", "OC303", "0.20", "3", "0.0", "CC3161 CC3161 CC3162 OC301"}, {"OC3C51", "CC3153", "CC3151", "OC303", "0.14", "1", "0.0", "OC3C51 CC3153 CC3151 OC311"}, {"OC3C51", "CC3153", "CC3151", "OC303", "0.70", "2", "0.0", " "}, {"OC3C51", "CC3153", "CC3151", "OC303", "0.18", "3", "0.0", " "}, {"CC3051", "CC3151", "CC3151", "OC303", "2.07", "1", "0.0", "CC3051 CC3151 CC3151 OC311"}, {"CC3051", "CC3151", "CC3151", "OC303", "2.13", "2", "0.0", " "}, {"CC3051", "CC3151", "CC3151", "OC303", "2.71", "3", "180.0", " "}, {"CC321", "CC3153", "CC3151", "OC303", "0.76", "1", "180.0", "CC321 CC3153 CC3151 OC311"}, {"CC321", "CC3153", "CC3151", "OC303", "0.40", "2", "180.0", " "}, {"CC321", "CC3153", "CC3151", "OC303", "0.40", "3", "180.0", " "}, {"OC303", "CC3151", "CC3151", "OC311", "2.87", "1", "180.0", "OC311 CC3151 CC3151 OC311"}, {"OC303", "CC3151", "CC3151", "OC311", "0.03", "2", "0.0", " "}, {"OC303", "CC3151", "CC3151", "OC311", "0.23", "3", "0.0", " "}, {"OC303", "CC3151", "CC3151", "HCA1", "0.14", "3", "0.0", "OC311 CC3151 CC3151 HCA1"}, {"OC303", "CC3151", "CC3153", "HCA1", "0.14", "3", "0.0", "OC311 CC3151 CC3153 HCA1"}, {"CC3162", "OC303", "CC3151", "CC3051", "0.07", "1", "180.0", "pram model compound 3 (raman et al)"}, {"CC3162", "OC303", "CC3151", "CC3051", "0.04", "2", "0.0", "MCSA fit"}, {"CC3162", "OC303", "CC3151", "CC3051", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC302", "CC3051", "CC3151", "OC303", "0.12", "1", "180.0", "OC311 CC3051 CC3151 OC311"}, {"OC302", "CC3051", "CC3151", "OC303", "1.87", "2", "180.0", " "}, {"OC302", "CC3051", "CC3151", "OC303", "1.64", "3", "180.0", " "}, {"OC3C51", "CC3051", "CC3151", "OC303", "0.32", "1", "180.0", "OC3C51 CC3051 CC3151 OC311, ketopentose monosac"}, {"OC3C51", "CC3051", "CC3151", "OC303", "0.65", "2", "180.0", " "}, {"OC3C51", "CC3051", "CC3151", "OC303", "2.62", "3", "0.0", " "}, {"CC3153", "CC3151", "CC3151", "OC303", "0.01", "1", "180.0", "CC3153 CC3151 CC3151 OC311, aldopentose monosac"}, {"CC3153", "CC3151", "CC3151", "OC303", "0.72", "2", "0.0", " "}, {"CC3153", "CC3151", "CC3151", "OC303", "0.73", "3", "0.0", " "}, {"CC321", "CC3051", "CC3151", "OC303", "0.94", "1", "0.0", "CC321 CC3051 CC3151 OC311, ketopentose monosac"}, {"CC321", "CC3051", "CC3151", "OC303", "1.59", "2", "180.0", " "}, {"CC321", "CC3051", "CC3151", "OC303", "0.84", "3", "0.0", " "}, {"OC302", "CC3051", "CC321", "OC301", "0.07", "1", "0.0", "OC311 CC3051 CC321 OC311, ketopentose monosac"}, {"OC302", "CC3051", "CC321", "OC301", "1.99", "2", "180.0", " "}, {"OC302", "CC3051", "CC321", "OC301", "1.72", "3", "180.0", " "}, {"CC321", "OC301", "CC3051", "OC3C51", "0.98", "2", "0.0", "pram model compound 5 (raman et al)"}, {"CC321", "OC301", "CC3051", "OC3C51", "1.50", "3", "0.0", "MCSA fit MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321", "OC301", "CC3051", "CC3151", "0.97", "1", "180.0", "pram model compound 5 (raman et al)"}, {"CC321", "OC301", "CC3051", "CC3151", "0.44", "3", "180.0", "MCSA fit MP2/cc-pVTZ//MP2/6-31G*"}, {"HCA2", "CC321", "OC301", "CC3051", "0.284", "3", "0.0", "OMe-THF CC312D OC301 CC331 HCA3"}, {"CC321", "OC301", "CC3051", "CC321", "0.40", "1", "180.0", "CC321 CC3051 OC311 HCP1, ketopentose monosac"}, {"CC321", "OC301", "CC3051", "CC321", "0.48", "2", "0.0", " "}, {"CC321", "OC301", "CC3051", "CC321", "0.19", "3", "0.0", " "}, {"OC301", "CC3051", "CC321", "HCA2", "0.14", "3", "0.0", "OC311 CC3051 CC321 HCA2"}, {"OC301", "CC3051", "CC3151", "HCA1", "0.14", "3", "0.0", "OC311 CC3051 CC3151 HCA1"}, {"OC301", "CC3051", "CC321", "OC311", "0.07", "1", "0.0", "OC311 CC3051 CC321 OC311, ketopentose monosac"}, {"OC301", "CC3051", "CC321", "OC311", "1.99", "2", "180.0", " "}, {"OC301", "CC3051", "CC321", "OC311", "1.72", "3", "180.0", " "}, {"OC301", "CC3051", "CC3151", "OC311", "0.12", "1", "180.0", "OC311 CC3051 CC3151 OC311, ketopentose monosac"}, {"OC301", "CC3051", "CC3151", "OC311", "1.87", "2", "180.0", " "}, {"OC301", "CC3051", "CC3151", "OC311", "1.64", "3", "180.0", " "}, {"OC3C51", "CC3051", "CC321", "OC301", "1.93", "1", "180.0", "COCA-THP2 OC301 CC321 CC311C OC3C61"}, {"OC3C51", "CC3051", "CC321", "OC301", "0.43", "2", "0.0", ", pram, validated by model compound 2 (raman et al)"}, {"OC3C51", "CC3051", "CC321", "OC301", "0.12", "3", "180.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"OC301", "CC321", "CC3051", "CC3151", "1.10", "1", "180.0", "COCA-THP2 CC322C CC312C CC321 OC301"}, {"OC301", "CC321", "CC3051", "CC3151", "0.07", "2", "180.0", ", pram, validated by model compound 2 (raman et al)"}, {"OC301", "CC321", "CC3051", "CC3151", "0.15", "3", "0.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "CC321", "OC301", "CC3051", "0.64", "1", "180.0", "COCA-THP2 CC311C CC321 OC301 CC331, validated by mc2 scan"}, {"CC3051", "CC321", "OC301", "CC3051", "0.03", "2", "180.0", ", pram, validated by model compound 2 (raman et al)"}, {"CC3051", "CC321", "OC301", "CC3051", "0.61", "3", "0.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3153", "CC321", "OC301", "1.93", "1", "180.0", "COCA-THP2 OC301 CC321 CC311C OC3C61"}, {"OC3C51", "CC3153", "CC321", "OC301", "0.43", "2", "0.0", ", pram, validated by model compound 2 (raman et al)"}, {"OC3C51", "CC3153", "CC321", "OC301", "0.12", "3", "180.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "CC321", "OC301", "CC3051", "0.64", "1", "180.0", "COCA-THP2 CC311C CC321 OC301 CC331"}, {"CC3153", "CC321", "OC301", "CC3051", "0.03", "2", "180.0", ", pram, validated by model compound 2 (raman et al)"}, {"CC3153", "CC321", "OC301", "CC3051", "0.61", "3", "0.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"OC301", "CC321", "CC3153", "HCA1", "0.14", "3", "0.0", "OC311 CC321 CC3153 HCA1"}, {"OC301", "CC321", "CC3153", "CC3151", "1.10", "1", "180.0", "COCA-THP2 CC322C CC312C CC321 OC301"}, {"OC301", "CC321", "CC3153", "CC3151", "0.07", "2", "180.0", ", pram, validated by model compound 2 (raman et al)"}, {"OC301", "CC321", "CC3153", "CC3151", "0.15", "3", "0.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "CC321", "OC301", "CC3162", "0.64", "1", "180.0", "COCA-THP2 CC311C CC321 OC301 CC331, validated by mc2 scan"}, {"CC3153", "CC321", "OC301", "CC3162", "0.03", "2", "180.0", ", pram, validated by model compound 2 (raman et al)"}, {"CC3153", "CC321", "OC301", "CC3162", "0.61", "3", "0.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"OC301", "CC3051", "CC321", "OC301", "0.07", "1", "0.0", "OC311 CC3051 CC321 OC311, ketopentose monosac"}, {"OC301", "CC3051", "CC321", "OC301", "1.99", "2", "180.0", " "}, {"OC301", "CC3051", "CC321", "OC301", "1.72", "3", "180.0", " "}, {"CC321", "OC301", "CC3152", "OC3C51", "0.98", "2", "0.0", "pram model compound 5 (raman et al)"}, {"CC321", "OC301", "CC3152", "OC3C51", "1.50", "3", "0.0", "MCSA fit MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321", "OC301", "CC3152", "CC3151", "0.97", "1", "180.0", "pram model compound 5 (raman et al)"}, {"CC321", "OC301", "CC3152", "CC3151", "0.44", "3", "180.0", "MCSA fit MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "CC321", "OC301", "CC3152", "0.64", "1", "180.0", "COCA-THP2 CC311C CC321 OC301 CC331"}, {"CC3153", "CC321", "OC301", "CC3152", "0.03", "2", "180.0", ", pram, validated by model compound 2 (raman et al)"}, {"CC3153", "CC321", "OC301", "CC3152", "0.61", "3", "0.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"HCA2", "CC321", "OC301", "CC3152", "0.284", "3", "0.0", "OMe-THF CC312D OC301 CC331 HCA3"}, {"HCA1", "CC3152", "OC301", "CC321", "0.284", "3", "0.0", "HCA1 CC3152 OC301 CC331"}, {"CC3152", "OC301", "CC3161", "CC3162", "0.12", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC3152", "OC301", "CC3161", "CC3162", "0.03", "2", "180.0", "MCSA fit"}, {"CC3152", "OC301", "CC3161", "CC3162", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "OC301", "CC3161", "CC3161", "0.12", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC3152", "OC301", "CC3161", "CC3161", "0.03", "2", "180.0", "MCSA fit"}, {"CC3152", "OC301", "CC3161", "CC3161", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "OC301", "CC3152", "OC3C51", "0.52", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC3161", "OC301", "CC3152", "OC3C51", "1.50", "2", "0.0", "MCSA fit"}, {"CC3161", "OC301", "CC3152", "OC3C51", "0.98", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "OC301", "CC3152", "CC3151", "1.19", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC3161", "OC301", "CC3152", "CC3151", "0.16", "2", "180.0", "MCSA fit"}, {"CC3161", "OC301", "CC3152", "CC3151", "0.49", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "OC301", "CC3152", "HCA1", "0.284", "3", "0.0", "OMe-THF HCA1C2 CC312C OC301 CC331"}, {"HCA1", "CC3161", "OC301", "CC3152", "0.284", "3", "0.0", "CC311D OC301 CC311C HCA1"}, {"CC3263", "CC3161", "CC3161", "OC301", "0.20", "3", "0.0", "CC3263 CC3161 CC3161 OC311"}, {"CC3162", "OC30P", "SC", "OC2DP", "0.17", "3", "0.0", "CC3161 OC30P SC OC2DP 0.17 3 0.0"}, {"SC", "OC30P", "CC3162", "OC3C61", "0.76", "1", "0.0", "OC3C61 CC311D OC30P SC 0.76 1 0.0"}, {"SC", "OC30P", "CC3162", "OC3C61", "0.68", "2", "0.0", "OC3C61 CC311D OC30P SC 0.68 2 0.0"}, {"SC", "OC30P", "CC3162", "OC3C61", "0.26", "3", "180.0", "OC3C61 CC311D OC30P SC 0.26 3 180.0"}, {"SC", "OC30P", "CC3162", "CC3161", "0.21", "3", "0.0", "CC3162 CC3161 OC30P SC 0.21 3 0.0"}, {"SC", "OC30P", "CC3162", "HCA1", "0.00", "3", "0.0", "HCA1 CC3161 OC30P SC 0.00 3 0.0"}, {"OC311", "CC3162", "CC3161", "OC30P", "2.50", "1", "180.0", "OC30P CC3162 CC3161 OC311 2.50 1 180.0"}, {"OC311", "CC3162", "CC3161", "OC30P", "2.00", "2", "0.0", "OC30P CC3162 CC3161 OC311 2.00 2 0.0"}, {"OC311", "CC3162", "CC3161", "OC30P", "2.50", "3", "0.0", "OC30P CC3162 CC3161 OC311 2.50 3 0.0"}, {"CC3062", "OC301", "CC321", "HCA2", "0.284", "3", "0.0", "from CC3162 OC301 CC321 HCA2"}, {"CC321", "OC301", "CC3062", "OC3C61", "0.14", "1", "0.0", "from CC321 OC301 CC3162 OC3C61"}, {"CC321", "OC301", "CC3062", "OC3C61", "0.97", "2", "0.0", " "}, {"CC321", "OC301", "CC3062", "OC3C61", "0.11", "3", "180.0", " "}, {"CC3163", "CC321", "OC301", "CC3062", "0.64", "1", "180.0", "from CC3163 CC321 OC301 CC3162"}, {"CC3163", "CC321", "OC301", "CC3062", "0.03", "2", "180.0", " "}, {"CC3163", "CC321", "OC301", "CC3062", "0.61", "3", "0.0", " "}, {"CC3261", "CC3062", "OC301", "CC321", "0.22", "1", "0.0", "from C3161 CC3162 OC301 CC321"}, {"CC3261", "CC3062", "OC301", "CC321", "0.28", "2", "180.0", " "}, {"CC3261", "CC3062", "OC301", "CC321", "0.89", "3", "0.0", " "}, {"CC321", "OC301", "CC3062", "CC2O2", "0.284", "3", "0.0", "from CC3161 OC301 CC3062 CC2O2"}, {"OC3C61", "CC3062", "OC301", "CC312", "1.3464", "1", "0.00", "RMSE = 1.59697"}, {"OC3C61", "CC3062", "OC301", "CC312", "3.0743", "2", "0.00", "RMSE = 1.59697"}, {"OC3C61", "CC3062", "OC301", "CC312", "0.8378", "3", "180.00", "RMSE = 1.59697"}, {"CC312", "CC312", "OC301", "CC3062", "3.0937", "1", "180.00", "RMSE = 1.59697"}, {"CC312", "CC312", "OC301", "CC3062", "0.7096", "2", "180.00", "RMSE = 1.59697"}, {"CC312", "CC312", "OC301", "CC3062", "0.0245", "3", "0.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC322", "OC311", "1.7749", "1", "180.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC322", "OC311", "1.5713", "2", "0.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC322", "OC311", "1.8214", "3", "0.00", "RMSE = 1.59697"}, {"CC322", "CC312", "OC301", "CC3062", "4.2905", "1", "180.00", "RMSE = 1.59697"}, {"CC322", "CC312", "OC301", "CC3062", "0.4831", "2", "180.00", "RMSE = 1.59697"}, {"CC322", "CC312", "OC301", "CC3062", "0.0488", "3", "180.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC312", "OC311", "1.7164", "1", "180.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC312", "OC311", "0.3973", "2", "180.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC312", "OC311", "1.9793", "3", "0.00", "RMSE = 1.59697"}, {"CC3163", "CC312", "CC312", "OC301", "0.2524", "1", "180.00", "RMSE = 1.59697"}, {"CC3163", "CC312", "CC312", "OC301", "0.4587", "2", "0.00", "RMSE = 1.59697"}, {"CC3163", "CC312", "CC312", "OC301", "1.1807", "3", "180.00", "RMSE = 1.59697"}, {"CC2O2", "CC3062", "OC301", "CC312", "1.1671", "1", "180.00", "RMSE = 1.59697"}, {"CC2O2", "CC3062", "OC301", "CC312", "1.5207", "2", "0.00", "RMSE = 1.59697"}, {"CC2O2", "CC3062", "OC301", "CC312", "1.0160", "3", "180.00", "RMSE = 1.59697"}, {"CC3261", "CC3062", "OC301", "CC312", "1.5334", "1", "180.00", "RMSE = 1.59697"}, {"CC3261", "CC3062", "OC301", "CC312", "1.5933", "2", "0.00", "RMSE = 1.59697"}, {"CC3261", "CC3062", "OC301", "CC312", "1.3811", "3", "0.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC312", "HCA1", "0.1400", "3", "0.00", "from HCA1 CC312 CC312 OC311"}, {"HCA1", "CC312", "OC301", "CC3062", "0.2840", "3", "0.00", "from CC3162 OC301 CC321 HCA2"}, {"OC301", "CC312", "CC322", "HCA2", "0.1400", "3", "0.00", "from HCA2 CC322 CC312 OC311"}, {"OC3C61", "CC3062", "OC301", "CC322", "2.1018", "1", "0.00", "RMSE = 1.5934"}, {"OC3C61", "CC3062", "OC301", "CC322", "1.4102", "2", "0.00", "RMSE = 1.5934"}, {"OC3C61", "CC3062", "OC301", "CC322", "0.4570", "3", "0.00", "RMSE = 1.5934"}, {"CC312", "CC322", "OC301", "CC3062", "2.5455", "1", "180.00", "RMSE = 1.5934"}, {"CC312", "CC322", "OC301", "CC3062", "0.7918", "2", "180.00", "RMSE = 1.5934"}, {"CC312", "CC322", "OC301", "CC3062", "0.9628", "3", "180.00", "RMSE = 1.5934"}, {"OC311", "CC312", "CC322", "OC301", "3.3150", "1", "180.00", "RMSE = 1.5934"}, {"OC311", "CC312", "CC322", "OC301", "1.6828", "2", "180.00", "RMSE = 1.5934"}, {"OC311", "CC312", "CC322", "OC301", "2.9534", "3", "180.00", "RMSE = 1.5934"}, {"CC312", "CC312", "CC322", "OC301", "0.5927", "1", "0.00", "RMSE = 1.5934"}, {"CC312", "CC312", "CC322", "OC301", "1.2961", "2", "180.00", "RMSE = 1.5934"}, {"CC312", "CC312", "CC322", "OC301", "2.1767", "3", "0.00", "RMSE = 1.5934"}, {"CC2O2", "CC3062", "OC301", "CC322", "0.4128", "1", "180.00", "RMSE = 1.5934"}, {"CC2O2", "CC3062", "OC301", "CC322", "0.2875", "2", "180.00", "RMSE = 1.5934"}, {"CC2O2", "CC3062", "OC301", "CC322", "0.0685", "3", "0.00", "RMSE = 1.5934"}, {"CC3261", "CC3062", "OC301", "CC322", "0.3336", "1", "180.00", "RMSE = 1.5934"}, {"CC3261", "CC3062", "OC301", "CC322", "0.0342", "2", "0.00", "RMSE = 1.5934"}, {"CC3261", "CC3062", "OC301", "CC322", "0.7301", "3", "180.00", "RMSE = 1.5934"}, {"OC301", "CC322", "CC312", "HCA1", "0.1400", "3", "0.0", "from HCA1 CC312 CC312 OC311"}, {"HCA2", "CC322", "OC301", "CC3062", "0.2840", "3", "0.0", "from CC3162 OC301 CC321 HCA2"}, {"HCA1", "CC3162", "CC3161", "CC3261", "0.20", "3", "0.0", "from HCA1 CC3162 CC3161 CC3161"}, {"HCA2", "CC3261", "CC3161", "CC3162", "0.20", "3", "0.0", "from HCA1 CC3161 CC3161 CC3162"}, {"CC3161", "CC3261", "CC3161", "CC3162", "0.19", "3", "180.0", "from CC3161 CC3161 CC3161 CC3162"}, {"CC3261", "CC3161", "CC3163", "CC331", "0.20", "3", "0.0", "from CC3161 CC3161 CC3163 CC331"}, {"CC3161", "CC3261", "CC3161", "CC3163", "0.19", "3", "180.0", "from CC3161 CC3161 CC3161 CC3163"}, {"HCA2", "CC3261", "CC3161", "CC3163", "0.20", "3", "0.0", "from HCA1 CC3161 CC3161 CC3163"}, {"HCA1", "CC3163", "CC3161", "CC3261", "0.20", "3", "0.0", "from HCA1 CC3163 CC3161 CC3161"}, {"HCA1", "CC3161", "CC3261", "CC3161", "0.20", "3", "0.0", "from HCA1 CC3161 CC3161 CC3161"}, {"CC3161", "CC3261", "CC3161", "OC311", "0.20", "3", "0.0", "from CC3161 CC3161 CC3161 OC311"}, {"CC3261", "CC3161", "CC3163", "OC3C61", "0.31", "3", "180.0", "from CC3161 CC3161 CC3163 OC3C61"}, {"CC3261", "CC3161", "CC3162", "OC3C61", "0.31", "3", "180.0", "from CC3161 CC3161 CC3162 OC3C61"}, {"CC3261", "CC3161", "CC3162", "OC311", "0.20", "3", "0.0", "from CC3161 CC3161 CC3162 OC311"}, {"CC3261", "CC3161", "CC3162", "OC301", "0.20", "3", "0.0", "from CC3161 CC3161 CC3162 OC301"}, {"CC3162", "CC3161", "OC301", "CC2O5", "0.1300", "1", "180.0", "CC3162 CC3161 OC301 CC3162"}, {"CC3162", "CC3161", "OC301", "CC2O5", "0.2500", "2", "180.0", "CC3162 CC3161 OC301 CC3162"}, {"CC3162", "CC3161", "OC301", "CC2O5", "0.0600", "3", "180.0", "CC3162 CC3161 OC301 CC3162"}, {"CC3261", "CC3161", "OC301", "CC2O5", "1.0150", "1", "180.0", "RMSE = 2.28686"}, {"CC3261", "CC3161", "OC301", "CC2O5", "0.4550", "2", "0.0", "RMSE = 2.28686"}, {"CC3261", "CC3161", "OC301", "CC2O5", "1.0330", "3", "180.0", "RMSE = 2.28686"}, {"OC2D1", "CC2O5", "CC331", "HCA3", "0.0000", "6", "180.0", "OG2D1 CG2O2 CG331 HGA3"}, {"OC301", "CC2O5", "CC331", "HCA3", "0.0000", "6", "180.0", "OG302 CG2O2 CG331 HGA3"}, {"HCA2", "CC3261", "CC3161", "OC301", "0.1400", "3", "0.0", "HCA2 CC3261 CC3161 OC311"}, {"HCA1", "CC3161", "OC301", "CC2O5", "0.0000", "3", "0.0", "HGA1 CG311 OG302 CG2O2"}, {"CC3161", "OC301", "CC2O5", "OC2D1", "0.9650", "1", "180.0", "OG2D1 CG2O2 OG302 CG301"}, {"CC3161", "OC301", "CC2O5", "OC2D1", "3.8500", "2", "180.0", "OG2D1 CG2O2 OG302 CG301"}, {"CC3161", "OC301", "CC2O5", "CC331", "2.0500", "2", "180.0", "CG311 CG2O2 OG302 CG331"}, {"CC3161", "CC3261", "CC3161", "OC301", "0.2000", "3", "0.0", "from CC3161 CC3161 CC3161 OC311"}, {"CC3161", "CC3161", "OC301", "CC2O5", "0.1300", "1", "180.0", "CC3161 CC3161 OC301 CC3162"}, {"CC3161", "CC3161", "OC301", "CC2O5", "0.2500", "2", "180.0", "CC3161 CC3161 OC301 CC3162"}, {"CC3161", "CC3161", "OC301", "CC2O5", "0.0600", "3", "180.0", "CC3161 CC3161 OC301 CC3162"}, {"SC", "NC311", "CC3161", "HCA1", "0.10", "3", "0.0", "SUFMA/B, xxwy"}, {"HCP1", "NC311", "CC3161", "HCA1", "0.10", "3", "0.0", "SUFMA/B, xxwy"}, {"HCP1", "NC311", "CC3161", "CC3161", "0.10", "3", "0.0", "SUFMA/B, xxwy"}, {"HCP1", "NC311", "CC3161", "CC3162", "0.10", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3161", "CC3161", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3162", "OC3C61", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3161", "HCA1", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3162", "HCA1", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3161", "OC311", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3162", "OC311", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3161", "OC301", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3162", "OC301", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3161", "OC30P", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"OC2DP", "SC", "NC311", "HCP1", "0.25", "3", "0.0", "SUFMA/B, xxwy"}, {"CC3161", "NC311", "SC", "OC2DP", "0.153", "3", "0.0", "SUFMA/B, lsfit RMSE = 1.095, xxwy"}, {"CC3161", "CC3161", "NC311", "SC", "0.161", "3", "0.0", "SUFMA/B, lsfit RMSE = 1.095, xxwy"}, {"CC3162", "CC3161", "NC311", "SC", "0.161", "3", "0.0", "SUFMA/B, lsfit RMSE = 1.095, xxwy"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm36_carb info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm36_carb_impropers[14][8]= {{"CC2O1", "CC331", "NC2D1", "OC2D1", "120.00", "0", "0.00", "par22 O X X C"}, {"NC2D1", "CC2O1", "CC3161", "HCP1", "20.00", "0", "0.00", "par22 NH1 X X H"}, {"NC2D1", "CC2O1", "CC3062", "HCP1", "20.00", "0", "0.00", "par22 NH1 X X H"}, {"CC2O2", "CC311", "OC2D2", "OC2D2", "96.00", "0", "0.00", "par22 OC X X CC"}, {"CC2O2", "CC301", "OC2D2", "OC2D2", "96.00", "0", "0.00", "par22 OC X X CC"}, {"CC2O2", "CC3163", "OC2D2", "OC2D2", "96.00", "0", "0.00", "par22 OC X X CC"}, {"CC2O2", "CC3062", "OC2D2", "OC2D2", "96.00", "0", "0.00", "par22 OC X X CC"}, {"CC2O2", "CC321", "OC2D2", "OC2D2", "96.00", "0", "0.00", "par22 OC X X CC"}, {"NC2D1", "CC2O1", "CC331", "HCP1", "20.00", "0", "0.00", "par22 NH1 X X H"}, {"NC2D1", "CC2O1", "CC311", "HCP1", "20.00", "0", "0.00", "par22 NH1 X X H"}, {"CC2O4", "CC331", "OC2D4", "HCR1", "50.00", "0", "0.00", "acetaldehyde adm"}, {"CC2O4", "CC312", "OC2D4", "HCR1", "50.00", "0", "0.00", "acetaldehyde adm"}, {"OC2D3", "CC331", "CC331", "CC2O3", "70.00", "0", "0.00", "ketone, acetone"}, {"OC2D3", "CC312", "CC322", "CC2O3", "70.00", "0", "0.00", " "}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm36_carb info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm36_carb_vdw[57][6]= {{"CC301", "-0.0320", "2.000", "-0.01", "1.9", "cgenff CG301"}, {"CC3062", "-0.0320", "2.000", "-0.01", "1.9", "cgenff CG301"}, {"CC311", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC3161", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC3162", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC3163", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC321", "-0.0560", "2.010", "-0.01", "1.9", "par22, CT2x"}, {"CC3261", "-0.0560", "2.010", "-0.01", "1.9", "par22, CT2x"}, {"CC3263", "-0.0560", "2.010", "-0.01", "1.9", "par22, CT2x"}, {"CC331", "-0.0780", "2.040", "-0.01", "1.9", "par22, CT3x"}, {"CC2O1", "-0.1100", "2.000", " ", " ", "C"}, {"CC2O2", "-0.0700", "2.000", " ", " ", "CC"}, {"CC2O3", "-0.0900", "2.000", " ", " ", "acetone, 11/08"}, {"CC2O4", "-0.0600", "1.800", " ", " ", "acetaldehyde, 11/08"}, {"CC2O5", "-0.0980", "1.700", " ", " ", "carbonyl C, 04/15, methyl acetate viv 12/29/06"}, {"OC2D1", "-0.1200", "1.700", "-0.12", "1.40", "par22, OB"}, {"OC2D2", "-0.1200", "1.700", " ", " ", "OC"}, {"OC2D3", "-0.0500", "1.700", "-0.12", "1.40", "adm, acetone, 11/08"}, {"OC2D4", "-0.1200", "1.700", "-0.12", "1.40", "adm, acetaldehyde, 11/08"}, {"OC3C61", "-0.1000", "1.650", " ", " ", "thp 1/06"}, {"OC311", "-0.1921", "1.765", " ", " ", "MeOH and EtOH 1/06"}, {"NC2D1", "-0.2000", "1.850", "-0.20", "1.55", "par22 NH1"}, {"HCP1", "-0.0460", "0.2245", " ", " ", "polar H"}, {"HCA1", "-0.0450", "1.340", " ", " ", "1/5/05 igor"}, {"HCA2", "-0.0350", "1.340", " ", " ", "igor, 6/05"}, {"HCA3", "-0.0240", "1.340", " ", " ", "yin and mackerell, 4/98"}, {"CC312", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC322", "-0.0560", "2.010", "-0.01", "1.9", "par22, CT2x"}, {"HCR1", "-0.0460", "0.8000", " ", " ", "jr., 6/27/90, his (verified for acetaldehyde, 11/08)"}, {"HCA3M", "-0.0240", "1.3400", " ", " ", "yin and mackerell, 4/98"}, {"CC321C", "-0.0560", "2.010", "-0.01", "1.9", "alkane, 4/98, yin, adm jr."}, {"CC321D", "-0.0560", "2.010", "-0.01", "1.9", "alkane, 4/98, yin, adm jr."}, {"CC311C", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC311D", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"OC301", "-0.1000", "1.6500", " ", " ", "sng, all34_ethers_1a OC30A"}, {"OC302", "-0.1000", "1.6500", " ", " ", "sng, all34_ethers_1a OC30A"}, {"HCP1M", "-0.0460", "0.2245", " ", " ", "polar H, og, 1/20/06"}, {"OC311M", "-0.1921", "1.765", " ", " ", "and EtOH optimized, og, 1/20/06"}, {"OC3C5M", "-0.1000", "1.6500", " ", " ", "sng 1/06"}, {"CC322C", "-0.0600", "2.02", "-0.01", "1.9", "CPEN, cyclopentane, MD sim. 8/06 viv !from CCP2, THF viv"}, {"HCA2C2", "-0.0350", "1.3000", " ", " ", "11/16/04 viv"}, {"CC312C", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"HCA1C2", "-0.0450", "1.340", " ", " ", "1/5/05 igor"}, {"OC3C51", "-0.1000", "1.6500", " ", " ", "par_carb, OC3C5M"}, {"CC3152", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC3051", "-0.0320", "2.000", "-0.01", "1.9", "cgenff CG301"}, {"CC3251", "-0.0600", "2.02", "-0.01", "1.9", "cyclopentane, THF"}, {"CC3151", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC3153", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"OC2DP", "-0.12", "1.70", " ", " ", " "}, {"OC312", "-0.1521", "1.77", " ", " ", " "}, {"OC30P", "-0.1521", "1.77", " ", " ", " "}, {"PC", "-0.585", "2.15", " ", " ", "Jr."}, {"SC", "-0.47", "2.1", " ", " ", " "}, {"CC312D", "-0.0320", "2.000", "-0.01", "1.9", "CC312C"}, {"OC303", "-0.1000", "1.6500", " ", " ", " "}, {"NC311", "-0.0450", "2.000", " ", " ", "aliphatic amines, xxwy"}}; atomes_1.3.1/src/calc/force_fields/charmm36_prot_metals.c0000664000175000017500000047615115212624223023035 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file charmm36_prot_metals.c * @short CHARMM-charmm36m_prot force field, from 'charmm36m_prot' * @author Sébastien Le Roux */ /* * This file: 'charmm36_prot_metals.c' * * Contains: * CHARMM-charmm36m_prot force field, data from taken from: - the file: 'charmm36m_prot' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm36m_prot_atoms[53][5] Bonds : charmm36m_prot_bonds[132][5] Angles : charmm36m_prot_angles[364][8] Dihedrals : charmm36m_prot_dihedrals[706][8] Impropers : charmm36m_prot_impropers[35][8] Non bonded : charmm36m_prot_vdw[53][6] */ #include "global.h" int charmm36m_prot_objects[14] = {53, 0, 0, 132, 0, 0, 364, 0, 706, 0 , 0, 35, 53, 0}; int charmm36m_prot_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm36m_prot info */ char * charmm36m_prot_atoms[53][5]= {{"H", "1.00800", "H", "polar H", "31"}, {"H", "1.00800", "HC", "N-ter H", "32"}, {"H", "1.00800", "HA", "nonpolar H", "33"}, {"H", "1.00800", "HP", "aromatic H", "34"}, {"H", "1.00800", "HB1", "backbone H", "35"}, {"H", "1.00800", "HB2", "aliphatic backbone H, to CT2", "36"}, {"H", "1.00800", "HR1", "his he1, (+) his HG,HD2", "37"}, {"H", "1.00800", "HR2", "(+) his HE1", "38"}, {"H", "1.00800", "HR3", "neutral his HG, HD2", "39"}, {"H", "1.00800", "HS", "thiol hydrogen", "40"}, {"H", "1.00800", "HE1", "for alkene; RHC=CR", "41"}, {"H", "1.00800", "HE2", "for alkene; H2C=CR", "42"}, {"H", "1.00800", "HA1", "alkane, CH, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "43"}, {"H", "1.00800", "HA2", "alkane, CH2, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "44"}, {"H", "1.00800", "HA3", "alkane, CH3, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "45"}, {"C", "12.01100", "C", "carbonyl C, peptide backbone", "46"}, {"C", "12.01100", "CA", "aromatic C", "47"}, {"C", "12.01100", "CT", "aliphatic sp3 C, new LJ params, no hydrogens, see retinol stream file for parameters", "48"}, {"C", "12.01100", "CT1", "aliphatic sp3 C for CH", "49"}, {"C", "12.01100", "CT2", "aliphatic sp3 C for CH2", "50"}, {"C", "12.01100", "CT2A", "from CT2 (GLU, HSP chi1/chi2 fitting) 05282010, zhu", "51"}, {"C", "12.01100", "CT3", "aliphatic sp3 C for CH3", "52"}, {"C", "12.01100", "CPH1", "his CG and CD2 carbons", "53"}, {"C", "12.01100", "CPH2", "his CE1 carbon", "54"}, {"C", "12.01100", "CPT", "trp C between rings", "55"}, {"C", "12.01100", "CY", "TRP C in pyrrole ring", "56"}, {"C", "12.01100", "CP1", "tetrahedral C (proline CA)", "57"}, {"C", "12.01100", "CP2", "tetrahedral C (proline CB/CG)", "58"}, {"C", "12.01100", "CP3", "tetrahedral C (proline CD)", "59"}, {"C", "12.01100", "CC", "carbonyl C, asn,asp,gln,glu,cter,ct2", "60"}, {"C", "12.01100", "CD", "carbonyl C, pres aspp,glup,ct1", "61"}, {"C", "12.01100", "CS", "thiolate carbon", "62"}, {"C", "12.01100", "CE1", "for alkene; RHC=CR", "63"}, {"C", "12.01100", "CE2", "for alkene; H2C=CR", "64"}, {"C", "12.01100", "CAI", "aromatic C next to CPT in trp", "65"}, {"N", "14.00700", "N", "proline N", "66"}, {"N", "14.00700", "NR1", "neutral his protonated ring nitrogen", "67"}, {"N", "14.00700", "NR2", "neutral his unprotonated ring nitrogen", "68"}, {"N", "14.00700", "NR3", "charged his ring nitrogen", "69"}, {"N", "14.00700", "NH1", "peptide nitrogen", "70"}, {"N", "14.00700", "NH2", "amide nitrogen", "71"}, {"N", "14.00700", "NH3", "ammonium nitrogen", "72"}, {"N", "14.00700", "NC2", "guanidinium nitrogen", "73"}, {"N", "14.00700", "NY", "TRP N in pyrrole ring", "74"}, {"N", "14.00700", "NP", "Proline ring NH2+ (N-terminal)", "75"}, {"O", "15.99900", "O", "carbonyl oxygen", "76"}, {"O", "15.99900", "OB", "carbonyl oxygen in acetic acid", "77"}, {"O", "15.99900", "OC", "carboxylate oxygen", "78"}, {"O", "15.99900", "OH1", "hydroxyl oxygen", "79"}, {"O", "15.99940", "OS", "ester oxygen", "80"}, {"S", "32.06000", "S", "sulphur", "81"}, {"S", "32.06000", "SM", "sulfur C-S-S-C type", "82"}, {"S", "32.06000", "SS", "thiolate sulfur", "83"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm36m_prot info V(R) = Kb x (R - R0)^2 */ char * charmm36m_prot_bonds[132][5]= {{"NH2", "CT1", "240.000", "1.4550", " "}, {"CA", "CAI", "305.000", "1.3750", "from CA CA"}, {"CAI", "CAI", "305.000", "1.3750", "atm, methylindole, fit CCDSS"}, {"CPT", "CA", "300.000", "1.3600", "atm, methylindole, fit CCDSS"}, {"CPT", "CAI", "300.000", "1.3600", "atm, methylindole, fit CCDSS"}, {"CPT", "CPT", "360.000", "1.3850", "atm, methylindole, fit CCDSS"}, {"CY", "CA", "350.000", "1.3650", "trj, adm jr., 5/08/91, indole CCDB structure search"}, {"CY", "CAI", "350.000", "1.3650", "from CY CA"}, {"CY", "CPT", "350.000", "1.4300", "atm, methylindole, fit CDS data"}, {"CY", "CT3", "375.000", "1.4920", "atm, methylindole, fit CDS data"}, {"CY", "CT2", "375.000", "1.4920", "atm, methylindole, fit CDS data"}, {"HP", "CAI", "340.000", "1.0800", "from HP CA"}, {"HP", "CY", "350.000", "1.0800", "trp, adm jr., 12/30/91"}, {"NY", "CA", "270.000", "1.3700", "trp, adm jr., 12/30/91"}, {"NY", "CPT", "270.000", "1.3700", "atm, methylindole, from CCDS 1/17/04"}, {"NY", "H", "537.500", "0.9760", "atm, methylindole, 1/17/04"}, {"CA", "CA", "305.000", "1.3750", "benzene, JES 8/25/89"}, {"CE1", "CE1", "440.000", "1.3400", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CE2", "500.000", "1.3420", "for propene, yin/adm jr., 12/95"}, {"CE1", "CT2", "365.000", "1.5020", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CT3", "383.000", "1.5040", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE2", "510.000", "1.3300", "for ethene, yin/adm jr., 12/95"}, {"CP1", "C", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CC", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CD", "200.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "222.500", "1.5270", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH1", "CPH1", "410.000", "1.3600", "histidine, adm jr., 6/27/90"}, {"CT1", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT1", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT1", "222.500", "1.5000", "alkane update, adm jr., 3/2/92"}, {"CT2", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT2", "CA", "230.000", "1.4900", "phe,tyr, JES 8/25/89"}, {"CT2", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT2", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"CT3", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT3", "CA", "230.000", "1.4900", "toluene, adm jr. 3/7/92"}, {"CT3", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT3", "CS", "190.000", "1.5310", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CT3", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "222.500", "1.5280", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT3", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"H", "CD", "330.000", "1.1100", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA1", "CC", "317.130", "1.1000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"HA2", "CP2", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CS", "300.000", "1.1110", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CS", "300.000", "1.1110", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA1", "CT1", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA2", "CT2", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "322.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HE1", "CE1", "360.500", "1.1000", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "365.000", "1.1000", "for ethene, yin/adm jr., 12/95"}, {"HB1", "CP1", "330.000", "1.0800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CT1", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HP", "CA", "340.000", "1.0800", "phe,tyr JES 8/25/89"}, {"HR1", "CPH1", "375.000", "1.0830", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "340.000", "1.0900", "his, adm jr., 6/28/29"}, {"HR2", "CPH2", "333.000", "1.0700", "his, adm jr., 6/27/90"}, {"HR3", "CPH1", "365.000", "1.0830", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "260.000", "1.3000", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "320.000", "1.4340", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "320.000", "1.4550", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "450.000", "1.3650", "mp2/6-311g** mgua vib. data, adm jr., 1/04"}, {"NC2", "CT2", "390.000", "1.4900", "mp2/6-311g** mgua vib. data, adm jr., 1/04"}, {"NC2", "CT3", "390.000", "1.4900", "mp2/6-311g** mgua vib. data, adm jr., 1/04"}, {"NC2", "HC", "455.000", "1.0000", "405.0->455.0 GUANIDINIUM (KK)"}, {"NH1", "C", "370.000", "1.3450", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT2", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT3", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "H", "440.000", "0.9970", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "HC", "405.000", "0.9800", "(DS)"}, {"NH2", "CC", "430.000", "1.3600", "adm jr. 4/10/91, acetamide"}, {"NH2", "CT2", "240.000", "1.4550", "from NH2 CT3, neutral glycine, adm jr."}, {"NH2", "CT3", "240.000", "1.4550", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH2", "H", "480.000", "1.0000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "HC", "460.000", "1.0000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT3", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "HC", "403.000", "1.0400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "320.000", "1.4850", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "320.000", "1.5020", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "HC", "460.000", "1.0060", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR1", "CPH2", "400.000", "1.3600", "his, ADM JR., 7/20/89"}, {"NR1", "H", "466.000", "1.0000", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "400.000", "1.3200", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "380.000", "1.3700", "his, adm jr., 6/28/90"}, {"NR3", "CPH2", "380.000", "1.3200", "his, adm jr., 6/27/90"}, {"NR3", "H", "453.000", "1.0000", "his, adm jr., 6/27/90"}, {"O", "C", "620.000", "1.2300", "Peptide geometry, condensed phase (LK)"}, {"O", "CC", "650.000", "1.2300", "adm jr. 4/10/91, acetamide"}, {"OB", "CC", "750.000", "1.2200", "adm jr., 10/17/90, acetic acid vibrations and geom."}, {"OB", "CD", "750.000", "1.2200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "525.000", "1.2600", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "525.000", "1.2600", "adm jr. 7/23/91, acetic acid"}, {"OC", "CT2", "450.000", "1.3300", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "450.000", "1.3300", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "334.300", "1.4110", "MeOH, EMB 10/10/89,"}, {"OH1", "CD", "230.000", "1.4000", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OH1", "CT1", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT2", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT3", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "H", "545.000", "0.9600", "EMB 11/21/89 methanol vib fit"}, {"OS", "CD", "150.000", "1.3340", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OS", "CT3", "340.000", "1.4300", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"S", "CT2", "198.000", "1.8180", "fitted to C-S s 9/26/92 (FL)"}, {"S", "CT3", "240.000", "1.8160", "fitted to C-S s 9/26/92 (FL)"}, {"S", "HS", "275.000", "1.3250", "methanethiol pure solvent, adm jr., 6/22/92"}, {"SM", "CT2", "214.000", "1.8160", "improved CSSC surface in DMDS 5/15/92 (FL)"}, {"SM", "CT3", "214.000", "1.8160", "improved CSSC surface in DMDS 5/15/92 (FL)"}, {"SM", "SM", "173.000", "2.0290", "improved CSSC surface in DMDS 5/15/92 (FL)"}, {"SS", "CS", "205.000", "1.8360", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HR1", "CD", "330.000", "1.1100", "acetaldehyde, benzaldehyde, 3ALP"}, {"O", "CD", "720.000", "1.2050", "acetaldehyde, benzaldehyde, 3ALP. from stream/toppar_all27_na_bkb_modifications.str"}, {"CT2A", "CT1", "222.500", "1.5380", "from CT2 CT1, Zhu"}, {"CT2", "CT2A", "222.500", "1.5300", "from CT2 CT2, Zhu"}, {"CT2A", "HA2", "309.000", "1.1110", "from HA2 CT2, Zhu"}, {"CT2A", "CPH1", "229.630", "1.5000", "from CT2 CPH1, Zhu"}, {"CT2A", "CC", "200.000", "1.5220", "from CT2 CC, jshim"}, {"CT1", "CS", "190.000", "1.5380", "from CT3 CS but lengthened; compare CT3 CT2 with CT2 CT1; kevo"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm36m_prot info V(S) = Kub x (S - S0)^2 */ char * charmm36m_prot_angles[364][8]= {{"H", "NH2", "CT1", "50.000", "111.00", " ", " ", "From LSN HC-NH2-CT2"}, {"H", "NH2", "CT2", "50.000", "111.00", " ", " ", "From LSN HC-NH2-CT2, Neutral Gly Nterminus"}, {"NH2", "CT1", "CT1", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"NH2", "CT1", "CT2", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"NH2", "CT1", "CT3", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"CT1", "CD", "OH1", "55.000", "110.50", " ", " ", "From ASPP CT2-CD-OH1"}, {"CT3", "CT1", "CD", "52.000", "108.00", " ", " ", "Ala cter"}, {"NH2", "CT1", "HB1", "38.000", "109.50", "50.00", "2.1400", "From LSN NH2-CT2-HA"}, {"NH2", "CT1", "C", "50.000", "107.00", " ", " ", "From ALA Dipep. NH1-CT2-C"}, {"NH2", "CT2", "C", "50.000", "107.00", " ", " ", "From ALA Dipep. NH1-CT2-C, Neutral Gly Nterminus"}, {"CAI", "CAI", "CA", "40.000", "120.00", "35.00", "2.41620", "from CA CA CA"}, {"CAI", "CA", "CA", "40.000", "120.00", "35.00", "2.41620", "from CA CA CA"}, {"CPT", "CA", "CA", "50.000", "113.20", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CPT", "CA", "50.000", "110.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CAI", "CA", "50.000", "113.20", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CPT", "CAI", "50.000", "110.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CY", "CA", "85.000", "106.40", "25.00", "2.26100", "atm, methylindole, 1/17/04"}, {"CPT", "NY", "CA", "85.000", "112.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CT2", "CY", "CA", "30.000", "127.00", " ", " ", "atm, methylindole, CT3 CY CA"}, {"CT2", "CY", "CPT", "30.000", "126.70", " ", " ", "atm, methylindole, 1/17/04"}, {"CT3", "CY", "CA", "30.000", "127.00", " ", " ", "atm, methylindole, CT3 CY CA"}, {"CT3", "CY", "CPT", "30.000", "126.70", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CA", "130.000", "133.50", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CAI", "130.000", "133.50", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CPT", "85.000", "108.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CT2", "CT1", "58.350", "114.00", " ", " ", "from TRP crystal, JWK"}, {"CY", "CT2", "CT3", "58.350", "114.00", " ", " ", "from TRP crystal, JWK"}, {"H", "NY", "CA", "28.000", "126.00", " ", " ", "trp, adm jr., 12/30/91"}, {"H", "NY", "CAI", "28.000", "126.00", " ", " ", "trp, adm jr., 12/30/91"}, {"H", "NY", "CPT", "28.000", "126.00", " ", " ", "trp, adm jr., 12/30/91"}, {"HA2", "CT2", "CY", "55.000", "109.50", " ", " ", "atm, methylindole, 1/17/04"}, {"HA3", "CT3", "CY", "55.000", "109.50", " ", " ", "atm, methylindole, 1/17/04"}, {"HP", "CA", "CAI", "30.000", "120.00", "22.00", "2.15250", "from HP CA CA"}, {"HP", "CAI", "CA", "30.000", "120.00", "22.00", "2.15250", "from HP CA CA"}, {"HP", "CA", "CPT", "30.000", "122.00", "22.00", "2.14600", "trp, adm jr., 12/30/91"}, {"HP", "CAI", "CPT", "30.000", "122.00", "22.00", "2.14600", "from HP CA CPT"}, {"HP", "CA", "CY", "32.000", "125.00", "25.00", "2.17300", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HP", "CY", "CA", "32.000", "126.40", "25.00", "2.18600", "trp, adm jr., 12/30/91"}, {"HP", "CY", "CPT", "32.000", "126.40", "25.00", "2.25500", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CA", "CY", "85.000", "110.50", "25.00", "2.24000", "trp, adm jr., 12/30/91"}, {"NY", "CA", "HP", "32.000", "125.00", "25.00", "2.17700", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CPT", "CA", "130.000", "129.50", " ", " ", "atm, methylindole, 1/17/04"}, {"NY", "CPT", "CAI", "130.000", "129.50", " ", " ", "atm, methylindole, 1/17/04"}, {"NY", "CPT", "CPT", "95.000", "107.40", " ", " ", "atm, methylindole, 1/17/04"}, {"CA", "CA", "CA", "40.000", "120.00", "35.00", "2.41620", "JES 8/25/89"}, {"CE1", "CE1", "CT2", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CE1", "CT3", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CT2", "CT3", "32.00", "112.20", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "48.00", "126.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "47.00", "125.20", " ", " ", "for propene, yin/adm jr., 12/95"}, {"CP1", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "C", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CC", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CD", "50.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "CP1", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "100.000", "114.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "100.000", "111.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "130.000", "107.5000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR2", "CPH1", "130.000", "104.0000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR3", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"CT1", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT1", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 6/27/2012, for Thr with CT1 patch"}, {"CT1", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT1", "CT2", "CA", "51.800", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"CT1", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT1", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT1", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "CA", "CA", "45.800", "122.3000", " ", " ", "PARALLH19 (JES)"}, {"CT2", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT2", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT2", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2A", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C, for lactams, adm jr."}, {"CT2", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2A", "CT2", "CD", "52.000", "108.0000", " ", " ", " "}, {"CT2", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "CT2", "CT2", "58.350", "113.60", "11.16", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT3", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "NC2", "C", "62.300", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"CT2", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CA", "CA", "45.800", "122.3000", " ", " ", "toluene, adm jr., 3/7/92"}, {"CT3", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT3", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT3", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/09/92, for ALA cter"}, {"CT3", "CT1", "CT1", "53.350", "108.50", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT2", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CA", "51.800", "107.5000", " ", " ", "ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT3", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT3", "CT2", "CT2", "58.000", "115.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "NC2", "C", "62.300", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"CT3", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT3", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "S", "CT2", "34.000", "95.0000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"H", "NH1", "C", "34.000", "123.0000", " ", " ", "NMA Vib Modes (LK)"}, {"H", "NH1", "CT1", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT2", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT3", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH2", "CC", "50.000", "120.0000", " ", " ", "his, adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NH2", "H", "23.000", "120.0000", " ", " ", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NR1", "CPH1", "30.000", "125.50", "20.00", "2.15000", "his, adm jr., 6/27/90"}, {"H", "NR1", "CPH2", "30.000", "127.00", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "25.000", "126.00", "15.00", "2.13000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH2", "25.000", "126.00", "15.00", "2.09000", "his, adm jr., 6/27/90"}, {"H", "OH1", "CA", "65.000", "108.0000", " ", " ", "JES 8/25/89 phenol"}, {"H", "OH1", "CD", "55.000", "115.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "OH1", "CT1", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT2", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT3", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"HA2", "CP2", "CP1", "33.430", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP2", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP2", "CP3", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP2", "HA2", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "HA2", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CS", "CT3", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA2", "CS", "HA2", "35.500", "108.40", "14.00", "1.77500", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CS", "HA3", "35.500", "108.40", "14.00", "1.77500", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA1", "CT1", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA1", "CT1", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA1", "CT1", "CT1", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA1", "CT1", "CT2", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA1", "CT1", "CT3", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA1", "CT1", "HA1", "35.500", "109.00", "5.40", "1.80200", "based on HA CT2 HA"}, {"HA2", "CT2", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA2", "CT2", "CA", "49.300", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"HA2", "CT2", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA2", "CT2", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA2", "CT2", "CE1", "45.00", "111.50", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HA2", "CT2", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA2", "CT2", "CT1", "26.500", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA2", "CT2", "CT2", "26.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA2", "CT2", "CT3", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA2", "CT2", "HA2", "35.500", "109.00", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA3", "CT3", "CA", "49.300", "107.5000", " ", " ", "toluene, adm jr. 3/7/92"}, {"HA3", "CT3", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA3", "CT3", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA3", "CT3", "CE1", "42.00", "111.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HA3", "CT3", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA3", "CT3", "CS", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CT3", "CT1", "33.430", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA3", "CT3", "CT2", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "CT3", "37.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "HA3", "35.500", "108.40", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HE1", "CE1", "CE1", "52.00", "119.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CE2", "42.00", "118.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "40.00", "116.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "22.00", "117.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE1", "45.00", "120.50", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE2", "55.50", "120.50", " ", " ", "for ethene, yin/adm jr., 12/95"}, {"HE2", "CE2", "HE2", "19.00", "119.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HB1", "CP1", "C", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "CC", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "CD", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "CP2", "35.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CT1", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB1", "CT1", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB1", "CT1", "CT1", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "CT2", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "CT3", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB2", "CT2", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB2", "CT2", "HB2", "36.000", "115.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NC2", "C", "49.000", "120.0000", " ", " ", "35.3->49.0 GUANIDINIUM (KK)"}, {"HC", "NC2", "CT2", "40.400", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"HC", "NC2", "CT3", "40.400", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"HC", "NC2", "HC", "25.000", "120.0000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH2", "CT2", "50.000", "111.0000", " ", " ", "from HC NH2 CT3, neutral glycine, adm jr."}, {"HC", "NH2", "CT3", "50.000", "111.0000", " ", " ", "methylamine geom/freq, adm jr., 6/2/92"}, {"HC", "NH2", "HC", "39.000", "106.5000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH3", "CT1", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT2", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT3", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "HC", "44.000", "109.5000", " ", " ", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NP", "CP1", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "HC", "51.000", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "30.000", "120.00", "22.00", "2.15250", "JES 8/25/89 benzene"}, {"HR1", "CPH1", "CPH1", "22.000", "130.00", "15.00", "2.21500", "adm jr., 6/27/90, his"}, {"HR3", "CPH1", "CPH1", "25.000", "130.00", "20.00", "2.20000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "38.800", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "43.000", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "C", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CC", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CD", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CP2", "70.000", "110.8000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "HB1", "48.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "CP2", "70.000", "110.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "HA2", "48.000", "108.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "NC2", "40.000", "120.00", "70.00", "2.31", "mp2/6-311g** mgua vib data, adm jr., 1/04"}, {"NC2", "CT2", "CT2", "67.700", "107.5000", " ", " ", "arg, (DS)"}, {"NC2", "CT2", "HA2", "56.500", "107.5000", " ", " ", "mp2/6-311g** mgua vib data, adm jr., 1/04"}, {"NC2", "CT3", "HA3", "56.5000", "107.5000", " ", " ", "mp2/6-311g** mgua vib data, adm jr., 1/04"}, {"NH1", "C", "CP1", "80.000", "116.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT2", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT3", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "CT1", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CC", "50.000", "107.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH1", "CT1", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT1", "CT1", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT2", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT3", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "HB1", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "CC", "50.000", "107.0000", " ", " ", "adm jr. 5/20/92, for asn,asp,gln,glu and cters"}, {"NH1", "CT2", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT2", "CT2", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2, for lactams, adm jr."}, {"NH1", "CT2", "HA2", "51.500", "109.5000", " ", " ", "from NH1 CT3 HA, for lactams, adm jr."}, {"NH1", "CT2", "HB2", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT3", "HA3", "51.500", "109.5000", " ", " ", "NMA crystal (JCS)"}, {"NH2", "CC", "CP1", "80.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT1", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT2", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT3", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "HA1", "44.000", "111.00", "50.00", "1.98000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"NH2", "CT2", "HB2", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral glycine, adm jr."}, {"NH2", "CT2", "CD", "52.000", "108.0000", " ", " ", "CT2 CT2 CD, neutral glycine, adm jr."}, {"NH2", "CT2", "CT2", "67.700", "110.0000", " ", " ", "NH3 CT2 CT2, neutral lysine"}, {"NH2", "CT2", "HA2", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral lysine"}, {"NH2", "CT3", "HA3", "38.000", "109.50", "50.00", "2.14000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "C", "43.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT1", "CT1", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT2", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT3", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "HB1", "51.500", "107.5000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT2", "C", "43.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT2", "CD", "43.700", "110.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH3", "CT2", "CT2", "67.700", "110.0000", " ", " ", "methylammonium"}, {"NH3", "CT2", "CT3", "67.700", "110.0000", " ", " ", "ethylammonium"}, {"NH3", "CT2", "HA2", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "HB2", "51.500", "107.5000", " ", " ", "for use on NTER -- from NH3 CT2HA (JCS) -- (LK)"}, {"NH3", "CT3", "HA3", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "C", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CD", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "HB1", "51.500", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "HA2", "51.500", "109.1500", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "130.000", "106.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR1", "CPH1", "CT2", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "CT3", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "HR3", "25.000", "124.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH2", "HR1", "25.000", "122.50", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR2", "CPH1", "CPH1", "130.000", "110.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "45.800", "120.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR2", "CPH1", "HR3", "25.000", "120.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH2", "HR1", "25.000", "125.00", "20.00", "2.12000", "his, adm jr., 6/27/90"}, {"NR2", "CPH2", "NR1", "130.000", "112.5000", " ", " ", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CT2", "45.800", "122.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR3", "CPH1", "HR1", "22.000", "122.00", "15.00", "2.18000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "HR2", "32.000", "126.00", "25.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "NR3", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"O", "C", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT3", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "H", "50.000", "121.7000", " ", " ", "acetaldehyde (JCS)"}, {"O", "C", "N", "80.000", "122.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "80.000", "122.5000", " ", " ", "NMA Vib Modes (LK)"}, {"O", "CC", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT1", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT2", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT3", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "HA1", "44.000", "122.0000", " ", " ", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "CC", "NH2", "75.000", "122.50", "50.00", "2.37000", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "CP1", "70.000", "125.00", "20.00", "2.44200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OB", "CD", "CT1", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT2", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT3", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "CA", "40.000", "120.0000", " ", " ", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "40.000", "118.00", "50.00", "2.38800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT2", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT3", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "OC", "100.000", "124.00", "70.00", "2.22500", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CT2", "CT3", "65.000", "122.0000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT2", "HA2", "65.000", "118.3000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "HA3", "65.000", "118.3000", " ", " ", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "CA", "45.200", "120.0000", " ", " ", "PARALLH19 WITH [122.3] (JES)"}, {"OH1", "CD", "CT2", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "CT3", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "OB", "50.000", "123.00", "210.00", "2.26200", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CT1", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "HA1", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT2", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "HA2", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT3", "HA3", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OS", "CD", "CP1", "55.000", "109.00", "20.00", "2.32600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OS", "CD", "CT1", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT2", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT3", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "OB", "90.000", "125.90", "160.00", "2.25760", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OS", "CT2", "HA2", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"OS", "CT3", "HA3", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"S", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"S", "CT2", "CT2", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "CT3", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "HA2", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"S", "CT3", "HA3", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"SM", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "CT3", "58.000", "112.5000", " ", " ", "diethyldisulfide, as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "HA2", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "CT3", "HA3", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "SM", "CT2", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "55.000", "118.0000", " ", " ", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"SS", "CS", "HA2", "40.000", "112.3000", " ", " ", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"SS", "CS", "HA3", "40.000", "112.3000", " ", " ", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"O", "CD", "HR1", "75.000", "121.0000", " ", " ", "GLU/HSP, Zhu"}, {"NH1", "CT1", "CT2A", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2"}, {"HB1", "CT1", "CT2A", "35.000", "111.0000", " ", " ", "from HB1 CT1 CT2"}, {"CT2A", "CT1", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C"}, {"CT1", "CT2A", "HA2", "26.500", "110.1000", "22.53", "2.17900", "from HA2 CT2 CT1"}, {"CT1", "CT2A", "CT2", "58.350", "113.5000", "11.16", "2.56100", "from CT2 CT2 CT1"}, {"HA2", "CT2A", "HA2", "35.500", "109.0000", "5.40", "1.80200", "from HA2 CT2 HA2"}, {"HA2", "CT2A", "CT2", "26.500", "110.1000", "22.53", "2.17900", "from HA2 CT2 CT2"}, {"CT2A", "CT2", "HA2", "26.500", "110.1000", "22.53", "2.17900", "from HA2 CT2 CT2"}, {"CT2A", "CT2", "CC", "52.000", "108.0000", " ", " ", "from CT2 CT2 CC"}, {"CT1", "CT2A", "CPH1", "58.350", "113.0000", " ", " ", "from CT1 CT2 CPH1"}, {"HA2", "CT2A", "CPH1", "33.430", "109.5000", " ", " ", "from HA2 CT2 CPH1"}, {"CT2A", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "from CT2 CPH1 CPH1"}, {"CT2A", "CPH1", "NR3", "45.800", "122.0000", " ", " ", "from NR3 CPH1 CT2"}, {"CT1", "CT2A", "CC", "52.000", "108.0000", " ", " ", "from CT1 CT2 CC"}, {"HA2", "CT2A", "CC", "33.000", "109.5000", "30.00", "2.16300", "from HA2 CT2 CC"}, {"OC", "CC", "CT2A", "40.000", "118.0000", "50.00", "2.38800", "from OC CC CT2"}, {"NH3", "CT1", "CT2A", "67.700", "110.0000", " ", " ", "from NH3 CT1 CT2"}, {"CT2A", "CT1", "CD", "52.000", "108.0000", " ", " ", "from CT2 CT1 CD"}, {"NH2", "CT1", "CS", "67.700", "110.0000", " ", " ", "from NH2 CT1 CT2 , kevo"}, {"CS", "CT1", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C , kevo"}, {"CS", "CT1", "CC", "52.000", "108.0000", " ", " ", "from CT2 CT1 CC , kevo"}, {"CS", "CT1", "CD", "52.000", "108.0000", " ", " ", "from CT2 CT1 CD , kevo"}, {"HB1", "CT1", "CS", "35.000", "111.0000", " ", " ", "from HB1 CT1 CT2 , kevo"}, {"NH1", "CT1", "CS", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2 , kevo"}, {"NH3", "CT1", "CS", "67.700", "110.0000", " ", " ", "from NH3 CT1 CT2 , kevo"}, {"SS", "CS", "CT1", "55.000", "118.0000", " ", " ", "from SS CS CT3 , kevo"}, {"HA2", "CS", "CT1", "34.600", "110.10", "22.53", "2.17900", "from HA2 CS CT3 to be consistent with SS CS CT1, kevo"}, {"OC", "CT2", "CT1", "65.000", "122.0000", " ", " ", "from OC CT2 CT3 , kevo"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm36m_prot info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm36m_prot_dihedrals[706][8]= {{"NH2", "CT1", "C", "O", "0.0000", "1", "0.00", " "}, {"NH2", "CT2", "C", "O", "0.0000", "1", "0.00", "Neutral Gly Nterminus"}, {"NH2", "CT1", "C", "NH1", "0.0000", "1", "0.00", " "}, {"NH2", "CT2", "C", "NH1", "0.0000", "1", "0.00", "Neutral Gly Nterminus"}, {"H", "NH2", "CT1", "CT1", "0.0000", "1", "0.00", " "}, {"H", "NH2", "CT1", "C", "0.0000", "1", "0.00", " "}, {"H", "NH2", "CT2", "C", "0.0000", "1", "0.00", "Neutral Gly Nterminus"}, {"H", "NH2", "CT1", "HB1", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-HA"}, {"H", "NH2", "CT2", "HB2", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-HA, Neutral Gly Nterminus"}, {"H", "NH2", "CT1", "CT2", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-CT2"}, {"H", "NH2", "CT1", "CT3", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-CT2"}, {"CAI", "CA", "CA", "CAI", "3.1000", "2", "180.00", "from CA CA CA CA"}, {"CA", "CPT", "CPT", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CAI", "CPT", "CPT", "CAI", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CA", "CY", "CPT", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CA", "CY", "CPT", "CAI", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CA", "NY", "CPT", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CPT", "CA", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CA", "NY", "CPT", "CAI", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CPT", "CAI", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CAI", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CY", "CA", "5.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CPT", "CPT", "NY", "CA", "6.5000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CT3", "CY", "CPT", "CA", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT3", "CY", "CPT", "CAI", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT3", "CY", "CPT", "CPT", "3.0000", "2", "180.00", "atm, methylindole, meth"}, {"CT2", "CY", "CPT", "CA", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT2", "CY", "CPT", "CAI", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT2", "CY", "CPT", "CPT", "3.0000", "2", "180.00", "atm, methylindole, meth"}, {"CY", "CA", "NY", "CPT", "6.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CA", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CPT", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CAI", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CPT", "CAI", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CA", "CY", "0.0500", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CPT", "CA", "0.2000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CPT", "CAI", "0.2000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CPT", "CPT", "0.8500", "2", "180.00", "atm, methylindole, 1/17/04"}, {"HP", "CAI", "CA", "CA", "4.2000", "2", "180.00", "from HP CA CA CA"}, {"HP", "CA", "CA", "CPT", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CA", "CPT", "CPT", "3.0000", "2", "180.00", "JWK indole 05/14/91"}, {"HP", "CA", "CPT", "CY", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"HP", "CA", "CA", "CAI", "4.2000", "2", "180.00", "from HP CA CA CA"}, {"HP", "CA", "CAI", "CPT", "3.0000", "2", "180.00", "from HP CA CA CPT"}, {"HP", "CAI", "CA", "HP", "2.4000", "2", "180.00", "from HP CA CA HP"}, {"HP", "CAI", "CPT", "CPT", "3.0000", "2", "180.00", "from HP CA CPT CPT"}, {"HP", "CAI", "CPT", "CY", "4.0000", "2", "180.00", "from HP CA CPT CY, r6r5"}, {"HP", "CA", "CY", "CPT", "2.8000", "2", "180.00", "adm jr., 12/30/91, for jwk"}, {"HP", "CA", "CY", "CT3", "1.2000", "2", "180.00", "atm, methylindole"}, {"HP", "CA", "CY", "CT2", "1.2000", "2", "180.00", "atm, methylindole"}, {"HP", "CA", "NY", "CPT", "2.6000", "2", "180.00", "adm jr., 12/30/91, for jwk"}, {"HP", "CA", "NY", "H", "0.4000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CA", "HP", "1.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CA", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CAI", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CPT", "2.6000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CA", "CY", "CPT", "5.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"NY", "CA", "CY", "CT3", "2.5000", "2", "180.00", "atm, methylindole, from NY CA CY CT3"}, {"NY", "CA", "CY", "CT2", "2.5000", "2", "180.00", "atm, methylindole, from NY CA CY CT3"}, {"NY", "CA", "CY", "HP", "3.5000", "2", "180.00", "JWK indole 05/14/91"}, {"NY", "CPT", "CA", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04, r6r5"}, {"NY", "CPT", "CA", "HP", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole, r6r5"}, {"NY", "CPT", "CPT", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04, bfly"}, {"NY", "CPT", "CAI", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"NY", "CPT", "CAI", "HP", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole, r6r5"}, {"NY", "CPT", "CPT", "CAI", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04, bfly"}, {"NY", "CPT", "CPT", "CY", "6.5000", "2", "180.00", "JWK 05/14/91 fit to indole, r5 t1"}, {"CT3", "CT2", "CY", "CA", "0.3800", "2", "0.00", "trp, from ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CY", "CPT", "0.2500", "2", "180.00", "atm 1/14/04 3-ethylindole"}, {"CT3", "CT2", "CY", "CPT", "0.3000", "3", "0.00", "atm 1/14/04 3-ethylindole"}, {"HA3", "CT3", "CY", "CA", "0.0100", "3", "0.00", "atm, methylindole, 1/17/04"}, {"HA3", "CT3", "CY", "CPT", "0.2000", "3", "0.00", "atm, methylindole, 1/17/04"}, {"HA2", "CT2", "CY", "CA", "0.0100", "3", "0.00", "atm, methylindole, 1/17/04"}, {"HA2", "CT2", "CY", "CPT", "0.2000", "3", "0.00", "atm, methylindole, 1/17/04"}, {"X", "CS", "SS", "X", "0.0000", "3", "0.20", "methanethiol, HS S CT3 HA"}, {"C", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "CT2", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "N", "CP1", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CA", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89"}, {"CC", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CC", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CC", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CC", "CT2", "NH1", "C", "2.0000", "1", "180.00", "Based on Gly3 data from graf et al, RB 7/1/11"}, {"CD", "CP1", "N", "C", "0.0000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CD", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CD", "CT2", "NH1", "C", "2.0000", "1", "180.00", "Based on Gly3 data from graf et al, RB 7/1/11"}, {"CE1", "CE1", "CT3", "HA3", "0.0300", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "CT3", "0.5000", "1", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "CT3", "1.3000", "3", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "HA2", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "HA3", "0.0500", "3", "180.00", "for propene, yin/adm jr., 12/95"}, {"CP1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "C", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CC", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CP2", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR2", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR3", "CPH1", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CT1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT1", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT1", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT1", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT2", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT3", "1.6000", "1", "0.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "C", "NH1", "CT3", "2.5000", "2", "180.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"CT2", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT2", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR2 CPH2"}, {"CT2", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"CT2", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT2", "CT2", "CPH1", "CPH1", "0.4000", "1", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. ADM JR., 9/4/89"}, {"CT2", "CT2", "CT2", "CT2", "0.10", "2", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT2", "0.15", "4", "0.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT2", "0.10", "6", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT3", "0.10", "2", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT3", "0.15", "4", "0.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT3", "0.10", "6", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "NH1", "C", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C, for lactams, adm jr."}, {"CT2", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "SM", "SM", "CT2", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "C", "NH1", "CT2", "1.6000", "1", "0.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT2", "2.5000", "2", "180.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT3", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "CA", "CA", "CA", "3.1000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"CT3", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"CT3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT3", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT3", "CT2", "CA", "CA", "0.2300", "2", "180.00", "ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2000", "1", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2700", "2", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "S", "CT3", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "CT2", "S", "CT3", "0.3700", "3", "0.00", "DTN 8/24/90"}, {"CT3", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "S", "CT2", "CT2", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "S", "CT2", "CT2", "0.3700", "3", "0.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"H", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "CT1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CC", "0.0000", "1", "0.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"H", "NH1", "CT1", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT1", "CT1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "CC", "0.0000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"H", "NH1", "CT2", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT2", "CT2", "0.0000", "1", "0.00", "from H NH1 CT2 CT3, for lactams, adm jr."}, {"H", "NH1", "CT2", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH2", "CC", "CT1", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT2", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT3", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NR1", "CPH1", "CPH1", "1.0000", "2", "180.00", "his, adm jr., 7/20/89"}, {"H", "NR1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR3", "CPH1", "CPH1", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "CT2", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "NR3", "CPH1", "CT3", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "OH1", "CA", "CA", "0.9900", "2", "180.00", "phenol OH rot bar, 3.37 kcal/mole, adm jr. 3/7/92"}, {"H", "OH1", "CT1", "CT3", "1.3300", "1", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.1800", "2", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.3200", "3", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"HA1", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"HA2", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA1", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA2", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA2", "CT2", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA2", "CT2", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA2", "CT2", "S", "CT3", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HA3", "CT3", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA3", "CT3", "CS", "HA2", "0.1600", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CT3", "CS", "HA3", "0.1600", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CT3", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA3", "CT3", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA3", "CT3", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA3", "CT3", "S", "CT2", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HE1", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"CT3", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"HE1", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "HA2", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE1", "CE1", "CT2", "CT3", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "HA3", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE2", "CE2", "CE1", "CT2", "5.2000", "2", "180.00", "for butene, yin/adm jr., 12/95"}, {"HB1", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "N", "CP3", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "NP", "CP3", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CT1", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NH2", "CT2", "HB2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NH2", "CT2", "CD", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NH2", "CT2", "CT2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NH2", "CT2", "HA2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "HB1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "HA2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "CA", "4.2000", "2", "180.00", "JES 8/25/89 benzene"}, {"HP", "CA", "CA", "CT2", "4.2000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"HP", "CA", "CA", "CT3", "4.2000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"HP", "CA", "CA", "HP", "2.4000", "2", "180.00", "JES 8/25/89 benzene"}, {"HR1", "CPH1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "HR1", "1.0000", "2", "180.00", "his, adm jr., 6/27/90, his"}, {"HR1", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "NR3", "H", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR2", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "H", "0.0000", "2", "180.00", "his, adm jr., 6/27/90, YES, 0.0"}, {"HR3", "CPH1", "CPH1", "CT2", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "CT3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "HR3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "H", "1.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "CT3", "0.2400", "1", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.1500", "2", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.2700", "3", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "HA2", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "HA3", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB1", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT1", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT2", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT3", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "HB1", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "HB2", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "HA3", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"NH1", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB1", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "CT1", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT2", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT3", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "HB1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT1", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT2", "CT2", "0.0000", "1", "0.00", "from NH1 C CT1 CT2, for lactams, adm jr."}, {"NH1", "C", "CT2", "HA2", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "C", "CT2", "HB2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT2", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT3", "HA3", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB1", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT2", "HA2", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NH3", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT1", "C", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH3", "CT1", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NH3", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT2", "C", "NH1", "1.0000", "1", "0.00", "RB 1/07/11, based on graf et al Gly 3 N-ter J-couplings for PRES GLYP"}, {"NH3", "CT2", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NP", "CP1", "C", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "C", "NH1", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "NH2", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "HA2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT3", "HA3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH2", "NR2", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH1", "CPH1", "NR1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "HA2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH1", "CT3", "HA3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH2", "NR1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CPH1", "CT2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "CT3", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "HR1", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "NR3", "12.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "HA2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT3", "HA3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH2", "NR3", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH2", "NR3", "H", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"O", "C", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB1", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "CT1", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT2", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT3", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "HB1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT2", "CT2", "1.4000", "1", "0.00", "from O C CT1 CT2, for lactams, adm jr."}, {"O", "C", "CT2", "HA2", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "CT2", "HB2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT3", "HA3", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "H", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "CC", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB1", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT2", "HA2", "0.0000", "3", "180.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"O", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "OS", "CT2", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT2", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OC", "CA", "CA", "CA", "3.1000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CA", "CA", "HP", "4.2000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "CP2", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "HB1", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "N", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "NP", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OC", "CC", "CT2", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OH1", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 phenol"}, {"OH1", "CA", "CA", "HP", "4.2000", "2", "180.00", "JES 8/25/89 phenol"}, {"S", "CT2", "CT2", "HA2", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "CT2", "CT2", "HA2", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "SM", "CT2", "CT1", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "CT2", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "CT3", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "HA2", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "HA3", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "HA3", "0.1500", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"X", "C", "NC2", "X", "2.2500", "2", "180.00", "9.0->2.25 GUANIDINIUM (KK)"}, {"X", "CD", "OH1", "X", "2.0500", "2", "180.00", "adm jr, 10/17/90, acetic acid C-Oh rotation barrier"}, {"X", "CD", "OS", "X", "2.0500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CE1", "CE1", "X", "0.1500", "1", "0.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE1", "CE1", "X", "8.5000", "2", "180.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE2", "CE2", "X", "4.9000", "2", "180.00", "for ethene, yin/adm jr., 12/95"}, {"X", "CP1", "C", "X", "0.0000", "6", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP1", "CC", "X", "0.0000", "6", "180.00", "changed to 0.0 RLD 5/19/92"}, {"X", "CP1", "CD", "X", "0.0000", "6", "180.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"X", "CP1", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP2", "CP2", "X", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP3", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CT1", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT1", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT1", "CT1", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT2", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT3", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT1", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT1", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT2", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT2", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CT2", "X", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CT2", "CT3", "X", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CT2", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT2", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT2", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT2", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT3", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT3", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CT3", "X", "0.1525", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CT3", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT3", "NH2", "X", "0.1100", "3", "0.00", "methylamine geom/freq, adm jr., 6/2/92"}, {"X", "CT3", "NH3", "X", "0.0900", "3", "0.00", "fine-tuned to ab initio; METHYLAMMONIUM, KK 03/10/92"}, {"X", "CT3", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT3", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"NH1", "CT1", "CT1", "HA1", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HB1", "CT1", "CT1", "HA1", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HB1", "CT1", "CT1", "CT3", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HA1", "CT1", "CT1", "C", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"NH1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "OH1", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "CT2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2", "CT1", "C", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2", "OH1", "H", "0.1400", "3", "0.00", "From X CT2 OH1 X"}, {"CT1", "CT2", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2", "CT2", "CC", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HB1", "CT1", "CT2", "S", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT2", "CT2", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "CT2", "CT2", "NC2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "CT2", "NC2", "HC", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"CT2", "CT2", "NC2", "C", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"HA2", "CT2", "CT2", "NC2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "NC2", "C", "NC2", "2.2500", "2", "180.00", "From X C NC2 X"}, {"HA2", "CT2", "NC2", "HC", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"HA2", "CT2", "NC2", "C", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"NC2", "C", "NC2", "HC", "2.2500", "2", "180.00", "From X C NC2 X"}, {"HB1", "CT1", "CT2", "CC", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "CY", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2", "CC", "OC", "0.0500", "6", "180.00", "From X CT2 CC X"}, {"HB1", "CT1", "CT2", "CPH1", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT1", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", "From X CT1 CT3 X"}, {"CT1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT1", "CT2", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"CT1", "CT2", "CT3", "HA3", "0.1600", "3", "0.00", "From X CT2 CT3 X"}, {"HA1", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", "From X CT1 CT3 X"}, {"HA1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA1", "CT1", "CT2", "CT3", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT3", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT3", "CT1", "CT2", "CT3", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA3", "CT3", "CT1", "CT2", "0.2000", "3", "0.00", "From X CT1 CT3 X"}, {"HA2", "CT2", "CT3", "HA3", "0.1600", "3", "0.00", "From X CT2 CT3 X"}, {"CT1", "CT2", "CT1", "HA1", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "CT1", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT3", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", "From X CT1 CT3 X"}, {"CT2", "CT2", "CT2", "NH3", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "CT2", "NH3", "HC", "0.1000", "3", "0.00", "From X CT2 NH3 X"}, {"HA2", "CT2", "CT2", "NH3", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2", "NH3", "HC", "0.1000", "3", "0.00", "From X CT2 NH3 X"}, {"HB1", "CT1", "CT2", "CA", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2", "CA", "CA", "0.0000", "6", "0.00", "From X CT2 CA X"}, {"HB1", "CT1", "CT1", "OH1", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HA1", "CT1", "OH1", "H", "0.1400", "3", "0.00", "From X CT1 OH1 X"}, {"OH1", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", "From X CT1 CT3 X"}, {"CT2", "CT2", "CC", "O", "0.0500", "6", "180.00", "From X CT2 CC X"}, {"CT2", "CT2", "CC", "NH2", "0.0500", "6", "180.00", "From X CT2 CC X"}, {"CT2", "CT2", "CC", "OC", "0.0500", "6", "180.00", "From X CT2 CC X"}, {"NH1", "CT1", "CT2A", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"NH3", "CT1", "CT2A", "CT2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT1", "CT2A", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HB1", "CT1", "CT2A", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2A", "CT2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2A", "CT1", "C", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2A", "CT1", "CC", "0.2000", "3", "0.00", "RB: added for C-ter Glu"}, {"HA2", "CT2A", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2A", "CT2", "CC", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HB1", "CT1", "CT2A", "CPH1", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"C", "NH1", "CT1", "CT2A", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C"}, {"H", "NH1", "CT1", "CT2A", "0.0000", "1", "0.00", "from H NH1 CT1 CT2"}, {"CT2A", "CT1", "C", "O", "1.4000", "1", "0.00", "from O C CT1 CT2"}, {"CT2A", "CT1", "C", "NH1", "0.0000", "1", "0.00", "NH1 C CT1 CT2"}, {"CT2A", "CT1", "C", "N", "0.0000", "1", "0.00", "RB: added for GLU-PRO in UBQ"}, {"CT1", "CT2A", "CT2", "CD", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2A", "CT2", "CD", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2A", "CPH1", "CPH1", "HR1", "1.0000", "2", "180.00", "from HR1 CPH1 CPH1 CT2"}, {"CT2A", "CPH1", "CPH1", "NR3", "2.5000", "2", "180.00", "from NR3 CPH1 CPH1 CT2"}, {"CT2A", "CPH1", "NR3", "H", "3.0000", "2", "180.00", "from H NR3 CPH1 CT2"}, {"CT2A", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "from CT2 CPH1 NR3 CPH2"}, {"HA2", "CT2A", "CPH1", "CPH1", "0.0000", "3", "0.00", "from HA2 CT2 CPH1 CPH1"}, {"HA2", "CT2A", "CPH1", "NR3", "0.1900", "3", "0.00", "from NR3 CPH1 CT2 HA2"}, {"C", "CT1", "CT2", "CT2", "0.3500", "1", "180.00", " "}, {"C", "CT1", "CT2", "CT2", "0.4200", "2", "180.00", " "}, {"C", "CT1", "CT2", "CT2", "1.9100", "3", "180.00", " "}, {"CT2", "CT2", "CT1", "NH1", "0.8800", "1", "180.00", " "}, {"CT2", "CT2", "CT1", "NH1", "0.0000", "2", "180.00", " "}, {"CT2", "CT2", "CT1", "NH1", "1.9000", "3", "0.00", " "}, {"CC", "CT2", "CT2", "CT1", "1.8400", "1", "180.00", " "}, {"CC", "CT2", "CT2", "CT1", "0.8400", "2", "180.00", " "}, {"CC", "CT2", "CT2", "CT1", "0.3900", "3", "180.00", " "}, {"CT1", "CT2", "CT2", "CT2", "0.6300", "1", "180.00", " "}, {"CT1", "CT2", "CT2", "CT2", "0.0100", "2", "0.00", " "}, {"CT1", "CT2", "CT2", "CT2", "0.1500", "3", "0.00", " "}, {"CT1", "CT2", "CT2", "S", "0.1400", "1", "180.00", " "}, {"CT1", "CT2", "CT2", "S", "0.5400", "2", "0.00", " "}, {"CT1", "CT2", "CT2", "S", "0.6900", "3", "0.00", "Fitted Asn"}, {"C", "CT1", "CT2", "CC", "1.4100", "1", "180.00", " "}, {"C", "CT1", "CT2", "CC", "1.2900", "2", "180.00", " "}, {"C", "CT1", "CT2", "CC", "0.5900", "3", "180.00", " "}, {"CC", "CT2", "CT1", "NH1", "0.2800", "1", "180.00", " "}, {"CC", "CT2", "CT1", "NH1", "0.5000", "2", "180.00", " "}, {"CC", "CT2", "CT1", "NH1", "0.3800", "3", "0.00", " "}, {"CT1", "CT2", "CC", "NH2", "0.6200", "1", "180.00", " "}, {"CT1", "CT2", "CC", "NH2", "0.6600", "2", "180.00", " "}, {"CT1", "CT2", "CC", "NH2", "0.7200", "3", "180.00", " "}, {"CT1", "CT2", "CC", "O", "0.4200", "1", "180.00", " "}, {"CT1", "CT2", "CC", "O", "0.1500", "2", "180.00", " "}, {"CT1", "CT2", "CC", "O", "0.9500", "3", "180.00", "Fitted Asp"}, {"C", "CT1", "CT2A", "CC", "1.6100", "1", "180.00", " "}, {"C", "CT1", "CT2A", "CC", "1.2900", "2", "180.00", " "}, {"C", "CT1", "CT2A", "CC", "0.5900", "3", "180.00", " "}, {"CC", "CT2A", "CT1", "NH1", "0.6800", "1", "180.00", " "}, {"CC", "CT2A", "CT1", "NH1", "0.1000", "2", "180.00", " "}, {"CC", "CT2A", "CT1", "NH1", "0.3800", "3", "0.00", " "}, {"CT1", "CT2A", "CC", "OC", "0.8400", "1", "0.00", " "}, {"CT1", "CT2A", "CC", "OC", "0.9800", "2", "180.00", " "}, {"CT1", "CT2A", "CC", "OC", "1.4600", "3", "0.00", "Fitted Cys"}, {"CT1", "CT2", "S", "HS", "0.2000", "1", "0.00", " "}, {"CT1", "CT2", "S", "HS", "0.6500", "2", "0.00", " "}, {"CT1", "CT2", "S", "HS", "0.2200", "3", "0.00", " "}, {"C", "CT1", "CT2", "S", "0.2400", "1", "180.00", " "}, {"C", "CT1", "CT2", "S", "0.7500", "2", "180.00", " "}, {"C", "CT1", "CT2", "S", "1.3500", "3", "180.00", " "}, {"NH1", "CT1", "CT2", "S", "0.3400", "1", "0.00", " "}, {"NH1", "CT1", "CT2", "S", "0.5000", "2", "180.00", " "}, {"NH1", "CT1", "CT2", "S", "1.4300", "3", "0.00", "Fitted Glu"}, {"CC", "CT2", "CT2A", "CT1", "0.0000", "1", "180.00", " "}, {"CC", "CT2", "CT2A", "CT1", "0.3800", "2", "180.00", " "}, {"CC", "CT2", "CT2A", "CT1", "0.5900", "3", "180.00", " "}, {"C", "CT1", "CT2A", "CT2", "0.1100", "1", "0.00", " "}, {"C", "CT1", "CT2A", "CT2", "0.9800", "2", "180.00", " "}, {"C", "CT1", "CT2A", "CT2", "1.6000", "3", "180.00", " "}, {"CC", "CT1", "CT2A", "CT2", "1.6000", "3", "180.00", " "}, {"CT2", "CT2A", "CT1", "NH1", "0.3000", "1", "0.00", " "}, {"CT2", "CT2A", "CT1", "NH1", "0.3500", "2", "0.00", " "}, {"CT2", "CT2A", "CT1", "NH1", "1.7600", "3", "0.00", "Group-fitted for Hsd/Hse"}, {"CPH1", "CPH1", "CT2", "CT1", "1.7400", "1", "0.00", " "}, {"CPH1", "CPH1", "CT2", "CT1", "0.1500", "2", "0.00", " "}, {"CPH1", "CPH1", "CT2", "CT1", "0.7700", "3", "180.00", " "}, {"CT1", "CT2", "CPH1", "NR1", "1.4900", "1", "0.00", " "}, {"CT1", "CT2", "CPH1", "NR1", "0.0900", "2", "180.00", " "}, {"CT1", "CT2", "CPH1", "NR1", "0.7900", "3", "180.00", " "}, {"CT1", "CT2", "CPH1", "NR2", "1.0900", "1", "0.00", " "}, {"CT1", "CT2", "CPH1", "NR2", "0.0900", "2", "0.00", " "}, {"CT1", "CT2", "CPH1", "NR2", "0.6700", "3", "180.00", " "}, {"C", "CT1", "CT2", "CPH1", "0.1800", "1", "180.00", " "}, {"C", "CT1", "CT2", "CPH1", "0.6400", "2", "180.00", " "}, {"C", "CT1", "CT2", "CPH1", "0.8700", "3", "180.00", " "}, {"CPH1", "CT2", "CT1", "NH1", "0.0000", "1", "0.00", " "}, {"CPH1", "CT2", "CT1", "NH1", "0.0000", "2", "180.00", " "}, {"CPH1", "CT2", "CT1", "NH1", "0.9000", "3", "0.00", "Fitted Hsp"}, {"CPH1", "CPH1", "CT2A", "CT1", "2.0400", "1", "0.00", " "}, {"CPH1", "CPH1", "CT2A", "CT1", "0.4400", "2", "0.00", " "}, {"CPH1", "CPH1", "CT2A", "CT1", "0.1300", "3", "180.00", " "}, {"CT1", "CT2A", "CPH1", "NR3", "0.5300", "1", "180.00", " "}, {"CT1", "CT2A", "CPH1", "NR3", "0.4200", "2", "180.00", " "}, {"CT1", "CT2A", "CPH1", "NR3", "0.3000", "3", "180.00", " "}, {"C", "CT1", "CT2A", "CPH1", "1.7500", "1", "180.00", " "}, {"C", "CT1", "CT2A", "CPH1", "0.1300", "2", "0.00", " "}, {"C", "CT1", "CT2A", "CPH1", "1.8600", "3", "180.00", " "}, {"CPH1", "CT2A", "CT1", "NH1", "1.0900", "1", "180.00", " "}, {"CPH1", "CT2A", "CT1", "NH1", "0.2200", "2", "180.00", " "}, {"CPH1", "CT2A", "CT1", "NH1", "2.3200", "3", "0.00", "Group-fitted for Ile/Thr"}, {"CT1", "CT1", "CT2", "CT3", "0.3800", "1", "180.00", " "}, {"CT1", "CT1", "CT2", "CT3", "0.1300", "2", "180.00", " "}, {"CT1", "CT1", "CT2", "CT3", "0.2900", "3", "180.00", " "}, {"C", "CT1", "CT1", "CT2", "0.1000", "1", "180.00", " "}, {"C", "CT1", "CT1", "CT2", "0.5200", "2", "180.00", " "}, {"C", "CT1", "CT1", "CT2", "0.2900", "3", "180.00", " "}, {"CT2", "CT1", "CT1", "NH1", "0.1200", "1", "180.00", " "}, {"CT2", "CT1", "CT1", "NH1", "0.3600", "2", "180.00", " "}, {"CT2", "CT1", "CT1", "NH1", "0.4100", "3", "0.00", "Fitted Leu"}, {"CT1", "CT2", "CT1", "CT3", "0.0500", "1", "0.00", " "}, {"CT1", "CT2", "CT1", "CT3", "0.1000", "2", "180.00", " "}, {"CT1", "CT2", "CT1", "CT3", "0.0100", "3", "180.00", " "}, {"C", "CT1", "CT2", "CT1", "0.3200", "1", "180.00", " "}, {"C", "CT1", "CT2", "CT1", "0.6100", "2", "180.00", " "}, {"C", "CT1", "CT2", "CT1", "0.7200", "3", "180.00", " "}, {"CT1", "CT2", "CT1", "NH1", "0.4800", "1", "180.00", " "}, {"CT1", "CT2", "CT1", "NH1", "0.4200", "2", "180.00", " "}, {"CT1", "CT2", "CT1", "NH1", "0.6500", "3", "0.00", "Group-fitted for Phe/Tyr"}, {"CA", "CA", "CT2", "CT1", "1.0700", "1", "0.00", " "}, {"CA", "CA", "CT2", "CT1", "0.2400", "2", "180.00", " "}, {"CA", "CA", "CT2", "CT1", "0.1700", "3", "180.00", " "}, {"C", "CT1", "CT2", "CA", "1.2800", "1", "180.00", " "}, {"C", "CT1", "CT2", "CA", "0.9400", "2", "180.00", " "}, {"C", "CT1", "CT2", "CA", "1.5700", "3", "180.00", " "}, {"CA", "CT2", "CT1", "NH1", "0.5200", "1", "180.00", " "}, {"CA", "CT2", "CT1", "NH1", "0.6200", "2", "180.00", " "}, {"CA", "CT2", "CT1", "NH1", "1.5800", "3", "0.00", "Fitted Ser"}, {"CT1", "CT2", "OH1", "H", "0.0200", "1", "0.00", " "}, {"CT1", "CT2", "OH1", "H", "0.5600", "2", "0.00", " "}, {"CT1", "CT2", "OH1", "H", "0.4900", "3", "0.00", " "}, {"C", "CT1", "CT2", "OH1", "0.6500", "1", "180.00", " "}, {"C", "CT1", "CT2", "OH1", "0.2500", "2", "180.00", " "}, {"C", "CT1", "CT2", "OH1", "1.1700", "3", "180.00", " "}, {"NH1", "CT1", "CT2", "OH1", "0.1800", "1", "180.00", " "}, {"NH1", "CT1", "CT2", "OH1", "0.1900", "2", "180.00", " "}, {"NH1", "CT1", "CT2", "OH1", "1.4600", "3", "0.00", "Group-fitted for Ile/Thr"}, {"CT1", "CT1", "OH1", "H", "0.1800", "1", "0.00", " "}, {"CT1", "CT1", "OH1", "H", "0.0600", "2", "0.00", " "}, {"CT1", "CT1", "OH1", "H", "0.2500", "3", "0.00", " "}, {"C", "CT1", "CT1", "OH1", "0.7900", "1", "180.00", " "}, {"C", "CT1", "CT1", "OH1", "0.3900", "2", "180.00", " "}, {"C", "CT1", "CT1", "OH1", "0.9900", "3", "180.00", " "}, {"NH1", "CT1", "CT1", "OH1", "0.0900", "1", "0.00", " "}, {"NH1", "CT1", "CT1", "OH1", "0.1900", "2", "180.00", " "}, {"NH1", "CT1", "CT1", "OH1", "0.1700", "3", "0.00", "Fitted Trp"}, {"CA", "CY", "CT2", "CT1", "0.0300", "1", "0.00", " "}, {"CA", "CY", "CT2", "CT1", "0.5500", "2", "0.00", " "}, {"CA", "CY", "CT2", "CT1", "0.3900", "3", "180.00", " "}, {"CPT", "CY", "CT2", "CT1", "0.3600", "1", "180.00", " "}, {"CPT", "CY", "CT2", "CT1", "0.0500", "2", "0.00", " "}, {"CPT", "CY", "CT2", "CT1", "0.1900", "3", "180.00", " "}, {"C", "CT1", "CT2", "CY", "1.0900", "1", "180.00", " "}, {"C", "CT1", "CT2", "CY", "0.5000", "2", "180.00", " "}, {"C", "CT1", "CT2", "CY", "1.1700", "3", "180.00", " "}, {"CY", "CT2", "CT1", "NH1", "0.2900", "1", "180.00", " "}, {"CY", "CT2", "CT1", "NH1", "0.6600", "2", "180.00", " "}, {"CY", "CT2", "CT1", "NH1", "1.1700", "3", "0.00", "Fitted Val"}, {"C", "CT1", "CT1", "CT3", "0.1400", "1", "180.00", " "}, {"C", "CT1", "CT1", "CT3", "0.2600", "2", "180.00", " "}, {"C", "CT1", "CT1", "CT3", "0.3300", "3", "180.00", " "}, {"CT3", "CT1", "CT1", "NH1", "0.1800", "1", "0.00", " "}, {"CT3", "CT1", "CT1", "NH1", "0.0600", "2", "0.00", " "}, {"CT3", "CT1", "CT1", "NH1", "0.5900", "3", "0.00", "CT2->CT2A, jshim"}, {"H", "NH1", "CT2A", "CC", "0.0000", "1", "0.00", " "}, {"X", "CT2A", "CC", "X", "0.0500", "6", "180.00", " "}, {"HB1", "CT1", "CT2A", "CC", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CC", "OC", "0.0500", "6", "180.00", " "}, {"NH3", "CT1", "CT2A", "HA2", "0.2000", "3", "0.00", " "}, {"NH3", "CT1", "CT2A", "CC", "0.2000", "3", "0.00", " "}, {"CC", "CT2A", "CT1", "CC", "0.2000", "3", "0.00", "specific terms"}, {"CPH1", "CT2A", "CT1", "CC", "0.2000", "3", "0.00", " "}, {"CPH1", "CT2A", "CT1", "NH3", "0.2000", "3", "0.00", " "}, {"CPH1", "CT2A", "CT1", "CD", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CT1", "CD", "0.2000", "3", "0.00", " "}, {"CT2", "CT2A", "CT1", "CD", "0.2000", "3", "0.00", "RESI CYSM and PRES CYSD"}, {"H", "NH2", "CT1", "CS", "0.1100", "3", "0.00", "from H NH2 CT1 CT2 or H NH2 CT1 CT2 , kevo"}, {"CS", "CT1", "NH1", "C", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C or CT2A CT1 NH1 C , kevo"}, {"H", "NH1", "CT1", "CS", "0.0000", "1", "0.00", "from H NH1 CT1 CT2 or H NH1 CT1 CT2 , kevo"}, {"N", "C", "CT1", "CS", "0.0000", "1", "0.00", "from N C CT1 CT2 or N C CT1 CT2 , kevo"}, {"NH1", "C", "CT1", "CS", "0.0000", "1", "0.00", "from NH1 C CT1 CT2 or NH1 C CT1 CT2 , kevo"}, {"O", "C", "CT1", "CS", "1.4000", "1", "0.00", "from O C CT1 CT2 or O C CT1 CT2 , kevo"}, {"HA2", "CS", "CT1", "C", "0.2000", "3", "0.00", "from HA2 CT2 CT1 C or HA2 CT2A CT1 C , kevo"}, {"NH1", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from NH1 CT1 CT2 HA2 or NH1 CT1 CT2A HA2 , kevo"}, {"HB1", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from HB1 CT1 CT2 HA2 or HB1 CT1 CT2A HA2 , kevo"}, {"HB1", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from HB1 CT1 CT2 S or HB1 CT1 CT2A S , kevo"}, {"C", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH1", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH3", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH3", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH2", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH2", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CC", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CC", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CD", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CD", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH1", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH2", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH3", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"C", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CC", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CD", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"HB1", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm36m_prot info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm36m_prot_impropers[35][8]= {{"HE2", "HE2", "CE2", "CE2", "3.0", "0", "0.00", "for ethene, yin/adm jr., 12/95"}, {"HR1", "NR1", "NR2", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR1", "NR2", "NR1", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR3", "CPH1", "NR1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR3", "CPH1", "1.0000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR1", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR2", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "CP1", "CP3", "0.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"NC2", "X", "X", "C", "45.0000", "0", "0.0000", "mp2/6-311g** guan vibrational data, adm jr., 1/04"}, {"C", "HC", "HC", "NC2", "0.0", "0", "0.0", "mp2/6-311g** guan vibrational data, adm jr., 1/04"}, {"NC2", "X", "X", "HC", "-2.0", "0", "0.0", "mp2/6-311g** guan vibrational data, adm jr., 1/04"}, {"NH1", "X", "X", "H", "20.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"NH2", "X", "X", "H", "4.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NR1", "CPH1", "CPH2", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR1", "CPH2", "CPH1", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR3", "CPH1", "CPH2", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "CPH1", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"O", "CP1", "NH2", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "CT1", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT2", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT3", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "HA1", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "N", "CT2", "CC", "120.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CP1", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CT1", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT3", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "HA1", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "X", "X", "C", "120.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"OB", "X", "X", "CD", "100.0000", "0", "0.0000", "adm jr., 10/17/90, acetic acid vibrations"}, {"OC", "X", "X", "CC", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT1", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT2", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT3", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm36m_prot info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm36m_prot_vdw[53][6]= {{"C", "-0.110000", "2.000000", " ", " ", " "}, {"CA", "-0.070000", "1.992400", " ", " ", " "}, {"CC", "-0.070000", "2.000000", " ", " ", " "}, {"CD", "-0.070000", "2.000000", " ", " ", " "}, {"CE1", "-0.068000", "2.090000", " ", " ", " "}, {"CE2", "-0.064000", "2.080000", " ", " ", " "}, {"CP1", "-0.020000", "2.275000", "-0.010000", "1.900000", " "}, {"CP2", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CP3", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CPH1", "-0.050000", "1.800000", " ", " ", " "}, {"CPH2", "-0.050000", "1.800000", " ", " ", " "}, {"CS", "-0.110000", "2.200000", " ", " ", " "}, {"CPT", "-0.099000", "1.860000", " ", " ", " "}, {"CY", "-0.073000", "1.990000", " ", " ", " "}, {"CAI", "-0.073000", "1.990000", " ", " ", " "}, {"CT", "-0.0200", "2.275", "-0.01", "1.9", " "}, {"CT1", "-0.0320", "2.000", "-0.01", "1.9", " "}, {"CT2", "-0.0560", "2.010", "-0.01", "1.9", " "}, {"CT2A", "-0.0560", "2.010", "-0.01", "1.9", " "}, {"CT3", "-0.0780", "2.040", "-0.01", "1.9", " "}, {"H", "-0.046000", "0.224500", " ", " ", " "}, {"HA", "-0.022000", "1.320000", " ", " ", " "}, {"HB1", "-0.022000", "1.320000", " ", " ", " "}, {"HB2", "-0.028000", "1.340000", " ", " ", " "}, {"HE1", "-0.031000", "1.250000", " ", " ", " "}, {"HE2", "-0.026000", "1.260000", " ", " ", " "}, {"HC", "-0.046000", "0.224500", " ", " ", " "}, {"HP", "-0.030000", "1.358200", "-0.030000", "1.358200", " "}, {"HR1", "-0.046000", "0.900000", " ", " ", " "}, {"HR2", "-0.046000", "0.700000", " ", " ", " "}, {"HR3", "-0.007800", "1.468000", " ", " ", " "}, {"HS", "-0.100000", "0.450000", " ", " ", " "}, {"HA1", "-0.045", "1.3400", " ", " ", " "}, {"HA2", "-0.034", "1.3400", " ", " ", " "}, {"HA3", "-0.024", "1.3400", " ", " ", " "}, {"N", "-0.200000", "1.850000", "-0.000100", "1.850000", " "}, {"NC2", "-0.200000", "1.850000", " ", " ", " "}, {"NH1", "-0.200000", "1.850000", "-0.200000", "1.550000", " "}, {"NH2", "-0.200000", "1.850000", " ", " ", " "}, {"NH3", "-0.200000", "1.850000", " ", " ", " "}, {"NP", "-0.200000", "1.850000", " ", " ", " "}, {"NR1", "-0.200000", "1.850000", " ", " ", " "}, {"NR2", "-0.200000", "1.850000", " ", " ", " "}, {"NR3", "-0.200000", "1.850000", " ", " ", " "}, {"NY", "-0.200000", "1.850000", " ", " ", " "}, {"O", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OB", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OC", "-0.120000", "1.700000", " ", " ", " "}, {"OH1", "-0.152100", "1.770000", " ", " ", " "}, {"OS", "-0.152100", "1.770000", " ", " ", " "}, {"S", "-0.450000", "2.000000", " ", " ", " "}, {"SM", "-0.380000", "1.975000", " ", " ", " "}, {"SS", "-0.470000", "2.200000", " ", " ", " "}}; atomes_1.3.1/src/calc/force_fields/amber96.c0000664000175000017500000013145015212624223020237 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file amber96.c * @short Amber-96 force field, from 'parm96' * @author Sébastien Le Roux */ /* * This file: 'amber96.c' * * Contains: * Amber-96 force field, data from taken from: - the file: 'parm96' This file contains several tables: Atoms : amber96_atoms[54][4] Equi vdw : amber96_equi[2][12] Bonds : amber96_bonds[83][5] Angles : amber96_angles[191][6] Dihedrals : amber96_dihedrals[81][9] Impropers : amber96_impropers[31][8] Non bonded : amber96_vdw[35][4] */ #include "global.h" int amber96_objects[14] = {54, 2, 0, 83, 0, 0, 191, 0, 81, 0 , 0, 31, 35, 0}; int amber96_dim[14] = {4, 12, 0, 5, 0, 0, 6, 0, 9, 0, 0, 8, 4, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= Amber_96 info */ char * amber96_atoms[54][4]= {{"Br", "79.90", "BR", "! bromine"}, {"C", "12.01", "C", "sp2 C carbonyl group"}, {"C", "12.01", "CA", "sp2 C pure aromatic (benzene)"}, {"C", "12.01", "CB", "sp2 aromatic C, 5 and 6 membered ring junction"}, {"C", "12.01", "CC", "sp2 aromatic C, 5 memb. ring HIS"}, {"C", "12.01", "CK", "sp2 C 5 memb.ring in purines"}, {"C", "12.01", "CM", "sp2 C pyrimidines in pos. 5 and 6"}, {"C", "12.01", "CN", "sp2 C aromatic 5 and 6 memb.ring junct.(TRP)"}, {"C", "12.01", "CQ", "sp2 C in 5 mem.ring of purines between 2 N"}, {"C", "12.01", "CR", "sp2 arom as CQ but in HIS"}, {"C", "12.01", "CT", "sp3 aliphatic C"}, {"C", "12.01", "CV", "sp2 arom. 5 memb.ring w/1 N and 1 H (HIS)"}, {"C", "12.01", "CW", "sp2 arom. 5 memb.ring w/1 N-H and 1 H (HIS)"}, {"C", "12.01", "C*", "sp2 arom. 5 memb.ring w/1 subst. (TRP)"}, {"Ca", "40.08", "C0", "calcium"}, {"F", "19.00", "F", "fluorine"}, {"H", "1.008", "H", "H bonded to nitrogen atoms"}, {"H", "1.008", "HC", "H aliph. bond. to C without electrwd.group"}, {"H", "1.008", "H1", "H aliph. bond. to C with 1 electrwd. group"}, {"H", "1.008", "H2", "H aliph. bond. to C with 2 electrwd.groups"}, {"H", "1.008", "H3", "H aliph. bond. to C with 3 eletrwd.groups"}, {"H", "1.008", "HA", "H arom. bond. to C without elctrwd. groups"}, {"H", "1.008", "H4", "H arom. bond. to C with 1 electrwd. group"}, {"H", "1.008", "H5", "H arom. bond. to C with 2 electrwd. groups"}, {"H", "1.008", "HO", "hydroxyl group"}, {"H", "1.008", "HS", "hydrogen bonded to sulphur"}, {"H", "1.008", "HW", "H in TIP3P water"}, {"H", "1.008", "HP", "H bonded to C next to positively charged gr"}, {"I", "126.9", "I", "iodine"}, {"I", "35.45", "IM", "assumed to be Cl-"}, {"I", "22.99", "IP", "assumed to be Na+"}, {"I", "131.0", "IB", "'big ion w/ waters' for vacuum (Na+, 6H2O)"}, {"Mg", "24.305", "MG", "magnesium"}, {"N", "14.01", "N", "sp2 nitrogen in amide groups"}, {"N", "14.01", "NA", "sp2 N in 5 memb.ring w/H atom (HIS)"}, {"N", "14.01", "NB", "sp2 N in 5 memb.ring w/LP (HIS,ADE,GUA)"}, {"N", "14.01", "NC", "sp2 N in 6 memb.ring w/LP (ADE,GUA)"}, {"N", "14.01", "N2", "sp2 N in amino groups"}, {"N", "14.01", "N3", "sp3 N for charged amino groups (Lys, etc)"}, {"N", "14.01", "N*", "sp2 N"}, {"O", "16.00", "O", "carbonyl group oxygen"}, {"O", "16.00", "OW", "oxygen in TIP3P water"}, {"O", "16.00", "OH", "oxygen in hydroxyl group"}, {"O", "16.00", "OS", "ether and ester oxygen"}, {"O", "16.00", "O2", "carboxyl and phosphate group oxygen"}, {"P", "30.97", "P", "phosphate"}, {"S", "32.06", "S", "sulphur in disulfide linkage"}, {"S", "32.06", "SH", "sulphur in cystine"}, {"Cu", "63.55", "CU", "copper"}, {"Fe", "55.00", "FE", "iron"}, {"Li", "6.94", "Li", "lithium"}, {"K", "39.10", "K", "potassium"}, {"Rb", "85.47", "Rb", "rubidium"}, {"Cs", "132.91", "Cs", "cesium"}}; /* Non-bonded equivalence 0= Key_a, then equi with Key_a */ char * amber96_equi[2][12]= {{"N", "NA", "N2", "N*", "NC", "NB", " ", " ", " ", " ", " ", " "}, {"C", "C*", "CA", "CB", "CC", "CN", "CM", "CK", "CQ", "CW", "CV", "CR"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= Kb (kcal mol^-1 A^2), 3= R0 (A), 4= amber96 info V(R) = Kb x (R - R0)^2 */ char * amber96_bonds[83][5]= {{"OW", "HW", "553.0", "0.9572", "! TIP3P water"}, {"HW", "HW", "553.0", "1.5136", "TIP3P water"}, {"C", "CA", "469.0", "1.409", "JCC,7,(1986),230; TYR"}, {"C", "CB", "447.0", "1.419", "JCC,7,(1986),230; GUA"}, {"C", "CM", "410.0", "1.444", "JCC,7,(1986),230; THY,URA"}, {"C", "CT", "317.0", "1.522", "JCC,7,(1986),230; AA"}, {"C", "N*", "424.0", "1.383", "JCC,7,(1986),230; CYT,URA"}, {"C", "NA", "418.0", "1.388", "JCC,7,(1986),230; GUA.URA"}, {"C", "NC", "457.0", "1.358", "JCC,7,(1986),230; CYT"}, {"C", "O", "570.0", "1.229", "JCC,7,(1986),230; AA,CYT,GUA,THY,URA"}, {"C", "O2", "656.0", "1.250", "JCC,7,(1986),230; GLU,ASP"}, {"C", "OH", "450.0", "1.364", "JCC,7,(1986),230; TYR"}, {"CA", "CA", "469.0", "1.400", "JCC,7,(1986),230; BENZENE,PHE,TRP,TYR"}, {"CA", "CB", "469.0", "1.404", "JCC,7,(1986),230; ADE,TRP"}, {"CA", "CM", "427.0", "1.433", "JCC,7,(1986),230; CYT"}, {"CA", "CT", "317.0", "1.510", "JCC,7,(1986),230; PHE,TYR"}, {"CA", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; PHE,TRP,TYR"}, {"CA", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; no assigned"}, {"CA", "N2", "481.0", "1.340", "JCC,7,(1986),230; ARG,CYT,GUA"}, {"CA", "NA", "427.0", "1.381", "JCC,7,(1986),230; GUA"}, {"CA", "NC", "483.0", "1.339", "JCC,7,(1986),230; ADE,CYT,GUA"}, {"CB", "CB", "520.0", "1.370", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "N*", "436.0", "1.374", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NB", "414.0", "1.391", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NC", "461.0", "1.354", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE,GUA"}, {"CK", "N*", "440.0", "1.371", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "NB", "529.0", "1.304", "JCC,7,(1986),230; ADE,GUA"}, {"CM", "CM", "549.0", "1.350", "JCC,7,(1986),230; CYT,THY,URA"}, {"CM", "CT", "317.0", "1.510", "JCC,7,(1986),230; THY"}, {"CM", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; not assigned"}, {"CM", "N*", "448.0", "1.365", "JCC,7,(1986),230; CYT,THY,URA"}, {"CQ", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE"}, {"CQ", "NC", "502.0", "1.324", "JCC,7,(1986),230; ADE"}, {"CT", "CT", "310.0", "1.526", "JCC,7,(1986),230; AA, SUGARS"}, {"CT", "HC", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, SUGARS"}, {"CT", "H1", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, RIBOSE"}, {"CT", "H2", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; SUGARS"}, {"CT", "H3", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; not assigned"}, {"CT", "HP", "340.0", "1.090", "changed from 331; AA-lysine, methyl ammonium cation"}, {"CT", "N*", "337.0", "1.475", "JCC,7,(1986),230; ADE,CYT,GUA,THY,URA"}, {"CT", "N2", "337.0", "1.463", "JCC,7,(1986),230; ARG"}, {"CT", "OH", "320.0", "1.410", "JCC,7,(1986),230; SUGARS"}, {"CT", "OS", "320.0", "1.410", "JCC,7,(1986),230; NUCLEIC ACIDS"}, {"H", "N2", "434.0", "1.010", "JCC,7,(1986),230; ADE,CYT,GUA,ARG"}, {"H", "N*", "434.0", "1.010", "for plain unmethylated bases ADE,CYT,GUA,ARG"}, {"H", "NA", "434.0", "1.010", "JCC,7,(1986),230; GUA,URA,HIS"}, {"HO", "OH", "553.0", "0.960", "JCC,7,(1986),230; SUGARS,SER,TYR"}, {"HO", "OS", "553.0", "0.960", "JCC,7,(1986),230; NUCLEOTIDE ENDS"}, {"O2", "P", "525.0", "1.480", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OH", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OS", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"C*", "HC", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes, not needed AA"}, {"C", "N", "490.0", "1.335", "JCC,7,(1986),230; AA"}, {"C*", "CB", "388.0", "1.459", "JCC,7,(1986),230; TRP"}, {"C*", "CT", "317.0", "1.495", "JCC,7,(1986),230; TRP"}, {"C*", "CW", "546.0", "1.352", "JCC,7,(1986),230; TRP"}, {"CA", "CN", "469.0", "1.400", "JCC,7,(1986),230; TRP"}, {"CB", "CN", "447.0", "1.419", "JCC,7,(1986),230; TRP"}, {"CC", "CT", "317.0", "1.504", "JCC,7,(1986),230; HIS"}, {"CC", "CV", "512.0", "1.375", "JCC,7,(1986),230; HIS(delta)"}, {"CC", "CW", "518.0", "1.371", "JCC,7,(1986),230; HIS(epsilon)"}, {"CC", "NA", "422.0", "1.385", "JCC,7,(1986),230; HIS"}, {"CC", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CN", "NA", "428.0", "1.380", "JCC,7,(1986),230; TRP"}, {"CR", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS"}, {"CR", "NA", "477.0", "1.343", "JCC,7,(1986),230; HIS"}, {"CR", "NB", "488.0", "1.335", "JCC,7,(1986),230; HIS"}, {"CT", "N", "337.0", "1.449", "JCC,7,(1986),230; AA"}, {"CT", "N3", "367.0", "1.471", "JCC,7,(1986),230; LYS"}, {"CT", "S", "227.0", "1.810", "changed from 222.0 based on dimethylS nmodes"}, {"CT", "SH", "237.0", "1.810", "changed from 222.0 based on methanethiol nmodes"}, {"CV", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; HIS"}, {"CV", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CW", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS(epsilon,+)"}, {"CW", "NA", "427.0", "1.381", "JCC,7,(1986),230; HIS,TRP"}, {"H", "N", "434.0", "1.010", "JCC,7,(1986),230; AA"}, {"H", "N3", "434.0", "1.010", "JCC,7,(1986),230; LYS"}, {"HS", "SH", "274.0", "1.336", "JCC,7,(1986),230; CYS"}, {"S", "S", "166.0", "2.038", "JCC,7,(1986),230; CYX (SCHERAGA)"}, {"CT", "F", "367.0", "1.380", "JCC,13,(1992),963;CF4; R0=1.332 FOR CHF3"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 */ char * amber96_angles[191][6]= {{"HW", "OW", "HW", "100.", "104.52", "TIP3P water"}, {"HW", "HW", "OW", "0.", "127.74", "(found in crystallographic water with 3 bonds)"}, {"CB", "C", "NA", "70.0", "111.30", "NA"}, {"CB", "C", "O", "80.0", "128.80", " "}, {"CM", "C", "NA", "70.0", "114.10", " "}, {"CM", "C", "O", "80.0", "125.30", " "}, {"CT", "C", "O", "80.0", "120.40", " "}, {"CT", "C", "O2", "70.0", "117.00", " "}, {"CT", "C", "OH", "70.0", "117.00", " "}, {"N*", "C", "NA", "70.0", "115.40", " "}, {"N*", "C", "NC", "70.0", "118.60", " "}, {"N*", "C", "O", "80.0", "120.90", " "}, {"NA", "C", "O", "80.0", "120.60", " "}, {"NC", "C", "O", "80.0", "122.50", " "}, {"CT", "C", "N", "70.0", "116.60", "AA general"}, {"N", "C", "O", "80.0", "122.90", "AA general"}, {"O", "C", "O", "80.0", "126.00", "AA COO- terminal residues"}, {"O2", "C", "O2", "80.0", "126.00", "AA GLU (SCH JPC 79,2379)"}, {"O", "C", "OH", "80.0", "126.00", " "}, {"CA", "C", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA tyr"}, {"CA", "C", "OH", "70.0", "120.00", "AA tyr"}, {"C", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CB", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CT", "70.0", "120.00", " "}, {"CA", "CA", "HA", "35.0", "120.00", " "}, {"CA", "CA", "H4", "35.0", "120.00", " "}, {"CB", "CA", "HA", "35.0", "120.00", " "}, {"CB", "CA", "H4", "35.0", "120.00", " "}, {"CB", "CA", "N2", "70.0", "123.50", " "}, {"CB", "CA", "NC", "70.0", "117.30", " "}, {"CM", "CA", "N2", "70.0", "120.10", " "}, {"CM", "CA", "NC", "70.0", "121.50", " "}, {"N2", "CA", "NA", "70.0", "116.00", " "}, {"N2", "CA", "NC", "70.0", "119.30", " "}, {"NA", "CA", "NC", "70.0", "123.30", " "}, {"C", "CA", "HA", "35.0", "120.00", "AA tyr"}, {"N2", "CA", "N2", "70.0", "120.00", "AA arg"}, {"CN", "CA", "HA", "35.0", "120.00", "AA trp"}, {"CA", "CA", "CN", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C", "CB", "CB", "63.0", "119.20", "changed from 85.0 bsd on C6H6 nmodes; NA gua"}, {"C", "CB", "NB", "70.0", "130.00", " "}, {"CA", "CB", "CB", "63.0", "117.30", "changed from 85.0 bsd on C6H6 nmodes; NA ade"}, {"CA", "CB", "NB", "70.0", "132.40", " "}, {"CB", "CB", "N*", "70.0", "106.20", " "}, {"CB", "CB", "NB", "70.0", "110.40", " "}, {"CB", "CB", "NC", "70.0", "127.70", " "}, {"N*", "CB", "NC", "70.0", "126.20", " "}, {"C*", "CB", "CA", "63.0", "134.90", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C*", "CB", "CN", "63.0", "108.80", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CB", "CN", "63.0", "116.20", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"H5", "CK", "N*", "35.0", "123.05", " "}, {"H5", "CK", "NB", "35.0", "123.05", " "}, {"N*", "CK", "NB", "70.0", "113.90", " "}, {"C", "CM", "CM", "63.0", "120.70", "changed from 85.0 bsd on C6H6 nmodes; NA thy"}, {"C", "CM", "CT", "70.0", "119.70", " "}, {"C", "CM", "HA", "35.0", "119.70", " "}, {"C", "CM", "H4", "35.0", "119.70", " "}, {"CA", "CM", "CM", "63.0", "117.00", "changed from 85.0 bsd on C6H6 nmodes; NA cyt"}, {"CA", "CM", "HA", "35.0", "123.30", " "}, {"CA", "CM", "H4", "35.0", "123.30", " "}, {"CM", "CM", "CT", "70.0", "119.70", " "}, {"CM", "CM", "HA", "35.0", "119.70", " "}, {"CM", "CM", "H4", "35.0", "119.70", " "}, {"CM", "CM", "N*", "70.0", "121.20", " "}, {"H4", "CM", "N*", "35.0", "119.10", " "}, {"H5", "CQ", "NC", "35.0", "115.45", " "}, {"NC", "CQ", "NC", "70.0", "129.10", " "}, {"CM", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "CT", "40.0", "109.50", " "}, {"CT", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H1", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H2", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "HP", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "N*", "50.0", "109.50", " "}, {"CT", "CT", "OH", "50.0", "109.50", " "}, {"CT", "CT", "OS", "50.0", "109.50", " "}, {"HC", "CT", "HC", "35.0", "109.50", " "}, {"H1", "CT", "H1", "35.0", "109.50", " "}, {"HP", "CT", "HP", "35.0", "109.50", "AA lys, ch3nh4+"}, {"H2", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OH", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"H2", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"N*", "CT", "OS", "50.0", "109.50", " "}, {"H1", "CT", "N", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "H1", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "HP", "50.0", "109.50", "AA zwitterion changed based on NMA nmodes"}, {"H1", "CT", "S", "50.0", "109.50", "AA cys changed based on NMA nmodes"}, {"H1", "CT", "SH", "50.0", "109.50", "AA cyx changed based on NMA nmodes"}, {"CT", "CT", "S", "50.0", "114.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "CT", "SH", "50.0", "108.60", "AA cys"}, {"H2", "CT", "H2", "35.0", "109.50", "AA lys"}, {"H1", "CT", "N2", "50.0", "109.50", "AA arg changed based on NMA nmodes"}, {"HP", "CT", "N3", "50.0", "109.50", "AA lys, ch3nh3+, changed based on NMA nmodes"}, {"CA", "CT", "CT", "63.0", "114.00", "AA phe tyr (SCH JPC 79,2379)"}, {"C", "CT", "HC", "50.0", "109.50", "AA gln changed based on NMA nmodes"}, {"C", "CT", "N", "63.0", "110.10", "AA general"}, {"CT", "CT", "N2", "80.0", "111.20", "AA arg (JCP 76, 1439)"}, {"CT", "CT", "N", "80.0", "109.70", "AA ala, general (JACS 94, 2657)"}, {"C", "CT", "CT", "63.0", "111.10", "AA general"}, {"CA", "CT", "HC", "50.0", "109.50", "AA tyr changed based on NMA nmodes"}, {"CT", "CT", "N3", "80.0", "111.20", "AA lys (JCP 76, 1439)"}, {"CC", "CT", "CT", "63.0", "113.10", "AA his"}, {"CC", "CT", "HC", "50.0", "109.50", "AA his changed based on NMA nmodes"}, {"C", "CT", "N3", "80.0", "111.20", "AA amino terminal residues"}, {"C*", "CT", "CT", "63.0", "115.60", "AA trp"}, {"C*", "CT", "HC", "50.0", "109.50", "AA trp changed based on NMA nmodes"}, {"CT", "CC", "NA", "70.0", "120.00", "AA his"}, {"CT", "CC", "CV", "70.0", "120.00", "AA his"}, {"CT", "CC", "NB", "70.0", "120.00", "AA his"}, {"CV", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NB", "70.0", "120.00", "AA his"}, {"CT", "CC", "CW", "70.0", "120.00", "AA his"}, {"H5", "CR", "NA", "35.0", "120.00", "AA his"}, {"H5", "CR", "NB", "35.0", "120.00", "AA his"}, {"NA", "CR", "NA", "70.0", "120.00", "AA his"}, {"NA", "CR", "NB", "70.0", "120.00", "AA his"}, {"CC", "CV", "H4", "35.0", "120.00", "AA his"}, {"CC", "CV", "NB", "70.0", "120.00", "AA his"}, {"H4", "CV", "NB", "35.0", "120.00", "AA his"}, {"CC", "CW", "H4", "35.0", "120.00", "AA his"}, {"CC", "CW", "NA", "70.0", "120.00", "AA his"}, {"H4", "CW", "NA", "35.0", "120.00", "AA his"}, {"C*", "CW", "H4", "35.0", "120.00", "AA trp"}, {"C*", "CW", "NA", "70.0", "108.70", "AA trp"}, {"CT", "C*", "CW", "70.0", "125.00", "AA trp"}, {"CB", "C*", "CT", "70.0", "128.60", "AA trp"}, {"CB", "C*", "CW", "63.0", "106.40", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CN", "NA", "70.0", "132.80", "AA trp"}, {"CB", "CN", "NA", "70.0", "104.40", "AA trp"}, {"CA", "CN", "CB", "63.0", "122.70", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C", "N", "CT", "50.0", "121.90", "AA general"}, {"C", "N", "H", "30.0", "120.00", "AA general, gln, asn,changed based on NMA nmodes"}, {"CT", "N", "H", "30.0", "118.04", "AA general, changed based on NMA nmodes"}, {"CT", "N", "CT", "50.0", "118.00", "AA pro (DETAR JACS 99,1232)"}, {"H", "N", "H", "35.0", "120.00", "ade,cyt,gua,gln,asn **"}, {"C", "N*", "CM", "70.0", "121.60", " "}, {"C", "N*", "CT", "70.0", "117.60", " "}, {"C", "N*", "H", "30.0", "119.20", "changed based on NMA nmodes"}, {"CB", "N*", "CK", "70.0", "105.40", " "}, {"CB", "N*", "CT", "70.0", "125.80", " "}, {"CB", "N*", "H", "30.0", "125.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CK", "N*", "CT", "70.0", "128.80", " "}, {"CK", "N*", "H", "30.0", "128.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CM", "N*", "CT", "70.0", "121.20", " "}, {"CM", "N*", "H", "30.0", "121.20", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CA", "N2", "H", "35.0", "120.00", " "}, {"H", "N2", "H", "35.0", "120.00", " "}, {"CT", "N2", "H", "35.0", "118.40", "AA arg"}, {"CA", "N2", "CT", "50.0", "123.20", "AA arg"}, {"CT", "N3", "H", "50.0", "109.50", "AA lys, changed based on NMA nmodes"}, {"CT", "N3", "CT", "50.0", "109.50", "AA pro/nt"}, {"H", "N3", "H", "35.0", "109.50", "AA lys, AA(end)"}, {"C", "NA", "C", "70.0", "126.40", " "}, {"C", "NA", "CA", "70.0", "125.20", " "}, {"C", "NA", "H", "30.0", "116.80", "changed based on NMA nmodes"}, {"CA", "NA", "H", "30.0", "118.00", "changed based on NMA nmodes"}, {"CC", "NA", "CR", "70.0", "120.00", "AA his"}, {"CC", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CR", "NA", "CW", "70.0", "120.00", "AA his"}, {"CR", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CW", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CN", "NA", "CW", "70.0", "111.60", "AA trp"}, {"CN", "NA", "H", "30.0", "123.10", "AA trp, changed based on NMA nmodes"}, {"CB", "NB", "CK", "70.0", "103.80", " "}, {"CC", "NB", "CR", "70.0", "117.00", "AA his"}, {"CR", "NB", "CV", "70.0", "117.00", "AA his"}, {"C", "NC", "CA", "70.0", "120.50", " "}, {"CA", "NC", "CB", "70.0", "112.20", " "}, {"CA", "NC", "CQ", "70.0", "118.60", " "}, {"CB", "NC", "CQ", "70.0", "111.00", " "}, {"C", "OH", "HO", "35.0", "113.00", " "}, {"CT", "OH", "HO", "55.0", "108.50", " "}, {"HO", "OH", "P", "45.0", "108.50", " "}, {"CT", "OS", "CT", "60.0", "109.50", " "}, {"CT", "OS", "P", "100.0", "120.50", " "}, {"P", "OS", "P", "100.0", "120.50", " "}, {"O2", "P", "OH", "45.0", "108.23", " "}, {"O2", "P", "O2", "140.0", "119.90", " "}, {"O2", "P", "OS", "100.0", "108.23", " "}, {"OH", "P", "OS", "45.0", "102.60", " "}, {"OS", "P", "OS", "45.0", "102.60", " "}, {"CT", "S", "CT", "62.0", "98.90", "AA met"}, {"CT", "S", "S", "68.0", "103.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "SH", "HS", "43.0", "96.00", "changed from 44.0 based on methanethiol nmodes"}, {"HS", "SH", "HS", "35.0", "92.07", "AA cys"}, {"F", "CT", "F", "77.0", "109.10", "JCC,13,(1992),963;"}, {"F", "CT", "H1", "35.0", "109.50", "JCC,13,(1992),963;"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= delta (deg), 6= n (multi), 7= amber96 info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * amber96_dihedrals[81][9]= {{"X", "C", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CB", "X", "4", "12.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CM", "X", "4", "8.70", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "N*", "X", "4", "5.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NA", "X", "4", "5.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NC", "X", "2", "8.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "OH", "X", "2", "1.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "CT", "X", "4", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CB", "X", "4", "14.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CM", "X", "4", "10.20", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "N2", "X", "4", "9.60", "180.0", "2.", "reinterpolated 93'"}, {"X", "CA", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "NC", "X", "2", "9.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "CB", "X", "4", "21.80", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CB", "N*", "X", "4", "6.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NB", "X", "2", "5.10", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NC", "X", "2", "8.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "N*", "X", "4", "6.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "NB", "X", "2", "20.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CM", "CM", "X", "4", "26.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CM", "CT", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CM", "N*", "X", "4", "7.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CQ", "NC", "X", "2", "13.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "CT", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "N", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N*", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N2", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OH", "X", "3", "0.50", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OS", "X", "3", "1.15", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OH", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OS", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C", "N", "X", "4", "10.00", "180.0", "2.", "AA|check Wendy? and NMA"}, {"X", "CT", "N3", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "S", "X", "3", "1.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "SH", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C*", "CB", "X", "4", "6.70", "180.0", "2.", "intrpol.bsd.onC6H6aa"}, {"X", "C*", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "C*", "CW", "X", "4", "26.10", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CN", "X", "4", "14.50", "180.0", "2.", "reinterpolated 93'"}, {"X", "CB", "CN", "X", "4", "12.00", "180.0", "2.", "reinterpolated 93'"}, {"X", "CC", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "CV", "X", "4", "20.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "CW", "X", "4", "21.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "NA", "X", "4", "5.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CN", "NA", "X", "4", "6.10", "180.0", "2.", "reinterpolated 93'"}, {"X", "CR", "NA", "X", "4", "9.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CR", "NB", "X", "2", "10.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CV", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CW", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"CT", "CT", "OS", "CT", "1", "0.383", "0.0", "-3.", " "}, {"CT", "CT", "OS", "CT", "1", "0.1", "180.0", "2.", " "}, {"C", "N", "CT", "C", "1", "0.30", "180.0", "-2.", "Kollman et al. 1997"}, {"C", "N", "CT", "C", "1", "0.85", "000.0", "1.", "Kollman et al. 1997"}, {"N", "CT", "C", "N", "1", "0.30", "180.0", "-2.", "Kollman et al. 1997"}, {"N", "CT", "C", "N", "1", "0.85", "000.0", "1.", "Kollman et al. 1997"}, {"CT", "CT", "N", "C", "1", "0.50", "180.0", "-4.", " "}, {"CT", "CT", "N", "C", "1", "0.15", "180.0", "-3.", " "}, {"CT", "CT", "N", "C", "1", "0.53", "0.0", "1.", " "}, {"CT", "CT", "C", "N", "1", "0.100", "0.0", "-4.", " "}, {"CT", "CT", "C", "N", "1", "0.07", "0.0", "2.", " "}, {"H", "N", "C", "O", "1", "2.50", "180.0", "-2.", "JCC,7,(1986),230"}, {"H", "N", "C", "O", "1", "2.00", "0.0", "1.", "J.C.cistrans-NMA DE"}, {"CT", "S", "S", "CT", "1", "3.50", "0.0", "-2.", "JCC,7,(1986),230"}, {"CT", "S", "S", "CT", "1", "0.60", "0.0", "3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OS", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OS", "1", "1.00", "0.0", "2.", "pucker anal (93')"}, {"OS", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OH", "1", "1.00", "0.0", "2.", "pucker anal (93')"}, {"OH", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "CT", "CT", "OH", "1", "1.00", "0.0", "2.", "check glicolWC? puc"}, {"OH", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "CT", "N*", "CK", "1", "0.50", "180.0", "-2.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CK", "1", "2.50", "0.0", "1.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CM", "1", "0.50", "180.0", "-2.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CM", "1", "2.50", "0.0", "1.", "sugar frag calc (PC)"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= n (multi), 7= amber96 info V(psi) = Kpsi x (psi - psi0)^2 */ char * amber96_impropers[31][8]= {{"X", "X", "C", "O", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "O2", "C", "O2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N2", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "NA", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "N2", "CA", "N2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N", "CT", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "CA", "HA", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CW", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CR", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CV", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CQ", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CK", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "HA", "1.1", "180.", "2.", " "}, {"X", "X", "CA", "H4", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CA", "H5", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"CK", "CB", "N*", "CT", "1.0", "180.", "2.", " "}, {"CM", "C", "N*", "CT", "1.0", "180.", "2.", "dac guess, 9/94"}, {"CM", "C", "CM", "CT", "1.1", "180.", "2.", " "}, {"CT", "O", "C", "OH", "10.5", "180.", "2.", " "}, {"NA", "CV", "CC", "CT", "1.1", "180.", "2.", " "}, {"NB", "CW", "CC", "CT", "1.1", "180.", "2.", " "}, {"NA", "CW", "CC", "CT", "1.1", "180.", "2.", " "}, {"CW", "CB", "C*", "CT", "1.1", "180.", "2.", " "}, {"CA", "CA", "CA", "CT", "1.1", "180.", "2.", " "}, {"C", "CM", "CM", "CT", "1.1", "180.", "2.", "dac guess, 9/94"}, {"NC", "CM", "CA", "N2", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CB", "NC", "CA", "N2", "1.1", "180.", "2.", "dac, 10/94"}, {"NA", "NC", "CA", "N2", "1.1", "180.", "2.", "dac, 10/94"}, {"CA", "CA", "C", "OH", "1.1", "180.", "2.", " "}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= amber96 info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * amber96_vdw[35][4]= {{"H", "0.6000", "0.0157", "!Ferguson base pair geom."}, {"HO", "0.0000", "0.0000", "OPLS Jorgensen, JACS,110,(1988),1657"}, {"HS", "0.6000", "0.0157", "W. Cornell CH3SH --> CH3OH FEP"}, {"HC", "1.4870", "0.0157", "OPLS"}, {"H1", "1.3870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H2", "1.2870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H3", "1.1870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HP", "1.1000", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HA", "1.4590", "0.0150", "Spellmeyer"}, {"H4", "1.4090", "0.0150", "Spellmeyer, one electrowithdr. neighbor"}, {"H5", "1.3590", "0.0150", "Spellmeyer, two electrowithdr. neighbor"}, {"HW", "0.0000", "0.0000", "TIP3P water model"}, {"O", "1.6612", "0.2100", "OPLS"}, {"O2", "1.6612", "0.2100", "OPLS"}, {"OW", "1.7683", "0.1520", "TIP3P water model"}, {"OH", "1.7210", "0.2104", "OPLS"}, {"OS", "1.6837", "0.1700", "OPLS ether"}, {"CT", "1.9080", "0.1094", "Spellmeyer"}, {"CA", "1.9080", "0.0860", "Spellmeyer"}, {"CM", "1.9080", "0.0860", "Spellmeyer"}, {"C", "1.9080", "0.0860", "OPLS"}, {"N", "1.8240", "0.1700", "OPLS"}, {"N3", "1.8240", "0.1700", "OPLS"}, {"S", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"SH", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"P", "2.1000", "0.2000", "JCC,7,(1986),230;"}, {"IM", "2.47", "0.1", "Cl- Smith and Dang, JCP 1994,100:5,3757"}, {"Li", "1.1370", "0.0183", "Li+ Aqvist JPC 1990,94,8021. (adapted)"}, {"IP", "1.8680", "0.00277", "Na+ Aqvist JPC 1990,94,8021. (adapted)"}, {"K", "2.6580", "0.000328", "K+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Rb", "2.9560", "0.00017", "Rb+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Cs", "3.3950", "0.0000806", "Cs+ Aqvist JPC 1990,94,8021. (adapted)"}, {"I", "2.35", "0.40", "JCC,7,(1986),230;"}, {"F", "1.75", "0.061", "Gough et al. JCC 13,(1992),963."}, {"IB", "5.0", "0.1", "solvated ion for vacuum approximation"}}; atomes_1.3.1/src/calc/force_fields/oplsaar.c0000664000175000017500000126054015212624223020437 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file oplsaar.c * @short OPLSAAR force field * @author Sébastien Le Roux */ /* * This file: 'oplsaar.c' * * Contains: * OPLSAAR force field This file contains several tables: Atoms : OPLSAAR_atoms[145][4] Bonds : OPLSAAR_bonds[242][5] Angles : OPLSAAR_angles[593][6] Dihedrals : OPLSAAR_dihedrals[2482][8] Impropers : OPLSAAR_impropers[131][[8] Non bonded : OPLSAAR_vdw[145][7] */ #include "global.h" /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= OPLSAAR info */ int OPLSAAR_objects[14] = {145, 0, 0, 242, 0, 0, 593, 0, 2482, 0 , 0, 131, 145, 0}; int OPLSAAR_dim[14] = {4, 0, 0, 5, 0, 0, 6, 0, 8, 0, 0, 8, 7, 0}; /* Atoms */ char * OPLSAAR_atoms[145][4]= {{"C", "12.01100", "C135", "CH3 all-atom C: alkanes ALL-ATOM "}, {"C", "12.01100", "C136", "CH2 all-atom C: alkanes PARAMETERS"}, {"C", "12.01100", "C137", "CH all-atom C: alkanes FROM HERE ON"}, {"C", "12.01100", "C145", "Benzene C - 12 site JACS,112,4768-90"}, {"C", "12.01100", "C149", "all-atom C: CH2, ethyl benzene"}, {"C", "12.01100", "C157", "all-atom C: CH3 and CH2, alcohols"}, {"C", "12.01100", "C158", "all-atom C: CH, alcohols"}, {"C", "12.01100", "C166", "C(OH) phenol Use with all"}, {"C", "12.01100", "C206", "all-atom C: CH2, thiols"}, {"C", "12.01100", "C209", "all-atom C: CH3, sulfides"}, {"C", "12.01100", "C210", "all-atom C: CH2, sulfides"}, {"C", "12.01100", "C214", "all-atom C: CH2, disulfides"}, {"C", "12.01100", "C223", "C in RCH2NH2 and Gly CA (See 900 for amines)"}, {"C", "12.01100", "C224", "C in R2CHNH2 and Ala CA"}, {"C", "12.01100", "C235", "C: C=O in amide. Acyl R in amides"}, {"C", "12.01100", "C242", "C on N: secondary N-Me amide"}, {"C", "12.01100", "C245", "C on N: tertiary N-CH2R amide (Pro Cdelta)"}, {"C", "12.01100", "C246", "C on N: tertiary N-CHR2 amide (Pro Calpha)"}, {"C", "12.01100", "C267", "Co in CCOOH carboxylic acid"}, {"C", "12.01100", "C271", "C in COO- carboxylate"}, {"C", "12.01100", "C274", "C: CH2, carboxylate ion"}, {"C", "12.01100", "C283", "AA C-alpha on C-terminal ALA"}, {"C", "12.01100", "C284", "AA C-alpha on C-terminal GLY"}, {"C", "12.01100", "C285", "AA C-alpha on C-terminal PRO"}, {"C", "12.01100", "C292", "C in RCH2NH3+ and CA in N-term Gly"}, {"C", "12.01100", "C293", "C in R2CHNH3+ and CA in N-term Ala, etc."}, {"C", "12.01100", "C295", "AA:C-alpha in N-term PRO"}, {"C", "12.01100", "C296", "AA:C-delta in N-term PRO"}, {"C", "12.01100", "C302", "C: guanidinium C+"}, {"C", "12.01100", "C307", "C: CH2(D), ARG, ethylguanidinium"}, {"C", "12.01100", "C308", "C: CH2(G), ARG"}, {"C", "12.01100", "C500", "CG in TRP"}, {"C", "12.01100", "C501", "CD C in TRP"}, {"C", "12.01100", "C502", "CE C in TRP"}, {"C", "12.01100", "C505", "CB in HIS"}, {"C", "12.01100", "C506", "CE1 in HID, HIE"}, {"C", "12.01100", "C507", "CD2 in HID, CG in HIE"}, {"C", "12.01100", "C508", "CG in HID, CD2 in HIE"}, {"C", "12.01100", "C509", "CE1 in HIP"}, {"C", "12.01100", "C510", "CG, CD2 in HIP"}, {"C", "12.01100", "C514", "CD1 in TRP"}, {"C", "12.011000", "C366", " "}, {"C", "12.011000", "C320", " "}, {"C", "12.011000", "C362", " "}, {"C", "12.011000", "C324", " "}, {"C", "12.011000", "C323", " "}, {"C", "12.011000", "C353", " "}, {"C", "12.011000", "C364", " "}, {"C", "12.011000", "C365", " "}, {"C", "12.011000", "C183", " "}, {"C", "12.011000", "C931", " "}, {"C", "12.011000", "C174", " "}, {"C", "12.011000", "C350", " "}, {"C", "12.011000", "C349", " "}, {"C", "12.011000", "C351", " "}, {"C", "12.011000", "C932", " "}, {"C", "12.011000", "C338", " "}, {"C", "12.011000", "C337", " "}, {"C", "12.011000", "C334", " "}, {"C", "12.011000", "C336", " "}, {"C", "12.011000", "C322", " "}, {"C", "12.011000", "C933", " "}, {"H", "1.00800", "H140", "H all-atom H: alkanes"}, {"H", "1.00800", "H146", "Benzene H - 12 site"}, {"H", "1.00800", "H155", "all-atom H(O): mono alcohols"}, {"H", "1.00800", "H168", "H phenol 145 and 146"}, {"H", "1.00800", "H204", "all-atom H(S): thiols (mod 11/99)"}, {"H", "1.00800", "H240", "H on N: primary amide"}, {"H", "1.00800", "H241", "H on N: secondary amide"}, {"H", "1.00800", "H270", "H in CCOOH"}, {"H", "1.00800", "H290", "H (RNH3+)"}, {"H", "1.00800", "H301", "H: guanidinium NH2"}, {"H", "1.00800", "H304", "H: guanidinium NHR"}, {"H", "1.00800", "H310", "H (R2NH2+)"}, {"H", "1.00800", "H504", "H on NE in TRP"}, {"H", "1.00800", "H513", "H on N in HIP"}, {"H", "1.008000", "H369", " "}, {"H", "1.008000", "H367", " "}, {"H", "1.008000", "H329", " "}, {"H", "1.008000", "H327", " "}, {"H", "1.008000", "H330", " "}, {"H", "1.008000", "H343", " "}, {"H", "1.008000", "H342", " "}, {"H", "1.008000", "H344", " "}, {"H", "1.008000", "H345", " "}, {"H", "1.008000", "H185", " "}, {"H", "1.008000", "H196", " "}, {"H", "1.008000", "H359", " "}, {"H", "1.008000", "H355", " "}, {"H", "1.008000", "H357", " "}, {"H", "1.008000", "H358", " "}, {"H", "1.008000", "H176", " "}, {"H", "1.008000", "H170", " "}, {"N", "14.00700", "N237", "N: primary amide. alkane parameters."}, {"N", "14.00700", "N238", "N: secondary amide 279 for formyl H."}, {"N", "14.00700", "N239", "N: tertiary amide"}, {"N", "14.00700", "N287", "N (RNH3+)"}, {"N", "14.00700", "N300", "N: guanidinium NH2"}, {"N", "14.00700", "N303", "N: guanidinium NHR"}, {"N", "14.00700", "N309", "N (R2NH2+)"}, {"N", "14.00700", "N503", "NE in TRP"}, {"N", "14.00700", "N511", "NE in HID, ND in HIE"}, {"N", "14.00700", "N512", "N in HIP"}, {"N", "14.007000", "N348", " "}, {"N", "14.007000", "N368", " "}, {"N", "14.007000", "N937", " "}, {"N", "14.007000", "N936", " "}, {"N", "14.007000", "N321", " "}, {"N", "14.007000", "N361", " "}, {"N", "14.007000", "N335", " "}, {"N", "14.007000", "N346", " "}, {"N", "14.007000", "N363", " "}, {"N", "14.007000", "N352", " "}, {"N", "14.007000", "N356", " "}, {"N", "14.007000", "N341", " "}, {"N", "14.007000", "N938", " "}, {"O", "15.99940", "O154", "all-atom O: mono alcohols"}, {"O", "15.99940", "O167", "O phenol atom C, H"}, {"O", "15.99940", "O236", "O: C=O in amide. is neutral - use"}, {"O", "15.99940", "O268", "Oh in CCOOH R in RCOOH is"}, {"O", "15.99940", "O269", "Oc in CCOOH neutral; use 135-140"}, {"O", "15.99940", "O272", "O: O in COO- carboxylate"}, {"O", "15.999400", "O370", " "}, {"O", "15.999400", "O340", " "}, {"O", "15.999400", "O441", " "}, {"O", "15.999400", "O169", " "}, {"O", "15.999400", "O186", " "}, {"P", "30.974000", "P440", " "}, {"C", "12.011000", "C347", " "}, {"O", "15.999400", "O328", " "}, {"O", "15.999400", "O326", " "}, {"C", "12.011000", "C6448", " "}, {"O", "15.999400", "O6934", " "}, {"O", "15.999400", "O6452", " "}, {"O", "15.999400", "O6442", " "}, {"P", "30.974000", "P6450", " "}, {"O", "15.999400", "O6441", " "}, {"S", "32.06000", "S200", "all-atom S: thiols (mod 11/99)"}, {"S", "32.06000", "S202", "all-atom S: sulfides"}, {"S", "32.06000", "S203", "all-atom S: disulfides"}, {"O", "15.99940", "OT", "TIP3P water"}, {"H", "1.00800", "HT", "TIP3P water"}, {"Na", "22.98977", "SOD", "Sodium Ion, adm jr."}, {"Cl", "35.45000", "CLA", "Chloride Ion, adm jr."}, {"Mg", "24.30000", "MG", "Magnesium Ion"}}; /* Bonds */ char * OPLSAAR_bonds[242][5]= {{"OT", "HT", "450.0", "0.9572", " "}, {"HT", "HT", "0.0", "1.5139", " "}, {"S203", "S203", "166.0", "2.038", " "}, {"C157", "O6934", "320.00", "1.410", " "}, {"O6934", "C174", "320.00", "1.410", " "}, {"C135", "C136", "268.00", "1.529", " "}, {"C135", "C137", "268.00", "1.529", " "}, {"C135", "C158", "268.00", "1.529", " "}, {"C135", "C224", "268.00", "1.529", " "}, {"C135", "C235", "317.00", "1.522", " "}, {"C135", "C283", "268.00", "1.529", " "}, {"C135", "C293", "268.00", "1.529", " "}, {"C135", "H140", "340.00", "1.090", " "}, {"C136", "C136", "268.00", "1.529", " "}, {"C136", "C137", "268.00", "1.529", " "}, {"C136", "C210", "268.00", "1.529", " "}, {"C136", "C224", "268.00", "1.529", " "}, {"C136", "C235", "317.00", "1.522", " "}, {"C136", "C245", "268.00", "1.529", " "}, {"C136", "C246", "268.00", "1.529", " "}, {"C136", "C267", "317.00", "1.522", " "}, {"C136", "C274", "268.00", "1.529", " "}, {"C136", "C283", "268.00", "1.529", " "}, {"C136", "C285", "268.00", "1.529", " "}, {"C136", "C292", "268.00", "1.529", " "}, {"C136", "C293", "268.00", "1.529", " "}, {"C136", "C295", "268.00", "1.529", " "}, {"C136", "C296", "268.00", "1.529", " "}, {"C136", "C308", "268.00", "1.529", " "}, {"C136", "C500", "317.00", "1.495", " "}, {"C136", "H140", "340.00", "1.090", " "}, {"C137", "C224", "268.00", "1.529", " "}, {"C137", "C283", "268.00", "1.529", " "}, {"C137", "C293", "268.00", "1.529", " "}, {"C137", "H140", "340.00", "1.090", " "}, {"C145", "C145", "469.00", "1.400", " "}, {"C145", "C149", "317.00", "1.510", " "}, {"C145", "C166", "469.00", "1.400", " "}, {"C145", "C501", "469.00", "1.404", " "}, {"C145", "C502", "469.00", "1.400", " "}, {"C145", "H146", "367.00", "1.080", " "}, {"C149", "C224", "268.00", "1.529", " "}, {"C149", "C283", "268.00", "1.529", " "}, {"C149", "C293", "268.00", "1.529", " "}, {"C149", "H140", "340.00", "1.090", " "}, {"C157", "C224", "268.00", "1.529", " "}, {"C157", "C283", "268.00", "1.529", " "}, {"C157", "C293", "268.00", "1.529", " "}, {"C157", "H140", "340.00", "1.090", " "}, {"C157", "O154", "320.00", "1.410", " "}, {"C158", "C224", "268.00", "1.529", " "}, {"C158", "C283", "268.00", "1.529", " "}, {"C158", "C293", "268.00", "1.529", " "}, {"C158", "H140", "340.00", "1.090", " "}, {"C158", "O154", "320.00", "1.410", " "}, {"C166", "O167", "450.00", "1.364", " "}, {"C206", "C224", "268.00", "1.529", " "}, {"C206", "C283", "268.00", "1.529", " "}, {"C206", "C293", "268.00", "1.529", " "}, {"C206", "H140", "340.00", "1.090", " "}, {"C206", "S200", "222.00", "1.810", " "}, {"C209", "H140", "340.00", "1.090", " "}, {"C209", "S202", "222.00", "1.810", " "}, {"C210", "H140", "340.00", "1.090", " "}, {"C210", "S202", "222.00", "1.810", " "}, {"C214", "C224", "268.00", "1.529", " "}, {"C214", "C283", "268.00", "1.529", " "}, {"C214", "C293", "268.00", "1.529", " "}, {"C214", "H140", "340.00", "1.090", " "}, {"C214", "S203", "222.00", "1.810", " "}, {"C223", "C235", "317.00", "1.522", " "}, {"C223", "H140", "340.00", "1.090", " "}, {"C223", "N238", "337.00", "1.449", " "}, {"C223", "C267", "317.00", "1.522", "phosphorylated C-terminal Gly, adm jr."}, {"C224", "C235", "317.00", "1.522", " "}, {"C224", "C267", "317.00", "1.522", " "}, {"C224", "C274", "268.00", "1.529", " "}, {"C224", "C505", "268.00", "1.529", " "}, {"C224", "H140", "340.00", "1.090", " "}, {"C224", "N238", "337.00", "1.449", " "}, {"C235", "C246", "317.00", "1.522", " "}, {"C235", "C292", "317.00", "1.522", " "}, {"C235", "C293", "317.00", "1.522", " "}, {"C235", "C295", "317.00", "1.522", " "}, {"C235", "N237", "490.00", "1.335", " "}, {"C235", "N238", "490.00", "1.335", " "}, {"C235", "N239", "490.00", "1.335", " "}, {"C235", "O236", "570.00", "1.229", " "}, {"C242", "H140", "340.00", "1.090", " "}, {"C242", "N238", "337.00", "1.449", " "}, {"C245", "H140", "340.00", "1.090", " "}, {"C245", "N239", "337.00", "1.449", " "}, {"C246", "H140", "340.00", "1.090", " "}, {"C246", "N239", "337.00", "1.449", " "}, {"C267", "O268", "450.00", "1.364", " "}, {"C267", "O269", "570.00", "1.229", " "}, {"C271", "C274", "317.00", "1.522", " "}, {"C271", "C283", "317.00", "1.522", " "}, {"C271", "C284", "317.00", "1.522", " "}, {"C271", "C285", "317.00", "1.522", " "}, {"C271", "O272", "656.00", "1.250", " "}, {"C274", "C283", "268.00", "1.529", " "}, {"C274", "C293", "268.00", "1.529", " "}, {"C274", "H140", "340.00", "1.090", " "}, {"C283", "C505", "268.00", "1.529", " "}, {"C283", "H140", "340.00", "1.090", " "}, {"C283", "N238", "337.00", "1.449", " "}, {"C284", "H140", "340.00", "1.090", " "}, {"C284", "N238", "337.00", "1.449", " "}, {"C285", "H140", "340.00", "1.090", " "}, {"C285", "N239", "337.00", "1.449", " "}, {"C292", "H140", "340.00", "1.090", " "}, {"C292", "N287", "367.00", "1.471", " "}, {"C293", "C505", "268.00", "1.529", " "}, {"C293", "H140", "340.00", "1.090", " "}, {"C293", "N287", "367.00", "1.471", " "}, {"C295", "H140", "340.00", "1.090", " "}, {"C295", "N309", "367.00", "1.471", " "}, {"C296", "H140", "340.00", "1.090", " "}, {"C296", "N309", "367.00", "1.471", " "}, {"C302", "N300", "481.00", "1.340", " "}, {"C302", "N303", "481.00", "1.340", " "}, {"C307", "C308", "268.00", "1.529", " "}, {"C307", "H140", "340.00", "1.090", " "}, {"C307", "N303", "337.00", "1.463", " "}, {"C308", "H140", "340.00", "1.090", " "}, {"C500", "C501", "388.00", "1.459", " "}, {"C500", "C514", "546.00", "1.352", " "}, {"C501", "C502", "447.00", "1.419", " "}, {"C502", "N503", "428.00", "1.380", " "}, {"C505", "C507", "317.00", "1.504", " "}, {"C505", "C508", "317.00", "1.504", " "}, {"C505", "C510", "317.00", "1.504", " "}, {"C505", "H140", "340.00", "1.090", " "}, {"C506", "H146", "367.00", "1.080", " "}, {"C506", "N503", "477.00", "1.343", " "}, {"C506", "N511", "488.00", "1.335", " "}, {"C507", "C508", "520.00", "1.370", " "}, {"C507", "H146", "367.00", "1.080", " "}, {"C507", "N511", "410.00", "1.394", " "}, {"C508", "H146", "367.00", "1.080", " "}, {"C508", "N503", "427.00", "1.381", " "}, {"C509", "H146", "367.00", "1.080", " "}, {"C509", "N512", "477.00", "1.343", " "}, {"C510", "C510", "520.00", "1.370", " "}, {"C510", "H146", "367.00", "1.080", " "}, {"C510", "N512", "427.00", "1.381", " "}, {"C514", "H146", "367.00", "1.080", " "}, {"C514", "N503", "427.00", "1.381", " "}, {"H155", "O154", "553.00", "0.945", " "}, {"H168", "O167", "553.00", "0.945", " "}, {"H204", "S200", "274.00", "1.336", " "}, {"H240", "N237", "434.00", "1.010", " "}, {"H241", "N238", "434.00", "1.010", " "}, {"H270", "O268", "553.00", "0.945", " "}, {"H290", "N287", "434.00", "1.010", " "}, {"H301", "N300", "434.00", "1.010", " "}, {"H304", "N303", "434.00", "1.010", " "}, {"H310", "N309", "434.00", "1.010", " "}, {"H504", "N503", "434.00", "1.010", " "}, {"H513", "N512", "434.00", "1.010", " "}, {"O186", "C933", "320.00", "1.380", " "}, {"C174", "C933", "268.00", "1.529", " "}, {"H196", "C933", "340.00", "1.090", " "}, {"C933", "N938", "337.00", "1.475", " "}, {"C320", "N938", "424.00", "1.383", " "}, {"C324", "N938", "448.00", "1.365", " "}, {"H330", "C324", "340.00", "1.080", " "}, {"C323", "C322", "410.00", "1.444", " "}, {"O328", "C322", "570.00", "1.229", " "}, {"H329", "C323", "340.00", "1.080", " "}, {"C324", "C323", "549.00", "1.340", " "}, {"N321", "C320", "418.00", "1.388", " "}, {"O326", "C320", "570.00", "1.229", " "}, {"C322", "N321", "418.00", "1.388", " "}, {"H327", "N321", "434.00", "1.010", " "}, {"N335", "C336", "483.00", "1.339", " "}, {"O186", "C932", "320.00", "1.380", " "}, {"C932", "N937", "337.00", "1.475", " "}, {"C174", "C932", "268.00", "1.529", " "}, {"H196", "C932", "340.00", "1.090", " "}, {"C334", "N937", "424.00", "1.383", " "}, {"C338", "N937", "448.00", "1.365", " "}, {"H345", "C338", "367.00", "1.080", " "}, {"H344", "C337", "340.00", "1.080", " "}, {"C337", "C338", "549.00", "1.340", " "}, {"N335", "C334", "457.00", "1.358", " "}, {"O340", "C334", "570.00", "1.229", " "}, {"N341", "C336", "481.00", "1.340", " "}, {"C336", "C337", "427.00", "1.433", " "}, {"H342", "N341", "434.00", "1.010", " "}, {"H343", "N341", "434.00", "1.010", " "}, {"O370", "C366", "570.00", "1.229", " "}, {"C364", "N936", "436.00", "1.374", " "}, {"N363", "C364", "461.00", "1.354", " "}, {"C365", "C364", "520.00", "1.370", " "}, {"H369", "N368", "434.00", "1.010", " "}, {"C362", "N363", "483.00", "1.339", " "}, {"N368", "C362", "481.00", "1.340", " "}, {"C362", "N361", "427.00", "1.381", " "}, {"H367", "N361", "434.00", "1.010", " "}, {"N361", "C366", "418.00", "1.388", " "}, {"C366", "C365", "447.00", "1.419", " "}, {"N352", "C365", "414.00", "1.391", " "}, {"C183", "C6448", "286.00", "1.529", " "}, {"C6448", "H140", "340.00", "1.090", " "}, {"C6448", "O6934", "320.00", "1.410", " "}, {"O6934", "P440", "230.00", "1.610", " "}, {"O441", "P440", "553.00", "1.480", " "}, {"O441", "P6450", "553.00", "1.480", " "}, {"O6452", "P440", "230.00", "1.610", " "}, {"O6442", "P440", "230.00", "1.610", " "}, {"O6442", "P6450", "230.00", "1.610", " "}, {"O6452", "P6450", "230.00", "1.610", " "}, {"O6441", "P6450", "553.00", "1.480", " "}, {"C931", "N936", "337.00", "1.475", " "}, {"C349", "N936", "436.00", "1.374", " "}, {"C353", "N936", "440.00", "1.371", " "}, {"C174", "C931", "268.00", "1.529", " "}, {"O186", "C931", "320.00", "1.380", " "}, {"H196", "C931", "340.00", "1.090", " "}, {"C174", "C174", "268.00", "1.529", " "}, {"O169", "C174", "320.00", "1.410", " "}, {"H176", "C174", "340.00", "1.090", " "}, {"C183", "C174", "268.00", "1.529", " "}, {"C157", "C183", "268.00", "1.529", " "}, {"H185", "C183", "340.00", "1.090", " "}, {"H170", "O169", "553.00", "0.945", " "}, {"C350", "C349", "520.00", "1.370", " "}, {"N348", "C349", "461.00", "1.354", " "}, {"C351", "C350", "469.00", "1.404", " "}, {"N352", "C350", "414.00", "1.391", " "}, {"N356", "C351", "481.00", "1.340", " "}, {"N346", "C351", "483.00", "1.339", " "}, {"H357", "N356", "434.00", "1.010", " "}, {"H358", "N356", "434.00", "1.010", " "}, {"C347", "N346", "502.00", "1.324", " "}, {"H355", "C347", "367.00", "1.080", " "}, {"H359", "C353", "367.00", "1.080", " "}, {"C183", "O186", "320.00", "1.410", " "}, {"C353", "N352", "529.00", "1.304", " "}, {"C347", "N348", "502.00", "1.324", " "}}; /* Angles */ char * OPLSAAR_angles[593][6]= {{"HT", "OT", "HT", "55.0", "104.52", " "}, {"O6934", "P440", "O6934", "45.0", "102.60", "new?"}, {"C183", "C157", "O6934", "50.00", "109.500", " "}, {"H140", "C157", "O6934", "35.00", "109.500", " "}, {"H176", "C174", "O6934", "35.00", "109.500", " "}, {"C183", "C174", "O6934", "50.00", "109.500", " "}, {"C174", "C174", "O6934", "50.0", "109.50", " "}, {"P440", "O6934", "C174", "30.0", "120.50", " "}, {"P440", "O6934", "C157", "100.0", "120.50", " "}, {"H140", "C135", "H140", "33.0", "107.8", " "}, {"H140", "C136", "H140", "33.0", "107.8", " "}, {"H140", "C149", "H140", "33.0", "107.8", " "}, {"H140", "C157", "H140", "33.0", "107.8", " "}, {"H140", "C206", "H140", "33.0", "107.8", " "}, {"H140", "C209", "H140", "33.0", "107.8", " "}, {"H140", "C210", "H140", "33.0", "107.8", " "}, {"H140", "C214", "H140", "33.0", "107.8", " "}, {"H140", "C223", "H140", "33.0", "107.8", " "}, {"H140", "C224", "H140", "33.0", "107.8", " "}, {"H140", "C242", "H140", "33.0", "107.8", " "}, {"H140", "C245", "H140", "33.0", "107.8", " "}, {"H140", "C274", "H140", "33.0", "107.8", " "}, {"H140", "C284", "H140", "33.0", "107.8", " "}, {"H140", "C292", "H140", "33.0", "107.8", " "}, {"H140", "C296", "H140", "33.0", "107.8", " "}, {"H140", "C307", "H140", "33.0", "107.8", " "}, {"H140", "C308", "H140", "33.0", "107.8", " "}, {"H140", "C505", "H140", "33.0", "107.8", " "}, {"H290", "N287", "H290", "35.0", "109.5", " "}, {"H310", "N309", "H310", "35.0", "109.5", " "}, {"C135", "C136", "C137", "58.35", "112.70", " "}, {"C135", "C136", "H140", "37.50", "110.70", " "}, {"C135", "C137", "C135", "58.35", "112.70", " "}, {"C135", "C137", "C136", "58.35", "112.70", " "}, {"C135", "C137", "C224", "58.35", "112.70", " "}, {"C135", "C137", "C283", "58.35", "112.70", " "}, {"C135", "C137", "C293", "58.35", "112.70", " "}, {"C135", "C137", "H140", "37.50", "110.70", " "}, {"C135", "C158", "C224", "58.35", "112.70", " "}, {"C135", "C158", "C283", "58.35", "112.70", " "}, {"C135", "C158", "C293", "58.35", "112.70", " "}, {"C135", "C158", "H140", "37.50", "110.70", " "}, {"C135", "C158", "O154", "50.00", "109.50", " "}, {"C135", "C224", "C235", "63.00", "111.10", " "}, {"C135", "C224", "C267", "63.00", "111.10", " "}, {"C135", "C224", "H140", "37.50", "110.70", " "}, {"C135", "C224", "N238", "80.00", "109.70", " "}, {"C135", "C235", "N238", "70.00", "116.60", " "}, {"C135", "C235", "N239", "70.00", "116.60", " "}, {"C135", "C235", "O236", "80.00", "120.40", " "}, {"C135", "C283", "C271", "63.00", "111.10", " "}, {"C135", "C283", "H140", "37.50", "110.70", " "}, {"C135", "C283", "N238", "80.00", "109.70", " "}, {"C135", "C293", "C235", "63.00", "111.10", " "}, {"C135", "C293", "H140", "37.50", "110.70", " "}, {"C135", "C293", "N287", "80.00", "111.20", " "}, {"C136", "C135", "H140", "37.50", "110.70", " "}, {"C136", "C136", "C136", "58.35", "112.70", " "}, {"C136", "C136", "C224", "58.35", "112.70", " "}, {"C136", "C136", "C235", "63.00", "111.10", " "}, {"C136", "C136", "C245", "58.35", "112.70", " "}, {"C136", "C136", "C246", "58.35", "112.70", " "}, {"C136", "C136", "C267", "63.00", "111.10", " "}, {"C136", "C136", "C283", "58.35", "112.70", " "}, {"C136", "C136", "C285", "58.35", "112.70", " "}, {"C136", "C136", "C292", "58.35", "112.70", " "}, {"C136", "C136", "C293", "58.35", "112.70", " "}, {"C136", "C136", "C295", "58.35", "112.70", " "}, {"C136", "C136", "C296", "58.35", "112.70", " "}, {"C136", "C136", "H140", "37.50", "110.70", " "}, {"C136", "C137", "C224", "58.35", "112.70", " "}, {"C136", "C137", "C283", "58.35", "112.70", " "}, {"C136", "C137", "C293", "58.35", "112.70", " "}, {"C136", "C137", "H140", "37.50", "110.70", " "}, {"C136", "C210", "H140", "37.50", "110.70", " "}, {"C136", "C210", "S202", "50.00", "114.70", " "}, {"C136", "C224", "C235", "63.00", "111.10", " "}, {"C136", "C224", "H140", "37.50", "110.70", " "}, {"C136", "C224", "N238", "80.00", "109.70", " "}, {"C136", "C235", "N237", "70.00", "116.60", " "}, {"C136", "C235", "O236", "80.00", "120.40", " "}, {"C136", "C245", "H140", "37.50", "110.70", " "}, {"C136", "C245", "N239", "80.00", "109.70", " "}, {"C136", "C246", "C235", "63.00", "111.10", " "}, {"C136", "C246", "H140", "37.50", "110.70", " "}, {"C136", "C246", "N239", "80.00", "109.70", " "}, {"C136", "C267", "O268", "70.00", "108.00", " "}, {"C136", "C267", "O269", "80.00", "120.40", " "}, {"C136", "C274", "C271", "63.00", "111.10", " "}, {"C136", "C274", "H140", "37.50", "110.70", " "}, {"C136", "C283", "C271", "63.00", "111.10", " "}, {"C136", "C283", "H140", "37.50", "110.70", " "}, {"C136", "C283", "N238", "80.00", "109.70", " "}, {"C136", "C285", "C271", "63.00", "111.10", " "}, {"C136", "C285", "H140", "37.50", "110.70", " "}, {"C136", "C285", "N239", "80.00", "109.70", " "}, {"C136", "C292", "H140", "37.50", "110.70", " "}, {"C136", "C292", "N287", "80.00", "111.20", " "}, {"C136", "C293", "C235", "63.00", "111.10", " "}, {"C136", "C293", "H140", "37.50", "110.70", " "}, {"C136", "C293", "N287", "80.00", "111.20", " "}, {"C136", "C295", "C235", "63.00", "111.10", " "}, {"C136", "C295", "H140", "37.50", "110.70", " "}, {"C136", "C295", "N309", "80.00", "111.20", " "}, {"C136", "C296", "H140", "37.50", "110.70", " "}, {"C136", "C296", "N309", "80.00", "111.20", " "}, {"C136", "C308", "C307", "58.35", "112.70", " "}, {"C136", "C308", "H140", "37.50", "110.70", " "}, {"C136", "C500", "C501", "70.00", "128.60", " "}, {"C136", "C500", "C514", "70.00", "125.00", " "}, {"C137", "C135", "H140", "37.50", "110.70", " "}, {"C137", "C136", "C224", "58.35", "112.70", " "}, {"C137", "C136", "C283", "58.35", "112.70", " "}, {"C137", "C136", "C293", "58.35", "112.70", " "}, {"C137", "C136", "H140", "37.50", "110.70", " "}, {"C137", "C224", "C235", "63.00", "111.10", " "}, {"C137", "C224", "H140", "37.50", "110.70", " "}, {"C137", "C224", "N238", "80.00", "109.70", " "}, {"C137", "C283", "C271", "63.00", "111.10", " "}, {"C137", "C283", "H140", "37.50", "110.70", " "}, {"C137", "C283", "N238", "80.00", "109.70", " "}, {"C137", "C293", "C235", "63.00", "111.10", " "}, {"C137", "C293", "H140", "37.50", "110.70", " "}, {"C137", "C293", "N287", "80.00", "111.20", " "}, {"C145", "C145", "C145", "63.00", "120.00", " "}, {"C145", "C145", "C149", "70.00", "120.00", " "}, {"C145", "C145", "C166", "63.00", "120.00", " "}, {"C145", "C145", "C501", "63.00", "120.00", " "}, {"C145", "C145", "C502", "85.00", "120.00", " "}, {"C145", "C145", "H146", "35.00", "120.00", " "}, {"C145", "C149", "C224", "63.00", "114.00", " "}, {"C145", "C149", "C283", "63.00", "114.00", " "}, {"C145", "C149", "C293", "63.00", "114.00", " "}, {"C145", "C149", "H140", "35.00", "109.50", " "}, {"C145", "C166", "C145", "63.00", "120.00", " "}, {"C145", "C166", "O167", "70.00", "120.00", " "}, {"C145", "C501", "C500", "85.00", "134.90", " "}, {"C145", "C501", "C502", "85.00", "116.20", " "}, {"C145", "C502", "C501", "85.00", "122.70", " "}, {"C145", "C502", "N503", "70.00", "132.80", " "}, {"C149", "C224", "C235", "63.00", "111.10", " "}, {"C149", "C224", "H140", "37.50", "110.70", " "}, {"C149", "C224", "N238", "80.00", "109.70", " "}, {"C149", "C283", "C271", "63.00", "111.10", " "}, {"C149", "C283", "H140", "37.50", "110.70", " "}, {"C149", "C283", "N238", "80.00", "109.70", " "}, {"C149", "C293", "C235", "63.00", "111.10", " "}, {"C149", "C293", "H140", "37.50", "110.70", " "}, {"C149", "C293", "N287", "80.00", "111.20", " "}, {"C157", "C224", "C235", "63.00", "111.10", " "}, {"C157", "C224", "H140", "37.50", "110.70", " "}, {"C157", "C224", "N238", "80.00", "109.70", " "}, {"C157", "C283", "C271", "63.00", "111.10", " "}, {"C157", "C283", "H140", "37.50", "110.70", " "}, {"C157", "C283", "N238", "80.00", "109.70", " "}, {"C157", "C293", "C235", "63.00", "111.10", " "}, {"C157", "C293", "H140", "37.50", "110.70", " "}, {"C157", "C293", "N287", "80.00", "111.20", " "}, {"C157", "O154", "H155", "55.00", "108.50", " "}, {"C158", "C135", "H140", "37.50", "110.70", " "}, {"C158", "C224", "C235", "63.00", "111.10", " "}, {"C158", "C224", "H140", "37.50", "110.70", " "}, {"C158", "C224", "N238", "80.00", "109.70", " "}, {"C158", "C283", "C271", "63.00", "111.10", " "}, {"C158", "C283", "H140", "37.50", "110.70", " "}, {"C158", "C283", "N238", "80.00", "109.70", " "}, {"C158", "C293", "C235", "63.00", "111.10", " "}, {"C158", "C293", "H140", "37.50", "110.70", " "}, {"C158", "C293", "N287", "80.00", "111.20", " "}, {"C158", "O154", "H155", "55.00", "108.50", " "}, {"C166", "C145", "H146", "35.00", "120.00", " "}, {"C166", "O167", "H168", "35.00", "113.00", " "}, {"C206", "C224", "C235", "63.00", "111.10", " "}, {"C206", "C224", "H140", "37.50", "110.70", " "}, {"C206", "C224", "N238", "80.00", "109.70", " "}, {"C206", "C283", "C271", "63.00", "111.10", " "}, {"C206", "C283", "H140", "37.50", "110.70", " "}, {"C206", "C283", "N238", "80.00", "109.70", " "}, {"C206", "C293", "C235", "63.00", "111.10", " "}, {"C206", "C293", "H140", "37.50", "110.70", " "}, {"C206", "C293", "N287", "80.00", "111.20", " "}, {"C206", "S200", "H204", "44.00", "96.00", " "}, {"C209", "S202", "C210", "62.00", "98.90", " "}, {"C210", "C136", "C224", "58.35", "112.70", " "}, {"C210", "C136", "C283", "58.35", "112.70", " "}, {"C210", "C136", "C293", "58.35", "112.70", " "}, {"C210", "C136", "H140", "37.50", "110.70", " "}, {"C214", "C224", "C235", "63.00", "111.10", " "}, {"C214", "C224", "H140", "37.50", "110.70", " "}, {"C214", "C224", "N238", "80.00", "109.70", " "}, {"C214", "C283", "C271", "63.00", "111.10", " "}, {"C214", "C283", "H140", "37.50", "110.70", " "}, {"C214", "C283", "N238", "80.00", "109.70", " "}, {"C214", "C293", "C235", "63.00", "111.10", " "}, {"C214", "C293", "H140", "37.50", "110.70", " "}, {"C214", "C293", "N287", "80.00", "111.20", " "}, {"C214", "S203", "S203", "68.00", "103.70", " "}, {"C223", "C235", "N238", "70.00", "116.60", " "}, {"C223", "C235", "N239", "70.00", "116.60", " "}, {"C223", "C235", "O236", "80.00", "120.40", " "}, {"C223", "N238", "C235", "50.00", "121.90", " "}, {"C223", "N238", "H241", "38.00", "118.40", " "}, {"C224", "C135", "H140", "37.50", "110.70", " "}, {"C224", "C136", "C235", "63.00", "111.10", " "}, {"C224", "C136", "C267", "63.00", "111.10", " "}, {"C224", "C136", "C274", "58.35", "112.70", " "}, {"C224", "C136", "C308", "58.35", "112.70", " "}, {"C224", "C136", "C500", "63.00", "115.60", " "}, {"C224", "C136", "H140", "37.50", "110.70", " "}, {"C224", "C137", "H140", "37.50", "110.70", " "}, {"C224", "C149", "H140", "37.50", "110.70", " "}, {"C224", "C157", "H140", "37.50", "110.70", " "}, {"C224", "C157", "O154", "50.00", "109.50", " "}, {"C224", "C158", "H140", "37.50", "110.70", " "}, {"C224", "C158", "O154", "50.00", "109.50", " "}, {"C224", "C206", "H140", "37.50", "110.70", " "}, {"C224", "C206", "S200", "50.00", "108.60", " "}, {"C224", "C214", "H140", "37.50", "110.70", " "}, {"C224", "C214", "S203", "50.00", "114.70", " "}, {"C224", "C235", "N238", "70.00", "116.60", " "}, {"C224", "C235", "N239", "70.00", "116.60", " "}, {"C224", "C235", "O236", "80.00", "120.40", " "}, {"C223", "C267", "O268", "70.00", "108.00", "protonated C-terminal Gly, adm jr."}, {"C224", "C267", "O268", "70.00", "108.00", " "}, {"C223", "C267", "O269", "80.00", "120.40", "protonated C-terminal Gly, adm jr."}, {"C224", "C267", "O269", "80.00", "120.40", " "}, {"C224", "C274", "C271", "63.00", "111.10", " "}, {"C224", "C274", "H140", "37.50", "110.70", " "}, {"C224", "C505", "C507", "63.00", "114.00", " "}, {"C224", "C505", "C508", "63.00", "114.00", " "}, {"C224", "C505", "C510", "63.00", "114.00", " "}, {"C224", "C505", "H140", "37.50", "110.70", " "}, {"C224", "N238", "C235", "50.00", "121.90", " "}, {"C224", "N238", "H241", "38.00", "118.40", " "}, {"C235", "C135", "H140", "35.00", "109.50", " "}, {"C235", "C136", "C283", "63.00", "111.10", " "}, {"C235", "C136", "C293", "63.00", "111.10", " "}, {"C235", "C136", "H140", "35.00", "109.50", " "}, {"C235", "C223", "H140", "35.00", "109.50", " "}, {"C235", "C223", "N238", "63.00", "110.10", " "}, {"C235", "C224", "C274", "63.00", "111.10", " "}, {"C235", "C224", "C505", "63.00", "111.10", " "}, {"C235", "C224", "H140", "35.00", "109.50", " "}, {"C235", "C224", "N238", "63.00", "110.10", " "}, {"C235", "C246", "H140", "35.00", "109.50", " "}, {"C235", "C246", "N239", "63.00", "110.10", " "}, {"C235", "C292", "H140", "35.00", "109.50", " "}, {"C235", "C292", "N287", "80.00", "111.20", " "}, {"C235", "C293", "C274", "63.00", "111.10", " "}, {"C235", "C293", "C505", "63.00", "111.10", " "}, {"C235", "C293", "H140", "35.00", "109.50", " "}, {"C235", "C293", "N287", "80.00", "111.20", " "}, {"C235", "C295", "H140", "35.00", "109.50", " "}, {"C235", "C295", "N309", "80.00", "111.20", " "}, {"C235", "N237", "H240", "35.00", "119.80", " "}, {"C235", "N238", "C242", "50.00", "121.90", " "}, {"C235", "N238", "C283", "50.00", "121.90", " "}, {"C235", "N238", "C284", "50.00", "121.90", " "}, {"C235", "N238", "H241", "35.00", "119.80", " "}, {"C235", "N239", "C245", "50.00", "121.90", " "}, {"C235", "N239", "C246", "50.00", "121.90", " "}, {"C235", "N239", "C285", "50.00", "121.90", " "}, {"C242", "N238", "H241", "38.00", "118.40", " "}, {"C245", "C136", "H140", "37.50", "110.70", " "}, {"C245", "N238", "C285", "50.00", "118.00", " "}, {"C245", "N239", "C246", "50.00", "118.00", " "}, {"C245", "N239", "C285", "50.00", "118.00", " "}, {"C246", "C136", "H140", "37.50", "110.70", " "}, {"C246", "C235", "N238", "70.00", "116.60", " "}, {"C246", "C235", "N239", "70.00", "116.60", " "}, {"C246", "C235", "O236", "80.00", "120.40", " "}, {"C267", "C136", "C283", "63.00", "111.10", " "}, {"C267", "C136", "C293", "63.00", "111.10", " "}, {"C267", "C136", "H140", "35.00", "109.50", " "}, {"C267", "C223", "H140", "35.00", "109.50", "protonated C-terminal Gly, adm jr."}, {"C267", "C224", "H140", "35.00", "109.50", " "}, {"C267", "C223", "N238", "63.00", "110.10", "protonated C-terminal Gly, adm jr."}, {"C267", "C224", "N238", "63.00", "110.10", " "}, {"C267", "O268", "H270", "35.00", "113.00", " "}, {"C271", "C274", "C283", "63.00", "111.10", " "}, {"C271", "C274", "C293", "63.00", "111.10", " "}, {"C271", "C274", "H140", "35.00", "109.50", " "}, {"C271", "C283", "C274", "63.00", "111.10", " "}, {"C271", "C283", "C505", "63.00", "111.10", " "}, {"C271", "C283", "H140", "35.00", "109.50", " "}, {"C271", "C283", "N238", "63.00", "110.10", " "}, {"C271", "C284", "H140", "35.00", "109.50", " "}, {"C271", "C284", "N238", "63.00", "110.10", " "}, {"C271", "C285", "H140", "35.00", "109.50", " "}, {"C271", "C285", "N239", "63.00", "110.10", " "}, {"C274", "C136", "C283", "58.35", "112.70", " "}, {"C274", "C136", "C293", "58.35", "112.70", " "}, {"C274", "C136", "H140", "37.50", "110.70", " "}, {"C274", "C224", "H140", "37.50", "110.70", " "}, {"C274", "C224", "N238", "80.00", "109.70", " "}, {"C274", "C271", "O272", "70.00", "117.00", " "}, {"C274", "C283", "H140", "37.50", "110.70", " "}, {"C274", "C283", "N238", "80.00", "109.70", " "}, {"C274", "C293", "H140", "37.50", "110.70", " "}, {"C274", "C293", "N287", "80.00", "111.20", " "}, {"C283", "C135", "H140", "37.50", "110.70", " "}, {"C283", "C136", "C308", "58.35", "112.70", " "}, {"C283", "C136", "C500", "63.00", "115.60", " "}, {"C283", "C136", "H140", "37.50", "110.70", " "}, {"C283", "C137", "H140", "37.50", "110.70", " "}, {"C283", "C149", "H140", "37.50", "110.70", " "}, {"C283", "C157", "H140", "37.50", "110.70", " "}, {"C283", "C157", "O154", "50.00", "109.50", " "}, {"C283", "C158", "H140", "37.50", "110.70", " "}, {"C283", "C158", "O154", "50.00", "109.50", " "}, {"C283", "C206", "H140", "37.50", "110.70", " "}, {"C283", "C206", "S200", "50.00", "108.60", " "}, {"C283", "C214", "H140", "37.50", "110.70", " "}, {"C283", "C214", "S203", "50.00", "114.70", " "}, {"C283", "C271", "O272", "70.00", "117.00", " "}, {"C283", "C274", "H140", "37.50", "110.70", " "}, {"C283", "C505", "C507", "63.00", "114.00", " "}, {"C283", "C505", "C508", "63.00", "114.00", " "}, {"C283", "C505", "C510", "63.00", "114.00", " "}, {"C283", "C505", "H140", "37.50", "110.70", " "}, {"C283", "N238", "H241", "38.00", "118.40", " "}, {"C284", "C271", "O272", "70.00", "117.00", " "}, {"C284", "N238", "H241", "38.00", "118.40", " "}, {"C285", "C136", "H140", "37.50", "110.70", " "}, {"C285", "C271", "O272", "70.00", "117.00", " "}, {"C292", "C136", "H140", "37.50", "110.70", " "}, {"C292", "C235", "N238", "70.00", "116.60", " "}, {"C292", "C235", "N239", "70.00", "116.60", " "}, {"C292", "C235", "O236", "80.00", "120.40", " "}, {"C292", "N287", "H290", "35.00", "109.50", " "}, {"C293", "C135", "H140", "37.50", "110.70", " "}, {"C293", "C136", "C308", "58.35", "112.70", " "}, {"C293", "C136", "C500", "63.00", "115.60", " "}, {"C293", "C136", "H140", "37.50", "110.70", " "}, {"C293", "C137", "H140", "37.50", "110.70", " "}, {"C293", "C149", "H140", "37.50", "110.70", " "}, {"C293", "C157", "H140", "37.50", "110.70", " "}, {"C293", "C157", "O154", "50.00", "109.50", " "}, {"C293", "C158", "H140", "37.50", "110.70", " "}, {"C293", "C158", "O154", "50.00", "109.50", " "}, {"C293", "C206", "H140", "37.50", "110.70", " "}, {"C293", "C206", "S200", "50.00", "108.60", " "}, {"C293", "C214", "H140", "37.50", "110.70", " "}, {"C293", "C214", "S203", "50.00", "114.70", " "}, {"C293", "C235", "N238", "70.00", "116.60", " "}, {"C293", "C235", "N239", "70.00", "116.60", " "}, {"C293", "C235", "O236", "80.00", "120.40", " "}, {"C293", "C274", "H140", "37.50", "110.70", " "}, {"C293", "C505", "C507", "63.00", "114.00", " "}, {"C293", "C505", "C508", "63.00", "114.00", " "}, {"C293", "C505", "C510", "63.00", "114.00", " "}, {"C293", "C505", "H140", "37.50", "110.70", " "}, {"C293", "N287", "H290", "35.00", "109.50", " "}, {"C295", "C136", "H140", "37.50", "110.70", " "}, {"C295", "C235", "N238", "70.00", "116.60", " "}, {"C295", "C235", "N239", "70.00", "116.60", " "}, {"C295", "C235", "O236", "80.00", "120.40", " "}, {"C295", "N309", "C296", "50.00", "113.00", " "}, {"C295", "N309", "H310", "35.00", "109.50", " "}, {"C296", "C136", "H140", "37.50", "110.70", " "}, {"C296", "N309", "H310", "35.00", "109.50", " "}, {"C302", "N300", "H301", "35.00", "120.00", " "}, {"C302", "N303", "C307", "50.00", "123.20", " "}, {"C302", "N303", "H304", "35.00", "120.00", " "}, {"C307", "C308", "H140", "37.50", "110.70", " "}, {"C307", "N303", "H304", "35.00", "118.40", " "}, {"C308", "C136", "H140", "37.50", "110.70", " "}, {"C308", "C307", "H140", "37.50", "110.70", " "}, {"C308", "C307", "N303", "80.00", "111.20", " "}, {"C500", "C136", "H140", "35.00", "109.50", " "}, {"C500", "C501", "C502", "85.00", "108.80", " "}, {"C500", "C514", "H146", "35.00", "120.00", " "}, {"C500", "C514", "N503", "70.00", "108.70", " "}, {"C501", "C145", "H146", "35.00", "120.00", " "}, {"C501", "C500", "C514", "85.00", "106.40", " "}, {"C501", "C502", "N503", "70.00", "104.40", " "}, {"C502", "C145", "H146", "35.00", "120.00", " "}, {"C502", "N503", "C514", "70.00", "111.60", " "}, {"C502", "N503", "H504", "35.00", "123.10", " "}, {"C505", "C224", "H140", "37.50", "110.70", " "}, {"C505", "C224", "N238", "80.00", "109.70", " "}, {"C505", "C283", "H140", "37.50", "110.70", " "}, {"C505", "C283", "N238", "80.00", "109.70", " "}, {"C505", "C293", "H140", "37.50", "110.70", " "}, {"C505", "C293", "N287", "80.00", "111.20", " "}, {"C505", "C507", "C508", "70.00", "130.70", " "}, {"C505", "C507", "N511", "70.00", "124.50", " "}, {"C505", "C508", "C507", "70.00", "130.70", " "}, {"C505", "C508", "N503", "70.00", "121.60", " "}, {"C505", "C510", "C510", "70.00", "130.70", " "}, {"C505", "C510", "N512", "70.00", "121.60", " "}, {"C506", "N503", "C508", "70.00", "109.80", " "}, {"C506", "N503", "H504", "35.00", "124.00", " "}, {"C506", "N511", "C507", "70.00", "110.00", " "}, {"C507", "C505", "H140", "35.00", "109.50", " "}, {"C507", "C508", "H146", "35.00", "130.70", " "}, {"C507", "C508", "N503", "70.00", "106.30", " "}, {"C508", "C505", "H140", "35.00", "109.50", " "}, {"C508", "C507", "H146", "35.00", "128.20", " "}, {"C508", "C507", "N511", "70.00", "111.00", " "}, {"C508", "N503", "H504", "35.00", "124.00", " "}, {"C509", "N512", "C510", "70.00", "109.80", " "}, {"C509", "N512", "H513", "35.00", "124.00", " "}, {"C510", "C505", "H140", "35.00", "109.50", " "}, {"C510", "C510", "H146", "35.00", "130.70", " "}, {"C510", "C510", "N512", "70.00", "106.30", " "}, {"C510", "N512", "H513", "35.00", "124.00", " "}, {"C514", "N503", "H504", "35.00", "124.00", " "}, {"H140", "C157", "O154", "35.00", "109.50", " "}, {"H140", "C158", "O154", "35.00", "109.50", " "}, {"H140", "C206", "S200", "35.00", "109.50", " "}, {"H140", "C209", "S202", "35.00", "109.50", " "}, {"H140", "C210", "S202", "35.00", "109.50", " "}, {"H140", "C214", "S203", "35.00", "109.50", " "}, {"H140", "C223", "N238", "35.00", "109.50", " "}, {"H140", "C224", "N238", "35.00", "109.50", " "}, {"H140", "C242", "N238", "35.00", "109.50", " "}, {"H140", "C245", "N239", "35.00", "109.50", " "}, {"H140", "C246", "N239", "35.00", "109.50", " "}, {"H140", "C283", "N238", "35.00", "109.50", " "}, {"H140", "C284", "N238", "35.00", "109.50", " "}, {"H140", "C285", "N239", "35.00", "109.50", " "}, {"H140", "C292", "N287", "35.00", "109.50", " "}, {"H140", "C293", "N287", "35.00", "109.50", " "}, {"H140", "C295", "N309", "35.00", "109.50", " "}, {"H140", "C296", "N309", "35.00", "109.50", " "}, {"H140", "C307", "N303", "35.00", "109.50", " "}, {"H146", "C506", "N503", "35.00", "120.00", " "}, {"H146", "C506", "N511", "35.00", "120.00", " "}, {"H146", "C507", "N511", "35.00", "120.00", " "}, {"H146", "C508", "N503", "35.00", "121.60", " "}, {"H146", "C509", "N512", "35.00", "120.00", " "}, {"H146", "C510", "N512", "35.00", "120.00", " "}, {"H146", "C514", "N503", "35.00", "121.60", " "}, {"H240", "N237", "H240", "35.00", "120.00", " "}, {"H301", "N300", "H301", "35.00", "120.00", " "}, {"N237", "C235", "O236", "80.00", "122.90", " "}, {"N238", "C235", "O236", "80.00", "122.90", " "}, {"N239", "C235", "O236", "80.00", "122.90", " "}, {"N300", "C302", "N300", "70.00", "120.00", " "}, {"N300", "C302", "N303", "70.00", "120.00", " "}, {"N503", "C506", "N511", "70.00", "120.00", " "}, {"N512", "C509", "N512", "70.00", "120.00", " "}, {"O268", "C267", "O269", "80.00", "121.00", " "}, {"O272", "C271", "O272", "80.00", "126.00", " "}, {"C183", "O186", "C933", "110.00", "115.000", " "}, {"H196", "C933", "O186", "35.00", "109.500", " "}, {"C320", "N321", "C322", "70.00", "126.400", " "}, {"C320", "N321", "H327", "35.00", "116.800", " "}, {"C324", "N938", "C320", "70.00", "121.600", " "}, {"N321", "C322", "O328", "80.00", "120.600", " "}, {"N321", "C322", "C323", "70.00", "114.100", " "}, {"O326", "C320", "N321", "80.00", "120.600", " "}, {"H327", "N321", "C322", "35.00", "116.800", " "}, {"C322", "C323", "C324", "85.00", "120.700", " "}, {"C322", "C323", "H329", "35.00", "119.700", " "}, {"O328", "C322", "C323", "80.00", "125.300", " "}, {"H329", "C323", "C324", "35.00", "120.000", " "}, {"H196", "C933", "C174", "37.50", "110.700", " "}, {"O186", "C933", "C174", "90.00", "106.000", " "}, {"N938", "C933", "O186", "50.00", "109.500", " "}, {"C933", "C174", "H176", "37.50", "110.700", " "}, {"C933", "C174", "O169", "50.00", "109.500", " "}, {"C933", "C174", "C174", "110.00", "96.000", " "}, {"C933", "N938", "C324", "70.00", "121.200", " "}, {"C320", "N938", "C933", "70.00", "117.600", " "}, {"N938", "C320", "O326", "80.00", "120.900", " "}, {"N938", "C320", "N321", "70.00", "115.400", " "}, {"C323", "C324", "N938", "70.00", "121.200", " "}, {"N938", "C324", "H330", "35.00", "119.100", " "}, {"N938", "C933", "H196", "35.00", "109.500", " "}, {"N938", "C933", "C174", "50.00", "109.500", " "}, {"H330", "C324", "C323", "35.00", "120.000", " "}, {"C336", "N335", "C334", "70.00", "120.500", " "}, {"N335", "C336", "N341", "70.00", "119.300", " "}, {"C337", "C336", "N335", "70.00", "121.500", " "}, {"C183", "O186", "C932", "110.00", "115.000", " "}, {"H196", "C932", "O186", "35.00", "109.500", " "}, {"O186", "C932", "C174", "90.00", "106.000", " "}, {"N937", "C932", "O186", "50.00", "109.500", " "}, {"C338", "C337", "H344", "35.00", "120.000", " "}, {"C334", "N937", "C338", "70.00", "121.600", " "}, {"O340", "C334", "N335", "80.00", "122.500", " "}, {"C336", "N341", "H343", "35.00", "120.000", " "}, {"C336", "N341", "H342", "35.00", "120.000", " "}, {"C338", "C337", "C336", "85.00", "117.000", " "}, {"H344", "C337", "C336", "35.00", "123.300", " "}, {"C337", "C336", "N341", "70.00", "120.100", " "}, {"H343", "N341", "H342", "35.00", "113.000", " "}, {"H196", "C932", "C174", "37.50", "110.700", " "}, {"C932", "C174", "H176", "37.50", "110.700", " "}, {"C932", "C174", "O169", "50.00", "109.500", " "}, {"C932", "C174", "C174", "110.00", "96.000", " "}, {"C338", "N937", "C932", "70.00", "121.200", " "}, {"C932", "N937", "C334", "70.00", "117.600", " "}, {"N937", "C334", "O340", "80.00", "120.900", " "}, {"N335", "C334", "N937", "70.00", "118.600", " "}, {"N937", "C338", "C337", "70.00", "121.200", " "}, {"N937", "C338", "H345", "35.00", "119.100", " "}, {"N937", "C932", "H196", "35.00", "109.500", " "}, {"N937", "C932", "C174", "50.00", "109.500", " "}, {"H345", "C338", "C337", "35.00", "119.700", " "}, {"O370", "C366", "N361", "80.00", "120.600", " "}, {"C364", "C365", "C366", "85.00", "119.200", " "}, {"C365", "N352", "C353", "70.00", "103.800", " "}, {"C365", "C366", "O370", "80.00", "128.800", " "}, {"C364", "C365", "N352", "70.00", "111.000", " "}, {"N361", "C362", "N363", "70.00", "123.300", " "}, {"C362", "N368", "H369", "35.00", "120.000", " "}, {"N352", "C365", "C366", "70.00", "130.000", " "}, {"C365", "C366", "N361", "70.00", "111.300", " "}, {"C366", "N361", "H367", "35.00", "116.800", " "}, {"N936", "C364", "C365", "70.00", "106.200", " "}, {"H369", "N368", "H369", "35.00", "113.000", " "}, {"N363", "C364", "C365", "70.00", "127.700", " "}, {"C366", "N361", "C362", "70.00", "125.200", " "}, {"H367", "N361", "C362", "35.00", "118.000", " "}, {"N936", "C364", "N363", "70.00", "126.200", " "}, {"C362", "N363", "C364", "70.00", "112.200", " "}, {"C353", "N936", "C364", "70.00", "105.400", " "}, {"N368", "C362", "N363", "70.00", "119.300", " "}, {"N361", "C362", "N368", "70.00", "116.000", " "}, {"C364", "N936", "C931", "70.00", "125.800", " "}, {"C183", "C6448", "H140", "37.5", "110.700", " "}, {"P440", "O6452", "P6450", "50.00", "150.000", " "}, {"O441", "P6450", "O6452", "100.00", "108.230", " "}, {"O441", "P6450", "O441", "140.00", "119.900", " "}, {"C6448", "O6934", "P440", "100.00", "120.500", " "}, {"C6448", "C183", "H185", "37.50", "110.700", " "}, {"C174", "C183", "C6448", "58.35", "112.700", " "}, {"C6448", "C183", "O186", "50.00", "109.500", " "}, {"H140", "C6448", "H140", "33.0", "107.800", " "}, {"O6452", "P440", "O6934", "45.00", "102.600", " "}, {"O441", "P440", "O6934", "100.00", "108.230", " "}, {"H140", "C6448", "O6934", "35.00", "109.500", " "}, {"C183", "C6448", "O6934", "50.00", "109.500", " "}, {"P440", "O6452", "P440", "50.00", "150.000", " "}, {"O441", "P440", "O6452", "100.00", "108.230", " "}, {"O441", "P440", "O441", "140.00", "119.900", " "}, {"O6442", "P440", "O6452", "45.00", "102.600", " "}, {"P440", "O6442", "P6450", "50.00", "150.000", " "}, {"O441", "P440", "O6442", "100.00", "108.230", " "}, {"O6441", "P6450", "O6442", "100.00", "108.230", " "}, {"O6441", "P6450", "O6441", "140.00", "119.900", " "}, {"C931", "N936", "C353", "70.00", "128.800", " "}, {"N936", "C931", "C174", "50.00", "109.500", " "}, {"N936", "C931", "O186", "50.00", "109.500", " "}, {"N936", "C931", "H196", "35.00", "109.500", " "}, {"C931", "C174", "C174", "110.00", "96.500", " "}, {"C931", "C174", "O169", "50.00", "109.500", " "}, {"C931", "C174", "H176", "37.50", "110.700", " "}, {"C174", "C174", "C183", "60.00", "100.000", " "}, {"C174", "C174", "H176", "37.50", "110.700", " "}, {"C174", "C183", "C157", "58.35", "112.700", " "}, {"C174", "C183", "H185", "37.50", "110.700", " "}, {"C183", "C157", "O154", "50.00", "109.500", " "}, {"C183", "C157", "H140", "37.50", "110.700", " "}, {"C174", "O169", "H170", "55.00", "108.500", " "}, {"N936", "C349", "C350", "70.00", "106.200", " "}, {"N936", "C349", "N348", "70.00", "126.200", " "}, {"C349", "C350", "C351", "85.00", "117.300", " "}, {"C349", "C350", "N352", "70.00", "111.000", " "}, {"C350", "C351", "N356", "70.00", "123.500", " "}, {"C350", "C351", "N346", "70.00", "117.300", " "}, {"C351", "N356", "H357", "35.00", "120.000", " "}, {"C351", "N356", "H358", "35.00", "120.000", " "}, {"C351", "N346", "C347", "70.00", "118.600", " "}, {"N346", "C347", "H355", "35.00", "115.450", " "}, {"N936", "C353", "H359", "35.00", "123.050", " "}, {"C349", "N936", "C931", "70.00", "125.800", " "}, {"C353", "N936", "C349", "70.00", "105.400", " "}, {"O186", "C931", "C174", "90.00", "106.000", " "}, {"H196", "C931", "C174", "37.50", "110.700", " "}, {"H196", "C931", "O186", "35.00", "109.500", " "}, {"N348", "C349", "C350", "70.00", "127.700", " "}, {"N352", "C353", "N936", "70.00", "113.900", " "}, {"H359", "C353", "N352", "35.00", "123.050", " "}, {"O169", "C174", "C174", "50.00", "109.500", " "}, {"H176", "C174", "O169", "35.00", "109.500", " "}, {"C183", "O186", "C931", "110.00", "115.000", " "}, {"O169", "C174", "C183", "50.00", "109.500", " "}, {"H176", "C174", "C183", "37.50", "110.700", " "}, {"C174", "C183", "O186", "100.00", "109.500", " "}, {"C157", "C183", "O186", "50.00", "109.500", " "}, {"H185", "C183", "O186", "35.00", "109.500", " "}, {"H185", "C183", "C157", "37.50", "110.700", " "}, {"N352", "C350", "C351", "70.00", "132.400", " "}, {"C347", "N348", "C349", "70.00", "111.000", " "}, {"N346", "C351", "N356", "70.00", "119.300", " "}, {"C350", "N352", "C353", "70.00", "103.800", " "}, {"H358", "N356", "H357", "35.00", "113.000", " "}, {"N346", "C347", "N348", "70.00", "129.100", " "}, {"H355", "C347", "N348", "35.00", "115.450", " "}}; /* Dihedrals */ char * OPLSAAR_dihedrals[2482][8]= {{"X", "C145", "C145", "X", "3.6250", "2", "180.0", " "}, {"X", "C145", "C166", "X", "3.6250", "2", "180.0", " "}, {"X", "C145", "C501", "X", "3.5000", "2", "180.0", " "}, {"X", "C145", "C502", "X", "3.6250", "2", "180.0", " "}, {"X", "C302", "N300", "X", "1.9500", "2", "180.0", " "}, {"X", "C500", "C501", "X", "1.6750", "2", "180.0", " "}, {"X", "C500", "C514", "X", "6.5250", "2", "180.0", " "}, {"X", "C501", "C502", "X", "3.0000", "2", "180.0", " "}, {"X", "C502", "N503", "X", "1.5250", "2", "180.0", " "}, {"X", "C506", "N503", "X", "2.3250", "2", "180.0", " "}, {"X", "C506", "N511", "X", "5.0000", "2", "180.0", " "}, {"X", "C507", "C508", "X", "5.3750", "2", "180.0", " "}, {"X", "C507", "N511", "X", "2.4000", "2", "180.0", " "}, {"X", "C509", "N512", "X", "2.3250", "2", "180.0", " "}, {"X", "C510", "C510", "X", "5.3750", "2", "180.0", " "}, {"X", "C514", "N503", "X", "1.5000", "2", "180.0", " "}, {"O6934", "P440", "O6934", "C157", "0.2500", "1", "0.0", "Alpha"}, {"O6934", "P440", "O6934", "C157", "-0.4000", "2", "180.0", " "}, {"O6934", "P440", "O6934", "C157", "0.2000", "3", "0.0", " "}, {"O6934", "P440", "O6934", "C157", "0.0000", "4", "180.0", " "}, {"O441", "P440", "O6934", "C157", "-0.4500", "1", "0.0", "Alpha prime"}, {"O441", "P440", "O6934", "C157", "0.8500", "2", "180.0", " "}, {"O441", "P440", "O6934", "C157", "0.2000", "3", "0.0", " "}, {"O441", "P440", "O6934", "C157", "0.0000", "4", "180.0", " "}, {"C174", "O6934", "P440", "O441", "-0.4000", "1", "0.0", "Zeta prime"}, {"C174", "O6934", "P440", "O441", "-0.2150", "2", "180.0", " "}, {"C174", "O6934", "P440", "O441", "0.7200", "3", "0.0", " "}, {"C174", "O6934", "P440", "O441", "0.0000", "4", "180.0", " "}, {"C174", "O6934", "P440", "O6934", "0.1900", "1", "0.0", "Zeta"}, {"C174", "O6934", "P440", "O6934", "-1.5100", "2", "180.0", " "}, {"C174", "O6934", "P440", "O6934", "-0.1500", "3", "0.0", " "}, {"C174", "O6934", "P440", "O6934", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C174", "O6934", "4.5330", "1", "0.0", "Technically a Sugar"}, {"O169", "C174", "C174", "O6934", "0.0000", "2", "180.0", " "}, {"O169", "C174", "C174", "O6934", "0.0000", "3", "0.0", " "}, {"O169", "C174", "C174", "O6934", "0.0000", "4", "0.0", " "}, {"P440", "O6934", "C157", "C183", "1.7100", "1", "0.0", "Beta"}, {"P440", "O6934", "C157", "C183", "-0.3100", "2", "180.0", " "}, {"P440", "O6934", "C157", "C183", "0.0500", "3", "0.0", " "}, {"P440", "O6934", "C157", "C183", "0.0000", "4", "180.0", " "}, {"C174", "C174", "O6934", "P440", "0.1000", "1", "0.0", "Epsilon"}, {"C174", "C174", "O6934", "P440", "-0.5500", "2", "180.0", " "}, {"C174", "C174", "O6934", "P440", "-0.0500", "3", "0.0", " "}, {"C174", "C174", "O6934", "P440", "0.0000", "4", "180.0", " "}, {"C174", "C183", "C157", "O6934", "-0.8500", "1", "0.0", "Gamma"}, {"C174", "C183", "C157", "O6934", "-0.7000", "2", "180.0", " "}, {"C174", "C183", "C157", "O6934", "1.4000", "3", "0.0", " "}, {"C174", "C183", "C157", "O6934", "0.0000", "4", "180.0", " "}, {"C931", "C174", "C174", "O6934", "-0.2180", "1", "0.0", "Sugar"}, {"C931", "C174", "C174", "O6934", "0.4500", "2", "180.0", " "}, {"C931", "C174", "C174", "O6934", "0.0000", "3", "0.0", " "}, {"C931", "C174", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"C933", "C174", "C174", "O6934", "-0.2180", "1", "0.0", "Sugar"}, {"C933", "C174", "C174", "O6934", "0.4500", "2", "180.0", " "}, {"C933", "C174", "C174", "O6934", "0.0000", "3", "0.0", " "}, {"C933", "C174", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"C932", "C174", "C174", "O6934", "-0.2180", "1", "0.0", "Sugar"}, {"C932", "C174", "C174", "O6934", "0.4500", "2", "180.0", " "}, {"C932", "C174", "C174", "O6934", "0.0000", "3", "0.0", " "}, {"C932", "C174", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"O6934", "C157", "C183", "O186", "1.9595", "1", "0.0", "Gamma Prime"}, {"O6934", "C157", "C183", "O186", "-1.0000", "2", "180.0", " "}, {"O6934", "C157", "C183", "O186", "-0.8500", "3", "0.0", " "}, {"O6934", "C157", "C183", "O186", "0.0000", "4", "180.0", " "}, {"O186", "C183", "C174", "O6934", "2.1595", "1", "0.0", "Sugar"}, {"O186", "C183", "C174", "O6934", "0.0000", "2", "180.0", " "}, {"O186", "C183", "C174", "O6934", "0.0000", "3", "0.0", " "}, {"O186", "C183", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"H176", "C174", "O6934", "P440", "0.0000", "1", "0.0", "Epsilon Double Prime"}, {"H176", "C174", "O6934", "P440", "0.0000", "2", "180.0", " "}, {"H176", "C174", "O6934", "P440", "0.1500", "3", "0.0", " "}, {"H176", "C174", "O6934", "P440", "0.0000", "4", "180.0", " "}, {"P440", "O6934", "C157", "H140", "0.0000", "1", "0.0", "Beta Prime"}, {"P440", "O6934", "C157", "H140", "0.0000", "2", "180.0", " "}, {"P440", "O6934", "C157", "H140", "0.1500", "3", "0.0", " "}, {"P440", "O6934", "C157", "H140", "0.0000", "4", "180.0", " "}, {"H185", "C183", "C174", "O6934", "0.0000", "1", "0.0", "Sugar Pucker"}, {"H185", "C183", "C174", "O6934", "0.0000", "2", "180.0", " "}, {"H185", "C183", "C174", "O6934", "0.2340", "3", "0.0", " "}, {"H185", "C183", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C174", "O6934", "0.0000", "1", "0.0", "Sugar"}, {"H176", "C174", "C174", "O6934", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C174", "O6934", "0.2340", "3", "0.0", " "}, {"H176", "C174", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"O6934", "C157", "C183", "H185", "0.0000", "1", "0.0", "Sugar"}, {"O6934", "C157", "C183", "H185", "0.0000", "2", "180.0", " "}, {"O6934", "C157", "C183", "H185", "0.2340", "3", "0.0", " "}, {"O6934", "C157", "C183", "H185", "0.0000", "4", "180.0", " "}, {"C183", "C174", "O6934", "P440", "0.1400", "1", "0.0", "Epsilon Prime"}, {"C183", "C174", "O6934", "P440", "-0.6100", "2", "180.0", " "}, {"C183", "C174", "O6934", "P440", "-0.8000", "3", "0.0", " "}, {"C183", "C174", "O6934", "P440", "0.0000", "4", "180.0", " "}, {"C157", "C183", "C174", "O6934", "-0.2180", "1", "0.0", "Sugar Pucker"}, {"C157", "C183", "C174", "O6934", "0.4500", "2", "180.0", " "}, {"C157", "C183", "C174", "O6934", "0.0000", "3", "0.0", " "}, {"C157", "C183", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"C135", "C136", "C137", "C135", "0.6500", "1", "0.0", " "}, {"C135", "C136", "C137", "C135", "-0.1000", "2", "180.0", " "}, {"C135", "C136", "C137", "C135", "0.1000", "3", "0.0", " "}, {"C135", "C136", "C137", "C224", "0.6500", "1", "0.0", " "}, {"C135", "C136", "C137", "C224", "-0.1000", "2", "180.0", " "}, {"C135", "C136", "C137", "C224", "0.1000", "3", "0.0", " "}, {"C135", "C136", "C137", "C283", "0.6500", "1", "0.0", " "}, {"C135", "C136", "C137", "C283", "-0.1000", "2", "180.0", " "}, {"C135", "C136", "C137", "C283", "0.1000", "3", "0.0", " "}, {"C135", "C136", "C137", "C293", "0.6500", "1", "0.0", " "}, {"C135", "C136", "C137", "C293", "-0.1000", "2", "180.0", " "}, {"C135", "C136", "C137", "C293", "0.1000", "3", "0.0", " "}, {"C135", "C136", "C137", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C136", "C224", "0.6500", "1", "0.0", " "}, {"C135", "C137", "C136", "C224", "-0.1000", "2", "180.0", " "}, {"C135", "C137", "C136", "C224", "0.1000", "3", "0.0", " "}, {"C135", "C137", "C136", "C283", "0.6500", "1", "0.0", " "}, {"C135", "C137", "C136", "C283", "-0.1000", "2", "180.0", " "}, {"C135", "C137", "C136", "C283", "0.1000", "3", "0.0", " "}, {"C135", "C137", "C136", "C293", "0.6500", "1", "0.0", " "}, {"C135", "C137", "C136", "C293", "-0.1000", "2", "180.0", " "}, {"C135", "C137", "C136", "C293", "0.1000", "3", "0.0", " "}, {"C135", "C137", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C224", "C235", "-0.7110", "1", "0.0", " "}, {"C135", "C137", "C224", "C235", "0.5340", "2", "180.0", " "}, {"C135", "C137", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C135", "C137", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C224", "N238", "1.4970", "1", "0.0", " "}, {"C135", "C137", "C224", "N238", "0.1260", "2", "180.0", " "}, {"C135", "C137", "C224", "N238", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C283", "C271", "-0.7110", "1", "0.0", " "}, {"C135", "C137", "C283", "C271", "0.5340", "2", "180.0", " "}, {"C135", "C137", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C135", "C137", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C283", "N238", "1.4970", "1", "0.0", " "}, {"C135", "C137", "C283", "N238", "0.1260", "2", "180.0", " "}, {"C135", "C137", "C283", "N238", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C293", "C235", "-0.7110", "1", "0.0", " "}, {"C135", "C137", "C293", "C235", "0.5340", "2", "180.0", " "}, {"C135", "C137", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C135", "C137", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C293", "N287", "1.4970", "1", "0.0", " "}, {"C135", "C137", "C293", "N287", "0.1260", "2", "180.0", " "}, {"C135", "C137", "C293", "N287", "0.1500", "3", "0.0", " "}, {"C135", "C158", "C224", "C235", "-0.7110", "1", "0.0", " "}, {"C135", "C158", "C224", "C235", "0.5340", "2", "180.0", " "}, {"C135", "C158", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C135", "C158", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C158", "C224", "N238", "1.4970", "1", "0.0", " "}, {"C135", "C158", "C224", "N238", "0.1260", "2", "180.0", " "}, {"C135", "C158", "C224", "N238", "0.1500", "3", "0.0", " "}, {"C135", "C158", "C283", "C271", "-0.7110", "1", "0.0", " "}, {"C135", "C158", "C283", "C271", "0.5340", "2", "180.0", " "}, {"C135", "C158", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C135", "C158", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C158", "C283", "N238", "1.4970", "1", "0.0", " "}, {"C135", "C158", "C283", "N238", "0.1260", "2", "180.0", " "}, {"C135", "C158", "C283", "N238", "0.1500", "3", "0.0", " "}, {"C135", "C158", "C293", "C235", "-0.7110", "1", "0.0", " "}, {"C135", "C158", "C293", "C235", "0.5340", "2", "180.0", " "}, {"C135", "C158", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C135", "C158", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C158", "C293", "N287", "1.4970", "1", "0.0", " "}, {"C135", "C158", "C293", "N287", "0.1260", "2", "180.0", " "}, {"C135", "C158", "C293", "N287", "0.1500", "3", "0.0", " "}, {"C135", "C158", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C135", "C158", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C135", "C158", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C135", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C135", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C135", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C135", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C135", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C135", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C135", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C135", "C224", "C267", "O268", "0.5000", "1", "0.0", " "}, {"C135", "C224", "C267", "O268", "0.2730", "2", "180.0", " "}, {"C135", "C224", "C267", "O268", "0.2250", "3", "0.0", " "}, {"C135", "C224", "C267", "O269", "0.2730", "2", "180.0", " "}, {"C135", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C135", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C135", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C135", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C135", "C235", "N238", "C223", "1.1500", "1", "0.0", " "}, {"C135", "C235", "N238", "C223", "3.0445", "2", "180.0", " "}, {"C135", "C235", "N238", "C224", "1.1500", "1", "0.0", " "}, {"C135", "C235", "N238", "C224", "3.0445", "2", "180.0", " "}, {"C135", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C135", "C235", "N239", "C245", "1.1500", "1", "0.0", " "}, {"C135", "C235", "N239", "C245", "3.0445", "2", "180.0", " "}, {"C135", "C235", "N239", "C246", "1.1500", "1", "0.0", " "}, {"C135", "C235", "N239", "C246", "3.0445", "2", "180.0", " "}, {"C135", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C135", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C135", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C135", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C135", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C135", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C135", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C135", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C135", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C135", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C135", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C135", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C135", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C136", "C136", "C136", "C224", "0.6500", "1", "0.0", " "}, {"C136", "C136", "C136", "C224", "-0.1000", "2", "180.0", " "}, {"C136", "C136", "C136", "C224", "0.1000", "3", "0.0", " "}, {"C267", "C136", "C136", "C224", "0.6500", "1", "0.0", "protonated Glu, adm jr."}, {"C267", "C136", "C136", "C224", "-0.1000", "2", "180.0", "protonated Glu, adm jr."}, {"C267", "C136", "C136", "C224", "0.1000", "3", "0.0", "protonated Glu, adm jr."}, {"C136", "C136", "C136", "C283", "0.6500", "1", "0.0", " "}, {"C136", "C136", "C136", "C283", "-0.1000", "2", "180.0", " "}, {"C136", "C136", "C136", "C283", "0.1000", "3", "0.0", " "}, {"C136", "C136", "C136", "C292", "0.6500", "1", "0.0", " "}, {"C136", "C136", "C136", "C292", "-0.1000", "2", "180.0", " "}, {"C136", "C136", "C136", "C292", "0.1000", "3", "0.0", " "}, {"C136", "C136", "C136", "C293", "0.6500", "1", "0.0", " "}, {"C136", "C136", "C136", "C293", "-0.1000", "2", "180.0", " "}, {"C136", "C136", "C136", "C293", "0.1000", "3", "0.0", " "}, {"C136", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C267", "C136", "C136", "H140", "0.1500", "3", "0.0", "protonated Glu, adm jr."}, {"C136", "C136", "C224", "C235", "-1.1790", "1", "0.0", " "}, {"C136", "C136", "C224", "C235", "0.4555", "2", "180.0", " "}, {"C136", "C136", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C136", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C224", "N238", "0.4420", "1", "0.0", " "}, {"C136", "C136", "C224", "N238", "0.4485", "2", "180.0", " "}, {"C136", "C136", "C224", "N238", "0.4400", "3", "0.0", " "}, {"C136", "C136", "C235", "N237", "1.4220", "1", "0.0", " "}, {"C136", "C136", "C235", "N237", "-0.1805", "2", "180.0", " "}, {"C136", "C136", "C235", "N237", "-0.1625", "3", "0.0", " "}, {"C136", "C136", "C235", "O236", "0.2030", "1", "0.0", " "}, {"C136", "C136", "C235", "O236", "0.6520", "2", "180.0", " "}, {"C136", "C136", "C235", "O236", "0.0695", "3", "0.0", " "}, {"C136", "C136", "C245", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C245", "N239", "0.4225", "1", "0.0", " "}, {"C136", "C136", "C245", "N239", "-0.4810", "2", "180.0", " "}, {"C136", "C136", "C245", "N239", "0.3565", "3", "0.0", " "}, {"C136", "C136", "C246", "C235", "-0.8755", "1", "0.0", " "}, {"C136", "C136", "C246", "C235", "0.8030", "2", "180.0", " "}, {"C136", "C136", "C246", "C235", "0.0000", "3", "0.0", " "}, {"C136", "C136", "C246", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C246", "N239", "0.7860", "1", "0.0", " "}, {"C136", "C136", "C246", "N239", "0.0795", "2", "180.0", " "}, {"C136", "C136", "C246", "N239", "0.1000", "3", "0.0", " "}, {"C136", "C136", "C267", "O268", "0.5000", "1", "0.0", " "}, {"C136", "C136", "C267", "O268", "0.2730", "2", "180.0", " "}, {"C136", "C136", "C267", "O268", "0.2250", "3", "0.0", " "}, {"C136", "C136", "C267", "O269", "0.2730", "2", "180.0", " "}, {"C136", "C136", "C283", "C271", "-1.1790", "1", "0.0", " "}, {"C136", "C136", "C283", "C271", "0.4555", "2", "180.0", " "}, {"C136", "C136", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C136", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C283", "N238", "0.4420", "1", "0.0", " "}, {"C136", "C136", "C283", "N238", "0.4485", "2", "180.0", " "}, {"C136", "C136", "C283", "N238", "0.4400", "3", "0.0", " "}, {"C136", "C136", "C285", "C271", "-0.8755", "1", "0.0", " "}, {"C136", "C136", "C285", "C271", "0.8030", "2", "180.0", " "}, {"C136", "C136", "C285", "C271", "0.0000", "3", "0.0", " "}, {"C136", "C136", "C285", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C285", "N239", "0.7860", "1", "0.0", " "}, {"C136", "C136", "C285", "N239", "0.0795", "2", "180.0", " "}, {"C136", "C136", "C285", "N239", "0.1000", "3", "0.0", " "}, {"C136", "C136", "C292", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C292", "N287", "1.3660", "1", "0.0", " "}, {"C136", "C136", "C292", "N287", "-0.1145", "2", "180.0", " "}, {"C136", "C136", "C292", "N287", "0.2425", "3", "0.0", " "}, {"C136", "C136", "C293", "C235", "-1.1790", "1", "0.0", " "}, {"C136", "C136", "C293", "C235", "0.4555", "2", "180.0", " "}, {"C136", "C136", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C136", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C293", "N287", "0.4420", "1", "0.0", " "}, {"C136", "C136", "C293", "N287", "0.4485", "2", "180.0", " "}, {"C136", "C136", "C293", "N287", "0.4400", "3", "0.0", " "}, {"C136", "C136", "C295", "C235", "-0.8755", "1", "0.0", " "}, {"C136", "C136", "C295", "C235", "0.8030", "2", "180.0", " "}, {"C136", "C136", "C295", "C235", "0.0000", "3", "0.0", " "}, {"C136", "C136", "C295", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C295", "N309", "1.3660", "1", "0.0", " "}, {"C136", "C136", "C295", "N309", "-0.1145", "2", "180.0", " "}, {"C136", "C136", "C295", "N309", "0.2425", "3", "0.0", " "}, {"C136", "C136", "C296", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C296", "N309", "1.3660", "1", "0.0", " "}, {"C136", "C136", "C296", "N309", "-0.1145", "2", "180.0", " "}, {"C136", "C136", "C296", "N309", "0.2425", "3", "0.0", " "}, {"C136", "C137", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C137", "C224", "C235", "-0.7110", "1", "0.0", " "}, {"C136", "C137", "C224", "C235", "0.5340", "2", "180.0", " "}, {"C136", "C137", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C136", "C137", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C137", "C224", "N238", "1.4970", "1", "0.0", " "}, {"C136", "C137", "C224", "N238", "0.1260", "2", "180.0", " "}, {"C136", "C137", "C224", "N238", "0.1500", "3", "0.0", " "}, {"C136", "C137", "C283", "C271", "-0.7110", "1", "0.0", " "}, {"C136", "C137", "C283", "C271", "0.5340", "2", "180.0", " "}, {"C136", "C137", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C136", "C137", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C137", "C283", "N238", "1.4970", "1", "0.0", " "}, {"C136", "C137", "C283", "N238", "0.1260", "2", "180.0", " "}, {"C136", "C137", "C283", "N238", "0.1500", "3", "0.0", " "}, {"C136", "C137", "C293", "C235", "-0.7110", "1", "0.0", " "}, {"C136", "C137", "C293", "C235", "0.5340", "2", "180.0", " "}, {"C136", "C137", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C136", "C137", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C137", "C293", "N287", "1.4970", "1", "0.0", " "}, {"C136", "C137", "C293", "N287", "0.1260", "2", "180.0", " "}, {"C136", "C137", "C293", "N287", "0.1500", "3", "0.0", " "}, {"C136", "C210", "S202", "C209", "0.4625", "1", "0.0", " "}, {"C136", "C210", "S202", "C209", "-0.2880", "2", "180.0", " "}, {"C136", "C210", "S202", "C209", "0.3385", "3", "0.0", " "}, {"C136", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C136", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C136", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C136", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C136", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C136", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C136", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C136", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C136", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C136", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C136", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C136", "C235", "N237", "H240", "2.4500", "2", "180.0", " "}, {"C136", "C245", "N239", "C235", "-0.3410", "1", "0.0", " "}, {"C136", "C245", "N239", "C235", "0.0650", "2", "180.0", " "}, {"C136", "C245", "N239", "C235", "0.1690", "3", "0.0", " "}, {"C136", "C245", "N239", "C246", "1.4295", "1", "0.0", " "}, {"C136", "C245", "N239", "C246", "1.0290", "2", "180.0", " "}, {"C136", "C245", "N239", "C246", "-5.6330", "3", "0.0", " "}, {"C136", "C245", "N239", "C285", "1.4295", "1", "0.0", " "}, {"C136", "C245", "N239", "C285", "1.0290", "2", "180.0", " "}, {"C136", "C245", "N239", "C285", "-5.6330", "3", "0.0", " "}, {"C136", "C246", "C235", "N238", "2.5145", "1", "0.0", " "}, {"C136", "C246", "C235", "N238", "0.3595", "2", "180.0", " "}, {"C136", "C246", "C235", "N238", "1.1200", "3", "0.0", " "}, {"C136", "C246", "C235", "N239", "2.5145", "1", "0.0", " "}, {"C136", "C246", "C235", "N239", "0.3595", "2", "180.0", " "}, {"C136", "C246", "C235", "N239", "1.1200", "3", "0.0", " "}, {"C136", "C246", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C136", "C246", "N239", "C235", "-0.3410", "1", "0.0", " "}, {"C136", "C246", "N239", "C235", "0.0650", "2", "180.0", " "}, {"C136", "C246", "N239", "C235", "0.1690", "3", "0.0", " "}, {"C136", "C246", "N239", "C245", "2.3765", "1", "0.0", " "}, {"C136", "C246", "N239", "C245", "-0.3670", "2", "180.0", " "}, {"C136", "C267", "O268", "H270", "0.7500", "1", "0.0", " "}, {"C136", "C267", "O268", "H270", "2.7500", "2", "180.0", " "}, {"C136", "C274", "C271", "O272", "0.2730", "2", "180.0", " "}, {"C136", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C136", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C136", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C136", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C136", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C136", "C285", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C136", "C285", "N239", "C235", "-0.3410", "1", "0.0", " "}, {"C136", "C285", "N239", "C235", "0.0650", "2", "180.0", " "}, {"C136", "C285", "N239", "C235", "0.1690", "3", "0.0", " "}, {"C136", "C285", "N239", "C245", "2.3765", "1", "0.0", " "}, {"C136", "C285", "N239", "C245", "-0.3670", "2", "180.0", " "}, {"C136", "C292", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C136", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C136", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C136", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C136", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C136", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C136", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C136", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C136", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C136", "C295", "C235", "N238", "2.5145", "1", "0.0", " "}, {"C136", "C295", "C235", "N238", "0.3595", "2", "180.0", " "}, {"C136", "C295", "C235", "N238", "1.1200", "3", "0.0", " "}, {"C136", "C295", "C235", "N239", "2.5145", "1", "0.0", " "}, {"C136", "C295", "C235", "N239", "0.3595", "2", "180.0", " "}, {"C136", "C295", "C235", "N239", "1.1200", "3", "0.0", " "}, {"C136", "C295", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C136", "C295", "N309", "C296", "0.71895", "1", "0.0", " "}, {"C136", "C295", "N309", "C296", "-0.0619", "2", "180.0", " "}, {"C136", "C295", "N309", "C296", "0.13195", "3", "0.0", " "}, {"C136", "C295", "N309", "H310", "0.1735", "3", "0.0", " "}, {"C136", "C296", "N309", "C295", "0.71895", "1", "0.0", " "}, {"C136", "C296", "N309", "C295", "-0.0619", "2", "180.0", " "}, {"C136", "C296", "N309", "C295", "0.13195", "3", "0.0", " "}, {"C136", "C296", "N309", "H310", "0.1735", "3", "0.0", " "}, {"C136", "C308", "C307", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C308", "C307", "N303", "1.3660", "1", "0.0", " "}, {"C136", "C308", "C307", "N303", "-0.1145", "2", "180.0", " "}, {"C136", "C308", "C307", "N303", "0.2425", "3", "0.0", " "}, {"C137", "C136", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C137", "C136", "C224", "C235", "-0.8755", "1", "0.0", " "}, {"C137", "C136", "C224", "C235", "0.8030", "2", "180.0", " "}, {"C137", "C136", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C137", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C137", "C136", "C224", "N238", "0.7860", "1", "0.0", " "}, {"C137", "C136", "C224", "N238", "0.0795", "2", "180.0", " "}, {"C137", "C136", "C224", "N238", "0.1000", "3", "0.0", " "}, {"C137", "C136", "C283", "C271", "-0.8755", "1", "0.0", " "}, {"C137", "C136", "C283", "C271", "0.8030", "2", "180.0", " "}, {"C137", "C136", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C137", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C137", "C136", "C283", "N238", "0.7860", "1", "0.0", " "}, {"C137", "C136", "C283", "N238", "0.0795", "2", "180.0", " "}, {"C137", "C136", "C283", "N238", "0.1000", "3", "0.0", " "}, {"C137", "C136", "C293", "C235", "-0.8755", "1", "0.0", " "}, {"C137", "C136", "C293", "C235", "0.8030", "2", "180.0", " "}, {"C137", "C136", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C137", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C137", "C136", "C293", "N287", "0.7860", "1", "0.0", " "}, {"C137", "C136", "C293", "N287", "0.0795", "2", "180.0", " "}, {"C137", "C136", "C293", "N287", "0.1000", "3", "0.0", " "}, {"C137", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C137", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C137", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C137", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C137", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C137", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C137", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C137", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C137", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C137", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C137", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C137", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C137", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C137", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C137", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C137", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C137", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C137", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C137", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C137", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C137", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C137", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C137", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C137", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C145", "C145", "C149", "C224", "0.0000", "1", "0.0", " "}, {"C145", "C145", "C149", "C283", "0.0000", "1", "0.0", " "}, {"C145", "C145", "C149", "C293", "0.0000", "1", "0.0", " "}, {"C145", "C145", "C149", "H140", "0.0000", "1", "0.0", " "}, {"C145", "C149", "C224", "C235", "-0.7030", "1", "0.0", " "}, {"C145", "C149", "C224", "C235", "0.8885", "2", "180.0", " "}, {"C145", "C149", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C145", "C149", "C224", "H140", "0.2310", "3", "0.0", " "}, {"C145", "C149", "C224", "N238", "0.8560", "1", "0.0", " "}, {"C145", "C149", "C224", "N238", "0.3625", "2", "180.0", " "}, {"C145", "C149", "C224", "N238", "0.1830", "3", "0.0", " "}, {"C145", "C149", "C283", "C271", "-0.7030", "1", "0.0", " "}, {"C145", "C149", "C283", "C271", "0.8885", "2", "180.0", " "}, {"C145", "C149", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C145", "C149", "C283", "H140", "0.2310", "3", "0.0", " "}, {"C145", "C149", "C283", "N238", "0.8560", "1", "0.0", " "}, {"C145", "C149", "C283", "N238", "0.3625", "2", "180.0", " "}, {"C145", "C149", "C283", "N238", "0.1830", "3", "0.0", " "}, {"C145", "C149", "C293", "C235", "-0.7030", "1", "0.0", " "}, {"C145", "C149", "C293", "C235", "0.8885", "2", "180.0", " "}, {"C145", "C149", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C145", "C149", "C293", "H140", "0.2310", "3", "0.0", " "}, {"C145", "C149", "C293", "N287", "0.8560", "1", "0.0", " "}, {"C145", "C149", "C293", "N287", "0.3625", "2", "180.0", " "}, {"C145", "C149", "C293", "N287", "0.1830", "3", "0.0", " "}, {"C145", "C166", "C145", "H146", "3.6250", "2", "180.0", " "}, {"C145", "C166", "O167", "H168", "0.8410", "2", "180.0", " "}, {"C145", "C501", "C500", "C514", "1.6750", "2", "180.0", " "}, {"C145", "C502", "C501", "C500", "3.0000", "2", "180.0", " "}, {"C149", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C149", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C149", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C149", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C149", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C149", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C149", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C149", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C149", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C149", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C149", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C149", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C149", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C149", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C149", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C149", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C149", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C149", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C149", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C149", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C149", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C149", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C149", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C149", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C157", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C157", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C157", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C157", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C157", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C157", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C157", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C157", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C157", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C157", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C157", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C157", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C157", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C157", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C157", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C157", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C157", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C157", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C157", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C157", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C157", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C158", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C158", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C158", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C158", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C158", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C158", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C158", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C158", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C158", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C158", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C158", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C158", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C158", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C158", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C158", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C158", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C158", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C158", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C158", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C158", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C158", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C158", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C158", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C158", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C206", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C206", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C206", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C206", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C206", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C206", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C206", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C206", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C206", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C206", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C206", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C206", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C206", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C206", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C206", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C206", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C206", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C206", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C206", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C206", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C206", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C206", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C206", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C206", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C209", "S202", "C210", "H140", "0.3235", "3", "0.0", " "}, {"C210", "C136", "C224", "C235", "-0.4555", "1", "0.0", " "}, {"C210", "C136", "C224", "C235", "0.3495", "2", "180.0", " "}, {"C210", "C136", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C210", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C210", "C136", "C224", "N238", "0.1070", "1", "0.0", " "}, {"C210", "C136", "C224", "N238", "0.2705", "2", "180.0", " "}, {"C210", "C136", "C224", "N238", "0.1960", "3", "0.0", " "}, {"C210", "C136", "C283", "C271", "-0.4555", "1", "0.0", " "}, {"C210", "C136", "C283", "C271", "0.3495", "2", "180.0", " "}, {"C210", "C136", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C210", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C210", "C136", "C283", "N238", "0.1070", "1", "0.0", " "}, {"C210", "C136", "C283", "N238", "0.2705", "2", "180.0", " "}, {"C210", "C136", "C283", "N238", "0.1960", "3", "0.0", " "}, {"C210", "C136", "C293", "C235", "-0.4555", "1", "0.0", " "}, {"C210", "C136", "C293", "C235", "0.3495", "2", "180.0", " "}, {"C210", "C136", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C210", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C210", "C136", "C293", "N287", "0.1070", "1", "0.0", " "}, {"C210", "C136", "C293", "N287", "0.2705", "2", "180.0", " "}, {"C210", "C136", "C293", "N287", "0.1960", "3", "0.0", " "}, {"C210", "S202", "C209", "H140", "0.3235", "3", "0.0", " "}, {"C214", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C214", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C214", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C214", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C214", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C214", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C214", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C214", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C214", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C214", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C214", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C214", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C214", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C214", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C214", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C214", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C214", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C214", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C214", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C214", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C214", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C214", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C214", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C214", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C214", "S203", "S203", "C214", "-3.7070", "2", "180.0", " "}, {"C214", "S203", "S203", "C214", "0.8525", "3", "0.0", " "}, {"C223", "C235", "N238", "C223", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N238", "C223", "3.0445", "2", "180.0", " "}, {"C223", "C235", "N238", "C224", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N238", "C224", "3.0445", "2", "180.0", " "}, {"C223", "C235", "N238", "C242", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N238", "C242", "3.0445", "2", "180.0", " "}, {"C223", "C235", "N238", "C283", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N238", "C283", "3.0445", "2", "180.0", " "}, {"C295", "C235", "N238", "C283", "1.1500", "1", "0.0", "N-terminal Pro (Pres prop), adm jr."}, {"C295", "C235", "N238", "C283", "3.0445", "2", "180.0", "N-terminal Pro (Pres prop), adm jr."}, {"C223", "C235", "N238", "C284", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N238", "C284", "3.0445", "2", "180.0", " "}, {"C223", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C223", "C235", "N239", "C245", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N239", "C245", "3.0445", "2", "180.0", " "}, {"C223", "C235", "N239", "C246", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N239", "C246", "3.0445", "2", "180.0", " "}, {"C223", "C235", "N239", "C285", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N239", "C285", "3.0445", "2", "180.0", " "}, {"C223", "N238", "C235", "C224", "1.1500", "1", "0.0", " "}, {"C223", "N238", "C235", "C224", "3.0445", "2", "180.0", " "}, {"C223", "N238", "C235", "C246", "1.1500", "1", "0.0", " "}, {"C223", "N238", "C235", "C246", "3.0445", "2", "180.0", " "}, {"C223", "N238", "C235", "C292", "1.1500", "1", "0.0", " "}, {"C223", "N238", "C235", "C292", "3.0445", "2", "180.0", " "}, {"C223", "N238", "C235", "C293", "1.1500", "1", "0.0", " "}, {"C223", "N238", "C235", "C293", "3.0445", "2", "180.0", " "}, {"C223", "N238", "C235", "C295", "1.1500", "1", "0.0", " "}, {"C223", "N238", "C235", "C295", "3.0445", "2", "180.0", " "}, {"C223", "N238", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C224", "C136", "C136", "C235", "-0.6335", "1", "0.0", " "}, {"C224", "C136", "C136", "C235", "0.2395", "2", "180.0", " "}, {"C224", "C136", "C136", "C235", "-0.2430", "3", "0.0", " "}, {"C224", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C136", "C137", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C136", "C210", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C136", "C210", "S202", "-0.7825", "1", "0.0", " "}, {"C224", "C136", "C210", "S202", "-0.0045", "2", "180.0", " "}, {"C224", "C136", "C210", "S202", "-0.2250", "3", "0.0", " "}, {"C224", "C136", "C235", "N237", "0.7470", "1", "0.0", " "}, {"C224", "C136", "C235", "N237", "-0.2555", "2", "180.0", " "}, {"C224", "C136", "C235", "N237", "0.0625", "3", "0.0", " "}, {"C224", "C136", "C235", "O236", "0.8280", "1", "0.0", " "}, {"C224", "C136", "C235", "O236", "0.6520", "2", "180.0", " "}, {"C224", "C136", "C235", "O236", "0.2195", "3", "0.0", " "}, {"C224", "C136", "C267", "O268", "0.5000", "1", "0.0", " "}, {"C224", "C136", "C267", "O268", "0.2730", "2", "180.0", " "}, {"C224", "C136", "C267", "O268", "0.2250", "3", "0.0", " "}, {"C224", "C136", "C267", "O269", "0.2730", "2", "180.0", " "}, {"C224", "C136", "C274", "C271", "-0.4425", "1", "0.0", " "}, {"C224", "C136", "C274", "C271", "0.5125", "2", "180.0", " "}, {"C224", "C136", "C274", "C271", "-0.6465", "3", "0.0", " "}, {"C224", "C136", "C274", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C136", "C308", "C307", "0.6500", "1", "0.0", " "}, {"C224", "C136", "C308", "C307", "-0.1000", "2", "180.0", " "}, {"C224", "C136", "C308", "C307", "0.1000", "3", "0.0", " "}, {"C224", "C136", "C308", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C136", "C500", "C501", "0.0000", "1", "0.0", " "}, {"C224", "C136", "C500", "C514", "-0.3570", "1", "0.0", " "}, {"C224", "C137", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C137", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C157", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C224", "C157", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C224", "C157", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C224", "C158", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C158", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C224", "C158", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C224", "C158", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C224", "C206", "S200", "H204", "-0.3795", "1", "0.0", " "}, {"C224", "C206", "S200", "H204", "-0.1410", "2", "180.0", " "}, {"C224", "C206", "S200", "H204", "0.3400", "3", "0.0", " "}, {"C224", "C214", "S203", "S203", "0.9705", "1", "0.0", " "}, {"C224", "C214", "S203", "S203", "-0.4180", "2", "180.0", " "}, {"C224", "C214", "S203", "S203", "0.4675", "3", "0.0", " "}, {"C224", "C235", "N238", "C224", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N238", "C224", "3.0445", "2", "180.0", " "}, {"C224", "C235", "N238", "C242", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N238", "C242", "3.0445", "2", "180.0", " "}, {"C224", "C235", "N238", "C283", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N238", "C283", "3.0445", "2", "180.0", " "}, {"C224", "C235", "N238", "C284", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N238", "C284", "3.0445", "2", "180.0", " "}, {"C224", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C224", "C235", "N239", "C245", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N239", "C245", "3.0445", "2", "180.0", " "}, {"C224", "C235", "N239", "C246", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N239", "C246", "3.0445", "2", "180.0", " "}, {"C224", "C235", "N239", "C285", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N239", "C285", "3.0445", "2", "180.0", " "}, {"C223", "C267", "O268", "H270", "0.7500", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"C223", "C267", "O268", "H270", "2.7500", "2", "180.0", "protonated C-terminal Gly, adm jr."}, {"C224", "C267", "O268", "H270", "0.7500", "1", "0.0", " "}, {"C224", "C267", "O268", "H270", "2.7500", "2", "180.0", " "}, {"C224", "C274", "C271", "O272", "1.2500", "1", "0.0", " "}, {"C224", "C274", "C271", "O272", "0.5000", "2", "180.0", " "}, {"C224", "C274", "C271", "O272", "0.6750", "3", "0.0", " "}, {"C224", "C505", "C507", "C508", "0.0000", "1", "0.0", " "}, {"C224", "C505", "C507", "N511", "-0.2800", "1", "0.0", " "}, {"C224", "C505", "C507", "N511", "-0.3700", "2", "180.0", " "}, {"C224", "C505", "C507", "N511", "0.1745", "3", "0.0", " "}, {"C224", "C505", "C508", "C507", "0.0000", "1", "0.0", " "}, {"C224", "C505", "C508", "N503", "-0.2800", "1", "0.0", " "}, {"C224", "C505", "C508", "N503", "-0.3700", "2", "180.0", " "}, {"C224", "C505", "C508", "N503", "0.1745", "3", "0.0", " "}, {"C224", "C505", "C510", "C510", "0.0000", "1", "0.0", " "}, {"C224", "C505", "C510", "N512", "-1.9950", "1", "0.0", " "}, {"C224", "C505", "C510", "N512", "0.8400", "2", "180.0", " "}, {"C224", "C505", "C510", "N512", "0.1450", "3", "0.0", " "}, {"C224", "N238", "C235", "C246", "1.1500", "1", "0.0", " "}, {"C224", "N238", "C235", "C246", "3.0445", "2", "180.0", " "}, {"C224", "N238", "C235", "C292", "1.1500", "1", "0.0", " "}, {"C224", "N238", "C235", "C292", "3.0445", "2", "180.0", " "}, {"C224", "N238", "C235", "C293", "1.1500", "1", "0.0", " "}, {"C224", "N238", "C235", "C293", "3.0445", "2", "180.0", " "}, {"C224", "N238", "C235", "C295", "1.1500", "1", "0.0", " "}, {"C224", "N238", "C235", "C295", "3.0445", "2", "180.0", " "}, {"C224", "N238", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C235", "C136", "C136", "C283", "-0.6335", "1", "0.0", " "}, {"C235", "C136", "C136", "C283", "0.2395", "2", "180.0", " "}, {"C235", "C136", "C136", "C283", "-0.2430", "3", "0.0", " "}, {"C235", "C136", "C136", "C293", "-0.6335", "1", "0.0", " "}, {"C235", "C136", "C136", "C293", "0.2395", "2", "180.0", " "}, {"C235", "C136", "C136", "C293", "-0.2430", "3", "0.0", " "}, {"C235", "C136", "C136", "H140", "-0.0500", "3", "0.0", " "}, {"C235", "C136", "C224", "C235", "0.2990", "1", "0.0", " "}, {"C235", "C136", "C224", "C235", "0.7790", "2", "180.0", " "}, {"C235", "C136", "C224", "C235", "0.1275", "3", "0.0", " "}, {"C235", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C235", "C136", "C224", "N238", "-2.7505", "1", "0.0", " "}, {"C235", "C136", "C224", "N238", "0.7635", "2", "180.0", " "}, {"C235", "C136", "C224", "N238", "0.0000", "3", "0.0", " "}, {"C235", "C136", "C283", "C271", "0.2990", "1", "0.0", " "}, {"C235", "C136", "C283", "C271", "0.7790", "2", "180.0", " "}, {"C235", "C136", "C283", "C271", "0.1275", "3", "0.0", " "}, {"C235", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C235", "C136", "C283", "N238", "-2.7505", "1", "0.0", " "}, {"C235", "C136", "C283", "N238", "0.7635", "2", "180.0", " "}, {"C235", "C136", "C283", "N238", "0.0000", "3", "0.0", " "}, {"C235", "C136", "C293", "C235", "0.2990", "1", "0.0", " "}, {"C235", "C136", "C293", "C235", "0.7790", "2", "180.0", " "}, {"C235", "C136", "C293", "C235", "0.1275", "3", "0.0", " "}, {"C235", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C235", "C136", "C293", "N287", "-2.7505", "1", "0.0", " "}, {"C235", "C136", "C293", "N287", "0.7635", "2", "180.0", " "}, {"C235", "C136", "C293", "N287", "0.0000", "3", "0.0", " "}, {"C235", "C223", "N238", "C235", "-1.2555", "1", "0.0", " "}, {"C235", "C223", "N238", "C235", "0.1050", "2", "180.0", " "}, {"C235", "C223", "N238", "C235", "-0.1000", "3", "0.0", " "}, {"C235", "C223", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C235", "C224", "C135", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C136", "C267", "0.2990", "1", "0.0", " "}, {"C235", "C224", "C136", "C267", "0.7790", "2", "180.0", " "}, {"C235", "C224", "C136", "C267", "0.1275", "3", "0.0", " "}, {"C235", "C224", "C136", "C274", "-0.8820", "1", "0.0", " "}, {"C235", "C224", "C136", "C274", "0.3500", "2", "180.0", " "}, {"C235", "C224", "C136", "C274", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C136", "C308", "-0.9855", "1", "0.0", " "}, {"C235", "C224", "C136", "C308", "0.3850", "2", "180.0", " "}, {"C235", "C224", "C136", "C308", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C136", "C500", "-0.2530", "1", "0.0", " "}, {"C235", "C224", "C136", "C500", "0.4875", "2", "180.0", " "}, {"C235", "C224", "C136", "C500", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C136", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C137", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C149", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C157", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C157", "O154", "-2.8965", "1", "0.0", " "}, {"C235", "C224", "C157", "O154", "0.2025", "2", "180.0", " "}, {"C235", "C224", "C157", "O154", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C158", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C158", "O154", "-2.8965", "1", "0.0", " "}, {"C235", "C224", "C158", "O154", "0.2025", "2", "180.0", " "}, {"C235", "C224", "C158", "O154", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C206", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C206", "S200", "-1.6615", "1", "0.0", " "}, {"C235", "C224", "C206", "S200", "0.2645", "2", "180.0", " "}, {"C235", "C224", "C206", "S200", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C214", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C214", "S203", "-1.6615", "1", "0.0", " "}, {"C235", "C224", "C214", "S203", "0.2645", "2", "180.0", " "}, {"C235", "C224", "C214", "S203", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C274", "C271", "0.7715", "1", "0.0", " "}, {"C235", "C224", "C274", "C271", "0.3480", "2", "180.0", " "}, {"C235", "C224", "C274", "C271", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C274", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C505", "C507", "-0.6410", "1", "0.0", " "}, {"C235", "C224", "C505", "C507", "0.8225", "2", "180.0", " "}, {"C235", "C224", "C505", "C507", "-0.0085", "3", "0.0", " "}, {"C235", "C224", "C505", "C508", "-0.6410", "1", "0.0", " "}, {"C235", "C224", "C505", "C508", "0.8225", "2", "180.0", " "}, {"C235", "C224", "C505", "C508", "-0.0085", "3", "0.0", " "}, {"C235", "C224", "C505", "C510", "-0.8540", "1", "0.0", " "}, {"C235", "C224", "C505", "C510", "0.7580", "2", "180.0", " "}, {"C235", "C224", "C505", "C510", "-0.2510", "3", "0.0", " "}, {"C235", "C224", "C505", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "N238", "C235", "-1.2555", "1", "0.0", " "}, {"C235", "C224", "N238", "C235", "0.1050", "2", "180.0", " "}, {"C235", "C224", "N238", "C235", "-0.1000", "3", "0.0", " "}, {"C235", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C235", "N238", "C223", "C267", "-1.2555", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"C235", "N238", "C223", "C267", "0.1050", "2", "180.0", "protonated C-terminal Gly, adm jr."}, {"C235", "N238", "C223", "C267", "-0.1000", "3", "0.0", "protonated C-terminal Gly, adm jr."}, {"C235", "N238", "C224", "C267", "-1.2555", "1", "0.0", " "}, {"C235", "N238", "C224", "C267", "0.1050", "2", "180.0", " "}, {"C235", "N238", "C224", "C267", "-0.1000", "3", "0.0", " "}, {"C235", "C246", "C136", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C246", "N239", "C235", "-1.2555", "1", "0.0", " "}, {"C235", "C246", "N239", "C235", "0.1050", "2", "180.0", " "}, {"C235", "C246", "N239", "C235", "-0.1000", "3", "0.0", " "}, {"C235", "C246", "N239", "C245", "-0.8685", "1", "0.0", " "}, {"C235", "C246", "N239", "C245", "0.6255", "2", "180.0", " "}, {"C235", "C246", "N239", "C245", "-1.7505", "3", "0.0", " "}, {"C235", "C292", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C235", "C293", "C135", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C136", "C274", "-0.8820", "1", "0.0", " "}, {"C235", "C293", "C136", "C274", "0.3500", "2", "180.0", " "}, {"C235", "C293", "C136", "C274", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C136", "C308", "-0.9855", "1", "0.0", " "}, {"C235", "C293", "C136", "C308", "0.3850", "2", "180.0", " "}, {"C235", "C293", "C136", "C308", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C136", "C500", "-0.2530", "1", "0.0", " "}, {"C235", "C293", "C136", "C500", "0.4875", "2", "180.0", " "}, {"C235", "C293", "C136", "C500", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C136", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C137", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C149", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C157", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C157", "O154", "-2.8965", "1", "0.0", " "}, {"C235", "C293", "C157", "O154", "0.2025", "2", "180.0", " "}, {"C235", "C293", "C157", "O154", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C158", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C158", "O154", "-2.8965", "1", "0.0", " "}, {"C235", "C293", "C158", "O154", "0.2025", "2", "180.0", " "}, {"C235", "C293", "C158", "O154", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C206", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C206", "S200", "-1.6615", "1", "0.0", " "}, {"C235", "C293", "C206", "S200", "0.2645", "2", "180.0", " "}, {"C235", "C293", "C206", "S200", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C214", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C214", "S203", "-1.6615", "1", "0.0", " "}, {"C235", "C293", "C214", "S203", "0.2645", "2", "180.0", " "}, {"C235", "C293", "C214", "S203", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C274", "C271", "0.7715", "1", "0.0", " "}, {"C235", "C293", "C274", "C271", "0.3480", "2", "180.0", " "}, {"C235", "C293", "C274", "C271", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C274", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C505", "C507", "-0.6410", "1", "0.0", " "}, {"C235", "C293", "C505", "C507", "0.8225", "2", "180.0", " "}, {"C235", "C293", "C505", "C507", "-0.0085", "3", "0.0", " "}, {"C235", "C293", "C505", "C508", "-0.6410", "1", "0.0", " "}, {"C235", "C293", "C505", "C508", "0.8225", "2", "180.0", " "}, {"C235", "C293", "C505", "C508", "-0.0085", "3", "0.0", " "}, {"C235", "C293", "C505", "C510", "-0.8540", "1", "0.0", " "}, {"C235", "C293", "C505", "C510", "0.7580", "2", "180.0", " "}, {"C235", "C293", "C505", "C510", "-0.2510", "3", "0.0", " "}, {"C235", "C293", "C505", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C235", "C295", "C136", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C295", "N309", "C296", "0.71895", "1", "0.0", " "}, {"C235", "C295", "N309", "C296", "-0.0619", "2", "180.0", " "}, {"C235", "C295", "N309", "C296", "0.13195", "3", "0.0", " "}, {"C235", "C295", "N309", "H310", "0.1735", "3", "0.0", " "}, {"C235", "N238", "C223", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N238", "C224", "C274", "-0.3410", "1", "0.0", " "}, {"C235", "N238", "C224", "C274", "0.0650", "2", "180.0", " "}, {"C235", "N238", "C224", "C274", "0.1690", "3", "0.0", " "}, {"C235", "N238", "C224", "C505", "-0.3410", "1", "0.0", " "}, {"C235", "N238", "C224", "C505", "0.0650", "2", "180.0", " "}, {"C235", "N238", "C224", "C505", "0.1690", "3", "0.0", " "}, {"C235", "N238", "C224", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N238", "C242", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N238", "C283", "C271", "-1.2555", "1", "0.0", " "}, {"C235", "N238", "C283", "C271", "0.1050", "2", "180.0", " "}, {"C235", "N238", "C283", "C271", "-0.1000", "3", "0.0", " "}, {"C235", "N238", "C283", "C274", "-0.3410", "1", "0.0", " "}, {"C235", "N238", "C283", "C274", "0.0650", "2", "180.0", " "}, {"C235", "N238", "C283", "C274", "0.1690", "3", "0.0", " "}, {"C235", "N238", "C283", "C505", "-0.3410", "1", "0.0", " "}, {"C235", "N238", "C283", "C505", "0.0650", "2", "180.0", " "}, {"C235", "N238", "C283", "C505", "0.1690", "3", "0.0", " "}, {"C235", "N238", "C283", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N238", "C284", "C271", "-1.2555", "1", "0.0", " "}, {"C235", "N238", "C284", "C271", "0.1050", "2", "180.0", " "}, {"C235", "N238", "C284", "C271", "-0.1000", "3", "0.0", " "}, {"C235", "N238", "C284", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N239", "C245", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N239", "C246", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N239", "C285", "C271", "-1.2555", "1", "0.0", " "}, {"C235", "N239", "C285", "C271", "0.1050", "2", "180.0", " "}, {"C235", "N239", "C285", "C271", "-0.1000", "3", "0.0", " "}, {"C235", "N239", "C285", "H140", "0.0000", "1", "0.0", " "}, {"C242", "N238", "C235", "C246", "1.1500", "1", "0.0", " "}, {"C242", "N238", "C235", "C246", "3.0445", "2", "180.0", " "}, {"C242", "N238", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C245", "C136", "C136", "C246", "0.6500", "1", "0.0", " "}, {"C245", "C136", "C136", "C246", "-0.1000", "2", "180.0", " "}, {"C245", "C136", "C136", "C246", "0.1000", "3", "0.0", " "}, {"C245", "C136", "C136", "C285", "0.6500", "1", "0.0", " "}, {"C245", "C136", "C136", "C285", "-0.1000", "2", "180.0", " "}, {"C245", "C136", "C136", "C285", "0.1000", "3", "0.0", " "}, {"C245", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C245", "N239", "C235", "C246", "1.1500", "1", "0.0", " "}, {"C245", "N239", "C235", "C246", "3.0445", "2", "180.0", " "}, {"C245", "N239", "C235", "C292", "1.1500", "1", "0.0", " "}, {"C245", "N239", "C235", "C292", "3.0445", "2", "180.0", " "}, {"C245", "N239", "C235", "C293", "1.1500", "1", "0.0", " "}, {"C245", "N239", "C235", "C293", "3.0445", "2", "180.0", " "}, {"C245", "N239", "C235", "C295", "1.1500", "1", "0.0", " "}, {"C245", "N239", "C235", "C295", "3.0445", "2", "180.0", " "}, {"C245", "N239", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C245", "N239", "C246", "H140", "0.0000", "1", "0.0", " "}, {"C245", "N239", "C285", "C271", "-0.8685", "1", "0.0", " "}, {"C245", "N239", "C285", "C271", "0.6255", "2", "180.0", " "}, {"C245", "N239", "C285", "C271", "-1.7505", "3", "0.0", " "}, {"C245", "N239", "C285", "H140", "0.0000", "1", "0.0", " "}, {"C246", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C246", "C235", "N238", "C283", "1.1500", "1", "0.0", " "}, {"C246", "C235", "N238", "C283", "3.0445", "2", "180.0", " "}, {"C246", "C235", "N238", "C284", "1.1500", "1", "0.0", " "}, {"C246", "C235", "N238", "C284", "3.0445", "2", "180.0", " "}, {"C246", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C246", "C235", "N239", "C246", "1.1500", "1", "0.0", " "}, {"C246", "C235", "N239", "C246", "3.0445", "2", "180.0", " "}, {"C246", "C235", "N239", "C285", "1.1500", "1", "0.0", " "}, {"C246", "C235", "N239", "C285", "3.0445", "2", "180.0", " "}, {"C246", "N239", "C235", "C292", "1.1500", "1", "0.0", " "}, {"C246", "N239", "C235", "C292", "3.0445", "2", "180.0", " "}, {"C246", "N239", "C235", "C293", "1.1500", "1", "0.0", " "}, {"C246", "N239", "C235", "C293", "3.0445", "2", "180.0", " "}, {"C246", "N239", "C235", "C295", "1.1500", "1", "0.0", " "}, {"C246", "N239", "C235", "C295", "3.0445", "2", "180.0", " "}, {"C246", "N239", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C246", "N239", "C245", "H140", "0.0000", "1", "0.0", " "}, {"C267", "C136", "C224", "H140", "-0.0380", "3", "0.0", " "}, {"C267", "C136", "C224", "N238", "-2.7505", "1", "0.0", " "}, {"C267", "C136", "C224", "N238", "0.7635", "2", "180.0", " "}, {"C267", "C136", "C224", "N238", "0.0000", "3", "0.0", " "}, {"C267", "C224", "C135", "H140", "0.0370", "3", "0.0", " "}, {"C267", "C223", "N238", "H241", "0.0000", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"C267", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C271", "C274", "C136", "C283", "-0.4425", "1", "0.0", " "}, {"C271", "C274", "C136", "C283", "0.5125", "2", "180.0", " "}, {"C271", "C274", "C136", "C283", "-0.6465", "3", "0.0", " "}, {"C271", "C274", "C136", "C293", "-0.4425", "1", "0.0", " "}, {"C271", "C274", "C136", "C293", "0.5125", "2", "180.0", " "}, {"C271", "C274", "C136", "C293", "-0.6465", "3", "0.0", " "}, {"C271", "C274", "C136", "H140", "-0.1125", "3", "0.0", " "}, {"C271", "C274", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C271", "C274", "C224", "N238", "-3.9450", "1", "0.0", " "}, {"C271", "C274", "C224", "N238", "0.3310", "2", "180.0", " "}, {"C271", "C274", "C224", "N238", "0.4985", "3", "0.0", " "}, {"C271", "C274", "C283", "C271", "0.7715", "1", "0.0", " "}, {"C271", "C274", "C283", "C271", "0.3480", "2", "180.0", " "}, {"C271", "C274", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C271", "C274", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C271", "C274", "C283", "N238", "-3.9450", "1", "0.0", " "}, {"C271", "C274", "C283", "N238", "0.3310", "2", "180.0", " "}, {"C271", "C274", "C283", "N238", "0.4985", "3", "0.0", " "}, {"C271", "C274", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C271", "C274", "C293", "N287", "-3.9450", "1", "0.0", " "}, {"C271", "C274", "C293", "N287", "0.3310", "2", "180.0", " "}, {"C271", "C274", "C293", "N287", "0.4985", "3", "0.0", " "}, {"C271", "C283", "C135", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C136", "C274", "-0.8820", "1", "0.0", " "}, {"C271", "C283", "C136", "C274", "0.3500", "2", "180.0", " "}, {"C271", "C283", "C136", "C274", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C136", "C308", "-0.9855", "1", "0.0", " "}, {"C271", "C283", "C136", "C308", "0.3850", "2", "180.0", " "}, {"C271", "C283", "C136", "C308", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C136", "C500", "-0.2530", "1", "0.0", " "}, {"C271", "C283", "C136", "C500", "0.4875", "2", "180.0", " "}, {"C271", "C283", "C136", "C500", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C136", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C137", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C149", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C157", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C157", "O154", "-2.8965", "1", "0.0", " "}, {"C271", "C283", "C157", "O154", "0.2025", "2", "180.0", " "}, {"C271", "C283", "C157", "O154", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C158", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C158", "O154", "-2.8965", "1", "0.0", " "}, {"C271", "C283", "C158", "O154", "0.2025", "2", "180.0", " "}, {"C271", "C283", "C158", "O154", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C206", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C206", "S200", "-1.6615", "1", "0.0", " "}, {"C271", "C283", "C206", "S200", "0.2645", "2", "180.0", " "}, {"C271", "C283", "C206", "S200", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C214", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C214", "S203", "-1.6615", "1", "0.0", " "}, {"C271", "C283", "C214", "S203", "0.2645", "2", "180.0", " "}, {"C271", "C283", "C214", "S203", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C274", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C505", "C507", "-0.6410", "1", "0.0", " "}, {"C271", "C283", "C505", "C507", "0.8225", "2", "180.0", " "}, {"C271", "C283", "C505", "C507", "-0.0085", "3", "0.0", " "}, {"C271", "C283", "C505", "C508", "-0.6410", "1", "0.0", " "}, {"C271", "C283", "C505", "C508", "0.8225", "2", "180.0", " "}, {"C271", "C283", "C505", "C508", "-0.0085", "3", "0.0", " "}, {"C271", "C283", "C505", "C510", "-0.8540", "1", "0.0", " "}, {"C271", "C283", "C505", "C510", "0.7580", "2", "180.0", " "}, {"C271", "C283", "C505", "C510", "-0.2510", "3", "0.0", " "}, {"C271", "C283", "C505", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C271", "C284", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C271", "C285", "C136", "H140", "-0.0380", "3", "0.0", " "}, {"C274", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C274", "C136", "C224", "N238", "0.9935", "1", "0.0", " "}, {"C274", "C136", "C224", "N238", "0.2285", "2", "180.0", " "}, {"C274", "C136", "C224", "N238", "0.4100", "3", "0.0", " "}, {"C274", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C274", "C136", "C283", "N238", "0.9935", "1", "0.0", " "}, {"C274", "C136", "C283", "N238", "0.2285", "2", "180.0", " "}, {"C274", "C136", "C283", "N238", "0.4100", "3", "0.0", " "}, {"C274", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C274", "C136", "C293", "N287", "0.9935", "1", "0.0", " "}, {"C274", "C136", "C293", "N287", "0.2285", "2", "180.0", " "}, {"C274", "C136", "C293", "N287", "0.4100", "3", "0.0", " "}, {"C274", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C274", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C274", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C274", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C274", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C274", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C274", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C274", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C274", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C274", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C274", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C274", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C274", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C274", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C274", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C274", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C274", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C274", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C283", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C136", "C137", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C136", "C210", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C136", "C210", "S202", "-0.7825", "1", "0.0", " "}, {"C283", "C136", "C210", "S202", "-0.0045", "2", "180.0", " "}, {"C283", "C136", "C210", "S202", "-0.2250", "3", "0.0", " "}, {"C283", "C136", "C235", "N237", "0.7470", "1", "0.0", " "}, {"C283", "C136", "C235", "N237", "-0.2555", "2", "180.0", " "}, {"C283", "C136", "C235", "N237", "0.0625", "3", "0.0", " "}, {"C283", "C136", "C235", "O236", "0.8280", "1", "0.0", " "}, {"C283", "C136", "C235", "O236", "0.6520", "2", "180.0", " "}, {"C283", "C136", "C235", "O236", "0.2195", "3", "0.0", " "}, {"C283", "C136", "C267", "O268", "0.5000", "1", "0.0", " "}, {"C283", "C136", "C267", "O268", "0.2730", "2", "180.0", " "}, {"C283", "C136", "C267", "O268", "0.2250", "3", "0.0", " "}, {"C283", "C136", "C267", "O269", "0.2730", "2", "180.0", " "}, {"C283", "C136", "C274", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C136", "C308", "C307", "0.6500", "1", "0.0", " "}, {"C283", "C136", "C308", "C307", "-0.1000", "2", "180.0", " "}, {"C283", "C136", "C308", "C307", "0.1000", "3", "0.0", " "}, {"C283", "C136", "C308", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C136", "C500", "C501", "0.0000", "1", "0.0", " "}, {"C283", "C136", "C500", "C514", "-0.3570", "1", "0.0", " "}, {"C283", "C137", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C137", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C157", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C283", "C157", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C283", "C157", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C283", "C158", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C158", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C283", "C158", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C283", "C158", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C283", "C206", "S200", "H204", "-0.3795", "1", "0.0", " "}, {"C283", "C206", "S200", "H204", "-0.1410", "2", "180.0", " "}, {"C283", "C206", "S200", "H204", "0.3400", "3", "0.0", " "}, {"C283", "C214", "S203", "S203", "0.9705", "1", "0.0", " "}, {"C283", "C214", "S203", "S203", "-0.4180", "2", "180.0", " "}, {"C283", "C214", "S203", "S203", "0.4675", "3", "0.0", " "}, {"C283", "C274", "C271", "O272", "1.2500", "1", "0.0", " "}, {"C283", "C274", "C271", "O272", "0.5000", "2", "180.0", " "}, {"C283", "C274", "C271", "O272", "0.6750", "3", "0.0", " "}, {"C283", "C505", "C507", "C508", "0.0000", "1", "0.0", " "}, {"C283", "C505", "C507", "N511", "-0.2800", "1", "0.0", " "}, {"C283", "C505", "C507", "N511", "-0.3700", "2", "180.0", " "}, {"C283", "C505", "C507", "N511", "0.1745", "3", "0.0", " "}, {"C283", "C505", "C508", "C507", "0.0000", "1", "0.0", " "}, {"C283", "C505", "C508", "N503", "-0.2800", "1", "0.0", " "}, {"C283", "C505", "C508", "N503", "-0.3700", "2", "180.0", " "}, {"C283", "C505", "C508", "N503", "0.1745", "3", "0.0", " "}, {"C283", "C505", "C510", "C510", "0.0000", "1", "0.0", " "}, {"C283", "C505", "C510", "N512", "-1.9950", "1", "0.0", " "}, {"C283", "C505", "C510", "N512", "0.8400", "2", "180.0", " "}, {"C283", "C505", "C510", "N512", "0.1450", "3", "0.0", " "}, {"C283", "N238", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C284", "N238", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C285", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C285", "N239", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C285", "N239", "C245", "H140", "0.0000", "1", "0.0", " "}, {"C292", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C292", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C293", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C136", "C137", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C136", "C210", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C136", "C210", "S202", "-0.7825", "1", "0.0", " "}, {"C293", "C136", "C210", "S202", "-0.0045", "2", "180.0", " "}, {"C293", "C136", "C210", "S202", "-0.2250", "3", "0.0", " "}, {"C293", "C136", "C235", "N237", "0.7470", "1", "0.0", " "}, {"C293", "C136", "C235", "N237", "-0.2555", "2", "180.0", " "}, {"C293", "C136", "C235", "N237", "0.0625", "3", "0.0", " "}, {"C293", "C136", "C235", "O236", "0.8280", "1", "0.0", " "}, {"C293", "C136", "C235", "O236", "0.6520", "2", "180.0", " "}, {"C293", "C136", "C235", "O236", "0.2195", "3", "0.0", " "}, {"C293", "C136", "C267", "O268", "0.5000", "1", "0.0", " "}, {"C293", "C136", "C267", "O268", "0.2730", "2", "180.0", " "}, {"C293", "C136", "C267", "O268", "0.2250", "3", "0.0", " "}, {"C293", "C136", "C267", "O269", "0.2730", "2", "180.0", " "}, {"C293", "C136", "C274", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C136", "C308", "C307", "0.6500", "1", "0.0", " "}, {"C293", "C136", "C308", "C307", "-0.1000", "2", "180.0", " "}, {"C293", "C136", "C308", "C307", "0.1000", "3", "0.0", " "}, {"C293", "C136", "C308", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C136", "C500", "C501", "0.0000", "1", "0.0", " "}, {"C293", "C136", "C500", "C514", "-0.3570", "1", "0.0", " "}, {"C293", "C137", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C137", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C157", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C293", "C157", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C293", "C157", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C293", "C158", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C158", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C293", "C158", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C293", "C158", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C293", "C206", "S200", "H204", "-0.3795", "1", "0.0", " "}, {"C293", "C206", "S200", "H204", "-0.1410", "2", "180.0", " "}, {"C293", "C206", "S200", "H204", "0.3400", "3", "0.0", " "}, {"C293", "C214", "S203", "S203", "0.9705", "1", "0.0", " "}, {"C293", "C214", "S203", "S203", "-0.4180", "2", "180.0", " "}, {"C293", "C214", "S203", "S203", "0.4675", "3", "0.0", " "}, {"C293", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C293", "C274", "C271", "O272", "1.2500", "1", "0.0", " "}, {"C293", "C274", "C271", "O272", "0.5000", "2", "180.0", " "}, {"C293", "C274", "C271", "O272", "0.6750", "3", "0.0", " "}, {"C293", "C505", "C507", "C508", "0.0000", "1", "0.0", " "}, {"C293", "C505", "C507", "N511", "-0.2800", "1", "0.0", " "}, {"C293", "C505", "C507", "N511", "-0.3700", "2", "180.0", " "}, {"C293", "C505", "C507", "N511", "0.1745", "3", "0.0", " "}, {"C293", "C505", "C508", "C507", "0.0000", "1", "0.0", " "}, {"C293", "C505", "C508", "N503", "-0.2800", "1", "0.0", " "}, {"C293", "C505", "C508", "N503", "-0.3700", "2", "180.0", " "}, {"C293", "C505", "C508", "N503", "0.1745", "3", "0.0", " "}, {"C293", "C505", "C510", "C510", "0.0000", "1", "0.0", " "}, {"C293", "C505", "C510", "N512", "-1.9950", "1", "0.0", " "}, {"C293", "C505", "C510", "N512", "0.8400", "2", "180.0", " "}, {"C293", "C505", "C510", "N512", "0.1450", "3", "0.0", " "}, {"C295", "C136", "C136", "C296", "0.6500", "1", "0.0", " "}, {"C295", "C136", "C136", "C296", "-0.1000", "2", "180.0", " "}, {"C295", "C136", "C136", "C296", "0.1000", "3", "0.0", " "}, {"C295", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C295", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C295", "N309", "C296", "H140", "0.15085", "3", "0.0", " "}, {"C296", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C296", "N309", "C295", "H140", "0.15085", "3", "0.0", " "}, {"C302", "N303", "C307", "C308", "0.9145", "1", "0.0", " "}, {"C302", "N303", "C307", "C308", "0.1215", "2", "180.0", " "}, {"C302", "N303", "C307", "C308", "-0.2490", "3", "0.0", " "}, {"C302", "N303", "C307", "H140", "0.0885", "3", "0.0", " "}, {"C307", "C308", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C307", "N303", "C302", "N300", "3.9680", "2", "180.0", " "}, {"C308", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C308", "C136", "C224", "N238", "0.0515", "1", "0.0", " "}, {"C308", "C136", "C224", "N238", "0.3265", "2", "180.0", " "}, {"C308", "C136", "C224", "N238", "0.2815", "3", "0.0", " "}, {"C308", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C308", "C136", "C283", "N238", "0.0515", "1", "0.0", " "}, {"C308", "C136", "C283", "N238", "0.3265", "2", "180.0", " "}, {"C308", "C136", "C283", "N238", "0.2815", "3", "0.0", " "}, {"C308", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C308", "C136", "C293", "N287", "0.0515", "1", "0.0", " "}, {"C308", "C136", "C293", "N287", "0.3265", "2", "180.0", " "}, {"C308", "C136", "C293", "N287", "0.2815", "3", "0.0", " "}, {"C308", "C307", "N303", "H304", "-0.0950", "1", "0.0", " "}, {"C308", "C307", "N303", "H304", "-0.2085", "2", "180.0", " "}, {"C308", "C307", "N303", "H304", "0.2090", "3", "0.0", " "}, {"C500", "C136", "C224", "H140", "0.2310", "3", "0.0", " "}, {"C500", "C136", "C224", "N238", "-0.2940", "1", "0.0", " "}, {"C500", "C136", "C224", "N238", "0.5100", "2", "180.0", " "}, {"C500", "C136", "C224", "N238", "0.3325", "3", "0.0", " "}, {"C500", "C136", "C283", "H140", "0.2310", "3", "0.0", " "}, {"C500", "C136", "C283", "N238", "-0.2940", "1", "0.0", " "}, {"C500", "C136", "C283", "N238", "0.5100", "2", "180.0", " "}, {"C500", "C136", "C283", "N238", "0.3325", "3", "0.0", " "}, {"C500", "C136", "C293", "H140", "0.2310", "3", "0.0", " "}, {"C500", "C136", "C293", "N287", "-0.2940", "1", "0.0", " "}, {"C500", "C136", "C293", "N287", "0.5100", "2", "180.0", " "}, {"C500", "C136", "C293", "N287", "0.3325", "3", "0.0", " "}, {"C500", "C501", "C145", "H146", "3.5000", "2", "180.0", " "}, {"C501", "C500", "C136", "H140", "0.0000", "1", "0.0", " "}, {"C501", "C502", "C145", "H146", "3.6250", "2", "180.0", " "}, {"C502", "C501", "C145", "H146", "3.5000", "2", "180.0", " "}, {"C502", "C501", "C500", "C514", "1.6750", "2", "180.0", " "}, {"C502", "N503", "C514", "H146", "1.5000", "2", "180.0", " "}, {"C505", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C505", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C505", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C505", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C505", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C505", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C505", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C505", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C505", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C505", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C505", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C505", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C505", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C505", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C505", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C505", "C508", "C507", "H146", "5.3750", "2", "180.0", " "}, {"C505", "C508", "C507", "N511", "5.3750", "2", "180.0", " "}, {"C505", "C508", "N503", "C506", "1.4000", "2", "180.0", " "}, {"C505", "C508", "N503", "H504", "1.4000", "2", "180.0", " "}, {"C505", "C510", "N512", "C509", "1.4000", "2", "180.0", " "}, {"C505", "C510", "N512", "H513", "1.4000", "2", "180.0", " "}, {"C506", "N503", "C508", "C507", "1.4000", "2", "180.0", " "}, {"C506", "N503", "C508", "H146", "2.5000", "2", "180.0", " "}, {"C506", "N511", "C507", "C508", "2.4000", "2", "180.0", " "}, {"C506", "N511", "C507", "H146", "2.4000", "2", "180.0", " "}, {"C507", "C505", "C224", "H140", "0.2310", "3", "0.0", " "}, {"C507", "C505", "C224", "N238", "-0.2710", "1", "0.0", " "}, {"C507", "C505", "C224", "N238", "0.2175", "2", "180.0", " "}, {"C507", "C505", "C224", "N238", "0.0000", "3", "0.0", " "}, {"C507", "C505", "C283", "H140", "0.2310", "3", "0.0", " "}, {"C507", "C505", "C283", "N238", "-0.2710", "1", "0.0", " "}, {"C507", "C505", "C283", "N238", "0.2175", "2", "180.0", " "}, {"C507", "C505", "C283", "N238", "0.0000", "3", "0.0", " "}, {"C507", "C505", "C293", "H140", "0.2310", "3", "0.0", " "}, {"C507", "C505", "C293", "N287", "-0.2710", "1", "0.0", " "}, {"C507", "C505", "C293", "N287", "0.2175", "2", "180.0", " "}, {"C507", "C505", "C293", "N287", "0.0000", "3", "0.0", " "}, {"C507", "C508", "C505", "H140", "0.0000", "1", "0.0", " "}, {"C507", "C508", "N503", "H504", "1.4000", "2", "180.0", " "}, {"C507", "N511", "C506", "H146", "5.0000", "2", "180.0", " "}, {"C507", "N511", "C506", "N503", "5.0000", "2", "180.0", " "}, {"C508", "C505", "C224", "H140", "0.2310", "3", "0.0", " "}, {"C508", "C505", "C224", "N238", "-0.2710", "1", "0.0", " "}, {"C508", "C505", "C224", "N238", "0.2175", "2", "180.0", " "}, {"C508", "C505", "C224", "N238", "0.0000", "3", "0.0", " "}, {"C508", "C505", "C283", "H140", "0.2310", "3", "0.0", " "}, {"C508", "C505", "C283", "N238", "-0.2710", "1", "0.0", " "}, {"C508", "C505", "C283", "N238", "0.2175", "2", "180.0", " "}, {"C508", "C505", "C283", "N238", "0.0000", "3", "0.0", " "}, {"C508", "C505", "C293", "H140", "0.2310", "3", "0.0", " "}, {"C508", "C505", "C293", "N287", "-0.2710", "1", "0.0", " "}, {"C508", "C505", "C293", "N287", "0.2175", "2", "180.0", " "}, {"C508", "C505", "C293", "N287", "0.0000", "3", "0.0", " "}, {"C508", "C507", "C505", "H140", "0.0000", "1", "0.0", " "}, {"C508", "N503", "C506", "H146", "2.3250", "2", "180.0", " "}, {"C508", "N503", "C506", "N511", "2.3250", "2", "180.0", " "}, {"C509", "N512", "C510", "C510", "1.4000", "2", "180.0", " "}, {"C509", "N512", "C510", "H146", "2.5000", "2", "180.0", " "}, {"C510", "C505", "C224", "H140", "0.2310", "3", "0.0", " "}, {"C510", "C505", "C224", "N238", "-1.5190", "1", "0.0", " "}, {"C510", "C505", "C224", "N238", "0.2095", "2", "180.0", " "}, {"C510", "C505", "C224", "N238", "0.0000", "3", "0.0", " "}, {"C510", "C505", "C283", "H140", "0.2310", "3", "0.0", " "}, {"C510", "C505", "C283", "N238", "-1.5190", "1", "0.0", " "}, {"C510", "C505", "C283", "N238", "0.2095", "2", "180.0", " "}, {"C510", "C505", "C283", "N238", "0.0000", "3", "0.0", " "}, {"C510", "C505", "C293", "H140", "0.2310", "3", "0.0", " "}, {"C510", "C505", "C293", "N287", "-1.5190", "1", "0.0", " "}, {"C510", "C505", "C293", "N287", "0.2095", "2", "180.0", " "}, {"C510", "C505", "C293", "N287", "0.0000", "3", "0.0", " "}, {"C510", "C510", "C505", "H140", "0.0000", "1", "0.0", " "}, {"C510", "C510", "N512", "H513", "1.4000", "2", "180.0", " "}, {"C510", "N512", "C509", "H146", "2.3250", "2", "180.0", " "}, {"C510", "N512", "C509", "N512", "2.3250", "2", "180.0", " "}, {"C514", "C500", "C136", "H140", "-0.2400", "3", "0.0", " "}, {"H140", "C135", "C136", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C135", "C137", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C135", "C158", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C135", "C158", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C135", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C135", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C135", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C135", "C235", "N239", "0.0000", "1", "0.0", " "}, {"H140", "C135", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C135", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C135", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C135", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C135", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C137", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C210", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C210", "S202", "0.2260", "3", "0.0", " "}, {"H140", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C235", "N237", "0.0000", "1", "0.0", " "}, {"H140", "C136", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C136", "C245", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C245", "N239", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C246", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C246", "N239", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C267", "O268", "0.0000", "1", "0.0", " "}, {"H140", "C136", "C267", "O269", "0.0000", "1", "0.0", " "}, {"H140", "C136", "C274", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C285", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C285", "N239", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C292", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C292", "N287", "0.1920", "3", "0.0", " "}, {"H140", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C295", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C295", "N309", "0.1920", "3", "0.0", " "}, {"H140", "C136", "C296", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C296", "N309", "0.1920", "3", "0.0", " "}, {"H140", "C136", "C308", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C137", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C137", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C137", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C137", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C137", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C137", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C149", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C149", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C149", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C149", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C149", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C149", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C157", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C157", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C157", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C157", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C157", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C157", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C157", "O154", "H155", "0.1762", "3", "0.0", " "}, {"H140", "C158", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C158", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C158", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C158", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C158", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C158", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C158", "O154", "H155", "0.1762", "3", "0.0", " "}, {"H140", "C206", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C206", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C206", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C206", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C206", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C206", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C206", "S200", "H204", "0.2400", "3", "0.0", " "}, {"H140", "C214", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C214", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C214", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C214", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C214", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C214", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C214", "S203", "S203", "0.2790", "3", "0.0", " "}, {"H140", "C223", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C223", "C235", "N239", "0.0000", "1", "0.0", " "}, {"H140", "C223", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C223", "N238", "H241", "0.0000", "1", "0.0", " "}, {"H140", "C224", "C157", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C224", "C158", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C224", "C206", "S200", "0.2260", "3", "0.0", " "}, {"H140", "C224", "C214", "S203", "0.2260", "3", "0.0", " "}, {"H140", "C224", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C224", "C235", "N239", "0.0000", "1", "0.0", " "}, {"H140", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C223", "C267", "O268", "0.0000", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"H140", "C223", "C267", "O269", "0.0000", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"H140", "C224", "C267", "O268", "0.0000", "1", "0.0", " "}, {"H140", "C224", "C267", "O269", "0.0000", "1", "0.0", " "}, {"H140", "C224", "C274", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C224", "C505", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"H140", "C242", "N238", "H241", "0.0000", "1", "0.0", " "}, {"H140", "C246", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C246", "C235", "N239", "0.0000", "1", "0.0", " "}, {"H140", "C246", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C274", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C274", "C271", "O272", "0.0000", "1", "0.0", " "}, {"H140", "C274", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C274", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C274", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C274", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C283", "C157", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C283", "C158", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C283", "C206", "S200", "0.2260", "3", "0.0", " "}, {"H140", "C283", "C214", "S203", "0.2260", "3", "0.0", " "}, {"H140", "C283", "C271", "O272", "0.0000", "1", "0.0", " "}, {"H140", "C283", "C505", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"H140", "C284", "C271", "O272", "0.0000", "1", "0.0", " "}, {"H140", "C284", "N238", "H241", "0.0000", "1", "0.0", " "}, {"H140", "C285", "C271", "O272", "0.0000", "1", "0.0", " "}, {"H140", "C292", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C292", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C292", "N287", "H290", "0.1305", "3", "0.0", " "}, {"H140", "C293", "C157", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C293", "C158", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C293", "C206", "S200", "0.2260", "3", "0.0", " "}, {"H140", "C293", "C214", "S203", "0.2260", "3", "0.0", " "}, {"H140", "C293", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C293", "C235", "N239", "0.0000", "1", "0.0", " "}, {"H140", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C293", "C505", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C293", "N287", "H290", "0.1305", "3", "0.0", " "}, {"H140", "C295", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C295", "C235", "N239", "0.0000", "1", "0.0", " "}, {"H140", "C295", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C295", "N309", "H310", "0.1305", "3", "0.0", " "}, {"H140", "C296", "N309", "H310", "0.1920", "3", "0.0", " "}, {"H140", "C307", "C308", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C307", "N303", "H304", "0.0000", "1", "0.0", " "}, {"H140", "C308", "C307", "N303", "-0.2910", "3", "0.0", " "}, {"H140", "C505", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C505", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C505", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C505", "C507", "N511", "0.2095", "3", "0.0", " "}, {"H140", "C505", "C508", "N503", "0.2095", "3", "0.0", " "}, {"H140", "C505", "C510", "N512", "0.2095", "3", "0.0", " "}, {"H146", "C508", "C507", "N511", "5.3750", "2", "180.0", " "}, {"H146", "C508", "N503", "H504", "2.5000", "2", "180.0", " "}, {"H146", "C510", "N512", "H513", "2.5000", "2", "180.0", " "}, {"H240", "N237", "C235", "O236", "2.4500", "2", "180.0", " "}, {"H241", "N238", "C235", "O236", "2.4500", "2", "180.0", " "}, {"H270", "O268", "C267", "O269", "2.7500", "2", "180.0", " "}, {"H301", "N300", "C302", "N300", "1.9500", "2", "180.0", " "}, {"H301", "N300", "C302", "N303", "1.9500", "2", "180.0", " "}, {"H304", "N303", "C302", "N300", "1.9500", "2", "180.0", " "}, {"H504", "N503", "C506", "N511", "2.3250", "2", "180.0", " "}, {"H513", "N512", "C509", "N512", "2.3250", "2", "180.0", " "}, {"N238", "C223", "C235", "N238", "0.9050", "1", "0.0", " "}, {"N238", "C223", "C235", "N238", "1.0775", "2", "180.0", " "}, {"N238", "C223", "C235", "N238", "-0.2350", "3", "0.0", " "}, {"N238", "C223", "C235", "N239", "0.9050", "1", "0.0", " "}, {"N238", "C223", "C235", "N239", "1.0775", "2", "180.0", " "}, {"N238", "C223", "C235", "N239", "-0.2350", "3", "0.0", " "}, {"N238", "C223", "C235", "O236", "0.0000", "1", "0.0", " "}, {"N238", "C224", "C157", "O154", "3.1290", "1", "0.0", " "}, {"N238", "C224", "C157", "O154", "-0.5185", "2", "180.0", " "}, {"N238", "C224", "C157", "O154", "0.6835", "3", "0.0", " "}, {"N238", "C224", "C158", "O154", "3.1290", "1", "0.0", " "}, {"N238", "C224", "C158", "O154", "-0.5185", "2", "180.0", " "}, {"N238", "C224", "C158", "O154", "0.6835", "3", "0.0", " "}, {"N238", "C224", "C206", "S200", "1.0275", "1", "0.0", " "}, {"N238", "C224", "C206", "S200", "0.2645", "2", "180.0", " "}, {"N238", "C224", "C206", "S200", "0.2720", "3", "0.0", " "}, {"N238", "C224", "C214", "S203", "1.0275", "1", "0.0", " "}, {"N238", "C224", "C214", "S203", "0.2645", "2", "180.0", " "}, {"N238", "C224", "C214", "S203", "0.2720", "3", "0.0", " "}, {"N238", "C224", "C235", "N238", "0.9050", "1", "0.0", " "}, {"N238", "C224", "C235", "N238", "1.0775", "2", "180.0", " "}, {"N238", "C224", "C235", "N238", "-0.2350", "3", "0.0", " "}, {"N238", "C224", "C235", "N239", "0.9050", "1", "0.0", " "}, {"N238", "C224", "C235", "N239", "1.0775", "2", "180.0", " "}, {"N238", "C224", "C235", "N239", "-0.2350", "3", "0.0", " "}, {"N238", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"N238", "C223", "C267", "O268", "2.6300", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"N238", "C223", "C267", "O268", "0.4100", "2", "180.0", "protonated C-terminal Gly, adm jr."}, {"N238", "C223", "C267", "O268", "0.0000", "3", "0.0", "protonated C-terminal Gly, adm jr."}, {"N238", "C224", "C267", "O268", "2.6300", "1", "0.0", " "}, {"N238", "C224", "C267", "O268", "0.4100", "2", "180.0", " "}, {"N238", "C224", "C267", "O268", "0.0000", "3", "0.0", " "}, {"N238", "C223", "C267", "O269", "0.0000", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"N238", "C224", "C267", "O269", "0.0000", "1", "0.0", " "}, {"N238", "C235", "C246", "N239", "-0.4700", "1", "0.0", " "}, {"N238", "C235", "C246", "N239", "1.3775", "2", "180.0", " "}, {"N238", "C235", "C246", "N239", "-1.3350", "3", "0.0", " "}, {"N238", "C235", "C292", "N287", "0.9050", "1", "0.0", " "}, {"N238", "C235", "C292", "N287", "1.0775", "2", "180.0", " "}, {"N238", "C235", "C292", "N287", "-0.2350", "3", "0.0", " "}, {"N238", "C235", "C293", "N287", "0.9050", "1", "0.0", " "}, {"N238", "C235", "C293", "N287", "1.0775", "2", "180.0", " "}, {"N238", "C235", "C293", "N287", "-0.2350", "3", "0.0", " "}, {"N238", "C235", "C295", "N309", "-0.4700", "1", "0.0", " "}, {"N238", "C235", "C295", "N309", "1.3775", "2", "180.0", " "}, {"N238", "C235", "C295", "N309", "-1.3350", "3", "0.0", " "}, {"N238", "C283", "C157", "O154", "3.1290", "1", "0.0", " "}, {"N238", "C283", "C157", "O154", "-0.5185", "2", "180.0", " "}, {"N238", "C283", "C157", "O154", "0.6835", "3", "0.0", " "}, {"N238", "C283", "C158", "O154", "3.1290", "1", "0.0", " "}, {"N238", "C283", "C158", "O154", "-0.5185", "2", "180.0", " "}, {"N238", "C283", "C158", "O154", "0.6835", "3", "0.0", " "}, {"N238", "C283", "C206", "S200", "1.0275", "1", "0.0", " "}, {"N238", "C283", "C206", "S200", "0.2645", "2", "180.0", " "}, {"N238", "C283", "C206", "S200", "0.2720", "3", "0.0", " "}, {"N238", "C283", "C214", "S203", "1.0275", "1", "0.0", " "}, {"N238", "C283", "C214", "S203", "0.2645", "2", "180.0", " "}, {"N238", "C283", "C214", "S203", "0.2720", "3", "0.0", " "}, {"N238", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"N238", "C284", "C271", "O272", "0.4100", "2", "180.0", " "}, {"N239", "C235", "C246", "N239", "-0.4700", "1", "0.0", " "}, {"N239", "C235", "C246", "N239", "1.3775", "2", "180.0", " "}, {"N239", "C235", "C246", "N239", "-1.3350", "3", "0.0", " "}, {"N239", "C235", "C293", "N287", "0.9050", "1", "0.0", " "}, {"N239", "C235", "C293", "N287", "1.0775", "2", "180.0", " "}, {"N239", "C235", "C293", "N287", "-0.2350", "3", "0.0", " "}, {"N239", "C235", "C295", "N309", "-0.4700", "1", "0.0", " "}, {"N239", "C235", "C295", "N309", "1.3775", "2", "180.0", " "}, {"N239", "C235", "C295", "N309", "-1.3350", "3", "0.0", " "}, {"N239", "C246", "C235", "O236", "0.0000", "1", "0.0", " "}, {"N239", "C285", "C271", "O272", "0.4100", "2", "180.0", " "}, {"N287", "C292", "C235", "O236", "0.0000", "1", "0.0", " "}, {"N287", "C293", "C157", "O154", "3.1290", "1", "0.0", " "}, {"N287", "C293", "C157", "O154", "-0.5185", "2", "180.0", " "}, {"N287", "C293", "C157", "O154", "0.6835", "3", "0.0", " "}, {"N287", "C293", "C158", "O154", "3.1290", "1", "0.0", " "}, {"N287", "C293", "C158", "O154", "-0.5185", "2", "180.0", " "}, {"N287", "C293", "C158", "O154", "0.6835", "3", "0.0", " "}, {"N287", "C293", "C206", "S200", "1.0275", "1", "0.0", " "}, {"N287", "C293", "C206", "S200", "0.2645", "2", "180.0", " "}, {"N287", "C293", "C206", "S200", "0.2720", "3", "0.0", " "}, {"N287", "C293", "C214", "S203", "1.0275", "1", "0.0", " "}, {"N287", "C293", "C214", "S203", "0.2645", "2", "180.0", " "}, {"N287", "C293", "C214", "S203", "0.2720", "3", "0.0", " "}, {"N287", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"N309", "C295", "C235", "O236", "0.0000", "1", "0.0", " "}, {"N503", "C508", "C507", "N511", "5.3750", "2", "180.0", " "}, {"C267", "C136", "C293", "N287", "-2.7505", "1", "0.0", " "}, {"C267", "C136", "C293", "N287", "0.7635", "2", "180.0", " "}, {"C267", "C136", "C293", "N287", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C136", "C267", "0.2990", "1", "0.0", " "}, {"C235", "C293", "C136", "C267", "0.7790", "2", "180.0", " "}, {"C235", "C293", "C136", "C267", "0.1275", "3", "0.0", " "}, {"C267", "C136", "C283", "N238", "-2.7505", "1", "0.0", " "}, {"C267", "C136", "C283", "N238", "0.7635", "2", "180.0", " "}, {"C267", "C136", "C283", "N238", "0.0000", "3", "0.0", " "}, {"C267", "C136", "C283", "C271", "0.2990", "1", "0.0", " "}, {"C267", "C136", "C283", "C271", "0.7790", "2", "180.0", " "}, {"C267", "C136", "C283", "C271", "0.1275", "3", "0.0", " "}, {"O340", "C334", "N335", "C336", "0.0000", "1", "0.0", " "}, {"O340", "C334", "N335", "C336", "3.6250", "2", "180.0", " "}, {"O340", "C334", "N335", "C336", "0.0000", "3", "0.0", " "}, {"O340", "C334", "N335", "C336", "0.0000", "4", "180.0", " "}, {"C933", "C174", "C174", "O169", "-0.2180", "1", "0.0", " "}, {"C933", "C174", "C174", "O169", "0.4500", "2", "180.0", " "}, {"C933", "C174", "C174", "O169", "0.0000", "3", "0.0", " "}, {"C933", "C174", "C174", "O169", "0.0000", "4", "180.0", " "}, {"C933", "N938", "C324", "C323", "0.0000", "1", "0.0", " "}, {"C933", "N938", "C324", "C323", "2.5000", "2", "180.0", " "}, {"C933", "N938", "C324", "C323", "0.0000", "3", "0.0", " "}, {"C933", "N938", "C324", "C323", "0.0000", "4", "180.0", " "}, {"C933", "N938", "C320", "O326", "0.0000", "1", "0.0", " "}, {"C933", "N938", "C320", "O326", "3.6250", "2", "180.0", " "}, {"C933", "N938", "C320", "O326", "0.0000", "3", "0.0", " "}, {"C933", "N938", "C320", "O326", "0.0000", "4", "180.0", " "}, {"C933", "N938", "C324", "H330", "0.0000", "1", "0.0", " "}, {"C933", "N938", "C324", "H330", "2.5000", "2", "180.0", " "}, {"C933", "N938", "C324", "H330", "0.0000", "3", "0.0", " "}, {"C933", "N938", "C324", "H330", "0.0000", "4", "180.0", " "}, {"C933", "C174", "C174", "H176", "0.0000", "1", "0.0", " "}, {"C933", "C174", "C174", "H176", "0.0000", "2", "180.0", " "}, {"C933", "C174", "C174", "H176", "0.1500", "3", "0.0", " "}, {"C933", "C174", "C174", "H176", "0.0000", "4", "180.0", " "}, {"C933", "C174", "O169", "H170", "1.3370", "1", "0.0", " "}, {"C933", "C174", "O169", "H170", "-1.4415", "2", "180.0", " "}, {"C933", "C174", "O169", "H170", "0.5130", "3", "0.0", " "}, {"C933", "C174", "O169", "H170", "0.0000", "4", "180.0", " "}, {"C933", "N938", "C320", "N321", "0.0000", "1", "0.0", " "}, {"C933", "N938", "C320", "N321", "3.6250", "2", "180.0", " "}, {"C933", "N938", "C320", "N321", "0.0000", "3", "0.0", " "}, {"C933", "N938", "C320", "N321", "0.0000", "4", "180.0", " "}, {"C324", "N938", "C933", "O186", "0.2000", "1", "0.0", " "}, {"C324", "N938", "C933", "O186", "-1.4000", "2", "180.0", " "}, {"C324", "N938", "C933", "O186", "-0.3000", "3", "0.0", " "}, {"C324", "N938", "C933", "O186", "0.0000", "4", "180.0", " "}, {"O186", "C933", "C174", "C174", "-0.2180", "1", "0.0", " "}, {"O186", "C933", "C174", "C174", "0.4500", "2", "180.0", " "}, {"O186", "C933", "C174", "C174", "0.0000", "3", "0.0", " "}, {"O186", "C933", "C174", "C174", "0.0000", "4", "180.0", " "}, {"O186", "C933", "C174", "O169", "2.1595", "1", "0.0", " "}, {"O186", "C933", "C174", "O169", "0.0000", "2", "180.0", " "}, {"O186", "C933", "C174", "O169", "0.0000", "3", "0.0", " "}, {"O186", "C933", "C174", "O169", "0.0000", "4", "180.0", " "}, {"O186", "C933", "C174", "H176", "0.0000", "1", "0.0", " "}, {"O186", "C933", "C174", "H176", "0.0000", "2", "180.0", " "}, {"O186", "C933", "C174", "H176", "0.2340", "3", "0.0", " "}, {"O186", "C933", "C174", "H176", "0.0000", "4", "180.0", " "}, {"C933", "C174", "C174", "C183", "0.6500", "1", "0.0", " "}, {"C933", "C174", "C174", "C183", "-0.1000", "2", "180.0", " "}, {"C933", "C174", "C174", "C183", "0.1000", "3", "0.0", " "}, {"C933", "C174", "C174", "C183", "0.0000", "4", "180.0", " "}, {"N938", "C933", "O186", "C183", "-0.2500", "1", "0.0", " "}, {"N938", "C933", "O186", "C183", "-0.7500", "2", "180.0", " "}, {"N938", "C933", "O186", "C183", "0.5000", "3", "0.0", " "}, {"N938", "C933", "O186", "C183", "0.0000", "4", "180.0", " "}, {"C933", "O186", "C183", "H185", "0.0000", "1", "0.0", " "}, {"C933", "O186", "C183", "H185", "0.0000", "2", "180.0", " "}, {"C933", "O186", "C183", "H185", "0.3800", "3", "0.0", " "}, {"C933", "O186", "C183", "H185", "0.0000", "4", "180.0", " "}, {"C320", "N938", "C933", "O186", "-0.1000", "1", "0.0", " "}, {"C320", "N938", "C933", "O186", "-1.2500", "2", "180.0", " "}, {"C320", "N938", "C933", "O186", "0.3500", "3", "0.0", " "}, {"C320", "N938", "C933", "O186", "0.0000", "4", "180.0", " "}, {"C174", "C933", "O186", "C183", "0.3250", "1", "0.0", " "}, {"C174", "C933", "O186", "C183", "-0.1250", "2", "180.0", " "}, {"C174", "C933", "O186", "C183", "-0.2350", "3", "0.0", " "}, {"C174", "C933", "O186", "C183", "0.0000", "4", "180.0", " "}, {"H196", "C933", "O186", "C183", "0.0000", "1", "0.0", " "}, {"H196", "C933", "O186", "C183", "0.0000", "2", "180.0", " "}, {"H196", "C933", "O186", "C183", "0.3800", "3", "0.0", " "}, {"H196", "C933", "O186", "C183", "0.0000", "4", "180.0", " "}, {"N335", "C336", "N341", "H342", "0.0000", "1", "0.0", " "}, {"N335", "C336", "N341", "H342", "1.9500", "2", "180.0", " "}, {"N335", "C336", "N341", "H342", "0.0000", "3", "0.0", " "}, {"N335", "C336", "N341", "H342", "0.0000", "4", "180.0", " "}, {"N335", "C336", "N341", "H343", "0.0000", "1", "0.0", " "}, {"N335", "C336", "N341", "H343", "1.9500", "2", "180.0", " "}, {"N335", "C336", "N341", "H343", "0.0000", "3", "0.0", " "}, {"N335", "C336", "N341", "H343", "0.0000", "4", "180.0", " "}, {"N937", "C334", "N335", "C336", "0.0000", "1", "0.0", " "}, {"N937", "C334", "N335", "C336", "3.6250", "2", "180.0", " "}, {"N937", "C334", "N335", "C336", "0.0000", "3", "0.0", " "}, {"N937", "C334", "N335", "C336", "0.0000", "4", "180.0", " "}, {"C338", "C337", "C336", "N335", "0.0000", "1", "0.0", " "}, {"C338", "C337", "C336", "N335", "3.5000", "2", "180.0", " "}, {"C338", "C337", "C336", "N335", "0.0000", "3", "0.0", " "}, {"C338", "C337", "C336", "N335", "0.0000", "4", "180.0", " "}, {"C337", "C336", "N335", "C334", "0.0000", "1", "0.0", " "}, {"C337", "C336", "N335", "C334", "3.6250", "2", "180.0", " "}, {"C337", "C336", "N335", "C334", "0.0000", "3", "0.0", " "}, {"C337", "C336", "N335", "C334", "0.0000", "4", "180.0", " "}, {"H344", "C337", "C336", "N335", "0.0000", "1", "0.0", " "}, {"H344", "C337", "C336", "N335", "3.5000", "2", "180.0", " "}, {"H344", "C337", "C336", "N335", "0.0000", "3", "0.0", " "}, {"H344", "C337", "C336", "N335", "0.0000", "4", "180.0", " "}, {"N341", "C336", "N335", "C334", "0.0000", "1", "0.0", " "}, {"N341", "C336", "N335", "C334", "3.6250", "2", "180.0", " "}, {"N341", "C336", "N335", "C334", "0.0000", "3", "0.0", " "}, {"N341", "C336", "N335", "C334", "0.0000", "4", "180.0", " "}, {"C932", "O186", "C183", "C174", "0.3250", "1", "0.0", " "}, {"C932", "O186", "C183", "C174", "-0.1250", "2", "180.0", " "}, {"C932", "O186", "C183", "C174", "-0.2350", "3", "0.0", " "}, {"C932", "O186", "C183", "C174", "0.0000", "4", "180.0", " "}, {"H344", "C337", "C336", "N341", "0.0000", "1", "0.0", " "}, {"H344", "C337", "C336", "N341", "3.5000", "2", "180.0", " "}, {"H344", "C337", "C336", "N341", "0.0000", "3", "0.0", " "}, {"H344", "C337", "C336", "N341", "0.0000", "4", "180.0", " "}, {"C334", "N937", "C932", "C174", "-0.3500", "1", "0.0", " "}, {"C334", "N937", "C932", "C174", "-0.2000", "2", "180.0", " "}, {"C334", "N937", "C932", "C174", "0.1500", "3", "0.0", " "}, {"C334", "N937", "C932", "C174", "0.0000", "4", "180.0", " "}, {"C338", "N937", "C334", "O340", "0.0000", "1", "0.0", " "}, {"C338", "N937", "C334", "O340", "3.6250", "2", "180.0", " "}, {"C338", "N937", "C334", "O340", "0.0000", "3", "0.0", " "}, {"C338", "N937", "C334", "O340", "0.0000", "4", "180.0", " "}, {"C334", "N937", "C338", "C337", "0.0000", "1", "0.0", " "}, {"C334", "N937", "C338", "C337", "3.6250", "2", "180.0", " "}, {"C334", "N937", "C338", "C337", "0.0000", "3", "0.0", " "}, {"C334", "N937", "C338", "C337", "0.0000", "4", "180.0", " "}, {"C334", "N937", "C338", "H345", "0.0000", "1", "0.0", " "}, {"C334", "N937", "C338", "H345", "3.6250", "2", "180.0", " "}, {"C334", "N937", "C338", "H345", "0.0000", "3", "0.0", " "}, {"C334", "N937", "C338", "H345", "0.0000", "4", "180.0", " "}, {"H345", "C338", "C337", "C336", "0.0000", "1", "0.0", " "}, {"H345", "C338", "C337", "C336", "7.0000", "2", "180.0", " "}, {"H345", "C338", "C337", "C336", "0.0000", "3", "0.0", " "}, {"H345", "C338", "C337", "C336", "0.0000", "4", "180.0", " "}, {"H345", "C338", "C337", "H344", "0.0000", "1", "0.0", " "}, {"H345", "C338", "C337", "H344", "7.0000", "2", "180.0", " "}, {"H345", "C338", "C337", "H344", "0.0000", "3", "0.0", " "}, {"H345", "C338", "C337", "H344", "0.0000", "4", "180.0", " "}, {"C337", "C336", "N341", "H342", "0.0000", "1", "0.0", " "}, {"C337", "C336", "N341", "H342", "1.9500", "2", "180.0", " "}, {"C337", "C336", "N341", "H342", "0.0000", "3", "0.0", " "}, {"C337", "C336", "N341", "H342", "0.0000", "4", "180.0", " "}, {"C337", "C336", "N341", "H343", "0.0000", "1", "0.0", " "}, {"C337", "C336", "N341", "H343", "1.9500", "2", "180.0", " "}, {"C337", "C336", "N341", "H343", "0.0000", "3", "0.0", " "}, {"C337", "C336", "N341", "H343", "0.0000", "4", "180.0", " "}, {"N937", "C932", "C174", "C174", "1.1960", "1", "0.0", " "}, {"N937", "C932", "C174", "C174", "-0.3370", "2", "180.0", " "}, {"N937", "C932", "C174", "C174", "0.2750", "3", "0.0", " "}, {"N937", "C932", "C174", "C174", "0.0000", "4", "180.0", " "}, {"N937", "C932", "C174", "O169", "4.0000", "1", "0.0", " "}, {"N937", "C932", "C174", "O169", "0.0000", "2", "180.0", " "}, {"N937", "C932", "C174", "O169", "0.0000", "3", "0.0", " "}, {"N937", "C932", "C174", "O169", "0.0000", "4", "180.0", " "}, {"N937", "C932", "C174", "H176", "-0.5065", "1", "0.0", " "}, {"N937", "C932", "C174", "H176", "-0.3545", "2", "180.0", " "}, {"N937", "C932", "C174", "H176", "0.2365", "3", "0.0", " "}, {"N937", "C932", "C174", "H176", "0.0000", "4", "180.0", " "}, {"C338", "C337", "C336", "N341", "0.0000", "1", "0.0", " "}, {"C338", "C337", "C336", "N341", "3.5000", "2", "180.0", " "}, {"C338", "C337", "C336", "N341", "0.0000", "3", "0.0", " "}, {"C338", "C337", "C336", "N341", "0.0000", "4", "180.0", " "}, {"C338", "N937", "C932", "C174", "0.2000", "1", "0.0", " "}, {"C338", "N937", "C932", "C174", "-0.2500", "2", "180.0", " "}, {"C338", "N937", "C932", "C174", "0.0000", "3", "0.0", " "}, {"C338", "N937", "C932", "C174", "0.0000", "4", "180.0", " "}, {"C324", "N938", "C933", "H196", "0.0000", "1", "0.0", " "}, {"C324", "N938", "C933", "H196", "0.0000", "2", "180.0", " "}, {"C324", "N938", "C933", "H196", "0.0000", "3", "0.0", " "}, {"C324", "N938", "C933", "H196", "0.0000", "4", "180.0", " "}, {"O326", "C320", "N321", "H327", "0.0000", "1", "0.0", " "}, {"O326", "C320", "N321", "H327", "3.6250", "2", "180.0", " "}, {"O326", "C320", "N321", "H327", "0.0000", "3", "0.0", " "}, {"O326", "C320", "N321", "H327", "0.0000", "4", "180.0", " "}, {"O328", "C322", "C323", "H329", "0.0000", "1", "0.0", " "}, {"O328", "C322", "C323", "H329", "3.6250", "2", "180.0", " "}, {"O328", "C322", "C323", "H329", "0.0000", "3", "0.0", " "}, {"O328", "C322", "C323", "H329", "0.0000", "4", "180.0", " "}, {"O326", "C320", "N321", "C322", "0.0000", "1", "0.0", " "}, {"O326", "C320", "N321", "C322", "3.6250", "2", "180.0", " "}, {"O326", "C320", "N321", "C322", "0.0000", "3", "0.0", " "}, {"O326", "C320", "N321", "C322", "0.0000", "4", "180.0", " "}, {"H327", "N321", "C322", "O328", "0.0000", "1", "0.0", " "}, {"H327", "N321", "C322", "O328", "3.6250", "2", "180.0", " "}, {"H327", "N321", "C322", "O328", "0.0000", "3", "0.0", " "}, {"H327", "N321", "C322", "O328", "0.0000", "4", "180.0", " "}, {"H327", "N321", "C322", "C323", "0.0000", "1", "0.0", " "}, {"H327", "N321", "C322", "C323", "3.6250", "2", "180.0", " "}, {"H327", "N321", "C322", "C323", "0.0000", "3", "0.0", " "}, {"H327", "N321", "C322", "C323", "0.0000", "4", "180.0", " "}, {"N321", "C322", "C323", "H329", "0.0000", "1", "0.0", " "}, {"N321", "C322", "C323", "H329", "3.6250", "2", "180.0", " "}, {"N321", "C322", "C323", "H329", "0.0000", "3", "0.0", " "}, {"N321", "C322", "C323", "H329", "0.0000", "4", "180.0", " "}, {"C320", "N938", "C324", "H330", "0.0000", "1", "0.0", " "}, {"C320", "N938", "C324", "H330", "3.6250", "2", "180.0", " "}, {"C320", "N938", "C324", "H330", "0.0000", "3", "0.0", " "}, {"C320", "N938", "C324", "H330", "0.0000", "4", "180.0", " "}, {"H330", "C324", "C323", "C322", "0.0000", "1", "0.0", " "}, {"H330", "C324", "C323", "C322", "7.0000", "2", "180.0", " "}, {"H330", "C324", "C323", "C322", "0.0000", "3", "0.0", " "}, {"H330", "C324", "C323", "C322", "0.0000", "4", "180.0", " "}, {"C320", "N321", "C322", "O328", "0.0000", "1", "0.0", " "}, {"C320", "N321", "C322", "O328", "3.6250", "2", "180.0", " "}, {"C320", "N321", "C322", "O328", "0.0000", "3", "0.0", " "}, {"C320", "N321", "C322", "O328", "0.0000", "4", "180.0", " "}, {"C320", "N938", "C933", "C174", "-0.3500", "1", "0.0", " "}, {"C320", "N938", "C933", "C174", "-0.2000", "2", "180.0", " "}, {"C320", "N938", "C933", "C174", "0.1500", "3", "0.0", " "}, {"C320", "N938", "C933", "C174", "0.0000", "4", "180.0", " "}, {"C320", "N938", "C324", "C323", "0.0000", "1", "0.0", " "}, {"C320", "N938", "C324", "C323", "3.6250", "2", "180.0", " "}, {"C320", "N938", "C324", "C323", "0.0000", "3", "0.0", " "}, {"C320", "N938", "C324", "C323", "0.0000", "4", "180.0", " "}, {"H330", "C324", "C323", "H329", "0.0000", "1", "0.0", " "}, {"H330", "C324", "C323", "H329", "7.0000", "2", "180.0", " "}, {"H330", "C324", "C323", "H329", "0.0000", "3", "0.0", " "}, {"H330", "C324", "C323", "H329", "0.0000", "4", "180.0", " "}, {"C320", "N321", "C322", "C323", "0.0000", "1", "0.0", " "}, {"C320", "N321", "C322", "C323", "3.6250", "2", "180.0", " "}, {"C320", "N321", "C322", "C323", "0.0000", "3", "0.0", " "}, {"C320", "N321", "C322", "C323", "0.0000", "4", "180.0", " "}, {"C324", "N938", "C320", "O326", "0.0000", "1", "0.0", " "}, {"C324", "N938", "C320", "O326", "3.6250", "2", "180.0", " "}, {"C324", "N938", "C320", "O326", "0.0000", "3", "0.0", " "}, {"C324", "N938", "C320", "O326", "0.0000", "4", "180.0", " "}, {"C324", "N938", "C320", "N321", "0.0000", "1", "0.0", " "}, {"C324", "N938", "C320", "N321", "3.6250", "2", "180.0", " "}, {"C324", "N938", "C320", "N321", "0.0000", "3", "0.0", " "}, {"C324", "N938", "C320", "N321", "0.0000", "4", "180.0", " "}, {"C324", "N938", "C933", "C174", "0.2000", "1", "0.0", " "}, {"C324", "N938", "C933", "C174", "-0.2500", "2", "180.0", " "}, {"C324", "N938", "C933", "C174", "0.0000", "3", "0.0", " "}, {"C324", "N938", "C933", "C174", "0.0000", "4", "180.0", " "}, {"O328", "C322", "C323", "C324", "0.0000", "1", "0.0", " "}, {"O328", "C322", "C323", "C324", "3.5000", "2", "180.0", " "}, {"O328", "C322", "C323", "C324", "0.0000", "3", "0.0", " "}, {"O328", "C322", "C323", "C324", "0.0000", "4", "180.0", " "}, {"N321", "C322", "C323", "C324", "0.0000", "1", "0.0", " "}, {"N321", "C322", "C323", "C324", "3.5000", "2", "180.0", " "}, {"N321", "C322", "C323", "C324", "0.0000", "3", "0.0", " "}, {"N321", "C322", "C323", "C324", "0.0000", "4", "180.0", " "}, {"N938", "C933", "C174", "H176", "-0.5065", "1", "0.0", " "}, {"N938", "C933", "C174", "H176", "-0.3545", "2", "180.0", " "}, {"N938", "C933", "C174", "H176", "0.2365", "3", "0.0", " "}, {"N938", "C933", "C174", "H176", "0.0000", "4", "180.0", " "}, {"N938", "C933", "C174", "O169", "4.0000", "1", "0.0", " "}, {"N938", "C933", "C174", "O169", "0.0000", "2", "180.0", " "}, {"N938", "C933", "C174", "O169", "0.0000", "3", "0.0", " "}, {"N938", "C933", "C174", "O169", "0.0000", "4", "180.0", " "}, {"N938", "C933", "C174", "C174", "1.1960", "1", "0.0", " "}, {"N938", "C933", "C174", "C174", "-0.3370", "2", "180.0", " "}, {"N938", "C933", "C174", "C174", "0.2750", "3", "0.0", " "}, {"N938", "C933", "C174", "C174", "0.0000", "4", "180.0", " "}, {"N938", "C324", "C323", "C322", "0.0000", "1", "0.0", " "}, {"N938", "C324", "C323", "C322", "7.0000", "2", "180.0", " "}, {"N938", "C324", "C323", "C322", "0.0000", "3", "0.0", " "}, {"N938", "C324", "C323", "C322", "0.0000", "4", "180.0", " "}, {"N938", "C324", "C323", "H329", "0.0000", "1", "0.0", " "}, {"N938", "C324", "C323", "H329", "7.0000", "2", "180.0", " "}, {"N938", "C324", "C323", "H329", "0.0000", "3", "0.0", " "}, {"N938", "C324", "C323", "H329", "0.0000", "4", "180.0", " "}, {"H196", "C933", "C174", "O169", "0.0000", "1", "0.0", " "}, {"H196", "C933", "C174", "O169", "0.0000", "2", "180.0", " "}, {"H196", "C933", "C174", "O169", "0.2340", "3", "0.0", " "}, {"H196", "C933", "C174", "O169", "0.0000", "4", "180.0", " "}, {"H196", "C933", "C174", "H176", "0.0000", "1", "0.0", " "}, {"H196", "C933", "C174", "H176", "0.0000", "2", "180.0", " "}, {"H196", "C933", "C174", "H176", "0.1500", "3", "0.0", " "}, {"H196", "C933", "C174", "H176", "0.0000", "4", "180.0", " "}, {"N938", "C320", "N321", "H327", "0.0000", "1", "0.0", " "}, {"N938", "C320", "N321", "H327", "3.6250", "2", "180.0", " "}, {"N938", "C320", "N321", "H327", "0.0000", "3", "0.0", " "}, {"N938", "C320", "N321", "H327", "0.0000", "4", "180.0", " "}, {"N938", "C320", "N321", "C322", "0.0000", "1", "0.0", " "}, {"N938", "C320", "N321", "C322", "3.6250", "2", "180.0", " "}, {"N938", "C320", "N321", "C322", "0.0000", "3", "0.0", " "}, {"N938", "C320", "N321", "C322", "0.0000", "4", "180.0", " "}, {"H196", "C933", "C174", "C174", "0.0000", "1", "0.0", " "}, {"H196", "C933", "C174", "C174", "0.0000", "2", "180.0", " "}, {"H196", "C933", "C174", "C174", "0.1500", "3", "0.0", " "}, {"H196", "C933", "C174", "C174", "0.0000", "4", "180.0", " "}, {"C338", "N937", "C334", "N335", "0.0000", "1", "0.0", " "}, {"C338", "N937", "C334", "N335", "3.6250", "2", "180.0", " "}, {"C338", "N937", "C334", "N335", "0.0000", "3", "0.0", " "}, {"C338", "N937", "C334", "N335", "0.0000", "4", "180.0", " "}, {"C334", "N937", "C932", "H196", "0.0000", "1", "0.0", " "}, {"C334", "N937", "C932", "H196", "0.0000", "2", "180.0", " "}, {"C334", "N937", "C932", "H196", "0.0000", "3", "0.0", " "}, {"C334", "N937", "C932", "H196", "0.0000", "4", "180.0", " "}, {"C338", "N937", "C932", "H196", "0.0000", "1", "0.0", " "}, {"C338", "N937", "C932", "H196", "0.0000", "2", "180.0", " "}, {"C338", "N937", "C932", "H196", "0.0000", "3", "0.0", " "}, {"C338", "N937", "C932", "H196", "0.0000", "4", "180.0", " "}, {"H196", "C932", "C174", "C174", "0.0000", "1", "0.0", " "}, {"H196", "C932", "C174", "C174", "0.0000", "2", "180.0", " "}, {"H196", "C932", "C174", "C174", "0.1500", "3", "0.0", " "}, {"H196", "C932", "C174", "C174", "0.0000", "4", "180.0", " "}, {"H196", "C932", "C174", "O169", "0.0000", "1", "0.0", " "}, {"H196", "C932", "C174", "O169", "0.0000", "2", "180.0", " "}, {"H196", "C932", "C174", "O169", "0.2340", "3", "0.0", " "}, {"H196", "C932", "C174", "O169", "0.0000", "4", "180.0", " "}, {"H196", "C932", "C174", "H176", "0.0000", "1", "0.0", " "}, {"H196", "C932", "C174", "H176", "0.0000", "2", "180.0", " "}, {"H196", "C932", "C174", "H176", "0.1500", "3", "0.0", " "}, {"H196", "C932", "C174", "H176", "0.0000", "4", "180.0", " "}, {"N937", "C338", "C337", "C336", "0.0000", "1", "0.0", " "}, {"N937", "C338", "C337", "C336", "7.0000", "2", "180.0", " "}, {"N937", "C338", "C337", "C336", "0.0000", "3", "0.0", " "}, {"N937", "C338", "C337", "C336", "0.0000", "4", "180.0", " "}, {"N937", "C338", "C337", "H344", "0.0000", "1", "0.0", " "}, {"N937", "C338", "C337", "H344", "7.0000", "2", "180.0", " "}, {"N937", "C338", "C337", "H344", "0.0000", "3", "0.0", " "}, {"N937", "C338", "C337", "H344", "0.0000", "4", "180.0", " "}, {"C338", "N937", "C932", "O186", "0.2000", "1", "0.0", " "}, {"C338", "N937", "C932", "O186", "-1.4000", "2", "180.0", " "}, {"C338", "N937", "C932", "O186", "-0.3000", "3", "0.0", " "}, {"C338", "N937", "C932", "O186", "0.0000", "4", "180.0", " "}, {"C932", "N937", "C334", "N335", "0.0000", "1", "0.0", " "}, {"C932", "N937", "C334", "N335", "3.6250", "2", "180.0", " "}, {"C932", "N937", "C334", "N335", "0.0000", "3", "0.0", " "}, {"C932", "N937", "C334", "N335", "0.0000", "4", "180.0", " "}, {"C932", "N937", "C334", "O340", "0.0000", "1", "0.0", " "}, {"C932", "N937", "C334", "O340", "3.6250", "2", "180.0", " "}, {"C932", "N937", "C334", "O340", "0.0000", "3", "0.0", " "}, {"C932", "N937", "C334", "O340", "0.0000", "4", "180.0", " "}, {"C932", "N937", "C338", "H345", "0.0000", "1", "0.0", " "}, {"C932", "N937", "C338", "H345", "2.5000", "2", "180.0", " "}, {"C932", "N937", "C338", "H345", "0.0000", "3", "0.0", " "}, {"C932", "N937", "C338", "H345", "0.0000", "4", "180.0", " "}, {"C932", "N937", "C338", "C337", "0.0000", "1", "0.0", " "}, {"C932", "N937", "C338", "C337", "2.5000", "2", "180.0", " "}, {"C932", "N937", "C338", "C337", "0.0000", "3", "0.0", " "}, {"C932", "N937", "C338", "C337", "0.0000", "4", "180.0", " "}, {"C932", "C174", "O169", "H170", "1.3370", "1", "0.0", " "}, {"C932", "C174", "O169", "H170", "-1.4415", "2", "180.0", " "}, {"C932", "C174", "O169", "H170", "0.5130", "3", "0.0", " "}, {"C932", "C174", "O169", "H170", "0.0000", "4", "180.0", " "}, {"C932", "C174", "C174", "O169", "-0.2180", "1", "0.0", " "}, {"C932", "C174", "C174", "O169", "0.4500", "2", "180.0", " "}, {"C932", "C174", "C174", "O169", "0.0000", "3", "0.0", " "}, {"C932", "C174", "C174", "O169", "0.0000", "4", "180.0", " "}, {"C932", "C174", "C174", "H176", "0.0000", "1", "0.0", " "}, {"C932", "C174", "C174", "H176", "0.0000", "2", "180.0", " "}, {"C932", "C174", "C174", "H176", "0.1500", "3", "0.0", " "}, {"C932", "C174", "C174", "H176", "0.0000", "4", "180.0", " "}, {"O186", "C932", "C174", "H176", "0.0000", "1", "0.0", " "}, {"O186", "C932", "C174", "H176", "0.0000", "2", "180.0", " "}, {"O186", "C932", "C174", "H176", "0.2340", "3", "0.0", " "}, {"O186", "C932", "C174", "H176", "0.0000", "4", "180.0", " "}, {"O186", "C932", "C174", "O169", "2.1595", "1", "0.0", " "}, {"O186", "C932", "C174", "O169", "0.0000", "2", "180.0", " "}, {"O186", "C932", "C174", "O169", "0.0000", "3", "0.0", " "}, {"O186", "C932", "C174", "O169", "0.0000", "4", "180.0", " "}, {"O186", "C932", "C174", "C174", "-0.2180", "1", "0.0", " "}, {"O186", "C932", "C174", "C174", "0.4500", "2", "180.0", " "}, {"O186", "C932", "C174", "C174", "0.0000", "3", "0.0", " "}, {"O186", "C932", "C174", "C174", "0.0000", "4", "180.0", " "}, {"N937", "C932", "O186", "C183", "-0.2500", "1", "0.0", " "}, {"N937", "C932", "O186", "C183", "-0.7500", "2", "180.0", " "}, {"N937", "C932", "O186", "C183", "0.5000", "3", "0.0", " "}, {"N937", "C932", "O186", "C183", "0.0000", "4", "180.0", " "}, {"C932", "O186", "C183", "H185", "0.0000", "1", "0.0", " "}, {"C932", "O186", "C183", "H185", "0.0000", "2", "180.0", " "}, {"C932", "O186", "C183", "H185", "0.3800", "3", "0.0", " "}, {"C932", "O186", "C183", "H185", "0.0000", "4", "180.0", " "}, {"C334", "N937", "C932", "O186", "-0.1000", "1", "0.0", " "}, {"C334", "N937", "C932", "O186", "-1.2580", "2", "180.0", " "}, {"C334", "N937", "C932", "O186", "0.3500", "3", "0.0", " "}, {"C334", "N937", "C932", "O186", "0.0000", "4", "180.0", " "}, {"C174", "C932", "O186", "C183", "0.3250", "1", "0.0", " "}, {"C174", "C932", "O186", "C183", "-0.1250", "2", "180.0", " "}, {"C174", "C932", "O186", "C183", "-0.2350", "3", "0.0", " "}, {"C174", "C932", "O186", "C183", "0.0000", "4", "180.0", " "}, {"H196", "C932", "O186", "C183", "0.0000", "1", "0.0", " "}, {"H196", "C932", "O186", "C183", "0.0000", "2", "180.0", " "}, {"H196", "C932", "O186", "C183", "0.3800", "3", "0.0", " "}, {"H196", "C932", "O186", "C183", "0.0000", "4", "180.0", " "}, {"C932", "C174", "C174", "C183", "0.6500", "1", "0.0", " "}, {"C932", "C174", "C174", "C183", "-0.1000", "2", "180.0", " "}, {"C932", "C174", "C174", "C183", "0.1000", "3", "0.0", " "}, {"C932", "C174", "C174", "C183", "0.0000", "4", "180.0", " "}, {"C931", "N936", "C364", "C365", "0.0000", "1", "0.0", " "}, {"C931", "N936", "C364", "C365", "2.5000", "2", "180.0", " "}, {"C931", "N936", "C364", "C365", "0.0000", "3", "0.0", " "}, {"C931", "N936", "C364", "C365", "0.0000", "4", "180.0", " "}, {"N936", "C353", "N352", "C365", "0.0000", "1", "0.0", " "}, {"N936", "C353", "N352", "C365", "5.0000", "2", "180.0", " "}, {"N936", "C353", "N352", "C365", "0.0000", "3", "0.0", " "}, {"N936", "C353", "N352", "C365", "0.0000", "4", "180.0", " "}, {"N936", "C364", "N363", "C362", "0.0000", "1", "0.0", " "}, {"N936", "C364", "N363", "C362", "3.6250", "2", "180.0", " "}, {"N936", "C364", "N363", "C362", "0.0000", "3", "0.0", " "}, {"N936", "C364", "N363", "C362", "0.0000", "4", "180.0", " "}, {"N936", "C364", "C365", "C366", "0.0000", "1", "0.0", " "}, {"N936", "C364", "C365", "C366", "3.6250", "2", "180.0", " "}, {"N936", "C364", "C365", "C366", "0.0000", "3", "0.0", " "}, {"N936", "C364", "C365", "C366", "0.0000", "4", "180.0", " "}, {"N936", "C364", "C365", "N352", "0.0000", "1", "0.0", " "}, {"N936", "C364", "C365", "N352", "3.6250", "2", "180.0", " "}, {"N936", "C364", "C365", "N352", "0.0000", "3", "0.0", " "}, {"N936", "C364", "C365", "N352", "0.0000", "4", "180.0", " "}, {"C364", "C365", "C366", "N361", "0.0000", "1", "0.0", " "}, {"C364", "C365", "C366", "N361", "3.5000", "2", "180.0", " "}, {"C364", "C365", "C366", "N361", "0.0000", "3", "0.0", " "}, {"C364", "C365", "C366", "N361", "0.0000", "4", "180.0", " "}, {"C364", "C365", "C366", "O370", "0.0000", "1", "0.0", " "}, {"C364", "C365", "C366", "O370", "3.5000", "2", "180.0", " "}, {"C364", "C365", "C366", "O370", "0.0000", "3", "0.0", " "}, {"C364", "C365", "C366", "O370", "0.0000", "4", "180.0", " "}, {"C364", "C365", "N352", "C353", "0.0000", "1", "0.0", " "}, {"C364", "C365", "N352", "C353", "3.6250", "2", "180.0", " "}, {"C364", "C365", "N352", "C353", "0.0000", "3", "0.0", " "}, {"C364", "C365", "N352", "C353", "0.0000", "4", "180.0", " "}, {"C364", "N363", "C362", "N368", "0.0000", "1", "0.0", " "}, {"C364", "N363", "C362", "N368", "3.6250", "2", "180.0", " "}, {"C364", "N363", "C362", "N368", "0.0000", "3", "0.0", " "}, {"C364", "N363", "C362", "N368", "0.0000", "4", "180.0", " "}, {"C364", "N363", "C362", "N361", "0.0000", "1", "0.0", " "}, {"C364", "N363", "C362", "N361", "3.6250", "2", "180.0", " "}, {"C364", "N363", "C362", "N361", "0.0000", "3", "0.0", " "}, {"C364", "N363", "C362", "N361", "0.0000", "4", "180.0", " "}, {"C364", "N936", "C353", "N352", "0.0000", "1", "0.0", " "}, {"C364", "N936", "C353", "N352", "3.6250", "2", "180.0", " "}, {"C364", "N936", "C353", "N352", "0.0000", "3", "0.0", " "}, {"C364", "N936", "C353", "N352", "0.0000", "4", "180.0", " "}, {"N363", "C362", "N368", "H369", "0.0000", "1", "0.0", " "}, {"N363", "C362", "N368", "H369", "1.9500", "2", "180.0", " "}, {"N363", "C362", "N368", "H369", "0.0000", "3", "0.0", " "}, {"N363", "C362", "N368", "H369", "0.0000", "4", "180.0", " "}, {"H367", "N361", "C362", "N363", "0.0000", "1", "0.0", " "}, {"H367", "N361", "C362", "N363", "3.6250", "2", "180.0", " "}, {"H367", "N361", "C362", "N363", "0.0000", "3", "0.0", " "}, {"H367", "N361", "C362", "N363", "0.0000", "4", "180.0", " "}, {"C366", "N361", "C362", "N363", "0.0000", "1", "0.0", " "}, {"C366", "N361", "C362", "N363", "3.6250", "2", "180.0", " "}, {"C366", "N361", "C362", "N363", "0.0000", "3", "0.0", " "}, {"C366", "N361", "C362", "N363", "0.0000", "4", "180.0", " "}, {"N363", "C364", "C365", "C366", "0.0000", "1", "0.0", " "}, {"N363", "C364", "C365", "C366", "3.6250", "2", "180.0", " "}, {"N363", "C364", "C365", "C366", "0.0000", "3", "0.0", " "}, {"N363", "C364", "C365", "C366", "0.0000", "4", "180.0", " "}, {"N363", "C364", "C365", "N352", "0.0000", "1", "0.0", " "}, {"N363", "C364", "C365", "N352", "3.6250", "2", "180.0", " "}, {"N363", "C364", "C365", "N352", "0.0000", "3", "0.0", " "}, {"N363", "C364", "C365", "N352", "0.0000", "4", "180.0", " "}, {"O370", "C366", "N361", "C362", "0.0000", "1", "0.0", " "}, {"O370", "C366", "N361", "C362", "3.0445", "2", "180.0", " "}, {"O370", "C366", "N361", "C362", "0.0000", "3", "0.0", " "}, {"O370", "C366", "N361", "C362", "0.0000", "4", "180.0", " "}, {"C365", "C364", "N363", "C362", "0.0000", "1", "0.0", " "}, {"C365", "C364", "N363", "C362", "3.6250", "2", "180.0", " "}, {"C365", "C364", "N363", "C362", "0.0000", "3", "0.0", " "}, {"C365", "C364", "N363", "C362", "0.0000", "4", "180.0", " "}, {"O370", "C366", "N361", "H367", "0.0000", "1", "0.0", " "}, {"O370", "C366", "N361", "H367", "2.4500", "2", "180.0", " "}, {"O370", "C366", "N361", "H367", "0.0000", "3", "0.0", " "}, {"O370", "C366", "N361", "H367", "0.0000", "4", "180.0", " "}, {"C366", "C365", "N352", "C353", "0.0000", "1", "0.0", " "}, {"C366", "C365", "N352", "C353", "3.6250", "2", "180.0", " "}, {"C366", "C365", "N352", "C353", "0.0000", "3", "0.0", " "}, {"C366", "C365", "N352", "C353", "0.0000", "4", "180.0", " "}, {"N352", "C365", "C366", "O370", "0.0000", "1", "0.0", " "}, {"N352", "C365", "C366", "O370", "3.5000", "2", "180.0", " "}, {"N352", "C365", "C366", "O370", "0.0000", "3", "0.0", " "}, {"N352", "C365", "C366", "O370", "0.0000", "4", "180.0", " "}, {"H359", "C353", "N352", "C365", "0.0000", "1", "0.0", " "}, {"H359", "C353", "N352", "C365", "5.0000", "2", "180.0", " "}, {"H359", "C353", "N352", "C365", "0.0000", "3", "0.0", " "}, {"H359", "C353", "N352", "C365", "0.0000", "4", "180.0", " "}, {"C353", "N936", "C364", "C365", "0.0000", "1", "0.0", " "}, {"C353", "N936", "C364", "C365", "3.6250", "2", "180.0", " "}, {"C353", "N936", "C364", "C365", "0.0000", "3", "0.0", " "}, {"C353", "N936", "C364", "C365", "0.0000", "4", "180.0", " "}, {"C364", "N936", "C931", "O186", "0.2000", "1", "0.0", " "}, {"C364", "N936", "C931", "O186", "-0.6000", "2", "180.0", " "}, {"C364", "N936", "C931", "O186", "0.6000", "3", "0.0", " "}, {"C364", "N936", "C931", "O186", "0.0000", "4", "180.0", " "}, {"C364", "N936", "C931", "C174", "-0.3500", "1", "0.0", " "}, {"C364", "N936", "C931", "C174", "-0.0500", "2", "180.0", " "}, {"C364", "N936", "C931", "C174", "0.3000", "3", "0.0", " "}, {"C364", "N936", "C931", "C174", "0.0000", "4", "180.0", " "}, {"C364", "N936", "C353", "H359", "0.0000", "1", "0.0", " "}, {"C364", "N936", "C353", "H359", "3.6250", "2", "180.0", " "}, {"C364", "N936", "C353", "H359", "0.0000", "3", "0.0", " "}, {"C364", "N936", "C353", "H359", "0.0000", "4", "180.0", " "}, {"H367", "N361", "C362", "N368", "0.0000", "1", "0.0", " "}, {"H367", "N361", "C362", "N368", "3.6250", "2", "180.0", " "}, {"H367", "N361", "C362", "N368", "0.0000", "3", "0.0", " "}, {"H367", "N361", "C362", "N368", "0.0000", "4", "180.0", " "}, {"C366", "N361", "C362", "N368", "0.0000", "1", "0.0", " "}, {"C366", "N361", "C362", "N368", "3.6250", "2", "180.0", " "}, {"C366", "N361", "C362", "N368", "0.0000", "3", "0.0", " "}, {"C366", "N361", "C362", "N368", "0.0000", "4", "180.0", " "}, {"N361", "C362", "N368", "H369", "0.0000", "1", "0.0", " "}, {"N361", "C362", "N368", "H369", "1.9500", "2", "180.0", " "}, {"N361", "C362", "N368", "H369", "0.0000", "3", "0.0", " "}, {"N361", "C362", "N368", "H369", "0.0000", "4", "180.0", " "}, {"C353", "N936", "C364", "N363", "0.0000", "1", "0.0", " "}, {"C353", "N936", "C364", "N363", "3.6250", "2", "180.0", " "}, {"C353", "N936", "C364", "N363", "0.0000", "3", "0.0", " "}, {"C353", "N936", "C364", "N363", "0.0000", "4", "180.0", " "}, {"C365", "C366", "N361", "C362", "1.1500", "1", "0.0", " "}, {"C365", "C366", "N361", "C362", "3.0445", "2", "180.0", " "}, {"C365", "C366", "N361", "C362", "0.0000", "3", "0.0", " "}, {"C365", "C366", "N361", "C362", "0.0000", "4", "180.0", " "}, {"N352", "C365", "C366", "N361", "0.0000", "1", "0.0", " "}, {"N352", "C365", "C366", "N361", "3.5000", "2", "180.0", " "}, {"N352", "C365", "C366", "N361", "0.0000", "3", "0.0", " "}, {"N352", "C365", "C366", "N361", "0.0000", "4", "180.0", " "}, {"C365", "C366", "N361", "H367", "0.0000", "1", "0.0", " "}, {"C365", "C366", "N361", "H367", "2.4500", "2", "180.0", " "}, {"C365", "C366", "N361", "H367", "0.0000", "3", "0.0", " "}, {"C365", "C366", "N361", "H367", "0.0000", "4", "180.0", " "}, {"C364", "N936", "C931", "H196", "0.0000", "1", "0.0", " "}, {"C364", "N936", "C931", "H196", "0.0000", "2", "180.0", " "}, {"C364", "N936", "C931", "H196", "0.0000", "3", "0.0", " "}, {"C364", "N936", "C931", "H196", "0.0000", "4", "180.0", " "}, {"C931", "N936", "C364", "N363", "0.0000", "1", "0.0", " "}, {"C931", "N936", "C364", "N363", "2.5000", "2", "180.0", " "}, {"C931", "N936", "C364", "N363", "0.0000", "3", "0.0", " "}, {"C931", "N936", "C364", "N363", "0.0000", "4", "180.0", " "}, {"C183", "C6448", "O6934", "P440", "-0.7100", "1", "0.0", " "}, {"C183", "C6448", "O6934", "P440", "-0.3100", "2", "180.0", " "}, {"C183", "C6448", "O6934", "P440", "0.0500", "3", "0.0", " "}, {"C183", "C6448", "O6934", "P440", "0.0000", "4", "180.0", " "}, {"H185", "C183", "C6448", "O6934", "0.0000", "1", "0.0", " "}, {"H185", "C183", "C6448", "O6934", "0.0000", "2", "180.0", " "}, {"H185", "C183", "C6448", "O6934", "0.2340", "3", "0.0", " "}, {"H185", "C183", "C6448", "O6934", "0.0000", "4", "180.0", " "}, {"H185", "C183", "C6448", "H140", "0.0000", "1", "0.0", " "}, {"H185", "C183", "C6448", "H140", "0.0000", "2", "180.0", " "}, {"H185", "C183", "C6448", "H140", "0.1500", "3", "0.0", " "}, {"H185", "C183", "C6448", "H140", "0.0000", "4", "180.0", " "}, {"O186", "C183", "C6448", "O6934", "3.7595", "1", "0.0", " "}, {"O186", "C183", "C6448", "O6934", "-0.6000", "2", "180.0", " "}, {"O186", "C183", "C6448", "O6934", "-0.0500", "3", "0.0", " "}, {"O186", "C183", "C6448", "O6934", "0.0000", "4", "180.0", " "}, {"O186", "C183", "C6448", "H140", "0.0000", "1", "0.0", " "}, {"O186", "C183", "C6448", "H140", "0.0000", "2", "180.0", " "}, {"O186", "C183", "C6448", "H140", "0.2340", "3", "0.0", " "}, {"O186", "C183", "C6448", "H140", "0.0000", "4", "180.0", " "}, {"C933", "O186", "C183", "C174", "0.3250", "1", "0.0", " "}, {"C933", "O186", "C183", "C174", "-0.1250", "2", "180.0", " "}, {"C933", "O186", "C183", "C174", "-0.2350", "3", "0.0", " "}, {"C933", "O186", "C183", "C174", "0.0000", "4", "180.0", " "}, {"C320", "N938", "C933", "H196", "0.0000", "1", "0.0", " "}, {"C320", "N938", "C933", "H196", "0.0000", "2", "180.0", " "}, {"C320", "N938", "C933", "H196", "0.0000", "3", "0.0", " "}, {"C320", "N938", "C933", "H196", "0.0000", "4", "180.0", " "}, {"C933", "O186", "C183", "C6448", "0.3250", "1", "0.0", " "}, {"C933", "O186", "C183", "C6448", "-0.1250", "2", "180.0", " "}, {"C933", "O186", "C183", "C6448", "-0.2650", "3", "0.0", " "}, {"C933", "O186", "C183", "C6448", "0.0000", "4", "180.0", " "}, {"C931", "O186", "C183", "C6448", "0.3250", "1", "0.0", " "}, {"C931", "O186", "C183", "C6448", "-0.1250", "2", "180.0", " "}, {"C931", "O186", "C183", "C6448", "-0.2650", "3", "0.0", " "}, {"C931", "O186", "C183", "C6448", "0.0000", "4", "180.0", " "}, {"C932", "O186", "C183", "C6448", "0.3250", "1", "0.0", " "}, {"C932", "O186", "C183", "C6448", "-0.1250", "2", "180.0", " "}, {"C932", "O186", "C183", "C6448", "-0.2650", "3", "0.0", " "}, {"C932", "O186", "C183", "C6448", "0.0000", "4", "180.0", " "}, {"C6448", "C183", "C174", "C174", "0.6500", "1", "0.0", " "}, {"C6448", "C183", "C174", "C174", "-0.1000", "2", "180.0", " "}, {"C6448", "C183", "C174", "C174", "0.1000", "3", "0.0", " "}, {"C6448", "C183", "C174", "C174", "0.0000", "4", "180.0", " "}, {"C174", "C183", "C6448", "O6934", "0.7000", "1", "0.0", " "}, {"C174", "C183", "C6448", "O6934", "0.2500", "2", "180.0", " "}, {"C174", "C183", "C6448", "O6934", "1.0500", "3", "0.0", " "}, {"C174", "C183", "C6448", "O6934", "0.0000", "4", "180.0", " "}, {"C174", "C183", "C6448", "H140", "0.0000", "1", "0.0", " "}, {"C174", "C183", "C6448", "H140", "0.0000", "2", "180.0", " "}, {"C174", "C183", "C6448", "H140", "0.1500", "3", "0.0", " "}, {"C174", "C183", "C6448", "H140", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C183", "C6448", "0.0000", "1", "0.0", " "}, {"H176", "C174", "C183", "C6448", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C183", "C6448", "0.1500", "3", "0.0", " "}, {"H176", "C174", "C183", "C6448", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C183", "C6448", "-0.2180", "1", "0.0", " "}, {"O169", "C174", "C183", "C6448", "0.4500", "2", "180.0", " "}, {"O169", "C174", "C183", "C6448", "0.0000", "3", "0.0", " "}, {"O169", "C174", "C183", "C6448", "0.0000", "4", "180.0", " "}, {"C6448", "O6934", "P440", "O441", "0.4000", "1", "0.0", " "}, {"C6448", "O6934", "P440", "O441", "0.1500", "2", "180.0", " "}, {"C6448", "O6934", "P440", "O441", "0.0500", "3", "0.0", " "}, {"C6448", "O6934", "P440", "O441", "0.0000", "4", "180.0", " "}, {"C6448", "O6934", "P440", "O6452", "-0.4500", "1", "0.0", " "}, {"C6448", "O6934", "P440", "O6452", "-0.2500", "2", "180.0", " "}, {"C6448", "O6934", "P440", "O6452", "0.1000", "3", "0.0", " "}, {"C6448", "O6934", "P440", "O6452", "0.0000", "4", "180.0", " "}, {"H140", "C6448", "O6934", "P440", "0.0000", "1", "0.0", " "}, {"H140", "C6448", "O6934", "P440", "0.0000", "2", "180.0", " "}, {"H140", "C6448", "O6934", "P440", "0.1500", "3", "0.0", " "}, {"H140", "C6448", "O6934", "P440", "0.0000", "4", "180.0", " "}, {"O6934", "P440", "O6452", "P6450", "-0.0500", "1", "0.0", " "}, {"O6934", "P440", "O6452", "P6450", "-0.2000", "2", "180.0", " "}, {"O6934", "P440", "O6452", "P6450", "0.0500", "3", "0.0", " "}, {"O6934", "P440", "O6452", "P6450", "0.0000", "4", "180.0", " "}, {"O6934", "P440", "O6452", "P440", "-0.0500", "1", "0.0", " "}, {"O6934", "P440", "O6452", "P440", "-0.2000", "2", "180.0", " "}, {"O6934", "P440", "O6452", "P440", "0.0500", "3", "0.0", " "}, {"O6934", "P440", "O6452", "P440", "0.0000", "4", "180.0", " "}, {"P440", "O6452", "P6450", "O441", "0.1500", "1", "0.0", " "}, {"P440", "O6452", "P6450", "O441", "0.1500", "2", "180.0", " "}, {"P440", "O6452", "P6450", "O441", "0.0000", "3", "0.0", " "}, {"P440", "O6452", "P6450", "O441", "0.0000", "4", "180.0", " "}, {"P6450", "O6452", "P440", "O441", "0.1500", "1", "0.0", " "}, {"P6450", "O6452", "P440", "O441", "0.1500", "2", "180.0", " "}, {"P6450", "O6452", "P440", "O441", "0.0000", "3", "0.0", " "}, {"P6450", "O6452", "P440", "O441", "0.0000", "4", "180.0", " "}, {"P440", "O6452", "P440", "O441", "0.1500", "1", "0.0", " "}, {"P440", "O6452", "P440", "O441", "0.1500", "2", "180.0", " "}, {"P440", "O6452", "P440", "O441", "0.0000", "3", "0.0", " "}, {"P440", "O6452", "P440", "O441", "0.0000", "4", "180.0", " "}, {"P440", "O6452", "P440", "O6442", "-0.0500", "1", "0.0", " "}, {"P440", "O6452", "P440", "O6442", "-0.2000", "2", "180.0", " "}, {"P440", "O6452", "P440", "O6442", "0.0500", "3", "0.0", " "}, {"P440", "O6452", "P440", "O6442", "0.0000", "4", "180.0", " "}, {"O6452", "P440", "O6442", "P6450", "-0.0500", "1", "0.0", " "}, {"O6452", "P440", "O6442", "P6450", "-0.2000", "2", "180.0", " "}, {"O6452", "P440", "O6442", "P6450", "0.0500", "3", "0.0", " "}, {"O6452", "P440", "O6442", "P6450", "0.0000", "4", "180.0", " "}, {"P440", "O6442", "P6450", "O6441", "0.0000", "1", "0.0", " "}, {"P440", "O6442", "P6450", "O6441", "0.0000", "2", "180.0", " "}, {"P440", "O6442", "P6450", "O6441", "-0.0500", "3", "0.0", " "}, {"P440", "O6442", "P6450", "O6441", "0.0000", "4", "180.0", " "}, {"O441", "P440", "O6442", "P6450", "0.1500", "1", "0.0", " "}, {"O441", "P440", "O6442", "P6450", "0.1500", "2", "180.0", " "}, {"O441", "P440", "O6442", "P6450", "0.0000", "3", "0.0", " "}, {"O441", "P440", "O6442", "P6450", "0.0000", "4", "180.0", " "}, {"H355", "C347", "N346", "C351", "0.0000", "1", "0.0", " "}, {"H355", "C347", "N346", "C351", "3.6250", "2", "180.0", " "}, {"H355", "C347", "N346", "C351", "0.0000", "3", "0.0", " "}, {"H355", "C347", "N346", "C351", "0.0000", "4", "180.0", " "}, {"H359", "C353", "N936", "C931", "0.0000", "1", "0.0", " "}, {"H359", "C353", "N936", "C931", "5.0000", "2", "180.0", " "}, {"H359", "C353", "N936", "C931", "0.0000", "3", "0.0", " "}, {"H359", "C353", "N936", "C931", "0.0000", "4", "180.0", " "}, {"O186", "C931", "N936", "C349", "0.2000", "1", "0.0", " "}, {"O186", "C931", "N936", "C349", "-0.6000", "2", "180.0", " "}, {"O186", "C931", "N936", "C349", "0.6000", "3", "0.0", " "}, {"O186", "C931", "N936", "C349", "0.0000", "4", "180.0", " "}, {"H196", "C931", "N936", "C349", "0.0000", "1", "0.0", " "}, {"H196", "C931", "N936", "C349", "0.0000", "2", "180.0", " "}, {"H196", "C931", "N936", "C349", "0.0000", "3", "0.0", " "}, {"H196", "C931", "N936", "C349", "0.0000", "4", "180.0", " "}, {"C174", "C931", "N936", "C353", "0.0500", "1", "0.0", " "}, {"C174", "C931", "N936", "C353", "-0.3500", "2", "180.0", " "}, {"C174", "C931", "N936", "C353", "-0.1500", "3", "0.0", " "}, {"C174", "C931", "N936", "C353", "0.0000", "4", "180.0", " "}, {"O186", "C931", "N936", "C353", "1.8000", "1", "0.0", " "}, {"O186", "C931", "N936", "C353", "-1.8000", "2", "180.0", " "}, {"O186", "C931", "N936", "C353", "0.6000", "3", "0.0", " "}, {"O186", "C931", "N936", "C353", "0.0000", "4", "180.0", " "}, {"H196", "C931", "N936", "C353", "0.0000", "1", "0.0", " "}, {"H196", "C931", "N936", "C353", "0.0000", "2", "180.0", " "}, {"H196", "C931", "N936", "C353", "0.0000", "3", "0.0", " "}, {"H196", "C931", "N936", "C353", "0.0000", "4", "180.0", " "}, {"N348", "C349", "N936", "C931", "0.0000", "1", "0.0", " "}, {"N348", "C349", "N936", "C931", "2.5000", "2", "180.0", " "}, {"N348", "C349", "N936", "C931", "0.0000", "3", "0.0", " "}, {"N348", "C349", "N936", "C931", "0.0000", "4", "180.0", " "}, {"C350", "C349", "N936", "C353", "0.0000", "1", "0.0", " "}, {"C350", "C349", "N936", "C353", "3.6250", "2", "180.0", " "}, {"C350", "C349", "N936", "C353", "0.0000", "3", "0.0", " "}, {"C350", "C349", "N936", "C353", "0.0000", "4", "180.0", " "}, {"N348", "C349", "N936", "C353", "0.0000", "1", "0.0", " "}, {"N348", "C349", "N936", "C353", "3.6250", "2", "180.0", " "}, {"N348", "C349", "N936", "C353", "0.0000", "3", "0.0", " "}, {"N348", "C349", "N936", "C353", "0.0000", "4", "180.0", " "}, {"N352", "C353", "N936", "C931", "0.0000", "1", "0.0", " "}, {"N352", "C353", "N936", "C931", "5.0000", "2", "180.0", " "}, {"N352", "C353", "N936", "C931", "0.0000", "3", "0.0", " "}, {"N352", "C353", "N936", "C931", "0.0000", "4", "180.0", " "}, {"N352", "C353", "N936", "C349", "0.0000", "1", "0.0", " "}, {"N352", "C353", "N936", "C349", "3.6250", "2", "180.0", " "}, {"N352", "C353", "N936", "C349", "0.0000", "3", "0.0", " "}, {"N352", "C353", "N936", "C349", "0.0000", "4", "180.0", " "}, {"H359", "C353", "N936", "C349", "0.0000", "1", "0.0", " "}, {"H359", "C353", "N936", "C349", "3.6250", "2", "180.0", " "}, {"H359", "C353", "N936", "C349", "0.0000", "3", "0.0", " "}, {"H359", "C353", "N936", "C349", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C931", "N936", "4.0000", "1", "0.0", " "}, {"O169", "C174", "C931", "N936", "0.0000", "2", "180.0", " "}, {"O169", "C174", "C931", "N936", "0.0000", "3", "0.0", " "}, {"O169", "C174", "C931", "N936", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C931", "N936", "-0.5065", "1", "0.0", " "}, {"H176", "C174", "C931", "N936", "-0.3545", "2", "180.0", " "}, {"H176", "C174", "C931", "N936", "0.2365", "3", "0.0", " "}, {"H176", "C174", "C931", "N936", "0.0000", "4", "180.0", " "}, {"C174", "C174", "C931", "O186", "-0.2180", "1", "0.0", " "}, {"C174", "C174", "C931", "O186", "0.4500", "2", "180.0", " "}, {"C174", "C174", "C931", "O186", "0.0000", "3", "0.0", " "}, {"C174", "C174", "C931", "O186", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C931", "O186", "2.1595", "1", "0.0", " "}, {"O169", "C174", "C931", "O186", "0.0000", "2", "180.0", " "}, {"O169", "C174", "C931", "O186", "0.0000", "3", "0.0", " "}, {"O169", "C174", "C931", "O186", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C931", "O186", "0.0000", "1", "0.0", " "}, {"H176", "C174", "C931", "O186", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C931", "O186", "0.2340", "3", "0.0", " "}, {"H176", "C174", "C931", "O186", "0.0000", "4", "180.0", " "}, {"C174", "C174", "C931", "H196", "0.0000", "1", "0.0", " "}, {"C174", "C174", "C931", "H196", "0.0000", "2", "180.0", " "}, {"C174", "C174", "C931", "H196", "0.1500", "3", "0.0", " "}, {"C174", "C174", "C931", "H196", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C931", "H196", "0.0000", "1", "0.0", " "}, {"O169", "C174", "C931", "H196", "0.0000", "2", "180.0", " "}, {"O169", "C174", "C931", "H196", "0.2340", "3", "0.0", " "}, {"O169", "C174", "C931", "H196", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C931", "H196", "0.0000", "1", "0.0", " "}, {"H176", "C174", "C931", "H196", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C931", "H196", "0.1500", "3", "0.0", " "}, {"H176", "C174", "C931", "H196", "0.0000", "4", "180.0", " "}, {"C183", "O186", "C931", "N936", "-0.2500", "1", "0.0", " "}, {"C183", "O186", "C931", "N936", "-0.7500", "2", "180.0", " "}, {"C183", "O186", "C931", "N936", "0.5000", "3", "0.0", " "}, {"C183", "O186", "C931", "N936", "0.0000", "4", "180.0", " "}, {"C183", "O186", "C931", "C174", "0.3250", "1", "0.0", " "}, {"C183", "O186", "C931", "C174", "-0.1250", "2", "180.0", " "}, {"C183", "O186", "C931", "C174", "-0.2650", "3", "0.0", " "}, {"C183", "O186", "C931", "C174", "0.0000", "4", "180.0", " "}, {"C183", "O186", "C931", "H196", "0.0000", "1", "0.0", " "}, {"C183", "O186", "C931", "H196", "0.0000", "2", "180.0", " "}, {"C183", "O186", "C931", "H196", "0.3800", "3", "0.0", " "}, {"C183", "O186", "C931", "H196", "0.0000", "4", "180.0", " "}, {"N352", "C350", "C349", "N936", "0.0000", "1", "0.0", " "}, {"N352", "C350", "C349", "N936", "3.6250", "2", "180.0", " "}, {"N352", "C350", "C349", "N936", "0.0000", "3", "0.0", " "}, {"N352", "C350", "C349", "N936", "0.0000", "4", "180.0", " "}, {"C351", "C350", "C349", "N348", "0.0000", "1", "0.0", " "}, {"C351", "C350", "C349", "N348", "3.6250", "2", "180.0", " "}, {"C351", "C350", "C349", "N348", "0.0000", "3", "0.0", " "}, {"C351", "C350", "C349", "N348", "0.0000", "4", "180.0", " "}, {"N352", "C350", "C349", "N348", "0.0000", "1", "0.0", " "}, {"N352", "C350", "C349", "N348", "3.6250", "2", "180.0", " "}, {"N352", "C350", "C349", "N348", "0.0000", "3", "0.0", " "}, {"N352", "C350", "C349", "N348", "0.0000", "4", "180.0", " "}, {"C347", "N348", "C349", "N936", "0.0000", "1", "0.0", " "}, {"C347", "N348", "C349", "N936", "3.6250", "2", "180.0", " "}, {"C347", "N348", "C349", "N936", "0.0000", "3", "0.0", " "}, {"C347", "N348", "C349", "N936", "0.0000", "4", "180.0", " "}, {"C347", "N348", "C349", "C350", "0.0000", "1", "0.0", " "}, {"C347", "N348", "C349", "C350", "3.6250", "2", "180.0", " "}, {"C347", "N348", "C349", "C350", "0.0000", "3", "0.0", " "}, {"C347", "N348", "C349", "C350", "0.0000", "4", "180.0", " "}, {"C350", "N352", "C353", "N936", "0.0000", "1", "0.0", " "}, {"C350", "N352", "C353", "N936", "5.0000", "2", "180.0", " "}, {"C350", "N352", "C353", "N936", "0.0000", "3", "0.0", " "}, {"C350", "N352", "C353", "N936", "0.0000", "4", "180.0", " "}, {"C350", "N352", "C353", "H359", "0.0000", "1", "0.0", " "}, {"C350", "N352", "C353", "H359", "5.0000", "2", "180.0", " "}, {"C350", "N352", "C353", "H359", "0.0000", "3", "0.0", " "}, {"C350", "N352", "C353", "H359", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C174", "C931", "-0.2180", "1", "0.0", " "}, {"O169", "C174", "C174", "C931", "0.4500", "2", "180.0", " "}, {"O169", "C174", "C174", "C931", "0.0000", "3", "0.0", " "}, {"O169", "C174", "C174", "C931", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C174", "C931", "0.0000", "1", "0.0", " "}, {"H176", "C174", "C174", "C931", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C174", "C931", "0.1500", "3", "0.0", " "}, {"H176", "C174", "C174", "C931", "0.0000", "4", "180.0", " "}, {"C183", "C174", "C174", "O169", "-0.2180", "1", "0.0", " "}, {"C183", "C174", "C174", "O169", "0.4500", "2", "180.0", " "}, {"C183", "C174", "C174", "O169", "0.0000", "3", "0.0", " "}, {"C183", "C174", "C174", "O169", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C174", "O169", "4.5330", "1", "0.0", " "}, {"O169", "C174", "C174", "O169", "0.0000", "2", "180.0", " "}, {"O169", "C174", "C174", "O169", "0.0000", "3", "0.0", " "}, {"O169", "C174", "C174", "O169", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C174", "O169", "0.0000", "1", "0.0", " "}, {"H176", "C174", "C174", "O169", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C174", "O169", "0.2340", "3", "0.0", " "}, {"H176", "C174", "C174", "O169", "0.0000", "4", "180.0", " "}, {"C183", "C174", "C174", "H176", "0.0000", "1", "0.0", " "}, {"C183", "C174", "C174", "H176", "0.0000", "2", "180.0", " "}, {"C183", "C174", "C174", "H176", "0.1500", "3", "0.0", " "}, {"C183", "C174", "C174", "H176", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C174", "H176", "0.0000", "1", "0.0", " "}, {"H176", "C174", "C174", "H176", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C174", "H176", "0.1500", "3", "0.0", " "}, {"H176", "C174", "C174", "H176", "0.0000", "4", "180.0", " "}, {"C174", "C183", "O186", "C931", "0.3250", "1", "0.0", " "}, {"C174", "C183", "O186", "C931", "-0.1250", "2", "180.0", " "}, {"C174", "C183", "O186", "C931", "-0.2650", "3", "0.0", " "}, {"C174", "C183", "O186", "C931", "0.0000", "4", "180.0", " "}, {"C157", "C183", "O186", "C931", "0.3250", "1", "0.0", " "}, {"C157", "C183", "O186", "C931", "-0.1250", "2", "180.0", " "}, {"C157", "C183", "O186", "C931", "-0.2650", "3", "0.0", " "}, {"C157", "C183", "O186", "C931", "0.0000", "4", "180.0", " "}, {"C157", "C183", "O186", "C932", "0.3250", "1", "0.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C932", "-0.1250", "2", "180.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C932", "-0.2650", "3", "0.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C932", "0.0000", "4", "180.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C933", "0.3250", "1", "0.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C933", "-0.1250", "2", "180.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C933", "-0.2650", "3", "0.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C933", "0.0000", "4", "180.0", "adm jr., from C157 C183 O186 C931"}, {"H185", "C183", "O186", "C931", "0.0000", "1", "0.0", " "}, {"H185", "C183", "O186", "C931", "0.0000", "2", "180.0", " "}, {"H185", "C183", "O186", "C931", "0.3800", "3", "0.0", " "}, {"H185", "C183", "O186", "C931", "0.0000", "4", "180.0", " "}, {"O186", "C183", "C174", "C174", "-0.2180", "1", "0.0", " "}, {"O186", "C183", "C174", "C174", "0.4500", "2", "180.0", " "}, {"O186", "C183", "C174", "C174", "0.0000", "3", "0.0", " "}, {"O186", "C183", "C174", "C174", "0.0000", "4", "180.0", " "}, {"H185", "C183", "C174", "C174", "0.0000", "1", "0.0", " "}, {"H185", "C183", "C174", "C174", "0.0000", "2", "180.0", " "}, {"H185", "C183", "C174", "C174", "0.1500", "3", "0.0", " "}, {"H185", "C183", "C174", "C174", "0.0000", "4", "180.0", " "}, {"O186", "C183", "C174", "O169", "2.1595", "1", "0.0", " "}, {"O186", "C183", "C174", "O169", "0.0000", "2", "180.0", " "}, {"O186", "C183", "C174", "O169", "0.0000", "3", "0.0", " "}, {"O186", "C183", "C174", "O169", "0.0000", "4", "180.0", " "}, {"C157", "C183", "C174", "O169", "-0.2180", "1", "0.0", " "}, {"C157", "C183", "C174", "O169", "0.4500", "2", "180.0", " "}, {"C157", "C183", "C174", "O169", "0.0000", "3", "0.0", " "}, {"C157", "C183", "C174", "O169", "0.0000", "4", "180.0", " "}, {"H185", "C183", "C174", "O169", "0.0000", "1", "0.0", " "}, {"H185", "C183", "C174", "O169", "0.0000", "2", "180.0", " "}, {"H185", "C183", "C174", "O169", "0.2340", "3", "0.0", " "}, {"H185", "C183", "C174", "O169", "0.0000", "4", "180.0", " "}, {"O186", "C183", "C174", "H176", "0.0000", "1", "0.0", " "}, {"O186", "C183", "C174", "H176", "0.0000", "2", "180.0", " "}, {"O186", "C183", "C174", "H176", "0.2340", "3", "0.0", " "}, {"O186", "C183", "C174", "H176", "0.0000", "4", "180.0", " "}, {"C157", "C183", "C174", "H176", "0.0000", "1", "0.0", " "}, {"C157", "C183", "C174", "H176", "0.0000", "2", "180.0", " "}, {"C157", "C183", "C174", "H176", "0.1500", "3", "0.0", " "}, {"C157", "C183", "C174", "H176", "0.0000", "4", "180.0", " "}, {"H185", "C183", "C174", "H176", "0.0000", "1", "0.0", " "}, {"H185", "C183", "C174", "H176", "0.0000", "2", "180.0", " "}, {"H185", "C183", "C174", "H176", "0.1500", "3", "0.0", " "}, {"H185", "C183", "C174", "H176", "0.0000", "4", "180.0", " "}, {"H170", "O169", "C174", "C183", "-0.1780", "1", "0.0", " "}, {"H170", "O169", "C174", "C183", "-0.0870", "2", "180.0", " "}, {"H170", "O169", "C174", "C183", "0.2460", "3", "0.0", " "}, {"H170", "O169", "C174", "C183", "0.0000", "4", "180.0", " "}, {"H170", "O169", "C174", "H176", "0.0000", "1", "0.0", " "}, {"H170", "O169", "C174", "H176", "0.0000", "2", "180.0", " "}, {"H170", "O169", "C174", "H176", "0.1760", "3", "0.0", " "}, {"H170", "O169", "C174", "H176", "0.0000", "4", "180.0", " "}, {"O154", "C157", "C183", "O186", "3.4095", "1", "0.0", " "}, {"O154", "C157", "C183", "O186", "-1.2500", "2", "180.0", " "}, {"O154", "C157", "C183", "O186", "0.5000", "3", "0.0", " "}, {"O154", "C157", "C183", "O186", "0.0000", "4", "180.0", " "}, {"H140", "C157", "C183", "O186", "0.0000", "1", "0.0", " "}, {"H140", "C157", "C183", "O186", "0.0000", "2", "180.0", " "}, {"H140", "C157", "C183", "O186", "0.2340", "3", "0.0", " "}, {"H140", "C157", "C183", "O186", "0.0000", "4", "180.0", " "}, {"H140", "C157", "C183", "C174", "0.0000", "1", "0.0", " "}, {"H140", "C157", "C183", "C174", "0.0000", "2", "180.0", " "}, {"H140", "C157", "C183", "C174", "0.1500", "3", "0.0", " "}, {"H140", "C157", "C183", "C174", "0.0000", "4", "180.0", " "}, {"O154", "C157", "C183", "H185", "0.0000", "1", "0.0", " "}, {"O154", "C157", "C183", "H185", "0.0000", "2", "180.0", " "}, {"O154", "C157", "C183", "H185", "0.2340", "3", "0.0", " "}, {"O154", "C157", "C183", "H185", "0.0000", "4", "180.0", " "}, {"H140", "C157", "C183", "H185", "0.0000", "1", "0.0", " "}, {"H140", "C157", "C183", "H185", "0.0000", "2", "180.0", " "}, {"H140", "C157", "C183", "H185", "0.1500", "3", "0.0", " "}, {"H140", "C157", "C183", "H185", "0.0000", "4", "180.0", " "}, {"N346", "C351", "C350", "C349", "0.0000", "1", "0.0", " "}, {"N346", "C351", "C350", "C349", "3.5000", "2", "180.0", " "}, {"N346", "C351", "C350", "C349", "0.0000", "3", "0.0", " "}, {"N346", "C351", "C350", "C349", "0.0000", "4", "180.0", " "}, {"N356", "C351", "C350", "N352", "0.0000", "1", "0.0", " "}, {"N356", "C351", "C350", "N352", "3.5000", "2", "180.0", " "}, {"N356", "C351", "C350", "N352", "0.0000", "3", "0.0", " "}, {"N356", "C351", "C350", "N352", "0.0000", "4", "180.0", " "}, {"N346", "C351", "C350", "N352", "0.0000", "1", "0.0", " "}, {"N346", "C351", "C350", "N352", "3.5000", "2", "180.0", " "}, {"N346", "C351", "C350", "N352", "0.0000", "3", "0.0", " "}, {"N346", "C351", "C350", "N352", "0.0000", "4", "180.0", " "}, {"C353", "N352", "C350", "C349", "0.0000", "1", "0.0", " "}, {"C353", "N352", "C350", "C349", "3.6250", "2", "180.0", " "}, {"C353", "N352", "C350", "C349", "0.0000", "3", "0.0", " "}, {"C353", "N352", "C350", "C349", "0.0000", "4", "180.0", " "}, {"C353", "N352", "C350", "C351", "0.0000", "1", "0.0", " "}, {"C353", "N352", "C350", "C351", "3.6250", "2", "180.0", " "}, {"C353", "N352", "C350", "C351", "0.0000", "3", "0.0", " "}, {"C353", "N352", "C350", "C351", "0.0000", "4", "180.0", " "}, {"N346", "C347", "N348", "C349", "0.0000", "1", "0.0", " "}, {"N346", "C347", "N348", "C349", "3.6250", "2", "180.0", " "}, {"N346", "C347", "N348", "C349", "0.0000", "3", "0.0", " "}, {"N346", "C347", "N348", "C349", "0.0000", "4", "180.0", " "}, {"H355", "C347", "N348", "C349", "0.0000", "1", "0.0", " "}, {"H355", "C347", "N348", "C349", "3.6250", "2", "180.0", " "}, {"H355", "C347", "N348", "C349", "0.0000", "3", "0.0", " "}, {"H355", "C347", "N348", "C349", "0.0000", "4", "180.0", " "}, {"H358", "N356", "C351", "C350", "0.0000", "1", "0.0", " "}, {"H358", "N356", "C351", "C350", "1.9500", "2", "180.0", " "}, {"H358", "N356", "C351", "C350", "0.0000", "3", "0.0", " "}, {"H358", "N356", "C351", "C350", "0.0000", "4", "180.0", " "}, {"H357", "N356", "C351", "N346", "0.0000", "1", "0.0", " "}, {"H357", "N356", "C351", "N346", "1.9500", "2", "180.0", " "}, {"H357", "N356", "C351", "N346", "0.0000", "3", "0.0", " "}, {"H357", "N356", "C351", "N346", "0.0000", "4", "180.0", " "}, {"H358", "N356", "C351", "N346", "0.0000", "1", "0.0", " "}, {"H358", "N356", "C351", "N346", "1.9500", "2", "180.0", " "}, {"H358", "N356", "C351", "N346", "0.0000", "3", "0.0", " "}, {"H358", "N356", "C351", "N346", "0.0000", "4", "180.0", " "}, {"C347", "N346", "C351", "N356", "0.0000", "1", "0.0", " "}, {"C347", "N346", "C351", "N356", "3.6250", "2", "180.0", " "}, {"C347", "N346", "C351", "N356", "0.0000", "3", "0.0", " "}, {"C347", "N346", "C351", "N356", "0.0000", "4", "180.0", " "}, {"N348", "C347", "N346", "C351", "0.0000", "1", "0.0", " "}, {"N348", "C347", "N346", "C351", "3.6250", "2", "180.0", " "}, {"N348", "C347", "N346", "C351", "0.0000", "3", "0.0", " "}, {"N348", "C347", "N346", "C351", "0.0000", "4", "180.0", " "}, {"C174", "C931", "N936", "C349", "-0.3500", "1", "0.0", " "}, {"C174", "C931", "N936", "C349", "-0.0500", "2", "180.0", " "}, {"C174", "C931", "N936", "C349", "0.3000", "3", "0.0", " "}, {"C174", "C931", "N936", "C349", "0.0000", "4", "180.0", " "}, {"C174", "C174", "C931", "N936", "1.1960", "1", "0.0", " "}, {"C174", "C174", "C931", "N936", "-0.3370", "2", "180.0", " "}, {"C174", "C174", "C931", "N936", "0.2750", "3", "0.0", " "}, {"C174", "C174", "C931", "N936", "0.0000", "4", "180.0", " "}, {"C183", "C174", "C174", "C931", "0.6500", "1", "0.0", " "}, {"C183", "C174", "C174", "C931", "-0.1000", "2", "180.0", " "}, {"C183", "C174", "C174", "C931", "0.1000", "3", "0.0", " "}, {"C183", "C174", "C174", "C931", "0.0000", "4", "180.0", " "}, {"C157", "C183", "C174", "C174", "0.6500", "1", "0.0", " "}, {"C157", "C183", "C174", "C174", "-0.1000", "2", "180.0", " "}, {"C157", "C183", "C174", "C174", "0.1000", "3", "0.0", " "}, {"C157", "C183", "C174", "C174", "0.0000", "4", "180.0", " "}, {"O154", "C157", "C183", "C174", "-1.0000", "1", "0.0", " "}, {"O154", "C157", "C183", "C174", "-0.1000", "2", "180.0", " "}, {"O154", "C157", "C183", "C174", "-0.2500", "3", "0.0", " "}, {"O154", "C157", "C183", "C174", "0.0000", "4", "180.0", " "}, {"H155", "O154", "C157", "C183", "1.3370", "1", "0.0", " "}, {"H155", "O154", "C157", "C183", "-1.4415", "2", "180.0", " "}, {"H155", "O154", "C157", "C183", "0.5130", "3", "0.0", " "}, {"H155", "O154", "C157", "C183", "0.0000", "4", "180.0", " "}, {"H170", "O169", "C174", "C174", "1.3370", "1", "0.0", " "}, {"H170", "O169", "C174", "C174", "-1.4415", "2", "180.0", " "}, {"H170", "O169", "C174", "C174", "0.5130", "3", "0.0", " "}, {"H170", "O169", "C174", "C174", "0.0000", "4", "180.0", " "}, {"H170", "O169", "C174", "C931", "1.3370", "1", "0.0", " "}, {"H170", "O169", "C174", "C931", "-1.4415", "2", "180.0", " "}, {"H170", "O169", "C174", "C931", "0.5130", "3", "0.0", " "}, {"H170", "O169", "C174", "C931", "0.0000", "4", "180.0", " "}, {"C350", "C349", "N936", "C931", "0.0000", "1", "0.0", " "}, {"C350", "C349", "N936", "C931", "2.5000", "2", "180.0", " "}, {"C350", "C349", "N936", "C931", "0.0000", "3", "0.0", " "}, {"C350", "C349", "N936", "C931", "0.0000", "4", "180.0", " "}, {"C351", "C350", "C349", "N936", "0.0000", "1", "0.0", " "}, {"C351", "C350", "C349", "N936", "3.6250", "2", "180.0", " "}, {"C351", "C350", "C349", "N936", "0.0000", "3", "0.0", " "}, {"C351", "C350", "C349", "N936", "0.0000", "4", "180.0", " "}, {"N356", "C351", "C350", "C349", "0.0000", "1", "0.0", " "}, {"N356", "C351", "C350", "C349", "3.5000", "2", "180.0", " "}, {"N356", "C351", "C350", "C349", "0.0000", "3", "0.0", " "}, {"N356", "C351", "C350", "C349", "0.0000", "4", "180.0", " "}, {"H357", "N356", "C351", "C350", "0.0000", "1", "0.0", " "}, {"H357", "N356", "C351", "C350", "1.9500", "2", "180.0", " "}, {"H357", "N356", "C351", "C350", "0.0000", "3", "0.0", " "}, {"H357", "N356", "C351", "C350", "0.0000", "4", "180.0", " "}, {"C347", "N346", "C351", "C350", "0.0000", "1", "0.0", " "}, {"C347", "N346", "C351", "C350", "3.6250", "2", "180.0", " "}, {"C347", "N346", "C351", "C350", "0.0000", "3", "0.0", " "}, {"C347", "N346", "C351", "C350", "0.0000", "4", "180.0", " "}}; /* Impropers */ char * OPLSAAR_impropers[131][8]= {{"C136", "C500", "C501", "C514", "1.1000", "2", "180.0", " "}, {"C136", "C500", "C514", "C501", "1.1000", "2", "180.0", " "}, {"C145", "C502", "C501", "N503", "1.1000", "2", "180.0", " "}, {"C145", "C502", "N503", "C501", "1.1000", "2", "180.0", " "}, {"C149", "C145", "C145", "C145", "1.1000", "2", "180.0", " "}, {"C245", "N238", "C235", "C285", "2.5000", "2", "180.0", " "}, {"C245", "N238", "C285", "C235", "2.5000", "2", "180.0", " "}, {"C245", "N239", "C235", "C246", "2.5000", "2", "180.0", " "}, {"C245", "N239", "C235", "C285", "2.5000", "2", "180.0", " "}, {"C245", "N239", "C246", "C235", "2.5000", "2", "180.0", " "}, {"C245", "N239", "C285", "C235", "2.5000", "2", "180.0", " "}, {"C502", "C501", "C145", "C500", "1.1000", "2", "180.0", " "}, {"C502", "C501", "C500", "C145", "1.1000", "2", "180.0", " "}, {"C505", "C507", "C508", "N511", "1.1000", "2", "180.0", " "}, {"C505", "C507", "N511", "C508", "1.1000", "2", "180.0", " "}, {"C505", "C508", "C507", "N503", "1.1000", "2", "180.0", " "}, {"C505", "C508", "N503", "C507", "1.1000", "2", "180.0", " "}, {"C505", "C510", "C510", "N512", "1.1000", "2", "180.0", " "}, {"C505", "C510", "N512", "C510", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C145", "C145", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C166", "C145", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C145", "C166", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C145", "C501", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C501", "C145", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C145", "C502", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C502", "C145", "1.1000", "2", "180.0", " "}, {"H146", "C506", "N503", "N511", "1.1000", "2", "180.0", " "}, {"H146", "C506", "N511", "N503", "1.1000", "2", "180.0", " "}, {"H146", "C507", "C508", "N511", "1.1000", "2", "180.0", " "}, {"H146", "C507", "N511", "C508", "1.1000", "2", "180.0", " "}, {"H146", "C508", "C507", "N503", "1.1000", "2", "180.0", " "}, {"H146", "C508", "N503", "C507", "1.1000", "2", "180.0", " "}, {"H146", "C509", "N512", "N512", "1.1000", "2", "180.0", " "}, {"H146", "C510", "C510", "N512", "1.1000", "2", "180.0", " "}, {"H146", "C510", "N512", "C510", "1.1000", "2", "180.0", " "}, {"H146", "C514", "C500", "N503", "1.1000", "2", "180.0", " "}, {"H146", "C514", "N503", "C500", "1.1000", "2", "180.0", " "}, {"H240", "N237", "C235", "H240", "2.5000", "2", "180.0", " "}, {"H240", "N237", "H240", "C235", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C223", "C235", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C224", "C235", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C235", "C223", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C235", "C224", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C235", "C242", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C235", "C283", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C235", "C284", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C242", "C235", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C283", "C235", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C284", "C235", "2.5000", "2", "180.0", " "}, {"H301", "N300", "C302", "H301", "2.5000", "2", "180.0", " "}, {"H301", "N300", "H301", "C302", "2.5000", "2", "180.0", " "}, {"H304", "N303", "C302", "C307", "2.5000", "2", "180.0", " "}, {"H304", "N303", "C307", "C302", "2.5000", "2", "180.0", " "}, {"H504", "N503", "C502", "C514", "2.5000", "2", "180.0", " "}, {"H504", "N503", "C506", "C508", "2.5000", "2", "180.0", " "}, {"H504", "N503", "C508", "C506", "2.5000", "2", "180.0", " "}, {"H504", "N503", "C514", "C502", "2.5000", "2", "180.0", " "}, {"H513", "N512", "C509", "C510", "2.5000", "2", "180.0", " "}, {"H513", "N512", "C510", "C509", "2.5000", "2", "180.0", " "}, {"N300", "C302", "N300", "N303", "10.5000", "2", "180.0", " "}, {"N300", "C302", "N303", "N300", "10.5000", "2", "180.0", " "}, {"O167", "C166", "C145", "C145", "1.1000", "2", "180.0", " "}, {"O236", "C235", "C135", "N239", "10.5", "2", "180.0", " "}, {"O236", "C235", "C135", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C136", "N237", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C223", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C223", "N239", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C224", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C224", "N239", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C246", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C246", "N239", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C292", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C293", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C293", "N239", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C295", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C295", "N239", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N237", "C136", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C135", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C223", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C224", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C246", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C292", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C293", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C295", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N239", "C135", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N239", "C223", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N239", "C224", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N239", "C246", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N239", "C293", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N239", "C295", "10.5000", "2", "180.0", " "}, {"O269", "C267", "C136", "O268", "10.5000", "2", "180.0", " "}, {"O269", "C267", "O268", "C136", "10.5000", "2", "180.0", " "}, {"O269", "C267", "C224", "O268", "10.5000", "2", "180.0", " "}, {"O269", "C267", "O268", "C224", "10.5000", "2", "180.0", " "}, {"O272", "C271", "C274", "O272", "10.5000", "2", "180.0", " "}, {"O272", "C271", "C283", "O272", "10.5000", "2", "180.0", " "}, {"O272", "C271", "C284", "O272", "10.5000", "2", "180.0", " "}, {"O272", "C271", "C285", "O272", "10.5000", "2", "180.0", " "}, {"O272", "C271", "O272", "C274", "10.5000", "2", "180.0", " "}, {"O272", "C271", "O272", "C283", "10.5000", "2", "180.0", " "}, {"O272", "C271", "O272", "C284", "10.5000", "2", "180.0", " "}, {"O272", "C271", "O272", "C285", "10.5000", "2", "180.0", " "}, {"O268", "C267", "C136", "O269", "10.5", "2", "180.0", " "}, {"O268", "C267", "C223", "O269", "10.5", "2", "180.0", "Gly"}, {"O268", "C267", "C224", "O269", "10.5", "2", "180.0", " "}, {"C320", "C933", "N938", "C324", "2.5000", "2", "180.0", " "}, {"C320", "N938", "N321", "O326", "2.5000", "2", "180.0", " "}, {"C322", "C320", "N321", "H327", "2.5000", "2", "180.0", " "}, {"C322", "N321", "C323", "O328", "2.5000", "2", "180.0", " "}, {"C324", "C322", "C323", "H329", "2.5000", "2", "180.0", " "}, {"C323", "N938", "C324", "H330", "2.5000", "2", "180.0", " "}, {"C338", "N937", "C932", "C334", "2.5000", "2", "180.0", " "}, {"N335", "N937", "C334", "O340", "2.5000", "2", "180.0", " "}, {"N341", "N335", "C336", "C337", "2.5000", "2", "180.0", " "}, {"H342", "C336", "N341", "H343", "2.5000", "2", "180.0", " "}, {"C338", "C336", "C337", "H344", "2.5000", "2", "180.0", " "}, {"C337", "N937", "C338", "H345", "2.5000", "2", "180.0", " "}, {"C364", "C365", "C366", "N352", "2.5000", "2", "180.0", " "}, {"N361", "N363", "C362", "N368", "2.5000", "2", "180.0", " "}, {"H369", "C362", "N368", "H369", "2.5000", "2", "180.0", " "}, {"C362", "H367", "N361", "C366", "2.5000", "2", "180.0", " "}, {"O370", "C365", "C366", "N361", "2.5000", "2", "180.0", " "}, {"N936", "N363", "C364", "C365", "2.5000", "2", "180.0", " "}, {"C353", "C931", "N936", "C364", "2.5000", "2", "180.0", " "}, {"H358", "N356", "C351", "H357", "2.5000", "2", "180.0", " "}, {"H355", "C347", "N346", "N348", "2.5000", "2", "180.0", " "}, {"N356", "C351", "C350", "N346", "2.5000", "2", "180.0", " "}, {"C351", "C350", "C349", "N352", "2.5000", "2", "180.0", " "}, {"N352", "N936", "C353", "H359", "2.5000", "2", "180.0", " "}, {"N348", "C349", "C350", "N936", "2.5000", "2", "180.0", " "}, {"C349", "N936", "C931", "C353", "2.5000", "2", "180.0", " "}}; /* Non-bonded */ char * OPLSAAR_vdw[145][7]= {{"C135", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C136", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C137", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C145", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C149", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C157", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C158", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C166", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C206", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C209", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C210", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C214", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C223", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C224", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C235", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"C242", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C245", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C246", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C267", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"C271", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"C274", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C283", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C284", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C285", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C292", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C293", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C295", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C296", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C302", "0.00", "-0.050000", "1.2627698", "0.00", "-0.025000", "1.2627698"}, {"C307", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C308", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C500", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C501", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C502", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C505", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C506", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C507", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C508", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C509", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C510", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C514", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"H140", "0.00", "-0.030000", "1.4030776", "0.00", "-0.015000", "1.4030776"}, {"H146", "0.00", "-0.030000", "1.3581791", "0.00", "-0.015000", "1.3581791"}, {"H155", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H168", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H204", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H240", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H241", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H270", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H290", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H301", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H304", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H310", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H504", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H513", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"N237", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N238", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N239", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N287", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N300", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N303", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N309", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N503", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N511", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N512", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"O154", "0.00", "-0.170000", "1.7510408", "0.00", "-0.085000", "1.7510408"}, {"O167", "0.00", "-0.170000", "1.7229792", "0.00", "-0.085000", "1.7229792"}, {"O236", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"O268", "0.00", "-0.170000", "1.6836931", "0.00", "-0.085000", "1.6836931"}, {"O269", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"O272", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"S200", "0.00", "-0.425000", "2.0204317", "0.00", "-0.212500", "2.0204317"}, {"S202", "0.00", "-0.355000", "2.0204317", "0.00", "-0.177500", "2.0204317"}, {"S203", "0.00", "-0.355000", "2.0204317", "0.00", "-0.177500", "2.0204317"}, {"OT", "0.00", "-0.152100", "1.768200", "0.00", "-0.152100", "1.768200"}, {"HT", "0.00", "-0.046000", "0.224500", "0.00", "-0.046000", "0.22450"}, {"SOD", "0.00", "-0.000500", "2.9969737", "0.00", "-0.000500", "2.9969737"}, {"CLA", "0.00", "-0.710000", "2.2561487", "0.00", "-0.710000", "2.2561487"}, {"MG", "0.00", "-0.857044", "0.9229261", "0.00", "-0.857044", "0.9229261"}, {"H329", "0.00", "-0.050000", "1.4030775", "0.00", "-0.025000", "1.4030775"}, {"C933", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"N938", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"C324", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"H330", "0.00", "-0.050000", "1.4030775", "0.00", "-0.025000", "1.4030775"}, {"C320", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"O326", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"N321", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"H327", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"C322", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"O328", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"C323", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"C932", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"N937", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N936", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"C338", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"H345", "0.00", "-0.050000", "1.4030775", "0.00", "-0.025000", "1.4030775"}, {"C337", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"H344", "0.00", "-0.050000", "1.4030775", "0.00", "-0.025000", "1.4030775"}, {"C334", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"O340", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"N335", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"C336", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"N341", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"H342", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"H343", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"C931", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C349", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"C353", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"C174", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"O186", "0.00", "-0.140000", "1.6275699", "0.00", "-0.070000", "1.6275699"}, {"H196", "0.00", "-0.030000", "1.4030775", "0.00", "-0.015000", "1.4030775"}, {"O169", "0.00", "-0.170000", "1.7229792", "0.00", "-0.085000", "1.7229792"}, {"H176", "0.00", "-0.030000", "1.4030775", "0.00", "-0.015000", "1.4030775"}, {"C183", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"H185", "0.00", "-0.030000", "1.4030775", "0.00", "-0.015000", "1.4030775"}, {"H170", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"C350", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"N348", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"C351", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"N352", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N356", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N346", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"H357", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"H358", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"C347", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"H355", "0.00", "-0.050000", "1.4030775", "0.00", "-0.025000", "1.4030775"}, {"H359", "0.00", "-0.050000", "1.4030775", "0.00", "-0.025000", "1.4030775"}, {"C6448", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"O6934", "0.00", "-0.140000", "1.6275700", "0.00", "-0.070000", "1.6275700"}, {"P440", "0.00", "-0.200000", "2.0990040", "0.00", "-0.100000", "2.0990040"}, {"O441", "0.00", "-0.200000", "1.7678777", "0.00", "-0.100000", "1.7678777"}, {"O6452", "0.00", "-0.140000", "1.6275700", "0.00", "-0.070000", "1.6275700"}, {"O6442", "0.00", "-0.140000", "1.6275700", "0.00", "-0.070000", "1.6275700"}, {"P6450", "0.00", "-0.200000", "2.0990040", "0.00", "-0.100000", "2.0990040"}, {"O6441", "0.00", "-0.200000", "1.7678777", "0.00", "-0.100000", "1.7678777"}, {"C364", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"N368", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"H369", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"N363", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"C362", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"N361", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"H367", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"C366", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"O370", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"C365", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}}; atomes_1.3.1/src/calc/force_fields/amber94.c0000664000175000017500000013135715212624223020243 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file amber94.c * @short Amber-94 force field, from 'parm94' * @author Sébastien Le Roux */ /* * This file: 'amber94.c' * * Contains: * Amber-94 force field, data from taken from: - the file: 'parm94' This file contains several tables: Atoms : amber94_atoms[55][4] Equi vdw : amber94_equi[2][12] Bonds : amber94_bonds[83][5] Angles : amber94_angles[191][6] Dihedrals : amber94_dihedrals[81][9] Impropers : amber94_impropers[31][8] Non bonded : amber94_vdw[34][4] */ #include "global.h" int amber94_objects[14] = {55, 2, 0, 83, 0, 0, 191, 0, 81, 0 , 0, 31, 34, 0}; int amber94_dim[14] = {4, 12, 0, 5, 0, 0, 6, 0, 9, 0, 0, 8, 4, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= Amber_94 info */ char * amber94_atoms[55][4]= {{"Br", "79.90", "BR", "! bromine"}, {"C", "12.01", "C", "sp2 C carbonyl group"}, {"C", "12.01", "CA", "sp2 C pure aromatic (benzene)"}, {"C", "12.01", "CB", "sp2 aromatic C, 5 and 6 membered ring junction"}, {"C", "12.01", "CC", "sp2 aromatic C, 5 memb. ring HIS"}, {"C", "12.01", "CK", "sp2 C 5 memb.ring in purines"}, {"C", "12.01", "CM", "sp2 C pyrimidines in pos. 5 and 6"}, {"C", "12.01", "CN", "sp2 C aromatic 5 and 6 memb.ring junct.(TRP)"}, {"C", "12.01", "CQ", "sp2 C in 5 mem.ring of purines between 2 N"}, {"C", "12.01", "CR", "sp2 arom as CQ but in HIS"}, {"C", "12.01", "CT", "sp3 aliphatic C"}, {"C", "12.01", "CV", "sp2 arom. 5 memb.ring w/1 N and 1 H (HIS)"}, {"C", "12.01", "CW", "sp2 arom. 5 memb.ring w/1 N-H and 1 H (HIS)"}, {"C", "12.01", "C*", "sp2 arom. 5 memb.ring w/1 subst. (TRP)"}, {"Ca", "40.08", "C0", "calcium"}, {"F", "19.00", "F", "fluorine"}, {"H", "1.008", "H", "H bonded to nitrogen atoms"}, {"H", "1.008", "HC", "H aliph. bond. to C without electrwd.group"}, {"H", "1.008", "H1", "H aliph. bond. to C with 1 electrwd. group"}, {"H", "1.008", "H2", "H aliph. bond. to C with 2 electrwd.groups"}, {"H", "1.008", "H3", "H aliph. bond. to C with 3 eletrwd.groups"}, {"H", "1.008", "HA", "H arom. bond. to C without elctrwd. groups"}, {"H", "1.008", "H4", "H arom. bond. to C with 1 electrwd. group"}, {"H", "1.008", "H5", "H arom. bond. to C with 2 electrwd. groups"}, {"H", "1.008", "HO", "hydroxyl group"}, {"H", "1.008", "HS", "hydrogen bonded to sulphur"}, {"H", "1.008", "HW", "H in TIP3P water"}, {"H", "1.008", "HP", "H bonded to C next to positively charged gr"}, {"I", "126.9", "I", "iodine"}, {"I", "35.45", "IM", "assumed to be Cl-"}, {"I", "22.99", "IP", "assumed to be Na+"}, {"I", "131.0", "IB", "'big ion w/ waters' for vacuum (Na+, 6H2O)"}, {"Mg", "24.305", "MG", "magnesium"}, {"N", "14.01", "N", "sp2 nitrogen in amide groups"}, {"N", "14.01", "NA", "sp2 N in 5 memb.ring w/H atom (HIS)"}, {"N", "14.01", "NB", "sp2 N in 5 memb.ring w/LP (HIS,ADE,GUA)"}, {"N", "14.01", "NC", "sp2 N in 6 memb.ring w/LP (ADE,GUA)"}, {"N", "14.01", "N2", "sp2 N in amino groups"}, {"N", "14.01", "N3", "sp3 N for charged amino groups (Lys, etc)"}, {"N", "14.01", "N*", "sp2 N"}, {"O", "16.00", "O", "carbonyl group oxygen"}, {"O", "16.00", "OW", "oxygen in TIP3P water"}, {"O", "16.00", "OH", "oxygen in hydroxyl group"}, {"O", "16.00", "OS", "ether and ester oxygen"}, {"O", "16.00", "O2", "carboxyl and phosphate group oxygen"}, {"P", "30.97", "P", "phosphate"}, {"S", "32.06", "S", "sulphur in disulfide linkage"}, {"S", "32.06", "SH", "sulphur in cystine"}, {"Cu", "63.55", "CU", "copper"}, {"Fe", "55.00", "FE", "iron"}, {"Li", "6.94", "Li", "lithium"}, {"K", "39.10", "K", "potassium"}, {"Rb", "85.47", "Rb", "rubidium"}, {"Cs", "132.91", "Cs", "cesium"}, {"EP", "3.0", "EP", "extra point (mass is ignored)"}}; /* Non-bonded equivalence 0= Key_a, then equi with Key_a */ char * amber94_equi[2][12]= {{"N", "NA", "N2", "N*", "NC", "NB", " ", " ", " ", " ", " ", " "}, {"C", "C*", "CA", "CB", "CC", "CN", "CM", "CK", "CQ", "CW", "CV", "CR"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= Kb (kcal mol^-1 A^2), 3= R0 (A), 4= amber94 info V(R) = Kb x (R - R0)^2 */ char * amber94_bonds[83][5]= {{"OW", "HW", "553.0", "0.9572", "TIP3P water"}, {"HW", "HW", "553.0", "1.5136", "TIP3P water"}, {"C", "CA", "469.0", "1.409", "JCC,7,(1986),230; TYR"}, {"C", "CB", "447.0", "1.419", "JCC,7,(1986),230; GUA"}, {"C", "CM", "410.0", "1.444", "JCC,7,(1986),230; THY,URA"}, {"C", "CT", "317.0", "1.522", "JCC,7,(1986),230; AA"}, {"C", "N*", "424.0", "1.383", "JCC,7,(1986),230; CYT,URA"}, {"C", "NA", "418.0", "1.388", "JCC,7,(1986),230; GUA.URA"}, {"C", "NC", "457.0", "1.358", "JCC,7,(1986),230; CYT"}, {"C", "O", "570.0", "1.229", "JCC,7,(1986),230; AA,CYT,GUA,THY,URA"}, {"C", "O2", "656.0", "1.250", "JCC,7,(1986),230; GLU,ASP"}, {"C", "OH", "450.0", "1.364", "JCC,7,(1986),230; TYR"}, {"CA", "CA", "469.0", "1.400", "JCC,7,(1986),230; BENZENE,PHE,TRP,TYR"}, {"CA", "CB", "469.0", "1.404", "JCC,7,(1986),230; ADE,TRP"}, {"CA", "CM", "427.0", "1.433", "JCC,7,(1986),230; CYT"}, {"CA", "CT", "317.0", "1.510", "JCC,7,(1986),230; PHE,TYR"}, {"CA", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; PHE,TRP,TYR"}, {"CA", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; no assigned"}, {"CA", "N2", "481.0", "1.340", "JCC,7,(1986),230; ARG,CYT,GUA"}, {"CA", "NA", "427.0", "1.381", "JCC,7,(1986),230; GUA"}, {"CA", "NC", "483.0", "1.339", "JCC,7,(1986),230; ADE,CYT,GUA"}, {"CB", "CB", "520.0", "1.370", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "N*", "436.0", "1.374", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NB", "414.0", "1.391", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NC", "461.0", "1.354", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE,GUA"}, {"CK", "N*", "440.0", "1.371", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "NB", "529.0", "1.304", "JCC,7,(1986),230; ADE,GUA"}, {"CM", "CM", "549.0", "1.350", "JCC,7,(1986),230; CYT,THY,URA"}, {"CM", "CT", "317.0", "1.510", "JCC,7,(1986),230; THY"}, {"CM", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; not assigned"}, {"CM", "N*", "448.0", "1.365", "JCC,7,(1986),230; CYT,THY,URA"}, {"CQ", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE"}, {"CQ", "NC", "502.0", "1.324", "JCC,7,(1986),230; ADE"}, {"CT", "CT", "310.0", "1.526", "JCC,7,(1986),230; AA, SUGARS"}, {"CT", "HC", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, SUGARS"}, {"CT", "H1", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, RIBOSE"}, {"CT", "H2", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; SUGARS"}, {"CT", "H3", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; not assigned"}, {"CT", "HP", "340.0", "1.090", "changed from 331; AA-lysine, methyl ammonium cation"}, {"CT", "N*", "337.0", "1.475", "JCC,7,(1986),230; ADE,CYT,GUA,THY,URA"}, {"CT", "N2", "337.0", "1.463", "JCC,7,(1986),230; ARG"}, {"CT", "OH", "320.0", "1.410", "JCC,7,(1986),230; SUGARS"}, {"CT", "OS", "320.0", "1.410", "JCC,7,(1986),230; NUCLEIC ACIDS"}, {"H", "N2", "434.0", "1.010", "JCC,7,(1986),230; ADE,CYT,GUA,ARG"}, {"H", "N*", "434.0", "1.010", "for plain unmethylated bases ADE,CYT,GUA,ARG"}, {"H", "NA", "434.0", "1.010", "JCC,7,(1986),230; GUA,URA,HIS"}, {"HO", "OH", "553.0", "0.960", "JCC,7,(1986),230; SUGARS,SER,TYR"}, {"HO", "OS", "553.0", "0.960", "JCC,7,(1986),230; NUCLEOTIDE ENDS"}, {"O2", "P", "525.0", "1.480", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OH", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OS", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"C*", "HC", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes, not needed AA"}, {"C", "N", "490.0", "1.335", "JCC,7,(1986),230; AA"}, {"C*", "CB", "388.0", "1.459", "JCC,7,(1986),230; TRP"}, {"C*", "CT", "317.0", "1.495", "JCC,7,(1986),230; TRP"}, {"C*", "CW", "546.0", "1.352", "JCC,7,(1986),230; TRP"}, {"CA", "CN", "469.0", "1.400", "JCC,7,(1986),230; TRP"}, {"CB", "CN", "447.0", "1.419", "JCC,7,(1986),230; TRP"}, {"CC", "CT", "317.0", "1.504", "JCC,7,(1986),230; HIS"}, {"CC", "CV", "512.0", "1.375", "JCC,7,(1986),230; HIS(delta)"}, {"CC", "CW", "518.0", "1.371", "JCC,7,(1986),230; HIS(epsilon)"}, {"CC", "NA", "422.0", "1.385", "JCC,7,(1986),230; HIS"}, {"CC", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CN", "NA", "428.0", "1.380", "JCC,7,(1986),230; TRP"}, {"CR", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS"}, {"CR", "NA", "477.0", "1.343", "JCC,7,(1986),230; HIS"}, {"CR", "NB", "488.0", "1.335", "JCC,7,(1986),230; HIS"}, {"CT", "N", "337.0", "1.449", "JCC,7,(1986),230; AA"}, {"CT", "N3", "367.0", "1.471", "JCC,7,(1986),230; LYS"}, {"CT", "S", "227.0", "1.810", "changed from 222.0 based on dimethylS nmodes"}, {"CT", "SH", "237.0", "1.810", "changed from 222.0 based on methanethiol nmodes"}, {"CV", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; HIS"}, {"CV", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CW", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS(epsilon,+)"}, {"CW", "NA", "427.0", "1.381", "JCC,7,(1986),230; HIS,TRP"}, {"H", "N", "434.0", "1.010", "JCC,7,(1986),230; AA"}, {"H", "N3", "434.0", "1.010", "JCC,7,(1986),230; LYS"}, {"HS", "SH", "274.0", "1.336", "JCC,7,(1986),230; CYS"}, {"S", "S", "166.0", "2.038", "JCC,7,(1986),230; CYX (SCHERAGA)"}, {"CT", "F", "367.0", "1.380", "JCC,13,(1992),963;CF4; R0=1.332 FOR CHF3"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 */ char * amber94_angles[191][6]= {{"HW", "OW", "HW", "100.", "104.52", "TIP3P water"}, {"HW", "HW", "OW", "0.", "127.74", "(found in crystallographic water with 3 bonds)"}, {"CB", "C", "NA", "70.0", "111.30", "NA"}, {"CB", "C", "O", "80.0", "128.80", " "}, {"CM", "C", "NA", "70.0", "114.10", " "}, {"CM", "C", "O", "80.0", "125.30", " "}, {"CT", "C", "O", "80.0", "120.40", " "}, {"CT", "C", "O2", "70.0", "117.00", " "}, {"CT", "C", "OH", "70.0", "117.00", " "}, {"N*", "C", "NA", "70.0", "115.40", " "}, {"N*", "C", "NC", "70.0", "118.60", " "}, {"N*", "C", "O", "80.0", "120.90", " "}, {"NA", "C", "O", "80.0", "120.60", " "}, {"NC", "C", "O", "80.0", "122.50", " "}, {"CT", "C", "N", "70.0", "116.60", "AA general"}, {"N", "C", "O", "80.0", "122.90", "AA general"}, {"O", "C", "O", "80.0", "126.00", "AA COO- terminal residues"}, {"O2", "C", "O2", "80.0", "126.00", "AA GLU (SCH JPC 79,2379)"}, {"O", "C", "OH", "80.0", "126.00", " "}, {"CA", "C", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA tyr"}, {"CA", "C", "OH", "70.0", "120.00", "AA tyr"}, {"C", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CB", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CT", "70.0", "120.00", " "}, {"CA", "CA", "HA", "35.0", "120.00", " "}, {"CA", "CA", "H4", "35.0", "120.00", " "}, {"CB", "CA", "HA", "35.0", "120.00", " "}, {"CB", "CA", "H4", "35.0", "120.00", " "}, {"CB", "CA", "N2", "70.0", "123.50", " "}, {"CB", "CA", "NC", "70.0", "117.30", " "}, {"CM", "CA", "N2", "70.0", "120.10", " "}, {"CM", "CA", "NC", "70.0", "121.50", " "}, {"N2", "CA", "NA", "70.0", "116.00", " "}, {"N2", "CA", "NC", "70.0", "119.30", " "}, {"NA", "CA", "NC", "70.0", "123.30", " "}, {"C", "CA", "HA", "35.0", "120.00", "AA tyr"}, {"N2", "CA", "N2", "70.0", "120.00", "AA arg"}, {"CN", "CA", "HA", "35.0", "120.00", "AA trp"}, {"CA", "CA", "CN", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C", "CB", "CB", "63.0", "119.20", "changed from 85.0 bsd on C6H6 nmodes; NA gua"}, {"C", "CB", "NB", "70.0", "130.00", " "}, {"CA", "CB", "CB", "63.0", "117.30", "changed from 85.0 bsd on C6H6 nmodes; NA ade"}, {"CA", "CB", "NB", "70.0", "132.40", " "}, {"CB", "CB", "N*", "70.0", "106.20", " "}, {"CB", "CB", "NB", "70.0", "110.40", " "}, {"CB", "CB", "NC", "70.0", "127.70", " "}, {"N*", "CB", "NC", "70.0", "126.20", " "}, {"C*", "CB", "CA", "63.0", "134.90", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C*", "CB", "CN", "63.0", "108.80", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CB", "CN", "63.0", "116.20", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"H5", "CK", "N*", "35.0", "123.05", " "}, {"H5", "CK", "NB", "35.0", "123.05", " "}, {"N*", "CK", "NB", "70.0", "113.90", " "}, {"C", "CM", "CM", "63.0", "120.70", "changed from 85.0 bsd on C6H6 nmodes; NA thy"}, {"C", "CM", "CT", "70.0", "119.70", " "}, {"C", "CM", "HA", "35.0", "119.70", " "}, {"C", "CM", "H4", "35.0", "119.70", " "}, {"CA", "CM", "CM", "63.0", "117.00", "changed from 85.0 bsd on C6H6 nmodes; NA cyt"}, {"CA", "CM", "HA", "35.0", "123.30", " "}, {"CA", "CM", "H4", "35.0", "123.30", " "}, {"CM", "CM", "CT", "70.0", "119.70", " "}, {"CM", "CM", "HA", "35.0", "119.70", " "}, {"CM", "CM", "H4", "35.0", "119.70", " "}, {"CM", "CM", "N*", "70.0", "121.20", " "}, {"H4", "CM", "N*", "35.0", "119.10", " "}, {"H5", "CQ", "NC", "35.0", "115.45", " "}, {"NC", "CQ", "NC", "70.0", "129.10", " "}, {"CM", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "CT", "40.0", "109.50", " "}, {"CT", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H1", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H2", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "HP", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "N*", "50.0", "109.50", " "}, {"CT", "CT", "OH", "50.0", "109.50", " "}, {"CT", "CT", "OS", "50.0", "109.50", " "}, {"HC", "CT", "HC", "35.0", "109.50", " "}, {"H1", "CT", "H1", "35.0", "109.50", " "}, {"HP", "CT", "HP", "35.0", "109.50", "AA lys, ch3nh4+"}, {"H2", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OH", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"H2", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"N*", "CT", "OS", "50.0", "109.50", " "}, {"H1", "CT", "N", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "H1", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "HP", "50.0", "109.50", "AA zwitterion changed based on NMA nmodes"}, {"H1", "CT", "S", "50.0", "109.50", "AA cys changed based on NMA nmodes"}, {"H1", "CT", "SH", "50.0", "109.50", "AA cyx changed based on NMA nmodes"}, {"CT", "CT", "S", "50.0", "114.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "CT", "SH", "50.0", "108.60", "AA cys"}, {"H2", "CT", "H2", "35.0", "109.50", "AA lys"}, {"H1", "CT", "N2", "50.0", "109.50", "AA arg changed based on NMA nmodes"}, {"HP", "CT", "N3", "50.0", "109.50", "AA lys, ch3nh3+, changed based on NMA nmodes"}, {"CA", "CT", "CT", "63.0", "114.00", "AA phe tyr (SCH JPC 79,2379)"}, {"C", "CT", "HC", "50.0", "109.50", "AA gln changed based on NMA nmodes"}, {"C", "CT", "N", "63.0", "110.10", "AA general"}, {"CT", "CT", "N2", "80.0", "111.20", "AA arg (JCP 76, 1439)"}, {"CT", "CT", "N", "80.0", "109.70", "AA ala, general (JACS 94, 2657)"}, {"C", "CT", "CT", "63.0", "111.10", "AA general"}, {"CA", "CT", "HC", "50.0", "109.50", "AA tyr changed based on NMA nmodes"}, {"CT", "CT", "N3", "80.0", "111.20", "AA lys (JCP 76, 1439)"}, {"CC", "CT", "CT", "63.0", "113.10", "AA his"}, {"CC", "CT", "HC", "50.0", "109.50", "AA his changed based on NMA nmodes"}, {"C", "CT", "N3", "80.0", "111.20", "AA amino terminal residues"}, {"C*", "CT", "CT", "63.0", "115.60", "AA trp"}, {"C*", "CT", "HC", "50.0", "109.50", "AA trp changed based on NMA nmodes"}, {"CT", "CC", "NA", "70.0", "120.00", "AA his"}, {"CT", "CC", "CV", "70.0", "120.00", "AA his"}, {"CT", "CC", "NB", "70.0", "120.00", "AA his"}, {"CV", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NB", "70.0", "120.00", "AA his"}, {"CT", "CC", "CW", "70.0", "120.00", "AA his"}, {"H5", "CR", "NA", "35.0", "120.00", "AA his"}, {"H5", "CR", "NB", "35.0", "120.00", "AA his"}, {"NA", "CR", "NA", "70.0", "120.00", "AA his"}, {"NA", "CR", "NB", "70.0", "120.00", "AA his"}, {"CC", "CV", "H4", "35.0", "120.00", "AA his"}, {"CC", "CV", "NB", "70.0", "120.00", "AA his"}, {"H4", "CV", "NB", "35.0", "120.00", "AA his"}, {"CC", "CW", "H4", "35.0", "120.00", "AA his"}, {"CC", "CW", "NA", "70.0", "120.00", "AA his"}, {"H4", "CW", "NA", "35.0", "120.00", "AA his"}, {"C*", "CW", "H4", "35.0", "120.00", "AA trp"}, {"C*", "CW", "NA", "70.0", "108.70", "AA trp"}, {"CT", "C*", "CW", "70.0", "125.00", "AA trp"}, {"CB", "C*", "CT", "70.0", "128.60", "AA trp"}, {"CB", "C*", "CW", "63.0", "106.40", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CN", "NA", "70.0", "132.80", "AA trp"}, {"CB", "CN", "NA", "70.0", "104.40", "AA trp"}, {"CA", "CN", "CB", "63.0", "122.70", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C", "N", "CT", "50.0", "121.90", "AA general"}, {"C", "N", "H", "30.0", "120.00", "AA general, gln, asn,changed based on NMA nmodes"}, {"CT", "N", "H", "30.0", "118.04", "AA general, changed based on NMA nmodes"}, {"CT", "N", "CT", "50.0", "118.00", "AA pro (DETAR JACS 99,1232)"}, {"H", "N", "H", "35.0", "120.00", "ade,cyt,gua,gln,asn **"}, {"C", "N*", "CM", "70.0", "121.60", " "}, {"C", "N*", "CT", "70.0", "117.60", " "}, {"C", "N*", "H", "30.0", "119.20", "changed based on NMA nmodes"}, {"CB", "N*", "CK", "70.0", "105.40", " "}, {"CB", "N*", "CT", "70.0", "125.80", " "}, {"CB", "N*", "H", "30.0", "125.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CK", "N*", "CT", "70.0", "128.80", " "}, {"CK", "N*", "H", "30.0", "128.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CM", "N*", "CT", "70.0", "121.20", " "}, {"CM", "N*", "H", "30.0", "121.20", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CA", "N2", "H", "35.0", "120.00", " "}, {"H", "N2", "H", "35.0", "120.00", " "}, {"CT", "N2", "H", "35.0", "118.40", "AA arg"}, {"CA", "N2", "CT", "50.0", "123.20", "AA arg"}, {"CT", "N3", "H", "50.0", "109.50", "AA lys, changed based on NMA nmodes"}, {"CT", "N3", "CT", "50.0", "109.50", "AA pro/nt"}, {"H", "N3", "H", "35.0", "109.50", "AA lys, AA(end)"}, {"C", "NA", "C", "70.0", "126.40", " "}, {"C", "NA", "CA", "70.0", "125.20", " "}, {"C", "NA", "H", "30.0", "116.80", "changed based on NMA nmodes"}, {"CA", "NA", "H", "30.0", "118.00", "changed based on NMA nmodes"}, {"CC", "NA", "CR", "70.0", "120.00", "AA his"}, {"CC", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CR", "NA", "CW", "70.0", "120.00", "AA his"}, {"CR", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CW", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CN", "NA", "CW", "70.0", "111.60", "AA trp"}, {"CN", "NA", "H", "30.0", "123.10", "AA trp, changed based on NMA nmodes"}, {"CB", "NB", "CK", "70.0", "103.80", " "}, {"CC", "NB", "CR", "70.0", "117.00", "AA his"}, {"CR", "NB", "CV", "70.0", "117.00", "AA his"}, {"C", "NC", "CA", "70.0", "120.50", " "}, {"CA", "NC", "CB", "70.0", "112.20", " "}, {"CA", "NC", "CQ", "70.0", "118.60", " "}, {"CB", "NC", "CQ", "70.0", "111.00", " "}, {"C", "OH", "HO", "35.0", "113.00", " "}, {"CT", "OH", "HO", "55.0", "108.50", " "}, {"HO", "OH", "P", "45.0", "108.50", " "}, {"CT", "OS", "CT", "60.0", "109.50", " "}, {"CT", "OS", "P", "100.0", "120.50", " "}, {"P", "OS", "P", "100.0", "120.50", " "}, {"O2", "P", "OH", "45.0", "108.23", " "}, {"O2", "P", "O2", "140.0", "119.90", " "}, {"O2", "P", "OS", "100.0", "108.23", " "}, {"OH", "P", "OS", "45.0", "102.60", " "}, {"OS", "P", "OS", "45.0", "102.60", " "}, {"CT", "S", "CT", "62.0", "98.90", "AA met"}, {"CT", "S", "S", "68.0", "103.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "SH", "HS", "43.0", "96.00", "changed from 44.0 based on methanethiol nmodes"}, {"HS", "SH", "HS", "35.0", "92.07", "AA cys"}, {"F", "CT", "F", "77.0", "109.10", "JCC,13,(1992),963;"}, {"F", "CT", "H1", "35.0", "109.50", "JCC,13,(1992),963;"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= delta (deg), 6= n (multi), 7= amber94 info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * amber94_dihedrals[81][9]= {{"X", "C", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CB", "X", "4", "12.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CM", "X", "4", "8.70", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "N*", "X", "4", "5.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NA", "X", "4", "5.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NC", "X", "2", "8.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "OH", "X", "2", "1.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "CT", "X", "4", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CB", "X", "4", "14.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CM", "X", "4", "10.20", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "N2", "X", "4", "9.60", "180.0", "2.", "reinterpolated 93'"}, {"X", "CA", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "NC", "X", "2", "9.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "CB", "X", "4", "21.80", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CB", "N*", "X", "4", "6.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NB", "X", "2", "5.10", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NC", "X", "2", "8.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "N*", "X", "4", "6.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "NB", "X", "2", "20.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CM", "CM", "X", "4", "26.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CM", "CT", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CM", "N*", "X", "4", "7.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CQ", "NC", "X", "2", "13.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "CT", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "N", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N*", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N2", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OH", "X", "3", "0.50", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OS", "X", "3", "1.15", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OH", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OS", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C", "N", "X", "4", "10.00", "180.0", "2.", "AA|check Wendy? and NMA"}, {"X", "CT", "N3", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "S", "X", "3", "1.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "SH", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C*", "CB", "X", "4", "6.70", "180.0", "2.", "intrpol.bsd.onC6H6aa"}, {"X", "C*", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "C*", "CW", "X", "4", "26.10", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CN", "X", "4", "14.50", "180.0", "2.", "reinterpolated 93'"}, {"X", "CB", "CN", "X", "4", "12.00", "180.0", "2.", "reinterpolated 93'"}, {"X", "CC", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "CV", "X", "4", "20.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "CW", "X", "4", "21.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "NA", "X", "4", "5.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CN", "NA", "X", "4", "6.10", "180.0", "2.", "reinterpolated 93'"}, {"X", "CR", "NA", "X", "4", "9.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CR", "NB", "X", "2", "10.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CV", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CW", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"CT", "CT", "OS", "CT", "1", "0.383", "0.0", "-3.", " "}, {"CT", "CT", "OS", "CT", "1", "0.1", "180.0", "2.", " "}, {"C", "N", "CT", "C", "1", "0.20", "180.0", "2.", " "}, {"N", "CT", "C", "N", "1", "0.40", "180.0", "-4.", " "}, {"N", "CT", "C", "N", "1", "1.35", "180.0", "-2.", " "}, {"N", "CT", "C", "N", "1", "0.75", "180.0", "1.", " "}, {"CT", "CT", "N", "C", "1", "0.50", "180.0", "-4.", " "}, {"CT", "CT", "N", "C", "1", "0.15", "180.0", "-3.", " "}, {"CT", "CT", "N", "C", "1", "0.53", "0.0", "1.", " "}, {"CT", "CT", "C", "N", "1", "0.100", "0.0", "-4.", " "}, {"CT", "CT", "C", "N", "1", "0.07", "0.0", "2.", " "}, {"H", "N", "C", "O", "1", "2.50", "180.0", "-2.", "JCC,7,(1986),230"}, {"H", "N", "C", "O", "1", "2.00", "0.0", "1.", "J.C.cistrans-NMA DE"}, {"CT", "S", "S", "CT", "1", "3.50", "0.0", "-2.", "JCC,7,(1986),230"}, {"CT", "S", "S", "CT", "1", "0.60", "0.0", "3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OS", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OS", "1", "1.00", "0.0", "2.", "pucker anal (93')"}, {"OS", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OH", "1", "1.00", "0.0", "2.", "pucker anal (93')"}, {"OH", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "CT", "CT", "OH", "1", "1.00", "0.0", "2.", "check glicolWC? puc"}, {"OH", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "CT", "N*", "CK", "1", "0.50", "180.0", "-2.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CK", "1", "2.50", "0.0", "1.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CM", "1", "0.50", "180.0", "-2.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CM", "1", "2.50", "0.0", "1.", "sugar frag calc (PC)"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= n (multi), 7= amber94 info V(psi) = Kpsi x (psi - psi0)^2 */ char * amber94_impropers[31][8]= {{"X", "X", "C", "O", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "O2", "C", "O2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N2", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "NA", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "N2", "CA", "N2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N", "CT", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "CA", "HA", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CW", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CR", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CV", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CQ", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CK", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "HA", "1.1", "180.", "2.", " "}, {"X", "X", "CA", "H4", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CA", "H5", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"CB", "CK", "N*", "CT", "1.0", "180.", "2.", " "}, {"C", "CM", "N*", "CT", "1.0", "180.", "2.", "dac guess, 9/94"}, {"C", "CM", "CM", "CT", "1.1", "180.", "2.", " "}, {"CT", "O", "C", "OH", "10.5", "180.", "2.", " "}, {"CT", "CV", "CC", "NA", "1.1", "180.", "2.", " "}, {"CT", "CW", "CC", "NB", "1.1", "180.", "2.", " "}, {"CT", "CW", "CC", "NA", "1.1", "180.", "2.", " "}, {"CB", "CT", "C*", "CW", "1.1", "180.", "2.", " "}, {"CA", "CA", "CA", "CT", "1.1", "180.", "2.", " "}, {"C", "CM", "CM", "CT", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CM", "N2", "CA", "NC", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CB", "N2", "CA", "NC", "1.1", "180.", "2.", "dac, 10/94"}, {"N2", "NA", "CA", "NC", "1.1", "180.", "2.", "dac, 10/94"}, {"CA", "CA", "C", "OH", "1.1", "180.", "2.", " "}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= amber94 info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * amber94_vdw[34][4]= {{"H", "0.6000", "0.0157", "!Ferguson base pair geom."}, {"HO", "0.0000", "0.0000", "OPLS Jorgensen, JACS,110,(1988),1657"}, {"HS", "0.6000", "0.0157", "W. Cornell CH3SH --> CH3OH FEP"}, {"HC", "1.4870", "0.0157", "OPLS"}, {"H1", "1.3870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H2", "1.2870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H3", "1.1870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HP", "1.1000", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HA", "1.4590", "0.0150", "Spellmeyer"}, {"H4", "1.4090", "0.0150", "Spellmeyer, one electrowithdr. neighbor"}, {"H5", "1.3590", "0.0150", "Spellmeyer, two electrowithdr. neighbor"}, {"HW", "0.0000", "0.0000", "TIP3P water model"}, {"O", "1.6612", "0.2100", "OPLS"}, {"O2", "1.6612", "0.2100", "OPLS"}, {"OW", "1.7682", "0.1521", "TIP3P water model"}, {"OH", "1.7210", "0.2104", "OPLS"}, {"OS", "1.6837", "0.1700", "OPLS ether"}, {"CT", "1.9080", "0.1094", "Spellmeyer"}, {"C", "1.9080", "0.0860", "OPLS"}, {"N", "1.8240", "0.1700", "OPLS"}, {"N3", "1.8240", "0.1700", "OPLS"}, {"S", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"SH", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"P", "2.1000", "0.2000", "JCC,7,(1986),230;"}, {"IM", "2.47", "0.1", "Cl- Smith and Dang, JCP 1994,100:5,3757"}, {"Li", "1.1370", "0.0183", "Li+ Aqvist JPC 1990,94,8021. (adapted)"}, {"IP", "1.8680", "0.00277", "Na+ Aqvist JPC 1990,94,8021. (adapted)"}, {"K", "2.6580", "0.000328", "K+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Rb", "2.9560", "0.00017", "Rb+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Cs", "3.3950", "0.0000806", "Cs+ Aqvist JPC 1990,94,8021. (adapted)"}, {"I", "2.35", "0.40", "JCC,7,(1986),230;"}, {"F", "1.75", "0.061", "Gough et al. JCC 13,(1992),963."}, {"IB", "5.0", "0.1", "solvated ion for vacuum approximation"}, {"EP", "0.0", "0.0", "generic extra point"}}; atomes_1.3.1/src/calc/force_fields/amber99.c0000664000175000017500000020533515212624223020246 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file amber99.c * @short Amber-99 force field, from 'parm99' * @author Sébastien Le Roux */ /* * This file: 'amber99.c' * * Contains: * Amber-99 force field, data from taken from: - the file: 'parm99' This file contains several tables: Atoms : amber99_atoms[64][5] Equi vdw : amber99_equi[2][15] Bonds : amber99_bonds[116][5] Angles : amber99_angles[281][6] Dihedrals : amber99_dihedrals[164][9] Impropers : amber99_impropers[38][8] Non bonded : amber99_vdw[42][4] */ #include "global.h" int amber99_objects[14] = {64, 2, 0, 116, 0, 0, 281, 0, 164, 0 , 0, 38, 42, 0}; int amber99_dim[14] = {5, 15, 0, 5, 0, 0, 6, 0, 9, 0, 0, 8, 4, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= Amber_99 info */ char * amber99_atoms[64][5]= {{"C", "12.01", "C", "! sp2 C carbonyl group", "0.616"}, {"C", "12.01", "CA", "sp2 C pure aromatic (benzene)", "0.360"}, {"C", "12.01", "CB", "sp2 aromatic C, 5 and 6 membered ring junction", "0.360"}, {"C", "12.01", "CC", "sp2 aromatic C, 5 memb. ring HIS", "0.360"}, {"C", "12.01", "CD", "sp2 C atom in the middle of: C=CD-CD=C", "0.360"}, {"C", "12.01", "CK", "sp2 C 5 memb.ring in purines", "0.360"}, {"C", "12.01", "CM", "sp2 C pyrimidines in pos. 5 and 6", "0.360"}, {"C", "12.01", "CN", "sp2 C aromatic 5 and 6 memb.ring junct.(TRP)", "0.360"}, {"C", "12.01", "CQ", "sp2 C in 5 mem.ring of purines between 2 N", "0.360"}, {"C", "12.01", "CR", "sp2 arom as CQ but in HIS", "0.360"}, {"C", "12.01", "CT", "sp3 aliphatic C", "0.878"}, {"C", "12.01", "CV", "sp2 arom. 5 memb.ring w/1 N and 1 H (HIS)", "0.360"}, {"C", "12.01", "CW", "sp2 arom. 5 memb.ring w/1 N-H and 1 H (HIS)", "0.360"}, {"C", "12.01", "C*", "sp2 arom. 5 memb.ring w/1 subst. (TRP)", "0.360"}, {"C", "12.01", "CY", "nitrile C (Howard et al.JCC,16,243,1995)", "0.360"}, {"C", "12.01", "CZ", "sp C (Howard et al.JCC,16,243,1995)", "0.360"}, {"Ca", "40.08", "C0", "calcium"}, {"H", "1.008", "H", "H bonded to nitrogen atoms", "0.161"}, {"H", "1.008", "HC", "H aliph. bond. to C without electrwd.group", "0.135"}, {"H", "1.008", "H1", "H aliph. bond. to C with 1 electrwd. group", "0.135"}, {"H", "1.008", "H2", "H aliph. bond. to C with 2 electrwd.groups", "0.135"}, {"H", "1.008", "H3", "H aliph. bond. to C with 3 eletrwd.groups", "0.135"}, {"H", "1.008", "HA", "H arom. bond. to C without elctrwd. groups", "0.167"}, {"H", "1.008", "H4", "H arom. bond. to C with 1 electrwd. group", "0.167"}, {"H", "1.008", "H5", "H arom.at C with 2 elctrwd. gr,+HCOO group", "0.167"}, {"H", "1.008", "HO", "hydroxyl group", "0.135"}, {"H", "1.008", "HS", "hydrogen bonded to sulphur (pol?)", "0.135"}, {"H", "1.008", "HW", "H in TIP3P water", "0.000"}, {"H", "1.008", "HP", "H bonded to C next to positively charged gr", "0.135"}, {"H", "1.008", "HZ", "H bond sp C (Howard et al.JCC,16,243,1995)", "0.161"}, {"F", "19.00", "F", "fluorine", "0.320"}, {"Cl", "35.45", "Cl", "chlorine (Applequist)", "1.910"}, {"Br", "79.90", "Br", "bromine (Applequist)", "2.880"}, {"I", "126.9", "I", "iodine (Applequist)", "4.690"}, {"I", "35.45", "IM", "assumed to be Cl- (ion minus)", "3.235"}, {"I", "131.0", "IB", "ion w/ waters' for vacuum (Na+, 6H2O)", "'big"}, {"Mg", "24.305", "MG", "magnesium", "0.120"}, {"N", "14.01", "N", "sp2 nitrogen in amide groups", "0.530"}, {"N", "14.01", "NA", "sp2 N in 5 memb.ring w/H atom (HIS)", "0.530"}, {"N", "14.01", "NB", "sp2 N in 5 memb.ring w/LP (HIS,ADE,GUA)", "0.530"}, {"N", "14.01", "NC", "sp2 N in 6 memb.ring w/LP (ADE,GUA)", "0.530"}, {"N", "14.01", "N2", "sp2 N in amino groups", "0.530"}, {"N", "14.01", "N3", "sp3 N for charged amino groups (Lys, etc)", "0.530"}, {"N", "14.01", "NT", "sp3 N for amino groups amino groups", "0.530"}, {"N", "14.01", "N*", "sp2 N", "0.530"}, {"N", "14.01", "NY", "nitrile N (Howard et al.JCC,16,243,1995)", "0.530"}, {"O", "16.00", "O", "carbonyl group oxygen", "0.434"}, {"O", "16.00", "O2", "carboxyl and phosphate group oxygen", "0.434"}, {"O", "16.00", "OW", "oxygen in TIP3P water", "0.000"}, {"O", "16.00", "OH", "oxygen in hydroxyl group", "0.465"}, {"O", "16.00", "OS", "ether and ester oxygen", "0.465"}, {"P", "30.97", "P", "phosphate,pol:JACS,112,8543,90,K.J.Miller", "1.538"}, {"S", "32.06", "S", "S in disulfide linkage,pol:JPC,102,2399,98", "2.900"}, {"S", "32.06", "SH", "S in cystine", "2.900"}, {"Cu", "63.55", "CU", "copper"}, {"Fe", "55.00", "FE", "iron"}, {"Li", "6.94", "Li", "lithium, ions pol:J.PhysC,11,1541,(1978)", "0.029"}, {"I", "22.99", "IP", "assumed to be Na+ (ion plus)", "0.250"}, {"Na", "22.99", "Na", "Na+, ions pol:J.PhysC,11,1541,(1978)", "0.250"}, {"K", "39.10", "K", "potassium", "1.060"}, {"Rb", "85.47", "Rb", "rubidium"}, {"Cs", "132.91", "Cs", "cesium"}, {"Zn", "65.4", "Zn", "Zn2+"}, {"LP", "3.00", "LP", "lone pair", "0.000"}}; /* Non-bonded equivalence 0= Key_a, then equi with Key_a */ char * amber99_equi[2][15]= {{"N", "NA", "N2", "N*", "NC", "NB", "NT", "NY", " ", " ", " ", " ", " ", " ", " "}, {"C*", "CA", "CB", "CC", "CD", "CK", "CM", "CN", "CQ", "CR", "CV", "CW", "CY", "CZ", " "}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= Kb (kcal mol^-1 A^2), 3= R0 (A), 4= amber99 info V(R) = Kb x (R - R0)^2 */ char * amber99_bonds[116][5]= {{"OW", "HW", "553.0", "0.9572", "! TIP3P water"}, {"HW", "HW", "553.0", "1.5136", "TIP3P water"}, {"C", "C", "310.0", "1.525", "Junmei et al, 1999"}, {"C", "CA", "469.0", "1.409", "JCC,7,(1986),230; (not used any more in TYR)"}, {"C", "CB", "447.0", "1.419", "JCC,7,(1986),230; GUA"}, {"C", "CM", "410.0", "1.444", "JCC,7,(1986),230; THY,URA"}, {"C", "CT", "317.0", "1.522", "JCC,7,(1986),230; AA"}, {"C", "N", "490.0", "1.335", "JCC,7,(1986),230; AA"}, {"C", "N*", "424.0", "1.383", "JCC,7,(1986),230; CYT,URA"}, {"C", "NA", "418.0", "1.388", "JCC,7,(1986),230; GUA.URA"}, {"C", "NC", "457.0", "1.358", "JCC,7,(1986),230; CYT"}, {"C", "O", "570.0", "1.229", "JCC,7,(1986),230; AA,CYT,GUA,THY,URA"}, {"C", "O2", "656.0", "1.250", "JCC,7,(1986),230; GLU,ASP"}, {"C", "OH", "450.0", "1.364", "JCC,7,(1986),230; (not used any more for TYR)"}, {"C", "OS", "450.0", "1.323", "Junmei et al, 1999"}, {"C", "H4", "367.0", "1.080", "Junmei et al, 1999"}, {"C", "H5", "367.0", "1.080", "Junmei et al, 1999"}, {"CA", "CA", "469.0", "1.400", "JCC,7,(1986),230; BENZENE,PHE,TRP,TYR"}, {"CA", "CB", "469.0", "1.404", "JCC,7,(1986),230; ADE,TRP"}, {"CA", "CM", "427.0", "1.433", "JCC,7,(1986),230; CYT"}, {"CA", "CN", "469.0", "1.400", "JCC,7,(1986),230; TRP"}, {"CA", "CT", "317.0", "1.510", "JCC,7,(1986),230; PHE,TYR"}, {"CA", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; PHE,TRP,TYR"}, {"CA", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; no assigned"}, {"CA", "N2", "481.0", "1.340", "JCC,7,(1986),230; ARG,CYT,GUA"}, {"CA", "NA", "427.0", "1.381", "JCC,7,(1986),230; GUA"}, {"CA", "NC", "483.0", "1.339", "JCC,7,(1986),230; ADE,CYT,GUA"}, {"CA", "OH", "450.0", "1.364", "substituted for C-OH in tyr"}, {"CB", "CB", "520.0", "1.370", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "N*", "436.0", "1.374", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NB", "414.0", "1.391", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NC", "461.0", "1.354", "JCC,7,(1986),230; ADE,GUA"}, {"CD", "HA", "367.0", "1.080", "Junmei et al, 1999"}, {"CD", "CD", "469.0", "1.400", "Junmei et al, 1999"}, {"CD", "CM", "549.0", "1.350", "Junmei et al, 1999"}, {"CD", "CT", "317.0", "1.510", "Junmei et al, 1999"}, {"CK", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE,GUA"}, {"CK", "N*", "440.0", "1.371", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "NB", "529.0", "1.304", "JCC,7,(1986),230; ADE,GUA"}, {"CM", "CM", "549.0", "1.350", "JCC,7,(1986),230; CYT,THY,URA"}, {"CM", "CT", "317.0", "1.510", "JCC,7,(1986),230; THY"}, {"CM", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; not assigned"}, {"CM", "N*", "448.0", "1.365", "JCC,7,(1986),230; CYT,THY,URA"}, {"CM", "OS", "480.0", "1.240", "Junmei et al, 1999"}, {"CQ", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE"}, {"CQ", "NC", "502.0", "1.324", "JCC,7,(1986),230; ADE"}, {"CT", "CT", "310.0", "1.526", "JCC,7,(1986),230; AA, SUGARS"}, {"CT", "HC", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, SUGARS"}, {"CT", "H1", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, RIBOSE"}, {"CT", "H2", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; SUGARS"}, {"CT", "H3", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; not assigned"}, {"CT", "HP", "340.0", "1.090", "changed from 331; AA-lysine, methyl ammonium cation"}, {"CT", "N*", "337.0", "1.475", "JCC,7,(1986),230; ADE,CYT,GUA,THY,URA"}, {"CT", "N2", "337.0", "1.463", "JCC,7,(1986),230; ARG"}, {"CT", "OH", "320.0", "1.410", "JCC,7,(1986),230; SUGARS"}, {"CT", "OS", "320.0", "1.410", "JCC,7,(1986),230; NUCLEIC ACIDS"}, {"C*", "HC", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes, not needed AA"}, {"C*", "CB", "388.0", "1.459", "JCC,7,(1986),230; TRP"}, {"C*", "CT", "317.0", "1.495", "JCC,7,(1986),230; TRP"}, {"C*", "CW", "546.0", "1.352", "JCC,7,(1986),230; TRP"}, {"CB", "CN", "447.0", "1.419", "JCC,7,(1986),230; TRP"}, {"CC", "CT", "317.0", "1.504", "JCC,7,(1986),230; HIS"}, {"CC", "CV", "512.0", "1.375", "JCC,7,(1986),230; HIS(delta)"}, {"CC", "CW", "518.0", "1.371", "JCC,7,(1986),230; HIS(epsilon)"}, {"CC", "NA", "422.0", "1.385", "JCC,7,(1986),230; HIS"}, {"CC", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CN", "NA", "428.0", "1.380", "JCC,7,(1986),230; TRP"}, {"CR", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS"}, {"CR", "NA", "477.0", "1.343", "JCC,7,(1986),230; HIS"}, {"CR", "NB", "488.0", "1.335", "JCC,7,(1986),230; HIS"}, {"CT", "N", "337.0", "1.449", "JCC,7,(1986),230; AA"}, {"CT", "N3", "367.0", "1.471", "JCC,7,(1986),230; LYS"}, {"CT", "NT", "367.0", "1.471", "for neutral amines"}, {"CT", "S", "227.0", "1.810", "changed from 222.0 based on dimethylS nmodes"}, {"CT", "SH", "237.0", "1.810", "changed from 222.0 based on methanethiol nmodes"}, {"CT", "CY", "400.0", "1.458", "Howard et al JCC.16,243,1995"}, {"CT", "CZ", "400.0", "1.459", "Howard et al JCC,16,243,1995"}, {"CV", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; HIS"}, {"CV", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CW", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS(epsilon,+)"}, {"CW", "NA", "427.0", "1.381", "JCC,7,(1986),230; HIS,TRP"}, {"CY", "NY", "600.0", "1.150", "Howard et al JCC,16,243,1995"}, {"CZ", "CZ", "600.0", "1.206", "Howard et al JCC,16,243,1995"}, {"CZ", "HZ", "400.0", "1.056", "Howard et al JCC,16,243,1995"}, {"O2", "P", "525.0", "1.480", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OH", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OS", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"H", "N2", "434.0", "1.010", "JCC,7,(1986),230; ADE,CYT,GUA,ARG"}, {"H", "N*", "434.0", "1.010", "for plain unmethylated bases ADE,CYT,GUA,ARG"}, {"H", "NA", "434.0", "1.010", "JCC,7,(1986),230; GUA,URA,HIS"}, {"H", "N", "434.0", "1.010", "JCC,7,(1986),230; AA"}, {"H", "N3", "434.0", "1.010", "JCC,7,(1986),230; LYS"}, {"H", "NT", "434.0", "1.010", "for neutral amines"}, {"HO", "OH", "553.0", "0.960", "JCC,7,(1986),230; SUGARS,SER,TYR"}, {"HO", "OS", "553.0", "0.960", "JCC,7,(1986),230; NUCLEOTIDE ENDS"}, {"HS", "SH", "274.0", "1.336", "JCC,7,(1986),230; CYS"}, {"S", "S", "166.0", "2.038", "JCC,7,(1986),230; CYX (SCHERAGA)"}, {"F", "CT", "367.0", "1.380", "JCC,13,(1992),963;CF4; R0=1.332 FOR CHF3"}, {"Cl", "CT", "232.0", "1.766", "6-31g* opt"}, {"Br", "CT", "159.0", "1.944", "Junmei et al,99"}, {"I", "CT", "148.0", "2.166", "Junmei et al,99"}, {"F", "CA", "386.0", "1.359", "Junmei et al,99"}, {"Cl", "CA", "193.0", "1.727", "Junmei et al,99"}, {"I", "CA", "171.0", "2.075", "Junmei et al,99"}, {"Br", "CA", "172.0", "1.890", "Junmei et al,99"}, {"LP", "O", "600.0", "0.200", "or 0.35"}, {"LP", "OH", "600.0", "0.200", "or 0.35"}, {"LP", "OS", "600.0", "0.200", "or 0.35"}, {"LP", "N3", "600.0", "0.200", "or 0.35"}, {"LP", "NT", "600.0", "0.200", "or 0.35"}, {"LP", "NB", "600.0", "0.200", "or 0.35 histidines, nucleic acids"}, {"LP", "NC", "600.0", "0.200", "or 0.35 nucleic acids"}, {"LP", "S", "600.0", "0.700", "cys,cyx,met"}, {"LP", "SH", "600.0", "0.700", "cys,cyx"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 */ char * amber99_angles[281][6]= {{"HW", "OW", "HW", "100.", "104.52", "TIP3P water"}, {"HW", "HW", "OW", "0.", "127.74", "(found in crystallographic water with 3 bonds)"}, {"C", "C", "O", "80.0", "120.00", "Junmei et al, 1999 acrolein"}, {"C", "C", "OH", "80.0", "120.00", "Junmei et al, 1999"}, {"CA", "C", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA"}, {"CA", "C", "OH", "70.0", "120.00", "AA (not used in tyr)"}, {"CB", "C", "NA", "70.0", "111.30", "NA"}, {"CB", "C", "O", "80.0", "128.80", " "}, {"CM", "C", "NA", "70.0", "114.10", " "}, {"CM", "C", "O", "80.0", "125.30", " "}, {"CT", "C", "O", "80.0", "120.40", " "}, {"CT", "C", "O2", "70.0", "117.00", " "}, {"CT", "C", "N", "70.0", "116.60", "AA general"}, {"CT", "C", "CT", "63.0", "117.00", "Junmei et al, 1999"}, {"CT", "C", "OS", "80.0", "115.00", "Junmei et al, 1999"}, {"CT", "C", "OH", "80.0", "110.00", "Junmei et al, 1999"}, {"N*", "C", "NA", "70.0", "115.40", " "}, {"N*", "C", "NC", "70.0", "118.60", " "}, {"N*", "C", "O", "80.0", "120.90", " "}, {"NA", "C", "O", "80.0", "120.60", " "}, {"NC", "C", "O", "80.0", "122.50", " "}, {"N", "C", "O", "80.0", "122.90", "AA general"}, {"O", "C", "O", "80.0", "126.00", "AA COO- terminal residues"}, {"O", "C", "OH", "80.0", "120.00", "(check with Junmei for: theta0:120.0?)"}, {"O", "C", "OS", "80.0", "125.00", "Junmei et al, 1999"}, {"O2", "C", "O2", "80.0", "126.00", "AA GLU (SCH JPC 79,2379)"}, {"H4", "C", "C", "50.0", "120.00", "Junmei et al, 1999"}, {"H4", "C", "CM", "50.0", "115.00", "Junmei et al, 1999"}, {"H4", "C", "CT", "50.0", "115.00", "Junmei et al, 1999"}, {"H4", "C", "O", "50.0", "120.00", "Junmei et al, 1999"}, {"H4", "C", "OH", "50.0", "120.00", "Junmei et al, 1999"}, {"H5", "C", "N", "50.0", "120.00", "Junmei et al, 1999"}, {"H5", "C", "O", "50.0", "119.00", "Junmei et al, 1999"}, {"H5", "C", "OH", "50.0", "107.00", "Junmei et al, 1999"}, {"H5", "C", "OS", "50.0", "107.00", "Junmei et al, 1999"}, {"C", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"C", "CA", "HA", "50.0", "120.00", "AA (not used in tyr)"}, {"CA", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CB", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CT", "70.0", "120.00", " "}, {"CA", "CA", "HA", "50.0", "120.00", " "}, {"CA", "CA", "H4", "50.0", "120.00", " "}, {"CA", "CA", "OH", "70.0", "120.00", "replacement in tyr"}, {"CA", "CA", "CN", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CB", "CA", "HA", "50.0", "120.00", " "}, {"CB", "CA", "H4", "50.0", "120.00", " "}, {"CB", "CA", "N2", "70.0", "123.50", " "}, {"CB", "CA", "NC", "70.0", "117.30", " "}, {"CM", "CA", "N2", "70.0", "120.10", " "}, {"CM", "CA", "NC", "70.0", "121.50", " "}, {"CN", "CA", "HA", "50.0", "120.00", "AA trp"}, {"NA", "CA", "NC", "70.0", "123.30", " "}, {"N2", "CA", "NA", "70.0", "116.00", " "}, {"N2", "CA", "NC", "70.0", "119.30", " "}, {"N2", "CA", "N2", "70.0", "120.00", "AA arg"}, {"F", "CA", "CA", "70.0", "121.00", "Junmei et al,99"}, {"Cl", "CA", "CA", "70.0", "118.80", "Junmei et al,99"}, {"Br", "CA", "CA", "70.0", "118.80", "Junmei et al,99"}, {"I", "CA", "CA", "70.0", "118.80", "Junmei et al,99"}, {"C", "CB", "CB", "63.0", "119.20", "changed from 85.0 bsd on C6H6 nmodes; NA gua"}, {"C", "CB", "NB", "70.0", "130.00", " "}, {"CA", "CB", "CB", "63.0", "117.30", "changed from 85.0 bsd on C6H6 nmodes; NA ade"}, {"CA", "CB", "NB", "70.0", "132.40", " "}, {"CB", "CB", "N*", "70.0", "106.20", " "}, {"CB", "CB", "NB", "70.0", "110.40", " "}, {"CB", "CB", "NC", "70.0", "127.70", " "}, {"C*", "CB", "CA", "63.0", "134.90", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C*", "CB", "CN", "63.0", "108.80", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CB", "CN", "63.0", "116.20", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"N*", "CB", "NC", "70.0", "126.20", " "}, {"CD", "CD", "CM", "63.0", "120.00", "Junmei et al, 1999"}, {"CD", "CD", "CT", "70.0", "120.00", "Junmei et al, 1999"}, {"CM", "CD", "CT", "70.0", "120.00", "Junmei et al, 1999"}, {"HA", "CD", "HA", "35.0", "119.00", "Junmei et al, 1999"}, {"HA", "CD", "CD", "50.0", "120.00", "Junmei et al, 1999"}, {"HA", "CD", "CM", "50.0", "120.00", "Junmei et al, 1999"}, {"H5", "CK", "N*", "50.0", "123.05", " "}, {"H5", "CK", "NB", "50.0", "123.05", " "}, {"N*", "CK", "NB", "70.0", "113.90", " "}, {"C", "CM", "CM", "63.0", "120.70", "changed from 85.0 bsd on C6H6 nmodes; NA thy"}, {"C", "CM", "CT", "70.0", "119.70", " "}, {"C", "CM", "HA", "50.0", "119.70", " "}, {"C", "CM", "H4", "50.0", "119.70", " "}, {"CA", "CM", "CM", "63.0", "117.00", "changed from 85.0 bsd on C6H6 nmodes; NA cyt"}, {"CA", "CM", "HA", "50.0", "123.30", " "}, {"CA", "CM", "H4", "50.0", "123.30", " "}, {"CM", "CM", "CT", "70.0", "119.70", " "}, {"CM", "CM", "HA", "50.0", "119.70", " "}, {"CM", "CM", "H4", "50.0", "119.70", " "}, {"CM", "CM", "N*", "70.0", "121.20", " "}, {"CM", "CM", "OS", "80.0", "125.00", "Junmei et al, 1999"}, {"H4", "CM", "N*", "50.0", "119.10", " "}, {"H4", "CM", "OS", "50.0", "113.00", "Junmei et al, 1999"}, {"HA", "CM", "HA", "35.0", "120.00", "Junmei et al, 1999"}, {"HA", "CM", "CD", "50.0", "120.00", "Junmei et al, 1999"}, {"HA", "CM", "CT", "50.0", "120.00", "Junmei et al, 1999"}, {"NC", "CQ", "NC", "70.0", "129.10", " "}, {"H5", "CQ", "NC", "50.0", "115.45", " "}, {"H1", "CT", "H1", "35.0", "109.50", " "}, {"H1", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OH", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "CM", "50.0", "109.50", "Junmei et al, 1999"}, {"H1", "CT", "CY", "50.0", "110.00", "Junmei et al, 1999"}, {"H1", "CT", "CZ", "50.0", "110.00", "Junmei et al, 1999"}, {"H1", "CT", "N", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"H1", "CT", "S", "50.0", "109.50", "AA cys changed based on NMA nmodes"}, {"H1", "CT", "SH", "50.0", "109.50", "AA cyx changed based on NMA nmodes"}, {"H1", "CT", "N2", "50.0", "109.50", "AA arg changed based on NMA nmodes"}, {"H1", "CT", "NT", "50.0", "109.50", "neutral amines"}, {"H2", "CT", "H2", "35.0", "109.50", "AA lys"}, {"H2", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H2", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"HP", "CT", "HP", "35.0", "109.50", "AA lys, ch3nh4+"}, {"HP", "CT", "N3", "50.0", "109.50", "AA lys, ch3nh3+, changed based on NMA nmodes"}, {"HC", "CT", "HC", "35.0", "109.50", " "}, {"HC", "CT", "CM", "50.0", "109.50", "changed based on NMA nmodes"}, {"HC", "CT", "CD", "50.0", "109.50", "Junmei et al, 1999"}, {"HC", "CT", "CZ", "50.0", "110.00", "Junmei et al, 1999"}, {"C", "CT", "H1", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "HP", "50.0", "109.50", "AA zwitterion changed based on NMA nmodes"}, {"C", "CT", "HC", "50.0", "109.50", "AA gln changed based on NMA nmodes"}, {"C", "CT", "N", "63.0", "110.10", "AA general"}, {"C", "CT", "N3", "80.0", "111.20", "AA amino terminal residues"}, {"C", "CT", "CT", "63.0", "111.10", "AA general"}, {"C", "CT", "OS", "60.0", "109.50", "Junmei et al, 1999"}, {"CA", "CT", "HC", "50.0", "109.50", "AA tyr changed based on NMA nmodes"}, {"CC", "CT", "CT", "63.0", "113.10", "AA his"}, {"CC", "CT", "HC", "50.0", "109.50", "AA his changed based on NMA nmodes"}, {"CM", "CT", "CT", "63.0", "111.00", "Junmei et al, 1999 (last change: Mar24,99)"}, {"CM", "CT", "OS", "50.0", "109.50", "Junmei et al, 1999"}, {"CT", "CT", "CT", "40.0", "109.50", " "}, {"CT", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H1", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H2", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "HP", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "N*", "50.0", "109.50", " "}, {"CT", "CT", "OH", "50.0", "109.50", " "}, {"CT", "CT", "OS", "50.0", "109.50", " "}, {"CT", "CT", "S", "50.0", "114.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "CT", "SH", "50.0", "108.60", "AA cys"}, {"CT", "CT", "CA", "63.0", "114.00", "AA phe tyr (SCH JPC 79,2379)"}, {"CT", "CT", "N2", "80.0", "111.20", "AA arg (JCP 76, 1439)"}, {"CT", "CT", "N", "80.0", "109.70", "AA ala, general (JACS 94, 2657)"}, {"CT", "CT", "N3", "80.0", "111.20", "AA lys (JCP 76, 1439)"}, {"CT", "CT", "NT", "80.0", "111.20", "neutral amines"}, {"CT", "CT", "CY", "63.0", "110.00", "Junmei et al, 1999"}, {"CT", "CT", "CZ", "63.0", "110.00", "Junmei et al, 1999"}, {"C*", "CT", "CT", "63.0", "115.60", "AA trp"}, {"C*", "CT", "HC", "50.0", "109.50", "AA trp changed based on NMA nmodes"}, {"OS", "CT", "OS", "160.0", "101.00", "Junmei et al, 1999"}, {"OS", "CT", "CY", "50.0", "110.00", "Junmei et al, 1999"}, {"OS", "CT", "CZ", "50.0", "110.00", "Junmei et al, 1999"}, {"OS", "CT", "N*", "50.0", "109.50", " "}, {"F", "CT", "F", "77.0", "109.10", "JCC,13,(1992),963;"}, {"F", "CT", "H1", "50.0", "109.50", "JCC,13,(1992),963;"}, {"F", "CT", "CT", "50.0", "109.00", " "}, {"F", "CT", "H2", "50.0", "109.50", " "}, {"Cl", "CT", "CT", "50.0", "108.50", "(6-31g* opt value)"}, {"Cl", "CT", "H1", "50.0", "108.50", "(6-31g* opt value)"}, {"Br", "CT", "CT", "50.0", "108.00", "Junmei et al 99"}, {"Br", "CT", "H1", "50.0", "106.50", "Junmei et al 99"}, {"I", "CT", "CT", "50.0", "106.00", "Junmei et al,99"}, {"CT", "CC", "NA", "70.0", "120.00", "AA his"}, {"CT", "CC", "CV", "70.0", "120.00", "AA his"}, {"CT", "CC", "NB", "70.0", "120.00", "AA his"}, {"CV", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NB", "70.0", "120.00", "AA his"}, {"CT", "CC", "CW", "70.0", "120.00", "AA his"}, {"H5", "CR", "NA", "50.0", "120.00", "AA his"}, {"H5", "CR", "NB", "50.0", "120.00", "AA his"}, {"NA", "CR", "NA", "70.0", "120.00", "AA his"}, {"NA", "CR", "NB", "70.0", "120.00", "AA his"}, {"CC", "CV", "H4", "50.0", "120.00", "AA his"}, {"CC", "CV", "NB", "70.0", "120.00", "AA his"}, {"H4", "CV", "NB", "50.0", "120.00", "AA his"}, {"CC", "CW", "H4", "50.0", "120.00", "AA his"}, {"CC", "CW", "NA", "70.0", "120.00", "AA his"}, {"C*", "CW", "H4", "50.0", "120.00", "AA trp"}, {"C*", "CW", "NA", "70.0", "108.70", "AA trp"}, {"H4", "CW", "NA", "50.0", "120.00", "AA his"}, {"CB", "C*", "CT", "70.0", "128.60", "AA trp"}, {"CB", "C*", "CW", "63.0", "106.40", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CT", "C*", "CW", "70.0", "125.00", "AA trp"}, {"CA", "CN", "CB", "63.0", "122.70", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CN", "NA", "70.0", "132.80", "AA trp"}, {"CB", "CN", "NA", "70.0", "104.40", "AA trp"}, {"CT", "CY", "NY", "80.0", "180.00", "Junmei et al, 1999"}, {"CT", "CZ", "CZ", "80.0", "180.00", "Junmei et al, 1999"}, {"CZ", "CZ", "HZ", "50.0", "180.00", "Junmei et al, 1999"}, {"C", "N", "CT", "50.0", "121.90", "AA general"}, {"C", "N", "H", "50.0", "120.00", "AA general, gln, asn,changed based on NMA nmodes"}, {"CT", "N", "H", "50.0", "118.04", "AA general, changed based on NMA nmodes"}, {"CT", "N", "CT", "50.0", "118.00", "AA pro (DETAR JACS 99,1232)"}, {"H", "N", "H", "35.0", "120.00", "ade,cyt,gua,gln,asn **"}, {"C", "N*", "CM", "70.0", "121.60", " "}, {"C", "N*", "CT", "70.0", "117.60", " "}, {"C", "N*", "H", "50.0", "119.20", "changed based on NMA nmodes"}, {"CB", "N*", "CK", "70.0", "105.40", " "}, {"CB", "N*", "CT", "70.0", "125.80", " "}, {"CB", "N*", "H", "50.0", "125.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CK", "N*", "CT", "70.0", "128.80", " "}, {"CK", "N*", "H", "50.0", "128.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CM", "N*", "CT", "70.0", "121.20", " "}, {"CM", "N*", "H", "50.0", "121.20", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CA", "N2", "H", "50.0", "120.00", " "}, {"CA", "N2", "CT", "50.0", "123.20", "AA arg"}, {"CT", "N2", "H", "50.0", "118.40", "AA arg"}, {"H", "N2", "H", "35.0", "120.00", " "}, {"CT", "N3", "H", "50.0", "109.50", "AA lys, changed based on NMA nmodes"}, {"CT", "N3", "CT", "50.0", "109.50", "AA pro/nt"}, {"H", "N3", "H", "35.0", "109.50", "AA lys, AA(end)"}, {"CT", "NT", "H", "50.0", "109.50", "neutral amines"}, {"CT", "NT", "CT", "50.0", "109.50", "neutral amines"}, {"H", "NT", "H", "35.0", "109.50", "neutral amines"}, {"C", "NA", "C", "70.0", "126.40", " "}, {"C", "NA", "CA", "70.0", "125.20", " "}, {"C", "NA", "H", "50.0", "116.80", "changed based on NMA nmodes"}, {"CA", "NA", "H", "50.0", "118.00", "changed based on NMA nmodes"}, {"CC", "NA", "CR", "70.0", "120.00", "AA his"}, {"CC", "NA", "H", "50.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CR", "NA", "CW", "70.0", "120.00", "AA his"}, {"CR", "NA", "H", "50.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CW", "NA", "H", "50.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CN", "NA", "CW", "70.0", "111.60", "AA trp"}, {"CN", "NA", "H", "50.0", "123.10", "AA trp, changed based on NMA nmodes"}, {"CB", "NB", "CK", "70.0", "103.80", " "}, {"CC", "NB", "CR", "70.0", "117.00", "AA his"}, {"CR", "NB", "CV", "70.0", "117.00", "AA his"}, {"C", "NC", "CA", "70.0", "120.50", " "}, {"CA", "NC", "CB", "70.0", "112.20", " "}, {"CA", "NC", "CQ", "70.0", "118.60", " "}, {"CB", "NC", "CQ", "70.0", "111.00", " "}, {"C", "OH", "HO", "50.0", "113.00", "(not used in tyr anymore)"}, {"CA", "OH", "HO", "50.0", "113.00", "replacement in tyr"}, {"CT", "OH", "HO", "55.0", "108.50", " "}, {"HO", "OH", "P", "45.0", "108.50", " "}, {"C", "OS", "CT", "60.0", "117.00", "Junmei et al, 1999"}, {"CM", "OS", "CT", "60.0", "117.00", "Junmei et al, 1999"}, {"CT", "OS", "CT", "60.0", "109.50", " "}, {"CT", "OS", "P", "100.0", "120.50", " "}, {"P", "OS", "P", "100.0", "120.50", " "}, {"O2", "P", "OH", "45.0", "108.23", " "}, {"O2", "P", "O2", "140.0", "119.90", " "}, {"O2", "P", "OS", "100.0", "108.23", " "}, {"OH", "P", "OS", "45.0", "102.60", " "}, {"OS", "P", "OS", "45.0", "102.60", " "}, {"CT", "S", "CT", "62.0", "98.90", "AA met"}, {"CT", "S", "S", "68.0", "103.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "SH", "HS", "43.0", "96.00", "changed from 44.0 based on methanethiol nmodes"}, {"HS", "SH", "HS", "35.0", "92.07", "AA cys"}, {"CB", "NB", "LP", "150.0", "126.0", "NA"}, {"CC", "NB", "LP", "150.0", "126.0", "his,NA"}, {"CK", "NB", "LP", "150.0", "126.0", "NA"}, {"CR", "NB", "LP", "150.0", "126.0", "his,NA"}, {"CV", "NB", "LP", "150.0", "126.0", "his,NA"}, {"C", "NC", "LP", "150.0", "120.0", "NA"}, {"CA", "NC", "LP", "150.0", "120.0", "NA"}, {"CB", "NC", "LP", "150.0", "120.0", "NA"}, {"CQ", "NC", "LP", "150.0", "120.0", "NA"}, {"CT", "N3", "LP", "150.0", "109.5", "in neutral lysine"}, {"H", "N3", "LP", "150.0", "109.5", "in neutral lysine"}, {"CT", "NT", "LP", "150.0", "109.5", " "}, {"H", "NT", "LP", "150.0", "109.5", " "}, {"C", "O", "LP", "150.0", "120.0", " "}, {"LP", "O", "LP", "150.0", "120.0", " "}, {"C", "OH", "LP", "150.0", "120.0", " "}, {"CT", "OH", "LP", "150.0", "109.5", " "}, {"HO", "OH", "LP", "150.0", "109.5", " "}, {"LP", "OH", "LP", "150.0", "109.5", " "}, {"C", "OS", "LP", "150.0", "109.5", " "}, {"CM", "OS", "LP", "150.0", "109.5", "methyl vinyl ether"}, {"CT", "OS", "LP", "150.0", "109.5", " "}, {"LP", "OS", "LP", "150.0", "109.5", " "}, {"CT", "S", "LP", "150.0", "90.0", "cys,cyx,met"}, {"CT", "SH", "LP", "150.0", "90.0", "cys,cyx,met"}, {"P", "OS", "LP", "150.0", "109.5", "NA"}, {"LP", "S", "LP", "150.0", "180.0", "cys,cyx,met"}, {"LP", "SH", "LP", "150.0", "180.0", "cys,cyx,met"}, {"HS", "SH", "LP", "150.0", "90.0", "cys"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= delta (deg), 6= n (multi), 7= amber99 info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * amber99_dihedrals[164][9]= {{"X", "C", "C", "X", "4", "14.50", "180.0", "2.", "Junmei et al, 1999"}, {"X", "C", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CB", "X", "4", "12.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CM", "X", "4", "8.70", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "N", "X", "4", "10.00", "180.0", "2.", "AA,NMA"}, {"X", "C", "N*", "X", "4", "5.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NA", "X", "4", "5.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NC", "X", "2", "8.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "O", "X", "4", "11.20", "180.0", "2.", "Junmei et al, 1999"}, {"X", "C", "OH", "X", "2", "4.60", "180.0", "2.", "Junmei et al, 1999"}, {"X", "C", "OS", "X", "2", "5.40", "180.0", "2.", "Junmei et al, 1999"}, {"X", "CA", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CB", "X", "4", "14.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CM", "X", "4", "10.20", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CN", "X", "4", "14.50", "180.0", "2.", "reinterpolated 93'"}, {"X", "CA", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "N2", "X", "4", "9.60", "180.0", "2.", "reinterpolated 93'"}, {"X", "CA", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "NC", "X", "2", "9.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "OH", "X", "2", "1.80", "180.0", "2.", "Junmei et al, 99"}, {"X", "CB", "CB", "X", "4", "21.80", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CB", "CN", "X", "4", "12.00", "180.0", "2.", "reinterpolated 93'"}, {"X", "CB", "N*", "X", "4", "6.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NB", "X", "2", "5.10", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NC", "X", "2", "8.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "CV", "X", "4", "20.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "CW", "X", "4", "21.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "NA", "X", "4", "5.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CD", "CD", "X", "4", "4.00", "180.0", "2.", "Junmei et al, 1999"}, {"X", "CD", "CT", "X", "6", "0.00", "0.0", "2.", "Junmei et al, 1999"}, {"X", "CD", "CM", "X", "4", "26.60", "180.0", "2.", "Junmei et al, 1999"}, {"X", "CK", "N*", "X", "4", "6.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "NB", "X", "2", "20.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CM", "CM", "X", "4", "26.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CM", "CT", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CM", "N*", "X", "4", "7.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CM", "OS", "X", "2", "2.10", "180.0", "2.", "Junmei et al, 1999"}, {"X", "CN", "NA", "X", "4", "6.10", "180.0", "2.", "reinterpolated 93'"}, {"X", "CQ", "NC", "X", "2", "13.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "CT", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "CY", "X", "3", "0.00", "0.0", "1.", "Junmei et al, 1999"}, {"X", "CT", "CZ", "X", "3", "0.00", "0.0", "1.", "Junmei et al, 1999"}, {"X", "CT", "N", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N*", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N2", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "NT", "X", "6", "1.80", "0.0", "3.", "Junmei et al, 1999"}, {"X", "CT", "N3", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OH", "X", "3", "0.50", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OS", "X", "3", "1.15", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "S", "X", "3", "1.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "SH", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C*", "CB", "X", "4", "6.70", "180.0", "2.", "intrpol.bsd.onC6H6aa"}, {"X", "C*", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "C*", "CW", "X", "4", "26.10", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CR", "NA", "X", "4", "9.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CR", "NB", "X", "2", "10.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CV", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CW", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "OH", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OS", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"N", "CT", "C", "N", "1", "1.700", "180.000", "-1.", " "}, {"N", "CT", "C", "N", "1", "2.000", "180.000", "2.", " "}, {"C", "N", "CT", "C", "1", "0.850", "180.000", "-2.", " "}, {"C", "N", "CT", "C", "1", "0.800", "0.000", "1.", " "}, {"CT", "CT", "N", "C", "1", "0.50", "180.0", "-4.", "phi,psi,parm94"}, {"CT", "CT", "N", "C", "1", "0.15", "180.0", "-3.", "phi,psi,parm94"}, {"CT", "CT", "N", "C", "1", "0.00", "0.0", "-2.", "JCC,7,(1986),230"}, {"CT", "CT", "N", "C", "1", "0.53", "0.0", "1.", "phi,psi,parm94"}, {"CT", "CT", "C", "N", "1", "0.100", "0.0", "-4.", "phi,psi,parm94"}, {"CT", "CT", "C", "N", "1", "0.07", "0.0", "2.", "phi,psi,parm94"}, {"H", "N", "C", "O", "1", "2.50", "180.0", "-2.", "JCC,7,(1986),230"}, {"H", "N", "C", "O", "1", "2.00", "0.0", "1.", "J.C.cistrans-NMA DE"}, {"CT", "S", "S", "CT", "1", "3.50", "0.0", "-2.", "JCC,7,(1986),230"}, {"CT", "S", "S", "CT", "1", "0.60", "0.0", "3.", "JCC,7,(1986),230"}, {"OH", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"H1", "CT", "C", "O", "1", "0.80", "0.0", "-1.", "Junmei et al, 1999"}, {"H1", "CT", "C", "O", "1", "0.00", "0.0", "-2.", "Explicit of wild card X-C-CT-X"}, {"H1", "CT", "C", "O", "1", "0.08", "180.0", "3.", "Junmei et al, 1999"}, {"HC", "CT", "C", "O", "1", "0.80", "0.0", "-1.", "Junmei et al, 1999"}, {"HC", "CT", "C", "O", "1", "0.00", "0.0", "-2.", "Explicit of wild card X-C-CT-X"}, {"HC", "CT", "C", "O", "1", "0.08", "180.0", "3.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "HC", "1", "0.15", "0.0", "3.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "CT", "1", "0.16", "0.0", "3.", "Junmei et al, 1999"}, {"HC", "CT", "CM", "CM", "1", "0.38", "180.0", "-3.", "Junmei et al, 1999"}, {"HC", "CT", "CM", "CM", "1", "1.15", "0.0", "1.", "Junmei et al, 1999"}, {"HO", "OH", "CT", "CT", "1", "0.16", "0.0", "-3.", "Junmei et al, 1999"}, {"HO", "OH", "CT", "CT", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"HO", "OH", "C", "O", "1", "2.30", "180.0", "-2.", "Junmei et al, 1999"}, {"HO", "OH", "C", "O", "1", "1.90", "0.0", "1.", "Junmei et al, 1999"}, {"CM", "CM", "C", "O", "1", "2.175", "180.0", "-2.", "Junmei et al, 1999"}, {"CM", "CM", "C", "O", "1", "0.30", "0.0", "3.", "Junmei et al, 1999"}, {"CT", "CM", "CM", "CT", "1", "6.65", "180.0", "-2.", "Junmei et al, 1999"}, {"CT", "CM", "CM", "CT", "1", "1.90", "180.0", "1.", "Junmei et al, 1999"}, {"CT", "CT", "CT", "CT", "1", "0.18", "0.0", "-3.", "Junmei et al, 1999"}, {"CT", "CT", "CT", "CT", "1", "0.25", "180.0", "-2.", "Junmei et al, 1999"}, {"CT", "CT", "CT", "CT", "1", "0.20", "180.0", "1.", "Junmei et al, 1999"}, {"CT", "CT", "NT", "CT", "1", "0.30", "0.0", "-3.", "Junmei et al, 1999"}, {"CT", "CT", "NT", "CT", "1", "0.48", "180.0", "2.", "Junmei et al, 1999"}, {"CT", "CT", "OS", "CT", "1", "0.383", "0.0", "-3.", " "}, {"CT", "CT", "OS", "CT", "1", "0.1", "180.0", "2.", " "}, {"CT", "CT", "OS", "C", "1", "0.383", "0.0", "-3.", "Junmei et al, 1999"}, {"CT", "CT", "OS", "C", "1", "0.80", "180.0", "1.", "Junmei et al, 1999"}, {"CT", "OS", "CT", "OS", "1", "0.10", "0.0", "-3.", "Junmei et al, 1999"}, {"CT", "OS", "CT", "OS", "1", "0.85", "180.0", "-2.", "Junmei et al, 1999"}, {"CT", "OS", "CT", "OS", "1", "1.35", "180.0", "1.", "Junmei et al, 1999"}, {"CT", "OS", "CT", "N*", "1", "0.383", "0.0", "-3.", "parm98.dat, TC,PC,PAK"}, {"CT", "OS", "CT", "N*", "1", "0.65", "0.0", "2.", "Piotr et al."}, {"CT", "CZ", "CZ", "HZ", "1", "0.00", "0.0", "1.", "Junmei et al, 1999"}, {"O", "C", "OS", "CT", "1", "2.70", "180.0", "-2.", "Junmei et al, 1999"}, {"O", "C", "OS", "CT", "1", "1.40", "180.0", "1.", "Junmei et al, 1999"}, {"OS", "CT", "N*", "CK", "1", "0.00", "000.0", "-2.", "parm98, TC,PC,PAK"}, {"OS", "CT", "N*", "CK", "1", "2.50", "0.0", "1.", "parm98, TC,PC,PAK"}, {"OS", "CT", "N*", "CM", "1", "0.00", "000.0", "-2.", "parm98, TC,PC,PAK"}, {"OS", "CT", "N*", "CM", "1", "2.50", "0.0", "1.", "parm98, TC,PC,PAK"}, {"OS", "CT", "CT", "OS", "1", "0.144", "0.0", "-3.", "parm98, TC,PC,PAK"}, {"OS", "CT", "CT", "OS", "1", "1.175", "0.0", "2.", "Piotr et al."}, {"OS", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "parm98, TC,PC,PAK"}, {"OS", "CT", "CT", "OH", "1", "1.175", "0.0", "2.", "parm98, TC,PC,PAK"}, {"OH", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "parm98, TC,PC,PAK"}, {"OH", "CT", "CT", "OH", "1", "1.175", "0.0", "2.", "parm98, TC,PC,PAK"}, {"F", "CT", "CT", "F", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"F", "CT", "CT", "F", "1", "1.20", "180.0", "1.", "Junmei et al, 1999"}, {"Cl", "CT", "CT", "Cl", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"Cl", "CT", "CT", "Cl", "1", "0.45", "180.0", "1.", "Junmei et al, 1999"}, {"Br", "CT", "CT", "Br", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"Br", "CT", "CT", "Br", "1", "0.00", "180.0", "1.", "Junmei et al, 1999"}, {"H1", "CT", "CT", "OS", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"H1", "CT", "CT", "OS", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"H1", "CT", "CT", "OH", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"H1", "CT", "CT", "OH", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"H1", "CT", "CT", "F", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"H1", "CT", "CT", "F", "1", "0.19", "0.0", "1.", "Junmei et al, 1999"}, {"H1", "CT", "CT", "Cl", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"H1", "CT", "CT", "Cl", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"H1", "CT", "CT", "Br", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"H1", "CT", "CT", "Br", "1", "0.55", "0.0", "1.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "OS", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"HC", "CT", "CT", "OS", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "OH", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"HC", "CT", "CT", "OH", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "F", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"HC", "CT", "CT", "F", "1", "0.19", "0.0", "1.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "Cl", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"HC", "CT", "CT", "Cl", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "Br", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"HC", "CT", "CT", "Br", "1", "0.55", "0.0", "1.", "Junmei et al, 1999"}, {"H1", "CT", "NT", "LP", "1", "0.000", "0.000", "3.000", " "}, {"CT", "CT", "NT", "LP", "1", "0.000", "0.000", "3.000", " "}, {"CT", "C", "N", "LP", "1", "0.000", "180.000", "2.000", " "}, {"O", "C", "N", "LP", "1", "0.000", "180.000", "2.000", " "}, {"H1", "CT", "OH", "LP", "1", "0.000", "0.000", "3.000", " "}, {"CT", "CT", "OH", "LP", "1", "0.000", "0.000", "3.000", " "}, {"H1", "CT", "OS", "LP", "1", "0.000", "0.000", "3.000", " "}, {"H2", "CT", "OS", "LP", "1", "0.000", "0.000", "3.000", " "}, {"CT", "CT", "OS", "LP", "1", "0.000", "0.000", "3.000", " "}, {"CM", "CM", "OS", "LP", "1", "0.000", "180.000", "2.000", " "}, {"HA", "CM", "OS", "LP", "1", "0.000", "180.000", "2.000", " "}, {"H4", "CM", "OS", "LP", "1", "0.000", "180.000", "2.000", " "}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= n (multi), 7= amber99 info V(psi) = Kpsi x (psi - psi0)^2 */ char * amber99_impropers[38][8]= {{"X", "X", "C", "O", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "O2", "C", "O2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N2", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "NA", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "N2", "CA", "N2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N", "CT", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "CA", "HA", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CW", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CR", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CV", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CQ", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CK", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "HA", "1.1", "180.", "2.", " "}, {"X", "X", "CA", "H4", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CA", "H5", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"CB", "CK", "N*", "CT", "1.0", "180.", "2.", " "}, {"C", "CM", "N*", "CT", "1.0", "180.", "2.", "dac guess, 9/94"}, {"CT", "O", "C", "OH", "10.5", "180.", "2.", " "}, {"CT", "CV", "CC", "NA", "1.1", "180.", "2.", " "}, {"CT", "CW", "CC", "NB", "1.1", "180.", "2.", " "}, {"CT", "CW", "CC", "NA", "1.1", "180.", "2.", " "}, {"CB", "CT", "C*", "CW", "1.1", "180.", "2.", " "}, {"CA", "CA", "CA", "CT", "1.1", "180.", "2.", " "}, {"C", "CM", "CM", "CT", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CM", "N2", "CA", "NC", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CB", "N2", "CA", "NC", "1.1", "180.", "2.", "dac, 10/94"}, {"N2", "NA", "CA", "NC", "1.1", "180.", "2.", "dac, 10/94"}, {"CA", "CA", "C", "OH", "1.1", "180.", "2.", "(not used in tyr!)"}, {"CA", "CA", "CA", "OH", "1.1", "180.", "2.", "in tyr"}, {"H5", "O", "C", "OH", "1.1", "180.", "2.", "Junmei et al.1999"}, {"H5", "O", "C", "OS", "1.1", "180.", "2.", " "}, {"CM", "CT", "CM", "HA", "1.1", "180.", "2.", "Junmei et al.1999"}, {"Br", "CA", "CA", "CA", "1.1", "180.", "2.", "Junmei et al.1999"}, {"CM", "H4", "C", "O", "1.1", "180.", "2.", "Junmei et al.1999"}, {"C", "CT", "N", "H", "1.1", "180.", "2.", "Junmei et al.1999"}, {"C", "CT", "N", "O", "1.1", "180.", "2.", "Junmei et al.1999"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= amber99 info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * amber99_vdw[42][4]= {{"H", "0.6000", "0.0157", "!Ferguson base pair geom."}, {"HO", "0.0000", "0.0000", "OPLS Jorgensen, JACS,110,(1988),1657"}, {"HS", "0.6000", "0.0157", "W. Cornell CH3SH --> CH3OH FEP"}, {"HC", "1.4870", "0.0157", "OPLS"}, {"H1", "1.3870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H2", "1.2870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H3", "1.1870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HP", "1.1000", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HA", "1.4590", "0.0150", "Spellmeyer"}, {"H4", "1.4090", "0.0150", "Spellmeyer, one electrowithdr. neighbor"}, {"H5", "1.3590", "0.0150", "Spellmeyer, two electrowithdr. neighbor"}, {"HW", "0.0000", "0.0000", "TIP3P water model"}, {"HZ", "1.4590", "0.0150", "H bonded to sp C (Howard et al JCC 16)"}, {"O", "1.6612", "0.2100", "OPLS"}, {"O2", "1.6612", "0.2100", "OPLS"}, {"OW", "1.7683", "0.1520", "TIP3P water model"}, {"OH", "1.7210", "0.2104", "OPLS"}, {"OS", "1.6837", "0.1700", "OPLS ether"}, {"C*", "1.9080", "0.0860", "Spellmeyer"}, {"CT", "1.9080", "0.1094", "Spellmeyer"}, {"C", "1.9080", "0.0860", "OPLS"}, {"N", "1.8240", "0.1700", "OPLS"}, {"N3", "1.8240", "0.1700", "OPLS"}, {"S", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"SH", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"P", "2.1000", "0.2000", "JCC,7,(1986),230;"}, {"IM", "2.47", "0.1", "Cl- Smith and Dang, JCP 1994,100:5,3757"}, {"Li", "1.1370", "0.0183", "Li+ Aqvist JPC 1990,94,8021. (adapted)"}, {"IP", "1.8680", "0.00277", "Na+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Na", "1.8680", "0.00277", "Na+ Aqvist JPC 1990,94,8021. (adapted)"}, {"K", "2.6580", "0.000328", "K+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Rb", "2.9560", "0.00017", "Rb+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Cs", "3.3950", "0.0000806", "Cs+ Aqvist JPC 1990,94,8021. (adapted)"}, {"MG", "0.7926", "0.8947", "Mg2+ Aqvist JPC 1990,94,8021.(adapted)"}, {"C0", "1.7131", "0.459789", "Ca2+ Aqvist JPC 1990,94,8021.(adapted)"}, {"Zn", "1.10", "0.0125", "Zn2+, Merz,PAK, JACS,113,8262,(1991)"}, {"F", "1.75", "0.061", "Gough et al. JCC 13,(1992),963."}, {"Cl", "1.948", "0.265", "Fox, JPCB,102,8070,(98),flex.mdl CHCl3"}, {"Br", "2.22", "0.320", "Junmei(?)"}, {"I", "2.35", "0.40", "JCC,7,(1986),230;"}, {"IB", "5.0", "0.1", "solvated ion for vacuum approximation"}, {"LP", "0.00", "0.0000", "lone pair"}}; atomes_1.3.1/src/calc/calc.c0000664000175000017500000002535115212624223015252 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file calc.c * @short Callbacks used in by the molecular dynamics calculation assistants \n Atom selection structure manipulation tools \n The initialization of the assistants * @author Sébastien Le Roux */ /* * This file: 'calc.c' * * Contains: * - Callbacks used in by the molecular dynamics calculation assistant - Atom selection structure manipulation tools - The initialization of the assistants * * List of functions: void field_question (gchar * question, GCallback handler, gpointer data); void unselect_all_atoms (glwin * view); void restore_ogl_selection (glwin * view); void preserve_ogl_selection (glwin * view); G_MODULE_EXPORT void confirm_selection (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void create_field (GtkWidget * widg, gpointer data); atom_selection * duplicate_ogl_selection (atom_selection * old_sel); */ #include "global.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #define MAXDATAQM 7 extern void create_classical_force_field (int p, int f); extern void create_qm_input_file (int c, int p, int s); extern void create_new_project_using_data (atom_selection * selection); extern int selected_aspec; extern int num_bonds (int i); extern int num_angles (int i); extern int num_dihedrals (int i); extern atom_in_selection * new_atom_in_selection (int id, int sp); GtkWidget * qm_assistant; project * qm_proj; glwin * qm_view; coord_info * qm_coord; GtkTextBuffer * qmbuffer[MAXDATAQM+2]; gboolean force_mol = FALSE; int idopt; int icalc; int ident; int icomb; gboolean selection_confirmed; /*! \fn G_MODULE_EXPORT void confirm_selection (GtkDialog * dialog, gint response_id, gpointer data) \brief confirm that the selection is good \param dialog the GtkDialog sending the signal \param response_id the response id \param data the pointer if needed, not in this case */ G_MODULE_EXPORT void confirm_selection (GtkDialog * dialog, gint response_id, gpointer data) { selection_confirmed = (response_id == GTK_RESPONSE_YES) ? TRUE : FALSE; destroy_this_dialog (dialog); } /*! \fn void field_question (gchar * question, GCallback handler, gpointer data) \brief ask the use to confirm something \param question the text to display \param handler the callback to use \param data the data to transmit to the callback */ void field_question (gchar * question, GCallback handler, gpointer data) { GtkWidget * dialog; dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("Are you sure ?")); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", question); gtk_window_set_title(GTK_WINDOW(dialog), _("Please confirm")); run_this_gtk_dialog (dialog, handler, data); } /*! \fn atom_selection * duplicate_ogl_selection (atom_selection * old_sel) \brief copy an atom selection \param old_sel the atom selection to copy */ atom_selection * duplicate_ogl_selection (atom_selection * old_sel) { int i, j; atom_in_selection * at, * bt; atom_selection * new_sel = g_malloc0(sizeof*new_sel); if (! old_sel -> selected) return new_sel; new_sel -> selected = old_sel -> selected; at = old_sel -> first; for (i=0; i< old_sel -> selected; i++) { if (! i) { new_sel -> first = new_atom_in_selection (at -> id, at -> sp); bt = new_sel -> first; new_sel -> last = NULL; } else { bt -> next = new_atom_in_selection (at -> id, at -> sp); bt -> next -> prev = bt; bt = bt -> next; } if (at -> next != NULL) at = at -> next; } bt -> next = NULL; new_sel -> last = bt; if (old_sel -> selected > 1 && old_sel -> selected < MAX_IN_SELECTION) { i = num_bonds (old_sel -> selected); new_sel -> selected_bonds = allocint (i); for (j=0; j selected_bonds[j] = old_sel -> selected_bonds[j]; } if (new_sel -> selected > 2) { i = num_angles (old_sel -> selected); new_sel -> selected_angles = allocint (i); for (j=0; j selected_angles[j] = old_sel -> selected_angles[j]; } if (new_sel -> selected > 3 && new_sel -> selected < MAX_IN_SELECTION-10) { i = num_dihedrals (old_sel -> selected); new_sel -> selected_dihedrals = allocint (i); for (j=0; j selected_dihedrals[j] = old_sel -> selected_dihedrals[j]; } } } } return new_sel; } /*! \fn void unselect_all_atoms (glwin * view) \brief remove all atom(s) from selection \param view the glwin the selection comes from */ void unselect_all_atoms (glwin * view) { int i, j, k; project * this_proj = get_project_by_id (view -> proj); for (i=0; i<2; i++) { save_all_selections (view, i); for (j=0; j steps; j++) { for (k=0; k natomes; k++) { if (j == view -> anim -> last -> img -> step) { if (this_proj -> atoms[j][k].pick[i]) { process_selected_atom (this_proj, view, k, 0, 0, i); } } else { this_proj -> atoms[j][k].pick[i] = FALSE; } } } update_all_selections (view, i); } init_default_shaders (view); } /*! \fn void restore_ogl_selection (glwin * view) \brief restore a saved atom selection \param view the glwin to restore the selection to */ void restore_ogl_selection (glwin * view) { int i, j, k, l; project * this_proj = get_project_by_id (view -> proj); unselect_all_atoms (view); for (i=0; i<2; i++) { view -> anim -> last -> img -> selected[i] = duplicate_ogl_selection (view -> tmp_sel[i]); if (view -> anim -> last -> img -> selected[i] -> selected) { atom_in_selection * at = view -> anim -> last -> img -> selected[i] -> first; while (at) { for (j=0; j steps; j++) { this_proj -> atoms[j][at -> id].pick[i] = TRUE; } at = at -> next; } } if (view -> stored_labels[i]) { for (j=1; j stored_labels[i][0]; j++) { k = view -> stored_labels[i][j]; for (l=0; l steps; l++) this_proj -> atoms[l][k].label[i] = TRUE; } g_free (view -> stored_labels[i]); view -> stored_labels[i] = NULL; } } init_default_shaders (view); if (check_label) { view -> labelled = check_label_numbers (this_proj, 2); update (view); } } /*! \fn void preserve_ogl_selection (glwin * view) \brief copy the atom selection, so that it can be re-used once the input assistant is closed. \param view the glwin the selection comes from */ void preserve_ogl_selection (glwin * view) { int h, i, j, k, l; project * this_proj = get_project_by_id (view -> proj); h = view -> anim -> last -> img -> step; k = 0; for (i=0; i<2; i++) { view -> tmp_sel[i] = duplicate_ogl_selection (view -> anim -> last -> img -> selected[i]); for (j=0; j<2; j++) { if (j && k) { view -> stored_labels[i] = allocint (k+1); view -> stored_labels[i][0] = k+1; } k = j; for (l=0; l natomes; l++) { if (this_proj -> atoms[h][l].label[i]) { if (j) { view -> stored_labels[i][k] = l; this_proj -> atoms[h][l].label[i] = FALSE; } k ++; } } } } unselect_all_atoms (view); } extern char * input_types[NINPUTS]; /*! \fn G_MODULE_EXPORT void create_field (GtkWidget * widg, gpointer data) \brief start an input creation assistant \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void create_field (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; int p = the_data -> a; int t = the_data -> b; // if a selection was made preserve it opengl_project_changed (p); preserve_ogl_selection (opengl_project -> modelgl); update (opengl_project -> modelgl); if (opengl_project -> steps > 1) { gchar * info = g_strdup_printf (_(" %s contains %d different sets of atomic coordinates. \n" " Please select the one to use to create the input file(s) \n" " Note that a new project will be generated for that purpose. \n"), opengl_project -> name, opengl_project -> steps); // preserve parameters int tmp_s = opengl_project -> modelgl -> anim -> last -> img -> step; int tmp_a = activep; int tmp_v = activev; tint t_data; t_data.a = p; t_data.b = iask (info, _("Enter the selected MD step: "), 5+opengl_project -> steps, opengl_project -> modelgl -> win); t_data.c = 1; g_free (info); // then change the MD step and select all atoms opengl_project -> modelgl -> anim -> last -> img -> step = t_data.b; selected_aspec = -1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & t_data); #else select_unselect_atoms (NULL, & t_data); #endif // create new project with selection force_mol = TRUE; create_new_project_using_data (opengl_project -> modelgl -> anim -> last -> img -> selected[0]); force_mol = FALSE; opengl_project -> modelgl -> anim -> last -> img -> step = tmp_s; restore_ogl_selection (opengl_project -> modelgl); // Set the new project to be use for input creation p = activep; preserve_ogl_selection (active_glwin); // restore old active project active_project_changed (tmp_a); opengl_project_changed (tmp_v); } switch (t) { case 0: // DLPOLY create_classical_force_field (p, 0); break; case 1: // LAMMPS create_classical_force_field (p, 1); break; case 2: create_qm_input_file (0, p, 0); break; case 3: create_qm_input_file (1, p, 0); break; case 4: create_qm_input_file (0, p, 1); break; case 5: create_qm_input_file (1, p, 1); break; } } atomes_1.3.1/src/calc/calc.h0000664000175000017500000000300715212624223015251 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file calc.h * @short Variable declarations for the MD input preparation assistants * @author Sébastien Le Roux */ /* * This header file: 'calc.h' * * Contains: - Variable declarations for the MD input preparation assistants */ #ifndef CALC_H_ #define CALC_H_ #define MAXDATAQM 7 extern GtkWidget * qm_assistant; extern project * qm_proj; extern glwin * qm_view; extern coord_info * qm_coord; extern GtkTextBuffer * qmbuffer[MAXDATAQM+2]; extern gboolean force_mol; extern int idopt; extern int icalc; extern int ident; extern int icomb; extern gboolean selection_confirmed; extern G_MODULE_EXPORT void confirm_selection (GtkDialog * dialog, gint response_id, gpointer data); extern void field_question (gchar * question, GCallback handler, gpointer data); #endif atomes_1.3.1/src/calc/dl_poly/0000775000175000017500000000000015212624223015640 5ustar lerouxlerouxatomes_1.3.1/src/calc/dl_poly/dlp_atom.c0000664000175000017500000006045515212624223017615 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_atom.c * @short Functions to handle atom selection(s) when creating a force field \n Functions to remove / add field atom from a force field * @author Sébastien Le Roux */ /* * This file: 'dlp_atom.c' * * Contains: * - The functions to handle atom selection(s) when creating a force field - The functions to remove / add field atom from a force field * * List of functions: void set_sensitive_atom (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void atom_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void clean_old_atom (field_atom* at, int atos, int * atid); void adjust_field_struct (int oid, int k, field_struct * olds); void merging_atoms (field_atom* to_merge, field_atom* to_remove, gboolean upda); G_MODULE_EXPORT void select_field_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void run_add_atom_dialog (GtkDialog * add_dialog, gint response_id, gpointer data); G_MODULE_EXPORT void run_select_atom_dialog (GtkDialog * select_dialog, gint response_id, gpointer data); G_MODULE_EXPORT void run_remove_atom_from_field_molecule (GtkDialog * rmol, gint response_id, gpointer data); G_MODULE_EXPORT void remove_atom_from_field_molecule (GSimpleAction * action, GVariant * parameter, gpointer data); */ #include "dlp_field.h" #include "calc.h" #include "interface.h" #include "glview.h" int active_sel; int * new_at; int ** sel_at; int a_ato; extern int * astr; extern int vdw_id; extern ColRGBA init_color (int id, int numid); field_atom* at_to_remove; GtkTreeViewColumn * ato_col[4]; GtkCellRenderer * ato_cell[4]; extern GtkWidget * remove_label; extern GtkCellRenderer * remove_renderer[5]; extern GtkTreeViewColumn * remove_col[5]; extern float val; extern float * val_at; extern void field_selection (int i, int viz, int lab, int aid); extern void field_unselect_all (); extern void compare_non_bonded (gchar * fatom); extern void init_all_impropers_inversions (int stru); extern void init_default_shaders (glwin * view); /*! \fn void set_sensitive_atom (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief field atom set renderer sensitivity in the DL-POLY atom(s) selection tree model \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void set_sensitive_atom (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int m; gtk_tree_model_get (mod, iter, 0, & m, -1); if (a_ato && m-1 != new_at[0]) { gtk_cell_renderer_set_visible (renderer, FALSE); } else { gtk_cell_renderer_set_visible (renderer, TRUE); } } /*! \fn void atom_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief field atom set renderer color and markup in the DL-POLY atom(s) selection tree model \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void atom_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; gtk_tree_model_get (mod, iter, 3, & j, -1); gtk_tree_model_get (mod, iter, 0, & i, -1); set_renderer_color (j, renderer, init_color (i, num_field_objects)); } /*! \fn G_MODULE_EXPORT void select_field_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select field atom toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void select_field_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, j; GtkTreeStore ** model = (GtkTreeStore **)data; GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(* model), & iter, path); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { toviz.c = 0; tmp_fbt = get_active_atom (tmp_fmol -> id, new_at[a_ato-1]); for (j=0; j num; j++) field_selection (tmp_fbt -> list[j], FALSE, FALSE, new_at[a_ato-1]); new_at[a_ato-1] = -1; a_ato --; gtk_tree_store_set (* model, & iter, 3, 0, -1); } else { a_ato ++; gtk_tree_store_set (* model, & iter, 3, 1, -1); gtk_tree_model_get (GTK_TREE_MODEL(* model), & iter, 0, & i, -1); new_at[a_ato-1] = i-1; toviz.c = 1; tmp_fbt = get_active_atom (tmp_fmol -> id, new_at[a_ato-1]); for (j=0; j num; j++) field_selection (tmp_fbt -> list[j], TRUE, TRUE, new_at[a_ato-1]); } init_default_shaders (tmp_view); gtk_tree_view_column_set_cell_data_func (remove_col[3], remove_renderer[3], set_sensitive_atom, NULL, NULL); i = combo_get_active (combo_mol[0]); if (new_at[0] == -1) { gtk_label_set_text (GTK_LABEL(remove_label), remove_text(-2, 0, at_to_remove -> name)); } else { gtk_label_set_text (GTK_LABEL(remove_label), remove_text(i, new_at[0], at_to_remove -> name)); } gtk_label_set_use_markup (GTK_LABEL(remove_label), TRUE); } /*! \fn void clean_old_atom (field_atom* at, int atos, int * atid) \brief remove atom list from field atom \param at the field atom \param atos the number of atom(s) to remove \param atid the list of atom(s) id to remove */ void clean_old_atom (field_atom* at, int atos, int * atid) { int h, i, j, k, l, m; gboolean save; h = at -> num - atos*tmp_fmol -> multi; int * tlist = allocint (h); int * dlist = allocint (h); j = -1; for (i=0; i < at -> num; i++) { save = TRUE; for (k=0; k list_id[i] == atid[k]) { save = FALSE; break; } } if (save) { j ++; tlist[j] = at -> list[i]; dlist[j] = at -> list_id[i]; } } at -> num = h; g_free (at -> list); at -> list = duplicate_int (h, tlist); g_free (at -> list_id); at -> list_id = duplicate_int (h, dlist); for (i=0; i list[i]; l = at -> list_id[i]; for (m=0; m< tmp_fmol -> multi; m++) { if (tmp_proj -> atoms[0][k].coord[2] == tmp_fmol -> fragments[m]) break; } tmp_fmol -> atoms_id[l][m].b = i; } g_free (tlist); g_free (dlist); } // extern void print_all_field_struct (field_molecule * mol, int str); /*! \fn void adjust_field_struct (int oid, int k, field_struct * olds) \brief adjust field molecule structural property \param oid the target field atom type \param k the type of structural property to adjust \param olds the field molecule structural property to adjust */ void adjust_field_struct (int oid, int k, field_struct * olds) { int i, j; gboolean doit; field_struct * str; i = struct_id(k); int * aids = allocint (i); while (olds) { doit = TRUE; if (oid < 0) { for (j=0; j aid[j]; } else { for (j=0; j aid[j] < oid) { aids[j] = olds -> aid[j]; } else if (olds -> aid[j] > oid) { aids[j] = olds -> aid[j] - 1; } else { doit = FALSE; } } } if (doit) { j = get_struct_id_from_atom_id (k, aids); if (j > 0) { str = get_active_struct (k, tmp_fmol -> id, j-1); str -> def = duplicate_field_prop (olds -> def, k); if (olds -> other) { duplicate_other_prop (oid, olds, str); } } } olds = olds -> next; } // if (k == 0) print_all_field_struct (tmp_fmol, k); g_free (aids); } /*! \fn G_MODULE_EXPORT void run_add_atom_dialog (GtkDialog * add_dialog, gint response_id, gpointer data) \brief DL-POLY force field atom selection - running the dialog \param add_dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_add_atom_dialog (GtkDialog * add_dialog, gint response_id, gpointer data) { gboolean done = FALSE; selection_confirmed = FALSE; int i, j, k; gchar * str; switch (response_id) { case GTK_RESPONSE_APPLY: if (a_ato > 0 && a_ato < tmp_fat -> num / tmp_fmol -> multi) { if (a_ato > 1) { str = g_strdup_printf (_("%d atoms have been selected !"), a_ato); str = g_strdup_printf (_("%s\nConfirm this choice and create a new field atom to describe them ?"), str); } else { str = g_strdup_printf (_("A single atom has been selected !")); str = g_strdup_printf (_("%s\nIs this correct, create a new field atom to describe it ?"), str); } field_question (str, G_CALLBACK(confirm_selection), NULL); if (selection_confirmed) { done = TRUE; i = combo_get_active (combo_mol[0]); tmp_fbt = get_active_atom (i, tmp_fmol -> atoms-1); new_at = allocint (a_ato); j = 0; for (k=0; k num/tmp_fmol -> multi; k++) { if (sel_at[1][k]) { new_at[j] = sel_at[0][k]; j ++; } } tmp_fbt -> next = init_field_atom (tmp_fmol -> atoms, OTHER, tmp_fat -> sp, a_ato*tmp_fmol -> multi, -1, new_at); tmp_fbt -> next -> prev = g_malloc0(sizeof*tmp_fbt -> next -> prev); tmp_fbt -> next -> prev = tmp_fbt; tmp_fmol -> atoms ++; clean_old_atom (tmp_fat, a_ato, new_at); g_free (new_at); field_struct * struct_saved[8]; for (k=0; k<8; k++) { struct_saved[k] = duplicate_field_struct_list (tmp_fmol -> first_struct[k], FALSE); } init_all_field_struct (FALSE); // Cross check saved vs. new struct for (k=0; k<8; k++) { adjust_field_struct (-1, k, struct_saved[k]); clean_field_struct_list (struct_saved[k]); } // Update non bonded interactions compare_non_bonded (tmp_fbt -> next -> name); } } break; default: done = TRUE; break; } if (done) { destroy_this_dialog (add_dialog); field_unselect_all (); update_field_trees (); } } /*! \fn G_MODULE_EXPORT void run_select_atom_dialog (GtkDialog * select_dialog, gint response_id, gpointer data) \brief DL-POLY force field atom selection - creating the dialog \param select_dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_select_atom_dialog (GtkDialog * select_dialog, gint response_id, gpointer data) { int sid = GPOINTER_TO_INT (data); gboolean done = FALSE; gboolean redone; gboolean save; gchar * str; int i, j, k, l; redone = FALSE; save = FALSE; switch (response_id) { case GTK_RESPONSE_APPLY: if (sid == 6 || sid == 7) { i = sid - 6; if (tmp_fpmf -> num[i] > 0) { k = 0; for (j=0; j mol -> natoms; j++) { if (sel_at[0][j]) k ++; } } else { k = a_ato; } } else if (sid == 8) { if (tmp_frig -> num > 0) { k = 0; for (j=0; j mol -> natoms; j++) { if (sel_at[0][j]) k ++; } } else { k = a_ato; } } else { k = a_ato; } if (k > 1) { if (sid < 2 || sid > 4) { str = g_strdup_printf (_("%d atoms selected !\nIs this correct ?"), k); } else { str = g_strdup_printf (_("%d atoms selected !\nOnly a single atom is required !"), k); redone = TRUE; } } else if (k == 1) { switch (sid) { case 1: str = g_strdup_printf (_("A single atom selected !\nIs this correct ?")); break; default: done = TRUE; save = TRUE; break; } } else { str = g_strdup_printf (_("No atom selected !\nIs this correct ?")); } if (! done) { selection_confirmed = FALSE; field_question (str, G_CALLBACK(confirm_selection), NULL); g_free (str); if (selection_confirmed && ! redone) { done = TRUE; save = TRUE; } } break; default: done = TRUE; break; } if (done) { destroy_this_dialog (select_dialog); if (save) { if (sid == 1) { tmp_fat -> frozen = a_ato; for (i=0; i < tmp_fat -> num/tmp_fmol -> multi; i++) { j = sel_at[0][i]; k = sel_at[1][i]; for (l=0; l num; l++) { if (tmp_fat -> list_id[l] == j) { tmp_fat -> frozen_id[l] = k; } } } } else if ((sid > 1 && sid < 6) || sid == 9) { for (j=0; j mol -> natoms; j++) if (sel_at[0][j]) break; switch (sid) { case 2: tmp_fshell -> ia[0] = j+1; break; case 3: tmp_fshell -> ia[1] = j+1; break; case 4: tmp_fcons -> ia[0] = j+1; break; case 5: tmp_fcons -> ia[1] = j+1; break; case 9: tmp_ftet -> num = j+1; break; } } else if (sid == 6 || sid == 7) { tmp_fpmf -> num[i] = k; tmp_fpmf -> list[i] = NULL; tmp_fpmf -> weight[i] = NULL; if (k > 0) { tmp_fpmf -> list[i] = allocint (tmp_fpmf -> num[i]); tmp_fpmf -> weight[i] = allocfloat (tmp_fpmf -> num[i]); k = -1; for (j=0; j mol -> natoms; j++) { if (sel_at[0][j]) { k ++; tmp_fpmf -> list[i][k] = j; tmp_fpmf -> weight[i][k] = val_at[j]; } } } } else if (sid == 8) { tmp_frig -> num = k; tmp_frig -> list = NULL; if (k > 0) { tmp_frig -> list = allocint (tmp_frig -> num); k = -1; for (j=0; j mol -> natoms; j++) { if (sel_at[0][j]) { k ++; tmp_frig -> list[k] = j; } } } } else if (sid > 10 && sid < SEXTERN) { i = sid - 11; tmp_fbody -> na[i] = get_active_body (vdw_id, 0)-> na[0]; tmp_fbody -> a[i] = duplicate_int (get_active_body (vdw_id, 0) -> na[0], get_active_body (vdw_id, 0)-> a[0]); tmp_fbody -> ma[i] = duplicate_int (get_active_body (vdw_id, 0)-> na[0], get_active_body (vdw_id, 0)-> ma[0]); } } field_unselect_all (); } } /*! \fn void merging_atoms (field_atom* to_merge, field_atom* to_remove, gboolean upda) \brief merge the field atom to remove with already other field atom \param to_merge the field atom to merge the atom to remove with \param to_remove the field atom to remove \param upda update field atom(s) data lists */ void merging_atoms (field_atom* to_merge, field_atom* to_remove, gboolean upda) { int * tmp_ato = allocint (to_merge -> num + to_remove -> num); int * tmp_atd = allocint (to_merge -> num + to_remove -> num); int * tmp_fre = allocint (to_merge -> num + to_remove -> num); int i, j, k, l; i = to_merge -> num + to_remove -> num; for (j=0; j num; j++) { tmp_ato[j] = to_merge -> list[j]; tmp_atd[j] = to_merge -> list_id[j]; tmp_fre[j] = to_merge -> frozen_id[j]; } for (j=to_merge -> num; j list[j - to_merge -> num]; tmp_atd[j] = to_remove -> list_id[j - to_merge -> num]; tmp_fre[j] = to_remove -> frozen_id[j - to_merge -> num]; } int val_a, val_b, val_c; for (j=1; j-1; k--) { if (tmp_atd[k] < val_b) break; tmp_ato[k+1] = tmp_ato[k]; tmp_atd[k+1] = tmp_atd[k]; tmp_fre[k+1] = tmp_fre[k]; } tmp_ato[k+1] = val_a; tmp_atd[k+1] = val_b; tmp_fre[k+1] = val_c; } to_merge -> num = i; g_free (to_merge -> list); to_merge -> list = duplicate_int (to_merge -> num, tmp_ato); g_free (tmp_ato); g_free (to_merge -> list_id); to_merge -> list_id = duplicate_int (to_merge -> num, tmp_atd); g_free (tmp_atd); g_free (to_merge -> frozen_id); to_merge -> frozen_id = duplicate_int (to_merge -> num, tmp_fre); g_free (tmp_fre); if (upda) { for (i=0; i num; i++) { j = to_merge -> list[i]; k = to_merge -> list_id[i]; for (l=0; l< tmp_fmol -> multi; l++) { if (tmp_proj -> atoms[0][j].coord[2] == tmp_fmol -> fragments[l]) break; } tmp_fmol -> atoms_id[k][l].a = to_merge -> id; tmp_fmol -> atoms_id[k][l].b = i; tmp_proj -> atoms[0][j].faid = to_merge -> id; } } } /*! \fn G_MODULE_EXPORT void run_remove_atom_from_field_molecule (GtkDialog * rmol, gint response_id, gpointer data) \brief remove atom from field molecule - running the dialog \param rmol the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_remove_atom_from_field_molecule (GtkDialog * rmol, gint response_id, gpointer data) { int i, j, k; gboolean done = FALSE; gchar * str; switch (response_id) { case GTK_RESPONSE_APPLY: if (a_ato) { i = combo_get_active (combo_mol[0]); field_atom* to_merge = get_active_atom(i, new_at[0]); str = g_strdup_printf (_("Merging with atom N°%d - %s !\nIs this correct ?"), new_at[0]+1, to_merge -> name); selection_confirmed = FALSE; field_question (str, G_CALLBACK(confirm_selection), NULL); g_free (str); if (selection_confirmed) { done = TRUE; merging_atoms (to_merge, at_to_remove, TRUE); field_struct * struct_saved[8]; for (k=0; k<8; k++) { struct_saved[k] = duplicate_field_struct_list (tmp_fmol -> first_struct[k], FALSE); } // Modify the atom list j = at_to_remove -> id; if (at_to_remove -> prev == NULL) { tmp_fmol -> first_atom = at_to_remove -> next; tmp_fmol -> first_atom -> prev = NULL; } else if (at_to_remove -> next == NULL) { tmp_fct = at_to_remove -> prev; tmp_fct -> next = NULL; } else { tmp_fct -> next = at_to_remove -> next; at_to_remove -> next -> prev = tmp_fct; } // Finally clearing atom id tmp_fct = tmp_fmol -> first_atom; for (k=0; k atoms; k++) { tmp_fct -> id = k; if (tmp_fct -> next != NULL) tmp_fct = tmp_fct -> next; } tmp_fmol -> atoms --; init_all_field_struct (FALSE); // Cross check saved vs. new struct for (k=0; k<8; k++) { adjust_field_struct (j, k, struct_saved[k]); clean_field_struct_list (struct_saved[k]); } // Non-bonded interactions: compare_non_bonded (to_merge -> name); } } break; default: done = TRUE; break; } if (done) destroy_this_dialog (rmol); } /*! \fn G_MODULE_EXPORT void remove_atom_from_field_molecule (GSimpleAction * action, GVariant * parameter, gpointer data) \brief remove atom from field molecule - creating the dialog \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void remove_atom_from_field_molecule (GSimpleAction * action, GVariant * parameter, gpointer data) { at_to_remove = (field_atom*) data; int i, j; field_object = 1; gchar * str = g_strdup_printf (_("Select the field atom to merge atom \"%s\" with"), at_to_remove -> name); GtkWidget * rmol = dialogmodal (str, GTK_WINDOW(field_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(rmol), _("Apply"), GTK_RESPONSE_APPLY); GtkWidget * remove_tree = NULL; GtkTreeIter iter; gchar * mol_title[4] = {i18n("Id."), i18n("Name"), i18n("Number"), i18n("Viz.3D & Merge with")}; gchar * ctype[4] = {"text", "text", "text", "active"}; GType col_type[4] = {G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN}; a_ato = 0; new_at = allocint (1); GtkTreeStore * remove_model = gtk_tree_store_newv (4, col_type); remove_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(remove_model)); num_field_objects = tmp_fmol -> atoms; for (i=0; i<4; i++) { if (i < 3) { remove_renderer[i] = gtk_cell_renderer_text_new (); } else { remove_renderer[i] = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE(remove_renderer[i]), TRUE); g_signal_connect (G_OBJECT(remove_renderer[i]), "toggled", G_CALLBACK(select_field_atom), & remove_model); } remove_col[i] = gtk_tree_view_column_new_with_attributes (_(mol_title[i]), remove_renderer[i], ctype[i], i, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(remove_tree), remove_col[i]); if (i < 3) { gtk_tree_view_column_set_cell_data_func (remove_col[i], remove_renderer[i], atom_set_color_and_markup, NULL, NULL); } } // Clean 3D viz field_unselect_all (); // fill model j = 0; tmp_fat = tmp_fmol -> first_atom; for (i=0; i atoms; i++) { if (tmp_fat -> sp == at_to_remove -> sp && tmp_fat -> id != at_to_remove -> id) { j ++; gtk_tree_store_append (remove_model, & iter, NULL); gtk_tree_store_set (remove_model, & iter, 0, tmp_fat -> id+1, 1, tmp_fat -> name, 2, tmp_fat -> num, 3, 0, -1); } if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } g_object_unref (remove_model); gtk_tree_view_expand_all (GTK_TREE_VIEW(remove_tree)); i = ((j+1)*40 < 500) ? (j+1)*40 : 500; GtkWidget * scrollsets = create_scroll (dialog_get_content_area (rmol), 375, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, remove_tree); remove_label = markup_label(remove_text(-2, 0, at_to_remove -> name), -1, -1, 0.5, 0.5); gtk_label_set_use_markup (GTK_LABEL(remove_label), TRUE); add_box_child_start (GTK_ORIENTATION_VERTICAL, dialog_get_content_area (rmol), remove_label, FALSE, FALSE, 0); run_this_gtk_dialog (rmol, G_CALLBACK(run_remove_atom_from_field_molecule), NULL); field_unselect_all (); update_field_trees (); } atomes_1.3.1/src/calc/dl_poly/dlp_ff_match.c0000664000175000017500000015304615212624223020423 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_ff_match.c * @short Functions the list the available database parameters for the atom database window * @author Sébastien Le Roux */ /* * This file: 'dlp_ff_match.c' * * Contains: * - The functions the list the available database parameters for the atom database window * * List of functions: int this_body_has_atom (field_nth_body * body, char * name); gboolean is_this_object_a_match (int fsid, int nat, int * ffc, int * fpar); static gboolean update_rend (GtkTreeModel * model, GtkTreeIter * iter, gpointer data); G_MODULE_EXPORT gboolean on_ff_button_event (GtkWidget * widget, GdkEvent * event, gpointer data); gchar * get_this_prop_param (int sid, int key, int calc, int newp, float * val); gchar * get_this_prop_string (int sid, int oid, int type, int calc); void update_result_list (int sid, field_object_match * new_match); void fill_update_model (GtkTreeStore * store); void get_update_tree_data (GtkWidget * tree, gpointer data, GtkTreePath * path); void ff_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void ff_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void win_update_tree (GtkWidget * vbx); void look_up_this_field_object (int fsid, int fpid, int ssid, int nat, int * fsp, int * fat); void check_this_fprop (int fsid, int fpid, int ssid, int * fat, int * fsp); void check_atom_for_updates (); G_MODULE_EXPORT void changed_update_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data); G_MODULE_EXPORT void on_ff_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_ff_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_toggle_update (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void run_check_atom_for_updates (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void changed_field_prop_combo (GtkComboBox * box, gpointer data); GtkWidget * create_update_tree (); GtkWidget * create_field_prop_combo (int f, int is_moy); GtkTreeModel * global_render_tree (); field_data * get_ff_data (int i, int j); field_object_match * duplicate_match (field_object_match * old_m); dint get_visible (gboolean result, gchar * the_name); */ #include "global.h" #include "interface.h" #include "glwindow.h" #include "glview.h" #include "dlp_field.h" extern int * atoms_id; extern int ** atoms_id_list; extern int * field_objects; extern char *** ff_atoms; extern char * fvars_bond[2][FBONDS][FBONDS_P]; extern char * fvars_angle[2][FANGLES][FANGLES_P]; extern char * fvars_dihedral[2][FDIHEDRAL][FDIHEDRAL_P]; extern char * fvars_inversion[2][FINVERS][FINVERS_P]; extern char * fvars_vdw[2][FVDW][FVDW_P]; extern gchar * felemts[MAXDATA+1]; extern GtkWidget * afftype; extern GtkWidget * field_key_combo; extern GtkWidget * p_box; extern GtkWidget * param_box; field_object_match * up_match[9]; field_object_match * tmp_match, * other_match; field_data * ff_data; extern GtkWidget * param_prop_param_box (int pid); extern gchar * get_this_vdw_string (); extern G_MODULE_EXPORT void markup_action_renderer (GtkCellRendererCombo * cell, GtkCellEditable * editable, gchar * path_string, gpointer data); extern int get_num_vdw_max (); extern gchar * get_body_element_name (field_nth_body * body, int aid, int nbd); #define NUCOL 8 GtkTreeViewColumn * update_col[NUCOL]; GtkCellRenderer * update_renderer[NUCOL]; GtkWidget * update_tree; GtkWidget * ff_p_combo[2]; GtkTreeStore * update_model; dint up; GtkTreeModel * prop_to_up; field_object_match * tmp_res[9]; dint pup[2]; gboolean vdw_same_atom; /*! \fn gboolean is_this_object_a_match (int fsid, int nat, int * ffc, int * fpar) \brief check if object matches parameters from the database \param fsid the type of field property \param nat the number of atoms for this field property \param ffc object data \param fpar field database data */ gboolean is_this_object_a_match (int fsid, int nat, int * ffc, int * fpar) { int i, j; int has_x = 0; gboolean a_match, b_match; for (i=0; i0", "k'/3", "k''/4"}; char * vanq[4] = {"k/2", "θ0", "k'/3", "k''/4"}; char * vdwij[2] = {"Ɛi", "r0i/2.0"}; switch (sid/2) { case 0: if (newp && (key == 0 || key == 5)) { vars = (char **)vbdq; } else { vars = (char **)fvars_bond[key]; } break; case 1: if (newp && key < 2) { vars = (char **)vanq; } else { vars = (char **)fvars_angle[key]; } break; default: if (sid > 7) { if (newp && (tmp_field -> type <= CHARMMSI || tmp_field -> type > COMPASS) && ! calc) { vars = (char **)vdwij; } else { vars = (char **)fvars_vdw[key]; } } else if (sid < 7) { vars = (char **)fvars_dihedral[key]; } else { vars = (char **)fvars_inversion[key]; } break; } return g_strdup_printf ("%s pot. (%s)", dlp_to_translate(activef,(sid > 7) ? 10 : sid+2, key) ? _(fnames[activef][(sid > 7) ? 10 : sid+2][key]) : fnames[activef][(sid > 7) ? 10 : sid+2][key], parameters_info ((sid > 7) ? 9 : sid+1, key, vars, val)); } /*! \fn gchar * get_this_prop_string (int sid, int oid, int type, int calc) \brief get property name \param sid the type of field property \param oid the number of atoms for this field property \param type the id of the force field database \param calc from the tree model (1) or from the selection combo box (0) */ gchar * get_this_prop_string (int sid, int oid, int type, int calc) { gchar * str; int i, j, k, l; i = (sid > 7) ? 1 : struct_id (sid+7); ff_data = get_ff_data (sid, type); float * val; for (j=0; j atoms_id[oid][j]; if (j > 0) { str = g_strdup_printf ("%s-%s", str, (k < 0) ? "X" : ff_atoms[k][2]); } else { str = g_strdup_printf ("%s", (k < 0) ? "X" : ff_atoms[k][2]); } } j = abs(ff_data -> key)-1; k = fvalues[activef][(sid < 8) ? sid+1 : 9][j]; val = allocfloat (k); for (l=0; l param[oid][l]; // Here if (sid == 8 && calc) { if (tmp_field -> type <= CHARMMSI || tmp_field -> type > COMPASS) { float v = sqrt(ff_data -> param[oid][0]*ff_data -> param[oid][0]); val[0] = v*pow((double)(ff_data -> param[oid][1] + ff_data -> param[oid][1]), 12.0); val[1] = 2.0 * v * pow((double)(ff_data -> param[oid][1] + ff_data -> param[oid][1]), 6.0); } else if (tmp_field -> type <= CVFF_AUG) { for (l=0; l<2; l++) val[l] = sqrt(ff_data -> param[oid][l]*ff_data -> param[oid][l]); } } str = g_strdup_printf ("%s: %s", str, get_this_prop_param(sid, j, calc, 1, val)); g_free (val); return str; } /*! \fn field_object_match * duplicate_match (field_object_match * old_m) \brief create a copy of a field match \param old_m the field match to duplicate */ field_object_match * duplicate_match (field_object_match * old_m) { field_object_match * new_m = g_malloc0(sizeof*new_m); new_m -> id = old_m -> id; new_m -> obj = old_m -> obj; new_m -> oid = old_m -> oid; new_m -> type = old_m -> type; new_m -> use = old_m -> use; return new_m; } /*! \fn void update_result_list (int sid, field_object_match * new_match) \brief update avialable parameter list \param sid the type of field property \param new_match the field match */ void update_result_list (int sid, field_object_match * new_match) { if (tmp_res[sid]) { field_object_match * map, * mbp; map = duplicate_match (new_match); mbp = tmp_res[sid]; while (mbp) { if (mbp -> id == map -> id && mbp -> obj == map -> obj) { // Changing a value already saved if (mbp -> next && mbp -> prev) { mbp -> prev -> next = map; map -> prev = mbp -> prev; map -> next = mbp -> next; mbp -> next -> prev = map; } else if (mbp -> next) { mbp -> next -> prev = map; map -> next = mbp -> next; } else if (mbp -> prev) { mbp -> prev -> next = map; map -> prev = mbp -> prev; } } else if (! mbp -> next) { mbp -> next = map; map -> prev = mbp -> next; mbp = mbp -> next; } mbp = mbp -> next; } } else { tmp_res[sid] = duplicate_match (new_match); } } /*! \fn void fill_update_model (GtkTreeStore * store) \brief fill the parameters database tree store \param store the GtkTreeStore to fill */ void fill_update_model (GtkTreeStore * store) { GtkTreeIter prop_level, struct_level; field_atom* upat; int g, h, i, j; gchar * str; gchar * stra, * strb, * strc, * strd, * stre; for (i=0; i<9; i++) { g = (i==8) ? i+1 : i; h = (i==8) ? 2 : struct_id (i+7); if (up_match[i]) { if (g%2 && i < 6) { if (i == 3 && tmp_field -> type > AMBER99 && tmp_field -> type < CVFF_AUG) { str = g_strdup_printf ("%s (2,3)", _(felemts[8+g])); } else { str = g_strdup_printf ("%s (2)", _(felemts[8+g])); } } else if (i < 8) { if (i == 2 && tmp_field -> type > AMBER99 && tmp_field -> type < CVFF_AUG) { str = g_strdup_printf ("%s (3)", _(felemts[8+g])); } else { str = g_strdup_printf ("%s", _(felemts[8+g])); } } else if (tmp_field -> type <= AMBER99 || tmp_field -> type > COMPASS) { str = g_strdup_printf ("%s (3)", _(felemts[8+i])); } else if (tmp_field -> type <= CHARMMSI) { str = g_strdup_printf ("%s (4)", _(felemts[8+i])); } else { str = g_strdup_printf ("%s", _(felemts[8+i])); } gtk_tree_store_append (store, & prop_level, NULL); gtk_tree_store_set (store, & prop_level, 0, -(i+1), 1, 0, 2, str, 3, NULL, 4, NULL, 5, NULL, 6, NULL, NUCOL-1, FALSE, -1); g_free (str); tmp_match = up_match[i]; while (tmp_match) { if (i<8) { tmp_fstr = get_active_struct (i, tmp_fmol -> id, tmp_match -> id); if (tmp_match -> obj > 0) { tmp_fprop = get_active_prop (tmp_fstr -> other, tmp_match -> obj - 1); tmp_match -> use = TRUE; } else { tmp_fprop = tmp_fstr -> def; tmp_match -> use = TRUE; } } else { tmp_fbody = get_active_body (tmp_match -> obj, 0); tmp_match -> use = TRUE; } for (j=0; j id, tmp_fstr -> aid[j]); } else { upat = get_active_atom (tmp_fbody -> ma[j][0], tmp_fbody -> a[j][0]); } if (j > 0) { stra = g_strdup_printf ("%s - ""%s""", stra, upat -> name); if (tmp_match -> obj > 0 && i < 8) strb = g_strdup_printf ("%s-%d", strb, tmp_fprop -> aid[j]+1); strc = g_strdup_printf ("%s - %s", strc, tmp_proj -> chemistry -> label[upat -> sp]); } else { stra = g_strdup_printf ("""%s""", upat -> name); if (tmp_match -> obj > 0 && i < 8) strb = g_strdup_printf ("%d", tmp_fprop -> aid[j]+1); strc = g_strdup_printf ("%s", tmp_proj -> chemistry -> label[upat -> sp]); } } other_match = tmp_match; if (tmp_match -> use) { update_result_list (i, tmp_match); strd = g_strdup_printf ("%s", get_this_prop_string (i, other_match -> oid, other_match -> type, 1)); } else { strd = g_strdup_printf (_("Select ...")); } if (i < 8) { stre = g_strdup_printf ("%s", get_this_prop_param(i, tmp_fprop -> key, 1, 0, tmp_fprop -> val)); } else { stre = g_strdup_printf ("%s", get_this_prop_param(i, tmp_fbody -> key, 1, 0, tmp_fbody -> val)); } if (tmp_match -> obj > 0 && i < 8) { str = g_strdup_printf ("%s", strb); g_free (strb); } else { str = g_strdup_printf ("%s (*)", stra); } gtk_tree_store_append (store, & struct_level, & prop_level); while (other_match && other_match -> id == tmp_match -> id && other_match -> obj == tmp_match -> obj) { other_match = other_match -> next; } gtk_tree_store_set (store, & struct_level, 0, i, 1, (i == 8) ? tmp_match -> obj : tmp_match -> id, 2, NULL, 3, str, 4, strc, 5, strd, 6, stre, NUCOL-1, tmp_match -> use, -1); g_free (str); g_free (stra); g_free (strc); g_free (strd); g_free (stre); tmp_match = other_match; } } } } /*! \fn GtkTreeModel * global_render_tree () \brief create the field property combo box model that contains the list of available parameters */ GtkTreeModel * global_render_tree () { int i; GtkTreeIter iter; GtkTreeStore * store; gchar * str; store = gtk_tree_store_new (1, G_TYPE_STRING); gtk_tree_store_append (store, & iter, NULL); gtk_tree_store_set (store, & iter, 0, _("Select ..."), -1); for (i=0; i<9; i++) { if (up_match[i]) { other_match = up_match[i]; while (other_match) { str = g_strdup_printf ("%s", get_this_prop_string (i, other_match -> oid, other_match -> type, 1)); gtk_tree_store_append (store, & iter, NULL); gtk_tree_store_set (store, & iter, 0, str, -1); g_free (str); other_match = other_match -> next; } } } return gtk_tree_model_filter_new(GTK_TREE_MODEL (store), NULL); } /*! \fn dint get_visible (gboolean result, gchar * the_name) \brief get cell renderer visibility poitner \param result is renderer visible or not ? \param the_name the target name */ dint get_visible (gboolean result, gchar * the_name) { dint vis; gchar * str; gboolean done = FALSE; // With the "Select ..." path starts at 1 and not 0 vis.a = vis.b = 0; int i; for (i=0; i<9; i++) { if (up_match[i]) { other_match = up_match[i]; while (other_match) { if (i == up.a && ((i < 8 && other_match -> id == up.b) || (i == 8 && other_match -> obj == up.b))) { if (result) { str = g_strdup_printf ("%s", get_this_prop_string (i, other_match -> oid, other_match -> type, 1)); if (g_strcmp0 (str, the_name) == 0) { vis.a = -1; return vis; } } vis.b ++; done = TRUE; } else if (! done) { vis.a ++; } other_match = other_match -> next; } if (done) break; } } return vis; } /*! \fn G_MODULE_EXPORT void changed_update_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data) \brief change combo box in tree model callback \param combo the cell renderer combo box \param path_string the path in the tree model \param iter the tree iter \param data the associated data pointer */ G_MODULE_EXPORT void changed_update_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data) { GValue val = {0, }; GObject * cmodel; dint res; g_object_get (combo, "model", & cmodel, NULL); gtk_tree_model_get_value ((GtkTreeModel *)cmodel, iter, 0, & val); if (gtk_tree_model_get_iter_from_string ((GtkTreeModel *)update_model, iter, path_string)) { gchar * str = g_strdup_printf ("%s", (char *)g_value_get_string (& val)); gtk_tree_store_set (update_model, iter, 5, str, -1); res = get_visible (TRUE, str); if (res.a < 0) { update_result_list (up.a, other_match); } } } /*! \fn void get_update_tree_data (GtkWidget * tree, gpointer data, GtkTreePath * path) \brief update force field parameters database tree model data \param tree the GtkWidget sending the signal \param data the associated data pointer \param path the path in the tree model */ void get_update_tree_data (GtkWidget * tree, gpointer data, GtkTreePath * path) { GtkTreeModel * tmodel = gtk_tree_view_get_model (GTK_TREE_VIEW(tree)); GtkTreeIter update_iter; up.a = up.b = -1; if (gtk_tree_model_get_iter (tmodel, & update_iter, path)) { gtk_tree_model_get (tmodel, & update_iter, 0, & up.a, 1, & up.b, -1); gtk_tree_model_filter_refilter ((GtkTreeModelFilter *)prop_to_up); } } #ifdef GTK4 /*! \fn void ff_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief handle mouse button event on the DL-POLY force field parameters database window GTK4 \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void ff_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) #else /*! \fn void ff_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief handle mouse button event on the DL-POLY force field parameters database window GTK3 \param event the GdkEvent triggering the signal \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void ff_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) #endif { if (event_type == GDK_BUTTON_PRESS) { GtkTreePath * path; GtkTreeViewColumn * column; int i, j; #ifdef GTK4 int e_x, e_y; gtk_tree_view_convert_widget_to_bin_window_coords (GTK_TREE_VIEW(update_tree), event_x, event_y, & e_x, & e_y); gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(update_tree), e_x, e_y, & path, & column, & i, & j); #else gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(update_tree), event_x, event_y, & path, & column, & i, & j); #endif if (path != NULL) { get_update_tree_data (update_tree, data, path); } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_ff_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button pressed signal on the DL-POLY force field parameters database window \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_ff_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { ff_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_PRESS, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } /*! \fn G_MODULE_EXPORT void on_ff_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button released signal on the DL-POLY force field parameters database window \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_ff_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { ff_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_RELEASE, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } #else /*! \fn G_MODULE_EXPORT gboolean on_ff_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) \brief mouse button event on the DL-POLY force field parameters database window \param widget the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_ff_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) { GdkEventButton * bevent = (GdkEventButton *)event; ff_button_event (event, bevent -> x, bevent -> y, bevent -> button, bevent -> type, bevent -> time, data); return FALSE; } #endif /*! \fn G_MODULE_EXPORT void on_toggle_update (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select field parameter toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void on_toggle_update (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { GtkTreeIter iter; int i; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(update_model), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(update_model), & iter, 7, & i, -1); gchar * str; gtk_tree_model_get (GTK_TREE_MODEL(update_model), & iter, 5, & str, -1); dint res = get_visible(TRUE, str); g_free (str); if (res.a < 0) { tmp_match = tmp_res[up.a]; while (tmp_match) { if (tmp_match -> id == other_match -> id && tmp_match -> obj == other_match -> obj) { tmp_match -> use = ! i; break; } tmp_match = tmp_match -> next; } gtk_tree_store_set (update_model, & iter, 7, ! i, -1); } } /*! \fn static gboolean update_rend (GtkTreeModel * model, GtkTreeIter * iter, gpointer data) \brief udpate cell renderer visibility \param model the target GtkTreeModel \param iter the target tree iter \param data the associated data pointer */ static gboolean update_rend (GtkTreeModel * model, GtkTreeIter * iter, gpointer data) { GtkTreeIter upiter; dint vis; gchar * str; if (gtk_tree_model_get_iter_first(model, & upiter)) { GtkTreePath * path = gtk_tree_model_get_path(model, iter); str = gtk_tree_path_to_string(path); gtk_tree_path_free(path); if (g_strcmp0 (str, "0") == 0) return TRUE; vis = get_visible (FALSE, NULL); int p = (int)string_to_double ((gpointer)str); g_free (str); if (p > vis.a && p < vis.a+vis.b+1) return TRUE; } return FALSE; } /*! \fn void field_set_markup_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief field parameter set renderer markup and visibility in the parameter database selection tree model \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void field_set_markup_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & j, -1); k = (j < 0) ? 0 : 1; gtk_cell_renderer_set_visible (renderer, (i == 2) ? ! k : k); if ((j < 0 && i == 2) || (j>-1 && i != 7)) { set_renderer_markup (mod, iter, renderer, i); } } /*! \fn GtkWidget * create_update_tree () \brief create the parameters database tree model */ GtkWidget * create_update_tree () { int i; gchar * str; gchar * up_title[NUCOL]={" ", " ", i18n("Property"), i18n("Atoms"), i18n("Species"), i18n("parameters (1)"), i18n("Actual parameters (1)"), i18n("Update ?")}; GType up_type[NUCOL] = {G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN}; update_model = gtk_tree_store_newv (NUCOL, up_type); update_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(update_model)); for (i=0; i type], _(up_title[i])); } else { str = g_strdup_printf ("%s", (i > 1) ? _(up_title[i]) : up_title[i]); } if (i == 5) { update_renderer[i] = gtk_cell_renderer_combo_new(); prop_to_up = global_render_tree (); g_object_set (update_renderer[i], "model", prop_to_up, "text-column", 0, "has-entry", FALSE, "editable", TRUE, NULL); gtk_tree_model_filter_set_visible_func ((GtkTreeModelFilter *)prop_to_up, (GtkTreeModelFilterVisibleFunc)G_CALLBACK(update_rend), GTK_TREE_VIEW(update_tree), NULL); g_object_unref (prop_to_up); g_signal_connect (G_OBJECT(update_renderer[i]), "editing-started", G_CALLBACK(markup_action_renderer), NULL); g_signal_connect (G_OBJECT(update_renderer[i]), "changed", G_CALLBACK(changed_update_renderer), NULL); update_col[i] = gtk_tree_view_column_new_with_attributes (str, update_renderer[i], "text", i, NULL); } else if (i == NUCOL-1) { update_renderer[i] = gtk_cell_renderer_toggle_new (); update_col[i] = gtk_tree_view_column_new_with_attributes (str, update_renderer[i], "active", i, NULL); g_signal_connect (G_OBJECT(update_renderer[i]), "toggled", G_CALLBACK(on_toggle_update), NULL); } else { update_renderer[i] = gtk_cell_renderer_text_new(); update_col[i] = gtk_tree_view_column_new_with_attributes (str, update_renderer[i], "text", i, NULL); } g_free (str); if (i > 1) { gtk_tree_view_column_set_alignment (update_col[i], 0.5); gtk_tree_view_append_column(GTK_TREE_VIEW(update_tree), update_col[i]); gtk_tree_view_column_set_cell_data_func (update_col[i], update_renderer[i], field_set_markup_and_visible, GINT_TO_POINTER(i), NULL); } } for (i=0; i<9; i++) tmp_res[i] = NULL; fill_update_model (update_model); g_object_unref (update_model); GtkTreeSelection * update_select = gtk_tree_view_get_selection (GTK_TREE_VIEW(update_tree)); gtk_tree_selection_set_mode (update_select, GTK_SELECTION_SINGLE); #ifdef GTK4 add_widget_gesture_and_key_action (update_tree, "ff-button-pressed", G_CALLBACK(on_ff_button_pressed), NULL, "ff-button-released", G_CALLBACK(on_ff_button_released), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #else g_signal_connect (G_OBJECT(update_tree), "button_press_event", G_CALLBACK(on_ff_button_event), NULL); #endif return update_tree; } /*! \fn void win_update_tree (GtkWidget * vbx) \brief update the parameters database tree model \param vbx the GtkWidget sending the signal */ void win_update_tree (GtkWidget * vbx) { int i; update_tree = NULL; update_model = NULL; for (i=0; i-1", "kJ mol-1", "K B-1", i18n("DL_POLY internal units")}; gchar * str = g_strdup_printf (_("\t(*) Each force field element can be tuned separately, if not this default parameters will be used.\n" "\t(1) %s energy unit: %s, if required conversion to FIELD file energy unit will be performed upon selection.\n" "\t(2) Restraint parameters are duplicates of the non-restraint parameters.\n"), field_acro[tmp_field -> type], (ff_unit == 4) ? _(funits[ff_unit]) : funits[ff_unit]); i = 3; if (tmp_field -> type > AMBER99 && tmp_field -> type < CVFF) { str = g_strdup_printf (_("%s\t(%d) Urey-Bradley terms provided by the %s force field are ignored.\n"), str, i, field_acro[tmp_field -> type]); i ++; } if (tmp_field -> type <= CVFF_AUG || tmp_field -> type > COMPASS) { str = g_strdup_printf (_("%s\t(%d) In %s, 12-6 non-bonded interactions are evaluated using:"), str, i, field_acro[tmp_field -> type]); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); if (tmp_field -> type <= CVFF_AUG || tmp_field -> type > COMPASS) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, hbox, FALSE, FALSE, 0); if (tmp_field -> type < CVFF || tmp_field -> type > COMPASS) { str = g_strdup_printf (_("%s\nA and B are calculated using Ɛi/j and r0i/j provided by the force field parameters."), get_this_vdw_string()); if (tmp_field -> type > AMBER99) { str = g_strdup_printf (_("%s\nScaled 1-4 exclusion parameters, provided by the %s force field, are ignored."), str, field_acro[tmp_field -> type]); } } else { str = g_strdup_printf (_("%s\nA and B are calculated using Ai/j and Bi/j provided by the force field parameters."), get_this_vdw_string()); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 200); g_free (str); } } /*! \fn void look_up_this_field_object (int fsid, int fpid, int ssid, int nat, int * fsp, int * fat) \brief look up in database for this field property \param fsid the type of field property \param fpid global propert (0) or atom specific (> 0) \param ssid the id of the field property to check \param nat the number of atoms for this field property \param fat the list of field atom(s) \param fsp the list of the chemical species for the field atom(s) */ void look_up_this_field_object (int fsid, int fpid, int ssid, int nat, int * fsp, int * fat) { int i, j; tmp_obj_id = field_objects_id[(fsid < 6) ? fsid / 2 : fsid - 3]; while (tmp_obj_id) { i = tmp_obj_id -> oid; j = tmp_obj_id -> type; ff_data = get_ff_data (fsid, j); if (is_this_object_a_match (fsid, nat, fsp, ff_data -> atoms_z[i])) { if (is_this_object_a_match (fsid, nat, fat, ff_data -> atoms_id[i])) { if (up_match[fsid] == NULL) { up_match[fsid] = g_malloc0(sizeof*up_match[fsid]); tmp_match = up_match[fsid]; } else { tmp_match -> next = g_malloc0(sizeof*tmp_match); tmp_match = tmp_match -> next; } tmp_match -> id = ssid; tmp_match -> obj = fpid; tmp_match -> oid = i; tmp_match -> type = j; // g_debug ("Match :: fsid= %d, -> id = %d, -> obj = %d, -> oid = %d, -> type = %d", fsid, ssid, fpid, i, j); } } tmp_obj_id = tmp_obj_id -> next; } } /*! \fn void check_this_fprop (int fsid, int fpid, int ssid, int * fat, int * fsp) \brief check if the database offers parameters for a field property \param fsid the type of field property \param fpid global propert (0) or atom specific (> 0) \param ssid the id of the field property to check \param fat the list of field atom(s) \param fsp the list of the chemical species for the field atom(s) */ void check_this_fprop (int fsid, int fpid, int ssid, int * fat, int * fsp) { int i, j, k; int * ffat, * ffsp; gboolean update = TRUE; field_atom* tmpat; i = struct_id(fsid+7); for (j=0; j id, fat[j]); if (tmpat -> id != tmp_fat -> id) { if (tmpat -> afid < 0) { if (atoms_id[k] == 0 && extraz_id[(fsid < 6)? fsid/2: fsid-3][k] == 0) { update = FALSE; } } } } if (update) { // Is there any field data available ? // Check the field data for available parameters ffat = allocint (i); ffsp = allocint (i); for (j=0; j id, fat[j]) -> afid; ffsp[j] = tmp_proj -> chemistry -> chem_prop[CHEM_Z][get_active_atom (tmp_fmol -> id, fat[j]) -> sp]; } look_up_this_field_object (fsid, fpid, ssid, i, ffsp, ffat); g_free (ffat); g_free (ffsp); } } /*! \fn int this_body_has_atom (field_nth_body * body, char * name) \brief check if non bonded potential has this field atom \param body the non bonded potential to check \param name the name of the target field atom */ int this_body_has_atom (field_nth_body * body, char * name) { int i, j, k, l , m; m = 0; for (i=0; i<2; i++) { for (j=0; j na[i]; j++) { k = body -> ma[i][j]; l = body -> a[i][j]; if (g_strcmp0 (get_active_atom(k, l) -> name, name) == 0) m += (i+1); } } return m; } /*! \fn G_MODULE_EXPORT void run_check_atom_for_updates (GtkDialog * dialog, gint response_id, gpointer data) \brief check for parameters in the database to be used in the force field - running the dialog \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_check_atom_for_updates (GtkDialog * dialog, gint response_id, gpointer data) { int i, j, k, l, m; float v; gboolean update_vdw = FALSE; if (response_id == GTK_RESPONSE_APPLY) { for (i=0; i<9; i++) { if (tmp_res[i]) { tmp_match = other_match = tmp_res[i]; while (other_match) { if (tmp_match -> use) { if (i < 8) { tmp_fstr = get_active_struct (i, tmp_fmol -> id, tmp_match -> id); tmp_fprop = (tmp_match -> obj > 0) ? get_active_prop (tmp_fstr -> other, tmp_match -> obj - 1) : tmp_fstr -> def; g_free (tmp_fprop -> val); ff_data = get_ff_data (i, tmp_match -> type); tmp_fprop -> val = duplicate_float(ff_data -> npar, ff_data -> param[tmp_match -> oid]); // UNITS ! tmp_fprop -> fpid = tmp_match -> oid; tmp_fprop -> key = abs(ff_data -> key)-1; if ((i < 2 && (tmp_fprop -> key == 1 || tmp_fprop -> key == 5)) || ((i == 2 || i == 3) && tmp_fprop -> key < 2)) { for (l=0; l npar; l++) { if (l != 1) tmp_fprop -> val[l] *= (l+2 - l/3); } } if (ff_unit != tmp_field -> energy_unit) { v = internal_to_other[tmp_field -> energy_unit] / internal_to_other[ff_unit]; tmp_fprop -> val[0] = tmp_fprop -> val[0]*v; if ((i/2 == 1 && tmp_fprop -> key == 1) || (i/2 == 1 && tmp_fprop -> key == 3)) { tmp_fprop -> val[2] = tmp_fprop -> val[2]*v; tmp_fprop -> val[3] = tmp_fprop -> val[3]*v; } else if (i/2 == 0 && tmp_fprop -> key == 1) { tmp_fprop -> val[2] = tmp_fprop -> val[2]*v; } } tmp_fprop -> use = TRUE; } else { // Pot must be defined for the 2 atoms tmp_fbody = get_active_body (0, 0); ff_data = get_ff_data (i, tmp_match -> type); while (tmp_fbody) { update_vdw = FALSE; j = this_body_has_atom (tmp_fbody, tmp_fat -> name); k = tmp_match -> oid; if (j == 3) { tmp_fbody -> fpid[0] = tmp_fbody -> fpid[1] = k; j = l = k; update_vdw = TRUE; } else if (j) { j --; tmp_fbody -> fpid[j] = k; // Need to do something here ! l = (j) ? 0 : 1; update_vdw = FALSE; if (tmp_fbody -> fpid[l] > -1) { j = k; l = tmp_fbody -> fpid[l]; update_vdw = TRUE; } } if (update_vdw) { if (tmp_field -> type <= CHARMMSI || tmp_field -> type > COMPASS) { v = sqrt(ff_data -> param[j][0]*ff_data -> param[l][0]); tmp_fbody -> val[0] = v*pow((double)(ff_data -> param[j][1] + ff_data -> param[l][1]), 12.0); tmp_fbody -> val[1] = 2.0 * v * pow((double)(ff_data -> param[j][1] + ff_data -> param[l][1]), 6.0); } else if (tmp_field -> type <= CVFF_AUG) { for (m=0; m<2; m++) tmp_fbody -> val[m] = sqrt(ff_data -> param[j][m]*ff_data -> param[l][m]); } } tmp_fbody = tmp_fbody -> next; } } } other_match = tmp_match -> next; g_free (tmp_match); tmp_match = other_match; } } } for (i=0; i<9; i++) { if (up_match[i]) { tmp_match = other_match = up_match[i]; while (other_match) { other_match = tmp_match -> next; g_free (tmp_match); tmp_match = other_match; } up_match[i] = NULL; } } } destroy_this_dialog (dialog); } /*! \fn void check_atom_for_updates () \brief check for parameters in the database to be used in the force field - creating the dialog */ void check_atom_for_updates () { int i, j, k, l; int * fsp; gboolean update_this = FALSE; field_prop * oth; // Lookup for this atoms in bonds, etc ... and if parameters, then look for update is all atoms are field auto // Field struct (bonds, bond rest., angles, angles rest., dih, tors. rest., imp., vdw.) // g_debug ("Checking for field parameters of atoms: %s - id = %d", tmp_fat -> name, tmp_fat -> id + 1); for (i=0; i<8; i++) { up_match[i] = NULL; if ((i != 4 && i != 5) || tmp_field -> type < CFF91 || tmp_field -> type > COMPASS) { if (get_ff_data(i, 0) && tmp_field -> afp[i+15]) { k = struct_id(i+7); fsp = allocint (k); tmp_fstr = tmp_fmol -> first_struct[i]; while (tmp_fstr != NULL) { for (j=0; j aid[j] == tmp_fat -> id) { // Update this field struct parameters for (l=0; l id, tmp_fstr -> aid[l]) -> sp; } check_this_fprop (i, 0, tmp_fstr -> id, tmp_fstr -> aid, fsp); oth = tmp_fstr -> other; while (oth != NULL) { check_this_fprop (i, oth -> pid+1, tmp_fstr -> id, tmp_fstr -> aid, fsp); oth = oth -> next; } break; } } tmp_fstr = tmp_fstr -> next; } g_free (fsp); } } } up_match[8] = NULL; if (tmp_field -> type < CFF91 || tmp_field -> type > COMPASS) { tmp_fbody = get_active_body (0, 0); while (tmp_fbody && tmp_field -> afp[23]) { if (this_body_has_atom (tmp_fbody, tmp_fat -> name) == 3) { tmp_obj_id = field_objects_id[5]; while (tmp_obj_id) { i = tmp_proj -> chemistry -> chem_prop[CHEM_Z][tmp_fat -> sp]; j = tmp_obj_id -> oid; if (ff_vdw -> atoms_z[j][0] == i && (ff_vdw -> atoms_id[j][0] == tmp_fat -> afid || ff_vdw -> atoms_id[j][0] == -1)) { if (up_match[8] == NULL) { up_match[8] = g_malloc0(sizeof*up_match[8]); tmp_match = up_match[8]; } else { tmp_match -> next = g_malloc0(sizeof*tmp_match); tmp_match = tmp_match -> next; } tmp_match -> id = 8; tmp_match -> obj = tmp_fbody -> id; tmp_match -> oid = tmp_obj_id -> oid; tmp_match -> type = 0; tmp_match -> use = FALSE; } tmp_obj_id = tmp_obj_id -> next; } } tmp_fbody = tmp_fbody -> next; } } for (i=0; i<9; i++) { if (up_match[i] != NULL) { update_this = TRUE; break; } } if (update_this) { gchar * str = g_strdup_printf (_("Update FIELD file with %s parameters using \"%s\" atom(s)"), field_acro[tmp_field -> type], exact_name(ff_atoms[tmp_fat -> afid][2])); GtkWidget * dial = dialog_cancel_apply (str, field_assistant, FALSE); g_free (str); GtkWidget * vbox = dialog_get_content_area (dial); win_update_tree (vbox); run_this_gtk_dialog (dial, G_CALLBACK(run_check_atom_for_updates), NULL); } } /*! \fn G_MODULE_EXPORT void changed_field_prop_combo (GtkComboBox * box, gpointer data) \brief change the field parameter selection \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_field_prop_combo (GtkComboBox * box, gpointer data) { int i, j; dint * prop = (dint *)data; float * val, * vbl; i = combo_get_active ((GtkWidget *)box); if (i) { tmp_match = up_match[prop -> b]; for (j=0; j next; ff_data = get_ff_data (prop -> a - 7, tmp_match -> type); if (prop -> a < 15) { tmp_fprop -> key = abs(ff_data -> key) - 1; g_free (tmp_fprop -> val); tmp_fprop -> fpid = tmp_match -> oid; tmp_fprop -> val = duplicate_float (ff_data -> npar, ff_data -> param[tmp_match -> oid]); if ((prop -> a < 9 && (tmp_fprop -> key == 0 || tmp_fprop -> key == 5)) || ((prop -> a == 9 || prop -> a == 10) && tmp_fprop -> key < 2)) { for (j=0; j npar; j++) { if (j != 1) tmp_fprop -> val[j] *= (j+2 - j/3); } } if (ff_unit != tmp_field -> energy_unit) { float v = internal_to_other[tmp_field -> energy_unit] / internal_to_other[ff_unit]; tmp_fprop -> val[0] = tmp_fprop -> val[0]*v; if (((prop -> a - 7)/2 == 1 && tmp_fprop -> key == 1) || ((prop -> a - 7)/2 == 1 && tmp_fprop -> key == 3)) { tmp_fprop -> val[2] = tmp_fprop -> val[2]*v; tmp_fprop -> val[3] = tmp_fprop -> val[3]*v; } else if ((prop -> a - 7)/2 == 0 && tmp_fprop -> key == 1) { tmp_fprop -> val[2] = tmp_fprop -> val[2]*v; } } combo_set_active (field_key_combo, tmp_fprop -> key); } else { // Check both atoms pot, and use same pot. tmp_fbody -> key = abs(ff_data -> key) - 1; tmp_fbody -> fpid[prop -> b] = tmp_match -> oid; val = duplicate_float (ff_data -> npar, ff_data -> param[tmp_match -> oid]); combo_set_active (field_key_combo, tmp_fbody -> key); } } else { if (prop -> a < 15) { tmp_fprop -> fpid = -1; } else { tmp_fbody -> fpid[prop -> b] = -1; } } if (prop -> a == 15 && i) { float * vcl; float eij; float rij; i = (prop -> b) ? 0 : 1; if (vdw_same_atom) { tmp_fbody -> fpid[i] = tmp_fbody -> fpid[!i]; } if (tmp_fbody -> fpid[0] > -1 && tmp_fbody -> fpid[1] > -1) { j = tmp_fbody -> fpid[i]; vbl = duplicate_float (ff_data -> npar, ff_data -> param[j]); if ((tmp_field -> type <= CHARMMSI || tmp_field -> type > COMPASS) && tmp_fbody -> key == 0) { // 12-6, recalculate A and B vcl = allocfloat (ff_data -> npar); eij = sqrt(val[0]*vbl[0]); rij = (val[1] + vbl[1]); vcl[0] = eij * pow((double) rij, 12.0); vcl[1] = 2.0 * eij * pow((double) rij, 6.0); g_free (tmp_fbody -> val); tmp_fbody -> val = duplicate_float(ff_data -> npar, vcl); g_free (vcl); } else if (tmp_field -> type == CVFF || tmp_field -> type == CVFF_AUG) { // 12-6, A-B vcl = allocfloat (ff_data -> npar); vcl[0] = sqrt(val[0]*vbl[0]); vcl[1] = sqrt(val[1]*vbl[1]); g_free (tmp_fbody -> val); tmp_fbody -> val = duplicate_float(ff_data -> npar, vcl); g_free (vcl); } g_free (vbl); } g_free (val); } p_box = destroy_this_widget (p_box); p_box = param_prop_param_box (prop -> a); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, param_box, p_box, FALSE, FALSE, 0); show_the_widgets (param_box); } /*! \fn GtkWidget * create_field_prop_combo (int f, int is_moy) \brief create field parameter selection combo box \param f the type of force field property \param is_moy global parameter (1) or atom(s) specific parameter (0) */ GtkWidget * create_field_prop_combo (int f, int is_moy) { int h, i, j, k, l, m, n; GtkWidget * vbox, * hbox; gboolean save_it; gchar * str_vdw[2]; gchar * str; h = (f == 15) ? 2 : struct_id(f); i = (f == 15) ? 2 : 1; for (j=0; j ma[j][0]; m = tmp_fbody -> a[j][0]; n = get_active_atom (l, m) -> sp; spec_z[j] = tmp_proj -> chemistry -> chem_prop[CHEM_Z][n]; } if (g_strcmp0 (str_vdw[0], str_vdw[1]) == 0) { vdw_same_atom = TRUE; i = 1; } for (j=0; j ma[j][0]; m = tmp_fbody -> a[j][0]; if (i == 1) { str = g_strdup_printf (_("Atom (1 and 2) %s"), str_vdw[j]); } else { str = g_strdup_printf (_("Atom (%d) %s"), j+1, str_vdw[j]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 150, -1, 0.0, 0.5), FALSE, FALSE, 10); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ff_p_combo[j], FALSE, FALSE, 10); } for (j=0; j<2; j++) g_free (str_vdw[j]); } else { hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); ff_p_combo[0] = create_combo (); combo_text_append (ff_p_combo[0], _("Manual")); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ff_p_combo[0], FALSE, FALSE, 10); for (j=0; j aid[j]; l = get_active_atom (tmp_fmol -> id, k) -> sp; } else { k = tmp_fprop -> aid[j]; l = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[k][0].a) -> sp; } spec_z[j] = tmp_proj -> chemistry -> chem_prop[CHEM_Z][l]; } } if (f != 15 || tmp_field -> type < CFF91 || tmp_field -> type > COMPASS) { for (j=0; j oid; l = tmp_obj_id -> type; ff_data = get_ff_data (f-7, l); save_it = FALSE; if (f < 15 && is_this_object_a_match (f-7, h, spec_z, ff_data -> atoms_z[k])) { m ++; if (tmp_fprop -> fpid == k && tmp_fprop -> key == abs(ff_data -> key)-1) n = m; save_it = TRUE; } else if (f == 15 && ff_data -> atoms_z[k][0] == spec_z[j]) { m ++; if (tmp_fbody -> fpid[j] == k) n = m; save_it = TRUE; } if (save_it) { str = g_strdup_printf ("%s", get_this_prop_string (f-7, k, l, 0)); if (ff_data -> info) { if (g_strcmp0 (ff_data -> info[k], " ") != 0) str = g_strdup_printf ("%s : %s", str, ff_data -> info[k]); } combo_text_append (ff_p_combo[j], str); g_free (str); if (up_match[j] == NULL) { up_match[j] = g_malloc0(sizeof*up_match[j]); tmp_match = up_match[j]; } else { tmp_match -> next = g_malloc0(sizeof*tmp_match -> next); tmp_match -> next -> id = tmp_match -> id + 1; tmp_match = tmp_match -> next; } tmp_match -> obj = f - 7; tmp_match -> oid = k; tmp_match -> type = l; } tmp_obj_id = tmp_obj_id -> next; } combo_set_markup (ff_p_combo[j]); pup[j].a = f; pup[j].b = j; combo_set_active (ff_p_combo[j], n); if (m == 0) widget_set_sensitive (ff_p_combo[j], FALSE); g_signal_connect (G_OBJECT(ff_p_combo[j]), "changed", G_CALLBACK(changed_field_prop_combo), & pup[j]); } } return vbox; } atomes_1.3.1/src/calc/dl_poly/dlp_copy.c0000664000175000017500000004731215212624223017624 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_copy.c * @short Functions to copy force field and related data structures * @author Sébastien Le Roux */ /* * This file: 'dlp_copy.c' * * Contains: * - The functions to copy force field and related data structures * * List of functions: gboolean check_this_other_prop (int oid, int nat, field_prop * other); void duplicate_other_prop (int oid, field_struct * old_fstr, field_struct * new_fstr); void duplicate_nbody_params (field_nth_body * new_fbody, field_nth_body * old_fbody); field_atom* duplicate_field_atom (field_atom* old_fat); field_shell * duplicate_field_shell (field_shell * old_shell); field_constraint * duplicate_field_constraint (field_constraint * old_cons); field_pmf * duplicate_field_pmf (field_pmf * old_pmf); field_rigid * duplicate_field_rigid (field_rigid * old_rig); field_tethered * duplicate_field_tethered (field_tethered * old_tet); field_prop * duplicate_field_prop (field_prop * old_prop, int ti); field_struct * duplicate_field_struct (field_struct * old_fstr); field_struct * duplicate_field_struct_list (field_struct * list_str, gboolean init); field_nth_body * duplicate_field_nth_body (field_nth_body * old_fbody); field_external * duplicate_field_external (field_external * old_fext); field_molecule * duplicate_field_molecule (field_molecule * old_fmol); classical_field * duplicate_classical_field (classical_field * init_field); */ #include "dlp_field.h" #include "global.h" extern void print_all_field_struct (field_molecule * mol, int str); /*! \fn field_atom* duplicate_field_atom (field_atom* old_fat) \brief create copy of a field atom data structure \param old_fat the field atom to duplicate */ field_atom* duplicate_field_atom (field_atom* old_fat) { field_atom* new_fat; new_fat = g_malloc0(sizeof*new_fat); new_fat -> id = old_fat -> id; new_fat -> fid = old_fat -> fid; new_fat -> afid = old_fat -> afid; new_fat -> name = g_strdup_printf ("%s", old_fat -> name); new_fat -> num = old_fat -> num; new_fat -> sp = old_fat -> sp; new_fat -> type = old_fat -> type; new_fat -> mass = old_fat -> mass; new_fat -> charge = old_fat -> charge; new_fat -> frozen = old_fat -> frozen; new_fat -> show = FALSE; new_fat -> list = duplicate_int (old_fat -> num, old_fat -> list); /* g_debug ("Debug copy atom: %d", new_fat -> id); int i; for (i=0; i num; i++) g_debug ("old_fat -> list[%d]= %d", i, old_fat -> list[i]); for (i=0; i num; i++) g_debug ("new_fat -> list[%d]= %d", i, new_fat -> list[i]); */ new_fat -> list_id = duplicate_int (old_fat -> num, old_fat -> list_id); new_fat -> frozen_id = duplicate_bool (old_fat -> num, old_fat -> frozen_id); new_fat -> prev = NULL; new_fat -> next = NULL; return new_fat; } /*! \fn field_shell * duplicate_field_shell (field_shell * old_shell) \brief create copy of a field shell data structure \param old_shell the field shell to duplicate */ field_shell * duplicate_field_shell (field_shell * old_shell) { field_shell * new_shell; new_shell = g_malloc0(sizeof*new_shell); new_shell -> id = old_shell -> id; new_shell -> ia[0] = old_shell -> ia[0]; new_shell -> ia[1] = old_shell -> ia[1]; new_shell -> m = old_shell -> m; new_shell -> z = old_shell -> z; new_shell -> k2 = old_shell -> k2; new_shell -> k4 = old_shell -> k4; new_shell -> vdw = old_shell -> vdw; new_shell -> use = old_shell -> use; new_shell -> show = old_shell -> show; new_shell -> prev = NULL; new_shell -> next = NULL; return new_shell; } /*! \fn field_constraint * duplicate_field_constraint (field_constraint * old_cons) \brief create copy of a field constraint data structure \param old_cons the field constraint to duplicate */ field_constraint * duplicate_field_constraint (field_constraint * old_cons) { field_constraint * new_cons; new_cons = g_malloc0(sizeof*new_cons); new_cons -> id = old_cons -> id; new_cons -> ia[0] = old_cons -> ia[0]; new_cons -> ia[1] = old_cons -> ia[1]; new_cons -> length = old_cons -> length; new_cons -> use = old_cons -> use; new_cons -> show = old_cons -> show; new_cons -> prev = NULL; new_cons -> next = NULL; return new_cons; } /*! \fn field_pmf * duplicate_field_pmf (field_pmf * old_pmf) \brief create copy of a field PMF data structure \param old_pmf the field PMF to duplicate */ field_pmf * duplicate_field_pmf (field_pmf * old_pmf) { field_pmf * new_pmf; new_pmf = g_malloc0(sizeof*new_pmf); new_pmf -> id = old_pmf -> id; new_pmf -> length = old_pmf -> length; int i; for (i=0; i<2; i++) { new_pmf -> num[i] = old_pmf -> num[i]; new_pmf -> list[i] = duplicate_int (old_pmf -> num[i], old_pmf -> list[i]); new_pmf -> weight[i] = duplicate_float (old_pmf -> num[i], old_pmf -> weight[i]); } new_pmf -> show = old_pmf -> show; new_pmf -> use = old_pmf -> use; new_pmf -> next = NULL; new_pmf -> prev = NULL; return new_pmf; } /*! \fn field_rigid * duplicate_field_rigid (field_rigid * old_rig) \brief create copy of a field rigid data structure \param old_rig the field rigid to duplicate */ field_rigid * duplicate_field_rigid (field_rigid * old_rig) { field_rigid * new_rig; new_rig = g_malloc0(sizeof*new_rig); new_rig -> id = old_rig -> id; new_rig -> num = old_rig -> num; new_rig -> list = duplicate_int (old_rig -> num, old_rig -> list); new_rig -> show = old_rig -> show; new_rig -> use = old_rig -> use; new_rig -> next = NULL; new_rig -> prev = NULL; return new_rig; } /*! \fn field_tethered * duplicate_field_tethered (field_tethered * old_tet) \brief create copy of a field tethered data structure \param old_tet the field tethered to duplicate */ field_tethered * duplicate_field_tethered (field_tethered * old_tet) { field_tethered * new_tet; new_tet = g_malloc0(sizeof*new_tet); new_tet -> id = old_tet -> id; new_tet -> num = old_tet -> num; new_tet -> show = old_tet -> show; new_tet -> use = old_tet -> use; new_tet -> next = NULL; new_tet -> prev = NULL; return new_tet; } /*! \fn field_prop * duplicate_field_prop (field_prop * old_prop, int ti) \brief create a copy of a field property \param old_prop the field property to duplicate \param ti the type of field property */ field_prop * duplicate_field_prop (field_prop * old_prop, int ti) { field_prop * new_prop; new_prop = g_malloc0(sizeof*new_prop); new_prop -> aid = duplicate_int (struct_id(ti+7), old_prop -> aid); new_prop -> key = old_prop -> key; new_prop -> pid = old_prop -> pid; new_prop -> fpid = old_prop -> fpid; new_prop -> val = NULL; if (fvalues[activef][ti+1][new_prop -> key] > 0) { new_prop -> val = duplicate_float (fvalues[activef][ti+1][new_prop -> key], old_prop -> val); } new_prop -> show = old_prop -> show; new_prop -> use = old_prop -> use; new_prop -> next = NULL; new_prop -> prev = NULL; return new_prop; } /*! \fn gboolean check_this_other_prop (int oid, int nat, field_prop * other) \brief check if field atom already in field property \param oid the field atom id to search for \param nat the number of atoms in the field property \param other the field structural property to check */ gboolean check_this_other_prop (int oid, int nat, field_prop * other) { if (oid > -1) { int i; for (i=0; i atoms_id[other -> aid[i]][0].a == oid) return FALSE; } } return TRUE; } /*! \fn void duplicate_other_prop (int oid, field_struct * old_fstr, field_struct * new_fstr) \brief create copy of a field property 'other' list \param oid the target field atom id \param old_fstr the field property to duplicate \param new_fstr the field property to store the results */ void duplicate_other_prop (int oid, field_struct * old_fstr, field_struct * new_fstr) { int i = struct_id(new_fstr -> st+7); field_prop * tmp_new; field_prop * tmp_old = old_fstr -> other; while (tmp_old) { if (check_this_other_prop(oid, i, tmp_old)) { if (new_fstr -> other) { tmp_new -> next = duplicate_field_prop (tmp_old, old_fstr -> st); tmp_new = tmp_new -> next; } else { new_fstr -> other = duplicate_field_prop (tmp_old, old_fstr -> st); tmp_new = new_fstr -> other; } } tmp_old = tmp_old -> next; } } /*! \fn field_struct * duplicate_field_struct (field_struct * old_fstr) \brief create copy of a field structural element \param old_fstr the field structural element to duplicate */ field_struct * duplicate_field_struct (field_struct * old_fstr) { field_struct * new_fstr; new_fstr = g_malloc0(sizeof*new_fstr); new_fstr -> st = old_fstr -> st; new_fstr -> id = old_fstr -> id; new_fstr -> num = old_fstr -> num; new_fstr -> aid = duplicate_int (struct_id(old_fstr -> st+7), old_fstr -> aid); new_fstr -> av = old_fstr -> av; new_fstr -> def = duplicate_field_prop (old_fstr -> def, old_fstr -> st); new_fstr -> other = NULL; if (old_fstr -> other != NULL) duplicate_other_prop (-1, old_fstr, new_fstr); new_fstr -> prev = NULL; new_fstr -> next = NULL; return new_fstr; } /*! \fn field_struct * duplicate_field_struct_list (field_struct * list_str, gboolean init) \brief create copy of list of field structural element(s) \param list_str the list of field structural element(s) to duplicate \param init */ field_struct * duplicate_field_struct_list (field_struct * list_str, gboolean init) { field_struct * str_list = duplicate_field_struct (list_str); if (init) str_list -> def -> use = FALSE; field_struct * tmp_str = str_list; field_struct * tmp_fst = list_str; while (tmp_fst -> next) { tmp_str -> next = duplicate_field_struct (tmp_fst -> next); tmp_str -> next -> prev = tmp_str; if (init) tmp_str -> next -> def -> use = FALSE; tmp_str = tmp_str -> next; tmp_fst = tmp_fst -> next; } return str_list; } /*! \fn void duplicate_nbody_params (field_nth_body * new_fbody, field_nth_body * old_fbody) \brief copy field body parameter list \param new_fbody the body parameters to fill \param old_fbody the body parameters to duplicate */ void duplicate_nbody_params (field_nth_body * new_fbody, field_nth_body * old_fbody) { new_fbody -> key = old_fbody -> key; new_fbody -> val = duplicate_float (fvalues[activef][9+new_fbody -> bd][new_fbody -> key], old_fbody -> val); new_fbody -> show = old_fbody -> show; new_fbody -> use = old_fbody -> use; } /*! \fn field_nth_body * duplicate_field_nth_body (field_nth_body * old_fbody) \brief create copy of a field body property \param old_fbody the field body property to duplicate */ field_nth_body * duplicate_field_nth_body (field_nth_body * old_fbody) { field_nth_body * new_fbody; int i, j; new_fbody = g_malloc0(sizeof*new_fbody); new_fbody -> id = old_fbody -> id; new_fbody -> bd = old_fbody -> bd; if (old_fbody -> fpid) new_fbody -> fpid = duplicate_int (2, old_fbody -> fpid); j = body_at (old_fbody -> bd); new_fbody -> na = duplicate_int (j, old_fbody -> na); new_fbody -> ma = NULL; new_fbody -> ma = g_malloc0(j*sizeof*new_fbody -> ma); new_fbody -> a = NULL; new_fbody -> a = g_malloc0(j*sizeof*new_fbody -> a); for (i=0; i ma[i] != NULL) { new_fbody -> ma[i] = duplicate_int (old_fbody -> na[i], old_fbody -> ma[i]); } else { new_fbody -> ma[i] = NULL; } if (old_fbody -> a[i] != NULL) { new_fbody -> a[i] = duplicate_int (old_fbody -> na[i], old_fbody -> a[i]); } else { new_fbody -> a[i] = NULL; } } duplicate_nbody_params (new_fbody, old_fbody); new_fbody -> prev = NULL; new_fbody -> next = NULL; return new_fbody; } /*! \fn field_external * duplicate_field_external (field_external * old_fext) \brief create copy of a field external property \param old_fext the field external property to duplicate */ field_external * duplicate_field_external (field_external * old_fext) { field_external * new_fext; new_fext = g_malloc0(sizeof*new_fext); new_fext -> id = old_fext -> id; new_fext -> key = old_fext -> key; new_fext -> val = NULL; if (old_fext -> val != NULL) { new_fext -> val = duplicate_float (fvalues[activef][SEXTERN-6][new_fext -> key], old_fext -> val); } new_fext -> use = old_fext -> use; new_fext -> next = NULL; new_fext -> prev = NULL; return new_fext; } /*! \fn field_molecule * duplicate_field_molecule (field_molecule * old_fmol) \brief create copy of a field molecule \param old_fmol the feld molecule to duplicate */ field_molecule * duplicate_field_molecule (field_molecule * old_fmol) { int i, j; field_molecule * new_fmol; new_fmol = g_malloc0(sizeof*new_fmol); new_fmol -> id = old_fmol -> id; new_fmol -> multi = old_fmol -> multi; new_fmol -> name = g_strdup_printf ("%s", old_fmol -> name); new_fmol -> show = old_fmol -> show; new_fmol -> show_id = old_fmol -> show_id; new_fmol -> atoms = old_fmol -> atoms; new_fmol -> first_atom = NULL; new_fmol -> tethered = old_fmol -> tethered; new_fmol -> first_tethered = NULL; new_fmol -> rigids = old_fmol -> rigids; new_fmol -> first_rigid = NULL; new_fmol -> pmfs = old_fmol -> pmfs; new_fmol -> first_pmf = NULL; new_fmol -> first_constraint = NULL; new_fmol -> constraints = old_fmol -> constraints; new_fmol -> first_shell = NULL; new_fmol -> shells = old_fmol -> shells; new_fmol -> mol = g_malloc0(sizeof*new_fmol -> mol); new_fmol -> mol = & tmp_proj -> modelfc -> mols[0][old_fmol -> mol -> id]; // Duplicating atoms new_fmol -> fragments = NULL; new_fmol -> fragments = allocint (new_fmol -> multi); for (i=0; i multi; i++) new_fmol -> fragments[i] = old_fmol -> fragments[i]; new_fmol -> first_atom = duplicate_field_atom (old_fmol -> first_atom); field_atom* tmp_fat = new_fmol -> first_atom; field_atom* tmp_fa = old_fmol -> first_atom; for (i=1; i atoms; i++) { tmp_fat -> next = duplicate_field_atom (tmp_fa -> next); tmp_fat -> next -> prev = tmp_fat; tmp_fat = tmp_fat -> next; tmp_fa = tmp_fa -> next; } new_fmol -> atoms_id = g_malloc0(new_fmol -> mol -> natoms*sizeof*new_fmol -> atoms_id); for (i=0; i mol -> natoms; i++) { new_fmol -> atoms_id[i] = g_malloc0(new_fmol -> multi*sizeof*new_fmol -> atoms_id[i]); for (j=0; j multi; j++) { new_fmol -> atoms_id[i][j].a = old_fmol -> atoms_id[i][j].a; new_fmol -> atoms_id[i][j].b = old_fmol -> atoms_id[i][j].b; } } for (i=0; i<8; i++) { // Duplicating bonds / br / angles / ar / diherdrals / impropers / tr / inversions new_fmol -> nstruct[i] = old_fmol -> nstruct[i]; new_fmol -> first_struct[i] = NULL; if (old_fmol -> nstruct[i] > 0) { new_fmol -> first_struct[i] = duplicate_field_struct (old_fmol -> first_struct[i]); field_struct * tmp_str = new_fmol -> first_struct[i]; field_struct * tmp_fst = old_fmol -> first_struct[i]; for (j=1; j nstruct[i]; j++) { tmp_str -> next = duplicate_field_struct (tmp_fst -> next); tmp_str -> next -> prev = tmp_str; tmp_str = tmp_str -> next; tmp_fst = tmp_fst -> next; } } } new_fmol -> next = NULL; new_fmol -> prev = NULL; return new_fmol; } /*! \fn classical_field * duplicate_classical_field (classical_field * init_field) \brief create copy of a force field \param init_field the force field to duplicate */ classical_field * duplicate_classical_field (classical_field * init_field) { classical_field * new_field = NULL; new_field = g_malloc0(sizeof*new_field); int i, j; // All for (i=0; i afp[i] = init_field -> afp[i]; for (i=0; i<2; i++) new_field -> prepare_file[i] = init_field -> prepare_file[i]; // Control new_field -> ensemble = init_field -> ensemble; new_field -> thermostat = init_field -> thermostat; for (i=0; i<17; i++) new_field -> sys_opts[i] = init_field -> sys_opts[i]; for (i=0; i<23; i++) new_field -> io_opts[i] = init_field -> io_opts[i]; for (i=0; i<17; i++) new_field -> ana_opts[i] = init_field -> ana_opts[i]; for (i=0; i<11; i++) new_field -> elec_opts[i] = init_field -> elec_opts[i]; for (i=0; i<6; i++) new_field -> vdw_opts[i] = init_field -> vdw_opts[i]; for (i=0; i<2; i++) new_field -> met_opts[i] = init_field -> met_opts[i]; for (i=0; i<17; i++) new_field -> equi_opts[i] = init_field -> equi_opts[i]; for (i=0; i<10; i++) new_field -> thermo_opts[i] = init_field -> thermo_opts[i]; for (i=0; i<20; i++) new_field -> md_opts[i] = init_field -> md_opts[i]; for (i=0; i<31; i++) new_field -> out_opts[i] = init_field -> out_opts[i]; // Field new_field -> energy_unit = init_field -> energy_unit; new_field -> atom_init = init_field -> atom_init; new_field -> molecules = init_field -> molecules; if (new_field -> molecules) { field_molecule * fmol; new_field -> first_molecule = duplicate_field_molecule (init_field -> first_molecule); fmol = new_field -> first_molecule; tmp_fmol = init_field -> first_molecule; for (i=1; i molecules; i++) { fmol -> next = duplicate_field_molecule (tmp_fmol -> next); fmol -> next -> prev = fmol; fmol = fmol -> next; tmp_fmol = tmp_fmol -> next; } // Duplicating nth_body for (i=0; i<5; i++) { new_field -> first_body[i] = NULL; new_field -> nbody[i] = init_field -> nbody[i]; if (init_field -> nbody[i] > 0) { new_field -> first_body[i] = duplicate_field_nth_body (init_field -> first_body[i]); field_nth_body * tmp_fbod = new_field -> first_body[i]; field_nth_body * tmp_fbo = init_field -> first_body[i]; for (j=1; j nbody[i]; j++) { tmp_fbod -> next = duplicate_field_nth_body (tmp_fbo -> next); tmp_fbod -> next -> prev = tmp_fbod; tmp_fbod = tmp_fbod -> next; tmp_fbo = tmp_fbo -> next; } } } // Tersoff cross terms new_field -> cross = NULL; if (init_field -> cross != NULL) { new_field -> cross = g_malloc0(tmp_field -> nbody[2]*sizeof*new_field -> cross); for (i=0; i nbody[2]; i++) { new_field -> cross[i] = g_malloc0(tmp_field -> nbody[2]*sizeof*new_field -> cross[i]); for (j=0; j nbody[2]; j++) new_field -> cross[i][j] = duplicate_double (3, init_field -> cross[i][j]); } } // Duplicating external fields new_field -> first_external = NULL; new_field -> extern_fields = init_field -> extern_fields; if (init_field -> extern_fields > 0) { new_field -> first_external = duplicate_field_external (init_field -> first_external); field_external * tmp_fext = new_field -> first_external; field_external * tmp_ftxt = init_field -> first_external; for (i=1; i extern_fields; i++) { tmp_fext -> next = duplicate_field_external (tmp_ftxt -> next); tmp_fext -> next -> prev = tmp_fext; tmp_fext = tmp_fext -> next; tmp_ftxt = tmp_ftxt -> next; } } } return new_field; } atomes_1.3.1/src/calc/dl_poly/dlp_field.c0000664000175000017500000070002315212624223017730 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_field.c * @short Functions to prepare the DL-POLY / LAMMPS input preparation assistant \n Functions to design a classical force field * @author Sébastien Le Roux */ /* * This file: 'dlp_field.c' * * Contains: * - The functions to prepare the DL-POLY / LAMMPS input preparation assistant - The functions to design a classical force field * * List of functions: int struct_id (int f); int body_at (int b); int get_field_tree_data (GtkWidget * tree, int treeid, GtkTreePath * path); int get_field_data_id (int k, gchar * data); G_MODULE_EXPORT gint on_assistant_go_forward (gint current_page, gpointer data); gboolean dlp_to_translate (int fid, int obj, int key); gboolean set_nbd_but_sensitive (int nbid); gboolean field_file_has_energy_parameters (gboolean scale, int sca, int scb); G_MODULE_EXPORT gboolean on_pop_up_field (GtkWidget * widget, gpointer data); G_MODULE_EXPORT gboolean on_field_button_event (GtkWidget * widget, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWindow * assistant, gpointer data); G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data); gchar * parameters_info (int obj, int key, gchar ** words, float * data); gchar * set_field_label (int f, int m); gchar * pop_info (int i, int id); gchar * pop_edit (int i); gchar * pop_add (int i); gchar * pop_remove (int i); void set_mol_num_label (); void setup_cs_labels (int i); void fill_field_struct (GtkTreeStore * store, int id, int mo); void fill_field_body (GtkTreeStore * store, int id); void fill_field_model (GtkTreeStore * store, int f, int m); void update_field_trees (); void get_is_energy (int i, int l); void append_field_item (GMenu * menu, const gchar * name, const gchar * key, int item_id, gchar * accel, int image_format, gpointer icon, gboolean custom, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, gboolean sensitive); void pop_up_field_context_menu (int row_id, GtkWidget * widget, double event_x, double event_y, gpointer data); void pop_up_field_context_menu (int row_id, GtkWidget * widget, GdkEvent * event, gpointer data); void field_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void field_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void field_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_markup_box (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_color_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void prop_set_color_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void pmf_set_color_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void rig_set_color_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_color_markup_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_color_markup_and_visible_box (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void get_field_iter_and_edit (gchar * path_string, gpointer data); void create_field_list (GtkWidget * vbx, int f); void close_the_assistant (GtkAssistant * assistant); void hide_show_this_pages (int start, int end, int status, int delta); void remove_classical_assistant_pages (); void add_classical_assistant_pages (int p); void create_ff_structure (int ai, int type); void on_assistant_apply (GtkAssistant * assistant, gpointer data); void create_classical_force_field (int p, int f); G_MODULE_EXPORT void toggle_field_params (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggle_field_params (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void changed_mol_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void run_changed_energy_unit (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void changed_energy_unit (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void changed_field_key_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data); G_MODULE_EXPORT void to_select_atom_id_from_fied_molecule (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void on_field_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_field_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void edit_field_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data); G_MODULE_EXPORT void to_edit_field_prop (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data); G_MODULE_EXPORT void on_field_row_activated (GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * col, gpointer data); G_MODULE_EXPORT void on_assistant_cancel (GtkAssistant * assistant, gpointer data); G_MODULE_EXPORT void on_assistant_close (GtkAssistant * assistant, gpointer data); G_MODULE_EXPORT void on_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data); G_MODULE_EXPORT void run_clean_field (GtkDialog * dial, gint response_id, gpointer data); G_MODULE_EXPORT void clean_field (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void clean_field (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void select_field_action (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void select_field_action (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void changed_init_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void show_force_field_preview (GtkButton * but, gpointer data); G_MODULE_EXPORT void run_on_assistant_apply (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_on_assistant_apply (GtkDialog * info, gint response_id, gpointer data); GtkWidget * vbox_init (int p); GtkWidget * create_combo_mol (int f); GtkWidget * create_field_tree (int f); GtkWidget * create_mol_box (int f); GtkWidget * vbox_field (int f); */ #include "dlp_field.h" #include "calc.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "bind.h" gboolean append_pages; extern GtkWidget * extra_vbox[2]; extern ColRGBA init_color (int id, int numid); extern void restore_ogl_selection (glwin * view); gchar * felemts[MAXDATA+1] = {i18n("Energy unit"), i18n("Molecule(s)"), i18n("Atom(s)"), i18n("Core-shell unit(s)"), i18n("Constraint bond(s)"), i18n("Mean force potential(s)"), i18n("Rigid unit(s)"), i18n("Tethering potential(s)"), i18n("Flexible chemical bond(s)"), i18n("Bond restraint(s)"), i18n("Bond angle(s)"), i18n("Angular restraint(s)"), i18n("Dihedral angle(s)"), i18n("Torsional restraint(s)"), i18n("Improper angle(s)"), i18n("Inversion angle(s)"), i18n("van der Waals potential(s)"), i18n("Metal potential(s)"), i18n("Tersoff Potential(s)"), i18n("Three-body potential(s)"), i18n("Four-body potential(s)"), i18n("External field(s)")}; gchar * felemt[MAXDATA+1] = {i18n("Energy unit"), i18n("Molecule"), i18n("Atom"), i18n("Core-shell unit"), i18n("Constraint bond"), i18n("Mean force potential"), i18n("Rigid unit"), i18n("Tethering potential"), i18n("Flexible chemical bond"), i18n("Bond restraint"), i18n("Bond angle"), i18n("Angular restraint"), i18n("Dihedral angle"), i18n("Torsional restraint"), i18n("Improper angle"), i18n("Inversion angle"), i18n("van der Waals potential"), i18n("Metal potential"), i18n("Tersoff Potential"), i18n("Three-body potential"), i18n("Four-body potential"), i18n("External field")}; gchar * elemts[MAXDATA] = {i18n("molecule(s)"), i18n("atom(s)"), i18n("core-shell unit(s)"), i18n("constraint bond(s)"), i18n("mean force potential(s)"), i18n("rigid unit(s)"), i18n("tethering potential(s)"), i18n("flexible chemical bond(s)"), i18n("bond restraint(s)"), i18n("bond angle(s)"), i18n("angular restraint(s)"), i18n("dihedral angle(s)"), i18n("torsional restraint(s)"), i18n("improper angle(s)"), i18n("inversion angle(s)"), i18n("van der Waals potential(s)"), i18n("metal potential(s)"), i18n("Tersoff Potential(s)"), i18n("three-body potential(s)"), i18n("four-body potential(s)"), i18n("external field(s)")}; gchar * elemt[MAXDATA] = {i18n("molecule"), i18n("atom"), i18n("core-shell unit"), i18n("constraint bond"), i18n("mean force potential"), i18n("rigid unit"), i18n("tethering potential"), i18n("flexible chemical bond"), i18n("bond restraint"), i18n("bond angle"), i18n("angular restraint"), i18n("dihedral angle"), i18n("torsional restraint"), i18n("improper angle"), i18n("inversion angle"), i18n("van der Waals potential"), i18n("metal potential"), i18n("Tersoff Potential"), i18n("three-body potential"), i18n("four-body potential"), i18n("external field")}; gchar * intelemts[MAXDATA] = {i18n("of molecule(s)"), i18n("of atom(s)"), i18n("of core-shell unit(s)"), i18n("of constraint bond(s)"), i18n("of mean force potential(s)"), i18n("of rigid unit(s)"), i18n("of tethering potential(s)"), i18n("of flexible chemical bond(s)"), i18n("of bond restraint(s)"), i18n("of bond angle(s)"), i18n("of angular restraint(s)"), i18n("of dihedral angle(s)"), i18n("of torsional restraint(s)"), i18n("of improper angle(s)"), i18n("of inversion angle(s)"), i18n("of van der Waals potential(s)"), i18n("of metal potential(s)"), i18n("of Tersoff Potential(s)"), i18n("of three-body potential(s)"), i18n("of four-body potential(s)"), i18n("of external field(s)")}; gchar * intelemt[MAXDATA] = {i18n("of the molecule"), i18n("of the atom"), i18n("of the core-shell unit"), i18n("of the constraint bond"), i18n("of the mean force potential"), i18n("of the rigid unit)"), i18n("of the tethering potential"), i18n("of the flexible chemical bond"), i18n("of the bond restraint"), i18n("of the bond angle"), i18n("of the angular restraint"), i18n("of the dihedral angle"), i18n("of the torsional restraint"), i18n("of the improper angle"), i18n("of the inversion angle"), i18n("of the van der Waals potential"), i18n("of the metal potential"), i18n("of the Tersoff Potential"), i18n("of the three-body potential"), i18n("of the four-body potential"), i18n("of the external field")}; gchar * fkeysw[2][16][21] = {{{"eV", "kcal", "kJ", "K", "internal", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 0 - Energy unit(s) {"harm", "rhrm", "quar", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 1 - Tethering pot. {"harm", "mors", "12-6", "lj ", "rhrm", "quar", "buck", "coul", "fene", "mmst", "tab ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 2 - Bond pot. {"-hrm", "-mrs", "-126", "-lj ", "-rhm", "-qur", "-bck", "-cul", "-fne", "-mst", "-tab", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 3 - Bond rest. {"harm", "quar", "thrm", "shrm", "bvs1", "bvs2", "hcos", "cos ", "mmsb", "stst", "stbe", "cmps", "mmbd", "kky ", "tab ", " ", " ", " ", " ", " ", " "}, // 4 - Angles pot. {"-hrm", "-qur", "-thm", "-shm", "-bv1", "-bv2", "-hcs", "-cos", "-msb", "-sts", "-stb", "-cmp", "-mbd", "-kky", "-tab", " ", " ", " ", " ", " ", " "}, // 5 - Angles rest. {"cos ", "harm", "hcos", "cos3", "ryck", "rbf ", "opls", "tab ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 6 - Dihedral pot. {"-cos", "-hrm", "-hcs", "-cs3", "-rck", "-rbf", "-opl", "-tab", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 8 - Torsion pot. {"cos ", "harm", "hcos", "cos3", "ryck", "rbf ", "opls", "tab ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 7 - Improper pot. {"harm", "hcos", "plan", "xpln", "calc", "tab ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 9 - Inversion pot. {"12-6", "lj ", "ljc", "nm ", "buck", "bhm ", "hbnd", "snm ", "mors", "wca ", "dpd", "14-7", "mstw", "ryb", "zbl", "zbls", "zblb", "mlj", "mbuc", "m126", "tab "}, // 10 - Vdw pot. {"eam ", "eeam", "2bea", "2bee", "fnsc", "exfs", "stch", "gupt", "mbpc", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 11 - Metal pot. {"ters", "kihs", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 12 - Tersoff pot. {"harm", "thrm", "shrm", "bvs1", "bvs2", "hbnd", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 13 - Three-body pot. {"harm", "hcos", "plan", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 14 - Four-body pot. {"elec", "oshr", "shrx", "grav", "magn", "sphr", "zbnd", "xpis", "zres", "zrs-", "zrs+", "osel", "ushr", " ", " ", " ", " ", " ", " ", " ", " "}}, // 15 - External fields. {{"lj", "real", "metal", "si", "cgs", "electron", "micro", "nano", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"harmonic", "class2", "fene", "fene/expand", "gromos", "harmonic/shift", "harmonic/shift/cut", "mm3", "morse", "nonlinear", "oxdna/fene", "oxdna2/fene", "oxrna2/fene", "quartic", "special", "table", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"harmonic", "charmm", "class2", "class2/p6", "cosine", "cosine/buck6d", "cosine/delta", "cosine/periodic", "cosine/shift", "cosine/shift/exp", "cosine/squared", "cross", "dipole", "fourier", "fourier/simple", "mm3", "quartic", "sdk", "table", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"cosine/shift/exp", "charmm", "charmmfsw", "class2", "fourier", "harmonic", "helix", "multi/harmonic", "nharmonic", "opls", "quadratic","spherical", "table", "table/cut", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"harmonic", "class2", "cossq", "cvff", "distance", "distharm", "fourier", "ring", "sqdistharm", "umbrella", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"inversion/harmonic", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}}}; gchar * fnames[2][16][21] = {{{i18n("Electron-Volts"), i18n("k-calories per mol"), i18n("k-Joules per mol"), i18n("Kelvin per Boltzmann"), i18n("DL_POLY internal units"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), i18n("Restraint"), i18n("Quartic"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), "Morse", "12-6", "Lennard-Jones", i18n("Restraint"), i18n("Quartic"), "Buckingham", "Coulomb", i18n("Shifted FENE"), i18n("MM3 bond stretch"), i18n("Tabulated"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), "Morse", "12-6", "Lennard-Jones", i18n("Restraint"), i18n("Quartic"), "Buckingham", "Coulomb", i18n("Shifted FENE"), i18n("MM3 bond stretch"), i18n("Tabulated"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), i18n("Quartic"), i18n("Truncated harmonic"), i18n("Screened harmonic"), i18n("Screened Vessal"), i18n("Truncated Vessal"), i18n("Harmonic cosine"), i18n("Cosine"), i18n("MM3 stretch-bend"), i18n("Compass stretch-stretch"), i18n("Compass stretch-bend"), i18n("Compass all terms"), i18n("MM3 angle bend"), "KKY", i18n("Tabulated"), " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), i18n("Quartic"), i18n("Truncated harmonic"), i18n("Screened harmonic"), i18n("Screened Vessal"), i18n("Truncated Vessal"), i18n("Harmonic cosine"), i18n("Cosine"), i18n("MM3 stretch-bend"), i18n("Compass stretch-stretch"), i18n("Compass stretch-bend"), i18n("Compass all terms"), i18n("MM3 angle bend"), "KKY", i18n("Tabulated"), " ", " ", " ", " ", " ", " "}, {i18n("Cosine"), i18n("Harmonic"), i18n("Harmonic cosine"), i18n("Triple cosine"), "Ryckaert-Bellemans", i18n("Fluorinated Ryckaert-Bellemans"), i18n("OPLS torsion"), i18n("Tabulated"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Cosine"), i18n("Harmonic"), i18n("Harmonic cosine"), i18n("Triple cosine"), "Ryckaert-Bellemans", i18n("Fluorinated Ryckaert-Bellemans"), i18n("OPLS torsion"), i18n("Tabulated"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Cosine"), i18n("Harmonic"), i18n("Harmonic cosine"), i18n("Triple cosine"), "Ryckaert-Bellemans", i18n("Fluorinated Ryckaert-Bellemans"), i18n("OPLS torsion"), i18n("Tabulated"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), i18n("Harmonic cosine"), i18n("Planar"), i18n("Extended Planar"), i18n("Calcite"), i18n("Tabulated"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"12-6", "Lennard-Jones", i18n("LJ cohesive"), "n-m", "Buckingham", "Born-Huggins-Meyer", i18n("12-10 H-bond"), i18n("Shifted force n-m"), "Morse", i18n("Shifted Weeks-Chandler-Anderson"), i18n("Standard DPD"), i18n("14-7 buffered AMOEBA FF"), i18n("Morse modified"), "Rydberg", "ZBL", i18n("ZBL mixed with Morse"), i18n("ZBL mixed with Buckingham"), i18n("Lennard-Jones tapered with MDF"), i18n("Buckingham tapered with MDF"), i18n("12-6 Lennard-Jones tapered with MDF"), i18n("Tabulated")}, {"EAM", "EEAM", "2BEAM", "2BEEAM", "Finis-Sinclair", i18n("Extended Finis-Sinclair"), "Sutton-Chen", "Gupta", "MBPC", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Tersoff", "KIHS", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), i18n("Truncated harmonic"), i18n("Screened harmonic"), i18n("Screened Vessal"), i18n("Truncated Vessal"), i18n("H-bond"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), i18n("Harmonic cosine"), i18n("Planar"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Electric field"), i18n("Oscillating Shear"), i18n("Continuous Shear"), i18n("Gravitational field"), i18n("Magnetic field"), i18n("Containing Sphere"), i18n("Repulsive Wall"), i18n("X-Piston"), i18n("Molecule in HR Zone"), i18n("HR Zone (pull out)"), i18n("HR Zone (pull in)"), i18n("Osc. Electric Field"), i18n("Umbrella sampling, harm. constant"), " ", " ", " ", " ", " ", " ", " ", " "}}, {{"lj", i18n("k-calories per mol"), i18n("Electron-Volts"), i18n("k-Joules per mol"), "cgs", i18n("electron"), "micro", "nano", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"),i18n("COMPASS class2 force field"), i18n("Finite extensible nonlinear elastic (FENE)"), i18n("FENE with variable size particles"), i18n("GROMOS force field"), i18n("Shifted harmonic"), i18n("Shifted truncated harmonic"), i18n("MM3 anharmonic"), "Morse", i18n("Nonlinear"), i18n("Finite extensible nonlinear elastic DNA"), i18n("Finite extensible nonlinear elastic DNA (2)"), i18n("Finite extensible nonlinear elastic RNA"), i18n("Breakable quartic"), i18n("Special bond exclusions for 1-5 pairs and beyond"), i18n("Tabulated"), " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), i18n("CHARMM force field"), i18n("COMPASS class2 force field"), i18n("COMPASS class2 force field - 6th order"), i18n("Cosine"), i18n("Cosine with Buckingham term between 1-3"), i18n("Difference of cosines"), i18n("DREIDING force field"), i18n("Cosine with a shift"), i18n("Cosine with a shift and exponential term in spring"), i18n("Cosine with squared term"), i18n("Cross term coupling angle and bond length"), i18n("Dipole orientation"), i18n("Fourier (multiple cosines)"), i18n("Fourier (single cosine)"), "MM3", i18n("Quartic"), i18n("Combination of the harmonic (SDK)"), i18n("Tabulated"), " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Cosine with a shift and exponential term in spring"), i18n("CHARMM force field"), i18n("CHARMM force field with force switching"), i18n("COMPASS class2 force field"), i18n("Fourier (multiple cosines)"), i18n("Harmonic"), i18n("Helix"), i18n("Harmonic with 5 terms"), i18n("Harmonic with N terms"), i18n("OPLS force field"), i18n("Quadratic"), i18n("Spherical"), i18n("Tabulated"), i18n("Tabulated with analytic cutoff"), " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic"), i18n("COMPASS class2 force field"), i18n("Cosine squared"), i18n("CVFF force field"), i18n("Distance between atom planes"), i18n("Out-of-the plane distance"), i18n("Fourier (multiple cosines)"), i18n("Planar conformation"), i18n("Squared distance harmonic"), i18n("DREIDING force field"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Harmonic with Wilson Decius out-of-plane"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}}}; int fvalues[2][15][21] = {{{ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 0 - Tethered { 2, 3, 2, 2, 3, 4, 3, 1, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 1 - Bond(s) { 2, 3, 2, 2, 3, 4, 3, 1, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 2 - Bond restraint(s) { 2, 4, 3, 4, 4, 4, 2, 3, 4, 3, 3, 6, 2, 4, 0, 0, 0, 0, 0, 0, 0}, // 3 - Angle(s) { 2, 4, 3, 4, 4, 4, 2, 3, 4, 3, 3, 6, 2, 4, 0, 0, 0, 0, 0, 0, 0}, // 4 - Angle restraint(s) { 3, 2, 2, 3, 1, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 5 - Dihedral(s) { 3, 2, 2, 3, 1, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 6 - Torsional restraint(s) { 3, 2, 2, 3, 1, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 7 - Improper(s) { 2, 2, 1, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 8 - Inversion(s) { 2, 2, 3, 4, 3, 5, 2, 5, 3, 3, 2, 2, 4, 3, 2, 7, 7, 3, 4, 3, 0}, // 9 - vdW { 0, 0, 0, 0, 7, 9, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 10 - Metal(s) {11,16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 11 - Tersoff(s) { 2, 3, 4, 4, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 12 - 3-body { 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 13 - 4-body { 3, 2, 2, 3, 3, 4, 3, 3, 5, 5, 5, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0}}, // 14 - External(s) {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 0 - Tethered { 2, 4, 4, 5, 2, 3, 3, 2, 3, 3, 3, 3, 3, 5, 2, 2, 0, 0, 0, 0, 0}, // 1 - Bond(s) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 2 - Bond restraint(s) { 2, 4, 4, 4, 1, 3, 2, 3, 2, 3, 2, 6, 2, 4, 3, 2, 4, 2, 2, 0, 0}, // 3 - Angle(s) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 4 - Angle restraint(s) { 3, 4, 4, 6, 4, 3, 3, 5, 2, 4, 2,11, 2, 2, 0, 0, 0, 0, 0, 0, 0}, // 5 - Dihedral(s) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 6 - Torsional restraint(s) { 2, 2, 2, 3, 2, 2, 5, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 7 - Improper(s) { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 8 - Inversion(s) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 9 - vdW { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 10 - Metal(s) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 11 - Tersoff(s) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 12 - 3-body { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 13 - 4-body { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}};// 14 - External(s) int fetypes[2][16] = {{DL_ENERGY, DL_TETH, DL_BONDS, DL_BONDS, DL_ANGLES, DL_ANGLES, DL_DIHEDRAL, DL_DIHEDRAL, DL_DIHEDRAL, DL_INVERS, DL_VDW, DL_METALS, DL_TERSOFFS, DL_THREEBODY, DL_FOURBODY, DL_EXTERNAL}, {LA_ENERGY, LA_TETH, LA_BONDS, 1, LA_ANGLES, 1, LA_DIHEDRAL, 1, LA_DIHEDRAL, LA_INVERS, LA_VDW, LA_METALS, LA_TERSOFFS, LA_THREEBODY, LA_FOURBODY, LA_EXTERNAL}}; int fntypes[2][15] = {{DL_TETH_P, DL_BONDS_P, DL_BONDS_P, DL_ANGLES_P, DL_ANGLES_P, DL_DIHEDRAL_P, DL_DIHEDRAL_P, DL_DIHEDRAL_P, DL_INVERS_P, DL_VDW_P, DL_METALS_P, DL_TERSOFFS_P, DL_THREEBODY_P, DL_FOURBODY_P, DL_EXTERNAL_P}, {LA_TETH_P, LA_BONDS_P, LA_BONDS_P, LA_ANGLES_P, LA_ANGLES_P, LA_DIHEDRAL_P, LA_DIHEDRAL_P, LA_DIHEDRAL_P, LA_INVERS_P, LA_VDW_P, LA_METALS_P, LA_TERSOFFS_P, LA_THREEBODY_P, LA_FOURBODY_P, LA_EXTERNAL_P}}; char * fvars_teth[2][FTETH][FTETH_P] = {{{"k", " ", " "}, {"k", "rc", " "}, {"k", "k'", "k''"}}, {{" ", " ", " "}, {" ", " ", " "}, {" ", " ", " "}}}; int feunit_teth[2][FTETH][FTETH_P] = {{{1, 0, 0}, {1, 0, 0}, {1, 0, 0}}, {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}}; char * fvars_bond[2][FBONDS][FBONDS_P] = {{{"k", "r0", " ", " ", " "}, {"E0", "r0", "k", " ", " "}, {"A", "B", " ", " ", " "}, {"ϵ", "σ", " ", " ", " "}, {"k", "r0", "rc", " ", " "}, {"k", "r0", "k'", "k''", " "}, {"A", "ρ", "C", " ", " "}, {"k", " ", " ", " ", " "}, {"k", "R0", "Δ", " ", " "}, {"k", "ro", " ", " ", " "}, {" ", " ", " ", " ", " "}, {" ", " ", " ", " ", " "}, {" ", " ", " ", " ", " "}, {" ", " ", " ", " ", " "}, {" ", " ", " ", " ", " "}, {" ", " ", " ", " ", " "}}, {{"K", "r0", " ", " ", " "}, {"r0", "K2", "K3", "K4", " "}, {"K", "R0", "ϵ", "σ", " "}, {"K", "R0", "ϵ", "σ", "Δ"}, {"K", "r0", " ", " ", " "}, {"K", "r0", "rc", " ", " "}, {"Umin", "r0", "rc", " ", " "}, {"K", "r0", " ", " ", " "}, {"D", "α", "r0", " ", " "}, {"ϵ", "r0", "λ", " ", " "}, {"ϵ", "Δ", "r0", " ", " "}, {"ϵ", "Δ", "r0", " ", " "}, {"ϵ", "Δ", "r0", " ", " "}, {"K", "B1", "B2", "Rc", "U0"}, {"wLJ", "wCoul", " ", " ", " "}, {i18n("Interpolation style"), i18n("Distances"), " ", " ", " "}}}; int feunit_bond[2][FBONDS][FBONDS_P] = {{{1, 0, 0, 0, 0}, {1, 0, 1, 0, 0}, {1, 1, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 1, 1, 0}, {1, 0, 1, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}}, {{1, 0, 0, 0, 0}, {0, 1, 1, 1, 0}, {1, 0, 1, 0, 0}, {1, 0, 1, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 1}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}}}; char * fvars_angle[2][FANGLES][FANGLES_P] = {{{"k", "θ0", " ", " ", " ", " "}, {"k", "θ0", "k'", "k''", " ", " "}, {"k", "θ0", "ρ", " ", " ", " "}, {"k", "θ0", "ρ1", "ρ2", " ", " "}, {"k", "θ0", "ρ1", "ρ2", " ", " "}, {"k", "θ0", "a", "ρ", " ", " "}, {"k", "θ0", " ", " ", " ", " "}, {"A", "δ", "m", " ", " ", " "}, {"A", "θ0", "roij", "rojk", " ", " "}, {"A", "roij", "rojk", " ", " ", " "}, {"A", "θ0", "roij", " ", " ", " "}, {"A", "B", "C", "θ0", "roij", "rojk"}, {"k", "θ0", " ", " ", " ", " "}, {"fk", "θ0", "gr", "ro", " ", " "}, {" ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " "}}, {{"K", "θ0", " ", " ", " ", " "}, {"K", "θ0", "Kub", "rub", " ", " "}, {"θ0", "K2", "K3", "K4", " ", " "}, {"θ0", "K2", "K3", "K4", " ", " "}, {"K", " ", " ", " ", " ", " "}, {"K", "n", "θ0", " ", " ", " "}, {"K", "θ0", " ", " ", " ", " "}, {"C", "B", "n", " ", " ", " "}, {"Umin", "θ0", " ", " ", " ", " "}, {"Umin", "θ0", "A", " ", " ", " "}, {"K", "θ0", " ", " ", " ", " "}, {"KSS", "KBS0", "KBS1", "r12,0", "r32,0", "θ0"}, {"K", "λ0", " ", " ", " ", " "}, {"K", "C0", "C1", "C2", " ", " "}, {"K", "c", "n", "", " ", " "}, {"K", "θ0", " ", " ", " ", " "}, {"θ0", "K2", "K3", "K4", " ", " "}, {"K", "θ0", " ", " ", " ", " "}, {i18n("Interpolation style"), i18n("Angles"), " ", " ", " ", " "}}}; int feunit_angle[2][FANGLES][FANGLES_P] = {{{1, 0, 0, 0, 0, 0}, {1, 0, 1, 1, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}}, {{1, 0, 0, 0, 0, 0}, {1, 0, 1, 0, 0, 0}, {0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 0}, {1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}}}; char * fvars_dihedral[2][FDIHEDRAL][FDIHEDRAL_P] = {{{"A", "δ", "m", " ", " ", " ", " ", " ", " ", " ", " "}, {"k", "ϕ0", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"k", "ϕ0", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"A1", "A2", "A3", " ", " ", " ", " ", " ", " ", " ", " "}, {"A", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"A", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"A0", "A1", "A2", "A3", "ϕ0", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}}, {{"Umin", "θ0", "a", " ", " ", " ", " ", " ", " ", " ", " "}, {"K", "n", "d", i18n("weighting factor"), " ", " ", " ", " ", " ", " ", " "}, {"K", "n", "d", i18n("weighting factor"), " ", " ", " ", " ", " ", " ", " "}, {"Ed", "Embt", "Eebt", "Eat", "Eaat", "Ebb13", " ", " ", " ", " ", " "}, {"m", "K", "n", "d", " ", " ", " ", " ", " ", " ", " "}, {"K", "d", "n", " ", " ", " ", " ", " ", " ", " ", " "}, {"A", "B", "C", " ", " ", " ", " ", " ", " ", " ", " "}, {"A1", "A2", "A3", "A4", "A5", " ", " ", " ", " ", " ", " "}, {"n", "A", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"K1", "K2", "K3", "K4", " ", " ", " ", " ", " ", " ", " "}, {"K", "ϕ0", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"n", "C", "K", "a", "u", "L", "b", "v", "M", "c", "w"}, {i18n("Interpolation style"), i18n("Dihedrals"), " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Interpolation style"), i18n("Dihedrals"), " ", " ", " ", " ", " ", " ", " ", " ", " "}}}; int feunit_dihedral[2][FDIHEDRAL][FDIHEDRAL_P] = {{{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}}; /*gchar la_dih_class2[6][9] = {{"K1", "ϕ1", "K2", "ϕ2", "K3", "ϕ3", " ", " ", " "}, {"mbt", "A1", "A2", "A3", "r2", " ", " ", " ", " "}, {"ebt", "B1", "B2", "B3", "C1", "C2", "C3", "r1", "r3"}, {"at", "D1", "D2", "D3", "E1", "E2", "E3", "θ1", "θ2"}, {"aat", "M", "θ1", "θ2", " ", " ", " ", " ", " "}, {"bb13", "N", "r1", "r3", " ", " ", " ", " ", " "}}; int feu_la_dih_class2[6][9] = {{1, 0, 1, 0, 1, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0}};*/ char * fvars_inversion[2][FINVERS][FINVERS_P] = {{{"k", "ϕ0", " "}, {"k", "ϕ0", " "}, {"A", " ", " "}, {"k", "m", "ϕ0"}, {"A", "B", " "}, {" ", " ", " "}}, {{" ", " ", " "}, {" ", " ", " "}, {" ", " ", " "}, {" ", " ", " "}, {" ", " ", " "}, {" ", " ", " "}}}; int feunit_inversion[2][FINVERS][FINVERS_P] = {{{1, 0, 0}, {1, 0, 0}, {1, 0, 0}, {1, 0, 0}, {1, 1, 0}, {0, 0, 0}}, {{1, 0, 0}, {1, 0, 0}, {1, 0, 0}, {1, 0, 0}, {1, 1, 0}, {0, 0, 0}}}; // LAMMPS Impropers gchar * la_improper_style_keyw[11] = {"class2", "cossq", "cvff", "distance", "distharm", "fourier", "harmonic", "inversion/harmonic", "ring", "sqdistharm", "umbrella"}; /*gchar * la_improper_style_info[11] = {i18n("COMPASS class2 force field"), i18n("Cosine squared"), i18n("CVFF force field"), i18n("Distance between atom planes"), i18n("Out-of-the plane distance"), i18n("Fourier (multiple cosines)"), i18n("Harmonic"), i18n("Harmonic with Wilson Decius out-of-plane"), i18n("Planar conformation"), i18n("Squared distance harmonic"), i18n("DREIDING force field")}; gchar la_improper_var[11][LIMPROPERS] = {{"Ei", "Eaa", " ", " ", " "}, {"K", "χ0", " ", " ", " "}, {"K", "d", "n", " ", " "}, {"K2", "K4", " ", " ", " "} {"K", "d0", " ", " ", " "}, {"K", "C0", "C1", "C2", "all"}, {"K", "χ0", " ", " ", " "}, {"K", "ω0", " ", " ", " "}, {"K", "θ0", " ", " ", " "}, {"K", "d02", " ", " ", " "}, {"K", "ω0", " ", " ", " "}}; gchar la_imp_class2[2][7] = {{"K", "χ0", " ", " ", " ", " ", " "}, {"aa", "M1", "M2", "M3", "θ1", "θ2", "θ3"}}; int feu_la_imp_class2[2][7] = {{1, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 0, 0}}; int feu_la_improper[15][LIMPROPERS] = {{0, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 1, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}};*/ char * fvars_vdw[2][FVDW][FVDW_P] = {{{"A", "B", " ", " ", " ", " ", " "}, {"ϵ", "ρ", " ", " ", " ", " ", " "}, {"ϵ", "ρ", "c", " ", " ", " ", " "}, {"E0", "n", "m", "r0", " ", " ", " "}, {"A", "ρ", "C", " ", " ", " ", " "}, {"A", "B", "σ", "C", "D", " ", " "}, {"A", "B", " ", " ", " ", " ", " "}, {"E0", "n", "m", "r0", "rc", " ", " "}, {"E0", "r0", "k", " ", " ", " ", " "}, {"ϵ", "σ", "Δ", " ", " ", " ", " "}, {"A", "rc", " ", " ", " ", " ", " "}, {"ϵ", "ro", " ", " ", " ", " ", " "}, {"E0", "r0", "k", "c", " ", " ", " "}, {"a", "b", "σ", " ", " ", " ", " "}, {"Z1", "Z2", " ", " ", " ", " ", " "}, {"Z1", "Z2", "rm", "ξ", "E0", "r0", "k"}, {"Z1", "Z2", "rm", "ξ", "A", "ρ", "C"}, {"ϵ", "ρ", "ri", " ", " ", " ", " "}, {"A", "ρ", "C", "ri", " ", " ", " "}, {"A", "B", "ri", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " "}}, {{"A", "B", " ", " ", " ", " ", " "}, {"A", "B", " ", " ", " ", " ", " "}, {"ϵ", "ρ", " ", " ", " ", " ", " "}, {"ϵ", "ρ", "c", " ", " ", " ", " "}, {"E0", "n", "m", "r0", " ", " ", " "}, {"A", "ρ", "C", " ", " ", " ", " "}, {"A", "B", "σ", "C", "D", " ", " "}, {"E0", "n", "m", "r0", "rc", " ", " "}, {"E0", "r0", "k", " ", " ", " ", " "}, {"ϵ", "σ", "Δ", " ", " ", " ", " "}, {"A", "rc", " ", " ", " ", " ", " "}, {"ϵ", "ro", " ", " ", " ", " ", " "}, {"E0", "r0", "k", "c", " ", " ", " "}, {"a", "b", "σ", " ", " ", " ", " "}, {"Z1", "Z2", " ", " ", " ", " ", " "}, {"Z1", "Z2", "rm", "ξ", "E0", "r0", "k"}, {"Z1", "Z2", "rm", "ξ", "A", "ρ", "C"}, {"ϵ", "ρ", "ri", " ", " ", " ", " "}, {"A", "ρ", "C", "ri", " ", " ", " "}, {"A", "B", "ri", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " "}}}; int feunit_vdw[2][FVDW][FVDW_P] = {{{1, 1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 1, 0, 0, 0, 0}, {1, 0, 0, 1, 1, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 1, 0, 0}, {1, 1, 0, 0, 1, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 1, 0, 0, 0, 0}, {1, 0, 0, 1, 1, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 1, 0, 0}, {1, 1, 0, 0, 1, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}}}; char * fvars_met[2][FMETALS][FMETALS_P] = {{{" ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " "}, {"c0", "c1", "c2", "c", "A", "d", "β", " ", " "}, {"c0", "c1", "c2", "c3", "c4", "c", "A", "d", "B"}, {"ϵ", "a", "n", "m", "c", " ", " ", " ", " "}, {"A", "r0", "p", "B", "qij", " ", " ", " ", " "}, {"ϵ", "a", "m", "α", "ro", " ", " ", " ", " "}}, {{" ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " "}, {"c0", "c1", "c2", "c", "A", "d", "β", " ", " "}, {"c0", "c1", "c2", "c3", "c4", "c", "A", "d", "B"}, {"ϵ", "a", "n", "m", "c", " ", " ", " ", " "}, {"A", "r0", "p", "B", "qij", " ", " ", " ", " "}, {"ϵ", "a", "m", "α", "ro", " ", " ", " ", " "}}}; int feunit_met[2][FMETALS][FMETALS_P] = {{{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0}}}; char * fvars_ters[2][FTERSOFFS][FTERSOFFS_P] = {{{"A", "a", "B", "b", "R", "S", "β", "η", "c", "d", "h", "χ", "ω", "δ", " ", " "}, {"A", "a", "B", "b", "R", "S", "η", "δ", "c1", "c2", "c3", "c4", "c5", "h", "α", "β"}}, {{"A", "a", "B", "b", "R", "S", "β", "η", "c", "d", "h", "χ", "ω", "δ", " ", " "}, {"A", "a", "B", "b", "R", "S", "η", "δ", "c1", "c2", "c3", "c4", "c5", "h", "α", "β"}}}; int feunit_ters[2][FTERSOFFS][FTERSOFFS_P] = {{{1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}}; char * fvars_tbd[2][FTHREEBODY][FTHREEBODY_P] = {{{"k", "θ0", " ", " ", " "}, {"k", "θ0", "ρ", " ", " "}, {"k", "θ0", "ρ1", "ρ2", " "}, {"k", "θ0", "ρ1", "ρ2", " "}, {"k", "θ0", "a", "ρ", " "}, {"Dhb", "Rhb", " ", " ", " "}}, {{"k", "θ0", " ", " ", " "}, {"k", "θ0", "ρ", " ", " "}, {"k", "θ0", "ρ1", "ρ2", " "}, {"k", "θ0", "ρ1", "ρ2", " "}, {"k", "θ0", "a", "ρ", " "}, {"Dhb", "Rhb", " ", " ", " "}}}; int feunit_tbd[2][FTHREEBODY][FTHREEBODY_P] = {{{1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}}, {{1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}}}; char * fvars_fbd[2][FFOURBODY][FFOURBODY_P] = {{{"k", "ϕ0", " "}, {"k", "ϕ0", " "}, {"A", " ", " "}}, {{"k", "ϕ0", " "}, {"k", "ϕ0", " "}, {"A", " ", " "}}}; int feunit_fbd[2][FFOURBODY][FFOURBODY_P] = {{{1, 0, 0}, {1, 0, 0}, {1, 0, 0}}, {{1, 0, 0}, {1, 0, 0}, {1, 0, 0}}}; char * fvars_fext[2][FEXTERNAL][FEXTERNAL_P] = {{{"Ex", "Ey", "Ez", " ", " ", " "}, {"A", "n", " ", " ", " ", " "}, {"A", "z0", " ", " ", " ", " "}, {"Gx", "Gy", "Gz", " ", " ", " "}, {"Hx", "Hy", "Hz", " ", " ", " "}, {"A", "R0", "n", "Rcut", " ", " "}, {"A", "z0", "p", " ", " ", " "}, {"iindglob", "jindglob", "Pink-atom", " ", " ", " "}, {"iindglob", "jindglob", "k", "zmn", "zmx", " "}, {"iindglob", "jindglob", "k", "zmn", "zmx", " "}, {"iindglob", "jindglob", "k", "zmn", "zmx", " "}, {"Ex", "Ey", "Ez", "ωinps-1", " ", " "}, {"igidA", "jgidA", "k", "igidB", "jgidB", "R0"}}, {{"Ex", "Ey", "Ez", " ", " ", " "}, {"A", "n", " ", " ", " ", " "}, {"A", "z0", " ", " ", " ", " "}, {"Gx", "Gy", "Gz", " ", " ", " "}, {"Hx", "Hy", "Hz", " ", " ", " "}, {"A", "R0", "n", "Rcut", " ", " "}, {"A", "z0", "p", " ", " ", " "}, {"iindglob", "jindglob", "Pink-atom", " ", " ", " "}, {"iindglob", "jindglob", "k", "zmn", "zmx", " "}, {"iindglob", "jindglob", "k", "zmn", "zmx", " "}, {"iindglob", "jindglob", "k", "zmn", "zmx", " "}, {"Ex", "Ey", "Ez", "ωinps-1", " ", " "}, {"igidA", "jgidA", "k", "igidB", "jgidB", "R0"}}}; int feunit_fext[2][FEXTERNAL][FEXTERNAL_P] = {{{1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0}}, {{1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0}}}; int field_v[MAXDATA] = { 8, 8, 9, 7, 8, 5, 5, 8, 8, 9, 9, 10, 10, 10, 10, 6, 6, 5, 7, 8, 3}; int field_s[MAXDATA] = {650, 520, 520, 500, 600, 450, 600, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720}; int field_a[MAXDATA] = { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; gchar * ctitle[MAXDATA][12] ={{i18n("Id."), i18n("Name"), i18n("Multiplicity"), i18n("Chemistry"), i18n("Atom(s)"), i18n("Species"), i18n("Viz. 3D"), i18n("Viz. Atom num.")}, // Molecule(s) {i18n("Id."), i18n("Name"), i18n("Element"), i18n("Mass"), i18n("Charge"), i18n("Frozen"), i18n("Atom(s)"), i18n("Viz. 3D")}, // Atom(s) {i18n("Id."), i18n("Core Id"), i18n("Shell"), i18n("Mass"), i18n("Charge"), "k2 (1)", "k4 (2)", i18n("Viz. 3D"), i18n("Use (3)")}, // Core-shell unit(s) {i18n("Id."), i18n("At.1 Id"), i18n("At.2 Id"), i18n("Length [Å]"), i18n("av. d [Å] (1)"), i18n("Viz. 3D"), i18n("Use (2)")}, // Constraint(s) {i18n("Id."), i18n("Length [Å]"), i18n("av. d12 [Å] (1)"), i18n("Unit Id"), i18n("At. Id"), i18n("Weight (2)"), i18n("Viz. 3D"), i18n("Use (3)")}, // Mean force potential(s) {i18n("Id."), i18n("Atom(s) in unit"), i18n("List of atom(s)"), i18n("Viz. 3D"), i18n("Use (1)")}, // Rigid unit(s) {i18n("Id."), i18n("Atom Id."), i18n("Viz. 3D"), i18n("Use (1)"), i18n("Potential")}, // Tethering potential(s) {i18n("Id."), i18n("At.1"), i18n("At.2"), i18n("Bond(s)"), i18n("av. d [Å] (1)"), i18n("Viz. 3D"), i18n("Use (2)"), i18n("Potential (3)")}, // Bond(s) {i18n("Id."), i18n("At.1"), i18n("At.2"), i18n("Bond restraint(s)"), i18n("av. d [Å] (1)"), i18n("Viz. 3D"), i18n("Use (2)"), i18n("Potential (3)")}, // Bond restraint(s) {i18n("Id."), i18n("At.1"), i18n("At.2"), i18n("At.3"), i18n("Angle(s)"), i18n("av. θ [°] (1)"), i18n("Viz. 3D"), i18n("Use (2)"), i18n("Potential (3)")}, // Angle(s) {i18n("Id."), i18n("At.1"), i18n("At.2"), i18n("At.3"), i18n("Angular restraint(s)"), i18n("av. θ [°] (1)"), i18n("Viz. 3D"), i18n("Use (2)"), i18n("Potential (3)")}, // Angle restraint(s) {i18n("Id."), i18n("At.1"), i18n("At.2"), i18n("At.3"), i18n("At.4"), i18n("Dihedral(s)"), i18n("av. ϕ [°] (1)"), i18n("Viz. 3D"), i18n("Use (2)"), i18n("Potential (3)")}, // Dihedrals {i18n("Id."), i18n("At.1"), i18n("At.2"), i18n("At.3"), i18n("At.4"), i18n("Torsional restraint(s)"), i18n("av. ϕ [°] (1)"), i18n("Viz. 3D"), i18n("Use (2)"), i18n("Potential (3)")}, // Torsions {i18n("Id."), i18n("At.1"), i18n("At.2"), i18n("At.3"), i18n("At.4"), i18n("Improper(s)"), i18n("av. ϕ [°] (1)"), i18n("Viz. 3D"), i18n("Use (2)"), i18n("Potential (3)")}, // Impropers {i18n("Id."), i18n("At.1"), i18n("At.2"), i18n("At.3"), i18n("At.4"), i18n("Inversion(s)"), i18n("av. ϕ [°] (1)"), i18n("Viz. 3D"), i18n("Use (2)"), i18n("Potential (3)")}, // Inversion(s) {i18n("Id."), i18n("Spec.1"), i18n("Spec.2"), i18n("Viz. 3D"), i18n("Use (1)"), i18n("VdW potential")}, // VdW(s) {i18n("Id."), i18n("At.1"), i18n("At.2"), i18n("Viz. 3D"), i18n("Use (1)"), i18n("Metal potential")}, // Metal(s) {i18n("Id."), i18n("At."), i18n("Viz. 3D"), i18n("Use (1)"), i18n("Tersoff Pot.")}, // Tersoff potential(s) {i18n("Id."), i18n("At.1"), i18n("At.2*"), i18n("At.3"), i18n("Viz. 3D"), i18n("Use (1)"), i18n("Three-body Pot.")}, // Three-body potential(s) {i18n("Id."), i18n("At.1*"), i18n("At.2"), i18n("At.3"), i18n("At.4"), i18n("Viz. 3D"), i18n("Use (1)"), i18n("Four-body Pot.")}, // Four-body potential(s) {i18n("Id."), i18n("Use (1)"), i18n("Field type")}}; // External field(s) GType col_type[MAXDATA][12] = {{G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 0 - Molecule(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 1 - Atom(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_FLOAT, G_TYPE_FLOAT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 2 - Core-shell unit(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_FLOAT, G_TYPE_FLOAT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 3 - Constraint(s) {G_TYPE_INT, G_TYPE_FLOAT, G_TYPE_FLOAT, G_TYPE_INT, G_TYPE_INT, G_TYPE_FLOAT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 4 - Mean force potential(s) {G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 5 - Rigid unit(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 6 - Tethering potential(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 7 - Bond(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 8 - Bond restraint(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT}, // 9 - Angle(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT}, // 10 - Angle restraint(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT}, // 11 - Dihedral(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT}, // 12 - Improper(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT}, // 13 - Torsion(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT}, // 14 - Inversion(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 15 - vdW(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 16 - Metal(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 17 - Tersoff potential(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 18 - Three-body potential(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 19 - Four-body potential(s) {G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}}; // 20 - External field(s) // 0 - nothing // 1 - combo box // 2 - viz3D bool // 3 - pick bool // 4 - editable int is_special[MAXDATA][11] ={{0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0}, // Molecule(s) {0, 0, 0, 4, 4, 0, 0, 2, 0, 0, 0}, // Atom(s) {0, 0, 0, 4, 4, 4, 4, 2, 3, 0, 0}, // Core-shell unit(s) {0, 0, 0, 4, 0, 2, 3, 0, 0, 0, 0}, // Constraint(s) {0, 4, 0, 0, 0, 4, 2, 3, 0, 0, 0}, // Mean force potential(s) {0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0}, // Rigid unit(s) {0, 0, 2, 3, 1, 0, 0, 0, 0, 0, 0}, // Tethering potential(s) {0, 0, 0, 0, 0, 2, 3, 1, 0, 0, 0}, // Bond(s) {0, 0, 0, 0, 0, 2, 3, 1, 0, 0, 0}, // Bond restrain(s) {0, 0, 0, 0, 0, 0, 2, 3, 1, 0, 0}, // Angle(s) {0, 0, 0, 0, 0, 0, 2, 3, 1, 0, 0}, // Angle restraint(s) {0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0}, // Dihedral(s) {0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0}, // Torsional restraint(s) {0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0}, // Improper(s) {0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0}, // Inversion(s) {0, 0, 0, 2, 3, 1, 0, 0, 0, 0, 0}, // vdW(s) {0, 0, 0, 2, 3, 1, 0, 0, 0, 0, 0}, // Metal(s) {0, 0, 2, 3, 1, 0, 0, 0, 0, 0, 0}, // Tersoff potential(s) {0, 0, 0, 0, 2, 3, 1, 0, 0, 0, 0}, // Three-body potential(s) {0, 0, 0, 0, 0, 2, 3, 1, 0, 0, 0}, // Four-body potential(s) {0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0}}; // External field(s) gboolean afp_init[MAXDATC+MAXDATA] = {TRUE, // 0 - System TRUE, // 1 - Analysis TRUE, // 2 - Electrostatics TRUE, // 3 - Equilibration TRUE, // 4 - Thermodynamics TRUE, // 5 - Molecular dynamics TRUE, // 6 - Output TRUE, // 7 - Computational TRUE, // 8 - Molecule(s) TRUE, // 9 - Atom(s) FALSE, // 10 - Shell(s) FALSE, // 11 - Constraint(s) FALSE, // 12 - Mean force potential(s) FALSE, // 13 - Rigid unit(s) FALSE, // 14 - Tethering potential(s) TRUE, // 15 - Bond(s) FALSE, // 16 - Bond restraint(s) TRUE, // 17 - Angle(s) FALSE, // 18 _ Angle restraint(s) TRUE, // 19 - Dihedral(s) FALSE, // 20 - Torsional restraint(s) FALSE, // 21 - Improper(s) FALSE, // 22 - Inversion(s) TRUE, // 23 - Vdw(s) FALSE, // 24 - Metal(s) FALSE, // 25 - Tersoff potential(s) FALSE, // 26 - Three-body potential(s) FALSE, // 27 - Four-body potential(s) FALSE};// 28 - External field(s) gchar * mo_title[8]={i18n("Bond"), i18n("Bond restraint"), i18n("Angle"), i18n("Angle restraint"), i18n("Dihedral"), i18n("Torsional restraint"), i18n("Improper"), i18n("Inversion")}; // Energy converter, values taken from DL_POLY 'read_file.f90' and 'setup_module.f90' float internal_to_other[5] = {9648.530821, 418.4, 100.0, 0.831451115, 1.0}; GtkWidget * field_assistant; GtkTreeViewColumn * field_col[MAXDATA][11]; GtkCellRenderer * field_renderer[MAXDATA][11]; GtkWidget * mol_box[MOLIMIT-1]; GtkWidget * combo_mol[MOLIMIT-1]; GtkWidget * field_tree[MAXDATA]; GtkWidget * field_label[MAXDATA]; GtkTreeStore * field_model[MAXDATA]; GtkTreeIter field_iter; int atom_init = PARTIAL_COORD_AND_SPEC; //SPEC_ONLY; classical_field * tmp_field; glwin * tmp_view = NULL; project * tmp_proj; coord_info * tmp_coord; field_molecule * tmp_fmol; molecule * tmp_mol; field_atom* tmp_fat, * tmp_fbt, * tmp_fct, * tmp_fdt; field_shell * tmp_fshell; field_constraint * tmp_fcons; field_pmf * tmp_fpmf; field_rigid * tmp_frig; field_tethered * tmp_ftet; field_prop * tmp_fprop; field_struct * tmp_fstr; field_nth_body * tmp_fbody; field_nth_body * new_body; field_external * tmp_fext; //GtkWidget * view[13]; GtkWidget * aview; GtkWidget * cs_label[2]; GtkWidget * fwin = NULL; GtkWidget * cwin = NULL; GtkWidget * mol_num_label = NULL; GtkWidget * fibox[MAXDATC+MAXDATA+2]; GtkWidget * enbox; GtkWidget * ff_but[19]; int field_object = FALSE; gboolean field_color = FALSE; int num_field_objects = 0; int row_id; extern void field_unselect_all (); extern gboolean tersoff_question (); extern void check_tersoffs (int id, int key); extern void check_to_visualize_properties (int id); extern int get_num_vdw_max (); extern gchar * get_body_element_name (field_nth_body * body, int aid, int nbd); extern void print_lammps_atom_file (GtkTextBuffer * buf); /*! \fn int struct_id (int f) \brief number of atoms in a structural element \param f the type of structural element */ int struct_id (int f) { if (f < 9) { return 2; } else if (f < 11) { return 3; } else { return 4; } } /*! \fn int body_at (int b) \brief find the number of atom(s) in a non bonded interaction \param b */ int body_at (int b) { if (b < 2) { return 2; } else if (b == 2) { return 1; } else { return b; } } model example; /*! \fn void set_mol_num_label () \brief classical force field prepare the molecule information widget */ void set_mol_num_label () { gchar * str; str = g_strdup_printf ("%d", tmp_field -> molecules); if (mol_num_label == NULL) { mol_num_label = markup_label(str, -1, -1, 0.0, 0.5); } else { gtk_label_set_text (GTK_LABEL(mol_num_label), str); gtk_label_set_use_markup (GTK_LABEL(mol_num_label), TRUE); } } /*! \fn void setup_cs_labels (int i) \brief classical force field prepare the core-shell description strings \param i the energy unit id */ void setup_cs_labels (int i) { gchar * str; str = g_strdup_printf (_("\t (1) Force constant of the core-shell spring in [%s Å-2]"), exact_name(fkeysw[activef][0][i])); gtk_label_set_text (GTK_LABEL(cs_label[0]), str); gtk_label_set_use_markup (GTK_LABEL(cs_label[0]), TRUE); g_free (str); str = g_strdup_printf (_("\t (2) Quartic (anharmonic) force constant of the core-shell spring in [%s Å-4]" " usually k2 >> k4"), exact_name(fkeysw[activef][0][i])); gtk_label_set_text (GTK_LABEL(cs_label[1]), str); gtk_label_set_use_markup (GTK_LABEL(cs_label[1]), TRUE); g_free (str); } int ** is_param; int * has_energy; int ** is_energy; gchar *** is_var; /*! \fn gchar * parameters_info (int obj, int key, gchar ** words, float * data) \brief prepare classical force field parameter description string \param obj the type of field object \param key the formalism key for this type of object \param words the string description lists \param data the value(s) to print */ gchar * parameters_info (int obj, int key, gchar ** words, float * data) { int i; gchar * str = NULL; if (fvalues[activef][obj][key] > 0) { // float v = internal_to_other[tmp_field -> energy_unit] / internal_to_other[ff_unit]; str = g_strdup_printf (" %s= %.3f", words[0], data[0]); for (i=1; i< fvalues[activef][obj][key]; i++) str = g_strdup_printf ("%s, %s= %.3f", str, words[i], data[i]); } else { str = g_strdup_printf (_("Tabulated")); } return str; } extern void print_all_field_struct (field_molecule * mol, int str); /*! \fn gboolean dlp_to_translate (int fid, int obj, int key) \brief test if fnames text is to be translated or not \param fid the target force field \param obj the target object in the force field \param key the target key for the object */ gboolean dlp_to_translate (int fid, int obj, int key) { switch (fid) { case 0: if (obj == 0 || obj == 1 || obj == 9 || obj == 13 || obj == 14 || obj == 15) return TRUE; if ((obj == 2 || obj == 3) && (key == 0 || key == 3 || key == 4 || key == 7 || key == 8 || key == 9)) return TRUE; if ((obj == 4 || obj == 5) && key != 13) return TRUE; if ((obj == 6 || obj == 7 || obj == 8) && key != 4) return TRUE; if (obj == 10 && (key == 2 || key == 6 || key == 7 || key == 8 || key == 9 || key == 10)) return TRUE; if (obj == 11 && key == 5) return TRUE; break; case 1: if (obj == 0 && (key == 1 || key == 2 || key == 3 || key == 5)) return TRUE; if (obj == 2 && key != 7) return TRUE; if (obj == 4 && key != 16) return TRUE; if (obj == 6 || obj == 8 || obj == 10) return TRUE; break; } return FALSE; } /*! \fn void fill_field_struct (GtkTreeStore * store, int id, int mo) \brief classical force field fill the tree store with structural element parameter(s) \param store the tree store to fill \param id the type of structural element \param mo the id of the target field molecule */ void fill_field_struct (GtkTreeStore * store, int id, int mo) { int j, k, l; char ** vars; gchar * stra, * strb, * strc; GtkTreeIter field_level; if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } #ifdef DEBUG //g_debug ("id= %d, mo= %d", id, mo); //if (id > 5) print_all_field_struct (tmp_fmol, id); #endif tmp_fstr = tmp_fmol -> first_struct[id]; l = id + 2; while (tmp_fstr) { gtk_tree_store_append (store, & field_level, NULL); tmp_fprop = tmp_fstr -> def; stra = g_strdup_printf ("%.3f", tmp_fstr -> av); strb = g_strdup_printf (_("Default: %s (%s)"), dlp_to_translate(activef,l,tmp_fprop -> key) ? _(fnames[activef][l][tmp_fprop -> key]) : fnames[activef][l][tmp_fprop -> key], exact_name(fkeysw[activef][l][tmp_fprop -> key])); if (id < 2) { vars = (char **)fvars_bond[activef][tmp_fprop -> key]; } else if (id < 4) { vars = (char **)fvars_angle[activef][tmp_fprop -> key]; } else if (id < 7) { vars = (char **)fvars_dihedral[activef][tmp_fprop -> key]; } else { vars = (char **)fvars_inversion[activef][tmp_fprop -> key]; } strc = parameters_info (l-1, tmp_fprop -> key, vars, tmp_fprop -> val); for (k=0; k aid[k]) -> name, -1); gtk_tree_store_set (store, & field_level, 0, tmp_fstr -> id+1, k+1, tmp_fstr -> num, k+2, stra, k+3, tmp_fstr -> def -> show, k+4, tmp_fstr -> def -> use, k+5, strb, k+6, strc, k+7, tmp_fstr -> id, -1); g_free (stra); g_free (strb); g_free (strc); tmp_fat = get_active_atom (mo, tmp_fstr -> aid[0]); tmp_fbt = get_active_atom (mo, tmp_fstr -> aid[1]); if (id > 1) tmp_fct = get_active_atom (mo, tmp_fstr -> aid[2]); if (id > 3) tmp_fdt = get_active_atom (mo, tmp_fstr -> aid[3]); if (id < 2) { print_dlp_bond (id, NULL, tmp_fstr, tmp_fmol -> fragments[0], store, & field_level); } else if (id < 4) { print_dlp_angle (id, NULL, tmp_fstr, tmp_fmol -> fragments[0], store, & field_level); } else if (id < 6) { print_dlp_dihedral (id, NULL, tmp_fstr, tmp_fmol -> fragments[0], store, & field_level); } else if (id < 8) { print_dlp_improper_inversion (id, NULL, tmp_fstr, tmp_fmol -> fragments[0], store, & field_level); } tmp_fstr = tmp_fstr -> next; } } /*! \fn void fill_field_body (GtkTreeStore * store, int id) \brief classical force field fill the tree store with non bonded parameter(s) \param store the tree store to fill \param id the type of non bonded interaction */ void fill_field_body (GtkTreeStore * store, int id) { int i, j, k, l; gchar * stra, * strb; GtkTreeIter field_level; if (! id) { i = get_num_vdw_max (); } tmp_fbody = tmp_field -> first_body[id]; k = body_at(id); for (i=0; i < tmp_field -> nbody[id]; i++) { gtk_tree_store_append (store, & field_level, NULL); for (j=0; j na[j] > 0) { if (! id) { gtk_tree_store_set (store, & field_level, j+1, get_body_element_name (tmp_fbody, j, 0), -1); } else { l = tmp_fbody -> ma[j][0]; gtk_tree_store_set (store, & field_level, j+1, get_active_atom (l, tmp_fbody -> a[j][0]) -> name, -1); } } } stra = g_strdup_printf ("%s (%s)", dlp_to_translate(activef,10+id,tmp_fbody -> key) ? _(fnames[activef][10+id][tmp_fbody -> key]) : fnames[activef][10+id][tmp_fbody -> key], exact_name(fkeysw[activef][10+id][tmp_fbody -> key])); if (id == 0) strb = parameters_info (9+id, tmp_fbody -> key, fvars_vdw[activef][tmp_fbody -> key], tmp_fbody -> val); if (id == 1) strb = parameters_info (9+id, tmp_fbody -> key, fvars_met[activef][tmp_fbody -> key], tmp_fbody -> val); if (id == 2) strb = parameters_info (9+id, tmp_fbody -> key, fvars_ters[activef][tmp_fbody -> key], tmp_fbody -> val); if (id == 3) strb = parameters_info (9+id, tmp_fbody -> key, fvars_tbd[activef][tmp_fbody -> key], tmp_fbody -> val); if (id == 4) strb = parameters_info (9+id, tmp_fbody -> key, fvars_fbd[activef][tmp_fbody -> key], tmp_fbody -> val); gtk_tree_store_set (store, & field_level, 0, tmp_fbody -> id+1, k+1, tmp_fbody -> show, k+2, tmp_fbody -> use, k+3, stra, k+4, strb, -1); g_free (stra); g_free (strb); if (tmp_fbody -> next != NULL) tmp_fbody = tmp_fbody -> next; } } /*! \fn void fill_field_model (GtkTreeStore * store, int f, int m) \brief classical force field fill the tree store \param store the tree store to fill \param f the type of field object \param m the target field molecule, if any */ void fill_field_model (GtkTreeStore * store, int f, int m) { GtkTreeIter field_level, unit_level, site_level; int i, j, k, l; gchar * stra, * strb, * strc, * strd; tmp_fmol = tmp_field -> first_molecule; //if (get_active_field_elements(f) >= GTK_LIMIT && ! tmp_field -> show_all[f]) { } //else { switch (f) { case 0: stra = NULL; for (i=0; i< tmp_field -> molecules; i++) { tmp_mol = tmp_fmol -> mol; for (j=0; j < tmp_proj -> nspec; j++) { if (tmp_mol -> species[j] > 0) { if (tmp_mol -> species[j] == 1) { if (stra == NULL) { stra = g_strdup_printf ("%s ", exact_name(tmp_proj -> chemistry -> label[j])); } else { stra = g_strdup_printf ("%s%s ", stra, exact_name(tmp_proj -> chemistry -> label[j])); } } else { if (stra == NULL) { stra = g_strdup_printf ("%s%d ", exact_name(tmp_proj -> chemistry -> label[j]), tmp_mol -> species[j]); } else { stra = g_strdup_printf ("%s%s%d ", stra, exact_name(tmp_proj -> chemistry -> label[j]), tmp_mol -> species[j]); } } } } gtk_tree_store_append (store, & field_level, NULL); gtk_tree_store_set (store, & field_level, 0, i+1, 1, tmp_fmol -> name, 2, tmp_fmol -> multi, 3, stra, 4, tmp_mol -> natoms, 5, tmp_mol -> nspec, 6, tmp_fmol -> show, 7, tmp_fmol -> show_id, -1); g_free (stra); stra = NULL; if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } break; case 1: if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } tmp_fat = tmp_fmol -> first_atom; for (i=0; i < tmp_fmol -> atoms; i++) { gtk_tree_store_append (store, & field_level, NULL); stra = g_strdup_printf ("%.3f", tmp_fat -> mass); strb = g_strdup_printf ("%.2f", tmp_fat -> charge); gtk_tree_store_set (store, & field_level, 0, i+1, 1, tmp_fat -> name, 2, tmp_proj -> chemistry -> label[tmp_fat -> sp], 3, stra, 4, strb, 5, tmp_fat -> frozen, 6, tmp_fat -> num / tmp_fmol -> multi, 7, tmp_fat -> show, -1); g_free (stra); g_free (strb); if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } break; case 2: if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } tmp_fshell = tmp_fmol -> first_shell; for (i=0; i < tmp_fmol -> shells; i++) { gtk_tree_store_append (store, & field_level, NULL); if (tmp_fshell -> ia[0]) { l = tmp_fmol -> atoms_id[tmp_fshell -> ia[0]-1][0].a; tmp_fat = get_active_atom (tmp_fmol -> id, l); stra = g_strdup_printf ("%d (%s)", tmp_fshell -> ia[0], exact_name(tmp_proj -> chemistry -> label[tmp_fat -> sp])); } else { stra = g_strdup_printf ("%s", _("None")); } if (tmp_fshell -> ia[1]) { l = tmp_fmol -> atoms_id[tmp_fshell -> ia[1]-1][0].a; tmp_fat = get_active_atom (tmp_fmol -> id, l); strb = g_strdup_printf ("%d (%s)", tmp_fshell -> ia[1], exact_name(tmp_proj -> chemistry -> label[tmp_fat -> sp])); } else { strb = g_strdup_printf ("%s", _("None")); } strc = g_strdup_printf ("%.3f", tmp_fshell -> m); strd = g_strdup_printf ("%.2f", tmp_fshell -> z); gtk_tree_store_set (store, & field_level, 0, i+1, 1, stra, 2, strb, 3, strc, 4, strd, 5, tmp_fshell -> k2, 6, tmp_fshell -> k4, 7, tmp_fshell -> show, 8, tmp_fshell -> use, -1); g_free (stra); g_free (strb); g_free (strc); g_free (strd); if (tmp_fshell -> next != NULL) tmp_fshell = tmp_fshell -> next; } break; case 3: if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } tmp_fcons = tmp_fmol -> first_constraint; for (i=0; i < tmp_fmol -> constraints; i++) { gtk_tree_store_append (store, & field_level, NULL); if (tmp_fcons -> ia[0]) { k = tmp_fmol -> atoms_id[tmp_fcons -> ia[0]-1][0].a; l = get_active_atom (m, k) -> sp; stra = g_strdup_printf ("%d (%s)", tmp_fcons -> ia[0], exact_name(tmp_proj -> chemistry -> label[l])); } else { stra = g_strdup_printf ("%s", _("None")); } if (tmp_fcons -> ia[1]) { k = tmp_fmol -> atoms_id[tmp_fcons -> ia[1]-1][0].a; l = get_active_atom (m, k) -> sp; strb = g_strdup_printf ("%d (%s)", tmp_fcons -> ia[1], exact_name(tmp_proj -> chemistry -> label[l])); } else { strb = g_strdup_printf ("%s", _("None")); } gtk_tree_store_set (store, & field_level, 0, i+1, 1, stra, 2, strb, 3, tmp_fcons -> length, 4, tmp_fcons -> av, 5, tmp_fcons -> show, 6, tmp_fcons -> use, -1); g_free (stra); g_free (strb); if (tmp_fcons -> next != NULL) tmp_fcons = tmp_fcons -> next; } break; case 4: if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } tmp_fpmf = tmp_fmol -> first_pmf; for (i=0; i < tmp_fmol -> pmfs; i++) { gtk_tree_store_append (store, & field_level, NULL); gtk_tree_store_set (store, & field_level, 0, i+1, 1, tmp_fpmf -> length, 2, tmp_fpmf -> av, 3, 0, 4, 0, 5, 0.0, 6, tmp_fpmf -> show, 7, tmp_fpmf -> use, -1); for (j=0; j<2; j++) { gtk_tree_store_append (store, & unit_level, & field_level); gtk_tree_store_set (store, & unit_level, 0, -(i+1), 1, 0.0, 2, 0.0, 3, j+1, 4, 0, 5, 0.0, 6, tmp_fpmf -> show, 7, FALSE, -1); if (tmp_fpmf -> num[j] > 0) { for (k=0; k num[j]; k++) { gtk_tree_store_append (store, & site_level, & unit_level); gtk_tree_store_set (store, & site_level, 0, -(i+1), 1, 0.0, 2, 0.0, 3, -(j+1), 4, tmp_fpmf -> list[j][k]+1, 5, tmp_fpmf -> weight[j][k], 6, tmp_fpmf -> show, 7, FALSE, -1); } } } if (tmp_fpmf -> next != NULL) tmp_fpmf = tmp_fpmf -> next; } break; case 5: if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } tmp_frig = tmp_fmol -> first_rigid; for (i=0; i < tmp_fmol -> rigids; i++) { gtk_tree_store_append (store, & field_level, NULL); gtk_tree_store_set (store, & field_level, 0, i+1, 1, tmp_frig -> num, 2, NULL, 3, tmp_frig -> show, 4, tmp_frig -> use, -1); if (tmp_frig -> num > 0) { for (j=0; j num; j++) { l = tmp_fmol -> atoms_id[tmp_frig -> list[j]][0].a; k = get_active_atom (m, l) -> sp; stra = g_strdup_printf ("%d (%s)", tmp_frig -> list[j]+1, exact_name(tmp_proj -> chemistry -> label[k])); gtk_tree_store_append (store, & unit_level, & field_level); gtk_tree_store_set (store, & unit_level, 0, -(i+1), 1, 0, 2, stra, 3, FALSE, 4, FALSE, -1); g_free (stra); } } if (tmp_frig -> next != NULL) tmp_frig = tmp_frig -> next; } break; case 6: if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } tmp_ftet = tmp_fmol -> first_tethered; for (i=0; i < tmp_fmol -> tethered; i++) { j = tmp_fmol -> atoms_id[tmp_ftet -> num-1][0].a; k = get_active_atom (m, j) -> sp; stra = g_strdup_printf ("%d (%s)", tmp_ftet -> num, exact_name(tmp_proj -> chemistry -> label[k])); strb = g_strdup_printf ("%s (%s)", (activef) ? fnames[activef][1][tmp_ftet -> key] : _(fnames[activef][1][tmp_ftet -> key]), exact_name(fkeysw[activef][1][tmp_ftet -> key])); strc = parameters_info (0, tmp_ftet -> key, fvars_teth[activef][tmp_ftet -> key], tmp_ftet -> val); gtk_tree_store_append (store, & field_level, NULL); gtk_tree_store_set (store, & field_level, 0, i+1, 1, stra, 2, tmp_ftet -> show, 3, tmp_ftet -> use, 4, strb, 5, strc, -1); g_free (stra); g_free (strb); g_free (strc); if (tmp_ftet -> next != NULL) tmp_ftet = tmp_ftet -> next; } break; case SEXTERN: // External field tmp_fext = tmp_field -> first_external; for (i=0; i < tmp_field -> extern_fields; i++) { gtk_tree_store_append (store, & field_level, NULL); stra = g_strdup_printf ("%s (%s)", (activef) ? fnames[activef][15][tmp_fext -> key] : _(fnames[activef][15][tmp_fext -> key]), exact_name(fkeysw[activef][15][tmp_fext -> key])); gtk_tree_store_set (store, & field_level, 0, tmp_fext -> id+1, 1, tmp_fext -> use, 2, stra, 3, parameters_info (14, tmp_fext -> key, fvars_fext[activef][tmp_fext -> key], tmp_fext -> val), -1); g_free (stra); if (tmp_fext -> next != NULL) tmp_fext = tmp_fext -> next; } break; default: if (f < MOLIMIT) { fill_field_struct (store, f-7, m); } else { fill_field_body (store, f - MOLIMIT); } break; } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_field_params (GtkCheckButton * but, gpointer data) \brief change classical force field parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_field_params (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_field_params (GtkToggleButton * but, gpointer data) \brief change classical force field parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_field_params (GtkToggleButton * but, gpointer data) #endif { int i, j; i = GPOINTER_TO_INT (data); tmp_field -> afp[i] = button_get_status ((GtkWidget *)but); if (i == MAXDATC) { for (j=0; j afp[MAXDATC]); combo_set_active (combo_mol[j], 0); } } else if (i > MAXDATC) { gtk_widget_set_visible (fibox[i+1], tmp_field -> afp[i]); } } /*! \fn gboolean set_nbd_but_sensitive (int nbid) \brief adjust non bonded interaction button sensitivity \param nbid the type of non bonded interaction */ gboolean set_nbd_but_sensitive (int nbid) { if (nbid == 0 || nbid == 2 || nbid == 5) { return TRUE; } else { int i, j; i = (nbid == 1) ? 2 : nbid; j = 0; field_molecule * ftmp = tmp_field -> first_molecule; while (ftmp) { j += ftmp -> atoms; ftmp = ftmp -> next; } gboolean res = (j >= i) ? TRUE : FALSE; return res; } } /*! \fn gchar * set_field_label (int f, int m) \brief prepare classical force field description string \param f the type of field object(s) \param m the field molecule id, if any */ gchar * set_field_label (int f, int m) { gchar * lab; int k; if (f < MOLIMIT) { if (tmp_field -> afp[MAXDATC]) { tmp_fmol = get_active_field_molecule (m); lab = g_strdup_printf (_("the %d different fragment(s) in molecule %s\n"), tmp_fmol -> multi, tmp_fmol -> name); } else { lab = g_strdup_printf (_("the system\n")); } } switch (f) { case 1: lab = g_strdup_printf (_("%seach contains the following %d type(s) of atom"), lab, tmp_fmol -> atoms); break; case 2: if (tmp_fmol -> shells == 0) { lab = g_strdup_printf (_("%sdo not contains any core-shell unit"), lab); } else { lab = g_strdup_printf (_("%seach contains the following %d core-shell unit"), lab, tmp_fmol -> shells); } break; case 3: if (tmp_fmol -> constraints == 0) { lab = g_strdup_printf (_("%sdo not contains any constraint"), lab); } else { lab = g_strdup_printf (_("%seach contains the following %d constraint(s)"), lab, tmp_fmol -> constraints); } break; case 4: if (tmp_fmol -> pmfs == 0) { lab = g_strdup_printf (_("%sdo not contains any mean force potential"), lab); } else { lab = g_strdup_printf (_("%seach contains the following %d type(s) of mean force potential(s)"), lab, tmp_fmol -> pmfs); } break; case 5: if (tmp_fmol -> rigids == 0) { lab = g_strdup_printf (_("%sdo not contains any rigid unit"), lab); } else { lab = g_strdup_printf (_("%seach contains the following %d rigid unit(s)"), lab, tmp_fmol -> rigids); } break; case 6: if (tmp_fmol -> tethered == 0) { lab = g_strdup_printf (_("%sdo not contains any tethering potential(s)"), lab); } else { lab = g_strdup_printf (_("%seach contains the following %d tethering potential(s)"), lab, tmp_fmol -> tethered); } break; case SEXTERN: if (tmp_field -> extern_fields == 0) { lab = g_strdup_printf (_("the force field do not contains any external field(s)")); } else { lab = g_strdup_printf (_("the force field contains the following %d external field(s)"), tmp_field -> extern_fields); } break; default: if (f < MOLIMIT) { if (f == 14) { if (tmp_fmol -> nstruct[f-7] == 0) { lab = g_strdup_printf (_("%sdo not contains any %s *"), lab, _(mo_title[f-7])); } else { lab = g_strdup_printf (_("%s contains the following %d type(s) %s *"), lab, tmp_fmol -> nstruct[f-7], _(intelemts[f])); } } else { if (tmp_fmol -> nstruct[f-7] == 0) { lab = g_strdup_printf (_("%sdo not contains any %s"), lab, _(mo_title[f-7])); } else { lab = g_strdup_printf (_("%s contains the following %d type(s) %s"), lab, tmp_fmol -> nstruct[f-7], _(intelemts[f])); } } break; } else { k = f - MOLIMIT; if (tmp_field -> nbody[k] == 0) { lab = g_strdup_printf (_("the force field do not contains any %s"), _(elemt[f])); } else { lab = g_strdup_printf (_("the force field contains the following %d %s"), tmp_field -> nbody[k], _(elemts[f])); } break; } } return lab; } /*! \fn G_MODULE_EXPORT void changed_mol_box (GtkComboBox * box, gpointer data) \brief classical force field assistant change the target molecule for the page \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_mol_box (GtkComboBox * box, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); j = combo_get_active ((GtkWidget *)box); gtk_label_set_text (GTK_LABEL(field_label[i]), set_field_label(i, j)); gtk_label_set_use_markup (GTK_LABEL(field_label[i]), TRUE); gtk_tree_store_clear (field_model[i]); fill_field_model (field_model[i], i, j); } /*! \fn void update_field_trees () \brief classical force field assistant update all tree models */ void update_field_trees () { int i; for (i=0; i 0 && i < MOLIMIT) { changed_mol_box (GTK_COMBO_BOX (combo_mol[i-1]), GINT_TO_POINTER(i)); } else { if (i > 0) { gtk_label_set_text (GTK_LABEL(field_label[i]), set_field_label(i, 0)); gtk_label_set_use_markup(GTK_LABEL(field_label[i]), TRUE); } gtk_tree_store_clear (field_model[i]); fill_field_model (field_model[i], i, -1); } } } /*! \fn void get_is_energy (int i, int l) \brief get the energy unit linked parameter list \param i the type of force field object \param l 1 = prepare the associated string description(s), 0 = no description(s) */ void get_is_energy (int i, int l) { int j, k; j = (i > 1 && i < 8) ? (i-1)/2 + 1 - i/7 : i; is_energy = g_malloc0(fetypes[activef][i+1]*sizeof*is_energy); if (l) { is_var = g_malloc0(fetypes[activef][i+1]*sizeof*is_var); } switch (j) { case 0: for (k=0; k first_molecule; while (tmp_fmol) { tmp_fshell = get_active_shell(tmp_fmol -> id, 0); while (tmp_fshell) { if (! scale) { i =1; break; } else { tmp_fshell -> k2 = (tmp_fshell -> k2 * internal_to_other[sca]) / internal_to_other[scb]; tmp_fshell -> k4 = (tmp_fshell -> k4 * internal_to_other[sca]) / internal_to_other[scb]; tmp_fshell = tmp_fshell -> next; } } tmp_fmol = tmp_fmol -> next; } for (j=0; j<15; j++) { get_is_energy (j, 0); l = 0; if (j == 0) { tmp_fmol = tmp_field -> first_molecule; while (tmp_fmol) { tmp_ftet = get_active_tethered (tmp_fmol -> id, 0); while (tmp_ftet) { for (k=0; k key]; k++) { if (is_energy[tmp_ftet -> key][k]) { is_param[j][tmp_ftet -> key] ++; if (scale) tmp_ftet -> val[k]= (tmp_ftet -> val[k] * internal_to_other[sca]) / internal_to_other[scb]; l ++; } } tmp_ftet = tmp_ftet -> next; } tmp_fmol = tmp_fmol -> next; } } else if (j>0 && j<9) { tmp_fmol = tmp_field -> first_molecule; while (tmp_fmol) { tmp_fstr = tmp_fmol -> first_struct[j-1]; //get_active_struct (j-1, tmp_fmol -> id, 0); while (tmp_fstr) { for (k=0; k def -> key]; k++) { if (is_energy[tmp_fstr -> def -> key][k]) { is_param[j][tmp_fstr -> def -> key] ++; if (scale) tmp_fstr -> def -> val[k] = (tmp_fstr -> def -> val[k] * internal_to_other[sca]) / internal_to_other[scb]; l ++; } } tmp_fprop = tmp_fstr -> other; while (tmp_fprop) { for (k=0; k key]; k++) { if (is_energy[tmp_fprop -> key][k]) { is_param[j][tmp_fprop -> key] ++; if (scale) tmp_fprop -> val[k] = (tmp_fprop -> val[k] * internal_to_other[sca]) / internal_to_other[scb]; l ++; } } tmp_fprop = tmp_fprop -> next; } tmp_fstr = tmp_fstr -> next; } tmp_fmol = tmp_fmol -> next; } } else { tmp_fbody = get_active_body (0, j-9); while (tmp_fbody) { for (k=0; k key]; k++) { if (is_energy[tmp_fbody -> key][k]) { is_param[j][tmp_fbody -> key] ++; if (scale) tmp_fbody -> val[k] = (tmp_fbody -> val[k] * internal_to_other[sca]) / internal_to_other[scb]; l ++; } } tmp_fbody = tmp_fbody -> next; } } has_energy[j] = l; i += l; for (k=0; k energy_unit, i); tmp_field -> energy_unit = i; } g_free (is_param); destroy_this_dialog (dialog); } /*! \fn G_MODULE_EXPORT void changed_energy_unit (GtkComboBox * box, gpointer data) \brief change the classical force field energy unit - creating the dialog \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_energy_unit (GtkComboBox * box, gpointer data) { int i, j, k, l; i = combo_get_active ((GtkWidget *)box); if (i != tmp_field -> energy_unit) { if (field_file_has_energy_parameters(FALSE, 0, 0)) { GtkWidget * dialog = gtk_dialog_new_with_buttons (_("Change energy unit ?"), GTK_WINDOW(field_assistant), GTK_DIALOG_MODAL, _("Yes"), GTK_RESPONSE_YES, "No", GTK_RESPONSE_NO, NULL); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); GtkWidget * vbox = dialog_get_content_area (dialog); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Change the energy unit ?\nThe value of all field parameters that are energy related (listed below) will be scaled accordingly."), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("List of energy related parameters in your FIELD file:\n"), -1, -1, 0.5, 0.5), FALSE, FALSE, 0); GtkWidget * hbox; GtkWidget * vbax, * vbbx; GtkWidget * hax, * hbx; gchar * str; // Core-Shell tmp_fmol = tmp_field -> first_molecule; while (tmp_fmol) { tmp_fshell = get_active_shell(tmp_fmol -> id, 0); if (tmp_fshell) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); vbax = create_vbox (BSEP); vbbx = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbax, FALSE, FALSE, 0); hax = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbax, hax, FALSE, FALSE, 0); str = g_strdup_printf ("\t%s:", _(felemts[3])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hax, markup_label(str, 250, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbbx, FALSE, FALSE, 0); hbx = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbbx, hbx, FALSE, FALSE, 0); str = g_strdup_printf ("k2 %s k4", _("and")); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, markup_label(str, 250, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); break; } tmp_fmol = tmp_fmol -> next; } for (j=0; j<15; j++) { if (has_energy[j]) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); vbax = create_vbox (BSEP); vbbx = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbax, FALSE, FALSE, 0); hax = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbax, hax, FALSE, FALSE, 0); str = g_strdup_printf ("\t%s:", _(felemt[j+7])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hax, markup_label(str, 250, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbbx, FALSE, FALSE, 0); get_is_energy (j, 1); for (k=0; k energy_unit = i; } } combo_set_active ((GtkWidget *)box, tmp_field -> energy_unit); update_field_trees (); } /*! \fn GtkWidget * vbox_init (int p) \brief classical force field assistant prepare the field object configuration widgets \param p the type of field object */ GtkWidget * vbox_init (int p) { int i, j, k, l; int col[3]={5, 4, 4}; gchar * str; GtkWidget * vbox; GtkWidget * hbox; GtkWidget * ebox; vbox = create_vbox (BSEP); hbox = create_hbox (0); str = g_strdup_printf (_("Please select the %s:"), _(felemt[0])); ebox = fbox (hbox, str); g_free (str); enbox = create_combo (); for (j=0; j energy_unit); g_signal_connect (G_OBJECT (enbox), "changed", G_CALLBACK(changed_energy_unit), GINT_TO_POINTER(0)); gtk_widget_set_size_request (enbox, 250, 30); widget_set_sensitive (enbox, ! activef); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ebox, enbox, FALSE, FALSE, 60); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); hbox = create_hbox (0); ebox = fbox (hbox, _("Please select the component(s) of the force field:")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(" Intra-molecular interaction(s):"), 200, 20, 0.0, 0.5), FALSE, FALSE, 10); //str = g_strdup_printf (_("Use multiple molecule(s)")); //but = check_button (str, 225, 40, tmp_field -> afp[MAXDATC], G_CALLBACK(toggle_field_params), GINT_TO_POINTER(MAXDATC)); //g_free (str); //add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); hbox = create_hbox (0); k = 2+MAXDATC; l = 0; for (i=0; i<3; i++) { ebox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ebox, FALSE, FALSE, 20); for (j=0; j afp[k], G_CALLBACK(toggle_field_params), GINT_TO_POINTER(k)); g_free (str); widget_set_sensitive (ff_but[l], ! activef); add_box_child_start (GTK_ORIENTATION_VERTICAL, ebox, ff_but[l], FALSE, FALSE, 0); k ++; l ++; } } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Non-bonded interaction(s)"), 200, 20, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); hbox = create_hbox (0); for (i=0; i<3; i++) { ebox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ebox, FALSE, FALSE, 20); for (j=0; j<2; j++) { str = g_strdup_printf (_("Use %s"), _(elemts[k-MAXDATC])); if (activef) tmp_field -> afp[k] = FALSE; ff_but[l] = check_button (str, 225, 40, tmp_field -> afp[k], G_CALLBACK(toggle_field_params), GINT_TO_POINTER(k)); k ++; g_free (str); widget_set_sensitive (ff_but[l], set_nbd_but_sensitive (l-13)); widget_set_sensitive (ff_but[l], ! activef); add_box_child_start (GTK_ORIENTATION_VERTICAL, ebox, ff_but[l], FALSE, FALSE, 0); l ++; } } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); return vbox; } /*! \fn int get_field_tree_data (GtkWidget * tree, int treeid, GtkTreePath * path) \brief retrieve classical force field data from tree model \param tree the GtkWidget sending the signal \param treeid the type of field object \param path the path in the tree model */ int get_field_tree_data (GtkWidget * tree, int treeid, GtkTreePath * path) { int res = -1; GtkTreeModel * tmodel = gtk_tree_view_get_model (GTK_TREE_VIEW(tree)); if (gtk_tree_model_get_iter (tmodel, & field_iter, path)) { gtk_tree_model_get (tmodel, & field_iter, 0, & res, -1); if (res == 0) { gtk_tree_model_get (tmodel, & field_iter, field_v[treeid]+1, & res, -1); } else { res --; } } return res; } /*! \fn int get_field_data_id (int k, gchar * data) \brief get classical force field parameter from description string \param k the type of field object \param data the target description string */ int get_field_data_id (int k, gchar * data) { int i, j; gchar * str; i = -1; for (j=0; j -1) { if (i < MOLIMIT) k = combo_get_active (combo_mol[i-1]); if (i > 6 && i < MOLIMIT) { tmp_fstr = get_active_struct (i-7, k, j); o = struct_id (i); ids = allocint (o); if (i < 9) { vars = (char **)fvars_bond[activef][l]; } else if (i < 11) { vars = (char **)fvars_angle[activef][l]; } else if (i < 14) { vars = (char **)fvars_dihedral[activef][l]; } else { vars = (char **)fvars_inversion[activef][l]; } gtk_tree_model_get (GTK_TREE_MODEL(field_model[i]), iter, 0, & m, -1); if (m) { // Default prop for (n=0; n def -> key) { adjust_field_prop (i-7, o, NULL, ids, l); // print status of field prop str = g_strdup_printf (_("Default: %s"), str); gtk_tree_store_set (field_model[i], iter, field_v[i]-1, str, -1); gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (i-6, l, vars, tmp_fstr -> def -> val), -1); update_field_trees (); } } else { // Other prop gtk_tree_store_set_value (field_model[i], iter, field_v[i]-1, & val); for (n=1; n other, o, ids) -> val), -1); } g_free (ids); } else { switch (i) { case 6: tmp_ftet = get_active_tethered (k, j-1); tmp_ftet -> key = l; tmp_ftet -> val = NULL; tmp_ftet -> val = allocfloat (fvalues[activef][i-6][l]); gtk_tree_store_set_value (field_model[i], iter, field_v[i]-1, & val); gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (0, l, fvars_teth[activef][l], tmp_ftet-> val), -1); break; case SEXTERN: tmp_fext = get_active_external(j-1); tmp_fext -> key = l; tmp_fext -> val = NULL; tmp_fext -> val = allocfloat (fvalues[activef][i-6][l]); gtk_tree_store_set_value (field_model[i], iter, 2, & val); gtk_tree_store_set (field_model[i], iter, 3, parameters_info (i-6, l, fvars_fext[activef][l], tmp_fext -> val), -1); break; default: k = i - MOLIMIT; tmp_fbody = get_active_body (j-1, k); if (k == 2) { changeit = tersoff_question (); } if (changeit) { if (k == 2) { check_tersoffs (-1, l); gtk_tree_store_clear (field_model[i]); fill_field_model (field_model[i], i, -1); } else { tmp_fbody -> key = l; tmp_fbody -> val = NULL; tmp_fbody -> val = allocfloat (fvalues[activef][i-6][l]); gtk_tree_store_set_value (field_model[i], iter, field_v[i]-1, & val); } } else if (i == 17) { gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (i-6, l, fvars_ters[activef][l], tmp_fbody -> val), -1); } if (i == 15) gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (i-6, l, fvars_vdw[activef][l], tmp_fbody -> val), -1); if (i == 16) gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (i-6, l, fvars_met[activef][l], tmp_fbody -> val), -1); if (i == 18) gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (i-6, l, fvars_tbd[activef][l], tmp_fbody -> val), -1); if (i == 19) gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (i-6, l, fvars_fbd[activef][l], tmp_fbody -> val), -1); break; } } } g_free (str); g_value_unset(& vbl); } g_value_unset(& val); } /*! \fn GtkWidget * create_combo_mol (int f) \brief classical force field create molecule selection combo box \param f the type of force field object */ GtkWidget * create_combo_mol (int f) { int i; gchar * str; GtkWidget * combo = create_combo (); tmp_fmol = tmp_field -> first_molecule; for (i=0; i molecules; i++) { str = g_strdup_printf ("%d: %s", i+1, tmp_fmol -> name); combo_text_append (combo, str); g_free (str); if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } widget_set_sensitive (combo, (tmp_field -> molecules > 1) ? TRUE : FALSE); combo_set_active (combo, 0); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(changed_mol_box), GINT_TO_POINTER(f+1)); return combo; } int actel; /*! \fn gchar * pop_info (int i, int id) \brief get popup information message \param i the type of element \param id the id number of the element */ gchar * pop_info (int i, int id) { int j, k, l; gchar * str = NULL; actel = 0; switch (i) { case 0: tmp_fmol = get_active_field_molecule (row_id); str = g_strdup_printf (_("Molecule N°%d"), id+1); actel = 1; break; default: if (i < MOLIMIT) { j = combo_get_active (combo_mol[i-1]); tmp_fmol = get_active_field_molecule (j); } switch (i) { case 1: tmp_fat = get_active_atom (j, id); str = g_strdup_printf (_("Atom N°%d: \"%s\""), tmp_fat -> id+1, tmp_fat -> name); actel = tmp_fat -> num; break; case 2: if (tmp_fmol -> shells > 0) { tmp_fshell = get_active_shell (j, id); actel = 1; if (tmp_fshell -> ia[0]) { k = tmp_fmol -> atoms_id[tmp_fshell -> ia[0]-1][0].a; str = g_strdup_printf (_("Core-Shell N°%d: Atom %d (%s) - "), tmp_fshell -> id+1, tmp_fshell -> ia[0], exact_name(tmp_proj -> chemistry -> label[get_active_atom (j, k) -> sp])); } else { str = g_strdup_printf (_("Core-Shell N°%d: %s - "), tmp_fshell -> id+1, _("None")); } if (tmp_fshell -> ia[1]) { k = tmp_fmol -> atoms_id[tmp_fshell -> ia[1]-1][1].a; str = g_strdup_printf ("%s%d (%s)", str, tmp_fshell -> ia[1], exact_name(tmp_proj -> chemistry -> label[get_active_atom (j, k) -> sp])); } else { str = g_strdup_printf ("%s%s", str, _("None")); } } break; case 3: if (tmp_fmol -> constraints > 0) { tmp_fcons = get_active_constraint (j, id); actel = 1; if (tmp_fcons -> ia[0]) { k = tmp_fmol -> atoms_id[tmp_fcons -> ia[0]-1][0].a; str = g_strdup_printf (_("Constrained Bond N°%d: Atom %d (%s) - "), tmp_fcons -> id+1, tmp_fcons -> ia[0], exact_name(tmp_proj -> chemistry -> label[get_active_atom (j, k) -> sp])); } else { str = g_strdup_printf (_("Constrained Bond N°%d: %s - "), tmp_fcons -> id+1, _("None")); } if (tmp_fcons -> ia[1]) { k = tmp_fmol -> atoms_id[tmp_fcons -> ia[1]-1][1].a; str = g_strdup_printf ("%s%d (%s)", str, tmp_fcons -> ia[1], exact_name(tmp_proj -> chemistry -> label[get_active_atom (j, k) -> sp])); } else { str = g_strdup_printf ("%s%s", str, _("None")); } } break; case 4: if (tmp_fmol -> pmfs > 0) { tmp_fpmf = get_active_pmf (j, id); actel = 1; str = g_strdup_printf (_("Mean Force Potential N°%d"), tmp_fpmf -> id+1); } break; case 5: if (tmp_fmol -> rigids > 0) { tmp_frig = get_active_rigid (j, id); actel = 1; str = g_strdup_printf (_("Rigid Unit N°%d: %d Atom(s)"), tmp_frig -> id+1, tmp_frig -> num); } break; case 6: if (tmp_fmol -> tethered > 0) { tmp_ftet = get_active_tethered (j, id); actel = 1; str = g_strdup_printf (_("Tethering Potential N°%d"), tmp_ftet -> id+1); } break; case SEXTERN: if (tmp_field -> extern_fields > 0) { tmp_fext = get_active_external (row_id); str = g_strdup_printf ("%s N°: %d", _(felemt[i+1]), tmp_fext -> id+1); actel = 1; } break; default: if (i < MOLIMIT) { if (tmp_fmol -> nstruct[i-7] > 0) { actel = 1; tmp_fstr = get_active_struct (i-7, j, row_id); str = g_strdup_printf ("%s N°%d: \"", _(mo_title[i-7]), tmp_fstr -> id+1); for (k=0; k aid[k]) -> name); if (k nbody[k] > 0) { tmp_fbody = get_active_body (row_id, k); str = g_strdup_printf ("%s N°: %d \"%s", _(felemt[i+1]), tmp_fbody -> id+1, get_active_atom (tmp_fbody -> ma[0][0], tmp_fbody -> a[0][0]) -> name); for (l=1; l na[l] < 0) { str = g_strdup_printf (_("%s - NONE"), str); } else { str = g_strdup_printf ("%s - %s", str, get_active_atom (tmp_fbody -> ma[l][0], tmp_fbody -> a[l][0]) -> name); } } str = g_strdup_printf ("%s\"", str); actel = 1; } } break; } break; } return str; } /*! \fn gchar * pop_edit (int i) \brief get edit string label \param i the type of element to edit */ gchar * pop_edit (int i) { gchar * str = NULL; switch (i) { case 0: str = g_strdup_printf (_("Edit Name: \"%s\""), tmp_fmol -> name); break; default: str = g_strdup_printf (_("Edit properties %s"), _(intelemt[i])); break; } return str; } /*! \fn gchar * pop_add (int i) \brief get add string label \param i the type of element to add */ gchar * pop_add (int i) { gchar * str = NULL; if ((i>1 && i<7) || (i>MOLIMIT && i1 && i<7) || (i>MOLIMIT && i 0) { str = pop_edit (i); if (str) { fmenus = g_menu_new (); append_field_item (fmenus, str, "edit-fp", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(edit_field_prop), data, FALSE, FALSE, FALSE, TRUE); g_free (str); g_menu_append_section (fmenu, NULL, (GMenuModel *)fmenus); g_object_unref (fmenus); } switch (i) { case 0: if (tmp_field -> molecules < tmp_coord -> totcoord[2] && tmp_fmol -> multi > 1) { fmenus = g_menu_new (); append_field_item (fmenus, _("Add new molecule"), "add-mol", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(add_molecule_to_field), data, FALSE, FALSE, FALSE, TRUE); g_menu_append_section (fmenu, NULL, (GMenuModel *)fmenus); g_object_unref (fmenus); } if (tmp_field -> molecules > tmp_coord -> totcoord[3] && tmp_fmol -> mol -> multiplicity > 1 && tmp_fmol -> multi < tmp_fmol -> mol -> multiplicity) { fmenus = g_menu_new (); str = g_strdup_printf (_("Remove molecule %s from force field"), tmp_fmol -> name); append_field_item (fmenus, str, "rem-mol", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(remove_molecule_from_field), data, FALSE, FALSE, FALSE, TRUE); g_free (str); g_menu_append_section (fmenu, NULL, (GMenuModel *)fmenus); g_object_unref (fmenus); } break; default: if (i == 1) { j = combo_get_active (combo_mol[i-1]); tmp_fmol = get_active_field_molecule (j); if (actel > 1) { fmenus = g_menu_new (); str = g_strdup_printf (_("Created new force field atom from %s atom(s)"), tmp_fat -> name); append_field_item (fmenus, str, "add-fat", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_select_atom_id_from_fied_molecule), GINT_TO_POINTER(0), FALSE, FALSE, FALSE, TRUE); g_menu_append_section (fmenu, NULL, (GMenuModel *)fmenus); g_object_unref (fmenus); } l = 0; tmp_fbt = tmp_fmol -> first_atom; for (k=0; k atoms; k++) { if (tmp_fbt -> sp == tmp_fat -> sp) l ++; if (tmp_fbt -> next != NULL) tmp_fbt = tmp_fbt -> next; } if (l > 1) { fmenus = g_menu_new (); str = g_strdup_printf (_("Remove atom %s from force field molecule"), tmp_fat -> name); append_field_item (fmenus, str, "rem-fat", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(remove_atom_from_field_molecule), (gpointer *)tmp_fat, FALSE, FALSE, FALSE, TRUE); g_free (str); g_menu_append_section (fmenu, NULL, (GMenuModel *)fmenus); g_object_unref (fmenus); } } str = pop_remove (i); if (str) append_field_item (fmenu, str, "rem-fp", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(remove_field_prop), data, FALSE, FALSE, FALSE, TRUE); g_free (str); break; } } str = pop_add (i); if (str != NULL) { fmenus = g_menu_new (); append_field_item (fmenus, str, "add-prop", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(add_field_prop), data, FALSE, FALSE, FALSE, TRUE); g_free (str); g_menu_append_section (fmenu, NULL, (GMenuModel *)fmenus); g_object_unref (fmenus); } #ifdef GTK4 menu = gtk_popover_menu_new_from_model_full ((GMenuModel *)fmenu, GTK_POPOVER_MENU_NESTED); gtk_widget_set_parent (menu, widget); // gtk_widget_set_size_request (menu, -1, i); #else menu = gtk_menu_new_from_model ((GMenuModel *)fmenu); #endif str = g_strdup_printf ("ff-%d", i); gtk_widget_insert_action_group (menu, str, G_ACTION_GROUP(field_pop_actions)); g_free (str); #ifdef GTK4 pop_menu_at_pointer (menu, event_x, event_y); #else pop_menu_at_pointer (menu, event); #endif /* GtkWidget * prop; menu = gtk_menu_new (); if (str != NULL) { prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); if (actel > 0) add_menu_separator (menu); } if (actel > 0) { str = pop_edit (i); if (str != NULL) { prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(edit_field_prop), data); } switch (i) { case 0: if (tmp_field -> molecules < tmp_coord -> totcoord[2] && tmp_fmol -> multi > 1) { add_menu_separator (menu); prop = create_menu_item (FALSE, _("Add new molecule")); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(add_molecule_to_field), data); } if (tmp_field -> molecules > tmp_coord -> totcoord[3] && tmp_fmol -> mol -> multiplicity > 1 && tmp_fmol -> multi < tmp_fmol -> mol -> multiplicity) { add_menu_separator (menu); str = g_strdup_printf (_("Remove molecule %s from force field"), tmp_fmol -> name); prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(remove_molecule_from_field), (gpointer *)tmp_fmol); } break; default: if (i == 1) { j = combo_get_active (combo_mol[i-1]); tmp_fmol = get_active_field_molecule (j); if (actel > 1) { add_menu_separator (menu); str = g_strdup_printf (_("Created new force field atom from %s atom(s)"), tmp_fat -> name); prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(select_atom_id_from_fied_molecule), GINT_TO_POINTER(0)); } l = 0; tmp_fbt = tmp_fmol -> first_atom; for (k=0; k atoms; k++) { if (tmp_fbt -> sp == tmp_fat -> sp) l ++; if (tmp_fbt -> next != NULL) tmp_fbt = tmp_fbt -> next; } if (l > 1) { add_menu_separator (menu); str = g_strdup_printf (_("Remove atom %s from force field molecule"), tmp_fat -> name); prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(remove_atom_from_field_molecule), (gpointer *)tmp_fat); } } str = pop_remove (i); if (str != NULL) { prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(remove_field_prop), data); } break; } } str = pop_add (i); if (str != NULL) { if (actel > 0) add_menu_separator (menu); prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(add_field_prop), data); } pop_menu_at_pointer (menu, (GdkEvent *)event); #endif*/ } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_pop_up_field (GtkWidget * widget, gpointer data) \brief classical force field tree model popup contextual menu callback GTK3 \param widget the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_pop_up_field (GtkWidget * widget, gpointer data) { pop_up_field_context_menu (row_id, widget, NULL, data); return TRUE; } #endif #ifdef GTK4 /*! \fn void field_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief classical force field tree model button event GTK4 \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void field_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) #else /*! \fn void field_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief classical force field tree model button event GTK3 \param event the GdkEvent triggering the signal \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void field_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) #endif { if (event_type == GDK_BUTTON_PRESS) { GtkTreePath * path; GtkTreeViewColumn * column; int i, j, k; i = GPOINTER_TO_INT(data); #ifdef GTK4 int e_x, e_y; gtk_tree_view_convert_widget_to_bin_window_coords (GTK_TREE_VIEW(field_tree[i]), event_x, event_y, & e_x, & e_y); gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(field_tree[i]), e_x, e_y, & path, & column, & j, & k); #else gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(field_tree[i]), event_x, event_y, & path, & column, & j, & k); #endif if (path != NULL) { row_id = get_field_tree_data (field_tree[i], i, path); } else { row_id = 0; } if (event_button == 3) { #ifdef GTK4 pop_up_field_context_menu (row_id, field_tree[i], event_x, event_y, data); #else pop_up_field_context_menu (row_id, field_tree[i], event, data); #endif } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_field_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief classical force field tree model button pressed callback GTK4 \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_field_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { field_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_PRESS, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } /*! \fn G_MODULE_EXPORT void on_field_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief classical force field tree model button released callback GTK4 \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_field_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { field_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_RELEASE, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } #else /*! \fn G_MODULE_EXPORT gboolean on_field_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) \brief classical force field tree model button event callback GTK3 \param widget the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_field_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) { GdkEventButton * bevent = (GdkEventButton *)event; field_button_event (event, bevent -> x, bevent -> y, bevent -> button, bevent -> type, bevent -> time, data); return FALSE; } #endif /*! \fn void field_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the classical force field tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void field_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j, k, l; int tree = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & i, -1); if (tree < SEXTERN) { if (i == 0) { gtk_tree_model_get (mod, iter, field_v[tree]+1, & i, -1); i ++; } else if (i < 0) { i = - i; } for (k=0; k 5) ? 1 : 0; if (i) { set_renderer_markup (mod, iter, renderer, field_v[tree]); } else { gchar * str = NULL; GtkTreeViewColumn * cal; switch (tree) { case 0: gtk_tree_model_get (mod, iter, 3, & str, -1); break; default: // CHECK THIS cal = gtk_tree_view_get_column (GTK_TREE_VIEW(field_tree[tree]), 1); if (cal == col) { gtk_tree_model_get (mod, iter, 1, & str, -1); } else { gtk_tree_model_get (mod, iter, 2, & str, -1); } break; } g_object_set (renderer, "markup", str, NULL, NULL); g_free (str); } } /*! \fn void field_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer visibility in the classical force field tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void field_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; int tree = GPOINTER_TO_INT(data); if (tree != SEXTERN) { if (tree == 4 || tree == 5) { gtk_tree_model_get (mod, iter, 0, & j, -1); if (j < 0) j = 0; } else { for (i=0; i mass = val; if (i == 1) get_active_atom (l, k) -> charge = val; if (i == 2) get_active_shell (l, k) -> m = val; if (i == 3) get_active_shell (l, k) -> z = val; if (i == 4) get_active_shell (l, k) -> k2 = val; if (i == 5) get_active_shell (l, k) -> k4 = val; if (i == 6) get_active_constraint (l, k) -> length = val; if (i == 7) get_active_pmf (l, k) -> length = val; if (i == 8) { int n, m; gtk_tree_model_get (GTK_TREE_MODEL(field_model[j]), & iter, 3, & n, 4, & m, -1); if (n < 0 && m > 0) { get_active_pmf (l, k) -> weight[-n-1][m-1] = val; } } if (j < MOLIMIT) changed_mol_box (GTK_COMBO_BOX(combo_mol[j-1]), GINT_TO_POINTER(j)); } /*! \fn void get_field_iter_and_edit (gchar * path_string, gpointer data) \brief edit field property in the classical force field tree model \param path_string the path in the tree model \param data the associated data pointer */ void get_field_iter_and_edit (gchar * path_string, gpointer data) { int i = GPOINTER_TO_INT(data); gtk_tree_model_get_iter (GTK_TREE_MODEL(field_model[i]), & field_iter, gtk_tree_path_new_from_string (path_string)); if (i == 4 || i == 5 || (i > 6 && i < MOLIMIT)) { GValue vbl = {0, }; if (i < 6) { gtk_tree_model_get_value (GTK_TREE_MODEL(field_model[i]), & field_iter, 0, & vbl); } else { gtk_tree_model_get_value (GTK_TREE_MODEL(field_model[i]), & field_iter, field_v[i]+1, & vbl); } row_id = (int) g_value_get_int (& vbl); if (i < 6) row_id = abs(row_id) - 1; } edit_field_prop (g_simple_action_new ("Dummy", NULL), NULL, data); } /*! \fn G_MODULE_EXPORT void to_edit_field_prop (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) \brief to edit data in the classical force field tree model \param cell the GtkTreeView sending the signal \param editable the editable \param path_string the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void to_edit_field_prop (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) { destroy_this_widget (GTK_WIDGET(editable)); get_field_iter_and_edit (path_string, data); } /*! \fn G_MODULE_EXPORT void on_field_row_activated (GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * col, gpointer data) \brief activating row in the classical force field tree model \param treeview the GtkTreeView sending the signal \param path the path in the tree view \param col the column in the tree view \param data the associated data pointer */ G_MODULE_EXPORT void on_field_row_activated (GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * col, gpointer data) { get_field_iter_and_edit (gtk_tree_path_to_string (path), data); } /*! \fn GtkWidget * create_field_tree (int f) \brief classical force field create the list store selection widgets \param f the page number / type of field object(s) */ GtkWidget * create_field_tree (int f) { int i, j, k, l, m; gchar * str; GtkListStore * list_store_combo; GtkTreeIter iter; gboolean combox = FALSE; l = (f > 5) ? 1 : 0; m = 0; field_model[f] = gtk_tree_store_newv (field_v[f]+l+field_a[f], col_type[f]); field_tree[f] = gtk_tree_view_new_with_model(GTK_TREE_MODEL(field_model[f])); for (i=0; i 1 && is_special[f][i] < 4) { field_renderer[f][i] = gtk_cell_renderer_toggle_new (); str = g_strdup_printf ("%s", (f == 2 && (i-m == 5|| i-m == 6)) ? ctitle[f][i-m] : _(ctitle[f][i-m])); field_col[f][i] = gtk_tree_view_column_new_with_attributes (str, field_renderer[f][i], "active", i, NULL); g_free (str); g_signal_connect (G_OBJECT(field_renderer[f][i]), "toggled", G_CALLBACK(on_toggle_visualize_or_select_object), & tmp_view -> colorp[f][is_special[f][i]-2]); if ((f == 4 && i == field_v[f]+l-1) || f == SEXTERN) gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE(field_renderer[f][i]), TRUE); gtk_tree_view_column_set_clickable (field_col[f][i], TRUE); if (f != SEXTERN) { g_signal_connect (G_OBJECT(field_col[f][i]), "clicked", G_CALLBACK(visualize_or_select_all_elements), & tmp_view -> colorp[f][is_special[f][i]-2]); } } else { field_renderer[f][i] = gtk_cell_renderer_text_new(); str = g_strdup_printf ("%s", (f == 2 && (i-m == 5|| i-m == 6)) ? ctitle[f][i-m] : _(ctitle[f][i-m])); field_col[f][i] = gtk_tree_view_column_new_with_attributes (str, field_renderer[f][i], "text", i, NULL); g_free (str); } if (is_special[f][i] == 4) { g_object_set (field_renderer[f][i], "editable", TRUE, NULL); if (f < 3) { j = 2*(f-1) + i - 3; } else if (f == 3) { j = 6; } else if (f == 4) { j = (i == 1) ? 7 : 8; } g_signal_connect (G_OBJECT(field_renderer[f][i]), "edited", G_CALLBACK(edit_field_cell), GINT_TO_POINTER(j)); } if ((f == 0 && i == 3) || (f == 2 && (i == 1 || i == 2)) || (f == 3 && (i == 1 || i == 2))) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], field_set_color_and_markup, GINT_TO_POINTER(f), NULL); } else if (f == 4 || f == 5) { if ((f == 4 && i < 3) || (f == 5 && i < 2)) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], field_set_color_and_visible, GINT_TO_POINTER(f), NULL); } else if (f == 4 && (i == 3 || i == 4 || i == 5)) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], pmf_set_color_and_visible, GINT_TO_POINTER(i), NULL); } else if (f == 5 && i == 2) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], rig_set_color_and_visible, GINT_TO_POINTER(f), NULL); } else { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], field_set_visible, GINT_TO_POINTER(f), NULL); } } else if (f > 6 && f < MOLIMIT && (i == 0 || i == struct_id(f)+1)) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], prop_set_color_and_visible, GINT_TO_POINTER(f), NULL); } else if (l == 1 && i > field_v[f]-2) { if (i == field_v[f]-1) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], field_set_color_markup_and_visible_box, GINT_TO_POINTER(f), NULL); } else if (i == field_v[f]) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], field_set_color_markup_and_visible, GINT_TO_POINTER(f), NULL); g_object_set (field_renderer[f][i], "editable", TRUE, NULL); g_signal_connect (G_OBJECT(field_renderer[f][i]), "editing-started", G_CALLBACK(to_edit_field_prop), GINT_TO_POINTER(f)); } } else if (is_special[f][i] < 2 || is_special[f][i] > 3) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], field_set_color, GINT_TO_POINTER(f), NULL); } gtk_tree_view_column_set_alignment (field_col[f][i], 0.5); gtk_tree_view_append_column(GTK_TREE_VIEW(field_tree[f]), field_col[f][i]); } fill_field_model (field_model[f], f, 0); g_object_unref (field_model[f]); GtkTreeSelection * fieldselect = gtk_tree_view_get_selection (GTK_TREE_VIEW(field_tree[f])); gtk_tree_selection_set_mode (fieldselect, GTK_SELECTION_SINGLE); #ifdef GTK4 add_widget_gesture_and_key_action (field_tree[f], "field-button-pressed", G_CALLBACK(on_field_button_pressed), GINT_TO_POINTER(f), "field-button-released", G_CALLBACK(on_field_button_released), GINT_TO_POINTER(f), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #else g_signal_connect (G_OBJECT(field_tree[f]), "button_press_event", G_CALLBACK(on_field_button_event), GINT_TO_POINTER(f)); g_signal_connect (G_OBJECT(field_tree[f]), "popup-menu", G_CALLBACK(on_pop_up_field), GINT_TO_POINTER(f)); g_signal_connect (G_OBJECT(field_tree[f]), "row-activated", G_CALLBACK(on_field_row_activated), GINT_TO_POINTER(f)); #endif return field_tree[f]; } /*! \fn void create_field_list (GtkWidget * vbx, int f) \brief classical force field creation prepare list store selection widgets \param vbx the GtkWidget sending the signal \param f the page number */ void create_field_list (GtkWidget * vbx, int f) { int i; field_tree[f] = NULL; field_model[f] = NULL; for (i=0; i<11; i++) { field_renderer[f][i] = NULL; field_col[f][i] = NULL; } GtkWidget * scrollsets = create_scroll (NULL, -1, -1, GTK_SHADOW_ETCHED_IN); if (f == 0) { gtk_widget_set_size_request (scrollsets, field_s[f], 175); } else if (f < MOLIMIT) { if (f == 1) { gtk_widget_set_size_request (scrollsets, field_s[f], 320); } else if (f == 8 || f == 10 || f == 12 || f == 13) { gtk_widget_set_size_request (scrollsets, field_s[f], 180); } else { gtk_widget_set_size_request (scrollsets, field_s[f], 220); } } else { gtk_widget_set_size_request (scrollsets, field_s[f], 300); } add_container_child (CONTAINER_SCR, scrollsets, create_field_tree(f)); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, scrollsets, FALSE, FALSE, (800-field_s[f])/2); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, hbox, FALSE, FALSE, 20); } /*! \fn GtkWidget * create_mol_box (int f) \brief classical force field create molecule selection widgets \param f the type of force field object */ GtkWidget * create_mol_box (int f) { GtkWidget * hbox; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Please select molecule: "), -1, -1, 0.0, 0.5), FALSE, FALSE, 100); combo_mol[f] = create_combo_mol (f); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo_mol[f], FALSE, FALSE, 10); return hbox; } /*! \fn GtkWidget * vbox_field (int f) \brief classical force field create page option widgets \param f the page number */ GtkWidget * vbox_field (int f) { gchar * str; GtkWidget * vbx; GtkWidget * hbx; GtkWidget * vbox; GtkWidget * hbox; vbox = create_vbox (5); if (f > 6 && f < MOLIMIT) { hbx = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbx, FALSE, FALSE, 0); vbx = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, vbx, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, gtk_image_new_from_file(ifield[f-7]), FALSE, FALSE, 50); } if (f == 0) { hbox = fbox (vbox, _("Number of isolated molecular fragments: ")); str = g_strdup_printf ("%d", tmp_coord -> totcoord[2]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 75); g_free (str); str = g_strdup_printf (_("\tEach of these fragments can be described separately in the force field.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); hbox = fbox (vbox, _("Number of distinct molecules: ")); str = g_strdup_printf ("%d", tmp_coord -> totcoord[3]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 75); g_free (str); hbox = fbox (vbox, _("Number of molecules in the force field: ")); set_mol_num_label (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, mol_num_label, FALSE, FALSE, 75); } else if (f < MOLIMIT) { // if f > 0, ie. atoms tab at least // need a combobox to pick the 'active' molecule and its corresponding force field // If using molecules the combo box is active, and visible // Otherwise deactivate and hide the combo box // Anyway fill the treestore according to the selection mol_box[f-1] = create_mol_box (f-1); if (f > 6 && f < MOLIMIT) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, mol_box[f-1], FALSE, FALSE, 0); } else { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, mol_box[f-1], FALSE, FALSE, 0); } widget_set_sensitive (mol_box[f-1], tmp_field -> afp[MAXDATC]); } if (f > 6 && f < MOLIMIT) { hbox = fbox (vbx, g_strdup_printf (_("Properties %s: "), _(intelemt[f]))); } else { hbox = fbox (vbox, g_strdup_printf (_("Properties %s: "), _(intelemt[f]))); } if (f > 0) { field_label[f] = markup_label(set_field_label(f, 0), 120, 40, 0.35, 0.5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, field_label[f], TRUE, TRUE, 0); if (f > 6 && f < MOLIMIT) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, hbox, FALSE, FALSE, 10); } else { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); } } create_field_list (vbox, f); if (f > 6 && f < MOLIMIT) { if (f == 8 || f == 10 || f == 12 || f == 13) { int g = (f < 12) ? f - 1 : 11; str = g_strdup_printf (_("\t * in the FIELD file %s(s) appear in the %s section.\n" "\t They are presented separately in this assistant for clarity purposes only."), _(elemts[f]), _(elemts[g])); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } else if (f == 14) { str = g_strdup_printf (_("\t * the potential will be calculated by the sum of the 3 possible inversion terms between atoms 1 (center), 2, 3 and 4.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } str = g_strdup_printf (_("\t (1) average value for the force field element as measured in the model.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); str = g_strdup_printf (_("\t (2) only the selected element(s) will be used to create the force field.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); str = g_strdup_printf (_("\t (3) each force field element can be tuned separately, if not the Default parameters will be used.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } else if (f == 2) { cs_label[0] = markup_label(" ", -1, -1, 0.0, 0.5); cs_label[1] = markup_label(" ", -1, -1, 0.0, 0.5); setup_cs_labels (tmp_field -> energy_unit); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cs_label[0], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cs_label[1], FALSE, FALSE, 0); str = g_strdup_printf (_("\t (3) only the selected element(s) will be used to create the force field.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } else if (f == 3) { str = g_strdup_printf (_("\t (1) average value for the force field element as measured in the model.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); str = g_strdup_printf (_("\t (2) only the selected element(s) will be used to create the force field.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } else if (f == 4) { str = g_strdup_printf (_("\t (1) average distance between the barycenters of units 1 and 2 as measured in the model.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); str = g_strdup_printf (_("\t (2) if all 0.0 then atomic weight(s) will be used by DL-POLY.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); str = g_strdup_printf (_("\t (3) only the selected element(s) will be used to create the force field.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } else if ((f > 2 && f < 7) || f > 11) { str = g_strdup_printf (_("\t (1) only the selected element(s) will be used to create the force field.")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } return vbox; } GtkWidget * field_i_prep[2]; GtkWidget * field_i_box[2]; GtkWidget * field_i_lab[2]; GtkWidget * field_i_fixed[2]; GtkWidget * field_i_combo[2]; GtkWidget * field_i_obj[2]; GtkWidget * preview_but; gboolean assist_init; int saved_label_format[2]; int saved_label_position[2]; /*! \fn void close_the_assistant (GtkAssistant * assistant) \brief classical force field creation close the assistant \param assistant the target assistant */ void close_the_assistant (GtkAssistant * assistant) { field_assistant = destroy_this_widget (field_assistant); int j; #ifdef GTK3 // GTK3 Menu Action To Check gboolean i = (tmp_proj -> force_field[activef]) ? TRUE : FALSE; widget_set_sensitive (tmp_view -> color_styles[5], i); widget_set_sensitive (tmp_view -> color_styles[5+ATOM_MAPS], i); #endif field_color = FALSE; for (j=0; j<2; j++) { tmp_view -> anim -> last -> img -> acl_format[j] = saved_label_format[j]; tmp_view -> anim -> last -> img -> labels[j].position = saved_label_position[j]; } field_unselect_all (); /* tmp_fmol = tmp_field -> first_molecule; for (j=0; j molecules; j++) { g_debug ("FIELD_CANCEL:: Mol= %d, show= %d, show_id= %d", j, tmp_fmol -> show, tmp_fmol -> show_id); if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } */ // restore selection if any from calc.c restore_ogl_selection (tmp_view); mol_num_label = NULL; tmp_field = NULL; tmp_view = NULL; if (! assist_init) { if (tmp_proj -> force_field[activef]) { g_free (tmp_proj -> force_field[activef]); tmp_proj -> force_field[activef] = NULL; } } } /*! \fn G_MODULE_EXPORT void on_assistant_cancel (GtkAssistant * assistant, gpointer data) \brief classical force field creation cancel assistant \param assistant the GtkAssistant sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_assistant_cancel (GtkAssistant * assistant, gpointer data) { close_the_assistant (assistant); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWindow * assistant, gpointer data) \brief classical force field creation cancel event callback GTK4 \param assistant the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWindow * assistant, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data) \brief classical force field creation cancel event callback GTK3 \param assistant the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data) #endif { on_assistant_cancel (((GtkAssistant *)assistant), data); return TRUE; } /*! \fn G_MODULE_EXPORT void on_assistant_close (GtkAssistant * assistant, gpointer data) \brief classical force field creation close assistant \param assistant the GtkAssistant sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_assistant_close (GtkAssistant * assistant, gpointer data) { close_the_assistant (assistant); } /*! \fn G_MODULE_EXPORT gint on_assistant_go_forward (gint current_page, gpointer data) \brief classical force field assistant find the next page to go to \param current_page the current page id \param data the associated data pointer */ G_MODULE_EXPORT gint on_assistant_go_forward (gint current_page, gpointer data) { int i, j; j = -1; switch (current_page) { case 0: j = 1; if (! tmp_field -> prepare_file[0]) { j = MAXDATC+1; if (! tmp_field -> prepare_file[1]) j += MAXDATA+2; } return j; break; case MAXDATC+MAXDATA+2: return -1; break; default: if (current_page > MAXDATC-1 && tmp_field -> prepare_file[1]) { for (i=current_page-1; i afp[i]) { j = i+2; break; } } } else if (tmp_field -> prepare_file[0]) { for (i=current_page; i afp[i]) { j = i+1; break; } } } if (j == -1) j = MAXDATC+MAXDATA+2; return j; break; } } /*! \fn G_MODULE_EXPORT void on_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data) \brief prepare classical force field assistant pages before display \param assistant the GtkAssistant sending the signal \param page the current page \param data the associated data pointer */ G_MODULE_EXPORT void on_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data) { int i, j, k; i = gtk_assistant_get_current_page (assistant); field_unselect_all (); switch (i) { case 0: // hide_the_widgets (preview_but); break; case 1: // show_the_widgets (preview_but); break; case MAXDATC+MAXDATA+2: break; default: j = field_object = i-2-MAXDATC; toviz.c = 1; switch (j) { case 0: tmp_fmol = tmp_field -> first_molecule; for (k=0; k molecules; k++) { if (tmp_fmol -> show) visualize_object (j, k, -1); if (tmp_fmol -> show_id) visualize_object (-1, k, -1); if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } break; default: if (j > -1 && j < SEXTERN) check_to_visualize_properties (j); break; } break; } init_default_shaders (tmp_view); } /*! \fn void hide_show_this_pages (int start, int end, int status, int delta) \brief classical force field assistant show / hide pages \param start starting page id \param end ending page id \param status 0 = hide, 1 = show \param delta delta from starting page */ void hide_show_this_pages (int start, int end, int status, int delta) { int i; for (i=start; i afp[i] : status); } } } } /*! \fn void remove_classical_assistant_pages () \brief classical force field creation remove assistant pages */ void remove_classical_assistant_pages () { int i; GtkAssistant * assist = GTK_ASSISTANT(field_assistant); mol_num_label = destroy_this_widget (mol_num_label); for (i=MAXDATC+MAXDATA+1; i>-1; i--) { gtk_assistant_remove_page (assist, i+1); fibox[i] = destroy_this_widget(fibox[i]); } } /*! \fn G_MODULE_EXPORT void run_clean_field (GtkDialog * dial, gint response_id, gpointer data) \brief clean force field data - running the dialog \param dial the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_clean_field (GtkDialog * dial, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { gtk_assistant_set_page_complete (GTK_ASSISTANT (field_assistant), gtk_assistant_get_nth_page(GTK_ASSISTANT (field_assistant), 0), FALSE); gtk_label_set_text (GTK_LABEL(field_i_lab[1]), _("Initialize force field using: ")); int i; for (i=0; i<2; i++) { combo_set_active (field_i_combo[i], -1); //tmp_field -> prepare_file[i] = TRUE; widget_set_sensitive (field_i_combo[i], TRUE); widget_set_sensitive (field_i_lab[i], TRUE); widget_set_sensitive (field_i_prep[i], FALSE); field_i_obj[i] = destroy_this_widget (field_i_obj[i]); field_i_obj[i] = stock_image (CANCEL); show_the_widgets (field_i_obj[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[i], field_i_obj[i], TRUE, TRUE, 25); } for (i=0; i prepare_file[i] = button_get_status ((GtkWidget *)but); if (i == 1) { for (j=0; j<2; j++) { widget_set_sensitive (field_i_lab[j], (tmp_field -> prepare_file[i] && ! assist_init) ? TRUE : FALSE); widget_set_sensitive (field_i_combo[j], (tmp_field -> prepare_file[i] && ! assist_init) ? TRUE : FALSE); } hide_show_this_pages (MAXDATC-1, MAXDATC+MAXDATA, tmp_field -> prepare_file[1], 1); } else { hide_show_this_pages (0, MAXDATC, tmp_field -> prepare_file[0], 0); } } /*! \fn void add_classical_assistant_pages (int p) \brief classical force field assistant add pages \param p the target project id */ void add_classical_assistant_pages (int p) { int i; gchar * info; GtkAssistant * assist = GTK_ASSISTANT(field_assistant); // Control file for (i=0; i Finalize the creation of the %s input file(s) now !"), (activef) ? "LAMMPS" : "DL-POLY"); add_box_child_start (GTK_ORIENTATION_VERTICAL, fibox[i], markup_label(info, -1, -1, 0.5, 0.5), TRUE, TRUE, 100); g_free (info); add_box_child_start (GTK_ORIENTATION_VERTICAL, fibox[i], markup_label(_("\n \tNote: You can re-open this assistant later if required to adjust your choices\n"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); gtk_assistant_append_page (assist, fibox[i]); gtk_assistant_set_page_title (assist, fibox[i], (activef) ? _("Create the LAMMPS input file(s) now !") : _("Create the DL-POLY input file(s) now !")); gtk_assistant_set_page_type (assist, fibox[i], GTK_ASSISTANT_PAGE_CONFIRM); gtk_assistant_set_page_complete (assist, fibox[i], TRUE); gtk_assistant_update_buttons_state (assist); append_pages = TRUE; } gchar * field_init[3]={i18n("Atomic Species as Field Atoms"), i18n("Atomic Species and Total Coordinations as Field Atoms"), i18n("Atomic Species and Partial Coordinations as Field Atoms")}; // gboolean create_ff_structure (gpointer data) /*! \fn void create_ff_structure (int ai, int type) \brief create the classical force field data structure and update widgets \param ai how to initialize the force field (0 = atomic species, 1 = total coordination, 2 = partial coordination) \param type the type of force field to create (0 = DL-POLY, 1 = LAMMPS) */ void create_ff_structure (int ai, int type) { int i; //if (append_pages) remove_classical_assistant_pages (); tmp_proj -> force_field[activef] = create_force_field_data_structure (ai); tmp_proj -> force_field[activef] -> type = type; tmp_field = tmp_proj -> force_field[activef]; for (i=0; i afp[i] = afp_init[i]; for (i=0; i<2; i++) { widget_set_sensitive (field_i_prep[i], TRUE); if (activef && ! i) { widget_set_sensitive (field_i_prep[i], FALSE); tmp_field -> prepare_file[i] = FALSE; } else { tmp_field -> prepare_file[i] = button_get_status (field_i_prep[i]); } widget_set_sensitive (field_i_lab[i], FALSE); } // for (i=13; i<19; i++) widget_set_sensitive (ff_but[i], set_nbd_but_sensitive (i)); add_classical_assistant_pages (tmp_view -> proj); set_mol_num_label (); update_field_trees (); field_i_obj[1] = destroy_this_widget (field_i_obj[1]); field_i_obj[1] = stock_image (APPLY); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[1], field_i_obj[1], TRUE, TRUE, 25); gtk_label_set_text (GTK_LABEL(field_i_lab[1]), _("Force field was initialized using: ")); gtk_assistant_set_page_complete (GTK_ASSISTANT (field_assistant), gtk_assistant_get_nth_page(GTK_ASSISTANT (field_assistant), 0), TRUE); show_the_widgets (field_assistant); if (tmp_field -> md_opts[1] == 0.0) hide_the_widgets (extra_vbox[1]); hide_show_this_pages (0, MAXDATC, tmp_field -> prepare_file[0], 0); hide_show_this_pages (MAXDATC-1, MAXDATC+MAXDATA, tmp_field -> prepare_file[1], 1); // return FALSE; } /*! \fn G_MODULE_EXPORT void changed_init_box (GtkComboBox * box, gpointer data) \brief classical force field change initialization parameter \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_init_box (GtkComboBox * box, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); j = combo_get_active ((GtkWidget *)box); if (j > -1) { switch (i) { case 0: tmp_field -> type = j; setup_this_force_field (j); if (tmp_field -> type == j) { field_i_obj[0] = destroy_this_widget (field_i_obj[0]); field_i_obj[0] = stock_image (APPLY); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[0], field_i_obj[0], TRUE, TRUE, 25); show_the_widgets (field_i_obj[0]); } else { combo_set_active ((GtkWidget *)box, -1); } break; case 1: if (tmp_field -> type > -1) { widget_set_sensitive (field_i_combo[0], FALSE); widget_set_sensitive (field_i_combo[1], FALSE); field_i_obj[1] = destroy_this_widget (field_i_obj[1]); field_i_obj[1] = gtk_spinner_new (); show_the_widgets (field_i_obj[1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[1], field_i_obj[1], TRUE, TRUE, 25); show_the_widgets (field_i_obj[1]); gtk_spinner_start (GTK_SPINNER(field_i_obj[1])); // gdk_threads_add_idle (create_ff_structure, GINT_TO_POINTER(j)); create_ff_structure (j, tmp_field -> type); assist_init = TRUE; } else { show_warning (_("Please select the force field first !"), field_assistant); } break; } } } /*! \fn G_MODULE_EXPORT void show_force_field_preview (GtkButton * but, gpointer data) \brief show classical force field input files preview \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_force_field_preview (GtkButton * but, gpointer data) { GtkWidget * preview = (activef) ? dialogmodal (_("LAMMPS files preview"), GTK_WINDOW(field_assistant)) : dialogmodal (_("DL-POLY files preview"), GTK_WINDOW(field_assistant)); GtkWidget * notebook = gtk_notebook_new (); GtkWidget * scrollsets; GtkWidget * aview; gchar * ff_files[2][3] = {{"CONTROL", "FIELD" , "CONFIG"}, {"LAMMPS.IN", "LAMMPS.DATA", ""}}; int num_files[2] = {3, 2}; int i; for (i=0; i prepare_file[0]) || (i > 0 && tmp_field -> prepare_file[1])) { scrollsets = create_scroll (NULL, 700, 350, GTK_SHADOW_ETCHED_IN); aview = create_text_view (-1, -1, 0, 1, NULL, NULL, NULL); add_container_child (CONTAINER_SCR, scrollsets, aview); if (! activef) { switch (i) { case 0: print_dlp_control (gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); break; case 1: print_dlp_field (gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); break; case 2: print_dlp_config (gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); break; } } else { switch (i) { case 0: break; case 1: print_lammps_atom_file (gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); break; } } gtk_notebook_append_page (GTK_NOTEBOOK(notebook), scrollsets, gtk_label_new (ff_files[activef][i])); } } add_box_child_start (GTK_ORIENTATION_VERTICAL, dialog_get_content_area (preview), notebook, FALSE, FALSE, 0); if (gtk_assistant_get_current_page (GTK_ASSISTANT (field_assistant)) > MAXDATC && tmp_field -> prepare_file[0]) gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 1); run_this_gtk_dialog (preview, G_CALLBACK(run_destroy_dialog), NULL); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_on_assistant_apply (GtkNativeDialog * info, gint response_id, gpointer data) \brief on classical force field assistant apply - running the dialog GTK4 \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_assistant_apply (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_on_assistant_apply (GtkDialog * info, gint response_id, gpointer data) \brief on classical force field assistant apply - running the dialog GTK3 \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_assistant_apply (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif int i; GtkTextBuffer * buffer; GtkTextIter bStart; GtkTextIter bEnd; GError * err = NULL; gboolean result = FALSE; gchar * ff_files[2][3] = {{"CONTROL", "FIELD" , "CONFIG"}, {"LAMMPS.IN", "LAMMPS.DATA", ""}}; int num_files[2] = {3, 2}; if (response_id == GTK_RESPONSE_ACCEPT) { gchar * direname = file_chooser_get_current_folder (chooser); if (direname != NULL) { gchar * filename; gchar * str; gboolean doit[3]; for (i=0; i prepare_file[0]) || (i > 0 && tmp_field -> prepare_file[1])) { filename = g_strdup_printf ("%s/%s", direname, ff_files[activef][i]); if (g_file_test(filename, G_FILE_TEST_EXISTS)) { str = g_strdup_printf (_("%s file found in '%s'\nreplace existing %s file ?"), ff_files[activef][i], direname, ff_files[activef][i]); doit[i] = ask_yes_no (_("Replace file ?"), str, GTK_MESSAGE_QUESTION, field_assistant); g_free (str); } else { doit[i] = TRUE; } } else { doit[i] = FALSE; } } for (i=0; i message), 0, field_assistant); g_error_free (err); } g_free (filename); } } g_free (direname); } } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } /*! \fn void on_assistant_apply (GtkAssistant * assistant, gpointer data) \brief on classical force field assistant apply - creating the dialog \param assistant the GtkAssistant sending the signal \param data the associated data pointer */ void on_assistant_apply (GtkAssistant * assistant, gpointer data) { gchar * text; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif gchar * ff_type[2] = {"DL-POLY", "LAMMPS"}; text = g_strdup_printf (_("Saving %s input file(s)"), ff_type[activef]); info = create_file_chooser (text, GTK_WINDOW(assistant), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, _("Save")); g_free (text); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_on_assistant_apply), NULL); #else run_this_gtk_dialog (info, G_CALLBACK(run_on_assistant_apply), NULL); // GTK3 Menu Action To Check gboolean i = (tmp_proj -> force_field[activef]) ? TRUE : FALSE; widget_set_sensitive (tmp_view -> color_styles[5], i); widget_set_sensitive (tmp_view -> color_styles[5+ATOM_MAPS], i); #endif } /*! \fn void create_classical_force_field (int p, int f) \brief create classical force field prepare the assistant \param p the target project id \param f 0 = DL-POLY, 1 = LAMMPS */ void create_classical_force_field (int p, int f) { field_assistant = gtk_assistant_new (); gtk_widget_set_size_request (field_assistant, 800, 600); int i, j, k; activef = f; field_color = TRUE; field_object = -1; selected_aspec = -1; opengl_project_changed (p); tmp_proj = get_project_by_id(p); tmp_coord = tmp_proj -> coord; tmp_view = tmp_proj -> modelgl; tmp_fmol = NULL; tmp_fmol = g_malloc0(sizeof*tmp_fmol); gchar * field_type[2] = {"DL-POLY 4", "LAMMPS"}; // Preparing data structure and pointers append_pages = FALSE; if (tmp_proj -> force_field[activef] == NULL) { assist_init = FALSE; tmp_proj -> force_field[activef] = g_malloc0(sizeof*tmp_proj -> force_field[activef]); tmp_proj -> force_field[activef] -> type = -1; tmp_proj -> force_field[activef] -> atom_init = -1; for (i=0; i<2; i++) tmp_proj -> force_field[activef] -> prepare_file[i] = TRUE; if (activef) tmp_proj -> force_field[activef] -> prepare_file[0] = FALSE; } else { assist_init = TRUE; if (tmp_proj -> force_field[activef] -> type > -1) setup_this_force_field (tmp_proj -> force_field[activef] -> type); //tmp_field = duplicate_dlpoly_field (tmp_proj -> force_field[activef]); } tmp_field = tmp_proj -> force_field[activef]; gtk_window_set_resizable (GTK_WINDOW (field_assistant), FALSE); gtk_window_set_modal (GTK_WINDOW (field_assistant), TRUE); gchar * info = g_strdup_printf (_("%s calculation assistant"), field_type[f]); gtk_window_set_title (GTK_WINDOW(field_assistant), info); g_free (info); GtkWidget * intro = create_vbox (BSEP); info = g_strdup_printf (_(" This assistant will help you to setup a %s \n" "calculation using %s 3D model as starting point"), field_type[f], tmp_proj -> name); add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, markup_label(info, -1, -1, 0.5, 0.5), FALSE, FALSE, 50); g_free (info); gchar * i_titles[2][2] = {{i18n("Force field: "), i18n("Force field: ")}, {i18n("Initialize force field using: "), i18n("Force field was initialized using: ")}}; for (i=0; i<2; i++) { field_i_box[i] = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, field_i_box[i], FALSE, FALSE, 0); j = (i == 0) ? tmp_field -> type + 1 : tmp_field -> atom_init + 1; k = (j) ? 1 : 0; field_i_lab[i] = markup_label(_(i_titles[i][k]), 210, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[i], field_i_lab[i], FALSE, FALSE, 20); field_i_combo[i] = create_combo (); combo_set_active (field_i_combo[i], -1); switch (i) { case 0: for (j=0; j type); break; case 1: for (j=0; j<3; j++) combo_text_append (field_i_combo[i], _(field_init[j])); combo_set_active (field_i_combo[i], tmp_field -> atom_init); break; } widget_set_sensitive (field_i_combo[i], ! k); g_signal_connect (G_OBJECT (field_i_combo[i]), "changed", G_CALLBACK(changed_init_box), GINT_TO_POINTER(i)); field_i_fixed[i] = gtk_fixed_new (); gtk_widget_set_size_request (field_i_fixed[i], 410, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[i], field_i_fixed[i], FALSE, FALSE, 0); gtk_fixed_put (GTK_FIXED(field_i_fixed[i]), field_i_combo[i], 0, 0); field_i_obj[i] = (k) ? stock_image (APPLY) : stock_image (CANCEL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[i], field_i_obj[i], FALSE, FALSE, 25); } GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, hbox, FALSE, FALSE, 10); GtkWidget * but = check_button (_("\tDelete the existing force field data and reset the parameters to the default values"), -1, 40, FALSE, G_CALLBACK(clean_field), GINT_TO_POINTER(p)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 85); if (! f) { field_i_prep[0] = check_button (_("\tPrepare the CONTROL file to describe the calculation"), -1, 40, tmp_field -> prepare_file[0], G_CALLBACK(select_field_action), GINT_TO_POINTER(0)); field_i_prep[1] = check_button (_("\tPrepare the FIELD and CONFIG files to describe the force field and the atomic scale model"), -1, 40, tmp_field -> prepare_file[1], G_CALLBACK(select_field_action), GINT_TO_POINTER(1)); } else { field_i_prep[0] = check_button (_("\tPrepare the LAMMPS Input to describe the calculation"), -1, 40, tmp_field -> prepare_file[0], G_CALLBACK(select_field_action), GINT_TO_POINTER(0)); field_i_prep[1] = check_button (_("\tPrepare the LAMMPS Atom file to describe the force field and the atomic scale model"), -1, 40, tmp_field -> prepare_file[1], G_CALLBACK(select_field_action), GINT_TO_POINTER(1)); } for (i=0; i<2; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, hbox, FALSE, FALSE, 0); widget_set_sensitive (field_i_prep[i], assist_init); if (activef) widget_set_sensitive (field_i_prep[0], 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, field_i_prep[i], FALSE, FALSE, 50); } add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, markup_label(_("\n \tNote: You can re-open this assistant later if required to adjust your choices\n"), -1, -1, 0.0, 0.5), FALSE, FALSE, 50); gtk_assistant_append_page (GTK_ASSISTANT (field_assistant), intro); info = g_strdup_printf ("%s calculation set-up", field_type[f]); gtk_assistant_set_page_title (GTK_ASSISTANT (field_assistant), intro, info); g_free (info); gtk_assistant_set_page_type (GTK_ASSISTANT (field_assistant), intro, GTK_ASSISTANT_PAGE_INTRO); gtk_assistant_set_page_complete (GTK_ASSISTANT (field_assistant), intro, assist_init); preview_but = create_button (_("Preview"), IMG_STOCK, EDITF, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(show_force_field_preview), NULL); gtk_assistant_add_action_widget (GTK_ASSISTANT (field_assistant), preview_but); if (assist_init) { add_classical_assistant_pages (tmp_view -> proj); show_the_widgets (field_assistant); hide_show_this_pages (0, MAXDATC, tmp_field -> prepare_file[0], 0); hide_show_this_pages (MAXDATC-1, MAXDATC+MAXDATA, tmp_field -> prepare_file[1], 1); } else { show_the_widgets (field_assistant); hide_the_widgets (preview_but); } gtk_assistant_set_forward_page_func (GTK_ASSISTANT (field_assistant), on_assistant_go_forward, NULL, NULL); g_signal_connect (G_OBJECT (field_assistant), "prepare", G_CALLBACK(on_assistant_prepare), NULL); g_signal_connect (G_OBJECT (field_assistant), "cancel", G_CALLBACK(on_assistant_cancel), NULL); g_signal_connect (G_OBJECT (field_assistant), "close", G_CALLBACK(on_assistant_close), NULL); g_signal_connect (G_OBJECT (field_assistant), "apply", G_CALLBACK(on_assistant_apply), NULL); add_gtk_close_event (field_assistant, G_CALLBACK(on_assistant_cancel_event), NULL); for (i=0; i<2; i++) { saved_label_format[i] = tmp_view -> anim -> last -> img -> acl_format[i]; saved_label_position[i] = tmp_view -> anim -> last -> img -> labels[i].position; tmp_view -> anim -> last -> img -> labels[i].position = 0; tmp_view -> anim -> last -> img -> acl_format[i] = ID_IN_MOLECULE; } //g_debug ("Number of pages in the assitant: %d", gtk_assistant_get_n_pages (GTK_ASSISTANT (field_assistant))); //g_debug ("Active page is: %d", gtk_assistant_get_current_page (GTK_ASSISTANT (fwin))); } atomes_1.3.1/src/calc/dl_poly/dlp_print.c0000664000175000017500000025446015212624223020012 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_print.c * @short Functions to handle the output of the DL-POLY FIELD file \n Functions to handle the output of the DL-POLY CONTROL file \n Functions to handle the output of the DL-POLY CONFIG file \n Functions to fill the structural element(s) tree models in the assistant * @author Sébastien Le Roux */ /* * This file: 'dlp_print.c' * * Contains: * - The functions to handle the output of the DL-POLY FIELD file - The functions to handle the output of the DL-POLY CONTROL file - The functions to handle the output of the DL-POLY CONFIG file - The functions to fill the structural element(s) tree models in the assistant * * List of functions: int get_num_struct_to_print (field_molecule * fmol, int sid); int get_pbc (); gboolean print_this_imp_inv (imp_inv * inv, int di, int a, int b, int c, int d); gboolean member_of_atom (field_atom* fat, int id); gboolean print_ana (); void print_field_prop (field_prop * pro, int st, field_molecule * mol); void print_field_struct (field_struct * stru, field_molecule * mol); void print_all_field_struct (field_molecule * mol, int str); void print_dlp_improper_inversion (int di, GtkTextBuffer * buf, field_struct * dhii, int fi, GtkTreeStore * store, GtkTreeIter * iter); void print_dlp_dihedral (int dih, GtkTextBuffer * buf, field_struct * dh, int fi, GtkTreeStore * store, GtkTreeIter * iter); void print_dlp_angle (int ai, GtkTextBuffer * buf, field_struct * an, int fi, GtkTreeStore * store, GtkTreeIter * iter); void print_dlp_bond (int bi, GtkTextBuffer * buf, field_struct * bd, int fi, GtkTreeStore * store, GtkTreeIter * iter); void print_dlp_rigid (GtkTextBuffer * buf, field_rigid * rig); void print_dlp_tet (GtkTextBuffer * buf, field_tethered * tet); void print_dlp_pmf (GtkTextBuffer * buf, field_pmf * pmf); void print_dlp_cons (GtkTextBuffer * buf, field_constraint * cons); void print_dlp_shell (GtkTextBuffer * buf, field_molecule * fmol, field_shell * shell); void print_dlp_atom (GtkTextBuffer * buf, int at, int numat); void print_dlp_molecule (GtkTextBuffer * buf, field_molecule * fmol); void print_dlp_body (GtkTextBuffer * buf, field_nth_body * body); void print_dlp_tersoff_cross (GtkTextBuffer * buf, field_nth_body * body_a, field_nth_body * body_b); void print_dlp_tersoff (GtkTextBuffer * buf, field_nth_body * body); void print_dlp_field (GtkTextBuffer * buf); void print_dlp_config (GtkTextBuffer * buf); void print_int (GtkTextBuffer * buf, int data); void print_control_int (GtkTextBuffer * buf, int data, gchar * info_a, gchar * info_b, gchar * key); void print_float (GtkTextBuffer * buf, double data); void print_control_float (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key); void print_sci (GtkTextBuffer * buf, double data); void print_control_sci (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key); void print_string (GtkTextBuffer * buf, gchar * string); void print_control_string (GtkTextBuffer * buf, gchar * string, gchar * info_a, gchar * info_b, gchar * key); void print_control_key (GtkTextBuffer * buf, gchar * info, gchar * key); void print_dlp_control (GtkTextBuffer * buf); */ #include "dlp_field.h" #include "interface.h" extern gboolean in_bond (int at, int bd[2]); extern int get_num_vdw_max (); extern gchar * get_body_element_name (field_nth_body * body, int aid, int nbd); /*! \fn void print_field_prop (field_prop * pro, int st, field_molecule * mol) \brief print force field property \param pro the field property to print \param st the type of structural element \param mol the target field molecule */ void print_field_prop (field_prop * pro, int st, field_molecule * mol) { int i, j, k, u, v; field_atom* fat; j = struct_id(st+7); #ifdef DEBUG int w; g_debug ("Prop - natomes= %d", j); #endif for (i=0; i aid[i]); #endif if (mol != NULL) { for (k=0; k< mol -> multi; k++) { u = mol -> atoms_id[pro -> aid[i]][k].a; v = mol -> atoms_id[pro -> aid[i]][k].b; fat = get_active_atom (mol -> id, u); if (v > fat -> num) { #ifdef DEBUG g_debug ("********************** BIG BUG BIG BUG BIG BUG **********************"); g_debug (" TO CHEK:: multi= %d:: at.a= %d, at.b= %d", k, u, v); g_debug ("********************** BIG BUG BIG BUG BIG BUG **********************"); #endif } else { #ifdef DEBUG w = fat -> list[v]; g_debug (" multi= %d:: at.a= %d, at.b= %d, real_id= %d", k, u, v, w); #endif } } } } #ifdef DEBUG g_debug ("Prop - key= %d", pro -> key); j = fvalues[activef][st][pro -> key]; for (i=0; i val[i]); } g_debug ("Prop - show= %d", pro -> show); g_debug ("Prop - use= %d", pro -> use); #endif } /*! \fn void print_field_struct (field_struct * stru, field_molecule * mol) \brief print force field structural element \param stru the target field structural element \param mol the target field molecule */ void print_field_struct (field_struct * stru, field_molecule * mol) { #ifdef DEBUG int i; g_debug (" "); g_debug ("Struct - st= %d", stru -> st); g_debug ("Struct - id= %d", stru -> id); g_debug ("Struct - num= %d", stru -> num); g_debug ("Struct - av= %f", stru -> av); g_debug ("Struct - natomes= %d", struct_id(stru -> st+7)); for (i=0; i st+7); i++) { g_debug (" at[%d]= %d", i, stru -> aid[i]); } g_debug ("Default property:: "); #endif print_field_prop (stru -> def, stru -> st, NULL); if (stru -> other != NULL) { #ifdef DEBUG g_debug ("Other property(ies):: "); #endif field_prop * tmp_pr; tmp_pr = stru -> other; print_field_prop (tmp_pr, stru -> st, mol); while (tmp_pr -> next != NULL) { print_field_prop (tmp_pr -> next, stru -> st, mol); tmp_pr = tmp_pr -> next; } } } /*! \fn void print_all_field_struct (field_molecule * mol, int str) \brief print all field structural element(s) \param mol the target field molecule \param str the type of structural element */ void print_all_field_struct (field_molecule * mol, int str) { int i; field_struct * tmp_s; #ifdef DEBUG g_debug (" "); g_debug ("IN MOL:: %d", mol -> id); g_debug ("PRINTING STRUCT:: %d", str); g_debug ("Total Num of Struct %d:: NUM= %d", str, mol -> nstruct[str]); #endif tmp_s = mol -> first_struct[str]; for (i=0; i nstruct[str]; i++) { print_field_struct (tmp_s, mol); if (tmp_s -> next != NULL) tmp_s = tmp_s -> next; } #ifdef DEBUG g_debug ("END STRUCT :: %d", str); #endif } typedef struct imp_inv imp_inv; struct imp_inv { int a; int b; int c; int d; imp_inv * next; imp_inv * prev; }; /*! \fn gboolean print_this_imp_inv (imp_inv * inv, int di, int a, int b, int c, int d) \brief print this improper / inversion structure or not (already printed) ? \param inv the improper / inversion structure to check \param di 6 = improper, 7 = inversion \param a 1st atom id \param b 2nd atom id \param c 3rd atom id \param d 4th atom id */ gboolean print_this_imp_inv (imp_inv * inv, int di, int a, int b, int c, int d) { if (! inv) return TRUE; while (inv) { if (di == 6) { if (inv -> a == a && inv -> d == d) { if (inv -> b == b && inv -> c == c) return FALSE; if (inv -> b == c && inv -> c == b) return FALSE; } } else { if (inv -> a == a && inv -> b == b) return FALSE; /* { if (inv -> b == b && inv -> c == d && inv -> d == c) return FALSE; if (inv -> b == c && inv -> c == b && inv -> d == d) return FALSE; if (inv -> b == c && inv -> c == d && inv -> d == b) return FALSE; if (inv -> b == d && inv -> c == b && inv -> d == c) return FALSE; if (inv -> b == d && inv -> c == c && inv -> d == b) return FALSE; }*/ } inv = inv -> next; } return TRUE; } /*! \fn gboolean member_of_atom (field_atom* fat, int id) \brief is the id atom from the model in target field atom \param fat the target field atom \param id the atom id in the model */ gboolean member_of_atom (field_atom* fat, int id) { int i; for (i=0; i num; i++) { if (tmp_fat -> list[i] == id) return TRUE; } return FALSE; } /*! \fn void print_dlp_improper_inversion (int di, GtkTextBuffer * buf, field_struct * dhii, int fi, GtkTreeStore * store, GtkTreeIter * iter) \brief print / fill tree store with force field improper(s)/inversion(s) information \param di 6 = improper(s), 7 = inversion(s) \param buf the GtkTextBuffer to print into, if input print \param dhii the field improper / inversion structural element(s) to print \param fi the target fragment id \param store the target GtkTreeStore to store, if assistant tab creation / refresh \param iter the target tree iter to store the data, if assistant tab creation / refresh */ void print_dlp_improper_inversion (int di, GtkTextBuffer * buf, field_struct * dhii, int fi, GtkTreeStore * store, GtkTreeIter * iter) { int a, b, c, d, e, i, j, k, l, m, n, o, p, q, r, s, t, u, v; gboolean show; gchar * stra, * strb, * strc, * strd, * stre, * strf, * strg; float w; GtkTreeIter di_level; int * ids = allocint (4); imp_inv * first_imp_inv = NULL; imp_inv * this_ii = NULL; for (i=0; i num; i++) { j = tmp_fat -> list[i]; if (tmp_proj -> atoms[0][j].coord[2] == fi) { if ((tmp_proj -> atoms[0][j].numv > 2 && di == 6) || (tmp_proj -> atoms[0][j].numv == 3 && di == 7)) { a = ids[0] = tmp_fat -> list_id[i]; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == tmp_fbt -> id) { b = ids[1] = tmp_proj -> atoms[0][l].fid; for (m=0; m atoms[0][j].numv; m++) { if (m != k) { n = tmp_proj -> atoms[0][j].vois[m]; if (tmp_proj -> atoms[0][n].faid == tmp_fct -> id) { c = ids[2] = tmp_proj -> atoms[0][n].fid; for (o=0; o atoms[0][j].numv; o++) { if (o != k && o != m) { p = tmp_proj -> atoms[0][j].vois[o]; if (tmp_proj -> atoms[0][p].faid == tmp_fdt -> id) { d = ids[3] = tmp_proj -> atoms[0][p].fid; if (print_this_imp_inv(first_imp_inv, di, a, b, c, d)) { if (! first_imp_inv) { first_imp_inv = g_malloc0(sizeof*first_imp_inv); this_ii = first_imp_inv; } else { this_ii -> next = g_malloc0(sizeof*this_ii); this_ii -> next -> prev = this_ii; this_ii = this_ii -> next; } this_ii -> a = a; this_ii -> b = b; this_ii -> c = c; this_ii -> d = d; tmp_fprop = get_active_prop_using_atoms (dhii -> other, 4, ids); if (tmp_fprop == NULL) { tmp_fprop = dhii -> def; if (buf == NULL) show = FALSE; } else if (buf == NULL) { show = tmp_fprop -> show; } if (buf != NULL && tmp_fprop -> use) { if (di == 6) { stra = g_strdup_printf ("%4s\t%d\t%d\t%d\t%d",fkeysw[activef][di+2][tmp_fprop -> key], b+1, a+1, c+1, d+1); } else { stra = g_strdup_printf ("%4s\t%d\t%d\t%d\t%d",fkeysw[activef][di+2][tmp_fprop -> key], a+1, b+1, c+1, d+1); } print_info (stra, NULL, buf); g_free (stra); for (e=0; e key]; e++) { stra = g_strdup_printf ("\t%15.10f", tmp_fprop -> val[e]); print_info (stra, NULL, buf); g_free (stra); if (e == 2) { // Print 1-4 electrostatic interaction scale factor stra = g_strdup_printf ("\t%15.10f", 0.0); print_info (stra, NULL, buf); g_free (stra); // Print 1-4 van der Waals interaction scale factor stra = g_strdup_printf ("\t%15.10f", 0.0); print_info (stra, NULL, buf); g_free (stra); } } print_info ("\n", NULL, buf); } else if (buf == NULL) { stra = g_strdup_printf ("%d", a+1); strb = g_strdup_printf ("%d", b+1); strc = g_strdup_printf ("%d", c+1); strd = g_strdup_printf ("%d", d+1); w = 0.0; for (e=0; e multi; e++) { q = tmp_fmol -> atoms_id[a][e].a; r = tmp_fmol -> atoms_id[a][e].b; s = get_active_atom (tmp_fmol -> id, q) -> list[r]; q = tmp_fmol -> atoms_id[b][e].a; r = tmp_fmol -> atoms_id[b][e].b; t = get_active_atom (tmp_fmol -> id, q) -> list[r]; q = tmp_fmol -> atoms_id[c][e].a; r = tmp_fmol -> atoms_id[c][e].b; u = get_active_atom (tmp_fmol -> id, q) -> list[r]; q = tmp_fmol -> atoms_id[d][e].a; r = tmp_fmol -> atoms_id[d][e].b; v = get_active_atom (tmp_fmol -> id, q) -> list[r]; if (di == 6) { w += dihedral_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][t], & tmp_proj -> atoms[0][u], & tmp_proj -> atoms[0][s], & tmp_proj -> atoms[0][v]).angle; } else { w += inversion_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][s], & tmp_proj -> atoms[0][t], & tmp_proj -> atoms[0][u], & tmp_proj -> atoms[0][v]).angle; } } w /= tmp_fmol -> multi; stre = g_strdup_printf ("%.3f", w); strf = g_strdup_printf ("%s (%s)", dlp_to_translate(activef,di+2,tmp_fprop -> key) ? _(fnames[activef][di+2][tmp_fprop -> key]) : fnames[activef][di+2][tmp_fprop -> key], fkeysw[activef][di+2][tmp_fprop -> key]); strg = parameters_info (di+1, tmp_fprop -> key, fvars_dihedral[activef][tmp_fprop -> key], tmp_fprop -> val); gtk_tree_store_append (store, & di_level, iter); gtk_tree_store_set (store, & di_level, 0, 0, 1, stra, 2, strb, 3, strc, 4, strd, 5, 0, 6, stre, 7, show, 8, tmp_fprop -> use, 9, strf, 10, strg, 11, dhii -> id, -1); g_free (stra); g_free (strb); g_free (strc); g_free (strd); g_free (stre); g_free (strf); g_free (strg); } } } } } } } } } } } } } if (first_imp_inv) { this_ii = first_imp_inv; while (this_ii -> next) { this_ii = this_ii -> next; g_free (this_ii -> prev); } g_free (this_ii); } g_free (ids); } /*! \fn void print_dlp_dihedral (int dih, GtkTextBuffer * buf, field_struct * dh, int fi, GtkTreeStore * store, GtkTreeIter * iter) \brief print / fill tree store with force field dihedral(s) information \param dih 4 = dihderale(s), 5 = dihedral restraint(s) \param buf the GtkTextBuffer to print into, if input print \param dh the field dihedral / dihedral restraint structural element(s) to print \param fi the target fragment id \param store the target GtkTreeStore to store, if assistant tab creation / refresh \param iter the target tree iter to store the data, if assistant tab creation / refresh */ void print_dlp_dihedral (int dih, GtkTextBuffer * buf, field_struct * dh, int fi, GtkTreeStore * store, GtkTreeIter * iter) { int a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s; gboolean show; gchar * stra, * strb, * strc, * strd, * stre, * strf, * strg; float v; GtkTreeIter di_level; gboolean same_atom = FALSE; gboolean * already_done; if (tmp_fat -> id == tmp_fdt -> id && tmp_fbt -> id && tmp_fct -> id) { same_atom = TRUE; already_done = allocbool (tmp_fmol -> mol -> natoms); } int * ids = allocint (4); for (i=0; i num; i++) { j = tmp_fat -> list[i]; if (tmp_proj -> atoms[0][j].coord[2] == fi) { a = ids[0] = tmp_fat -> list_id[i]; if (same_atom) already_done[a] = TRUE; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == tmp_fbt -> id) { b = ids[1] = tmp_proj -> atoms[0][l].fid; for (m=0; m atoms[0][l].numv; m++) { n = tmp_proj -> atoms[0][l].vois[m]; if (n != j && tmp_proj -> atoms[0][n].faid == tmp_fct -> id) { c = ids[2] = tmp_proj -> atoms[0][n].fid; for (o=0; o atoms[0][n].numv; o++) { p = tmp_proj -> atoms[0][n].vois[o]; d = ids[3] = tmp_proj -> atoms[0][p].fid; if (p != j && p != l && tmp_proj -> atoms[0][p].faid == tmp_fdt -> id && (! same_atom || (same_atom && ! already_done[d]))) { tmp_fprop = get_active_prop_using_atoms (dh -> other, 4, ids); if (tmp_fprop == NULL) { tmp_fprop = dh -> def; if (buf == NULL) show = FALSE; } else if (buf == NULL) { show = tmp_fprop -> show; } if (buf != NULL && tmp_fprop -> use) { stra = g_strdup_printf ("%4s\t%d\t%d\t%d\t%d",fkeysw[activef][dih+2][tmp_fprop -> key], a+1, b+1, c+1, d+1); print_info (stra, NULL, buf); g_free (stra); for (q=0; q key]; q++) { stra = g_strdup_printf ("\t%15.10f", tmp_fprop -> val[q]); print_info (stra, NULL, buf); g_free (stra); if (q == 2) { // Print 1-4 electrostatic interaction scale factor stra = g_strdup_printf ("\t%15.10f", 0.0); print_info (stra, NULL, buf); g_free (stra); // Print 1-4 van der Waals interaction scale factor stra = g_strdup_printf ("\t%15.10f", 0.0); print_info (stra, NULL, buf); g_free (stra); } } print_info ("\n", NULL, buf); } else if (buf == NULL) { stra = g_strdup_printf ("%d", a+1); strb = g_strdup_printf ("%d", b+1); strc = g_strdup_printf ("%d", c+1); strd = g_strdup_printf ("%d", d+1); v = 0.0; for (q=0; q multi; q++) { r = tmp_fmol -> atoms_id[a][q].a; s = tmp_fmol -> atoms_id[a][q].b; e = get_active_atom (tmp_fmol -> id, r) -> list[s]; r = tmp_fmol -> atoms_id[b][q].a; s = tmp_fmol -> atoms_id[b][q].b; f = get_active_atom (tmp_fmol -> id, r) -> list[s]; r = tmp_fmol -> atoms_id[c][q].a; s = tmp_fmol -> atoms_id[c][q].b; g = get_active_atom (tmp_fmol -> id, r) -> list[s]; r = tmp_fmol -> atoms_id[d][q].a; s = tmp_fmol -> atoms_id[d][q].b; h = get_active_atom (tmp_fmol -> id, r) -> list[s]; v += dihedral_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][e], & tmp_proj -> atoms[0][f], & tmp_proj -> atoms[0][g], & tmp_proj -> atoms[0][h]).angle; } v /= tmp_fmol -> multi; stre = g_strdup_printf ("%.3f", v); strf = g_strdup_printf ("%s (%s)", dlp_to_translate(activef,dih+2,tmp_fprop -> key) ? _(fnames[activef][dih+2][tmp_fprop -> key]) : fnames[activef][dih+2][tmp_fprop -> key], fkeysw[activef][dih+2][tmp_fprop -> key]); strg = parameters_info (dih+1, tmp_fprop -> key, fvars_dihedral[activef][tmp_fprop -> key], tmp_fprop -> val); gtk_tree_store_append (store, & di_level, iter); gtk_tree_store_set (store, & di_level, 0, 0, 1, stra, 2, strb, 3, strc, 4, strd, 5, 0, 6, stre, 7, show, 8, tmp_fprop -> use, 9, strf, 10, strg, 11, dh -> id, -1); g_free (stra); g_free (strb); g_free (strc); g_free (strd); g_free (stre); g_free (strf); g_free (strg); } } } } } } } } } g_free (ids); if (same_atom) g_free (already_done); } /*! \fn void print_dlp_angle (int ai, GtkTextBuffer * buf, field_struct * an, int fi, GtkTreeStore * store, GtkTreeIter * iter) \brief print / fill tree store with force field angle(s) information \param ai 2 = angle(s), 3 = angular restraint(s) \param buf the GtkTextBuffer to print into, if input print \param an the field angle / angle restraint structural element(s) to print \param fi the target fragment id \param store the target GtkTreeStore to store, if assistant tab creation / refresh \param iter the target tree iter to store the data, if assistant tab creation / refresh */ void print_dlp_angle (int ai, GtkTextBuffer * buf, field_struct * an, int fi, GtkTreeStore * store, GtkTreeIter * iter) { int a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, u; gboolean show; gchar * stra, * strb, * strc, * strd, * stre, * strf; float v; GtkTreeIter an_level; int * ids = allocint (3); gboolean same_atom = FALSE; gboolean * already_done; if (tmp_fat -> id == tmp_fct -> id) { same_atom = TRUE; already_done = allocbool (tmp_fmol -> mol -> natoms); } for (i=0; i num; i++) { j = tmp_fat -> list[i]; if (tmp_proj -> atoms[0][j].coord[2] == fi) { k = ids[0] = tmp_proj -> atoms[0][j].fid; if (same_atom) already_done[k] = TRUE; for (l=0; l atoms[0][j].numv; l++) { m = tmp_proj -> atoms[0][j].vois[l]; if (tmp_proj -> atoms[0][m].faid == tmp_fbt -> id) { n = ids[1] = tmp_proj -> atoms[0][m].fid; for (o=0; o atoms[0][m].numv; o++) { p = tmp_proj -> atoms[0][m].vois[o]; q = ids[2] = tmp_proj -> atoms[0][p].fid; if (p != j && tmp_proj -> atoms[0][p].faid == tmp_fct -> id && (! same_atom || (same_atom && ! already_done[q]))) { tmp_fprop = get_active_prop_using_atoms (an -> other, 3, ids); if (tmp_fprop == NULL) { tmp_fprop = an -> def; if (buf == NULL) show = FALSE; } else if (buf == NULL) { show = tmp_fprop -> show; } if (buf != NULL && tmp_fprop -> use) { stra = g_strdup_printf ("%4s\t%d\t%d\t%d",fkeysw[activef][ai+2][tmp_fprop -> key], k+1, n+1, q+1); print_info (stra, NULL, buf); g_free (stra); for (u=0; u key]; u++) { stra = g_strdup_printf ("\t%15.10f", tmp_fprop -> val[u]); print_info (stra, NULL, buf); g_free (stra); } print_info ("\n", NULL, buf); } else if (buf == NULL) { stra = g_strdup_printf ("%d", k+1); strb = g_strdup_printf ("%d", n+1); strc = g_strdup_printf ("%d", q+1); v = 0.0; for (u=0; u multi; u++) { a = tmp_fmol -> atoms_id[k][u].a; b = tmp_fmol -> atoms_id[k][u].b; c = get_active_atom (tmp_fmol -> id, a) -> list[b]; d = tmp_fmol -> atoms_id[n][u].a; e = tmp_fmol -> atoms_id[n][u].b; f = get_active_atom (tmp_fmol -> id, d) -> list[e]; e = tmp_fmol -> atoms_id[q][u].a; g = tmp_fmol -> atoms_id[q][u].b; h = get_active_atom (tmp_fmol -> id, e) -> list[g]; v += angle_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][c], & tmp_proj -> atoms[0][f], & tmp_proj -> atoms[0][h]).angle; } v /= tmp_fmol -> multi; strd = g_strdup_printf ("%.3f", v); stre = g_strdup_printf ("%s (%s)", dlp_to_translate(activef,ai+2,tmp_fprop -> key) ? _(fnames[activef][ai+2][tmp_fprop -> key]) : fnames[activef][ai+2][tmp_fprop -> key], fkeysw[activef][ai+2][tmp_fprop -> key]); strf = parameters_info (ai+1, tmp_fprop -> key, fvars_angle[activef][tmp_fprop -> key], tmp_fprop -> val); gtk_tree_store_append (store, & an_level, iter); gtk_tree_store_set (store, & an_level, 0, 0, 1, stra, 2, strb, 3, strc, 4, 0, 5, strd, 6, show, 7, tmp_fprop -> use, 8, stre, 9, strf, 10, an -> id, -1); g_free (stra); g_free (strb); g_free (strc); g_free (strd); g_free (stre); g_free (strf); } } } } } } } g_free (ids); if (same_atom) g_free (already_done); } /*! \fn void print_dlp_bond (int bi, GtkTextBuffer * buf, field_struct * bd, int fi, GtkTreeStore * store, GtkTreeIter * iter) \brief print / fill tree store with force field bond(s) information \param bi 0 = bond(s), 1 = bond restraint(s) \param buf the GtkTextBuffer to print into, if input print \param bd the field bond / bond restraint structural element(s) to print \param fi the target fragment id \param store the target GtkTreeStore to store, if assistant tab creation / refresh \param iter the target tree iter to store the data, if assistant tab creation / refresh */ void print_dlp_bond (int bi, GtkTextBuffer * buf, field_struct * bd, int fi, GtkTreeStore * store, GtkTreeIter * iter) { int i, j, k, l, m, n, o, p, q, r, s, t, u; gboolean show; gchar * stra, * strb, * strc, * strd, * stre; float v; int * ids = allocint (2); GtkTreeIter bd_level; gboolean same_atom = FALSE; gboolean * already_done; if (tmp_fat -> id == tmp_fbt -> id) { same_atom = TRUE; already_done = allocbool (tmp_fmol -> mol -> natoms); } for (i=0; i num; i++) { j = tmp_fat -> list[i]; if (tmp_proj -> atoms[0][j].coord[2] == fi) { k = ids[0] = tmp_fat -> list_id[i]; if (same_atom) already_done[k] = TRUE; for (l=0; l atoms[0][j].numv; l++) { m = tmp_proj -> atoms[0][j].vois[l]; n = ids[1] = tmp_proj -> atoms[0][m].fid; if (tmp_proj -> atoms[0][m].faid == tmp_fbt -> id && (! same_atom || (same_atom && ! already_done[n]))) { tmp_fprop = get_active_prop_using_atoms (bd -> other, 2, ids); if (tmp_fprop == NULL) { tmp_fprop = bd -> def; if (buf == NULL) show = FALSE; } else if (buf == NULL) { show = tmp_fprop -> show; } if (buf != NULL && tmp_fprop -> use) { stra = g_strdup_printf ("%4s\t%d\t%d",fkeysw[activef][bi+2][tmp_fprop -> key], k+1, n+1); print_info (stra, NULL, buf); g_free (stra); for (o=0; o key]; o++) { stra = g_strdup_printf ("\t%15.10f", tmp_fprop -> val[o]); print_info (stra, NULL, buf); g_free (stra); } print_info ("\n", NULL, buf); } else if (buf == NULL) { stra = g_strdup_printf ("%d", k+1); strb = g_strdup_printf ("%d", n+1); v = 0.0; for (o=0; o multi; o++) { p = tmp_fmol -> atoms_id[k][o].a; q = tmp_fmol -> atoms_id[k][o].b; r = get_active_atom (tmp_fmol -> id, p) -> list[q]; s = tmp_fmol -> atoms_id[n][o].a; t = tmp_fmol -> atoms_id[n][o].b; u = get_active_atom (tmp_fmol -> id, s) -> list[t]; v += distance_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][r], & tmp_proj -> atoms[0][u]).length; } v /= tmp_fmol -> multi; strc = g_strdup_printf ("%.3f", v); strd = g_strdup_printf ("%s (%s)", dlp_to_translate(activef,bi+2,tmp_fprop -> key) ? _(fnames[activef][bi+2][tmp_fprop -> key]) : fnames[activef][bi+2][tmp_fprop -> key], fkeysw[activef][bi+2][tmp_fprop -> key]); stre = parameters_info (bi+1, tmp_fprop -> key, fvars_bond[activef][tmp_fprop -> key], tmp_fprop -> val); gtk_tree_store_append (store, & bd_level, iter); gtk_tree_store_set (store, & bd_level, 0, 0, 1, stra, 2, strb, 3, 0, 4, strc, 5, show, 6, tmp_fprop -> use, 7, strd, 8, stre, 9, bd -> id, -1); g_free (stra); g_free (strb); g_free (strc); g_free (strd); g_free (stre); } } } } } g_free (ids); if (same_atom) g_free (already_done); } /*! \fn void print_dlp_rigid (GtkTextBuffer * buf, field_rigid * rig) \brief print force field rigid \param buf the GtkTextBuffer to print into \param rig the field rigid to print */ void print_dlp_rigid (GtkTextBuffer * buf, field_rigid * rig) { gchar * str; int h, i, j, k, l, m, n; str = g_strdup_printf ("%d\t", rig -> num); j = 1; n = rig -> num; if (rig -> num > 15) { k = rig -> num - 15; l = k / 16; j += l + 1; n = k - l*16; } h = 0; for (i=0; i 1 && i == j-1)) ? n : 15+k; for (m=0; m list[h]+1); h ++; } str = g_strdup_printf ("%s\n", str); } print_info (str, NULL, buf); g_free (str); } /*! \fn void print_dlp_tet (GtkTextBuffer * buf, field_tethered * tet) \brief print force field tethered potential \param buf the GtkTextBuffer to print into \param tet the field tethered potential to print */ void print_dlp_tet (GtkTextBuffer * buf, field_tethered * tet) { gchar * str; str = g_strdup_printf ("%4s\t\%d", fkeysw[activef][1][tet -> key], tet -> num); print_info (str, NULL, buf); g_free (str); int i; for (i=0; i key]; i++) { str = g_strdup_printf ("\t%15.10f", tmp_ftet -> val[i]); print_info (str, NULL, buf); g_free (str); } print_info ("\n", NULL, buf); } /*! \fn void print_dlp_pmf (GtkTextBuffer * buf, field_pmf * pmf) \brief print force field mean force potential \param buf the GtkTextBuffer to print into \param pmf the field PMF to print */ void print_dlp_pmf (GtkTextBuffer * buf, field_pmf * pmf) { gchar * str; int i, j; print_info ("PMF", "bold", buf); str = g_strdup_printf ("\t%f\n", pmf -> length); print_info (str, NULL, buf); g_free (str); for (i=0; i<2; i++) { str = g_strdup_printf ("PMF UNIT %d\n", pmf -> num[i]); print_info (str, NULL, buf); g_free (str); for (j=0; j < pmf -> num[i]; j++) { str = g_strdup_printf ("%d\t%f\n", pmf -> list[i][j]+1, pmf -> weight[i][j]); print_info (str, NULL, buf); g_free (str); } } } /*! \fn void print_dlp_cons (GtkTextBuffer * buf, field_constraint * cons) \brief print force field constraint \param buf the GtkTextBuffer to print into \param cons the field constraint to print */ void print_dlp_cons (GtkTextBuffer * buf, field_constraint * cons) { gchar * str; str = g_strdup_printf ("%d\t\%d\t%f\n", cons -> ia[0], cons -> ia[1], cons -> length); print_info (str, NULL, buf); g_free (str); } /*! \fn void print_dlp_shell (GtkTextBuffer * buf, field_molecule * fmol, field_shell * shell) \brief print force field core shell \param buf the GtkTextBuffer to print into \param fmol the target field molecule \param shell the field shell to print */ void print_dlp_shell (GtkTextBuffer * buf, field_molecule * fmol, field_shell * shell) { gchar * str; str = g_strdup_printf ("%d\t\%d\t%f\t%f\n", shell -> ia[0], shell -> ia[1], shell -> k2, shell -> k4); print_info (str, NULL, buf); g_free (str); } /*! \fn void print_dlp_atom (GtkTextBuffer * buf, int at, int numat) \brief print force field atom \param buf the GtkTextBuffer to print into \param at the list id in the target field atom \param numat the atom id in the fragment / molecule */ void print_dlp_atom (GtkTextBuffer * buf, int at, int numat) { gchar * str; if (tmp_fat -> frozen_id[at]) { str = g_strdup_printf ("%8s %15.10f %15.10f %d %d\n", tmp_fat -> name, tmp_fat -> mass, tmp_fat -> charge, numat, 1); } else { str = g_strdup_printf ("%8s %15.10f %15.10f %d\n", tmp_fat -> name, tmp_fat -> mass, tmp_fat -> charge, numat); } print_info (str, NULL, buf); g_free (str); } /*! \fn int get_num_struct_to_print (field_molecule * fmol, int sid) \brief find the number of structural element(s) to print \param fmol the target field molecule \param sid the type of structural element */ int get_num_struct_to_print (field_molecule * fmol, int sid) { int i = 0; tmp_fstr = fmol -> first_struct[sid]; while (tmp_fstr) { if (tmp_fstr -> def -> use) { i += tmp_fstr -> num; } else if (tmp_fstr -> other) { tmp_fprop = tmp_fstr -> other; while (tmp_fprop) { if (tmp_fprop -> use) i ++; tmp_fprop = tmp_fprop -> next; } } tmp_fstr = tmp_fstr -> next; } return i; } /*! \fn void print_dlp_molecule (GtkTextBuffer * buf, field_molecule * fmol) \brief print force field molecule \param buf the GtkTextBuffer to print into \param fmol the field molecule to print */ void print_dlp_molecule (GtkTextBuffer * buf, field_molecule * fmol) { gchar * str; str = g_strdup_printf ("%s", fmol -> name); print_info (str, "bold_orange", buf); g_free (str); print_info ("\nNUMMOLS\t", "bold", buf); str = g_strdup_printf ("%d", fmol -> multi); print_info (str, "bold_green", buf); g_free (str); int i, j, k, l, m, n, o, p; j = 0; tmp_fat = fmol -> first_atom; for (i=0; i atoms; i++) { j += tmp_fat -> num; if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } j /= fmol -> multi; if (j != fmol -> mol -> natoms) g_debug ("PRINT:: Error the number of atom(s) is wrong ?!"); print_info ("\nATOMS\t", "bold", buf); str = g_strdup_printf ("%d\n", fmol -> mol -> natoms); print_info (str, "bold_blue", buf); g_free (str); for (i=0; i < fmol -> mol -> natoms ; i+=(m-i)) { j = fmol -> atoms_id[i][0].a; tmp_fat = get_active_atom (fmol -> id, j); k = fmol -> atoms_id[i][0].b; l = tmp_fat -> frozen_id[k]; for (m=i+1; m mol -> natoms; m++) { n = fmol -> atoms_id[m][0].a; o = fmol -> atoms_id[m][0].b; tmp_fbt = get_active_atom (fmol -> id, n); p = tmp_fbt -> frozen_id[o]; if (j != n || l != p) break; } print_dlp_atom (buf, k, m-i); } // Shells int ncs = 0; if (tmp_field -> afp[10]) { tmp_fshell = fmol -> first_shell; while (tmp_fshell) { if (tmp_fshell -> use) { if (tmp_fshell -> ia[0] && tmp_fshell -> ia[1]) ncs ++; } tmp_fshell = tmp_fshell -> next; } } if (ncs) { print_info ("SHELLS\t", "bold", buf); str = g_strdup_printf ("%d\n", ncs); print_info (str, "bold", buf); g_free (str); tmp_fshell = fmol -> first_shell; while (tmp_fshell) { if (tmp_fshell -> use && tmp_fshell -> ia[0] && tmp_fshell -> ia[1]) { print_dlp_shell (buf, fmol, tmp_fshell); } tmp_fshell = tmp_fshell -> next; } } // Constraints if (tmp_field -> afp[11]) { j = 0; tmp_fcons = fmol -> first_constraint; while (tmp_fcons) { if (tmp_fcons -> use) j ++; tmp_fcons = tmp_fcons -> next; } if (j > 0) { print_info ("CONSTRAINTS\t", "bold", buf); str = g_strdup_printf ("%d\n", j); print_info (str, "bold", buf); g_free (str); tmp_fcons = fmol -> first_constraint; while (tmp_fcons) { if (tmp_fcons -> use) print_dlp_cons (buf, tmp_fcons); tmp_fcons = tmp_fcons -> next; } } } // PMFs if (tmp_field -> afp[12]) { tmp_fpmf = fmol -> first_pmf; while (tmp_fpmf) { if (tmp_fpmf -> use) { print_dlp_pmf (buf, tmp_fpmf); break; } tmp_fpmf = tmp_fpmf -> next; } } // Rigid if (tmp_field -> afp[13]) { j = 0; k = 0; tmp_frig = fmol -> first_rigid; while (tmp_frig) { if (tmp_frig -> use) j ++; tmp_frig = tmp_frig -> next; } if (j > 0) { print_info ("RIGID\t", "bold", buf); str = g_strdup_printf ("%d\n", j); print_info (str, "bold", buf); g_free (str); tmp_frig = fmol -> first_rigid; while (tmp_frig) { if (tmp_frig -> use) { print_dlp_rigid (buf, tmp_frig); } tmp_frig = tmp_frig -> next; } } } // Tethering if (tmp_field -> afp[14]) { j = 0; tmp_ftet = fmol -> first_tethered; while (tmp_ftet) { if (tmp_ftet -> use && tmp_ftet -> num) j ++; tmp_ftet = tmp_ftet -> next; } if (j > 0) { print_info ("TETH\t", "bold", buf); str = g_strdup_printf ("%d\n", j); print_info (str, "bold", buf); g_free (str); tmp_ftet = fmol -> first_tethered; while (tmp_ftet) { if (tmp_ftet -> use) print_dlp_tet (buf, tmp_ftet); tmp_ftet = tmp_ftet -> next; } } } gchar * str_title[8] = {"BONDS ", "BONDS ", "ANGLES ", "ANGLES ", "DIHEDRALS ", "DIHEDRALS ", "DIHEDRALS ", "INVERSIONS "}; gboolean doprint; for (i=0; i<8; i++) { if (tmp_field -> afp[i+15]) { j = get_num_struct_to_print (fmol, i); if ((i == 0 || i == 2 || i == 4) && tmp_field -> afp[i+16]) { // To add the number of constraints j += get_num_struct_to_print (fmol, i+1); } if ((i == 4 && tmp_field -> afp[i+17]) || (i == 5 && ! tmp_field -> afp[i+14] && tmp_field -> afp[i+16])) { // To add the number of impropers k = (i == 4) ? 2 : 1; j += get_num_struct_to_print (fmol, i+k); } doprint = (i == 0 || i == 2 || i == 4 || i == 7) ? TRUE : FALSE; if ((i == 1 || i == 3 || i == 5) && ! tmp_field -> afp[i+14]) { doprint = TRUE; } else if (i == 5 && ! tmp_field -> afp[i+14]) { doprint = TRUE; } else if (i == 6 && ! tmp_field -> afp[i+13] && ! tmp_field -> afp[i+14]) { doprint = TRUE; } if (j > 0) { if (doprint) { print_info (str_title[i], "bold", buf); str = g_strdup_printf ("%d\n", j); print_info (str, "bold_blue", buf); g_free (str); } tmp_fstr = fmol -> first_struct[i]; while (tmp_fstr) { tmp_fat = get_active_atom (fmol -> id, tmp_fstr -> aid[0]); tmp_fbt = get_active_atom (fmol -> id, tmp_fstr -> aid[1]); if (i > 1) tmp_fct = get_active_atom (fmol -> id, tmp_fstr -> aid[2]); if (i > 3) tmp_fdt = get_active_atom (fmol -> id, tmp_fstr -> aid[3]); if (i == 0 || i == 1) print_dlp_bond (i, buf, tmp_fstr, fmol -> fragments[0], NULL, NULL); if (i == 2 || i == 3) print_dlp_angle (i, buf, tmp_fstr, fmol -> fragments[0], NULL, NULL); if (i == 4 || i == 5) print_dlp_dihedral (i, buf, tmp_fstr, fmol -> fragments[0], NULL, NULL); if (i == 6 || i == 7) print_dlp_improper_inversion (i, buf, tmp_fstr, fmol -> fragments[0], NULL, NULL); tmp_fstr = tmp_fstr -> next; } } } } print_info ("FINISH\n", "bold_orange", buf); } /*! \fn void print_dlp_body (GtkTextBuffer * buf, field_nth_body * body) \brief print force field non bonded potential \param buf the GtkTextBuffer to print into \param body the non bonded potential to print */ void print_dlp_body (GtkTextBuffer * buf, field_nth_body * body) { gchar * str; int i, j; j = body_at (body -> bd); if (! body -> bd) { for (i=0; i ma[i][0], body -> a[i][0]) -> name), NULL, buf); } str = g_strdup_printf ("%4s",fkeysw[activef][10+ body -> bd][body -> key]); print_info (str, NULL, buf); g_free (str); for (i=0; i bd][body -> key]; i++) { str = g_strdup_printf ("\t%15.10f", body -> val[i]); print_info (str, NULL, buf); g_free (str); } print_info ("\n", NULL, buf); } /*! \fn void print_dlp_tersoff_cross (GtkTextBuffer * buf, field_nth_body * body_a, field_nth_body * body_b) \brief print Tersoff potential cross term \param buf the GtkTextBuffer to print into \param body_a 1st non bonded potential \param body_b 2nd non bonded potential */ void print_dlp_tersoff_cross (GtkTextBuffer * buf, field_nth_body * body_a, field_nth_body * body_b) { gchar * str; int j; print_info (g_strdup_printf ("%8s\t", get_active_atom(body_a -> ma[0][0], body_a -> a[0][0]) -> name), NULL, buf); print_info (g_strdup_printf ("%8s\t", get_active_atom(body_b -> ma[0][0], body_b -> a[0][0]) -> name), NULL, buf); for (j=0; j<3; j++) { str = g_strdup_printf ("%15.10f", tmp_field -> cross[body_a -> id][body_b -> id][j]); print_info (str, NULL, buf); g_free (str); if (j<2) print_info ("\t", NULL, buf); } print_info ("\n", NULL, buf); } /*! \fn void print_dlp_tersoff (GtkTextBuffer * buf, field_nth_body * body) \brief print force field Tersoff potential \param buf the GtkTextBuffer to print into \param body the non bonded (Tersoff potential) to print */ void print_dlp_tersoff (GtkTextBuffer * buf, field_nth_body * body) { gchar * str; int i, j, k; int num[2]={2, 3}; int nc[2][3]={{5, 6, 3}, {5, 6, 5}}; j = body_at (body -> bd); k = 0; for (i=0; i key]; i++) { if (i==0) { print_info (g_strdup_printf ("%8s\t", get_active_atom(body -> ma[0][0], body -> a[0][0]) -> name), NULL, buf); str = g_strdup_printf ("%4s\t",fkeysw[activef][10+body -> bd][body -> key]); print_info (str, NULL, buf); g_free (str); } else { print_info (" \t \t", NULL, buf); } for (j=0; j key][i]; j++) { if (j > 0) print_info ("\t", NULL, buf); str = g_strdup_printf ("%15.10f", body -> val[j+k]); print_info (str, NULL, buf); g_free (str); } print_info ("\n", NULL, buf); k += nc[body -> key][i]; } if (! body -> key) { field_nth_body * tmp_fbo; tmp_fbo = tmp_field -> first_body[2]; while (tmp_fbo) { print_dlp_tersoff_cross (buf, body, tmp_fbo); tmp_fbo = tmp_fbo -> next; } } } /*! \fn void print_dlp_field (GtkTextBuffer * buf) \brief print DL-POLY classical force field \param buf the GtkTextBuffer to print into */ void print_dlp_field (GtkTextBuffer * buf) { int i, j; gchar * str; GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (buf, & bStart); gtk_text_buffer_get_end_iter (buf, & bEnd); gtk_text_buffer_delete (buf, & bStart, & bEnd); str = g_strdup_printf (_("# This file was created using %s\n"), PACKAGE); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (_("# %s contains:\n"), prepare_for_title(tmp_proj -> name)); print_info (str, NULL, buf); g_free (str); i = 0; for (j=0; j modelfc -> mol_by_step[0]; j++) { i += tmp_proj -> modelfc -> mols[0][j].multiplicity; } str = g_strdup_printf (_("# - %d atoms\n" "# - %d isolated molecular fragments\n" "# - %d distinct molecules\n"), tmp_proj -> natomes, i, tmp_proj -> modelfc -> mol_by_step[0]); print_info (str, NULL, buf); g_free (str); print_info (_("# Energy unit:\n"), NULL, buf); print_info ("UNITS ", "bold", buf); str = g_strdup_printf ("%s\n", fkeysw[activef][0][tmp_field -> energy_unit]); print_info (str, "bold_green", buf); g_free (str); print_info (_("# Number of field molecules:\n"), NULL, buf); print_info ("MOLECULES ", "bold", buf); str = g_strdup_printf ("%d\n", tmp_field -> molecules); print_info (str, "bold_red", buf); g_free (str); tmp_fmol = tmp_field -> first_molecule; for (i=0; i molecules; i++) { str = g_strdup_printf (_("# Begin molecule %d\n"), i+1); print_info (str, NULL, buf); g_free (str); print_dlp_molecule (buf, tmp_fmol); str = g_strdup_printf (_("# End molecule %d\n"), i+1); print_info (str, NULL, buf); g_free (str); if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } // Non bonded gchar * nd_title[5] = {"VDW", "METAL", "TERSOFF", "TBP", "FBP"}; gchar * com_ndb[5] = {i18n("van der Walls pair"), i18n("metal"), "Tersoff", i18n("three-body"), i18n("four-body")}; for (i=0; i<5; i++) { if (tmp_field -> afp[i+23]) { j=0; tmp_fbody = tmp_field -> first_body[i]; while (tmp_fbody) { if (tmp_fbody -> use) j++; tmp_fbody = tmp_fbody -> next; } if (j > 0) { str = g_strdup_printf (_("# Non-bonded: %s potential(s)\n"), (i != 2) ? _(com_ndb[i]) : com_ndb[i]); print_info (str, NULL, buf); g_free (str); print_info (nd_title[i], "bold", buf); str = g_strdup_printf (" %d\n", j); print_info (str, "bold_red", buf); tmp_fbody = tmp_field -> first_body[i]; while (tmp_fbody) { if (tmp_fbody -> use) { if (i == 2) { print_dlp_tersoff (buf, tmp_fbody); } else { print_dlp_body (buf, tmp_fbody); } } tmp_fbody = tmp_fbody -> next; } } } } // External fields if (tmp_field -> afp[28]) { i = 0; tmp_fext = tmp_field -> first_external; while (tmp_fext) { if (tmp_fext -> use) i ++; tmp_fext = tmp_fext -> next; } if (i == 1) { print_info ("EXTERN", "bold", buf); tmp_fext = tmp_field -> first_external; while (tmp_fext) { if (tmp_fext -> use) { str = g_strdup_printf ("\n%4s",fkeysw[activef][15][tmp_fext -> key]); print_info (str, NULL, buf); g_free (str); for (j=0; j key]; j++) { print_info (g_strdup_printf ("\t%15.10f", tmp_fext -> val[j]), NULL, buf); } print_info ("\n", NULL, buf); break; } tmp_fext = tmp_fext -> next; } } } print_info ("CLOSE", "bold", buf); } /*! \fn int get_pbc () \brief get the PBC DL-POLY lattice type */ int get_pbc () { box_info * box = & tmp_proj -> cell.box[0]; if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == box -> param[1][2] && box -> param[1][0] == 90.0) { if (box -> param[0][0] == box -> param[0][1] && box -> param[0][0] == box -> param[0][2]) { return 1; } else { return 2; } } else if (box -> vect[0][1] == 0.0 && box -> vect[0][2] == 0.0 && box -> vect[1][0] == 0.0 && box -> vect[1][2] == 0.0 && box -> vect[2][0] == 0.0 && box -> vect[2][1] == 0.0) { if (box -> vect[0][0] == box -> vect[1][1] && box -> vect[0][0] == box -> vect[2][2]) { return 1; } else { return 2; } } else { return 3; } } /*! \fn void print_dlp_config (GtkTextBuffer * buf) \brief print DL-POLY CONFIG file \param buf the GtkTextBuffer to print into */ void print_dlp_config (GtkTextBuffer * buf) { int h, i, j, k, l, m, n; int pbc; gchar * str; GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (buf, & bStart); gtk_text_buffer_get_end_iter (buf, & bEnd); gtk_text_buffer_delete (buf, & bStart, & bEnd); str = g_strdup_printf (_("# DL-POLY CONFIG file created by %s, %s - %d atoms\n"), PACKAGE, prepare_for_title(tmp_proj -> name), tmp_proj -> natomes); print_info (str, "bold", buf); g_free (str); if (tmp_proj -> cell.pbc) { pbc = get_pbc (); } else { pbc = 0; } str = g_strdup_printf ("%d", 0); print_info (str, "bold_red", buf); g_free (str); str = g_strdup_printf ("\t%d", pbc); print_info (str, "bold_green", buf); g_free (str); str = g_strdup_printf ("\t%d\n", tmp_proj -> natomes); print_info (str, "bold_blue", buf); g_free (str); if (pbc > 0) { for (i=0; i<3; i++) { str = g_strdup_printf ("%f\t%f\t%f\n", tmp_proj -> cell.box[0].vect[i][0], tmp_proj -> cell.box[0].vect[i][1], tmp_proj -> cell.box[0].vect[i][2]); print_info (str, NULL, buf); g_free (str); } } tmp_fmol = tmp_field -> first_molecule; h = 0; for (i=0; i molecules; i++) { for (j=0; j multi; j++) { for (k=0; k mol -> natoms; k++) { l = tmp_fmol -> atoms_id[k][j].a; m = tmp_fmol -> atoms_id[k][j].b; tmp_fat = get_active_atom (tmp_fmol -> id, l); str = g_strdup_printf ("%8s", tmp_fat -> name); print_info (str, "bold", buf); g_free (str); if (tmp_field -> sys_opts[2]) { print_info ("\n", NULL, buf); } else { str = g_strdup_printf (" %d\n", h+1); print_info (str, "bold_red", buf); g_free (str); h ++; } n = tmp_fat -> list[m]; str = g_strdup_printf ("%f\t%f\t%f\n", tmp_proj -> atoms[0][n].x, tmp_proj -> atoms[0][n].y, tmp_proj -> atoms[0][n].z); print_info (str, NULL, buf); g_free (str); } } if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } } gchar * ens_keyw[4] = {"nve", "nvt", "npt", "nst"}; gchar * thermo_keyw[10] = {"evans", "lang", "ander", "ber", "hoover", "gst", "dpd", "mtk", "ttm", "inhomo"}; gchar * pseudo_thermo[3] = {"langevin", "gauss", "direct"}; gchar * area_keyw[5]={"area", "tens", "tens", "orth", "orth"}; gchar * md_keyw[4]={"temp ", "steps ", "integrat ", "pres "}; gchar * md_text[4]={i18n("# Target temperature in K\n"), i18n("# Number of MD steps\n"), i18n("# Integration time step in ps\n"), i18n("# Target presssure in k atms\n")}; gchar * min_key[3]={"force", "energy", "distance"}; //gchar * md_legend[3]={i18n("# Target temperature"), i18n("# Number of MD steps"), i18n("# MD time step d(t)")}; /*! \fn gboolean print_ana () \brief determine if the analysis information section is required */ gboolean print_ana () { if ((int)tmp_field -> ana_opts[0] || (int)tmp_field -> ana_opts[4] || (int)tmp_field -> ana_opts[8] || (int)tmp_field -> ana_opts[11] || (int)tmp_field -> ana_opts[14]) { return TRUE; } else { return FALSE; } } extern gchar * eval_m[10]; extern gchar * eval_vdw[6]; extern gchar * io_rw_m[4]; extern gchar * io_pres[2]; gchar * elec_key[10]={"coul ", "distan ", "ewald precision ", "ewald ", "reaction ", "reaction damp ", "reaction precision ", "shift ", "shift damp ", "shift precision "}; gchar * vdw_key[6]={"lor ", "fend", "hoge", "halg", "tang", "func"}; gchar * sys_info[8]={i18n("\n# Ignore particle indices from CONFIG file and set indices by order of reading"), i18n("\n# Ignore strict checks when reading CONFIG file, warning messages and assume safe simulation parameters"), i18n("\n# Skip detailed topology reporting when reading FIELD file"), i18n("\n# Ignore center of mass momentum removal during the simulation"), i18n("\n# Tolerance for the relaxed shell model\n"), i18n("\n# Subcelling threshold density of particle per link cell\n"), i18n("\n# Create an expanded version of the current model\n"), i18n("\n# Restart job from previous run: ")}; gchar * sys_key[8]={NULL, NULL, NULL, NULL, "rlxtol ", "subcell ", "nfold ", "restart "}; gchar * sys_string[8]={"ind", "str", "top", "vom", NULL, NULL, NULL, NULL}; gchar * rest_inf[3]={i18n("\n# Continue current simulation - require REVOLD file"), i18n("\n# Start new simulation from older run without temperature reset"), i18n("\n# Start new simulation from older run with temperature reset")}; gchar * rest_key[3]={NULL, "noscale", "scale"}; gchar * time_inf[2]={i18n("\n\n# Set job time to "), i18n("\n\n# Set job closure time to ")}; gchar * time_key[2]={"job time ", "close time "}; gchar * io_inf[2]={i18n("\n# I/O read interface, with:\n"), i18n("\n# I/O write interface, with:\n")}; gchar * io_key[2]={"\nio read ", "\nio writ "}; gchar * io_meth[4]={"mpiio", "direct", "master", "netcdf"}; gchar * io_pec[2]={"off", "on"}; gchar * io_typ[2]={"sorted", "unsorted"}; /*! \fn void print_int (GtkTextBuffer * buf, int data) \brief print integer value \param buf the GtkTextBuffer to print into \param data the integer value to print */ void print_int (GtkTextBuffer * buf, int data) { gchar * str = g_strdup_printf (" %d", data); print_info (str, "bold_blue", buf); g_free (str); } /*! \fn void print_control_int (GtkTextBuffer * buf, int data, gchar * info_a, gchar * info_b, gchar * key) \brief print CONTROL file print integer value \param buf the GtkTextBuffer to print into \param data the integer value to print \param info_a 1st string to print \param info_b 2nd string to print, if any \param key DL-POLY key */ void print_control_int (GtkTextBuffer * buf, int data, gchar * info_a, gchar * info_b, gchar * key) { gchar * str = g_strdup_printf ("%d", data); print_info (info_a, NULL, buf); print_info (str, NULL, buf); g_free (str); if (info_b != NULL) print_info (info_b, NULL, buf); print_info ("\n", NULL, buf); print_info (key, "bold", buf); print_int (buf, data); } /*! \fn void print_float (GtkTextBuffer * buf, double data) \brief print float value \param buf the GtkTextBuffer to print into \param data the float value to print */ void print_float (GtkTextBuffer * buf, double data) { gchar * str = g_strdup_printf (" %f", data); print_info (str, "bold_red", buf); g_free (str); } /*! \fn void print_control_float (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key) \brief print CONTROL file print float value \param buf the GtkTextBuffer to print into \param data the float value to print \param info_a 1st string to print \param info_b 2nd string to print, if any \param key DL-POLY key */ void print_control_float (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key) { gchar * str = g_strdup_printf ("%f", data); print_info (info_a, NULL, buf); print_info (str, NULL, buf); g_free (str); if (info_b != NULL) print_info (info_b, NULL, buf); print_info ("\n", NULL, buf); print_info (key, "bold", buf); print_float (buf, data); } /*! \fn void print_sci (GtkTextBuffer * buf, double data) \brief print float in scientific format \param buf the GtkTextBuffer to print into \param data the float value to print */ void print_sci (GtkTextBuffer * buf, double data) { gchar * str = g_strdup_printf (" %e", data); print_info (str, "bold_orange", buf); g_free (str); } /*! \fn void print_control_sci (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key) \brief print CONTROL file print float value in scientific format \param buf the GtkTextBuffer to print into \param data the float value to print \param info_a 1st string to print \param info_b 2nd string to print, if any \param key DL-POLY key */ void print_control_sci (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key) { gchar * str = g_strdup_printf ("%e", data); print_info (info_a, NULL, buf); print_info (str, NULL, buf); if (info_b != NULL) print_info (info_b, NULL, buf); print_info ("\n", NULL, buf); print_info (key, "bold", buf); print_info (str, "bold_orange", buf); g_free (str); } /*! \fn void print_string (GtkTextBuffer * buf, gchar * string) \brief print string \param buf the GtkTextBuffer to print into \param string the string to print */ void print_string (GtkTextBuffer * buf, gchar * string) { print_info (" ", NULL, buf); print_info (string, "bold_green", buf); } /*! \fn void print_control_string (GtkTextBuffer * buf, gchar * string, gchar * info_a, gchar * info_b, gchar * key) \brief print CONTROL file print string \param buf the GtkTextBuffer to print into \param string the string to print \param info_a 1st string to print, if any \param info_b 2nd string to print, if any \param key DL-POLY key */ void print_control_string (GtkTextBuffer * buf, gchar * string, gchar * info_a, gchar * info_b, gchar * key) { if (info_a != NULL) print_info (info_a, NULL, buf); if (info_b != NULL) print_info (info_b, NULL, buf); if (info_a != NULL) print_info ("\n", NULL, buf); print_info (key, "bold", buf); if (string) print_string (buf, string); } /*! \fn void print_control_key (GtkTextBuffer * buf, gchar * info, gchar * key) \brief print CONTROL file print key \param buf the GtkTextBuffer to print into \param info the information string, if any \param key DL-POLY key to print */ void print_control_key (GtkTextBuffer * buf, gchar * info, gchar * key) { if (info != NULL) print_info (info, NULL, buf); print_info (key, "bold", buf); } /*! \fn void print_dlp_control (GtkTextBuffer * buf) \brief print DL-POLY CONTROL file \param buf the GtkTextBuffer to print into */ void print_dlp_control (GtkTextBuffer * buf) { int i, j, k; gchar * str; gchar * str_a, * str_b, * str_c; GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (buf, & bStart); gtk_text_buffer_get_end_iter (buf, & bEnd); gtk_text_buffer_delete (buf, & bStart, & bEnd); str = g_strdup_printf (_("# DL-POLY CONTROL file created by %s, %s - %d atoms\n\n"), PACKAGE, prepare_for_title(tmp_proj -> name), tmp_proj -> natomes); print_info (str, "bold", buf); g_free (str); if (tmp_field -> sys_opts[0] != 1.0) { print_control_float (buf, tmp_field -> sys_opts[0], _("# Relative dielectric constant = "), NULL, "eps "); } if (tmp_field -> sys_opts[1] != 0.0) { print_control_float (buf, tmp_field -> sys_opts[1], _("\n# Allowing local variation of system density of: "), " \%", "densvar "); } for (i=2; i<10; i++) { j = (i < 7) ? i : (i == 7) ? 8 : (i == 8) ? 10 : 14; if (tmp_field -> sys_opts[j] == 1.0) { if (i == 9) { k = (int)tmp_field -> sys_opts[15]; print_control_string (buf, rest_key[k], _(sys_info[i-2]), _(rest_inf[k]), sys_key[i-2]); } else if (i < 6) { print_control_string (buf, sys_string[i-2], _(sys_info[i-2]), NULL, "no "); } else { print_control_key (buf, _(sys_info[i-2]), sys_key[i-2]); } if (i == 6 || i == 7) { print_float (buf, tmp_field -> sys_opts[j+1]); } else if (i == 8) { for (k=1; k<4; k++) print_int (buf, (int)tmp_field -> sys_opts[j+k]); } print_info ("\n", NULL, buf); } } if (tmp_field -> vdw_opts[0] == 1.0) { print_info (_("\n# Non-bonded short range interactions - type vdW"), NULL, buf); print_control_float (buf, tmp_field -> vdw_opts[1], _("\n# van der Waals short range cutoff = "), " Ang.", "rvdw "); if (tmp_field -> vdw_opts[2] == 1.0) { print_control_string (buf, "direct", _("\n# Enforce direct calculation of vdW interactions"), _("\n# Do not work with system using tabulated potentials"), "vdw "); } if (tmp_field -> vdw_opts[3] == 1.0) { print_control_string (buf, "shift", _("\n# Apply force-shifting for vdW interactions"), NULL, "vdw "); } if (tmp_field -> vdw_opts[4] == 1.0) { print_control_string (buf, vdw_key[(int)tmp_field -> vdw_opts[5]], _("\n# Apply mixing rule of type: "), eval_vdw[(int)tmp_field -> vdw_opts[5]], "vdw mix "); } } else { print_control_string (buf, "vdw", _("\n# No van der Waals interactions (short range)"), NULL, "no "); } print_info ("\n\n", NULL, buf); if (tmp_field -> elec_opts[0] == 1.0) { print_info (_("\n# Non-bonded long range interactions"), NULL, buf); print_control_float (buf, tmp_field -> elec_opts[1], _("\n# Electrostatics long range cutoff = "), " Ang.", "cut "); if (tmp_field -> elec_opts[2] == 1.0) { print_control_float (buf, tmp_field -> elec_opts[3], _("\n# Use optional padding to the cutoff = "), " Ang.", "pad "); } if (tmp_field -> elec_opts[4] == 1.0) { print_control_key (buf, _("\n# Use extended coulombic exclusion\n"), "exclu"); } print_info (_("\n# Electrostatics calculated using "), NULL, buf); print_info (eval_m[(int)tmp_field -> elec_opts[5]], NULL, buf); print_info ("\n", NULL, buf); print_info (elec_key[(int)tmp_field -> elec_opts[5]], "bold", buf); if (tmp_field -> elec_opts[5] == 2.0 || tmp_field -> elec_opts[5] == 6.0 || tmp_field -> elec_opts[5] == 9.0) { print_sci (buf, tmp_field -> elec_opts[6]); } else if (tmp_field -> elec_opts[5] == 3.0) { print_float (buf, tmp_field -> elec_opts[6]); for (k=7; k<10; k++) print_int (buf, (int)tmp_field -> elec_opts[k]); } else if (tmp_field -> elec_opts[5] == 5.0 || tmp_field -> elec_opts[5] == 8.0) { print_float (buf, tmp_field -> elec_opts[6]); } if (tmp_field -> elec_opts[5] == 2.0 || tmp_field -> elec_opts[5] == 3.0) { print_control_int (buf, (int)tmp_field -> elec_opts[10], _("\n# Evaluate k space contribution to the Ewald sum every: "), _(" MD step(s)"), "ewald evalu "); } } else { print_control_string (buf, "elec", _("# No electrostatics interactions (long range)"), NULL, "no "); } print_info ("\n", NULL, buf); if (tmp_field -> met_opts[0] == 1.0 || tmp_field -> met_opts[1] == 1.0) { print_info (_("\n# Metallic interactions"), NULL, buf); } if (tmp_field -> met_opts[0] == 1.0) { print_control_string (buf, "direct", _("\n# Enforce direct calculation of metal interactions"), _("\n# This does not work with metal alloy systems using the *EAM* potentials"), "metal "); } if (tmp_field -> met_opts[1] == 1.0) { print_control_string (buf, "sqrtrho", _("\n# Switch the TABEAM default embedding functions, F, from F(ρ) to F(√ρ)"), NULL, "metal "); } if (tmp_field -> met_opts[0] == 1.0 || tmp_field -> met_opts[1] == 1.0) print_info ("\n", NULL, buf); print_control_string (buf, ens_keyw[tmp_field -> ensemble], _("\n# Thermostat information"), NULL, "ensemble "); if (tmp_field -> ensemble) { switch (tmp_field -> ensemble) { case 1: i = (tmp_field -> thermostat > 6) ? tmp_field -> thermostat + 1 : tmp_field -> thermostat; break; default: i = (! tmp_field -> thermostat) ? 1 : (tmp_field -> thermostat == 3) ? 7 : tmp_field -> thermostat + 2; break; } print_string (buf, thermo_keyw[i]); if (tmp_field -> ensemble > 1 || tmp_field -> thermostat) { if (tmp_field -> ensemble == 1 && tmp_field -> thermostat == 6) { str = g_strdup_printf ("s%1d", (int)tmp_field -> thermo_opts[0]+1); print_string (buf, str); g_free (str); print_float (buf, tmp_field -> thermo_opts[1]); } else { if (tmp_field -> ensemble == 3 && tmp_field -> thermo_opts[3] > 0.0) print_string (buf, "Q"); print_float (buf, tmp_field -> thermo_opts[0]); if (tmp_field -> ensemble != 1 || (tmp_field -> thermostat == 2 || tmp_field -> thermostat == 5 || tmp_field -> thermostat > 6)) { print_float (buf, tmp_field -> thermo_opts[1]); if (tmp_field -> ensemble == 1 && tmp_field -> thermostat > 6) print_float (buf, tmp_field -> thermo_opts[2]); } } if (tmp_field -> ensemble == 3 && tmp_field -> thermo_opts[3] > 0.0) { i = (int)tmp_field -> thermo_opts[3] - 1; print_string (buf, area_keyw[i]); if (tmp_field -> thermo_opts[3] == 2.0) print_float (buf, tmp_field -> thermo_opts[4]); } if (tmp_field -> thermo_opts[5] == 1.0) print_string (buf, "semi"); } } print_info ("\n\n", NULL, buf); if (tmp_field -> thermo_opts[6] == 1.0) { print_info (_("# Attach a pseudo thermal bath with:\n"), NULL, buf); if (tmp_field -> thermo_opts[7] > 0.0) { str = g_strdup_printf (_("# - thermostat of type: %s\n"), pseudo_thermo[(int)tmp_field -> thermo_opts[7] - 1]); } else { str = g_strdup_printf (_("# - thermostats of type Langevin and Direct applied successively\n")); } print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (_("# - thickness of thermostat layer to MD cell boundaries: %f Ang.\n"), tmp_field -> thermo_opts[8]); print_info (str, NULL, buf); g_free (str); if (tmp_field -> thermo_opts[9] > 0.0) { str = g_strdup_printf (_("# - Target temperature: %f K\n"), tmp_field -> thermo_opts[9]); print_info (str, NULL, buf); g_free (str); } else { print_info (_("# - Target temperature: system target temperature\n"), NULL, buf); } print_info ("pseudo ", "bold", buf); if (tmp_field -> thermo_opts[7] > 0.0) { print_info (pseudo_thermo[(int)tmp_field -> thermo_opts[7] - 1], "bold_green", buf); } print_float (buf, tmp_field -> thermo_opts[8]); if (tmp_field -> thermo_opts[9] > 0.0) print_float (buf, tmp_field -> thermo_opts[9]); print_info ("\n\n", NULL, buf); } // MD information print_info (_("# Molecular dynamics information\n"), NULL, buf); for (i=0; i<2+(int)tmp_field -> md_opts[1]; i++) { print_control_key (buf, _(md_text[i]), md_keyw[i]); switch (i) { case 0: print_float (buf, tmp_field -> md_opts[0]); if (tmp_field -> ensemble > 1) { print_info ("\n", NULL, buf); print_info (md_keyw[3], "bold", buf); print_float (buf, tmp_field -> md_opts[5]); } break; case 1: print_int (buf, (int)tmp_field -> md_opts[2]); break; case 2: print_info ("leapfrog", "bold_green", buf); break; } print_info ("\n", NULL, buf); } if (tmp_field -> md_opts[3] == 1.0) { print_control_float (buf, tmp_field -> md_opts[4], _("# Variable time step, initial time step = "), " ps", "variable timestep "); print_control_float (buf, tmp_field -> md_opts[6], _("\n# Maximum time step allowed = "), " ps", "mxstep "); print_control_float (buf, tmp_field -> md_opts[7], _("\n# Maximum move allowed = "), " Ang.", "maxdis "); print_control_float (buf, tmp_field -> md_opts[8], _("\n# Minimum move allowed = "), " Ang.", "mindis "); } else { print_control_float (buf, tmp_field -> md_opts[4], _("# MD time step = "), " fs", "timestep "); } print_control_int (buf, (int)tmp_field -> md_opts[9], _("\n# Shake / Rattle iterations limit: "), _(" cycle(s)"), "mxshak "); print_control_sci (buf, tmp_field -> md_opts[10], _("\n# Shake / Rattle tolerance: "), NULL, "shake "); if (tmp_field -> md_opts[1] == 1.0) { print_control_int (buf, (int)tmp_field -> md_opts[11], _("\n# FIQA iterations limit: "), _(" cycle(s)"), "mxquat "); print_control_sci (buf, tmp_field -> md_opts[12], _("\n# Quaternion tolerance: "), NULL, "quater "); } if (tmp_field -> md_opts[13] == 1.0) { print_info (_("\n\n# Initiate impact on particle\n# - with particle index: "), NULL, buf); str = g_strdup_printf ("%d", (int)tmp_field -> md_opts[14]); print_info (str, NULL, buf); print_info (_("\n# - at MD step: "), NULL, buf); str = g_strdup_printf ("%d", (int)tmp_field -> md_opts[15]); print_info (str, NULL, buf); g_free (str); print_info (_("\n# - with energy (k eV): "), NULL, buf); str = g_strdup_printf ("%f", tmp_field -> md_opts[16]); print_info (str, NULL, buf); g_free (str); print_info (_("\n# - direction (x, y, z): "), NULL, buf); str = g_strdup_printf ("%f %f %f", tmp_field -> md_opts[17], tmp_field -> md_opts[18], tmp_field -> md_opts[19]); print_info (str, NULL, buf); g_free (str); print_info ("\n", NULL, buf); print_info ("impact ", "bold", buf); for (k=14; k<16; k++) print_int (buf, (int)tmp_field -> md_opts[k]); for (k=16; k<20; k++) print_float (buf, tmp_field -> md_opts[k]); } if (tmp_field -> equi_opts[0] == 1.0) { // Equilibration information print_info (_("\n\n# Equilibration information"), NULL, buf); print_control_int (buf, (int)tmp_field -> equi_opts[1], _("\n# Equilibrate during: "), _(" MD step(s)"), "equil "); if (tmp_field -> equi_opts[2] == 1.0) { print_control_int (buf, (int)tmp_field -> equi_opts[3], _("\n# During equilibration: rescale system temperature every: "), _(" MD step(s)"), "scale "); } if (tmp_field -> equi_opts[4] == 1.0) { print_control_float (buf, tmp_field -> equi_opts[5], _("\n# During equilibration: cap forces, with fmax= "), " Kb T Ang-1", "cap "); } if (tmp_field -> equi_opts[6] == 1.0) { print_control_int (buf, (int)tmp_field -> equi_opts[7], _("\n# During equilibration: resample the instantaneous momenta distribution every: "), _(" MD step(s)"), "regaus "); } if (tmp_field -> equi_opts[8] == 1.0) { str = g_strdup_printf (_("\n# Every %d step(s) during equilibration: minimize %s with target %s= %f\n"), (int)tmp_field -> equi_opts[11], min_key[(int)tmp_field -> equi_opts[9]], min_key[(int)tmp_field -> equi_opts[9]], tmp_field -> equi_opts[10]); print_control_key (buf, str, "minim "); g_free (str); print_string (buf, min_key[(int)tmp_field -> equi_opts[9]]); print_int (buf, (int)tmp_field -> equi_opts[11]); print_float (buf, tmp_field -> equi_opts[10]); print_info ("\n", NULL, buf); } if (tmp_field -> equi_opts[12] == 1.0) { str = g_strdup_printf (_("# At the start of the equilibration: minimize %s with target %s= %f\n"), min_key[(int)tmp_field -> equi_opts[13]], min_key[(int)tmp_field -> equi_opts[13]], tmp_field -> equi_opts[14]); print_control_key (buf, str, "optim "); g_free (str); print_string (buf, min_key[(int)tmp_field -> equi_opts[13]]); print_float (buf, tmp_field -> equi_opts[14]); print_info ("\n", NULL, buf); } if (tmp_field -> equi_opts[15] == 1.0) { print_control_key (buf, _("# During equilibration: perform a zero temperature MD minimization\n"), "zero"); print_info ("\n", NULL, buf); } if (tmp_field -> equi_opts[16] == 1.0) { print_control_key (buf, _("# Include equilibration data in overall statistics\n"), "collect"); print_info ("\n", NULL, buf); } } if (print_ana()) { print_info (_("\n# Analysis information"), NULL, buf); if (tmp_field -> ana_opts[0] == 1.0) { print_control_string (buf, "all", _("\n# Calculate and collect all intra-molecular PDFs"), NULL, "ana "); for (k=1; k<3; k++) print_int (buf, (int)tmp_field -> ana_opts[k]); print_float (buf, tmp_field -> ana_opts[3]); } if (tmp_field -> ana_opts[4] == 1.0) { print_control_string (buf, "bon", _("\n# Calculate and collect bonds PDFs"), NULL, "ana "); for (k=5; k<6; k++) print_int (buf, (int)tmp_field -> ana_opts[k]); print_float (buf, tmp_field -> ana_opts[7]); } if (tmp_field -> ana_opts[8] == 1.0) { print_control_string (buf, "ang", _("\n# Calculate and collect angles PDFs"), NULL, "ana "); for (k=9; k<11; k++) print_int (buf, (int)tmp_field -> ana_opts[k]); } if (tmp_field -> ana_opts[11] == 1.0) { print_control_string (buf, "dih", _("\n# Calculate and collect dihedrals PDFs"), NULL, "ana "); for (k=12; k<14; k++) print_int (buf, (int)tmp_field -> ana_opts[k]); } if (tmp_field -> ana_opts[14] == 1.0) { print_control_string (buf, "inv", _("\n# Calculate and collect inversions PDFs"), NULL, "ana "); for (k=15; k<17; k++) print_int (buf, (int)tmp_field -> ana_opts[k]); } print_control_string (buf, "ana", _("\n# Print any opted for analysis inter and intra-molecular PDFs"), NULL, "print "); } print_info ("\n", NULL, buf); if (tmp_field -> out_opts[21] == 1.0 || tmp_field -> out_opts[27] == 1.0) { print_control_float (buf, tmp_field -> out_opts[23], _("\n# Bin size for RDfs and Z-density distribution: "), " Ang.", "binsize "); } if (tmp_field -> out_opts[21] == 1.0) { print_control_int (buf, (int)tmp_field -> out_opts[22], _("\n# Calculate and collect radial distribution functions every: "), _(" MD step(s)"), "rdf "); print_info ("\n", NULL, buf); print_control_string (buf, "rdf", NULL, NULL, "print "); } if (tmp_field -> out_opts[27] == 1.0) { print_control_int (buf, (int)tmp_field -> out_opts[28], _("\n# Calculate and collect Z-density profile every: "), _(" MD step(s)"), "zden "); print_info ("\n", NULL, buf); print_control_string (buf, "zden", NULL, NULL, "print "); } if (tmp_field -> out_opts[24] == 1.0) { print_control_key (buf, _("\n# Velocity autocorrelation functions, VAFs\n"), "vaf "); for (k=25; k<27; k++) print_int (buf, (int)tmp_field -> out_opts[k]); print_info ("\n", NULL, buf); print_control_string (buf, "vaf", NULL, NULL, "print "); if (tmp_field -> out_opts[29] == 1.0) { print_control_string (buf, "vafav", _("\n# Ignore time averaging for the VAFs"), NULL, "no "); } } if ((int)tmp_field -> out_opts[0] || (int)tmp_field -> out_opts[4] || (int)tmp_field -> out_opts[8] || (int)tmp_field -> out_opts[12] || (int)tmp_field -> out_opts[15] || (int)tmp_field -> out_opts[17] || (int)tmp_field -> out_opts[19]) { print_info (_("\n\n# Output information"), NULL, buf); if ((int)tmp_field -> out_opts[0]) { print_control_key (buf, _("\n# Write defects trajectory file, DEFECTS\n"), "defe "); for (k=1; k<3; k++) print_int (buf, (int)tmp_field -> out_opts[k]); print_float (buf, tmp_field -> out_opts[3]); } if ((int)tmp_field -> out_opts[4]) { print_control_key (buf, _("\n# Write displacement trajectory file, RSDDAT\n"), "disp "); for (k=5; k<7; k++) print_int (buf, (int)tmp_field -> out_opts[k]); print_float (buf, tmp_field -> out_opts[7]); } if ((int)tmp_field -> out_opts[8]) { print_control_key (buf, _("\n# Write HISTORY file\n"), "traj "); for (k=9; k<11; k++) print_int (buf, (int)tmp_field -> out_opts[k]); print_float (buf, tmp_field -> out_opts[11]); } if ((int)tmp_field -> out_opts[12]) { print_control_key (buf, _("\n# Write MSDTMP file\n"), "msdtmp "); for (k=13; k<15; k++) print_int (buf, (int)tmp_field -> out_opts[k]); } if ((int)tmp_field -> out_opts[15]) { print_control_int (buf, (int)tmp_field -> out_opts[16], _("\n# Print system data every: "), _(" MD step(s)"), "print "); } if ((int)tmp_field -> out_opts[17]) { print_control_int (buf, (int)tmp_field -> out_opts[18], _("\n# Accumulate statics data every: "), _(" MD step(s)"), "stats "); } if ((int)tmp_field -> out_opts[19]) { print_control_int (buf, (int)tmp_field -> out_opts[20], _("\n# Set rolling average stack to: "), _(" MD step(s)"), "stack "); } } print_control_int (buf, (int)tmp_field -> out_opts[30], _("\n# Dump restart information every: "), _(" MD step(s)"), "dump "); for (i=0; i<2; i++) { if (tmp_field -> io_opts[2*i] == 1.0) { print_control_float (buf, tmp_field -> io_opts[2*i+1], _(time_inf[i]), " s", time_key[i]); } } print_info ("\n", NULL, buf); for (i=0; i<2; i++) { j=4 + i*6; if (tmp_field -> io_opts[j] == 1.0) { j ++; print_info (_(io_inf[i]), NULL, buf); print_info (_("# - method = "), NULL, buf); print_info (io_rw_m[(int)tmp_field -> io_opts[j]], NULL, buf); j++; if (i) { if (tmp_field -> io_opts[j-1] == 3.0) { print_info (_("\n# - precision = "), NULL, buf); print_info (io_pres[(int)tmp_field -> io_opts[j]], NULL, buf); } j ++; print_info (_("\n# - type = "), NULL, buf); print_info (io_typ[(int)tmp_field -> io_opts[j]], NULL, buf); j++; } if (tmp_field -> io_opts[4+7*i] != 2.0) { print_info (_("\n# - j, reader count = "), NULL, buf); str_a = g_strdup_printf ("%d", (int)tmp_field -> io_opts[j]); print_info (str_a, NULL, buf); } j++; if (tmp_field -> io_opts[4+7*i] != 2.0) { print_info (_("\n# - k, batch size = "), NULL, buf); str_b = g_strdup_printf ("%d", (int)tmp_field -> io_opts[j]); print_info (str_b, NULL, buf); } j++; print_info (_("\n# - l, buffer size = "), NULL, buf); str_c = g_strdup_printf ("%d", (int)tmp_field -> io_opts[j]); print_info (str_c, NULL, buf); j++; if (tmp_field -> io_opts[4+7*i] != 2.0) { print_info (_("\n# - e, parallel error check is "), NULL, buf); print_info (io_pec[(int)tmp_field -> io_opts[j]], NULL, buf); } print_info (io_key[i], "bold", buf); print_info (io_meth[(int)tmp_field -> io_opts[5+6*i]], "bold_green", buf); if (i) { if (tmp_field -> io_opts[11] == 3.0) { print_info (io_pres[(int)tmp_field -> io_opts[12]], "bold_green", buf); } print_info (" ", NULL, buf); print_info (io_typ[(int)tmp_field -> io_opts[13]], "bold_green", buf); } if (tmp_field -> io_opts[4+7*i] != 2.0) { print_info (" ", NULL, buf); print_info (str_a, "bold_blue", buf); g_free (str_a); print_info (" ", NULL, buf); print_info (str_b, "bold_blue", buf); g_free (str_b); } print_info (" ", NULL, buf); print_info (str_c, "bold_blue", buf); g_free (str_c); if (tmp_field -> io_opts[4+7*i] != 2.0) { (tmp_field -> io_opts[j] == 0.0) ? print_string (buf, "N") : print_string (buf, "Y"); } print_info ("\n", NULL, buf); j++; } } if (tmp_field -> io_opts[18] == 1.0) { print_control_key (buf, _("\n# Seeds for the random number generators\n"), "seed "); for (i=19; i<22; i++) print_int (buf, (int)tmp_field -> io_opts[i]); print_info ("\n", NULL, buf); } if (tmp_field -> io_opts[22] == 1.0) { print_control_key (buf, _("\n# Limits to 2 the number of processors in z direction for slab simulations\n"), "slab"); } print_info ("\n\n", NULL, buf); print_info ("finish", "bold", buf); // Close the CONTROL file } atomes_1.3.1/src/calc/dl_poly/dlp_active.c0000664000175000017500000001726015212624223020124 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_active.c * @short Functions to retrieve data in the force field structure * @author Sébastien Le Roux */ /* * This file: 'dlp_active.c' * * Contains: * - The functions to retrieve data in the force field structure * * List of functions: field_molecule * get_active_field_molecule_from_model_id (project * this_proj, int aid); field_molecule * get_active_field_molecule (int a); field_nth_body * get_active_body (int a, int b); field_external * get_active_external (int a); field_atom* get_active_atom (int a, int b); field_shell * get_active_shell (int a, int b); field_constraint * get_active_constraint (int a, int b); field_pmf * get_active_pmf (int a, int b); field_rigid * get_active_rigid (int a, int b); field_tethered * get_active_tethered (int a, int b); field_prop * get_active_prop (struct field_prop * pr, int a); field_prop * get_active_prop_using_atoms (struct field_prop * pr, int ti, int * ids); field_struct * get_active_struct (int s, int a, int b); */ #include "dlp_field.h" /*! \fn field_molecule * get_active_field_molecule_from_model_id (project * this_proj, int aid) \brief retrieve field molecule from overall atom id in the model \param this_proj the target project \param aid the target atom id */ field_molecule * get_active_field_molecule_from_model_id (project * this_proj, int aid) { int i; field_molecule * fmol = this_proj -> force_field[activef] -> first_molecule; field_atom* fat; while (fmol) { fat = fmol -> first_atom; while (fat) { for (i=0; i num; i++) { if (fat -> list[i] == aid) return fmol; } fat = fat -> next; } fmol = fmol -> next; } return NULL; } /*! \fn field_molecule * get_active_field_molecule (int a) \brief retrieve field molecule \param a the id of the field molecule to retrieve */ field_molecule * get_active_field_molecule (int a) { int i; field_molecule * tfmol = tmp_field -> first_molecule; for (i=0; i next != NULL) tfmol = tfmol -> next; } return tfmol; } /*! \fn field_nth_body * get_active_body (int a, int b) \brief retrieve field nth body interaction \param a the id of the body interaction to retrieve \param b the type of body interaction */ field_nth_body * get_active_body (int a, int b) { int i; field_nth_body * body; body = tmp_field -> first_body[b]; for (i=0; i next != NULL) body = body -> next; } return body; } /*! \fn field_external * get_active_external (int a) \brief retrieve external field property \param a the id of the external field property to retrieve */ field_external * get_active_external (int a) { int i; field_external * external; external = tmp_field -> first_external; for (i=0; i next != NULL) external = external -> next; } return external; } /*! \fn field_atom* get_active_atom (int a, int b) \brief retrieve field atom \param a the id of the field molecule \param b the id of the field atom to retrieve */ field_atom* get_active_atom (int a, int b) { int i; field_atom* ato; ato = get_active_field_molecule (a) -> first_atom; for (i=0; i next != NULL) ato = ato -> next; } return ato; } /*! \fn field_shell * get_active_shell (int a, int b) \brief retrieve shell property \param a the id of the field molecule \param b the id of the shell property to retrieve */ field_shell * get_active_shell (int a, int b) { int i; field_shell * shl; shl = get_active_field_molecule (a) -> first_shell; for (i=0; i next != NULL) shl = shl -> next; } return shl; } /*! \fn field_constraint * get_active_constraint (int a, int b) \brief retrieve constraint property \param a the id of the field molecule \param b the id of the constraint to retrieve */ field_constraint * get_active_constraint (int a, int b) { int i; field_constraint * cons; cons = get_active_field_molecule (a) -> first_constraint; for (i=0; i next != NULL) cons = cons -> next; } return cons; } /*! \fn field_pmf * get_active_pmf (int a, int b) \brief retrieve PMF property \param a the id of the field molecule \param b the id of the PMF property to retrieve */ field_pmf * get_active_pmf (int a, int b) { int i; field_pmf * pmf; pmf = get_active_field_molecule (a) -> first_pmf; for (i=0; i next != NULL) pmf = pmf -> next; } return pmf; } /*! \fn field_rigid * get_active_rigid (int a, int b) \brief retrieve rigid property \param a the id of the field molecule \param b the id of the rigid property to retrieve */ field_rigid * get_active_rigid (int a, int b) { int i; field_rigid * rig; rig = get_active_field_molecule (a) -> first_rigid; for (i=0; i next != NULL) rig = rig -> next; } return rig; } /*! \fn field_tethered * get_active_tethered (int a, int b) \brief retrieve tethered property \param a the id of the field molecule \param b the id of the tethered to retrieve */ field_tethered * get_active_tethered (int a, int b) { int i; field_tethered * tet; tet = get_active_field_molecule (a) -> first_tethered; for (i=0; i next != NULL) tet = tet -> next; } return tet; } /*! \fn field_prop * get_active_prop (struct field_prop * pr, int a) \brief the field molecule structural property id to retrieve \param pr the pointer on the field molecule properties to browse \param a the id of the field molecule property to retrieve */ field_prop * get_active_prop (struct field_prop * pr, int a) { field_prop * prop; prop = pr; int i; for (i=0; i next != NULL) prop = prop -> next; } return prop; } /*! \fn field_prop * get_active_prop_using_atoms (struct field_prop * pr, int ti, int * ids) \brief retrieve field molecule structural property using atoms \param pr the pointer on the field molecule properties to browse \param ti the number of atoms for this property \param ids the atoms to search for */ field_prop * get_active_prop_using_atoms (struct field_prop * pr, int ti, int * ids) { field_prop * prop = NULL; prop = pr; gboolean done; int i; while (prop != NULL) { done = TRUE; for (i=0; i aid[i] != ids[i]) { done = FALSE; break; } } if (done) break; prop = prop -> next; } return prop; } /*! \fn field_struct * get_active_struct (int s, int a, int b) \brief retrieve field structural property \param s the type of structural property \param a the field molecule id \param b the structural property id to retrieve */ field_struct * get_active_struct (int s, int a, int b) { int i; field_struct * str; str = get_active_field_molecule (a) -> first_struct[s]; for (i=0; i next != NULL) str = str -> next; } return str; } atomes_1.3.1/src/calc/dl_poly/dlp_init.c0000664000175000017500000025017615212624223017621 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_init.c * @short Functions to initialize the creation of a classical force field * @author Sébastien Le Roux */ /* * This file: 'dlp_init.c' * * Contains: * - The functions to initialize the creation of a classical force field * * List of functions: int get_position_in_field_atom_from_model_id (int fat, int at); int get_field_atom_id_from_model_id (field_molecule * fmol, int at); int get_fragment_atom_id_from_model_id (field_molecule * fmol, int at); int get_atom_id_in_fragment_from_model_id (int frag, int at); int set_atom_id (field_atom* at, int c, int p, int id); int get_struct_id_from_atom_id (int ids, int * aid); int prepare_field_atom (int i, int j, int k, int l, int m); int test_for_bonds (field_atom* at, field_atom* bt); int prepare_field_struct (int ids, int sid, int yes_no_num, int * aid); int bonds_between_atoms (int n, field_atom* at, field_atom* bt, int a, int b); int test_for_angles (field_atom* at, field_atom* bt, field_atom* ct); int angles_from_bonds (int n, field_atom* at, field_atom* bt, field_atom* ct); int test_for_dihedrals (field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt); int dihedrals_from_angles (int n, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt); int impropers_inversion (int n, int stru, int at, int bt, int ct, int dt, int a, int b, int c, int d); int coord_sphere_multiplicity (atom * at, int id, gboolean set_atom_id, gboolean in_field_atom); int find_neighbor_loop (int frag, int aid, int fai, field_atom* fat, field_neighbor * ngmb, int sid, gboolean save_it); int setup_atomic_weight (int seq); int init_vdw (gboolean init); gboolean was_not_created_struct (int ids, int num, int * aid); gboolean in_bond (int at, int bd[2]); gboolean are_neighbors (field_neighbor * ngb, int at); gboolean are_in_bond (atom ato, int at); gboolean is_numbering_possible (int frag); gboolean is_this_numbering_possible_for_this_atom (int frag, field_neighbor * ngma, int atom); gboolean id_n_fold_atoms_in_fragment (int frag, int limit, int num_ngb, int search_type, int init, field_neighbor * ngma_init); gboolean id_atoms_in_fragment (int frag, int seed); gchar * set_field_atom_name (field_atom* ato, field_molecule * mol); void init_all_atoms (int i); void init_all_bonds (); void init_all_angles (); void init_all_dihedrals (); void init_all_impropers_inversions (int stru); void get_weight (int seq); void find_atom_id_in_field_molecule (); void clean_field_struct_list (field_struct * stru); void init_all_field_struct (gboolean init); void init_field_molecule (int i); void init_dlpoly_field (classical_field * new_field); void init_lammps_field (classical_field * new_field); field_atom* init_field_atom (int id, int type, int at, int nat, int coo, int * list); field_shell * init_field_shell (int id, int ia, int ib); field_constraint * init_field_constraint (int id, int ia, int ib); field_pmf * init_field_pmf (int id, int num[2], int * list[2], float * w[2]); field_rigid * init_field_rigid (int id, int num, int * list); field_tethered * init_field_tethered (int id, int num); field_prop * init_field_prop (int ti, int key, gboolean show, gboolean use); field_struct * init_field_struct (int st, int ai, int an, int * aid); field_nth_body * init_field_nth_body (int bi, int bd, int * na, int ** ma, int ** ba); field_external * init_field_external (int bi); field_neighbor * get_init_neighbor (int a); classical_field * create_force_field_data_structure (int ai); */ #include "dlp_field.h" #include "interface.h" extern void print_all_field_struct (field_molecule * mol, int str); int * astr; float val; extern int * duplicate_int (int num, int * old_val); extern float * duplicate_float (int num, float * old_val); int id_atom; int multi; int a_multi; /*! \fn int get_position_in_field_atom_from_model_id (int fat, int at) \brief retrieve atom position id in field atom id using atom id in model \param fat the target field atom \param at the target model atom id */ int get_position_in_field_atom_from_model_id (int fat, int at) { int i; field_atom* tmp_ft = get_active_atom (tmp_fmol -> id, fat); for (i=0; i num; i++) { if (tmp_ft -> list[i] == at) return i; } return -1; } /*! \fn int get_field_atom_id_from_model_id (field_molecule * fmol, int at) \brief retrieve field atom id using atom id in model \param fmol the target field molecule \param at the target model atom id */ int get_field_atom_id_from_model_id (field_molecule * fmol, int at) { int i; field_atom* fat = fmol -> first_atom; while (fat) { for (i=0; i< fat -> num; i++) { if (at == fat -> list[i]) return fat -> id; } fat = fat -> next; } return -1; } /*! \fn int get_fragment_atom_id_from_model_id (field_molecule * fmol, int at) \brief retrieve fragment atom id using atom id in model \param fmol the target field molecule \param at the target model atom id */ int get_fragment_atom_id_from_model_id (field_molecule * fmol, int at) { int i; field_atom* fat = fmol -> first_atom; while (fat) { for (i=0; i< fat -> num; i++) { if (at == fat -> list[i]) return fat -> list_id[i]; } fat = fat -> next; } return -1; } /*! \fn int get_atom_id_in_fragment_from_model_id (int frag, int at) \brief retrieve field atom id in fragment from model id \param frag the fragment id \param at the atom id in the model */ int get_atom_id_in_fragment_from_model_id (int frag, int at) { int i, j, k; field_atom* tmp_ft; for (i=0; i< tmp_fmol -> mol -> natoms; i++) { if (tmp_fmol -> atoms_id[i][frag].a > -1 && tmp_fmol -> atoms_id[i][frag].b > -1) { tmp_ft = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[i][frag].a); j = tmp_fmol -> atoms_id[i][frag].b; k = tmp_ft -> list[j]; if (k == at) return i; } } return -1; } /*! \fn int set_atom_id (field_atom* at, int c, int p, int id) \brief set new fragment/molecule atom parameters \param at the target field atom \param c the fragment id \param p the list id in field atom \param id the field atom id */ int set_atom_id (field_atom* at, int c, int p, int id) { if (c == tmp_fmol -> fragments[0]) { id_atom ++; tmp_fmol -> atoms_id[id_atom][0].a = id; tmp_fmol -> atoms_id[id_atom][0].b = p; return id_atom; } else { return -1; } } /*! \fn gchar * set_field_atom_name (field_atom* ato, field_molecule * mol) \brief get name string for field atom \param ato the target field atom \param mol the target field molecule */ gchar * set_field_atom_name (field_atom* ato, field_molecule * mol) { int i, j; gchar * str; field_atom* tmpatf; switch (ato -> type) { case SPEC_ONLY: str = exact_name(tmp_proj -> chemistry -> label[ato -> sp]); break; case OTHER: tmpatf = mol -> first_atom; j = 1; while (tmpatf) { if (tmpatf -> sp == ato -> sp) j ++; tmpatf = tmpatf -> next; } str = exact_name(g_strdup_printf ("%s-%d-%d", tmp_proj -> chemistry -> label[ato -> sp], j, mol -> id+1)); break; default: i = ato -> list[0]; j = tmp_proj -> atoms[0][i].coord[ato -> type-1]; switch (ato -> type) { case TOTAL_COORD_AND_SPEC: str = g_strdup_printf ("%s-%d-%d", exact_name(tmp_proj -> chemistry -> label[ato -> sp]), tmp_coord -> geolist[0][ato -> sp][j], mol -> id+1); break; case PARTIAL_COORD_AND_SPEC: str = g_strdup_printf ("%s-%d-%d", exact_name(tmp_proj -> chemistry -> label[ato -> sp]), j+1, mol -> id+1); /*str = g_strdup_printf ("%s-%d", exact_name (env_name (tmp_proj, j, ato -> sp, ato -> type, NULL)), mol -> id+1);*/ break; } } return str; } /*! \fn field_atom* init_field_atom (int id, int type, int at, int nat, int coo, int * list) \brief initialize a new type of field atom \param id the new field atom id \param type the new field atom coordination type \param at the new field atom species \param nat the number of atom(s) of for this field atom type \param coo the coordination id in coordination type, if any \param list the list of atoms that match this type of field atom */ field_atom* init_field_atom (int id, int type, int at, int nat, int coo, int * list) { int h, i, j, k, l, m, n; field_atom* ato; ato = g_malloc0(sizeof*ato); ato -> id = id; ato -> type = type; ato -> num = nat; ato -> list = allocint (ato -> num); ato -> list_id = allocint (ato -> num); ato -> frozen_id = allocbool (ato -> num); h = 0; switch (type) { case OTHER: for (i=0; i multi; i++) { for (j=0; j < nat/tmp_fmol -> multi; j++) { k = list[j]; l = tmp_fmol -> atoms_id[k][i].a; m = tmp_fmol -> atoms_id[k][i].b; n = get_active_atom (tmp_fmol -> id, l) -> list[m]; ato -> list[h] = n; ato -> list_id[h] = k; ato -> frozen_id[h] = FALSE; tmp_fmol -> atoms_id[k][i].a = ato -> id; tmp_fmol -> atoms_id[k][i].b = h; tmp_proj -> atoms[0][n].faid = ato -> id; h ++; } } break; default: for (i=0; i < tmp_fmol -> multi; i++) { j = tmp_fmol -> fragments[i]; for (k=0; k < tmp_proj -> natomes; k++) { if (tmp_proj -> atoms[0][k].coord[2] == j && tmp_proj -> atoms[0][k].sp == at) { if (type == SPEC_ONLY) { ato -> list[h] = k; ato -> frozen_id[h] = FALSE; ato -> list_id[h] = set_atom_id (ato, tmp_proj -> atoms[0][k].coord[2], h, id); h ++; } else { if (tmp_proj -> atoms[0][k].coord[type-1] == coo) { ato -> list[h] = k; ato -> frozen_id[h] = FALSE; ato -> list_id[h] = set_atom_id (ato, tmp_proj -> atoms[0][k].coord[2], h, id); h ++; } } } } } break; } #ifdef DEBUG if (h != ato -> num) g_debug ("Something is wrong in with this field atom: id= %d, sp= %d, co= %d", id, at, coo); #endif ato -> sp = at; ato -> mass = 0.0;//get_force_field_atom_mass (at, 0); ato -> fid = (ato -> mass == 0.0) ? -1 : tmp_field -> type; ato -> afid = (ato -> mass == 0.0) ? -1 : 0; ato -> mass = (ato -> mass == 0.0) ? tmp_proj -> chemistry -> chem_prop[CHEM_M][at] : ato -> mass; ato -> name = g_strdup_printf ("%s", set_field_atom_name (ato, tmp_fmol)); ato -> charge = 0.0; ato -> frozen = 0; ato -> show = FALSE; ato -> next = NULL; ato -> prev = NULL; return ato; } /*! \fn field_shell * init_field_shell (int id, int ia, int ib) \brief initialize field core shell interaction \param id the new shell id \param ia 1st atom id in field molecule \param ib 2nd atom id in field molecule */ field_shell * init_field_shell (int id, int ia, int ib) { field_shell * shell; shell = g_malloc0(sizeof*shell); shell -> id = id; shell -> ia[0] = ia; shell -> ia[1] = ib; shell -> k2 = 0.0; shell -> k4 = 0.0; shell -> show = FALSE; shell -> use = TRUE; shell -> next = NULL; shell -> prev = NULL; return shell; } /*! \fn field_constraint * init_field_constraint (int id, int ia, int ib) \brief initialize field bond constraint \param id the new field constraint id \param ia 1st atom id in field molecule \param ib 2nd atom id in field molecule */ field_constraint * init_field_constraint (int id, int ia, int ib) { field_constraint * cons; cons = g_malloc0(sizeof*cons); cons -> id = id; cons -> ia[0] = ia; cons -> ia[1] = ib; cons -> av = -1.0; cons -> length = 0.0; cons -> show = FALSE; cons -> use = TRUE; cons -> next = NULL; cons -> prev = NULL; return cons; } /*! \fn field_pmf * init_field_pmf (int id, int num[2], int * list[2], float * w[2]) \brief initialize new field mean force potential \param id the id of the new field PMF \param num the numbers of atom(s) \param list the lists of atom(s) \param w the weight list */ field_pmf * init_field_pmf (int id, int num[2], int * list[2], float * w[2]) { field_pmf * pmf; pmf = g_malloc0(sizeof*pmf); pmf -> id = id; pmf -> av = -1.0; pmf -> length = 0.0; int i; if (num != NULL) { for (i=0; i<2; i++) { pmf -> num[i] = num[i]; pmf -> list[i] = duplicate_int (num[i], list[i]); pmf -> weight[i] = duplicate_float (num[i], w[i]); } } else { for (i=0; i<2; i++) { pmf -> num[i] = 0; pmf -> list[i] = NULL; pmf -> weight[i] = NULL; } } pmf -> show = FALSE; pmf -> use = TRUE; pmf -> next = NULL; pmf -> prev = NULL; return pmf; } /*! \fn field_rigid * init_field_rigid (int id, int num, int * list) \brief initialize new field rigid constraint \param id the id of the new field rigid \param num the number of atom(s) to fix \param list the list of atom(s) to fix */ field_rigid * init_field_rigid (int id, int num, int * list) { field_rigid * rig; rig = g_malloc0(sizeof*rig); rig -> id = id; rig -> num = num; rig -> list = NULL; if (list != NULL) rig -> list = duplicate_int (num, list); rig -> show = FALSE; rig -> use = TRUE; rig -> next = NULL; rig -> prev = NULL; return rig; } /*! \fn field_tethered * init_field_tethered (int id, int num) \brief initialize new field tethered potential \param id the new field tethered potential id \param num the atom id in the field molecule */ field_tethered * init_field_tethered (int id, int num) { field_tethered * tet; tet = g_malloc0(sizeof*tet); tet -> id = id; tet -> num = num; tet -> key = 0; tet -> val = allocfloat (fvalues[activef][0][0]); tet -> show = FALSE; tet -> use = TRUE; tet -> next = NULL; tet -> prev = NULL; return tet; } /*! \fn field_prop * init_field_prop (int ti, int key, gboolean show, gboolean use) \brief initialize new field molecule structural property \param ti the type of field structural element to initialize \param key the formalism to use \param show visualize in the 3D window (yes / no) \param use use to create the force field input file (yes / no) */ field_prop * init_field_prop (int ti, int key, gboolean show, gboolean use) { field_prop * prop; prop = g_malloc0(sizeof*prop); prop -> aid = allocint (struct_id(ti+7)); prop -> key = key; prop -> pid = -1; prop -> fpid = -1; prop -> val = allocfloat (fvalues[activef][ti+1][key]); prop -> show = show; prop -> use = use; prop -> next = NULL; prop -> prev = NULL; return prop; } /*! \fn int get_struct_id_from_atom_id (int ids, int * aid) \brief retrieve field structural element id from a list of atom id \param ids the type of structural element \param aid the list of atom id */ int get_struct_id_from_atom_id (int ids, int * aid) { int i, j; field_struct * stru = tmp_fmol -> first_struct[ids]; j = struct_id (ids+7); int res = 0; while (stru) { res = stru -> id + 1; for (i=0; i aid[i] != aid[i]) { res = 0; break; } } if (! res) { res = -(stru -> id + 1); for (i=0; i aid[i] != aid[j-1-i]) { res = 0; break; } } } if (res != 0) break; stru = stru -> next; } return res; } /*! \fn gboolean was_not_created_struct (int ids, int num, int * aid) \brief was this structural element already created ? \param ids the type of structural element \param num the number of atoms \param aid the list of atom id */ gboolean was_not_created_struct (int ids, int num, int * aid) { if (num == 0) return TRUE; int j, k; k = struct_id(ids+7); tmp_fstr = tmp_fmol -> first_struct[ids]; gboolean res; while (tmp_fstr) { res = FALSE; if (ids < 6) { for (j=0; j aid[j] != aid[j]) { res = TRUE; break; } } if (res) { res = FALSE; for (j=0; j aid[k-1-j] != aid[j]) { res = TRUE; break; } } } } else if (ids == 6) { for (j=0; j aid[j] != aid[j]) { res = TRUE; break; } } if (res) { if (tmp_fstr -> aid[0] != aid[0]) { res = TRUE; } else if (tmp_fstr -> aid[3] != aid[3]) { res = TRUE; } else if (tmp_fstr -> aid[1] == aid[2] && tmp_fstr -> aid[2] == aid[1]) { res = FALSE; } } } else { if (tmp_fstr -> aid[0] != aid[0]) { res = TRUE; } else { if (tmp_fstr -> aid[1] != aid[1]) { res = TRUE; } else if (tmp_fstr -> aid[2] == aid[2] && tmp_fstr -> aid[3] == aid[3]) { res = FALSE; } else if (tmp_fstr -> aid[2] == aid[3] && tmp_fstr -> aid[3] == aid[2]) { res = FALSE; } else { res = TRUE; } } } if (! res) return FALSE; tmp_fstr = tmp_fstr -> next; } return TRUE; } /*! \fn field_struct * init_field_struct (int st, int ai, int an, int * aid) \brief initialize field molecule new structural element \param st the type of structural element (0 = bond, 1 = angle, 2 = dihedral) \param ai the id of the new structural property \param an the number of atoms \param aid the list of field atoms */ field_struct * init_field_struct (int st, int ai, int an, int * aid) { field_struct * str; str = g_malloc0(sizeof*str); str -> st = st; str -> id = ai; if (st == 6 || st == 7) { str -> num = 0; str -> av = 0.0; } else { str -> num = an; str -> av = val; } str -> aid = NULL; if (aid != NULL) str -> aid = duplicate_int (struct_id(st+7), aid); str -> def = init_field_prop (st, 0, FALSE, TRUE); str -> other = NULL; str -> next = NULL; str -> prev = NULL; return str; } /*! \fn field_nth_body * init_field_nth_body (int bi, int bd, int * na, int ** ma, int ** ba) \brief initialize new field non bonded interaction \param bi the new non bonded interaction id \param bd the type of non bonded interaction \param na the list of field atom(s), if any \param ma the list of field molecule(s), if any \param ba the list of atom id in field molecule, if any */ field_nth_body * init_field_nth_body (int bi, int bd, int * na, int ** ma, int ** ba) { int i, j; field_nth_body * nthbd; nthbd = g_malloc0(sizeof*nthbd); nthbd -> id = bi; nthbd -> bd = bd; if (! bd) { nthbd -> fpid = allocint (2); nthbd -> fpid[0] = nthbd -> fpid[1] = -1; } j = body_at (bd); // Id in Vdw list if (na == NULL) { nthbd -> na = allocint (j); for (i=0; i na[i] = -1; } else { nthbd -> na = duplicate_int (j, na); } // Molecule id nthbd -> ma = NULL; nthbd -> ma = g_malloc0(j*sizeof*nthbd -> ma); // Field atom id in molecule nthbd -> a = NULL; nthbd -> a = g_malloc0(j*sizeof*nthbd -> a); for (i=0; i < j; i++) { if (ma != NULL) nthbd -> ma[i] = duplicate_int (na[i], ma[i]); if (ba != NULL) nthbd -> a[i] = duplicate_int (na[i], ba[i]); } nthbd -> key = 0; nthbd -> val = allocfloat (fvalues[activef][9+bd][nthbd -> key]); nthbd -> show = FALSE; nthbd -> use = TRUE; nthbd -> next = NULL; nthbd -> prev = NULL; return nthbd; } /*! \fn field_external * init_field_external (int bi) \brief initialize new field external potential \param bi the id of the new field external potential */ field_external * init_field_external (int bi) { field_external * nfext; nfext = g_malloc0(sizeof*nfext); nfext -> id = bi; nfext -> key = -1; nfext -> val = NULL; nfext -> use = FALSE; nfext -> next = NULL; nfext -> prev = NULL; return nfext; } /*! \fn int prepare_field_atom (int i, int j, int k, int l, int m) \brief initialiaze new type of field atom \param i the new field atom id \param j the new field atom coordination type \param k the new field atom species \param l the number of atom(s) of for this field atom type \param m the coordination id in coordination type, if any */ int prepare_field_atom (int i, int j, int k, int l, int m) { if (tmp_fmol -> first_atom == NULL) { tmp_fmol -> first_atom = init_field_atom (i, j, k, l, m, NULL); tmp_fat = tmp_fmol -> first_atom; } else { tmp_fat -> next = init_field_atom (i, j, k, l, m, NULL); tmp_fat -> next -> prev = g_malloc0(sizeof*tmp_fat -> next -> prev); tmp_fat -> next -> prev = tmp_fat; tmp_fat = tmp_fat -> next; } return 1; } /*! \fn void init_all_atoms (int i) \brief initialize all field atom(s) \param i the molecule id in the model, if any */ void init_all_atoms (int i) { int j, k, l, m, n; tmp_fmol -> first_atom = NULL; k = 0; switch (tmp_field -> atom_init) { case SPEC_ONLY: for (j=0; j nspec; j++) { if (tmp_mol -> species[j] > 0) { k += prepare_field_atom (k, tmp_field -> atom_init, j, tmp_mol -> species[j]*tmp_fmol -> multi, 0); } } break; case OTHER: break; default: for (j=0; j nspec; j++) { if (tmp_mol -> species[j] > 0) { for (l=0; l < tmp_coord -> totcoord[tmp_field -> atom_init-1]; l++) { n = 0; for (m=0; m < tmp_proj -> natomes; m++) { if (tmp_proj -> atoms[0][m].sp == j && tmp_proj -> atoms[0][m].coord[3] == i && tmp_proj -> atoms[0][m].coord[tmp_field -> atom_init -1] == l) n ++; } if (n > 0) { k += prepare_field_atom (k, tmp_field -> atom_init, j, n, l); } } } } break; } tmp_fmol -> atoms = k; } /*! \fn gboolean in_bond (int at, int bd[2]) \brief is atom at in bond bd \param at the target atom id \param bd the bond atoms id */ gboolean in_bond (int at, int bd[2]) { if (at == bd[0] || at == bd[1]) { return TRUE; } else { return FALSE; } } /*! \fn gboolean are_neighbors (field_neighbor * ngb, int at) \brief test if 2 atoms are neighbors \param ngb the neighbor data structure to test \param at the target atom id in the model */ gboolean are_neighbors (field_neighbor * ngb, int at) { int i; for (i=0; i num; i++) { if (ngb -> vois[i] == at) return TRUE; } return FALSE; } /*! \fn gboolean are_in_bond (atom ato, int at) \brief is at in ato neighbors ? \param ato the target atom \param at the target atom id */ gboolean are_in_bond (atom ato, int at) { int i; for (i=0; i num; i++) { j = at -> list[i]; for (k= 0; k < tmp_proj -> atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == bt -> id) { m ++; val += distance_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][j], & tmp_proj -> atoms[0][l]).length; } } } if (m > 0) val /= m; if (at -> id == bt -> id) m /= 2; return m / tmp_fmol -> multi; } /*! \fn int prepare_field_struct (int ids, int sid, int yes_no_num, int * aid) \brief prepare the creation of a field structural element \param ids the type of structural element (0 to 7) \param sid the id of the new structural element \param yes_no_num is there data to save (1 or > 1) or not (0) ? \param aid the list of field atoms */ int prepare_field_struct (int ids, int sid, int yes_no_num, int * aid) { if (yes_no_num > 0) { if (tmp_fmol -> first_struct[ids] == NULL) { tmp_fmol -> first_struct[ids] = init_field_struct (ids, sid, yes_no_num, aid); tmp_fstr = tmp_fmol -> first_struct[ids]; return 1; } else if (was_not_created_struct (ids, sid, aid)) { tmp_fstr = tmp_fmol -> first_struct[ids]; while (tmp_fstr -> next) tmp_fstr = tmp_fstr -> next; tmp_fstr -> next = init_field_struct (ids, sid, yes_no_num, aid); tmp_fstr -> next -> prev = tmp_fstr; tmp_fstr = tmp_fstr -> next; return 1; } } return 0; } /*! \fn int bonds_between_atoms (int n, field_atom* at, field_atom* bt, int a, int b) \brief search for bond(s) between two field atoms \param n the number of different bond types already found \param at 1st field atom \param bt 2nd field atom \param a 1st atom chemical species \param b 2nd atom chemical species */ int bonds_between_atoms (int n, field_atom* at, field_atom* bt, int a, int b) { if ((at -> sp == a && bt -> sp == b) || (at -> sp == b && bt -> sp == a)) { astr[0] = at -> id; astr[1] = bt -> id; n += prepare_field_struct (0, n, test_for_bonds (at, bt), astr); } return n; } /*! \fn void init_all_bonds () \brief find, and initialize all bond(s) */ void init_all_bonds () { int j, k, l; tmp_fmol -> first_struct[0] = NULL; k = 0; for (j=0; j< tmp_proj -> nspec; j++) { tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { tmp_fbt = tmp_fat; while (tmp_fbt) { k = bonds_between_atoms (k, tmp_fat, tmp_fbt, j, j); tmp_fbt = tmp_fbt -> next; } tmp_fat = tmp_fat -> next; } } for (j=0; j nspec-1; j++) { for (l=j+1; l nspec; l++) { tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { tmp_fbt = tmp_fat -> next; while (tmp_fbt) { k = bonds_between_atoms (k, tmp_fat, tmp_fbt, j, l); tmp_fbt = tmp_fbt -> next; } tmp_fat = tmp_fat -> next; } } } tmp_fmol -> nstruct[0] = k; } /*! \fn int test_for_angles (field_atom * at, field_atom * bt, field_atom * ct) \brief search for angle(s) between these field atoms \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom */ int test_for_angles (field_atom* at, field_atom* bt, field_atom* ct) { int i, j, k, l, m, n, o; val = 0.0; o = 0; for (i=0; i num; i++) { j = at -> list[i]; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].numv >= 2 && tmp_proj -> atoms[0][l].faid == bt -> id) { for (m=0; m atoms[0][l].numv; m++) { n = tmp_proj -> atoms[0][l].vois[m]; if (n != j && tmp_proj -> atoms[0][n].faid == ct -> id) { o ++; val += angle_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][j], & tmp_proj -> atoms[0][l], & tmp_proj -> atoms[0][n]).angle; } } } } } if (o > 0) val /= o; if (at -> id == ct -> id) o /= 2; return o / tmp_fmol -> multi; } /*! \fn int angles_from_bonds (int n, field_atom * at, field_atom * bt, field_atom * ct) \brief find, and initialize, angles using bonds \param n the number of different angle types already found \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom */ int angles_from_bonds (int n, field_atom* at, field_atom* bt, field_atom* ct) { astr[0] = at -> id; astr[1] = bt -> id; astr[2] = ct -> id; n += prepare_field_struct (2, n, test_for_angles (at, bt, ct), astr); return n; } /*! \fn void init_all_angles () \brief find, and intialiaze, all angle(s) using bonds */ void init_all_angles () { int m, p; tmp_fmol -> first_struct[2] = NULL; p = 0; field_struct * tmp_fst = tmp_fmol -> first_struct[0]; for (m=0; m < tmp_fmol -> nstruct[0]; m++) { tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fst -> aid[0]); tmp_fbt = get_active_atom (tmp_fmol -> id, tmp_fst -> aid[1]); tmp_fct = tmp_fmol -> first_atom; while (tmp_fct) { p = angles_from_bonds (p, tmp_fat, tmp_fbt, tmp_fct); p = angles_from_bonds (p, tmp_fbt, tmp_fat, tmp_fct); tmp_fct = tmp_fct -> next; } if (tmp_fst -> next != NULL) tmp_fst = tmp_fst -> next; } tmp_fmol -> nstruct[2] = p; } /*! \fn int test_for_dihedrals (field_atom * at, field_atom * bt, field_atom * ct, field_atom * dt) \brief search for dihedral(s) between these field atoms \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom \param dt 4th field atom */ int test_for_dihedrals (field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt) { int i, j, k, l, m, n, o, p, q; q = 0; val = 0.0; for (i=0; i num; i++) { j = at -> list[i]; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == bt -> id) { for (m=0; m atoms[0][l].numv; m++) { n = tmp_proj -> atoms[0][l].vois[m]; if (n != j && tmp_proj -> atoms[0][n].faid == ct -> id) { for (o=0; o atoms[0][n].numv; o++) { p = tmp_proj -> atoms[0][n].vois[o]; if (p != j && p != l && tmp_proj -> atoms[0][p].faid == dt -> id) { q ++; val += dihedral_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][j], & tmp_proj -> atoms[0][l], & tmp_proj -> atoms[0][n], & tmp_proj -> atoms[0][p]).angle; } } } } } } } if (q > 0) val /= q; if (at -> id == dt -> id && bt -> id == ct -> id) q /= 2; return q / tmp_fmol -> multi; } /*! \fn int dihedrals_from_angles (int n, field_atom * at, field_atom * bt, field_atom * ct, field_atom * dt) \brief find, and initialize, dihedrals using angles \param n the number of different dihedral types already found \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom \param dt 4th field atom */ int dihedrals_from_angles (int n, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt) { astr[0] = at -> id; astr[1] = bt -> id; astr[2] = ct -> id; astr[3] = dt -> id; n += prepare_field_struct (4, n, test_for_dihedrals (at, bt, ct, dt), astr); return n; } /*! \fn void init_all_dihedrals () \brief find, and intialiaze, all dihedral(s) using bonds */ void init_all_dihedrals () { int n, p; tmp_fmol -> first_struct[4] = NULL; p = 0; field_struct * tmp_fst = tmp_fmol -> first_struct[2]; for (n=0; n< tmp_fmol -> nstruct[2]; n++) { tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fst -> aid[0]); tmp_fbt = get_active_atom (tmp_fmol -> id, tmp_fst -> aid[1]); tmp_fct = get_active_atom (tmp_fmol -> id, tmp_fst -> aid[2]); tmp_fdt = tmp_fmol -> first_atom; while (tmp_fdt) { p = dihedrals_from_angles (p, tmp_fat, tmp_fbt, tmp_fct, tmp_fdt); p = dihedrals_from_angles (p, tmp_fct, tmp_fbt, tmp_fat, tmp_fdt); tmp_fdt = tmp_fdt -> next; } if (tmp_fst -> next != NULL) tmp_fst = tmp_fst -> next; } tmp_fmol -> nstruct[4] = p; } /*! \fn int impropers_inversion (int n, int stru, int at, int bt, int ct, int dt, int a, int b, int c, int d) \brief prepare new improper / inversion \param n the actual number of structural element \param stru the type of structural element, 6 = impropers, 7 = inversions \param at 1st field atom id \param bt 2nd field atom id \param ct 3rd field atom id \param dt 4th field atom id \param a 1st atom id in molecule/fragment \param b 2nd atom id in molecule/fragment \param c 3rd atom id in molecule/fragment \param d 4th atom id in molecule/fragment */ int impropers_inversion (int n, int stru, int at, int bt, int ct, int dt, int a, int b, int c, int d) { astr[0] = at; astr[1] = bt; astr[2] = ct; astr[3] = dt; double v; //g_debug ("Improp:: at= %d, bt= %d, ct= %d, dt= %d", at, bt, ct, dt); //g_debug ("Improp:: a= %d, b= %d, c= %d, d= %d", a, b, c, d); n += prepare_field_struct (stru, n, 1, astr); //g_debug ("tmp_fstr -> id= %d", tmp_fstr -> id); if (stru == 6) { v = dihedral_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][b], & tmp_proj -> atoms[0][c], & tmp_proj -> atoms[0][a], & tmp_proj -> atoms[0][d]).angle; } else { v = inversion_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][a], & tmp_proj -> atoms[0][b], & tmp_proj -> atoms[0][c], & tmp_proj -> atoms[0][d]).angle; } tmp_fstr -> av += v; tmp_fstr -> num ++; //g_debug ("tmp_fstr -> id = %d, tmp_fstr -> num = %d, v= %f, av= %f\n", tmp_fstr -> id, tmp_fstr -> num, v, tmp_fstr -> av); return n; } /*! \fn void init_all_impropers_inversions (int stru) \brief initialize all impropers and inversions \param stru 6 = improper(s), 7 = inversion(s) */ void init_all_impropers_inversions (int stru) { int i, j, k, l, m, n, p; int * atid, * matid; atid = allocint (tmp_proj -> coord -> cmax+1); matid = allocint (tmp_proj -> coord -> cmax+1); tmp_fmol -> first_struct[stru] = NULL; p = 0; for (i=0; i mol -> natoms; i++) { matid[0] = tmp_fmol -> atoms_id[i][0].a; j = tmp_fmol -> atoms_id[i][0].b; k = atid[0] = get_active_atom (tmp_fmol -> id, matid[0]) -> list[j]; if ((tmp_proj -> atoms[0][k].numv > 2 && stru == 6) || (tmp_proj -> atoms[0][k].numv == 3 && stru == 7)) { for (m=0; m atoms[0][k].numv; m++) { atid[m+1] = tmp_proj -> atoms[0][k].vois[m]; l = tmp_proj -> atoms[0][k].vois[m]; matid[m+1] = tmp_proj -> atoms[0][l].faid; } if (stru == 6) { for (l=0; l atoms[0][k].numv-2; l++) { for (m=l+1; m atoms[0][k].numv-1; m++) { for (n=m+1; n atoms[0][k].numv; n++) { p = impropers_inversion (p, stru, matid[0], matid[l+1], matid[m+1], matid[n+1], atid[0], atid[l+1], atid[m+1], atid[n+1]); p = impropers_inversion (p, stru, matid[0], matid[l+1], matid[n+1], matid[m+1], atid[0], atid[l+1], atid[n+1], atid[m+1]); p = impropers_inversion (p, stru, matid[0], matid[m+1], matid[n+1], matid[l+1], atid[0], atid[m+1], atid[n+1], atid[l+1]); } } } } else { p = impropers_inversion (p, stru, matid[0], matid[1], matid[2], matid[3], atid[0], atid[1], atid[2], atid[3]); p = impropers_inversion (p, stru, matid[0], matid[2], matid[1], matid[3], atid[0], atid[2], atid[1], atid[3]); p = impropers_inversion (p, stru, matid[0], matid[3], matid[1], matid[2], atid[0], atid[3], atid[1], atid[2]); } } } tmp_fmol -> nstruct[stru] = p; tmp_fstr = tmp_fmol -> first_struct[stru]; for (i=0; i nstruct[stru]; i++) { tmp_fstr -> def -> use = FALSE; tmp_fstr -> av /= tmp_fstr -> num; if (tmp_fstr -> next != NULL) tmp_fstr = tmp_fstr -> next; } g_free (atid); g_free (matid); } /*! \fn int coord_sphere_multiplicity (atom * at, int id, gboolean set_atom_id) \brief get coord sphere multiplicity in the model \param at the target atom in the model \param id the atom id in the fragment \param set_atom_id adjust field atom parameters (yes / no) */ int coord_sphere_multiplicity (atom * at, int id, gboolean set_atom_id) { int j, k, l, m; gboolean not_alone; multi = 0; a_multi = 0; tmp_fct = tmp_fmol -> first_atom; while (tmp_fct) { if (tmp_fct -> sp == at -> sp) { for (j=0; j num; j++) { k = tmp_fct -> list[j]; not_alone = TRUE; if (k != at -> id) { for (l=0; l<2; l++) { if (tmp_proj -> atoms[0][k].coord[l] != at -> coord[l]) { not_alone = FALSE; break; } } if (not_alone) { multi ++; if (tmp_fct -> id == tmp_fat -> id) a_multi ++; if (set_atom_id) { l = tmp_proj -> atoms[0][k].coord[2]; for (m=1; m multi; m++) { if (l == tmp_fmol -> fragments[m]) { tmp_fmol -> atoms_id[id][m].a = tmp_fct -> id; tmp_fmol -> atoms_id[id][m].b = j; tmp_fct -> list_id[j] = id; } } } } } } } tmp_fct = tmp_fct -> next; } return multi; } int assigned; int * i_weight; // For the molecule, indice = atom id for the molecule int * n_weight; // For the analyzed multi, indice = atom id for the project field_neighbor * init_ngb = NULL; /*! \fn field_neighbor * get_init_neighbor (int a) \brief retrieve neighbor data structure for atom a \param a the atom id in the fragment */ field_neighbor * get_init_neighbor (int a) { field_neighbor * ngb = NULL; ngb = init_ngb; while (ngb) { if (ngb -> id == a) break; ngb = ngb -> next; } return ngb; } /*! \fn gboolean is_numbering_possible (int frag) \brief compare if the atom numbering of two fragment(s) are identical, and it should \param frag the fragment id */ gboolean is_numbering_possible (int frag) { int i, j, k, l, m, n, o , p; field_neighbor * ngma, * ngmb; field_atom* fat, * fbt; for (i=0; i mol -> natoms-1; i++) { if (tmp_fmol -> atoms_id[i][frag].a > -1 && tmp_fmol -> atoms_id[i][frag].b > -1) { ngma = get_init_neighbor (i); j = tmp_fmol -> atoms_id[i][frag].a; k = tmp_fmol -> atoms_id[i][frag].b; fat = get_active_atom(tmp_fmol -> id, j); l = fat -> list[k]; for (m=i+1; m mol -> natoms; m++) { if (tmp_fmol -> atoms_id[m][frag].a > -1 && tmp_fmol -> atoms_id[m][frag].b > -1) { ngmb = get_init_neighbor (m); n = tmp_fmol -> atoms_id[m][frag].a; o = tmp_fmol -> atoms_id[m][frag].b; fbt = get_active_atom(tmp_fmol -> id, n); p = fbt -> list[o]; if (are_in_bond (tmp_proj -> atoms[0][l], p) != are_neighbors (ngma, m)) { return FALSE; } if (are_in_bond (tmp_proj -> atoms[0][p], l) != are_neighbors (ngmb, i)) { return FALSE; } } } } } return TRUE; } /*! \fn gboolean is_this_numbering_possible_for_this_atom (int frag, field_neighbor * ngma, int atom) \brief check if the id in fragment for this atom is possible or not \param frag the fragment id \param ngma the neigbbor data structure for this fragment \param atom the atom id in the model */ gboolean is_this_numbering_possible_for_this_atom (int frag, field_neighbor * ngma, int atom) { int m, n, o, p; field_atom* fbt; for (m=0; m mol -> natoms; m++) { if (m != ngma -> id) { if (tmp_fmol -> atoms_id[m][frag].a > -1 && tmp_fmol -> atoms_id[m][frag].b > -1) { n = tmp_fmol -> atoms_id[m][frag].a; o = tmp_fmol -> atoms_id[m][frag].b; fbt = get_active_atom(tmp_fmol -> id, n); p = fbt -> list[o]; if (are_in_bond (tmp_proj -> atoms[0][atom], p) != are_neighbors (ngma, m)) { return FALSE; } } } } return TRUE; } /*! \fn int find_neighbor_loop (int frag, int aid, int fai, field_atom* fat, field_neighbor * ngmb, int sid, gboolean save_it) \brief find / set up field atom data for a fragment \param frag the fragment id \param aid the atom id in the model \param fai the atom id in the fragment \param fat the field atom \param ngmb the neighbor(s) list for the fragment \param sid iter to save \param save_it save field atom data (yes / no) */ int find_neighbor_loop (int frag, int aid, int fai, field_atom* fat, field_neighbor * ngmb, int sid, gboolean save_it) { int i, j, k; int iter = 0; i = fat -> num / tmp_fmol -> multi; for (j=frag*i; j < (frag+1)*i; j++) { if (fat -> list_id[j] < 0) { k = fat -> list[j]; if (are_in_bond (tmp_proj -> atoms[0][k], aid)) { //g_debug ("Are linked, n_weight[%d]= %d, i_weight[%d]= %d", k+1, n_weight[k], j+1, i_weight[j]); if (n_weight[k] == i_weight[ngmb -> id]) { tmp_fmol -> atoms_id[fai][frag].a = fat -> id; tmp_fmol -> atoms_id[fai][frag].b = j; fat -> list_id[j] = fai; if (save_it && iter == sid) return k; if (is_this_numbering_possible_for_this_atom (frag, ngmb, k)) iter ++; tmp_fmol -> atoms_id[fai][frag].a = -1; tmp_fmol -> atoms_id[fai][frag].b = -1; fat -> list_id[j] = -1; } } } } return iter; } /*! \fn gboolean id_n_fold_atoms_in_fragment (int frag, int limit, int num_ngb, int search_type, int init, field_neighbor * ngma_init) \brief find atom id in fragment using the neighbor list \param frag the fragment id \param limit the total number of atom(s) in the fragment \param num_ngb the neighbor(s) list for the fragment \param search_type search type (0 = browse field molecule atom list, 1 = browse field atom list) \param init the atom id in the model \param ngma_init the target */ gboolean id_n_fold_atoms_in_fragment (int frag, int limit, int num_ngb, int search_type, int init, field_neighbor * ngma_init) { int i, j, k, l, m, n, o, p, q, r, s, t; field_neighbor * ngma, * ngmb, * ngmc; field_atom* fat, * fbt; if (assigned < limit) { if (search_type) { i = ngma_init -> id; j = tmp_fmol -> atoms_id[i][frag].a; for (k=0; k num; k++) { l = ngma_init -> vois[k]; ngma = get_init_neighbor (l); if (tmp_fmol -> atoms_id[l][frag].a < 0 && tmp_fmol -> atoms_id[l][frag].b < 0) { if (ngma -> num > num_ngb) { m = tmp_fmol -> atoms_id[l][0].a; fat = get_active_atom (tmp_fmol -> id, m); n = find_neighbor_loop (frag, init, l, fat, ngma, 0, FALSE); for (o=0; o mol -> natoms; q++) { if (q != l && tmp_fmol -> atoms_id[q][frag].a > -1 && tmp_fmol -> atoms_id[q][frag].b > -1) { ngmb = get_init_neighbor(q); t = 0; for (r=0; r num; r++) { s = ngmb -> vois[r]; ngmc = get_init_neighbor(s); if (tmp_fmol -> atoms_id[s][frag].a < 0 && tmp_fmol -> atoms_id[s][frag].b < 0 && ngmc -> num > num_ngb) t ++; } if (t) { r = tmp_fmol -> atoms_id[q][frag].a; fbt = get_active_atom (tmp_fmol -> id, r); s = tmp_fmol -> atoms_id[q][frag].b; t = fbt -> list[s]; if (id_n_fold_atoms_in_fragment(frag, limit, num_ngb, 1, t, ngmb)) { return TRUE; } } } } if (id_n_fold_atoms_in_fragment(frag, limit, num_ngb, 0, -1, NULL)) { return TRUE; } else { assigned --; tmp_fmol -> atoms_id[l][frag].a = -1; p = tmp_fmol -> atoms_id[l][frag].b; fat -> list_id[p] = -1; tmp_fmol -> atoms_id[l][frag].b = -1; } } } } } } return FALSE; } else { for (i=0; i mol -> natoms; i++) { if (tmp_fmol -> atoms_id[i][frag].a < 0 && tmp_fmol -> atoms_id[i][frag].b <0) { j = 0; ngma = get_init_neighbor (i); if (ngma -> num > num_ngb) { for (k=0; k natomes; k++) { if (tmp_proj -> atoms[0][k].coord[2] == tmp_fmol -> fragments[frag]) { j ++; if ((n_weight[k] == i_weight[i]) && (ngma -> num == tmp_proj -> atoms[0][k].numv)) { if (get_atom_id_in_fragment_from_model_id (frag, k) < 0) { assigned ++; l = get_field_atom_id_from_model_id (tmp_fmol, k); tmp_fmol -> atoms_id[i][frag].a = l; m = get_position_in_field_atom_from_model_id (l, k); tmp_fmol -> atoms_id[i][frag].b = m; get_active_atom(tmp_fmol -> id, l) -> list_id[m] = i; if (is_this_numbering_possible_for_this_atom (frag, ngma, k)) { if (id_n_fold_atoms_in_fragment(frag, limit, num_ngb, 1, k, ngma)) { return TRUE; } else if (id_n_fold_atoms_in_fragment(frag, limit, num_ngb, 0, -1, NULL)) { return TRUE; } } tmp_fmol -> atoms_id[i][frag].a = -1; tmp_fmol -> atoms_id[i][frag].b = -1; get_active_atom(tmp_fmol -> id, l) -> list_id[m] = -1; assigned --; } } if (j == tmp_fmol -> mol -> natoms) { break; } } } return FALSE; } } } return FALSE; } } else { return TRUE; } } /*! \fn gboolean id_atoms_in_fragment (int frag, int seed) \brief find the atom field id in the fragment \param frag the fragment id \param seed seed */ gboolean id_atoms_in_fragment (int frag, int seed) { int i, j; i = 0; for (j=0; j natomes; j++) { if (tmp_proj -> atoms[0][j].coord[2] == tmp_fmol -> fragments[frag]) { if (tmp_proj -> atoms[0][j].numv > 1) i++; } } if (seed > -1) { field_neighbor * ngb = get_init_neighbor (seed); if (id_n_fold_atoms_in_fragment (frag, i, 1, 0, seed, ngb)) { return id_n_fold_atoms_in_fragment (frag, tmp_fmol -> mol -> natoms, 0, 0, seed, ngb); } else { return FALSE; } } else { if (id_n_fold_atoms_in_fragment (frag, i, 1, 0, -1, NULL)) { return id_n_fold_atoms_in_fragment (frag, tmp_fmol -> mol -> natoms, 0, 0, -1, NULL); } else { return FALSE; } } } /*! \fn void get_weight (int seq) \brief compute field weigth for the atom(s) in the model \param seq weighting sequence */ void get_weight (int seq) { int h, i, j, k; for (i=0; i natomes; i++) { for (j=0; j atoms[0][i].numv; j++) { k = tmp_proj -> atoms[0][i].vois[j]; n_weight[i] += tmp_proj -> atoms[0][k].numv; } } int * weight = duplicate_int (tmp_proj -> natomes, n_weight); for (h=1; h natomes; i++) { for (j=0; j atoms[0][i].numv; j++) { k = tmp_proj -> atoms[0][i].vois[j]; weight[i] += n_weight[k]; } } for (i=0; i natomes; i++) { n_weight[i] = weight[i]; } } g_free (weight); #ifdef DEBUG /*for (i=0; i natomes; i++) { j = tmp_proj -> atoms[0][i].sp; g_debug ("N_WEIGHT:: %s i= %d, n_weight[i] = %d", tmp_proj -> chemistry -> label[j], i+1, n_weight[i]); }*/ #endif } /*! \fn int setup_atomic_weight (int seq) \brief setup atom(s) field weight \param seq weighting sequencce */ int setup_atomic_weight (int seq) { int h, i, j, k, l; field_neighbor * ngm; i_weight = allocint (tmp_fmol -> mol -> natoms); init_ngb = NULL; for (i=0; i natomes; i++) { if (tmp_proj -> atoms[0][i].coord[2] == tmp_fmol -> fragments[0]) { if (init_ngb) { ngm -> next = g_malloc0(sizeof*ngm); ngm -> next -> prev = ngm; ngm = ngm -> next; } else { init_ngb = g_malloc0(sizeof*init_ngb); ngm = init_ngb; } ngm -> num = tmp_proj -> atoms[0][i].numv; ngm -> vois = duplicate_int (ngm -> num, tmp_proj -> atoms[0][i].vois); j = get_atom_id_in_fragment_from_model_id (0, i); ngm -> id = j; for (k=0; k num; k++) { l = ngm -> vois[k]; ngm -> vois[k] = get_atom_id_in_fragment_from_model_id (0, l); i_weight[j] += tmp_proj -> atoms[0][l].numv; } } } int * weight = duplicate_int (tmp_fmol -> mol -> natoms, i_weight); for (h=1; h mol -> natoms; i++) { ngm = get_init_neighbor (i); if (ngm) { for (j=0; j num; j++) { k = ngm -> vois[j]; weight[i] += i_weight[k]; } } } for (i=0; i mol -> natoms; i++) { i_weight[i] = weight[i]; } } #ifdef DEBUG /*field_atom* fat; for (i=0; i mol -> natoms; i++) { fat = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[i][0].a); j = tmp_fmol -> atoms_id[i][0].b; k = fat -> list[j]; l = tmp_proj -> atoms[0][k].sp; g_debug ("I_WEIGHT:: %s i= %d, i_weight[i] = %d", tmp_proj -> chemistry -> label[l], i, i_weight[i]); }*/ #endif g_free (weight); int seed = -1; for (i=0; i mol -> natoms; i++) { seed = i; for (j=0; j mol -> natoms; j++) { if (j!=i) { if (i_weight[i] == i_weight[j]) { seed = -1; break; } } } if (seed > -1) break; } get_weight (seq); return seed; } /*! \fn void find_atom_id_in_field_molecule () \brief find field atom id in field molecule (fragment multiplicity > 1) */ void find_atom_id_in_field_molecule () { int i, j, k, l; gboolean sym = FALSE; gboolean done; int ** coordnum; int start = 1; int seed = -1; assigned = 0; coordnum = allocdint (tmp_proj -> nspec, tmp_coord -> totcoord[1]); tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { if (tmp_fat -> num == tmp_fmol -> multi) { i = tmp_fat -> list_id[0]; // Multiplicity = num of atoms ... // Unic atom, ie. as much as identical molecular fragments for (j=1; j multi; j++) { for (k=1; k num; k++) { l = tmp_fat -> list[k]; if (tmp_proj -> atoms[0][l].coord[2] == tmp_fmol -> fragments[j]) { tmp_fmol -> atoms_id[i][j].a = tmp_fmol -> atoms_id[i][0].a; tmp_fmol -> atoms_id[i][j].b = k; tmp_fat -> list_id[j] = i; break; } } } assigned ++; } tmp_fat = tmp_fat -> next; } for (i=0; i< tmp_fmol -> mol -> natoms; i++) { tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[i][0].a); done = TRUE; for (j=0; j num; j++) { if (tmp_fat -> list_id[j] < 0) { done = FALSE; break; } } if (! done) { j = tmp_fmol -> atoms_id[i][0].b; k = tmp_fat -> list[j]; l = coord_sphere_multiplicity (& tmp_proj -> atoms[0][k], i, FALSE); coordnum[tmp_proj -> atoms[0][k].sp][tmp_proj -> atoms[0][k].coord[1]] = l+1; if (l == tmp_fmol -> multi - 1 || a_multi == tmp_fmol -> multi - 1) { coord_sphere_multiplicity (& tmp_proj -> atoms[0][k], i, TRUE); assigned ++; } } } for (i=0; i nspec; i++) { for (j=0; j totcoord[1]; j++) { if (coordnum[i][j] > 1 && coordnum[i][j] % tmp_fmol -> multi != 0) g_debug ("This should not happen"); coordnum[i][j] /= tmp_fmol -> multi; } } for (k=6; k>0; k--) { sym = TRUE; for (i=0; i nspec; i++) { for (j=0; j totcoord[1]; j++) { if (coordnum[i][j] > 1 && coordnum[i][j] >= k && coordnum[i][j] % k != 0) sym = FALSE; } } if (sym) break; } g_free (coordnum); if (assigned < tmp_fmol -> mol -> natoms) { #ifdef DEBUG if ((sym || assigned == 0)) { g_debug ("Molecule seems to be symmetric, k= %d", k); g_debug ("Mol -> id: %d", tmp_fmol -> id); g_debug ("Mol -> multi= %d", tmp_fmol -> multi); g_debug ("Mol -> field atoms= %d", tmp_fmol -> atoms); g_debug ("Mol -> atomes= %d", tmp_fmol -> mol -> natoms); g_debug ("Assigned so far= %d", assigned); } #endif // k is a weight factor // The values of the total coord of each atom's neighbors // is sum k times over, this is a safety for systems with // a peculiar symetry, otherwise it could be very very long k = 3; j = assigned; gboolean done = FALSE; if (n_weight) g_free (n_weight); n_weight = NULL; n_weight = allocint (tmp_proj -> natomes); while (! done && (seed < 0 || (tmp_fmol -> mol -> natoms && k < tmp_fmol -> mol -> natoms))) { seed = setup_atomic_weight (k); if (seed < 0) k ++; done = TRUE; } #ifdef DEBUG g_debug ("Assigning using: seed= %d, w_factor= %d", seed, k); #endif for (i=start; i multi; i++) { #ifdef DEBUG g_debug (" -> fragment id: %d", i+1); #endif assigned = j; while (! id_atoms_in_fragment (i, seed) && k < tmp_fmol -> mol -> natoms) { #ifdef DEBUG g_debug ("**********************************"); g_debug ("*** NOT ABLE TO ASSIGN NUMBERS ***"); g_debug ("*** Mol -> Id= %3d ***", tmp_fmol -> id); g_debug ("*** Mol -> Multi= %3d ***", tmp_fmol -> multi); g_debug ("*** Fragment= %3d ***", i+1); g_debug ("*** k= %3d ***", k); g_debug ("*** assigned= %10d ***", assigned); g_debug ("**********************************"); #endif k ++; if (n_weight) g_free (n_weight); n_weight = NULL; n_weight = allocint (tmp_proj -> natomes); seed = setup_atomic_weight (k); } for (l=0; l natomes; l++) { if (tmp_proj -> atoms[0][l].coord[2] == tmp_fmol -> fragments[i]) { tmp_proj -> atoms[0][l].faid = get_field_atom_id_from_model_id (tmp_fmol, l); tmp_proj -> atoms[0][l].fid = get_atom_id_in_fragment_from_model_id (i, l); } } #ifdef DEBUG g_debug (" -> done !"); #endif } } if (i_weight) g_free (i_weight); i_weight = NULL; if (n_weight) g_free (n_weight); n_weight = NULL; if (init_ngb) g_free (init_ngb); init_ngb = NULL; #ifdef DEBUG g_debug ("Assigning completed !"); #endif } /*! \fn void clean_field_struct_list (field_struct * stru) \brief clean force field structural property(ies) \param stru */ void clean_field_struct_list (field_struct * stru) { while (stru) { if (stru -> next) { stru = stru -> next; g_free (stru -> prev); } else { g_free (stru); stru = NULL; } } } /*! \fn void init_all_field_struct (gboolean init) \brief initialize the force field structural properties for a field molecule \param init search for the atom(s) force field id number(s) */ void init_all_field_struct (gboolean init) { int i; for (i=0; i natomes; i++) { if (tmp_proj -> atoms[0][i].coord[2] == tmp_fmol -> fragments[0]) { tmp_proj -> atoms[0][i].faid = get_field_atom_id_from_model_id (tmp_fmol, i); tmp_proj -> atoms[0][i].fid = get_atom_id_in_fragment_from_model_id (0, i); } } if (tmp_fmol -> multi > 1 && init) find_atom_id_in_field_molecule (); for (i=0; i<8; i++) { tmp_fmol -> nstruct[i] = 0; if (tmp_fmol -> first_struct[i] && tmp_fmol -> nstruct[i]) { clean_field_struct_list (tmp_fmol -> first_struct[i]); } tmp_fmol -> first_struct[i] = NULL; } // Bonds start astr = g_malloc0(2*sizeof*astr); init_all_bonds (); g_free (astr); if (tmp_fmol -> nstruct[0] > 0) { tmp_fmol -> first_struct[1] = duplicate_field_struct_list (tmp_fmol -> first_struct[0], TRUE); tmp_fmol -> nstruct[1] = tmp_fmol -> nstruct[0]; } // Bonds end // Angle start astr = g_malloc0(3*sizeof*astr); init_all_angles (); g_free (astr); if (tmp_fmol -> nstruct[2] > 0) { tmp_fmol -> nstruct[3] = tmp_fmol -> nstruct[2]; tmp_fmol -> first_struct[3] = duplicate_field_struct_list (tmp_fmol -> first_struct[2], TRUE); } // Angle end // Dihedral start astr = g_malloc0(4*sizeof*astr); init_all_dihedrals (); // Torsional restraints if (tmp_fmol -> nstruct[4] > 0) { tmp_fmol -> nstruct[5] = tmp_fmol -> nstruct[4]; tmp_fmol -> first_struct[5] = duplicate_field_struct_list (tmp_fmol -> first_struct[4], TRUE); } // Improper and inversion angles for (i=6; i<8; i++) init_all_impropers_inversions (i); g_free (astr); } /*! \fn void init_field_molecule (int i) \brief initialiaze of field molecule data structurre \param i the id of the field molecule to initialize */ void init_field_molecule (int i) { int j, k; tmp_fmol -> id = i; tmp_fmol -> multi = tmp_mol -> multiplicity; tmp_fmol -> name = g_strdup_printf("MOL-%d", i+1); tmp_fmol -> fragments = NULL; tmp_fmol -> fragments = allocint (tmp_fmol -> multi); for (j=0; j multi; j++) { tmp_fmol -> fragments[j] = tmp_mol -> fragments[j]; } tmp_fmol -> mol = tmp_mol; // Atoms start id_atom = -1; tmp_fmol -> atoms_id = g_malloc0(tmp_mol -> natoms*sizeof*tmp_fmol -> atoms_id); for (j=0; j natoms; j++) { tmp_fmol -> atoms_id[j] = g_malloc0(tmp_fmol -> multi*sizeof*tmp_fmol -> atoms_id[j]); for (k=0; k multi; k++) { tmp_fmol -> atoms_id[j][k].a = -1; tmp_fmol -> atoms_id[j][k].b = -1; } } init_all_atoms (i); // Atoms end // setup_field_molecule_neighbors (i, tmp_proj); tmp_fmol -> shells = 0; // Field struct init_all_field_struct (TRUE); tmp_fmol -> shells = 0; tmp_fmol -> first_shell = NULL; tmp_fmol -> constraints = 0; tmp_fmol -> first_constraint = NULL; tmp_fmol -> pmfs = 0; tmp_fmol -> first_pmf = NULL; tmp_fmol -> rigids = 0; tmp_fmol -> first_rigid = NULL; tmp_fmol -> tethered = 0; tmp_fmol -> first_tethered = NULL; tmp_fmol -> show = FALSE; tmp_fmol -> show_id = FALSE; tmp_fmol -> next = NULL; tmp_fmol -> prev = NULL; } /*! \fn int init_vdw (gboolean init) \brief initialize the VdW section of a classical force field \param init */ int init_vdw (gboolean init) { int nvdw; int i, j, k, l; tmp_fmol = tmp_field -> first_molecule; i = 0; while (tmp_fmol) { i += tmp_fmol -> atoms; tmp_fmol = tmp_fmol -> next; } nvdw = i; gchar ** to_be_vdw = g_malloc0(nvdw*sizeof*to_be_vdw); int * vdw_mlist = allocint (nvdw); int ** vdw_aids = allocdint (nvdw,nvdw); int ** vdw_mids = allocdint (nvdw,nvdw); int vdw_na[2]; int * vdw_a[2], * vdw_ma[2]; gboolean add_vdw; i = 0; tmp_fmol = tmp_field -> first_molecule; while (tmp_fmol) { tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { add_vdw = TRUE; for (j=0; j name) == 0) { add_vdw = FALSE; vdw_mlist[j] ++; vdw_mids[j][vdw_mlist[j]] = tmp_fmol -> id; vdw_aids[j][vdw_mlist[j]] = tmp_fat -> id; break; } } if (add_vdw) { to_be_vdw[j] = g_strdup_printf ("%s", tmp_fat -> name); vdw_mids[j][0] = tmp_fmol -> id; vdw_aids[j][0] = tmp_fat -> id; i ++; } tmp_fat = tmp_fat -> next; } tmp_fmol = tmp_fmol -> next; } j = 0 ; tmp_fbody = NULL; for (k=0; k first_body[0] = init_field_nth_body (j, 0, vdw_na, vdw_ma, vdw_a); tmp_fbody = tmp_field -> first_body[0]; } else { comp_fbody = init_field_nth_body (j, 0, vdw_na, vdw_ma, vdw_a); tmp_fbody = comp_fbody; } } else { tmp_fbody -> next = init_field_nth_body (j, 0, vdw_na, vdw_ma, vdw_a); tmp_fbody -> next -> prev = tmp_fbody; tmp_fbody = tmp_fbody -> next; } j ++; } for (k=0; k next = init_field_nth_body (j, 0, vdw_na, vdw_ma, vdw_a); tmp_fbody -> next -> prev = tmp_fbody; tmp_fbody = tmp_fbody -> next; j ++; } } g_free (to_be_vdw); g_free (vdw_aids); g_free (vdw_mids); g_free (vdw_mlist); return j; } /*! \fn void init_dlpoly_field (classical_field * new_field) \brief initialize DL-POLY classical force field \param new_field the force field to initialize */ void init_dlpoly_field (classical_field * new_field) { // Preparing DLPOLY Control file new_field -> sys_opts = allocdouble (17); new_field -> io_opts = allocdouble (23); new_field -> ana_opts = allocdouble (17); new_field -> elec_opts = allocdouble (11); new_field -> vdw_opts = allocdouble (6); new_field -> met_opts = allocdouble (2); new_field -> equi_opts = allocdouble (17); new_field -> thermo_opts= allocdouble (10); new_field -> md_opts = allocdouble (20); new_field -> out_opts = allocdouble (31); /* new_field -> io_opts[] */ // Set job time control (yes/no) new_field -> io_opts[0] = 1.0; // Job time control (s): new_field -> io_opts[1] = 10000.0; // Set job closure time (yes/no) new_field -> io_opts[2] = 1.0; // Job closure time (s): new_field -> io_opts[3] = 100.0; // 4 (1/0) General I/O read interace // 5 General I/O method (0= MPI, 1= FORTRAN, 2= Traditional, 3= netCDF) // Reader count: new_field -> io_opts[6] = 12; // Batch size: new_field -> io_opts[7] = 2000000; // Buffer size: new_field -> io_opts[8] = 20000; // 9 (1/0) Error check on general read I/O // 10 (1/0) General I/O write interace // 11 General I/O method (0= MPI, 1= FORTRAN, 2= Traditional, 3= netCDF) // Real precision (0 = 32 bits, 1= 64 bits) new_field -> io_opts[12] = 1; // 13 Type (0= Sorted, 1= Unsorted) // Reader count: new_field -> io_opts[14] = 12; // Batch size: new_field -> io_opts[15] = 2000000; // Buffer size: new_field -> io_opts[16] = 20000; // 17 (1/0) Error check on general write I/O // 18 (1/0) Define random number generator seeds // n1 seed: new_field -> io_opts[19] = 1; // n2 seed: new_field -> io_opts[20] = 20; // n3 seed: new_field -> io_opts[21] = 300; // 22 (1/0) limit the number of processors in the z direction /* new_field -> sys_opts[] */ // Relative dieletric constant: new_field -> sys_opts[0] = 1.0; // 1 = allowed local variation of the system density (%) // 2 (1/0) Ingore the particle indices in CONFIG file // 3 (1/0) Ignore strict checks // 4 (1/0) Skip detailed topology reporting // 5 (1/0) Ignore center of mass removal // 6 (1/0) Set tolerance of the relaxed shell model // Tolerance for the relaxed shell model: new_field -> sys_opts[7] = 1.0; // 8 (1/0) Set the subscelling threshold density of particles per link cell // Subscelling threshold density of particles per link cell: new_field -> sys_opts[9] = 50.0; // 10 (1/0) Create an expanded version of the current model ... // ... on x: new_field -> sys_opts[11] = 1.0; // ... on y: new_field -> sys_opts[12] = 1.0; // .. on z: new_field -> sys_opts[13] = 1.0; // 14 (1/0) Restart a calculation // 15 (0= Continue current, 1= Start new without T reset, 2= Start new with T reset) /* new_field -> equi_opts[] */ new_field -> equi_opts[0] = 1.0; // Equilibrate for the first N steps, N= new_field -> equi_opts[1] = 20.0; // Scale temperature every N steps, N= new_field -> equi_opts[3] = 1.0; // Cap forces fmax= new_field -> equi_opts[5] = 1000.0; // Resample the momenta distribution during N steps N= new_field -> equi_opts[7] = 1.0; // 8 (1/0) = Minimize system configuration // 9 Minimize target (0=Force, 1=Energy, 2= Distance) // Minimization threshold: new_field -> equi_opts[10] = 50.0; // Minimization to be done every N steps, N= new_field -> equi_opts[11] = 1.0; // 12 (1/0) = Optimize system configuration from start // 13 Minimize target (0=Force, 1=Energy, 2= Distance) // Minimization threshold: new_field -> equi_opts[14] = 50.0; // 15 (1/0) = Perform zero temperature (10K) optimization // 16 (1/0) = Include equilibration data in statistics /* new_field -> vdw_opts[] */ // Vdw cutoff // 0 (1/0) Use VdW interactions new_field -> vdw_opts[0] = 1.0; // Vdw Cutoff radius new_field -> vdw_opts[1] = 12.0; // 2 (1/0) Enforce direct VdW calculation // 3 (1/0) Apply force shifting // 4 (1/0) Apply mixing rule // 5 Mixing rule (0= LB, 1= FH, 2= H, 3= HHG, 4= TT, 5= F) /* new_field -> elec_opts[] */ // 0 (1/0) Evaluate electrostatics new_field -> elec_opts[0] = 1.0; // Long range cutoff: new_field -> elec_opts[1] = 12.0; // 2 (1/0) Add padding to rcut // 3 Padding in angstrom // 4 (1/0) Use extended coulombic exclusion // 5 Electrostatic calculation method (0= Direct, ...) new_field -> elec_opts[5] = 2.0; // Ewald precision: new_field -> elec_opts[6] = 1e-20; // 7 to 9 method options // 10 Evaluation every N steps, N= tmp_field -> elec_opts[10] = 1.0; /* new_field -> met_opts[] */ // 0 (1/0) Enable direct calculation of metal interactions // 1 (1/0) Switch the default embeding fuctions // Ensemble (0= NVE, 1= NVT, 2= NPT, 4= NST) // new_field -> ensemble // Thermostat = f(ensemble): // new_field -> thermostat /* new_field -> thermo_opts[] */ // 0-5 ensemble + thermostat related options // 6 (1/0) Use pseudo thermal bath // 7 Thermostat type (0= L+D, 1= L, 2= G, 3= D) // Thickness: new_field -> thermo_opts[8] = 2.0; // 9 = Target temperature /* new_field -> md_opts[] */ // MD target temperature (K) new_field -> md_opts[0] = 300.0; // 1 Verlet integrator (0 = velocity, 1 = leapfrog) // Number of MD steps: new_field -> md_opts[2] = 100.0; // 3 Time step (0 = fixed, 1 = variable) // Time step delta(t)= (ps) new_field -> md_opts[4] = 0.001; // Target pressure (katms): new_field -> md_opts[5] = 0.001; // Variable time step, maximum time step: new_field -> md_opts[6] = 0.001; // Variable time step, maximum distance allowed: new_field -> md_opts[7] = 0.5; // Variable time step, minimun distance allowed: new_field -> md_opts[8] = 0.01; // Shake iterations limit, in cycles: new_field -> md_opts[9] = 250.0; // Shake tolerance: new_field -> md_opts[10] = 1e-6; // FIQA iterations limit, in cycles: new_field -> md_opts[11] = 100; // FIQA quaternions tolerance: new_field -> md_opts[12] = 1e-8; // 13 (1/0) Initiate impact on particles // Index if the particle to impact: new_field -> md_opts[14] = 1.0; // Time step of the impact: new_field -> md_opts[15] = 1.0; // Energy of the imapct (keV): new_field -> md_opts[16] = 1.0; // Direction of the impact (from center of mass) ... // ... on x: new_field -> md_opts[17] = 1.0; // ... on y: new_field -> md_opts[18] = 1.0; // ... on z: new_field -> md_opts[19] = 1.0; /* new_field -> out_opts[] */ // 0 (1/0) Print Defect file ... // 1 ... starting from step // ... every N steps, N= new_field -> out_opts[2] = 1.0; // ... with a site inteerstitial cutoff: new_field -> out_opts[3] = 0.75; // 4 (1/0) Print Displacement file .. // 5 ... starting from step // ... every N steps, N= new_field -> out_opts[6] = 1.0; // ... with a qualifying cutoff: new_field -> out_opts[7] = 0.15; // 8 (1/0) Print HISTORY file ... // 9 ... starting from step // ... every N steps, N= new_field -> out_opts[10] = 1.0; // 11 Data level (0, 1, 2) // 12 (1/0) Print Atom's MSD ... // 13 ... starting from step // ... every N steps, N= new_field -> out_opts[14] = 1.0; // 15 (1/0) Print system data ... // ... every N steps, N= new_field -> out_opts[16] = 1.0; // 17 (1/0) Accumulate statistics ... // ... every N steps, N= new_field -> out_opts[18] = 1.0; // 19 (1/0) Rolling average stack ... // ... to N steps, N= new_field -> out_opts[20] = 1.0; // 21 (1/0) RDF ... // ... every N steps, N= new_field -> out_opts[22] = 1.0; // ... with a bin size= new_field -> out_opts[23] = 0.05; // 24 (1/0) Overall VAF analysis ... // ... every N steps, N= new_field -> out_opts[25] = 1.0; // ... with a bin size= new_field -> out_opts[26] = 50.0; // 27 (1/0) Z density profile ... // ... every N steps, N= new_field -> out_opts[28] = 1.0; // 29 (1/0) ignoring time-av. VAFs // Dump restart information every N steps, N= new_field -> out_opts[30] = 1000.0; /* new_field -> ana_opts[] */ // 0 (1/0) Activate all intra-molecular PDF analysis ... // ... every N steps, N= new_field -> ana_opts[1] = 1.0; // ... number of delta r in: new_field -> ana_opts[2] = 100.0; // ... Cutoff: new_field -> ana_opts[3] = 2.0; // 4 (1/0) Activate bonds PDF analysis ... // ... every N steps, N= new_field -> ana_opts[5] = 1.0; // ... number of delta r in: new_field -> ana_opts[6] = 100.0; // ... Cutoff: new_field -> ana_opts[7] = 2.0; // 8 (1/0) Activate angles analysis ... // ... every N steps, N= new_field -> ana_opts[9] = 1.0; // ... number of delta angle in: new_field -> ana_opts[10] = 90.0; // 11 (1/0) Activate dihedrals analysis ... // ... every N steps, N= new_field -> ana_opts[12] = 1.0; // ... number of delta angle in: new_field -> ana_opts[13] = 90.0; // 14 (1/0) Activate inversions analysis ... // ... every N steps, N= new_field -> ana_opts[15] = 1.0; // ... number of delta angle in: new_field -> ana_opts[16] = 90.0; } /*! \fn void init_lammps_field (classical_field * new_field) \brief initialize a LAMMPS classical force field \param new_field the force field to initialize */ void init_lammps_field (classical_field * new_field) { // Preparing LAMMPS Control file new_field -> sys_opts = allocdouble (17); new_field -> io_opts = allocdouble (23); new_field -> ana_opts = allocdouble (17); new_field -> elec_opts = allocdouble (11); new_field -> vdw_opts = allocdouble (6); new_field -> met_opts = allocdouble (2); new_field -> equi_opts = allocdouble (17); new_field -> thermo_opts= allocdouble (10); new_field -> md_opts = allocdouble (20); new_field -> out_opts = allocdouble (31); /* new_field -> io_opts[] */ // Set job time control (yes/no) new_field -> io_opts[0] = 1.0; // Job time control (s): new_field -> io_opts[1] = 10000.0; // Set job closure time (yes/no) new_field -> io_opts[2] = 1.0; // Job closure time (s): new_field -> io_opts[3] = 100.0; // 4 (1/0) General I/O read interace // 5 General I/O method (0= MPI, 1= FORTRAN, 2= Traditional, 3= netCDF) // Reader count: new_field -> io_opts[6] = 12; // Batch size: new_field -> io_opts[7] = 2000000; // Buffer size: new_field -> io_opts[8] = 20000; // 9 (1/0) Error check on general read I/O // 10 (1/0) General I/O write interace // 11 General I/O method (0= MPI, 1= FORTRAN, 2= Traditional, 3= netCDF) // Real precision (0 = 32 bits, 1= 64 bits) new_field -> io_opts[12] = 1; // 13 Type (0= Sorted, 1= Unsorted) // Reader count: new_field -> io_opts[14] = 12; // Batch size: new_field -> io_opts[15] = 2000000; // Buffer size: new_field -> io_opts[16] = 20000; // 17 (1/0) Error check on general write I/O // 18 (1/0) Define random number generator seeds // n1 seed: new_field -> io_opts[19] = 1; // n2 seed: new_field -> io_opts[20] = 20; // n3 seed: new_field -> io_opts[21] = 300; // 22 (1/0) limit the number of processors in the z direction /* new_field -> sys_opts[] */ // Relative dieletric constant: new_field -> sys_opts[0] = 1.0; // 1 = allowed local variation of the system density (%) // 2 (1/0) Ingore the particle indices in CONFIG file // 3 (1/0) Ignore strict checks // 4 (1/0) Skip detailed topology reporting // 5 (1/0) Ignore center of mass removal // 6 (1/0) Set tolerance of the relaxed shell model // Tolerance for the relaxed shell model: new_field -> sys_opts[7] = 1.0; // 8 (1/0) Set the subscelling threshold density of particles per link cell // Subscelling threshold density of particles per link cell: new_field -> sys_opts[9] = 50.0; // 10 (1/0) Create an expanded version of the current model ... // ... on x: new_field -> sys_opts[11] = 1.0; // ... on y: new_field -> sys_opts[12] = 1.0; // .. on z: new_field -> sys_opts[13] = 1.0; // 14 (1/0) Restart a calculation // 15 (0= Continue current, 1= Start new without T reset, 2= Start new with T reset) /* new_field -> equi_opts[] */ new_field -> equi_opts[0] = 1.0; // Equilibrate for the first N steps, N= new_field -> equi_opts[1] = 20.0; // Scale temperature every N steps, N= new_field -> equi_opts[3] = 1.0; // Cap forces fmax= new_field -> equi_opts[5] = 1000.0; // Resample the momenta distribution during N steps N= new_field -> equi_opts[7] = 1.0; // 8 (1/0) = Minimize system configuration // 9 Minimize target (0=Force, 1=Energy, 2= Distance) // Minimization threshold: new_field -> equi_opts[10] = 50.0; // Minimization to be done every N steps, N= new_field -> equi_opts[11] = 1.0; // 12 (1/0) = Optimize system configuration from start // 13 Minimize target (0=Force, 1=Energy, 2= Distance) // Minimization threshold: new_field -> equi_opts[14] = 50.0; // 15 (1/0) = Perform zero temperature (10K) optimization // 16 (1/0) = Include equilibration data in statistics /* new_field -> vdw_opts[] */ // Vdw cutoff // 0 (1/0) Use VdW interactions new_field -> vdw_opts[0] = 1.0; // Vdw Cutoff radius new_field -> vdw_opts[1] = 12.0; // 2 (1/0) Enforce direct VdW calculation // 3 (1/0) Apply force shifting // 4 (1/0) Apply mixing rule // 5 Mixing rule (0= LB, 1= FH, 2= H, 3= HHG, 4= TT, 5= F) /* new_field -> elec_opts[] */ // 0 (1/0) Evaluate electrostatics new_field -> elec_opts[0] = 1.0; // Long range cutoff: new_field -> elec_opts[1] = 12.0; // 2 (1/0) Add padding to rcut // 3 Padding in angstrom // 4 (1/0) Use extended coulombic exclusion // 5 Electrostatic calculation method (0= Direct, ...) new_field -> elec_opts[5] = 2.0; // Ewald precision: new_field -> elec_opts[6] = 1e-20; // 7 to 9 method options // 10 Evaluation every N steps, N= tmp_field -> elec_opts[10] = 1.0; /* new_field -> met_opts[] */ // 0 (1/0) Enable direct calculation of metal interactions // 1 (1/0) Switch the default embeding fuctions // Ensemble (0= NVE, 1= NVT, 2= NPT, 4= NST) // new_field -> ensemble // Thermostat = f(ensemble): // new_field -> thermostat /* new_field -> thermo_opts[] */ // 0-5 ensemble + thermostat related options // 6 (1/0) Use pseudo thermal bath // 7 Thermostat type (0= L+D, 1= L, 2= G, 3= D) // Thickness: new_field -> thermo_opts[8] = 2.0; // 9 = Target temperature /* new_field -> md_opts[] */ // MD target temperature (K) new_field -> md_opts[0] = 300.0; // 1 Verlet integrator (0 = velocity, 1 = leapfrog) // Number of MD steps: new_field -> md_opts[2] = 100.0; // 3 Time step (0 = fixed, 1 = variable) // Time step delta(t)= (ps) new_field -> md_opts[4] = 0.001; // Target pressure (katms): new_field -> md_opts[5] = 0.001; // Variable time step, maximum time step: new_field -> md_opts[6] = 0.001; // Variable time step, maximum distance allowed: new_field -> md_opts[7] = 0.5; // Variable time step, minimun distance allowed: new_field -> md_opts[8] = 0.01; // Shake iterations limit, in cycles: new_field -> md_opts[9] = 250.0; // Shake tolerance: new_field -> md_opts[10] = 1e-6; // FIQA iterations limit, in cycles: new_field -> md_opts[11] = 100; // FIQA quaternions tolerance: new_field -> md_opts[12] = 1e-8; // 13 (1/0) Initiate impact on particles // Index if the particle to impact: new_field -> md_opts[14] = 1.0; // Time step of the impact: new_field -> md_opts[15] = 1.0; // Energy of the imapct (keV): new_field -> md_opts[16] = 1.0; // Direction of the impact (from center of mass) ... // ... on x: new_field -> md_opts[17] = 1.0; // ... on y: new_field -> md_opts[18] = 1.0; // ... on z: new_field -> md_opts[19] = 1.0; /* new_field -> out_opts[] */ // 0 (1/0) Print Defect file ... // 1 ... starting from step // ... every N steps, N= new_field -> out_opts[2] = 1.0; // ... with a site inteerstitial cutoff: new_field -> out_opts[3] = 0.75; // 4 (1/0) Print Displacement file .. // 5 ... starting from step // ... every N steps, N= new_field -> out_opts[6] = 1.0; // ... with a qualifying cutoff: new_field -> out_opts[7] = 0.15; // 8 (1/0) Print HISTORY file ... // 9 ... starting from step // ... every N steps, N= new_field -> out_opts[10] = 1.0; // 11 Data level (0, 1, 2) // 12 (1/0) Print Atom's MSD ... // 13 ... starting from step // ... every N steps, N= new_field -> out_opts[14] = 1.0; // 15 (1/0) Print system data ... // ... every N steps, N= new_field -> out_opts[16] = 1.0; // 17 (1/0) Accumulate statistics ... // ... every N steps, N= new_field -> out_opts[18] = 1.0; // 19 (1/0) Rolling average stack ... // ... to N steps, N= new_field -> out_opts[20] = 1.0; // 21 (1/0) RDF ... // ... every N steps, N= new_field -> out_opts[22] = 1.0; // ... with a bin size= new_field -> out_opts[23] = 0.05; // 24 (1/0) Overall VAF analysis ... // ... every N steps, N= new_field -> out_opts[25] = 1.0; // ... with a bin size= new_field -> out_opts[26] = 50.0; // 27 (1/0) Z density profile ... // ... every N steps, N= new_field -> out_opts[28] = 1.0; // 29 (1/0) ignoring time-av. VAFs // Dump restart information every N steps, N= new_field -> out_opts[30] = 1000.0; /* new_field -> ana_opts[] */ // 0 (1/0) Activate all intra-molecular PDF analysis ... // ... every N steps, N= new_field -> ana_opts[1] = 1.0; // ... number of delta r in: new_field -> ana_opts[2] = 100.0; // ... Cutoff: new_field -> ana_opts[3] = 2.0; // 4 (1/0) Activate bonds PDF analysis ... // ... every N steps, N= new_field -> ana_opts[5] = 1.0; // ... number of delta r in: new_field -> ana_opts[6] = 100.0; // ... Cutoff: new_field -> ana_opts[7] = 2.0; // 8 (1/0) Activate angles analysis ... // ... every N steps, N= new_field -> ana_opts[9] = 1.0; // ... number of delta angle in: new_field -> ana_opts[10] = 90.0; // 11 (1/0) Activate dihedrals analysis ... // ... every N steps, N= new_field -> ana_opts[12] = 1.0; // ... number of delta angle in: new_field -> ana_opts[13] = 90.0; // 14 (1/0) Activate inversions analysis ... // ... every N steps, N= new_field -> ana_opts[15] = 1.0; // ... number of delta angle in: new_field -> ana_opts[16] = 90.0; } /*! \fn classical_field * create_force_field_data_structure (int ai) \brief initialize classical force field \param ai how to initialize the force field (0 = atomic species, 1 = total coordination, 2 = partial coordination) */ classical_field * create_force_field_data_structure (int ai) { int i; classical_field * new_field; new_field = g_malloc0(sizeof*new_field); tmp_field = new_field; new_field -> energy_unit = 1; new_field -> atom_init = ai; switch (activef) { case 0: init_dlpoly_field (new_field); break; case 1: init_lammps_field (new_field); break; } new_field -> molecules = tmp_proj -> modelfc -> mol_by_step[0]; new_field -> first_molecule = g_malloc0(sizeof*new_field -> first_molecule); tmp_fmol = new_field -> first_molecule; #ifdef DEBUG g_debug ("Total num of molecules: %d", tmp_proj -> modelfc -> mol_by_step[0]); #endif // DEBUG for (i=0; i < tmp_proj -> modelfc -> mol_by_step[0]; i++) { tmp_mol = & tmp_proj -> modelfc -> mols[0][i]; #ifdef DEBUG g_debug ("Init FORCE FIELD for: "); g_debug (" tmp_mol -> id= %d", tmp_mol -> id); g_debug (" tmp_mol -> multi= %d", tmp_mol -> multiplicity); g_debug (" tmp_mol -> natoms= %d", tmp_mol -> natoms); #endif // DEBUG init_field_molecule (i); if (i < tmp_proj -> modelfc -> mol_by_step[0]-1) { tmp_fmol -> next = g_malloc0(sizeof*tmp_fmol -> next); tmp_fmol = tmp_fmol -> next; } } for (i=0; i<5; i++) { tmp_field -> nbody[i] = 0; tmp_field -> first_body[i] = NULL; } // Tersoff cross terms tmp_field -> cross = NULL; // vdW start tmp_field -> nbody[0] = init_vdw (TRUE); // vdW end // External field(s) start new_field -> extern_fields = 0; new_field -> first_external = NULL; // External field(s) end // Non-bonded end return new_field; } atomes_1.3.1/src/calc/dl_poly/dlp_comp.c0000664000175000017500000001447115212624223017610 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_comp.c * @short Functions to compare and adjust field body parameters * @author Sébastien Le Roux */ /* * This file: 'dlp_comp.c' * * Contains: * - The functions to compare and adjust field body parameters * * List of functions: void compare_body (gchar * fatom, field_nth_body * new_body, int n_body, field_nth_body * old_body, int o_body); void compare_non_bonded (gchar * fatom); */ #include "global.h" #include "interface.h" #include "glwindow.h" #include "glview.h" #include "dlp_field.h" field_nth_body * comp_fbody; extern void duplicate_nbody_params (field_nth_body * new_fbody, field_nth_body * old_fbody); /*! \fn void compare_body (gchar * fatom, field_nth_body * new_body, int n_body, field_nth_body * old_body, int o_body) \brief compare, and if require ajdust, two lists of field body properties \param fatom the name of the field atom to search for \param new_body 1st list of field body property(ies) \param n_body the number of field body in this 1st list \param old_body 2nd list of field body property(ies) \param o_body the number of field body in this 2nd list */ void compare_body (gchar * fatom, field_nth_body * new_body, int n_body, field_nth_body * old_body, int o_body) { int i, j, k, l, m, n, o, p; field_nth_body * tmp_new = new_body; field_nth_body * tmp_old; field_nth_body * new_guy; field_nth_body * old_one; field_nth_body * new_one; gboolean doit; for (i=0; i ma[0][0], tmp_new -> a[0][0]) -> name) == 0 && g_strcmp0 (fatom, get_active_atom (tmp_new -> ma[1][0], tmp_new -> a[1][0]) -> name) == 0) new_guy = tmp_new; for (k=0; k<2; k++) { for (l=0; l<2; l++) { if (g_strcmp0 (get_active_atom (tmp_new -> ma[k][0], tmp_new -> a[k][0]) -> name, get_active_atom (tmp_old -> ma[l][0], tmp_old -> a[l][0]) -> name) == 0) doit = TRUE; if (doit) break; } if (g_strcmp0 (get_active_atom (tmp_new -> ma[k][0], tmp_new -> a[k][0]) -> name, get_active_atom (tmp_old -> ma[k][0], tmp_old -> a[k][0]) -> name) == 0) doit = TRUE; if (doit) break; } // Same atoms copy the body params if (doit) duplicate_nbody_params (tmp_new, tmp_old); if (tmp_old -> next != NULL) tmp_old = tmp_old -> next; } if (tmp_new -> next != NULL) tmp_new = tmp_new -> next; } for (i=1; i<5; i++) { tmp_fbody = tmp_field -> first_body[i]; k = body_at (i); new_one = get_active_body (tmp_field -> nbody[i], i); m = 0; for (j=0; j nbody[i]; j++) { for (l=0; l na[l] > 0) { doit = FALSE; for (n=0; n na[l]; n++) { if (g_strcmp0 (get_active_atom (tmp_fbody -> ma[l][n], tmp_fbody -> a[l][n]) -> name, fatom) == 0) { doit = TRUE; o = n; break; } } if (doit) { if (tmp_fbody -> na[l] > 1) { // Add new nth_body new_one -> next = duplicate_field_nth_body (tmp_fbody); old_one = duplicate_field_nth_body (tmp_fbody); new_one -> next -> prev = new_one; new_one = new_one -> next; new_one -> id ++; new_one -> na[l] = new_guy -> na[0]; new_one -> a[l] = duplicate_int (new_guy -> na[0], new_guy -> a[0]); new_one -> ma[l] = duplicate_int (new_guy -> na[0], new_guy -> ma[0]); p = 0; old_one -> na[l] --; old_one -> a[l] = NULL; old_one -> a[l] = g_malloc0(old_one -> na[l]*sizeof*old_one -> a[l]); old_one -> ma[l] = NULL; old_one -> ma[l] = g_malloc0(old_one -> na[l]*sizeof*old_one -> ma[l]); for (n=0; n na[l]; n++) { if (n != o) { old_one -> a[l][p] = tmp_fbody -> a[l][n]; old_one -> ma[l][p] = tmp_fbody -> ma[l][n]; } } tmp_fbody -> a[l] = NULL; tmp_fbody -> ma[l] = NULL; tmp_fbody -> na[l] --; tmp_fbody -> a[l] = duplicate_int (tmp_fbody -> na[l], old_one -> a[l]); tmp_fbody -> ma[l] = duplicate_int (tmp_fbody -> na[l], old_one -> ma[l]); m ++; } else if (tmp_fbody -> na[l] == 1) { tmp_fbody -> a[l][0] = new_guy -> a[0][0]; tmp_fbody -> ma[l][0] = new_guy -> ma[0][0]; } } } } if (tmp_fbody -> next != NULL) tmp_fbody = tmp_fbody -> next; } tmp_field -> nbody[i] += m; } tmp_field -> first_body[0] = NULL; tmp_field -> first_body[0] = duplicate_field_nth_body (new_body); tmp_new = tmp_field -> first_body[0]; tmp_old = new_body; for (i=1; i next = duplicate_field_nth_body (tmp_old -> next); tmp_new -> next -> prev = tmp_new; tmp_new = tmp_new -> next; tmp_old = tmp_old -> next; } tmp_field -> nbody[0] = n_body; } /*! \fn void compare_non_bonded (gchar * fatom) \brief compare non bond interaction parameters \param fatom the name of the target field atom */ void compare_non_bonded (gchar * fatom) { int nbody = init_vdw (FALSE); // comp_fbody is prepared in init_vdw compare_body (fatom, comp_fbody, nbody, tmp_field -> first_body[0], tmp_field -> nbody[0]); } atomes_1.3.1/src/calc/dl_poly/dlp_edit.c0000664000175000017500000034633415212624223017605 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_edit.c * @short Functions to edit DL-POLY force field parameters * @author Sébastien Le Roux */ /* * This file: 'dlp_edit.c' * * Contains: * - The functions to edit DL-POLY force field parameters * * List of functions: int get_num_vdw_max (); gboolean are_identical_prop (int ti, int ai, field_prop * pro_a, field_prop * pro_b); gboolean tersoff_question (); gboolean body_identicals (field_nth_body * body, int nbd, int * na, int ** ma, int ** ba); gchar * get_this_vdw_string (); gchar * field_str (int a); gchar * body_str (int a); gchar * get_body_element_name (field_nth_body * body, int aid, int nbd); void adjust_field_prop (int fil, int sti, field_prop * tmp, int * ids, int key); void select_atom_set_color (GtkCellRenderer * renderer, int i); void select_atom_set_cmv (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void update_field_dist (float v); void adjust_vdw_interactions (gboolean add_shell); void edit_parameters (int f, int id); void update_tersoffs (int id, int key); void check_tersoffs (int id, int key); G_MODULE_EXPORT void update_atom_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_field_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_cross_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void changed_cross_combo (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void changed_field_key_combo (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void visualize_it (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void visualize_it (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void select_it (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void select_it (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void field_molecule_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void edit_unit_weight (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data); G_MODULE_EXPORT void select_atom_id_from_fied_molecule (GtkButton * but, gpointer data); G_MODULE_EXPORT void selection_button (GtkButton * but, gpointer data); G_MODULE_EXPORT void changed_atom_combo (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void shell_in_vdw (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void shell_in_vdw (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void run_edit_parameters (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void edit_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void add_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void remove_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * combo_cross (field_nth_body * body); GtkWidget * parameters_box (int obj, int key, gchar ** words, float * data); GtkWidget * param_prop_param_box (int pid); */ #include "global.h" #include "interface.h" #include "glwindow.h" #include "glview.h" #include "dlp_field.h" #include "calc.h" extern int * atoms_id; extern int ** atoms_id_list; extern char *** ff_atoms; extern gchar * felemt[MAXDATA+1]; extern gchar * elemts[MAXDATA]; extern gchar * mo_title[8]; extern int fetypes[2][16]; extern void clean_up_molecules_info (gboolean usel); extern void select_object (int id, int jd, int kd); extern G_MODULE_EXPORT void run_add_atom_dialog (GtkDialog * add_dialog, gint response_id, gpointer data); extern void field_selection (int i, int viz, int lab, int aid); extern void field_unselect_all (); extern void compare_non_bonded (gchar * fatom); extern void visualize_single_struct (int id, int jd, int kd, int * ids); extern void visualize_body (int viz, int bd, field_nth_body * body); extern void init_default_shaders (glwin * view); extern GtkWidget * create_field_prop_combo (int f, int is_moy); extern void check_atom_for_updates (); extern void check_to_visualize_properties_for_this_field_mol (int pid, int mol); extern GtkWidget * ff_p_combo[2]; GtkWidget * field_key_combo; GtkWidget * p_box; GtkWidget * cross_vbox, * cross_hbox; GtkWidget * param_box; GtkWidget * img_but[4]; GtkWidget * shell_but; GtkWidget * shell_hbox[3]; GtkWidget * shell_cbox[2]; GtkWidget * body_lab; GtkWidget * afftype; int is_moy; int * edit_atids; /*! \fn gboolean are_identical_prop (int ti, int ai, field_prop * pro_a, field_prop * pro_b) \brief are the 2 field property identicals ? \param ti the type of field property \param ai the number of field atoms for this field property \param pro_a 1st field property \param pro_b 2nd field property */ gboolean are_identical_prop (int ti, int ai, field_prop * pro_a, field_prop * pro_b) { if (pro_a -> key != pro_b -> key) return FALSE; if (pro_a -> use != pro_b -> use) return FALSE; if (pro_a -> show != pro_b -> show) return FALSE; int i; /*for (i=0; i aid[i] != pro_b -> aid[i]) return FALSE; }*/ for (i=0; i key]; i++) { if (pro_a -> val[i] != pro_b -> val[i]) return FALSE; } return TRUE; } /*! \fn void adjust_field_prop (int fil, int sti, field_prop * tmp, int * ids, int key) \brief adjust field property \param fil the type of field property \param sti the number of field atoms for this type of field property \param tmp the pointer of the field property list \param ids the list of field atoms \param key the key value to adjust */ void adjust_field_prop (int fil, int sti, field_prop * tmp, int * ids, int key) { int i, j, k, l; gboolean add; add = FALSE; field_prop * pro, * ptmp; if (ids[0] < 0) { // Default prop if (tmp == NULL) { // New val for default field prop tmp_fstr -> def = init_field_prop (fil, key, tmp_fstr -> def -> show, tmp_fstr -> def -> use); } else { tmp_fstr -> def = duplicate_field_prop (tmp, fil); } } else { // Not default, between specified atoms if (tmp != NULL) { pro = get_active_prop_using_atoms (tmp_fstr -> other, sti, ids); if (pro == NULL) { // No 'other' yet, but is it identical to default ? if (! are_identical_prop (fil+1, sti, tmp, tmp_fstr -> def)) { add = TRUE; } } else if (! are_identical_prop (fil+1, sti, tmp, pro)) { add = TRUE; } } else { if (tmp_fstr -> other == NULL) { add = TRUE; j = key; k = tmp_fstr -> def -> show; l = tmp_fstr -> def -> use; } else { pro = get_active_prop_using_atoms (tmp_fstr -> other, sti, ids); if (pro == NULL) { if (key != tmp_fstr -> def -> key) { add = TRUE; j = key; k = tmp_fstr -> def -> show; l = tmp_fstr -> def -> use; } } else if (key != pro -> key) { add = TRUE; j = key; } } } if (add) { if (tmp_fstr -> other == NULL) { if (tmp != NULL) { tmp_fstr -> other = duplicate_field_prop (tmp, fil); } else { tmp_fstr -> other = init_field_prop (fil, j, k, l); for (i=0; i other -> aid[i] = ids[i]; } } else if (pro == NULL) { pro = tmp_fstr -> other; while (pro -> next != NULL) pro = pro -> next; if (tmp != NULL) { pro -> next = duplicate_field_prop (tmp, fil); } else { pro -> next = init_field_prop (fil, j, k, l); pro = pro -> next; for (i=0; i aid[i] = ids[i]; } } else { if (tmp != NULL) { // Modifying an existing 'other' prop pro -> key = tmp -> key; pro -> val = NULL; if (fvalues[activef][fil+1][tmp -> key] > 0) { pro -> val = duplicate_float (fvalues[activef][fil+1][tmp -> key], tmp -> val); } pro -> show = tmp -> show; pro -> use = tmp -> use; } else { pro -> key = j; pro -> val = NULL; pro -> val = allocfloat (fvalues[activef][fil+1][j]); } } } } if (tmp_fstr -> other != NULL) { ptmp = tmp_fstr -> other; while (ptmp) { if (are_identical_prop (fil+1, sti, ptmp, tmp_fstr -> def)) { if (ptmp -> next != NULL) { if (ptmp -> prev != NULL) { ptmp -> prev -> next = ptmp -> next; ptmp -> next -> prev = ptmp -> prev; } else { ptmp -> next -> prev = NULL; } } else if (ptmp -> prev != NULL) { ptmp -> prev -> next = NULL; } else { g_free (tmp_fstr -> other); tmp_fstr -> other = NULL; ptmp = NULL; } } if (ptmp) ptmp = ptmp -> next; } } if (tmp_fstr -> other != NULL) { ptmp = tmp_fstr -> other; ptmp -> pid = 0; while (ptmp -> next != NULL) { ptmp -> next -> pid = ptmp -> pid + 1; ptmp = ptmp -> next; } } } /*! \fn G_MODULE_EXPORT void update_atom_parameter (GtkEntry * res, gpointer data) \brief update field atom parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_atom_parameter (GtkEntry * res, gpointer data) { int i = GPOINTER_TO_INT(data); double v; const gchar * m = entry_get_text (res); if (i > -1) { v = string_to_double ((gpointer)m); update_entry_double (res, v); } switch (i) { case -1: tmp_fat -> name = g_strdup_printf ("%s", m); break; case 0: tmp_fat -> mass = v; break; case 1: tmp_fat -> charge = v; break; case 2: tmp_fshell -> m = v; break; case 3: tmp_fshell -> z = v; break; case 4: tmp_fshell -> k2 = v; break; case 5: tmp_fshell -> k4 = v; break; case 6: tmp_fcons -> length = v; break; case 7: tmp_fpmf -> length = v; break; } } int object_is; /*! \fn G_MODULE_EXPORT void update_field_parameter (GtkEntry * res, gpointer data) \brief update field parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_field_parameter (GtkEntry * res, gpointer data) { int i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); update_entry_double (res, v); if (object_is > 0 && object_is < 9) { tmp_fprop -> val[i] = v; } else { switch (object_is) { case 0: tmp_ftet -> val[i] = v; break; case 14: tmp_fext -> val[i] = v; break; default: tmp_fbody -> val[i] = v; break; } } } GtkWidget * centry[3]; GtkWidget * cross_box; double *** cross = NULL; int num_body_d; gboolean change_tersoff; /*! \fn G_MODULE_EXPORT void update_cross_parameter (GtkEntry * res, gpointer data) \brief update field cross parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cross_parameter (GtkEntry * res, gpointer data) { int j, k; k = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); update_entry_double (res, v); j = combo_get_active (cross_box); cross[tmp_fbody -> id][j][k] = cross[j][tmp_fbody -> id][k] = v; } /*! \fn G_MODULE_EXPORT void changed_cross_combo (GtkComboBox * box, gpointer data) \brief change field cross combo \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_cross_combo (GtkComboBox * box, gpointer data) { int i, j; i = combo_get_active ((GtkWidget *)box); for (j=0; j<3; j++) { // g_debug ("Updating entry:: id= %d, i= %d, j= %d", tmp_fbody -> id, i, j); update_entry_double (GTK_ENTRY(centry[j]), cross[tmp_fbody -> id][i][j]); } } /*! \fn GtkWidget * combo_cross (field_nth_body * body) \brief create field cross configuration widgets \param body the pointer on the first non bonded field structure */ GtkWidget * combo_cross (field_nth_body * body) { GtkWidget * combo; combo = create_combo (); g_signal_connect (G_OBJECT(combo), "changed", G_CALLBACK(changed_cross_combo), NULL); if (tmp_field -> first_body[2] && tmp_fbody -> na[0] > -1) { field_nth_body * obody; obody = tmp_field -> first_body[2]; while (obody) { combo_text_append (combo, get_active_atom(obody -> ma[0][0], obody -> a[0][0]) -> name); obody = obody -> next; } } return combo; } /*! \fn gchar * get_this_vdw_string () \brief get VdW formalism description string */ gchar * get_this_vdw_string () { gchar * str = NULL; if (tmp_field -> type <= CHARMMSI || tmp_field -> type > COMPASS) { str = g_strdup_printf ("U(rij) = Ɛij x [ (r0ij/rij)12 - 2.0 (r0ij/rij)6 ]\n" "\t\twith Ɛij = sqrt (Ɛi x Ɛj)\n" "\t\tand r0ij = r0i/2.0 + r0j/2.0"); } else if (tmp_field -> type == CVFF || tmp_field -> type == CVFF_AUG) { str = g_strdup_printf ("U(rij) = (Aij/rij)12 - 2.0 (Bij/rij)6\n" "\t\twith Aij = sqrt (Ai x Aj)\n" "\t\tand Bij = sqrt (Bi x Bj)"); } else if (tmp_field -> type >= CFF91 && tmp_field -> type <= COMPASS) { str = g_strdup_printf ("U(rij) = Ɛij x [ 2.0 (r0ij/rij)9 - 3.0 (r0ij/rij)6 ]\n" "\t\twith Ɛij = 2.0 sqrt (Ɛi x Ɛj) x (r0i3 r0j3) / (r0i6 + r0j6)\n" "\t\tand r0ij = [(r0i6 + r0j6)/2.0] 1/6"); } return str; } /*! \fn GtkWidget * parameters_box (int obj, int key, gchar ** words, float * data) \brief pepare field property edition parameters \param obj the type of field property \param key the key type for this field property, if any \param words the parameter(s) labels \param data the actual value(s) for the parameter(s) */ GtkWidget * parameters_box (int obj, int key, gchar ** words, float * data) { int i; gchar * str = NULL; GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * lab; GtkWidget * entry; object_is = obj; if (obj > -1 && key > -1) { if (fvalues[activef][obj][key] > 0) { for (i=0; i< fvalues[activef][obj][key]; i++) { if (obj == 11 && key == 0 && i == 0) { hbox = create_hbox (0); lab = markup_label (_("Single terms:"), 100, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } hbox = create_hbox (0); if (activef) { if (((obj == 1 || obj == 2) && key == FBONDS-1 && (i == 0 || i == 1)) || ((obj == 3 || obj == 4) && key == FANGLES-1 && (i == 0 || i == 1)) || ((obj == 5 || obj == 6) && (key == FDIHEDRAL-2 || key == FDIHEDRAL-1) && (i == 0 || i == 1)) || ((obj == 5 || obj == 6) && (key == 1 || key == 2) && i ==3)) { str = g_strdup_printf (" %s", _(words[i])); } else { str = g_strdup_printf (" %s", words[i]); } } else { str = g_strdup_printf (" %s", words[i]); } lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 50); entry = create_entry (G_CALLBACK(update_field_parameter), 100, 15, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), data[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } if (obj == 11 && key == 0) { cross_vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cross_vbox, FALSE, FALSE, 0); cross_hbox = create_hbox (0); lab = markup_label (_("Cross terms with atom:"), 160, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cross_hbox, lab, FALSE, FALSE, 30); cross_box = combo_cross (tmp_fbody); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cross_hbox, cross_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cross_vbox, cross_hbox, FALSE, FALSE, 10); for (i=11; i< 14; i++) { hbox = create_hbox (0); str = g_strdup_printf (" %s", words[i]); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 50); centry[i-11] = create_entry (G_CALLBACK(update_cross_parameter), 100, 15, FALSE, GINT_TO_POINTER(i-11)); update_entry_double (GTK_ENTRY(centry[i-11]), cross[tmp_fbody -> id][0][i-11]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, centry[i-11], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cross_vbox, hbox, FALSE, FALSE, 0); } if (tmp_fbody -> na[0] < 0) { widget_set_sensitive (cross_vbox, FALSE); } else { combo_set_active (cross_box, 0); } } } else { hbox = create_hbox (0); str = g_strdup_printf (_("Tabulated")); lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } if (obj == 9 && tmp_field -> type >= CFF91 && tmp_field -> type <= COMPASS) { str = g_strdup_printf (_("In %s, non-bonded interactions are evaluated using: \n%s\n" "Therefore the parameters provided by the force field are incompatible with the DL-POLY options."), field_acro[tmp_field -> type], get_this_vdw_string()); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, -1, -1, 0.5, 0.5), FALSE, FALSE, 50); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); g_free (str); } else if (obj == 9 && key == 0 && (tmp_field -> type <= CVFF_AUG || tmp_field -> type > COMPASS)) { if (tmp_field -> type < CVFF) { str = g_strdup_printf (_("In %s, 12-6 non-bonded interactions are evaluated using: \n%s\nA and B" " are calculated using Ɛi/j and r0i/j provided by the force field parameters."), field_acro[tmp_field -> type], get_this_vdw_string()); if (tmp_field -> type > AMBER99) { str = g_strdup_printf (_("%s\nScaled 1-4 exclusion parameters, provided by the %s force field, are ignored."), str, field_acro[tmp_field -> type]); } } else { str = g_strdup_printf (_("In %s, 12-6 non-bonded interactions are evaluated using: \n%s\nA and B" " are calculated using Ai/j and Bi/j provided by the force field parameters."), field_acro[tmp_field -> type], get_this_vdw_string()); } hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, -1, -1, 0.5, 0.5), FALSE, FALSE, 50); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); g_free (str); } else if ((obj == 3 || obj == 4) && tmp_field -> type > AMBER99 && tmp_field -> type < CVFF) { hbox = create_hbox (0); str = g_strdup_printf (_("Urey-Bradley terms provided by the %s force field are ignored.\n"), field_acro[tmp_field -> type]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, -1, -1, 0.5, 0.5), FALSE, FALSE, 50); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); g_free (str); } } return vbox; } /*! \fn gchar * field_str (int a) \brief get field external name \param a the field external id */ gchar * field_str (int a) { gchar * str = g_strdup_printf (_("External field")); if (a > -1) { str = g_strdup_printf ("%s: %s", str, (activef) ? fnames[activef][15][a] : _(fnames[activef][15][a])); } return str; } /*! \fn gboolean tersoff_question () \brief change Tersoff potential ? */ gboolean tersoff_question () { gchar * text = _("Are you sure to change the type of Tersoff potential ?\n" "Tersoff (ter) and KIHS (kihs) forms cannot be mixed\n" "Therefore this choice will affect all Tersoff potential(s).\n" "Any previous parameters will be erased !"); if (num_body_d > 1) { return ask_yes_no (_("Change Tersoff potential ?!"), text, GTK_MESSAGE_QUESTION, field_assistant); } else { change_tersoff = TRUE; return TRUE; } } /*! \fn GtkWidget * param_prop_param_box (int pid) \brief prepare field parameter edition widgets \param pid the type of field parameter */ GtkWidget * param_prop_param_box (int pid) { switch (pid) { case MOLIMIT-9: return parameters_box (0, tmp_ftet -> key, fvars_teth[activef][tmp_ftet -> key], tmp_ftet -> val); break; case MOLIMIT-1: return parameters_box (pid-6, tmp_fprop -> key, fvars_inversion[activef][tmp_fprop -> key], tmp_fprop -> val); break; case MOLIMIT: return parameters_box (pid-6, tmp_fbody -> key, fvars_vdw[activef][tmp_fbody -> key], tmp_fbody -> val); break; case MOLIMIT+1: return parameters_box (pid-6, tmp_fbody -> key, fvars_met[activef][tmp_fbody -> key], tmp_fbody -> val); break; case MOLIMIT+2: return parameters_box (pid-6, tmp_fbody -> key, fvars_ters[activef][tmp_fbody -> key], tmp_fbody -> val); break; case MOLIMIT+3: return parameters_box (pid-6, tmp_fbody -> key, fvars_tbd[activef][tmp_fbody -> key], tmp_fbody -> val); break; case MOLIMIT+4: return parameters_box (pid-6, tmp_fbody -> key, fvars_fbd[activef][tmp_fbody -> key], tmp_fbody -> val); break; case SEXTERN: return parameters_box (14, tmp_fext -> key, fvars_fext[activef][tmp_fext -> key], tmp_fext -> val); break; default: switch ((pid-7)/2) { case 0: return parameters_box (pid-6, tmp_fprop -> key, fvars_bond[activef][tmp_fprop -> key], tmp_fprop -> val); break; case 1: return parameters_box (pid-6, tmp_fprop -> key, fvars_angle[activef][tmp_fprop -> key], tmp_fprop -> val); break; default: return parameters_box (pid-6, tmp_fprop -> key, fvars_dihedral[activef][tmp_fprop -> key], tmp_fprop -> val); break; } break; } } /*! \fn G_MODULE_EXPORT void changed_field_key_combo (GtkComboBox * box, gpointer data) \brief change field key \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_field_key_combo (GtkComboBox * box, gpointer data) { int i, j; gboolean changeit = FALSE; i = GPOINTER_TO_INT(data); j = combo_get_active ((GtkWidget *)box); if (i > 6 && i < MOLIMIT) { if (j != tmp_fprop -> key) { tmp_fprop -> key = j; tmp_fprop -> val = NULL; tmp_fprop -> val = allocfloat (fvalues[activef][i-6][j]); changeit = TRUE; } } else { switch (i) { case 6: if (j != tmp_ftet -> key) { tmp_ftet -> key = j; tmp_ftet -> val = NULL; tmp_ftet -> val = allocfloat (fvalues[activef][0][j]); changeit = TRUE; } break; case SEXTERN: if (j != tmp_fext -> key) { tmp_fext -> key = j; gtk_label_set_text (GTK_LABEL(body_lab), field_str(tmp_fext -> key)); gtk_label_set_use_markup (GTK_LABEL(body_lab), TRUE); tmp_fext -> val = NULL; tmp_fext -> val = allocfloat (fvalues[activef][SEXTERN-6][j]); changeit = TRUE; } break; default: if (j != tmp_fbody -> key) { changeit = TRUE; if (i == MOLIMIT+2) changeit = tersoff_question (); if (changeit) { tmp_fbody -> key = j; tmp_fbody -> val = NULL; tmp_fbody -> val = allocfloat (fvalues[activef][i-6][j]); if (i == MOLIMIT+2 && j == 0) { cross = alloctdouble (num_body_d, num_body_d, 3); } else if (j == 1 && cross != NULL) { g_free (cross); cross = NULL; } } else { combo_set_active ((GtkWidget *)box, tmp_fbody -> key); } } break; } } if (changeit) { if (ff_p_combo[0]) combo_set_active (ff_p_combo[0], 0); if (ff_p_combo[1]) combo_set_active (ff_p_combo[1], 0); p_box = destroy_this_widget (p_box); p_box = param_prop_param_box (i); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, param_box, p_box, FALSE, FALSE, 0); show_the_widgets (param_box); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void visualize_it (GtkCheckButton * but, gpointer data) \brief visualize object toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void visualize_it (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void visualize_it (GtkToggleButton * but, gpointer data) \brief visualize object toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void visualize_it (GtkToggleButton * but, gpointer data) #endif { int i, j; i = GPOINTER_TO_INT (data); j = 0; toviz.c = button_get_status ((GtkWidget *)but); if (i < MOLIMIT) { j = combo_get_active (combo_mol[i-1]); tmp_fmol = get_active_field_molecule (j); } if (is_moy) { visualize_object (i, row_id, j); if (i < MOLIMIT) check_to_visualize_properties_for_this_field_mol (i, j); } else { visualize_single_struct (i, row_id, j, edit_atids); if (i < MOLIMIT) { check_to_visualize_properties_for_this_field_mol (i, j); tmp_fprop -> show = toviz.c; } } if (i < MOLIMIT) tmp_fmol = get_active_field_molecule (j); init_default_shaders (tmp_view); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_it (GtkCheckButton * but, gpointer data) \brief select object toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_it (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_it (GtkToggleButton * but, gpointer data) \brief select object toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_it (GtkToggleButton * but, gpointer data) #endif { int i, j; i = GPOINTER_TO_INT (data); toviz.c = button_get_status ((GtkWidget *)but); if (i < MOLIMIT) j = combo_get_active (combo_mol[i-1]); if (is_moy) { select_object (i, row_id, j); } else { tmp_fprop -> use = toviz.c; } } extern ColRGBA init_color (int id, int numid); extern int active_sel; extern int a_ato; extern int ** sel_at; extern void run_select_atom_dialog (GtkDialog * select_dialog, gint response_id, gpointer data); GtkWidget * add_tree; int vdw_id; /*! \fn G_MODULE_EXPORT void field_molecule_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select atom in field molecule toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void field_molecule_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { GtkTreeStore ** model = (GtkTreeStore **)data; GtkTreeIter iter; int h, i, j, k, l, m, n; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(* model), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(* model), & iter, 0, & i, -1); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { toviz.c = 0; a_ato --; } else { toviz.c = 1; a_ato ++; } if (active_sel < 11) { sel_at[0][i-1] = toviz.c; } switch (active_sel) { case 0: j = i-1; break; case 1: j = i-1; break; case 2: j = tmp_fshell -> id; break; case 3: j = tmp_fshell -> id; break; case 4: j = tmp_fcons -> id; break; case 5: j = tmp_fcons -> id; break; case 6: j = tmp_fpmf -> id; break; case 7: j = tmp_fpmf -> id; break; case 8: j = tmp_frig -> id; break; case 9: j = tmp_ftet -> id; break; default: j = tmp_fbody -> id; break; } if (active_sel < 10) { for (k=0; k multi; k++) { l = tmp_fmol -> atoms_id[i-1][k].a; m = tmp_fmol -> atoms_id[i-1][k].b; n = get_active_atom (tmp_fmol -> id, l) -> list[m]; field_selection (n, toviz.c, toviz.c, i-1); } } else { h = vdw_id = sel_at[0][i-1]; field_nth_body * tmp_fbo = tmp_field -> first_body[0]; for (k=0; k nbody[0]; k++) { if (tmp_fbo -> id == h) { visualize_body (toviz.c, h, tmp_fbo); break; } else if (tmp_fbo -> next != NULL) { tmp_fbo = tmp_fbo -> next; } } } init_default_shaders (tmp_view); j = (active_sel > 5 && active_sel < 8) ? 1 : 0; gtk_tree_store_set (* model, & iter, 3+j, toviz.c, -1); hide_the_widgets (add_tree); show_the_widgets (add_tree); } /*! \fn void select_atom_set_color (GtkCellRenderer * renderer, int i) \brief set cell renderer color \param renderer the target GtkCellRen \param i the color id */ void select_atom_set_color (GtkCellRenderer * renderer, int i) { set_renderer_color (i, renderer, init_color (i-1, num_field_objects)); } /*! \fn void select_atom_set_cmv (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief field atom set renderer color, markup and visibility in the property edition atom(s) selection tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void select_atom_set_cmv (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int h, i, j, k; gtk_tree_model_get (mod, iter, 0, & h, -1); if (active_sel < 11) { gtk_tree_model_get (mod, iter, 1, & i, -1); } else { i = ! h; } j = GPOINTER_TO_INT(data); switch (j) { case 0: gtk_cell_renderer_set_visible (renderer, ! i); break; case 1: if (active_sel > 10) { set_renderer_markup (mod, iter, renderer, 1); i = h; } gtk_cell_renderer_set_visible (renderer, i); break; case 2: set_renderer_markup (mod, iter, renderer, 2); gtk_cell_renderer_set_visible (renderer, i); break; case 3: gtk_cell_renderer_set_visible (renderer, ! i); break; case 4: if ((active_sel > 1 && active_sel < 6) || active_sel > 8) { if (active_sel > 10) { gtk_tree_model_get (mod, iter, 3, & k, -1); } else { k = sel_at[0][h-1]; } if (k || ! a_ato) { gtk_cell_renderer_set_visible (renderer, TRUE); } else { gtk_cell_renderer_set_visible (renderer, ! a_ato); } } else { gtk_cell_renderer_set_visible (renderer, ! i); } break; } if (active_sel < 2 && j < 4) { for (i=0; i num/tmp_fmol -> multi; i++) { if (sel_at[0][i]+1 == abs(h)) break; } if (sel_at[1][i]) { select_atom_set_color (renderer, sel_at[0][i]+1); } else { select_atom_set_color (renderer, sel_at[1][i]); } } else if (j < 4) { if (h < 0) h = -h; if (active_sel < 11) { k = (sel_at[0][h-1]) ? h : 0; } else { gtk_tree_model_get (mod, iter, 3, & k, -1); } select_atom_set_color (renderer, k); } } float * val_at; /* * G_MODULE_EXPORT void edit_unit_weight (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data) \brief on edit unit weight callback \param cell the GtkCellRendererToggle sending the signal \param string_path the path in the tree store * gchar \param data the associated data pointer */ G_MODULE_EXPORT void edit_unit_weight (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data) { GtkTreeStore ** model = (GtkTreeStore **)data; GtkTreeIter iter; int i; GtkTreePath * path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (GTK_TREE_MODEL(* model), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(* model), & iter, 0, & i, -1); val_at[i] = string_to_double ((gpointer)new_text); } /*! \fn G_MODULE_EXPORT void select_atom_id_from_fied_molecule (GtkButton * but, gpointer data) \brief select atom id from field molecule - creating the dialog \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_atom_id_from_fied_molecule (GtkButton * but, gpointer data) { int i, j, k, l, m, n, o, p, q; GtkTreeIter id_level; GtkTreeIter atom_level; GtkTreeViewColumn * ato_col[5]; GtkCellRenderer * ato_cell[5]; gchar * ato_title[5] = {i18n("Atom Id."), i18n("Fragment"), i18n("Atom"), i18n("Weight (1)"), i18n("Viz.3D & Select")}; gchar * nbd_title[5] = {i18n("Atom Id."), i18n("Field atom"), i18n("Field molecule(s)"), " ", i18n("Viz.3D & Select")}; gchar * ctype[5]={"text", "text", "text", "text", "active"}; GType col_type[2][5] = {{G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_FLOAT}, {G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_FLOAT, G_TYPE_BOOLEAN}}; GType cbl_type[4] = {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN}; field_object = 1; active_sel = GPOINTER_TO_INT (data); gboolean add; gchar * str; q = (active_sel > 5 && active_sel < 8) ? 1 : 0; switch (active_sel) { case 0: str = g_strdup_printf (_("Please select the new atom(s)")); o = -1; p = -1; break; case 1: str = g_strdup_printf (_("Please select the atom(s) to freeze / unfreeze")); o = -1; p = -1; break; case 2: str = g_strdup_printf (_("Please select the core atom")); o = tmp_fshell -> ia[0]-1; p = tmp_fshell -> ia[1]-1; break; case 3: str = g_strdup_printf (_("Please select the atom(s) to shell")); o = tmp_fshell -> ia[1]-1; p = tmp_fshell -> ia[0]-1; break; case 4: str = g_strdup_printf (_("Please select the first atom")); o = tmp_fcons -> ia[0]-1; p = tmp_fcons -> ia[1]-1; break; case 5: str = g_strdup_printf (_("Please select the second atom")); o = tmp_fcons -> ia[1]-1; p = tmp_fcons -> ia[0]-1; break; case 6: str = g_strdup_printf (_("Please select the atom(s) in the first unit")); break; case 7: str = g_strdup_printf (_("Please select the atom(s) in the second unit")); break; case 8: str = g_strdup_printf (_("Please select the atom(s) in the rigid unit")); p = -1; break; case 9: str = g_strdup_printf (_("Please select the tethered atom")); o = tmp_ftet -> num-1; p = -1; break; case 11: if (tmp_fbody -> bd == 2) { str = g_strdup_printf (_("Please select the type of field atom")); } else { str = g_strdup_printf (_("Please select the first type of field atom")); } break; case 12: str = g_strdup_printf (_("Please select the second type of field atom")); break; case 13: str = g_strdup_printf (_("Please select the third type of field atom")); break; case 14: str = g_strdup_printf (_("Please select the fourth type of field atom")); break; } GtkWidget * amol = dialogmodal (str, GTK_WINDOW(field_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(amol), _("Apply"), GTK_RESPONSE_APPLY); a_ato = 0; GtkTreeStore * add_model; if (active_sel < 11) { add_model = gtk_tree_store_newv (4+q, col_type[q]); } else { add_model = gtk_tree_store_newv (4, cbl_type); } add_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(add_model)); if (active_sel < 11) { num_field_objects = tmp_fmol -> mol -> natoms; } for (i=0; i<4+q; i++) { k = i; if (i < 3+q) { ato_cell[i] = gtk_cell_renderer_text_new (); } else { if (! q) k ++; ato_cell[i] = gtk_cell_renderer_toggle_new (); if (active_sel > 1) gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE(ato_cell[i]), TRUE); g_signal_connect (G_OBJECT(ato_cell[i]), "toggled", G_CALLBACK(field_molecule_select_atom_id), & add_model); } if (active_sel < 11) { ato_col[i] = gtk_tree_view_column_new_with_attributes (_(ato_title[k]), ato_cell[i], ctype[k], i, NULL); } else { ato_col[i] = gtk_tree_view_column_new_with_attributes ((k != 3) ? _(nbd_title[k]) : nbd_title[k], ato_cell[i], ctype[k], i, NULL); } gtk_tree_view_append_column (GTK_TREE_VIEW(add_tree), ato_col[i]); gtk_tree_view_column_set_alignment (ato_col[i], 0.5); gtk_tree_view_column_set_cell_data_func (ato_col[i], ato_cell[i], select_atom_set_cmv, GINT_TO_POINTER(k), NULL); if (q && i == 3) { g_object_set (ato_cell[i], "editable", TRUE, NULL); g_signal_connect (G_OBJECT(ato_cell[i]), "edited", G_CALLBACK(edit_unit_weight), & add_model); } } // Clean 3D viz field_unselect_all (); // fill model if (active_sel < 2) { sel_at = allocdint (2, tmp_fat -> num/tmp_fmol -> multi); } else if (active_sel < 11) { sel_at = allocdint (2, tmp_fmol -> mol -> natoms); } else { field_nth_body * tmp_fbo = tmp_field -> first_body[0]; k = 0; for (i=0; i nbody[0]; i++) { if (g_strcmp0 (get_active_atom (tmp_fbo -> ma[0][0], tmp_fbo -> a[0][0]) -> name, get_active_atom (tmp_fbo -> ma[1][0], tmp_fbo -> a[1][0]) -> name) == 0) k ++; if (tmp_fbo -> next != NULL) tmp_fbo = tmp_fbo -> next; } sel_at = allocdint (1, k); num_field_objects = k; } if (active_sel < 2) { l = 0; for (i=0; i mol -> natoms; i++) { if (tmp_fmol -> atoms_id[i][0].a == tmp_fat -> id) { j = tmp_fmol -> atoms_id[i][0].b; k = tmp_fat -> list_id[j]; sel_at[0][l] = k; if (active_sel) { sel_at[1][l] = tmp_fat -> frozen_id[j]; } else { sel_at[1][l] = 0; } l ++; } } for (i=0; i num/tmp_fmol -> multi; i++) { gtk_tree_store_append (add_model, & id_level, NULL); gtk_tree_store_set (add_model, & id_level, 0, sel_at[0][i]+1, 1, 0, 3, 0, -1); if (sel_at[1][i]) { field_molecule_select_atom_id (GTK_CELL_RENDERER_TOGGLE(ato_cell[3]), gtk_tree_path_to_string(gtk_tree_model_get_path(GTK_TREE_MODEL(add_model), & id_level)), & add_model); } for (j=0; j< tmp_fmol -> multi; j++) { gtk_tree_store_append (add_model, & atom_level, & id_level); k = sel_at[0][i]; l = tmp_fmol -> atoms_id[k][j].b; m = tmp_fat -> list[l]; str = g_strdup_printf ("%s%d", exact_name(tmp_proj -> chemistry -> label[tmp_fat -> sp]), m+1); gtk_tree_store_set (add_model, & atom_level, 0, -(sel_at[0][i]+1), 1, tmp_fmol -> fragments[j]+1, 2, str, -1); g_free (str); } } } else if (active_sel < 4) { for (i=0; i mol -> natoms; i++) { if (i != p) { gtk_tree_store_append (add_model, & id_level, NULL); gtk_tree_store_set (add_model, & id_level, 0, i+1, 1, 0, 3, 0, -1); tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[i][0].a); for (j=0; j< tmp_fmol -> multi; j++) { gtk_tree_store_append (add_model, & atom_level, & id_level); k = tmp_fat -> list[tmp_fmol -> atoms_id[i][j].b]; str = g_strdup_printf ("%s%d", exact_name(tmp_proj -> chemistry -> label[tmp_fat -> sp]), k+1); gtk_tree_store_set (add_model, & atom_level, 0, -(i+1), 1, tmp_fmol -> fragments[j]+1, 2, str, -1); g_free (str); } } } } else if (active_sel < 6 || (active_sel > 7 && active_sel < 11)) { for (i=0; i mol -> natoms; i++) { if (i != p) { tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[i][0].a); gtk_tree_store_append (add_model, & id_level, NULL); if (active_sel < 6 || active_sel == 9) { if (i == o) { k = 1; } else { k = 0; } } else { k = 0; if (tmp_frig -> num > 0) { for (j=0; j num; j++) { if (i == tmp_frig -> list[j]) { k = 1; break; } } } } sel_at[0][i] = k; gtk_tree_store_set (add_model, & id_level, 0, i+1, 1, 0, 3, 0, -1); if (sel_at[0][i]) { field_molecule_select_atom_id (GTK_CELL_RENDERER_TOGGLE(ato_cell[3]), gtk_tree_path_to_string(gtk_tree_model_get_path(GTK_TREE_MODEL(add_model), & id_level)), & add_model); } for (j=0; j< tmp_fmol -> multi; j++) { gtk_tree_store_append (add_model, & atom_level, & id_level); l = tmp_fat -> list[tmp_fmol -> atoms_id[i][j].b]; str = g_strdup_printf ("%s%d", exact_name(tmp_proj -> chemistry -> label[tmp_fat -> sp]), l+1); gtk_tree_store_set (add_model, & atom_level, 0, -(i+1), 1, tmp_fmol -> fragments[j]+1, 2, str, -1); g_free (str); } } } } else if (active_sel > 10) { m = active_sel-11; field_nth_body * tmp_fbo = tmp_field -> first_body[0]; k = 0; for (i=0; i nbody[0]; i++) { // need to find the atoms name if (g_strcmp0 (get_active_atom (tmp_fbo -> ma[0][0], tmp_fbo -> a[0][0]) -> name, get_active_atom (tmp_fbo -> ma[1][0], tmp_fbo -> a[1][0]) -> name) == 0) { add = TRUE; for (j=0; j < body_at(tmp_fbody -> bd); j++) { if (j != m && tmp_fbody -> na[j] > -1) { if (g_strcmp0 (get_active_atom (tmp_fbo -> ma[0][0], tmp_fbo -> a[0][0]) -> name, get_active_atom (tmp_fbody -> ma[j][0], tmp_fbody -> a[j][0]) -> name) == 0) add = FALSE; } } if (add) { gtk_tree_store_append (add_model, & id_level, NULL); l = 0; if (tmp_fbody -> na[m] > -1) { if (g_strcmp0 (get_active_atom (tmp_fbo -> ma[0][0], tmp_fbo -> a[0][0]) -> name, get_active_atom (tmp_fbody -> ma[m][0], tmp_fbody -> a[m][0]) -> name) == 0) { l = 1; vdw_id = tmp_fbo -> id; a_ato = 1; } } gtk_tree_store_set (add_model, & id_level, 0, k+1, 1, exact_name(get_active_atom (tmp_fbo -> ma[0][0], tmp_fbo -> a[0][0]) -> name), 3, l, -1); sel_at[0][k] = tmp_fbo -> id; for (j=0; j na[0]; j++) { gtk_tree_store_append (add_model, & atom_level, & id_level); gtk_tree_store_set (add_model, & atom_level, 0, 0, 2, get_active_field_molecule(tmp_fbo -> ma[0][j]) -> name, 3, 0, -1); } } k ++; } if (tmp_fbo -> next != NULL) tmp_fbo = tmp_fbo -> next; } } else { val_at = allocfloat (tmp_fmol -> mol -> natoms); if (active_sel == 5) { k = 1; m = 0; } else { k = 0; m = 1; } for (i=0; i mol -> natoms; i++) { add = TRUE; if (tmp_fpmf -> num[k] > 0) { for (l=0; l num[k]; l++) { if (i == tmp_fpmf -> list[k][l]) { add = FALSE; break; } } } if (add) { tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[i][0].a); gtk_tree_store_append (add_model, & id_level, NULL); n = 0; if (tmp_fpmf -> num[m] > 0) { for (l=0; l num[m]; l++) { if (i == tmp_fpmf -> list[m][l]) { n = 1; break; } } } val_at[i] = tmp_fat -> mass; sel_at[0][i] = n; gtk_tree_store_set (add_model, & id_level, 0, i+1, 1, 0, 3, val_at[i], 4, 0, -1); if (sel_at[0][i]) { field_molecule_select_atom_id (GTK_CELL_RENDERER_TOGGLE(ato_cell[4]), gtk_tree_path_to_string(gtk_tree_model_get_path(GTK_TREE_MODEL(add_model), & id_level)), & add_model); } for (l=0; l< tmp_fmol -> multi; l++) { gtk_tree_store_append (add_model, & atom_level, & id_level); n = tmp_fat -> list[tmp_fmol -> atoms_id[i][l].b]; str = g_strdup_printf ("%s%d", exact_name(tmp_proj -> chemistry -> label[tmp_fat -> sp]), n+1); gtk_tree_store_set (add_model, & atom_level, 0, -(i+1), 1, tmp_fmol -> fragments[l]+1, 2, str, -1); g_free (str); } } } } g_object_unref (add_model); if (active_sel < 2) { j = tmp_fat -> num/tmp_fmol -> multi; } else { j = num_field_objects; } i = ((j+1)*37 < 500) ? (j+1)*37 : 500; if (active_sel > 10) q = 1; GtkWidget * vbox = dialog_get_content_area (amol); GtkWidget * scrollsets = create_scroll (vbox, 320+q*100, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, add_tree); if (q && active_sel < 11) { str = g_strdup_printf (_(" (1) if all 0.0 then atomic weight(s) will be used by DL-POLY")); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } if (active_sel < 2) { str = g_strdup_printf (_("The atom(s) above will be described\n" "in the force field using the parameters\n" "of the %s field atom.\n"), tmp_fat -> name); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.5, 0.5), FALSE, FALSE, 0); g_free (str); } show_the_widgets (amol); switch (active_sel) { case 0: run_this_gtk_dialog (amol, G_CALLBACK(run_add_atom_dialog), NULL); break; default: run_this_gtk_dialog (amol, G_CALLBACK(run_select_atom_dialog), GINT_TO_POINTER(active_sel)); if (active_sel == 1) { str = g_strdup_printf (_("%d atom(s)"), tmp_fat -> frozen); if (but) gtk_button_set_label (but, str); } break; } g_free (sel_at); if (q && active_sel < 11) g_free (val_at); } GtkWidget * av_lgt; /*! \fn void update_field_dist (float v) \brief update field distance widget \param v the new value */ void update_field_dist (float v) { gchar * str; if (v < 0.0) { str = g_strdup_printf (" "); } else { str = g_strdup_printf ("%8.3f", v); } gtk_label_set_text (GTK_LABEL(av_lgt), str); gtk_label_set_use_markup (GTK_LABEL(av_lgt), TRUE); } /*! \fn gchar * body_str (int a) \brief get body potential string name \param a the type of potential */ gchar * body_str (int a) { int i, j; j = body_at (a); gchar * str = g_strdup_printf ("%s ", _(felemt[a+MOLIMIT+1])); for (i=0; i na[i] > -1) { str = g_strdup_printf ("%s%s", str, get_active_atom (tmp_fbody -> ma[i][0], tmp_fbody -> a[i][0]) -> name); } if (i < j-1 && j > 1) str = g_strdup_printf ("%s - ", str); } str = g_strdup_printf ("%s", str); return str; } /*! \fn G_MODULE_EXPORT void selection_button (GtkButton * but, gpointer data) \brief select field object callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void selection_button (GtkButton * but, gpointer data) { select_atom_id_from_fied_molecule (NULL, data); int i, j, k, l, m, n, o, p, q, r; i = GPOINTER_TO_INT(data); gchar * stra = NULL; gchar * strb = NULL; if (i == 2 || i == 3) { j=i-2; if (! tmp_fshell -> ia[j]) { stra = g_strdup_printf (_("Not picked yet !")); strb = g_strdup_printf (DELETEB); } else { k = tmp_fshell -> ia[j]-1; l = tmp_fmol -> atoms_id[k][0].a; stra = g_strdup_printf ("%s - %d", exact_name(tmp_proj -> chemistry -> label[get_active_atom (tmp_fmol -> id, l) -> sp]), tmp_fshell -> ia[j]); strb = g_strdup_printf (APPLY); } } else if (i == 4 || i == 5) { j=i-4; if (! tmp_fcons -> ia[j]) { stra = g_strdup_printf (_("Not picked yet !")); strb = g_strdup_printf (DELETEB); } else { k = tmp_fcons -> ia[j] - 1; l = tmp_fmol -> atoms_id[k][0].a; stra = g_strdup_printf ("%s - %d", exact_name(tmp_proj -> chemistry -> label[get_active_atom (tmp_fmol -> id, l) -> sp]), tmp_fcons -> ia[j]); strb = g_strdup_printf (APPLY); } } else if (i == 6 || i == 7) { j=i-6; if (! tmp_fpmf -> num[j]) { stra = g_strdup_printf (_("Not picked yet !")); strb = g_strdup_printf (DELETEB); } else { stra = g_strdup_printf (_("%d atom(s)"), tmp_fpmf -> num[j]); strb = g_strdup_printf (APPLY); } } else if (i == 8) { j=0; if (! tmp_frig -> num) { stra = g_strdup_printf (_("Not picked yet !")); strb = g_strdup_printf (DELETEB); } else { stra = g_strdup_printf (_("%d atom(s)"), tmp_frig -> num); strb = g_strdup_printf (APPLY); } } else if (i == 9) { j=0; if (! tmp_ftet -> num) { stra = g_strdup_printf (_("Not picked yet !")); strb = g_strdup_printf (DELETEB); } else { k = tmp_fmol -> atoms_id[tmp_ftet -> num - 1][0].a; stra = g_strdup_printf ("%s - %d", exact_name(tmp_proj -> chemistry -> label[get_active_atom (tmp_fmol -> id, k) -> sp]), tmp_ftet -> num); strb = g_strdup_printf (APPLY); } } else if (i == 11 || i == 12 || i == 13 || i == 14) { j=i-11; if (tmp_fbody -> na[j] < 0) { stra = g_strdup_printf (_("Not picked yet !")); strb = g_strdup_printf (DELETEB); } else { stra = g_strdup_printf ("%s", exact_name(get_active_atom (tmp_fbody -> ma[j][0]-1, tmp_fbody -> a[j][0]) -> name)); strb = g_strdup_printf (APPLY); } if (tmp_fbody -> bd == 2) { cross_box = destroy_this_widget (cross_box); cross_box = combo_cross (tmp_fbody); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cross_hbox, cross_box, FALSE, FALSE, 0); show_the_widgets (cross_box); } if (tmp_fbody -> na[j] < 0) { widget_set_sensitive (cross_vbox, FALSE); } else { widget_set_sensitive (cross_vbox, TRUE); combo_set_active (cross_box, 0); } gtk_label_set_text (GTK_LABEL(body_lab), body_str (tmp_fbody -> bd)); gtk_label_set_use_markup (GTK_LABEL(body_lab), TRUE); } set_image_from_icon_name (img_but[j], strb); g_free (strb); if (i == 4 || i == 5) { if (tmp_fcons -> ia[0] && tmp_fcons -> ia[1]) { // update_distance tmp_fcons -> av = 0.0; for (k=0; k multi; k++) { l = tmp_fmol -> atoms_id[tmp_fcons -> ia[0]-1][k].a; m = tmp_fmol -> atoms_id[tmp_fcons -> ia[0]-1][k].b; n = get_active_atom (tmp_fmol -> id, l) -> list[m]; l = tmp_fmol -> atoms_id[tmp_fcons -> ia[1]-1][k].a; m = tmp_fmol -> atoms_id[tmp_fcons -> ia[1]-1][k].b; o = get_active_atom (tmp_fmol -> id, l) -> list[m]; tmp_fcons -> av += distance_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][n], & tmp_proj -> atoms[0][o]).length; } tmp_fcons -> av /= tmp_fmol -> multi; } update_field_dist (tmp_fcons -> av); } else if (i == 6 || i == 7) { if (tmp_fpmf -> num[0] > 0 && tmp_fpmf -> num[1] > 0) { atom at[2][tmp_fmol -> multi]; float ma[2][tmp_fmol -> multi]; gboolean all_zero = TRUE; float v; for (k=0; k<2; k++) { for (l=0; l num[k]; l++) { if (tmp_fpmf -> weight[k][l] != 0.0) { all_zero = FALSE; break; } } if (! all_zero) break; } for (k=0; k<2; k++) { for (l=0; l multi; l++) { ma[k][l] = 0.0; at[k][l].x = 0.0; at[k][l].y = 0.0; at[k][l].z = 0.0; } } for (k=0; k<2; k++) { for (l=0; l num[k]; l++) { m = tmp_fpmf -> list[k][l]; for (n=0; n multi; n++) { o = tmp_fmol -> atoms_id[m][n].a; p = tmp_fmol -> atoms_id[m][n].b; q = get_active_atom (tmp_fmol -> id, o) -> list[p]; if (all_zero) { r = tmp_proj -> atoms[0][q].sp; v = tmp_proj -> chemistry -> chem_prop[CHEM_M][r]; } else { v = tmp_fpmf -> weight[k][l]; } at[k][n].x += v * tmp_proj -> atoms[0][q].x; at[k][n].y += v * tmp_proj -> atoms[0][q].y; at[k][n].z += v * tmp_proj -> atoms[0][q].z; ma[k][n] += v; } } } v = 0.0; for (n=0; n multi; n++) { for (k=0; k<2; k++) { at[k][n].x /= ma[k][n]; at[k][n].y /= ma[k][n]; at[k][n].z /= ma[k][n]; } v += distance_3d (& tmp_proj -> cell, 0, & at[0][n], & at[1][n]).length; } tmp_fpmf -> av = v / tmp_fmol -> multi; } update_field_dist (tmp_fpmf -> av); } gtk_button_set_label (but, stra); gtk_widget_set_size_request ((GtkWidget *)but, 150, -1); g_free (stra); } /*! \fn G_MODULE_EXPORT void changed_atom_combo (GtkComboBox * box, gpointer data) \brief change atom \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_atom_combo (GtkComboBox * box, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data); j = combo_get_active ((GtkWidget *)box); switch (i) { case 0: widget_set_sensitive (afftype, (j) ? TRUE : FALSE); k = -1; if (tmp_fat -> afid > -1) { for (k=0; k sp]; k++) { if (atoms_id_list[tmp_fat -> sp][k] == tmp_fat -> afid) break; } } combo_set_active (afftype, k+1); if (j) { tmp_fat -> mass =(tmp_fat -> afid < 0) ? tmp_proj -> chemistry -> chem_prop[CHEM_M][tmp_fat -> sp] : get_force_field_atom_mass (tmp_fat -> sp, tmp_fat -> afid); } else { tmp_fat -> mass = tmp_proj -> chemistry -> chem_prop[CHEM_M][tmp_fat -> sp]; } break; case 1: if (j > 0) { tmp_fat -> afid = atoms_id_list[tmp_fat -> sp][j - 1]; } else { tmp_fat -> afid = - 1; } tmp_fat -> mass = get_force_field_atom_mass (tmp_fat -> sp, j-1); check_atom_for_updates (); break; } } /*! \fn gchar * get_body_element_name (field_nth_body * body, int aid, int nbd) \brief get field body potential element name \param body the field body potential \param aid the atom id, if any \param nbd the body potential id */ gchar * get_body_element_name (field_nth_body * body, int aid, int nbd) { int i, j; i = body -> ma[aid][0]; if (! nbd) { return g_strdup_printf ("%s", get_active_atom (i, body -> a[aid][0]) -> name); } else { j = get_active_shell (i, body -> a[aid][0]-nbd+1) -> ia[0]; return g_strdup_printf ("%s_sh", get_active_atom (i, j) -> name); } } /*! \fn gboolean body_identicals (field_nth_body * body, int nbd, int * na, int ** ma, int ** ba) \brief are these non bonded potentials identicals ? \param body the field non bonded property \param nbd number of distinct interactions \param na number of atoms (0 = 1st pot, 1 = 2nd pot) \param ma 1st potential data \param ba 2nd potential data */ gboolean body_identicals (field_nth_body * body, int nbd, int * na, int ** ma, int ** ba) { gchar * stra, * strb, * strc, * strd; int i, j; stra = get_body_element_name (body, 0, 0); strb = get_body_element_name (body, 1, 0); i = ma[0][0]; if (ba[0][0] < nbd) { strc = g_strdup_printf ("%s", get_active_atom (i, ba[0][0]) -> name); } else { j = get_active_shell (i, ba[0][0]-nbd) -> ia[0]; strc = g_strdup_printf ("%s_sh", get_active_atom (i, j) -> name); } i = ma[1][0]; if (ba[1][0] < nbd) { strd = g_strdup_printf ("%s", get_active_atom (i, ba[1][0]) -> name); } else { j = get_active_shell (i, ba[1][0]-nbd) -> ia[0]; strd = g_strdup_printf ("%s_sh", get_active_atom (i, j) -> name); } gboolean res = FALSE; if (g_strcmp0(stra, strc) == 0 && g_strcmp0(strb, strd) == 0) res = TRUE; if (g_strcmp0(stra, strd) == 0 && g_strcmp0(strb, strc) == 0) res = TRUE; // g_debug ("stra= %s, strb= %s, strc= %s, strd= %s:: res= %d", stra, strb, strc, strd, res); g_free (stra); g_free (strb); g_free (strc); g_free (strd); return res; } /*! \fn int get_num_vdw_max () \brief Get the number of field shell interactions */ int get_num_vdw_max () { int i; field_molecule * molff; field_shell * shellff; molff = tmp_field -> first_molecule; i = 0; while (molff) { i += molff -> atoms; shellff = molff -> first_shell; while (shellff) { if (shellff -> use && shellff -> vdw && shellff -> ia[0] > -1) i ++; shellff = shellff -> next; } molff = molff -> next; } return i; } /*! \fn void adjust_vdw_interactions (gboolean add_shell) \brief adjust VdW interactions \param add_shell update field shells */ void adjust_vdw_interactions (gboolean add_shell) { int i, j, k, l, m, n; field_molecule * molff; field_atom* atff; field_shell * shellff; field_nth_body * bodyff; i = get_num_vdw_max (); m = i * (i+1) / 2; n = (add_shell) ? i * (i-1) / 2 : (i+1) * (i+2) / 2; bodyff = get_active_body (0, 0); while (bodyff) { for (j=0; j<2; j++) { k = bodyff -> ma[j][0]; if (bodyff -> a[j][0] >= n) { bodyff -> a[j][0] -= n; bodyff -> a[j][0] += m; } } bodyff = bodyff -> next; } if (add_shell) { gboolean add_vdw; gchar * str; gchar ** to_be_vdw = g_malloc0(i*sizeof*to_be_vdw); int * vdw_mlist = allocint (i); int ** vdw_aids = allocdint (i,i); int ** vdw_mids = allocdint (i,i); int vdw_na[2]; int * vdw_a[2], * vdw_ma[2]; int nbd = m; molff = tmp_field -> first_molecule; l = 0; while (molff) { atff = molff -> first_atom; while (atff) { add_vdw = TRUE; for (k=0; k name) == 0) { add_vdw = FALSE; vdw_mlist[k] ++; vdw_mids[k][vdw_mlist[k]] = molff -> id; vdw_aids[k][vdw_mlist[k]] = atff -> id; break; } } if (add_vdw) { to_be_vdw[k] = g_strdup_printf ("%s", atff -> name); vdw_mids[k][0] = molff -> id; vdw_aids[k][0] = atff -> id; l ++; } atff = atff -> next; } shellff = molff -> first_shell; while (shellff) { if (shellff -> use && shellff -> vdw && shellff -> ia[0] > -1) { add_vdw = TRUE; atff = get_active_atom (molff -> id, shellff -> ia[0]); str = g_strdup_printf ("%s_sh", atff -> name); for (k=0; k id; vdw_aids[k][vdw_mlist[k]] = shellff -> id + nbd; break; } } if (add_vdw) { to_be_vdw[k] = g_strdup_printf ("%s", str); vdw_mids[k][0] = molff -> id; vdw_aids[k][0] = shellff -> id + nbd; l ++; } g_free (str); } shellff = shellff -> next; } molff = molff -> next; } i = tmp_field -> nbody[0]; j = 0; for (k=0; k next; } if (! bodyff) { bodyff = get_active_body (i+j, 0); bodyff -> next = init_field_nth_body (i+j, 0, vdw_na, vdw_ma, vdw_a); bodyff -> next -> prev = bodyff; j ++; } } for (m=0; m next; } if (! bodyff) { bodyff = get_active_body (i+j, 0); bodyff -> next = init_field_nth_body (i+j, 0, vdw_na, vdw_ma, vdw_a); bodyff -> next -> prev = bodyff; j ++; } } } tmp_field -> nbody[0] += j; } else { atff = get_active_atom (tmp_fmol -> id, tmp_fshell -> ia[0]); gchar * str = g_strdup_printf ("%s_sh", atff -> name); gchar * stra, * strb; bodyff = get_active_body (0, 0); i = 0; while (bodyff) { stra = get_body_element_name (bodyff, 0, m+1); strb = get_body_element_name (bodyff, 1, m+1); if (g_strcmp0(str,stra) == 0 || g_strcmp0(str,strb) == 0) { if (bodyff -> next) { bodyff -> prev -> next = bodyff -> next; bodyff -> next -> prev = bodyff -> prev; } else { bodyff = bodyff -> prev; g_free (bodyff -> next); bodyff -> next = NULL; } i ++; } g_free (stra); g_free (strb); bodyff = bodyff -> next; } g_free (str); tmp_field -> nbody[0] -= i; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void shell_in_vdw (GtkCheckButton * but, gpointer data) \brief VdW in shell toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void shell_in_vdw (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void shell_in_vdw (GtkToggleButton * but, gpointer data) \brief VdW in shell toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void shell_in_vdw (GtkToggleButton * but, gpointer data) #endif { tmp_fshell -> vdw = button_get_status ((GtkWidget *)but); adjust_vdw_interactions (tmp_fshell -> vdw); } dint rep; gchar * rep_atom_name; /*! \fn G_MODULE_EXPORT void run_edit_parameters (GtkDialog * dialog, gint response_id, gpointer data) \brief edit field parameter - running the dialog \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_edit_parameters (GtkDialog * dialog, gint response_id, gpointer data) { if (rep.a > 6 && rep.a < MOLIMIT) { adjust_field_prop (rep.a-7, rep.b, tmp_fprop, edit_atids, tmp_fprop -> key); } else if (rep.a == 1) { if (g_strcmp0 (rep_atom_name, tmp_fat -> name) != 0) { // Atom name's change, need to update non bonded interactions compare_non_bonded (tmp_fat -> name); } g_free (rep_atom_name); rep_atom_name = NULL; } destroy_this_dialog (dialog); } /*! \fn void edit_parameters (int f, int id) \brief edit field parameter - creating the dialog \param f the type of parameter to edit \param id the field molecule id, if any */ void edit_parameters (int f, int id) { gchar * str = g_strdup_printf (_("%s parameter(s)"), _(felemt[f+1])); GtkWidget * dialog = dialogmodal(str, GTK_WINDOW(field_assistant)); GtkWidget * lab; GtkWidget * entry; GtkWidget * but; GtkWidget * hbox; GtkWidget * combo; GtkWidget * box = dialog_get_content_area (dialog); gboolean show_it; gboolean use_it; gchar * cs_name[3]={i18n("Core atom: "), i18n("Shell atom: "), i18n("Selection: ")}; gchar * cs_param[4]={i18n("Mass:"), i18n("Charge:"), "k2 ", "k4 "}; gchar * cs_unit[4]={"g mol-1", " ", "Å-2", "Å-4"}; gchar * co_name[4]={i18n("First atom: "), i18n("Second atom: "), i18n("Third atom: "), i18n("Fourth atom: ")}; gchar * pm_name[2]={i18n("First unit: "), i18n("Second unit: ")}; int i, j, k, l, m; float v; gchar * ba; is_moy = 1; show_it = use_it = FALSE; for (i=0; i<2; i++) ff_p_combo[i] = NULL; if (f < MOLIMIT) { i = combo_get_active (combo_mol[f-1]); lab = markup_label (g_strdup_printf (_("\tMolecule: \t%s"), get_active_field_molecule(i) -> name), -1, 30, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); tmp_fmol = get_active_field_molecule (i); } switch (f) { case 1: // Atom edit tmp_fat = get_active_atom(i, id); rep_atom_name = g_strdup_printf("%s", tmp_fat -> name); lab = markup_label (g_strdup_printf (_("\tAtom: \t\t%s"), rep_atom_name), -1, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Element:")); lab = markup_label (str, 120, 30, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); str = g_strdup_printf ("%s", exact_name(tmp_proj -> chemistry -> element[tmp_fat -> sp])); lab = markup_label (str, -1, -1, 0.5, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Field parameters:")); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); combo = create_combo (); combo_text_append (combo, _("Manual")); combo_text_append (combo, _("Automatic")); combo_set_active (combo, (tmp_fat -> afid > -1) ? 1 : 0); widget_set_sensitive (combo, atoms_id[tmp_fat -> sp]); g_signal_connect (G_OBJECT(combo), "changed", G_CALLBACK(changed_atom_combo), GINT_TO_POINTER(0)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Force field type *:")); lab = markup_label (str, 120, 30, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); afftype = create_combo (); combo_text_append (afftype, "None"); k = 0; for (i=0; i sp]; i++) { j = atoms_id_list[tmp_fat -> sp][i]; str = g_strdup_printf ("%s", exact_name(ff_atoms[j][2])); if (g_strcmp0 (ff_atoms[j][3], " ") != 0) str = g_strdup_printf ("%s : %s", str, ff_atoms[j][3]); combo_text_append (afftype, str); g_free (str); if (atoms_id_list[tmp_fat -> sp][i] == tmp_fat -> afid) k = i+1; } combo_set_active (afftype, k); g_signal_connect (G_OBJECT(afftype), "changed", G_CALLBACK(changed_atom_combo), GINT_TO_POINTER(1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, afftype, FALSE, FALSE, 0); widget_set_sensitive (afftype, (tmp_fat -> afid > -1) ? TRUE : FALSE); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Name: ")); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(update_atom_parameter), 100, 15, FALSE, GINT_TO_POINTER(-1)); update_entry_text (GTK_ENTRY(entry), tmp_fat -> name); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Mass: ")); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(update_atom_parameter), 100, 15, FALSE, GINT_TO_POINTER(0)); update_entry_double (GTK_ENTRY(entry), tmp_fat -> mass); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Charge: ")); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(update_atom_parameter), 100, 15, FALSE, GINT_TO_POINTER(1)); update_entry_double (GTK_ENTRY(entry), tmp_fat -> charge); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Frozen: ")); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); str = g_strdup_printf (_("%d atom(s)"), tmp_fat -> frozen); but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(select_atom_id_from_fied_molecule), GINT_TO_POINTER(1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); break; case 2: // Shell edit tmp_fshell = get_active_shell (i, id); str = g_strdup_printf (_("\tCore-Shell N°%d"), tmp_fshell -> id+1); lab = markup_label (str, 300, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); for (k=0; k<2; k++) { hbox = create_hbox (0); lab = markup_label (_(cs_name[k]), 100, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); if (! tmp_fshell -> ia[k]) { str = g_strdup_printf (_("Not picked yet !")); img_but[k] = stock_image (DELETEB); } else { j = tmp_fshell -> ia[k] - 1; l = tmp_fmol -> atoms_id[j][0].a; str = g_strdup_printf ("%s - %d", exact_name(tmp_proj -> chemistry -> label[get_active_atom (i, l) -> sp]), tmp_fshell -> ia[k]); img_but[k] = stock_image (APPLY); } but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(k+2)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_but[k], FALSE, FALSE, 30); } /*for (k=0; k<3; k++) { shell_hbox[k] = create_hbox (0); lab = markup_label (_(cs_name[k]), 100, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, shell_hbox[k], lab, FALSE, FALSE, 10); if ((k < 2 && tmp_fshell -> ia[k] == -1) || (k == 2 && ! tmp_fshell -> ib)) { str = g_strdup_printf (_("Not picked yet !")); img_but[k] = stock_image (DELETEB); } else { if (k < 2) { str = g_strdup_printf (_("Selected !")); } else { str = g_strdup_printf (_("%d atom(s) selected !"), tmp_fshell -> ia[1]-1); } img_but[k] = stock_image (APPLY); } if (k < 2) { shell_cbox[k] = create_combo (); combo_text_append (shell_cbox[k], _("Not picked yet !")); switch (k) { case 0: tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { combo_text_append (shell_cbox[k], tmp_fat -> name); tmp_fat = tmp_fat -> next; } break; case 1: combo_text_append (shell_cbox[k], _("All Atoms")); combo_text_append (shell_cbox[k], _("Selected Atoms")); break; } l = (! k) ? tmp_fshell -> ia[k]+1 : (tmp_fshell -> ia[k] < 1) ? tmp_fshell -> ia[k]+1 : 2; combo_set_active (shell_cbox[k], l); g_signal_connect (G_OBJECT(shell_cbox[k]), "changed", G_CALLBACK(changed_shell_combo), GINT_TO_POINTER(k)); gtk_widget_set_size_request (shell_cbox[k], 150, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, shell_hbox[k], shell_cbox[k], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, shell_hbox[k], img_but[k], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, shell_hbox[k], FALSE, FALSE, 0); } else { shell_but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(2)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, shell_hbox[k], shell_but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, shell_hbox[k], img_but[k], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, shell_hbox[k], FALSE, FALSE, 0); } g_free (str); } */ for (k=0; k<4; k++) { hbox = create_hbox (0); lab = markup_label ((k < 2) ? _(cs_param[k]) : cs_param[k], 100, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(update_atom_parameter), 150, 15, FALSE, GINT_TO_POINTER(2+k)); v = (! k) ? tmp_fshell -> m : (k == 1) ? tmp_fshell -> z : (k == 2) ? tmp_fshell -> k2 : tmp_fshell -> k4; update_entry_double (GTK_ENTRY(entry), v); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); if (k < 2) { str = g_strdup_printf ("%s", cs_unit[k]); } else { str = g_strdup_printf ("%s %s", fkeysw[activef][0][tmp_field -> energy_unit], cs_unit[k]); } lab = markup_label (str, -1, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } hbox = create_hbox (0); lab = markup_label(_("Use non-bonded: "), 185, 40, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (NULL, -1, -1, tmp_fshell -> vdw, G_CALLBACK(shell_in_vdw), NULL), FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); show_it = tmp_fshell -> show; use_it = tmp_fshell -> use; break; case 3: // Constraint edit tmp_fcons = get_active_constraint (i, id); str = g_strdup_printf (_("\tBond constraint N°%d"), tmp_fcons -> id+1); lab = markup_label (str, 300, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); for (k=0; k<2; k++) { hbox = create_hbox (0); lab = markup_label (_(co_name[k]), 100, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); if (! tmp_fcons -> ia[k]) { str = g_strdup_printf (_("Not picked yet !")); img_but[k] = stock_image (DELETEB); } else { j = tmp_fcons -> ia[k]-1; l = tmp_fmol -> atoms_id[j][0].a; str = g_strdup_printf ("%s - %d", exact_name(tmp_proj -> chemistry -> label[get_active_atom (i, l) -> sp]), tmp_fcons -> ia[k]); img_but[k] = stock_image (APPLY); } but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(k+4)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_but[k], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } hbox = create_hbox (0); str = g_strdup_printf (_("Av. distance (1): ")); lab = markup_label (str, 100, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); av_lgt = markup_label ("", 150, 50, 0.5, 0.5); update_field_dist (tmp_fcons -> av); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, av_lgt, FALSE, FALSE, 0); str = g_strdup_printf ("[Å]"); lab = markup_label (str, -1, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Length: ")); lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(update_atom_parameter), 150, 15, FALSE, GINT_TO_POINTER(6)); update_entry_double (GTK_ENTRY(entry), tmp_fcons -> length); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); str = g_strdup_printf ("[Å]"); lab = markup_label (str, -1, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); show_it = tmp_fcons -> show; use_it = tmp_fcons -> use; break; case 4: // Pmf edit tmp_fpmf = get_active_pmf (i, id); str = g_strdup_printf (_("\tMean force potential N°%d"), tmp_fpmf -> id+1); lab = markup_label (str, 300, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); for (k=0; k<2; k++) { hbox = create_hbox (0); lab = markup_label (_(pm_name[k]), 100, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); if (tmp_fpmf -> num[k] == 0) { str = g_strdup_printf (_("Not picked yet !")); img_but[k] = stock_image (DELETEB); } else { str = g_strdup_printf (_("%d atom(s)"), tmp_fpmf -> num[k]); img_but[k] = stock_image (APPLY); } but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(k+6)); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_but[k], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } hbox = create_hbox (0); str = g_strdup_printf (_("Av. d1-2 (1): ")); lab = markup_label (str, 100, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); av_lgt = markup_label ("", 150, 50, 0.5, 0.5); update_field_dist (tmp_fpmf -> av); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, av_lgt, FALSE, FALSE, 0); str = g_strdup_printf ("[Å]"); lab = markup_label (str, -1, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Length: ")); lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(update_atom_parameter), 150, 15, FALSE, GINT_TO_POINTER(7)); update_entry_double (GTK_ENTRY(entry), tmp_fpmf -> length); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); str = g_strdup_printf ("[Å]"); lab = markup_label (str, -1, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); show_it = tmp_fpmf -> show; use_it = tmp_fpmf -> use; break; case 5: // Rigid edit tmp_frig = get_active_rigid (i, id); str = g_strdup_printf (_("\tRigid unit N°%d"), id+1); lab = markup_label (str, 300, 50, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Atom(s): ")); lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); if (tmp_frig -> num == 0) { str = g_strdup_printf (_("Not picked yet !")); img_but[0] = stock_image (DELETEB); } else { str = g_strdup_printf (_("%d atom(s)"), tmp_frig -> num); img_but[0] = stock_image (APPLY); } but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(8)); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_but[0], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); show_it = tmp_frig -> show; use_it = tmp_frig -> use; break; case 6: // Tethered tmp_ftet = get_active_tethered (i, id); str = g_strdup_printf (_("\tTethered atom N°%d"), id+1); lab = markup_label (str, 300, 50, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf (_("Atom: ")); lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); if (! tmp_ftet -> num) { str = g_strdup_printf (_("Not picked yet !")); img_but[0] = stock_image (DELETEB); } else { k = tmp_fmol -> atoms_id[tmp_ftet -> num-1][0].a; str = g_strdup_printf ("%s - %d", exact_name(tmp_proj -> chemistry -> label[get_active_atom (i, k) -> sp]), tmp_ftet -> num); img_but[0] = stock_image (APPLY); } but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(9)); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_but[0], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); show_it = tmp_ftet -> show; use_it = tmp_ftet -> use; break; case SEXTERN: tmp_fext = get_active_external (id); body_lab = markup_label (field_str(tmp_fext -> key), 250, 50, 0.5, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, body_lab, FALSE, FALSE, 0); use_it = tmp_fext -> use; break; default: if (f < MOLIMIT) { // Bond, angle, dihedral, improper, inversion edit tmp_fstr = get_active_struct (f-7, i, id); m = struct_id (f); str = g_strdup_printf (_("\t%s type N°%d\n\tField atoms: "), mo_title[f-7], id+1); for (k=0; k and "), str); str = g_strdup_printf ("%s%s", str, get_active_atom (i, tmp_fstr -> aid[k]) -> name); if (m > 2 && k < m-1) str = g_strdup_printf ("%s, ", str); } str = g_strdup_printf ("%s", str); edit_atids = allocint (m); gtk_tree_model_get (GTK_TREE_MODEL(field_model[f]), & field_iter, 0, & is_moy, -1); if (! is_moy) { str = g_strdup_printf (_("%s\n\tBetween atoms: "), str); for (k=0; k and "), str); str = g_strdup_printf ("%s%s", str, ba); if (m > 2 && k < m-1) str = g_strdup_printf ("%s, ", str); } str = g_strdup_printf ("%s", str); if (tmp_fstr -> other) { tmp_fprop = get_active_prop_using_atoms (tmp_fstr -> other, m, edit_atids); if (! tmp_fprop) { tmp_fprop = tmp_fstr -> other; while (tmp_fprop -> next) tmp_fprop = tmp_fprop -> next; tmp_fprop -> next = duplicate_field_prop (tmp_fstr -> def, f-7); tmp_fprop = tmp_fprop -> next; for (k=0; k aid[k] = edit_atids[k]; } } else { tmp_fstr -> other = duplicate_field_prop (tmp_fstr -> def, f-7); for (k=0; k other -> aid[k] = edit_atids[k]; tmp_fprop = tmp_fstr -> other; } } else { for (l=0; l def; } add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label (str, -1, (is_moy) ? 70 : 100, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); show_it = tmp_fprop -> show; use_it = tmp_fprop -> use; } else { l = f - MOLIMIT; tmp_fbody = get_active_body (id, l); body_lab = markup_label (body_str (tmp_fbody -> bd), 250, 50, 0.5, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, body_lab, FALSE, FALSE, 0); if (l > 0) { for (k=0; k< body_at(l); k++) { hbox = create_hbox (0); if (l == 2) { lab = markup_label (_("Tersoff atom: "), 100, -1, 0.0, 0.5); } else { lab = markup_label (_(co_name[k]), 100, -1, 0.0, 0.5); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); if (tmp_fbody -> na[k] < 0) { str = g_strdup_printf (_("Not picked yet !")); img_but[k] = stock_image (DELETEB); } else { str = g_strdup_printf ("%s", get_active_atom (tmp_fbody -> ma[k][0], tmp_fbody -> a[k][0]) -> name); img_but[k] = stock_image (APPLY); } but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(11+k)); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_but[k], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } } show_it = tmp_fbody -> show; use_it = tmp_fbody -> use; } break; } if (f < SEXTERN) { hbox = create_hbox (0); lab = markup_label(_("Visualize in the model: "), (f == 1) ? 150 : 185, 40, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (NULL, -1, -1, show_it, G_CALLBACK(visualize_it), GINT_TO_POINTER(f)), FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } if (f == 1) { str = g_strdup_printf (_("* this will be used to adjust bonding, angles, etc ... accordingly,\n" " providing that some parameters can be found in the force field data.\n" " Please note that comments are directly imported from the force field file.")); lab = markup_label (str, -1, 75, 0.5, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); } if (f > 1) { hbox = create_hbox (0); lab = markup_label(_("Use to create force field: "), 185, 40, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (NULL, -1, -1, use_it, G_CALLBACK(select_it), GINT_TO_POINTER(f)), FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); if (f > 5) { if (f > 6 && f < 16) { if (f != 15 || tmp_field -> type < CFF91 || tmp_field -> type > COMPASS) { hbox = create_hbox (0); gchar * funits[5] ={"Ev", "kcal mol-1", "kJ mol-1", "K B-1", _("DL_POLY internal units")}; str = g_strdup_printf (_("Field parameters *:")); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_field_prop_combo (f, is_moy), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); str = g_strdup_printf (_("* Available parameters with matching chemical species,\n" " %s force field energy related parameters in: %s \n" " if required conversion to FIELD file energy unit will be performed upon selection.\n" " Please note that comments are directly imported from the force field file.\n"), field_acro[tmp_field -> type], (ff_unit == 4) ? _(funits[ff_unit]) : funits[ff_unit]); lab = markup_label (str, -1, 75, 0.5, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); } } hbox = create_hbox (0); str = g_strdup_printf (_("Potential: ")); lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); field_key_combo = create_combo (); for (j=0; j key); break; case SEXTERN: combo_set_active (field_key_combo, tmp_fext -> key); break; default: if (f < MOLIMIT) { combo_set_active (field_key_combo, tmp_fprop -> key); } else { // non nonded combo_set_active (field_key_combo, tmp_fbody -> key); } break; } g_signal_connect (G_OBJECT(field_key_combo), "changed", G_CALLBACK(changed_field_key_combo), GINT_TO_POINTER(f)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, param_box, p_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, param_box, FALSE, FALSE, 5); } else if (f == 3) { hbox = create_hbox (0); str = g_strdup_printf (_(" (1) average distance between the 2 atoms\n\tas measured in the 3D model")); lab = markup_label (str, 320, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } else if (f == 4) { hbox = create_hbox (0); str = g_strdup_printf (_(" (1) average distance between the barycenters\n\tof units 1 and 2 as measured in the model")); lab = markup_label (str, 320, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } } rep.a = f; rep.b = m; g_signal_connect (G_OBJECT(dialog), "response", G_CALLBACK(run_edit_parameters), NULL); show_the_widgets (dialog); if (f == 2) { if (tmp_fshell -> ia[0] < 0 || tmp_fshell -> ia[1] < 1) hide_the_widgets (shell_hbox[2]); if (tmp_fshell -> ia[0] < 0) widget_set_sensitive (shell_hbox[1], FALSE); } dialog_id ++; Event_loop[dialog_id] = g_main_loop_new (NULL, FALSE); g_main_loop_run (Event_loop[dialog_id]); } /*! \fn void update_tersoffs (int id, int key) \brief update non bonded potential \param id potential id \param key potenntial type */ void update_tersoffs (int id, int key) { int i; field_nth_body * bod = tmp_field -> first_body[2]; for (i=0; i nbody[2]; i++) { if (i != id) { if (bod -> key != key) { bod -> key = key; bod -> val = NULL; bod -> val = allocfloat (fvalues[activef][MOLIMIT-4][bod -> key]); } } if (bod -> next != NULL) bod = bod -> next; } if (key && tmp_field -> cross != NULL) { g_free (tmp_field -> cross); tmp_field -> cross = NULL; } } /*! \fn void check_tersoffs (int id, int key) \brief check non bonded potential \param id potential id \param key potential type */ void check_tersoffs (int id, int key) { int i, j; if (change_tersoff && id != -1) update_tersoffs (id, key); if (! key) { if (tmp_field -> cross) { g_free (tmp_field -> cross); tmp_field -> cross = NULL; } if (cross) { tmp_field -> cross = g_malloc0(tmp_field -> nbody[2]*sizeof*tmp_field -> cross); for (i=0; i nbody[2]; i++) { tmp_field -> cross[i] = g_malloc0(tmp_field -> nbody[2]*sizeof*tmp_field -> cross[i]); for (j=0; j nbody[2]; j++) tmp_field -> cross[i][j] = duplicate_double (3, cross[i][j]); } } else { tmp_field -> cross = alloctdouble (tmp_field -> nbody[2], tmp_field -> nbody[2], 3); } } } /*! \fn G_MODULE_EXPORT void edit_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) \brief edit field property callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void edit_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) { int i, j, k; i = GPOINTER_TO_INT (data); gchar * tmp; switch (i) { case 0: if (action == NULL) { tmp_fmol = get_active_field_molecule (row_id); tmp = g_strdup_printf (_("Please enter name for new molecule N°%d"), tmp_field -> molecules); tmp_fmol -> name = g_strdup_printf("MOL-%d", i); tmp = cask (tmp, _("Molecule name:"), 0, tmp_fmol -> name, field_assistant); if (tmp != NULL) { tmp_fmol -> name = g_strdup_printf ("%s", tmp); g_free (tmp); } } else { tmp_fmol = get_active_field_molecule (row_id); tmp = g_strdup_printf (_("Please enter name for molecule N°%d"), row_id+1); tmp = cask (tmp, _("Molecule name:"), 0, tmp_fmol -> name, field_assistant); if (tmp != NULL) { tmp_fmol -> name = g_strdup_printf ("%s", tmp); g_free (tmp); clean_up_molecules_info (FALSE); } } break; default: if (i == MOLIMIT+2) { num_body_d = tmp_field -> nbody[2]; cross = NULL; if (tmp_field -> cross != NULL) { cross = g_malloc0(tmp_field -> nbody[2]*sizeof*cross); for (j=0; j nbody[2]; j++) { cross[j] = g_malloc0(tmp_field -> nbody[2]*sizeof*cross[j]); for (k=0; k nbody[2]; k++) cross[j][k] = duplicate_double (3, tmp_field -> cross[j][k]); } } change_tersoff = FALSE; } edit_parameters (i, row_id); if (i == MOLIMIT+2) check_tersoffs (tmp_fbody -> id, tmp_fbody -> key); update_field_trees (); break; } } /*! \fn G_MODULE_EXPORT void add_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) \brief add field property callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void add_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) { int i, j, k, l, m; gboolean save_it; i = GPOINTER_TO_INT (data); field_molecule * fmol; if (i < MOLIMIT) { j = combo_get_active (combo_mol[i-1]); tmp_fmol = fmol = get_active_field_molecule (j); } if (i == 2) { if (fmol -> first_shell == NULL) { fmol -> first_shell = init_field_shell (fmol -> shells, 0, 0); } else { tmp_fshell = get_active_shell (j, fmol -> shells); tmp_fshell -> next = init_field_shell (fmol -> shells, 0, 0); tmp_fshell -> next -> prev = g_malloc0(sizeof*tmp_fshell -> next -> prev); tmp_fshell -> next -> prev = tmp_fshell; } row_id = fmol -> shells; edit_parameters (i, fmol -> shells); if (tmp_fshell -> ia[0] || tmp_fshell -> ia[1]) { fmol -> shells ++; if (! tmp_fshell -> ia[0] || ! tmp_fshell -> ia[1]) tmp_fshell -> use = FALSE; } else { tmp_fshell = get_active_shell (j, fmol -> shells); tmp_fshell -> next = NULL; if (fmol -> shells == 0) fmol -> first_shell = NULL; } } else if (i == 3) { if (fmol -> first_constraint == NULL) { fmol -> first_constraint = init_field_constraint (fmol -> constraints, 0, 0); } else { tmp_fcons = get_active_constraint (j, fmol -> constraints); tmp_fcons -> next = init_field_constraint (fmol -> constraints, 0, 0); tmp_fcons -> next -> prev = g_malloc0(sizeof*tmp_fcons -> next -> prev); tmp_fcons -> next -> prev = tmp_fcons; } row_id = fmol -> constraints; edit_parameters (i, fmol -> constraints); if (tmp_fcons -> ia[0] || tmp_fcons -> ia[1]) { fmol -> constraints ++; if (! tmp_fcons -> ia[0] || ! tmp_fcons -> ia[1]) tmp_fcons -> use = FALSE; } else { tmp_fcons = get_active_constraint (j, fmol -> constraints); tmp_fcons -> next = NULL; if (fmol -> constraints == 0) fmol -> first_constraint = NULL; } } else if (i == 4) { if (fmol -> first_pmf == NULL) { fmol -> first_pmf = init_field_pmf (fmol -> pmfs, NULL, NULL, NULL); } else { tmp_fpmf = get_active_pmf (j, fmol -> pmfs); tmp_fpmf -> next = init_field_pmf (fmol -> pmfs, NULL, NULL, NULL); tmp_fpmf -> next -> prev = g_malloc0(sizeof*tmp_fpmf -> next -> prev); tmp_fpmf -> next -> prev = tmp_fpmf; } row_id = fmol -> pmfs; edit_parameters (i, fmol -> pmfs); if (tmp_fpmf -> num[0] > 0 || tmp_fpmf -> num[1] > 0) { fmol -> pmfs ++; if (tmp_fpmf -> length == 0.0 || tmp_fpmf -> num[0] == 0 || tmp_fpmf -> num[1] == 0) tmp_fpmf -> use = FALSE; if (tmp_fpmf -> use) { toviz.c = TRUE; select_object (i, fmol -> pmfs, j); } } else { tmp_fpmf = get_active_pmf (j, fmol -> pmfs); tmp_fpmf -> next = NULL; if (fmol -> pmfs == 0) fmol -> first_pmf = NULL; } } else if (i == 5) { if (fmol -> first_rigid == NULL) { fmol -> first_rigid = init_field_rigid (fmol -> rigids, 0, NULL); } else { tmp_frig = get_active_rigid (j, fmol -> rigids); tmp_frig -> next = init_field_rigid (fmol -> rigids, 0, NULL); tmp_frig -> next -> prev = g_malloc0(sizeof*tmp_frig -> next -> prev); tmp_frig -> next -> prev = tmp_frig; } row_id = fmol -> rigids; edit_parameters (i, fmol -> rigids); if (tmp_frig -> num > 0) { fmol -> rigids ++; tmp_frig -> use = TRUE; } else { tmp_frig = get_active_rigid (j, fmol -> rigids); tmp_frig -> next = NULL; if (fmol -> rigids == 0) fmol -> first_rigid = NULL; } } else if (i == 6) { if (fmol -> first_tethered == NULL) { fmol -> first_tethered = init_field_tethered (fmol -> tethered, 0); } else { tmp_ftet = get_active_tethered (j, fmol -> tethered); tmp_ftet -> next = init_field_tethered (fmol -> tethered, 0); tmp_ftet -> next -> prev = g_malloc0(sizeof*tmp_ftet -> next -> prev); tmp_ftet -> next -> prev = tmp_ftet; } row_id = fmol -> tethered; edit_parameters (i, fmol -> tethered); if (tmp_ftet -> num) { fmol -> tethered ++; tmp_ftet -> use = TRUE; } else { tmp_ftet = get_active_tethered (j, fmol -> tethered); tmp_ftet -> next = NULL; if (fmol -> tethered == 0) fmol -> first_tethered = NULL; } } else if (i == SEXTERN) { if (tmp_field -> first_external == NULL) { tmp_field -> first_external = init_field_external (tmp_field -> extern_fields); } else { tmp_fext = get_active_external (tmp_field -> extern_fields-1); tmp_fext -> next = init_field_external (tmp_field -> extern_fields); tmp_fext -> next -> prev = g_malloc0(sizeof*tmp_fext -> next -> prev); tmp_fext -> next -> prev = tmp_fext; } row_id = tmp_field -> extern_fields; edit_parameters (i, tmp_field -> extern_fields); if (tmp_fext -> use && tmp_fext -> key > -1) { tmp_field -> extern_fields ++; } else { tmp_fext = get_active_external (tmp_field -> extern_fields); tmp_fext -> next = NULL; if (tmp_field -> extern_fields == 0) tmp_field -> first_external = NULL; } } else { j = i - MOLIMIT; row_id = tmp_field -> nbody[j]; if (tmp_field -> first_body[j] == NULL) { tmp_field -> first_body[j] = init_field_nth_body (tmp_field -> nbody[j], j, NULL, NULL, NULL); } else { tmp_fbody = get_active_body (tmp_field -> nbody[j], j); tmp_fbody -> next = init_field_nth_body (tmp_field -> nbody[j], j, NULL, NULL, NULL); tmp_fbody -> next -> prev = g_malloc0(sizeof*tmp_fbody -> next -> prev); tmp_fbody -> next -> prev = tmp_fbody; } if (j == 2) { cross = NULL; cross = alloctdouble (tmp_field -> nbody[j]+1, tmp_field -> nbody[j]+1, 3); if (tmp_field -> cross != NULL) { for (k=0; k nbody[j]; k++) { for (l=0; l nbody[j]; l++) { for (m=0; m<3; m++) cross[k][l][m] = cross[l][k][m] = tmp_field -> cross[k][l][m]; } } } else { tmp_field -> cross = alloctdouble (1, 1, 3); } } edit_parameters (i, tmp_field -> nbody[j]); save_it = FALSE; k = body_at (j); for (l=0; l na[l] > -1) save_it = TRUE; if (save_it) { tmp_field -> nbody[j] ++; for (l=0; l na[l] < 0) tmp_fbody -> use = FALSE; if (j == 2) check_tersoffs (tmp_fbody -> id, tmp_fbody -> key); } else { tmp_fbody = get_active_body (tmp_field -> nbody[j], j); tmp_fbody -> next = NULL; if (tmp_field -> nbody[j] == 0) tmp_field -> first_body[j] = NULL; } } update_field_trees (); } /*! \fn G_MODULE_EXPORT void remove_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) \brief remove field property callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void remove_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) { int i, j, k, l, m, n, o; i = GPOINTER_TO_INT (data); gchar * str; if (i < MOLIMIT) { j = combo_get_active (combo_mol[i-1]); tmp_fmol = get_active_field_molecule (j); str = g_strdup_printf (_("Delete %s N°%d from molecule %s, is this correct ?"), _(elemts[i]), row_id+1, tmp_fmol -> name); } else { str = g_strdup_printf (_("Delete %s, is this correct ?"), _(elemts[i])); } selection_confirmed = FALSE; field_question (str, G_CALLBACK(confirm_selection), NULL); g_free (str); if (selection_confirmed) { if (i == 2) { tmp_fshell = get_active_shell (j, row_id); if (tmp_fshell == tmp_fmol -> first_shell) { if (tmp_fshell -> next != NULL) { tmp_fmol -> first_shell = tmp_fmol -> first_shell -> next; tmp_fmol -> first_shell -> prev = NULL; } else { tmp_fmol -> first_shell = NULL; } } else if (tmp_fshell -> next == NULL) { tmp_fshell = tmp_fshell -> prev; tmp_fshell -> next = NULL; } else { tmp_fshell -> prev -> next = tmp_fshell -> next; tmp_fshell -> next -> prev = tmp_fshell -> prev; } tmp_fmol -> shells --; tmp_fshell = tmp_fmol -> first_shell; for (j=0; j shells; j++) { tmp_fshell -> id = j; if (tmp_fshell -> next != NULL) tmp_fshell = tmp_fshell -> next; } } else if (i == 3) { tmp_fcons = get_active_constraint (j, row_id); if (tmp_fcons == tmp_fmol -> first_constraint) { if (tmp_fcons -> next != NULL) { tmp_fmol -> first_constraint = tmp_fmol -> first_constraint -> next; tmp_fmol -> first_constraint -> prev = NULL; } else { tmp_fmol -> first_constraint = NULL; } } else if (tmp_fcons -> next == NULL) { tmp_fcons = tmp_fcons -> prev; tmp_fcons -> next = NULL; } else { tmp_fcons -> prev -> next = tmp_fcons -> next; tmp_fcons -> next -> prev = tmp_fcons -> prev; } tmp_fmol -> constraints --; tmp_fcons = tmp_fmol -> first_constraint; for (j=0; j constraints; j++) { tmp_fcons -> id = j; if (tmp_fcons -> next != NULL) tmp_fcons = tmp_fcons -> next; } } else if (i == 4) { tmp_fpmf = get_active_pmf (j, row_id); if (tmp_fpmf == tmp_fmol -> first_pmf) { if (tmp_fpmf -> next != NULL) { tmp_fmol -> first_pmf = tmp_fmol -> first_pmf -> next; tmp_fmol -> first_pmf -> prev = NULL; } else { tmp_fmol -> first_pmf = NULL; } } else if (tmp_fpmf -> next == NULL) { tmp_fpmf = tmp_fpmf -> prev; tmp_fpmf -> next = NULL; } else { tmp_fpmf -> prev -> next = tmp_fpmf -> next; tmp_fpmf -> next -> prev = tmp_fpmf -> prev; } tmp_fmol -> pmfs --; tmp_fpmf = tmp_fmol -> first_pmf; for (j=0; j pmfs; j++) { tmp_fpmf -> id = j; if (tmp_fpmf -> next != NULL) tmp_fpmf = tmp_fpmf -> next; } } else if (i == 5) { tmp_frig = get_active_rigid (j, row_id); if (tmp_frig == tmp_fmol -> first_rigid) { if (tmp_frig -> next != NULL) { tmp_fmol -> first_rigid = tmp_fmol -> first_rigid -> next; tmp_fmol -> first_rigid -> prev = NULL; } else { tmp_fmol -> first_rigid = NULL; } } else if (tmp_frig -> next == NULL) { tmp_frig = tmp_frig -> prev; tmp_frig -> next = NULL; } else { tmp_frig -> prev -> next = tmp_frig -> next; tmp_frig -> next -> prev = tmp_frig -> prev; } tmp_fmol -> rigids --; tmp_frig = tmp_fmol -> first_rigid; for (j=0; j rigids; j++) { tmp_frig -> id = j; if (tmp_frig -> next != NULL) tmp_frig = tmp_frig -> next; } } else if (i == 6) { tmp_ftet = get_active_tethered (j, row_id); if (tmp_ftet == tmp_fmol -> first_tethered) { if (tmp_ftet -> next != NULL) { tmp_fmol -> first_tethered = tmp_fmol -> first_tethered -> next; tmp_fmol -> first_tethered -> prev = NULL; } else { tmp_fmol -> first_tethered = NULL; } } else if (tmp_ftet -> next == NULL) { tmp_ftet = tmp_ftet -> prev; tmp_ftet -> next = NULL; } else { tmp_ftet -> prev -> next = tmp_ftet -> next; tmp_ftet -> next -> prev = tmp_ftet -> prev; } tmp_fmol -> tethered --; tmp_ftet = tmp_fmol -> first_tethered; for (j=0; j tethered; j++) { tmp_ftet -> id = j; if (tmp_ftet -> next != NULL) tmp_ftet = tmp_ftet -> next; } } else if (i == SEXTERN) { tmp_fext = get_active_external (row_id); if (tmp_fext == tmp_field -> first_external) { if (tmp_fext -> next != NULL) { tmp_field -> first_external = tmp_field -> first_external -> next; tmp_field -> first_external -> prev = NULL; } else { tmp_field -> first_external = NULL; } } else if (tmp_fext -> next == NULL) { tmp_fext = tmp_fext -> prev; tmp_fext -> next = NULL; } else { tmp_fext -> prev -> next = tmp_fext -> next; tmp_fext -> next -> prev = tmp_fext -> prev; } tmp_field -> extern_fields --; tmp_fext = tmp_field -> first_external; for (k=0; k extern_fields; k++) { tmp_fext -> id = k; if (tmp_fext -> next != NULL) tmp_fext = tmp_fext -> next; } } else { j = i - MOLIMIT; tmp_fbody = get_active_body (row_id, j); if (j == 2) { cross = NULL; if (tmp_field -> nbody[j] > 1) { cross = alloctdouble (tmp_field -> nbody[j]-1, tmp_field -> nbody[j]-1, 3); m = -1; for (k=0; k nbody[j]; k++) { if (k != tmp_fbody -> id) { m ++; n = -1; for (l=0; l nbody[j]; l++) { if (l != tmp_fbody -> id) { n ++; for (o=0; o<3; o++) cross[m][n][o] = cross[n][m][o] = tmp_field -> cross[k][l][o]; } } } } } } if (tmp_fbody == tmp_field -> first_body[j]) { if (tmp_fbody -> next != NULL) { tmp_field -> first_body[j] = tmp_field -> first_body[j] -> next; tmp_field -> first_body[j] -> prev = NULL; } else { tmp_field -> first_body[j] = NULL; } } else if (tmp_fbody -> next == NULL) { tmp_fbody = tmp_fbody -> prev; tmp_fbody -> next = NULL; } else { tmp_fbody -> prev -> next = tmp_fbody -> next; tmp_fbody -> next -> prev = tmp_fbody -> prev; } tmp_field -> nbody[j] --; g_free (tmp_fbody); tmp_fbody = tmp_field -> first_body[j]; k = 0; while (tmp_fbody) { tmp_fbody -> id = k; k ++; tmp_fbody = tmp_fbody -> next; } if (j == 2) check_tersoffs (-1, tmp_field -> first_body[j] -> key); } update_field_trees (); } } atomes_1.3.1/src/calc/dl_poly/dlp_mol.c0000664000175000017500000007043615212624223017444 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_mol.c * @short Functions to add / remove molecule(s) to / from the force field * @author Sébastien Le Roux */ /* * This file: 'dlp_mol.c' * * Contains: * - The functions to add / remove molecule(s) to / from the force field * * List of functions: gchar * remove_text (int i, int j, gchar * str); void clean_up_molecules_info (gboolean usel); void set_sensitive_mol (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void clear_field_atoms (field_molecule * fmol, field_atom* at, int mols, int * mol); void molecule_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void merge_all_atoms_to_mol (field_molecule * new_mol, int mstart); void prepare_atoms_to_merge (field_atom* at, field_molecule * new_mol, field_molecule * old_mol); G_MODULE_EXPORT void select_mol (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void run_add_molecule_to_field (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void add_molecule_to_field (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void run_remove_molecule_from_field (GtkDialog * rmol, gint response_id, gpointer data); G_MODULE_EXPORT void remove_molecule_from_field (GSimpleAction * action, GVariant * parameter, gpointer data); field_atom* new_atom_to_merge (int id, field_molecule * fmol); */ #include "dlp_field.h" #include "calc.h" #include "interface.h" #include "glview.h" int active_col; int a_mol, b_mol; int * new_mol; extern ColRGBA init_color (int id, int numid); field_molecule * to_remove; GtkWidget * remove_label; GtkCellRenderer * remove_renderer[5]; GtkTreeViewColumn * remove_col[5]; gboolean removing = FALSE; extern void field_unselect_all (); extern gchar * set_field_atom_name (field_atom* ato, field_molecule * mol); extern void find_atom_id_in_field_molecule (field_molecule * fmol); extern void viz_fragment (field_molecule * fmol, int id, int viz); extern void check_to_visualize_properties (int id); /*! \fn gchar * remove_text (int i, int j, gchar * str) \brief get removal information text \param i -2 = remove field atom, -1 = remove field molecule \param j -1 = remove field molecule, else remove field atom \param str the name of the object to remove */ gchar * remove_text (int i, int j, gchar * str) { switch (i) { case -2: return g_strdup_printf (_("The description of atom %s will be deleted\n" "and merged with the one of the selected field atom.\n" "Field object(s) using atom %s will also be deleted\n" "and the force field parameter(s) will be updated accordingly."), str, str); break; case -1: return g_strdup_printf (_("The description of molecule %s will be deleted\nand merged with the one of the selected molecule."), str); break; default: switch (j) { case -1: return g_strdup_printf (_("The description of molecule %s will be deleted\nand merged with the one of molecule %s"), str, get_active_field_molecule(i) -> name); break; default: return g_strdup_printf (_("The description of atom %s will be deleted\n" "and merged with the one of field atom %s\n" "Field object(s) using atom %s will also be deleted\n" "and the force field parameter(s) will be updated accordingly."), str, get_active_atom(i,j) -> name, str); break; } break; } } /*! \fn void clean_up_molecules_info (gboolean usel) \brief prepare molecule related widgets in the assistant \param usel unselect all atom(s) (yes / no) */ void clean_up_molecules_info (gboolean usel) { int i; for (i=0; i name)); gtk_label_set_use_markup (GTK_LABEL(remove_label), TRUE); } } dint ** atomd_id_save; /*! \fn void clear_field_atoms (field_molecule * fmol, field_atom* at, int mols, int * mol) \brief clean the field atom from a list of atom(s) \param fmol the target fied molecule \param at the field atom to clean, remove specific atom(s) from it \param mols the number of fragment(s) for this molecule \param mol the list of fragment id */ void clear_field_atoms (field_molecule * fmol, field_atom* at, int mols, int * mol) { int i, j, k, l; l = 0; for (i=0; i < at -> num; i++) { k = at -> list[i]; for (j=0; j < mols; j++) { if (tmp_proj -> atoms[0][k].coord[2] == mol[j]) { l ++; } } } int * r_list = allocint (l); int * s_list = allocint (l); int * t_list = allocint (l); l = -1; at -> frozen = 0; for (i=0; i < at -> num; i++) { k = at -> list[i]; for (j=0; j < mols; j++) { if (tmp_proj -> atoms[0][k].coord[2] == mol[j]) { l ++; r_list[l] = k; s_list[l] = at -> list_id[i]; t_list[l] = at -> frozen_id[i]; if (t_list[l]) at -> frozen ++; } } } at -> num = l+1; at -> list = NULL; at -> list = allocint (at -> num); at -> list_id = NULL; at -> list_id = allocint (at -> num); at -> frozen_id = NULL; at -> frozen_id = allocbool (at -> num); for (i=0; i < at -> num; i++) { at -> list[i] = r_list[i]; at -> list_id[i] = s_list[i]; at -> frozen_id[i] = t_list[i]; j = at -> list[i]; k = at -> list_id[i]; for (l=0; l atoms[0][j].coord[2] == mol[l]) { atomd_id_save[k][l].a = at -> id; atomd_id_save[k][l].b = i; } } } g_free (r_list); g_free (s_list); g_free (t_list); } /*! \fn void molecule_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the force field molecule selection tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void molecule_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; gtk_tree_model_get (mod, iter, active_col, & j, -1); gtk_tree_model_get (mod, iter, 0, & i, -1); set_renderer_color (j, renderer, init_color (i-1, num_field_objects)); } /*! \fn G_MODULE_EXPORT void run_add_molecule_to_field (GtkDialog * dialog, gint response_id, gpointer data) \brief add molecule to force field - running the dialog \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_add_molecule_to_field (GtkDialog * dialog, gint response_id, gpointer data) { int i, j, k; int * old_mol = NULL; gchar * str; gboolean done = FALSE; gboolean saveit = FALSE; // Id - Name - Multiplicity - Select // While selected < m apply inactif switch (response_id) { case GTK_RESPONSE_APPLY: if (a_mol > 0 && a_mol < tmp_fmol -> multi) { if (a_mol > 1) { str = g_strdup_printf (_("Fragments N°%d"), new_mol[0]+1); if (a_mol > 2) { for (i=1; i molecules-1) -> next = next_fmol; next_fmol -> prev = get_active_field_molecule(tmp_field -> molecules-1); next_fmol -> id = tmp_field -> molecules; next_fmol -> multi = a_mol; next_fmol -> fragments = NULL; next_fmol -> fragments = allocint (a_mol); for (i=0; i fragments[i] = new_mol[i]; // Atoms_id and field atoms atomd_id_save = g_malloc0(next_fmol-> mol -> natoms*sizeof*atomd_id_save); for (i=0; i mol -> natoms; i++) { atomd_id_save[i] = g_malloc0(next_fmol -> multi*sizeof*atomd_id_save[i]); } tmp_fat = next_fmol -> first_atom; for (i=0; i < next_fmol -> atoms; i++) { clear_field_atoms (next_fmol, tmp_fat, a_mol, new_mol); tmp_fat -> name = g_strdup_printf ("%s", set_field_atom_name (tmp_fat, next_fmol)); if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } g_free (next_fmol -> atoms_id); next_fmol -> atoms_id = NULL; next_fmol -> atoms_id = g_malloc0(next_fmol-> mol -> natoms*sizeof*next_fmol -> atoms_id); for (i=0; i mol -> natoms; i++) { next_fmol -> atoms_id[i] = g_malloc0(next_fmol -> multi*sizeof*next_fmol -> atoms_id[i]); for (j=0; j multi; j++) { next_fmol -> atoms_id[i][j].a = atomd_id_save[i][j].a; next_fmol -> atoms_id[i][j].b = atomd_id_save[i][j].b; } } g_free (atomd_id_save); old_mol = allocint (old_fmol -> multi - a_mol); k = -1; for (i=0; i multi; i++) { saveit = TRUE; for (j=0; j fragments[i]) { saveit = FALSE; break; } } if (saveit) { k++; old_mol[k] = old_fmol -> fragments[i]; } } new_mol = NULL; // Now we deal with atoms_id and the field atoms atomd_id_save = g_malloc0(old_fmol-> mol -> natoms*sizeof*atomd_id_save); for (i=0; i mol -> natoms; i++) { atomd_id_save[i] = g_malloc0((old_fmol -> multi - a_mol)*sizeof*atomd_id_save[i]); } tmp_fat = old_fmol -> first_atom; for (i=0; i < old_fmol -> atoms; i++) { clear_field_atoms (old_fmol, tmp_fat, old_fmol -> multi - a_mol, old_mol); if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } old_fmol -> multi -= a_mol; g_free (old_fmol -> atoms_id); old_fmol -> atoms_id = NULL; old_fmol -> atoms_id = g_malloc0(old_fmol-> mol -> natoms*sizeof*old_fmol -> atoms_id); for (i=0; i mol -> natoms; i++) { old_fmol -> atoms_id[i] = g_malloc0(old_fmol -> multi*sizeof*old_fmol -> atoms_id[i]); for (j=0; j multi; j++) { old_fmol -> atoms_id[i][j].a = atomd_id_save[i][j].a; old_fmol -> atoms_id[i][j].b = atomd_id_save[i][j].b; } } g_free (atomd_id_save); old_fmol -> fragments = NULL; old_fmol -> fragments = allocint (old_fmol -> multi); for (i=0; i multi; i++) old_fmol -> fragments[i] = old_mol[i]; old_mol = NULL; row_id = tmp_field -> molecules; tmp_field -> molecules ++; edit_field_prop (NULL, NULL, GINT_TO_POINTER(0)); clean_up_molecules_info (TRUE); } } break; default: field_unselect_all (); done = TRUE; break; } if (done) { g_free (new_mol); new_mol = NULL; destroy_this_dialog (dialog); } } /*! \fn G_MODULE_EXPORT void add_molecule_to_field (GSimpleAction * action, GVariant * parameter, gpointer data) \brief add molecule to force field - creating the dialog \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void add_molecule_to_field (GSimpleAction * action, GVariant * parameter, gpointer data) { int i; field_object = 0; gchar * str = g_strdup_printf (_("Please select the fragment(s) of the new molecule")); GtkWidget * amol = dialogmodal (str, GTK_WINDOW(field_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(amol), _("Apply"), GTK_RESPONSE_APPLY); GtkWidget * add_tree = NULL; GtkTreeIter iter; GtkTreeViewColumn * mol_col[2]; GtkCellRenderer * mol_cell[2]; gchar * mol_title[2] = {i18n("Fragment"), i18n("Viz.3D & Select")}; gchar * ctype[2]={"text", "active"}; GType col_type[2] = {G_TYPE_INT, G_TYPE_BOOLEAN}; active_col = 1; a_mol = 0; GtkTreeStore * add_model = gtk_tree_store_newv (2, col_type); add_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(add_model)); tmp_fmol = get_active_field_molecule (row_id); for (i=0; i<2; i++) { if (i == 0) { mol_cell[i] = gtk_cell_renderer_text_new (); } else { mol_cell[i] = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(mol_cell[i]), "toggled", G_CALLBACK(select_mol), & add_model); } mol_col[i] = gtk_tree_view_column_new_with_attributes (_(mol_title[i]), mol_cell[i], ctype[i], i, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(add_tree), mol_col[i]); gtk_tree_view_column_set_alignment (mol_col[i], 0.5); if (i == 0) { gtk_tree_view_column_set_cell_data_func (mol_col[i], mol_cell[i], molecule_set_color, NULL, NULL); } } // fill model num_field_objects = tmp_coord-> totcoord[2]; new_mol = NULL; new_mol = allocint (tmp_fmol -> multi); for (i=0; i multi; i++) { gtk_tree_store_append (add_model, & iter, NULL); gtk_tree_store_set (add_model, & iter, 0, tmp_fmol -> fragments[i] + 1, 1, 0, -1); new_mol[i] = -1; } g_object_unref (add_model); gtk_tree_view_expand_all (GTK_TREE_VIEW(add_tree)); i = ((tmp_fmol -> multi+1)*35 < 500) ? (tmp_fmol -> multi+1)*35 : 500; GtkWidget * scrollsets = create_scroll (dialog_get_content_area (amol), 220, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, add_tree); run_this_gtk_dialog (amol, G_CALLBACK(run_add_molecule_to_field), NULL); } /*! \fn void merge_all_atoms_to_mol (field_molecule * new_mol, int mstart) \brief merge all field atoms to another field molecule \param new_mol the field molecule to merge the atom(s) with \param mstart the fragment id to start with */ void merge_all_atoms_to_mol (field_molecule * new_mol, int mstart) { field_atom* fat, * fbt; fat = get_active_atom (new_mol -> id, new_mol -> atoms-1); int i, j, k, l, m, n; for (i=0; i num; i++) { j = fat -> list[i]; k = fat -> list_id[i]; l = new_mol -> atoms_id[k][0].a; fbt = get_active_atom (new_mol -> id, l); fbt -> list[fbt -> num] = j; fbt -> list_id[fbt -> num] = k; m = tmp_proj -> atoms[0][j].coord[2]; for (n=mstart; n multi; n++) { if (new_mol -> fragments[n] == m) { new_mol -> atoms_id[k][n].a = fbt -> id; new_mol -> atoms_id[k][n].b = fbt -> num; break; } } fbt -> num ++; } } /*! \fn void prepare_atoms_to_merge (field_atom* at, field_molecule * new_mol, field_molecule * old_mol) \brief update the data for the newly 'merged' field atom \param at the target field atom \param new_mol the target molecule to merge with \param old_mol the molecule to remove */ void prepare_atoms_to_merge (field_atom* at, field_molecule * new_mol, field_molecule * old_mol) { int i, j; int * saved_list = allocint (at -> num); int * saved_list_id = allocint (at -> num); int * saved_frozen_id = allocbool (at -> num); for (j=0; j < at -> num; j++) { saved_list[j] = at -> list[j]; saved_list_id[j] = at -> list_id[j]; saved_frozen_id[j] = at -> frozen_id[j]; } i = at -> num; i /= (new_mol -> multi - old_mol -> multi); i *= old_mol -> multi; g_free (at -> list); at -> list = allocint (at -> num + i); g_free (at -> list_id); at -> list_id = allocint (at -> num + i); g_free (at -> frozen_id); at -> frozen_id = allocbool (at -> num + i); for (j=0; j< at -> num; j++) { at -> list[j] = saved_list[j]; at -> list_id[j] = saved_list_id[j]; at -> frozen_id[j] = saved_frozen_id[j]; } g_free (saved_list); g_free (saved_list_id); g_free (saved_frozen_id); } /*! \fn field_atom* new_atom_to_merge (int id, field_molecule * fmol) \brief merge field atoms from a field molecule \param id the id of the new field atom \param fmol the field molecule for of the atoms */ field_atom* new_atom_to_merge (int id, field_molecule * fmol) { field_atom* fat, * fbt; fat = g_malloc0(sizeof*fat); fat -> id = id; fat -> sp = -1; fat -> num = fmol -> mol -> natoms * fmol -> multi; fat -> list = allocint (fmol -> mol -> natoms * fmol -> multi); fat -> list_id = allocint (fmol -> mol -> natoms * fmol -> multi); fbt = fmol -> first_atom; int i, j; i = 0; while (fbt != NULL) { for (j=0; j num; j++) { fat -> list[i] = fbt -> list[j]; fat -> list_id[i] = fbt -> list_id[j]; i ++; } fbt = fbt -> next; } return fat; } /*! \fn G_MODULE_EXPORT void run_remove_molecule_from_field (GtkDialog * rmol, gint response_id, gpointer data) \brief remove molecule from force field - running the dialog \param rmol the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_remove_molecule_from_field (GtkDialog * rmol, gint response_id, gpointer data) { int i, j; gboolean done = FALSE; switch (response_id) { case GTK_RESPONSE_APPLY: if (a_mol) { done = TRUE; field_molecule * to_merge = get_active_field_molecule(new_mol[0]); int * old_mol = allocint (to_merge -> multi); for (i=0; i multi; i++) old_mol[i] = to_merge -> fragments[i]; g_free (to_merge -> fragments); to_merge -> fragments = allocint (to_merge -> multi + to_remove -> multi); for (i=0; i multi; i++) to_merge -> fragments[i] = old_mol[i]; old_mol = NULL; for (i=to_merge -> multi; i < to_merge -> multi + to_remove -> multi; i++) { to_merge -> fragments[i] = to_remove -> fragments[i - to_merge -> multi]; } atomd_id_save = g_malloc0(to_merge -> mol -> natoms*sizeof*atomd_id_save); for (i=0; i mol -> natoms; i++) { atomd_id_save[i] = g_malloc0((to_merge -> multi+to_remove -> multi)*sizeof*atomd_id_save[i]); for (j=0; j multi; j++) { atomd_id_save[i][j].a = to_merge -> atoms_id[i][j].a; atomd_id_save[i][j].b = to_merge -> atoms_id[i][j].b; } for (j=to_merge -> multi; j multi+to_remove -> multi; j++) { atomd_id_save[i][j].a = -1; atomd_id_save[i][j].b = -1; } } to_merge -> multi += to_remove -> multi; g_free (to_merge -> atoms_id); to_merge -> atoms_id = g_malloc0(to_merge -> mol -> natoms*sizeof*to_merge -> atoms_id); for (i=0; i mol -> natoms; i++) { to_merge -> atoms_id[i] = g_malloc0(to_merge -> multi*sizeof*to_merge -> atoms_id[i]); for (j=0; j multi; j++) { to_merge -> atoms_id[i][j].a = atomd_id_save[i][j].a; to_merge -> atoms_id[i][j].b = atomd_id_save[i][j].b; } } g_free (atomd_id_save); tmp_fat = get_active_atom (to_merge -> id, to_merge -> atoms -1); tmp_fat -> next = new_atom_to_merge (to_merge -> atoms, to_remove); to_merge -> atoms ++; tmp_fat = to_merge -> first_atom; for (i=0; i < to_merge -> atoms-1; i++) { prepare_atoms_to_merge (tmp_fat, to_merge, to_remove); if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } merge_all_atoms_to_mol (to_merge, to_merge -> multi - to_remove -> multi); tmp_fat = get_active_atom (to_merge -> id, to_merge -> atoms-2); g_free (tmp_fat -> next); tmp_fat -> next = NULL; to_merge -> atoms --; if (to_remove == tmp_field -> first_molecule) { tmp_field -> first_molecule = to_remove -> next; tmp_field -> first_molecule -> prev = NULL; } else { if (to_remove -> next != NULL) { tmp_fmol = to_remove -> prev; tmp_fmol -> next = to_remove -> next; to_remove -> next -> prev = tmp_fmol; } else { to_remove = to_remove -> prev; to_remove -> next = NULL; } } tmp_field -> molecules --; clean_up_molecules_info (TRUE); } break; default: field_unselect_all (); done = TRUE; break; } if (done) destroy_this_dialog (rmol); } /*! \fn G_MODULE_EXPORT void remove_molecule_from_field (GSimpleAction * action, GVariant * parameter, gpointer data) \brief remove molecule from force field - creating the dialog \param action the GAction sending the signal \param parameter GVariant parameter of the GAction, if any \param data the associated data pointer */ G_MODULE_EXPORT void remove_molecule_from_field (GSimpleAction * action, GVariant * parameter, gpointer data) { to_remove = (field_molecule *) data; int i, j; field_object = 0; gchar * str = g_strdup_printf (_("Select the molecule to merge molecule \"%s\" with"), to_remove -> name); GtkWidget * rmol = dialogmodal (str, GTK_WINDOW(field_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(rmol), _("Apply"), GTK_RESPONSE_APPLY); GtkWidget * remove_tree = NULL; GtkTreeIter iter; gchar * mol_title[4] = {i18n("Id."), i18n("Name"), i18n("Multiplicity"), i18n("Viz.3D & Merge with")}; gchar * ctype[4]={"text", "text", "text", "active"}; GType col_type[4] = {G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN}; active_col = 3; a_mol = 0; new_mol = allocint (1); GtkTreeStore * remove_model = gtk_tree_store_newv (4, col_type); remove_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(remove_model)); for (i=0; i<4; i++) { if (i < 3) { remove_renderer[i] = gtk_cell_renderer_text_new (); } else { remove_renderer[i] = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE(remove_renderer[i]), TRUE); g_signal_connect (G_OBJECT(remove_renderer[i]), "toggled", G_CALLBACK(select_mol), & remove_model); } remove_col[i] = gtk_tree_view_column_new_with_attributes (_(mol_title[i]), remove_renderer[i], ctype[i], i, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(remove_tree), remove_col[i]); if (i < 3) { gtk_tree_view_column_set_cell_data_func (remove_col[i], remove_renderer[i], molecule_set_color, NULL, NULL); } else { gtk_tree_view_column_set_cell_data_func (remove_col[i], remove_renderer[i], set_sensitive_mol, NULL, NULL); } } // fill model tmp_fmol = tmp_field -> first_molecule; j = 0; for (i=0; i molecules; i++) { if (tmp_fmol != to_remove && tmp_fmol -> mol -> id == to_remove -> mol -> id) { j ++; gtk_tree_store_append (remove_model, & iter, NULL); gtk_tree_store_set (remove_model, & iter, 0, i+1, 1, tmp_fmol -> name, 2, tmp_fmol -> multi, 3, 0, -1); } if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } num_field_objects = tmp_field -> molecules; g_object_unref (remove_model); gtk_tree_view_expand_all (GTK_TREE_VIEW(remove_tree)); i = ((j+1)*40 < 500) ? (j+1)*40 : 500; GtkWidget * scrollsets = create_scroll (dialog_get_content_area (rmol), 375, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, remove_tree); remove_label = gtk_label_new (remove_text(-1, -1, to_remove -> name)); gtk_label_set_use_markup (GTK_LABEL(remove_label), TRUE); add_box_child_start (GTK_ORIENTATION_VERTICAL, dialog_get_content_area (rmol), remove_label, FALSE, FALSE, 0); run_this_gtk_dialog (rmol, G_CALLBACK(run_remove_molecule_from_field), NULL); } atomes_1.3.1/src/calc/dl_poly/dlp_viz.c0000664000175000017500000007633415212624223017470 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_viz.c * @short functions to handle the visualization events when creating a classical force field * @author Sébastien Le Roux */ /* * This file: 'dlp_viz.c' * * Contains: * - The functions to handle the visualization events when creating a classical force field * * List of functions: int get_field_objects (int id, int jd); gboolean show_field_object (int id, int jd, int kd); void field_selection (int i, int viz, int lab, int aid); void viz_fragment (field_molecule * fmol, int id, int viz); void field_unselect_all (); void visualize_bonds (int viz, int aid, field_atom* at, field_atom* bt); void visualize_angles (int viz, int aid, field_atom* at, field_atom* bt, field_atom* ct); void visualize_dihedrals (int viz, int did, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt); void visualize_imp_inv (int viz, int dih, int iid, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt); void visualize_body (int viz, int bd, field_nth_body * body); void select_object (int id, int jd, int kd); void visualize_single_struct (int id, int jd, int kd, int * ids); void visualize_object (int id, int jd, int kd); void check_to_visualize_properties_for_this_field_mol (int pid, int mol); void check_to_visualize_properties (int pid); void update_mol_tree (int a, int b); G_MODULE_EXPORT void on_toggle_visualize_or_select_object (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void visualize_or_select_all_elements (GtkTreeViewColumn * col, gpointer data); */ #include "dlp_field.h" #include "project.h" #include "glwindow.h" #include "glview.h" tint toviz; extern int is_special[MAXDATA][11]; extern void update_selection_list (atom_selection * at_list, atom * at, gboolean add); extern void init_default_shaders (glwin * view); /*! \fn void field_selection (int i, int viz, int lab, int aid) \brief select / unselect atom \param i the atom id in the model \param viz visualization status (0= hide, 1 = show) \param lab the value to display for the label \param aid the value to use for the color */ void field_selection (int i, int viz, int lab, int aid) { if (viz && tmp_proj -> atoms[0][i].pick[0] != viz) { tmp_view -> picked ++; } else if (! viz && tmp_proj -> atoms[0][i].pick[0] != viz) { tmp_view -> picked --; } tmp_proj -> atoms[0][i].pick[0] = viz; tmp_proj -> atoms[0][i].label[0] = lab; tmp_proj -> atoms[0][i].coord[4] = aid; } /*! \fn void viz_fragment (field_molecule * fmol, int id, int viz) \brief show / hide fragment \param fmol the target field molecule \param id the fragment id \param viz visualization status (0 = hide, 1 = show) */ void viz_fragment (field_molecule * fmol, int id, int viz) { int i; for (i=0; i natomes; i++) { if (tmp_proj -> atoms[0][i].coord[2] == fmol -> fragments[id]) field_selection (i, viz, viz, id); } init_default_shaders (tmp_view); } /*! \fn void field_unselect_all () \brief unselect all atoms */ void field_unselect_all () { int i; for (i=0; i natomes; i++) field_selection (i, FALSE, FALSE, 0); init_default_shaders (tmp_view); } extern gboolean in_bond (int at, int bd[2]); /*! \fn void visualize_bonds (int viz, int aid, field_atom * at, field_atom * bt) \brief show / hide bond / bond restraint \param viz visualization status (0 = hide, 1 = show) \param aid the id of the structural element \param at 1st field atom \param bt 2nd field atom */ void visualize_bonds (int viz, int bid, field_atom* at, field_atom* bt) { int i, j, k, l; for (i=0; i num; i++) { j = at -> list[i]; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == bt -> id) { field_selection (j, viz, FALSE, bid); field_selection (l, viz, FALSE, bid); } } } } /*! \fn void visualize_angles (int viz, int aid, field_atom* at, field_atom* bt, field_atom* ct) \brief show / hide angle / angle restraint \param viz visualization status (0 = hide, 1 = show) \param aid the id of the structural element \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom */ void visualize_angles (int viz, int aid, field_atom* at, field_atom* bt, field_atom* ct) { int i, j, k, l, m, n; for (i=0; i num; i++) { j = at -> list[i]; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == bt -> id) { for (m=0; m atoms[0][l].numv; m++) { n = tmp_proj -> atoms[0][l].vois[m]; if (n != j && tmp_proj -> atoms[0][n].faid == ct -> id) { field_selection (j, viz, FALSE, aid); field_selection (l, viz, FALSE, aid); field_selection (n, viz, FALSE, aid); } } } } } } /*! \fn void visualize_dihedrals (int viz, int did, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt) \brief show / hide dihedral / dihedral restraint \param viz visualization status (0 = hide, 1 = show) \param did the id of the structural element \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom \param dt 4th field atom */ void visualize_dihedrals (int viz, int did, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt) { int i, j, k, l, m, n, o, p; for (i=0; i num; i++) { j = tmp_fat -> list[i]; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == tmp_fbt -> id) { for (m=0; m atoms[0][l].numv; m++) { n = tmp_proj -> atoms[0][l].vois[m]; if (n != j && tmp_proj -> atoms[0][n].faid == tmp_fct -> id) { for (o=0; o atoms[0][n].numv; o++) { p = tmp_proj -> atoms[0][n].vois[o]; if (p != j && p != l && tmp_proj -> atoms[0][p].faid == tmp_fdt -> id) { field_selection (j, viz, FALSE, did); field_selection (l, viz, FALSE, did); field_selection (n, viz, FALSE, did); field_selection (p, viz, FALSE, did); } } } } } } } } /*! \fn void visualize_imp_inv (int viz, int dih, int iid, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt) \brief show / hide improper or inversion \param viz visualization status (0 = hide, 1 = show) \param dih 6 = improper, 7 = inversion \param iid the id of the structural element \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom \param dt 4th field atom */ void visualize_imp_inv (int viz, int dih, int iid, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt) { int i, j, k, l, m, n, o, p; for (i=0; i num; i++) { j = tmp_fat -> list[i]; if ((tmp_proj -> atoms[0][j].numv > 2 && dih == 6) || (tmp_proj -> atoms[0][j].numv == 3 && dih == 7)) { for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == tmp_fbt -> id) { for (m=0; m atoms[0][j].numv; m++) { if (m != k) { n = tmp_proj -> atoms[0][j].vois[m]; if (tmp_proj -> atoms[0][n].faid == tmp_fct -> id) { for (o=0; o atoms[0][j].numv; o++) { if (o != k && o != m) { p = tmp_proj -> atoms[0][j].vois[o]; if (tmp_proj -> atoms[0][p].faid == tmp_fdt -> id) { field_selection (j, viz, FALSE, iid); field_selection (l, viz, FALSE, iid); field_selection (n, viz, FALSE, iid); field_selection (p, viz, FALSE, iid); } } } } } } } } } } } /*! \fn void visualize_body (int viz, int bd, field_nth_body * body) \brief show / hide non bonded interaction \param viz visualization status (0 = hide, 1 = show) \param bd the type of non bonded interaction \param body the target non bonded interaction */ void visualize_body (int viz, int bd, field_nth_body * body) { int h, i, j, k, l; l = body_at (body -> bd); for (h=0; h na[h]; i++) { tmp_fat = get_active_atom (body -> ma[h][i], body -> a[h][i]); for (j=0; j < tmp_fat -> num; j++) { k = tmp_fat -> list[j]; field_selection (k, viz, viz, bd); } } } } /*! \fn int get_field_objects (int id, int jd) \brief get the number of this type of field object \param id the tyoe of field object \param jd the field molecule id */ int get_field_objects (int id, int jd) { int kd; int i; switch (id) { case -1: kd = 0; for (i=0; i molecules; i++) kd = max(kd, get_active_field_molecule (i) -> mol -> natoms); break; case 0: kd = tmp_field -> molecules; break; case 1: kd = 0; for (i=0; i molecules; i++) kd = max(kd, get_active_field_molecule (i) -> atoms); break; case 2: kd = get_active_field_molecule (jd) -> shells; break; case 3: kd = get_active_field_molecule (jd) -> constraints; break; case 4: kd = get_active_field_molecule (jd) -> pmfs; break; case 5: kd = get_active_field_molecule (jd) -> rigids; break; case 6: kd = get_active_field_molecule (jd) -> tethered; break; case SEXTERN: kd = tmp_field -> extern_fields; break; default: if (id < MOLIMIT) { kd = get_active_field_molecule (jd) -> nstruct[id-7]; } else { kd = tmp_field -> nbody[id - MOLIMIT]; } break; } return kd; } /*! \fn void select_object (int id, int jd, int kd) \brief select structural element \param id the type of structural element \param jd the object id, if any \param kd the field molecule id */ void select_object (int id, int jd, int kd) { int i; field_object = id; num_field_objects = get_field_objects (id, kd); switch (id) { case 2: // Select a core-shell unit in a molecule tmp_fshell = get_active_shell (kd, jd); if (tmp_fshell -> ia[0] < 0 || tmp_fshell -> ia[1] < 0) toviz.c = FALSE; tmp_fshell -> use = toviz.c; break; case 3: // Select a contraint bond in a molecule tmp_fcons = get_active_constraint (kd, jd); if (! tmp_fcons -> ia[0] || ! tmp_fcons -> ia[1]) toviz.c = FALSE; tmp_fcons -> use = toviz.c; break; case 4: // Select a PMF in a molecule tmp_fpmf = get_active_field_molecule (kd) -> first_pmf; for (i=0; i < get_active_field_molecule(kd) -> pmfs; i++) { tmp_fpmf -> use = FALSE; if (tmp_fpmf -> next != NULL) tmp_fpmf = tmp_fpmf -> next; } tmp_fpmf = get_active_pmf (kd, jd); if (tmp_fpmf -> num[0] > 0 && tmp_fpmf -> num[1] > 0) tmp_fpmf -> use = toviz.c; break; case SEXTERN: tmp_fext = tmp_field -> first_external; for (i=0; i < tmp_field -> extern_fields; i++) { tmp_fext -> use = FALSE; if (tmp_fext -> next != NULL) tmp_fext = tmp_fext -> next; } tmp_fext = get_active_external (jd); tmp_fext -> use = toviz.c; break; default: if (id < MOLIMIT) { get_active_struct (id-7, kd, jd) -> def -> use = toviz.c; } else { get_active_body (jd, id - MOLIMIT) -> use = toviz.c; } break; } } /*! \fn void visualize_single_struct (int id, int jd, int kd, int * ids) \brief visualize single structural element \param id the type of structural element \param jd the object id, if any \param kd the field molecule id \param ids the list of atom id in the fragment */ void visualize_single_struct (int id, int jd, int kd, int * ids) { int i, j, k, l, m, n, o, p; int * idat; i = struct_id(id); idat = allocint (i); for (j=0; j atoms_id[k][0].a) -> id; } for (j=0; j multi; l++) { m = tmp_fmol -> atoms_id[k][l].b; n = get_active_atom (kd, tmp_fmol -> atoms_id[k][l].a) -> list[m]; field_selection (n, 0, 0, k); } } g_free (idat); i = ids[0]; j = ids[1]; for (l=0; l< tmp_fmol -> multi; l++) { m = tmp_fmol -> atoms_id[i][l].b; n = get_active_atom (kd, tmp_fmol -> atoms_id[i][l].a) -> list[m]; field_selection (n, toviz.c, 0, jd); o = tmp_fmol -> atoms_id[j][l].b; p = get_active_atom (kd, tmp_fmol -> atoms_id[j][l].a) -> list[o]; field_selection (p, toviz.c, 0, jd); } if (id > 8 && id < 15) { k = ids[2]; for (l=0; l< tmp_fmol -> multi; l++) { o = tmp_fmol -> atoms_id[k][l].b; p = get_active_atom (kd, tmp_fmol -> atoms_id[k][l].a) -> list[o]; field_selection (p, toviz.c, 0, jd); } if (id > 10) { i = ids[3]; for (l=0; l< tmp_fmol -> multi; l++) { o = tmp_fmol -> atoms_id[i][l].b; p = get_active_atom (kd, tmp_fmol -> atoms_id[i][l].a) -> list[o]; field_selection (p, toviz.c, 0, jd); } } } } /*! \fn void visualize_object (int id, int jd, int kd) \brief visualize object and update OpenGL rendering \param id the type of object \param jd the molecule id, if any \param kd the object id, if any */ void visualize_object (int id, int jd, int kd) { int l, m, n, o, p, q, r, s; field_atom* tshell; field_object = id; num_field_objects = get_field_objects (id, kd); switch (id) { case -1: // View molecule atoms id tmp_fmol = get_active_field_molecule (jd); tmp_fmol -> show_id = toviz.c; tmp_fat = tmp_fmol -> first_atom; for (m=0; m < tmp_fmol -> atoms; m++) { for (n=0; n < tmp_fat -> num; n++) { field_selection (tmp_fat -> list[n], toviz.c, toviz.c, tmp_fat -> list_id[n]); } if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } break; case 0: // View an entire molecule tmp_fmol = get_active_field_molecule (jd); tmp_fmol -> show = toviz.c; for (m=0; m multi; m++) { toviz.a = 2; toviz.b = tmp_fmol -> fragments[m]; for (n=0; n natomes; n++) { if (tmp_proj -> atoms[0][n].coord[2] == toviz.b) field_selection (n, toviz.c, toviz.c, jd); } } break; case 1: // View a type of atoms in a molecule tmp_fat = get_active_atom (kd, jd); tmp_fat -> show = toviz.c; for (m=0; m num; m++) { n = tmp_fat -> list[m]; field_selection (n, toviz.c, toviz.c, jd); } break; case 2: // View a type of Core-shell unit in a molecule tmp_fshell = get_active_shell (kd, jd); tmp_fshell -> show = toviz.c; for (m=0; m<2; m++) { if (tmp_fshell -> ia[m]) { n = tmp_fshell -> ia[0]-1; tshell = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[0][n].a); for (o=0; o multi; o++) { p = tmp_fmol -> atoms_id[n][o].b; field_selection (tshell -> list[p], toviz.c, toviz.c, jd); } } } break; case 3: // View a type of bond constraint in a molecule tmp_fcons = get_active_constraint (kd, jd); tmp_fcons -> show = toviz.c; for (l=0; l<2; l++) { if (tmp_fcons -> ia[l]) { for (m=0; m multi; m++) { n = tmp_fmol -> atoms_id[tmp_fcons -> ia[l]-1][m].a; o = tmp_fmol -> atoms_id[tmp_fcons -> ia[l]-1][m].b; p = get_active_atom (tmp_fmol -> id, n) -> list[o]; field_selection (p, toviz.c, toviz.c, jd); } } } break; case 4: tmp_fpmf = get_active_pmf (kd, jd); tmp_fpmf -> show = toviz.c; for (m=0; m<2; m++) { if (tmp_fpmf -> num[m] > 0) { for (n=0; n num[m]; n++) { o = tmp_fpmf -> list[m][n]; for (p=0; p multi;p++) { q = tmp_fmol -> atoms_id[o][p].a; r = tmp_fmol -> atoms_id[o][p].b; s = get_active_atom (tmp_fmol -> id, q) -> list[r]; field_selection (s, toviz.c, toviz.c, jd); } } } } break; case 5: tmp_frig = get_active_rigid (kd, jd); tmp_frig -> show = toviz.c; if (tmp_frig -> num > 0) { for (n=0; n num; n++) { o = tmp_frig -> list[n]; for (p=0; p multi;p++) { q = tmp_fmol -> atoms_id[o][p].a; r = tmp_fmol -> atoms_id[o][p].b; s = get_active_atom (tmp_fmol -> id, q) -> list[r]; field_selection (s, toviz.c, toviz.c, jd); } } } break; case 6: tmp_ftet = get_active_tethered (kd, jd); tmp_ftet -> show = toviz.c; if (tmp_ftet -> num) { o = tmp_ftet -> num-1; p = tmp_fmol -> atoms_id[o][0].a; for (q=0; q multi;q++) { r = tmp_fmol -> atoms_id[o][q].b; s = get_active_atom (tmp_fmol -> id, p) -> list[r]; field_selection (s, toviz.c, toviz.c, jd); } } break; case SEXTERN: break; default: if (id < MOLIMIT) { // View a type of bond / angles / dihedral / improper / inversion in a molecule tmp_fstr = get_active_struct (id-7, kd, jd); tmp_fat = get_active_atom (kd, tmp_fstr -> aid[0]); tmp_fbt = get_active_atom (kd, tmp_fstr -> aid[1]); if (id > 8) tmp_fct = get_active_atom (kd, tmp_fstr -> aid[2]); if (id > 10) tmp_fdt = get_active_atom (kd, tmp_fstr -> aid[3]); tmp_fstr -> def -> show = toviz.c; if (id < 9) { visualize_bonds (tmp_fstr -> def -> show, jd, tmp_fat, tmp_fbt); } else if (id < 11) { visualize_angles (tmp_fstr -> def -> show, jd, tmp_fat, tmp_fbt, tmp_fct); } else if (id < 13) { visualize_dihedrals (tmp_fstr -> def -> show, jd, tmp_fat, tmp_fbt, tmp_fct, tmp_fdt); } else if (id < 15) { visualize_imp_inv (tmp_fstr -> def -> show, id-7, jd, tmp_fat, tmp_fbt, tmp_fct, tmp_fdt); } } else { // View a non-bonded interaction tmp_fbody = get_active_body (jd, id - MOLIMIT); tmp_fbody -> show = toviz.c; visualize_body (tmp_fbody -> show, jd, tmp_fbody); } break; } } /*! \fn void check_to_visualize_properties_for_this_field_mol (int pid, int mol) \brief check if rendering is required for object in molecule \param pid the type of field object \param mol the target field molecule */ void check_to_visualize_properties_for_this_field_mol (int pid, int mol) { int h, i, j; field_prop * propv; h = toviz.c; toviz.c = 1; tmp_fmol = get_active_field_molecule (mol); i = get_field_objects (pid, mol); for (j=0; j 6 && pid < MOLIMIT) { propv = get_active_struct (pid-7, mol, j) -> other; while (propv) { if (propv -> show) visualize_single_struct (pid, j, mol, propv -> aid); propv = propv -> next; } } } toviz.c = h; } /*! \fn void check_to_visualize_properties (int pid) \brief check if it is requried to update rendering \param pid the page number in the assistant */ void check_to_visualize_properties (int pid) { int i, j; i = (pid < MOLIMIT) ? tmp_field -> molecules : 1; for (j=0; j molecules; i++) { if (get_active_field_molecule (i) -> show_id && ! a) { toviz.c = 0; visualize_object (-1, i, 0); check_to_visualize_properties (-1); toviz.c = j; } else if (get_active_field_molecule (i) -> show && a) { toviz.c = 0; visualize_object (0, i, 0); check_to_visualize_properties (0); toviz.c = j; } } if (a) { get_active_field_molecule (b) -> show_id = j; } else { get_active_field_molecule (b) -> show = j; } gtk_tree_store_clear (field_model[0]); init_default_shaders (tmp_view); fill_field_model (field_model[0], 0, -1); } /*! \fn G_MODULE_EXPORT void on_toggle_visualize_or_select_object (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on visualize force field object toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void on_toggle_visualize_or_select_object (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, j, k, l, m, n; int * ids = NULL; tint * dat = (tint * )data; GtkTreeIter iter; gboolean forall; if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { toviz.c = 0; } else { toviz.c = 1; } i = dat -> b; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(field_model[i]), & iter, path); forall = TRUE; if (i > 6 && i < MOLIMIT) { gtk_tree_model_get (GTK_TREE_MODEL(field_model[i]), & iter, 0, & k, -1); if (! k) { gchar * str; forall = FALSE; j = combo_get_active (combo_mol[i-1]); tmp_fmol = get_active_field_molecule (j); l = struct_id(i); ids = allocint (l); if (dat -> c == 0) { field_object = i; num_field_objects = get_field_objects (i, tmp_fmol -> id); } for (m=1; m def; } else { if (tmp_fstr -> other) { tmp_fprop = get_active_prop_using_atoms (tmp_fstr -> other, l, ids); if (! tmp_fprop) { tmp_fprop = tmp_fstr -> other; while (tmp_fprop -> next) tmp_fprop = tmp_fprop -> next; tmp_fprop -> next = duplicate_field_prop (tmp_fstr -> def, i-7); tmp_fprop = tmp_fprop -> next; for (n=0; n aid[n] = ids[n]; } } else { tmp_fstr -> other = duplicate_field_prop (tmp_fstr -> def, i-7); for (n=0; n other -> aid[n] = ids[n]; tmp_fprop = tmp_fstr -> other; } } if (dat -> c) tmp_fprop -> use = toviz.c; if (! dat -> c) tmp_fprop -> show = toviz.c; adjust_field_prop (i-7, l, NULL, ids, tmp_fprop -> key); j = m-1; } else { j = k-1; } } else { gtk_tree_model_get (GTK_TREE_MODEL(field_model[i]), & iter, 0, & k, -1); j = k-1; } if (forall) { k = -1; if (i > 0 && i < MOLIMIT) { k = combo_get_active (combo_mol[i-1]); tmp_fmol = get_active_field_molecule (k); } if (i == 0 && dat -> c == 1) { update_mol_tree (1, j); visualize_object (-1, j, k); check_to_visualize_properties (i); } else if (dat -> c == 0) { if (i == 0) update_mol_tree (0, j); visualize_object (i, j, k); check_to_visualize_properties (i); } else { select_object (i, j, k); } } else if (dat -> c == 0) { k = combo_get_active (combo_mol[i-1]); visualize_single_struct (i, j+1, k, ids); check_to_visualize_properties (i); } if (ids) g_free (ids); if (forall || i == 4 || i == SEXTERN) { gtk_tree_store_clear (field_model[i]); fill_field_model (field_model[i], i, k); } else if (! forall && i > 0 && i != 4 && i != SEXTERN) { for (l=0; l c) break; } gtk_tree_store_set (field_model[i], & iter, l, toviz.c, -1); } } /*! \fn gboolean show_field_object (int id, int jd, int kd) \brief is the field object visible ? \param id the type of object \param jd the object id, if any \param kd the field molecule id, if any */ gboolean show_field_object (int id, int jd, int kd) { gboolean show = FALSE; switch (id) { case -1: show = get_active_field_molecule (jd) -> show; break; case 0: show = get_active_field_molecule (jd) -> show; break; case 1: show = (jd < get_active_field_molecule (kd) -> atoms) ? get_active_atom (kd, jd) -> show : FALSE; break; case 2: show = get_active_shell (kd, jd) -> show; break; case 3: show = get_active_constraint (kd, jd) -> show; break; case 4: show = get_active_pmf (kd, jd) -> show; break; case 5: show = get_active_rigid (kd, jd) -> show; break; case 6: show = get_active_tethered (kd, jd) -> show; break; default: if (id < MOLIMIT) { show = get_active_struct (id-7, kd, jd) -> def -> show; } else { show = get_active_body (jd, id - MOLIMIT) -> show; } break; } return show; } /*! \fn G_MODULE_EXPORT void visualize_or_select_all_elements (GtkTreeViewColumn * col, gpointer data) \brief select all element(s) in the column for visualization \param col the target GtkTreeViewColumn \param data the associated data pointer */ G_MODULE_EXPORT void visualize_or_select_all_elements (GtkTreeViewColumn * col, gpointer data) { int i, j, k, l; tint * dat = (tint *)data; i = dat -> b; j = -1; if (i > 0 && i < MOLIMIT) j = combo_get_active (combo_mol[i-1]); num_field_objects = get_field_objects (i, j); if (i < 7) { switch (i) { case 0: toviz.c = (dat -> c) ? get_active_field_molecule (0) -> show_id : get_active_field_molecule (0) -> show; break; case 1: toviz.c = get_active_field_molecule (j) -> first_atom -> show; break; case 2: toviz.c = (dat -> c) ? get_active_field_molecule (j) -> first_shell -> use : get_active_field_molecule (j) -> first_shell -> show; break; case 3: toviz.c = (dat -> c) ? get_active_field_molecule (j) -> first_constraint -> use : get_active_field_molecule (j) -> first_constraint -> show; break; case 4: toviz.c = (dat -> c) ? get_active_field_molecule (j) -> first_pmf -> use : get_active_field_molecule (j) -> first_pmf -> show; break; case 5: toviz.c = (dat -> c) ? get_active_field_molecule (j) -> first_rigid -> use : get_active_field_molecule (j) -> first_rigid -> show; break; case 6: toviz.c = (dat -> c) ? get_active_field_molecule (j) -> first_tethered-> use : get_active_field_molecule (j) -> first_tethered -> show; break; } toviz.c = ! toviz.c; } else if (i > 6 && i < MOLIMIT) { if (num_field_objects) { tmp_fmol = get_active_field_molecule (j); tmp_fstr = tmp_fmol -> first_struct[i-7]; toviz.c = (dat -> c == 0) ? ! tmp_fstr -> def -> show : ! tmp_fstr -> def -> use; while (tmp_fstr) { if (dat -> c) tmp_fstr -> def -> use = toviz.c; if (! dat -> c) tmp_fstr -> def -> show = toviz.c; if (tmp_fstr -> other) { tmp_fprop = tmp_fstr -> other; while (tmp_fprop) { if (dat -> c) tmp_fprop -> use = toviz.c; if (! dat -> c) tmp_fprop -> show = toviz.c; tmp_fprop = tmp_fprop -> next; } } tmp_fstr = tmp_fstr -> next; } } } else { tmp_fbody = tmp_field -> first_body[i - MOLIMIT]; toviz.c = (dat -> c == 0) ? ! tmp_fbody -> show : ! tmp_fbody -> use; while (tmp_fbody) { if (dat -> c) tmp_fbody -> use = toviz.c; if (! dat -> c) tmp_fbody -> show = toviz.c; tmp_fbody = tmp_fbody -> next; } } if (num_field_objects) { if (i == 0 && dat -> c == 1) { l = num_field_objects; num_field_objects = get_field_objects (-1, j); for (k=0; k c == 0) { for (k=0; k Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_control.c * @short Functions to handle the creation of the DL-POLY CONTROL file * @author Sébastien Le Roux */ /* * This file: 'dlp_control.c' * * Contains: * - The functions to handle the creation of the DL-POLY CONTROL file * * List of functions: G_MODULE_EXPORT void set_order (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_thermo_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void check_nvs (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_nvs (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void check_semi (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_semi (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_thermostat (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_ensemble (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_md_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void show_advance_time_step (GtkButton * but, gpointer data); G_MODULE_EXPORT void set_md_combo (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void check_impact (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_impact (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void show_impact_dialog (GtkButton * but, gpointer data); G_MODULE_EXPORT void set_equi_combo (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_equi_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void check_equi (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_equi (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_out_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void check_out (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_out (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_print_level (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_ana_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void check_ana (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_ana (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_io_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void check_io (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_io (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_io_method (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_elec_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void adjust_precision (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_elec_eval (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void check_elec (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_elec (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_vdw_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_vdw_mix (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void check_vdw (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_vdw (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void check_met (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_met (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_sys_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_sys_restart (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void check_sys (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_sys (GtkToggleButton * but, gpointer data); GtkWidget * create_thermo_options (int ensemble, int thermo); GtkWidget * create_thermo_box (int ensemble); GtkWidget * create_ensemble_box (); GtkWidget * create_md_box (); GtkWidget * create_equi_box (); GtkWidget * create_traj_box (); GtkWidget * create_dump_box (); GtkWidget * create_out_box (); GtkWidget * create_overall_box (); GtkWidget * create_analyze_box (); GtkWidget * create_job_box (); GtkWidget * create_io_box (); GtkWidget * create_misc_box (); GtkWidget * create_elec_param_box (); GtkWidget * create_electro_box (); GtkWidget * create_vdws_box (); GtkWidget * create_metal_box (); GtkWidget * create_sys_box (); GtkWidget * create_restart_box (); GtkWidget * vbox_control (int f); */ #include "dlp_field.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "bind.h" extern ColRGBA init_color (int id, int numid); extern gboolean print_ana (); gchar * celemts[MAXDATC] = {i18n("System information"), i18n("Calculation details"), i18n("Non-bonded interactions"), i18n("Equilibration"), i18n("Thermodynamics"), i18n("Molecular dynamics"), i18n("Output options"), i18n("Computational details")}; #define DLP_ENS 4 #define DLP_ENS_TYPE 10 gchar * md_ensemble[DLP_ENS] = {"NVE", "NVT", "NPT", "NST"}; gchar * md_thermo[DLP_ENS_TYPE] = {"Evans", "Langevin", "Andersen", "Berendsen", "Nosë-Hoover", i18n("Gentle Stochastic"), "DPD", "Martyna-Tuckerman-Klein", i18n("Two temperature model"), i18n("Inhomogeneous Langevin")}; // In the following, 0 = no thermo, > 0 = thermo and num of opts + 1 int md_ens_opt[DLP_ENS][DLP_ENS_TYPE] = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 2, 3, 2, 2, 3, 3, 0, 4, 4}, {0, 3, 0, 3, 3, 0, 0, 3, 0, 0}, {0, 3, 0, 3, 3, 0, 0, 3, 0, 0}}; gchar * opts_nvt[9][3]={{NULL, NULL, NULL}, {i18n("Relaxation speed constant (friction):"), NULL, NULL}, {i18n("Relaxation time:"), i18n("Softness [0.0 - 1.0]:"), NULL}, {i18n("Relaxation constant:"), NULL, NULL}, {i18n("Relaxation constant:"), NULL, NULL}, {i18n("Relaxation constant:"), i18n("Langevin friction:"), NULL}, {i18n("Shardlow's splitting order:"), i18n("Global drag coefficient:"), NULL}, {i18n("Relaxation constant:"), i18n("Enhancement of relaxation constant:"), i18n("Cut-off particle velocity for friction enhancement:")}, {i18n("Relaxation constant:"), i18n("Enhancement of relaxation constant:"), i18n("Cut-off particle velocity for friction enhancement:")}}; gchar * unit_nvt[9][3]={{NULL, NULL, NULL}, {"ps-1", NULL, NULL}, {"ps", NULL, NULL}, {"ps", NULL, NULL}, {"ps", NULL, NULL}, {"ps", "ps-1", NULL}, {NULL, "Dalton ps-1", NULL}, {"ps-1", "ps-1", "Å ps-1"}, {"ps-1", "ps-1", "Å ps-1"}}; gchar * opts_npt_nvs[2][3] = {{i18n("Thermostat relaxation speed constant (friction):"), i18n("Barostat relaxation speed constant (friction):"), NULL}, {i18n("Thermostat relaxation time:"), i18n("Barostat relaxation time:"), i18n("Target surface tension:")}}; gchar * unit_npt_nvs[2][3] = {{"ps-1", "ps-1", NULL}, {"ps", "ps", "dyn cm-1"}}; gchar * extra_nvs[4] = {i18n("Standard"), i18n("Area"), i18n("Tension"), i18n("Orthorhombic")}; GtkWidget * check_nvs_butt[4]; GtkWidget * nvs_label; GtkWidget * nvs_entry; GtkWidget * nvs_unit; GtkWidget * nvs_check[2]; GtkWidget * o_ent_vbox; GtkWidget * o_vbox; GtkWidget * e_vbox; GtkWidget * ens_box; GtkWidget * bath_box; GtkWidget * thermo_option_box; /*! \fn G_MODULE_EXPORT void set_order (GtkComboBox * box, gpointer data) \brief CONTROL file change thermostat order \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_order (GtkComboBox * box, gpointer data) { tmp_field -> thermo_opts[0] = combo_get_active ((GtkWidget *)box); } /*! \fn G_MODULE_EXPORT void set_thermo_param (GtkEntry * res, gpointer data) \brief CONTROL file thermostat update parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_thermo_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i == 9) { if ((v == 0.0 || v >= 1.0) && v != tmp_field -> thermo_opts[i]) { tmp_field -> thermo_opts[i] = v; } else if (v < 1.0 && v != 0.0) { show_warning (_("Target temperature for the pseudo bath must be ≥ 1.0 K,\n" "Alternatively set value to 0.0 K to system temperature."), field_assistant); } } else if (v >= 0.0 && v != tmp_field -> thermo_opts[i]) { tmp_field -> thermo_opts[i] = v; } update_entry_double(res, tmp_field -> thermo_opts[i]); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_nvs (GtkCheckButton * but, gpointer data) \brief CONTROL file thermostat change parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_nvs (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_nvs (GtkToggleButton * but, gpointer data) \brief CONTROL file thermostat change parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_nvs (GtkToggleButton * but, gpointer data) #endif { int i, j; i = GPOINTER_TO_INT(data); tmp_field -> thermo_opts[3] = (double) i; for (j=0; j<2; j++) { widget_set_sensitive (nvs_check[j], FALSE); } for (j=0; j<4; j++) { if (j != i) { if (j == 2) { update_entry_text (GTK_ENTRY(nvs_entry), ""); widget_set_sensitive (nvs_label, FALSE); widget_set_sensitive (nvs_entry, FALSE); widget_set_sensitive (nvs_unit, FALSE); } } else if (j == i && i == 2) { widget_set_sensitive (nvs_label, TRUE); widget_set_sensitive (nvs_entry, TRUE); widget_set_sensitive (nvs_unit, TRUE); update_entry_double (GTK_ENTRY(nvs_entry), 0.0); tmp_field -> thermo_opts[4] = 0.0; widget_set_sensitive (nvs_check[0], TRUE); } else if (j == i && i == 3) { widget_set_sensitive (nvs_check[1], TRUE); } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_semi (GtkCheckButton * but, gpointer data) \brief CONTROL file thermostat change parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_semi (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_semi (GtkToggleButton * but, gpointer data) \brief CONTROL file thermostat change parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_semi (GtkToggleButton * but, gpointer data) #endif { int i = GPOINTER_TO_INT(data); gboolean j = button_get_status ((GtkWidget *)but); tmp_field -> thermo_opts[i] = j; if (i == 6) widget_set_sensitive (bath_box, j); } /*! \fn GtkWidget * create_thermo_options (int ensemble, int thermo) \brief CONTROL file create thermostat option box \param ensemble the thermodynamic ensemble \param thermo the type of thermostat */ GtkWidget * create_thermo_options (int ensemble, int thermo) { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox; GtkWidget * entry; gboolean val; int i, j; switch (ensemble) { case 1: for (i=0; i<3; i++) { if (opts_nvt[thermo][i] != NULL) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(opts_nvt[thermo][i]), 375, -1, 1.0, 0.5), FALSE, FALSE, 50); if (thermo == 6 && i == 0) { GtkWidget * o_combo = create_combo(); combo_text_append (o_combo, "s1"); combo_text_append (o_combo, "s2"); combo_set_active (o_combo, (int)tmp_field -> thermo_opts[i]); g_signal_connect (G_OBJECT (o_combo), "changed", G_CALLBACK(set_order), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, o_combo, FALSE, FALSE, 5); } else { entry = create_entry(G_CALLBACK(set_thermo_param), 100, 10, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), tmp_field -> thermo_opts[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); } if (unit_nvt[thermo][i] != NULL) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(unit_nvt[thermo][i], 20, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } } break; default: for (i=0; i<2; i++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(opts_npt_nvs[(thermo) ? 1 : 0][i]), 410, -1, 1.0, 0.5), FALSE, FALSE, 50); entry = create_entry(G_CALLBACK(set_thermo_param), 100, 10, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), tmp_field -> thermo_opts[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(unit_npt_nvs[(thermo) ? 1 : 0][i], 20, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } if (ensemble == 3) { GtkWidget * hhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hhbox, FALSE, FALSE, 0); GtkWidget * vvbox = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, hhbox, vvbox, FALSE, FALSE, 50); gtk_box_set_homogeneous (GTK_BOX (vvbox), TRUE); for (i=0; i<4; i++) { hbox = create_hbox (5); val = ((int)tmp_field -> thermo_opts[3] == i) ? TRUE : FALSE; #ifdef GTK4 check_nvs_butt[i] = check_button (_(extra_nvs[i]), 100, -1, val, G_CALLBACK(check_nvs), GINT_TO_POINTER(i)); if (i) { gtk_check_button_set_group ((GtkCheckButton *) check_nvs_butt[i], (GtkCheckButton *)check_nvs_butt[0]); } #else if (! i) { check_nvs_butt[i] = radio_button (_(extra_nvs[i]), 100, -1, val, G_CALLBACK(check_nvs), GINT_TO_POINTER(i)); } else { check_nvs_butt[i] = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(check_nvs_butt[0]), _(extra_nvs[i])); } #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_nvs_butt[i], FALSE, FALSE, 20); if (i == 2) { nvs_label = markup_label(_(opts_npt_nvs[1][2]), 150, -1, 0.0, 0.5); widget_set_sensitive (nvs_label, val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, nvs_label, FALSE, FALSE, 0); j = 4; nvs_entry = create_entry(G_CALLBACK(set_thermo_param), 100, 10, FALSE, GINT_TO_POINTER(j)); widget_set_sensitive (nvs_entry, val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, nvs_entry, FALSE, FALSE, 10); if (val) update_entry_double (GTK_ENTRY(nvs_entry), tmp_field -> thermo_opts[4]); nvs_unit = markup_label(unit_npt_nvs[1][2], 50, -1, 0.0, 0.5); widget_set_sensitive (nvs_unit, val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, nvs_unit, FALSE, FALSE, 0); } if (i > 1) { val = (((int)tmp_field -> thermo_opts[3] == i) && tmp_field -> thermo_opts[5] == 1.0) ? TRUE : FALSE; nvs_check[i-2] = check_button(_("Semi-anisotropic constraint"), 200, -1, val, G_CALLBACK(check_semi), GINT_TO_POINTER(5)); widget_set_sensitive (nvs_check[i-2], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, nvs_check[i-2], FALSE, FALSE, 10); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 0); } } break; } return vbox; } /*! \fn G_MODULE_EXPORT void set_thermostat (GtkComboBox * box, gpointer data) \brief CONTROL file change thermostat option \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_thermostat (GtkComboBox * box, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); switch (i) { case 0: tmp_field -> thermostat = combo_get_active ((GtkWidget *)box); for (j=0; j<6; j++) tmp_field -> thermo_opts[j] = 0.0; if (tmp_field -> ensemble) { o_ent_vbox = destroy_this_widget (o_ent_vbox); o_ent_vbox = create_thermo_options (tmp_field -> ensemble, tmp_field -> thermostat); add_box_child_start (GTK_ORIENTATION_VERTICAL, o_vbox, o_ent_vbox, FALSE, FALSE, 0); show_the_widgets (o_ent_vbox); } break; case 1: tmp_field -> thermo_opts[7] = combo_get_active ((GtkWidget *)box); break; } } /*! \fn GtkWidget * create_thermo_box (int ensemble) \brief CONTROL file create thermostat box parameters \param ensemble the target thermodynamic ensemble */ GtkWidget * create_thermo_box (int ensemble) { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Thermostat:"), 100, -1, 0.0, 0.5), FALSE, FALSE, 30); GtkWidget * thermo_box = create_combo(); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, thermo_box, FALSE, FALSE, 0); int i; for (i=0; i thermostat); g_signal_connect (G_OBJECT (thermo_box), "changed", G_CALLBACK(set_thermostat), GINT_TO_POINTER(0)); if (ensemble) { o_vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, o_vbox, FALSE, FALSE, 0); o_ent_vbox = create_thermo_options (ensemble, tmp_field -> thermostat); add_box_child_start (GTK_ORIENTATION_VERTICAL, o_vbox, o_ent_vbox, FALSE, FALSE, 0); } return vbox; } /*! \fn G_MODULE_EXPORT void set_ensemble (GtkComboBox * box, gpointer data) \brief CONTROL file change thermodynamic ensemble parameter \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_ensemble (GtkComboBox * box, gpointer data) { int i; if (tmp_field -> ensemble) { for (i=0; i<4; i++) { check_nvs_butt[i] = destroy_this_widget (check_nvs_butt[i]); } thermo_option_box = destroy_this_widget (thermo_option_box); } tmp_field -> ensemble = combo_get_active ((GtkWidget *)box); tmp_field -> thermostat = 0; for (i=0; i<6; i++) tmp_field -> thermo_opts[i] = 0.0; if (tmp_field -> ensemble) { thermo_option_box = create_thermo_box (tmp_field -> ensemble); show_the_widgets (thermo_option_box); add_box_child_start (GTK_ORIENTATION_VERTICAL, ens_box, thermo_option_box, FALSE, FALSE, 0); } } /*! \fn GtkWidget * create_ensemble_box () \brief CONTROL file create thermodynamic ensemble parameter widgets */ GtkWidget * create_ensemble_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Ensemble:"), 100, -1, 0.0, 0.5), FALSE, FALSE, 30); GtkWidget * ensemble = create_combo (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ensemble, FALSE, FALSE, 0); int i; for (i=0; i ensemble); g_signal_connect (G_OBJECT (ensemble), "changed", G_CALLBACK(set_ensemble), NULL); ens_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, ens_box, FALSE, FALSE, 0); if (tmp_field -> ensemble) { thermo_option_box = create_thermo_box (tmp_field -> ensemble); add_box_child_start (GTK_ORIENTATION_VERTICAL, ens_box, thermo_option_box, FALSE, FALSE, 0); } gtk_widget_set_size_request (vbox, -1, 390); gboolean val = (tmp_field -> thermo_opts[6] == 1.0) ? TRUE : FALSE; bath_box = create_hbox (5); add_box_child_end (vbox, bath_box, FALSE, FALSE, 0); add_box_child_end (vbox, check_button(_("Use pseudo thermal bath"), 100, -1, val, G_CALLBACK(check_semi), GINT_TO_POINTER(6)), FALSE, FALSE, 5); widget_set_sensitive (bath_box, val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, markup_label(_("Thermostat type:"), 150, -1, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * combo = create_combo(); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, combo, FALSE, FALSE, 00); combo_text_append (combo, _("Langevin + Direct")); combo_text_append (combo, "Langevin"); combo_text_append (combo, "Gauss"); combo_text_append (combo, _("Direct")); combo_set_active (combo, (int)tmp_field -> thermo_opts[7]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_thermostat), GINT_TO_POINTER(1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, markup_label(_("Thickness:"), 100, -1, 1.0, 0.5), FALSE, FALSE, 0); GtkWidget * entry = create_entry(G_CALLBACK(set_thermo_param), 100, 10, FALSE, GINT_TO_POINTER(8)); update_entry_double (GTK_ENTRY(entry), tmp_field -> thermo_opts[8]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, markup_label("Å", 30, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, markup_label(_("Target T°:"), 100, -1, 1.0, 0.5), FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_thermo_param), 100, 10, FALSE, GINT_TO_POINTER(9)); update_entry_double (GTK_ENTRY(entry), tmp_field -> thermo_opts[9]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, markup_label("K", 30, -1, 0.0, 0.5), FALSE, FALSE, 5); return vbox; } GtkWidget * step_button; GtkWidget * extra_vbox[2]; GtkWidget * extra_lab[4]; gchar * md_data[6] = {i18n("Target temperature:"), i18n("Verlet integrator:"), i18n("Number of steps:"), i18n("Time step δt:"), i18n("Target pressure:"), ""}; gchar * md_extra[2][4] = {{i18n("Shake iterations limit:"), i18n("Shake tolerance:"), "", ""}, {i18n("Rattle iterations limit:"), i18n("Rattle tolerance:"), i18n("FIQA iterations limit:"), i18n("FIQA quaternions tolerance:")}}; gchar * md_unit[6] = {"K", "", "", "ps", "katms", ""}; gchar * extra_unit[4] = {i18n("cycle(s)"), "", i18n("cycle(s)"), ""}; gchar * dt_data[3] = {i18n("Maximum time step:"), i18n("Maximum distance allowed:"), i18n("Minimum distance allowed:")}; gchar * dt_unit[3] = {"ps", "Å", "Å"}; gchar * md_combo[2][2] = {{i18n("Velocity"), i18n("Leapfrog")}, {i18n("Fixed"), i18n("Variable")}}; /*! \fn G_MODULE_EXPORT void set_md_param (GtkEntry * res, gpointer data) \brief CONTROL file update MD parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_md_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i == 14) { if (v >= 1.0 && v <= tmp_proj -> natomes) { tmp_field -> md_opts[i] = v; } } else if (v >= 0.0 && v != tmp_field -> md_opts[i]) { tmp_field -> md_opts[i] = v; } if (i == 2 || i == 9 || i == 11 || i == 14 || i == 15) { update_entry_int (res, (int)tmp_field -> md_opts[i]); } else { update_entry_double (res, tmp_field -> md_opts[i]); } } /*! \fn G_MODULE_EXPORT void show_advance_time_step (GtkButton * but, gpointer data) \brief CONTROL file advanced time step - creating the dialog \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_advance_time_step (GtkButton * but, gpointer data) { GtkWidget * dialog = dialogmodal (_("Variable time step information"), GTK_WINDOW(field_assistant)); GtkWidget * vbox = dialog_get_content_area (dialog); GtkWidget * hbox; GtkWidget * entry; int i, j; i = 6; for (j=0; j<3; j++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 2); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(dt_data[j]), 250, -1, 1.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_md_param), 100, 10, FALSE, GINT_TO_POINTER(i+j)); update_entry_double (GTK_ENTRY(entry), tmp_field -> md_opts[i+j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(dt_unit[j], 30, -1, 0.0, 0.5), FALSE, FALSE, 5); } run_this_gtk_dialog (dialog, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn G_MODULE_EXPORT void set_md_combo (GtkComboBox * box, gpointer data) \brief CONTROL file change MD parameter \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_md_combo (GtkComboBox * box, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); tmp_field -> md_opts[i] = combo_get_active ((GtkWidget *)box); if (i == 3) widget_set_sensitive (step_button, (int)tmp_field -> md_opts[i]); if (i == 3 && tmp_field -> md_opts[i] == 1.0) show_advance_time_step (NULL, NULL); if (i == 1) { gtk_widget_set_visible (extra_vbox[1], (int)tmp_field -> md_opts[1]); for (j=0 ;j<2; j++) { gtk_label_set_text (GTK_LABEL(extra_lab[2*j]), ((int)tmp_field -> md_opts[i] || 2*j < 2) ? _(md_extra[(int)tmp_field -> md_opts[i]][2*j]) : md_extra[(int)tmp_field -> md_opts[i]][2*j]); gtk_label_set_text (GTK_LABEL(extra_lab[2*j+1]), ((int)tmp_field -> md_opts[i] || 2*j+1 < 2) ? _(md_extra[(int)tmp_field -> md_opts[i]][2*j+1]) : md_extra[(int)tmp_field -> md_opts[i]][2*j+1]); } } } GtkWidget * impact_but; gchar * imp_dir[3] = {"x", "y", "z"}; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_impact (GtkCheckButton * but, gpointer data) \brief CONTROL file particle impact change parameter toggle callback GTK3 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_impact (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_impact (GtkToggleButton * but, gpointer data) \brief CONTROL file particle impact change parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_impact (GtkToggleButton * but, gpointer data) #endif { gboolean i = button_get_status ((GtkWidget *)but); tmp_field -> md_opts[13] = (i) ? 1.0 : 0.0; widget_set_sensitive (impact_but, i); } /*! \fn G_MODULE_EXPORT void show_impact_dialog (GtkButton * but, gpointer data) \brief CONTROL file particle impact - creating the dialog \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_impact_dialog (GtkButton * but, gpointer data) { GtkWidget * dialog = dialogmodal (_("Initiate impact on particle"), GTK_WINDOW(field_assistant)); GtkWidget * vbox = dialog_get_content_area (dialog); GtkWidget * hbox, * hhbox; GtkWidget * entry; int i, j; gchar * str; gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); gchar * imp_info[4] = {i18n("Index of the particle to impact: "), i18n("Time step of impact:"), i18n("Energy of impact:"), i18n("Direction (from center of mass):")}; gchar * imp_unit[2] = {i18n("nth step"), "k eV"}; for (i=0; i<4; i++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 2); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(imp_info[i]), 200, -1, 1.0, 0.5), FALSE, FALSE, 5); if (i < 3) { j = (i < 2) ? 5 : 10; entry = create_entry (G_CALLBACK(set_md_param), j*10, j + j/6, FALSE, GINT_TO_POINTER(i+14)); if (i < 2) { update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> md_opts[i+14]); } else { update_entry_double (GTK_ENTRY(entry), tmp_field -> md_opts[i+14]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); if (! i) { str = g_strdup_printf ("∈ [1-%d]", tmp_proj -> natomes); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 30, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label((i-1) ? imp_unit[i-1] : _(imp_unit[i-1]), 30, -1, 0.0, 0.5), FALSE, FALSE, 0); } } else { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 2); hhbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 50); for (j=0; j<3; j++) { str = g_strdup_printf (_("on %s:"), imp_dir[j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label(str, 50, -1, 1.0, 0.5), FALSE, FALSE, 0); g_free (str); entry = create_entry (G_CALLBACK(set_md_param), 100, 11, FALSE, GINT_TO_POINTER(j+17)); update_entry_double (GTK_ENTRY(entry), tmp_field -> md_opts[j+17]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, entry, FALSE, FALSE, 5); } } } run_this_gtk_dialog (dialog, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn GtkWidget * create_md_box () \brief CONTROL file create molecular dynamics parameter widgets */ GtkWidget * create_md_box () { GtkWidget * vbox = create_vbox (BSEP); gtk_widget_set_size_request (vbox, -1, 450); GtkWidget * hbox; GtkWidget * combo; GtkWidget * entry; int i, j, k, l; l = 0; for (i=0; i<3; i++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); for (j=0; j<2; j++, l++) { k = (j) ? 110 : 150; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label((2*i+j) < 5 ? _(md_data[2*i+j]) :md_data[2*i+j], k, -1, 1.0, 0.5), FALSE, FALSE, 5); if (j) { if (i < 2) { combo = create_combo (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 0); for (k=0; k<2; k++) { combo_text_append (combo, _(md_combo[i][k])); } combo_set_active (combo, 0); gtk_widget_set_size_request (combo, 100, -1); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_md_combo), GINT_TO_POINTER(l)); if (i) { l ++; entry = create_entry (G_CALLBACK(set_md_param), 100, 11, FALSE, GINT_TO_POINTER(l)); update_entry_double (GTK_ENTRY(entry), tmp_field -> md_opts[l]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(md_unit[l-1], 30, -1, 0.0, 0.5), FALSE, FALSE, 0); } } else { step_button = create_button (_("Time step details"), IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(show_advance_time_step), NULL); widget_set_sensitive (step_button, (int)tmp_field -> md_opts[3]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, step_button, FALSE, FALSE, 10); } } else { entry = create_entry (G_CALLBACK(set_md_param), 100, 11, FALSE, GINT_TO_POINTER(l)); if (i == 1 && j == 0) { update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> md_opts[l]); } else { update_entry_double (GTK_ENTRY(entry), tmp_field -> md_opts[l]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(md_unit[2*i+j], 60, -1, 0.0, 0.5), FALSE, FALSE, 0); } } } k = (int)tmp_field -> md_opts[1]; l = 9; gchar * extra_info[2] = {i18n("Bond constraint(s) dynamics:"), i18n("Rotational motion of rigid body(ies):")}; for (i=0; i<2; i++) { extra_vbox[i] = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, extra_vbox[i], FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, extra_vbox[i], markup_label(_(extra_info[i]), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, extra_vbox[i], hbox, FALSE, FALSE, 0); for (j=0; j<2; j++, l++) { extra_lab[2*i+j] = markup_label((k || 2*i+j < 2) ? _(md_extra[k][2*i+j]) : md_extra[k][2*i+j], 150+j*100, -1, 1.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, extra_lab[2*i+j], FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_md_param), 100, 11, FALSE, GINT_TO_POINTER(l)); if (j) { update_entry_double (GTK_ENTRY(entry), tmp_field -> md_opts[l]); } else { update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> md_opts[l]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); if (! j) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(extra_unit[2*i+j]), 30, -1, 0.0, 0.5), FALSE, FALSE, 0); } } gtk_widget_set_visible (extra_vbox[1], (int)tmp_field -> md_opts[1]); j = (int)tmp_field -> md_opts[1]; for (i=0 ;i<2; i++) { gtk_label_set_text (GTK_LABEL(extra_lab[2*i]), (j || 2*i < 2) ?_(md_extra[(int)tmp_field -> md_opts[1]][2*i]) : md_extra[(int)tmp_field -> md_opts[1]][2*i]); gtk_label_set_text (GTK_LABEL(extra_lab[2*i+1]), (j || 2*i+1 < 2) ? _(md_extra[(int)tmp_field -> md_opts[1]][2*i+1]) : md_extra[(int)tmp_field -> md_opts[1]][2*i+1]); } hbox = create_hbox (5); add_box_child_end (vbox, hbox, FALSE, FALSE, 0); gboolean val = (tmp_field -> md_opts[13] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Initiate impact on particle"), 100, -1, val, G_CALLBACK(check_impact), NULL), FALSE, FALSE, 10); impact_but = create_button (_("Impact details"), IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(show_impact_dialog), NULL); widget_set_sensitive (impact_but, val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, impact_but, FALSE, FALSE, 10); return vbox; } GtkWidget * equi_lab[6]; GtkWidget * equi_entry[3]; GtkWidget * equi_box[9]; gchar * equi_info[8]= {i18n("Equilibrate for the first:"), i18n("Scale temperature:"), i18n("Cap forces:"), i18n("Resample the momenta distribution:"), i18n("Minimize system configuration:"), i18n("Optimize system configuration from start:"), i18n("Perform zero temperature (10 K) optimization"), i18n("Include equilibration data in statistics")}; gchar * equi_data[5]= {i18n("Every:"), "fmax=", i18n("During:"), i18n("Minimize:"), i18n("Optimize")}; gchar * equi_unit[3]= {i18n("step(s)"), "kBT / Å", i18n("step(s)")}; gchar * equi_min[3]= {i18n("Force"), i18n("Energy"), i18n("Distance")}; gchar * equi_minu[3]= {"kBT / Å", "", "Å"}; double equi_lim[2][3] = {{1.0, 0.0, 0.000001}, {1000.0, 0.01, 0.1}}; float init_minop[3]={50.0, 0.005, 0.005}; /*! \fn G_MODULE_EXPORT void set_equi_combo (GtkComboBox * box, gpointer data) \brief CONTROL file change equilibration parameter \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_equi_combo (GtkComboBox * box, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data); tmp_field -> equi_opts[i] = combo_get_active ((GtkWidget *)box); j = (i == 9) ? 11 : 14; k = (i == 9) ? 0 : 1; tmp_field -> equi_opts[j] = init_minop[(int)tmp_field -> equi_opts[i]]; update_entry_double (GTK_ENTRY(equi_entry[2*k]), tmp_field -> equi_opts[j]); gtk_label_set_text (GTK_LABEL(equi_lab[4*k]), g_strdup_printf ("%s:", _(equi_min[(int)tmp_field -> equi_opts[i]]))); gtk_label_set_text (GTK_LABEL(equi_lab[4*k+1]), g_strdup_printf ("%s", equi_minu[(int)tmp_field -> equi_opts[i]])); gtk_label_set_use_markup (GTK_LABEL(equi_lab[4*k+1]), TRUE); } /*! \fn G_MODULE_EXPORT void set_equi_param (GtkEntry * res, gpointer data) \brief CONTROL file update equilibration parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_equi_param (GtkEntry * res, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i == 10 || i == 14) { j = (i == 10) ? 9 : 13; if (v >= equi_lim[0][(int)tmp_field -> equi_opts[j]] && v <= equi_lim[1][(int)tmp_field -> equi_opts[j]]) { tmp_field -> equi_opts[i] = v; } else { gchar * str = g_strdup_printf (_("Minimization parameter must ∈ [ %f - %f ]"), equi_lim[0][(int)tmp_field -> equi_opts[j]], equi_lim[1][(int)tmp_field -> equi_opts[j]]); show_warning (str, field_assistant); g_free (str); } } else if (v >= 0.0 && v != tmp_field -> equi_opts[i]) { tmp_field -> equi_opts[i] = v; } if (i == 1 || i == 3 || i == 7 || i == 11) { update_entry_int (res, (int)tmp_field -> equi_opts[i]); } else { update_entry_double (res, tmp_field -> equi_opts[i]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_equi (GtkCheckButton * but, gpointer data) \brief CONTROL file change equilibration parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_equi (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_equi (GtkToggleButton * but, gpointer data) \brief CONTROL file change equilibration parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_equi (GtkToggleButton * but, gpointer data) #endif { int i, k; i = GPOINTER_TO_INT(data); gboolean j = button_get_status ((GtkWidget *)but); k = 2*i + 2*(i/5) + i/6 - i/7; tmp_field -> equi_opts[k] = (j) ? 1.0 : 0.0; if (i < 6) widget_set_sensitive (equi_box[i], j); } /*! \fn GtkWidget * create_equi_box () \brief CONTROL file create equilibration parameter widgets */ GtkWidget * create_equi_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox, * hhbox; GtkWidget * entry; GtkWidget * combo; gboolean val; int i, j, k, l, m; hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); val = (tmp_field -> equi_opts[0] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Equilibrate"), 100, -1, val, G_CALLBACK(check_equi), GINT_TO_POINTER(0)), FALSE, FALSE, 5); equi_box[0] = create_vbox (5); widget_set_sensitive (equi_box[0], val); gtk_box_set_homogeneous (GTK_BOX (equi_box[0]), TRUE); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, equi_box[0], FALSE, FALSE, 0); for (i=0; i<8; i++) { hbox = create_hbox (5); j = 2*i + 2*(i/5) - i/7; k = (i != 2) ? 5 : 10; l = j + 1; add_box_child_start (GTK_ORIENTATION_VERTICAL, equi_box[0], hbox, FALSE, FALSE, 0); if (i < 4) { entry = create_entry (G_CALLBACK(set_equi_param), k*10, k + k/6, FALSE, GINT_TO_POINTER(l)); if (i == 2) { update_entry_double (GTK_ENTRY(entry), tmp_field -> equi_opts[l]); } else { update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> equi_opts[l]); } } if (i) { val = (tmp_field -> equi_opts[j] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(equi_info[i]), 300, -1, val, G_CALLBACK(check_equi), GINT_TO_POINTER(i)), FALSE, FALSE, 5); if (i == 4 || i == 5) { hhbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, equi_box[0], hhbox, FALSE, FALSE, 0); hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, hbox, FALSE, FALSE, 50); } equi_box[i] = create_hbox (5); widget_set_sensitive (equi_box[i], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, equi_box[i], FALSE, FALSE, 5); if (i < 6) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], markup_label((i != 2) ? _(equi_data[i-1]) : equi_data[i-1], 100, -1, 0.8, 0.5), FALSE, FALSE, 0); if (i < 4) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], markup_label((i != 2) ? _(equi_unit[i-1]) : equi_unit[i-1], 100, -1, 0.0, 0.5), FALSE, FALSE, 0); } else if (i < 6) { combo = create_combo(); for (m=0; m<3; m++) combo_text_append (combo, _(equi_min[m])); combo_set_active (combo, (int)tmp_field -> equi_opts[l]); gtk_widget_set_size_request (combo, 100, -1); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_equi_combo), GINT_TO_POINTER(l)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], combo, FALSE, FALSE, 5); for (m=i-4; m<2; m++, l++) { equi_lab[(i-4)*2+2*m] = markup_label((i == 4 && m) ? _(equi_data[0]) : g_strdup_printf ("%s:", _(equi_min[(int)tmp_field -> equi_opts[l]])), 75, -1, 0.8, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], equi_lab[(i-4)*2+2*m], FALSE, FALSE, 0); k = (i == 4 && m) ? 5 : 10; equi_entry[i-4+m] = create_entry (G_CALLBACK(set_equi_param), k*10, k + k/6, FALSE, GINT_TO_POINTER(l+1+m/2)); if (i == 4 && m) { update_entry_int (GTK_ENTRY(equi_entry[i-4+m]), (int)tmp_field -> equi_opts[l+1+m/2]); } else { update_entry_double (GTK_ENTRY(equi_entry[i-4+m]), tmp_field -> equi_opts[l+1+m/2]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], equi_entry[i-4+m], FALSE, FALSE, 5); equi_lab[(i-4)*2+2*m+1] = markup_label((i == 4 && m) ? _(equi_unit[0]) : equi_minu[(int)tmp_field -> equi_opts[l]], 50, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], equi_lab[(i-4)*2+2*m+1], FALSE, FALSE, 0); } } } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(equi_info[i]), 250, -1, 0.8, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label((i != 1) ? _(equi_unit[i]) : equi_unit[i], 100, -1, 0.0, 0.5), FALSE, FALSE, 0); } } return vbox; } gchar * traj_data[4] = {i18n("Defects:"), i18n("Displacements:"), i18n("History:"), i18n("Atom's MSD:")}; gchar * traj_info[4][3] = {{i18n("From step:"), i18n("Every:"), i18n("Site interstitial cutoff:")}, {i18n("From step:"), i18n("Every:"), i18n("Qualifying cutoff:")}, {i18n("From step:"), i18n("Every:"), i18n("Data level:")}, {i18n("From step:"), i18n("Every:"), NULL}}; gchar * traj_level[3]={"0", "1", "2"}; gchar * out_print[3]={i18n("Radial distribution functions (RDFs):"), i18n("Velocity autocorrelation functions (VAFs):"), i18n("Z density profile:")}; GtkWidget * out_hbox[11]; GtkWidget * out_entry[3]; /*! \fn G_MODULE_EXPORT void set_out_param (GtkEntry * res, gpointer data) \brief CONTROL file update output information parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_out_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i == 3 || i == 7 || i == 23) { if (v >= 0.0 && v != tmp_field -> out_opts[i]) { tmp_field -> out_opts[i] = v; } update_entry_double (res, tmp_field -> out_opts[i]); if (i == 23) { update_entry_double (GTK_ENTRY(out_entry[0]), tmp_field -> out_opts[i]); update_entry_double (GTK_ENTRY(out_entry[2]), tmp_field -> out_opts[i]); } } else { if ((int)v != (int)tmp_field -> out_opts[i]) { tmp_field -> out_opts[i] = (int)v; } update_entry_int (res, (int)tmp_field -> out_opts[i]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_out (GtkCheckButton * but, gpointer data) \brief CONTROL file change output information parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_out (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_out (GtkToggleButton * but, gpointer data) \brief CONTROL file change output information parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_out (GtkToggleButton * but, gpointer data) #endif { int i, k; i = GPOINTER_TO_INT(data); gboolean j = button_get_status ((GtkWidget *)but); if (i < 7) { k = 4*i - i/4 - 2*(i/5) - 2*(i/6); tmp_field -> out_opts[k] = (j) ? 1.0 : 0.0; widget_set_sensitive (out_hbox[i], j); } else { tmp_field -> out_opts[i] = (j) ? 1.0 : 0.0; if (i < 29) { k = (i == 21) ? 7 : (i == 24) ? 8 : 9; widget_set_sensitive (out_hbox[k], j); if (i == 24) widget_set_sensitive (out_hbox[10], j); } } } /*! \fn G_MODULE_EXPORT void set_print_level (GtkComboBox * box, gpointer data) \brief CONTROL file change print level \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_print_level (GtkComboBox * box, gpointer data) { tmp_field -> out_opts[12] = combo_get_active ((GtkWidget *)box); } /*! \fn GtkWidget * create_traj_box () \brief CONTROL file create MD trajectory parameter widgets */ GtkWidget * create_traj_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox; GtkWidget * combo; GtkWidget * entry; gboolean val; int i, j, k, l; for (i=0; i<4; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); k = (i < 4) ? 4*i : 15; val = (tmp_field -> out_opts[k] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(traj_data[i]), 150, -1, val, G_CALLBACK(check_out), GINT_TO_POINTER(i)), FALSE, FALSE, 5); out_hbox[i] = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, out_hbox[i], FALSE, FALSE, 0); widget_set_sensitive (out_hbox[i], val); for (j=0; j<3-i/3; j++) { l = (j == 2) ? 150 : 50; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], markup_label((i < 3 || j < 2) ? _(traj_info[i][j]) : traj_info[i][j], l, -1, 1.0, 0.5), FALSE, FALSE, 5); if (i != 2 || j != 2) { l = (j<2) ? 50 : 100; entry = create_entry (G_CALLBACK(set_out_param), l, l/10, FALSE, GINT_TO_POINTER(k+j+1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], entry, FALSE, FALSE, 0); if (j == 2) { update_entry_double (GTK_ENTRY(entry), tmp_field -> out_opts[k+j+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], markup_label("Å", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } else { update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> out_opts[k+j+1]); if (j) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], markup_label(_("step(s)"), 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } } else { combo = create_combo(); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], combo, FALSE, FALSE, 0); for (l=0; l<3; l++) combo_text_append (combo, traj_level[l]); combo_set_active (combo, (int)tmp_field -> out_opts[k+j+1]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_print_level), NULL); } } } return vbox; } /*! \fn GtkWidget * create_dump_box () \brief CONTROL file create dump parameter widgets */ GtkWidget * create_dump_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox; GtkWidget * entry; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Dump restart information every:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_out_param), 50, 6, FALSE, GINT_TO_POINTER(30)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> out_opts[30]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("step(s)"), 50, -1, 0.0, 0.5), FALSE, FALSE, 0); return vbox; } gchar * out_data[3] = {i18n("Print system data:"), i18n("Accumulate statistics data:"), i18n("Rolling average stack:")}; gchar * out_info[3] = {i18n("Every:"), i18n("Every:"), " "}; /*! \fn GtkWidget * create_out_box () \brief CONTROL file create output information widgets */ GtkWidget * create_out_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox; GtkWidget * entry; gboolean val; int i, j; for (i=4; i<7; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); j = 2*(i-4)+15; val = (tmp_field -> out_opts[j] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(out_data[i-4]), 200, -1, val, G_CALLBACK(check_out), GINT_TO_POINTER(i)), FALSE, FALSE, 5); out_hbox[i] = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, out_hbox[i], FALSE, FALSE, 0); widget_set_sensitive (out_hbox[i], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], markup_label((i-4 < 2) ? _(out_info[i-4]) : out_info[i-4], 50, -1, 1.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_out_param), 50, 5, FALSE, GINT_TO_POINTER(j+1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], entry, FALSE, FALSE, 0); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> out_opts[j+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], markup_label(_("step(s)"), 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } return vbox; } /*! \fn GtkWidget * create_overall_box () \brief CONTROL file create overall parameter widgets */ GtkWidget * create_overall_box () { GtkWidget * vbox = create_vbox (5); gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); GtkWidget * hbox, * hhbox; GtkWidget * entry; gboolean val; int i, k, l, m, n; i = 6; for (l=0; l<3; l++) { k = 21 + 3*l; hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); val = (tmp_field -> out_opts[k] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(out_print[l]), 350, -1, val, G_CALLBACK(check_out), GINT_TO_POINTER(k)), FALSE, FALSE, 5); out_hbox[i+l+1] = create_hbox (5); widget_set_sensitive (out_hbox[i+l+1], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, out_hbox[i+l+1], FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i+l+1], markup_label(_("Every:"), 50, -1, 1.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_out_param), 50, 5, FALSE, GINT_TO_POINTER(k+1)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> out_opts[k+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i+l+1], entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i+l+1], markup_label(_("step(s)"), 50, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i+l+1], markup_label(_("Bin size:"), 100, -1, 1.0, 0.5), FALSE, FALSE, 5); m = (l==1) ? k + 2 : 23; n = (l==1) ? 1 : 2; out_entry[l] = create_entry (G_CALLBACK(set_out_param), n*50, n*5, FALSE, GINT_TO_POINTER(m)); if (l != 1) { update_entry_double (GTK_ENTRY(out_entry[l]), tmp_field -> out_opts[m]); } else { update_entry_int (GTK_ENTRY(out_entry[l]), (int)tmp_field -> out_opts[m]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i+l+1], out_entry[l], FALSE, FALSE, 0); if (l != 1) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i+l+1], markup_label("Å", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } if (l == 1) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); out_hbox[10] = create_hbox (0); hhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 0); gtk_widget_set_size_request (hhbox, 330, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, out_hbox[10], FALSE, FALSE, 0); val = (tmp_field -> out_opts[29] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[10], check_button(_("Ignore time-averaging for the VAFs"), 100, -1, val, G_CALLBACK(check_out), GINT_TO_POINTER(29)), FALSE, FALSE, 5); widget_set_sensitive (out_hbox[10], val); } } return vbox; } GtkWidget * ana_box[5]; gchar * ana_info[5]={i18n("All:"), i18n("Bonds:"), i18n("Angles:"), i18n("Dihedrals:"), i18n("Inversions:")}; gchar * ana_param[3]={i18n("Every:"), i18n("Num. δ"), i18n("Cutoff = ")}; /*! \fn G_MODULE_EXPORT void set_ana_param (GtkEntry * res, gpointer data) \brief CONTROL file update analysis parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_ana_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (v >= 0.0 && v != tmp_field -> ana_opts[i]) { tmp_field -> ana_opts[i] = v; } if (i == 3 || i == 7) { update_entry_double (GTK_ENTRY(res), tmp_field -> ana_opts[i]); } else { update_entry_int (GTK_ENTRY(res), (int)tmp_field -> ana_opts[i]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_ana (GtkCheckButton * but, gpointer data) \brief CONTROL file change analysis parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_ana (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_ana (GtkToggleButton * but, gpointer data) \brief CONTROL file change analysis parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_ana (GtkToggleButton * but, gpointer data) #endif { int i, k; i = GPOINTER_TO_INT(data); gboolean j = button_get_status ((GtkWidget *)but); tmp_field -> ana_opts[i] = (j) ? 1.0 : 0.0; switch (i) { case 14: k = 4; break; case 11: k = 3; break; default: k = i / 4; break; } widget_set_sensitive (ana_box[k], j); } /*! \fn GtkWidget * create_analyze_box () \brief CONTROL file create analysis parameter widgets */ GtkWidget * create_analyze_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox; GtkWidget * entry; gboolean val; gchar * str; int i, j; for (i=0; i<5; i++) { hbox = create_hbox (5); j = (i < 3) ? 4*i: 11 + 3*(i-3); val = (tmp_field -> ana_opts[j] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(ana_info[i]), 100, -1, val, G_CALLBACK(check_ana), GINT_TO_POINTER(j)), FALSE, FALSE, 5); ana_box[i] = create_hbox (5); widget_set_sensitive (ana_box[i], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ana_box[i], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], markup_label(_(ana_param[0]), 50, -1, 1.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_ana_param), 50, 5, FALSE, GINT_TO_POINTER(j+1)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> ana_opts[j+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], markup_label(_("step(s)"), 50, -1, 0.0, 0.5), FALSE, FALSE, 0); if (i < 2) { str = g_strdup_printf (_("%sr in [0 : r]"), _(ana_param[1])); } else if (i == 3) { str = g_strdup_printf (_("%s° in [-180 : 180]"), _(ana_param[1])); } else { str = g_strdup_printf (_("%s° in [0 : 180]"), _(ana_param[1])); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], markup_label(str, 160, -1, 1.0, 0.5), FALSE, FALSE, 5); g_free (str); entry = create_entry (G_CALLBACK(set_ana_param), 50, 5, FALSE, GINT_TO_POINTER(j+2)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> ana_opts[j+2]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], entry, FALSE, FALSE, 0); if (i < 2) { str = g_strdup_printf ("δr"); } else { str = g_strdup_printf ("δ°"); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], markup_label(str, 50, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); if (i < 2) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], markup_label(_(ana_param[2]), 50, -1, 1.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_ana_param), 100, 11, FALSE, GINT_TO_POINTER(j+3)); update_entry_double (GTK_ENTRY(entry), tmp_field -> ana_opts[j+3]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], markup_label("Å", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } } return vbox; } GtkWidget * time_box[2]; GtkWidget * io_box[2]; GtkWidget * io_pre; GtkWidget * misc_box; gchar * time_info[2]={i18n("Set job time:"), i18n("Set job closure time:")}; gchar * io_rw_m[4] = {"MPI I/O", "FORTRAN I/O", i18n("Traditional master I/O"), "netCDF I/O"}; gchar * io_info[2] = {i18n("General Input/Output (I/O) read interface:"), i18n("General Input/Output (I/O) write interface:")}; gchar * io_para[4] = {i18n("Reader count:"), i18n("Batch size:"), i18n("Buffer size:"), i18n("// error check")}; gchar * io_pres[2] = {"Float - 32 bit", "Double - 64 bit"}; GtkWidget * io_hp[2][4]; GtkWidget * check_e[2]; /*! \fn G_MODULE_EXPORT void set_io_param (GtkEntry * res, gpointer data) \brief CONTROL file update I/O parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_io_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i < 2) { if (v >= 0.0 && v != tmp_field -> io_opts[2*i+1]) { tmp_field -> io_opts[2*i+1] = v; } update_entry_double (GTK_ENTRY(res), tmp_field -> io_opts[2*i+1]); } else { if (i == 7 || i == 15) { if (v >= 1.0 && v <= 100000000.0) { if (v != tmp_field -> io_opts[i]) { tmp_field -> io_opts[i] = v; } } else { show_warning (_("The batch size or max. number of particles by batch\n" "must ∈ [1 - 10 000 000]"), field_assistant); } } else if (i == 8 || i == 16) { if (v >= 100.0 && v <= 100000.0) { if (v != tmp_field -> io_opts[i]) { tmp_field -> io_opts[i] = v; } } else { show_warning (_("The buffer size or max. number of ASCII line records by batch\nmust ∈ [100 - 100 000]"), field_assistant); } } else if (i == 19 || i == 20 || i == 21) { if (v != tmp_field -> io_opts[i]) { tmp_field -> io_opts[i] = v; } } else if (v > 0.0 && v != tmp_field -> io_opts[i]) { tmp_field -> io_opts[i] = v; } update_entry_int (GTK_ENTRY(res), (int)tmp_field -> io_opts[i]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_io (GtkCheckButton * but, gpointer data) \brief CONTROL file change I/O parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_io (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_io (GtkToggleButton * but, gpointer data) \brief CONTROL file change I/O parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_io (GtkToggleButton * but, gpointer data) #endif { int i, k; i = GPOINTER_TO_INT(data); gboolean j = button_get_status ((GtkWidget *)but); if (i < 2) { tmp_field -> io_opts[2*i] = (j) ? 1.0 : 0.0; widget_set_sensitive (time_box[i], j); } else { tmp_field -> io_opts[i] = (j) ? 1.0 : 0.0; if (i < 18) { k = (i == 4) ? 0 : 1; widget_set_sensitive (io_box[k], j); } else if (i == 18) { widget_set_sensitive (misc_box, j); } } } /*! \fn G_MODULE_EXPORT void set_io_method (GtkComboBox * box, gpointer data) \brief CONTROL file change I/O method \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_io_method (GtkComboBox * box, gpointer data) { int i, j, k; gboolean l; i = GPOINTER_TO_INT(data); j = combo_get_active ((GtkWidget *)box); tmp_field -> io_opts[i] = (double)j; if (i < 12) { k = (i == 5) ? 0 : 1; l = (j == 2) ? FALSE : TRUE; widget_set_sensitive (io_hp[k][0], l); widget_set_sensitive (io_hp[k][2], l); widget_set_sensitive (check_e[k], l); if (i == 11) { l = (j == 3) ? TRUE : FALSE; widget_set_sensitive (io_pre, l); } } } /*! \fn GtkWidget * create_job_box () \brief CONTROL file create job parameter vidgets */ GtkWidget * create_job_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * entry; gboolean val; int i; for (i=0; i<2; i++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); val = (tmp_field -> io_opts[2*i] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(time_info[i]), 200, -1, val, G_CALLBACK(check_io), GINT_TO_POINTER(i)), FALSE, FALSE, 5); time_box[i] = create_hbox (5); widget_set_sensitive (time_box[i], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, time_box[i], FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_io_param), 100, 11, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), tmp_field -> io_opts[i*2+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, time_box[i], entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, time_box[i], markup_label("s", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } return vbox; } /*! \fn GtkWidget * create_io_box () \brief CONTROL file create I/O parameter vidgets */ GtkWidget * create_io_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * combo; GtkWidget * entry; gboolean val; int i, j, k; gboolean l, m; k = 4; for (i=0; i<2; i++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); val = (tmp_field -> io_opts[k] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(io_info[i]), 200, -1, val, G_CALLBACK(check_io), GINT_TO_POINTER(k)), FALSE, FALSE, 5); io_box[i] = create_vbox (5); widget_set_sensitive (io_box[i], val); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, io_box[i], FALSE, FALSE, 0); hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, io_box[i], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Method:"), 100, -1, 1.0, 0.5), FALSE, FALSE, 5); combo = create_combo(); for (j=0; j<4; j++) { combo_text_append(combo, (j == 2) ? _(io_rw_m[j]) : io_rw_m[j]); } k ++; combo_set_active (combo, (int)tmp_field -> io_opts[k]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_io_method), GINT_TO_POINTER(k)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 5); l = tmp_field -> io_opts[k] == 2.0 ? FALSE : TRUE; m = tmp_field -> io_opts[k] == 3.0 ? TRUE : FALSE; if (i) { io_pre = create_hbox(5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, io_pre, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, io_pre, markup_label(_("Real precision:"), 150, -1, 1.0, 0.5), FALSE, FALSE, 5); combo = create_combo(); for (j=0; j<2; j++) combo_text_append(combo, io_pres[j]); k ++; combo_set_active (combo, (int)tmp_field -> io_opts[k]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_io_method), GINT_TO_POINTER(k)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, io_pre, combo, FALSE, FALSE, 5); widget_set_sensitive (io_pre, m); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Type:"), 50, -1, 1.0, 0.5), FALSE, FALSE, 5); combo = create_combo(); combo_text_append (combo, _("Sorted")); combo_text_append (combo, _("Unsorted")); k ++; combo_set_active (combo, (int)tmp_field -> io_opts[k]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_io_method), GINT_TO_POINTER(k)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 5); } hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, io_box[i], hbox, FALSE, FALSE, 0); for (j=0; j<3; j++) { io_hp[i][j] = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, io_hp[i][j], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, io_hp[i][j], markup_label(_(io_para[j]), 100, -1, 1.0, 0.5), FALSE, FALSE, 5); k++; entry = create_entry (G_CALLBACK(set_io_param), 70, 8, FALSE, GINT_TO_POINTER(k)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> io_opts[k]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, io_hp[i][j], entry, FALSE, FALSE, 5); if (j == 1) widget_set_sensitive (io_hp[i][j], l); } k++; check_e[i] = check_button(_(io_para[j]), 50, -1, val, G_CALLBACK(check_io), GINT_TO_POINTER(k)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_e[i], FALSE, FALSE, 20); widget_set_sensitive (check_e[i], l); k ++; } return vbox; } /*! \fn GtkWidget * create_misc_box () \brief CONTROL file create miscalleanous parameter vidgets */ GtkWidget * create_misc_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * entry; gchar * str; gboolean val; int i; hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); val = (tmp_field -> io_opts[18] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Random number generator seeds:"), 200, -1, val, G_CALLBACK(check_io), GINT_TO_POINTER(18)), FALSE, FALSE, 5); misc_box = create_hbox (5); widget_set_sensitive (misc_box, val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, misc_box, FALSE, FALSE, 0); for (i=19; i<22; i++) { str = g_strdup_printf ("n%d", i-18); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, misc_box, markup_label(str, 50, -1, 1.0, 0.5), FALSE, FALSE, 5); g_free (str); entry = create_entry (G_CALLBACK(set_io_param), 70, 10, FALSE, GINT_TO_POINTER(i)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> io_opts[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, misc_box, entry, FALSE, FALSE, 5); } hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); val = (tmp_field -> io_opts[22] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Limits to 2 the number of processors in z direction for slab simulations"), 200, -1, val, G_CALLBACK(check_io), GINT_TO_POINTER(22)), FALSE, FALSE, 5); return vbox; } GtkWidget * elec_box[4]; GtkWidget * pres_spin; gchar * eval_m[10] = {i18n("Direct Coulomb sum"), i18n("Distance dependent dielectric Coulomb sum"), i18n("Ewald sum (auto)"), i18n("Ewald sum"), i18n("Reaction field electrostatics"), i18n("Reaction field with Fennel damping"), i18n("Reaction field with Fennel damping (auto)"), i18n("Force-shifted Coulomb sum"), i18n("Force-shifted Coulomb sum with Fennel damping"), i18n("Force-shifted Coulomb sum with Fennel damping (auto)")}; /*! \fn G_MODULE_EXPORT void set_elec_param (GtkEntry * res, gpointer data) \brief CONTROL file update electrostatic interactions parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_elec_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i == 1) { if (v > 0.0 && v != tmp_field -> elec_opts[i]) { tmp_field -> elec_opts[i] = v; } else if (v < 0.0) { show_warning (_("Cutoff must be > 0.0 Å"), field_assistant); } } else if (i == 3) { if (v > 0.0 && v != tmp_field -> elec_opts[i]) { if (v >= min(0.05, 0.5*tmp_field -> elec_opts[1]/100.0)) { tmp_field -> elec_opts[i] = v; } else { show_warning (_("Padding must be ≥ min(0.05, 0.5%rcut) Å"), field_assistant); } } else if (v < 0.0) { show_warning (_("Padding must be > 0.0 Å"), field_assistant); } } else { if (i != 6 && (v >= 0.0 && v != tmp_field -> elec_opts[i])) { tmp_field -> elec_opts[i] = v; } else if (i == 6) { if (tmp_field -> elec_opts[5] == 2.0 || tmp_field -> elec_opts[5] == 6.0 || tmp_field -> elec_opts[5] == 9.0) { int j = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(pres_spin)); double w = v * pow (10, j); if ((w >= 1e-20 && w <= 0.5) && w != tmp_field -> elec_opts[i]) { tmp_field -> elec_opts[i] = w; w = v; } else if (w < 1e-20 || w > 0.5) { show_warning (_("Precision must ∈ [10-20 - 0.5]"), field_assistant); w = tmp_field -> elec_opts[i] / pow (10, j); } } else if (v >= 0.0 && v != tmp_field -> elec_opts[i]) { tmp_field -> elec_opts[i] = v; } } } if (i == 10) { if (tmp_field -> elec_opts[i] == 0.0) tmp_field -> elec_opts[i] = 1.0; if (tmp_field -> elec_opts[i] > 10.0) tmp_field -> elec_opts[i] = 4.0; update_entry_int (GTK_ENTRY(res), (int)tmp_field -> elec_opts[i]); } else if (i == 7 || i == 8 || i == 9) { update_entry_int (GTK_ENTRY(res), (int)tmp_field -> elec_opts[i]); } else { if (i == 6) { update_entry_double (GTK_ENTRY(res), v); } else { update_entry_double (GTK_ENTRY(res), tmp_field -> elec_opts[i]); } } } /*! \fn G_MODULE_EXPORT void adjust_precision (GtkSpinButton * res, gpointer data) \brief CONTROL file update electrostatic interactions precision spin callback \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void adjust_precision (GtkSpinButton * res, gpointer data) { int powa = gtk_spin_button_get_value_as_int(res); double v = tmp_field -> elec_opts[6]; while (v < 0.1) { v = v*10; } v = v*10; tmp_field -> elec_opts[6] = v * pow(10, powa); } /*! \fn GtkWidget * create_elec_param_box () \brief CONTROL file create electrostatic interactions parameter box */ GtkWidget * create_elec_param_box () { GtkWidget * vbox, * vvbox; GtkWidget * hbox, * hhbox; GtkWidget * entry; vvbox = create_hbox (5); vbox = create_vbox (5); gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, vvbox, vbox, FALSE, FALSE, 50); gchar * dir[3] = {"x:", "y:", "z:"}; if (tmp_field -> elec_opts[5] == 2.0 || tmp_field -> elec_opts[5] == 6.0 || tmp_field -> elec_opts[5] == 9.0) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Precision:"), 180, -1, 0.0, 0.5), FALSE, FALSE, 0); // tmp_field -> elec_opts[6] = 1e-20; entry = create_entry (G_CALLBACK(set_elec_param), 100, 11, FALSE, GINT_TO_POINTER(6)); double v = tmp_field -> elec_opts[6]; int i = -1; while (v < 0.1) { v = v*10; i --; } update_entry_double (GTK_ENTRY(entry), tmp_field -> elec_opts[6] / pow(10,i)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(" x 10-", 5, -1, 0.0, 0.5), FALSE, FALSE, 0); pres_spin = spin_button (G_CALLBACK(adjust_precision), i, -20, -1, 1, 0, 15, NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, pres_spin, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("∈ [10-20 - 0.5]", 50, -1, 0.0, 0.5), FALSE, FALSE, 5); } else if (tmp_field -> elec_opts[5] == 3.0) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Ewald convergence parameter:"), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); // tmp_field -> elec_opts[6] = 1.0; entry = create_entry (G_CALLBACK(set_elec_param), 100, 11, FALSE, GINT_TO_POINTER(6)); update_entry_double (GTK_ENTRY(entry), tmp_field -> elec_opts[6]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Å-1", 50, -1, 0.0, 0.5), FALSE, FALSE, 5); hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Maximum k vector index in directions:"), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); int i; for (i=0; i<3; i++) { hhbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(dir[i], 10, -1, 0.0, 0.5), FALSE, FALSE, 0); // tmp_field -> elec_opts[7+i] = 1.0; entry = create_entry (G_CALLBACK(set_elec_param), 50, 5, FALSE, GINT_TO_POINTER(7+i)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> elec_opts[7+i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); } } else if (tmp_field -> elec_opts[5] == 5.0 || tmp_field -> elec_opts[5] == 8.0) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Fennell damping parameter (α):"), 50, -1, 0.0, 0.5), FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_elec_param), 100, 11, FALSE, GINT_TO_POINTER(6)); update_entry_double (GTK_ENTRY(entry), tmp_field -> elec_opts[6]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Å-1", 50, -1, 0.0, 0.5), FALSE, FALSE, 5); } if (tmp_field -> elec_opts[5] == 2.0 || tmp_field -> elec_opts[5] == 3.0) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Evaluate k-space contribution to the Ewald sum every:"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_elec_param), 50, 5, FALSE, GINT_TO_POINTER(10)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> elec_opts[10]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("step(s)"), 50, -1, 0.0, 0.5), FALSE, FALSE, 5); } return vvbox; } /*! \fn G_MODULE_EXPORT void set_elec_eval (GtkComboBox * box, gpointer data) \brief CONTROL file change electrostatics evaluation method \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_elec_eval (GtkComboBox * box, gpointer data) { tmp_field -> elec_opts[5] = combo_get_active ((GtkWidget *)box); elec_box[3] = destroy_this_widget (elec_box[3]); elec_box[3] = create_elec_param_box (); show_the_widgets (elec_box[3]); add_box_child_start (GTK_ORIENTATION_VERTICAL, elec_box[2], elec_box[3], FALSE, FALSE, 10); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_elec (GtkCheckButton * but, gpointer data) \brief change CONTROL file electrostatics option toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_elec (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_elec (GtkToggleButton * but, gpointer data) \brief change CONTROL file electrostatics option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_elec (GtkToggleButton * but, gpointer data) #endif { int i = GPOINTER_TO_INT(data); gboolean j = button_get_status ((GtkWidget *)but); tmp_field -> elec_opts[i] = (j) ? 1.0 : 0.0; if (! i) widget_set_sensitive (elec_box[j], j); if (i == 2) widget_set_sensitive (elec_box[1], j); } /*! \fn GtkWidget * create_electro_box () \brief CONTROL file create electrostatic interactions parameter vidgets */ GtkWidget * create_electro_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; gboolean val = (tmp_field -> elec_opts[0] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button(_("Evaluate electrostatics interactions"), -1, -1, val, G_CALLBACK(check_elec), GINT_TO_POINTER(0)), FALSE, FALSE, 5); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); elec_box[0] = create_vbox(5); widget_set_sensitive (elec_box[0], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, elec_box[0], FALSE, FALSE, 50); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, elec_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Long range interaction cutoff [rcut]:"), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * entry = create_entry (G_CALLBACK(set_elec_param), 100, 10, FALSE, GINT_TO_POINTER(1)); update_entry_double (GTK_ENTRY(entry), tmp_field -> elec_opts[1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Å", 30, -1, 0.0, 0.5), FALSE, FALSE, 5); val = (tmp_field -> elec_opts[2] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Add padding to rcut:"), 150, -1, val, G_CALLBACK(check_elec), GINT_TO_POINTER(2)), FALSE, FALSE, 0); elec_box[1] = create_hbox(5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, elec_box[1], FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_elec_param), 100, 10, FALSE, GINT_TO_POINTER(3)); update_entry_double (GTK_ENTRY(entry), tmp_field -> elec_opts[3]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, elec_box[1], entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, elec_box[1], markup_label("Å", 50, -1, 0.0, 0.5), FALSE, FALSE, 5); widget_set_sensitive (elec_box[1], val); val = (tmp_field -> elec_opts[4] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_VERTICAL, elec_box[0], check_button(_("Use extended coulombic exclusion"), -1, -1, val, G_CALLBACK(check_elec), GINT_TO_POINTER(4)), FALSE, FALSE, 5); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, elec_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Evaluation method:"), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * combo = create_combo(); int i; for (i=0; i<10; i++) { combo_text_append(combo, _(eval_m[i])); } combo_set_active (combo, (int)tmp_field -> elec_opts[5]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_elec_eval), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 10); elec_box[2] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, elec_box[0], elec_box[2], FALSE, FALSE, 0); elec_box[3] = create_elec_param_box (); add_box_child_start (GTK_ORIENTATION_VERTICAL, elec_box[2], elec_box[3], FALSE, FALSE, 10); return vbox; } GtkWidget * vdw_box[2]; gchar * eval_vdw[6] = {"Lorentz-Berthelot", "Fender-Halsey", "Hogervorst", "Halgren HHG", "Tang-Toennies", i18n("Functional")}; /*! \fn G_MODULE_EXPORT void set_vdw_param (GtkEntry * res, gpointer data) \brief CONTROL file udpate VdW parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_vdw_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i == 1) { if (v > 0.0 && v != tmp_field -> vdw_opts[i]) { tmp_field -> vdw_opts[i] = v; } else if (v < 0.0) { show_warning (_("Cutoff must be > 0.0 Å"), field_assistant); } } update_entry_double (GTK_ENTRY(res), tmp_field -> vdw_opts[i]); } /*! \fn G_MODULE_EXPORT void set_vdw_mix (GtkComboBox * box, gpointer data) \brief CONTROL file change VdW mixing rule \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_vdw_mix (GtkComboBox * box, gpointer data) { tmp_field -> vdw_opts[5] = combo_get_active ((GtkWidget *)box); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_vdw (GtkCheckButton * but, gpointer data) \brief change CONTROL file VdW option toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_vdw (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_vdw (GtkToggleButton * but, gpointer data) \brief change CONTROL file VdW option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_vdw (GtkToggleButton * but, gpointer data) #endif { int i, j; j = GPOINTER_TO_INT(data); i = button_get_status ((GtkWidget *)but); tmp_field -> vdw_opts[j] = (double)i; if (j == 0) widget_set_sensitive (vdw_box[0], i); if (j == 4) widget_set_sensitive (vdw_box[1], i); } /*! \fn GtkWidget * create_vdws_box () \brief CONTROL file create VdW parameter vidgets */ GtkWidget * create_vdws_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; gboolean val = (tmp_field -> vdw_opts[0] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button(_("Evaluate van der Waals interactions"), -1, -1, val, G_CALLBACK(check_vdw), GINT_TO_POINTER(0)), FALSE, FALSE, 5); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); vdw_box[0] = create_vbox(5); gtk_box_set_homogeneous (GTK_BOX (vdw_box[0]), TRUE); widget_set_sensitive (vdw_box[0], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vdw_box[0], FALSE, FALSE, 50); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vdw_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Short range interaction cutoff:"), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * entry = create_entry (G_CALLBACK(set_vdw_param), 100, 10, FALSE, GINT_TO_POINTER(1)); update_entry_double (GTK_ENTRY(entry), tmp_field -> vdw_opts[1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Å", 50, -1, 0.0, 0.5), FALSE, FALSE, 5); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vdw_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Enforce direct calculation of van der Waals interactions"), -1, -1, val, G_CALLBACK(check_vdw), GINT_TO_POINTER(2)), FALSE, FALSE, 5); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vdw_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Apply force-shifting (contributions smoothly fall to zero near rcut)"), -1, -1, val, G_CALLBACK(check_vdw), GINT_TO_POINTER(3)), FALSE, FALSE, 5); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vdw_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Apply mixing rule (when needed and if possible generate cross species interactions)"), -1, -1, val, G_CALLBACK(check_vdw), GINT_TO_POINTER(4)), FALSE, FALSE, 5); vdw_box[1] = create_vbox(5); val = (tmp_field -> vdw_opts[4] == 1.0) ? TRUE : FALSE; widget_set_sensitive (vdw_box[1], val); add_box_child_start (GTK_ORIENTATION_VERTICAL, vdw_box[0], vdw_box[1], FALSE, FALSE, 0); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vdw_box[1], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Mixing rule:"), 200, -1, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * combo = create_combo(); int i; for (i=0; i<6; i++) { combo_text_append(combo, (i == 5) ? _(eval_vdw[i]) : eval_vdw[i]); } combo_set_active (combo, (int)tmp_field -> vdw_opts[5]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_vdw_mix), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 10); return vbox; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_met (GtkCheckButton * but, gpointer data) \brief change CONTROL file metal interactions toggle callback GTK3 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_met (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_met (GtkToggleButton * but, gpointer data) \brief change CONTROL file metal interactions toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_met (GtkToggleButton * but, gpointer data) #endif { int i, j; j = GPOINTER_TO_INT(data); i = button_get_status ((GtkWidget *)but); tmp_field -> met_opts[j] = (double)i; } /*! \fn GtkWidget * create_metal_box () \brief create CONTROL file metal interaction widgets */ GtkWidget * create_metal_box () { GtkWidget * vbox = create_vbox (BSEP); gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); GtkWidget * hbox; gboolean val = (tmp_field -> met_opts[0] == 1.0) ? TRUE : FALSE; hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Enforce direct calculation of metal interactions by explicit potentials, does not work with *EAM* potentials"), -1, 25, val, G_CALLBACK(check_met), GINT_TO_POINTER(0)), FALSE, FALSE, 5); val = (tmp_field -> met_opts[1] == 1.0) ? TRUE : FALSE; hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_("Switch the default embedding functions, F, from F(ρ) to F(√ρ)"), -1, 25, val, G_CALLBACK(check_met), GINT_TO_POINTER(1)), FALSE, FALSE, 5); return vbox; } /*! \fn G_MODULE_EXPORT void set_sys_param (GtkEntry * res, gpointer data) \brief update CONTROL file system option parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_sys_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i == 9) { if (v >= 1.0 && v != tmp_field -> sys_opts[i]) { tmp_field -> sys_opts[i] = v; } else if (v < 1.0) { show_warning (_("Subcelling threshold density must be ≥ 1.0"), field_assistant); } } else if (v >= 0.0 && v != tmp_field -> sys_opts[i]) { tmp_field -> sys_opts[i] = v; } if (i > 10) { update_entry_int (GTK_ENTRY(res), (int)tmp_field -> sys_opts[i]); } else { update_entry_double (GTK_ENTRY(res), tmp_field -> sys_opts[i]); } } GtkWidget * sys_box[4]; gchar * sys_opts[10] = {i18n("Relative dielectric constant εr"), i18n("Allowed local variation of system density:"), i18n("Ignore the particle indices in CONFIG file"), i18n("Ignore strict checks, hide warnings and assume safe simulation parameters"), i18n("Skip detailed topology reporting during read of FIELD file in output"), i18n("Ignore center of mass removal during the calculation"), i18n("Set tolerance for relaxed shell model:"), i18n("Set the subcelling threshold density of particles per link cell:"), i18n("Create an expanded version of the current model:"), i18n("Restart calculation:")}; /*! \fn G_MODULE_EXPORT void set_sys_restart (GtkComboBox * box, gpointer data) \brief change CONTROL file system option \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_sys_restart (GtkComboBox * box, gpointer data) { tmp_field -> sys_opts[15] = combo_get_active ((GtkWidget *)box); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_sys (GtkCheckButton * but, gpointer data) \brief change CONTROL file system option toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_sys (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_sys (GtkToggleButton * but, gpointer data) \brief change CONTROL file system option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_sys (GtkToggleButton * but, gpointer data) #endif { int i, k; i = GPOINTER_TO_INT(data); gboolean j = button_get_status ((GtkWidget *)but); tmp_field -> sys_opts[i] = (j) ? 1.0 : 0.0; if (i > 5) { k = i - 6; if (i == 14) k = 3; widget_set_sensitive (sys_box[k], j); } } /*! \fn GtkWidget * create_sys_box () \brief prepare the DL-POLY CONTROL file system options widgets */ GtkWidget * create_sys_box () { GtkWidget * vbox; GtkWidget * hbox, * hhbox; GtkWidget * entry; gboolean val; hhbox = create_hbox (5); vbox = create_vbox (5); gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, vbox, FALSE, FALSE, 10); int i, j, k; for (i=0; i<9; i++) { hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); if (i < 2) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(sys_opts[i]), 350, -1, 0.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_sys_param), 100, 10, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), tmp_field -> sys_opts[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); if (i) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("%", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } else { j = (i < 7) ? i : (i == 7) ? 8 : 10; val = (tmp_field -> sys_opts[j] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(sys_opts[i]), -1, 25, val, G_CALLBACK(check_sys), GINT_TO_POINTER(i)), FALSE, FALSE, 5); if (i > 5) { sys_box[i-6] = create_hbox(5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sys_box[i-6], FALSE, FALSE, 0); widget_set_sensitive (sys_box[i-6], val); if (i < 8) { entry = create_entry (G_CALLBACK(set_sys_param), 100, 10, FALSE, GINT_TO_POINTER(j+1)); update_entry_double (GTK_ENTRY(entry), tmp_field -> sys_opts[j+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sys_box[i-6], entry, FALSE, FALSE, 10); if (i == 6) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sys_box[i-6], markup_label("D Å ps-2", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } else { for (k=0; k<3; k++) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sys_box[i-6], markup_label(imp_dir[k], 50, -1, 1.0, 0.5), FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_sys_param), 50, 5, FALSE, GINT_TO_POINTER(j+k+1)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> sys_opts[j+k+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sys_box[i-6], entry, FALSE, FALSE, 5); } } } } } return hhbox; } /*! \fn GtkWidget * create_restart_box () \brief prepare the DL-POLY CONTROL file restart widgets */ GtkWidget * create_restart_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); gboolean val = (tmp_field -> sys_opts[14] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(sys_opts[9]), -1, 25, val, G_CALLBACK(check_sys), GINT_TO_POINTER(14)), FALSE, FALSE, 5); sys_box[3] = create_hbox(5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sys_box[3], FALSE, FALSE, 0); widget_set_sensitive (sys_box[3], val); gchar * rtype[3]={i18n("Continue current simulation"), i18n("Start new simulation from older run without temperature reset"), i18n("Start new simulation from older run with temperature reset")}; GtkWidget * combo = create_combo(); int i; for (i=0; i<3; i++) combo_text_append(combo, _(rtype[i])); combo_set_active (combo, (int)tmp_field -> sys_opts[15]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_sys_restart), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sys_box[3], combo, FALSE, FALSE, 20); return vbox; } /*! \fn GtkWidget * vbox_control (int f) \brief crerate DL-POLY option widgets \param f the page number in the CONTROL file section of the DL-POLY input file(s) creation assistant */ GtkWidget * vbox_control (int f) { GtkWidget * vbox; vbox = create_vbox (5); switch (f) { case 0: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Global options:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_sys_box(), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Restart options:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_restart_box(), FALSE, FALSE, 0); break; case 1: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Intra-molecular probability denisty function (PDF) analysis:"), 350, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_analyze_box(), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Overall analysis:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_overall_box(), FALSE, FALSE, 0); break; case 2: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("van der Waals (Non-bonded short range):"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_vdws_box(), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Electrostatics (Non-bonded long range):"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_electro_box(), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Metallic interactions:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_metal_box(), FALSE, FALSE, 0); break; case 3: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Equilibration:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_equi_box(), FALSE, FALSE, 0); break; case 4: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Thermodynamics:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_ensemble_box(), FALSE, FALSE, 0); break; case 5: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Molecular dynamics:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_md_box(), FALSE, FALSE, 0); break; case 6: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Output information:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_out_box(), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Trajectory file(s):"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_traj_box(), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Restart file:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_dump_box(), FALSE, FALSE, 10); break; case 7: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Job options:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_job_box(), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("I/O options:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_io_box(), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Other options:"), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_misc_box(), FALSE, FALSE, 0); break; default: break; } return vbox; } /* 0: System options: 0 = Epsilon 1 = Density variation 2 = no index 3 = no strict 4 = no topology 5 = no vafar 6 = no vom 7 = Set tolerance for rsm ... 8 = ... rsm tolerance 9 = Set subscelling threshold ... 10 = ... subscelling threshold 11 = Create expanded system ... 12 = ... x ... 13 = ... y ... 14 = ... z 15 = Restart calc ... 16 = ... restart type 1: Calc. options: 0 = All PDFs 1 = All: every 2 = All: ndelta 3 = All: cutoff 4 = Bonds PDFs 5 = Bonds: every 6 = Bonds: ndelta 7 = Bonds: cutoff 8 = Angles PDFs 9 = Angles: every 10 = Angles: ndelta 11 = Dihedrals PDFs 12 = Dihedrals: every 13 = Dihedrals: ndelta 14 = Inversions PDFs 15 = Inversions: every 16 = Inversions: ndelta 17 = print pdfs 18 = rdf 19 = every n steps 20 = bin size 21 = print velocity autocorrelation functions 22 = every n steps 23 = print z-dens 24 = every n steps 25 = Job time 26 = Job closure 2: Electro. stat options: 0 = Evaluate (or not) electrostatics 1 = Electrostatics evaluation method 2 = Param 1 3 = Param 2 4 = Param 3 5 = Param 4 3: Equil. options: 0 = Equil 1 = Equi for n steps 2 = Scale temp 3 = Scale temp: every 4 = cap forces 5 = cap: force max 6 = Resample 7 = Resample: during 8 = Minimize 9 = Minimize: string 10 = Minimize: target 11 = Minimize: every 12 = Optimize 13 = Optimize: string 14 = Optimize: target 15 = zero temp MD 16 = collect 4: Thermo options: 0 = Ensemble 1 = Thermostat 2 to 7 = Thermostat options 5: MD options 0 = target temp 1 = integrator 2 = MD steps 3 = Time step type 4 = Time step 5 = Max time step 6 = Max dist. per time step 7 = Min dist. per time step 8 = Target pressure 9 = shake limit 10 = shake tol 11 = FIQA lim 12 = FIQA tol 17 = Initiate impact 18 = particle index 19 = MD step 20 = impact energy 21 = impact x direct 22 = impact y direct 23 = impact z direct 6: Output options: 0 = Write defects trajectory ... 1 = ... start time to dump defects 2 = ... time step to dump defects 3 = ... site interstitial cutoff 4 = write displacements trajectory ... 5 = ... start time to dump displacements 6 = ... time step to dump displacements 7 = ... displacement qualifying cutoff 8 = Write history/trajectory file ... 9 = ... start time to dump trajectory 10 = ... time step to dump trajectory 11 = ... data level [0=coord, 1=0+velo, 2=1+forces] 12 = Write MSDTMP file ... 13 = ... start time to dump trajectory 14 = ... time step to dump trajectory 15 = print data ... 16 = ... every n steps 17 = accumulate stat ... 18 = ... every n step(s) 19 = set rolling avertage stack ... 20 = ... to n time step(s) 21 = Write RDFs ... 22 = ... every n step(s) 23 = ... bin size * 24 = Write VAFs ... 25 = ... every n step(s) 26 = ... bin size 27 = Write z-dens ... 28 = ... every n step(s) 29 = Ignore time average for VAFs 30 = Dump restart every n step(s) */ atomes_1.3.1/src/calc/dl_poly/dlp_field.h0000664000175000017500000004241115212624223017735 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file dlp_field.h * @short Variable declarations for the creation of the DL_POLY input file(s) * @author Sébastien Le Roux */ /* * This header file: 'dlp_field.h' * * Contains: Variable declarations for the creation of the DL_POLY input file(s) */ #ifndef DLP_FIELD_H_ #define DLP_FIELD_H_ #include "global.h" // See DL_POLY user manual for the meaning // of the different parameters, key and values. #define N_FIELDS 21 extern char * field_acro[N_FIELDS]; #define DL_ENERGY 5 #define DL_BONDS 11 #define DL_ANGLES 15 #define DL_DIHEDRAL 8 #define DL_INVERS 6 #define DL_TETH 3 #define DL_VDW 21 #define DL_METALS 9 #define DL_TERSOFFS 2 #define DL_THREEBODY 6 #define DL_FOURBODY 3 #define DL_EXTERNAL 13 #define LA_ENERGY 1 #define LA_BONDS 16 #define LA_ANGLES 19 #define LA_DIHEDRAL 14 #define LA_INVERS 11 #define LA_TETH 0 #define LA_VDW 0 #define LA_METALS 0 #define LA_TERSOFFS 0 #define LA_THREEBODY 0 #define LA_FOURBODY 0 #define LA_EXTERNAL 0 #define FTETH max(DL_TETH,LA_TETH) #define FBONDS max(DL_BONDS,LA_BONDS) #define FANGLES max(DL_ANGLES,LA_ANGLES) #define FDIHEDRAL max(DL_DIHEDRAL,LA_DIHEDRAL) #define FINVERS max(DL_INVERS,LA_INVERS) #define FVDW max(DL_VDW,LA_VDW) #define FMETALS max(DL_METALS,LA_METALS) #define FTERSOFFS max(DL_TERSOFFS,LA_TERSOFFS) #define FTHREEBODY max(DL_THREEBODY,LA_THREEBODY) #define FFOURBODY max(DL_FOURBODY,LA_FOURBODY) #define FEXTERNAL max(DL_EXTERNAL,LA_EXTERNAL) #define DL_BONDS_P 4 #define DL_ANGLES_P 6 #define DL_DIHEDRAL_P 5 #define DL_INVERS_P 3 #define DL_TETH_P 3 #define DL_VDW_P 7 #define DL_METALS_P 9 #define DL_TERSOFFS_P 16 #define DL_THREEBODY_P 5 #define DL_FOURBODY_P 3 #define DL_EXTERNAL_P 6 #define LA_BONDS_P 5 #define LA_ANGLES_P 6 #define LA_DIHEDRAL_P 11 #define LA_INVERS_P 5 #define LA_TETH_P 0 #define LA_VDW_P 0 #define LA_METALS_P 0 #define LA_TERSOFFS_P 0 #define LA_THREEBODY_P 0 #define LA_FOURBODY_P 0 #define LA_EXTERNAL_P 0 #define FTETH_P max(DL_TETH_P,LA_TETH_P) #define FBONDS_P max(DL_BONDS_P,LA_BONDS_P) #define FANGLES_P max(DL_ANGLES_P,LA_ANGLES_P) #define FDIHEDRAL_P max(DL_DIHEDRAL_P,LA_DIHEDRAL_P) #define FINVERS_P max(DL_INVERS_P,LA_INVERS_P) #define FVDW_P max(DL_VDW_P,LA_VDW_P) #define FMETALS_P max(DL_METALS_P,LA_METALS_P) #define FTERSOFFS_P max(DL_TERSOFFS_P,LA_TERSOFFS_P) #define FTHREEBODY_P max(DL_THREEBODY_P,LA_THREEBODY_P) #define FFOURBODY_P max(DL_FOURBODY_P,LA_FOURBODY_P) #define FEXTERNAL_P max(DL_EXTERNAL_P,LA_EXTERNAL_P) #define MOLIMIT 15 #define SEXTERN 20 #define AMBER94 0 #define AMBER96 1 #define AMBER98 2 #define AMBER99 3 #define CHARMM22P 4 #define CHARMM22M 5 #define CHARMM35E 6 #define CHARMM36C 7 #define CHARMM36G 8 #define CHARMM36L 9 #define CHARMM36N 10 #define CHARMM36P 11 #define CHARMM36M 12 #define CHARMMSI 13 #define CVFF 14 #define CVFF_AUG 15 #define CFF91 16 #define PCFF 17 #define COMPASS 18 #define OPLSAAP 19 #define OPLSAAR 20 /*! \enum dlp_atom_types */ enum dlp_atom_types { SPEC_ONLY = 0, /*!< 0 */ // Total coord + spec TOTAL_COORD_AND_SPEC = 1, /*!< 1 */ // Partial coord + spec PARTIAL_COORD_AND_SPEC = 2, /*!< 2 */ OTHER = 3 /*!< 3 */ }; typedef struct field_prop field_prop; struct field_prop { int pid; int fpid; int key; int * aid; float * val; gboolean show; gboolean use; field_prop * next; field_prop * prev; }; typedef struct field_atom field_atom; struct field_atom { int id; int fid; // Id among force field int afid; // Atoms id among force field atoms // Type is Among dlp_atom_types int type; char * name; int num; int sp; float mass; float charge; int frozen; gboolean * frozen_id; gboolean show; // ID of atoms in project file int * list; // ID of atoms for the DL_POLY molecule int * list_id; field_atom* prev; field_atom* next; }; typedef struct field_shell field_shell; struct field_shell { int id; // 0 = select the field atom to CS // 1 = 0= all, 1 = selection int ia[2]; float z; float m; float k2; float k4; gboolean vdw; gboolean show; gboolean use; field_shell * prev; field_shell * next; }; typedef struct field_constraint field_constraint; struct field_constraint { int id; int ia[2]; float av; float length; gboolean show; gboolean use; field_constraint * prev; field_constraint * next; }; typedef struct field_pmf field_pmf; struct field_pmf { int id; float av; float length; int num[2]; int * list[2]; float * weight[2]; gboolean show; gboolean use; field_pmf * prev; field_pmf * next; }; typedef struct field_rigid field_rigid; struct field_rigid { int id; int num; int * list; gboolean show; gboolean use; field_rigid * prev; field_rigid * next; }; typedef struct field_tethered field_tethered; struct field_tethered { int id; int num; int key; float * val; gboolean show; gboolean use; field_tethered * prev; field_tethered * next; }; // See field molecule for details typedef struct field_struct field_struct; struct field_struct { // Struct id (0 = Bonds, 2 = Angles, 4 = dihedrals ...) int st; int id; int num; int * aid; // Field atom id float av; field_prop * def; field_prop * other; field_struct * prev; field_struct * next; }; // Non-bonded interactions follow // N body (Vdw, Metal, Tersoff, 3b, 4b) typedef struct field_nth_body field_nth_body; struct field_nth_body { // Body Id 0=Vdw, 1= Metal ... int bd; int id; int * fpid; int * na; // atom a num int ** ma; // atom a mol id's int ** a; // field atom a id's in mol int key; float * val; gboolean show; gboolean use; field_nth_body * prev; field_nth_body * next; }; typedef struct field_external field_external; struct field_external { int id; int key; float * val; gboolean use; field_external * prev; field_external * next; }; /* simplified atom data structure */ typedef struct field_neighbor field_neighbor; struct field_neighbor { int id; // atom id in molecule/fragment int num; // number of neighbor(s) int * vois; // list of neighbor(s) field_neighbor * prev; field_neighbor * next; }; typedef struct field_molecule field_molecule; struct field_molecule { int id; gchar * name; struct molecule * mol; int multi; int * fragments; dint ** atoms_id; int atoms; field_atom* first_atom; int shells; field_shell * first_shell; int constraints; field_constraint * first_constraint; int pmfs; field_pmf * first_pmf; int rigids; field_rigid * first_rigid; int tethered; field_tethered * first_tethered; // 0 = bonds // 1 = bonds restraints // 2 = angles // 3 = angles restraints // 4 = diehdrals // 5 = torsional restraints // 6 = impropers // 7 = inversions int nstruct[8]; field_struct * first_struct[8]; gboolean show; gboolean show_id; field_molecule * next; field_molecule * prev; }; typedef struct field_object_match field_object_match; struct field_object_match { int id; int obj; int oid; int type; gboolean use; field_object_match * next; field_object_match * prev; }; typedef struct field_data field_data; struct field_data { int key; int ** atoms_z; int ** atoms_id; int npar; float ** param; char ** info; }; extern GtkWidget * field_assistant; extern gchar * celemts[MAXDATC]; extern GtkWidget * vbox_control (int f); extern int selected_aspec; extern gchar * fkeysw[2][16][21]; extern gchar * fnames[2][16][21]; extern int fvalues[2][15][21]; extern char * fvars_teth[2][FTETH][FTETH_P]; extern char * fvars_bond[2][FBONDS][FBONDS_P]; extern char * fvars_angle[2][FANGLES][FANGLES_P]; extern char * fvars_dihedral[2][FDIHEDRAL][FDIHEDRAL_P]; extern char * fvars_inversion[2][FINVERS][FINVERS_P]; extern char * fvars_vdw[2][FVDW][FVDW_P]; extern char * fvars_met[2][FMETALS][FMETALS_P]; extern char * fvars_ters[2][FTERSOFFS][FTERSOFFS_P]; extern char * fvars_tbd[2][FTHREEBODY][FTHREEBODY_P]; extern char * fvars_fbd[2][FFOURBODY][FFOURBODY_P]; extern char * fvars_fext[2][FEXTERNAL][FEXTERNAL_P]; extern float internal_to_other[5]; extern classical_field * tmp_field; extern glwin * tmp_view; extern coord_info * tmp_coord; extern project * tmp_proj; extern field_molecule * tmp_fmol; extern molecule * tmp_mol; extern field_atom* tmp_fat, * tmp_fbt, * tmp_fct, * tmp_fdt; extern field_shell * tmp_fshell; extern field_constraint * tmp_fcons; extern field_pmf * tmp_fpmf; extern field_rigid * tmp_frig; extern field_tethered * tmp_ftet; extern field_prop * tmp_fprop; extern field_struct * tmp_fstr; extern field_nth_body * tmp_fbody; extern field_nth_body * comp_fbody; extern field_external * tmp_fext; extern int row_id; extern tint toviz; extern int field_v[MAXDATA]; extern GtkWidget * mol_box[MOLIMIT-1]; extern GtkWidget * combo_mol[MOLIMIT-1]; extern GtkTreeStore * field_model[MAXDATA]; extern GtkWidget * field_tree[MAXDATA]; extern GtkWidget * mol_num_label; extern GtkTreeIter field_iter; extern gboolean afp[MAXDATA]; extern int field_object; extern gboolean field_color; extern int num_field_objects; extern int saved_label_format[2]; extern int struct_id (int f); extern int body_at (int b); // Init field elements extern int prepare_field_struct (int ids, int sid, int yes_no_num, int * aid); extern int test_for_bonds (field_atom* at, field_atom* bt); extern int test_for_angles (field_atom* at, field_atom* bt, field_atom* ct); extern int test_for_dihedrals (field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt); extern void clean_field_struct_list (field_struct * stru); // Create force field data structure extern void set_mol_num_label (); extern G_MODULE_EXPORT void changed_mol_box (GtkComboBox * box, gpointer data); extern void update_field_trees (); extern GtkWidget * create_combo_mol (int f); extern void fill_field_model (GtkTreeStore * store, int f, int m); extern GtkWidget * create_field_tree (int f); extern classical_field * create_force_field_data_structure (int ai); // Duplicate field element: extern int * duplicate_int (int num, int * old_val); extern gboolean * duplicate_bool (int num, gboolean * old_val); extern float * duplicate_float (int num, float * old_val); extern field_atom* duplicate_field_atom (field_atom* old_fat); extern field_shell * duplicate_field_shell (field_shell * old_shell); extern field_constraint * duplicate_field_constraint (field_constraint * old_cons); extern field_rigid * duplicate_field_rigid (field_rigid * old_rig); extern field_tethered * duplicate_field_tethered (field_tethered * old_tet); extern field_prop * duplicate_field_prop (field_prop * old_prop, int ti); extern void duplicate_other_prop (int oid, field_struct * old_fstr, field_struct * new_fstr); extern field_struct * duplicate_field_struct (field_struct * old_fstr); extern field_struct * duplicate_field_struct_list (field_struct * list_str, gboolean init); extern field_nth_body * duplicate_field_nth_body (field_nth_body * old_nth_body); extern field_molecule * duplicate_field_molecule (field_molecule * old_fmol); extern classical_field * duplicate_dlpoly_field (classical_field * init_field); // Init field element: extern field_atom* init_field_atom (int id, int type, int at, int nat, int coo, int * list); extern field_shell * init_field_shell (int id, int ia, int ib); extern field_constraint * init_field_constraint (int id, int ia, int ib); extern field_pmf * init_field_pmf (int id, int num[2], int * list[2], float * w[2]); extern field_rigid * init_field_rigid (int id, int num, int * list); extern field_tethered * init_field_tethered (int id, int num); extern field_prop * init_field_prop (int ti, int key, gboolean show, gboolean use); extern field_struct * init_field_struct (int st, int ai, int an, int * aid); extern field_nth_body * init_field_nth_body (int bi, int bd, int * na, int ** ma, int ** ba); extern field_external * init_field_external (int bi); extern void init_all_field_struct (gboolean init); extern int init_vdw (gboolean init); extern void setup_field_molecule_neighbors (int i, project * this_proj); // Get active field element: extern int get_position_in_field_atom_from_model_id (int fat, int at); extern int get_field_atom_id_from_model_id (field_molecule * fmol, int at); extern field_molecule * get_active_field_molecule_from_model_id (project * this_proj, int aid); extern int get_fragment_atom_id_from_model_id (field_molecule * fmol, int at); extern field_molecule * get_active_field_molecule (int a); extern field_nth_body * get_active_body (int a, int b); extern field_external * get_active_external (int a); extern field_atom* get_active_atom (int a, int b); extern field_shell * get_active_shell (int a, int b); extern field_constraint * get_active_constraint (int a, int b); extern field_pmf * get_active_pmf (int a, int b); extern field_rigid * get_active_rigid (int a, int b); extern field_tethered * get_active_tethered (int a, int b); extern field_prop * get_active_prop (struct field_prop * pr, int a); extern field_prop * get_active_prop_using_atoms (struct field_prop * pr, int ti, int * ids); extern field_struct * get_active_struct (int s, int a, int b); extern int get_struct_id_from_atom_id (int ids, int * aid); // Field objects visualization: extern int get_field_objects (int id, int jd); extern gboolean show_field_object (int id, int jd, int kd); extern void visualize_object (int id, int jd, int kd); extern G_MODULE_EXPORT void on_toggle_visualize_or_select_object (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); extern G_MODULE_EXPORT void visualize_or_select_all_elements (GtkTreeViewColumn * col, gpointer data); // Field molecule callbacks extern void adjust_field_prop (int fil, int sti, field_prop * tmp, int * ids, int key); extern gchar * remove_text (int i, int j, gchar * str); extern G_MODULE_EXPORT void select_atom_id_from_fied_molecule (GtkButton * but, gpointer data); extern G_MODULE_EXPORT void edit_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void add_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void remove_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void add_molecule_to_field (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void remove_molecule_from_field (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void remove_atom_from_field_molecule (GSimpleAction * action, GVariant * parameter, gpointer data); // OGL utils extern distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt); extern angle angle_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct); extern angle dihedral_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt); extern angle inversion_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt); // Print extern gchar * parameters_info (int obj, int key, gchar ** words, float * data); extern void print_dlp_field (GtkTextBuffer * buf); extern void print_dlp_config (GtkTextBuffer * buf); extern void print_dlp_control (GtkTextBuffer * buf); extern void print_dlp_improper_inversion (int di, GtkTextBuffer * buf, field_struct * dh, int fi, GtkTreeStore * store, GtkTreeIter * iter); extern void print_dlp_dihedral (int di, GtkTextBuffer * buf, field_struct * dh, int fi, GtkTreeStore * store, GtkTreeIter * iter); extern void print_dlp_angle (int ai, GtkTextBuffer * buf, field_struct * an, int fi, GtkTreeStore * store, GtkTreeIter * iter); extern void print_dlp_bond (int bi, GtkTextBuffer * buf, field_struct * bd, int fi, GtkTreeStore * store, GtkTreeIter * iter); extern G_MODULE_EXPORT void setup_this_force_field (int id); extern field_object_match * field_objects_id[6]; extern field_object_match * tmp_obj_id; extern float get_force_field_atom_mass (int sp, int num); extern int ff_unit; extern field_data * ff_bonds[3]; extern field_data * ff_angles[2]; extern field_data * ff_dih[2]; extern field_data * ff_imp; extern field_data * ff_inv; extern field_data * ff_vdw; extern int ** extraz_id; extern gboolean dlp_to_translate (int fid, int obj, int key); #endif atomes_1.3.1/src/calc/cpmd/0000775000175000017500000000000015212624223015121 5ustar lerouxlerouxatomes_1.3.1/src/calc/cpmd/cpmd_init.c0000664000175000017500000017375615212624223017256 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cpmd_init.c * @short Functions to initialize the QM / QM-MM input file creation assistant * @author Sébastien Le Roux */ /* * This file: 'cpmd_init.c' * * Contains: * - The functions to initialize the QM / QM-MM input file creation assistant * * List of functions: G_MODULE_EXPORT gint on_qm_assistant_go_forward (gint current_page, gpointer data); gboolean go_for_it (int i, int j, gboolean print[2]); G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWindow * assistant, gpointer data); G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data); gchar * section_name (int p); gchar * page_name (int p); void print_all_sections (GtkTextBuffer * buf); void add_cpmd_pages (); void proj_unselect_all_atoms (); void create_qm_input_file (int c, int p, int s); G_MODULE_EXPORT void update_cpmd_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_cpmd_check (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void update_cpmd_check (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void changed_opt_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void update_calc_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void changed_calc_opt_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void update_calc_check (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void update_calc_check (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void changed_calc_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void changed_info (GtkTextBuffer * textbuf, gpointer data); G_MODULE_EXPORT void on_qm_assistant_cancel (GtkAssistant * assistant, gpointer data); G_MODULE_EXPORT void on_qm_assistant_close (GtkAssistant * assistant, gpointer data); G_MODULE_EXPORT void on_qm_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data); G_MODULE_EXPORT void show_qm_file_preview (GtkButton * but, gpointer data); G_MODULE_EXPORT void run_saving_qm (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_saving_qm (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void on_qm_assistant_apply (GtkAssistant * assistant, gpointer data); GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim); GtkWidget * prepare_qm_option_box (int s); GtkWidget * calc_qm_option_box (int c); GtkWidget * info_box (); GtkWidget * section_box (int s); GtkWidget * qm_preview_box (int c, int s, int l); GtkWidget * vbox_cpmd (int s); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "calc.h" #include "cpmd.h" #include "cp2k.h" extern void print_cp2k (int f, GtkTextBuffer * buffer); extern void add_cp2k_pages (); extern ColRGBA init_color (int id, int numid); extern GtkWidget * electron_box; extern GtkWidget * thermo_box (); extern void field_unselect_all (); extern void print_the_section (int s, int p, GtkTextBuffer * buffer); extern void init_thermos (); extern gboolean are_all_atoms_thermostated (); extern void create_selection_combo (int id, int num, int type, GCallback handler); extern G_MODULE_EXPORT void atom_button (GtkButton * but, gpointer data); extern GtkWidget * restart_box (); extern void restore_ogl_selection (glwin * view); gchar * co_type[2] = {"CPMD", "CP2K"}; cpmd * tmp_cpmd; gchar * cpmd_elements[MAXDATAQM] = {"INFO", "CPMD", "DFT", "VDW", "PROP", "SYSTEM", "ATOMS"}; gchar * cdescr[MAXDATAQM] = {i18n("provides an informal description of the system and the calculation to be performed"), i18n("provides the general control parameters for the calculation to be performed"), i18n("provides the exchange and correlation functional (DFT) parameters"), i18n("describes the implementation of the van der Waals interactions"), i18n("provides details about the physical properties to be calculated"), i18n("describes the symmetry and periodicity of the system"), i18n("describes the atomic species, pseudo-potentials and coordinates")}; double default_cpmd_options[17] = {400.0, 0.0, 0.0, 4.0, 0.000001, 0.0, 0.0, 0.0, 0.0, 0.0, 70.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0}; gchar * default_opts[MAXDATAQM-1][NSECOP]= {{i18n("Fictitious electronic mass:"), i18n("Local Spin Density"), i18n("van der Walls interactions"), " ", " ", " "}, {i18n("DFT functional:"), i18n("Density cutoff*:"), " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " "}, {i18n("Use Angströms (default a.u.)"), i18n("Lattice:"), i18n("Symmetry:"), i18n("Parameters:"), i18n("Angles:"), i18n("Cutoff for the plane wave basis:")}, {i18n("Use constraints"), i18n("Freeze:"), i18n("Use dummy atoms:"), i18n("Atom type:"), i18n("Maximum angular momentum l:"), i18n("Local angular momentum l:")}}; // 0 = None, 1 = Entry, 2 = Combo, 3 = yes/no int default_opts_type[MAXDATAQM-1][NSECOP] = {{1, 3, 3, 0, 0, 0}, {2, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {3, 2, 2, 2 ,2, 1}, {3, 0, 3, 2, 2, 2}}; // NDF is the max by far int defaut_num[9]={NDFT, 2, NSYM, 2, 2, 3, -1, 3, 3}; gchar * default_keywords[9][NDFT] = {{"SONLY", "LDA", "BONLY", "BP", "BLYP", "XLYP", "PW91", "PBE", "PBES", "REVPBE", "HCTH", "OPTX", "OLYP", "TPSS", "PBE0", "B1LYP", "B3LYP", "X3LYP", "HSE06"}, {" ", " VECTORS", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ABSOLUTE", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " DEGREE", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"ALL", "ATOMS", "COORDINATES", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"S", "P", "D", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"S", "P", "D", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}}; gchar * default_text[9][NDFT] = {{i18n("Slater Exchange Only"), i18n("Local Density Approximation"), "Becke 88", "Becke + Perdew", "Becke + Lee-Yang-Parr", i18n("Extended B88+PW91+LYP88"), "Perdew + Wang 91", "Perdew + Burke-Ernzerhof", i18n("PBE Revised for Solids"), i18n("Revised - PBE"), "Hamprecht-Cohen-Tozer-Handy", i18n("Optimized Becke 88"), "Handy-Cohen + LYP", "Tao-Perdew-Staroverov-Scuseria", i18n("Parameter-free PBE"), i18n("Becke One-parameter Hybrid + LYP"), i18n("Becke Three-parameters Hybrid + LYP"), i18n("Extended Hybrid + LYP"), "Heyd-Scuseria-Ernzerhof 06"}, {i18n("Box Parameters (a,b,c and α,β,γ)"), i18n("Lattice Vectors"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Isolated"), i18n("Cubic"), i18n("Face Centered Cubic (FCC)"), i18n("Body Centered Cubic (BCC)"), i18n("Hexagonal"), i18n("Trigonal"), i18n("Tetragonal"), i18n("Body Centered Tetragonal (BCT)"), i18n("Orthorombic"), i18n("Monoclinic"), i18n("Triclinic"), " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Default (a, b/a, c/a)"), i18n("Absolute (a, b, c)"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Default (cos α, cos β, cos γ)"), i18n("Degrees (α, β, γ)"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("All Atoms"), i18n("Some Atoms"), i18n("Some Coordinates"), " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"s", "p", "d", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"s", "p", "d", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}}; double default_calc_options[24] = {0.00001, 0.0, 10000.0, 3.0, 0.0005, 0.0, 10000.0, 3.0, 10000.0, 5.0, 0.0, 0.0, 0.9, 0.0, 0.9, 10000.0, 5.0, 0.0, 0.0, 0.9, 50.0, 0.0, 0.0, 0.0}; gchar * cpmd_calc_opts[NCPMDCALC][NOPTPC]={{i18n("Convergence criteria*:"), i18n("Optimizer:"), i18n("Max steps:"), i18n("Integration step:"), " ", " ", " "}, {i18n("Convergence criteria*:"), i18n("Optimizer:"), i18n("Max steps:"), i18n("Integration step:"), " ", " ", " "}, {i18n("Max MD steps: "), i18n("Time step:"), i18n("Barostat:"), i18n("Ions"), i18n("Factor:"), i18n("Fictitious electrons"), i18n("Factor:")}, {i18n("Max MD steps: "), i18n("Time step:"), i18n("Barostat:"), i18n("Ions"), i18n("Factor:"), " ", " "}, {i18n("Number of unoccupied states:"), i18n("3D visualization*"), i18n("Number of objects**:"), " ", " ", " ", " "}, {i18n("Property to compute:"), " ", " ", " ", " ", " ", " "}}; int default_type[NCPMDCALC][NOPTPC]={{1, 2, 1, 1, 0, 0, 0}, {1, 2, 1, 1, 0, 0, 0}, {1, 1, 2, 3, 1, 3, 1}, {1, 1, 2, 3, 1, 0, 0}, {1, 3, 1, 0, 0, 0, 0}, {2, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}}; gchar * calc_kw[NCPMDCALC]= {"OPTIMIZE WAVEFUNCTION", "OPTIMIZE GEOMETRY", "MOLECULAR DYNAMICS", "MOLECULAR DYNAMICS BO", "KOHN-SHAM ENERGIES", "VIBRATIONAL ANALYSIS", "PROPERTIES"}; gchar * calc_ds[NCPMDCALC]= {i18n("Wavefunction Optimization"), i18n("Geometry Optimization"), i18n("CPMD Molecular Dynamics"), i18n("Born-Oppenheimer Molecular Dynamics"), i18n("Kohn-Sham Eigen Values"), i18n("Vibrational Analysis"), i18n("Calculation of Physical Properties")}; int calc_box_num[NCACOMBO]={2, 2, 3, 3, 3}; gchar * calc_box_name[NCACOMBO][3] = {{i18n("Preconditioned Gradient"), i18n("Direct Inversion of Iterative Subspace"), " "}, {i18n("Quasi-Newton method"), i18n("Direct Inversion of Iterative Subspace"), " "}, {i18n("None"), "Parrinello-Rahman", "Parrinello-Rahman + NPT"}, {i18n("None"), "Parrinello-Rahman", "Parrinello-Rahman + NPT"}, {i18n("Finite differences of first derivatives"), i18n("Linear response of ionic displacement"), i18n("Precalculated Hessian")}}; gchar * calc_box_keys[NCACOMBO][3] = {{"PCG", "ODIIS", " "}, {"BFGS", "GDIIS", " "}, {" ", "PARRINELLO-RAHMAN", "PARRINELLO-RAHMAN NPT"}, {" ", "PARRINELLO-RAHMAN", "PARRINELLO-RAHMAN NPT"}, {"FD", "LR", "IN"}}; gchar * nosetype[3] = {i18n("Gobal"), i18n("Local"), i18n("Molecule")}; gchar * thermo_name[2][5] = {{i18n("None"), i18n("Controlled"), i18n("Nosé-Hoover chains"), " ", " "}, {i18n("None"), i18n("Adaptive Langevin"), i18n("Canonical sampling through velocity rescaling"), "GLE", i18n("Nosé-Hoover chains")}}; int num_thermo[2] = {3, 5}; int type_thermo[2] = {2, 2}; GtkWidget * qm_preview_but; GtkWidget * calc_combo; gboolean qm_assist_init; int qm_saved_label_format[2]; GtkWidget * calc_label; GtkWidget * latbox; GtkWidget * but_at[2]; GtkWidget * spatbox; GtkWidget * ppbox[2]; GtkWidget * calc_box[NCPMDCALC]; GtkWidget * qm_option_box[MAXDATAQM-1]; gboolean is_cpmd; /*! \fn GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim) \brief prepare a labelled box widget for the CPMD input creation assistant \param box the GtkWidget sending the signal \param lab the label \param v_space vertical spacing \param h_space horizontal spacing \param dim label width */ GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim) { GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, v_space); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(lab, dim, 30, 0.0, 0.5), FALSE, FALSE, h_space); return hbox; } /*! \fn void print_all_sections (GtkTextBuffer * buf) \brief print all sections of the CPMD input file \param buf the GtkTextBuffer to print into */ void print_all_sections (GtkTextBuffer * buf) { int i; for (i=0; i 2) { print_the_section (i, 1, buf); } } else if (i == 5 && (int)tmp_cpmd -> default_opts[2]) { if (buf == NULL) { print_the_section (i, 0, qmbuffer[i]); } else { print_the_section (i, 1, buf); } } else if (i == 6 && tmp_cpmd -> calc_type == 4) { if (buf == NULL) { print_the_section (i, 0, qmbuffer[i]); } else { print_the_section (i, 1, buf); } } } } /*! \fn G_MODULE_EXPORT void update_cpmd_parameter (GtkEntry * res, gpointer data) \brief update CPMD QM option value entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cpmd_parameter (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); tmp_cpmd -> default_opts[i] = v; if (i == DEFGC) { update_entry_long_double (res, tmp_cpmd -> default_opts[i]); } else { update_entry_double (res, tmp_cpmd -> default_opts[i]); } print_all_sections (NULL); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void update_cpmd_check (GtkCheckButton * but, gpointer data) \brief update CPMD QM option toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cpmd_check (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void update_cpmd_check (GtkToggleButton * but, gpointer data) \brief update CPMD QM option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cpmd_check (GtkToggleButton * but, gpointer data) #endif { int i = GPOINTER_TO_INT(data); gboolean j = button_get_status ((GtkWidget *)but); if (i == DEFCO || i == DEFDU) { widget_set_sensitive (but_at[(i == DEFCO) ? 0 : 1], j); } tmp_cpmd -> default_opts[i] = (double) j; print_all_sections (NULL); } /*! \fn G_MODULE_EXPORT void changed_opt_box (GtkComboBox * box, gpointer data) \brief change CPMD QM option \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_opt_box (GtkComboBox * box, gpointer data) { int i, j, k; j = GPOINTER_TO_INT(data); i = combo_get_active ((GtkWidget *)box); if (j != DEFLM && j != DEFLO) { if (i != (int)tmp_cpmd -> default_opts[j]) { tmp_cpmd -> default_opts[j] = (double)i; if (j == DEFSP) { k = (int)tmp_cpmd -> default_opts[j]; combo_set_active (ppbox[0], tmp_cpmd -> pp[k][0]); combo_set_active (ppbox[1], tmp_cpmd -> pp[k][1]); } else if (j == DEFFI) { tmp_cpmd -> default_opts[DEFCO] = tmp_cpmd -> default_opts[j] + 1; if (tmp_cpmd -> fixlist != NULL) { g_free (tmp_cpmd -> fixlist); tmp_cpmd -> fixlist = NULL; if (tmp_cpmd -> fixcoord != NULL) { g_free (tmp_cpmd -> fixcoord); tmp_cpmd -> fixcoord = NULL; } } tmp_cpmd -> fixat = 0; widget_set_sensitive (sel_but[1], i); } } } else { if (i != tmp_cpmd -> pp[(int)tmp_cpmd -> default_opts[DEFSP]][j-DEFLM]) { tmp_cpmd -> pp[(int)tmp_cpmd -> default_opts[DEFSP]][j-DEFLM] = i; } } if (j == DEFVE) { widget_set_sensitive (latbox, ! (int)tmp_cpmd -> default_opts[j]); } print_all_sections (NULL); } /*! \fn GtkWidget * prepare_qm_option_box (int s) \brief CPM input file creation prepare section general options widgets \param s the section id */ GtkWidget * prepare_qm_option_box (int s) { int i, j, k, l; GtkWidget * hbox; GtkWidget * widg; gchar * str; GtkWidget * vbox = create_vbox (BSEP); for (i=0; i 0) { if ((s == 0 && (i == 0 || i == 1 || i == 2)) || (s == 1 && (i == 0 || i == 1)) || (s == 4) || (s == 5)) { str = g_strdup_printf ("%s", _(default_opts[s][i])); } else { str = g_strdup_printf ("%s", default_opts[s][i]); } ident ++; if (ident == DEFAB || ident == DEFDG || ident == DEFSY) { hbox = cpmd_box (latbox, str, 5, 20, (s == 1) ? 150 : 220); } else if (ident == DEFCO || ident == DEFDU) { hbox = cpmd_box (vbox, str, 20, 20, 180); } else if (ident == DEFLM || ident == DEFLO) { hbox = cpmd_box (spatbox, str, 5, 20, 220); } else { hbox = cpmd_box (vbox, str, (ident == DEFSP) ? 20 : 5, 5, (s == 1) ? 150 : 220); } g_free (str); j = ident; switch (default_opts_type[s][i]) { case 1: widg = create_entry (G_CALLBACK(update_cpmd_parameter), 100, 15, FALSE, GINT_TO_POINTER(j)); if (j == DEFGC) { update_entry_long_double (GTK_ENTRY(widg), tmp_cpmd -> default_opts[j]); } else { update_entry_double (GTK_ENTRY(widg), tmp_cpmd -> default_opts[j]); } break; case 2: icomb ++; if (ident == DEFLM || ident == DEFLO) { ppbox[ident - DEFLM] = create_combo (); } else { widg = create_combo (); } l = (ident == DEFSP) ? qm_proj -> nspec : defaut_num[icomb]; for (k=0; k chemistry -> label[k]); } else { str = g_strdup_printf ("%s", (icomb < 6) ? _(default_text[icomb][k]) : default_text[icomb][k]); } if (ident == DEFLM || ident == DEFLO) { combo_text_append (ppbox[ident - DEFLM], str); } else { combo_text_append (widg, str); } g_free (str); } if (ident == DEFLM || ident == DEFLO) { combo_set_active (ppbox[ident - DEFLM], tmp_cpmd -> pp[(int)tmp_cpmd -> default_opts[DEFSP]][ident - DEFLM]); g_signal_connect (G_OBJECT (ppbox[ident - DEFLM]), "changed", G_CALLBACK(changed_opt_box), GINT_TO_POINTER(j)); } else { combo_set_active (widg, (int)tmp_cpmd -> default_opts[j]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_opt_box), GINT_TO_POINTER(j)); } break; case 3: widg = check_button (NULL, -1, -1, tmp_cpmd -> default_opts[j], G_CALLBACK(update_cpmd_check), GINT_TO_POINTER(j)); break; } if (ident == DEFLM || ident == DEFLO) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ppbox[ident - DEFLM], FALSE, FALSE, 0); } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); } if (j==DEFEM || j==DEFGC || j==DEFCU) { if (j==DEFEM || j==DEFGC) { widg = gtk_label_new ("a.u."); } else { widg = gtk_label_new ("Ry"); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 5); } else if (j == DEFVE) { latbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, latbox, FALSE, FALSE, 15); widget_set_sensitive (latbox, ! (int)tmp_cpmd -> default_opts[DEFVE]); } else if (j == DEFCO || j == DEFDU) { k = (j==DEFCO) ? 0 : 1; but_at[k] = create_button ((j == DEFCO) ? _("Configure constraints") : _("Configure dummy atoms"), IMG_NONE, NULL, 175, -1, GTK_RELIEF_NORMAL, G_CALLBACK(atom_button), GINT_TO_POINTER(j)); widget_set_sensitive (but_at[k], (int)tmp_cpmd -> default_opts[j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but_at[k], FALSE, FALSE, 20); if (j == DEFCO) { ident ++; icomb ++; } } else if (j == DEFSP) { spatbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, spatbox, FALSE, FALSE, 15); } } } return vbox; } /*! \fn G_MODULE_EXPORT void update_calc_parameter (GtkEntry * res, gpointer data) \brief update CPMD calculation option value entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_calc_parameter (GtkEntry * res, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i==STEPO || i==STEPG || i==STEPC || i==STEPB || i==KSUNO || i==NBAND) { j = (int) v; tmp_cpmd -> calc_opts[i] = (double) j; update_entry_int (res, j); } else { tmp_cpmd -> calc_opts[i] = v; if (i == CONVO || i == CONVG) { update_entry_long_double (res, tmp_cpmd -> calc_opts[i]); } else { update_entry_double (res, tmp_cpmd -> calc_opts[i]); } } for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn G_MODULE_EXPORT void changed_calc_opt_box (GtkComboBox * box, gpointer data) \brief change CPMD calculation option \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_calc_opt_box (GtkComboBox * box, gpointer data) { int i, j; j = GPOINTER_TO_INT(data); i = combo_get_active ((GtkWidget *)box); if (i != tmp_cpmd -> calc_opts[j]) { tmp_cpmd -> calc_opts[j] = i; for (j=1; j<4; j++) print_the_section (j, 0, qmbuffer[j]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void update_calc_check (GtkCheckButton * but, gpointer data) \brief update CPMD calculation option toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_calc_check (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void update_calc_check (GtkToggleButton * but, gpointer data) \brief update CPMD calculation option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_calc_check (GtkToggleButton * but, gpointer data) #endif { int i = GPOINTER_TO_INT(data); tmp_cpmd -> calc_opts[i] = (double) button_get_status ((GtkWidget *)but); for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn GtkWidget * calc_qm_option_box (int c) \brief CPMD input assistant prepare the calculation option widgets \param c the calculation id */ GtkWidget * calc_qm_option_box (int c) { int i, j, k, l; GtkWidget * hbox; GtkWidget * widg; gchar * str; GtkWidget * vbox = create_vbox (BSEP); for (i=0; i 0) { idopt ++; l = 0; if (idopt == ANNIC || idopt == ANNIB) { hbox = cpmd_box (vbox, _("Annealing:"), 0, 5, 220); } if (idopt == ANNIC || idopt == ANNEC || idopt == ANNIB) { hbox = cpmd_box (vbox, _(cpmd_calc_opts[c][i]), 0, 25, 120); l = 30; } else if (idopt == AFAIC || idopt == AFAEC || idopt == AFAIB) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new(_(cpmd_calc_opts[c][i])), FALSE, FALSE, 10); l = 30; } else { hbox = cpmd_box (vbox, _(cpmd_calc_opts[c][i]), 0, 5, 220); } j = idopt; switch (default_type[c][i]) { case 1: widg = create_entry (G_CALLBACK(update_calc_parameter), 100, 15, FALSE, GINT_TO_POINTER(j)); if (j==STEPO || j==STEPG || j==STEPC || j==STEPB || j==KSUNO || j==NBAND) { update_entry_int (GTK_ENTRY(widg), (int) tmp_cpmd -> calc_opts[j]); } else { update_entry_double (GTK_ENTRY(widg), tmp_cpmd -> calc_opts[j]); } break; case 2: icalc ++; widg = create_combo (); for (k=0; k calc_opts[j]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_calc_opt_box), GINT_TO_POINTER(j)); break; case 3: widg = check_button (NULL, -1, -1, tmp_cpmd -> calc_opts[j], G_CALLBACK(update_calc_check), GINT_TO_POINTER(j)); break; } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, l); if (j==TSTPO || j==TSTPG || j==TSTPC || j==TSTPB) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new ("a.u."), FALSE, FALSE, 5); } else if (j==NBAND) { gchar * ksout = _("\t * electronic density(ies) or/and wavefunction(s)\n" "\t ** as many index(es) to be supplied on the next line:\n" "\t\t > 0 for electronic density\n\t\t < 0 for wavefunction"); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(ksout, -1, -1, 0.0, 0.5), FALSE, FALSE, 10); } } } return vbox; } /*! \fn G_MODULE_EXPORT void changed_calc_box (GtkComboBox * box, gpointer data) \brief change CPMD calculation type \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_calc_box (GtkComboBox * box, gpointer data) { int i; i = combo_get_active ((GtkWidget *)box); if (i != tmp_cpmd -> calc_type) { gtk_label_set_text (GTK_LABEL(calc_label), g_strdup_printf (_("%s option(s)"), _(calc_ds[i]))); gtk_label_set_use_markup (GTK_LABEL(calc_label), TRUE); hide_the_widgets (calc_box[tmp_cpmd -> calc_type]); show_the_widgets (calc_box[i]); tmp_cpmd -> calc_type = i; if (tmp_cpmd -> calc_type != 2) { hide_the_widgets (electron_box); } else { show_the_widgets (electron_box); } for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } } /*! \fn G_MODULE_EXPORT void changed_info (GtkTextBuffer * textbuf, gpointer data) \brief update CPMD input file preview \param textbuf the GtkTextBuffer to print into \param data the associated data pointer */ G_MODULE_EXPORT void changed_info (GtkTextBuffer * textbuf, gpointer data) { GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (textbuf, & bStart); gtk_text_buffer_get_end_iter (textbuf, & bEnd); if (tmp_cpmd -> info != NULL) g_free (tmp_cpmd -> info); tmp_cpmd -> info = g_strdup_printf ("%s", gtk_text_buffer_get_text (textbuf, & bStart, & bEnd, FALSE)); print_the_section (0, 0, qmbuffer[0]); } /*! \fn GtkWidget * info_box () \brief create CPMD input file information widgets */ GtkWidget * info_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox = create_hbox (0); GtkWidget * scrollsets = create_scroll (NULL, 355, 250, GTK_SHADOW_ETCHED_IN); GtkWidget * aview = create_text_view (-1, -1, 1, 0, G_CALLBACK(changed_info), NULL, NULL); if (tmp_cpmd -> info != NULL) print_info (tmp_cpmd -> info, NULL, gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); add_container_child (CONTAINER_SCR, scrollsets, aview); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, scrollsets, FALSE, FALSE, 85); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); return vbox; } /*! \fn GtkWidget * section_box (int s) \brief create CPMD section box \param s the section id */ GtkWidget * section_box (int s) { int i; gchar * str; GtkWidget * hbox; GtkWidget * vbox = create_vbox (BSEP); if (s == 0) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, info_box(), FALSE, FALSE, 50); } else if (s == 1) { // CPMD Calculation /* Calc type combo_box: */ idopt = -1; icalc = -1; ident = -1; icomb = -1; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Calculation to be performed:"), -1, -1, 0.0, 0.5), FALSE, FALSE, 10); calc_combo = create_combo (); for (i=0; i%s option(s)"), _(calc_ds[tmp_cpmd -> calc_type])); calc_label = markup_label(str, -1, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, calc_label, FALSE, FALSE, 10); for (i=0; i calc_type); } else if (s == 2) { // CPMD - thermostat(s) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, thermo_box(), FALSE, FALSE, 5); } else if (s == 3) { // CPMD - restart add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, restart_box(), FALSE, FALSE, 0); } /* General CPMD section options: */ if (s > 0 && s != 2 && s != 3) { i = (s == 1) ? s : s - 2; str = g_strdup_printf (_("General %s section option(s)"),cpmd_elements[i]); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, 525, -1, 0.0, 0.5), FALSE, FALSE, 10); g_free (str); qm_option_box[i-1] = prepare_qm_option_box (i-1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, qm_option_box[i-1], FALSE, FALSE, 0); } return vbox; } /*! \fn GtkWidget * qm_preview_box (int c, int s, int l) \brief prepare preview section widgets \param c 0 = CPMD, 1 = CP2K \param s section id \param l spacing */ GtkWidget * qm_preview_box (int c, int s, int l) { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * scrollsets = create_scroll (NULL, 250, (c) ? 280 : 410, GTK_SHADOW_ETCHED_IN); GtkWidget * aview = create_text_view (-1, -1, 0, 1, NULL, NULL, NULL); qmbuffer[s] = gtk_text_view_get_buffer (GTK_TEXT_VIEW(aview)); add_container_child (CONTAINER_SCR, scrollsets, aview); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, scrollsets, FALSE, FALSE, l); if (c == 0) { print_the_section (s, 0, qmbuffer[s]); } else { print_cp2k (s, qmbuffer[s]); } return vbox; } /*! \fn gchar * section_name (int p) \brief get CPMD input creation section name \param p the section id */ gchar * section_name (int p) { if (p > 0 && p < 4) { return g_strdup_printf (_("Details of the %s section that %s"), cpmd_elements[1], _(cdescr[1])); } else if (p == 0) { return g_strdup_printf (_("Details of the %s section that %s"), cpmd_elements[p], _(cdescr[p])); } else { return g_strdup_printf (_("Details of the %s section that %s"), cpmd_elements[p-2], _(cdescr[p-2])); } } /*! \fn GtkWidget * vbox_cpmd (int s) \brief create CPMD input creation section widgets \param s the section id */ GtkWidget * vbox_cpmd (int s) { GtkWidget * vbox; GtkWidget * hbox; vbox = create_vbox (BSEP); hbox = create_hbox (0); if (s < 2 || s > 3) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(section_name(s), -1, 20, 0.0, 0.5), FALSE, FALSE, 20); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, (s < 2 ||s > 3) ? 5 : 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, section_box(s), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, qm_preview_box (0, s, (s < 2 ||s > 3) ? 0 : 65), FALSE, FALSE, 0); return vbox; } /*! \fn gchar * page_name (int p) \brief get CPMD input creation assistant page name \param p the page id */ gchar * page_name (int p) { if (p > 0 && p <4) { if (p == 1) { return g_strdup_printf (_("The %s section - Calculation options"), cpmd_elements[1]); } else if (p == 2) { return g_strdup_printf (_("The %s section - Thermostat options"), cpmd_elements[1]); } else { return g_strdup_printf (_("The %s section - RESTART options"), cpmd_elements[1]); } } else if (p == 0) { return g_strdup_printf (_("The %s section"), cpmd_elements[p]); } else { return g_strdup_printf (_("The %s section"), cpmd_elements[p-2]); } } /*! \fn void add_cpmd_pages () \brief add pages to the CPMD input file creation assistant */ void add_cpmd_pages () { int i; gchar * info; GtkAssistant * assist = GTK_ASSISTANT(qm_assistant); GtkWidget * page; for (i=0; i Finalize the creation of the CPMD input file now !")); add_box_child_start (GTK_ORIENTATION_VERTICAL, conclu, markup_label(info, -1, -1, 0.5, 0.5), TRUE, TRUE, 100); g_free (info); add_box_child_start (GTK_ORIENTATION_VERTICAL, conclu, markup_label(_("\n \tNote: You can re-open this assitant later if required to adjust your choices\n"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); gtk_assistant_append_page (assist, conclu); gtk_assistant_set_page_title (assist, conclu, _("Create the input file now !")); gtk_assistant_set_page_type (assist, conclu, GTK_ASSISTANT_PAGE_CONFIRM); gtk_assistant_set_page_complete (assist, conclu, TRUE); gtk_assistant_update_buttons_state (assist); } /*! \fn void proj_unselect_all_atoms () \brief unselect all atom(s) in the target project of the assistant */ void proj_unselect_all_atoms () { int i, j; for (i=0; i natomes; i++) { for (j=0; j<2; j++) { qm_proj -> atoms[0][i].pick[j] = FALSE; qm_proj -> atoms[0][i].label[j] = FALSE; } } qm_view -> picked = 0; init_default_shaders (qm_view); } /*! \fn G_MODULE_EXPORT void on_qm_assistant_cancel (GtkAssistant * assistant, gpointer data) \brief cancel QM / QM-MM input file creation \param assistant the GtkAssistant sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_qm_assistant_cancel (GtkAssistant * assistant, gpointer data) { destroy_this_widget (GTK_WIDGET(assistant)); proj_unselect_all_atoms (); // restore selection if any from calc.c restore_ogl_selection (qm_view); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWindow * assistant, gpointer data) \brief QM / QM-MM input file creation cancel event GTK4 \param assistant the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWindow * assistant, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data) \brief QM / QM-MM input file creation cancel event GTK3 \param assistant the GtkWidget sending the signal \param event \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data) #endif { on_qm_assistant_cancel (((GtkAssistant *)assistant), data); return TRUE; } /*! \fn G_MODULE_EXPORT void on_qm_assistant_close (GtkAssistant * assistant, gpointer data) \brief close QM / QM-MM input creation assistant \param assistant the GtkAssistant sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_qm_assistant_close (GtkAssistant * assistant, gpointer data) { // Apply changes ... then close window destroy_this_widget (GTK_WIDGET(assistant)); // Saving // Cleaning proj_unselect_all_atoms (); // restore selection if any from calc.c restore_ogl_selection (qm_view); } /*! \fn G_MODULE_EXPORT gint on_qm_assistant_go_forward (gint current_page, gpointer data) \brief QM / QM-MM assistant go to the next page \param current_page the current assistant page \param data the associated data pointer */ G_MODULE_EXPORT gint on_qm_assistant_go_forward (gint current_page, gpointer data) { int i = GPOINTER_TO_INT(data); if (i == 0) { switch (current_page) { case MAXDATAQM+4: return -1; break; case 2: if (tmp_cpmd -> calc_type == 2 || tmp_cpmd -> calc_type == 3) { return 3; } else { return 4; } break; case 5: if ((int)tmp_cpmd -> default_opts[2]) { return current_page+1; } else if (tmp_cpmd -> calc_type == 6) { return current_page+2; } else { return current_page+3; } break; case 6: if (tmp_cpmd -> calc_type == 6) { return current_page+1; } else { return current_page+2; } default: return current_page+1; break; } } else { switch (current_page) { case MAXDATAQM+4: return -1; break; default: return current_page+1; break; } } } /*! \fn G_MODULE_EXPORT void on_qm_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data) \brief prepare QM / QM-MM assistant pages before display \param assistant the GtkAssistant sending the signal \param page the current page \param data the associated data pointer */ G_MODULE_EXPORT void on_qm_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data) { int i = gtk_assistant_get_current_page (assistant); // field_unselect_all (); switch (i) { case 0: hide_the_widgets (qm_preview_but); break; default: show_the_widgets (qm_preview_but); break; } } /*! \fn gboolean go_for_it (int i, int j, gboolean print[2]) \brief add tab to the QM / QM-MM file preview window notebook \param i tab id \param j last tab id \param print basis and pseudopotential printing status */ gboolean go_for_it (int i, int j, gboolean print[2]) { if (tmp_cp2k -> input_type && i<=j-3) return TRUE; if (i==0) return TRUE; if (i==j-2 && print[0]) return TRUE; if (i==j-1 && print[1]) return TRUE; return FALSE; } /*! \fn G_MODULE_EXPORT void show_qm_file_preview (GtkButton * but, gpointer data) \brief show QM / QM-MM input file preview \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_qm_file_preview (GtkButton * but, gpointer data) { int i, j, k, l, c; c = GPOINTER_TO_INT(data); gchar * ptitle[5] = {i18n("CP2K input file"), "forces.inc", "system.inc", "motion.inc", "coord.inc"}; gchar * wtite[2] = {i18n(" input file preview"), i18n(" input files preview")}; gchar * str; GtkWidget * scrollsets; GtkWidget * aview; GtkWidget * notebook; k = 0; gboolean print[2]; if (c) { j = 6; notebook = gtk_notebook_new (); if (tmp_cp2k -> opts[CP2RUN] > 1.0 && tmp_cp2k -> opts[CP2RUN] < 4.0) k = 1; str = g_strdup_printf ("%s %s", co_type[c], _(wtite[tmp_cp2k -> input_type])); print[0] = print[1] = FALSE; for (i=0; i nspec; i++) { if (tmp_cp2k -> spec_data[i][0] != -1) { print[0] = TRUE; break; } } for (i=0; i nspec; i++) { if (tmp_cp2k -> spec_data[i][1] != -1) { print[1] = TRUE; break; } } } else { j = 1; str = g_strdup_printf ("%s %s", co_type[c], _(wtite[0])); } GtkWidget * preview = dialogmodal (str, GTK_WINDOW (qm_assistant)); g_free (str); if (c) { add_box_child_start (GTK_ORIENTATION_VERTICAL, dialog_get_content_area(preview), notebook, FALSE, FALSE, 0); } else { scrollsets = create_scroll (dialog_get_content_area(preview), 700, 350, GTK_SHADOW_ETCHED_IN); } for (i=0; i j+k-3) { str = g_strdup_printf ("%s", tmp_cp2k -> files[i-(j+k-3)]); } else { l = (i == j-3+k) ? 4 : i; str = g_strdup_printf ("%s", (l) ? ptitle[l] : _(ptitle[l])); } gtk_notebook_append_page (GTK_NOTEBOOK(notebook), scrollsets, gtk_label_new (str)); g_free (str); } else { add_container_child (CONTAINER_SCR, scrollsets, aview); } } if (c) { if (tmp_cp2k -> input_type || i != j+k-3) { print_cp2k ((i >= j+k-3) ? i+1-k: i, gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); } } else { print_all_sections (gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); } } run_this_gtk_dialog (preview, G_CALLBACK(run_destroy_dialog), NULL); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_saving_qm (GtkNativeDialog * info, gint response_id, gpointer data) \brief apply QM / QM-MM assistant and create input file(s) - running the dialog GTK3 \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_saving_qm (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_saving_qm (GtkDialog * info, gint response_id, gpointer data) \brief apply QM / QM-MM assistant and create input file(s) - running the dialog GTK3 \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_saving_qm (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif int i, j, k, l; int c = GPOINTER_TO_INT(data); gboolean result = FALSE; gboolean done = FALSE; GtkTextBuffer * buffer = NULL; GtkTextIter bStart; GtkTextIter bEnd; GError * err = NULL; gchar * text; gchar * filename; gchar * direname; gchar * cp2sp[2] = {"basis.inc", "pseudo.inc"}; gchar * cp2file[4] = {"forces.inc", "system.inc", "motion.inc", "coord.inc"}; switch (response_id) { case GTK_RESPONSE_ACCEPT: filename = file_chooser_get_file_name (chooser); direname = file_chooser_get_current_folder (chooser); if (filename != NULL) { done = TRUE; if (! c || (c && ! tmp_cp2k -> input_type)) buffer = add_buffer (NULL, NULL, NULL); switch (c) { case 0: print_all_sections (buffer); break; case 1: j = 6; k = 0; if (tmp_cp2k -> opts[CP2RUN] > 1.0 && tmp_cp2k -> opts[CP2RUN] < 4.0) k = 1; for (i=0; i input_type) { l = (i >= j+k-3) ? i+1-k: i; if (tmp_cp2k -> input_type) { buffer = add_buffer (NULL, NULL, NULL); if (i > 0) filename = g_strdup_printf ("%s/%s", direname, cp2file[l-1]); print_cp2k (l, buffer); gtk_text_buffer_get_start_iter (buffer, & bStart); gtk_text_buffer_get_end_iter (buffer, & bEnd); text = gtk_text_buffer_get_text (buffer, & bStart, & bEnd, FALSE); gtk_text_buffer_set_modified (buffer, FALSE); result = g_file_set_contents (filename, text, -1, & err); g_free (text); g_object_unref (buffer); if (! result && err) { show_error (g_strdup_printf (_("Error while saving input file: %s\n Error: %s"), filename, err -> message), 0, qm_assistant); g_error_free (err); } g_free (filename); } else if (l != 5 && l != 6) { print_cp2k (l, buffer); } } } break; } if (! c || (c && ! tmp_cp2k -> input_type)) { gtk_text_buffer_get_start_iter (buffer, & bStart); gtk_text_buffer_get_end_iter (buffer, & bEnd); text = gtk_text_buffer_get_text (buffer, & bStart, & bEnd, FALSE); gtk_text_buffer_set_modified (buffer, FALSE); result = g_file_set_contents (filename, text, -1, & err); g_free (text); g_object_unref (buffer); if (! result && err) { /* error saving file, show message to user */ show_error (g_strdup_printf (_("Error while saving input file: %s\n Error: %s"), filename, err -> message), 0, qm_assistant); g_error_free (err); } g_free (filename); } if (c) { // save pseudo and basis auto for (i=0; i<2; i++) { buffer = add_buffer (NULL, NULL, NULL); filename = g_strdup_printf ("%s/%s", direname, cp2sp[i]); print_cp2k (i+5, buffer); gtk_text_buffer_get_start_iter (buffer, & bStart); gtk_text_buffer_get_end_iter (buffer, & bEnd); text = gtk_text_buffer_get_text (buffer, & bStart, & bEnd, FALSE); result = g_file_set_contents (filename, text, -1, & err); g_free (text); if (! result && err) { /* error saving file, show message to user */ show_error (g_strdup_printf (_("Error while saving file %s: %s"), cp2sp[i], err -> message), 0, qm_assistant); g_error_free (err); break; } g_free (filename); g_object_unref (buffer); } } } break; default: done = TRUE; break; } if (done) { #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } if (c && result) { if (tmp_cp2k -> input_type) { if (tmp_cp2k -> opts[CP2RUN] > 1.0 && tmp_cp2k -> opts[CP2RUN] < 4.0) { show_info (_("The input files 'forces.inc', 'system.inc', 'motion.inc' and 'coord.inc'\n" "as well as the files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file."), 0, qm_assistant); } else { show_info (_("The input files 'forces.inc', 'system.inc', and 'coord.inc'\n" "as well as the files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file."), 0, qm_assistant); } } else { show_info (_("The files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file."), 0, qm_assistant); } } } /*! \fn G_MODULE_EXPORT void on_qm_assistant_apply (GtkAssistant * assistant, gpointer data) \brief apply QM / QM-MM assistant and create input file(s) - creating the dialog \param assistant the GtkAssistant sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_qm_assistant_apply (GtkAssistant * assistant, gpointer data) { int c = GPOINTER_TO_INT(data); gchar * text; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif GtkFileFilter * filter1, * filter2; gchar * qm_type[2] = {"CPMD", "CP2K"}; const gchar * qm_name[2] = {i18n("CPMD input file (*.in)"), i18n("CP2K input file (*.inp)")}; const gchar * qm_ext[2] = {".in", ".inp"}; text = g_strdup_printf (_("Saving %s input file(s)"), qm_type[c]); info = create_file_chooser (text, GTK_WINDOW(assistant), GTK_FILE_CHOOSER_ACTION_SAVE, _("Save")); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); g_free (text); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif file_chooser_set_current_folder (chooser); filter1 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter1), _(qm_name[c])); text = g_strdup_printf ("*%s", qm_ext[c]); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter1), text); g_free (text); gtk_file_chooser_add_filter (chooser, filter1); filter2 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter2), _("All files (*)")); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter2), "*"); gtk_file_chooser_add_filter (chooser, filter2); text = g_strdup_printf ("%s%s", prepare_for_title(qm_proj -> name), qm_ext[c]); file_chooser_set_current_folder (chooser); gtk_file_chooser_set_current_name (chooser, text); g_free (text); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_saving_qm), NULL); #else run_this_gtk_dialog (info, G_CALLBACK(run_saving_qm), data); #endif } /*! \fn void create_qm_input_file (int c, int p, int s) \brief initialize an ab-initio MD input file creation assistant \param c 0 = CPMD, 1 = CP2K \param p the target project \param s 0 = ab-initio, 1 = QM-MM */ void create_qm_input_file (int c, int p, int s) { gchar * qm_type[2] = {i18n("first-principles"), "QM-MM"}; qm_assistant = gtk_assistant_new (); gtk_widget_set_size_request (qm_assistant, 800, 600); int i, j; //field_color = TRUE; field_object = -1; //selected_aspec = -1; opengl_project_changed (p); qm_proj = get_project_by_id(p); for (i=0; i cpmd_input[s] == NULL) { qm_proj -> cpmd_input[s] = g_malloc0(sizeof*qm_proj -> cpmd_input[s]); qm_proj -> cpmd_input[s] -> calc_type = 0; qm_proj -> cpmd_input[s] -> thermostats = 0; qm_proj -> cpmd_input[s] -> ions_thermostat = NULL; qm_proj -> cpmd_input[s] -> elec_thermostat = NULL; qm_proj -> cpmd_input[s] -> dummies = 0; qm_proj -> cpmd_input[s] -> dummy = NULL; qm_proj -> cpmd_input[s] -> fixat = 0; qm_proj -> cpmd_input[s] -> fixlist = NULL; qm_proj -> cpmd_input[s] -> fixcoord = NULL; qm_proj -> cpmd_input[s] -> restart[0] = 0; qm_proj -> cpmd_input[s] -> restart[1] = 100; qm_proj -> cpmd_input[s] -> restart[2] = 2; qm_proj -> cpmd_input[s] -> restart[3] = 0; qm_proj -> cpmd_input[s] -> restart[4] = 1; for (i=5; i<9; i++) qm_proj -> cpmd_input[s] -> restart[i] = 0; qm_proj -> cpmd_input[s] -> restart[9] = 0; for (i=0; i<17; i++) qm_proj -> cpmd_input[s] -> default_opts[i] = default_cpmd_options[i]; for (i=0; i<24; i++) qm_proj -> cpmd_input[s] -> calc_opts[i] = default_calc_options[i]; qm_proj -> cpmd_input[s] -> pp = allocdint (qm_proj -> nspec, 2); for (i=0; i nspec; i++) qm_proj -> cpmd_input[s] -> pp[i][0] = qm_proj -> cpmd_input[s] -> pp[i][1] = 1; qm_proj -> cpmd_input[s] -> info = g_strdup_printf (_(" Project name: %s\n" " Total number of atoms: %d\n" " Number of chemical species: %d"), prepare_for_title(qm_proj -> name), qm_proj -> natomes, qm_proj -> nspec); } tmp_cpmd = qm_proj -> cpmd_input[s]; } else { is_cpmd = FALSE; if (qm_proj -> cp2k_input[s] == NULL) { qm_proj -> cp2k_input[s] = g_malloc0(sizeof*qm_proj -> cp2k_input[s]); qm_proj -> cp2k_input[s] -> input_type = 0; for (i=0; i<2; i++) { qm_proj -> cp2k_input[s] -> fixat[i] = 0; qm_proj -> cp2k_input[s] -> fixlist[i] = NULL; qm_proj -> cp2k_input[s] -> fixcoord[i] = NULL; } qm_proj -> cp2k_input[s] -> thermostats = 0; qm_proj -> cp2k_input[s] -> ions_thermostat = NULL; for (i=0; i<5; i++) qm_proj -> cp2k_input[s] -> files[i] = NULL; for (i=0; i<41; i++) qm_proj -> cp2k_input[s] -> opts[i] = default_cp2k_options[i]; qm_proj -> cp2k_input[s] -> opts[CP2SYM] = find_cp2k_sym (); for (i=0; i<3; i++) { for (j=0;j<4;j++) qm_proj -> cp2k_input[s] -> extra_opts[i][j] = default_cp2k_extra[i][j]; if (i == 0) qm_proj -> cp2k_input[s] -> extra_opts[i][2] = default_vdw_cut[0]; } qm_proj -> cp2k_input[s] -> spec_data = allocdint (qm_proj -> nspec, 2); qm_proj -> cp2k_input[s] -> spec_files = g_malloc0(qm_proj -> nspec*sizeof*qm_proj -> cp2k_input[s] -> spec_files); for (i=0; i nspec; i++) { qm_proj -> cp2k_input[s] -> spec_data[i][0] = cp2k_is_basis_in_database (i); qm_proj -> cp2k_input[s] -> spec_data[i][1] = cp2k_is_pseudo_in_database (i); qm_proj -> cp2k_input[s] -> spec_files[i] = g_malloc0(2*sizeof*qm_proj -> cp2k_input[s] -> spec_files[i]); qm_proj -> cp2k_input[s] -> spec_files[i][0] = NULL; qm_proj -> cp2k_input[s] -> spec_files[i][1] = NULL; } gchar * defname[2]={"basis.inc", "pseudo.inc"}; for (j=0;j<2;j++) { for (i=0; i nspec; i++) { if (qm_proj -> cp2k_input[s] -> spec_data[i][j] > -1) { qm_proj -> cp2k_input[s] -> files[1+j] = g_strdup_printf ("%s", defname[j]); break; } } } qm_proj -> cp2k_input[s] -> info = g_strdup_printf (_(" Project name: %s\n" " Total number of atoms: %d\n" " Number of chemical species: %d"), prepare_for_title(qm_proj -> name), qm_proj -> natomes, qm_proj -> nspec); } tmp_cp2k = qm_proj -> cp2k_input[s]; } qm_coord = qm_proj -> coord; qm_view = qm_proj -> modelgl; gtk_window_set_resizable (GTK_WINDOW (qm_assistant), FALSE); gtk_window_set_modal (GTK_WINDOW (qm_assistant), TRUE); gchar * str = g_strdup_printf (_("Basic %s - %s - calculation assistant"), co_type[c], (s) ? qm_type[s] : _(qm_type[s])); gtk_window_set_title (GTK_WINDOW(qm_assistant), str); g_free (str); GtkWidget * intro = create_vbox (BSEP); gchar * info = g_strdup_printf (_("\tThis assistant will help you to setup a %s %s\n" "\tcalculation using %s 3D model as starting point\n" "\nPlease note that the %s code offers so many calculation options that it is not possible\n" "to provide a description and offer a comprehensive usage guide for each of them. \n" "Therefore this assistant only provides help towards basics and / or frequently used %s instructions. \n\n" "In any case if you intent to use the %s code please refer to the user manual."), (s) ? qm_type[s] : _(qm_type[s]), co_type[c], qm_proj -> name, co_type[c], co_type[c], co_type[c]); add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, markup_label(info, -1, -1, 0.5, 0.5), TRUE, TRUE, 50); g_free (info); add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, markup_label(_("\n \tNote: You can re-open this assistant later if required to adjust your choices\n"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); gtk_assistant_append_page (GTK_ASSISTANT (qm_assistant), intro); str = g_strdup_printf ("%s calculation set-up", co_type[c]); gtk_assistant_set_page_title (GTK_ASSISTANT (qm_assistant), intro, str); g_free (str); gtk_assistant_set_page_type (GTK_ASSISTANT (qm_assistant), intro, GTK_ASSISTANT_PAGE_INTRO); gtk_assistant_set_page_complete (GTK_ASSISTANT (qm_assistant), intro, qm_assist_init); if (c == 0) { add_cpmd_pages (); } else { add_cp2k_pages (); } gtk_assistant_set_forward_page_func (GTK_ASSISTANT (qm_assistant), on_qm_assistant_go_forward, GINT_TO_POINTER(c), NULL); qm_preview_but = create_button (_("Preview"), IMG_STOCK, EDITF, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(show_qm_file_preview), GINT_TO_POINTER(c)); gtk_assistant_add_action_widget (GTK_ASSISTANT (qm_assistant), qm_preview_but); g_signal_connect (G_OBJECT (qm_assistant), "prepare", G_CALLBACK(on_qm_assistant_prepare), GINT_TO_POINTER(c)); g_signal_connect (G_OBJECT (qm_assistant), "cancel", G_CALLBACK(on_qm_assistant_cancel), GINT_TO_POINTER(c)); g_signal_connect (G_OBJECT (qm_assistant), "close", G_CALLBACK(on_qm_assistant_close), GINT_TO_POINTER(c)); g_signal_connect (G_OBJECT (qm_assistant), "apply", G_CALLBACK(on_qm_assistant_apply), GINT_TO_POINTER(c)); add_gtk_close_event (qm_assistant, G_CALLBACK(on_qm_assistant_cancel_event), GINT_TO_POINTER(c)); gtk_assistant_set_page_complete (GTK_ASSISTANT (qm_assistant), gtk_assistant_get_nth_page(GTK_ASSISTANT (qm_assistant), 0), TRUE); show_the_widgets (qm_preview_but); show_the_widgets (qm_assistant); if (c == 0) { for (i=0; i calc_type]); if (tmp_cpmd -> calc_type != 2) hide_the_widgets (electron_box); } hide_the_widgets (qm_preview_but); } atomes_1.3.1/src/calc/cpmd/cpmd_print.c0000664000175000017500000005212215212624223017426 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cpmd_print.c * @short Functions to print the CPMD input file(s) * @author Sébastien Le Roux */ /* * This file: 'cpmd_print.c' * * Contains: * - The functions to print the CPMD input file(s) * * List of functions: void print_info_section (GtkTextBuffer * buf); void print_this_thermostat (thermostat * thermo, int id, GtkTextBuffer * buf); void print_thermostat (GtkTextBuffer * buf); void print_restart (GtkTextBuffer * buf); void print_cpmd_section (GtkTextBuffer * buf); void print_dft_section (GtkTextBuffer * buf); void print_vdw_section (GtkTextBuffer * buf); void print_prop_section (GtkTextBuffer * buf); void print_system_section (GtkTextBuffer * buf); void print_atoms_section (GtkTextBuffer * buf); void print_the_section (int s, int p, GtkTextBuffer * buffer); */ #include "global.h" #include "interface.h" #include "calc.h" #include "cpmd.h" extern dummy_atom * get_active_dummy (int id); int cpmd_sym[NSYM] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 14}; /*! \fn void print_info_section (GtkTextBuffer * buf) \brief print the CPMD input file INFO section \param buf the GtkTextBuffer to print into */ void print_info_section (GtkTextBuffer * buf) { gchar * str = g_strdup_printf (_(" This input file was prepared using %s\n\n"), PACKAGE); print_info (str, NULL, buf); g_free (str); if (tmp_cpmd -> info != NULL) print_info (tmp_cpmd -> info, NULL, buf); print_info ("\n\n", NULL, buf); } /*! \fn void print_this_thermostat (thermostat * thermo, int id, GtkTextBuffer * buf) \brief print CPMD thermostat parameters \param thermo the target thermostat \param id 0 = ionic, 1 = fictitious electronic \param buf the GtkTextBuffer to print into */ void print_this_thermostat (thermostat * thermo, int id, GtkTextBuffer * buf) { int i, j, k, l, m; gchar * temp[2] = {"TEMPERATURE", "TEMPERATURE ELECTRONS"}; gchar * tobj[2] = {"IONS", "ELECTRONS"}; gchar * tkey[2] = {"TEMPCONTROL", "NOSE"}; gchar * str = NULL; if (thermo -> type == 0) { str = g_strdup_printf ("\n\n %s\n", temp[id]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (" %f", thermo -> params[0]); print_info (str, NULL, buf); g_free (str); } else { if (thermo -> sys == GLOBAL) { str = g_strdup_printf ("\n\n %s %s\n", tkey[thermo -> type-1], tobj[id]); } else if (thermo -> sys == LOCAL) { str = g_strdup_printf ("\n\n %s %s %s\n", tkey[thermo -> type-1], tobj[id], "LOCAL"); } print_info (str, NULL, buf); g_free (str); if (thermo -> sys == LOCAL) { str = g_strdup_printf (" %d\n", tmp_cpmd -> thermostats); print_info (str, NULL, buf); g_free (str); for (i=0; i thermostats; i++) { for (j=0; j<2; j++) { str = g_strdup_printf (" %11.5lf", thermo -> params[j]); print_info (str, NULL, buf); g_free (str); } print_info ("\n", NULL, buf); if (thermo-> next != NULL) thermo = thermo-> next; } str = g_strdup_printf (" %d\n", tmp_cpmd -> thermostats); print_info (str, NULL, buf); g_free (str); thermo = tmp_cpmd -> ions_thermostat; for (i=0; i thermostats; i++) { l = 0; str = g_strdup_printf (" %d", i+1); print_info (str, NULL, buf); g_free (str); for (j=0; j < qm_proj-> nspec; j++) { for (k=0; k < qm_proj-> natomes; k++) { if (qm_proj -> atoms[0][k].sp == j) { l++; for (m=0; m < thermo -> natoms; m++) { if (thermo -> list[m] == k) { str = g_strdup_printf (" %d", l); print_info (str, NULL, buf); g_free (str); } } } } } if (i < tmp_cpmd -> thermostats-1) print_info ("\n", NULL, buf); if (thermo-> next != NULL) thermo = thermo-> next; } } else { for (j=0; j<2; j++) { str = g_strdup_printf (" %11.5lf", thermo -> params[j]); print_info (str, NULL, buf); g_free (str); } } } } /*! \fn void print_thermostat (GtkTextBuffer * buf) \brief print the CPMD input file THERMOSTAT section \param buf the GtkTextBuffer to print into */ void print_thermostat (GtkTextBuffer * buf) { gchar * str; int id = (tmp_cpmd -> calc_type == 2) ? BAROC : BAROB; if ((int)tmp_cpmd -> calc_opts[id]) { str = g_strdup_printf ("\n\n %s", calc_box_keys[tmp_cpmd -> calc_type][(int)tmp_cpmd -> calc_opts[id]]); print_info (str, NULL, buf); g_free (str); } id = (tmp_cpmd -> calc_type == 2) ? ANNIC : ANNIB; if ((int)tmp_cpmd -> calc_opts[id]) { str = g_strdup_printf ("\n\n ANNEALING IONS\n %f", tmp_cpmd -> calc_opts[id+1]); print_info (str, NULL, buf); g_free (str); } if (tmp_cpmd -> calc_type == 2) { if ((int)tmp_cpmd -> calc_opts[ANNEC]) { str = g_strdup_printf ("\n\n ANNEALING ELECTRONS\n %f", tmp_cpmd -> calc_opts[AFAEC]); print_info (str, NULL, buf); g_free (str); } } print_this_thermostat (tmp_cpmd -> ions_thermostat, 0, buf); if (tmp_cpmd -> calc_type == 2) { print_this_thermostat (tmp_cpmd -> elec_thermostat, 1, buf); } } /*! \fn void print_restart (GtkTextBuffer * buf) \brief print the CPMD input file RESTART section \param buf the GtkTextBuffer to print into */ void print_restart (GtkTextBuffer * buf) { gchar * str; gchar * rest_keys[2] = {"RANDOM", "ATOMS"}; if (tmp_cpmd -> restart[0] < 2) { str = g_strdup_printf ("\n\n INITIALIZE WAVEFUNCTION %s", rest_keys[tmp_cpmd -> restart[0]]); print_info (str, NULL, buf); g_free (str); } else { print_info ("\n\n RESTART WAVEFUNCTION LATEST", NULL, buf); print_info ("\n RESTART COORDINATES LATEST", NULL, buf); if (tmp_cpmd -> calc_type > 1 && tmp_cpmd -> calc_type < 4) { print_info ("\n RESTART ACCUMULATORS LATEST", NULL, buf); print_info ("\n RESTART VELOCITIES LATEST", NULL, buf); if (tmp_cpmd -> ions_thermostat -> type > 0) print_info ("\n RESTART NOSEP LATEST", NULL, buf); if (tmp_cpmd -> calc_type == 2 && tmp_cpmd -> elec_thermostat -> type == 1) print_info ("\n RESTART NOSEE LATEST", NULL, buf); } } } /*! \fn void print_cpmd_section (GtkTextBuffer * buf) \brief print CPMD input file CPMD section \param buf the GtkTextBuffer to print into */ void print_cpmd_section (GtkTextBuffer * buf) { gchar * str = g_strdup_printf (" %s", calc_kw[tmp_cpmd -> calc_type]); print_info (str, NULL, buf); g_free (str); int i; switch (tmp_cpmd -> calc_type) { case 0: str = g_strdup_printf ("\n\n CONVERGENCE ORBITAL\n %E\n\n", tmp_cpmd -> calc_opts[CONVO]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (" %s\n\n", calc_box_keys[0][(int)tmp_cpmd -> calc_opts[OPTIO]]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (" MAXITER\n %d", (int)tmp_cpmd -> calc_opts[STEPO]); print_info (str, NULL, buf); g_free (str); break; case 1: str = g_strdup_printf ("\n\n CONVERGENCE GEOMETRY\n %E\n\n", tmp_cpmd -> calc_opts[CONVG]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (" %s\n\n", calc_box_keys[1][(int)tmp_cpmd -> calc_opts[OPTIG]]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (" MAXSTEP\n %d", (int)tmp_cpmd -> calc_opts[STEPG]); print_info (str, NULL, buf); g_free (str); break; case 2: str = g_strdup_printf ("\n\n MAXSTEP\n %d", (int)tmp_cpmd -> calc_opts[STEPC]); print_info (str, NULL, buf); g_free (str); break; case 3: str = g_strdup_printf ("\n\n MAXSTEP\n %d", (int)tmp_cpmd -> calc_opts[STEPB]); print_info (str, NULL, buf); g_free (str); break; case 4: str = g_strdup_printf ("\n %d", (int)tmp_cpmd -> calc_opts[KSUNO]); print_info (str, NULL, buf); g_free (str); if ((int)tmp_cpmd -> calc_opts[RHOUT]) { str = g_strdup_printf ("\n RHOOUT BANDS\n %d\n ", (int)tmp_cpmd -> calc_opts[NBAND]); print_info (str, NULL, buf); g_free (str); } break; case 5: str = g_strdup_printf (" %s", calc_box_keys[4][(int)tmp_cpmd -> calc_opts[VIBRA]]); print_info (str, NULL, buf); g_free (str); break; case 6: break; } print_restart (buf); if (tmp_cpmd -> calc_type < 4) { if (tmp_cpmd -> calc_type == 0) { i = TSTPO; } else if (tmp_cpmd -> calc_type == 1) { i = TSTPG; } else if (tmp_cpmd -> calc_type == 2) { i = TSTPC; } else { i = TSTPB; } str = g_strdup_printf ("\n\n TIMESTEP\n %f", tmp_cpmd -> calc_opts[i]); print_info (str, NULL, buf); g_free (str); } if (tmp_cpmd -> calc_type != 3) { str = g_strdup_printf ("\n\n EMASS\n %f", tmp_cpmd -> default_opts[DEFEM]); print_info (str, NULL, buf); g_free (str); } if (tmp_cpmd -> calc_type == 2 || tmp_cpmd -> calc_type == 3) print_thermostat (buf); if (tmp_cpmd -> default_opts[DEFLS] == 1.0) { print_info ("\n\n LOCAL SPIN DENSITY", NULL, buf); } if (tmp_cpmd -> default_opts[DEFVD] == 1.0) { print_info ("\n\n VDW CORRECTION", NULL, buf); } gchar * sv_key[2] = {"STORE", "RESTFILE"}; for (i=0; i<2; i++) { str = g_strdup_printf ("\n\n %s\n %d", sv_key[i], tmp_cpmd -> restart[i+1]); print_info (str, NULL, buf); g_free (str); } if (tmp_cpmd -> calc_type != 0 && tmp_cpmd -> restart[3]) { print_info ("\n\n TRAJECTORY SAMPLE", NULL, buf); if (tmp_cpmd -> restart[4]) print_info (" XYZ", NULL, buf); if (tmp_cpmd -> restart[5]) print_info (" FORCES", NULL, buf); str = g_strdup_printf ("\n %d", tmp_cpmd -> restart[3]); print_info (str, NULL, buf); g_free (str); } if (tmp_cpmd -> restart[6]) { print_info ("\n\n PRINT", NULL, buf); if (tmp_cpmd -> restart[7]) print_info (" INFO", NULL, buf); //if (tmp_cpmd -> restart[8]) print_info (" EIGENVALUES", NULL, buf); if (tmp_cpmd -> restart[8]) print_info (" COORDINATES", NULL, buf); if (tmp_cpmd -> restart[9]) print_info (" FORCES", NULL, buf); str = g_strdup_printf ("\n %d", tmp_cpmd -> restart[6]); print_info (str, NULL, buf); g_free (str); } print_info ("\n\n", NULL, buf); } /*! \fn void print_dft_section (GtkTextBuffer * buf) \brief print the CPMD input file DFT section \param buf the GtkTextBuffer to print into */ void print_dft_section (GtkTextBuffer * buf) { gchar * str = g_strdup_printf (" FUNCTIONAL %s", default_keywords[0][(int)tmp_cpmd -> default_opts[DEFDF]]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf ("\n\n GC-CUTOFF\n %E\n\n", tmp_cpmd -> default_opts[DEFGC]); print_info (str, NULL, buf); g_free (str); } /*! \fn void print_vdw_section (GtkTextBuffer * buf) \brief print the CPMD input file VDW section \param buf the GtkTextBuffer to print into */ void print_vdw_section (GtkTextBuffer * buf) { gchar * str = g_strdup_printf (" EMPIRICAL CORRECTION\n" " VDW PARAMETERS\n" " ALL DFT-D2\n" " S6GRIMME\n %s\n" " END EMPIRICAL CORRECTION\n\n", default_keywords[0][(int)tmp_cpmd -> default_opts[DEFDF]]); print_info (str, NULL, buf); g_free (str); } /*! \fn void print_prop_section (GtkTextBuffer * buf) \brief print the CPMD input file PROPERTIES section \param buf the GtkTextBuffer to print into */ void print_prop_section (GtkTextBuffer * buf) { } /*! \fn void print_system_section (GtkTextBuffer * buf) \brief print the CPMD input file SYSTEM section \param buf the GtkTextBuffer to print into */ void print_system_section (GtkTextBuffer * buf) { double u, v; gchar * str; u = 0.52917721; if ((int)tmp_cpmd -> default_opts[DEFAN]) { u = 1.0; print_info (" ANGSTROM\n\n", NULL, buf); } if (! (int)tmp_cpmd -> default_opts[DEFVE]) { str = g_strdup_printf (" SYMMETRY\n %d\n\n", cpmd_sym[(int)tmp_cpmd -> default_opts[DEFSY]]); print_info (str, NULL, buf); g_free (str); } print_info (" CELL", NULL, buf); if ((int)tmp_cpmd -> default_opts[DEFVE]) { print_info (" VECTORS", NULL, buf); if (((int)tmp_cpmd -> default_opts[DEFAB])) { print_info (" ABSOLUTE", NULL, buf); } } else { if (((int)tmp_cpmd -> default_opts[DEFAB])) { print_info (" ABSOLUTE", NULL, buf); } if (((int)tmp_cpmd -> default_opts[DEFDG])) { print_info (" DEGREE", NULL, buf); } } int i, j; if ((int)tmp_cpmd -> default_opts[DEFVE]) { for (i=0; i<3; i++) { print_info ("\n ", NULL, buf); for (j=0; j<3; j++) { v = qm_proj -> cell.box[0].vect[i][j] / u; str = g_strdup_printf (" %12.6lf", v); print_info (str, NULL, buf); g_free (str); } } } else { print_info ("\n ", NULL, buf); for (i=0; i<2; i++) { for (j=0; j<3; j++) { if (i == 0) { if ((int)tmp_cpmd -> default_opts[DEFAB]) { v = qm_proj -> cell.box[0].param[i][j] / u; } else { if (j==0) { v = qm_proj -> cell.box[0].param[i][j] / u; } else if (qm_proj -> cell.box[0].param[i][0] != 0.0) { v = qm_proj -> cell.box[0].param[i][j] / qm_proj -> cell.box[0].param[i][0]; } else { v = -1.0; } } } else { if ((int)tmp_cpmd -> default_opts[DEFDG]) { v = qm_proj -> cell.box[0].param[i][j]; } else { v = cos (qm_proj -> cell.box[0].param[i][j]*pi/180.0); } } str = g_strdup_printf (" %12.6lf", v); print_info (str, NULL, buf); g_free (str); } } } print_info ("\n\n", NULL, buf); str = g_strdup_printf (" CUTOFF\n %15.10lf\n\n", tmp_cpmd -> default_opts[DEFCU]); print_info (str, NULL, buf); g_free (str); } /*! \fn void print_atoms_section (GtkTextBuffer * buf) \brief print the CPMD input file ATOMS section \param buf the GtkTextBuffer to print into */ void print_atoms_section (GtkTextBuffer * buf) { int i, j, k, l, m; gchar * str; double u = ((int)tmp_cpmd -> default_opts[DEFAN]) ? 1.0 : 0.52917721; if ((int)tmp_cpmd -> default_opts[DEFCO] && ((int)tmp_cpmd -> default_opts[DEFFI] == 0 || ((int)tmp_cpmd -> default_opts[DEFFI] > 0 && tmp_cpmd -> fixat > 0))) { str = g_strdup_printf (" CONSTRAINTS\n FIX %s\n", default_keywords[5][(int)tmp_cpmd -> default_opts[DEFFI]]); print_info (str, NULL, buf); g_free (str); if ((int)tmp_cpmd -> default_opts[DEFFI] > 0) { str = g_strdup_printf (" %d\n ", tmp_cpmd -> fixat); print_info (str, NULL, buf); g_free (str); k = m = 0; for (i=0; i nspec; i++) { for (j=0; j natomes; j++) { if (qm_proj -> atoms[0][j].sp == i) { k ++; for (l=0; lfixat; l++) { if (qm_proj -> atoms[0][j].id == tmp_cpmd -> fixlist[l]) { m ++; str = g_strdup_printf (" %d", k); print_info (str, NULL, buf); g_free (str); if ((int)tmp_cpmd -> default_opts[DEFFI] == 2) { str = g_strdup_printf (" %d %d %d\n", tmp_cpmd -> fixcoord[l][0], tmp_cpmd -> fixcoord[l][1], tmp_cpmd -> fixcoord[l][2]); print_info (str, NULL, buf); g_free (str); if (m < tmp_cpmd->fixat) { print_info (" ", NULL, buf); } } } } } } } if ((int)tmp_cpmd -> default_opts[DEFFI] != 2) print_info ("\n", NULL, buf); } print_info (" END CONSTRAINTS\n\n", NULL, buf); } if ((int)tmp_cpmd -> default_opts[DEFDU] && tmp_cpmd -> dummies > 0) { gchar * dtype[3]={" TYPE1", " TYPE2", " TYPE3"}; str = g_strdup_printf (" DUMMY ATOMS\n %d\n", tmp_cpmd -> dummies); print_info (str, NULL, buf); g_free (str); dummy_atom * dumm; for (i=0; i dummies; i++) { dumm = get_active_dummy (i); print_info (dtype[dumm -> type], NULL, buf); if (dumm -> type == 0) { str = g_strdup_printf (" %12.6lf %12.6lf %12.6lf\n", dumm -> xyz[0], dumm -> xyz[1], dumm -> xyz[2]); } else if (dumm -> natoms > 0) { if ( dumm -> natoms < qm_proj -> natomes) { l = 0; str = g_strdup_printf (" %d", dumm -> natoms); for (j=0; j nspec; j++) { for (k=0; k natomes; k++) { if (qm_proj -> atoms[0][k].sp == j) { l ++; for (m=0; m natoms; m++) { if (qm_proj -> atoms[0][k].id == dumm -> list[m]) { str = g_strdup_printf ("%s %d", str, l); } } } } } } else if (dumm -> natoms == qm_proj -> natomes) { str = g_strdup_printf (" %d", -1); } str = g_strdup_printf ("%s\n", str); } else { str = g_strdup_printf ("\n"); } print_info (str, NULL, buf); g_free (str); } print_info ("\n", NULL, buf); } for (i=0; i nspec; i++) { str = g_strdup_printf ("*%s-%s.psp\n", exact_name(qm_proj -> chemistry -> label[i]), default_keywords[0][(int)tmp_cpmd -> default_opts[DEFDF]]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (" LMAX=%s LOC=%s\n %d\n", default_keywords[7][(int)tmp_cpmd -> pp[i][0]], default_keywords[8][(int)tmp_cpmd -> pp[i][1]], qm_proj -> chemistry -> nsps[i]); print_info (str, NULL, buf); g_free (str); for (j=0; j natomes; j++) { if (qm_proj -> atoms[0][j].sp == i) { str = g_strdup_printf (" %12.6lf %12.6lf %12.6lf\n", qm_proj -> atoms[0][j].x/u, qm_proj -> atoms[0][j].y/u, qm_proj -> atoms[0][j].z/u); print_info (str, NULL, buf); g_free (str); } } print_info ("\n", NULL, buf); } } /*! \fn void print_the_section (int s, int p, GtkTextBuffer * buffer) \brief print CPMD input section \param s the section id \param p 0 = section preview, 1 = complete input file \param buffer the GtkTextBuffer to print into */ void print_the_section (int s, int p, GtkTextBuffer * buffer) { int i; gchar * str; if (buffer != NULL) { if (s > 0 && s < 4) { i = 1; } else if (s == 0) { i = 0; } else { i = s - 2; } if (! p) { GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (buffer, & bStart); gtk_text_buffer_get_end_iter (buffer, & bEnd); gtk_text_buffer_delete (buffer, & bStart, & bEnd); } if (p && s > 0) print_info ("\n\n", NULL, buffer); str = g_strdup_printf ("&%s\n\n", cpmd_elements[i]); print_info (str, "bold", buffer); g_free (str); if (s == 0) { print_info_section (buffer); } else if (s < 4) { print_cpmd_section (buffer); } else { switch (s) { case 4: print_dft_section (buffer); break; case 5: print_vdw_section (buffer); break; case 6: print_prop_section (buffer); break; case 7: print_system_section (buffer); break; case 8: print_atoms_section (buffer); break; } } print_info ("&END", "bold", buffer); } } atomes_1.3.1/src/calc/cpmd/cpmd.h0000664000175000017500000000605115212624223016217 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cpmd.h * @short Variable declarations for the creation of the CPMD input file * @author Sébastien Le Roux */ /* * This header file: 'cpmd.h' * * Contains: Variable declarations for the creation of the CPMD input file */ #define NCPMDCALC 7 #define NCACOMBO 5 #define NDFT 19 #define NSYM 11 #define NOPTPC 7 #define NSECOP 6 #define DEFEM 0 #define DEFLS 1 #define DEFVD 2 #define DEFDF 3 #define DEFGC 4 #define DEFAN 5 #define DEFVE 6 #define DEFSY 7 #define DEFAB 8 #define DEFDG 9 #define DEFCU 10 #define DEFCO 11 #define DEFFI 12 #define DEFDU 13 #define DEFSP 14 #define DEFLM 15 #define DEFLO 16 #define CONVO 0 #define OPTIO 1 #define STEPO 2 #define TSTPO 3 #define CONVG 4 #define OPTIG 5 #define STEPG 6 #ifndef CPMD_H_ #define CPMD_H_ #define TSTPG 7 #define STEPC 8 #define TSTPC 9 #define BAROC 10 #define ANNIC 11 #define AFAIC 12 #define ANNEC 13 #define AFAEC 14 #define STEPB 15 #define TSTPB 16 #define BAROB 17 #define ANNIB 18 #define AFAIB 19 #define KSUNO 20 #define RHOUT 21 #define NBAND 22 #define VIBRA 23 extern cpmd * tmp_cpmd; extern gboolean is_cpmd; extern gchar * cpmd_elements[MAXDATAQM]; extern gchar * cdescr[MAXDATAQM]; extern double default_cpmd_options[17]; extern gchar * default_opts[MAXDATAQM-1][NSECOP]; // 0 = None, 1 = Entry, 2 = Combo, 3 = yes/no extern int default_opts_type[MAXDATAQM-1][NSECOP]; // NDF is the max by far extern int defaut_num[9]; extern gchar * default_keywords[9][NDFT]; extern gchar * default_text[9][NDFT]; extern double default_calc_options[24]; extern gchar * calc_opts[NCPMDCALC][NOPTPC]; extern int default_type[NCPMDCALC][NOPTPC]; extern gchar * calc_kw[NCPMDCALC]; extern gchar * calc_ds[NCPMDCALC]; extern int calc_box_num[NCACOMBO]; extern gchar * calc_box_name[NCACOMBO][3]; extern gchar * calc_box_keys[NCACOMBO][3]; extern GtkWidget * sel_but[3]; extern GtkWidget * sel_img[3]; extern GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim); /*! \enum therm_types */ enum therm_types { CONTROL = -1, /*!< -1 */ GLOBAL = 0, /*!< 0 */ LOCAL = 1, /*!< 1 */ MOLECULE = 2 /*!< 2 */ }; extern gchar * nosetype[3]; extern gchar * nosekey[2]; extern gchar * thermo_name[2][5]; extern int num_thermo[2]; extern int type_thermo[2]; extern gchar * param[2]; extern gchar * iunit[2]; extern gchar * eunit[2]; #endif atomes_1.3.1/src/calc/cpmd/cpmd_restart.c0000664000175000017500000002056615212624223017765 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cpmd_restart.c * @short Functions to configure the restart section for the CPMD input file creation assistant * @author Sébastien Le Roux */ /* * This file: 'cpmd_restart.c' * * Contains: * - The functions to configure the restart section for the CPMD input file creation assistant * * List of functions: G_MODULE_EXPORT void update_restart_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_restart_check (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void update_restart_check (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void changed_restart_box (GtkComboBox * box, gpointer data); GtkWidget * restart_box (); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "calc.h" #include "cpmd.h" extern void print_the_section (int s, int p, GtkTextBuffer * buffer); extern GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim); /*! \fn G_MODULE_EXPORT void update_restart_parameter (GtkEntry * res, gpointer data) \brief CPMD input file update restart parameter value entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_restart_parameter (GtkEntry * res, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); j = (int)v; if (j != tmp_cpmd -> restart[i]) { tmp_cpmd -> restart[i] = j; } update_entry_int (res, tmp_cpmd -> restart[i]); for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } GtkWidget * sace[2]; GtkWidget * trap_box[2]; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void update_restart_check (GtkCheckButton * but, gpointer data) \brief CPMD input file restart option toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_restart_check (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void update_restart_check (GtkToggleButton * but, gpointer data) \brief CPMD input file restart option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_restart_check (GtkToggleButton * but, gpointer data) #endif { int i = GPOINTER_TO_INT(data); gboolean j = button_get_status ((GtkWidget *)but); tmp_cpmd -> restart[i] = (j) ? 1 : 0; if (i == 3 || i == 6) { if (tmp_cpmd -> restart[i]) tmp_cpmd -> restart[i] = 10; update_entry_int (GTK_ENTRY(sace[i/6]), (tmp_cpmd -> restart[i]) ? TRUE : FALSE); widget_set_sensitive (trap_box[i/6], j); } for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn G_MODULE_EXPORT void changed_restart_box (GtkComboBox * box, gpointer data) \brief CPMD input file change restart type \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_restart_box (GtkComboBox * box, gpointer data) { tmp_cpmd -> restart[0] = combo_get_active ((GtkWidget *)box); int i; for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn GtkWidget * restart_box () \brief prepare the CPMD input preparation assistant restart widgets */ GtkWidget * restart_box () { int i; GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; // Thermostat type ions gtk_widget_set_size_request (vbox, 525, 350); // Initialization: Random / Atom / Restart hbox = cpmd_box (vbox, _("Initialization for the Wavefunction:"), 20, 5, 230); GtkWidget * box = create_combo (); combo_text_append (box, _("Random")); combo_text_append (box, _("Atomic Pseudo Wavefunctions")); combo_text_append (box, _("Use a RESTART.* File")); combo_set_active (box, tmp_cpmd -> restart[0]); g_signal_connect (G_OBJECT (box), "changed", G_CALLBACK(changed_restart_box), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, box, FALSE, FALSE, 5); // Save restart every hbox = cpmd_box (vbox, _("Save the information required for a restart every:"), 5, 5, 340); GtkWidget * widg = create_entry (G_CALLBACK(update_restart_parameter), 100, 15, FALSE, GINT_TO_POINTER(1)); update_entry_int (GTK_ENTRY(widg), tmp_cpmd -> restart[1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new(_("steps")), FALSE, FALSE, 10); // Num of restart: hbox = cpmd_box (vbox, _("Number of restart file(s): "), 0, 5, 340); widg = create_entry (G_CALLBACK(update_restart_parameter), 100, 15, FALSE, GINT_TO_POINTER(2)); update_entry_int (GTK_ENTRY(widg), tmp_cpmd -> restart[2]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); // Trajectory: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button(_("Create a trajectory"), -1, -1, tmp_cpmd -> restart[3], G_CALLBACK(update_restart_check), GINT_TO_POINTER(3)), FALSE, FALSE, 20); trap_box[0] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox,trap_box[0], FALSE, FALSE, 0); hbox = cpmd_box (trap_box[0], _("Save the atomic coordinates every: "), 0, 25, 300); sace[0] = create_entry (G_CALLBACK(update_restart_parameter), 100, 15, FALSE, GINT_TO_POINTER(3)); update_entry_int (GTK_ENTRY(sace[0]), tmp_cpmd -> restart[3]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sace[0], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new(_("steps")), FALSE, FALSE, 10); hbox = cpmd_box (trap_box[0], _("Write XYZ format"), 0, 25, 300); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(NULL, -1, -1, tmp_cpmd -> restart[4], G_CALLBACK(update_restart_check), GINT_TO_POINTER(4)), FALSE, FALSE, 0); hbox = cpmd_box (trap_box[0], _("Write atomic forces"), 0, 25, 300); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(NULL, -1, -1, tmp_cpmd -> restart[5], G_CALLBACK(update_restart_check), GINT_TO_POINTER(5)), FALSE, FALSE, 0); widget_set_sensitive (trap_box[0], tmp_cpmd -> restart[3]); // Print information add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button(_("Print extra data in the global output file"), -1, -1, tmp_cpmd -> restart[6], G_CALLBACK(update_restart_check), GINT_TO_POINTER(6)), FALSE, FALSE, 20); trap_box[1] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, trap_box[1], FALSE, FALSE, 0); hbox = cpmd_box (trap_box[1], _("Save the extra information every: "), 0, 25, 300); sace[1] = create_entry (G_CALLBACK(update_restart_parameter), 100, 15, FALSE, GINT_TO_POINTER(6)); update_entry_int (GTK_ENTRY(sace[1]), tmp_cpmd -> restart[6]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sace[1], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new(_("steps")), FALSE, FALSE, 10); hbox = cpmd_box (trap_box[1], _("Select the information to print:"), 5, 25, 300); widget_set_sensitive (trap_box[1], tmp_cpmd -> restart[6]); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, trap_box[1], hbox, FALSE, FALSE, 0); gchar * print_str[3]={i18n("Information"), i18n("Coordinates"), i18n("Forces")}; for (i=0; i<3; i++) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(_(print_str[i]), -1, -1, tmp_cpmd -> restart[i+7], G_CALLBACK(update_restart_check), GINT_TO_POINTER(i+7)), FALSE, FALSE, 5); } return vbox; } atomes_1.3.1/src/calc/cpmd/cpmd_atoms.c0000664000175000017500000005133415212624223017421 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cpmd_atoms.c * @short Functions to handle dummy atom(s) for the CPMD input file * @author Sébastien Le Roux */ /* * This file: 'cpmd_atoms.c' * * Contains: * - The functions to handle dummy atom(s) for the CPMD input file * * List of functions: void create_dummy_param_box (int dummy_id); void dummy_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void dummy_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void clean_dummy_widgets (); void remove_dummy (int num_to_remove); void add_dummy (int extra); G_MODULE_EXPORT void update_dummy_coord (GtkEntry * res, gpointer data); G_MODULE_EXPORT void dummy_type_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void changed_dummy_id_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void select_dummy (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void run_remove_dummy (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void add_or_remove_dummy (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void atom_button (GtkWidget * but, gpointer data); GtkWidget * create_dummy_box (); dummy_atom * get_active_dummy (int id); dummy_atom * init_dummy (int type, int id); */ #include "global.h" #include "interface.h" #include "glview.h" #include "calc.h" #include "cpmd.h" extern void create_selection_combo (int id, int num, int type, GCallback handler); extern void print_the_section (int s, int p, GtkTextBuffer * buffer); extern void create_selection_button (GtkWidget * box, int num, int id, gpointer data); extern G_MODULE_EXPORT void changed_opt_box (GtkComboBox * box, gpointer data); extern GtkWidget * combo_id[2]; extern GtkWidget * combo_id_box[2]; extern ColRGBA init_color (int id, int numid); extern int num_cpmd_objects; GtkWidget * dummy_box[2]; GtkWidget * the_dummy_box; GtkWidget * dummy_param_box; dummy_atom * dummy; int n_dummy; int * old_dummy; GtkCellRenderer * dummy_renderer[5]; GtkTreeViewColumn * dummy_col[5]; /*! \fn dummy_atom * get_active_dummy (int id) \brief get dummy atom by id \param id the target dummy atom id */ dummy_atom * get_active_dummy (int id) { dummy_atom * dumm = tmp_cpmd -> dummy; while (dumm -> id != id) { if (dumm -> next != NULL) dumm = dumm -> next; } return dumm; } /*! \fn G_MODULE_EXPORT void update_dummy_coord (GtkEntry * res, gpointer data) \brief udate dummy atom coordinate entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_dummy_coord (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); dummy -> xyz[i] = v; update_entry_double (res, dummy -> xyz[i]); print_the_section (8, 0, qmbuffer[8]); } void create_dummy_param_box (int dummy_id); /*! \fn G_MODULE_EXPORT void dummy_type_changed (GtkComboBox * box, gpointer data) \brief change the dummy atom type \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void dummy_type_changed (GtkComboBox * box, gpointer data) { int i; i = combo_get_active ((GtkWidget *)box); if (i != dummy -> type) { dummy -> type = i; create_dummy_param_box (dummy -> id); } print_the_section (8, 0, qmbuffer[8]); } /*! \fn void create_dummy_param_box (int dummy_id) \brief crreate dummy atom parameter widgets \param dummy_id dummy atom id */ void create_dummy_param_box (int dummy_id) { gchar * str; dummy_box[1] = destroy_this_widget (dummy_box[1]); if (tmp_cpmd -> dummies > 0) { GtkWidget * hbox; GtkWidget * widg; str = g_strdup_printf (_("Configuration for dummy atom N°%d: "), dummy_id+1); dummy_box[1] = create_vbox (BSEP); cpmd_box (dummy_box[1], str, 0, 5, 280); g_free (str); int i; hbox = cpmd_box (dummy_box[1], _("Type of dummy atom:"), 0, 25, -1); GtkWidget * box = create_combo (); gchar * dtext[3] = {i18n("fixed in space:"), i18n("calculated by\nthe arithmetic mean of the coordinates of the selected atom(s)"), i18n("calculated by\nthe center of mass of the coordinates of the selected atom(s)")}; for (i=0; i<3; i++) { str = g_strdup_printf ("%s %d", _("Type"), i+1); combo_text_append (box, str); g_free (str); } g_signal_connect (G_OBJECT (box), "changed", G_CALLBACK(dummy_type_changed), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, box, FALSE, FALSE, 10); dummy = get_active_dummy (dummy_id); str = g_strdup_printf (_("The coordinates of the dummy atom are %s"), _(dtext[dummy -> type])); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, dummy_box[1], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, (dummy -> type == 0) ? 40 : 60, 0.0, 0.5), FALSE, FALSE, 25); g_free (str); if (dummy -> type > 0) { create_selection_button (dummy_box[1], dummy -> natoms, 2, GINT_TO_POINTER(-(dummy -> id + 2))); } else { gchar * lcoo[3]={"x", "y", "z"}; for (i=0; i<3; i++) { str = g_strdup_printf (_("Dummy %s coordinate: "), lcoo[i]); hbox = cpmd_box (dummy_box[1], str, 0, 25, -1); widg = create_entry (G_CALLBACK(update_dummy_coord), 100, 15, FALSE, GINT_TO_POINTER(i)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 10); update_entry_double (GTK_ENTRY(widg), dummy -> xyz[i]); } } combo_set_active (box, dummy -> type); add_box_child_start (GTK_ORIENTATION_VERTICAL, dummy_box[0], dummy_box[1], FALSE, FALSE, 0); show_the_widgets (dummy_box[1]); } } /*! \fn G_MODULE_EXPORT void changed_dummy_id_box (GtkComboBox * box, gpointer data) \brief change the dummy atom id \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_dummy_id_box (GtkComboBox * box, gpointer data) { int i; i = combo_get_active ((GtkWidget *)box); create_dummy_param_box (i); } /*! \fn dummy_atom * init_dummy (int type, int id) \brief create dummy atom \param type the type of dummy atom to create \param id the id of the new dummy atom */ dummy_atom * init_dummy (int type, int id) { dummy_atom * dumm = g_malloc0(sizeof*dumm); dumm -> id = id; dumm -> type = type; dumm -> show = FALSE; dumm -> natoms = 0; dumm -> list = NULL; dumm -> xyz[0] = 0.0; dumm -> xyz[1] = 0.0; dumm -> xyz[2] = 0.0; return dumm; } /*! \fn G_MODULE_EXPORT void select_dummy (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select dummy atom toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void select_dummy (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { GtkTreeStore ** model = (GtkTreeStore **)data; GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(* model), & iter, path); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { get_active_dummy (old_dummy[n_dummy-1]) -> show = FALSE; old_dummy[n_dummy-1] = -1; n_dummy --; gtk_tree_store_set (* model, & iter, 4, 0, -1); //toviz.c = 0; } else { n_dummy ++; gtk_tree_store_set (* model, & iter, 4, 1, -1); gtk_tree_model_get (GTK_TREE_MODEL(* model), & iter, 0, & old_dummy[n_dummy-1], -1); old_dummy[n_dummy-1] --; get_active_dummy (old_dummy[n_dummy-1]) -> show = TRUE; //toviz.c = 1; } // Viz } /*! \fn void dummy_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the CPMD dummy atom(s) tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void dummy_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i; gtk_tree_model_get (mod, iter, 0, & i, -1); i = abs(i); set_renderer_color (get_active_dummy (i-1) -> show, renderer, init_color (i-1, num_cpmd_objects)); } /*! \fn void dummy_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer in the CPMD dummy atom(s) tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void dummy_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & j, -1); if (j > 0 && i != 3) { gtk_cell_renderer_set_visible (renderer, TRUE); if (i < 3) dummy_set_color (col, renderer, mod, iter, data); } else if (j > 0) { gtk_cell_renderer_set_visible (renderer, FALSE); } else if (i == 3) { gtk_cell_renderer_set_visible (renderer, TRUE); dummy_set_color (col, renderer, mod, iter, data); } else { gtk_cell_renderer_set_visible (renderer, FALSE); } } GtkWidget * create_dummy_box (); /*! \fn void clean_dummy_widgets () \brief destroy dummy atom(s) widgets */ void clean_dummy_widgets () { combo_id_box[1] = destroy_this_widget (combo_id_box[1]); combo_id[1] = destroy_this_widget (combo_id[1]); dummy_box[1] = destroy_this_widget (dummy_box[1]); dummy_box[0] = destroy_this_widget (dummy_box[0]); the_dummy_box = destroy_this_widget (the_dummy_box); } /*! \fn G_MODULE_EXPORT void run_remove_dummy (GtkDialog * dialog, gint response_id, gpointer data) \brief remove dummy atom(s) - running the dialog \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_remove_dummy (GtkDialog * dialog, gint response_id, gpointer data) { int i, j; gboolean done = FALSE; int num_to_remove = GPOINTER_TO_INT(data); dummy_atom * dumm; gchar * str; switch (response_id) { case GTK_RESPONSE_APPLY: if (n_dummy == num_to_remove) { done = TRUE; // Now we remove all selected dummy atoms for (i=0; i dummy; for (j=0; j dummies; j++) { if (dumm -> id == old_dummy[i]) { if (dumm -> next != NULL) { if (dumm -> prev != NULL) { dumm -> next -> prev = dumm -> prev; dumm -> prev -> next = dumm -> next; } else { tmp_cpmd -> dummy = dumm -> next; tmp_cpmd -> dummy -> prev = NULL; } g_free (dumm); } else if (dumm -> prev != NULL) { dumm -> prev -> next = NULL; g_free (dumm); } else { g_free (tmp_cpmd -> dummy); tmp_cpmd -> dummy = NULL; } break; } if (dumm -> next != NULL) dumm = dumm -> next; } } tmp_cpmd -> dummies -= num_to_remove; if (tmp_cpmd -> dummies > 0) { dumm = tmp_cpmd -> dummy; for (j=0; j dummies; j++) { dumm -> id = j; if (dumm -> next != NULL) dumm = dumm -> next; } } clean_dummy_widgets (); the_dummy_box = create_dummy_box (); add_box_child_start (GTK_ORIENTATION_VERTICAL, dummy_param_box, the_dummy_box, FALSE, FALSE, 0); show_the_widgets (dummy_param_box); } else { str = g_strdup_printf (_("You must select %d dummy atom(s) to be deleted !"), num_to_remove); show_warning (str, qm_assistant); g_free (str); } break; default: // field_unselect_all (); done = TRUE; break; } if (done) destroy_this_dialog (dialog); } /*! \fn void remove_dummy (int num_to_remove) \brief remove dummy atom(s) - creating the dialog \param num_to_remove the number of dummy atom(s) to remove */ void remove_dummy (int num_to_remove) { int i, j, k; gchar * str; str = g_strdup_printf (_("Select the %d dummy atom(s) to be removed"), num_to_remove); GtkWidget * rdummy = dialogmodal (str, GTK_WINDOW(qm_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(rdummy), _("Apply"), GTK_RESPONSE_APPLY); gchar * mol_title[5] = {i18n("Id."), i18n("Type"), i18n("Atom(s)"), " ", i18n("Select")}; gchar * ctype[5] = {"text", "text", "text", "text", "active"}; GType col_type[5] = {G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN}; GtkTreeIter dummy_level, atom_level; n_dummy = 0; old_dummy = allocint (tmp_cpmd -> dummies); GtkTreeStore * remove_model = gtk_tree_store_newv (5, col_type); GtkWidget * remove_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(remove_model)); for (i=0; i<5; i++) { if (i < 4) { dummy_renderer[i] = gtk_cell_renderer_text_new (); } else { dummy_renderer[i] = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE(dummy_renderer[i]), TRUE); g_signal_connect (G_OBJECT(dummy_renderer[i]), "toggled", G_CALLBACK(select_dummy), & remove_model); } dummy_col[i] = gtk_tree_view_column_new_with_attributes ((i != 3) ? _(mol_title[i]) : mol_title[i], dummy_renderer[i], ctype[i], i, NULL); gtk_tree_view_column_set_alignment (dummy_col[i], 0.5); gtk_tree_view_append_column (GTK_TREE_VIEW(remove_tree), dummy_col[i]); gtk_tree_view_column_set_cell_data_func (dummy_col[i], dummy_renderer[i], dummy_set_visible, GINT_TO_POINTER(i), NULL); } // fill model dummy_atom * dumm = tmp_cpmd -> dummy; for (i=0; i dummies; i++) { gtk_tree_store_append (remove_model, & dummy_level, NULL); gtk_tree_store_set (remove_model, & dummy_level, 0, i+1, 1, g_strdup_printf ("%s %d", _("Type"), dumm -> type + 1), 2, dumm -> natoms, 3, NULL, 4, 0, -1); for (j=0; j natoms; j++) { gtk_tree_store_append (remove_model, & atom_level, & dummy_level); k = qm_proj -> atoms[0][dumm -> list[j]].sp; str = g_strdup_printf ("%s%d", exact_name(qm_proj -> chemistry -> label[k]), dumm -> list[j]+1); gtk_tree_store_set (remove_model, & atom_level, 0, -(i+1), 1, 0.0, 2, 0.0, 3, str, 4, 0, -1); g_free (str); } if (dumm -> next != NULL) dumm = dumm -> next; } num_cpmd_objects = tmp_cpmd -> dummies; g_object_unref (remove_model); i = ((tmp_cpmd -> dummies+1)*40 < 500) ? (tmp_cpmd -> dummies+1)*40 : 500; GtkWidget * scrollsets = create_scroll (dialog_get_content_area (rdummy), 450, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, remove_tree); run_this_gtk_dialog (rdummy, G_CALLBACK(run_remove_dummy), GINT_TO_POINTER(num_to_remove)); } /*! \fn void add_dummy (int extra) \brief add dummy atom(s) \param extra the number of dummy atom(s) to add */ void add_dummy (int extra) { int i; if (tmp_cpmd -> dummy == NULL) { tmp_cpmd -> dummy = init_dummy (0, 0); tmp_cpmd -> dummies = 1; extra --; } dummy_atom * dumm = tmp_cpmd -> dummy; while (dumm -> next != NULL) dumm = dumm -> next; for (i=0; i next = init_dummy (0, i+tmp_cpmd -> dummies); dumm -> next -> prev = dumm; dumm = dumm -> next; } tmp_cpmd -> dummies += extra; // finaly update the combobox create_selection_combo (1, tmp_cpmd -> dummies, 0, G_CALLBACK(changed_dummy_id_box)); } /*! \fn G_MODULE_EXPORT void add_or_remove_dummy (GtkSpinButton * res, gpointer data) \brief add or remove dummy atom spin callback \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_or_remove_dummy (GtkSpinButton * res, gpointer data) { int id = gtk_spin_button_get_value_as_int(res); int k; gchar * str; gboolean to_add_dummy = TRUE; if (id != tmp_cpmd -> dummies) { if (id > tmp_cpmd -> dummies) { // adding dummy k = id - tmp_cpmd -> dummies; if (k > 1) { str = g_strdup_printf (_("Do you really want to add %d dummy atom(s) ?"), k); to_add_dummy = ask_yes_no (_("Adding dummy atom(s) ?"), str, GTK_MESSAGE_QUESTION, qm_assistant); g_free (str); } if (to_add_dummy) { add_dummy (k); } } else if (id < tmp_cpmd -> dummies) { remove_dummy (tmp_cpmd -> dummies - id); } } gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), tmp_cpmd -> dummies); print_the_section (8, 0, qmbuffer[8]); } /*! \fn GtkWidget * create_dummy_box () \brief create the dummy atom(s) widgets */ GtkWidget * create_dummy_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * widg; hbox = cpmd_box (vbox, _("Number of dummy atom(s):"), 5, 20, 200); widg = spin_button (G_CALLBACK(add_or_remove_dummy), tmp_cpmd -> dummies, 0.0, (double)qm_proj -> natomes, 1.0, 0, 100, NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); combo_id[1] = cpmd_box (vbox, _("Dummy atom to configure: "), 5, 5, 200); dummy_box[0] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, dummy_box[0], FALSE, FALSE, 10); create_selection_combo (1, tmp_cpmd -> dummies, 0, G_CALLBACK(changed_dummy_id_box)); return vbox; } /*! \fn G_MODULE_EXPORT void atom_button (GtkWidget * but, gpointer data) \brief CPMD input file, add constraint(s) or dummy atom(s) - creating the dialog \param but the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void atom_button (GtkWidget * but, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); GtkWidget * amol = dialogmodal ((i == DEFCO) ? _("Add and configure constraint(s)") : _("Add and configure dummy atoms"), GTK_WINDOW(qm_assistant)); GtkWidget * vbox = dialog_get_content_area (amol); GtkWidget * hbox; GtkWidget * widg; gchar * str; if (i == DEFCO) { hbox = cpmd_box (vbox, _(default_opts[5][1]), 5, 20, 120); widg = create_combo (); for (j=0; j default_opts[i+1]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_opt_box), GINT_TO_POINTER(i+1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); create_selection_button (vbox, tmp_cpmd -> fixat, 1, GINT_TO_POINTER(-1)); j = (tmp_cpmd -> default_opts[i+1] < 0.0) ? 0 : (int) tmp_cpmd -> default_opts[i+1]; widget_set_sensitive (sel_but[1], j); } else if (i == DEFDU) { dummy_box[0] = NULL; dummy_box[1] = NULL; combo_id[1] = NULL; dummy_param_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, dummy_param_box, FALSE, FALSE, 0); the_dummy_box = create_dummy_box(); add_box_child_start (GTK_ORIENTATION_VERTICAL, dummy_param_box, the_dummy_box, FALSE, FALSE, 0); } run_this_gtk_dialog (amol, G_CALLBACK(run_destroy_dialog), NULL); } atomes_1.3.1/src/calc/cpmd/cpmd_nose.c0000664000175000017500000016306615212624223017250 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cpmd_nose.c * @short Functions to prepare the thermostat(s) configuration widgets for QM / QM-MM input files * @author Sébastien Le Roux */ /* * This file: 'cpmd_nose.c' * * Contains: * - The functions to prepare the thermostat(s) configuration widgets for QM / QM-MM input files * * List of functions: int get_num_thermo (); int is_not_thermostated (int at, int therm); int is_fixed_atom (int at); int in_dummy (int at, int id); gboolean are_all_atoms_thermostated (); gboolean was_it_selected (int id, int at); void set_going_forward (); void clean_nose_widgets (); void thermo_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void thermo_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void remove_nose_thermostat (int num_to_remove); void init_thermostats (int type, int elec); void clean_thermostat (int new_type); void nose_parameters (GtkWidget * vbox, int id, int jd, gchar ** la, gchar ** lb); void atom_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void atom_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void fill_thermo_atom_model (int therm); void select_atom_from_model (int therm); void create_selection_button (GtkWidget * box, int num, int id, gpointer data); void create_nose_thermo_param_box (int therm_id); void create_selection_combo (int id, int num, int type, GCallback handler); void add_thermostat (int extra); void prepare_therm_ions (); void prepare_therm_elec (); void thermo_type_box (GtkWidget * vbox, gchar * str, int id); G_MODULE_EXPORT void select_thermo (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void run_remove_nose_thermostat (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void cpmd_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void cp2k_select_coord_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void select_atoms_not_thermostated (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void select_atoms_not_thermostated (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void run_select_atom_from_model (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void atom_selection_button (GtkButton * but, gpointer data); G_MODULE_EXPORT void changed_nose_thermo_id_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void add_or_remove_thermostat (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void update_thermo_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void changed_thermo_box_nose (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void changed_thermo_box (GtkComboBox * box, gpointer data); GtkWidget * create_nose_box (int n); GtkWidget * thermo_box (); thermostat * get_thermo (); thermostat * get_active_thermostat (int id); thermostat * init_thermo (int id, int type, int sys); */ #include "global.h" #include "interface.h" #include "glview.h" #include "calc.h" #include "cpmd.h" #include "cp2k.h" extern void print_the_section (int s, int p, GtkTextBuffer * buffer); extern ColRGBA init_color (int id, int numid); extern void proj_unselect_all_atoms (); extern GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim); extern dummy_atom * get_active_dummy (int id); extern void create_dummy_param_box (int dummy_id); gchar * c_thermo[2][CP2NTHERM][4] = {{{i18n("Initial temperature: "), " ", " ", " "}, {i18n("Target temperature: "),i18n("Tolerance: "), " ", " "}, {i18n("Target temperature: "), i18n("Target frequency: "), " ", " "}, {" ", " ", " ", " "}, {" ", " ", " ", " "}}, {{" ", " ", " ", " "}, {i18n("Time constant (Langevin): "), i18n("Time constant (Nosë-Hoover): "), i18n("Mass: "), "Chi: "}, {i18n("Time constant: "), " ", " ", " "}, {" ", " ", " ", " "}, {i18n("Length: "), i18n("Multiple time steps: "), i18n("Time constant: "), i18n("Yoshida integrator: ")}}}; gchar * u_thermo[2][CP2NTHERM][4] = {{{" K", " ", " ", " "}, {" K", " K", " ", " "}, {" K", " cm-1", " ", " "}, {" ", " ", " ", " "}, {" ", " ", " ", " "}}, {{" ", " ", " ", " "}, {" fs", " fs", " fs-1", " fs-1"}, {" fs", " ", " ", " "}, {" ", " ", " ", " "}, {" ", " ", " fs", " "}}}; gchar * ue_thermo[CP2NTHERM][4] = {{" a.u.", " ", " ", " "}, {" a.u.", " ", " ", " "}, {" a.u.", " a.u.", " ", " "}, {" a.u.", " cm-1", " ", " "}}; int v_thermo[2][CP2NTHERM] = {{1, 2, 2, 0, 0}, {0, 4, 1, 0, 4}}; double d_thermo[2][CP2NTHERM][4] = {{{ 300.0, 0.0, 0.0, 0.0}, { 300.0, 20.0, 0.0, 0.0}, { 300.0, 200.0, 0.0, 0.0}, { 0.0, 0.0, 0.0, 0.0}, { 0.0, 0.0, 0.0, 0.0}}, {{ 0.0, 0.0, 0.0, 0.0}, { 100.0, 100.0, 1.0, 1.0}, { 100.0, 0.0, 0.0, 0.0}, { 0.0, 0.0, 0.0, 0.0}, { 3.0, 2.0, 1000.0, 3.0}}}; GtkWidget * sel_but[3]; GtkWidget * sel_img[3]; GtkWidget * electron_box; GtkWidget * therm_ions; GtkWidget * therm_elec; GtkWidget * therm_param_ions; GtkWidget * therm_param_elec; GtkWidget * nose_box; GtkWidget * combo_id[2]; GtkWidget * combo_id_box[2]; GtkWidget * nose_id_box[2]; GtkCellRenderer * thermo_renderer[6]; GtkTreeViewColumn * thermo_col[6]; int n_therm; int at_col; int * old_thermo; int ** old_fixed; int num_cpmd_objects; int the_therm; gboolean fixco; GtkTreeStore * add_model; /*! \fn thermostat * get_thermo () \brief get QM / QM-MM ions thermostat */ thermostat * get_thermo () { if (is_cpmd) { return tmp_cpmd -> ions_thermostat; } else { return tmp_cp2k -> ions_thermostat; } } /*! \fn int get_num_thermo () \brief get the number of thermostat(s) */ int get_num_thermo () { if (is_cpmd) { return tmp_cpmd -> thermostats; } else { return tmp_cp2k -> thermostats; } } /*! \fn gboolean are_all_atoms_thermostated () \brief are all atom(s) in the model thermostated ? */ gboolean are_all_atoms_thermostated () { int i, j; thermostat * thermo = get_thermo(); j = 0; if (thermo -> sys < LOCAL) return TRUE; for (i=0; i natoms; if (thermo -> next != NULL) thermo = thermo -> next; } if (j == qm_proj -> natomes) { return TRUE; } else { return FALSE; } } /*! \fn void set_going_forward () \brief QM / QM-MM assistant going forward on thermostat page */ void set_going_forward () { GtkAssistant * assist = GTK_ASSISTANT(qm_assistant); GtkWidget * page = gtk_assistant_get_nth_page (assist, (is_cpmd) ? 3 : 5); gtk_assistant_set_page_complete (assist, page, are_all_atoms_thermostated ()); } /*! \fn void clean_nose_widgets () \brief clean thermostat widgets */ void clean_nose_widgets () { combo_id_box[0] = destroy_this_widget (combo_id_box[0]); combo_id[0] = destroy_this_widget (combo_id[0]); nose_id_box[1] = destroy_this_widget (nose_id_box[1]); nose_id_box[0] = destroy_this_widget (nose_id_box[0]); nose_box = destroy_this_widget (nose_box); } /*! \fn thermostat * get_active_thermostat (int id) \brief get thermostat using id \param id the thermostat id */ thermostat * get_active_thermostat (int id) { if (id < 0) { return tmp_cpmd -> elec_thermostat; } else { thermostat * thermo = get_thermo (); while (thermo -> id != id) { if (thermo -> next != NULL) thermo = thermo -> next; } return thermo; } } /*! \fn G_MODULE_EXPORT void select_thermo (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select QM / QM-MM thermostat toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer * */ G_MODULE_EXPORT void select_thermo (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { GtkTreeStore ** model = (GtkTreeStore **)data; GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(* model), & iter, path); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { get_active_thermostat (old_thermo[n_therm-1]) -> show = FALSE; old_thermo[n_therm-1] = -1; n_therm --; gtk_tree_store_set (* model, & iter, 5, 0, -1); //toviz.c = 0; } else { n_therm ++; gtk_tree_store_set (* model, & iter, 5, 1, -1); gtk_tree_model_get (GTK_TREE_MODEL(* model), & iter, 0, & old_thermo[n_therm-1], -1); old_thermo[n_therm-1] --; get_active_thermostat (old_thermo[n_therm-1]) -> show = TRUE; //toviz.c = 1; } // Viz } /*! \fn void thermo_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the QM / QM-MM thermostat selection tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void thermo_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; gtk_tree_model_get (mod, iter, 0, & i, -1); i = abs(i); gtk_tree_model_get (mod, iter, 5, & j, -1); set_renderer_color (j, renderer, init_color (i-1, num_cpmd_objects)); } /*! \fn void thermo_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer in the QM / QM-MM thermostat selection tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void thermo_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & j, -1); if (j > 0 && i != 4) { gtk_cell_renderer_set_visible (renderer, TRUE); if (i < 5) thermo_set_color (col, renderer, mod, iter, data); } else if (j > 0) { gtk_cell_renderer_set_visible (renderer, FALSE); } else if (i == 4) { gtk_cell_renderer_set_visible (renderer, TRUE); thermo_set_color (col, renderer, mod, iter, data); } else { gtk_cell_renderer_set_visible (renderer, FALSE); } } GtkWidget * create_nose_box (int n); /*! \fn G_MODULE_EXPORT void run_remove_nose_thermostat (GtkDialog * dialog, gint response_id, gpointer data) \brief remove thermostat(s) - running the dialog \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_remove_nose_thermostat (GtkDialog * dialog, gint response_id, gpointer data) { int i, j; int num_to_remove = GPOINTER_TO_INT(data); gboolean done = FALSE; gchar * str; thermostat * thermo; switch (response_id) { case GTK_RESPONSE_APPLY: if (n_therm == num_to_remove) { done = TRUE; // Now we remove all selected thermostats: for (i=0; i id == old_thermo[i]) { if (thermo -> next != NULL) { if (thermo -> prev != NULL) { thermo -> next -> prev = thermo -> prev; thermo -> prev -> next = thermo -> next; } else { tmp_cpmd -> ions_thermostat = thermo -> next; tmp_cpmd -> ions_thermostat -> prev = NULL; } } else { thermo -> prev -> next = NULL; } g_free (thermo); break; } if (thermo -> next != NULL) thermo = thermo -> next; } } if (is_cpmd) { tmp_cpmd -> thermostats -= num_to_remove; } else { tmp_cp2k -> thermostats -= num_to_remove; } thermo = get_thermo(); for (j=0; j id = j; if (thermo -> next != NULL) thermo = thermo -> next; } clean_nose_widgets (); nose_box = create_nose_box (get_thermo() -> type); add_box_child_start (GTK_ORIENTATION_VERTICAL, therm_param_ions, nose_box, FALSE, FALSE, 0); //int j; //for (j=1; j<4; j++) print_the_section (j, 0, qmbuffer[j]);); show_the_widgets (therm_param_ions); } else { str = g_strdup_printf (_("You must select %d thermostat(s) to be deleted !"), num_to_remove); show_warning (str, qm_assistant); g_free (str); } break; default: done = TRUE; break; } if (done) destroy_this_dialog (dialog); } /*! \fn void remove_nose_thermostat (int num_to_remove) \brief remove thermostat(s) - creating the dialog \param num_to_remove the number of thermostat(s) to remove */ void remove_nose_thermostat (int num_to_remove) { int i, j, k; gchar * str; // int cpmd_object = 0; str = g_strdup_printf (_("Select the %d thermostat(s) to be removed"), num_to_remove); GtkWidget * rthermo = dialogmodal (str, GTK_WINDOW(qm_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(rthermo), _("Apply"), GTK_RESPONSE_APPLY); gchar * mol_title[6] = {i18n("Id."), i18n("Target T°"), i18n("Frequency"), i18n("Atom(s)"), " ", i18n("Select")}; gchar * ctype[6] = {"text", "text", "text", "text", "text", "active"}; GType col_type[6] = {G_TYPE_INT, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN}; GtkTreeIter thermo_level, atom_level; n_therm = 0; old_thermo = allocint (get_num_thermo()); GtkTreeStore * remove_model = gtk_tree_store_newv (6, col_type); GtkWidget * remove_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(remove_model)); for (i=0; i<6; i++) { if (i < 5) { thermo_renderer[i] = gtk_cell_renderer_text_new (); } else { thermo_renderer[i] = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE(thermo_renderer[i]), TRUE); g_signal_connect (G_OBJECT(thermo_renderer[i]), "toggled", G_CALLBACK(select_thermo), & remove_model); } thermo_col[i] = gtk_tree_view_column_new_with_attributes ((i != 4) ? _(mol_title[i]) : mol_title[i], thermo_renderer[i], ctype[i], i, NULL); gtk_tree_view_column_set_alignment (thermo_col[i], 0.5); gtk_tree_view_append_column (GTK_TREE_VIEW(remove_tree), thermo_col[i]); gtk_tree_view_column_set_cell_data_func (thermo_col[i], thermo_renderer[i], thermo_set_visible, GINT_TO_POINTER(i), NULL); } // fill model thermostat * thermo = get_thermo(); for (i=0; i params[0], 2, thermo -> params[1], 3, thermo -> natoms, 4, " ", 5, 0, -1); for (j=0; j natoms; j++) { gtk_tree_store_append (remove_model, & atom_level, & thermo_level); k = qm_proj -> atoms[0][thermo -> list[j]].sp; str = g_strdup_printf ("%s%d", exact_name(qm_proj -> chemistry -> label[k]), thermo -> list[j]+1); gtk_tree_store_set (remove_model, & atom_level, 0, -(i+1), 1, 0.0, 2, 0.0, 3, 0, 4, str, 5, 0, -1); g_free (str); } if (thermo -> next != NULL) thermo = thermo -> next; } num_cpmd_objects = get_num_thermo(); g_object_unref (remove_model); i = ((num_cpmd_objects+1)*40 < 500) ? (num_cpmd_objects+1)*40 : 500; GtkWidget * scrollsets = create_scroll (dialog_get_content_area (rthermo), 450, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, remove_tree); run_this_gtk_dialog (rthermo, G_CALLBACK(run_remove_nose_thermostat), GINT_TO_POINTER(num_to_remove)); } /*! \fn thermostat * init_thermo (int id, int type, int sys) \brief initialize new thermostat \param id the new thermostat id \param type the type of thermostat \param sys the thermostat system */ thermostat * init_thermo (int id, int type, int sys) { thermostat * thermo = g_malloc0(sizeof*thermo); thermo -> id = id; thermo -> type = type; thermo -> sys = sys; thermo -> show = FALSE; if (id < 0) { thermo -> params[0] = 0.5; thermo -> params[1] = (type == 0) ? 0.2: 200.0; } else { int i; for (i=0; i params[i] = d_thermo[!is_cpmd][type][i]; } } return thermo; } /*! \fn void init_thermostats (int type, int elec) \brief initialize thermostat(s) \param type the type of thermostat \param elec 1 = fictitious electronic thermostat */ void init_thermostats (int type, int elec) { //int i = (type == ULTRA) ? qm_proj -> nspec: 1; if (is_cpmd) { tmp_cpmd -> thermostats = 1; tmp_cpmd -> ions_thermostat = init_thermo (0, type, 0); } else { tmp_cp2k -> thermostats = 1; tmp_cp2k -> ions_thermostat = init_thermo (0, type, 0); } if (is_cpmd && elec) tmp_cpmd -> elec_thermostat = init_thermo (-1, type, 0); } /*! \fn void clean_thermostat (int new_type) \brief free thermostat data, then initialiaze new type of thermostat \param new_type the new type of thermostat */ void clean_thermostat (int new_type) { int i; thermostat * thermo = get_thermo (); if (thermo -> sys > 0) { for (i=0; i next != NULL) thermo = thermo -> next; } for (i=0; i prev != NULL) { thermo = thermo -> prev; g_free (thermo -> next); } } } g_free (thermo); init_thermostats (new_type, 0); } G_MODULE_EXPORT void update_thermo_parameter (GtkEntry * res, gpointer data); /*! \fn void nose_parameters (GtkWidget * vbox, int id, int jd, gchar ** la, gchar ** lb) \brief create thermostat parameters configuration widgets \param vbox the GtkWidget sending the signal \param id thermostat id, -2 if fictitious electronic \param jd number of parameter(s) for this thermostat \param la thermostat parameter name(s) \param lb thermostat parameter unit(s) */ void nose_parameters (GtkWidget * vbox, int id, int jd, gchar ** la, gchar ** lb) { thermostat * thermo = get_active_thermostat (id); //gchar * itemp[2]={_("Initial temperature:"), _("Target temperature:")}; gchar * str; GtkWidget * hbox; GtkWidget * widg; int i, j; i = (id < 0) ? id : 0; for (j=0; j type == 4) ? _(la[j]) : la[j]); } else { str = g_strdup_printf ("%s", _(la[j])); } hbox = cpmd_box (vbox, str, 5, (is_cpmd) ? 20 : 50, 220); g_free (str); widg = create_entry (G_CALLBACK(update_thermo_parameter), 100, 15, FALSE, GINT_TO_POINTER(i+j)); update_entry_double (GTK_ENTRY(widg), thermo -> params[j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(lb[j], -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } } /*! \fn G_MODULE_EXPORT void cpmd_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select CPMD atom id toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer * */ G_MODULE_EXPORT void cpmd_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { GtkTreeStore ** model = (GtkTreeStore **)data; GtkTreeIter iter; int i, j; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(* model), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(* model), & iter, at_col, & i, -1); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { j = 0; n_therm --; old_thermo[i-1] = 0; qm_view -> picked --; } else { j = 1; n_therm ++; old_thermo[i-1] = 1; qm_view -> picked ++; } qm_proj -> atoms[0][i-1].pick[0] = j; qm_proj -> atoms[0][i-1].label[0] = j; init_default_shaders (qm_view); gtk_tree_store_set (* model, & iter, 3, j, -1); } /*! \fn G_MODULE_EXPORT void cp2k_select_coord_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select CP2K fixed id toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer * */ G_MODULE_EXPORT void cp2k_select_coord_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, j; j = GPOINTER_TO_INT(data); GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(add_model), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(add_model), & iter, at_col, & i, -1); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { old_fixed[i-1][j-4] = 0; } else { old_fixed[i-1][j-4] = 1; } gtk_tree_store_set (add_model, & iter, (fixco) ? j : j-2, old_fixed[i-1][j-4], -1); } /*! \fn void atom_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the CPMD atom selection tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void atom_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j, k; gtk_tree_model_get (mod, iter, 1, & i, -1); gtk_tree_model_get (mod, iter, 3, & j, -1); set_renderer_color (j, renderer, init_color (i-1, num_cpmd_objects)); k = GPOINTER_TO_INT(data); if (k == 2) { set_renderer_markup (mod, iter, renderer, 2); } } /*! \fn void atom_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer in the CPMD atom selection tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void atom_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, at_col, & j, -1); if (j == 0 && i != 0) { gtk_cell_renderer_set_visible (renderer, FALSE); } else if (j == 0) { gtk_cell_renderer_set_visible (renderer, TRUE); } else if (j > 0 && i == 0) { gtk_cell_renderer_set_visible (renderer, FALSE); } else if (j > 0) { if (i < 4) { gtk_cell_renderer_set_visible (renderer, TRUE); } else { gtk_tree_model_get (mod, iter, 3, & k, -1); gtk_cell_renderer_set_visible (renderer, k); } if (i < 3) atom_set_color (col, renderer, mod, iter, data); } } /*! \fn int is_not_thermostated (int at, int therm) \brief is atom thermostated ? \param at the atom id \param therm the thermostat id */ int is_not_thermostated (int at, int therm) { int i, j; thermostat * thermo = get_thermo (); for (i=0; i natoms; j++) { if (thermo -> list[j] == at) { if (i == therm) { return 2; } else { return 0; } } } if (thermo -> next != NULL) thermo = thermo -> next; } return 1; } /*! \fn int is_fixed_atom (int at) \brief is atom fixed ? \param at the atom id */ int is_fixed_atom (int at) { int i; if (is_cpmd) { for (i=0; i fixat; i++) { if (tmp_cpmd -> fixlist[i] == at) { return i+2; } } } else { for (i=0; i fixat[0]; i++) { if (tmp_cp2k -> fixlist[0][i] == at) { return i+2; } } } return 1; } /*! \fn int in_dummy (int at, int id) \brief is atom in dummy ? \param at the atom id \param id the dummy list id */ int in_dummy (int at, int id) { dummy_atom * dummy = get_active_dummy (-(id+2)); int i; if (dummy -> natoms == qm_proj -> natomes) return 2; for (i=0; i natoms; i++) { if (dummy -> list[i] == at) return 2; } return 1; } /*! \fn gboolean was_it_selected (int id, int at) \brief was this atom already selected ? \param id the selection type \param at the atom id */ gboolean was_it_selected (int id, int at) { if (id < -1) { return in_dummy (at, id); } else if (id == -1) { return is_fixed_atom (at); } else { return is_not_thermostated (at, id); } } /*! \fn void fill_thermo_atom_model (int therm) \brief fill thermostat atom model \param therm the thermostat id */ void fill_thermo_atom_model (int therm) { int i, j, k, l, m; gchar * str; GtkTreeIter spec_level; GtkTreeIter atom_level; k = 0; for (i=0; i< qm_proj -> nspec; i++) { gtk_tree_store_append (add_model, & spec_level, NULL); gtk_tree_store_set (add_model, & spec_level, 0, qm_proj -> chemistry -> label[i], 1, 0, 3, 0, 4, 0, -1); for (j=0; j< qm_proj -> natomes; j++) { if (qm_proj -> atoms[0][j].sp == i) { k ++; l = was_it_selected (therm, j); if (fixco) { if (is_cpmd) { if (tmp_cpmd -> fixat > 0) { for (m=0; m fixat; m++) { if (qm_proj -> atoms[0][j].coord[2] == tmp_cpmd-> fixlist[m]) { l = 0; break; } } } } else { if (tmp_cp2k -> fixat[1] > 0) { for (m=0; m fixat[1]; m++) { if (qm_proj -> atoms[0][j].coord[2] == tmp_cp2k -> fixlist[1][m]) { l = 0; break; } } } } } if (l) { gtk_tree_store_append (add_model, & atom_level, & spec_level); str = g_strdup_printf ("%s%d", exact_name(qm_proj -> chemistry -> label[i]), j+1); if (fixco) { gtk_tree_store_set (add_model, & atom_level, 0, 0, 1, k, 2, str, 3, old_thermo[j], 4, old_fixed[j][0], 5, old_fixed[j][1], 6, old_fixed[j][2], at_col, j+1, -1); } else { gtk_tree_store_set (add_model, & atom_level, 0, 0, 1, k, 2, str, 3, old_thermo[j], at_col, j+1, -1); } g_free (str); } } } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_atoms_not_thermostated (GtkCheckButton * but, gpointer data) \brief select atom to thermostat toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_atoms_not_thermostated (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_atoms_not_thermostated (GtkToggleButton * but, gpointer data) \brief select atom to thermostat toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_atoms_not_thermostated (GtkToggleButton * but, gpointer data) #endif { int h, i, j, k, l, m; h = GPOINTER_TO_INT (data); j = button_get_status ((GtkWidget *)but); for (i=0; i natomes; i++) { m = 0; if (j) { k = l = m = 1; if (was_it_selected(h, i) != 1) { m = 0; } } else if (old_thermo[i]) { k = -1; l = 0; m = 1; } if (m) { n_therm += k; old_thermo[i] = l; if (l) qm_view -> picked ++; qm_proj -> atoms[0][i].pick[0] = l; qm_proj -> atoms[0][i].label[0] = l; } } gtk_tree_store_clear (add_model); fill_thermo_atom_model (h); init_default_shaders (qm_view); } /*! \fn G_MODULE_EXPORT void run_select_atom_from_model (GtkDialog * dialog, gint response_id, gpointer data) \brief select atom from model - running the dialgo \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_select_atom_from_model (GtkDialog * dialog, gint response_id, gpointer data) { int i, j; gboolean done = FALSE; gchar * str; switch (response_id) { case GTK_RESPONSE_APPLY: if (n_therm > 1) { str = g_strdup_printf (_("%d atoms have been selected !"), n_therm); } else if (n_therm) { str = g_strdup_printf (_("A single atom has been selected !")); } else { str = g_strdup_printf (_("Not at single atom has been selected !")); } str = g_strdup_printf (_("%s\nis this correct ?"), str); selection_confirmed = FALSE; field_question (str, G_CALLBACK(confirm_selection), NULL); g_free (str); if (selection_confirmed) { done = TRUE; if (fixco) { for (i=0; i natomes; i++) { if (old_thermo[i] && ! old_fixed[i][0] && ! old_fixed[i][1] && ! old_fixed[i][2]) { str = g_strdup_printf (_("Atom %d has been selected but not coordinates are frozen !\n" "Unselect atom %d or select coordinate(s) to freeze !"), i+1, i+1); show_warning (str, qm_assistant); done = FALSE; } } } } thermostat * thermo; dummy_atom * dummy; if (done) { if (the_therm < -1) { dummy = get_active_dummy (-(the_therm+2)); dummy -> natoms = n_therm; if (dummy -> list != NULL) { g_free (dummy -> list); dummy -> list = NULL; } if (n_therm > 0 && n_therm < qm_proj -> natomes) { dummy -> list = allocint (n_therm); j = -1; for (i=0; i< qm_proj -> natomes; i++) { if (old_thermo[i]) { j ++; dummy -> list[j] = i; } } } } else if (the_therm == -1) { if (is_cpmd) { if (tmp_cpmd -> fixlist != NULL) { g_free (tmp_cpmd -> fixlist); tmp_cpmd -> fixlist = NULL; if (tmp_cpmd -> fixcoord != NULL) { g_free (tmp_cpmd -> fixcoord); tmp_cpmd -> fixcoord = NULL; } } if (n_therm > 0) { tmp_cpmd -> fixlist = allocint (n_therm); if (fixco) tmp_cpmd -> fixcoord = allocdint (n_therm, 3); tmp_cpmd -> fixat = n_therm; j = -1; for (i=0; i< qm_proj -> natomes; i++) { if (old_thermo[i]) { j ++; tmp_cpmd -> fixlist[j] = i; if (fixco) { tmp_cpmd -> fixcoord[j][0] = old_fixed[i][0]; tmp_cpmd -> fixcoord[j][1] = old_fixed[i][1]; tmp_cpmd -> fixcoord[j][2] = old_fixed[i][2]; } } } } } else { if (tmp_cp2k -> fixlist[0] != NULL) { g_free (tmp_cp2k -> fixlist[0]); tmp_cp2k -> fixlist[0] = NULL; if (tmp_cp2k -> fixcoord[0] != NULL) { g_free (tmp_cp2k -> fixcoord[0]); tmp_cp2k -> fixcoord[0] = NULL; } } if (n_therm > 0) { tmp_cp2k -> fixlist[0] = allocint (n_therm); tmp_cp2k -> fixcoord[0] = allocdint (n_therm, 3); tmp_cp2k -> fixat[0] = n_therm; j = -1; for (i=0; i< qm_proj -> natomes; i++) { if (old_thermo[i]) { j ++; tmp_cp2k -> fixlist[0][j] = i; tmp_cp2k -> fixcoord[0][j][0] = old_fixed[i][0]; tmp_cp2k -> fixcoord[0][j][1] = old_fixed[i][1]; tmp_cp2k -> fixcoord[0][j][2] = old_fixed[i][2]; } } } } } else { thermo = get_active_thermostat (the_therm); thermo -> natoms = n_therm; if (thermo -> list != NULL) { g_free (thermo -> list); thermo -> list = NULL; } if (n_therm > 0) { thermo -> list = allocint (n_therm); j = -1; for (i=0; i< qm_proj -> natomes; i++) { if (old_thermo[i]) { j ++; thermo -> list[j] = i; } } } } } break; case GTK_RESPONSE_CLOSE: done = TRUE; break; } if (done) destroy_this_dialog (dialog); } /*! \fn void select_atom_from_model (int therm) \brief select atom from model - creating the dialog \param therm the thermostat id */ void select_atom_from_model (int therm) { int i, j, k, l, m; the_therm = therm; GtkTreeViewColumn * ato_col[8]; GtkCellRenderer * ato_cell[8]; gchar * ato_title[2][8] = {{i18n("Species"), i18n("Id. (*)"), i18n("Atom"), i18n("Viz.3D & Select"), " "}, {i18n("Species"), i18n("Id. (*)"), i18n("Atom"), i18n("Viz.3D & Select"), "x", "y", "z", " "}}; gchar * ctype[2][8] = {{"text", "text", "text", "active", "text", "active", "active", "active"}, {"text", "text", "text", "active", "active", "active", "active", "text"}}; GType col_type[2][8] = {{G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INT}, {G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT}}; gchar * str; at_col = 4; fixco = FALSE; qm_view -> picked = 0; if (! is_cpmd && the_therm == -1) { fixco = TRUE; } else if (is_cpmd) { if ((int)tmp_cpmd -> default_opts[DEFFI] == 2) fixco = TRUE; } if (the_therm < -1) { str = g_strdup_printf (_("Select atom(s) to construct dummy N°%d"), -(the_therm+1)); } else if (the_therm == -1) { str = g_strdup_printf (_("Select atom(s) to fix")); if (fixco) { g_free (str); at_col = 7; str = g_strdup_printf (_("Select atom(s) and coordinate(s) to fix")); } } else { str = g_strdup_printf (_("Add atom(s) to thermostat N°%d"), the_therm+1); } GtkWidget * amol = dialogmodal (str, GTK_WINDOW(qm_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(amol), _("Apply"), GTK_RESPONSE_APPLY); n_therm = 0; i = (fixco) ? 1 : 0; j = (fixco) ? 8 : 5; add_model = gtk_tree_store_newv (j, col_type[i]); GtkWidget * add_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(add_model)); for (k=0; k natomes); if (fixco) { old_fixed = allocdint (qm_proj -> natomes, 3); } k = l = 0; for (i=0; i < qm_proj -> nspec; i++) { for (j=0; j < qm_proj -> natomes; j++) { if (qm_proj -> atoms[0][j].sp == i) { k ++; m = was_it_selected (the_therm, j); if (m) { l ++; n_therm += (m > 1) ? 1 : 0; old_thermo[j] = (m > 1) ? 1 : 0; qm_proj -> atoms[0][j].pick[0] = old_thermo[j]; qm_view -> picked += old_thermo[j]; if (fixco && m > 1) { if (is_cpmd) { old_fixed[j][0] = tmp_cpmd -> fixcoord[m-2][0]; old_fixed[j][1] = tmp_cpmd -> fixcoord[m-2][1]; old_fixed[j][2] = tmp_cpmd -> fixcoord[m-2][2]; } else { old_fixed[j][0] = tmp_cp2k -> fixcoord[0][m-2][0]; old_fixed[j][1] = tmp_cp2k -> fixcoord[0][m-2][1]; old_fixed[j][2] = tmp_cp2k -> fixcoord[0][m-2][2]; } } } } } } fill_thermo_atom_model (the_therm); init_default_shaders (qm_view); num_cpmd_objects = l; g_object_unref (add_model); i = ((qm_proj -> nspec + l)*37 < 500) ? (qm_proj -> nspec + l)*37 : 500; //GtkWidget * scrollsets = create_scroll (NULL, -1, -1, GTK_SHADOW_ETCHED_IN, 0); GtkWidget * scrollsets = create_scroll (dialog_get_content_area (amol), 320, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, add_tree); str = g_strdup_printf (_(" (*) Order of appearance in the input file")); GtkWidget * vbox = dialog_get_content_area (amol); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); if (the_therm != -1) { if (get_num_thermo() > 1 || the_therm < -1) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 0); GtkWidget * hbox = create_hbox (0); gchar * lab[2] = {i18n("All non-thermostated atom(s)"), i18n("All atom(s)")}; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (_(lab[(the_therm > -1) ? 0 : 1]), -1, -1, FALSE, G_CALLBACK(select_atoms_not_thermostated), GINT_TO_POINTER(the_therm)), FALSE, FALSE, 50); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } } run_this_gtk_dialog (amol, G_CALLBACK(run_select_atom_from_model), & fixco); proj_unselect_all_atoms (); if (the_therm > -1) set_going_forward (); g_free (old_thermo); fixco = FALSE; } /*! \fn G_MODULE_EXPORT void atom_selection_button (GtkButton * but, gpointer data) \brief select atom(s) to be thermostated \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void atom_selection_button (GtkButton * but, gpointer data) { int num, id; int i = GPOINTER_TO_INT(data); select_atom_from_model (i); if (i < -1) { id = 2; num = get_active_dummy (-(i+2)) -> natoms; } else if (i == -1) { id = 1; num = (is_cpmd) ? tmp_cpmd -> fixat : tmp_cp2k -> fixat[0]; } else { id = 0; thermostat * thermo = get_active_thermostat (i); num = thermo -> natoms; } gchar * stra, * strb; if (num == 0) { stra = g_strdup_printf (_("Not picked yet !")); strb = g_strdup_printf (DELETEB); } else { stra = g_strdup_printf (_("%d atom(s)"), num); strb = g_strdup_printf (APPLY); } set_image_from_icon_name (sel_img[id], strb); gtk_button_set_label (but, stra); g_free (stra); g_free (strb); if (is_cpmd) { // CPMD if (i < -1) { print_the_section (8, 0, qmbuffer[8]); } else if (i == -1) { print_the_section (8, 0, qmbuffer[8]); } else { for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } } else { // CP2K } } /*! \fn void create_selection_button (GtkWidget * box, int num, int id, gpointer data) \brief create thermostat atom(s) selection button \param box the GtkWidget sending the signal \param num the number of atom(s) already selected \param id 0 = ionic, 1 = fictitious electronic \param data the associated data pointer */ void create_selection_button (GtkWidget * box, int num, int id, gpointer data) { int i = GPOINTER_TO_INT(data); GtkWidget * hbox = cpmd_box (box, _("Atom(s) selection: "), 5, 20, (i < -1) ? 120 : 220); gchar * str; if (num == 0) { str = g_strdup_printf (_("Not picked yet !")); sel_img[id] = stock_image (DELETEB); } else { str = g_strdup_printf (_("%d atom(s)"), (int)num); sel_img[id] = stock_image (APPLY); } sel_but[id] = gtk_button_new_with_label (str); gtk_widget_set_size_request (sel_but[id], 150, -1); g_free (str); g_signal_connect (G_OBJECT(sel_but[id]), "clicked", G_CALLBACK(atom_selection_button), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sel_but[id], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sel_img[id], FALSE, FALSE, 30); } /*! \fn void create_nose_thermo_param_box (int therm_id) \brief create thermostat configuration widgets \param therm_id the thermostat id */ void create_nose_thermo_param_box (int therm_id) { gchar * str; nose_id_box[1] = destroy_this_widget (nose_id_box[1]); str = g_strdup_printf (_("Configuration for thermostat N°%d: "), therm_id+1); nose_id_box[1] = create_vbox (BSEP); cpmd_box (nose_id_box[1], str, 5, 5, 220); g_free (str); thermostat * thermo = get_active_thermostat (therm_id); create_selection_button (nose_id_box[1], thermo -> natoms, 0, GINT_TO_POINTER(therm_id)); nose_parameters (nose_id_box[1], therm_id, v_thermo[!is_cpmd][thermo->type], c_thermo[!is_cpmd][thermo->type], u_thermo[!is_cpmd][thermo->type]); add_box_child_start (GTK_ORIENTATION_VERTICAL, nose_id_box[0], nose_id_box[1], FALSE, FALSE, 0); show_the_widgets (nose_id_box[1]); } /*! \fn G_MODULE_EXPORT void changed_nose_thermo_id_box (GtkComboBox * box, gpointer data) \brief change thermostat id \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_nose_thermo_id_box (GtkComboBox * box, gpointer data) { int i; i = combo_get_active ((GtkWidget *)box); create_nose_thermo_param_box (i); } /*! \fn void create_selection_combo (int id, int num, int type, GCallback handler) \brief create thermostat selection combo box \param id 0 = ionic, 1 = fictitious electronic \param num the number of thermostat \param type the type of thermostat \param handler the associated callback */ void create_selection_combo (int id, int num, int type, GCallback handler) { int i, j; gchar * str; gchar * lab[2]={i18n("Thermostat"), i18n("Dummy atom")}; combo_id_box[id] = destroy_this_widget (combo_id_box[id]); combo_id_box[id] = create_combo (); for (i=0; i 0) { combo_set_active (combo_id_box[id], 0); if (id == 0) { create_nose_thermo_param_box (0); } else { create_dummy_param_box (0); } } else { combo_set_active (combo_id_box[id], -1); widget_set_sensitive (combo_id_box[id], FALSE); } g_signal_connect (G_OBJECT (combo_id_box[id]), "changed", handler, GINT_TO_POINTER(j)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, combo_id[id], combo_id_box[id], FALSE, FALSE, 0); show_the_widgets (combo_id[id]); } /*! \fn void add_thermostat (int extra) \brief add thermostat(s) \param extra the number of thermostat(s) to add */ void add_thermostat (int extra) { int i, j; thermostat * thermo = get_thermo (); j = get_num_thermo (); while (thermo -> next != NULL) thermo = thermo -> next; for (i=0; i next = init_thermo (i+j, thermo -> type, thermo -> sys); thermo -> next -> prev = thermo; if (i < extra-1) thermo = thermo -> next; } if (is_cpmd) { tmp_cpmd -> thermostats += extra; } else { tmp_cp2k -> thermostats += extra; } // finally update the combobox create_selection_combo (0, get_num_thermo (), get_thermo() -> type, G_CALLBACK(changed_nose_thermo_id_box)); } /*! \fn G_MODULE_EXPORT void add_or_remove_thermostat (GtkSpinButton * res, gpointer data) \brief add / remove thermostat \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_or_remove_thermostat (GtkSpinButton * res, gpointer data) { int id = gtk_spin_button_get_value_as_int(res); int i, j, k; gchar * str; gboolean add_thermo = TRUE; thermostat * thermo = get_thermo(); if (id != get_num_thermo ()) { if (id > get_num_thermo ()) { // adding thermostats // ok if: 1) all atoms do not already have a thermostat assigned // 2) number of thermostat(s) to create < number of atoms that do have a thermostat assigned j = 0; for (i=0; i natoms; if (thermo -> next != NULL) thermo = thermo -> next; } if (j < qm_proj -> natomes) { // Number of thermostat to create k = id - get_num_thermo (); if (k < (qm_proj -> natomes - j)) { if (k > 1) { str = g_strdup_printf (_("Do you really want to add %d thermostat(s) ?"), k); add_thermo = ask_yes_no (_("Adding thermostat(s) ?"), str, GTK_MESSAGE_QUESTION, qm_assistant); g_free (str); } if (add_thermo) { add_thermostat (k); } else { // Set value back to the number of ionic thermostats gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), (double)get_num_thermo ()); } } else { show_warning (_("It is not possible to create so many thermostats"), qm_assistant); gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), (double)get_num_thermo ()); } } else { show_warning (_("All atoms arleady have a thermostat assigned"), qm_assistant); gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), (double)get_num_thermo ()); } } else { // removing thermostats remove_nose_thermostat (get_num_thermo () - id); } } gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), (double)(get_num_thermo ())); if (is_cpmd) for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn G_MODULE_EXPORT void update_thermo_parameter (GtkEntry * res, gpointer data) \brief update thermostat parameter value entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_thermo_parameter (GtkEntry * res, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (i < 0) { if (tmp_cpmd -> elec_thermostat -> params[i+2] != v) { tmp_cpmd -> elec_thermostat -> params[i+2] = v; update_entry_double (res, v); } } else { if (get_num_thermo () > 1) { j = combo_get_active (combo_id_box[0]); } else { j = 0; } thermostat * thermo = get_active_thermostat (j); if (i < 2) { if (thermo -> params[i] != v) { thermo -> params[i] = v; update_entry_double (res, v); } } else { if ((int)thermo -> params[i] != (int)v) { thermo -> params[i] = v; update_entry_int (res, (int)v); } } } if (is_cpmd) for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn GtkWidget * create_nose_box (int n) \brief create thermostat configuration widgets \param n the thermostat system */ GtkWidget * create_nose_box (int n) { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * widg; if (n > GLOBAL) { hbox = cpmd_box (vbox, _("Number of thermostat(s): "), 5, 5, 220); widg = spin_button (G_CALLBACK(add_or_remove_thermostat), (double)(get_num_thermo ()), 1.0, (double)qm_proj -> natomes, 1.0, 0, 100, NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); combo_id[0] = cpmd_box (vbox, _("Thermostat to configure: "), 5, 5, 220); nose_id_box[0] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, nose_id_box[0], FALSE, FALSE, 10); create_selection_combo (0, get_num_thermo (), get_thermo () -> type, G_CALLBACK(changed_nose_thermo_id_box)); create_nose_thermo_param_box (0); } else { nose_parameters (vbox, 0, v_thermo[!is_cpmd][get_thermo()->type], c_thermo[!is_cpmd][get_thermo() -> type], u_thermo[!is_cpmd][get_thermo()->type]); } return vbox; } /*! \fn G_MODULE_EXPORT void changed_thermo_box_nose (GtkComboBox * box, gpointer data) \brief change the type of the ionic thermostat \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_thermo_box_nose (GtkComboBox * box, gpointer data) { int i; i = combo_get_active ((GtkWidget *)box); if (i != get_thermo () -> sys) { clean_thermostat (get_thermo () -> type); clean_nose_widgets (); get_thermo () -> sys = i; nose_box = create_nose_box (get_thermo () -> sys); add_box_child_start (GTK_ORIENTATION_VERTICAL, therm_param_ions, nose_box, FALSE, FALSE, 0); int j; if (is_cpmd) for (j=1; j<4; j++) print_the_section (j, 0, qmbuffer[j]); show_the_widgets (therm_param_ions); } set_going_forward (); } /*! \fn void prepare_therm_ions () \brief prepare ions thermostat widgets */ void prepare_therm_ions () { int i, j, k; GtkWidget * hbox; GtkWidget * tbox; gchar * str; clean_nose_widgets (); therm_param_ions = destroy_this_widget (therm_param_ions); therm_param_ions = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, therm_ions, therm_param_ions, FALSE, FALSE, 0); i = (is_cpmd) ? 1 : 0; //if (is_cpmd) { if (get_thermo () -> type > i) { hbox = cpmd_box (therm_param_ions, _("Thermostat type: "), 5, 5, 220); tbox = create_combo (); j = 2; // For QM-MM: qm_view -> bonding + 2; for (k=0; k sys); g_signal_connect (G_OBJECT (tbox), "changed", G_CALLBACK(changed_thermo_box_nose), NULL); } } nose_box = create_nose_box (get_thermo () -> sys); add_box_child_start (GTK_ORIENTATION_VERTICAL, therm_param_ions, nose_box, FALSE, FALSE, 0); show_the_widgets (therm_param_ions); if (is_cpmd) for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn void prepare_therm_elec () \brief prepare electrons thermostat widgets */ void prepare_therm_elec () { therm_param_elec = destroy_this_widget (therm_param_elec); therm_param_elec = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, therm_elec, therm_param_elec, FALSE, FALSE, 0); int i; nose_parameters (therm_param_elec, -2, v_thermo[0][tmp_cpmd -> elec_thermostat -> type], c_thermo[0][tmp_cpmd -> elec_thermostat -> type], ue_thermo[tmp_cpmd -> elec_thermostat -> type]); show_the_widgets (therm_param_elec); for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn G_MODULE_EXPORT void changed_thermo_box (GtkComboBox * box, gpointer data) \brief change the thermostat family (ionic / fictitious electronic) \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_thermo_box (GtkComboBox * box, gpointer data) { int i, j; i = combo_get_active ((GtkWidget *)box); j = GPOINTER_TO_INT (data); if (j == 0 && i != get_thermo () -> type) { clean_thermostat (i); thermostat * thermo = get_thermo(); thermo -> sys = GLOBAL; prepare_therm_ions (); } else if (j == -1) { if (i != tmp_cpmd -> elec_thermostat -> type) { g_free (tmp_cpmd -> elec_thermostat); tmp_cpmd -> elec_thermostat = init_thermo (-1, i, 0); tmp_cpmd -> elec_thermostat -> sys = 0; prepare_therm_elec (); } } set_going_forward (); } /*! \fn void thermo_type_box (GtkWidget * vbox, gchar * str, int id) \brief prepare the thermostat option widgets \param vbox the GtkWidget sending the signal \param str thermostat information \param id the type of thermostat */ void thermo_type_box (GtkWidget * vbox, gchar * str, int id) { int i; GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 250, -1, 0.0, 0.5), FALSE, FALSE, 5); GtkWidget * tbox = create_combo (); for (i=0; i elec_thermostat -> type); } else { thermostat * thermo = get_thermo(); combo_set_active (tbox, thermo -> type); } g_signal_connect (G_OBJECT (tbox), "changed", G_CALLBACK(changed_thermo_box), GINT_TO_POINTER(id)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, tbox, FALSE, FALSE, 0); } /*! \fn GtkWidget * thermo_box () \brief create the thermostat configuration widgets */ GtkWidget * thermo_box () { gchar * thermo_info[2] = {i18n("Ionic subsystem thermostat: "), i18n("Thermostat: ")}; GtkWidget * vbox = create_vbox (BSEP); GtkWidget * vvbox; nose_id_box[0] = nose_id_box[1] = NULL; therm_param_ions = NULL; therm_param_elec = NULL; nose_box = NULL; combo_id_box[0] = NULL; combo_id[0] = NULL; if (get_num_thermo() == 0) init_thermostats (0, 1); // Thermostat type ions vvbox = create_vbox (BSEP); gtk_widget_set_size_request (vvbox, (is_cpmd) ? 525 : -1, (is_cpmd) ? 350 : 260); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, vvbox, FALSE, FALSE, 0); thermo_type_box (vvbox, _(thermo_info[!is_cpmd]), 0); therm_ions = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, therm_ions, FALSE, FALSE, (is_cpmd) ? 0 : 20); prepare_therm_ions (); // Thermostat type electrons if (is_cpmd) { electron_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, electron_box, FALSE, FALSE, 5); thermo_type_box (electron_box, _("Fictitious electronic subsystem: "), -1); therm_elec = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, electron_box, therm_elec, FALSE, FALSE, 0); prepare_therm_elec (); } return vbox; } atomes_1.3.1/src/calc/cp2k/0000775000175000017500000000000015212624223015035 5ustar lerouxlerouxatomes_1.3.1/src/calc/cp2k/cp2k_mol.c0000664000175000017500000002551015212624223016712 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cp2k_mol.c * @short Functions to fix fragment(s) when creating the CP2K input file * @author Sébastien Le Roux */ /* * This file: 'cp2k_mol.c' * * Contains: * - The functions to fix fragment(s) when creating the CP2K input file Note: this is not used for the time being ! * * List of functions: void frag_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void frag_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void cp2k_fix_molecule (); G_MODULE_EXPORT void select_frag (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void select_fixed_atom_confirm (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void run_cp2k_fix_molecule (GtkDialog * dial, gint response_id, gpointer data); */ #include "global.h" #include "interface.h" #include "cp2k.h" #include "calc.h" extern void proj_unselect_all_atoms (); extern ColRGBA init_color (int id, int numid); extern G_MODULE_EXPORT void cp2k_select_coord_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); extern int at_col; extern int ** old_fixed; int a_frag; int * fix_frag; extern GtkTreeStore * add_model; /*! \fn G_MODULE_EXPORT void select_frag (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select molecule toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer * */ G_MODULE_EXPORT void select_frag (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(add_model), & iter, path); int i; gtk_tree_model_get (GTK_TREE_MODEL(add_model), & iter, 0, & i, -1); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { fix_frag[i-1] = 0; a_frag --; } else { a_frag ++; fix_frag[i-1] = 1; } gtk_tree_store_set (add_model, & iter, 1, fix_frag[i-1], -1); } /*! \fn void frag_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer in the CP2K molecule tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void frag_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i; gtk_tree_model_get (mod, iter, 1, & i, -1); gtk_cell_renderer_set_visible (renderer, i); } /*! \fn void frag_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the CP2K molecule tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void frag_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; gtk_tree_model_get (mod, iter, 0, & i, -1); gtk_tree_model_get (mod, iter, 1, & j, -1); set_renderer_color (j, renderer, init_color (i, qm_coord -> totcoord[2])); } gboolean sel_and_conf; /*! \fn G_MODULE_EXPORT void select_fixed_atom_confirm (GtkDialog * dialog, gint response_id, gpointer data) \brief confirm fix selection \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void select_fixed_atom_confirm (GtkDialog * dialog, gint response_id, gpointer data) { int i; if (response_id == GTK_RESPONSE_YES) { sel_and_conf = TRUE; for (i=0; i totcoord[2]; i++) { if (fix_frag[i] && ! old_fixed[i][0] && ! old_fixed[i][1] && ! old_fixed[i][2]) { gchar * str = g_strdup_printf (_("Fragment %d has been selected but no coordinates appear to be frozen !\n" "Unselect fragment %d or select coordinate(s) to freeze !"), i+1, i+1); show_warning (str, qm_assistant); g_free (str); sel_and_conf = FALSE; } } } destroy_this_dialog (dialog); } /*! \fn G_MODULE_EXPORT void run_cp2k_fix_molecule (GtkDialog * dial, gint response_id, gpointer data) \brief CP2K assistant fixing fragment(s) - running the dialog \param dial the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_cp2k_fix_molecule (GtkDialog * dial, gint response_id, gpointer data) { gchar * str; int i, j; gboolean done = FALSE; switch (response_id) { case GTK_RESPONSE_APPLY: if (a_frag > 0) { if (a_frag > 1) { str = g_strdup_printf (_("Fragments N°%d"), fix_frag[0]+1); if (a_frag > 2) { for (i=1; i fixlist[1] != NULL) { g_free (tmp_cp2k -> fixlist[1]); tmp_cp2k -> fixlist[1] = NULL; if (tmp_cp2k -> fixcoord[1] != NULL) { g_free (tmp_cp2k -> fixcoord[1]); tmp_cp2k -> fixcoord[1] = NULL; } } if (a_frag > 0) { tmp_cp2k -> fixlist[1] = allocint (a_frag); tmp_cp2k -> fixcoord[1] = allocdint (a_frag, 3); tmp_cp2k -> fixat[1] = a_frag; j = -1; for (i=0; i totcoord[2]; i++) { if (fix_frag[i]) { j ++; tmp_cp2k -> fixlist[1][j] = i; tmp_cp2k -> fixcoord[1][j][0] = old_fixed[i][0]; tmp_cp2k -> fixcoord[1][j][1] = old_fixed[i][1]; tmp_cp2k -> fixcoord[1][j][2] = old_fixed[i][2]; } } } } } break; case GTK_RESPONSE_CLOSE: done = TRUE; break; } if (done) destroy_this_dialog (dial); } /*! \fn void cp2k_fix_molecule () \brief CP2K assistant fixing fragment(s) - creating the dialog */ void cp2k_fix_molecule () { int i, j, k; at_col = 0; gchar * str = g_strdup_printf (_("Please select the fragment(s) to fix")); GtkWidget * fmol = dialogmodal (str, GTK_WINDOW(qm_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(fmol), _("Apply"), GTK_RESPONSE_APPLY); GtkWidget * frag_tree = NULL; GtkTreeIter iter; GtkTreeViewColumn * frag_col[5]; GtkCellRenderer * frag_cell[5]; gchar * frag_title[5] = {i18n("Fragment"), i18n("Viz.3D & Select"), "x", "y", "z"}; gchar * ctype[5]={"text", "active", "active", "active", "active"}; GType col_type[5] = {G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN}; add_model = gtk_tree_store_newv (5, col_type); frag_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(add_model)); for (i=0; i<5; i++) { if (i == 0) { frag_cell[i] = gtk_cell_renderer_text_new (); } else { frag_cell[i] = gtk_cell_renderer_toggle_new (); if (i == 1) { g_signal_connect (G_OBJECT(frag_cell[i]), "toggled", G_CALLBACK(select_frag), NULL); } else { j = i + 2; g_signal_connect (G_OBJECT(frag_cell[i]), "toggled", G_CALLBACK(cp2k_select_coord_id), GINT_TO_POINTER(j)); } } frag_col[i] = gtk_tree_view_column_new_with_attributes ((i < 2) ? _(frag_title[i]) : frag_title[i], frag_cell[i], ctype[i], i, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(frag_tree), frag_col[i]); gtk_tree_view_column_set_alignment (frag_col[i], 0.5); if (i == 0) { gtk_tree_view_column_set_cell_data_func (frag_col[i], frag_cell[i], frag_set_color, NULL, NULL); } else if (i > 1) { gtk_tree_view_column_set_cell_data_func (frag_col[i], frag_cell[i], frag_set_visible, NULL, NULL); } } // fill model fix_frag = NULL; fix_frag = allocint (qm_coord -> totcoord[2]); old_fixed = allocdint (qm_coord -> totcoord[2], 3); a_frag = 0; for (i=0; i totcoord[2]; i++) { gtk_tree_store_append (add_model, & iter, NULL); for (j=0; j fixat[1]; j++) { if (tmp_cp2k -> fixlist[1][j] == i) { fix_frag[i] = 1; a_frag ++; for (k=0; k<3; k++) old_fixed[i][k] = tmp_cp2k -> fixcoord[1][j][k]; break; } } gtk_tree_store_set (add_model, & iter, 0, i + 1, 1, fix_frag[i], 2, old_fixed[i][0], 3, old_fixed[i][1], 4, old_fixed[i][2], -1); } g_object_unref (add_model); gtk_tree_view_expand_all (GTK_TREE_VIEW(frag_tree)); i = ((qm_coord -> totcoord[2]+1)*35 < 500) ? (qm_coord -> totcoord[2]+1)*35 : 500; GtkWidget * scrollsets = create_scroll (dialog_get_content_area (fmol), 220, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, frag_tree); run_this_gtk_dialog (fmol, G_CALLBACK(run_cp2k_fix_molecule), NULL); proj_unselect_all_atoms (); g_free (fix_frag); } atomes_1.3.1/src/calc/cp2k/cp2k_print.c0000664000175000017500000013704415212624223017265 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cp2k_print.c * @short Functions to print the CP2K input file(s) * @author Sébastien Le Roux */ /* * This file: 'cp2k_print.c' * * Contains: * - The functions to print the CP2K input file(s) * * List of functions: gchar * cp2kbool (double opt); void print_cp2k_var (gchar * var, GtkTextBuffer * buffer); void print_var_section (int num, gchar ** section, int i18p, int * i18pos, GtkTextBuffer * buffer); void print_thermostat_cp2k (int n_thermo, GtkTextBuffer * buffer); void print_motion_cp2k (int m, GtkTextBuffer * buffer); void print_coord_cp2k (GtkTextBuffer * buffer); void print_subsys_cp2k (GtkTextBuffer * buffer); void print_variables_cp2k (GtkTextBuffer * buffer); void print_global_cp2k (GtkTextBuffer * buffer); void print_cp2k_print (gchar * spaces, gchar * info, int i, int j, GtkTextBuffer * buffer); void print_cp2k (int f, GtkTextBuffer * buffer); */ #include "global.h" #include "interface.h" #include "calc.h" #include "cp2k.h" gchar * globopts[49] = {"@SET SYSTEM ", // 0 | - char "@SET RUN ", // 1 | 0 - char(int) "@SET CPU_TIME ", // 2 | 1 - int "@SET PRINT ", // 3 | 2 - char(int) "@SET USE_RESTART ", // 4 | 3 - bool(int) "@SET RESTART_FILE ", // 5 | 4 - char "@SET BASIS_FILE ", // 6 | 5 - char "@SET PSEUDO_FILE ", // 7 | 6 - char "@SET WAVE_FILE ", // 8 | 7 - char "@SET CHARGE ", // 9 | 8 - int "@SET CUTOFF ", // 10 | 9 - double "@SET GRIDS ", // 11 | 10 - int "@SET QS_METHOD ", // 12 | 11 - char(int) "@SET SCF_GUESS ", // 13 | 12 - char(int) "@SET SCF_NCYCLES ", // 13 | 13 - int "@SET SCF_NCONV ", // 14 | 14 - double "@SET SCF_OCYCLES ", // 16 | 15 - int "@SET SCF_OCONV ", // 17 | 16 - double "@SET OT_MINI ", // 18 | 17 - char(int) "@SET FUNCTIONAL ", // 19 | 18 - char(int) "@SET PBC ", // 20 | 29 - char(int) "@SET SYM ", // 21 | 31 - int "@SET A ", // 22 | - double "@SET B ", // 23 | - double "@SET C ", // 24 | - double "@SET ALPHA ", // 25 | - double "@SET BETA ", // 26 | - double "@SET GAMMA ", // 27 | - double "@SET AX ", // 28 | - double "@SET AY ", // 29 | - double "@SET AZ ", // 30 | - double "@SET BX ", // 31 | - double "@SET BY ", // 32 | - double "@SET BZ ", // 33 | - double "@SET CX ", // 34 | - double "@SET CY ", // 35 | - double "@SET CZ ", // 36 | - double "@SET COORD_FILE ", // 37 | - char "@SET MD_ENSEMBLE ", // 38 | 32 - char(int) "@SET MD_STEPS ", // 39 | 34 - int "@SET MD_DELTA_T ", // 40 | 35 - double "@SET MD_TEMP ", // 41 | 36 - double "@SET GEO_MINI ", // 42 | 37 - char(int) "@SET GEO_STEPS ", // 43 | 38 - int "@SET GEO_CONV ", // 44 | 39 - double "@SET OUT_STEPS ", // 45 | 40 - int "@SET OUT_UNIT ", // 46 | 42 - char(int) "@SET OUT_FORM ", // 47 | XYZ "@SET OUT_UNIT "};// 48 | Angstrom gchar * cp2kglobal[9] = {"&GLOBAL\n" " PROJECT_NAME ","SYSTEM", "\n RUN_TYPE ","RUN", "\n PRINT_LEVEL ","PRINT", "\n WALLTIME ","CPU_TIME", "\n&END GLOBAL\n"}; gchar * cp2krestart[7] = {"@IF ( ","USE_RESTART"," == TRUE )\n" " &EXT_RESTART ON\n" " RESTART_DEFAULT F\n" " RESTART_FILE_NAME ","RESTART_FILE", "\n RESTART_POS T\n" " RESTART_COUNTERS T\n" " @IF ( ","RUN"," == MOLECULAR_DYNAMICS )\n" " RESTART_VEL T\n" " RESTART_THERMOSTAT T\n" " @ENDIF\n" " &END EXT_RESTART\n" "@ENDIF\n"}; gchar * cp2kfev[8][17] = {{i18n("!\n" "! Always a FORCE_EVAL section that describes\n" "! the method to compute energy and forces\n" "!\n" "&FORCE_EVAL\n" " METHOD QUICKSTEP\n" " &DFT\n" "! First specify files that will be used thereafter \n" " BASIS_SET_FILE_NAME "), "BASIS_FILE", "\n POTENTIAL_FILE_NAME ", "PSEUDO_FILE", "\n@IF ( ","USE_RESTART"," == TRUE )\n" " WFN_RESTART_FILE_NAME ","WAVE_FILE", "\n@ENDIF\n" " CHARGE ","CHARGE", i18n("\n! Going to the Multi-grids section\n" " &MGRID\n" " CUTOFF "), "CUTOFF", i18n(" ! => Cutoff of the finest grid level\n" " NGRIDS "), "GRIDS", i18n(" ! => Number of multigrids to use, default = 4\n" " &END MGRID\n" "! Going to the Quickstep Setup section\n" " &QS\n" " METHOD "), "QS_METHOD", i18n("\n EPS_DEFAULT 1.0E-12 ! => Default value is 1.0E-10\n" " MAP_CONSISTENT TRUE ! => This is the default value\n")}, {i18n(" EXTRAPOLATION_ORDER 3 ! => This is the default value\n" " &END QS\n")}, {i18n("! Going to the Self Consistent Field section\n" " &SCF\n" "! Maximum number of cycle\n" " SCF_GUESS "), "SCF_GUESS", i18n(" ! => Initial guess for the wave-function\n" " MAX_SCF "),"SCF_NCYCLES", i18n(" ! => Maximum number of SCF cycles\n" " EPS_SCF "),"SCF_NCONV", i18n(" ! => Threshold for the SCF convergence\n" "! If after the ${SCF_NCYCLES} first SCF steps no convergence has been reached\n" "! more SCF cycles can be done updating the preconditioner. \n" "! Detail information is then presented in the 'Outer' SCF section\n" " &OUTER_SCF\n" " MAX_SCF "), "SCF_OCYCLES", i18n(" ! => We update the preconditioner and start a new SCF cycle\n" " ! up to ${SCF_NCYCLES} x ${SCF_OCYCLES} can be computed\n" " EPS_SCF "), "SCF_OCONV", i18n(" ! => Convergence threshold for the extra cycles\n" " &END OUTER_SCF\n\n" "! Going to the Orbital Transformation section\n" " &OT ON\n" " MINIMIZER "), "OT_MINI", i18n("\n PRECONDITIONER FULL_ALL ! => Preconditioner for the minimization scheme,\n" " ! FULL_ALL is the most effective state selective\n" " ! preconditioner and is based on diagonalization\n" " ENERGY_GAP 0.001 ! => Underestimated value of the Gap (HOMO-LUMO) in a.u.\n" " ! to be used with the FULL_ALL preconditioner\n" " &END OT\n\n" " &PRINT\n" "! To tune the printing of the restart file\n" " &RESTART\n" " LOG_PRINT_KEY T ! => Printing on screen when restart file is written\n" " &EACH\n" " QS_SCF 0 ! => Never write restart file(s) during the SCF cycle\n")}, {" &END EACH\n" " ADD_LAST NUMERIC\n" " &END RESTART\n"}, {i18n(" &END PRINT\n\n" " &END SCF\n" "! Going to the exchange-correlation section\n" " &XC\n" " &XC_FUNCTIONAL "), "FUNCTIONAL", "\n &END XC_FUNCTIONAL\n"}, {" &END XC\n"}, {i18n("! Spin polarized calculation\n" " UKS "), "SPIN_POLARIZED", "\n MULTIPLICITY ", "SPIN_MULTIPLICITY"}, {" &END DFT\n"}}; gchar * qs_extrapo[2]={i18n(" EXTRAPOLATION ASPC ! => ASPC recommended for MD, PS otherwise\n"), i18n(" EXTRAPOLATION PS ! => ASPC recommended for MD, PS otherwise\n")}; gchar * scf_wrestart[3][3]={{"JUST_ENERGY ","OUT_STEPS",i18n(" ! => Write restart file every ${OUT_STEPS} SCF steps\n")}, {"GEO_OPT ","OUT_STEPS",i18n(" ! => Write restart file every ${OUT_STEPS} GEO_OPT steps\n")}, {"MD ","OUT_STEPS",i18n(" ! => Write restart file every ${OUT_STEPS} MD steps\n")}}; gchar * cp2kincludes[3] = {"forces.inc", "system.inc", "motion.inc"}; gchar * thermostatr[4] = {"\n &THERMOSTAT\n", " TYPE ", "\n REGION ", " &END THERMOSTAT"}; gchar * cp2k_thermo[4] = {"AD_LANGEVIN", "CSVR", "GLE", "NOSE"}; gchar * thermo_region[3] = {"GLOBAL", "DEFINED", "MOLECULE"}; gchar * define_region[4] = {"\n &DEFINE_REGION", "\n LIST", "\n MOLECULE", "\n &END DEFINE_REGION"}; gchar * thermo_type[4][5] = {{"\n &AD_LANGEVIN" "\n TIMECON_LANGEVIN ", "\n TIMECON_NH ", "\n &CHI ", "\n &END CHI" "\n &MASS ", "\n &END MASS" "\n &END AD_LANGEVIN\n"}, {"\n &CSVR" "\n TIMECON ", "\n &END CSVR\n"}, {"\n"}, {"\n &NOSE" "\n LENGTH ", "\n MTS ", "\n TIMECON ", "\n YOSHIDA ", "\n &END NOSE\n"}}; gchar * cp2kmotion[4][15] = {{"&MOTION\n\n" " &GEO_OPT\n" " MINIMIZER ","GEO_MINI", "\n MAX_ITER ","GEO_STEPS", "\n MAX_FORCE ","GEO_CONV", "\n &END GEO_OPT\n" " &PRINT\n" " &RESTART\n" " LOG_PRINT_KEY T\n" " &EACH\n" " GEO_OPT ","OUT_STEPS", "\n &END EACH\n" " ADD_LAST NUMERIC\n" " &END RESTART\n" " &TRAJECTORY\n" " LOG_PRINT_KEY T\n" " FORMAT XYZ\n" " &EACH\n" " GEO_OPT ","OUT_STEPS", "\n &END EACH\n" " ADD_LAST NUMERIC\n" " &END TRAJECTORY\n" " &END PRINT\n"}, {"&MOTION\n\n" " &MD\n" " ENSEMBLE ","MD_ENSEMBLE", "\n STEPS ","MD_STEPS", "\n TIMESTEP ","MD_DELTA_T", "\n TEMPERATURE ","MD_TEMP"}, {"\n &END MD\n\n" " &PRINT\n" " &RESTART\n" " LOG_PRINT_KEY T\n" " &EACH\n" " MD ","OUT_STEPS", "\n &END EACH\n" " ADD_LAST NUMERIC\n" " &END RESTART\n\n" " &TRAJECTORY\n" " LOG_PRINT_KEY T\n" " FORMAT ","OUT_FORM", "\n UNIT ","OUT_UNIT", "\n &EACH\n" " MD ","OUT_STEPS", "\n &END EACH\n" " ADD_LAST NUMERIC\n" " &END TRAJECTORY\n\n" " &VELOCITIES\n" " LOG_PRINT_KEY T\n" " FORMAT ","OUT_FORM", "\n UNIT ","OUT_UNIT", "\n &EACH\n" " MD ","OUT_STEPS", "\n &END EACH\n" " ADD_LAST NUMERIC\n" " &END VELOCITIES\n" " &END PRINT\n"}, {"\n&END MOTION"}}; gchar * cp2ksyst[3][3] = {{i18n("!\n" "! Always a SUBSYS section that describes\n" "! the chemistry and the periodicity of the system\n" "!\n" "&SUBSYS\n" " &CELL\n" " PERIODIC "), "PBC","\n"}, {"\n &END CELL\n" " &COORD","\n &END COORD\n" }, {i18n("\n &END CELL\n" " &TOPOLOGY\n" "! Using an XYZ file, coordinates are always Cartesian and in angstrom\n" " COORDINATE XYZ\n" " COORD_FILE_NAME "), "COORD_FILE", "\n &END TOPOLOGY\n"}}; gchar * cp2klat[2][19] = {{" ABC ","A"," ","B"," ","C", "\n ALPHA_BETA_GAMMA ","ALPHA"," ","BETA"," ","GAMMA", "\n SYMMETRY ","SYM"," "," "," "," "," "}, {" A ","AX"," ","AY"," ","AZ", "\n B ","BX"," ","BY"," ","BZ", "\n C ","CX"," ","CY"," ","CZ","\n"}}; gchar * cp2kspin[2] = {"@SET SPIN_POLARIZED ", "@SET SPIN_MULTIPLICITY "}; gchar * cp2ksroks[3] = {"@SET ROKS ", "@SET ROKS_SCALING ", "@SET ROKS_SPIN_CONFIG "}; gchar * cp2kroks[7] = {" ROKS ","ROKS", i18n(" ! => Restricted Open Kohn-Sham calculation\n" " &LOW_SPIN_ROKS\n" " ENERGY_SCALING "), "ROKS_SCALING", "\n SPIN_CONFIGURATION ", "ROKS_SPIN_CONFIG", "\n &END LOW_SPIN_ROKS\n"}; gchar * cp2kmocu[3] = {"@SET NUM_HOMO ", "@SET NUM_LUMO ", "@SET CUBES "}; gchar * cp2kmocubes[7] = {" NHOMO ","NUM_HOMO", "\n NLUMO ","NUM_LUMO", "\n WRITE_CUBES ","CUBES", "\n"}; gchar * cp2ksvdw[4] = {"@SET VDW_FCT ", "@SET VDW_TYPE ", "@SET VDW_CUTOFF ", "@SET VDW_LONG "}; gchar * cp2kvdw[4][7] = {{" &VDW_POTENTIAL\n" " POTENTIAL_TYPE ", "VDW_FCT", "\n "}, {"&NON_LOCAL\n" " TYPE ", "VDW_TYPE", "\n CUTOFF ", "VDW_CUTOFF", "\n &END NON_LOCAL\n"}, {"&PAIR_POTENTIAL\n" " TYPE ", "VDW_TYPE", "\n R_CUTOFF ", "VDW_CUTOFF", "\n LONG_RANGE_CORRECTION ","VDW_LONG", "\n &END PAIR_POTENTIAL\n"}, {" &END VDW_POTENTIAL\n"}}; gchar * vdw_fct[2] = {"NON_LOCAL", "PAIR_POTENTIAL"}; gchar * cp2k_cons[2] = {"\n &CONSTRAINT\n", " &END CONSTRAINT\n"}; gchar * cp2k_fix[4] = {" &FIXED_ATOMS\n COMPONENTS_TO_FIX ", " LIST", " MOLNAME", "\n &END FIXED_ATOMS\n"}; /*! \fn void print_cp2k_var (gchar * var, GtkTextBuffer * buffer) \brief print a CP2K variable name \param var the variable name \param buffer the GtkTextBuffer to print into */ void print_cp2k_var (gchar * var, GtkTextBuffer * buffer) { print_info ("${", "bold", buffer); print_info (var, "bold_blue", buffer); print_info ("}", "bold", buffer); } /*! \fn void print_var_section (int num, gchar ** section, int i18p, int * i18pos, GtkTextBuffer * buffer) \brief print CP2K input file variable section \param num the number of element(s) to print \param section the section text \param i18p the number of parts to translate \param i18pos the parts to translate \param buffer the GtkTextBuffer to print into */ void print_var_section (int num, gchar ** section, int i18p, int * i18pos, GtkTextBuffer * buffer) { int i, j; for (i=0; i ions_thermostat; for (i=0; i 1) { str = g_strdup_printf (_("\n! Thermostat N°%d"), i+1); print_info (str, NULL, buffer); g_free (str); } print_info (thermostatr[0], NULL, buffer); print_info (thermostatr[1], NULL, buffer); print_info (cp2k_thermo[thermo -> type-1], "red", buffer); print_info (thermostatr[2], NULL, buffer); print_info (thermo_region[thermo -> sys], "red", buffer); if (thermo -> sys > 0) { print_info (define_region[0], NULL, buffer); print_info (define_region[thermo -> sys], NULL, buffer); if (thermo -> sys == 1) { l = 0; for (j=0; j < qm_proj-> nspec; j++) { for (k=0; k < qm_proj-> natomes; k++) { if (qm_proj -> atoms[0][k].sp == j) { l++; for (m=0; m < thermo -> natoms; m++) { if (thermo -> list[m] == k) { str = g_strdup_printf (" %d", l); print_info (str, "red", buffer); g_free (str); } } } } } } else { str = g_strdup_printf (" MOL-%d", thermo -> natoms+1); print_info (str, "red", buffer); g_free (str); } print_info (define_region[3], NULL, buffer); } for (j=0; j type]; j++) { print_info (thermo_type[thermo -> type-1][j], NULL, buffer); if (thermo -> type == 4 && j != 2) { str = g_strdup_printf ("%d", (int)thermo -> params[j]); } else { str = g_strdup_printf ("%f", thermo -> params[j]); } print_info (str, "red", buffer); g_free (str); } print_info (thermo_type[thermo -> type-1][j], NULL, buffer); if (thermo -> next != NULL) thermo = thermo -> next; } print_info (thermostatr[3], NULL, buffer); } /*! \fn void print_motion_cp2k (int m, GtkTextBuffer * buffer) \brief print the CP2K input MOTION section \param m 0 = Geometry optimisation, 1 = MD \param buffer the GtkTextBuffer to print into */ void print_motion_cp2k (int m, GtkTextBuffer * buffer) { gchar * intro = _("!\n" "! Always a MOTION section that describes\n" "! how to move the atoms\n" "!\n"); print_info (intro, NULL, buffer); print_var_section ((m==0) ? 11 : 8, cp2kmotion[m], 0, NULL, buffer); if (m) { if ((int)tmp_cp2k -> opts[CP2ENS] != 2 && (int)tmp_cp2k -> opts[CP2ENS] != 3) { if (tmp_cp2k -> ions_thermostat -> type) print_thermostat_cp2k (tmp_cp2k -> thermostats, buffer); } print_var_section (15, cp2kmotion[m+1], 0, NULL, buffer); } if ((int)tmp_cp2k -> opts[CP2CON]) { gchar * fixec[7] = {"X\n", "Y\n", "Z\n", "XY\n", "XZ\n", "YZ\n", "XYZ\n"}; int fixed[7][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}, {1, 1, 0}, {1, 0, 1}, {0, 1, 1}, {1, 1, 1}}; int i, j, k; gchar * str; gboolean doit; for (i=0; i<2; i++) { if (tmp_cp2k -> fixat[i] > 0) { print_info (cp2k_cons[0], NULL, buffer); for (j=0; j<7; j++) { doit = FALSE; for (k=0; k fixat[i]; k++) { if (tmp_cp2k -> fixcoord[i][k][0] == fixed[j][0] && tmp_cp2k -> fixcoord[i][k][1] == fixed[j][1] && tmp_cp2k -> fixcoord[i][k][2] == fixed[j][2]) { print_info (cp2k_fix[0], NULL, buffer); print_info (fixec[j], NULL, buffer); if (i==0) { print_info (cp2k_fix[1], NULL, buffer); } else { print_info (cp2k_fix[2], NULL, buffer); } doit= TRUE; break; } } if (doit) { for (k=0; k fixat[i]; k++) { if (tmp_cp2k -> fixcoord[i][k][0] == fixed[j][0] && tmp_cp2k -> fixcoord[i][k][1] == fixed[j][1] && tmp_cp2k -> fixcoord[i][k][2] == fixed[j][2]) { if (i ==0) { str = g_strdup_printf (" %d", tmp_cp2k -> fixlist[i][k]+1); } else { str = g_strdup_printf (" MOL-%d", tmp_cp2k -> fixlist[i][k]+1); } print_info (str, NULL, buffer); g_free (str); } } print_info (cp2k_fix[3], NULL, buffer); } } print_info (cp2k_cons[1], NULL, buffer); } } } print_info (cp2kmotion[3][0], NULL, buffer); } /*! \fn void print_coord_cp2k (GtkTextBuffer * buffer) \brief print atomic coordinates in CP2K input format \param buffer the GtkTextBuffer to print into */ void print_coord_cp2k (GtkTextBuffer * buffer) { gchar * str; if (tmp_cp2k -> input_type) { gchar * str = g_strdup_printf (_("\t%d\n# This file was prepared using %s"), qm_proj -> natomes, PACKAGE); print_info (str, NULL, buffer); g_free (str); } int i, j; for (i=0; i nspec; i++) { for (j=0; j natomes; j++) { if (qm_proj -> atoms[0][j].sp == i) { print_info ("\n", NULL, buffer); print_info (qm_proj -> chemistry -> label[i], NULL, buffer); str = g_strdup_printf (" %15.10lf %15.10lf %15.10lf", qm_proj -> atoms[0][j].x, qm_proj -> atoms[0][j].y, qm_proj -> atoms[0][j].z); print_info (str, NULL, buffer); g_free (str); /*if (qm_view -> bonding) { if (tmp_cp2k -> fixat[1] > 0 || tmp_cp2k -> ions_thermostat -> sys > 1) { str = g_strdup_printf (" MOL-%d", qm_proj -> atoms[0][j].coord[3]+1); print_info (str, NULL, buffer); g_free (str); } }*/ } } } } /*! \fn void print_subsys_cp2k (GtkTextBuffer * buffer) \brief print the CP2K input SUBSYS section \param buffer the GtkTextBuffer to print into */ void print_subsys_cp2k (GtkTextBuffer * buffer) { int totrans[] = {0}; print_var_section (3, cp2ksyst[0], 1, totrans, buffer); int i = ((int)tmp_cp2k -> opts[CP2LAT]) ? 19 : 14; print_var_section (i, cp2klat[(int)tmp_cp2k -> opts[CP2LAT]], 0, NULL, buffer); if (! tmp_cp2k -> input_type) { print_info (cp2ksyst[1][0], NULL, buffer); print_coord_cp2k (buffer); print_info (cp2ksyst[1][1], NULL, buffer); } else { print_var_section (3, cp2ksyst[2], 1, totrans, buffer); } gchar * str; print_info (_("! What follow is tricky and tests are recommended\n" "! Atomic basis set and pseudo-potential must be provided for all chemical species\n" "! the exact sequences '${BASIS_FOR_*}' '${POTENTIAL_FOR_*}' appear\n" "! inside the files that contain respectively the basis sets and the pseudo-potentials\n" "! in front of the name of the '*' element\n") , NULL, buffer); for (i=0; i nspec; i++) { str = g_strdup_printf (" &KIND %s\n BASIS_SET ", exact_name(qm_proj -> chemistry -> label[i])); print_info (str, NULL, buffer); g_free (str); str = g_strdup_printf ("BASIS_FOR_%s", exact_name(qm_proj -> chemistry -> label[i])); print_cp2k_var (str, buffer); g_free (str); if (strlen(exact_name(qm_proj -> chemistry -> label[i])) == 1) print_info (" ",NULL, buffer); print_info ("\n POTENTIAL ", NULL, buffer); str = g_strdup_printf ("POTENTIAL_FOR_%s", exact_name(qm_proj -> chemistry -> label[i])); print_cp2k_var (str, buffer); g_free (str); print_info ("\n &END KIND\n", NULL, buffer); } print_info ("&END SUBSYS", NULL, buffer); } /*! \fn void print_variables_cp2k (GtkTextBuffer * buffer) \brief print the list of the CP2K input variables \param buffer the GtkTextBuffer to print into */ void print_variables_cp2k (GtkTextBuffer * buffer) { int i, j, k, l; gchar * str; gboolean append; gchar * fileinfo[5] = {i18n("! This file contains the restart information:"), i18n("! This file contains the basis set(s):"), i18n("! This file contains the pseudo-potential(s):"), i18n("! This file contains the wave-function:"), i18n("! This file contains the atomic coordinates in XYZ format:")}; l = 0; for (i=0; i<41; i++) { if (i==0) { print_info (globopts[0], NULL, buffer); print_info (exact_name(qm_proj -> name), "bold", buffer); print_info ("\n", NULL, buffer); print_info (globopts[i+1], NULL, buffer); print_info (cp2k_default_keywords[l][(int)tmp_cp2k -> opts[i]], "blue", buffer); print_info ("\n", NULL, buffer); l++; } else if (i == CP2SPI) { if ((int)tmp_cp2k -> opts[CP2SPI]) { print_info (cp2kspin[0], NULL, buffer); print_info (cp2kbool (tmp_cp2k -> opts[CP2SPI]), "blue", buffer); print_info ("\n", NULL, buffer); print_info (cp2kspin[1], NULL, buffer); str = g_strdup_printf ("%d", (int)tmp_cp2k -> opts[CP2SPM]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); } } else if (i==CP2PLE || i==CP2QSM || i==CP2SCG || i==CP2SMI || i==CP2FCT) { print_info (globopts[i+1], NULL, buffer); print_info (cp2k_default_keywords[l][(int)tmp_cp2k -> opts[i]], "blue", buffer); print_info ("\n", NULL, buffer); l++; if (i==CP2SMI) { if ((int)tmp_cp2k -> opts[CP2ROK]) { print_info (cp2ksroks[0], NULL, buffer); print_info (cp2kbool (tmp_cp2k -> opts[CP2ROK]), "blue", buffer); print_info ("\n", NULL, buffer); print_info (cp2ksroks[1], NULL, buffer); str = g_strdup_printf ("%f", tmp_cp2k -> extra_opts[1][0]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); print_info (cp2ksroks[2], NULL, buffer); str = g_strdup_printf ("%d", (int)tmp_cp2k -> extra_opts[1][1] + 1); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); } if ((int)tmp_cp2k -> opts[CP2POR]) { for (j=0; j<2; j++) { print_info (cp2kmocu[j], NULL, buffer); str = g_strdup_printf ("%d", (int)tmp_cp2k -> extra_opts[2][j]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); } print_info (cp2kmocu[j], NULL, buffer); print_info (cp2kbool (tmp_cp2k -> extra_opts[2][2]), "blue", buffer); print_info ("\n", NULL, buffer); } } if (i==CP2FCT) { if ((int)tmp_cp2k -> opts[CP2VDW]) { print_info (cp2ksvdw[0], NULL, buffer); print_info (vdw_fct[(int)tmp_cp2k -> extra_opts[0][0]], "blue", buffer); print_info ("\n", NULL, buffer); print_info (cp2ksvdw[1], NULL, buffer); print_info (cp2k_vdw_keywords[(int)tmp_cp2k -> extra_opts[0][0]][(int)tmp_cp2k -> extra_opts[0][1]], "blue", buffer); print_info ("\n", NULL, buffer); print_info (cp2ksvdw[2], NULL, buffer); str = g_strdup_printf ("%f", tmp_cp2k -> extra_opts[0][2]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); if (tmp_cp2k -> extra_opts[0][0] == 1.0) { print_info (cp2ksvdw[3], NULL, buffer); print_info (cp2kbool (tmp_cp2k -> extra_opts[0][3]), "blue", buffer); print_info ("\n", NULL, buffer); } } } } else if (i == CP2RES) { print_info (globopts[4], NULL, buffer); print_info (cp2kbool (tmp_cp2k -> opts[i]), "blue", buffer); print_info ("\n", NULL, buffer); for (j=0; j<4; j++) { print_info (_(fileinfo[j]), "bold_red", buffer); print_info ("\n", NULL, buffer); print_info (globopts[5+j], NULL, buffer); if (tmp_cp2k -> files[j] != NULL) { print_info (tmp_cp2k -> files[j], "blue", buffer); } else { print_info ("None", "blue", buffer); if ((tmp_cp2k -> opts[i] == 1.0 && (j==0 || j==3)) || (j==1 || j==2)) print_info (_("\t\t! A file is required !"), "bold_red", buffer); } print_info ("\n", NULL, buffer); } } else if (i==CP2KTI || i==CP2CHA || i==CP2GRI || i==CP2SNN ||i==CP2SNO || i==CP2NST || i==CP2MAG ||i==CP2OUF) { if (i==CP2NST && tmp_cp2k -> opts[CP2RUN] != 3.0) { append = FALSE; } else if (i==CP2MAG && tmp_cp2k -> opts[CP2RUN] != 2.0) { append = FALSE; } else { append = TRUE; } if (append) { j = (i > CP2SNO) ? i+7 : i+1; print_info (globopts[j], NULL, buffer); str = g_strdup_printf ("%d", (int)tmp_cp2k -> opts[i]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); if (i==CP2OUF) { print_info (globopts[47], NULL, buffer); print_info ("XYZ", "blue", buffer); print_info ("\n", NULL, buffer); print_info (globopts[48], NULL, buffer); print_info ("ANGSTROM", "blue", buffer); print_info ("\n", NULL, buffer); } } } else if (i==CP2CUT || i==CP2SCN || i==CP2SCO || i==CP2DLT || i==CP2TMP || i==CP2GEF) { if ((i == CP2DLT || i == CP2TMP) && tmp_cp2k -> opts[CP2RUN] != 3.0) { append = FALSE; } else if (i == CP2GEF && tmp_cp2k -> opts[CP2RUN] != 2.0) { append = FALSE; } else { append = TRUE; } if (append) { j = (i > CP2SCO) ? i+7 : i+1; print_info (globopts[j], NULL, buffer); str = g_strdup_printf ("%f", tmp_cp2k -> opts[i]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); } } else if (i == CP2PBC) { print_info (globopts[i-8], NULL, buffer); print_info (cp2k_default_keywords[6][(int)tmp_cp2k -> opts[i]], "blue", buffer); print_info ("\n", NULL, buffer); } else if (i == CP2ENS && tmp_cp2k -> opts[CP2RUN] == 3.0) { print_info (globopts[38], NULL, buffer); print_info (cp2k_default_keywords[9][(int)tmp_cp2k -> opts[i]], "blue", buffer); print_info ("\n", NULL, buffer); } else if (i == CP2GMI && tmp_cp2k -> opts[CP2RUN] == 2.0) { print_info (globopts[42], NULL, buffer); print_info (cp2k_default_keywords[10][(int)tmp_cp2k -> opts[i]], "blue", buffer); print_info ("\n", NULL, buffer); } else if (i == CP2LAT) { if (tmp_cp2k -> opts[i] == 0.0) { for (j=0; j<6; j++) { print_info (globopts[22+j], NULL, buffer); k = j/3; str = g_strdup_printf ("%f", qm_proj -> cell.box[0].param[k][j-3*k]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); } print_info (globopts[21], NULL, buffer); print_info (cp2k_default_keywords[8][(int)tmp_cp2k -> opts[CP2SYM]], "blue", buffer); print_info ("\n", NULL, buffer); } else { for (j=0; j<3; j++) { print_info (globopts[28+j], NULL, buffer); k = j/3; str = g_strdup_printf ("%f", qm_proj -> cell.box[0].vect[k][j-3*k]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); } } if (tmp_cp2k -> input_type) { print_info (_(fileinfo[4]), "bold_red", buffer); print_info ("\n", NULL, buffer); print_info (globopts[37], NULL, buffer); print_info ("coord.inc", "blue", buffer); print_info ("\n", NULL, buffer); } for (j=0; j nspec;j++) { str = g_strdup_printf ("@SET BASIS_FOR_%s ", exact_name(qm_proj -> chemistry -> label[j])); print_info (str, NULL, buffer); g_free (str); if (strlen(exact_name(qm_proj -> chemistry -> label[j])) == 1) print_info (" ",NULL, buffer); if (tmp_cp2k -> spec_data[j][0] > -1) { print_info (get_nth_key (j, tmp_cp2k -> spec_data[j][0], 0), "blue", buffer); } else { print_info ("None", "blue", buffer); print_info (_("\t\t! A keyword is required !"), "bold_red", buffer); } print_info ("\n", NULL, buffer); str = g_strdup_printf ("@SET POTENTIAL_FOR_%s ", exact_name(qm_proj -> chemistry -> label[j])); print_info (str, NULL, buffer); g_free (str); if (strlen(exact_name(qm_proj -> chemistry -> label[j])) == 1) print_info (" ",NULL, buffer); if (tmp_cp2k -> spec_data[j][1] > -1) { print_info (get_nth_key (j, tmp_cp2k -> spec_data[j][1], 1), "blue", buffer); } else { print_info ("None", "blue", buffer); print_info (_("\t\t! A keyword is required !"), "bold_red", buffer); } print_info ("\n", NULL, buffer); } } } print_info ("\n", NULL, buffer); } /*! \fn void print_global_cp2k (GtkTextBuffer * buffer) \brief print the CP2K input file GLOBAL section \param buffer the GtkTextBuffer to print into */ void print_global_cp2k (GtkTextBuffer * buffer) { print_variables_cp2k (buffer); print_var_section (9, cp2kglobal, 0, NULL, buffer); if (tmp_cp2k -> input_type) { print_info ("\n", NULL, buffer); print_info ("!\n", NULL, buffer); print_info (_("! The mandatory FORCE_EVAL section include file\n"), NULL, buffer); print_info ("!\n", NULL, buffer); print_info ("@INCLUDE '", "bold", buffer); print_info (cp2kincludes[0], "red", buffer); print_info ("'", "bold", buffer); print_info ("\n\n", NULL, buffer); if (tmp_cp2k -> opts[CP2RUN] > 1.0 && tmp_cp2k -> opts[CP2RUN] < 4.0) { print_info ("!\n", NULL, buffer); print_info (_("! The mandatory MOTION section include file\n"), NULL, buffer); print_info ("!\n", NULL, buffer); print_info ("@INCLUDE '", "bold", buffer); print_info (cp2kincludes[2], "red", buffer); print_info ("'", "bold", buffer); print_info ("\n\n", NULL, buffer); } } else { print_info ("\n", NULL, buffer); } } /*! \fn void print_cp2k_print (gchar * spaces, gchar * info, int i, int j, GtkTextBuffer * buffer) \brief print CP2K input file PRINT section content \param spaces spaces string \param info variable string to print \param i SCF restart option \param j 1 = MO cubes, 0 = else \param buffer the GtkTextBuffer to print into */ void print_cp2k_print (gchar * spaces, gchar * info, int i, int j, GtkTextBuffer * buffer) { print_info (spaces, NULL, buffer); print_info ("&", NULL, buffer); print_info (info, NULL, buffer); print_info ("\n", NULL, buffer); print_info (spaces, NULL, buffer); print_info (_(" LOG_PRINT_KEY T ! => Printing on screen when restart file is written\n"), NULL, buffer); print_info (spaces, NULL, buffer); print_info (" &EACH\n", NULL, buffer); print_info (spaces, NULL, buffer); print_info (" ", NULL, buffer); int totrans[] = {2}; print_var_section (3, scf_wrestart[i], 1, totrans, buffer); print_info (spaces, NULL, buffer); print_info (" &END EACH\n", NULL, buffer); print_info (spaces, NULL, buffer); print_info (" ADD_LAST NUMERIC\n", NULL, buffer); if (j) { print_var_section (7, cp2kmocubes, 0, NULL, buffer); } print_info (spaces, NULL, buffer); print_info ("&END ", NULL, buffer); print_info (info, NULL, buffer); print_info ("\n", NULL, buffer); } /*! \fn void print_cp2k (int f, GtkTextBuffer * buffer) \brief print the CP2K input file section \param f the section id \param buffer the GtkTextBuffer to print into */ void print_cp2k (int f, GtkTextBuffer * buffer) { int i; int * totrans; switch (f) { case 0: print_global_cp2k (buffer); if (tmp_cp2k -> input_type && (int)tmp_cp2k -> opts[CP2RES]) print_var_section (7, cp2krestart, 0, NULL, buffer); break; case 1: totrans = allocint (5); totrans[0] = 0; totrans[1] = 10; totrans[2] = 12; totrans[3] = 14; totrans[4] = 16; print_var_section (17, cp2kfev[0], 5, totrans, buffer); g_free (totrans); i = ((int)tmp_cp2k -> opts[CP2RUN] == 3) ? 0 : 1; print_info (_(qs_extrapo[i]), NULL, buffer); g_free (totrans); totrans = allocint (1); totrans[0] = 0; print_var_section (1, cp2kfev[1], 1, totrans, buffer); i = ((int)tmp_cp2k -> opts[CP2RUN] == 2 || (int)tmp_cp2k -> opts[CP2RUN] == 3) ? (int)tmp_cp2k -> opts[CP2RUN] - 1 : 0; if ((int)tmp_cp2k -> opts[CP2ROK]) { totrans[0] = 1; print_var_section (7, cp2kroks, 1, totrans, buffer); } g_free (totrans); if ((int)tmp_cp2k -> opts[CP2POR]) { print_info (" &PRINT\n", NULL, buffer); print_cp2k_print (" ", "MO_CUBES", i, 1, buffer); print_info (" &END PRINT\n", NULL, buffer); } totrans = allocint (7); totrans[0] = 0; totrans[1] = 2; totrans[2] = 3; totrans[3] = 4; totrans[4] = 6; totrans[5] = 8; totrans[6] = 10; print_var_section (13, cp2kfev[2], 7, totrans, buffer); g_free (totrans); print_info (" ", NULL, buffer); totrans = allocint (1); totrans[0] = 2; print_var_section (3, scf_wrestart[i], 1, totrans, buffer); g_free (totrans); print_var_section (1, cp2kfev[3], 0, NULL, buffer); if ((int)tmp_cp2k -> opts[CP2PMU]) print_cp2k_print (" ", "MULLIKEN", i, 0, buffer); if ((int)tmp_cp2k -> opts[CP2PLO]) print_cp2k_print (" ", "LOWDIN", i, 0, buffer); totrans[0] = 0; print_var_section (3, cp2kfev[4], 1, totrans, buffer); g_free (totrans); if ((int)tmp_cp2k -> opts[CP2VDW]) { print_var_section (3, cp2kvdw[0], 0, NULL, buffer); print_var_section ((int)tmp_cp2k -> extra_opts[0][0]*2+5, cp2kvdw[(int)tmp_cp2k -> extra_opts[0][0]+1], 0, NULL, buffer); print_var_section (1, cp2kvdw[3], 0, NULL, buffer); } print_info (cp2kfev[5][0], NULL, buffer); if ((int)tmp_cp2k -> opts[CP2SPI]) { print_var_section (4, cp2kfev[6], 1, totrans, buffer); print_info ("\n", NULL, buffer); } print_info (cp2kfev[7][0], NULL, buffer); if ((int)tmp_cp2k -> opts[CP2PFO] || (int)tmp_cp2k -> opts[CP2PST]) { print_info ("\n", NULL, buffer); print_info (" &PRINT\n", NULL, buffer); if ((int)tmp_cp2k -> opts[CP2PFO]) print_cp2k_print (" ", "FORCES", i, 0, buffer); if ((int)tmp_cp2k -> opts[CP2PST]) print_cp2k_print (" ", "STRESS_TENSOR", i, 0, buffer); print_info (" &END PRINT\n", NULL, buffer); } if (tmp_cp2k -> input_type) { print_info ("\n", NULL, buffer); print_info ("!\n", NULL, buffer); print_info (_("! The mandatory SUBSYS section include file\n"), NULL, buffer); print_info ("!\n", NULL, buffer); print_info ("@INCLUDE '", "bold", buffer); print_info (cp2kincludes[1], "red", buffer); print_info ("'", "bold", buffer); print_info ("\n\n", NULL, buffer); print_info ("&END FORCE_EVAL\n", NULL, buffer); } break; case 2: print_subsys_cp2k (buffer); if (! tmp_cp2k -> input_type) { print_info ("\n&END FORCE_EVAL\n", NULL, buffer); if ((int)tmp_cp2k -> opts[CP2RUN] != 2 && (int)tmp_cp2k -> opts[CP2RUN] != 3 && (int)tmp_cp2k -> opts[CP2RES]) { print_info ("\n", NULL, buffer); print_var_section (7, cp2krestart, 0, NULL, buffer); } } break; case 4: print_coord_cp2k (buffer); break; default: if (f == 5 || f == 6) { for (i=0; i nspec; i++) { if (tmp_cp2k -> spec_data[i][f-5] > -1) { print_info (get_nth_elem (i, tmp_cp2k -> spec_data[i][f-5], f-5), NULL, buffer); } } } else { if (tmp_cp2k -> opts[CP2RUN] > 1.0 && tmp_cp2k -> opts[CP2RUN] < 4.0) { print_motion_cp2k ((int)tmp_cp2k -> opts[CP2RUN]- 2, buffer); } if (! tmp_cp2k -> input_type && (int)tmp_cp2k -> opts[CP2RES]) print_var_section (7, cp2krestart, 0, NULL, buffer); } break; } } atomes_1.3.1/src/calc/cp2k/cp2k_files.c0000664000175000017500000002011415212624223017220 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cp2k_files.c * @short Functions to handle CP2K basis sets and pseudopotentials * @author Sébastien Le Roux */ /* * This file: 'cp2k_files.c' * * Contains: * - The functions to handle CP2K basis sets and pseudopotentials * * List of functions: int cp2k_is_basis_in_database (int sp); int cp2k_is_pseudo_in_database (int sp); int prepare_cp2k_basis_pseudo_list (int sp, int * sp_id, int n_basis_pseudo, char * bp_elem[n_basis_pseudo]); gchar * get_nth_elem (int sp, int id, int obj); gchar * get_nth_key (int sp, int id, int obj); G_MODULE_EXPORT void changed_basis_pseudo_box (GtkComboBox * box, gpointer data); GtkWidget * prepare_basis_combo (int sp, int obj); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "calc.h" #include "cp2k.h" extern GtkWidget * cp2k_spec_combo; /*! \fn gchar * get_nth_elem (int sp, int id, int obj) \brief retrieve basis or pseudopotential name string for element from global list \param sp the chemical species \param id the list element id of 'sp' to find \param obj 0 = basis sets, 1 = pseudopotentials */ gchar * get_nth_elem (int sp, int id, int obj) { int i, j; j = -1; if (obj) { for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", cp2k_pot[i]); } } } } else { for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", cp2k_molopt[i]); } } } for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", cp2k_gth[i]); } } } for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", cp2k_basis[i]); } } } } return NULL; } /*! \fn gchar * get_nth_key (int sp, int id, int obj) \brief retrieve basis or pseudopotential key string for element from global list \param sp the chemical species \param id the list element id of 'sp' to find \param obj 0 = basis sets, 1 = pseudopotentials */ gchar * get_nth_key (int sp, int id, int obj) { int i, j; j = -1; if (obj) { for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", pot_keys[i]); } } } } else { for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", molopt_keys[i]); } } } for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", gth_keys[i]); } } } for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", basis_keys[i]); } } } } return NULL; } /*! \fn int cp2k_is_basis_in_database (int sp) \brief does this chemical species have basis set(s) in store ? \param sp the chemical species */ int cp2k_is_basis_in_database (int sp) { int i; for (i=0; i chemistry -> label[sp])) == 0) return 0; } for (i=0; i chemistry -> label[sp])) == 0) return 0; } for (i=0; i chemistry -> label[sp])) == 0) return 0; } return -1; } /*! \fn int cp2k_is_pseudo_in_database (int sp) \brief does this chemical species have pseudopotential(s) in store ? \param sp the chemical species */ int cp2k_is_pseudo_in_database (int sp) { int i; for (i=0; i chemistry -> label[sp])) == 0) return 0; } return -1; } /*! \fn int prepare_cp2k_basis_pseudo_list (int sp, int * sp_id, int n_basis_pseudo, char * bp_elem[n_basis_pseudo]) \brief find matching chemical element in basis / pseudo database \param sp the chemical species \param sp_id the list of entries to save \param n_basis_pseudo the number of element(s) to check \param bp_elem the string list to check */ int prepare_cp2k_basis_pseudo_list (int sp, int * sp_id, int n_basis_pseudo, char * bp_elem[n_basis_pseudo]) { int i, j; j = 0; for (i=0; i chemistry -> label[sp])) == 0) { j ++; sp_id[j-1] = i; } } return j; } /*! \fn G_MODULE_EXPORT void changed_basis_pseudo_box (GtkComboBox * box, gpointer data) \brief change basis or pseudopotential \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_basis_pseudo_box (GtkComboBox * box, gpointer data) { int i, j, k; i = combo_get_active (cp2k_spec_combo); j = GPOINTER_TO_INT(data); k = combo_get_active ((GtkWidget *)box); if (k > -1) { tmp_cp2k -> spec_data[i][j] = k; if (tmp_cp2k -> spec_files[i][j] != NULL) { g_free (tmp_cp2k -> spec_files[i][j]); tmp_cp2k -> spec_files[i][j] = NULL; } } } /*! \fn GtkWidget * prepare_basis_combo (int sp, int obj) \brief prepare basis set / pseudopotential combo box \param sp the chemical species \param obj 0 = basis, 1 = pseudopotentials */ GtkWidget * prepare_basis_combo (int sp, int obj) { int i, j; GtkWidget * widg = create_combo (); int * sp_id = g_malloc0(100*sizeof*sp_id); if (obj) { i = prepare_cp2k_basis_pseudo_list (sp, sp_id, N_POTS, pot_elem); if (i > 0) { for (j=0; j 0) { for (j=0; j 0) { for (j=0; j 0) { for (j=0; j spec_files[sp][obj] == NULL) { combo_set_active (widg, tmp_cp2k -> spec_data[sp][obj]); } else { widget_set_sensitive (widg, FALSE); } g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_basis_pseudo_box), GINT_TO_POINTER(obj)); return widg; } atomes_1.3.1/src/calc/cp2k/cp2k_gth-basis.c0000664000175000017500000040211215212624223020001 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cp2k_gth-basis.c * @short CP2K GTH basis set, as delivered with CP2K v9.1 * @author Sébastien Le Roux */ /* * This file: 'cp2k_gth-basis.c' * * Contains: * - CP2K GTH basis set, as delivered with CP2K v9.1 This file contains 3 tables: gth_elem -> the list of chemical elements gth_keys -> the list of keywords cp2k_gth -> finally the complete GTH basis set */ #include "global.h" char * gth_elem[156] = {"H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "He", "He", "He", "He", "He", "He", "He", "Li", "Li", "Li", "Li", "Li", "Li", "Be", "Be", "Be", "Be", "Be", "Be", "B", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "Ne", "Ne", "Ne", "Ne", "Ne", "Ne", "Na", "Na", "Na", "Na", "Na", "Na", "Mg", "Mg", "Mg", "Mg", "Mg", "Mg", "Al", "Al", "Al", "Al", "Al", "Al", "Si", "Si", "Si", "Si", "Si", "Si", "Si", "Si", "Si", "Si", "Si", "P", "P", "P", "P", "P", "P", "P", "P", "P", "P", "P", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Ar", "Ar", "Ar", "Ar", "Ar", "Ar", "W"}; char * gth_keys[156] = {"SZV-GTH", "DZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "DZVP-GTH"}; char * cp2k_gth[156] = {"\n" "H SZV-GTH-q1 SZV-GTH\n" " 1\n" " 1 0 0 4 1\n" " 8.3744350009 -0.0283380461\n" " 1.8058681460 -0.1333810052\n" " 0.4852528328 -0.3995676063\n" " 0.1658236932 -0.5531027541\n" "#","\n" "H DZV-GTH-q1 DZV-GTH\n" " 1\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0283380461 0.0000000000\n" " 1.8058681460 -0.1333810052 0.0000000000\n" " 0.4852528328 -0.3995676063 0.0000000000\n" " 0.1658236932 -0.5531027541 1.0000000000\n" "#","\n" "H DZVP-GTH-q1 DZVP-GTH\n" " 2\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0283380461 0.0000000000\n" " 1.8058681460 -0.1333810052 0.0000000000\n" " 0.4852528328 -0.3995676063 0.0000000000\n" " 0.1658236932 -0.5531027541 1.0000000000\n" " 2 1 1 1 1\n" " 0.7270000000 1.0000000000\n" "#","\n" "H TZVP-GTH-q1 TZVP-GTH\n" " 2\n" " 1 0 0 5 3\n" " 10.8827241585 -0.0167058885 0.0000000000 0.0000000000\n" " 3.0968750876 -0.0627538300 0.0000000000 0.0000000000\n" " 0.9874518162 -0.1917521975 0.0000000000 0.0000000000\n" " 0.3450687533 -0.4173635232 1.0000000000 0.0000000000\n" " 0.1492693554 -0.4270508887 0.0000000000 1.0000000000\n" " 2 1 1 1 1\n" " 0.7270000000 1.0000000000\n" "#","\n" "H TZV2P-GTH-q1 TZV2P-GTH\n" " 2\n" " 1 0 0 5 3\n" " 10.8827241585 -0.0167058885 0.0000000000 0.0000000000\n" " 3.0968750876 -0.0627538300 0.0000000000 0.0000000000\n" " 0.9874518162 -0.1917521975 0.0000000000 0.0000000000\n" " 0.3450687533 -0.4173635232 1.0000000000 0.0000000000\n" " 0.1492693554 -0.4270508887 0.0000000000 1.0000000000\n" " 2 1 1 2 2\n" " 1.4070000000 1.0000000000 0.0000000000\n" " 0.3880000000 0.0000000000 1.0000000000\n" "#","\n" "H QZV2P-GTH-q1 QZV2P-GTH\n" " 2\n" " 1 0 0 6 4\n" " 12.5350945530 0.0114321687 0.0000000000 0.0000000000 0.0000000000\n" " 4.5491539489 0.0344048283 0.0000000000 0.0000000000 0.0000000000\n" " 1.6685193606 0.1007746979 0.0000000000 0.0000000000 0.0000000000\n" " 0.6523849556 0.2302169182 1.0000000000 0.0000000000 0.0000000000\n" " 0.2733011244 0.4067637930 0.0000000000 1.0000000000 0.0000000000\n" " 0.1390608890 0.3322841300 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 2 2\n" " 1.4070000000 1.0000000000 0.0000000000\n" " 0.3880000000 0.0000000000 1.0000000000\n" "#","\n" "H QZV3P-GTH-q1 QZV3P-GTH\n" " 2\n" " 1 0 0 6 4\n" " 12.5350945530 0.0114321687 0.0000000000 0.0000000000 0.0000000000\n" " 4.5491539489 0.0344048283 0.0000000000 0.0000000000 0.0000000000\n" " 1.6685193606 0.1007746979 0.0000000000 0.0000000000 0.0000000000\n" " 0.6523849556 0.2302169182 1.0000000000 0.0000000000 0.0000000000\n" " 0.2733011244 0.4067637930 0.0000000000 1.0000000000 0.0000000000\n" " 0.1390608890 0.3322841300 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 3 3\n" " 2.2920000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.8380000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2920000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "H aug-DZVP-GTH-q1 aug-DZVP-GTH\n" " 4\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0283380461 0.0000000000\n" " 1.8058681460 -0.1333810052 0.0000000000\n" " 0.4852528328 -0.3995676063 0.0000000000\n" " 0.1658236932 -0.5531027541 1.0000000000\n" " 2 1 1 1 1\n" " 0.7270000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.0297400000 1.0000000000\n" " 3 1 1 1 1\n" " 0.1410000000 1.0000000000\n" "#","\n" "H aug-TZVP-GTH-q1 aug-TZVP-GTH\n" " 4\n" " 1 0 0 5 3\n" " 10.8827241585 -0.0167058885 0.0000000000 0.0000000000\n" " 3.0968750876 -0.0627538300 0.0000000000 0.0000000000\n" " 0.9874518162 -0.1917521975 0.0000000000 0.0000000000\n" " 0.3450687533 -0.4173635232 1.0000000000 0.0000000000\n" " 0.1492693554 -0.4270508887 0.0000000000 1.0000000000\n" " 2 1 1 1 1\n" " 0.7270000000 1.0000000000\n" " 4 0 0 1 1\n" " 0.0252600000 1.0000000000\n" " 3 1 1 1 1\n" " 0.1020000000 1.0000000000\n" "#","\n" "H aug-TZV2P-GTH-q1 aug-TZV2P-GTH\n" " 4\n" " 1 0 0 5 3\n" " 10.8827241585 -0.0167058885 0.0000000000 0.0000000000\n" " 3.0968750876 -0.0627538300 0.0000000000 0.0000000000\n" " 0.9874518162 -0.1917521975 0.0000000000 0.0000000000\n" " 0.3450687533 -0.4173635232 1.0000000000 0.0000000000\n" " 0.1492693554 -0.4270508887 0.0000000000 1.0000000000\n" " 2 1 1 2 2\n" " 1.4070000000 1.0000000000 0.0000000000\n" " 0.3880000000 0.0000000000 1.0000000000\n" " 4 0 0 1 1\n" " 0.0252600000 1.0000000000\n" " 4 1 1 1 1\n" " 0.1020000000 1.0000000000\n" "#","\n" "H aug-QZV2P-GTH-q1 aug-QZV2P-GTH\n" " 4\n" " 1 0 0 6 4\n" " 12.5350945530 0.0114321687 0.0000000000 0.0000000000 0.0000000000\n" " 4.5491539489 0.0344048283 0.0000000000 0.0000000000 0.0000000000\n" " 1.6685193606 0.1007746979 0.0000000000 0.0000000000 0.0000000000\n" " 0.6523849556 0.2302169182 1.0000000000 0.0000000000 0.0000000000\n" " 0.2733011244 0.4067637930 0.0000000000 1.0000000000 0.0000000000\n" " 0.1390608890 0.3322841300 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 2 2\n" " 1.4070000000 1.0000000000 0.0000000000\n" " 0.3880000000 0.0000000000 1.0000000000\n" " 5 0 0 1 1\n" " 0.0236300000 1.0000000000\n" " 4 1 1 1 1\n" " 0.0848000000 1.0000000000\n" "#","\n" "H aug-QZV3P-GTH-q1 aug-QZV3P-GTH\n" " 4\n" " 1 0 0 6 4\n" " 12.5350945530 0.0114321687 0.0000000000 0.0000000000 0.0000000000\n" " 4.5491539489 0.0344048283 0.0000000000 0.0000000000 0.0000000000\n" " 1.6685193606 0.1007746979 0.0000000000 0.0000000000 0.0000000000\n" " 0.6523849556 0.2302169182 1.0000000000 0.0000000000 0.0000000000\n" " 0.2733011244 0.4067637930 0.0000000000 1.0000000000 0.0000000000\n" " 0.1390608890 0.3322841300 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 3 3\n" " 2.2920000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.8380000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2920000000 0.0000000000 0.0000000000 1.0000000000\n" " 5 0 0 1 1\n" " 0.0236300000 1.0000000000\n" " 5 1 1 1 1\n" " 0.0848000000 1.0000000000\n" "#","\n" "He SZV-GTH-q2 SZV-GTH\n" " 1\n" " 1 0 0 5 1\n" " 13.1305278312 -0.0500802904\n" " 4.1977275150 -0.1474339352\n" " 1.3647725570 -0.3245281495\n" " 0.4549715461 -0.4365284986\n" " 0.1513197845 -0.2164629317\n" "#","\n" "He DZV-GTH-q2 DZV-GTH\n" " 1\n" " 1 0 0 5 2\n" " 13.1305278312 -0.0500802904 0.0000000000\n" " 4.1977275150 -0.1474339352 0.0000000000\n" " 1.3647725570 -0.3245281495 0.0000000000\n" " 0.4549715461 -0.4365284986 0.0000000000\n" " 0.1513197845 -0.2164629317 1.0000000000\n" "#","\n" "He DZVP-GTH-q2 DZVP-GTH\n" " 2\n" " 1 0 0 5 2\n" " 13.1305278312 -0.0500802904 0.0000000000\n" " 4.1977275150 -0.1474339352 0.0000000000\n" " 1.3647725570 -0.3245281495 0.0000000000\n" " 0.4549715461 -0.4365284986 0.0000000000\n" " 0.1513197845 -0.2164629317 1.0000000000\n" " 2 1 1 1 1\n" " 1.2750000000 1.0000000000\n" "#","\n" "He TZVP-GTH-q2 TZVP-GTH\n" " 2\n" " 1 0 0 6 3\n" " 14.9231368362 0.0343142688 0.0000000000 0.0000000000\n" " 5.9479610723 0.0933152472 0.0000000000 0.0000000000\n" " 2.1932485067 0.2143451850 0.0000000000 0.0000000000\n" " 0.8304881034 0.3500759421 0.0000000000 0.0000000000\n" " 0.3182586587 0.3570840512 1.0000000000 0.0000000000\n" " 0.1197839846 0.1270021790 0.0000000000 1.0000000000\n" " 2 1 1 1 1\n" " 1.2750000000 1.0000000000\n" "#","\n" "He TZV2P-GTH-q2 TZV2P-GTH\n" " 2\n" " 1 0 0 6 3\n" " 14.9231368362 0.0343142688 0.0000000000 0.0000000000\n" " 5.9479610723 0.0933152472 0.0000000000 0.0000000000\n" " 2.1932485067 0.2143451850 0.0000000000 0.0000000000\n" " 0.8304881034 0.3500759421 0.0000000000 0.0000000000\n" " 0.3182586587 0.3570840512 1.0000000000 0.0000000000\n" " 0.1197839846 0.1270021790 0.0000000000 1.0000000000\n" " 2 1 1 2 2\n" " 3.0440000000 1.0000000000 0.0000000000\n" " 0.7580000000 0.0000000000 1.0000000000\n" "#","\n" "He QZV2P-GTH-q2 QZV2P-GTH\n" " 2\n" " 1 0 0 7 4\n" " 16.7962354569 -0.0217345796 0.0000000000 0.0000000000 0.0000000000\n" " 8.0784265748 -0.0637981790 0.0000000000 0.0000000000 0.0000000000\n" " 3.2397448253 -0.1438730374 0.0000000000 0.0000000000 0.0000000000\n" " 1.3463173459 -0.2567923947 0.0000000000 0.0000000000 0.0000000000\n" " 0.5669193043 -0.3407783682 1.0000000000 0.0000000000 0.0000000000\n" " 0.2404041556 -0.2752209877 0.0000000000 1.0000000000 0.0000000000\n" " 0.0990547078 -0.0742573863 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 2 2\n" " 3.0440000000 1.0000000000 0.0000000000\n" " 0.7580000000 0.0000000000 1.0000000000\n" "#","\n" "He QZV3P-GTH-q2 QZV3P-GTH\n" " 2\n" " 1 0 0 7 4\n" " 16.7962354569 -0.0217345796 0.0000000000 0.0000000000 0.0000000000\n" " 8.0784265748 -0.0637981790 0.0000000000 0.0000000000 0.0000000000\n" " 3.2397448253 -0.1438730374 0.0000000000 0.0000000000 0.0000000000\n" " 1.3463173459 -0.2567923947 0.0000000000 0.0000000000 0.0000000000\n" " 0.5669193043 -0.3407783682 1.0000000000 0.0000000000 0.0000000000\n" " 0.2404041556 -0.2752209877 0.0000000000 1.0000000000 0.0000000000\n" " 0.0990547078 -0.0742573863 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 3 3\n" " 5.9940000000 1.0000000000 0.0000000000 0.0000000000\n" " 1.7450000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.5600000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Li SZV-GTH-q3 SZV-GTH\n" " 1\n" " 1 0 0 5 2\n" " 7.2610457926 -0.2798628497 0.0501840556\n" " 2.1056583087 -0.4477420790 0.1084202571\n" " 0.6439906571 -0.3912929157 0.1448363201\n" " 0.0797152017 -0.0282408543 -0.4643021689\n" " 0.0294029590 0.0106542324 -0.6220213304\n" "#","\n" "Li DZVP-GTH-q3 DZVP-GTH\n" " 2\n" " 1 0 1 5 3 2\n" " 7.2610457926 -0.2798628497 0.0501840556 0.0000000000 0.0000000000 0.0000000000\n" " 2.1056583087 -0.4477420790 0.1084202571 0.0000000000 0.0000000000 0.0000000000\n" " 0.6439906571 -0.3912929157 0.1448363201 0.0000000000 1.0000000000 0.0000000000\n" " 0.0797152017 -0.0282408543 -0.4643021689 0.0000000000 0.0000000000 1.0000000000\n" " 0.0294029590 0.0106542324 -0.6220213304 1.0000000000 0.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.1239000000 1.0000000000\n" "#","\n" "Li TZVP-GTH-q3 TZVP-GTH\n" " 2\n" " 1 0 1 6 4 3\n" " 9.0670525492 -0.1411283591 0.0257097367 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4.3499909489 -0.2767569948 0.0520569091 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.4348215636 -0.4501634495 0.1264219750 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.4970537951 -0.2617675690 0.1024067911 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0729943466 -0.0116685753 -0.5635707625 1.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0264328979 0.0038616721 -0.5290102979 0.0000000000 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1239000000 1.0000000000\n" "#","\n" "Li TZV2P-GTH-q3 TZV2P-GTH\n" " 2\n" " 1 0 1 6 4 3\n" " 9.0670525492 -0.1411283591 0.0257097367 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4.3499909489 -0.2767569948 0.0520569091 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.4348215636 -0.4501634495 0.1264219750 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.4970537951 -0.2617675690 0.1024067911 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0729943466 -0.0116685753 -0.5635707625 1.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0264328979 0.0038616721 -0.5290102979 0.0000000000 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.1874000000 1.0000000000 0.0000000000\n" " 0.0801000000 0.0000000000 1.0000000000\n" "#","\n" "Li QZV2P-GTH-q3 QZV2P-GTH\n" " 2\n" " 1 0 1 7 5 4\n" " 11.2399728913 0.0546031957 0.0121121394 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 5.9010009273 0.2707752256 0.0442943986 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.1128841305 0.3250518116 0.0864603159 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.9242200694 0.3360526690 0.0982556510 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.3843405136 0.1477938090 0.0724371635 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0745791133 0.0049656060 -0.5608077915 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0266127545 -0.0013302258 -0.5385875662 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.1874000000 1.0000000000 0.0000000000\n" " 0.0801000000 0.0000000000 1.0000000000\n" "#","\n" "Li QZV3P-GTH-q3 QZV3P-GTH\n" " 2\n" " 1 0 1 7 5 4\n" " 11.2399728913 0.0546031957 0.0121121394 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 5.9010009273 0.2707752256 0.0442943986 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.1128841305 0.3250518116 0.0864603159 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.9242200694 0.3360526690 0.0982556510 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.3843405136 0.1477938090 0.0724371635 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0745791133 0.0049656060 -0.5608077915 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0266127545 -0.0013302258 -0.5385875662 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 0.3440000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1530000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0680000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Be SZV-GTH-q4 SZV-GTH\n" " 1\n" " 1 0 0 5 2\n" " 12.0759365620 -0.2957180545 0.0588372089\n" " 3.8545761940 -0.4334460398 0.1288856096\n" " 1.2504781570 -0.3784683226 0.1550415386\n" " 0.1871714430 -0.0264606251 -0.5160084709\n" " 0.0612757198 0.0081452640 -0.5935732462\n" "#","\n" "Be DZVP-GTH-q4 DZVP-GTH\n" " 2\n" " 1 0 1 5 3 2\n" " 12.0759365620 -0.2957180545 0.0588372089 0.0000000000 0.0000000000 0.0000000000\n" " 3.8545761940 -0.4334460398 0.1288856096 0.0000000000 0.0000000000 0.0000000000\n" " 1.2504781570 -0.3784683226 0.1550415386 0.0000000000 0.0000000000 0.0000000000\n" " 0.1871714430 -0.0264606251 -0.5160084709 0.0000000000 1.0000000000 0.0000000000\n" " 0.0612757198 0.0081452640 -0.5935732462 1.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.2380000000 1.0000000000\n" "#","\n" "Be TZVP-GTH-q4 TZVP-GTH\n" " 2\n" " 1 0 1 6 4 3\n" " 16.1633017560 0.1058505482 0.0252110810 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.2794656488 0.3142306535 0.0592234829 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.7431462702 0.4327355582 0.1590642952 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.0051192904 0.2646375740 0.0970211162 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1765074807 0.0128485143 -0.5606394206 1.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0580432824 -0.0034494712 -0.5479256813 0.0000000000 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.2380000000 1.0000000000\n" "#","\n" "Be TZV2P-GTH-q4 TZV2P-GTH\n" " 2\n" " 1 0 1 6 4 3\n" " 16.1633017560 0.1058505482 0.0252110810 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.2794656488 0.3142306535 0.0592234829 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.7431462702 0.4327355582 0.1590642952 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.0051192904 0.2646375740 0.0970211162 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1765074807 0.0128485143 -0.5606394206 1.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0580432824 -0.0034494712 -0.5479256813 0.0000000000 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.3480000000 1.0000000000 0.0000000000\n" " 0.1803000000 0.0000000000 1.0000000000\n" "#","\n" "Be QZV2P-GTH-q4 QZV2P-GTH\n" " 2\n" " 1 0 1 7 5 4\n" " 16.8878782250 -0.0871781047 -0.0213560020 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.7399964830 -0.3154557784 -0.0594803584 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.9043390390 -0.4227762231 -0.1487687019 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.0791842760 -0.2848246813 -0.1164217493 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.2337917550 -0.0252413708 0.2786030195 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1037025890 0.0110215162 0.5642008017 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0421510390 -0.0028677576 0.2754009863 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.3480000000 1.0000000000 0.0000000000\n" " 0.1803000000 0.0000000000 1.0000000000\n" "#","\n" "Be QZV3P-GTH-q4 QZV3P-GTH\n" " 2\n" " 1 0 1 7 5 4\n" " 16.8878782250 -0.0871781047 -0.0213560020 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.7399964830 -0.3154557784 -0.0594803584 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.9043390390 -0.4227762231 -0.1487687019 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.0791842760 -0.2848246813 -0.1164217493 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.2337917550 -0.0252413708 0.2786030195 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1037025890 0.0110215162 0.5642008017 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0421510390 -0.0028677576 0.2754009863 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.0720000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.4410000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1811000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "B SZV-GTH-q3 SZV-GTH\n" " 1\n" " 2 0 1 4 1 1\n" " 2.8854084023 0.1420731829 -0.0759815770\n" " 0.8566849689 -0.0083257749 -0.2508281584\n" " 0.2712991753 -0.6707104603 -0.4610296144\n" " 0.0826101984 -0.4241277148 -0.4419922734\n" "#","\n" "B DZVP-GTH-q3 DZVP-GTH\n" " 2\n" " 2 0 1 4 2 2\n" " 2.8854084023 0.1420731829 0.0000000000 -0.0759815770 0.0000000000\n" " 0.8566849689 -0.0083257749 0.0000000000 -0.2508281584 0.0000000000\n" " 0.2712991753 -0.6707104603 0.0000000000 -0.4610296144 0.0000000000\n" " 0.0826101984 -0.4241277148 1.0000000000 -0.4419922734 1.0000000000\n" " 3 2 2 1 1\n" " 0.3430000000 1.0000000000\n" "#","\n" "B TZVP-GTH-q3 TZVP-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 3.5725567849 0.0919963366 0.0000000000 0.0000000000 -0.0431808210 0.0000000000 0.0000000000\n" " 1.3258097706 0.1075235422 0.0000000000 0.0000000000 -0.1511855730 0.0000000000 0.0000000000\n" " 0.4583887751 -0.3415470752 0.0000000000 0.0000000000 -0.3429313866 0.0000000000 0.0000000000\n" " 0.1620866416 -0.6439245174 1.0000000000 0.0000000000 -0.4414563660 1.0000000000 0.0000000000\n" " 0.0559199264 -0.1753147308 0.0000000000 1.0000000000 -0.2681154092 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.3430000000 1.0000000000\n" "#","\n" "B TZV2P-GTH-q3 TZV2P-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 3.5725567849 0.0919963366 0.0000000000 0.0000000000 -0.0431808210 0.0000000000 0.0000000000\n" " 1.3258097706 0.1075235422 0.0000000000 0.0000000000 -0.1511855730 0.0000000000 0.0000000000\n" " 0.4583887751 -0.3415470752 0.0000000000 0.0000000000 -0.3429313866 0.0000000000 0.0000000000\n" " 0.1620866416 -0.6439245174 1.0000000000 0.0000000000 -0.4414563660 1.0000000000 0.0000000000\n" " 0.0559199264 -0.1753147308 0.0000000000 1.0000000000 -0.2681154092 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.6610000000 1.0000000000 0.0000000000\n" " 0.1990000000 0.0000000000 1.0000000000\n" "#","\n" "B QZV2P-GTH-q3 QZV2P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 4.1102306804 -0.0620335875 0.0000000000 0.0000000000 0.0000000000 0.0278217612 0.0000000000 0.0000000000 0.0000000000\n" " 1.7172984348 -0.1274529700 0.0000000000 0.0000000000 0.0000000000 0.1085525628 0.0000000000 0.0000000000 0.0000000000\n" " 0.6589800479 0.1200448703 0.0000000000 0.0000000000 0.0000000000 0.2367567166 0.0000000000 0.0000000000 0.0000000000\n" " 0.2700358860 0.5129734657 1.0000000000 0.0000000000 0.0000000000 0.3599759140 1.0000000000 0.0000000000 0.0000000000\n" " 0.1081818865 0.4555842541 0.0000000000 1.0000000000 0.0000000000 0.3683676413 0.0000000000 1.0000000000 0.0000000000\n" " 0.0406426579 0.0612204758 0.0000000000 0.0000000000 1.0000000000 0.1513382480 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.6610000000 1.0000000000 0.0000000000\n" " 0.1990000000 0.0000000000 1.0000000000\n" "#","\n" "B QZV3P-GTH-q3 QZV3P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 4.1102306804 -0.0620335875 0.0000000000 0.0000000000 0.0000000000 0.0278217612 0.0000000000 0.0000000000 0.0000000000\n" " 1.7172984348 -0.1274529700 0.0000000000 0.0000000000 0.0000000000 0.1085525628 0.0000000000 0.0000000000 0.0000000000\n" " 0.6589800479 0.1200448703 0.0000000000 0.0000000000 0.0000000000 0.2367567166 0.0000000000 0.0000000000 0.0000000000\n" " 0.2700358860 0.5129734657 1.0000000000 0.0000000000 0.0000000000 0.3599759140 1.0000000000 0.0000000000 0.0000000000\n" " 0.1081818865 0.4555842541 0.0000000000 1.0000000000 0.0000000000 0.3683676413 0.0000000000 1.0000000000 0.0000000000\n" " 0.0406426579 0.0612204758 0.0000000000 0.0000000000 1.0000000000 0.1513382480 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.1100000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.4020000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1450000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "C SZV-GTH-q4 SZV-GTH\n" " 1\n" " 2 0 1 4 1 1\n" " 4.3362376436 0.1490797872 -0.0878123619\n" " 1.2881838513 -0.0292640031 -0.2775560300\n" " 0.4037767149 -0.6882040510 -0.4712295093\n" " 0.1187877657 -0.3964426906 -0.4058039291\n" "#","\n" "C DZVP-GTH-q4 DZVP-GTH\n" " 2\n" " 2 0 1 4 2 2\n" " 4.3362376436 0.1490797872 0.0000000000 -0.0878123619 0.0000000000\n" " 1.2881838513 -0.0292640031 0.0000000000 -0.2775560300 0.0000000000\n" " 0.4037767149 -0.6882040510 0.0000000000 -0.4712295093 0.0000000000\n" " 0.1187877657 -0.3964426906 1.0000000000 -0.4058039291 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "C TZVP-GTH-q4 TZVP-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 5.3685662937 0.0974901974 0.0000000000 0.0000000000 -0.0510969367 0.0000000000 0.0000000000\n" " 1.9830691554 0.1041996677 0.0000000000 0.0000000000 -0.1693035193 0.0000000000 0.0000000000\n" " 0.6978346167 -0.3645093878 0.0000000000 0.0000000000 -0.3579933930 0.0000000000 0.0000000000\n" " 0.2430968816 -0.6336931464 1.0000000000 0.0000000000 -0.4327616531 1.0000000000 0.0000000000\n" " 0.0812865018 -0.1676727564 0.0000000000 1.0000000000 -0.2457672757 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "C TZV2P-GTH-q4 TZV2P-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 5.3685662937 0.0974901974 0.0000000000 0.0000000000 -0.0510969367 0.0000000000 0.0000000000\n" " 1.9830691554 0.1041996677 0.0000000000 0.0000000000 -0.1693035193 0.0000000000 0.0000000000\n" " 0.6978346167 -0.3645093878 0.0000000000 0.0000000000 -0.3579933930 0.0000000000 0.0000000000\n" " 0.2430968816 -0.6336931464 1.0000000000 0.0000000000 -0.4327616531 1.0000000000 0.0000000000\n" " 0.0812865018 -0.1676727564 0.0000000000 1.0000000000 -0.2457672757 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0970000000 1.0000000000 0.0000000000\n" " 0.3180000000 0.0000000000 1.0000000000\n" "#","\n" "C QZV2P-GTH-q4 QZV2P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 6.2117903778 -0.0646967401 0.0000000000 0.0000000000 0.0000000000 0.0325569458 0.0000000000 0.0000000000 0.0000000000\n" " 2.6063423906 -0.1297753357 0.0000000000 0.0000000000 0.0000000000 0.1202876489 0.0000000000 0.0000000000 0.0000000000\n" " 1.0110258071 0.1365330322 0.0000000000 0.0000000000 0.0000000000 0.2556810166 0.0000000000 0.0000000000 0.0000000000\n" " 0.4099767831 0.5183875877 1.0000000000 0.0000000000 0.0000000000 0.3643736556 1.0000000000 0.0000000000 0.0000000000\n" " 0.1615409293 0.4426674841 0.0000000000 1.0000000000 0.0000000000 0.3489621232 0.0000000000 1.0000000000 0.0000000000\n" " 0.0597349919 0.0598757918 0.0000000000 0.0000000000 1.0000000000 0.1399973180 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0970000000 1.0000000000 0.0000000000\n" " 0.3180000000 0.0000000000 1.0000000000\n" "#","\n" "C QZV3P-GTH-q4 QZV3P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 6.2117903778 -0.0646967401 0.0000000000 0.0000000000 0.0000000000 0.0325569458 0.0000000000 0.0000000000 0.0000000000\n" " 2.6063423906 -0.1297753357 0.0000000000 0.0000000000 0.0000000000 0.1202876489 0.0000000000 0.0000000000 0.0000000000\n" " 1.0110258071 0.1365330322 0.0000000000 0.0000000000 0.0000000000 0.2556810166 0.0000000000 0.0000000000 0.0000000000\n" " 0.4099767831 0.5183875877 1.0000000000 0.0000000000 0.0000000000 0.3643736556 1.0000000000 0.0000000000 0.0000000000\n" " 0.1615409293 0.4426674841 0.0000000000 1.0000000000 0.0000000000 0.3489621232 0.0000000000 1.0000000000 0.0000000000\n" " 0.0597349919 0.0598757918 0.0000000000 0.0000000000 1.0000000000 0.1399973180 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.8480000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.6490000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2280000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "C aug-DZVP-GTH-q4 aug-DZVP-GTH\n" " 4\n" " 2 0 1 4 2 2\n" " 4.3362376436 0.1490797872 0.0000000000 -0.0878123619 0.0000000000\n" " 1.2881838513 -0.0292640031 0.0000000000 -0.2775560300 0.0000000000\n" " 0.4037767149 -0.6882040510 0.0000000000 -0.4712295093 0.0000000000\n" " 0.1187877657 -0.3964426906 1.0000000000 -0.4058039291 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.04690000 1.0000000000\n" " 2 1 1 1 1\n" " 0.04041000 1.0000000000\n" "#","\n" "C aug-TZVP-GTH-q4 aug-TZVP-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 5.3685662937 0.0974901974 0.0000000000 0.0000000000 -0.0510969367 0.0000000000 0.0000000000\n" " 1.9830691554 0.1041996677 0.0000000000 0.0000000000 -0.1693035193 0.0000000000 0.0000000000\n" " 0.6978346167 -0.3645093878 0.0000000000 0.0000000000 -0.3579933930 0.0000000000 0.0000000000\n" " 0.2430968816 -0.6336931464 1.0000000000 0.0000000000 -0.4327616531 1.0000000000 0.0000000000\n" " 0.0812865018 -0.1676727564 0.0000000000 1.0000000000 -0.2457672757 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.04402000 1.0000000000\n" " 2 1 1 1 1\n" " 0.03569000 1.0000000000\n" "#","\n" "C aug-TZV2P-GTH-q4 aug-TZV2P-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 5.3685662937 0.0974901974 0.0000000000 0.0000000000 -0.0510969367 0.0000000000 0.0000000000\n" " 1.9830691554 0.1041996677 0.0000000000 0.0000000000 -0.1693035193 0.0000000000 0.0000000000\n" " 0.6978346167 -0.3645093878 0.0000000000 0.0000000000 -0.3579933930 0.0000000000 0.0000000000\n" " 0.2430968816 -0.6336931464 1.0000000000 0.0000000000 -0.4327616531 1.0000000000 0.0000000000\n" " 0.0812865018 -0.1676727564 0.0000000000 1.0000000000 -0.2457672757 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0970000000 1.0000000000 0.0000000000\n" " 0.3180000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.04402000 1.0000000000\n" " 2 1 1 1 1\n" " 0.03569000 1.0000000000\n" "#","\n" "C aug-QZV2P-GTH-q4 aug-QZV2P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 6.2117903778 -0.0646967401 0.0000000000 0.0000000000 0.0000000000 0.0325569458 0.0000000000 0.0000000000 0.0000000000\n" " 2.6063423906 -0.1297753357 0.0000000000 0.0000000000 0.0000000000 0.1202876489 0.0000000000 0.0000000000 0.0000000000\n" " 1.0110258071 0.1365330322 0.0000000000 0.0000000000 0.0000000000 0.2556810166 0.0000000000 0.0000000000 0.0000000000\n" " 0.4099767831 0.5183875877 1.0000000000 0.0000000000 0.0000000000 0.3643736556 1.0000000000 0.0000000000 0.0000000000\n" " 0.1615409293 0.4426674841 0.0000000000 1.0000000000 0.0000000000 0.3489621232 0.0000000000 1.0000000000 0.0000000000\n" " 0.0597349919 0.0598757918 0.0000000000 0.0000000000 1.0000000000 0.1399973180 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0970000000 1.0000000000 0.0000000000\n" " 0.3180000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.04145000 1.0000000000\n" " 2 1 1 1 1\n" " 0.03218000 1.0000000000\n" "#","\n" "C aug-QZV3P-GTH-q4 aug-QZV3P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 6.2117903778 -0.0646967401 0.0000000000 0.0000000000 0.0000000000 0.0325569458 0.0000000000 0.0000000000 0.0000000000\n" " 2.6063423906 -0.1297753357 0.0000000000 0.0000000000 0.0000000000 0.1202876489 0.0000000000 0.0000000000 0.0000000000\n" " 1.0110258071 0.1365330322 0.0000000000 0.0000000000 0.0000000000 0.2556810166 0.0000000000 0.0000000000 0.0000000000\n" " 0.4099767831 0.5183875877 1.0000000000 0.0000000000 0.0000000000 0.3643736556 1.0000000000 0.0000000000 0.0000000000\n" " 0.1615409293 0.4426674841 0.0000000000 1.0000000000 0.0000000000 0.3489621232 0.0000000000 1.0000000000 0.0000000000\n" " 0.0597349919 0.0598757918 0.0000000000 0.0000000000 1.0000000000 0.1399973180 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.8480000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.6490000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2280000000 0.0000000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.04145000 1.0000000000\n" " 2 1 1 1 1\n" " 0.03218000 1.0000000000\n" "#","\n" "N SZV-GTH-q5 SZV-GTH\n" " 1\n" " 2 0 1 4 1 1\n" " 6.1526903413 0.1506300537 -0.0950603476\n" " 1.8236332280 -0.0360100734 -0.2918864295\n" " 0.5676628870 -0.6942023212 -0.4739050050\n" " 0.1628222852 -0.3878929987 -0.3893418670\n" "#","\n" "N DZVP-GTH-q5 DZVP-GTH\n" " 2\n" " 2 0 1 4 2 2\n" " 6.1526903413 0.1506300537 0.0000000000 -0.0950603476 0.0000000000\n" " 1.8236332280 -0.0360100734 0.0000000000 -0.2918864295 0.0000000000\n" " 0.5676628870 -0.6942023212 0.0000000000 -0.4739050050 0.0000000000\n" " 0.1628222852 -0.3878929987 1.0000000000 -0.3893418670 1.0000000000\n" " 3 2 2 1 1\n" " 0.8170000000 1.0000000000\n" "#","\n" "N TZVP-GTH-q5 TZVP-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 7.6227447102 0.0983924689 0.0000000000 0.0000000000 -0.0561654555 0.0000000000 0.0000000000\n" " 2.7970605447 0.1045217098 0.0000000000 0.0000000000 -0.1798165209 0.0000000000 0.0000000000\n" " 0.9909765447 -0.3742661352 0.0000000000 0.0000000000 -0.3653986185 0.0000000000 0.0000000000\n" " 0.3417314862 -0.6278094034 1.0000000000 0.0000000000 -0.4259126207 1.0000000000 0.0000000000\n" " 0.1116822743 -0.1675236192 0.0000000000 1.0000000000 -0.2366040346 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8170000000 1.0000000000\n" "#","\n" "N TZV2P-GTH-q5 TZV2P-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 7.6227447102 0.0983924689 0.0000000000 0.0000000000 -0.0561654555 0.0000000000 0.0000000000\n" " 2.7970605447 0.1045217098 0.0000000000 0.0000000000 -0.1798165209 0.0000000000 0.0000000000\n" " 0.9909765447 -0.3742661352 0.0000000000 0.0000000000 -0.3653986185 0.0000000000 0.0000000000\n" " 0.3417314862 -0.6278094034 1.0000000000 0.0000000000 -0.4259126207 1.0000000000 0.0000000000\n" " 0.1116822743 -0.1675236192 0.0000000000 1.0000000000 -0.2366040346 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.6540000000 1.0000000000 0.0000000000\n" " 0.4690000000 0.0000000000 1.0000000000\n" "#","\n" "N QZV2P-GTH-q5 QZV2P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 8.8030997240 -0.0653598725 0.0000000000 0.0000000000 0.0000000000 0.0363703004 0.0000000000 0.0000000000 0.0000000000\n" " 3.6785202400 -0.1318019698 0.0000000000 0.0000000000 0.0000000000 0.1277243136 0.0000000000 0.0000000000 0.0000000000\n" " 1.4352947631 0.1465239013 0.0000000000 0.0000000000 0.0000000000 0.2667499496 0.0000000000 0.0000000000 0.0000000000\n" " 0.5774326402 0.5201300002 1.0000000000 0.0000000000 0.0000000000 0.3658846849 1.0000000000 0.0000000000 0.0000000000\n" " 0.2247320708 0.4360365020 0.0000000000 1.0000000000 0.0000000000 0.3370061673 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818920852 0.0597929754 0.0000000000 0.0000000000 1.0000000000 0.1349212947 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.6540000000 1.0000000000 0.0000000000\n" " 0.4690000000 0.0000000000 1.0000000000\n" "#","\n" "N QZV3P-GTH-q5 QZV3P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 8.8030997240 -0.0653598725 0.0000000000 0.0000000000 0.0000000000 0.0363703004 0.0000000000 0.0000000000 0.0000000000\n" " 3.6785202400 -0.1318019698 0.0000000000 0.0000000000 0.0000000000 0.1277243136 0.0000000000 0.0000000000 0.0000000000\n" " 1.4352947631 0.1465239013 0.0000000000 0.0000000000 0.0000000000 0.2667499496 0.0000000000 0.0000000000 0.0000000000\n" " 0.5774326402 0.5201300002 1.0000000000 0.0000000000 0.0000000000 0.3658846849 1.0000000000 0.0000000000 0.0000000000\n" " 0.2247320708 0.4360365020 0.0000000000 1.0000000000 0.0000000000 0.3370061673 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818920852 0.0597929754 0.0000000000 0.0000000000 1.0000000000 0.1349212947 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 2.8370000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.9680000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.3350000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "N aug-DZVP-GTH-q5 aug-DZVP-GTH\n" " 4\n" " 2 0 1 4 2 2\n" " 6.1526903413 0.1506300537 0.0000000000 -0.0950603476 0.0000000000\n" " 1.8236332280 -0.0360100734 0.0000000000 -0.2918864295 0.0000000000\n" " 0.5676628870 -0.6942023212 0.0000000000 -0.4739050050 0.0000000000\n" " 0.1628222852 -0.3878929987 1.0000000000 -0.3893418670 1.0000000000\n" " 3 2 2 1 1\n" " 0.8170000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.06124000 1.0000000000\n" " 2 1 1 1 1\n" " 0.05611000 1.0000000000\n" "#","\n" "N aug-TZVP-GTH-q5 aug-TZVP-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 7.6227447102 0.0983924689 0.0000000000 0.0000000000 -0.0561654555 0.0000000000 0.0000000000\n" " 2.7970605447 0.1045217098 0.0000000000 0.0000000000 -0.1798165209 0.0000000000 0.0000000000\n" " 0.9909765447 -0.3742661352 0.0000000000 0.0000000000 -0.3653986185 0.0000000000 0.0000000000\n" " 0.3417314862 -0.6278094034 1.0000000000 0.0000000000 -0.4259126207 1.0000000000 0.0000000000\n" " 0.1116822743 -0.1675236192 0.0000000000 1.0000000000 -0.2366040346 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8170000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.05760000 1.0000000000\n" " 2 1 1 1 1\n" " 0.04910000 1.0000000000\n" "#","\n" "N aug-TZV2P-GTH-q5 aug-TZV2P-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 7.6227447102 0.0983924689 0.0000000000 0.0000000000 -0.0561654555 0.0000000000 0.0000000000\n" " 2.7970605447 0.1045217098 0.0000000000 0.0000000000 -0.1798165209 0.0000000000 0.0000000000\n" " 0.9909765447 -0.3742661352 0.0000000000 0.0000000000 -0.3653986185 0.0000000000 0.0000000000\n" " 0.3417314862 -0.6278094034 1.0000000000 0.0000000000 -0.4259126207 1.0000000000 0.0000000000\n" " 0.1116822743 -0.1675236192 0.0000000000 1.0000000000 -0.2366040346 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.6540000000 1.0000000000 0.0000000000\n" " 0.4690000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.05760000 1.0000000000\n" " 2 1 1 1 1\n" " 0.04910000 1.0000000000\n" "#","\n" "N aug-QZV2P-GTH-q5 aug-QZV2P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 8.8030997240 -0.0653598725 0.0000000000 0.0000000000 0.0000000000 0.0363703004 0.0000000000 0.0000000000 0.0000000000\n" " 3.6785202400 -0.1318019698 0.0000000000 0.0000000000 0.0000000000 0.1277243136 0.0000000000 0.0000000000 0.0000000000\n" " 1.4352947631 0.1465239013 0.0000000000 0.0000000000 0.0000000000 0.2667499496 0.0000000000 0.0000000000 0.0000000000\n" " 0.5774326402 0.5201300002 1.0000000000 0.0000000000 0.0000000000 0.3658846849 1.0000000000 0.0000000000 0.0000000000\n" " 0.2247320708 0.4360365020 0.0000000000 1.0000000000 0.0000000000 0.3370061673 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818920852 0.0597929754 0.0000000000 0.0000000000 1.0000000000 0.1349212947 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.6540000000 1.0000000000 0.0000000000\n" " 0.4690000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.05464000 1.0000000000\n" " 2 1 1 1 1\n" " 0.04402000 1.0000000000\n" "#","\n" "N aug-QZV3P-GTH-q5 aug-QZV3P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 8.8030997240 -0.0653598725 0.0000000000 0.0000000000 0.0000000000 0.0363703004 0.0000000000 0.0000000000 0.0000000000\n" " 3.6785202400 -0.1318019698 0.0000000000 0.0000000000 0.0000000000 0.1277243136 0.0000000000 0.0000000000 0.0000000000\n" " 1.4352947631 0.1465239013 0.0000000000 0.0000000000 0.0000000000 0.2667499496 0.0000000000 0.0000000000 0.0000000000\n" " 0.5774326402 0.5201300002 1.0000000000 0.0000000000 0.0000000000 0.3658846849 1.0000000000 0.0000000000 0.0000000000\n" " 0.2247320708 0.4360365020 0.0000000000 1.0000000000 0.0000000000 0.3370061673 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818920852 0.0597929754 0.0000000000 0.0000000000 1.0000000000 0.1349212947 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 2.8370000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.9680000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.3350000000 0.0000000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.05464000 1.0000000000\n" " 2 1 1 1 1\n" " 0.04402000 1.0000000000\n" "#","\n" "O SZV-GTH-q6 SZV-GTH\n" " 1\n" " 2 0 1 4 1 1\n" " 8.3043855492 0.1510165999 -0.0995679273\n" " 2.4579484191 -0.0393195364 -0.3011422449\n" " 0.7597373434 -0.6971724029 -0.4750857083\n" " 0.2136388632 -0.3841133622 -0.3798777957\n" "#","\n" "O DZVP-GTH-q6 DZVP-GTH\n" " 2\n" " 2 0 1 4 2 2\n" " 8.3043855492 0.1510165999 0.0000000000 -0.0995679273 0.0000000000\n" " 2.4579484191 -0.0393195364 0.0000000000 -0.3011422449 0.0000000000\n" " 0.7597373434 -0.6971724029 0.0000000000 -0.4750857083 0.0000000000\n" " 0.2136388632 -0.3841133622 1.0000000000 -0.3798777957 1.0000000000\n" " 3 2 2 1 1\n" " 1.1850000000 1.0000000000\n" "#","\n" "O TZVP-GTH-q6 TZVP-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 10.2674419938 0.0989598460 0.0000000000 0.0000000000 -0.0595856940 0.0000000000 0.0000000000\n" " 3.7480495696 0.1041178339 0.0000000000 0.0000000000 -0.1875649045 0.0000000000 0.0000000000\n" " 1.3308337704 -0.3808255700 0.0000000000 0.0000000000 -0.3700707718 0.0000000000 0.0000000000\n" " 0.4556802254 -0.6232449802 1.0000000000 0.0000000000 -0.4204922615 1.0000000000 0.0000000000\n" " 0.1462920596 -0.1677863491 0.0000000000 1.0000000000 -0.2313901687 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 1.1850000000 1.0000000000\n" "#","\n" "O TZV2P-GTH-q6 TZV2P-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 10.2674419938 0.0989598460 0.0000000000 0.0000000000 -0.0595856940 0.0000000000 0.0000000000\n" " 3.7480495696 0.1041178339 0.0000000000 0.0000000000 -0.1875649045 0.0000000000 0.0000000000\n" " 1.3308337704 -0.3808255700 0.0000000000 0.0000000000 -0.3700707718 0.0000000000 0.0000000000\n" " 0.4556802254 -0.6232449802 1.0000000000 0.0000000000 -0.4204922615 1.0000000000 0.0000000000\n" " 0.1462920596 -0.1677863491 0.0000000000 1.0000000000 -0.2313901687 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 2.3140000000 1.0000000000 0.0000000000\n" " 0.6450000000 0.0000000000 1.0000000000\n" "#","\n" "O QZV2P-GTH-q6 QZV2P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 11.8298677444 -0.0658681959 0.0000000000 0.0000000000 0.0000000000 0.0389990698 0.0000000000 0.0000000000 0.0000000000\n" " 4.9326307395 -0.1327117781 0.0000000000 0.0000000000 0.0000000000 0.1329824319 0.0000000000 0.0000000000 0.0000000000\n" " 1.9312997298 0.1529660213 0.0000000000 0.0000000000 0.0000000000 0.2737974007 0.0000000000 0.0000000000 0.0000000000\n" " 0.7724003899 0.5206439978 1.0000000000 0.0000000000 0.0000000000 0.3663338041 1.0000000000 0.0000000000 0.0000000000\n" " 0.2976334392 0.4322622254 0.0000000000 1.0000000000 0.0000000000 0.3292638764 0.0000000000 1.0000000000 0.0000000000\n" " 0.1070061063 0.0599977177 0.0000000000 0.0000000000 1.0000000000 0.1324571183 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 2.3140000000 1.0000000000 0.0000000000\n" " 0.6450000000 0.0000000000 1.0000000000\n" "#","\n" "O QZV3P-GTH-q6 QZV3P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 11.8298677444 -0.0658681959 0.0000000000 0.0000000000 0.0000000000 0.0389990698 0.0000000000 0.0000000000 0.0000000000\n" " 4.9326307395 -0.1327117781 0.0000000000 0.0000000000 0.0000000000 0.1329824319 0.0000000000 0.0000000000 0.0000000000\n" " 1.9312997298 0.1529660213 0.0000000000 0.0000000000 0.0000000000 0.2737974007 0.0000000000 0.0000000000 0.0000000000\n" " 0.7724003899 0.5206439978 1.0000000000 0.0000000000 0.0000000000 0.3663338041 1.0000000000 0.0000000000 0.0000000000\n" " 0.2976334392 0.4322622254 0.0000000000 1.0000000000 0.0000000000 0.3292638764 0.0000000000 1.0000000000 0.0000000000\n" " 0.1070061063 0.0599977177 0.0000000000 0.0000000000 1.0000000000 0.1324571183 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 3.7750000000 1.0000000000 0.0000000000 0.0000000000\n" " 1.3000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.4440000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "O aug-DZVP-GTH-q6 aug-DZVP-GTH\n" " 4\n" " 2 0 1 4 2 2\n" " 8.3043855492 0.1510165999 0.0000000000 -0.0995679273 0.0000000000\n" " 2.4579484191 -0.0393195364 0.0000000000 -0.3011422449 0.0000000000\n" " 0.7597373434 -0.6971724029 0.0000000000 -0.4750857083 0.0000000000\n" " 0.2136388632 -0.3841133622 1.0000000000 -0.3798777957 1.0000000000\n" " 3 2 2 1 1\n" " 1.1850000000 1.0000000000\n" " 4 0 0 1 1\n" " 0.0789600000 1.0000000000\n" " 4 1 1 1 1\n" " 0.0685600000 1.0000000000\n" "#","\n" "O aug-TZVP-GTH-q6 aug-TZVP-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 10.2674419938 0.0989598460 0.0000000000 0.0000000000 -0.0595856940 0.0000000000 0.0000000000 0.0000000000\n" " 3.7480495696 0.1041178339 0.0000000000 0.0000000000 -0.1875649045 0.0000000000 0.0000000000 0.0000000000\n" " 1.3308337704 -0.3808255700 0.0000000000 0.0000000000 -0.3700707718 0.0000000000 0.0000000000 0.0000000000\n" " 0.4556802254 -0.6232449802 1.0000000000 0.0000000000 -0.4204922615 1.0000000000 0.0000000000 0.0000000000\n" " 0.1462920596 -0.1677863491 0.0000000000 1.0000000000 -0.2313901687 0.0000000000 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 1.1850000000 1.0000000000\n" " 5 0 0 1 1\n" " 0.0737600000 1.0000000000\n" " 5 1 1 1 1\n" " 0.0597400000 1.0000000000\n" "#","\n" "O aug-TZV2P-GTH-q6 aug-TZV2P-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 10.2674419938 0.0989598460 0.0000000000 0.0000000000 -0.0595856940 0.0000000000 0.0000000000 0.0000000000\n" " 3.7480495696 0.1041178339 0.0000000000 0.0000000000 -0.1875649045 0.0000000000 0.0000000000 0.0000000000\n" " 1.3308337704 -0.3808255700 0.0000000000 0.0000000000 -0.3700707718 0.0000000000 0.0000000000 0.0000000000\n" " 0.4556802254 -0.6232449802 1.0000000000 0.0000000000 -0.4204922615 1.0000000000 0.0000000000 0.0000000000\n" " 0.1462920596 -0.1677863491 0.0000000000 1.0000000000 -0.2313901687 0.0000000000 1.0000000000 0.0000000000\n" " 3 2 2 2 2\n" " 2.3140000000 1.0000000000 0.0000000000\n" " 0.6450000000 0.0000000000 1.0000000000\n" " 5 0 0 1 1\n" " 0.0737600000 1.0000000000\n" " 5 1 1 1 1\n" " 0.0597400000 1.0000000000\n" "#","\n" "O aug-QZV2P-GTH-q6 aug-QZV2P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 11.8298677444 -0.0658681959 0.0000000000 0.0000000000 0.0000000000 0.0389990698 0.0000000000 0.0000000000 0.0000000000\n" " 4.9326307395 -0.1327117781 0.0000000000 0.0000000000 0.0000000000 0.1329824319 0.0000000000 0.0000000000 0.0000000000\n" " 1.9312997298 0.1529660213 0.0000000000 0.0000000000 0.0000000000 0.2737974007 0.0000000000 0.0000000000 0.0000000000\n" " 0.7724003899 0.5206439978 1.0000000000 0.0000000000 0.0000000000 0.3663338041 1.0000000000 0.0000000000 0.0000000000\n" " 0.2976334392 0.4322622254 0.0000000000 1.0000000000 0.0000000000 0.3292638764 0.0000000000 1.0000000000 0.0000000000\n" " 0.1070061063 0.0599977177 0.0000000000 0.0000000000 1.0000000000 0.1324571183 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 2.3140000000 1.0000000000 0.0000000000\n" " 0.6450000000 0.0000000000 1.0000000000\n" " 6 0 0 1 1\n" " 0.0695900000 1.0000000000\n" " 6 1 1 1 1\n" " 0.0534800000 1.0000000000\n" "#","\n" "O aug-QZV3P-GTH-q6 aug-QZV3P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 11.8298677444 -0.0658681959 0.0000000000 0.0000000000 0.0000000000 0.0389990698 0.0000000000 0.0000000000 0.0000000000\n" " 4.9326307395 -0.1327117781 0.0000000000 0.0000000000 0.0000000000 0.1329824319 0.0000000000 0.0000000000 0.0000000000\n" " 1.9312997298 0.1529660213 0.0000000000 0.0000000000 0.0000000000 0.2737974007 0.0000000000 0.0000000000 0.0000000000\n" " 0.7724003899 0.5206439978 1.0000000000 0.0000000000 0.0000000000 0.3663338041 1.0000000000 0.0000000000 0.0000000000\n" " 0.2976334392 0.4322622254 0.0000000000 1.0000000000 0.0000000000 0.3292638764 0.0000000000 1.0000000000 0.0000000000\n" " 0.1070061063 0.0599977177 0.0000000000 0.0000000000 1.0000000000 0.1324571183 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 3.7750000000 1.0000000000 0.0000000000 0.0000000000\n" " 1.3000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.4440000000 0.0000000000 0.0000000000 1.0000000000\n" " 6 0 0 1 1\n" " 0.0695900000 1.0000000000\n" " 6 1 1 1 1\n" " 0.0534800000 1.0000000000\n" "#","\n" "F SZV-GTH-q7 SZV-GTH\n" " 1\n" " 2 0 1 4 1 1\n" " 10.7079832847 0.1525178777 -0.1028649478\n" " 3.1757210204 -0.0450363043 -0.3085265610\n" " 0.9750975650 -0.6987425604 -0.4757649909\n" " 0.2701246771 -0.3801470341 -0.3724954705\n" "#","\n" "F DZVP-GTH-q7 DZVP-GTH\n" " 2\n" " 2 0 1 4 2 2\n" " 10.7079832847 0.1525178777 0.0000000000 -0.1028649478 0.0000000000\n" " 3.1757210204 -0.0450363043 0.0000000000 -0.3085265610 0.0000000000\n" " 0.9750975650 -0.6987425604 0.0000000000 -0.4757649909 0.0000000000\n" " 0.2701246771 -0.3801470341 1.0000000000 -0.3724954705 1.0000000000\n" " 3 2 2 1 1\n" " 1.6400000000 1.0000000000\n" "#","\n" "F TZVP-GTH-q7 TZVP-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 13.1625129789 0.1014784435 0.0000000000 0.0000000000 -0.0624161251 0.0000000000 0.0000000000\n" " 4.7972015127 0.1001604122 0.0000000000 0.0000000000 -0.1948710850 0.0000000000 0.0000000000\n" " 1.7049975196 -0.3881644200 0.0000000000 0.0000000000 -0.3737338926 0.0000000000 0.0000000000\n" " 0.5814471097 -0.6179394476 1.0000000000 0.0000000000 -0.4151939502 1.0000000000 0.0000000000\n" " 0.1842582220 -0.1660215122 0.0000000000 1.0000000000 -0.2267411587 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 1.6400000000 1.0000000000\n" "#","\n" "F TZV2P-GTH-q7 TZV2P-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 13.1625129789 0.1014784435 0.0000000000 0.0000000000 -0.0624161251 0.0000000000 0.0000000000\n" " 4.7972015127 0.1001604122 0.0000000000 0.0000000000 -0.1948710850 0.0000000000 0.0000000000\n" " 1.7049975196 -0.3881644200 0.0000000000 0.0000000000 -0.3737338926 0.0000000000 0.0000000000\n" " 0.5814471097 -0.6179394476 1.0000000000 0.0000000000 -0.4151939502 1.0000000000 0.0000000000\n" " 0.1842582220 -0.1660215122 0.0000000000 1.0000000000 -0.2267411587 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 3.1070000000 1.0000000000 0.0000000000\n" " 0.8550000000 0.0000000000 1.0000000000\n" "#","\n" "F QZV2P-GTH-q7 QZV2P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 15.1623003547 -0.0676084899 0.0000000000 0.0000000000 0.0000000000 0.0407647530 0.0000000000 0.0000000000 0.0000000000\n" " 6.3418425141 -0.1317375108 0.0000000000 0.0000000000 0.0000000000 0.1374408584 0.0000000000 0.0000000000 0.0000000000\n" " 2.4900230297 0.1587177173 0.0000000000 0.0000000000 0.0000000000 0.2789708771 0.0000000000 0.0000000000 0.0000000000\n" " 0.9919240308 0.5210056191 1.0000000000 0.0000000000 0.0000000000 0.3662011969 1.0000000000 0.0000000000 0.0000000000\n" " 0.3793151196 0.4286790556 0.0000000000 1.0000000000 0.0000000000 0.3234540792 0.0000000000 1.0000000000 0.0000000000\n" " 0.1348132586 0.0598520782 0.0000000000 0.0000000000 1.0000000000 0.1307942509 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 3.1070000000 1.0000000000 0.0000000000\n" " 0.8550000000 0.0000000000 1.0000000000\n" "#","\n" "F QZV3P-GTH-q7 QZV3P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 15.1623003547 -0.0676084899 0.0000000000 0.0000000000 0.0000000000 0.0407647530 0.0000000000 0.0000000000 0.0000000000\n" " 6.3418425141 -0.1317375108 0.0000000000 0.0000000000 0.0000000000 0.1374408584 0.0000000000 0.0000000000 0.0000000000\n" " 2.4900230297 0.1587177173 0.0000000000 0.0000000000 0.0000000000 0.2789708771 0.0000000000 0.0000000000 0.0000000000\n" " 0.9919240308 0.5210056191 1.0000000000 0.0000000000 0.0000000000 0.3662011969 1.0000000000 0.0000000000 0.0000000000\n" " 0.3793151196 0.4286790556 0.0000000000 1.0000000000 0.0000000000 0.3234540792 0.0000000000 1.0000000000 0.0000000000\n" " 0.1348132586 0.0598520782 0.0000000000 0.0000000000 1.0000000000 0.1307942509 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 5.0140000000 1.0000000000 0.0000000000 0.0000000000\n" " 1.7250000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.5860000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "F aug-DZVP-GTH-q7 aug-DZVP-GTH\n" " 4\n" " 2 0 1 4 2 2\n" " 10.7079832847 0.1525178777 0.0000000000 -0.1028649478 0.0000000000\n" " 3.1757210204 -0.0450363043 0.0000000000 -0.3085265610 0.0000000000\n" " 0.9750975650 -0.6987425604 0.0000000000 -0.4757649909 0.0000000000\n" " 0.2701246771 -0.3801470341 1.0000000000 -0.3724954705 1.0000000000\n" " 3 2 2 1 1\n" " 1.6400000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.09863000 1.0000000000\n" " 2 1 1 1 1\n" " 0.08502000 1.0000000000\n" "#","\n" "F aug-TZVP-GTH-q7 aug-TZVP-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 13.1625129789 0.1014784435 0.0000000000 0.0000000000 -0.0624161251 0.0000000000 0.0000000000\n" " 4.7972015127 0.1001604122 0.0000000000 0.0000000000 -0.1948710850 0.0000000000 0.0000000000\n" " 1.7049975196 -0.3881644200 0.0000000000 0.0000000000 -0.3737338926 0.0000000000 0.0000000000\n" " 0.5814471097 -0.6179394476 1.0000000000 0.0000000000 -0.4151939502 1.0000000000 0.0000000000\n" " 0.1842582220 -0.1660215122 0.0000000000 1.0000000000 -0.2267411587 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 1.6400000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.09158000 1.0000000000\n" " 2 1 1 1 1\n" " 0.07361000 1.0000000000\n" "#","\n" "F aug-TZV2P-GTH-q7 aug-TZV2P-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 13.1625129789 0.1014784435 0.0000000000 0.0000000000 -0.0624161251 0.0000000000 0.0000000000\n" " 4.7972015127 0.1001604122 0.0000000000 0.0000000000 -0.1948710850 0.0000000000 0.0000000000\n" " 1.7049975196 -0.3881644200 0.0000000000 0.0000000000 -0.3737338926 0.0000000000 0.0000000000\n" " 0.5814471097 -0.6179394476 1.0000000000 0.0000000000 -0.4151939502 1.0000000000 0.0000000000\n" " 0.1842582220 -0.1660215122 0.0000000000 1.0000000000 -0.2267411587 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 3.1070000000 1.0000000000 0.0000000000\n" " 0.8550000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.09158000 1.0000000000\n" " 2 1 1 1 1\n" " 0.07361000 1.0000000000\n" "#","\n" "F aug-QZV2P-GTH-q7 aug-QZV2P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 15.1623003547 -0.0676084899 0.0000000000 0.0000000000 0.0000000000 0.0407647530 0.0000000000 0.0000000000 0.0000000000\n" " 6.3418425141 -0.1317375108 0.0000000000 0.0000000000 0.0000000000 0.1374408584 0.0000000000 0.0000000000 0.0000000000\n" " 2.4900230297 0.1587177173 0.0000000000 0.0000000000 0.0000000000 0.2789708771 0.0000000000 0.0000000000 0.0000000000\n" " 0.9919240308 0.5210056191 1.0000000000 0.0000000000 0.0000000000 0.3662011969 1.0000000000 0.0000000000 0.0000000000\n" " 0.3793151196 0.4286790556 0.0000000000 1.0000000000 0.0000000000 0.3234540792 0.0000000000 1.0000000000 0.0000000000\n" " 0.1348132586 0.0598520782 0.0000000000 0.0000000000 1.0000000000 0.1307942509 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 3.1070000000 1.0000000000 0.0000000000\n" " 0.8550000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.08594000 1.0000000000\n" " 2 1 1 1 1\n" " 0.06568000 1.0000000000\n" "#","\n" "F aug-QZV3P-GTH-q7 aug-QZV3P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 15.1623003547 -0.0676084899 0.0000000000 0.0000000000 0.0000000000 0.0407647530 0.0000000000 0.0000000000 0.0000000000\n" " 6.3418425141 -0.1317375108 0.0000000000 0.0000000000 0.0000000000 0.1374408584 0.0000000000 0.0000000000 0.0000000000\n" " 2.4900230297 0.1587177173 0.0000000000 0.0000000000 0.0000000000 0.2789708771 0.0000000000 0.0000000000 0.0000000000\n" " 0.9919240308 0.5210056191 1.0000000000 0.0000000000 0.0000000000 0.3662011969 1.0000000000 0.0000000000 0.0000000000\n" " 0.3793151196 0.4286790556 0.0000000000 1.0000000000 0.0000000000 0.3234540792 0.0000000000 1.0000000000 0.0000000000\n" " 0.1348132586 0.0598520782 0.0000000000 0.0000000000 1.0000000000 0.1307942509 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 5.0140000000 1.0000000000 0.0000000000 0.0000000000\n" " 1.7250000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.5860000000 0.0000000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.08594000 1.0000000000\n" " 2 1 1 1 1\n" " 0.06568000 1.0000000000\n" "#","\n" "Ne SZV-GTH-q8 SZV-GTH\n" " 1\n" " 2 0 1 4 1 1\n" " 13.7594449156 0.1483426747 -0.1044041225\n" " 4.0425282819 -0.0356307196 -0.3108899020\n" " 1.2355181615 -0.7010729520 -0.4760216511\n" " 0.3367029925 -0.3841118307 -0.3721570391\n" "#","\n" "Ne DZVP-GTH-q8 DZVP-GTH\n" " 2\n" " 2 0 1 4 2 2\n" " 13.7594449156 0.1483426747 0.0000000000 -0.1044041225 0.0000000000\n" " 4.0425282819 -0.0356307196 0.0000000000 -0.3108899020 0.0000000000\n" " 1.2355181615 -0.7010729520 0.0000000000 -0.4760216511 0.0000000000\n" " 0.3367029925 -0.3841118307 1.0000000000 -0.3721570391 1.0000000000\n" " 3 2 2 1 1\n" " 2.2020000000 1.0000000000\n" "#","\n" "Ne TZVP-GTH-q8 TZVP-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 17.0406976441 0.0956582854 0.0000000000 0.0000000000 -0.0631287607 0.0000000000 0.0000000000\n" " 6.1494859942 0.1095546500 0.0000000000 0.0000000000 -0.1953504506 0.0000000000 0.0000000000\n" " 2.1810891675 -0.3850952695 0.0000000000 0.0000000000 -0.3747245390 0.0000000000 0.0000000000\n" " 0.7370336206 -0.6201458095 1.0000000000 0.0000000000 -0.4151315545 1.0000000000 0.0000000000\n" " 0.2296296929 -0.1719183539 0.0000000000 1.0000000000 -0.2286539782 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 2.2020000000 1.0000000000\n" "#","\n" "Ne TZV2P-GTH-q8 TZV2P-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 17.0406976441 0.0956582854 0.0000000000 0.0000000000 -0.0631287607 0.0000000000 0.0000000000\n" " 6.1494859942 0.1095546500 0.0000000000 0.0000000000 -0.1953504506 0.0000000000 0.0000000000\n" " 2.1810891675 -0.3850952695 0.0000000000 0.0000000000 -0.3747245390 0.0000000000 0.0000000000\n" " 0.7370336206 -0.6201458095 1.0000000000 0.0000000000 -0.4151315545 1.0000000000 0.0000000000\n" " 0.2296296929 -0.1719183539 0.0000000000 1.0000000000 -0.2286539782 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 4.0140000000 1.0000000000 0.0000000000\n" " 1.0960000000 0.0000000000 1.0000000000\n" "#","\n" "Ne QZV2P-GTH-q8 QZV2P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 19.5499411153 -0.0632766758 0.0000000000 0.0000000000 0.0000000000 0.0422167837 0.0000000000 0.0000000000 0.0000000000\n" " 8.0769601838 -0.1370919085 0.0000000000 0.0000000000 0.0000000000 0.1383304483 0.0000000000 0.0000000000 0.0000000000\n" " 3.1678758504 0.1578325934 0.0000000000 0.0000000000 0.0000000000 0.2813677061 0.0000000000 0.0000000000 0.0000000000\n" " 1.2535625634 0.5200705489 1.0000000000 0.0000000000 0.0000000000 0.3669217463 1.0000000000 0.0000000000 0.0000000000\n" " 0.4749693396 0.4313985613 0.0000000000 1.0000000000 0.0000000000 0.3213403173 0.0000000000 1.0000000000 0.0000000000\n" " 0.1666682167 0.0613040256 0.0000000000 0.0000000000 1.0000000000 0.1317714527 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 4.0140000000 1.0000000000 0.0000000000\n" " 1.0960000000 0.0000000000 1.0000000000\n" "#","\n" "Ne QZV3P-GTH-q8 QZV3P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 19.5499411153 -0.0632766758 0.0000000000 0.0000000000 0.0000000000 0.0422167837 0.0000000000 0.0000000000 0.0000000000\n" " 8.0769601838 -0.1370919085 0.0000000000 0.0000000000 0.0000000000 0.1383304483 0.0000000000 0.0000000000 0.0000000000\n" " 3.1678758504 0.1578325934 0.0000000000 0.0000000000 0.0000000000 0.2813677061 0.0000000000 0.0000000000 0.0000000000\n" " 1.2535625634 0.5200705489 1.0000000000 0.0000000000 0.0000000000 0.3669217463 1.0000000000 0.0000000000 0.0000000000\n" " 0.4749693396 0.4313985613 0.0000000000 1.0000000000 0.0000000000 0.3213403173 0.0000000000 1.0000000000 0.0000000000\n" " 0.1666682167 0.0613040256 0.0000000000 0.0000000000 1.0000000000 0.1317714527 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 6.4710000000 1.0000000000 0.0000000000 0.0000000000\n" " 2.2130000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.7470000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Na SZV-GTH-q9 SZV-GTH\n" " 1\n" " 2 0 1 6 2 1\n" " 17.6698382207 -0.1362364777 0.0270957219 0.0791980974\n" " 6.9070658063 -0.0645835666 0.0098734119 0.2184139257\n" " 2.6098601451 0.3866153961 -0.0737170396 0.3764887364\n" " 0.9649548796 0.5971358883 -0.2186742776 0.3922304007\n" " 0.3400348369 0.1756697026 -0.0301066303 0.1808407220\n" " 0.0432486046 -0.0017104621 1.0388865857 0.0057696324\n" "#","\n" "Na DZVP-GTH-q9 DZVP-GTH\n" " 2\n" " 2 0 1 6 3 2\n" " 17.6698382207 -0.1362364777 0.0270957219 0.0000000000 0.0791980974 0.0000000000\n" " 6.9070658063 -0.0645835666 0.0098734119 0.0000000000 0.2184139257 0.0000000000\n" " 2.6098601451 0.3866153961 -0.0737170396 0.0000000000 0.3764887364 0.0000000000\n" " 0.9649548796 0.5971358883 -0.2186742776 0.0000000000 0.3922304007 0.0000000000\n" " 0.3400348369 0.1756697026 -0.0301066303 0.0000000000 0.1808407220 0.0000000000\n" " 0.0432486046 -0.0017104621 1.0388865857 1.0000000000 0.0057696324 1.0000000000\n" " 3 2 2 1 1\n" " 0.0973000000 1.0000000000\n" "#","\n" "Na TZVP-GTH-q9 TZVP-GTH\n" " 2\n" " 2 0 1 7 4 3\n" " 18.1210741090 -0.1275232222 -0.0248047945 0.0000000000 0.0000000000 0.0729874345 0.0000000000 0.0000000000\n" " 7.3775066400 -0.0812376594 -0.0171596817 0.0000000000 0.0000000000 0.1996717590 0.0000000000 0.0000000000\n" " 2.8817585986 0.3277442268 0.0724090847 0.0000000000 0.0000000000 0.3527504683 0.0000000000 0.0000000000\n" " 1.0990235357 0.5946658147 0.1739886836 0.0000000000 0.0000000000 0.3936231447 0.0000000000 0.0000000000\n" " 0.4007387720 0.2436047977 0.1404493622 0.0000000000 0.0000000000 0.2171401481 0.0000000000 0.0000000000\n" " 0.0916859420 -0.0017574619 -0.3860533721 1.0000000000 0.0000000000 0.0205070521 1.0000000000 0.0000000000\n" " 0.0309750158 0.0016745741 -0.7360619920 0.0000000000 1.0000000000 -0.0045593404 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.0973000000 1.0000000000\n" "#","\n" "Na TZV2P-GTH-q9 TZV2P-GTH\n" " 2\n" " 2 0 1 7 4 3\n" " 18.1210741090 -0.1275232222 -0.0248047945 0.0000000000 0.0000000000 0.0729874345 0.0000000000 0.0000000000\n" " 7.3775066400 -0.0812376594 -0.0171596817 0.0000000000 0.0000000000 0.1996717590 0.0000000000 0.0000000000\n" " 2.8817585986 0.3277442268 0.0724090847 0.0000000000 0.0000000000 0.3527504683 0.0000000000 0.0000000000\n" " 1.0990235357 0.5946658147 0.1739886836 0.0000000000 0.0000000000 0.3936231447 0.0000000000 0.0000000000\n" " 0.4007387720 0.2436047977 0.1404493622 0.0000000000 0.0000000000 0.2171401481 0.0000000000 0.0000000000\n" " 0.0916859420 -0.0017574619 -0.3860533721 1.0000000000 0.0000000000 0.0205070521 1.0000000000 0.0000000000\n" " 0.0309750158 0.0016745741 -0.7360619920 0.0000000000 1.0000000000 -0.0045593404 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.1367000000 1.0000000000 0.0000000000\n" " 0.0636000000 0.0000000000 1.0000000000\n" "#","\n" "Na QZV2P-GTH-q9 QZV2P-GTH\n" " 2\n" " 2 0 1 8 5 4\n" " 19.7241294087 0.0964646065 0.0186968769 0.0000000000 0.0000000000 0.0000000000 -0.0533754431 0.0000000000 0.0000000000 0.0000000000\n" " 9.3287912748 0.1166761476 0.0236192089 0.0000000000 0.0000000000 0.0000000000 -0.1400719948 0.0000000000 0.0000000000 0.0000000000\n" " 4.1199901709 -0.1393562188 -0.0290484898 0.0000000000 0.0000000000 0.0000000000 -0.2641114390 0.0000000000 0.0000000000 0.0000000000\n" " 1.7720338111 -0.4584822127 -0.1108583114 0.0000000000 0.0000000000 0.0000000000 -0.3519032892 0.0000000000 0.0000000000 0.0000000000\n" " 0.7498415377 -0.4636596929 -0.1735322668 0.0000000000 0.0000000000 0.0000000000 -0.3064604543 0.0000000000 0.0000000000 0.0000000000\n" " 0.2996060606 -0.1092610807 -0.0565756124 1.0000000000 0.0000000000 0.0000000000 -0.1309377611 1.0000000000 0.0000000000 0.0000000000\n" " 0.0698044897 0.0012749633 0.5743314061 0.0000000000 1.0000000000 0.0000000000 -0.0074120120 0.0000000000 1.0000000000 0.0000000000\n" " 0.0255058383 -0.0006119521 0.5364207511 0.0000000000 0.0000000000 1.0000000000 0.0017424530 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.1367000000 1.0000000000 0.0000000000\n" " 0.0636000000 0.0000000000 1.0000000000\n" "#","\n" "Na QZV3P-GTH-q9 QZV3P-GTH\n" " 2\n" " 2 0 1 8 5 4\n" " 19.7241294087 0.0964646065 0.0186968769 0.0000000000 0.0000000000 0.0000000000 -0.0533754431 0.0000000000 0.0000000000 0.0000000000\n" " 9.3287912748 0.1166761476 0.0236192089 0.0000000000 0.0000000000 0.0000000000 -0.1400719948 0.0000000000 0.0000000000 0.0000000000\n" " 4.1199901709 -0.1393562188 -0.0290484898 0.0000000000 0.0000000000 0.0000000000 -0.2641114390 0.0000000000 0.0000000000 0.0000000000\n" " 1.7720338111 -0.4584822127 -0.1108583114 0.0000000000 0.0000000000 0.0000000000 -0.3519032892 0.0000000000 0.0000000000 0.0000000000\n" " 0.7498415377 -0.4636596929 -0.1735322668 0.0000000000 0.0000000000 0.0000000000 -0.3064604543 0.0000000000 0.0000000000 0.0000000000\n" " 0.2996060606 -0.1092610807 -0.0565756124 1.0000000000 0.0000000000 0.0000000000 -0.1309377611 1.0000000000 0.0000000000 0.0000000000\n" " 0.0698044897 0.0012749633 0.5743314061 0.0000000000 1.0000000000 0.0000000000 -0.0074120120 0.0000000000 1.0000000000 0.0000000000\n" " 0.0255058383 -0.0006119521 0.5364207511 0.0000000000 0.0000000000 1.0000000000 0.0017424530 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 0.1538000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0865000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0487000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Mg SZV-GTH-q10 SZV-GTH\n" " 1\n" " 2 0 1 6 2 1\n" " 28.4894000448 -0.0662729183 0.0165018731 0.0464558886\n" " 11.7278204570 -0.1706135571 0.0374283767 0.1664914738\n" " 4.4443941842 0.2494781478 -0.0517347280 0.3580941241\n" " 1.6070266284 0.6423214818 -0.2647624258 0.4356599896\n" " 0.5690630460 0.2933234669 -0.0948461091 0.2229558550\n" " 0.0763496459 -0.0002717019 1.0630071183 0.0085986529\n" "#","\n" "Mg DZVP-GTH-q10 DZVP-GTH\n" " 2\n" " 2 0 1 6 3 2\n" " 28.4894000448 -0.0662729183 0.0165018731 0.0000000000 0.0464558886 0.0000000000\n" " 11.7278204570 -0.1706135571 0.0374283767 0.0000000000 0.1664914738 0.0000000000\n" " 4.4443941842 0.2494781478 -0.0517347280 0.0000000000 0.3580941241 0.0000000000\n" " 1.6070266284 0.6423214818 -0.2647624258 0.0000000000 0.4356599896 0.0000000000\n" " 0.5690630460 0.2933234669 -0.0948461091 0.0000000000 0.2229558550 0.0000000000\n" " 0.0763496459 -0.0002717019 1.0630071183 1.0000000000 0.0085986529 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Mg TZVP-GTH-q10 TZVP-GTH\n" " 2\n" " 2 0 1 7 4 3\n" " 32.6102127160 -0.0379330911 -0.0088936017 0.0000000000 0.0000000000 0.0307150457 0.0000000000 0.0000000000\n" " 14.0525311690 -0.1824731301 -0.0446185212 0.0000000000 0.0000000000 0.1365611853 0.0000000000 0.0000000000\n" " 5.3750565930 0.1414840059 0.0361139004 0.0000000000 0.0000000000 0.3216977104 0.0000000000 0.0000000000\n" " 1.9603294652 0.6092794423 0.1991926589 0.0000000000 0.0000000000 0.4406864532 0.0000000000 0.0000000000\n" " 0.6985451378 0.4085543085 0.2360727936 0.0000000000 0.0000000000 0.2830209201 0.0000000000 0.0000000000\n" " 0.1599451430 0.0093835755 -0.4060439955 1.0000000000 0.0000000000 0.0314202293 1.0000000000 0.0000000000\n" " 0.0539901438 -0.0000358721 -0.7421716821 0.0000000000 1.0000000000 -0.0070197374 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Mg TZV2P-GTH-q10 TZV2P-GTH\n" " 2\n" " 2 0 1 7 4 3\n" " 32.6102127160 -0.0379330911 -0.0088936017 0.0000000000 0.0000000000 0.0307150457 0.0000000000 0.0000000000\n" " 14.0525311690 -0.1824731301 -0.0446185212 0.0000000000 0.0000000000 0.1365611853 0.0000000000 0.0000000000\n" " 5.3750565930 0.1414840059 0.0361139004 0.0000000000 0.0000000000 0.3216977104 0.0000000000 0.0000000000\n" " 1.9603294652 0.6092794423 0.1991926589 0.0000000000 0.0000000000 0.4406864532 0.0000000000 0.0000000000\n" " 0.6985451378 0.4085543085 0.2360727936 0.0000000000 0.0000000000 0.2830209201 0.0000000000 0.0000000000\n" " 0.1599451430 0.0093835755 -0.4060439955 1.0000000000 0.0000000000 0.0314202293 1.0000000000 0.0000000000\n" " 0.0539901438 -0.0000358721 -0.7421716821 0.0000000000 1.0000000000 -0.0070197374 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.2940000000 1.0000000000 0.0000000000\n" " 0.1260000000 0.0000000000 1.0000000000\n" "#","\n" "Mg QZV2P-GTH-q10 QZV2P-GTH\n" " 2\n" " 2 0 1 8 5 4\n" " 38.2989934401 0.0104376055 0.0024542703 0.0000000000 0.0000000000 0.0000000000 -0.0169307005 0.0000000000 0.0000000000 0.0000000000\n" " 18.2352594129 0.1600713964 0.0383890090 0.0000000000 0.0000000000 0.0000000000 -0.0880606004 0.0000000000 0.0000000000 0.0000000000\n" " 7.8322039250 0.0236151231 0.0063757667 0.0000000000 0.0000000000 0.0000000000 -0.2233078530 0.0000000000 0.0000000000 0.0000000000\n" " 3.2096669080 -0.3496886711 -0.0967311125 0.0000000000 0.0000000000 0.0000000000 -0.3590124156 0.0000000000 0.0000000000 0.0000000000\n" " 1.3215191150 -0.5744578292 -0.2302830710 0.0000000000 0.0000000000 0.0000000000 -0.3636484834 0.0000000000 0.0000000000 0.0000000000\n" " 0.5219034472 -0.2167187848 -0.1302378952 1.0000000000 0.0000000000 0.0000000000 -0.1772276014 1.0000000000 0.0000000000 0.0000000000\n" " 0.1263242017 -0.0012887617 0.5892536861 0.0000000000 1.0000000000 0.0000000000 -0.0121989604 0.0000000000 1.0000000000 0.0000000000\n" " 0.0449896165 -0.0003669674 0.5569471332 0.0000000000 0.0000000000 1.0000000000 0.0026934953 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.2940000000 1.0000000000 0.0000000000\n" " 0.1260000000 0.0000000000 1.0000000000\n" "#","\n" "Mg QZV3P-GTH-q10 QZV3P-GTH\n" " 2\n" " 2 0 1 8 5 4\n" " 38.2989934401 0.0104376055 0.0024542703 0.0000000000 0.0000000000 0.0000000000 -0.0169307005 0.0000000000 0.0000000000 0.0000000000\n" " 18.2352594129 0.1600713964 0.0383890090 0.0000000000 0.0000000000 0.0000000000 -0.0880606004 0.0000000000 0.0000000000 0.0000000000\n" " 7.8322039250 0.0236151231 0.0063757667 0.0000000000 0.0000000000 0.0000000000 -0.2233078530 0.0000000000 0.0000000000 0.0000000000\n" " 3.2096669080 -0.3496886711 -0.0967311125 0.0000000000 0.0000000000 0.0000000000 -0.3590124156 0.0000000000 0.0000000000 0.0000000000\n" " 1.3215191150 -0.5744578292 -0.2302830710 0.0000000000 0.0000000000 0.0000000000 -0.3636484834 0.0000000000 0.0000000000 0.0000000000\n" " 0.5219034472 -0.2167187848 -0.1302378952 1.0000000000 0.0000000000 0.0000000000 -0.1772276014 1.0000000000 0.0000000000 0.0000000000\n" " 0.1263242017 -0.0012887617 0.5892536861 0.0000000000 1.0000000000 0.0000000000 -0.0121989604 0.0000000000 1.0000000000 0.0000000000\n" " 0.0449896165 -0.0003669674 0.5569471332 0.0000000000 0.0000000000 1.0000000000 0.0026934953 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 0.3570000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1944000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1060000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Al SZV-GTH-q3 SZV-GTH\n" " 1\n" " 3 0 1 4 1 1\n" " 0.9504275958 0.2820078575 0.0257257859\n" " 0.2947366659 -0.2787607042 -0.2528156908\n" " 0.1124426785 -0.7494973519 -0.5124696636\n" " 0.0396003631 -0.1645895071 -0.3831165034\n" "#","\n" "Al DZVP-GTH-q3 DZVP-GTH\n" " 2\n" " 3 0 1 4 2 2\n" " 0.9504275958 0.2820078575 0.0000000000 0.0257257859 0.0000000000\n" " 0.2947366659 -0.2787607042 0.0000000000 -0.2528156908 0.0000000000\n" " 0.1124426785 -0.7494973519 0.0000000000 -0.5124696636 0.0000000000\n" " 0.0396003631 -0.1645895071 1.0000000000 -0.3831165034 1.0000000000\n" " 3 2 2 1 1\n" " 0.1890000000 1.0000000000\n" "#","\n" "Al TZVP-GTH-q3 TZVP-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 0.9710403542 0.2731273083 0.0000000000 0.0000000000 0.0318495312 0.0000000000 0.0000000000\n" " 0.3604758056 -0.1164353642 0.0000000000 0.0000000000 -0.1582365164 0.0000000000 0.0000000000\n" " 0.1582849401 -0.6159606293 0.0000000000 0.0000000000 -0.3791239519 0.0000000000 0.0000000000\n" " 0.0674736203 -0.4172871263 1.0000000000 0.0000000000 -0.4457455282 1.0000000000 0.0000000000\n" " 0.0267010818 -0.0326661237 0.0000000000 1.0000000000 -0.1788784308 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1890000000 1.0000000000\n" "#","\n" "Al TZV2P-GTH-q3 TZV2P-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 0.9710403542 0.2731273083 0.0000000000 0.0000000000 0.0318495312 0.0000000000 0.0000000000\n" " 0.3604758056 -0.1164353642 0.0000000000 0.0000000000 -0.1582365164 0.0000000000 0.0000000000\n" " 0.1582849401 -0.6159606293 0.0000000000 0.0000000000 -0.3791239519 0.0000000000 0.0000000000\n" " 0.0674736203 -0.4172871263 1.0000000000 0.0000000000 -0.4457455282 1.0000000000 0.0000000000\n" " 0.0267010818 -0.0326661237 0.0000000000 1.0000000000 -0.1788784308 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.3330000000 1.0000000000 0.0000000000\n" " 0.1090000000 0.0000000000 1.0000000000\n" "#","\n" "Al QZV2P-GTH-q3 QZV2P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 3.0705249839 0.0027352701 0.0000000000 0.0000000000 0.0000000000 0.0044124453 0.0000000000 0.0000000000 0.0000000000\n" " 0.9962478983 -0.2668117634 0.0000000000 0.0000000000 0.0000000000 -0.0401883011 0.0000000000 0.0000000000 0.0000000000\n" " 0.4094779636 0.0618740192 0.0000000000 0.0000000000 0.0000000000 0.1289865679 0.0000000000 0.0000000000 0.0000000000\n" " 0.1732890531 0.5987573069 1.0000000000 0.0000000000 0.0000000000 0.3723262575 1.0000000000 0.0000000000 0.0000000000\n" " 0.0723986239 0.4707960559 0.0000000000 1.0000000000 0.0000000000 0.4626980717 0.0000000000 1.0000000000 0.0000000000\n" " 0.0282432465 0.0425944411 0.0000000000 0.0000000000 1.0000000000 0.2032552207 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.3330000000 1.0000000000 0.0000000000\n" " 0.1090000000 0.0000000000 1.0000000000\n" "#","\n" "Al QZV3P-GTH-q3 QZV3P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 3.0705249839 0.0027352701 0.0000000000 0.0000000000 0.0000000000 0.0044124453 0.0000000000 0.0000000000 0.0000000000\n" " 0.9962478983 -0.2668117634 0.0000000000 0.0000000000 0.0000000000 -0.0401883011 0.0000000000 0.0000000000 0.0000000000\n" " 0.4094779636 0.0618740192 0.0000000000 0.0000000000 0.0000000000 0.1289865679 0.0000000000 0.0000000000 0.0000000000\n" " 0.1732890531 0.5987573069 1.0000000000 0.0000000000 0.0000000000 0.3723262575 1.0000000000 0.0000000000 0.0000000000\n" " 0.0723986239 0.4707960559 0.0000000000 1.0000000000 0.0000000000 0.4626980717 0.0000000000 1.0000000000 0.0000000000\n" " 0.0282432465 0.0425944411 0.0000000000 0.0000000000 1.0000000000 0.2032552207 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 0.4940000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1990000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0804000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Si SZV-GTH-q4 SZV-GTH\n" " 1\n" " 3 0 1 4 1 1\n" " 1.2032403600 0.3290356759 0.0474536439\n" " 0.4688385970 -0.2533162616 -0.2594495462\n" " 0.1679853910 -0.7870936517 -0.5440932235\n" " 0.0575616890 -0.1909870193 -0.3623984652\n" "#","\n" "Si DZVP-GTH-q4 DZVP-GTH\n" " 2\n" " 3 0 1 4 2 2\n" " 1.2032403600 0.3290356759 0.0000000000 0.0474536439 0.0000000000\n" " 0.4688385970 -0.2533162616 0.0000000000 -0.2594495462 0.0000000000\n" " 0.1679853910 -0.7870936517 0.0000000000 -0.5440932235 0.0000000000\n" " 0.0575616890 -0.1909870193 1.0000000000 -0.3623984652 1.0000000000\n" " 3 2 2 1 1\n" " 0.2750000000 1.0000000000\n" "#","\n" "Si TZVP-GTH-q4 TZVP-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 1.2331731434 0.3150424674 0.0000000000 0.0000000000 0.0667574395 0.0000000000 0.0000000000\n" " 0.6579957180 -0.0732928041 0.0000000000 0.0000000000 -0.1473516106 0.0000000000 0.0000000000\n" " 0.2547041526 -0.5862322199 0.0000000000 0.0000000000 -0.4034178654 0.0000000000 0.0000000000\n" " 0.1060089904 -0.5051712664 1.0000000000 0.0000000000 -0.4457008802 1.0000000000 0.0000000000\n" " 0.0418790646 -0.0507253610 0.0000000000 1.0000000000 -0.1941498294 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.2750000000 1.0000000000\n" "#","\n" "Si TZV2P-GTH-q4 TZV2P-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 1.2331731434 0.3150424674 0.0000000000 0.0000000000 0.0667574395 0.0000000000 0.0000000000\n" " 0.6579957180 -0.0732928041 0.0000000000 0.0000000000 -0.1473516106 0.0000000000 0.0000000000\n" " 0.2547041526 -0.5862322199 0.0000000000 0.0000000000 -0.4034178654 0.0000000000 0.0000000000\n" " 0.1060089904 -0.5051712664 1.0000000000 0.0000000000 -0.4457008802 1.0000000000 0.0000000000\n" " 0.0418790646 -0.0507253610 0.0000000000 1.0000000000 -0.1941498294 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.4810000000 1.0000000000 0.0000000000\n" " 0.1590000000 0.0000000000 1.0000000000\n" "#","\n" "Si QZV2P-GTH-q4 QZV2P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 3.0914606934 0.0124908161 0.0000000000 0.0000000000 0.0000000000 -0.0027532026 0.0000000000 0.0000000000 0.0000000000\n" " 1.3362310368 -0.2927569134 0.0000000000 0.0000000000 0.0000000000 -0.0422856821 0.0000000000 0.0000000000 0.0000000000\n" " 0.5649726509 0.0456455175 0.0000000000 0.0000000000 0.0000000000 0.1468609670 0.0000000000 0.0000000000 0.0000000000\n" " 0.2466543506 0.6102734005 1.0000000000 0.0000000000 0.0000000000 0.3930678123 1.0000000000 0.0000000000 0.0000000000\n" " 0.1028862952 0.4799377663 0.0000000000 1.0000000000 0.0000000000 0.4491746304 0.0000000000 1.0000000000 0.0000000000\n" " 0.0403147900 0.0462217432 0.0000000000 0.0000000000 1.0000000000 0.1794865096 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.4810000000 1.0000000000 0.0000000000\n" " 0.1590000000 0.0000000000 1.0000000000\n" "#","\n" "Si QZV3P-GTH-q4 QZV3P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 3.0914606934 0.0124908161 0.0000000000 0.0000000000 0.0000000000 -0.0027532026 0.0000000000 0.0000000000 0.0000000000\n" " 1.3362310368 -0.2927569134 0.0000000000 0.0000000000 0.0000000000 -0.0422856821 0.0000000000 0.0000000000 0.0000000000\n" " 0.5649726509 0.0456455175 0.0000000000 0.0000000000 0.0000000000 0.1468609670 0.0000000000 0.0000000000 0.0000000000\n" " 0.2466543506 0.6102734005 1.0000000000 0.0000000000 0.0000000000 0.3930678123 1.0000000000 0.0000000000 0.0000000000\n" " 0.1028862952 0.4799377663 0.0000000000 1.0000000000 0.0000000000 0.4491746304 0.0000000000 1.0000000000 0.0000000000\n" " 0.0403147900 0.0462217432 0.0000000000 0.0000000000 1.0000000000 0.1794865096 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 0.7600000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.3020000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1200000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Si aug-DZVP-GTH-q4 aug-DZVP-GTH\n" " 4\n" " 3 0 1 4 2 2\n" " 1.2032403600 0.3290356759 0.0000000000 0.0474536439 0.0000000000\n" " 0.4688385970 -0.2533162616 0.0000000000 -0.2594495462 0.0000000000\n" " 0.1679853910 -0.7870936517 0.0000000000 -0.5440932235 0.0000000000\n" " 0.0575616890 -0.1909870193 1.0000000000 -0.3623984652 1.0000000000\n" " 3 2 2 1 1\n" " 0.2750000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.03320000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02500000 1.0000000000\n" "#","\n" "Si aug-TZVP-GTH-q4 aug-TZVP-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 1.2331731434 0.3150424674 0.0000000000 0.0000000000 0.0667574395 0.0000000000 0.0000000000\n" " 0.6579957180 -0.0732928041 0.0000000000 0.0000000000 -0.1473516106 0.0000000000 0.0000000000\n" " 0.2547041526 -0.5862322199 0.0000000000 0.0000000000 -0.4034178654 0.0000000000 0.0000000000\n" " 0.1060089904 -0.5051712664 1.0000000000 0.0000000000 -0.4457008802 1.0000000000 0.0000000000\n" " 0.0418790646 -0.0507253610 0.0000000000 1.0000000000 -0.1941498294 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.2750000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.03300000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02370000 1.0000000000\n" "#","\n" "Si aug-TZV2P-GTH-q4 aug-TZV2P-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 1.2331731434 0.3150424674 0.0000000000 0.0000000000 0.0667574395 0.0000000000 0.0000000000\n" " 0.6579957180 -0.0732928041 0.0000000000 0.0000000000 -0.1473516106 0.0000000000 0.0000000000\n" " 0.2547041526 -0.5862322199 0.0000000000 0.0000000000 -0.4034178654 0.0000000000 0.0000000000\n" " 0.1060089904 -0.5051712664 1.0000000000 0.0000000000 -0.4457008802 1.0000000000 0.0000000000\n" " 0.0418790646 -0.0507253610 0.0000000000 1.0000000000 -0.1941498294 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.4810000000 1.0000000000 0.0000000000\n" " 0.1590000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.03300000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02370000 1.0000000000\n" "#","\n" "Si aug-QZV2P-GTH-q4 aug-QZV2P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 3.0914606934 0.0124908161 0.0000000000 0.0000000000 0.0000000000 -0.0027532026 0.0000000000 0.0000000000 0.0000000000\n" " 1.3362310368 -0.2927569134 0.0000000000 0.0000000000 0.0000000000 -0.0422856821 0.0000000000 0.0000000000 0.0000000000\n" " 0.5649726509 0.0456455175 0.0000000000 0.0000000000 0.0000000000 0.1468609670 0.0000000000 0.0000000000 0.0000000000\n" " 0.2466543506 0.6102734005 1.0000000000 0.0000000000 0.0000000000 0.3930678123 1.0000000000 0.0000000000 0.0000000000\n" " 0.1028862952 0.4799377663 0.0000000000 1.0000000000 0.0000000000 0.4491746304 0.0000000000 1.0000000000 0.0000000000\n" " 0.0403147900 0.0462217432 0.0000000000 0.0000000000 1.0000000000 0.1794865096 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.4810000000 1.0000000000 0.0000000000\n" " 0.1590000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.02750000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02000000 1.0000000000\n" "#","\n" "Si aug-QZV3P-GTH-q4 aug-QZV3P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 3.0914606934 0.0124908161 0.0000000000 0.0000000000 0.0000000000 -0.0027532026 0.0000000000 0.0000000000 0.0000000000\n" " 1.3362310368 -0.2927569134 0.0000000000 0.0000000000 0.0000000000 -0.0422856821 0.0000000000 0.0000000000 0.0000000000\n" " 0.5649726509 0.0456455175 0.0000000000 0.0000000000 0.0000000000 0.1468609670 0.0000000000 0.0000000000 0.0000000000\n" " 0.2466543506 0.6102734005 1.0000000000 0.0000000000 0.0000000000 0.3930678123 1.0000000000 0.0000000000 0.0000000000\n" " 0.1028862952 0.4799377663 0.0000000000 1.0000000000 0.0000000000 0.4491746304 0.0000000000 1.0000000000 0.0000000000\n" " 0.0403147900 0.0462217432 0.0000000000 0.0000000000 1.0000000000 0.1794865096 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 0.7600000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.3020000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1200000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.02750000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02000000 1.0000000000\n" "#","\n" "P SZV-GTH-q5 SZV-GTH\n" " 1\n" " 3 0 1 4 1 1\n" " 1.4960907993 0.3653124842 0.0816205767\n" " 0.7169067467 -0.2125748699 -0.2627397053\n" " 0.2411464781 -0.8136091436 -0.5627246555\n" " 0.0803414677 -0.2362413556 -0.3691448735\n" "#","\n" "P DZVP-GTH-q5 DZVP-GTH\n" " 2\n" " 3 0 1 4 2 2\n" " 1.4960907993 0.3653124842 0.0000000000 0.0816205767 0.0000000000\n" " 0.7169067467 -0.2125748699 0.0000000000 -0.2627397053 0.0000000000\n" " 0.2411464781 -0.8136091436 0.0000000000 -0.5627246555 0.0000000000\n" " 0.0803414677 -0.2362413556 1.0000000000 -0.3691448735 1.0000000000\n" " 3 2 2 1 1\n" " 0.3730000000 1.0000000000\n" "#","\n" "P TZVP-GTH-q5 TZVP-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 2.1996341190 -0.0704921557 0.0000000000 0.0000000000 0.0621639873 0.0000000000 0.0000000000\n" " 1.6369289280 0.3969825114 0.0000000000 0.0000000000 -0.0400911635 0.0000000000 0.0000000000\n" " 0.4970575820 -0.3512429748 0.0000000000 0.0000000000 -0.3338049853 0.0000000000 0.0000000000\n" " 0.1944032900 -0.7297176188 1.0000000000 0.0000000000 -0.5118382938 1.0000000000 0.0000000000\n" " 0.0699106580 -0.1421063788 0.0000000000 1.0000000000 -0.2909693679 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.3730000000 1.0000000000\n" "#","\n" "P TZV2P-GTH-q5 TZV2P-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 2.1996341190 -0.0704921557 0.0000000000 0.0000000000 0.0621639873 0.0000000000 0.0000000000\n" " 1.6369289280 0.3969825114 0.0000000000 0.0000000000 -0.0400911635 0.0000000000 0.0000000000\n" " 0.4970575820 -0.3512429748 0.0000000000 0.0000000000 -0.3338049853 0.0000000000 0.0000000000\n" " 0.1944032900 -0.7297176188 1.0000000000 0.0000000000 -0.5118382938 1.0000000000 0.0000000000\n" " 0.0699106580 -0.1421063788 0.0000000000 1.0000000000 -0.2909693679 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.6520000000 1.0000000000 0.0000000000\n" " 0.2160000000 0.0000000000 1.0000000000\n" "#","\n" "P QZV2P-GTH-q5 QZV2P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 3.7552135262 0.0219221916 0.0000000000 0.0000000000 0.0000000000 -0.0089770006 0.0000000000 0.0000000000 0.0000000000\n" " 1.7140316717 -0.3135634867 0.0000000000 0.0000000000 0.0000000000 -0.0448447247 0.0000000000 0.0000000000 0.0000000000\n" " 0.7438335270 0.0341312768 0.0000000000 0.0000000000 0.0000000000 0.1612574940 0.0000000000 0.0000000000 0.0000000000\n" " 0.3280082762 0.6173246158 1.0000000000 0.0000000000 0.0000000000 0.4083320223 1.0000000000 0.0000000000 0.0000000000\n" " 0.1366188473 0.4868790477 0.0000000000 1.0000000000 0.0000000000 0.4366765007 0.0000000000 1.0000000000 0.0000000000\n" " 0.0534696687 0.0500106401 0.0000000000 0.0000000000 1.0000000000 0.1655268470 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.6520000000 1.0000000000 0.0000000000\n" " 0.2160000000 0.0000000000 1.0000000000\n" "#","\n" "P QZV3P-GTH-q5 QZV3P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 3.7552135262 0.0219221916 0.0000000000 0.0000000000 0.0000000000 -0.0089770006 0.0000000000 0.0000000000 0.0000000000\n" " 1.7140316717 -0.3135634867 0.0000000000 0.0000000000 0.0000000000 -0.0448447247 0.0000000000 0.0000000000 0.0000000000\n" " 0.7438335270 0.0341312768 0.0000000000 0.0000000000 0.0000000000 0.1612574940 0.0000000000 0.0000000000 0.0000000000\n" " 0.3280082762 0.6173246158 1.0000000000 0.0000000000 0.0000000000 0.4083320223 1.0000000000 0.0000000000 0.0000000000\n" " 0.1366188473 0.4868790477 0.0000000000 1.0000000000 0.0000000000 0.4366765007 0.0000000000 1.0000000000 0.0000000000\n" " 0.0534696687 0.0500106401 0.0000000000 0.0000000000 1.0000000000 0.1655268470 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.0360000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.4130000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1650000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "P aug-DZVP-GTH-q5 aug-DZVP-GTH\n" " 4\n" " 3 0 1 4 2 2\n" " 1.4960907993 0.3653124842 0.0000000000 0.0816205767 0.0000000000\n" " 0.7169067467 -0.2125748699 0.0000000000 -0.2627397053 0.0000000000\n" " 0.2411464781 -0.8136091436 0.0000000000 -0.5627246555 0.0000000000\n" " 0.0803414677 -0.2362413556 1.0000000000 -0.3691448735 1.0000000000\n" " 3 2 2 1 1\n" " 0.3730000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04170000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03430000 1.0000000000\n" "#","\n" "P aug-TZVP-GTH-q5 aug-TZVP-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 2.1996341190 -0.0704921557 0.0000000000 0.0000000000 0.0621639873 0.0000000000 0.0000000000\n" " 1.6369289280 0.3969825114 0.0000000000 0.0000000000 -0.0400911635 0.0000000000 0.0000000000\n" " 0.4970575820 -0.3512429748 0.0000000000 0.0000000000 -0.3338049853 0.0000000000 0.0000000000\n" " 0.1944032900 -0.7297176188 1.0000000000 0.0000000000 -0.5118382938 1.0000000000 0.0000000000\n" " 0.0699106580 -0.1421063788 0.0000000000 1.0000000000 -0.2909693679 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.3730000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04090000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03070000 1.0000000000\n" "#","\n" "P aug-TZV2P-GTH-q5 aug-TZV2P-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 2.1996341190 -0.0704921557 0.0000000000 0.0000000000 0.0621639873 0.0000000000 0.0000000000\n" " 1.6369289280 0.3969825114 0.0000000000 0.0000000000 -0.0400911635 0.0000000000 0.0000000000\n" " 0.4970575820 -0.3512429748 0.0000000000 0.0000000000 -0.3338049853 0.0000000000 0.0000000000\n" " 0.1944032900 -0.7297176188 1.0000000000 0.0000000000 -0.5118382938 1.0000000000 0.0000000000\n" " 0.0699106580 -0.1421063788 0.0000000000 1.0000000000 -0.2909693679 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.6520000000 1.0000000000 0.0000000000\n" " 0.2160000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04090000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03070000 1.0000000000\n" "#","\n" "P aug-QZV2P-GTH-q5 aug-QZV2P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 3.7552135262 0.0219221916 0.0000000000 0.0000000000 0.0000000000 -0.0089770006 0.0000000000 0.0000000000 0.0000000000\n" " 1.7140316717 -0.3135634867 0.0000000000 0.0000000000 0.0000000000 -0.0448447247 0.0000000000 0.0000000000 0.0000000000\n" " 0.7438335270 0.0341312768 0.0000000000 0.0000000000 0.0000000000 0.1612574940 0.0000000000 0.0000000000 0.0000000000\n" " 0.3280082762 0.6173246158 1.0000000000 0.0000000000 0.0000000000 0.4083320223 1.0000000000 0.0000000000 0.0000000000\n" " 0.1366188473 0.4868790477 0.0000000000 1.0000000000 0.0000000000 0.4366765007 0.0000000000 1.0000000000 0.0000000000\n" " 0.0534696687 0.0500106401 0.0000000000 0.0000000000 1.0000000000 0.1655268470 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.6520000000 1.0000000000 0.0000000000\n" " 0.2160000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.03540000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02720000 1.0000000000\n" "#","\n" "P aug-QZV3P-GTH-q5 aug-QZV3P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 3.7552135262 0.0219221916 0.0000000000 0.0000000000 0.0000000000 -0.0089770006 0.0000000000 0.0000000000 0.0000000000\n" " 1.7140316717 -0.3135634867 0.0000000000 0.0000000000 0.0000000000 -0.0448447247 0.0000000000 0.0000000000 0.0000000000\n" " 0.7438335270 0.0341312768 0.0000000000 0.0000000000 0.0000000000 0.1612574940 0.0000000000 0.0000000000 0.0000000000\n" " 0.3280082762 0.6173246158 1.0000000000 0.0000000000 0.0000000000 0.4083320223 1.0000000000 0.0000000000 0.0000000000\n" " 0.1366188473 0.4868790477 0.0000000000 1.0000000000 0.0000000000 0.4366765007 0.0000000000 1.0000000000 0.0000000000\n" " 0.0534696687 0.0500106401 0.0000000000 0.0000000000 1.0000000000 0.1655268470 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.0360000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.4130000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1650000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.03540000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02720000 1.0000000000\n" "#","\n" "S SZV-GTH-q6 SZV-GTH\n" " 1\n" " 3 0 1 4 1 1\n" " 1.8379629578 0.3832142891 0.1221358296\n" " 1.0357730084 -0.1682257315 -0.2752002461\n" " 0.3297969875 -0.8258488166 -0.5729054592\n" " 0.1073535471 -0.2832758052 -0.3825468137\n" "#","\n" "S DZVP-GTH-q6 DZVP-GTH\n" " 2\n" " 3 0 1 4 2 2\n" " 1.8379629578 0.3832142891 0.0000000000 0.1221358296 0.0000000000\n" " 1.0357730084 -0.1682257315 0.0000000000 -0.2752002461 0.0000000000\n" " 0.3297969875 -0.8258488166 0.0000000000 -0.5729054592 0.0000000000\n" " 0.1073535471 -0.2832758052 1.0000000000 -0.3825468137 1.0000000000\n" " 3 2 2 1 1\n" " 0.4790000000 1.0000000000\n" "#","\n" "S TZVP-GTH-q6 TZVP-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 2.9775941238 -0.0684133054 0.0000000000 0.0000000000 0.0522484808 0.0000000000 0.0000000000\n" " 2.0190866819 0.4095039721 0.0000000000 0.0000000000 -0.0232128642 0.0000000000 0.0000000000\n" " 0.6439412840 -0.3403336830 0.0000000000 0.0000000000 -0.3459753011 0.0000000000 0.0000000000\n" " 0.2501987605 -0.7425154227 1.0000000000 0.0000000000 -0.5141620418 1.0000000000 0.0000000000\n" " 0.0891650206 -0.1520225390 0.0000000000 1.0000000000 -0.2803769713 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.4790000000 1.0000000000\n" "#","\n" "S TZV2P-GTH-q6 TZV2P-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 2.9775941238 -0.0684133054 0.0000000000 0.0000000000 0.0522484808 0.0000000000 0.0000000000\n" " 2.0190866819 0.4095039721 0.0000000000 0.0000000000 -0.0232128642 0.0000000000 0.0000000000\n" " 0.6439412840 -0.3403336830 0.0000000000 0.0000000000 -0.3459753011 0.0000000000 0.0000000000\n" " 0.2501987605 -0.7425154227 1.0000000000 0.0000000000 -0.5141620418 1.0000000000 0.0000000000\n" " 0.0891650206 -0.1520225390 0.0000000000 1.0000000000 -0.2803769713 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.8190000000 1.0000000000 0.0000000000\n" " 0.2690000000 0.0000000000 1.0000000000\n" "#","\n" "S QZV2P-GTH-q6 QZV2P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 4.2573596528 0.0340198790 0.0000000000 0.0000000000 0.0000000000 -0.0139384068 0.0000000000 0.0000000000 0.0000000000\n" " 2.1309107097 -0.3349229077 0.0000000000 0.0000000000 0.0000000000 -0.0449848970 0.0000000000 0.0000000000 0.0000000000\n" " 0.9293415064 0.0316794871 0.0000000000 0.0000000000 0.0000000000 0.1762303153 0.0000000000 0.0000000000 0.0000000000\n" " 0.4136351121 0.6234596988 1.0000000000 0.0000000000 0.0000000000 0.4188613693 1.0000000000 0.0000000000 0.0000000000\n" " 0.1723749938 0.4869763921 0.0000000000 1.0000000000 0.0000000000 0.4242144008 0.0000000000 1.0000000000 0.0000000000\n" " 0.0673747361 0.0524674807 0.0000000000 0.0000000000 1.0000000000 0.1544985250 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.8190000000 1.0000000000 0.0000000000\n" " 0.2690000000 0.0000000000 1.0000000000\n" "#","\n" "S QZV3P-GTH-q6 QZV3P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 4.2573596528 0.0340198790 0.0000000000 0.0000000000 0.0000000000 -0.0139384068 0.0000000000 0.0000000000 0.0000000000\n" " 2.1309107097 -0.3349229077 0.0000000000 0.0000000000 0.0000000000 -0.0449848970 0.0000000000 0.0000000000 0.0000000000\n" " 0.9293415064 0.0316794871 0.0000000000 0.0000000000 0.0000000000 0.1762303153 0.0000000000 0.0000000000 0.0000000000\n" " 0.4136351121 0.6234596988 1.0000000000 0.0000000000 0.0000000000 0.4188613693 1.0000000000 0.0000000000 0.0000000000\n" " 0.1723749938 0.4869763921 0.0000000000 1.0000000000 0.0000000000 0.4242144008 0.0000000000 1.0000000000 0.0000000000\n" " 0.0673747361 0.0524674807 0.0000000000 0.0000000000 1.0000000000 0.1544985250 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.2500000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.5040000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2030000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "S aug-DZVP-GTH-q6 aug-DZVP-GTH\n" " 4\n" " 3 0 1 4 2 2\n" " 1.8379629578 0.3832142891 0.0000000000 0.1221358296 0.0000000000\n" " 1.0357730084 -0.1682257315 0.0000000000 -0.2752002461 0.0000000000\n" " 0.3297969875 -0.8258488166 0.0000000000 -0.5729054592 0.0000000000\n" " 0.1073535471 -0.2832758052 1.0000000000 -0.3825468137 1.0000000000\n" " 3 2 2 1 1\n" " 0.4790000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.05070000 1.0000000000\n" " 3 1 1 1 1 \n" " 0.03990000 1.0000000000\n" "#","\n" "S aug-TZVP-GTH-q6 aug-TZVP-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 2.9775941238 -0.0684133054 0.0000000000 0.0000000000 0.0522484808 0.0000000000 0.0000000000\n" " 2.0190866819 0.4095039721 0.0000000000 0.0000000000 -0.0232128642 0.0000000000 0.0000000000\n" " 0.6439412840 -0.3403336830 0.0000000000 0.0000000000 -0.3459753011 0.0000000000 0.0000000000\n" " 0.2501987605 -0.7425154227 1.0000000000 0.0000000000 -0.5141620418 1.0000000000 0.0000000000\n" " 0.0891650206 -0.1520225390 0.0000000000 1.0000000000 -0.2803769713 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.4790000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04970000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03510000 1.0000000000\n" "#","\n" "S aug-TZV2P-GTH-q6 aug-TZV2P-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 2.9775941238 -0.0684133054 0.0000000000 0.0000000000 0.0522484808 0.0000000000 0.0000000000\n" " 2.0190866819 0.4095039721 0.0000000000 0.0000000000 -0.0232128642 0.0000000000 0.0000000000\n" " 0.6439412840 -0.3403336830 0.0000000000 0.0000000000 -0.3459753011 0.0000000000 0.0000000000\n" " 0.2501987605 -0.7425154227 1.0000000000 0.0000000000 -0.5141620418 1.0000000000 0.0000000000\n" " 0.0891650206 -0.1520225390 0.0000000000 1.0000000000 -0.2803769713 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.8190000000 1.0000000000 0.0000000000\n" " 0.2690000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04970000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03510000 1.0000000000\n" "#","\n" "S aug-QZV2P-GTH-q6 aug-QZV2P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 4.2573596528 0.0340198790 0.0000000000 0.0000000000 0.0000000000 -0.0139384068 0.0000000000 0.0000000000 0.0000000000\n" " 2.1309107097 -0.3349229077 0.0000000000 0.0000000000 0.0000000000 -0.0449848970 0.0000000000 0.0000000000 0.0000000000\n" " 0.9293415064 0.0316794871 0.0000000000 0.0000000000 0.0000000000 0.1762303153 0.0000000000 0.0000000000 0.0000000000\n" " 0.4136351121 0.6234596988 1.0000000000 0.0000000000 0.0000000000 0.4188613693 1.0000000000 0.0000000000 0.0000000000\n" " 0.1723749938 0.4869763921 0.0000000000 1.0000000000 0.0000000000 0.4242144008 0.0000000000 1.0000000000 0.0000000000\n" " 0.0673747361 0.0524674807 0.0000000000 0.0000000000 1.0000000000 0.1544985250 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.8190000000 1.0000000000 0.0000000000\n" " 0.2690000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04280000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03170000 1.0000000000\n" "#","\n" "S aug-QZV3P-GTH-q6 aug-QZV3P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 4.2573596528 0.0340198790 0.0000000000 0.0000000000 0.0000000000 -0.0139384068 0.0000000000 0.0000000000 0.0000000000\n" " 2.1309107097 -0.3349229077 0.0000000000 0.0000000000 0.0000000000 -0.0449848970 0.0000000000 0.0000000000 0.0000000000\n" " 0.9293415064 0.0316794871 0.0000000000 0.0000000000 0.0000000000 0.1762303153 0.0000000000 0.0000000000 0.0000000000\n" " 0.4136351121 0.6234596988 1.0000000000 0.0000000000 0.0000000000 0.4188613693 1.0000000000 0.0000000000 0.0000000000\n" " 0.1723749938 0.4869763921 0.0000000000 1.0000000000 0.0000000000 0.4242144008 0.0000000000 1.0000000000 0.0000000000\n" " 0.0673747361 0.0524674807 0.0000000000 0.0000000000 1.0000000000 0.1544985250 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.2500000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.5040000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2030000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04280000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03170000 1.0000000000\n" "#","\n" "Cl SZV-GTH-q7 SZV-GTH\n" " 1\n" " 3 0 1 4 1 1\n" " 2.2321759828 0.3787844947 0.1555385229\n" " 1.3787736290 -0.1239714599 -0.2931741896\n" " 0.4264904045 -0.8298226129 -0.5781097351\n" " 0.1366670312 -0.3175023225 -0.3901110870\n" "#","\n" "Cl DZVP-GTH-q7 DZVP-GTH\n" " 2\n" " 3 0 1 4 2 2\n" " 2.2321759828 0.3787844947 0.0000000000 0.1555385229 0.0000000000\n" " 1.3787736290 -0.1239714599 0.0000000000 -0.2931741896 0.0000000000\n" " 0.4264904045 -0.8298226129 0.0000000000 -0.5781097351 0.0000000000\n" " 0.1366670312 -0.3175023225 1.0000000000 -0.3901110870 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "Cl TZVP-GTH-q7 TZVP-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 3.4404677360 -0.0962885076 0.0000000000 0.0000000000 0.0674841325 0.0000000000 0.0000000000\n" " 2.4424740830 0.4481503162 0.0000000000 0.0000000000 -0.0388856129 0.0000000000 0.0000000000\n" " 0.7848604567 -0.3507929510 0.0000000000 0.0000000000 -0.3633699842 0.0000000000 0.0000000000\n" " 0.3048755969 -0.7403677289 1.0000000000 0.0000000000 -0.5101595423 1.0000000000 0.0000000000\n" " 0.1084717366 -0.1528159301 0.0000000000 1.0000000000 -0.2654035575 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "Cl TZV2P-GTH-q7 TZV2P-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 3.4404677360 -0.0962885076 0.0000000000 0.0000000000 0.0674841325 0.0000000000 0.0000000000\n" " 2.4424740830 0.4481503162 0.0000000000 0.0000000000 -0.0388856129 0.0000000000 0.0000000000\n" " 0.7848604567 -0.3507929510 0.0000000000 0.0000000000 -0.3633699842 0.0000000000 0.0000000000\n" " 0.3048755969 -0.7403677289 1.0000000000 0.0000000000 -0.5101595423 1.0000000000 0.0000000000\n" " 0.1084717366 -0.1528159301 0.0000000000 1.0000000000 -0.2654035575 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0460000000 1.0000000000 0.0000000000\n" " 0.3440000000 0.0000000000 1.0000000000\n" "#","\n" "Cl QZV2P-GTH-q7 QZV2P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 4.7390692540 0.0460145547 0.0000000000 0.0000000000 0.0000000000 -0.0184287984 0.0000000000 0.0000000000 0.0000000000\n" " 2.5664506160 -0.3573237652 0.0000000000 0.0000000000 0.0000000000 -0.0428888823 0.0000000000 0.0000000000 0.0000000000\n" " 1.1168239570 0.0404814650 0.0000000000 0.0000000000 0.0000000000 0.1933392026 0.0000000000 0.0000000000 0.0000000000\n" " 0.5007318360 0.6290842339 1.0000000000 0.0000000000 0.0000000000 0.4262968544 1.0000000000 0.0000000000 0.0000000000\n" " 0.2092217935 0.4804996350 0.0000000000 1.0000000000 0.0000000000 0.4107393400 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818080455 0.0532567628 0.0000000000 0.0000000000 1.0000000000 0.1444014999 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0460000000 1.0000000000 0.0000000000\n" " 0.3440000000 0.0000000000 1.0000000000\n" "#","\n" "Cl QZV3P-GTH-q7 QZV3P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 4.7390692540 0.0460145547 0.0000000000 0.0000000000 0.0000000000 -0.0184287984 0.0000000000 0.0000000000 0.0000000000\n" " 2.5664506160 -0.3573237652 0.0000000000 0.0000000000 0.0000000000 -0.0428888823 0.0000000000 0.0000000000 0.0000000000\n" " 1.1168239570 0.0404814650 0.0000000000 0.0000000000 0.0000000000 0.1933392026 0.0000000000 0.0000000000 0.0000000000\n" " 0.5007318360 0.6290842339 1.0000000000 0.0000000000 0.0000000000 0.4262968544 1.0000000000 0.0000000000 0.0000000000\n" " 0.2092217935 0.4804996350 0.0000000000 1.0000000000 0.0000000000 0.4107393400 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818080455 0.0532567628 0.0000000000 0.0000000000 1.0000000000 0.1444014999 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.5510000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.6280000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2540000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Cl aug-DZVP-GTH-q7 aug-DZVP-GTH\n" " 4\n" " 3 0 1 4 2 2\n" " 2.2321759828 0.3787844947 0.0000000000 0.1555385229 0.0000000000\n" " 1.3787736290 -0.1239714599 0.0000000000 -0.2931741896 0.0000000000\n" " 0.4264904045 -0.8298226129 0.0000000000 -0.5781097351 0.0000000000\n" " 0.1366670312 -0.3175023225 1.0000000000 -0.3901110870 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.06080000 1.0000000000\n" " 3 1 1 1 1\n" " 0.04660000 1.0000000000\n" "#","\n" "Cl aug-TZVP-GTH-q7 aug-TZVP-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 3.4404677360 -0.0962885076 0.0000000000 0.0000000000 0.0674841325 0.0000000000 0.0000000000\n" " 2.4424740830 0.4481503162 0.0000000000 0.0000000000 -0.0388856129 0.0000000000 0.0000000000\n" " 0.7848604567 -0.3507929510 0.0000000000 0.0000000000 -0.3633699842 0.0000000000 0.0000000000\n" " 0.3048755969 -0.7403677289 1.0000000000 0.0000000000 -0.5101595423 1.0000000000 0.0000000000\n" " 0.1084717366 -0.1528159301 0.0000000000 1.0000000000 -0.2654035575 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.05910000 1.0000000000\n" " 3 1 1 1 1\n" " 0.04190000 1.0000000000\n" "#","\n" "Cl aug-TZV2P-GTH-q7 aug-TZV2P-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 3.4404677360 -0.0962885076 0.0000000000 0.0000000000 0.0674841325 0.0000000000 0.0000000000\n" " 2.4424740830 0.4481503162 0.0000000000 0.0000000000 -0.0388856129 0.0000000000 0.0000000000\n" " 0.7848604567 -0.3507929510 0.0000000000 0.0000000000 -0.3633699842 0.0000000000 0.0000000000\n" " 0.3048755969 -0.7403677289 1.0000000000 0.0000000000 -0.5101595423 1.0000000000 0.0000000000\n" " 0.1084717366 -0.1528159301 0.0000000000 1.0000000000 -0.2654035575 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0460000000 1.0000000000 0.0000000000\n" " 0.3440000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.05910000 1.0000000000\n" " 3 1 1 1 1\n" " 0.04190000 1.0000000000\n" "#","\n" "Cl aug-QZV2P-GTH-q7 aug-QZV2P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 4.7390692540 0.0460145547 0.0000000000 0.0000000000 0.0000000000 -0.0184287984 0.0000000000 0.0000000000 0.0000000000\n" " 2.5664506160 -0.3573237652 0.0000000000 0.0000000000 0.0000000000 -0.0428888823 0.0000000000 0.0000000000 0.0000000000\n" " 1.1168239570 0.0404814650 0.0000000000 0.0000000000 0.0000000000 0.1933392026 0.0000000000 0.0000000000 0.0000000000\n" " 0.5007318360 0.6290842339 1.0000000000 0.0000000000 0.0000000000 0.4262968544 1.0000000000 0.0000000000 0.0000000000\n" " 0.2092217935 0.4804996350 0.0000000000 1.0000000000 0.0000000000 0.4107393400 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818080455 0.0532567628 0.0000000000 0.0000000000 1.0000000000 0.1444014999 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0460000000 1.0000000000 0.0000000000\n" " 0.3440000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.05190000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03760000 1.0000000000\n" "#","\n" "Cl aug-QZV3P-GTH-q7 aug-QZV3P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 4.7390692540 0.0460145547 0.0000000000 0.0000000000 0.0000000000 -0.0184287984 0.0000000000 0.0000000000 0.0000000000\n" " 2.5664506160 -0.3573237652 0.0000000000 0.0000000000 0.0000000000 -0.0428888823 0.0000000000 0.0000000000 0.0000000000\n" " 1.1168239570 0.0404814650 0.0000000000 0.0000000000 0.0000000000 0.1933392026 0.0000000000 0.0000000000 0.0000000000\n" " 0.5007318360 0.6290842339 1.0000000000 0.0000000000 0.0000000000 0.4262968544 1.0000000000 0.0000000000 0.0000000000\n" " 0.2092217935 0.4804996350 0.0000000000 1.0000000000 0.0000000000 0.4107393400 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818080455 0.0532567628 0.0000000000 0.0000000000 1.0000000000 0.1444014999 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.5510000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.6280000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2540000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.05190000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03760000 1.0000000000\n" "#","\n" "Ar SZV-GTH-q8 SZV-GTH\n" " 1\n" " 3 0 1 4 1 1\n" " 2.6436341408 0.3737594656 0.1735190188\n" " 1.6948954231 -0.0996534757 -0.3100915552\n" " 0.5231109619 -0.8315200024 -0.5807564917\n" " 0.1663306660 -0.3339930084 -0.3879330451\n" "#","\n" "Ar DZVP-GTH-q8 DZVP-GTH\n" " 2\n" " 3 0 1 4 2 2\n" " 2.6436341408 0.3737594656 0.0000000000 0.1735190188 0.0000000000\n" " 1.6948954231 -0.0996534757 0.0000000000 -0.3100915552 0.0000000000\n" " 0.5231109619 -0.8315200024 0.0000000000 -0.5807564917 0.0000000000\n" " 0.1663306660 -0.3339930084 1.0000000000 -0.3879330451 1.0000000000\n" " 3 2 2 1 1\n" " 0.7380000000 1.0000000000\n" "#","\n" "Ar TZVP-GTH-q8 TZVP-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 3.7933849461 -0.1618280953 0.0000000000 0.0000000000 0.0960404756 0.0000000000 0.0000000000\n" " 2.9269187333 0.5221781637 0.0000000000 0.0000000000 -0.0704844503 0.0000000000 0.0000000000\n" " 0.9316537640 -0.3632163241 0.0000000000 0.0000000000 -0.3787707182 0.0000000000 0.0000000000\n" " 0.3621005146 -0.7358329756 1.0000000000 0.0000000000 -0.5047539917 1.0000000000 0.0000000000\n" " 0.1287409102 -0.1523090856 0.0000000000 1.0000000000 -0.2525011145 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.7380000000 1.0000000000\n" "#","\n" "Ar TZV2P-GTH-q8 TZV2P-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 3.7933849461 -0.1618280953 0.0000000000 0.0000000000 0.0960404756 0.0000000000 0.0000000000\n" " 2.9269187333 0.5221781637 0.0000000000 0.0000000000 -0.0704844503 0.0000000000 0.0000000000\n" " 0.9316537640 -0.3632163241 0.0000000000 0.0000000000 -0.3787707182 0.0000000000 0.0000000000\n" " 0.3621005146 -0.7358329756 1.0000000000 0.0000000000 -0.5047539917 1.0000000000 0.0000000000\n" " 0.1287409102 -0.1523090856 0.0000000000 1.0000000000 -0.2525011145 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.2540000000 1.0000000000 0.0000000000\n" " 0.4100000000 0.0000000000 1.0000000000\n" "#","\n" "Ar QZV2P-GTH-q8 QZV2P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 5.2342384840 0.0594091942 0.0000000000 0.0000000000 0.0000000000 -0.0218235164 0.0000000000 0.0000000000 0.0000000000\n" " 3.0293732626 -0.3808584814 0.0000000000 0.0000000000 0.0000000000 -0.0397609427 0.0000000000 0.0000000000 0.0000000000\n" " 1.3121914980 0.0527214554 0.0000000000 0.0000000000 0.0000000000 0.2096390562 0.0000000000 0.0000000000 0.0000000000\n" " 0.5914580696 0.6333744672 1.0000000000 0.0000000000 0.0000000000 0.4311838680 1.0000000000 0.0000000000 0.0000000000\n" " 0.2478147218 0.4727819382 0.0000000000 1.0000000000 0.0000000000 0.3981434659 0.0000000000 1.0000000000 0.0000000000\n" " 0.0969644987 0.0535029998 0.0000000000 0.0000000000 1.0000000000 0.1359825259 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.2540000000 1.0000000000 0.0000000000\n" " 0.4100000000 0.0000000000 1.0000000000\n" "#","\n" "Ar QZV3P-GTH-q8 QZV3P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 5.2342384840 0.0594091942 0.0000000000 0.0000000000 0.0000000000 -0.0218235164 0.0000000000 0.0000000000 0.0000000000\n" " 3.0293732626 -0.3808584814 0.0000000000 0.0000000000 0.0000000000 -0.0397609427 0.0000000000 0.0000000000 0.0000000000\n" " 1.3121914980 0.0527214554 0.0000000000 0.0000000000 0.0000000000 0.2096390562 0.0000000000 0.0000000000 0.0000000000\n" " 0.5914580696 0.6333744672 1.0000000000 0.0000000000 0.0000000000 0.4311838680 1.0000000000 0.0000000000 0.0000000000\n" " 0.2478147218 0.4727819382 0.0000000000 1.0000000000 0.0000000000 0.3981434659 0.0000000000 1.0000000000 0.0000000000\n" " 0.0969644987 0.0535029998 0.0000000000 0.0000000000 1.0000000000 0.1359825259 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.8730000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.7630000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.3110000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "W DZVP-GTH-q14 DZVP-GTH\n" " 3\n" " 5 0 0 4 3\n" " 3.17833961 -0.59405642 0.16293727 0.00000000\n" " 1.54892965 0.66388244 -0.20717075 0.00000000\n" " 0.65507630 0.77725275 -0.51725023 0.00000000\n" " 0.08615458 0.02093277 1.15557619 1.00000000\n" " 5 1 1 4 2\n" " 2.98630221 0.05620580 0.00000000\n" " 1.21317676 -0.52492834 0.00000000\n" " 0.58573989 -0.46305304 0.00000000\n" " 0.26423237 -0.11761739 1.00000000\n" " 5 2 2 4 2\n" " 3.98958029 0.05242902 0.00000000\n" " 1.11283726 -0.37652293 0.00000000\n" " 0.39364968 -0.52218358 0.00000000\n" " 0.12396511 -0.33923705 1.00000000\n" "#"}; atomes_1.3.1/src/calc/cp2k/cp2k_init.c0000664000175000017500000014707015212624223017074 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cp2k_init.c * @short Initialization of the CP2K input assistant * @author Sébastien Le Roux */ /* * This file: 'cp2k_init.c' * * Contains: * - The initialization of the CP2K input assistant * * List of functions: int find_cp2k_sym (); gboolean cp2k_with_motion (); gchar * cp_section_name (int p); gchar * page_name_cp2k (int p); void print_start_buffer (); void create_mol_selection_button (GtkWidget * box, int id); void cp2k_option_box (GtkWidget * box, int id); void add_cp2k_pages (); G_MODULE_EXPORT void update_cp2k_option (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_cp2k_option_check (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void update_cp2k_option_check (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void changed_cp2k_option_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void mol_selection_button (GtkButton * but, gpointer data); G_MODULE_EXPORT void cp2k_option_dialog (GtkWidget *but, gpointer data); G_MODULE_EXPORT void update_cp2k_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_cp2k_check (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void update_cp2k_check (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void cp2k_file_info (GtkTextBuffer * textbuf, gpointer data); G_MODULE_EXPORT void changed_cp2k_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void select_input_type (GtkToggleButton * but, gpointer data); GtkWidget * create_vdw_box (int id); GtkWidget * create_cp2k_spec_box (int spec); GtkWidget * cp2k_section_box (int s); GtkWidget * vbox_cp2k (int s); GtkWidget * file_info (int id); GtkWidget * init_cp2k (); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "calc.h" #include "cp2k.h" #include "cpmd.h" extern GtkWidget * thermo_box (); extern void print_cp2k (int f, GtkTextBuffer * buffer); extern ColRGBA init_color (int id, int numid); extern GtkWidget * qm_preview_box (int c, int s, int l); extern void field_unselect_all (); extern GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim); extern void create_selection_button (GtkWidget * box, int num, int id, gpointer data); extern void cp2k_fix_molecule (); cp2k * tmp_cp2k; double default_cp2k_options[41] = {0.0, 86400.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 300.0, 4.0, 0.0, 0.0, 50.0, 0.000001, 20.0, 0.00001, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.0, 10000.0, 2.5, 300.0, 1.0, 10000.0, 0.0001, 10.0, 0.0, 0.0}; double default_vdw_cut[2] = {-2.00000000E+000, 1.05835442E+001}; double default_cp2k_extra[3][4] = {{0.0, 0.0, 0.0, 0.0}, {0.0, 0.0, 0.0, 0.0}, {-1.0, -1.0, 1.0, 0.0}}; gchar * cp2k_unit[6]={"s", "Ry", "fs", "K", "a.u.", i18n("steps")}; int cp2k_default_num[12] = {7, 3, 3, 4, 3, 11, 8, 4, 10, 9, 4, 2}; gchar * cp2k_default_keywords[11][11] = {{"ENERGY", "ENERGY_FORCES", "GEOMETRY_OPTIMIZATION", "MOLECULAR_DYNAMICS", "VIBRATIONAL_ANALYSIS", "LINEAR_RESPONSE", "EHRENFEST_DYN", " ", " ", " ", " "}, {"LOW", "MEDIUM", "HIGH", " ", " ", " ", " ", " ", " ", " ", " "}, {"GPW", "GAPW", "GAPW_XC", " ", " ", " ", " ", " ", " ", " ", " "}, {"ATOMIC", "CORE", "RANDOM", "RESTART", " ", " ", " ", " ", " ", " ", " "}, {"BROYDEN", "CG", "DIIS", " ", " ", " ", " ", " ", " ", " ", " "}, {"BLYP", "B3LYP", "BEEFVDW", "BP", "HCTH120", "LDA", "OLYP", "PADE", "PBE", "PBE0", "TPSS"}, {"XYZ", "XY", "XZ", "YZ", "X", "Y", "Z", "NONE", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"CUBIC", "HEXAGONAL", "ORTHORHOMBIC", "RHOMBOHEDRAL", "TETRAGONAL_AB", "TETRAGONAL_AC", "TETRAGONAL_BC", "MONOCLINIC", "TRICLINIC", "NONE", " "}, {"ISOKIN", "LANGEVIN", "NPE_F", "NPE_I", "NPT_F", "NPT_I", "NVE", "NVT", "NVT_ADIABATIC", " ", " "}, {"BFGS", "CG", " ", " ", " ", " ", " ", " ", " ", " ", " "}}; gchar * cp2k_vdw_keywords[2][3] = {{"DRSLL", "LMKLL", "RVV10"}, {"DFTD2", "DFTD3", "DFTD3(BJ)"}}; gchar * cp2k_default_text[11][11] = {{i18n("Single Point Energy Calculation"), i18n("Single Point Energy and Forces Calculation"), i18n("Geometry Optimization"), i18n("Molecular Dynamics"), i18n("Vibrational Analysis"), i18n("Linear Response Calculation"), i18n("Ehrenfest Dynamics"), " ", " ", " ", " "}, {i18n("Low"), i18n("Medium"), i18n("High"), " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Gaussian and Plane Waves Method"), i18n("Gaussian and Augmented Plane Waves Method"), i18n("Gaussian and Augmented Plane Waves Method Only for XC"), " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Generate an Atomic Density Using the Atomic Code"), i18n("Diagonalize the Core Hamiltonian"), i18n("Use Random Wave-function Coefficients"), i18n("Use the RESTART File"), " ", " ", " ", " ", " ", " ", " "}, {i18n("Broyden Mixing Approximating the Inverse Hessian"), i18n("Conjugate Gradients"), i18n("Direct Inversion in the Iterative Subspace"), " ", " ", " ", " ", " ", " ", " ", " "}, {"Becke + Lee-Yang-Parr", i18n("Becke Three-parameters Hybrid + LYP"), i18n("Bayesian Error Estimation + van der Walls"), "Becke + Perdew", "Hamprecht-Cohen-Tozer-Handy", i18n("Local Density Approximation"), "Handy-Cohen + LYP", "Padé", "Perdew + Burke-Ernzerhof", i18n("Parameter-free PBE"), "Tao-Perdew-Staroverov-Scuseria"}, {i18n("3 Dimensional (XYZ)"), i18n("2 Dimensional (XY)"), i18n("2 Dimensional (XZ)"), i18n("2 Dimensional (YZ)"), i18n("1 Dimensional (X)"), i18n("1 Dimensional (Y)"), i18n("1 Dimensional (Z)"), i18n("Isolated System"), " ", " ", " "}, {i18n("Box Parameters (a,b,c and α,β,γ)"), i18n("Lattice Vectors"), " ", " ", " ", " ", " ", " ", " ", " ", " "}, {i18n("Cubic (a = b = c, α = β = γ = 90°)"), i18n("Hexagonal (a = b ≠ c, α = β = 90°, γ = 60°)"), i18n("Orthorhombic (a ≠ b ≠ c, α = β = γ = 90°)"), i18n("Rhombohedral (a = b = c, α = β = γ ≠ 90°)"), i18n("Tetragonal (a = b ≠ c, α = β = γ = 90°)"), i18n("Tetragonal (a = c ≠ b, α = β = γ = 90°)"), i18n("Tetragonal (a ≠ b = c, α = β = γ = 90°)"), i18n("Monoclinic (a ≠ b ≠ c ≠ a, α = γ = 90°, β ≠ 90°)"), i18n("Triclinic (a ≠ b ≠ c ≠ a, α ≠ β ≠ γ ≠ α ≠ 90°)"), i18n("No Cell Symmetry"), " "}, {i18n("Constant kinetic energy"), i18n("Langevin dynamics (constant temperature)"), i18n("Constant pressure ensemble (no thermostat)"), i18n("Constant pressure ensemble using an isotropic cell (no thermostat)"), i18n("Constant temperature and pressure using a flexible cell"), i18n("Constant temperature and pressure using an isotropic cell"), i18n("Constant energy (µ-canonical)"), i18n("Constant temperature and volume (canonical)"), i18n("Adiabatic dynamics in constant temperature and volume ensemble (CAFES)"), " ", " "}, {i18n("Diagonalization of a full Hessian matrix"), i18n("Conjugate gradients"), " ", " ", " ", " ", " ", " ", " ", " ", " "}}; gchar * cp2k_vdw_text[2][3] = {{i18n("Dion-Rydberg-Schroeder-Langreth-Lundqvist non-local van der Waals density functional"), i18n("Lee-Murray-Kong-Lundqvist-Langreth non-local van der Waals density functional"), i18n("Revised Vydrov-van Voorhis non-local van der Waals density functional")}, {i18n("Grimme D2 method"), i18n("Grimme D3 method (zero damping)"), i18n("Grimme D3 method (Becke-Johnson damping)")}}; int var_by_cp2sections[4] = {8, 20, 3, 10}; gchar * global_opts[40] = {i18n("Run type:"), i18n("Max CPU time:"), i18n("Print level:"), i18n("Use restart information:"), i18n("File that contains the restart information:"), i18n("File that contains the basis set(s):"), i18n("File that contains the pseudo-potential(s):"), i18n("File that contains the wave-function:"), i18n("Charge:"), i18n("Density cutoff for the finest grid level:"), i18n("Number of multi-grids:"), i18n("Quickstep method:"), i18n("Initial guess for the wave-function:"), i18n("Maximum inner-SCF cycle(s):"), i18n("Convergence threshold:"), i18n("Maximum outer-SCF cycle(s):"), i18n("Convergence threshold:"), i18n("Orbital transformation minimizer:"), i18n("DFT functional:"), i18n("Spin unrestricted calculation"), i18n("Multiplicity"), i18n("Use van der Waals interactions"), i18n("Restricted Open Kohn-Sham 'ROKS'"), i18n("Forces"), i18n("Stress tensor"), i18n("Mulliken population"), i18n("Löwdin population"), i18n("Orbitals"), i18n("Periodicity:"), i18n("Lattice parameters:"), i18n("Symmetry:"), i18n("Ensemble:"), i18n("Maximum number of MD steps:"), i18n("MD time step:"), i18n("Initial temperature:"), i18n("Geometry optimizer:"), i18n("Maximum number of optimization steps:"), i18n("Atomic forces convergence criterion:"), i18n("Save information every:"), i18n("Add constraint(s)")}; gchar * cpelemts[7] = {i18n("The CP2K input structure"), i18n("provides the general control parameters for the calculation to be performed"), i18n("describes how the interatomic forces will be evaluated"), i18n("describes the model: symmetry, periodicity and atomic species, pseudo-potentials and coordinates"), i18n("describes the displacement of the atoms for molecular dynamics and geometry optimization"), i18n("To describe the thermostat(s) for molecular dynamics"), i18n("To describe the parameters required for restart")}; gchar * cpsect[4] = {"GLOBAL", "FORCE_EVAL", "SUBSYS", "MOTION"}; char * k_thermo[CP2NTHERM][4] = {{"TIMECON_LANGEVIN", "TIMECON_NH", "MASS", "CHI"}, {"TIMECON", " ", " ", " "}, {" ", " ", " ", " "}, {"LENGTH", "MTS", "TIMECON", "YOSHIDA"}}; #define NC2OP 20 // 0 = None, 1 = Entry, 2 = Combo (-2 thermostats), 3 = yes/no, 4 = textbuffer int cp2k_opts_type[4][NC2OP] = {{ 2, 1, 2, 3, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // GLOBAL { 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 3, 1, 3, 3, 3, 3, 3, 3, 3}, // FEVAL { 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // SUBSYS { 2, -2, 1, 1, 1, 2, 1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}; // MOTION int idunit; int checkb; int optionb; int motionb; GtkWidget * print_box; GtkWidget * vfbox[2]; GtkWidget * filebut[2]; GtkWidget * fileinf[2]; GtkWidget * cp2k_combo; GtkWidget * cp2k_label; GtkWidget * checked_box[2]; GtkWidget * option_box[4]; GtkWidget * motion_box[2]; GtkWidget * cp2k_vdw_box[2]; GtkWidget * cp2k_spec_box[2]; GtkWidget * cp2k_spec_combo; GtkWidget * spec_data_combo[2]; GtkWidget * cp2k_thermo_box; /*! \fn void print_start_buffer () \brief update of the GtkTextBuffer showing the CP2K input * */ void print_start_buffer () { if (qmbuffer[0]) { GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (qmbuffer[0], & bStart); gtk_text_buffer_get_end_iter (qmbuffer[0], & bEnd); gtk_text_buffer_delete (qmbuffer[0], & bStart, & bEnd); print_cp2k (0, qmbuffer[0]); } } /*! \fn G_MODULE_EXPORT void update_cp2k_option (GtkEntry * res, gpointer data) \brief update CP2K option entry callback \param res the GtkEntry the signal is coming from \param data the associated data pointer */ G_MODULE_EXPORT void update_cp2k_option (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); switch (i) { case CP2VDW: if (v > 0.0) tmp_cp2k -> extra_opts[0][2] = v; update_entry_double (res, tmp_cp2k -> extra_opts[0][2]); break; case CP2ROK: if (v > 0.0) tmp_cp2k -> extra_opts[1][0] = v; update_entry_double (res, tmp_cp2k -> extra_opts[1][0]); break; default: if ((int)v == -1 || (int)v > 0) tmp_cp2k -> extra_opts[2][i-CP2POR] = v; update_entry_int (res, tmp_cp2k -> extra_opts[2][i-CP2POR]); break; } print_start_buffer (); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void update_cp2k_option_check (GtkCheckButton * but, gpointer data) \brief CP2K option toggle callback GTK3 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cp2k_option_check (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void update_cp2k_option_check (GtkToggleButton * but, gpointer data) \brief CP2K option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cp2k_option_check (GtkToggleButton * but, gpointer data) #endif { int i; i = GPOINTER_TO_INT(data); tmp_cp2k -> extra_opts[i][(i==2)?2:3] = (double) button_get_status ((GtkWidget *)but); print_start_buffer (); } GtkWidget * create_vdw_box (int id); /*! \fn G_MODULE_EXPORT void changed_cp2k_option_box (GtkComboBox * box, gpointer data) \brief change a GtkComboBox while creating a CP2K input file \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_cp2k_option_box (GtkComboBox * box, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data); if (i < 2) { j = k = 1; } else { j = 0; k = i - CP2VDW; } tmp_cp2k -> extra_opts[j][k] = (double) combo_get_active ((GtkWidget *)box); if (i == CP2VDW) { cp2k_vdw_box[1] = destroy_this_widget (cp2k_vdw_box[1]); cp2k_vdw_box[1] = create_vdw_box ((int)tmp_cp2k -> extra_opts[0][0]); add_box_child_start (GTK_ORIENTATION_VERTICAL, cp2k_vdw_box[0], cp2k_vdw_box[1], FALSE, FALSE, 0); show_the_widgets (cp2k_vdw_box[1]); } print_start_buffer (); } /*! \fn GtkWidget * create_vdw_box (int id) \brief create the VdW informaiton and option(s) widgets \param id the type of VdW interactions */ GtkWidget * create_vdw_box (int id) { GtkWidget * vbox, * hbox; GtkWidget * widg; gchar * cp2k_vdw_vars[2] = {i18n("Type of potential:"), i18n("Cutoff:")}; int i, j, k; vbox = create_vbox(5); i = (id == 0) ? 2 : 3; for (j=0; j extra_opts[0][j+1]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_cp2k_option_box), GINT_TO_POINTER(CP2VDW+1)); break; case 1: widg = create_entry (G_CALLBACK(update_cp2k_option), 100, 15, FALSE, GINT_TO_POINTER(CP2VDW)); tmp_cp2k -> extra_opts[0][j+1] = default_vdw_cut[id]; update_entry_double (GTK_ENTRY(widg), tmp_cp2k -> extra_opts[0][j+1]); break; case 2: widg = check_button (_("Apply long range corrections"), -1, -1, tmp_cp2k -> extra_opts[0][j+1], G_CALLBACK(update_cp2k_option_check), GINT_TO_POINTER(0)); break; } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 5); } return vbox; } /*! \fn G_MODULE_EXPORT void mol_selection_button (GtkButton * but, gpointer data) \brief NOT USED ! \param but the GtkButton sending the signal \param data the associated data pointer * / G_MODULE_EXPORT void mol_selection_button (GtkButton * but, gpointer data) { cp2k_fix_molecule (); gchar * stra, * strb; if (tmp_cp2k -> fixat[1] == 0) { stra = g_strdup_printf ("Not picked yet !"); strb = g_strdup_printf (DELETEB); } else { stra = g_strdup_printf ("%d fragment(s)", tmp_cp2k -> fixat[1]); strb = g_strdup_printf (APPLY); } set_image_from_icon_name (sel_img[2], strb); gtk_button_set_label (but, stra); g_free (stra); g_free (strb); } */ /*! \fn void create_mol_selection_button (GtkWidget * box, int id) \brief NOT USED ! \param box the box to insert the new widget in \param id the selection status * / void create_mol_selection_button (GtkWidget * box, int id) { GtkWidget * hbox = cpmd_box (box, "Molecule(s)* selection **:", 5, 20, 220); gchar * str; if (tmp_cp2k -> fixat[1] == 0) { str = g_strdup_printf ("Not picked yet !"); sel_img[id] = stock_image (DELETEB); } else { str = g_strdup_printf ("%d fragment(s)", tmp_cp2k -> fixat[1]); sel_img[id] = stock_image (APPLY); } sel_but[id] = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NONE, G_CALLBACK(mol_selection_button), NULL); g_free (str); widget_set_sensitive (sel_but[id], qm_view -> bonding); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sel_but[id], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sel_img[id], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label("* isolated molecular fragment", -1, -1, 0.1, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label("** requires to compute the bonding properties", -1, -1, 0.1, 0.5), FALSE, FALSE, 5); } */ /*! \fn G_MODULE_EXPORT void cp2k_option_dialog (GtkWidget * but, gpointer data) \brief CP2K option dialog - creating the dialog \param but the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void cp2k_option_dialog (GtkWidget *but, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); GtkWidget * vbox, * hbox; GtkWidget * widg; gchar * cp2k_roks_options[2] = {i18n("Energy scaling:"), i18n("Spin configuration *:")}; gchar * cp2k_orb_options[2] = {i18n("Number of HOMO levels (-1 for all):"), i18n("Number of LUMO levels (-1 for all):")}; gchar * str = g_strdup_printf (_("%s - options"), i18n(global_opts[i])); GtkWidget * dial = dialogmodal (str, GTK_WINDOW(qm_assistant)); g_free (str); vbox = dialog_get_content_area (dial); switch (i) { case CP2VDW: hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); widg = create_combo (); combo_text_append (widg, _("Non-local potential")); combo_text_append (widg, _("Pair potential")); combo_set_active (widg, (int)tmp_cp2k -> extra_opts[0][0]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_cp2k_option_box), GINT_TO_POINTER(CP2VDW)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_("Type of functional for the van der Waals interactions"), 200, -1, 0.0, 0.5), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 5); cp2k_vdw_box[0] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cp2k_vdw_box[0], FALSE, FALSE, 10); cp2k_vdw_box[1] = create_vdw_box ((int)tmp_cp2k -> extra_opts[0][0]); add_box_child_start (GTK_ORIENTATION_VERTICAL, cp2k_vdw_box[0], cp2k_vdw_box[1], FALSE, FALSE, 0); break; case CP2ROK: for (j=0; j<2; j++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(cp2k_roks_options[j]), 200, -1, 0.0, 0.5), FALSE, FALSE, 5); if (j==0) { widg = create_entry (G_CALLBACK(update_cp2k_option), 100, 15, FALSE, GINT_TO_POINTER(i+j)); update_entry_double (GTK_ENTRY(widg), tmp_cp2k -> extra_opts[1][j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 10); } else { widg = create_combo (); combo_text_append (widg, "alpha - α"); combo_text_append (widg, "beta - β"); combo_set_active (widg, (int)tmp_cp2k -> extra_opts[1][1]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_cp2k_option_box), GINT_TO_POINTER(j)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 10); } } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_label_new (_("* for the singly occupied orbitals")), FALSE, FALSE, 5); break; case CP2POR: for (j=0; j<2; j++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(cp2k_orb_options[j]), 250, -1, 0.0, 0.5), FALSE, FALSE, 5); widg = create_entry (G_CALLBACK(update_cp2k_option), 100, 15, FALSE, GINT_TO_POINTER(i+j)); update_entry_int (GTK_ENTRY(widg), tmp_cp2k -> extra_opts[2][j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (_("Write cube files, if not then only print eigenvalues"), -1, -1, tmp_cp2k -> extra_opts[2][2], G_CALLBACK(update_cp2k_option_check), GINT_TO_POINTER(2)), FALSE, FALSE, 5); break; case CP2CON: create_selection_button (vbox, tmp_cp2k -> fixat[0], 1, GINT_TO_POINTER(-1)); //create_mol_selection_button (vbox, 2); break; } run_this_gtk_dialog (dial, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn G_MODULE_EXPORT void update_cp2k_parameter (GtkEntry * res, gpointer data) \brief update some CP2K parameters \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cp2k_parameter (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = string_to_double ((gpointer)m); if (tmp_cp2k -> opts[i] != v) { tmp_cp2k -> opts[i] = v; print_start_buffer (); } if (i==CP2CUT || i==CP2SCN || i==CP2SCO || i==CP2DLT || i==CP2GEF) { update_entry_double (res, tmp_cp2k -> opts[i]); } else { update_entry_int (res, tmp_cp2k -> opts[i]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void update_cp2k_check (GtkCheckButton * but, gpointer data) \brief update some CP2K parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cp2k_check (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void update_cp2k_check (GtkToggleButton * but, gpointer data) \brief update some CP2K parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cp2k_check (GtkToggleButton * but, gpointer data) #endif { int i, j; i = GPOINTER_TO_INT(data); tmp_cp2k -> opts[i] = (double) button_get_status ((GtkWidget *)but); if (i == CP2RES) { for (j=0; j<2; j++) widget_set_sensitive (checked_box[j], (int)tmp_cp2k -> opts[CP2RES]); } else if (i==CP2SPI || i==CP2VDW || i==CP2ROK || i==CP2POR || i==CP2CON) { switch (i) { case CP2SPI: j = 0; break; case CP2VDW: j = 1; break; case CP2ROK: j = 2; break; case CP2POR: j = 3; break; case CP2CON: j = 4; break; } widget_set_sensitive (option_box[j], (int)tmp_cp2k -> opts[i]); } print_start_buffer (); } /*! \fn G_MODULE_EXPORT void cp2k_file_info (GtkTextBuffer * textbuf, gpointer data) \brief update the C2PK information textview \param textbuf the GtkTextBuffer sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void cp2k_file_info (GtkTextBuffer * textbuf, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data) - CP2FRE; GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (textbuf, & bStart); gtk_text_buffer_get_end_iter (textbuf, & bEnd); if (i < 5) { if (tmp_cp2k -> files[i] != NULL) g_free (tmp_cp2k -> files[i]); tmp_cp2k -> files[i] = g_strdup_printf ("%s", gtk_text_buffer_get_text (textbuf, & bStart, & bEnd, FALSE)); if (g_strcmp0 (tmp_cp2k -> files[i], "") == 0) tmp_cp2k -> files[i] = NULL; } else { j = combo_get_active (cp2k_spec_combo); k = i + CP2FRE - 10; if (tmp_cp2k -> spec_files[j][k] != NULL) g_free (tmp_cp2k -> spec_files[j][k]); tmp_cp2k -> spec_files[j][k] = g_strdup_printf ("%s", gtk_text_buffer_get_text (textbuf, & bStart, & bEnd, FALSE)); if (g_strcmp0 (tmp_cp2k -> spec_files[j][k], "") == 0) { tmp_cp2k -> spec_files[j][k] = NULL; combo_set_active (spec_data_combo[k], tmp_cp2k -> spec_data[j][k]); widget_set_sensitive (spec_data_combo[k], TRUE); } else if (spec_data_combo[k] != NULL) { combo_set_active (spec_data_combo[k], -1); widget_set_sensitive (spec_data_combo[k], FALSE); } } print_start_buffer (); } /*! \fn GtkWidget * create_cp2k_spec_box (int spec) \brief create a CP2K chemical species option combo box \param spec the chemical species */ GtkWidget * create_cp2k_spec_box (int spec) { gchar * info[2] = {i18n("- Select and use set of parameters from the database: "), i18n("- Define and use other set of parameters: ")}; gchar * data_name[2][2] = {{i18n("\t\tAvailable basis set for "), i18n("\t\tAvailable pseudo-potential for ")}, {i18n("\t\tBasis set for "), i18n("\t\tPseudo-potential for ")}}; GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; gchar * str; int i, j; for (i=0; i<2; i++) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_(info[i]), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); for (j=0; j<2; j++) { str = g_strdup_printf ("%s%s", _(data_name[i][j]), qm_proj -> chemistry -> label[spec]); hbox = cpmd_box (vbox, str, 5, 5, 300); g_free (str); if (i==0) { spec_data_combo[j] = NULL; if (tmp_cp2k -> spec_data[spec][j] > -1) { spec_data_combo[j] = prepare_basis_combo (spec, j); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, spec_data_combo[j], FALSE, FALSE, 5); } else { str = g_strdup_printf ("%s", _("None")); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, -1, 0.5, 0.5), FALSE, FALSE, 5); g_free (str); } } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_text_view (350, -1, 1, 0, G_CALLBACK(cp2k_file_info), GINT_TO_POINTER(j+10), tmp_cp2k -> spec_files[spec][j]), FALSE, FALSE, 5); } } } return vbox; } gboolean cp2k_with_motion (); GtkWidget * vbox_cp2k (int s); gchar * page_name_cp2k (int p); /*! \fn G_MODULE_EXPORT void changed_cp2k_box (GtkComboBox * box, gpointer data) \brief change CP2K option \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_cp2k_box (GtkComboBox * box, gpointer data) { int i, j; gboolean motion; i = GPOINTER_TO_INT(data); j = combo_get_active ((GtkWidget *)box); if (j != (int)tmp_cp2k -> opts[i]) { if (i == CP2SYM) { cp2k_spec_box[1] = destroy_this_widget (cp2k_spec_box[1]); cp2k_spec_box[1] = create_cp2k_spec_box (combo_get_active ((GtkWidget *)box)); show_the_widgets (cp2k_spec_box[1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cp2k_spec_box[0], cp2k_spec_box[1], FALSE, FALSE, 0); } else { if (i == CP2RUN) motion = cp2k_with_motion (); tmp_cp2k -> opts[i] = (double) combo_get_active ((GtkWidget *)box); if (i == CP2RUN) { if (motion && ! cp2k_with_motion()) { gtk_assistant_remove_page (GTK_ASSISTANT(qm_assistant), 5); } else if (! motion && cp2k_with_motion()) { GtkAssistant * assist = GTK_ASSISTANT(qm_assistant); idopt = CP2SYM; motionb = -1; optionb = 3; idunit = 1; icomb = 8; GtkWidget * page = vbox_cp2k (3); show_the_widgets (page); gtk_assistant_insert_page (assist, page, 5); gtk_assistant_set_page_title (assist, page, page_name_cp2k(4)); gtk_assistant_set_page_type (assist, page, GTK_ASSISTANT_PAGE_CONTENT); gtk_assistant_set_page_complete (assist, page, TRUE); cp2k_with_motion (); } } else if (i == CP2ENS) { if (j == 2 || j == 3) { widget_set_sensitive (cp2k_thermo_box, FALSE); } else { widget_set_sensitive (cp2k_thermo_box, TRUE); } } print_start_buffer (); } } } /*! \fn void cp2k_option_box (GtkWidget * box, int id) \brief create a CP2K option combo box \param box the box to insert the new widgets in \param id the option id */ void cp2k_option_box (GtkWidget * box, int id) { optionb ++; option_box[optionb] = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, option_box[optionb], FALSE, FALSE, 5); if (id != CP2SPI) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, option_box[optionb], create_button (_("Options"), IMG_STOCK, DPROPERTIES, 200, -1, GTK_RELIEF_NORMAL, G_CALLBACK(cp2k_option_dialog), GINT_TO_POINTER(id)), FALSE, FALSE, 50); } widget_set_sensitive (option_box[optionb], (int)tmp_cp2k -> opts[id]); } /*! \fn GtkWidget * cp2k_section_box (int s) \brief create the CP2K assistant section box \param s the section id */ GtkWidget * cp2k_section_box (int s) { int i, j, k; GtkWidget * hbox; GtkWidget * widg; GtkWidget * vbox = create_vbox (BSEP); for (i=0; i 0) { idopt ++; j = idopt; if (j == CP2NST) { cp2k_thermo_box = thermo_box(); add_box_child_start (GTK_ORIENTATION_VERTICAL, motion_box[motionb], cp2k_thermo_box, FALSE, FALSE, 5); hbox = cpmd_box (motion_box[motionb], _(global_opts[idopt]), 5, 5, 300); } else if (j == CP2FRE || j == CP2FWV) { checkb ++; checked_box[checkb] = cpmd_box (vbox, _(global_opts[idopt]), 5, 5, 300); } else if (j == CP2SPM) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, option_box[optionb], markup_label(_(global_opts[idopt]), 100, 30, 0.0, 0.5), FALSE, FALSE, 50); } else if (j == CP2PFO || j == CP2PLO) { if (j == CP2PFO) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("Print:"), -1, -1, 0.0, 0.5), FALSE, FALSE, 5); print_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, print_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, print_box, markup_label(_(global_opts[idopt]), 150, 30, 0.0, 0.5), FALSE, FALSE, 50); } else if (j > CP2ROK && j < CP2PBC) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, print_box, markup_label(_(global_opts[idopt]), 150, 30, 0.0, 0.5), FALSE, FALSE, 50); } else if (j == CP2ENS || j == CP2GMI) { motionb ++; motion_box[motionb] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, motion_box[motionb], FALSE, FALSE, 5); hbox = cpmd_box (motion_box[motionb], _(global_opts[idopt]), 5, 5, 300); } else if (j > CP2ENS && j < CP2OUF) { hbox = cpmd_box (motion_box[motionb], _(global_opts[idopt]), 5, 5, 300); } else if (j == CP2SCN || j == CP2SCO) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(_(global_opts[idopt]), 150, 30, 0.0, 0.5), FALSE, FALSE, 30); } else { hbox = cpmd_box (vbox, _(global_opts[idopt]), 5, 5, 300); } switch (cp2k_opts_type[s][i]) { case 1: ident ++; widg = create_entry (G_CALLBACK(update_cp2k_parameter), 100, 15, FALSE, GINT_TO_POINTER(j)); if (j==CP2CUT || j==CP2SCN || j==CP2SCO || j==CP2DLT || j==CP2GEF) { update_entry_double (GTK_ENTRY(widg), tmp_cp2k -> opts[j]); } else { update_entry_int (GTK_ENTRY(widg), tmp_cp2k -> opts[j]); } break; case 2: icomb ++; widg = create_combo (); for (k=0; k opts[j]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_cp2k_box), GINT_TO_POINTER(j)); break; case 3: widg = check_button (NULL, -1, -1, tmp_cp2k -> opts[j], G_CALLBACK(update_cp2k_check), GINT_TO_POINTER(j)); break; case 4: widg = create_text_view (200, -1, 1, 0, G_CALLBACK(cp2k_file_info), GINT_TO_POINTER(j), tmp_cp2k -> files[j-CP2FRE]); break; default: break; } if (j==CP2FRE || j==CP2FWV) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, checked_box[checkb], widg, FALSE, FALSE, 5); widget_set_sensitive (checked_box[checkb], (int)tmp_cp2k -> opts[CP2RES]); } else if (j==CP2SPM) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, option_box[optionb], widg, FALSE, FALSE, 5); } else if (j > CP2ROK && j < CP2PBC) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, print_box, widg, FALSE, FALSE, 5); if (j == CP2POR) cp2k_option_box (print_box, j); } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 5); if (j==CP2SPI || j==CP2VDW || j==CP2ROK || j==CP2CON) cp2k_option_box (hbox, j); } if (j==CP2KTI || j==CP2CUT || j==CP2DLT || j==CP2TMP || j==CP2GEF || j==CP2OUF) { idunit ++; widg = gtk_label_new ((idunit == 5) ? _(cp2k_unit[idunit]) : cp2k_unit[idunit]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 5); } if (idopt == CP2SYM) { gchar * str = g_strdup_printf (_(" %s provides official CP2K atomic basis sets and pseudo-potentials, are included:"), PACKAGE); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 20); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("\t - BASIS_MOLOPT\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - GTH_BASIS_SETS\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - BASIS_SET\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - POTENTIAL\t\t(CP2K v9.1, released: 2021-12-31)"), -1, -1, 0.1, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_(" Following your selection the files that contains the parameters for your calculation will be generated automatically.\n" " Alternatively it is possible to define and use your own set of parameters."), -1, -1, 0.0, 0.5), FALSE, FALSE, 20); hbox = cpmd_box (vbox, _("\t\t\t\tChemical species"), 20, 5, 300); cp2k_spec_combo = create_combo (); for (k=0; k nspec; k++) combo_text_append (cp2k_spec_combo, qm_proj -> chemistry -> label[k]); combo_set_active (cp2k_spec_combo, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cp2k_spec_combo, FALSE, FALSE, 5); cp2k_spec_box[0] = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cp2k_spec_box[0], FALSE, FALSE, 0); cp2k_spec_box[1] = create_cp2k_spec_box (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cp2k_spec_box[0], cp2k_spec_box[1], FALSE, FALSE, 0); g_signal_connect (G_OBJECT (cp2k_spec_combo), "changed", G_CALLBACK(changed_cp2k_box), GINT_TO_POINTER(j)); } } } return vbox; } /*! \fn gchar * cp_section_name (int p) \brief get CP2K section name \param p the section id */ gchar * cp_section_name (int p) { if (p < 4) { return g_strdup_printf (_("Details of the %s section that %s"), cpsect[p], cpelemts[p+1]); } else { return g_strdup_printf ("%s", cpelemts[p+1]); } } /*! \fn GtkWidget * vbox_cp2k (int s) \brief create the CP2K assistant page vertical box \param s the section id */ GtkWidget * vbox_cp2k (int s) { GtkWidget * vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(cp_section_name(s), -1, 20, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cp2k_section_box(s), FALSE, FALSE, 0); if (s== 0) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, qm_preview_box (1, s, 0), FALSE, FALSE, 5); return vbox; } /*! \fn G_MODULE_EXPORT void select_input_type (GtkToggleButton * but, gpointer data) \brief select the input file type \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_input_type (GtkToggleButton * but, gpointer data) { #ifdef GTK4 tmp_cp2k -> input_type = GPOINTER_TO_INT (data); #else tmp_cp2k -> input_type = ! tmp_cp2k -> input_type; #endif widget_set_sensitive (fileinf[! tmp_cp2k -> input_type], FALSE); widget_set_sensitive (fileinf[tmp_cp2k -> input_type], TRUE); print_start_buffer (); } /*! \fn GtkWidget * file_info (int id) \brief create the assistant page that present the input file(s) properties \param id the input file(s) type (0 = single, 1 = multiple) */ GtkWidget * file_info (int id) { GtkWidget * main_box; gchar * filename[4] = {i18n("CP2K main input file '*.inp'"), "forces.inc", "system.inc", "motion.inc"}; gchar * filetext[4] = {"&GLOBAL\n...\n&END GLOBAL\n\n@INCLUDE 'forces.inc'\n\n@INCLUDE 'motion.inc'", "&FORCE_EVAL\n...\n@INCLUDE 'system.inc'\n&END FORCE_EVAL", "&SUBSYS\n...\n&END SUBSYS", "&MOTION\n...\n&END MOTION"}; GtkWidget * vbox, * vbx, * hbx; GtkWidget * vframe; if (id == 0) { main_box = create_vbox (BSEP); hbx = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, stock_image(AFILE), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, gtk_label_new (_("CP2K input file '*.inp'")), FALSE, FALSE, 5); vframe = gtk_frame_new (NULL); gtk_frame_set_label_widget (GTK_FRAME(vframe), hbx); #ifdef GTK3 gtk_frame_set_shadow_type (GTK_FRAME(vframe), GTK_SHADOW_ETCHED_IN); #endif add_box_child_start (GTK_ORIENTATION_VERTICAL, main_box, vframe, FALSE, FALSE, 10); vbox = create_vbox (BSEP); add_container_child (CONTAINER_FRA, vframe, vbox); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(_("! Information"), 200, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("&GLOBAL\n...\n&END GLOBAL", 100, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("&FORCE_EVAL\n...", 200, -1, 0.0, 0.5), FALSE, FALSE, 5); hbx = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbx, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, markup_label("&SUBSYS\n...\n&END SUBSYS", 150, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("&END FORCE_EVAL", 200, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("&MOTION\n...\n&END MOTION", 200, -1, 0.0, 0.5), FALSE, FALSE, 5); } else { main_box = create_hbox (0); vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, main_box, vbox, FALSE, FALSE, 0); int i; for (i=0; i<4; i++) { hbx = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, stock_image(AFILE), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, gtk_label_new ((! i) ? _(filename[i]) : filename[i]), FALSE, FALSE, 5); vframe = gtk_frame_new (NULL); gtk_frame_set_label_widget (GTK_FRAME(vframe), hbx); #ifdef GTK3 gtk_frame_set_shadow_type (GTK_FRAME(vframe), GTK_SHADOW_ETCHED_IN); #endif vbx = create_vbox (BSEP); add_container_child (CONTAINER_FRA, vframe, vbx); if (i == 0) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, markup_label(_("! Information"), 200, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, markup_label(filetext[i], 200, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, vframe, FALSE, FALSE, 5); if (i == 0) { vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, main_box, vbox, FALSE, FALSE, 20); } } } return main_box; } /*! \fn GtkWidget * init_cp2k () \brief initialize the CP2K input creation assistant * */ GtkWidget * init_cp2k () { GtkWidget * vbox = create_vbox (BSEP); gchar * text = _("The CP2K input system offers to have the information gathered in a single, rather long, file\n" "or separated in several files each of them dedicated to a particular section of the input: "); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_label_new (text), FALSE, FALSE, 20); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); GtkWidget * hbx; gchar * ftext[2] = {i18n("Single input file"), i18n("Multiple files")}; int i, j; j = tmp_cp2k -> input_type; for (i=0; i<2; i++) { vfbox[i] = create_vbox (BSEP); gtk_widget_set_size_request (vfbox[i], (i==0) ? 200 : 400, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vfbox[i], FALSE, FALSE, (i==0) ? 50 : 10); fileinf[i] = file_info (i); add_box_child_start (GTK_ORIENTATION_VERTICAL, vfbox[i], fileinf[i], FALSE, FALSE, (i==0) ? 0 : 15); hbx = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vfbox[i], hbx, FALSE, FALSE, 0); #ifdef GTK4 filebut[i] = check_button (_(ftext[i]), -1, -1, (i != j) ? FALSE : TRUE, G_CALLBACK(select_input_type), GINT_TO_POINTER(i)); if (i) gtk_check_button_set_group ((GtkCheckButton *)filebut[i], (GtkCheckButton *)filebut[0]); #else if (! i) { filebut[i] = radio_button (_(ftext[i]), -1, -1, (i != j) ? FALSE : TRUE, G_CALLBACK(select_input_type), NULL); } else { filebut[i] = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(filebut[0]), _(ftext[i])); } #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, filebut[i], FALSE, FALSE, (i==0) ? 50 : 120); } tmp_cp2k -> input_type = j; widget_set_sensitive (fileinf[tmp_cp2k -> input_type], TRUE); widget_set_sensitive (fileinf[! tmp_cp2k -> input_type], FALSE); show_the_widgets (vbox); return vbox; } /*! \fn gchar * page_name_cp2k (int p) \brief get CP2K assistant page name \param p the page id */ gchar * page_name_cp2k (int p) { if (p == 0) { return g_strdup_printf (_("The CP2K input structure")); } else if (p < 5) { return g_strdup_printf (_("The %s section"), cpsect[p-1]); } else if (p == 5) { return g_strdup_printf (_("The MOTION section - thermostat(s)")); } else { return g_strdup_printf (_("The MOTION section - restart(s)")); } } /*! \fn gboolean cp2k_with_motion () \brief CP2K MD calculation ? */ gboolean cp2k_with_motion () { int i; for (i=0; i<2; i++) hide_the_widgets (motion_box[i]); hide_the_widgets (motion_box[1]); if (tmp_cp2k -> opts[CP2RUN] == 2.0 || tmp_cp2k -> opts[CP2RUN] == 3.0 || tmp_cp2k -> opts[CP2RUN] == 6.0) { i = (tmp_cp2k -> opts[CP2RUN] == 2.0) ? 1 : 0; show_the_widgets (motion_box[i]); return TRUE; } else { return FALSE; } } /*! \fn void add_cp2k_pages () \brief add pages to the CP2 assistant */ void add_cp2k_pages () { int i; gchar * info; GtkAssistant * assist = GTK_ASSISTANT(qm_assistant); GtkWidget * page; idopt = -1; ident = -1; icomb = -1; idunit = -1; checkb = -1; optionb = -1; motionb = -1; for (i=0; i<(cp2k_with_motion() ? 5: 4); i++) { if (i > 0) { page = vbox_cp2k (i-1); } else { page = init_cp2k (); } gtk_assistant_append_page (assist, page); gtk_assistant_set_page_title (assist, page, page_name_cp2k(i)); gtk_assistant_set_page_type (assist, page, GTK_ASSISTANT_PAGE_CONTENT); gtk_assistant_set_page_complete (assist, page, TRUE); } GtkWidget * conclu = create_vbox (BSEP); info = g_strdup_printf (_(" Finalize the creation of the CP2K input files now !")); add_box_child_start (GTK_ORIENTATION_VERTICAL, conclu, markup_label(info, -1, -1, 0.5, 0.5), TRUE, TRUE, 100); g_free (info); add_box_child_start (GTK_ORIENTATION_VERTICAL, conclu, markup_label(_("\n \tNote: You can re-open this assistant later if required to adjust your choices\n"), -1, -1, 0.0, 0.5), FALSE, FALSE, 0); gtk_assistant_append_page (assist, conclu); gtk_assistant_set_page_title (assist, conclu, _("Create the input files now !")); gtk_assistant_set_page_type (assist, conclu, GTK_ASSISTANT_PAGE_CONFIRM); gtk_assistant_set_page_complete (assist, conclu, TRUE); gtk_assistant_update_buttons_state (assist); } /*! \fn int find_cp2k_sym () \brief find the CP2K symmetry parameter based on the cell properties * */ int find_cp2k_sym () { box_info * box = & qm_proj -> cell.box[0]; if (box -> param[0][0] == box -> param[0][1] && box -> param[0][0] == box -> param[0][2] && box -> param[0][1] == box -> param[0][2]) { if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == box -> param[1][2] && box -> param[1][1] == box -> param[1][2] && box -> param[1][0] == 90.0) return 0; if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == box -> param[1][2] && box -> param[1][1] == box -> param[1][2] && box -> param[1][0] != 90.0) return 3; } if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == box -> param[1][2] && box -> param[1][1] == box -> param[1][2] && box -> param[1][0] == 90.0) { if (box -> param[0][0] == box -> param[0][1] && box -> param[0][0] != box -> param[0][2]) return 4; if (box -> param[0][0] == box -> param[0][2] && box -> param[0][0] != box -> param[0][1]) return 5; if (box -> param[0][1] == box -> param[0][2] && box -> param[0][1] != box -> param[0][0]) return 6; } if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == box -> param[1][2] && box -> param[1][1] == box -> param[1][2]) { if (box -> param[0][0] != box -> param[0][1] && box -> param[0][0] != box -> param[0][2] && box -> param[0][1] != box -> param[0][2]) return 2; } if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == 90.0) { if (box -> param[1][2] == 60.0) { if (box -> param[0][0] == box -> param[0][1] && box -> param[0][0] != box -> param[0][2]) return 1; } } if (box -> param[1][0] == box -> param[1][2] && box -> param[1][0] == 90.0) { if (box -> param[1][1] != 90.0) { if (box -> param[0][0] != box -> param[0][1] && box -> param[0][0] != box -> param[0][2] && box -> param[0][1] != box -> param[0][2]) return 7; } } if (box -> param[0][0] != box -> param[0][1] && box -> param[0][0] != box -> param[0][2] && box -> param[0][1] != box -> param[0][2]) { if (box -> param[1][0] != box -> param[1][1] && box -> param[1][0] != box -> param[1][2] && box -> param[1][1] != box -> param[1][2]) return 8; } return 9; } atomes_1.3.1/src/calc/cp2k/cp2k_pot.c0000664000175000017500000046147015212624223016736 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cp2k_pot.c * @short CP2K potentials, as distributed with CP2K v9.1 * @author Sébastien Le Roux */ /* * This file: 'cp2k_pot.c' * * Contains: * - CP2K potentials, as distributed with CP2K v9.1 This file contains 3 tables: pot_elem -> the list of chemical elements pot_keys -> the list of keywords cp2k_pot -> finally the complete potential */ #include "global.h" char * pot_elem[421] = {"H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Cu", "Zn", "Zn", "Ga", "Ga", "Ge", "As", "Se", "Br", "Kr", "Rb", "Sr", "Y", "Zr", "Mo", "Ru", "Rh", "Pd", "Ag", "Ag", "In", "In", "Sb", "Te", "I", "Xe", "Cs", "Ba", "Ba", "Ce", "Gd", "W", "Au", "Au", "Pb", "Bi", "Bi", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn", "Ga", "Ge", "As", "Se", "Br", "Kr", "Zr", "Ru", "Te", "Cs", "Cs", "Au", "H", "C", "N", "O", "F", "P", "Ar", "H", "C", "N", "O", "H", "He", "Li", "Li", "Be", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Na", "Mg", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "K", "Ca", "Ca", "Sc", "Sc", "Ti", "Ti", "V", "V", "Cr", "Cr", "Mn", "Mn", "Fe", "Fe", "Co", "Co", "Ni", "Ni", "Cu", "Cu", "Cu", "Zn", "Zn", "Zn", "Ga", "Ga", "Ge", "As", "Se", "Br", "Kr", "Rb", "Rb", "Sr", "Sr", "Y", "Y", "Zr", "Zr", "Nb", "Nb", "Mo", "Mo", "Tc", "Tc", "Ru", "Ru", "Rh", "Rh", "Pd", "Pd", "Ag", "Ag", "Ag", "Cd", "Cd", "In", "In", "Sn", "Sb", "Te", "I", "Xe", "Cs", "Cs", "Ba", "Ba", "La", "Ce", "Pr", "Nd", "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb", "Lu", "Hf", "Ta", "Ta", "W", "W", "Re", "Re", "Os", "Os", "Ir", "Ir", "Pt", "Pt", "Au", "Au", "Au", "Hg", "Hg", "Tl", "Tl", "Pb", "Bi", "Po", "At", "Rn", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Cu", "Zn", "Zn", "Ga", "Ga", "Ge", "As", "Se", "Br", "Kr", "Rb", "Sr", "Y", "Zr", "Nb", "Mo", "Tc", "Ru", "Ru", "Rh", "Rh", "Pd", "Pd", "Ag", "Ag", "Cd", "In", "In", "Sn", "Sb", "Te", "I", "Xe", "Cs", "Ba", "La", "Ce", "Ce", "Pr", "Nd", "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb", "Lu", "Hf", "Ta", "Ta", "W", "W", "Re", "Re", "Os", "Os", "Ir", "Ir", "Pt", "Pt", "Au", "Au", "Hg", "Tl", "Tl", "Pb", "Pb", "Bi", "Bi", "Po", "At", "Rn", "U", "B", "H", "B", "C", "N", "O", "F", "P", "S", "Cl", "H", "C", "N", "O", "Al", "B", "C", "Cl", "F", "H", "N", "O", "P", "S", "Si", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn", "Ga", "Ge", "As", "Se", "Br", "Kr", "I"}; char * pot_keys[421] = {"GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP-q2", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP-q19", "GTH-BLYP", "GTH-BLYP-q20", "GTH-BLYP", "GTH-BLYP-q3", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP-q9", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP-q19", "GTH-BLYP", "GTH-BLYP-q3", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP-q8", "GTH-BLYP-q9", "GTH-BLYP", "GTH-BLYP-q2", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP-q19", "GTH-BLYP-q4", "GTH-BLYP-q15", "GTH-BLYP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP-q1", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP-q1", "GTH-BP", "GTH-BP-q11", "GTH-HCTH120", "GTH-HCTH120", "GTH-HCTH120", "GTH-HCTH120", "GTH-HCTH120", "GTH-HCTH120", "GTH-HCTH120", "GTH-HCTH407", "GTH-HCTH407", "GTH-HCTH407", "GTH-HCTH407", "GTH-LDA", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA-q3", "GTH-LDA", "GTH-LDA-q4", "GTH-LDA", "GTH-LDA-q5", "GTH-LDA", "GTH-LDA-q6", "GTH-LDA", "GTH-LDA-q7", "GTH-LDA", "GTH-LDA-q8", "GTH-LDA", "GTH-LDA-q9", "GTH-LDA-q10", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA-q19", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA-q20", "GTH-LDA", "GTH-LDA-q3", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA-q3", "GTH-LDA", "GTH-LDA-q4", "GTH-LDA", "GTH-LDA-q5", "GTH-LDA", "GTH-LDA-q6", "GTH-LDA", "GTH-LDA-q7", "GTH-LDA", "GTH-LDA-q8", "GTH-LDA", "GTH-LDA-q9", "GTH-LDA-q10", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA-q19", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA-q3", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA-q5", "GTH-LDA", "GTH-LDA-q6", "GTH-LDA", "GTH-LDA-q7", "GTH-LDA", "GTH-LDA-q8", "GTH-LDA", "GTH-LDA-q9", "GTH-LDA-q10", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA-q19", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA-q3", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE-q2", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE-q19", "GTH-PBE", "GTH-PBE-q20", "GTH-PBE", "GTH-PBE-q3", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE-q8", "GTH-PBE", "GTH-PBE-q9", "GTH-PBE-q10", "GTH-PBE", "GTH-PBE", "GTH-PBE-q19", "GTH-PBE", "GTH-PBE", "GTH-PBE-q3", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE-q30", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE-q5", "GTH-PBE", "GTH-PBE-q6", "GTH-PBE", "GTH-PBE-q7", "GTH-PBE", "GTH-PBE-q8", "GTH-PBE", "GTH-PBE-q9", "GTH-PBE-q10", "GTH-PBE", "GTH-PBE", "GTH-PBE-q19", "GTH-PBE", "GTH-PBE", "GTH-PBE-q3", "GTH-PBE-q14", "GTH-PBE", "GTH-PBE-q15", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE-q14", "GTH-PBESol", "GTH-OLYP", "GTH-OLYP-q3", "GTH-OLYP-q4", "GTH-OLYP-q5", "GTH-OLYP", "GTH-OLYP-q7", "GTH-OLYP-q5", "GTH-OLYP-q6", "GTH-OLYP-q7", "GTH-HF", "GTH-HF", "GTH-HF", "GTH-HF", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL"}; char * cp2k_pot[421] = {"\n" "H GTH-BLYP-q1 GTH-BLYP\n" " 1\n" " 0.20000000 2 -4.19596147 0.73049821\n" " 0\n" "#","\n" "He GTH-BLYP-q2 GTH-BLYP\n" " 2\n" " 0.20000000 2 -9.14737128 1.71197792\n" " 0\n" "#","\n" "Li GTH-BLYP-q3 GTH-BLYP\n" " 3\n" " 0.40000000 4 -14.11679756 9.67724760 -1.79886461 0.08624957\n" " 0\n" "#","\n" "Be GTH-BLYP-q4 GTH-BLYP\n" " 4\n" " 0.32500000 4 -24.08977105 17.30275720 -3.34561015 0.16601474\n" " 0\n" "#","\n" "B GTH-BLYP-q3 GTH-BLYP\n" " 2 1\n" " 0.42407181 2 -6.10890761 0.98586957\n" " 2\n" " 0.37086003 1 6.34339578\n" " 0.34936716 0\n" "#","\n" "C GTH-BLYP-q4 GTH-BLYP\n" " 2 2\n" " 0.33806609 2 -9.13626871 1.42925956\n" " 2\n" " 0.30232223 1 9.66551228\n" " 0.28637912 0\n" "#","\n" "N GTH-BLYP-q5 GTH-BLYP\n" " 2 3\n" " 0.28287094 2 -12.73646720 1.95107926\n" " 2\n" " 0.25523449 1 13.67893172\n" " 0.24313253 0\n" "#","\n" "O GTH-BLYP-q6 GTH-BLYP\n" " 2 4\n" " 0.24342026 2 -16.99189235 2.56614206\n" " 2\n" " 0.22083140 1 18.38885102\n" " 0.21720070 0\n" "#","\n" "F GTH-BLYP-q7 GTH-BLYP\n" " 2 5\n" " 0.21384014 2 -21.90241518 3.27597572\n" " 2\n" " 0.19459028 1 23.79658295\n" " 0.18786326 0\n" "#","\n" "Ne GTH-BLYP-q8 GTH-BLYP\n" " 2 6\n" " 0.19000000 2 -28.61959769 4.15549516\n" " 2\n" " 0.17823784 2 27.95784886 0.83365601\n" " -1.07624528\n" " 0.15276372 1 0.33116999\n" "#","\n" "Na GTH-BLYP-q9 GTH-BLYP\n" " 3 6\n" " 0.23396502 2 -2.68948346 -0.50947770\n" " 2\n" " 0.14977690 1 32.85715860\n" " 0.12319901 1 -13.99900802\n" "#","\n" "Mg GTH-BLYP-q10 GTH-BLYP\n" " 4 6\n" " 0.20098403 2 -19.33029317 2.86005812\n" " 2\n" " 0.14107967 1 40.67473040\n" " 0.10456134 1 -10.73617094\n" "#","\n" "Mg GTH-BLYP-q2\n" " 2\n" " 0.61697665 1 -3.24611921\n" " 2\n" " 0.60092845 2 3.64729616 -0.76401307\n" " 0.98633664\n" " 0.70217751 1 0.94952736\n" "#","\n" "Al GTH-BLYP-q3 GTH-BLYP\n" " 2 1\n" " 0.45000000 1 -7.66683204\n" " 2\n" " 0.49773601 2 6.46303151 -1.58386957\n" " 2.04476682\n" " 0.56545785 1 1.81826715\n" "#","\n" "Si GTH-BLYP-q4 GTH-BLYP\n" " 2 2\n" " 0.44000000 1 -6.25958674\n" " 2\n" " 0.44465247 2 8.31460936 -2.33277947\n" " 3.01160535\n" " 0.50279207 1 2.33241791\n" "#","\n" "P GTH-BLYP-q5 GTH-BLYP\n" " 2 3\n" " 0.43000000 1 -5.92953335\n" " 2\n" " 0.40286945 2 10.41483915 -3.13168757\n" " 4.04299126\n" " 0.45245811 1 2.95358263\n" "#","\n" "S GTH-BLYP-q6 GTH-BLYP\n" " 2 4\n" " 0.42000000 1 -5.98880045\n" " 2\n" " 0.36973266 2 12.55648450 -3.91290459\n" " 5.05153810\n" " 0.41287571 1 3.58772114\n" "#","\n" "Cl GTH-BLYP-q7 GTH-BLYP\n" " 2 5\n" " 0.41000000 1 -6.35705212\n" " 2\n" " 0.34311864 2 14.68134781 -4.64034312\n" " 5.99065720\n" " 0.38113517 1 4.22292428\n" "#","\n" "Ar GTH-BLYP-q8 GTH-BLYP\n" " 2 6\n" " 0.40000000 1 -7.10000000\n" " 2\n" " 0.32154985 2 16.80099893 -5.32871056\n" " 6.87933576\n" " 0.35544413 1 4.87719604\n" "#","\n" "K GTH-BLYP-q9 GTH-BLYP\n" " 3 6\n" " 0.40000000 2 -2.88013377 -1.21143500\n" " 2\n" " 0.30634684 2 17.51002284 -5.61037883\n" " 7.24296793\n" " 0.32105825 2 6.90321066 -2.19925814\n" " 2.60219733\n" "#","\n" "Ca GTH-BLYP-q10 GTH-BLYP\n" " 4 6\n" " 0.39000000 2 -4.03561119 -1.61257448\n" " 3\n" " 0.28936507 2 20.42566030 -7.23674813\n" " 9.34260166\n" " 0.31177925 2 7.53169389 -2.08537690\n" " 2.46745122\n" " 0.69141876 1 0.05522276\n" "#","\n" "Sc GTH-BLYP-q11 GTH-BLYP\n" " 4 6 1\n" " 0.37687548 2 9.84009747 -1.16586015\n" " 3\n" " 0.35998897 2 3.30610316 2.54796421\n" " -3.28940766\n" " 0.22099375 2 -0.43488219 6.46425824\n" " -7.64861350\n" " 0.23338021 1 -10.13403863\n" "#","\n" "Ti GTH-BLYP-q12 GTH-BLYP\n" " 4 6 2\n" " 0.38000000 2 8.71144218 -0.70028677\n" " 3\n" " 0.33777078 2 2.57526386 3.69297065\n" " -4.76760461\n" " 0.24253135 2 -4.63054123 8.87087502\n" " -10.49616087\n" " 0.24331694 1 -9.40665268\n" "#","\n" "V GTH-BLYP-q13 GTH-BLYP\n" " 4 6 3\n" " 0.37500000 2 7.09567441 -0.32225919\n" " 3\n" " 0.32984260 2 1.99203993 4.73916314\n" " -6.11823331\n" " 0.24621323 2 -5.54974480 8.76420181\n" " -10.36994343\n" " 0.24115328 1 -9.44436162\n" "#","\n" "Cr GTH-BLYP-q14 GTH-BLYP\n" " 3 6 5\n" " 0.37000000 2 5.81498098 -0.67571792\n" " 3\n" " 0.31671447 2 2.60698311 5.06715750\n" " -6.54167220\n" " 0.23961307 2 -4.66668172 7.57290229\n" " -8.96037883\n" " 0.22092939 1 -11.18989241\n" "#","\n" "Mn GTH-BLYP-q15 GTH-BLYP\n" " 4 6 5\n" " 0.36500000 2 6.17870291 -0.44450988\n" " 3\n" " 0.29784355 2 1.69433567 6.39053422\n" " -8.25014420\n" " 0.24582549 2 -6.53742440 7.84591162\n" " -9.28340782\n" " 0.22244655 1 -11.66961579\n" "#","\n" "Fe GTH-BLYP-q16 GTH-BLYP\n" " 4 6 6\n" " 0.36000000 2 7.01102510 -0.22274667\n" " 3\n" " 0.27620533 2 0.61149598 7.99235733\n" " -10.31808895\n" " 0.24713005 2 -8.71055592 8.68416924\n" " -10.27524761\n" " 0.22353398 1 -12.41150401\n" "#","\n" "Co GTH-BLYP-q17 GTH-BLYP\n" " 4 6 7\n" " 0.35500000 2 3.43297847 0.61491331\n" " 3\n" " 0.27555403 2 0.19362864 9.18128009\n" " -11.85298162\n" " 0.24312795 2 -8.92204873 9.23263048\n" " -10.92419570\n" " 0.22362456 1 -11.75878279\n" "#","\n" "Ni GTH-BLYP-q18 GTH-BLYP\n" " 4 6 8\n" " 0.35000000 2 4.07602942 0.23312841\n" " 3\n" " 0.25714683 2 0.09878517 10.14864210\n" " -13.10184061\n" " 0.24975271 2 -8.34861501 7.26677120\n" " -8.59815964\n" " 0.21247761 1 -13.67293293\n" "#","\n" "Cu GTH-BLYP-q11 GTH-BLYP\n" " 1 0 10\n" " 0.53000000 0\n" " 3\n" " 0.43078178 3 10.29852604 -6.05837033 1.70054574\n" " 10.58726032 -4.39079021\n" " 3.48508169\n" " 0.55080544 2 2.74458701 -0.86295510\n" " 1.02106225\n" " 0.26558610 1 -12.66158247\n" "#","\n" "Cu GTH-BLYP-q19\n" " 3 6 10\n" " 0.34500000 2 0.00729001 1.26270041\n" " 3\n" " 0.25025136 2 0.78207556 10.69795592\n" " -13.81100171\n" " 0.22145058 2 -13.10305990 14.86802590\n" " -17.59208548\n" " 0.21548515 1 -12.45211713\n" "#","\n" "Zn GTH-BLYP-q12 GTH-BLYP\n" " 2 0 10\n" " 0.51000000 0\n" " 3\n" " 0.39855016 3 11.95945993 -8.66522085 2.80807710\n" " 15.75408976 -7.25042390\n" " 5.75484556\n" " 0.54556247 2 2.51050004 -0.44032483\n" " 0.52099937\n" " 0.25168465 1 -14.32309848\n" "#","\n" "Zn GTH-BLYP-q20\n" " 4 6 10\n" " 0.34000000 2 0.69029187 1.23803712\n" " 3\n" " 0.24511603 2 -1.58948215 12.87573398\n" " -16.62250109\n" " 0.23151219 2 -10.91449266 9.54377070\n" " -11.29234178\n" " 0.20860634 1 -14.24182139\n" "#","\n" "Ga GTH-BLYP-q13 GTH-BLYP\n" " 2 1 10\n" " 0.49000000 0\n" " 3\n" " 0.39467346 3 12.48450375 -7.17987436 1.92607131\n" " 12.40193316 -4.97309473\n" " 3.94727157\n" " 0.58027448 2 1.59145844 0.32153951\n" " -0.38045068\n" " 0.23867979 1 -16.11979876\n" "#","\n" "Ga GTH-BLYP-q3\n" " 2 1\n" " 0.56000000 0\n" " 3\n" " 0.57532960 3 2.06609505 1.21904266 -0.87326380\n" " -2.99414098 2.25475743\n" " -1.78965823\n" " 0.67710486 2 0.14524752 0.72041368\n" " -0.85240496\n" " 0.94154174 1 0.10030959\n" "#","\n" "Ge GTH-BLYP-q4 GTH-BLYP\n" " 2 2\n" " 0.54000000 0\n" " 3\n" " 0.42737427 3 7.55651469 -0.07090242 -1.72596317\n" " -2.71574467 4.45641774\n" " -3.53717192\n" " 0.57489897 2 0.80056266 0.71307408\n" " -0.84372063\n" " 0.78547258 1 0.21870790\n" "#","\n" "As GTH-BLYP-q5 GTH-BLYP\n" " 2 3\n" " 0.52000000 0\n" " 3\n" " 0.45698284 3 5.57976394 0.11777254 -0.99243898\n" " -1.76624582 2.56246643\n" " -2.03389468\n" " 0.55494716 2 1.00097684 0.68325082\n" " -0.80843328\n" " 0.68498074 1 0.34818137\n" "#","\n" "Se GTH-BLYP-q6 GTH-BLYP\n" " 2 4\n" " 0.51000000 0\n" " 3\n" " 0.43367514 3 6.43369922 -0.22063995 -1.17545323\n" " -1.62702987 3.03500718\n" " -2.40896227\n" " 0.47248310 2 2.23970327 0.40191857\n" " -0.47555647\n" " 0.60911821 1 0.49494679\n" "#","\n" "Br GTH-BLYP-q7 GTH-BLYP\n" " 2 5\n" " 0.50000000 0\n" " 3\n" " 0.43612268 3 6.23128313 0.21889262 -1.12467641\n" " -2.11187548 2.90390201\n" " -2.30490077\n" " 0.45379296 2 2.46574310 0.49636818\n" " -0.58731075\n" " 0.53315603 1 0.74724056\n" "#","\n" "Kr GTH-BLYP-q8 GTH-BLYP\n" " 2 6\n" " 0.50000000 0\n" " 3\n" " 0.42362066 3 6.37382917 0.49858632 -1.41991709\n" " -2.95316749 3.66621015\n" " -2.90996409\n" " 0.43391338 2 2.63230352 0.64517712\n" " -0.76338386\n" " 0.51315369 1 0.70954468\n" "#","\n" "Rb GTH-BLYP-q9\n" " 3 6\n" " 0.49000000 2 5.75447985 -0.48374192\n" " 3\n" " 0.25518839 2 30.72215135 -12.19094908\n" " 15.73844759\n" " 0.33800292 1 4.39362252\n" " 0.58372659 1 0.18537105\n" "#","\n" "Sr GTH-BLYP-q10 GTH-BLYP\n" " 4 6\n" " 0.48000000 2 6.75494554 -1.12140847\n" " 3\n" " 0.27574829 2 20.90591056 -7.66251431\n" " 9.89226343\n" " 0.27951874 2 11.83709620 -11.14034857\n" " 13.18143819\n" " 0.53145306 1 0.32212393\n" "#","\n" "Y GTH-BLYP-q11 GTH-BLYP\n" " 4 6 1\n" " 0.47500000 2 12.12173196 -2.23590662\n" " 3\n" " 0.24768420 2 22.15257967 -7.66355161\n" " 9.89360259\n" " 0.29467778 2 5.85308697 -5.77308732\n" " 6.83080904\n" " 0.45213814 2 1.12663777 -1.27929123\n" " 1.45057990\n" "#","\n" "Zr GTH-BLYP-q12 GTH-BLYP\n" " 4 6 2\n" " 0.47000000 2 7.68287419 -1.83482397\n" " 3\n" " 0.26098833 2 22.58608773 -8.39346102\n" " 10.83591158\n" " 0.28950143 2 8.50003567 -5.29014738\n" " 6.25938680\n" " 0.57680903 2 0.04082300 0.26426022\n" " -0.29964293\n" "#","\n" "Mo GTH-BLYP-q14 GTH-BLYP\n" " 3 6 5\n" " 0.43000000 2 28.10289595 -4.36588317\n" " 3\n" " 0.34238035 2 -0.06850864 2.98011244\n" " -3.84730862\n" " 0.41442576 2 -0.15765657 -0.95307240\n" " 1.12769047\n" " 0.42539061 2 1.13742343 -2.64549690\n" " 2.99971152\n" "#","\n" "Ru GTH-BLYP-q16 GTH-BLYP\n" " 3 6 7\n" " 0.43000000 2 26.85974124 -5.05749455\n" " 3\n" " 0.33894617 2 -0.50446833 3.70095133\n" " -4.77790762\n" " 0.42823486 2 0.15024145 -1.32523126\n" " 1.56803477\n" " 0.43752832 2 1.52972881 -2.96335285\n" " 3.36012630\n" "#","\n" "Rh GTH-BLYP-q17 GTH-BLYP\n" " 3 6 8\n" " 0.42000000 2 27.21859006 -5.26666561\n" " 3\n" " 0.33775970 2 -0.37805742 3.85156484\n" " -4.97234883\n" " 0.40476998 2 -0.26519119 -0.79135076\n" " 0.93633885\n" " 0.43219447 2 1.68856873 -3.13689837\n" " 3.55690842\n" "#","\n" "Pd GTH-BLYP-q18 GTH-BLYP\n" " 2 6 10\n" " 0.41000000 2 26.65379780 -4.86862194\n" " 3\n" " 0.33643267 2 -0.66218232 4.36901475\n" " -5.64037379\n" " 0.41121734 2 -0.16335747 -0.94666822\n" " 1.12011294\n" " 0.44038158 2 1.64374463 -3.09751466\n" " 3.51225149\n" "#","\n" "Ag GTH-BLYP-q11 GTH-BLYP\n" " 1 0 10\n" " 0.57000000 1 0.27329871\n" " 3\n" " 0.53113691 3 9.45447859 -4.73986410 0.59512748\n" " 7.08711317 -1.53661256\n" " 1.21964841\n" " 0.62572123 2 3.90619533 -1.71774975\n" " 2.03246891\n" " 0.40832785 2 -2.77610164 -0.36178338\n" " 0.41022380\n" "#","\n" "Ag GTH-BLYP-q19\n" " 3 6 10\n" " 0.40000000 2 24.37631116 -4.16834876\n" " 3\n" " 0.31731325 2 0.69929536 4.25162666\n" " -5.48882642\n" " 0.41393281 2 -0.30767006 -0.44941724\n" " 0.53175765\n" " 0.45569543 2 1.75618266 -3.09368795\n" " 3.50791241\n" "#","\n" "In GTH-BLYP-q13 GTH-BLYP\n" " 2 1 10\n" " 0.53000000 1 3.57797710\n" " 3\n" " 0.47995615 3 11.20107941 -6.26219645 1.21444270\n" " 10.05975207 -3.13567758\n" " 2.48886692\n" " 0.56617182 2 4.78019859 -2.24059762\n" " 2.65111085\n" " 0.37728287 2 -4.24415179 -0.59846912\n" " 0.67860020\n" "#","\n" "In GTH-BLYP-q3\n" " 2 1\n" " 0.61000000 1 3.20683546\n" " 3\n" " 0.72668632 3 0.70288050 1.01907230 -0.54239646\n" " -2.19782459 1.40046163\n" " -1.11158196\n" " 0.85226033 2 0.01176733 0.48673996\n" " -0.57591849\n" " 1.06121328 1 0.15160282\n" "#","\n" "Sb GTH-BLYP-q5 GTH-BLYP\n" " 2 3\n" " 0.59000000 1 7.71520811\n" " 3\n" " 0.56281517 3 1.46135468 1.28119333 -0.94856576\n" " -3.19685579 2.44918625\n" " -1.94398132\n" " 0.64746318 2 0.46086693 0.43857096\n" " -0.51892416\n" " 0.85920174 1 0.31255771\n" "#","\n" "Te GTH-BLYP-q6 GTH-BLYP\n" " 2 4\n" " 0.57500000 1 8.54112001\n" " 3\n" " 0.57657850 3 1.45132840 0.97095302 -0.49085149\n" " -2.05186498 1.26737311\n" " -1.00594622\n" " 0.60434855 2 0.70106128 0.40189978\n" " -0.47553423\n" " 0.79625711 1 0.38178821\n" "#","\n" "I GTH-BLYP-q7 GTH-BLYP\n" " 2 5\n" " 0.56000000 1 13.73638610\n" " 3\n" " 0.58939001 3 0.21393489 0.88456526 -0.02067022\n" " -1.17558896 0.05337028\n" " -0.04236135\n" " 0.54232717 2 0.28721066 0.46932671\n" " -0.55531485\n" " 0.77040507 1 0.30709615\n" "#","\n" "Xe GTH-BLYP-q8\n" " 2 6\n" " 0.56000000 1 8.59949070\n" " 3\n" " 0.49592925 3 2.81672987 1.44752782 -1.40786958\n" " -4.15865041 3.63510361\n" " -2.88527404\n" " 0.48311258 1 2.11273917\n" " 0.69721940 1 0.50983839\n" "#","\n" "Cs GTH-BLYP-q9\n" " 3 6\n" " 0.54000000 2 33.07782844 -2.80842052\n" " 4\n" " 0.45607453 2 -3.56881717 2.63732767\n" " -3.40477539\n" " 0.36820141 2 -5.01061387 0.77988492\n" " -0.92277228\n" " 0.75684499 1 0.20052308\n" " 0.58463791 1 -1.70870691\n" "#","\n" "Ba GTH-BLYP-q10 GTH-BLYP\n" " 4 6\n" " 0.54000000 2 24.53545105 -2.47807384\n" " 4\n" " 0.48569784 2 0.09387924 1.15171729\n" " -1.48686063\n" " 0.39622579 2 0.84537359 -1.74106987\n" " 2.06006165\n" " 0.66014281 1 0.42755776\n" " 0.30049122 1 -19.65179380\n" "#","\n" "Ba GTH-BLYP-q2\n" " 2\n" " 1.20000000 0\n" " 3\n" " 1.03638675 3 1.42164527 -0.44534139 -0.07451309\n" " 0.45373771 0.19239197\n" " -0.15270639\n" " 1.25440147 2 0.73041014 -0.29211206\n" " 0.34563165\n" " 0.87881774 1 -0.85472852\n" "#","\n" "Ce GTH-BLYP-q12 GTH-BLYP\n" " 4 6 1 1\n" " 0.52864798 2 19.13548995 -0.59690386\n" " 4\n" " 0.52094620 2 -0.55473220 1.70057992\n" " -2.19543924\n" " 0.45984533 2 -0.92453341 1.99827739\n" " -2.36439369\n" " 0.67639660 1 0.10451755\n" " 0.30436847 1 -17.54504586\n" "#","\n" "Gd GTH-BLYP-q18 GTH-BLYP\n" " 4 6 1 7\n" " 0.52166157 2 18.16996137 -0.54313383\n" " 4\n" " 0.45763555 2 -2.89847533 3.94756205\n" " -5.09628069\n" " 0.45903313 3 -3.22259659 2.93618073 -0.30453227\n" " -3.98113568 0.72065489\n" " -0.51217326\n" " 0.48380572 1 -0.84857548\n" " 0.27560057 1 -22.19038178\n" "#","\n" "W GTH-BLYP-q14 GTH-BLYP\n" " 4 6 4\n" " 0.54000000 2 6.68380890 -0.31709158\n" " 3\n" " 0.39238521 3 -1.92936041 4.30955402 2.23540296\n" " -1.92772713 -5.77178561\n" " 4.58121281\n" " 0.39242369 2 -5.22265341 6.11414396\n" " -7.23435270\n" " 0.37281208 2 -6.46250589 7.70934709\n" " -8.74157793\n" "#","\n" "Au GTH-BLYP-q11 GTH-BLYP\n" " 1 0 10\n" " 0.59000000 1 10.81589381\n" " 3\n" " 0.52572747 2 6.71867015 -2.66620610\n" " 3.44205728\n" " 0.60526597 2 4.32132354 -4.09465015\n" " 4.84485539\n" " 0.43903160 2 -7.45153985 3.06802476\n" " -3.47881309\n" "#","\n" "Au GTH-BLYP-q19\n" " 3 6 10\n" " 0.49000000 2 9.10574107 -0.31170627\n" " 3\n" " 0.28881911 3 -5.84394846 25.76364500 -14.96878334\n" " -57.60745060 38.64923240\n" " -30.67687719\n" " 0.35793393 2 -6.87735522 7.88320706\n" " -9.32753639\n" " 0.33407191 2 -8.71118504 9.49731666\n" " -10.76894486\n" "#","\n" "Pb GTH-BLYP-q4\n" " 2 2\n" " 0.61750000 1 5.33520808\n" " 3\n" " 0.62372070 3 0.77431309 2.33644883 -1.62011026\n" " -5.65145200 4.18310671\n" " -3.32023802\n" " 0.81430558 2 0.08023553 0.61572271\n" " -0.72853293\n" " 0.95575855 1 0.39678153\n" "#","\n" "Bi GTH-BLYP-q15\n" " 2 3 10\n" " 0.51000000 1 13.61415171\n" " 3\n" " 0.47534187 2 10.01031001 -4.17527106\n" " 5.39025176\n" " 0.54300464 2 5.84572146 -3.45677684\n" " 4.09011352\n" " 0.39904006 2 -5.95513083 0.85300728\n" " -0.96721934\n" "#","\n" "Bi GTH-BLYP-q5 GTH-BLYP\n" " 2 3\n" " 0.60500000 1 8.13212850\n" " 3\n" " 0.59003694 3 0.58526544 2.28713930 -1.46002100\n" " -5.32740847 3.76975801\n" " -2.99215266\n" " 0.77185023 2 0.16538598 0.48986468\n" " -0.57961570\n" " 0.93145569 1 0.39528270\n" "#","\n" "H GTH-BP-q1 GTH-BP\n" " 1\n" " 0.20000000 2 -4.18576872 0.72693955\n" " 0\n" "#","\n" "He GTH-BP-q2 GTH-BP\n" " 2\n" " 0.20000000 2 -9.13007508 1.70547521\n" " 0\n" "#","\n" "Li GTH-BP-q3 GTH-BP\n" " 3\n" " 0.40000000 4 -14.06056862 9.58589939 -1.77248513 0.08455183\n" " 0\n" "#","\n" "Be GTH-BP-q4 GTH-BP\n" " 4\n" " 0.32500000 4 -24.05179710 17.25001598 -3.33397632 0.16556913\n" " 0\n" "#","\n" "B GTH-BP-q3 GTH-BP\n" " 2 1\n" " 0.41689069 2 -5.92229378 0.92456157\n" " 2\n" " 0.37107711 1 6.29599634\n" " 0.35853552 0\n" "#","\n" "C GTH-BP-q4 GTH-BP\n" " 2 2\n" " 0.33679692 2 -8.86848685 1.35447596\n" " 2\n" " 0.30241022 1 9.62271161\n" " 0.28961690 0\n" "#","\n" "N GTH-BP-q5 GTH-BP\n" " 2 3\n" " 0.28309178 2 -12.45088915 1.87519554\n" " 2\n" " 0.25528977 1 13.63656889\n" " 0.24443710 0\n" "#","\n" "O GTH-BP-q6 GTH-BP\n" " 2 4\n" " 0.24401839 2 -16.70590802 2.49292672\n" " 2\n" " 0.22086487 1 18.34759371\n" " 0.21290362 0\n" "#","\n" "F GTH-BP-q7 GTH-BP\n" " 2 5\n" " 0.21448854 2 -21.61832219 3.20543202\n" " 2\n" " 0.19461036 1 23.75712327\n" " 0.18640875 0\n" "#","\n" "Ne GTH-BP-q8 GTH-BP\n" " 2 6\n" " 0.19000000 2 -27.05603079 4.33563519\n" " 2\n" " 0.17609718 2 28.15075707 0.83365601\n" " -1.07624528\n" " 0.19349680 1 -0.24066336\n" "#","\n" "Na GTH-BP-q1\n" " 1\n" " 0.75473588 1 -2.13985326\n" " 2\n" " 0.72207334 2 2.08932802 -0.33891173\n" " 0.43753317\n" " 0.87531990 1 0.49722485\n" "#","\n" "Na GTH-BP-q9 GTH-BP\n" " 3 6\n" " 0.21033221 2 1.69258850 0.50357981\n" " 2\n" " 0.13173054 1 40.12933608\n" " 0.14067337 1 -12.69190352\n" "#","\n" "Mg GTH-BP-q10 GTH-BP\n" " 4 6\n" " 0.20344528 2 -19.14863290 2.82311627\n" " 2\n" " 0.14101308 1 40.61528144\n" " 0.10485644 1 -10.81236006\n" "#","\n" "Al GTH-BP-q3 GTH-BP\n" " 2 1\n" " 0.45000000 1 -7.51792352\n" " 2\n" " 0.48626591 2 6.97775636 -1.91568248\n" " 2.47313545\n" " 0.56192765 1 1.85584177\n" "#","\n" "Si GTH-BP-q4 GTH-BP\n" " 2 2\n" " 0.44000000 1 -6.31784112\n" " 2\n" " 0.43603553 2 8.90462481 -2.69406309\n" " 3.47802049\n" " 0.49841919 1 2.41937486\n" "#","\n" "P GTH-BP-q5 GTH-BP\n" " 2 3\n" " 0.43000000 1 -5.89229627\n" " 2\n" " 0.39681575 2 10.93288778 -3.45803253\n" " 4.46430080\n" " 0.44912129 1 3.03004831\n" "#","\n" "S GTH-BP-q6 GTH-BP\n" " 2 4\n" " 0.42000000 1 -6.03304243\n" " 2\n" " 0.36545997 2 13.05126503 -4.21706733\n" " 5.44421051\n" " 0.41024550 1 3.67822896\n" "#","\n" "Cl GTH-BP-q7 GTH-BP\n" " 2 5\n" " 0.41000000 1 -6.39460178\n" " 2\n" " 0.34001772 2 15.11347341 -4.90811514\n" " 6.33634940\n" " 0.37914105 1 4.30633607\n" "#","\n" "Ar GTH-BP-q8 GTH-BP\n" " 2 6\n" " 0.40000000 1 -7.10000000\n" " 2\n" " 0.31922565 2 17.15805529 -5.55332249\n" " 7.16930851\n" " 0.35391145 1 4.94347383\n" "#","\n" "K GTH-BP-q9 GTH-BP\n" " 3 6\n" " 0.40000000 2 -3.20803677 -1.13958016\n" " 2\n" " 0.30531669 2 17.82113209 -5.62459155\n" " 7.26131647\n" " 0.31728644 2 7.27073764 -2.45836276\n" " 2.90877405\n" "#","\n" "Ca GTH-BP-q10 GTH-BP\n" " 4 6\n" " 0.39000000 2 -5.15066460 -1.27635919\n" " 3\n" " 0.29180561 2 20.37501847 -6.39225402\n" " 8.25236446\n" " 0.30585091 2 8.08679088 -2.35194765\n" " 2.78286199\n" " 0.69084590 1 0.05057463\n" "#","\n" "Sc GTH-BP-q11 GTH-BP\n" " 4 6 1\n" " 0.38500000 2 8.15113811 -0.54578786\n" " 3\n" " 0.36408582 2 2.63374349 3.01189542\n" " -3.88834027\n" " 0.24337293 2 -2.59643301 7.97785436\n" " -9.43952457\n" " 0.25316272 1 -8.16168667\n" "#","\n" "Ti GTH-BP-q12 GTH-BP\n" " 4 6 2\n" " 0.38000000 2 8.75240544 -0.72051287\n" " 3\n" " 0.33725619 2 2.57793688 3.67192953\n" " -4.74044064\n" " 0.24244686 2 -4.63571761 8.84700754\n" " -10.46792049\n" " 0.24327738 1 -9.40815808\n" "#","\n" "V GTH-BP-q13 GTH-BP\n" " 4 6 3\n" " 0.37500000 2 7.15179161 -0.34356487\n" " 3\n" " 0.32978741 2 1.96706044 4.72624160\n" " -6.10155167\n" " 0.24617385 2 -5.58236403 8.79691014\n" " -10.40864444\n" " 0.24115908 1 -9.44742960\n" "#","\n" "Cr GTH-BP-q14 GTH-BP\n" " 3 6 5\n" " 0.37000000 2 5.65864275 -0.68098927\n" " 3\n" " 0.31450745 2 2.82535174 5.00194988\n" " -6.45748952\n" " 0.24079099 2 -4.43722064 7.25268232\n" " -8.58148945\n" " 0.22035720 1 -11.18549799\n" "#","\n" "Mn GTH-BP-q15 GTH-BP\n" " 4 6 5\n" " 0.36500000 2 6.08697327 -0.45767880\n" " 3\n" " 0.29664936 2 1.82641604 6.37301365\n" " -8.22752524\n" " 0.24691092 2 -6.51555304 7.91051030\n" " -9.35984202\n" " 0.22235797 1 -11.61828411\n" "#","\n" "Fe GTH-BP-q16 GTH-BP\n" " 4 6 6\n" " 0.36000000 2 6.76627078 -0.22960467\n" " 3\n" " 0.27801949 2 0.64092335 7.90310889\n" " -10.20286971\n" " 0.25211093 2 -7.91342590 7.66613465\n" " -9.07069285\n" " 0.22286543 1 -12.38774903\n" "#","\n" "Co GTH-BP-q17 GTH-BP\n" " 4 6 7\n" " 0.35500000 2 3.11870813 0.60978675\n" " 3\n" " 0.27344715 2 0.60869990 9.05959793\n" " -11.69589063\n" " 0.24486485 2 -8.73194160 9.19441838\n" " -10.87898254\n" " 0.22321373 1 -11.65940289\n" "#","\n" "Ni GTH-BP-q18 GTH-BP\n" " 4 6 8\n" " 0.35000000 2 1.98092026 0.67873534\n" " 3\n" " 0.26151729 2 0.64051423 9.97129765\n" " -12.87288991\n" " 0.22299669 2 -11.03584887 12.32415881\n" " -14.58214136\n" " 0.21531615 1 -12.60737765\n" "#","\n" "Cu GTH-BP-q11 GTH-BP\n" " 1 0 10\n" " 0.53000000 0\n" " 3\n" " 0.42826021 3 9.92997278 -6.73378071 2.06123370\n" " 12.04587038 -5.32208253\n" " 4.22427205\n" " 0.56179993 2 2.52706517 -0.76026621\n" " 0.89955911\n" " 0.26481830 1 -12.79028986\n" "#","\n" "Zn GTH-BP-q12 GTH-BP\n" " 2 0 10\n" " 0.51000000 0\n" " 3\n" " 0.39853504 3 11.71430184 -8.95271466 3.10389577\n" " 16.60639177 -8.01422441\n" " 6.36109342\n" " 0.54277993 2 2.59454952 -0.56410898\n" " 0.66746275\n" " 0.25119891 1 -14.42369639\n" "#","\n" "Ga GTH-BP-q13 GTH-BP\n" " 2 1 10\n" " 0.49000000 0\n" " 3\n" " 0.39614555 3 12.22933993 -7.15254431 2.02087227\n" " 12.52084398 -5.21786976\n" " 4.14155572\n" " 0.57682875 2 1.65710194 0.27257669\n" " -0.32251709\n" " 0.23837295 1 -16.19719645\n" "#","\n" "Ge GTH-BP-q4 GTH-BP\n" " 2 2\n" " 0.54000000 0\n" " 3\n" " 0.42652691 3 7.46008807 -0.10148543 -1.79977798\n" " -2.79632198 4.64700676\n" " -3.68844727\n" " 0.57081829 2 0.83232240 0.67204801\n" " -0.79517793\n" " 0.80229340 1 0.20140599\n" "#","\n" "As GTH-BP-q5 GTH-BP\n" " 2 3\n" " 0.52000000 0\n" " 3\n" " 0.45615688 3 5.51837021 0.17312741 -1.14220882\n" " -2.08130930 2.94917048\n" " -2.34083150\n" " 0.55642685 2 0.96871581 0.69251828\n" " -0.81939868\n" " 0.70085191 1 0.31310326\n" "#","\n" "Se GTH-BP-q6 GTH-BP\n" " 2 4\n" " 0.51000000 0\n" " 3\n" " 0.43378134 3 6.42760223 -0.11666018 -1.25092543\n" " -1.88402272 3.22987558\n" " -2.56363426\n" " 0.47287696 2 2.19350862 0.46354749\n" " -0.54847679\n" " 0.61779280 1 0.45787624\n" "#","\n" "Br GTH-BP-q7 GTH-BP\n" " 2 5\n" " 0.50000000 0\n" " 3\n" " 0.43844329 3 6.02809057 0.36950836 -1.26583607\n" " -2.53591576 3.26837467\n" " -2.59419197\n" " 0.45265302 2 2.45444938 0.55326441\n" " -0.65463128\n" " 0.57270080 1 0.53453193\n" "#","\n" "Kr GTH-BP-q8 GTH-BP\n" " 2 6\n" " 0.50000000 0\n" " 3\n" " 0.42201160 3 6.43640090 0.55484448 -1.49019203\n" " -3.14009866 3.84765927\n" " -3.05398486\n" " 0.43381353 2 2.58759250 0.72129118\n" " -0.85344324\n" " 0.54760510 1 0.52878835\n" "#","\n" "Zr GTH-BP-q12 GTH-BP\n" " 4 6 2\n" " 0.47000000 2 7.71710396 -1.87349588\n" " 3\n" " 0.26012850 2 23.33316266 -8.48756302\n" " 10.95739674\n" " 0.28909449 2 8.57471103 -5.33803887\n" " 6.31605277\n" " 0.57923104 2 0.03180631 0.27415481\n" " -0.31086233\n" "#","\n" "Ru GTH-BP-q16 GTH-BP\n" " 3 6 7\n" " 0.43000000 2 14.95348689 -0.02426473\n" " 3\n" " 0.35723814 2 -1.36117090 5.92761103\n" " -7.65251293\n" " 0.36153743 2 -4.67111662 4.55280704\n" " -5.38695393\n" " 0.47093469 2 0.51873585 -2.29176040\n" " 2.59861204\n" "#","\n" "Te GTH-BP-q6 GTH-BP\n" " 2 4\n" " 0.57500000 1 8.45045608\n" " 3\n" " 0.57841719 3 1.43632249 1.01620377 -0.52198665\n" " -2.16092478 1.34776374\n" " -1.06975431\n" " 0.60416533 2 0.67900355 0.42745229\n" " -0.50576837\n" " 0.80633893 1 0.35636810\n" "#","\n" "Cs GTH-BP-q1\n" " 1\n" " 1.20000000 0\n" " 3\n" " 1.15311277 3 0.93256439 0.00814108 -0.14921814\n" " -0.25321342 0.38527959\n" " -0.30580619\n" " 1.29745832 2 0.63229903 -0.43114835\n" " 0.51014161\n" " 1.01147944 1 -0.69777439\n" "#","\n" "Cs GTH-BP-q9 GTH-BP\n" " 3 6\n" " 0.54000000 2 33.18925821 -2.80669630\n" " 4\n" " 0.44888547 2 -3.15382781 3.31288554\n" " -4.27691685\n" " 0.36087547 2 -5.24766705 3.25354824\n" " -3.84965020\n" " 0.76171895 1 0.18517971\n" " 0.33862935 1 -16.82118432\n" "#","\n" "Au GTH-BP-q11\n" " 1 0 10\n" " 0.59000000 1 10.62376865\n" " 3\n" " 0.53803750 2 6.00785520 -2.34452337\n" " 3.02676666\n" " 0.60560054 2 4.37533897 -4.26458410\n" " 5.04592396\n" " 0.43922932 2 -7.29174553 2.89836819\n" " -3.28644061\n" "#","\n" "H GTH-HCTH120-q1 GTH-HCTH120\n" " 1\n" " 0.20000000 2 -4.17956174 0.72571934\n" " 0\n" "#","\n" "C GTH-HCTH120-q4 GTH-HCTH120\n" " 2 2\n" " 0.33476327 2 -8.73799634 1.35592059\n" " 2\n" " 0.30224259 1 9.60562026\n" " 0.29150776 0\n" "#","\n" "N GTH-HCTH120-q5 GTH-HCTH120\n" " 2 3\n" " 0.28289705 2 -12.19488993 1.83989918\n" " 2\n" " 0.25526540 1 13.60420273\n" " 0.24618482 0\n" "#","\n" "O GTH-HCTH120-q6 GTH-HCTH120\n" " 2 4\n" " 0.24476117 2 -16.35853832 2.42680904\n" " 2\n" " 0.22092765 1 18.29885210\n" " 0.21259318 0\n" "#","\n" "F GTH-HCTH120-q7 GTH-HCTH120\n" " 2 5\n" " 0.21555878 2 -21.21402136 3.11524496\n" " 2\n" " 0.19472662 1 23.68789289\n" " 0.18667491 0\n" "#","\n" "P GTH-HCTH120-q5 GTH-HCTH120\n" " 2 3\n" " 0.43000000 1 -5.55967117\n" " 2\n" " 0.39982658 2 10.60103244 -3.26897992\n" " 4.22023493\n" " 0.45131904 1 2.95015425\n" "#","\n" "Ar GTH-HCTH120-q8 GTH-HCTH120\n" " 2 6\n" " 0.40000000 1 -7.01660399\n" " 2\n" " 0.31726372 2 17.43470209 -5.68655497\n" " 7.34131090\n" " 0.35199759 1 4.99753699\n" "#","\n" "H GTH-HCTH407-q1 GTH-HCTH407\n" " 1\n" " 0.20000000 2 -4.17855435 0.72595112\n" " 0\n" "#","\n" "C GTH-HCTH407-q4 GTH-HCTH407\n" " 2 2\n" " 0.33895449 2 -8.64070432 1.35762517\n" " 2\n" " 0.30236220 1 9.59681173\n" " 0.29159277 0\n" "#","\n" "N GTH-HCTH407-q5 GTH-HCTH407\n" " 2 3\n" " 0.28580927 2 -12.16723704 1.85814414\n" " 2\n" " 0.25533910 1 13.60665370\n" " 0.24645801 0\n" "#","\n" "O GTH-HCTH407-q6 GTH-HCTH407\n" " 2 4\n" " 0.24634413 2 -16.39807931 2.45634724\n" " 2\n" " 0.22101140 1 18.29754812\n" " 0.21441275 0\n" "#","\n" "H GTH-PADE-q1 GTH-LDA-q1 GTH-PADE GTH-LDA\n" " 1\n" " 0.20000000 2 -4.18023680 0.72507482\n" " 0\n" "#","\n" "He GTH-PADE-q2 GTH-LDA-q2 GTH-PADE GTH-LDA\n" " 2\n" " 0.20000000 2 -9.11202340 1.69836797\n" " 0\n" "#","\n" "Li GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 0.78755305 2 -1.89261247 0.28605968\n" " 2\n" " 0.66637518 1 1.85881111\n" " 1.07930561 1 -0.00589504\n" "#","\n" "Li GTH-PADE-q3 GTH-LDA-q3 GTH-PADE GTH-LDA\n" " 3\n" " 0.40000000 4 -14.03486849 9.55347627 -1.76648817 0.08436998\n" " 0\n" "#","\n" "Be GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 0.73900865 2 -2.59295078 0.35483893\n" " 2\n" " 0.52879656 1 3.06166591\n" " 0.65815348 1 0.09246196\n" "#","\n" "Be GTH-PADE-q4 GTH-LDA-q4 GTH-PADE GTH-LDA\n" " 4\n" " 0.32500000 4 -24.01504092 17.20401444 -3.32639018 0.16541943\n" " 0\n" "#","\n" "B GTH-PADE-q3 GTH-LDA-q3 GTH-PADE GTH-LDA\n" " 2 1\n" " 0.43392956 2 -5.57864173 0.80425145\n" " 2\n" " 0.37384326 1 6.23392822\n" " 0.36039317 0\n" "#","\n" "C GTH-PADE-q4 GTH-LDA-q4 GTH-PADE GTH-LDA\n" " 2 2\n" " 0.34883045 2 -8.51377110 1.22843203\n" " 2\n" " 0.30455321 1 9.52284179\n" " 0.23267730 0\n" "#","\n" "N GTH-PADE-q5 GTH-LDA-q5 GTH-PADE GTH-LDA\n" " 2 3\n" " 0.28917923 2 -12.23481988 1.76640728\n" " 2\n" " 0.25660487 1 13.55224272\n" " 0.27013369 0\n" "#","\n" "O GTH-PADE-q6 GTH-LDA-q6 GTH-PADE GTH-LDA\n" " 2 4\n" " 0.24762086 2 -16.58031797 2.39570092\n" " 2\n" " 0.22178614 1 18.26691718\n" " 0.25682890 0\n" "#","\n" "F GTH-PADE-q7 GTH-LDA-q7 GTH-PADE GTH-LDA\n" " 2 5\n" " 0.21852465 2 -21.30736112 3.07286942\n" " 2\n" " 0.19556721 1 23.58494211\n" " 0.17426832 0\n" "#","\n" "Ne GTH-PADE-q8 GTH-LDA-q8 GTH-PADE GTH-LDA\n" " 2 6\n" " 0.19000000 2 -27.69285182 4.00590585\n" " 2\n" " 0.17948804 2 28.50609828 0.41682800\n" " -1.07624528\n" " 0.21491271 1 -0.00008991\n" "#","\n" "Na GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 0.88550938 1 -1.23886713\n" " 2\n" " 0.66110390 2 1.84727135 -0.22540903\n" " 0.58200362\n" " 0.85711928 1 0.47113258\n" "#","\n" "Na GTH-PADE-q9 GTH-LDA-q9 GTH-PADE GTH-LDA\n" " 3 6\n" " 0.24631780 2 -7.54559253 1.12599671\n" " 2\n" " 0.14125125 1 36.55698653\n" " 0.13966840 1 -10.39208332\n" "#","\n" "Mg GTH-PADE-q10 GTH-LDA-q10 GTH-PADE GTH-LDA\n" " 4 6\n" " 0.21094954 2 -19.41900751 2.87133099\n" " 2\n" " 0.14154696 1 40.31662629\n" " 0.10546902 1 -10.89111329\n" "#","\n" "Mg GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 0.65181169 1 -2.86429746\n" " 2\n" " 0.55647814 2 2.97095712 -0.51508390\n" " 1.32994091\n" " 0.67756881 1 1.04988101\n" "#","\n" "Al GTH-PADE-q3 GTH-LDA-q3 GTH-PADE GTH-LDA\n" " 2 1\n" " 0.45000000 1 -8.49135116\n" " 2\n" " 0.46010427 2 5.08833953 -1.03784325\n" " 2.67969975\n" " 0.53674439 1 2.19343827\n" "#","\n" "Si GTH-PADE-q4 GTH-LDA-q4 GTH-PADE GTH-LDA\n" " 2 2\n" " 0.44000000 1 -7.33610297\n" " 2\n" " 0.42273813 2 5.90692831 -1.26189397\n" " 3.25819622\n" " 0.48427842 1 2.72701346\n" "#","\n" "P GTH-PADE-q5 GTH-LDA-q5 GTH-PADE GTH-LDA\n" " 2 3\n" " 0.43000000 1 -6.65421981\n" " 2\n" " 0.38980284 2 6.84213556 -1.49369090\n" " 3.85669332\n" " 0.44079585 1 3.28260592\n" "#","\n" "S GTH-PADE-q6 GTH-LDA-q6 GTH-PADE GTH-LDA\n" " 2 4\n" " 0.42000000 1 -6.55449184\n" " 2\n" " 0.36175665 2 7.90530250 -1.73188130\n" " 4.47169830\n" " 0.40528502 1 3.86657900\n" "#","\n" "Cl GTH-PADE-q7 GTH-LDA-q7 GTH-PADE GTH-LDA\n" " 2 5\n" " 0.41000000 1 -6.86475431\n" " 2\n" " 0.33820832 2 9.06223968 -1.96193036\n" " 5.06568240\n" " 0.37613709 1 4.46587640\n" "#","\n" "Ar GTH-PADE-q8 GTH-LDA-q8 GTH-PADE GTH-LDA\n" " 2 6\n" " 0.40000000 1 -7.10000000\n" " 2\n" " 0.31738081 2 10.24948699 -2.16984522\n" " 5.60251627\n" " 0.35161921 1 4.97880101\n" "#","\n" "K GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 0.95000000 0\n" " 3\n" " 0.95536395 3 0.91461200 -0.11136800 -0.07324712\n" " 0.28755094 0.18912326\n" " -0.30022386\n" " 1.08641063 2 0.31546177 -0.02881726\n" " 0.06819410\n" " 0.72060608 1 -1.52951361\n" "#","\n" "K GTH-PADE-q9 GTH-LDA-q9 GTH-PADE GTH-LDA\n" " 3 6\n" " 0.40000000 2 -4.98934751 -0.75604821\n" " 2\n" " 0.29482550 2 11.23870466 -2.73733893\n" " 7.06777871\n" " 0.32235865 2 5.25670239 -0.39677748\n" " 0.93894690\n" "#","\n" "Ca GTH-PADE-q10 GTH-LDA-q10 GTH-PADE GTH-LDA\n" " 4 6\n" " 0.39000000 2 -4.92814602 -1.23285409\n" " 3\n" " 0.28190948 2 12.35233956 -2.96571964\n" " 7.65745518\n" " 0.31034528 2 5.72242348 -0.39028860\n" " 0.92359141\n" " 0.90433011 1 0.01680633\n" "#","\n" "Ca GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 0.80000000 0\n" " 3\n" " 0.66973721 3 1.64501442 -0.59004546 0.07221571\n" " 1.52349082 -0.18646017\n" " 0.29599634\n" " 0.94647402 2 0.58547893 -0.05338365\n" " 0.12632878\n" " 0.52654998 1 -3.03232095\n" "#","\n" "Sc GTH-PADE-q11 GTH-LDA-q11 GTH-PADE GTH-LDA\n" " 4 6 1\n" " 0.38500000 2 7.42503638 -0.48985155\n" " 3\n" " 0.35970653 2 6.11958455 0.99282105\n" " -2.56345293\n" " 0.24323416 2 6.37661838 2.54239924\n" " -6.01641469\n" " 0.25294463 1 -8.02089177\n" "#","\n" "Sc GTH-PADE-q3 GTH-LDA-q3\n" " 2 0 1\n" " 0.75000000 0\n" " 3\n" " 0.59707941 3 1.83576833 -0.67169514 0.34607449\n" " 1.73430939 -0.89356049\n" " 1.41848330\n" " 0.84799438 2 0.78412669 -0.10426371\n" " 0.24673297\n" " 0.45465318 1 -3.85924078\n" "#","\n" "Ti GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 4 6 2\n" " 0.38000000 2 7.54878947 -0.58837666\n" " 3\n" " 0.33423466 2 6.92573970 1.21689330\n" " -3.14200499\n" " 0.24241582 2 5.07908650 2.65559321\n" " -6.28428053\n" " 0.24294750 1 -9.12589591\n" "#","\n" "Ti GTH-PADE-q4 GTH-LDA-q4\n" " 2 0 2\n" " 0.72000000 0\n" " 3\n" " 0.52841076 3 1.86661330 -0.55779994 0.89250253\n" " 1.44023325 -2.30443161\n" " 3.65817177\n" " 0.79114554 2 0.96791577 -0.11016023\n" " 0.26068669\n" " 0.40871178 1 -4.82645635\n" "#","\n" "V GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 4 6 3\n" " 0.37500000 2 4.94129058 -0.09644336\n" " 3\n" " 0.32665112 2 7.65939048 1.50745391\n" " -3.89222925\n" " 0.24640748 2 4.25623049 2.51062024\n" " -5.94121187\n" " 0.24079150 1 -8.82851757\n" "#","\n" "V GTH-PADE-q5 GTH-LDA-q5\n" " 2 0 3\n" " 0.69000000 0\n" " 3\n" " 0.51470421 3 2.20866978 -0.73461318 0.75055919\n" " 1.89676307 -1.93793550\n" " 3.07637723\n" " 0.74350381 2 1.11575121 -0.12113126\n" " 0.28664887\n" " 0.37488959 1 -5.84163317\n" "#","\n" "Cr GTH-PADE-q14 GTH-LDA-q14 GTH-PADE GTH-LDA\n" " 3 6 5\n" " 0.37000000 2 5.11336166 -0.64681932\n" " 3\n" " 0.30601140 2 8.61783515 1.60252229\n" " -4.13769475\n" " 0.24108964 2 3.16158758 2.12679104\n" " -5.03290619\n" " 0.21957702 1 -11.15786828\n" "#","\n" "Cr GTH-PADE-q6 GTH-LDA-q6\n" " 1 0 5\n" " 0.66000000 0\n" " 3\n" " 0.49857767 3 2.40075556 -0.80261251 0.72025801\n" " 2.07233658 -1.85969818\n" " 2.95217934\n" " 0.71976824 2 1.14555658 -0.11757619\n" " 0.27823604\n" " 0.35434060 1 -6.61587832\n" "#","\n" "Mn GTH-PADE-q15 GTH-LDA-q15 GTH-PADE GTH-LDA\n" " 4 6 5\n" " 0.36500000 2 6.74868332 -0.57656900\n" " 3\n" " 0.28075266 2 9.37953150 2.15929667\n" " -5.57528002\n" " 0.25453567 2 0.37117568 1.78710271\n" " -4.22905690\n" " 0.22142210 1 -12.11538453\n" "#","\n" "Mn GTH-PADE-q7 GTH-LDA-q7\n" " 2 0 5\n" " 0.64000000 0\n" " 3\n" " 0.48124608 3 2.79903057 -0.96286281 0.62594958\n" " 2.48610107 -1.61619487\n" " 2.56562982\n" " 0.66930432 2 1.36877564 -0.13385695\n" " 0.31676337\n" " 0.32776314 1 -7.99541784\n" "#","\n" "Fe GTH-PADE-q16 GTH-LDA-q16 GTH-PADE GTH-LDA\n" " 4 6 6\n" " 0.36000000 2 5.39250667 -0.03006638\n" " 3\n" " 0.26926810 2 10.19372276 2.64717717\n" " -6.83498206\n" " 0.24768563 2 0.14561261 2.21217195\n" " -5.23495429\n" " 0.22302105 1 -12.02694100\n" "#","\n" "Fe GTH-PADE-q8 GTH-LDA-q8\n" " 2 0 6\n" " 0.61000000 0\n" " 3\n" " 0.45448200 3 3.01664046 -1.00040646 0.79478164\n" " 2.58303836 -2.05211737\n" " 3.25763534\n" " 0.63890282 2 1.49964199 -0.13812935\n" " 0.32687369\n" " 0.30873177 1 -9.14535371\n" "#","\n" "Co GTH-PADE-q17 GTH-LDA-q17 GTH-PADE GTH-LDA\n" " 4 6 7\n" " 0.35500000 2 3.41839094 0.48207820\n" " 3\n" " 0.25914047 2 11.19522589 3.03867482\n" " -7.84582466\n" " 0.25142451 2 -0.55146375 1.96043558\n" " -4.63923731\n" " 0.22166454 1 -12.07535366\n" "#","\n" "Co GTH-PADE-q9 GTH-LDA-q9\n" " 2 0 7\n" " 0.58000000 0\n" " 3\n" " 0.44045735 3 3.33497825 -1.11276628 0.75413362\n" " 2.87315017 -1.94716465\n" " 3.09102805\n" " 0.61004847 2 1.63400481 -0.15047260\n" " 0.35608316\n" " 0.29166058 1 -10.35880017\n" "#","\n" "Ni GTH-PADE-q10 GTH-LDA-q10\n" " 2 0 8\n" " 0.56000000 0\n" " 3\n" " 0.42539870 3 3.61965071 -1.19635099 0.74622158\n" " 3.08896496 -1.92673583\n" " 3.05859831\n" " 0.58408076 2 1.74222007 -0.16325873\n" " 0.38634067\n" " 0.27811348 1 -11.60842823\n" "#","\n" "Ni GTH-PADE-q18 GTH-LDA-q18 GTH-PADE GTH-LDA\n" " 4 6 8\n" " 0.35000000 2 3.61031072 0.44963832\n" " 3\n" " 0.24510489 2 12.16113071 3.51625420\n" " -9.07892931\n" " 0.23474136 2 -0.82062357 2.54774737\n" " -6.02907069\n" " 0.21494950 1 -13.39506212\n" "#","\n" "Cu GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 0.58000000 0\n" " 3\n" " 0.84328288 3 0.97578662 0.31838619 -0.03250652\n" " -0.82206962 0.08393147\n" " -0.13323707\n" " 1.08954266 2 0.02457986 0.10522210\n" " -0.24900093\n" " 1.29160225 1 -0.06529209\n" "#","\n" "Cu GTH-PADE-q11 GTH-LDA-q11 GTH-PADE GTH-LDA\n" " 1 0 10\n" " 0.53000000 0\n" " 3\n" " 0.42373431 3 3.88805001 -1.26901549 0.55872509\n" " 3.27658391 -1.44262198\n" " 2.29009139\n" " 0.57217697 2 1.75127242 -0.15844220\n" " 0.37494269\n" " 0.26614275 1 -12.67695749\n" "#","\n" "Cu GTH-PADE-q19 GTH-LDA-q19\n" " 3 6 10\n" " 0.34500000 2 0.38158866 1.38680111\n" " 3\n" " 0.25131927 2 0.03400360 11.19862293\n" " -14.45736004\n" " 0.22038147 2 -14.27160096 16.04403507\n" " -18.98355830\n" " 0.21773897 1 -12.50830997\n" "#","\n" "Zn GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 2 0 10\n" " 0.51000000 0\n" " 3\n" " 0.40086620 3 4.27870973 -1.40486350 0.69522313\n" " 3.62734196 -1.79505840\n" " 2.84956686\n" " 0.53961806 2 2.02388400 -0.18244417\n" " 0.43174171\n" " 0.25215059 1 -14.33836841\n" "#","\n" "Zn GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 0.57000000 0\n" " 3\n" " 0.64071219 3 2.08855724 0.08453570 -0.22965773\n" " -0.21827024 0.59297371\n" " -0.94131659\n" " 0.96760483 2 0.16354600 0.09596150\n" " -0.22708635\n" " 1.33035200 1 0.01048578\n" "#","\n" "Zn GTH-PADE-q20 GTH-LDA-q20\n" " 4 6 10\n" " 0.34000000 2 -0.62164886 1.27422289\n" " 3\n" " 0.23892824 2 0.30844368 12.35877752\n" " -15.95511318\n" " 0.23960139 2 -9.43744220 8.39596370\n" " -9.93423822\n" " 0.20656246 1 -14.03217427\n" "#","\n" "Ga GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 2 1 10\n" " 0.49000000 0\n" " 3\n" " 0.39530156 3 12.45703651 -7.08541671 1.84712738\n" " 12.15158654 -4.76926238\n" " 3.78548466\n" " 0.58085441 2 1.57898606 0.32869270\n" " -0.38891444\n" " 0.23908100 1 -16.13575103\n" "#","\n" "Ga GTH-PADE-q3 GTH-LDA-q3\n" " 2 1\n" " 0.56000000 0\n" " 3\n" " 0.61079074 3 2.36932516 0.09644314 -0.13462450\n" " -0.24901512 0.34759896\n" " -0.55179624\n" " 0.70459583 2 0.74630529 0.21683799\n" " -0.51313234\n" " 0.98257967 1 0.07543656\n" "#","\n" "Ge GTH-PADE-q4 GTH-LDA-q4 GTH-PADE GTH-LDA\n" " 2 2\n" " 0.54000000 0\n" " 3\n" " 0.49374254 3 3.82689099 -0.42611775 -0.32795553\n" " 1.10023129 0.84677753\n" " -1.34421765\n" " 0.60106438 2 1.36251781 0.26511216\n" " -0.62736987\n" " 0.78836851 1 0.19120485\n" "#","\n" "As GTH-PADE-q5 GTH-LDA-q5 GTH-PADE GTH-LDA\n" " 2 3\n" " 0.52000000 0\n" " 3\n" " 0.45640025 3 4.56076106 -0.65545935 -0.33517391\n" " 1.69238876 0.86541531\n" " -1.37380421\n" " 0.55056168 2 1.81224664 0.27329186\n" " -0.64672658\n" " 0.68528272 1 0.31237276\n" "#","\n" "Se GTH-PADE-q6 GTH-LDA-q6 GTH-PADE GTH-LDA\n" " 2 4\n" " 0.51000000 0\n" " 3\n" " 0.43253108 3 5.14513084 -0.79473967 -0.33405137\n" " 2.05200900 0.86251693\n" " -1.36920317\n" " 0.47247252 2 2.85880607 0.24960384\n" " -0.59067050\n" " 0.61342013 1 0.43482888\n" "#","\n" "Br GTH-PADE-q7 GTH-LDA-q7 GTH-PADE GTH-LDA\n" " 2 5\n" " 0.50000000 0\n" " 3\n" " 0.42820734 3 5.39883713 -0.70499608 -0.32301656\n" " 1.82029205 0.83402517\n" " -1.32397392\n" " 0.45532308 2 3.10882269 0.26715405\n" " -0.63220188\n" " 0.55784727 1 0.55590294\n" "#","\n" "Kr GTH-PADE-q8 GTH-LDA-q8 GTH-PADE GTH-LDA\n" " 2 6\n" " 0.50000000 0\n" " 3\n" " 0.41075893 3 5.91119429 -0.76196004 -0.35573234\n" " 1.96737236 0.91849694\n" " -1.45806869\n" " 0.43025641 2 3.52435692 0.29208431\n" " -0.69119763\n" " 0.51712005 1 0.62922850\n" "#","\n" "Rb GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 1.09620685 2 0.84733274 -0.74812032\n" " 3\n" " 0.95569909 3 0.88746022 -0.34976454 -0.00164684\n" " 0.90308815 0.00425212\n" " -0.00675003\n" " 1.15668058 2 0.46173448 -0.14203355\n" " 0.33611273\n" " 0.66432256 1 -1.36293829\n" "#","\n" "Rb GTH-PADE-q9 GTH-LDA-q9 GTH-PADE GTH-LDA\n" " 3 6\n" " 0.49000000 2 4.50415106 -0.74101810\n" " 3\n" " 0.28230077 2 9.53632920 -3.67415744\n" " 9.48663373\n" " 0.30188614 2 2.20959243 -2.31371511\n" " 5.47524928\n" " 0.51489528 1 0.44937574\n" "#","\n" "Sr GTH-PADE-q10 GTH-LDA-q10 GTH-PADE GTH-LDA\n" " 4 6\n" " 0.48000000 2 5.57145509 -1.07996304\n" " 3\n" " 0.27544056 2 9.99513531 -3.61608019\n" " 9.33667892\n" " 0.30224313 2 3.16912572 -1.71111259\n" " 4.04923144\n" " 0.50204544 1 0.43872821\n" "#","\n" "Sr GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 1.01000000 2 0.68474888 -0.06212465\n" " 3\n" " 0.83756431 3 1.20039504 -0.35889978 -0.07706135\n" " 0.92667525 0.19897155\n" " -0.31585755\n" " 1.17417825 2 0.43998339 -0.00771915\n" " 0.01826685\n" " 0.74317548 1 -1.38699026\n" "#","\n" "Y GTH-PADE-q11 GTH-LDA-q11 GTH-PADE GTH-LDA\n" " 4 6 1\n" " 0.47500000 2 6.89262113 -1.44841137\n" " 3\n" " 0.25929613 2 11.06849407 -4.05874563\n" " 10.47963616\n" " 0.28851147 2 3.01907548 -1.80967899\n" " 4.28248210\n" " 0.50364209 2 0.33991901 -0.00795600\n" " 0.01804251\n" "#","\n" "Y GTH-PADE-q3 GTH-LDA-q3\n" " 2 0 1\n" " 0.90000000 1 -0.34389132\n" " 3\n" " 0.78245699 3 1.52065466 -0.57489340 -0.04611453\n" " 1.48436836 0.11906721\n" " -0.18901334\n" " 0.94986375 2 0.78095000 -0.15582064\n" " 0.36873894\n" " 0.65385060 2 -1.25692979 0.03323415\n" " -0.07536797\n" "#","\n" "Zr GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 4 6 2\n" " 0.47000000 2 6.34261837 -1.73217100\n" " 3\n" " 0.26250960 2 11.10177456 -3.71411720\n" " 9.58980939\n" " 0.28881376 2 3.44681955 -1.78708731\n" " 4.22902044\n" " 0.58825239 2 0.33463695 0.08621617\n" " -0.19551990\n" "#","\n" "Zr GTH-PADE-q4 GTH-LDA-q4\n" " 2 0 2\n" " 0.75000000 1 -0.78261098\n" " 3\n" " 0.64999821 3 1.73987747 -0.92494916 0.29407499\n" " 2.38820846 -0.75929835\n" " 1.20534876\n" " 0.87440769 2 1.01829381 -0.22321509\n" " 0.52822332\n" " 0.63066761 2 -1.17391057 -0.09356197\n" " 0.21217861\n" "#","\n" "Nb GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 3 6 4\n" " 0.46000000 2 13.50539360 0.75243372\n" " 3\n" " 0.39370802 2 3.22202457 1.78131738\n" " -4.59934171\n" " 0.40362557 2 -0.82203677 0.94968536\n" " -2.24736575\n" " 0.51364405 2 -1.48984771 -0.36326930\n" " 0.82381733\n" "#","\n" "Nb GTH-PADE-q5 GTH-LDA-q5\n" " 1 0 4\n" " 0.72400000 1 4.02105754\n" " 3\n" " 0.69970828 2 1.53265135 -0.55316427\n" " 1.42826399\n" " 0.84667164 2 0.60967518 -0.25218878\n" " 0.59678759\n" " 0.51607226 2 -2.69682993 0.74741000\n" " -1.69496657\n" "#","\n" "Mo GTH-PADE-q14 GTH-LDA-q14 GTH-PADE GTH-LDA\n" " 3 6 5\n" " 0.43000000 2 16.23745228 1.49653613\n" " 3\n" " 0.37625527 2 3.36242551 2.04852792\n" " -5.28927635\n" " 0.36173435 2 -0.37957075 1.71892268\n" " -4.06771350\n" " 0.52582812 2 -1.54321130 -0.47376044\n" " 1.07438769\n" "#","\n" "Mo GTH-PADE-q6 GTH-LDA-q6\n" " 1 0 5\n" " 0.69900000 1 7.99586821\n" " 3\n" " 0.67812595 2 1.28960728 -0.38656751\n" " 0.99811301\n" " 0.80077140 2 0.30141226 -0.31338933\n" " 0.74161451\n" " 0.45338393 2 -2.80970771 3.00775463\n" " -6.82094635\n" "#","\n" "Tc GTH-PADE-q15 GTH-LDA-q15 GTH-PADE GTH-LDA\n" " 3 6 6\n" " 0.43000001 2 14.91001129 1.04638147\n" " 3\n" " 0.36972111 2 3.91740844 2.04044213\n" " -5.26839892\n" " 0.35777235 2 -0.27000007 1.57949660\n" " -3.73777116\n" " 0.51048733 2 -1.58670910 -0.49930056\n" " 1.13230724\n" "#","\n" "Tc GTH-PADE-q7 GTH-LDA-q7\n" " 1 0 6\n" " 0.67300000 1 13.31538067\n" " 3\n" " 0.67761188 2 0.81921767 -0.13495786\n" " 0.34845968\n" " 0.78427538 2 0.02867266 -0.27820911\n" " 0.65836292\n" " 0.51988975 2 -5.98422427 -0.31829379\n" " 0.72182246\n" "#","\n" "Ru GTH-PADE-q16 GTH-LDA-q16 GTH-PADE GTH-LDA\n" " 3 6 7\n" " 0.43000000 2 13.58257130 0.59622675\n" " 3\n" " 0.36408374 2 4.48063220 2.04055059\n" " -5.26867898\n" " 0.36405317 2 -0.32037214 1.29296495\n" " -3.05971353\n" " 0.49585036 2 -1.59787017 -0.51393501\n" " 1.16549505\n" "#","\n" "Ru GTH-PADE-q8 GTH-LDA-q8\n" " 1 0 7\n" " 0.64721429 1 8.68772333\n" " 3\n" " 0.62565612 2 1.63786602 -0.51484914\n" " 1.32933477\n" " 0.74642487 2 0.63901157 -0.27483407\n" " 0.65037612\n" " 0.44035802 2 -4.88336495 1.35098513\n" " -3.06374629\n" "#","\n" "Rh GTH-PADE-q17 GTH-LDA-q17 GTH-PADE GTH-LDA\n" " 3 6 8\n" " 0.42000000 2 15.22501231 0.41591145\n" " 3\n" " 0.35005185 2 4.71529244 2.24847003\n" " -5.80552464\n" " 0.35025339 2 -0.50469386 1.42536937\n" " -3.37303956\n" " 0.49694980 2 -1.68559431 -0.61192127\n" " 1.38770701\n" "#","\n" "Rh GTH-PADE-q9 GTH-LDA-q9\n" " 1 0 8\n" " 0.62142857 1 5.39796233\n" " 3\n" " 0.59807881 2 2.24211131 -0.83330981\n" " 2.15159669\n" " 0.70958567 2 1.15527830 -0.29785195\n" " 0.70484635\n" " 0.36920687 2 -1.05305819 4.81701344\n" " -10.92395969\n" "#","\n" "Pd GTH-PADE-q10 GTH-LDA-q10\n" " 0 0 10\n" " 0.59600000 1 5.20966476\n" " 3\n" " 0.58220422 2 2.41107608 -0.89811395\n" " 2.31892024\n" " 0.68878713 2 1.22725330 -0.32032214\n" " 0.75802053\n" " 0.44283523 2 -4.37713124 -0.18223540\n" " 0.41327105\n" "#","\n" "Pd GTH-PADE-q18 GTH-LDA-q18 GTH-PADE GTH-LDA\n" " 2 6 10\n" " 0.41000000 2 15.72025922 0.14076508\n" " 3\n" " 0.34215063 2 5.17768606 2.26678707\n" " -5.85281906\n" " 0.34311064 2 -0.37256076 1.37706395\n" " -3.25872809\n" " 0.49491624 2 -1.60827298 -0.63789470\n" " 1.44660922\n" "#","\n" "Ag GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 0.65000000 1 -2.37606096\n" " 3\n" " 1.01270456 3 0.89793134 0.28982424 0.00726736\n" " -0.74832297 -0.01876424\n" " 0.02978730\n" " 1.23584202 2 0.13008068 0.11726324\n" " -0.27749548\n" " 1.01615913 1 -0.03884235\n" "#","\n" "Ag GTH-PADE-q11 GTH-LDA-q11 GTH-PADE GTH-LDA\n" " 1 0 10\n" " 0.57000000 1 1.01705324\n" " 3\n" " 0.49890039 3 2.99028401 -1.51526425 0.53817162\n" " 3.91239548 -1.38955314\n" " 2.20584723\n" " 0.63000853 2 1.81396786 -0.55123072\n" " 1.30444997\n" " 0.38765955 2 -3.42007573 0.44975502\n" " -1.01994852\n" "#","\n" "Ag GTH-PADE-q19 GTH-LDA-q19\n" " 3 6 10\n" " 0.40000000 2 26.10213544 -5.21734352\n" " 3\n" " 0.30814467 2 1.55692822 3.68811443\n" " -4.76133525\n" " 0.42100419 2 0.24550848 -0.89060050\n" " 1.05377272\n" " 0.44722234 2 1.87011922 -3.09368795\n" " 3.50791241\n" "#","\n" "Cd GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 2 0 10\n" " 0.55000000 1 2.38271306\n" " 3\n" " 0.49150479 3 3.20793247 -1.60378823 0.38651363\n" " 4.14096341 -0.99797390\n" " 1.58423446\n" " 0.59856481 2 1.94014994 -0.64058146\n" " 1.51589242\n" " 0.37787436 2 -4.19007193 0.33960669\n" " -0.77015558\n" "#","\n" "Cd GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 0.62500000 1 -1.79683799\n" " 3\n" " 0.82846467 3 1.48529241 0.16450606 -0.09953846\n" " -0.42475283 0.25700719\n" " -0.40798627\n" " 0.97287254 2 0.46920843 0.18936149\n" " -0.44811107\n" " 1.24094900 1 0.06541164\n" "#","\n" "In GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 2 1 10\n" " 0.53000000 1 2.39540385\n" " 3\n" " 0.47408054 3 3.55441064 -1.84126870 0.38183068\n" " 4.75413535 -0.98588258\n" " 1.56504008\n" " 0.55981945 2 2.22366425 -0.86006177\n" " 2.03527762\n" " 0.36048751 2 -4.56641372 0.34120718\n" " -0.77378515\n" "#","\n" "In GTH-PADE-q3 GTH-LDA-q3\n" " 2 1\n" " 0.61000000 1 2.86577676\n" " 3\n" " 0.77060197 3 1.25619360 0.15385620 -0.06790534\n" " -0.39725499 0.17533083\n" " -0.27832906\n" " 0.85813160 2 0.49445864 0.16091263\n" " -0.38078878\n" " 1.08869090 1 0.12920778\n" "#","\n" "Sn GTH-PADE-q4 GTH-LDA-q4 GTH-PADE GTH-LDA\n" " 2 2\n" " 0.60500000 1 4.61091234\n" " 3\n" " 0.66354369 3 1.64879146 0.05498623 -0.14066273\n" " -0.14197384 0.36318961\n" " -0.57654563\n" " 0.74586492 2 0.76935544 0.18807652\n" " -0.44507028\n" " 0.94445897 1 0.22511508\n" "#","\n" "Sb GTH-PADE-q5 GTH-LDA-q5 GTH-PADE GTH-LDA\n" " 2 3\n" " 0.59000000 1 6.68022783\n" " 3\n" " 0.59768356 3 1.95147672 -0.01453812 -0.19191821\n" " 0.03753727 0.49553069\n" " -0.78663058\n" " 0.67212205 2 0.97031285 0.19722998\n" " -0.46673132\n" " 0.85655729 1 0.30010262\n" "#","\n" "Te GTH-PADE-q6 GTH-LDA-q6 GTH-PADE GTH-LDA\n" " 2 4\n" " 0.57500000 1 9.38708481\n" " 3\n" " 0.55645602 3 2.04689031 0.01136047 -0.21497109\n" " -0.02933260 0.55505297\n" " -0.88111927\n" " 0.61526187 2 1.03347754 0.20333245\n" " -0.48117240\n" " 0.80510072 1 0.31741073\n" "#","\n" "I GTH-PADE-q7 GTH-LDA-q7 GTH-PADE GTH-LDA\n" " 2 5\n" " 0.56000000 1 14.66182521\n" " 3\n" " 0.55283008 3 1.33805374 0.32333643 -0.11404312\n" " -0.83485108 0.29445806\n" " -0.46743768\n" " 0.56225147 2 0.67449617 0.24415947\n" " -0.57778676\n" " 0.79432495 1 0.22434543\n" "#","\n" "Xe GTH-PADE-q8 GTH-LDA-q8 GTH-PADE GTH-LDA\n" " 2 6\n" " 0.56000000 1 12.73427972\n" " 3\n" " 0.50737118 3 2.23645069 0.15629453 -0.27630331\n" " -0.40355073 0.71341207\n" " -1.13250655\n" " 0.54102371 2 1.13004299 0.31810091\n" " -0.75276413\n" " 0.72982111 1 0.28013078\n" "#","\n" "Cs GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 1.20000000 0\n" " 3\n" " 1.22473727 3 0.61152657 -0.09288578 -0.07173455\n" " 0.23983005 0.18521782\n" " -0.29402418\n" " 1.28047759 2 0.24489277 -0.09604275\n" " 0.22727863\n" " 1.10752212 1 -0.54216260\n" "#","\n" "Cs GTH-PADE-q9 GTH-LDA-q9 GTH-PADE GTH-LDA\n" " 3 6\n" " 0.54000000 2 35.23443810 -3.31807009\n" " 4\n" " 0.45682103 2 -0.28237849 1.07705949\n" " -2.78095565\n" " 0.36246700 2 -2.69673321 0.96809883\n" " -2.29093996\n" " 0.76146205 1 0.18375440\n" " 0.33350703 1 -17.94825944\n" "#","\n" "Ba GTH-PADE-q10 GTH-LDA-q10 GTH-PADE GTH-LDA\n" " 4 6\n" " 0.54000000 2 24.47865325 -2.50084994\n" " 4\n" " 0.51477613 2 1.04672903 0.37847454\n" " -0.97721707\n" " 0.37519011 2 -0.20243912 -0.28749217\n" " 0.68033065\n" " 0.66540319 1 0.37841850\n" " 0.30492043 1 -18.79520777\n" "#","\n" "Ba GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 1.20000000 0\n" " 3\n" " 1.01618684 3 0.92259259 -0.29570030 -0.08135711\n" " 0.76349489 0.21006316\n" " -0.33346493\n" " 1.24987991 2 0.44716820 -0.06384326\n" " 0.15108073\n" " 0.93715823 1 -0.71893382\n" "#","\n" "La GTH-PADE-q11 GTH-LDA-q11 GTH-PADE GTH-LDA\n" " 4 6 1\n" " 0.53500000 2 19.90930823 -1.47483023\n" " 4\n" " 0.55177542 2 1.29327192 0.43447877\n" " -1.12181937\n" " 0.47630806 3 1.17252682 0.35023609 0.00887640\n" " -0.82880986 -0.02100539\n" " 0.02985728\n" " 0.62667220 1 0.32837704\n" " 0.29931017 1 -18.26943896\n" "#","\n" "Ce GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 4 6 1 1\n" " 0.53500000 2 18.26801534 -0.63048034\n" " 4\n" " 0.52642558 2 -0.68453554 1.78656499\n" " -2.30644548\n" " 0.49085089 2 -1.02722427 1.53667473\n" " -1.81821806\n" " 0.69222809 1 0.06340682\n" " 0.30390134 1 -17.54564801\n" "#","\n" "Pr GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 4 6 0 3\n" " 0.53208333 2 18.42473909 -0.65766893\n" " 4\n" " 0.52684996 2 1.01262106 0.66537143\n" " -1.71798165\n" " 0.45889736 2 1.11706004 0.78265878\n" " -1.85210872\n" " 0.74760989 1 0.01757109\n" " 0.30077296 1 -17.89711891\n" "#","\n" "Nd GTH-PADE-q14 GTH-LDA-q14 GTH-PADE GTH-LDA\n" " 4 6 0 4\n" " 0.52916670 2 17.81503043 -0.59479767\n" " 4\n" " 0.50299986 2 1.52910988 0.83413680\n" " -2.15373194\n" " 0.46701290 2 0.72155346 0.69619548\n" " -1.64749920\n" " 0.32528958 1 -0.54324017\n" " 0.29474281 1 -18.52022760\n" "#","\n" "Pm GTH-PADE-q15 GTH-LDA-q15 GTH-PADE GTH-LDA\n" " 4 6 0 5\n" " 0.52625000 2 18.25172292 -0.49210744\n" " 4\n" " 0.48987856 2 1.30897757 0.97124774\n" " -2.50775088\n" " 0.47226016 2 0.16051238 0.66146221\n" " -1.56530527\n" " 0.47370914 1 -0.42995241\n" " 0.29152653 1 -19.30505668\n" "#","\n" "Sm GTH-PADE-q16 GTH-LDA-q16 GTH-PADE GTH-LDA\n" " 4 6 0 6\n" " 0.52333337 2 17.20679172 -0.53280292\n" " 4\n" " 0.47967676 2 1.72363519 1.02996853\n" " -2.65936731\n" " 0.49059775 2 -0.08240311 0.46948681\n" " -1.11100858\n" " 0.47084026 1 -0.41063034\n" " 0.28404049 1 -19.98429201\n" "#","\n" "Eu GTH-PADE-q17 GTH-LDA-q17 GTH-PADE GTH-LDA\n" " 4 6 0 7\n" " 0.52041668 2 17.37351625 -0.64846778\n" " 4\n" " 0.46904261 2 1.76363790 1.12972280\n" " -2.91693172\n" " 0.44590722 2 0.51804594 0.90228057\n" " -2.13518554\n" " 0.49003840 1 -0.42611996\n" " 0.27840129 1 -20.94652763\n" "#","\n" "Gd GTH-PADE-q18 GTH-LDA-q18 GTH-PADE GTH-LDA\n" " 4 6 0 8\n" " 0.51750004 2 17.51255640 -0.71953420\n" " 4\n" " 0.46201372 2 1.55185591 1.18850339\n" " -3.06870256\n" " 0.45695327 2 -0.05834713 0.71741382\n" " -1.69771095\n" " 0.48236813 1 -0.56260077\n" " 0.27338980 1 -21.92349011\n" "#","\n" "Tb GTH-PADE-q19 GTH-LDA-q19 GTH-PADE GTH-LDA\n" " 4 6 0 9\n" " 0.51458335 2 17.60361623 -0.82808004\n" " 4\n" " 0.44869439 2 1.71848088 1.33046245\n" " -3.43523929\n" " 0.42422013 2 0.56239978 1.17553634\n" " -2.78182671\n" " 0.48280866 1 -0.62580219\n" " 0.26825995 1 -22.91169709\n" "#","\n" "Dy GTH-PADE-q20 GTH-LDA-q20 GTH-PADE GTH-LDA\n" " 4 6 0 10\n" " 0.51166666 2 16.99433138 -0.95529792\n" " 4\n" " 0.44059045 2 1.94031950 1.37870375\n" " -3.55979777\n" " 0.43464206 2 0.01431536 0.86469335\n" " -2.04623793\n" " 0.46722880 1 -0.66892417\n" " 0.26167045 1 -23.92235817\n" "#","\n" "Ho GTH-PADE-q21 GTH-LDA-q21 GTH-PADE GTH-LDA\n" " 4 6 0 11\n" " 0.50875002 2 16.78157003 -1.17351448\n" " 4\n" " 0.43221176 2 2.05279689 1.42314101\n" " -3.67453429\n" " 0.42013792 2 0.25329464 0.99529117\n" " -2.35528878\n" " 0.44713057 1 -0.74286267\n" " 0.25499226 1 -25.19721081\n" "#","\n" "Er GTH-PADE-q22 GTH-LDA-q22 GTH-PADE GTH-LDA\n" " 4 6 0 12\n" " 0.50583333 2 17.10529281 -1.43095318\n" " 4\n" " 0.41994801 2 2.14450257 1.54307528\n" " -3.98420323\n" " 0.41445530 2 0.05408736 0.96959342\n" " -2.29447680\n" " 0.41838497 1 -0.99900632\n" " 0.24912591 1 -26.69680936\n" "#","\n" "Tm GTH-PADE-q23 GTH-LDA-q23 GTH-PADE GTH-LDA\n" " 4 6 0 13\n" " 0.50291669 2 17.24729254 -1.62769708\n" " 4\n" " 0.41337286 2 1.94719583 1.59627195\n" " -4.12155644\n" " 0.40992301 2 -0.09449281 0.93984837\n" " -2.22408718\n" " 0.39287009 1 -1.35330770\n" " 0.24391696 1 -28.10415875\n" "#","\n" "Yb GTH-PADE-q24 GTH-LDA-q24 GTH-PADE GTH-LDA\n" " 4 6 0 14\n" " 0.50000000 2 17.35714421 -1.77391642\n" " 4\n" " 0.40230918 2 2.12077095 1.86019003\n" " -4.80298999\n" " 0.41435774 2 -0.92321216 0.70931244\n" " -1.67853959\n" " 0.44402468 1 -0.88996733\n" " 0.23829829 1 -29.93285367\n" "#","\n" "Lu GTH-PADE-q25 GTH-LDA-q25 GTH-PADE GTH-LDA\n" " 4 6 1 14\n" " 0.49700000 2 17.03705292 -1.66161023\n" " 4\n" " 0.39120615 2 2.18467779 2.10393860\n" " -5.43234610\n" " 0.39389567 2 -0.71981878 1.15101512\n" " -2.72379890\n" " 0.43651827 1 -1.17324513\n" " 0.23262926 1 -31.85226177\n" "#","\n" "Hf GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 4 6 2\n" " 0.56000000 2 5.13480056 0.52919062\n" " 3\n" " 0.42281035 3 2.56444209 2.32910852 0.27075363\n" " -6.01373234 -0.69908286\n" " 1.10975964\n" " 0.47268130 2 -1.02527490 0.79129612\n" " -1.87254839\n" " 0.42638752 2 1.45936326 2.32948018\n" " -5.28276448\n" "#","\n" "Ta GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 4 6 3\n" " 0.55000000 2 4.54623627 0.77942234\n" " 3\n" " 0.42185350 3 2.70813558 2.24282880 0.23120613\n" " -5.79095906 -0.59697167\n" " 0.94766314\n" " 0.46134516 2 -0.72485277 0.93609767\n" " -2.21521141\n" " 0.41099434 2 1.34849472 2.37542018\n" " -5.38694662\n" "#","\n" "Ta GTH-PADE-q5 GTH-LDA-q5\n" " 2 0 3\n" " 0.74400000 1 3.62311645\n" " 3\n" " 0.58180113 2 2.00533833 -1.17236605\n" " 3.02703613\n" " 0.77064628 2 0.51856664 -0.50091380\n" " 1.18537841\n" " 0.53436996 2 -2.20220040 0.73493457\n" " -1.66667495\n" "#","\n" "W GTH-PADE-q14 GTH-LDA-q14 GTH-PADE GTH-LDA\n" " 4 6 4\n" " 0.54000000 2 4.80025094 0.90154434\n" " 3\n" " 0.41856963 3 2.69220433 2.33255747 0.29723855\n" " -6.02263750 -0.76746663\n" " 1.21831550\n" " 0.44955492 2 -0.70208426 1.03602407\n" " -2.45168043\n" " 0.39960167 2 1.17743638 2.44891670\n" " -5.55362106\n" "#","\n" "W GTH-PADE-q6 GTH-LDA-q6\n" " 2 0 4\n" " 0.71900000 1 4.05844991\n" " 3\n" " 0.58246289 2 2.16116556 -1.06177835\n" " 2.74149991\n" " 0.74230741 2 0.60097339 -0.54932611\n" " 1.29994284\n" " 0.53495887 2 -2.51706347 0.34797654\n" " -0.78913661\n" "#","\n" "Re GTH-PADE-q15 GTH-LDA-q15 GTH-PADE GTH-LDA\n" " 4 6 5\n" " 0.53000000 2 5.59266028 0.94395680\n" " 3\n" " 0.40325199 3 2.76072043 2.47732079 0.21194880\n" " -6.39641476 -0.54724946\n" " 0.86873158\n" " 0.44095069 2 -0.90054631 1.06118049\n" " -2.51121137\n" " 0.39039544 2 0.87525142 2.50135628\n" " -5.67254285\n" "#","\n" "Re GTH-PADE-q7 GTH-LDA-q7\n" " 2 0 5\n" " 0.69300000 1 8.18081618\n" " 3\n" " 0.50981621 2 2.26937936 -1.36659354\n" " 3.52852934\n" " 0.74583906 2 0.49669329 -0.39123421\n" " 0.92582911\n" " 0.50095420 2 -3.68962967 0.83544051\n" " -1.89460099\n" "#","\n" "Os GTH-PADE-q16 GTH-LDA-q16 GTH-PADE GTH-LDA\n" " 4 6 6\n" " 0.52000000 2 5.61307299 0.92195476\n" " 3\n" " 0.41057830 3 2.78575826 2.59185074 0.54822025\n" " -6.69212983 -1.41549860\n" " 2.24703437\n" " 0.42239546 2 -0.59000550 1.27547446\n" " -3.01832347\n" " 0.38025200 2 0.88013282 2.52796761\n" " -5.73289168\n" "#","\n" "Os GTH-PADE-q8 GTH-LDA-q8\n" " 2 0 6\n" " 0.66700000 1 9.44045936\n" " 3\n" " 0.51030708 2 2.40236688 -1.17998407\n" " 3.04670577\n" " 0.71755329 2 0.49952321 -0.44509384\n" " 1.05328427\n" " 0.48758605 2 -4.14203471 0.73468110\n" " -1.66610013\n" "#","\n" "Ir GTH-PADE-q17 GTH-LDA-q17 GTH-PADE GTH-LDA\n" " 4 6 7\n" " 0.51000000 2 4.90450946 1.31378645\n" " 3\n" " 0.40446887 3 3.24327835 2.83328456 0.72142882\n" " -7.31550927 -1.86272120\n" " 2.95697824\n" " 0.41142571 2 -0.38057445 1.48088044\n" " -3.50440273\n" " 0.37642813 2 0.75431547 2.59088743\n" " -5.87558042\n" "#","\n" "Ir GTH-PADE-q9 GTH-LDA-q9\n" " 2 0 7\n" " 0.64100000 1 10.72001591\n" " 3\n" " 0.50996044 2 2.44599887 -1.08871009\n" " 2.81103736\n" " 0.68497052 2 0.46179182 -0.55134721\n" " 1.30472563\n" " 0.47174528 2 -4.54548411 0.72115617\n" " -1.63542847\n" "#","\n" "Pt GTH-PADE-q10 GTH-LDA-q10\n" " 1 0 9\n" " 0.61600000 1 11.02741707\n" " 3\n" " 0.52013211 2 2.44743006 -1.02260695\n" " 2.64035978\n" " 0.65897566 2 0.40845297 -0.69628711\n" " 1.64771604\n" " 0.45124318 2 -4.55229454 0.92706936\n" " -2.10239568\n" "#","\n" "Pt GTH-PADE-q18 GTH-LDA-q18 GTH-PADE GTH-LDA\n" " 3 6 9\n" " 0.50000000 2 5.44583159 1.15638204\n" " 3\n" " 0.40994150 3 2.99436565 2.88489700 1.03520925\n" " -7.44877202 -2.67289879\n" " 4.24309529\n" " 0.39865199 2 -0.22518140 1.59606293\n" " -3.77697426\n" " 0.36796397 2 0.63206655 2.53790667\n" " -5.75543134\n" "#","\n" "Au GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 0.65000000 2 -1.96371223 -1.69812291\n" " 2\n" " 0.91930757 3 1.53959915 0.18155717 -0.19323771\n" " -0.46877861 0.49893761\n" " -0.79203890\n" " 1.14035080 3 0.47122943 0.21024829 -0.06235978\n" " -0.49753827 0.14757016\n" " -0.20975780\n" "#","\n" "Au GTH-PADE-q11 GTH-LDA-q11 GTH-PADE GTH-LDA\n" " 1 0 10\n" " 0.59000000 1 11.60442790\n" " 3\n" " 0.52117975 2 2.53861359 -1.04613664\n" " 2.70111320\n" " 0.63061306 2 0.39485270 -0.86959213\n" " 2.05783056\n" " 0.44070643 2 -4.71906966 0.72777081\n" " -1.65042907\n" "#","\n" "Au GTH-PADE-q19 GTH-LDA-q19\n" " 3 6 10\n" " 0.49000000 2 9.07322639 -0.34013367\n" " 3\n" " 0.28803780 3 -5.90182040 26.42537412 -15.50837777\n" " -59.33938963 40.04245923\n" " -31.78271670\n" " 0.35586747 2 -7.08858659 8.19796427\n" " -9.69996213\n" " 0.33386175 2 -8.82572349 9.56535285\n" " -10.84609065\n" "#","\n" "Hg GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 2 0 10\n" " 0.57000000 1 2.13457183\n" " 3\n" " 0.52180188 2 3.29392021 -1.80519780\n" " 4.66100069\n" " 0.62164790 2 2.10096040 -0.71415047\n" " 1.68998846\n" " 0.40189401 2 -1.66988578 1.09060737\n" " -2.47326503\n" "#","\n" "Hg GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 0.64000000 1 -3.29632880\n" " 3\n" " 0.81210780 3 1.76504143 0.18053035 -0.19516558\n" " -0.46612737 0.50391537\n" " -0.79994085\n" " 1.05371378 2 0.47405588 0.22473320\n" " -0.53181582\n" " 1.10000000 1 0.12063831\n" "#","\n" "Tl GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 2 1 10\n" " 0.55000000 1 7.30188582\n" " 3\n" " 0.50242266 2 3.32656022 -1.68141322\n" " 4.34139027\n" " 0.57201594 2 1.27280729 -1.26443781\n" " 2.99220598\n" " 0.39318504 2 -3.20065227 1.32653373\n" " -3.00829573\n" "#","\n" "Tl GTH-PADE-q3 GTH-LDA-q3\n" " 2 1\n" " 0.63000000 1 -1.23584552\n" " 3\n" " 0.75400547 3 1.87576571 0.11761462 -0.19062668\n" " -0.30367964 0.49219597\n" " -0.78133689\n" " 0.90374170 2 0.75966830 0.24793467\n" " -0.58672051\n" " 1.06351212 1 0.24761396\n" "#","\n" "Pb GTH-PADE-q4 GTH-LDA-q4 GTH-PADE GTH-LDA\n" " 2 2\n" " 0.61750000 1 0.75314257\n" " 3\n" " 0.70525860 3 1.97992741 0.06388872 -0.19665860\n" " -0.16495996 0.50777033\n" " -0.80606040\n" " 0.84664106 2 0.86442030 0.22860106\n" " -0.54096885\n" " 0.97193857 1 0.37496708\n" "#","\n" "Bi GTH-PADE-q5 GTH-LDA-q5 GTH-PADE GTH-LDA\n" " 2 3\n" " 0.60500000 1 6.67943714\n" " 3\n" " 0.67885795 3 1.37763378 0.19895396 -0.11491910\n" " -0.51369691 0.29671983\n" " -0.47102813\n" " 0.79867267 2 0.65557809 0.17026993\n" " -0.40293219\n" " 0.93468255 1 0.37847579\n" "#","\n" "Po GTH-PADE-q6 GTH-LDA-q6 GTH-PADE GTH-LDA\n" " 2 4\n" " 0.59250000 1 10.41173070\n" " 3\n" " 0.64794961 3 1.14420296 0.28499406 -0.08280174\n" " -0.73585149 0.21379318\n" " -0.33938616\n" " 0.74894708 2 0.59456184 0.14942108\n" " -0.35359482\n" " 0.88046840 1 0.43323228\n" "#","\n" "At GTH-PADE-q7 GTH-LDA-q7 GTH-PADE GTH-LDA\n" " 2 5\n" " 0.58000000 1 13.52041116\n" " 3\n" " 0.62782694 3 0.94555652 0.37409257 -0.04645981\n" " -0.96590285 0.11995872\n" " -0.19042856\n" " 0.70982320 2 0.52707805 0.13472635\n" " -0.31882073\n" " 0.83836499 1 0.46894787\n" "#","\n" "Rn GTH-PADE-q8 GTH-LDA-q8 GTH-PADE GTH-LDA\n" " 2 6\n" " 0.57000000 1 14.62918461\n" " 3\n" " 0.61518195 3 0.98183224 0.40238854 -0.02938821\n" " -1.03896274 0.07588004\n" " -0.12045584\n" " 0.67669721 2 0.61227859 0.14541822\n" " -0.34412231\n" " 0.78833715 1 0.55774596\n" "#","\n" "H GTH-PBE-q1 GTH-PBE\n" " 1\n" " 0.20000000 2 -4.17890044 0.72446331\n" " 0\n" "#","\n" "He GTH-PBE-q2 GTH-PBE\n" " 2\n" " 0.20000000 2 -9.12214383 1.70270770\n" " 0\n" "#","\n" "Li GTH-PBE-q3 GTH-PBE\n" " 3\n" " 0.40000000 4 -14.08115455 9.62621962 -1.78361605 0.08515207\n" " 0\n" "#","\n" "Be GTH-PBE-q4 GTH-PBE\n" " 4\n" " 0.32500000 4 -24.06746684 17.27902186 -3.33910629 0.16554912\n" " 0\n" "#","\n" "B GTH-PBE-q3 GTH-PBE\n" " 2 1\n" " 0.41899145 2 -5.85946171 0.90375643\n" " 2\n" " 0.37132046 1 6.29728018\n" " 0.36456308 0\n" "#","\n" "C GTH-PBE-q4 GTH-PBE\n" " 2 2\n" " 0.33847124 2 -8.80367398 1.33921085\n" " 2\n" " 0.30257575 1 9.62248665\n" " 0.29150694 0\n" "#","\n" "N GTH-PBE-q5 GTH-PBE\n" " 2 3\n" " 0.28379051 2 -12.41522559 1.86809592\n" " 2\n" " 0.25540500 1 13.63026257\n" " 0.24549453 0\n" "#","\n" "O GTH-PBE-q6 GTH-PBE\n" " 2 4\n" " 0.24455430 2 -16.66721480 2.48731132\n" " 2\n" " 0.22095592 1 18.33745811\n" " 0.21133247 0\n" "#","\n" "F GTH-PBE-q7 GTH-PBE\n" " 2 5\n" " 0.21492959 2 -21.57302836 3.19977615\n" " 2\n" " 0.19468402 1 23.74354045\n" " 0.18615608 0\n" "#","\n" "Ne GTH-PBE-q8 GTH-PBE\n" " 2 6\n" " 0.19000000 2 -27.12015973 4.36044962\n" " 2\n" " 0.17605938 2 28.17737082 0.83365601\n" " -1.07624528\n" " 0.19547452 1 -0.23629360\n" "#","\n" "Na GTH-PBE-q9 GTH-PBE\n" " 3 6\n" " 0.23652322 2 0.29510499 -0.91388488\n" " 2\n" " 0.14356046 1 34.60149228\n" " 0.12993224 1 -14.27746168\n" "#","\n" "Mg GTH-PBE-q10 GTH-PBE\n" " 4 6\n" " 0.19275787 2 -20.57539077 3.04016732\n" " 2\n" " 0.14140682 1 41.04729209\n" " 0.10293187 1 -9.98562566\n" "#","\n" "Mg GTH-PBE-q2\n" " 2\n" " 0.57696017 1 -2.69040744\n" " 2\n" " 0.59392350 2 3.50321099 -0.71677167\n" " 0.92534825\n" " 0.70715728 1 0.83115848\n" "#","\n" "Al GTH-PBE-q3 GTH-PBE\n" " 2 1\n" " 0.45000000 1 -7.55476126\n" " 2\n" " 0.48743529 2 6.95993832 -1.88883584\n" " 2.43847659\n" " 0.56218949 1 1.86529857\n" "#","\n" "Si GTH-PBE-q4 GTH-PBE\n" " 2 2\n" " 0.44000000 1 -6.26928833\n" " 2\n" " 0.43563383 2 8.95174150 -2.70627082\n" " 3.49378060\n" " 0.49794218 1 2.43127673\n" "#","\n" "P GTH-PBE-q5 GTH-PBE\n" " 2 3\n" " 0.43000000 1 -5.87594327\n" " 2\n" " 0.39637742 2 11.00886207 -3.47035607\n" " 4.48021042\n" " 0.44829838 1 3.05606416\n" "#","\n" "S GTH-PBE-q6 GTH-PBE\n" " 2 4\n" " 0.42000000 1 -5.98626038\n" " 2\n" " 0.36482035 2 13.14354448 -4.24183045\n" " 5.47617957\n" " 0.40948048 1 3.70089057\n" "#","\n" "Cl GTH-PBE-q7 GTH-PBE\n" " 2 5\n" " 0.41000000 1 -6.39208181\n" " 2\n" " 0.33953864 2 15.21898983 -4.93452321\n" " 6.37044208\n" " 0.37847416 1 4.33877527\n" "#","\n" "Ar GTH-PBE-q8 GTH-PBE\n" " 2 6\n" " 0.40000000 1 -7.10000000\n" " 2\n" " 0.31881468 2 17.25203807 -5.58548836\n" " 7.21083447\n" " 0.35337019 1 4.97421551\n" "#","\n" "K GTH-PBE-q9 GTH-PBE\n" " 3 6\n" " 0.40000000 2 -3.36355184 -1.08652975\n" " 2\n" " 0.30531772 2 17.85062321 -5.62264870\n" " 7.25880826\n" " 0.31648432 2 7.33378021 -2.46094505\n" " 2.91182945\n" "#","\n" "Ca GTH-PBE-q10 GTH-PBE\n" " 4 6\n" " 0.39000000 2 -4.16707222 -1.58379781\n" " 3\n" " 0.28935572 2 20.53187635 -7.12978578\n" " 9.20451387\n" " 0.32788206 2 5.80560513 -0.42875336\n" " 0.50730782\n" " 0.67961713 1 0.05806826\n" "#","\n" "Sc GTH-PBE-q11 GTH-PBE\n" " 4 6 1\n" " 0.38500000 2 8.21490030 -0.55705910\n" " 3\n" " 0.36361108 2 2.64653339 3.02108393\n" " -3.90020259\n" " 0.24389778 2 -2.63482265 7.99213715\n" " -9.45642421\n" " 0.25320575 1 -8.16594769\n" "#","\n" "Ti GTH-PBE-q12 GTH-PBE\n" " 4 6 2\n" " 0.38000000 2 8.71144218 -0.70028677\n" " 3\n" " 0.33777078 2 2.57526386 3.69297065\n" " -4.76760461\n" " 0.24253135 2 -4.63054123 8.87087502\n" " -10.49616087\n" " 0.24331694 1 -9.40665268\n" "#","\n" "V GTH-PBE-q13 GTH-PBE\n" " 4 6 3\n" " 0.37500000 2 7.47470354 -0.37026363\n" " 3\n" " 0.32779544 2 1.94087762 4.72568824\n" " -6.10083728\n" " 0.24476590 2 -5.97816705 9.35863915\n" " -11.07329118\n" " 0.24173879 1 -9.49989110\n" "#","\n" "Cr GTH-PBE-q14 GTH-PBE\n" " 3 6 5\n" " 0.37000000 2 5.69965764 -0.69548599\n" " 3\n" " 0.31393442 2 2.86995474 4.97445648\n" " -6.42199570\n" " 0.24086624 2 -4.47620867 7.33141440\n" " -8.67464650\n" " 0.22028633 1 -11.19711641\n" "#","\n" "Mn GTH-PBE-q15 GTH-PBE\n" " 4 6 5\n" " 0.36500000 2 6.09304649 -0.44646948\n" " 3\n" " 0.29568592 2 1.88711984 6.35683658\n" " -8.20664074\n" " 0.24561261 2 -6.57002452 7.98335983\n" " -9.44603874\n" " 0.22252279 1 -11.61205092\n" "#","\n" "Fe GTH-PBE-q16 GTH-PBE\n" " 4 6 6\n" " 0.36000000 2 6.75678916 -0.22883251\n" " 3\n" " 0.27826303 2 0.62950570 7.91313242\n" " -10.21581002\n" " 0.25138338 2 -7.93213293 7.69707888\n" " -9.10730654\n" " 0.22285578 1 -12.38579937\n" "#","\n" "Co GTH-PBE-q17 GTH-PBE\n" " 4 6 7\n" " 0.35500000 2 4.82819736 0.36814301\n" " 3\n" " 0.27680076 2 -0.58449582 9.28629277\n" " -11.98855242\n" " 0.26815783 2 -6.85195349 5.68013280\n" " -6.72082376\n" " 0.22258414 1 -12.33315019\n" "#","\n" "Ni GTH-PBE-q18 GTH-PBE\n" " 4 6 8\n" " 0.35000000 2 2.10216598 0.64848387\n" " 3\n" " 0.26129530 2 0.62265847 9.97022667\n" " -12.87150729\n" " 0.22425346 2 -11.14270822 12.42956644\n" " -14.70686134\n" " 0.21534825 1 -12.62814550\n" "#","\n" "Cu GTH-PBE-q11 GTH-PBE\n" " 1 0 10\n" " 0.53000000 0\n" " 3\n" " 0.43135505 3 9.69380507 -6.47016535 1.93595215\n" " 11.50177396 -4.99860696\n" " 3.96752127\n" " 0.56139155 2 2.54547330 -0.78463573\n" " 0.92839352\n" " 0.26455485 1 -12.82861406\n" "#","\n" "Cu GTH-PBE-q19\n" " 3 6 10\n" " 0.34500000 2 0.05196970 1.24904337\n" " 3\n" " 0.25002849 2 0.75019332 10.73582127\n" " -13.85988567\n" " 0.22202454 2 -13.05959885 14.74763830\n" " -17.44964096\n" " 0.21556837 1 -12.45672374\n" "#","\n" "Zn GTH-PBE-q12 GTH-PBE\n" " 2 0 10\n" " 0.51000000 0\n" " 3\n" " 0.40031644 3 11.53004133 -8.79189815 3.14508644\n" " 16.46577518 -8.12057827\n" " 6.44550918\n" " 0.54318233 2 2.59719512 -0.59426275\n" " 0.70314117\n" " 0.25095885 1 -14.46695795\n" "#","\n" "Zn GTH-PBE-q20\n" " 4 6 10\n" " 0.34000000 2 0.55188462 1.24394356\n" " 3\n" " 0.24394890 2 -1.34762699 12.79313122\n" " -16.51586139\n" " 0.23975357 2 -9.72145777 8.07114357\n" " -9.54990586\n" " 0.20855195 1 -14.19380873\n" "#","\n" "Ga GTH-PBE-q13 GTH-PBE\n" " 2 1 10\n" " 0.49000000 0\n" " 3\n" " 0.41677723 3 10.47568975 -4.92176814 0.87070559\n" " 7.77017809 -2.24815216\n" " 1.78441545\n" " 0.56962652 2 1.77798534 0.19585976\n" " -0.23174439\n" " 0.23812650 1 -16.24868022\n" "#","\n" "Ga GTH-PBE-q3\n" " 2 1\n" " 0.56000000 0\n" " 3\n" " 0.56586645 3 2.21575051 1.03244793 -0.76062946\n" " -2.57004845 1.96393682\n" " -1.55882652\n" " 0.64671613 2 0.31122394 0.61341605\n" " -0.72580366\n" " 0.99942484 1 0.08951951\n" "#","\n" "Ge GTH-PBE-q4 GTH-PBE\n" " 2 2\n" " 0.54000000 0\n" " 3\n" " 0.42186518 3 7.51024121 -0.58810836 -1.44797580\n" " -1.59588819 3.73865744\n" " -2.96746735\n" " 0.56752887 2 0.91385969 0.54687534\n" " -0.64707163\n" " 0.81391394 1 0.19717731\n" "#","\n" "As GTH-PBE-q5 GTH-PBE\n" " 2 3\n" " 0.52000000 0\n" " 3\n" " 0.45554957 3 5.52067327 0.03512220 -1.06108239\n" " -1.77119320 2.73970295\n" " -2.17457180\n" " 0.55460557 2 1.02179156 0.62920826\n" " -0.74448925\n" " 0.70368872 1 0.31479504\n" "#","\n" "Se GTH-PBE-q6 GTH-PBE\n" " 2 4\n" " 0.51000000 0\n" " 3\n" " 0.43246005 3 6.51810990 -0.22271639 -1.19612899\n" " -1.65797833 3.08839178\n" " -2.45133498\n" " 0.47049162 2 2.28126223 0.36533529\n" " -0.43227055\n" " 0.62560034 1 0.43979948\n" "#","\n" "Br GTH-PBE-q7 GTH-PBE\n" " 2 5\n" " 0.50000000 0\n" " 3\n" " 0.43803892 3 6.07855632 0.33049817 -1.23838226\n" " -2.44090020 3.19748924\n" " -2.53792841\n" " 0.45313561 2 2.45930381 0.52275313\n" " -0.61852985\n" " 0.56771383 1 0.55926645\n" "#","\n" "Kr GTH-PBE-q8 GTH-PBE\n" " 2 6\n" " 0.50000000 0\n" " 3\n" " 0.42165717 3 6.46530358 0.53866049 -1.50260118\n" " -3.13938870 3.87969957\n" " -3.07941607\n" " 0.43374437 2 2.60116535 0.70510978\n" " -0.83429715\n" " 0.52469073 1 0.63559472\n" "#","\n" "Rb GTH-PBE-q9 GTH-PBE\n" " 3 6\n" " 0.49000000 2 5.66908644 -0.81162703\n" " 3\n" " 0.28180292 2 21.39073240 -8.07866676\n" " 10.42951394\n" " 0.28570828 2 12.25634859 -12.19854075\n" " 14.43350807\n" " 0.54179651 1 0.34566626\n" "#","\n" "Sr GTH-PBE-q10 GTH-PBE\n" " 4 6\n" " 0.48000000 2 6.81095035 -1.19610979\n" " 3\n" " 0.27588581 2 21.28971943 -7.89903416\n" " 10.19760926\n" " 0.28174086 2 11.70905135 -10.96577673\n" " 12.97488200\n" " 0.52108911 1 0.36053906\n" "#","\n" "Y GTH-PBE-q11 GTH-PBE\n" " 4 6 1\n" " 0.47500000 2 12.16776904 -2.32855103\n" " 3\n" " 0.24674070 2 23.45027195 -8.32535748\n" " 10.74799029\n" " 0.29656397 2 5.97863401 -5.85234964\n" " 6.92459348\n" " 0.45045569 2 1.18749048 -1.31867331\n" " 1.49523499\n" "#","\n" "Zr GTH-PBE-q12 GTH-PBE\n" " 4 6 2\n" " 0.47000000 2 7.79605677 -1.89321030\n" " 3\n" " 0.25982885 2 23.38087417 -8.57193933\n" " 11.06632609\n" " 0.28896899 2 8.59276581 -5.37735808\n" " 6.36257589\n" " 0.58124504 2 0.02781064 0.27686186\n" " -0.31393184\n" "#","\n" "Nb GTH-PBE-q13 GTH-PBE\n" " 3 6 4\n" " 0.46000000 2 26.27526252 -4.57803146\n" " 3\n" " 0.35116942 2 -1.04371870 3.27790404\n" " -4.23175592\n" " 0.40546040 2 -0.66246647 -0.90782868\n" " 1.07415738\n" " 0.42212155 2 1.49409323 -3.43003953\n" " 3.88929925\n" "#","\n" "Mo GTH-PBE-q14 GTH-PBE\n" " 3 6 5\n" " 0.43000000 2 28.60936832 -4.72180336\n" " 3\n" " 0.34521579 2 0.14630305 2.76200500\n" " -3.56573312\n" " 0.41688762 2 -0.19078495 -0.72874402\n" " 0.86226156\n" " 0.42050785 2 1.21681419 -2.68646267\n" " 3.04616234\n" "#","\n" "Tc GTH-PBE-q15 GTH-PBE\n" " 3 6 6\n" " 0.43000000 2 27.30199947 -4.64715709\n" " 3\n" " 0.34617499 2 -0.37921852 3.34056578\n" " -4.31265188\n" " 0.42346840 2 -0.24151639 -0.82215042\n" " 0.97278149\n" " 0.43186468 2 1.21878473 -2.67400954\n" " 3.03204182\n" "#","\n" "Ru GTH-PBE-q16 GTH-PBE\n" " 3 6 7\n" " 0.43000000 2 26.83239104 -5.05049720\n" " 3\n" " 0.34135508 2 -0.55504091 3.71548964\n" " -4.79667650\n" " 0.42827085 2 0.10677508 -1.27757181\n" " 1.51164335\n" " 0.43814779 2 1.50921742 -2.94305440\n" " 3.33711002\n" "#","\n" "Ru GTH-PBE-q8\n" " 1 0 7\n" " 0.61211332 1 5.04489332\n" " 3\n" " 0.64215040 2 4.62556355 -1.80334903\n" " 2.32811359\n" " 0.67936654 2 3.23395238 -2.42101064\n" " 2.86457842\n" " 0.38059720 2 -15.53165455 13.58045054\n" " -15.39878349\n" "#","\n" "Rh GTH-PBE-q17 GTH-PBE\n" " 3 6 8\n" " 0.42000000 2 26.20679340 -4.93738335\n" " 3\n" " 0.34544622 2 -0.45248232 3.89280438\n" " -5.02558885\n" " 0.37838014 2 -0.94111242 -0.00569931\n" " 0.00674351\n" " 0.43374725 2 1.57423622 -3.01217170\n" " 3.41548166\n" "#","\n" "Rh GTH-PBE-q9\n" " 1 0 8\n" " 0.61900948 1 4.70454397\n" " 3\n" " 0.61332681 2 4.99320515 -1.92978191\n" " 2.49133773\n" " 0.69365000 2 2.53237506 -1.28086042\n" " 1.51553449\n" " 0.37003772 2 -16.88260377 14.71821684\n" " -16.68888922\n" "#","\n" "Pd GTH-PBE-q10\n" " 0 0 10\n" " 0.59600000 1 5.29987401\n" " 3\n" " 0.59194990 2 5.30819456 -2.06237933\n" " 2.66252027\n" " 0.66628526 2 2.73458446 -1.46697005\n" " 1.73574237\n" " 0.43851839 2 -3.71978832 -0.80738825\n" " 0.91549223\n" "#","\n" "Pd GTH-PBE-q18 GTH-PBE\n" " 2 6 10\n" " 0.41000000 2 26.78365917 -4.93130594\n" " 3\n" " 0.33797077 2 -0.71872875 4.38486657\n" " -5.66083840\n" " 0.41519591 2 -0.04624449 -1.07795233\n" " 1.27545040\n" " 0.44027049 2 1.63916358 -3.09368795\n" " 3.50791241\n" "#","\n" "Ag GTH-PBE-q11 GTH-PBE\n" " 1 0 10\n" " 0.57000000 1 0.03341912\n" " 3\n" " 0.52704461 3 9.58204535 -5.27424043 0.99704725\n" " 8.43071259 -2.57436494\n" " 2.04333882\n" " 0.62911218 2 3.87401904 -1.74211583\n" " 2.06129925\n" " 0.40538186 2 -2.72495276 -0.43354851\n" " 0.49159781\n" "#","\n" "Ag GTH-PBE-q19\n" " 3 6 10\n" " 0.40000000 2 24.53317558 -4.21395181\n" " 3\n" " 0.31760029 2 0.62551338 4.28490995\n" " -5.53179495\n" " 0.41962178 2 -0.19050165 -0.61441835\n" " 0.72698960\n" " 0.45640092 2 1.75125916 -3.09368795\n" " 3.50791241\n" "#","\n" "Cd GTH-PBE-q12 GTH-PBE\n" " 2 0 10\n" " 0.55000000 1 3.63395858\n" " 3\n" " 0.49127900 3 10.11138228 -6.50695409 1.80457679\n" " 11.33558598 -4.65939724\n" " 3.69828191\n" " 0.59970999 2 4.00148729 -1.88393578\n" " 2.22910288\n" " 0.37787256 2 -6.13703223 1.53571055\n" " -1.74133209\n" "#","\n" "In GTH-PBE-q13 GTH-PBE\n" " 2 1 10\n" " 0.53000000 1 3.32478546\n" " 3\n" " 0.47949521 3 11.11716024 -6.57350729 1.50686327\n" " 10.93727471 -3.89070422\n" " 3.08815074\n" " 0.56993285 2 4.70061419 -2.21706406\n" " 2.62326557\n" " 0.37706890 2 -4.00228785 -0.84012846\n" " 0.95261614\n" "#","\n" "In GTH-PBE-q3\n" " 2 1\n" " 0.61000000 1 5.08622849\n" " 3\n" " 0.68888318 3 0.56228376 0.99900413 -0.48093816\n" " -2.07195476 1.24177699\n" " -0.98562993\n" " 0.76370974 2 0.10892299 0.42327835\n" " -0.50082970\n" " 1.14391192 1 0.11683948\n" "#","\n" "Sn GTH-PBE-q4 GTH-PBE\n" " 2 2\n" " 0.60500000 1 6.26678230\n" " 3\n" " 0.56643732 3 1.57118124 1.47004118 -1.17857669\n" " -3.81477013 3.04307193\n" " -2.41536347\n" " 0.64184959 2 0.52689769 0.40325781\n" " -0.47714107\n" " 0.99087302 1 0.19876639\n" "#","\n" "Sb GTH-PBE-q5 GTH-PBE\n" " 2 3\n" " 0.59000000 1 7.92852084\n" " 3\n" " 0.55613636 3 1.43047790 1.26142599 -0.92323353\n" " -3.13013340 2.38377872\n" " -1.89206570\n" " 0.62275507 2 0.56147233 0.30484522\n" " -0.36069773\n" " 0.88948576 1 0.27086864\n" "#","\n" "Te GTH-PBE-q6 GTH-PBE\n" " 2 4\n" " 0.57500000 1 8.71364868\n" " 3\n" " 0.57492240 3 1.40181273 0.97877992 -0.48630602\n" " -2.05457624 1.25563675\n" " -0.99663078\n" " 0.58989076 2 0.76478865 0.32398623\n" " -0.38334568\n" " 0.81338925 1 0.34485820\n" "#","\n" "I GTH-PBE-q7 GTH-PBE\n" " 2 5\n" " 0.56000000 1 8.20710157\n" " 3\n" " 0.53192813 3 2.30814581 1.00390933 -0.95915606\n" " -2.85610882 2.47653030\n" " -1.96568498\n" " 0.58918244 2 0.90648219 0.42507060\n" " -0.50295032\n" " 0.73972147 1 0.47919458\n" "#","\n" "Xe GTH-PBE-q8 GTH-PBE\n" " 2 6\n" " 0.56000000 1 8.03636262\n" " 3\n" " 0.53049420 3 2.23202148 1.20035836 -0.99849824\n" " -3.17371348 2.57811136\n" " -2.04631245\n" " 0.58177483 2 0.79698181 0.59123264\n" " -0.69955590\n" " 0.68554509 1 0.56018900\n" "#","\n" "Cs GTH-PBE-q9 GTH-PBE\n" " 3 6\n" " 0.54000000 2 33.31331676 -2.92121670\n" " 4\n" " 0.46189568 2 -3.32292700 2.45565338\n" " -3.17023488\n" " 0.36635860 2 -4.95076405 0.84038977\n" " -0.99436259\n" " 0.76150193 1 0.19840723\n" " 0.59701503 1 -1.55056693\n" "#","\n" "Ba GTH-PBE-q10 GTH-PBE\n" " 4 6\n" " 0.54000000 2 24.52678070 -2.46867001\n" " 4\n" " 0.49206839 2 0.09515093 1.16931840\n" " -1.50958357\n" " 0.39148930 2 0.80018261 -1.61683907\n" " 1.91306979\n" " 0.67217348 1 0.38853100\n" " 0.30049773 1 -19.65379452\n" "#","\n" "La GTH-PBE-q11 GTH-PBE\n" " 4 6 1\n" " 0.53500000 2 20.68980469 -1.70327035\n" " 4\n" " 0.56144723 2 -0.02823977 1.07859821\n" " -1.39246430\n" " 0.47517309 2 0.26802268 0.67328503\n" " -0.79664160\n" " 0.62908399 1 0.38022718\n" " 0.29911708 1 -18.44354886\n" "#","\n" "Ce GTH-PBE-q12 GTH-PBE\n" " 4 6 1 1\n" " 0.52480035 2 18.46313266 -0.35928475\n" " 4\n" " 0.52899318 2 -0.46945550 1.68519941\n" " -2.17558308\n" " 0.47758674 2 -0.85915259 1.49893178\n" " -1.77356000\n" " 0.65909303 1 0.10742047\n" " 0.30186583 1 -17.66735258\n" "#","\n" "Ce GTH-PBE-q30\n" " 6 12 11 1\n" " 0.20000000 2 148.23700910 3.91725495\n" " 4\n" " 0.24060899 2 2.21770923 4.21351645\n" " -5.43962635\n" " 0.16613857 3 -4.53697472 11.78843522 0.01475880\n" " -13.92369350 -0.03492570\n" " 0.02482188\n" " 0.17161109 1 -15.00199037\n" " 0.26526997 1 -4.75946878\n" "#","\n" "Pr GTH-PBE-q13 GTH-PBE\n" " 4 6 0 3\n" " 0.53188976 2 16.83551414 -0.43235649\n" " 4\n" " 0.52415103 2 -0.50975406 1.84037783\n" " -2.37591756\n" " 0.48546735 2 -0.98189616 1.60445908\n" " -1.89842158\n" " 0.71653344 1 0.05575046\n" " 0.29937329 1 -17.49550069\n" "#","\n" "Nd GTH-PBE-q14 GTH-PBE\n" " 4 6 0 4\n" " 0.52991298 2 17.80646346 -0.32095543\n" " 4\n" " 0.50114025 2 -1.36443892 2.46474917\n" " -3.18197749\n" " 0.50039105 2 -1.55942619 1.53939247\n" " -1.82143373\n" " 0.33431765 1 -1.70064367\n" " 0.29567529 1 -18.64327128\n" "#","\n" "Pm GTH-PBE-q15 GTH-PBE\n" " 4 6 0 5\n" " 0.52793919 2 17.84482075 -0.36133182\n" " 4\n" " 0.48944396 2 -1.72725500 2.81006693\n" " -3.62778081\n" " 0.49132954 2 -1.87193192 1.65260118\n" " -1.95538409\n" " 0.47893079 1 -0.44781450\n" " 0.29022183 1 -19.51693564\n" "#","\n" "Sm GTH-PBE-q16 GTH-PBE\n" " 4 6 0 6\n" " 0.52466086 2 16.51148828 -0.24504217\n" " 4\n" " 0.48687809 2 -1.59045606 2.90667135\n" " -3.75249657\n" " 0.49648709 2 -1.75047341 1.54491665\n" " -1.82797004\n" " 0.49241328 1 -0.41980527\n" " 0.28444353 1 -19.88144667\n" "#","\n" "Eu GTH-PBE-q17 GTH-PBE\n" " 4 6 0 7\n" " 0.52072219 2 17.93467530 -0.57606530\n" " 4\n" " 0.46955990 2 -2.07710390 3.25447577\n" " -4.20151015\n" " 0.46644592 2 -2.34175427 2.29907112\n" " -2.72029763\n" " 0.47357383 1 -0.59831876\n" " 0.27831058 1 -21.30605878\n" "#","\n" "Gd GTH-PBE-q18 GTH-PBE\n" " 4 6 1 7\n" " 0.52126799 2 18.10313196 -0.51440770\n" " 4\n" " 0.45805877 2 -2.87481761 3.91661136\n" " -5.05632353\n" " 0.46124964 2 -3.05406750 2.55197375\n" " -3.01953606\n" " 0.48332992 1 -0.84348188\n" " 0.27559144 1 -22.18390606\n" "#","\n" "Tb GTH-PBE-q19 GTH-PBE\n" " 4 6 0 9\n" " 0.51588228 2 17.15783725 -0.66955170\n" " 4\n" " 0.45376626 2 -2.42821095 3.74357813\n" " -4.83293859\n" " 0.45360450 2 -2.68351507 2.30311187\n" " -2.72507871\n" " 0.47258283 1 -0.72646091\n" " 0.26876196 1 -22.75147607\n" "#","\n" "Dy GTH-PBE-q20 GTH-PBE\n" " 4 6 0 10\n" " 0.51029687 2 17.67093508 -0.86787770\n" " 4\n" " 0.44212348 2 -2.71573384 4.01788426\n" " -5.18706627\n" " 0.45017230 2 -2.77347535 2.20115245\n" " -2.60443870\n" " 0.47116514 1 -0.75227561\n" " 0.26180741 1 -24.24856414\n" "#","\n" "Ho GTH-PBE-q21 GTH-PBE\n" " 4 6 0 11\n" " 0.51034519 2 17.00694728 -1.14166376\n" " 4\n" " 0.43408065 2 -2.64595349 4.10374692\n" " -5.29791449\n" " 0.43159817 2 -3.06100899 2.73161511\n" " -3.23209058\n" " 0.45020006 1 -0.82014316\n" " 0.25514026 1 -25.40966658\n" "#","\n" "Er GTH-PBE-q22 GTH-PBE\n" " 4 6 0 12\n" " 0.50173422 2 17.22416099 -1.23324605\n" " 4\n" " 0.42576787 2 -2.61580658 4.19913757\n" " -5.42106329\n" " 0.41793960 2 -3.15341814 3.17618553\n" " -3.75811340\n" " 0.43046826 1 -0.89805056\n" " 0.24914231 1 -26.58720599\n" "#","\n" "Tm GTH-PBE-q23 GTH-PBE\n" " 4 6 0 13\n" " 0.50234443 2 17.68675860 -1.59907075\n" " 4\n" " 0.41312714 2 -3.20033933 4.64501695\n" " -5.99669110\n" " 0.41759033 2 -3.17289513 2.80513657\n" " -3.31908235\n" " 0.39281519 1 -1.44965467\n" " 0.24385920 1 -28.31696046\n" "#","\n" "Yb GTH-PBE-q24 GTH-PBE\n" " 4 6 0 14\n" " 0.49808783 2 17.08328394 -1.56295270\n" " 4\n" " 0.40553079 2 -3.55061134 5.03314458\n" " -6.49776171\n" " 0.42489671 2 -3.13538311 2.14082491\n" " -2.53305819\n" " 0.44507157 1 -0.91407703\n" " 0.23857822 1 -29.66528314\n" "#","\n" "Lu GTH-PBE-q25 GTH-PBE\n" " 4 6 1 14\n" " 0.49611621 2 18.63208417 -1.51663710\n" " 4\n" " 0.39319895 2 -5.65573977 6.47885270\n" " -8.36416287\n" " 0.41028936 2 -4.66078088 2.84645630\n" " -3.36797252\n" " 0.43890201 1 -1.52277808\n" " 0.23494399 1 -32.20596727\n" "#","\n" "Hf GTH-PBE-q12 GTH-PBE\n" " 4 6 2\n" " 0.56000000 2 15.52236567 -2.43356678\n" " 3\n" " 0.31182849 3 -10.91013059 27.37264587 -14.96156977\n" " -59.67292892 38.63060703\n" " -30.66209376\n" " 0.36196660 2 -9.65170049 9.22329739\n" " -10.91315264\n" " 0.41579070 2 -2.74891464 0.48133335\n" " -0.54578072\n" "#","\n" "Ta GTH-PBE-q13 GTH-PBE\n" " 4 6 3\n" " 0.55000000 2 13.38520167 -2.25392008\n" " 3\n" " 0.40088312 3 -4.43670899 4.17648934 1.87560787\n" " -2.34114813 -4.84279868\n" " 3.84385229\n" " 0.35654936 2 -7.62442808 8.17895534\n" " -9.67747047\n" " 0.41822925 2 -1.11356085 -0.87533080\n" " 0.99253183\n" "#","\n" "Ta GTH-PBE-q5\n" " 2 0 3\n" " 0.74400000 1 9.83934257\n" " 3\n" " 0.45239666 2 6.12338066 -2.16890335\n" " 2.80004218\n" " 0.75164390 2 1.64970103 -2.51481038\n" " 2.97556377\n" " 0.50114181 2 -12.42334477 9.01473381\n" " -10.22174735\n" "#","\n" "W GTH-PBE-q14 GTH-PBE\n" " 4 6 4\n" " 0.54000000 2 13.41481123 -2.21345603\n" " 3\n" " 0.39702790 3 -4.14121089 3.83542346 2.23317927\n" " -1.31924404 -5.76604408\n" " 4.57665561\n" " 0.35353069 2 -7.45623626 8.11232637\n" " -9.59863401\n" " 0.41210703 2 -0.95466075 -1.06744623\n" " 1.21037026\n" "#","\n" "W GTH-PBE-q6\n" " 2 0 4\n" " 0.71900000 1 10.69989013\n" " 3\n" " 0.46755372 2 5.80350289 -2.07063257\n" " 2.67317516\n" " 0.72666463 2 1.78871915 -2.55415819\n" " 3.02212073\n" " 0.49929065 2 -10.59832562 6.44789319\n" " -7.31122365\n" "#","\n" "Re GTH-PBE-q15 GTH-PBE\n" " 4 6 5\n" " 0.53000000 2 13.46263143 -2.23492240\n" " 3\n" " 0.39380077 3 -3.71748055 3.15477903 2.85593500\n" " 0.57237640 -7.37399245\n" " 5.85292506\n" " 0.35253332 2 -7.05340425 7.56675835\n" " -8.95310922\n" " 0.40186765 2 -0.90002359 -1.14917105\n" " 1.30303749\n" "#","\n" "Re GTH-PBE-q7\n" " 2 0 5\n" " 0.69300000 1 11.96194160\n" " 3\n" " 0.46331539 2 6.08700876 -2.19137969\n" " 2.82905901\n" " 0.70964824 2 1.81506156 -2.35412193\n" " 2.78543463\n" " 0.47606454 2 -12.39371002 8.00629664\n" " -9.07828707\n" "#","\n" "Os GTH-PBE-q16 GTH-PBE\n" " 4 6 6\n" " 0.52000000 2 13.46303008 -2.24116983\n" " 3\n" " 0.39012207 3 -3.27416829 2.36003137 3.61101851\n" " 2.82653464 -9.32360969\n" " 7.40038577\n" " 0.34945025 2 -6.89928214 7.52931882\n" " -8.90881017\n" " 0.39284207 2 -0.94268282 -1.08157042\n" " 1.22638558\n" "#","\n" "Os GTH-PBE-q8\n" " 2 0 6\n" " 0.66700000 1 13.07904899\n" " 3\n" " 0.49576015 2 4.35033878 -1.49680274\n" " 1.93236403\n" " 0.70116140 2 1.81669550 -1.99815917\n" " 2.36425382\n" " 0.47117333 2 -10.99598697 5.97918090\n" " -6.77975387\n" "#","\n" "Ir GTH-PBE-q17 GTH-PBE\n" " 4 6 7\n" " 0.51000000 2 13.41080576 -2.34194822\n" " 3\n" " 0.38726411 3 -2.51628491 1.05519006 4.67505628\n" " 6.24173509 -12.07094340\n" " 9.58101430\n" " 0.34608307 2 -6.52615069 7.35318392\n" " -8.70040455\n" " 0.37881290 2 -0.85595250 -1.17535111\n" " 1.33272289\n" "#","\n" "Ir GTH-PBE-q9\n" " 2 0 7\n" " 0.64100000 1 14.58181397\n" " 3\n" " 0.51010474 2 3.71524999 -1.26263745\n" " 1.63005794\n" " 0.68489160 2 1.91910152 -1.89619458\n" " 2.24360769\n" " 0.47173508 2 -8.85603130 3.17025312\n" " -3.59472915\n" "#","\n" "Pt GTH-PBE-q10\n" " 1 0 9\n" " 0.61600000 1 11.31363525\n" " 3\n" " 0.55090426 2 4.73349110 -1.78459401\n" " 2.30390096\n" " 0.67413781 2 2.53479850 -1.77806555\n" " 2.10383553\n" " 0.45739243 2 -7.26401101 2.55866480\n" " -2.90125318\n" "#","\n" "Pt GTH-PBE-q18 GTH-PBE\n" " 3 6 9\n" " 0.50000000 2 8.81432324 -0.29250943\n" " 3\n" " 0.29800221 3 -5.96838498 24.21289966 -13.78967932\n" " -53.68763413 35.60479890\n" " -28.26043301\n" " 0.36017182 3 -6.66865904 7.17065922 0.76690370\n" " -7.20766072 -1.81482538\n" " 1.28980604\n" " 0.34053206 2 -8.58990455 9.41012200\n" " -10.67007542\n" "#","\n" "Au GTH-PBE-q11 GTH-PBE\n" " 1 0 10\n" " 0.59000000 1 10.51717881\n" " 3\n" " 0.54384733 2 5.78681103 -2.25067966\n" " 2.90561495\n" " 0.60917298 2 4.28404873 -4.07128520\n" " 4.81720962\n" " 0.43730922 2 -7.40328124 3.01019307\n" " -3.41323811\n" "#","\n" "Au GTH-PBE-q19\n" " 3 6 10\n" " 0.49000000 1 8.36945885\n" " 3\n" " 0.29008402 3 -5.98869002 26.10502137 -15.17621948\n" " -58.38556050 39.18483021\n" " -31.10199477\n" " 0.36150576 3 -5.87695332 4.73144606 2.92710526\n" " -0.72513863 -6.92679530\n" " 4.92291022\n" " 0.34037313 2 -8.80458432 9.49191532\n" " -10.76282032\n" "#","\n" "Hg GTH-PBE-q12 GTH-PBE\n" " 2 0 10\n" " 0.57000000 1 8.46784734\n" " 3\n" " 0.52978669 2 7.37124306 -2.96994403\n" " 3.83418126\n" " 0.63516596 2 3.55116141 -1.72290935\n" " 2.03857383\n" " 0.40798543 2 -8.61398015 5.00756120\n" " -5.67804069\n" "#","\n" "Tl GTH-PBE-q13 GTH-PBE\n" " 2 1 10\n" " 0.55000000 1 12.29058515\n" " 3\n" " 0.51280306 2 7.19017017 -2.86301073\n" " 3.69613096\n" " 0.57711505 2 4.76094580 -3.67332496\n" " 4.34633671\n" " 0.39323001 2 -11.01268700 6.42159202\n" " -7.28140093\n" "#","\n" "Tl GTH-PBE-q3\n" " 2 1\n" " 0.63000000 1 1.45272083\n" " 3\n" " 0.78076788 3 0.37973043 1.20912802 -0.45856792\n" " -2.30683834 1.18401727\n" " -0.93978457\n" " 0.89705009 2 -0.02423596 0.58235582\n" " -0.68905269\n" " 1.09379194 1 0.22764152\n" "#","\n" "Pb GTH-PBE-q14\n" " 2 2 10\n" " 0.53000000 1 12.57214281\n" " 3\n" " 0.49554891 2 8.42980665 -3.44005610\n" " 4.44109332\n" " 0.56934785 2 4.98150638 -2.89639920\n" " 3.42706575\n" " 0.40422413 2 -6.81491262 1.83782673\n" " -2.08389964\n" "#","\n" "Pb GTH-PBE-q4 GTH-PBE\n" " 2 2\n" " 0.61750000 1 4.67238428\n" " 3\n" " 0.62235881 3 0.87991768 2.08114784 -1.43125710\n" " -5.01469016 3.69548994\n" " -2.93320421\n" " 0.81200202 2 0.15345679 0.47889785\n" " -0.56663958\n" " 1.02501525 1 0.30170206\n" "#","\n" "Bi GTH-PBE-q15\n" " 2 3 10\n" " 0.51000000 1 13.39622231\n" " 3\n" " 0.48120446 2 9.54548100 -3.94511418\n" " 5.09312050\n" " 0.54894636 2 5.63359371 -3.17713769\n" " 3.75924002\n" " 0.39730251 2 -6.03753705 0.92523553\n" " -1.04911848\n" "#","\n" "Bi GTH-PBE-q5 GTH-PBE\n" " 2 3\n" " 0.60500000 1 7.94575692\n" " 3\n" " 0.58223216 3 0.64373527 2.24761617 -1.44060063\n" " -5.24479711 3.71961484\n" " -2.95235275\n" " 0.76639400 2 0.21253292 0.37983417\n" " -0.44942585\n" " 0.96565479 1 0.34729822\n" "#","\n" "Po GTH-PBE-q6 GTH-PBE\n" " 2 4\n" " 0.59250000 1 8.13432566\n" " 3\n" " 0.80422357 3 0.32633408 0.10539986 0.52809414\n" " 0.72287456 -1.36353322\n" " 1.08227094\n" " 0.81703652 2 0.15801481 0.37530247\n" " -0.44406387\n" " 0.89014943 1 0.46253238\n" "#","\n" "At GTH-PBE-q7 GTH-PBE\n" " 2 5\n" " 0.58000000 1 14.21716853\n" " 3\n" " 0.66580683 3 -0.37891203 0.66112626 0.27884944\n" " -0.39996168 -0.71998616\n" " 0.57147130\n" " 0.65241195 2 0.26704745 0.32622823\n" " -0.38599845\n" " 0.85406059 1 0.45259467\n" "#","\n" "Rn GTH-PBE-q8 GTH-PBE\n" " 2 6\n" " 0.57000000 1 16.20061781\n" " 3\n" " 0.63480802 3 -0.58199405 0.80312797 0.29738605\n" " -0.55313531 -0.76784748\n" " 0.60946004\n" " 0.64710877 2 0.16927880 0.30517348\n" " -0.36108613\n" " 0.80634271 1 0.51103874\n" "#","\n" "U GTH-PBE-q14\n" " 4 6 1 3\n" " 0.48000000 2 48.86182633 -4.59713581\n" " 4\n" " 0.51405537 3 -0.65017014 -1.15225083 1.84763553\n" " 4.49272884 -4.77057442\n" " 3.78652606\n" " 0.40934387 3 3.58555843 -6.88134873 4.03097788\n" " 14.85308504 -9.53903470\n" " 6.77944264\n" " 0.67885536 2 0.53789816 0.48180765\n" " -0.54631852\n" " 0.32134043 1 -16.65115610\n" "#","\n" "B GTH-PBESol-q3 GTH-PBESol\n" " 2 1\n" " 0.42188166 2 -5.99194495 0.94658199\n" " 2\n" " 0.37186069 1 6.29208376\n" " 0.36287582 0\n" "#","\n" "H GTH-OLYP-q1 GTH-OLYP\n" " 1\n" " 0.20000000 2 -4.16025705 0.71696182\n" " 0\n" "#","\n" "B GTH-OLYP-q3\n" " 2 1\n" " 0.40824397 2 -5.84551716 0.92100194\n" " 2\n" " 0.37035120 1 6.31003106\n" " 0.35773831 0\n" "#","\n" "C GTH-OLYP-q4\n" " 2 2\n" " 0.33266812 2 -8.65195820 1.32052627\n" " 2\n" " 0.30204607 1 9.62061855\n" " 0.29182215 0\n" "#","\n" "N GTH-OLYP-q5\n" " 2 3\n" " 0.28091145 2 -12.16718730 1.82099926\n" " 2\n" " 0.25510834 1 13.61560292\n" " 0.24679335 0\n" "#","\n" "O GTH-OLYP-q6 GTH-OLYP\n" " 2 4\n" " 0.24340006 2 -16.34721549 2.41772603\n" " 2\n" " 0.22079018 1 18.31443918\n" " 0.22008988 0\n" "#","\n" "F GTH-OLYP-q7\n" " 2 5\n" " 0.21382039 2 -21.28598900 3.12167577\n" " 2\n" " 0.19453412 1 23.73308173\n" " 0.16302766 0\n" "#","\n" "P GTH-OLYP-q5\n" " 2 3\n" " 0.43000000 1 -4.69763642\n" " 2\n" " 0.39666347 2 10.63544240 -3.29388139\n" " 4.25238258\n" " 0.44942590 1 2.88712442\n" "#","\n" "S GTH-OLYP-q6\n" " 2 4\n" " 0.42000000 1 -5.70095751\n" " 2\n" " 0.36360282 2 13.23499116 -4.28266416\n" " 5.52889566\n" " 0.40854250 1 3.70359686\n" "#","\n" "Cl GTH-OLYP-q7\n" " 2 5\n" " 0.41000000 1 -6.18936120\n" " 2\n" " 0.33820768 2 15.35745265 -4.99108675\n" " 6.44346529\n" " 0.37732312 1 4.35487695\n" "#","\n" "H GTH-HF-q1 GTH-HF\n" " 1 0 0 0\n" " 0.196680577426 2 -4.122010670148 0.685113494453\n" " 0\n" "#","\n" "C GTH-HF-q4 GTH-HF\n" " 2 2 0 0\n" " 0.315416975333 2 -8.867306339232 1.255277018021\n" " 1\n" " 0.301022709314 1 9.800185699152\n" "#","\n" "N GTH-HF-q5 GTH-HF\n" " 2 3 0 0\n" " 0.293004428534 2 -12.353673551345 1.940376934223\n" " 1\n" " 0.255011990622 1 13.748056543074\n" "#","\n" "O GTH-HF-q6 GTH-HF\n" " 2 4 0 0\n" " 0.246496621432 2 -17.087623980861 2.645053514530\n" " 1\n" " 0.220770923508 1 18.522680682057\n" "#","\n" "Al GTH-NLCC-PBE-q3 GTH-NLCC-PBE\n" " 2 1 \n" " 0.35000000 2 -1.20404111 -2.14848844 \n" " NLCC 1\n" " 0.487749457320947 1 26.6661157296629\n" " 2 \n" " 0.46845918 2 2.69261923 0.00000000\n" " 2.15425102\n" " 0.54697362 1 2.13803860 \n" "#","\n" "B GTH-NLCC-PBE-q3 GTH-NLCC-PBE\n" " 2 1\n" " 0.43249960 2 -4.26853158 0.59951279\n" " NLCC 1 \n" " 0.333523099251602 1 18.6519880515354\n" " 1 \n" " 0.37147150 1 6.30164101 \n" "#","\n" "C GTH-NLCC-PBE-q4 GTH-NLCC-PBE\n" " 2 2\n" " 0.31478662 2 -6.92377020 0.96359690\n" " NLCC 1 \n" " 0.274399357915869 1 58.7058349842360\n" " 2 \n" " 0.30228391 1 9.57595383 \n" " 0.36878252 1 -0.00996437 \n" "#","\n" "Cl GTH-NLCC-PBE-q7 GTH-NLCC-PBE\n" " 2 5\n" " 0.32000000 1 -0.27448290\n" " NLCC 1\n" " 0.42147846 1 31.2490172184\n" " 2\n" " 0.32659110 2 4.20335702 0.00000000\n" " 4.55651710\n" " 0.36756872 1 4.22907835\n" "#","\n" "F GTH-NLCC-PBE-q7 GTH-NLCC-PBE\n" " 2 5\n" " 0.20610323 2 -19.86716500 2.79308907\n" " NLCC 1 \n" " 0.171542709683482 1 193.635582221771\n" " 1 \n" " 0.19518097 1 23.47047311 \n" "#","\n" "H GTH-NLCC-PBE-q1 GTH-NLCC-PBE\n" " 1 \n" " 0.20000000 2 -4.07311634 0.68070153 \n" " 0 \n" "#","\n" "N GTH-NLCC-PBE-q5 GTH-NLCC-PBE\n" " 2 3\n" " 0.24179589 2 -10.04328500 1.39719020 \n" " NLCC 1 \n" " 0.246115465086927 1 70.6868378070653\n" " 2 \n" " 0.25696561 1 12.96801666 \n" " 0.15685548 1 -0.73452991 \n" "#","\n" "O GTH-NLCC-PBE-q6 GTH-NLCC-PBE\n" " 2 4\n" " 0.26099935 2 -14.15180600 1.97829510 \n" " NLCC 1 \n" " 0.252338420313492 1 44.0109866619909\n" " 2 \n" " 0.22308282 1 18.37181432 \n" " 0.26844098 1 0.10003633 \n" "#","\n" "P GTH-NLCC-PBE-q5 GTH-NLCC-PBE\n" " 2 3\n" " 0.34000000 2 -1.62258310 -0.72412131 \n" " NLCC 1 \n" " 0.398676358021430 1 57.5022588665043\n" " 2 \n" " 0.38208906 2 3.47753509 -0.01266608\n" " 3.47461367\n" " 0.43410975 1 3.37859278 \n" "#","\n" "S GTH-NLCC-PBE-q6 GTH-NLCC-PBE\n" " 2 4\n" " 0.33000000 2 1.49042820 -0.73313881 \n" " NLCC 1 \n" " 0.386218088400348 1 79.6359982164901\n" " 2 \n" " 0.37045712 2 6.18604810 0.00000000\n" " 2.57760787\n" " 0.39772434 1 3.89113272 \n" "#","\n" "Si GTH-NLCC-PBE-q4 GTH-NLCC-PBE\n" " 2 2\n" " 0.33000000 2 -0.07845999 -0.79378214 \n" " NLCC 1\n" " 0.442792079831528 1 38.1776559763904\n" " 2 \n" " 0.42179461 2 2.87392223 0.02558827\n" " 2.59458148\n" " 0.48800255 1 2.47962806\n" "#","\n" "H ALLELECTRON ALL\n" " 1 0 0\n" " 0.20000000 0\n" "#","\n" "He ALLELECTRON ALL\n" " 2 0 0 \n" " 0.20000000 0\n" "#","\n" "Li ALLELECTRON ALL\n" " 3 0 0 \n" " 0.40000000 0\n" "#","\n" "Be ALLELECTRON ALL\n" " 4 0 0 \n" " 0.32500000 0\n" "#","\n" "B ALLELECTRON ALL\n" " 4 1 0\n" " 0.43392956 0\n" "#","\n" "C ALLELECTRON ALL\n" " 4 2 0\n" " 0.34883045 0\n" "#","\n" "N ALLELECTRON ALL\n" " 4 3 0\n" " 0.28917923 0\n" "#","\n" "O ALLELECTRON ALL\n" " 4 4 0\n" " 0.24762086 0\n" "#","\n" "F ALLELECTRON ALL\n" " 4 5 0\n" " 0.21852465 0\n" "#","\n" "Ne ALLELECTRON ALL\n" " 4 6 0\n" " 0.19000000 0\n" "#","\n" "Na ALLELECTRON ALL\n" " 5 6 0\n" " 0.24631780 0\n" "#","\n" "Mg ALLELECTRON ALL\n" " 6 6 0\n" " 0.21094954 0\n" "#","\n" "Al ALLELECTRON ALL\n" " 6 7 0\n" " 0.45000000 0\n" "#","\n" "Si ALLELECTRON ALL\n" " 6 8 0\n" " 0.44000000 0\n" "#","\n" "P ALLELECTRON ALL\n" " 6 9 0\n" " 0.43000000 0\n" "#","\n" "S ALLELECTRON ALL\n" " 6 10 0\n" " 0.42000000 0\n" "#","\n" "Cl ALLELECTRON ALL\n" " 6 11 0\n" " 0.41000000 0\n" "#","\n" "Ar ALLELECTRON ALL\n" " 6 12 0\n" " 0.40000000 0\n" "#","\n" "K ALLELECTRON ALL\n" " 7 12 0\n" " 0.40000000 0\n" "#","\n" "Ca ALLELECTRON ALL\n" " 8 12 0\n" " 0.39000000 0\n" "#","\n" "Sc ALLELECTRON ALL\n" " 8 12 1\n" " 0.38500000 0\n" "#","\n" "Ti ALLELECTRON ALL\n" " 8 12 2\n" " 0.3800000 0\n" "#","\n" "V ALLELECTRON ALL\n" " 8 12 3\n" " 0.37500000 0\n" "#","\n" "Cr ALLELECTRON ALL\n" " 8 12 4\n" " 0.37000000 0\n" "#","\n" "Mn ALLELECTRON ALL\n" " 8 12 5\n" " 0.36500000 0\n" "#","\n" "Fe ALLELECTRON ALL\n" " 8 12 6\n" " 0.36000000 0\n" "#","\n" "Co ALLELECTRON ALL\n" " 8 12 7\n" " 0.35500000 0\n" "#","\n" "Ni ALLELECTRON ALL\n" " 8 12 8\n" " 0.35000000 0\n" "#","\n" "Cu ALLELECTRON ALL\n" " 8 12 9\n" " 0.53000000 0\n" "#","\n" "Zn ALLELECTRON ALL\n" " 8 12 10\n" " 0.34000000 0\n" "#","\n" "Ga ALLELECTRON ALL\n" " 8 13 10\n" " 0.49000000 0\n" "#","\n" "Ge ALLELECTRON ALL\n" " 8 14 10\n" " 0.54000000 0\n" "#","\n" "As ALLELECTRON ALL\n" " 8 15 10\n" " 0.52000000 0\n" "#","\n" "Se ALLELECTRON ALL\n" " 8 16 10\n" " 0.51000000 0\n" "#","\n" "Br ALLELECTRON ALL\n" " 8 17 10\n" " 0.50000000 0\n" "#","\n" "Kr ALLELECTRON ALL\n" " 8 18 10\n" " 0.50000000 0\n" "#","\n" "I ALLELECTRON ALL\n" " 10 23 20\n" " 0.50000000 0\n" }; atomes_1.3.1/src/calc/cp2k/cp2k.h0000664000175000017500000000771415212624223016056 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cp2k.h * @short Variable declarations for the creation of the CP2K input file(s) * @author Sébastien Le Roux */ /* * This header file: 'cp2k.h' * * Contains: Variable declarations for the creation of the CP2K input file(s) * Called by: calc/cp2k/cp2k_files.c calc/cp2k/cp2k_init.c calc/cp2k/cp2k_mol.c calc/cp2k/cp2k_print.c calc/cpmd/cpmd_init.c calc/cpmd/cpmd_nose.c */ #ifndef CP2K_H_ #define CP2K_H_ #define CP2RUN 0 // Def: 0 = ENERGY run #define CP2KTI 1 // Def: 86400 = 24h #define CP2PLE 2 // Def: 1 = MEDIUM #define CP2RES 3 // Def: 0 = Not a restart #define CP2FRE 4 // Def: 0 = Null #define CP2FBA 5 // Def: 0 = Null #define CP2FPS 6 // Def: 0 = Null #define CP2FWV 7 // Def: 0 = Null #define CP2CHA 8 // Def: 0 = neutral #define CP2CUT 9 // Def: 300 #define CP2GRI 10 // Def: 4 #define CP2QSM 11 // Def: 0 = GPW #define CP2SCG 12 // Def: Guess 0 = ATOMS #define CP2SNN 13 // Def: 50 #define CP2SCN 14 // Def: 0.000001 #define CP2SNO 15 // Def: 20 #define CP2SCO 16 // Def: 0.00001 #define CP2SMI 17 // Def: 2 = DIIS #define CP2FCT 18 // Def: 0 = BLYP #define CP2SPI 19 // Def: 0 = spin restricted #define CP2SPM 20 // Def: 0 spin multiplicity #define CP2VDW 21 // Def: 0 = non vdw #define CP2ROK 22 // Def: 0 = non ROKS #define CP2PFO 23 // Def: 0 = do not print forces #define CP2PST 24 // Def: 0 = do not print stress tensor #define CP2PMU 25 // Def: 0 = do not print Mulliken #define CP2PLO 26 // Def: 0 = do not print Löwdin #define CP2POR 27 // Def: 0 = do not print orbitals #define CP2PBC 28 // Def: f(system) #define CP2LAT 29 // 0 = a,b,c,alpha,beta,gamma :: 1 = ax,ay,az,bx,by,bz,cx,cy,cz #define CP2SYM 30 // Def: f(system) #define CP2ENS 31 // Def: 7 = NVT ensemble #define CP2NST 32 // Def: 10000 max step md #define CP2DLT 33 // Def: 2.5 #define CP2TMP 34 // Def: 300 #define CP2GMI 35 // Def: 1 = CG geometry optimizer #define CP2MAG 36 // Def: 10000 max step geo #define CP2GEF 37 // Def: 0.0001 #define CP2OUF 38 // Def: 10 #define CP2CON 39 // Def: 0 #define CP2OUU 40 // Def: 0 #define NCP2KCALC 7 #define CP2NTHERM 5 extern cp2k * tmp_cp2k; extern double default_cp2k_options[41]; extern double default_cp2k_extra[3][4]; extern double default_vdw_cut[2]; extern int cp2k_default_num[12]; extern gchar * cp2k_default_keywords[11][11]; extern gchar * cp2k_default_text[11][11]; extern gchar * cp2k_vdw_keywords[2][3]; extern int cp2k_is_basis_in_database (int sp); extern int cp2k_is_pseudo_in_database (int sp); extern GtkWidget * prepare_basis_combo (int sp, int obj); extern gchar * get_nth_elem (int sp, int id, int obj); extern gchar * get_nth_key (int sp, int id, int obj); extern int find_cp2k_sym (); // For CP2K v9.1 #define N_MOLOPT 191 extern char * molopt_elem[N_MOLOPT]; extern char * molopt_keys[N_MOLOPT]; extern char * cp2k_molopt[N_MOLOPT]; #define N_GTH 156 extern char * gth_elem[N_GTH]; extern char * gth_keys[N_GTH]; extern char * cp2k_gth[N_GTH]; #define N_BASIS 250 extern char * basis_elem[N_BASIS]; extern char * basis_keys[N_BASIS]; extern char * cp2k_basis[N_BASIS]; #define N_POTS 421 extern char * pot_elem[N_POTS]; extern char * pot_keys[N_POTS]; extern char * cp2k_pot[N_POTS]; #endif atomes_1.3.1/src/calc/cp2k/cp2k_molopt-basis.c0000664000175000017500000042011515212624223020534 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cp2k_molopt-basis.c * @short CP2K MOLOPT basis set, as distributed with CP2K 9.1 * @author Sébastien Le Roux */ /* * This file: 'cp2k_molopt-basis.c' * * Contains: * - CP2K MOLOPT basis set, as distributed with CP2K 9.1 This file contains 3 tables: molopt_elem -> the list of chemical elements molopt_keys -> the list of keywords cp2k_molopt -> finally the complete MOLOPT basis set */ #include "global.h" char * molopt_elem[191]={"H", "H", "H", "H", "H", "C", "C", "C", "C", "C", "N", "N", "N", "N", "N", "O", "O", "O", "O", "O", "F", "F", "F", "F", "F", "Si", "Si", "Si", "Si", "Si", "P", "P", "P", "P", "P", "S", "S", "S", "S", "S", "Cl", "Cl", "Cl", "Cl", "Cl", "H", "H", "He", "He", "Li", "Li", "Be", "Be", "B", "B", "C", "C", "N", "N", "O", "O", "F", "F", "Ne", "Ne", "Na", "Na", "Mg", "Mg", "Al", "Al", "Si", "Si", "P", "P", "S", "S", "Cl", "Cl", "Ar", "Ar", "K", "K", "Ca", "Ca", "Sc", "Sc", "Ti", "Ti", "V", "V", "Cr", "Cr", "Mn", "Mn", "Fe", "Fe", "Co", "Co", "Ni", "Ni", "Cu", "Cu", "Zn", "Zn", "Ga", "Ga", "Ge", "Ge", "As", "As", "Se", "Se", "Br", "Br", "Kr", "Kr", "Rb", "Rb", "Sr", "Sr", "Y", "Y", "Zr", "Zr", "Nb", "Nb", "Mo", "Mo", "Tc", "Tc", "Ru", "Ru", "Rh", "Rh", "Rh", "Rh", "Rh", "Pd", "Pd", "Ag", "Ag", "Cd", "Cd", "In", "In", "Sn", "Sn", "Sb", "Sb", "Te", "Te", "I", "I", "Xe", "Xe", "Cs", "Cs", "Ba", "Ba", "Hf", "Hf", "Ta", "Ta", "W", "W", "Re", "Re", "Os", "Os", "Ir", "Ir", "Pt", "Pt", "Au", "Au", "Hg", "Hg", "Tl", "Tl", "Pb", "Pb", "Bi", "Bi", "Po", "Po", "At", "At", "Rn", "Rn", "U"}; char * molopt_keys[191]={"SZV-MOLOPT-GTH-q1", "DZVP-MOLOPT-GTH-q1", "TZVP-MOLOPT-GTH-q1", "TZV2P-MOLOPT-GTH-q1", "TZV2PX-MOLOPT-GTH-q1", "SZV-MOLOPT-GTH-q4", "DZVP-MOLOPT-GTH-q4", "TZVP-MOLOPT-GTH-q4", "TZV2P-MOLOPT-GTH-q4", "TZV2PX-MOLOPT-GTH-q4", "SZV-MOLOPT-GTH-q5", "DZVP-MOLOPT-GTH-q5", "TZVP-MOLOPT-GTH-q5", "TZV2P-MOLOPT-GTH-q5", "TZV2PX-MOLOPT-GTH-q5", "SZV-MOLOPT-GTH-q6", "DZVP-MOLOPT-GTH-q6", "TZVP-MOLOPT-GTH-q6", "TZV2P-MOLOPT-GTH-q6", "TZV2PX-MOLOPT-GTH-q6", "SZV-MOLOPT-GTH-q7", "DZVP-MOLOPT-GTH-q7", "TZVP-MOLOPT-GTH-q7", "TZV2P-MOLOPT-GTH-q7", "TZV2PX-MOLOPT-GTH-q7", "SZV-MOLOPT-GTH-q4", "DZVP-MOLOPT-GTH-q4", "TZVP-MOLOPT-GTH-q4", "TZV2P-MOLOPT-GTH-q4", "TZV2PX-MOLOPT-GTH-q4", "SZV-MOLOPT-GTH-q5", "DZVP-MOLOPT-GTH-q5", "TZVP-MOLOPT-GTH-q5", "TZV2P-MOLOPT-GTH-q5", "TZV2PX-MOLOPT-GTH-q5", "SZV-MOLOPT-GTH-q6", "DZVP-MOLOPT-GTH-q6", "TZVP-MOLOPT-GTH-q6", "TZV2P-MOLOPT-GTH-q6", "TZV2PX-MOLOPT-GTH-q6", "SZV-MOLOPT-GTH-q7", "DZVP-MOLOPT-GTH-q7", "TZVP-MOLOPT-GTH-q7", "TZV2P-MOLOPT-GTH-q7", "TZV2PX-MOLOPT-GTH-q7", "SZV-MOLOPT-SR-GTH-q1", "DZVP-MOLOPT-SR-GTH-q1", "SZV-MOLOPT-SR-GTH-q2", "DZVP-MOLOPT-SR-GTH-q2", "SZV-MOLOPT-SR-GTH-q3", "DZVP-MOLOPT-SR-GTH-q3", "SZV-MOLOPT-SR-GTH-q4", "DZVP-MOLOPT-SR-GTH-q4", "SZV-MOLOPT-SR-GTH-q3", "DZVP-MOLOPT-SR-GTH-q3", "SZV-MOLOPT-SR-GTH-q4", "DZVP-MOLOPT-SR-GTH-q4", "SZV-MOLOPT-SR-GTH-q5", "DZVP-MOLOPT-SR-GTH-q5", "SZV-MOLOPT-SR-GTH-q6", "DZVP-MOLOPT-SR-GTH-q6", "SZV-MOLOPT-SR-GTH-q7", "DZVP-MOLOPT-SR-GTH-q7", "SZV-MOLOPT-SR-GTH-q8", "DZVP-MOLOPT-SR-GTH-q8", "SZV-MOLOPT-SR-GTH-q9", "DZVP-MOLOPT-SR-GTH-q9", "SZV-MOLOPT-SR-GTH-q10", "DZVP-MOLOPT-SR-GTH-q10", "SZV-MOLOPT-SR-GTH-q3", "DZVP-MOLOPT-SR-GTH-q3", "SZV-MOLOPT-SR-GTH-q4", "DZVP-MOLOPT-SR-GTH-q4", "SZV-MOLOPT-SR-GTH-q5", "DZVP-MOLOPT-SR-GTH-q5", "SZV-MOLOPT-SR-GTH-q6", "DZVP-MOLOPT-SR-GTH-q6", "SZV-MOLOPT-SR-GTH-q7", "DZVP-MOLOPT-SR-GTH-q7", "SZV-MOLOPT-SR-GTH-q8", "DZVP-MOLOPT-SR-GTH-q8", "SZV-MOLOPT-SR-GTH-q9", "DZVP-MOLOPT-SR-GTH-q9", "SZV-MOLOPT-SR-GTH-q10", "DZVP-MOLOPT-SR-GTH-q10", "SZV-MOLOPT-SR-GTH-q11", "DZVP-MOLOPT-SR-GTH-q11", "SZV-MOLOPT-SR-GTH-q12", "DZVP-MOLOPT-SR-GTH-q12", "SZV-MOLOPT-SR-GTH-q13", "DZVP-MOLOPT-SR-GTH-q13", "SZV-MOLOPT-SR-GTH-q14", "DZVP-MOLOPT-SR-GTH-q14", "SZV-MOLOPT-SR-GTH-q15", "DZVP-MOLOPT-SR-GTH-q15", "SZV-MOLOPT-SR-GTH-q16", "DZVP-MOLOPT-SR-GTH-q16", "SZV-MOLOPT-SR-GTH-q17", "DZVP-MOLOPT-SR-GTH-q17", "SZV-MOLOPT-SR-GTH-q18", "DZVP-MOLOPT-SR-GTH-q18", "SZV-MOLOPT-SR-GTH-q11", "DZVP-MOLOPT-SR-GTH-q11", "SZV-MOLOPT-SR-GTH-q12", "DZVP-MOLOPT-SR-GTH-q12", "SZV-MOLOPT-SR-GTH-q13", "DZVP-MOLOPT-SR-GTH-q13", "SZV-MOLOPT-SR-GTH-q4", "DZVP-MOLOPT-SR-GTH-q4", "SZV-MOLOPT-SR-GTH-q5", "DZVP-MOLOPT-SR-GTH-q5", "SZV-MOLOPT-SR-GTH-q6", "DZVP-MOLOPT-SR-GTH-q6", "SZV-MOLOPT-SR-GTH-q7", "DZVP-MOLOPT-SR-GTH-q7", "SZV-MOLOPT-SR-GTH-q8", "DZVP-MOLOPT-SR-GTH-q8", "SZV-MOLOPT-SR-GTH-q9", "DZVP-MOLOPT-SR-GTH-q9", "SZV-MOLOPT-SR-GTH-q10", "DZVP-MOLOPT-SR-GTH-q10", "SZV-MOLOPT-SR-GTH-q11", "DZVP-MOLOPT-SR-GTH-q11", "SZV-MOLOPT-SR-GTH-q12", "DZVP-MOLOPT-SR-GTH-q12", "SZV-MOLOPT-SR-GTH-q13", "DZVP-MOLOPT-SR-GTH-q13", "SZV-MOLOPT-SR-GTH-q14", "DZVP-MOLOPT-SR-GTH-q14", "SZV-MOLOPT-SR-GTH-q15", "DZVP-MOLOPT-SR-GTH-q15", "SZV-MOLOPT-SR-GTH-q16", "DZVP-MOLOPT-SR-GTH-q16", "SZV-MOLOPT-SR-GTH-q17", "DZVP-MOLOPT-SR-GTH-q17", "SZV-MOLOPT-SR-GTH-q9", "SZVP-MOLOPT-SR-GTH-q9", "DZVP-MOLOPT-SR-GTH-q9", "SZV-MOLOPT-SR-GTH-q18", "DZVP-MOLOPT-SR-GTH-q18", "SZV-MOLOPT-SR-GTH-q11", "DZVP-MOLOPT-SR-GTH-q11", "SZV-MOLOPT-SR-GTH-q12", "DZVP-MOLOPT-SR-GTH-q12", "SZV-MOLOPT-SR-GTH-q13", "DZVP-MOLOPT-SR-GTH-q13", "SZV-MOLOPT-SR-GTH-q4", "DZVP-MOLOPT-SR-GTH-q4", "SZV-MOLOPT-SR-GTH-q5", "DZVP-MOLOPT-SR-GTH-q5", "SZV-MOLOPT-SR-GTH-q6", "DZVP-MOLOPT-SR-GTH-q6", "SZV-MOLOPT-SR-GTH-q7", "DZVP-MOLOPT-SR-GTH-q7", "SZV-MOLOPT-SR-GTH-q8", "DZVP-MOLOPT-SR-GTH-q8", "SZV-MOLOPT-SR-GTH-q9", "DZVP-MOLOPT-SR-GTH-q9", "SZV-MOLOPT-SR-GTH-q10", "DZVP-MOLOPT-SR-GTH-q10", "SZV-MOLOPT-SR-GTH-q12", "DZVP-MOLOPT-SR-GTH-q12", "SZV-MOLOPT-SR-GTH-q13", "DZVP-MOLOPT-SR-GTH-q13", "SZV-MOLOPT-SR-GTH-q14", "DZVP-MOLOPT-SR-GTH-q14", "SZV-MOLOPT-SR-GTH-q15", "DZVP-MOLOPT-SR-GTH-q15", "SZV-MOLOPT-SR-GTH-q16", "DZVP-MOLOPT-SR-GTH-q16", "SZV-MOLOPT-SR-GTH-q17", "DZVP-MOLOPT-SR-GTH-q17", "SZV-MOLOPT-SR-GTH-q18", "DZVP-MOLOPT-SR-GTH-q18", "SZV-MOLOPT-SR-GTH-q11", "DZVP-MOLOPT-SR-GTH-q11", "SZV-MOLOPT-SR-GTH-q12", "DZVP-MOLOPT-SR-GTH-q12", "SZV-MOLOPT-SR-GTH-q13", "DZVP-MOLOPT-SR-GTH-q13", "SZV-MOLOPT-SR-GTH-q4", "DZVP-MOLOPT-SR-GTH-q4", "SZV-MOLOPT-SR-GTH-q5", "DZVP-MOLOPT-SR-GTH-q5", "SZV-MOLOPT-SR-GTH-q6", "DZVP-MOLOPT-SR-GTH-q6", "SZV-MOLOPT-SR-GTH-q7", "DZVP-MOLOPT-SR-GTH-q7", "SZV-MOLOPT-SR-GTH-q8", "DZVP-MOLOPT-SR-GTH-q8", "DZVP-MOLOPT-GTH-q14"}; char * cp2k_molopt[191]={"\n" " H SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q1\n" " 1\n" " 2 0 0 7 1\n" " 11.478000339908 0.024916243200\n" " 3.700758562763 0.079825490000\n" " 1.446884268432 0.128862675300\n" " 0.716814589696 0.379448894600\n" " 0.247918564176 0.324552432600\n" " 0.066918004004 0.037148121400\n" " 0.021708243634 -0.001125195500\n" "#","\n" " H DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q1\n" " 1\n" " 2 0 1 7 2 1\n" " 11.478000339908 0.024916243200 -0.012512421400 0.024510918200\n" " 3.700758562763 0.079825490000 -0.056449071100 0.058140794100\n" " 1.446884268432 0.128862675300 0.011242684700 0.444709498500\n" " 0.716814589696 0.379448894600 -0.418587548300 0.646207973100\n" " 0.247918564176 0.324552432600 0.590363216700 0.803385018200\n" " 0.066918004004 0.037148121400 0.438703133000 0.892971208700\n" " 0.021708243634 -0.001125195500 -0.059693171300 0.120101316500\n" "#","\n" " H TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q1\n" " 1\n" " 2 0 1 7 3 1\n" " 11.478000339908 0.024916243200 -0.012512421400 -0.013929731000 0.024510918200\n" " 3.700758562763 0.079825490000 -0.056449071100 0.003035027400 0.058140794100\n" " 1.446884268432 0.128862675300 0.011242684700 -0.295875900100 0.444709498500\n" " 0.716814589696 0.379448894600 -0.418587548300 0.688608603400 0.646207973100\n" " 0.247918564176 0.324552432600 0.590363216700 -0.228296404800 0.803385018200\n" " 0.066918004004 0.037148121400 0.438703133000 -0.099863944100 0.892971208700\n" " 0.021708243634 -0.001125195500 -0.059693171300 0.035435150600 0.120101316500\n" "#","\n" " H TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q1\n" " 1\n" " 2 0 1 7 3 2\n" " 11.478000339908 0.024916243200 -0.012512421400 -0.013929731000 0.024510918200 -0.016497254600\n" " 3.700758562763 0.079825490000 -0.056449071100 0.003035027400 0.058140794100 -0.023524900100\n" " 1.446884268432 0.128862675300 0.011242684700 -0.295875900100 0.444709498500 -0.484890807700\n" " 0.716814589696 0.379448894600 -0.418587548300 0.688608603400 0.646207973100 0.581651597400\n" " 0.247918564176 0.324552432600 0.590363216700 -0.228296404800 0.803385018200 -0.302708265200\n" " 0.066918004004 0.037148121400 0.438703133000 -0.099863944100 0.892971208700 0.037586403600\n" " 0.021708243634 -0.001125195500 -0.059693171300 0.035435150600 0.120101316500 0.177876988600\n" "#","\n" " H TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q1\n" " 1\n" " 2 0 2 7 3 2 1\n" " 11.478000339908 0.024916243200 -0.012512421400 -0.013929731000 0.024510918200 -0.016497254600 0.013783151600\n" " 3.700758562763 0.079825490000 -0.056449071100 0.003035027400 0.058140794100 -0.023524900100 0.095244888900\n" " 1.446884268432 0.128862675300 0.011242684700 -0.295875900100 0.444709498500 -0.484890807700 1.000410191300\n" " 0.716814589696 0.379448894600 -0.418587548300 0.688608603400 0.646207973100 0.581651597400 0.169848598800\n" " 0.247918564176 0.324552432600 0.590363216700 -0.228296404800 0.803385018200 -0.302708265200 0.073559299500\n" " 0.066918004004 0.037148121400 0.438703133000 -0.099863944100 0.892971208700 0.037586403600 0.782848013900\n" " 0.021708243634 -0.001125195500 -0.059693171300 0.035435150600 0.120101316500 0.177876988600 -0.348307160100\n" "#","\n" " C SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q4\n" " 1\n" " 2 0 1 7 1 1\n" " 6.132624767898 -0.105576563700 0.035098108400\n" " 2.625196064782 -0.174866621100 0.114197930900\n" " 1.045456957247 0.064464981400 0.215908137300\n" " 0.478316330874 0.830447035300 0.355929151000\n" " 0.178617414302 0.371911373800 0.271541842000\n" " 0.075144725465 0.006174464000 0.056256557700\n" " 0.030286753006 0.008966477300 0.004998059700\n" "#","\n" " C DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q4\n" " 1\n" " 2 0 2 7 2 2 1\n" " 6.132624767898 -0.105576563700 0.024850587600 0.035098108400 -0.056712999000 0.037469425800\n" " 2.625196064782 -0.174866621100 0.147440856000 0.114197930900 -0.076743951500 0.071047574800\n" " 1.045456957247 0.064464981400 -0.421418379200 0.215908137300 -0.528056757000 0.619330561200\n" " 0.478316330874 0.830447035300 0.823051336800 0.355929151000 0.394594045700 0.710730857000\n" " 0.178617414302 0.371911373800 0.184880712100 0.271541842000 0.721247475800 0.389148235000\n" " 0.075144725465 0.006174464000 -0.742086051600 0.056256557700 0.733902531700 0.346374124100\n" " 0.030286753006 0.008966477300 0.083382192000 0.004998059700 0.248172175500 -0.005142430900\n" "#","\n" " C TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q4\n" " 1\n" " 2 0 2 7 3 3 1\n" " 6.132624767898 -0.105576563700 0.024850587600 -0.047388414100 0.035098108400 -0.056712999000 -0.006742034000 0.037469425800\n" " 2.625196064782 -0.174866621100 0.147440856000 -0.054003851700 0.114197930900 -0.076743951500 -0.031163909400 0.071047574800\n" " 1.045456957247 0.064464981400 -0.421418379200 -0.056737220700 0.215908137300 -0.528056757000 -0.126324702500 0.619330561200\n" " 0.478316330874 0.830447035300 0.823051336800 0.450960854100 0.355929151000 0.394594045700 0.629779932600 0.710730857000\n" " 0.178617414302 0.371911373800 0.184880712100 -0.611198185900 0.271541842000 0.721247475800 -0.487599713200 0.389148235000\n" " 0.075144725465 0.006174464000 -0.742086051600 0.365424292900 0.056256557700 0.733902531700 0.218697596000 0.346374124100\n" " 0.030286753006 0.008966477300 0.083382192000 -0.079339373900 0.004998059700 0.248172175500 -0.137064380000 -0.005142430900\n" "#","\n" " C TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q4\n" " 1\n" " 2 0 2 7 3 3 2\n" " 6.132624767898 -0.105576563700 0.024850587600 -0.047388414100 0.035098108400 -0.056712999000 -0.006742034000 0.037469425800 0.029169209100\n" " 2.625196064782 -0.174866621100 0.147440856000 -0.054003851700 0.114197930900 -0.076743951500 -0.031163909400 0.071047574800 0.026982879200\n" " 1.045456957247 0.064464981400 -0.421418379200 -0.056737220700 0.215908137300 -0.528056757000 -0.126324702500 0.619330561200 0.547209491100\n" " 0.478316330874 0.830447035300 0.823051336800 0.450960854100 0.355929151000 0.394594045700 0.629779932600 0.710730857000 -0.776406436300\n" " 0.178617414302 0.371911373800 0.184880712100 -0.611198185900 0.271541842000 0.721247475800 -0.487599713200 0.389148235000 0.657213953300\n" " 0.075144725465 0.006174464000 -0.742086051600 0.365424292900 0.056256557700 0.733902531700 0.218697596000 0.346374124100 -0.480025949600\n" " 0.030286753006 0.008966477300 0.083382192000 -0.079339373900 0.004998059700 0.248172175500 -0.137064380000 -0.005142430900 0.036022564900\n" "#","\n" " C TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q4\n" " 1\n" " 2 0 3 7 3 3 2 1\n" " 6.132624767898 -0.105576563700 0.024850587600 -0.047388414100 0.035098108400 -0.056712999000 -0.006742034000 0.037469425800 0.029169209100 0.022304679500\n" " 2.625196064782 -0.174866621100 0.147440856000 -0.054003851700 0.114197930900 -0.076743951500 -0.031163909400 0.071047574800 0.026982879200 0.026025873000\n" " 1.045456957247 0.064464981400 -0.421418379200 -0.056737220700 0.215908137300 -0.528056757000 -0.126324702500 0.619330561200 0.547209491100 0.716854675300\n" " 0.478316330874 0.830447035300 0.823051336800 0.450960854100 0.355929151000 0.394594045700 0.629779932600 0.710730857000 -0.776406436300 -0.024992326800\n" " 0.178617414302 0.371911373800 0.184880712100 -0.611198185900 0.271541842000 0.721247475800 -0.487599713200 0.389148235000 0.657213953300 0.633014106300\n" " 0.075144725465 0.006174464000 -0.742086051600 0.365424292900 0.056256557700 0.733902531700 0.218697596000 0.346374124100 -0.480025949600 -0.092802773900\n" " 0.030286753006 0.008966477300 0.083382192000 -0.079339373900 0.004998059700 0.248172175500 -0.137064380000 -0.005142430900 0.036022564900 -0.094955683900\n" "#","\n" " N SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q5\n" " 1\n" " 2 0 1 7 1 1\n" " 9.042730397298 -0.057711157700 0.031469526900\n" " 3.882224940673 -0.121876730300 0.109126355100\n" " 1.512880320070 0.094844857800 0.238123330300\n" " 0.586630738140 0.558583487700 0.376105481500\n" " 0.222851091943 0.346456981000 0.249727365300\n" " 0.084582888713 0.031196738600 0.054673928900\n" " 0.039193834928 0.010393976200 -0.000181794900\n" "#","\n" " N DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q5\n" " 1\n" " 2 0 2 7 2 2 1\n" " 9.042730397298 -0.057711157700 0.055618665600 0.031469526900 -0.012643172000 0.017852718900\n" " 3.882224940673 -0.121876730300 0.101741751800 0.109126355100 -0.031177059000 0.037932409700\n" " 1.512880320070 0.094844857800 -0.036013432800 0.238123330300 -0.094228032000 0.324051472500\n" " 0.586630738140 0.558583487700 -0.547764884700 0.376105481500 -0.192405367500 0.888374055100\n" " 0.222851091943 0.346456981000 0.606791574500 0.249727365300 0.701455729100 0.188935754200\n" " 0.084582888713 0.031196738600 0.493556790200 0.054673928900 0.593951368600 -0.049452863800\n" " 0.039193834928 0.010393976200 0.053452379800 -0.000181794900 0.039720774300 -0.019150455700\n" "#","\n" " N TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q5\n" " 1\n" " 2 0 2 7 3 3 1\n" " 9.042730397298 -0.057711157700 0.055618665600 0.032762883500 0.031469526900 -0.012643172000 -0.028389787500 0.017852718900\n" " 3.882224940673 -0.121876730300 0.101741751800 0.137929475200 0.109126355100 -0.031177059000 0.039238304500 0.037932409700\n" " 1.512880320070 0.094844857800 -0.036013432800 -0.215975165900 0.238123330300 -0.094228032000 -0.305920303000 0.324051472500\n" " 0.586630738140 0.558583487700 -0.547764884700 0.366111863100 0.376105481500 -0.192405367500 0.543553700700 0.888374055100\n" " 0.222851091943 0.346456981000 0.606791574500 0.307294682700 0.249727365300 0.701455729100 0.145372660300 0.188935754200\n" " 0.084582888713 0.031196738600 0.493556790200 -0.707766106200 0.054673928900 0.593951368600 -0.742817489000 -0.049452863800\n" " 0.039193834928 0.010393976200 0.053452379800 0.185238519800 -0.000181794900 0.039720774300 0.455455763000 -0.019150455700\n" "#","\n" " N TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q5\n" " 1\n" " 2 0 2 7 3 3 2\n" " 9.042730397298 -0.057711157700 0.055618665600 0.032762883500 0.031469526900 -0.012643172000 -0.028389787500 0.017852718900 -0.026814870200\n" " 3.882224940673 -0.121876730300 0.101741751800 0.137929475200 0.109126355100 -0.031177059000 0.039238304500 0.037932409700 0.018900829300\n" " 1.512880320070 0.094844857800 -0.036013432800 -0.215975165900 0.238123330300 -0.094228032000 -0.305920303000 0.324051472500 -0.406110228200\n" " 0.586630738140 0.558583487700 -0.547764884700 0.366111863100 0.376105481500 -0.192405367500 0.543553700700 0.888374055100 0.202616067000\n" " 0.222851091943 0.346456981000 0.606791574500 0.307294682700 0.249727365300 0.701455729100 0.145372660300 0.188935754200 0.641914827500\n" " 0.084582888713 0.031196738600 0.493556790200 -0.707766106200 0.054673928900 0.593951368600 -0.742817489000 -0.049452863800 -0.754236178400\n" " 0.039193834928 0.010393976200 0.053452379800 0.185238519800 -0.000181794900 0.039720774300 0.455455763000 -0.019150455700 0.192322748800\n" "#","\n" " N TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q5\n" " 1\n" " 2 0 3 7 3 3 2 1\n" " 9.042730397298 -0.057711157700 0.055618665600 0.032762883500 0.031469526900 -0.012643172000 -0.028389787500 0.017852718900 -0.026814870200 0.020975689500\n" " 3.882224940673 -0.121876730300 0.101741751800 0.137929475200 0.109126355100 -0.031177059000 0.039238304500 0.037932409700 0.018900829300 -0.027501696100\n" " 1.512880320070 0.094844857800 -0.036013432800 -0.215975165900 0.238123330300 -0.094228032000 -0.305920303000 0.324051472500 -0.406110228200 0.569952079600\n" " 0.586630738140 0.558583487700 -0.547764884700 0.366111863100 0.376105481500 -0.192405367500 0.543553700700 0.888374055100 0.202616067000 0.862205093600\n" " 0.222851091943 0.346456981000 0.606791574500 0.307294682700 0.249727365300 0.701455729100 0.145372660300 0.188935754200 0.641914827500 -0.067750230800\n" " 0.084582888713 0.031196738600 0.493556790200 -0.707766106200 0.054673928900 0.593951368600 -0.742817489000 -0.049452863800 -0.754236178400 -0.185330469600\n" " 0.039193834928 0.010393976200 0.053452379800 0.185238519800 -0.000181794900 0.039720774300 0.455455763000 -0.019150455700 0.192322748800 0.013120721900\n" "#","\n" " O SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q6\n" " 1\n" " 2 0 1 7 1 1\n" " 12.015954705512 -0.060190841200 0.036543638800\n" " 5.108150287385 -0.129597923300 0.120927648700\n" " 2.048398039874 0.118175889400 0.251093670300\n" " 0.832381575582 0.462964485000 0.352639910300\n" " 0.352316246455 0.450353782600 0.294708645200\n" " 0.142977330880 0.092715833600 0.173039869300\n" " 0.046760918300 -0.000255945800 0.009726110600\n" "#","\n" " O DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q6\n" " 1\n" " 2 0 2 7 2 2 1\n" " 12.015954705512 -0.060190841200 0.065738617900 0.036543638800 -0.034210557400 0.014807054400\n" " 5.108150287385 -0.129597923300 0.110885902200 0.120927648700 -0.120619770900 0.068186159300\n" " 2.048398039874 0.118175889400 -0.053732406400 0.251093670300 -0.213719464600 0.290576499200\n" " 0.832381575582 0.462964485000 -0.572670666200 0.352639910300 -0.473674858400 1.063344189500\n" " 0.352316246455 0.450353782600 0.186760006700 0.294708645200 0.484848376400 0.307656114200\n" " 0.142977330880 0.092715833600 0.387201458600 0.173039869300 0.717465919700 0.318346834400\n" " 0.046760918300 -0.000255945800 0.003825849600 0.009726110600 0.032498979400 -0.005771736600\n" "#","\n" " O TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q6\n" " 1\n" " 2 0 2 7 3 3 1\n" " 12.015954705512 -0.060190841200 0.065738617900 0.041006765400 0.036543638800 -0.034210557400 -0.000592640200 0.014807054400\n" " 5.108150287385 -0.129597923300 0.110885902200 0.080644802300 0.120927648700 -0.120619770900 0.009852349400 0.068186159300\n" " 2.048398039874 0.118175889400 -0.053732406400 -0.067639801700 0.251093670300 -0.213719464600 0.001286509800 0.290576499200\n" " 0.832381575582 0.462964485000 -0.572670666200 -0.435078312800 0.352639910300 -0.473674858400 -0.021872639500 1.063344189500\n" " 0.352316246455 0.450353782600 0.186760006700 0.722792798300 0.294708645200 0.484848376400 0.530504764700 0.307656114200\n" " 0.142977330880 0.092715833600 0.387201458600 -0.521378340700 0.173039869300 0.717465919700 -0.436184043700 0.318346834400\n" " 0.046760918300 -0.000255945800 0.003825849600 0.175643142900 0.009726110600 0.032498979400 0.073329259500 -0.005771736600\n" "#","\n" " O TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q6\n" " 1\n" " 2 0 2 7 3 3 2\n" " 12.015954705512 -0.060190841200 0.065738617900 0.041006765400 0.036543638800 -0.034210557400 -0.000592640200 0.014807054400 -0.013843410500\n" " 5.108150287385 -0.129597923300 0.110885902200 0.080644802300 0.120927648700 -0.120619770900 0.009852349400 0.068186159300 0.016850210400\n" " 2.048398039874 0.118175889400 -0.053732406400 -0.067639801700 0.251093670300 -0.213719464600 0.001286509800 0.290576499200 -0.186696332600\n" " 0.832381575582 0.462964485000 -0.572670666200 -0.435078312800 0.352639910300 -0.473674858400 -0.021872639500 1.063344189500 0.068001578700\n" " 0.352316246455 0.450353782600 0.186760006700 0.722792798300 0.294708645200 0.484848376400 0.530504764700 0.307656114200 0.911407510000\n" " 0.142977330880 0.092715833600 0.387201458600 -0.521378340700 0.173039869300 0.717465919700 -0.436184043700 0.318346834400 -0.333128530600\n" " 0.046760918300 -0.000255945800 0.003825849600 0.175643142900 0.009726110600 0.032498979400 0.073329259500 -0.005771736600 -0.405788515900\n" "#","\n" " O TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q6\n" " 1\n" " 2 0 3 7 3 3 2 1\n" " 12.015954705512 -0.060190841200 0.065738617900 0.041006765400 0.036543638800 -0.034210557400 -0.000592640200 0.014807054400 -0.013843410500 0.002657486200\n" " 5.108150287385 -0.129597923300 0.110885902200 0.080644802300 0.120927648700 -0.120619770900 0.009852349400 0.068186159300 0.016850210400 -0.007708463700\n" " 2.048398039874 0.118175889400 -0.053732406400 -0.067639801700 0.251093670300 -0.213719464600 0.001286509800 0.290576499200 -0.186696332600 0.378459897700\n" " 0.832381575582 0.462964485000 -0.572670666200 -0.435078312800 0.352639910300 -0.473674858400 -0.021872639500 1.063344189500 0.068001578700 0.819571172100\n" " 0.352316246455 0.450353782600 0.186760006700 0.722792798300 0.294708645200 0.484848376400 0.530504764700 0.307656114200 0.911407510000 -0.075845376400\n" " 0.142977330880 0.092715833600 0.387201458600 -0.521378340700 0.173039869300 0.717465919700 -0.436184043700 0.318346834400 -0.333128530600 0.386329438600\n" " 0.046760918300 -0.000255945800 0.003825849600 0.175643142900 0.009726110600 0.032498979400 0.073329259500 -0.005771736600 -0.405788515900 0.035062554400\n" "#","\n" " F SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q7\n" " 1\n" " 2 0 1 7 1 1\n" " 15.025672765127 -0.076135699000 0.043030876500\n" " 6.156800581515 -0.145492650600 0.138591822100\n" " 2.411456205564 0.195144281500 0.283251574300\n" " 0.963986369687 0.553654166300 0.357678749700\n" " 0.396229721431 0.454888028100 0.300622862100\n" " 0.157658905678 0.078338198300 0.138839114100\n" " 0.048130255107 0.002175323600 0.008740274300\n" "#","\n" " F DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q7\n" " 1\n" " 2 0 2 7 2 2 1\n" " 15.025672765127 -0.076135699000 0.060516471000 0.043030876500 -0.027382614400 0.006095862800\n" " 6.156800581515 -0.145492650600 0.078091919900 0.138591822100 -0.119463647500 0.057880784500\n" " 2.411456205564 0.195144281500 -0.051537351700 0.283251574300 -0.152089668600 0.143657436500\n" " 0.963986369687 0.553654166300 -0.448874166200 0.357678749700 -0.460859710900 0.782158193600\n" " 0.396229721431 0.454888028100 0.143111336600 0.300622862100 0.260540362300 0.349204565600\n" " 0.157658905678 0.078338198300 0.433345205900 0.138839114100 0.410677921300 0.106634189000\n" " 0.048130255107 0.002175323600 -0.111759214900 0.008740274300 0.051656760200 -0.008599668300\n" "#","\n" " F TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q7\n" " 1\n" " 2 0 2 7 3 3 1\n" " 15.025672765127 -0.076135699000 0.060516471000 0.236249589200 0.043030876500 -0.027382614400 -0.013131365300 0.006095862800\n" " 6.156800581515 -0.145492650600 0.078091919900 0.256975207700 0.138591822100 -0.119463647500 -0.061020955700 0.057880784500\n" " 2.411456205564 0.195144281500 -0.051537351700 -0.299606314200 0.283251574300 -0.152089668600 -0.074530076600 0.143657436500\n" " 0.963986369687 0.553654166300 -0.448874166200 0.244175306400 0.357678749700 -0.460859710900 -0.333331696200 0.782158193600\n" " 0.396229721431 0.454888028100 0.143111336600 0.070307660500 0.300622862100 0.260540362300 0.815277681200 0.349204565600\n" " 0.157658905678 0.078338198300 0.433345205900 -0.391141875700 0.138839114100 0.410677921300 -0.637458747900 0.106634189000\n" " 0.048130255107 0.002175323600 -0.111759214900 0.275973644000 0.008740274300 0.051656760200 0.225784972300 -0.008599668300\n" "#","\n" " F TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q7\n" " 1\n" " 2 0 2 7 3 3 2\n" " 15.025672765127 -0.076135699000 0.060516471000 0.236249589200 0.043030876500 -0.027382614400 -0.013131365300 0.006095862800 -0.001964191900\n" " 6.156800581515 -0.145492650600 0.078091919900 0.256975207700 0.138591822100 -0.119463647500 -0.061020955700 0.057880784500 -0.017608747700\n" " 2.411456205564 0.195144281500 -0.051537351700 -0.299606314200 0.283251574300 -0.152089668600 -0.074530076600 0.143657436500 -0.092704702300\n" " 0.963986369687 0.553654166300 -0.448874166200 0.244175306400 0.357678749700 -0.460859710900 -0.333331696200 0.782158193600 -0.415809616200\n" " 0.396229721431 0.454888028100 0.143111336600 0.070307660500 0.300622862100 0.260540362300 0.815277681200 0.349204565600 0.628910907400\n" " 0.157658905678 0.078338198300 0.433345205900 -0.391141875700 0.138839114100 0.410677921300 -0.637458747900 0.106634189000 -0.412356840700\n" " 0.048130255107 0.002175323600 -0.111759214900 0.275973644000 0.008740274300 0.051656760200 0.225784972300 -0.008599668300 0.389252314700\n" "#","\n" " F TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q7\n" " 1\n" " 2 0 3 7 3 3 2 1\n" " 15.025672765127 -0.076135699000 0.060516471000 0.236249589200 0.043030876500 -0.027382614400 -0.013131365300 0.006095862800 -0.001964191900 -0.008318565400\n" " 6.156800581515 -0.145492650600 0.078091919900 0.256975207700 0.138591822100 -0.119463647500 -0.061020955700 0.057880784500 -0.017608747700 0.039096268100\n" " 2.411456205564 0.195144281500 -0.051537351700 -0.299606314200 0.283251574300 -0.152089668600 -0.074530076600 0.143657436500 -0.092704702300 0.354742552600\n" " 0.963986369687 0.553654166300 -0.448874166200 0.244175306400 0.357678749700 -0.460859710900 -0.333331696200 0.782158193600 -0.415809616200 1.307321527200\n" " 0.396229721431 0.454888028100 0.143111336600 0.070307660500 0.300622862100 0.260540362300 0.815277681200 0.349204565600 0.628910907400 -0.018428865800\n" " 0.157658905678 0.078338198300 0.433345205900 -0.391141875700 0.138839114100 0.410677921300 -0.637458747900 0.106634189000 -0.412356840700 0.046645417600\n" " 0.048130255107 0.002175323600 -0.111759214900 0.275973644000 0.008740274300 0.051656760200 0.225784972300 -0.008599668300 0.389252314700 0.001877717700\n" "#","\n" " Si SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q4\n" " 1\n" " 2 0 1 6 1 1\n" " 2.693604434572 0.015333179500 -0.005800105400\n" " 1.359613855428 -0.283798205000 -0.059172026000\n" " 0.513245176029 -0.228939692700 0.121487149900\n" " 0.326563011394 0.728834000900 0.423382421100\n" " 0.139986977410 0.446205299300 0.474592116300\n" " 0.068212286977 0.122025292800 0.250129397700\n" "#","\n" " Si DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q4\n" " 1\n" " 2 0 2 6 2 2 1\n" " 2.693604434572 0.015333179500 -0.073325401200 -0.005800105400 0.023996406700 0.043919650100\n" " 1.359613855428 -0.283798205000 0.484815594600 -0.059172026000 0.055459199900 0.134639409600\n" " 0.513245176029 -0.228939692700 -0.276015880000 0.121487149900 -0.269559268100 0.517732111300\n" " 0.326563011394 0.728834000900 -0.228394679700 0.423382421100 -0.259506329000 0.282311245100\n" " 0.139986977410 0.446205299300 -0.018311553000 0.474592116300 0.310318217600 0.281350794600\n" " 0.068212286977 0.122025292800 0.365245476200 0.250129397700 0.647414251100 0.139066843800\n" "#","\n" " Si TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q4\n" " 1\n" " 2 0 2 6 3 3 1\n" " 2.693604434572 0.015333179500 -0.073325401200 -0.010190491000 -0.005800105400 0.023996406700 0.014220556800 0.043919650100\n" " 1.359613855428 -0.283798205000 0.484815594600 0.009707564700 -0.059172026000 0.055459199900 -0.158407152000 0.134639409600\n" " 0.513245176029 -0.228939692700 -0.276015880000 -0.707360006800 0.121487149900 -0.269559268100 0.854126223400 0.517732111300\n" " 0.326563011394 0.728834000900 -0.228394679700 0.968240963100 0.423382421100 -0.259506329000 -0.964190479700 0.282311245100\n" " 0.139986977410 0.446205299300 -0.018311553000 -0.449692717700 0.474592116300 0.310318217600 0.336885865500 0.281350794600\n" " 0.068212286977 0.122025292800 0.365245476200 0.147937633300 0.250129397700 0.647414251100 -0.063010752700 0.139066843800\n" "#","\n" " Si TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q4\n" " 1\n" " 2 0 2 6 3 3 2\n" " 2.693604434572 0.015333179500 -0.073325401200 -0.010190491000 -0.005800105400 0.023996406700 0.014220556800 0.043919650100 -0.021796206700\n" " 1.359613855428 -0.283798205000 0.484815594600 0.009707564700 -0.059172026000 0.055459199900 -0.158407152000 0.134639409600 -0.065666574500\n" " 0.513245176029 -0.228939692700 -0.276015880000 -0.707360006800 0.121487149900 -0.269559268100 0.854126223400 0.517732111300 -0.587881439600\n" " 0.326563011394 0.728834000900 -0.228394679700 0.968240963100 0.423382421100 -0.259506329000 -0.964190479700 0.282311245100 0.799278215300\n" " 0.139986977410 0.446205299300 -0.018311553000 -0.449692717700 0.474592116300 0.310318217600 0.336885865500 0.281350794600 -0.377563218200\n" " 0.068212286977 0.122025292800 0.365245476200 0.147937633300 0.250129397700 0.647414251100 -0.063010752700 0.139066843800 0.406207118300\n" "#","\n" " Si TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q4\n" " 1\n" " 2 0 3 6 3 3 2 1\n" " 2.693604434572 0.015333179500 -0.073325401200 -0.010190491000 -0.005800105400 0.023996406700 0.014220556800 0.043919650100 -0.021796206700 -0.021648469800\n" " 1.359613855428 -0.283798205000 0.484815594600 0.009707564700 -0.059172026000 0.055459199900 -0.158407152000 0.134639409600 -0.065666574500 0.421421477600\n" " 0.513245176029 -0.228939692700 -0.276015880000 -0.707360006800 0.121487149900 -0.269559268100 0.854126223400 0.517732111300 -0.587881439600 0.744190736800\n" " 0.326563011394 0.728834000900 -0.228394679700 0.968240963100 0.423382421100 -0.259506329000 -0.964190479700 0.282311245100 0.799278215300 0.434937300000\n" " 0.139986977410 0.446205299300 -0.018311553000 -0.449692717700 0.474592116300 0.310318217600 0.336885865500 0.281350794600 -0.377563218200 -0.722129731000\n" " 0.068212286977 0.122025292800 0.365245476200 0.147937633300 0.250129397700 0.647414251100 -0.063010752700 0.139066843800 0.406207118300 0.655673293700\n" "#","\n" " P SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q5\n" " 1\n" " 2 0 1 6 1 1\n" " 3.338153406523 0.039454247900 -0.012783546700\n" " 1.833919672496 -0.306814659300 -0.038865450000\n" " 0.688531765653 -0.113978610700 0.127534067400\n" " 0.372376701254 0.668025394000 0.401195491100\n" " 0.166131443191 0.491467475700 0.369849381300\n" " 0.075778343330 0.087478573600 0.184268604800\n" "#","\n" " P DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q5\n" " 1\n" " 2 0 2 6 2 2 1\n" " 3.338153406523 0.039454247900 -0.055902122900 -0.012783546700 0.005165760600 0.023530272900\n" " 1.833919672496 -0.306814659300 0.305933443100 -0.038865450000 0.103133751300 0.140233454000\n" " 0.688531765653 -0.113978610700 0.118785269000 0.127534067400 -0.305520428500 0.507069588900\n" " 0.372376701254 0.668025394000 -0.716389791200 0.401195491100 -0.245673644600 0.492728339400\n" " 0.166131443191 0.491467475700 0.271518859600 0.369849381300 0.153640758600 0.310650223400\n" " 0.075778343330 0.087478573600 0.523136739400 0.184268604800 0.721924297300 0.030421200100\n" "#","\n" " P TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q5\n" " 1\n" " 2 0 2 6 3 3 1\n" " 3.338153406523 0.039454247900 -0.055902122900 -0.036333320500 -0.012783546700 0.005165760600 -0.021032703500 0.023530272900\n" " 1.833919672496 -0.306814659300 0.305933443100 0.126954601200 -0.038865450000 0.103133751300 0.038242927200 0.140233454000\n" " 0.688531765653 -0.113978610700 0.118785269000 0.100890359400 0.127534067400 -0.305520428500 -0.256363421800 0.507069588900\n" " 0.372376701254 0.668025394000 -0.716389791200 0.407065582600 0.401195491100 -0.245673644600 0.548550924800 0.492728339400\n" " 0.166131443191 0.491467475700 0.271518859600 -0.989778437000 0.369849381300 0.153640758600 0.178359136800 0.310650223400\n" " 0.075778343330 0.087478573600 0.523136739400 0.538151443400 0.184268604800 0.721924297300 -0.226343952000 0.030421200100\n" "#","\n" " P TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q5\n" " 1\n" " 2 0 2 6 3 3 2\n" " 3.338153406523 0.039454247900 -0.055902122900 -0.036333320500 -0.012783546700 0.005165760600 -0.021032703500 0.023530272900 -0.026902801200\n" " 1.833919672496 -0.306814659300 0.305933443100 0.126954601200 -0.038865450000 0.103133751300 0.038242927200 0.140233454000 -0.024419850900\n" " 0.688531765653 -0.113978610700 0.118785269000 0.100890359400 0.127534067400 -0.305520428500 -0.256363421800 0.507069588900 -0.592608257200\n" " 0.372376701254 0.668025394000 -0.716389791200 0.407065582600 0.401195491100 -0.245673644600 0.548550924800 0.492728339400 0.982063898700\n" " 0.166131443191 0.491467475700 0.271518859600 -0.989778437000 0.369849381300 0.153640758600 0.178359136800 0.310650223400 0.131647772600\n" " 0.075778343330 0.087478573600 0.523136739400 0.538151443400 0.184268604800 0.721924297300 -0.226343952000 0.030421200100 0.264354685800\n" "#","\n" " P TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q5\n" " 1\n" " 2 0 3 6 3 3 2 1\n" " 3.338153406523 0.039454247900 -0.055902122900 -0.036333320500 -0.012783546700 0.005165760600 -0.021032703500 0.023530272900 -0.026902801200 0.005311181800\n" " 1.833919672496 -0.306814659300 0.305933443100 0.126954601200 -0.038865450000 0.103133751300 0.038242927200 0.140233454000 -0.024419850900 0.138144780500\n" " 0.688531765653 -0.113978610700 0.118785269000 0.100890359400 0.127534067400 -0.305520428500 -0.256363421800 0.507069588900 -0.592608257200 0.874057452500\n" " 0.372376701254 0.668025394000 -0.716389791200 0.407065582600 0.401195491100 -0.245673644600 0.548550924800 0.492728339400 0.982063898700 0.436475627300\n" " 0.166131443191 0.491467475700 0.271518859600 -0.989778437000 0.369849381300 0.153640758600 0.178359136800 0.310650223400 0.131647772600 -0.092923616900\n" " 0.075778343330 0.087478573600 0.523136739400 0.538151443400 0.184268604800 0.721924297300 -0.226343952000 0.030421200100 0.264354685800 0.017694303700\n" "#","\n" " S SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q6\n" " 1\n" " 2 0 1 6 1 1\n" " 3.817590656735 0.075558928000 -0.019219238100\n" " 2.362751931093 -0.351216488200 -0.035664835200\n" " 0.861004180298 -0.099160602500 0.160834397000\n" " 0.417524512433 0.862753116400 0.507608206800\n" " 0.181513540673 0.307053614900 0.249563613200\n" " 0.070570776865 0.001592872500 0.025974500500\n" "#","\n" " S DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q6\n" " 1\n" " 2 0 2 6 2 2 1\n" " 3.817590656735 0.075558928000 -0.045713227100 -0.019219238100 0.001714015800 0.007498037400\n" " 2.362751931093 -0.351216488200 0.179094296600 -0.035664835200 0.064608303200 0.104757185100\n" " 0.861004180298 -0.099160602500 0.206133423700 0.160834397000 -0.170453754100 0.344818199900\n" " 0.417524512433 0.862753116400 -0.737640763800 0.507608206800 -0.536548069500 0.472319101700\n" " 0.181513540673 0.307053614900 0.419230078700 0.249563613200 0.786543640200 0.204745694800\n" " 0.070570776865 0.001592872500 0.359607313200 0.025974500500 0.740434318200 -0.019952573900\n" "#","\n" " S TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q6\n" " 1\n" " 2 0 2 6 3 3 1\n" " 3.817590656735 0.075558928000 -0.045713227100 -0.334102726000 -0.019219238100 0.001714015800 -0.065081716400 0.007498037400\n" " 2.362751931093 -0.351216488200 0.179094296600 0.901078536300 -0.035664835200 0.064608303200 0.216735258500 0.104757185100\n" " 0.861004180298 -0.099160602500 0.206133423700 0.139445328400 0.160834397000 -0.170453754100 -0.656181270900 0.344818199900\n" " 0.417524512433 0.862753116400 -0.737640763800 -0.236533973000 0.507608206800 -0.536548069500 0.847619826200 0.472319101700\n" " 0.181513540673 0.307053614900 0.419230078700 0.259546805900 0.249563613200 0.786543640200 0.204233835000 0.204745694800\n" " 0.070570776865 0.001592872500 0.359607313200 -0.378802711500 0.025974500500 0.740434318200 -0.341040490700 -0.019952573900\n" "#","\n" " S TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q6\n" " 1\n" " 2 0 2 6 3 3 2\n" " 3.817590656735 0.075558928000 -0.045713227100 -0.334102726000 -0.019219238100 0.001714015800 -0.065081716400 0.007498037400 -0.024661974800\n" " 2.362751931093 -0.351216488200 0.179094296600 0.901078536300 -0.035664835200 0.064608303200 0.216735258500 0.104757185100 0.042689758500\n" " 0.861004180298 -0.099160602500 0.206133423700 0.139445328400 0.160834397000 -0.170453754100 -0.656181270900 0.344818199900 -0.325440208500\n" " 0.417524512433 0.862753116400 -0.737640763800 -0.236533973000 0.507608206800 -0.536548069500 0.847619826200 0.472319101700 0.746641212400\n" " 0.181513540673 0.307053614900 0.419230078700 0.259546805900 0.249563613200 0.786543640200 0.204233835000 0.204745694800 -0.120502819400\n" " 0.070570776865 0.001592872500 0.359607313200 -0.378802711500 0.025974500500 0.740434318200 -0.341040490700 -0.019952573900 -0.158216979000\n" "#","\n" " S TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q6\n" " 1\n" " 2 0 3 6 3 3 2 1\n" " 3.817590656735 0.075558928000 -0.045713227100 -0.334102726000 -0.019219238100 0.001714015800 -0.065081716400 0.007498037400 -0.024661974800 0.013118322300\n" " 2.362751931093 -0.351216488200 0.179094296600 0.901078536300 -0.035664835200 0.064608303200 0.216735258500 0.104757185100 0.042689758500 0.057787584100\n" " 0.861004180298 -0.099160602500 0.206133423700 0.139445328400 0.160834397000 -0.170453754100 -0.656181270900 0.344818199900 -0.325440208500 0.679953632100\n" " 0.417524512433 0.862753116400 -0.737640763800 -0.236533973000 0.507608206800 -0.536548069500 0.847619826200 0.472319101700 0.746641212400 0.768725285200\n" " 0.181513540673 0.307053614900 0.419230078700 0.259546805900 0.249563613200 0.786543640200 0.204233835000 0.204745694800 -0.120502819400 0.173138012700\n" " 0.070570776865 0.001592872500 0.359607313200 -0.378802711500 0.025974500500 0.740434318200 -0.341040490700 -0.019952573900 -0.158216979000 0.060850854200\n" "#","\n" " Cl SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q7\n" " 1\n" " 2 0 1 6 1 1\n" " 4.577034194110 0.065051807700 -0.018555371400\n" " 2.685006367322 -0.363216561500 -0.038757218600\n" " 1.107869270111 -0.013978112200 0.165913669300\n" " 0.515012065056 0.656897397000 0.409671142600\n" " 0.225105420962 0.492961793600 0.367216031300\n" " 0.089684813445 0.053468914400 0.129741292500\n" "#","\n" " Cl DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q7\n" " 1\n" " 2 0 2 6 2 2 1\n" " 4.577034194110 0.065051807700 -0.056917463100 -0.018555371400 0.004980719100 0.008255008600\n" " 2.685006367322 -0.363216561500 0.289383593800 -0.038757218600 0.062414668400 0.112659622200\n" " 1.107869270111 -0.013978112200 0.170470730200 0.165913669300 -0.069602677800 0.303640572700\n" " 0.515012065056 0.656897397000 -0.631234162900 0.409671142600 -0.435899779400 0.542588312000\n" " 0.225105420962 0.492961793600 0.132599834000 0.367216031300 0.798386816000 0.275653471800\n" " 0.089684813445 0.053468914400 0.558743621800 0.129741292500 1.105427347200 -0.001399665300\n" "#","\n" " Cl TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q7\n" " 1\n" " 2 0 2 6 3 3 1\n" " 4.577034194110 0.065051807700 -0.056917463100 -0.222676105800 -0.018555371400 0.004980719100 0.014188226800 0.008255008600\n" " 2.685006367322 -0.363216561500 0.289383593800 0.906226330700 -0.038757218600 0.062414668400 0.099373116400 0.112659622200\n" " 1.107869270111 -0.013978112200 0.170470730200 0.240057556900 0.165913669300 -0.069602677800 -0.139583547500 0.303640572700\n" " 0.515012065056 0.656897397000 -0.631234162900 -0.584789043400 0.409671142600 -0.435899779400 -0.452556047700 0.542588312000\n" " 0.225105420962 0.492961793600 0.132599834000 0.113336595400 0.367216031300 0.798386816000 0.872967525000 0.275653471800\n" " 0.089684813445 0.053468914400 0.558743621800 -0.074517779100 0.129741292500 1.105427347200 -0.464881530900 -0.001399665300\n" "#","\n" " Cl TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q7\n" " 1\n" " 2 0 2 6 3 3 2\n" " 4.577034194110 0.065051807700 -0.056917463100 -0.222676105800 -0.018555371400 0.004980719100 0.014188226800 0.008255008600 -0.023981761800\n" " 2.685006367322 -0.363216561500 0.289383593800 0.906226330700 -0.038757218600 0.062414668400 0.099373116400 0.112659622200 0.022760737200\n" " 1.107869270111 -0.013978112200 0.170470730200 0.240057556900 0.165913669300 -0.069602677800 -0.139583547500 0.303640572700 -0.255872922500\n" " 0.515012065056 0.656897397000 -0.631234162900 -0.584789043400 0.409671142600 -0.435899779400 -0.452556047700 0.542588312000 0.152366447500\n" " 0.225105420962 0.492961793600 0.132599834000 0.113336595400 0.367216031300 0.798386816000 0.872967525000 0.275653471800 0.683411212900\n" " 0.089684813445 0.053468914400 0.558743621800 -0.074517779100 0.129741292500 1.105427347200 -0.464881530900 -0.001399665300 -0.558926647700\n" "#","\n" " Cl TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q7\n" " 1\n" " 2 0 3 6 3 3 2 1\n" " 4.577034194110 0.065051807700 -0.056917463100 -0.222676105800 -0.018555371400 0.004980719100 0.014188226800 0.008255008600 -0.023981761800 0.012967367100\n" " 2.685006367322 -0.363216561500 0.289383593800 0.906226330700 -0.038757218600 0.062414668400 0.099373116400 0.112659622200 0.022760737200 0.024412096700\n" " 1.107869270111 -0.013978112200 0.170470730200 0.240057556900 0.165913669300 -0.069602677800 -0.139583547500 0.303640572700 -0.255872922500 0.393536985500\n" " 0.515012065056 0.656897397000 -0.631234162900 -0.584789043400 0.409671142600 -0.435899779400 -0.452556047700 0.542588312000 0.152366447500 0.715552544800\n" " 0.225105420962 0.492961793600 0.132599834000 0.113336595400 0.367216031300 0.798386816000 0.872967525000 0.275653471800 0.683411212900 0.342440527400\n" " 0.089684813445 0.053468914400 0.558743621800 -0.074517779100 0.129741292500 1.105427347200 -0.464881530900 -0.001399665300 -0.558926647700 -0.147002819200\n" "#","\n" " H SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q1\n" " 1\n" " 2 0 0 5 1\n" " 10.068468228533 -0.033917444900\n" " 2.680222868089 -0.122202212100\n" " 0.791501539122 -0.443818861200\n" " 0.239116150487 -0.453182186600\n" " 0.082193184441 -0.131612861500\n" "#","\n" " H DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q1\n" " 1\n" " 2 0 1 5 2 1\n" " 10.068468228533 -0.033917444900 0.059193775500 0.009905134400\n" " 2.680222868089 -0.122202212100 0.843318328900 0.122449566500\n" " 0.791501539122 -0.443818861200 -1.155707115500 0.477183240900\n" " 0.239116150487 -0.453182186600 0.049479621200 0.547919678200\n" " 0.082193184441 -0.131612861500 0.522708738000 0.869031854000\n" "#","\n" " He SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q2\n" " 1\n" " 2 0 0 4 1\n" " 11.042785405048 -0.057709039524\n" " 2.784477928537 -0.186997538114\n" " 0.777508803064 -0.356165765185\n" " 0.222222544418 -0.270871722171\n" "#","\n" " He DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q2\n" " 1\n" " 2 0 1 4 2 1\n" " 11.042785405048 -0.057709039524 -0.105186433287 0.003655817482\n" " 2.784477928537 -0.186997538114 -0.390936479220 -0.189395754815\n" " 0.777508803064 -0.356165765185 -0.838063667638 -1.512867520694\n" " 0.222222544418 -0.270871722171 1.442874338563 0.670534435463\n" "#","\n" " Li SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q3\n" " 1\n" " 2 0 0 5 2\n" " 7.133127574876 0.277443782336 0.081564852833\n" " 1.999997046722 0.418209986449 0.163120764751\n" " 0.612030939985 0.305912589369 0.178229873051\n" " 0.084366737836 0.210640845338 -0.467205177084\n" " 0.032613166298 0.112523830865 -0.297593804585\n" "#","\n" " Li DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q3\n" " 1\n" " 2 0 1 5 3 1\n" " 7.133127574876 0.277443782336 0.081564852833 -0.186441017519 -0.057587889331\n" " 1.999997046722 0.418209986449 0.163120764751 -0.109333052536 -0.009895878526\n" " 0.612030939985 0.305912589369 0.178229873051 -0.035923579149 -0.849366496083\n" " 0.084366737836 0.210640845338 -0.467205177084 -1.930661653919 -2.366974219334\n" " 0.032613166298 0.112523830865 -0.297593804585 1.884814754037 0.117218879286\n" "#","\n" " Be SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 0 6 2\n" " 14.927410410930 -0.101692281035 0.108892279587\n" " 6.934611958494 -0.211895541408 0.237670602277\n" " 2.222208384565 -0.279935231472 0.429698556888\n" " 0.732913986617 -0.091068265926 0.213557818158\n" " 0.225007132266 -0.115295308010 -0.652182396204\n" " 0.074144067364 -0.173251908170 -0.905622978118\n" "#","\n" " Be DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 1 6 3 1\n" " 14.927410410930 -0.101692281035 0.108892279587 -0.013828511039 -0.043322867269\n" " 6.934611958494 -0.211895541408 0.237670602277 -0.065062052894 -0.047764533740\n" " 2.222208384565 -0.279935231472 0.429698556888 -0.515821054187 -0.217923574729\n" " 0.732913986617 -0.091068265926 0.213557818158 -0.100183446834 -1.091509212634\n" " 0.225007132266 -0.115295308010 -0.652182396204 2.012025412480 -2.124632001073\n" " 0.074144067364 -0.173251908170 -0.905622978118 -1.507944883871 -1.344316057412\n" "#","\n" " B SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q3\n" " 1\n" " 2 0 1 4 1 1\n" " 3.053444073497 0.142389531583 -0.124774394633\n" " 0.915483968316 0.070304308347 -0.383517801425\n" " 0.329920053516 -0.657626233726 -0.645201457411\n" " 0.101655384143 -0.417625483973 -0.369557407831\n" "#","\n" " B DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q3\n" " 1\n" " 2 0 2 4 2 2 1\n" " 3.053444073497 0.142389531583 -0.541363625050 -0.124774394633 -0.166005683397 -0.081377656373\n" " 0.915483968316 0.070304308347 -0.187885904555 -0.383517801425 -0.631934352115 -0.772292138236\n" " 0.329920053516 -0.657626233726 1.734743314732 -0.645201457411 -0.579629526633 -1.322433881793\n" " 0.101655384143 -0.417625483973 -1.647357915542 -0.369557407831 1.762122465548 -0.981970482328\n" "#","\n" " C SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 1 5 1 1\n" " 5.605330751705 0.111532881900 -0.064868978500\n" " 2.113016390533 0.153142194100 -0.200470255700\n" " 0.769911454810 -0.321396879400 -0.413141730100\n" " 0.348157086385 -0.610926421600 -0.415337139200\n" " 0.128212254710 -0.133990862800 -0.288527673600\n" "#","\n" " C DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 2 5 2 2 1\n" " 5.605330751705 0.111532881900 0.466507483200 -0.064868978500 -0.055475693400 0.029952774600\n" " 2.113016390533 0.153142194100 0.144113212800 -0.200470255700 -0.216165175200 0.070784458800\n" " 0.769911454810 -0.321396879400 0.029364880900 -0.413141730100 -0.436624272300 0.674601058600\n" " 0.348157086385 -0.610926421600 0.929470388400 -0.415337139200 0.784000698400 0.173652061800\n" " 0.128212254710 -0.133990862800 1.066914331200 -0.288527673600 0.987908135000 1.036317024700\n" "#","\n" " N SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 1 5 1 1\n" " 7.341988051825 0.113789156500 -0.053744330400\n" " 2.542637110957 0.097294516500 -0.165752516200\n" " 0.888574967229 -0.445077422600 -0.317365165600\n" " 0.333802200435 -0.584142233900 -0.312039675200\n" " 0.112012109029 -0.139562383500 -0.117936008100\n" "#","\n" " N DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 2 5 2 2 1\n" " 7.341988051825 0.113789156500 0.077765588400 -0.053744330400 -0.007627243700 0.033688455200\n" " 2.542637110957 0.097294516500 0.108655219900 -0.165752516200 0.015163333100 0.109813343200\n" " 0.888574967229 -0.445077422600 -0.374125427100 -0.317365165600 -0.129388247500 0.856542971300\n" " 0.333802200435 -0.584142233900 0.024021712400 -0.312039675200 0.554905847400 0.509681657500\n" " 0.112012109029 -0.139562383500 0.979415132500 -0.117936008100 1.001020469600 0.047030652200\n" "#","\n" " O SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 1 5 1 1\n" " 10.389228018317 0.126240722900 -0.061302037200\n" " 3.849621072005 0.139933704300 -0.190087511700\n" " 1.388401188741 -0.434348231700 -0.377726982800\n" " 0.496955043655 -0.852791790900 -0.454266086000\n" " 0.162491615040 -0.242351537800 -0.257388983000\n" "#","\n" " O DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 2 5 2 2 1\n" " 10.389228018317 0.126240722900 0.069215797900 -0.061302037200 -0.026862701100 0.029845227500\n" " 3.849621072005 0.139933704300 0.115634538900 -0.190087511700 -0.006283021000 0.060939733900\n" " 1.388401188741 -0.434348231700 -0.322839719400 -0.377726982800 -0.224839187800 0.732321580100\n" " 0.496955043655 -0.852791790900 -0.095944016600 -0.454266086000 0.380324658600 0.893564918400\n" " 0.162491615040 -0.242351537800 1.102830348700 -0.257388983000 1.054102919900 0.152954188700\n" "#","\n" " F SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 1 5 1 1\n" " 13.701520668842 0.112227293400 -0.076186490700\n" " 5.098268930397 0.138913509400 -0.239982004100\n" " 1.837941323644 -0.418624975600 -0.481912435400\n" " 0.631758758967 -0.781149500600 -0.576092640600\n" " 0.202026732748 -0.233361053400 -0.325681090200\n" "#","\n" " F DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 2 5 2 2 1\n" " 13.701520668842 0.112227293400 0.097208978300 -0.076186490700 -0.065073103800 0.014975910100\n" " 5.098268930397 0.138913509400 0.102876192000 -0.239982004100 -0.178954386700 0.056540852300\n" " 1.837941323644 -0.418624975600 -0.261194711300 -0.481912435400 -0.432978808900 0.421555957700\n" " 0.631758758967 -0.781149500600 -0.613877500700 -0.576092640600 -0.420393726200 1.040368501100\n" " 0.202026732748 -0.233361053400 0.913930794200 -0.325681090200 1.087532785600 -0.115372011600\n" "#","\n" " Ne SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 1 6 1 1\n" " 19.144669251814 0.069475808579 0.044323480089\n" " 7.817581633327 0.136833604284 0.141748545980\n" " 3.076395099204 -0.176240522396 0.286599690536\n" " 1.225783227767 -0.534790596391 0.369762267197\n" " 0.469438475964 -0.420816475643 0.313976275678\n" " 0.165401378033 -0.056199770547 0.129616681048\n" "#","\n" " Ne DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 2 6 2 2 1\n" " 19.144669251814 0.069475808579 0.008074422113 0.044323480089 -0.019633668505 -0.016337449779\n" " 7.817581633327 0.136833604284 0.088172430797 0.141748545980 -0.051196308389 -0.013519520944\n" " 3.076395099204 -0.176240522396 -0.218906635760 0.286599690536 -0.171521562166 -0.158627528552\n" " 1.225783227767 -0.534790596391 0.130013326453 0.369762267197 0.007505219111 -0.028650976608\n" " 0.469438475964 -0.420816475643 -1.271285832759 0.313976275678 -0.568357530124 -0.982412169970\n" " 0.165401378033 -0.056199770547 1.727911777889 0.129616681048 1.298147838544 1.273253904774\n" "#","\n" " Na SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 1 7 2 1\n" " 23.518800761960 0.037798268053 0.005040470618 -0.041235150854\n" " 11.135656103275 0.180415272016 0.031210048356 -0.102704065658\n" " 4.647813820246 -0.084235489885 -0.021214584887 -0.276507156374\n" " 1.866708259982 -0.502007239468 -0.088006426680 -0.405087985600\n" " 0.734683697196 -0.487454712994 -0.241562643580 -0.345669762598\n" " 0.275672995860 -0.088909855778 0.046069503612 -0.128294724774\n" " 0.049895108245 -0.000245624853 1.008694292400 -0.002074313963\n" "#","\n" " Na DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 1 7 3 2\n" " 23.518800761960 0.037798268053 0.005040470618 0.037779070657 -0.041235150854 -0.005410838671\n" " 11.135656103275 0.180415272016 0.031210048356 -0.119614429319 -0.102704065658 -0.017609338317\n" " 4.647813820246 -0.084235489885 -0.021214584887 0.224302495702 -0.276507156374 -0.043803008653\n" " 1.866708259982 -0.502007239468 -0.088006426680 -0.183779813212 -0.405087985600 -0.067844235623\n" " 0.734683697196 -0.487454712994 -0.241562643580 1.641649867502 -0.345669762598 -0.085057974012\n" " 0.275672995860 -0.088909855778 0.046069503612 -2.281564821968 -0.128294724774 0.159527770719\n" " 0.049895108245 -0.000245624853 1.008694292400 0.801660990981 -0.002074313963 0.982149424568\n" "#","\n" " Mg SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 1 7 2 1\n" " 30.653047963189 0.054377184080 -0.008503364657 0.041949376018\n" " 12.924389070531 0.180093043263 -0.033268853396 0.154513485142\n" " 4.968377097667 -0.183378978769 0.039287763681 0.347080006586\n" " 1.851827556019 -0.641604001295 0.169148911336 0.456042413582\n" " 0.673565331978 -0.382610049904 0.233823708921 0.275294822235\n" " 0.168626419621 -0.012877428759 -0.474103906013 0.029266033687\n" " 0.059428253135 -0.011565253116 -0.681875195374 -0.006397458869\n" "#","\n" " Mg DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 1 7 3 2\n" " 30.653047963189 0.054377184080 -0.008503364657 -0.017403499711 0.041949376018 0.005685482959\n" " 12.924389070531 0.180093043263 -0.033268853396 0.019979586563 0.154513485142 0.031145413254\n" " 4.968377097667 -0.183378978769 0.039287763681 -0.035277033496 0.347080006586 0.054939424515\n" " 1.851827556019 -0.641604001295 0.169148911336 -0.203352520214 0.456042413582 0.123275320202\n" " 0.673565331978 -0.382610049904 0.233823708921 -0.348027990301 0.275294822235 -0.070548883335\n" " 0.168626419621 -0.012877428759 -0.474103906013 2.122888539507 0.029266033687 -0.608144728127\n" " 0.059428253135 -0.011565253116 -0.681875195374 -1.871583263111 -0.006397458869 -0.561501656268\n" "#","\n" " Al SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q3\n" " 1\n" " 2 0 1 4 1 1\n" " 1.212902319099 0.095248915182 0.017523273525\n" " 0.454181446881 0.238368062117 0.031530615904\n" " 0.242418503788 -0.551005849330 -0.395233201731\n" " 0.078268495175 -0.241350820340 -0.270737591969\n" "#","\n" " Al DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q3\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.212902319099 0.095248915182 -0.230241641025 0.017523273525 -0.081919506975 0.359233701644\n" " 0.454181446881 0.238368062117 -0.662191771394 0.031530615904 0.059600622511 0.610925184385\n" " 0.242418503788 -0.551005849330 1.692156327298 -0.395233201731 1.076271205166 1.758688383246\n" " 0.078268495175 -0.241350820340 -1.648320060523 -0.270737591969 -1.208390139070 0.735529744423\n" "#","\n" " Si SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 1 4 1 1\n" " 1.256767641387 0.227718466600 0.067776267500\n" " 0.506394122478 -0.024323599300 -0.213716770200\n" " 0.238883845662 -0.558639778900 -0.409893726600\n" " 0.087336883836 -0.207272502200 -0.353922302700\n" "#","\n" " Si DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.256767641387 0.227718466600 -1.025748084300 0.067776267500 0.099785628800 0.159026680300\n" " 0.506394122478 -0.024323599300 0.694283033300 -0.213716770200 -0.411985229800 0.392330436800\n" " 0.238883845662 -0.558639778900 0.058162561600 -0.409893726600 -0.057183126300 0.393085151800\n" " 0.087336883836 -0.207272502200 -0.258181009000 -0.353922302700 0.700307869400 0.550337119000\n" "#","\n" " P SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 1 4 1 1\n" " 1.631862170786 0.335074115300 0.123299547600\n" " 0.708432685319 -0.023088252600 -0.351511376700\n" " 0.284968483654 -0.973819129700 -0.806870557100\n" " 0.098011823689 -0.292906884000 -0.517933891800\n" "#","\n" " P DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.631862170786 0.335074115300 0.341512748800 0.123299547600 0.134459618400 0.174671506000\n" " 0.708432685319 -0.023088252600 0.008045537600 -0.351511376700 -0.389557392400 0.503029215100\n" " 0.284968483654 -0.973819129700 -0.851246931200 -0.806870557100 -0.138884374300 0.699184423900\n" " 0.098011823689 -0.292906884000 1.328906840600 -0.517933891800 1.062071606300 0.407460906200\n" "#","\n" " S SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 1 4 1 1\n" " 2.215854692813 0.170962878400 0.092191824200\n" " 1.131470525271 0.127069405600 -0.162197093800\n" " 0.410168143974 -0.733925381700 -0.605594737600\n" " 0.140587330023 -0.176971633900 -0.213309789800\n" "#","\n" " S DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 2 4 2 2 1\n" " 2.215854692813 0.170962878400 -0.080726543800 0.092191824200 0.057845138800 0.113762894700\n" " 1.131470525271 0.127069405600 -0.209877313900 -0.162197093800 -0.094737441500 0.350414093700\n" " 0.410168143974 -0.733925381700 0.683497090800 -0.605594737600 -0.369172638100 0.866785684700\n" " 0.140587330023 -0.176971633900 -0.625512739500 -0.213309789800 1.155699504700 0.217880463100\n" "#","\n" " Cl SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 1 4 1 1\n" " 2.379078117601 0.349064979100 0.116462270400\n" " 1.470718465013 0.023265903500 -0.193945393700\n" " 0.461213474057 -1.015492630400 -0.463529682400\n" " 0.150014717415 -0.402599991500 -0.299834714700\n" "#","\n" " Cl DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 2 4 2 2 1\n" " 2.379078117601 0.349064979100 0.153138206200 0.116462270400 0.160067891900 0.074898027900\n" " 1.470718465013 0.023265903500 0.170051509900 -0.193945393700 -0.212781225800 0.303856570000\n" " 0.461213474057 -1.015492630400 -0.702516267300 -0.463529682400 -0.439023237200 0.766878436800\n" " 0.150014717415 -0.402599991500 0.681437336600 -0.299834714700 1.036634179400 0.154947398700\n" "#","\n" " Ar SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 1 5 1 1\n" " 3.936450214256 -0.126876868653 0.081197313256\n" " 2.888050686108 0.488558851459 -0.050560847288\n" " 0.925305548464 -0.356808308806 -0.382285987629\n" " 0.366456608488 -0.745538702598 -0.507927770980\n" " 0.128035915977 -0.148475482748 -0.248562045384\n" "#","\n" " Ar DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 2 5 2 2 1\n" " 3.936450214256 -0.126876868653 -0.120853949683 0.081197313256 0.115242855583 0.118434272495\n" " 2.888050686108 0.488558851459 0.030456012450 -0.050560847288 -0.153264749918 -0.157989713634\n" " 0.925305548464 -0.356808308806 -0.229699408013 -0.382285987629 -0.074149829187 -0.072608763447\n" " 0.366456608488 -0.745538702598 1.833670881562 -0.507927770980 -0.965020325642 -0.967474418604\n" " 0.128035915977 -0.148475482748 -1.869800022555 -0.248562045384 1.384189599695 1.358175503076\n" "#","\n" " K SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 1 6 2 1\n" " 2.891270375454 -0.125588343071 0.141760377816 0.586273841257\n" " 2.714957993897 -0.332679523247 0.045797253838 -0.600247660122\n" " 0.954062644964 0.579235654863 -0.270917640330 -0.331386642719\n" " 0.407596260029 0.640286613853 -0.523435976542 -0.345162964052\n" " 0.163339876080 0.132146903359 -0.040955544362 -0.129654083334\n" " 0.036854064168 0.136961207358 1.420210199250 -0.002662514210\n" "#","\n" " K DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 2 6 3 2 1\n" " 2.891270375454 -0.125588343071 0.141760377816 0.092583173658 0.586273841257 0.174577931878 -0.022072489962\n" " 2.714957993897 -0.332679523247 0.045797253838 -0.045825704377 -0.600247660122 -0.189434477232 0.113984804892\n" " 0.954062644964 0.579235654863 -0.270917640330 0.363168058178 -0.331386642719 -0.078101098846 0.234486045475\n" " 0.407596260029 0.640286613853 -0.523435976542 -2.539586038548 -0.345162964052 -0.144666151565 0.234673259721\n" " 0.163339876080 0.132146903359 -0.040955544362 2.654427110393 -0.129654083334 0.092758894460 0.452553356262\n" " 0.036854064168 0.136961207358 1.420210199250 -0.693763482649 -0.002662514210 0.780744603300 0.480095027043\n" "#","\n" " Ca SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 1 6 2 1\n" " 5.284985596557 -0.416182629697 -0.083912217567 0.064960038145\n" " 4.091752229122 0.887610504052 0.216895453968 0.014546526081\n" " 1.429520321762 -0.323549926958 -0.096935550443 -0.466720491908\n" " 0.614375507986 -0.908395199325 -0.502206578258 -0.634030899528\n" " 0.242970577562 -0.208971576432 -0.096821746914 -0.251681593814\n" " 0.055000158016 0.039132482825 1.342563762693 -0.000003936848\n" "#","\n" " Ca DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 2 6 3 2 1\n" " 5.284985596557 -0.416182629697 -0.083912217567 -0.208574685974 0.064960038145 0.026515439739 -0.066630752510\n" " 4.091752229122 0.887610504052 0.216895453968 0.314510703283 0.014546526081 -0.028997969950 0.197842850864\n" " 1.429520321762 -0.323549926958 -0.096935550443 -0.601923136001 -0.466720491908 -0.073243851190 0.458365171560\n" " 0.614375507986 -0.908395199325 -0.502206578258 2.853614975011 -0.634030899528 -0.218228118923 0.372585742208\n" " 0.242970577562 -0.208971576432 -0.096821746914 -3.043287352030 -0.251681593814 0.144907690867 0.820156666086\n" " 0.055000158016 0.039132482825 1.342563762693 0.887844469398 -0.000003936848 0.854082269914 0.653032075293\n" "#","\n" " Sc SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 2 6 2 1 1\n" " 7.596358558474 -0.005607824648 -0.000597439424 -0.092377568763 0.045120250343\n" " 3.531908044322 0.513266691301 0.153537412458 0.071267862889 0.192728189010\n" " 1.358432991102 -0.619613224500 -0.224168885145 0.468025381136 0.336183526558\n" " 0.543348479632 -0.729328581203 -0.458469756794 0.444181247677 0.405780027669\n" " 0.197283658533 -0.063678221084 0.072089942129 0.091871138246 0.446780401537\n" " 0.054428805670 -0.076152416285 1.048240218482 -0.004061267711 0.155178106722\n" "#","\n" " Sc DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 7.596358558474 -0.005607824648 -0.000597439424 -0.002143930265 -0.092377568763 0.020935300558 0.045120250343 -0.026241824143 0.005774084495\n" " 3.531908044322 0.513266691301 0.153537412458 0.228058090414 0.071267862889 -0.024159604541 0.192728189010 -0.096234745142 -0.021058205466\n" " 1.358432991102 -0.619613224500 -0.224168885145 0.050489185834 0.468025381136 -0.177053431087 0.336183526558 -0.167689255408 -0.090318610966\n" " 0.543348479632 -0.729328581203 -0.458469756794 1.714744833607 0.444181247677 -0.236101867977 0.405780027669 -0.337050099684 -0.717025179002\n" " 0.197283658533 -0.063678221084 0.072089942129 -2.748813311572 0.091871138246 0.624399910851 0.446780401537 0.338357123973 -0.806018996967\n" " 0.054428805670 -0.076152416285 1.048240218482 1.327173437956 -0.004061267711 0.798174697757 0.155178106722 0.993267553023 -0.034431734574\n" "#","\n" " Ti SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 2 6 2 1 1\n" " 7.884569925997 0.004750577412 -0.002690702837 -0.108736525246 0.052842407451\n" " 3.894698463070 0.499503858222 0.103956524568 0.100912855636 0.195986532018\n" " 1.513588828959 -0.664995883766 -0.256641947580 0.527328996047 0.330343722079\n" " 0.596768079836 -0.726044574739 -0.451591547817 0.468197803110 0.396808432313\n" " 0.222222125842 -0.029011079755 0.165167622946 0.077640626075 0.347092399871\n" " 0.077078461321 0.075171747143 0.993127316430 -0.007523238420 0.132320900948\n" "#","\n" " Ti DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 7.884569925997 0.004750577412 -0.002690702837 0.075105591562 -0.108736525246 0.023185061556 0.052842407451 -0.038307431199 -0.002442658125\n" " 3.894698463070 0.499503858222 0.103956524568 0.048602853477 0.100912855636 -0.027189036213 0.195986532018 -0.076880250937 0.013119020987\n" " 1.513588828959 -0.664995883766 -0.256641947580 0.079732563787 0.527328996047 -0.230044390357 0.330343722079 -0.242486488988 -0.206817889885\n" " 0.596768079836 -0.726044574739 -0.451591547817 1.660896378972 0.468197803110 -0.126795185046 0.396808432313 -0.118369379707 -0.546596492823\n" " 0.222222125842 -0.029011079755 0.165167622946 -2.748651632733 0.077640626075 0.343517279356 0.347092399871 0.038099375809 -0.279145975103\n" " 0.077078461321 0.075171747143 0.993127316430 1.368227638651 -0.007523238420 0.946960702315 0.132320900948 1.046553050597 0.934394052863\n" "#","\n" " V SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 2 6 2 1 1\n" " 7.984623749528 0.020761670278 0.003472483927 -0.127318262252 0.054932269310\n" " 4.192169946044 0.491008828907 0.116393516673 0.142383719999 0.194803913356\n" " 1.674403287155 -0.682491382781 -0.215217539970 0.556224679524 0.318207922138\n" " 0.666664577236 -0.670820374730 -0.436714762412 0.483736882428 0.350513304180\n" " 0.242419878750 -0.048891386418 0.104274844115 0.086227000831 0.324484835051\n" " 0.067390273084 -0.000084103227 1.134107947863 -0.004719320688 0.134088585517\n" "#","\n" " V DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 7.984623749528 0.020761670278 0.003472483927 0.004588768658 -0.127318262252 0.022347856999 0.054932269310 -0.022459138650 -0.026581274918\n" " 4.192169946044 0.491008828907 0.116393516673 0.265023422395 0.142383719999 -0.034743188380 0.194803913356 -0.101116586232 0.051515222079\n" " 1.674403287155 -0.682491382781 -0.215217539970 0.055753124298 0.556224679524 -0.168852773516 0.318207922138 -0.120777522887 -0.165483508295\n" " 0.666664577236 -0.670820374730 -0.436714762412 1.571857662805 0.483736882428 -0.212388638969 0.350513304180 -0.254635388920 -0.672649310115\n" " 0.242419878750 -0.048891386418 0.104274844115 -2.575720417590 0.086227000831 0.567082913076 0.324484835051 0.328826511242 -0.518402997758\n" " 0.067390273084 -0.000084103227 1.134107947863 1.490359925888 -0.004719320688 0.737649031611 0.134088585517 0.919495386218 0.651022121928\n" "#","\n" " Cr SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q14\n" " 1\n" " 2 0 2 6 2 1 1\n" " 8.512514788173 0.044157704927 0.005521331885 -0.106538347032 0.081830853262\n" " 4.473610317347 0.611382080738 0.102717317434 0.123956998990 0.165469927086\n" " 1.935100804674 -0.806653824181 -0.230184308969 0.572145261792 0.291295712802\n" " 0.787755660544 -0.813737787488 -0.583672998554 0.518904350249 0.315064211859\n" " 0.293768118617 -0.097787236037 0.171514456916 0.104097287875 0.298491580418\n" " 0.096285158065 -0.018725934011 1.121145454028 -0.012851161685 0.091086538491\n" "#","\n" " Cr DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q14\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 8.512514788173 0.044157704927 0.005521331885 0.051983958707 -0.106538347032 0.019159720527 0.081830853262 -0.086435342501 0.010065113847\n" " 4.473610317347 0.611382080738 0.102717317434 -0.056754820192 0.123956998990 -0.039826791539 0.165469927086 -0.200410712475 -0.041960450278\n" " 1.935100804674 -0.806653824181 -0.230184308969 0.286788879281 0.572145261792 -0.183705969647 0.291295712802 -0.303533420852 -0.023503174374\n" " 0.787755660544 -0.813737787488 -0.583672998554 1.450866672422 0.518904350249 -0.237503427061 0.315064211859 -0.406252982054 -0.642426781332\n" " 0.293768118617 -0.097787236037 0.171514456916 -2.505465496286 0.104097287875 0.544755601203 0.298491580418 0.671193994691 -1.002149340367\n" " 0.096285158065 -0.018725934011 1.121145454028 1.333321045479 -0.012851161685 0.728237138423 0.091086538491 1.044472107589 -0.051749578559\n" "#","\n" " Mn SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q15\n" " 1\n" " 2 0 2 6 2 1 1\n" " 8.544553301652 0.073093470228 0.007737617141 -0.112356559070 0.128427483264\n" " 4.848054813373 0.524172731625 0.080999035925 0.147232813006 0.251552231081\n" " 2.164526529348 -0.728865076153 -0.168390545215 0.595364746984 0.432303419394\n" " 0.889600577579 -0.719279115513 -0.484910732725 0.547990570294 0.462243734648\n" " 0.342420014284 -0.107062868546 0.161978409160 0.112195052476 0.410033587493\n" " 0.101924225526 -0.091391408123 0.922002216513 -0.006599984929 0.104488744702\n" "#","\n" " Mn DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q15\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 8.544553301652 0.073093470228 0.007737617141 0.072614715676 -0.112356559070 -0.000918247791 0.128427483264 -0.098510232939 0.011600099044\n" " 4.848054813373 0.524172731625 0.080999035925 0.243235089119 0.147232813006 -0.022563980399 0.251552231081 -0.201137346341 -0.038269110382\n" " 2.164526529348 -0.728865076153 -0.168390545215 -0.083273051926 0.595364746984 -0.222689774520 0.432303419394 -0.372206024320 -0.006930134936\n" " 0.889600577579 -0.719279115513 -0.484910732725 1.528518694896 0.547990570294 -0.223281730802 0.462243734648 -0.283875478140 -0.593864975230\n" " 0.342420014284 -0.107062868546 0.161978409160 -2.382396811600 0.112195052476 0.787892008324 0.410033587493 0.535487181225 -0.731351385550\n" " 0.101924225526 -0.091391408123 0.922002216513 1.312464873250 -0.006599984929 0.923252070662 0.104488744702 0.884777948907 -0.410551623712\n" "#","\n" " Fe SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q16\n" " 1\n" " 2 0 2 6 2 1 1\n" " 8.424366035773 -0.162658565315 -0.035363017559 -0.072847050506 0.110173914394\n" " 4.825219529323 -0.376899337900 -0.052967122649 0.142729813399 0.188638090829\n" " 2.198939257455 0.782922261822 0.047770046081 0.463643359935 0.309261422382\n" " 0.891660670520 0.668791717694 -0.303745487596 0.381142099471 0.329416033612\n" " 0.316230539846 0.044155272467 0.241839701006 0.065337400672 0.286237082129\n" " 0.103474049912 -0.109124318184 1.110613962319 -0.008571808472 0.085017978924\n" "#","\n" " Fe DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q16\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 8.424366035773 -0.162658565315 -0.035363017559 -0.094078593184 -0.072847050506 -0.005733704721 0.110173914394 -0.070157127293 -0.006314368438\n" " 4.825219529323 -0.376899337900 -0.052967122649 -0.123947729175 0.142729813399 -0.013789178386 0.188638090829 -0.086799612151 0.010113549442\n" " 2.198939257455 0.782922261822 0.047770046081 -0.097232244128 0.463643359935 -0.102097633738 0.309261422382 -0.268972922540 -0.073675908597\n" " 0.891660670520 0.668791717694 -0.303745487596 -1.526375946562 0.381142099471 -0.120441338124 0.329416033612 -0.034996470754 -0.417006031951\n" " 0.316230539846 0.044155272467 0.241839701006 2.582854093079 0.065337400672 0.562339049496 0.286237082129 0.429744227008 -0.588459890648\n" " 0.103474049912 -0.109124318184 1.110613962319 -1.436336658778 -0.008571808472 0.724515320284 0.085017978924 0.805064206226 0.838504572352\n" "#","\n" " Co SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q17\n" " 1\n" " 2 0 2 6 2 1 1\n" " 8.365267848849 0.325640340818 0.100399284242 0.065178086481 0.161970551713\n" " 4.376457504499 0.052133097592 0.035256534659 -0.270123287267 0.258523958001\n" " 1.999997730424 -0.771768661844 -0.356022277776 -0.523181103805 0.345535423988\n" " 0.834299833692 -0.451524705474 -0.484191598528 -0.351988387737 0.343948305407\n" " 0.307481719486 -0.065898239599 0.316152225672 -0.046316455477 0.268593856293\n" " 0.095840175724 -0.089785302253 1.048143547929 0.002689603563 0.072458934329\n" "#","\n" " Co DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q17\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 8.365267848849 0.325640340818 0.100399284242 -0.037272221184 0.065178086481 -0.007853810191 0.161970551713 -0.150374171995 -0.004972248652\n" " 4.376457504499 0.052133097592 0.035256534659 0.130340578991 -0.270123287267 -0.005278972597 0.258523958001 -0.233094541861 -0.027876689140\n" " 1.999997730424 -0.771768661844 -0.356022277776 0.090277112993 -0.523181103805 -0.068346693868 0.345535423988 -0.433567358235 -0.105956196731\n" " 0.834299833692 -0.451524705474 -0.484191598528 1.325070368105 -0.351988387737 -0.063077394461 0.343948305407 0.030145546706 -0.735605287383\n" " 0.307481719486 -0.065898239599 0.316152225672 -2.625301782430 -0.046316455477 0.759497959451 0.268593856293 0.599205222587 -0.912105772173\n" " 0.095840175724 -0.089785302253 1.048143547929 1.561113649398 0.002689603563 0.543915652075 0.072458934329 0.957030486546 0.577467491892\n" "#","\n" " Ni SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q18\n" " 1\n" " 2 0 2 6 2 1 1\n" " 10.077427756816 -0.169086929207 0.022677528942 -0.126427871284 0.093966508982\n" " 5.847735848326 -0.313749841130 0.057292097754 0.241165311699 0.269388431386\n" " 2.494032826008 0.766489587737 -0.198532965699 0.543849904725 0.374569463127\n" " 0.988354848429 0.557414017577 -0.427662657827 0.407338672608 0.368089865298\n" " 0.344978242158 0.031729942841 0.260121348436 0.053320914508 0.281719022542\n" " 0.099465768726 -0.025637387109 0.887675876654 -0.003779723220 0.071642894272\n" "#","\n" " Ni DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q18\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 10.077427756816 -0.169086929207 0.022677528942 0.008641083176 -0.126427871284 -0.005476801255 0.093966508982 -0.033098284050 -0.001956691144\n" " 5.847735848326 -0.313749841130 0.057292097754 -0.136071800928 0.241165311699 -0.010936526817 0.269388431386 -0.127029492510 0.008799010286\n" " 2.494032826008 0.766489587737 -0.198532965699 0.002540653375 0.543849904725 -0.096663192733 0.374569463127 -0.196169938991 0.006398276758\n" " 0.988354848429 0.557414017577 -0.427662657827 -1.418467855641 0.407338672608 -0.097657540866 0.368089865298 -0.053996889860 0.204329631644\n" " 0.344978242158 0.031729942841 0.260121348436 2.550221093172 0.053320914508 0.508429500180 0.281719022542 0.149590629720 0.039178572608\n" " 0.099465768726 -0.025637387109 0.887675876654 -1.335540301345 -0.003779723220 0.911795065206 0.071642894272 1.026626831833 1.055662599287\n" "#","\n" " Cu SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 2 6 1 1 1\n" " 5.804051150731 0.020918100390 -0.004381592772 0.275442696345\n" " 2.947777593081 -0.106208582202 0.017185613995 0.351705110927\n" " 1.271621207972 0.307397740339 -0.089805629814 0.331635969640\n" " 0.517173767860 0.240805274553 0.054415126660 0.259386540456\n" " 0.198006620331 -0.798718095004 0.446326740476 0.151105835782\n" " 0.061684232135 -0.738671023869 0.468516012555 0.030634833418\n" "#","\n" " Cu DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 5.804051150731 0.020918100390 0.045720931893 -0.004381592772 -0.021109803873 0.275442696345 -0.101811263028 -0.016523760157\n" " 2.947777593081 -0.106208582202 -0.094026024883 0.017185613995 0.020960301873 0.351705110927 -0.207670618594 0.055142365254\n" " 1.271621207972 0.307397740339 -0.110623536813 -0.089805629814 0.233442747472 0.331635969640 -0.224161904198 -0.286656089760\n" " 0.517173767860 0.240805274553 -0.742218346329 0.054415126660 0.369266430953 0.259386540456 0.176105738988 -0.502349311598\n" " 0.198006620331 -0.798718095004 2.208107372713 0.446326740476 -1.405067129701 0.151105835782 0.210534119173 -0.508940020577\n" " 0.061684232135 -0.738671023869 -1.720016262377 0.468516012555 1.042169799071 0.030634833418 0.902456275117 0.682110135764\n" "#","\n" " Zn SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 2 6 1 1 1\n" " 6.400812724595 0.021801105639 0.002944311709 0.285687212506\n" " 3.167793332690 -0.095613408620 -0.010450068121 0.358913949434\n" " 1.341703542578 0.274599856591 0.109519543853 0.326076466590\n" " 0.545418416941 0.137056274402 -0.060402922899 0.224403593782\n" " 0.222221794449 -0.625184197271 -0.531920972347 0.097325359555\n" " 0.079830045424 -0.482184818124 -0.498668813865 0.009048926598\n" "#","\n" " Zn DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 6.400812724595 0.021801105639 0.042720631346 0.002944311709 0.015629658082 0.285687212506 -0.088263924683 -0.000548299003\n" " 3.167793332690 -0.095613408620 -0.109242428655 -0.010450068121 -0.063967389104 0.358913949434 -0.137258994504 0.001063691080\n" " 1.341703542578 0.274599856591 -0.024734012319 0.109519543853 -0.067544866326 0.326076466590 -0.221544327713 0.030739369071\n" " 0.545418416941 0.137056274402 -1.003647707301 -0.060402922899 -0.144585524038 0.224403593782 0.258114817153 0.504509433027\n" " 0.222221794449 -0.625184197271 2.351480103434 -0.531920972347 1.553520638132 0.097325359555 0.333724215761 0.222475088124\n" " 0.079830045424 -0.482184818124 -1.671373693342 -0.498668813865 -1.253104288811 0.009048926598 0.857995942810 0.894090639367\n" "#","\n" " Ga SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 2 6 1 1 1\n" " 7.066653970373 0.004038828810 0.000167446202 -0.311164169605\n" " 3.428369180000 -0.049926015210 0.003362568505 -0.386388805667\n" " 1.430064114378 0.270487560795 0.130532105798 -0.341437057173\n" " 0.571610928613 0.114461485481 -0.096032824634 -0.204608212390\n" " 0.232196966975 -0.765662388169 -0.807329497232 -0.056129936831\n" " 0.076561670688 -0.411890094700 -0.419386452377 -0.001205250841\n" "#","\n" " Ga DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 7.066653970373 0.004038828810 -0.031816598052 0.000167446202 0.029367472355 -0.311164169605 -0.152377671375 0.008402101637\n" " 3.428369180000 -0.049926015210 0.005769897361 0.003362568505 -0.090542574365 -0.386388805667 -0.200456714008 -0.016601774058\n" " 1.430064114378 0.270487560795 0.375790997895 0.130532105798 -0.084206693559 -0.341437057173 -0.304563164958 0.049257564549\n" " 0.571610928613 0.114461485481 0.388650732034 -0.096032824634 0.052258004145 -0.204608212390 0.349719373167 0.451920686398\n" " 0.232196966975 -0.765662388169 -1.779139618248 -0.807329497232 1.288732412987 -0.056129936831 0.455579311293 0.322063208269\n" " 0.076561670688 -0.411890094700 1.829743730735 -0.419386452377 -1.217068254825 -0.001205250841 0.817649971475 1.018553207480\n" "#","\n" " Ge SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 1 4 1 1\n" " 3.751626352194 -0.081330564365 0.009035073443\n" " 1.419172362656 0.601635148115 0.102040890998\n" " 0.322428319082 -0.974594550901 -0.762506665117\n" " 0.110739925211 -0.656437584837 -0.400605035566\n" "#","\n" " Ge DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 2 4 2 2 1\n" " 3.751626352194 -0.081330564365 0.131718200550 0.009035073443 -0.028177828258 -0.016817594331\n" " 1.419172362656 0.601635148115 -0.833571668129 0.102040890998 -0.184453915085 0.112319200324\n" " 0.322428319082 -0.974594550901 1.770142218328 -0.762506665117 1.459738649058 1.386642934635\n" " 0.110739925211 -0.656437584837 -1.762909730970 -0.400605035566 -1.461907495600 0.473933627779\n" "#","\n" " As SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 1 4 1 1\n" " 1.098624139209 0.855667038605 0.312802805211\n" " 0.889293303816 -0.687764546866 -0.362619654191\n" " 0.234710973732 -0.705420359459 -0.425177185346\n" " 0.097981856094 -0.209729326520 -0.182957845017\n" "#","\n" " As DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.098624139209 0.855667038605 -0.557301753073 0.312802805211 -0.238167652686 -0.102371891125\n" " 0.889293303816 -0.687764546866 -0.627315887673 -0.362619654191 0.216505388598 0.223787145639\n" " 0.234710973732 -0.705420359459 -2.016588485577 -0.425177185346 0.935056716086 0.988597507108\n" " 0.097981856094 -0.209729326520 1.439205779281 -0.182957845017 -1.485977479107 0.039413462750\n" "#","\n" " Se SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 1 4 1 1\n" " 1.465689267622 0.522315327760 0.302629346132\n" " 1.029752381010 -0.177617010578 -0.349360567622\n" " 0.303575471349 -1.057800048233 -0.653355185785\n" " 0.107173147417 -0.299101385035 -0.381186874482\n" "#","\n" " Se DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.465689267622 0.522315327760 0.109434486047 0.302629346132 0.397353185807 0.120897258750\n" " 1.029752381010 -0.177617010578 0.919860707697 -0.349360567622 -0.410169822544 -0.291516752716\n" " 0.303575471349 -1.057800048233 -1.719933785859 -0.653355185785 -0.626545135443 -1.069566209605\n" " 0.107173147417 -0.299101385035 2.073037006457 -0.381186874482 2.208055478040 -0.296658894209\n" "#","\n" " Br SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 1 4 1 1\n" " 1.737392738120 0.698849040883 0.408222406946\n" " 0.995743043074 -0.178219675950 -0.559269850657\n" " 0.337588776628 -1.701043348622 -1.220407791913\n" " 0.115887043391 -0.358131187327 -0.708522727592\n" "#","\n" " Br DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.737392738120 0.698849040883 -0.027829541950 0.408222406946 0.104199804352 0.735355883214\n" " 0.995743043074 -0.178219675950 0.121124053665 -0.559269850657 -0.028681992792 -2.354878683630\n" " 0.337588776628 -1.701043348622 -2.197717138458 -1.220407791913 -0.996384166266 -2.891234672063\n" " 0.115887043391 -0.358131187327 1.946344639416 -0.708522727592 3.770311426725 -0.592507107440\n" "#","\n" " Kr SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 1 4 1 1\n" " 1.784435668906 0.810837662050 0.348552421052\n" " 1.005532891273 -0.533585820331 -0.573408630951\n" " 0.327795673641 -1.439836500217 -0.909538466141\n" " 0.108549688447 -0.206171398876 -0.408970770978\n" "#","\n" " Kr DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.784435668906 0.810837662050 -0.329499714794 0.348552421052 -0.018676893124 -0.577769793404\n" " 1.005532891273 -0.533585820331 0.849588151788 -0.573408630951 -0.063596257231 -0.379378556605\n" " 0.327795673641 -1.439836500217 -2.926928041746 -0.909538466141 -0.786542637237 -1.203208979343\n" " 0.108549688447 -0.206171398876 1.961821687963 -0.408970770978 1.457080125376 1.674577778254\n" "#","\n" " Rb SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 1 7 2 1\n" " 7.107230694150 -0.062218041672 -0.013507092266 0.035700265054\n" " 2.414406259100 0.488731908603 0.125115402960 -0.161483665734\n" " 1.134628425827 -0.101894960518 -0.042229797524 0.211536304024\n" " 0.483816136667 -0.827806256641 -0.296364033354 0.499666987934\n" " 0.198690371820 -0.304219423335 -0.278176269515 0.306717399916\n" " 0.078496630593 0.002468186208 0.316847793087 0.039955632038\n" " 0.029773227781 0.025109167182 0.829792452385 -0.000551065720\n" "#","\n" " Rb DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 2 7 3 2 1\n" " 7.107230694150 -0.062218041672 -0.013507092266 0.027821303246 0.035700265054 -0.009299202459 -0.001936508600\n" " 2.414406259100 0.488731908603 0.125115402960 -0.230232762986 -0.161483665734 0.041686622213 -0.002780629610\n" " 1.134628425827 -0.101894960518 -0.042229797524 0.239146438168 0.211536304024 -0.062301116336 0.092739553255\n" " 0.483816136667 -0.827806256641 -0.296364033354 -0.001364253092 0.499666987934 -0.186160284116 0.347438745009\n" " 0.198690371820 -0.304219423335 -0.278176269515 1.281826773475 0.306717399916 -0.090677499009 0.636698242337\n" " 0.078496630593 0.002468186208 0.316847793087 -2.888698734643 0.039955632038 0.258184855427 0.573025473782\n" " 0.029773227781 0.025109167182 0.829792452385 1.751588992331 -0.000551065720 0.909374383359 0.565570253663\n" "#","\n" " Sr SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 1 6 2 1\n" " 7.290111894735 0.069364270475 -0.016182746349 0.035659445929\n" " 2.536776771327 -0.571246927373 0.158928639982 -0.195822349727\n" " 1.283099546928 0.167836311459 -0.041157757852 0.260320252229\n" " 0.532449841650 0.904733330629 -0.431882417196 0.555386362294\n" " 0.211628059408 0.250907816117 -0.073959284415 0.267635587013\n" " 0.050841303698 0.007135721199 0.825600560103 0.001214128781\n" "#","\n" " Sr DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 2 6 3 2 1\n" " 7.290111894735 0.069364270475 -0.016182746349 -0.139466774650 0.035659445929 0.013920724630 -0.000090724547\n" " 2.536776771327 -0.571246927373 0.158928639982 -0.692403611332 -0.195822349727 -0.076802870831 -0.010109417559\n" " 1.283099546928 0.167836311459 -0.041157757852 -0.230309165261 0.260320252229 0.101479121539 0.066689821534\n" " 0.532449841650 0.904733330629 -0.431882417196 -0.069075854659 0.555386362294 0.267329775450 0.181824639879\n" " 0.211628059408 0.250907816117 -0.073959284415 1.145292027845 0.267635587013 0.052802012061 0.278155352971\n" " 0.050841303698 0.007135721199 0.825600560103 -2.640301525895 0.001214128781 -0.501686484262 0.157444712589\n" "#","\n" " Y SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 2 7 2 1 1\n" " 7.169829557085 0.064756738089 -0.022627762846 -0.024276685117 -0.000498514326\n" " 2.700922470615 -0.597719860262 0.235885458901 0.187917721906 -0.031403568872\n" " 1.376251109084 0.082122642041 -0.087291364288 -0.245232860710 0.127573561162\n" " 0.656916983532 0.966304799106 -0.405979470239 -0.598857920831 0.336722884287\n" " 0.281951576337 0.370251411162 -0.369782037034 -0.347360898522 0.474465039649\n" " 0.114567346626 0.047095993893 0.381463146281 -0.027444250529 0.383269025496\n" " 0.041587097849 0.121766951290 0.813527659184 -0.000772518245 0.124574151507\n" "#","\n" " Y DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 3 7 3 2 2 1\n" " 7.169829557085 0.064756738089 -0.022627762846 0.003819575374 -0.024276685117 -0.007895618075 -0.000498514326 -0.004435490551 -0.001782791348\n" " 2.700922470615 -0.597719860262 0.235885458901 -0.198330198799 0.187917721906 0.069387220484 -0.031403568872 0.054881707361 0.012853512634\n" " 1.376251109084 0.082122642041 -0.087291364288 0.531158632032 -0.245232860710 -0.134631203363 0.127573561162 -0.129541942957 -0.087471625840\n" " 0.656916983532 0.966304799106 -0.405979470239 0.108726218382 -0.598857920831 -0.231880747338 0.336722884287 -0.597681869599 -0.650935776283\n" " 0.281951576337 0.370251411162 -0.369782037034 1.371830612307 -0.347360898522 -0.080179872806 0.474465039649 -0.136727173378 -0.584017959493\n" " 0.114567346626 0.047095993893 0.381463146281 -3.345342150310 -0.027444250529 0.520590734955 0.383269025496 0.038190788742 -0.696187518367\n" " 0.041587097849 0.121766951290 0.813527659184 2.147987485965 -0.000772518245 0.741032334112 0.124574151507 1.078804758995 0.524836449052\n" "#","\n" " Zr SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 2 7 2 1 1\n" " 7.568385790028 -0.094978310907 -0.033616559232 -0.020865512366 -0.001689422502\n" " 2.940870125103 0.694261607918 0.288000788551 0.222352813741 -0.011935551626\n" " 1.478549725921 -0.214258448962 -0.141902662715 -0.319406707712 0.152103521468\n" " 0.699652747292 -0.923670545104 -0.452166355085 -0.588541345286 0.296191130217\n" " 0.314575404780 -0.327047026378 -0.381211768681 -0.309198403218 0.399124869129\n" " 0.129868596693 0.003239038466 0.526743157382 -0.019801636662 0.242072326904\n" " 0.046850569449 -0.007129719335 0.810803550660 -0.000524643311 0.048657150043\n" "#","\n" " Zr DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 3 7 3 2 2 1\n" " 7.568385790028 -0.094978310907 -0.033616559232 -0.013349699986 -0.020865512366 -0.002290591691 -0.001689422502 -0.002354868577 0.003856737689\n" " 2.940870125103 0.694261607918 0.288000788551 -0.164712644101 0.222352813741 0.053781865205 -0.011935551626 0.026432470933 -0.013583377285\n" " 1.478549725921 -0.214258448962 -0.141902662715 0.533207302704 -0.319406707712 -0.122494830242 0.152103521468 -0.076453834071 -0.086468568432\n" " 0.699652747292 -0.923670545104 -0.452166355085 0.109420966738 -0.588541345286 -0.277888241330 0.296191130217 -0.273025800110 -0.563950845131\n" " 0.314575404780 -0.327047026378 -0.381211768681 1.392697829361 -0.309198403218 0.025966843597 0.399124869129 0.045119618315 -0.622062115242\n" " 0.129868596693 0.003239038466 0.526743157382 -3.337321484704 -0.019801636662 0.475807819736 0.242072326904 0.180401992175 -0.552753691412\n" " 0.046850569449 -0.007129719335 0.810803550660 2.074605849369 -0.000524643311 0.625967738574 0.048657150043 1.105393639621 0.165196094208\n" "#","\n" " Nb SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 2 7 2 1 1\n" " 3.445688332127 6.967608357644 -3.377478792599 -0.840846380047 0.388363778921\n" " 3.361754070289 -7.592191163341 3.690016909917 0.956420493475 -0.389233499416\n" " 1.402769349742 0.489341601567 -0.310828636726 -0.276255708969 -0.232772054682\n" " 0.638107530614 0.749244219846 -0.462987145063 -0.340280885378 -0.367470032847\n" " 0.297916452528 0.168228854756 -0.275959272761 -0.120882245268 -0.373135144785\n" " 0.134531184887 -0.010188517089 0.576706104059 -0.004779969154 -0.185455779821\n" " 0.051687918628 0.006294814846 0.631490283017 -0.000211964161 -0.039160568093\n" "#","\n" " Nb DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 3 7 3 2 2 1\n" " 3.445688332127 6.967608357644 -3.377478792599 8.753281549590 -0.840846380047 0.156868559129 0.388363778921 0.459373932984 0.464314945457\n" " 3.361754070289 -7.592191163341 3.690016909917 -8.926202800310 0.956420493475 -0.211987417412 -0.389233499416 -0.467868954158 -0.427447517961\n" " 1.402769349742 0.489341601567 -0.310828636726 0.633972204920 -0.276255708969 0.225373426671 -0.232772054682 -0.169379157593 -0.197717184453\n" " 0.638107530614 0.749244219846 -0.462987145063 -0.111601241388 -0.340280885378 0.183794395021 -0.367470032847 -0.323135603674 -0.588178917976\n" " 0.297916452528 0.168228854756 -0.275959272761 1.410604379810 -0.120882245268 -0.165885709655 -0.373135144785 0.023106426168 -0.476010923425\n" " 0.134531184887 -0.010188517089 0.576706104059 -3.231399119388 -0.004779969154 -0.336057891318 -0.185455779821 -0.086482885111 -0.466998469570\n" " 0.051687918628 0.006294814846 0.631490283017 2.118393728700 -0.000211964161 -0.786575100596 -0.039160568093 1.131690269915 0.648887813696\n" "#","\n" " Mo SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q14\n" " 1\n" " 2 0 2 7 2 1 1\n" " 2.540273246178 -0.578530819221 0.207479779241 0.307100812758 -0.149151531382\n" " 1.999996221023 0.255133124027 -0.231957971109 -0.375633370985 0.289650418561\n" " 0.894040376874 0.676100594670 0.285544120446 -0.244205356948 0.207391250228\n" " 0.439256605865 0.131763425580 0.062954195096 -0.177325998176 0.312615422763\n" " 0.189497802537 0.085911973535 -0.210930323620 -0.016882413378 0.200727667932\n" " 0.083802212693 -0.062285567387 -0.868201464922 -0.000916114554 0.047819428716\n" " 0.052948764137 0.016176877393 -0.574266536022 0.000883614589 0.013662121505\n" "#","\n" " Mo DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q14\n" " 1\n" " 2 0 3 7 3 2 2 1\n" " 2.540273246178 -0.578530819221 0.207479779241 -0.299914438061 0.307100812758 -0.056135943926 -0.149151531382 0.078318936957 0.090482429273\n" " 1.999996221023 0.255133124027 -0.231957971109 -0.417466028636 -0.375633370985 0.137590516968 0.289650418561 -0.193587305622 -0.158221499177\n" " 0.894040376874 0.676100594670 0.285544120446 0.515341081590 -0.244205356948 0.160869646404 0.207391250228 -0.376645017726 -0.294586192143\n" " 0.439256605865 0.131763425580 0.062954195096 -0.748853953260 -0.177325998176 -0.132932627695 0.312615422763 -0.186682023670 -0.705339054554\n" " 0.189497802537 0.085911973535 -0.210930323620 1.300969236640 -0.016882413378 -0.383867077982 0.200727667932 0.236167100944 -0.270988043507\n" " 0.083802212693 -0.062285567387 -0.868201464922 -3.373816977234 -0.000916114554 -0.526274675338 0.047819428716 0.096109040144 -0.475221485624\n" " 0.052948764137 0.016176877393 -0.574266536022 1.973814085745 0.000883614589 -0.535005148259 0.013662121505 1.079607069896 0.639098431599\n" "#","\n" " Tc SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q15\n" " 1\n" " 2 0 2 7 2 1 1\n" " 3.164224765901 -4.936025404648 2.690105911399 1.875473204955 -0.315743748171\n" " 3.111533459421 5.402033503677 -2.906113798449 -1.589412009269 0.248590535878\n" " 1.923601224823 -0.382432085374 0.205154484199 -0.484599011050 0.277986264842\n" " 0.887428259225 -0.325518324167 0.411180892172 -0.878565217193 0.337694430891\n" " 0.387592572799 -0.122553923184 0.110130628461 -0.345096002980 0.419921218350\n" " 0.151375638104 0.091448243559 -0.679068092339 -0.016891045364 0.202434518908\n" " 0.052897942898 0.094934643036 -0.799513230137 0.002744375423 0.022350450321\n" "#","\n" " Tc DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q15\n" " 1\n" " 2 0 3 7 3 2 2 1\n" " 3.164224765901 -4.936025404648 2.690105911399 8.299735456543 1.875473204955 -0.389124278660 -0.315743748171 0.453605787389 0.417278606867\n" " 3.111533459421 5.402033503677 -2.906113798449 -8.422380593905 -1.589412009269 0.310379586569 0.248590535878 -0.430318362917 -0.352874423698\n" " 1.923601224823 -0.382432085374 0.205154484199 0.605501825023 -0.484599011050 0.219977647323 0.277986264842 -0.192462070398 -0.135620561050\n" " 0.887428259225 -0.325518324167 0.411180892172 -0.244963673523 -0.878565217193 0.144726968569 0.337694430891 -0.252253826854 -0.492425087615\n" " 0.387592572799 -0.122553923184 0.110130628461 1.309565408916 -0.345096002980 -0.226102503229 0.419921218350 -0.096741785658 -0.446932223217\n" " 0.151375638104 0.091448243559 -0.679068092339 -3.154717953969 -0.016891045364 -0.394462618190 0.202434518908 -0.085506487189 -0.445111357421\n" " 0.052897942898 0.094934643036 -0.799513230137 2.197244299784 0.002744375423 -0.648372090195 0.022350450321 1.149052887456 0.721221763063\n" "#","\n" " Ru SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q16\n" " 1\n" " 2 0 2 7 2 1 1\n" " 2.787485846721 0.419245156353 0.847305490262 -2.358144554736 0.788526811934\n" " 2.671513807197 0.402523023175 -1.207617992281 2.345239865410 -0.863711338604\n" " 1.595751289168 -0.808149719838 0.513111660606 0.317793572742 -0.053253108229\n" " 0.821527061530 -0.477224887406 0.129164670091 0.512263090829 -0.202587225418\n" " 0.376346360068 -0.163265585552 0.268674181220 0.188482905753 -0.146122499622\n" " 0.192696937194 -0.088262869679 -0.408874960105 0.000829620006 -0.095330219372\n" " 0.068097557464 -0.260996120571 -0.797339816834 0.001387096163 -0.024995451964\n" "#","\n" " Ru DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q16\n" " 1\n" " 2 0 3 7 3 2 2 1\n" " 2.787485846721 0.419245156353 0.847305490262 6.921824287372 -2.358144554736 -0.707900609304 0.788526811934 0.431581913720 0.626906168798\n" " 2.671513807197 0.402523023175 -1.207617992281 -7.215911406936 2.345239865410 0.713232939519 -0.863711338604 -0.493940272079 -0.640462793210\n" " 1.595751289168 -0.808149719838 0.513111660606 0.791734614725 0.317793572742 0.156002828255 -0.053253108229 -0.106350839479 -0.104374234384\n" " 0.821527061530 -0.477224887406 0.129164670091 -0.269179658833 0.512263090829 0.255718656921 -0.202587225418 -0.431181078906 -0.721109469116\n" " 0.376346360068 -0.163265585552 0.268674181220 1.108319334214 0.188482905753 -0.505228683203 -0.146122499622 0.055386787557 -0.474329276924\n" " 0.192696937194 -0.088262869679 -0.408874960105 -3.154973580527 0.000829620006 -0.444948207050 -0.095330219372 0.157949246530 -0.620019133396\n" " 0.068097557464 -0.260996120571 -0.797339816834 1.934939194182 0.001387096163 -0.452796474664 -0.024995451964 1.037559058652 0.466016266685\n" "#","\n" " Rh SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q17\n" " 1\n" " 2 0 2 6 2 1 1\n" " 3.157817444361 0.760084070950 0.239207051701 -0.336193318541 -0.176446839307\n" " 2.683291075925 -0.255650224037 -0.091067207483 0.373953992584 0.261743358411\n" " 1.140786095845 -1.025626679377 -0.520689753906 0.300684698668 0.174717739794\n" " 0.492081007160 -0.234415477939 -0.274976137245 0.141457244144 0.188746290944\n" " 0.192543904978 0.046321838032 0.534686741279 0.007751787318 0.112894420897\n" " 0.066486620394 0.135748106274 0.896548625743 0.000117823467 0.021703317232\n" "#","\n" " Rh DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q17\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 3.157817444361 0.760084070950 0.239207051701 -0.176908781955 -0.336193318541 -0.088125446787 -0.176446839307 -0.026270559744 0.115615533976\n" " 2.683291075925 -0.255650224037 -0.091067207483 0.468944646941 0.373953992584 0.061257175816 0.261743358411 -0.026406732314 -0.111111060683\n" " 1.140786095845 -1.025626679377 -0.520689753906 -0.120831837016 0.300684698668 -0.192303757667 0.174717739794 -0.254749961865 -0.622696187547\n" " 0.492081007160 -0.234415477939 -0.274976137245 1.313841940318 0.141457244144 0.290786768179 0.188746290944 0.046758963178 -0.157786278903\n" " 0.192543904978 0.046321838032 0.534686741279 -3.287648327719 0.007751787318 0.580565362723 0.112894420897 0.048917987662 -0.581950444165\n" " 0.066486620394 0.135748106274 0.896548625743 1.948301386804 0.000117823467 0.790444403671 0.021703317232 0.972191217603 0.993182295696\n" "#","\n" " Rh SZV-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 2 6 1 1 1\n" " 3.902721449032 0.016652865171 -0.008699428728 -0.112417659954\n" " 1.999830271997 -0.133395648426 0.046572987907 0.348017742874\n" " 0.879887627395 0.373099930807 -0.153463590375 0.381775351795\n" " 0.363794442257 0.298777744612 -0.052550610965 0.335875585916\n" " 0.140096726529 -0.924610879301 0.949493319446 0.146687236468\n" " 0.042562039477 -0.455102584336 0.423881871378 0.013082339937\n" "#","\n" " Rh SZVP-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 2 6 2 1 2\n" " 3.902721449032 0.016652865171 -0.068138878878 -0.008699428728 -0.112417659954 -0.059777116284\n" " 1.999830271997 -0.133395648426 -0.004871048934 0.046572987907 0.348017742874 0.202056639971\n" " 0.879887627395 0.373099930807 0.649713932179 -0.153463590375 0.381775351795 0.110186767731\n" " 0.363794442257 0.298777744612 -0.021734587290 -0.052550610965 0.335875585916 0.064547743479\n" " 0.140096726529 -0.924610879301 -1.860437433134 0.949493319446 0.146687236468 -0.989654088355\n" " 0.042562039477 -0.455102584336 1.740659313641 0.423881871378 0.013082339937 -0.289820583737\n" "#","\n" " Rh DZVP-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 3.902721449032 0.016652865171 -0.068138878878 -0.008699428728 -0.059391469214 -0.112417659954 -0.059777116284 -0.003558664914\n" " 1.999830271997 -0.133395648426 -0.004871048934 0.046572987907 0.041960437254 0.348017742874 0.202056639971 -0.044875919808\n" " 0.879887627395 0.373099930807 0.649713932179 -0.153463590375 0.518188755943 0.381775351795 0.110186767731 0.283349273890\n" " 0.363794442257 0.298777744612 -0.021734587290 -0.052550610965 -0.216591015187 0.335875585916 0.064547743479 1.043919000870\n" " 0.140096726529 -0.924610879301 -1.860437433134 0.949493319446 -0.898213733147 0.146687236468 -0.989654088355 -0.791074751670\n" " 0.042562039477 -0.455102584336 1.740659313641 0.423881871378 1.173029461392 0.013082339937 -0.289820583737 -0.082082714309\n" "#","\n" " Pd SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q18\n" " 1\n" " 2 0 2 6 1 1 1\n" " 3.408675573589 -0.132466784026 -0.567545309589 -0.237012042169\n" " 3.102531722049 -0.437179496952 0.553597861423 0.281832849168\n" " 1.644492988513 0.691818466230 0.309106812808 0.110086701020\n" " 0.791839035568 0.350166504373 0.314239136372 0.167791703969\n" " 0.316235520337 0.074477347669 0.070008169012 0.139346360820\n" " 0.109243742847 -0.009869037755 -0.003111197582 0.062460911300\n" "#","\n" " Pd DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q18\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 3.408675573589 -0.132466784026 0.029290454237 -0.567545309589 0.092784274333 -0.237012042169 0.095368996052 -0.073961706459\n" " 3.102531722049 -0.437179496952 0.192782667373 0.553597861423 -0.071388535306 0.281832849168 -0.080649769787 0.103257171864\n" " 1.644492988513 0.691818466230 -0.427625425484 0.309106812808 -0.179050519933 0.110086701020 -0.295200859905 -0.351204999462\n" " 0.791839035568 0.350166504373 -0.357653431542 0.314239136372 -0.049934153069 0.167791703969 0.018285464999 -0.414552037766\n" " 0.316235520337 0.074477347669 0.052946309434 0.070008169012 0.231812779555 0.139346360820 -0.027457577038 -0.637088708585\n" " 0.109243742847 -0.009869037755 1.328390548434 -0.003111197582 0.958384247940 0.062460911300 1.416457521209 1.171833433651\n" "#","\n" " Ag SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 2 5 1 1 1\n" " 2.586709178255 0.043754600978 0.022644943791 -0.228119986020\n" " 1.295159890890 -0.065091062805 -0.041727270135 -0.411112871153\n" " 0.553039826122 -0.405167335465 -0.158228872130 -0.391768462286\n" " 0.211183058137 0.497578418798 0.484453657192 -0.227577654035\n" " 0.062847168062 0.619659047740 0.747373652696 -0.034845530428\n" "#","\n" " Ag DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 3 5 2 2 2 1\n" " 2.586709178255 0.043754600978 0.016002004018 0.022644943791 0.005366630333 -0.228119986020 -0.065708005966 0.049544247949\n" " 1.295159890890 -0.065091062805 -0.036550568555 -0.041727270135 0.118122315157 -0.411112871153 -0.164499674965 -0.230239586867\n" " 0.553039826122 -0.405167335465 1.349533052863 -0.158228872130 0.689957680364 -0.391768462286 -0.083405899269 -0.501645626428\n" " 0.211183058137 0.497578418798 -2.535842013811 0.484453657192 -1.573396135858 -0.227577654035 -0.038684987758 -0.563865046243\n" " 0.062847168062 0.619659047740 1.655664881614 0.747373652696 1.108931560435 -0.034845530428 1.073281933345 0.515376673117\n" "#","\n" " Cd SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 2 5 1 1 1\n" " 2.617301292227 0.056942862843 0.032277317911 -0.270406154064\n" " 1.315617684053 -0.111910427538 -0.096634842893 -0.407839310946\n" " 0.573375899853 -0.420173785813 -0.083107933622 -0.363233448773\n" " 0.222222213763 0.564376116618 0.419549254990 -0.168907403589\n" " 0.076307136525 0.789967059806 0.795089873672 -0.013172843723\n" "#","\n" " Cd DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 3 5 2 2 2 1\n" " 2.617301292227 0.056942862843 0.085229465042 0.032277317911 0.051510843904 -0.270406154064 -0.064920306950 -0.038770557595\n" " 1.315617684053 -0.111910427538 -0.202708060768 -0.096634842893 -0.059783928261 -0.407839310946 -0.152553100915 -0.110107626346\n" " 0.573375899853 -0.420173785813 1.542506765787 -0.083107933622 0.615455610766 -0.363233448773 0.032121836723 -0.034014284171\n" " 0.222222213763 0.564376116618 -2.827046600082 0.419549254990 -1.767302700397 -0.168907403589 -0.117391708980 -0.107254575233\n" " 0.076307136525 0.789967059806 1.744522478935 0.795089873672 1.158998093237 -0.013172843723 1.045519107194 1.059683456620\n" "#","\n" " In SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 2 6 1 1 1\n" " 3.101675464995 -0.014756989563 -0.002337235001 0.245121261683\n" " 1.829866249849 -0.064345448008 0.031433449222 0.432609058860\n" " 0.898324196118 0.435246205245 -0.178879364380 0.486649088749\n" " 0.389454004688 -0.080147974732 0.140416923228 0.288251501897\n" " 0.162701041351 -0.728191656411 0.548122424076 0.057468890352\n" " 0.059412871673 -0.313235936982 0.384462238049 -0.000258770565\n" "#","\n" " In DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 3.101675464995 -0.014756989563 -0.110029580336 -0.002337235001 0.052839464904 0.245121261683 -0.012257945606 0.018888332958\n" " 1.829866249849 -0.064345448008 0.153222489077 0.031433449222 -0.110752586447 0.432609058860 -0.110028720800 -0.034470276859\n" " 0.898324196118 0.435246205245 0.391315648506 -0.178879364380 -0.100516978998 0.486649088749 -0.199975755292 0.113987435924\n" " 0.389454004688 -0.080147974732 0.337603965479 0.140416923228 0.023776328126 0.288251501897 0.335339132093 0.644348565644\n" " 0.162701041351 -0.728191656411 -1.893798269373 0.548122424076 1.285364410462 0.057468890352 0.399314422381 0.277069768884\n" " 0.059412871673 -0.313235936982 1.933683990690 0.384462238049 -1.445573560596 -0.000258770565 0.813978718300 0.799646050773\n" "#","\n" " Sn SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 1 5 1 1\n" " 0.666669575074 0.689214482698 0.249601611539\n" " 0.486831392324 -0.512955759145 -0.282734426066\n" " 0.172775679838 -0.598032924010 -0.235164953470\n" " 0.065536149861 -0.215612744096 -0.261775353331\n" " 0.063643963946 0.056968014830 0.117722874377\n" "#","\n" " Sn DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 2 5 2 2 1\n" " 0.666669575074 0.689214482698 0.597390157534 0.249601611539 0.315252873428 0.457406998777\n" " 0.486831392324 -0.512955759145 -0.578949723335 -0.282734426066 -0.456284996504 -0.671314814330\n" " 0.172775679838 -0.598032924010 -0.232486513252 -0.235164953470 0.160480606525 -0.579588972796\n" " 0.065536149861 -0.215612744096 -1.308667699314 -0.261775353331 -1.088783079841 -1.650667611807\n" " 0.063643963946 0.056968014830 2.152315008945 0.117722874377 1.400518346191 0.726312420432\n" "#","\n" " Sb SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 1 5 1 1\n" " 0.757214368696 0.691593689520 0.756051462053\n" " 0.576116222147 -0.351217469046 -0.792348307348\n" " 0.244349272369 -0.615740163850 -0.378296806004\n" " 0.160329448814 -0.264402217378 -0.611128127466\n" " 0.073465983327 -0.171357973436 -0.255229944153\n" "#","\n" " Sb DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 2 5 2 2 1\n" " 0.757214368696 0.691593689520 1.088920140322 0.756051462053 0.641112817519 0.801626688859\n" " 0.576116222147 -0.351217469046 -0.822676611872 -0.792348307348 -0.692298068143 -0.889703632274\n" " 0.244349272369 -0.615740163850 0.211516912099 -0.378296806004 -0.178293615513 -1.240429938237\n" " 0.160329448814 -0.264402217378 -1.715750005616 -0.611128127466 -0.751513283235 -2.058418758569\n" " 0.073465983327 -0.171357973436 2.700437428872 -0.255229944153 1.854777651762 0.223525953909\n" "#","\n" " Te SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 1 5 1 1\n" " 0.871170553457 -0.768209530501 -0.201075823729\n" " 0.666552751461 0.368144626623 0.204460083751\n" " 0.260565380434 0.833378133558 0.154271149685\n" " 0.171876990300 0.191335229653 0.113448742480\n" " 0.082233548720 0.215694921905 0.106354644586\n" "#","\n" " Te DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 2 5 2 2 1\n" " 0.871170553457 -0.768209530501 0.791359979104 -0.201075823729 0.531876807227 0.753248997934\n" " 0.666552751461 0.368144626623 -0.650859183208 0.204460083751 -0.682761765123 -0.946881734404\n" " 0.260565380434 0.833378133558 0.702283405156 0.154271149685 0.282705036438 -0.783009060844\n" " 0.171876990300 0.191335229653 -1.929360042093 0.113448742480 -0.665024191612 -1.602503279568\n" " 0.082233548720 0.215694921905 2.377910783672 0.106354644586 1.691098378374 0.055752014401\n" "#","\n" " I SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 1 5 1 1\n" " 0.966172693776 -0.472463189351 -0.431253473002\n" " 0.828885570527 -0.046174838614 0.405448133098\n" " 0.367159310806 0.674866028669 0.154408288042\n" " 0.201369106832 0.441846190432 0.307131088797\n" " 0.083015071126 0.147700751496 0.151452356751\n" "#","\n" " I DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 2 5 2 2 1\n" " 0.966172693776 -0.472463189351 1.555822203873 -0.431253473002 0.437499136144 0.790909981479\n" " 0.828885570527 -0.046174838614 -0.405245398304 0.405448133098 -0.360836974979 -0.706739130323\n" " 0.367159310806 0.674866028669 0.837346281042 0.154408288042 -0.426955819328 -1.146102256372\n" " 0.201369106832 0.441846190432 -2.170714561688 0.307131088797 -0.142879089720 -1.473453298743\n" " 0.083015071126 0.147700751496 2.099200395478 0.151452356751 1.946428231727 -0.517749701272\n" "#","\n" " Xe SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 1 5 1 1\n" " 1.060135338393 0.595086879307 -0.455562867881\n" " 0.666666004946 -0.333303102706 0.584858919323\n" " 0.277808854324 -0.853453515069 0.556607088551\n" " 0.171463992710 0.008584975685 0.284690856924\n" " 0.096899106515 -0.148160183031 0.213921134179\n" "#","\n" " Xe DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 2 5 2 2 1\n" " 1.060135338393 0.595086879307 1.159498326834 -0.455562867881 0.341641892911 0.461999932788\n" " 0.666666004946 -0.333303102706 -0.700514321869 0.584858919323 -0.637621905684 -0.861718349639\n" " 0.277808854324 -0.853453515069 0.843332917012 0.556607088551 0.421389646121 -0.690146245180\n" " 0.171463992710 0.008584975685 -2.438781702578 0.284690856924 -1.036777647654 -2.060830843444\n" " 0.096899106515 -0.148160183031 2.027210394018 0.213921134179 2.018039151988 0.570372103567\n" "#","\n" " Cs SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 1 6 2 1\n" " 1.000865707027 0.280322352634 0.098179355219 -0.360207388692\n" " 0.913482115012 0.358344637273 -0.098255007626 -0.016242892143\n" " 0.666653730505 -0.489376812003 0.118067108510 0.500190150119\n" " 0.332485858625 -0.512310150761 -0.480608369395 0.336498234976\n" " 0.149836705312 -0.141743262814 0.078136295233 0.344475837226\n" " 0.026691284164 0.280660075501 1.173263741421 0.011885241412\n" "#","\n" " Cs DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 2 6 3 2 1\n" " 1.000865707027 0.280322352634 0.098179355219 0.031141586311 -0.360207388692 0.002335867187 0.147697150754\n" " 0.913482115012 0.358344637273 -0.098255007626 0.330103917383 -0.016242892143 0.084765416923 0.071945154769\n" " 0.666653730505 -0.489376812003 0.118067108510 -0.659442112080 0.500190150119 -0.132236014043 -0.240447290500\n" " 0.332485858625 -0.512310150761 -0.480608369395 3.043138449037 0.336498234976 -0.036101912675 -0.535530906149\n" " 0.149836705312 -0.141743262814 0.078136295233 -3.444995658743 0.344475837226 -0.076534707873 -0.669534557468\n" " 0.026691284164 0.280660075501 1.173263741421 1.178266960491 0.011885241412 1.106818006414 0.388389576072\n" "#","\n" " Ba SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 1 6 2 1\n" " 1.099107387393 -0.265977603953 0.133167313532 -0.076120521522\n" " 1.042415611430 -0.548867124949 0.303553076384 0.581707053986\n" " 0.923815583300 0.534778251294 -0.187596947384 -0.513377720928\n" " 0.409515187180 0.587584269233 -0.829784858376 -0.199996660495\n" " 0.166000524554 0.112796348364 0.080177822791 -0.129413972483\n" " 0.038868137908 -0.097599163432 1.388751874990 0.001685949311\n" "#","\n" " Ba DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 2 6 3 2 1\n" " 1.099107387393 -0.265977603953 0.133167313532 0.290876128104 -0.076120521522 0.156054210447 0.457091203328\n" " 1.042415611430 -0.548867124949 0.303553076384 -0.457720153751 0.581707053986 0.034898462239 -0.051884397940\n" " 0.923815583300 0.534778251294 -0.187596947384 0.955681723101 -0.513377720928 -0.112603657198 -0.325084641003\n" " 0.409515187180 0.587584269233 -0.829784858376 -3.839746465310 -0.199996660495 -0.398760799348 -1.103831466587\n" " 0.166000524554 0.112796348364 0.080177822791 3.559104747841 -0.129413972483 0.013035859628 -1.307997155338\n" " 0.038868137908 -0.097599163432 1.388751874990 -1.406284723707 0.001685949311 0.806788017038 -0.503750948349\n" "#","\n" " Hf SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 2 6 2 1 1\n" " 2.671196497548 0.788939427855 0.166407997203 -0.301974408389 -0.047796823905\n" " 2.597200237263 -0.135944993309 0.121000538909 0.293385766135 0.040716807355\n" " 1.091215248046 -0.911502384031 -0.450097538431 0.044171452367 0.281226003531\n" " 0.482780902120 -0.403765732131 -0.527116158052 0.050912843752 0.563159769901\n" " 0.184203719686 -0.116982787286 0.367518491637 0.006790589259 0.537885417612\n" " 0.060257634881 -0.118019349325 0.917540530320 -0.000081217891 0.138650274135\n" "#","\n" " Hf DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 2.671196497548 0.788939427855 0.166407997203 -0.808044747643 -0.301974408389 0.200618001886 -0.047796823905 -0.576358120326 0.136965103461\n" " 2.597200237263 -0.135944993309 0.121000538909 0.502710504170 0.293385766135 -0.131814094303 0.040716807355 0.121047786291 -0.101127257056\n" " 1.091215248046 -0.911502384031 -0.450097538431 -0.571536407023 0.044171452367 -0.119671510085 0.281226003531 -0.260083157654 -0.239844496668\n" " 0.482780902120 -0.403765732131 -0.527116158052 1.567869205746 0.050912843752 -0.209054741982 0.563159769901 -0.061407406614 -0.448266650992\n" " 0.184203719686 -0.116982787286 0.367518491637 -3.196670125867 0.006790589259 -0.050569947887 0.537885417612 -0.642967474054 -0.402343230211\n" " 0.060257634881 -0.118019349325 0.917540530320 1.895484387467 -0.000081217891 -0.947169815010 0.138650274135 0.976981432228 1.144416860469\n" "#","\n" " Ta SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 2 6 2 1 1\n" " 2.946055777701 0.481243902001 -0.039175358113 0.388448534264 -0.093115240785\n" " 2.777081321651 -0.000792758352 0.308251777475 -0.366342974440 0.111690390706\n" " 1.000199049661 -0.863712437729 -0.568363162228 -0.156083711841 0.225370492392\n" " 0.459026245077 -0.356339626223 -0.406417265286 -0.108217872947 0.293416264804\n" " 0.201289293145 -0.023090355735 0.248901497428 -0.015667426694 0.298377389246\n" " 0.065633603795 -0.015350833125 0.839900958846 0.000163546036 0.101787930127\n" "#","\n" " Ta DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 2.946055777701 0.481243902001 -0.039175358113 -0.219388739489 0.388448534264 -0.107938517042 -0.093115240785 -0.050799537716 0.071927166904\n" " 2.777081321651 -0.000792758352 0.308251777475 0.403285867163 -0.366342974440 0.047342767090 0.111690390706 0.051196996245 -0.015240206083\n" " 1.000199049661 -0.863712437729 -0.568363162228 -0.077743160108 -0.156083711841 -0.041740097950 0.225370492392 -0.295019586907 -0.470524112950\n" " 0.459026245077 -0.356339626223 -0.406417265286 1.717095624131 -0.108217872947 0.095987055932 0.293416264804 -0.181398283746 -0.645020041639\n" " 0.201289293145 -0.023090355735 0.248901497428 -3.203010923833 -0.015667426694 0.541275844761 0.298377389246 -0.083413162524 -0.819326850350\n" " 0.065633603795 -0.015350833125 0.839900958846 2.207786277506 0.000163546036 1.013357766701 0.101787930127 1.239644127245 0.794184603929\n" "#","\n" " W SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q14\n" " 1\n" " 2 0 2 6 2 1 1\n" " 3.103253876757 0.441154908462 -0.046848871737 0.516608286752 -0.104347730230\n" " 2.893835485057 0.301691972314 0.288483139662 -0.467840628709 0.135920880880\n" " 1.106150599362 -1.218290751007 -0.497581763775 -0.270577331119 0.396440765199\n" " 0.501100356736 -0.518231686854 -0.399441949193 -0.201524408230 0.551980290722\n" " 0.214446586103 -0.084224251837 0.243845988221 -0.022741809925 0.520355492616\n" " 0.074662878487 -0.194908755488 0.767604001481 0.002782169859 0.166409595366\n" "#","\n" " W DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q14\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 3.103253876757 0.441154908462 -0.046848871737 0.061298236069 0.516608286752 -0.857438192378 -0.104347730230 0.147146022027 0.063493654940\n" " 2.893835485057 0.301691972314 0.288483139662 0.240334881954 -0.467840628709 0.847145939975 0.135920880880 -0.154506508676 -0.017539591740\n" " 1.106150599362 -1.218290751007 -0.497581763775 -0.484396153573 -0.270577331119 -0.102821415305 0.396440765199 -0.271607294299 -0.299829989865\n" " 0.501100356736 -0.518231686854 -0.399441949193 1.821350211035 -0.201524408230 0.202413605224 0.551980290722 -0.086061740572 -0.841712144112\n" " 0.214446586103 -0.084224251837 0.243845988221 -3.376374627548 -0.022741809925 0.726346128053 0.520355492616 -0.074473115136 -0.801669560536\n" " 0.074662878487 -0.194908755488 0.767604001481 1.871608065172 0.002782169859 1.071006452855 0.166409595366 1.370657399699 0.359000011573\n" "#","\n" " Re SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q15\n" " 1\n" " 2 0 2 6 2 1 1\n" " 3.240620484285 0.518163100285 -0.250238063014 0.468480577212 -0.072782318249\n" " 2.835126642764 0.195266488444 0.421668475444 -0.390221082301 0.122612230842\n" " 1.164528911859 -1.218515127381 -0.468452769005 -0.460013931050 0.480667297031\n" " 0.530722413547 -0.526678086213 -0.480290161831 -0.325605406180 0.649752314300\n" " 0.234483312957 0.013465891784 0.546638137882 -0.033295571228 0.547928673428\n" " 0.080543361521 0.073473765653 1.175883886226 0.000112993288 0.124811170239\n" "#","\n" " Re DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q15\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 3.240620484285 0.518163100285 -0.250238063014 -0.143105506392 0.468480577212 -0.321600051025 -0.072782318249 0.025724531725 -0.094952415125\n" " 2.835126642764 0.195266488444 0.421668475444 0.282261176246 -0.390221082301 0.399779900733 0.122612230842 -0.054892892051 0.167119769419\n" " 1.164528911859 -1.218515127381 -0.468452769005 -0.091681345615 -0.460013931050 -0.473028481025 0.480667297031 -0.324411259630 -0.392227058286\n" " 0.530722413547 -0.526678086213 -0.480290161831 1.803552484337 -0.325605406180 0.144355698544 0.649752314300 -0.308280195070 -0.743838252325\n" " 0.234483312957 0.013465891784 0.546638137882 -3.327790605170 -0.033295571228 0.634911741065 0.547928673428 -0.127571404930 -1.130445599596\n" " 0.080543361521 0.073473765653 1.175883886226 2.036392104934 0.000112993288 0.654149241066 0.124811170239 1.436351247342 0.187517650202\n" "#","\n" " Os SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q16\n" " 1\n" " 2 0 2 6 2 1 1\n" " 3.254044521240 0.750520917538 -0.143104881416 0.300026803534 0.074118403382\n" " 2.913080457815 -0.151830818511 0.445036489078 -0.259358262119 -0.115497320573\n" " 1.267677044450 -0.946576386912 -0.597290651826 -0.221193553941 -0.384061295904\n" " 0.604328817602 -0.387028536076 -0.626533321263 -0.169922484236 -0.478648993701\n" " 0.281958732679 -0.114632827845 0.617675737134 -0.022924623249 -0.460410219053\n" " 0.105080883429 -0.043141212439 0.420830468078 0.003128164174 -0.078890551925\n" "#","\n" " Os DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q16\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 3.254044521240 0.750520917538 -0.143104881416 -0.535872399061 0.300026803534 -0.211083191310 0.074118403382 0.126612739775 0.055180357207\n" " 2.913080457815 -0.151830818511 0.445036489078 0.515111350010 -0.259358262119 0.229325744297 -0.115497320573 -0.133462796701 -0.050797865115\n" " 1.267677044450 -0.946576386912 -0.597290651826 -0.260044026215 -0.221193553941 -0.306853849304 -0.384061295904 -0.172895146469 -0.094606319061\n" " 0.604328817602 -0.387028536076 -0.626533321263 2.036801058213 -0.169922484236 -0.097257714947 -0.478648993701 -0.020295601352 -0.619031243983\n" " 0.281958732679 -0.114632827845 0.617675737134 -3.120177167686 -0.022924623249 0.777630448466 -0.460410219053 0.083516044344 -0.782263365247\n" " 0.105080883429 -0.043141212439 0.420830468078 2.188492676789 0.003128164174 0.996792107810 -0.078890551925 1.136520641989 -0.218817489272\n" "#","\n" " Ir SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q17\n" " 1\n" " 2 0 2 6 2 1 1\n" " 3.382588893137 0.763880845384 0.045942912052 0.377410965587 -0.045848645796\n" " 2.784159868873 -0.292040459450 0.216107018572 -0.332679361082 0.111589415592\n" " 1.210222778222 -0.909572071077 -0.662794901842 -0.436015494968 0.421660006206\n" " 0.538964109721 -0.253085528911 -0.351696141574 -0.249715223969 0.494349511683\n" " 0.221744781815 -0.072390522439 0.495615757119 -0.017455807910 0.370178722395\n" " 0.076331555777 -0.086622720340 0.741983451061 -0.000390256599 0.086694983507\n" "#","\n" " Ir DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q17\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 3.382588893137 0.763880845384 0.045942912052 -0.263001102796 0.377410965587 -0.244073478822 -0.045848645796 0.080634315236 0.043335746927\n" " 2.784159868873 -0.292040459450 0.216107018572 0.479096801070 -0.332679361082 0.284264073291 0.111589415592 -0.130581842872 -0.027515178683\n" " 1.210222778222 -0.909572071077 -0.662794901842 -0.247236645375 -0.436015494968 -0.355790158310 0.421660006206 -0.303249401129 -0.249112788977\n" " 0.538964109721 -0.253085528911 -0.351696141574 1.693017503277 -0.249715223969 0.296278894300 0.494349511683 -0.146179963439 -0.712777874450\n" " 0.221744781815 -0.072390522439 0.495615757119 -3.248000084180 -0.017455807910 0.597905270423 0.370178722395 -0.212963343957 -0.608411042049\n" " 0.076331555777 -0.086622720340 0.741983451061 1.914284024079 -0.000390256599 0.721347075950 0.086694983507 1.131902611500 0.702894953816\n" "#","\n" " Pt SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q18\n" " 1\n" " 2 0 2 6 2 1 1\n" " 3.630667770866 -0.159789658749 -0.051717884453 0.538256464339 -0.235370873672\n" " 3.114659085953 0.706153230701 0.409305333723 -0.272066595039 0.216340904150\n" " 1.999980602577 -0.571771619750 -0.410633416904 -0.529494089441 0.129334517594\n" " 0.885339761910 -0.081706194543 -0.389005427246 -0.778436218941 0.364806321954\n" " 0.330796251617 -0.114509254013 0.079357268588 -0.160188783181 0.322200075207\n" " 0.105770091411 -0.422769859471 0.768211167014 0.009487463222 0.101113260398\n" "#","\n" " Pt DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q18\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 3.630667770866 -0.159789658749 -0.051717884453 0.306450339788 0.538256464339 -0.065391881766 -0.235370873672 0.116835554957 0.047374313928\n" " 3.114659085953 0.706153230701 0.409305333723 -0.004265278861 -0.272066595039 0.095535920231 0.216340904150 -0.069230936472 -0.086321928611\n" " 1.999980602577 -0.571771619750 -0.410633416904 -0.325808096224 -0.529494089441 -0.142896827794 0.129334517594 -0.143174497742 -0.045559578405\n" " 0.885339761910 -0.081706194543 -0.389005427246 2.249070845144 -0.778436218941 -0.282985948216 0.364806321954 -0.296713078924 -0.269438595683\n" " 0.330796251617 -0.114509254013 0.079357268588 -3.545365684090 -0.160188783181 0.355152674354 0.322200075207 -0.091262909891 -0.826716259834\n" " 0.105770091411 -0.422769859471 0.768211167014 1.739828578507 0.009487463222 1.072406293162 0.101113260398 0.921513114926 0.798799196421\n" "#","\n" " Au SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 2 5 1 1 1\n" " 2.950008433436 0.043352289298 0.027243676590 -0.013694544955\n" " 1.563056721867 -0.007387713167 0.010297865642 0.393434199831\n" " 0.666663784909 -0.527617143816 -0.144512389068 0.499419616649\n" " 0.251083343925 0.504357857018 0.133984006194 0.342848487787\n" " 0.081714167287 0.754614789542 0.955899672482 0.072643323717\n" "#","\n" " Au DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 3 5 2 2 2 1\n" " 2.950008433436 0.043352289298 0.131563039441 0.027243676590 0.028420586704 -0.013694544955 -0.004579045037 -0.004506137994\n" " 1.563056721867 -0.007387713167 -0.273187489232 0.010297865642 -0.293415713813 0.393434199831 -0.180469448036 -0.160912550000\n" " 0.666663784909 -0.527617143816 1.676640340285 -0.144512389068 0.816838276799 0.499419616649 -0.108498062902 -0.120663084497\n" " 0.251083343925 0.504357857018 -2.954078498545 0.133984006194 -1.870657920681 0.342848487787 -0.166963798876 -0.308972159083\n" " 0.081714167287 0.754614789542 1.757201273778 0.955899672482 1.065823745725 0.072643323717 1.125505465534 1.113838074084\n" "#","\n" " Hg SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 2 6 1 1 1\n" " 3.031517109734 -0.000773276442 -0.035104188311 -0.051519431610\n" " 1.999949750084 -0.127545432316 0.112459425109 0.245745995267\n" " 0.968505371291 0.467348942725 -0.270433349168 0.344642941759\n" " 0.443215909283 0.041435964338 0.012885629971 0.274191104401\n" " 0.197907885691 -0.613050351354 0.562923305773 0.133463525187\n" " 0.078429867482 -0.478543703910 0.626349238816 0.016313913539\n" "#","\n" " Hg DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 3.031517109734 -0.000773276442 0.142001377433 -0.035104188311 -0.090931506623 -0.051519431610 0.008323885654 0.001599032324\n" " 1.999949750084 -0.127545432316 -0.280482979589 0.112459425109 0.162444892253 0.245745995267 -0.053441689967 0.043884187965\n" " 0.968505371291 0.467348942725 0.098625459472 -0.270433349168 0.029548333852 0.344642941759 -0.165877240510 -0.177253996973\n" " 0.443215909283 0.041435964338 -1.223462696050 0.012885629971 0.581078127814 0.274191104401 0.080323576326 -0.478266521156\n" " 0.197907885691 -0.613050351354 3.053372335969 0.562923305773 -2.004214126133 0.133463525187 -0.144762593434 -0.613795411840\n" " 0.078429867482 -0.478543703910 -2.173525587081 0.626349238816 1.450865733492 0.016313913539 1.183407428870 0.788269658688\n" "#","\n" " Tl SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 2 6 1 1 1\n" " 3.381004006201 -0.012728024519 -0.016321000960 -0.053146025142\n" " 1.995904628767 -0.125438487741 0.089582033082 0.335647454889\n" " 0.933877613856 0.654386378507 -0.217643347249 0.449765059425\n" " 0.399454518437 -0.261927153680 0.120847730197 0.311198161018\n" " 0.159704350468 -0.832380709805 0.521905432003 0.079298892465\n" " 0.061648317122 -0.296535560045 0.504618443314 0.000172821470\n" "#","\n" " Tl DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 3.381004006201 -0.012728024519 -0.061982942976 -0.016321000960 0.062772243005 -0.053146025142 0.033620187298 -0.003552704832\n" " 1.995904628767 -0.125438487741 0.232903517659 0.089582033082 -0.085940512856 0.335647454889 -0.143867909630 -0.007253615821\n" " 0.933877613856 0.654386378507 0.293870645694 -0.217643347249 -0.043458296138 0.449765059425 -0.230549240854 0.070845906277\n" " 0.399454518437 -0.261927153680 0.253865535097 0.120847730197 -0.072921411535 0.311198161018 0.089679875757 0.337468890558\n" " 0.159704350468 -0.832380709805 -1.750489239268 0.521905432003 1.361409731000 0.079298892465 0.093223456445 0.055414449864\n" " 0.061648317122 -0.296535560045 1.812842163522 0.504618443314 -1.338528342478 0.000172821470 0.951780949164 1.007671535938\n" "#","\n" " Pb SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 1 5 1 1\n" " 1.933597551820 -0.128503343993 0.015280202292\n" " 0.981424884833 0.574812594694 -0.134233849467\n" " 0.222223023415 -0.960047108285 0.502933226160\n" " 0.077758928722 -0.206626081460 0.243024445565\n" " 0.073967768161 -0.082212261416 0.131891977459\n" "#","\n" " Pb DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 2 5 2 2 1\n" " 1.933597551820 -0.128503343993 -0.101796893236 0.015280202292 0.005350345202 0.014172606616\n" " 0.981424884833 0.574812594694 0.383708445593 -0.134233849467 0.075210282932 -0.095091389111\n" " 0.222223023415 -0.960047108285 -0.673075164196 0.502933226160 -0.366898195819 0.404788663351\n" " 0.077758928722 -0.206626081460 -0.887877388873 0.243024445565 -1.159690406979 -0.640460683863\n" " 0.073967768161 -0.082212261416 1.917996276605 0.131891977459 1.651684865211 1.791004946570\n" "#","\n" " Bi SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 1 5 1 1\n" " 1.666928293168 -0.433606016760 -0.092396269342\n" " 1.317941720436 0.723433454454 0.184381669404\n" " 0.222221383065 -0.715303457579 -0.507231634301\n" " 0.074524438950 -0.308379410009 -0.421377693158\n" " 0.066725427306 0.159245921554 0.106621540317\n" "#","\n" " Bi DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 2 5 2 2 1\n" " 1.666928293168 -0.433606016760 -0.100663867810 -0.092396269342 -0.108190299502 -0.195956091275\n" " 1.317941720436 0.723433454454 0.259612627134 0.184381669404 0.210739707604 0.351618767590\n" " 0.222221383065 -0.715303457579 -0.216478402471 -0.507231634301 -0.568218339722 -1.047717462114\n" " 0.074524438950 -0.308379410009 -1.423645113253 -0.421377693158 -0.757828317889 -1.887710553530\n" " 0.066725427306 0.159245921554 2.308274018558 0.106621540317 1.788226073856 0.443921215549\n" "#","\n" " Po SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 1 5 1 1\n" " 1.757750856683 -0.224044332601 -0.053062093035\n" " 1.245376491921 0.572355818018 0.195354776138\n" " 0.251860493510 -0.863597717984 -0.839838825812\n" " 0.087993894799 -0.286569207007 -0.307002699297\n" " 0.087955184861 0.098257897619 -0.203109314513\n" "#","\n" " Po DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 2 5 2 2 1\n" " 1.757750856683 -0.224044332601 -0.135012487173 -0.053062093035 -0.021231103721 -0.096055785490\n" " 1.245376491921 0.572355818018 0.332752073309 0.195354776138 0.081960076684 0.254315976726\n" " 0.251860493510 -0.863597717984 -0.473417673148 -0.839838825812 -0.313733392241 -0.969368508973\n" " 0.087993894799 -0.286569207007 -1.276188389904 -0.307002699297 -0.822258321101 -1.683509583898\n" " 0.087955184861 0.098257897619 1.876429081086 -0.203109314513 1.692783549882 0.775369779849\n" "#","\n" " At SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 1 5 1 1\n" " 1.796641038213 -0.363075778132 -0.119884096868\n" " 1.378396886358 0.702535890722 0.281487205121\n" " 0.332155278101 -0.571059806679 -0.483364756316\n" " 0.150379247357 -0.338513795954 -0.533191703362\n" " 0.059913588731 -0.008356077866 -0.164154832840\n" "#","\n" " At DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 2 5 2 2 1\n" " 1.796641038213 -0.363075778132 -1.100370829977 -0.119884096868 -0.250626278132 -0.464474892145\n" " 1.378396886358 0.702535890722 -1.057174398279 0.281487205121 0.561700422906 0.955620810236\n" " 0.332155278101 -0.571059806679 0.447996190508 -0.483364756316 -1.242559252539 -1.899306426919\n" " 0.150379247357 -0.338513795954 -1.273313528437 -0.533191703362 0.441233871549 -1.551331120159\n" " 0.059913588731 -0.008356077866 0.740426167051 -0.164154832840 0.937688301921 -0.982495907237\n" "#","\n" " Rn SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 1 5 1 1\n" " 2.000005663002 -0.442608171766 -0.136991011529\n" " 1.522474413760 0.852282073224 0.312749617939\n" " 0.319589540831 -0.907143180970 -0.775828387512\n" " 0.124013091191 -0.222277238353 -0.204098521582\n" " 0.113270499507 -0.001928995329 -0.288853228632\n" "#","\n" " Rn DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 2 5 2 2 1\n" " 2.000005663002 -0.442608171766 -0.511614938408 -0.136991011529 -0.063901785194 -0.186151960320\n" " 1.522474413760 0.852282073224 -0.536614916033 0.312749617939 0.154086890384 0.369270825531\n" " 0.319589540831 -0.907143180970 -0.390801321298 -0.775828387512 -0.485164655715 -1.000515166114\n" " 0.124013091191 -0.222277238353 -1.541429072147 -0.204098521582 -1.116124046015 -1.713700191874\n" " 0.113270499507 -0.001928995329 1.908801729636 -0.288853228632 1.721625954410 0.927072017361\n" "#","\n" " U DZVP-MOLOPT-GTH-q14\n" " 1\n" " 6 0 4 7 3 3 2 2 1 6s 7s 8s 6p 7p 8p 6d 7d 5f 6f 5g\n" " 2.970404051267 -8.613286991729 -4.847218644580 -0.094448304725 2.089613520508 -1.388690863894 -0.339032038879 -0.517917661294 -0.108712988266 0.630053678940 -0.328083139683 0.193812038517\n" " 2.837409896206 9.359917338956 5.295013384216 0.080503840695 -2.330831226482 1.591366466533 -0.297639904371 0.575541916820 0.134339314945 0.077256524471 -0.136357555344 -0.096937116722\n" " 1.029287870466 -0.223393808655 -0.207730929575 0.170499084947 0.118073808224 -0.298526476737 -0.144235936067 -0.007051323571 -0.072924564853 0.798224117501 -0.044975575325 0.942045397086\n" " 0.447156512122 -1.138927348908 -1.085942892963 -0.128005768148 0.875430068610 -0.558080313712 0.020421937017 -0.328938941888 -0.022899936943 0.416776715909 0.084347995405 1.112468197028\n" " 0.224386023364 -0.475585548696 -0.147870903958 0.028006926300 0.257221846022 -0.186869197027 -0.068935950988 -0.436497768592 0.047774203203 0.269342903301 0.107901532632 0.049712666496\n" " 0.082082026090 -0.038412518166 1.206363318489 0.959404540206 -0.004940369038 1.337846156620 1.078056470699 -0.170128075474 1.023142281896 0.095618485831 0.591613653295 0.071150976147\n" " 0.048989649967 -0.161438730593 0.204614845616 0.064250249847 -0.040926507048 0.070410902066 0.151425801177 0.019870929957 0.031382006308 -0.029027116072 0.159595534158 -0.000586301554\n" "#"}; atomes_1.3.1/src/calc/cp2k/cp2k_basis.c0000664000175000017500000063422115212624223017231 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file cp2k_basis.c * @short CP2K basis set, as delivered with CP2K v9.1 * @author Sébastien Le Roux */ /* * This file: 'cp2k_basis.c' * * Contains: * - CP2K basis set, as delivered with CP2K v9.1 This file contains 3 tables: basis_elem -> the list of chemical elements basis_keys -> the list of keywords cp2k_basis -> finally the complete basis set */ #include "global.h" char * basis_elem[250]={"H", "O", "Si", "H", "H", "He", "He", "Li", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Cu", "Cu", "Cu", "Zn", "Br", "H", "H", "He", "He", "Li", "Li", "Be", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "H", "H", "He", "He", "Li", "Li", "Be", "Be", "B", "C", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "Si", "P", "S", "Cl", "Ar", "H", "H", "He", "He", "B", "C", "N", "O", "F", "Ne", "Al", "Si", "P", "S", "Cl", "Ar", "H", "H", "O", "F", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "H", "H", "H", "H", "H", "H", "He", "He", "Li", "Li", "Be", "Be", "B", "C", "C", "C", "N", "N", "O", "O", "O", "O", "F", "F", "Ne", "Ne", "Na", "Na", "Mg", "Mg", "Al", "Al", "Si", "Si", "Si", "P", "P", "S", "S", "Cl", "Ar", "K", "K", "Ca", "Sc", "Ti", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Ni", "Ni", "Ni", "Ni", "Cu", "Zn", "Zn", "Br", "Y", "Y", "Y", "Y", "Zr", "Zr", "Zr", "Zr", "Pt", "Pt", "Pt", "Pt", "H", "H", "H", "H", "He", "He", "Li", "Li", "Be", "Be", "B", "C", "N", "O", "O", "F", "Ne", "Na", "Mg", "Al", "Al", "Si", "Si", "P", "S", "Cl", "Ar", "K", "K", "Ti", "Ba", "H", "H", "C", "N", "O", "Mg", "Mg", "Mg", "Si", "P", "S", "Ca", "Au", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar"}; char * basis_keys[250]={"DZ-ANO", "DZ-ANO", "DZ-ANO", "DZV-ALL", "DZVP-ALL", "DZV-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-MONTREAL-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-MONTREAL-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-MONTREAL-ALL", "DZVP-ALL", "TZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZV-ALL-PADE", "DZVP-ALL-PADE", "DZV-ALL-PADE", "DZVP-ALL-PADE", "DZV-ALL-PADE", "DZVP-ALL-PADE", "DZV-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZV-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZV-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZV-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZV-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW-CONFINED", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW-CONFINED", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "TZV-ALL-PADE", "TZVP-ALL-PADE", "TZV-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "DZV-ALL-BLYP", "DZVP-ALL-BLYP", "TZVP-ALL-BLYP", "TZVP-ALL-BLYP", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "SZV-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE-CONFINED", "DZVP-GTH-PADE", "DZVP-GTH-PADE-CONFINED", "MAO-PRIM", "DZV-GTH-PADE", "DZVP-GTH-PADE", "DZV-GTH-PADE", "DZVP-GTH-PADE", "DZV-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE", "SZV-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE-CONFINED", "SZV-GTH-PADE", "DZVP-GTH-PADE", "SZV-GTH-PADE", "DZVP-GTH-PADE", "MAO-PRIM", "DZVP-GTH-PADE-CONFINED", "SZV-GTH-PADE", "DZVP-GTH-PADE", "SZV-GTH-PADE", "DZVP-GTH-PADE", "SZV-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE-q2", "DZVP-GTH-PADE", "DZVP-GTH-PADE-CONFINED", "SZV-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE-CONFINED", "SZV-GTH-PADE", "DZVP-GTH-PADE", "SZV-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE-CONFINED", "DZVP-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE-CONFINED", "DZV-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE", "SZV-GTH-PADE", "SZV-GTH-PADE-CONFINED", "DZV-GTH-PADE", "DZV-GTH-PADE-CONFINED", "DZV-GTH-PADE-q10", "DZV-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE-CONFINED", "DZVP-GTH-PADE", "SZV-GTH-PADE", "SZV-GTH-PADE-CONFINED", "DZV-GTH-PADE", "DZV-GTH-PADE-CONFINED", "SZV-GTH-PADE", "SZV-GTH-PADE-CONFINED", "DZV-GTH-PADE", "DZV-GTH-PADE-CONFINED", "SZV-GTH-PADE", "DZV-GTH-PADE", "SZV-GTH-PADE-CONFINED", "DZV-GTH-PADE-CONFINED", "DZV-GTH-BLYP", "DZV-GTH-BLYP-CONFINED", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP-CONFINED", "DZV-GTH-BLYP", "DZVP-GTH-BLYP", "DZV-GTH-BLYP", "DZVP-GTH-BLYP", "DZV-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP-CONFINED", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP-CONFINED", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP-CONFINED", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP-CONFINED", "DZV-GTH-BLYP", "SZV-GTH-BLYP", "DZV-GTH-PBE", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "DZV-GTH-PBE-q10-soft", "DZVP-GTH-PBE-q2", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "TZ-GTH", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP"}; char * cp2k_basis[250]={"\n" "H DZ-ANO\n" " 2\n" " 1 0 0 8 3\n" " 188.6144500000 0.0009639000 -0.0013119000 0.0024224000\n" " 28.2765960000 0.0074920000 -0.0103451000 0.0203382000\n" " 6.4248300000 0.0375954000 -0.0504953000 0.0896394000\n" " 1.8150410000 0.1433950000 -0.2073855000 0.4422907000\n" " 0.5910630000 0.3486363000 -0.4350885000 0.5757144000\n" " 0.2121490000 0.4382974000 -0.0247297000 -0.9802890000\n" " 0.0798910000 0.1651066000 0.3225260000 -0.6721538000\n" " 0.0279620000 0.0210229000 0.7072754000 1.1417685000\n" " 2 1 1 4 2\n" " 2.3050000000 0.1127902000 -0.2108688000\n" " 0.8067500000 0.4185075000 -0.5943796000\n" " 0.2823620000 0.4700077000 0.0896889000\n" " 0.0988270000 0.1826260000 0.8611634000\n" "#","\n" "O DZ-ANO\n" " 3\n" " 1 0 0 14 4\n" " 105374.9500000000 0.0000459000 -0.0000105000 0.0000090000 -0.0000109000\n" " 15679.2400000000 0.0003607000 -0.0000825000 0.0000705000 -0.0000822000\n" " 3534.5447000000 0.0019198000 -0.0004412000 0.0003757000 -0.0004675000\n" " 987.3651600000 0.0082067000 -0.0018864000 0.0016146000 -0.0018465000\n" " 315.9787500000 0.0297257000 -0.0069540000 0.0059340000 -0.0075585000\n" " 111.6542800000 0.0904558000 -0.0217208000 0.0187866000 -0.0210868000\n" " 42.6994510000 0.2174054000 -0.0568513000 0.0494683000 -0.0667511000\n" " 17.3955960000 0.3687657000 -0.1139635000 0.1030399000 -0.1093673000\n" " 7.4383090000 0.3372798000 -0.1620201000 0.1620586000 -0.2731431000\n" " 3.2228620000 0.0967505000 -0.0333800000 0.0009367000 0.2097137000\n" " 1.2538770000 0.0025674000 0.3655068000 -0.8224251000 1.2034807000\n" " 0.4951550000 0.0013746000 0.5520031000 -0.1017902000 -0.6774694000\n" " 0.1916650000 -0.0001410000 0.2236393000 0.4253939000 -1.4298840000\n" " 0.0670830000 0.0000683000 0.0065745000 0.6877028000 1.4891068000\n" " 2 1 1 9 3\n" " 200.0000000000 0.0008933000 -0.0008384000 0.0012618000\n" " 46.5333670000 0.0073690000 -0.0068491000 0.0111628000\n" " 14.6218090000 0.0349392000 -0.0328505000 0.0518316000\n" " 5.3130640000 0.1152985000 -0.1100060000 0.1978845000\n" " 2.1025250000 0.2583231000 -0.3135263000 0.5707652000\n" " 0.8502230000 0.3696231000 -0.3196011000 -0.1789291000\n" " 0.3375970000 0.3238789000 0.2217243000 -0.8982077000\n" " 0.1288920000 0.1467989000 0.5622616000 0.2666643000\n" " 0.0451120000 0.0336127000 0.3013251000 0.6258994000\n" " 3 2 2 4 2\n" " 3.7500000000 0.1284934000 -0.2182055000\n" " 1.3125000000 0.5211884000 -0.4817695000\n" " 0.4593750000 0.4345784000 0.1357595000\n" " 0.1607810000 0.1457409000 0.8297734000\n" "#","\n" "Si DZ-ANO\n" " 4\n" " 1 0 0 17 5\n" " 250095.9700000000 0.0000681500 -0.0000182000 0.0000047000 -0.0000049000 0.0000068800\n" " 35803.2000000000 0.0004801700 -0.0001278000 0.0000330500 -0.0000348000 0.0000473500\n" " 10522.4830000000 0.0015962600 -0.0004265000 0.0001106400 -0.0001149000 0.0001652200\n" " 3701.7745000000 0.0054750700 -0.0014618000 0.0003777800 -0.0004007000 0.0005308800\n" " 1399.3933000000 0.0169370600 -0.0045845000 0.0011912000 -0.0012329000 0.0017985200\n" " 548.3889500000 0.0504178400 -0.0138701000 0.0035922800 -0.0038201000 0.0050352300\n" " 219.3626900000 0.1345026700 -0.0391782000 0.0102427300 -0.0106138000 0.0155996000\n" " 88.8822590000 0.2947640100 -0.0963506000 0.0253036400 -0.0270878000 0.0356862000\n" " 36.3233770000 0.4127972600 -0.1817620000 0.0493252100 -0.0512202000 0.0786378100\n" " 14.9334630000 0.2188576000 -0.1452339000 0.0404961600 -0.0466301000 0.0494893100\n" " 6.1663485000 0.0135263100 0.2298980700 -0.0698564000 0.0919014000 -0.1113745000\n" " 2.5545565000 0.0047876100 0.6237984700 -0.2541120000 0.2690132700 -0.5522929000\n" " 1.0609507000 -0.0023509000 0.3154358200 -0.2861133000 0.4607770300 -0.3884090000\n" " 0.4415024000 0.0015770000 -0.0027626000 0.2463941500 -1.0562010000 2.9534782000\n" " 0.1840168000 -0.0009118000 0.0090372200 0.6801918100 -0.7847112000 -2.8556020000\n" " 0.0767962000 0.0004164400 -0.0039062000 0.2896670600 1.2042630000 0.0921528600\n" " 0.0307185000 -0.0001140000 0.0011114400 0.0241482300 0.2967985900 1.0348260000\n" " 2 1 1 12 4\n" " 843.5338200000 0.0007436900 -0.0001574000 0.0001660200 -0.0001925000\n" " 204.9072600000 0.0055201500 -0.0011656000 0.0011978900 -0.0011519000\n" " 72.2487870000 0.0241128700 -0.0051529000 0.0054575000 -0.0064766000\n" " 27.9613650000 0.0888357300 -0.0191723000 0.0196283200 -0.0182754000\n" " 11.2322820000 0.2349425100 -0.0523132000 0.0558657900 -0.0680060000\n" " 4.5969373000 0.3973225000 -0.0900087000 0.0919795600 -0.0775832000\n" " 1.9014833000 0.3618118500 -0.0925012000 0.1150392100 -0.2143299000\n" " 0.7917828000 0.1052477300 0.0387090900 -0.0648366000 0.2557204800\n" " 0.3311662000 0.0025655500 0.3415276900 -0.6831822000 1.0777334000\n" " 0.1389423000 0.0017732900 0.4611056100 -0.1636095000 -1.2446840000\n" " 0.0584257000 -0.0004541000 0.2585592100 0.6175016400 -0.3835503000\n" " 0.0233703000 0.0001788100 0.0756656000 0.4409777500 1.0225198000\n" " 3 2 2 5 2\n" " 2.0105333000 0.0222105100 -0.0019527000\n" " 0.7910981000 0.1035698000 0.1535609200\n" " 0.3112787000 0.5081316400 0.4895933200\n" " 0.1224809000 0.3511753500 0.1138756000\n" " 0.0489924000 0.2507112700 -0.9848990000\n" " 4 3 3 2 1\n" " 0.8000000000 0.7000000000\n" " 0.3000000000 0.4000000000\n" "#","\n" "H (41) DZV-ALLELECTRON DZV-ALL\n" " 2\n" " 1 0 0 4 1\n" " 50.9991800000 0.0096604760\n" " 7.4832180000 0.0737288600\n" " 1.7774680000 0.2958581000\n" " 0.5193295000 0.7159053000\n" " 2 0 0 1 1\n" " 0.1541100000 1.0000000000\n" "#","\n" "H (41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 3\n" " 1 0 0 4 1\n" " 50.9991800000 0.0096604760\n" " 7.4832180000 0.0737288600\n" " 1.7774680000 0.2958581000\n" " 0.5193295000 0.7159053000\n" " 2 0 0 1 1\n" " 0.1541100000 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "He (51) DZV-ALLELECTRON DZV-ALL\n" " 2\n" " 1 0 0 5 1\n" " 221.3880300000 0.0027491019\n" " 33.2619660000 0.0208657650\n" " 7.5616549000 0.0970588380\n" " 2.0855990000 0.2807288500\n" " 0.6143391600 0.4742218300\n" " 2 0 0 1 1\n" " 0.1829212000 0.3055012900\n" "#","\n" "He (51/1) DZVP-ALLELECTRON DZVP-ALL\n" " 3\n" " 1 0 0 5 1\n" " 221.3880300000 0.0027491019\n" " 33.2619660000 0.0208657650\n" " 7.5616549000 0.0970588380\n" " 2.0855990000 0.2807288500\n" " 0.6143391600 0.4742218300\n" " 2 0 0 1 1\n" " 0.1829212000 0.3055012900\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "Li (6111/311) DZVP-ALLELECTRON DZVP-ALL\n" " 7\n" " 1 0 0 6 1\n" " 605.7054000000 0.0022800000\n" " 90.8609100000 0.0174600000\n" " 20.6312700000 0.0834000000\n" " 5.7384460000 0.2607400000\n" " 1.7515260000 0.4726300000\n" " 0.5463901000 0.3090700000\n" " 2 0 0 1 1\n" " 0.8427234000 1.0000000000\n" " 3 0 0 1 1\n" " 0.0674483300 1.0000000000\n" " 4 0 0 1 1\n" " 0.0253733200 1.0000000000\n" " 2 1 1 3 1\n" " 2.7700000000 0.0119900000\n" " 0.6300000000 0.0543800000\n" " 0.1850000000 0.1724600000\n" " 3 1 1 1 1\n" " 0.0544000000 1.0000000000\n" " 4 1 1 1 1\n" " 0.0160000000 1.0000000000\n" "#","\n" "Li (621/1/1) DZVP-MONTREAL-ALLELECTRON DZVP-MONTREAL-ALL\n" " 5\n" " 1 0 0 6 1\n" " 605.7054000000 -0.0022870220\n" " 90.8609100000 -0.0174528000\n" " 20.6312700000 -0.0836970200\n" " 5.7384460000 -0.2597485000\n" " 1.7515260000 -0.4794613000\n" " 0.5463901000 -0.3233006000\n" " 2 0 0 2 1\n" " 0.8427234000 0.0748609200\n" " 0.0674483300 -0.6546490000\n" " 3 0 0 1 1\n" " 0.0253733200 1.0000000000\n" " 2 1 1 1 1\n" " 0.0773000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1220000000 1.0000000000\n" "#","\n" "Be (621/1/1) DZVP-ALLELECTRON DZVP-ALL\n" " 5\n" " 1 0 0 6 1\n" " 1203.4140000000 0.0020504250\n" " 180.2457000000 0.0157077700\n" " 40.8000500000 0.0768315300\n" " 11.3365400000 0.2480252000\n" " 3.5034830000 0.4798452000\n" " 1.1091220000 0.3371459000\n" " 2 0 0 2 1\n" " 1.9593420000 -0.0750455400\n" " 0.1652013000 0.5813557000\n" " 3 0 0 1 1\n" " 0.0552207800 1.0000000000\n" " 2 1 1 1 1\n" " 0.1500000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.2500000000 1.0000000000\n" "#","\n" "B (621/41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 6\n" " 1 0 0 6 1\n" " 1915.1670000000 -0.0020395200\n" " 287.1831000000 -0.0155965800\n" " 65.1571700000 -0.0762442400\n" " 18.1958300000 -0.2479244000\n" " 5.7015380000 -0.4790823000\n" " 1.8438370000 -0.3352953000\n" " 2 0 0 2 1\n" " 3.4914300000 0.0774223700\n" " 0.3050560000 -0.5741239000\n" " 3 0 0 1 1\n" " 0.0964865000 1.0000000000\n" " 2 1 1 4 1\n" " 11.6874200000 0.0150861200\n" " 2.6307750000 0.0888157000\n" " 0.7442269000 0.2903682000\n" " 0.2304761000 0.4994433000\n" " 3 1 1 1 1\n" " 0.0699380500 1.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "C (621/41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 6\n" " 1 0 0 6 1\n" " 2808.0640000000 0.0020178300\n" " 421.1383000000 0.0154332000\n" " 95.5866200000 0.0755815500\n" " 26.7390000000 0.2478282000\n" " 8.4328270000 0.4793725000\n" " 2.7605820000 0.3338344000\n" " 2 0 0 2 1\n" " 5.4470040000 -0.0778407700\n" " 0.4792422000 0.5689560000\n" " 3 0 0 1 1\n" " 0.1461565000 1.0000000000\n" " 2 1 1 4 1\n" " 18.1308500000 0.0158547300\n" " 4.0998830000 0.0956827700\n" " 1.1858370000 0.3049119000\n" " 0.3685974000 0.4935017000\n" " 3 1 1 1 1\n" " 0.1097200000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "N (621/41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 6\n" " 1 0 0 6 1\n" " 3845.4150000000 0.0020186080\n" " 577.5332000000 0.0154077600\n" " 131.3198000000 0.0753714000\n" " 36.8237800000 0.2482122000\n" " 11.6701200000 0.4798274000\n" " 3.8542600000 0.3318012000\n" " 2 0 0 2 1\n" " 7.8295610000 -0.0776668700\n" " 0.6877351000 0.5654598000\n" " 3 0 0 1 1\n" " 0.2040388000 1.0000000000\n" " 2 1 1 4 1\n" " 26.8098400000 0.0154663100\n" " 6.0681540000 0.0964396800\n" " 1.7676260000 0.3083610000\n" " 0.5466728000 0.4911597000\n" " 3 1 1 1 1\n" " 0.1587289000 1.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O (621/41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 6\n" " 1 0 0 6 1\n" " 5222.9020000000 -0.0019363720\n" " 782.5399000000 -0.0148506700\n" " 177.2674000000 -0.0733187000\n" " 49.5166900000 -0.2451162000\n" " 15.6664400000 -0.4802847000\n" " 5.1793600000 -0.3359427000\n" " 2 0 0 2 1\n" " 10.6014400000 0.0788058200\n" " 0.9423171000 -0.5676952000\n" " 3 0 0 1 1\n" " 0.2774746000 1.0000000000\n" " 2 1 1 4 1\n" " 33.4241300000 0.0175603300\n" " 7.6221710000 0.1076300000\n" " 2.2382090000 0.3235255000\n" " 0.6867300000 0.4832229000\n" " 3 1 1 1 1\n" " 0.1938135000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F (621/41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 6\n" " 1 0 0 6 1\n" " 6384.7140000000 -0.0020301590\n" " 958.8865000000 -0.0154981000\n" " 218.1901000000 -0.0757786900\n" " 61.3647300000 -0.2502724000\n" " 19.6029000000 -0.4801086000\n" " 6.5648830000 -0.3271614000\n" " 2 0 0 2 1\n" " 13.8106900000 0.0790706600\n" " 1.2298670000 -0.5681216000\n" " 3 0 0 1 1\n" " 0.3584713000 1.0000000000\n" " 2 1 1 4 1\n" " 42.4699100000 0.0183170400\n" " 9.7138810000 0.1124513000\n" " 2.8640390000 0.3297771000\n" " 0.8746054000 0.4799772000\n" " 3 1 1 1 1\n" " 0.2425071000 1.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "Ne (621/41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 6\n" " 1 0 0 6 1\n" " 7883.8260000000 0.0020374790\n" " 1184.4060000000 0.0155468100\n" " 269.6731000000 0.0759637700\n" " 75.9416500000 0.2511027000\n" " 24.3210900000 0.4804765000\n" " 8.1832560000 0.3251142000\n" " 2 0 0 2 1\n" " 17.4495200000 -0.0790099700\n" " 1.5516320000 0.5676274000\n" " 3 0 0 1 1\n" " 0.4476986000 1.0000000000\n" " 2 1 1 4 1\n" " 52.9038100000 0.0187910600\n" " 12.1233600000 0.1157605000\n" " 3.5859220000 0.3342627000\n" " 1.0921630000 0.4778038000\n" " 3 1 1 1 1\n" " 0.2994419000 1.0000000000\n" " 3 2 2 1 1\n" " 1.2000000000 1.0000000000\n" "#","\n" "Na (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 9911.9960000000 0.0019500000\n" " 1487.4550000000 0.0148800000\n" " 337.9539000000 0.0732600000\n" " 94.9139500000 0.2450700000\n" " 30.3415000000 0.4787800000\n" " 10.1908400000 0.3327300000\n" " 2 0 0 3 1\n" " 21.2296500000 -0.0917500000\n" " 1.9804180000 0.5721000000\n" " 0.6188824000 0.4550100000\n" " 3 0 0 2 1\n" " 0.6991738000 -0.1150200000\n" " 0.0618270500 0.6934500000\n" " 4 0 0 1 1\n" " 0.0237274100 1.0000000000\n" " 2 1 1 5 1\n" " 73.0853100000 -0.0165900000\n" " 16.8645600000 -0.1059900000\n" " 5.0553910000 -0.3220200000\n" " 1.5920210000 -0.4903600000\n" " 0.4702690000 -0.3121800000\n" " 3 1 1 2 1\n" " 0.1700000000 0.0412900000\n" " 0.0647000000 0.4041200000\n" " 4 1 1 1 1\n" " 0.0170000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1169000000 1.0000000000\n" "#","\n" "Na (6321/411/1) DZVP-MONTREAL-ALLELECTRON DZVP-MONTREAL-ALL\n" " 8\n" " 1 0 0 6 1\n" " 9911.9960000000 0.0019504590\n" " 1487.4550000000 0.0149171200\n" " 337.9539000000 0.0734165800\n" " 94.9139500000 0.2456910000\n" " 30.3415000000 0.4795611000\n" " 10.1908400000 0.3337213000\n" " 2 0 0 3 1\n" " 21.2296500000 0.0823028800\n" " 1.9804180000 -0.5608480000\n" " 0.6188824000 -0.5224378000\n" " 3 0 0 2 1\n" " 0.6991738000 0.0920975500\n" " 0.0618270500 -0.6708252000\n" " 4 0 0 1 1\n" " 0.0237274100 1.0000000000\n" " 2 1 1 4 1\n" " 73.0853100000 0.0167176300\n" " 16.8645600000 0.1065395000\n" " 5.0553910000 0.3242217000\n" " 1.5920210000 0.4891362000\n" " 3 1 1 1 1\n" " 0.4702690000 1.0000000000\n" " 4 1 1 1 1\n" " 0.0647000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1169000000 1.0000000000\n" "#","\n" "Mg (6321/411/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 12436.6700000000 -0.0018333240\n" " 1862.2230000000 -0.0140828100\n" " 421.3745000000 -0.0700956200\n" " 117.6930000000 -0.2387718000\n" " 37.4314500000 -0.4787377000\n" " 12.5054900000 -0.3447773000\n" " 2 0 0 3 1\n" " 25.4514000000 0.0852139700\n" " 2.4528770000 -0.5646916000\n" " 0.8051333000 -0.5157275000\n" " 3 0 0 2 1\n" " 1.0820080000 -0.1113334000\n" " 0.1083340000 0.6481452000\n" " 4 0 0 1 1\n" " 0.0399073500 1.0000000000\n" " 2 1 1 4 1\n" " 92.4632200000 0.0162715700\n" " 21.5017700000 0.1045630000\n" " 6.5374420000 0.3224328000\n" " 2.1180810000 0.4940399000\n" " 3 1 1 1 1\n" " 0.6583148000 1.0000000000\n" " 4 1 1 1 1\n" " 0.1061000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Al (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 14724.4500000000 0.0018181970\n" " 2205.4630000000 0.0139580500\n" " 499.3021000000 0.0695009200\n" " 139.5901000000 0.2371061000\n" " 44.4922800000 0.4776104000\n" " 14.9056900000 0.3476339000\n" " 2 0 0 3 1\n" " 30.0750700000 -0.0878851200\n" " 2.9838330000 0.5677370000\n" " 1.0209900000 0.5105008000\n" " 3 0 0 2 1\n" " 1.4927790000 0.1341424000\n" " 0.1692291000 -0.6656758000\n" " 4 0 0 1 1\n" " 0.0617449100 1.0000000000\n" " 2 1 1 5 1\n" " 127.9161000000 0.0133024200\n" " 29.7767800000 0.0896709600\n" " 9.0917390000 0.2981308000\n" " 3.0009870000 0.4962628000\n" " 0.9695584000 0.3301450000\n" " 3 1 1 2 1\n" " 0.3756001000 0.2050982000\n" " 0.1250989000 0.5518101000\n" " 4 1 1 1 1\n" " 0.0417398100 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Si (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 17268.5800000000 -0.0017973950\n" " 2586.6510000000 -0.0137970400\n" " 585.6364000000 -0.0687807200\n" " 163.7736000000 -0.2352508000\n" " 52.2670300000 -0.4766194000\n" " 17.5416800000 -0.3507726000\n" " 2 0 0 3 1\n" " 35.1241400000 0.0902137000\n" " 3.5654230000 -0.5722548000\n" " 1.2591470000 -0.5045537000\n" " 3 0 0 2 1\n" " 1.9470140000 -0.1508352000\n" " 0.2367573000 0.6745594000\n" " 4 0 0 1 1\n" " 0.0858966400 1.0000000000\n" " 2 1 1 5 1\n" " 159.6817000000 -0.0123932000\n" " 37.2581700000 -0.0850800400\n" " 11.4382500000 -0.2905513000\n" " 3.8278340000 -0.4985588000\n" " 1.2679000000 -0.3325624000\n" " 3 1 1 2 1\n" " 0.5344095000 -0.2264369000\n" " 0.1829031000 -0.5553035000\n" " 4 1 1 1 1\n" " 0.0617872600 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 20024.9400000000 -0.0017787230\n" " 2999.4410000000 -0.0136540700\n" " 679.0868000000 -0.0681441600\n" " 189.9439000000 -0.2336137000\n" " 60.6834800000 -0.4757401000\n" " 20.3982300000 -0.3535470000\n" " 2 0 0 3 1\n" " 40.5941600000 -0.0922427200\n" " 4.1972190000 0.5774677000\n" " 1.5192950000 0.4983773000\n" " 3 0 0 2 1\n" " 2.4458590000 0.1631695000\n" " 0.3116159000 -0.6787174000\n" " 4 0 0 1 1\n" " 0.1120101000 1.0000000000\n" " 2 1 1 5 1\n" " 195.3994000000 -0.0116298200\n" " 45.6667500000 -0.0811413200\n" " 14.0730700000 -0.2837707000\n" " 4.7572430000 -0.5004074000\n" " 1.6035060000 -0.3357758000\n" " 3 1 1 2 1\n" " 0.7039432000 -0.2471697000\n" " 0.2451145000 -0.5552025000\n" " 4 1 1 1 1\n" " 0.0831324000 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 23050.0700000000 -0.0017566500\n" " 3451.8660000000 -0.0134893800\n" " 781.2787000000 -0.0674324900\n" " 218.4765000000 -0.2318604000\n" " 69.8326300000 -0.4749416000\n" " 23.4948000000 -0.3564992000\n" " 2 0 0 3 1\n" " 46.4823800000 -0.0940421700\n" " 4.8807490000 0.5828881000\n" " 1.8014760000 0.4923262000\n" " 3 0 0 2 1\n" " 2.9778040000 0.1731553000\n" " 0.3942510000 -0.6854363000\n" " 4 0 0 1 1\n" " 0.1417028000 1.0000000000\n" " 2 1 1 5 1\n" " 231.3313000000 0.0112789100\n" " 54.1461600000 0.0794256900\n" " 16.7576200000 0.2808799000\n" " 5.7193200000 0.5020190000\n" " 1.9560350000 0.3344146000\n" " 3 1 1 2 1\n" " 0.8955913000 0.2646811000\n" " 0.3094227000 0.5496127000\n" " 4 1 1 1 1\n" " 0.1021157000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 26351.4600000000 0.0017324290\n" " 3945.0570000000 0.0133109400\n" " 892.4384000000 0.0666748300\n" " 249.4174000000 0.2300506000\n" " 79.7215700000 0.4742307000\n" " 26.8311400000 0.3595240000\n" " 2 0 0 3 1\n" " 52.7853000000 -0.0956295900\n" " 5.6156430000 0.5880840000\n" " 2.1059080000 0.4866982000\n" " 3 0 0 2 1\n" " 3.5586150000 0.1806891000\n" " 0.4847981000 -0.6884829000\n" " 4 0 0 1 1\n" " 0.1733310000 1.0000000000\n" " 2 1 1 5 1\n" " 271.0782000000 -0.0109256700\n" " 63.5472100000 -0.0775909100\n" " 19.7371100000 -0.2775159000\n" " 6.7889940000 -0.5031933000\n" " 2.3480300000 -0.3348426000\n" " 3 1 1 2 1\n" " 1.1066860000 -0.2765381000\n" " 0.3829680000 -0.5466768000\n" " 4 1 1 1 1\n" " 0.1251133000 1.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 29505.7700000000 -0.0017375040\n" " 4419.2160000000 -0.0133380900\n" " 1000.5770000000 -0.0667249100\n" " 280.0380000000 -0.2298887000\n" " 89.7120800000 -0.4735744000\n" " 30.2798800000 -0.3599160000\n" " 2 0 0 3 1\n" " 59.5144000000 0.0970257400\n" " 6.3997780000 -0.5933987000\n" " 2.4314710000 -0.4810804000\n" " 3 0 0 2 1\n" " 4.1875360000 -0.1864000000\n" " 0.5832562000 0.6895689000\n" " 4 0 0 1 1\n" " 0.2071081000 1.0000000000\n" " 2 1 1 5 1\n" " 313.0218000000 0.0106753000\n" " 73.4872300000 0.0763095300\n" " 22.8979900000 0.2751271000\n" " 7.9322150000 0.5040719000\n" " 2.7702700000 0.3346271000\n" " 3 1 1 2 1\n" " 1.3318950000 0.2877000000\n" " 0.4618615000 0.5447527000\n" " 4 1 1 1 1\n" " 0.1502194000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "K (63321/5211/1) DZVP-ALLELECTRON DZVP-ALL\n" " 10\n" " 1 0 0 6 1\n" " 33078.6500000000 0.0017266760\n" " 4954.9020000000 0.0132514200\n" " 1122.1310000000 0.0663142300\n" " 314.2081000000 0.2286724000\n" " 100.7763000000 0.4726698000\n" " 34.0613500000 0.3621416000\n" " 2 0 0 3 1\n" " 66.6029300000 -0.0984506600\n" " 7.2644560000 0.5941619000\n" " 2.8036790000 0.4799139000\n" " 3 0 0 3 1\n" " 4.8324390000 0.1972709000\n" " 0.7058188000 -0.6956473000\n" " 0.2697520000 -0.4228781000\n" " 4 0 0 2 1\n" " 0.3533535000 -0.1246783000\n" " 0.0420916300 0.7383633000\n" " 5 0 0 1 1\n" " 0.0174484800 1.0000000000\n" " 2 1 1 5 1\n" " 367.5115000000 -0.0100333200\n" " 86.2608600000 -0.0727348400\n" " 26.8979700000 -0.2679043000\n" " 9.3541250000 -0.5038367000\n" " 3.2920580000 -0.3426224000\n" " 3 1 1 2 1\n" " 1.6209190000 -0.2952722000\n" " 0.5872493000 -0.5563566000\n" " 4 1 1 1 1\n" " 0.2046941000 1.0000000000\n" " 5 1 1 1 1\n" " 0.0408000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.0741000000 1.0000000000\n" "#","\n" "Cu (63321/531/41*) DZVP-MONTREAL-ALLELECTRON DZVP-MONTREAL-ALL\n" " 10\n" " 1 0 0 6 1\n" " 80289.6200000000 -0.0016562160\n" " 12027.3400000000 -0.0127092500\n" " 2724.2580000000 -0.0638517700\n" " 763.5617000000 -0.2221154000\n" " 246.0646000000 -0.4686049000\n" " 83.8683600000 -0.3733793000\n" " 2 0 0 3 1\n" " 161.7973000000 0.1066759000\n" " 18.7253700000 -0.6245943000\n" " 7.6364160000 -0.4496724000\n" " 3 0 0 3 1\n" " 14.1508300000 -0.2198077000\n" " 2.2528310000 0.7108760000\n" " 0.8644886000 0.4206572000\n" " 4 0 0 2 1\n" " 1.2230960000 0.1303169000\n" " 0.1429771000 -0.5708601000\n" " 5 0 0 1 1\n" " 0.0504603300 1.0000000000\n" " 2 1 1 5 1\n" " 1002.9740000000 0.0089143100\n" " 236.6253000000 0.0669704300\n" " 74.8923200000 0.2584147000\n" " 26.9312500000 0.5070620000\n" " 9.9267760000 0.3407511000\n" " 3 1 1 3 1\n" " 5.3446650000 0.3313745000\n" " 2.0247480000 0.5459871000\n" " 0.7366331000 0.2494767000\n" " 4 1 1 1 1\n" " 0.1410000000 1.0000000000\n" " 3 2 2 4 1\n" " 31.8126700000 -0.0668891400\n" " 8.6058710000 -0.2907401000\n" " 2.6093410000 -0.4984195000\n" " 0.6852135000 -0.4697251000\n" " 4 2 2 1 1\n" " 0.1100000000 1.0000000000\n" "#","\n" "Cu (63321/531/41) DZVP-ALLELECTRON DZVP-ALL\n" " 10\n" " 1 0 0 6 1\n" " 80289.6200000000 0.0016500000\n" " 12027.3400000000 0.0127400000\n" " 2724.2580000000 0.0634300000\n" " 763.5617000000 0.2238400000\n" " 246.0646000000 0.4469700000\n" " 83.8683600000 0.3432300000\n" " 2 0 0 3 1\n" " 161.7973000000 -0.0836100000\n" " 18.7253700000 0.7573900000\n" " 7.6364160000 0.5060700000\n" " 3 0 0 3 1\n" " 14.1508300000 -0.1441800000\n" " 2.2528310000 0.8250000000\n" " 0.8644886000 0.4798900000\n" " 4 0 0 2 1\n" " 1.2230960000 -0.0785900000\n" " 0.1429771000 0.5949100000\n" " 5 0 0 1 1\n" " 0.0504603300 1.0000000000\n" " 2 1 1 5 1\n" " 1002.9740000000 0.0089100000\n" " 236.6253000000 0.0666800000\n" " 74.8923200000 0.2569800000\n" " 26.9312500000 0.5058100000\n" " 9.9267760000 0.3376600000\n" " 3 1 1 3 1\n" " 5.3446650000 0.3484300000\n" " 2.0247480000 0.5954700000\n" " 0.7366331000 0.2609100000\n" " 4 1 1 1 1\n" " 0.1410000000 1.0000000000\n" " 3 2 2 4 1\n" " 31.8126700000 0.0636900000\n" " 8.6058710000 0.2755200000\n" " 2.6093410000 0.4756400000\n" " 0.6852135000 0.4480200000\n" " 4 2 2 1 1\n" " 0.1100000000 1.0000000000\n" "#","\n" "Cu (633111/5211/311) TZVP-ALLELECTRON TZVP-ALL\n" " 13\n" " 1 0 0 6 1\n" " 80289.6200000000 0.0016500000\n" " 12027.3400000000 0.0127400000\n" " 2724.2580000000 0.0634300000\n" " 763.5617000000 0.2238400000\n" " 246.0646000000 0.4469700000\n" " 83.8683600000 0.3432300000\n" " 2 0 0 3 1\n" " 161.7973000000 -0.0836100000\n" " 18.7253700000 0.7573900000\n" " 7.6364160000 0.5060700000\n" " 3 0 0 3 1\n" " 14.1508300000 -0.1441800000\n" " 2.2528310000 0.8250000000\n" " 0.8644886000 0.4798900000\n" " 4 0 0 1 1\n" " 1.2230960000 1.0000000000\n" " 5 0 0 1 1\n" " 0.1429771000 1.0000000000\n" " 6 0 0 1 1\n" " 0.0504603300 1.0000000000\n" " 2 1 1 5 1\n" " 1002.9740000000 0.0089100000\n" " 236.6253000000 0.0666800000\n" " 74.8923200000 0.2569800000\n" " 26.9312500000 0.5058100000\n" " 9.9267760000 0.3376600000\n" " 3 1 1 2 1\n" " 5.3446650000 0.3484300000\n" " 2.0247480000 0.5954700000\n" " 4 1 1 1 1\n" " 0.7366331000 1.0000000000\n" " 5 1 1 1 1\n" " 0.1410000000 1.0000000000\n" " 3 2 2 3 1\n" " 31.8126700000 0.0636900000\n" " 8.6058710000 0.2755200000\n" " 2.6093410000 0.4756400000\n" " 4 2 2 1 1\n" " 0.6852135000 1.0000000000\n" " 5 2 2 1 1\n" " 0.1100000000 1.0000000000\n" "#","\n" "Zn (63321/531/41) DZVP-ALLELECTRON DZVP-ALL\n" " 10\n" " 1 0 0 6 1\n" " 82904.2200000000 -0.0017313190\n" " 12444.2300000000 -0.0132328300\n" " 2829.8530000000 -0.0658900700\n" " 797.8929000000 -0.2261988000\n" " 259.0647000000 -0.4683912000\n" " 89.0795100000 -0.3669156000\n" " 2 0 0 3 1\n" " 173.6817000000 -0.1071624000\n" " 20.1665000000 0.6264982000\n" " 8.2470820000 0.4478206000\n" " 3 0 0 3 1\n" " 15.3165800000 -0.2212375000\n" " 2.4557490000 0.7091911000\n" " 0.9548777000 0.4224147000\n" " 4 0 0 2 1\n" " 1.4100030000 -0.1404652000\n" " 0.1693441000 0.6012745000\n" " 5 0 0 1 1\n" " 0.0592210000 1.0000000000\n" " 2 1 1 5 1\n" " 1085.1780000000 0.0088260260\n" " 256.1809000000 0.0664454900\n" " 81.1402500000 0.2574246000\n" " 29.2225200000 0.5071455000\n" " 10.7937000000 0.3414356000\n" " 3 1 1 3 1\n" " 5.8412900000 0.3312126000\n" " 2.2263660000 0.5463760000\n" " 0.8211640000 0.2468144000\n" " 4 1 1 1 1\n" " 0.1690000000 1.0000000000\n" " 3 2 2 4 1\n" " 38.0934700000 -0.0606966400\n" " 10.4237600000 -0.2760500000\n" " 3.2532520000 -0.4982638000\n" " 0.9097528000 -0.4689898000\n" " 4 2 2 1 1\n" " 0.1720000000 1.0000000000\n" "#","\n" "Br (63321/5321/41) DZVP-ALLELECTRON DZVP-ALL\n" " 11\n" " 1 0 0 6 1\n" " 115354.1000000000 0.0016893780\n" " 17308.3900000000 0.0129218500\n" " 3932.8540000000 0.0645566100\n" " 1107.7720000000 0.2228721000\n" " 359.6334000000 0.4668337000\n" " 123.6999000000 0.3726870000\n" " 2 0 0 3 1\n" " 239.1218000000 0.1093640000\n" " 28.2681300000 -0.6294377000\n" " 11.7505700000 -0.4449871000\n" " 3 0 0 3 1\n" " 21.8299600000 0.2318734000\n" " 3.6088260000 -0.7272457000\n" " 1.5164870000 -0.4055866000\n" " 4 0 0 2 1\n" " 2.5209370000 0.2202626000\n" " 0.4093415000 -0.7163121000\n" " 5 0 0 1 1\n" " 0.1530953000 1.0000000000\n" " 2 1 1 5 1\n" " 1580.3740000000 0.0081757200\n" " 373.0976000000 0.0625525000\n" " 118.3523000000 0.2484745000\n" " 42.8589600000 0.5054137000\n" " 15.9778700000 0.3523443000\n" " 3 1 1 3 1\n" " 8.7533270000 0.3283504000\n" " 3.5160330000 0.5437991000\n" " 1.4307380000 0.2357859000\n" " 4 1 1 2 1\n" " 0.7091507000 -0.3244162000\n" " 0.2656835000 -0.5395416000\n" " 5 1 1 1 1\n" " 0.0943995000 1.0000000000\n" " 3 2 2 4 1\n" " 61.5144200000 0.0595776800\n" " 17.1619800000 0.2843781000\n" " 5.5384710000 0.5281856000\n" " 1.6848170000 0.4047724000\n" " 4 2 2 1 1\n" " 0.3620000000 1.0000000000\n" "#","\n" "H DZV-ALL-PADE\n" " 1\n" " 1 0 0 5 2\n" " 47.6766821949 -0.0039912598 0.0000000000\n" " 7.2138252786 -0.0254871433 0.0000000000\n" " 1.6553477814 -0.1498103667 0.0000000000\n" " 0.4620756821 -0.2465524925 0.0000000000\n" " 0.1633279056 -0.6895969065 1.0000000000\n" "#","\n" "H DZVP-ALL-PADE\n" " 2\n" " 1 0 0 5 2\n" " 47.6766821949 -0.0039912598 0.0000000000\n" " 7.2138252786 -0.0254871433 0.0000000000\n" " 1.6553477814 -0.1498103667 0.0000000000\n" " 0.4620756821 -0.2465524925 0.0000000000\n" " 0.1633279056 -0.6895969065 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "He DZV-ALL-PADE\n" " 1\n" " 1 0 0 6 2\n" " 204.6501154200 0.0030044482 0.0000000000\n" " 31.4140748450 0.0221284099 0.0000000000\n" " 7.2438462856 0.1007469582 0.0000000000\n" " 2.0171174742 0.2853415709 0.0000000000\n" " 0.5990792530 0.4724594508 0.0000000000\n" " 0.1799489287 0.2977187692 1.0000000000\n" "#","\n" "He DZVP-ALL-PADE\n" " 2\n" " 1 0 0 6 2\n" " 204.6501154200 0.0030044482 0.0000000000\n" " 31.4140748450 0.0221284099 0.0000000000\n" " 7.2438462856 0.1007469582 0.0000000000\n" " 2.0171174742 0.2853415709 0.0000000000\n" " 0.5990792530 0.4724594508 0.0000000000\n" " 0.1799489287 0.2977187692 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "Li DZV-ALL-PADE\n" " 1\n" " 1 0 0 9 3\n" " 1414.6178762780 -0.0007941411 0.0001418239 0.0000000000\n" " 212.3358889800 -0.0061171237 0.0010947690 0.0000000000\n" " 48.4297216336 -0.0308807676 0.0055808506 0.0000000000\n" " 13.7257942708 -0.1130599452 0.0210246402 0.0000000000\n" " 4.3982155076 -0.2859257427 0.0578894771 0.0000000000\n" " 1.4963572281 -0.4501773541 0.1151205889 0.0000000000\n" " 0.5121133007 -0.2748376742 0.1143680207 0.0000000000\n" " 0.0746551776 -0.0131827781 -0.5475245168 0.0000000000\n" " 0.0269341112 0.0043968126 -0.5468255164 1.0000000000\n" "#","\n" "Li DZVP-ALL-PADE\n" " 1\n" " 1 0 1 9 3 1\n" " 1414.6178762780 -0.0007941411 0.0001418239 0.0000000000 0.0000000000\n" " 212.3358889800 -0.0061171237 0.0010947690 0.0000000000 0.0000000000\n" " 48.4297216336 -0.0308807676 0.0055808506 0.0000000000 0.0000000000\n" " 13.7257942708 -0.1130599452 0.0210246402 0.0000000000 0.0000000000\n" " 4.3982155076 -0.2859257427 0.0578894771 0.0000000000 0.0000000000\n" " 1.4963572281 -0.4501773541 0.1151205889 0.0000000000 0.0000000000\n" " 0.5121133007 -0.2748376742 0.1143680207 0.0000000000 0.0000000000\n" " 0.0746551776 -0.0131827781 -0.5475245168 0.0000000000 0.0000000000\n" " 0.0269341112 0.0043968126 -0.5468255164 1.0000000000 1.0000000000\n" "#","\n" "Be DZV-ALL-PADE\n" " 1\n" " 1 0 0 9 3\n" " 2838.2104843030 -0.0007019523 0.0001432987 0.0000000000\n" " 425.9069835160 -0.0054237190 0.0011215974 0.0000000000\n" " 96.6806600316 -0.0277505669 0.0057055932 0.0000000000\n" " 27.2706499785 -0.1041047062 0.0225470947 0.0000000000\n" " 8.7532305131 -0.2746537186 0.0630242360 0.0000000000\n" " 3.0282645637 -0.4478941550 0.1362247299 0.0000000000\n" " 1.0653214420 -0.2921373841 0.1257746042 0.0000000000\n" " 0.1837410502 -0.0161597639 -0.5389829855 0.0000000000\n" " 0.0597629783 0.0044284677 -0.5743277205 1.0000000000\n" "#","\n" "Be DZVP-ALL-PADE\n" " 1\n" " 1 0 1 9 3 1\n" " 2838.2104843030 -0.0007019523 0.0001432987 0.0000000000 0.0000000000\n" " 425.9069835160 -0.0054237190 0.0011215974 0.0000000000 0.0000000000\n" " 96.6806600316 -0.0277505669 0.0057055932 0.0000000000 0.0000000000\n" " 27.2706499785 -0.1041047062 0.0225470947 0.0000000000 0.0000000000\n" " 8.7532305131 -0.2746537186 0.0630242360 0.0000000000 0.0000000000\n" " 3.0282645637 -0.4478941550 0.1362247299 0.0000000000 0.0000000000\n" " 1.0653214420 -0.2921373841 0.1257746042 0.0000000000 0.0000000000\n" " 0.1837410502 -0.0161597639 -0.5389829855 0.0000000000 0.0000000000\n" " 0.0597629783 0.0044284677 -0.5743277205 1.0000000000 1.0000000000\n" "#","\n" "B DZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 3 3\n" " 2770.6887201190 -0.0012849920 0.0002815183 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 416.0177319883 -0.0098497439 0.0021926254 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 94.8894954229 -0.0489833356 0.0108940076 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 26.7499548442 -0.1723972150 0.0414450988 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.4264760790 -0.4017468011 0.1087223068 0.0000000000 -0.0194224027 0.0000000000 0.0000000000\n" " 2.8185756685 -0.4396258903 0.1880725583 0.0000000000 -0.0637848437 0.0000000000 0.0000000000\n" " 0.8858154287 -0.0939440721 -0.0102057441 0.0000000000 -0.2445403926 0.0000000000 0.0000000000\n" " 0.2755692515 0.0087352964 -0.6622781443 0.0000000000 -0.4653071695 0.0000000000 1.0000000000\n" " 0.0836350993 -0.0023332765 -0.4345757818 1.0000000000 -0.4454718873 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "C DZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 3 3\n" " 4266.1800613820 -0.0011943659 0.0002708392 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 642.7602862562 -0.0091221647 0.0021018981 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 146.7884267926 -0.0455862664 0.0104909359 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 41.2743794968 -0.1645442121 0.0408993451 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 12.8905294328 -0.4010362654 0.1123583959 0.0000000000 -0.0207269323 0.0000000000 0.0000000000\n" " 4.2578431902 -0.4506526871 0.2000200876 0.0000000000 -0.0735133778 0.0000000000 0.0000000000\n" " 1.3307568939 -0.0932928666 -0.0307479826 0.0000000000 -0.2717786632 0.0000000000 0.0000000000\n" " 0.4108076579 0.0083827453 -0.6803273620 0.0000000000 -0.4752358588 0.0000000000 1.0000000000\n" " 0.1203105299 -0.0021601474 -0.4075981685 1.0000000000 -0.4103141270 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "N DZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 3 3\n" " 6241.4478205000 -0.0010992714 0.0002541567 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 942.7853221624 -0.0083836502 0.0019685436 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 215.1071557533 -0.0422134003 0.0099007497 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 60.1999725160 -0.1563225099 0.0394939433 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 18.6046423067 -0.3979589501 0.1133930134 0.0000000000 -0.0210878424 0.0000000000 0.0000000000\n" " 6.0687801071 -0.4619961627 0.2073232497 0.0000000000 -0.0789077492 0.0000000000 0.0000000000\n" " 1.8932165206 -0.0957720636 -0.0376291073 0.0000000000 -0.2857497167 0.0000000000 0.0000000000\n" " 0.5794472569 0.0081210319 -0.6849844121 0.0000000000 -0.4787797641 0.0000000000 1.0000000000\n" " 0.1652321868 -0.0020517293 -0.4012545190 1.0000000000 -0.3946908536 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O DZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 3 3\n" " 8664.6907364270 -0.0010264289 0.0002401847 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1306.3804630458 -0.0078441700 0.0018629873 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 297.9615739412 -0.0396596073 0.0094113620 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 83.0732192337 -0.1499468244 0.0382308227 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 25.4219803948 -0.3957081736 0.1138918674 0.0000000000 -0.0212313047 0.0000000000 0.0000000000\n" " 8.2002946495 -0.4708819153 0.2122924071 0.0000000000 -0.0827974544 0.0000000000 0.0000000000\n" " 2.5534670865 -0.0973701955 -0.0419284053 0.0000000000 -0.2949296208 0.0000000000 0.0000000000\n" " 0.7764121612 0.0078325892 -0.6868639954 0.0000000000 -0.4802452851 0.0000000000 1.0000000000\n" " 0.2169654766 -0.0019439564 -0.3986265721 1.0000000000 -0.3854659989 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F DZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 3 3\n" " 11534.0506179760 -0.0009693137 0.0002286337 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1736.4519019727 -0.0074228862 0.0017758908 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 395.6947671892 -0.0376841674 0.0090123001 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 109.8950434029 -0.1450177785 0.0371743948 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 33.3170603602 -0.3943357740 0.1142516978 0.0000000000 -0.0213060126 0.0000000000 0.0000000000\n" " 10.6395997010 -0.4778632959 0.2159190584 0.0000000000 -0.0858798131 0.0000000000 0.0000000000\n" " 3.3072015847 -0.0980593066 -0.0454513631 0.0000000000 -0.3015970754 0.0000000000 0.0000000000\n" " 1.0004259330 0.0075046051 -0.6878291319 0.0000000000 -0.4808474043 0.0000000000 1.0000000000\n" " 0.2751462303 -0.0018293410 -0.3969701556 1.0000000000 -0.3792605287 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "Ne DZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 3 3\n" " 14852.7741853830 -0.0009235872 0.0002190609 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2234.8237554633 -0.0070802740 0.0017022734 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 508.8034771653 -0.0360908407 0.0086781493 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 140.7349980722 -0.1411013040 0.0362883902 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 42.2868226841 -0.3936017844 0.1145689028 0.0000000000 -0.0213531723 0.0000000000 0.0000000000\n" " 13.3814738310 -0.4835123748 0.2187087359 0.0000000000 -0.0884397798 0.0000000000 0.0000000000\n" " 4.1527137274 -0.0981106306 -0.0486085731 0.0000000000 -0.3067173307 0.0000000000 0.0000000000\n" " 1.2509672859 0.0071501025 -0.6884074486 0.0000000000 -0.4810347809 0.0000000000 1.0000000000\n" " 0.3396248365 -0.0017103909 -0.3956395896 1.0000000000 -0.3747659865 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 1.2000000000 1.0000000000\n" "#","\n" "Na DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 21394.4924408352 0.0006997970 -0.0001723222 0.0000318328 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 3795.7378701065 0.0042288655 -0.0010411116 0.0001901524 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 985.8138826962 0.0187975202 -0.0046890691 0.0008718578 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 302.7884326942 0.0687646112 -0.0175180517 0.0031871723 0.0000000000 -0.0012633822 0.0000000000 0.0000000000 0.0000000000\n" " 103.1219260258 0.1965820685 -0.0542917187 0.0102229243 0.0000000000 -0.0055996166 0.0000000000 0.0000000000 0.0000000000\n" " 37.9946819901 0.3853147762 -0.1258294332 0.0229101289 0.0000000000 -0.0260567422 0.0000000000 0.0000000000 0.0000000000\n" " 14.7704405101 0.3818197180 -0.1864438254 0.0376735175 0.0000000000 -0.0909943900 0.0000000000 0.0000000000 0.0000000000\n" " 5.8005968867 0.0996875920 -0.0067937817 -0.0040418885 0.0000000000 -0.2388788121 0.0000000000 0.0000000000 0.0000000000\n" " 2.2568321873 -0.0028473835 0.4371568026 -0.0847080121 0.0000000000 -0.3819119184 0.0000000000 0.0000000000 0.0000000000\n" " 0.8574123124 0.0015751503 0.5578917664 -0.2235245000 0.0000000000 -0.3665265555 1.0000000000 0.0000000000 0.0000000000\n" " 0.3102401678 -0.0004707246 0.1358955383 0.0003703549 0.0000000000 -0.1521385722 0.0000000000 1.0000000000 0.0000000000\n" " 0.0425973682 0.0000637435 -0.0014197920 1.0326168980 1.0000000000 -0.0040572054 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1169000000 1.0000000000\n" "#","\n" "Mg DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 24563.3509341519 0.0007501763 -0.0001898742 0.0000432716 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4098.7281652598 0.0049866285 -0.0012662269 0.0002886160 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1006.0693449047 0.0236248415 -0.0060608521 0.0013824537 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 296.0583569831 0.0889264612 -0.0236070994 0.0053960194 0.0000000000 -0.0019014218 0.0000000000 0.0000000000 0.0000000000\n" " 97.5602425330 0.2498577261 -0.0728218452 0.0167469733 0.0000000000 -0.0091160713 0.0000000000 0.0000000000 0.0000000000\n" " 35.0026526821 0.4370249965 -0.1609409689 0.0376024877 0.0000000000 -0.0414328941 0.0000000000 0.0000000000 0.0000000000\n" " 13.2894359607 0.3137343310 -0.1793620369 0.0434617096 0.0000000000 -0.1416149186 0.0000000000 0.0000000000 0.0000000000\n" " 5.0406635723 0.0348223238 0.1488145108 -0.0386567967 0.0000000000 -0.3285471023 0.0000000000 0.0000000000 0.0000000000\n" " 1.8767656586 0.0002090057 0.6227623758 -0.2075293171 0.0000000000 -0.4342370572 0.0000000000 0.0000000000 0.0000000000\n" " 0.6740386983 -0.0003911930 0.3832848322 -0.2221884917 0.0000000000 -0.2719424179 1.0000000000 0.0000000000 0.0000000000\n" " 0.1488350316 0.0001705201 0.0091106555 0.4513483785 0.0000000000 -0.0274310878 0.0000000000 1.0000000000 0.0000000000\n" " 0.0515990826 -0.0000693922 -0.0006594960 0.6960710466 1.0000000000 0.0065925450 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Al DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 27551.3038803664 0.0007902356 0.0002051247 -0.0000539950 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4682.7618227118 0.0051091411 0.0013307487 -0.0003509552 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1166.3402011445 0.0238287095 0.0062711660 -0.0016510527 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 346.0032826675 0.0891920482 0.0243060417 -0.0064361456 0.0000000000 -0.0020283510 0.0003943314 0.0000000000 0.0000000000\n" " 114.4719182078 0.2502089639 0.0749256824 -0.0198886400 0.0000000000 -0.0096153064 0.0020649970 0.0000000000 0.0000000000\n" " 41.1999175687 0.4367661056 0.1656890319 -0.0450859057 0.0000000000 -0.0438990222 0.0086117474 0.0000000000 0.0000000000\n" " 15.7012333530 0.3125973574 0.1836095416 -0.0512412586 0.0000000000 -0.1486831836 0.0325680927 0.0000000000 0.0000000000\n" " 6.0142665071 0.0345570290 -0.1524355487 0.0448540103 0.0000000000 -0.3395431168 0.0689924793 0.0000000000 0.0000000000\n" " 2.2830453817 0.0004891428 -0.6319413645 0.2602793107 0.0000000000 -0.4356046359 0.1128895908 0.0000000000 0.0000000000\n" " 0.8490703600 -0.0005055118 -0.3717923282 0.2367424774 0.0000000000 -0.2445346410 -0.0215336434 0.0000000000 0.0000000000\n" " 0.1896189412 0.0001917544 -0.0078124700 -0.7037552451 0.0000000000 -0.0176080423 -0.4885175925 0.0000000000 1.0000000000\n" " 0.0590458267 -0.0000711837 0.0005957043 -0.4830773513 1.0000000000 0.0038180642 -0.5990452444 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Si DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 34205.8807706528 0.0007327188 0.0001943796 -0.0000558389 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 5705.2071864975 0.0048710223 0.0012962263 -0.0003727797 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1400.9000355114 0.0230910203 0.0062095461 -0.0017849346 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 411.6831259844 0.0874748743 0.0243401409 -0.0070274320 0.0000000000 -0.0020435691 0.0004608501 0.0000000000 0.0000000000\n" " 135.3586299298 0.2480782614 0.0758718633 -0.0220186781 0.0000000000 -0.0098284202 0.0024034582 0.0000000000 0.0000000000\n" " 48.5277674751 0.4375690658 0.1694258836 -0.0503252964 0.0000000000 -0.0454264531 0.0103657478 0.0000000000 0.0000000000\n" " 18.4574862413 0.3157185815 0.1896317701 -0.0584489572 0.0000000000 -0.1542320032 0.0386846044 0.0000000000 0.0000000000\n" " 7.0951187369 0.0349093715 -0.1561350675 0.0519518554 0.0000000000 -0.3498959381 0.0835955571 0.0000000000 0.0000000000\n" " 2.7255967144 0.0007868340 -0.6418259851 0.2969196408 0.0000000000 -0.4363611647 0.1290968861 0.0000000000 0.0000000000\n" " 1.0416239959 -0.0006880967 -0.3592395770 0.2542270212 0.0000000000 -0.2203688566 -0.0396529577 0.0000000000 0.0000000000\n" " 0.2679494348 0.0002658227 -0.0069544727 -0.7342316576 0.0000000000 -0.0131604244 -0.5256989764 0.0000000000 1.0000000000\n" " 0.0814723628 -0.0000897664 0.0000537394 -0.4823523926 1.0000000000 0.0021025311 -0.5604030966 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 36978.0006282670 -0.0007882716 -0.0002130577 0.0000647974 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 6222.2481694120 -0.0051771150 -0.0014042239 0.0004276889 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1534.4538912185 -0.0244536132 -0.0067044703 0.0020403295 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 450.9238919748 -0.0925205949 -0.0263118610 0.0080502303 0.0000000000 -0.0023114207 0.0005787895 0.0000000000 0.0000000000\n" " 147.9232376649 -0.2603320996 -0.0817937127 0.0251613391 0.0000000000 -0.0110744755 0.0029302708 0.0000000000 0.0000000000\n" " 52.8962236804 -0.4459248734 -0.1800960112 0.0569273568 0.0000000000 -0.0514807115 0.0130835082 0.0000000000 0.0000000000\n" " 20.0317880911 -0.2973279703 -0.1864541939 0.0613716013 0.0000000000 -0.1716941092 0.0469534420 0.0000000000 0.0000000000\n" " 7.7131122202 -0.0245287918 0.2031306430 -0.0738571235 0.0000000000 -0.3732355043 0.1006399940 0.0000000000 0.0000000000\n" " 2.9844774777 -0.0023042412 0.6642552121 -0.3477214528 0.0000000000 -0.4305581327 0.1364700825 0.0000000000 0.0000000000\n" " 1.1549719893 0.0014070660 0.3025676551 -0.2237894266 0.0000000000 -0.1767432863 -0.0764816331 0.0000000000 0.0000000000\n" " 0.3417880814 -0.0005342995 0.0006613566 0.7764969105 0.0000000000 -0.0060298501 -0.5504601345 0.0000000000 1.0000000000\n" " 0.1040262651 0.0001624777 0.0012215196 0.4569656329 1.0000000000 0.0003271252 -0.5191181650 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 43116.7172343791 0.0007730597 -0.0002123479 0.0000672395 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 7082.1673578265 0.0052570195 -0.0014494275 0.0004599971 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1715.6275383850 0.0252958095 -0.0070506620 0.0022334067 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 498.2117432579 0.0966015002 -0.0279836798 0.0089283399 0.0000000000 -0.0025280039 0.0006830870 0.0000000000 0.0000000000\n" " 162.0462756704 0.2714940023 -0.0872956329 0.0279726273 0.0000000000 -0.0122585511 0.0034185387 0.0000000000 0.0000000000\n" " 57.5633179334 0.4540530344 -0.1903753835 0.0630562214 0.0000000000 -0.0575128029 0.0158200681 0.0000000000 0.0000000000\n" " 21.6195597517 0.2805583500 -0.1820266755 0.0626266086 0.0000000000 -0.1899219376 0.0551163883 0.0000000000 0.0000000000\n" " 8.2917257402 0.0157911511 0.2559566728 -0.0993256380 0.0000000000 -0.3975202657 0.1178364339 0.0000000000 0.0000000000\n" " 3.2044042431 0.0036134328 0.6851219839 -0.4018617372 0.0000000000 -0.4219856265 0.1353291071 0.0000000000 0.0000000000\n" " 1.2170240277 -0.0020726487 0.2416950948 -0.1592676863 0.0000000000 -0.1356765817 -0.1271234105 0.0000000000 0.0000000000\n" " 0.4039700245 0.0008423916 -0.0069738855 0.8175488469 0.0000000000 0.0006566296 -0.5644015152 0.0000000000 1.0000000000\n" " 0.1249906733 -0.0002378905 0.0024023008 0.4114888816 1.0000000000 -0.0009601988 -0.4712031290 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 46364.8344532030 0.0008184364 -0.0002280158 0.0000744063 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 7706.7898113396 0.0054783617 -0.0015324266 0.0005015335 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1877.5451692936 0.0262477090 -0.0074240583 0.0024230800 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 545.7287407389 0.1001230552 -0.0294838852 0.0097073844 0.0000000000 -0.0027461074 0.0007848141 0.0000000000 0.0000000000\n" " 177.2908959787 0.2798008585 -0.0918074467 0.0303344403 0.0000000000 -0.0132763202 0.0038538083 0.0000000000 0.0000000000\n" " 62.8967566592 0.4581526631 -0.1981397130 0.0680013180 0.0000000000 -0.0625171637 0.0182320502 0.0000000000 0.0000000000\n" " 23.5441169015 0.2677215656 -0.1777057334 0.0631957627 0.0000000000 -0.2041393264 0.0620073474 0.0000000000 0.0000000000\n" " 9.0326811369 0.0106407066 0.2956230199 -0.1209002135 0.0000000000 -0.4143068471 0.1319770088 0.0000000000 0.0000000000\n" " 3.4989881952 0.0043383301 0.6939360980 -0.4432412739 0.0000000000 -0.4107049745 0.1291981811 0.0000000000 0.0000000000\n" " 1.2944154598 -0.0024408099 0.2012193128 -0.0872175034 0.0000000000 -0.1087289175 -0.1795956787 0.0000000000 0.0000000000\n" " 0.4597935393 0.0010574389 -0.0118044292 0.8393540477 0.0000000000 0.0044892009 -0.5671711751 0.0000000000 1.0000000000\n" " 0.1452937050 -0.0002882406 0.0030417630 0.3658485618 1.0000000000 -0.0015760776 -0.4254457201 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 53072.8297062878 0.0007941425 -0.0002240280 0.0000748195 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8898.5866473512 0.0052889972 -0.0014977931 0.0005018392 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2155.9132467432 0.0256852736 -0.0073548393 0.0024566617 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 622.2299227662 0.0989332649 -0.0294812429 0.0099393098 0.0000000000 -0.0027433029 0.0008170301 0.0000000000 0.0000000000\n" " 201.1659177255 0.2786462711 -0.0925348417 0.0313023547 0.0000000000 -0.0134329689 0.0040333465 0.0000000000 0.0000000000\n" " 71.1579472025 0.4592775456 -0.2010213397 0.0707758312 0.0000000000 -0.0636580890 0.0193733027 0.0000000000 0.0000000000\n" " 26.5980018913 0.2694532726 -0.1813760699 0.0661947452 0.0000000000 -0.2085598634 0.0657449676 0.0000000000 0.0000000000\n" " 10.2137137203 0.0105356188 0.3039220653 -0.1287172743 0.0000000000 -0.4214027465 0.1412356088 0.0000000000 0.0000000000\n" " 3.9720621706 0.0044532395 0.7006538383 -0.4686337493 0.0000000000 -0.4060028434 0.1270698508 0.0000000000 0.0000000000\n" " 1.4539972779 -0.0025226750 0.1895810330 -0.0487460947 0.0000000000 -0.0981265591 -0.2131809278 0.0000000000 0.0000000000\n" " 0.5293705047 0.0011246747 -0.0136173212 0.8447511774 0.0000000000 0.0056716141 -0.5665305364 0.0000000000 1.0000000000\n" " 0.1690528118 -0.0003035245 0.0032997478 0.3442490945 1.0000000000 -0.0017347653 -0.3971352648 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "H DZV-ALL-PADE-NEW\n" " 1\n" " 1 0 0 5 2\n" " 47.6766821949 -0.0039912598 0.0000000000\n" " 7.2138252786 -0.0254871433 0.0000000000\n" " 1.6553477814 -0.1498103667 0.0000000000\n" " 0.4620756821 -0.2465524925 0.0000000000\n" " 0.1633279056 -0.6895969065 1.0000000000\n" "#","\n" "H DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 0 5 2\n" " 47.6766821949 -0.0039912598 0.0000000000\n" " 7.2138252786 -0.0254871433 0.0000000000\n" " 1.6553477814 -0.1498103667 0.0000000000\n" " 0.4620756821 -0.2465524925 0.0000000000\n" " 0.1633279056 -0.6895969065 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "He DZV-ALL-PADE-NEW\n" " 1\n" " 1 0 0 6 2\n" " 204.6501154200 0.0030044482 0.0000000000\n" " 31.4140748450 0.0221284099 0.0000000000\n" " 7.2438462856 0.1007469582 0.0000000000\n" " 2.0171174742 0.2853415709 0.0000000000\n" " 0.5990792530 0.4724594508 0.0000000000\n" " 0.1799489287 0.2977187692 1.0000000000\n" "#","\n" "He DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 0 6 2\n" " 204.6501154200 0.0030044482 0.0000000000\n" " 31.4140748450 0.0221284099 0.0000000000\n" " 7.2438462856 0.1007469582 0.0000000000\n" " 2.0171174742 0.2853415709 0.0000000000\n" " 0.5990792530 0.4724594508 0.0000000000\n" " 0.1799489287 0.2977187692 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "Li DZV-ALL-PADE-NEW\n" " 1\n" " 1 0 0 9 3\n" " 1414.6178762780 -0.0007941411 0.0001418239 0.0000000000\n" " 212.3358889800 -0.0061171237 0.0010947690 0.0000000000\n" " 48.4297216336 -0.0308807676 0.0055808506 0.0000000000\n" " 13.7257942708 -0.1130599452 0.0210246402 0.0000000000\n" " 4.3982155076 -0.2859257427 0.0578894771 0.0000000000\n" " 1.4963572281 -0.4501773541 0.1151205889 0.0000000000\n" " 0.5121133007 -0.2748376742 0.1143680207 0.0000000000\n" " 0.0746551776 -0.0131827781 -0.5475245168 0.0000000000\n" " 0.0269341112 0.0043968126 -0.5468255164 1.0000000000\n" "#","\n" "Li DZVP-ALL-PADE-NEW\n" " 1\n" " 1 0 1 9 3 2\n" " 1414.6178762780 -0.0007941411 0.0001418239 0.0000000000 0.0000000000 0.0000000000\n" " 212.3358889800 -0.0061171237 0.0010947690 0.0000000000 0.0000000000 0.0000000000\n" " 48.4297216336 -0.0308807676 0.0055808506 0.0000000000 0.0000000000 0.0000000000\n" " 13.7257942708 -0.1130599452 0.0210246402 0.0000000000 0.0000000000 0.0000000000\n" " 4.3982155076 -0.2859257427 0.0578894771 0.0000000000 0.0000000000 0.0000000000\n" " 1.4963572281 -0.4501773541 0.1151205889 0.0000000000 0.0000000000 0.0000000000\n" " 0.5121133007 -0.2748376742 0.1143680207 0.0000000000 0.0000000000 0.0000000000\n" " 0.0746551776 -0.0131827781 -0.5475245168 0.0000000000 1.0000000000 0.0000000000\n" " 0.0269341112 0.0043968126 -0.5468255164 1.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Be DZV-ALL-PADE-NEW\n" " 1\n" " 1 0 0 9 3\n" " 2838.2104843030 -0.0007019523 0.0001432987 0.0000000000\n" " 425.9069835160 -0.0054237190 0.0011215974 0.0000000000\n" " 96.6806600316 -0.0277505669 0.0057055932 0.0000000000\n" " 27.2706499785 -0.1041047062 0.0225470947 0.0000000000\n" " 8.7532305131 -0.2746537186 0.0630242360 0.0000000000\n" " 3.0282645637 -0.4478941550 0.1362247299 0.0000000000\n" " 1.0653214420 -0.2921373841 0.1257746042 0.0000000000\n" " 0.1837410502 -0.0161597639 -0.5389829855 0.0000000000\n" " 0.0597629783 0.0044284677 -0.5743277205 1.0000000000\n" "#","\n" "Be DZVP-ALL-PADE-NEW\n" " 1\n" " 1 0 1 9 3 2\n" " 2838.2104843030 -0.0007019523 0.0001432987 0.0000000000 0.0000000000 0.0000000000\n" " 425.9069835160 -0.0054237190 0.0011215974 0.0000000000 0.0000000000 0.0000000000\n" " 96.6806600316 -0.0277505669 0.0057055932 0.0000000000 0.0000000000 0.0000000000\n" " 27.2706499785 -0.1041047062 0.0225470947 0.0000000000 0.0000000000 0.0000000000\n" " 8.7532305131 -0.2746537186 0.0630242360 0.0000000000 0.0000000000 0.0000000000\n" " 3.0282645637 -0.4478941550 0.1362247299 0.0000000000 0.0000000000 0.0000000000\n" " 1.0653214420 -0.2921373841 0.1257746042 0.0000000000 0.0000000000 0.0000000000\n" " 0.1837410502 -0.0161597639 -0.5389829855 0.0000000000 1.0000000000 0.0000000000\n" " 0.0597629783 0.0044284677 -0.5743277205 1.0000000000 0.0000000000 1.0000000000\n" "#","\n" "B DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 9 3 2\n" " 2770.6887201190 -0.0012849920 0.0002815183 0.0000000000 0.0000000000 0.0000000000\n" " 416.0177319883 -0.0098497439 0.0021926254 0.0000000000 0.0000000000 0.0000000000\n" " 94.8894954229 -0.0489833356 0.0108940076 0.0000000000 0.0000000000 0.0000000000\n" " 26.7499548442 -0.1723972150 0.0414450988 0.0000000000 0.0000000000 0.0000000000\n" " 8.4264760790 -0.4017468011 0.1087223068 0.0000000000 -0.0194224027 0.0000000000\n" " 2.8185756685 -0.4396258903 0.1880725583 0.0000000000 -0.0637848437 0.0000000000\n" " 0.8858154287 -0.0939440721 -0.0102057441 0.0000000000 -0.2445403926 0.0000000000\n" " 0.2755692515 0.0087352964 -0.6622781443 0.0000000000 -0.4653071695 0.0000000000\n" " 0.0836350993 -0.0023332765 -0.4345757818 1.0000000000 -0.4454718873 1.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "C DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 9 3 2\n" " 4266.1800613820 -0.0011943659 0.0002708392 0.0000000000 0.0000000000 0.0000000000\n" " 642.7602862562 -0.0091221647 0.0021018981 0.0000000000 0.0000000000 0.0000000000\n" " 146.7884267926 -0.0455862664 0.0104909359 0.0000000000 0.0000000000 0.0000000000\n" " 41.2743794968 -0.1645442121 0.0408993451 0.0000000000 0.0000000000 0.0000000000\n" " 12.8905294328 -0.4010362654 0.1123583959 0.0000000000 -0.0207269323 0.0000000000\n" " 4.2578431902 -0.4506526871 0.2000200876 0.0000000000 -0.0735133778 0.0000000000\n" " 1.3307568939 -0.0932928666 -0.0307479826 0.0000000000 -0.2717786632 0.0000000000\n" " 0.4108076579 0.0083827453 -0.6803273620 0.0000000000 -0.4752358588 0.0000000000\n" " 0.1203105299 -0.0021601474 -0.4075981685 1.0000000000 -0.4103141270 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "C DZVP-ALL-PADE-NEW-CONFINED\n" " 2\n" " 1 0 1 9 3 2\n" " 4632.6109261696 -0.0010491808 0.0002461448 0.0000000000 0.0000000000 0.0000000000\n" " 743.7957159823 -0.0073693327 0.0017441253 0.0000000000 0.0000000000 0.0000000000\n" " 176.9921440195 -0.0356124607 0.0084765994 0.0000000000 0.0000000000 0.0000000000\n" " 51.1239838771 -0.1296976533 0.0325377884 0.0000000000 0.0000000000 0.0000000000\n" " 16.3281731915 -0.3377322464 0.0944035645 0.0000000000 -0.0162087526 0.0000000000\n" " 5.5265358443 -0.4718174357 0.1851968433 0.0000000000 -0.0517011722 0.0000000000\n" " 1.8931812532 -0.1789961518 0.0990225545 0.0000000000 -0.2045873835 0.0000000000\n" " 0.6098030227 0.0053187867 -0.4713283667 0.0000000000 -0.4496981983 0.0000000000\n" " 0.2069219808 -0.0024734214 -0.6664084300 1.0000000000 -0.4809024290 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "N DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 9 3 2\n" " 6241.4478205000 -0.0010992714 0.0002541567 0.0000000000 0.0000000000 0.0000000000\n" " 942.7853221624 -0.0083836502 0.0019685436 0.0000000000 0.0000000000 0.0000000000\n" " 215.1071557533 -0.0422134003 0.0099007497 0.0000000000 0.0000000000 0.0000000000\n" " 60.1999725160 -0.1563225099 0.0394939433 0.0000000000 0.0000000000 0.0000000000\n" " 18.6046423067 -0.3979589501 0.1133930134 0.0000000000 -0.0210878424 0.0000000000\n" " 6.0687801071 -0.4619961627 0.2073232497 0.0000000000 -0.0789077492 0.0000000000\n" " 1.8932165206 -0.0957720636 -0.0376291073 0.0000000000 -0.2857497167 0.0000000000\n" " 0.5794472569 0.0081210319 -0.6849844121 0.0000000000 -0.4787797641 0.0000000000\n" " 0.1652321868 -0.0020517293 -0.4012545190 1.0000000000 -0.3946908536 1.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 9 3 2\n" " 8664.6907364270 -0.0010264289 0.0002401847 0.0000000000 0.0000000000 0.0000000000\n" " 1306.3804630458 -0.0078441700 0.0018629873 0.0000000000 0.0000000000 0.0000000000\n" " 297.9615739412 -0.0396596073 0.0094113620 0.0000000000 0.0000000000 0.0000000000\n" " 83.0732192337 -0.1499468244 0.0382308227 0.0000000000 0.0000000000 0.0000000000\n" " 25.4219803948 -0.3957081736 0.1138918674 0.0000000000 -0.0212313047 0.0000000000\n" " 8.2002946495 -0.4708819153 0.2122924071 0.0000000000 -0.0827974544 0.0000000000\n" " 2.5534670865 -0.0973701955 -0.0419284053 0.0000000000 -0.2949296208 0.0000000000\n" " 0.7764121612 0.0078325892 -0.6868639954 0.0000000000 -0.4802452851 0.0000000000\n" " 0.2169654766 -0.0019439564 -0.3986265721 1.0000000000 -0.3854659989 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 9 3 2\n" " 11534.0506179760 -0.0009693137 0.0002286337 0.0000000000 0.0000000000 0.0000000000\n" " 1736.4519019727 -0.0074228862 0.0017758908 0.0000000000 0.0000000000 0.0000000000\n" " 395.6947671892 -0.0376841674 0.0090123001 0.0000000000 0.0000000000 0.0000000000\n" " 109.8950434029 -0.1450177785 0.0371743948 0.0000000000 0.0000000000 0.0000000000\n" " 33.3170603602 -0.3943357740 0.1142516978 0.0000000000 -0.0213060126 0.0000000000\n" " 10.6395997010 -0.4778632959 0.2159190584 0.0000000000 -0.0858798131 0.0000000000\n" " 3.3072015847 -0.0980593066 -0.0454513631 0.0000000000 -0.3015970754 0.0000000000\n" " 1.0004259330 0.0075046051 -0.6878291319 0.0000000000 -0.4808474043 0.0000000000\n" " 0.2751462303 -0.0018293410 -0.3969701556 1.0000000000 -0.3792605287 1.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "Ne DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 9 3 2\n" " 14852.7741853830 -0.0009235872 0.0002190609 0.0000000000 0.0000000000 0.0000000000\n" " 2234.8237554633 -0.0070802740 0.0017022734 0.0000000000 0.0000000000 0.0000000000\n" " 508.8034771653 -0.0360908407 0.0086781493 0.0000000000 0.0000000000 0.0000000000\n" " 140.7349980722 -0.1411013040 0.0362883902 0.0000000000 0.0000000000 0.0000000000\n" " 42.2868226841 -0.3936017844 0.1145689028 0.0000000000 -0.0213531723 0.0000000000\n" " 13.3814738310 -0.4835123748 0.2187087359 0.0000000000 -0.0884397798 0.0000000000\n" " 4.1527137274 -0.0981106306 -0.0486085731 0.0000000000 -0.3067173307 0.0000000000\n" " 1.2509672859 0.0071501025 -0.6884074486 0.0000000000 -0.4810347809 0.0000000000\n" " 0.3396248365 -0.0017103909 -0.3956395896 1.0000000000 -0.3747659865 1.0000000000\n" " 3 2 2 1 1\n" " 1.2000000000 1.0000000000\n" "#","\n" "Na DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 21394.4924408352 0.0006997970 -0.0001723222 0.0000318328 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 3795.7378701065 0.0042288655 -0.0010411116 0.0001901524 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 985.8138826962 0.0187975202 -0.0046890691 0.0008718578 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 302.7884326942 0.0687646112 -0.0175180517 0.0031871723 0.0000000000 -0.0012633822 0.0000000000 0.0000000000\n" " 103.1219260258 0.1965820685 -0.0542917187 0.0102229243 0.0000000000 -0.0055996166 0.0000000000 0.0000000000\n" " 37.9946819901 0.3853147762 -0.1258294332 0.0229101289 0.0000000000 -0.0260567422 0.0000000000 0.0000000000\n" " 14.7704405101 0.3818197180 -0.1864438254 0.0376735175 0.0000000000 -0.0909943900 0.0000000000 0.0000000000\n" " 5.8005968867 0.0996875920 -0.0067937817 -0.0040418885 0.0000000000 -0.2388788121 0.0000000000 0.0000000000\n" " 2.2568321873 -0.0028473835 0.4371568026 -0.0847080121 0.0000000000 -0.3819119184 0.0000000000 0.0000000000\n" " 0.8574123124 0.0015751503 0.5578917664 -0.2235245000 0.0000000000 -0.3665265555 0.0000000000 0.0000000000\n" " 0.3102401678 -0.0004707246 0.1358955383 0.0003703549 0.0000000000 -0.1521385722 1.0000000000 0.0000000000\n" " 0.0425973682 0.0000637435 -0.0014197920 1.0326168980 1.0000000000 -0.0040572054 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1169000000 1.0000000000\n" "#","\n" "Mg DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 24563.3509341519 0.0007501763 -0.0001898742 0.0000432716 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4098.7281652598 0.0049866285 -0.0012662269 0.0002886160 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1006.0693449047 0.0236248415 -0.0060608521 0.0013824537 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 296.0583569831 0.0889264612 -0.0236070994 0.0053960194 0.0000000000 -0.0019014218 0.0000000000 0.0000000000\n" " 97.5602425330 0.2498577261 -0.0728218452 0.0167469733 0.0000000000 -0.0091160713 0.0000000000 0.0000000000\n" " 35.0026526821 0.4370249965 -0.1609409689 0.0376024877 0.0000000000 -0.0414328941 0.0000000000 0.0000000000\n" " 13.2894359607 0.3137343310 -0.1793620369 0.0434617096 0.0000000000 -0.1416149186 0.0000000000 0.0000000000\n" " 5.0406635723 0.0348223238 0.1488145108 -0.0386567967 0.0000000000 -0.3285471023 0.0000000000 0.0000000000\n" " 1.8767656586 0.0002090057 0.6227623758 -0.2075293171 0.0000000000 -0.4342370572 0.0000000000 0.0000000000\n" " 0.6740386983 -0.0003911930 0.3832848322 -0.2221884917 0.0000000000 -0.2719424179 0.0000000000 0.0000000000\n" " 0.1488350316 0.0001705201 0.0091106555 0.4513483785 0.0000000000 -0.0274310878 1.0000000000 0.0000000000\n" " 0.0515990826 -0.0000693922 -0.0006594960 0.6960710466 1.0000000000 0.0065925450 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Al DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 27551.3038803664 0.0007902356 0.0002051247 -0.0000539950 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4682.7618227118 0.0051091411 0.0013307487 -0.0003509552 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1166.3402011445 0.0238287095 0.0062711660 -0.0016510527 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 346.0032826675 0.0891920482 0.0243060417 -0.0064361456 0.0000000000 -0.0020283510 0.0003943314 0.0000000000\n" " 114.4719182078 0.2502089639 0.0749256824 -0.0198886400 0.0000000000 -0.0096153064 0.0020649970 0.0000000000\n" " 41.1999175687 0.4367661056 0.1656890319 -0.0450859057 0.0000000000 -0.0438990222 0.0086117474 0.0000000000\n" " 15.7012333530 0.3125973574 0.1836095416 -0.0512412586 0.0000000000 -0.1486831836 0.0325680927 0.0000000000\n" " 6.0142665071 0.0345570290 -0.1524355487 0.0448540103 0.0000000000 -0.3395431168 0.0689924793 0.0000000000\n" " 2.2830453817 0.0004891428 -0.6319413645 0.2602793107 0.0000000000 -0.4356046359 0.1128895908 0.0000000000\n" " 0.8490703600 -0.0005055118 -0.3717923282 0.2367424774 0.0000000000 -0.2445346410 -0.0215336434 0.0000000000\n" " 0.1896189412 0.0001917544 -0.0078124700 -0.7037552451 0.0000000000 -0.0176080423 -0.4885175925 0.0000000000\n" " 0.0590458267 -0.0000711837 0.0005957043 -0.4830773513 1.0000000000 0.0038180642 -0.5990452444 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Si DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 34205.8807706528 0.0007327188 0.0001943796 -0.0000558389 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 5705.2071864975 0.0048710223 0.0012962263 -0.0003727797 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1400.9000355114 0.0230910203 0.0062095461 -0.0017849346 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 411.6831259844 0.0874748743 0.0243401409 -0.0070274320 0.0000000000 -0.0020435691 0.0004608501 0.0000000000\n" " 135.3586299298 0.2480782614 0.0758718633 -0.0220186781 0.0000000000 -0.0098284202 0.0024034582 0.0000000000\n" " 48.5277674751 0.4375690658 0.1694258836 -0.0503252964 0.0000000000 -0.0454264531 0.0103657478 0.0000000000\n" " 18.4574862413 0.3157185815 0.1896317701 -0.0584489572 0.0000000000 -0.1542320032 0.0386846044 0.0000000000\n" " 7.0951187369 0.0349093715 -0.1561350675 0.0519518554 0.0000000000 -0.3498959381 0.0835955571 0.0000000000\n" " 2.7255967144 0.0007868340 -0.6418259851 0.2969196408 0.0000000000 -0.4363611647 0.1290968861 0.0000000000\n" " 1.0416239959 -0.0006880967 -0.3592395770 0.2542270212 0.0000000000 -0.2203688566 -0.0396529577 0.0000000000\n" " 0.2679494348 0.0002658227 -0.0069544727 -0.7342316576 0.0000000000 -0.0131604244 -0.5256989764 0.0000000000\n" " 0.0814723628 -0.0000897664 0.0000537394 -0.4823523926 1.0000000000 0.0021025311 -0.5604030966 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "Si DZVP-ALL-PADE-NEW-CONFINED\n" " 2\n" " 1 0 1 12 4 3\n" " 34205.8807706528 -0.0007250833 -0.0001923205 -0.0000562487 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 5862.8987880849 -0.0046320509 -0.0012317373 -0.0003597167 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1469.7841832649 -0.0215037349 -0.0057791418 -0.0016933695 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 437.7710897905 -0.0808773954 -0.0224211779 -0.0065639379 0.0000000000 -0.0018310926 0.0004497923 0.0000000000\n" " 145.2906854908 -0.2311846174 -0.0700642670 -0.0207468988 0.0000000000 -0.0086848321 0.0022634300 0.0000000000\n" " 52.4935101069 -0.4235892976 -0.1594640775 -0.0477647759 0.0000000000 -0.0401672864 0.0099776953 0.0000000000\n" " 20.1350286776 -0.3395538298 -0.1966123125 -0.0622802590 0.0000000000 -0.1384353363 0.0369505072 0.0000000000\n" " 7.7970699880 -0.0514349592 0.1015781624 0.0362142447 0.0000000000 -0.3280724073 0.0855552742 0.0000000000\n" " 3.0126365952 0.0007938866 0.6138991409 0.2684108647 0.0000000000 -0.4389286243 0.1342617724 0.0000000000\n" " 1.1536933283 0.0000152963 0.4217267721 0.3164997698 0.0000000000 -0.2544553578 -0.0014632113 0.0000000000\n" " 0.3215383280 -0.0000675058 0.0171213835 -0.5537569632 0.0000000000 -0.0222713737 -0.4583562382 0.0000000000\n" " 0.1132249636 0.0000282717 -0.0013106938 -0.6608856513 1.0000000000 0.0035467037 -0.6194427763 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 36978.0006282670 -0.0007882716 -0.0002130577 0.0000647974 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 6222.2481694120 -0.0051771150 -0.0014042239 0.0004276889 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1534.4538912185 -0.0244536132 -0.0067044703 0.0020403295 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 450.9238919748 -0.0925205949 -0.0263118610 0.0080502303 0.0000000000 -0.0023114207 0.0005787895 0.0000000000\n" " 147.9232376649 -0.2603320996 -0.0817937127 0.0251613391 0.0000000000 -0.0110744755 0.0029302708 0.0000000000\n" " 52.8962236804 -0.4459248734 -0.1800960112 0.0569273568 0.0000000000 -0.0514807115 0.0130835082 0.0000000000\n" " 20.0317880911 -0.2973279703 -0.1864541939 0.0613716013 0.0000000000 -0.1716941092 0.0469534420 0.0000000000\n" " 7.7131122202 -0.0245287918 0.2031306430 -0.0738571235 0.0000000000 -0.3732355043 0.1006399940 0.0000000000\n" " 2.9844774777 -0.0023042412 0.6642552121 -0.3477214528 0.0000000000 -0.4305581327 0.1364700825 0.0000000000\n" " 1.1549719893 0.0014070660 0.3025676551 -0.2237894266 0.0000000000 -0.1767432863 -0.0764816331 0.0000000000\n" " 0.3417880814 -0.0005342995 0.0006613566 0.7764969105 0.0000000000 -0.0060298501 -0.5504601345 0.0000000000\n" " 0.1040262651 0.0001624777 0.0012215196 0.4569656329 1.0000000000 0.0003271252 -0.5191181650 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 43116.7172343791 0.0007730597 -0.0002123479 0.0000672395 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 7082.1673578265 0.0052570195 -0.0014494275 0.0004599971 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1715.6275383850 0.0252958095 -0.0070506620 0.0022334067 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 498.2117432579 0.0966015002 -0.0279836798 0.0089283399 0.0000000000 -0.0025280039 0.0006830870 0.0000000000\n" " 162.0462756704 0.2714940023 -0.0872956329 0.0279726273 0.0000000000 -0.0122585511 0.0034185387 0.0000000000\n" " 57.5633179334 0.4540530344 -0.1903753835 0.0630562214 0.0000000000 -0.0575128029 0.0158200681 0.0000000000\n" " 21.6195597517 0.2805583500 -0.1820266755 0.0626266086 0.0000000000 -0.1899219376 0.0551163883 0.0000000000\n" " 8.2917257402 0.0157911511 0.2559566728 -0.0993256380 0.0000000000 -0.3975202657 0.1178364339 0.0000000000\n" " 3.2044042431 0.0036134328 0.6851219839 -0.4018617372 0.0000000000 -0.4219856265 0.1353291071 0.0000000000\n" " 1.2170240277 -0.0020726487 0.2416950948 -0.1592676863 0.0000000000 -0.1356765817 -0.1271234105 0.0000000000\n" " 0.4039700245 0.0008423916 -0.0069738855 0.8175488469 0.0000000000 0.0006566296 -0.5644015152 0.0000000000\n" " 0.1249906733 -0.0002378905 0.0024023008 0.4114888816 1.0000000000 -0.0009601988 -0.4712031290 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 46364.8344532030 0.0008184364 -0.0002280158 0.0000744063 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 7706.7898113396 0.0054783617 -0.0015324266 0.0005015335 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1877.5451692936 0.0262477090 -0.0074240583 0.0024230800 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 545.7287407389 0.1001230552 -0.0294838852 0.0097073844 0.0000000000 -0.0027461074 0.0007848141 0.0000000000\n" " 177.2908959787 0.2798008585 -0.0918074467 0.0303344403 0.0000000000 -0.0132763202 0.0038538083 0.0000000000\n" " 62.8967566592 0.4581526631 -0.1981397130 0.0680013180 0.0000000000 -0.0625171637 0.0182320502 0.0000000000\n" " 23.5441169015 0.2677215656 -0.1777057334 0.0631957627 0.0000000000 -0.2041393264 0.0620073474 0.0000000000\n" " 9.0326811369 0.0106407066 0.2956230199 -0.1209002135 0.0000000000 -0.4143068471 0.1319770088 0.0000000000\n" " 3.4989881952 0.0043383301 0.6939360980 -0.4432412739 0.0000000000 -0.4107049745 0.1291981811 0.0000000000\n" " 1.2944154598 -0.0024408099 0.2012193128 -0.0872175034 0.0000000000 -0.1087289175 -0.1795956787 0.0000000000\n" " 0.4597935393 0.0010574389 -0.0118044292 0.8393540477 0.0000000000 0.0044892009 -0.5671711751 0.0000000000\n" " 0.1452937050 -0.0002882406 0.0030417630 0.3658485618 1.0000000000 -0.0015760776 -0.4254457201 1.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 53072.8297062878 0.0007941425 -0.0002240280 0.0000748195 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8898.5866473512 0.0052889972 -0.0014977931 0.0005018392 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2155.9132467432 0.0256852736 -0.0073548393 0.0024566617 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 622.2299227662 0.0989332649 -0.0294812429 0.0099393098 0.0000000000 -0.0027433029 0.0008170301 0.0000000000\n" " 201.1659177255 0.2786462711 -0.0925348417 0.0313023547 0.0000000000 -0.0134329689 0.0040333465 0.0000000000\n" " 71.1579472025 0.4592775456 -0.2010213397 0.0707758312 0.0000000000 -0.0636580890 0.0193733027 0.0000000000\n" " 26.5980018913 0.2694532726 -0.1813760699 0.0661947452 0.0000000000 -0.2085598634 0.0657449676 0.0000000000\n" " 10.2137137203 0.0105356188 0.3039220653 -0.1287172743 0.0000000000 -0.4214027465 0.1412356088 0.0000000000\n" " 3.9720621706 0.0044532395 0.7006538383 -0.4686337493 0.0000000000 -0.4060028434 0.1270698508 0.0000000000\n" " 1.4539972779 -0.0025226750 0.1895810330 -0.0487460947 0.0000000000 -0.0981265591 -0.2131809278 0.0000000000\n" " 0.5293705047 0.0011246747 -0.0136173212 0.8447511774 0.0000000000 0.0056716141 -0.5665305364 0.0000000000\n" " 0.1690528118 -0.0003035245 0.0032997478 0.3442490945 1.0000000000 -0.0017347653 -0.3971352648 1.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "H TZV-ALL-PADE\n" " 1\n" " 1 0 0 5 3\n" " 47.6766821949 -0.0039912598 0.0000000000 0.0000000000\n" " 7.2138252786 -0.0254871433 0.0000000000 0.0000000000\n" " 1.6553477814 -0.1498103667 0.0000000000 0.0000000000\n" " 0.4620756821 -0.2465524925 1.0000000000 0.0000000000\n" " 0.1633279056 -0.6895969065 0.0000000000 1.0000000000\n" "#","\n" "H TZVP-ALL-PADE\n" " 2\n" " 1 0 0 5 3\n" " 47.6766821949 -0.0039912598 0.0000000000 0.0000000000\n" " 7.2138252786 -0.0254871433 0.0000000000 0.0000000000\n" " 1.6553477814 -0.1498103667 0.0000000000 0.0000000000\n" " 0.4620756821 -0.2465524925 1.0000000000 0.0000000000\n" " 0.1633279056 -0.6895969065 0.0000000000 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "He TZV-ALL-PADE\n" " 1\n" " 1 0 0 6 3\n" " 204.6501154200 0.0030044482 0.0000000000 0.0000000000\n" " 31.4140748450 0.0221284099 0.0000000000 0.0000000000\n" " 7.2438462856 0.1007469582 0.0000000000 0.0000000000\n" " 2.0171174742 0.2853415709 0.0000000000 0.0000000000\n" " 0.5990792530 0.4724594508 1.0000000000 0.0000000000\n" " 0.1799489287 0.2977187692 0.0000000000 1.0000000000\n" "#","\n" "He TZVP-ALL-PADE\n" " 2\n" " 1 0 0 6 3\n" " 204.6501154200 0.0030044482 0.0000000000 0.0000000000\n" " 31.4140748450 0.0221284099 0.0000000000 0.0000000000\n" " 7.2438462856 0.1007469582 0.0000000000 0.0000000000\n" " 2.0171174742 0.2853415709 0.0000000000 0.0000000000\n" " 0.5990792530 0.4724594508 1.0000000000 0.0000000000\n" " 0.1799489287 0.2977187692 0.0000000000 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "B TZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 4 3\n" " 2770.6887201190 -0.0012849920 0.0002815183 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 416.0177319883 -0.0098497439 0.0021926254 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 94.8894954229 -0.0489833356 0.0108940076 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 26.7499548442 -0.1723972150 0.0414450988 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.4264760790 -0.4017468011 0.1087223068 0.0000000000 0.0000000000 -0.0194224027 0.0000000000 0.0000000000\n" " 2.8185756685 -0.4396258903 0.1880725583 0.0000000000 0.0000000000 -0.0637848437 0.0000000000 0.0000000000\n" " 0.8858154287 -0.0939440721 -0.0102057441 0.0000000000 0.0000000000 -0.2445403926 0.0000000000 0.0000000000\n" " 0.2755692515 0.0087352964 -0.6622781443 1.0000000000 0.0000000000 -0.4653071695 1.0000000000 0.0000000000\n" " 0.0836350993 -0.0023332765 -0.4345757818 0.0000000000 1.0000000000 -0.4454718873 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "C TZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 4 3\n" " 4266.1800613820 -0.0011943659 0.0002708392 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 642.7602862562 -0.0091221647 0.0021018981 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 146.7884267926 -0.0455862664 0.0104909359 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 41.2743794968 -0.1645442121 0.0408993451 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 12.8905294328 -0.4010362654 0.1123583959 0.0000000000 0.0000000000 -0.0207269323 0.0000000000 0.0000000000\n" " 4.2578431902 -0.4506526871 0.2000200876 0.0000000000 0.0000000000 -0.0735133778 0.0000000000 0.0000000000\n" " 1.3307568939 -0.0932928666 -0.0307479826 0.0000000000 0.0000000000 -0.2717786632 0.0000000000 0.0000000000\n" " 0.4108076579 0.0083827453 -0.6803273620 1.0000000000 0.0000000000 -0.4752358588 1.0000000000 0.0000000000\n" " 0.1203105299 -0.0021601474 -0.4075981685 0.0000000000 1.0000000000 -0.4103141270 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "N TZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 4 3\n" " 6241.4478205000 -0.0010992714 0.0002541567 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 942.7853221624 -0.0083836502 0.0019685436 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 215.1071557533 -0.0422134003 0.0099007497 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 60.1999725160 -0.1563225099 0.0394939433 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 18.6046423067 -0.3979589501 0.1133930134 0.0000000000 0.0000000000 -0.0210878424 0.0000000000 0.0000000000\n" " 6.0687801071 -0.4619961627 0.2073232497 0.0000000000 0.0000000000 -0.0789077492 0.0000000000 0.0000000000\n" " 1.8932165206 -0.0957720636 -0.0376291073 0.0000000000 0.0000000000 -0.2857497167 0.0000000000 0.0000000000\n" " 0.5794472569 0.0081210319 -0.6849844121 1.0000000000 0.0000000000 -0.4787797641 1.0000000000 0.0000000000\n" " 0.1652321868 -0.0020517293 -0.4012545190 0.0000000000 1.0000000000 -0.3946908536 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O TZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 4 3\n" " 8664.6907364270 -0.0010264289 0.0002401847 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1306.3804630458 -0.0078441700 0.0018629873 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 297.9615739412 -0.0396596073 0.0094113620 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 83.0732192337 -0.1499468244 0.0382308227 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 25.4219803948 -0.3957081736 0.1138918674 0.0000000000 0.0000000000 -0.0212313047 0.0000000000 0.0000000000\n" " 8.2002946495 -0.4708819153 0.2122924071 0.0000000000 0.0000000000 -0.0827974544 0.0000000000 0.0000000000\n" " 2.5534670865 -0.0973701955 -0.0419284053 0.0000000000 0.0000000000 -0.2949296208 0.0000000000 0.0000000000\n" " 0.7764121612 0.0078325892 -0.6868639954 1.0000000000 0.0000000000 -0.4802452851 1.0000000000 0.0000000000\n" " 0.2169654766 -0.0019439564 -0.3986265721 0.0000000000 1.0000000000 -0.3854659989 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F TZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 4 3\n" " 11534.0506179760 -0.0009693137 0.0002286337 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1736.4519019727 -0.0074228862 0.0017758908 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 395.6947671892 -0.0376841674 0.0090123001 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 109.8950434029 -0.1450177785 0.0371743948 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 33.3170603602 -0.3943357740 0.1142516978 0.0000000000 0.0000000000 -0.0213060126 0.0000000000 0.0000000000\n" " 10.6395997010 -0.4778632959 0.2159190584 0.0000000000 0.0000000000 -0.0858798131 0.0000000000 0.0000000000\n" " 3.3072015847 -0.0980593066 -0.0454513631 0.0000000000 0.0000000000 -0.3015970754 0.0000000000 0.0000000000\n" " 1.0004259330 0.0075046051 -0.6878291319 1.0000000000 0.0000000000 -0.4808474043 1.0000000000 0.0000000000\n" " 0.2751462303 -0.0018293410 -0.3969701556 0.0000000000 1.0000000000 -0.3792605287 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "Ne TZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 4 3\n" " 14852.7741853830 -0.0009235872 0.0002190609 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2234.8237554633 -0.0070802740 0.0017022734 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 508.8034771653 -0.0360908407 0.0086781493 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 140.7349980722 -0.1411013040 0.0362883902 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 42.2868226841 -0.3936017844 0.1145689028 0.0000000000 0.0000000000 -0.0213531723 0.0000000000 0.0000000000\n" " 13.3814738310 -0.4835123748 0.2187087359 0.0000000000 0.0000000000 -0.0884397798 0.0000000000 0.0000000000\n" " 4.1527137274 -0.0981106306 -0.0486085731 0.0000000000 0.0000000000 -0.3067173307 0.0000000000 0.0000000000\n" " 1.2509672859 0.0071501025 -0.6884074486 1.0000000000 0.0000000000 -0.4810347809 1.0000000000 0.0000000000\n" " 0.3396248365 -0.0017103909 -0.3956395896 0.0000000000 1.0000000000 -0.3747659865 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 1.2000000000 1.0000000000\n" "#","\n" "Al TZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 5 4\n" " 27551.3038803664 0.0007902356 0.0002051247 -0.0000539950 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4682.7618227118 0.0051091411 0.0013307487 -0.0003509552 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1166.3402011445 0.0238287095 0.0062711660 -0.0016510527 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 346.0032826675 0.0891920482 0.0243060417 -0.0064361456 0.0000000000 0.0000000000 -0.0020283510 0.0003943314 0.0000000000 0.0000000000\n" " 114.4719182078 0.2502089639 0.0749256824 -0.0198886400 0.0000000000 0.0000000000 -0.0096153064 0.0020649970 0.0000000000 0.0000000000\n" " 41.1999175687 0.4367661056 0.1656890319 -0.0450859057 0.0000000000 0.0000000000 -0.0438990222 0.0086117474 0.0000000000 0.0000000000\n" " 15.7012333530 0.3125973574 0.1836095416 -0.0512412586 0.0000000000 0.0000000000 -0.1486831836 0.0325680927 0.0000000000 0.0000000000\n" " 6.0142665071 0.0345570290 -0.1524355487 0.0448540103 0.0000000000 0.0000000000 -0.3395431168 0.0689924793 0.0000000000 0.0000000000\n" " 2.2830453817 0.0004891428 -0.6319413645 0.2602793107 0.0000000000 0.0000000000 -0.4356046359 0.1128895908 0.0000000000 0.0000000000\n" " 0.8490703600 -0.0005055118 -0.3717923282 0.2367424774 0.0000000000 0.0000000000 -0.2445346410 -0.0215336434 0.0000000000 0.0000000000\n" " 0.1896189412 0.0001917544 -0.0078124700 -0.7037552451 1.0000000000 0.0000000000 -0.0176080423 -0.4885175925 1.0000000000 0.0000000000\n" " 0.0590458267 -0.0000711837 0.0005957043 -0.4830773513 0.0000000000 1.0000000000 0.0038180642 -0.5990452444 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Si TZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 5 4\n" " 34205.8807706528 0.0007327188 0.0001943796 -0.0000558389 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 5705.2071864975 0.0048710223 0.0012962263 -0.0003727797 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1400.9000355114 0.0230910203 0.0062095461 -0.0017849346 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 411.6831259844 0.0874748743 0.0243401409 -0.0070274320 0.0000000000 0.0000000000 -0.0020435691 0.0004608501 0.0000000000 0.0000000000\n" " 135.3586299298 0.2480782614 0.0758718633 -0.0220186781 0.0000000000 0.0000000000 -0.0098284202 0.0024034582 0.0000000000 0.0000000000\n" " 48.5277674751 0.4375690658 0.1694258836 -0.0503252964 0.0000000000 0.0000000000 -0.0454264531 0.0103657478 0.0000000000 0.0000000000\n" " 18.4574862413 0.3157185815 0.1896317701 -0.0584489572 0.0000000000 0.0000000000 -0.1542320032 0.0386846044 0.0000000000 0.0000000000\n" " 7.0951187369 0.0349093715 -0.1561350675 0.0519518554 0.0000000000 0.0000000000 -0.3498959381 0.0835955571 0.0000000000 0.0000000000\n" " 2.7255967144 0.0007868340 -0.6418259851 0.2969196408 0.0000000000 0.0000000000 -0.4363611647 0.1290968861 0.0000000000 0.0000000000\n" " 1.0416239959 -0.0006880967 -0.3592395770 0.2542270212 0.0000000000 0.0000000000 -0.2203688566 -0.0396529577 0.0000000000 0.0000000000\n" " 0.2679494348 0.0002658227 -0.0069544727 -0.7342316576 1.0000000000 0.0000000000 -0.0131604244 -0.5256989764 1.0000000000 0.0000000000\n" " 0.0814723628 -0.0000897664 0.0000537394 -0.4823523926 0.0000000000 1.0000000000 0.0021025311 -0.5604030966 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P TZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 5 4\n" " 36978.0006282670 -0.0007882716 -0.0002130577 0.0000647974 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 6222.2481694120 -0.0051771150 -0.0014042239 0.0004276889 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1534.4538912185 -0.0244536132 -0.0067044703 0.0020403295 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 450.9238919748 -0.0925205949 -0.0263118610 0.0080502303 0.0000000000 0.0000000000 -0.0023114207 0.0005787895 0.0000000000 0.0000000000\n" " 147.9232376649 -0.2603320996 -0.0817937127 0.0251613391 0.0000000000 0.0000000000 -0.0110744755 0.0029302708 0.0000000000 0.0000000000\n" " 52.8962236804 -0.4459248734 -0.1800960112 0.0569273568 0.0000000000 0.0000000000 -0.0514807115 0.0130835082 0.0000000000 0.0000000000\n" " 20.0317880911 -0.2973279703 -0.1864541939 0.0613716013 0.0000000000 0.0000000000 -0.1716941092 0.0469534420 0.0000000000 0.0000000000\n" " 7.7131122202 -0.0245287918 0.2031306430 -0.0738571235 0.0000000000 0.0000000000 -0.3732355043 0.1006399940 0.0000000000 0.0000000000\n" " 2.9844774777 -0.0023042412 0.6642552121 -0.3477214528 0.0000000000 0.0000000000 -0.4305581327 0.1364700825 0.0000000000 0.0000000000\n" " 1.1549719893 0.0014070660 0.3025676551 -0.2237894266 0.0000000000 0.0000000000 -0.1767432863 -0.0764816331 0.0000000000 0.0000000000\n" " 0.3417880814 -0.0005342995 0.0006613566 0.7764969105 1.0000000000 0.0000000000 -0.0060298501 -0.5504601345 1.0000000000 0.0000000000\n" " 0.1040262651 0.0001624777 0.0012215196 0.4569656329 0.0000000000 1.0000000000 0.0003271252 -0.5191181650 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S TZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 5 4\n" " 43116.7172343791 0.0007730597 -0.0002123479 0.0000672395 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 7082.1673578265 0.0052570195 -0.0014494275 0.0004599971 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1715.6275383850 0.0252958095 -0.0070506620 0.0022334067 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 498.2117432579 0.0966015002 -0.0279836798 0.0089283399 0.0000000000 0.0000000000 -0.0025280039 0.0006830870 0.0000000000 0.0000000000\n" " 162.0462756704 0.2714940023 -0.0872956329 0.0279726273 0.0000000000 0.0000000000 -0.0122585511 0.0034185387 0.0000000000 0.0000000000\n" " 57.5633179334 0.4540530344 -0.1903753835 0.0630562214 0.0000000000 0.0000000000 -0.0575128029 0.0158200681 0.0000000000 0.0000000000\n" " 21.6195597517 0.2805583500 -0.1820266755 0.0626266086 0.0000000000 0.0000000000 -0.1899219376 0.0551163883 0.0000000000 0.0000000000\n" " 8.2917257402 0.0157911511 0.2559566728 -0.0993256380 0.0000000000 0.0000000000 -0.3975202657 0.1178364339 0.0000000000 0.0000000000\n" " 3.2044042431 0.0036134328 0.6851219839 -0.4018617372 0.0000000000 0.0000000000 -0.4219856265 0.1353291071 0.0000000000 0.0000000000\n" " 1.2170240277 -0.0020726487 0.2416950948 -0.1592676863 0.0000000000 0.0000000000 -0.1356765817 -0.1271234105 0.0000000000 0.0000000000\n" " 0.4039700245 0.0008423916 -0.0069738855 0.8175488469 1.0000000000 0.0000000000 0.0006566296 -0.5644015152 1.0000000000 0.0000000000\n" " 0.1249906733 -0.0002378905 0.0024023008 0.4114888816 0.0000000000 1.0000000000 -0.0009601988 -0.4712031290 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl TZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 5 4\n" " 46364.8344532030 0.0008184364 -0.0002280158 0.0000744063 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 7706.7898113396 0.0054783617 -0.0015324266 0.0005015335 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1877.5451692936 0.0262477090 -0.0074240583 0.0024230800 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 545.7287407389 0.1001230552 -0.0294838852 0.0097073844 0.0000000000 0.0000000000 -0.0027461074 0.0007848141 0.0000000000 0.0000000000\n" " 177.2908959787 0.2798008585 -0.0918074467 0.0303344403 0.0000000000 0.0000000000 -0.0132763202 0.0038538083 0.0000000000 0.0000000000\n" " 62.8967566592 0.4581526631 -0.1981397130 0.0680013180 0.0000000000 0.0000000000 -0.0625171637 0.0182320502 0.0000000000 0.0000000000\n" " 23.5441169015 0.2677215656 -0.1777057334 0.0631957627 0.0000000000 0.0000000000 -0.2041393264 0.0620073474 0.0000000000 0.0000000000\n" " 9.0326811369 0.0106407066 0.2956230199 -0.1209002135 0.0000000000 0.0000000000 -0.4143068471 0.1319770088 0.0000000000 0.0000000000\n" " 3.4989881952 0.0043383301 0.6939360980 -0.4432412739 0.0000000000 0.0000000000 -0.4107049745 0.1291981811 0.0000000000 0.0000000000\n" " 1.2944154598 -0.0024408099 0.2012193128 -0.0872175034 0.0000000000 0.0000000000 -0.1087289175 -0.1795956787 0.0000000000 0.0000000000\n" " 0.4597935393 0.0010574389 -0.0118044292 0.8393540477 1.0000000000 0.0000000000 0.0044892009 -0.5671711751 1.0000000000 0.0000000000\n" " 0.1452937050 -0.0002882406 0.0030417630 0.3658485618 0.0000000000 1.0000000000 -0.0015760776 -0.4254457201 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar TZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 5 4\n" " 53072.8297062878 0.0007941425 -0.0002240280 0.0000748195 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8898.5866473512 0.0052889972 -0.0014977931 0.0005018392 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2155.9132467432 0.0256852736 -0.0073548393 0.0024566617 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 622.2299227662 0.0989332649 -0.0294812429 0.0099393098 0.0000000000 0.0000000000 -0.0027433029 0.0008170301 0.0000000000 0.0000000000\n" " 201.1659177255 0.2786462711 -0.0925348417 0.0313023547 0.0000000000 0.0000000000 -0.0134329689 0.0040333465 0.0000000000 0.0000000000\n" " 71.1579472025 0.4592775456 -0.2010213397 0.0707758312 0.0000000000 0.0000000000 -0.0636580890 0.0193733027 0.0000000000 0.0000000000\n" " 26.5980018913 0.2694532726 -0.1813760699 0.0661947452 0.0000000000 0.0000000000 -0.2085598634 0.0657449676 0.0000000000 0.0000000000\n" " 10.2137137203 0.0105356188 0.3039220653 -0.1287172743 0.0000000000 0.0000000000 -0.4214027465 0.1412356088 0.0000000000 0.0000000000\n" " 3.9720621706 0.0044532395 0.7006538383 -0.4686337493 0.0000000000 0.0000000000 -0.4060028434 0.1270698508 0.0000000000 0.0000000000\n" " 1.4539972779 -0.0025226750 0.1895810330 -0.0487460947 0.0000000000 0.0000000000 -0.0981265591 -0.2131809278 0.0000000000 0.0000000000\n" " 0.5293705047 0.0011246747 -0.0136173212 0.8447511774 1.0000000000 0.0000000000 0.0056716141 -0.5665305364 1.0000000000 0.0000000000\n" " 0.1690528118 -0.0003035245 0.0032997478 0.3442490945 0.0000000000 1.0000000000 -0.0017347653 -0.3971352648 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "H DZV-ALL-BLYP\n" " 1\n" " 1 0 0 5 2\n" " 47.6766821949 -0.0043584463 0.0000000000\n" " 7.2138252786 -0.0280413054 0.0000000000\n" " 1.6553477814 -0.1607911988 0.0000000000\n" " 0.4620756821 -0.2616974130 0.0000000000\n" " 0.1633279056 -0.6663250351 1.0000000000\n" "#","\n" "H DZVP-ALL-BLYP\n" " 2\n" " 1 0 0 5 2\n" " 47.6766821949 -0.0043584463 0.0000000000\n" " 7.2138252786 -0.0280413054 0.0000000000\n" " 1.6553477814 -0.1607911988 0.0000000000\n" " 0.4620756821 -0.2616974130 0.0000000000\n" " 0.1633279056 -0.6663250351 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O TZVP-ALL-BLYP\n" " 2\n" " 1 0 1 9 4 3\n" " 8664.6907364270 -0.0010398418 0.0002426467 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1304.2944310248 -0.0079828203 0.0018962898 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 295.9693605095 -0.0406371136 0.0096067682 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 82.2047238380 -0.1536198678 0.0392806838 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 25.1299697483 -0.4014912128 0.1153729549 0.0000000000 0.0000000000 -0.0218982495 0.0000000000 0.0000000000\n" " 8.1128473457 -0.4659531883 0.2128198124 0.0000000000 0.0000000000 -0.0836678585 0.0000000000 0.0000000000\n" " 2.5105499839 -0.0915561133 -0.0513764869 0.0000000000 0.0000000000 -0.2995070193 0.0000000000 0.0000000000\n" " 0.7657968411 0.0075189734 -0.7008547943 1.0000000000 0.0000000000 -0.4814704278 1.0000000000 0.0000000000\n" " 0.2109431242 -0.0018090393 -0.3792651362 0.0000000000 1.0000000000 -0.3804918653 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F TZVP-ALL-BLYP\n" " 2\n" " 1 0 1 9 4 3\n" " 11534.0506179760 -0.0009798237 0.0002305539 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1736.4518540745 -0.0075252319 0.0018012871 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 393.7045510622 -0.0384982409 0.0091753398 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 108.8690799446 -0.1483161618 0.0381319658 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 32.9489612499 -0.4001274801 0.1157679180 0.0000000000 0.0000000000 -0.0219498202 0.0000000000 0.0000000000\n" " 10.5255415538 -0.4733020735 0.2166396110 0.0000000000 0.0000000000 -0.0867958235 0.0000000000 0.0000000000\n" " 3.2533274751 -0.0924284355 -0.0553420468 0.0000000000 0.0000000000 -0.3063025367 0.0000000000 0.0000000000\n" " 0.9849075495 0.0071803551 -0.7013315907 1.0000000000 0.0000000000 -0.4827220806 1.0000000000 0.0000000000\n" " 0.2674718721 -0.0017014451 -0.3775933468 0.0000000000 1.0000000000 -0.3732467322 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "H 6-31G*\n" " 2\n" " 1 0 0 3 1\n" " 18.7311369600 0.0334946043\n" " 2.8253943650 0.2347269535\n" " 0.6401216923 0.8137573262\n" " 2 0 0 1 1\n" " 0.1612777588 1.0000000000\n" "#","\n" "He 6-31G*\n" " 2\n" " 1 0 0 3 1\n" " 38.4216340000 0.0237660000\n" " 5.7780300000 0.1546790000\n" " 1.2417740000 0.4696300000\n" " 2 0 0 1 1\n" " 0.2979640000 1.0000000000\n" "#","\n" "Li 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 642.4189150000 0.0021426078\n" " 96.7985153000 0.0162088715\n" " 22.0911212000 0.0773155725\n" " 6.2010702500 0.2457860520\n" " 1.9351176800 0.4701890040\n" " 0.6367357890 0.3454708450\n" " 2 0 1 3 1 1\n" " 2.3249184080 -0.0350917459 0.0089415080\n" " 0.6324303556 -0.1912328440 0.1410094640\n" " 0.0790534347 1.0839878000 0.9453636950\n" " 3 0 1 1 1 1\n" " 0.0359619718 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.2000000000 1.0000000000\n" "#","\n" "Be 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 1264.5856900000 0.0019447576\n" " 189.9368060000 0.0148350520\n" " 43.1590890000 0.0720905463\n" " 12.0986627000 0.2371541500\n" " 3.8063232200 0.4691986520\n" " 1.2728903000 0.3565202280\n" " 2 0 1 3 1 1\n" " 3.1964630980 -0.1126487290 0.0559801998\n" " 0.7478133038 -0.2295064090 0.2615506110\n" " 0.2199663302 1.1869167700 0.7939723390\n" " 3 0 1 1 1 1\n" " 0.0823099007 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "B 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 2068.8822500000 0.0018662746\n" " 310.6495700000 0.0142514817\n" " 70.6830330000 0.0695516185\n" " 19.8610803000 0.2325729330\n" " 6.2993048400 0.4670787120\n" " 2.1270269700 0.3634314400\n" " 2 0 1 3 1 1\n" " 4.7279710710 -0.1303937970 0.0745975799\n" " 1.1903377360 -0.1307889510 0.3078466770\n" " 0.3594116829 1.1309444800 0.7434568340\n" " 3 0 1 1 1 1\n" " 0.1267512469 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "C 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 3047.5248800000 0.0018347371\n" " 457.3695180000 0.0140373228\n" " 103.9486850000 0.0688426222\n" " 29.2101553000 0.2321844430\n" " 9.2866629600 0.4679413480\n" " 3.1639269600 0.3623119850\n" " 2 0 1 3 1 1\n" " 7.8682723500 -0.1193324200 0.0689990666\n" " 1.8812885400 -0.1608541520 0.3164239610\n" " 0.5442492580 1.1434564400 0.7443082910\n" " 3 0 1 1 1 1\n" " 0.1687144782 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "N 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 4173.5114600000 0.0018347722\n" " 627.4579110000 0.0139946270\n" " 142.9020930000 0.0685865518\n" " 40.2343293000 0.2322408730\n" " 12.8202129000 0.4690699480\n" " 4.3904370100 0.3604551990\n" " 2 0 1 3 1 1\n" " 11.6263618600 -0.1149611820 0.0675797439\n" " 2.7162798070 -0.1691174790 0.3239072960\n" " 0.7722183966 1.1458519500 0.7408951400\n" " 3 0 1 1 1 1\n" " 0.2120314975 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "O 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 5484.6716600000 0.0018310744\n" " 825.2349460000 0.0139501722\n" " 188.0469580000 0.0684450781\n" " 52.9645000000 0.2327143360\n" " 16.8975704000 0.4701928980\n" " 5.7996353400 0.3585208530\n" " 2 0 1 3 1 1\n" " 15.5396162500 -0.1107775490 0.0708742682\n" " 3.5999335860 -0.1480262620 0.3397528390\n" " 1.0137617500 1.1307670100 0.7271585770\n" " 3 0 1 1 1 1\n" " 0.2700058226 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 7001.7130900000 0.0018196169\n" " 1051.3660900000 0.0139160796\n" " 239.2856900000 0.0684053245\n" " 67.3974453000 0.2331857600\n" " 21.5199573000 0.4712674390\n" " 7.4031013000 0.3566185460\n" " 2 0 1 3 1 1\n" " 20.8479528000 -0.1085069750 0.0716287243\n" " 4.8083083400 -0.1464516580 0.3459121030\n" " 1.3440698600 1.1286885800 0.7224699570\n" " 3 0 1 1 1 1\n" " 0.3581513930 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "Ne 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 8425.8515300000 0.0018843480\n" " 1268.5194000000 0.0143368994\n" " 289.6214140000 0.0701096233\n" " 81.8590040000 0.2373732660\n" " 26.2515079000 0.4730071260\n" " 9.0947205100 0.3484012410\n" " 2 0 1 3 1 1\n" " 26.5321310000 -0.1071182870 0.0719095885\n" " 6.1017550100 -0.1461638210 0.3495133720\n" " 1.6962715300 1.1277735000 0.7199405120\n" " 3 0 1 1 1 1\n" " 0.4458187000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "Na 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 9993.2000000000 0.0019376600\n" " 1499.8900000000 0.0148070000\n" " 341.9510000000 0.0727055000\n" " 94.6796000000 0.2526290000\n" " 29.7345000000 0.4932420000\n" " 10.0063000000 0.3131690000\n" " 2 0 1 6 1 1\n" " 150.9630000000 -0.0035420800 0.0050016600\n" " 35.5878000000 -0.0439588000 0.0355109000\n" " 11.1683000000 -0.1097520000 0.1428250000\n" " 3.9020100000 0.1873980000 0.3386200000\n" " 1.3817700000 0.6466990000 0.4515790000\n" " 0.4663820000 0.3060580000 0.2732710000\n" " 3 0 1 3 1 1\n" " 0.4979660000 -0.2485030000 -0.0230225000\n" " 0.0843529000 -0.1317040000 0.9503590000\n" " 0.0666350000 1.2335200000 0.0598579000\n" " 4 0 1 1 1 1\n" " 0.0259544000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1750000000 1.0000000000\n" "#","\n" "Mg 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 11722.8000000000 0.0019778300\n" " 1759.9300000000 0.0151140000\n" " 400.8460000000 0.0739108000\n" " 112.8070000000 0.2491910000\n" " 35.9997000000 0.4879280000\n" " 12.1828000000 0.3196620000\n" " 2 0 1 6 1 1\n" " 189.1800000000 -0.0032371700 0.0049281300\n" " 45.2119000000 -0.0410079000 0.0349888000\n" " 14.3563000000 -0.1126000000 0.1407250000\n" " 5.1388600000 0.1486330000 0.3336420000\n" " 1.9065200000 0.6164970000 0.4449400000\n" " 0.7058870000 0.3648290000 0.2692540000\n" " 3 0 1 3 1 1\n" " 0.9293400000 -0.2122900000 -0.0224192000\n" " 0.2690350000 -0.1079850000 0.1922710000\n" " 0.1173790000 1.1758400000 0.8461810000\n" " 4 0 1 1 1 1\n" " 0.0421061000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1750000000 1.0000000000\n" "#","\n" "Al 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 13983.1000000000 0.0019426700\n" " 2098.7500000000 0.0148599000\n" " 477.7050000000 0.0728494000\n" " 134.3600000000 0.2468300000\n" " 42.8709000000 0.4872580000\n" " 14.5189000000 0.3234960000\n" " 2 0 1 6 1 1\n" " 239.6680000000 -0.0029261900 0.0046028500\n" " 57.4419000000 -0.0374083000 0.0331990000\n" " 18.2859000000 -0.1144870000 0.1362820000\n" " 6.5991400000 0.1156350000 0.3304760000\n" " 2.4904900000 0.6125950000 0.4491460000\n" " 0.9445450000 0.3937990000 0.2657040000\n" " 3 0 1 3 1 1\n" " 1.2779000000 -0.2276060000 -0.0175126000\n" " 0.3975900000 0.0014458300 0.2445330000\n" " 0.1600950000 1.0927900000 0.8049340000\n" " 4 0 1 1 1 1\n" " 0.0556577000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.3250000000 1.0000000000\n" "#","\n" "Si 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 16115.9000000000 0.0019594800\n" " 2425.5800000000 0.0149288000\n" " 553.8670000000 0.0728478000\n" " 156.3400000000 0.2461300000\n" " 50.0683000000 0.4859140000\n" " 17.0178000000 0.3250020000\n" " 2 0 1 6 1 1\n" " 292.7180000000 -0.0027809400 0.0044382600\n" " 69.8731000000 -0.0357146000 0.0326679000\n" " 22.3363000000 -0.1149850000 0.1347210000\n" " 8.1503900000 0.0935634000 0.3286780000\n" " 3.1345800000 0.6030170000 0.4496400000\n" " 1.2254300000 0.4189590000 0.2613720000\n" " 3 0 1 3 1 1\n" " 1.7273800000 -0.2446300000 -0.0177951000\n" " 0.5729220000 0.0043157200 0.2535390000\n" " 0.2221920000 1.0981800000 0.8006690000\n" " 4 0 1 1 1 1\n" " 0.0778369000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 19413.3000000000 0.0018516000\n" " 2909.4200000000 0.0142062000\n" " 661.3640000000 0.0699995000\n" " 185.7590000000 0.2400790000\n" " 59.1943000000 0.4847620000\n" " 20.0310000000 0.3352000000\n" " 2 0 1 6 1 1\n" " 339.4780000000 -0.0027821700 0.0045646200\n" " 81.0101000000 -0.0360499000 0.0336936000\n" " 25.8780000000 -0.1166310000 0.1397550000\n" " 9.4522100000 0.0968328000 0.3393620000\n" " 3.6656600000 0.6144180000 0.4509210000\n" " 1.4674600000 0.4037980000 0.2385860000\n" " 3 0 1 3 1 1\n" " 2.1562300000 -0.2529230000 -0.0177653000\n" " 0.7489970000 0.0328517000 0.2740580000\n" " 0.2831450000 1.0812500000 0.7854210000\n" " 4 0 1 1 1 1\n" " 0.0998317000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 21917.1000000000 0.0018692400\n" " 3301.4900000000 0.0142303000\n" " 754.1460000000 0.0696962000\n" " 212.7110000000 0.2384870000\n" " 67.9896000000 0.4833070000\n" " 23.0515000000 0.3380740000\n" " 2 0 1 6 1 1\n" " 423.7350000000 -0.0023767700 0.0040610100\n" " 100.7100000000 -0.0316930000 0.0306813000\n" " 32.1599000000 -0.1133170000 0.1304520000\n" " 11.8079000000 0.0560900000 0.3272050000\n" " 4.6311000000 0.5922550000 0.4528510000\n" " 1.8702500000 0.4550060000 0.2560420000\n" " 3 0 1 3 1 1\n" " 2.6158400000 -0.2503740000 -0.0145105000\n" " 0.9221670000 0.0669570000 0.3102630000\n" " 0.3412870000 1.0545100000 0.7544830000\n" " 4 0 1 1 1 1\n" " 0.1171670000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 25180.1000000000 0.0018329600\n" " 3780.3500000000 0.0140342000\n" " 860.4740000000 0.0690974000\n" " 242.1450000000 0.2374520000\n" " 77.3349000000 0.4830340000\n" " 26.2470000000 0.3398560000\n" " 2 0 1 6 1 1\n" " 491.7650000000 -0.0022973900 0.0039894000\n" " 116.9840000000 -0.0307137000 0.0303177000\n" " 37.4153000000 -0.1125280000 0.1298800000\n" " 13.7834000000 0.0450163000 0.3279510000\n" " 5.4521500000 0.5893530000 0.4535270000\n" " 2.2258800000 0.4652060000 0.2521540000\n" " 3 0 1 3 1 1\n" " 3.1864900000 -0.2518270000 -0.0142993000\n" " 1.1442700000 0.0615890000 0.3235720000\n" " 0.4203770000 1.0601800000 0.7435070000\n" " 4 0 1 1 1 1\n" " 0.1426570000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 28348.3000000000 0.0018252600\n" " 4257.6200000000 0.0139686000\n" " 969.8570000000 0.0687073000\n" " 273.2630000000 0.2362040000\n" " 87.3695000000 0.4822140000\n" " 29.6867000000 0.3420430000\n" " 2 0 1 6 1 1\n" " 575.8910000000 -0.0021597200 0.0038066500\n" " 136.8160000000 -0.0290775000 0.0292305000\n" " 43.8098000000 -0.1108270000 0.1264670000\n" " 16.2094000000 0.0276999000 0.3235100000\n" " 6.4608400000 0.5776130000 0.4548960000\n" " 2.6511400000 0.4886880000 0.2566300000\n" " 3 0 1 3 1 1\n" " 3.8602800000 -0.2555920000 -0.0159197000\n" " 1.4137300000 0.0378066000 0.3246460000\n" " 0.5166460000 1.0805600000 0.7439900000\n" " 4 0 1 1 1 1\n" " 0.1738880000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "H SZV-GTH-PADE\n" " 1\n" " 1 0 0 4 1\n" " 8.3744350009 -0.0238943732\n" " 1.8058681460 -0.1397943259\n" " 0.4852531032 -0.2530970874\n" " 0.1658235797 -0.6955307423\n" "#","\n" "H DZV-GTH-PADE\n" " 1\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0238943732 0.0000000000\n" " 1.8058681460 -0.1397943259 0.0000000000\n" " 0.4852531032 -0.2530970874 0.0000000000\n" " 0.1658235797 -0.6955307423 1.0000000000\n" "#","\n" "H DZV-GTH-PADE-CONFINED\n" " 1\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0283380594 0.0000000000\n" " 1.8058681460 -0.1333808815 0.0000000000\n" " 0.4852531032 -0.3995678166 0.0000000000\n" " 0.1658235797 -0.5531027153 1.0000000000\n" "#","\n" "H DZVP-GTH-PADE\n" " 2\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0238943732 0.0000000000\n" " 1.8058681460 -0.1397943259 0.0000000000\n" " 0.4852531032 -0.2530970874 0.0000000000\n" " 0.1658235797 -0.6955307423 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "H DZVP-GTH-PADE-CONFINED\n" " 2\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0283380594 0.0000000000\n" " 1.8058681460 -0.1333808815 0.0000000000\n" " 0.4852531032 -0.3995678166 0.0000000000\n" " 0.1658235797 -0.5531027153 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "H MAO-PRIM\n" " 2\n" " 1 0 0 4 4\n" " 8.3744350009 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.8058681460 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.4852531032 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1658235797 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "He DZV-GTH-PADE\n" " 1\n" " 1 0 0 4 2\n" " 10.9449874915 -0.0753847695 0.0000000000\n" " 2.7220103814 -0.2478759473 0.0000000000\n" " 0.7380855468 -0.4844314598 0.0000000000\n" " 0.2044485380 -0.3633328585 1.0000000000\n" "#","\n" "He DZVP-GTH-PADE\n" " 2\n" " 1 0 0 4 2\n" " 10.9449874915 -0.0753847695 0.0000000000\n" " 2.7220103814 -0.2478759473 0.0000000000\n" " 0.7380855468 -0.4844314598 0.0000000000\n" " 0.2044485380 -0.3633328585 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "Li DZV-GTH-PADE\n" " 1\n" " 1 0 0 6 3\n" " 9.0645724591 0.1412707699 -0.0257336579 0.0000000000\n" " 4.3479418841 0.2767295609 -0.0520596034 0.0000000000\n" " 1.4344377059 0.4501408198 -0.1264254986 0.0000000000\n" " 0.4969595308 0.2616803664 -0.1023799272 0.0000000000\n" " 0.0729934685 0.0116600998 0.5635942604 0.0000000000\n" " 0.0264321968 -0.0038582262 0.5289910438 1.0000000000\n" "#","\n" "Li DZVP-GTH-PADE\n" " 1\n" " 1 0 1 6 3 3\n" " 9.0645724591 0.1412707699 -0.0257336579 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4.3479418841 0.2767295609 -0.0520596034 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.4344377059 0.4501408198 -0.1264254986 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.4969595308 0.2616803664 -0.1023799272 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0729934685 0.0116600998 0.5635942604 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0264321968 -0.0038582262 0.5289910438 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Be DZV-GTH-PADE\n" " 1\n" " 1 0 0 6 3\n" " 16.1605993866 0.1059191045 -0.0252247893 0.0000000000\n" " 8.2781849385 0.3141963412 -0.0592178229 0.0000000000\n" " 2.7429504166 0.4327229195 -0.1590666667 0.0000000000\n" " 1.0050808492 0.2646169070 -0.0970095401 0.0000000000\n" " 0.1765058796 0.0128470696 0.5606449178 0.0000000000\n" " 0.0580428345 -0.0034490257 0.5479193518 1.0000000000\n" "#","\n" "Be DZVP-GTH-PADE\n" " 1\n" " 1 0 1 6 3 3\n" " 16.1605993866 0.1059191045 -0.0252247893 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.2781849385 0.3141963412 -0.0592178229 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.7429504166 0.4327229195 -0.1590666667 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.0050808492 0.2646169070 -0.0970095401 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1765058796 0.0128470696 0.5606449178 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0580428345 -0.0034490257 0.5479193518 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "B DZVP-GTH-PADE\n" " 2\n" " 2 0 1 4 2 2\n" " 2.8854072190 0.1420734374 0.0000000000 -0.0759818266 0.0000000000\n" " 0.8566811318 -0.0083272998 0.0000000000 -0.2508295957 0.0000000000\n" " 0.2712977126 -0.6707128588 0.0000000000 -0.4610302659 0.0000000000\n" " 0.0826097889 -0.4241240913 1.0000000000 -0.4419902640 1.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "C SZV-GTH-PADE\n" " 1\n" " 2 0 1 4 1 1\n" " 4.3362505404 0.1490793580 -0.0878122158\n" " 1.2881820646 -0.0292634544 -0.2775568334\n" " 0.4037764944 -0.6882043984 -0.4712287175\n" " 0.1187878168 -0.3964423560 -0.4058040746\n" "#","\n" "C DZVP-GTH-PADE\n" " 2\n" " 2 0 1 4 2 2\n" " 4.3362505404 0.1490793580 0.0000000000 -0.0878122158 0.0000000000\n" " 1.2881820646 -0.0292634544 0.0000000000 -0.2775568334 0.0000000000\n" " 0.4037764944 -0.6882043984 0.0000000000 -0.4712287175 0.0000000000\n" " 0.1187878168 -0.3964423560 1.0000000000 -0.4058040746 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "C DZVP-GTH-PADE-CONFINED\n" " 2\n" " 2 0 1 4 2 2\n" " 4.9036932712 0.1231402806 0.0000000000 -0.0710058771 0.0000000000\n" " 1.6574324667 0.0678620439 0.0000000000 -0.2265440401 0.0000000000\n" " 0.5592463507 -0.5108450721 0.0000000000 -0.4459711159 0.0000000000\n" " 0.1992045030 -0.6156990839 1.0000000000 -0.4501432808 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "N SZV-GTH-PADE\n" " 1\n" " 2 0 1 4 1 1\n" " 6.1527081270 0.1506293354 -0.0950596846\n" " 1.8236453987 -0.0360069142 -0.2918844594\n" " 0.5676671941 -0.6942003416 -0.4739047963\n" " 0.1628232875 -0.3878973877 -0.3893444095\n" "#","\n" "N DZVP-GTH-PADE\n" " 2\n" " 2 0 1 4 2 2\n" " 6.1527081270 0.1506293354 0.0000000000 -0.0950596846 0.0000000000\n" " 1.8236453987 -0.0360069142 0.0000000000 -0.2918844594 0.0000000000\n" " 0.5676671941 -0.6942003416 0.0000000000 -0.4739047963 0.0000000000\n" " 0.1628232875 -0.3878973877 1.0000000000 -0.3893444095 1.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O SZV-GTH-PADE\n" " 1\n" " 2 0 1 4 1 1\n" " 8.3044042305 0.1510163077 -0.0995678047\n" " 2.4579452461 -0.0393193874 -0.3011430914\n" " 0.7597363524 -0.6971729792 -0.4750852730\n" " 0.2136387585 -0.3841125601 -0.3798775565\n" "#","\n" "O DZVP-GTH-PADE\n" " 2\n" " 2 0 1 4 2 2\n" " 8.3044042305 0.1510163077 0.0000000000 -0.0995678047 0.0000000000\n" " 2.4579452461 -0.0393193874 0.0000000000 -0.3011430914 0.0000000000\n" " 0.7597363524 -0.6971729792 0.0000000000 -0.4750852730 0.0000000000\n" " 0.2136387585 -0.3841125601 1.0000000000 -0.3798775565 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "O MAO-PRIM\n" " 3\n" " 1 0 0 4 4\n" " 8.3044042305 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.4579452461 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.7597363524 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2136387585 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 4 4\n" " 8.3044042305 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.4579452461 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.7597363524 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2136387585 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "O DZVP-GTH-PADE-CONFINED\n" " 2\n" " 2 0 1 4 2 2\n" " 8.8580368553 0.1363369629 0.0000000000 -0.0886958138 0.0000000000\n" " 2.7922584694 0.0206593813 0.0000000000 -0.2694541227 0.0000000000\n" " 0.9068691246 -0.6094274296 0.0000000000 -0.4594270880 0.0000000000\n" " 0.2872216831 -0.5022915093 1.0000000000 -0.4103120494 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F SZV-GTH-PADE\n" " 1\n" " 2 0 1 4 1 1\n" " 10.7079864789 0.1525178335 -0.1028649155\n" " 3.1757211287 -0.0450362306 -0.3085266108\n" " 0.9750975998 -0.6987425203 -0.4757649137\n" " 0.2701247513 -0.3801470840 -0.3724955108\n" "#","\n" "F DZVP-GTH-PADE\n" " 2\n" " 2 0 1 4 2 2\n" " 10.7079864789 0.1525178335 0.0000000000 -0.1028649155 0.0000000000\n" " 3.1757211287 -0.0450362306 0.0000000000 -0.3085266108 0.0000000000\n" " 0.9750975998 -0.6987425203 0.0000000000 -0.4757649137 0.0000000000\n" " 0.2701247513 -0.3801470840 1.0000000000 -0.3724955108 1.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "Ne SZV-GTH-PADE\n" " 1\n" " 2 0 1 4 1 1\n" " 13.7594457910 0.1483426269 -0.1044040672\n" " 4.0425314051 -0.0356303947 -0.3108896070\n" " 1.2355194419 -0.7010725739 -0.4760215931\n" " 0.3367033579 -0.3841124763 -0.3721573833\n" "#","\n" "Ne DZVP-GTH-PADE\n" " 2\n" " 2 0 1 4 2 2\n" " 13.7594457910 0.1483426269 0.0000000000 -0.1044040672 0.0000000000\n" " 4.0425314051 -0.0356303947 0.0000000000 -0.3108896070 0.0000000000\n" " 1.2355194419 -0.7010725739 0.0000000000 -0.4760215931 0.0000000000\n" " 0.3367033579 -0.3841124763 1.0000000000 -0.3721573833 1.0000000000\n" " 3 2 2 1 1\n" " 1.2000000000 1.0000000000\n" "#","\n" "Na SZV-GTH-PADE\n" " 1\n" " 2 0 1 6 2 1\n" " 17.6699685720 -0.1362341108 0.0270952595 0.0791962955\n" " 6.9071803380 -0.0645881804 0.0098743015 0.2184099565\n" " 2.6099085380 0.3866064317 -0.0737148250 0.3764868181\n" " 0.9649711690 0.5971408467 -0.2186736173 0.3922334703\n" " 0.3400394180 0.1756759463 -0.0301109343 0.1808450956\n" " 0.0432486776 -0.0017104609 1.0388873735 0.0057698929\n" "#","\n" "Na DZVP-GTH-PADE\n" " 2\n" " 2 0 1 6 3 3\n" " 17.6699685720 -0.1362341108 0.0270952595 0.0000000000 0.0791962955 0.0000000000 0.0000000000\n" " 6.9071803380 -0.0645881804 0.0098743015 0.0000000000 0.2184099565 0.0000000000 0.0000000000\n" " 2.6099085380 0.3866064317 -0.0737148250 0.0000000000 0.3764868181 0.0000000000 0.0000000000\n" " 0.9649711690 0.5971408467 -0.2186736173 0.0000000000 0.3922334703 0.0000000000 0.0000000000\n" " 0.3400394180 0.1756759463 -0.0301109343 0.0000000000 0.1808450956 1.0000000000 0.0000000000\n" " 0.0432486776 -0.0017104609 1.0388873735 1.0000000000 0.0057698929 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1169000000 1.0000000000\n" "#","\n" "Mg DZVP-GTH-PADE-q10 DZVP-GTH-PADE\n" " 2\n" " 2 0 1 6 3 3\n" " 28.4908976858 -0.0662610173 0.0164990227 0.0000000000 0.0464488574 0.0000000000 0.0000000000\n" " 11.7286146019 -0.1706220696 0.0374304317 0.0000000000 0.1664817432 0.0000000000 0.0000000000\n" " 4.4446432719 0.2494471473 -0.0517267282 0.0000000000 0.3580892342 0.0000000000 0.0000000000\n" " 1.6070987233 0.6423276770 -0.2647575784 0.0000000000 0.4356677176 0.0000000000 0.0000000000\n" " 0.5690818481 0.2933445091 -0.0948604830 0.0000000000 0.2229690408 1.0000000000 0.0000000000\n" " 0.0763499358 -0.0002712350 1.0630089581 1.0000000000 0.0085994850 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Mg DZVP-GTH-PADE-q2\n" " 2\n" " 3 0 0 4 2\n" " 2.9198644211 -0.0025733539 0.0000000000\n" " 0.8049484892 0.2058124895 0.0000000000\n" " 0.1126554966 -0.6457766724 0.0000000000\n" " 0.0413625487 -0.4747074468 1.0000000000\n" " 3 1 1 1 1\n" " 0.2000000000 1.0000000000\n" "#","\n" "Al DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 2 2\n" " 0.9504243929 0.2820110253 0.0000000000 0.0257292971 0.0000000000\n" " 0.2947542270 -0.2787298974 0.0000000000 -0.2527939401 0.0000000000\n" " 0.1124473777 -0.7495145975 0.0000000000 -0.5124792729 0.0000000000\n" " 0.0396013464 -0.1646066141 1.0000000000 -0.3831309239 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Al DZVP-GTH-PADE-CONFINED\n" " 2\n" " 3 0 1 4 2 2\n" " 0.9659628623 0.2842778097 0.0000000000 0.0340618641 0.0000000000\n" " 0.3438400556 -0.1449517389 0.0000000000 -0.2054970468 0.0000000000\n" " 0.1485207596 -0.6897086501 0.0000000000 -0.4772801180 0.0000000000\n" " 0.0719529320 -0.3389750810 1.0000000000 -0.4170196265 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Si SZV-GTH-PADE\n" " 1\n" " 3 0 1 4 1 1\n" " 1.2032422345 0.3290350445 0.0474539126\n" " 0.4688409786 -0.2533118323 -0.2594473573\n" " 0.1679863234 -0.7870946277 -0.5440929303\n" " 0.0575619526 -0.1909898479 -0.3624010364\n" "#","\n" "Si DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 2 2\n" " 1.2032422345 0.3290350445 0.0000000000 0.0474539126 0.0000000000\n" " 0.4688409786 -0.2533118323 0.0000000000 -0.2594473573 0.0000000000\n" " 0.1679863234 -0.7870946277 0.0000000000 -0.5440929303 0.0000000000\n" " 0.0575619526 -0.1909898479 1.0000000000 -0.3624010364 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "Si DZVP-GTH-PADE-CONFINED\n" " 2\n" " 3 0 1 4 2 2\n" " 1.2283393137 0.3224377170 0.0000000000 0.0594606114 0.0000000000\n" " 0.5501858147 -0.1360087627 0.0000000000 -0.2102673957 0.0000000000\n" " 0.2104840660 -0.7254143349 0.0000000000 -0.5133271944 0.0000000000\n" " 0.0912235796 -0.3482519842 1.0000000000 -0.4108824626 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P SZV-GTH-PADE\n" " 1\n" " 3 0 1 4 1 1\n" " 1.4961048190 0.3653028603 0.0816119465\n" " 0.7168717560 -0.2125795312 -0.2627452850\n" " 0.2411410649 -0.8136062969 -0.5627188034\n" " 0.0803403985 -0.2362293752 -0.3691372243\n" "#","\n" "P DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 2 2\n" " 1.4961048190 0.3653028603 0.0000000000 0.0816119465 0.0000000000\n" " 0.7168717560 -0.2125795312 0.0000000000 -0.2627452850 0.0000000000\n" " 0.2411410649 -0.8136062969 0.0000000000 -0.5627188034 0.0000000000\n" " 0.0803403985 -0.2362293752 1.0000000000 -0.3691372243 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S SZV-GTH-PADE\n" " 1\n" " 3 0 1 4 1 1\n" " 1.8379557070 0.3832201009 0.1221451195\n" " 1.0358088377 -0.1682229539 -0.2752006797\n" " 0.3298020165 -0.8258487331 -0.5729080701\n" " 0.1073546335 -0.2832847829 -0.3825524954\n" "#","\n" "S DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 2 2\n" " 1.8379557070 0.3832201009 0.0000000000 0.1221451195 0.0000000000\n" " 1.0358088377 -0.1682229539 0.0000000000 -0.2752006797 0.0000000000\n" " 0.3298020165 -0.8258487331 0.0000000000 -0.5729080701 0.0000000000\n" " 0.1073546335 -0.2832847829 1.0000000000 -0.3825524954 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 2 2\n" " 2.2321759828 0.3787841491 0.0000000000 0.1555383208 0.0000000000\n" " 1.3787736290 -0.1239706468 0.0000000000 -0.2931737153 0.0000000000\n" " 0.4264909846 -0.8298219996 0.0000000000 -0.5781090940 0.0000000000\n" " 0.1366672601 -0.3175034120 1.0000000000 -0.3901119426 1.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 2 2\n" " 2.6436290990 0.3737616862 0.0000000000 0.1735201807 0.0000000000\n" " 1.6948961534 -0.0996561183 0.0000000000 -0.3100928733 0.0000000000\n" " 0.5231108387 -0.8315195659 0.0000000000 -0.5807563784 0.0000000000\n" " 0.1663306775 -0.3339930421 1.0000000000 -0.3879330018 1.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "K DZVP-GTH-PADE\n" " 2\n" " 3 0 1 6 3 3\n" " 4.9094498551 0.3409782009 -0.0718544684 0.0000000000 -0.0383589744 0.0000000000 0.0000000000\n" " 3.7798462116 -0.7275665906 0.1645679593 0.0000000000 -0.0185547112 0.0000000000 0.0000000000\n" " 1.2616687398 0.2421667415 -0.0492186533 0.0000000000 0.3499301423 0.0000000000 0.0000000000\n" " 0.5208676931 0.7973211939 -0.3638537086 0.0000000000 0.5271250194 0.0000000000 0.0000000000\n" " 0.1977138661 0.2181209543 -0.0636674785 0.0000000000 0.2616666463 1.0000000000 0.0000000000\n" " 0.0313945665 -0.0006704360 1.0746760317 1.0000000000 0.0081708337 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.0741000000 1.0000000000\n" "#","\n" "K DZVP-GTH-PADE-CONFINED\n" " 2\n" " 3 0 1 6 3 3\n" " 5.0562599816 0.2799518601 -0.0650771209 0.0000000000 -0.0324181496 0.0000000000 0.0000000000\n" " 3.7408592301 -0.6649216195 0.1655178754 0.0000000000 -0.0267570689 0.0000000000 0.0000000000\n" " 1.2850539206 0.2238370548 -0.0537305354 0.0000000000 0.3397270753 0.0000000000 0.0000000000\n" " 0.5337655981 0.7974284526 -0.3684242774 0.0000000000 0.5266222265 0.0000000000 0.0000000000\n" " 0.2033806513 0.2347131143 -0.1192800271 0.0000000000 0.2729583365 1.0000000000 0.0000000000\n" " 0.0366378947 -0.0006397374 1.1060765731 1.0000000000 0.0099036017 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.0741000000 1.0000000000\n" "#","\n" "# Calcium\n" "# \n" "# Z(nuc) = 20\n" "# Z(eff) = 10\n" "# E(ref) = -36.614864 a.u. (DZV)\n" "# \n" "Ca DZVP-GTH-PADE-q10 DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 3 2\n" " 2.8976614522 0.6350314914 0.2038750228 0.0000000000 0.1518240054 0.0000000000\n" " 1.4766172782 -0.6715522195 -0.2579542636 0.0000000000 -0.5771864343 0.0000000000\n" " 0.4495737541 -0.8068315347 -0.4282041397 0.0000000000 -0.6174577485 0.0000000000\n" " 0.0520990913 -0.0145128759 1.1194316117 1.0000000000 -0.0373205562 1.0000000000\n" " 3 2 2 1 1\n" " 0.1088000000 1.0000000000\n" "#","\n" "# Scandium\n" "# \n" "# Z(nuc) = 21\n" "# Z(eff) = 11\n" "# E(ref) = -46.447044 a.u.\n" "# \n" "Sc DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 7.6177243131 -0.0025816821 0.0020846187 0.0000000000 -0.0990370320 0.0000000000 0.0417638000 -0.0265577865\n" " 3.5261707573 -0.4535887309 0.1333741760 0.0000000000 0.0830531204 0.0000000000 0.1794321279 -0.1237289932\n" " 1.3475088268 0.5851881107 -0.2044293970 0.0000000000 0.5068532353 0.0000000000 0.3071566485 -0.2111871137\n" " 0.5296968643 0.6915603927 -0.4643940847 0.0000000000 0.4818000644 0.0000000000 0.3729120547 -0.2265277705\n" " 0.1812303900 0.0523300246 0.1894325403 0.0000000000 0.0896287007 1.0000000000 0.3594956734 0.1297694309\n" " 0.0515699896 -0.0005424240 0.9922288961 1.0000000000 -0.0048406883 0.0000000000 0.1446776127 0.8641342523\n" "#","\n" "# Titanium\n" "# \n" "# Z(nuc) = 22\n" "# Z(eff) = 12\n" "# E(ref) = -57.906922 a.u.\n" "# \n" "Ti DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 7.8662560704 -0.0142007165 0.0051486133 0.0000000000 -0.1058111845 0.0000000000 0.0536511054 -0.0316785505\n" " 3.8950658856 -0.4494837964 0.1327129568 0.0000000000 0.1048087858 0.0000000000 0.1933632803 -0.1267950119\n" " 1.5117853291 0.6143981202 -0.2143014467 0.0000000000 0.5160204236 0.0000000000 0.3290345604 -0.2122564864\n" " 0.5932516463 0.6730966953 -0.4565151952 0.0000000000 0.4704168448 0.0000000000 0.3780068197 -0.2097541935\n" " 0.2029490001 0.0494956907 0.2060441001 0.0000000000 0.0790813703 1.0000000000 0.3303452351 0.2356257943\n" " 0.0570083591 -0.0007722992 0.9803815034 1.0000000000 -0.0040175351 0.0000000000 0.1067632616 0.8133941640\n" "#","\n" "# Titanium\n" "# \n" "# Z(nuc) = 22\n" "# Z(eff) = 12\n" "# r(cov) = 2.494 a.u.\n" "# E(ref) = -57.768017 a.u.\n" "# \n" "Ti DZV-GTH-PADE-CONFINED\n" " 1\n" " 3 0 2 6 3 2 2\n" " 7.9054508950 -0.0089866342 0.0033403228 0.0000000000 -0.1044805862 0.0000000000 0.0524477349 -0.0208282688\n" " 3.9606136239 -0.4508141066 0.1442719748 0.0000000000 0.0963354612 0.0000000000 0.1891993776 -0.0904000412\n" " 1.5621587965 0.5637837175 -0.2125114543 0.0000000000 0.4935065359 0.0000000000 0.3209566467 -0.1191689233\n" " 0.6278375325 0.6987976039 -0.4744456374 0.0000000000 0.4799614577 0.0000000000 0.3684022594 -0.2436747742\n" " 0.2253690150 0.0716873095 0.0753192189 0.0000000000 0.0995748325 1.0000000000 0.3365998900 0.0009608049\n" " 0.0725661163 -0.0018693598 1.0806476083 1.0000000000 -0.0043939777 0.0000000000 0.1049021142 0.9691386629\n" "#","\n" "# Vanadium\n" "# \n" "# Z(nuc) = 23\n" "# Z(eff) = 13\n" "# E(ref) = -71.188765 a.u.\n" "# \n" "V DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 7.8747524263 -0.0443841418 0.0126347723 0.0000000000 -0.1144265054 0.0000000000 0.0651523717 -0.0186113262\n" " 4.0933440615 -0.4317842194 0.1208086573 0.0000000000 0.1421671368 0.0000000000 0.2101756320 -0.0735897040\n" " 1.6384502186 0.6727841327 -0.2278558403 0.0000000000 0.5251937993 0.0000000000 0.3407334498 -0.0858251101\n" " 0.6438497632 0.6346678975 -0.4409702916 0.0000000000 0.4484462388 0.0000000000 0.3767018108 -0.2121800208\n" " 0.2206224245 0.0418256229 0.2306573940 0.0000000000 0.0670590120 1.0000000000 0.3023326440 0.0291442397\n" " 0.0614716642 -0.0007065154 0.9629588869 1.0000000000 -0.0031794120 0.0000000000 0.0836085023 0.9675641584\n" "#","\n" "# Chromium\n" "# \n" "# Z(nuc) = 24\n" "# Z(eff) = 14\n" "# E(ref) = -86.421763 a.u.\n" "# \n" "Cr DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 8.4980218808 -0.0608783001 0.0160558551 0.0000000000 -0.0906220888 0.0000000000 0.0912009861 -0.0448527735\n" " 4.3332768421 -0.4362254023 0.1136246368 0.0000000000 0.1247923043 0.0000000000 0.1856901245 -0.0956642574\n" " 1.8357623166 0.6983227560 -0.2164316105 0.0000000000 0.5242992155 0.0000000000 0.3171108663 -0.1613201508\n" " 0.7086266315 0.6277540640 -0.3811547378 0.0000000000 0.4531101254 0.0000000000 0.3686546467 -0.1825467055\n" " 0.2325535793 0.0471147492 0.1539908695 0.0000000000 0.0676061963 1.0000000000 0.3250452914 0.0506894382\n" " 0.0621290391 -0.0023417403 0.9943414586 1.0000000000 -0.0037177277 0.0000000000 0.1425114774 0.9264839944\n" "#","\n" "# Manganese\n" "# \n" "# Z(nuc) = 25\n" "# Z(eff) = 15\n" "# E(ref) = -103.693822 a.u.\n" "# \n" "Mn DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 8.2162644620 -0.1392987047 0.0379745482 0.0000000000 -0.0706781641 0.0000000000 0.1231824621 -0.0271916197\n" " 4.3995038116 -0.3474284933 0.1026238058 0.0000000000 0.1421129189 0.0000000000 0.2003862748 -0.0616392441\n" " 1.9735860720 0.7276920861 -0.2459044301 0.0000000000 0.5304230993 0.0000000000 0.3396356204 -0.0508758521\n" " 0.7747355100 0.5917173669 -0.4104364589 0.0000000000 0.4289471268 0.0000000000 0.3764537252 -0.2226457142\n" " 0.2621680644 0.0446992498 0.2379188342 0.0000000000 0.0557678273 1.0000000000 0.2677240676 0.0808460497\n" " 0.0708470020 -0.0024642409 0.9512627458 1.0000000000 -0.0025525092 0.0000000000 0.0617409278 0.9529259336\n" "#","\n" "# Iron\n" "# \n" "# Z(nuc) = 26\n" "# Z(eff) = 16\n" "# E(ref) = -123.167637 a.u.\n" "# \n" "Fe DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 8.3176581765 -0.2221260103 0.0571340867 0.0000000000 -0.0835047401 0.0000000000 0.1328616119 -0.0265786973\n" " 4.4422592901 -0.2065484249 0.0659015546 0.0000000000 0.2224692471 0.0000000000 0.2337033217 -0.0640748896\n" " 1.9537149970 0.7710412303 -0.2695445185 0.0000000000 0.5334951260 0.0000000000 0.3480430202 -0.0427943670\n" " 0.7755476397 0.5063505210 -0.3754221317 0.0000000000 0.3763681502 0.0000000000 0.3564479505 -0.2349902890\n" " 0.2667047888 0.0299286713 0.2874114014 0.0000000000 0.0390767933 1.0000000000 0.2392969951 0.1437613614\n" " 0.0730205366 -0.0015070313 0.9166672323 1.0000000000 -0.0012748470 0.0000000000 0.0495086684 0.9263257056\n" "#","\n" "# Cobalt\n" "# \n" "# Z(nuc) = 27\n" "# Z(eff) = 17\n" "# E(ref) = -145.074726 a.u.\n" "# \n" "Co DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 8.2259784105 -0.3348828014 0.0839161925 0.0000000000 -0.0575730412 0.0000000000 0.1703306058 -0.0329647329\n" " 4.0899376713 0.0273051456 0.0043597020 0.0000000000 0.3114547257 0.0000000000 0.2731993143 -0.0646674934\n" " 1.7906737831 0.8008414138 -0.3063471909 0.0000000000 0.5288889096 0.0000000000 0.3481942056 -0.0406024695\n" " 0.7202346272 0.3743034819 -0.3094552251 0.0000000000 0.2922852722 0.0000000000 0.3268542552 -0.2546151534\n" " 0.2531395288 0.0119133243 0.3681678234 0.0000000000 0.0193344238 1.0000000000 0.1983580019 0.2591729030\n" " 0.0724847250 -0.0002875656 0.8518740079 1.0000000000 -0.0000074411 0.0000000000 0.0347706125 0.8655847940\n" "#","\n" "# Nickel\n" "# \n" "# Z(nuc) = 28\n" "# Z(eff) = 18\n" "# E(ref) = -169.014868 a.u. (DZV)\n" "# \n" "Ni SZV-GTH-PADE-q18 SZV-GTH-PADE\n" " 1\n" " 3 0 2 6 2 1 1\n" " 9.1083628918 -0.3318472282 0.0814757465 -0.0734890997 0.1546631104\n" " 4.7077006381 0.0215195281 0.0083255182 0.3143433748 0.2793018964\n" " 2.0075563311 0.7820035505 -0.2919821887 0.5321470345 0.3572041353\n" " 0.7991545346 0.3981367371 -0.3174059212 0.3004714229 0.3257021539\n" " 0.2801233689 0.0110672576 0.3537517680 0.0204262431 0.1980609814\n" " 0.0777183285 0.0003240675 0.8632205228 0.0000512651 0.0349659775\n" "#","\n" "Ni SZV-GTH-PADE-CONFINED-q18 SZV-GTH-PADE-CONFINED\n" " 1\n" " 3 0 2 6 2 1 1\n" " 9.1839262940 -0.3194864695 0.0820798088 -0.0753895848 0.1482345528\n" " 4.8715988710 -0.0166115410 0.0216589790 0.2902126119 0.2678833452\n" " 2.1295830130 0.7470874340 -0.2893085485 0.5183042283 0.3474007726\n" " 0.8692986192 0.4468007103 -0.3470085291 0.3282859990 0.3267208363\n" " 0.3160013087 0.0241429107 0.2421486666 0.0331477696 0.2129571216\n" " 0.0996764017 -0.0007297350 0.9538524021 -0.0007168330 0.0399879500\n" "#","\n" "Ni DZV-GTH-PADE-q18 DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 9.1083628918 -0.3318472282 0.0814757465 0.0000000000 -0.0734890997 0.0000000000 0.1546631104 -0.0270446181\n" " 4.7077006381 0.0215195281 0.0083255182 0.0000000000 0.3143433748 0.0000000000 0.2793018964 -0.0621439339\n" " 2.0075563311 0.7820035505 -0.2919821887 0.0000000000 0.5321470345 0.0000000000 0.3572041353 -0.0346035868\n" " 0.7991545346 0.3981367371 -0.3174059212 0.0000000000 0.3004714229 0.0000000000 0.3257021539 -0.2542426351\n" " 0.2801233689 0.0110672576 0.3537517680 0.0000000000 0.0204262431 1.0000000000 0.1980609814 0.2437546148\n" " 0.0777183285 0.0003240675 0.8632205228 1.0000000000 0.0000512651 0.0000000000 0.0349659775 0.8783250274\n" "#","\n" "Ni DZV-GTH-PADE-CONFINED-q18 DZV-GTH-PADE-CONFINED\n" " 1\n" " 3 0 2 6 3 2 2\n" " 9.1839262940 -0.3194864695 0.0820798088 0.0000000000 -0.0753895848 0.0000000000 0.1482345528 -0.0303971456\n" " 4.8715988710 -0.0166115410 0.0216589790 0.0000000000 0.2902126119 0.0000000000 0.2678833452 -0.0724968085\n" " 2.1295830130 0.7470874340 -0.2893085485 0.0000000000 0.5183042283 0.0000000000 0.3474007726 -0.0383232476\n" " 0.8692986192 0.4468007103 -0.3470085291 0.0000000000 0.3282859990 0.0000000000 0.3267208363 -0.2746023312\n" " 0.3160013087 0.0241429107 0.2421486666 0.0000000000 0.0331477696 1.0000000000 0.2129571216 0.2181292551\n" " 0.0996764017 -0.0007297350 0.9538524021 1.0000000000 -0.0007168330 0.0000000000 0.0399879500 0.8850545821\n" "#","\n" "# Nickel\n" "# \n" "# Z(nuc) = 28\n" "# Z(eff) = 10\n" "# E(ref) = -36.954230 a.u.\n" "# \n" "Ni DZV-GTH-PADE-q10\n" " 1\n" " 3 0 2 6 2 2 2\n" " 5.2465385132 -0.0195686939 0.0000000000 0.0016517420 0.0000000000 0.2741056767 -0.0137577062\n" " 2.6090644689 0.0813873400 0.0000000000 -0.0052396301 0.0000000000 0.3543794794 -0.0268890369\n" " 1.1046166843 -0.2728677440 0.0000000000 0.0619959272 0.0000000000 0.3296854386 0.0126199016\n" " 0.4448692089 -0.0688949785 0.0000000000 -0.0614220277 0.0000000000 0.2335185166 -0.3679775516\n" " 0.1687659415 0.6206874931 0.0000000000 -0.2903889111 1.0000000000 0.0992461972 0.4117542785\n" " 0.0576654368 0.5625306587 1.0000000000 -0.7554832177 0.0000000000 0.0101944431 0.7852149041\n" "#","\n" "# Copper\n" "# \n" "# Z(nuc) = 29\n" "# Z(eff) = 11\n" "# E(ref) = -47.922396 a.u.\n" "# \n" "Cu DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 2 2 2\n" " 5.7799826780 -0.0137622398 0.0000000000 -0.0019325638 0.0000000000 0.2572828355 -0.0100377492\n" " 2.9223072565 0.0624852089 0.0000000000 0.0066529976 0.0000000000 0.3370459629 -0.0172155062\n" " 1.2410860367 -0.2101042076 0.0000000000 -0.0486904400 0.0000000000 0.3219866164 0.0080455917\n" " 0.4926826906 -0.1147109815 0.0000000000 0.0379720404 0.0000000000 0.2528381981 -0.2353878212\n" " 0.1789330672 0.5404419433 0.0000000000 0.2206564191 1.0000000000 0.1448314035 0.0049310905\n" " 0.0561739570 0.6479193925 1.0000000000 0.8303966635 0.0000000000 0.0314382917 1.0108918979\n" "#","\n" "# Zinc\n" "# \n" "# Z(nuc) = 30\n" "# Z(eff) = 12\n" "# E(ref) = -60.408339 a.u.\n" "# \n" "Zn DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 2 2 2\n" " 6.4206423601 -0.0159961492 0.0000000000 -0.0017007517 0.0000000000 0.2738774540 -0.0086808361\n" " 3.2164545624 0.0700921695 0.0000000000 0.0057876549 0.0000000000 0.3543101613 -0.0259525057\n" " 1.3637346905 -0.2332431465 0.0000000000 -0.0557262454 0.0000000000 0.3285180198 0.0317203087\n" " 0.5481563712 -0.1137154667 0.0000000000 0.0463783393 0.0000000000 0.2334531038 -0.3651680612\n" " 0.2053011443 0.5909100816 0.0000000000 0.2629520047 1.0000000000 0.1017295445 0.3530864382\n" " 0.0662102782 0.6085540919 1.0000000000 0.7908150346 0.0000000000 0.0108701745 0.8289022633\n" "#","\n" "# Zinc\n" "# \n" "# r(cov) = 2.362 a.u.\n" "# E(ref) = -60.299849 a.u.\n" "# \n" "Zn DZV-GTH-PADE-CONFINED\n" " 1\n" " 3 0 2 6 2 2 2\n" " 6.4635610128 -0.0174178283 0.0000000000 0.0014889091 0.0000000000 0.2661076361 -0.0172911104\n" " 3.3087913561 0.0729496060 0.0000000000 -0.0053382185 0.0000000000 0.3453918347 -0.0353171901\n" " 1.4436868426 -0.2102985944 0.0000000000 0.0544382687 0.0000000000 0.3206623881 0.0094335277\n" " 0.6045470598 -0.1788671076 0.0000000000 -0.0164095173 0.0000000000 0.2357873353 -0.3686660487\n" " 0.2390582336 0.5149852625 0.0000000000 -0.2811557323 1.0000000000 0.1164010142 0.3573346078\n" " 0.0857774784 0.7053938257 1.0000000000 -0.7792591266 0.0000000000 0.0149561710 0.8225277665\n" "#","\n" "# Bromine\n" "# \n" "# Z(nuc) = 35\n" "# Z(eff) = 7\n" "# E(ref) = -13.399562 a.u.\n" "# \n" "Br DZVP-GTH-PADE\n" " 2\n" " 4 0 1 6 2 2\n" " 3.1292582762 0.1580383222 0.0000000000 -0.0227993689 0.0000000000\n" " 2.0410191811 -0.5451938775 0.0000000000 -0.0920733298 0.0000000000\n" " 0.8302017350 0.1080068318 0.0000000000 0.1803022828 0.0000000000\n" " 0.3973439755 0.6925896761 0.0000000000 0.4347908141 0.0000000000\n" " 0.1725496378 0.4230867305 0.0000000000 0.4234285104 0.0000000000\n" " 0.0696797072 0.0332389489 1.0000000000 0.1406796525 1.0000000000\n" " 4 2 2 1 1\n" " 0.3620000000 1.0000000000\n" "#","\n" "# Yttrium\n" "# \n" "# Z(nuc) = 39\n" "# Z(eff) = 11\n" "# E(ref) = -38.220903 a.u. (DZV)\n" "# \n" "Y SZV-GTH-PADE\n" " 1\n" " 4 0 2 6 2 1 1\n" " 7.8428845299 0.0803324138 -0.0266188717 0.0134161241 -0.0016439813\n" " 2.7619481977 -0.6392520852 0.2386709814 -0.1893880809 -0.0012258216\n" " 1.1534752103 0.4260952519 -0.1749784343 0.4372433962 0.1854518520\n" " 0.4724776609 0.8755246609 -0.5963031281 0.6173916742 0.3755995103\n" " 0.1689866773 0.0824597184 0.1334866382 0.1503112301 0.4711505916\n" " 0.0490946914 -0.0003667507 1.0516399914 -0.0061616659 0.2624412351\n" "#","\n" "Y SZV-GTH-PADE-CONFINED\n" " 1\n" " 4 0 2 6 2 1 1\n" " 7.8513817096 0.0798606067 -0.0279472583 0.0137177365 -0.0014643321\n" " 2.7616577921 -0.6382967169 0.2509901785 -0.1927451959 -0.0030943144\n" " 1.1844670938 0.3929099619 -0.1729550553 0.4168976599 0.1811003704\n" " 0.4898256283 0.8878410454 -0.6035125417 0.6214526828 0.3711873238\n" " 0.1795686728 0.1040199200 0.0270233339 0.1694869546 0.4764905487\n" " 0.0573407217 -0.0015793010 1.1284469161 -0.0059902205 0.2444820548\n" "#","\n" "Y DZV-GTH-PADE\n" " 1\n" " 4 0 2 6 3 2 2\n" " 7.8428845299 0.0803324138 -0.0266188717 0.0000000000 0.0134161241 0.0000000000 -0.0016439813 0.0000000000\n" " 2.7619481977 -0.6392520852 0.2386709814 0.0000000000 -0.1893880809 0.0000000000 -0.0012258216 0.0000000000\n" " 1.1534752103 0.4260952519 -0.1749784343 0.0000000000 0.4372433962 0.0000000000 0.1854518520 0.0000000000\n" " 0.4724776609 0.8755246609 -0.5963031281 0.0000000000 0.6173916742 0.0000000000 0.3755995103 1.0000000000\n" " 0.1689866773 0.0824597184 0.1334866382 0.0000000000 0.1503112301 1.0000000000 0.4711505916 0.0000000000\n" " 0.0490946914 -0.0003667507 1.0516399914 1.0000000000 -0.0061616659 0.0000000000 0.2624412351 0.0000000000\n" "#","\n" "Y DZV-GTH-PADE-CONFINED\n" " 1\n" " 4 0 2 6 3 2 2\n" " 7.8513817096 0.0798606067 -0.0279472583 0.0000000000 0.0137177365 0.0000000000 -0.0014643321 0.0000000000\n" " 2.7616577921 -0.6382967169 0.2509901785 0.0000000000 -0.1927451959 0.0000000000 -0.0030943144 0.0000000000\n" " 1.1844670938 0.3929099619 -0.1729550553 0.0000000000 0.4168976599 0.0000000000 0.1811003704 0.0000000000\n" " 0.4898256283 0.8878410454 -0.6035125417 0.0000000000 0.6214526828 0.0000000000 0.3711873238 1.0000000000\n" " 0.1795686728 0.1040199200 0.0270233339 0.0000000000 0.1694869546 1.0000000000 0.4764905487 0.0000000000\n" " 0.0573407217 -0.0015793010 1.1284469161 1.0000000000 -0.0059902205 0.0000000000 0.2444820548 0.0000000000\n" "#","\n" "# Zirconium\n" "# \n" "# Z(nuc) = 40\n" "# Z(eff) = 12\n" "# E(ref) = -46.893180 a.u. (DZV)\n" "# \n" "Zr SZV-GTH-PADE\n" " 1\n" " 4 0 2 6 2 1 1\n" " 7.6857477291 0.0921982715 -0.0300916002 0.0146645208 -0.0028305635\n" " 2.8983441504 -0.7069142736 0.2663213129 -0.2102277970 0.0073835576\n" " 1.2697609208 0.5009909419 -0.2139641740 0.4771534202 0.2198586769\n" " 0.5172494858 0.8658642938 -0.6004758231 0.6141472939 0.4200820229\n" " 0.1837156188 0.0697098809 0.1712660028 0.1280872093 0.4495790932\n" " 0.0544846775 -0.0001210510 1.0314604844 -0.0061029355 0.1822139319\n" "#","\n" "Zr SZV-GTH-PADE-CONFINED\n" " 1\n" " 4 0 2 6 2 1 1\n" " 7.6907307864 0.0918380423 -0.0320131875 0.0151438658 -0.0025460744\n" " 2.8994679368 -0.7065066090 0.2831559477 -0.2148939669 0.0047430657\n" " 1.3083923278 0.4616304054 -0.2132614049 0.4535119288 0.2123619968\n" " 0.5389907155 0.8834077941 -0.6128847036 0.6213717566 0.4126795546\n" " 0.1971440852 0.0929467894 0.0453994877 0.1490106611 0.4547421602\n" " 0.0656808473 -0.0016305751 1.1255334296 -0.0064460597 0.1726337227\n" "#","\n" "Zr DZV-GTH-PADE\n" " 1\n" " 4 0 2 6 3 2 2\n" " 7.6857477291 0.0921982715 -0.0300916002 0.0000000000 0.0146645208 0.0000000000 -0.0028305635 0.0000000000\n" " 2.8983441504 -0.7069142736 0.2663213129 0.0000000000 -0.2102277970 0.0000000000 0.0073835576 0.0000000000\n" " 1.2697609208 0.5009909419 -0.2139641740 0.0000000000 0.4771534202 0.0000000000 0.2198586769 0.0000000000\n" " 0.5172494858 0.8658642938 -0.6004758231 0.0000000000 0.6141472939 0.0000000000 0.4200820229 1.0000000000\n" " 0.1837156188 0.0697098809 0.1712660028 0.0000000000 0.1280872093 1.0000000000 0.4495790932 0.0000000000\n" " 0.0544846775 -0.0001210510 1.0314604844 1.0000000000 -0.0061029355 0.0000000000 0.1822139319 0.0000000000\n" "#","\n" "Zr DZV-GTH-PADE-CONFINED\n" " 1\n" " 4 0 2 6 3 2 2\n" " 7.6907307864 0.0918380423 -0.0320131875 0.0000000000 0.0151438658 0.0000000000 -0.0025460744 0.0000000000\n" " 2.8994679368 -0.7065066090 0.2831559477 0.0000000000 -0.2148939669 0.0000000000 0.0047430657 0.0000000000\n" " 1.3083923278 0.4616304054 -0.2132614049 0.0000000000 0.4535119288 0.0000000000 0.2123619968 0.0000000000\n" " 0.5389907155 0.8834077941 -0.6128847036 0.0000000000 0.6213717566 0.0000000000 0.4126795546 1.0000000000\n" " 0.1971440852 0.0929467894 0.0453994877 0.0000000000 0.1490106611 1.0000000000 0.4547421602 0.0000000000\n" " 0.0656808473 -0.0016305751 1.1255334296 1.0000000000 -0.0064460597 0.0000000000 0.1726337227 0.0000000000\n" "#","\n" "# Platinum\n" "# \n" "# Z(nuc) = 78\n" "# Z(eff) = 18\n" "# E(ref) = -120.876931 a.u. (DZV)\n" "# \n" "Pt SZV-GTH-PADE\n" " 1\n" " 5 0 2 5 2 1 1\n" " 3.8539902592 0.6550845009 -0.1051705366 0.1013168098 0.0757804127\n" " 1.7615287193 -0.8764031847 0.1401591199 -0.4564614080 -0.2980475179\n" " 0.7984755007 -0.5895118007 0.6070281980 -0.5905298499 -0.4267024585\n" " 0.3063995931 -0.0418859472 -0.2491931231 -0.0921404881 -0.4156575987\n" " 0.0905510437 0.0010007235 -1.0046330563 0.0002983670 -0.1378705014\n" "#","\n" "Pt DZV-GTH-PADE\n" " 1\n" " 5 0 2 5 3 2 2\n" " 3.8539902592 0.6550845009 -0.1051705366 0.0000000000 0.1013168098 0.0000000000 0.0757804127 0.0000000000\n" " 1.7615287193 -0.8764031847 0.1401591199 0.0000000000 -0.4564614080 0.0000000000 -0.2980475179 0.0000000000\n" " 0.7984755007 -0.5895118007 0.6070281980 0.0000000000 -0.5905298499 0.0000000000 -0.4267024585 1.0000000000\n" " 0.3063995931 -0.0418859472 -0.2491931231 0.0000000000 -0.0921404881 1.0000000000 -0.4156575987 0.0000000000\n" " 0.0905510437 0.0010007235 -1.0046330563 1.0000000000 0.0002983670 0.0000000000 -0.1378705014 0.0000000000\n" "#","\n" "# Platinum\n" "# \n" "# Z(nuc) = 78\n" "# Z(eff) = 18\n" "# r(cov) = 2.457 a.u.\n" "# E(ref) = -120.704482 a.u. (DZV)\n" "# \n" "Pt SZV-GTH-PADE-CONFINED\n" " 1\n" " 5 0 2 5 2 1 1\n" " 3.8119175158 0.6811428125 -0.1098754333 0.1070703344 0.0816913963\n" " 1.8322303424 -0.8481780351 0.1224415322 -0.4203762499 -0.2816553083\n" " 0.8395270960 -0.6301940141 0.6208296307 -0.6135494498 -0.4250744523\n" " 0.3248710896 -0.0565770730 -0.1523972357 -0.1113673639 -0.4272240550\n" " 0.1034693582 0.0020421374 -1.0726205087 0.0007567030 -0.1392021184\n" "#","\n" "Pt DZV-GTH-PADE-CONFINED\n" " 1\n" " 5 0 2 5 3 2 2\n" " 3.8119175158 0.6811428125 -0.1098754333 0.0000000000 0.1070703344 0.0000000000 0.0816913963 0.0000000000\n" " 1.8322303424 -0.8481780351 0.1224415322 0.0000000000 -0.4203762499 0.0000000000 -0.2816553083 0.0000000000\n" " 0.8395270960 -0.6301940141 0.6208296307 0.0000000000 -0.6135494498 0.0000000000 -0.4250744523 1.0000000000\n" " 0.3248710896 -0.0565770730 -0.1523972357 0.0000000000 -0.1113673639 1.0000000000 -0.4272240550 0.0000000000\n" " 0.1034693582 0.0020421374 -1.0726205087 1.0000000000 0.0007567030 0.0000000000 -0.1392021184 0.0000000000\n" "#","\n" "H DZV-GTH-BLYP\n" " 1\n" " 1 0 0 4 2\n" " 8.5926819670 -0.0253743372 0.0000000000\n" " 1.8741624886 -0.1423057735 0.0000000000\n" " 0.5105244224 -0.2688793627 0.0000000000\n" " 0.1671584984 -0.6811381593 1.0000000000\n" "#","\n" "H DZV-GTH-BLYP-CONFINED\n" " 1\n" " 1 0 0 4 2\n" " 8.5926819670 -0.0295744132 0.0000000000\n" " 1.8741624886 -0.1366960483 0.0000000000\n" " 0.5105244224 -0.3996700661 0.0000000000\n" " 0.1671584984 -0.5535181527 1.0000000000\n" "#","\n" "H DZVP-GTH-BLYP\n" " 2\n" " 1 0 0 4 2\n" " 8.5926819670 -0.0253743372 0.0000000000\n" " 1.8741624886 -0.1423057735 0.0000000000\n" " 0.5105244224 -0.2688793627 0.0000000000\n" " 0.1671584984 -0.6811381593 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "H DZVP-GTH-BLYP-CONFINED\n" " 2\n" " 1 0 0 4 2\n" " 8.5926819670 -0.0295744132 0.0000000000\n" " 1.8741624886 -0.1366960483 0.0000000000\n" " 0.5105244224 -0.3996700661 0.0000000000\n" " 0.1671584984 -0.5535181527 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "He DZV-GTH-BLYP\n" " 1\n" " 1 0 0 4 2\n" " 11.1193917922 -0.0770450237 0.0000000000\n" " 2.7858130727 -0.2506337219 0.0000000000\n" " 0.7622149528 -0.4810430873 0.0000000000\n" " 0.2069465438 -0.3647148361 1.0000000000\n" "#","\n" "He DZVP-GTH-BLYP\n" " 2\n" " 1 0 0 4 2\n" " 11.1193917922 -0.0770450237 0.0000000000\n" " 2.7858130727 -0.2506337219 0.0000000000\n" " 0.7622149528 -0.4810430873 0.0000000000\n" " 0.2069465438 -0.3647148361 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "Li DZV-GTH-BLYP\n" " 1\n" " 1 0 0 6 3\n" " 9.2302808251 0.1415242446 -0.0269136246 0.0000000000\n" " 4.3944449344 0.2843546506 -0.0528260176 0.0000000000\n" " 1.4510059930 0.4411787547 -0.1332651028 0.0000000000\n" " 0.5085373954 0.2629872002 -0.0961377531 0.0000000000\n" " 0.0767907273 0.0115877019 0.5683374551 0.0000000000\n" " 0.0261032845 -0.0035737781 0.5290064307 1.0000000000\n" "#","\n" "Li DZVP-GTH-BLYP\n" " 1\n" " 1 0 1 6 3 3\n" " 9.2302808251 0.1415242446 -0.0269136246 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4.3944449344 0.2843546506 -0.0528260176 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.4510059930 0.4411787547 -0.1332651028 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.5085373954 0.2629872002 -0.0961377531 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0767907273 0.0115877019 0.5683374551 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0261032845 -0.0035737781 0.5290064307 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Be DZV-GTH-BLYP\n" " 1\n" " 1 0 0 6 3\n" " 16.7422288908 0.0966449867 -0.0233351760 0.0000000000\n" " 8.5397710546 0.3229144731 -0.0609785084 0.0000000000\n" " 2.8008728446 0.4309094768 -0.1582208472 0.0000000000\n" " 1.0279668171 0.2665960365 -0.0996495616 0.0000000000\n" " 0.1816198908 0.0129440911 0.5661714027 0.0000000000\n" " 0.0575318884 -0.0033470492 0.5467939201 1.0000000000\n" "#","\n" "Be DZVP-GTH-BLYP\n" " 1\n" " 1 0 1 6 3 3\n" " 16.7422288908 0.0966449867 -0.0233351760 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.5397710546 0.3229144731 -0.0609785084 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.8008728446 0.4309094768 -0.1582208472 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.0279668171 0.2665960365 -0.0996495616 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1816198908 0.0129440911 0.5661714027 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0575318884 -0.0033470492 0.5467939201 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "B DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 4 2 2\n" " 2.8461657736 0.1478743320 0.0000000000 -0.0780482479 0.0000000000\n" " 0.8351785230 -0.0200254137 0.0000000000 -0.2557970914 0.0000000000\n" " 0.2702560177 -0.6820892853 0.0000000000 -0.4542195946 0.0000000000\n" " 0.0805636848 -0.4080927351 1.0000000000 -0.4455266641 1.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "C DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 4 2 2\n" " 4.3451975957 0.1511172750 0.0000000000 -0.0883417890 0.0000000000\n" " 1.2765552224 -0.0330272512 0.0000000000 -0.2797032766 0.0000000000\n" " 0.4047139801 -0.6994401873 0.0000000000 -0.4686400677 0.0000000000\n" " 0.1166096360 -0.3842706677 1.0000000000 -0.4085514115 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "N DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 4 2 2\n" " 6.1514293421 0.1529382304 0.0000000000 -0.0952593918 0.0000000000\n" " 1.8080207176 -0.0415737876 0.0000000000 -0.2946953365 0.0000000000\n" " 0.5656159036 -0.7060780663 0.0000000000 -0.4740427661 0.0000000000\n" " 0.1593207770 -0.3734107042 1.0000000000 -0.3884930037 1.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 4 2 2\n" " 8.2783332000 0.1537128043 0.0000000000 -0.1000437084 0.0000000000\n" " 2.4319182697 -0.0468575728 0.0000000000 -0.3046718654 0.0000000000\n" " 0.7530401707 -0.7092306221 0.0000000000 -0.4764866041 0.0000000000\n" " 0.2084649705 -0.3678036990 1.0000000000 -0.3764915728 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "O DZVP-GTH-BLYP-CONFINED\n" " 2\n" " 2 0 1 4 2 2\n" " 8.8354826103 0.1386860737 0.0000000000 -0.0892277038 0.0000000000\n" " 2.7621439773 0.0162775038 0.0000000000 -0.2724019359 0.0000000000\n" " 0.8984199177 -0.6272143534 0.0000000000 -0.4630551829 0.0000000000\n" " 0.2813539810 -0.4833352657 1.0000000000 -0.4046182936 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 4 2 2\n" " 10.7284760684 0.1539953252 0.0000000000 -0.1034591141 0.0000000000\n" " 3.1496622427 -0.0503062083 0.0000000000 -0.3116781877 0.0000000000\n" " 0.9671794608 -0.7107682323 0.0000000000 -0.4776960745 0.0000000000\n" " 0.2640315133 -0.3648266470 1.0000000000 -0.3688578623 1.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "Ne DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 4 2 2\n" " 13.5711021582 0.1528118547 0.0000000000 -0.1055093745 0.0000000000\n" " 3.9754062896 -0.0499228626 0.0000000000 -0.3161557844 0.0000000000\n" " 1.2121681091 -0.7116163527 0.0000000000 -0.4784388183 0.0000000000\n" " 0.3268420958 -0.3647465749 1.0000000000 -0.3648062165 1.0000000000\n" " 3 2 2 1 1\n" " 1.2000000000 1.0000000000\n" "#","\n" "Na DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 6 3 3\n" " 24.4106415968 -0.0437913152 0.0091786765 0.0000000000 0.0412394777 0.0000000000 0.0000000000\n" " 9.9296107008 -0.2028236387 0.0363180981 0.0000000000 0.1340487332 0.0000000000 0.0000000000\n" " 3.6565524838 0.2429179955 -0.0394753287 0.0000000000 0.3537211057 0.0000000000 0.0000000000\n" " 1.2695832879 0.6645538239 -0.2078727830 0.0000000000 0.4486246648 0.0000000000 0.0000000000\n" " 0.4165172455 0.2885738064 -0.0972810085 0.0000000000 0.2617452725 1.0000000000 0.0000000000\n" " 0.0447862002 -0.0015791358 1.0489993368 1.0000000000 0.0111532456 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1169000000 1.0000000000\n" "#","\n" "Mg DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 6 3 3\n" " 26.6684192078 -0.0843827177 0.0209137976 0.0000000000 0.0574690984 0.0000000000 0.0000000000\n" " 10.6278914168 -0.1540012185 0.0328904567 0.0000000000 0.1834886260 0.0000000000 0.0000000000\n" " 4.0257536169 0.3069950002 -0.0656366632 0.0000000000 0.3728084155 0.0000000000 0.0000000000\n" " 1.4729826270 0.6341736453 -0.2789230951 0.0000000000 0.4211046995 0.0000000000 0.0000000000\n" " 0.5301398986 0.2463411075 -0.0573174800 0.0000000000 0.1968486915 1.0000000000 0.0000000000\n" " 0.0755213250 -0.0010479306 1.0561246927 1.0000000000 0.0067129918 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Al DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 4 2 2\n" " 0.9040202750 0.2819459889 0.0000000000 0.0202901873 0.0000000000\n" " 0.2716888904 -0.3565936829 0.0000000000 -0.2865844984 0.0000000000\n" " 0.1038208154 -0.7126726101 0.0000000000 -0.4993035494 0.0000000000\n" " 0.0361219503 -0.1315446458 1.0000000000 -0.3664719249 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Al DZVP-GTH-BLYP-CONFINED\n" " 2\n" " 3 0 1 4 2 2\n" " 0.9188833080 0.2847922923 0.0000000000 0.0265971886 0.0000000000\n" " 0.3059227599 -0.2166908019 0.0000000000 -0.2493477448 0.0000000000\n" " 0.1405671989 -0.6528454698 0.0000000000 -0.4330290941 0.0000000000\n" " 0.0701003942 -0.3130607257 1.0000000000 -0.4145972860 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Si DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 4 2 2\n" " 1.1607523260 0.3347731757 0.0000000000 0.0434283150 0.0000000000\n" " 0.4367408478 -0.3093572718 0.0000000000 -0.2863246710 0.0000000000\n" " 0.1596639467 -0.7662114250 0.0000000000 -0.5309372647 0.0000000000\n" " 0.0542076476 -0.1654691868 1.0000000000 -0.3502990755 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "Si DZVP-GTH-BLYP-CONFINED\n" " 2\n" " 3 0 1 4 2 2\n" " 1.1846613412 0.3285317082 0.0000000000 0.0525302034 0.0000000000\n" " 0.4966320416 -0.1837395449 0.0000000000 -0.2375844983 0.0000000000\n" " 0.2018817867 -0.7175956794 0.0000000000 -0.4934742426 0.0000000000\n" " 0.0883185787 -0.3186166920 1.0000000000 -0.3999071137 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 4 2 2\n" " 1.4438479448 0.3786128496 0.0000000000 0.0768556482 0.0000000000\n" " 0.6655205239 -0.2651542911 0.0000000000 -0.2851732159 0.0000000000\n" " 0.2306279229 -0.8037940077 0.0000000000 -0.5540528446 0.0000000000\n" " 0.0761045314 -0.2088239606 1.0000000000 -0.3549348725 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 4 2 2\n" " 1.7644177483 0.4114656852 0.0000000000 0.1207217819 0.0000000000\n" " 0.9717752574 -0.2250656540 0.0000000000 -0.2949379210 0.0000000000\n" " 0.3174012156 -0.8265244883 0.0000000000 -0.5702721181 0.0000000000\n" " 0.1021260036 -0.2549919207 1.0000000000 -0.3673119254 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 4 2 2\n" " 2.1331287798 0.4248059842 0.0000000000 0.1653685236 0.0000000000\n" " 1.3235903746 -0.1892927953 0.0000000000 -0.3177398987 0.0000000000\n" " 0.4137876064 -0.8368579090 0.0000000000 -0.5798040681 0.0000000000\n" " 0.1308257425 -0.2914138536 1.0000000000 -0.3759941633 1.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 4 2 2\n" " 2.5545614018 0.4141718172 0.0000000000 0.1900119384 0.0000000000\n" " 1.6618834559 -0.1513194180 0.0000000000 -0.3348991938 0.0000000000\n" " 0.5128881676 -0.8416116448 0.0000000000 -0.5845220689 0.0000000000\n" " 0.1605817921 -0.3128170499 1.0000000000 -0.3771344877 1.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "K DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 6 3 3\n" " 4.7446150543 0.6776090858 -0.1330438947 0.0000000000 0.0442549261 0.0000000000 0.0000000000\n" " 4.0634061217 -1.0488085165 0.2215127842 0.0000000000 -0.1105968228 0.0000000000 0.0000000000\n" " 1.3597003283 0.1782277656 -0.0238079016 0.0000000000 0.3264615514 0.0000000000 0.0000000000\n" " 0.5555828915 0.8152922135 -0.3671176099 0.0000000000 0.5369026258 0.0000000000 0.0000000000\n" " 0.2069147328 0.2513051410 -0.0812211744 0.0000000000 0.2886757585 1.0000000000 0.0000000000\n" " 0.0314551108 -0.0007525995 1.0760313569 1.0000000000 0.0096972783 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.0741000000 1.0000000000\n" "#","\n" "K DZVP-GTH-BLYP-CONFINED\n" " 2\n" " 3 0 1 6 3 3\n" " 5.0541010987 0.3579755406 -0.0764703445 0.0000000000 0.0214294191 0.0000000000 0.0000000000\n" " 3.9172656623 -0.7279027742 0.1727468706 0.0000000000 -0.0903397463 0.0000000000 0.0000000000\n" " 1.3875920988 0.1617562448 -0.0280980511 0.0000000000 0.3167508594 0.0000000000 0.0000000000\n" " 0.5688300282 0.8136478071 -0.3703988041 0.0000000000 0.5367387047 0.0000000000 0.0000000000\n" " 0.2124883615 0.2680905299 -0.1358924595 0.0000000000 0.2992577807 1.0000000000 0.0000000000\n" " 0.0365517013 -0.0006990076 1.1057124282 1.0000000000 0.0115831023 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.0741000000 1.0000000000\n" "#","\n" "# Titanium\n" "# \n" "# Z(nuc) = 22\n" "# Z(eff) = 12\n" "# E(ref) = -57.936907 a.u.\n" "# \n" "Ti DZV-GTH-BLYP\n" " 1\n" " 3 0 2 6 3 2 2\n" " 7.7577063940 -0.0020221836 0.0007040530 0.0000000000 -0.1128549787 0.0000000000 0.0514577128 -0.0296043049\n" " 3.9130950485 -0.4886848871 0.1358104132 0.0000000000 0.1055473912 0.0000000000 0.1904588963 -0.1242820460\n" " 1.5201082969 0.6401079822 -0.2125240090 0.0000000000 0.5200032209 0.0000000000 0.3308521630 -0.2103629080\n" " 0.5931432380 0.6699336988 -0.4587761894 0.0000000000 0.4712945273 0.0000000000 0.3789723974 -0.2097314556\n" " 0.2016337402 0.0458870927 0.2236504805 0.0000000000 0.0769848218 1.0000000000 0.3321693836 0.2301712912\n" " 0.0555239732 -0.0006070586 0.9681970919 1.0000000000 -0.0038977980 0.0000000000 0.1083505565 0.8189372496\n" "#","\n" "# Barium\n" "# \n" "# Z(nuc) = 56\n" "# Z(eff) = 10\n" "# E(ref) = -25.242058 a.u.\n" "# \n" "Ba SZV-GTH-BLYP\n" " 1\n" " 5 0 1 3 2 1\n" " 1.4209812500 -0.5031736249 -0.2251634082 -0.1405229393\n" " 0.3546440900 1.2590856152 0.8249457612 1.0335378927\n" " 0.0425115800 0.0618835363 -1.1709205133 0.1096101386\n" "#","\n" "# Hydrogen\n" "# \n" "# Z(nuc) = 1\n" "# Z(eff) = 1\n" "# E(ref) = -0.387060 a.u. (DZV)\n" "# \n" "H DZV-GTH-PBE\n" " 1\n" " 1 0 0 4 2\n" " 8.4486934208 -0.0290463773 0.0000000000\n" " 1.8581649215 -0.1327955318 0.0000000000\n" " 0.5076108225 -0.4061407363 0.0000000000\n" " 0.1673904511 -0.5490803703 1.0000000000\n" "#","\n" "H DZVP-GTH-PBE\n" " 2\n" " 1 0 0 4 2\n" " 8.4486934208 -0.0290463773 0.0000000000\n" " 1.8581649215 -0.1327955318 0.0000000000\n" " 0.5076108225 -0.4061407363 0.0000000000\n" " 0.1673904511 -0.5490803703 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "# Carbon\n" "# \n" "# Z(nuc) = 6\n" "# Z(eff) = 4\n" "# E(ref) = -5.357012 a.u. (DZV)\n" "# \n" "C DZVP-GTH-PBE\n" " 2\n" " 2 0 1 4 2 2\n" " 4.3657614966 0.1476030280 0.0000000000 -0.0864171061 0.0000000000\n" " 1.2749626469 -0.0210014779 0.0000000000 -0.2743211800 0.0000000000\n" " 0.4052884311 -0.7098993929 0.0000000000 -0.4772572587 0.0000000000\n" " 0.1172717248 -0.3801259461 1.0000000000 -0.4035098365 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "# Nitrogen\n" "# \n" "# Z(nuc) = 7\n" "# Z(eff) = 5\n" "# E(ref) = -9.642007 a.u. (DZV)\n" "# \n" "N DZVP-GTH-PBE\n" " 2\n" " 2 0 1 4 2 2\n" " 6.1646187898 0.1507499417 0.0000000000 -0.0938164220 0.0000000000\n" " 1.8037211883 -0.0339053520 0.0000000000 -0.2912161121 0.0000000000\n" " 0.5658506122 -0.7128963473 0.0000000000 -0.4795028541 0.0000000000\n" " 0.1603297607 -0.3703029459 1.0000000000 -0.3849298984 1.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "# Oxygen\n" "# \n" "# Z(nuc) = 8\n" "# Z(eff) = 6\n" "# E(ref) = -15.773873 a.u. (DZV)\n" "# \n" "O DZVP-GTH-PBE\n" " 2\n" " 2 0 1 4 2 2\n" " 8.2968917719 0.1521363234 0.0000000000 -0.0985730287 0.0000000000\n" " 2.4314066255 -0.0407682329 0.0000000000 -0.3018606942 0.0000000000\n" " 0.7547606612 -0.7133526943 0.0000000000 -0.4800913367 0.0000000000\n" " 0.2102342150 -0.3666620394 1.0000000000 -0.3745464613 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "# Magnesium\n" "# \n" "# Z(nuc) = 12\n" "# Z(eff) = 10\n" "# E(ref) = -63.225154 a.u. (DZV)\n" "# \n" "Mg DZVP-GTH-PBE-q10 DZVP-GTH-PBE\n" " 2\n" " 2 0 1 6 3 3\n" " 28.2523693585 -0.0714106769 0.0169520109 0.0000000000 0.0508396337 0.0000000000 0.0000000000\n" " 11.3902578811 -0.1643154146 0.0358612451 0.0000000000 0.1704940251 0.0000000000 0.0000000000\n" " 4.2988917455 0.2636167334 -0.0572539076 0.0000000000 0.3626339588 0.0000000000 0.0000000000\n" " 1.5759918035 0.6448595194 -0.2521366266 0.0000000000 0.4306062033 0.0000000000 0.0000000000\n" " 0.5613579735 0.2752673720 -0.0973472023 0.0000000000 0.2152016385 1.0000000000 0.0000000000\n" " 0.0754606217 -0.0003305902 1.0641066589 1.0000000000 0.0081228668 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "# Magnesium\n" "# \n" "# all radii fixed to 0.18\n" "# \n" "# Z(nuc) = 12\n" "# Z(eff) = 10\n" "# E(ref) = -62.588650 a.u. (DZV)\n" "# \n" "Mg DZV-GTH-PBE-q10-soft\n" " 2\n" " 2 0 1 6 3 3\n" " 18.8104523828 -0.1661468987 0.0354167535 0.0000000000 0.0566689026 0.0000000000 0.0000000000\n" " 8.2318014002 -0.0567549189 0.0064682696 0.0000000000 0.2254152529 0.0000000000 0.0000000000\n" " 3.1566348611 0.4035375328 -0.0939726004 0.0000000000 0.4018442569 0.0000000000 0.0000000000\n" " 1.2110282519 0.6033695127 -0.2761377801 0.0000000000 0.3834403179 0.0000000000 0.0000000000\n" " 0.4518289787 0.1550065597 -0.0102084295 1.0000000000 0.1456919835 1.0000000000 0.0000000000\n" " 0.0733999314 -0.0006466925 1.0489008353 0.0000000000 0.0034002162 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "# Magnesium\n" "# \n" "# Z(nuc) = 12\n" "# Z(eff) = 2\n" "# E(ref) = -0.826790 a.u. (DZV)\n" "# \n" "Mg DZVP-GTH-PBE-q2\n" " 2\n" " 3 0 0 4 2\n" " 1.4682667137 0.0219081251 0.0000000000\n" " 0.6661420794 0.1894369669 0.0000000000\n" " 0.1116164481 -0.6758108328 0.0000000000\n" " 0.0398960535 -0.4565650195 1.0000000000\n" " 3 1 1 1 1\n" " 0.2000000000 1.0000000000\n" "#","\n" "# Silicon\n" "# \n" "# Z(nuc) = 14\n" "# Z(eff) = 4\n" "# E(ref) = -3.739451 a.u. (DZV)\n" "# \n" "Si DZVP-GTH-PBE\n" " 2\n" " 3 0 1 4 2 2\n" " 1.1815290892 0.3214648125 0.0000000000 0.0458533253 0.0000000000\n" " 0.4454622072 -0.2454343061 0.0000000000 -0.2633419994 0.0000000000\n" " 0.1674585747 -0.7952663455 0.0000000000 -0.5433222352 0.0000000000\n" " 0.0564288769 -0.1828967955 1.0000000000 -0.3560783416 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "# Phosphorus\n" "# \n" "# Z(nuc) = 15\n" "# Z(eff) = 5\n" "# E(ref) = -6.396285 a.u. (DZV)\n" "# \n" "P DZVP-GTH-PBE\n" " 2\n" " 3 0 1 4 2 2\n" " 1.4802317376 0.3584488109 0.0000000000 0.0813818902 0.0000000000\n" " 0.6986713896 -0.1974902111 0.0000000000 -0.2594593013 0.0000000000\n" " 0.2410963537 -0.8300256683 0.0000000000 -0.5714822479 0.0000000000\n" " 0.0788943128 -0.2268703009 1.0000000000 -0.3611947554 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "# Sulfur\n" "# \n" "# Z(nuc) = 16\n" "# Z(eff) = 6\n" "# E(ref) = -10.064918 a.u. (DZV)\n" "# \n" "S DZVP-GTH-PBE\n" " 2\n" " 3 0 1 4 2 2\n" " 1.8210130043 0.3787811739 0.0000000000 0.1262123760 0.0000000000\n" " 1.0326142421 -0.1527118831 0.0000000000 -0.2717532297 0.0000000000\n" " 0.3304499316 -0.8445546077 0.0000000000 -0.5856508153 0.0000000000\n" " 0.1058215004 -0.2742356178 1.0000000000 -0.3747165087 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "# Calcium\n" "# \n" "# Z(nuc) = 20\n" "# Z(eff) = 10\n" "# E(ref) = -36.615304 a.u. (DZV)\n" "# \n" "Ca DZVP-GTH-PBE-q10 DZVP-GTH-PBE\n" " 2\n" " 3 0 1 4 3 2\n" " 2.8342212933 0.6441471192 0.2090958309 0.0000000000 0.1692254340 0.0000000000\n" " 1.4833415585 -0.6848623428 -0.2618151665 0.0000000000 -0.5926970057 0.0000000000\n" " 0.4519073282 -0.8089853788 -0.4137067900 0.0000000000 -0.6168657871 0.0000000000\n" " 0.0502772140 -0.0131335018 1.1126219713 1.0000000000 -0.0361141736 1.0000000000\n" " 3 2 2 1 1\n" " 0.1088000000 1.0000000000\n" "#","\n" "Au TZ-GTH\n" " 1\n" " 1 0 2 6 3 3 3\n" " 3.333 -0.2996385052 -0.0253458759 -0.0505901975 0.047560000000 0.0233626853 -0.0684498204 -0.0411742318 -0.0069631085 -0.0874460677\n" " 1.582 -0.0735011750 0.0529347225 0.3174596863 -0.10200000000 -0.0112096790 0.3475804049 1.1908036284 0.7214138304 1.5934218487\n" " .7514 3.4198421760 0.0063068212 -1.0018695196 0.002000000 -0.1543550102 -0.9013800582 1.4081117116 1.000000000 1.2910850825\n" " .3568 1.000000000 -0.3216103136 1.00000000000 -0.3480000000 -0.1918211838 1.0 1.000000000 0.7172330126 1.000000000\n" " .1694 -7.5936501839 1.000000000 -0.4219772167 0.9589000000 1.000000000 -0.4056275576 0.6305837811 -0.1109815597 3.2469320583\n" " .0804 -1.4837051517 0.1624309950 1.6448580273 1.0000000000 -0.1069487306 0.4438513365 0.0688923738 -1.0201823698 -2.0909150178\n" "#","\n" "H TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 1 0 0 4 3\n" " 8.5926819670 -0.0253743372 0.0000000000 0.0\n" " 1.8741624886 -0.1423057735 0.0000000000 0.0\n" " 0.5105244224 -0.2688793627 0.0000000000 1.0\n" " 0.1671584984 -0.6811381593 1.0000000000 0.0\n" " 2 1 1 1 1\n" " 3.0000 1.0\n" " 2 1 1 1 1\n" " 0.7500 1.0\n" " 2 1 1 1 1\n" " 0.1875 1.0\n" " 3 2 2 1 1\n" " 1.0000 1.0\n" " 1 0 0 1 1\n" " 0.0360 1.0\n" "#","\n" "He TZVDD3DF3PD-GTH-BLYP\n" " 5\n" " 1 0 0 4 3\n" " 11.1193917922 -0.0770450237 0.0000000000 0.0\n" " 2.7858130727 -0.2506337219 0.0000000000 0.0\n" " 0.7622149528 -0.4810430873 0.0000000000 1.0\n" " 0.2069465438 -0.3647148361 1.0000000000 0.0\n" " 2 1 1 1 1\n" " 3.0000 1.0\n" " 2 1 1 1 1\n" " 0.7500 1.0\n" " 2 1 1 1 1\n" " 0.1875 1.0\n" " 3 2 2 1 1\n" " 2.0000 1.0\n" "#","\n" "Li TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 6 5 3\n" " 9.2302808251 0.1415242446 -0.0269136246 0.0000000000 0.0 0.0 0.0 0.0 0.0\n" " 4.3944449344 0.2843546506 -0.0528260176 0.0000000000 0.0 0.0 0.0 0.0 0.0\n" " 1.4510059930 0.4411787547 -0.1332651028 0.0000000000 0.0 0.0 0.0 0.0 0.0\n" " 0.5085373954 0.2629872002 -0.0961377531 0.0000000000 0.0 1.0 0.0 0.0 1.0\n" " 0.0767907273 0.0115877019 0.5683374551 0.0000000000 1.0 0.0 0.0 1.0 0.0\n" " 0.0261032845 -0.0035737781 0.5290064307 1.0000000000 0.0 0.0 1.0 0.0 0.0\n" " 3 2 2 1 1\n" " 0.8000 1.0\n" " 3 2 2 1 1\n" " 0.2000 1.0\n" " 3 2 2 1 1\n" " 0.0500 1.0\n" " 4 3 3 1 1\n" " 0.1500 1.0\n" " 2 0 1 1 1 1\n" " 0.0074 1.0 1.0\n" "#","\n" "Be TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 1 0 1 6 5 3\n" " 16.7422288908 0.0966449867 -0.0233351760 0.0000000000 0.0 0.0 0.0 0.0 0.0\n" " 8.5397710546 0.3229144731 -0.0609785084 0.0000000000 0.0 0.0 0.0 0.0 0.0\n" " 2.8008728446 0.4309094768 -0.1582208472 0.0000000000 0.0 0.0 0.0 0.0 0.0\n" " 1.0279668171 0.2665960365 -0.0996495616 0.0000000000 0.0 1.0 0.0 0.0 1.0\n" " 0.1816198908 0.0129440911 0.5661714027 0.0000000000 1.0 0.0 0.0 1.0 0.0\n" " 0.0575318884 -0.0033470492 0.5467939201 1.0000000000 0.0 0.0 1.0 0.0 0.0\n" " 3 2 2 1 1\n" " 1.02000 1.0\n" " 3 2 2 1 1\n" " 0.25500 1.0\n" " 3 2 2 1 1\n" " 0.06375 1.0\n" " 4 3 3 1 1\n" " 0.26000 1.0\n" " 2 0 1 1 1 1\n" " 0.0207 1.0 1.0\n" "#","\n" "B TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 4 3 3\n" " 2.8461657736 0.1478743320 0.0000000000 0.0 -0.0780482479 0.0000000000 0.0\n" " 0.8351785230 -0.0200254137 0.0000000000 0.0 -0.2557970914 0.0000000000 0.0\n" " 0.2702560177 -0.6820892853 0.0000000000 1.0 -0.4542195946 0.0000000000 1.0\n" " 0.0805636848 -0.4080927351 1.0000000000 0.0 -0.4455266641 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 1.60400 1.0\n" " 3 2 2 1 1\n" " 0.40100 1.0\n" " 3 2 2 1 1\n" " 0.10025 1.0\n" " 4 3 3 1 1\n" " 0.50000 1.0\n" " 2 0 1 1 1 1\n" " 0.03150 1.0 1.0\n" "#","\n" "C TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 4 3 3\n" " 4.3451975957 0.1511172750 0.0000000000 0.0 -0.0883417890 0.0000000000 0.0\n" " 1.2765552224 -0.0330272512 0.0000000000 0.0 -0.2797032766 0.0000000000 0.0\n" " 0.4047139801 -0.6994401873 0.0000000000 1.0 -0.4686400677 0.0000000000 1.0\n" " 0.1166096360 -0.3842706677 1.0000000000 0.0 -0.4085514115 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 2.50400 1.0\n" " 3 2 2 1 1\n" " 0.62600 1.0\n" " 3 2 2 1 1\n" " 0.15650 1.0\n" " 4 3 3 1 1\n" " 0.80000 1.0\n" " 2 0 1 1 1 1\n" " 0.04380 1.0 1.0\n" "#","\n" "N TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 4 3 3\n" " 6.1514293421 0.1529382304 0.0000000000 0.0 -0.0952593918 0.0000000000 0.0\n" " 1.8080207176 -0.0415737876 0.0000000000 0.0 -0.2946953365 0.0000000000 0.0\n" " 0.5656159036 -0.7060780663 0.0000000000 1.0 -0.4740427661 0.0000000000 1.0\n" " 0.1593207770 -0.3734107042 1.0000000000 0.0 -0.3884930037 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 3.65200 1.0\n" " 3 2 2 1 1\n" " 0.91300 1.0\n" " 3 2 2 1 1\n" " 0.22825 1.0\n" " 4 3 3 1 1\n" " 1.00000 1.0\n" " 2 0 1 1 1 1\n" " 0.06390 1.0 1.0\n" "#","\n" "O TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 4 3 3\n" " 8.2783332000 0.1537128043 0.0000000000 0.0 -0.1000437084 0.0000000000 0.0\n" " 2.4319182697 -0.0468575728 0.0000000000 0.0 -0.3046718654 0.0000000000 0.0\n" " 0.7530401707 -0.7092306221 0.0000000000 1.0 -0.4764866041 0.0000000000 1.0\n" " 0.2084649705 -0.3678036990 1.0000000000 0.0 -0.3764915728 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 5.16000 1.0\n" " 3 2 2 1 1\n" " 1.29200 1.0\n" " 3 2 2 1 1\n" " 0.33250 1.0\n" " 4 3 3 1 1\n" " 1.40000 1.0\n" " 2 0 1 1 1 1\n" " 0.08450 1.0 1.0\n" "#","\n" "F TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 4 3 3\n" " 10.7284760684 0.1539953252 0.0000000000 0.0 -0.1034591141 0.0000000000 0.0\n" " 3.1496622427 -0.0503062083 0.0000000000 0.0 -0.3116781877 0.0000000000 0.0\n" " 0.9671794608 -0.7107682323 0.0000000000 1.0 -0.4776960745 0.0000000000 1.0\n" " 0.2640315133 -0.3648266470 1.0000000000 0.0 -0.3688578623 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 7.00000 1.0\n" " 3 2 2 1 1\n" " 1.75000 1.0\n" " 3 2 2 1 1\n" " 0.43750 1.0\n" " 4 3 3 1 1\n" " 1.85000 1.0\n" " 2 0 1 1 1 1\n" " 0.10760 1.0 1.0\n" "#","\n" "Ne TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 4 3 3\n" " 13.5711021582 0.1528118547 0.0000000000 0.0 -0.1055093745 0.0000000000 0.0\n" " 3.9754062896 -0.0499228626 0.0000000000 0.0 -0.3161557844 0.0000000000 0.0\n" " 1.2121681091 -0.7116163527 0.0000000000 1.0 -0.4784388183 0.0000000000 1.0\n" " 0.3268420958 -0.3647465749 1.0000000000 0.0 -0.3648062165 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 9.21600 1.0\n" " 3 2 2 1 1\n" " 2.30400 1.0\n" " 3 2 2 1 1\n" " 0.57600 1.0\n" " 4 3 3 1 1\n" " 2.50000 1.0\n" " 2 0 1 1 1 1\n" " 0.13000 1.0 1.0\n" "#","\n" "Na TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 6 5 5\n" " 24.4106415968 -0.0437913152 0.0091786765 0.0000000000 0.0 0.0 0.0412394777 0.0000000000 0.0000000000 0.0 0.0\n" " 9.9296107008 -0.2028236387 0.0363180981 0.0000000000 0.0 0.0 0.1340487332 0.0000000000 0.0000000000 0.0 0.0\n" " 3.6565524838 0.2429179955 -0.0394753287 0.0000000000 0.0 0.0 0.3537211057 0.0000000000 0.0000000000 0.0 1.0\n" " 1.2695832879 0.6645538239 -0.2078727830 0.0000000000 0.0 1.0 0.4486246648 0.0000000000 0.0000000000 1.0 0.0\n" " 0.4165172455 0.2885738064 -0.0972810085 0.0000000000 1.0 0.0 0.2617452725 1.0000000000 0.0000000000 0.0 0.0\n" " 0.0447862002 -0.0015791358 1.0489993368 1.0000000000 0.0 0.0 0.0111532456 0.0000000000 1.0000000000 0.0 0.0\n" " 3 2 2 1 1\n" " 0.70000 1.0\n" " 3 2 2 1 1\n" " 0.17500 1.0\n" " 3 2 2 1 1\n" " 0.04375 1.0\n" " 4 3 3 1 1\n" " 0.15000 1.0\n" " 2 0 1 1 1 1\n" " 0.00760 1.0 1.0\n" "#","\n" "Mg TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 6 5 5\n" " 26.6684192078 -0.0843827177 0.0209137976 0.0000000000 0.0 0.0 0.0574690984 0.0000000000 0.0000000000 0.0 0.0\n" " 10.6278914168 -0.1540012185 0.0328904567 0.0000000000 0.0 0.0 0.1834886260 0.0000000000 0.0000000000 0.0 0.0\n" " 4.0257536169 0.3069950002 -0.0656366632 0.0000000000 0.0 0.0 0.3728084155 0.0000000000 0.0000000000 1.0 0.0\n" " 1.4729826270 0.6341736453 -0.2789230951 0.0000000000 0.0 1.0 0.4211046995 0.0000000000 0.0000000000 0.0 1.0\n" " 0.5301398986 0.2463411075 -0.0573174800 0.0000000000 1.0 0.0 0.1968486915 1.0000000000 0.0000000000 0.0 0.0\n" " 0.0755213250 -0.0010479306 1.0561246927 1.0000000000 0.0 0.0 0.0067129918 0.0000000000 1.0000000000 0.0 0.0\n" " 3 2 2 1 1\n" " 0.70000 1.0\n" " 3 2 2 1 1\n" " 0.17500 1.0\n" " 3 2 2 1 1\n" " 0.04375 1.0\n" " 4 3 3 1 1\n" " 0.20000 1.0\n" " 2 0 1 1 1 1\n" " 0.01460 1.0 1.0\n" "#","\n" "Al TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 3 0 1 4 3 3\n" " 0.9040202750 0.2819459889 0.0000000000 0.0 0.0202901873 0.0000000000 0.0\n" " 0.2716888904 -0.3565936829 0.0000000000 0.0 -0.2865844984 0.0000000000 0.0\n" " 0.1038208154 -0.7126726101 0.0000000000 1.0 -0.4993035494 0.0000000000 1.0\n" " 0.0361219503 -0.1315446458 1.0000000000 0.0 -0.3664719249 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 1.30000 1.0\n" " 3 2 2 1 1\n" " 0.32500 1.0\n" " 3 2 2 1 1\n" " 0.08125 1.0\n" " 4 3 3 1 1\n" " 0.25000 1.0\n" " 2 0 1 1 1 1\n" " 0.03180 1.0 1.0\n" "#","\n" "Si TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 3 0 1 4 3 3\n" " 1.1607523260 0.3347731757 0.0000000000 0.0 0.0434283150 0.0000000000 0.0\n" " 0.4367408478 -0.3093572718 0.0000000000 0.0 -0.2863246710 0.0000000000 0.0\n" " 0.1596639467 -0.7662114250 0.0000000000 1.0 -0.5309372647 0.0000000000 1.0\n" " 0.0542076476 -0.1654691868 1.0000000000 0.0 -0.3502990755 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 1.80000 1.0\n" " 3 2 2 1 1\n" " 0.45000 1.0\n" " 3 2 2 1 1\n" " 0.11250 1.0\n" " 4 3 3 1 1\n" " 0.32000 1.0\n" " 2 0 1 1 1 1\n" " 0.03310 1.0 1.0\n" "#","\n" "P TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 3 0 1 4 3 3\n" " 1.4438479448 0.3786128496 0.0000000000 0.0 0.0768556482 0.0000000000 0.0\n" " 0.6655205239 -0.2651542911 0.0000000000 0.0 -0.2851732159 0.0000000000 0.0\n" " 0.2306279229 -0.8037940077 0.0000000000 1.0 -0.5540528446 0.0000000000 1.0\n" " 0.0761045314 -0.2088239606 1.0000000000 0.0 -0.3549348725 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 2.20000 1.0\n" " 3 2 2 1 1\n" " 0.55000 1.0\n" " 3 2 2 1 1\n" " 0.13750 1.0\n" " 4 3 3 1 1\n" " 0.45000 1.0\n" " 2 0 1 1 1 1\n" " 0.03480 1.0 1.0\n" "#","\n" "S TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 3 0 1 4 3 3\n" " 1.7644177483 0.4114656852 0.0000000000 0.0 0.1207217819 0.0000000000 0.0\n" " 0.9717752574 -0.2250656540 0.0000000000 0.0 -0.2949379210 0.0000000000 0.0\n" " 0.3174012156 -0.8265244883 0.0000000000 1.0 -0.5702721181 0.0000000000 1.0\n" " 0.1021260036 -0.2549919207 1.0000000000 0.0 -0.3673119254 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 2.60000 1.0\n" " 3 2 2 1 1\n" " 0.65000 1.0\n" " 3 2 2 1 1\n" " 0.16250 1.0\n" " 4 3 3 1 1\n" " 0.55000 1.0\n" " 2 0 1 1 1 1\n" " 0.04050 1.0 1.0\n" "#","\n" "Cl TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 3 0 1 4 3 3\n" " 2.1331287798 0.4248059842 0.0000000000 0.0 0.1653685236 0.0000000000 0.0\n" " 1.3235903746 -0.1892927953 0.0000000000 0.0 -0.3177398987 0.0000000000 0.0\n" " 0.4137876064 -0.8368579090 0.0000000000 1.0 -0.5798040681 0.0000000000 1.0\n" " 0.1308257425 -0.2914138536 1.0000000000 0.0 -0.3759941633 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 3.00000 1.0\n" " 3 2 2 1 1\n" " 0.75000 1.0\n" " 3 2 2 1 1\n" " 0.18750 1.0\n" " 4 3 3 1 1\n" " 0.70000 1.0\n" " 2 0 1 1 1 1\n" " 0.04830 1.0 1.0\n" "#","\n" "Ar TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 3 0 1 4 3 3\n" " 2.5545614018 0.4141718172 0.0000000000 0.0 0.1900119384 0.0000000000 0.0\n" " 1.6618834559 -0.1513194180 0.0000000000 0.0 -0.3348991938 0.0000000000 0.0\n" " 0.5128881676 -0.8416116448 0.0000000000 1.0 -0.5845220689 0.0000000000 1.0\n" " 0.1605817921 -0.3128170499 1.0000000000 0.0 -0.3771344877 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 3.40000 1.0\n" " 3 2 2 1 1\n" " 0.85000 1.0\n" " 3 2 2 1 1\n" " 0.21250 1.0\n" " 4 3 3 1 1\n" " 0.85000 1.0\n" " 2 0 1 1 1 1\n" " 0.06000 1.0 1.0\n" "#"}; atomes_1.3.1/src/calc/lammps/0000775000175000017500000000000015212624223015467 5ustar lerouxlerouxatomes_1.3.1/src/calc/lammps/la_print.c0000664000175000017500000006005415212624223017450 0ustar lerouxleroux/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' 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 Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2026 by CNRS and University of Strasbourg */ /*! * @file la_print.c * @short Functions to print the LAMMPS input file(s) * @author Sébastien Le Roux */ /* * This file: 'la_print.c' * * Contains: * - The functions to print the LAMMPS input file(s) * * List of functions: int get_mol_id_from_model_id (int at); int print_lammps_dihedral (int did, int di, GtkTextBuffer * buf, field_struct * dh); int print_lammps_angle (int aid, int ai, GtkTextBuffer * buf, field_struct * an); int print_lammps_bond (int bid, int bi, GtkTextBuffer * buf, field_struct * bd); int is_this_new_prop (int sid, field_prop * init, field_prop * to_check); int get_type_struct_to_print (field_molecule * tfmol, int sid); int get_different_atoms (); gboolean are_different_field_atoms (field_atom* at, field_atom* bt); void print_lammps_mass (GtkTextBuffer * buf); void print_lammps_atoms (GtkTextBuffer * buf); void print_lammps_atom_file (GtkTextBuffer * buf); field_atom* get_print_atom (int aid); */ #include "dlp_field.h" #include "interface.h" /*! \enum lammps_atom_types */ enum lammps_atom_types { // comments = corresponding data file formats l_angle = 0, /*!< atom-ID molecule-ID atom-type x y z */ l_atomic = 1, /*!< atom-ID atom-type x y z */ l_body = 2, /*!< atom-ID atom-type bodyflag mass x y z */ l_bond = 3, /*!< atom-ID molecule-ID atom-type x y z */ l_charge = 4, /*!< atom-type q x y z */ l_dipole = 5, /*!< atom-ID atom-type q x y z mux muy muz */ l_dpd = 6, /*!< atom-ID atom-type theta x y z */ l_edpd = 7, /*!< atom-ID atom-type edpd_temp edpd_cv x y z */ l_electron = 8, /*!< atom-ID atom-type q spin eradius x y z */ l_ellipsoid = 9, /*!< atom-ID atom-type ellipsoidflag density x y z */ l_full = 10, /*!< atom-ID molecule-ID atom-type q x y z */ l_line = 11, /*!< atom-ID molecule-ID atom-type lineflag density x y z */ l_mdpd = 12, /*!< atom-ID atom-type rho x y z */ l_molecular = 13, /*!< atom-ID molecule-ID atom-type x y z */ l_peri = 14, /*!< atom-ID atom-type volume density x y z */ l_smd = 15, /*!< atom-ID atom-type molecule volume mass kernel-radius contact-radius x0 y0 z0 x y z */ l_sph = 16, /*!< atom-ID atom-type rho esph cv x y z */ l_sphere = 17, /*!< atom-ID atom-type diameter density x y z */ l_spin = 18, /*!< atom-ID atom-type x y z spx spy spz sp */ l_tdpd = 19, /*!< atom-ID atom-type x y z cc1 cc2 … ccNspecies */ l_template = 20, /*!< atom-ID atom-type molecule-ID template-index template-atom x y z */ l_tri = 21, /*!< atom-ID molecule-ID atom-type triangleflag density x y z */ l_wavepacket = 22, /*!< atom-ID atom-type charge spin eradius etag cs_re cs_im x y z */ l_hybrid = 23 /*!< atom-ID atom-type x y z sub-style1 sub-style2 … */ }; extern gboolean in_bond (int at, int bd[2]); extern int get_num_vdw_max (); extern gchar * get_body_element_name (field_nth_body * body, int aid, int nbd); extern int get_num_struct_to_print (field_molecule * fmol, int sid); extern gboolean are_identical_prop (int ti, int ai, field_prop * pro_a, field_prop * pro_b); extern void merging_atoms (field_atom* to_merge, field_atom* to_remove, gboolean upda); extern char * vect_comp[3]; /*! \fn int get_mol_id_from_model_id (int at) \brief get field molecule id using atom id \param at the atom id */ int get_mol_id_from_model_id (int at) { int i; tmp_fmol = tmp_field -> first_molecule; field_atom* fat; while (tmp_fmol) { fat = tmp_fmol -> first_atom; while (fat) { for (i=0; i< fat -> num; i++) { if (at == fat -> list[i]) return tmp_fmol -> id; } fat = fat -> next; } tmp_fmol = tmp_fmol -> next; } return -1; } field_prop * print_prop[8]; /*! \fn int print_lammps_dihedral (int did, int di, GtkTextBuffer * buf, field_struct * dh) \brief print LAMMPS dihedral \param did the dihedral id to print \param di the type of structural property = 2 \param buf the GtkTextBuffer to print into \param dh the structural property to print */ int print_lammps_dihedral (int did, int di, GtkTextBuffer * buf, field_struct * dh) { int a, c, i, j, k, l, m, n, o, p; gchar * str; field_prop * tp_prop; gboolean same_atom = FALSE; gboolean * already_done; if (tmp_fat -> id == tmp_fdt -> id && tmp_fbt -> id && tmp_fct -> id) { same_atom = TRUE; already_done = allocbool (tmp_fmol -> mol -> natoms); } int * ids = allocint (4); for (i=0; i num; i++) { j = tmp_fat -> list[i]; a = ids[0] = tmp_fat -> list_id[i]; if (same_atom) already_done[a] = TRUE; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == tmp_fbt -> id) { ids[1] = tmp_proj -> atoms[0][l].fid; for (m=0; m atoms[0][l].numv; m++) { n = tmp_proj -> atoms[0][l].vois[m]; if (n != j && tmp_proj -> atoms[0][n].faid == tmp_fct -> id) { ids[2] = tmp_proj -> atoms[0][n].fid; for (o=0; o atoms[0][n].numv; o++) { p = tmp_proj -> atoms[0][n].vois[o]; c = ids[3] = tmp_proj -> atoms[0][p].fid; if (p != j && p != l && tmp_proj -> atoms[0][p].faid == tmp_fdt -> id && (! same_atom || (same_atom && ! already_done[c]))) { tmp_fprop = get_active_prop_using_atoms (dh -> other, 4, ids); if (tmp_fprop == NULL) tmp_fprop = dh -> def; tp_prop = print_prop[2*di]; while (! are_identical_prop (2*di+1, 0, tmp_fprop, tp_prop) && tp_prop -> next) tp_prop = tp_prop -> next; if (tp_prop -> use) { str = g_strdup_printf ("%5d %5d %10d %10d %10d %10d\n", did+1, tp_prop -> pid, j+1, l+1, n+1, p+1); print_info (str, NULL, buf); g_free (str); did ++; } } } } } } } } g_free (ids); if (same_atom) g_free (already_done); return did; } /*! \fn int print_lammps_angle (int aid, int ai, GtkTextBuffer * buf, field_struct * an) \brief print LAMMPS angle \param aid the angle id to print \param ai the type of structural property = 1 \param buf the GtkTextBuffer to print into \param an the structural property to print */ int print_lammps_angle (int aid, int ai, GtkTextBuffer * buf, field_struct * an) { int i, j, k, l, m, o, p, q; gchar * str; field_prop * tp_prop; int * ids = allocint (3); gboolean same_atom = FALSE; gboolean * already_done; if (tmp_fat -> id == tmp_fct -> id) { same_atom = TRUE; already_done = allocbool (tmp_fmol -> mol -> natoms); } for (i=0; i num; i++) { j = tmp_fat -> list[i]; k = ids[0] = tmp_proj -> atoms[0][j].fid; if (same_atom) already_done[k] = TRUE; for (l=0; l atoms[0][j].numv; l++) { m = tmp_proj -> atoms[0][j].vois[l]; if (tmp_proj -> atoms[0][m].faid == tmp_fbt -> id) { ids[1] = tmp_proj -> atoms[0][m].fid; for (o=0; o atoms[0][m].numv; o++) { p = tmp_proj -> atoms[0][m].vois[o]; q = ids[2] = tmp_proj -> atoms[0][p].fid; if (p != j && tmp_proj -> atoms[0][p].faid == tmp_fct -> id && (! same_atom || (same_atom && ! already_done[q]))) { tmp_fprop = get_active_prop_using_atoms (an -> other, 3, ids); if (tmp_fprop == NULL) tmp_fprop = an -> def; tp_prop = print_prop[2*ai]; while (! are_identical_prop (2*ai+1, 0, tmp_fprop, tp_prop)) tp_prop = tp_prop -> next; if (tp_prop -> use) { str = g_strdup_printf ("%5d %5d %10d %10d %10d\n", aid+1, tp_prop -> pid, j+1, m+1, p+1); print_info (str, NULL, buf); g_free (str); aid ++; } } } } } } g_free (ids); if (same_atom) g_free (already_done); return aid; } /*! \fn int print_lammps_bond (int bid, int bi, GtkTextBuffer * buf, field_struct * bd) \brief print LAMMPS bond \param bid the bond id to print \param bi the type of structural property = 0 \param buf the GtkTextBuffer to print into \param bd the structural property to print */ int print_lammps_bond (int bid, int bi, GtkTextBuffer * buf, field_struct * bd) { int i, j, k, l, m, n; gchar * str; field_prop * tp_prop; int * ids = allocint (2); gboolean same_atom = FALSE; gboolean * already_done; if (tmp_fat -> id == tmp_fbt -> id) { same_atom = TRUE; already_done = allocbool (tmp_fmol -> mol -> natoms); } for (i=0; i num; i++) { j = tmp_fat -> list[i]; k = ids[0] = tmp_fat -> list_id[i]; if (same_atom) already_done[k] = TRUE; for (l=0; l atoms[0][j].numv; l++) { m = tmp_proj -> atoms[0][j].vois[l]; n = ids[1] = tmp_proj -> atoms[0][m].fid; if (tmp_proj -> atoms[0][m].faid == tmp_fbt -> id && (! same_atom || (same_atom && ! already_done[n]))) { tmp_fprop = get_active_prop_using_atoms (bd -> other, 2, ids); if (tmp_fprop == NULL) tmp_fprop = bd -> def; tp_prop = print_prop[2*bi]; while (! are_identical_prop (2*bi+1, 0, tmp_fprop, tp_prop)) tp_prop = tp_prop -> next; if (tmp_fprop -> use) { str = g_strdup_printf ("%5d %5d %10d %10d\n", bid+1, tp_prop -> pid, j+1, m+1); print_info (str, NULL, buf); g_free (str); bid ++; } } } } g_free (ids); if (same_atom) g_free (already_done); return bid; } /*! \fn int is_this_new_prop (int sid, field_prop * init, field_prop * to_check) \brief check if field property exists, if not add it \param sid the type of structural property \param init the initial field property pointer \param to_check the field property to check */ int is_this_new_prop (int sid, field_prop * init, field_prop * to_check) { field_prop * tmp_pr = init; gboolean add_prop = TRUE; while (tmp_pr) { if (are_identical_prop (sid+1, 0, to_check, tmp_pr)) { add_prop = FALSE; break; } else if (tmp_pr -> next) { tmp_pr = tmp_pr -> next; } else { break; } } if (add_prop) { tmp_pr -> next = duplicate_field_prop (to_check, sid); tmp_pr -> next -> pid = tmp_pr -> pid + 1; } return (add_prop) ? 1 : 0; } /*! \fn int get_type_struct_to_print (field_molecule * tfmol, int sid) \brief build the list of 'sid' type structural property(ies) to print \param tfmol the field molecule \param sid the type of structural */ int get_type_struct_to_print (field_molecule * tfmol, int sid) { int pid = 0; tmp_fstr = tfmol -> first_struct[sid]; while (tmp_fstr) { if (tmp_fstr -> def -> use) { if (! print_prop[sid]) { print_prop[sid] = duplicate_field_prop (tmp_fstr -> def, sid); pid = print_prop[sid] -> pid = 1; } else { pid += is_this_new_prop (sid, print_prop[sid], tmp_fstr -> def); } } if (tmp_fstr -> other) { tmp_fprop = tmp_fstr -> other; while (tmp_fprop) { if (tmp_fprop -> use && ! are_identical_prop (sid+1, 0, tmp_fstr -> def, tmp_fprop)) { if (! print_prop[sid]) { print_prop[sid] = duplicate_field_prop (tmp_fprop, sid); pid = print_prop[sid] -> pid = 1; } else { pid += is_this_new_prop (sid, print_prop[sid], tmp_fprop); } } tmp_fprop = tmp_fprop -> next; } } tmp_fstr = tmp_fstr -> next; } return pid; } field_atom* all_at; /*! \fn gboolean are_different_field_atoms (field_atom* at, field_atom* bt) \brief check if two field atoms are different \param at 1st field atom \param bt 2nd field atom */ gboolean are_different_field_atoms (field_atom* at, field_atom* bt) { if (g_strcmp0(at -> name, bt -> name) != 0) return TRUE; if (at -> sp != bt -> sp) return TRUE; if (at -> mass != bt -> mass) return TRUE; if (at -> charge != bt -> charge) return TRUE; return FALSE; } /*! \fn int get_different_atoms () \brief create the list of all different field atoms */ int get_different_atoms () { int numat = 0; tmp_fmol = tmp_field -> first_molecule; all_at = NULL; gboolean append; while (tmp_fmol) { tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { if (! all_at) { all_at = duplicate_field_atom(tmp_fat); numat = all_at -> id = 1; } else { append = TRUE; tmp_fbt = all_at; while (tmp_fbt) { if (! are_different_field_atoms(tmp_fat, tmp_fbt)) { merging_atoms (tmp_fbt, tmp_fat, FALSE); append = FALSE; break; } tmp_fbt = tmp_fbt -> next; } if (append) { tmp_fbt = all_at; while (tmp_fbt -> next) tmp_fbt = tmp_fbt -> next; tmp_fbt -> next = duplicate_field_atom (tmp_fat); numat = tmp_fbt -> next -> id = tmp_fbt -> id + 1; } } tmp_fat = tmp_fat -> next; } tmp_fmol = tmp_fmol -> next; } return numat; } /*! \fn void print_lammps_mass (GtkTextBuffer * buf) \brief pritn LAMMPS atomic masses \param buf the GtkTextBuffer to print into */ void print_lammps_mass (GtkTextBuffer * buf) { gchar * str; print_info ("\nMass\n\n", "bold", buf); tmp_fat = all_at; while (tmp_fat) { str = g_strdup_printf ("\t%d\t%f\n", tmp_fat -> id, tmp_fat -> mass); print_info (str, NULL, buf); g_free (str); tmp_fat = tmp_fat -> next; } } /*! \fn field_atom* get_print_atom (int aid) \brief get LAMMPS field atom \param aid the atom id to find */ field_atom* get_print_atom (int aid) { int i; tmp_fat = all_at; while (tmp_fat) { for (i=0; i num; i++) { if (tmp_fat -> list[i] == aid) return tmp_fat; } tmp_fat = tmp_fat -> next; } return NULL; } /*! \fn void print_lammps_atoms (GtkTextBuffer * buf) \brief print LAMMPS atoms \param buf the GtkTextBuffer to print into */ void print_lammps_atoms (GtkTextBuffer * buf) { int i; //, j, k; // * field_molecule * la_mol; field_atom* la_ats; gchar * pos, * atid, * atype; //* molid, * amass; gchar * str; print_info ("\nAtoms\n\n", "bold", buf); for (i=0; i natomes; i++) { atid = g_strdup_printf ("%10d", i+1); // * la_mol = get_active_field_molecule_from_model_id (tmp_proj, i); // molid = g_strdup_printf ("%5d", la_mol -> id+1); la_ats = get_print_atom (i); atype = g_strdup_printf ("%5d", la_ats -> id); pos = g_strdup_printf ("%f\t%f\t%f", tmp_proj -> atoms[0][i].x, tmp_proj -> atoms[0][i].y, tmp_proj -> atoms[0][i].z); // amass = g_strdup_printf ("%f", la_ats -> mass); /* switch () { case l_angle: // atom-ID molecule-ID atom-type x y z str = g_strdup_printf ("%s\t%s\t%s\t%s\n", atid, molid, atype, pos); print_info (str, NULL, buf); g_free (str); break; case l_atomic: */ // atom-ID atom-type x y z str = g_strdup_printf ("%s\t%s\t%s\n", atid, atype, pos); print_info (str, NULL, buf); g_free (str); /*break; case l_body: // atom-ID atom-type bodyflag mass x y z break; case l_bond: // atom-ID molecule-ID atom-type x y z str = g_strdup_printf ("%s\t%s\t%s\t%s\n", atid, molid, atype, pos); print_info (str, NULL, buf); g_free (str); break; case l_charge: // atom-type q x y z break; case l_dipole: // atom-ID atom-type q x y z mux muy muz break; case l_dpd: // atom-ID atom-type theta x y z break; case l_edpd: // atom-ID atom-type edpd_temp edpd_cv x y z break; case l_electron: // atom-ID atom-type q spin eradius x y z break; case l_ellipsoid: // atom-ID atom-type ellipsoidflag density x y z break; case l_full: // atom-ID molecule-ID atom-type q x y z break; case l_line: // atom-ID molecule-ID atom-type lineflag density x y z break; case l_mdpd: // atom-ID atom-type rho x y z break; case l_molecular: // atom-ID molecule-ID atom-type x y z break; case l_peri: // atom-ID atom-type volume density x y z break; case l_smd: // atom-ID atom-type molecule volume mass kernel-radius contact-radius x0 y0 z0 x y z break; case l_sph: // atom-ID atom-type rho esph cv x y z break; case l_sphere: // atom-ID atom-type diameter density x y z break; case l_spin: // atom-ID atom-type x y z spx spy spz sp break; case l_tdpd: // atom-ID atom-type x y z cc1 cc2 … ccNspecies break; case l_template: // atom-ID atom-type molecule-ID template-index template-atom x y z break; case l_tri: // atom-ID molecule-ID atom-type triangleflag density x y z break; case l_wavepacket: // atom-ID atom-type charge spin eradius etag cs_re cs_im x y z break; }*/ } } /*! \fn void print_lammps_atom_file (GtkTextBuffer * buf) \brief print LAMMPS atom file \param buf the GtkTextBuffer to print into */ void print_lammps_atom_file (GtkTextBuffer * buf) { int i, j; //, k, l; gchar * str; GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (buf, & bStart); gtk_text_buffer_get_end_iter (buf, & bEnd); gtk_text_buffer_delete (buf, & bStart, & bEnd); //str = g_strdup_printf ("# This file was created using %s\n", PACKAGE); //print_info (str, NULL, buf); //g_free (str); print_info ("LAMMPS Atom File\n\n", NULL, buf); str = g_strdup_printf ("%12d", tmp_proj -> natomes); print_info (str, "bold_blue", buf); g_free (str); print_info (" atoms", "bold", buf); print_info ("\n", NULL, buf); gchar * str_title[4] = {" bond", " angle", " dihedral", " improper"}; for (i=0; i<4; i++) { tmp_fmol = tmp_field -> first_molecule; j = 0; while (tmp_fmol) { if (tmp_field -> afp[i*2+15]) { j += get_num_struct_to_print (tmp_fmol, i*2); } tmp_fmol = tmp_fmol -> next; } if (j > 0) { str = g_strdup_printf ("%12d", j); print_info (str, "bold_blue", buf); g_free (str); print_info (str_title[i], "bold", buf); print_info ("s\n", "bold", buf); } } print_info ("\n", NULL, buf); int numat = get_different_atoms (); str = g_strdup_printf ("%12d", numat); print_info (str, "bold_red", buf); g_free (str); print_info (" atom types", "bold", buf); print_info ("\n", NULL, buf); int ntypes[4]; for (i=0; i<4; i++) { ntypes[i] = 0; print_prop[2*i] = NULL; if (tmp_field -> afp[i*2+15]) { tmp_fmol = tmp_field -> first_molecule; while (tmp_fmol) { j = get_type_struct_to_print (tmp_fmol, 2*i); ntypes[i] += j; tmp_fmol = tmp_fmol -> next; } if (ntypes[i] > 0) { str = g_strdup_printf ("%12d", ntypes[i]); print_info (str, "bold_red", buf); g_free (str); print_info (str_title[i], "bold", buf); print_info (" types\n", "bold", buf); } } } // Lattice print_info ("\n", NULL, buf); /*xlo xhi ylo yhi zlo zhi*/ if (tmp_proj -> cell.pbc) { j = 0; for (i=0; i<3; i++) { str = g_strdup_printf ("%f %f %slo %shi\n", 0.0, tmp_proj -> cell.box[0].param[0][i], vect_comp[i], vect_comp[i]); print_info (str, NULL, buf); g_free (str); if (tmp_proj -> cell.box[0].param[1][i] != 90.0) j=1; } if (j) { float lx, ly, lz; float xy, xz, yz; lx = tmp_proj -> cell.box[0].param[0][0]; xy = tmp_proj -> cell.box[0].param[0][1] * cos(tmp_proj -> cell.box[0].param[1][2]*pi/180.0); xz = tmp_proj -> cell.box[0].param[0][2] * cos(tmp_proj -> cell.box[0].param[1][1]*pi/180.0); ly = sqrt(tmp_proj -> cell.box[0].param[0][1]*tmp_proj -> cell.box[0].param[0][1] -xy*xy); yz = (tmp_proj -> cell.box[0].param[0][1]*(tmp_proj -> cell.box[0].param[0][2]*cos(tmp_proj -> cell.box[0].param[1][0]*pi/180.0)) - xy*xz) / ly; lz = sqrt(tmp_proj -> cell.box[0].param[0][2]*tmp_proj -> cell.box[0].param[0][2] - xz*xz - yz*yz); str = g_strdup_printf ("%f %f %f\n", lx, ly, lz); print_info (str, NULL, buf); g_free (str); } } else { // min(pos), max(pos) } // Masses print_lammps_mass (buf); gchar * coeffs[13]={"Pair", "Bond", "Angle", "Dihedral", "Improper", "BondBond", "BondAngle", "MiddleBondTorsion", "EndBondTorsion", "AngleTorsion", "AngleAngleTorsion", "BondBond13", "AngleAngle"}; // > 5 = CVFF force field ? /* if (tmp_field -> afp[23]) { j=0; tmp_fbody = tmp_field -> first_body[0]; while (tmp_fbody) { if (tmp_fbody -> use) j++; tmp_fbody = tmp_fbody -> next; } if (j > 0) { k = get_num_vdw_max (); l = k * (k+1) / 2; str = g_strdup_printf ("%s Coeffs\n\n", coeffs[0]); print_info(str, "bold", buf); g_free (str); tmp_fbody = tmp_field -> first_body[0]; while (tmp_fbody) { if (tmp_fbody -> use) { print_lam_body (buf, l, tmp_fbody); } tmp_fbody = tmp_fbody -> next; } } } */ for (i=0; i<4; i++) { if (ntypes[i]) { str = g_strdup_printf ("\n%s Coeffs\n\n", coeffs[i+1]); print_info (str, "bold", buf); g_free (str); tmp_fprop = print_prop[2*i]; while (tmp_fprop) { str = g_strdup_printf (" %5d", tmp_fprop -> pid); print_info (str, NULL, buf); g_free (str); for (j=0; j key]; j++) { str = g_strdup_printf (" %15.10f", tmp_fprop -> val[j]); print_info (str, NULL, buf); g_free (str); } print_info ("\n", NULL, buf); tmp_fprop = tmp_fprop -> next; } } } // Atoms print_lammps_atoms (buf); for (i=0; i<4; i++) { j = 0; if (ntypes[i]) { str = g_strdup_printf ("\n%ss\n\n", coeffs[i+1]); print_info(str, "bold", buf); g_free (str); tmp_fmol = tmp_field -> first_molecule; while (tmp_fmol) { if (get_num_struct_to_print (tmp_fmol, i*2)) { tmp_fstr = tmp_fmol -> first_struct[i*2]; while (tmp_fstr) { tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fstr -> aid[0]); tmp_fbt = get_active_atom (tmp_fmol -> id, tmp_fstr -> aid[1]); if (i > 0) tmp_fct = get_active_atom (tmp_fmol -> id, tmp_fstr -> aid[2]); if (i > 1) tmp_fdt = get_active_atom (tmp_fmol -> id, tmp_fstr -> aid[3]); if (i == 0) j = print_lammps_bond (j, i, buf, tmp_fstr); if (i == 1) j = print_lammps_angle (j, i, buf, tmp_fstr); if (i == 2) j = print_lammps_dihedral (j, i, buf, tmp_fstr); // if (i == 3) j = print_lammps_improper (j, i, buf, tmp_fstr); tmp_fstr = tmp_fstr -> next; } } tmp_fmol = tmp_fmol -> next; } } } } atomes_1.3.1/locale/0000775000175000017500000000000015212624223013744 5ustar lerouxlerouxatomes_1.3.1/locale/fr/0000775000175000017500000000000015212624223014353 5ustar lerouxlerouxatomes_1.3.1/locale/fr/atomes-messages.po0000664000175000017500000151231215212624223020015 0ustar lerouxleroux# This file is part of the 'atomes' software # # 'atomes' is free software: you can redistribute it and/or modify it under the terms # of the GNU Affero General Public License as published by the Free Software Foundation, # either version 3 of the License, or (at your option) any later version. # # 'atomes' 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 Affero General Public License along with 'atomes'. # If not, see # # Copyright (C) 2022-2026 by CNRS and University of Strasbourg msgid "" msgstr "" "Project-Id-Version: atomes 1.3.0\n" "PO-Revision-Date: 2026-05-12 16:25+0200\n" "Last-Translator: Sébastien Le Roux \n" "Language-Team: Français\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # ============================================================ # Section: gui # ============================================================ # File: gui/bdcall.c, Line: 181 msgid "Angles [%s-%s-%s]" msgstr "Angles [%s-%s-%s]" # File: gui/bdcall.c, Line: 197 msgid "Dihedrals [%s-%s-%s-%s]" msgstr "Dièdres [%s-%s-%s-%s]" # File: gui/bdcall.c, Line: 431 msgid "\n\nAngles and diherdrals distribution(s)\n\n" msgstr "\n\nDistribution(s) des angles et dièdres\n\n" # File: gui/bdcall.c, Line: 432 # File: gui/grcall.c, Line: 142 # File: gui/msdcall.c, Line: 154 # File: gui/sqcall.c, Line: 145 msgid "Calculation details:\n\n" msgstr "Détails du calcul:\n\n" # File: gui/bdcall.c, Line: 433 msgid "\tAngular space discretization:\n\n" msgstr "\tDiscrétisation de l'espace angulaire:\n\n" # File: gui/bdcall.c, Line: 434,997 msgid "\t - Number of δ° steps: " msgstr "\t - Nombre d'intervalles δ°: " # File: gui/bdcall.c, Line: 438 msgid "\n\n\t between 0.0 and 180.0" msgstr "\n\n\t entre 0,0 et 180,0" # File: calc/cp2k/cp2k_mol.c, Line: 256 # File: calc/dl_poly/dlp_edit.c, Line: 1184 # File: calc/dl_poly/dlp_mol.c, Line: 478 # File: gui/bdcall.c, Line: 495 # File: opengl/win/glwindow.c, Line: 157 # File: opengl/win/m_coord.c, Line: 582 # File: opengl/win/m_tools.c, Line: 82 # File: opengl/win/w_coord.c, Line: 850 # File: opengl/win/w_search.c, Line: 4147 # File: opengl/win/w_volumes.c, Line: 707 msgid "Fragment" msgstr "Fragment" # File: calc/cpmd/cpmd_init.c, Line: 214 # File: calc/dl_poly/dlp_field.c, Line: 142 # File: gui/bdcall.c, Line: 503 # File: opengl/win/glwindow.c, Line: 158 # File: opengl/win/m_coord.c, Line: 582 # File: opengl/win/m_tools.c, Line: 83 # File: opengl/win/w_coord.c, Line: 850 # File: opengl/win/w_library.c, Line: 1148 # File: opengl/win/w_search.c, Line: 4147 # File: opengl/win/w_volumes.c, Line: 707 msgid "Molecule" msgstr "Molécule" # File: gui/bdcall.c, Line: 589 # File: gui/chainscall.c, Line: 315 # File: gui/ringscall.c, Line: 446 # File: gui/spcall.c, Line: 211 msgid "The nearest neighbors table calculation has failed" msgstr "Le calcul de la table des plus proches voisins a échoué" # File: gui/bdcall.c, Line: 596 # File: gui/spcall.c, Line: 207 msgid "Impossible to update FORTRAN data" msgstr "Impossible de mettre à jour les données FORTRAN" # File: gui/bdcall.c, Line: 623 msgid "Unexpected error when calculating bond properties" msgstr "Erreur inattendue lors du calcul des propriétés des liaisons" # File: gui/bdcall.c, Line: 635 msgid "Unexpected error when looking for isolated fragment(s) and molecule(s)" msgstr "Erreur inattendue lors de la recherche de fragment(s) isolé(s) et de molécule(s)" # File: gui/bdcall.c, Line: 681 msgid "Unexpected error when calculating the bond angles distribution" msgstr "Erreur inattendue lors du calcul de la distribution des angles de liaison" # File: gui/bdcall.c, Line: 689 msgid "Unexpected error when calculating the dihedral angles distribution" msgstr "Erreur inattendue lors du calcul de la distribution des angles dièdres" # File: gui/bdcall.c, Line: 735 msgid "\n\nBond properties\n\n" msgstr "\n\nPropriétés des liaisons\n\n" # File: gui/bdcall.c, Line: 736 msgid "Existence of a bond between 2 atoms i (α) and j (β)\n" msgstr "Existence d'une liaison entre 2 atomes i (α) et j (β)\n" # File: gui/bdcall.c, Line: 737 msgid "if the 2 following conditions are verified:\n\n\t1) D" msgstr "si les 2 conditions suivantes sont vérifiées:\n\n\t1)D" # File: gui/bdcall.c, Line: 739 msgid " < first minimum of the total g(r) (%9.5f Å )\n\t2) D" msgstr " < premier minimum de la g(r) totale (%9.5f Å )\n\t2)D" # File: gui/bdcall.c, Line: 744,771 msgid "cut" msgstr "coup." # File: gui/bdcall.c, Line: 752 msgid "\nCoordination numbers: " msgstr "\nNombres de coordination: " # File: gui/bdcall.c, Line: 758 msgid " (total)=\t" msgstr " (total)=\t" # File: gui/bdcall.c, Line: 785,974,1065,1089,1113,1164,1189 msgid "\t or \t" msgstr "\t ou \t" # File: gui/bdcall.c, Line: 801 msgid "\nAverage coordination number: " msgstr "\nNombre de coordination moyen: " # File: gui/bdcall.c, Line: 842 msgid "\nWarren-Cowley chemical order parameters for A" msgstr "\nParamètres d'ordre chimique de Warren-Cowley pour systèmes binaires A" # File: gui/bdcall.c, Line: 846,884 msgid " binary systems:\n\n" msgstr ":\n\n" # File: gui/bdcall.c, Line: 880 msgid "\nCargill-Spaepen chemical order parameters for A" msgstr "\nParamètres d'ordre chimique de Cargill-Spaepen pour systèmes binaires A" # File: gui/bdcall.c, Line: 915 msgid "\nEnvironments for " msgstr "\nEnvironnements pour " # File: gui/bdcall.c, Line: 921,1041,1129 msgid " atoms:\n\n" msgstr " atomes:\n\n" # File: gui/bdcall.c, Line: 922 msgid "\t \tN(tot)" msgstr "\t \tN(total)" # File: gui/bdcall.c, Line: 935 msgid "\tNumber\t\t or \tPercent\n\n" msgstr "\tNombre\t\t ou \tpourcentage\n\n" # File: gui/bdcall.c, Line: 995 msgid "\n\nAngle distribution function(s)\n\n" msgstr "\n\nFonction(s) de distribution des angles\n\n" # File: gui/bdcall.c, Line: 996 msgid "\tAngle space discretization:\n\n" msgstr "\tDiscrétisation de l'espace angulaire:\n\n" # File: gui/bdcall.c, Line: 1001 msgid "\n\n\t between 0.0 and 180.0°\n" msgstr "\n\n\t entre 0,0 et 180,0°\n" # File: gui/bdcall.c, Line: 1039 msgid "\nNumber and proportion of tetrahedra links for " msgstr "\nNombre et proportion de liens entre tétraèdres pour " # File: gui/bdcall.c, Line: 1052,1140 msgid " tetrahedra:\n" msgstr " tétraèdres:\n" # File: gui/bdcall.c, Line: 1055,1154 msgid "\t\t Edge-sharing: " msgstr "\t\t Arête commune: " # File: gui/bdcall.c, Line: 1079,1179 msgid "\t\t Corner-sharing: " msgstr "\t\t Sommet commun: " # File: gui/bdcall.c, Line: 1103 msgid "\t\t with the following bond defects: " msgstr "\t\t présentant les défauts de liaison suivants: " # File: gui/bdcall.c, Line: 1127 msgid "\nNumber and proportion of tetrahedra units for " msgstr "\nNombre et proportion d'unités tétraèdres pour " # File: gui/bdcall.c, Line: 1141 msgid "\t\t Total number of tetrahedra:" msgstr "\t\t Nombre total de tétraèdres:" # File: gui/calc_menu.c, Line: 600 msgid "[1] S. V. King. Nature, 213:1112 (1967).\n" "[2] L. Guttman. J. Non-Cryst. Solids., 116:145-147 (1990).\n" "[3] D. S. Franzblau. Phys. Rev. B, 44(10):4925-4930 (1991).\n" "[4] K. Goetzke and H. J. Klein. J. Non-Cryst. Solids., 127:215-220 (1991).\n" "[5] X. Yuan and A. N. Cormack. Comp. Mat. Sci., 24:343-360 (2002).\n" "[6] F. Wooten. Acta Cryst. A, 58(4):346-351 (2002)." msgstr "[1] S.V. King. Nature, 213:1112 (1967).\n" "[2] L. Guttman. J. Non-Cryst. Solids., 116:145-147 (1990).\n" "[3] D.S. Franzblau. Phys. Rev. B, 44(10):4925-4930 (1991).\n" "[4] K. Goetzke et H. J. Klein. J. Non-Cryst. Solids., 127:215-220 (1991).\n" "[5] X. Yuan et A. N. Cormack. Comp. Mat. Sci., 24:343-360 (2002).\n" "[6] F. Wooten. Acta Cristal. A, 58(4):346-351 (2002)." # File: gui/calc_menu.c, Line: 776 msgid "The result of the nearest neighbors analysis\n" "will be saved in a file that you may use afterwards.\n" msgstr "Le résultat de l’analyse des plus proches voisins\n" "sera enregistré dans un fichier que vous pourrez utiliser par la suite.\n" # File: gui/calc_menu.c, Line: 817 msgid "You must specify a number of δr intervals >= 2\n" "to discretize the real space between 0.0 and Dmax\n" msgstr "Vous devez spécifier un nombre d'intervalles δr >= 2\n" "pour discrétiser l'espace réel entre 0.0 et Dmax\n" # File: gui/calc_menu.c, Line: 823 msgid "You must specify a maximum wave vector Qmax[FFT]\n" "for the FFT, with Qmin < Qmax[FFT] <= Qmax" msgstr "Vous devez spécifier un vecteur d'onde maximum Qmax[FFT]\n" "pour la FFT, avec Qmin < Qmax[FFT] <= Qmax" # File: gui/calc_menu.c, Line: 868 msgid "You must specify a number of δr intervals >= 2\n" "to discretize the real space between\n" "the shortest and the highest inter-atomic distances" msgstr "Vous devez spécifier un nombre d'intervalles δr >= 2\n" "discrétiser l'espace réel entre\n" "les distances interatomiques les plus courtes et les plus élevées" # File: gui/calc_menu.c, Line: 875 msgid "You must specify a number of δθ intervals >= 2\n" "to discretize the angular space between 0 and 180°" msgstr "Vous devez spécifier un nombre d'intervalles δθ >= 2\n" "discrétiser l'espace angulaire entre 0 et 180°" # File: gui/calc_menu.c, Line: 904 msgid "You must specify a number of %ss per size 'n' and per node\n" "this value is used when allocating the memory to store the results\n" "and depends on both the maximum %s size used in the search\n" "and the system studied.\n" "We recommend a value at least equal to 100.\n" "If it appears that the value given is not big enough\n" "(ex: more than 100 different %ss of size 'n' for a single node)\n" "then the search will failed but the program will propose\n" "you to initiate a new search using a higher value" msgstr "Vous devez spécifier un nombre de %ss par taille 'n' et par nœud\n" "cette valeur est utilisée pour allouer la mémoire pour stocker les résultats\n" "et dépend à la fois de la taille maximale %s utilisée dans la recherche\n" "et du système étudié.\n" "Nous recommandons une valeur au moins égale à 100.\n" "S'il apparaît que la valeur donnée n'est pas assez grande\n" "(ex : plus de 100 %s différents de taille 'n' pour un seul nœud)\n" "alors la recherche échouera mais le programme vous proposera\n" "d'effectuer une nouvelle recherche en utilisant une valeur plus élevée" # File: gui/calc_menu.c, Line: 950 msgid "You must specify the time unit\n" "used to integrate the Newton's equations\n" "of motion during the molecular dynamics\n" msgstr "Vous devez préciser l'unité de temps\n" "utilisé pour intégrer les équations de Newton\n" "du mouvement au cours de la dynamique moléculaire\n" # File: gui/calc_menu.c, Line: 971 msgid "You must specify the number of steps\n" "between each of the %d configurations\n" "found for the molecular dynamics\n" msgstr "Vous devez préciser le nombre de pas\n" "entre chacune des %d configurations\n" "recensée pour la dynamique moléculaire\n" # File: gui/calc_menu.c, Line: 171 msgid "ωmax =" msgstr "ωmax =" # File: gui/calc_menu.c, Line: 179 msgid "Update step(s) between conf. and δt to evaluate ωmax" msgstr "Mettre à jour les pas entre conf. et δt pour évaluer ωmax" # File: gui/calc_menu.c, Line: 297 msgid "Maximum l, lmax ∈ [2-40]" msgstr "Maximum l, lmax ∈ [2-40]" # File: gui/calc_menu.c, Line: 314,317 msgid "Number of configurations:" msgstr "Nombre de configurations:" # File: gui/calc_menu.c, Line: 315 msgid "\tTime step δt used during the dynamics:" msgstr "\tPas de temps δt utilisé lors de la dynamique:" # File: gui/calc_menu.c, Line: 316 msgid "\tNumber of step(s) between each configuration:" msgstr "\tNombre de pas entre chaque configuration:" # File: gui/calc_menu.c, Line: 318 # File: gui/preferences.c, Line: 4240 msgid "Time step δt" msgstr "Pas de temps δt" # File: gui/calc_menu.c, Line: 319 # File: gui/preferences.c, Line: 4229 msgid "Step(s) between conf." msgstr "Pas entre les conf." # File: gui/calc_menu.c, Line: 580 msgid "All Rings (No Rule)" msgstr "Tous les Anneaux (Aucune Règle)" # File: gui/calc_menu.c, Line: 581 msgid "King's [1, 3]" msgstr "de King [1, 3]" # File: gui/calc_menu.c, Line: 582 msgid "Guttman's [2]" msgstr "de Guttman [2]" # File: gui/calc_menu.c, Line: 583 msgid "Primitives [4, 5, 6]" msgstr "Primitifs [4, 5, 6]" # File: gui/calc_menu.c, Line: 584 msgid "Strongs [4, 5]" msgstr "Forts [4, 5]" # File: gui/calc_menu.c, Line: 585 msgid "Definition of ring to be used: " msgstr "Définition d'anneaux à utiliser: " # File: gui/calc_menu.c, Line: 585 msgid "Atom(s) to initiate the search from: " msgstr "Atome(s) à partir desquels initier la recherche: " # File: gui/calc_menu.c, Line: 586 msgid "nmax = maximum size for a ring *" msgstr "nmax = taille maximale pour un anneau*" # File: gui/calc_menu.c, Line: 587 msgid "Maximum number of rings of size n per MD step **" msgstr "Nombre maximum d'anneaux de taille n par pas de DM **" # File: gui/calc_menu.c, Line: 588 msgid "nmax = maximum size for a chain *" msgstr "nmax = taille maximale pour une chaîne *" # File: gui/calc_menu.c, Line: 589 msgid "Maximum number of chains of size n per MD step **" msgstr "Nombre maximum de chaînes de taille n par pas de DM**" # File: gui/calc_menu.c, Line: 590 # File: gui/preferences.c, Line: 470 msgid "Only search for ABAB rings" msgstr "Rechercher uniquement les anneaux ABAB" # File: gui/calc_menu.c, Line: 590 msgid "No homopolar bonds in the rings (A-A, B-B ...) ***" msgstr "Pas de liaisons homopolaires dans les anneaux (A-A, B-B...) ***" # File: gui/calc_menu.c, Line: 590 # File: gui/preferences.c, Line: 472 msgid "No homopolar bonds in the connectivity matrix" msgstr "Pas de liaisons homopolaires dans la matrice de connectivité" # File: gui/calc_menu.c, Line: 591 # File: gui/preferences.c, Line: 476 msgid "Only search for AAAA chains" msgstr "Rechercher uniquement les chaînes AAAA" # File: gui/calc_menu.c, Line: 591 # File: gui/preferences.c, Line: 477 msgid "Only search for ABAB chains" msgstr "Rechercher uniquement les chaînes ABAB" # File: gui/calc_menu.c, Line: 592 msgid "No homopolar bonds in the chains (A-A, B-B ...) ***" msgstr "Pas de liaisons homopolaires dans les chaînes (A-A, B-B...) ***" # File: gui/calc_menu.c, Line: 592 msgid "Only search for 1-(2)n-1 coordinated atom chains, ie. isolated chains." msgstr "Recherchez uniquement les chaînes d'atomes 1-(2)n-1, c'est-à-dire les chaînes isolées." # File: gui/calc_menu.c, Line: 594 msgid "in total number of nodes (or atoms)" msgstr "en nombre total de nœuds (ou atomes)" # File: gui/calc_menu.c, Line: 595 msgid "value used for memory allocation = f(nmax, system studied)" msgstr "valeur utilisée pour l'allocation mémoire = f(nmax, système étudié)" # File: gui/calc_menu.c, Line: 596 msgid "but homopolar bonds can shorten the rings" msgstr "mais les liaisons homopolaires peuvent raccourcir les anneaux" # File: gui/calc_menu.c, Line: 608 # File: gui/chainscall.c, Line: 124 # File: gui/ringscall.c, Line: 163 # File: opengl/edit/cbuild_edit.c, Line: 949 # File: opengl/win/initcoord.c, Line: 645 # File: opengl/win/m_coord.c, Line: 597 # File: opengl/win/w_search.c, Line: 4154 msgid "All" msgstr "Tous" # File: gui/calc_menu.c, Line: 611 # File: opengl/win/w_search.c, Line: 3917,4147 msgid "Chemical Species" msgstr "Espèces Chimiques" # File: gui/calc_menu.c, Line: 782 msgid "Save neighbors analysis in file" msgstr "Enregistrer l'analyse des voisins dans un fichier" # File: calc/cpmd/cpmd_init.c, Line: 1542 # File: calc/dl_poly/dlp_field.c, Line: 4753 # File: curve/w_data.c, Line: 181 # File: curve/w_img.c, Line: 250 # File: gui/calc_menu.c, Line: 782 # File: gui/callbacks.c, Line: 560,918,1775 # File: gui/gui.c, Line: 772,853 # File: gui/work_menu.c, Line: 134,148,177 # File: opengl/draw/image.c, Line: 212 # File: opengl/draw/movie.c, Line: 1310 # File: opengl/win/m_map.c, Line: 885 # File: opengl/win/w_chains.c, Line: 959 # File: opengl/win/w_rings.c, Line: 1094 msgid "Save" msgstr "Sauvegarder" # File: gui/calc_menu.c, Line: 868 msgid "You must specify a number of δr intervals >= 2\n" msgstr "Vous devez spécifier un nombre d'intervalles δr >= 2\n" # File: gui/calc_menu.c, Line: 822 msgid "You must specify a maximum wave vector Qmax[FFT]\n" msgstr "Vous devez spécifier un vecteur d'onde maximum Qmax[FFT]\n" # File: gui/calc_menu.c, Line: 843 msgid "You must specify a maximum wave vector Qmax\n" "note that Qmax must be > Qmin" msgstr "Vous devez spécifier un vecteur d'onde maximum Qmax\n" "notez que Qmax doit être > Qmin" # File: gui/calc_menu.c, Line: 850 msgid "You must specify a number of δq intervals >= 2\n" "to discretize the reciprocal space between 0.0 and Qmax\n" msgstr "Vous devez spécifier un nombre d'intervalles δq >= 2\n" "pour discrétiser l'espace réciproque entre 0.0 et Qmax\n" # File: gui/calc_menu.c, Line: 883 msgid "ring" msgstr "anneau" # File: gui/calc_menu.c, Line: 892 msgid "chain" msgstr "chaîne" # File: gui/calc_menu.c, Line: 896 msgid "You must specify a maximum %s size > 1 for the search" msgstr "Vous devez spécifier une taille maximale %s > 1 pour la recherche" # File: gui/calc_menu.c, Line: 929 msgid "You must specify a number lmax ∈ [2-40]" msgstr "Vous devez spécifier un nombre lmax ∈ [2-40]" # File: gui/calc_menu.c, Line: 949 msgid "You must specify the time step δt\n" msgstr "Vous devez préciser le pas de temps δt\n" # File: gui/calc_menu.c, Line: 997 msgid "You must specify the number of frequency points\n" msgstr "Vous devez préciser le nombre de points de fréquence\n" # File: gui/calc_menu.c, Line: 1011 msgid "Number of δr [Dijmin-Dijmax]" msgstr "Nombre de δr [Dijmin-Dijmax]" # File: gui/calc_menu.c, Line: 1012 msgid "Number of δθ [0-180°]" msgstr "Nombre de δθ [0-180°]" # File: gui/calc_menu.c, Line: 1013 msgid "First coordination sphere properties" msgstr "Propriétés de la première sphère de coordination" # File: gui/calc_menu.c, Line: 1014 msgid "Bond and dihedral angles distribution" msgstr "Distribution des angles de liaisons et dièdres" # File: gui/calc_menu.c, Line: 1015 msgid "Search for molecules and isolated fragments" msgstr "Recherche de molécules et de fragments isolés" # File: gui/calc_menu.c, Line: 1016 msgid "Output detailed results in text file" msgstr "Afficher les résultats détaillés dans un fichier texte" # File: gui/calc_menu.c, Line: 1130 msgid "You must specify a probability between 0.0 and 1.0" msgstr "Vous devez spécifier une probabilité comprise entre 0,0 et 1,0" # File: gui/calc_menu.c, Line: 1134 msgid "Qlim must be ≥ Qmin and ≤ Qmax" msgstr "Qlim doit être ≥ Qmin et ≤ Qmax" # File: gui/calc_menu.c, Line: 1160 msgid "The smoothing factor must be between 0.0 and 1.0" msgstr "Le facteur de lissage doit être compris entre 0,0 et 1,0" # File: gui/calc_menu.c, Line: 1349 msgid "No data set(s) to be smoothed\n" msgstr "Aucun ensemble de données à lisser\n" # File: gui/calc_menu.c, Line: 1364 msgid "Probability to keep wave\nvector q > Qlim ∈ [0.0-1.0]" msgstr "Probabilité de garder un vecteur\nd'onde q > Qlim ∈ [0,0-1,0]" # File: gui/calc_menu.c, Line: 1365 msgid "Qlim-1] ∈ [Qmin-Qmax]" msgstr "Qlim-1] ∈ [Qmin-Qmax]" # File: gui/calc_menu.c, Line: 1366 msgid " Advanced options" msgstr " Options avancées" # File: gui/calc_menu.c, Line: 1402 msgid " Gaussian data smoothing" msgstr " Lissage gaussien des données" # File: gui/calc_menu.c, Line: 1407 msgid "Factor [0.0-1.0]" msgstr "Facteur [0,0-1,0]" # File: gui/calc_menu.c, Line: 1411 msgid "Smooth" msgstr "Lisser" # File: gui/calc_menu.c, Line: 1430 msgid "Number of δr steps" msgstr "Nombre d'intervalles δr" # File: gui/calc_menu.c, Line: 1431 msgid "Number of δq steps" msgstr "Nombre d'intervalles δq" # File: gui/calc_menu.c, Line: 1434 msgid "Qmax-1]" msgstr "Qmax-1]" # File: gui/calc_menu.c, Line: 1436 msgid "Qmax for the FFT [Å-1]" msgstr "Qmax pour la FFT [Å-1]" # File: gui/calc_menu.c, Line: 1481 msgid "Dmax is the maximum inter-atomic distance in the model" msgstr "Dmax est la distance inter-atomique maximale dans le modèle" # File: gui/calc_menu.c, Line: 1487,1864 msgid "Qmin is the minimum wave vector for the model" msgstr "Qmin est le vecteur d'onde minimum pour le modèle" # File: gui/calc_menu.c, Line: 1493 msgid "Qmax is the maximum wave vector to compute S(q)" msgstr "Qmax est le vecteur d'onde maximum pour calculer S(q)" # File: gui/calc_menu.c, Line: 1667 msgid "Number of δt results to save" msgstr "Nombre de δt résultats à enregistrer" # File: gui/calc_menu.c, Line: 1667 msgid "Number of q vectors to analyze" msgstr "Nombre de vecteurs q à analyser" # File: gui/calc_menu.c, Line: 1708 msgid "This value must be > 0 and < number of steps" msgstr "Cette valeur doit être > 0 et < nombre de pas" # File: gui/calc_menu.c, Line: 1713,1931 msgid "%d calculation results in total !" msgstr "%d résultats de calcul au total !" # File: gui/calc_menu.c, Line: 1727 msgid "This value must be > 0" msgstr "Cette valeur doit être > 0" # File: gui/calc_menu.c, Line: 1890 msgid "ω points in [0.0, ωmax]" msgstr "ω points en [0.0, ωmax]" # File: gui/calc_menu.c, Line: 1876 msgid "δtmin is the correlation threshold" msgstr "δtmin est le seuil de corrélation" # File: gui/calc_menu.c, Line: 1905 msgid "Results" msgstr "Résultats" # File: gui/calc_menu.c, Line: 1908 msgid "atomes cannot yet display 3D results," msgstr "atomes ne peut pas encore afficher les résultats 3D," # File: gui/calc_menu.c, Line: 1909 msgid "but we are working to add this feature !" msgstr "mais nous travaillons pour ajouter cette fonctionnalité !" # File: gui/calc_menu.c, Line: 1910 msgid "For the time being you need to select" msgstr "Pour le moment, vous devez sélectionner" # File: gui/calc_menu.c, Line: 1911 msgid "what to display using the 2D graph system:" msgstr "ce qu'il faut afficher à l'aide du système de graph 2D:" # File: gui/calc_menu.c, Line: 1928 msgid "All δt correlated calculations" msgstr "Tous les calculs δt corrélés" # File: gui/calc_menu.c, Line: 1956 msgid "Intermediate scattering: F(q,δt)" msgstr "Diffusion intermédiaire: F(q,δt)" # File: gui/calc_menu.c, Line: 1956 msgid "Dynamic calculations: S(q,ω)" msgstr "Calculs dynamiques: S(q,ω)" # File: gui/callbacks.c, Line: 295 msgid "Impossible to %s project file: \n\n" "\t\t%s\n\n" "\tError %s %s\n" "\tProject file version: %1.1f\n" msgstr "Impossible d%s le fichier projet: \n\n" "\t\t%s\n\n" "\tErreur %s %s\n" "\tVersion du fichier du projet: %1.1f\n" # File: gui/callbacks.c, Line: 309 msgid "Impossible to %s workspace file.\n" "Error with project: \n\n" "\t\t%s\n\n" "\tError %s %s\n" "\tProject file version: %1.1f\n" msgstr "Impossible d%s le fichier espace de travail.\n" "Erreur pour le projet: \n\n" "\t\t%s\n\n" "\tErreur %s %s\n" "\tVersion du fichier du projet: %1.1f\n" # File: gui/callbacks.c, Line: 1545 msgid "Error while parsing the chemical information\n" "please check carefully the coordinates file" msgstr "Erreur lors de l'analyse des informations chimiques\n" "veuillez vérifier attentivement le fichier de coordonnées" # File: gui/callbacks.c, Line: 88,1776 msgid "XYZ file" msgstr "Fichier XYZ" # File: gui/callbacks.c, Line: 89 msgid "XYZ file - NPT" msgstr "Fichier XYZ - NPT" # File: gui/callbacks.c, Line: 90,1776 msgid "Chem3D file" msgstr "Fichier Chem3D" # File: gui/callbacks.c, Line: 91 msgid "CPMD trajectory" msgstr "Trajectoire CPMD" # File: gui/callbacks.c, Line: 92 msgid "CPMD trajectory - NPT" msgstr "Trajectoire CPMD - NPT" # File: gui/callbacks.c, Line: 93 msgid "VASP trajectory" msgstr "Trajectoire VASP" # File: gui/callbacks.c, Line: 94 msgid "VASP trajectory - NPT" msgstr "Trajectoire VASP - NPT" # File: gui/callbacks.c, Line: 95,96 msgid "PDB file" msgstr "Fichier PDB" # File: gui/callbacks.c, Line: 97 msgid "Cryst. information (crystal build) - single configuration" msgstr "Info. cristal. (construction de cristal) - configuration unique" # File: gui/callbacks.c, Line: 98 msgid "Cryst. information (crystal build) - multiple configurations" msgstr "Info. cristal. (construction de cristal) - configurations multiples" # File: gui/callbacks.c, Line: 99 msgid "Cryst. information (symmetry positions) - single configuration" msgstr "Info. cristal. (positions de symétrie) - configuration unique" # File: gui/callbacks.c, Line: 100 msgid "DL-POLY HISTORY file" msgstr "Fichier HISTORY de DL-POLY" # File: gui/callbacks.c, Line: 101 msgid "ISAACS Project File" msgstr "Dossier de projet ISAACS" # File: gui/callbacks.c, Line: 133 msgid "Close workspace ?" msgstr "Fermer l'espace de travail ?" # File: calc/calc.c, Line: 106 # File: gui/callbacks.c, Line: 133 # File: gui/preferences.c, Line: 4945,4978 msgid "Are you sure ?" msgstr "Etes-vous sûr ?" # File: gui/callbacks.c, Line: 156 msgid "I/O error" msgstr "Erreur d'E/S" # File: gui/callbacks.c, Line: 157 msgid "project information" msgstr "informations sur le projet" # File: gui/callbacks.c, Line: 158 msgid "curve(s) information" msgstr "informations sur les courbes" # File: gui/callbacks.c, Line: 159 msgid "OpenGL information" msgstr "Informations OpenGL" # File: gui/callbacks.c, Line: 160 msgid "atom's data - A" msgstr "données de l'atome - A" # File: gui/callbacks.c, Line: 161 msgid "atom's data - B" msgstr "données de l'atome - B" # File: gui/callbacks.c, Line: 162 msgid "updating project" msgstr "projet de mise à jour" # File: gui/callbacks.c, Line: 163 msgid "this should not happen" msgstr "cela ne devrait pas arriver" # File: gui/callbacks.c, Line: 164 msgid "coordination data" msgstr "données de coordination" # File: gui/callbacks.c, Line: 165 msgid "ring(s) data" msgstr "données des anneaux" # File: gui/callbacks.c, Line: 166 msgid "chain(s) data" msgstr "données des chaînes" # File: gui/callbacks.c, Line: 167 msgid "molecule(s) data" msgstr "données des molécules" # File: gui/callbacks.c, Line: 168 msgid "analysis data" msgstr "données d'analyse" # File: gui/callbacks.c, Line: 169 msgid "ab-initio data" msgstr "données ab-initio" # File: gui/callbacks.c, Line: 170 msgid "classical data" msgstr "données classiques" # File: gui/callbacks.c, Line: 222 msgid "File : %s\n" msgstr "Fichier : %s\n" # File: gui/callbacks.c, Line: 223 msgid "Function: %s()\n" msgstr "Fonction: %s()\n" # File: gui/callbacks.c, Line: 224 msgid "Line : %d" msgstr "Ligne : %d" # File: gui/callbacks.c, Line: 296 msgid "open" msgstr "'ouvrir" # File: gui/callbacks.c, Line: 296 msgid "save" msgstr "e sauvegarder" # File: gui/callbacks.c, Line: 298,473 # File: gui/interface.c, Line: 340 msgid "reading" msgstr "en lisant" # File: gui/callbacks.c, Line: 298,473 # File: gui/interface.c, Line: 340 msgid "saving" msgstr "en sauvegardant" # File: gui/callbacks.c, Line: 528 msgid "Error %s workspace file\n%s\n" msgstr "Erreur %s le fichier d'espace de travail\n%s\n" # File: gui/callbacks.c, Line: 560 msgid "Open Project File(s)" msgstr "Ouvrir un ou plusieurs fichiers de projet" # File: gui/callbacks.c, Line: 560 msgid "Save Project File" msgstr "Enregistrer le fichier de projet" # File: gui/callbacks.c, Line: 560 msgid "Open Workspace" msgstr "Ouvrir un espace de travail" # File: gui/callbacks.c, Line: 560 msgid "Save Workspace" msgstr "Enregistrer l'espace de travail" # File: gui/callbacks.c, Line: 560,918,1381,1775 # File: gui/gui.c, Line: 767,847 # File: gui/work_menu.c, Line: 132,145 # File: opengl/win/m_map.c, Line: 885 msgid "Open" msgstr "Ouvrir" # File: gui/callbacks.c, Line: 562 msgid "Project file (*.apf)" msgstr "Fichier de projet (*.apf)" # File: gui/callbacks.c, Line: 562 msgid "Workspace file (*.awf)" msgstr "Fichier d'espace de travail (*.awf)" # File: gui/callbacks.c, Line: 580 msgid "A workspace is already open !" msgstr "Un espace de travail est déjà ouvert !" # File: gui/callbacks.c, Line: 584 msgid "Empty workspace ... nothing to be saved\n" msgstr "Espace de travail vide ... rien à sauvegarder\n" # File: gui/callbacks.c, Line: 591 msgid "Workspace contains only empty projects ... nothing to be saved\n" msgstr "L'espace de travail ne contient que des projets vides ... rien à sauvegarder\n" # File: gui/callbacks.c, Line: 596 msgid "No project open ... nothing to be saved\n" msgstr "Aucun projet ouvert ... rien à sauvegarder\n" # File: gui/callbacks.c, Line: 600 msgid "Empty project ... nothing to be saved\n" msgstr "Projet vide ... rien à sauvegarder\n" # File: gui/callbacks.c, Line: 651 msgid "%s - New project" msgstr "%s - Nouveau projet" # File: calc/cpmd/cpmd_init.c, Line: 1556 # File: gui/callbacks.c, Line: 711,916,1388,1831 # File: opengl/win/m_map.c, Line: 937 msgid "All files (*)" msgstr "Tous les fichiers (*)" # File: gui/callbacks.c, Line: 827 msgid "ISAACS project file (XML) successfully opened" msgstr "Le fichier de projet ISAACS (XML) a été ouvert avec succès" # File: gui/callbacks.c, Line: 880 msgid "Impossible to write the IPF file\n" msgstr "Impossible d'écrire le fichier IPF\n" # File: gui/callbacks.c, Line: 916 msgid "IPF file (*.ipf)" msgstr "Fichier IPF (*.ipf)" # File: gui/callbacks.c, Line: 917 msgid "Import ISAACS Project File" msgstr "Importer le fichier de projet ISAACS" # File: gui/callbacks.c, Line: 917 msgid "Export ISAACS Project File" msgstr "Exporter le fichier de projet ISAACS" # File: gui/callbacks.c, Line: 923 msgid "Save an empty project ?" msgstr "Enregistrer un projet vide ?" # File: gui/callbacks.c, Line: 923 msgid "Do you want to save an empty project ?" msgstr "Voulez-vous sauvegarder un projet vide ?" # File: gui/callbacks.c, Line: 1037 msgid "Label of atomic spec. N° %d:" msgstr "Label de l'espèce atomique. N° %d :" # File: gui/callbacks.c, Line: 1043 msgid "Number of %s atom(s):" msgstr "Nombre d'atomes %s :" # File: gui/callbacks.c, Line: 1048 msgid "Number of atom(s) for spec. N° %d:" msgstr "Nombre d'atomes pour l'espèce N° %d :" # File: gui/callbacks.c, Line: 1129 msgid "Chemical species info:" msgstr "Informations sur les espèces chimiques:" # File: gui/callbacks.c, Line: 1132 msgid "Species: " msgstr "Espèces: " # File: gui/callbacks.c, Line: 1271 msgid "Total number of atom(s):" msgstr "Nombre total d'atome(s):" # File: gui/callbacks.c, Line: 1271 msgid "Number of chemical species:" msgstr "Nombre d'espèces chimiques:" # File: gui/callbacks.c, Line: 1272 msgid "Reading CPMD / VASP trajectory" msgstr "Lecture de la trajectoire CPMD/VASP" # File: calc/cp2k/cp2k_mol.c, Line: 251 # File: calc/cpmd/cpmd_atoms.c, Line: 446 # File: calc/cpmd/cpmd_nose.c, Line: 466,1255 # File: calc/dl_poly/dlp_atom.c, Line: 739 # File: calc/dl_poly/dlp_edit.c, Line: 1264 # File: calc/dl_poly/dlp_mol.c, Line: 473,756 # File: curve/datab.c, Line: 473,526,1060 # File: gui/callbacks.c, Line: 1273 # File: gui/gtk-misc.c, Line: 619 # File: opengl/edit/atom_edit.c, Line: 445 # File: opengl/win/m_map.c, Line: 506,739,983 msgid "Apply" msgstr "Appliquer" # File: gui/callbacks.c, Line: 1352 msgid "Please select the file format of the NPT cell data" msgstr "Veuillez sélectionner le format de fichier des données des cellules NPT" # File: gui/callbacks.c, Line: 1352,1686 msgid "Select format:" msgstr "Sélectionnez le format:" # File: gui/callbacks.c, Line: 1378 msgid "Read cell data for NPT molecular dynamics" msgstr "Lire les données des cellules pour la dynamique moléculaire NPT" # File: gui/callbacks.c, Line: 1384 msgid "DAT files (*.dat)" msgstr "Fichiers DAT (*.dat)" # File: gui/callbacks.c, Line: 1531 msgid "Error loading atomic coordinates:\nfile does not exist" msgstr "Erreur lors du chargement des coordonnées atomiques:\nle fichier n'existe pas" # File: gui/callbacks.c, Line: 1534 msgid "Error loading coordinates file: format not supported" msgstr "Erreur de chargement du fichier de coordonnées: format non pris en charge" # File: gui/callbacks.c, Line: 1537 msgid "Error at input: impossible to process input file data" msgstr "Erreur de lecture: impossible de traiter les données du fichier d'entrée" # File: gui/callbacks.c, Line: 1619 msgid "%s - symmetry position(s)" msgstr "%s - position(s) de symétrie" # File: gui/callbacks.c, Line: 1686 msgid "Please select the file format of the atomic coordinates" msgstr "Veuillez sélectionner le format de fichier des coordonnées atomiques" # File: gui/callbacks.c, Line: 1694 msgid "Please select the format of the atomic coordinates" msgstr "Veuillez sélectionner le format des coordonnées atomiques" # File: gui/callbacks.c, Line: 1734 msgid "Impossible to export the atomic coordinates\nError code: %d" msgstr "Impossible d'exporter les coordonnées atomiques\nCode d'erreur: %d" # File: gui/callbacks.c, Line: 1774 msgid "Import atomic coordinates" msgstr "Importer des coordonnées atomiques" # File: gui/callbacks.c, Line: 1774 msgid "Export atomic coordinates" msgstr "Exporter les coordonnées atomiques" # File: gui/callbacks.c, Line: 1850 msgid "No project loaded ... nothing to be saved\n" msgstr "Aucun projet chargé ... rien à sauvegarder\n" # File: gui/callbacks.c, Line: 1854 msgid "Project %s is empty ... nothing to be saved\n" msgstr "Le projet %s est vide ... rien à sauvegarder\n" # File: gui/chainscall.c, Line: 352 msgid "\tThe chain statistics have failed !\n\n" "The number of chain per MD step appears\n" "to be bigger than the initial value of %d\n" "used to allocate memory to store the results.\n\n" "Increase the value and start again !" msgstr "\tLes statistiques des chaînes ont échoué !\n\n" "Le nombre de chaînes par configuration apparaît\n" "être supérieur à la valeur initiale de %d\n" "utilisé pour allouer de la mémoire pour stocker les résultats.\n\n" "Augmentez la valeur et recommencez !" # File: gui/chainscall.c, Line: 73 msgid "Chains - Cc(n)[All]" msgstr "Chaînes - Cc(n)[Tous]" # File: gui/chainscall.c, Line: 76 msgid "Chains - Cc(n)[%s]" msgstr "Chaînes - Cc(n)[%s]" # File: gui/chainscall.c, Line: 94 # File: opengl/win/glwindow.c, Line: 312 # File: opengl/win/menu_bar.c, Line: 216,220 # File: opengl/win/popup.c, Line: 4236 # File: opengl/win/w_coord.c, Line: 1332 msgid "Chain(s)" msgstr "Chaîne(s)" # File: gui/chainscall.c, Line: 132 msgid "\n\nChain statistics\n\n" msgstr "\n\nStatistiques des chaînes\n\n" # File: gui/chainscall.c, Line: 136 msgid " * only AAAA chains have been considered\n" msgstr " * seules les chaînes AAAA ont été prises en compte\n" # File: gui/chainscall.c, Line: 140 msgid " * only ABAB chains have been considered\n" msgstr " * seules les chaînes ABAB ont été prises en compte\n" # File: gui/chainscall.c, Line: 144 msgid " * homopolar bonds can not shorten the chains\n" msgstr " * les liaisons homopolaires ne peuvent pas raccourcir les chaînes\n" # File: gui/chainscall.c, Line: 148 msgid " * only 1-(2)" msgstr " * seulement 1-(2)" # File: gui/chainscall.c, Line: 150 msgid "-1 chains have been considered, ie. isolated chains\n" msgstr "-1 chaînes ont été prises en compte, c'est à dire isolées\n" # File: gui/chainscall.c, Line: 152 # File: gui/ringscall.c, Line: 189 msgid "\n Atom(s) used to start the search: " msgstr "\n Atome(s) utilisé(s) pour initier la recherche: " # File: gui/chainscall.c, Line: 154 # File: gui/ringscall.c, Line: 191 msgid " atom(s) only" msgstr " atome(s) uniquement" # File: gui/chainscall.c, Line: 158 msgid "\n Average number of chains per configuration: " msgstr "\n Nombre moyen de chaînes par configuration: " # File: gui/chainscall.c, Line: 168 msgid "\n Total number of chains: " msgstr "\n Nombre total de chaînes: " # File: gui/chainscall.c, Line: 176 msgid "\n\t n Av. by step \tC" msgstr "\n\t n Av. par pas \tC" # File: gui/chainscall.c, Line: 191 msgid "\n\t n\tNumber\t\tC" msgstr "\n\t n\tNombre\t\tC" # File: gui/chainscall.c, Line: 346 msgid "The chain statistics calculation has failed" msgstr "Le calcul des statistiques de chaîne a échoué" # File: gui/edit_menu.c, Line: 779 msgid "To apply PBC or use fractional coordinates\n" "describe properly the simulation box parameters" msgstr "Pour appliquer les CLP ou utiliser des coordonnées fractionnaires\n" "décrivez correctement les paramètres de la boîte de simulation" # File: gui/edit_menu.c, Line: 73 msgid "Edges [Å]" msgstr "Bords [Å]" # File: gui/edit_menu.c, Line: 73 msgid "Angles [°]" msgstr "Angles [°]" # File: gui/edit_menu.c, Line: 411 msgid "Atom:" msgstr "Atome:" # File: calc/dl_poly/dlp_edit.c, Line: 2320 # File: gui/edit_menu.c, Line: 411 msgid "Element:" msgstr "Élément:" # File: gui/edit_menu.c, Line: 412 msgid "Atomic number:" msgstr "Numéro atomique:" # File: gui/edit_menu.c, Line: 412 msgid "Atomic mass:" msgstr "Masse atomique:" # File: gui/edit_menu.c, Line: 412 msgid "Radius:" msgstr "Rayon:" # File: gui/preferences.c, Line: 3426,3587 # File: opengl/win/m_bonds.c, Line: 245 msgid "Radius" msgstr "Rayon" # File: gui/edit_menu.c, Line: 413 msgid "Neutrons scattering length:" msgstr "Longueur de diffusion neutronique:" # File: gui/edit_menu.c, Line: 413 msgid "X-rays scattering length:" msgstr "Longueur de diffusion des rayons X:" # File: gui/edit_menu.c, Line: 414 msgid "Covalent" msgstr "Covalent" # File: gui/edit_menu.c, Line: 414 msgid "Ionic" msgstr "Ionique" # File: gui/edit_menu.c, Line: 414 msgid "In Crystal" msgstr "Cristallin" # File: gui/edit_menu.c, Line: 76 msgid "Chemistry and physics" msgstr "Chimie et physique" # File: gui/edit_menu.c, Line: 76 msgid "Box and periodicity" msgstr "Boite et périodicité" # File: gui/edit_menu.c, Line: 76 msgid "Bond cutoffs" msgstr "Rayons de coupure" # File: gui/edit_menu.c, Line: 76,310 msgid "Lattice vectors" msgstr "Vecteurs de maille" # File: gui/edit_menu.c, Line: 279 msgid "Apply Periodic Boundary Conditions" msgstr "Appliquer les Conditions aux Limites Périodiques" # File: gui/edit_menu.c, Line: 282 msgid "Fractional coordinates" msgstr "Coordonnées fractionnaires" # File: gui/edit_menu.c, Line: 714 msgid "To define the existence of a bond between 2 atoms i (α) and j (β), " msgstr "Pour définir l'existence d'une liaison entre 2 atomes i (α) et j (β), " # File: gui/edit_menu.c, Line: 715 msgid "a bond exits if the 2 following conditions are verified:" msgstr "une liaison existe si les 2 conditions suivantes sont vérifiées:" # File: gui/edit_menu.c, Line: 716 msgid "1) Dij < first minimum of the total g(r) - rcut (Tot.)" msgstr "1) Dij < premier minimum de la g(r) totale - rcut (Tot.)" # File: gui/edit_menu.c, Line: 717 msgid "2) Dij < first minimum of the partial gα,β(r) - rcut (α,β)" msgstr "2) Dij < premier minimum de la gα,β(r) partielle - rcut (α,β)" # File: gui/edit_menu.c, Line: 718 msgid "0.0 < rcut ≤ Dmax" msgstr "0,0 < rcoup. ≤ Dmax" # File: gui/edit_menu.c, Line: 719 msgid "Dmax is the maximum inter-atomic distance in the model\n" msgstr "Dmax est la distance inter-atomique maximale dans le modèle\n" # File: gui/edit_menu.c, Line: 726 msgid "%s\twith\tDmax = %f Å" msgstr "%s\tavec\tDmax = %f Å" # File: gui/edit_menu.c, Line: 732,737 msgid "With %s" msgstr "Avec %s" # File: gui/edit_menu.c, Line: 820 # File: opengl/win/w_cutoffs.c, Line: 229 msgid "Data can be lost !" msgstr "Les données peuvent être perdues !" # File: gui/edit_menu.c, Line: 820 # File: opengl/win/w_cutoffs.c, Line: 229 msgid "You will lose\n rings statistics and/or chains statistics data\nProceed anyway ?" msgstr "Vous perdrez les données\n des statistiques d'anneaux et/ou de chaînes\nContinuer quand même ?" # File: gui/grcall.c, Line: 69,70,71,72,73,74,75,76 # File: gui/sktcall.c, Line: 73,74,75,76,187,188,189,190 # File: gui/sqcall.c, Line: 65,66,67,68 msgid "Neutrons" msgstr "Neutrons" # File: gui/grcall.c, Line: 70,72,74,76,78,80,82,84,92,96,106,110,114 # File: gui/sktcall.c, Line: 74,76,78,80,88,98,106,110,114,118,188,190,192,194,203,213,221,225,229,233 # File: gui/sqcall.c, Line: 66,68,70,72,80,90,98,102,106,110 msgid "smoothed" msgstr "lissé" # File: gui/grcall.c, Line: 77,78,79,80,81,82,83,84 # File: gui/sktcall.c, Line: 77,78,79,80,191,192,193,194 # File: gui/sqcall.c, Line: 69,70,71,72 msgid "X-rays" msgstr "Rayons X" # File: gui/grcall.c, Line: 133 msgid "\n\nRadial distribution function(s)" msgstr "\n\nFonction(s) de distribution radiale" # File: gui/grcall.c, Line: 136 msgid " - real space calculation\n\n" msgstr " - calcul dans l'espace réel\n\n" # File: gui/grcall.c, Line: 140 msgid " - FFT[S(q)]\n\n" msgstr " - FFT[S(q)]\n\n" # File: gui/grcall.c, Line: 146 msgid "\tReciprocal space data:\n\n" msgstr "\tDonnées de l'espace réciproque:\n\n" # File: gui/grcall.c, Line: 147 msgid "\t - Minimum vector Q" msgstr "\t - Vecteur Q minimal" # File: gui/grcall.c, Line: 155 msgid "\n\t - Maximum vector Q" msgstr "\n\t - Vecteur maximal Q" # File: gui/grcall.c, Line: 157 msgid " for the FFT: " msgstr " pour la FFT: " # File: gui/grcall.c, Line: 165 msgid "\tReal space discretization:\n\n" msgstr "\tDiscrétisation de l'espace réel:\n\n" # File: gui/grcall.c, Line: 166 msgid "\t - Number of δr steps: " msgstr "\t - Nombre d'intervalles δr: " # File: gui/grcall.c, Line: 170 msgid "\n\n\t between 0.0 and " msgstr "\n\n\t entre 0,0 et " # File: gui/grcall.c, Line: 173 # File: gui/sqcall.c, Line: 159 msgid "\n\t where " msgstr "\n\t où " # File: gui/grcall.c, Line: 176 msgid " is the maximum distance in real space, " msgstr " est la distance maximale dans l'espace réel, " # File: gui/grcall.c, Line: 211 msgid "The g(r) calculation has failed" msgstr "Le calcul de la g(r) a échoué" # File: gui/grcall.c, Line: 330 msgid "The g(r) from FFT[S(k)] calculation has failed" msgstr "Le calcul de la g(r) par FFT[S(k)] a échoué" # File: curve/datab.c, Line: 1059 # File: gui/gtk-misc.c, Line: 619,2380,2395 msgid "Cancel" msgstr "Annuler" # File: gui/gtk-misc.c, Line: 1645 # File: opengl/win/glwindow.c, Line: 324 # File: opengl/win/m_atoms.c, Line: 712,822 # File: opengl/win/m_axis.c, Line: 337 # File: opengl/win/m_box.c, Line: 631 # File: opengl/win/m_coord.c, Line: 675 # File: opengl/win/m_poly.c, Line: 455 # File: opengl/win/m_rep.c, Line: 752 # File: opengl/win/menu_bar.c, Line: 238 # File: opengl/win/popup.c, Line: 4239 msgid "Advanced" msgstr "Avancé" # File: gui/gtk-misc.c, Line: 2345 msgid "Impossible to locate file: %s" msgstr "Impossible de localiser le fichier: %s" # File: gui/gui.c, Line: 113,124 # File: gui/initc.c, Line: 244,318 msgid "S(q) from FFT[g(r)]" msgstr "S(q) par FFT[g(r)]" # File: gui/gui.c, Line: 114,125 # File: gui/initc.c, Line: 246,325 msgid "S(q) from Debye Equation" msgstr "S(q) par l'Équation de Debye" # File: gui/gui.c, Line: 115,126 # File: gui/initc.c, Line: 239,332 msgid "g(r)/G(r) from FFT[S(q)]" msgstr "g(r)/G(r) par FFT[S(q)]" # File: gui/gui.c, Line: 116 msgid "Bonds and Angles" msgstr "Liaisons et Angles" # File: gui/gui.c, Line: 117,129 # File: gui/initc.c, Line: 261,350 msgid "Ring Statistics" msgstr "Statistiques d'Anneaux" # File: gui/gui.c, Line: 118,130 # File: gui/initc.c, Line: 265,356 msgid "Chain Statistics" msgstr "Statistiques de Chaînes" # File: gui/gui.c, Line: 119,131 # File: gui/initc.c, Line: 269,362 msgid "Spherical Harmonics" msgstr "Harmoniques Sphériques" # File: gui/gui.c, Line: 120,132 # File: gui/initc.c, Line: 275,368 msgid "Mean Squared Displacement" msgstr "Déplacement Carré Moyen" # File: gui/gui.c, Line: 121,133 # File: gui/initc.c, Line: 280,374 msgid "Dynamic Structure Factor" msgstr "Facteur de Structure Dynamique" # File: gui/gui.c, Line: 127 # File: gui/initc.c, Line: 253,338 msgid "Bond Properties" msgstr "Propriétés des Liaisons" # File: gui/gui.c, Line: 128 # File: gui/initc.c, Line: 257,344 msgid "Angle Distributions" msgstr "Distribution des Angles" # File: gui/gui.c, Line: 152,1021 msgid "About" msgstr "À propos" # File: gui/gui.c, Line: 152 msgid "open about dialog" msgstr "ouvrir la boîte de dialogue à propos" # File: gui/gui.c, Line: 153 msgid "Periodic table" msgstr "Tableau périodique" # File: gui/gui.c, Line: 153 msgid "open periodic table" msgstr "ouvrir le tableau périodique" # File: gui/gui.c, Line: 154,894 # File: gui/work_menu.c, Line: 198 msgid "Quit" msgstr "Quitter" # File: gui/gui.c, Line: 154 msgid "quit atomes" msgstr "quitter atomes" # File: gui/gui.c, Line: 157 msgid "Open workspace" msgstr "Ouvrir un espace de travail" # File: gui/gui.c, Line: 157 msgid "open atomes workspace" msgstr "ouvrir un espace de travail atomes" # File: gui/gui.c, Line: 158 msgid "Save workspace" msgstr "Enregistrer l'espace de travail" # File: gui/gui.c, Line: 158 msgid "save atomes workspace" msgstr "enregistrer l'espace de travail atomes" # File: gui/gui.c, Line: 159 msgid "Close workspace" msgstr "Fermer l'espace de travail" # File: gui/gui.c, Line: 159 msgid "close atomes workspace" msgstr "fermer l'espace de travail atomes" # File: gui/gui.c, Line: 162 msgid "New project" msgstr "Nouveau projet" # File: gui/gui.c, Line: 162 msgid "create new atomes project" msgstr "créer un nouveau projet atomes" # File: gui/gui.c, Line: 163 msgid "Open project" msgstr "Ouvrir un projet" # File: gui/gui.c, Line: 163 msgid "open atomes project" msgstr "ouvrir un projet atomes" # File: gui/gui.c, Line: 168 # File: gui/preferences.c, Line: 2474,3678,3855,4319,5062 # File: opengl/win/glwindow.c, Line: 126 msgid "General" msgstr "Général" # File: gui/gui.c, Line: 168,907,1033 # File: gui/work_menu.c, Line: 130 msgid "Workspace" msgstr "Espace de Travail" # File: gui/gui.c, Line: 168 msgid "Projects" msgstr "Projets" # File: gui/gui.c, Line: 775,856 # File: gui/work_menu.c, Line: 134,148,177 msgid "Save As" msgstr "Enregistrer Sous" # File: curve/m_curve.c, Line: 556 # File: gui/gui.c, Line: 778,861 # File: gui/work_menu.c, Line: 135,151,180 # File: opengl/edit/atom_edit.c, Line: 447 # File: opengl/edit/cbuild_edit.c, Line: 1434 # File: opengl/edit/cell_edit.c, Line: 203 # File: opengl/win/w_atoms.c, Line: 547 # File: opengl/win/w_coord.c, Line: 1378 # File: opengl/win/w_measures.c, Line: 683 msgid "Close" msgstr "Fermer" # File: gui/gui.c, Line: 799 msgid "ISAACS Project File (*.ipf)" msgstr "Fichier de Projet ISAACS (*.ipf)" # File: gui/gui.c, Line: 802 # File: gui/work_menu.c, Line: 156,185,195 msgid "Atomic Coordinates" msgstr "Coordonnées Atomiques" # File: gui/gui.c, Line: 826 # File: gui/work_menu.c, Line: 167 msgid "Make Active" msgstr "Rendre Actif" # File: gui/gui.c, Line: 832 # File: gui/work_menu.c, Line: 171 msgid "Analyze: %s" msgstr "Analyser: %s" # File: gui/gui.c, Line: 838 # File: gui/work_menu.c, Line: 175 msgid "Edit Name" msgstr "Éditer le Nom" # File: gui/gui.c, Line: 844 # File: gui/work_menu.c, Line: 144 msgid "New" msgstr "Nouveau" # File: curve/m_curve.c, Line: 78 # File: gui/gui.c, Line: 864 # File: gui/work_menu.c, Line: 153 msgid "Export" msgstr "Exporter" # File: gui/gui.c, Line: 879 # File: gui/work_menu.c, Line: 191 msgid "Import" msgstr "Importer" # File: gui/gui.c, Line: 930 # File: gui/work_menu.c, Line: 140 msgid "Project(s)" msgstr "Projet(s)" # File: gui/gui.c, Line: 971 msgid "Chemistry and Physics" msgstr "Chimie et Physique" # File: gui/gui.c, Line: 972 msgid "Box and Periodicity" msgstr "Boîte et Périodicité" # File: gui/gui.c, Line: 973 msgid "Bond Cutoffs" msgstr "Rayons de Coupure" # File: gui/gui.c, Line: 985 # File: gui/tools.c, Line: 342 # File: project/close_p.c, Line: 371 msgid "Toolboxes" msgstr "Boîtes à Outils" # File: gui/gui.c, Line: 1018 msgid "Periodic Table" msgstr "Tableau Périodique" # File: gui/gui.c, Line: 1019 msgid "Preferences" msgstr "Préférences" # File: curve/m_curve.c, Line: 572 # File: gui/gui.c, Line: 1020 # File: opengl/win/glwindow.c, Line: 599 # File: opengl/win/menu_bar.c, Line: 253 # File: opengl/win/popup.c, Line: 4281 msgid "Shortcuts" msgstr "Raccourcis" # File: gui/gui.c, Line: 1034 # File: opengl/win/m_tools.c, Line: 320,517 msgid "Edit" msgstr "Éditer" # File: gui/gui.c, Line: 1035 msgid "Analyze" msgstr "Analyser" # File: curve/m_curve.c, Line: 614 # File: gui/gui.c, Line: 1036 # File: opengl/win/glwindow.c, Line: 639,1523 # File: opengl/win/menu_bar.c, Line: 281 msgid "Help" msgstr "Aide" # File: gui/initc.c, Line: 99 msgid "Please wait calculation in progress" msgstr "Veuillez patienter calcul en cours" # File: gui/initc.c, Line: 102 msgid "Computing" msgstr "Calcul en cours" # File: gui/initc.c, Line: 261,350 msgid "Size n of the ring [total number of nodes]" msgstr "Taille n de l'anneau [nombre total de nœuds]" # File: gui/initc.c, Line: 265,356 msgid "Size n of the chain [total number of nodes]" msgstr "Taille n de la chaîne [nombre total de nœuds]" # File: gui/interface.c, Line: 339 msgid "\n\tError %s %s, at:\n" "\t\tFile : %s\n" "\t\tFunction: %s()\n" "\t\tLine : %d\n\n" "\tBacktrace:\n%s\t\t →\t\t call to\t%s()\n" msgstr "\n\tErreur %s %s, à:\n" "\t\tFichier : %s\n" "\t\tFonction: %s()\n" "\t\tLigne : %d\n\n" "\tHistorique:\n%s\t\t →\t\t appel à %s()\n" # File: gui/interface.c, Line: 353 msgid "\n\tError %s %s, at:\n" "\t\tFile : %s\n" "\t\tFunction: %s()\n" "\t\tLine : %d\n" msgstr "\n\tErreur %s %s, à:\n" "\t\tFichier : %s\n" "\t\tFonction: %s()\n" "\t\tLigne  : %d\n" # File: gui/interface.c, Line: 529 msgid "\tSingle step chemical reaction\n" "\t\tConsider each configuration as a step in a chemical reaction:\n" "\t\t\t- Atomic coordinates are sorted based on occupancy or disorder site\n" "\t\t\t- Each describing the proportion of a reactant\n" "\t\t\t- A super lattice is build to respect these proportions\n\n" "\tMD trajectory\n" "\t\tConsider the CIF file a MD trajectory\n\n" "\t\tNumber of atom(s) must not change between configuration(s)\n\n" "\tSingle configuration \n" "\t\tSelect a single configuration in the CIF file" msgstr "\tRéaction chimique en une seule étape\n" "\t\tConsidérez chaque configuration comme une étape d’une réaction chimique:\n" "\t\t\t- Les coordonnées atomiques sont triées en fonction de l'occupation ou des sites\n" "\t\t\t- Chacun décrivant la proportion d'un réactif\n" "\t\t\t- Une super maille est construit pour respecter ces proportions\n\n" "\tTrajectoire MD\n" "\t\tConsidérez le fichier CIF comme une trajectoire MD\n\n" "\t\tLe nombre d'atomes ne doit pas changer entre les configurations\n\n" "\tConfiguration unique \n" "\t\tSélectionnez une seule configuration dans le fichier CIF" # File: gui/interface.c, Line: 534 msgid "\tMD trajectory\n" "\t\tConsider the CIF file a MD trajectory\n\n" "\t\tNumber of atom(s) must not change between configuration(s)\n\n" "\tSingle configuration \n" "\t\tSelect a single configuration in the CIF file" msgstr "\tTrajectoire MD\n" "\t\tConsidérez le fichier CIF comme une trajectoire MD\n\n" "\t\tLe nombre d'atomes ne doit pas changer entre les configurations\n\n" "\tConfiguration unique \n" "\t\tSélectionnez une seule configuration dans le fichier CIF" # File: gui/interface.c, Line: 677 msgid "\tLowest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊8.76⌋ = 8\n\n" "\tHighest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌈5.39⌉ = 6\n\n" "\tNearest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊6.82⌉ = 7\t\t and\t ⌊4.31⌉ = 4\n\n" "\t\t%s\n" msgstr "\tEntier le plus petit: \n" "\t\t Occupation %s\n\t\t\t ex:\t ⌊8,76⌋ = 8\n\n" "\tEntier le plus élevé: \n" "\t\t Occupation %s\n\t\t\t ex:\t ⌈5,39⌉ = 6\n\n" "\tEntier le plus proche : \n" "\t\t Occupation %s\n\t\t\t ex:\t ⌊6,82⌉ = 7\t\t et\t ⌊4,31⌉ = 4\n\n" "\t\t%s\n" # File: gui/interface.c, Line: 117 msgid "Failed to open link:\n%s" msgstr "Échec de l'ouverture du lien:\n%s" # File: gui/interface.c, Line: 121 msgid "Impossible to open link: " msgstr "Impossible d'ouvrir le lien: " # File: gui/interface.c, Line: 139 msgid " Please contact me at:\n" msgstr " Merci de me contacter à:\n" # File: gui/interface.c, Line: 144 msgid "\n Or check the website for information\n" msgstr "\n Ou consultez le site Web pour plus d'informations\n" # File: gui/interface.c, Line: 147 msgid "Visit the project's website" msgstr "Visitez le site Web du projet" # File: gui/interface.c, Line: 187 msgid "Collaborations:" msgstr "Collaborations:" # File: gui/interface.c, Line: 189 msgid "Dr. Noël Jakse : dynamic structure factor" msgstr "Dr. Noël Jakse : facteur de structure dynamique" # File: gui/interface.c, Line: 191 msgid "Visualization, analyzis, creation/edition and post-processing of atomic scale models !" msgstr "Visualisation, analyse, création/édition et post-traitement de modèles atomiques !" # File: calc/cpmd/cpmd_restart.c, Line: 200 # File: gui/interface.c, Line: 252,449 msgid "Information" msgstr "Information" # File: gui/interface.c, Line: 268 msgid "Warning" msgstr "Avertissement" # File: gui/interface.c, Line: 310,330 msgid "Error" msgstr "Erreur" # File: gui/interface.c, Line: 331 msgid "Details" msgstr "Détails" # File: gui/interface.c, Line: 485 msgid "Leaving ?!" msgstr "Sortir ?!" # File: gui/interface.c, Line: 485 msgid "Are you sure you want to quit ?" msgstr "Etes-vous sûr de vouloir quitter ?" # File: gui/interface.c, Line: 505,777 msgid "Parameter required" msgstr "Paramètre requis" # File: gui/interface.c, Line: 511 msgid "Cartesian" msgstr "cartésien" # File: gui/interface.c, Line: 512 msgid "Atomic units" msgstr "Unités atomiques" # File: gui/interface.c, Line: 513 msgid "Fractional" msgstr "Fractionnaire" # File: gui/interface.c, Line: 518 msgid "1 line by step, as many lines as MD steps" msgstr "1 ligne par pas, autant de lignes que de pas de DM" # File: gui/interface.c, Line: 519 msgid "2 lines by step, twice as many lines as MD steps" msgstr "2 lignes par pas, deux fois plus de lignes que de pas de DM" # File: gui/interface.c, Line: 520 msgid "3 lines by step, three times as many lines as MD steps" msgstr "3 lignes par pas, trois fois plus de lignes que de pas de DM" # File: gui/interface.c, Line: 521 msgid "Single step chemical reaction" msgstr "Réaction chimique en une seule étape" # File: gui/interface.c, Line: 522 msgid "MD trajectory" msgstr "Trajectoire de DM" # File: gui/interface.c, Line: 523 msgid "Single configuration" msgstr "Configuration unique" # File: gui/interface.c, Line: 524 msgid "Round up to lowest integer" msgstr "Arrondir à l'entier le plus petit" # File: gui/interface.c, Line: 525 msgid "Round up to highest integer" msgstr "Arrondir à l'entier le plus élevé" # File: gui/interface.c, Line: 526 msgid "Round up to nearest integer" msgstr "Arrondir à l'entier le plus proche" # File: gui/interface.c, Line: 542 msgid "to lowest integer: nsites x occupancy" msgstr "à l'entier le plus petit: nsites x occupation" # File: gui/interface.c, Line: 543 msgid "to highest integer: nsites x occupancy" msgstr "à l'entier le plus élevé: nsites x occupation" # File: gui/interface.c, Line: 544 msgid "to nearest integer: nsites x occupancy" msgstr "à l'entier le plus proche: nsites x occupation" # File: gui/interface.c, Line: 545 msgid "with nsites = f(space group, crystalline positions)" msgstr "avec nsites = f(groupe d'espace, positions cristallines)" # File: gui/interface.c, Line: 546 msgid "with nsites = f(symmetry positions, crystalline positions)" msgstr "avec nsites = f(positions de symétrie, positions cristallines)" # File: gui/interface.c, Line: 627 msgid "Parameter Required" msgstr "Paramètre requis" # File: gui/interface.c, Line: 1088 msgid "%s - isolated" msgstr "%s - isolé" # File: gui/interface.c, Line: 1088 msgid " - isolated" msgstr " - isolé" # File: gui/main.c, Line: 179 msgid "\nUsage: atomes [OPTION]\n" " atomes [FILE]\n" " atomes [OPTION] [FILE]\n" " atomes [FILE1] [FILE2] ...\n" " atomes [OPTION1] [FILE1] [OPTION2] [FILE2] ...\n\n" "3D atomic-scale models analysis, creation/edition and post-processing tool\n\n" "options:\n" " -v, --version version information\n" " -h, --help display this help message\n\n" "files, any number, in any order, in the following formats:\n\n" " atomes workspace file : .awf\n" " atomes project file : .apf\n" " XYZ coordinates file : .xyz\n" " Chem3D coordinates file : .c3d\n" " CPMD trajectory : .trj\n" " VASP trajectory : .xdatcar\n" " PDB coordinates : .pdb, .ent\n" " Crystallographic Information File : .cif\n" " DL-POLY history file : .hist\n" " ISAACS project file : .ipf\n\n" " alternatively specify the file format using:\n\n" " -awf [FILE]\n" " -apf [FILE]\n" " -xyz [FILE]\n" " -c3d [FILE]\n" " -trj [FILE]\n" " -xdatcar [FILE]\n" " -pdb [FILE], or, -ent [FILE]\n" " -cif [FILE]\n" " -hist [FILE]\n" " -ipf [FILE]\n\n" "ex:\n\n" " atomes -pdb this.f file.awf -cif that.f *.xyz\n\n" "Image rendering from the command line:\n\n" "Usage: atomes [IMAGE_OPTIONS]\n" " -p, --png, --render-png render image in PNG format\n" " -j, --jpg, --render-jpg render image in JPEG format\n" " -o, --output=[FILE] image file name\n" " -W, --width=[XSIZE] image width\n" " -H, --height=[YSIZE] image height\n" " -s, --style=[STYLE] rendering style\n" " -r, --rep=[REP] representation type\n" " -b, --box=[STYLE] box style\n" " -a, --axis=[STYLE] axis style\n" " -e, --acolor=[MAP] atoms and bonds color map\n" " -t, --pcolor=[MAP] ployhedra color map\n" " -C, --box_color=[COLOR] box color\n" " -G, --back_grad=[GRAD] background gradient type\n" " -B, --back_color=[COLOR] background color\n" " -D, --back_dir=[DIR] background gradient direction\n" " -P, --back_pos=[POS] colors mixed position\n" " -U, --grad_col_a=[COL] gradient initial color\n" " -V, --grad_col_b=[COL] gradient final color\n\n" "ex:\n\n" " atomes --render-png --width=1920 -H 1024 --output=image.png project.apf -s ball_and_stick\n" " atomes --jpg --style=vdw -r ortho -e pc -t pc\n\n" msgstr "\nUtilisation : atomes [OPTION]\n" " atomes [FICHIER]\n" " atomes [OPTION] [FICHIER]\n" " atomes [FICHIER1] [FICHIER2] ...\n" " atomes [OPTION1] [FILE1] [OPTION2] [FILE2] ...\n\n" "Outil d'analyse, de création/édition et de post-traitement de modèles 3D à l'échelle atomique\n\n" "choix :\n" " -v, --version informations sur la version\n" " -h, --help afficher ce message d'aide\n\n" "fichiers, n'importe quel nombre, dans n'importe quel ordre, dans les formats suivants:\n\n" " fichier de l'espace de travail atomes  : .awf\n" " fichier projet atomes : .apf\n" " Fichier de coordonnées XYZ : .xyz\n" " Fichier de coordonnées Chem3D : .c3d\n" " Trajectoire CPMD : .trj\n" " Trajectoire VASP : .xdatcar\n" " Coordonnées PDB : .pdb, .ent\n" " Fichier d'informations cristallographiques : .cif\n" " Fichier historique DL-POLY : .hist\n" " Fichier du projet ISAACS : .ipf\n\n" " vous pouvez également spécifier le format de fichier en utilisant:\n\n" " -awf [FICHIER]\n" " -apf [FICHIER]\n" " -xyz [FICHIER]\n" " -c3d [FICHIER]\n" " -trj [FICHIER]\n" " -xdatcar [FICHIER]\n" " -pdb [FICHIER], ou, -ent [FICHIER]\n" " -cif [FICHIER]\n" " -hist [FICHIER]\n" " -ipf [FICHIER]\n\n" "ex :\n\n" " atomes -pdb this.f fichier.awf -cif that.f *.xyz\n\n" "Rendu d'image depuis la ligne de commande:\n\n" "Utilisation: atomes [IMAGE_OPTIONS]\n" " -p, --png, --render-png génère l'image au format PNG\n" " -j, --jpg, --render-jpg génère l'image au format JPEG\n" " -o, --output=[FILE] nom du fichier image\n" " -W, --width=[XSIZE] largeur de l'image\n" " -H, --height=[YSIZE] hauteur de l'image\n" " -s, --style=[STYLE] style de rendu\n" " -r, --rep=[REP] type de représentation\n" " -b, --box=[STYLE] style de boîte\n" " -a, --axis=[STYLE] style d'axe\n" " -e, --acolor=[MAP] carte des couleurs des atomes et des liaisons\n" " -t, --pcolor=[MAP] carte des couleurs des polyèdres\n" " -C, --box_color=[COULEUR] couleur de la boîte\n" " -G, --back_grad=[GRAD] type de dégradé d'arrière-plan\n" " -B, --back_color=[COULEUR] couleur d'arrière-plan\n" " -D, --back_dir=[DIR] direction du gradient de l'arrière-plan\n" " -P, --back_pos=[POS] couleurs position mixte\n" " -U, --grad_col_a=[COL] couleur initiale du dégradé\n" " -V, --grad_col_b=[COL] couleur finale du dégradé\n\n" "ex :\n\n" " atomes --render-png --width=1920 -H 1024 --output=image.png project.apf -s ball_and_stick\n" " atomes --jpg --style=vdw -r ortho -e pc -t pc\n\n" # File: gui/main.c, Line: 181 msgid "\nReport a bug to <" msgstr "\nSignaler un bug à <" # File: gui/main.c, Line: 192 msgid "\n3D atomic scale model analysis, creation/edition and post-processing tool\n" msgstr "\nOutil d'analyse, de création/édition et de post-traitement de modèles atomiques 3D\n" # File: gui/main.c, Line: 839 msgid "Error while reading workspace file\n%s\n" msgstr "Erreur lors de la lecture du fichier d'espace de travail\n%s\n" # File: gui/main.c, Line: 1053 msgid "Impossible to load the splash screen\n" msgstr "Impossible de charger l'écran de démarrage\n" # File: gui/main.c, Line: 1155 msgid "Fatal error on OpenGL initialization: trying to adjust environment !" msgstr "Erreur fatale à l'initialisation d'OpenGL: tentative d'ajustement de l'environnement !" # File: gui/main.c, Line: 1158 msgid "Impossible to initialize the OpenGL 3D rendering !" msgstr "Impossible d'initialiser le rendu 3D OpenGL !" # File: gui/main.c, Line: 1161 msgid "GDK visual must be modified to initialize the OpenGL context !" msgstr "Le visuel GDK doit être modifié pour initialiser le contexte OpenGL !" # File: gui/main.c, Line: 1289 msgid "Error impossible to obtain the AppData\\Roaming (code 0x%08lx)\n%s" msgstr "Erreur impossible d'obtenir l'AppData\\Roaming (code 0x%08lx)\n%s" # File: gui/msdcall.c, Line: 65,67,72,74,76,78,80,82,87,89,91,93,95,97 msgid "MSD" msgstr "DCM" # File: gui/msdcall.c, Line: 67,87,89,91,93,95,97 msgid "nac" msgstr "nac" # File: gui/msdcall.c, Line: 100,102,104 msgid "Correction" msgstr "Correction" # File: gui/msdcall.c, Line: 106,108,110 msgid "Drift" msgstr "Dérive" # File: gui/msdcall.c, Line: 127 msgid "\t - Number of configurations: " msgstr "\t - Nombre de configurations: " # File: gui/msdcall.c, Line: 131 msgid "\n\n\t - Number of time steps between each configuration: " msgstr "\n\n\t - Nombre de pas de temps entre chaque configuration: " # File: gui/msdcall.c, Line: 135 msgid "\n\n\t - Time step δt used to integrate Newton's equations of motion: " msgstr "\n\n\t - Pas de temps δt utilisé pour intégrer les équations du mouvement de Newton: " # File: gui/msdcall.c, Line: 153 msgid "\n\nMean Square Displacement\n\n" msgstr "\n\nDéplacement Carré Moyen\n\n" # File: gui/msdcall.c, Line: 180 msgid "The MSD calculation has failed" msgstr "Le calcul du DCM a échoué" # File: gui/preferences.c, Line: 3484 msgid "\n[1] B. Cordero and al. Dalton Trans, 213:1112 (2008).\n" "[2] Slater. J. Chem. Phys., 41:3199 (1964).\n" "[3] Bondi A. J. Phys. Chem., 68:441 (1964).\n" "[4] R.D. Shannon and C.T. Prewitt Acta Cryst. B, 25:925-946 (1969).\n" "[5] R.D. Shannon Acta Cryst. A, 23:751-767 (1976)." msgstr "\n[1] B. Cordero et al. Dalton Trans, 213:1112 (2008).\n" "[2] Slater. J. Chem.. Phys., 41:3199 (1964).\n" "[3] Bondi A. J. Phys. Chem., 68:441 (1964).\n" "[4] R.D. Shannon et C.T. Prewitt Acta Cryst. B, 25 : 925-946 (1969).\n" "[5] R.D. Shannon Acta Cryst. A, 23 : 751-767 (1976)." # File: gui/preferences.c, Line: 448 msgid "Error: impossible to create %s (code: %lu)\n" msgstr "Erreur: impossible de créer %s (code: %lu)\n" # File: gui/preferences.c, Line: 454 msgid "Error: impossible to create %s (code: %s)\n" msgstr "Erreur: impossible de créer %s (code: %s)\n" # File: gui/preferences.c, Line: 461 msgid "g(r): number of δr" msgstr "g(r): nombre de δr" # File: gui/preferences.c, Line: 461 msgid "s(q): number of δq" msgstr "s(q): nombre de δq" # File: gui/preferences.c, Line: 461 msgid "s(k): number of δk" msgstr "s(k): nombre de δk" # File: gui/preferences.c, Line: 461 msgid "g(r) FFT: number of δr" msgstr "g(r) FFT: nombre de δr" # File: gui/preferences.c, Line: 462 msgid "Dij: number of δr [min(Dij)-max(Dij)]" msgstr "Dij: nombre de δr [min(Dij)-max(Dij)]" # File: gui/preferences.c, Line: 462 msgid "Angles distribution: number of δθ [0-180°]" msgstr "Distribution des angles: nombre de δθ [0-180°]" # File: gui/preferences.c, Line: 463 msgid "Spherical harmonics: l(max) in [2-40]" msgstr "Harmoniques sphériques: l(max) dans [2-40]" # File: gui/preferences.c, Line: 463 msgid "MSD: steps between configurations" msgstr "DCM: pas entre les configurations" # File: gui/preferences.c, Line: 464 msgid "F(k,t): number of δk" msgstr "F(k,t): nombre de δk" # File: gui/preferences.c, Line: 465 msgid "MSD: time steps δt" msgstr "DCM: pas de temps δt" # File: gui/preferences.c, Line: 465 msgid "MSD: time unit" msgstr "DCM: unité de temps" # File: gui/preferences.c, Line: 466 msgid "Default search" msgstr "Recherche par défaut" # File: gui/preferences.c, Line: 467,473 msgid "Atom(s) to initiate the search from" msgstr "Atome(s) à partir desquels lancer la recherche" # File: gui/preferences.c, Line: 468,474 msgid "Maximum size for a ring" msgstr "Taille maximale pour un anneau" # File: gui/preferences.c, Line: 469,475 msgid "Maximum number of rings of size n per MD step" msgstr "Nombre maximum d'anneaux de taille n par pas de DM" # File: gui/preferences.c, Line: 471 msgid "No homopolar bonds in the rings (A-A, B-B ...)" msgstr "Pas de liaisons homopolaires dans les anneaux (A-A, B-B...)" # File: gui/preferences.c, Line: 478 msgid "No homopolar bonds in the chains (A-A, B-B ...)" msgstr "Pas de liaisons homopolaires dans les chaînes (A-A, B-B...)" # File: gui/preferences.c, Line: 479 msgid "Only search for 1-(2)n-1 chains" msgstr "Rechercher uniquement les chaînes 1-(2)n-1" # File: gui/preferences.c, Line: 480 msgid "Analyze all correlated δt steps" msgstr "Analyser toutes les pas δt corrélés" # File: gui/preferences.c, Line: 481 msgid "Number of analyzed δt steps" msgstr "Nombre de pas δt analysées" # File: gui/preferences.c, Line: 482 msgid "Number of analyzed q points" msgstr "Nombre de points q analysés" # File: gui/preferences.c, Line: 483 msgid "Number of frequency points" msgstr "Nombre de points de fréquence" # File: gui/preferences.c, Line: 484 msgid "Default style" msgstr "Style par défaut" # File: gui/preferences.c, Line: 485 # File: opengl/win/glwindow.c, Line: 139 msgid "Atom(s) color map" msgstr "Palettes de couleurs des atomes" # File: gui/preferences.c, Line: 486 # File: opengl/win/glwindow.c, Line: 140 msgid "Polyhedra color map" msgstr "Palettes de couleurs des polyèdres" # File: gui/preferences.c, Line: 487 # File: opengl/win/w_advance.c, Line: 1372 msgid "Quality" msgstr "Qualité" # File: gui/preferences.c, Line: 488 # File: opengl/win/w_advance.c, Line: 1304 msgid "Ray Tracing" msgstr "Tracé de Rayons" # File: gui/preferences.c, Line: 489 msgid "Predefine material" msgstr "Matériau prédéfini" # File: gui/preferences.c, Line: 490 # File: opengl/win/w_advance.c, Line: 1377 msgid "Lightning model" msgstr "Modèle d'éclairage" # File: gui/preferences.c, Line: 491 # File: opengl/win/w_advance.c, Line: 115 msgid "Metallic" msgstr "Métallique" # File: gui/preferences.c, Line: 492 # File: opengl/win/w_advance.c, Line: 116 msgid "Roughness" msgstr "Rugosité" # File: gui/preferences.c, Line: 493 msgid "Back lightning" msgstr "Retour d'éclairage" # File: gui/preferences.c, Line: 495 # File: opengl/win/w_advance.c, Line: 119 msgid "Opacity" msgstr "Opacité" # File: gui/preferences.c, Line: 496 # File: opengl/win/w_advance.c, Line: 114 msgid "Albedo" msgstr "Albédo" # File: calc/cpmd/cpmd_atoms.c, Line: 157,448,480 # File: gui/preferences.c, Line: 497,505 # File: opengl/win/w_advance.c, Line: 129 msgid "Type" msgstr "Type" # File: gui/preferences.c, Line: 498 msgid "Fix" msgstr "Réparer" # File: gui/preferences.c, Line: 499,511 # File: opengl/edit/cell_cut.c, Line: 307 # File: opengl/win/m_axis.c, Line: 210,336 # File: opengl/win/w_advance.c, Line: 120 # File: opengl/win/w_labels.c, Line: 716 # File: opengl/win/w_search.c, Line: 3581 msgid "Position" msgstr "Position" # File: gui/preferences.c, Line: 500,1036 # File: opengl/win/w_advance.c, Line: 121 msgid "Direction" msgstr "Direction" # File: gui/preferences.c, Line: 501 # File: opengl/win/w_advance.c, Line: 122 msgid "Intensity" msgstr "Intensité" # File: gui/preferences.c, Line: 502 msgid "Attenuation" msgstr "Atténuation" # File: gui/preferences.c, Line: 503 msgid "Spot specifics" msgstr "Détails du spot" # File: gui/preferences.c, Line: 504 # File: opengl/win/m_rep.c, Line: 504 msgid "Mode" msgstr "Mode" # File: gui/preferences.c, Line: 506 msgid "Density" msgstr "Densité" # File: gui/preferences.c, Line: 507 msgid "Depth" msgstr "Profondeur" # File: gui/preferences.c, Line: 508,1012,1045,1051,1147,2520,3215,3444 # File: opengl/win/m_back.c, Line: 72 # File: opengl/win/m_box.c, Line: 380,629 # File: opengl/win/m_coord.c, Line: 656 # File: opengl/win/popup.c, Line: 3667 # File: opengl/win/w_atoms.c, Line: 360 # File: opengl/win/w_coord.c, Line: 537,873,892,997 msgid "Color" msgstr "Couleur" # File: gui/preferences.c, Line: 509 msgid "Show clones" msgstr "Afficher les clones" # File: gui/preferences.c, Line: 510 msgid "Show box" msgstr "Afficher la boîte" # File: gui/preferences.c, Line: 512 msgid "Rendering" msgstr "Rendu" # File: gui/preferences.c, Line: 513 msgid "Scaling" msgstr "Mise à l'échelle" # File: gui/preferences.c, Line: 514 # File: opengl/win/w_axis.c, Line: 969 # File: opengl/win/w_labels.c, Line: 707 msgid "Font" msgstr "Police" # File: gui/preferences.c, Line: 515 msgid "Shift" msgstr "Changement" # File: gui/preferences.c, Line: 516,3696 # File: opengl/win/w_axis.c, Line: 1000 msgid "Colors" msgstr "Couleurs" # File: gui/preferences.c, Line: 517 msgid "Legend on x" msgstr "Légende sur x" # File: gui/preferences.c, Line: 518 msgid "Legend on y" msgstr "Légende sur y" # File: gui/preferences.c, Line: 519 msgid "Legend on z" msgstr "Légende sur z" # File: gui/preferences.c, Line: 532 msgid "atomes preferences XML file" msgstr "fichier XML de préférences d'atomes" # File: gui/preferences.c, Line: 550 msgid "Total cutoff" msgstr "Rayon de coupure total" # File: gui/preferences.c, Line: 563 msgid "cutoff %s-%s" msgstr "coupure %s-%s" # File: gui/preferences.c, Line: 682 msgid "Number of lights" msgstr "Nombre de lumières" # File: gui/preferences.c, Line: 946 msgid "Format" msgstr "Format" # File: gui/preferences.c, Line: 955 msgid "Only label color" msgstr "Couleur de label unique" # File: gui/preferences.c, Line: 1009,1114 msgid "Wireframe width" msgstr "Largeur du fil de fer" # File: gui/preferences.c, Line: 1009,1114 msgid "Cylinder radius" msgstr "Rayon du cylindre" # File: gui/preferences.c, Line: 1030 msgid "Gradient" msgstr "Gradient" # File: gui/preferences.c, Line: 1040 # File: opengl/win/w_colors.c, Line: 549 msgid "Mixed position" msgstr "Position mixte" # File: gui/preferences.c, Line: 1063 msgid "Representation type" msgstr "Type de représentation" # File: gui/preferences.c, Line: 1069 msgid "Camera depth" msgstr "Profondeur caméra" # File: gui/preferences.c, Line: 1075 # File: opengl/win/m_rep.c, Line: 427 msgid "Zoom" msgstr "Zoom" # File: gui/preferences.c, Line: 1081 # File: opengl/win/m_rep.c, Line: 428 msgid "Camera pitch" msgstr "Pitch caméra" # File: gui/preferences.c, Line: 1081 # File: opengl/win/m_rep.c, Line: 428 msgid "Camera heading" msgstr "Orientation caméra" # File: gui/preferences.c, Line: 1088 msgid "Camera x" msgstr "Caméra x" # File: gui/preferences.c, Line: 1088 msgid "Camera y" msgstr "Caméra y" # File: gui/preferences.c, Line: 1104 msgid "Template position" msgstr "Position du modèle" # File: gui/preferences.c, Line: 1110 msgid "Custom position" msgstr "Position personnalisée" # File: gui/preferences.c, Line: 1118 # File: opengl/win/m_axis.c, Line: 187,332 msgid "Length" msgstr "Longueur" # File: gui/preferences.c, Line: 1179 # File: opengl/win/w_labels.c, Line: 711 msgid "Font color" msgstr "Couleur de police" # File: gui/preferences.c, Line: 1186 msgid "Tilt along" msgstr "Inclinez selon" # File: gui/preferences.c, Line: 1191 # File: opengl/win/w_labels.c, Line: 813 msgid "Pattern" msgstr "Modèle" # File: gui/preferences.c, Line: 1196 # File: opengl/win/w_labels.c, Line: 832 msgid "Factor" msgstr "Facteur" # File: gui/preferences.c, Line: 1201,3426,3587 # File: opengl/win/w_labels.c, Line: 837 msgid "Width" msgstr "Largeur" # File: gui/preferences.c, Line: 1216 msgid "Selection color" msgstr "Couleur de sélection" # File: gui/preferences.c, Line: 2462 msgid "The View tab regroups representation options" msgstr "L'onglet Vue regroupe les options de représentation" # File: gui/preferences.c, Line: 2463 msgid "which effect apply to the general aspect of the model:" msgstr "quel effet s'applique à l'aspect général du modèle:" # File: curve/cedit.c, Line: 384,385 # File: gui/preferences.c, Line: 2465,2484 # File: opengl/win/m_box.c, Line: 301,600 # File: opengl/win/w_bonds.c, Line: 411 msgid "Axis" msgstr "Axes" # File: gui/preferences.c, Line: 2464 msgid "scene set-up and orientation" msgstr "configuration et orientation de la scene" # File: gui/preferences.c, Line: 2465 msgid "axis options" msgstr "options des axes" # File: gui/preferences.c, Line: 2466,2526 # File: opengl/win/glwindow.c, Line: 630 # File: opengl/win/menu_bar.c, Line: 278 # File: opengl/win/popup.c, Line: 4031,4243 msgid "Tools" msgstr "Outils" # File: gui/preferences.c, Line: 2466 msgid "measures and selections option" msgstr "option de mesures et sélections" # File: gui/preferences.c, Line: 2479 # File: opengl/win/glwindow.c, Line: 558 # File: opengl/win/m_rep.c, Line: 812 msgid "Representation" msgstr "Représentation" # File: gui/preferences.c, Line: 2489 msgid "Select measure type" msgstr "Sélectionner le type de mesure" # File: calc/dl_poly/dlp_control.c, Line: 167 # File: gui/preferences.c, Line: 2491,2508 msgid "Standard" msgstr "Standard" # File: gui/preferences.c, Line: 2492,2509 # File: opengl/win/glwindow.c, Line: 126,169,172 msgid "Edition mode" msgstr "Mode édition" # File: gui/preferences.c, Line: 2506 msgid "Select selection type" msgstr "Sélectionner le type de sélection" # File: calc/dl_poly/dlp_field.c, Line: 188 # File: gui/preferences.c, Line: 3221,3336,3341 msgid "atom" msgstr "atome" # File: gui/preferences.c, Line: 3221,3336,3341 msgid "clone" msgstr "cloner" # File: gui/preferences.c, Line: 3224 msgid "%s %s color" msgstr "%s %s couleur" # File: gui/preferences.c, Line: 3299 # File: opengl/win/w_search.c, Line: 2903,3129 msgid "atom(s)" msgstr "atome(s)" # File: gui/preferences.c, Line: 3299 msgid "dot(s)" msgstr "point(s)" # File: gui/preferences.c, Line: 3299 msgid "sphere(s)" msgstr "sphère(s)" # File: gui/preferences.c, Line: 3300 msgid "radius" msgstr "rayon" # File: gui/preferences.c, Line: 3300 msgid "size" msgstr "taille" # File: gui/preferences.c, Line: 3300 msgid "width" msgstr "largeur" # File: gui/preferences.c, Line: 3301 msgid "bond(s)" msgstr "liaison(s)" # File: gui/preferences.c, Line: 3301 msgid "wireframe(s)" msgstr "fil(s) de fer" # File: gui/preferences.c, Line: 3301 msgid "cylinder(s)" msgstr "cylindre(s)" # File: gui/preferences.c, Line: 3317,3326 msgid "Edit cloned %s %s" msgstr "Éditer %s %s cloné" # File: gui/preferences.c, Line: 3317,3326 msgid "Edit %s %s" msgstr "Éditer %s %s" # File: gui/preferences.c, Line: 3336 msgid "Select %s color" msgstr "Sélectionnez la couleur %s" # File: gui/preferences.c, Line: 3341 msgid "Select %s label color" msgstr "Sélectionnez la couleur du label %s" # File: calc/dl_poly/dlp_field.c, Line: 925 # File: gui/preferences.c, Line: 3425 # File: opengl/win/m_map.c, Line: 679 msgid "Element" msgstr "Élément" # File: gui/preferences.c, Line: 3425 msgid "Symbol" msgstr "Symbole" # File: gui/preferences.c, Line: 3426,3587 # File: opengl/edit/cell_cut.c, Line: 307 # File: opengl/win/w_axis.c, Line: 974 # File: opengl/win/w_labels.c, Line: 726 msgid "Size" msgstr "Taille" # File: gui/preferences.c, Line: 3427 msgid "Covalent [1]" msgstr "Covalent [1]" # File: gui/preferences.c, Line: 3427 msgid "Ionic [2]" msgstr "Ionique [2]" # File: gui/preferences.c, Line: 3427 msgid "Crystal [4,5]" msgstr "Cristal [4,5]" # File: gui/preferences.c, Line: 3478 msgid "User defined values appear in colored bold font." msgstr "Les valeurs définies par l'utilisateur apparaissent en caractères gras colorés." # File: gui/preferences.c, Line: 3494 msgid "By default label and species colors are similar," msgstr "Par défaut, les couleurs des labels et des espèces sont similaires," # File: gui/preferences.c, Line: 3494 msgid "you can modify that using this dialog window." msgstr "vous pouvez modifier cela à l'aide de cette fenêtre de dialogue." # File: gui/preferences.c, Line: 3494 msgid "You can also use a single color for all labels:" msgstr "Vous pouvez également utiliser une couleur unique pour tous les labels:" # File: gui/preferences.c, Line: 3506 msgid "Use single color" msgstr "Utiliser une couleur unique" # File: gui/preferences.c, Line: 3543 msgid "Edit species related parameters" msgstr "Éditer les paramètres liés aux espèces" # File: gui/preferences.c, Line: 3547 msgid "Override species based parameters" msgstr "Remplacer les valeurs liées aux espèces" # File: gui/preferences.c, Line: 3552 msgid "Set default value" msgstr "Définir la valeur par défaut" # File: gui/preferences.c, Line: 3586 msgid "Atom(s)" msgstr "Atome(s)" # File: gui/preferences.c, Line: 3586 msgid "Bond(s)" msgstr "Liaison(s)" # File: gui/preferences.c, Line: 3586 msgid "\tClone(s)" msgstr "\tClone(s)" # File: gui/preferences.c, Line: 3586 msgid "Atom(s) " msgstr "Atome(s) " # File: gui/preferences.c, Line: 3299 msgid "atom(s) " msgstr "atome(s) " # File: calc/dl_poly/dlp_field.c, Line: 346 # File: opengl/win/glwindow.c, Line: 526 # File: opengl/win/m_clones.c, Line: 125 # File: opengl/win/menu_bar.c, Line: 187 # File: opengl/win/popup.c, Line: 4229 msgid "Bond(s)" msgstr "Liaison(s)" # File: gui/preferences.c, Line: 3644 msgid "The Model tab regroups atom(s), bond(s) and clone(s) options" msgstr "L'onglet Modèle regroupe les options des atome(s), liaison(s) et clone(s)" # File: gui/preferences.c, Line: 3645 msgid "which effect apply when the corresponding OpenGL style is used:" msgstr "quel effet s'applique lorsque le style OpenGL correspondant est utilisé:" # File: gui/preferences.c, Line: 3646 # File: opengl/win/glwindow.c, Line: 141 # File: opengl/win/m_style.c, Line: 59 msgid "Balls and Sticks" msgstr "Boules et Bâtonnets" # File: gui/preferences.c, Line: 3646 msgid "atoms* and bonds radii" msgstr "atomes* et rayons des liaisons" # File: gui/preferences.c, Line: 3647 # File: opengl/win/glwindow.c, Line: 148 # File: opengl/win/m_style.c, Line: 60 # File: opengl/win/w_axis.c, Line: 935 # File: opengl/win/w_box.c, Line: 400 msgid "Wireframes" msgstr "Fils de Fer" # File: gui/preferences.c, Line: 3647 msgid "dots** size and wireframes width" msgstr "taille des points** et largeur des fils de fer" # File: gui/preferences.c, Line: 3648 # File: opengl/win/m_style.c, Line: 61,371,406,505 # File: opengl/win/popup.c, Line: 3104 msgid "Spacefilled" msgstr "Volumique" # File: gui/preferences.c, Line: 3648 msgid "tabulated parameters" msgstr "paramètres tabulés" # File: gui/preferences.c, Line: 3649 # File: opengl/win/glwindow.c, Line: 142 # File: opengl/win/m_box.c, Line: 362,370,617 # File: opengl/win/m_style.c, Line: 63 # File: opengl/win/w_axis.c, Line: 936 # File: opengl/win/w_box.c, Line: 401 msgid "Cylinders" msgstr "Cylindres" # File: gui/preferences.c, Line: 3649 msgid "bonds radii" msgstr "rayons des liaisons" # File: gui/preferences.c, Line: 3652 msgid "It also provides options to customize atomic label(s)," msgstr "Il fournit également des options pour personnaliser les labels atomiques," # File: gui/preferences.c, Line: 3652 msgid "and, the model box, if any:" msgstr "et la boîte du modèle, le cas échéant:" # File: gui/preferences.c, Line: 3653,3701 msgid "Labels" msgstr "Labels" # File: gui/preferences.c, Line: 3653 msgid "atom labels" msgstr "labels d'atomes" # File: gui/preferences.c, Line: 3654,3718 # File: opengl/win/m_box.c, Line: 301,600 # File: opengl/win/w_bonds.c, Line: 411 msgid "Box" msgstr "Boîte" # File: gui/preferences.c, Line: 3654 msgid "model box details" msgstr "détails de la boîte du modèle" # File: gui/preferences.c, Line: 3659 msgid "Atoms" msgstr "Atomes" # File: gui/preferences.c, Line: 3659 msgid "Clones" msgstr "Clones" # File: gui/preferences.c, Line: 3664 msgid "Edit species colors" msgstr "Éditer les couleurs des espèces" # File: gui/preferences.c, Line: 3668 msgid "Always show clone(s), if any." msgstr "Affichez toujours les clones, le cas échéant." # File: gui/preferences.c, Line: 3671 msgid "Always show box, if any." msgstr "Montrez toujours la boîte, le cas échéant." # File: gui/preferences.c, Line: 3675 msgid "the same parameters are also used for the spheres style" msgstr "les mêmes paramètres sont également utilisés pour le style sphères" # File: gui/preferences.c, Line: 3676 msgid "the same parameters are also used for the dots style" msgstr "les mêmes paramètres sont également utilisés pour le style points" # File: gui/preferences.c, Line: 3697 msgid "Adjust color(s)" msgstr "Ajuster la ou les couleurs" # File: gui/preferences.c, Line: 3742 msgid "f(atoms) *" msgstr "f(atomes) *" # File: gui/preferences.c, Line: 3785 # File: opengl/win/m_map.c, Line: 1132,1239 # File: opengl/win/w_coord.c, Line: 90 msgid "Atomic Species" msgstr "Espèces Chimiques" # File: gui/preferences.c, Line: 3786 # File: opengl/win/m_poly.c, Line: 333,493 msgid "Total Coordination(s)" msgstr "Coordination(s) Totale(s)" # File: gui/preferences.c, Line: 3787 # File: opengl/win/m_poly.c, Line: 334,494 msgid "Partial Coordination(s)" msgstr "Coordination(s) Partielle(s)" # File: gui/preferences.c, Line: 3816 msgid "The OpenGL tab regroups rendering options" msgstr "L'onglet OpenGL regroupe les options de rendu" # File: gui/preferences.c, Line: 3817 msgid "use it to configure the OpenGL 3D scene:" msgstr "utilisez-le pour configurer la scène 3D OpenGL:" # File: gui/preferences.c, Line: 3818,3857 msgid "Material" msgstr "Matériau" # File: gui/preferences.c, Line: 3818 msgid "aspect for atom(s) and bond(s)" msgstr "aspect pour les atomes et les liaisons" # File: gui/preferences.c, Line: 3819,3858 msgid "Lights" msgstr "Lumières" # File: gui/preferences.c, Line: 3819 msgid "lightning of the scene" msgstr "éclairage de la scène" # File: gui/preferences.c, Line: 3820,3859 msgid "Fog" msgstr "Brouillard" # File: gui/preferences.c, Line: 3820 msgid "atmosphere effects" msgstr "effets d'atmosphère" # File: gui/preferences.c, Line: 3821 msgid "It also offers to adjust the main visualization style and the color maps" msgstr "Il propose également d'ajuster le style de visualisation principal et les cartes de couleurs" # File: gui/preferences.c, Line: 3826 msgid "Style" msgstr "Style" # File: gui/preferences.c, Line: 3838 msgid "if 10 000 atoms or more: Wireframes, otherwise: Balls and sticks" msgstr "si 10 000 atomes ou plus: Fils de fer, sinon: Boules et bâttonets" # File: gui/preferences.c, Line: 3841 msgid "Color maps" msgstr "Palettes de couleurs" # File: gui/preferences.c, Line: 3844 msgid "\tatom(s) and bond(s)" msgstr "\tatome(s) et liaison(s)" # File: gui/preferences.c, Line: 3849 msgid "\tpolyhedra" msgstr "\tpolyèdres" # File: gui/preferences.c, Line: 4016,4196 msgid "Spec. α" msgstr "Esp. α" # File: gui/preferences.c, Line: 4017,4211 msgid "Spec. β" msgstr "Esp. β" # File: gui/preferences.c, Line: 4018 msgid "Rcut (α, β)" msgstr "Rcoup (α, β)" # File: gui/preferences.c, Line: 4019 msgid "Use *" msgstr "Utilisez *" # File: gui/preferences.c, Line: 4040 msgid "Unused values will not be saved !" msgstr "Les valeurs inutilisées ne seront pas enregistrées !" # File: gui/preferences.c, Line: 4187 msgid "Select partial cutoffs(s)" msgstr "Sélectionnez les rayons de coupure partiels" # File: gui/preferences.c, Line: 4229,4269 msgid "Step(s) between configurations" msgstr "Pas entre les configurations" # File: gui/preferences.c, Line: 4267 msgid "g(r): number of δr" msgstr "g(r): nombre de δr" # File: gui/preferences.c, Line: 4267 msgid "s(q): number of δq" msgstr "s(q): nombre de δq" # File: gui/preferences.c, Line: 4267 msgid "s(k): number of δk" msgstr "s(k): nombre de δk" # File: gui/preferences.c, Line: 4267 msgid "g(r) FFT: number of δr" msgstr "g(r) FFT: nombre de δr" # File: gui/preferences.c, Line: 4268 msgid "Dij: number of δr [Dijmin-Dijmax]" msgstr "Dij: nombre de δr [Dijmin-Dijmax]" # File: gui/preferences.c, Line: 4268 msgid "Angles distribution: number of δθ [0-180°]" msgstr "Distribution des angles: nombre de δθ [0-180°]" # File: gui/preferences.c, Line: 4269 msgid "Spherical harmonics: lmax ∈ [2-40]" msgstr "Harmoniques sphériques: lmax ∈ [2-40]" # File: gui/preferences.c, Line: 4269 msgid "F(k,δt): number of δk" msgstr "F(k,δt): nombre de δk" # File: gui/preferences.c, Line: 4270 msgid "The Analysis tab regroups calculation options" msgstr "L'onglet Analyse regroupe les options de calcul" # File: gui/preferences.c, Line: 4271 msgid "use it to setup your own default parameters:" msgstr "utilisez-le pour configurer vos propres paramètres par défaut:" # File: gui/preferences.c, Line: 4272,4343 msgid "Calculations" msgstr "Calculs" # File: gui/preferences.c, Line: 4272 msgid "most analysis options" msgstr "la plupart des options d'analyse" # File: gui/preferences.c, Line: 4273,4350 # File: opengl/win/popup.c, Line: 4235 msgid "Rings" msgstr "Anneaux" # File: gui/preferences.c, Line: 4273 msgid "ring statistics options" msgstr "options de statistiques d'anneaux" # File: gui/preferences.c, Line: 4274,4350 msgid "Chains" msgstr "Chaînes" # File: gui/preferences.c, Line: 4274 msgid "chain statistics options" msgstr "options de statistiques de chaînes" # File: gui/preferences.c, Line: 4275 msgid "dynamic structure factor options" msgstr "options de facteur de structure dynamique" # File: gui/preferences.c, Line: 4280 msgid "To determine the existence, or the absence, of a chemical bond" msgstr "Déterminer l’existence ou l’absence d’une liaison chimique" # File: gui/preferences.c, Line: 4281 msgid "between 2 atoms is a key feature in the atomes software" msgstr "entre 2 atomes est une fonctionnalité clé du logiciel atomes" # File: gui/preferences.c, Line: 4284 msgid "It is used for analysis purposes, and, to draw bonds in the OpenGL window." msgstr "Cela est utilisé à des fins d'analyse et pour dessiner des liaisons dans la fenêtre OpenGL." # File: gui/preferences.c, Line: 4286 msgid "You can adapt below the distance cutoffs:" msgstr "Vous pouvez adapter ci-dessous les rayons de coupure:" # File: gui/preferences.c, Line: 4292 msgid "Total cutoff" msgstr "Rayon de coupure total" # File: gui/preferences.c, Line: 4294 msgid "Evaluated by atomes" msgstr "Évalué par atomes" # File: gui/preferences.c, Line: 4295 msgid "User Defined *" msgstr "Défini par l'Utilisateur *" # File: gui/preferences.c, Line: 4313 msgid "Partial cutoff(s)" msgstr "Rayon(s) de coupure partiel(s)" # File: gui/preferences.c, Line: 4314 msgid "Set default cutoff(s)" msgstr "Définir les rayons de coupure par défaut" # File: gui/preferences.c, Line: 4317 msgid "The highest this value is, the highest the number of neighbors around an atom." msgstr "Plus cette valeur est élevée, plus le nombre de voisins autour d’un atome est élevé." # File: gui/preferences.c, Line: 4339 msgid "Dynamical analysis: MSD, S(q,ω)" msgstr "Déplacement Carré Moyen:" # File: gui/preferences.c, Line: 4879 msgid "Apply to project(s) in workspace ?" msgstr "Appliquer aux projets de l'espace de travail ?" # File: gui/preferences.c, Line: 4879 msgid "Preferences were saved for the active session !\n Do you want to apply preferences to the project(s) opened in the workspace ?" msgstr "Les préférences ont été enregistrées pour la session active !\n Souhaitez-vous appliquer ces préférences au(x) projet(s) ouvert(s) dans l'espace de travail ?" # File: gui/preferences.c, Line: 4882 msgid "Project selection" msgstr "Sélection de projets" # File: gui/preferences.c, Line: 4882 msgid "Select to apply preferences" msgstr "Sélectionnez pour appliquer les préférences" # File: gui/preferences.c, Line: 4891 msgid "Including analysis parameters and cutoffs ..." msgstr "Y compris les paramètres d'analyse et les rayons de coupure ..." # File: gui/preferences.c, Line: 4945 msgid "Restore default parameters" msgstr "Restaurer les paramètres par défaut" # File: global.c, Line: 141 msgid "Analysis" msgstr "analyse" # File: gui/preferences.c, Line: 4954,5064 # File: opengl/win/m_tools.c, Line: 78 msgid "Analysis " msgstr "Analyse" # File: gui/preferences.c, Line: 4956,5066 # File: opengl/win/glwindow.c, Line: 622 # File: opengl/win/menu_bar.c, Line: 270,275 # File: opengl/win/w_volumes.c, Line: 1138 msgid "Model" msgstr "Modèle" # File: gui/preferences.c, Line: 4957,5067 # File: opengl/win/glwindow.c, Line: 631 # File: opengl/win/menu_bar.c, Line: 279 msgid "View" msgstr "Vue" # File: gui/preferences.c, Line: 4978 msgid "Save parameters" msgstr "Enregistrer les paramètres" # File: gui/preferences.c, Line: 4981,5127 msgid "Do you want to save atomes preferences in:\n\n\t%s\n\nIf found this file is processed at every atomes startup.\n\n\t\t\t\t\t\tSave file ?" msgstr "Voulez-vous sauvegarder les préférences d'atomes dans:\n\n\t%s\n\nS'il est trouvé, ce fichier est traité à chaque démarrage d'atomes.\n\n\t\t\t\t\t\tEnregistrer le fichier ?" # File: gui/preferences.c, Line: 4982,5128 msgid "Save atomes preferences to file ?" msgstr "Enregistrer les préférences d'atomes dans un fichier ?" # File: gui/preferences.c, Line: 4986,5132 msgid "Error while trying to save preferences to file" msgstr "Erreur lors de la tentative d'enregistrement des préférences dans le fichier" # File: gui/preferences.c, Line: 5024 msgid "User preferences" msgstr "Préférences utilisateur" # File: gui/preferences.c, Line: 5037 msgid "Browse the following to modify the default configuration of atomes" msgstr "Parcourez ce qui suit pour modifier la configuration par défaut d'atomes" # File: gui/preferences.c, Line: 5038 msgid "by replacing internal parameters by user defined preferences." msgstr "en remplaçant les paramètres internes par des préférences définies par l'utilisateur." # File: gui/preferences.c, Line: 5039 msgid "calculation preferences" msgstr "préférences de calcul" # File: gui/preferences.c, Line: 5040 msgid "rendering preferences" msgstr "préférences de rendu" # File: gui/preferences.c, Line: 5041 msgid "atom(s), bond(s) and box preferences" msgstr "préférences d'atome(s), liaison(s) et boîte" # File: gui/preferences.c, Line: 5042 msgid "representation and projection preferences" msgstr "préférences de représentation et projection" # File: gui/preferences.c, Line: 5043 msgid "Default parameters are used for any new project added to the workspace\n" msgstr "Les paramètres par défaut sont utilisés\npour tout nouveau projet ajouté à l'espace de travail\n" # File: gui/preferences.c, Line: 5058 msgid "Restore atomes default parameters" msgstr "Restaurer les paramètres par défaut d'atomes" # File: gui/preferences.c, Line: 5094 msgid "rendering" msgstr "rendu" # File: gui/preferences.c, Line: 5104 # File: opengl/win/w_bonds.c, Line: 410 msgid "box" msgstr "boîte" # File: gui/preferences.c, Line: 5108 # File: opengl/win/w_bonds.c, Line: 410 msgid "axis" msgstr "axes" # File: gui/preferences.c, Line: 5112 msgid "background" msgstr "arrière-plan" # File: gui/preferences.c, Line: 5084 msgid "representation" msgstr "représentation" # File: gui/preferences.c, Line: 5085 msgid "Set %s preferences as default preferences ?" msgstr "Définir les préférences %s comme préférences par défaut ?" # File: gui/preferences.c, Line: 5087 msgid "Set model preferences as default ?" msgstr "Définir les préférences du modèle par défaut ?" # File: gui/preferences.c, Line: 5157 msgid "Set default" msgstr "Définir par défaut" # File: gui/ringscall.c, Line: 488 msgid "\tThe ring statistics have failed !\n\n" "The number of ring per MD step appears\n" "to be bigger than the initial value of %d\n" "used to allocate memory to store the results.\n\n" "Increase the value and start again !" msgstr "\tLes statistiques d'anneaux ont échoué !\n\n" "Le nombre d'anneaux par pas de DM apparaît\n" "être supérieur à la valeur initiale de %d\n" "utilisée pour allouer de la mémoire pour stocker les résultats.\n\n" "Augmentez la valeur et recommencez !" # File: gui/ringscall.c, Line: 93 msgid "%s - %sAll]" msgstr "%s - %sTous]" # File: gui/ringscall.c, Line: 171 msgid "\n\nRing statistics\n\n" msgstr "\n\nStatistiques d'anneaux\n\n" # File: gui/ringscall.c, Line: 172 msgid "\n%s rings analysis details:\n" msgstr "\nDétails de l'analyse des anneaux %s:\n" # File: gui/ringscall.c, Line: 178 msgid " * only ABAB rings have been considered\n" msgstr " *seuls les anneaux ABAB ont été pris en compte\n" # File: gui/ringscall.c, Line: 182 msgid " * no homopolar bonds in the rings (A-A, B-B ...)\n" msgstr " * pas de liaisons homopolaires dans les anneaux (A-A, B-B...)\n" # File: gui/ringscall.c, Line: 186 msgid " * no homopolar bonds in the connectivity matrix (A-A, B-B ...)\n" msgstr " * pas de liaisons homopolaires dans la matrice de connectivité (A-A, B-B...)\n" # File: gui/ringscall.c, Line: 195 msgid "\n Average number of rings per configuration: " msgstr "\n Nombre moyen d'anneaux par configuration: " # File: gui/ringscall.c, Line: 205 msgid "\n Total number of rings: " msgstr "\n Nombre total d'anneaux: " # File: gui/ringscall.c, Line: 214 msgid " Average number of ring(s) with n > " msgstr " Nombre moyen d'anneau(x) avec n > " # File: gui/ringscall.c, Line: 218 msgid " Number of ring(s) with n > " msgstr " Nombre de anneau(x) avec n > " # File: gui/ringscall.c, Line: 223 msgid " nodes that potentially exist: " msgstr " nœuds qui existent potentiellement: " # File: gui/ringscall.c, Line: 480 msgid "The ring statistics calculation has failed" msgstr "Le calcul des statistiques d'anneaux a échoué" # File: gui/sktcall.c, Line: 254 msgid "\tMolecular dynamics information:\n\n" msgstr "\tInformations sur la dynamique moléculaire:\n\n" # File: gui/sktcall.c, Line: 257 msgid "\n\n\tIntermediate scattering - F(q,δt)\n\n" msgstr "\n\n\tDiffusion intermédiaire - F(q,δt)\n\n" # File: gui/sktcall.c, Line: 259 msgid "\t - Correlation threshold δt" msgstr "\t - Seuil de corrélation δt" # File: gui/sktcall.c, Line: 268 msgid "\t - All " msgstr "\t - Tous " # File: gui/sktcall.c, Line: 272 msgid " correlated calculations saved" msgstr " calculs corrélés sauvegardés" # File: gui/sktcall.c, Line: 277 msgid "\t - Results saved for " msgstr "\t - Résultats sauvegardés pour " # File: gui/sktcall.c, Line: 281 msgid " correlated calculations:\n\n" msgstr " calculs corrélés:\n\n" # File: gui/sktcall.c, Line: 295 msgid "\tDynamic structure factor - S(q,ω)\n\n" msgstr "\tFacteur de structure dynamique - S(q,ω)\n\n" # File: gui/sktcall.c, Line: 300 msgid " q vectors were analyzed:\n\n" msgstr " q vecteurs ont été analysés:\n\n" # File: gui/sktcall.c, Line: 364 msgid "The dynamic structure factor calculation has failed" msgstr "Le calcul du facteur de structure dynamique a échoué" # File: gui/sktcall.c, Line: 375 # File: gui/sqcall.c, Line: 295 msgid "Problem during the selection of the k-points\nused to sample the reciprocal lattice" msgstr "Problème lors de la sélection des points-k\nutilisés pour échantillonner le réseau réciproque" # File: gui/spcall.c, Line: 116 msgid "\n\nSpherical harmonics\n\n" msgstr "\n\nHarmoniques sphériques\n\n" # File: gui/spcall.c, Line: 120 msgid "\nResults for the " msgstr "\nRésultats pour le " # File: gui/spcall.c, Line: 122 msgid " atoms: \n\n" msgstr " atomes: \n\n" # File: gui/spcall.c, Line: 130 msgid "[All]" msgstr "[Tous]" # File: gui/spcall.c, Line: 240 msgid "Unexpected error when analyzing the spherical harmonics" msgstr "Erreur inattendue lors de l'analyse des harmoniques sphériques" # File: gui/sqcall.c, Line: 131 msgid "\n\nStructure factor(s)" msgstr "\n\nFacteur(s) de structure" # File: gui/sqcall.c, Line: 135 msgid "\n\nDynamic structure factor(s)" msgstr "\n\nFacteur(s) de structure dynamique" # File: gui/sqcall.c, Line: 139 msgid " - reciprocal space calculation\n\n" msgstr " - calcul dans l'espace réciproque\n\n" # File: gui/sqcall.c, Line: 146 msgid "\tReciprocal space discretization:\n\n" msgstr "\tDiscrétisation de l'espace réciproque:\n\n" # File: gui/sqcall.c, Line: 147 msgid "\t - Number of δq steps: " msgstr "\t - Nombre d'intervalles δq: " # File: gui/sqcall.c, Line: 151 msgid "\n\n\t between " msgstr "\n\n\t entre " # File: gui/sqcall.c, Line: 155,175 # File: calc/dl_poly/dlp_field.c, Line: 3 msgid "and" msgstr "et" # File: gui/sqcall.c, Line: 162 msgid " is the minimum wave vector, and " msgstr " est le vecteur d'onde minimum, et " # File: gui/sqcall.c, Line: 165 msgid " is the maximum wave vector:\n\n" msgstr " est le vecteur d'onde maximum:\n\n" # File: gui/sqcall.c, Line: 220,283 msgid "The S(q) calculation has failed" msgstr "Le calcul du S(q) a échoué" # File: gui/tools.c, Line: 302 msgid "Logo" msgstr "Logo" # File: calc/dl_poly/dlp_atom.c, Line: 744 # File: calc/dl_poly/dlp_field.c, Line: 924 # File: calc/dl_poly/dlp_mol.c, Line: 761 # File: gui/tools.c, Line: 302 # File: opengl/win/w_search.c, Line: 3577 msgid "Name" msgstr "Nom" # File: gui/tools.c, Line: 302 msgid "Button" msgstr "Bouton" # File: gui/work_menu.c, Line: 155,184,194 msgid "ISAACS Project File '*.ipf'" msgstr "Fichier de projet ISAACS '*.ipf'" # ============================================================ # Section: src # ============================================================ # File: global.c, Line: 141 msgid "Edition" msgstr "édition" # File: curve/m_curve.c, Line: 78 # File: opengl/win/m_tools.c, Line: 78 msgid "Edition " msgstr "Édition" # File: global.c, Line: 145 msgid "\nIf this is a bug please report it to:" msgstr "\nS'il s'agit d'un bug, veuillez le signaler à:" # File: global.c, Line: 147 msgid "All (No Rule)" msgstr "Tous (Aucune Règle)" # File: global.c, Line: 148 msgid "King's" msgstr "de King" # File: global.c, Line: 149 msgid "Guttman's" msgstr "de Guttman" # File: global.c, Line: 150 msgid "Primitive" msgstr "Primitif(s)" # File: global.c, Line: 151 msgid "Strong" msgstr "Fort(s)" # File: global.c, Line: 617 msgid "Error in string format: string = \"%s\" - value == %lf\n" msgstr "Erreur dans le format de chaîne : chaîne = \"%s\" - valeur == %lf\n" # File: global.c, Line: 646 msgid "\n \tAnalysis was performed in: " msgstr "\n \tL'analyse a été réalisée en: " # File: project/close_p.c, Line: 526 msgid "No project to be closed" msgstr "Aucun projet à clôturer" # File: project/init_p.c, Line: 279 msgid "Project N°" msgstr "Projet N°" # File: opengl/win/glwindow.c, Line: 315 # File: opengl/win/m_map.c, Line: 1139,1250 # File: opengl/win/menu_bar.c, Line: 224,228 # File: opengl/win/popup.c, Line: 4237 # File: opengl/win/w_coord.c, Line: 93,1351 # File: opengl/win/w_volumes.c, Line: 1139 # File: project/read_mol.c, Line: 149 msgid "Fragment(s)" msgstr "Fragment(s)" # File: opengl/win/glwindow.c, Line: 316 # File: opengl/win/m_map.c, Line: 1140,1253 # File: opengl/win/menu_bar.c, Line: 232,236 # File: opengl/win/popup.c, Line: 4238 # File: opengl/win/w_coord.c, Line: 94,1355 # File: opengl/win/w_volumes.c, Line: 1140 # File: project/read_mol.c, Line: 150 # File: calc/dl_poly/dlp_field.c, Line: 142 msgid "Molecule(s)" msgstr "Molécule(s)" # File: project/update_p.c, Line: 258 msgid "Impossible to update project: %s\n" msgstr "Impossible de mettre à jour le projet: %s\n" # File: project/update_p.c, Line: 280 # File: workspace/workspace.c, Line: 441 msgid "Toolboxes - %s" msgstr "Boîtes à outils - %s" # File: project/readers/read_c3d.c, Line: 328,351 # File: project/readers/read_xyz.c, Line: 309,332 msgid "Wrong file format - cannot find the number of atoms !" msgstr "Mauvais format de fichier - impossible de trouver le nombre d'atomes !" # File: project/readers/read_c3d.c, Line: 329,352 # File: project/readers/read_xyz.c, Line: 310,333 msgid "Wrong file format - first line is corrupted !" msgstr "Mauvais format de fichier - la première ligne est corrompue !" # File: project/readers/read_c3d.c, Line: 334,357 # File: project/readers/read_hist.c, Line: 440 # File: project/readers/read_trj.c, Line: 252 # File: project/readers/read_vas.c, Line: 251 # File: project/readers/read_xyz.c, Line: 315,338 msgid "Number of atoms" msgstr "Nombre d'atomes" # File: project/readers/read_c3d.c, Line: 343,366 # File: project/readers/read_hist.c, Line: 441 # File: project/readers/read_trj.c, Line: 254 # File: project/readers/read_vas.c, Line: 253 # File: project/readers/read_xyz.c, Line: 324,347 msgid "Number of steps" msgstr "Nombre de pas" # File: project/readers/read_cif.c, Line: 367 msgid "To continue and build the crystal according to the information of the CIF file\n" "it is required to provide a suitable value for each and every missing parameter(s).\n\n" "Please select an atom type for the following object(s):" msgstr "Pour continuer et construire le cristal selon les informations du fichier CIF\n" "il est nécessaire de fournir une valeur appropriée pour chaque paramètre manquant.\n\n" "Veuillez sélectionner un type d'atome pour le(s) objet(s) suivant(s):" # File: project/readers/read_cif.c, Line: 769 msgid "CIF get loop line: something is wrong for keyword: %s_%s\n" " -> keyword found= %d times\n" " -> configurations in CIF file= %d !\n" msgstr "Ligne de boucle d'obtention CIF : quelque chose ne va pas pour le mot clé : %s_%s\n" " -> mot clé trouvé = %d fois\n" " -> configurations dans le fichier CIF= %d !\n" # File: project/readers/read_cif.c, Line: 819 msgid "CIF retrieved value: keyword: %s_%s\n" " -> keyword found= %d times\n" " -> configurations in CIF file= %d !\n" msgstr "Valeur leu dans le CIF : mot-clé : %s_%s\n" " -> mot clé trouvé = %d fois\n" " -> configurations dans le fichier CIF= %d !\n" # File: project/readers/read_cif.c, Line: 857 msgid "Key positions: keyword: %s_%s\n" " -> not found for conf %d between loop_pos[0]= %d and loop_pos[1]= %d\n" msgstr "Positions clés : mot-clé : %s_%s\n" " -> introuvable pour la conf %d entre loop_pos[0]= %d et loop_pos[1]= %d\n" # File: project/readers/read_cif.c, Line: 1203 msgid "Atomic coordinates: the number of atom(s) changes !\n" " - configuration N°%d\t :: atoms= %d\n" " - initialization \t\t :: atoms= %d\n" msgstr "Coordonnées atomiques: le nombre d'atome(s) change !\n" " - configuration N°%d :: atomes= %d\n" " - initialisation :: atomes= %d\n" # File: project/readers/read_cif.c, Line: 1265 msgid "Atomic coordinates: the number of chemical species changes !\n" " - configuration N°%d\t :: species= %d\n" " - initialization \t\t :: species= %d\n" msgstr "Coordonnées atomiques: le nombre d'espèces chimiques change !\n" " - configuration N°%d :: espèce= %d\n" " - initialisation :: espèce= %d\n" # File: project/readers/read_cif.c, Line: 1277 msgid "Atomic coordinates: the number of atom(s) for species %d changes !\n" " - configuration N°%d\t :: atom(s)= %d\n" " - initialization \t\t :: atom(s)= %d\n" msgstr "Coordonnées atomiques: le nombre d'atome(s) pour l'espèce %d change !\n" " - configuration N°%d :: atome(s)= %d\n" " - initialisation :: atome(s)= %d\n" # File: project/readers/read_cif.c, Line: 1658,1739 msgid "Space group: CIF file information could be inaccurate !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n" msgstr "Groupe d'espace: les informations du fichier CIF pourraient être inexactes !\n" " Groupe d'espace fichier CIF : %s, symbole H-M du fichier CIF: %s\n" # File: project/readers/read_cif.c, Line: 1899 msgid "Space group: space group and H-M symbol do not match !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n" msgstr "Groupe d'espace: groupe d'espace et symbole H-M ne sont pas cohérent !\n" " Groupe d'espace fichier CIF : %s, symbole H-M du fichier CIF: %s\n" # File: project/readers/read_cif.c, Line: 2048 msgid "Space group: found trigonal space group N°%d-%s, %s setting\n" "but the lattice parameters were found in %s format ...\n" "\t ... the space group setting was modified accordingly !\n" msgstr "Groupe d'espace : groupe d'espace trigonal trouvé N°%d-%s, paramètre %s\n" "mais les paramètres de maille ont été trouvés au format %s ...\n" "\t ... le paramétrage du groupe d'espace a été modifié en conséquence !\n" # File: project/readers/read_cif.c, Line: 2063 msgid "Space group and lattice parameters are not compatible !\n\n" "Check a, b, c, and α, β, ɣ, with the type of crystal system.\n" msgstr "Le Groupe d'espace et les paramètres de maille ne sont pas compatibles !\n\n" "Vérifiez a, b, c et α, β, ɣ, avec le type de système cristallin.\n" # File: project/readers/read_cif.c, Line: 2170 msgid "Building crystal using symmetry positions: \n" " 1) evaluate candidate atomic positions using data in CIF file: \n" " - symmetry positions\n" " - atomic coordinates + occupancy\n" " 2) fill each candidate position using the associated occupancy: \n" " - occupancy %s\n" " - %s\n" msgstr "Construire un cristal en utilisant des positions de symétrie: \n" " 1) évaluer les positions atomiques candidates à l'aide des données du fichier CIF: \n" " - positions de symétrie\n" " - coordonnées atomiques + occupation\n" " 2) pourvoir chaque position candidate en utilisant l'occupation associée: \n" " - occupation %s\n" " - %s\n" # File: project/readers/read_cif.c, Line: 2517 msgid "The crystal will be created however some objects might be missing,\n" "Occupancy is too low compared to the number of site(s) per cell.\n\n" "To build a crystal matching the defined occupancy:\n" "\t 1) If you are trying to read a CIF file, use the crystal builder instead.\n" "\t 2) Modify the occupancy set-up to 'Completely random'.\n" "\t 3) Increase the number of unit cells up to get rid of this message.\n\n" msgstr "Le cristal sera créé mais certains objets pourraient manquer,\n" "L'occupation est trop faible par rapport au nombre de site(s) par cellule.\n\n" "Pour construire un cristal correspondant à l'occupation définie:\n" "\t 1) Si vous essayez de lire un fichier CIF, utilisez plutôt le constructeur de cristaux.\n" "\t 2) Modifiez la configuration d'occupation sur « Complètement aléatoire ».\n" "\t 3) Augmentez le nombre de cellules unitaires jusqu'à supprimer ce message.\n\n" # File: project/readers/read_cif.c, Line: 2525 msgid "Object(s) at equivalent positions have been removed\n" "to ensure the consistency of the model\n" "when using Periodic Boundary Conditions\n " msgstr "Les objets situés à des positions équivalentes ont été supprimés\n" "pour assurer la cohérence du modèle\n" "lors de l'utilisation des Conditions aux Limites Périodiques\n " # File: project/readers/read_cif.c, Line: 362 msgid "Error while reading CIF file" msgstr "Erreur lors de la lecture du fichier CIF" # File: project/readers/read_cif.c, Line: 379 msgid "Type N°%d:\t%s" msgstr "Tapez N°%d : %s" # File: project/readers/read_cif.c, Line: 396 msgid "In case of a molecule: insert an extra type of atom and run a substitution afterwards." msgstr "Dans le cas d'une molécule: insérez un type d'atome supplémentaire et effectuez ensuite une substitution." # File: project/readers/read_cif.c, Line: 478,561 msgid "Wrong file format: searching for %s - error at line %d !\n" msgstr "Mauvais format de fichier: recherche de %s - erreur à la ligne %d !\n" # File: project/readers/read_cif.c, Line: 1107 msgid "label" msgstr "label" # File: project/readers/read_cif.c, Line: 1110,2518 msgid "occupancy" msgstr "occupation" # File: project/readers/read_cif.c, Line: 1156 msgid "Atomic coordinates: impossible to find atomic label(s) ..." msgstr "Coordonnées atomiques: impossible de trouver des labels atomiques ..." # File: project/readers/read_cif.c, Line: 1168 msgid "Atomic coordinates: impossible to find '%s' ..." msgstr "Coordonnées atomiques: impossible de trouver '%s' ..." # File: project/readers/read_cif.c, Line: 1184 msgid "Please select how to handle occupancy" msgstr "Veuillez sélectionner comment gérer l'occupation" # File: project/readers/read_cif.c, Line: 1184 msgid "Select how to handle occupancy" msgstr "Sélectionnez comment gérer l'occupation" # File: project/readers/read_cif.c, Line: 1188 msgid "Occupancy %s\n\t%s\n" msgstr "Occupation %s\n\t%s\n" # File: project/readers/read_cif.c, Line: 1304 msgid "Atomic coordinates: a site has an occupancy > 1.0 !\n" msgstr "Coordonnées atomiques: un site possède une occupation > 1,0 !\n" # File: project/readers/read_cif.c, Line: 1368 msgid "reaction or trajectory" msgstr "réaction ou trajectoire" # File: project/readers/read_cif.c, Line: 1379 msgid "CIF file is compatible with a chemical reaction: \n\t Reactants can be separated using occupancy\n" msgstr "Le fichier CIF est compatible avec une réaction chimique: \n\t Les réactifs peuvent être séparés en utilisant l'occupation\n" # File: project/readers/read_cif.c, Line: 1379 msgid "CIF file is compatible with a chemical reaction: \n\t Reactants can be separated using disorder site\n" msgstr "Le fichier CIF est compatible avec une réaction chimique: \n\t Les réactifs peuvent être séparés en utilisant le désordre du site\n" # File: project/readers/read_cif.c, Line: 1796 msgid "Lattice parameters: impossible to retrieve the '%s' parameter !\n" msgstr "Paramètres de maille: impossible de récupérer le paramètre '%s' !\n" # File: project/readers/read_cif.c, Line: 1875 msgid "Space group: no space group and no H-M symbol found !\n" msgstr "Groupe d'espace: aucun groupe d'espace et aucun symbole H-M trouvé !\n" # File: project/readers/read_cif.c, Line: 1891 msgid "Space group: no space group found, unknown H-M symbol !\n" msgstr "Groupe d'espace: aucun groupe d'espace trouvé, symbole H-M inconnu !\n" # File: project/readers/read_cif.c, Line: 1953,1983,1990 msgid "Space group: ambiguous space group setting !\n" msgstr "Groupe d'espace: paramètre de groupe d'espace ambigu !\n" # File: project/readers/read_cif.c, Line: 2047 msgid "hexagonal" msgstr "hexagonal" # File: project/readers/read_cif.c, Line: 2047 msgid "rhombohedral" msgstr "rhomboédrique" # File: project/readers/read_cif.c, Line: 2095 msgid "Space group changes between configurations !\n" msgstr "Le groupe d'espace change entre les configurations !\n" # File: project/readers/read_cif.c, Line: 2130 msgid "Symmetry position(s) in CIF file\n" msgstr "Position(s) de symétrie dans le fichier CIF\n" # File: project/readers/read_cif.c, Line: 2135 msgid "No symmetry position(s) in CIF file\n" msgstr "Aucune position de symétrie dans le fichier CIF\n" # File: project/readers/read_cif.c, Line: 2586 msgid "It seems the CIF file contains %d distinct configurations\n" msgstr "Il semble que le fichier CIF contienne %d configurations distinctes\n" # File: project/readers/read_cif.c, Line: 2591 msgid "Impossible to use symmetry positions with multiple configurations\n" msgstr "Impossible d'utiliser des positions de symétrie avec plusieurs configurations\n" # File: project/readers/read_cif.c, Line: 2602 msgid "This CIF file could be describing a trajectory or a chemical reaction.\n" msgstr "Ce fichier CIF pourrait décrire une trajectoire ou une réaction chimique.\n" # File: project/readers/read_cif.c, Line: 2610 msgid "Please select how to process the data in the CIF file" msgstr "Veuillez sélectionner comment traiter les données dans le fichier CIF" # File: project/readers/read_cif.c, Line: 2610 msgid "Select how to process data" msgstr "Sélectionnez comment traiter les données" # File: project/readers/read_cif.c, Line: 2617 msgid "This CIF file could be describing a trajectory.\n" msgstr "Ce fichier CIF pourrait décrire une trajectoire.\n" # File: project/readers/read_cif.c, Line: 2629 msgid "Select the configuration c, c ∈ [1-%d]" msgstr "Sélectionnez la configuration c, c ∈ [1-%d]" # File: project/readers/read_cif.c, Line: 2633 msgid "Please select the configuration to work on" msgstr "Veuillez sélectionner la configuration sur laquelle travailler" # File: project/readers/read_cif.c, Line: 2643 msgid "Working on configuration N°%d\n" msgstr "Travail sur la configuration N°%d\n" # File: project/readers/read_coord.c, Line: 416 msgid "Error(s) trying to build crystal using the CIF file parameters !\n" "This usually comes from: \n" "\t - incorrect space group description\n" "\t - incomplete space group description\n" "\t - missing space group setting\n" "\t - incorrect space group setting\n" msgstr "Erreur(s) en essayant de construire le cristal en utilisant les paramètres du fichier CIF !\n" "Cela vient généralement de: \n" "\t - description incorrecte du groupe d'espace\n" "\t - description incomplète du groupe d'espace\n" "\t - paramètre de groupe d'espace manquant\n" "\t - paramètre de groupe d'espace incorrect\n" # File: project/readers/read_coord.c, Line: 427 msgid "Error(s) trying to build crystal using the CIF file parameters !\n" "Information lead to change(s) between each configuration\n" msgstr "Erreur(s) en essayant de construire Crystal en utilisant les paramètres du fichier CIF !\n" "Les informations entraînent des changements entre chaque configuration\n" # File: project/readers/read_coord.c, Line: 434 msgid "Potential issue(s) when building crystal !\n" "This usually comes from: \n" "\t - incorrect space group description\n" "\t - incomplete space group description\n" "\t - missing space group setting\n" "\t - incorrect space group setting\n" msgstr "Problème(s) potentiel(s) lors de la construction de cristaux !\n" "Cela vient généralement de: \n" "\t - description incorrecte du groupe d'espace\n" "\t - description incomplète du groupe d'espace\n" "\t - paramètre de groupe d'espace manquant\n" "\t - paramètre de groupe d'espace incorrect\n" # File: project/readers/read_coord.c, Line: 146 msgid "Wrong file format: error at step %d !\n" "Wrong file format: record %s on line %d is corrupted !" msgstr "Format de fichier incorrect: erreur au pas %d !\n" "Mauvais format de fichier: l'enregistrement %s sur la ligne %d est corrompu !" # File: project/readers/read_coord.c, Line: 152 msgid "Wrong file format: error at step %d, atom %d !\n" "Wrong file format: record %s on line %d is corrupted !" msgstr "Format de fichier incorrect: erreur au pas %d, atome %d !\n" "Mauvais format de fichier: l'enregistrement %s sur la ligne %d est corrompu !" # File: project/readers/read_coord.c, Line: 193 msgid "Use dummy atom(s) for unknown %s species ?" msgstr "Utiliser des atomes factices pour l'espèce %s inconnue ?" # File: project/readers/read_coord.c, Line: 194 msgid "Use dummy atom(s) ?" msgstr "Utiliser des atomes factices ?" # File: project/readers/read_coord.c, Line: 198 msgid "Using dummy atom(s) for unknown %s species" msgstr "Utilisation d'atomes factices pour l'espèce %s inconnue" # File: project/readers/read_coord.c, Line: 205 msgid "No dummy atom(s) for unknown %s species" msgstr "Aucun atome(s) factice(s) pour l'espèce %s inconnue" # File: project/readers/read_coord.c, Line: 282 msgid "Error - cannot get file statistics !\n" msgstr "Erreur - impossible d'obtenir les statistiques du fichier !\n" # File: project/readers/read_coord.c, Line: 290 msgid "Error - cannot open coordinates file !\n" msgstr "Erreur - impossible d'ouvrir le fichier de coordonnées !\n" # File: project/readers/read_coord.c, Line: 442 msgid "\nAnother model will be built using included symmetry positions\n" msgstr "\nUn autre modèle sera construit en utilisant les positions de symétrie incluses\n" # File: project/readers/read_coord.c, Line: 475,509 msgid "Number of species" msgstr "Nombre d'espèces" # File: project/readers/read_coord.c, Line: 483 msgid "Dummy %s" msgstr "Factice %s" # File: project/readers/read_coord.c, Line: 496 msgid "For species %s, radius is equal to 0.0 !\n" msgstr "Pour l'espèce %s, le rayon est égal à 0.0 !\n" # File: project/readers/read_hist.c, Line: 78,85 msgid "Wrong file format - record ii line is corrupted !" msgstr "Mauvais format de fichier - la ligne d'enregistrement ii est corrompue !" # File: project/readers/read_hist.c, Line: 394 msgid "Cannot find species with a mass of %f !" msgstr "Impossible de trouver une espèce avec une masse de %f !" # File: project/readers/read_isaacs.c, Line: 795 msgid "The number of atoms in the XML file\n" "is not the same that the number of atoms\n" "in the file containing the coordinates.\n" "Other information from the XML file\n" "will be ignored\n" msgstr "Le nombre d'atomes dans le fichier XML\n" "n'est pas le même que le nombre d'atomes\n" "dans le fichier contenant les coordonnées.\n" "Les autres informations du fichier XML\n" "seront ignorées\n" # File: project/readers/read_isaacs.c, Line: 818 msgid "The number of chemical species in the XML file\n" "is not the same that the number of chemical species\n" "in the file that contains the atomic coordinates.\n" msgstr "Le nombre d'espèces chimiques dans le fichier XML\n" "n'est pas le même que le nombre d'espèces chimiques\n" "dans le fichier qui contient les coordonnées atomiques.\n" # File: project/readers/read_isaacs.c, Line: 129 msgid " I.S.A.A.C.S. v1.0 XML file " msgstr " I.S.A.A.C.S. Fichier XML v1.0 " # File: project/readers/read_isaacs.c, Line: 141 msgid " Data format and file containing the configuration(s) " msgstr " Format des données et fichier contenant la ou les configurations " # File: project/readers/read_isaacs.c, Line: 196 msgid " Chemistry information " msgstr " Informations chimiques " # File: project/readers/read_isaacs.c, Line: 270 msgid " Box information " msgstr " Informations sur la boîte " # File: project/readers/read_isaacs.c, Line: 376 msgid " PBC information " msgstr " Informations sur les CLP " # File: project/readers/read_isaacs.c, Line: 412 msgid " Cutoffs information " msgstr " Informations sur les rayons de coupure " # File: project/readers/read_isaacs.c, Line: 451 msgid " Time series " msgstr " Séries chronologiques " # File: project/readers/read_isaacs.c, Line: 469 msgid " Apply project " msgstr " Valider le projet " # File: project/readers/read_isaacs.c, Line: 753 msgid "The %s\n %s\n from the XML file does not exist\n" msgstr "Le %s\n %s\n du fichier XML n'existe pas\n" # File: project/readers/read_isaacs.c, Line: 761 msgid "Unknown data format in XML file\n" msgstr "Format de données inconnu dans le fichier XML\n" # File: project/readers/read_isaacs.c, Line: 1428 msgid "Impossible to open the ISAACS project file (XML) file\n" msgstr "Impossible d'ouvrir le fichier du fichier projet ISAACS (XML)\n" # File: project/readers/read_isaacs.c, Line: 1431 msgid "The file is not a valid ISAACS project file (XML) file\n" msgstr "Le fichier n'est pas un fichier de projet ISAACS (XML) valide.\n" # File: project/readers/read_isaacs.c, Line: 1434 msgid "The ISAACS project file (XML) file is incomplete\n" msgstr "Le fichier de projet ISAACS (XML) est incomplet\n" # File: project/readers/read_isaacs.c, Line: 1437 msgid "Problem(s) in the <data> section of the ISAACS project file (XML)\n" msgstr "Problème(s) dans la section <data> du fichier de projet ISAACS (XML)\n" # File: project/readers/read_isaacs.c, Line: 1440 msgid "Problem(s) in the <chemistry> section of the ISAACS project file (XML)\n" msgstr "Problème(s) dans la sectop, <chemistry> du fichier de projet ISAACS (XML)\n" # File: project/readers/read_isaacs.c, Line: 1443 msgid "Problem(s) in the <element> section of the ISAACS project file (XML)\n" msgstr "Problème(s) dans la section <element> du fichier de projet ISAACS (XML)\n" # File: project/readers/read_isaacs.c, Line: 1446 msgid "Problem(s) in the <box> section of the ISAACS project file (XML)\n" msgstr "Problème(s) dans la section <box> du fichier de projet ISAACS (XML)\n" # File: project/readers/read_isaacs.c, Line: 1449 msgid "Problem(s) in the <pbc> section of the ISAACS project file (XML)\n" msgstr "Problème(s) dans la section <pbc> du fichier de projet ISAACS (XML)\n" # File: project/readers/read_isaacs.c, Line: 1452 msgid "Problem(s) in the <cutoffs> section of the ISAACS project file (XML)\n" msgstr "Problème(s) dans le <seuils> section du fichier de projet ISAACS (XML)\n" # File: project/readers/read_isaacs.c, Line: 1455 msgid "Problem(s) in the <time-series> section of the ISAACS project file (XML)\n" msgstr "Problème(s) dans la section <time-series> du fichier de projet ISAACS (XML)\n" # File: project/readers/read_npt.c, Line: 97 msgid "Wrong file format - %d steps in coordinates file" msgstr "Format de fichier incorrect – %d pas dans le fichier de coordonnées" # File: project/readers/read_npt.c, Line: 98 msgid "Wrong file format - %d steps found in cell file" msgstr "Format de fichier incorrect: %d pas trouvées dans le fichier de cellule" # File: project/readers/read_npt.c, Line: 122,130,138,161,169,177 msgid "Wrong file format - error at step %d !" msgstr "Format de fichier incorrect - erreur au pas %d !" # File: project/readers/read_pdb.c, Line: 124 msgid "Wrong file format - record %d on line %d is corrupted !" msgstr "Mauvais format de fichier - l'enregistrement %d sur la ligne %d est corrompu !" # File: project/readers/read_trj.c, Line: 179 # File: project/readers/read_vas.c, Line: 167 msgid "Error - chemical species changes between steps %d and %d, for atom %d !" msgstr "Erreur : l'espèce chimique change entre les pas %d et %d, pour l'atome %d !" # File: opengl/glview.c, Line: 1826 msgid "Impossible to initialize the OpenGL 3D rendering ! \n %s\n" msgstr "Impossible d'initialiser le rendu 3D OpenGL ! \n %s\n" # File: opengl/ogl_shading.c, Line: 110 msgid "Compilation failure in %s shader:\n%s" msgstr "Échec de compilation dans le shader %s:\n%s" # File: opengl/win/w_coord.c, Line: 959 # File: opengl/win/w_search.c, Line: 999 # File: opengl/win/w_volumes.c, Line: 706,870 msgid "fragment" msgstr "fragment" # File: opengl/edit/atom_action.c, Line: 587 msgid "Error: at= %d, sp= %d, l= %d, geo_id= %d, edit -> coord -> ntg[%d][%d]= %d" msgstr "Erreur: at= %d, sp= %d, l= %d, geo_id= %d, edit -> coord -> ntg[%d][%d]= %d" # File: opengl/edit/atom_action.c, Line: 1121 # File: opengl/edit/atom_search.c, Line: 269 msgid "replaced" msgstr "remplacé(s)" # File: opengl/edit/atom_action.c, Line: 1121 # File: opengl/edit/atom_search.c, Line: 269 msgid "removed" msgstr "supprimé(s)" # File: opengl/edit/atom_action.c, Line: 1121 # File: opengl/edit/atom_search.c, Line: 269 msgid "inserted" msgstr "inséré(s)" # File: opengl/edit/atom_action.c, Line: 1138 msgid "No atoms to be %s !" msgstr "Aucun atome ne doit être %s !" # File: opengl/edit/atom_action.c, Line: 1144 # File: opengl/win/popup.c, Line: 681 msgid "%d atom(s) removed !\n%d atom(s) inserted !" msgstr "%d atome(s) supprimé(s) !\n%d atome(s) inséré(s) !" # File: opengl/edit/atom_action.c, Line: 1148 msgid "%d atom(s) %s !" msgstr "%d atome(s) %s !" # File: opengl/edit/atom_action.c, Line: 2064 msgid "Nothing to be done, check selection !" msgstr "Rien à faire, vérifiez la sélection !" # File: opengl/edit/atom_action.c, Line: 2068 msgid "Nothing to be done, check selection and/or MSD !" msgstr "Rien à faire, vérifiez la sélection et/ou le DCM !" # File: opengl/edit/atom_edit.c, Line: 207 msgid "To preserve atom(s) displacement(s) press the 'Apply' button\n" "Otherwise initial atom positions will be restored ...\n" "\t\t\t Are you sure to leave ?" msgstr "Pour conserver le(s) déplacement(s) des atomes, appuyez sur le bouton « Appliquer »\n" "Sinon les positions initiales des atomes seront restaurées...\n" "\t\t\t Etes-vous sûr de quitter ?" # File: opengl/edit/atom_edit.c, Line: 60 # File: opengl/win/w_search.c, Line: 3578 msgid "Move" msgstr "Déplacer" # File: opengl/edit/atom_edit.c, Line: 60 # File: opengl/win/popup.c, Line: 3703 # File: opengl/win/w_library.c, Line: 1139 # File: opengl/win/w_search.c, Line: 2904,3579 msgid "Replace" msgstr "Remplacer" # File: opengl/edit/atom_edit.c, Line: 60 # File: opengl/win/popup.c, Line: 3702 # File: opengl/win/w_search.c, Line: 2904,3580,4104 msgid "Remove" msgstr "Supprimer" # File: opengl/edit/atom_edit.c, Line: 60 # File: opengl/win/popup.c, Line: 4201 # File: opengl/win/w_library.c, Line: 1139 # File: opengl/win/w_search.c, Line: 3581 msgid "Insert" msgstr "Insérer" # File: opengl/edit/atom_edit.c, Line: 60 msgid "Random Move" msgstr "Déplacement Aléatoire" # File: opengl/edit/atom_edit.c, Line: 61 msgid "All Non-selected Atoms" msgstr "Tous les Atomes Non-sélectionnés" # File: opengl/edit/atom_edit.c, Line: 61 msgid "All Selected Atoms" msgstr "Tous les Atomes Sélectionnés" # File: calc/cpmd/cpmd_init.c, Line: 158 # File: calc/dl_poly/dlp_edit.c, Line: 2466 # File: opengl/edit/atom_edit.c, Line: 61 msgid "All Atoms" msgstr "Tous les Atomes" # File: opengl/edit/atom_edit.c, Line: 206 msgid "Leaving without saving ?" msgstr "Partir sans sauvegarder ?" # File: opengl/edit/atom_edit.c, Line: 282 # File: opengl/win/m_rep.c, Line: 579 msgid "Reset" msgstr "Réinitialiser" # File: opengl/edit/atom_edit.c, Line: 282 msgid "Reset and get back to initial coordinates ?\n This will affect all atoms !" msgstr "Réinitialiser et revenir aux coordonnées initiales ?\n Cela affectera tous les atomes !" # File: opengl/edit/atom_edit.c, Line: 421 # File: workspace/workspace.c, Line: 384 msgid "Model edition - %s" msgstr "Édition du modèle - %s" # File: opengl/edit/atom_move.c, Line: 1201 msgid "On %s axis:" msgstr "Sur l'axe %s:" # File: opengl/edit/atom_move.c, Line: 1230 msgid "Select the axis to be used: " msgstr "Sélectionnez l'axe à utiliser: " # File: opengl/edit/atom_move.c, Line: 1232 msgid "Model axis" msgstr "Axe du modèle" # File: opengl/edit/atom_move.c, Line: 1233 msgid "Eye (viewer) axis" msgstr "Axe de l'oeil (spectateur)" # File: opengl/edit/atom_move.c, Line: 1237 # File: opengl/win/m_atoms.c, Line: 364,443,709,806 # File: opengl/win/popup.c, Line: 3697 # File: opengl/win/w_atoms.c, Line: 362 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 537,892,997 # File: opengl/win/w_rings.c, Line: 413 msgid "Show" msgstr "Montrer" # File: opengl/edit/atom_move.c, Line: 1247 # File: opengl/edit/atom_search.c, Line: 332 msgid "Reset transformation(s)" msgstr "Réinitialiser la ou les transformations" # File: opengl/edit/atom_object.c, Line: 729 msgid "From selection" msgstr "De la sélection" # File: opengl/edit/atom_object.c, Line: 791,878 # File: opengl/win/w_search.c, Line: 859,3080 msgid "%d-fold" msgstr "%d-coordonné" # File: calc/cpmd/cpmd_init.c, Line: 154 # File: opengl/edit/atom_object.c, Line: 795,882 # File: opengl/win/w_search.c, Line: 859 msgid "Isolated" msgstr "Isolé" # File: opengl/edit/atom_object.c, Line: 911 msgid "All %s - atom(s)" msgstr "Tous les %s - atome(s)" # File: opengl/edit/atom_object.c, Line: 934 # File: opengl/win/initcoord.c, Line: 534 # File: opengl/win/w_search.c, Line: 875 msgid "Fragment N°%d" msgstr "Fragment N°%d" # File: calc/dl_poly/dlp_field.c, Line: 2640 # File: opengl/edit/atom_object.c, Line: 938 # File: opengl/win/initcoord.c, Line: 538 # File: opengl/win/w_search.c, Line: 879,1069 msgid "Molecule N°%d" msgstr "Molécule N°%d" # File: opengl/edit/atom_object.c, Line: 1026 msgid "All non-selected atom(s) from: %s" msgstr "Tous les atomes non-sélectionnés de: %s" # File: opengl/edit/atom_object.c, Line: 1030 msgid "All selected atom(s) from: %s" msgstr "Tous les atomes sélectionnés parmi: %s" # File: opengl/edit/atom_object.c, Line: 1034 msgid "All atom(s) from: %s" msgstr "Tous les atomes de: %s" # File: opengl/edit/atom_object.c, Line: 1306 # File: opengl/win/w_search.c, Line: 2435,2687 msgid "Empty position" msgstr "Postion vide" # File: opengl/edit/atom_object.c, Line: 1310 msgid "%s atom" msgstr "Atome %s" # File: opengl/edit/atom_search.c, Line: 114 msgid " Move atom(s)" msgstr " Déplacer les atomes" # File: opengl/edit/atom_search.c, Line: 114 msgid " Replace atom(s)" msgstr " Remplacer les atomes" # File: opengl/edit/atom_search.c, Line: 114 msgid " Remove atom(s)" msgstr " Supprimer les atomes" # File: opengl/edit/atom_search.c, Line: 114 msgid " Insert atom(s)" msgstr " Insérer un ou plusieurs atomes" # File: opengl/edit/atom_search.c, Line: 138 msgid "Extract/rebuild the object(s) to be moved, ie. cut/clean bonds with nearest neighbor(s)" msgstr "Extraire/reconstruire le ou les objets à déplacer, c'est-à-dire couper/nettoyer les liens avec le(s) voisin(s) le(s) plus proche(s)" # File: opengl/edit/atom_search.c, Line: 146 msgid "Recompute bonding information using bond cutoffs" msgstr "Recalculer les informations de liaison à l'aide des rayons de coupure" # File: opengl/edit/atom_search.c, Line: 157 msgid "Repeat n times, n= " msgstr "Répétez n fois, n= " # File: opengl/edit/atom_search.c, Line: 269 msgid "moved" msgstr "déplacer" # File: opengl/edit/atom_search.c, Line: 269 msgid "moved randomly" msgstr "déplacer au hasard" # File: opengl/edit/atom_search.c, Line: 269 msgid "passivated" msgstr "passiver" # File: opengl/edit/atom_search.c, Line: 277 msgid "Select the object(s) to be %s in: " msgstr "Sélectionnez le(s) objet(s) à %s: " # File: opengl/edit/atom_search.c, Line: 287 msgid "Atom selection:" msgstr "Sélection d'atomes:" # File: opengl/edit/atom_search.c, Line: 287 msgid "Translate:" msgstr "Translation:" # File: opengl/edit/atom_search.c, Line: 287 msgid "Rotate:" msgstr "Rotation:" # File: opengl/edit/atom_search.c, Line: 313 msgid "Normally" msgstr "Normalement" # File: opengl/edit/atom_search.c, Line: 314 msgid "Randomly" msgstr "Au Hasard" # File: opengl/edit/atom_search.c, Line: 320 msgid "Replace: " msgstr "Remplacer: " # File: opengl/edit/atom_search.c, Line: 320 msgid "Remove: " msgstr "Supprimer: " # File: opengl/edit/cbuild_action.c, Line: 1209 msgid "%s size (%f Å) is bigger than the min(a,b,c)\n" "If you build the crystal the final structure is likely to be crowded !\n" "Continue anyway ?" msgstr "La dimension %s (%f Å) est supérieure au min(a,b,c)\n" "Si vous construisez le cristal, la structure finale risque d’être encombrée !\n" "Continuer quand même ?" # File: opengl/edit/cbuild_action.c, Line: 1772 msgid "The crystal will be created however some objects might be missing,\n" "Occupancy is too low compared to the number of site(s) per cell.\n\n" "To build a crystal matching the defined occupancy:\n" "\t 1) If you are trying to read a CIF file, use the crystal builder instead.\n" "\t 2) Modify the occupancy set-up to 'Completely random'.\n" "\t 3) Increase the number of unit cells up to get rid of this message." msgstr "Le cristal sera créé mais certains objets pourraient manquer,\n" "L'occupation est trop faible par rapport au nombre de site(s) par cellule.\n\n" "Pour construire un cristal correspondant à l'occupation définie:\n" "\t 1) Si vous essayez de lire un fichier CIF, utilisez plutôt le constructeur de cristaux.\n" "\t 2) Modifiez la configuration d'occupation sur « Complètement aléatoire ».\n" "\t 3) Augmentez le nombre de cellules unitaires jusqu'à supprimer ce message." # File: opengl/edit/cbuild_action.c, Line: 356 msgid "Please describe properly the lattice parameters" msgstr "Veuillez décrire correctement les paramètres de maille" # File: opengl/edit/cbuild_action.c, Line: 1212 msgid "This object might be too big !" msgstr "Cet objet est peut-être trop gros !" # File: opengl/edit/cbuild_action.c, Line: 1287 msgid "Impossible to build crystal: check occupancy !" msgstr "Impossible de construire le cristal: vérifiez l'occupation !" # File: opengl/edit/cbuild_action.c, Line: 1325 msgid "Impossible to build crystal: site total occupancy > 1.0" msgstr "Impossible de construire le cristal: occupation totale du site > 1,0" # File: opengl/edit/cbuild_action.c, Line: 1357 msgid "Impossible to build crystal: empty site(s) only !" msgstr "Impossible de construire le cristal: site(s) vide(s) uniquement !" # File: opengl/edit/cbuild_action.c, Line: 1489 msgid "Inter-object distance(s) < 0.5 Ang. !" msgstr "Distance(s) inter-objets < 0,5 Ang. !" # File: opengl/edit/cbuild_action.c, Line: 1490 msgid "Inter-object distance(s) < 0.5 Å !\n\n\t\tContinue and leave a single object at each position ?" msgstr "Distance(s) inter-objets < 0,5 Å !\n\n\t\tContinuer et laisser un seul objet à chaque position ?" # File: opengl/edit/cbuild_action.c, Line: 1724 # File: opengl/edit/cbuild_edit.c, Line: 1432 msgid "Build (new project)" msgstr "Construire (nouveau projet)" # File: opengl/edit/cbuild_edit.c, Line: 1203 msgid "Sites are filled randomly in the initial cell only,\n" "then the initial cell is simply replicated." msgstr "Les sites sont remplis aléatoirement dans la cellule initiale uniquement,\n" "la cellule initiale est alors simplement répliquée." # File: opengl/edit/cbuild_edit.c, Line: 1206 msgid "Sites are filled randomly for the entire network,\n" "the final crystal is considered as a whole." msgstr "Les sites sont remplis aléatoirement pour l'ensemble du réseau,\n" "le cristal final est considéré dans son ensemble." # File: opengl/edit/cbuild_edit.c, Line: 1252 msgid "Instead of ensuring that sites are filled by a single object,\n" "this allows object(s) to share the same crystalline position. \n" "The option above describes how filled and empty positions alternate.\n" msgstr "Au lieu de garantir que les sites soient remplis par un seul objet,\n" "cela permet aux objets de partager la même position cristalline. \n" "L'option ci-dessus décrit l'alternance des positions remplies et vides.\n" # File: opengl/edit/cbuild_edit.c, Line: 1271 msgid "\tLowest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊8.75⌋ = 8\n" "\tHighest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌈5.39⌉ = 6\n" "\tNearest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊6.82⌉ = 7\t\t and\t ⌊4.31⌉ = 4\n" "\n\t\t%s\n" msgstr "\tEntier le plus petit : \n" "\t\t Occupation %s\n\t\t\t ex: ⌊8,75⌋ = 8\n" "\tEntier le plus élevé : \n" "\t\t Occupation %s\n\t\t\t ex: ⌈5,39⌉ = 6\n" "\tEntier le plus proche : \n" "\t\t Occupation %s\n\t\t\t ex: ⌊6,82⌉ = 7 et ⌊4,31⌉ = 4\n" "\n\t\t%s\n" # File: calc/cpmd/cpmd_init.c, Line: 155 # File: opengl/edit/cbuild_edit.c, Line: 102 # File: opengl/win/w_crystal.c, Line: 75 msgid "Triclinic" msgstr "Triclinique" # File: calc/cpmd/cpmd_init.c, Line: 155 # File: opengl/edit/cbuild_edit.c, Line: 103 # File: opengl/win/w_crystal.c, Line: 75 msgid "Monoclinic" msgstr "Monoclinique" # File: opengl/edit/cbuild_edit.c, Line: 1290 msgid "Othorhombic" msgstr "Orthorhombique" # File: calc/cpmd/cpmd_init.c, Line: 155 # File: opengl/edit/cbuild_edit.c, Line: 105 # File: opengl/win/w_crystal.c, Line: 75 msgid "Tetragonal" msgstr "Tétragonal" # File: calc/cpmd/cpmd_init.c, Line: 154 # File: opengl/edit/cbuild_edit.c, Line: 106 # File: opengl/win/w_crystal.c, Line: 75 msgid "Trigonal" msgstr "Trigonal" # File: calc/cpmd/cpmd_init.c, Line: 154 # File: opengl/edit/cbuild_edit.c, Line: 107 # File: opengl/win/w_crystal.c, Line: 75 msgid "Hexagonal" msgstr "Hexagonal" # File: calc/cpmd/cpmd_init.c, Line: 154 # File: opengl/edit/cbuild_edit.c, Line: 108 msgid "Cubic" msgstr "Cubique" # File: opengl/edit/cbuild_edit.c, Line: 940,941,942,943,946 # File: opengl/edit/cbuild_info.c, Line: 99 msgid "Primitive " msgstr "Primitif " # File: opengl/edit/cbuild_edit.c, Line: 941 # File: opengl/edit/cbuild_info.c, Line: 87 msgid "Base-centered" msgstr "Base Centrée" # File: opengl/edit/cbuild_edit.c, Line: 942 # File: opengl/edit/cbuild_info.c, Line: 95 msgid "Body-centered" msgstr "Corps Centré" # File: opengl/edit/cbuild_edit.c, Line: 942 # File: opengl/edit/cbuild_info.c, Line: 91 msgid "Face-centered" msgstr "Face Centrée" # File: opengl/edit/cbuild_edit.c, Line: 944 msgid "Hexagonal Axes" msgstr "Axes Hexagonaux" # File: opengl/edit/cbuild_edit.c, Line: 944 msgid "Rhombohedral Axes" msgstr "Axes Rhomboédriques" # File: opengl/edit/cbuild_edit.c, Line: 104 msgid "abc\nα = β = 90° ≠ ɣ\n\tor\nα = ɣ = 90° ≠ β" msgstr "abc\nα = β = 90° ≠ ɣ\n\tou\nα = ɣ = 90° ≠ β" # File: opengl/edit/cbuild_edit.c, Line: 107 msgid "a = bc\nα = β = 90° and ɣ = 120°" msgstr "a = bc\nα = β = 90° et ɣ = 120°" # File: opengl/edit/cbuild_edit.c, Line: 408 msgid "Vectors" msgstr "Vecteurs" # File: opengl/edit/cbuild_edit.c, Line: 747 msgid "%s group info" msgstr "Informations sur le groupe %s" # File: opengl/edit/cbuild_edit.c, Line: 889 msgid "Cannot read space group *.sgl file ?!\nPlease check the program library !" msgstr "Impossible de lire le fichier *.sgl du groupe d'espace ?!\nVeuillez vérifier la bibliothèque du logiciel !" # File: opengl/edit/cbuild_edit.c, Line: 1198 msgid "Random for the initial cell only" msgstr "Aléatoire pour la cellule initiale uniquement" # File: opengl/edit/cbuild_edit.c, Line: 1199 msgid "Random cell by cell" msgstr "Aléatoire cellule par cellule" # File: opengl/edit/cbuild_edit.c, Line: 1200 msgid "Completely random" msgstr "Complètement aléatoire" # File: opengl/edit/cbuild_edit.c, Line: 1201 msgid "Successively" msgstr "Successivement" # File: opengl/edit/cbuild_edit.c, Line: 1202 msgid "Alternatively" msgstr "Alternativement" # File: opengl/edit/cbuild_edit.c, Line: 1205 msgid "Sites are filled randomly for each cell, cell by cell separately." msgstr "Les sites sont remplis de manière aléatoire pour chaque cellule,\ncellule par cellule séparément." # File: opengl/edit/cbuild_edit.c, Line: 1208 msgid "Sites are filled successively: all object(s) A, then all object(s) B ... " msgstr "Les sites sont remplis successivement: tous les objets A, puis tous les objets B ... " # File: opengl/edit/cbuild_edit.c, Line: 1209 msgid "Sites are filled alternatively: object A, object B, object A ..." msgstr "Les sites sont remplis alternativement: objet A, objet B, objet A ..." # File: opengl/edit/cbuild_edit.c, Line: 1247 msgid "Allow overlapping" msgstr "Autoriser le chevauchement" # File: opengl/edit/cbuild_edit.c, Line: 1258 msgid "Occupancy rounding:" msgstr "Arrondi des taux d'occupation:" # File: opengl/edit/cbuild_edit.c, Line: 1291 msgid "Crystal builder - %s" msgstr "Constructeur de cristaux - %s" # File: opengl/edit/cbuild_edit.c, Line: 1291 # File: opengl/win/w_crystal.c, Line: 776 msgid "Crystal builder" msgstr "Constructeur de cristaux" # File: opengl/edit/cbuild_edit.c, Line: 1309 msgid "Crystal system:" msgstr "Système cristallin:" # File: opengl/edit/cbuild_edit.c, Line: 1321 msgid "Bravais lattice:" msgstr "Réseau de Bravais:" # File: opengl/edit/cbuild_edit.c, Line: 1326 # File: opengl/edit/cbuild_info.c, Line: 555 msgid "Lattice constraints: " msgstr "Contraintes de maille: " # File: opengl/edit/cbuild_edit.c, Line: 1340 msgid "Space group:" msgstr "Groupe d'espace:" # File: opengl/edit/cbuild_edit.c, Line: 1355 msgid "Settings:" msgstr "Paramètres:" # File: calc/cp2k/cp2k_init.c, Line: 182 # File: opengl/edit/cbuild_edit.c, Line: 1383 msgid "Lattice parameters:" msgstr "Paramètres de maille:" # File: opengl/edit/cbuild_edit.c, Line: 1402 msgid "Cell(s):" msgstr "Cellule(s):" # File: opengl/edit/cbuild_edit.c, Line: 1415 msgid " Wrap all atoms in the unit cell after building" msgstr " Remettre tous les atomes dans la cellule unitaire après la construction" # File: opengl/edit/cbuild_edit.c, Line: 1416 msgid " Show/Hide clones after building" msgstr " Afficher/Masquer les clones après la construction" # File: opengl/edit/cbuild_edit.c, Line: 1421 msgid "Add object(s):" msgstr "Ajouter un ou plusieurs objets:" # File: opengl/edit/cbuild_edit.c, Line: 1425 # File: opengl/win/w_search.c, Line: 3581 msgid "Occupancy" msgstr "Occupation" # File: opengl/edit/cbuild_edit.c, Line: 1432 # File: opengl/win/w_crystal.c, Line: 784 msgid "Build" msgstr "Construire" # File: opengl/edit/cbuild_info.c, Line: 103 msgid "Rhombohedral" msgstr "Rhomboédrique" # File: opengl/edit/cbuild_info.c, Line: 366 # File: opengl/win/m_map.c, Line: 679 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 892,997 # File: opengl/win/w_measures.c, Line: 491,492,493 # File: opengl/win/w_rings.c, Line: 413 msgid "Id." msgstr "Id." # File: calc/cp2k/cp2k_init.c, Line: 173 # File: calc/dl_poly/dlp_field.c, Line: 924 # File: calc/dl_poly/dlp_mol.c, Line: 761 # File: opengl/edit/cbuild_info.c, Line: 366 msgid "Multiplicity" msgstr "Multiplicité" # File: opengl/edit/cbuild_info.c, Line: 366 msgid "Letter" msgstr "Lettre" # File: opengl/edit/cbuild_info.c, Line: 366 # File: opengl/win/w_crystal.c, Line: 793 msgid "Symmetry" msgstr "Symétrie" # File: calc/cpmd/cpmd_restart.c, Line: 200 # File: opengl/edit/cbuild_info.c, Line: 366 msgid "Coordinates" msgstr "Coordonnées" # File: opengl/edit/cbuild_info.c, Line: 498 msgid "%s info" msgstr "%s informations" # File: opengl/edit/cbuild_info.c, Line: 516 msgid "Space group: " msgstr "Groupe d'espace: " # File: opengl/edit/cbuild_info.c, Line: 523 msgid "Number: " msgstr "Numéro: " # File: opengl/edit/cbuild_info.c, Line: 537 msgid "Crystal system: " msgstr "Système cristallin: " # File: opengl/edit/cbuild_info.c, Line: 547 msgid "Bravais lattice: " msgstr "Réseau de Bravais: " # File: opengl/edit/cbuild_info.c, Line: 571 msgid "Setting(s): " msgstr "Paramètres): " # File: opengl/edit/cbuild_info.c, Line: 595 msgid "Wyckoff position(s): " msgstr "Position(s) de Wyckoff: " # File: opengl/edit/cell_cut.c, Line: 81 msgid "Select any object(s) A to be replaced when creating the slab, then select the object(s) B to insert in its place.\n" "When cutting into the model any bond to A with the new surface, will be passivated by B" msgstr "Sélectionnez le ou les objets A à remplacer lors de la création du volume, puis sélectionnez le ou les objets B à insérer à sa place.\n" "Lors de la découpe dans le modèle, toute liaison à A avec la nouvelle surface sera passivée par B" # File: opengl/edit/cell_cut.c, Line: 71 msgid "Cell edition - %s: surface passivation" msgstr "Édition de la cellule - %s: passivation de surface" # File: opengl/edit/cell_cut.c, Line: 116 msgid "- Volume: " msgstr "- Volume: " # File: opengl/edit/cell_cut.c, Line: 123 msgid "- Atom(s) in slab: " msgstr "- Atome(s) dans le volume: " # File: opengl/edit/cell_cut.c, Line: 132 msgid "\t - %s atom(s) in slab: " msgstr "\t - %s atome(s) dans le volume: " # File: opengl/edit/cell_cut.c, Line: 225 msgid "- Position the center of the slab: " msgstr "- Positionner le centre du volume: " # File: opengl/edit/cell_cut.c, Line: 226,227 msgid "- Size of the slab: " msgstr "- Dimensions du volume: " # File: opengl/edit/cell_cut.c, Line: 229 msgid "- Parallelepiped angles: " msgstr "- Angles parallélépipédiques: " # File: opengl/edit/cell_cut.c, Line: 230 msgid "- Slab rotation: " msgstr "- Rotation du volume: " # File: calc/dl_poly/dlp_field.c, Line: 279 # File: opengl/edit/cell_cut.c, Line: 307 # File: opengl/win/w_measures.c, Line: 752 msgid "Angles" msgstr "Angles" # File: opengl/edit/cell_cut.c, Line: 307 msgid "Rotation" msgstr "Rotation" # File: opengl/edit/cell_cut.c, Line: 498 msgid "Cut and modify model ?\n This is irreversible !" msgstr "Couper et modifier le modèle ?\n Cela est irréversible !" # File: opengl/edit/cell_cut.c, Line: 498 msgid "Cut and create new project ?" msgstr "Couper et créer un nouveau projet ?" # File: opengl/edit/cell_cut.c, Line: 498 msgid "Cut" msgstr "Couper" # File: opengl/edit/cell_cut.c, Line: 638 msgid "Nothing to passivate the bond(s) to be broken:\nDeactivate passivating or adjust option(s) properly !" msgstr "Rien pour passiver le(s) liaison(s) à rompre:\nDésactivez la passivation ou réglez correctement les options !" # File: opengl/edit/cell_cut.c, Line: 643 msgid "The slab is empty, nothing to do !" msgstr "Le volume est vide, rien à faire !" # File: opengl/edit/cell_cut.c, Line: 666 msgid "Cut slab in the simulation box: " msgstr "Découper un volume dans la boîte de simulation: " # File: opengl/edit/cell_cut.c, Line: 670 msgid "Show/Hide slab" msgstr "Afficher/Masquer le volume" # File: opengl/edit/cell_cut.c, Line: 672 msgid "Use PBC to select atoms" msgstr "Utilisez les CLP pour sélectionner les atomes" # File: opengl/edit/cell_cut.c, Line: 674 msgid "Invert cutting (all but the slab)" msgstr "Coupe inversée (tout sauf le volume)" # File: opengl/edit/cell_cut.c, Line: 676 msgid "Export in new project" msgstr "Exporter dans un nouveau projet" # File: opengl/edit/cell_cut.c, Line: 684 msgid "Parallelepiped" msgstr "Parallélépipède" # File: opengl/edit/cell_cut.c, Line: 684 msgid "Cylinder" msgstr "Cylindre" # File: opengl/edit/cell_cut.c, Line: 684 msgid "Sphere" msgstr "Sphère" # File: opengl/edit/cell_cut.c, Line: 688 msgid "- Shape of the slab: " msgstr "- Forme du volume: " # File: opengl/edit/cell_cut.c, Line: 694 msgid "Passivate surface" msgstr "Passiver la surface" # File: calc/cp2k/cp2k_init.c, Line: 802 # File: opengl/edit/cell_cut.c, Line: 698 msgid "Options" msgstr "Options" # File: opengl/edit/cell_cut.c, Line: 712 msgid "- Select option to tweak: " msgstr "- Sélectionnez l'option à modifier: " # File: opengl/edit/cell_cut.c, Line: 726 msgid "Slab information:" msgstr "Informations sur le volume:" # File: opengl/edit/cell_cut.c, Line: 729 msgid "- Opacity: " msgstr "- Opacité: " # File: opengl/edit/cell_cut.c, Line: 738 msgid "Select atom(s) in this slab !" msgstr "Sélectionnez le(s) atome(s) dans ce volume !" # File: opengl/edit/cell_cut.c, Line: 739 msgid "or" msgstr "ou" # File: opengl/edit/cell_cut.c, Line: 740 msgid "Cut this slab now !" msgstr "Decoupez ce volume maintenant !" # File: opengl/edit/cell_density.c, Line: 59 msgid "Volume:" msgstr "Volume:" # File: opengl/edit/cell_density.c, Line: 59 msgid "Mass density:" msgstr "Densité de masse:" # File: opengl/edit/cell_density.c, Line: 59 msgid "Number density:" msgstr "Densité numérique:" # File: opengl/edit/cell_density.c, Line: 60 msgid "atom/Å3" msgstr "atome/Å3" # File: opengl/edit/cell_density.c, Line: 120 msgid "Modify the density of the simulation box *: " msgstr "Modifier la densité de la boîte de simulation *: " # File: opengl/edit/cell_density.c, Line: 121 msgid "Homogeneous rescaling **" msgstr "Redimensionnement homogène **" # File: opengl/edit/cell_density.c, Line: 130 msgid " * Visual information will be preserved, real bonding is likely to be modified.\n" " Bond properties should be re-calculated, if required bond cutoffs should be updated." msgstr " * Les informations visuelles seront préservées, les liaisons réelles sont susceptibles d'être modifiées.\n" " Les propriétés des liaisons doivent être recalculées, et si nécessaire, les rayons de coupure mis à jour." # File: opengl/edit/cell_density.c, Line: 131 msgid "** Keep the ratios between the lattice vectors A, B and C like in the initial cell." msgstr "** Conservez les rapports entre les vecteurs de maille A, B et C comme ceux de la cellule initiale." # File: opengl/edit/cell_edit.c, Line: 48 msgid "Wrap All Atoms in" msgstr "Replacer les Atomes dans la Boîte" # File: opengl/edit/cell_edit.c, Line: 49 msgid "Shift Center" msgstr "Déplacer le Centre de la Cellule" # File: opengl/edit/cell_edit.c, Line: 50 msgid "Add Extra(s)" msgstr "Ajouter des Extras" # File: opengl/edit/cell_edit.c, Line: 51 msgid "Create Super-Cell" msgstr "Créer une Super-Cellule" # File: opengl/edit/cell_edit.c, Line: 52 msgid "Adjust Density" msgstr "Ajuster la Densité" # File: opengl/edit/cell_edit.c, Line: 53 msgid "Cut Slab" msgstr "Découper un Volume" # File: opengl/edit/cell_edit.c, Line: 54 msgid "PBC Pixels Debug" msgstr "Débogage des Pixels CLP" # File: opengl/edit/cell_edit.c, Line: 190 # File: workspace/workspace.c, Line: 388 msgid "Cell edition - %s" msgstr "Édition de cellule - %s" # File: opengl/edit/cell_extra.c, Line: 89 msgid "\tAdd extra cell(s):" msgstr "\tAjouter des cellules supplémentaires:" # File: opengl/edit/cell_extra.c, Line: 103 msgid "Create super-cell" msgstr "Créer une super-cellule" # File: opengl/edit/cell_pixel.c, Line: 259 msgid "\tSelect pixel to check, from 1 to %d:" msgstr "\tSélectionnez le pixel à vérifier, de 1 à %d:" # File: opengl/edit/cell_shift.c, Line: 500 msgid "You are about to put all the atoms back inside the model box\n" "This action is irreversible, proceed anyway ?" msgstr "Vous êtes sur le point de remettre tous les atomes du modèle dans la boîte\n" "Cette action est irréversible, continuer quand même ?" # File: opengl/edit/cell_shift.c, Line: 422 msgid "on %s axis [+/- Å]" msgstr "sur l'axe %s [+/- Å]" # File: opengl/edit/cell_shift.c, Line: 429 msgid "Lattice %s [+/- Å]" msgstr "Maille %s [+/- Å]" # File: opengl/edit/cell_shift.c, Line: 435 msgid "Length [+/- Å]" msgstr "Longueur [+/- Å]" # File: opengl/edit/cell_shift.c, Line: 441 msgid "Angle %s [+/- °]" msgstr "Angle %s [+/- °]" # File: opengl/edit/cell_shift.c, Line: 447 msgid "on %s axis [+/- °]" msgstr "sur l'axe %s [+/- °]" # File: opengl/edit/cell_shift.c, Line: 453 msgid "Radius [+/- Å]" msgstr "Rayon [+/- Å]" # File: opengl/edit/cell_shift.c, Line: 483 msgid "Shift the position of the cell center *: " msgstr "Décaler la position du centre de la cellule *: " # File: opengl/edit/cell_shift.c, Line: 485 msgid "* requires all atoms to be wrapped in the unit cell" msgstr "* nécessite que tous les atomes soient replacés dans la cellule unitaire" # File: opengl/edit/cell_shift.c, Line: 502 msgid "Wrap atomic coordinates in unit cell ?" msgstr "Replacer les coordonnées atomiques dans la cellule unitaire ?" # File: opengl/edit/cell_shift.c, Line: 565 msgid "Wrap atomic coordinates in unit cell" msgstr "Replacer les coordonnées atomiques dans la cellule unitaire" # File: opengl/edit/cell_super.c, Line: 206 msgid "You are about to change the periodicity of the 3D model," msgstr "Vous êtes sur le point de modifier la périodicité du modèle 3D," # File: opengl/edit/cell_super.c, Line: 207 msgid "this will affect the entire molecular dynamics trajectory," msgstr "cela affectera toute la trajectoire de dynamique moléculaire," # File: opengl/edit/cell_super.c, Line: 208 msgid "\tand the action is irreversible, proceed anyway ?" msgstr "\tet l'action est irréversible, continuer quand même ?" # File: opengl/edit/cell_super.c, Line: 218 msgid "Create a super-cell ?" msgstr "Créer une super-cellule ?" # File: opengl/edit/cell_super.c, Line: 325 msgid "Something went wrong, the 3D model was not updated" msgstr "Quelque chose s'est mal passé, le modèle 3D n'a pas été mis à jour" # File: opengl/win/color_box.c, Line: 366 # File: opengl/win/m_atoms.c, Line: 747 # File: opengl/win/m_back.c, Line: 92 # File: opengl/win/m_box.c, Line: 627 # File: opengl/win/m_coord.c, Line: 483 msgid "More Colors ..." msgstr "Plus de Couleurs ..." # File: opengl/win/glwindow.c, Line: 126,168,171 msgid "Analysis mode" msgstr "Mode analyse" # File: opengl/win/glwindow.c, Line: 128 msgid "Styles" msgstr "Styles" # File: opengl/win/glwindow.c, Line: 128,161 # File: opengl/win/m_tools.c, Line: 316,473 msgid "Measures" msgstr "Mesures" # File: opengl/win/glwindow.c, Line: 128 msgid "Selection mode" msgstr "Mode de sélection" # File: opengl/win/glwindow.c, Line: 128 msgid "Window management" msgstr "Gestion des fenêtres" # File: opengl/win/glwindow.c, Line: 128 msgid "Mouse mode" msgstr "Mode de la souris" # File: opengl/win/glwindow.c, Line: 129 msgid "Camera rotation" msgstr "Rotation de la caméra" # File: opengl/win/glwindow.c, Line: 129 msgid "Camera motion" msgstr "Déplacement de la caméra" # File: opengl/win/glwindow.c, Line: 129 msgid "Camera spin" msgstr "Rotation lancée" # File: opengl/win/glwindow.c, Line: 129,130 msgid "Model interaction" msgstr "Interaction avec le modèle" # File: opengl/win/glwindow.c, Line: 130 msgid "Coordinates rotation" msgstr "Rotation des coordonnées" # File: opengl/win/glwindow.c, Line: 130 msgid "Coordinates translation" msgstr "Translation des coordonnées" # File: opengl/win/glwindow.c, Line: 139 msgid "change atom(s) color map" msgstr "changer la carte des couleurs des atomes" # File: opengl/win/glwindow.c, Line: 140 msgid "change polyhedra color map" msgstr "changer la carte des couleurs des polyèdres" # File: opengl/win/glwindow.c, Line: 141 msgid "change global style to balls and sticks" msgstr "changer le style global en boules et bâtonnets" # File: opengl/win/glwindow.c, Line: 142 msgid "change global style to cylinders" msgstr "changer le style global en cylindres" # File: opengl/win/glwindow.c, Line: 143 # File: opengl/win/m_style.c, Line: 62 msgid "Spheres" msgstr "Sphères" # File: opengl/win/glwindow.c, Line: 143 msgid "change global style to spheres" msgstr "changer le style global en sphères" # File: opengl/win/glwindow.c, Line: 144 # File: opengl/win/m_style.c, Line: 66 msgid "Covalent Radii" msgstr "Rayons Covalents" # File: opengl/win/glwindow.c, Line: 144 msgid "change global style to covalent radii" msgstr "changer le style global en rayons covalents" # File: opengl/win/glwindow.c, Line: 145 # File: opengl/win/m_style.c, Line: 67 msgid "Ionic Radii" msgstr "Rayons Ioniques" # File: opengl/win/glwindow.c, Line: 145 msgid "change global style to ionic radii" msgstr "changer le style global en rayons ioniques" # File: opengl/win/glwindow.c, Line: 146 # File: opengl/win/m_style.c, Line: 68 msgid "van der Waals Radii" msgstr "Rayons de van der Waals" # File: opengl/win/glwindow.c, Line: 146 msgid "change global style to van der Waals radii" msgstr "changer le style global en rayons de van der Waals" # File: opengl/win/glwindow.c, Line: 147 # File: opengl/win/m_style.c, Line: 69 msgid "In Crystal Radii" msgstr "Rayons Cristallins" # File: opengl/win/glwindow.c, Line: 147 msgid "change global style to in crystal radii" msgstr "changer le style global en rayons cristallins" # File: opengl/win/glwindow.c, Line: 148 msgid "change global style to wireframes" msgstr "changer le style global en fils de fer" # File: opengl/win/glwindow.c, Line: 150 msgid "All measures for the selection, pressed:\n\n" "\t- 1st time: show inter-atomic distances\n" "\t- 2nd time: show inter-atomic angles\n" "\t- 3rd time: hide measures" msgstr "Toutes les mesures pour la sélection, appuyé:\n\n" "\t- 1ère fois: affiche les distances inter-atomiques\n" "\t- 2ème fois: affiche les angles inter-atomiques\n" "\t- 3ème fois: masque les mesures" # File: opengl/win/glwindow.c, Line: 153 msgid "Show measures" msgstr "Afficher les mesures" # File: calc/cpmd/cpmd_nose.c, Line: 1216 # File: calc/dl_poly/dlp_edit.c, Line: 1184 # File: calc/dl_poly/dlp_field.c, Line: 143 # File: opengl/win/glwindow.c, Line: 155 # File: opengl/win/w_library.c, Line: 194 msgid "Atom" msgstr "Atome" # File: opengl/win/glwindow.c, Line: 155 msgid "atom selection mode" msgstr "mode de sélection d'atomes" # File: opengl/win/glwindow.c, Line: 156 # File: opengl/win/m_coord.c, Line: 425 # File: opengl/win/menu_bar.c, Line: 204 msgid "Coordination" msgstr "Coordination" # File: opengl/win/glwindow.c, Line: 156 msgid "coordination sphere selection mode" msgstr "sélection par sphère de coordination" # File: opengl/win/glwindow.c, Line: 157 msgid "fragment selection mode" msgstr "sélection par fragment" # File: opengl/win/glwindow.c, Line: 158 msgid "molecule selection mode" msgstr "sélection par molécule" # File: opengl/win/glwindow.c, Line: 160 msgid "Environments" msgstr "Environnements" # File: opengl/win/glwindow.c, Line: 160 msgid "Environments window" msgstr "Fenêtre Environnements" # File: opengl/win/glwindow.c, Line: 161 msgid "Measures window" msgstr "Fenêtre Mesures" # File: opengl/win/glwindow.c, Line: 162 # File: opengl/win/m_anim.c, Line: 79,83,144 msgid "Recorder" msgstr "Enregistreur" # File: opengl/win/glwindow.c, Line: 162 msgid "Recorder window" msgstr "Fenêtre de l'enregistreur" # File: opengl/win/glwindow.c, Line: 163 msgid "Create new project" msgstr "Créer un nouveau projet" # File: opengl/win/glwindow.c, Line: 164 msgid "Enter fullscreen" msgstr "Entrez en plein écran" # File: opengl/win/glwindow.c, Line: 165 msgid "Exit fullscreen" msgstr "Quitter le plein écran" # File: opengl/win/glwindow.c, Line: 177,202 msgid "Rotate right" msgstr "Pivoter à droite" # File: opengl/win/glwindow.c, Line: 177,189,202 msgid "rotate right" msgstr "tourner à droite" # File: opengl/win/w_spiner.c, Line: 186 msgid "Right" msgstr "Droite" # File: opengl/win/glwindow.c, Line: 178,203 msgid "Rotate left" msgstr "Pivoter à gauche" # File: opengl/win/glwindow.c, Line: 178,190,203 msgid "rotate left" msgstr "tourner à gauche" # File: opengl/win/w_spiner.c, Line: 187 msgid "Left" msgstr "Gauche" # File: opengl/win/glwindow.c, Line: 179,204 msgid "Rotate up" msgstr "Pivoter vers le haut" # File: opengl/win/glwindow.c, Line: 179,191,204 msgid "rotate up" msgstr "tourner vers le haut" # File: opengl/win/w_spiner.c, Line: 189 msgid "Up" msgstr "Haut" # File: opengl/win/glwindow.c, Line: 180,205 msgid "Rotate down" msgstr "Pivoter vers le bas" # File: opengl/win/glwindow.c, Line: 180,192,205 msgid "rotate down" msgstr "tourner vers le bas" # File: opengl/win/w_spiner.c, Line: 190 msgid "Down" msgstr "Bas" # File: opengl/win/glwindow.c, Line: 182 msgid "Move right" msgstr "Vers la droite" # File: opengl/win/glwindow.c, Line: 182,207 msgid "move camera right" msgstr "déplacer la caméra vers la droite" # File: opengl/win/glwindow.c, Line: 183 msgid "Move left" msgstr "Vers la gauche" # File: opengl/win/glwindow.c, Line: 183,208 msgid "move camera left" msgstr "déplacer la caméra vers la gauche" # File: opengl/win/glwindow.c, Line: 184 msgid "Move up" msgstr "Monter" # File: opengl/win/glwindow.c, Line: 184,209 msgid "move camera up" msgstr "déplacer la caméra vers le haut" # File: opengl/win/glwindow.c, Line: 185 msgid "Move down" msgstr "Descendre" # File: opengl/win/glwindow.c, Line: 185,210 msgid "move camera down" msgstr "déplacer la caméra vers le bas" # File: opengl/win/glwindow.c, Line: 186,211 msgid "Zoom in" msgstr "Zoom avant" # File: opengl/win/glwindow.c, Line: 186,211 msgid "zoom camera in" msgstr "zoom avant de la caméra" # File: opengl/win/glwindow.c, Line: 187,212 msgid "Zoom out" msgstr "Zoom arrière" # File: opengl/win/glwindow.c, Line: 187,212 msgid "zoom camera out" msgstr "zoom arrière de la caméra" # File: opengl/win/glwindow.c, Line: 189 msgid "Spin right" msgstr "Tourner à droite" # File: opengl/win/glwindow.c, Line: 190 msgid "Spin left" msgstr "Tourner à gauche" # File: opengl/win/glwindow.c, Line: 191 msgid "Spin up" msgstr "Tourner vers le haut" # File: opengl/win/glwindow.c, Line: 192 msgid "Spin down" msgstr "Tourner vers le bas" # File: opengl/win/glwindow.c, Line: 193 msgid "Pause / restart" msgstr "Pause / redémarrage" # File: opengl/win/glwindow.c, Line: 193 msgid "pause / restart spinning" msgstr "mettre en pause / redémarrer la rotation" # File: opengl/win/glwindow.c, Line: 194 # File: opengl/win/w_record.c, Line: 167 # File: opengl/win/w_sequencer.c, Line: 491 # File: opengl/win/w_spiner.c, Line: 188 msgid "Stop" msgstr "Arrêt" # File: opengl/win/glwindow.c, Line: 194 msgid "stop spinning" msgstr "arrêter de tourner" # File: opengl/win/glwindow.c, Line: 196,214 msgid "Label / unlabel all atom(s)" msgstr "Étiqueter / désétiq. tous les atomes" # File: opengl/win/glwindow.c, Line: 197,215 msgid "Select / unselect all atom(s)" msgstr "Sélectionner / désélect. tous les atomes" # File: opengl/win/glwindow.c, Line: 198,216 msgid "Copy selection" msgstr "Copier la sélection" # File: opengl/win/glwindow.c, Line: 207 msgid "Translate right" msgstr "Translation à droite" # File: opengl/win/glwindow.c, Line: 208 msgid "Translate left" msgstr "Translation à gauche" # File: opengl/win/glwindow.c, Line: 209 msgid "Translate up" msgstr "Translation en haut" # File: opengl/win/glwindow.c, Line: 210 msgid "Translate down" msgstr "Translation en bas" # File: opengl/win/glwindow.c, Line: 217 msgid "Cut selection" msgstr "Couper la sélection" # File: opengl/win/glwindow.c, Line: 218 msgid "Paste selection" msgstr "Coller la sélection" # File: opengl/win/glwindow.c, Line: 219 msgid "Delete selection" msgstr "Supprimer la sélection" # File: opengl/win/glwindow.c, Line: 310 # File: opengl/win/m_poly.c, Line: 343,497,501 # File: opengl/win/menu_bar.c, Line: 208,212 msgid "Ring(s)" msgstr "Anneau(x)" # File: opengl/win/glwindow.c, Line: 314 # File: opengl/win/m_map.c, Line: 1165,1276 # File: opengl/win/menu_bar.c, Line: 205 # File: opengl/win/popup.c, Line: 4234 msgid "Polyhedra" msgstr "Polyèdres" # File: opengl/win/glwindow.c, Line: 490 # File: opengl/win/m_box.c, Line: 327,606 # File: opengl/win/menu_bar.c, Line: 166 # File: opengl/win/popup.c, Line: 3699 msgid "Style" msgstr "Style" # File: opengl/win/glwindow.c, Line: 492 # File: opengl/win/menu_bar.c, Line: 167 msgid "Color Maps" msgstr "Palettes de Couleurs" # File: opengl/win/glwindow.c, Line: 493 # File: opengl/win/menu_bar.c, Line: 170 msgid "Material and Light(s)" msgstr "Matériau et Éclairage(s)" # File: opengl/draw/image.c, Line: 209 # File: opengl/win/glwindow.c, Line: 494 # File: opengl/win/menu_bar.c, Line: 171 msgid "Render Image" msgstr "Générer Une Image" # File: calc/cpmd/cpmd_atoms.c, Line: 448 # File: calc/cpmd/cpmd_nose.c, Line: 468 # File: calc/dl_poly/dlp_field.c, Line: 143 # File: opengl/win/glwindow.c, Line: 525 # File: opengl/win/m_clones.c, Line: 122,185 # File: opengl/win/m_edit.c, Line: 360 # File: opengl/win/menu_bar.c, Line: 186 # File: opengl/win/popup.c, Line: 4228 # File: opengl/win/w_search.c, Line: 4000,4141 # File: calc/dl_poly/dlp_field.c, Line: 143 msgid "Atom(s)" msgstr "Atome(s)" # File: opengl/win/glwindow.c, Line: 527 # File: opengl/win/menu_bar.c, Line: 188 # File: opengl/win/popup.c, Line: 4230 msgid "Clone(s)" msgstr "Clone(s)" # File: opengl/win/glwindow.c, Line: 559 # File: opengl/win/m_rep.c, Line: 813 msgid "Projection" msgstr "Projection" # File: opengl/win/glwindow.c, Line: 560 # File: opengl/win/m_rep.c, Line: 814 msgid "Background" msgstr "Arrière-plan" # File: opengl/win/glwindow.c, Line: 565 # File: opengl/win/m_rep.c, Line: 579,781 # File: opengl/win/popup.c, Line: 4269 msgid "Reset View" msgstr "Réinitialiser la Vue" # File: opengl/win/glwindow.c, Line: 566 # File: opengl/win/m_rep.c, Line: 782 # File: opengl/win/popup.c, Line: 4270 msgid "Center Molecule" msgstr "Centrer la Molécule" # File: opengl/win/glwindow.c, Line: 568 # File: opengl/win/m_rep.c, Line: 797 # File: opengl/win/popup.c, Line: 4274 msgid "Fullscreen" msgstr "Plein écran" # File: calc/dl_poly/dlp_field.c, Line: 924 # File: opengl/win/glwindow.c, Line: 623 # File: opengl/win/menu_bar.c, Line: 271,276 msgid "Chemistry" msgstr "Chimie" # File: opengl/win/glwindow.c, Line: 1359 msgid "Sorry OpenGL is not supported !" msgstr "Désolé, OpenGL n'est pas supporté !" # File: opengl/win/glwindow.c, Line: 1376 # File: opengl/win/m_tools.c, Line: 240 # File: workspace/workspace.c, Line: 368 msgid "%s - 3D view - [%s mode]" msgstr "%s - Vue 3D - [Mode %s]" # File: opengl/win/initcoord.c, Line: 267 # File: opengl/win/m_box.c, Line: 321,325 # File: opengl/win/m_clones.c, Line: 116,120,183 # File: opengl/win/m_coord.c, Line: 294,656 # File: opengl/win/m_poly.c, Line: 234,449,453 # File: opengl/win/w_labels.c, Line: 810 # File: opengl/win/w_volumes.c, Line: 797,1106 msgid "Show/Hide" msgstr "Afficher/Masquer" # File: opengl/win/initcoord.c, Line: 483 msgid "fragment(s)" msgstr "fragment(s)" # File: opengl/win/initcoord.c, Line: 483 msgid "molecule(s)" msgstr "molécule(s)" # File: opengl/win/initcoord.c, Line: 486 msgid "Maximum number of %s per MD step: %d" msgstr "Nombre maximum de %s par pas de DM: %d" # File: opengl/win/m_anim.c, Line: 61 # File: opengl/win/menu_bar.c, Line: 280 # File: opengl/win/popup.c, Line: 4045 msgid "Animate" msgstr "Animer" # File: opengl/win/m_anim.c, Line: 66,70,142 msgid "Spin" msgstr "Rotation" # File: opengl/win/m_anim.c, Line: 72,143 msgid "Sequencer" msgstr "Séquenceur" # File: opengl/win/m_atoms.c, Line: 361 # File: opengl/win/m_atoms.c, Line: 689 msgid "Show/Hide All" msgstr "Afficher/Masquer Tout" # File: opengl/win/m_atoms.c, Line: 408,417,710 msgid "Select atom(s)" msgstr "Sélectionner un(des) Atome(s)" # File: opengl/win/m_atoms.c, Line: 447,451,807 # File: opengl/win/m_coord.c, Line: 360 # File: opengl/win/w_labels.c, Line: 778 msgid "Color(s)" msgstr "Couleurs)" # File: opengl/win/m_atoms.c, Line: 453,808 msgid "Label(s)" msgstr "Label(s)" # File: opengl/win/m_atoms.c, Line: 459,469,812 # File: opengl/win/m_bonds.c, Line: 275,286,387 msgid "Radius(ii)" msgstr "Rayon(s)" # File: opengl/win/m_atoms.c, Line: 482,492,818 msgid "Dot Size(s)" msgstr "Taille(s) de Point" # File: opengl/win/m_axis.c, Line: 134,310 msgid "Top" msgstr "Haut" # File: opengl/win/m_axis.c, Line: 134,310 msgid "Bottom" msgstr "Bas" # File: opengl/win/m_axis.c, Line: 135,285 msgid "Right Corner" msgstr "Coin Droit" # File: opengl/win/m_axis.c, Line: 135,285 msgid "Left Corner" msgstr "Coin Gauche" # File: opengl/win/m_axis.c, Line: 163,169,315 # File: opengl/win/w_colors.c, Line: 484 msgid "Center" msgstr "Centre" # File: opengl/win/m_axis.c, Line: 192 msgid " Length [ %f Å ]" msgstr " Longueur [ %f Å ]" # File: opengl/win/m_back.c, Line: 75 msgid "Gradient color" msgstr "Dégradé" # File: opengl/win/m_back.c, Line: 93 # File: opengl/win/w_colors.c, Line: 533 msgid "Gradient colors" msgstr "Couleurs du dégradé" # File: opengl/win/m_bonds.c, Line: 161 msgid "Total [ %f Å ]" msgstr "Total [ %f Å ]" # File: opengl/win/m_bonds.c, Line: 239,243,257,261,376,380 # File: opengl/win/w_bonds.c, Line: 174,188 msgid "Cylinder(s) [ %f Å ]" msgstr "Cylindre(s) [ %f Å ]" # File: opengl/win/m_bonds.c, Line: 263,382 msgid "Cylinder Radius(ii)" msgstr "Rayon(s) du cylindre" # File: opengl/win/m_bonds.c, Line: 298,309,392 msgid "Line Width(s)" msgstr "Largeur(s) de ligne" # File: opengl/win/m_bonds.c, Line: 323,328,400 msgid "Cutoffs" msgstr "Rayons de Coupure" # File: opengl/win/m_box.c, Line: 332,568 # File: opengl/win/w_axis.c, Line: 136 # File: opengl/win/w_bonds.c, Line: 113,152 # File: opengl/win/w_box.c, Line: 109 msgid "Width [ %f pts ]" msgstr "Largeur [ %f pts ]" # File: opengl/win/m_box.c, Line: 338,350,610 # File: opengl/win/w_advance.c, Line: 1319 msgid "Lines" msgstr "Lignes" # File: opengl/win/m_box.c, Line: 359,573 # File: opengl/win/w_axis.c, Line: 122 # File: opengl/win/w_bonds.c, Line: 96,134 # File: opengl/win/w_box.c, Line: 90 msgid "Radius [ %f Å ]" msgstr "Rayon [ %f Å ]" # File: opengl/win/m_box.c, Line: 578 msgid " length [ %f Å ]" msgstr " longueur [ %f Å ]" # File: opengl/win/m_clones.c, Line: 188 msgid "Bonds(s)" msgstr "Liaison(s)" # File: opengl/win/m_coord.c, Line: 304,618 msgid "Atoms in Chain(s) of Size" msgstr "Atomes de Chaîne(s) de Taille" # File: opengl/win/m_coord.c, Line: 308,618 msgid "Atoms in Ring(s) of Size" msgstr "Atomes d'Anneau(x) de Taille" # File: opengl/win/m_coord.c, Line: 429,692 # File: opengl/win/m_map.c, Line: 1242 msgid "Total(s)" msgstr "Totale(s)" # File: opengl/win/m_coord.c, Line: 430,693 # File: opengl/win/m_map.c, Line: 1244 msgid "Partial(s)" msgstr "Partielle(s)" # File: opengl/win/m_edit.c, Line: 176,182,358 msgid "Crystal Builder" msgstr "Constructeur de Cristaux" # File: opengl/win/m_edit.c, Line: 189,194,359 msgid "Cell" msgstr "Cellule" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 # File: opengl/win/m_edit.c, Line: 197 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_rings.c, Line: 413 msgid "Atoms" msgstr "Atomes" # File: opengl/win/m_edit.c, Line: 213,337 # File: opengl/win/popup.c, Line: 4263 msgid "Extract/Rebuild on Motion" msgstr "Extraire/Reconstruire après Déplacement" # File: opengl/win/m_edit.c, Line: 213,337 # File: opengl/win/popup.c, Line: 4264 msgid "Extract/Rebuild on Copy" msgstr "Extraire/Reconstruire après Copie" # File: opengl/win/m_map.c, Line: 780 msgid "Wrong file format !\n" " Expecting only a single column file\n" " with Ns x Na lines, with:\n" " - Ns = number of MD steps\n" " - Na = number of atoms" msgstr "Mauvais format de fichier !\n" " N'attendre qu'un seul fichier à colonne\n" " avec des lignes Ns x Na, avec:\n" " - Ns = nombre de pas MD\n" " - Na = nombre d'atomes" # File: opengl/win/m_map.c, Line: 235 msgid "Range: [min-max] = %f - %f" msgstr "Plage : [min-max] = %f - %f" # File: opengl/win/m_map.c, Line: 236 msgid "Use this data set ?" msgstr "Utiliser cet ensemble de données ?" # File: opengl/win/m_map.c, Line: 505 msgid "Edit color map" msgstr "Éditer la palette de couleurs" # File: opengl/win/m_map.c, Line: 519 msgid "Number of color points for the gradient: " msgstr "Nombre de points de couleur pour le dégradé: " # File: opengl/win/m_map.c, Line: 527 msgid "Initial value (overall max): " msgstr "Valeur initiale (maximum global): " # File: opengl/win/m_map.c, Line: 535 msgid "Final value (overall min): " msgstr "Valeur finale (min global): " # File: opengl/win/m_map.c, Line: 679 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_rings.c, Line: 413 msgid "MD step" msgstr "Pas de DM" # File: opengl/win/m_map.c, Line: 679 msgid "Value" msgstr "Valeur" # File: opengl/win/m_map.c, Line: 738 msgid "Edit color map data" msgstr "Éditer les données de la palette de couleurs" # File: opengl/win/m_map.c, Line: 804 msgid "Error while saving custom color map" msgstr "Erreur lors de l'enregistrement de la palette de couleurs personnalisée" # File: opengl/win/m_map.c, Line: 887 msgid "Opening custom map for " msgstr "Ouverture d'une carte personnalisée pour " # File: opengl/win/m_map.c, Line: 887 msgid "Saving custom map for " msgstr "Enregistrement de la palette personnalisée pour " # File: opengl/win/m_map.c, Line: 894 msgid "Do you want to save the color map data" msgstr "Voulez-vous enregistrer les données de la palette de couleurs" # File: opengl/win/m_map.c, Line: 895 msgid "Save color map data to file ?" msgstr "Enregistrer les données de la palette de couleurs dans un fichier ?" # File: opengl/win/m_map.c, Line: 903 msgid "Do you want to read new color map data" msgstr "Lire les données d'une nouvelle palette carte de couleurs" # File: opengl/win/m_map.c, Line: 904 msgid "Read color map data from file ?" msgstr "Lire les données de la palette de couleurs à partir du fichier ?" # File: opengl/win/m_map.c, Line: 933 msgid "Raw data (*.dat)" msgstr "Données brutes (*.dat)" # File: opengl/win/m_map.c, Line: 982 msgid "Custom color map settings" msgstr "Paramètres de la pallete de couleurs personnalisée" # File: opengl/win/m_map.c, Line: 985 msgid "Import / Save data" msgstr "Importer / Enregistrer des données" # File: opengl/win/m_map.c, Line: 985 msgid "Edit data" msgstr "Éditer les données" # File: opengl/win/m_map.c, Line: 985 msgid "Customize color map" msgstr "Personnaliser la palette de couleurs" # File: opengl/win/m_map.c, Line: 1133 msgid "Atomic Coordination" msgstr "Coordination Atomique" # File: opengl/win/m_map.c, Line: 1137 # File: opengl/win/w_coord.c, Line: 91 # File: opengl/win/w_cutoffs.c, Line: 201 msgid "Total" msgstr "Totale" # File: opengl/win/m_map.c, Line: 1138 # File: opengl/win/w_coord.c, Line: 92 msgid "Partial" msgstr "Partielle" # File: opengl/win/m_map.c, Line: 1141,1256 msgid "Force Field (DL_POLY)" msgstr "Champ de force (DL_POLY)" # File: opengl/win/m_map.c, Line: 1144,1259 # File: opengl/win/w_coord.c, Line: 1171 msgid "Custom" msgstr "Personnalisé" # File: opengl/win/m_map.c, Line: 1148,1259 msgid "Use Atom(s) Custom Map" msgstr "Palette perso. (atomes)" # File: opengl/win/m_map.c, Line: 1164 msgid "Atoms & bonds" msgstr "Atomes & Liaisons" # File: opengl/win/m_map.c, Line: 1246 msgid "Atomic Coordinations" msgstr "Coordinations atomiques" # File: opengl/win/m_map.c, Line: 1275 msgid "Atoms & Bonds" msgstr "Atomes et & Liaisons" # File: opengl/win/m_poly.c, Line: 339,347,503 msgid "Cloned Polyhedra" msgstr "Polyèdres Clonés" # File: opengl/win/m_proj.c, Line: 145,192 # File: opengl/win/m_rep.c, Line: 486 msgid "Right [1, 0, 0]" msgstr "Droite [1, 0, 0]" # File: opengl/win/m_proj.c, Line: 148,193 # File: opengl/win/m_rep.c, Line: 486 msgid "Left [-1, 0, 0]" msgstr "Gauche [-1, 0, 0]" # File: opengl/win/m_proj.c, Line: 151,194 # File: opengl/win/m_rep.c, Line: 486 msgid "Top [0, 1, 0]" msgstr "Haut [0, 1, 0]" # File: opengl/win/m_proj.c, Line: 154,195 # File: opengl/win/m_rep.c, Line: 486 msgid "Bottom [0, -1, 0]" msgstr "Bas [0, -1, 0]" # File: opengl/win/m_proj.c, Line: 157,196 # File: opengl/win/m_rep.c, Line: 486 msgid "Front [0, 0, 1]" msgstr "Avant [0, 0, 1]" # File: opengl/win/m_proj.c, Line: 160,197 # File: opengl/win/m_rep.c, Line: 486 msgid "Back [0, 0, -1]" msgstr "Arrière [0, 0, -1]" # File: opengl/win/w_advance.c, Line: 1318 msgid "Filled" msgstr "Rempli" # File: opengl/win/w_advance.c, Line: 1320 msgid "Points" msgstr "Points" # File: opengl/win/m_rep.c, Line: 76 msgid "Orthographic" msgstr "Orthographique" # File: opengl/win/m_rep.c, Line: 76 msgid "Perspective" msgstr "Perspective" # File: opengl/win/m_rep.c, Line: 427 msgid "Perspective depth" msgstr "Profond. Perspective" # File: opengl/win/m_rep.c, Line: 427 msgid "Camera depth" msgstr "Profondeur Caméra" # File: opengl/win/m_rep.c, Line: 429 msgid "Camera right/left" msgstr "Cam. droite/gauche" # File: opengl/win/m_rep.c, Line: 429 msgid "Camera up/down" msgstr "Caméra haut/bas" # File: opengl/win/m_rep.c, Line: 469 msgid "%s - OpenGL scene set-up" msgstr "%s - configuration de la scène OpenGL" # File: opengl/win/m_rep.c, Line: 478 msgid "Projection" msgstr "Projection" # File: calc/cpmd/cpmd_atoms.c, Line: 448 # File: calc/cpmd/cpmd_nose.c, Line: 468 # File: curve/cedit.c, Line: 294 # File: opengl/win/m_rep.c, Line: 487 # File: opengl/win/popup.c, Line: 3693 msgid "Select" msgstr "Sélectionner" # File: opengl/win/m_rep.c, Line: 496 msgid "Representation" msgstr "Représentation" # File: opengl/win/m_rep.c, Line: 513 msgid "OpenGL camera set-up" msgstr "Réglages de la caméra" # File: opengl/win/m_rep.c, Line: 566 msgid "∈ [C. depth, %.1f]" msgstr "∈ [Profondeur C., %.1f]" # File: opengl/win/m_rep.c, Line: 570 msgid "∈ [%.1f, P. depth*]" msgstr "∈ [%.1f, Profondeur P.*]" # File: opengl/win/m_rep.c, Line: 570 msgid "∈ [%.1f, P. depth]" msgstr "∈ [%.1f, Profondeur P.]" # File: opengl/win/m_rep.c, Line: 587 msgid "Perspective depth evaluated from the model" msgstr "Profondeur de perspective évaluée à partir du modèle" # File: opengl/win/m_style.c, Line: 64 msgid "Dots" msgstr "Points" # File: opengl/win/m_tools.c, Line: 71 msgid "Classical: DL-POLY" msgstr "Classique: DL-POLY" # File: opengl/win/m_tools.c, Line: 72 msgid "Classical: LAMMPS" msgstr "Classique: LAMMPS" # File: opengl/win/m_tools.c, Line: 73 msgid "First-Principles: CPMD" msgstr "Premiers Principes: CPMD" # File: opengl/win/m_tools.c, Line: 74 msgid "First-Principles: CP2K" msgstr "Premiers Principes: CP2K" # File: opengl/win/m_tools.c, Line: 75 msgid "QM-MM: CPMD - [Soon]" msgstr "QM-MM: CPMD - [Bientôt]" # File: opengl/win/m_tools.c, Line: 76 msgid "QM-MM: CP2K - [Soon]" msgstr "QM-MM: CP2K - [Bientôt]" # File: opengl/win/m_tools.c, Line: 78 msgid "Input(s)" msgstr "Entrée(s)" # File: opengl/win/m_tools.c, Line: 80 msgid "Atom/Bond" msgstr "Atome/Liaison" # File: opengl/win/m_tools.c, Line: 81 msgid "Coordination Sphere" msgstr "Sphère de Coordination" # File: opengl/win/m_tools.c, Line: 84 msgid "Single Fragment" msgstr "Fragment Unique" # File: opengl/win/m_tools.c, Line: 85 msgid "Single Molecule" msgstr "Molécule Unique" # File: opengl/win/m_tools.c, Line: 86 msgid "Measures (Edition Mode Only)" msgstr "Mesures (mode édition uniquement)" # File: opengl/win/m_tools.c, Line: 88 # File: opengl/win/w_search.c, Line: 4206 msgid "Selection" msgstr "Sélection" # File: opengl/win/m_tools.c, Line: 88 msgid "Visible/Hidden" msgstr "Visible/Caché" # File: opengl/win/m_tools.c, Line: 317,502 msgid "Volumes" msgstr "Volumes" # File: opengl/win/m_tools.c, Line: 322,682 msgid "Mouse Mode" msgstr "Mode de la Souris" # File: opengl/win/m_tools.c, Line: 369,683 msgid "Selection Mode" msgstr "Mode de Sélection" # File: opengl/win/m_tools.c, Line: 412,785 # File: calc/cp2k/cp2k_init.c, Line: 119 msgid "Molecular Dynamics" msgstr "Dynamique Moléculaire" # File: opengl/win/m_tools.c, Line: 443,786 msgid "Invert" msgstr "Inverser" # File: opengl/win/popup.c, Line: 438,3025,3186 # File: opengl/win/w_search.c, Line: 2416,2669 msgid "%s in %s" msgstr "%s de %s" # File: opengl/win/popup.c, Line: 504,740,3041,3194 msgid "Copied Data" msgstr "Données Copiées" # File: opengl/win/popup.c, Line: 617 msgid "No atoms to be removed !" msgstr "Aucun atome à supprimer !" # File: opengl/win/popup.c, Line: 621 msgid "%d atom(s) removed !" msgstr "%d atome(s) supprimé(s) !" # File: opengl/win/popup.c, Line: 681 msgid "%d atom(s) inserted !" msgstr "%d atome(s) inséré(s) !" # File: opengl/win/popup.c, Line: 3037,3168 # File: opengl/win/w_search.c, Line: 2658 msgid "Import From Project" msgstr "Importer Depuis le Projet" # File: opengl/win/popup.c, Line: 3314 msgid "All Non-Selected Atom(s)/Bond(s)" msgstr "Tous les Atomes/Liaison(s) Non Sélectionnés" # File: opengl/win/popup.c, Line: 3314 msgid "All Selected Atom(s)/Bond(s)" msgstr "Tous les Atomes/Liaison(s) Sélectionnés" # File: opengl/win/popup.c, Line: 3315 msgid "All Non-Labelled Atom(s)/Bond(s)" msgstr "Tous les Atomes/Liaison(s) Non Étiquetés" # File: opengl/win/popup.c, Line: 3315 msgid "All Labelled Atom(s)/Bond(s)" msgstr "Tous les Atomes/Liaison(s) Étiquetés" # File: opengl/win/popup.c, Line: 3372 msgid "This Atom: %s%d" msgstr "Cet atome: %s%d" # File: opengl/win/popup.c, Line: 3407 msgid "This Bond: %s%d - %s%d" msgstr "Cette liaison: %s%d - %s%d" # File: opengl/win/popup.c, Line: 3500,3789,3852 msgid "Fragment N°:\t%d" msgstr "Fragment N°:\t%d" # File: opengl/win/popup.c, Line: 3500,3789,3852 msgid "Molecule N°:\t%d" msgstr "Molécule N°:\t%d" # File: opengl/win/popup.c, Line: 3515 msgid "All %s Atoms %d Fold" msgstr "Tous les %s Avec %d Voisins" # File: opengl/win/popup.c, Line: 3526 msgid "All %s Coordinations" msgstr "Toutes les Coordinations %s" # File: opengl/win/popup.c, Line: 3536 msgid "All %s Atoms" msgstr "Tous les %s" # File: opengl/win/popup.c, Line: 3540 msgid "All %s* Clones" msgstr "Tous les Clones %s*" # File: opengl/win/popup.c, Line: 3555 msgid "All %s %d - %s %d Bonds" msgstr "Toutes les Laisons %s %d - %s %d" # File: opengl/win/popup.c, Line: 3569 msgid "All %s - %s Bonds" msgstr "Toutes les Liaisons %s - %s" # File: opengl/win/popup.c, Line: 3577 msgid "All %s - %s Bonds" msgstr "Toutes les Liaisons %s - %s" # File: opengl/win/popup.c, Line: 3587 msgid "All Hidden Atom(s)/Bond(s)" msgstr "Tous les Atomes/Liaison(s) Cachés" # File: opengl/win/popup.c, Line: 3587 msgid "All Visible Atom(s)/Bond(s)" msgstr "Tous les Atomes/Liaison(s) Visibles" # File: opengl/win/popup.c, Line: 3694 msgid "Unselect" msgstr "Désélectionner" # File: opengl/win/popup.c, Line: 3695 # File: opengl/win/w_atoms.c, Line: 363 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 537,892,997 # File: opengl/win/w_rings.c, Line: 413 # File: opengl/win/w_search.c, Line: 3577 msgid "Label" msgstr "Label" # File: opengl/win/popup.c, Line: 3696 msgid "Unlabel" msgstr "Enlever le label" # File: opengl/win/popup.c, Line: 3698 msgid "Hide" msgstr "Masquer" # File: opengl/win/popup.c, Line: 3701 msgid "Edit as New Project" msgstr "Éditer en tant que Nouveau Projet" # File: opengl/win/popup.c, Line: 3704 msgid "Copy" msgstr "Copier" # File: opengl/win/popup.c, Line: 3830 msgid "Total Coordination: %d" msgstr "Coordination Totale: %d" # File: opengl/win/popup.c, Line: 3839 msgid "Partial Coordination: %s" msgstr "Coordination Partielle: %s" # File: opengl/win/popup.c, Line: 4023 msgid "Center crystal atom(s)" msgstr "Centrer le(s) atome(s) du cristal" # File: opengl/win/popup.c, Line: 4023 msgid "Are you sure, this can affect the visual representation of the unit cell ?" msgstr "Êtes-vous sûr que cela peut affecter la représentation visuelle de la cellule unitaire ?" # File: opengl/win/popup.c, Line: 4094 msgid "Color palette error: %s - %d - custom= %s" msgstr "Erreur de palette de couleurs: %s - %d - personnalisé= %s" # File: opengl/win/popup.c, Line: 4126 msgid "Color palette error: %s - spec= %d - coord= %d, custom= %s" msgstr "Erreur de palette de couleurs: %s - spec= %d - coord= %d, custom= %s" # File: opengl/win/popup.c, Line: 4143 msgid "Color palette error: %s - %d, custom= %s" msgstr "Erreur de palette de couleurs: %s - %d, personnalisé= %s" # File: calc/dl_poly/dlp_field.c, Line: 187 # File: opengl/win/w_coord.c, Line: 959 # File: opengl/win/w_search.c, Line: 999 # File: opengl/win/w_volumes.c, Line: 706,870 msgid "molecule" msgstr "molécule" # File: opengl/win/popup.c, Line: 4156 msgid "Color palette error: rings - %d - %d, custom= %s" msgstr "Erreur de palette de couleurs: anneaux - %d - %d, personnalisé= %s" # File: opengl/win/popup.c, Line: 4203,4266 msgid "Reset Motion" msgstr "Réinitialiser le(s) Déplacement(s)" # File: opengl/win/popup.c, Line: 4278 msgid "Exit Fullscreen" msgstr "Quitter le Plein Écran" # File: opengl/win/w_advance.c, Line: 1391 msgid "Opaque" msgstr "Opaque" # File: opengl/win/w_advance.c, Line: 1392 msgid "Brushed Metal" msgstr "Métal Brossé" # File: opengl/win/w_advance.c, Line: 1393 msgid "Shiny Metal" msgstr "Métal Brillant" # File: opengl/win/w_advance.c, Line: 1394 msgid "Plastic" msgstr "Plastique" # File: curve/tab-2.c, Line: 1007 # File: opengl/win/w_advance.c, Line: 1395 msgid "Transparent" msgstr "Transparent" # File: opengl/win/w_advance.c, Line: 1396 msgid "Translucent" msgstr "Translucide" # File: opengl/win/w_advance.c, Line: 1397 msgid "Diffuse" msgstr "Diffus" # File: opengl/win/w_advance.c, Line: 117 msgid "Ambient occlusion" msgstr "Occlusion ambiante" # File: opengl/win/w_advance.c, Line: 118 msgid "Gamma correction" msgstr "Correction gamma" # File: opengl/win/w_advance.c, Line: 123 msgid "Constant attenuation" msgstr "Atténuation constante" # File: opengl/win/w_advance.c, Line: 124 msgid "Linear attenuation" msgstr "Atténuation linéaire" # File: opengl/win/w_advance.c, Line: 125 msgid "Quadratic attenuation" msgstr "Atténuation quadratique" # File: opengl/win/w_advance.c, Line: 126 msgid "Cone angle" msgstr "Angle du cône" # File: opengl/win/w_advance.c, Line: 127 msgid "Inner cutoff" msgstr "Coupure intérieure" # File: opengl/win/w_advance.c, Line: 128 msgid "Outer cutoff" msgstr "Coupure extérieure" # File: opengl/win/w_advance.c, Line: 130 msgid "Fog color" msgstr "Couleur du brouillard" # File: opengl/win/w_advance.c, Line: 244 msgid "You must select %d light source(s) to be removed !" msgstr "Vous devez sélectionner %d source(s) lumineuse(s) à supprimer !" # File: opengl/win/w_advance.c, Line: 266 msgid "Please select the %d light sources to be removed: " msgstr "Veuillez sélectionner les %d sources lumineuses à supprimer: " # File: opengl/win/w_advance.c, Line: 270 msgid "Please select the light source to be removed: " msgstr "Veuillez sélectionner la source lumineuse à supprimer: " # File: opengl/win/w_advance.c, Line: 272 msgid "Remove light source(s)" msgstr "Supprimer la ou les sources de lumière" # File: opengl/win/w_advance.c, Line: 280,520 msgid "Light N°%d" msgstr "Lumière N°%d" # File: opengl/win/w_advance.c, Line: 882 msgid "Show light" msgstr "Montrer la lumière" # File: opengl/win/w_advance.c, Line: 905 msgid "Number of light sources\n(add or remove lights - up to 10 sources)" msgstr "Nombre de sources lumineuses\n(ajouter ou supprimer des lumières - jusqu'à 10 sources)" # File: opengl/win/w_advance.c, Line: 914 msgid "Configure light source *" msgstr "Configurer la source lumineuse *" # File: opengl/win/w_advance.c, Line: 919 msgid "Light configuration" msgstr "Configuration de l'éclairage" # File: opengl/win/w_advance.c, Line: 923 msgid "Directional" msgstr "Directionnel" # File: opengl/win/w_advance.c, Line: 924 msgid "Point" msgstr "Point" # File: opengl/win/w_advance.c, Line: 925 msgid "Spot" msgstr "Spot" # File: opengl/win/w_advance.c, Line: 929 msgid "Fixed by respect to: " msgstr "Fixé par rapport au: " # File: opengl/win/w_advance.c, Line: 931 msgid "The viewer" msgstr "Spectateur" # File: opengl/win/w_advance.c, Line: 932 msgid "The model" msgstr "Modèle" # File: opengl/win/w_advance.c, Line: 955 msgid "Advanced parameters" msgstr "Paramètres avancés" # File: opengl/win/w_advance.c, Line: 980 msgid "Note that light N°1 must be a directional light" msgstr "A noter que le feu N°1 doit être un feu directionnel" # File: opengl/win/w_advance.c, Line: 983 msgid "Position and attenuation will be corrected based on model depth" msgstr "La position et l'atténuation seront corrigées en fonction de la profondeur du modèle" # File: opengl/win/w_advance.c, Line: 1303 msgid "3D Objects" msgstr "Objets 3D" # File: opengl/win/w_advance.c, Line: 1384 msgid "Use template" msgstr "Utiliser un modèle" # File: opengl/win/w_advance.c, Line: 1388 msgid "Templates" msgstr "Modèles" # File: opengl/win/w_advance.c, Line: 1417 msgid "Material properties" msgstr "Propriétés des matériaux" # File: opengl/win/w_advance.c, Line: 1633 msgid "Fog mode " msgstr "Mode brouillard " # File: curve/tab-4.c, Line: 718 # File: opengl/win/w_advance.c, Line: 1636 # File: opengl/win/w_colors.c, Line: 489 msgid "Linear" msgstr "Linéaire" # File: opengl/win/w_advance.c, Line: 1638 msgid "Exponential" msgstr "Exponentiel" # File: opengl/win/w_advance.c, Line: 1638 msgid "Exponential Squared" msgstr "Exponentiel au Carré" # File: opengl/win/w_advance.c, Line: 1647 msgid "Fog type " msgstr "Type de brouillard " # File: opengl/win/w_advance.c, Line: 1649 msgid "Plane Based" msgstr "Basé sur un Plan" # File: opengl/win/w_advance.c, Line: 1650 msgid "Range Based" msgstr "Basé sur une Échelle" # File: opengl/win/w_advance.c, Line: 1657 msgid "Fog density" msgstr "Densité du brouillard" # File: opengl/win/w_advance.c, Line: 1662 msgid "\t depth* start: " msgstr "\t début de la profondeur*: " # File: opengl/win/w_advance.c, Line: 1662 msgid "\t depth* end: " msgstr "\t fin de la profondeur*: " # File: opengl/win/w_advance.c, Line: 1666 msgid "Fog depth" msgstr "Profondeur du brouillard" # File: opengl/win/w_advance.c, Line: 1675 msgid "* % of the OpenGL model depth." msgstr "* % de la profondeur du modèle OpenGL." # File: opengl/win/w_advance.c, Line: 1746 # File: workspace/workspace.c, Line: 392 msgid "OpenGL material aspect and light settings - %s" msgstr "Aspect du matériau OpenGL et paramètres d'éclairage - %s" # File: opengl/win/w_advance.c, Line: 1767 msgid "Material aspect" msgstr "Aspect du matériau" # File: opengl/win/w_advance.c, Line: 1769 msgid "Configure light sources" msgstr "Configurer l'éclairage" # File: opengl/win/w_advance.c, Line: 1771 msgid "Configure fog" msgstr "Configurer le brouillard" # File: opengl/win/w_atoms.c, Line: 196 msgid "Adjust atom sphere radius" msgstr "Ajuster le rayon de l'atome" # File: opengl/win/w_atoms.c, Line: 196 msgid "Adjust clone sphere radius" msgstr "Ajuster le rayon du clone" # File: opengl/win/w_atoms.c, Line: 197 msgid "Adjust atom point size" msgstr "Ajuster la taille de l'atome" # File: opengl/win/w_atoms.c, Line: 197 msgid "Adjust clone point size" msgstr "Ajuster la taille du clone" # File: opengl/win/w_atoms.c, Line: 361 msgid "Radius [Å]" msgstr "Rayon [Å]" # File: opengl/win/w_atoms.c, Line: 364 msgid "Size [pts]" msgstr "Taille [pts]" # File: opengl/win/w_atoms.c, Line: 408 msgid "%s atom(s) color" msgstr "Couleur atome(s) %s" # File: opengl/win/w_atoms.c, Line: 412 msgid "%s clone(s) color" msgstr "Couleur clone(s) %s" # File: opengl/win/w_atoms.c, Line: 512 msgid "Display properties" msgstr "Propriétés d'affichage" # File: opengl/win/w_atoms.c, Line: 513 msgid "Label properties" msgstr "Propriétés des labels" # File: opengl/win/w_atoms.c, Line: 521 msgid "Clone(s) selection" msgstr "Sélection de clone(s)" # File: opengl/win/w_atoms.c, Line: 521 msgid "Atom(s) selection" msgstr "Sélection d'atome(s)" # File: opengl/win/w_atoms.c, Line: 536 msgid "Atom(s) configuration - " msgstr "Configuration atome(s) - " # File: opengl/win/w_atoms.c, Line: 536 msgid "Clone(s) configuration - " msgstr "Configuration clones - " # File: opengl/win/w_atoms.c, Line: 599 msgid "atoms" msgstr "atomes" # File: opengl/win/w_atoms.c, Line: 599 msgid "clones" msgstr "clones" # File: opengl/win/w_atoms.c, Line: 599 msgid "Error impossible to display the model window for %s !" msgstr "Erreur impossible d'afficher la fenêtre du modèle pour %s !" # File: opengl/win/w_axis.c, Line: 907 msgid "% of the window width" msgstr "% de la largeur de la fenêtre" # File: opengl/win/w_axis.c, Line: 907 msgid "% of the window height" msgstr "% de la hauteur de la fenêtre" # File: opengl/win/w_axis.c, Line: 907 msgid "% of the window depth" msgstr "% de la profondeur de la fenêtre" # File: opengl/win/w_axis.c, Line: 186 msgid "_Radius [ %f Å ]" msgstr "_Rayon [ %f Å ]" # File: opengl/win/w_axis.c, Line: 843 msgid "Axis settings" msgstr "Paramètres des axes" # File: opengl/win/w_axis.c, Line: 851 # File: workspace/workspace.c, Line: 417 msgid "%s - axis settings" msgstr "%s - paramètres des axes" # File: opengl/win/w_axis.c, Line: 866 msgid "Show/Hide axis" msgstr "Afficher/Masquer les axes" # File: opengl/win/w_axis.c, Line: 883 msgid "Top Right Corner *" msgstr "Coin Supérieur Droit *" # File: opengl/win/w_axis.c, Line: 884 msgid "Top Left Corner *" msgstr "Coin Supérieur Gauche *" # File: opengl/win/w_axis.c, Line: 885 msgid "Bottom Right Corner *" msgstr "Coin Inférieur Droit *" # File: opengl/win/w_axis.c, Line: 886 msgid "Bottom Left Corner *" msgstr "Coin Inférieur Gauche *" # File: opengl/win/w_axis.c, Line: 887 msgid "Center **" msgstr "Centre **" # File: opengl/win/w_axis.c, Line: 888 msgid "Use template positions" msgstr "Utiliser les positions du modèle" # File: opengl/win/w_axis.c, Line: 904 msgid "Please choose axis position:" msgstr "Veuillez choisir la position des axes:" # File: opengl/win/w_axis.c, Line: 928 msgid "Length [Å] " msgstr "Longueur [Å] " # File: opengl/win/w_axis.c, Line: 933 # File: opengl/win/w_box.c, Line: 398 msgid "Style " msgstr "Style " # File: opengl/win/w_axis.c, Line: 945 # File: opengl/win/w_box.c, Line: 409 msgid "Line width [pts] " msgstr "Largeur de ligne [pts] " # File: opengl/win/w_axis.c, Line: 949 # File: opengl/win/w_box.c, Line: 413 msgid "Cylinder radius [Å] " msgstr "Rayon du cylindre [Å] " # File: opengl/win/w_axis.c, Line: 957 msgid "Label axis" msgstr "Label des axes" # File: opengl/win/w_axis.c, Line: 961 # File: opengl/win/w_labels.c, Line: 698 msgid "Rendering " msgstr "Rendu " # File: opengl/win/w_axis.c, Line: 963 # File: opengl/win/w_labels.c, Line: 700 msgid "Basic Text" msgstr "Texte Simple" # File: opengl/win/w_axis.c, Line: 964 # File: opengl/win/w_labels.c, Line: 701 msgid "Highlighted" msgstr "Mis en Évidence" # File: opengl/win/w_axis.c, Line: 976 # File: opengl/win/w_labels.c, Line: 728 msgid "Scale with zoom in/out" msgstr "Taille fonction du zoom" # File: opengl/win/w_axis.c, Line: 983 msgid "Legends" msgstr "Légendes" # File: opengl/win/w_axis.c, Line: 1001 msgid "Use base colors" msgstr "Utiliser les couleurs de base" # File: opengl/win/w_axis.c, Line: 1032 msgid "In front of the atomic model" msgstr "Devant le modèle atomique" # File: opengl/win/w_axis.c, Line: 1033 msgid "Inside the atomic model" msgstr "À l'intérieur du modèle atomique" # File: opengl/win/w_bonds.c, Line: 79 msgid "Axis length [ %f Å ]" msgstr "Longueur des axes [ %f Å ]" # File: opengl/win/w_bonds.c, Line: 360 msgid "Adjust atomic bond radius(ii)" msgstr "Ajuster le rayon de liaison atomique (ii)" # File: opengl/win/w_bonds.c, Line: 360 msgid "Adjust clone bond radius(ii)" msgstr "Ajuster le rayon de liaison du clone (ii)" # File: opengl/win/w_bonds.c, Line: 361 msgid "Adjust atomic line width(s)" msgstr "Ajuster la ou les largeurs des lignes atomiques" # File: opengl/win/w_bonds.c, Line: 361 msgid "Adjust clone line width(s)" msgstr "Ajuster la(les) largeur(s) de ligne de clonage" # File: opengl/win/w_bonds.c, Line: 410 msgid "bond" msgstr "liaison" # File: opengl/win/w_bonds.c, Line: 410 msgid "clone bond" msgstr "liaison clonée" # File: calc/dl_poly/dlp_field.c, Line: 932 # File: opengl/win/w_bonds.c, Line: 411 msgid "Bond" msgstr "Liaison" # File: opengl/win/w_bonds.c, Line: 411 msgid "Clone bond" msgstr "Liaison clonée" # File: opengl/win/w_bonds.c, Line: 417 msgid "Adjust axis length" msgstr "Ajuster la longueur des axes" # File: opengl/win/w_bonds.c, Line: 421 msgid "Adjust %s line width" msgstr "Ajuster la largeur de ligne %s" # File: opengl/win/w_bonds.c, Line: 425,429 msgid "Adjust %s cylinders radius" msgstr "Ajuster le rayon des cylindres %s" # File: opengl/win/w_bonds.c, Line: 442 msgid "Axis length" msgstr "Longueur des axes" # File: opengl/win/w_bonds.c, Line: 445 msgid "%s line width" msgstr "largeur de ligne %s" # File: opengl/win/w_bonds.c, Line: 448,451 msgid "%s cylinders radius" msgstr "Rayon des cylindres %s" # File: opengl/win/w_bonds.c, Line: 478 msgid " [pts]" msgstr " [pts]" # File: opengl/win/w_box.c, Line: 367 msgid "Box settings" msgstr "Paramètres de la boîte" # File: opengl/win/w_box.c, Line: 374 # File: workspace/workspace.c, Line: 413 msgid "%s - box settings" msgstr "%s - paramètres de la boîte" # File: opengl/win/w_box.c, Line: 389 msgid "Show/Hide box" msgstr "Afficher/Masquer la boîte" # File: opengl/win/w_box.c, Line: 419 msgid "Color " msgstr "Couleur " # File: opengl/win/w_chains.c, Line: 825 msgid "Too many chains in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for chain(s) individually:\n" msgstr "Trop de chaînes dans votre modèle !\n" " Il est impossible d'afficher la liste entière ...\n" "... à la place, vous pouvez rechercher des chaînes individuellement:\n" # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 540 msgid "Chain(s) size" msgstr "Taille des chaînes" # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 537,892,997 # File: opengl/win/w_rings.c, Line: 413 # File: opengl/win/w_search.c, Line: 3577 msgid "Pick" msgstr "Sélection" # File: opengl/win/w_chains.c, Line: 828 # File: opengl/win/w_rings.c, Line: 954 msgid "MD step:" msgstr "Pas de DM:" # File: opengl/win/w_chains.c, Line: 828 msgid "Chain size:" msgstr "Taille de la chaîne:" # File: opengl/win/w_chains.c, Line: 828 msgid "Chain Id.:" msgstr "Id. de la chaîne:" # File: opengl/win/w_chains.c, Line: 860 # File: opengl/win/w_coord.c, Line: 978 # File: opengl/win/w_rings.c, Line: 986 msgid "Search result(s)" msgstr "Résultat(s) de recherche" # File: opengl/win/w_chains.c, Line: 906 msgid "# This file contains the list of all chains in the %s model\n\n" msgstr "# Ce fichier contient la liste de toutes les chaînes du modèle %s\n\n" # File: opengl/win/w_chains.c, Line: 911 # File: opengl/win/w_rings.c, Line: 1045 msgid "Step N°%d\n" msgstr "Étape N°%d\n" # File: opengl/win/w_chains.c, Line: 915 msgid "\n\tChain(s) of size %d atoms\n" msgstr "\n\tChaîne(s) de taille %d atomes\n" # File: opengl/win/w_chains.c, Line: 915 msgid "\nChain(s) of size %d atoms\n" msgstr "\nChaîne(s) de taille %d atomes\n" # File: opengl/win/w_chains.c, Line: 930 # File: opengl/win/w_rings.c, Line: 1064 msgid "Impossible to open file: %s" msgstr "Impossible d'ouvrir le fichier: %s" # File: opengl/win/w_chains.c, Line: 959 msgid "Save atoms in chains to file" msgstr "Enregistrer les atomes dans des chaînes dans un fichier" # File: opengl/win/w_chains.c, Line: 1013 # File: opengl/win/w_rings.c, Line: 1153 msgid "Save to file" msgstr "Enregistrer dans un fichier" # File: opengl/win/w_colors.c, Line: 175,520 msgid "Background color" msgstr "Couleur d'arrière-plan" # File: opengl/win/w_colors.c, Line: 180 msgid "Model box color" msgstr "Couleur de la boîte du modèle" # File: opengl/win/w_colors.c, Line: 187 msgid "%s - atom(s) color" msgstr "Couleur des atomes - %s" # File: opengl/win/w_colors.c, Line: 191 msgid "%s* - clone(s) color" msgstr "Couleur des clones - %s*" # File: opengl/win/w_colors.c, Line: 469 msgid "Background settings" msgstr "Paramètres d'arrière-plan" # File: opengl/win/w_colors.c, Line: 476 # File: workspace/workspace.c, Line: 409 msgid "%s - background settings" msgstr "%s - paramètres d'arrière-plan" # File: opengl/win/w_colors.c, Line: 486 msgid "Gradient type" msgstr "Type de dégradé" # File: opengl/win/w_colors.c, Line: 499 msgid "Gradient direction" msgstr "Direction du dégradé" # File: opengl/win/w_colors.c, Line: 488 msgid "No Gradient" msgstr "Pas de Dégradé" # File: opengl/win/w_colors.c, Line: 490 msgid "Circular" msgstr "Circulaire" # File: opengl/win/w_colors.c, Line: 483 msgid "Top to Bottom" msgstr "De Haut en Bas" # File: opengl/win/w_colors.c, Line: 483 msgid "Right to Left" msgstr "De Droite à Gauche" # File: opengl/win/w_colors.c, Line: 484 msgid "Bottom Right to Top Left" msgstr "Du Bas à Droite vers le Haut à Gauche" # File: opengl/win/w_colors.c, Line: 484 msgid "Top Right to Bottom Left" msgstr "Du Haut à Droite vers le Bas à Gauche" # File: opengl/win/w_colors.c, Line: 483 msgid "Left to Right" msgstr "De Gauche à Droite" # File: opengl/win/w_colors.c, Line: 483 msgid "Bottom to Top" msgstr "De Bas en Haut" # File: opengl/win/w_colors.c, Line: 484 msgid "Bottom Left to Top Right" msgstr "Du Bas à Gauche vers le Haut à Droite" # File: opengl/win/w_colors.c, Line: 484 msgid "Top Left to Bottom Right" msgstr "Du Haut à Gauche vers le Bas à Droite" # File: opengl/win/w_colors.c, Line: 527 msgid "Single color" msgstr "Couleur unique" # File: opengl/win/w_colors.c, Line: 538 msgid "First color" msgstr "Première couleur" # File: opengl/win/w_colors.c, Line: 538 msgid "Second color" msgstr "Deuxième couleur" # File: opengl/win/w_colors.c, Line: 687 msgid "%s atom(s) %d fold coordination sphere color" msgstr "%s atome(s) avec %d voisin(s), couleur de la sphère de coordination" # File: opengl/win/w_colors.c, Line: 692 msgid "%s - %s coordination sphere color" msgstr "%s - Couleur de la sphère de coordination %s" # File: opengl/win/w_colors.c, Line: 697 msgid "Fragment N°%d color" msgstr "Fragment N°%d couleur" # File: opengl/win/w_colors.c, Line: 702 msgid "Molecule N°%d color" msgstr "Molécule N°%d couleur" # File: opengl/win/w_colors.c, Line: 707 msgid "%d atom chain(s) color" msgstr "Couleurchaîne(s) de %d atomes" # File: opengl/win/w_colors.c, Line: 711 msgid "%s - %d atom ring(s) color" msgstr "%s - couleur(s) des anneaux de %d atomes" # File: opengl/win/w_coord.c, Line: 962 # File: opengl/win/w_volumes.c, Line: 873 msgid "Too many %ss in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for %s(s) individually:\n" msgstr "Trop de %ss dans votre modèle !\n" " Il est impossible d'afficher la liste entière ...\n" "... à la place, vous pouvez rechercher %s(s) individuellement:\n" # File: opengl/win/w_coord.c, Line: 537 msgid "Alpha" msgstr "Alpha" # File: opengl/win/w_coord.c, Line: 538 msgid "Color *" msgstr "Couleur *" # File: opengl/win/w_coord.c, Line: 538 msgid "Show **" msgstr "Afficher **" # File: opengl/win/w_coord.c, Line: 538 msgid "Label **" msgstr "Label **" # File: opengl/win/w_coord.c, Line: 538 msgid "Pick **" msgstr "Sélection **" # File: opengl/win/w_coord.c, Line: 539 # File: opengl/win/w_rings.c, Line: 413 msgid "Ring(s) size" msgstr "Taille de bague(s)" # File: opengl/win/w_coord.c, Line: 540 msgid "Show *" msgstr "Afficher *" # File: opengl/win/w_coord.c, Line: 540 msgid "Label *" msgstr "Label *" # File: opengl/win/w_coord.c, Line: 540 msgid "Pick *" msgstr "Sélection *" # File: opengl/win/w_coord.c, Line: 553 msgid " * for the polyhedra only" msgstr " * pour les polyèdres uniquement" # File: opengl/win/w_coord.c, Line: 554 msgid "** affect all atoms that belong to ring(s) of this size" msgstr "** affecte tous les atomes appartenant à des anneaux de cette taille" # File: opengl/win/w_coord.c, Line: 558 msgid "* affect all atoms that belong to chain(s) of this size" msgstr "* affecte tous les atomes appartenant à des chaînes de cette taille" # File: opengl/win/w_coord.c, Line: 636 msgid "%d atoms" msgstr "%d atomes" # File: opengl/win/w_coord.c, Line: 851 msgid "%s N°%d color" msgstr "Couleur %s N°%d" # File: opengl/win/w_coord.c, Line: 965 # File: opengl/win/w_volumes.c, Line: 876 msgid "Fragment Id.:" msgstr "Id. du fragment:" # File: opengl/win/w_coord.c, Line: 965 # File: opengl/win/w_volumes.c, Line: 876 msgid "Molecule Id.:" msgstr "Id. de la molécule:" # File: opengl/win/w_coord.c, Line: 1148 msgid "Atom(s) and bond(s) color map:" msgstr "Palette de couleurs des atomes et liaisons:" # File: opengl/win/w_coord.c, Line: 1159,1205 msgid "%s coordination(s)" msgstr "Coordination(s) %s" # File: opengl/win/w_coord.c, Line: 1165,1213 msgid "Force field (DL_POLY)" msgstr "Champ de force (DL_POLY)" # File: opengl/win/w_coord.c, Line: 1196 msgid "Polyhedra color map:" msgstr "Palette de couleurs des polyèdres :" # File: opengl/win/w_coord.c, Line: 1217 msgid "Use atom(s) custom map" msgstr "Palette personnalisée (atomes)" # File: opengl/win/w_coord.c, Line: 1235 msgid "\nDisplay polyhedra at the edges of the model box\n" "using the PBC even if the clones are not shown:" msgstr "\nAfficher les polyèdres sur les bords de la boîte du modèle\n" "en utilisant les CLP même si les clones ne sont pas affichés:" # File: opengl/win/w_coord.c, Line: 1236 msgid "Cloned polyhedra" msgstr "Polyèdres clonés" # File: opengl/win/w_coord.c, Line: 1243 msgid "This is automatic if the clones are shown.\n" "The clones are the replica of the atoms linked by PBC." msgstr "Ceci est automatique si les clones sont affichés.\n" "Les clones sont des répliques des atomes liés par CLP." # File: opengl/win/w_coord.c, Line: 1300 # File: workspace/workspace.c, Line: 380 msgid "Environments configuration - %s" msgstr "Configuration des environnements - %s" # File: opengl/win/w_coord.c, Line: 1313 msgid "Parameters" msgstr "Paramètres" # File: opengl/win/w_coord.c, Line: 1314 msgid "Total coordination(s) [TC]" msgstr "Coordination(s) totale(s) [TC]" # File: opengl/win/w_coord.c, Line: 1315 msgid "Partial coordination(s) [PC]" msgstr "Coordination(s) partielle(s) [PC]" # File: opengl/win/w_coord.c, Line: 1324 msgid "%s ring(s) [%s]" msgstr "Anneau(x) %s [%s]" # File: opengl/win/w_coord.c, Line: 1324 msgid "All ring(s) (no rule) [%s]" msgstr "Tous les anneau(x) (aucune règle) %s [%s]" # File: opengl/win/w_coord.c, Line: 1334 msgid "Polyhedra from TC" msgstr "Polyèdres de TC" # File: opengl/win/w_coord.c, Line: 1335 msgid "Polyhedra from PC" msgstr "Polyèdres de PC" # File: opengl/win/w_coord.c, Line: 1342 msgid "Polyhedra from %s" msgstr "Polyèdres de %s" # File: opengl/win/w_coord.c, Line: 1364 msgid "Isolated ring(s) from %s" msgstr "Anneau(x) isolé(s) de %s" # File: opengl/win/w_coord.c, Line: 1373 msgid "Isolated chain(s)" msgstr "Chaîne(s) isolée(s)" # File: opengl/win/w_coord.c, Line: 1474 msgid "Error impossible to display the environments window !" msgstr "Erreur impossible d'afficher la fenêtre des environnements !" # File: calc/dl_poly/dlp_control.c, Line: 167 # File: opengl/win/w_crystal.c, Line: 75 msgid "Orthorhombic" msgstr "Orthorhombique" # File: opengl/win/w_crystal.c, Line: 75 msgid " Cubic" msgstr " Cubique" # File: opengl/win/w_crystal.c, Line: 75 msgid "Other" msgstr "Autre" # File: opengl/win/w_crystal.c, Line: 450 # File: opengl/win/w_library.c, Line: 865 msgid "Formula:" msgstr "Formule:" # File: opengl/win/w_crystal.c, Line: 470 msgid "Density:" msgstr "Densité:" # File: opengl/win/w_crystal.c, Line: 475 msgid "Name:" msgstr "Nom:" # File: opengl/win/w_crystal.c, Line: 791 msgid "Database" msgstr "Base de données" # File: opengl/win/w_crystal.c, Line: 795 msgid "Group" msgstr "Groupe" # File: opengl/win/w_crystal.c, Line: 797 msgid "Crystal" msgstr "Cristal" # File: opengl/win/w_cutoffs.c, Line: 210 msgid "Cutoff(s) must be ≥ 0.5 Å" msgstr "Les seuils doivent être ≥ 0,5 Å" # File: opengl/win/w_cutoffs.c, Line: 278 msgid "Adjust cutoff radius(ii) - %s" msgstr "Ajuster le rayon de coupure(ii) - %s" # File: opengl/win/w_encode.c, Line: 455 msgid "%s - movie encoding" msgstr "%s - encodage du film" # File: opengl/win/w_encode.c, Line: 459 msgid "%s - image rendering" msgstr "%s - rendu d'image" # File: opengl/win/w_encode.c, Line: 472 msgid "Frames recorded:" msgstr "Images enregistrées:" # File: opengl/win/w_encode.c, Line: 481 msgid "Frames per seconds:" msgstr "Images par seconde:" # File: opengl/win/w_encode.c, Line: 491 msgid "Extra frames every (frames):" msgstr "Images supplémentaires toutes les (images):" # File: opengl/win/w_encode.c, Line: 496 msgid "Movie resolution (in pixels):" msgstr "Résolution de la vidéo (en pixels):" # File: opengl/win/w_encode.c, Line: 501 msgid "Image resolution (in pixels):" msgstr "Résolution de l'image (en pixels):" # File: opengl/win/w_encode.c, Line: 523 msgid "Video codec:" msgstr "Codec vidéo:" # File: opengl/win/w_encode.c, Line: 530 msgid "Image format:" msgstr "Format des images:" # File: opengl/win/w_encode.c, Line: 550 msgid "Video quality (bitrate in kb/s):" msgstr "Qualité vidéo (débit en kb/s):" # File: opengl/win/w_encode.c, Line: 564 msgid "OpenGL quality [0-1000] (0= recorded quality):" msgstr "Qualité OpenGL [0-1000] (0= qualité enregistrée):" # File: opengl/win/w_encode.c, Line: 568 msgid "OpenGL quality [0-1000] (0= on-screen quality):" msgstr "Qualité OpenGL [0-1000] (0= qualité à l'écran):" # File: opengl/win/w_encode.c, Line: 575 msgid "Progress: " msgstr "Progrès: " # File: opengl/win/w_labels.c, Line: 73 msgid "Element Name" msgstr "Nom de l'Élément" # File: opengl/win/w_labels.c, Line: 73 msgid "Atomic Symbol" msgstr "Symbole Atomique" # File: opengl/win/w_labels.c, Line: 73 msgid "Atomic Symbol + Id. Number" msgstr "Symbole Atom. + Num. Id." # File: opengl/win/w_labels.c, Line: 73 msgid "Sym. + Id. Num. Subscript" msgstr "Sym. + Num. Id. en Indice" # File: opengl/win/w_labels.c, Line: 73 msgid "Id. Number" msgstr "Numéro d'Id." # File: opengl/win/w_labels.c, Line: 682 msgid "Templates " msgstr "Modèles " # File: opengl/win/w_labels.c, Line: 695 msgid "Label(s):" msgstr "Label(s):" # File: opengl/win/w_labels.c, Line: 718 msgid "Always Visible" msgstr "Toujours Visible" # File: curve/tab-4.c, Line: 769,800 # File: opengl/win/w_labels.c, Line: 719 msgid "Normal" msgstr "Normale" # File: opengl/win/w_labels.c, Line: 734 msgid "Tilt" msgstr "Inclinaison" # File: opengl/win/w_labels.c, Line: 737 msgid "Adapted" msgstr "Adapté" # File: opengl/win/w_labels.c, Line: 747 msgid "Distance to atom [Å]" msgstr "Distance à l'atome [Å]" # File: opengl/win/w_labels.c, Line: 782 msgid "Use atom colors" msgstr "Utiliser les couleurs des atomes" # File: opengl/win/w_labels.c, Line: 786 msgid "Please select atom label colors:" msgstr "Sélectionnez les couleurs des labels atomiques:" # File: opengl/win/w_labels.c, Line: 807 msgid "Line(s):" msgstr "Ligne(s):" # File: opengl/win/w_library.c, Line: 72 msgid "Unknown" msgstr "Inconnu" # File: opengl/win/w_library.c, Line: 73 msgid "Hydrogen" msgstr "Hydrogène" # File: opengl/win/w_library.c, Line: 74 msgid "Helium" msgstr "Hélium" # File: opengl/win/w_library.c, Line: 75 msgid "Lithium" msgstr "Lithium" # File: opengl/win/w_library.c, Line: 76 msgid "Beryllium" msgstr "Béryllium" # File: opengl/win/w_library.c, Line: 77 msgid "Boron" msgstr "Bore" # File: opengl/win/w_library.c, Line: 78 msgid "Carbon" msgstr "Carbone" # File: opengl/win/w_library.c, Line: 79 msgid "Nitrogen" msgstr "Azote" # File: opengl/win/w_library.c, Line: 80 msgid "Oxygen" msgstr "Oxygène" # File: opengl/win/w_library.c, Line: 81 msgid "Fluorine" msgstr "Fluor" # File: opengl/win/w_library.c, Line: 82 msgid "Neon" msgstr "Néon" # File: opengl/win/w_library.c, Line: 83 msgid "Sodium" msgstr "Sodium" # File: opengl/win/w_library.c, Line: 84 msgid "Magnesium" msgstr "Magnésium" # File: opengl/win/w_library.c, Line: 85 msgid "Aluminium" msgstr "Aluminium" # File: opengl/win/w_library.c, Line: 86 msgid "Silicon" msgstr "Silicium" # File: opengl/win/w_library.c, Line: 87 msgid "Phosphorus" msgstr "Phosphore" # File: opengl/win/w_library.c, Line: 88 msgid "Sulfur" msgstr "Soufre" # File: opengl/win/w_library.c, Line: 89 msgid "Chlorine" msgstr "Chlore" # File: opengl/win/w_library.c, Line: 90 msgid "Argon" msgstr "Argon" # File: opengl/win/w_library.c, Line: 91 msgid "Potassium" msgstr "Potassium" # File: opengl/win/w_library.c, Line: 92 msgid "Calcium" msgstr "Calcium" # File: opengl/win/w_library.c, Line: 93 msgid "Scandium" msgstr "Scandium" # File: opengl/win/w_library.c, Line: 94 msgid "Titanium" msgstr "Titane" # File: opengl/win/w_library.c, Line: 95 msgid "Vanadium" msgstr "Vanadium" # File: opengl/win/w_library.c, Line: 96 msgid "Chromium" msgstr "Chrome" # File: opengl/win/w_library.c, Line: 97 msgid "Manganese" msgstr "Manganèse" # File: opengl/win/w_library.c, Line: 98 msgid "Iron" msgstr "Fer" # File: opengl/win/w_library.c, Line: 99 msgid "Cobalt" msgstr "Cobalt" # File: opengl/win/w_library.c, Line: 100 msgid "Nickel" msgstr "Nickel" # File: opengl/win/w_library.c, Line: 101 msgid "Copper" msgstr "Cuivre" # File: opengl/win/w_library.c, Line: 102 msgid "Zinc" msgstr "Zinc" # File: opengl/win/w_library.c, Line: 103 msgid "Gallium" msgstr "Gallium" # File: opengl/win/w_library.c, Line: 104 msgid "Germanium" msgstr "Germanium" # File: opengl/win/w_library.c, Line: 105 msgid "Arsenic" msgstr "Arsenic" # File: opengl/win/w_library.c, Line: 106 msgid "Selenium" msgstr "Sélénium" # File: opengl/win/w_library.c, Line: 107 msgid "Bromine" msgstr "Brome" # File: opengl/win/w_library.c, Line: 108 msgid "Krypton" msgstr "Krypton" # File: opengl/win/w_library.c, Line: 109 msgid "Rubidium" msgstr "Rubidium" # File: opengl/win/w_library.c, Line: 110 msgid "Strontium" msgstr "Strontium" # File: opengl/win/w_library.c, Line: 111 msgid "Yttrium" msgstr "Yttrium" # File: opengl/win/w_library.c, Line: 112 msgid "Zirconium" msgstr "Zirconium" # File: opengl/win/w_library.c, Line: 113 msgid "Niobium" msgstr "Niobium" # File: opengl/win/w_library.c, Line: 114 msgid "Molybdenum" msgstr "Molybdène" # File: opengl/win/w_library.c, Line: 115 msgid "Technetium" msgstr "Technétium" # File: opengl/win/w_library.c, Line: 116 msgid "Ruthenium" msgstr "Ruthénium" # File: opengl/win/w_library.c, Line: 117 msgid "Rhodium" msgstr "Rhodium" # File: opengl/win/w_library.c, Line: 118 msgid "Palladium" msgstr "Palladium" # File: opengl/win/w_library.c, Line: 119 msgid "Silver" msgstr "Argent" # File: opengl/win/w_library.c, Line: 120 msgid "Cadmium" msgstr "Cadmium" # File: opengl/win/w_library.c, Line: 121 msgid "Indium" msgstr "Indium" # File: opengl/win/w_library.c, Line: 122 msgid "Tin" msgstr "Étain" # File: opengl/win/w_library.c, Line: 123 msgid "Antimony" msgstr "Antimoine" # File: opengl/win/w_library.c, Line: 124 msgid "Tellurium" msgstr "Tellure" # File: opengl/win/w_library.c, Line: 125 msgid "Iodine" msgstr "Iode" # File: opengl/win/w_library.c, Line: 126 msgid "Xenon" msgstr "Xénon" # File: opengl/win/w_library.c, Line: 127 msgid "Caesium" msgstr "Césium" # File: opengl/win/w_library.c, Line: 128 msgid "Barium" msgstr "Baryum" # File: opengl/win/w_library.c, Line: 129 msgid "Lanthanum" msgstr "Lanthane" # File: opengl/win/w_library.c, Line: 130 msgid "Cerium" msgstr "Cérium" # File: opengl/win/w_library.c, Line: 131 msgid "Praseodymium" msgstr "Praséodyme" # File: opengl/win/w_library.c, Line: 132 msgid "Neodymium" msgstr "Néodyme" # File: opengl/win/w_library.c, Line: 133 msgid "Promethium" msgstr "Prométhium" # File: opengl/win/w_library.c, Line: 134 msgid "Samarium" msgstr "Samarium" # File: opengl/win/w_library.c, Line: 135 msgid "Europium" msgstr "Europium" # File: opengl/win/w_library.c, Line: 136 msgid "Gadolinium" msgstr "Gadolinium" # File: opengl/win/w_library.c, Line: 137 msgid "Terbium" msgstr "Terbium" # File: opengl/win/w_library.c, Line: 138 msgid "Dysprosium" msgstr "Dysprosium" # File: opengl/win/w_library.c, Line: 139 msgid "Holmium" msgstr "Holmium" # File: opengl/win/w_library.c, Line: 140 msgid "Erbium" msgstr "Erbium" # File: opengl/win/w_library.c, Line: 141 msgid "Thulium" msgstr "Thulium" # File: opengl/win/w_library.c, Line: 142 msgid "Ytterbium" msgstr "Ytterbium" # File: opengl/win/w_library.c, Line: 143 msgid "Lutetium" msgstr "Lutétium" # File: opengl/win/w_library.c, Line: 144 msgid "Hafnium" msgstr "Hafnium" # File: opengl/win/w_library.c, Line: 145 msgid "Tantalum" msgstr "Tantale" # File: opengl/win/w_library.c, Line: 146 msgid "Tungsten" msgstr "Tungstène" # File: opengl/win/w_library.c, Line: 147 msgid "Rhenium" msgstr "Rhénium" # File: opengl/win/w_library.c, Line: 148 msgid "Osmium" msgstr "Osmium" # File: opengl/win/w_library.c, Line: 149 msgid "Iridium" msgstr "Iridium" # File: opengl/win/w_library.c, Line: 150 msgid "Platinum" msgstr "Platine" # File: opengl/win/w_library.c, Line: 151 msgid "Gold" msgstr "Or" # File: opengl/win/w_library.c, Line: 152 msgid "Mercury" msgstr "Mercure" # File: opengl/win/w_library.c, Line: 153 msgid "Thallium" msgstr "Thallium" # File: opengl/win/w_library.c, Line: 154 msgid "Lead" msgstr "Plomb" # File: opengl/win/w_library.c, Line: 155 msgid "Bismuth" msgstr "Bismuth" # File: opengl/win/w_library.c, Line: 156 msgid "Polonium" msgstr "Polonium" # File: opengl/win/w_library.c, Line: 157 msgid "Astatine" msgstr "Astate" # File: opengl/win/w_library.c, Line: 158 msgid "Radon" msgstr "Radon" # File: opengl/win/w_library.c, Line: 159 msgid "Francium" msgstr "Francium" # File: opengl/win/w_library.c, Line: 160 msgid "Radium" msgstr "Radium" # File: opengl/win/w_library.c, Line: 161 msgid "Actinium" msgstr "Actinium" # File: opengl/win/w_library.c, Line: 162 msgid "Thorium" msgstr "Thorium" # File: opengl/win/w_library.c, Line: 163 msgid "Protactinium" msgstr "Protactinium" # File: opengl/win/w_library.c, Line: 164 msgid "Uranium" msgstr "Uranium" # File: opengl/win/w_library.c, Line: 165 msgid "Neptunium" msgstr "Neptunium" # File: opengl/win/w_library.c, Line: 166 msgid "Plutonium" msgstr "Plutonium" # File: opengl/win/w_library.c, Line: 167 msgid "Americium" msgstr "Américium" # File: opengl/win/w_library.c, Line: 168 msgid "Curium" msgstr "Curium" # File: opengl/win/w_library.c, Line: 169 msgid "Berkelium" msgstr "Berkélium" # File: opengl/win/w_library.c, Line: 170 msgid "Californium" msgstr "Californium" # File: opengl/win/w_library.c, Line: 171 msgid "Einsteinium" msgstr "Einsteinium" # File: opengl/win/w_library.c, Line: 172 msgid "Fermium" msgstr "Fermium" # File: opengl/win/w_library.c, Line: 173 msgid "Mendelevium" msgstr "Mendélévium" # File: opengl/win/w_library.c, Line: 174 msgid "Nobelium" msgstr "Nobelium" # File: opengl/win/w_library.c, Line: 175 msgid "Lawrencium" msgstr "Lawrencium" # File: opengl/win/w_library.c, Line: 176 msgid "Rutherfordium" msgstr "Rutherfordium" # File: opengl/win/w_library.c, Line: 177 msgid "Dubnium" msgstr "Dubnium" # File: opengl/win/w_library.c, Line: 178 msgid "Seaborgium" msgstr "Seaborgium" # File: opengl/win/w_library.c, Line: 179 msgid "Bohrium" msgstr "Bohrium" # File: opengl/win/w_library.c, Line: 180 msgid "Hassium" msgstr "Hassium" # File: opengl/win/w_library.c, Line: 181 msgid "Meitnerium" msgstr "Meitnérium" # File: opengl/win/w_library.c, Line: 182 msgid "Darmstadtium" msgstr "Darmstadtium" # File: opengl/win/w_library.c, Line: 183 msgid "Roentgenium" msgstr "Roentgénium" # File: opengl/win/w_library.c, Line: 184 msgid "Copernicium" msgstr "Copernicium" # File: opengl/win/w_library.c, Line: 185 msgid "Nihonium" msgstr "Nihonium" # File: opengl/win/w_library.c, Line: 186 msgid "Flerovium" msgstr "Flérovium" # File: opengl/win/w_library.c, Line: 187 msgid "Moscovium" msgstr "Moscovium" # File: opengl/win/w_library.c, Line: 188 msgid "Livermorium" msgstr "Livermorium" # File: opengl/win/w_library.c, Line: 189 msgid "Tennessine" msgstr "Tennesse" # File: opengl/win/w_library.c, Line: 190 msgid "Oganesson" msgstr "Oganesson" # File: opengl/win/w_library.c, Line: 191 msgid "Deuterium" msgstr "Deutérium" # File: opengl/win/w_library.c, Line: 203 msgid "Other ..." msgstr "Autre ..." # File: opengl/win/w_library.c, Line: 204,1129 msgid "Library" msgstr "Bibliothèque" # File: opengl/win/w_library.c, Line: 207 msgid "Toluene" msgstr "Toluène" # File: opengl/win/w_library.c, Line: 210 msgid "Ni-Phthalocyanine" msgstr "Ni-phtalocyanine" # File: opengl/win/w_library.c, Line: 211 msgid "More ..." msgstr "Plus ..." # File: opengl/win/w_library.c, Line: 215 msgid "Misc" msgstr "Divers" # File: opengl/win/w_library.c, Line: 216 msgid "Alcohols" msgstr "Alcools" # File: opengl/win/w_library.c, Line: 217 msgid "Aldehydes" msgstr "Aldéhydes" # File: opengl/win/w_library.c, Line: 218 msgid "Alkanes" msgstr "Alcanes" # File: opengl/win/w_library.c, Line: 219 msgid "Alkenes" msgstr "Alcènes" # File: opengl/win/w_library.c, Line: 220 msgid "Alkynes" msgstr "Alcynes" # File: opengl/win/w_library.c, Line: 221 msgid "Amides" msgstr "Amides" # File: opengl/win/w_library.c, Line: 222 msgid "Amines" msgstr "Amines" # File: opengl/win/w_library.c, Line: 223 msgid "Amino acids" msgstr "Acides aminés" # File: opengl/win/w_library.c, Line: 224 msgid "Aromatics" msgstr "Aromatiques" # File: opengl/win/w_library.c, Line: 225 msgid "Carboxylic acids" msgstr "Acides carboxyliques" # File: opengl/win/w_library.c, Line: 226 msgid "Cyclic alkanes" msgstr "Alcanes cycliques" # File: opengl/win/w_library.c, Line: 227 msgid "Cyclic alkenes" msgstr "Alcènes cycliques" # File: opengl/win/w_library.c, Line: 228 msgid "Ethers" msgstr "Éthers" # File: opengl/win/w_library.c, Line: 229 msgid "Fatty acids" msgstr "Acides gras" # File: opengl/win/w_library.c, Line: 230 msgid "Fullerenes" msgstr "Fullerènes" # File: opengl/win/w_library.c, Line: 231 msgid "Heterocyclics" msgstr "Hétérocycliques" # File: opengl/win/w_library.c, Line: 232 msgid "Macrocycles" msgstr "Macrocycles" # File: opengl/win/w_library.c, Line: 233 msgid "Ketones" msgstr "Cétones" # File: opengl/win/w_library.c, Line: 234 msgid "Nitriles" msgstr "Nitriles" # File: opengl/win/w_library.c, Line: 235 msgid "Nucleobases" msgstr "Nucléobases" # File: opengl/win/w_library.c, Line: 236 msgid "Steroids" msgstr "Stéroïdes" # File: opengl/win/w_library.c, Line: 237 msgid "Sugars (Linears)" msgstr "Sucres (Linéaires)" # File: opengl/win/w_library.c, Line: 238 msgid "Sugars (Cyclics)" msgstr "Sucres (Cycliques)" # File: opengl/win/w_library.c, Line: 239 msgid "Sulfoxides" msgstr "Sulfoxydes" # File: opengl/win/w_library.c, Line: 240 msgid "Thiols" msgstr "Thiols" # File: opengl/win/w_library.c, Line: 884 msgid "Molecular mass:" msgstr "Masse moléculaire:" # File: opengl/win/w_library.c, Line: 895 msgid "IUPAC name:" msgstr "Nom IUPAC:" # File: opengl/win/w_library.c, Line: 905 msgid "Other name(s):" msgstr "Autre(s) nom(s):" # File: opengl/win/w_library.c, Line: 1146 msgid "Family" msgstr "Famille" # File: opengl/win/w_measures.c, Line: 491,492,493 msgid "Atom 1" msgstr "Atome 1" # File: opengl/win/w_measures.c, Line: 491,492,493 msgid "Atom 2" msgstr "Atome 2" # File: opengl/win/w_measures.c, Line: 491 msgid "Distance [Å]" msgstr "Distance [Å]" # File: opengl/win/w_measures.c, Line: 491,492,493 msgid "Using PBC" msgstr "Utilise les CLP" # File: opengl/win/w_measures.c, Line: 492,493 msgid "Atom 3" msgstr "Atome 3" # File: opengl/win/w_measures.c, Line: 493 msgid "Atom 4" msgstr "Atome 4" # File: opengl/win/w_measures.c, Line: 626 msgid "\tAtom(s) in selection* :\t%d" msgstr "\tAtome(s) sélectionné(s)*: %d" # File: opengl/win/w_measures.c, Line: 630 msgid "\tSorry too many [%d] atoms in selection*" msgstr "\tDésolé, il y a trop d'atomes [%d] dans la sélection*" # File: opengl/win/w_measures.c, Line: 675 msgid "%s - measures - style" msgstr "%s - mesures - style" # File: opengl/win/w_measures.c, Line: 740 # File: workspace/workspace.c, Line: 405 msgid "%s - measures" msgstr "%s - mesures" # File: calc/dl_poly/dlp_field.c, Line: 427 # File: opengl/win/w_measures.c, Line: 751 msgid "Distances" msgstr "Distances" # File: calc/dl_poly/dlp_field.c, Line: 566 # File: opengl/win/w_measures.c, Line: 753 msgid "Dihedrals" msgstr "Dièdres" # File: opengl/win/w_measures.c, Line: 755 msgid "You can select up to %d atoms for both inter-atomic distance(s) and angle(s)," msgstr "Vous pouvez sélectionner jusqu'à %d atomes pour les distances et les angles inter-atomiques." # File: opengl/win/w_measures.c, Line: 758 msgid "and up to %d atoms for dihedral angle(s) measurement(s)" msgstr "et jusqu'à %d atomes pour les mesures d'angle(s) dièdre(s)" # File: opengl/win/w_measures.c, Line: 762 msgid "Font and style" msgstr "Police et style" # File: opengl/win/w_periodic.c, Line: 90 msgid "Electronic structure: [%s]" msgstr "Structure électronique: [%s]" # File: opengl/win/w_periodic.c, Line: 93 msgid "Electronic structure:\t [%s]" msgstr "Structure électronique: [%s]" # File: opengl/win/w_periodic.c, Line: 97 msgid "Electronic structure:\t " msgstr "Structure électronique:\t " # File: opengl/win/w_periodic.c, Line: 651 msgid " Alkali metal" msgstr " Métal alcalin" # File: opengl/win/w_periodic.c, Line: 651 msgid " Alkaline earth metal" msgstr " Métal alcalino-terreux" # File: opengl/win/w_periodic.c, Line: 651 msgid " Lanthanide" msgstr " Lanthanide" # File: opengl/win/w_periodic.c, Line: 651 msgid " Actinide" msgstr " Actinide" # File: opengl/win/w_periodic.c, Line: 652 msgid " Transition metal" msgstr " Métal de transition" # File: opengl/win/w_periodic.c, Line: 652 msgid " Post-transition metal" msgstr " Métal de post-transition" # File: opengl/win/w_periodic.c, Line: 652 msgid " Metalloid" msgstr " Métalloïde" # File: opengl/win/w_periodic.c, Line: 652 msgid " Polyatomic non-metal" msgstr " Non-métal polyatomique" # File: opengl/win/w_periodic.c, Line: 653 msgid " Diatomic non-metal" msgstr " Non-métal diatomique" # File: opengl/win/w_periodic.c, Line: 653 msgid " Noble gas" msgstr " Gaz rares" # File: opengl/win/w_periodic.c, Line: 653 msgid " Unknown" msgstr " Inconnu" # File: opengl/win/w_periodic.c, Line: 678 msgid "Element selection from the periodic table" msgstr "Sélection d'éléments du tableau périodique" # File: opengl/win/w_periodic.c, Line: 694 msgid "Periodic table of the elements" msgstr "Tableau périodique des éléments" # File: opengl/win/w_record.c, Line: 158 msgid "%s - record" msgstr "%s - enregistrement" # File: opengl/win/w_record.c, Line: 164 msgid "Record" msgstr "Enregistrer" # File: opengl/win/w_rings.c, Line: 951 msgid "Too many %s rings in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for ring(s) individually:\n" msgstr "Trop d'annneaux %s dans votre modèle !\n" " Il est impossible d'afficher la liste entière ...\n" "... à la place, vous pouvez rechercher la ou les anneaux individuellement:\n" # File: opengl/win/w_rings.c, Line: 61 msgid "all" msgstr "tous" # File: opengl/win/w_rings.c, Line: 61 msgid "King" msgstr "de King" # File: opengl/win/w_rings.c, Line: 61 msgid "Guttman" msgstr "de Gutman" # File: opengl/win/w_rings.c, Line: 61 msgid "primtive" msgstr "primitif" # File: opengl/win/w_rings.c, Line: 61 msgid "strong" msgstr "fort" # File: opengl/win/w_rings.c, Line: 413 msgid "Poly." msgstr "Poly." # File: opengl/win/w_rings.c, Line: 954 msgid "Ring size:" msgstr "Taille de l'anneau:" # File: opengl/win/w_rings.c, Line: 954 msgid "Ring Id.:" msgstr "Id. de l'anneau:" # File: opengl/win/w_rings.c, Line: 1035 msgid "# This file contains the list of all rings in the %s model\n\n" msgstr "# Ce fichier contient la liste de tous les anneaux du modèle %s\n\n" # File: opengl/win/w_rings.c, Line: 1039 msgid "# This file contains the list of all %s rings in the %s model\n\n" msgstr "# Ce fichier contient la liste de tous les anneaux %s dans le modèle %s\n\n" # File: opengl/win/w_rings.c, Line: 1049 msgid "\n\tRing(s) of size %d atoms\n" msgstr "\n\tAnneau(x) de taille %d atomes\n" # File: opengl/win/w_rings.c, Line: 1049 msgid "\nRing(s) of size %d atoms\n" msgstr "\nAnneau(x) de taille %d atomes\n" # File: opengl/win/w_rings.c, Line: 1094 msgid "Save atoms in %s rings to file" msgstr "Enregistrer les atomes dans les anneaux %s dans un fichier" # File: opengl/win/w_search.c, Line: 4192 msgid "\tThe number of atoms in the model is too large\n" "\t\tto display and browse the entire list !\n" "\tYou need to search for object(s) individually:" msgstr "\tLe nombre d'atomes dans le modèle est trop grand\n" "\t\tpour afficher et parcourir toute la liste !\n" "\tVous devez rechercher un ou plusieurs objets individuellement:" # File: opengl/win/w_search.c, Line: 4196 msgid "The number of atoms in the model is too large to display and browse the entire list !\n" "\t\t\t\tYou need to search for object(s) individually:" msgstr "Le nombre d'atomes dans le modèle est trop important pour afficher et parcourir la liste complète !\n" "\t\t\t\tVous devez rechercher un ou plusieurs objets individuellement:" # File: opengl/win/w_search.c, Line: 4216 msgid "The search must be performed using species and/or Id.\n" "Use the filters above to define the object(s) of the search" msgstr "La recherche doit être effectuée à l’aide de l’espèce et/ou de l'Id.\n" "Utilisez les filtres ci-dessus pour définir le(s) objet(s) de la recherche" # File: opengl/win/w_search.c, Line: 268,386,417,677,1180,3184 msgid "MSDmax= %f" msgstr "DCMmax= %f" # File: opengl/win/w_search.c, Line: 272,390,424,681,1193,3188,3212 msgid "Set MSDmax for ..." msgstr "Définissez le DCMmax pour ..." # File: opengl/win/w_search.c, Line: 286,413,1184,3203 msgid "For all: MSDmax= %f" msgstr "Pour tous: DCMmax= %f" # File: opengl/win/w_search.c, Line: 290,428,1197,1584,1643,3216 msgid "Set MSDmax for all ..." msgstr "Définir le DCMmax pour tous ..." # File: opengl/win/w_search.c, Line: 651 msgid "%s + neighbor(s)" msgstr "%s + voisin(s)" # File: calc/dl_poly/dlp_ff_match.c, Line: 556,613 # File: opengl/win/w_search.c, Line: 706,1166,2548,2589,2624 msgid "Select ..." msgstr "Sélectionner ..." # File: opengl/win/w_search.c, Line: 999 msgid "All %s(s)" msgstr "Tous les %s(s)" # File: opengl/win/w_search.c, Line: 1040 msgid "Fragments" msgstr "Fragments" # File: opengl/win/w_search.c, Line: 1053,1081,1157,2542,2570 msgid "For all: %s" msgstr "Pour tous: %s" # File: opengl/win/w_search.c, Line: 1059,1087,1170,1580,2548,2583 msgid "Select for all ..." msgstr "Sélectionnez pour tous ..." # File: opengl/win/w_search.c, Line: 2431,2680 msgid "Copied data" msgstr "Données copiées" # File: opengl/win/w_search.c, Line: 2832,3273 msgid "MSDmax must be > 0.0 !" msgstr "DCMmax doit être > 0,0 !" # File: opengl/win/w_search.c, Line: 2903 msgid "total coordination(s)" msgstr "coordination(s) totale(s)" # File: opengl/win/w_search.c, Line: 2903 msgid "partial coordination(s)" msgstr "coordination(s) partielle(s)" # File: opengl/win/w_search.c, Line: 2903 msgid "in fragment" msgstr "du fragment" # File: opengl/win/w_search.c, Line: 2903 msgid "in molecule" msgstr "de la molécule" # File: opengl/win/w_search.c, Line: 2910 msgid "%s %s randomly" msgstr "%s %s au hasard" # File: opengl/win/w_search.c, Line: 2916,3346 msgid "Maximum Mean Square Displacement" msgstr "Déplacement Carré Moyen maximum" # File: opengl/win/w_search.c, Line: 2923 msgid "Site occupancy for %s" msgstr "Occupation du site pour %s" # File: opengl/win/w_search.c, Line: 2927 msgid "Insert %s at" msgstr "Insérez %s à" # File: opengl/win/w_search.c, Line: 2945 msgid "Occupancy= " msgstr "Occupation= " # File: opengl/win/w_search.c, Line: 2976 msgid "MSDmax for %s%d + neighbors = " msgstr "DCMmax pour %s%d + voisins = " # File: opengl/win/w_search.c, Line: 2980 msgid "MSDmax for %s%d = " msgstr "DCMmax pour %s%d = " # File: opengl/win/w_search.c, Line: 2989 msgid "MSDmax for all %s atom(s) = " msgstr "DCMmax pour tous les atomes %s = " # File: opengl/win/w_search.c, Line: 2994 msgid "MSDmax for all isolated atom(s) = " msgstr "DCMmax pour tous les atomes isolés = " # File: opengl/win/w_search.c, Line: 2998 msgid "MSDmax for all %d-fold atom(s) + neighbors = " msgstr "DCMmax pour tous les atomes %d fois coord. + voisins = " # File: opengl/win/w_search.c, Line: 3002 msgid "MSDmax for all %d-fold atom(s) = " msgstr "DCMmax pour tous les atomes %d fois coord. = " # File: opengl/win/w_search.c, Line: 3018 msgid "MSDmax for all %s + neighbors = " msgstr "DCMmax pour tous les %s + voisins = " # File: opengl/win/w_search.c, Line: 3022 msgid "MSDmax for all %s = " msgstr "DCMmax pour tous les %s = " # File: opengl/win/w_search.c, Line: 3028 msgid "MSDmax for fragment N°%d = " msgstr "DCMmax pour le fragment N°%d = " # File: opengl/win/w_search.c, Line: 3032 msgid "MSDmax for the atom(s) in fragment N°%d = " msgstr "DCMmax pour le(s) atome(s) du fragment N°%d = " # File: opengl/win/w_search.c, Line: 3038 msgid "MSDmax for molecule N°%d = " msgstr "DCMmax pour la molécule N°%d = " # File: opengl/win/w_search.c, Line: 3042 msgid "MSDmax for the atom(s) in molecule N°%d = " msgstr "DCMmax pour le(s) atome(s) de la molécule N°%d = " # File: opengl/win/w_search.c, Line: 3084 msgid "isolated" msgstr "isolé" # File: opengl/win/w_search.c, Line: 3140 msgid "%s randomly n fragment(s) in all fragments, n= " msgstr "%s aléatoirement n fragment(s) dans tous les fragments, n= " # File: opengl/win/w_search.c, Line: 3144 msgid "%s randomly n fragment(s) in molecule N°%d, n= " msgstr "%s aléatoirement n fragment(s) dans la molécule N°%d, n= " # File: opengl/win/w_search.c, Line: 3148 msgid "%s randomly n %s coordinations, n= " msgstr "%s aléatoirement n %s coordinations, n= " # File: opengl/win/w_search.c, Line: 3155 msgid "%s randomly n %s %s, n= " msgstr "%s au hasard n %s %s, n= " # File: opengl/win/w_search.c, Line: 3159 msgid "%s randomly n %s %s N°%d, n= " msgstr "%s au hasard n %s %s N°%d, n= " # File: opengl/win/w_search.c, Line: 3167 msgid " with nmax = %d" msgstr " avec nmax = %d" # File: opengl/win/w_search.c, Line: 3354 msgid "MSDmax for all objects = " msgstr "DCMmax pour tous les objets = " # File: opengl/win/w_search.c, Line: 3577 msgid "Object" msgstr "Objet" # File: opengl/win/w_search.c, Line: 3579 msgid "By" msgstr "Par" # File: opengl/win/w_search.c, Line: 3582 msgid "Translate" msgstr "Translater" # File: opengl/win/w_search.c, Line: 3582 msgid "Max. MSD" msgstr "DCM Max." # File: opengl/win/w_search.c, Line: 3932 msgid "Rotate" msgstr "Tourner" # File: calc/dl_poly/dlp_atom.c, Line: 744 # File: opengl/win/w_search.c, Line: 3958 msgid "Number" msgstr "Nombre" # File: opengl/win/w_search.c, Line: 4000,4142 msgid "Atom(s): All" msgstr "Atome(s) : Tous" # File: opengl/win/w_search.c, Line: 4001,4144 msgid "Group of Atoms: All" msgstr "Groupe d'Atomes: Tous" # File: opengl/win/w_search.c, Line: 4001,4143 msgid "Group of Atoms" msgstr "Groupe d'Atomes" # File: opengl/win/w_search.c, Line: 4087 msgid "\t Atom species: " msgstr "\t Espèces atomique: " # File: opengl/win/w_search.c, Line: 4093 msgid "\t Atom Id: " msgstr "\t Id. de l'atome: " # File: opengl/win/w_search.c, Line: 4101 msgid "Add" msgstr "Ajouter" # File: opengl/win/w_search.c, Line: 4139 msgid "Search " msgstr "Recherche " # File: opengl/win/w_search.c, Line: 4147 msgid "Total Coordination" msgstr "Coordination Totale" # File: opengl/win/w_search.c, Line: 4147 msgid "Partial Coordination" msgstr "Coordination Partielle" # File: opengl/win/w_search.c, Line: 4164 msgid "For " msgstr "Pour " # File: opengl/win/w_search.c, Line: 4165 msgid "Filter by " msgstr "Filtrer par " # File: opengl/win/w_search.c, Line: 4166 msgid "Species " msgstr "Espèces " # File: opengl/win/w_search.c, Line: 4169 # File: calc/dl_poly/dlp_edit.c, Line: 1184 # File: calc/dl_poly/dlp_field.c, Line: 930 msgid "Atom Id." msgstr "Id. de l'Atome" # File: opengl/win/w_search.c, Line: 4205 msgid "All objects" msgstr "Tous les objets" # File: opengl/win/w_search.c, Line: 4206 msgid "Selection " msgstr "Sélection " # File: opengl/win/w_sequencer.c, Line: 72 # File: workspace/workspace.c, Line: 401 msgid "%s - player - step %d" msgstr "%s - lecteur - pas %d" # File: opengl/win/w_sequencer.c, Line: 263 msgid "Enter a step number" msgstr "Entrez un numéro de pas" # File: opengl/win/w_sequencer.c, Line: 267 msgid "Step number [%d-%d]: " msgstr "Numéro de pas [%d-%d]: " # File: opengl/win/w_sequencer.c, Line: 469 msgid "First" msgstr "Premier" # File: opengl/win/w_sequencer.c, Line: 472 msgid "Previous" msgstr "Précédent" # File: opengl/win/w_sequencer.c, Line: 475 msgid "Next" msgstr "Suivant" # File: opengl/win/w_sequencer.c, Line: 478 msgid "Last" msgstr "Dernier" # File: opengl/win/w_sequencer.c, Line: 481 msgid "Go to" msgstr "Aller à" # File: opengl/win/w_sequencer.c, Line: 488 msgid "Play" msgstr "Jouer" # File: opengl/win/w_sequencer.c, Line: 494 msgid "Loop" msgstr "Boucle" # File: opengl/win/w_sequencer.c, Line: 497 msgid "Faster" msgstr "Accélérer" # File: opengl/win/w_sequencer.c, Line: 500 msgid "Slower" msgstr "Ralentir" # File: opengl/win/w_spiner.c, Line: 181 # File: workspace/workspace.c, Line: 396 msgid "%s - spin" msgstr "%s - rotation" # File: opengl/win/w_volumes.c, Line: 716 msgid "Mean volume(s) occupied by the atom(s) for each %s:" msgstr "Volume(s) moyen(s) occupé(s) par le(s) atome(s) pour chaque %s:" # File: opengl/win/w_volumes.c, Line: 720 msgid "Volume(s) occupied by the atom(s) for each %s:" msgstr "Volume(s) occupé(s) par le(s) atome(s) pour chaque %s:" # File: opengl/win/w_volumes.c, Line: 742,780,1046,1079 msgid "using %s: " msgstr " %s: " # File: opengl/win/w_volumes.c, Line: 756 msgid "Mean smallest rectangle parallepiped volume(s) to englobe the atom(s) for each %s:" msgstr "Plus petit(s) parallélépipéde(s) rectangle(s) moyen(s) englobant le(s) atome(s) pour chaque %s:" # File: opengl/win/w_volumes.c, Line: 760 msgid "Smallest rectangle parallepiped volume(s) to englobe the atom(s) for each %s:" msgstr "Plus petit(s) parallélépipéd(s) rectangle(s) englobant le(s) atome(s) de chaque %s:" # File: opengl/win/w_volumes.c, Line: 785,1093 msgid "Compute" msgstr "Calculer" # File: opengl/win/w_volumes.c, Line: 913 msgid "Select MD step [1-%d]:" msgstr "Sélectionnez le pas de DM [1-%d]:" # File: opengl/win/w_volumes.c, Line: 1036 msgid "Volume(s) occupied by all the atom(s):" msgstr "Volume(s) occupé(s) par tous les atomes:" # File: opengl/win/w_volumes.c, Line: 1061 msgid "average by MD step" msgstr "moyenne par pas de DM" # File: opengl/win/w_volumes.c, Line: 1065 msgid "Smallest rectangle parallepiped volume(s) to englobe all atom(s):" msgstr "Plus petit(s) parallélépipéde(s) rectangle(s) englobant tous les atomes:" # File: opengl/win/w_volumes.c, Line: 1067 msgid "Angular precision: " msgstr "Précision angulaire: " # File: opengl/win/w_volumes.c, Line: 1130 msgid "%s - volumes" msgstr "%s - volumes" # File: opengl/draw/d_measures.c, Line: 96,453 # File: opengl/win/popup.c, Line: 3772 msgid "PBC" msgstr "CLP" # File: opengl/draw/image.c, Line: 166 msgid "An error occurred when exporting an image\nyou might want to try again\nsorry for the trouble" msgstr "Une erreur s'est produite en exportant l'image\nvous pouvez réessayer\ndésolé pour le dérangement" # File: opengl/draw/image.c, Line: 222 # File: opengl/draw/movie.c, Line: 1321 msgid "%s file (*.%s)" msgstr "Fichier %s (*.%s)" # File: opengl/draw/movie.c, Line: 322,340,359 msgid "Error in movie encoding : video frame - error : %s" msgstr "Erreur pendant l'encodage du film : image vidéo - erreur : %s" # File: opengl/draw/movie.c, Line: 347 msgid "Error in movie encoding : video frame - warning : packet empty, ignoring frame= %d" msgstr "Erreur pendant l'encodage du film : image vidéo - avertissement : paquet vide, image ignorée = %d" # File: opengl/draw/movie.c, Line: 407 msgid "Error in movie encoding : impossible to find codec %s" msgstr "Erreur pendant l'encodage du film : impossible de trouver le codec %s" # File: opengl/draw/movie.c, Line: 412 msgid "Error in movie encoding : impossible to allocate encoding context" msgstr "Erreur pendant l'encodage du film : impossible d'attribuer le contexte d'encodage" # File: opengl/draw/movie.c, Line: 469 msgid "Error in movie encoding : impossible to allocate video stream" msgstr "Erreur pendant l'encodage du film : impossible d'attribuer le flux vidéo" # File: opengl/draw/movie.c, Line: 476 msgid "Error in movie encoding : impossible to allocate raw frame buffer" msgstr "Erreur pendant l'encodage du film : impossible d'allouer le frame buffer brut" # File: opengl/draw/movie.c, Line: 1033 msgid "Error in movie encoding : impossible to allocate AV format context" msgstr "Erreur pendant l'encodage du film : impossible d'attribuer le contexte du format AV" # File: opengl/draw/movie.c, Line: 1040 msgid "Error in movie encoding : impossible to guess container format : change file name" msgstr "Erreur pendant l'encodage du film : impossible de deviner le format du conteneur : changer le nom du fichier" # File: opengl/draw/movie.c, Line: 1049 msgid "Error in movie encoding : impossible to create video stream" msgstr "Erreur pendant l'encodage du film : impossible de créer un flux vidéo" # File: opengl/draw/movie.c, Line: 1057 msgid "Error in movie encoding : impossible to open codec, error= %s" msgstr "Erreur pendant l'encodage du film : impossible d'ouvrir le codec, erreur= %s" # File: opengl/draw/movie.c, Line: 1075 msgid "Error in movie encoding : impossible to open video file '%s'" msgstr "Erreur pendant l'encodage du film : impossible d'ouvrir le fichier vidéo '%s'" # File: opengl/draw/movie.c, Line: 1085 msgid "Error in movie encoding : impossible to write the AV format header" msgstr "Erreur pendant l'encodage du film : impossible d'écrire l'en-tête au format AV" # File: opengl/draw/movie.c, Line: 1271 msgid "An error occurred when encoding movie\nyou might want to try again\nsorry for the trouble" msgstr "Une erreur s'est produite lors de l'encodage du film\nvous pouvez réessayer\ndésolé pour le dérangement" # File: opengl/draw/movie.c, Line: 1307 msgid "Render Movie" msgstr "Encoder une Vidéo" # File: opengl/draw/ogl_text.c, Line: 452 msgid "Error in text rendering : for some reason it is impossible to render\n - this string : '%s' \n - using this font: %s" msgstr "Erreur dans le rendu du texte : il semble impossible de rendre le texte\n - cette chaîne: '%s' \n - en utilisant cette police: %s" # File: workspace/modelinfo.c, Line: 118 msgid "\n\tProject file: " msgstr "\n\tFichier projet: " # File: workspace/modelinfo.c, Line: 124 msgid "\n\tCoordinates file: " msgstr "\n\tFichier de coordonnées: " # File: workspace/modelinfo.c, Line: 126 msgid "\n\tFile type: " msgstr "\n\tType de fichier: " # File: workspace/modelinfo.c, Line: 130 msgid "\n\nModel properties\n\n\n" msgstr "\n\nPropriétés du modèle\n\n\n" # File: workspace/modelinfo.c, Line: 133 msgid "\tNumber of MD steps = " msgstr "\tNombre de pas de DM = " # File: workspace/modelinfo.c, Line: 138 msgid "\tNumber of atoms = " msgstr "\tNombre d'atomes = " # File: workspace/modelinfo.c, Line: 142 msgid "\tNumber of species = " msgstr "\tNombre d'espèces = " # File: workspace/modelinfo.c, Line: 152 msgid "\tAv. lattice parameters:\n\n" msgstr "\tParamètres de maille moy.:\n\n" # File: workspace/modelinfo.c, Line: 156 msgid "\tLattice parameters:\n\n" msgstr "\tParamètres de maille:\n\n" # File: workspace/modelinfo.c, Line: 185 msgid "\tAv. lattice vectors:\n\n\t\t" msgstr "\tVecteurs de maille moy.:\n\n\t\t" # File: workspace/modelinfo.c, Line: 189 msgid "\tLattice vectors:\n\n\t\t" msgstr "\tVecteurs de maille:\n\n\t\t" # File: workspace/modelinfo.c, Line: 224 msgid "\tCrystal information:\n\n" msgstr "\tInformations sur le cristal:\n\n" # File: workspace/modelinfo.c, Line: 226 msgid "\t\tSpace group N°: " msgstr "\t\tGroupe d'espace N°: " # File: workspace/modelinfo.c, Line: 230 msgid "\t\tSpace group: " msgstr "\t\tGroupe d'espace: " # File: workspace/modelinfo.c, Line: 233 msgid "\t\tSpace group setting: " msgstr "\t\tParamètre du groupe: " # File: workspace/modelinfo.c, Line: 239 msgid "\t\tBravais lattice: " msgstr "\t\tRéseau de Bravais: " # File: workspace/modelinfo.c, Line: 247 msgid "\tAv. volume = " msgstr "\tVolume moy. = " # File: workspace/modelinfo.c, Line: 251 msgid "\tVolume = " msgstr "\tVolume = " # File: workspace/modelinfo.c, Line: 260 msgid "\n\tAv. density = " msgstr "\n\tDensité moy. = " # File: workspace/modelinfo.c, Line: 264 msgid "\n\tDensity = " msgstr "\n\tDensité = " # File: workspace/modelinfo.c, Line: 273 msgid "\n\tAv. number density = " msgstr "\n\tDensité num. moy. =" # File: workspace/modelinfo.c, Line: 277 msgid "\n\tNumber density = " msgstr "\n\tDensité numérique = " # File: workspace/modelinfo.c, Line: 282 msgid " atoms / Å" msgstr " atomes / Å" # File: workspace/modelinfo.c, Line: 285 msgid "\n\n\tEmpirical formula:\t" msgstr "\n\n\tFormule empirique:\t" # File: workspace/modelinfo.c, Line: 299 msgid "\n\n\tAtom\t Number Fraction\tNumber density (atoms / Å" msgstr "\n\n\tAtome\t Nombre Fraction\t Denisté num. (atomes / Å" # File: workspace/modelinfo.c, Line: 305 msgid "\n\n\tAtom\t Number Fraction" msgstr "\n\n\tAtome\t Nombre Fraction" # File: workspace/workinfo.c, Line: 69 msgid "\n\nWorkspace information\n\n\n" msgstr "\n\nInformations sur l'espace de travail\n\n\n" # File: workspace/workinfo.c, Line: 73 msgid "\tWorkspace file: " msgstr "\tFichier d'espace de travail: " # File: workspace/workinfo.c, Line: 79 msgid " project(s) in workspace: " msgstr " projet(s) dans l'espace de travail: " # File: workspace/workinfo.c, Line: 87 msgid "\n\n\tActive project: " msgstr "\n\n\tProjet actif: " # File: workspace/workspace.c, Line: 89 msgid "Workspace " msgstr "Espace de Travail " # File: workspace/workspace.c, Line: 90 msgid "Settings " msgstr "Paramètres " # File: workspace/workspace.c, Line: 91 msgid "OpenGL - 3D " msgstr "OpenGL - 3D " # File: workspace/workspace.c, Line: 92 msgid "Visualization " msgstr "Visualisation " # File: workspace/workspace.c, Line: 93 msgid "Calc. visualization " msgstr "Calc. visualisation " # File: workspace/workspace.c, Line: 94 msgid "Analysis " msgstr "Analyse " # File: workspace/workspace.c, Line: 349 msgid "Please enter a new name for project N°%d" msgstr "Veuillez saisir un nouveau nom pour le projet N°%d" # File: workspace/workspace.c, Line: 351 msgid "Project name" msgstr "Nom du projet" # File: workspace/workspace.c, Line: 370 msgid "Atom(s) configuration" msgstr "Configuration des atomes" # File: workspace/workspace.c, Line: 370 msgid "Clone(s) configuration" msgstr "Configuration des clones" # File: calc/calc.c, Line: 322 msgid " %s contains %d different sets of atomic coordinates. \n" " Please select the one to use to create the input file(s) \n" " Note that a new project will be generated for that purpose. \n" msgstr " %s contient %d différents ensembles de coordonnées atomiques. \n" " Veuillez sélectionner celui à utiliser pour créer le(s) fichier(s) d'entrée \n" " Notez qu'un nouveau projet sera généré à cet effet. \n" # File: calc/calc.c, Line: 108 msgid "Please confirm" msgstr "Veuillez confirmer" # File: calc/calc.c, Line: 331 msgid "Enter the selected MD step: " msgstr "Entrez le pas de DM sélectionné: " # File: calc/cp2k/cp2k_init.c, Line: 948 msgid "\t - BASIS_MOLOPT\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - GTH_BASIS_SETS\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - BASIS_SET\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - POTENTIAL\t\t(CP2K v9.1, released: 2021-12-31)" msgstr "\t - BASIS_MOLOPT (CP2K v9.1, sortie: 2021-12-31)\n" "\t - GTH_BASIS_SETS (CP2K v9.1, sortie: 2021-12-31)\n" "\t - BASIS_SET (CP2K v9.1, sortie: 2021-12-31)\n" "\t - POTENTIEL (CP2K v9.1, sortie: 2021-12-31)" # File: calc/cp2k/cp2k_init.c, Line: 950 msgid " Following your selection the files that contains the parameters for your calculation will be generated automatically.\n" " Alternatively it is possible to define and use your own set of parameters." msgstr " Suite à votre sélection, les fichiers contenant les paramètres de votre calcul seront générés automatiquement.\n" " Alternativement, il est possible de définir et d'utiliser votre propre ensemble de paramètres." # File: calc/cp2k/cp2k_init.c, Line: 1104 msgid "The CP2K input system offers to have the information gathered in a single, rather long, file\n" "or separated in several files each of them dedicated to a particular section of the input: " msgstr "Le système de saisie CP2K propose de regrouper les informations dans un seul fichier, assez long.\n" "ou séparés en plusieurs fichiers chacun dédié à une section particulière de l'entrée: " # File: calc/cp2k/cp2k_init.c, Line: 97 # File: calc/cpmd/cpmd_restart.c, Line: 155,174,195 msgid "steps" msgstr "pas" # File: calc/cp2k/cp2k_init.c, Line: 117 msgid "Single Point Energy Calculation" msgstr "Calcul d'Énergie Point Unique" # File: calc/cp2k/cp2k_init.c, Line: 118 msgid "Single Point Energy and Forces Calculation" msgstr "Calcul d'Énergie et des Forces Point Unique" # File: calc/cp2k/cp2k_init.c, Line: 119 # File: calc/cpmd/cpmd_init.c, Line: 193 msgid "Geometry Optimization" msgstr "Optimisation de la Géométrie" # File: calc/cp2k/cp2k_init.c, Line: 120 # File: calc/cpmd/cpmd_init.c, Line: 197 msgid "Vibrational Analysis" msgstr "Analyse Vibratoire" # File: calc/cp2k/cp2k_init.c, Line: 120 msgid "Linear Response Calculation" msgstr "Calcul de Réponse Linéaire" # File: calc/cp2k/cp2k_init.c, Line: 120 msgid "Ehrenfest Dynamics" msgstr "Dynamique d'Ehrenfest" # File: calc/cp2k/cp2k_init.c, Line: 121 msgid "Low" msgstr "Faible" # File: calc/cp2k/cp2k_init.c, Line: 121 msgid "Medium" msgstr "Moyen" # File: calc/cp2k/cp2k_init.c, Line: 121 msgid "High" msgstr "Haut" # File: calc/cp2k/cp2k_init.c, Line: 122 msgid "Gaussian and Plane Waves Method" msgstr "Méthode Gaussiennes et Ondes Planes" # File: calc/cp2k/cp2k_init.c, Line: 123 msgid "Gaussian and Augmented Plane Waves Method" msgstr "Méthode Gaussiennes et Ondes Planes Augmentées" # File: calc/cp2k/cp2k_init.c, Line: 124 msgid "Gaussian and Augmented Plane Waves Method Only for XC" msgstr "Méthode Gaussiennes et Ondes Planes Augmentées Uniquement pour XC" # File: calc/cp2k/cp2k_init.c, Line: 125 msgid "Generate an Atomic Density Using the Atomic Code" msgstr "Générer une Densité Atomique à l'Aide du Code Atomique" # File: calc/cp2k/cp2k_init.c, Line: 126 msgid "Diagonalize the Core Hamiltonian" msgstr "Diagonaliser le Noyau Hamiltonien" # File: calc/cp2k/cp2k_init.c, Line: 127 msgid "Use Random Wave-function Coefficients" msgstr "Utiliser des Coefficients de Fonction d'Onde Aléatoires" # File: calc/cp2k/cp2k_init.c, Line: 128 msgid "Use the RESTART File" msgstr "Utiliser le Fichier RESTART" # File: calc/cp2k/cp2k_init.c, Line: 129 msgid "Broyden Mixing Approximating the Inverse Hessian" msgstr "Mélange de Broyden Approximant le Hessien inversé" # File: calc/cp2k/cp2k_init.c, Line: 130 msgid "Conjugate Gradients" msgstr "Gradients Conjugués" # File: calc/cp2k/cp2k_init.c, Line: 130 msgid "Direct Inversion in the Iterative Subspace" msgstr "Inversion Directe dans le Sous-espace Itératif" # File: calc/cp2k/cp2k_init.c, Line: 131 # File: calc/cpmd/cpmd_init.c, Line: 152 msgid "Becke Three-parameters Hybrid + LYP" msgstr "Becke Hybride à Trois Paramètres + LYP" # File: calc/cp2k/cp2k_init.c, Line: 131 msgid "Bayesian Error Estimation + van der Walls" msgstr "Estimation de l'Erreur Bayésienne + van der Walls" # File: calc/cp2k/cp2k_init.c, Line: 132 # File: calc/cpmd/cpmd_init.c, Line: 150 msgid "Local Density Approximation" msgstr "Approximation de la Densité Locale" # File: calc/cp2k/cp2k_init.c, Line: 133 # File: calc/cpmd/cpmd_init.c, Line: 152 msgid "Parameter-free PBE" msgstr "PBE sans Paramètres" # File: calc/cp2k/cp2k_init.c, Line: 134 msgid "3 Dimensional (XYZ)" msgstr "3 Dimensions (XYZ)" # File: calc/cp2k/cp2k_init.c, Line: 134 msgid "2 Dimensional (XY)" msgstr "2 Dimensions (XY)" # File: calc/cp2k/cp2k_init.c, Line: 134 msgid "2 Dimensional (XZ)" msgstr "2 Dimensions (XZ)" # File: calc/cp2k/cp2k_init.c, Line: 134 msgid "2 Dimensional (YZ)" msgstr "2 Dimensions (YZ)" # File: calc/cp2k/cp2k_init.c, Line: 135 msgid "1 Dimensional (X)" msgstr "1 Dimension (X)" # File: calc/cp2k/cp2k_init.c, Line: 135 msgid "1 Dimensional (Y)" msgstr "1 Dimension (Y)" # File: calc/cp2k/cp2k_init.c, Line: 135 msgid "1 Dimensional (Z)" msgstr "1 Dimension (Z)" # File: calc/cp2k/cp2k_init.c, Line: 135 msgid "Isolated System" msgstr "Système Isolé" # File: calc/cp2k/cp2k_init.c, Line: 136 # File: calc/cpmd/cpmd_init.c, Line: 153 msgid "Lattice Vectors" msgstr "Vecteurs de Maille" # File: calc/cp2k/cp2k_init.c, Line: 136 # File: calc/cpmd/cpmd_init.c, Line: 153 msgid "Box Parameters (a,b,c and α,β,γ)" msgstr "Paramètres de la Boîte (a,b,c et α,β,γ)" # File: calc/cp2k/cp2k_init.c, Line: 137 msgid "Cubic (a = b = c, α = β = γ = 90°)" msgstr "Cubique (a = b = c, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 137 msgid "Hexagonal (a = b ≠ c, α = β = 90°, γ = 60°)" msgstr "Hexagonale (a = b ≠ c, α = β = 90°, γ = 60°)" # File: calc/cp2k/cp2k_init.c, Line: 138 msgid "Orthorhombic (a ≠ b ≠ c, α = β = γ = 90°)" msgstr "Orthorhombique (a ≠ b ≠ c, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 138 msgid "Rhombohedral (a = b = c, α = β = γ ≠ 90°)" msgstr "Rhomboédrique (a = b = c, α = β = γ ≠ 90°)" # File: calc/cp2k/cp2k_init.c, Line: 139 msgid "Tetragonal (a = b ≠ c, α = β = γ = 90°)" msgstr "Tétragonal (a = b ≠ c, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 139 msgid "Tetragonal (a = c ≠ b, α = β = γ = 90°)" msgstr "Tétragonal (a = c ≠ b, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 139 msgid "Tetragonal (a ≠ b = c, α = β = γ = 90°)" msgstr "Tétragonal (a ≠ b = c, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 140 msgid "Monoclinic (a ≠ b ≠ c ≠ a, α = γ = 90°, β ≠ 90°)" msgstr "Monoclinique (a ≠ b ≠ c ≠ a, α = γ = 90°, β ≠ 90°)" # File: calc/cp2k/cp2k_init.c, Line: 140 msgid "Triclinic (a ≠ b ≠ c ≠ a, α ≠ β ≠ γ ≠ α ≠ 90°)" msgstr "Triclinique (a ≠ b ≠ c ≠ a, α ≠ β ≠ γ ≠ α ≠ 90°)" # File: calc/cp2k/cp2k_init.c, Line: 140 msgid "No Cell Symmetry" msgstr "Pas de Symétrie" # File: calc/cp2k/cp2k_init.c, Line: 141 msgid "Constant kinetic energy" msgstr "Énergie cinétique constante" # File: calc/cp2k/cp2k_init.c, Line: 141 msgid "Langevin dynamics (constant temperature)" msgstr "Dynamique de Langevin (température constante)" # File: calc/cp2k/cp2k_init.c, Line: 141 msgid "Constant pressure ensemble (no thermostat)" msgstr "Ensemble à pression constante (pas de thermostat)" # File: calc/cp2k/cp2k_init.c, Line: 142 msgid "Constant pressure ensemble using an isotropic cell (no thermostat)" msgstr "Ensemble à pression constante utilisant une cellule isotrope (pas de thermostat)" # File: calc/cp2k/cp2k_init.c, Line: 142 msgid "Constant temperature and pressure using a flexible cell" msgstr "Température et pression constantes grâce à une cellule flexible" # File: calc/cp2k/cp2k_init.c, Line: 143 msgid "Constant temperature and pressure using an isotropic cell" msgstr "Température et pression constantes grâce à une cellule isotrope" # File: calc/cp2k/cp2k_init.c, Line: 143 msgid "Constant energy (µ-canonical)" msgstr "Énergie constante (µ-canonique)" # File: calc/cp2k/cp2k_init.c, Line: 143 msgid "Constant temperature and volume (canonical)" msgstr "Température et volume constants (canonique)" # File: calc/cp2k/cp2k_init.c, Line: 144 msgid "Adiabatic dynamics in constant temperature and volume ensemble (CAFES)" msgstr "Dynamique adiabatique en ensemble température et volume constants (CAFES)" # File: calc/cp2k/cp2k_init.c, Line: 145 msgid "Diagonalization of a full Hessian matrix" msgstr "Diagonalisation d'une matrice hessienne complète" # File: calc/cp2k/cp2k_init.c, Line: 145 msgid "Conjugate gradients" msgstr "Gradients conjugués" # File: calc/cp2k/cp2k_init.c, Line: 147 msgid "Dion-Rydberg-Schroeder-Langreth-Lundqvist non-local van der Waals density functional" msgstr "Fonctionnelle de la densité de van der Waals non-locale de Dion-Rydberg-Schroeder-Langreth-Lundqvist" # File: calc/cp2k/cp2k_init.c, Line: 148 msgid "Lee-Murray-Kong-Lundqvist-Langreth non-local van der Waals density functional" msgstr "Fonctionnelle de la densité de van der Waals non-locale de Lee-Murray-Kong-Lundqvist-Langreth" # File: calc/cp2k/cp2k_init.c, Line: 149 msgid "Revised Vydrov-van Voorhis non-local van der Waals density functional" msgstr "Fonctionnelle de la densité de van der Waals non-locale de Vydrov-van Voorhis révisée" # File: calc/cp2k/cp2k_init.c, Line: 150 msgid "Grimme D2 method" msgstr "Méthode Grimme D2" # File: calc/cp2k/cp2k_init.c, Line: 150 msgid "Grimme D3 method (zero damping)" msgstr "Méthode Grimme D3 (amortissement nul)" # File: calc/cp2k/cp2k_init.c, Line: 150 msgid "Grimme D3 method (Becke-Johnson damping)" msgstr "Méthode Grimme D3 (amortissement Becke-Johnson)" # File: calc/cp2k/cp2k_init.c, Line: 153 msgid "Run type:" msgstr "Type de calcul:" # File: calc/cp2k/cp2k_init.c, Line: 154 msgid "Max CPU time:" msgstr "Temps CPU maximum:" # File: calc/cp2k/cp2k_init.c, Line: 155 msgid "Print level:" msgstr "Niveau d'impression:" # File: calc/cp2k/cp2k_init.c, Line: 156 msgid "Use restart information:" msgstr "Utiliser les informations de redémarrage:" # File: calc/cp2k/cp2k_init.c, Line: 157 msgid "File that contains the restart information:" msgstr "Fichier contenant les informations de redémarrage:" # File: calc/cp2k/cp2k_init.c, Line: 158 msgid "File that contains the basis set(s):" msgstr "Fichier contenant le ou les jeu(x) de bases:" # File: calc/cp2k/cp2k_init.c, Line: 159 msgid "File that contains the pseudo-potential(s):" msgstr "Fichier contenant le(s) pseudo-potentiel(s):" # File: calc/cp2k/cp2k_init.c, Line: 160 msgid "File that contains the wave-function:" msgstr "Fichier contenant la fonction d'onde:" # File: calc/cp2k/cp2k_init.c, Line: 161 # File: calc/dl_poly/dlp_edit.c, Line: 2294 msgid "Charge:" msgstr "Charge:" # File: calc/cp2k/cp2k_init.c, Line: 162 msgid "Density cutoff for the finest grid level:" msgstr "Seuil de densité pour le niveau de grille le plus fin:" # File: calc/cp2k/cp2k_init.c, Line: 163 msgid "Number of multi-grids:" msgstr "Nombre de multi-grilles:" # File: calc/cp2k/cp2k_init.c, Line: 164 msgid "Quickstep method:" msgstr "Méthode Quickstep:" # File: calc/cp2k/cp2k_init.c, Line: 165 msgid "Initial guess for the wave-function:" msgstr "Supposition initiale pour la fonction d'onde:" # File: calc/cp2k/cp2k_init.c, Line: 166 msgid "Maximum inner-SCF cycle(s):" msgstr "Cycle(s) maximal(s) de SCF interne:" # File: calc/cp2k/cp2k_init.c, Line: 167,169 msgid "Convergence threshold:" msgstr "Seuil de convergence:" # File: calc/cp2k/cp2k_init.c, Line: 168 msgid "Maximum outer-SCF cycle(s):" msgstr "Cycle(s) maximum de SCF externe:" # File: calc/cp2k/cp2k_init.c, Line: 170 msgid "Orbital transformation minimizer:" msgstr "Minimiseur de transformation orbitale:" # File: calc/cp2k/cp2k_init.c, Line: 171 # File: calc/cpmd/cpmd_init.c, Line: 124 msgid "DFT functional:" msgstr "Fonctionnelle DFT:" # File: calc/cp2k/cp2k_init.c, Line: 172 msgid "Spin unrestricted calculation" msgstr "Calcul sans restriction de spin" # File: calc/cp2k/cp2k_init.c, Line: 174 msgid "Use van der Waals interactions" msgstr "Utiliser les interactions de van der Waals" # File: calc/cp2k/cp2k_init.c, Line: 175 msgid "Restricted Open Kohn-Sham 'ROKS'" msgstr "Kohn-Sham Ouvert Restreint 'ROKS'" # File: calc/cp2k/cp2k_init.c, Line: 176 # File: calc/cpmd/cpmd_restart.c, Line: 200 msgid "Forces" msgstr "Forces" # File: calc/cp2k/cp2k_init.c, Line: 177 msgid "Stress tensor" msgstr "Tenseur de force" # File: calc/cp2k/cp2k_init.c, Line: 178 msgid "Mulliken population" msgstr "Population de Mulliken" # File: calc/cp2k/cp2k_init.c, Line: 179 msgid "Löwdin population" msgstr "Population de Löwdin" # File: calc/cp2k/cp2k_init.c, Line: 180 msgid "Orbitals" msgstr "Orbitales" # File: calc/cp2k/cp2k_init.c, Line: 181 msgid "Periodicity:" msgstr "Périodicité:" # File: calc/cp2k/cp2k_init.c, Line: 183 # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Symmetry:" msgstr "Symétrie:" # File: calc/cp2k/cp2k_init.c, Line: 184 # File: calc/dl_poly/dlp_control.c, Line: 531 msgid "Ensemble:" msgstr "Ensemble:" # File: calc/cp2k/cp2k_init.c, Line: 185 msgid "Maximum number of MD steps:" msgstr "Nombre maximum de pas de DM:" # File: calc/cp2k/cp2k_init.c, Line: 186 msgid "MD time step:" msgstr "Pas de temps DM:" # File: calc/cp2k/cp2k_init.c, Line: 187 # File: calc/cpmd/cpmd_nose.c, Line: 625 msgid "Initial temperature:" msgstr "Température initiale:" # File: calc/cp2k/cp2k_init.c, Line: 188 msgid "Geometry optimizer:" msgstr "Optimiseur de géométrie:" # File: calc/cp2k/cp2k_init.c, Line: 189 msgid "Maximum number of optimization steps:" msgstr "Nombre maximum de pas d'optimisation:" # File: calc/cp2k/cp2k_init.c, Line: 190 msgid "Atomic forces convergence criterion:" msgstr "Critère de convergence des forces atomiques:" # File: calc/cp2k/cp2k_init.c, Line: 191 msgid "Save information every:" msgstr "Enregistrez les informations tous les:" # File: calc/cp2k/cp2k_init.c, Line: 192 msgid "Add constraint(s)" msgstr "Ajouter une(des) contrainte(s)" # File: calc/cp2k/cp2k_init.c, Line: 194,1156 msgid "The CP2K input structure" msgstr "Structure d'entrée de CP2K" # File: calc/cp2k/cp2k_init.c, Line: 195 # File: calc/cpmd/cpmd_init.c, Line: 114 msgid "provides the general control parameters for the calculation to be performed" msgstr "fournit les paramètres généraux controlant le calcul à effectuer" # File: calc/cp2k/cp2k_init.c, Line: 196 msgid "describes how the interatomic forces will be evaluated" msgstr "décrit comment les forces interatomiques seront évaluées" # File: calc/cp2k/cp2k_init.c, Line: 197 msgid "describes the model: symmetry, periodicity and atomic species, pseudo-potentials and coordinates" msgstr "décrit le modèle: symétrie, périodicité et espèces atomiques, pseudo-potentiels et coordonnées" # File: calc/cp2k/cp2k_init.c, Line: 198 msgid "describes the displacement of the atoms for molecular dynamics and geometry optimization" msgstr "décrit le déplacement des atomes pour la dynamique moléculaire et l'optimisation de géométrie" # File: calc/cp2k/cp2k_init.c, Line: 199 msgid "To describe the thermostat(s) for molecular dynamics" msgstr "Pour décrire le(s) thermostat(s) pour la dynamique moléculaire" # File: calc/cp2k/cp2k_init.c, Line: 200 msgid "To describe the parameters required for restart" msgstr "Pour décrire les paramètres requis pour le redémarrage" # File: calc/cp2k/cp2k_init.c, Line: 363 msgid "Type of potential:" msgstr "Type de potentiel:" # File: calc/cp2k/cp2k_init.c, Line: 363 msgid "Cutoff:" msgstr "Rayon de coupure:" # File: calc/cp2k/cp2k_init.c, Line: 386 msgid "Apply long range corrections" msgstr "Appliquer les corrections à longue portée" # File: calc/cp2k/cp2k_init.c, Line: 483 msgid "Non-local potential" msgstr "Potentiel non-local" # File: calc/cp2k/cp2k_init.c, Line: 484 msgid "Pair potential" msgstr "Potentiel de paire" # File: calc/cp2k/cp2k_init.c, Line: 470 msgid "Energy scaling:" msgstr "Mise à l'échelle énergétique:" # File: calc/cp2k/cp2k_init.c, Line: 470 msgid "Spin configuration *:" msgstr "Configuration du spin *:" # File: calc/cp2k/cp2k_init.c, Line: 471 msgid "Number of HOMO levels (-1 for all):" msgstr "Nombre de niveaux HOMO (-1 pour tous):" # File: calc/cp2k/cp2k_init.c, Line: 471 msgid "Number of LUMO levels (-1 for all):" msgstr "Nombre de niveaux LUMO (-1 pour tous):" # File: calc/cp2k/cp2k_init.c, Line: 473 msgid "%s - options" msgstr "%s - options" # File: calc/cp2k/cp2k_init.c, Line: 487 msgid "Type of functional for the van der Waals interactions" msgstr "Type de fonctionnelle pour les interactions de van der Waals" # File: calc/cp2k/cp2k_init.c, Line: 516 msgid "* for the singly occupied orbitals" msgstr "* pour les orbitales occupées une seule fois" # File: calc/cp2k/cp2k_init.c, Line: 528 msgid "Write cube files, if not then only print eigenvalues" msgstr "Écrire les fichiers cube, sinon imprimer uniquement les valeurs propres" # File: calc/cp2k/cp2k_init.c, Line: 674 msgid "- Select and use set of parameters from the database: " msgstr "- Sélectionnez et utilisez un ensemble de paramètres de la base de données: " # File: calc/cp2k/cp2k_init.c, Line: 675 msgid "- Define and use other set of parameters: " msgstr "- Définir et utiliser d'autres ensembles de paramètres: " # File: calc/cp2k/cp2k_init.c, Line: 676 msgid "\t\tAvailable basis set for " msgstr "\t\tJeu de bases disponible définie pour " # File: calc/cp2k/cp2k_init.c, Line: 676 msgid "\t\tAvailable pseudo-potential for " msgstr "\t\tPseudo-potentiel disponible pour " # File: calc/cp2k/cp2k_init.c, Line: 677 msgid "\t\tBasis set for " msgstr "\t\tJeu de base pour " # File: calc/cp2k/cp2k_init.c, Line: 677 msgid "\t\tPseudo-potential for " msgstr "\t\tPseudo-potentiel pour " # File: calc/cp2k/cp2k_init.c, Line: 844 msgid "Print:" msgstr "Imprimer:" # File: calc/cp2k/cp2k_init.c, Line: 941 msgid " %s provides official CP2K atomic basis sets and pseudo-potentials, are included:" msgstr " %s fournit les jeux de bases atomiques et les pseudo-potentiels officiels CP2K, sont inclus:" # File: calc/cp2k/cp2k_init.c, Line: 952 msgid "\t\t\t\tChemical species" msgstr "\t\t\t\tEspèces chimiques" # File: calc/cp2k/cp2k_init.c, Line: 979 # File: calc/cpmd/cpmd_init.c, Line: 936 msgid "Details of the %s section that %s" msgstr "Détails de la section %s qui %s" # File: calc/cp2k/cp2k_init.c, Line: 1033 msgid "CP2K main input file '*.inp'" msgstr "Fichier d'entrée principal de CP2K '*.inp'" # File: calc/cp2k/cp2k_init.c, Line: 1046 msgid "CP2K input file '*.inp'" msgstr "Fichier d'entrée CP2K '*.inp'" # File: calc/cp2k/cp2k_init.c, Line: 1055 msgid "! Information" msgstr "! Information" # File: calc/cp2k/cp2k_init.c, Line: 1110 msgid "Single input file" msgstr "Fichier d'entrée unique" # File: calc/cp2k/cp2k_init.c, Line: 1110 msgid "Multiple files" msgstr "Fichiers multiples" # File: calc/cp2k/cp2k_init.c, Line: 1160 # File: calc/cpmd/cpmd_init.c, Line: 984 msgid "The %s section" msgstr "La section %s" # File: calc/cp2k/cp2k_init.c, Line: 1164 msgid "The MOTION section - thermostat(s)" msgstr "La section MOUVEMENT - thermostat(s)" # File: calc/cp2k/cp2k_init.c, Line: 1168 msgid "The MOTION section - restart(s)" msgstr "La section MOTION - redémarrage(s)" # File: calc/cp2k/cp2k_init.c, Line: 1228 msgid " Finalize the creation of the CP2K input files now !" msgstr " Finalisez dès maintenant la création des fichiers d'entrée de CP2K !" # File: calc/cp2k/cp2k_init.c, Line: 1231 # File: calc/cpmd/cpmd_init.c, Line: 1697 # File: calc/dl_poly/dlp_field.c, Line: 4447 msgid "\n \tNote: You can re-open this assistant later if required to adjust your choices\n" msgstr "\n \tRemarque: Au besoin vous pourrez rouvrir cet assistant plus tard pour ajuster vos choix.\n" # File: calc/cp2k/cp2k_init.c, Line: 1233 msgid "Create the input files now !" msgstr "Créez les fichiers d'entrée maintenant !" # File: calc/cp2k/cp2k_mol.c, Line: 147 msgid "Fragment %d has been selected but no coordinates appear to be frozen !\n" "Unselect fragment %d or select coordinate(s) to freeze !" msgstr "Le fragment %d a été sélectionné mais aucune coordonnée ne semble figée !\n" "Désélectionnez le fragment %d ou sélectionnez les coordonnées à figer !" # File: calc/cp2k/cp2k_mol.c, Line: 180 # File: calc/dl_poly/dlp_mol.c, Line: 330 msgid "Fragments N°%d" msgstr "Fragments N°%d" # File: calc/cp2k/cp2k_mol.c, Line: 188 # File: calc/dl_poly/dlp_mol.c, Line: 338 msgid "%s and %d have been selected !" msgstr "%s et %d ont été sélectionnés !" # File: calc/cp2k/cp2k_mol.c, Line: 189 msgid "%s\nConfirm this choice and fix these fragments ?" msgstr "%s\nConfirmer ce choix et corriger ces fragments ?" # File: calc/cp2k/cp2k_mol.c, Line: 193 # File: calc/dl_poly/dlp_mol.c, Line: 343 msgid "Fragment N°%d has been selected !" msgstr "Le fragment N°%d a été sélectionné !" # File: calc/cp2k/cp2k_mol.c, Line: 194 msgid "%s\nConfirm this choice and fix this fragment ?" msgstr "%s\nConfirmer ce choix et corriger ce fragment ?" # File: calc/cp2k/cp2k_mol.c, Line: 248 msgid "Please select the fragment(s) to fix" msgstr "Veuillez sélectionner le(s) fragment(s) à corriger" # File: calc/cp2k/cp2k_mol.c, Line: 256 # File: calc/cpmd/cpmd_nose.c, Line: 1216 # File: calc/dl_poly/dlp_edit.c, Line: 1184 # File: calc/dl_poly/dlp_mol.c, Line: 478 msgid "Viz.3D & Select" msgstr "Vis. 3D et sélection" # File: calc/cp2k/cp2k_print.c, Line: 130 msgid "!\n" "! Always a FORCE_EVAL section that describes\n" "! the method to compute energy and forces\n" "!\n" "&FORCE_EVAL\n" " METHOD QUICKSTEP\n" " &DFT\n" "! First specify files that will be used thereafter \n" " BASIS_SET_FILE_NAME " msgstr "!\n" "! Toujours une section FORCE_EVAL qui décrit\n" "! la méthode pour calculer l'énergie et les forces\n" "!\n" "&FORCE_EVAL\n" " MÉTHODE QUICKSTEP\n" " &TFD\n" "! Précisez d'abord les fichiers qui seront utilisés par la suite \n" " BASIS_SET_FILE_NAME " # File: calc/cp2k/cp2k_print.c, Line: 138 msgid "\n" "! Going to the Multi-grids section\n" " &MGRID\n" " CUTOFF " msgstr "\n" "! Accéder à la section Multi-grilles\n" " &MGRID\n" " COUPE " # File: calc/cp2k/cp2k_print.c, Line: 142 msgid " ! => Cutoff of the finest grid level\n" " NGRIDS " msgstr " ! => Rayon de coupure du niveau de grille le plus fin\n" " NGRIDS " # File: calc/cp2k/cp2k_print.c, Line: 145 msgid " ! => Number of multigrids to use, default = 4\n" " &END MGRID\n" "! Going to the Quickstep Setup section\n" " &QS\n" " METHOD " msgstr " ! => Nombre de multigrilles à utiliser, par défaut = 4\n" " &FIN MGRID\n" "! Accéder à la section Configuration de Quickstep\n" " &QS\n" " MÉTHODE " # File: calc/cp2k/cp2k_print.c, Line: 152 msgid "\n" " EPS_DEFAULT 1.0E-12 ! => Default value is 1.0E-10\n" " MAP_CONSISTENT TRUE ! => This is the default value\n" msgstr "\n" " EPS_DEFAULT 1.0E-12  ! => La valeur par défaut est 1.0E-10\n" " MAP_CONSISTENT VRAI  ! => C'est la valeur par défaut\n" # File: calc/cp2k/cp2k_print.c, Line: 153 msgid " EXTRAPOLATION_ORDER 3 ! => This is the default value\n" " &END QS\n" msgstr " EXTRAPOLATION_ORDER 3  ! => C'est la valeur par défaut\n" " &FIN QS\n" # File: calc/cp2k/cp2k_print.c, Line: 155 msgid "! Going to the Self Consistent Field section\n" " &SCF\n" "! Maximum number of cycle\n" " SCF_GUESS " msgstr "! Accéder à la section Champ auto-cohérent\n" " &SCF\n" "! Nombre maximum de cycles\n" " SCF_GUESS " # File: calc/cp2k/cp2k_print.c, Line: 160 msgid " ! => Initial guess for the wave-function\n" " MAX_SCF " msgstr " ! => Estimation initiale de la fonction d'onde\n" " MAX_SCF " # File: calc/cp2k/cp2k_print.c, Line: 162 msgid " ! => Maximum number of SCF cycles\n" " EPS_SCF " msgstr " ! => Nombre maximum de cycles SCF\n" " EPS_SCF " # File: calc/cp2k/cp2k_print.c, Line: 165 msgid " ! => Threshold for the SCF convergence\n" "! If after the ${SCF_NCYCLES} first SCF steps no convergence has been reached\n" "! more SCF cycles can be done updating the preconditioner. \n" "! Detail information is then presented in the 'Outer' SCF section\n" " &OUTER_SCF\n" " MAX_SCF " msgstr " ! => Seuil de convergence SCF\n" "! Si après les ${SCF_NCYCLES} premières étapes SCF aucune convergence n'a été atteinte\n" "! davantage de cycles SCF peuvent être effectués en mettant à jour le préconditionneur. \n" "! Des informations détaillées sont ensuite présentées dans la section SCF « Externe ».\n" " &OUTER_SCF\n" " MAX_SCF " # File: calc/cp2k/cp2k_print.c, Line: 171 msgid " ! => We update the preconditioner and start a new SCF cycle\n" " ! up to ${SCF_NCYCLES} x ${SCF_OCYCLES} can be computed\n" " EPS_SCF " msgstr " ! => On met à jour le préconditionneur et on démarre un nouveau cycle SCF\n" " ! jusqu'à ${SCF_NCYCLES} x ${SCF_OCYCLES} peuvent être calculés\n" " EPS_SCF " # File: calc/cp2k/cp2k_print.c, Line: 175 msgid " ! => Convergence threshold for the extra cycles\n" " &END OUTER_SCF\n" "\n" "! Going to the Orbital Transformation section\n" " &OT ON\n" " MINIMIZER " msgstr " ! => Seuil de convergence pour les cycles supplémentaires\n" " &END OUTER_SCF\n" "\n" "! Aller à la section Transformation Orbitale\n" " &OT SUR\n" " MINIMISEUR " # File: calc/cp2k/cp2k_print.c, Line: 184 msgid "\n" " PRECONDITIONER FULL_ALL ! => Preconditioner for the minimization scheme,\n" " ! FULL_ALL is the most effective state selective\n" " ! preconditioner and is based on diagonalization\n" " ENERGY_GAP 0.001 ! => Underestimated value of the Gap (HOMO-LUMO) in a.u.\n" " ! to be used with the FULL_ALL preconditioner\n" " &END OT\n" "\n" " &PRINT\n" "! To tune the printing of the restart file\n" " &RESTART\n" " LOG_PRINT_KEY T ! => Printing on screen when restart file is written\n" " &EACH\n" " QS_SCF 0 ! => Never write restart file(s) during the SCF cycle\n" msgstr "\n" " PRÉCONDITIONNEUR FULL_ALL  ! => Préconditionneur pour le schéma de minimisation,\n" " ! FULL_ALL est le préconditionneur le plus efficace\n" " ! poru la sélection d'états et est basé sur la diagonalisation\n" " ÉCART_ÉNERGÉTIQUE 0,001  ! => Valeur sous-estimée du Gap (HOMO-LUMO) en a.u.\n" " ! à utiliser avec le préconditionneur FULL_ALL\n" " &FIN OT\n" "\n" " &IMPRIMER\n" "! Pour régler l'impression du fichier de redémarrage\n" " &RESTART\n" " LOG_PRINT_KEY T ! => Impression à l'écran lors de l'écriture du fichier de redémarrage\n" " &CHACUN\n" " QS_SCF0  ! => Ne jamais écrire de fichier(s) de redémarrage pendant le cycle SCF\n" # File: calc/cp2k/cp2k_print.c, Line: 198 msgid " &END PRINT\n" "\n" " &END SCF\n" "! Going to the exchange-correlation section\n" " &XC\n" " &XC_FUNCTIONAL FUNCTIONAL\n" " &END XC_FUNCTIONAL\n" msgstr " &FIN D'IMPRESSION\n" "\n" " &FIN SCF\n" "! Aller à la section échanges-corrélation\n" " &XC\n" " &XC_FUNCTIONAL FONCTIONNEL\n" " &END XC_FUNCTIONAL\n" # File: calc/cp2k/cp2k_print.c, Line: 204 msgid "! Spin polarized calculation\n" " UKS " msgstr "! Calcul en spin polarisé\n" " UKS " # File: calc/cp2k/cp2k_print.c, Line: 313 msgid "!\n" "! Always a SUBSYS section that describes\n" "! the chemistry and the periodicity of the system\n" "!\n" "&SUBSYS\n" " &CELL\n" " PERIODIC " msgstr "!\n" "! Toujours une section SUBSYS qui décrit\n" "! la chimie et la périodicité du système\n" "!\n" "&SOUS-SYSTÈME\n" " &CELLULE\n" " PÉRIODIQUE " # File: calc/cp2k/cp2k_print.c, Line: 324 msgid "\n" " &END CELL\n" " &TOPOLOGY\n" "! Using an XYZ file, coordinates are always Cartesian and in angstrom\n" " COORDINATE XYZ\n" " COORD_FILE_NAME " msgstr "\n" " &FIN DE CELLULE\n" " &TOPOLOGIE\n" "! En utilisant un fichier XYZ, les coordonnées sont toujours cartésiennes et en angström\n" " COORDONNEE XYZ\n" " COORD_FILE_NAME " # File: calc/cp2k/cp2k_print.c, Line: 345 msgid " ! => Restricted Open Kohn-Sham calculation\n" " &LOW_SPIN_ROKS\n" " ENERGY_SCALING " msgstr " ! => Calcul de Kohn-Sham Ouvert Restreint\n" " &LOW_SPIN_ROKS\n" " ENERGY_SCALING " # File: calc/cp2k/cp2k_print.c, Line: 561 msgid "!\n" "! Always a MOTION section that describes\n" "! how to move the atoms\n" "!\n" msgstr "!\n" "! Toujours une section MOTION qui décrit\n" "! comment déplacer les atomes\n" "!\n" # File: calc/cp2k/cp2k_print.c, Line: 710 msgid "! What follow is tricky and tests are recommended\n" "! Atomic basis set and pseudo-potential must be provided for all chemical species\n" "! the exact sequences '${BASIS_FOR_*}' '${POTENTIAL_FOR_*}' appear\n" "! inside the files that contain respectively the basis sets and the pseudo-potentials\n" "! in front of the name of the '*' element\n" msgstr "! La suite est délicate et des tests sont recommandés\n" "! Un jeu de bases atomiques et un pseudo-potentiel doivent être fournis pour chaque espèce chimique\n" "! les séquences exactes '${BASIS_FOR_*}' '${POTENTIAL_FOR_*}' apparaissent\n" "! à l'intérieur des fichiers qui contiennent respectivement les bases et les pseudo-potentiels\n" "! devant le nom de l'élément '*'\n" # File: calc/cp2k/cp2k_print.c, Line: 210 msgid " EXTRAPOLATION ASPC ! => ASPC recommended for MD, PS otherwise\n" msgstr " EXTRAPOLATION ASPC  ! => ASPC recommandé pour DM, sinon PS\n" #File: calc/cp2k/cp2k_print.c, Line: 211 msgid " EXTRAPOLATION PS ! => ASPC recommended for MD, PS otherwise\n" msgstr " EXTRAPOLATION PS ! => ASPC recommandé pour MD, sinon PS\n" # File: calc/cp2k/cp2k_print.c, Line: 213 msgid " ! => Write restart file every ${OUT_STEPS} SCF steps\n" msgstr " ! => Écrire le fichier de redémarrage tous les ${OUT_STEPS} pas SCF\n" # File: calc/cp2k/cp2k_print.c, Line: 214 msgid " ! => Write restart file every ${OUT_STEPS} GEO_OPT steps\n" msgstr " ! => Écrire le fichier de redémarrage tous les ${OUT_STEPS} pas de GEO_OPT\n" # File: calc/cp2k/cp2k_print.c, Line: 215 msgid " ! => Write restart file every ${OUT_STEPS} MD steps\n" msgstr " ! => Écrire le fichier de redémarrage tous les ${OUT_STEPS} pas de DM\n" # File: calc/cp2k/cp2k_print.c, Line: 484 msgid "\n! Thermostat N°%d" msgstr "\n! Thermostat N°%d" # File: calc/cp2k/cp2k_print.c, Line: 652 msgid "\t%d\n# This file was prepared using %s" msgstr "\t%d\n# Ce fichier a été préparé en utilisant %s" # File: calc/cp2k/cp2k_print.c, Line: 744 msgid "! This file contains the restart information:" msgstr "! Ce fichier contient les informations de redémarrage:" # File: calc/cp2k/cp2k_print.c, Line: 745 msgid "! This file contains the basis set(s):" msgstr "! Ce fichier contient le(s) jeu(x) de bases:" # File: calc/cp2k/cp2k_print.c, Line: 746 msgid "! This file contains the pseudo-potential(s):" msgstr "! Ce fichier contient le(s) pseudo-potentiel(s):" # File: calc/cp2k/cp2k_print.c, Line: 747 msgid "! This file contains the wave-function:" msgstr "! Ce fichier contient la fonction d'onde:" # File: calc/cp2k/cp2k_print.c, Line: 748 msgid "! This file contains the atomic coordinates in XYZ format:" msgstr "! Ce fichier contient les coordonnées atomiques au format XYZ:" # File: calc/cp2k/cp2k_print.c, Line: 856 msgid "\t\t! A file is required !" msgstr "\t\t! Un fichier est requis !" # File: calc/cp2k/cp2k_print.c, Line: 986 msgid "\t\t! A keyword is required !" msgstr "\t\t! Un mot-clé est requis !" # File: calc/cp2k/cp2k_print.c, Line: 1025 msgid "! The mandatory FORCE_EVAL section include file\n" msgstr "! La section obligatoire FORCE_EVAL inclut le fichier\n" # File: calc/cp2k/cp2k_print.c, Line: 1034 msgid "! The mandatory MOTION section include file\n" msgstr "! La section MOTION obligatoire inclut le fichier\n" # File: calc/cp2k/cp2k_print.c, Line: 190 msgid " LOG_PRINT_KEY T ! => Printing on screen when restart file is written\n" msgstr " LOG_PRINT_KEY T ! => Impression à l'écran lors de l'écriture du fichier de redémarrage\n" # File: calc/cp2k/cp2k_print.c, Line: 1181 msgid "! The mandatory SUBSYS section include file\n" msgstr "! La section obligatoire SUBSYS inclut le fichier\n" # File: calc/cpmd/cpmd_atoms.c, Line: 152 msgid "Configuration for dummy atom N°%d: " msgstr "Configuration pour l'atome factice N°%d: " # File: calc/cpmd/cpmd_atoms.c, Line: 157 msgid "Type of dummy atom:" msgstr "Type d'atome factice:" # File: calc/cpmd/cpmd_atoms.c, Line: 159 msgid "fixed in space:" msgstr "fixé dans l'espace:" # File: calc/cpmd/cpmd_atoms.c, Line: 160 msgid "calculated by\nthe arithmetic mean of the coordinates of the selected atom(s)" msgstr "calculé par\nla moyenne arithmétique des coordonnées du ou des atome(s) sélectionné(s)" # File: calc/cpmd/cpmd_atoms.c, Line: 161 msgid "calculated by\nthe center of mass of the coordinates of the selected atom(s)" msgstr "calculé par\nle centre de masse des coordonnées du ou des atome(s) sélectionné(s)" # File: calc/cpmd/cpmd_atoms.c, Line: 171 msgid "The coordinates of the dummy atom are %s" msgstr "Les coordonnées de l'atome factice sont %s" # File: calc/cpmd/cpmd_atoms.c, Line: 187 msgid "Dummy %s coordinate: " msgstr "Coordonnée factice %s: " # File: calc/cpmd/cpmd_atoms.c, Line: 419 msgid "You must select %d dummy atom(s) to be deleted !" msgstr "Vous devez sélectionner %d atome(s) factice(s) à supprimer !" # File: calc/cpmd/cpmd_atoms.c, Line: 443 msgid "Select the %d dummy atom(s) to be removed" msgstr "Sélectionnez le(s) %d atome(s) factice(s) à supprimer" # File: calc/cpmd/cpmd_atoms.c, Line: 556 msgid "Do you really want to add %d dummy atom(s) ?" msgstr "Voulez-vous vraiment ajouter %d atome(s) factice(s) ?" # File: calc/cpmd/cpmd_atoms.c, Line: 557 msgid "Adding dummy atom(s) ?" msgstr "Ajout d'atome(s) factice(s) ?" # File: calc/cpmd/cpmd_atoms.c, Line: 584 msgid "Number of dummy atom(s):" msgstr "Nombre d'atome(s) factice(s):" # File: calc/cpmd/cpmd_atoms.c, Line: 588 msgid "Dummy atom to configure: " msgstr "Atome factice à configurer: " # File: calc/cpmd/cpmd_atoms.c, Line: 607 msgid "Add and configure constraint(s)" msgstr "Ajout et configuration de contrainte(s)" # File: calc/cpmd/cpmd_atoms.c, Line: 607 msgid "Add and configure dummy atoms" msgstr "Ajout et configuration d'atome(s) factice(s)" # File: calc/cpmd/cpmd_init.c, Line: 749 msgid "\t * electronic density(ies) or/and wavefunction(s)\n" "\t ** as many index(es) to be supplied on the next line:\n" "\t\t > 0 for electronic density\n" "\t\t < 0 for wavefunction" msgstr "\t * densité(s) électronique(s) ou/et fonction(s) d'onde\n" "\t ** autant d'index(s) à fournir sur la ligne suivante:\n" "\t\t > 0 pour la densité électronique\n" "\t\t < 0 pour la fonction d'onde" # File: calc/cpmd/cpmd_init.c, Line: 1491 msgid "The input files 'forces.inc', 'system.inc', 'motion.inc' and 'coord.inc'\n" "as well as the files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file." msgstr "Les fichiers d'entrée 'forces.inc', 'system.inc', 'motion.inc' et 'coord.inc'\n" "ainsi que les fichiers 'basis.inc' et 'pseudo.inc'\n" "pour les jeux de bases atomiques et les peudo-potentiels\n" "ont été enregistrés dans le même répertoire que le fichier d’entrée principal." # File: calc/cpmd/cpmd_init.c, Line: 1499 msgid "The input files 'forces.inc', 'system.inc', and 'coord.inc'\n" "as well as the files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file." msgstr "Les fichiers d'entrée « forces.inc », « system.inc » et « coord.inc »\n" "ainsi que les fichiers 'basis.inc' et 'pseudo.inc'\n" "pour les jeux de bases atomiques et les peudo-potentiels\n" "ont été enregistrés dans le même répertoire que le fichier d’entrée principal." # File: calc/cpmd/cpmd_init.c, Line: 1494 msgid "The files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file." msgstr "Les fichiers 'basis.inc' et 'pseudo.inc'\n" "pour les jeux de bases atomiques et les peudo-potentiels\n" "ont été enregistrés dans le même répertoire que le fichier d’entrée principal." # File: calc/cpmd/cpmd_init.c, Line: 1618 msgid " Project name: %s\n" " Total number of atoms: %d\n" " Number of chemical species: %d" msgstr " Nom du projet: %s\n" " Nombre total d'atomes: %d\n" " Nombre d'espèces chimiques: %d" # File: calc/cpmd/cpmd_init.c, Line: 1690 msgid "\tThis assistant will help you to setup a %s %s\n" "\tcalculation using %s 3D model as starting point\n" "\n" "Please note that the %s code offers so many calculation options that it is not possible\n" "to provide a description and offer a comprehensive usage guide for each of them. \n" "Therefore this assistant only provides help towards basics and / or frequently used %s instructions. \n" "\n" "In any case if you intent to use the %s code please refer to the user manual." msgstr "\tCet assistant vous aidera à configurer un %s %s\n" "\tcalcul en utilisant le modèle 3D %s comme point de départ\n" "\n" "Veuillez noter que le code %s offre tellement d'options de calcul qu'il n'est pas possible\n" "pour fournir une description et proposer un guide d’utilisation complet pour chacun d’eux. \n" "Par conséquent, cet assistant fournit uniquement une aide concernant les instructions de base et/ou %s fréquemment utilisées. \n" "\n" "Dans tous les cas, si vous avez l'intention d'utiliser le code %s, veuillez vous référer au manuel d'utilisation." # File: calc/cpmd/cpmd_init.c, Line: 113 msgid "provides an informal description of the system and the calculation to be performed" msgstr "fournit une description informelle du système et du calcul à effectuer" # File: calc/cpmd/cpmd_init.c, Line: 115 msgid "provides the exchange and correlation functional (DFT) parameters" msgstr "fournit les paramètres de la fonctionnelle d'échange et corrélation (DFT)" # File: calc/cpmd/cpmd_init.c, Line: 116 msgid "describes the implementation of the van der Waals interactions" msgstr "décrit l'implémentation des interactions de van der Waals" # File: calc/cpmd/cpmd_init.c, Line: 117 msgid "provides details about the physical properties to be calculated" msgstr "fournit des détails sur les propriétés physiques à calculer" # File: calc/cpmd/cpmd_init.c, Line: 118 msgid "describes the symmetry and periodicity of the system" msgstr "décrit la symétrie et la périodicité du système" # File: calc/cpmd/cpmd_init.c, Line: 119 msgid "describes the atomic species, pseudo-potentials and coordinates" msgstr "décrit les espèces atomiques, les pseudo-potentiels et les coordonnées" # File: calc/cpmd/cpmd_init.c, Line: 123 msgid "Fictitious electronic mass:" msgstr "Masse électronique fictive:" # File: calc/cpmd/cpmd_init.c, Line: 123 msgid "Local Spin Density" msgstr "Densité de Spin Locale" # File: calc/cpmd/cpmd_init.c, Line: 123 msgid "van der Walls interactions" msgstr "interactions avec van der Walls" # File: calc/cpmd/cpmd_init.c, Line: 124 msgid "Density cutoff*:" msgstr "Coupure pour la densité*:" # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Use Angströms (default a.u.)" msgstr "Utiliser Angströms (a.u. par défaut)" # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Lattice:" msgstr "Maille:" # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Parameters:" msgstr "Paramètres:" # File: calc/cpmd/cpmd_init.c, Line: 127 # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "Angles:" msgstr "Angles:" # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Cutoff for the plane wave basis:" msgstr "Coupure pour la base d'onde plane:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Use constraints" msgstr "Utiliser des contraintes" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Freeze:" msgstr "Figer:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Use dummy atoms:" msgstr "Utilisez des atomes factices:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Atom type:" msgstr "Type d'atome:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Maximum angular momentum l:" msgstr "Moment cinétique maximal l:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Local angular momentum l:" msgstr "Moment cinétique local l:" # File: calc/cpmd/cpmd_init.c, Line: 150 msgid "Slater Exchange Only" msgstr "Échange Slater Uniquement" # File: calc/cpmd/cpmd_init.c, Line: 150 msgid "Extended B88+PW91+LYP88" msgstr "B88 Étendue + PW91 + LYP88" # File: calc/cpmd/cpmd_init.c, Line: 151 msgid "PBE Revised for Solids" msgstr "PBE Révisé pour les Solides" # File: calc/cpmd/cpmd_init.c, Line: 151 msgid "Revised - PBE" msgstr "PBE - Révisé" # File: calc/cpmd/cpmd_init.c, Line: 151 msgid "Optimized Becke 88" msgstr "Becke 88 Optimisé" # File: calc/cpmd/cpmd_init.c, Line: 152 msgid "Becke One-parameter Hybrid + LYP" msgstr "Becke Hybride à un Paramètre + LYP" # File: calc/cpmd/cpmd_init.c, Line: 152 msgid "Extended Hybrid + LYP" msgstr "Hybride Étendue + LYP" # File: calc/cpmd/cpmd_init.c, Line: 154 msgid "Face Centered Cubic (FCC)" msgstr "Cubique Faces Centrées (FCC)" # File: calc/cpmd/cpmd_init.c, Line: 154 msgid "Body Centered Cubic (BCC)" msgstr "Cubique Corps Centré (BCC)" # File: calc/cpmd/cpmd_init.c, Line: 155 msgid "Body Centered Tetragonal (BCT)" msgstr "Tétragonal Coprs Centré (BCT)" # File: calc/cpmd/cpmd_init.c, Line: 155 msgid "Orthorombic" msgstr "Orthorombique" # File: calc/cpmd/cpmd_init.c, Line: 156 msgid "Default (a, b/a, c/a)" msgstr "Par Défaut (a, b/a, c/a)" # File: calc/cpmd/cpmd_init.c, Line: 156 msgid "Absolute (a, b, c)" msgstr "Absolu (a, b, c)" # File: calc/cpmd/cpmd_init.c, Line: 157 msgid "Default (cos α, cos β, cos γ)" msgstr "Par Défaut (cos α, cos β, cos γ)" # File: calc/cpmd/cpmd_init.c, Line: 157 msgid "Degrees (α, β, γ)" msgstr "Degrés (α, β, γ)" # File: calc/cpmd/cpmd_init.c, Line: 158 msgid "Some Atoms" msgstr "Quelques Atomes" # File: calc/cpmd/cpmd_init.c, Line: 158 msgid "Some Coordinates" msgstr "Quelques Coordonnées" # File: calc/cpmd/cpmd_init.c, Line: 169,170 msgid "Convergence criteria*:" msgstr "Critères de convergence*:" # File: calc/cpmd/cpmd_init.c, Line: 169,170 msgid "Optimizer:" msgstr "Optimiseur:" # File: calc/cpmd/cpmd_init.c, Line: 169,170 msgid "Max steps:" msgstr "Nombre de pas max.:" # File: calc/cpmd/cpmd_init.c, Line: 169,170 msgid "Integration step:" msgstr "Pas d'intégration:" # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Max MD steps: " msgstr "Pas max. de MD: " # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Time step:" msgstr "Pas de temps:" # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Barostat:" msgstr "Barostat:" # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Ions" msgstr "Ions" # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Factor:" msgstr "Facteur:" # File: calc/cpmd/cpmd_init.c, Line: 171 msgid "Fictitious electrons" msgstr "Électrons fictifs" # File: calc/cpmd/cpmd_init.c, Line: 173 msgid "Number of unoccupied states:" msgstr "Nombre d'états inoccupés:" # File: calc/cpmd/cpmd_init.c, Line: 173 msgid "3D visualization*" msgstr "Visualisation 3D*" # File: calc/cpmd/cpmd_init.c, Line: 173 msgid "Number of objects**:" msgstr "Nombre d'objets**:" # File: calc/cpmd/cpmd_init.c, Line: 174 msgid "Property to compute:" msgstr "Propriété à calculer:" # File: calc/cpmd/cpmd_init.c, Line: 192 msgid "Wavefunction Optimization" msgstr "Optimisation de la Fonction d'Onde" # File: calc/cpmd/cpmd_init.c, Line: 194 msgid "CPMD Molecular Dynamics" msgstr "Dynamique Moléculaire CPMD" # File: calc/cpmd/cpmd_init.c, Line: 195 msgid "Born-Oppenheimer Molecular Dynamics" msgstr "Dynamique Moléculaire Born-Oppenheimer" # File: calc/cpmd/cpmd_init.c, Line: 196 msgid "Kohn-Sham Eigen Values" msgstr "Valeurs Propres de Kohn-Sham" # File: calc/cpmd/cpmd_init.c, Line: 198 msgid "Calculation of Physical Properties" msgstr "Calcul des Propriétés Physiques" # File: calc/cpmd/cpmd_init.c, Line: 202 msgid "Preconditioned Gradient" msgstr "Gradient Préconditionné" # File: calc/cpmd/cpmd_init.c, Line: 202,203 msgid "Direct Inversion of Iterative Subspace" msgstr "Inversion Directe du Sous-Espace Itératif" # File: calc/cpmd/cpmd_init.c, Line: 203 msgid "Quasi-Newton method" msgstr "Méthode quasi-Newton" # File: calc/cpmd/cpmd_init.c, Line: 206 msgid "Finite differences of first derivatives" msgstr "Différences finies des dérivées premières" # File: calc/cpmd/cpmd_init.c, Line: 206 msgid "Linear response of ionic displacement" msgstr "Réponse linéaire du déplacement ionique" # File: calc/cpmd/cpmd_init.c, Line: 206 msgid "Precalculated Hessian" msgstr "Hessien précalculé" # File: calc/cpmd/cpmd_init.c, Line: 214 msgid "Gobal" msgstr "Global" # File: calc/cpmd/cpmd_init.c, Line: 214 msgid "Local" msgstr "Locale" # File: calc/cpmd/cpmd_init.c, Line: 215 msgid "Controlled" msgstr "Contrôlé" # File: calc/cpmd/cpmd_init.c, Line: 216 msgid "Nosé-Hoover chains" msgstr "Chaînes Nosé-Hoover" # File: calc/cpmd/cpmd_init.c, Line: 216 msgid "Adaptive Langevin" msgstr "Langevin adaptatif" # File: calc/cpmd/cpmd_init.c, Line: 216 msgid "Canonical sampling through velocity rescaling" msgstr "Échantillonnage canonique par redimensionnement de la vitesse" # File: calc/cpmd/cpmd_init.c, Line: 560 msgid "Configure constraints" msgstr "Configurer les contraintes" # File: calc/cpmd/cpmd_init.c, Line: 560 msgid "Configure dummy atoms" msgstr "Configuration de(s) atome(s) factice(s)" # File: calc/cpmd/cpmd_init.c, Line: 500 msgid "%s atom(s)" msgstr "atome(s) de %s" # File: calc/cpmd/cpmd_init.c, Line: 684 msgid "Annealing:" msgstr "Recuit:" # File: calc/cpmd/cpmd_init.c, Line: 772,860 msgid "%s option(s)" msgstr "%s option(s)" # File: calc/cpmd/cpmd_init.c, Line: 853 msgid "Calculation to be performed:" msgstr "Calcul à effectuer:" # File: calc/cpmd/cpmd_init.c, Line: 888 msgid "General %s section option(s)" msgstr "Option(s) générale(s) de la section %s" # File: calc/cpmd/cpmd_init.c, Line: 984 msgid "The %s section - Calculation options" msgstr "La section %s - Options de calcul" # File: calc/cpmd/cpmd_init.c, Line: 988 msgid "The %s section - Thermostat options" msgstr "La section %s - Options du thermostat" # File: calc/cpmd/cpmd_init.c, Line: 992 msgid "The %s section - RESTART options" msgstr "La section %s - Options RESTART" # File: calc/cpmd/cpmd_init.c, Line: 1033 msgid " Finalize the creation of the CPMD input file now !" msgstr " Finalisez la création du fichier d'entrée CPMD maintenant !" # File: calc/cpmd/cpmd_init.c, Line: 1036 msgid "\n \tNote: You can re-open this assitant later if required to adjust your choices\n" msgstr "\n \tRemarque: Vous pourrez rouvrir cet assistant plus tard pour ajuster vos choix si nécessaire.\n" # File: calc/cpmd/cpmd_init.c, Line: 1038 msgid "Create the input file now !" msgstr "Créez le fichier d'entrée maintenant !" # File: calc/cpmd/cpmd_init.c, Line: 1251 msgid "CP2K input file" msgstr "Fichier d'entrée CP2K" # File: calc/cpmd/cpmd_init.c, Line: 1242 msgid " input file preview" msgstr " aperçu du fichier d'entrée" # File: calc/cpmd/cpmd_init.c, Line: 1253 msgid " input files preview" msgstr " aperçu des fichiers d'entrée" # File: calc/cpmd/cpmd_init.c, Line: 1417 # File: calc/dl_poly/dlp_field.c, Line: 4715 msgid "Error while saving input file: %s\n Error: %s" msgstr "Erreur lors de l'enregistrement du fichier d'entrée: %s\n Erreur : %s" # File: calc/cpmd/cpmd_init.c, Line: 1463 msgid "Error while saving file %s: %s" msgstr "Erreur lors de l'enregistrement du fichier %s: %s" # File: calc/cpmd/cpmd_init.c, Line: 1535 msgid "CPMD input file (*.in)" msgstr "Fichier d'entrée CPMD (*.in)" # File: calc/cpmd/cpmd_init.c, Line: 1535 msgid "CP2K input file (*.inp)" msgstr "Fichier d'entrée CP2K (*.inp)" # File: calc/cpmd/cpmd_init.c, Line: 1538 # File: calc/dl_poly/dlp_field.c, Line: 4749 msgid "Saving %s input file(s)" msgstr "Enregistrement de(s) %s fichier(s) d'entrée" # File: calc/cpmd/cpmd_init.c, Line: 1581 msgid "first-principles" msgstr "premiers principes" # File: calc/cpmd/cpmd_init.c, Line: 1681 msgid "Basic %s - %s - calculation assistant" msgstr "Assistant simple pour le calcul %s - %s" # File: calc/cpmd/cpmd_init.c, Line: 1714 # File: calc/dl_poly/dlp_field.c, Line: 4892 msgid "Preview" msgstr "Aperçu" # File: calc/cpmd/cpmd_nose.c, Line: 1068 msgid "Atom %d has been selected but not coordinates are frozen !\n" "Unselect atom %d or select coordinate(s) to freeze !" msgstr "L'atome %d a été sélectionné mais ses coordonnées ne sont pas figées !\n" "Désélectionnez l'atome %d ou sélectionnez les coordonnées à figer !" # File: calc/cpmd/cpmd_nose.c, Line: 98 msgid "Initial temperature: " msgstr "Température initiale: " # File: calc/cpmd/cpmd_nose.c, Line: 99,100 msgid "Target temperature: " msgstr "Température cible: " # File: calc/cpmd/cpmd_nose.c, Line: 99 msgid "Tolerance: " msgstr "Tolérance: " # File: calc/cpmd/cpmd_nose.c, Line: 100 msgid "Target frequency: " msgstr "Fréquence cible: " # File: calc/cpmd/cpmd_nose.c, Line: 104 msgid "Time constant (Langevin): " msgstr "Constante de temps (Langevin): " # File: calc/cpmd/cpmd_nose.c, Line: 104 msgid "Time constant (Nosë-Hoover): " msgstr "Constante de temps (Nosë-Hoover): " # File: calc/cpmd/cpmd_nose.c, Line: 104 # File: calc/dl_poly/dlp_edit.c, Line: 2374 msgid "Mass: " msgstr "Masse: " # File: calc/cpmd/cpmd_nose.c, Line: 105,107 msgid "Time constant: " msgstr "Constante de temps: " # File: calc/cpmd/cpmd_nose.c, Line: 107 # File: calc/dl_poly/dlp_edit.c, Line: 2558,2614 msgid "Length: " msgstr "Longueur: " # File: calc/cpmd/cpmd_nose.c, Line: 107 msgid "Multiple time steps: " msgstr "Pas de temps multiples: " # File: calc/cpmd/cpmd_nose.c, Line: 107 msgid "Yoshida integrator: " msgstr "Intégrateur Yoshida: " # File: calc/cpmd/cpmd_nose.c, Line: 439 msgid "You must select %d thermostat(s) to be deleted !" msgstr "Vous devez sélectionner %d thermostat(s) à supprimer !" # File: calc/cpmd/cpmd_nose.c, Line: 463 msgid "Select the %d thermostat(s) to be removed" msgstr "Sélectionnez le(s) %d thermostat(s) à supprimer" # File: calc/cpmd/cpmd_nose.c, Line: 468 msgid "Target T°" msgstr "T° cible" # File: calc/cpmd/cpmd_nose.c, Line: 468 msgid "Frequency" msgstr "Fréquence" # File: calc/cpmd/cpmd_nose.c, Line: 625 # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Target temperature:" msgstr "Température cible:" # File: calc/cpmd/cpmd_nose.c, Line: 1045 # File: calc/dl_poly/dlp_atom.c, Line: 308 msgid "%d atoms have been selected !" msgstr "%d atomes ont été sélectionnés !" # File: calc/cpmd/cpmd_nose.c, Line: 1049 # File: calc/dl_poly/dlp_atom.c, Line: 313 msgid "A single atom has been selected !" msgstr "Un seul atome a été sélectionné !" # File: calc/cpmd/cpmd_nose.c, Line: 1053 msgid "Not at single atom has been selected !" msgstr "Pas un seul atome n’a été sélectionné !" # File: calc/cpmd/cpmd_nose.c, Line: 1055 msgid "%s\nis this correct ?" msgstr "%s\nest-ce exact ?" # File: calc/cpmd/cpmd_nose.c, Line: 1216 # File: calc/dl_poly/dlp_ff_match.c, Line: 927 # File: calc/dl_poly/dlp_field.c, Line: 924 msgid "Species" msgstr "Espèces" # File: calc/cpmd/cpmd_nose.c, Line: 1216,1217 msgid "Id. (*)" msgstr "Id. (*)" # File: calc/cpmd/cpmd_nose.c, Line: 1237 msgid "Select atom(s) to construct dummy N°%d" msgstr "Sélectionnez le(s) atome(s) pour du factice N°%d" # File: calc/cpmd/cpmd_nose.c, Line: 1241 msgid "Select atom(s) to fix" msgstr "Sélectionnez les atomes à corriger" # File: calc/cpmd/cpmd_nose.c, Line: 1246 msgid "Select atom(s) and coordinate(s) to fix" msgstr "Sélectionnez le(s) atome(s) et le(s) coordonnée(s) à corriger" # File: calc/cpmd/cpmd_nose.c, Line: 1251 msgid "Add atom(s) to thermostat N°%d" msgstr "Ajouter un ou plusieurs atomes au thermostat N°%d" # File: calc/cpmd/cpmd_nose.c, Line: 1332 msgid " (*) Order of appearance in the input file" msgstr " (*) Ordre d'apparition dans le fichier d'entrée" # File: calc/cpmd/cpmd_nose.c, Line: 1342 msgid "All non-thermostated atom(s)" msgstr "Tous les atomes non-thermostatés" # File: calc/cpmd/cpmd_nose.c, Line: 1342 msgid "All atom(s)" msgstr "Tous les atomes" # File: calc/cpmd/cpmd_nose.c, Line: 1389,1440 # File: calc/dl_poly/dlp_edit.c, Line: 1682,1698,1714,1728,2414,2436,2531,2586,2644,2777 msgid "Not picked yet !" msgstr "Pas encore choisi !" # File: calc/cpmd/cpmd_nose.c, Line: 1394,1445 # File: calc/dl_poly/dlp_edit.c, Line: 1605,1719,2396,2591,2649 msgid "%d atom(s)" msgstr "%d atome(s)" # File: calc/cpmd/cpmd_nose.c, Line: 1436 msgid "Atom(s) selection: " msgstr "Sélection d'atome(s): " # File: calc/cpmd/cpmd_nose.c, Line: 1467 msgid "Configuration for thermostat N°%d: " msgstr "Configuration du thermostat N°%d: " # File: calc/cpmd/cpmd_nose.c, Line: 1510 msgid "Thermostat" msgstr "Thermostat" # File: calc/cpmd/cpmd_nose.c, Line: 1510 msgid "Dummy atom" msgstr "Atome factice" # File: calc/cpmd/cpmd_nose.c, Line: 1610 msgid "Do you really want to add %d thermostat(s) ?" msgstr "Voulez-vous vraiment ajouter %d thermostat(s) ?" # File: calc/cpmd/cpmd_nose.c, Line: 1611 msgid "Adding thermostat(s) ?" msgstr "Ajouter un ou plusieurs thermostats ?" # File: calc/cpmd/cpmd_nose.c, Line: 1626 msgid "It is not possible to create so many thermostats" msgstr "Il n'est pas possible de créer autant de thermostats" # File: calc/cpmd/cpmd_nose.c, Line: 1632 msgid "All atoms arleady have a thermostat assigned" msgstr "Tous les atomes sont déjà thermostatés" # File: calc/cpmd/cpmd_nose.c, Line: 1713 msgid "Number of thermostat(s): " msgstr "Nombre de thermostat(s): " # File: calc/cpmd/cpmd_nose.c, Line: 1717 msgid "Thermostat to configure: " msgstr "Thermostat à configurer: " # File: calc/cpmd/cpmd_nose.c, Line: 1779 msgid "Thermostat type: " msgstr "Type de thermostat: " # File: calc/cpmd/cpmd_nose.c, Line: 1893 msgid "Ionic subsystem thermostat: " msgstr "Thermostat du sous-système ionique: " # File: calc/cpmd/cpmd_nose.c, Line: 1893 msgid "Thermostat: " msgstr "Thermostat: " # File: calc/cpmd/cpmd_nose.c, Line: 1916 msgid "Fictitious electronic subsystem: " msgstr "Sous-système électronique fictif: " # File: calc/cpmd/cpmd_print.c, Line: 65 msgid " This input file was prepared using %s\n\n" msgstr " Ce fichier d'entrée a été préparée en utilisant %s\n\n" # File: calc/cpmd/cpmd_restart.c, Line: 140 msgid "Initialization for the Wavefunction:" msgstr "Initialisation de la fonction d'onde:" # File: calc/cpmd/cpmd_restart.c, Line: 143 msgid "Random" msgstr "Aléatoire" # File: calc/cpmd/cpmd_restart.c, Line: 144 msgid "Atomic Pseudo Wavefunctions" msgstr "Fonctions d'Ondes Pseudo-Atomiques" # File: calc/cpmd/cpmd_restart.c, Line: 145 msgid "Use a RESTART.* File" msgstr "Utiliser un Fichier RESTART.*" # File: calc/cpmd/cpmd_restart.c, Line: 151 msgid "Save the information required for a restart every:" msgstr "Enregistrez les informations nécessaires à un redémarrage tous les:" # File: calc/cpmd/cpmd_restart.c, Line: 158 msgid "Number of restart file(s): " msgstr "Nombre de fichiers de redémarrage: " # File: calc/cpmd/cpmd_restart.c, Line: 165 msgid "Create a trajectory" msgstr "Créer une trajectoire" # File: calc/cpmd/cpmd_restart.c, Line: 170 msgid "Save the atomic coordinates every: " msgstr "Enregistrez les coordonnées atomiques tous les: " # File: calc/cpmd/cpmd_restart.c, Line: 175 msgid "Write XYZ format" msgstr "Écrire au format XYZ" # File: calc/cpmd/cpmd_restart.c, Line: 179 msgid "Write atomic forces" msgstr "Écrire les forces atomiques" # File: calc/cpmd/cpmd_restart.c, Line: 187 msgid "Print extra data in the global output file" msgstr "Imprimer des données supplémentaires dans le fichier de sortie global" # File: calc/cpmd/cpmd_restart.c, Line: 191 msgid "Save the extra information every: " msgstr "Enregistrez les informations supplémentaires tous les: " # File: calc/cpmd/cpmd_restart.c, Line: 196 msgid "Select the information to print:" msgstr "Sélectionnez les informations à imprimer:" # File: calc/dl_poly/dlp_atom.c, Line: 309 msgid "%s\nConfirm this choice and create a new field atom to describe them ?" msgstr "%s\nConfirmer ce choix et créer un nouveau champ atome pour les décrire ?" # File: calc/dl_poly/dlp_atom.c, Line: 314 msgid "%s\nIs this correct, create a new field atom to describe it ?" msgstr "%s\nEst-ce correct, créer un nouvel atome de champ pour le décrire ?" # File: calc/dl_poly/dlp_atom.c, Line: 433 msgid "%d atoms selected !\nIs this correct ?" msgstr "%d atomes sélectionnés !\nEst-ce correct ?" # File: calc/dl_poly/dlp_atom.c, Line: 437 msgid "%d atoms selected !\nOnly a single atom is required !" msgstr "%d atomes sélectionnés !\nUn seul atome suffit !" # File: calc/dl_poly/dlp_atom.c, Line: 446 msgid "A single atom selected !\nIs this correct ?" msgstr "Un seul atome sélectionné !\nEst-ce correct ?" # File: calc/dl_poly/dlp_atom.c, Line: 456 msgid "No atom selected !\nIs this correct ?" msgstr "Aucun atome sélectionné !\nEst-ce correct ?" # File: calc/dl_poly/dlp_atom.c, Line: 664 msgid "Merging with atom N°%d - %s !\nIs this correct ?" msgstr "Fusion avec l'atome N°%d - %s !\nEst-ce correct ?" # File: calc/dl_poly/dlp_atom.c, Line: 736 msgid "Select the field atom to merge atom \"%s\" with" msgstr "Sélectionnez l'atome de champ avec lequel fusionner l'atome \"%s\"" # File: calc/dl_poly/dlp_atom.c, Line: 744 # File: calc/dl_poly/dlp_mol.c, Line: 761 msgid "Viz.3D & Merge with" msgstr "Viz.3D et fusionner avec" # File: calc/dl_poly/dlp_control.c, Line: 117 msgid "Molecular dynamics" msgstr "Dynamique moléculaire" # File: calc/dl_poly/dlp_control.c, Line: 216 msgid "Target temperature for the pseudo bath must be ≥ 1.0 K,\n" "Alternatively set value to 0.0 K to system temperature." msgstr "La température cible pour le pseudo-bain doit être ≥ 1,0K,\n" "Vous pouvez également définir la valeur sur 0,0 K pour la température du système." # File: calc/dl_poly/dlp_control.c, Line: 1590 msgid "The batch size or max. number of particles by batch\n" "must ∈ [1 - 10 000 000]" msgstr "La taille du lot ou max. nombre de particules par lot\n" "doit ∈ [1 - 10 000 000]" # File: calc/dl_poly/dlp_control.c, Line: 112 msgid "System information" msgstr "Informations sur le système" # File: calc/dl_poly/dlp_control.c, Line: 113 msgid "Calculation details" msgstr "Détails du calcul" # File: calc/dl_poly/dlp_control.c, Line: 114 msgid "Non-bonded interactions" msgstr "Interactions non-liées" # File: calc/dl_poly/dlp_control.c, Line: 115 msgid "Equilibration" msgstr "Équilibration" # File: calc/dl_poly/dlp_control.c, Line: 116 msgid "Thermodynamics" msgstr "Thermodynamique" # File: calc/dl_poly/dlp_control.c, Line: 118 msgid "Output options" msgstr "Options de sortie" # File: calc/dl_poly/dlp_control.c, Line: 119 msgid "Computational details" msgstr "Détails du calcul" # File: calc/dl_poly/dlp_control.c, Line: 129 msgid "Gentle Stochastic" msgstr "Stochastique doux" # File: calc/dl_poly/dlp_control.c, Line: 132 msgid "Two temperature model" msgstr "Modèle à deux températures" # File: calc/dl_poly/dlp_control.c, Line: 133 msgid "Inhomogeneous Langevin" msgstr "Langevin inhomogène" # File: calc/dl_poly/dlp_control.c, Line: 142 msgid "Relaxation speed constant (friction):" msgstr "Constante de vitesse de relaxation (frottement):" # File: calc/dl_poly/dlp_control.c, Line: 143 msgid "Relaxation time:" msgstr "Temps de détente:" # File: calc/dl_poly/dlp_control.c, Line: 143 msgid "Softness [0.0 - 1.0]:" msgstr "Douceur [0,0 - 1,0]:" # File: calc/dl_poly/dlp_control.c, Line: 144,145,146,148,149 msgid "Relaxation constant:" msgstr "Constante de détente:" # File: calc/dl_poly/dlp_control.c, Line: 146 msgid "Langevin friction:" msgstr "Frottement Langevin:" # File: calc/dl_poly/dlp_control.c, Line: 147 msgid "Shardlow's splitting order:" msgstr "Ordre de partage de Shardlow:" # File: calc/dl_poly/dlp_control.c, Line: 147 msgid "Global drag coefficient:" msgstr "Coefficient de traînée global:" # File: calc/dl_poly/dlp_control.c, Line: 148,149 msgid "Enhancement of relaxation constant:" msgstr "Amélioration de la constante de relaxation:" # File: calc/dl_poly/dlp_control.c, Line: 148,149 msgid "Cut-off particle velocity for friction enhancement:" msgstr "Vitesse limite des particules pour améliorer la friction:" # File: calc/dl_poly/dlp_control.c, Line: 161 msgid "Thermostat relaxation speed constant (friction):" msgstr "Constante de vitesse de relaxation du thermostat (frottement):" # File: calc/dl_poly/dlp_control.c, Line: 161 msgid "Barostat relaxation speed constant (friction):" msgstr "Constante de vitesse de relaxation du barostat (frottement):" # File: calc/dl_poly/dlp_control.c, Line: 162 msgid "Thermostat relaxation time:" msgstr "Temps de relaxation du thermostat:" # File: calc/dl_poly/dlp_control.c, Line: 162 msgid "Barostat relaxation time:" msgstr "Temps de relaxation du barostat:" # File: calc/dl_poly/dlp_control.c, Line: 162 msgid "Target surface tension:" msgstr "Tension superficielle cible:" # File: calc/dl_poly/dlp_control.c, Line: 167 msgid "Area" msgstr "Zone" # File: calc/dl_poly/dlp_control.c, Line: 167 msgid "Tension" msgstr "Tension" # File: calc/dl_poly/dlp_control.c, Line: 412 msgid "Semi-anisotropic constraint" msgstr "Contrainte semi-anisotrope" # File: calc/dl_poly/dlp_control.c, Line: 467 msgid "Thermostat:" msgstr "Thermostat:" # File: calc/dl_poly/dlp_control.c, Line: 554 msgid "Use pseudo thermal bath" msgstr "Utiliser un pseudo bain thermal" # File: calc/dl_poly/dlp_control.c, Line: 556 msgid "Thermostat type:" msgstr "Type de thermostat:" # File: calc/dl_poly/dlp_control.c, Line: 559 msgid "Langevin + Direct" msgstr "Langevin + Direct" # File: calc/dl_poly/dlp_control.c, Line: 559 msgid "Direct" msgstr "Direct" # File: calc/dl_poly/dlp_control.c, Line: 565 msgid "Thickness:" msgstr "Épaisseur:" # File: calc/dl_poly/dlp_control.c, Line: 570 msgid "Target T°:" msgstr "T° cible:" # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Verlet integrator:" msgstr "Intégrateur Verlet:" # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Number of steps:" msgstr "Nombre de pas:" # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Time step δt:" msgstr "Pas de temps δt:" # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Target pressure:" msgstr "Pression cible:" # File: calc/dl_poly/dlp_control.c, Line: 582 msgid "Shake iterations limit:" msgstr "Limite d'itérations des secousses (Shake):" # File: calc/dl_poly/dlp_control.c, Line: 582 msgid "Shake tolerance:" msgstr "Tolérance aux secousses (Shake):" # File: calc/dl_poly/dlp_control.c, Line: 583 msgid "Rattle iterations limit:" msgstr "Limite d'itérations des vibrations (Rattle):" # File: calc/dl_poly/dlp_control.c, Line: 583 msgid "Rattle tolerance:" msgstr "Tolérance aux vibrations (Rattle):" # File: calc/dl_poly/dlp_control.c, Line: 583 msgid "FIQA iterations limit:" msgstr "Limite d'itérations FIQA:" # File: calc/dl_poly/dlp_control.c, Line: 583 msgid "FIQA quaternions tolerance:" msgstr "Tolérance des quaternions FIQA:" # File: calc/dl_poly/dlp_control.c, Line: 585 msgid "cycle(s)" msgstr "cycle(s)" # File: calc/dl_poly/dlp_control.c, Line: 586 msgid "Maximum time step:" msgstr "Pas de temps maximum:" # File: calc/dl_poly/dlp_control.c, Line: 586 msgid "Maximum distance allowed:" msgstr "Distance maximale autorisée:" # File: calc/dl_poly/dlp_control.c, Line: 586 msgid "Minimum distance allowed:" msgstr "Distance minimale autorisée:" # File: calc/dl_poly/dlp_control.c, Line: 588 msgid "Velocity" msgstr "Vitesse" # File: calc/dl_poly/dlp_control.c, Line: 588 msgid "Leapfrog" msgstr "Dépasser" # File: calc/dl_poly/dlp_control.c, Line: 588 msgid "Fixed" msgstr "Fixé" # File: calc/dl_poly/dlp_control.c, Line: 588 msgid "Variable" msgstr "Variable" # File: calc/dl_poly/dlp_control.c, Line: 635 msgid "Variable time step information" msgstr "Informations sur le pas de temps variable" # File: calc/dl_poly/dlp_control.c, Line: 722 msgid "Initiate impact on particle" msgstr "Initier l'impact sur la particule" # File: calc/dl_poly/dlp_control.c, Line: 729 msgid "Index of the particle to impact: " msgstr "Indice de la particule à impacter: " # File: calc/dl_poly/dlp_control.c, Line: 729 msgid "Time step of impact:" msgstr "Pas de temps d’impact:" # File: calc/dl_poly/dlp_control.c, Line: 729 msgid "Energy of impact:" msgstr "Énergie d'impact:" # File: calc/dl_poly/dlp_control.c, Line: 729 msgid "Direction (from center of mass):" msgstr "Direction (à partir du centre de masse):" # File: calc/dl_poly/dlp_control.c, Line: 730 msgid "nth step" msgstr "nième étape" # File: calc/dl_poly/dlp_control.c, Line: 769 msgid "on %s:" msgstr "sur %s:" # File: calc/dl_poly/dlp_control.c, Line: 830 msgid "Time step details" msgstr "Détails du pas de temps" # File: calc/dl_poly/dlp_control.c, Line: 854 msgid "Bond constraint(s) dynamics:" msgstr "Dynamique de(s) contrainte(s) de liaison:" # File: calc/dl_poly/dlp_control.c, Line: 854 msgid "Rotational motion of rigid body(ies):" msgstr "Mouvement de rotation du(es) corps rigide(s):" # File: calc/dl_poly/dlp_control.c, Line: 890 msgid "Initiate impact on particle" msgstr "Initier l'impact sur les particules" # File: calc/dl_poly/dlp_control.c, Line: 891 msgid "Impact details" msgstr "Détails des impacts" # File: calc/dl_poly/dlp_control.c, Line: 901 msgid "Equilibrate for the first:" msgstr "Équilibrer pour le premier:" # File: calc/dl_poly/dlp_control.c, Line: 901 msgid "Scale temperature:" msgstr "Température de l'échelle:" # File: calc/dl_poly/dlp_control.c, Line: 901 msgid "Cap forces:" msgstr "Forces de plafonnement:" # File: calc/dl_poly/dlp_control.c, Line: 902 msgid "Resample the momenta distribution:" msgstr "Rééchantillonnez la distribution de moments:" # File: calc/dl_poly/dlp_control.c, Line: 902 msgid "Minimize system configuration:" msgstr "Réduire la configuration du système:" # File: calc/dl_poly/dlp_control.c, Line: 903 msgid "Optimize system configuration from start:" msgstr "Optimisez la configuration du système dès le départ:" # File: calc/dl_poly/dlp_control.c, Line: 903 msgid "Perform zero temperature (10 K) optimization" msgstr "Effectuer une optimisation à température nulle (10 K)" # File: calc/dl_poly/dlp_control.c, Line: 903 msgid "Include equilibration data in statistics" msgstr "Inclure les données d'équilibrage dans les statistiques" # File: calc/dl_poly/dlp_control.c, Line: 904,1112,1302,1359,1400 msgid "Every:" msgstr "Chaque:" # File: calc/dl_poly/dlp_control.c, Line: 904 msgid "During:" msgstr "Pendant:" # File: calc/dl_poly/dlp_control.c, Line: 904 msgid "Minimize:" msgstr "Minimiser:" # File: calc/dl_poly/dlp_control.c, Line: 903 msgid "Optimize" msgstr "Optimiser" # File: calc/dl_poly/dlp_control.c, Line: 905,1260,1293,1330,1363,1502,2051 msgid "step(s)" msgstr "pas" # File: calc/dl_poly/dlp_control.c, Line: 906 msgid "Force" msgstr "Force" # File: calc/dl_poly/dlp_control.c, Line: 906 msgid "Energy" msgstr "Énergie" # File: calc/dl_poly/dlp_control.c, Line: 906 msgid "Distance" msgstr "Distance" # File: calc/dl_poly/dlp_control.c, Line: 957 msgid "Minimization parameter must ∈ [ %f - %f ]" msgstr "Le paramètre de minimisation doit ∈ [ %f - %f ]" # File: calc/dl_poly/dlp_control.c, Line: 1023 msgid "Equilibrate" msgstr "Équilibrer" # File: calc/dl_poly/dlp_control.c, Line: 1107 msgid "Defects:" msgstr "Défauts:" # File: calc/dl_poly/dlp_control.c, Line: 1108 msgid "Displacements:" msgstr "Déplacements:" # File: calc/dl_poly/dlp_control.c, Line: 1109 msgid "History:" msgstr "Histoire:" # File: calc/dl_poly/dlp_control.c, Line: 1110 msgid "Atom's MSD:" msgstr "Le DCM d'Atom:" # File: calc/dl_poly/dlp_control.c, Line: 1112 msgid "From step:" msgstr "Du pas:" # File: calc/dl_poly/dlp_control.c, Line: 1112 msgid "Site interstitial cutoff:" msgstr "Coupure du site interstitiel:" # File: calc/dl_poly/dlp_control.c, Line: 1113 msgid "Qualifying cutoff:" msgstr "Seuil de qualification:" # File: calc/dl_poly/dlp_control.c, Line: 1114 msgid "Data level:" msgstr "Niveau de données:" # File: calc/dl_poly/dlp_control.c, Line: 1119 msgid "Radial distribution functions (RDFs):" msgstr "Fonctions de distribution radiale (RDF):" # File: calc/dl_poly/dlp_control.c, Line: 1120 msgid "Velocity autocorrelation functions (VAFs):" msgstr "Fonctions d'autocorrélation de vitesse (VAF):" # File: calc/dl_poly/dlp_control.c, Line: 1121 msgid "Z density profile:" msgstr "Profil de densité Z:" # File: calc/dl_poly/dlp_control.c, Line: 1289 msgid "Dump restart information every:" msgstr "Vider les informations de redémarrage tous les:" # File: calc/dl_poly/dlp_control.c, Line: 1298 msgid "Print system data:" msgstr "Imprimer les données du système:" # File: calc/dl_poly/dlp_control.c, Line: 1299 msgid "Accumulate statistics data:" msgstr "Accumuler des données statistiques:" # File: calc/dl_poly/dlp_control.c, Line: 1300 msgid "Rolling average stack:" msgstr "Pile moyenne mobile:" # File: calc/dl_poly/dlp_control.c, Line: 1364 msgid "Bin size:" msgstr "Taille du bac:" # File: calc/dl_poly/dlp_control.c, Line: 1391 msgid "Ignore time-averaging for the VAFs" msgstr "Ignorer la moyenne temporelle pour les VAF" # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "All:" msgstr "Tous:" # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "Bonds:" msgstr "Liaisons:" # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "Dihedrals:" msgstr "Dièdres:" # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "Inversions:" msgstr "Inversions:" # File: calc/dl_poly/dlp_control.c, Line: 1400 msgid "Num. δ" msgstr "Nbre. δ" # File: calc/dl_poly/dlp_control.c, Line: 1400 msgid "Cutoff = " msgstr "Coupure = " # File: calc/dl_poly/dlp_control.c, Line: 1505 msgid "%sr in [0 : r]" msgstr "%sr dans [0 : r]" # File: calc/dl_poly/dlp_control.c, Line: 1509 msgid "%s° in [-180 : 180]" msgstr "%s° dans [-180 : 180]" # File: calc/dl_poly/dlp_control.c, Line: 1513 msgid "%s° in [0 : 180]" msgstr "%s° dans [0 : 180]" # File: calc/dl_poly/dlp_control.c, Line: 1547 msgid "Set job time:" msgstr "Durée du calcul:" # File: calc/dl_poly/dlp_control.c, Line: 1547 msgid "Set job closure time:" msgstr "Heure de fin du calcul:" # File: calc/dl_poly/dlp_control.c, Line: 1548 msgid "Traditional master I/O" msgstr "E/S maître traditionnelles" # File: calc/dl_poly/dlp_control.c, Line: 1549 msgid "General Input/Output (I/O) read interface:" msgstr "Interface de lecture générale d'entrée/sortie (E/S):" # File: calc/dl_poly/dlp_control.c, Line: 1549 msgid "General Input/Output (I/O) write interface:" msgstr "Interface d'écriture générale d'entrée/sortie (E/S):" # File: calc/dl_poly/dlp_control.c, Line: 1550 msgid "Reader count:" msgstr "Nombre de lecteurs:" # File: calc/dl_poly/dlp_control.c, Line: 1550 msgid "Batch size:" msgstr "Taille du lot:" # File: calc/dl_poly/dlp_control.c, Line: 1550 msgid "Buffer size:" msgstr "Taille du tampon:" # File: calc/dl_poly/dlp_control.c, Line: 1550 msgid "// error check" msgstr "// vérification des erreurs" # File: calc/dl_poly/dlp_control.c, Line: 1780 msgid "Sorted" msgstr "Trié" # File: calc/dl_poly/dlp_control.c, Line: 1781 msgid "Unsorted" msgstr "Non trié" # File: calc/dl_poly/dlp_control.c, Line: 1606 msgid "The buffer size or max. number of ASCII line records by batch\nmust ∈ [100 - 100 000]" msgstr "La taille du tampon ou max. nombre d'enregistrements de ligne ASCII par lot\ndoit ∈ [100 - 100 000]" # File: calc/dl_poly/dlp_control.c, Line: 1754 msgid "Method:" msgstr "Méthode:" # File: calc/dl_poly/dlp_control.c, Line: 1770 msgid "Real precision:" msgstr "Précision réelle:" # File: calc/dl_poly/dlp_control.c, Line: 1778 # File: curve/tab-1.c, Line: 648 msgid "Type:" msgstr "Type:" # File: calc/dl_poly/dlp_control.c, Line: 1825 msgid "Random number generator seeds:" msgstr "Graines du générateur de nombres aléatoires :" # File: calc/dl_poly/dlp_control.c, Line: 1841 msgid "Limits to 2 the number of processors in z direction for slab simulations" msgstr "Limite à 2 le nombre de processeurs dans le sens z pour les simulations de dalles" # File: calc/dl_poly/dlp_control.c, Line: 1848 msgid "Direct Coulomb sum" msgstr "Somme coulombienne directe" # File: calc/dl_poly/dlp_control.c, Line: 1848 msgid "Distance dependent dielectric Coulomb sum" msgstr "Somme de Coulomb diélectrique dépendant de la distance" # File: calc/dl_poly/dlp_control.c, Line: 1849 msgid "Ewald sum (auto)" msgstr "Somme d'Ewald (auto)" # File: calc/dl_poly/dlp_control.c, Line: 1849 msgid "Ewald sum" msgstr "Somme d'Ewald" # File: calc/dl_poly/dlp_control.c, Line: 1850 msgid "Reaction field electrostatics" msgstr "Électrostatique du champ de réaction" # File: calc/dl_poly/dlp_control.c, Line: 1850 msgid "Reaction field with Fennel damping" msgstr "Champ de réaction avec amortissement Fennel" # File: calc/dl_poly/dlp_control.c, Line: 1851 msgid "Reaction field with Fennel damping (auto)" msgstr "Champ de réaction avec amortissement Fennel (auto)" # File: calc/dl_poly/dlp_control.c, Line: 1852 msgid "Force-shifted Coulomb sum" msgstr "Somme de Coulomb décalée par force" # File: calc/dl_poly/dlp_control.c, Line: 1852 msgid "Force-shifted Coulomb sum with Fennel damping" msgstr "Somme de Coulomb décalée par force avec amortissement Fennel" # File: calc/dl_poly/dlp_control.c, Line: 1853 msgid "Force-shifted Coulomb sum with Fennel damping (auto)" msgstr "Somme de Coulomb décalée par force avec amortissement Fennel (auto)" # File: calc/dl_poly/dlp_control.c, Line: 1877,2181 msgid "Cutoff must be > 0.0 Å" msgstr "Le seuil doit être > 0,0 Å" # File: calc/dl_poly/dlp_control.c, Line: 1890 msgid "Padding must be ≥ min(0.05, 0.5%rcut) Å" msgstr "Le remplissage doit être ≥ min(0,05, 0,5%rcoupe) Å" # File: calc/dl_poly/dlp_control.c, Line: 1895 msgid "Padding must be > 0.0 Å" msgstr "Le remplissage doit être > 0,0 Å" # File: calc/dl_poly/dlp_control.c, Line: 1917 msgid "Precision must ∈ [10-20 - 0.5]" msgstr "La précision doit ∈ [10-20 - 0,5]" # File: calc/dl_poly/dlp_control.c, Line: 1989 msgid "Precision:" msgstr "Précision:" # File: calc/dl_poly/dlp_control.c, Line: 2010 msgid "Ewald convergence parameter:" msgstr "Paramètre de convergence d'Ewald:" # File: calc/dl_poly/dlp_control.c, Line: 2018 msgid "Maximum k vector index in directions:" msgstr "Indice vectoriel k maximum dans les directions:" # File: calc/dl_poly/dlp_control.c, Line: 2037 msgid "Fennell damping parameter (α):" msgstr "Paramètre d'amortissement Fennell (α):" # File: calc/dl_poly/dlp_control.c, Line: 2047 msgid "Evaluate k-space contribution to the Ewald sum every:" msgstr "Évaluez la contribution de l'espace k à la somme d'Ewald tous les:" # File: calc/dl_poly/dlp_control.c, Line: 2112 msgid "Evaluate electrostatics interactions" msgstr "Évaluer les interactions électrostatiques" # File: calc/dl_poly/dlp_control.c, Line: 2120 msgid "Long range interaction cutoff [rcut]:" msgstr "Seuil d'interaction à longue portée [rcut]:" # File: calc/dl_poly/dlp_control.c, Line: 2126 msgid "Add padding to rcut:" msgstr "Ajoutez un remplissage à rcut:" # File: calc/dl_poly/dlp_control.c, Line: 2135 msgid "Use extended coulombic exclusion" msgstr "Utiliser l'exclusion coulombienne étendue" # File: calc/dl_poly/dlp_control.c, Line: 2138 msgid "Evaluation method:" msgstr "Méthode d'évaluation:" # File: calc/dl_poly/dlp_control.c, Line: 2157 msgid "Functional" msgstr "Fonctionnelle" # File: calc/dl_poly/dlp_control.c, Line: 2240 msgid "Evaluate van der Waals interactions" msgstr "Évaluer les interactions de van der Waals" # File: calc/dl_poly/dlp_control.c, Line: 2249 msgid "Short range interaction cutoff:" msgstr "Seuil d’interaction à courte portée:" # File: calc/dl_poly/dlp_control.c, Line: 2257 msgid "Enforce direct calculation of van der Waals interactions" msgstr "Appliquer le calcul direct des interactions de van der Waals" # File: calc/dl_poly/dlp_control.c, Line: 2261 msgid "Apply force-shifting (contributions smoothly fall to zero near rcut)" msgstr "Appliquer un changement de force (les contributions tombent progressivement à zéro près de rcut)" # File: calc/dl_poly/dlp_control.c, Line: 2265 msgid "Apply mixing rule (when needed and if possible generate cross species interactions)" msgstr "Appliquer la règle de mélange (si nécessaire et si possible générer des interactions entre espèces)" # File: calc/dl_poly/dlp_control.c, Line: 2272 msgid "Mixing rule:" msgstr "Règle de mélange:" # File: calc/dl_poly/dlp_control.c, Line: 2327 msgid "Enforce direct calculation of metal interactions by explicit potentials, does not work with *EAM* potentials" msgstr "Appliquer le calcul direct des interactions métalliques par des potentiels explicites, ne fonctionne pas avec les potentiels *EAM*" # File: calc/dl_poly/dlp_control.c, Line: 2332 msgid "Switch the default embedding functions, F, from F(ρ) to F(√ρ)" msgstr "Basculez les fonctions d'intégration par défaut, F, de F(ρ) à F(√ρ)" # File: calc/dl_poly/dlp_control.c, Line: 2359 msgid "Subcelling threshold density must be ≥ 1.0" msgstr "Le seuil densité de sous-cellule doit être ≥ 1.0" # File: calc/dl_poly/dlp_control.c, Line: 2377 msgid "Relative dielectric constant εr" msgstr "Constante diélectrique relative εr" # File: calc/dl_poly/dlp_control.c, Line: 2378 msgid "Allowed local variation of system density:" msgstr "Variation locale autorisée de la densité du système:" # File: calc/dl_poly/dlp_control.c, Line: 2379 msgid "Ignore the particle indices in CONFIG file" msgstr "Ignorer les indices de particules dans le fichier CONFIG" # File: calc/dl_poly/dlp_control.c, Line: 2380 msgid "Ignore strict checks, hide warnings and assume safe simulation parameters" msgstr "Ignorer les contrôles stricts, masquer les avertissements et utilser des paramètres de simulation sûrs" # File: calc/dl_poly/dlp_control.c, Line: 2381 msgid "Skip detailed topology reporting during read of FIELD file in output" msgstr "Ignorer les rapports de topologie détaillés lors de la lecture du fichier FIELD" # File: calc/dl_poly/dlp_control.c, Line: 2382 msgid "Ignore center of mass removal during the calculation" msgstr "Ignorer la suppression du centre de masse pendant le calcul" # File: calc/dl_poly/dlp_control.c, Line: 2383 msgid "Set tolerance for relaxed shell model:" msgstr "Définir la tolérance pour le modèle de coque détendu:" # File: calc/dl_poly/dlp_control.c, Line: 2384 msgid "Set the subcelling threshold density of particles per link cell:" msgstr "Densité seuil de sous-cellule des particules par cellule de lien:" # File: calc/dl_poly/dlp_control.c, Line: 2385 msgid "Create an expanded version of the current model:" msgstr "Créez une version étendue du modèle actuel:" # File: calc/dl_poly/dlp_control.c, Line: 2386 msgid "Restart calculation:" msgstr "Recommencer le calcul:" # File: calc/dl_poly/dlp_control.c, Line: 2512 msgid "Continue current simulation" msgstr "Continuer la simulation en cours" # File: calc/dl_poly/dlp_control.c, Line: 2513 msgid "Start new simulation from older run without temperature reset" msgstr "Démarrer une nouvelle simulation à partir d'un travail plus ancien sans réinitialisation de la température" # File: calc/dl_poly/dlp_control.c, Line: 2514 msgid "Start new simulation from older run with temperature reset" msgstr "Démarrer une nouvelle simulation à partir d'un travail plus ancien avec réinitialisation de la température" # File: calc/dl_poly/dlp_control.c, Line: 2539 msgid "Global options:" msgstr "Options globales:" # File: calc/dl_poly/dlp_control.c, Line: 2541 msgid "Restart options:" msgstr "Options de redémarrage:" # File: calc/dl_poly/dlp_control.c, Line: 2545 msgid "Intra-molecular probability denisty function (PDF) analysis:" msgstr "Analyse de la fonction de densité de probabilité intramoléculaire (PDF):" # File: calc/dl_poly/dlp_control.c, Line: 2547 msgid "Overall analysis:" msgstr "Analyse globale:" # File: calc/dl_poly/dlp_control.c, Line: 2551 msgid "van der Waals (Non-bonded short range):" msgstr "van der Waals (courte portée non-liée):" # File: calc/dl_poly/dlp_control.c, Line: 2553 msgid "Electrostatics (Non-bonded long range):" msgstr "Électrostatique (longue portée non-liée):" # File: calc/dl_poly/dlp_control.c, Line: 2555 msgid "Metallic interactions:" msgstr "Interactions métalliques:" # File: calc/dl_poly/dlp_control.c, Line: 2559 msgid "Equilibration:" msgstr "Équilibration:" # File: calc/dl_poly/dlp_control.c, Line: 2563 msgid "Thermodynamics:" msgstr "Thermodynamique:" # File: calc/dl_poly/dlp_control.c, Line: 2567 msgid "Molecular dynamics:" msgstr "Dynamique moléculaire:" # File: calc/dl_poly/dlp_control.c, Line: 2571 msgid "Output information:" msgstr "Informations de sortie:" # File: calc/dl_poly/dlp_control.c, Line: 2573 msgid "Trajectory file(s):" msgstr "Fichier(s) de trajectoire:" # File: calc/dl_poly/dlp_control.c, Line: 2575 msgid "Restart file:" msgstr "Fichier de redémarrage:" # File: calc/dl_poly/dlp_control.c, Line: 2579 msgid "Job options:" msgstr "Options du calcul:" # File: calc/dl_poly/dlp_control.c, Line: 2581 msgid "I/O options:" msgstr "Options d'E/S:" # File: calc/dl_poly/dlp_control.c, Line: 2583 msgid "Other options:" msgstr "Autres options:" # File: calc/dl_poly/dlp_edit.c, Line: 610 msgid "In %s, 12-6 non-bonded interactions are evaluated using: \n" "%s\n" "A and B are calculated using Ɛi/j and r0i/j provided by the force field parameters." msgstr "Dans %s, les interactions non-liées 12-6 sont évaluées à l'aide de : \n" "%s\n" "A et B sont calculés à l'aide de Ɛi/j et r0i/j fournis par les paramètres du champ de force." # File: calc/dl_poly/dlp_edit.c, Line: 619 msgid "In %s, 12-6 non-bonded interactions are evaluated using: \n" "%s\n" "A and B are calculated using Ai/j and Bi/j provided by the force field parameters." msgstr "Dans %s, les interactions non-liées 12-6 sont évaluées à l'aide de : \n" "%s\n" "A et B sont calculés à l'aide de Ai/j et Bi/j fournis par les paramètres du champ de force." # File: calc/dl_poly/dlp_edit.c, Line: 686 msgid "Are you sure to change the type of Tersoff potential ?\n" "Tersoff (ter) and KIHS (kihs) forms cannot be mixed\n" "Therefore this choice will affect all Tersoff potential(s).\n" "Any previous parameters will be erased !" msgstr "Etes-vous sûr de changer le type de potentiel Tersoff ?\n" "Les formes Tersoff (ter) et KIHS (kihs) ne peuvent pas être mélangés\n" "Ce choix affectera donc tous le(s) potentiel(s) de Tersoff.\n" "Tous les paramètres précédents seront effacés !" # File: calc/dl_poly/dlp_edit.c, Line: 1589 msgid "The atom(s) above will be described\n" "in the force field using the parameters\n" "of the %s field atom.\n" msgstr "Le ou les atomes ci-dessus seront décrits\n" "dans le champ de force en utilisant les paramètres\n" "de l'atome du champ %s.\n" # File: calc/dl_poly/dlp_edit.c, Line: 2807 msgid "* this will be used to adjust bonding, angles, etc ... accordingly,\n" " providing that some parameters can be found in the force field data.\n" " Please note that comments are directly imported from the force field file." msgstr "* cela servira à ajuster le collage, les angles, etc... en conséquence,\n" " à condition que certains paramètres puissent être trouvés dans les données du champ de force.\n" " Veuillez noter que les commentaires sont directement importés du fichier de champ de force." # File: calc/dl_poly/dlp_edit.c, Line: 2836 msgid "* Available parameters with matching chemical species,\n" " %s force field energy related parameters in: %s \n" " if required conversion to FIELD file energy unit will be performed upon selection.\n" " Please note that comments are directly imported from the force field file.\n" msgstr "* Paramètres disponibles avec les espèces chimiques correspondantes,\n" " Paramètres liés à l'énergie du champ de force %s dans : %s \n" " si nécessaire, la conversion en unité énergétique du fichier FIELD sera effectuée lors de la sélection.\n" " Veuillez noter que les commentaires sont directement importés du fichier de champ de force.\n" # File: calc/dl_poly/dlp_edit.c, Line: 543 msgid "Single terms:" msgstr "Termes uniques:" # File: calc/dl_poly/dlp_edit.c, Line: 579 msgid "Cross terms with atom:" msgstr "Termes croisés avec atome:" # File: calc/dl_poly/dlp_edit.c, Line: 609 # File: calc/dl_poly/dlp_field.c, Line: 1199 msgid "Tabulated" msgstr "Tableau" # File: calc/dl_poly/dlp_edit.c, Line: 618 msgid "In %s, non-bonded interactions are evaluated using: \n%s\n" "Therefore the parameters provided by the force field are incompatible with the DL-POLY options." msgstr "Dans %s, les interactions non-liées sont évaluées à l'aide de : \n%s\n" "Les paramètres fournis par le champ de force sont donc incompatibles avec les options DL-POLY." # File: calc/dl_poly/dlp_edit.c, Line: 634 # File: calc/dl_poly/dlp_ff_match.c, Line: 1038 msgid "%s\nScaled 1-4 exclusion parameters, provided by the %s force field, are ignored." msgstr "%s\nLes paramètres d'exclusion échelonnés 1-4, fournis par le champ de force %s, sont ignorés." # File: calc/dl_poly/dlp_edit.c, Line: 651 msgid "Urey-Bradley terms provided by the %s force field are ignored.\n" msgstr "Les termes Urey-Bradley fournis par le champ de force %s sont ignorés.\n" # File: calc/dl_poly/dlp_edit.c, Line: 669 # File: calc/dl_poly/dlp_field.c, Line: 162 msgid "External field" msgstr "Champ externe" # File: calc/dl_poly/dlp_edit.c, Line: 690 msgid "Change Tersoff potential ?!" msgstr "Changer le potentiel Tersoff ?!" # File: calc/dl_poly/dlp_edit.c, Line: 1184 msgid "Weight (1)" msgstr "Poids (1)" # File: calc/dl_poly/dlp_edit.c, Line: 1185 msgid "Field atom" msgstr "Atome de champ" # File: calc/dl_poly/dlp_edit.c, Line: 1185 msgid "Field molecule(s)" msgstr "Molécule(s) de champ" # File: calc/dl_poly/dlp_edit.c, Line: 1198 msgid "Please select the new atom(s)" msgstr "Veuillez sélectionner le ou les nouveaux atomes" # File: calc/dl_poly/dlp_edit.c, Line: 1203 msgid "Please select the atom(s) to freeze / unfreeze" msgstr "Veuillez sélectionner le(s) atome(s) à geler / dégeler" # File: calc/dl_poly/dlp_edit.c, Line: 1208 msgid "Please select the core atom" msgstr "Veuillez sélectionner l'atome de cœur" # File: calc/dl_poly/dlp_edit.c, Line: 1213 msgid "Please select the atom(s) to shell" msgstr "Veuillez sélectionner le ou les atomes de la coquille" # File: calc/dl_poly/dlp_edit.c, Line: 1218 msgid "Please select the first atom" msgstr "Veuillez sélectionner le premier atome" # File: calc/dl_poly/dlp_edit.c, Line: 1223 msgid "Please select the second atom" msgstr "Veuillez sélectionner le deuxième atome" # File: calc/dl_poly/dlp_edit.c, Line: 1228 msgid "Please select the atom(s) in the first unit" msgstr "Veuillez sélectionner le(s) atome(s) dans la première unité" # File: calc/dl_poly/dlp_edit.c, Line: 1231 msgid "Please select the atom(s) in the second unit" msgstr "Veuillez sélectionner le(s) atome(s) dans la deuxième unité" # File: calc/dl_poly/dlp_edit.c, Line: 1234 msgid "Please select the atom(s) in the rigid unit" msgstr "Veuillez sélectionner le(s) atome(s) dans l'unité rigide" # File: calc/dl_poly/dlp_edit.c, Line: 1238 msgid "Please select the tethered atom" msgstr "Veuillez sélectionner l'atome attaché" # File: calc/dl_poly/dlp_edit.c, Line: 1245 msgid "Please select the type of field atom" msgstr "Veuillez sélectionner le type d'atome de champ" # File: calc/dl_poly/dlp_edit.c, Line: 1249 msgid "Please select the first type of field atom" msgstr "Veuillez sélectionner le premier type d'atome de champ" # File: calc/dl_poly/dlp_edit.c, Line: 1253 msgid "Please select the second type of field atom" msgstr "Veuillez sélectionner le deuxième type d'atome de champ" # File: calc/dl_poly/dlp_edit.c, Line: 1256 msgid "Please select the third type of field atom" msgstr "Veuillez sélectionner le troisième type d'atome de champ" # File: calc/dl_poly/dlp_edit.c, Line: 1259 msgid "Please select the fourth type of field atom" msgstr "Veuillez sélectionner le quatrième type d'atome de champ" # File: calc/dl_poly/dlp_edit.c, Line: 1582 msgid " (1) if all 0.0 then atomic weight(s) will be used by DL-POLY" msgstr " (1) si tous 0,0 alors le(s) poids atomique(s) seront utilisés par DL-POLY" # File: calc/dl_poly/dlp_edit.c, Line: 2283 msgid "%s parameter(s)" msgstr "paramètre(s) %s" # File: calc/dl_poly/dlp_edit.c, Line: 2293 msgid "Core atom: " msgstr "Atome de cœur: " # File: calc/dl_poly/dlp_edit.c, Line: 2293 msgid "Shell atom: " msgstr "Atome de coquille: " # File: calc/dl_poly/dlp_edit.c, Line: 2293 msgid "Selection: " msgstr "Sélection: " # File: calc/dl_poly/dlp_edit.c, Line: 2294 msgid "Mass:" msgstr "Masse:" # File: calc/dl_poly/dlp_edit.c, Line: 2296 msgid "First atom: " msgstr "Premier atome: " # File: calc/dl_poly/dlp_edit.c, Line: 2296 msgid "Second atom: " msgstr "Deuxième atome: " # File: calc/dl_poly/dlp_edit.c, Line: 2296 msgid "Third atom: " msgstr "Troisième atome: " # File: calc/dl_poly/dlp_edit.c, Line: 2296 msgid "Fourth atom: " msgstr "Quatrième atome: " # File: calc/dl_poly/dlp_edit.c, Line: 2297 msgid "First unit: " msgstr "Première unité: " # File: calc/dl_poly/dlp_edit.c, Line: 2297 msgid "Second unit: " msgstr "Deuxième unité: " # File: calc/dl_poly/dlp_edit.c, Line: 2307 msgid "\tMolecule: \t%s" msgstr "\tMolécule: \t%s" # File: calc/dl_poly/dlp_edit.c, Line: 2317 msgid "\tAtom: \t\t%s" msgstr "\tAtome:\t\t%s" # File: calc/dl_poly/dlp_edit.c, Line: 2330 msgid "Field parameters:" msgstr "Paramètres de champ:" # File: calc/dl_poly/dlp_edit.c, Line: 2335 # File: calc/dl_poly/dlp_ff_match.c, Line: 1563,1585 msgid "Manual" msgstr "Manuel" # File: calc/dl_poly/dlp_edit.c, Line: 2336 msgid "Automatic" msgstr "Automatique" # File: calc/dl_poly/dlp_edit.c, Line: 2343 msgid "Force field type *:" msgstr "Type de champ de force *:" # File: calc/dl_poly/dlp_edit.c, Line: 2365 msgid "Name: " msgstr "Nom: " # File: calc/dl_poly/dlp_edit.c, Line: 2383 msgid "Charge: " msgstr "Charge: " # File: calc/dl_poly/dlp_edit.c, Line: 2392 msgid "Frozen: " msgstr "Figé: " # File: calc/dl_poly/dlp_edit.c, Line: 2404 msgid "\tCore-Shell N°%d" msgstr "\tCœur-Coquille N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2443 msgid "Selected !" msgstr "Sélectionné !" # File: calc/dl_poly/dlp_edit.c, Line: 2447 msgid "%d atom(s) selected !" msgstr "%d atome(s) sélectionné(s) !" # File: calc/dl_poly/dlp_edit.c, Line: 2467 msgid "Selected Atoms" msgstr "Atomes Sélectionnés" # File: calc/dl_poly/dlp_edit.c, Line: 2511 msgid "Use non-bonded: " msgstr "Utiliser non-lié: " # File: calc/dl_poly/dlp_edit.c, Line: 2521 msgid "\tBond constraint N°%d" msgstr "\tContrainte de liaison N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2547 msgid "Av. distance (1): " msgstr "Av. distance (1): " # File: calc/dl_poly/dlp_edit.c, Line: 2576 msgid "\tMean force potential N°%d" msgstr "\tPotentiel de force moyen N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2602 msgid "Av. d1-2 (1): " msgstr "Av. d1-2 (1) : " # File: calc/dl_poly/dlp_edit.c, Line: 2632 msgid "\tRigid unit N°%d" msgstr "\tUnité rigide N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2638 msgid "Atom(s): " msgstr "Atome(s) : " # File: calc/dl_poly/dlp_edit.c, Line: 2663 msgid "\tTethered atom N°%d" msgstr "\tAtome attaché N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2669 msgid "Atom: " msgstr "Atome: " # File: calc/dl_poly/dlp_edit.c, Line: 2704 msgid "\t%s type N°%d\n\tField atoms: " msgstr "\tN° de type %s%d\n\tAtomes de champ : " # File: calc/dl_poly/dlp_edit.c, Line: 2707 msgid "%s and " msgstr "%s et " # File: calc/dl_poly/dlp_edit.c, Line: 2716 msgid "%s\n\tBetween atoms: " msgstr "%s\n\tEntre atomes : " # File: calc/dl_poly/dlp_edit.c, Line: 2768 msgid "Tersoff atom: " msgstr "Atome de Tersoff : " # File: calc/dl_poly/dlp_edit.c, Line: 2800 msgid "Visualize in the model: " msgstr "Visualisez dans le modèle: " # File: calc/dl_poly/dlp_edit.c, Line: 2816 msgid "Use to create force field: " msgstr "Utiliser pour créer un champ de force : " # File: calc/dl_poly/dlp_edit.c, Line: 2827 # File: calc/dl_poly/dlp_ff_match.c, Line: 1012 # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "DL_POLY internal units" msgstr "Unités internes DL_POLY" # File: calc/dl_poly/dlp_edit.c, Line: 2828 msgid "Field parameters *:" msgstr "Paramètres du champ * :" # File: calc/dl_poly/dlp_edit.c, Line: 2844 msgid "Potential: " msgstr "Potentiel: " # File: calc/dl_poly/dlp_edit.c, Line: 2887 msgid " (1) average distance between the 2 atoms\n\tas measured in the 3D model" msgstr " (1) distance moyenne entre les 2 atomes\n\ttel que mesuré dans le modèle 3D" # File: calc/dl_poly/dlp_edit.c, Line: 2896 msgid " (1) average distance between the barycenters\n\tof units 1 and 2 as measured in the model" msgstr " (1) distance moyenne entre les barycentres\n\tdes unités 1 et 2 telles que mesurées dans le modèle" # File: calc/dl_poly/dlp_edit.c, Line: 3005 msgid "Please enter name for new molecule N°%d" msgstr "Veuillez saisir le nom de la nouvelle molécule N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 3007 msgid "Molecule name:" msgstr "Nom de la molécule:" # File: calc/dl_poly/dlp_edit.c, Line: 3017 msgid "Please enter name for molecule N°%d" msgstr "Veuillez saisir le nom de la molécule N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 3308 msgid "Delete %s N°%d from molecule %s, is this correct ?" msgstr "Supprimer %s N°%d de la molécule %s, est-ce correct ?" # File: calc/dl_poly/dlp_edit.c, Line: 3312 msgid "Delete %s, is this correct ?" msgstr "Supprimez %s, est-ce correct ?" # File: calc/dl_poly/dlp_ff_match.c, Line: 1014 msgid "\t(*) Each force field element can be tuned separately, if not this default parameters will be used.\n" "\t(1) %s energy unit: %s, if required conversion to FIELD file energy unit will be performed upon selection.\n" "\t(2) Restraint parameters are duplicates of the non-restraint parameters.\n" msgstr "\t(*) Chaque élément du champ de force peut être réglé séparément, sinon ces paramètres par défaut seront utilisés.\n" "\t(1) Unité d'énergie %s : %s, si nécessaire, la conversion en unité d'énergie du fichier FIELD sera effectuée lors de la sélection.\n" "\t(2) Les paramètres de contrainte sont des doublons des paramètres sans contrainte.\n" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 msgid "Property" msgstr "Propriété" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 msgid "parameters (1)" msgstr "paramètres (1)" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 msgid "Actual parameters (1)" msgstr "Paramètres réels (1)" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 msgid "Update ?" msgstr "Mise à jour ?" # File: calc/dl_poly/dlp_ff_match.c, Line: 1020 msgid "%s\t(%d) Urey-Bradley terms provided by the %s force field are ignored.\n" msgstr "%s\t(%d) Les termes Urey-Bradley fournis par le champ de force %s sont ignorés.\n" # File: calc/dl_poly/dlp_ff_match.c, Line: 1025 msgid "%s\t(%d) In %s, 12-6 non-bonded interactions are evaluated using:" msgstr "%s\t(%d) Dans %s, les interactions non-liées 12-6 sont évaluées avec:" # File: calc/dl_poly/dlp_ff_match.c, Line: 1035 msgid "%s\nA and B are calculated using Ɛi/j and r0i/j provided by the force field parameters." msgstr "%s\nA et B sont calculés à l'aide de Ɛi/j et r0i/j fournis par les paramètres du champ de force." # File: calc/dl_poly/dlp_ff_match.c, Line: 1043 msgid "%s\nA and B are calculated using Ai/j and Bi/j provided by the force field parameters." msgstr "%s\nA et B sont calculés à l'aide de Ai/j et Bi/j fournis par les paramètres du champ de force." # File: calc/dl_poly/dlp_ff_match.c, Line: 1398 msgid "Update FIELD file with %s parameters using \"%s\" atom(s)" msgstr "Mettre à jour le fichier FIELD avec les paramètres %s à l'aide des atomes \"%s\"" # File: calc/dl_poly/dlp_ff_match.c, Line: 1568 msgid "Atom (1 and 2) %s" msgstr "Atome (1 et 2) %s" # File: calc/dl_poly/dlp_ff_match.c, Line: 1572 msgid "Atom (%d) %s" msgstr "Atome (%d) %s" # File: calc/dl_poly/dlp_field.c, Line: 1077 msgid "\t (2) Quartic (anharmonic) force constant of the core-shell spring in [%s Å-4]" " usually k2 >> k4" msgstr "\t (2) Constante de force quartique (anharmonique) du ressort cœur-coquille en [%s Å-4] " " généralement k2 >> k4" # File: calc/dl_poly/dlp_field.c, Line: 3962 msgid "\t * in the FIELD file %s(s) appear in the %s section.\n" "\t They are presented separately in this assistant for clarity purposes only." msgstr "\t * dans le fichier FIELD %s(s) apparaissent dans la section %s.\n" "\t Ils sont présentés séparément dans cet assistant uniquement à des fins de clarté." # File: calc/dl_poly/dlp_field.c, Line: 4359 msgid "Providing that the force field information was already saved once\n" "the previous data could still be retrieved by canceling the assistant." msgstr "À condition que les informations sur le champ de force aient déjà été enregistrées\n" "les données précédentes sauvegardées pourront toujours être récupérées en annulant l'assistant." # File: calc/dl_poly/dlp_field.c, Line: 4818 msgid " This assistant will help you to setup a %s \n" "calculation using %s 3D model as starting point" msgstr " Cet assistant vous aidera à configurer un %s \n" "calcul en utilisant le modèle 3D %s comme point de départ" # File: calc/dl_poly/dlp_field.c, Line: 141,164 msgid "Energy unit" msgstr "Unité d'énergie" # File: calc/dl_poly/dlp_field.c, Line: 144 msgid "Core-shell unit(s)" msgstr "Unité(s) cœur-coquille" # File: calc/dl_poly/dlp_field.c, Line: 145 msgid "Constraint bond(s)" msgstr "Contrainte(s) de liaison(s)" # File: calc/dl_poly/dlp_field.c, Line: 146 msgid "Mean force potential(s)" msgstr "Potentiel(s) de force moyen(s)" # File: calc/dl_poly/dlp_field.c, Line: 147 msgid "Rigid unit(s)" msgstr "Unité(s) rigide(s)" # File: calc/dl_poly/dlp_field.c, Line: 148 msgid "Tethering potential(s)" msgstr "Potentiel(s) de connexion(s)" # File: calc/dl_poly/dlp_field.c, Line: 149 msgid "Flexible chemical bond(s)" msgstr "Liaison(s) chimique(s) flexible(s)" # File: calc/dl_poly/dlp_field.c, Line: 150,932 msgid "Bond restraint(s)" msgstr "Contrainte(s) de liaison(s)" # File: calc/dl_poly/dlp_field.c, Line: 151 msgid "Bond angle(s)" msgstr "Angle(s) de liaison(s)" # File: calc/dl_poly/dlp_field.c, Line: 152 msgid "Angular restraint(s)" msgstr "Contrainte(s) angulaire(s)" # File: calc/dl_poly/dlp_field.c, Line: 153 msgid "Dihedral angle(s)" msgstr "Angle(s) dièdre(s)" # File: calc/dl_poly/dlp_field.c, Line: 154,936 msgid "Torsional restraint(s)" msgstr "Contrainte(s) de torsion" # File: calc/dl_poly/dlp_field.c, Line: 155 msgid "Improper angle(s)" msgstr "Angle(s) impropre" # File: calc/dl_poly/dlp_field.c, Line: 156 msgid "Inversion angle(s)" msgstr "Angle(s) d'inversion" # File: calc/dl_poly/dlp_field.c, Line: 157 msgid "van der Waals potential(s)" msgstr "potentiel(s) de van der Waals" # File: calc/dl_poly/dlp_field.c, Line: 158 msgid "Metal potential(s)" msgstr "Potentiel(s) métallique(s)" # File: calc/dl_poly/dlp_field.c, Line: 159 msgid "Tersoff Potential(s)" msgstr "Potentiel(s) de Tersoff" # File: calc/dl_poly/dlp_field.c, Line: 160 msgid "Three-body potential(s)" msgstr "Potentiel(s) à trois corps" # File: calc/dl_poly/dlp_field.c, Line: 161 msgid "Four-body potential(s)" msgstr "Potentiel(s) à quatre corps" # File: calc/dl_poly/dlp_field.c, Line: 167 msgid "Core-shell unit" msgstr "Unité cœur-coquille" # File: calc/dl_poly/dlp_field.c, Line: 168 msgid "Constraint bond" msgstr "Contrainte de liaison" # File: calc/dl_poly/dlp_field.c, Line: 169 msgid "Mean force potential" msgstr "Potentiel de force moyen" # File: calc/dl_poly/dlp_field.c, Line: 170 msgid "Rigid unit" msgstr "Unité rigide" # File: calc/dl_poly/dlp_field.c, Line: 171 msgid "Tethering potential" msgstr "Potentiel de connexion" # File: calc/dl_poly/dlp_field.c, Line: 172 msgid "Flexible chemical bond" msgstr "Liaison chimique flexible" # File: calc/dl_poly/dlp_field.c, Line: 173,932 msgid "Bond restraint" msgstr "Contrainte de liaison" # File: calc/dl_poly/dlp_field.c, Line: 174 msgid "Bond angle" msgstr "Angle de liaison" # File: calc/dl_poly/dlp_field.c, Line: 175 msgid "Angular restraint" msgstr "Contrainte angulaire" # File: calc/dl_poly/dlp_field.c, Line: 176 msgid "Dihedral angle" msgstr "Angle dièdre" # File: calc/dl_poly/dlp_field.c, Line: 177,936 msgid "Torsional restraint" msgstr "Contrainte de torsion" # File: calc/dl_poly/dlp_field.c, Line: 178 msgid "Improper angle" msgstr "Angle impropre" # File: calc/dl_poly/dlp_field.c, Line: 179 msgid "Inversion angle" msgstr "Angle d'inversion" # File: calc/dl_poly/dlp_field.c, Line: 180,202 msgid "van der Waals potential" msgstr "potentiel de van der Waals" # File: calc/dl_poly/dlp_field.c, Line: 158,181 msgid "Metal potential" msgstr "Potentiel métallique" # File: calc/dl_poly/dlp_field.c, Line: 182,204 msgid "Tersoff Potential" msgstr "Potentiel de Tersoff" # File: calc/dl_poly/dlp_field.c, Line: 183 msgid "Three-body potential" msgstr "Potentiel à trois corps" # File: calc/dl_poly/dlp_field.c, Line: 184 msgid "Four-body potential" msgstr "Potentiel à quatre corps" # File: calc/dl_poly/dlp_field.c, Line: 189 msgid "core-shell unit(s)" msgstr "unité(s) cœur-coquille" # File: calc/dl_poly/dlp_field.c, Line: 190 msgid "constraint bond(s)" msgstr "contrainte(s) de liaison(s)" # File: calc/dl_poly/dlp_field.c, Line: 191 msgid "mean force potential(s)" msgstr "potentiel(s) de force moyen" # File: calc/dl_poly/dlp_field.c, Line: 192 msgid "rigid unit(s)" msgstr "unité(s) rigide(s)" # File: calc/dl_poly/dlp_field.c, Line: 193 msgid "tethering potential(s)" msgstr "potentiel(s) d'attache" # File: calc/dl_poly/dlp_field.c, Line: 194 msgid "flexible chemical bond(s)" msgstr "liaison(s) chimique(s) flexible(s)" # File: calc/dl_poly/dlp_field.c, Line: 195 msgid "bond restraint(s)" msgstr "contrainte(s) de liaison(s)" # File: calc/dl_poly/dlp_field.c, Line: 196 msgid "bond angle(s)" msgstr "angle(s) de liaison(s)" # File: calc/dl_poly/dlp_field.c, Line: 197 msgid "angular restraint(s)" msgstr "contrainte(s) angulaire(s)" # File: calc/dl_poly/dlp_field.c, Line: 198 msgid "dihedral angle(s)" msgstr "angle(s) dièdre(s)" # File: calc/dl_poly/dlp_field.c, Line: 199 msgid "torsional restraint(s)" msgstr "contrainte(s) de torsion(s)" # File: calc/dl_poly/dlp_field.c, Line: 200 msgid "improper angle(s)" msgstr "angle(s) impropre(s)" # File: calc/dl_poly/dlp_field.c, Line: 201 msgid "inversion angle(s)" msgstr "angle(s) d'inversion" # File: calc/dl_poly/dlp_field.c, Line: 203 msgid "metal potential(s)" msgstr "potentiel métallique(s)" # File: calc/dl_poly/dlp_field.c, Line: 205 msgid "three-body potential(s)" msgstr "potentiel(s) à trois corps" # File: calc/dl_poly/dlp_field.c, Line: 206 msgid "four-body potential(s)" msgstr "potentiel(s) à quatre corps" # File: calc/dl_poly/dlp_field.c, Line: 207 msgid "external field(s)" msgstr "champ(s) externe(s)" # File: calc/dl_poly/dlp_field.c, Line: 189 msgid "core-shell unit" msgstr "unité cœur-coquille" # File: calc/dl_poly/dlp_field.c, Line: 190 msgid "constraint bond" msgstr "contrainte de liaison" # File: calc/dl_poly/dlp_field.c, Line: 191 msgid "mean force potential" msgstr "potentiel de force moyen" # File: calc/dl_poly/dlp_field.c, Line: 192 msgid "rigid unit" msgstr "unité rigide" # File: calc/dl_poly/dlp_field.c, Line: 193 msgid "tethering potential" msgstr "potentiel d'attache" # File: calc/dl_poly/dlp_field.c, Line: 194 msgid "flexible chemical bond" msgstr "liaison chimique flexible" # File: calc/dl_poly/dlp_field.c, Line: 195 msgid "bond restraint" msgstr "contrainte de liaison" # File: calc/dl_poly/dlp_field.c, Line: 196 msgid "bond angle" msgstr "angle de liaison" # File: calc/dl_poly/dlp_field.c, Line: 197 msgid "angular restraint" msgstr "contrainte angulaire" # File: calc/dl_poly/dlp_field.c, Line: 198 msgid "dihedral angle" msgstr "angle dièdre" # File: calc/dl_poly/dlp_field.c, Line: 199 msgid "torsional restraint" msgstr "contrainte de torsion" # File: calc/dl_poly/dlp_field.c, Line: 200 msgid "improper angle" msgstr "angle impropre" # File: calc/dl_poly/dlp_field.c, Line: 201 msgid "inversion angle" msgstr "angle d'inversion" # File: calc/dl_poly/dlp_field.c, Line: 203 msgid "metal potential" msgstr "potentiel métallique" # File: calc/dl_poly/dlp_field.c, Line: 205 msgid "three-body potential" msgstr "potentiel à trois corps" # File: calc/dl_poly/dlp_field.c, Line: 206 msgid "four-body potential" msgstr "potentiel à quatre corps" # File: calc/dl_poly/dlp_field.c, Line: 207 msgid "external field" msgstr "champ externe" # File: calc/dl_poly/dlp_field.c, Line: 231 msgid "of molecule(s)" msgstr "de molécule(s)" # File: calc/dl_poly/dlp_field.c, Line: 232 msgid "of atom(s)" msgstr "d'atome(s)" # File: calc/dl_poly/dlp_field.c, Line: 233 msgid "of core-shell unit(s)" msgstr "d'unité(s) cœur-coquille" # File: calc/dl_poly/dlp_field.c, Line: 234 msgid "of constraint bond(s)" msgstr "de contrainte(s) de liaison(s)" # File: calc/dl_poly/dlp_field.c, Line: 235 msgid "of mean force potential(s)" msgstr "de potentiel(s) de force moyen" # File: calc/dl_poly/dlp_field.c, Line: 236 msgid "of rigid unit(s)" msgstr "d'unité(s) rigide(s)" # File: calc/dl_poly/dlp_field.c, Line: 237 msgid "of tethering potential(s)" msgstr "de potentiel(s) d'attache" # File: calc/dl_poly/dlp_field.c, Line: 238 msgid "of flexible chemical bond(s)" msgstr "de liaison(s) chimique(s) flexible(s)" # File: calc/dl_poly/dlp_field.c, Line: 239 msgid "of bond restraint(s)" msgstr "de contrainte(s) de liaison(s)" # File: calc/dl_poly/dlp_field.c, Line: 240 msgid "of bond angle(s)" msgstr "d'angle(s) de liaison(s)" # File: calc/dl_poly/dlp_field.c, Line: 241 msgid "of angular restraint(s)" msgstr "de contrainte(s) angulaire(s)" # File: calc/dl_poly/dlp_field.c, Line: 242 msgid "of dihedral angle(s)" msgstr "d'angle(s) dièdre(s)" # File: calc/dl_poly/dlp_field.c, Line: 243 msgid "of torsional restraint(s)" msgstr "de contrainte(s) de torsion(s)" # File: calc/dl_poly/dlp_field.c, Line: 244 msgid "of improper angle(s)" msgstr "d'angle(s) impropre(s)" # File: calc/dl_poly/dlp_field.c, Line: 245 msgid "of inversion angle(s)" msgstr "d'angle(s) d'inversion" # File: calc/dl_poly/dlp_field.c, Line: 247 msgid "of metal potential(s)" msgstr "de potentiel métallique(s)" # File: calc/dl_poly/dlp_field.c, Line: 249 msgid "of three-body potential(s)" msgstr "de potentiel(s) à trois corps" # File: calc/dl_poly/dlp_field.c, Line: 250 msgid "of four-body potential(s)" msgstr "de potentiel(s) à quatre corps" # File: calc/dl_poly/dlp_field.c, Line: 251 msgid "of external field(s)" msgstr "de champ(s) externe(s)" # File: calc/dl_poly/dlp_field.c, Line: 253 msgid "of the molecule" msgstr "de la molécule" # File: calc/dl_poly/dlp_field.c, Line: 254 msgid "of the atom" msgstr "de l'atome" # File: calc/dl_poly/dlp_field.c, Line: 255 msgid "of the core-shell unit" msgstr "de l'unité cœur-coquille" # File: calc/dl_poly/dlp_field.c, Line: 256 msgid "of the constraint bond" msgstr "de la contrainte de liaison" # File: calc/dl_poly/dlp_field.c, Line: 257 msgid "of the mean force potential" msgstr "du potentiel de force moyen" # File: calc/dl_poly/dlp_field.c, Line: 258 msgid "of the rigid unit" msgstr "de l'unité rigide" # File: calc/dl_poly/dlp_field.c, Line: 259 msgid "of the tethering potential" msgstr "du potentiel d'attache" # File: calc/dl_poly/dlp_field.c, Line: 260 msgid "of the flexible chemical bond" msgstr "de la liaison chimique flexible" # File: calc/dl_poly/dlp_field.c, Line: 261 msgid "of the bond restraint" msgstr "de la contrainte de liaison" # File: calc/dl_poly/dlp_field.c, Line: 262 msgid "of the bond angle" msgstr "de l'angle de liaison" # File: calc/dl_poly/dlp_field.c, Line: 263 msgid "of the angular restraint" msgstr "de la contrainte angulaire" # File: calc/dl_poly/dlp_field.c, Line: 264 msgid "of the dihedral angle" msgstr "de l'angle dièdre" # File: calc/dl_poly/dlp_field.c, Line: 265 msgid "of the torsional restraint" msgstr "de la contrainte de torsion" # File: calc/dl_poly/dlp_field.c, Line: 266 msgid "of the improper angle" msgstr "de l'angle impropre" # File: calc/dl_poly/dlp_field.c, Line: 267 msgid "of the inversion angle" msgstr "de l'angle d'inversion" # File: calc/dl_poly/dlp_field.c, Line: 269 msgid "of the metal potential" msgstr "du potentiel métallique" # File: calc/dl_poly/dlp_field.c, Line: 271 msgid "of the three-body potential" msgstr "du potentiel à trois corps" # File: calc/dl_poly/dlp_field.c, Line: 272 msgid "of the four-body potential" msgstr "du potentiel à quatre corps" # File: calc/dl_poly/dlp_field.c, Line: 273 msgid "of the external field" msgstr "du champ externe" # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "Electron-Volts" msgstr "Électrons-volts" # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "k-calories per mol" msgstr "k-calories par mole" # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "k-Joules per mol" msgstr "k-Joules par mol" # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "Kelvin per Boltzmann" msgstr "Kelvin pour Boltzmann" # File: calc/dl_poly/dlp_field.c, Line: 309 msgid "Harmonic" msgstr "Harmonique" # File: calc/dl_poly/dlp_field.c, Line: 309 msgid "Restraint" msgstr "Retenue" # File: calc/dl_poly/dlp_field.c, Line: 309 msgid "Quartic" msgstr "Quartique" # File: calc/dl_poly/dlp_field.c, Line: 310 msgid "Shifted FENE" msgstr "FENE décalé" # File: calc/dl_poly/dlp_field.c, Line: 310 msgid "MM3 bond stretch" msgstr "Étirement de la liaison MM3" # File: calc/dl_poly/dlp_field.c, Line: 310 msgid "Tabulated" msgstr "Tabulé" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Truncated harmonic" msgstr "Harmonique tronquée" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Screened harmonic" msgstr "Harmonique filtrée" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Screened Vessal" msgstr "Navire blindé" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Truncated Vessal" msgstr "Navire tronqué" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Harmonic cosine" msgstr "Cosinus harmonique" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Cosine" msgstr "Cosinus" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "MM3 stretch-bend" msgstr "MM3 étirable-plié" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Compass stretch-stretch" msgstr "Boussole extensible-étirable" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Compass stretch-bend" msgstr "Boussole extensible-courbée" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Compass all terms" msgstr "Compas tous les termes" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "MM3 angle bend" msgstr "Coude d'angle MM3" # File: calc/dl_poly/dlp_field.c, Line: 314 msgid "Triple cosine" msgstr "Triple cosinus" # File: calc/dl_poly/dlp_field.c, Line: 314 msgid "Fluorinated Ryckaert-Bellemans" msgstr "Ryckaert-Bellemans fluoré" # File: calc/dl_poly/dlp_field.c, Line: 314 msgid "OPLS torsion" msgstr "Torsion OPLS" # File: calc/dl_poly/dlp_field.c, Line: 317 msgid "Planar" msgstr "Planaire" # File: calc/dl_poly/dlp_field.c, Line: 317 msgid "Extended Planar" msgstr "Planaire étendu" # File: calc/dl_poly/dlp_field.c, Line: 317 msgid "Calcite" msgstr "calcite" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "LJ cohesive" msgstr "LJ cohérent" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "12-10 H-bond" msgstr "12-10 H-liaison" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "Shifted force n-m" msgstr "Force décalée n-m" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "Shifted Weeks-Chandler-Anderson" msgstr "Semaines décalées-Chandler-Anderson" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "Standard DPD" msgstr "DPD standard" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "14-7 buffered AMOEBA FF" msgstr "AMOEBA FF tamponné 14-7" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "Morse modified" msgstr "Morse modifié" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "ZBL mixed with Morse" msgstr "ZBL mélangé avec Morse" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "ZBL mixed with Buckingham" msgstr "ZBL mélangé avec Buckingham" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "Lennard-Jones tapered with MDF" msgstr "Lennard-Jones effilé avec MDF" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "Buckingham tapered with MDF" msgstr "Buckingham effilé avec MDF" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "12-6 Lennard-Jones tapered with MDF" msgstr "12-6 Lennard-Jones effilé avec MDF" # File: calc/dl_poly/dlp_field.c, Line: 320 msgid "Extended Finis-Sinclair" msgstr "Finis-Sinclair étendu" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "H-bond" msgstr "Liaison H" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Electric field" msgstr "Champ électrique" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Oscillating Shear" msgstr "Cisaille oscillante" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Continuous Shear" msgstr "Cisaillement continu" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Gravitational field" msgstr "Champ gravitationnel" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Magnetic field" msgstr "Champ magnétique" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Containing Sphere" msgstr "Sphère contenante" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Repulsive Wall" msgstr "Mur répulsif" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "X-Piston" msgstr "X-Piston" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Molecule in HR Zone" msgstr "Molécule dans la zone HR" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "HR Zone (pull out)" msgstr "Zone HR (retirable)" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "HR Zone (pull in)" msgstr "Zone RH (tirez-vous)" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Osc. Electric Field" msgstr "Osc. Champ électrique" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Umbrella sampling, harm. constant" msgstr "Échantillonnage de parapluie, préjudice. constante" # File: calc/dl_poly/dlp_field.c, Line: 291 msgid "electron" msgstr "électron" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "COMPASS class2 force field" msgstr "Champ de force COMPASS classe 2" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Finite extensible nonlinear elastic (FENE)" msgstr "Élastique non-linéaire extensible fini (FENE)" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "FENE with variable size particles" msgstr "FENE à particules de taille variable" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "GROMOS force field" msgstr "Champ de force GROMOS" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Shifted harmonic" msgstr "Harmonique décalée" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Shifted truncated harmonic" msgstr "Harmonique tronquée décalée" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "MM3 anharmonic" msgstr "MM3 anharmonique" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Nonlinear" msgstr "Non linéaire" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Finite extensible nonlinear elastic DNA" msgstr "ADN élastique non-linéaire extensible fini" # File: calc/dl_poly/dlp_field.c, Line: 328 msgid "Finite extensible nonlinear elastic DNA (2)" msgstr "ADN élastique non-linéaire extensible fini (2)" # File: calc/dl_poly/dlp_field.c, Line: 328 msgid "Finite extensible nonlinear elastic RNA" msgstr "ARN élastique non-linéaire extensible fini" # File: calc/dl_poly/dlp_field.c, Line: 328 msgid "Breakable quartic" msgstr "Quartique cassable" # File: calc/dl_poly/dlp_field.c, Line: 328 msgid "Special bond exclusions for 1-5 pairs and beyond" msgstr "Exclusions spéciales de liaison pour paires 1-5 et au-delà" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "CHARMM force field" msgstr "Champ de force CHARMM" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "COMPASS class2 force field - 6th order" msgstr "Champ de force COMPASS classe 2 - 6ème ordre" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "Cosine with Buckingham term between 1-3" msgstr "Cosinus avec terme de Buckingham entre 1 et 3" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "Difference of cosines" msgstr "Différence de cosinus" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "DREIDING force field" msgstr "Champ de force DREIDING" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "Cosine with a shift" msgstr "Cosinus avec un décalage" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "Cosine with a shift and exponential term in spring" msgstr "Cosinus avec décalage et terme exponentiel au printemps" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Cosine with squared term" msgstr "Cosinus avec terme carré" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Cross term coupling angle and bond length" msgstr "Angle de couplage des termes croisés et longueur de liaison" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Dipole orientation" msgstr "Orientation dipolaire" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Fourier (multiple cosines)" msgstr "Fourier (cosinus multiples)" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Fourier (single cosine)" msgstr "Fourier (cosinus simple)" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Combination of the harmonic (SDK)" msgstr "Combinaison de l'harmonique (SDK)" # File: calc/dl_poly/dlp_field.c, Line: 333 msgid "CHARMM force field with force switching" msgstr "Champ de force CHARMM avec commutation de force" # File: calc/dl_poly/dlp_field.c, Line: 333 msgid "Helix" msgstr "Hélix" # File: calc/dl_poly/dlp_field.c, Line: 333 msgid "Harmonic with 5 terms" msgstr "Harmonique à 5 termes" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "Harmonic with N terms" msgstr "Harmonique avec N termes" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "OPLS force field" msgstr "Champ de force OPLS" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "Quadratic" msgstr "Quadratique" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "Spherical" msgstr "Sphérique" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "Tabulated with analytic cutoff" msgstr "Tabulé avec seuil analytique" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Cosine squared" msgstr "Cosinus carré" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "CVFF force field" msgstr "Champ de force CVFF" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Distance between atom planes" msgstr "Distance entre les plans atomiques" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Out-of-the plane distance" msgstr "Distance hors du plan" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Planar conformation" msgstr "Forme planaire" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Squared distance harmonic" msgstr "Harmonique de distance carrée" # File: calc/dl_poly/dlp_field.c, Line: 337 msgid "Harmonic with Wilson Decius out-of-plane" msgstr "Harmonique avec Wilson Decius hors plan" # File: calc/dl_poly/dlp_field.c, Line: 427,499 msgid "Interpolation style" msgstr "Style d'interpolation" # File: calc/dl_poly/dlp_field.c, Line: 555 msgid "weighting factor" msgstr "facteur de pondération" # File: calc/dl_poly/dlp_field.c, Line: 924 msgid "Viz. 3D" msgstr "Vue. 3D" # File: calc/dl_poly/dlp_field.c, Line: 924 msgid "Viz. Atom num." msgstr "Vue Numéro d'Atome." # File: calc/dl_poly/dlp_field.c, Line: 925 msgid "Mass" msgstr "Masse" # File: calc/dl_poly/dlp_field.c, Line: 925 msgid "Charge" msgstr "Charge" # File: calc/dl_poly/dlp_field.c, Line: 925 msgid "Frozen" msgstr "Congelé" # File: calc/dl_poly/dlp_field.c, Line: 926 msgid "Core Id" msgstr "Identifiant de base" # File: calc/dl_poly/dlp_field.c, Line: 926 msgid "Shell" msgstr "Coquille" # File: calc/dl_poly/dlp_field.c, Line: 926 msgid "Use (3)" msgstr "Utiliser (3)" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At.1 Id" msgstr "At.1 Identifiant" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At.2 Id" msgstr "At.2 Identifiant" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "Length [Å]" msgstr "Longueur [Å]" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "av. d [Å] (1)" msgstr "av. d [Å] (1)" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "Use (2)" msgstr "Utiliser (2)" # File: calc/dl_poly/dlp_field.c, Line: 928 msgid "av. d12 [Å] (1)" msgstr "av. d12 [Å] (1)" # File: calc/dl_poly/dlp_field.c, Line: 928 msgid "Unit Id" msgstr "Identifiant de l'unité" # File: calc/dl_poly/dlp_field.c, Line: 928 msgid "At. Id" msgstr "À. Identifiant" # File: calc/dl_poly/dlp_field.c, Line: 928 msgid "Weight (2)" msgstr "Poids (2)" # File: calc/dl_poly/dlp_field.c, Line: 929 msgid "Atom(s) in unit" msgstr "Atome(s) dans l'unité" # File: calc/dl_poly/dlp_field.c, Line: 929 msgid "List of atom(s)" msgstr "Liste des atomes" # File: calc/dl_poly/dlp_field.c, Line: 929 msgid "Use (1)" msgstr "Utiliser (1)" # File: calc/dl_poly/dlp_field.c, Line: 159 msgid "Potential" msgstr "Potentiel" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At.1" msgstr "À.1" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At.2" msgstr "À.2" # File: calc/dl_poly/dlp_field.c, Line: 933 msgid "At.3" msgstr "À.3" # File: calc/dl_poly/dlp_field.c, Line: 935 msgid "At.4" msgstr "À.4" # File: calc/dl_poly/dlp_field.c, Line: 943 msgid "At.1*" msgstr "À.1*" # File: calc/dl_poly/dlp_field.c, Line: 942 msgid "At.2*" msgstr "À.2*" # File: calc/dl_poly/dlp_field.c, Line: 931 msgid "Potential (3)" msgstr "Potentiel (3)" # File: calc/dl_poly/dlp_field.c, Line: 348 msgid "Angle(s)" msgstr "Angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 933 msgid "av. θ [°] (1)" msgstr "av. θ [°] (1)" # File: calc/dl_poly/dlp_field.c, Line: 350 msgid "Dihedral(s)" msgstr "Dièdre(s)" # File: calc/dl_poly/dlp_field.c, Line: 935 msgid "av. ϕ [°] (1)" msgstr "av. ϕ [°] (1)" # File: calc/dl_poly/dlp_field.c, Line: 352 msgid "Improper(s)" msgstr "Impropre(s)" # File: calc/dl_poly/dlp_field.c, Line: 353 msgid "Inversion(s)" msgstr "Inversion(s)" # File: calc/dl_poly/dlp_field.c, Line: 939 msgid "Spec.1" msgstr "Spéc.1" # File: calc/dl_poly/dlp_field.c, Line: 939 msgid "Spec.2" msgstr "Spéc.2" # File: calc/dl_poly/dlp_field.c, Line: 939 msgid "VdW potential" msgstr "Potentiel VdW" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At." msgstr "À." # File: calc/dl_poly/dlp_field.c, Line: 941 msgid "Tersoff Pot." msgstr "Pot Tersoff." # File: calc/dl_poly/dlp_field.c, Line: 942 msgid "Three-body Pot." msgstr "Pot à trois corps." # File: calc/dl_poly/dlp_field.c, Line: 943 msgid "Four-body Pot." msgstr "Pot à quatre corps." # File: calc/dl_poly/dlp_field.c, Line: 944 msgid "Field type" msgstr "Type de champ" # File: calc/dl_poly/dlp_field.c, Line: 934 msgid "Angle" msgstr "Angle" # File: calc/dl_poly/dlp_field.c, Line: 934 msgid "Angle restraint" msgstr "Retenue d'angle" # File: calc/dl_poly/dlp_field.c, Line: 935 msgid "Dihedral" msgstr "Dièdre" # File: calc/dl_poly/dlp_field.c, Line: 937 msgid "Improper" msgstr "Incorrect" # File: calc/dl_poly/dlp_field.c, Line: 938 msgid "Inversion" msgstr "Inversion" # File: calc/dl_poly/dlp_field.c, Line: 1160 msgid "\t (1) Force constant of the core-shell spring in [%s Å-2]" msgstr "\t (1) Constante de force du ressort cœur-coquille en [%s Å-2]" # File: calc/dl_poly/dlp_field.c, Line: 1267 msgid "Default: %s (%s)" msgstr "Par défaut : %s (%s)" # File: calc/dl_poly/dlp_field.c, Line: 1766 msgid "the %d different fragment(s) in molecule %s\n" msgstr "le(s) %d fragment(s) différent(s) dans la molécule %s\n" # File: calc/dl_poly/dlp_field.c, Line: 1771 msgid "the system\n" msgstr "le système\n" # File: calc/dl_poly/dlp_field.c, Line: 1777 msgid "%seach contains the following %d type(s) of atom" msgstr "%scontient le(s) %d type(s) d'atome suivant(s)" # File: calc/dl_poly/dlp_field.c, Line: 1782 msgid "%sdo not contains any core-shell unit" msgstr "%sne contient aucune unité cœur-coquille" # File: calc/dl_poly/dlp_field.c, Line: 1786 msgid "%seach contains the following %d core-shell unit" msgstr "%scontient l'unité cœur-coquille %d suivante" # File: calc/dl_poly/dlp_field.c, Line: 1792 msgid "%sdo not contains any constraint" msgstr "%sne contient aucune contrainte" # File: calc/dl_poly/dlp_field.c, Line: 1796 msgid "%seach contains the following %d constraint(s)" msgstr "%scontient la ou les %d contrainte(s) suivante(s)" # File: calc/dl_poly/dlp_field.c, Line: 1802 msgid "%sdo not contains any mean force potential" msgstr "%sne contient aucun potentiel de force moyenne" # File: calc/dl_poly/dlp_field.c, Line: 1806 msgid "%seach contains the following %d type(s) of mean force potential(s)" msgstr "%scontient le(s) type(s) %d de potentiel(s) de force moyenne suivant(s)" # File: calc/dl_poly/dlp_field.c, Line: 1812 msgid "%sdo not contains any rigid unit" msgstr "%sne contient aucune unité rigide" # File: calc/dl_poly/dlp_field.c, Line: 1816 msgid "%seach contains the following %d rigid unit(s)" msgstr "%scontient le(s) %d unité(s) rigide(s) suivante(s)" # File: calc/dl_poly/dlp_field.c, Line: 1822 msgid "%sdo not contains any tethering potential(s)" msgstr "%sne contient aucun potentiel de partage de connexion" # File: calc/dl_poly/dlp_field.c, Line: 1826 msgid "%seach contains the following %d tethering potential(s)" msgstr "%seach contient le(s) potentiel(s) de connexion %d suivant(s)" # File: calc/dl_poly/dlp_field.c, Line: 1832 msgid "the force field do not contains any external field(s)" msgstr "le champ de force ne contient aucun champ externe" # File: calc/dl_poly/dlp_field.c, Line: 1836 msgid "the force field contains the following %d external field(s)" msgstr "le champ de force contient le(s) champ(s) externe(s) %d suivant(s)" # File: calc/dl_poly/dlp_field.c, Line: 1846 msgid "%sdo not contains any %s *" msgstr "%sne contient aucun %s *" # File: calc/dl_poly/dlp_field.c, Line: 1850 msgid "%s contains the following %d type(s) %s *" msgstr "%s contient les %d type(s) suivant(s) %s *" # File: calc/dl_poly/dlp_field.c, Line: 1846 msgid "%sdo not contains any %s" msgstr "%sne contient aucun %s" # File: calc/dl_poly/dlp_field.c, Line: 1850 msgid "%s contains the following %d type(s) %s" msgstr "%s contient le(s) type(s) %d suivants %s" # File: calc/dl_poly/dlp_field.c, Line: 1871 msgid "the force field do not contains any %s" msgstr "le champ de force ne contient aucun %s" # File: calc/dl_poly/dlp_field.c, Line: 1875 msgid "the force field contains the following %d %s" msgstr "le champ de force contient les %d %s suivant(s)" # File: calc/dl_poly/dlp_field.c, Line: 2202 msgid "Change energy unit ?" msgstr "Changer d'unité d'énergie ?" # File: calc/dl_poly/dlp_field.c, Line: 2203 msgid "Yes" msgstr "Oui" # File: calc/dl_poly/dlp_field.c, Line: 2206 msgid "Change the energy unit ?\nThe value of all field parameters that are energy related (listed below) will be scaled accordingly." msgstr "Changer l'unité d'énergie ?\nLa valeur de tous les paramètres de champ liés à l'énergie (répertoriés ci-dessous) sera mise à l'échelle en conséquence." # File: calc/dl_poly/dlp_field.c, Line: 2207 msgid "List of energy related parameters in your FIELD file:\n" msgstr "Liste des paramètres liés à l'énergie dans votre fichier FIELD :\n" # File: calc/dl_poly/dlp_field.c, Line: 2322 msgid "Please select the %s:" msgstr "Veuillez sélectionner le %s :" # File: calc/dl_poly/dlp_field.c, Line: 2340 msgid "Please select the component(s) of the force field:" msgstr "Veuillez sélectionner le(s) composant(s) du champ de force :" # File: calc/dl_poly/dlp_field.c, Line: 2343 msgid " Intra-molecular interaction(s):" msgstr " Interaction(s) intra-moléculaire(s) :" # File: calc/dl_poly/dlp_field.c, Line: 2345 msgid "Use multiple molecule(s)" msgstr "Utiliser plusieurs molécules" # File: calc/dl_poly/dlp_field.c, Line: 2360 msgid "Use %s" msgstr "Utiliser %s" # File: calc/dl_poly/dlp_field.c, Line: 2371 msgid "Non-bonded interaction(s)" msgstr "Interactions non-liées" # File: calc/dl_poly/dlp_field.c, Line: 1267 msgid "Default: %s" msgstr "Par défaut : %s" # File: calc/dl_poly/dlp_field.c, Line: 2564 msgid "Atom N°%d: \"%s\"" msgstr "Atome N°%d : \"%s\"" # File: calc/dl_poly/dlp_field.c, Line: 2664 msgid "Core-Shell N°%d: Atom %d (%s) - " msgstr "Cœur-Coquille N°%d: Atome %d (%s) - " # File: calc/dl_poly/dlp_field.c, Line: 2669 msgid "Core-Shell N°%d: %s - " msgstr "Cœur-Coque N°%d: %s - " # File: calc/dl_poly/dlp_field.c, Line: 2690 msgid "Constrained Bond N°%d: Atom %d (%s) - " msgstr "Liaison contrainte N°%d: Atome %d (%s) - " # File: calc/dl_poly/dlp_field.c, Line: 2695 msgid "Constrained Bond N°%d: %s - " msgstr "Liaison contrainte N°%d: %s - " # File: calc/dl_poly/dlp_field.c, Line: 2713 msgid "Mean Force Potential N°%d" msgstr "Potentiel de Force Moyenne N°%d" # File: calc/dl_poly/dlp_field.c, Line: 2721 msgid "Rigid Unit N°%d: %d Atom(s)" msgstr "Unité rigide N°%d : %d Atome(s)" # File: calc/dl_poly/dlp_field.c, Line: 2729 msgid "Tethering Potential N°%d" msgstr "Potentiel de connexion N°%d" # File: calc/dl_poly/dlp_field.c, Line: 2767 msgid "%s - NONE" msgstr "%s - AUCUN" # File: calc/dl_poly/dlp_field.c, Line: 2709 msgid "Edit Name: \"%s\"" msgstr "Éditer le Nom : \"%s\"" # File: calc/dl_poly/dlp_field.c, Line: 2801 msgid "Edit properties %s" msgstr "Éditer les propriétés %s" # File: calc/dl_poly/dlp_field.c, Line: 2817 msgid "Add a new %s" msgstr "Ajouter un nouveau %s" # File: calc/dl_poly/dlp_field.c, Line: 2831 msgid "Remove %s" msgstr "Supprimer %s" # File: calc/dl_poly/dlp_field.c, Line: 2958 msgid "Add new molecule" msgstr "Ajouter une nouvelle molécule" # File: calc/dl_poly/dlp_field.c, Line: 2967 msgid "Remove molecule %s from force field" msgstr "Supprimer la molécule %s du champ de force" # File: calc/dl_poly/dlp_field.c, Line: 2983 msgid "Created new force field atom from %s atom(s)" msgstr "Création d'un nouvel atome de champ de force à partir de %s" # File: calc/dl_poly/dlp_field.c, Line: 2998 msgid "Remove atom %s from force field molecule" msgstr "Supprimer l'atome %s de la molécule du champ de force" # File: calc/dl_poly/dlp_field.c, Line: 3699 msgid "Parameter(s)" msgstr "Paramètres" # File: calc/dl_poly/dlp_field.c, Line: 3867 msgid "Please select molecule: " msgstr "Veuillez sélectionner une molécule: " # File: calc/dl_poly/dlp_field.c, Line: 3898 msgid "Number of isolated molecular fragments: " msgstr "Nombre de fragments moléculaires isolés: " # File: calc/dl_poly/dlp_field.c, Line: 3902 msgid "\tEach of these fragments can be described separately in the force field." msgstr "\tChacun de ces fragments peut être décrit séparément dans le champ de force." # File: calc/dl_poly/dlp_field.c, Line: 3905 msgid "Number of distinct molecules: " msgstr "Nombre de molécules distinctes: " # File: calc/dl_poly/dlp_field.c, Line: 3909 msgid "Number of molecules in the force field: " msgstr "Nombre de molécules dans le champ de force: " # File: calc/dl_poly/dlp_field.c, Line: 3935,3939 msgid "Properties %s: " msgstr "Propriétés %s: " # File: calc/dl_poly/dlp_field.c, Line: 3969 msgid "\t * the potential will be calculated by the sum of the 3 possible inversion terms between atoms 1 (center), 2, 3 and 4." msgstr "\t * le potentiel sera calculé par la somme des 3 termes d'inversion possibles entre les atomes 1 (centre), 2, 3 et 4." # File: calc/dl_poly/dlp_field.c, Line: 3973 msgid "\t (1) average value for the force field element as measured in the model." msgstr "\t (1) valeur moyenne de l'élément du champ de force telle que mesurée dans le modèle." # File: calc/dl_poly/dlp_field.c, Line: 3976 msgid "\t (2) only the selected element(s) will be used to create the force field." msgstr "\t (2) seuls les éléments sélectionnés seront utilisés pour créer le champ de force." # File: calc/dl_poly/dlp_field.c, Line: 3979 msgid "\t (3) each force field element can be tuned separately, if not the Default parameters will be used." msgstr "\t (3) chaque élément du champ de force peut être réglé séparément, sinon les paramètres Par défaut seront utilisés." # File: calc/dl_poly/dlp_field.c, Line: 3991 msgid "\t (3) only the selected element(s) will be used to create the force field." msgstr "\t (3) seuls les éléments sélectionnés seront utilisés pour créer le champ de force." # File: calc/dl_poly/dlp_field.c, Line: 4006 msgid "\t (1) average distance between the barycenters of units 1 and 2 as measured in the model." msgstr "\t (1) distance moyenne entre les barycentres des unités 1 et 2 telle que mesurée dans le modèle." # File: calc/dl_poly/dlp_field.c, Line: 4009 msgid "\t (2) if all 0.0 then atomic weight(s) will be used by DL-POLY." msgstr "\t (2) si tous 0,0 alors le(s) poids atomique(s) seront utilisés par DL-POLY." # File: calc/dl_poly/dlp_field.c, Line: 4018 msgid "\t (1) only the selected element(s) will be used to create the force field." msgstr "\t (1) seuls les éléments sélectionnés seront utilisés pour créer le champ de force." # File: calc/dl_poly/dlp_field.c, Line: 4295 msgid "Initialize force field using: " msgstr "Créez le champ de force avec: " # File: calc/dl_poly/dlp_field.c, Line: 4355 msgid "Clean all force field parameter(s) ?" msgstr "Nettoyer tous les paramètres du champ de force ?" # File: calc/dl_poly/dlp_field.c, Line: 4430 msgid "Select the component(s) of the force field" msgstr "Composante(s) du champ de force" # File: calc/dl_poly/dlp_field.c, Line: 4444 msgid " Finalize the creation of the %s input file(s) now !" msgstr " Finalisez la création du ou des fichiers d'entrée %s maintenant !" # File: calc/dl_poly/dlp_field.c, Line: 4450 msgid "Create the LAMMPS input file(s) now !" msgstr "Créez le(s) fichier(s) d'entrée LAMMPS maintenant !" # File: calc/dl_poly/dlp_field.c, Line: 4450 msgid "Create the DL-POLY input file(s) now !" msgstr "Créez le(s) fichier(s) d'entrée DL-POLY maintenant !" # File: calc/dl_poly/dlp_field.c, Line: 4457 msgid "Atomic Species as Field Atoms" msgstr "Espèces Chimiques comme Atomes de Champ" # File: calc/dl_poly/dlp_field.c, Line: 4458 msgid "Atomic Species and Total Coordinations as Field Atoms" msgstr "Espèces Chim. et Coord. Totales comme Atomes de Champ" # File: calc/dl_poly/dlp_field.c, Line: 4459 msgid "Atomic Species and Partial Coordinations as Field Atoms" msgstr "Espèces Chim. et Coord. Partielles comme Atomes de Champ" # File: calc/dl_poly/dlp_field.c, Line: 4499 msgid "Force field was initialized using: " msgstr "Le champ de force créé avec: " # File: calc/dl_poly/dlp_field.c, Line: 4558 msgid "Please select the force field first !" msgstr "Veuillez d'abord sélectionner le champ de force !" # File: calc/dl_poly/dlp_field.c, Line: 4575 msgid "LAMMPS files preview" msgstr "Aperçu des fichiers LAMMPS" # File: calc/dl_poly/dlp_field.c, Line: 4575 msgid "DL-POLY files preview" msgstr "Aperçu des fichiers DL-POLY" # File: calc/dl_poly/dlp_field.c, Line: 4674 msgid "%s file found in '%s'\nreplace existing %s file ?" msgstr "Fichier %s trouvé dans '%s'\nremplacer le fichier %s existant ?" # File: calc/dl_poly/dlp_field.c, Line: 4675 msgid "Replace file ?" msgstr "Remplacer le fichier ?" # File: calc/dl_poly/dlp_field.c, Line: 4812 msgid "%s calculation assistant" msgstr "assistant de calcul %s" # File: calc/dl_poly/dlp_field.c, Line: 4822 msgid "Force field: " msgstr "Champ de force: " # File: calc/dl_poly/dlp_field.c, Line: 4856 msgid "\tDelete the existing force field data and reset the parameters to the default values" msgstr "\tSupprimez les données du champ de force existantes et réinitialisez les paramètres aux valeurs par défaut" # File: calc/dl_poly/dlp_field.c, Line: 4862 msgid "\tPrepare the CONTROL file to describe the calculation" msgstr "\tPréparer le fichier CONTROL pour décrire le calcul" # File: calc/dl_poly/dlp_field.c, Line: 4864 msgid "\tPrepare the FIELD and CONFIG files to describe the force field and the atomic scale model" msgstr "\tPréparez les fichiers FIELD et CONFIG pour décrire le champ de force et le modèle à l'échelle atomique" # File: calc/dl_poly/dlp_field.c, Line: 4869 msgid "\tPrepare the LAMMPS Input to describe the calculation" msgstr "\tPréparez l'entrée LAMMPS pour décrire le calcul" # File: calc/dl_poly/dlp_field.c, Line: 4871 msgid "\tPrepare the LAMMPS Atom file to describe the force field and the atomic scale model" msgstr "\tPréparez le fichier LAMMPS Atom pour décrire le champ de force et le modèle à l'échelle atomique" # File: calc/dl_poly/dlp_mol.c, Line: 89 msgid "The description of atom %s will be deleted\n" "and merged with the one of the selected field atom.\n" "Field object(s) using atom %s will also be deleted\n" "and the force field parameter(s) will be updated accordingly." msgstr "La description de l'atome %s sera supprimée\n" "et fusionné avec celui de l'atome de champ sélectionné.\n" "Les objets de champ utilisant l'atome %s seront également supprimés\n" "et le ou les paramètres du champ de force seront mis à jour en conséquence." # File: calc/dl_poly/dlp_mol.c, Line: 105 msgid "The description of atom %s will be deleted\n" "and merged with the one of field atom %s\n" "Field object(s) using atom %s will also be deleted\n" "and the force field parameter(s) will be updated accordingly." msgstr "La description de l'atome %s sera supprimée\n" "et fusionné avec celui de l'atome de champ %s\n" "Les objets de champ utilisant l'atome %s seront également supprimés\n" "et le ou les paramètres du champ de force seront mis à jour en conséquence." # File: calc/dl_poly/dlp_mol.c, Line: 93 msgid "The description of molecule %s will be deleted\nand merged with the one of the selected molecule." msgstr "La description de la molécule %s sera supprimée\net fusionné avec celui de la molécule sélectionnée." # File: calc/dl_poly/dlp_mol.c, Line: 93 msgid "The description of molecule %s will be deleted\nand merged with the one of molecule %s" msgstr "La description de la molécule %s sera supprimée\net fusionné avec celui de la molécule %s" # File: calc/dl_poly/dlp_mol.c, Line: 339 msgid "%s\nConfirm this choice and create a new field molecule to describe these fragments ?" msgstr "%s\nConfirmer ce choix et créer une nouvelle molécule de champ pour décrire ces fragments ?" # File: calc/dl_poly/dlp_mol.c, Line: 344 msgid "%s\nConfirm this choice and create a new field molecule to describe this fragment ?" msgstr "%s\nConfirmer ce choix et créer une nouvelle molécule de champ pour décrire ce fragment ?" # File: calc/dl_poly/dlp_mol.c, Line: 470 msgid "Please select the fragment(s) of the new molecule" msgstr "Veuillez sélectionner le(s) fragment(s) de la nouvelle molécule" # File: calc/dl_poly/dlp_mol.c, Line: 753 msgid "Select the molecule to merge molecule \"%s\" with" msgstr "Sélectionnez la molécule avec laquelle fusionner la molécule \"%s\"" # File: calc/dl_poly/dlp_print.c, Line: 1433 msgid "# - %d atoms\n" "# - %d isolated molecular fragments\n" "# - %d distinct molecules\n" msgstr "# - %d atomes\n" "# - %d fragments moléculaires isolés\n" "# - %d molécules distinctes\n" # File: calc/dl_poly/dlp_print.c, Line: 1421 msgid "# This file was created using %s\n" msgstr "# Ce fichier a été créé en utilisant %s\n" # File: calc/dl_poly/dlp_print.c, Line: 1424 msgid "# %s contains:\n" msgstr "# %s contient:\n" # File: calc/dl_poly/dlp_print.c, Line: 1439 msgid "# Energy unit:\n" msgstr "# Unité énergétique:\n" # File: calc/dl_poly/dlp_print.c, Line: 1444 msgid "# Number of field molecules:\n" msgstr "# Nombre de molécules de champ:\n" # File: calc/dl_poly/dlp_print.c, Line: 1452 msgid "# Begin molecule %d\n" msgstr "# Début de la molécule %d\n" # File: calc/dl_poly/dlp_print.c, Line: 1456 msgid "# End molecule %d\n" msgstr "# Fin de la molécule %d\n" # File: calc/dl_poly/dlp_print.c, Line: 1464 msgid "van der Walls pair" msgstr "paire de van der Walls" # File: calc/dl_poly/dlp_print.c, Line: 1464 msgid "metal" msgstr "métal" # File: calc/dl_poly/dlp_print.c, Line: 1464 msgid "three-body" msgstr "à trois corps" # File: calc/dl_poly/dlp_print.c, Line: 1464 msgid "four-body" msgstr "quatre corps" # File: calc/dl_poly/dlp_print.c, Line: 1478 msgid "# Non-bonded: %s potential(s)\n" msgstr "# Non lié : %s potentiel(s)\n" # File: calc/dl_poly/dlp_print.c, Line: 1596 msgid "# DL-POLY CONFIG file created by %s, %s - %d atoms\n" msgstr "# Fichier DL-POLY CONFIG créé par %s, %s - %d atomes\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Target temperature in K\n" msgstr "# Température cible en K\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Number of MD steps\n" msgstr "# Nombre d'étapes MD\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Integration time step in ps\n" msgstr "# Pas de temps d'intégration en ps\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Target presssure in k atms\n" msgstr "# Pression cible en k atms\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Target temperature" msgstr "# Température cible" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Number of MD steps" msgstr "# Nombre d'étapes MD" # File: calc/dl_poly/dlp_print.c, Line: 1675 msgid "# MD time step d(t)" msgstr "# MD pas de temps d(t)" # File: calc/dl_poly/dlp_print.c, Line: 1711 msgid "\n# Ignore particle indices from CONFIG file and set indices by order of reading" msgstr "\n# Ignorer les indices de particules du fichier CONFIG et définir les indices par ordre de lecture" # File: calc/dl_poly/dlp_print.c, Line: 1712 msgid "\n# Ignore strict checks when reading CONFIG file, warning messages and assume safe simulation parameters" msgstr "\n# Ignorer les contrôles stricts lors de la lecture du fichier CONFIG, des messages d'avertissement et supposer des paramètres de simulation sûrs" # File: calc/dl_poly/dlp_print.c, Line: 1713 msgid "\n# Skip detailed topology reporting when reading FIELD file" msgstr "\n# Ignorer les rapports de topologie détaillés lors de la lecture du fichier FIELD" # File: calc/dl_poly/dlp_print.c, Line: 1714 msgid "\n# Ignore center of mass momentum removal during the simulation" msgstr "\n# Ignorer la suppression de l'impulsion du centre de masse pendant la simulation" # File: calc/dl_poly/dlp_print.c, Line: 1715 msgid "\n# Tolerance for the relaxed shell model\n" msgstr "\n# Tolérance pour le modèle coque relax\n" # File: calc/dl_poly/dlp_print.c, Line: 1716 msgid "\n# Subcelling threshold density of particle per link cell\n" msgstr "\n# Densité seuil de sous-cellule de particule par cellule de liaison\n" # File: calc/dl_poly/dlp_print.c, Line: 1717 msgid "\n# Create an expanded version of the current model\n" msgstr "\n# Créer une version étendue du modèle actuel\n" # File: calc/dl_poly/dlp_print.c, Line: 1718 msgid "\n# Restart job from previous run: " msgstr "\n# Redémarrez le travail depuis l'exécution précédente: " # File: calc/dl_poly/dlp_print.c, Line: 1721 msgid "\n# Continue current simulation - require REVOLD file" msgstr "\n# Continuer la simulation en cours - nécessite le fichier REVOLD" # File: calc/dl_poly/dlp_print.c, Line: 1722 msgid "\n# Start new simulation from older run without temperature reset" msgstr "\n# Démarrer une nouvelle simulation à partir d'une ancienne exécution sans réinitialisation de la température" # File: calc/dl_poly/dlp_print.c, Line: 1723 msgid "\n# Start new simulation from older run with temperature reset" msgstr "\n# Démarrer une nouvelle simulation à partir d'une ancienne exécution avec réinitialisation de la température" # File: calc/dl_poly/dlp_print.c, Line: 1726 msgid "\n\n# Set job time to " msgstr "\n\n# Heure de début du calcul " # File: calc/dl_poly/dlp_print.c, Line: 1726 msgid "\n\n# Set job closure time to " msgstr "\n\n# Heure de fin du calcul " # File: calc/dl_poly/dlp_print.c, Line: 1728 msgid "\n# I/O read interface, with:\n" msgstr "\n# Interface de lecture E/S, avec:\n" # File: calc/dl_poly/dlp_print.c, Line: 1728 msgid "\n# I/O write interface, with:\n" msgstr "\n# Interface d'écriture E/S, avec:\n" # File: calc/dl_poly/dlp_print.c, Line: 1918 msgid "# DL-POLY CONTROL file created by %s, %s - %d atoms\n\n" msgstr "# Fichier DL-POLY CONTROL créé par %s, %s - %d atoms\n\n" # File: calc/dl_poly/dlp_print.c, Line: 1928 msgid "# Relative dielectric constant = " msgstr "# Constante diélectrique relative = " # File: calc/dl_poly/dlp_print.c, Line: 1932 msgid "\n# Allowing local variation of system density of: " msgstr "\n# Permettre une variation locale de la densité du système de: " # File: calc/dl_poly/dlp_print.c, Line: 1966 msgid "\n# Non-bonded short range interactions - type vdW" msgstr "\n# Interactions à courte portée non-liées - type vdW" # File: calc/dl_poly/dlp_print.c, Line: 1967 msgid "\n# van der Waals short range cutoff = " msgstr "\n# seuil de courte portée de van der Waals = " # File: calc/dl_poly/dlp_print.c, Line: 1970 msgid "\n# Enforce direct calculation of vdW interactions" msgstr "\n# Appliquer le calcul direct des interactions vdW" # File: calc/dl_poly/dlp_print.c, Line: 1971 msgid "\n# Do not work with system using tabulated potentials" msgstr "\n# Ne travaillez pas avec un système utilisant des potentiels tabulés" # File: calc/dl_poly/dlp_print.c, Line: 1975 msgid "\n# Apply force-shifting for vdW interactions" msgstr "\n# Appliquer le changement de force pour les interactions vdW" # File: calc/dl_poly/dlp_print.c, Line: 1979 msgid "\n# Apply mixing rule of type: " msgstr "\n# Appliquer la règle de mélange du type: " # File: calc/dl_poly/dlp_print.c, Line: 1984 msgid "\n# No van der Waals interactions (short range)" msgstr "\n# Pas d'interactions van der Waals (courte portée)" # File: calc/dl_poly/dlp_print.c, Line: 1990 msgid "\n# Non-bonded long range interactions" msgstr "\n# Interactions à longue portée non-liées" # File: calc/dl_poly/dlp_print.c, Line: 1991 msgid "\n# Electrostatics long range cutoff = " msgstr "\n# Coupure électrostatique longue portée = " # File: calc/dl_poly/dlp_print.c, Line: 1994 msgid "\n# Use optional padding to the cutoff = " msgstr "\n# Utiliser un remplissage facultatif jusqu'à un seuil = " # File: calc/dl_poly/dlp_print.c, Line: 1998 msgid "\n# Use extended coulombic exclusion\n" msgstr "\n# Utiliser l'exclusion coulombienne étendue\n" # File: calc/dl_poly/dlp_print.c, Line: 2000 msgid "\n# Electrostatics calculated using " msgstr "\n# Électrostatique calculé à l'aide " # File: calc/dl_poly/dlp_print.c, Line: 2020 msgid "\n# Evaluate k space contribution to the Ewald sum every: " msgstr "\n# Évaluer la contribution de l'espace k à la somme d'Ewald tous les: " # File: calc/dl_poly/dlp_print.c, Line: 2020,2197,2284,2335 msgid " MD step(s)" msgstr " Pas de DM" # File: calc/dl_poly/dlp_print.c, Line: 2025 msgid "# No electrostatics interactions (long range)" msgstr "# Aucune interaction électrostatique (longue portée)" # File: calc/dl_poly/dlp_print.c, Line: 2031 msgid "\n# Metallic interactions" msgstr "\n# Interactions métalliques" # File: calc/dl_poly/dlp_print.c, Line: 2035 msgid "\n# Enforce direct calculation of metal interactions" msgstr "\n# Appliquer le calcul direct des interactions métalliques" # File: calc/dl_poly/dlp_print.c, Line: 2035 msgid "\n# This does not work with metal alloy systems using the *EAM* potentials" msgstr "\n# Cela ne fonctionne pas avec les systèmes d'alliages métalliques utilisant les potentiels *EAM*" # File: calc/dl_poly/dlp_print.c, Line: 2039 msgid "\n# Switch the TABEAM default embedding functions, F, from F(ρ) to F(√ρ)" msgstr "\n# Basculez les fonctions d'intégration par défaut de TABEAM, F, de F(ρ) à F(√ρ)" # File: calc/dl_poly/dlp_print.c, Line: 2043 msgid "\n# Thermostat information" msgstr "\n# Informations sur les thermostats" # File: calc/dl_poly/dlp_print.c, Line: 2088 msgid "# Attach a pseudo thermal bath with:\n" msgstr "# Attacher un pseudo bain thermal avec:\n" # File: calc/dl_poly/dlp_print.c, Line: 2091 msgid "# - thermostat of type: %s\n" msgstr "# - thermostat de type: %s\n" # File: calc/dl_poly/dlp_print.c, Line: 2095 msgid "# - thermostats of type Langevin and Direct applied successively\n" msgstr "# - thermostats de type Langevin et Direct appliqués successivement\n" # File: calc/dl_poly/dlp_print.c, Line: 2099 msgid "# - thickness of thermostat layer to MD cell boundaries: %f Ang.\n" msgstr "# - épaisseur de la couche thermostaté jusqu'aux limites de boîte de MD: %f Ang.\n" # File: calc/dl_poly/dlp_print.c, Line: 2104 msgid "# - Target temperature: %f K\n" msgstr "# - Température cible: %f K\n" # File: calc/dl_poly/dlp_print.c, Line: 2110 msgid "# - Target temperature: system target temperature\n" msgstr "# - Température cible: température cible du système\n" # File: calc/dl_poly/dlp_print.c, Line: 2123 msgid "# Molecular dynamics information\n" msgstr "# Informations sur la dynamique moléculaire\n" # File: calc/dl_poly/dlp_print.c, Line: 2150 msgid "# Variable time step, initial time step = " msgstr "# Pas de temps variable, pas de temps initial = " # File: calc/dl_poly/dlp_print.c, Line: 2151 msgid "\n# Maximum time step allowed = " msgstr "\n# Pas de temps maximum autorisé = " # File: calc/dl_poly/dlp_print.c, Line: 2152 msgid "\n# Maximum move allowed = " msgstr "\n# Déplacement maximum autorisé = " # File: calc/dl_poly/dlp_print.c, Line: 2153 msgid "\n# Minimum move allowed = " msgstr "\n# Déplacement minimum autorisé = " # File: calc/dl_poly/dlp_print.c, Line: 2157 msgid "# MD time step = " msgstr "# Pas de temps DM = " # File: calc/dl_poly/dlp_print.c, Line: 2160 msgid "\n# Shake / Rattle iterations limit: " msgstr "\n# Limite d'itérations secousse / vibration: " # File: calc/dl_poly/dlp_print.c, Line: 2160 msgid " cycle(s)" msgstr " cycle(s)" # File: calc/dl_poly/dlp_print.c, Line: 2161 msgid "\n# Shake / Rattle tolerance: " msgstr "\n# Tolérance aux secousses / vibrations: " # File: calc/dl_poly/dlp_print.c, Line: 2165 msgid "\n# FIQA iterations limit: " msgstr "\n# Limite d'itérations FIQA: " # File: calc/dl_poly/dlp_print.c, Line: 2166 msgid "\n# Quaternion tolerance: " msgstr "\n# Tolérance aux quaternions: " # File: calc/dl_poly/dlp_print.c, Line: 2171 msgid "\n\n# Initiate impact on particle\n# - with particle index: " msgstr "\n\n# Initier l'impact sur les particules\n# - avec indice de particules: " # File: calc/dl_poly/dlp_print.c, Line: 2174 msgid "\n# - at MD step: " msgstr "\n# - au pas de DM: " # File: calc/dl_poly/dlp_print.c, Line: 2178 msgid "\n# - with energy (k eV): " msgstr "\n# - avec énergie (k eV): " # File: calc/dl_poly/dlp_print.c, Line: 2182 msgid "\n# - direction (x, y, z): " msgstr "\n# - direction (x, y, z): " # File: calc/dl_poly/dlp_print.c, Line: 2196 msgid "\n\n# Equilibration information" msgstr "\n\n# Informations d'équilibration" # File: calc/dl_poly/dlp_print.c, Line: 2197 msgid "\n# Equilibrate during: " msgstr "\n# Equilibrer pendant: " # File: calc/dl_poly/dlp_print.c, Line: 2200 msgid "\n# During equilibration: rescale system temperature every: " msgstr "\n# Pendant l'équilibration: redimensionnez la température du système tous les: " # File: calc/dl_poly/dlp_print.c, Line: 2204 msgid "\n# During equilibration: cap forces, with fmax= " msgstr "\n# Lors de l'équilibration: plafond des forces, avec fmax= " # File: calc/dl_poly/dlp_print.c, Line: 2208 msgid "\n# During equilibration: resample the instantaneous momenta distribution every: " msgstr "\n# Pendant l'équilibration: rééchantillonnez la distribution de l'impulsion instantanée tous les: " # File: calc/dl_poly/dlp_print.c, Line: 2212 msgid "\n# Every %d step(s) during equilibration: minimize %s with target %s= %f\n" msgstr "\n# Toutes les %d étape(s) pendant l'équilibration: minimiser %s avec la cible %s= %f\n" # File: calc/dl_poly/dlp_print.c, Line: 2223 msgid "# At the start of the equilibration: minimize %s with target %s= %f\n" msgstr "# Au début de l'équilibration: minimiser %s avec la cible %s= %f\n" # File: calc/dl_poly/dlp_print.c, Line: 2233 msgid "# During equilibration: perform a zero temperature MD minimization\n" msgstr "# Pendant l'équilibration: effectuer une minimisation DM à température nulle\n" # File: calc/dl_poly/dlp_print.c, Line: 2238 msgid "# Include equilibration data in overall statistics\n" msgstr "# Inclure les données d'équilibration dans les statistiques globales\n" # File: calc/dl_poly/dlp_print.c, Line: 2245 msgid "\n# Analysis information" msgstr "\n# Informations d'analyse" # File: calc/dl_poly/dlp_print.c, Line: 2248 msgid "\n# Calculate and collect all intra-molecular PDFs" msgstr "\n# Calculer et collecter tous les PDF intra-moléculaires" # File: calc/dl_poly/dlp_print.c, Line: 2254 msgid "\n# Calculate and collect bonds PDFs" msgstr "\n# Calculer et collecter des PDF de liaisons" # File: calc/dl_poly/dlp_print.c, Line: 2260 msgid "\n# Calculate and collect angles PDFs" msgstr "\n# Calculer et collecter des angles PDF" # File: calc/dl_poly/dlp_print.c, Line: 2265 msgid "\n# Calculate and collect dihedrals PDFs" msgstr "\n# Calculer et collecter des PDF de dièdres" # File: calc/dl_poly/dlp_print.c, Line: 2270 msgid "\n# Calculate and collect inversions PDFs" msgstr "\n# Calculer et collecter les PDF d'inversions" # File: calc/dl_poly/dlp_print.c, Line: 2273 msgid "\n# Print any opted for analysis inter and intra-molecular PDFs" msgstr "\n# Imprimez tous les PDF d'analyse inter et intra-moléculaires choisis" # File: calc/dl_poly/dlp_print.c, Line: 2280 msgid "\n# Bin size for RDfs and Z-density distribution: " msgstr "\n# Taille du bac pour les RDfs et la distribution de densité Z: " # File: calc/dl_poly/dlp_print.c, Line: 2284 msgid "\n# Calculate and collect radial distribution functions every: " msgstr "\n# Calculer et collecter les fonctions de distribution radiale tous les: " # File: calc/dl_poly/dlp_print.c, Line: 2290 msgid "\n# Calculate and collect Z-density profile every: " msgstr "\n# Calculez et collectez le profil de densité Z tous les: " # File: calc/dl_poly/dlp_print.c, Line: 2296 msgid "\n# Velocity autocorrelation functions, VAFs\n" msgstr "\n# Fonctions d'autocorrélation de vitesse, VAF\n" # File: calc/dl_poly/dlp_print.c, Line: 2302 msgid "\n# Ignore time averaging for the VAFs" msgstr "\n# Ignorer la moyenne du temps pour les VAF" # File: calc/dl_poly/dlp_print.c, Line: 2309 msgid "\n\n# Output information" msgstr "\n\n# Informations de sortie" # File: calc/dl_poly/dlp_print.c, Line: 2312 msgid "\n# Write defects trajectory file, DEFECTS\n" msgstr "\n# Écrire le fichier de trajectoire des défauts, DEFECTS\n" # File: calc/dl_poly/dlp_print.c, Line: 2318 msgid "\n# Write displacement trajectory file, RSDDAT\n" msgstr "\n# Écrire le fichier de trajectoire de déplacement, RSDDAT\n" # File: calc/dl_poly/dlp_print.c, Line: 2324 msgid "\n# Write HISTORY file\n" msgstr "\n# Écrire le fichier HISTORY\n" # File: calc/dl_poly/dlp_print.c, Line: 2330 msgid "\n# Write MSDTMP file\n" msgstr "\n# Écrire le fichier MSDTMP\n" # File: calc/dl_poly/dlp_print.c, Line: 2335 msgid "\n# Print system data every: " msgstr "\n# Imprimer les données du système tous les: " # File: calc/dl_poly/dlp_print.c, Line: 2339 msgid "\n# Accumulate statics data every: " msgstr "\n# Accumulez des données statiques tous les: " # File: calc/dl_poly/dlp_print.c, Line: 2343 msgid "\n# Set rolling average stack to: " msgstr "\n# Définissez la pile moyenne mobile sur: " # File: calc/dl_poly/dlp_print.c, Line: 2347 msgid "\n# Dump restart information every: " msgstr "\n# Vider les informations de redémarrage tous les: " # File: calc/dl_poly/dlp_print.c, Line: 2364 msgid "# - method = " msgstr "# - méthode = " # File: calc/dl_poly/dlp_print.c, Line: 2371 msgid "\n# - precision = " msgstr "\n# - précision = " # File: calc/dl_poly/dlp_print.c, Line: 2375 msgid "\n# - type = " msgstr "\n# - type = " # File: calc/dl_poly/dlp_print.c, Line: 2381 msgid "\n# - j, reader count = " msgstr "\n# - j, nombre de lecteurs = " # File: calc/dl_poly/dlp_print.c, Line: 2388 msgid "\n# - k, batch size = " msgstr "\n# - k, taille du lot = " # File: calc/dl_poly/dlp_print.c, Line: 2393 msgid "\n# - l, buffer size = " msgstr "\n# - l, taille du tampon = " # File: calc/dl_poly/dlp_print.c, Line: 2399 msgid "\n# - e, parallel error check is " msgstr "\n# - e, la vérification des erreurs parallèles est " # File: calc/dl_poly/dlp_print.c, Line: 2435 msgid "\n# Seeds for the random number generators\n" msgstr "\n# Graines pour les générateurs de nombres aléatoires\n" # File: calc/dl_poly/dlp_print.c, Line: 2441 msgid "\n# Limits to 2 the number of processors in z direction for slab simulations\n" msgstr "\n# Limite à 2 le nombre de processeurs dans la direction z pour les simulations de dalles\n" # File: curve/cedit.c, Line: 294 msgid "Data sets" msgstr "Jeux de données" # File: curve/cedit.c, Line: 362 # File: curve/m_curve.c, Line: 86 msgid "Edit curve" msgstr "Éditer la courbe" # File: curve/cedit.c, Line: 372,373 msgid "Graph" msgstr "Graphique" # File: curve/cedit.c, Line: 376,377 # File: curve/m_curve.c, Line: 611 msgid "Data" msgstr "Données" # File: curve/cedit.c, Line: 380,381 msgid "Legend" msgstr "Légende" # File: curve/cedit.c, Line: 389 msgid "Add data set(s) to the active window" msgstr "Ajouter un (des) jeu(x) de données à la fenêtre active" # File: curve/cedit.c, Line: 392,393 msgid "Add data set" msgstr "Ajout de données" # File: curve/datab.c, Line: 472 msgid "Add Constant to Column" msgstr "Ajouter une Constante à la Colonne" # File: curve/datab.c, Line: 478,613 msgid "Add Constant to Last Column" msgstr "Ajouter une Constante à la Dernière Colonne" # File: curve/datab.c, Line: 525 msgid "Multiply Column by Constant" msgstr "Multiplier la Colonne par une Constante" # File: curve/datab.c, Line: 531,614 msgid "Multiply Last Column by Constant" msgstr "Multiplier la Dernière Colonne par une Constante" # File: curve/datab.c, Line: 550 msgid "Before" msgstr "Avant" # File: curve/datab.c, Line: 551 msgid "After" msgstr "Après" # File: curve/datab.c, Line: 563 msgid "Insert Row(s)" msgstr "Insérer une(des) Ligne(s)" # File: curve/datab.c, Line: 575 msgid "Delete Row(s)" msgstr "Supprimer une(des) Ligne(s)" # File: curve/datab.c, Line: 587 msgid "Copy Selected Row(s)" msgstr "Copier la(les) Ligne(s) Sélectionnées" # File: curve/datab.c, Line: 601 msgid "Cell Based Operations" msgstr "Opérations Basées sur les Cellules" # File: curve/datab.c, Line: 626 msgid "Column Based Operations" msgstr "Opérations Basées sur les Colonnes" # File: curve/m_curve.c, Line: 76 msgid "Curve window" msgstr "Fenêtre de courbe" # File: curve/m_curve.c, Line: 85,707 msgid "Autoscale" msgstr "Mise à l'Échelle Automatique" # File: curve/m_curve.c, Line: 87 msgid "Close curve" msgstr "Fermer la Courbe" # File: curve/m_curve.c, Line: 88 msgid "Export data" msgstr "Export des Données" # File: curve/m_curve.c, Line: 89 msgid "Save image" msgstr "Enregistrer l'Image" # File: curve/m_curve.c, Line: 510 msgid "Edit Curve" msgstr "Éditer la Courbe" # File: curve/m_curve.c, Line: 513 msgid "Export Image" msgstr "Exporter une Image" # File: curve/m_curve.c, Line: 530 msgid "Edit Data" msgstr "Éditer les Données" # File: curve/m_curve.c, Line: 592 # File: curve/w_data.c, Line: 178 msgid "Save Data" msgstr "Enregistrer les Données" # File: curve/m_curve.c, Line: 613 msgid "Curve" msgstr "Courbe" # File: curve/m_curve.c, Line: 659 msgid "Add Data Set" msgstr "Ajouter un Jeu de Données" # File: curve/m_curve.c, Line: 677 msgid "Remove Data Set" msgstr "Supprimer le Jeu de Données" # File: curve/tab-1.c, Line: 103 # File: curve/w_img.c, Line: 83 msgid "X size must be > 0" msgstr "La taille X doit être > 0" # File: curve/tab-1.c, Line: 104 # File: curve/w_img.c, Line: 83 msgid "Y size must be > 0" msgstr "La taille Y doit être > 0" # File: curve/tab-1.c, Line: 471 msgid "Frame x min must be < to frame x max" msgstr "L'image x min doit être < à l'image x max" # File: curve/tab-1.c, Line: 483 msgid "Frame x max must be > to frame x min" msgstr "L'image x max doit être > à l'image x min" # File: curve/tab-1.c, Line: 499 msgid "Frame y min must be > to frame y max" msgstr "L'image y min doit être > à l'image y max" # File: curve/tab-1.c, Line: 511 msgid "Frame y max must be < to frame y min" msgstr "L'image y max doit être < à l'image y min" # File: curve/tab-1.c, Line: 543 msgid "Closed" msgstr "Fermé" # File: curve/tab-1.c, Line: 543 msgid "Top Open" msgstr "Ouvert en Haut" # File: curve/tab-1.c, Line: 543 msgid "Right Open" msgstr "Ouvert à Droite" # File: curve/tab-1.c, Line: 543 msgid "Left Open" msgstr "Ouvert à Gauche" # File: curve/tab-1.c, Line: 543 msgid "Open " msgstr "Ouvert " # File: curve/tab-1.c, Line: 560 msgid "Size:" msgstr "Taille:" # File: curve/tab-1.c, Line: 568 # File: curve/w_img.c, Line: 362 msgid "pixels" msgstr "pixels" # File: curve/tab-1.c, Line: 572 msgid "Insert title" msgstr "Insérer un titre" # File: curve/tab-1.c, Line: 582 msgid "Default title" msgstr "Titre par défaut" # File: curve/tab-1.c, Line: 597 # File: curve/tab-3.c, Line: 335 # File: curve/tab-4.c, Line: 818,854 msgid "Font:" msgstr "Police:" # File: curve/tab-1.c, Line: 601,667 # File: curve/tab-3.c, Line: 339,381 msgid "Color:" msgstr "Couleur:" # File: curve/tab-1.c, Line: 605 # File: curve/tab-3.c, Line: 343 msgid "Position:" msgstr "Position:" # File: curve/tab-1.c, Line: 620 msgid "Background color:" msgstr "Couleur d'arrière-plan:" # File: curve/tab-1.c, Line: 629 msgid "Show/Hide frame" msgstr "Afficher/Masquer le cadre" # File: curve/tab-1.c, Line: 659 # File: curve/tab-2.c, Line: 953 # File: curve/tab-3.c, Line: 373 msgid "Line style:" msgstr "Style de ligne:" # File: curve/tab-1.c, Line: 664 # File: curve/tab-2.c, Line: 962 # File: curve/tab-3.c, Line: 378 msgid "Line width:" msgstr "Largeur de trait:" # File: curve/tab-1.c, Line: 689 # File: curve/tab-4.c, Line: 825,856 msgid "Position: " msgstr "Position: " # File: curve/tab-2.c, Line: 348 msgid "Line width must be > 0.0" msgstr "La largeur de ligne doit être > 0,0" # File: curve/tab-2.c, Line: 392 msgid "Glyph size must be > 0.0" msgstr "La taille du glyphe doit être > 0,0" # File: curve/tab-2.c, Line: 436 msgid "Bar width must be > 0.0" msgstr "La largeur de la barre doit être > 0,0" # File: curve/tab-2.c, Line: 480 msgid "Bar opacity must ∈ [0.0 - 1.0]" msgstr "L'opacité de la barre doit ∈ [0,0 - 1,0]" # File: curve/tab-2.c, Line: 547 msgid "Glyph frequency must be > 0" msgstr "La fréquence des glyphes doit être > 0" # File: curve/tab-2.c, Line: 846 msgid "Data set(s)" msgstr "Jeu(x) de données" # File: curve/tab-2.c, Line: 929 msgid "Bar" msgstr "Histogramme" # File: curve/tab-2.c, Line: 916 msgid "Select set: " msgstr "Sélectionner un jeu: " # File: curve/tab-2.c, Line: 933 msgid "Plot type:" msgstr "Type de représentation:" # File: curve/tab-2.c, Line: 941 msgid "Data color:" msgstr "Couleur des données:" # File: curve/tab-2.c, Line: 945 msgid "No Line" msgstr "Pas de Ligne" # File: curve/tab-2.c, Line: 970 msgid "No Glyph" msgstr "Pas de Glyphe" # File: curve/tab-2.c, Line: 978 msgid "Glyph type:" msgstr "Type de glyphe:" # File: curve/tab-2.c, Line: 983 msgid "Glyph size:" msgstr "Taille du glyphe:" # File: curve/tab-2.c, Line: 988 msgid "Glyph freq.:" msgstr "Fréq. des glyphes:" # File: curve/tab-2.c, Line: 1000 msgid "Bar width:" msgstr "Largeur de barre:" # File: curve/tab-2.c, Line: 1004 msgid "Color opacity:" msgstr "Opacité des couleurs:" # File: curve/tab-2.c, Line: 1008 msgid "Plain" msgstr "Pleine" # File: curve/tab-2.c, Line: 1012 msgid "Bar opacity:" msgstr "Opacité de la barre:" # File: curve/tab-2.c, Line: 1021 msgid "Automatic x axis shift for bar diagram (to improve visibility)" msgstr "Décalage automatique de l'axe x\n pour l'histogramme (améliore la visibilité)" # File: curve/tab-2.c, Line: 1027 msgid "Layers organization: " msgstr "Organisation des calques: " # File: curve/tab-2.c, Line: 1037 msgid "\tMove up/down to adjust layer position (up to front, down to back)" msgstr "\tDéplacez pour ajuster la position du calque\n\thaut vers l'avant, bas vers l'arrière." # File: curve/tab-3.c, Line: 327 msgid "Show/Hide legend" msgstr "Afficher/Masquer la légende" # File: curve/tab-3.c, Line: 356 msgid "Show/Hide legend box" msgstr "Afficher/Masquer la zone de légende" # File: curve/tab-4.c, Line: 123 msgid "Axis min must be < to axis max" msgstr "L'axe min doit être < à l'axe max" # File: curve/tab-4.c, Line: 150 msgid "Axis max must be > to axis min" msgstr "L'axe max doit être > à l'axe min" # File: curve/tab-4.c, Line: 179 msgid "Major tick must be > 0.0" msgstr "Le tick majeur doit être > 0,0" # File: curve/tab-4.c, Line: 703 msgid "Select axis:" msgstr "Sélectionner l'axe:" # File: curve/tab-4.c, Line: 705 msgid "X axis" msgstr "Axe X" # File: curve/tab-4.c, Line: 706 msgid "Y axis" msgstr "Axe Y" # File: curve/tab-4.c, Line: 716 msgid "Scale type:" msgstr "Type d'échelle:" # File: curve/tab-4.c, Line: 724 msgid "Autoscale axis" msgstr "Mise à l'échelle auto. de l'axe" # File: curve/tab-4.c, Line: 730 msgid "Min:" msgstr "Min:" # File: curve/tab-4.c, Line: 733 msgid "Max:" msgstr "Max:" # File: curve/tab-4.c, Line: 740 msgid "Major ticks spacing:" msgstr "Espacement des divisions majeurs:" # File: curve/tab-4.c, Line: 747 msgid "Number of minor ticks:" msgstr "Nombre de divisions mineurs:" # File: curve/tab-4.c, Line: 757 msgid "Tick marks:" msgstr "Divisions:" # File: curve/tab-4.c, Line: 760,798 msgid "Location:" msgstr "Emplacement:" # File: curve/tab-4.c, Line: 762 msgid "In" msgstr "Dedans" # File: curve/tab-4.c, Line: 763 msgid "Out" msgstr "Dehors" # File: curve/tab-4.c, Line: 770,801 msgid "Opposite" msgstr "Opposé" # File: curve/tab-4.c, Line: 771,802 msgid "Both" msgstr "Les Deux" # File: curve/tab-4.c, Line: 772,803 # File: calc/cp2k/cp2k_init.c, Line: 700 # File: calc/dl_poly/dlp_field.c, Line: 1493 # File: opengl/win/w_advance.c, Line: 1344,1635 # File: opengl/win/w_periodic.c, Line: 90 msgid "None" msgstr "Aucun(e)" # File: curve/tab-4.c, Line: 779 msgid "Major ticks size:" msgstr "Taille des divisions majeurs:" # File: curve/tab-4.c, Line: 785 msgid "Minor ticks size:" msgstr "Taille des divisions mineurs:" # File: curve/tab-4.c, Line: 795 msgid "Tick labels:" msgstr "Labels des divisions:" # File: curve/tab-4.c, Line: 809 msgid "Significant digits:" msgstr "Chiffres significatifs:" # File: curve/tab-4.c, Line: 822 msgid "Angle:" msgstr "Angle:" # File: curve/tab-4.c, Line: 839 msgid "Show/Hide axis (if min[axis] < 0.0 < max[axis])" msgstr "Afficher/Masquer l'axe (si min[axis] < 0,0 < max[axis])" # File: curve/tab-4.c, Line: 841 msgid "Show/Hide axis grid" msgstr "Afficher/Masquer la grille des axes" # File: curve/tab-4.c, Line: 847 msgid "Use default axis title" msgstr "Utiliser le titre de l'axe par défaut" # File: curve/w_curve.c, Line: 157 msgid "zoom: out (x) / in (y)" msgstr "zoom: arrière (x) / avant (y)" # File: curve/w_curve.c, Line: 164 msgid "zoom: out (x) / out (y)" msgstr "zoom: arrière (x) / arrière (y)" # File: curve/w_curve.c, Line: 176 msgid "zoom: in (x) / in (y)" msgstr "zoom: avant (x) / avant (y)" # File: curve/w_curve.c, Line: 183 msgid "zoom: in (x) / out (y)" msgstr "zoom: avant (x) / arrière (y)" # File: curve/w_curve.c, Line: 219 msgid "(Not in plot)" msgstr "(Pas dans le graph)" # File: curve/w_curve.c, Line: 257 msgid "Not in plot" msgstr "Pas dans le graph" # File: curve/w_data.c, Line: 187 msgid "Xmgrace file (*.agr)" msgstr "Fichier Xmgrace (*.agr)" # File: curve/w_data.c, Line: 191 msgid "x/y ASCII file (*.dat)" msgstr "Fichier ASCII x/y (*.dat)" # File: curve/w_img.c, Line: 226 msgid "PNG file (*.png)" msgstr "Fichier PNG (*.png)" # File: curve/w_img.c, Line: 227 msgid "PDF file (*.pdf)" msgstr "Fichier PDF (*.pdf)" # File: curve/w_img.c, Line: 228 msgid "SVG file (*.svg)" msgstr "Fichier SVG (*.svg)" # File: curve/w_img.c, Line: 229 msgid "EPS file (*.eps)" msgstr "Fichier EPS (*.eps)" # File: curve/w_img.c, Line: 234 msgid "To save an image please enter a file format" msgstr "Pour enregistrer une image, veuillez entrer un format de fichier" # File: curve/w_img.c, Line: 238 msgid "You need to specify the size of the image" msgstr "Vous devez préciser la taille de l'image" # File: curve/w_img.c, Line: 322 msgid "Export image" msgstr "Exporter l'image" # File: curve/w_img.c, Line: 332 msgid "Format: " msgstr "Format: " # File: curve/w_img.c, Line: 350 msgid "Size: " msgstr "Taille: " # File: curve/w_img.c, Line: 364 msgid "Make background transparent" msgstr "Rendre l'arrière-plan transparent" atomes_1.3.1/locale/Makefile.am0000664000175000017500000000175115212624223016004 0ustar lerouxleroux# Nom du programme (doit correspondre à GETTEXT_PACKAGE dans configure.ac) PACKAGE = atomes atomes_locale = $(DESTDIR)$(localedir) # Liste des fichiers de langue à compiler POFILES = en/atomes-messages.po \ fr/atomes-messages.po MOFILES = $(patsubst %.po,%.mo,$(POFILES)) # Règle de compilation .po -> .mo .po.mo: msgfmt -o $@ $< all-local: $(MOFILES) # Installation des fichiers .mo dans le dossier locale de destination install-data-local: for mo in $(MOFILES); do \ lang=`echo $$mo |sed 's/\/atomes-messages.mo//'`; \ $(mkinstalldirs) $(atomes_locale)/$$lang/LC_MESSAGES; \ $(INSTALL_DATA) $$mo $(atomes_locale)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \ done # Nettoyage lors de la désinstallation uninstall-local: for po in $(POFILES); do \ lang=`echo $$po |sed 's/\/atomes-messages.po//'`; \ rm -f $(atomes_locale)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \ done # Fichiers à nettoyer CLEANFILES = $(MOFILES) # Fichiers à inclure dans la distribution EXTRA_DIST = $(POFILES) atomes_1.3.1/locale/Makefile.in0000664000175000017500000003232615212624223016017 0ustar lerouxleroux# Makefile.in generated by automake 1.18.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2025 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__rm_f = rm -f $(am__rm_f_notfound) am__rm_rf = rm -rf $(am__rm_f_notfound) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = locale ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ATOMES_MAJOR_VERSION = @ATOMES_MAJOR_VERSION@ ATOMES_MINOR_VERSION = @ATOMES_MINOR_VERSION@ ATOMES_PATCH_VERSION = @ATOMES_PATCH_VERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EPOXY_CFLAGS = @EPOXY_CFLAGS@ EPOXY_LIBS = @EPOXY_LIBS@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCFLAGS_F90 = @FCFLAGS_F90@ FCFLAGS_f90 = @FCFLAGS_f90@ FCLIBS = @FCLIBS@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTEGRATION_CFLAGS = @INTEGRATION_CFLAGS@ INTEGRATION_LIBS = @INTEGRATION_LIBS@ LDFLAGS = @LDFLAGS@ LGTK_CFLAGS = @LGTK_CFLAGS@ LGTK_LIBS = @LGTK_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIBS = @LIBXML2_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENMP_CFLAGS = @OPENMP_CFLAGS@ # Nom du programme (doit correspondre à GETTEXT_PACKAGE dans configure.ac) PACKAGE = atomes PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UP_APPSTREAM = @UP_APPSTREAM@ UP_DESKTOP = @UP_DESKTOP@ UP_MIME = @UP_MIME@ VERSION = @VERSION@ WINDRES = @WINDRES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__rm_f_notfound = @am__rm_f_notfound@ am__tar = @am__tar@ am__untar = @am__untar@ am__xargs_n = @am__xargs_n@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ atomes_locale = $(DESTDIR)$(localedir) # Liste des fichiers de langue à compiler POFILES = en/atomes-messages.po \ fr/atomes-messages.po MOFILES = $(patsubst %.po,%.mo,$(POFILES)) # Fichiers à nettoyer CLEANFILES = $(MOFILES) # Fichiers à inclure dans la distribution EXTRA_DIST = $(POFILES) all: all-am .SUFFIXES: .SUFFIXES: .mo .po $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu locale/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu locale/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile all-local installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -$(am__rm_f) $(CLEANFILES) distclean-generic: -$(am__rm_f) $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am all-local check check-am clean clean-generic \ cscopelist-am ctags-am distclean distclean-generic distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-local install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-local .PRECIOUS: Makefile # Règle de compilation .po -> .mo .po.mo: msgfmt -o $@ $< all-local: $(MOFILES) # Installation des fichiers .mo dans le dossier locale de destination install-data-local: for mo in $(MOFILES); do \ lang=`echo $$mo |sed 's/\/atomes-messages.mo//'`; \ $(mkinstalldirs) $(atomes_locale)/$$lang/LC_MESSAGES; \ $(INSTALL_DATA) $$mo $(atomes_locale)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \ done # Nettoyage lors de la désinstallation uninstall-local: for po in $(POFILES); do \ lang=`echo $$po |sed 's/\/atomes-messages.po//'`; \ rm -f $(atomes_locale)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \ done # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Tell GNU make to disable its built-in pattern rules. %:: %,v %:: RCS/%,v %:: RCS/% %:: s.% %:: SCCS/s.% atomes_1.3.1/locale/en/0000775000175000017500000000000015212624223014346 5ustar lerouxlerouxatomes_1.3.1/locale/en/atomes-messages.po0000664000175000017500000144312215212624223020012 0ustar lerouxleroux# This file is part of the 'atomes' software # # 'atomes' is free software: you can redistribute it and/or modify it under the terms # of the GNU Affero General Public License as published by the Free Software Foundation, # either version 3 of the License, or (at your option) any later version. # # 'atomes' 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 Affero General Public License along with 'atomes'. # If not, see # # Copyright (C) 2022-2026 by CNRS and University of Strasbourg msgid "" msgstr "" "Project-Id-Version: atomes 1.3.0\n" "PO-Revision-Date: 2026-05-12 16:25+0200\n" "Last-Translator: Sébastien Le Roux \n" "Language-Team: English\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" # ============================================================ # Section: gui # ============================================================ # File: gui/bdcall.c, Line: 181 msgid "Angles [%s-%s-%s]" msgstr "Angles [%s-%s-%s]" # File: gui/bdcall.c, Line: 197 msgid "Dihedrals [%s-%s-%s-%s]" msgstr "Dihedrals [%s-%s-%s-%s]" # File: gui/bdcall.c, Line: 431 msgid "\n\nAngles and diherdrals distribution(s)\n\n" msgstr "\n\nAngles and diherdrals distribution(s)\n\n" # File: gui/bdcall.c, Line: 432 # File: gui/grcall.c, Line: 142 # File: gui/msdcall.c, Line: 154 # File: gui/sqcall.c, Line: 145 msgid "Calculation details:\n\n" msgstr "Calculation details:\n\n" # File: gui/bdcall.c, Line: 433 msgid "\tAngular space discretization:\n\n" msgstr "\tAngular space discretization:\n\n" # File: gui/bdcall.c, Line: 434,997 msgid "\t - Number of δ° steps: " msgstr "\t - Number of δ° steps: " # File: gui/bdcall.c, Line: 438 msgid "\n\n\t between 0.0 and 180.0" msgstr "\n\n\t between 0.0 and 180.0" # File: calc/cp2k/cp2k_mol.c, Line: 256 # File: calc/dl_poly/dlp_edit.c, Line: 1184 # File: calc/dl_poly/dlp_mol.c, Line: 478 # File: gui/bdcall.c, Line: 495 # File: opengl/win/glwindow.c, Line: 157 # File: opengl/win/m_coord.c, Line: 582 # File: opengl/win/m_tools.c, Line: 82 # File: opengl/win/w_coord.c, Line: 850 # File: opengl/win/w_search.c, Line: 4147 # File: opengl/win/w_volumes.c, Line: 707 msgid "Fragment" msgstr "Fragment" # File: calc/cpmd/cpmd_init.c, Line: 214 # File: calc/dl_poly/dlp_field.c, Line: 142 # File: gui/bdcall.c, Line: 503 # File: opengl/win/glwindow.c, Line: 158 # File: opengl/win/m_coord.c, Line: 582 # File: opengl/win/m_tools.c, Line: 83 # File: opengl/win/w_coord.c, Line: 850 # File: opengl/win/w_library.c, Line: 1148 # File: opengl/win/w_search.c, Line: 4147 # File: opengl/win/w_volumes.c, Line: 707 msgid "Molecule" msgstr "Molecule" # File: gui/bdcall.c, Line: 589 # File: gui/chainscall.c, Line: 315 # File: gui/ringscall.c, Line: 446 # File: gui/spcall.c, Line: 211 msgid "The nearest neighbors table calculation has failed" msgstr "The nearest neighbors table calculation has failed" # File: gui/bdcall.c, Line: 596 # File: gui/spcall.c, Line: 207 msgid "Impossible to update FORTRAN data" msgstr "Impossible to update FORTRAN data" # File: gui/bdcall.c, Line: 623 msgid "Unexpected error when calculating bond properties" msgstr "Unexpected error when calculating bond properties" # File: gui/bdcall.c, Line: 635 msgid "Unexpected error when looking for isolated fragment(s) and molecule(s)" msgstr "Unexpected error when looking for isolated fragment(s) and molecule(s)" # File: gui/bdcall.c, Line: 681 msgid "Unexpected error when calculating the bond angles distribution" msgstr "Unexpected error when calculating the bond angles distribution" # File: gui/bdcall.c, Line: 689 msgid "Unexpected error when calculating the dihedral angles distribution" msgstr "Unexpected error when calculating the dihedral angles distribution" # File: gui/bdcall.c, Line: 735 msgid "\n\nBond properties\n\n" msgstr "\n\nBond properties\n\n" # File: gui/bdcall.c, Line: 736 msgid "Existence of a bond between 2 atoms i (α) and j (β)\n" msgstr "Existence of a bond between 2 atoms i (α) and j (β)\n" # File: gui/bdcall.c, Line: 737 msgid "if the 2 following conditions are verified:\n\n\t1) D" msgstr "if the 2 following conditions are verified:\n\n\t1) D" # File: gui/bdcall.c, Line: 739 msgid " < first minimum of the total g(r) (%9.5f Å )\n\t2) D" msgstr " < first minimum of the total g(r) (%9.5f Å )\n\t2) D" # File: gui/bdcall.c, Line: 744,771 msgid "cut" msgstr "cut" # File: gui/bdcall.c, Line: 752 msgid "\nCoordination numbers: " msgstr "\nCoordination numbers: " # File: gui/bdcall.c, Line: 758 msgid " (total)=\t" msgstr " (total)=\t" # File: gui/bdcall.c, Line: 785,974,1065,1089,1113,1164,1189 msgid "\t or \t" msgstr "\t or \t" # File: gui/bdcall.c, Line: 801 msgid "\nAverage coordination number: " msgstr "\nAverage coordination number: " # File: gui/bdcall.c, Line: 842 msgid "\nWarren-Cowley chemical order parameters for A" msgstr "\nWarren-Cowley chemical order parameters for A" # File: gui/bdcall.c, Line: 846,884 msgid " binary systems:\n\n" msgstr " binary systems:\n\n" # File: gui/bdcall.c, Line: 880 msgid "\nCargill-Spaepen chemical order parameters for A" msgstr "\nCargill-Spaepen chemical order parameters for A" # File: gui/bdcall.c, Line: 915 msgid "\nEnvironments for " msgstr "\nEnvironments for " # File: gui/bdcall.c, Line: 921,1041,1129 msgid " atoms:\n\n" msgstr " atoms:\n\n" # File: gui/bdcall.c, Line: 922 msgid "\t \tN(tot)" msgstr "\t \tN(tot)" # File: gui/bdcall.c, Line: 935 msgid "\tNumber\t\t or \tPercent\n\n" msgstr "\tNumber\t\t or \tPercent\n\n" # File: gui/bdcall.c, Line: 995 msgid "\n\nAngle distribution function(s)\n\n" msgstr "\n\nAngle distribution function(s)\n\n" # File: gui/bdcall.c, Line: 996 msgid "\tAngle space discretization:\n\n" msgstr "\tAngle space discretization:\n\n" # File: gui/bdcall.c, Line: 1001 msgid "\n\n\t between 0.0 and 180.0°\n" msgstr "\n\n\t between 0.0 and 180.0°\n" # File: gui/bdcall.c, Line: 1039 msgid "\nNumber and proportion of tetrahedra links for " msgstr "\nNumber and proportion of tetrahedra links for " # File: gui/bdcall.c, Line: 1052,1140 msgid " tetrahedra:\n" msgstr " tetrahedra:\n" # File: gui/bdcall.c, Line: 1055,1154 msgid "\t\t Edge-sharing: " msgstr "\t\t Edge-sharing: " # File: gui/bdcall.c, Line: 1079,1179 msgid "\t\t Corner-sharing: " msgstr "\t\t Corner-sharing: " # File: gui/bdcall.c, Line: 1103 msgid "\t\t with the following bond defects: " msgstr "\t\t with the following bond defects: " # File: gui/bdcall.c, Line: 1127 msgid "\nNumber and proportion of tetrahedra units for " msgstr "\nNumber and proportion of tetrahedra units for " # File: gui/bdcall.c, Line: 1141 msgid "\t\t Total number of tetrahedra:" msgstr "\t\t Total number of tetrahedra:" # File: gui/calc_menu.c, Line: 600 msgid "[1] S. V. King. Nature, 213:1112 (1967).\n" "[2] L. Guttman. J. Non-Cryst. Solids., 116:145-147 (1990).\n" "[3] D. S. Franzblau. Phys. Rev. B, 44(10):4925-4930 (1991).\n" "[4] K. Goetzke and H. J. Klein. J. Non-Cryst. Solids., 127:215-220 (1991).\n" "[5] X. Yuan and A. N. Cormack. Comp. Mat. Sci., 24:343-360 (2002).\n" "[6] F. Wooten. Acta Cryst. A, 58(4):346-351 (2002)." msgstr "[1] S. V. King. Nature, 213:1112 (1967).\n" "[2] L. Guttman. J. Non-Cryst. Solids., 116:145-147 (1990).\n" "[3] D. S. Franzblau. Phys. Rev. B, 44(10):4925-4930 (1991).\n" "[4] K. Goetzke and H. J. Klein. J. Non-Cryst. Solids., 127:215-220 (1991).\n" "[5] X. Yuan and A. N. Cormack. Comp. Mat. Sci., 24:343-360 (2002).\n" "[6] F. Wooten. Acta Cryst. A, 58(4):346-351 (2002)." # File: gui/calc_menu.c, Line: 776 msgid "The result of the nearest neighbors analysis\n" "will be saved in a file that you may use afterwards.\n" msgstr "The result of the nearest neighbors analysis\n" "will be saved in a file that you may use afterwards.\n" # File: gui/calc_menu.c, Line: 817 msgid "You must specify a number of δr >= 2\n" "to discretize the real space between 0.0 and Dmax\n" msgstr "You must specify a number of δr >= 2\n" "to discretize the real space between 0.0 and Dmax\n" # File: gui/calc_menu.c, Line: 823 msgid "You must specify a maximum wave vector Qmax[FFT]\n" "for the FFT, with Qmin < Qmax[FFT] <= Qmax" msgstr "You must specify a maximum wave vector Qmax[FFT]\n" "for the FFT, with Qmin < Qmax[FFT] <= Qmax" # File: gui/calc_menu.c, Line: 870 msgid "You must specify a number of δr >= 2\n" "to discretize the real space between\n" "the shortest and the highest inter-atomic distances" msgstr "You must specify a number of δr >= 2\n" "to discretize the real space between\n" "the shortest and the highest inter-atomic distances" # File: gui/calc_menu.c, Line: 876 msgid "You must specify a number of δθ >= 2\n" "to discretize the angular space between 0 and 180°" msgstr "You must specify a number of δθ >= 2\n" "to discretize the angular space between 0 and 180°" # File: gui/calc_menu.c, Line: 904 msgid "You must specify a number of %ss per size 'n' and per node\n" "this value is used when allocating the memory to store the results\n" "and depends on both the maximum %s size used in the search\n" "and the system studied.\n" "We recommend a value at least equal to 100.\n" "If it appears that the value given is not big enough\n" "(ex: more than 100 different %ss of size 'n' for a single node)\n" "then the search will failed but the program will propose\n" "you to initiate a new search using a higher value" msgstr "You must specify a number of %ss per size 'n' and per node\n" "this value is used when allocating the memory to store the results\n" "and depends on both the maximum %s size used in the search\n" "and the system studied.\n" "We recommend a value at least equal to 100.\n" "If it appears that the value given is not big enough\n" "(ex: more than 100 different %ss of size 'n' for a single node)\n" "then the search will failed but the program will propose\n" "you to initiate a new search using a higher value" # File: gui/calc_menu.c, Line: 950 msgid "You must specify the time unit\n" "used to integrate the Newton's equations\n" "of motion during the molecular dynamics\n" msgstr "You must specify the time unit\n" "used to integrate the Newton's equations\n" "of motion during the molecular dynamics\n" # File: gui/calc_menu.c, Line: 971 msgid "You must specify the number of steps\n" "between each of the %d configurations\n" "found for the molecular dynamics\n" msgstr "You must specify the number of steps\n" "between each of the %d configurations\n" "found for the molecular dynamics\n" # File: gui/calc_menu.c, Line: 171 msgid "ωmax =" msgstr "ωmax =" # File: gui/calc_menu.c, Line: 179 msgid "Update step(s) between conf. and δt to evaluate ωmax" msgstr "Update step(s) between conf. and δt to evaluate ωmax" # File: gui/calc_menu.c, Line: 297 msgid "Maximum l, lmax ∈ [2-40]" msgstr "Maximum l, lmax ∈ [2-40]" # File: gui/calc_menu.c, Line: 314,317 msgid "Number of configurations:" msgstr "Number of configurations:" # File: gui/calc_menu.c, Line: 315 msgid "\tTime step δt used during the dynamics:" msgstr "\tTime step δt used during the dynamics:" # File: gui/calc_menu.c, Line: 316 msgid "\tNumber of step(s) between each configuration:" msgstr "\tNumber of step(s) between each configuration:" # File: gui/calc_menu.c, Line: 318 # File: gui/preferences.c, Line: 4240 msgid "Time step δt" msgstr "Time step δt" # File: gui/calc_menu.c, Line: 319 # File: gui/preferences.c, Line: 4229 msgid "Step(s) between conf." msgstr "Step(s) between conf." # File: gui/calc_menu.c, Line: 580 msgid "All Rings (No Rule)" msgstr "All Rings (No Rule)" # File: gui/calc_menu.c, Line: 581 msgid "King's [1, 3]" msgstr "King's [1, 3]" # File: gui/calc_menu.c, Line: 582 msgid "Guttman's [2]" msgstr "Guttman's [2]" # File: gui/calc_menu.c, Line: 583 msgid "Primitives [4, 5, 6]" msgstr "Primitives [4, 5, 6]" # File: gui/calc_menu.c, Line: 584 msgid "Strongs [4, 5]" msgstr "Strongs [4, 5]" # File: gui/calc_menu.c, Line: 585 msgid "Definition of ring to be used: " msgstr "Definition of ring to be used: " # File: gui/calc_menu.c, Line: 585 msgid "Atom(s) to initiate the search from: " msgstr "Atom(s) to initiate the search from: " # File: gui/calc_menu.c, Line: 586 msgid "nmax = maximum size for a ring *" msgstr "nmax = maximum size for a ring *" # File: gui/calc_menu.c, Line: 587 msgid "Maximum number of rings of size n per MD step **" msgstr "Maximum number of rings of size n per MD step **" # File: gui/calc_menu.c, Line: 588 msgid "nmax = maximum size for a chain *" msgstr "nmax = maximum size for a chain *" # File: gui/calc_menu.c, Line: 589 msgid "Maximum number of chains of size n per MD step **" msgstr "Maximum number of chains of size n per MD step **" # File: gui/calc_menu.c, Line: 590 # File: gui/preferences.c, Line: 470 msgid "Only search for ABAB rings" msgstr "Only search for ABAB rings" # File: gui/calc_menu.c, Line: 590 msgid "No homopolar bonds in the rings (A-A, B-B ...) ***" msgstr "No homopolar bonds in the rings (A-A, B-B ...) ***" # File: gui/calc_menu.c, Line: 590 # File: gui/preferences.c, Line: 472 msgid "No homopolar bonds in the connectivity matrix" msgstr "No homopolar bonds in the connectivity matrix" # File: gui/calc_menu.c, Line: 591 # File: gui/preferences.c, Line: 476 msgid "Only search for AAAA chains" msgstr "Only search for AAAA chains" # File: gui/calc_menu.c, Line: 591 # File: gui/preferences.c, Line: 477 msgid "Only search for ABAB chains" msgstr "Only search for ABAB chains" # File: gui/calc_menu.c, Line: 592 msgid "No homopolar bonds in the chains (A-A, B-B ...) ***" msgstr "No homopolar bonds in the chains (A-A, B-B ...) ***" # File: gui/calc_menu.c, Line: 592 msgid "Only search for 1-(2)n-1 coordinated atom chains, ie. isolated chains." msgstr "Only search for 1-(2)n-1 coordinated atom chains, ie. isolated chains." # File: gui/calc_menu.c, Line: 594 msgid "in total number of nodes (or atoms)" msgstr "in total number of nodes (or atoms)" # File: gui/calc_menu.c, Line: 595 msgid "value used for memory allocation = f(nmax, system studied)" msgstr "value used for memory allocation = f(nmax, system studied)" # File: gui/calc_menu.c, Line: 596 msgid "but homopolar bonds can shorten the rings" msgstr "but homopolar bonds can shorten the rings" # File: gui/calc_menu.c, Line: 608 # File: gui/chainscall.c, Line: 124 # File: gui/ringscall.c, Line: 163 # File: opengl/edit/cbuild_edit.c, Line: 949 # File: opengl/win/initcoord.c, Line: 645 # File: opengl/win/m_coord.c, Line: 597 # File: opengl/win/w_search.c, Line: 4154 msgid "All" msgstr "All" # File: gui/calc_menu.c, Line: 611 # File: opengl/win/w_search.c, Line: 3917,4147 msgid "Chemical Species" msgstr "Chemical Species" # File: gui/calc_menu.c, Line: 782 msgid "Save neighbors analysis in file" msgstr "Save neighbors analysis in file" # File: calc/cpmd/cpmd_init.c, Line: 1542 # File: calc/dl_poly/dlp_field.c, Line: 4753 # File: curve/w_data.c, Line: 181 # File: curve/w_img.c, Line: 250 # File: gui/calc_menu.c, Line: 782 # File: gui/callbacks.c, Line: 560,918,1775 # File: gui/gui.c, Line: 772,853 # File: gui/work_menu.c, Line: 134,148,177 # File: opengl/draw/image.c, Line: 212 # File: opengl/draw/movie.c, Line: 1310 # File: opengl/win/m_map.c, Line: 885 # File: opengl/win/w_chains.c, Line: 959 # File: opengl/win/w_rings.c, Line: 1094 msgid "Save" msgstr "Save" # File: gui/calc_menu.c, Line: 868 msgid "You must specify a number of δr intervals >= 2\n" msgstr "You must specify a number of δr intervals >= 2\n" # File: gui/calc_menu.c, Line: 822 msgid "You must specify a maximum wave vector Qmax[FFT]\n" msgstr "You must specify a maximum wave vector Qmax[FFT]\n" # File: gui/calc_menu.c, Line: 843 msgid "You must specify a maximum wave vector Qmax\n" "note that Qmax must be > Qmin" msgstr "You must specify a maximum wave vector Qmax\n" "note that Qmax must be > Qmin" # File: gui/calc_menu.c, Line: 850 msgid "You must specify a number of δq >= 2\n" "to discretize the reciprocal space between 0.0 and Qmax\n" msgstr "You must specify a number of δq >= 2\n" "to discretize the reciprocal space between 0.0 and Qmax\n" # File: gui/calc_menu.c, Line: 883 msgid "ring" msgstr "ring" # File: gui/calc_menu.c, Line: 892 msgid "chain" msgstr "chain" # File: gui/calc_menu.c, Line: 896 msgid "You must specify a maximum %s size > 1 for the search" msgstr "You must specify a maximum %s size > 1 for the search" # File: gui/calc_menu.c, Line: 929 msgid "You must specify a number lmax ∈ [2-40]" msgstr "You must specify a number lmax ∈ [2-40]" # File: gui/calc_menu.c, Line: 949 msgid "You must specify the time step δt\n" msgstr "You must specify the time step δt\n" # File: gui/calc_menu.c, Line: 997 msgid "You must specify the number of frequency points\n" msgstr "You must specify the number of frequency points\n" # File: gui/calc_menu.c, Line: 1011 msgid "Number of δr [Dijmin-Dijmax]" msgstr "Number of δr [Dijmin-Dijmax]" # File: gui/calc_menu.c, Line: 1012 msgid "Number of δθ [0-180°]" msgstr "Number of δθ [0-180°]" # File: gui/calc_menu.c, Line: 1013 msgid "First coordination sphere properties" msgstr "First coordination sphere properties" # File: gui/calc_menu.c, Line: 1014 msgid "Bond and dihedral angles distribution" msgstr "Bond and dihedral angles distribution" # File: gui/calc_menu.c, Line: 1015 msgid "Search for molecules and isolated fragments" msgstr "Search for molecules and isolated fragments" # File: gui/calc_menu.c, Line: 1016 msgid "Output detailed results in text file" msgstr "Output detailed results in text file" # File: gui/calc_menu.c, Line: 1130 msgid "You must specify a probability between 0.0 and 1.0" msgstr "You must specify a probability between 0.0 and 1.0" # File: gui/calc_menu.c, Line: 1134 msgid "Qlim must be ≥ Qmin and ≤ Qmax" msgstr "Qlim must be ≥ Qmin and ≤ Qmax" # File: gui/calc_menu.c, Line: 1160 msgid "The smoothing factor must be between 0.0 and 1.0" msgstr "The smoothing factor must be between 0.0 and 1.0" # File: gui/calc_menu.c, Line: 1349 msgid "No data set(s) to be smoothed\n" msgstr "No data set(s) to be smoothed\n" # File: gui/calc_menu.c, Line: 1364 msgid "Probability to keep wave\nvector q > Qlim ∈ [0.0-1.0]" msgstr "Probability to keep wave\nvector q > Qlim ∈ [0.0-1.0]" # File: gui/calc_menu.c, Line: 1365 msgid "Qlim-1] ∈ [Qmin-Qmax]" msgstr "Qlim-1] ∈ [Qmin-Qmax]" # File: gui/calc_menu.c, Line: 1366 msgid " Advanced options" msgstr " Advanced options" # File: gui/calc_menu.c, Line: 1402 msgid " Gaussian data smoothing" msgstr " Gaussian data smoothing" # File: gui/calc_menu.c, Line: 1407 msgid "Factor [0.0-1.0]" msgstr "Factor [0.0-1.0]" # File: gui/calc_menu.c, Line: 1411 msgid "Smooth" msgstr "Smooth" # File: gui/calc_menu.c, Line: 1430 msgid "Number of δr steps" msgstr "Number of δr steps" # File: gui/calc_menu.c, Line: 1431 msgid "Number of δq steps" msgstr "Number of δq steps" # File: gui/calc_menu.c, Line: 1434 msgid "Qmax-1]" msgstr "Qmax-1]" # File: gui/calc_menu.c, Line: 1436 msgid "Qmax for the FFT [Å-1]" msgstr "Qmax for the FFT [Å-1]" # File: gui/calc_menu.c, Line: 1481 msgid "Dmax is the maximum inter-atomic distance in the model" msgstr "Dmax is the maximum inter-atomic distance in the model" # File: gui/calc_menu.c, Line: 1487,1864 msgid "Qmin is the minimum wave vector for the model" msgstr "Qmin is the minimum wave vector for the model" # File: gui/calc_menu.c, Line: 1493 msgid "Qmax is the maximum wave vector to compute S(q)" msgstr "Qmax is the maximum wave vector to compute S(q)" # File: gui/calc_menu.c, Line: 1667 msgid "Number of δt results to save" msgstr "Number of δt results to save" # File: gui/calc_menu.c, Line: 1667 msgid "Number of q vectors to analyze" msgstr "Number of q vectors to analyze" # File: gui/calc_menu.c, Line: 1708 msgid "This value must be > 0 and < number of steps" msgstr "This value must be > 0 and < number of steps" # File: gui/calc_menu.c, Line: 1713,1931 msgid "%d calculation results in total !" msgstr "%d calculation results in total !" # File: gui/calc_menu.c, Line: 1727 msgid "This value must be > 0" msgstr "This value must be > 0" # File: gui/calc_menu.c, Line: 1890 msgid "ω points in [0.0, ωmax]" msgstr "ω points in [0.0, ωmax]" # File: gui/calc_menu.c, Line: 1876 msgid "δtmin is the correlation threshold" msgstr "δtmin is the correlation threshold" # File: gui/calc_menu.c, Line: 1905 msgid "Results" msgstr "Results" # File: gui/calc_menu.c, Line: 1908 msgid "atomes cannot yet display 3D results," msgstr "atomes cannot yet display 3D results," # File: gui/calc_menu.c, Line: 1909 msgid "but we are working to add this feature !" msgstr "but we are working to add this feature !" # File: gui/calc_menu.c, Line: 1910 msgid "For the time being you need to select" msgstr "For the time being you need to select" # File: gui/calc_menu.c, Line: 1911 msgid "what to display using the 2D graph system:" msgstr "what to display using the 2D graph system:" # File: gui/calc_menu.c, Line: 1928 msgid "All δt correlated calculations" msgstr "All δt correlated calculations" # File: gui/calc_menu.c, Line: 1956 msgid "Intermediate scattering: F(q,δt)" msgstr "Intermediate scattering: F(q,δt)" # File: gui/calc_menu.c, Line: 1956 msgid "Dynamic calculations: S(q,ω)" msgstr "Dynamic calculations: S(q,ω)" # File: gui/callbacks.c, Line: 295 msgid "Impossible to %s project file: \n\n" "\t\t%s\n\n" "\tError %s %s\n" "\tProject file version: %1.1f\n" msgstr "Impossible to %s project file: \n\n" "\t\t%s\n\n" "\tError %s %s\n" "\tProject file version: %1.1f\n" # File: gui/callbacks.c, Line: 309 msgid "Impossible to %s workspace file.\n" "Error with project: \n\n" "\t\t%s\n\n" "\tError %s %s\n" "\tProject file version: %1.1f\n" msgstr "Impossible to %s workspace file.\n" "Error with project: \n\n" "\t\t%s\n\n" "\tError %s %s\n" "\tProject file version: %1.1f\n" # File: gui/callbacks.c, Line: 1545 msgid "Error while parsing the chemical information\n" "please check carefully the coordinates file" msgstr "Error while parsing the chemical information\n" "please check carefully the coordinates file" # File: gui/callbacks.c, Line: 88,1776 msgid "XYZ file" msgstr "XYZ file" # File: gui/callbacks.c, Line: 89 msgid "XYZ file - NPT" msgstr "XYZ file - NPT" # File: gui/callbacks.c, Line: 90,1776 msgid "Chem3D file" msgstr "Chem3D file" # File: gui/callbacks.c, Line: 91 msgid "CPMD trajectory" msgstr "CPMD trajectory" # File: gui/callbacks.c, Line: 92 msgid "CPMD trajectory - NPT" msgstr "CPMD trajectory - NPT" # File: gui/callbacks.c, Line: 93 msgid "VASP trajectory" msgstr "VASP trajectory" # File: gui/callbacks.c, Line: 94 msgid "VASP trajectory - NPT" msgstr "VASP trajectory - NPT" # File: gui/callbacks.c, Line: 95,96 msgid "PDB file" msgstr "PDB file" # File: gui/callbacks.c, Line: 97 msgid "Cryst. information (crystal build) - single configuration" msgstr "Cryst. information (crystal build) - single configuration" # File: gui/callbacks.c, Line: 98 msgid "Cryst. information (crystal build) - multiple configurations" msgstr "Cryst. information (crystal build) - multiple configurations" # File: gui/callbacks.c, Line: 99 msgid "Cryst. information (symmetry positions) - single configuration" msgstr "Cryst. information (symmetry positions) - single configuration" # File: gui/callbacks.c, Line: 100 msgid "DL-POLY HISTORY file" msgstr "DL-POLY HISTORY file" # File: gui/callbacks.c, Line: 101 msgid "ISAACS Project File" msgstr "ISAACS Project File" # File: gui/callbacks.c, Line: 133 msgid "Close workspace ?" msgstr "Close workspace ?" # File: calc/calc.c, Line: 106 # File: gui/callbacks.c, Line: 133 # File: gui/preferences.c, Line: 4945,4978 msgid "Are you sure ?" msgstr "Are you sure ?" # File: gui/callbacks.c, Line: 156 msgid "I/O error" msgstr "I/O error" # File: gui/callbacks.c, Line: 157 msgid "project information" msgstr "project information" # File: gui/callbacks.c, Line: 158 msgid "curve(s) information" msgstr "curve(s) information" # File: gui/callbacks.c, Line: 159 msgid "OpenGL information" msgstr "OpenGL information" # File: gui/callbacks.c, Line: 160 msgid "atom's data - A" msgstr "atom's data - A" # File: gui/callbacks.c, Line: 161 msgid "atom's data - B" msgstr "atom's data - B" # File: gui/callbacks.c, Line: 162 msgid "updating project" msgstr "updating project" # File: gui/callbacks.c, Line: 163 msgid "this should not happen" msgstr "this should not happen" # File: gui/callbacks.c, Line: 164 msgid "coordination data" msgstr "coordination data" # File: gui/callbacks.c, Line: 165 msgid "ring(s) data" msgstr "ring(s) data" # File: gui/callbacks.c, Line: 166 msgid "chain(s) data" msgstr "chain(s) data" # File: gui/callbacks.c, Line: 167 msgid "molecule(s) data" msgstr "molecule(s) data" # File: gui/callbacks.c, Line: 168 msgid "analysis data" msgstr "analysis data" # File: gui/callbacks.c, Line: 169 msgid "ab-initio data" msgstr "ab-initio data" # File: gui/callbacks.c, Line: 170 msgid "classical data" msgstr "classical data" # File: gui/callbacks.c, Line: 222 msgid "File : %s\n" msgstr "File : %s\n" # File: gui/callbacks.c, Line: 223 msgid "Function: %s()\n" msgstr "Function: %s()\n" # File: gui/callbacks.c, Line: 224 msgid "Line : %d" msgstr "Line : %d" # File: gui/callbacks.c, Line: 296 msgid "open" msgstr "open" # File: gui/callbacks.c, Line: 296 msgid "save" msgstr "save" # File: gui/callbacks.c, Line: 298,473 # File: gui/interface.c, Line: 340 msgid "reading" msgstr "reading" # File: gui/callbacks.c, Line: 298,473 # File: gui/interface.c, Line: 340 msgid "saving" msgstr "saving" # File: gui/callbacks.c, Line: 528 msgid "Error %s workspace file\n%s\n" msgstr "Error %s workspace file\n%s\n" # File: gui/callbacks.c, Line: 560 msgid "Open Project File(s)" msgstr "Open Project File(s)" # File: gui/callbacks.c, Line: 560 msgid "Save Project File" msgstr "Save Project File" # File: gui/callbacks.c, Line: 560 msgid "Open Workspace" msgstr "Open Workspace" # File: gui/callbacks.c, Line: 560 msgid "Save Workspace" msgstr "Save Workspace" # File: gui/callbacks.c, Line: 560,918,1381,1775 # File: gui/gui.c, Line: 767,847 # File: gui/work_menu.c, Line: 132,145 # File: opengl/win/m_map.c, Line: 885 msgid "Open" msgstr "Open" # File: gui/callbacks.c, Line: 562 msgid "Project file (*.apf)" msgstr "Project file (*.apf)" # File: gui/callbacks.c, Line: 562 msgid "Workspace file (*.awf)" msgstr "Workspace file (*.awf)" # File: gui/callbacks.c, Line: 580 msgid "A workspace is already open !" msgstr "A workspace is already open !" # File: gui/callbacks.c, Line: 584 msgid "Empty workspace ... nothing to be saved\n" msgstr "Empty workspace ... nothing to be saved\n" # File: gui/callbacks.c, Line: 591 msgid "Workspace contains only empty projects ... nothing to be saved\n" msgstr "Workspace contains only empty projects ... nothing to be saved\n" # File: gui/callbacks.c, Line: 596 msgid "No project open ... nothing to be saved\n" msgstr "No project open ... nothing to be saved\n" # File: gui/callbacks.c, Line: 600 msgid "Empty project ... nothing to be saved\n" msgstr "Empty project ... nothing to be saved\n" # File: gui/callbacks.c, Line: 651 msgid "%s - New project" msgstr "%s - New project" # File: calc/cpmd/cpmd_init.c, Line: 1556 # File: gui/callbacks.c, Line: 711,916,1388,1831 # File: opengl/win/m_map.c, Line: 937 msgid "All files (*)" msgstr "All files (*)" # File: gui/callbacks.c, Line: 827 msgid "ISAACS project file (XML) successfully opened" msgstr "ISAACS project file (XML) successfully opened" # File: gui/callbacks.c, Line: 880 msgid "Impossible to write the IPF file\n" msgstr "Impossible to write the IPF file\n" # File: gui/callbacks.c, Line: 916 msgid "IPF file (*.ipf)" msgstr "IPF file (*.ipf)" # File: gui/callbacks.c, Line: 917 msgid "Import ISAACS Project File" msgstr "Import ISAACS Project File" # File: gui/callbacks.c, Line: 917 msgid "Export ISAACS Project File" msgstr "Export ISAACS Project File" # File: gui/callbacks.c, Line: 923 msgid "Save an empty project ?" msgstr "Save an empty project ?" # File: gui/callbacks.c, Line: 923 msgid "Do you want to save an empty project ?" msgstr "Do you want to save an empty project ?" # File: gui/callbacks.c, Line: 1037 msgid "Label of atomic spec. N° %d:" msgstr "Label of atomic spec. N° %d:" # File: gui/callbacks.c, Line: 1043 msgid "Number of %s atom(s):" msgstr "Number of %s atom(s):" # File: gui/callbacks.c, Line: 1048 msgid "Number of atom(s) for spec. N° %d:" msgstr "Number of atom(s) for spec. N° %d:" # File: gui/callbacks.c, Line: 1129 msgid "Chemical species info:" msgstr "Chemical species info:" # File: gui/callbacks.c, Line: 1132 msgid "Species: " msgstr "Species: " # File: gui/callbacks.c, Line: 1271 msgid "Total number of atom(s):" msgstr "Total number of atom(s):" # File: gui/callbacks.c, Line: 1271 msgid "Number of chemical species:" msgstr "Number of chemical species:" # File: gui/callbacks.c, Line: 1272 msgid "Reading CPMD / VASP trajectory" msgstr "Reading CPMD / VASP trajectory" # File: calc/cp2k/cp2k_mol.c, Line: 251 # File: calc/cpmd/cpmd_atoms.c, Line: 446 # File: calc/cpmd/cpmd_nose.c, Line: 466,1255 # File: calc/dl_poly/dlp_atom.c, Line: 739 # File: calc/dl_poly/dlp_edit.c, Line: 1264 # File: calc/dl_poly/dlp_mol.c, Line: 473,756 # File: curve/datab.c, Line: 473,526,1060 # File: gui/callbacks.c, Line: 1273 # File: gui/gtk-misc.c, Line: 619 # File: opengl/edit/atom_edit.c, Line: 445 # File: opengl/win/m_map.c, Line: 506,739,983 msgid "Apply" msgstr "Apply" # File: gui/callbacks.c, Line: 1352 msgid "Please select the file format of the NPT cell data" msgstr "Please select the file format of the NPT cell data" # File: gui/callbacks.c, Line: 1352,1686 msgid "Select format:" msgstr "Select format:" # File: gui/callbacks.c, Line: 1378 msgid "Read cell data for NPT molecular dynamics" msgstr "Read cell data for NPT molecular dynamics" # File: gui/callbacks.c, Line: 1384 msgid "DAT files (*.dat)" msgstr "DAT files (*.dat)" # File: gui/callbacks.c, Line: 1531 msgid "Error loading atomic coordinates:\nfile does not exist" msgstr "Error loading atomic coordinates:\nfile does not exist" # File: gui/callbacks.c, Line: 1534 msgid "Error loading coordinates file: format not supported" msgstr "Error loading coordinates file: format not supported" # File: gui/callbacks.c, Line: 1537 msgid "Error at input: impossible to process input file data" msgstr "Error at input: impossible to process input file data" # File: gui/callbacks.c, Line: 1619 msgid "%s - symmetry position(s)" msgstr "%s - symmetry position(s)" # File: gui/callbacks.c, Line: 1686 msgid "Please select the file format of the atomic coordinates" msgstr "Please select the file format of the atomic coordinates" # File: gui/callbacks.c, Line: 1694 msgid "Please select the format of the atomic coordinates" msgstr "Please select the format of the atomic coordinates" # File: gui/callbacks.c, Line: 1734 msgid "Impossible to export the atomic coordinates\nError code: %d" msgstr "Impossible to export the atomic coordinates\nError code: %d" # File: gui/callbacks.c, Line: 1774 msgid "Import atomic coordinates" msgstr "Import atomic coordinates" # File: gui/callbacks.c, Line: 1774 msgid "Export atomic coordinates" msgstr "Export atomic coordinates" # File: gui/callbacks.c, Line: 1850 msgid "No project loaded ... nothing to be saved\n" msgstr "No project loaded ... nothing to be saved\n" # File: gui/callbacks.c, Line: 1854 msgid "Project %s is empty ... nothing to be saved\n" msgstr "Project %s is empty ... nothing to be saved\n" # File: gui/chainscall.c, Line: 352 msgid "\tThe chain statistics have failed !\n\n" "The number of chain per MD step appears\n" "to be bigger than the initial value of %d\n" "used to allocate memory to store the results.\n\n" "Increase the value and start again !" msgstr "\tThe chain statistics have failed !\n\n" "The number of chain per MD step appears\n" "to be bigger than the initial value of %d\n" "used to allocate memory to store the results.\n\n" "Increase the value and start again !" # File: gui/chainscall.c, Line: 73 msgid "Chains - Cc(n)[All]" msgstr "Chains - Cc(n)[All]" # File: gui/chainscall.c, Line: 76 msgid "Chains - Cc(n)[%s]" msgstr "Chains - Cc(n)[%s]" # File: gui/chainscall.c, Line: 94 # File: opengl/win/glwindow.c, Line: 312 # File: opengl/win/menu_bar.c, Line: 216,220 # File: opengl/win/popup.c, Line: 4236 # File: opengl/win/w_coord.c, Line: 1332 msgid "Chain(s)" msgstr "Chain(s)" # File: gui/chainscall.c, Line: 132 msgid "\n\nChain statistics\n\n" msgstr "\n\nChain statistics\n\n" # File: gui/chainscall.c, Line: 136 msgid " * only AAAA chains have been considered\n" msgstr " * only AAAA chains have been considered\n" # File: gui/chainscall.c, Line: 140 msgid " * only ABAB chains have been considered\n" msgstr " * only ABAB chains have been considered\n" # File: gui/chainscall.c, Line: 144 msgid " * homopolar bonds can not shorten the chains\n" msgstr " * homopolar bonds can not shorten the chains\n" # File: gui/chainscall.c, Line: 148 msgid " * only 1-(2)" msgstr " * only 1-(2)" # File: gui/chainscall.c, Line: 150 msgid "-1 chains have been considered, ie. isolated chains\n" msgstr "-1 chains have been considered, ie. isolated chains\n" # File: gui/chainscall.c, Line: 152 # File: gui/ringscall.c, Line: 189 msgid "\n Atom(s) used to start the search: " msgstr "\n Atom(s) used to start the search: " # File: gui/chainscall.c, Line: 154 # File: gui/ringscall.c, Line: 191 msgid " atom(s) only" msgstr " atom(s) only" # File: gui/chainscall.c, Line: 158 msgid "\n Average number of chains per configuration: " msgstr "\n Average number of chains per configuration: " # File: gui/chainscall.c, Line: 168 msgid "\n Total number of chains: " msgstr "\n Total number of chains: " # File: gui/chainscall.c, Line: 176 msgid "\n\t n Av. by step \tC" msgstr "\n\t n Av. by step \tC" # File: gui/chainscall.c, Line: 191 msgid "\n\t n\tNumber\t\tC" msgstr "\n\t n\tNumber\t\tC" # File: gui/chainscall.c, Line: 346 msgid "The chain statistics calculation has failed" msgstr "The chain statistics calculation has failed" # File: gui/edit_menu.c, Line: 779 msgid "To apply PBC or use fractional coordinates\n" "describe properly the simulation box parameters" msgstr "To apply PBC or use fractional coordinates\n" "describe properly the simulation box parameters" # File: gui/edit_menu.c, Line: 73 msgid "Edges [Å]" msgstr "Edges [Å]" # File: gui/edit_menu.c, Line: 73 msgid "Angles [°]" msgstr "Angles [°]" # File: gui/edit_menu.c, Line: 411 msgid "Atom:" msgstr "Atom:" # File: calc/dl_poly/dlp_edit.c, Line: 2320 # File: gui/edit_menu.c, Line: 411 msgid "Element:" msgstr "Element:" # File: gui/edit_menu.c, Line: 412 msgid "Atomic number:" msgstr "Atomic number:" # File: gui/edit_menu.c, Line: 412 msgid "Atomic mass:" msgstr "Atomic mass:" # File: gui/edit_menu.c, Line: 412 msgid "Radius:" msgstr "Radius:" # File: gui/preferences.c, Line: 3426,3587 # File: opengl/win/m_bonds.c, Line: 245 msgid "Radius" msgstr "Radius" # File: gui/edit_menu.c, Line: 413 msgid "Neutrons scattering length:" msgstr "Neutrons scattering length:" # File: gui/edit_menu.c, Line: 413 msgid "X-rays scattering length:" msgstr "X-rays scattering length:" # File: gui/edit_menu.c, Line: 414 msgid "Covalent" msgstr "Covalent" # File: gui/edit_menu.c, Line: 414 msgid "Ionic" msgstr "Ionic" # File: gui/edit_menu.c, Line: 414 msgid "In Crystal" msgstr "In Crystal" # File: gui/edit_menu.c, Line: 76 msgid "Chemistry and physics" msgstr "Chemistry and physics" # File: gui/edit_menu.c, Line: 76 msgid "Box and periodicity" msgstr "Box and periodicity" # File: gui/edit_menu.c, Line: 76 msgid "Bond cutoffs" msgstr "Bond cutoffs" # File: gui/edit_menu.c, Line: 76,310 msgid "Lattice vectors" msgstr "Lattice vectors" # File: gui/edit_menu.c, Line: 279 msgid "Apply Periodic Boundary Conditions" msgstr "Apply Periodic Boundary Conditions" # File: gui/edit_menu.c, Line: 282 msgid "Fractional coordinates" msgstr "Fractional coordinates" # File: gui/edit_menu.c, Line: 714 msgid "To define the existence of a bond between 2 atoms i (α) and j (β), " msgstr "To define the existence of a bond between 2 atoms i (α) and j (β), " # File: gui/edit_menu.c, Line: 715 msgid "a bond exits if the 2 following conditions are verified:" msgstr "a bond exits if the 2 following conditions are verified:" # File: gui/edit_menu.c, Line: 716 msgid "1) Dij < first minimum of the total g(r) - rcut (Tot.)" msgstr "1) Dij < first minimum of the total g(r) - rcut (Tot.)" # File: gui/edit_menu.c, Line: 717 msgid "2) Dij < first minimum of the partial gα,β(r) - rcut (α,β)" msgstr "2) Dij < first minimum of the partial gα,β(r) - rcut (α,β)" # File: gui/edit_menu.c, Line: 718 msgid "0.0 < rcut ≤ Dmax" msgstr "0.0 < rcut ≤ Dmax" # File: gui/edit_menu.c, Line: 719 msgid "Dmax is the maximum inter-atomic distance in the model\n" msgstr "Dmax is the maximum inter-atomic distance in the model\n" # File: gui/edit_menu.c, Line: 727 msgid "%s\twith\tDmax = %f Å" msgstr "%s\twith\tDmax = %f Å" # File: gui/edit_menu.c, Line: 732,737 msgid "With %s" msgstr "With %s" # File: gui/edit_menu.c, Line: 820 # File: opengl/win/w_cutoffs.c, Line: 229 msgid "Data can be lost !" msgstr "Data can be lost !" # File: gui/edit_menu.c, Line: 820 # File: opengl/win/w_cutoffs.c, Line: 229 msgid "You will lose\n rings statistics and/or chains statistics data\nProceed anyway ?" msgstr "You will lose\n rings statistics and/or chains statistics data\nProceed anyway ?" # File: gui/grcall.c, Line: 69,70,71,72,73,74,75,76 # File: gui/sktcall.c, Line: 73,74,75,76,187,188,189,190 # File: gui/sqcall.c, Line: 65,66,67,68 msgid "Neutrons" msgstr "Neutrons" # File: gui/grcall.c, Line: 70,72,74,76,78,80,82,84,92,96,106,110,114 # File: gui/sktcall.c, Line: 74,76,78,80,88,98,106,110,114,118,188,190,192,194,203,213,221,225,229,233 # File: gui/sqcall.c, Line: 66,68,70,72,80,90,98,102,106,110 msgid "smoothed" msgstr "smoothed" # File: gui/grcall.c, Line: 77,78,79,80,81,82,83,84 # File: gui/sktcall.c, Line: 77,78,79,80,191,192,193,194 # File: gui/sqcall.c, Line: 69,70,71,72 msgid "X-rays" msgstr "X-rays" # File: gui/grcall.c, Line: 133 msgid "\n\nRadial distribution function(s)" msgstr "\n\nRadial distribution function(s)" # File: gui/grcall.c, Line: 136 msgid " - real space calculation\n\n" msgstr " - real space calculation\n\n" # File: gui/grcall.c, Line: 140 msgid " - FFT[S(q)]\n\n" msgstr " - FFT[S(q)]\n\n" # File: gui/grcall.c, Line: 146 msgid "\tReciprocal space data:\n\n" msgstr "\tReciprocal space data:\n\n" # File: gui/grcall.c, Line: 147 msgid "\t - Minimum vector Q" msgstr "\t - Minimum vector Q" # File: gui/grcall.c, Line: 155 msgid "\n\t - Maximum vector Q" msgstr "\n\t - Maximum vector Q" # File: gui/grcall.c, Line: 157 msgid " for the FFT: " msgstr " for the FFT: " # File: gui/grcall.c, Line: 165 msgid "\tReal space discretization:\n\n" msgstr "\tReal space discretization:\n\n" # File: gui/grcall.c, Line: 166 msgid "\t - Number of δr steps: " msgstr "\t - Number of δr steps: " # File: gui/grcall.c, Line: 170 msgid "\n\n\t between 0.0 and " msgstr "\n\n\t between 0.0 and " # File: gui/grcall.c, Line: 173 # File: gui/sqcall.c, Line: 159 msgid "\n\t where " msgstr "\n\t where " # File: gui/grcall.c, Line: 176 msgid " is the maximum distance in real space, " msgstr " is the maximum distance in real space, " # File: gui/grcall.c, Line: 211 msgid "The g(r) calculation has failed" msgstr "The g(r) calculation has failed" # File: gui/grcall.c, Line: 330 msgid "The g(r) from FFT[S(k)] calculation has failed" msgstr "The g(r) from FFT[S(k)] calculation has failed" # File: curve/datab.c, Line: 1059 # File: gui/gtk-misc.c, Line: 619,2380,2395 msgid "Cancel" msgstr "Cancel" # File: gui/gtk-misc.c, Line: 1645 # File: opengl/win/glwindow.c, Line: 324 # File: opengl/win/m_atoms.c, Line: 712,822 # File: opengl/win/m_axis.c, Line: 337 # File: opengl/win/m_box.c, Line: 631 # File: opengl/win/m_coord.c, Line: 675 # File: opengl/win/m_poly.c, Line: 455 # File: opengl/win/m_rep.c, Line: 752 # File: opengl/win/menu_bar.c, Line: 238 # File: opengl/win/popup.c, Line: 4239 msgid "Advanced" msgstr "Advanced" # File: gui/gtk-misc.c, Line: 2345 msgid "Impossible to locate file: %s" msgstr "Impossible to locate file: %s" # File: gui/gui.c, Line: 113,124 # File: gui/initc.c, Line: 244,318 msgid "S(q) from FFT[g(r)]" msgstr "S(q) from FFT[g(r)]" # File: gui/gui.c, Line: 114,125 # File: gui/initc.c, Line: 246,325 msgid "S(q) from Debye Equation" msgstr "S(q) from Debye Equation" # File: gui/gui.c, Line: 115,126 # File: gui/initc.c, Line: 239,332 msgid "g(r)/G(r) from FFT[S(q)]" msgstr "g(r)/G(r) from FFT[S(q)]" # File: gui/gui.c, Line: 116 msgid "Bonds and Angles" msgstr "Bonds and Angles" # File: gui/gui.c, Line: 117,129 # File: gui/initc.c, Line: 261,350 msgid "Ring Statistics" msgstr "Ring Statistics" # File: gui/gui.c, Line: 118,130 # File: gui/initc.c, Line: 265 msgid "Chain Statistics" msgstr "Chain Statistics" # File: gui/gui.c, Line: 119,131 # File: gui/initc.c, Line: 269,362 msgid "Spherical Harmonics" msgstr "Spherical Harmonics" # File: gui/gui.c, Line: 120,132 # File: gui/initc.c, Line: 275,368 msgid "Mean Squared Displacement" msgstr "Mean Squared Displacement" # File: gui/gui.c, Line: 121,133 # File: gui/initc.c, Line: 280,374 msgid "Dynamic Structure Factor" msgstr "Dynamic Structure Factor" # File: gui/gui.c, Line: 127 # File: gui/initc.c, Line: 253,338 msgid "Bond Properties" msgstr "Bond Properties" # File: gui/gui.c, Line: 128 # File: gui/initc.c, Line: 257,344 msgid "Angle Distributions" msgstr "Angle Distributions" # File: gui/gui.c, Line: 152,1021 msgid "About" msgstr "About" # File: gui/gui.c, Line: 152 msgid "open about dialog" msgstr "open about dialog" # File: gui/gui.c, Line: 153 msgid "Periodic table" msgstr "Periodic table" # File: gui/gui.c, Line: 153 msgid "open periodic table" msgstr "open periodic table" # File: gui/gui.c, Line: 154,894 # File: gui/work_menu.c, Line: 198 msgid "Quit" msgstr "Quit" # File: gui/gui.c, Line: 154 msgid "quit atomes" msgstr "quit atomes" # File: gui/gui.c, Line: 157 msgid "Open workspace" msgstr "Open workspace" # File: gui/gui.c, Line: 157 msgid "open atomes workspace" msgstr "open atomes workspace" # File: gui/gui.c, Line: 158 msgid "Save workspace" msgstr "Save workspace" # File: gui/gui.c, Line: 158 msgid "save atomes workspace" msgstr "save atomes workspace" # File: gui/gui.c, Line: 159 msgid "Close workspace" msgstr "Close workspace" # File: gui/gui.c, Line: 159 msgid "close atomes workspace" msgstr "close atomes workspace" # File: gui/gui.c, Line: 162 msgid "New project" msgstr "New project" # File: gui/gui.c, Line: 162 msgid "create new atomes project" msgstr "create new atomes project" # File: gui/gui.c, Line: 163 msgid "Open project" msgstr "Open project" # File: gui/gui.c, Line: 163 msgid "open atomes project" msgstr "open atomes project" # File: gui/gui.c, Line: 168 # File: gui/preferences.c, Line: 2474,3678,3855,4319,5062 # File: opengl/win/glwindow.c, Line: 126 msgid "General" msgstr "General" # File: gui/gui.c, Line: 168,907,1033 # File: gui/work_menu.c, Line: 130 msgid "Workspace" msgstr "Workspace" # File: gui/gui.c, Line: 168 msgid "Projects" msgstr "Projects" # File: gui/gui.c, Line: 775,856 # File: gui/work_menu.c, Line: 134,148,177 msgid "Save As" msgstr "Save As" # File: curve/m_curve.c, Line: 556 # File: gui/gui.c, Line: 778,861 # File: gui/work_menu.c, Line: 135,151,180 # File: opengl/edit/atom_edit.c, Line: 447 # File: opengl/edit/cbuild_edit.c, Line: 1434 # File: opengl/edit/cell_edit.c, Line: 203 # File: opengl/win/w_atoms.c, Line: 547 # File: opengl/win/w_coord.c, Line: 1378 # File: opengl/win/w_measures.c, Line: 683 msgid "Close" msgstr "Close" # File: gui/gui.c, Line: 799 msgid "ISAACS Project File (*.ipf)" msgstr "ISAACS Project File (*.ipf)" # File: gui/gui.c, Line: 802 # File: gui/work_menu.c, Line: 156,185,195 msgid "Atomic Coordinates" msgstr "Atomic Coordinates" # File: gui/gui.c, Line: 826 # File: gui/work_menu.c, Line: 167 msgid "Make Active" msgstr "Make Active" # File: gui/gui.c, Line: 832 # File: gui/work_menu.c, Line: 171 msgid "Analyze: %s" msgstr "Analyze: %s" # File: gui/gui.c, Line: 838 # File: gui/work_menu.c, Line: 175 msgid "Edit Name" msgstr "Edit Name" # File: gui/gui.c, Line: 844 # File: gui/work_menu.c, Line: 144 msgid "New" msgstr "New" # File: curve/m_curve.c, Line: 78 # File: gui/gui.c, Line: 864 # File: gui/work_menu.c, Line: 153 msgid "Export" msgstr "Export" # File: gui/gui.c, Line: 879 # File: gui/work_menu.c, Line: 191 msgid "Import" msgstr "Import" # File: gui/gui.c, Line: 930 # File: gui/work_menu.c, Line: 140 msgid "Project(s)" msgstr "Project(s)" # File: gui/gui.c, Line: 971 msgid "Chemistry and Physics" msgstr "Chemistry and Physics" # File: gui/gui.c, Line: 972 msgid "Box and Periodicity" msgstr "Box and Periodicity" # File: gui/gui.c, Line: 973 msgid "Bond Cutoffs" msgstr "Bond Cutoffs" # File: gui/gui.c, Line: 985 # File: gui/tools.c, Line: 342 # File: project/close_p.c, Line: 371 msgid "Toolboxes" msgstr "Toolboxes" # File: gui/gui.c, Line: 1018 msgid "Periodic Table" msgstr "Periodic Table" # File: gui/gui.c, Line: 1019 msgid "Preferences" msgstr "Preferences" # File: curve/m_curve.c, Line: 572 # File: gui/gui.c, Line: 1020 # File: opengl/win/glwindow.c, Line: 599 # File: opengl/win/menu_bar.c, Line: 253 # File: opengl/win/popup.c, Line: 4281 msgid "Shortcuts" msgstr "Shortcuts" # File: gui/gui.c, Line: 1034 # File: opengl/win/m_tools.c, Line: 320,517 msgid "Edit" msgstr "Edit" # File: gui/gui.c, Line: 1035 msgid "Analyze" msgstr "Analyze" # File: curve/m_curve.c, Line: 614 # File: gui/gui.c, Line: 1036 # File: opengl/win/glwindow.c, Line: 639,1523 # File: opengl/win/menu_bar.c, Line: 281 msgid "Help" msgstr "Help" # File: gui/initc.c, Line: 99 msgid "Please wait calculation in progress" msgstr "Please wait calculation in progress" # File: gui/initc.c, Line: 102 msgid "Computing" msgstr "Computing" # File: gui/initc.c, Line: 261,350 msgid "Size n of the ring [total number of nodes]" msgstr "Size n of the ring [total number of nodes]" # File: gui/initc.c, Line: 265,356 msgid "Size n of the chain [total number of nodes]" msgstr "Size n of the chain [total number of nodes]" # File: gui/interface.c, Line: 339 msgid "\n\tError %s %s, at:\n" "\t\tFile : %s\n" "\t\tFunction: %s()\n" "\t\tLine : %d\n\n" "\tBacktrace:\n%s\t\t →\t\t call to\t%s()\n" msgstr "\n\tError %s %s, at:\n" "\t\tFile : %s\n" "\t\tFunction: %s()\n" "\t\tLine : %d\n\n" "\tBacktrace:\n%s\t\t →\t\t call to\t%s()\n" # File: gui/interface.c, Line: 353 msgid "\n\tError %s %s, at:\n" "\t\tFile : %s\n" "\t\tFunction: %s()\n" "\t\tLine : %d\n" msgstr "\n\tError %s %s, at:\n" "\t\tFile : %s\n" "\t\tFunction: %s()\n" "\t\tLine : %d\n" # File: gui/interface.c, Line: 529 msgid "\tSingle step chemical reaction\n" "\t\tConsider each configuration as a step in a chemical reaction:\n" "\t\t\t- Atomic coordinates are sorted based on occupancy or disorder site\n" "\t\t\t- Each describing the proportion of a reactant\n" "\t\t\t- A super lattice is build to respect these proportions\n\n" "\tMD trajectory\n" "\t\tConsider the CIF file a MD trajectory\n\n" "\t\tNumber of atom(s) must not change between configuration(s)\n\n" "\tSingle configuration \n" "\t\tSelect a single configuration in the CIF file" msgstr "\tSingle step chemical reaction\n" "\t\tConsider each configuration as a step in a chemical reaction:\n" "\t\t\t- Atomic coordinates are sorted based on occupancy or disorder site\n" "\t\t\t- Each describing the proportion of a reactant\n" "\t\t\t- A super lattice is build to respect these proportions\n\n" "\tMD trajectory\n" "\t\tConsider the CIF file a MD trajectory\n\n" "\t\tNumber of atom(s) must not change between configuration(s)\n\n" "\tSingle configuration \n" "\t\tSelect a single configuration in the CIF file" # File: gui/interface.c, Line: 534 msgid "\tMD trajectory\n" "\t\tConsider the CIF file a MD trajectory\n\n" "\t\tNumber of atom(s) must not change between configuration(s)\n\n" "\tSingle configuration \n" "\t\tSelect a single configuration in the CIF file" msgstr "\tMD trajectory\n" "\t\tConsider the CIF file a MD trajectory\n\n" "\t\tNumber of atom(s) must not change between configuration(s)\n\n" "\tSingle configuration \n" "\t\tSelect a single configuration in the CIF file" # File: gui/interface.c, Line: 677 msgid "\tLowest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊8.76⌋ = 8\n\n" "\tHighest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌈5.39⌉ = 6\n\n" "\tNearest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊6.82⌉ = 7\t\t and\t ⌊4.31⌉ = 4\n\n" "\t\t%s\n" msgstr "\tLowest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊8.76⌋ = 8\n\n" "\tHighest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌈5.39⌉ = 6\n\n" "\tNearest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊6.82⌉ = 7\t\t and\t ⌊4.31⌉ = 4\n\n" "\t\t%s\n" # File: gui/interface.c, Line: 117 msgid "Failed to open link:\n%s" msgstr "Failed to open link:\n%s" # File: gui/interface.c, Line: 121 msgid "Impossible to open link: " msgstr "Impossible to open link: " # File: gui/interface.c, Line: 139 msgid " Please contact me at:\n" msgstr " Please contact me at:\n" # File: gui/interface.c, Line: 144 msgid "\n Or check the website for information\n" msgstr "\n Or check the website for information\n" # File: gui/interface.c, Line: 147 msgid "Visit the project's website" msgstr "Visit the project's website" # File: gui/interface.c, Line: 187 msgid "Collaborations:" msgstr "Collaborations:" # File: gui/interface.c, Line: 189 msgid "Dr. Noël Jakse : dynamic structure factor" msgstr "Dr. Noël Jakse : dynamic structure factor" # File: gui/interface.c, Line: 191 msgid "Visualization, analyzis, creation/edition and post-processing of atomic scale models !" msgstr "Visualization, analyzis, creation/edition and post-processing of atomic scale models !" # File: calc/cpmd/cpmd_restart.c, Line: 200 # File: gui/interface.c, Line: 252,449 msgid "Information" msgstr "Information" # File: gui/interface.c, Line: 268 msgid "Warning" msgstr "Warning" # File: gui/interface.c, Line: 310,330 msgid "Error" msgstr "Error" # File: gui/interface.c, Line: 331 msgid "Details" msgstr "Details" # File: gui/interface.c, Line: 485 msgid "Leaving ?!" msgstr "Leaving ?!" # File: gui/interface.c, Line: 485 msgid "Are you sure you want to quit ?" msgstr "Are you sure you want to quit ?" # File: gui/interface.c, Line: 505,777 msgid "Parameter required" msgstr "Parameter required" # File: gui/interface.c, Line: 511 msgid "Cartesian" msgstr "Cartesian" # File: gui/interface.c, Line: 512 msgid "Atomic units" msgstr "Atomic units" # File: gui/interface.c, Line: 513 msgid "Fractional" msgstr "Fractional" # File: gui/interface.c, Line: 518 msgid "1 line by step, as many lines as MD steps" msgstr "1 line by step, as many lines as MD steps" # File: gui/interface.c, Line: 519 msgid "2 lines by step, twice as many lines as MD steps" msgstr "2 lines by step, twice as many lines as MD steps" # File: gui/interface.c, Line: 520 msgid "3 lines by step, three times as many lines as MD steps" msgstr "3 lines by step, three times as many lines as MD steps" # File: gui/interface.c, Line: 521 msgid "Single step chemical reaction" msgstr "Single step chemical reaction" # File: gui/interface.c, Line: 522 msgid "MD trajectory" msgstr "MD trajectory" # File: gui/interface.c, Line: 523 msgid "Single configuration" msgstr "Single configuration" # File: gui/interface.c, Line: 524 msgid "Round up to lowest integer" msgstr "Round up to lowest integer" # File: gui/interface.c, Line: 525 msgid "Round up to highest integer" msgstr "Round up to highest integer" # File: gui/interface.c, Line: 526 msgid "Round up to nearest integer" msgstr "Round up to nearest integer" # File: gui/interface.c, Line: 542 msgid "to lowest integer: nsites x occupancy" msgstr "to lowest integer: nsites x occupancy" # File: gui/interface.c, Line: 543 msgid "to highest integer: nsites x occupancy" msgstr "to highest integer: nsites x occupancy" # File: gui/interface.c, Line: 544 msgid "to nearest integer: nsites x occupancy" msgstr "to nearest integer: nsites x occupancy" # File: gui/interface.c, Line: 545 msgid "with nsites = f(space group, crystalline positions)" msgstr "with nsites = f(space group, crystalline positions)" # File: gui/interface.c, Line: 546 msgid "with nsites = f(symmetry positions, crystalline positions)" msgstr "with nsites = f(symmetry positions, crystalline positions)" # File: gui/interface.c, Line: 627 msgid "Parameter Required" msgstr "Parameter Required" # File: gui/interface.c, Line: 1088 msgid "%s - isolated" msgstr "%s - isolated" # File: gui/interface.c, Line: 1088 msgid " - isolated" msgstr " - isolated" # File: gui/main.c, Line: 179 msgid "\nUsage: atomes [OPTION]\n" " atomes [FILE]\n" " atomes [OPTION] [FILE]\n" " atomes [FILE1] [FILE2] ...\n" " atomes [OPTION1] [FILE1] [OPTION2] [FILE2] ...\n\n" "3D atomic-scale models analysis, creation/edition and post-processing tool\n\n" "options:\n" " -v, --version version information\n" " -h, --help display this help message\n\n" "files, any number, in any order, in the following formats:\n\n" " atomes workspace file : .awf\n" " atomes project file : .apf\n" " XYZ coordinates file : .xyz\n" " Chem3D coordinates file : .c3d\n" " CPMD trajectory : .trj\n" " VASP trajectory : .xdatcar\n" " PDB coordinates : .pdb, .ent\n" " Crystallographic Information File : .cif\n" " DL-POLY history file : .hist\n" " ISAACS project file : .ipf\n\n" " alternatively specify the file format using:\n\n" " -awf [FILE]\n" " -apf [FILE]\n" " -xyz [FILE]\n" " -c3d [FILE]\n" " -trj [FILE]\n" " -xdatcar [FILE]\n" " -pdb [FILE], or, -ent [FILE]\n" " -cif [FILE]\n" " -hist [FILE]\n" " -ipf [FILE]\n\n" "ex:\n\n" " atomes -pdb this.f file.awf -cif that.f *.xyz\n\n" "Image rendering from the command line:\n\n" "Usage: atomes [IMAGE_OPTIONS]\n" " -p, --png, --render-png render image in PNG format\n" " -j, --jpg, --render-jpg render image in JPEG format\n" " -o, --output=[FILE] image file name\n" " -W, --width=[XSIZE] image width\n" " -H, --height=[YSIZE] image height\n" " -s, --style=[STYLE] rendering style\n" " -r, --rep=[REP] representation type\n" " -b, --box=[STYLE] box style\n" " -a, --axis=[STYLE] axis style\n" " -e, --acolor=[MAP] atoms and bonds color map\n" " -t, --pcolor=[MAP] ployhedra color map\n" " -C, --box_color=[COLOR] box color\n" " -G, --back_grad=[GRAD] background gradient type\n" " -B, --back_color=[COLOR] background color\n" " -D, --back_dir=[DIR] background gradient direction\n" " -P, --back_pos=[POS] colors mixed position\n" " -U, --grad_col_a=[COL] gradient initial color\n" " -V, --grad_col_b=[COL] gradient final color\n\n" "ex:\n\n" " atomes --render-png --width=1920 -H 1024 --output=image.png project.apf -s ball_and_stick\n" " atomes --jpg --style=vdw -r ortho -e pc -t pc\n\n" msgstr "\nUsage: atomes [OPTION]\n" " atomes [FILE]\n" " atomes [OPTION] [FILE]\n" " atomes [FILE1] [FILE2] ...\n" " atomes [OPTION1] [FILE1] [OPTION2] [FILE2] ...\n\n" "3D atomic-scale models analysis, creation/edition and post-processing tool\n\n" "options:\n" " -v, --version version information\n" " -h, --help display this help message\n\n" "files, any number, in any order, in the following formats:\n\n" " atomes workspace file : .awf\n" " atomes project file : .apf\n" " XYZ coordinates file : .xyz\n" " Chem3D coordinates file : .c3d\n" " CPMD trajectory : .trj\n" " VASP trajectory : .xdatcar\n" " PDB coordinates : .pdb, .ent\n" " Crystallographic Information File : .cif\n" " DL-POLY history file : .hist\n" " ISAACS project file : .ipf\n\n" " alternatively specify the file format using:\n\n" " -awf [FILE]\n" " -apf [FILE]\n" " -xyz [FILE]\n" " -c3d [FILE]\n" " -trj [FILE]\n" " -xdatcar [FILE]\n" " -pdb [FILE], or, -ent [FILE]\n" " -cif [FILE]\n" " -hist [FILE]\n" " -ipf [FILE]\n\n" "ex:\n\n" " atomes -pdb this.f file.awf -cif that.f *.xyz\n\n" "Image rendering from the command line:\n\n" "Usage: atomes [IMAGE_OPTIONS]\n" " -p, --png, --render-png render image in PNG format\n" " -j, --jpg, --render-jpg render image in JPEG format\n" " -o, --output=[FILE] image file name\n" " -W, --width=[XSIZE] image width\n" " -H, --height=[YSIZE] image height\n" " -s, --style=[STYLE] rendering style\n" " -r, --rep=[REP] representation type\n" " -b, --box=[STYLE] box style\n" " -a, --axis=[STYLE] axis style\n" " -e, --acolor=[MAP] atoms and bonds color map\n" " -t, --pcolor=[MAP] ployhedra color map\n" " -C, --box_color=[COLOR] box color\n" " -G, --back_grad=[GRAD] background gradient type\n" " -B, --back_color=[COLOR] background color\n" " -D, --back_dir=[DIR] background gradient direction\n" " -P, --back_pos=[POS] colors mixed position\n" " -U, --grad_col_a=[COL] gradient initial color\n" " -V, --grad_col_b=[COL] gradient final color\n\n" "ex:\n\n" " atomes --render-png --width=1920 -H 1024 --output=image.png project.apf -s ball_and_stick\n" " atomes --jpg --style=vdw -r ortho -e pc -t pc\n\n" # File: gui/main.c, Line: 181 msgid "\nReport a bug to <" msgstr "\nReport a bug to <" # File: gui/main.c, Line: 192 msgid "\n3D atomic scale model analysis, creation/edition and post-processing tool\n" msgstr "\n3D atomic scale model analysis, creation/edition and post-processing tool\n" # File: gui/main.c, Line: 839 msgid "Error while reading workspace file\n%s\n" msgstr "Error while reading workspace file\n%s\n" # File: gui/main.c, Line: 1053 msgid "Impossible to load the splash screen\n" msgstr "Impossible to load the splash screen\n" # File: gui/main.c, Line: 1155 msgid "Fatal error on OpenGL initialization: trying to adjust environment !" msgstr "Fatal error on OpenGL initialization: trying to adjust environment !" # File: gui/main.c, Line: 1158 msgid "Impossible to initialize the OpenGL 3D rendering !" msgstr "Impossible to initialize the OpenGL 3D rendering !" # File: gui/main.c, Line: 1161 msgid "GDK visual must be modified to initialize the OpenGL context !" msgstr "GDK visual must be modified to initialize the OpenGL context !" # File: gui/main.c, Line: 1289 msgid "Error impossible to obtain the AppData\\Roaming (code 0x%08lx)\n%s" msgstr "Error impossible to obtain the AppData\\Roaming (code 0x%08lx)\n%s" # File: gui/msdcall.c, Line: 65,67,72,74,76,78,80,82,87,89,91,93,95,97 msgid "MSD" msgstr "MSD" # File: gui/msdcall.c, Line: 67,87,89,91,93,95,97 msgid "nac" msgstr "nac" # File: gui/msdcall.c, Line: 100,102,104 msgid "Correction" msgstr "Correction" # File: gui/msdcall.c, Line: 106,108,110 msgid "Drift" msgstr "Drift" # File: gui/msdcall.c, Line: 127 msgid "\t - Number of configurations: " msgstr "\t - Number of configurations: " # File: gui/msdcall.c, Line: 131 msgid "\n\n\t - Number of time steps between each configuration: " msgstr "\n\n\t - Number of time steps between each configuration: " # File: gui/msdcall.c, Line: 135 msgid "\n\n\t - Time step δt used to integrate Newton's equations of motion: " msgstr "\n\n\t - Time step δt used to integrate Newton's equations of motion: " # File: gui/msdcall.c, Line: 153 msgid "\n\nMean Square Displacement\n\n" msgstr "\n\nMean Square Displacement\n\n" # File: gui/msdcall.c, Line: 180 msgid "The MSD calculation has failed" msgstr "The MSD calculation has failed" # File: gui/preferences.c, Line: 3484 msgid "\n[1] B. Cordero and al. Dalton Trans, 213:1112 (2008).\n" "[2] Slater. J. Chem. Phys., 41:3199 (1964).\n" "[3] Bondi A. J. Phys. Chem., 68:441 (1964).\n" "[4] R.D. Shannon and C.T. Prewitt Acta Cryst. B, 25:925-946 (1969).\n" "[5] R.D. Shannon Acta Cryst. A, 23:751-767 (1976)." msgstr "\n[1] B. Cordero and al. Dalton Trans, 213:1112 (2008).\n" "[2] Slater. J. Chem. Phys., 41:3199 (1964).\n" "[3] Bondi A. J. Phys. Chem., 68:441 (1964).\n" "[4] R.D. Shannon and C.T. Prewitt Acta Cryst. B, 25:925-946 (1969).\n" "[5] R.D. Shannon Acta Cryst. A, 23:751-767 (1976)." # File: gui/preferences.c, Line: 448 msgid "Error: impossible to create %s (code: %lu)\n" msgstr "Error: impossible to create %s (code: %lu)\n" # File: gui/preferences.c, Line: 454 msgid "Error: impossible to create %s (code: %s)\n" msgstr "Error: impossible to create %s (code: %s)\n" # File: gui/preferences.c, Line: 461 msgid "g(r): number of δr" msgstr "g(r): number of δr" # File: gui/preferences.c, Line: 461 msgid "s(q): number of δq" msgstr "s(q): number of δq" # File: gui/preferences.c, Line: 461 msgid "s(k): number of δk" msgstr "s(k): number of δk" # File: gui/preferences.c, Line: 461 msgid "g(r) FFT: number of δr" msgstr "g(r) FFT: number of δr" # File: gui/preferences.c, Line: 462 msgid "Dij: number of δr [min(Dij)-max(Dij)]" msgstr "Dij: number of δr [min(Dij)-max(Dij)]" # File: gui/preferences.c, Line: 462 msgid "Angles distribution: number of δθ [0-180°]" msgstr "Angles distribution: number of δθ [0-180°]" # File: gui/preferences.c, Line: 463 msgid "Spherical harmonics: l(max) in [2-40]" msgstr "Spherical harmonics: l(max) in [2-40]" # File: gui/preferences.c, Line: 463 msgid "MSD: steps between configurations" msgstr "MSD: steps between configurations" # File: gui/preferences.c, Line: 464 msgid "F(k,t): number of δk" msgstr "F(k,t): number of δk" # File: gui/preferences.c, Line: 465 msgid "MSD: time steps δt" msgstr "MSD: time steps δt" # File: gui/preferences.c, Line: 465 msgid "MSD: time unit" msgstr "MSD: time unit" # File: gui/preferences.c, Line: 466 msgid "Default search" msgstr "Default search" # File: gui/preferences.c, Line: 467,473 msgid "Atom(s) to initiate the search from" msgstr "Atom(s) to initiate the search from" # File: gui/preferences.c, Line: 468,474 msgid "Maximum size for a ring" msgstr "Maximum size for a ring" # File: gui/preferences.c, Line: 469,475 msgid "Maximum number of rings of size n per MD step" msgstr "Maximum number of rings of size n per MD step" # File: gui/preferences.c, Line: 471 msgid "No homopolar bonds in the rings (A-A, B-B ...)" msgstr "No homopolar bonds in the rings (A-A, B-B ...)" # File: gui/preferences.c, Line: 478 msgid "No homopolar bonds in the chains (A-A, B-B ...)" msgstr "No homopolar bonds in the chains (A-A, B-B ...)" # File: gui/preferences.c, Line: 479 msgid "Only search for 1-(2)n-1 chains" msgstr "Only search for 1-(2)n-1 chains" # File: gui/preferences.c, Line: 480 msgid "Analyze all correlated δt steps" msgstr "Analyze all correlated δt steps" # File: gui/preferences.c, Line: 481 msgid "Number of analyzed δt steps" msgstr "Number of analyzed δt steps" # File: gui/preferences.c, Line: 482 msgid "Number of analyzed q points" msgstr "Number of analyzed q points" # File: gui/preferences.c, Line: 483 msgid "Number of frequency points" msgstr "Number of frequency points" # File: gui/preferences.c, Line: 484 msgid "Default style" msgstr "Default style" # File: gui/preferences.c, Line: 485 # File: opengl/win/glwindow.c, Line: 139 msgid "Atom(s) color map" msgstr "Atom(s) color map" # File: gui/preferences.c, Line: 486 # File: opengl/win/glwindow.c, Line: 140 msgid "Polyhedra color map" msgstr "Polyhedra color map" # File: gui/preferences.c, Line: 487 # File: opengl/win/w_advance.c, Line: 1372 msgid "Quality" msgstr "Quality" # File: gui/preferences.c, Line: 488 # File: opengl/win/w_advance.c, Line: 1304 msgid "Ray Tracing" msgstr "Ray Tracing" # File: gui/preferences.c, Line: 489 msgid "Predefine material" msgstr "Predefine material" # File: gui/preferences.c, Line: 490 # File: opengl/win/w_advance.c, Line: 1377 msgid "Lightning model" msgstr "Lightning model" # File: gui/preferences.c, Line: 491 # File: opengl/win/w_advance.c, Line: 115 msgid "Metallic" msgstr "Metallic" # File: gui/preferences.c, Line: 492 # File: opengl/win/w_advance.c, Line: 116 msgid "Roughness" msgstr "Roughness" # File: gui/preferences.c, Line: 493 msgid "Back lightning" msgstr "Back lightning" # File: gui/preferences.c, Line: 495 # File: opengl/win/w_advance.c, Line: 119 msgid "Opacity" msgstr "Opacity" # File: gui/preferences.c, Line: 496 # File: opengl/win/w_advance.c, Line: 114 msgid "Albedo" msgstr "Albedo" # File: calc/cpmd/cpmd_atoms.c, Line: 157,448,480 # File: gui/preferences.c, Line: 497,505 # File: opengl/win/w_advance.c, Line: 129 msgid "Type" msgstr "Type" # File: gui/preferences.c, Line: 498 msgid "Fix" msgstr "Fix" # File: gui/preferences.c, Line: 499,511 # File: opengl/edit/cell_cut.c, Line: 307 # File: opengl/win/m_axis.c, Line: 210,336 # File: opengl/win/w_advance.c, Line: 120 # File: opengl/win/w_labels.c, Line: 716 # File: opengl/win/w_search.c, Line: 3581 msgid "Position" msgstr "Position" # File: gui/preferences.c, Line: 500,1036 # File: opengl/win/w_advance.c, Line: 121 msgid "Direction" msgstr "Direction" # File: gui/preferences.c, Line: 501 # File: opengl/win/w_advance.c, Line: 122 msgid "Intensity" msgstr "Intensity" # File: gui/preferences.c, Line: 502 msgid "Attenuation" msgstr "Attenuation" # File: gui/preferences.c, Line: 503 msgid "Spot specifics" msgstr "Spot specifics" # File: gui/preferences.c, Line: 504 # File: opengl/win/m_rep.c, Line: 504 msgid "Mode" msgstr "Mode" # File: gui/preferences.c, Line: 506 msgid "Density" msgstr "Density" # File: gui/preferences.c, Line: 507 msgid "Depth" msgstr "Depth" # File: gui/preferences.c, Line: 508,1012,1045,1051,1147,2520,3215,3444 # File: opengl/win/m_back.c, Line: 72 # File: opengl/win/m_box.c, Line: 380,629 # File: opengl/win/m_coord.c, Line: 656 # File: opengl/win/popup.c, Line: 3667 # File: opengl/win/w_atoms.c, Line: 360 # File: opengl/win/w_coord.c, Line: 537,873,892,997 msgid "Color" msgstr "Color" # File: gui/preferences.c, Line: 509 msgid "Show clones" msgstr "Show clones" # File: gui/preferences.c, Line: 510 msgid "Show box" msgstr "Show box" # File: gui/preferences.c, Line: 512 msgid "Rendering" msgstr "Rendering" # File: gui/preferences.c, Line: 513 msgid "Scaling" msgstr "Scaling" # File: gui/preferences.c, Line: 514 # File: opengl/win/w_axis.c, Line: 969 # File: opengl/win/w_labels.c, Line: 707 msgid "Font" msgstr "Font" # File: gui/preferences.c, Line: 515 msgid "Shift" msgstr "Shift" # File: gui/preferences.c, Line: 516,3696 # File: opengl/win/w_axis.c, Line: 1000 msgid "Colors" msgstr "Colors" # File: gui/preferences.c, Line: 517 msgid "Legend on x" msgstr "Legend on x" # File: gui/preferences.c, Line: 518 msgid "Legend on y" msgstr "Legend on y" # File: gui/preferences.c, Line: 519 msgid "Legend on z" msgstr "Legend on z" # File: gui/preferences.c, Line: 532 msgid "atomes preferences XML file" msgstr "atomes preferences XML file" # File: gui/preferences.c, Line: 550 msgid "Total cutoff" msgstr "Total cutoff" # File: gui/preferences.c, Line: 563 msgid "cutoff %s-%s" msgstr "cutoff %s-%s" # File: gui/preferences.c, Line: 682 msgid "Number of lights" msgstr "Number of lights" # File: gui/preferences.c, Line: 946 msgid "Format" msgstr "Format" # File: gui/preferences.c, Line: 955 msgid "Only label color" msgstr "Only label color" # File: gui/preferences.c, Line: 1009,1114 msgid "Wireframe width" msgstr "Wireframe width" # File: gui/preferences.c, Line: 1009,1114 msgid "Cylinder radius" msgstr "Cylinder radius" # File: gui/preferences.c, Line: 1030 msgid "Gradient" msgstr "Gradient" # File: gui/preferences.c, Line: 1040 # File: opengl/win/w_colors.c, Line: 549 msgid "Mixed position" msgstr "Mixed position" # File: gui/preferences.c, Line: 1063 msgid "Representation type" msgstr "Representation type" # File: gui/preferences.c, Line: 1069 msgid "Camera depth" msgstr "Camera depth" # File: gui/preferences.c, Line: 1075 # File: opengl/win/m_rep.c, Line: 427 msgid "Zoom" msgstr "Zoom" # File: gui/preferences.c, Line: 1081 # File: opengl/win/m_rep.c, Line: 428 msgid "Camera pitch" msgstr "Camera pitch" # File: gui/preferences.c, Line: 1081 # File: opengl/win/m_rep.c, Line: 428 msgid "Camera heading" msgstr "Camera heading" # File: gui/preferences.c, Line: 1088 msgid "Camera x" msgstr "Camera x" # File: gui/preferences.c, Line: 1088 msgid "Camera y" msgstr "Camera y" # File: gui/preferences.c, Line: 1104 msgid "Template position" msgstr "Template position" # File: gui/preferences.c, Line: 1110 msgid "Custom position" msgstr "Custom position" # File: gui/preferences.c, Line: 1118 # File: opengl/win/m_axis.c, Line: 187,332 msgid "Length" msgstr "Length" # File: gui/preferences.c, Line: 1179 # File: opengl/win/w_labels.c, Line: 711 msgid "Font color" msgstr "Font color" # File: gui/preferences.c, Line: 1186 msgid "Tilt along" msgstr "Tilt along" # File: gui/preferences.c, Line: 1191 # File: opengl/win/w_labels.c, Line: 813 msgid "Pattern" msgstr "Pattern" # File: gui/preferences.c, Line: 1196 # File: opengl/win/w_labels.c, Line: 832 msgid "Factor" msgstr "Factor" # File: gui/preferences.c, Line: 1201,3426,3587 # File: opengl/win/w_labels.c, Line: 837 msgid "Width" msgstr "Width" # File: gui/preferences.c, Line: 1216 msgid "Selection color" msgstr "Selection color" # File: gui/preferences.c, Line: 2462 msgid "The View tab regroups representation options" msgstr "The View tab regroups representation options" # File: gui/preferences.c, Line: 2463 msgid "which effect apply to the general aspect of the model:" msgstr "which effect apply to the general aspect of the model:" # File: curve/cedit.c, Line: 384,385 # File: gui/preferences.c, Line: 2465,2484 # File: opengl/win/m_box.c, Line: 301,600 # File: opengl/win/w_bonds.c, Line: 411 msgid "Axis" msgstr "Axis" # File: gui/preferences.c, Line: 2464 msgid "scene set-up and orientation" msgstr "scene set-up and orientation" # File: gui/preferences.c, Line: 2465 msgid "axis options" msgstr "axis options" # File: gui/preferences.c, Line: 2466,2526 # File: opengl/win/glwindow.c, Line: 630 # File: opengl/win/menu_bar.c, Line: 278 # File: opengl/win/popup.c, Line: 4031,4243 msgid "Tools" msgstr "Tools" # File: gui/preferences.c, Line: 2466 msgid "measures and selections option" msgstr "measures and selections option" # File: gui/preferences.c, Line: 2479 # File: opengl/win/glwindow.c, Line: 558 # File: opengl/win/m_rep.c, Line: 812 msgid "Representation" msgstr "Representation" # File: gui/preferences.c, Line: 2489 msgid "Select measure type" msgstr "Select measure type" # File: calc/dl_poly/dlp_control.c, Line: 167 # File: gui/preferences.c, Line: 2491,2508 msgid "Standard" msgstr "Standard" # File: gui/preferences.c, Line: 2492,2509 # File: opengl/win/glwindow.c, Line: 126,169,172 msgid "Edition mode" msgstr "Edition mode" # File: gui/preferences.c, Line: 2506 msgid "Select selection type" msgstr "Select selection type" # File: calc/dl_poly/dlp_field.c, Line: 188 # File: gui/preferences.c, Line: 3221,3336,3341 msgid "atom" msgstr "atom" # File: gui/preferences.c, Line: 3221,3336,3341 msgid "clone" msgstr "clone" # File: gui/preferences.c, Line: 3224 msgid "%s %s color" msgstr "%s %s color" # File: gui/preferences.c, Line: 3299 # File: opengl/win/w_search.c, Line: 2903,3129 msgid "atom(s)" msgstr "atom(s)" # File: gui/preferences.c, Line: 3299 msgid "dot(s)" msgstr "dot(s)" # File: gui/preferences.c, Line: 3299 msgid "sphere(s)" msgstr "sphere(s)" # File: gui/preferences.c, Line: 3300 msgid "radius" msgstr "radius" # File: gui/preferences.c, Line: 3300 msgid "size" msgstr "size" # File: gui/preferences.c, Line: 3300 msgid "width" msgstr "width" # File: gui/preferences.c, Line: 3301 msgid "bond(s)" msgstr "bond(s)" # File: gui/preferences.c, Line: 3301 msgid "wireframe(s)" msgstr "wireframe(s)" # File: gui/preferences.c, Line: 3301 msgid "cylinder(s)" msgstr "cylinder(s)" # File: gui/preferences.c, Line: 3317,3326 msgid "Edit cloned %s %s" msgstr "Edit cloned %s %s" # File: gui/preferences.c, Line: 3317,3326 msgid "Edit %s %s" msgstr "Edit %s %s" # File: gui/preferences.c, Line: 3336 msgid "Select %s color" msgstr "Select %s color" # File: gui/preferences.c, Line: 3341 msgid "Select %s label color" msgstr "Select %s label color" # File: calc/dl_poly/dlp_field.c, Line: 925 # File: gui/preferences.c, Line: 3425 # File: opengl/win/m_map.c, Line: 679 msgid "Element" msgstr "Element" # File: gui/preferences.c, Line: 3425 msgid "Symbol" msgstr "Symbol" # File: gui/preferences.c, Line: 3426,3587 # File: opengl/edit/cell_cut.c, Line: 307 # File: opengl/win/w_axis.c, Line: 974 # File: opengl/win/w_labels.c, Line: 726 msgid "Size" msgstr "Size" # File: gui/preferences.c, Line: 3427 msgid "Covalent [1]" msgstr "Covalent [1]" # File: gui/preferences.c, Line: 3427 msgid "Ionic [2]" msgstr "Ionic [2]" # File: gui/preferences.c, Line: 3427 msgid "Crystal [4,5]" msgstr "Crystal [4,5]" # File: gui/preferences.c, Line: 3478 msgid "User defined values appear in colored bold font." msgstr "User defined values appear in colored bold font." # File: gui/preferences.c, Line: 3494 msgid "By default label and species colors are similar," msgstr "By default label and species colors are similar," # File: gui/preferences.c, Line: 3494 msgid "you can modify that using this dialog window." msgstr "you can modify that using this dialog window." # File: gui/preferences.c, Line: 3494 msgid "You can also use a single color for all labels:" msgstr "You can also use a single color for all labels:" # File: gui/preferences.c, Line: 3506 msgid "Use single color" msgstr "Use single color" # File: gui/preferences.c, Line: 3543 msgid "Edit species related parameters" msgstr "Edit species related parameters" # File: gui/preferences.c, Line: 3547 msgid "Override species based parameters" msgstr "Override species based parameters" # File: gui/preferences.c, Line: 3552 msgid "Set default value" msgstr "Set default value" # File: gui/preferences.c, Line: 3586 msgid "Atom(s)" msgstr "Atom(s)" # File: gui/preferences.c, Line: 3586 msgid "Bond(s)" msgstr "Bond(s)" # File: gui/preferences.c, Line: 3586 msgid "\tClone(s)" msgstr "\tClone(s)" # File: gui/preferences.c, Line: 3586 msgid "Atom(s) " msgstr "Atom(s) " # File: gui/preferences.c, Line: 3299 msgid "atom(s) " msgstr "atom(s) " # File: calc/dl_poly/dlp_field.c, Line: 346 # File: opengl/win/glwindow.c, Line: 526 # File: opengl/win/m_clones.c, Line: 125 # File: opengl/win/menu_bar.c, Line: 187 # File: opengl/win/popup.c, Line: 4229 msgid "Bond(s)" msgstr "Bond(s)" # File: gui/preferences.c, Line: 3644 msgid "The Model tab regroups atom(s), bond(s) and clone(s) options" msgstr "The Model tab regroups atom(s), bond(s) and clone(s) options" # File: gui/preferences.c, Line: 3645 msgid "which effect apply when the corresponding OpenGL style is used:" msgstr "which effect apply when the corresponding OpenGL style is used:" # File: gui/preferences.c, Line: 3646 # File: opengl/win/glwindow.c, Line: 141 # File: opengl/win/m_style.c, Line: 59 msgid "Balls and Sticks" msgstr "Balls and Sticks" # File: gui/preferences.c, Line: 3646 msgid "atoms* and bonds radii" msgstr "atoms* and bonds radii" # File: gui/preferences.c, Line: 3647 # File: opengl/win/glwindow.c, Line: 148 # File: opengl/win/m_style.c, Line: 60 # File: opengl/win/w_axis.c, Line: 935 # File: opengl/win/w_box.c, Line: 400 msgid "Wireframes" msgstr "Wireframes" # File: gui/preferences.c, Line: 3647 msgid "dots** size and wireframes width" msgstr "dots** size and wireframes width" # File: gui/preferences.c, Line: 3648 # File: opengl/win/m_style.c, Line: 61,371,406,505 # File: opengl/win/popup.c, Line: 3104 msgid "Spacefilled" msgstr "Spacefilled" # File: gui/preferences.c, Line: 3648 msgid "tabulated parameters" msgstr "tabulated parameters" # File: gui/preferences.c, Line: 3649 # File: opengl/win/glwindow.c, Line: 142 # File: opengl/win/m_box.c, Line: 362,370,617 # File: opengl/win/m_style.c, Line: 63 # File: opengl/win/w_axis.c, Line: 936 # File: opengl/win/w_box.c, Line: 401 msgid "Cylinders" msgstr "Cylinders" # File: gui/preferences.c, Line: 3649 msgid "bonds radii" msgstr "bonds radii" # File: gui/preferences.c, Line: 3652 msgid "It also provides options to customize atomic label(s)," msgstr "It also provides options to customize atomic label(s)," # File: gui/preferences.c, Line: 3652 msgid "and, the model box, if any:" msgstr "and, the model box, if any:" # File: gui/preferences.c, Line: 3653,3701 msgid "Labels" msgstr "Labels" # File: gui/preferences.c, Line: 3653 msgid "atom labels" msgstr "atom labels" # File: gui/preferences.c, Line: 3654,3718 # File: opengl/win/m_box.c, Line: 301,600 # File: opengl/win/w_bonds.c, Line: 411 msgid "Box" msgstr "Box" # File: gui/preferences.c, Line: 3654 msgid "model box details" msgstr "model box details" # File: gui/preferences.c, Line: 3659 msgid "Atoms" msgstr "Atoms" # File: gui/preferences.c, Line: 3659 msgid "Clones" msgstr "Clones" # File: gui/preferences.c, Line: 3664 msgid "Edit species colors" msgstr "Edit species colors" # File: gui/preferences.c, Line: 3668 msgid "Always show clone(s), if any." msgstr "Always show clone(s), if any." # File: gui/preferences.c, Line: 3671 msgid "Always show box, if any." msgstr "Always show box, if any." # File: gui/preferences.c, Line: 3675 msgid "the same parameters are also used for the spheres style" msgstr "the same parameters are also used for the spheres style" # File: gui/preferences.c, Line: 3676 msgid "the same parameters are also used for the dots style" msgstr "the same parameters are also used for the dots style" # File: gui/preferences.c, Line: 3697 msgid "Adjust color(s)" msgstr "Adjust color(s)" # File: gui/preferences.c, Line: 3742 msgid "f(atoms) *" msgstr "f(atoms) *" # File: gui/preferences.c, Line: 3785 # File: opengl/win/m_map.c, Line: 1132,1239 # File: opengl/win/w_coord.c, Line: 90 msgid "Atomic Species" msgstr "Atomic Species" # File: gui/preferences.c, Line: 3786 # File: opengl/win/m_poly.c, Line: 333,493 msgid "Total Coordination(s)" msgstr "Total Coordination(s)" # File: gui/preferences.c, Line: 3787 # File: opengl/win/m_poly.c, Line: 334,494 msgid "Partial Coordination(s)" msgstr "Partial Coordination(s)" # File: gui/preferences.c, Line: 3816 msgid "The OpenGL tab regroups rendering options" msgstr "The OpenGL tab regroups rendering options" # File: gui/preferences.c, Line: 3817 msgid "use it to configure the OpenGL 3D scene:" msgstr "use it to configure the OpenGL 3D scene:" # File: gui/preferences.c, Line: 3818,3857 msgid "Material" msgstr "Material" # File: gui/preferences.c, Line: 3818 msgid "aspect for atom(s) and bond(s)" msgstr "aspect for atom(s) and bond(s)" # File: gui/preferences.c, Line: 3819,3858 msgid "Lights" msgstr "Lights" # File: gui/preferences.c, Line: 3819 msgid "lightning of the scene" msgstr "lightning of the scene" # File: gui/preferences.c, Line: 3820,3859 msgid "Fog" msgstr "Fog" # File: gui/preferences.c, Line: 3820 msgid "atmosphere effects" msgstr "atmosphere effects" # File: gui/preferences.c, Line: 3821 msgid "It also offers to adjust the main visualization style and the color maps" msgstr "It also offers to adjust the main visualization style and the color maps" # File: gui/preferences.c, Line: 3826 msgid "Style" msgstr "Style" # File: gui/preferences.c, Line: 3838 msgid "if 10 000 atoms or more: Wireframes, otherwise: Balls and sticks" msgstr "if 10 000 atoms or more: Wireframes, otherwise: Balls and sticks" # File: gui/preferences.c, Line: 3841 msgid "Color maps" msgstr "Color maps" # File: gui/preferences.c, Line: 3844 msgid "\tatom(s) and bond(s)" msgstr "\tatom(s) and bond(s)" # File: gui/preferences.c, Line: 3849 msgid "\tpolyhedra" msgstr "\tpolyhedra" # File: gui/preferences.c, Line: 4016,4196 msgid "Spec. α" msgstr "Spec. α" # File: gui/preferences.c, Line: 4017,4211 msgid "Spec. β" msgstr "Spec. β" # File: gui/preferences.c, Line: 4018 msgid "Rcut (α, β)" msgstr "Rcut (α, β)" # File: gui/preferences.c, Line: 4019 msgid "Use *" msgstr "Use *" # File: gui/preferences.c, Line: 4040 msgid "Unused values will not be saved !" msgstr "Unused values will not be saved !" # File: gui/preferences.c, Line: 4187 msgid "Select partial cutoffs(s)" msgstr "Select partial cutoffs(s)" # File: gui/preferences.c, Line: 4229,4269 msgid "Step(s) between configurations" msgstr "Step(s) between configurations" # File: gui/preferences.c, Line: 4267 msgid "g(r): number of δr" msgstr "g(r): number of δr" # File: gui/preferences.c, Line: 4267 msgid "s(q): number of δq" msgstr "s(q): number of δq" # File: gui/preferences.c, Line: 4267 msgid "s(k): number of δk" msgstr "s(k): number of δk" # File: gui/preferences.c, Line: 4267 msgid "g(r) FFT: number of δr" msgstr "g(r) FFT: number of δr" # File: gui/preferences.c, Line: 4268 msgid "Dij: number of δr [Dijmin-Dijmax]" msgstr "Dij: number of δr [Dijmin-Dijmax]" # File: gui/preferences.c, Line: 4268 msgid "Angles distribution: number of δθ [0-180°]" msgstr "Angles distribution: number of δθ [0-180°]" # File: gui/preferences.c, Line: 4269 msgid "Spherical harmonics: lmax ∈ [2-40]" msgstr "Spherical harmonics: lmax ∈ [2-40]" # File: gui/preferences.c, Line: 4269 msgid "F(k,δt): number of δk" msgstr "F(k,δt): number of δk" # File: gui/preferences.c, Line: 4270 msgid "The Analysis tab regroups calculation options" msgstr "The Analysis tab regroups calculation options" # File: gui/preferences.c, Line: 4271 msgid "use it to setup your own default parameters:" msgstr "use it to setup your own default parameters:" # File: gui/preferences.c, Line: 4272,4343 msgid "Calculations" msgstr "Calculations" # File: gui/preferences.c, Line: 4272 msgid "most analysis options" msgstr "most analysis options" # File: gui/preferences.c, Line: 4273,4350 # File: opengl/win/popup.c, Line: 4235 msgid "Rings" msgstr "Rings" # File: gui/preferences.c, Line: 4273 msgid "ring statistics options" msgstr "ring statistics options" # File: gui/preferences.c, Line: 4274,4350 msgid "Chains" msgstr "Chains" # File: gui/preferences.c, Line: 4274 msgid "chain statistics options" msgstr "chain statistics options" # File: gui/preferences.c, Line: 4275 msgid "dynamic structure factor options" msgstr "dynamic structure factor options" # File: gui/preferences.c, Line: 4280 msgid "To determine the existence, or the absence, of a chemical bond" msgstr "To determine the existence, or the absence, of a chemical bond" # File: gui/preferences.c, Line: 4281 msgid "between 2 atoms is a key feature in the atomes software" msgstr "between 2 atoms is a key feature in the atomes software" # File: gui/preferences.c, Line: 4284 msgid "It is used for analysis purposes, and, to draw bonds in the OpenGL window." msgstr "It is used for analysis purposes, and, to draw bonds in the OpenGL window." # File: gui/preferences.c, Line: 4286 msgid "You can adapt below the distance cutoffs:" msgstr "You can adapt below the distance cutoffs:" # File: gui/preferences.c, Line: 4292 msgid "Total cutoff" msgstr "Total cutoff" # File: gui/preferences.c, Line: 4294 msgid "Evaluated by atomes" msgstr "Evaluated by atomes" # File: gui/preferences.c, Line: 4295 msgid "User Defined *" msgstr "User Defined *" # File: gui/preferences.c, Line: 4313 msgid "Partial cutoff(s)" msgstr "Partial cutoff(s)" # File: gui/preferences.c, Line: 4314 msgid "Set default cutoff(s)" msgstr "Set default cutoff(s)" # File: gui/preferences.c, Line: 4317 msgid "The highest this value is, the highest the number of neighbors around an atom." msgstr "The highest this value is, the highest the number of neighbors around an atom." # File: gui/preferences.c, Line: 4339 msgid "Dynamical analysis: MSD, S(q,ω)" msgstr "Mean Squared Displacement :" # File: gui/preferences.c, Line: 4879 msgid "Apply to project(s) in workspace ?" msgstr "Apply to project(s) in workspace ?" # File: gui/preferences.c, Line: 4879 msgid "Preferences were saved for the active session !\n Do you want to apply preferences to the project(s) opened in the workspace ?" msgstr "Preferences were saved for the active session !\n Do you want to apply preferences to the project(s) opened in the workspace ?" # File: gui/preferences.c, Line: 4882 msgid "Project selection" msgstr "Project selection" # File: gui/preferences.c, Line: 4882 msgid "Select to apply preferences" msgstr "Select to apply preferences" # File: gui/preferences.c, Line: 4891 msgid "Including analysis parameters and cutoffs ..." msgstr "Including analysis parameters and cutoffs ..." # File: gui/preferences.c, Line: 4945 msgid "Restore default parameters" msgstr "Restore default parameters" # File: global.c, Line: 141 msgid "Analysis" msgstr "Analysis" # File: gui/preferences.c, Line: 4954,5064 # File: opengl/win/m_tools.c, Line: 78 msgid "Analysis " msgstr "Analysis" # File: gui/preferences.c, Line: 4956,5066 # File: opengl/win/glwindow.c, Line: 622 # File: opengl/win/menu_bar.c, Line: 270,275 # File: opengl/win/w_volumes.c, Line: 1138 msgid "Model" msgstr "Model" # File: gui/preferences.c, Line: 4957,5067 # File: opengl/win/glwindow.c, Line: 631 # File: opengl/win/menu_bar.c, Line: 279 msgid "View" msgstr "View" # File: gui/preferences.c, Line: 4978 msgid "Save parameters" msgstr "Save parameters" # File: gui/preferences.c, Line: 4981,5127 msgid "Do you want to save atomes preferences in:\n\n\t%s\n\nIf found this file is processed at every atomes startup.\n\n\t\t\t\t\t\tSave file ?" msgstr "Do you want to save atomes preferences in:\n\n\t%s\n\nIf found this file is processed at every atomes startup.\n\n\t\t\t\t\t\tSave file ?" # File: gui/preferences.c, Line: 4982,5128 msgid "Save atomes preferences to file ?" msgstr "Save atomes preferences to file ?" # File: gui/preferences.c, Line: 4986,5132 msgid "Error while trying to save preferences to file" msgstr "Error while trying to save preferences to file" # File: gui/preferences.c, Line: 5024 msgid "User preferences" msgstr "User preferences" # File: gui/preferences.c, Line: 5037 msgid "Browse the following to modify the default configuration of atomes" msgstr "Browse the following to modify the default configuration of atomes" # File: gui/preferences.c, Line: 5038 msgid "by replacing internal parameters by user defined preferences." msgstr "by replacing internal parameters by user defined preferences." # File: gui/preferences.c, Line: 5039 msgid "calculation preferences" msgstr "calculation preferences" # File: gui/preferences.c, Line: 5040 msgid "rendering preferences" msgstr "rendering preferences" # File: gui/preferences.c, Line: 5041 msgid "atom(s), bond(s) and box preferences" msgstr "atom(s), bond(s) and box preferences" # File: gui/preferences.c, Line: 5042 msgid "representation and projection preferences" msgstr "representation and projection preferences" # File: gui/preferences.c, Line: 5043 msgid "Default parameters are used for any new project added to the workspace\n" msgstr "Default parameters are used for any new project added to the workspace\n" # File: gui/preferences.c, Line: 5058 msgid "Restore atomes default parameters" msgstr "Restore atomes default parameters" # File: gui/preferences.c, Line: 5094 msgid "rendering" msgstr "rendering" # File: gui/preferences.c, Line: 5104 # File: opengl/win/w_bonds.c, Line: 410 msgid "box" msgstr "box" # File: gui/preferences.c, Line: 5108 # File: opengl/win/w_bonds.c, Line: 410 msgid "axis" msgstr "axis" # File: gui/preferences.c, Line: 5112 msgid "background" msgstr "background" # File: gui/preferences.c, Line: 5084 msgid "representation" msgstr "representation" # File: gui/preferences.c, Line: 5085 msgid "Set %s preferences as default preferences ?" msgstr "Set %s preferences as default preferences ?" # File: gui/preferences.c, Line: 5087 msgid "Set model preferences as default ?" msgstr "Set model preferences as default ?" # File: gui/preferences.c, Line: 5157 msgid "Set default" msgstr "Set default" # File: gui/ringscall.c, Line: 488 msgid "\tThe ring statistics have failed !\n\n" "The number of ring per MD step appears\n" "to be bigger than the initial value of %d\n" "used to allocate memory to store the results.\n\n" "Increase the value and start again !" msgstr "\tThe ring statistics have failed !\n\n" "The number of ring per MD step appears\n" "to be bigger than the initial value of %d\n" "used to allocate memory to store the results.\n\n" "Increase the value and start again !" # File: gui/ringscall.c, Line: 93 msgid "%s - %sAll]" msgstr "%s - %sAll]" # File: gui/ringscall.c, Line: 171 msgid "\n\nRing statistics\n\n" msgstr "\n\nRing statistics\n\n" # File: gui/ringscall.c, Line: 172 msgid "\n%s rings analysis details:\n" msgstr "\n%s rings analysis details:\n" # File: gui/ringscall.c, Line: 178 msgid " * only ABAB rings have been considered\n" msgstr " * only ABAB rings have been considered\n" # File: gui/ringscall.c, Line: 182 msgid " * no homopolar bonds in the rings (A-A, B-B ...)\n" msgstr " * no homopolar bonds in the rings (A-A, B-B ...)\n" # File: gui/ringscall.c, Line: 186 msgid " * no homopolar bonds in the connectivity matrix (A-A, B-B ...)\n" msgstr " * no homopolar bonds in the connectivity matrix (A-A, B-B ...)\n" # File: gui/ringscall.c, Line: 195 msgid "\n Average number of rings per configuration: " msgstr "\n Average number of rings per configuration: " # File: gui/ringscall.c, Line: 205 msgid "\n Total number of rings: " msgstr "\n Total number of rings: " # File: gui/ringscall.c, Line: 214 msgid " Average number of ring(s) with n > " msgstr " Average number of ring(s) with n > " # File: gui/ringscall.c, Line: 218 msgid " Number of ring(s) with n > " msgstr " Number of ring(s) with n > " # File: gui/ringscall.c, Line: 223 msgid " nodes that potentially exist: " msgstr " nodes that potentially exist: " # File: gui/ringscall.c, Line: 480 msgid "The ring statistics calculation has failed" msgstr "The ring statistics calculation has failed" # File: gui/sktcall.c, Line: 254 msgid "\tMolecular dynamics information:\n\n" msgstr "\tMolecular dynamics information:\n\n" # File: gui/sktcall.c, Line: 257 msgid "\n\n\tIntermediate scattering - F(q,δt)\n\n" msgstr "\n\n\tIntermediate scattering - F(q,δt)\n\n" # File: gui/sktcall.c, Line: 259 msgid "\t - Correlation threshold δt" msgstr "\t - Correlation threshold δt" # File: gui/sktcall.c, Line: 268 msgid "\t - All " msgstr "\t - All " # File: gui/sktcall.c, Line: 272 msgid " correlated calculations saved" msgstr " correlated calculations saved" # File: gui/sktcall.c, Line: 277 msgid "\t - Results saved for " msgstr "\t - Results saved for " # File: gui/sktcall.c, Line: 281 msgid " correlated calculations:\n\n" msgstr " correlated calculations:\n\n" # File: gui/sktcall.c, Line: 295 msgid "\tDynamic structure factor - S(q,ω)\n\n" msgstr "\tDynamic structure factor - S(q,ω)\n\n" # File: gui/sktcall.c, Line: 300 msgid " q vectors were analyzed:\n\n" msgstr " q vectors were analyzed:\n\n" # File: gui/sktcall.c, Line: 364 msgid "The dynamic structure factor calculation has failed" msgstr "The dynamic structure factor calculation has failed" # File: gui/sktcall.c, Line: 375 # File: gui/sqcall.c, Line: 295 msgid "Problem during the selection of the k-points\nused to sample the reciprocal lattice" msgstr "Problem during the selection of the k-points\nused to sample the reciprocal lattice" # File: gui/spcall.c, Line: 116 msgid "\n\nSpherical harmonics\n\n" msgstr "\n\nSpherical harmonics\n\n" # File: gui/spcall.c, Line: 120 msgid "\nResults for the " msgstr "\nResults for the " # File: gui/spcall.c, Line: 122 msgid " atoms: \n\n" msgstr " atoms: \n\n" # File: gui/spcall.c, Line: 130 msgid "[All]" msgstr "[All]" # File: gui/spcall.c, Line: 240 msgid "Unexpected error when analyzing the spherical harmonics" msgstr "Unexpected error when analyzing the spherical harmonics" # File: gui/sqcall.c, Line: 131 msgid "\n\nStructure factor(s)" msgstr "\n\nStructure factor(s)" # File: gui/sqcall.c, Line: 135 msgid "\n\nDynamic structure factor(s)" msgstr "\n\nDynamic structure factor(s)" # File: gui/sqcall.c, Line: 139 msgid " - reciprocal space calculation\n\n" msgstr " - reciprocal space calculation\n\n" # File: gui/sqcall.c, Line: 146 msgid "\tReciprocal space discretization:\n\n" msgstr "\tReciprocal space discretization:\n\n" # File: gui/sqcall.c, Line: 147 msgid "\t - Number of δq steps: " msgstr "\t - Number of δq steps: " # File: gui/sqcall.c, Line: 151 msgid "\n\n\t between " msgstr "\n\n\t between " # File: gui/sqcall.c, Line: 155,175 # File: calc/dl_poly/dlp_field.c, Line: 3 msgid "and" msgstr "and" # File: gui/sqcall.c, Line: 162 msgid " is the minimum wave vector, and " msgstr " is the minimum wave vector, and " # File: gui/sqcall.c, Line: 165 msgid " is the maximum wave vector:\n\n" msgstr " is the maximum wave vector:\n\n" # File: gui/sqcall.c, Line: 220,283 msgid "The S(q) calculation has failed" msgstr "The S(q) calculation has failed" # File: gui/tools.c, Line: 302 msgid "Logo" msgstr "Logo" # File: calc/dl_poly/dlp_atom.c, Line: 744 # File: calc/dl_poly/dlp_field.c, Line: 924 # File: calc/dl_poly/dlp_mol.c, Line: 761 # File: gui/tools.c, Line: 302 # File: opengl/win/w_search.c, Line: 3577 msgid "Name" msgstr "Name" # File: gui/tools.c, Line: 302 msgid "Button" msgstr "Button" # File: gui/work_menu.c, Line: 155,184,194 msgid "ISAACS Project File '*.ipf'" msgstr "ISAACS Project File '*.ipf'" # ============================================================ # Section: src # ============================================================ # File: global.c, Line: 141 msgid "Edition" msgstr "Edition" # File: curve/m_curve.c, Line: 78 # File: opengl/win/m_tools.c, Line: 78 msgid "Edition " msgstr "Edition" # File: global.c, Line: 145 msgid "\nIf this is a bug please report it to:" msgstr "\nIf this is a bug please report it to:" # File: global.c, Line: 147 msgid "All (No Rule)" msgstr "Tous (Aucune Règle)" # File: global.c, Line: 148 msgid "King's" msgstr "de King" # File: global.c, Line: 149 msgid "Guttman's" msgstr "de Guttman" # File: global.c, Line: 150 msgid "Primitive" msgstr "Primitive" # File: global.c, Line: 151 msgid "Strong" msgstr "Strong" # File: global.c, Line: 617 msgid "Error in string format: string = \"%s\" - value == %lf\n" msgstr "Error in string format: string = \"%s\" - value == %lf\n" # File: global.c, Line: 646 msgid "\n \tAnalysis was performed in: " msgstr "\n \tAnalysis was performed in: " # File: project/close_p.c, Line: 526 msgid "No project to be closed" msgstr "No project to be closed" # File: project/init_p.c, Line: 279 msgid "Project N°" msgstr "Project N°" # File: opengl/win/glwindow.c, Line: 315 # File: opengl/win/m_map.c, Line: 1139,1250 # File: opengl/win/menu_bar.c, Line: 224,228 # File: opengl/win/popup.c, Line: 4237 # File: opengl/win/w_coord.c, Line: 93,1351 # File: opengl/win/w_volumes.c, Line: 1139 # File: project/read_mol.c, Line: 149 msgid "Fragment(s)" msgstr "Fragment(s)" # File: opengl/win/glwindow.c, Line: 316 # File: opengl/win/m_map.c, Line: 1140,1253 # File: opengl/win/menu_bar.c, Line: 232,236 # File: opengl/win/popup.c, Line: 4238 # File: opengl/win/w_coord.c, Line: 94,1355 # File: opengl/win/w_volumes.c, Line: 1140 # File: project/read_mol.c, Line: 150 # File: calc/dl_poly/dlp_field.c, Line: 142 msgid "Molecule(s)" msgstr "Molecule(s)" # File: project/update_p.c, Line: 258 msgid "Impossible to update project: %s\n" msgstr "Impossible to update project: %s\n" # File: project/update_p.c, Line: 280 # File: workspace/workspace.c, Line: 441 msgid "Toolboxes - %s" msgstr "Toolboxes - %s" # File: project/readers/read_c3d.c, Line: 328,351 # File: project/readers/read_xyz.c, Line: 309,332 msgid "Wrong file format - cannot find the number of atoms !" msgstr "Wrong file format - cannot find the number of atoms !" # File: project/readers/read_c3d.c, Line: 329,352 # File: project/readers/read_xyz.c, Line: 310,333 msgid "Wrong file format - first line is corrupted !" msgstr "Wrong file format - first line is corrupted !" # File: project/readers/read_c3d.c, Line: 334,357 # File: project/readers/read_hist.c, Line: 440 # File: project/readers/read_trj.c, Line: 252 # File: project/readers/read_vas.c, Line: 251 # File: project/readers/read_xyz.c, Line: 315,338 msgid "Number of atoms" msgstr "Number of atoms" # File: project/readers/read_c3d.c, Line: 343,366 # File: project/readers/read_hist.c, Line: 441 # File: project/readers/read_trj.c, Line: 254 # File: project/readers/read_vas.c, Line: 253 # File: project/readers/read_xyz.c, Line: 324,347 msgid "Number of steps" msgstr "Number of steps" # File: project/readers/read_cif.c, Line: 367 msgid "To continue and build the crystal according to the information of the CIF file\n" "it is required to provide a suitable value for each and every missing parameter(s).\n\n" "Please select an atom type for the following object(s):" msgstr "To continue and build the crystal according to the information of the CIF file\n" "it is required to provide a suitable value for each and every missing parameter(s).\n\n" "Please select an atom type for the following object(s):" # File: project/readers/read_cif.c, Line: 769 msgid "CIF get loop line: something is wrong for keyword: %s_%s\n" " -> keyword found= %d times\n" " -> configurations in CIF file= %d !\n" msgstr "CIF get loop line: something is wrong for keyword: %s_%s\n" " -> keyword found= %d times\n" " -> configurations in CIF file= %d !\n" # File: project/readers/read_cif.c, Line: 819 msgid "CIF retrieved value: keyword: %s_%s\n" " -> keyword found= %d times\n" " -> configurations in CIF file= %d !\n" msgstr "CIF retrieved value: keyword: %s_%s\n" " -> keyword found= %d times\n" " -> configurations in CIF file= %d !\n" # File: project/readers/read_cif.c, Line: 857 msgid "Key positions: keyword: %s_%s\n" " -> not found for conf %d between loop_pos[0]= %d and loop_pos[1]= %d\n" msgstr "Key positions: keyword: %s_%s\n" " -> not found for conf %d between loop_pos[0]= %d and loop_pos[1]= %d\n" # File: project/readers/read_cif.c, Line: 1203 msgid "Atomic coordinates: the number of atom(s) changes !\n" " - configuration N°%d\t :: atoms= %d\n" " - initialization \t\t :: atoms= %d\n" msgstr "Atomic coordinates: the number of atom(s) changes !\n" " - configuration N°%d\t :: atoms= %d\n" " - initialization \t\t :: atoms= %d\n" # File: project/readers/read_cif.c, Line: 1265 msgid "Atomic coordinates: the number of chemical species changes !\n" " - configuration N°%d\t :: species= %d\n" " - initialization \t\t :: species= %d\n" msgstr "Atomic coordinates: the number of chemical species changes !\n" " - configuration N°%d\t :: species= %d\n" " - initialization \t\t :: species= %d\n" # File: project/readers/read_cif.c, Line: 1277 msgid "Atomic coordinates: the number of atom(s) for species %d changes !\n" " - configuration N°%d\t :: atom(s)= %d\n" " - initialization \t\t :: atom(s)= %d\n" msgstr "Atomic coordinates: the number of atom(s) for species %d changes !\n" " - configuration N°%d\t :: atom(s)= %d\n" " - initialization \t\t :: atom(s)= %d\n" # File: project/readers/read_cif.c, Line: 1658,1739 msgid "Space group: CIF file information could be inaccurate !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n" msgstr "Space group: CIF file information could be inaccurate !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n" # File: project/readers/read_cif.c, Line: 1899 msgid "Space group: space group and H-M symbol do not match !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n" msgstr "Space group: space group and H-M symbol do not match !\n" " CIF file space group: %s, CIF file H-M symbol: %s\n" # File: project/readers/read_cif.c, Line: 2048 msgid "Space group: found trigonal space group N°%d-%s, %s setting\n" "but the lattice parameters were found in %s format ...\n" "\t ... the space group setting was modified accordingly !\n" msgstr "Space group: found trigonal space group N°%d-%s, %s setting\n" "but the lattice parameters were found in %s format ...\n" "\t ... the space group setting was modified accordingly !\n" # File: project/readers/read_cif.c, Line: 2063 msgid "Space group and lattice parameters are not compatible !\n" "\nCheck a, b, c, and α, β, ɣ, with the type of crystal system.\n" msgstr "Space group and lattice parameters are not compatible !\n" "\nCheck a, b, c, and α, β, ɣ, with the type of crystal system.\n" # File: project/readers/read_cif.c, Line: 2170 msgid "Building crystal using symmetry positions: \n" " 1) evaluate candidate atomic positions using data in CIF file: \n" " - symmetry positions\n" " - atomic coordinates + occupancy\n" " 2) fill each candidate position using the associated occupancy: \n" " - occupancy %s\n" " - %s\n" msgstr "Building crystal using symmetry positions: \n" " 1) evaluate candidate atomic positions using data in CIF file: \n" " - symmetry positions\n" " - atomic coordinates + occupancy\n" " 2) fill each candidate position using the associated occupancy: \n" " - occupancy %s\n" " - %s\n" # File: project/readers/read_cif.c, Line: 2517 msgid "The crystal will be created however some objects might be missing,\n" "Occupancy is too low compared to the number of site(s) per cell.\n\n" "To build a crystal matching the defined occupancy:\n" "\t 1) If you are trying to read a CIF file, use the crystal builder instead.\n" "\t 2) Modify the occupancy set-up to 'Completely random'.\n" "\t 3) Increase the number of unit cells up to get rid of this message.\n\n" msgstr "The crystal will be created however some objects might be missing,\n" "Occupancy is too low compared to the number of site(s) per cell.\n\n" "To build a crystal matching the defined occupancy:\n" "\t 1) If you are trying to read a CIF file, use the crystal builder instead.\n" "\t 2) Modify the occupancy set-up to 'Completely random'.\n" "\t 3) Increase the number of unit cells up to get rid of this message.\n\n" # File: project/readers/read_cif.c, Line: 2525 msgid "Object(s) at equivalent positions have been removed\n" "to ensure the consistency of the model\n" "when using Periodic Boundary Conditions\n " msgstr "Object(s) at equivalent positions have been removed\n" "to ensure the consistency of the model\n" "when using Periodic Boundary Conditions\n " # File: project/readers/read_cif.c, Line: 362 msgid "Error while reading CIF file" msgstr "Error while reading CIF file" # File: project/readers/read_cif.c, Line: 379 msgid "Type N°%d:\t%s" msgstr "Type N°%d:\t%s" # File: project/readers/read_cif.c, Line: 396 msgid "In case of a molecule: insert an extra type of atom and run a substitution afterwards." msgstr "In case of a molecule: insert an extra type of atom and run a substitution afterwards." # File: project/readers/read_cif.c, Line: 478,561 msgid "Wrong file format: searching for %s - error at line %d !\n" msgstr "Wrong file format: searching for %s - error at line %d !\n" # File: project/readers/read_cif.c, Line: 1107 msgid "label" msgstr "label" # File: project/readers/read_cif.c, Line: 1110,2518 msgid "occupancy" msgstr "occupancy" # File: project/readers/read_cif.c, Line: 1156 msgid "Atomic coordinates: impossible to find atomic label(s) ..." msgstr "Atomic coordinates: impossible to find atomic label(s) ..." # File: project/readers/read_cif.c, Line: 1168 msgid "Atomic coordinates: impossible to find '%s' ..." msgstr "Atomic coordinates: impossible to find '%s' ..." # File: project/readers/read_cif.c, Line: 1184 msgid "Please select how to handle occupancy" msgstr "Please select how to handle occupancy" # File: project/readers/read_cif.c, Line: 1184 msgid "Select how to handle occupancy" msgstr "Select how to handle occupancy" # File: project/readers/read_cif.c, Line: 1188 msgid "Occupancy %s\n\t%s\n" msgstr "Occupancy %s\n\t%s\n" # File: project/readers/read_cif.c, Line: 1304 msgid "Atomic coordinates: a site has an occupancy > 1.0 !\n" msgstr "Atomic coordinates: a site has an occupancy > 1.0 !\n" # File: project/readers/read_cif.c, Line: 1368 msgid "reaction or trajectory" msgstr "reaction or trajectory" # File: project/readers/read_cif.c, Line: 1379 msgid "CIF file is compatible with a chemical reaction: \n\t Reactants can be separated using occupancy\n" msgstr "CIF file is compatible with a chemical reaction: \n\t Reactants can be separated using occupancy\n" # File: project/readers/read_cif.c, Line: 1379 msgid "CIF file is compatible with a chemical reaction: \n\t Reactants can be separated using disorder site\n" msgstr "CIF file is compatible with a chemical reaction: \n\t Reactants can be separated using disorder site\n" # File: project/readers/read_cif.c, Line: 1796 msgid "Lattice parameters: impossible to retrieve the '%s' parameter !\n" msgstr "Lattice parameters: impossible to retrieve the '%s' parameter !\n" # File: project/readers/read_cif.c, Line: 1875 msgid "Space group: no space group and no H-M symbol found !\n" msgstr "Space group: no space group and no H-M symbol found !\n" # File: project/readers/read_cif.c, Line: 1891 msgid "Space group: no space group found, unknown H-M symbol !\n" msgstr "Space group: no space group found, unknown H-M symbol !\n" # File: project/readers/read_cif.c, Line: 1953,1983,1990 msgid "Space group: ambiguous space group setting !\n" msgstr "Space group: ambiguous space group setting !\n" # File: project/readers/read_cif.c, Line: 2047 msgid "hexagonal" msgstr "hexagonal" # File: project/readers/read_cif.c, Line: 2047 msgid "rhombohedral" msgstr "rhombohedral" # File: project/readers/read_cif.c, Line: 2095 msgid "Space group changes between configurations !\n" msgstr "Space group changes between configurations !\n" # File: project/readers/read_cif.c, Line: 2130 msgid "Symmetry position(s) in CIF file\n" msgstr "Symmetry position(s) in CIF file\n" # File: project/readers/read_cif.c, Line: 2135 msgid "No symmetry position(s) in CIF file\n" msgstr "No symmetry position(s) in CIF file\n" # File: project/readers/read_cif.c, Line: 2586 msgid "It seems the CIF file contains %d distinct configurations\n" msgstr "It seems the CIF file contains %d distinct configurations\n" # File: project/readers/read_cif.c, Line: 2591 msgid "Impossible to use symmetry positions with multiple configurations\n" msgstr "Impossible to use symmetry positions with multiple configurations\n" # File: project/readers/read_cif.c, Line: 2602 msgid "This CIF file could be describing a trajectory or a chemical reaction.\n" msgstr "This CIF file could be describing a trajectory or a chemical reaction.\n" # File: project/readers/read_cif.c, Line: 2610 msgid "Please select how to process the data in the CIF file" msgstr "Please select how to process the data in the CIF file" # File: project/readers/read_cif.c, Line: 2610 msgid "Select how to process data" msgstr "Select how to process data" # File: project/readers/read_cif.c, Line: 2617 msgid "This CIF file could be describing a trajectory.\n" msgstr "This CIF file could be describing a trajectory.\n" # File: project/readers/read_cif.c, Line: 2629 msgid "Select the configuration c, c ∈ [1-%d]" msgstr "Select the configuration c, c ∈ [1-%d]" # File: project/readers/read_cif.c, Line: 2633 msgid "Please select the configuration to work on" msgstr "Please select the configuration to work on" # File: project/readers/read_cif.c, Line: 2643 msgid "Working on configuration N°%d\n" msgstr "Working on configuration N°%d\n" # File: project/readers/read_coord.c, Line: 416 msgid "Error(s) trying to build crystal using the CIF file parameters !\n" "This usually comes from: \n" "\t - incorrect space group description\n" "\t - incomplete space group description\n" "\t - missing space group setting\n" "\t - incorrect space group setting\n" msgstr "Error(s) trying to build crystal using the CIF file parameters !\n" "This usually comes from: \n" "\t - incorrect space group description\n" "\t - incomplete space group description\n" "\t - missing space group setting\n" "\t - incorrect space group setting\n" # File: project/readers/read_coord.c, Line: 427 msgid "Error(s) trying to build crystal using the CIF file parameters !\n" "Information lead to change(s) between each configuration\n" msgstr "Error(s) trying to build crystal using the CIF file parameters !\n" "Information lead to change(s) between each configuration\n" # File: project/readers/read_coord.c, Line: 434 msgid "Potential issue(s) when building crystal !\n" "This usually comes from: \n" "\t - incorrect space group description\n" "\t - incomplete space group description\n" "\t - missing space group setting\n" "\t - incorrect space group setting\n" msgstr "Potential issue(s) when building crystal !\n" "This usually comes from: \n" "\t - incorrect space group description\n" "\t - incomplete space group description\n" "\t - missing space group setting\n" "\t - incorrect space group setting\n" # File: project/readers/read_coord.c, Line: 146 msgid "Wrong file format: error at step %d !\n" "Wrong file format: record %s on line %d is corrupted !" msgstr "Wrong file format: error at step %d !\n" "Wrong file format: record %s on line %d is corrupted !" # File: project/readers/read_coord.c, Line: 152 msgid "Wrong file format: error at step %d, atom %d !\n" "Wrong file format: record %s on line %d is corrupted !" msgstr "Wrong file format: error at step %d, atom %d !\n" "Wrong file format: record %s on line %d is corrupted !" # File: project/readers/read_coord.c, Line: 193 msgid "Use dummy atom(s) for unknown %s species ?" msgstr "Use dummy atom(s) for unknown %s species ?" # File: project/readers/read_coord.c, Line: 194 msgid "Use dummy atom(s) ?" msgstr "Use dummy atom(s) ?" # File: project/readers/read_coord.c, Line: 198 msgid "Using dummy atom(s) for unknown %s species" msgstr "Using dummy atom(s) for unknown %s species" # File: project/readers/read_coord.c, Line: 205 msgid "No dummy atom(s) for unknown %s species" msgstr "No dummy atom(s) for unknown %s species" # File: project/readers/read_coord.c, Line: 282 msgid "Error - cannot get file statistics !\n" msgstr "Error - cannot get file statistics !\n" # File: project/readers/read_coord.c, Line: 290 msgid "Error - cannot open coordinates file !\n" msgstr "Error - cannot open coordinates file !\n" # File: project/readers/read_coord.c, Line: 442 msgid "\nAnother model will be built using included symmetry positions\n" msgstr "\nAnother model will be built using included symmetry positions\n" # File: project/readers/read_coord.c, Line: 475,509 msgid "Number of species" msgstr "Number of species" # File: project/readers/read_coord.c, Line: 483 msgid "Dummy %s" msgstr "Dummy %s" # File: project/readers/read_coord.c, Line: 496 msgid "For species %s, radius is equal to 0.0 !\n" msgstr "For species %s, radius is equal to 0.0 !\n" # File: project/readers/read_hist.c, Line: 78,85 msgid "Wrong file format - record ii line is corrupted !" msgstr "Wrong file format - record ii line is corrupted !" # File: project/readers/read_hist.c, Line: 394 msgid "Cannot find species with a mass of %f !" msgstr "Cannot find species with a mass of %f !" # File: project/readers/read_isaacs.c, Line: 795 msgid "The number of atoms in the XML file\n" "is not the same that the number of atoms\n" "in the file containing the coordinates.\n" "Other information from the XML file\n" "will be ignored\n" msgstr "The number of atoms in the XML file\n" "is not the same that the number of atoms\n" "in the file containing the coordinates.\n" "Other information from the XML file\n" "will be ignored\n" # File: project/readers/read_isaacs.c, Line: 818 msgid "The number of chemical species in the XML file\n" "is not the same that the number of chemical species\n" "in the file that contains the atomic coordinates.\n" msgstr "The number of chemical species in the XML file\n" "is not the same that the number of chemical species\n" "in the file that contains the atomic coordinates.\n" # File: project/readers/read_isaacs.c, Line: 129 msgid " I.S.A.A.C.S. v1.0 XML file " msgstr " I.S.A.A.C.S. v1.0 XML file " # File: project/readers/read_isaacs.c, Line: 141 msgid " Data format and file containing the configuration(s) " msgstr " Data format and file containing the configuration(s) " # File: project/readers/read_isaacs.c, Line: 196 msgid " Chemistry information " msgstr " Chemistry information " # File: project/readers/read_isaacs.c, Line: 270 msgid " Box information " msgstr " Box information " # File: project/readers/read_isaacs.c, Line: 376 msgid " PBC information " msgstr " PBC information " # File: project/readers/read_isaacs.c, Line: 412 msgid " Cutoffs information " msgstr " Cutoffs information " # File: project/readers/read_isaacs.c, Line: 451 msgid " Time series " msgstr " Time series " # File: project/readers/read_isaacs.c, Line: 469 msgid " Apply project " msgstr " Apply project " # File: project/readers/read_isaacs.c, Line: 753 msgid "The %s\n %s\n from the XML file does not exist\n" msgstr "The %s\n %s\n from the XML file does not exist\n" # File: project/readers/read_isaacs.c, Line: 761 msgid "Unknown data format in XML file\n" msgstr "Unknown data format in XML file\n" # File: project/readers/read_isaacs.c, Line: 1428 msgid "Impossible to open the ISAACS project file (XML) file\n" msgstr "Impossible to open the ISAACS project file (XML) file\n" # File: project/readers/read_isaacs.c, Line: 1431 msgid "The file is not a valid ISAACS project file (XML) file\n" msgstr "The file is not a valid ISAACS project file (XML) file\n" # File: project/readers/read_isaacs.c, Line: 1434 msgid "The ISAACS project file (XML) file is incomplete\n" msgstr "The ISAACS project file (XML) file is incomplete\n" # File: project/readers/read_isaacs.c, Line: 1437 msgid "Problem(s) in the <data> section of the ISAACS project file (XML)\n" msgstr "Problem(s) in the <data> section of the ISAACS project file (XML)\n" # File: project/readers/read_isaacs.c, Line: 1440 msgid "Problem(s) in the <chemistry> section of the ISAACS project file (XML)\n" msgstr "Problem(s) in the <chemistry> section of the ISAACS project file (XML)\n" # File: project/readers/read_isaacs.c, Line: 1443 msgid "Problem(s) in the <element> section of the ISAACS project file (XML)\n" msgstr "Problem(s) in the <element> section of the ISAACS project file (XML)\n" # File: project/readers/read_isaacs.c, Line: 1446 msgid "Problem(s) in the <box> section of the ISAACS project file (XML)\n" msgstr "Problem(s) in the <box> section of the ISAACS project file (XML)\n" # File: project/readers/read_isaacs.c, Line: 1449 msgid "Problem(s) in the <pbc> section of the ISAACS project file (XML)\n" msgstr "Problem(s) in the <pbc> section of the ISAACS project file (XML)\n" # File: project/readers/read_isaacs.c, Line: 1452 msgid "Problem(s) in the <cutoffs> section of the ISAACS project file (XML)\n" msgstr "Problem(s) in the <cutoffs> section of the ISAACS project file (XML)\n" # File: project/readers/read_isaacs.c, Line: 1455 msgid "Problem(s) in the <time-series> section of the ISAACS project file (XML)\n" msgstr "Problem(s) in the <time-series> section of the ISAACS project file (XML)\n" # File: project/readers/read_npt.c, Line: 97 msgid "Wrong file format - %d steps in coordinates file" msgstr "Wrong file format - %d steps in coordinates file" # File: project/readers/read_npt.c, Line: 98 msgid "Wrong file format - %d steps found in cell file" msgstr "Wrong file format - %d steps found in cell file" # File: project/readers/read_npt.c, Line: 122,130,138,161,169,177 msgid "Wrong file format - error at step %d !" msgstr "Wrong file format - error at step %d !" # File: project/readers/read_pdb.c, Line: 124 msgid "Wrong file format - record %d on line %d is corrupted !" msgstr "Wrong file format - record %d on line %d is corrupted !" # File: project/readers/read_trj.c, Line: 179 # File: project/readers/read_vas.c, Line: 167 msgid "Error - chemical species changes between steps %d and %d, for atom %d !" msgstr "Error - chemical species changes between steps %d and %d, for atom %d !" # File: opengl/glview.c, Line: 1826 msgid "Impossible to initialize the OpenGL 3D rendering ! \n %s\n" msgstr "Impossible to initialize the OpenGL 3D rendering ! \n %s\n" # File: opengl/ogl_shading.c, Line: 110 msgid "Compilation failure in %s shader:\n%s" msgstr "Compilation failure in %s shader:\n%s" # File: opengl/win/w_coord.c, Line: 959 # File: opengl/win/w_search.c, Line: 999 # File: opengl/win/w_volumes.c, Line: 706,870 msgid "fragment" msgstr "fragment" # File: opengl/edit/atom_action.c, Line: 587 msgid "Error: at= %d, sp= %d, l= %d, geo_id= %d, edit -> coord -> ntg[%d][%d]= %d" msgstr "Error: at= %d, sp= %d, l= %d, geo_id= %d, edit -> coord -> ntg[%d][%d]= %d" # File: opengl/edit/atom_action.c, Line: 1121 # File: opengl/edit/atom_search.c, Line: 269 msgid "replaced" msgstr "replaced" # File: opengl/edit/atom_action.c, Line: 1121 # File: opengl/edit/atom_search.c, Line: 269 msgid "removed" msgstr "removed" # File: opengl/edit/atom_action.c, Line: 1121 # File: opengl/edit/atom_search.c, Line: 269 msgid "inserted" msgstr "inserted" # File: opengl/edit/atom_action.c, Line: 1138 msgid "No atoms to be %s !" msgstr "No atoms to be %s !" # File: opengl/edit/atom_action.c, Line: 1144 # File: opengl/win/popup.c, Line: 681 msgid "%d atom(s) removed !\n%d atom(s) inserted !" msgstr "%d atom(s) removed !\n%d atom(s) inserted !" # File: opengl/edit/atom_action.c, Line: 1148 msgid "%d atom(s) %s !" msgstr "%d atom(s) %s !" # File: opengl/edit/atom_action.c, Line: 2064 msgid "Nothing to be done, check selection !" msgstr "Nothing to be done, check selection !" # File: opengl/edit/atom_action.c, Line: 2068 msgid "Nothing to be done, check selection and/or MSD !" msgstr "Nothing to be done, check selection and/or MSD !" # File: opengl/edit/atom_edit.c, Line: 207 msgid "To preserve atom(s) displacement(s) press the 'Apply' button\n" "Otherwise initial atom positions will be restored ...\n" "\t\t\t Are you sure to leave ?" msgstr "To preserve atom(s) displacement(s) press the 'Apply' button\n" "Otherwise initial atom positions will be restored ...\n" "\t\t\t Are you sure to leave ?" # File: opengl/edit/atom_edit.c, Line: 60 # File: opengl/win/w_search.c, Line: 3578 msgid "Move" msgstr "Move" # File: opengl/edit/atom_edit.c, Line: 60 # File: opengl/win/popup.c, Line: 3703 # File: opengl/win/w_library.c, Line: 1139 # File: opengl/win/w_search.c, Line: 2904,3579 msgid "Replace" msgstr "Replace" # File: opengl/edit/atom_edit.c, Line: 60 # File: opengl/win/popup.c, Line: 3702 # File: opengl/win/w_search.c, Line: 2904,3580,4104 msgid "Remove" msgstr "Remove" # File: opengl/edit/atom_edit.c, Line: 60 # File: opengl/win/popup.c, Line: 4201 # File: opengl/win/w_library.c, Line: 1139 # File: opengl/win/w_search.c, Line: 3581 msgid "Insert" msgstr "Insert" # File: opengl/edit/atom_edit.c, Line: 60 msgid "Random Move" msgstr "Random Move" # File: opengl/edit/atom_edit.c, Line: 61 msgid "All Non-selected Atoms" msgstr "All Non-selected Atoms" # File: opengl/edit/atom_edit.c, Line: 61 msgid "All Selected Atoms" msgstr "All Selected Atoms" # File: calc/cpmd/cpmd_init.c, Line: 158 # File: calc/dl_poly/dlp_edit.c, Line: 2466 # File: opengl/edit/atom_edit.c, Line: 61 msgid "All Atoms" msgstr "All Atoms" # File: opengl/edit/atom_edit.c, Line: 206 msgid "Leaving without saving ?" msgstr "Leaving without saving ?" # File: opengl/edit/atom_edit.c, Line: 282 # File: opengl/win/m_rep.c, Line: 579 msgid "Reset" msgstr "Reset" # File: opengl/edit/atom_edit.c, Line: 282 msgid "Reset and get back to initial coordinates ?\n This will affect all atoms !" msgstr "Reset and get back to initial coordinates ?\n This will affect all atoms !" # File: opengl/edit/atom_edit.c, Line: 421 # File: workspace/workspace.c, Line: 384 msgid "Model edition - %s" msgstr "Model edition - %s" # File: opengl/edit/atom_move.c, Line: 1201 msgid "On %s axis:" msgstr "On %s axis:" # File: opengl/edit/atom_move.c, Line: 1230 msgid "Select the axis to be used: " msgstr "Select the axis to be used: " # File: opengl/edit/atom_move.c, Line: 1232 msgid "Model axis" msgstr "Model axis" # File: opengl/edit/atom_move.c, Line: 1233 msgid "Eye (viewer) axis" msgstr "Eye (viewer) axis" # File: opengl/edit/atom_move.c, Line: 1237 # File: opengl/win/m_atoms.c, Line: 364,443,709,806 # File: opengl/win/popup.c, Line: 3697 # File: opengl/win/w_atoms.c, Line: 362 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 537,892,997 # File: opengl/win/w_rings.c, Line: 413 msgid "Show" msgstr "Show" # File: opengl/edit/atom_move.c, Line: 1247 # File: opengl/edit/atom_search.c, Line: 332 msgid "Reset transformation(s)" msgstr "Reset transformation(s)" # File: opengl/edit/atom_object.c, Line: 729 msgid "From selection" msgstr "From selection" # File: opengl/edit/atom_object.c, Line: 791,878 # File: opengl/win/w_search.c, Line: 859,3080 msgid "%d-fold" msgstr "%d-fold" # File: calc/cpmd/cpmd_init.c, Line: 154 # File: opengl/edit/atom_object.c, Line: 795,882 # File: opengl/win/w_search.c, Line: 859 msgid "Isolated" msgstr "Isolated" # File: opengl/edit/atom_object.c, Line: 911 msgid "All %s - atom(s)" msgstr "All %s - atom(s)" # File: opengl/edit/atom_object.c, Line: 934 # File: opengl/win/initcoord.c, Line: 534 # File: opengl/win/w_search.c, Line: 875 msgid "Fragment N°%d" msgstr "Fragment N°%d" # File: calc/dl_poly/dlp_field.c, Line: 2640 # File: opengl/edit/atom_object.c, Line: 938 # File: opengl/win/initcoord.c, Line: 538 # File: opengl/win/w_search.c, Line: 879,1069 msgid "Molecule N°%d" msgstr "Molecule N°%d" # File: opengl/edit/atom_object.c, Line: 1026 msgid "All non-selected atom(s) from: %s" msgstr "All non-selected atom(s) from: %s" # File: opengl/edit/atom_object.c, Line: 1030 msgid "All selected atom(s) from: %s" msgstr "All selected atom(s) from: %s" # File: opengl/edit/atom_object.c, Line: 1034 msgid "All atom(s) from: %s" msgstr "All atom(s) from: %s" # File: opengl/edit/atom_object.c, Line: 1306 # File: opengl/win/w_search.c, Line: 2435,2687 msgid "Empty position" msgstr "Empty position" # File: opengl/edit/atom_object.c, Line: 1310 msgid "%s atom" msgstr "%s atom" # File: opengl/edit/atom_search.c, Line: 114 msgid " Move atom(s)" msgstr " Move atom(s)" # File: opengl/edit/atom_search.c, Line: 114 msgid " Replace atom(s)" msgstr " Replace atom(s)" # File: opengl/edit/atom_search.c, Line: 114 msgid " Remove atom(s)" msgstr " Remove atom(s)" # File: opengl/edit/atom_search.c, Line: 114 msgid " Insert atom(s)" msgstr " Insert atom(s)" # File: opengl/edit/atom_search.c, Line: 138 msgid "Extract/rebuild the object(s) to be moved, ie. cut/clean bonds with nearest neighbor(s)" msgstr "Extract/rebuild the object(s) to be moved, ie. cut/clean bonds with nearest neighbor(s)" # File: opengl/edit/atom_search.c, Line: 146 msgid "Recompute bonding information using bond cutoffs" msgstr "Recompute bonding information using bond cutoffs" # File: opengl/edit/atom_search.c, Line: 157 msgid "Repeat n times, n= " msgstr "Repeat n times, n= " # File: opengl/edit/atom_search.c, Line: 269 msgid "moved" msgstr "moved" # File: opengl/edit/atom_search.c, Line: 269 msgid "moved randomly" msgstr "moved randomly" # File: opengl/edit/atom_search.c, Line: 269 msgid "passivated" msgstr "passivated" # File: opengl/edit/atom_search.c, Line: 277 msgid "Select the object(s) to be %s in: " msgstr "Select the object(s) to be %s in: " # File: opengl/edit/atom_search.c, Line: 287 msgid "Atom selection:" msgstr "Atom selection:" # File: opengl/edit/atom_search.c, Line: 287 msgid "Translate:" msgstr "Translate:" # File: opengl/edit/atom_search.c, Line: 287 msgid "Rotate:" msgstr "Rotate:" # File: opengl/edit/atom_search.c, Line: 313 msgid "Normally" msgstr "Normally" # File: opengl/edit/atom_search.c, Line: 314 msgid "Randomly" msgstr "Randomly" # File: opengl/edit/atom_search.c, Line: 320 msgid "Replace: " msgstr "Replace: " # File: opengl/edit/atom_search.c, Line: 320 msgid "Remove: " msgstr "Remove: " # File: opengl/edit/cbuild_action.c, Line: 1209 msgid "%s size (%f Å) is bigger than the min(a,b,c)\n" "If you build the crystal the final structure is likely to be crowded !\n" "Continue anyway ?" msgstr "%s size (%f Å) is bigger than the min(a,b,c)\n" "If you build the crystal the final structure is likely to be crowded !\n" "Continue anyway ?" # File: opengl/edit/cbuild_action.c, Line: 1772 msgid "The crystal will be created however some objects might be missing,\n" "Occupancy is too low compared to the number of site(s) per cell.\n\n" "To build a crystal matching the defined occupancy:\n" "\t 1) If you are trying to read a CIF file, use the crystal builder instead.\n" "\t 2) Modify the occupancy set-up to 'Completely random'.\n" "\t 3) Increase the number of unit cells up to get rid of this message." msgstr "The crystal will be created however some objects might be missing,\n" "Occupancy is too low compared to the number of site(s) per cell.\n\n" "To build a crystal matching the defined occupancy:\n" "\t 1) If you are trying to read a CIF file, use the crystal builder instead.\n" "\t 2) Modify the occupancy set-up to 'Completely random'.\n" "\t 3) Increase the number of unit cells up to get rid of this message." # File: opengl/edit/cbuild_action.c, Line: 356 msgid "Please describe properly the lattice parameters" msgstr "Please describe properly the lattice parameters" # File: opengl/edit/cbuild_action.c, Line: 1212 msgid "This object might be too big !" msgstr "This object might be too big !" # File: opengl/edit/cbuild_action.c, Line: 1287 msgid "Impossible to build crystal: check occupancy !" msgstr "Impossible to build crystal: check occupancy !" # File: opengl/edit/cbuild_action.c, Line: 1325 msgid "Impossible to build crystal: site total occupancy > 1.0" msgstr "Impossible to build crystal: site total occupancy > 1.0" # File: opengl/edit/cbuild_action.c, Line: 1357 msgid "Impossible to build crystal: empty site(s) only !" msgstr "Impossible to build crystal: empty site(s) only !" # File: opengl/edit/cbuild_action.c, Line: 1489 msgid "Inter-object distance(s) < 0.5 Ang. !" msgstr "Inter-object distance(s) < 0.5 Ang. !" # File: opengl/edit/cbuild_action.c, Line: 1490 msgid "Inter-object distance(s) < 0.5 Å !\n\n\t\tContinue and leave a single object at each position ?" msgstr "Inter-object distance(s) < 0.5 Å !\n\n\t\tContinue and leave a single object at each position ?" # File: opengl/edit/cbuild_action.c, Line: 1724 # File: opengl/edit/cbuild_edit.c, Line: 1432 msgid "Build (new project)" msgstr "Build (new project)" # File: opengl/edit/cbuild_edit.c, Line: 1203 msgid "Sites are filled randomly in the initial cell only,\n" "then the initial cell is simply replicated." msgstr "Sites are filled randomly in the initial cell only,\n" "then the initial cell is simply replicated." # File: opengl/edit/cbuild_edit.c, Line: 1206 msgid "Sites are filled randomly for the entire network,\n" "the final crystal is considered as a whole." msgstr "Sites are filled randomly for the entire network,\n" "the final crystal is considered as a whole." # File: opengl/edit/cbuild_edit.c, Line: 1252 msgid "Instead of ensuring that sites are filled by a single object,\n" "this allows object(s) to share the same crystalline position. \n" "The option above describes how filled and empty positions alternate.\n" msgstr "Instead of ensuring that sites are filled by a single object,\n" "this allows object(s) to share the same crystalline position. \n" "The option above describes how filled and empty positions alternate.\n" # File: opengl/edit/cbuild_edit.c, Line: 1271 msgid "\tLowest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊8.75⌋ = 8\n" "\tHighest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌈5.39⌉ = 6\n" "\tNearest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊6.82⌉ = 7\t\t and\t ⌊4.31⌉ = 4\n" "\n\t\t%s\n" msgstr "\tLowest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊8.75⌋ = 8\n" "\tHighest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌈5.39⌉ = 6\n" "\tNearest integer: \n" "\t\t Occupancy %s\n\t\t\t ex:\t ⌊6.82⌉ = 7\t\t and\t ⌊4.31⌉ = 4\n" "\n\t\t%s\n" # File: calc/cpmd/cpmd_init.c, Line: 155 # File: opengl/edit/cbuild_edit.c, Line: 102 # File: opengl/win/w_crystal.c, Line: 75 msgid "Triclinic" msgstr "Triclinic" # File: calc/cpmd/cpmd_init.c, Line: 155 # File: opengl/edit/cbuild_edit.c, Line: 103 # File: opengl/win/w_crystal.c, Line: 75 msgid "Monoclinic" msgstr "Monoclinic" # File: opengl/edit/cbuild_edit.c, Line: 1290 msgid "Othorhombic" msgstr "Othorhombic" # File: calc/cpmd/cpmd_init.c, Line: 155 # File: opengl/edit/cbuild_edit.c, Line: 105 # File: opengl/win/w_crystal.c, Line: 75 msgid "Tetragonal" msgstr "Tetragonal" # File: calc/cpmd/cpmd_init.c, Line: 154 # File: opengl/edit/cbuild_edit.c, Line: 106 # File: opengl/win/w_crystal.c, Line: 75 msgid "Trigonal" msgstr "Trigonal" # File: calc/cpmd/cpmd_init.c, Line: 154 # File: opengl/edit/cbuild_edit.c, Line: 107 # File: opengl/win/w_crystal.c, Line: 75 msgid "Hexagonal" msgstr "Hexagonal" # File: calc/cpmd/cpmd_init.c, Line: 154 # File: opengl/edit/cbuild_edit.c, Line: 108 msgid "Cubic" msgstr "Cubic" # File: opengl/edit/cbuild_edit.c, Line: 940 # File: opengl/edit/cbuild_info.c, Line: 99 msgid "Primitive " msgstr "Primitive " # File: opengl/edit/cbuild_edit.c, Line: 941 # File: opengl/edit/cbuild_info.c, Line: 87 msgid "Base-centered" msgstr "Base-centered" # File: opengl/edit/cbuild_edit.c, Line: 942 # File: opengl/edit/cbuild_info.c, Line: 95 msgid "Body-centered" msgstr "Body-centered" # File: opengl/edit/cbuild_edit.c, Line: 942 # File: opengl/edit/cbuild_info.c, Line: 91 msgid "Face-centered" msgstr "Face-centered" # File: opengl/edit/cbuild_edit.c, Line: 944 msgid "Hexagonal Axes" msgstr "Hexagonal Axes" # File: opengl/edit/cbuild_edit.c, Line: 944 msgid "Rhombohedral Axes" msgstr "Rhombohedral Axes" # File: opengl/edit/cbuild_edit.c, Line: 104 msgid "abc\nα = β = 90° ≠ ɣ\n\tor\nα = ɣ = 90° ≠ β" msgstr "abc\nα = β = 90° ≠ ɣ\n\tor\nα = ɣ = 90° ≠ β" # File: opengl/edit/cbuild_edit.c, Line: 107 msgid "a = bc\nα = β = 90° and ɣ = 120°" msgstr "a = bc\nα = β = 90° and ɣ = 120°" # File: opengl/edit/cbuild_edit.c, Line: 408 msgid "Vectors" msgstr "Vectors" # File: opengl/edit/cbuild_edit.c, Line: 747 msgid "%s group info" msgstr "%s group info" # File: opengl/edit/cbuild_edit.c, Line: 889 msgid "Cannot read space group *.sgl file ?!\nPlease check the program library !" msgstr "Cannot read space group *.sgl file ?!\nPlease check the program library !" # File: opengl/edit/cbuild_edit.c, Line: 1198 msgid "Random for the initial cell only" msgstr "Random for the initial cell only" # File: opengl/edit/cbuild_edit.c, Line: 1199 msgid "Random cell by cell" msgstr "Random cell by cell" # File: opengl/edit/cbuild_edit.c, Line: 1200 msgid "Completely random" msgstr "Completely random" # File: opengl/edit/cbuild_edit.c, Line: 1201 msgid "Successively" msgstr "Successively" # File: opengl/edit/cbuild_edit.c, Line: 1202 msgid "Alternatively" msgstr "Alternatively" # File: opengl/edit/cbuild_edit.c, Line: 1205 msgid "Sites are filled randomly for each cell, cell by cell separately." msgstr "Sites are filled randomly for each cell, cell by cell separately." # File: opengl/edit/cbuild_edit.c, Line: 1208 msgid "Sites are filled successively: all object(s) A, then all object(s) B ... " msgstr "Sites are filled successively: all object(s) A, then all object(s) B ... " # File: opengl/edit/cbuild_edit.c, Line: 1209 msgid "Sites are filled alternatively: object A, object B, object A ..." msgstr "Sites are filled alternatively: object A, object B, object A ..." # File: opengl/edit/cbuild_edit.c, Line: 1247 msgid "Allow overlapping" msgstr "Allow overlapping" # File: opengl/edit/cbuild_edit.c, Line: 1258 msgid "Occupancy rounding:" msgstr "Occupancy rounding:" # File: opengl/edit/cbuild_edit.c, Line: 1291 msgid "Crystal builder - %s" msgstr "Crystal builder - %s" # File: opengl/edit/cbuild_edit.c, Line: 1291 # File: opengl/win/w_crystal.c, Line: 776 msgid "Crystal builder" msgstr "Crystal builder" # File: opengl/edit/cbuild_edit.c, Line: 1309 msgid "Crystal system:" msgstr "Crystal system:" # File: opengl/edit/cbuild_edit.c, Line: 1321 msgid "Bravais lattice:" msgstr "Bravais lattice:" # File: opengl/edit/cbuild_edit.c, Line: 1326 # File: opengl/edit/cbuild_info.c, Line: 555 msgid "Lattice constraints: " msgstr "Lattice constraints: " # File: opengl/edit/cbuild_edit.c, Line: 1340 msgid "Space group:" msgstr "Space group:" # File: opengl/edit/cbuild_edit.c, Line: 1355 msgid "Settings:" msgstr "Settings:" # File: calc/cp2k/cp2k_init.c, Line: 182 # File: opengl/edit/cbuild_edit.c, Line: 1383 msgid "Lattice parameters:" msgstr "Lattice parameters:" # File: opengl/edit/cbuild_edit.c, Line: 1402 msgid "Cell(s):" msgstr "Cell(s):" # File: opengl/edit/cbuild_edit.c, Line: 1415 msgid " Wrap all atoms in the unit cell after building" msgstr " Wrap all atoms in the unit cell after building" # File: opengl/edit/cbuild_edit.c, Line: 1416 msgid " Show/Hide clones after building" msgstr " Show/Hide clones after building" # File: opengl/edit/cbuild_edit.c, Line: 1421 msgid "Add object(s):" msgstr "Add object(s):" # File: opengl/edit/cbuild_edit.c, Line: 1425 # File: opengl/win/w_search.c, Line: 3581 msgid "Occupancy" msgstr "Occupancy" # File: opengl/edit/cbuild_edit.c, Line: 1432 # File: opengl/win/w_crystal.c, Line: 784 msgid "Build" msgstr "Build" # File: opengl/edit/cbuild_info.c, Line: 103 msgid "Rhombohedral" msgstr "Rhombohedral" # File: opengl/edit/cbuild_info.c, Line: 366 # File: opengl/win/m_map.c, Line: 679 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 892,997 # File: opengl/win/w_measures.c, Line: 491,492,493 # File: opengl/win/w_rings.c, Line: 413 msgid "Id." msgstr "Id." # File: calc/cp2k/cp2k_init.c, Line: 173 # File: calc/dl_poly/dlp_field.c, Line: 924 # File: calc/dl_poly/dlp_mol.c, Line: 761 # File: opengl/edit/cbuild_info.c, Line: 366 msgid "Multiplicity" msgstr "Multiplicity" # File: opengl/edit/cbuild_info.c, Line: 366 msgid "Letter" msgstr "Letter" # File: opengl/edit/cbuild_info.c, Line: 366 # File: opengl/win/w_crystal.c, Line: 793 msgid "Symmetry" msgstr "Symmetry" # File: calc/cpmd/cpmd_restart.c, Line: 200 # File: opengl/edit/cbuild_info.c, Line: 366 msgid "Coordinates" msgstr "Coordinates" # File: opengl/edit/cbuild_info.c, Line: 498 msgid "%s info" msgstr "%s info" # File: opengl/edit/cbuild_info.c, Line: 516 msgid "Space group: " msgstr "Space group: " # File: opengl/edit/cbuild_info.c, Line: 523 msgid "Number: " msgstr "Number: " # File: opengl/edit/cbuild_info.c, Line: 537 msgid "Crystal system: " msgstr "Crystal system: " # File: opengl/edit/cbuild_info.c, Line: 547 msgid "Bravais lattice: " msgstr "Bravais lattice: " # File: opengl/edit/cbuild_info.c, Line: 571 msgid "Setting(s): " msgstr "Setting(s): " # File: opengl/edit/cbuild_info.c, Line: 595 msgid "Wyckoff position(s): " msgstr "Wyckoff position(s): " # File: opengl/edit/cell_cut.c, Line: 81 msgid "Select any object(s) A to be replaced when creating the slab, then select the object(s) B to insert in its place.\n" "When cutting into the model any bond to A with the new surface, will be passivated by B" msgstr "Select any object(s) A to be replaced when creating the slab, then select the object(s) B to insert in its place.\n" "When cutting into the model any bond to A with the new surface, will be passivated by B" # File: opengl/edit/cell_cut.c, Line: 71 msgid "Cell edition - %s: surface passivation" msgstr "Cell edition - %s: surface passivation" # File: opengl/edit/cell_cut.c, Line: 116 msgid "- Volume: " msgstr "- Volume: " # File: opengl/edit/cell_cut.c, Line: 123 msgid "- Atom(s) in slab: " msgstr "- Atom(s) in slab: " # File: opengl/edit/cell_cut.c, Line: 132 msgid "\t - %s atom(s) in slab: " msgstr "\t - %s atom(s) in slab: " # File: opengl/edit/cell_cut.c, Line: 225 msgid "- Position the center of the slab: " msgstr "- Position the center of the slab: " # File: opengl/edit/cell_cut.c, Line: 226,227 msgid "- Size of the slab: " msgstr "- Size of the slab: " # File: opengl/edit/cell_cut.c, Line: 229 msgid "- Parallelepiped angles: " msgstr "- Parallelepiped angles: " # File: opengl/edit/cell_cut.c, Line: 230 msgid "- Slab rotation: " msgstr "- Slab rotation: " # File: calc/dl_poly/dlp_field.c, Line: 279 # File: opengl/edit/cell_cut.c, Line: 307 # File: opengl/win/w_measures.c, Line: 752 msgid "Angles" msgstr "Angles" # File: opengl/edit/cell_cut.c, Line: 307 msgid "Rotation" msgstr "Rotation" # File: opengl/edit/cell_cut.c, Line: 498 msgid "Cut and modify model ?\n This is irreversible !" msgstr "Cut and modify model ?\n This is irreversible !" # File: opengl/edit/cell_cut.c, Line: 498 msgid "Cut and create new project ?" msgstr "Cut and create new project ?" # File: opengl/edit/cell_cut.c, Line: 498 msgid "Cut" msgstr "Cut" # File: opengl/edit/cell_cut.c, Line: 638 msgid "Nothing to passivate the bond(s) to be broken:\nDeactivate passivating or adjust option(s) properly !" msgstr "Nothing to passivate the bond(s) to be broken:\nDeactivate passivating or adjust option(s) properly !" # File: opengl/edit/cell_cut.c, Line: 643 msgid "The slab is empty, nothing to do !" msgstr "The slab is empty, nothing to do !" # File: opengl/edit/cell_cut.c, Line: 666 msgid "Cut slab in the simulation box: " msgstr "Cut slab in the simulation box: " # File: opengl/edit/cell_cut.c, Line: 670 msgid "Show/Hide slab" msgstr "Show/Hide slab" # File: opengl/edit/cell_cut.c, Line: 672 msgid "Use PBC to select atoms" msgstr "Use PBC to select atoms" # File: opengl/edit/cell_cut.c, Line: 674 msgid "Invert cutting (all but the slab)" msgstr "Invert cutting (all but the slab)" # File: opengl/edit/cell_cut.c, Line: 676 msgid "Export in new project" msgstr "Export in new project" # File: opengl/edit/cell_cut.c, Line: 684 msgid "Parallelepiped" msgstr "Parallelepiped" # File: opengl/edit/cell_cut.c, Line: 684 msgid "Cylinder" msgstr "Cylinder" # File: opengl/edit/cell_cut.c, Line: 684 msgid "Sphere" msgstr "Sphere" # File: opengl/edit/cell_cut.c, Line: 688 msgid "- Shape of the slab: " msgstr "- Shape of the slab: " # File: opengl/edit/cell_cut.c, Line: 694 msgid "Passivate surface" msgstr "Passivate surface" # File: calc/cp2k/cp2k_init.c, Line: 802 # File: opengl/edit/cell_cut.c, Line: 698 msgid "Options" msgstr "Options" # File: opengl/edit/cell_cut.c, Line: 712 msgid "- Select option to tweak: " msgstr "- Select option to tweak: " # File: opengl/edit/cell_cut.c, Line: 726 msgid "Slab information:" msgstr "Slab information:" # File: opengl/edit/cell_cut.c, Line: 729 msgid "- Opacity: " msgstr "- Opacity: " # File: opengl/edit/cell_cut.c, Line: 738 msgid "Select atom(s) in this slab !" msgstr "Select atom(s) in this slab !" # File: opengl/edit/cell_cut.c, Line: 739 msgid "or" msgstr "or" # File: opengl/edit/cell_cut.c, Line: 740 msgid "Cut this slab now !" msgstr "Cut this slab now !" # File: opengl/edit/cell_density.c, Line: 59 msgid "Volume:" msgstr "Volume:" # File: opengl/edit/cell_density.c, Line: 59 msgid "Mass density:" msgstr "Mass density:" # File: opengl/edit/cell_density.c, Line: 59 msgid "Number density:" msgstr "Number density:" # File: opengl/edit/cell_density.c, Line: 60 msgid "atom/Å3" msgstr "atom/Å3" # File: opengl/edit/cell_density.c, Line: 120 msgid "Modify the density of the simulation box *: " msgstr "Modify the density of the simulation box *: " # File: opengl/edit/cell_density.c, Line: 121 msgid "Homogeneous rescaling **" msgstr "Homogeneous rescaling **" # File: opengl/edit/cell_density.c, Line: 130 msgid " * Visual information will be preserved, real bonding is likely to be modified.\n" " Bond properties should be re-calculated, if required bond cutoffs should be updated." msgstr " * Visual information will be preserved, real bonding is likely to be modified.\n" " Bond properties should be re-calculated, if required bond cutoffs should be updated." # File: opengl/edit/cell_density.c, Line: 131 msgid "** Keep the ratios between the lattice vectors A, B and C like in the initial cell." msgstr "** Keep the ratios between the lattice vectors A, B and C like in the initial cell." # File: opengl/edit/cell_edit.c, Line: 48 msgid "Wrap All Atoms in" msgstr "Wrap All Atoms in" # File: opengl/edit/cell_edit.c, Line: 49 msgid "Shift Center" msgstr "Shift Center" # File: opengl/edit/cell_edit.c, Line: 50 msgid "Add Extra(s)" msgstr "Add Extra(s)" # File: opengl/edit/cell_edit.c, Line: 51 msgid "Create Super-Cell" msgstr "Create Super-Cell" # File: opengl/edit/cell_edit.c, Line: 52 msgid "Adjust Density" msgstr "Adjust Density" # File: opengl/edit/cell_edit.c, Line: 53 msgid "Cut Slab" msgstr "Cut Slab" # File: opengl/edit/cell_edit.c, Line: 54 msgid "PBC Pixels Debug" msgstr "PBC Pixels Debug" # File: opengl/edit/cell_edit.c, Line: 190 # File: workspace/workspace.c, Line: 388 msgid "Cell edition - %s" msgstr "Cell edition - %s" # File: opengl/edit/cell_extra.c, Line: 89 msgid "\tAdd extra cell(s):" msgstr "\tAdd extra cell(s):" # File: opengl/edit/cell_extra.c, Line: 103 msgid "Create super-cell" msgstr "Create super-cell" # File: opengl/edit/cell_pixel.c, Line: 259 msgid "\tSelect pixel to check, from 1 to %d:" msgstr "\tSelect pixel to check, from 1 to %d:" # File: opengl/edit/cell_shift.c, Line: 500 msgid "You are about to put all the atoms back inside the model box\n" "This action is irreversible, proceed anyway ?" msgstr "You are about to put all the atoms back inside the model box\n" "This action is irreversible, proceed anyway ?" # File: opengl/edit/cell_shift.c, Line: 422 msgid "on %s axis [+/- Å]" msgstr "on %s axis [+/- Å]" # File: opengl/edit/cell_shift.c, Line: 429 msgid "Lattice %s [+/- Å]" msgstr "Lattice %s [+/- Å]" # File: opengl/edit/cell_shift.c, Line: 435 msgid "Length [+/- Å]" msgstr "Length [+/- Å]" # File: opengl/edit/cell_shift.c, Line: 441 msgid "Angle %s [+/- °]" msgstr "Angle %s [+/- °]" # File: opengl/edit/cell_shift.c, Line: 447 msgid "on %s axis [+/- °]" msgstr "on %s axis [+/- °]" # File: opengl/edit/cell_shift.c, Line: 453 msgid "Radius [+/- Å]" msgstr "Radius [+/- Å]" # File: opengl/edit/cell_shift.c, Line: 483 msgid "Shift the position of the cell center *: " msgstr "Shift the position of the cell center *: " # File: opengl/edit/cell_shift.c, Line: 485 msgid "* requires all atoms to be wrapped in the unit cell" msgstr "* requires all atoms to be wrapped in the unit cell" # File: opengl/edit/cell_shift.c, Line: 502 msgid "Wrap atomic coordinates in unit cell ?" msgstr "Wrap atomic coordinates in unit cell ?" # File: opengl/edit/cell_shift.c, Line: 565 msgid "Wrap atomic coordinates in unit cell" msgstr "Wrap atomic coordinates in unit cell" # File: opengl/edit/cell_super.c, Line: 206 msgid "You are about to change the periodicity of the 3D model," msgstr "You are about to change the periodicity of the 3D model," # File: opengl/edit/cell_super.c, Line: 207 msgid "this will affect the entire molecular dynamics trajectory," msgstr "this will affect the entire molecular dynamics trajectory," # File: opengl/edit/cell_super.c, Line: 208 msgid "\tand the action is irreversible, proceed anyway ?" msgstr "\tand the action is irreversible, proceed anyway ?" # File: opengl/edit/cell_super.c, Line: 218 msgid "Create a super-cell ?" msgstr "Create a super-cell ?" # File: opengl/edit/cell_super.c, Line: 325 msgid "Something went wrong, the 3D model was not updated" msgstr "Something went wrong, the 3D model was not updated" # File: opengl/win/color_box.c, Line: 366 # File: opengl/win/m_atoms.c, Line: 747 # File: opengl/win/m_back.c, Line: 92 # File: opengl/win/m_box.c, Line: 627 # File: opengl/win/m_coord.c, Line: 483 msgid "More Colors ..." msgstr "More Colors ..." # File: opengl/win/glwindow.c, Line: 126,168,171 msgid "Analysis mode" msgstr "Analysis mode" # File: opengl/win/glwindow.c, Line: 128 msgid "Styles" msgstr "Styles" # File: opengl/win/glwindow.c, Line: 128,161 # File: opengl/win/m_tools.c, Line: 316,473 msgid "Measures" msgstr "Measures" # File: opengl/win/glwindow.c, Line: 128 msgid "Selection mode" msgstr "Selection mode" # File: opengl/win/glwindow.c, Line: 128 msgid "Window management" msgstr "Window management" # File: opengl/win/glwindow.c, Line: 128 msgid "Mouse mode" msgstr "Mouse mode" # File: opengl/win/glwindow.c, Line: 129 msgid "Camera rotation" msgstr "Camera rotation" # File: opengl/win/glwindow.c, Line: 129 msgid "Camera motion" msgstr "Camera motion" # File: opengl/win/glwindow.c, Line: 129 msgid "Camera spin" msgstr "Camera spin" # File: opengl/win/glwindow.c, Line: 129,130 msgid "Model interaction" msgstr "Model interaction" # File: opengl/win/glwindow.c, Line: 130 msgid "Coordinates rotation" msgstr "Coordinates rotation" # File: opengl/win/glwindow.c, Line: 130 msgid "Coordinates translation" msgstr "Coordinates translation" # File: opengl/win/glwindow.c, Line: 139 msgid "change atom(s) color map" msgstr "change atom(s) color map" # File: opengl/win/glwindow.c, Line: 140 msgid "change polyhedra color map" msgstr "change polyhedra color map" # File: opengl/win/glwindow.c, Line: 141 msgid "change global style to balls and sticks" msgstr "change global style to balls and sticks" # File: opengl/win/glwindow.c, Line: 142 msgid "change global style to cylinders" msgstr "change global style to cylinders" # File: opengl/win/glwindow.c, Line: 143 # File: opengl/win/m_style.c, Line: 62 msgid "Spheres" msgstr "Spheres" # File: opengl/win/glwindow.c, Line: 143 msgid "change global style to spheres" msgstr "change global style to spheres" # File: opengl/win/glwindow.c, Line: 144 # File: opengl/win/m_style.c, Line: 66 msgid "Covalent Radii" msgstr "Covalent Radii" # File: opengl/win/glwindow.c, Line: 144 msgid "change global style to covalent radii" msgstr "change global style to covalent radii" # File: opengl/win/glwindow.c, Line: 145 # File: opengl/win/m_style.c, Line: 67 msgid "Ionic Radii" msgstr "Ionic Radii" # File: opengl/win/glwindow.c, Line: 145 msgid "change global style to ionic radii" msgstr "change global style to ionic radii" # File: opengl/win/glwindow.c, Line: 146 # File: opengl/win/m_style.c, Line: 68 msgid "van der Waals Radii" msgstr "van der Waals Radii" # File: opengl/win/glwindow.c, Line: 146 msgid "change global style to van der Waals radii" msgstr "change global style to van der Waals radii" # File: opengl/win/glwindow.c, Line: 147 # File: opengl/win/m_style.c, Line: 69 msgid "In Crystal Radii" msgstr "In Crystal Radii" # File: opengl/win/glwindow.c, Line: 147 msgid "change global style to in crystal radii" msgstr "change global style to in crystal radii" # File: opengl/win/glwindow.c, Line: 148 msgid "change global style to wireframes" msgstr "change global style to wireframes" # File: opengl/win/glwindow.c, Line: 150 msgid "All measures for the selection, pressed:\n\n" "\t- 1st time: show inter-atomic distances\n" "\t- 2nd time: show inter-atomic angles\n" "\t- 3rd time: hide measures" msgstr "All measures for the selection, pressed:\n\n" "\t- 1st time: show inter-atomic distances\n" "\t- 2nd time: show inter-atomic angles\n" "\t- 3rd time: hide measures" # File: opengl/win/glwindow.c, Line: 153 msgid "Show measures" msgstr "Show measures" # File: calc/cpmd/cpmd_nose.c, Line: 1216 # File: calc/dl_poly/dlp_edit.c, Line: 1184 # File: calc/dl_poly/dlp_field.c, Line: 143 # File: opengl/win/glwindow.c, Line: 155 # File: opengl/win/w_library.c, Line: 194 msgid "Atom" msgstr "Atom" # File: opengl/win/glwindow.c, Line: 155 msgid "atom selection mode" msgstr "atom selection mode" # File: opengl/win/glwindow.c, Line: 156 # File: opengl/win/m_coord.c, Line: 425 # File: opengl/win/menu_bar.c, Line: 204 msgid "Coordination" msgstr "Coordination" # File: opengl/win/glwindow.c, Line: 156 msgid "coordination sphere selection mode" msgstr "coordination sphere selection mode" # File: opengl/win/glwindow.c, Line: 157 msgid "fragment selection mode" msgstr "fragment selection mode" # File: opengl/win/glwindow.c, Line: 158 msgid "molecule selection mode" msgstr "molecule selection mode" # File: opengl/win/glwindow.c, Line: 160 msgid "Environments" msgstr "Environments" # File: opengl/win/glwindow.c, Line: 160 msgid "Environments window" msgstr "Environments window" # File: opengl/win/glwindow.c, Line: 161 msgid "Measures window" msgstr "Measures window" # File: opengl/win/glwindow.c, Line: 162 # File: opengl/win/m_anim.c, Line: 79,83,144 msgid "Recorder" msgstr "Recorder" # File: opengl/win/glwindow.c, Line: 162 msgid "Recorder window" msgstr "Recorder window" # File: opengl/win/glwindow.c, Line: 163 msgid "Create new project" msgstr "Create new project" # File: opengl/win/glwindow.c, Line: 164 msgid "Enter fullscreen" msgstr "Enter fullscreen" # File: opengl/win/glwindow.c, Line: 165 msgid "Exit fullscreen" msgstr "Exit fullscreen" # File: opengl/win/glwindow.c, Line: 177,202 msgid "Rotate right" msgstr "Rotate right" # File: opengl/win/glwindow.c, Line: 177,189,202 msgid "rotate right" msgstr "rotate right" # File: opengl/win/w_spiner.c, Line: 186 msgid "Right" msgstr "Right" # File: opengl/win/glwindow.c, Line: 178,203 msgid "Rotate left" msgstr "Rotate left" # File: opengl/win/glwindow.c, Line: 178,190,203 msgid "rotate left" msgstr "rotate left" # File: opengl/win/w_spiner.c, Line: 187 msgid "Left" msgstr "Left" # File: opengl/win/glwindow.c, Line: 179,204 msgid "Rotate up" msgstr "Rotate up" # File: opengl/win/glwindow.c, Line: 179,191,204 msgid "rotate up" msgstr "rotate up" # File: opengl/win/w_spiner.c, Line: 189 msgid "Up" msgstr "Up" # File: opengl/win/glwindow.c, Line: 180,205 msgid "Rotate down" msgstr "Rotate down" # File: opengl/win/glwindow.c, Line: 180,192,205 msgid "rotate down" msgstr "rotate down" # File: opengl/win/w_spiner.c, Line: 190 msgid "Down" msgstr "Down" # File: opengl/win/glwindow.c, Line: 182 msgid "Move right" msgstr "Move right" # File: opengl/win/glwindow.c, Line: 182,207 msgid "move camera right" msgstr "move camera right" # File: opengl/win/glwindow.c, Line: 183 msgid "Move left" msgstr "Move left" # File: opengl/win/glwindow.c, Line: 183,208 msgid "move camera left" msgstr "move camera left" # File: opengl/win/glwindow.c, Line: 184 msgid "Move up" msgstr "Move up" # File: opengl/win/glwindow.c, Line: 184,209 msgid "move camera up" msgstr "move camera up" # File: opengl/win/glwindow.c, Line: 185 msgid "Move down" msgstr "Move down" # File: opengl/win/glwindow.c, Line: 185,210 msgid "move camera down" msgstr "move camera down" # File: opengl/win/glwindow.c, Line: 186,211 msgid "Zoom in" msgstr "Zoom in" # File: opengl/win/glwindow.c, Line: 186,211 msgid "zoom camera in" msgstr "zoom camera in" # File: opengl/win/glwindow.c, Line: 187,212 msgid "Zoom out" msgstr "Zoom out" # File: opengl/win/glwindow.c, Line: 187,212 msgid "zoom camera out" msgstr "zoom camera out" # File: opengl/win/glwindow.c, Line: 189 msgid "Spin right" msgstr "Spin right" # File: opengl/win/glwindow.c, Line: 190 msgid "Spin left" msgstr "Spin left" # File: opengl/win/glwindow.c, Line: 191 msgid "Spin up" msgstr "Spin up" # File: opengl/win/glwindow.c, Line: 192 msgid "Spin down" msgstr "Spin down" # File: opengl/win/glwindow.c, Line: 193 msgid "Pause / restart" msgstr "Pause / restart" # File: opengl/win/glwindow.c, Line: 193 msgid "pause / restart spinning" msgstr "pause / restart spinning" # File: opengl/win/glwindow.c, Line: 194 # File: opengl/win/w_record.c, Line: 167 # File: opengl/win/w_sequencer.c, Line: 491 # File: opengl/win/w_spiner.c, Line: 188 msgid "Stop" msgstr "Stop" # File: opengl/win/glwindow.c, Line: 194 msgid "stop spinning" msgstr "stop spinning" # File: opengl/win/glwindow.c, Line: 196,214 msgid "Label / unlabel all atom(s)" msgstr "Label / unlabel all atom(s)" # File: opengl/win/glwindow.c, Line: 197,215 msgid "Select / unselect all atom(s)" msgstr "Select / unselect all atom(s)" # File: opengl/win/glwindow.c, Line: 198,216 msgid "Copy selection" msgstr "Copy selection" # File: opengl/win/glwindow.c, Line: 207 msgid "Translate right" msgstr "Translate right" # File: opengl/win/glwindow.c, Line: 208 msgid "Translate left" msgstr "Translate left" # File: opengl/win/glwindow.c, Line: 209 msgid "Translate up" msgstr "Translate up" # File: opengl/win/glwindow.c, Line: 210 msgid "Translate down" msgstr "Translate down" # File: opengl/win/glwindow.c, Line: 217 msgid "Cut selection" msgstr "Cut selection" # File: opengl/win/glwindow.c, Line: 218 msgid "Paste selection" msgstr "Paste selection" # File: opengl/win/glwindow.c, Line: 219 msgid "Delete selection" msgstr "Delete selection" # File: opengl/win/glwindow.c, Line: 310 # File: opengl/win/m_poly.c, Line: 343,497,501 # File: opengl/win/menu_bar.c, Line: 208,212 msgid "Ring(s)" msgstr "Ring(s)" # File: opengl/win/glwindow.c, Line: 314 # File: opengl/win/m_map.c, Line: 1165,1276 # File: opengl/win/menu_bar.c, Line: 205 # File: opengl/win/popup.c, Line: 4234 msgid "Polyhedra" msgstr "Polyhedra" # File: opengl/win/glwindow.c, Line: 490 # File: opengl/win/m_box.c, Line: 327,606 # File: opengl/win/menu_bar.c, Line: 166 # File: opengl/win/popup.c, Line: 3699 msgid "Style" msgstr "Style" # File: opengl/win/glwindow.c, Line: 492 # File: opengl/win/menu_bar.c, Line: 167 msgid "Color Maps" msgstr "Color Maps" # File: opengl/win/glwindow.c, Line: 493 # File: opengl/win/menu_bar.c, Line: 170 msgid "Material and Light(s)" msgstr "Material and Light(s)" # File: opengl/draw/image.c, Line: 209 # File: opengl/win/glwindow.c, Line: 494 # File: opengl/win/menu_bar.c, Line: 171 msgid "Render Image" msgstr "Render Image" # File: calc/cpmd/cpmd_atoms.c, Line: 448 # File: calc/cpmd/cpmd_nose.c, Line: 468 # File: calc/dl_poly/dlp_field.c, Line: 143 # File: opengl/win/glwindow.c, Line: 525 # File: opengl/win/m_clones.c, Line: 122,185 # File: opengl/win/m_edit.c, Line: 360 # File: opengl/win/menu_bar.c, Line: 186 # File: opengl/win/popup.c, Line: 4228 # File: opengl/win/w_search.c, Line: 4000,4141 # File: calc/dl_poly/dlp_field.c, Line: 143 msgid "Atom(s)" msgstr "Atom(s)" # File: opengl/win/glwindow.c, Line: 527 # File: opengl/win/menu_bar.c, Line: 188 # File: opengl/win/popup.c, Line: 4230 msgid "Clone(s)" msgstr "Clone(s)" # File: opengl/win/glwindow.c, Line: 559 # File: opengl/win/m_rep.c, Line: 813 msgid "Projection" msgstr "Projection" # File: opengl/win/glwindow.c, Line: 560 # File: opengl/win/m_rep.c, Line: 814 msgid "Background" msgstr "Background" # File: opengl/win/glwindow.c, Line: 565 # File: opengl/win/m_rep.c, Line: 579,781 # File: opengl/win/popup.c, Line: 4269 msgid "Reset View" msgstr "Reset View" # File: opengl/win/glwindow.c, Line: 566 # File: opengl/win/m_rep.c, Line: 782 # File: opengl/win/popup.c, Line: 4270 msgid "Center Molecule" msgstr "Center Molecule" # File: opengl/win/glwindow.c, Line: 568 # File: opengl/win/m_rep.c, Line: 797 # File: opengl/win/popup.c, Line: 4274 msgid "Fullscreen" msgstr "Fullscreen" # File: calc/dl_poly/dlp_field.c, Line: 924 # File: opengl/win/glwindow.c, Line: 623 # File: opengl/win/menu_bar.c, Line: 271,276 msgid "Chemistry" msgstr "Chemistry" # File: opengl/win/glwindow.c, Line: 1359 msgid "Sorry OpenGL is not supported !" msgstr "Sorry OpenGL is not supported !" # File: opengl/win/glwindow.c, Line: 1376 # File: opengl/win/m_tools.c, Line: 240 # File: workspace/workspace.c, Line: 368 msgid "%s - 3D view - [%s mode]" msgstr "%s - 3D view - [%s mode]" # File: opengl/win/initcoord.c, Line: 267 # File: opengl/win/m_box.c, Line: 321,325 # File: opengl/win/m_clones.c, Line: 116,120,183 # File: opengl/win/m_coord.c, Line: 294,656 # File: opengl/win/m_poly.c, Line: 234,449,453 # File: opengl/win/w_labels.c, Line: 810 # File: opengl/win/w_volumes.c, Line: 797,1106 msgid "Show/Hide" msgstr "Show/Hide" # File: opengl/win/initcoord.c, Line: 483 msgid "fragment(s)" msgstr "fragment(s)" # File: opengl/win/initcoord.c, Line: 483 msgid "molecule(s)" msgstr "molecule(s)" # File: opengl/win/initcoord.c, Line: 486 msgid "Maximum number of %s per MD step: %d" msgstr "Maximum number of %s per MD step: %d" # File: opengl/win/m_anim.c, Line: 61 # File: opengl/win/menu_bar.c, Line: 280 # File: opengl/win/popup.c, Line: 4045 msgid "Animate" msgstr "Animate" # File: opengl/win/m_anim.c, Line: 66,70,142 msgid "Spin" msgstr "Spin" # File: opengl/win/m_anim.c, Line: 72,143 msgid "Sequencer" msgstr "Sequencer" # File: opengl/win/m_atoms.c, Line: 361 # File: opengl/win/m_atoms.c, Line: 689 msgid "Show/Hide All" msgstr "Show/Hide All" # File: opengl/win/m_atoms.c, Line: 408,417,710 msgid "Select atom(s)" msgstr "Select atom(s)" # File: opengl/win/m_atoms.c, Line: 447,451,807 # File: opengl/win/m_coord.c, Line: 360 # File: opengl/win/w_labels.c, Line: 778 msgid "Color(s)" msgstr "Color(s)" # File: opengl/win/m_atoms.c, Line: 453,808 msgid "Label(s)" msgstr "Label(s)" # File: opengl/win/m_atoms.c, Line: 459,469,812 # File: opengl/win/m_bonds.c, Line: 275,286,387 msgid "Radius(ii)" msgstr "Radius(ii)" # File: opengl/win/m_atoms.c, Line: 482,492,818 msgid "Dot Size(s)" msgstr "Dot Size(s)" # File: opengl/win/m_axis.c, Line: 134,310 msgid "Top" msgstr "Top" # File: opengl/win/m_axis.c, Line: 134,310 msgid "Bottom" msgstr "Bottom" # File: opengl/win/m_axis.c, Line: 135,285 msgid "Right Corner" msgstr "Right Corner" # File: opengl/win/m_axis.c, Line: 135,285 msgid "Left Corner" msgstr "Left Corner" # File: opengl/win/m_axis.c, Line: 163,169,315 # File: opengl/win/w_colors.c, Line: 484 msgid "Center" msgstr "Center" # File: opengl/win/m_axis.c, Line: 192 msgid " Length [ %f Å ]" msgstr " Length [ %f Å ]" # File: opengl/win/m_back.c, Line: 75 msgid "Gradient color" msgstr "Gradient color" # File: opengl/win/m_back.c, Line: 93 # File: opengl/win/w_colors.c, Line: 533 msgid "Gradient colors" msgstr "Gradient colors" # File: opengl/win/m_bonds.c, Line: 161 msgid "Total [ %f Å ]" msgstr "Total [ %f Å ]" # File: opengl/win/m_bonds.c, Line: 239,243,257,261,376,380 # File: opengl/win/w_bonds.c, Line: 174,188 msgid "Cylinder(s) [ %f Å ]" msgstr "Cylinder(s) [ %f Å ]" # File: opengl/win/m_bonds.c, Line: 263,382 msgid "Cylinder Radius(ii)" msgstr "Cylinder Radius(ii)" # File: opengl/win/m_bonds.c, Line: 298,309,392 msgid "Line Width(s)" msgstr "Line Width(s)" # File: opengl/win/m_bonds.c, Line: 323,328,400 msgid "Cutoffs" msgstr "Cutoffs" # File: opengl/win/m_box.c, Line: 332,568 # File: opengl/win/w_axis.c, Line: 136 # File: opengl/win/w_bonds.c, Line: 113,152 # File: opengl/win/w_box.c, Line: 109 msgid "Width [ %f pts ]" msgstr "Width [ %f pts ]" # File: opengl/win/m_box.c, Line: 338,350,610 # File: opengl/win/w_advance.c, Line: 1319 msgid "Lines" msgstr "Lines" # File: opengl/win/m_box.c, Line: 359,573 # File: opengl/win/w_axis.c, Line: 122 # File: opengl/win/w_bonds.c, Line: 96,134 # File: opengl/win/w_box.c, Line: 90 msgid "Radius [ %f Å ]" msgstr "Radius [ %f Å ]" # File: opengl/win/m_box.c, Line: 578 msgid " length [ %f Å ]" msgstr " length [ %f Å ]" # File: opengl/win/m_clones.c, Line: 188 msgid "Bonds(s)" msgstr "Bonds(s)" # File: opengl/win/m_coord.c, Line: 304,618 msgid "Atoms in Chain(s) of Size" msgstr "Atoms in Chain(s) of Size" # File: opengl/win/m_coord.c, Line: 308,618 msgid "Atoms in Ring(s) of Size" msgstr "Atoms in Ring(s) of Size" # File: opengl/win/m_coord.c, Line: 429,692 # File: opengl/win/m_map.c, Line: 1242 msgid "Total(s)" msgstr "Total(s)" # File: opengl/win/m_coord.c, Line: 430,693 # File: opengl/win/m_map.c, Line: 1244 msgid "Partial(s)" msgstr "Partial(s)" # File: opengl/win/m_edit.c, Line: 176,182,358 msgid "Crystal Builder" msgstr "Crystal Builder" # File: opengl/win/m_edit.c, Line: 189,194,359 msgid "Cell" msgstr "Cell" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 # File: opengl/win/m_edit.c, Line: 197 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_rings.c, Line: 413 msgid "Atoms" msgstr "Atoms" # File: opengl/win/m_edit.c, Line: 213,337 # File: opengl/win/popup.c, Line: 4263 msgid "Extract/Rebuild on Motion" msgstr "Extract/Rebuild on Motion" # File: opengl/win/m_edit.c, Line: 213,337 # File: opengl/win/popup.c, Line: 4264 msgid "Extract/Rebuild on Copy" msgstr "Extract/Rebuild on Copy" # File: opengl/win/m_map.c, Line: 780 msgid "Wrong file format !\n" " Expecting only a single column file\n" " with Ns x Na lines, with:\n" " - Ns = number of MD steps\n" " - Na = number of atoms" msgstr "Wrong file format !\n" " Expecting only a single column file\n" " with Ns x Na lines, with:\n" " - Ns = number of MD steps\n" " - Na = number of atoms" # File: opengl/win/m_map.c, Line: 235 msgid "Range: [min-max] = %f - %f" msgstr "Range: [min-max] = %f - %f" # File: opengl/win/m_map.c, Line: 236 msgid "Use this data set ?" msgstr "Use this data set ?" # File: opengl/win/m_map.c, Line: 505 msgid "Edit color map" msgstr "Edit color map" # File: opengl/win/m_map.c, Line: 519 msgid "Number of color points for the gradient: " msgstr "Number of color points for the gradient: " # File: opengl/win/m_map.c, Line: 527 msgid "Initial value (overall max): " msgstr "Initial value (overall max): " # File: opengl/win/m_map.c, Line: 535 msgid "Final value (overall min): " msgstr "Final value (overall min): " # File: opengl/win/m_map.c, Line: 679 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_rings.c, Line: 413 msgid "MD step" msgstr "MD step" # File: opengl/win/m_map.c, Line: 679 msgid "Value" msgstr "Value" # File: opengl/win/m_map.c, Line: 738 msgid "Edit color map data" msgstr "Edit color map data" # File: opengl/win/m_map.c, Line: 804 msgid "Error while saving custom color map" msgstr "Error while saving custom color map" # File: opengl/win/m_map.c, Line: 887 msgid "Opening custom map for " msgstr "Opening custom map for " # File: opengl/win/m_map.c, Line: 887 msgid "Saving custom map for " msgstr "Saving custom map for " # File: opengl/win/m_map.c, Line: 894 msgid "Do you want to save the color map data" msgstr "Do you want to save the color map data" # File: opengl/win/m_map.c, Line: 895 msgid "Save color map data to file ?" msgstr "Save color map data to file ?" # File: opengl/win/m_map.c, Line: 903 msgid "Do you want to read new color map data" msgstr "Do you want to read new color map data" # File: opengl/win/m_map.c, Line: 904 msgid "Read color map data from file ?" msgstr "Read color map data from file ?" # File: opengl/win/m_map.c, Line: 933 msgid "Raw data (*.dat)" msgstr "Raw data (*.dat)" # File: opengl/win/m_map.c, Line: 982 msgid "Custom color map settings" msgstr "Custom color map settings" # File: opengl/win/m_map.c, Line: 985 msgid "Import / Save data" msgstr "Import / Save data" # File: opengl/win/m_map.c, Line: 985 msgid "Edit data" msgstr "Edit data" # File: opengl/win/m_map.c, Line: 985 msgid "Customize color map" msgstr "Customize color map" # File: opengl/win/m_map.c, Line: 1133 msgid "Atomic Coordination" msgstr "Atomic Coordination" # File: opengl/win/m_map.c, Line: 1137 # File: opengl/win/w_coord.c, Line: 91 # File: opengl/win/w_cutoffs.c, Line: 201 msgid "Total" msgstr "Total" # File: opengl/win/m_map.c, Line: 1138 # File: opengl/win/w_coord.c, Line: 92 msgid "Partial" msgstr "Partial" # File: opengl/win/m_map.c, Line: 1141,1256 msgid "Force Field (DL_POLY)" msgstr "Force Field (DL_POLY)" # File: opengl/win/m_map.c, Line: 1144,1259 # File: opengl/win/w_coord.c, Line: 1171 msgid "Custom" msgstr "Custom" # File: opengl/win/m_map.c, Line: 1148,1259 msgid "Use Atom(s) Custom Map" msgstr "Use Atom(s) Custom Map" # File: opengl/win/m_map.c, Line: 1164 msgid "Atoms & bonds" msgstr "Atoms & bonds" # File: opengl/win/m_map.c, Line: 1246 msgid "Atomic Coordinations" msgstr "Atomic Coordinations" # File: opengl/win/m_map.c, Line: 1275 msgid "Atoms & Bonds" msgstr "Atoms & Bonds" # File: opengl/win/m_poly.c, Line: 339,347,503 msgid "Cloned Polyhedra" msgstr "Cloned Polyhedra" # File: opengl/win/m_proj.c, Line: 145,192 # File: opengl/win/m_rep.c, Line: 486 msgid "Right [1, 0, 0]" msgstr "Right [1, 0, 0]" # File: opengl/win/m_proj.c, Line: 148,193 # File: opengl/win/m_rep.c, Line: 486 msgid "Left [-1, 0, 0]" msgstr "Left [-1, 0, 0]" # File: opengl/win/m_proj.c, Line: 151,194 # File: opengl/win/m_rep.c, Line: 486 msgid "Top [0, 1, 0]" msgstr "Top [0, 1, 0]" # File: opengl/win/m_proj.c, Line: 154,195 # File: opengl/win/m_rep.c, Line: 486 msgid "Bottom [0, -1, 0]" msgstr "Bottom [0, -1, 0]" # File: opengl/win/m_proj.c, Line: 157,196 # File: opengl/win/m_rep.c, Line: 486 msgid "Front [0, 0, 1]" msgstr "Front [0, 0, 1]" # File: opengl/win/m_proj.c, Line: 160,197 # File: opengl/win/m_rep.c, Line: 486 msgid "Back [0, 0, -1]" msgstr "Back [0, 0, -1]" # File: opengl/win/w_advance.c, Line: 1318 msgid "Filled" msgstr "Filled" # File: opengl/win/w_advance.c, Line: 1320 msgid "Points" msgstr "Points" # File: opengl/win/m_rep.c, Line: 76 msgid "Orthographic" msgstr "Orthographic" # File: opengl/win/m_rep.c, Line: 76 msgid "Perspective" msgstr "Perspective" # File: opengl/win/m_rep.c, Line: 427 msgid "Perspective depth" msgstr "Perspective depth" # File: opengl/win/m_rep.c, Line: 427 msgid "Camera depth" msgstr "Camera depth" # File: opengl/win/m_rep.c, Line: 429 msgid "Camera right/left" msgstr "Camera right/left" # File: opengl/win/m_rep.c, Line: 429 msgid "Camera up/down" msgstr "Camera up/down" # File: opengl/win/m_rep.c, Line: 469 msgid "%s - OpenGL scene set-up" msgstr "%s - OpenGL scene set-up" # File: opengl/win/m_rep.c, Line: 478 msgid "Projection" msgstr "Projection" # File: calc/cpmd/cpmd_atoms.c, Line: 448 # File: calc/cpmd/cpmd_nose.c, Line: 468 # File: curve/cedit.c, Line: 294 # File: opengl/win/m_rep.c, Line: 487 # File: opengl/win/popup.c, Line: 3693 msgid "Select" msgstr "Select" # File: opengl/win/m_rep.c, Line: 496 msgid "Representation" msgstr "Representation" # File: opengl/win/m_rep.c, Line: 513 msgid "OpenGL camera set-up" msgstr "OpenGL camera set-up" # File: opengl/win/m_rep.c, Line: 566 msgid "∈ [C. depth, %.1f]" msgstr "∈ [C. depth, %.1f]" # File: opengl/win/m_rep.c, Line: 570 msgid "∈ [%.1f, P. depth*]" msgstr "∈ [%.1f, P. depth*]" # File: opengl/win/m_rep.c, Line: 570 msgid "∈ [%.1f, P. depth]" msgstr "∈ [%.1f, P. depth]" # File: opengl/win/m_rep.c, Line: 587 msgid "Perspective depth evaluated from the model" msgstr "Perspective depth evaluated from the model" # File: opengl/win/m_style.c, Line: 64 msgid "Dots" msgstr "Dots" # File: opengl/win/m_tools.c, Line: 71 msgid "Classical: DL-POLY" msgstr "Classical: DL-POLY" # File: opengl/win/m_tools.c, Line: 72 msgid "Classical: LAMMPS" msgstr "Classical: LAMMPS" # File: opengl/win/m_tools.c, Line: 73 msgid "First-Principles: CPMD" msgstr "First-Principles: CPMD" # File: opengl/win/m_tools.c, Line: 74 msgid "First-Principles: CP2K" msgstr "First-Principles: CP2K" # File: opengl/win/m_tools.c, Line: 75 msgid "QM-MM: CPMD - [Soon]" msgstr "QM-MM: CPMD - [Soon]" # File: opengl/win/m_tools.c, Line: 76 msgid "QM-MM: CP2K - [Soon]" msgstr "QM-MM: CP2K - [Soon]" # File: opengl/win/m_tools.c, Line: 78 msgid "Input(s)" msgstr "Input(s)" # File: opengl/win/m_tools.c, Line: 80 msgid "Atom/Bond" msgstr "Atom/Bond" # File: opengl/win/m_tools.c, Line: 81 msgid "Coordination Sphere" msgstr "Coordination Sphere" # File: opengl/win/m_tools.c, Line: 84 msgid "Single Fragment" msgstr "Single Fragment" # File: opengl/win/m_tools.c, Line: 85 msgid "Single Molecule" msgstr "Single Molecule" # File: opengl/win/m_tools.c, Line: 86 msgid "Measures (Edition Mode Only)" msgstr "Measures (Edition Mode Only)" # File: opengl/win/m_tools.c, Line: 88 # File: opengl/win/w_search.c, Line: 4206 msgid "Selection" msgstr "Selection" # File: opengl/win/m_tools.c, Line: 88 msgid "Visible/Hidden" msgstr "Visible/Hidden" # File: opengl/win/m_tools.c, Line: 317,502 msgid "Volumes" msgstr "Volumes" # File: opengl/win/m_tools.c, Line: 322,682 msgid "Mouse Mode" msgstr "Mouse Mode" # File: opengl/win/m_tools.c, Line: 369,683 msgid "Selection Mode" msgstr "Selection Mode" # File: opengl/win/m_tools.c, Line: 412,785 # File: calc/cp2k/cp2k_init.c, Line: 119 msgid "Molecular Dynamics" msgstr "Molecular Dynamics" # File: opengl/win/m_tools.c, Line: 443,786 msgid "Invert" msgstr "Invert" # File: opengl/win/popup.c, Line: 438,3025,3186 # File: opengl/win/w_search.c, Line: 2416,2669 msgid "%s in %s" msgstr "%s in %s" # File: opengl/win/popup.c, Line: 504,740,3041,3194 msgid "Copied Data" msgstr "Copied Data" # File: opengl/win/popup.c, Line: 617 msgid "No atoms to be removed !" msgstr "No atoms to be removed !" # File: opengl/win/popup.c, Line: 621 msgid "%d atom(s) removed !" msgstr "%d atom(s) removed !" # File: opengl/win/popup.c, Line: 681 msgid "%d atom(s) inserted !" msgstr "%d atom(s) inserted !" # File: opengl/win/popup.c, Line: 3037,3168 # File: opengl/win/w_search.c, Line: 2658 msgid "Import From Project" msgstr "Import From Project" # File: opengl/win/popup.c, Line: 3314 msgid "All Non-Selected Atom(s)/Bond(s)" msgstr "All Non-Selected Atom(s)/Bond(s)" # File: opengl/win/popup.c, Line: 3314 msgid "All Selected Atom(s)/Bond(s)" msgstr "All Selected Atom(s)/Bond(s)" # File: opengl/win/popup.c, Line: 3315 msgid "All Non-Labelled Atom(s)/Bond(s)" msgstr "All Non-Labelled Atom(s)/Bond(s)" # File: opengl/win/popup.c, Line: 3315 msgid "All Labelled Atom(s)/Bond(s)" msgstr "All Labelled Atom(s)/Bond(s)" # File: opengl/win/popup.c, Line: 3372 msgid "This Atom: %s%d" msgstr "This Atom: %s%d" # File: opengl/win/popup.c, Line: 3407 msgid "This Bond: %s%d - %s%d" msgstr "This Bond: %s%d - %s%d" # File: opengl/win/popup.c, Line: 3500,3789,3852 msgid "Fragment N°:\t%d" msgstr "Fragment N°:\t%d" # File: opengl/win/popup.c, Line: 3500,3789,3852 msgid "Molecule N°:\t%d" msgstr "Molecule N°:\t%d" # File: opengl/win/popup.c, Line: 3515 msgid "All %s Atoms %d Fold" msgstr "All %s Atoms %d Fold" # File: opengl/win/popup.c, Line: 3526 msgid "All %s Coordinations" msgstr "All %s Coordinations" # File: opengl/win/popup.c, Line: 3536 msgid "All %s Atoms" msgstr "All %s Atoms" # File: opengl/win/popup.c, Line: 3540 msgid "All %s* Clones" msgstr "All %s* Clones" # File: opengl/win/popup.c, Line: 3555 msgid "All %s %d - %s %d Bonds" msgstr "All %s %d - %s %d Bonds" # File: opengl/win/popup.c, Line: 3569 msgid "All %s - %s Bonds" msgstr "All %s - %s Bonds" # File: opengl/win/popup.c, Line: 3577 msgid "All %s - %s Bonds" msgstr "All %s - %s Bonds" # File: opengl/win/popup.c, Line: 3587 msgid "All Hidden Atom(s)/Bond(s)" msgstr "All Hidden Atom(s)/Bond(s)" # File: opengl/win/popup.c, Line: 3587 msgid "All Visible Atom(s)/Bond(s)" msgstr "All Visible Atom(s)/Bond(s)" # File: opengl/win/popup.c, Line: 3694 msgid "Unselect" msgstr "Unselect" # File: opengl/win/popup.c, Line: 3695 # File: opengl/win/w_atoms.c, Line: 363 # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 537,892,997 # File: opengl/win/w_rings.c, Line: 413 # File: opengl/win/w_search.c, Line: 3577 msgid "Label" msgstr "Label" # File: opengl/win/popup.c, Line: 3696 msgid "Unlabel" msgstr "Unlabel" # File: opengl/win/popup.c, Line: 3698 msgid "Hide" msgstr "Hide" # File: opengl/win/popup.c, Line: 3701 msgid "Edit as New Project" msgstr "Edit as New Project" # File: opengl/win/popup.c, Line: 3704 msgid "Copy" msgstr "Copy" # File: opengl/win/popup.c, Line: 3830 msgid "Total Coordination: %d" msgstr "Total Coordination: %d" # File: opengl/win/popup.c, Line: 3839 msgid "Partial Coordination: %s" msgstr "Partial Coordination: %s" # File: opengl/win/popup.c, Line: 4023 msgid "Center crystal atom(s)" msgstr "Center crystal atom(s)" # File: opengl/win/popup.c, Line: 4023 msgid "Are you sure, this can affect the visual representation of the unit cell ?" msgstr "Are you sure, this can affect the visual representation of the unit cell ?" # File: opengl/win/popup.c, Line: 4094 msgid "Color palette error: %s - %d - custom= %s" msgstr "Color palette error: %s - %d - custom= %s" # File: opengl/win/popup.c, Line: 4126 msgid "Color palette error: %s - spec= %d - coord= %d, custom= %s" msgstr "Color palette error: %s - spec= %d - coord= %d, custom= %s" # File: opengl/win/popup.c, Line: 4143 msgid "Color palette error: %s - %d, custom= %s" msgstr "Color palette error: %s - %d, custom= %s" # File: calc/dl_poly/dlp_field.c, Line: 187 # File: opengl/win/w_coord.c, Line: 959 # File: opengl/win/w_search.c, Line: 999 # File: opengl/win/w_volumes.c, Line: 706,870 msgid "molecule" msgstr "molecule" # File: opengl/win/popup.c, Line: 4156 msgid "Color palette error: rings - %d - %d, custom= %s" msgstr "Color palette error: rings - %d - %d, custom= %s" # File: opengl/win/popup.c, Line: 4203,4266 msgid "Reset Motion" msgstr "Reset Motion" # File: opengl/win/popup.c, Line: 4278 msgid "Exit Fullscreen" msgstr "Exit Fullscreen" # File: opengl/win/w_advance.c, Line: 1391 msgid "Opaque" msgstr "Opaque" # File: opengl/win/w_advance.c, Line: 1392 msgid "Brushed Metal" msgstr "Brushed Metal" # File: opengl/win/w_advance.c, Line: 1393 msgid "Shiny Metal" msgstr "Shiny Metal" # File: opengl/win/w_advance.c, Line: 1394 msgid "Plastic" msgstr "Plastic" # File: curve/tab-2.c, Line: 1007 # File: opengl/win/w_advance.c, Line: 1395 msgid "Transparent" msgstr "Transparent" # File: opengl/win/w_advance.c, Line: 1396 msgid "Translucent" msgstr "Translucent" # File: opengl/win/w_advance.c, Line: 1397 msgid "Diffuse" msgstr "Diffuse" # File: opengl/win/w_advance.c, Line: 117 msgid "Ambient occlusion" msgstr "Ambient occlusion" # File: opengl/win/w_advance.c, Line: 118 msgid "Gamma correction" msgstr "Gamma correction" # File: opengl/win/w_advance.c, Line: 123 msgid "Constant attenuation" msgstr "Constant attenuation" # File: opengl/win/w_advance.c, Line: 124 msgid "Linear attenuation" msgstr "Linear attenuation" # File: opengl/win/w_advance.c, Line: 125 msgid "Quadratic attenuation" msgstr "Quadratic attenuation" # File: opengl/win/w_advance.c, Line: 126 msgid "Cone angle" msgstr "Cone angle" # File: opengl/win/w_advance.c, Line: 127 msgid "Inner cutoff" msgstr "Inner cutoff" # File: opengl/win/w_advance.c, Line: 128 msgid "Outer cutoff" msgstr "Outer cutoff" # File: opengl/win/w_advance.c, Line: 130 msgid "Fog color" msgstr "Fog color" # File: opengl/win/w_advance.c, Line: 244 msgid "You must select %d light source(s) to be removed !" msgstr "You must select %d light source(s) to be removed !" # File: opengl/win/w_advance.c, Line: 266 msgid "Please select the %d light sources to be removed: " msgstr "Please select the %d light sources to be removed: " # File: opengl/win/w_advance.c, Line: 270 msgid "Please select the light source to be removed: " msgstr "Please select the light source to be removed: " # File: opengl/win/w_advance.c, Line: 272 msgid "Remove light source(s)" msgstr "Remove light source(s)" # File: opengl/win/w_advance.c, Line: 280,520 msgid "Light N°%d" msgstr "Light N°%d" # File: opengl/win/w_advance.c, Line: 882 msgid "Show light" msgstr "Show light" # File: opengl/win/w_advance.c, Line: 905 msgid "Number of light sources\n(add or remove lights - up to 10 sources)" msgstr "Number of light sources\n(add or remove lights - up to 10 sources)" # File: opengl/win/w_advance.c, Line: 914 msgid "Configure light source *" msgstr "Configure light source *" # File: opengl/win/w_advance.c, Line: 919 msgid "Light configuration" msgstr "Light configuration" # File: opengl/win/w_advance.c, Line: 923 msgid "Directional" msgstr "Directional" # File: opengl/win/w_advance.c, Line: 924 msgid "Point" msgstr "Point" # File: opengl/win/w_advance.c, Line: 925 msgid "Spot" msgstr "Spot" # File: opengl/win/w_advance.c, Line: 929 msgid "Fixed by respect to: " msgstr "Fixed by respect to: " # File: opengl/win/w_advance.c, Line: 931 msgid "The viewer" msgstr "The viewer" # File: opengl/win/w_advance.c, Line: 932 msgid "The model" msgstr "The model" # File: opengl/win/w_advance.c, Line: 955 msgid "Advanced parameters" msgstr "Advanced parameters" # File: opengl/win/w_advance.c, Line: 980 msgid "Note that light N°1 must be a directional light" msgstr "Note that light N°1 must be a directional light" # File: opengl/win/w_advance.c, Line: 983 msgid "Position and attenuation will be corrected based on model depth" msgstr "Position and attenuation will be corrected based on model depth" # File: opengl/win/w_advance.c, Line: 1303 msgid "3D Objects" msgstr "3D Objects" # File: opengl/win/w_advance.c, Line: 1384 msgid "Use template" msgstr "Use template" # File: opengl/win/w_advance.c, Line: 1388 msgid "Templates" msgstr "Templates" # File: opengl/win/w_advance.c, Line: 1417 msgid "Material properties" msgstr "Material properties" # File: opengl/win/w_advance.c, Line: 1633 msgid "Fog mode " msgstr "Fog mode " # File: curve/tab-4.c, Line: 718 # File: opengl/win/w_advance.c, Line: 1636 # File: opengl/win/w_colors.c, Line: 489 msgid "Linear" msgstr "Linear" # File: opengl/win/w_advance.c, Line: 1638 msgid "Exponential" msgstr "Exponential" # File: opengl/win/w_advance.c, Line: 1638 msgid "Exponential Squared" msgstr "Exponential Squared" # File: opengl/win/w_advance.c, Line: 1647 msgid "Fog type " msgstr "Fog type " # File: opengl/win/w_advance.c, Line: 1649 msgid "Plane Based" msgstr "Plane Based" # File: opengl/win/w_advance.c, Line: 1650 msgid "Range Based" msgstr "Range Based" # File: opengl/win/w_advance.c, Line: 1657 msgid "Fog density" msgstr "Fog density" # File: opengl/win/w_advance.c, Line: 1662 msgid "\t depth* start: " msgstr "\t depth* start: " # File: opengl/win/w_advance.c, Line: 1662 msgid "\t depth* end: " msgstr "\t depth* end: " # File: opengl/win/w_advance.c, Line: 1666 msgid "Fog depth" msgstr "Fog depth" # File: opengl/win/w_advance.c, Line: 1675 msgid "* % of the OpenGL model depth." msgstr "* % of the OpenGL model depth." # File: opengl/win/w_advance.c, Line: 1746 # File: workspace/workspace.c, Line: 392 msgid "OpenGL material aspect and light settings - %s" msgstr "OpenGL material aspect and light settings - %s" # File: opengl/win/w_advance.c, Line: 1767 msgid "Material aspect" msgstr "Material aspect" # File: opengl/win/w_advance.c, Line: 1769 msgid "Configure light sources" msgstr "Configure light sources" # File: opengl/win/w_advance.c, Line: 1771 msgid "Configure fog" msgstr "Configure fog" # File: opengl/win/w_atoms.c, Line: 196 msgid "Adjust atom sphere radius" msgstr "Adjust atom sphere radius" # File: opengl/win/w_atoms.c, Line: 196 msgid "Adjust clone sphere radius" msgstr "Adjust clone sphere radius" # File: opengl/win/w_atoms.c, Line: 197 msgid "Adjust atom point size" msgstr "Adjust atom point size" # File: opengl/win/w_atoms.c, Line: 197 msgid "Adjust clone point size" msgstr "Adjust clone point size" # File: opengl/win/w_atoms.c, Line: 361 msgid "Radius [Å]" msgstr "Radius [Å]" # File: opengl/win/w_atoms.c, Line: 364 msgid "Size [pts]" msgstr "Size [pts]" # File: opengl/win/w_atoms.c, Line: 408 msgid "%s atom(s) color" msgstr "%s atom(s) color" # File: opengl/win/w_atoms.c, Line: 412 msgid "%s clone(s) color" msgstr "%s clone(s) color" # File: opengl/win/w_atoms.c, Line: 512 msgid "Display properties" msgstr "Display properties" # File: opengl/win/w_atoms.c, Line: 513 msgid "Label properties" msgstr "Label properties" # File: opengl/win/w_atoms.c, Line: 521 msgid "Clone(s) selection" msgstr "Clone(s) selection" # File: opengl/win/w_atoms.c, Line: 521 msgid "Atom(s) selection" msgstr "Atom(s) selection" # File: opengl/win/w_atoms.c, Line: 536 msgid "Atom(s) configuration - " msgstr "Atom(s) configuration - " # File: opengl/win/w_atoms.c, Line: 536 msgid "Clone(s) configuration - " msgstr "Clone(s) configuration - " # File: opengl/win/w_atoms.c, Line: 599 msgid "atoms" msgstr "atoms" # File: opengl/win/w_atoms.c, Line: 599 msgid "clones" msgstr "clones" # File: opengl/win/w_atoms.c, Line: 599 msgid "Error impossible to display the model window for %s !" msgstr "Error impossible to display the model window for %s !" # File: opengl/win/w_axis.c, Line: 907 msgid "% of the window width" msgstr "% of the window width" # File: opengl/win/w_axis.c, Line: 907 msgid "% of the window height" msgstr "% of the window height" # File: opengl/win/w_axis.c, Line: 907 msgid "% of the window depth" msgstr "% of the window depth" # File: opengl/win/w_axis.c, Line: 186 msgid "_Radius [ %f Å ]" msgstr "_Radius [ %f Å ]" # File: opengl/win/w_axis.c, Line: 843 msgid "Axis settings" msgstr "Axis settings" # File: opengl/win/w_axis.c, Line: 851 # File: workspace/workspace.c, Line: 417 msgid "%s - axis settings" msgstr "%s - axis settings" # File: opengl/win/w_axis.c, Line: 866 msgid "Show/Hide axis" msgstr "Show/Hide axis" # File: opengl/win/w_axis.c, Line: 883 msgid "Top Right Corner *" msgstr "Top Right Corner *" # File: opengl/win/w_axis.c, Line: 884 msgid "Top Left Corner *" msgstr "Top Left Corner *" # File: opengl/win/w_axis.c, Line: 885 msgid "Bottom Right Corner *" msgstr "Bottom Right Corner *" # File: opengl/win/w_axis.c, Line: 886 msgid "Bottom Left Corner *" msgstr "Bottom Left Corner *" # File: opengl/win/w_axis.c, Line: 887 msgid "Center **" msgstr "Center **" # File: opengl/win/w_axis.c, Line: 888 msgid "Use template positions" msgstr "Use template positions" # File: opengl/win/w_axis.c, Line: 904 msgid "Please choose axis position:" msgstr "Please choose axis position:" # File: opengl/win/w_axis.c, Line: 928 msgid "Length [Å] " msgstr "Length [Å] " # File: opengl/win/w_axis.c, Line: 933 # File: opengl/win/w_box.c, Line: 398 msgid "Style " msgstr "Style " # File: opengl/win/w_axis.c, Line: 945 # File: opengl/win/w_box.c, Line: 409 msgid "Line width [pts] " msgstr "Line width [pts] " # File: opengl/win/w_axis.c, Line: 949 # File: opengl/win/w_box.c, Line: 413 msgid "Cylinder radius [Å] " msgstr "Cylinder radius [Å] " # File: opengl/win/w_axis.c, Line: 957 msgid "Label axis" msgstr "Label axis" # File: opengl/win/w_axis.c, Line: 961 # File: opengl/win/w_labels.c, Line: 698 msgid "Rendering " msgstr "Rendering " # File: opengl/win/w_axis.c, Line: 963 # File: opengl/win/w_labels.c, Line: 700 msgid "Basic Text" msgstr "Basic Text" # File: opengl/win/w_axis.c, Line: 964 # File: opengl/win/w_labels.c, Line: 701 msgid "Highlighted" msgstr "Highlighted" # File: opengl/win/w_axis.c, Line: 976 # File: opengl/win/w_labels.c, Line: 728 msgid "Scale with zoom in/out" msgstr "Scale with zoom in/out" # File: opengl/win/w_axis.c, Line: 983 msgid "Legends" msgstr "Legends" # File: opengl/win/w_axis.c, Line: 1001 msgid "Use base colors" msgstr "Use base colors" # File: opengl/win/w_axis.c, Line: 1032 msgid "In front of the atomic model" msgstr "In front of the atomic model" # File: opengl/win/w_axis.c, Line: 1033 msgid "Inside the atomic model" msgstr "Inside the atomic model" # File: opengl/win/w_bonds.c, Line: 79 msgid "Axis length [ %f Å ]" msgstr "Axis length [ %f Å ]" # File: opengl/win/w_bonds.c, Line: 360 msgid "Adjust atomic bond radius(ii)" msgstr "Adjust atomic bond radius(ii)" # File: opengl/win/w_bonds.c, Line: 360 msgid "Adjust clone bond radius(ii)" msgstr "Adjust clone bond radius(ii)" # File: opengl/win/w_bonds.c, Line: 361 msgid "Adjust atomic line width(s)" msgstr "Adjust atomic line width(s)" # File: opengl/win/w_bonds.c, Line: 361 msgid "Adjust clone line width(s)" msgstr "Adjust clone line width(s)" # File: opengl/win/w_bonds.c, Line: 410 msgid "bond" msgstr "bond" # File: opengl/win/w_bonds.c, Line: 410 msgid "clone bond" msgstr "clone bond" # File: calc/dl_poly/dlp_field.c, Line: 932 # File: opengl/win/w_bonds.c, Line: 411 msgid "Bond" msgstr "Bond" # File: opengl/win/w_bonds.c, Line: 411 msgid "Clone bond" msgstr "Clone bond" # File: opengl/win/w_bonds.c, Line: 417 msgid "Adjust axis length" msgstr "Adjust axis length" # File: opengl/win/w_bonds.c, Line: 421 msgid "Adjust %s line width" msgstr "Adjust %s line width" # File: opengl/win/w_bonds.c, Line: 425,429 msgid "Adjust %s cylinders radius" msgstr "Adjust %s cylinders radius" # File: opengl/win/w_bonds.c, Line: 442 msgid "Axis length" msgstr "Axis length" # File: opengl/win/w_bonds.c, Line: 445 msgid "%s line width" msgstr "%s line width" # File: opengl/win/w_bonds.c, Line: 448,451 msgid "%s cylinders radius" msgstr "%s cylinders radius" # File: opengl/win/w_bonds.c, Line: 478 msgid " [pts]" msgstr " [pts]" # File: opengl/win/w_box.c, Line: 367 msgid "Box settings" msgstr "Box settings" # File: opengl/win/w_box.c, Line: 374 # File: workspace/workspace.c, Line: 413 msgid "%s - box settings" msgstr "%s - box settings" # File: opengl/win/w_box.c, Line: 389 msgid "Show/Hide box" msgstr "Show/Hide box" # File: opengl/win/w_box.c, Line: 419 msgid "Color " msgstr "Color " # File: opengl/win/w_chains.c, Line: 825 msgid "Too many chains in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for chain(s) individually:\n" msgstr "Too many chains in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for chain(s) individually:\n" # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 540 msgid "Chain(s) size" msgstr "Chain(s) size" # File: opengl/win/w_chains.c, Line: 298 # File: opengl/win/w_coord.c, Line: 537,892,997 # File: opengl/win/w_rings.c, Line: 413 # File: opengl/win/w_search.c, Line: 3577 msgid "Pick" msgstr "Pick" # File: opengl/win/w_chains.c, Line: 828 # File: opengl/win/w_rings.c, Line: 954 msgid "MD step:" msgstr "MD step:" # File: opengl/win/w_chains.c, Line: 828 msgid "Chain size:" msgstr "Chain size:" # File: opengl/win/w_chains.c, Line: 828 msgid "Chain Id.:" msgstr "Chain Id.:" # File: opengl/win/w_chains.c, Line: 860 # File: opengl/win/w_coord.c, Line: 978 # File: opengl/win/w_rings.c, Line: 986 msgid "Search result(s)" msgstr "Search result(s)" # File: opengl/win/w_chains.c, Line: 906 msgid "# This file contains the list of all chains in the %s model\n\n" msgstr "# This file contains the list of all chains in the %s model\n\n" # File: opengl/win/w_chains.c, Line: 911 # File: opengl/win/w_rings.c, Line: 1045 msgid "Step N°%d\n" msgstr "Step N°%d\n" # File: opengl/win/w_chains.c, Line: 915 msgid "\n\tChain(s) of size %d atoms\n" msgstr "\n\tChain(s) of size %d atoms\n" # File: opengl/win/w_chains.c, Line: 915 msgid "\nChain(s) of size %d atoms\n" msgstr "\nChain(s) of size %d atoms\n" # File: opengl/win/w_chains.c, Line: 930 # File: opengl/win/w_rings.c, Line: 1064 msgid "Impossible to open file: %s" msgstr "Impossible to open file: %s" # File: opengl/win/w_chains.c, Line: 959 msgid "Save atoms in chains to file" msgstr "Save atoms in chains to file" # File: opengl/win/w_chains.c, Line: 1013 # File: opengl/win/w_rings.c, Line: 1153 msgid "Save to file" msgstr "Save to file" # File: opengl/win/w_colors.c, Line: 175,520 msgid "Background color" msgstr "Background color" # File: opengl/win/w_colors.c, Line: 180 msgid "Model box color" msgstr "Model box color" # File: opengl/win/w_colors.c, Line: 187 msgid "%s - atom(s) color" msgstr "%s - atom(s) color" # File: opengl/win/w_colors.c, Line: 191 msgid "%s* - clone(s) color" msgstr "%s* - clone(s) color" # File: opengl/win/w_colors.c, Line: 469 msgid "Background settings" msgstr "Background settings" # File: opengl/win/w_colors.c, Line: 476 # File: workspace/workspace.c, Line: 409 msgid "%s - background settings" msgstr "%s - background settings" # File: opengl/win/w_colors.c, Line: 486 msgid "Gradient type" msgstr "Gradient type" # File: opengl/win/w_colors.c, Line: 499 msgid "Gradient direction" msgstr "Gradient direction" # File: opengl/win/w_colors.c, Line: 488 msgid "No Gradient" msgstr "No Gradient" # File: opengl/win/w_colors.c, Line: 490 msgid "Circular" msgstr "Circular" # File: opengl/win/w_colors.c, Line: 483 msgid "Top to Bottom" msgstr "Top to Bottom" # File: opengl/win/w_colors.c, Line: 483 msgid "Right to Left" msgstr "Right to Left" # File: opengl/win/w_colors.c, Line: 484 msgid "Bottom Right to Top Left" msgstr "Bottom Right to Top Left" # File: opengl/win/w_colors.c, Line: 484 msgid "Top Right to Bottom Left" msgstr "Top Right to Bottom Left" # File: opengl/win/w_colors.c, Line: 483 msgid "Left to Right" msgstr "Left to Right" # File: opengl/win/w_colors.c, Line: 483 msgid "Bottom to Top" msgstr "Bottom to Top" # File: opengl/win/w_colors.c, Line: 484 msgid "Bottom Left to Top Right" msgstr "Bottom Left to Top Right" # File: opengl/win/w_colors.c, Line: 484 msgid "Top Left to Bottom Right" msgstr "Top Left to Bottom Right" # File: opengl/win/w_colors.c, Line: 527 msgid "Single color" msgstr "Single color" # File: opengl/win/w_colors.c, Line: 538 msgid "First color" msgstr "First color" # File: opengl/win/w_colors.c, Line: 538 msgid "Second color" msgstr "Second color" # File: opengl/win/w_colors.c, Line: 687 msgid "%s atom(s) %d fold coordination sphere color" msgstr "%s atom(s) %d fold coordination sphere color" # File: opengl/win/w_colors.c, Line: 692 msgid "%s - %s coordination sphere color" msgstr "%s - %s coordination sphere color" # File: opengl/win/w_colors.c, Line: 697 msgid "Fragment N°%d color" msgstr "Fragment N°%d color" # File: opengl/win/w_colors.c, Line: 702 msgid "Molecule N°%d color" msgstr "Molecule N°%d color" # File: opengl/win/w_colors.c, Line: 707 msgid "%d atom chain(s) color" msgstr "%d atom chain(s) color" # File: opengl/win/w_colors.c, Line: 711 msgid "%s - %d atom ring(s) color" msgstr "%s - %d atom ring(s) color" # File: opengl/win/w_coord.c, Line: 962 # File: opengl/win/w_volumes.c, Line: 873 msgid "Too many %ss in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for %s(s) individually:\n" msgstr "Too many %ss in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for %s(s) individually:\n" # File: opengl/win/w_coord.c, Line: 537 msgid "Alpha" msgstr "Alpha" # File: opengl/win/w_coord.c, Line: 538 msgid "Color *" msgstr "Color *" # File: opengl/win/w_coord.c, Line: 538 msgid "Show **" msgstr "Show **" # File: opengl/win/w_coord.c, Line: 538 msgid "Label **" msgstr "Label **" # File: opengl/win/w_coord.c, Line: 538 msgid "Pick **" msgstr "Pick **" # File: opengl/win/w_coord.c, Line: 539 # File: opengl/win/w_rings.c, Line: 413 msgid "Ring(s) size" msgstr "Ring(s) size" # File: opengl/win/w_coord.c, Line: 540 msgid "Show *" msgstr "Show *" # File: opengl/win/w_coord.c, Line: 540 msgid "Label *" msgstr "Label *" # File: opengl/win/w_coord.c, Line: 540 msgid "Pick *" msgstr "Pick *" # File: opengl/win/w_coord.c, Line: 553 msgid " * for the polyhedra only" msgstr " * for the polyhedra only" # File: opengl/win/w_coord.c, Line: 554 msgid "** affect all atoms that belong to ring(s) of this size" msgstr "** affect all atoms that belong to ring(s) of this size" # File: opengl/win/w_coord.c, Line: 558 msgid "* affect all atoms that belong to chain(s) of this size" msgstr "* affect all atoms that belong to chain(s) of this size" # File: opengl/win/w_coord.c, Line: 636 msgid "%d atoms" msgstr "%d atoms" # File: opengl/win/w_coord.c, Line: 851 msgid "%s N°%d color" msgstr "%s N°%d color" # File: opengl/win/w_coord.c, Line: 965 # File: opengl/win/w_volumes.c, Line: 876 msgid "Fragment Id.:" msgstr "Fragment Id.:" # File: opengl/win/w_coord.c, Line: 965 # File: opengl/win/w_volumes.c, Line: 876 msgid "Molecule Id.:" msgstr "Molecule Id.:" # File: opengl/win/w_coord.c, Line: 1148 msgid "Atom(s) and bond(s) color map:" msgstr "Atom(s) and bond(s) color map:" # File: opengl/win/w_coord.c, Line: 1159,1205 msgid "%s coordination(s)" msgstr "%s coordination(s)" # File: opengl/win/w_coord.c, Line: 1165,1213 msgid "Force field (DL_POLY)" msgstr "Force field (DL_POLY)" # File: opengl/win/w_coord.c, Line: 1196 msgid "Polyhedra color map:" msgstr "Polyhedra color map:" # File: opengl/win/w_coord.c, Line: 1217 msgid "Use atom(s) custom map" msgstr "Use atom(s) custom map" # File: opengl/win/w_coord.c, Line: 1235 msgid "\nDisplay polyhedra at the edges of the model box\n" "using the PBC even if the clones are not shown:" msgstr "\nDisplay polyhedra at the edges of the model box\n" "using the PBC even if the clones are not shown:" # File: opengl/win/w_coord.c, Line: 1236 msgid "Cloned polyhedra" msgstr "Cloned polyhedra" # File: opengl/win/w_coord.c, Line: 1243 msgid "This is automatic if the clones are shown.\n" "The clones are the replica of the atoms linked by PBC." msgstr "This is automatic if the clones are shown.\n" "The clones are the replica of the atoms linked by PBC." # File: opengl/win/w_coord.c, Line: 1300 # File: workspace/workspace.c, Line: 380 msgid "Environments configuration - %s" msgstr "Environments configuration - %s" # File: opengl/win/w_coord.c, Line: 1313 msgid "Parameters" msgstr "Parameters" # File: opengl/win/w_coord.c, Line: 1314 msgid "Total coordination(s) [TC]" msgstr "Total coordination(s) [TC]" # File: opengl/win/w_coord.c, Line: 1315 msgid "Partial coordination(s) [PC]" msgstr "Partial coordination(s) [PC]" # File: opengl/win/w_coord.c, Line: 1324 msgid "%s ring(s) [%s]" msgstr "%s ring(s) [%s]" # File: opengl/win/w_coord.c, Line: 1324 msgid "All ring(s) (no rule) [%s]" msgstr "All ring(s) (no rule) [%s]" # File: opengl/win/w_coord.c, Line: 1334 msgid "Polyhedra from TC" msgstr "Polyhedra from TC" # File: opengl/win/w_coord.c, Line: 1335 msgid "Polyhedra from PC" msgstr "Polyhedra from PC" # File: opengl/win/w_coord.c, Line: 1342 msgid "Polyhedra from %s" msgstr "Polyhedra from %s" # File: opengl/win/w_coord.c, Line: 1364 msgid "Isolated ring(s) from %s" msgstr "Isolated ring(s) from %s" # File: opengl/win/w_coord.c, Line: 1373 msgid "Isolated chain(s)" msgstr "Isolated chain(s)" # File: opengl/win/w_coord.c, Line: 1474 msgid "Error impossible to display the environments window !" msgstr "Error impossible to display the environments window !" # File: calc/dl_poly/dlp_control.c, Line: 167 # File: opengl/win/w_crystal.c, Line: 75 msgid "Orthorhombic" msgstr "Orthorhombic" # File: opengl/win/w_crystal.c, Line: 75 msgid " Cubic" msgstr " Cubic" # File: opengl/win/w_crystal.c, Line: 75 msgid "Other" msgstr "Other" # File: opengl/win/w_crystal.c, Line: 450 # File: opengl/win/w_library.c, Line: 865 msgid "Formula:" msgstr "Formula:" # File: opengl/win/w_crystal.c, Line: 470 msgid "Density:" msgstr "Density:" # File: opengl/win/w_crystal.c, Line: 475 msgid "Name:" msgstr "Name:" # File: opengl/win/w_crystal.c, Line: 791 msgid "Database" msgstr "Database" # File: opengl/win/w_crystal.c, Line: 795 msgid "Group" msgstr "Group" # File: opengl/win/w_crystal.c, Line: 797 msgid "Crystal" msgstr "Crystal" # File: opengl/win/w_cutoffs.c, Line: 210 msgid "Cutoff(s) must be ≥ 0.5 Å" msgstr "Cutoff(s) must be ≥ 0.5 Å" # File: opengl/win/w_cutoffs.c, Line: 278 msgid "Adjust cutoff radius(ii) - %s" msgstr "Adjust cutoff radius(ii) - %s" # File: opengl/win/w_encode.c, Line: 455 msgid "%s - movie encoding" msgstr "%s - movie encoding" # File: opengl/win/w_encode.c, Line: 459 msgid "%s - image rendering" msgstr "%s - image rendering" # File: opengl/win/w_encode.c, Line: 472 msgid "Frames recorded:" msgstr "Frames recorded:" # File: opengl/win/w_encode.c, Line: 481 msgid "Frames per seconds:" msgstr "Frames per seconds:" # File: opengl/win/w_encode.c, Line: 491 msgid "Extra frames every (frames):" msgstr "Extra frames every (frames):" # File: opengl/win/w_encode.c, Line: 496 msgid "Movie resolution (in pixels):" msgstr "Movie resolution (in pixels):" # File: opengl/win/w_encode.c, Line: 501 msgid "Image resolution (in pixels):" msgstr "Image resolution (in pixels):" # File: opengl/win/w_encode.c, Line: 523 msgid "Video codec:" msgstr "Video codec:" # File: opengl/win/w_encode.c, Line: 530 msgid "Image format:" msgstr "Image format:" # File: opengl/win/w_encode.c, Line: 550 msgid "Video quality (bitrate in kb/s):" msgstr "Video quality (bitrate in kb/s):" # File: opengl/win/w_encode.c, Line: 564 msgid "OpenGL quality [0-1000] (0= recorded quality):" msgstr "OpenGL quality [0-1000] (0= recorded quality):" # File: opengl/win/w_encode.c, Line: 568 msgid "OpenGL quality [0-1000] (0= on-screen quality):" msgstr "OpenGL quality [0-1000] (0= on-screen quality):" # File: opengl/win/w_encode.c, Line: 575 msgid "Progress: " msgstr "Progress: " # File: opengl/win/w_labels.c, Line: 73 msgid "Element Name" msgstr "Element Name" # File: opengl/win/w_labels.c, Line: 73 msgid "Atomic Symbol" msgstr "Atomic Symbol" # File: opengl/win/w_labels.c, Line: 73 msgid "Atomic Symbol + Id. Number" msgstr "Atomic Symbol + Id. Number" # File: opengl/win/w_labels.c, Line: 73 msgid "Sym. + Id. Num. Subscript" msgstr "Sym. + Id. Num. Subscript" # File: opengl/win/w_labels.c, Line: 73 msgid "Id. Number" msgstr "Id. Number" # File: opengl/win/w_labels.c, Line: 682 msgid "Templates " msgstr "Templates " # File: opengl/win/w_labels.c, Line: 695 msgid "Label(s):" msgstr "Label(s):" # File: opengl/win/w_labels.c, Line: 718 msgid "Always Visible" msgstr "Always Visible" # File: curve/tab-4.c, Line: 769,800 # File: opengl/win/w_labels.c, Line: 719 msgid "Normal" msgstr "Normal" # File: opengl/win/w_labels.c, Line: 734 msgid "Tilt" msgstr "Tilt" # File: opengl/win/w_labels.c, Line: 737 msgid "Adapted" msgstr "Adapted" # File: opengl/win/w_labels.c, Line: 747 msgid "Distance to atom [Å]" msgstr "Distance to atom [Å]" # File: opengl/win/w_labels.c, Line: 782 msgid "Use atom colors" msgstr "Use atom colors" # File: opengl/win/w_labels.c, Line: 786 msgid "Please select atom label colors:" msgstr "Please select atom label colors:" # File: opengl/win/w_labels.c, Line: 807 msgid "Line(s):" msgstr "Line(s):" # File: opengl/win/w_library.c, Line: 72 msgid "Unknown" msgstr "Unknown" # File: opengl/win/w_library.c, Line: 73 msgid "Hydrogen" msgstr "Hydrogen" # File: opengl/win/w_library.c, Line: 74 msgid "Helium" msgstr "Helium" # File: opengl/win/w_library.c, Line: 75 msgid "Lithium" msgstr "Lithium" # File: opengl/win/w_library.c, Line: 76 msgid "Beryllium" msgstr "Beryllium" # File: opengl/win/w_library.c, Line: 77 msgid "Boron" msgstr "Boron" # File: opengl/win/w_library.c, Line: 78 msgid "Carbon" msgstr "Carbon" # File: opengl/win/w_library.c, Line: 79 msgid "Nitrogen" msgstr "Nitrogen" # File: opengl/win/w_library.c, Line: 80 msgid "Oxygen" msgstr "Oxygen" # File: opengl/win/w_library.c, Line: 81 msgid "Fluorine" msgstr "Fluorine" # File: opengl/win/w_library.c, Line: 82 msgid "Neon" msgstr "Neon" # File: opengl/win/w_library.c, Line: 83 msgid "Sodium" msgstr "Sodium" # File: opengl/win/w_library.c, Line: 84 msgid "Magnesium" msgstr "Magnesium" # File: opengl/win/w_library.c, Line: 85 msgid "Aluminium" msgstr "Aluminium" # File: opengl/win/w_library.c, Line: 86 msgid "Silicon" msgstr "Silicon" # File: opengl/win/w_library.c, Line: 87 msgid "Phosphorus" msgstr "Phosphorus" # File: opengl/win/w_library.c, Line: 88 msgid "Sulfur" msgstr "Sulfur" # File: opengl/win/w_library.c, Line: 89 msgid "Chlorine" msgstr "Chlorine" # File: opengl/win/w_library.c, Line: 90 msgid "Argon" msgstr "Argon" # File: opengl/win/w_library.c, Line: 91 msgid "Potassium" msgstr "Potassium" # File: opengl/win/w_library.c, Line: 92 msgid "Calcium" msgstr "Calcium" # File: opengl/win/w_library.c, Line: 93 msgid "Scandium" msgstr "Scandium" # File: opengl/win/w_library.c, Line: 94 msgid "Titanium" msgstr "Titanium" # File: opengl/win/w_library.c, Line: 95 msgid "Vanadium" msgstr "Vanadium" # File: opengl/win/w_library.c, Line: 96 msgid "Chromium" msgstr "Chromium" # File: opengl/win/w_library.c, Line: 97 msgid "Manganese" msgstr "Manganese" # File: opengl/win/w_library.c, Line: 98 msgid "Iron" msgstr "Iron" # File: opengl/win/w_library.c, Line: 99 msgid "Cobalt" msgstr "Cobalt" # File: opengl/win/w_library.c, Line: 100 msgid "Nickel" msgstr "Nickel" # File: opengl/win/w_library.c, Line: 101 msgid "Copper" msgstr "Copper" # File: opengl/win/w_library.c, Line: 102 msgid "Zinc" msgstr "Zinc" # File: opengl/win/w_library.c, Line: 103 msgid "Gallium" msgstr "Gallium" # File: opengl/win/w_library.c, Line: 104 msgid "Germanium" msgstr "Germanium" # File: opengl/win/w_library.c, Line: 105 msgid "Arsenic" msgstr "Arsenic" # File: opengl/win/w_library.c, Line: 106 msgid "Selenium" msgstr "Selenium" # File: opengl/win/w_library.c, Line: 107 msgid "Bromine" msgstr "Bromine" # File: opengl/win/w_library.c, Line: 108 msgid "Krypton" msgstr "Krypton" # File: opengl/win/w_library.c, Line: 109 msgid "Rubidium" msgstr "Rubidium" # File: opengl/win/w_library.c, Line: 110 msgid "Strontium" msgstr "Strontium" # File: opengl/win/w_library.c, Line: 111 msgid "Yttrium" msgstr "Yttrium" # File: opengl/win/w_library.c, Line: 112 msgid "Zirconium" msgstr "Zirconium" # File: opengl/win/w_library.c, Line: 113 msgid "Niobium" msgstr "Niobium" # File: opengl/win/w_library.c, Line: 114 msgid "Molybdenum" msgstr "Molybdenum" # File: opengl/win/w_library.c, Line: 115 msgid "Technetium" msgstr "Technetium" # File: opengl/win/w_library.c, Line: 116 msgid "Ruthenium" msgstr "Ruthenium" # File: opengl/win/w_library.c, Line: 117 msgid "Rhodium" msgstr "Rhodium" # File: opengl/win/w_library.c, Line: 118 msgid "Palladium" msgstr "Palladium" # File: opengl/win/w_library.c, Line: 119 msgid "Silver" msgstr "Silver" # File: opengl/win/w_library.c, Line: 120 msgid "Cadmium" msgstr "Cadmium" # File: opengl/win/w_library.c, Line: 121 msgid "Indium" msgstr "Indium" # File: opengl/win/w_library.c, Line: 122 msgid "Tin" msgstr "Tin" # File: opengl/win/w_library.c, Line: 123 msgid "Antimony" msgstr "Antimony" # File: opengl/win/w_library.c, Line: 124 msgid "Tellurium" msgstr "Tellurium" # File: opengl/win/w_library.c, Line: 125 msgid "Iodine" msgstr "Iodine" # File: opengl/win/w_library.c, Line: 126 msgid "Xenon" msgstr "Xenon" # File: opengl/win/w_library.c, Line: 127 msgid "Caesium" msgstr "Caesium" # File: opengl/win/w_library.c, Line: 128 msgid "Barium" msgstr "Barium" # File: opengl/win/w_library.c, Line: 129 msgid "Lanthanum" msgstr "Lanthanum" # File: opengl/win/w_library.c, Line: 130 msgid "Cerium" msgstr "Cerium" # File: opengl/win/w_library.c, Line: 131 msgid "Praseodymium" msgstr "Praseodymium" # File: opengl/win/w_library.c, Line: 132 msgid "Neodymium" msgstr "Neodymium" # File: opengl/win/w_library.c, Line: 133 msgid "Promethium" msgstr "Promethium" # File: opengl/win/w_library.c, Line: 134 msgid "Samarium" msgstr "Samarium" # File: opengl/win/w_library.c, Line: 135 msgid "Europium" msgstr "Europium" # File: opengl/win/w_library.c, Line: 136 msgid "Gadolinium" msgstr "Gadolinium" # File: opengl/win/w_library.c, Line: 137 msgid "Terbium" msgstr "Terbium" # File: opengl/win/w_library.c, Line: 138 msgid "Dysprosium" msgstr "Dysprosium" # File: opengl/win/w_library.c, Line: 139 msgid "Holmium" msgstr "Holmium" # File: opengl/win/w_library.c, Line: 140 msgid "Erbium" msgstr "Erbium" # File: opengl/win/w_library.c, Line: 141 msgid "Thulium" msgstr "Thulium" # File: opengl/win/w_library.c, Line: 142 msgid "Ytterbium" msgstr "Ytterbium" # File: opengl/win/w_library.c, Line: 143 msgid "Lutetium" msgstr "Lutetium" # File: opengl/win/w_library.c, Line: 144 msgid "Hafnium" msgstr "Hafnium" # File: opengl/win/w_library.c, Line: 145 msgid "Tantalum" msgstr "Tantalum" # File: opengl/win/w_library.c, Line: 146 msgid "Tungsten" msgstr "Tungsten" # File: opengl/win/w_library.c, Line: 147 msgid "Rhenium" msgstr "Rhenium" # File: opengl/win/w_library.c, Line: 148 msgid "Osmium" msgstr "Osmium" # File: opengl/win/w_library.c, Line: 149 msgid "Iridium" msgstr "Iridium" # File: opengl/win/w_library.c, Line: 150 msgid "Platinum" msgstr "Platinum" # File: opengl/win/w_library.c, Line: 151 msgid "Gold" msgstr "Gold" # File: opengl/win/w_library.c, Line: 152 msgid "Mercury" msgstr "Mercury" # File: opengl/win/w_library.c, Line: 153 msgid "Thallium" msgstr "Thallium" # File: opengl/win/w_library.c, Line: 154 msgid "Lead" msgstr "Lead" # File: opengl/win/w_library.c, Line: 155 msgid "Bismuth" msgstr "Bismuth" # File: opengl/win/w_library.c, Line: 156 msgid "Polonium" msgstr "Polonium" # File: opengl/win/w_library.c, Line: 157 msgid "Astatine" msgstr "Astatine" # File: opengl/win/w_library.c, Line: 158 msgid "Radon" msgstr "Radon" # File: opengl/win/w_library.c, Line: 159 msgid "Francium" msgstr "Francium" # File: opengl/win/w_library.c, Line: 160 msgid "Radium" msgstr "Radium" # File: opengl/win/w_library.c, Line: 161 msgid "Actinium" msgstr "Actinium" # File: opengl/win/w_library.c, Line: 162 msgid "Thorium" msgstr "Thorium" # File: opengl/win/w_library.c, Line: 163 msgid "Protactinium" msgstr "Protactinium" # File: opengl/win/w_library.c, Line: 164 msgid "Uranium" msgstr "Uranium" # File: opengl/win/w_library.c, Line: 165 msgid "Neptunium" msgstr "Neptunium" # File: opengl/win/w_library.c, Line: 166 msgid "Plutonium" msgstr "Plutonium" # File: opengl/win/w_library.c, Line: 167 msgid "Americium" msgstr "Americium" # File: opengl/win/w_library.c, Line: 168 msgid "Curium" msgstr "Curium" # File: opengl/win/w_library.c, Line: 169 msgid "Berkelium" msgstr "Berkelium" # File: opengl/win/w_library.c, Line: 170 msgid "Californium" msgstr "Californium" # File: opengl/win/w_library.c, Line: 171 msgid "Einsteinium" msgstr "Einsteinium" # File: opengl/win/w_library.c, Line: 172 msgid "Fermium" msgstr "Fermium" # File: opengl/win/w_library.c, Line: 173 msgid "Mendelevium" msgstr "Mendelevium" # File: opengl/win/w_library.c, Line: 174 msgid "Nobelium" msgstr "Nobelium" # File: opengl/win/w_library.c, Line: 175 msgid "Lawrencium" msgstr "Lawrencium" # File: opengl/win/w_library.c, Line: 176 msgid "Rutherfordium" msgstr "Rutherfordium" # File: opengl/win/w_library.c, Line: 177 msgid "Dubnium" msgstr "Dubnium" # File: opengl/win/w_library.c, Line: 178 msgid "Seaborgium" msgstr "Seaborgium" # File: opengl/win/w_library.c, Line: 179 msgid "Bohrium" msgstr "Bohrium" # File: opengl/win/w_library.c, Line: 180 msgid "Hassium" msgstr "Hassium" # File: opengl/win/w_library.c, Line: 181 msgid "Meitnerium" msgstr "Meitnerium" # File: opengl/win/w_library.c, Line: 182 msgid "Darmstadtium" msgstr "Darmstadtium" # File: opengl/win/w_library.c, Line: 183 msgid "Roentgenium" msgstr "Roentgenium" # File: opengl/win/w_library.c, Line: 184 msgid "Copernicium" msgstr "Copernicium" # File: opengl/win/w_library.c, Line: 185 msgid "Nihonium" msgstr "Nihonium" # File: opengl/win/w_library.c, Line: 186 msgid "Flerovium" msgstr "Flerovium" # File: opengl/win/w_library.c, Line: 187 msgid "Moscovium" msgstr "Moscovium" # File: opengl/win/w_library.c, Line: 188 msgid "Livermorium" msgstr "Livermorium" # File: opengl/win/w_library.c, Line: 189 msgid "Tennessine" msgstr "Tennessine" # File: opengl/win/w_library.c, Line: 190 msgid "Oganesson" msgstr "Oganesson" # File: opengl/win/w_library.c, Line: 191 msgid "Deuterium" msgstr "Deuterium" # File: opengl/win/w_library.c, Line: 203 msgid "Other ..." msgstr "Other ..." # File: opengl/win/w_library.c, Line: 204,1129 msgid "Library" msgstr "Library" # File: opengl/win/w_library.c, Line: 207 msgid "Toluene" msgstr "Toluene" # File: opengl/win/w_library.c, Line: 210 msgid "Ni-Phthalocyanine" msgstr "Ni-Phthalocyanine" # File: opengl/win/w_library.c, Line: 211 msgid "More ..." msgstr "More ..." # File: opengl/win/w_library.c, Line: 215 msgid "Misc" msgstr "Misc" # File: opengl/win/w_library.c, Line: 216 msgid "Alcohols" msgstr "Alcohols" # File: opengl/win/w_library.c, Line: 217 msgid "Aldehydes" msgstr "Aldehydes" # File: opengl/win/w_library.c, Line: 218 msgid "Alkanes" msgstr "Alkanes" # File: opengl/win/w_library.c, Line: 219 msgid "Alkenes" msgstr "Alkenes" # File: opengl/win/w_library.c, Line: 220 msgid "Alkynes" msgstr "Alkynes" # File: opengl/win/w_library.c, Line: 221 msgid "Amides" msgstr "Amides" # File: opengl/win/w_library.c, Line: 222 msgid "Amines" msgstr "Amines" # File: opengl/win/w_library.c, Line: 223 msgid "Amino acids" msgstr "Amino acids" # File: opengl/win/w_library.c, Line: 224 msgid "Aromatics" msgstr "Aromatics" # File: opengl/win/w_library.c, Line: 225 msgid "Carboxylic acids" msgstr "Carboxylic acids" # File: opengl/win/w_library.c, Line: 226 msgid "Cyclic alkanes" msgstr "Cyclic alkanes" # File: opengl/win/w_library.c, Line: 227 msgid "Cyclic alkenes" msgstr "Cyclic alkenes" # File: opengl/win/w_library.c, Line: 228 msgid "Ethers" msgstr "Ethers" # File: opengl/win/w_library.c, Line: 229 msgid "Fatty acids" msgstr "Fatty acids" # File: opengl/win/w_library.c, Line: 230 msgid "Fullerenes" msgstr "Fullerenes" # File: opengl/win/w_library.c, Line: 231 msgid "Heterocyclics" msgstr "Heterocyclics" # File: opengl/win/w_library.c, Line: 232 msgid "Macrocycles" msgstr "Macrocycles" # File: opengl/win/w_library.c, Line: 233 msgid "Ketones" msgstr "Ketones" # File: opengl/win/w_library.c, Line: 234 msgid "Nitriles" msgstr "Nitriles" # File: opengl/win/w_library.c, Line: 235 msgid "Nucleobases" msgstr "Nucleobases" # File: opengl/win/w_library.c, Line: 236 msgid "Steroids" msgstr "Steroids" # File: opengl/win/w_library.c, Line: 237 msgid "Sugars (Linears)" msgstr "Sugars (Linears)" # File: opengl/win/w_library.c, Line: 238 msgid "Sugars (Cyclics)" msgstr "Sugars (Cyclics)" # File: opengl/win/w_library.c, Line: 239 msgid "Sulfoxides" msgstr "Sulfoxides" # File: opengl/win/w_library.c, Line: 240 msgid "Thiols" msgstr "Thiols" # File: opengl/win/w_library.c, Line: 884 msgid "Molecular mass:" msgstr "Molecular mass:" # File: opengl/win/w_library.c, Line: 895 msgid "IUPAC name:" msgstr "IUPAC name:" # File: opengl/win/w_library.c, Line: 905 msgid "Other name(s):" msgstr "Other name(s):" # File: opengl/win/w_library.c, Line: 1146 msgid "Family" msgstr "Family" # File: opengl/win/w_measures.c, Line: 491,492,493 msgid "Atom 1" msgstr "Atom 1" # File: opengl/win/w_measures.c, Line: 491,492,493 msgid "Atom 2" msgstr "Atom 2" # File: opengl/win/w_measures.c, Line: 491 msgid "Distance [Å]" msgstr "Distance [Å]" # File: opengl/win/w_measures.c, Line: 491,492,493 msgid "Using PBC" msgstr "Using PBC" # File: opengl/win/w_measures.c, Line: 492,493 msgid "Atom 3" msgstr "Atom 3" # File: opengl/win/w_measures.c, Line: 493 msgid "Atom 4" msgstr "Atom 4" # File: opengl/win/w_measures.c, Line: 626 msgid "\tAtom(s) in selection* :\t%d" msgstr "\tAtom(s) in selection* :\t%d" # File: opengl/win/w_measures.c, Line: 630 msgid "\tSorry too many [%d] atoms in selection*" msgstr "\tSorry too many [%d] atoms in selection*" # File: opengl/win/w_measures.c, Line: 675 msgid "%s - measures - style" msgstr "%s - measures - style" # File: opengl/win/w_measures.c, Line: 740 # File: workspace/workspace.c, Line: 405 msgid "%s - measures" msgstr "%s - measures" # File: calc/dl_poly/dlp_field.c, Line: 427 # File: opengl/win/w_measures.c, Line: 751 msgid "Distances" msgstr "Distances" # File: calc/dl_poly/dlp_field.c, Line: 566 # File: opengl/win/w_measures.c, Line: 753 msgid "Dihedrals" msgstr "Dihedrals" # File: opengl/win/w_measures.c, Line: 755 msgid "You can select up to %d atoms for both inter-atomic distance(s) and angle(s)," msgstr "You can select up to %d atoms for both inter-atomic distance(s) and angle(s)," # File: opengl/win/w_measures.c, Line: 758 msgid "and up to %d atoms for dihedral angle(s) measurement(s)" msgstr "and up to %d atoms for dihedral angle(s) measurement(s)" # File: opengl/win/w_measures.c, Line: 762 msgid "Font and style" msgstr "Font and style" # File: opengl/win/w_periodic.c, Line: 90 msgid "Electronic structure: [%s]" msgstr "Electronic structure: [%s]" # File: opengl/win/w_periodic.c, Line: 93 msgid "Electronic structure:\t [%s]" msgstr "Electronic structure:\t [%s]" # File: opengl/win/w_periodic.c, Line: 97 msgid "Electronic structure:\t " msgstr "Electronic structure:\t " # File: opengl/win/w_periodic.c, Line: 651 msgid " Alkali metal" msgstr " Alkali metal" # File: opengl/win/w_periodic.c, Line: 651 msgid " Alkaline earth metal" msgstr " Alkaline earth metal" # File: opengl/win/w_periodic.c, Line: 651 msgid " Lanthanide" msgstr " Lanthanide" # File: opengl/win/w_periodic.c, Line: 651 msgid " Actinide" msgstr " Actinide" # File: opengl/win/w_periodic.c, Line: 652 msgid " Transition metal" msgstr " Transition metal" # File: opengl/win/w_periodic.c, Line: 652 msgid " Post-transition metal" msgstr " Post-transition metal" # File: opengl/win/w_periodic.c, Line: 652 msgid " Metalloid" msgstr " Metalloid" # File: opengl/win/w_periodic.c, Line: 652 msgid " Polyatomic non-metal" msgstr " Polyatomic non-metal" # File: opengl/win/w_periodic.c, Line: 653 msgid " Diatomic non-metal" msgstr " Diatomic non-metal" # File: opengl/win/w_periodic.c, Line: 653 msgid " Noble gas" msgstr " Noble gas" # File: opengl/win/w_periodic.c, Line: 653 msgid " Unknown" msgstr " Unknown" # File: opengl/win/w_periodic.c, Line: 678 msgid "Element selection from the periodic table" msgstr "Element selection from the periodic table" # File: opengl/win/w_periodic.c, Line: 694 msgid "Periodic table of the elements" msgstr "Periodic table of the elements" # File: opengl/win/w_record.c, Line: 158 msgid "%s - record" msgstr "%s - record" # File: opengl/win/w_record.c, Line: 164 msgid "Record" msgstr "Record" # File: opengl/win/w_rings.c, Line: 951 msgid "Too many %s rings in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for ring(s) individually:\n" msgstr "Too many %s rings in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for ring(s) individually:\n" # File: opengl/win/w_rings.c, Line: 61 msgid "all" msgstr "all" # File: opengl/win/w_rings.c, Line: 61 msgid "King" msgstr "King" # File: opengl/win/w_rings.c, Line: 61 msgid "Guttman" msgstr "Guttman" # File: opengl/win/w_rings.c, Line: 61 msgid "primtive" msgstr "primtive" # File: opengl/win/w_rings.c, Line: 61 msgid "strong" msgstr "strong" # File: opengl/win/w_rings.c, Line: 413 msgid "Poly." msgstr "Poly." # File: opengl/win/w_rings.c, Line: 954 msgid "Ring size:" msgstr "Ring size:" # File: opengl/win/w_rings.c, Line: 954 msgid "Ring Id.:" msgstr "Ring Id.:" # File: opengl/win/w_rings.c, Line: 1035 msgid "# This file contains the list of all rings in the %s model\n\n" msgstr "# This file contains the list of all rings in the %s model\n\n" # File: opengl/win/w_rings.c, Line: 1039 msgid "# This file contains the list of all %s rings in the %s model\n\n" msgstr "# This file contains the list of all %s rings in the %s model\n\n" # File: opengl/win/w_rings.c, Line: 1049 msgid "\n\tRing(s) of size %d atoms\n" msgstr "\n\tRing(s) of size %d atoms\n" # File: opengl/win/w_rings.c, Line: 1049 msgid "\nRing(s) of size %d atoms\n" msgstr "\nRing(s) of size %d atoms\n" # File: opengl/win/w_rings.c, Line: 1094 msgid "Save atoms in %s rings to file" msgstr "Save atoms in %s rings to file" # File: opengl/win/w_search.c, Line: 4192 msgid "\tThe number of atoms in the model is too large\n" "\t\tto display and browse the entire list !\n" "\tYou need to search for object(s) individually:" msgstr "\tThe number of atoms in the model is too large\n" "\t\tto display and browse the entire list !\n" "\tYou need to search for object(s) individually:" # File: opengl/win/w_search.c, Line: 4196 msgid "The number of atoms in the model is too large to display and browse the entire list !\n" "\t\t\t\tYou need to search for object(s) individually:" msgstr "The number of atoms in the model is too large to display and browse the entire list !\n" "\t\t\t\tYou need to search for object(s) individually:" # File: opengl/win/w_search.c, Line: 4216 msgid "The search must be performed using species and/or Id.\n" "Use the filters above to define the object(s) of the search" msgstr "The search must be performed using species and/or Id..\n" "Use the filters above to define the object(s) of the search" # File: opengl/win/w_search.c, Line: 268,386,417,677,1180,3184 msgid "MSDmax= %f" msgstr "MSDmax= %f" # File: opengl/win/w_search.c, Line: 272,390,424,681,1193,3188,3212 msgid "Set MSDmax for ..." msgstr "Set MSDmax for ..." # File: opengl/win/w_search.c, Line: 286,413,1184,3203 msgid "For all: MSDmax= %f" msgstr "For all: MSDmax= %f" # File: opengl/win/w_search.c, Line: 290,428,1197,1584,1643,3216 msgid "Set MSDmax for all ..." msgstr "Set MSDmax for all ..." # File: opengl/win/w_search.c, Line: 651 msgid "%s + neighbor(s)" msgstr "%s + neighbor(s)" # File: calc/dl_poly/dlp_ff_match.c, Line: 556,613 # File: opengl/win/w_search.c, Line: 706,1166,2548,2589,2624 msgid "Select ..." msgstr "Select ..." # File: opengl/win/w_search.c, Line: 999 msgid "All %s(s)" msgstr "All %s(s)" # File: opengl/win/w_search.c, Line: 1040 msgid "Fragments" msgstr "Fragments" # File: opengl/win/w_search.c, Line: 1053,1081,1157,2542,2570 msgid "For all: %s" msgstr "For all: %s" # File: opengl/win/w_search.c, Line: 1059,1087,1170,1580,2548,2583 msgid "Select for all ..." msgstr "Select for all ..." # File: opengl/win/w_search.c, Line: 2431,2680 msgid "Copied data" msgstr "Copied data" # File: opengl/win/w_search.c, Line: 2832,3273 msgid "MSDmax must be > 0.0 !" msgstr "MSDmax must be > 0.0 !" # File: opengl/win/w_search.c, Line: 2903 msgid "total coordination(s)" msgstr "total coordination(s)" # File: opengl/win/w_search.c, Line: 2903 msgid "partial coordination(s)" msgstr "partial coordination(s)" # File: opengl/win/w_search.c, Line: 2903 msgid "in fragment" msgstr "in fragment" # File: opengl/win/w_search.c, Line: 2903 msgid "in molecule" msgstr "in molecule" # File: opengl/win/w_search.c, Line: 2910 msgid "%s %s randomly" msgstr "%s %s randomly" # File: opengl/win/w_search.c, Line: 2916,3346 msgid "Maximum Mean Square Displacement" msgstr "Maximum Mean Square Displacement" # File: opengl/win/w_search.c, Line: 2923 msgid "Site occupancy for %s" msgstr "Site occupancy for %s" # File: opengl/win/w_search.c, Line: 2927 msgid "Insert %s at" msgstr "Insert %s at" # File: opengl/win/w_search.c, Line: 2945 msgid "Occupancy= " msgstr "Occupancy= " # File: opengl/win/w_search.c, Line: 2976 msgid "MSDmax for %s%d + neighbors = " msgstr "MSDmax for %s%d + neighbors = " # File: opengl/win/w_search.c, Line: 2980 msgid "MSDmax for %s%d = " msgstr "MSDmax for %s%d = " # File: opengl/win/w_search.c, Line: 2989 msgid "MSDmax for all %s atom(s) = " msgstr "MSDmax for all %s atom(s) = " # File: opengl/win/w_search.c, Line: 2994 msgid "MSDmax for all isolated atom(s) = " msgstr "MSDmax for all isolated atom(s) = " # File: opengl/win/w_search.c, Line: 2998 msgid "MSDmax for all %d-fold atom(s) + neighbors = " msgstr "MSDmax for all %d-fold atom(s) + neighbors = " # File: opengl/win/w_search.c, Line: 3002 msgid "MSDmax for all %d-fold atom(s) = " msgstr "MSDmax for all %d-fold atom(s) = " # File: opengl/win/w_search.c, Line: 3018 msgid "MSDmax for all %s + neighbors = " msgstr "MSDmax for all %s + neighbors = " # File: opengl/win/w_search.c, Line: 3022 msgid "MSDmax for all %s = " msgstr "MSDmax for all %s = " # File: opengl/win/w_search.c, Line: 3028 msgid "MSDmax for fragment N°%d = " msgstr "MSDmax for fragment N°%d = " # File: opengl/win/w_search.c, Line: 3032 msgid "MSDmax for the atom(s) in fragment N°%d = " msgstr "MSDmax for the atom(s) in fragment N°%d = " # File: opengl/win/w_search.c, Line: 3038 msgid "MSDmax for molecule N°%d = " msgstr "MSDmax for molecule N°%d = " # File: opengl/win/w_search.c, Line: 3042 msgid "MSDmax for the atom(s) in molecule N°%d = " msgstr "MSDmax for the atom(s) in molecule N°%d = " # File: opengl/win/w_search.c, Line: 3084 msgid "isolated" msgstr "isolated" # File: opengl/win/w_search.c, Line: 3140 msgid "%s randomly n fragment(s) in all fragments, n= " msgstr "%s randomly n fragment(s) in all fragments, n= " # File: opengl/win/w_search.c, Line: 3144 msgid "%s randomly n fragment(s) in molecule N°%d, n= " msgstr "%s randomly n fragment(s) in molecule N°%d, n= " # File: opengl/win/w_search.c, Line: 3148 msgid "%s randomly n %s coordinations, n= " msgstr "%s randomly n %s coordinations, n= " # File: opengl/win/w_search.c, Line: 3155 msgid "%s randomly n %s %s, n= " msgstr "%s randomly n %s %s, n= " # File: opengl/win/w_search.c, Line: 3159 msgid "%s randomly n %s %s N°%d, n= " msgstr "%s randomly n %s %s N°%d, n= " # File: opengl/win/w_search.c, Line: 3167 msgid " with nmax = %d" msgstr " with nmax = %d" # File: opengl/win/w_search.c, Line: 3354 msgid "MSDmax for all objects = " msgstr "MSDmax for all objects = " # File: opengl/win/w_search.c, Line: 3577 msgid "Object" msgstr "Object" # File: opengl/win/w_search.c, Line: 3579 msgid "By" msgstr "By" # File: opengl/win/w_search.c, Line: 3582 msgid "Translate" msgstr "Translate" # File: opengl/win/w_search.c, Line: 3582 msgid "Max. MSD" msgstr "Max. MSD" # File: opengl/win/w_search.c, Line: 3932 msgid "Rotate" msgstr "Rotate" # File: calc/dl_poly/dlp_atom.c, Line: 744 # File: opengl/win/w_search.c, Line: 3958 msgid "Number" msgstr "Number" # File: opengl/win/w_search.c, Line: 4000,4142 msgid "Atom(s): All" msgstr "Atom(s): All" # File: opengl/win/w_search.c, Line: 4001,4144 msgid "Group of Atoms: All" msgstr "Group of Atoms: All" # File: opengl/win/w_search.c, Line: 4001,4143 msgid "Group of Atoms" msgstr "Group of Atoms" # File: opengl/win/w_search.c, Line: 4087 msgid "\t Atom species: " msgstr "\t Atom species: " # File: opengl/win/w_search.c, Line: 4093 msgid "\t Atom Id: " msgstr "\t Atom Id: " # File: opengl/win/w_search.c, Line: 4101 msgid "Add" msgstr "Add" # File: opengl/win/w_search.c, Line: 4139 msgid "Search " msgstr "Search " # File: opengl/win/w_search.c, Line: 4147 msgid "Total Coordination" msgstr "Total Coordination" # File: opengl/win/w_search.c, Line: 4147 msgid "Partial Coordination" msgstr "Partial Coordination" # File: opengl/win/w_search.c, Line: 4164 msgid "For " msgstr "For " # File: opengl/win/w_search.c, Line: 4165 msgid "Filter by " msgstr "Filter by " # File: opengl/win/w_search.c, Line: 4166 msgid "Species " msgstr "Species " # File: opengl/win/w_search.c, Line: 4169 # File: calc/dl_poly/dlp_edit.c, Line: 1184 # File: calc/dl_poly/dlp_field.c, Line: 930 msgid "Atom Id." msgstr "Atom Id." # File: opengl/win/w_search.c, Line: 4205 msgid "All objects" msgstr "All objects" # File: opengl/win/w_search.c, Line: 4206 msgid "Selection " msgstr "Selection " # File: opengl/win/w_sequencer.c, Line: 72 # File: workspace/workspace.c, Line: 401 msgid "%s - player - step %d" msgstr "%s - player - step %d" # File: opengl/win/w_sequencer.c, Line: 263 msgid "Enter a step number" msgstr "Enter a step number" # File: opengl/win/w_sequencer.c, Line: 267 msgid "Step number [%d-%d]: " msgstr "Step number [%d-%d]: " # File: opengl/win/w_sequencer.c, Line: 469 msgid "First" msgstr "First" # File: opengl/win/w_sequencer.c, Line: 472 msgid "Previous" msgstr "Previous" # File: opengl/win/w_sequencer.c, Line: 475 msgid "Next" msgstr "Next" # File: opengl/win/w_sequencer.c, Line: 478 msgid "Last" msgstr "Last" # File: opengl/win/w_sequencer.c, Line: 481 msgid "Go to" msgstr "Go to" # File: opengl/win/w_sequencer.c, Line: 488 msgid "Play" msgstr "Play" # File: opengl/win/w_sequencer.c, Line: 494 msgid "Loop" msgstr "Loop" # File: opengl/win/w_sequencer.c, Line: 497 msgid "Faster" msgstr "Faster" # File: opengl/win/w_sequencer.c, Line: 500 msgid "Slower" msgstr "Slower" # File: opengl/win/w_spiner.c, Line: 181 # File: workspace/workspace.c, Line: 396 msgid "%s - spin" msgstr "%s - spin" # File: opengl/win/w_volumes.c, Line: 716 msgid "Mean volume(s) occupied by the atom(s) for each %s:" msgstr "Mean volume(s) occupied by the atom(s) for each %s:" # File: opengl/win/w_volumes.c, Line: 720 msgid "Volume(s) occupied by the atom(s) for each %s:" msgstr "Volume(s) occupied by the atom(s) for each %s:" # File: opengl/win/w_volumes.c, Line: 742,780,1046,1079 msgid "using %s: " msgstr "using %s: " # File: opengl/win/w_volumes.c, Line: 756 msgid "Mean smallest rectangle parallepiped volume(s) to englobe the atom(s) for each %s:" msgstr "Mean smallest rectangle parallepiped volume(s) to englobe the atom(s) for each %s:" # File: opengl/win/w_volumes.c, Line: 760 msgid "Smallest rectangle parallepiped volume(s) to englobe the atom(s) for each %s:" msgstr "Smallest rectangle parallepiped volume(s) to englobe the atom(s) for each %s:" # File: opengl/win/w_volumes.c, Line: 785,1093 msgid "Compute" msgstr "Compute" # File: opengl/win/w_volumes.c, Line: 913 msgid "Select MD step [1-%d]:" msgstr "Select MD step [1-%d]:" # File: opengl/win/w_volumes.c, Line: 1036 msgid "Volume(s) occupied by all the atom(s):" msgstr "Volume(s) occupied by all the atom(s):" # File: opengl/win/w_volumes.c, Line: 1061 msgid "average by MD step" msgstr "average by MD step" # File: opengl/win/w_volumes.c, Line: 1065 msgid "Smallest rectangle parallepiped volume(s) to englobe all atom(s):" msgstr "Smallest rectangle parallepiped volume(s) to englobe all atom(s):" # File: opengl/win/w_volumes.c, Line: 1067 msgid "Angular precision: " msgstr "Angular precision: " # File: opengl/win/w_volumes.c, Line: 1130 msgid "%s - volumes" msgstr "%s - volumes" # File: opengl/draw/d_measures.c, Line: 96,453 # File: opengl/win/popup.c, Line: 3772 msgid "PBC" msgstr "PBC" # File: opengl/draw/image.c, Line: 166 msgid "An error occurred when exporting an image\nyou might want to try again\nsorry for the trouble" msgstr "An error occurred when exporting an image\nyou might want to try again\nsorry for the trouble" # File: opengl/draw/image.c, Line: 222 # File: opengl/draw/movie.c, Line: 1321 msgid "%s file (*.%s)" msgstr "%s file (*.%s)" # File: opengl/draw/movie.c, Line: 322,340,359 msgid "Error in movie encoding : video frame - error : %s" msgstr "Error in movie encoding : video frame - error : %s" # File: opengl/draw/movie.c, Line: 347 msgid "Error in movie encoding : video frame - warning : packet empty, ignoring frame= %d" msgstr "Error in movie encoding : video frame - warning : packet empty, ignoring frame= %d" # File: opengl/draw/movie.c, Line: 407 msgid "Error in movie encoding : impossible to find codec %s" msgstr "Error in movie encoding : impossible to find codec %s" # File: opengl/draw/movie.c, Line: 412 msgid "Error in movie encoding : impossible to allocate encoding context" msgstr "Error in movie encoding : impossible to allocate encoding context" # File: opengl/draw/movie.c, Line: 469 msgid "Error in movie encoding : impossible to allocate video stream" msgstr "Error in movie encoding : impossible to allocate video stream" # File: opengl/draw/movie.c, Line: 476 msgid "Error in movie encoding : impossible to allocate raw frame buffer" msgstr "Error in movie encoding : impossible to allocate raw frame buffer" # File: opengl/draw/movie.c, Line: 1033 msgid "Error in movie encoding : impossible to allocate AV format context" msgstr "Error in movie encoding : impossible to allocate AV format context" # File: opengl/draw/movie.c, Line: 1040 msgid "Error in movie encoding : impossible to guess container format : change file name" msgstr "Error in movie encoding : impossible to guess container format : change file name" # File: opengl/draw/movie.c, Line: 1049 msgid "Error in movie encoding : impossible to create video stream" msgstr "Error in movie encoding : impossible to create video stream" # File: opengl/draw/movie.c, Line: 1057 msgid "Error in movie encoding : impossible to open codec, error= %s" msgstr "Error in movie encoding : impossible to open codec, error= %s" # File: opengl/draw/movie.c, Line: 1075 msgid "Error in movie encoding : impossible to open video file '%s'" msgstr "Error in movie encoding : impossible to open video file '%s'" # File: opengl/draw/movie.c, Line: 1085 msgid "Error in movie encoding : impossible to write the AV format header" msgstr "Error in movie encoding : impossible to write the AV format header" # File: opengl/draw/movie.c, Line: 1271 msgid "An error occurred when encoding movie\nyou might want to try again\nsorry for the trouble" msgstr "An error occurred when encoding movie\nyou might want to try again\nsorry for the trouble" # File: opengl/draw/movie.c, Line: 1307 msgid "Render Movie" msgstr "Render Movie" # File: opengl/draw/ogl_text.c, Line: 452 msgid "Error in text rendering : for some reason it is impossible to render\n - this string : '%s' \n - using this font: %s" msgstr "Error in text rendering : for some reason it is impossible to render\n - this string : '%s' \n - using this font: %s" # File: workspace/modelinfo.c, Line: 118 msgid "\n\tProject file: " msgstr "\n\tProject file: " # File: workspace/modelinfo.c, Line: 124 msgid "\n\tCoordinates file: " msgstr "\n\tCoordinates file: " # File: workspace/modelinfo.c, Line: 126 msgid "\n\tFile type: " msgstr "\n\tFile type: " # File: workspace/modelinfo.c, Line: 130 msgid "\n\nModel properties\n\n\n" msgstr "\n\nModel properties\n\n\n" # File: workspace/modelinfo.c, Line: 133 msgid "\tNumber of MD steps = " msgstr "\tNumber of MD steps = " # File: workspace/modelinfo.c, Line: 138 msgid "\tNumber of atoms = " msgstr "\tNumber of atoms = " # File: workspace/modelinfo.c, Line: 142 msgid "\tNumber of species = " msgstr "\tNumber of species = " # File: workspace/modelinfo.c, Line: 152 msgid "\tAv. lattice parameters:\n\n" msgstr "\tAv. lattice parameters:\n\n" # File: workspace/modelinfo.c, Line: 156 msgid "\tLattice parameters:\n\n" msgstr "\tLattice parameters:\n\n" # File: workspace/modelinfo.c, Line: 185 msgid "\tAv. lattice vectors:\n\n\t\t" msgstr "\tAv. lattice vectors:\n\n\t\t" # File: workspace/modelinfo.c, Line: 189 msgid "\tLattice vectors:\n\n\t\t" msgstr "\tLattice vectors:\n\n\t\t" # File: workspace/modelinfo.c, Line: 224 msgid "\tCrystal information:\n\n" msgstr "\tCrystal information:\n\n" # File: workspace/modelinfo.c, Line: 226 msgid "\t\tSpace group N°: " msgstr "\t\tSpace group N°: " # File: workspace/modelinfo.c, Line: 230 msgid "\t\tSpace group: " msgstr "\t\tSpace group: " # File: workspace/modelinfo.c, Line: 233 msgid "\t\tSpace group setting: " msgstr "\t\tSpace group setting: " # File: workspace/modelinfo.c, Line: 239 msgid "\t\tBravais lattice: " msgstr "\t\tBravais lattice: " # File: workspace/modelinfo.c, Line: 247 msgid "\tAv. volume = " msgstr "\tAv. volume = " # File: workspace/modelinfo.c, Line: 251 msgid "\tVolume = " msgstr "\tVolume = " # File: workspace/modelinfo.c, Line: 260 msgid "\n\tAv. density = " msgstr "\n\tAv. density = " # File: workspace/modelinfo.c, Line: 264 msgid "\n\tDensity = " msgstr "\n\tDensity = " # File: workspace/modelinfo.c, Line: 273 msgid "\n\tAv. number density = " msgstr "\n\tAv. number density = " # File: workspace/modelinfo.c, Line: 277 msgid "\n\tNumber density = " msgstr "\n\tNumber density = " # File: workspace/modelinfo.c, Line: 282 msgid " atoms / Å" msgstr " atoms / Å" # File: workspace/modelinfo.c, Line: 285 msgid "\n\n\tEmpirical formula:\t" msgstr "\n\n\tEmpirical formula:\t" # File: workspace/modelinfo.c, Line: 299 msgid "\n\n\tAtom\t Number Fraction\tNumber density (atoms / Å" msgstr "\n\n\tAtom\t Number Fraction\tNumber density (atoms / Å" # File: workspace/modelinfo.c, Line: 305 msgid "\n\n\tAtom\t Number Fraction" msgstr "\n\n\tAtom\t Number Fraction" # File: workspace/workinfo.c, Line: 69 msgid "\n\nWorkspace information\n\n\n" msgstr "\n\nWorkspace information\n\n\n" # File: workspace/workinfo.c, Line: 73 msgid "\tWorkspace file: " msgstr "\tWorkspace file: " # File: workspace/workinfo.c, Line: 79 msgid " project(s) in workspace: " msgstr " project(s) in workspace: " # File: workspace/workinfo.c, Line: 87 msgid "\n\n\tActive project: " msgstr "\n\n\tActive project: " # File: workspace/workspace.c, Line: 89 msgid "Workspace " msgstr "Workspace " # File: workspace/workspace.c, Line: 90 msgid "Settings " msgstr "Settings " # File: workspace/workspace.c, Line: 91 msgid "OpenGL - 3D " msgstr "OpenGL - 3D " # File: workspace/workspace.c, Line: 92 msgid "Visualization " msgstr "Visualization " # File: workspace/workspace.c, Line: 93 msgid "Calc. visualization " msgstr "Calc. visualization " # File: workspace/workspace.c, Line: 94 msgid "Analysis " msgstr "Analysis " # File: workspace/workspace.c, Line: 349 msgid "Please enter a new name for project N°%d" msgstr "Please enter a new name for project N°%d" # File: workspace/workspace.c, Line: 351 msgid "Project name" msgstr "Project name" # File: workspace/workspace.c, Line: 370 msgid "Atom(s) configuration" msgstr "Atom(s) configuration" # File: workspace/workspace.c, Line: 370 msgid "Clone(s) configuration" msgstr "Clone(s) configuration" # File: calc/calc.c, Line: 322 msgid " %s contains %d different sets of atomic coordinates. \n" " Please select the one to use to create the input file(s) \n" " Note that a new project will be generated for that purpose. \n" msgstr " %s contains %d different sets of atomic coordinates. \n" " Please select the one to use to create the input file(s) \n" " Note that a new project will be generated for that purpose. \n" # File: calc/calc.c, Line: 108 msgid "Please confirm" msgstr "Please confirm" # File: calc/calc.c, Line: 331 msgid "Enter the selected MD step: " msgstr "Enter the selected MD step: " # File: calc/cp2k/cp2k_init.c, Line: 948 msgid "\t - BASIS_MOLOPT\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - GTH_BASIS_SETS\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - BASIS_SET\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - POTENTIAL\t\t(CP2K v9.1, released: 2021-12-31)" msgstr "\t - BASIS_MOLOPT\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - GTH_BASIS_SETS\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - BASIS_SET\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - POTENTIAL\t\t(CP2K v9.1, released: 2021-12-31)" # File: calc/cp2k/cp2k_init.c, Line: 950 msgid " Following your selection the files that contains the parameters for your calculation will be generated automatically.\n" " Alternatively it is possible to define and use your own set of parameters." msgstr " Following your selection the files that contains the parameters for your calculation will be generated automatically.\n" " Alternatively it is possible to define and use your own set of parameters." # File: calc/cp2k/cp2k_init.c, Line: 1104 msgid "The CP2K input system offers to have the information gathered in a single, rather long, file\n" "or separated in several files each of them dedicated to a particular section of the input: " msgstr "The CP2K input system offers to have the information gathered in a single, rather long, file\n" "or separated in several files each of them dedicated to a particular section of the input: " # File: calc/cp2k/cp2k_init.c, Line: 97 # File: calc/cpmd/cpmd_restart.c, Line: 155,174,195 msgid "steps" msgstr "steps" # File: calc/cp2k/cp2k_init.c, Line: 117 msgid "Single Point Energy Calculation" msgstr "Single Point Energy Calculation" # File: calc/cp2k/cp2k_init.c, Line: 118 msgid "Single Point Energy and Forces Calculation" msgstr "Single Point Energy and Forces Calculation" # File: calc/cp2k/cp2k_init.c, Line: 119 # File: calc/cpmd/cpmd_init.c, Line: 193 msgid "Geometry Optimization" msgstr "Geometry Optimization" # File: calc/cp2k/cp2k_init.c, Line: 120 # File: calc/cpmd/cpmd_init.c, Line: 197 msgid "Vibrational Analysis" msgstr "Vibrational Analysis" # File: calc/cp2k/cp2k_init.c, Line: 120 msgid "Linear Response Calculation" msgstr "Linear Response Calculation" # File: calc/cp2k/cp2k_init.c, Line: 120 msgid "Ehrenfest Dynamics" msgstr "Ehrenfest Dynamics" # File: calc/cp2k/cp2k_init.c, Line: 121 msgid "Low" msgstr "Low" # File: calc/cp2k/cp2k_init.c, Line: 121 msgid "Medium" msgstr "Medium" # File: calc/cp2k/cp2k_init.c, Line: 121 msgid "High" msgstr "High" # File: calc/cp2k/cp2k_init.c, Line: 122 msgid "Gaussian and Plane Waves Method" msgstr "Gaussian and Plane Waves Method" # File: calc/cp2k/cp2k_init.c, Line: 123 msgid "Gaussian and Augmented Plane Waves Method" msgstr "Gaussian and Augmented Plane Waves Method" # File: calc/cp2k/cp2k_init.c, Line: 124 msgid "Gaussian and Augmented Plane Waves Method Only for XC" msgstr "Gaussian and Augmented Plane Waves Method Only for XC" # File: calc/cp2k/cp2k_init.c, Line: 125 msgid "Generate an Atomic Density Using the Atomic Code" msgstr "Generate an Atomic Density Using the Atomic Code" # File: calc/cp2k/cp2k_init.c, Line: 126 msgid "Diagonalize the Core Hamiltonian" msgstr "Diagonalize the Core Hamiltonian" # File: calc/cp2k/cp2k_init.c, Line: 127 msgid "Use Random Wave-function Coefficients" msgstr "Use Random Wave-function Coefficients" # File: calc/cp2k/cp2k_init.c, Line: 128 msgid "Use the RESTART File" msgstr "Use the RESTART File" # File: calc/cp2k/cp2k_init.c, Line: 129 msgid "Broyden Mixing Approximating the Inverse Hessian" msgstr "Broyden Mixing Approximating the Inverse Hessian" # File: calc/cp2k/cp2k_init.c, Line: 130 msgid "Conjugate Gradients" msgstr "Conjugate Gradients" # File: calc/cp2k/cp2k_init.c, Line: 130 msgid "Direct Inversion in the Iterative Subspace" msgstr "Direct Inversion in the Iterative Subspace" # File: calc/cp2k/cp2k_init.c, Line: 131 # File: calc/cpmd/cpmd_init.c, Line: 152 msgid "Becke Three-parameters Hybrid + LYP" msgstr "Becke Three-parameters Hybrid + LYP" # File: calc/cp2k/cp2k_init.c, Line: 131 msgid "Bayesian Error Estimation + van der Walls" msgstr "Bayesian Error Estimation + van der Walls" # File: calc/cp2k/cp2k_init.c, Line: 132 # File: calc/cpmd/cpmd_init.c, Line: 150 msgid "Local Density Approximation" msgstr "Local Density Approximation" # File: calc/cp2k/cp2k_init.c, Line: 133 # File: calc/cpmd/cpmd_init.c, Line: 152 msgid "Parameter-free PBE" msgstr "Parameter-free PBE" # File: calc/cp2k/cp2k_init.c, Line: 134 msgid "3 Dimensional (XYZ)" msgstr "3 Dimensional (XYZ)" # File: calc/cp2k/cp2k_init.c, Line: 134 msgid "2 Dimensional (XY)" msgstr "2 Dimensional (XY)" # File: calc/cp2k/cp2k_init.c, Line: 134 msgid "2 Dimensional (XZ)" msgstr "2 Dimensional (XZ)" # File: calc/cp2k/cp2k_init.c, Line: 134 msgid "2 Dimensional (YZ)" msgstr "2 Dimensional (YZ)" # File: calc/cp2k/cp2k_init.c, Line: 135 msgid "1 Dimensional (X)" msgstr "1 Dimensional (X)" # File: calc/cp2k/cp2k_init.c, Line: 135 msgid "1 Dimensional (Y)" msgstr "1 Dimensional (Y)" # File: calc/cp2k/cp2k_init.c, Line: 135 msgid "1 Dimensional (Z)" msgstr "1 Dimensional (Z)" # File: calc/cp2k/cp2k_init.c, Line: 135 msgid "Isolated System" msgstr "Isolated System" # File: calc/cp2k/cp2k_init.c, Line: 136 # File: calc/cpmd/cpmd_init.c, Line: 153 msgid "Lattice Vectors" msgstr "Lattice Vectors" # File: calc/cp2k/cp2k_init.c, Line: 136 # File: calc/cpmd/cpmd_init.c, Line: 153 msgid "Box Parameters (a,b,c and α,β,γ)" msgstr "Box Parameters (a,b,c and α,β,γ)" # File: calc/cp2k/cp2k_init.c, Line: 137 msgid "Cubic (a = b = c, α = β = γ = 90°)" msgstr "Cubic (a = b = c, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 137 msgid "Hexagonal (a = b ≠ c, α = β = 90°, γ = 60°)" msgstr "Hexagonal (a = b ≠ c, α = β = 90°, γ = 60°)" # File: calc/cp2k/cp2k_init.c, Line: 138 msgid "Orthorhombic (a ≠ b ≠ c, α = β = γ = 90°)" msgstr "Orthorhombic (a ≠ b ≠ c, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 138 msgid "Rhombohedral (a = b = c, α = β = γ ≠ 90°)" msgstr "Rhombohedral (a = b = c, α = β = γ ≠ 90°)" # File: calc/cp2k/cp2k_init.c, Line: 139 msgid "Tetragonal (a = b ≠ c, α = β = γ = 90°)" msgstr "Tetragonal (a = b ≠ c, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 139 msgid "Tetragonal (a = c ≠ b, α = β = γ = 90°)" msgstr "Tetragonal (a = c ≠ b, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 139 msgid "Tetragonal (a ≠ b = c, α = β = γ = 90°)" msgstr "Tetragonal (a ≠ b = c, α = β = γ = 90°)" # File: calc/cp2k/cp2k_init.c, Line: 140 msgid "Monoclinic (a ≠ b ≠ c ≠ a, α = γ = 90°, β ≠ 90°)" msgstr "Monoclinic (a ≠ b ≠ c ≠ a, α = γ = 90°, β ≠ 90°)" # File: calc/cp2k/cp2k_init.c, Line: 140 msgid "Triclinic (a ≠ b ≠ c ≠ a, α ≠ β ≠ γ ≠ α ≠ 90°)" msgstr "Triclinic (a ≠ b ≠ c ≠ a, α ≠ β ≠ γ ≠ α ≠ 90°)" # File: calc/cp2k/cp2k_init.c, Line: 140 msgid "No Cell Symmetry" msgstr "No Cell Symmetry" # File: calc/cp2k/cp2k_init.c, Line: 141 msgid "Constant kinetic energy" msgstr "Constant kinetic energy" # File: calc/cp2k/cp2k_init.c, Line: 141 msgid "Langevin dynamics (constant temperature)" msgstr "Langevin dynamics (constant temperature)" # File: calc/cp2k/cp2k_init.c, Line: 141 msgid "Constant pressure ensemble (no thermostat)" msgstr "Constant pressure ensemble (no thermostat)" # File: calc/cp2k/cp2k_init.c, Line: 142 msgid "Constant pressure ensemble using an isotropic cell (no thermostat)" msgstr "Constant pressure ensemble using an isotropic cell (no thermostat)" # File: calc/cp2k/cp2k_init.c, Line: 142 msgid "Constant temperature and pressure using a flexible cell" msgstr "Constant temperature and pressure using a flexible cell" # File: calc/cp2k/cp2k_init.c, Line: 143 msgid "Constant temperature and pressure using an isotropic cell" msgstr "Constant temperature and pressure using an isotropic cell" # File: calc/cp2k/cp2k_init.c, Line: 143 msgid "Constant energy (µ-canonical)" msgstr "Constant energy (µ-canonical)" # File: calc/cp2k/cp2k_init.c, Line: 143 msgid "Constant temperature and volume (canonical)" msgstr "Constant temperature and volume (canonical)" # File: calc/cp2k/cp2k_init.c, Line: 144 msgid "Adiabatic dynamics in constant temperature and volume ensemble (CAFES)" msgstr "Adiabatic dynamics in constant temperature and volume ensemble (CAFES)" # File: calc/cp2k/cp2k_init.c, Line: 145 msgid "Diagonalization of a full Hessian matrix" msgstr "Diagonalization of a full Hessian matrix" # File: calc/cp2k/cp2k_init.c, Line: 145 msgid "Conjugate gradients" msgstr "Conjugate gradients" # File: calc/cp2k/cp2k_init.c, Line: 147 msgid "Dion-Rydberg-Schroeder-Langreth-Lundqvist non-local van der Waals density functional" msgstr "Dion-Rydberg-Schroeder-Langreth-Lundqvist non-local van der Waals density functional" # File: calc/cp2k/cp2k_init.c, Line: 148 msgid "Lee-Murray-Kong-Lundqvist-Langreth non-local van der Waals density functional" msgstr "Lee-Murray-Kong-Lundqvist-Langreth non-local van der Waals density functional" # File: calc/cp2k/cp2k_init.c, Line: 149 msgid "Revised Vydrov-van Voorhis non-local van der Waals density functional" msgstr "Revised Vydrov-van Voorhis non-local van der Waals density functional" # File: calc/cp2k/cp2k_init.c, Line: 150 msgid "Grimme D2 method" msgstr "Grimme D2 method" # File: calc/cp2k/cp2k_init.c, Line: 150 msgid "Grimme D3 method (zero damping)" msgstr "Grimme D3 method (zero damping)" # File: calc/cp2k/cp2k_init.c, Line: 150 msgid "Grimme D3 method (Becke-Johnson damping)" msgstr "Grimme D3 method (Becke-Johnson damping)" # File: calc/cp2k/cp2k_init.c, Line: 153 msgid "Run type:" msgstr "Run type:" # File: calc/cp2k/cp2k_init.c, Line: 154 msgid "Max CPU time:" msgstr "Max CPU time:" # File: calc/cp2k/cp2k_init.c, Line: 155 msgid "Print level:" msgstr "Print level:" # File: calc/cp2k/cp2k_init.c, Line: 156 msgid "Use restart information:" msgstr "Use restart information:" # File: calc/cp2k/cp2k_init.c, Line: 157 msgid "File that contains the restart information:" msgstr "File that contains the restart information:" # File: calc/cp2k/cp2k_init.c, Line: 158 msgid "File that contains the basis set(s):" msgstr "File that contains the basis set(s):" # File: calc/cp2k/cp2k_init.c, Line: 159 msgid "File that contains the pseudo-potential(s):" msgstr "File that contains the pseudo-potential(s):" # File: calc/cp2k/cp2k_init.c, Line: 160 msgid "File that contains the wave-function:" msgstr "File that contains the wave-function:" # File: calc/cp2k/cp2k_init.c, Line: 161 # File: calc/dl_poly/dlp_edit.c, Line: 2294 msgid "Charge:" msgstr "Charge:" # File: calc/cp2k/cp2k_init.c, Line: 162 msgid "Density cutoff for the finest grid level:" msgstr "Density cutoff for the finest grid level:" # File: calc/cp2k/cp2k_init.c, Line: 163 msgid "Number of multi-grids:" msgstr "Number of multi-grids:" # File: calc/cp2k/cp2k_init.c, Line: 164 msgid "Quickstep method:" msgstr "Quickstep method:" # File: calc/cp2k/cp2k_init.c, Line: 165 msgid "Initial guess for the wave-function:" msgstr "Initial guess for the wave-function:" # File: calc/cp2k/cp2k_init.c, Line: 166 msgid "Maximum inner-SCF cycle(s):" msgstr "Maximum inner-SCF cycle(s):" # File: calc/cp2k/cp2k_init.c, Line: 167,169 msgid "Convergence threshold:" msgstr "Convergence threshold:" # File: calc/cp2k/cp2k_init.c, Line: 168 msgid "Maximum outer-SCF cycle(s):" msgstr "Maximum outer-SCF cycle(s):" # File: calc/cp2k/cp2k_init.c, Line: 170 msgid "Orbital transformation minimizer:" msgstr "Orbital transformation minimizer:" # File: calc/cp2k/cp2k_init.c, Line: 171 # File: calc/cpmd/cpmd_init.c, Line: 124 msgid "DFT functional:" msgstr "DFT functional:" # File: calc/cp2k/cp2k_init.c, Line: 172 msgid "Spin unrestricted calculation" msgstr "Spin unrestricted calculation" # File: calc/cp2k/cp2k_init.c, Line: 174 msgid "Use van der Waals interactions" msgstr "Use van der Waals interactions" # File: calc/cp2k/cp2k_init.c, Line: 175 msgid "Restricted Open Kohn-Sham 'ROKS'" msgstr "Restricted Open Kohn-Sham 'ROKS'" # File: calc/cp2k/cp2k_init.c, Line: 176 # File: calc/cpmd/cpmd_restart.c, Line: 200 msgid "Forces" msgstr "Forces" # File: calc/cp2k/cp2k_init.c, Line: 177 msgid "Stress tensor" msgstr "Stress tensor" # File: calc/cp2k/cp2k_init.c, Line: 178 msgid "Mulliken population" msgstr "Mulliken population" # File: calc/cp2k/cp2k_init.c, Line: 179 msgid "Löwdin population" msgstr "Löwdin population" # File: calc/cp2k/cp2k_init.c, Line: 180 msgid "Orbitals" msgstr "Orbitals" # File: calc/cp2k/cp2k_init.c, Line: 181 msgid "Periodicity:" msgstr "Periodicity:" # File: calc/cp2k/cp2k_init.c, Line: 183 # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Symmetry:" msgstr "Symmetry:" # File: calc/cp2k/cp2k_init.c, Line: 184 # File: calc/dl_poly/dlp_control.c, Line: 531 msgid "Ensemble:" msgstr "Ensemble:" # File: calc/cp2k/cp2k_init.c, Line: 185 msgid "Maximum number of MD steps:" msgstr "Maximum number of MD steps:" # File: calc/cp2k/cp2k_init.c, Line: 186 msgid "MD time step:" msgstr "MD time step:" # File: calc/cp2k/cp2k_init.c, Line: 187 # File: calc/cpmd/cpmd_nose.c, Line: 625 msgid "Initial temperature:" msgstr "Initial temperature:" # File: calc/cp2k/cp2k_init.c, Line: 188 msgid "Geometry optimizer:" msgstr "Geometry optimizer:" # File: calc/cp2k/cp2k_init.c, Line: 189 msgid "Maximum number of optimization steps:" msgstr "Maximum number of optimization steps:" # File: calc/cp2k/cp2k_init.c, Line: 190 msgid "Atomic forces convergence criterion:" msgstr "Atomic forces convergence criterion:" # File: calc/cp2k/cp2k_init.c, Line: 191 msgid "Save information every:" msgstr "Save information every:" # File: calc/cp2k/cp2k_init.c, Line: 192 msgid "Add constraint(s)" msgstr "Add constraint(s)" # File: calc/cp2k/cp2k_init.c, Line: 194,1156 msgid "The CP2K input structure" msgstr "The CP2K input structure" # File: calc/cp2k/cp2k_init.c, Line: 195 # File: calc/cpmd/cpmd_init.c, Line: 114 msgid "provides the general control parameters for the calculation to be performed" msgstr "provides the general control parameters for the calculation to be performed" # File: calc/cp2k/cp2k_init.c, Line: 196 msgid "describes how the interatomic forces will be evaluated" msgstr "describes how the interatomic forces will be evaluated" # File: calc/cp2k/cp2k_init.c, Line: 197 msgid "describes the model: symmetry, periodicity and atomic species, pseudo-potentials and coordinates" msgstr "describes the model: symmetry, periodicity and atomic species, pseudo-potentials and coordinates" # File: calc/cp2k/cp2k_init.c, Line: 198 msgid "describes the displacement of the atoms for molecular dynamics and geometry optimization" msgstr "describes the displacement of the atoms for molecular dynamics and geometry optimization" # File: calc/cp2k/cp2k_init.c, Line: 199 msgid "To describe the thermostat(s) for molecular dynamics" msgstr "To describe the thermostat(s) for molecular dynamics" # File: calc/cp2k/cp2k_init.c, Line: 200 msgid "To describe the parameters required for restart" msgstr "To describe the parameters required for restart" # File: calc/cp2k/cp2k_init.c, Line: 363 msgid "Type of potential:" msgstr "Type of potential:" # File: calc/cp2k/cp2k_init.c, Line: 363 msgid "Cutoff:" msgstr "Cutoff:" # File: calc/cp2k/cp2k_init.c, Line: 386 msgid "Apply long range corrections" msgstr "Apply long range corrections" # File: calc/cp2k/cp2k_init.c, Line: 483 msgid "Non-local potential" msgstr "Non-local potential" # File: calc/cp2k/cp2k_init.c, Line: 484 msgid "Pair potential" msgstr "Pair potential" # File: calc/cp2k/cp2k_init.c, Line: 470 msgid "Energy scaling:" msgstr "Energy scaling:" # File: calc/cp2k/cp2k_init.c, Line: 470 msgid "Spin configuration *:" msgstr "Spin configuration *:" # File: calc/cp2k/cp2k_init.c, Line: 471 msgid "Number of HOMO levels (-1 for all):" msgstr "Number of HOMO levels (-1 for all):" # File: calc/cp2k/cp2k_init.c, Line: 471 msgid "Number of LUMO levels (-1 for all):" msgstr "Number of LUMO levels (-1 for all):" # File: calc/cp2k/cp2k_init.c, Line: 473 msgid "%s - options" msgstr "%s - options" # File: calc/cp2k/cp2k_init.c, Line: 487 msgid "Type of functional for the van der Waals interactions" msgstr "Type of functional for the van der Waals interactions" # File: calc/cp2k/cp2k_init.c, Line: 516 msgid "* for the singly occupied orbitals" msgstr "* for the singly occupied orbitals" # File: calc/cp2k/cp2k_init.c, Line: 528 msgid "Write cube files, if not then only print eigenvalues" msgstr "Write cube files, if not then only print eigenvalues" # File: calc/cp2k/cp2k_init.c, Line: 674 msgid "- Select and use set of parameters from the database: " msgstr "- Select and use set of parameters from the database: " # File: calc/cp2k/cp2k_init.c, Line: 675 msgid "- Define and use other set of parameters: " msgstr "- Define and use other set of parameters: " # File: calc/cp2k/cp2k_init.c, Line: 676 msgid "\t\tAvailable basis set for " msgstr "\t\tAvailable basis set for " # File: calc/cp2k/cp2k_init.c, Line: 676 msgid "\t\tAvailable pseudo-potential for " msgstr "\t\tAvailable pseudo-potential for " # File: calc/cp2k/cp2k_init.c, Line: 677 msgid "\t\tBasis set for " msgstr "\t\tBasis set for " # File: calc/cp2k/cp2k_init.c, Line: 677 msgid "\t\tPseudo-potential for " msgstr "\t\tPseudo-potential for " # File: calc/cp2k/cp2k_init.c, Line: 844 msgid "Print:" msgstr "Print:" # File: calc/cp2k/cp2k_init.c, Line: 941 msgid " %s provides official CP2K atomic basis sets and pseudo-potentials, are included:" msgstr " %s provides official CP2K atomic basis sets and pseudo-potentials, are included:" # File: calc/cp2k/cp2k_init.c, Line: 952 msgid "\t\t\t\tChemical species" msgstr "\t\t\t\tChemical species" # File: calc/cp2k/cp2k_init.c, Line: 979 # File: calc/cpmd/cpmd_init.c, Line: 936 msgid "Details of the %s section that %s" msgstr "Details of the %s section that %s" # File: calc/cp2k/cp2k_init.c, Line: 1033 msgid "CP2K main input file '*.inp'" msgstr "CP2K main input file '*.inp'" # File: calc/cp2k/cp2k_init.c, Line: 1046 msgid "CP2K input file '*.inp'" msgstr "CP2K input file '*.inp'" # File: calc/cp2k/cp2k_init.c, Line: 1055 msgid "! Information" msgstr "! Information" # File: calc/cp2k/cp2k_init.c, Line: 1110 msgid "Single input file" msgstr "Single input file" # File: calc/cp2k/cp2k_init.c, Line: 1110 msgid "Multiple files" msgstr "Multiple files" # File: calc/cp2k/cp2k_init.c, Line: 1160 # File: calc/cpmd/cpmd_init.c, Line: 984 msgid "The %s section" msgstr "The %s section" # File: calc/cp2k/cp2k_init.c, Line: 1164 msgid "The MOTION section - thermostat(s)" msgstr "The MOTION section - thermostat(s)" # File: calc/cp2k/cp2k_init.c, Line: 1168 msgid "The MOTION section - restart(s)" msgstr "The MOTION section - restart(s)" # File: calc/cp2k/cp2k_init.c, Line: 1228 msgid " Finalize the creation of the CP2K input files now !" msgstr " Finalize the creation of the CP2K input files now !" # File: calc/cp2k/cp2k_init.c, Line: 1231 # File: calc/cpmd/cpmd_init.c, Line: 1697 # File: calc/dl_poly/dlp_field.c, Line: 4447 msgid "\n \tNote: You can re-open this assistant later if required to adjust your choices\n" msgstr "\n \tNote: You can re-open this assistant later if required to adjust your choices\n" # File: calc/cp2k/cp2k_init.c, Line: 1233 msgid "Create the input files now !" msgstr "Create the input files now !" # File: calc/cp2k/cp2k_mol.c, Line: 147 msgid "Fragment %d has been selected but no coordinates appear to be frozen !\n" "Unselect fragment %d or select coordinate(s) to freeze !" msgstr "Fragment %d has been selected but no coordinates appear to be frozen !\n" "Unselect fragment %d or select coordinate(s) to freeze !" # File: calc/cp2k/cp2k_mol.c, Line: 180 # File: calc/dl_poly/dlp_mol.c, Line: 330 msgid "Fragments N°%d" msgstr "Fragments N°%d" # File: calc/cp2k/cp2k_mol.c, Line: 188 # File: calc/dl_poly/dlp_mol.c, Line: 338 msgid "%s and %d have been selected !" msgstr "%s and %d have been selected !" # File: calc/cp2k/cp2k_mol.c, Line: 189 msgid "%s\nConfirm this choice and fix these fragments ?" msgstr "%s\nConfirm this choice and fix these fragments ?" # File: calc/cp2k/cp2k_mol.c, Line: 193 # File: calc/dl_poly/dlp_mol.c, Line: 343 msgid "Fragment N°%d has been selected !" msgstr "Fragment N°%d has been selected !" # File: calc/cp2k/cp2k_mol.c, Line: 194 msgid "%s\nConfirm this choice and fix this fragment ?" msgstr "%s\nConfirm this choice and fix this fragment ?" # File: calc/cp2k/cp2k_mol.c, Line: 248 msgid "Please select the fragment(s) to fix" msgstr "Please select the fragment(s) to fix" # File: calc/cp2k/cp2k_mol.c, Line: 256 # File: calc/cpmd/cpmd_nose.c, Line: 1216 # File: calc/dl_poly/dlp_edit.c, Line: 1184 # File: calc/dl_poly/dlp_mol.c, Line: 478 msgid "Viz.3D & Select" msgstr "Viz.3D & Select" # File: calc/cp2k/cp2k_print.c, Line: 130 msgid "!\n" "! Always a FORCE_EVAL section that describes\n" "! the method to compute energy and forces\n" "!\n" "&FORCE_EVAL\n" " METHOD QUICKSTEP\n" " &DFT\n" "! First specify files that will be used thereafter \n" " BASIS_SET_FILE_NAME " msgstr "!\n" "! Always a FORCE_EVAL section that describes\n" "! the method to compute energy and forces\n" "!\n" "&FORCE_EVAL\n" " METHOD QUICKSTEP\n" " &DFT\n" "! First specify files that will be used thereafter \n" " BASIS_SET_FILE_NAME " # File: calc/cp2k/cp2k_print.c, Line: 138 msgid "\n" "! Going to the Multi-grids section\n" " &MGRID\n" " CUTOFF " msgstr "\n" "! Going to the Multi-grids section\n" " &MGRID\n" " CUTOFF " # File: calc/cp2k/cp2k_print.c, Line: 142 msgid " ! => Cutoff of the finest grid level\n" " NGRIDS " msgstr " ! => Cutoff of the finest grid level\n" " NGRIDS " # File: calc/cp2k/cp2k_print.c, Line: 145 msgid " ! => Number of multigrids to use, default = 4\n" " &END MGRID\n" "! Going to the Quickstep Setup section\n" " &QS\n" " METHOD " msgstr " ! => Number of multigrids to use, default = 4\n" " &END MGRID\n" "! Going to the Quickstep Setup section\n" " &QS\n" " METHOD " # File: calc/cp2k/cp2k_print.c, Line: 152 msgid "\n" " EPS_DEFAULT 1.0E-12 ! => Default value is 1.0E-10\n" " MAP_CONSISTENT TRUE ! => This is the default value\n" msgstr "\n" " EPS_DEFAULT 1.0E-12 ! => Default value is 1.0E-10\n" " MAP_CONSISTENT TRUE ! => This is the default value\n" # File: calc/cp2k/cp2k_print.c, Line: 153 msgid " EXTRAPOLATION_ORDER 3 ! => This is the default value\n" " &END QS\n" msgstr " EXTRAPOLATION_ORDER 3 ! => This is the default value\n" " &END QS\n" # File: calc/cp2k/cp2k_print.c, Line: 155 msgid "! Going to the Self Consistent Field section\n" " &SCF\n" "! Maximum number of cycle\n" " SCF_GUESS " msgstr "! Going to the Self Consistent Field section\n" " &SCF\n" "! Maximum number of cycle\n" " SCF_GUESS " # File: calc/cp2k/cp2k_print.c, Line: 160 msgid " ! => Initial guess for the wave-function\n" " MAX_SCF " msgstr " ! => Initial guess for the wave-function\n" " MAX_SCF " # File: calc/cp2k/cp2k_print.c, Line: 162 msgid " ! => Maximum number of SCF cycles\n" " EPS_SCF " msgstr " ! => Maximum number of SCF cycles\n" " EPS_SCF " # File: calc/cp2k/cp2k_print.c, Line: 165 msgid " ! => Threshold for the SCF convergence\n" "! If after the ${SCF_NCYCLES} first SCF steps no convergence has been reached\n" "! more SCF cycles can be done updating the preconditioner. \n" "! Detail information is then presented in the 'Outer' SCF section\n" " &OUTER_SCF\n" " MAX_SCF " msgstr " ! => Threshold for the SCF convergence\n" "! If after the ${SCF_NCYCLES} first SCF steps no convergence has been reached\n" "! more SCF cycles can be done updating the preconditioner. \n" "! Detail information is then presented in the 'Outer' SCF section\n" " &OUTER_SCF\n" " MAX_SCF " # File: calc/cp2k/cp2k_print.c, Line: 171 msgid " ! => We update the preconditioner and start a new SCF cycle\n" " ! up to ${SCF_NCYCLES} x ${SCF_OCYCLES} can be computed\n" " EPS_SCF " msgstr " ! => We update the preconditioner and start a new SCF cycle\n" " ! up to ${SCF_NCYCLES} x ${SCF_OCYCLES} can be computed\n" " EPS_SCF " # File: calc/cp2k/cp2k_print.c, Line: 175 msgid " ! => Convergence threshold for the extra cycles\n" " &END OUTER_SCF\n" "\n" "! Going to the Orbital Transformation section\n" " &OT ON\n" " MINIMIZER " msgstr " ! => Convergence threshold for the extra cycles\n" " &END OUTER_SCF\n" "\n" "! Going to the Orbital Transformation section\n" " &OT ON\n" " MINIMIZER " # File: calc/cp2k/cp2k_print.c, Line: 184 msgid "\n" " PRECONDITIONER FULL_ALL ! => Preconditioner for the minimization scheme,\n" " ! FULL_ALL is the most effective state selective\n" " ! preconditioner and is based on diagonalization\n" " ENERGY_GAP 0.001 ! => Underestimated value of the Gap (HOMO-LUMO) in a.u.\n" " ! to be used with the FULL_ALL preconditioner\n" " &END OT\n" "\n" " &PRINT\n" "! To tune the printing of the restart file\n" " &RESTART\n" " LOG_PRINT_KEY T ! => Printing on screen when restart file is written\n" " &EACH\n" " QS_SCF 0 ! => Never write restart file(s) during the SCF cycle\n" msgstr "\n" " PRECONDITIONER FULL_ALL ! => Preconditioner for the minimization scheme,\n" " ! FULL_ALL is the most effective state selective\n" " ! preconditioner and is based on diagonalization\n" " ENERGY_GAP 0.001 ! => Underestimated value of the Gap (HOMO-LUMO) in a.u.\n" " ! to be used with the FULL_ALL preconditioner\n" " &END OT\n" "\n" " &PRINT\n" "! To tune the printing of the restart file\n" " &RESTART\n" " LOG_PRINT_KEY T ! => Printing on screen when restart file is written\n" " &EACH\n" " QS_SCF 0 ! => Never write restart file(s) during the SCF cycle\n" # File: calc/cp2k/cp2k_print.c, Line: 198 msgid " &END PRINT\n" "\n" " &END SCF\n" "! Going to the exchange-correlation section\n" " &XC\n" " &XC_FUNCTIONAL FUNCTIONAL\n" " &END XC_FUNCTIONAL\n" msgstr " &END PRINT\n" "\n" " &END SCF\n" "! Going to the exchange-correlation section\n" " &XC\n" " &XC_FUNCTIONAL FUNCTIONAL\n" " &END XC_FUNCTIONAL\n" # File: calc/cp2k/cp2k_print.c, Line: 204 msgid "! Spin polarized calculation\n" " UKS " msgstr "! Spin polarized calculation\n" " UKS " # File: calc/cp2k/cp2k_print.c, Line: 313 msgid "!\n" "! Always a SUBSYS section that describes\n" "! the chemistry and the periodicity of the system\n" "!\n" "&SUBSYS\n" " &CELL\n" " PERIODIC " msgstr "!\n" "! Always a SUBSYS section that describes\n" "! the chemistry and the periodicity of the system\n" "!\n" "&SUBSYS\n" " &CELL\n" " PERIODIC " # File: calc/cp2k/cp2k_print.c, Line: 324 msgid "\n" " &END CELL\n" " &TOPOLOGY\n" "! Using an XYZ file, coordinates are always Cartesian and in angstrom\n" " COORDINATE XYZ\n" " COORD_FILE_NAME " msgstr "\n" " &END CELL\n" " &TOPOLOGY\n" "! Using an XYZ file, coordinates are always Cartesian and in angstrom\n" " COORDINATE XYZ\n" " COORD_FILE_NAME " # File: calc/cp2k/cp2k_print.c, Line: 345 msgid " ! => Restricted Open Kohn-Sham calculation\n" " &LOW_SPIN_ROKS\n" " ENERGY_SCALING " msgstr " ! => Restricted Open Kohn-Sham calculation\n" " &LOW_SPIN_ROKS\n" " ENERGY_SCALING " # File: calc/cp2k/cp2k_print.c, Line: 561 msgid "!\n" "! Always a MOTION section that describes\n" "! how to move the atoms\n" "!\n" msgstr "!\n" "! Always a MOTION section that describes\n" "! how to move the atoms\n" "!\n" # File: calc/cp2k/cp2k_print.c, Line: 710 msgid "! What follow is tricky and tests are recommended\n" "! Atomic basis set and pseudo-potential must be provided for all chemical species\n" "! the exact sequences '${BASIS_FOR_*}' '${POTENTIAL_FOR_*}' appear\n" "! inside the files that contain respectively the basis sets and the pseudo-potentials\n" "! in front of the name of the '*' element\n" msgstr "! What follow is tricky and tests are recommended\n" "! Atomic basis set and pseudo-potential must be provided for all chemical species\n" "! the exact sequences '${BASIS_FOR_*}' '${POTENTIAL_FOR_*}' appear\n" "! inside the files that contain respectively the basis sets and the pseudo-potentials\n" "! in front of the name of the '*' element\n" # File: calc/cp2k/cp2k_print.c, Line: 210 msgid " EXTRAPOLATION ASPC ! => ASPC recommended for MD, PS otherwise\n" msgstr " EXTRAPOLATION ASPC ! => ASPC recommended for MD, PS otherwise\n" # File: calc/cp2k/cp2k_print.c, Line: 211 msgid " EXTRAPOLATION PS ! => ASPC recommended for MD, PS otherwise\n" msgstr " EXTRAPOLATION PS ! => ASPC recommended for MD, PS otherwise\n" # File: calc/cp2k/cp2k_print.c, Line: 213 msgid " ! => Write restart file every ${OUT_STEPS} SCF steps\n" msgstr " ! => Write restart file every ${OUT_STEPS} SCF steps\n" # File: calc/cp2k/cp2k_print.c, Line: 214 msgid " ! => Write restart file every ${OUT_STEPS} GEO_OPT steps\n" msgstr " ! => Write restart file every ${OUT_STEPS} GEO_OPT steps\n" # File: calc/cp2k/cp2k_print.c, Line: 215 msgid " ! => Write restart file every ${OUT_STEPS} MD steps\n" msgstr " ! => Write restart file every ${OUT_STEPS} MD steps\n" # File: calc/cp2k/cp2k_print.c, Line: 484 msgid "\n! Thermostat N°%d" msgstr "\n! Thermostat N°%d" # File: calc/cp2k/cp2k_print.c, Line: 652 msgid "\t%d\n# This file was prepared using %s" msgstr "\t%d\n# This file was prepared using %s" # File: calc/cp2k/cp2k_print.c, Line: 744 msgid "! This file contains the restart information:" msgstr "! This file contains the restart information:" # File: calc/cp2k/cp2k_print.c, Line: 745 msgid "! This file contains the basis set(s):" msgstr "! This file contains the basis set(s):" # File: calc/cp2k/cp2k_print.c, Line: 746 msgid "! This file contains the pseudo-potential(s):" msgstr "! This file contains the pseudo-potential(s):" # File: calc/cp2k/cp2k_print.c, Line: 747 msgid "! This file contains the wave-function:" msgstr "! This file contains the wave-function:" # File: calc/cp2k/cp2k_print.c, Line: 748 msgid "! This file contains the atomic coordinates in XYZ format:" msgstr "! This file contains the atomic coordinates in XYZ format:" # File: calc/cp2k/cp2k_print.c, Line: 856 msgid "\t\t! A file is required !" msgstr "\t\t! A file is required !" # File: calc/cp2k/cp2k_print.c, Line: 986 msgid "\t\t! A keyword is required !" msgstr "\t\t! A keyword is required !" # File: calc/cp2k/cp2k_print.c, Line: 1025 msgid "! The mandatory FORCE_EVAL section include file\n" msgstr "! The mandatory FORCE_EVAL section include file\n" # File: calc/cp2k/cp2k_print.c, Line: 1034 msgid "! The mandatory MOTION section include file\n" msgstr "! The mandatory MOTION section include file\n" # File: calc/cp2k/cp2k_print.c, Line: 190 msgid " LOG_PRINT_KEY T ! => Printing on screen when restart file is written\n" msgstr " LOG_PRINT_KEY T ! => Printing on screen when restart file is written\n" # File: calc/cp2k/cp2k_print.c, Line: 1181 msgid "! The mandatory SUBSYS section include file\n" msgstr "! The mandatory SUBSYS section include file\n" # File: calc/cpmd/cpmd_atoms.c, Line: 152 msgid "Configuration for dummy atom N°%d: " msgstr "Configuration for dummy atom N°%d: " # File: calc/cpmd/cpmd_atoms.c, Line: 157 msgid "Type of dummy atom:" msgstr "Type of dummy atom:" # File: calc/cpmd/cpmd_atoms.c, Line: 159 msgid "fixed in space:" msgstr "fixed in space:" # File: calc/cpmd/cpmd_atoms.c, Line: 160 msgid "calculated by\nthe arithmetic mean of the coordinates of the selected atom(s)" msgstr "calculated by\nthe arithmetic mean of the coordinates of the selected atom(s)" # File: calc/cpmd/cpmd_atoms.c, Line: 161 msgid "calculated by\nthe center of mass of the coordinates of the selected atom(s)" msgstr "calculated by\nthe center of mass of the coordinates of the selected atom(s)" # File: calc/cpmd/cpmd_atoms.c, Line: 171 msgid "The coordinates of the dummy atom are %s" msgstr "The coordinates of the dummy atom are %s" # File: calc/cpmd/cpmd_atoms.c, Line: 187 msgid "Dummy %s coordinate: " msgstr "Dummy %s coordinate: " # File: calc/cpmd/cpmd_atoms.c, Line: 419 msgid "You must select %d dummy atom(s) to be deleted !" msgstr "You must select %d dummy atom(s) to be deleted !" # File: calc/cpmd/cpmd_atoms.c, Line: 443 msgid "Select the %d dummy atom(s) to be removed" msgstr "Select the %d dummy atom(s) to be removed" # File: calc/cpmd/cpmd_atoms.c, Line: 556 msgid "Do you really want to add %d dummy atom(s) ?" msgstr "Do you really want to add %d dummy atom(s) ?" # File: calc/cpmd/cpmd_atoms.c, Line: 557 msgid "Adding dummy atom(s) ?" msgstr "Adding dummy atom(s) ?" # File: calc/cpmd/cpmd_atoms.c, Line: 584 msgid "Number of dummy atom(s):" msgstr "Number of dummy atom(s):" # File: calc/cpmd/cpmd_atoms.c, Line: 588 msgid "Dummy atom to configure: " msgstr "Dummy atom to configure: " # File: calc/cpmd/cpmd_atoms.c, Line: 607 msgid "Add and configure constraint(s)" msgstr "Add and configure constraint(s)" # File: calc/cpmd/cpmd_atoms.c, Line: 607 msgid "Add and configure dummy atoms" msgstr "Add and configure dummy atoms" # File: calc/cpmd/cpmd_init.c, Line: 749 msgid "\t * electronic density(ies) or/and wavefunction(s)\n" "\t ** as many index(es) to be supplied on the next line:\n" "\t\t > 0 for electronic density\n" "\t\t < 0 for wavefunction" msgstr "\t * electronic density(ies) or/and wavefunction(s)\n" "\t ** as many index(es) to be supplied on the next line:\n" "\t\t > 0 for electronic density\n" "\t\t < 0 for wavefunction" # File: calc/cpmd/cpmd_init.c, Line: 1491 msgid "The input files 'forces.inc', 'system.inc', 'motion.inc' and 'coord.inc'\n" "as well as the files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file." msgstr "The input files 'forces.inc', 'system.inc', 'motion.inc' and 'coord.inc'\n" "as well as the files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file." # File: calc/cpmd/cpmd_init.c, Line: 1499 msgid "The input files 'forces.inc', 'system.inc', and 'coord.inc'\n" "as well as the files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file." msgstr "The input files 'forces.inc', 'system.inc', and 'coord.inc'\n" "as well as the files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file." # File: calc/cpmd/cpmd_init.c, Line: 1494 msgid "The files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file." msgstr "The files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file." # File: calc/cpmd/cpmd_init.c, Line: 1618 msgid " Project name: %s\n" " Total number of atoms: %d\n" " Number of chemical species: %d" msgstr " Project name: %s\n" " Total number of atoms: %d\n" " Number of chemical species: %d" # File: calc/cpmd/cpmd_init.c, Line: 1690 msgid "\tThis assistant will help you to setup a %s %s\n" "\tcalculation using %s 3D model as starting point\n" "\n" "Please note that the %s code offers so many calculation options that it is not possible\n" "to provide a description and offer a comprehensive usage guide for each of them. \n" "Therefore this assistant only provides help towards basics and / or frequently used %s instructions. \n" "\n" "In any case if you intent to use the %s code please refer to the user manual." msgstr "\tThis assistant will help you to setup a %s %s\n" "\tcalculation using %s 3D model as starting point\n" "\n" "Please note that the %s code offers so many calculation options that it is not possible\n" "to provide a description and offer a comprehensive usage guide for each of them. \n" "Therefore this assistant only provides help towards basics and / or frequently used %s instructions. \n" "\n" "In any case if you intent to use the %s code please refer to the user manual." # File: calc/cpmd/cpmd_init.c, Line: 113 msgid "provides an informal description of the system and the calculation to be performed" msgstr "provides an informal description of the system and the calculation to be performed" # File: calc/cpmd/cpmd_init.c, Line: 115 msgid "provides the exchange and correlation functional (DFT) parameters" msgstr "provides the exchange and correlation functional (DFT) parameters" # File: calc/cpmd/cpmd_init.c, Line: 116 msgid "describes the implementation of the van der Waals interactions" msgstr "describes the implementation of the van der Waals interactions" # File: calc/cpmd/cpmd_init.c, Line: 117 msgid "provides details about the physical properties to be calculated" msgstr "provides details about the physical properties to be calculated" # File: calc/cpmd/cpmd_init.c, Line: 118 msgid "describes the symmetry and periodicity of the system" msgstr "describes the symmetry and periodicity of the system" # File: calc/cpmd/cpmd_init.c, Line: 119 msgid "describes the atomic species, pseudo-potentials and coordinates" msgstr "describes the atomic species, pseudo-potentials and coordinates" # File: calc/cpmd/cpmd_init.c, Line: 123 msgid "Fictitious electronic mass:" msgstr "Fictitious electronic mass:" # File: calc/cpmd/cpmd_init.c, Line: 123 msgid "Local Spin Density" msgstr "Local Spin Density" # File: calc/cpmd/cpmd_init.c, Line: 123 msgid "van der Walls interactions" msgstr "van der Walls interactions" # File: calc/cpmd/cpmd_init.c, Line: 124 msgid "Density cutoff*:" msgstr "Density cutoff*:" # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Use Angströms (default a.u.)" msgstr "Use Angströms (default a.u.)" # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Lattice:" msgstr "Lattice:" # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Parameters:" msgstr "Parameters:" # File: calc/cpmd/cpmd_init.c, Line: 127 # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "Angles:" msgstr "Angles:" # File: calc/cpmd/cpmd_init.c, Line: 127 msgid "Cutoff for the plane wave basis:" msgstr "Cutoff for the plane wave basis:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Use constraints" msgstr "Use constraints" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Freeze:" msgstr "Freeze:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Use dummy atoms:" msgstr "Use dummy atoms:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Atom type:" msgstr "Atom type:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Maximum angular momentum l:" msgstr "Maximum angular momentum l:" # File: calc/cpmd/cpmd_init.c, Line: 128 msgid "Local angular momentum l:" msgstr "Local angular momentum l:" # File: calc/cpmd/cpmd_init.c, Line: 150 msgid "Slater Exchange Only" msgstr "Slater Exchange Only" # File: calc/cpmd/cpmd_init.c, Line: 150 msgid "Extended B88+PW91+LYP88" msgstr "Extended B88+PW91+LYP88" # File: calc/cpmd/cpmd_init.c, Line: 151 msgid "PBE Revised for Solids" msgstr "PBE Revised for Solids" # File: calc/cpmd/cpmd_init.c, Line: 151 msgid "Revised - PBE" msgstr "Revised - PBE" # File: calc/cpmd/cpmd_init.c, Line: 151 msgid "Optimized Becke 88" msgstr "Optimized Becke 88" # File: calc/cpmd/cpmd_init.c, Line: 152 msgid "Becke One-parameter Hybrid + LYP" msgstr "Becke One-parameter Hybrid + LYP" # File: calc/cpmd/cpmd_init.c, Line: 152 msgid "Extended Hybrid + LYP" msgstr "Extended Hybrid + LYP" # File: calc/cpmd/cpmd_init.c, Line: 154 msgid "Face Centered Cubic (FCC)" msgstr "Face Centered Cubic (FCC)" # File: calc/cpmd/cpmd_init.c, Line: 154 msgid "Body Centered Cubic (BCC)" msgstr "Body Centered Cubic (BCC)" # File: calc/cpmd/cpmd_init.c, Line: 155 msgid "Body Centered Tetragonal (BCT)" msgstr "Body Centered Tetragonal (BCT)" # File: calc/cpmd/cpmd_init.c, Line: 155 msgid "Orthorombic" msgstr "Orthorombic" # File: calc/cpmd/cpmd_init.c, Line: 156 msgid "Default (a, b/a, c/a)" msgstr "Default (a, b/a, c/a)" # File: calc/cpmd/cpmd_init.c, Line: 156 msgid "Absolute (a, b, c)" msgstr "Absolute (a, b, c)" # File: calc/cpmd/cpmd_init.c, Line: 157 msgid "Default (cos α, cos β, cos γ)" msgstr "Default (cos α, cos β, cos γ)" # File: calc/cpmd/cpmd_init.c, Line: 157 msgid "Degrees (α, β, γ)" msgstr "Degrees (α, β, γ)" # File: calc/cpmd/cpmd_init.c, Line: 158 msgid "Some Atoms" msgstr "Some Atoms" # File: calc/cpmd/cpmd_init.c, Line: 158 msgid "Some Coordinates" msgstr "Some Coordinates" # File: calc/cpmd/cpmd_init.c, Line: 169,170 msgid "Convergence criteria*:" msgstr "Convergence criteria*:" # File: calc/cpmd/cpmd_init.c, Line: 169,170 msgid "Optimizer:" msgstr "Optimizer:" # File: calc/cpmd/cpmd_init.c, Line: 169,170 msgid "Max steps:" msgstr "Max steps:" # File: calc/cpmd/cpmd_init.c, Line: 169,170 msgid "Integration step:" msgstr "Integration step:" # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Max MD steps: " msgstr "Max MD steps: " # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Time step:" msgstr "Time step:" # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Barostat:" msgstr "Barostat:" # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Ions" msgstr "Ions" # File: calc/cpmd/cpmd_init.c, Line: 171,172 msgid "Factor:" msgstr "Factor:" # File: calc/cpmd/cpmd_init.c, Line: 171 msgid "Fictitious electrons" msgstr "Fictitious electrons" # File: calc/cpmd/cpmd_init.c, Line: 173 msgid "Number of unoccupied states:" msgstr "Number of unoccupied states:" # File: calc/cpmd/cpmd_init.c, Line: 173 msgid "3D visualization*" msgstr "3D visualization*" # File: calc/cpmd/cpmd_init.c, Line: 173 msgid "Number of objects**:" msgstr "Number of objects**:" # File: calc/cpmd/cpmd_init.c, Line: 174 msgid "Property to compute:" msgstr "Property to compute:" # File: calc/cpmd/cpmd_init.c, Line: 192 msgid "Wavefunction Optimization" msgstr "Wavefunction Optimization" # File: calc/cpmd/cpmd_init.c, Line: 194 msgid "CPMD Molecular Dynamics" msgstr "CPMD Molecular Dynamics" # File: calc/cpmd/cpmd_init.c, Line: 195 msgid "Born-Oppenheimer Molecular Dynamics" msgstr "Born-Oppenheimer Molecular Dynamics" # File: calc/cpmd/cpmd_init.c, Line: 196 msgid "Kohn-Sham Eigen Values" msgstr "Kohn-Sham Eigen Values" # File: calc/cpmd/cpmd_init.c, Line: 198 msgid "Calculation of Physical Properties" msgstr "Calculation of Physical Properties" # File: calc/cpmd/cpmd_init.c, Line: 202 msgid "Preconditioned Gradient" msgstr "Preconditioned Gradient" # File: calc/cpmd/cpmd_init.c, Line: 202,203 msgid "Direct Inversion of Iterative Subspace" msgstr "Direct Inversion of Iterative Subspace" # File: calc/cpmd/cpmd_init.c, Line: 203 msgid "Quasi-Newton method" msgstr "Quasi-Newton method" # File: calc/cpmd/cpmd_init.c, Line: 206 msgid "Finite differences of first derivatives" msgstr "Finite differences of first derivatives" # File: calc/cpmd/cpmd_init.c, Line: 206 msgid "Linear response of ionic displacement" msgstr "Linear response of ionic displacement" # File: calc/cpmd/cpmd_init.c, Line: 206 msgid "Precalculated Hessian" msgstr "Precalculated Hessian" # File: calc/cpmd/cpmd_init.c, Line: 214 msgid "Gobal" msgstr "Gobal" # File: calc/cpmd/cpmd_init.c, Line: 214 msgid "Local" msgstr "Local" # File: calc/cpmd/cpmd_init.c, Line: 215 msgid "Controlled" msgstr "Controlled" # File: calc/cpmd/cpmd_init.c, Line: 216 msgid "Nosé-Hoover chains" msgstr "Nosé-Hoover chains" # File: calc/cpmd/cpmd_init.c, Line: 216 msgid "Adaptive Langevin" msgstr "Adaptive Langevin" # File: calc/cpmd/cpmd_init.c, Line: 216 msgid "Canonical sampling through velocity rescaling" msgstr "Canonical sampling through velocity rescaling" # File: calc/cpmd/cpmd_init.c, Line: 560 msgid "Configure constraints" msgstr "Configure constraints" # File: calc/cpmd/cpmd_init.c, Line: 560 msgid "Configure dummy atoms" msgstr "Configure dummy atoms" # File: calc/cpmd/cpmd_init.c, Line: 500 msgid "%s atom(s)" msgstr "%s atom(s)" # File: calc/cpmd/cpmd_init.c, Line: 684 msgid "Annealing:" msgstr "Annealing:" # File: calc/cpmd/cpmd_init.c, Line: 772,860 msgid "%s option(s)" msgstr "%s option(s)" # File: calc/cpmd/cpmd_init.c, Line: 853 msgid "Calculation to be performed:" msgstr "Calculation to be performed:" # File: calc/cpmd/cpmd_init.c, Line: 888 msgid "General %s section option(s)" msgstr "General %s section option(s)" # File: calc/cpmd/cpmd_init.c, Line: 984 msgid "The %s section - Calculation options" msgstr "The %s section - Calculation options" # File: calc/cpmd/cpmd_init.c, Line: 988 msgid "The %s section - Thermostat options" msgstr "The %s section - Thermostat options" # File: calc/cpmd/cpmd_init.c, Line: 992 msgid "The %s section - RESTART options" msgstr "The %s section - RESTART options" # File: calc/cpmd/cpmd_init.c, Line: 1033 msgid " Finalize the creation of the CPMD input file now !" msgstr " Finalize the creation of the CPMD input file now !" # File: calc/cpmd/cpmd_init.c, Line: 1036 msgid "\n \tNote: You can re-open this assitant later if required to adjust your choices\n" msgstr "\n \tNote: You can re-open this assitant later if required to adjust your choices\n" # File: calc/cpmd/cpmd_init.c, Line: 1038 msgid "Create the input file now !" msgstr "Create the input file now !" # File: calc/cpmd/cpmd_init.c, Line: 1251 msgid "CP2K input file" msgstr "CP2K input file" # File: calc/cpmd/cpmd_init.c, Line: 1242 msgid " input file preview" msgstr " input file preview" # File: calc/cpmd/cpmd_init.c, Line: 1253 msgid " input files preview" msgstr " input files preview" # File: calc/cpmd/cpmd_init.c, Line: 1417 # File: calc/dl_poly/dlp_field.c, Line: 4715 msgid "Error while saving input file: %s\n Error: %s" msgstr "Error while saving input file: %s\n Error: %s" # File: calc/cpmd/cpmd_init.c, Line: 1463 msgid "Error while saving file %s: %s" msgstr "Error while saving file %s: %s" # File: calc/cpmd/cpmd_init.c, Line: 1535 msgid "CPMD input file (*.in)" msgstr "CPMD input file (*.in)" # File: calc/cpmd/cpmd_init.c, Line: 1535 msgid "CP2K input file (*.inp)" msgstr "CP2K input file (*.inp)" # File: calc/cpmd/cpmd_init.c, Line: 1538 # File: calc/dl_poly/dlp_field.c, Line: 4749 msgid "Saving %s input file(s)" msgstr "Saving %s input file(s)" # File: calc/cpmd/cpmd_init.c, Line: 1581 msgid "first-principles" msgstr "first-principles" # File: calc/cpmd/cpmd_init.c, Line: 1681 msgid "Basic %s - %s - calculation assistant" msgstr "Basic %s - %s - calculation assistant" # File: calc/cpmd/cpmd_init.c, Line: 1714 # File: calc/dl_poly/dlp_field.c, Line: 4892 msgid "Preview" msgstr "Preview" # File: calc/cpmd/cpmd_nose.c, Line: 1068 msgid "Atom %d has been selected but not coordinates are frozen !\n" "Unselect atom %d or select coordinate(s) to freeze !" msgstr "Atom %d has been selected but not coordinates are frozen !\n" "Unselect atom %d or select coordinate(s) to freeze !" # File: calc/cpmd/cpmd_nose.c, Line: 98 msgid "Initial temperature: " msgstr "Initial temperature: " # File: calc/cpmd/cpmd_nose.c, Line: 99,100 msgid "Target temperature: " msgstr "Target temperature: " # File: calc/cpmd/cpmd_nose.c, Line: 99 msgid "Tolerance: " msgstr "Tolerance: " # File: calc/cpmd/cpmd_nose.c, Line: 100 msgid "Target frequency: " msgstr "Target frequency: " # File: calc/cpmd/cpmd_nose.c, Line: 104 msgid "Time constant (Langevin): " msgstr "Time constant (Langevin): " # File: calc/cpmd/cpmd_nose.c, Line: 104 msgid "Time constant (Nosë-Hoover): " msgstr "Time constant (Nosë-Hoover): " # File: calc/cpmd/cpmd_nose.c, Line: 104 # File: calc/dl_poly/dlp_edit.c, Line: 2374 msgid "Mass: " msgstr "Mass: " # File: calc/cpmd/cpmd_nose.c, Line: 105,107 msgid "Time constant: " msgstr "Time constant: " # File: calc/cpmd/cpmd_nose.c, Line: 107 # File: calc/dl_poly/dlp_edit.c, Line: 2558,2614 msgid "Length: " msgstr "Length: " # File: calc/cpmd/cpmd_nose.c, Line: 107 msgid "Multiple time steps: " msgstr "Multiple time steps: " # File: calc/cpmd/cpmd_nose.c, Line: 107 msgid "Yoshida integrator: " msgstr "Yoshida integrator: " # File: calc/cpmd/cpmd_nose.c, Line: 439 msgid "You must select %d thermostat(s) to be deleted !" msgstr "You must select %d thermostat(s) to be deleted !" # File: calc/cpmd/cpmd_nose.c, Line: 463 msgid "Select the %d thermostat(s) to be removed" msgstr "Select the %d thermostat(s) to be removed" # File: calc/cpmd/cpmd_nose.c, Line: 468 msgid "Target T°" msgstr "Target T°" # File: calc/cpmd/cpmd_nose.c, Line: 468 msgid "Frequency" msgstr "Frequency" # File: calc/cpmd/cpmd_nose.c, Line: 625 # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Target temperature:" msgstr "Target temperature:" # File: calc/cpmd/cpmd_nose.c, Line: 1045 # File: calc/dl_poly/dlp_atom.c, Line: 308 msgid "%d atoms have been selected !" msgstr "%d atoms have been selected !" # File: calc/cpmd/cpmd_nose.c, Line: 1049 # File: calc/dl_poly/dlp_atom.c, Line: 313 msgid "A single atom has been selected !" msgstr "A single atom has been selected !" # File: calc/cpmd/cpmd_nose.c, Line: 1053 msgid "Not at single atom has been selected !" msgstr "Not at single atom has been selected !" # File: calc/cpmd/cpmd_nose.c, Line: 1055 msgid "%s\nis this correct ?" msgstr "%s\nis this correct ?" # File: calc/cpmd/cpmd_nose.c, Line: 1216 # File: calc/dl_poly/dlp_ff_match.c, Line: 927 # File: calc/dl_poly/dlp_field.c, Line: 924 msgid "Species" msgstr "Species" # File: calc/cpmd/cpmd_nose.c, Line: 1216,1217 msgid "Id. (*)" msgstr "Id. (*)" # File: calc/cpmd/cpmd_nose.c, Line: 1237 msgid "Select atom(s) to construct dummy N°%d" msgstr "Select atom(s) to construct dummy N°%d" # File: calc/cpmd/cpmd_nose.c, Line: 1241 msgid "Select atom(s) to fix" msgstr "Select atom(s) to fix" # File: calc/cpmd/cpmd_nose.c, Line: 1246 msgid "Select atom(s) and coordinate(s) to fix" msgstr "Select atom(s) and coordinate(s) to fix" # File: calc/cpmd/cpmd_nose.c, Line: 1251 msgid "Add atom(s) to thermostat N°%d" msgstr "Add atom(s) to thermostat N°%d" # File: calc/cpmd/cpmd_nose.c, Line: 1332 msgid " (*) Order of appearance in the input file" msgstr " (*) Order of appearance in the input file" # File: calc/cpmd/cpmd_nose.c, Line: 1342 msgid "All non-thermostated atom(s)" msgstr "All non-thermostated atom(s)" # File: calc/cpmd/cpmd_nose.c, Line: 1342 msgid "All atom(s)" msgstr "All atom(s)" # File: calc/cpmd/cpmd_nose.c, Line: 1389,1440 # File: calc/dl_poly/dlp_edit.c, Line: 1682,1698,1714,1728,2414,2436,2531,2586,2644,2777 msgid "Not picked yet !" msgstr "Not picked yet !" # File: calc/cpmd/cpmd_nose.c, Line: 1394,1445 # File: calc/dl_poly/dlp_edit.c, Line: 1605,1719,2396,2591,2649 msgid "%d atom(s)" msgstr "%d atom(s)" # File: calc/cpmd/cpmd_nose.c, Line: 1436 msgid "Atom(s) selection: " msgstr "Atom(s) selection: " # File: calc/cpmd/cpmd_nose.c, Line: 1467 msgid "Configuration for thermostat N°%d: " msgstr "Configuration for thermostat N°%d: " # File: calc/cpmd/cpmd_nose.c, Line: 1510 msgid "Thermostat" msgstr "Thermostat" # File: calc/cpmd/cpmd_nose.c, Line: 1510 msgid "Dummy atom" msgstr "Dummy atom" # File: calc/cpmd/cpmd_nose.c, Line: 1610 msgid "Do you really want to add %d thermostat(s) ?" msgstr "Do you really want to add %d thermostat(s) ?" # File: calc/cpmd/cpmd_nose.c, Line: 1611 msgid "Adding thermostat(s) ?" msgstr "Adding thermostat(s) ?" # File: calc/cpmd/cpmd_nose.c, Line: 1626 msgid "It is not possible to create so many thermostats" msgstr "It is not possible to create so many thermostats" # File: calc/cpmd/cpmd_nose.c, Line: 1632 msgid "All atoms arleady have a thermostat assigned" msgstr "All atoms arleady have a thermostat assigned" # File: calc/cpmd/cpmd_nose.c, Line: 1713 msgid "Number of thermostat(s): " msgstr "Number of thermostat(s): " # File: calc/cpmd/cpmd_nose.c, Line: 1717 msgid "Thermostat to configure: " msgstr "Thermostat to configure: " # File: calc/cpmd/cpmd_nose.c, Line: 1779 msgid "Thermostat type: " msgstr "Thermostat type: " # File: calc/cpmd/cpmd_nose.c, Line: 1893 msgid "Ionic subsystem thermostat: " msgstr "Ionic subsystem thermostat: " # File: calc/cpmd/cpmd_nose.c, Line: 1893 msgid "Thermostat: " msgstr "Thermostat: " # File: calc/cpmd/cpmd_nose.c, Line: 1916 msgid "Fictitious electronic subsystem: " msgstr "Fictitious electronic subsystem: " # File: calc/cpmd/cpmd_print.c, Line: 65 msgid " This input file was prepared using %s\n\n" msgstr " This input file was prepared using %s\n\n" # File: calc/cpmd/cpmd_restart.c, Line: 140 msgid "Initialization for the Wavefunction:" msgstr "Initialization for the Wavefunction:" # File: calc/cpmd/cpmd_restart.c, Line: 143 msgid "Random" msgstr "Random" # File: calc/cpmd/cpmd_restart.c, Line: 144 msgid "Atomic Pseudo Wavefunctions" msgstr "Atomic Pseudo Wavefunctions" # File: calc/cpmd/cpmd_restart.c, Line: 145 msgid "Use a RESTART.* File" msgstr "Use a RESTART.* File" # File: calc/cpmd/cpmd_restart.c, Line: 151 msgid "Save the information required for a restart every:" msgstr "Save the information required for a restart every:" # File: calc/cpmd/cpmd_restart.c, Line: 158 msgid "Number of restart file(s): " msgstr "Number of restart file(s): " # File: calc/cpmd/cpmd_restart.c, Line: 165 msgid "Create a trajectory" msgstr "Create a trajectory" # File: calc/cpmd/cpmd_restart.c, Line: 170 msgid "Save the atomic coordinates every: " msgstr "Save the atomic coordinates every: " # File: calc/cpmd/cpmd_restart.c, Line: 175 msgid "Write XYZ format" msgstr "Write XYZ format" # File: calc/cpmd/cpmd_restart.c, Line: 179 msgid "Write atomic forces" msgstr "Write atomic forces" # File: calc/cpmd/cpmd_restart.c, Line: 187 msgid "Print extra data in the global output file" msgstr "Print extra data in the global output file" # File: calc/cpmd/cpmd_restart.c, Line: 191 msgid "Save the extra information every: " msgstr "Save the extra information every: " # File: calc/cpmd/cpmd_restart.c, Line: 196 msgid "Select the information to print:" msgstr "Select the information to print:" # File: calc/dl_poly/dlp_atom.c, Line: 309 msgid "%s\nConfirm this choice and create a new field atom to describe them ?" msgstr "%s\nConfirm this choice and create a new field atom to describe them ?" # File: calc/dl_poly/dlp_atom.c, Line: 314 msgid "%s\nIs this correct, create a new field atom to describe it ?" msgstr "%s\nIs this correct, create a new field atom to describe it ?" # File: calc/dl_poly/dlp_atom.c, Line: 433 msgid "%d atoms selected !\nIs this correct ?" msgstr "%d atoms selected !\nIs this correct ?" # File: calc/dl_poly/dlp_atom.c, Line: 437 msgid "%d atoms selected !\nOnly a single atom is required !" msgstr "%d atoms selected !\nOnly a single atom is required !" # File: calc/dl_poly/dlp_atom.c, Line: 446 msgid "A single atom selected !\nIs this correct ?" msgstr "A single atom selected !\nIs this correct ?" # File: calc/dl_poly/dlp_atom.c, Line: 456 msgid "No atom selected !\nIs this correct ?" msgstr "No atom selected !\nIs this correct ?" # File: calc/dl_poly/dlp_atom.c, Line: 664 msgid "Merging with atom N°%d - %s !\nIs this correct ?" msgstr "Merging with atom N°%d - %s !\nIs this correct ?" # File: calc/dl_poly/dlp_atom.c, Line: 736 msgid "Select the field atom to merge atom \"%s\" with" msgstr "Select the field atom to merge atom \"%s\" with" # File: calc/dl_poly/dlp_atom.c, Line: 744 # File: calc/dl_poly/dlp_mol.c, Line: 761 msgid "Viz.3D & Merge with" msgstr "Viz.3D & Merge with" # File: calc/dl_poly/dlp_control.c, Line: 117 msgid "Molecular dynamics" msgstr "Molecular dynamics" # File: calc/dl_poly/dlp_control.c, Line: 216 msgid "Target temperature for the pseudo bath must be ≥ 1.0 K,\n" "Alternatively set value to 0.0 K to system temperature." msgstr "Target temperature for the pseudo bath must be ≥ 1.0 K,\n" "Alternatively set value to 0.0 K to system temperature." # File: calc/dl_poly/dlp_control.c, Line: 1590 msgid "The batch size or max. number of particles by batch\n" "must ∈ [1 - 10 000 000]" msgstr "The batch size or max. number of particles by batch\n" "must ∈ [1 - 10 000 000]" # File: calc/dl_poly/dlp_control.c, Line: 112 msgid "System information" msgstr "System information" # File: calc/dl_poly/dlp_control.c, Line: 113 msgid "Calculation details" msgstr "Calculation details" # File: calc/dl_poly/dlp_control.c, Line: 114 msgid "Non-bonded interactions" msgstr "Non-bonded interactions" # File: calc/dl_poly/dlp_control.c, Line: 115 msgid "Equilibration" msgstr "Equilibration" # File: calc/dl_poly/dlp_control.c, Line: 116 msgid "Thermodynamics" msgstr "Thermodynamics" # File: calc/dl_poly/dlp_control.c, Line: 118 msgid "Output options" msgstr "Output options" # File: calc/dl_poly/dlp_control.c, Line: 119 msgid "Computational details" msgstr "Computational details" # File: calc/dl_poly/dlp_control.c, Line: 129 msgid "Gentle Stochastic" msgstr "Gentle Stochastic" # File: calc/dl_poly/dlp_control.c, Line: 132 msgid "Two temperature model" msgstr "Two temperature model" # File: calc/dl_poly/dlp_control.c, Line: 133 msgid "Inhomogeneous Langevin" msgstr "Inhomogeneous Langevin" # File: calc/dl_poly/dlp_control.c, Line: 142 msgid "Relaxation speed constant (friction):" msgstr "Relaxation speed constant (friction):" # File: calc/dl_poly/dlp_control.c, Line: 143 msgid "Relaxation time:" msgstr "Relaxation time:" # File: calc/dl_poly/dlp_control.c, Line: 143 msgid "Softness [0.0 - 1.0]:" msgstr "Softness [0.0 - 1.0]:" # File: calc/dl_poly/dlp_control.c, Line: 144,145,146,148,149 msgid "Relaxation constant:" msgstr "Relaxation constant:" # File: calc/dl_poly/dlp_control.c, Line: 146 msgid "Langevin friction:" msgstr "Langevin friction:" # File: calc/dl_poly/dlp_control.c, Line: 147 msgid "Shardlow's splitting order:" msgstr "Shardlow's splitting order:" # File: calc/dl_poly/dlp_control.c, Line: 147 msgid "Global drag coefficient:" msgstr "Global drag coefficient:" # File: calc/dl_poly/dlp_control.c, Line: 148,149 msgid "Enhancement of relaxation constant:" msgstr "Enhancement of relaxation constant:" # File: calc/dl_poly/dlp_control.c, Line: 148,149 msgid "Cut-off particle velocity for friction enhancement:" msgstr "Cut-off particle velocity for friction enhancement:" # File: calc/dl_poly/dlp_control.c, Line: 161 msgid "Thermostat relaxation speed constant (friction):" msgstr "Thermostat relaxation speed constant (friction):" # File: calc/dl_poly/dlp_control.c, Line: 161 msgid "Barostat relaxation speed constant (friction):" msgstr "Barostat relaxation speed constant (friction):" # File: calc/dl_poly/dlp_control.c, Line: 162 msgid "Thermostat relaxation time:" msgstr "Thermostat relaxation time:" # File: calc/dl_poly/dlp_control.c, Line: 162 msgid "Barostat relaxation time:" msgstr "Barostat relaxation time:" # File: calc/dl_poly/dlp_control.c, Line: 162 msgid "Target surface tension:" msgstr "Target surface tension:" # File: calc/dl_poly/dlp_control.c, Line: 167 msgid "Area" msgstr "Area" # File: calc/dl_poly/dlp_control.c, Line: 167 msgid "Tension" msgstr "Tension" # File: calc/dl_poly/dlp_control.c, Line: 412 msgid "Semi-anisotropic constraint" msgstr "Semi-anisotropic constraint" # File: calc/dl_poly/dlp_control.c, Line: 467 msgid "Thermostat:" msgstr "Thermostat:" # File: calc/dl_poly/dlp_control.c, Line: 554 msgid "Use pseudo thermal bath" msgstr "Use pseudo thermal bath" # File: calc/dl_poly/dlp_control.c, Line: 556 msgid "Thermostat type:" msgstr "Thermostat type:" # File: calc/dl_poly/dlp_control.c, Line: 559 msgid "Langevin + Direct" msgstr "Langevin + Direct" # File: calc/dl_poly/dlp_control.c, Line: 559 msgid "Direct" msgstr "Direct" # File: calc/dl_poly/dlp_control.c, Line: 565 msgid "Thickness:" msgstr "Thickness:" # File: calc/dl_poly/dlp_control.c, Line: 570 msgid "Target T°:" msgstr "Target T°:" # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Verlet integrator:" msgstr "Verlet integrator:" # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Number of steps:" msgstr "Number of steps:" # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Time step δt:" msgstr "Time step δt:" # File: calc/dl_poly/dlp_control.c, Line: 581 msgid "Target pressure:" msgstr "Target pressure:" # File: calc/dl_poly/dlp_control.c, Line: 582 msgid "Shake iterations limit:" msgstr "Shake iterations limit:" # File: calc/dl_poly/dlp_control.c, Line: 582 msgid "Shake tolerance:" msgstr "Shake tolerance:" # File: calc/dl_poly/dlp_control.c, Line: 583 msgid "Rattle iterations limit:" msgstr "Rattle iterations limit:" # File: calc/dl_poly/dlp_control.c, Line: 583 msgid "Rattle tolerance:" msgstr "Rattle tolerance:" # File: calc/dl_poly/dlp_control.c, Line: 583 msgid "FIQA iterations limit:" msgstr "FIQA iterations limit:" # File: calc/dl_poly/dlp_control.c, Line: 583 msgid "FIQA quaternions tolerance:" msgstr "FIQA quaternions tolerance:" # File: calc/dl_poly/dlp_control.c, Line: 585 msgid "cycle(s)" msgstr "cycle(s)" # File: calc/dl_poly/dlp_control.c, Line: 586 msgid "Maximum time step:" msgstr "Maximum time step:" # File: calc/dl_poly/dlp_control.c, Line: 586 msgid "Maximum distance allowed:" msgstr "Maximum distance allowed:" # File: calc/dl_poly/dlp_control.c, Line: 586 msgid "Minimum distance allowed:" msgstr "Minimum distance allowed:" # File: calc/dl_poly/dlp_control.c, Line: 588 msgid "Velocity" msgstr "Velocity" # File: calc/dl_poly/dlp_control.c, Line: 588 msgid "Leapfrog" msgstr "Leapfrog" # File: calc/dl_poly/dlp_control.c, Line: 588 msgid "Fixed" msgstr "Fixed" # File: calc/dl_poly/dlp_control.c, Line: 588 msgid "Variable" msgstr "Variable" # File: calc/dl_poly/dlp_control.c, Line: 635 msgid "Variable time step information" msgstr "Variable time step information" # File: calc/dl_poly/dlp_control.c, Line: 722 msgid "Initiate impact on particle" msgstr "Initiate impact on particle" # File: calc/dl_poly/dlp_control.c, Line: 729 msgid "Index of the particle to impact: " msgstr "Index of the particle to impact: " # File: calc/dl_poly/dlp_control.c, Line: 729 msgid "Time step of impact:" msgstr "Time step of impact:" # File: calc/dl_poly/dlp_control.c, Line: 729 msgid "Energy of impact:" msgstr "Energy of impact:" # File: calc/dl_poly/dlp_control.c, Line: 729 msgid "Direction (from center of mass):" msgstr "Direction (from center of mass):" # File: calc/dl_poly/dlp_control.c, Line: 730 msgid "nth step" msgstr "nth step" # File: calc/dl_poly/dlp_control.c, Line: 769 msgid "on %s:" msgstr "on %s:" # File: calc/dl_poly/dlp_control.c, Line: 830 msgid "Time step details" msgstr "Time step details" # File: calc/dl_poly/dlp_control.c, Line: 854 msgid "Bond constraint(s) dynamics:" msgstr "Bond constraint(s) dynamics:" # File: calc/dl_poly/dlp_control.c, Line: 854 msgid "Rotational motion of rigid body(ies):" msgstr "Rotational motion of rigid body(ies):" # File: calc/dl_poly/dlp_control.c, Line: 890 msgid "Initiate impact on particle" msgstr "Initiate impact on particle" # File: calc/dl_poly/dlp_control.c, Line: 891 msgid "Impact details" msgstr "Impact details" # File: calc/dl_poly/dlp_control.c, Line: 901 msgid "Equilibrate for the first:" msgstr "Equilibrate for the first:" # File: calc/dl_poly/dlp_control.c, Line: 901 msgid "Scale temperature:" msgstr "Scale temperature:" # File: calc/dl_poly/dlp_control.c, Line: 901 msgid "Cap forces:" msgstr "Cap forces:" # File: calc/dl_poly/dlp_control.c, Line: 902 msgid "Resample the momenta distribution:" msgstr "Resample the momenta distribution:" # File: calc/dl_poly/dlp_control.c, Line: 902 msgid "Minimize system configuration:" msgstr "Minimize system configuration:" # File: calc/dl_poly/dlp_control.c, Line: 903 msgid "Optimize system configuration from start:" msgstr "Optimize system configuration from start:" # File: calc/dl_poly/dlp_control.c, Line: 903 msgid "Perform zero temperature (10 K) optimization" msgstr "Perform zero temperature (10 K) optimization" # File: calc/dl_poly/dlp_control.c, Line: 903 msgid "Include equilibration data in statistics" msgstr "Include equilibration data in statistics" # File: calc/dl_poly/dlp_control.c, Line: 904,1112,1302,1359,1400 msgid "Every:" msgstr "Every:" # File: calc/dl_poly/dlp_control.c, Line: 904 msgid "During:" msgstr "During:" # File: calc/dl_poly/dlp_control.c, Line: 904 msgid "Minimize:" msgstr "Minimize:" # File: calc/dl_poly/dlp_control.c, Line: 903 msgid "Optimize" msgstr "Optimize" # File: calc/dl_poly/dlp_control.c, Line: 905,1260,1293,1330,1363,1502,2051 msgid "step(s)" msgstr "step(s)" # File: calc/dl_poly/dlp_control.c, Line: 906 msgid "Force" msgstr "Force" # File: calc/dl_poly/dlp_control.c, Line: 906 msgid "Energy" msgstr "Energy" # File: calc/dl_poly/dlp_control.c, Line: 906 msgid "Distance" msgstr "Distance" # File: calc/dl_poly/dlp_control.c, Line: 957 msgid "Minimization parameter must ∈ [ %f - %f ]" msgstr "Minimization parameter must ∈ [ %f - %f ]" # File: calc/dl_poly/dlp_control.c, Line: 1023 msgid "Equilibrate" msgstr "Equilibrate" # File: calc/dl_poly/dlp_control.c, Line: 1107 msgid "Defects:" msgstr "Defects:" # File: calc/dl_poly/dlp_control.c, Line: 1108 msgid "Displacements:" msgstr "Displacements:" # File: calc/dl_poly/dlp_control.c, Line: 1109 msgid "History:" msgstr "History:" # File: calc/dl_poly/dlp_control.c, Line: 1110 msgid "Atom's MSD:" msgstr "Atom's MSD:" # File: calc/dl_poly/dlp_control.c, Line: 1112 msgid "From step:" msgstr "From step:" # File: calc/dl_poly/dlp_control.c, Line: 1112 msgid "Site interstitial cutoff:" msgstr "Site interstitial cutoff:" # File: calc/dl_poly/dlp_control.c, Line: 1113 msgid "Qualifying cutoff:" msgstr "Qualifying cutoff:" # File: calc/dl_poly/dlp_control.c, Line: 1114 msgid "Data level:" msgstr "Data level:" # File: calc/dl_poly/dlp_control.c, Line: 1119 msgid "Radial distribution functions (RDFs):" msgstr "Radial distribution functions (RDFs):" # File: calc/dl_poly/dlp_control.c, Line: 1120 msgid "Velocity autocorrelation functions (VAFs):" msgstr "Velocity autocorrelation functions (VAFs):" # File: calc/dl_poly/dlp_control.c, Line: 1121 msgid "Z density profile:" msgstr "Z density profile:" # File: calc/dl_poly/dlp_control.c, Line: 1289 msgid "Dump restart information every:" msgstr "Dump restart information every:" # File: calc/dl_poly/dlp_control.c, Line: 1298 msgid "Print system data:" msgstr "Print system data:" # File: calc/dl_poly/dlp_control.c, Line: 1299 msgid "Accumulate statistics data:" msgstr "Accumulate statistics data:" # File: calc/dl_poly/dlp_control.c, Line: 1300 msgid "Rolling average stack:" msgstr "Rolling average stack:" # File: calc/dl_poly/dlp_control.c, Line: 1364 msgid "Bin size:" msgstr "Bin size:" # File: calc/dl_poly/dlp_control.c, Line: 1391 msgid "Ignore time-averaging for the VAFs" msgstr "Ignore time-averaging for the VAFs" # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "All:" msgstr "All:" # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "Bonds:" msgstr "Bonds:" # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "Dihedrals:" msgstr "Dihedrals:" # File: calc/dl_poly/dlp_control.c, Line: 1399 msgid "Inversions:" msgstr "Inversions:" # File: calc/dl_poly/dlp_control.c, Line: 1400 msgid "Num. δ" msgstr "Num. δ" # File: calc/dl_poly/dlp_control.c, Line: 1400 msgid "Cutoff = " msgstr "Cutoff = " # File: calc/dl_poly/dlp_control.c, Line: 1505 msgid "%sr in [0 : r]" msgstr "%sr in [0 : r]" # File: calc/dl_poly/dlp_control.c, Line: 1509 msgid "%s° in [-180 : 180]" msgstr "%s° in [-180 : 180]" # File: calc/dl_poly/dlp_control.c, Line: 1513 msgid "%s° in [0 : 180]" msgstr "%s° in [0 : 180]" # File: calc/dl_poly/dlp_control.c, Line: 1547 msgid "Set job time:" msgstr "Set job time:" # File: calc/dl_poly/dlp_control.c, Line: 1547 msgid "Set job closure time:" msgstr "Set job closure time:" # File: calc/dl_poly/dlp_control.c, Line: 1548 msgid "Traditional master I/O" msgstr "Traditional master I/O" # File: calc/dl_poly/dlp_control.c, Line: 1549 msgid "General Input/Output (I/O) read interface:" msgstr "General Input/Output (I/O) read interface:" # File: calc/dl_poly/dlp_control.c, Line: 1549 msgid "General Input/Output (I/O) write interface:" msgstr "General Input/Output (I/O) write interface:" # File: calc/dl_poly/dlp_control.c, Line: 1550 msgid "Reader count:" msgstr "Reader count:" # File: calc/dl_poly/dlp_control.c, Line: 1550 msgid "Batch size:" msgstr "Batch size:" # File: calc/dl_poly/dlp_control.c, Line: 1550 msgid "Buffer size:" msgstr "Buffer size:" # File: calc/dl_poly/dlp_control.c, Line: 1550 msgid "// error check" msgstr "// error check" # File: calc/dl_poly/dlp_control.c, Line: 1780 msgid "Sorted" msgstr "Sorted" # File: calc/dl_poly/dlp_control.c, Line: 1781 msgid "Unsorted" msgstr "Unsorted" # File: calc/dl_poly/dlp_control.c, Line: 1606 msgid "The buffer size or max. number of ASCII line records by batch\nmust ∈ [100 - 100 000]" msgstr "The buffer size or max. number of ASCII line records by batch\nmust ∈ [100 - 100 000]" # File: calc/dl_poly/dlp_control.c, Line: 1754 msgid "Method:" msgstr "Method:" # File: calc/dl_poly/dlp_control.c, Line: 1770 msgid "Real precision:" msgstr "Real precision:" # File: calc/dl_poly/dlp_control.c, Line: 1778 # File: curve/tab-1.c, Line: 648 msgid "Type:" msgstr "Type:" # File: calc/dl_poly/dlp_control.c, Line: 1825 msgid "Random number generator seeds:" msgstr "Random number generator seeds:" # File: calc/dl_poly/dlp_control.c, Line: 1841 msgid "Limits to 2 the number of processors in z direction for slab simulations" msgstr "Limits to 2 the number of processors in z direction for slab simulations" # File: calc/dl_poly/dlp_control.c, Line: 1848 msgid "Direct Coulomb sum" msgstr "Direct Coulomb sum" # File: calc/dl_poly/dlp_control.c, Line: 1848 msgid "Distance dependent dielectric Coulomb sum" msgstr "Distance dependent dielectric Coulomb sum" # File: calc/dl_poly/dlp_control.c, Line: 1849 msgid "Ewald sum (auto)" msgstr "Ewald sum (auto)" # File: calc/dl_poly/dlp_control.c, Line: 1849 msgid "Ewald sum" msgstr "Ewald sum" # File: calc/dl_poly/dlp_control.c, Line: 1850 msgid "Reaction field electrostatics" msgstr "Reaction field electrostatics" # File: calc/dl_poly/dlp_control.c, Line: 1850 msgid "Reaction field with Fennel damping" msgstr "Reaction field with Fennel damping" # File: calc/dl_poly/dlp_control.c, Line: 1851 msgid "Reaction field with Fennel damping (auto)" msgstr "Reaction field with Fennel damping (auto)" # File: calc/dl_poly/dlp_control.c, Line: 1852 msgid "Force-shifted Coulomb sum" msgstr "Force-shifted Coulomb sum" # File: calc/dl_poly/dlp_control.c, Line: 1852 msgid "Force-shifted Coulomb sum with Fennel damping" msgstr "Force-shifted Coulomb sum with Fennel damping" # File: calc/dl_poly/dlp_control.c, Line: 1853 msgid "Force-shifted Coulomb sum with Fennel damping (auto)" msgstr "Force-shifted Coulomb sum with Fennel damping (auto)" # File: calc/dl_poly/dlp_control.c, Line: 1877,2181 msgid "Cutoff must be > 0.0 Å" msgstr "Cutoff must be > 0.0 Å" # File: calc/dl_poly/dlp_control.c, Line: 1890 msgid "Padding must be ≥ min(0.05, 0.5%rcut) Å" msgstr "Padding must be ≥ min(0.05, 0.5%rcut) Å" # File: calc/dl_poly/dlp_control.c, Line: 1895 msgid "Padding must be > 0.0 Å" msgstr "Padding must be > 0.0 Å" # File: calc/dl_poly/dlp_control.c, Line: 1917 msgid "Precision must ∈ [10-20 - 0.5]" msgstr "Precision must ∈ [10-20 - 0.5]" # File: calc/dl_poly/dlp_control.c, Line: 1989 msgid "Precision:" msgstr "Precision:" # File: calc/dl_poly/dlp_control.c, Line: 2010 msgid "Ewald convergence parameter:" msgstr "Ewald convergence parameter:" # File: calc/dl_poly/dlp_control.c, Line: 2018 msgid "Maximum k vector index in directions:" msgstr "Maximum k vector index in directions:" # File: calc/dl_poly/dlp_control.c, Line: 2037 msgid "Fennell damping parameter (α):" msgstr "Fennell damping parameter (α):" # File: calc/dl_poly/dlp_control.c, Line: 2047 msgid "Evaluate k-space contribution to the Ewald sum every:" msgstr "Evaluate k-space contribution to the Ewald sum every:" # File: calc/dl_poly/dlp_control.c, Line: 2112 msgid "Evaluate electrostatics interactions" msgstr "Evaluate electrostatics interactions" # File: calc/dl_poly/dlp_control.c, Line: 2120 msgid "Long range interaction cutoff [rcut]:" msgstr "Long range interaction cutoff [rcut]:" # File: calc/dl_poly/dlp_control.c, Line: 2126 msgid "Add padding to rcut:" msgstr "Add padding to rcut:" # File: calc/dl_poly/dlp_control.c, Line: 2135 msgid "Use extended coulombic exclusion" msgstr "Use extended coulombic exclusion" # File: calc/dl_poly/dlp_control.c, Line: 2138 msgid "Evaluation method:" msgstr "Evaluation method:" # File: calc/dl_poly/dlp_control.c, Line: 2157 msgid "Functional" msgstr "Functional" # File: calc/dl_poly/dlp_control.c, Line: 2240 msgid "Evaluate van der Waals interactions" msgstr "Evaluate van der Waals interactions" # File: calc/dl_poly/dlp_control.c, Line: 2249 msgid "Short range interaction cutoff:" msgstr "Short range interaction cutoff:" # File: calc/dl_poly/dlp_control.c, Line: 2257 msgid "Enforce direct calculation of van der Waals interactions" msgstr "Enforce direct calculation of van der Waals interactions" # File: calc/dl_poly/dlp_control.c, Line: 2261 msgid "Apply force-shifting (contributions smoothly fall to zero near rcut)" msgstr "Apply force-shifting (contributions smoothly fall to zero near rcut)" # File: calc/dl_poly/dlp_control.c, Line: 2265 msgid "Apply mixing rule (when needed and if possible generate cross species interactions)" msgstr "Apply mixing rule (when needed and if possible generate cross species interactions)" # File: calc/dl_poly/dlp_control.c, Line: 2272 msgid "Mixing rule:" msgstr "Mixing rule:" # File: calc/dl_poly/dlp_control.c, Line: 2327 msgid "Enforce direct calculation of metal interactions by explicit potentials, does not work with *EAM* potentials" msgstr "Enforce direct calculation of metal interactions by explicit potentials, does not work with *EAM* potentials" # File: calc/dl_poly/dlp_control.c, Line: 2332 msgid "Switch the default embedding functions, F, from F(ρ) to F(√ρ)" msgstr "Switch the default embedding functions, F, from F(ρ) to F(√ρ)" # File: calc/dl_poly/dlp_control.c, Line: 2359 msgid "Subcelling threshold density must be ≥ 1.0" msgstr "Subcelling threshold density must be ≥ 1.0" # File: calc/dl_poly/dlp_control.c, Line: 2377 msgid "Relative dielectric constant εr" msgstr "Relative dielectric constant εr" # File: calc/dl_poly/dlp_control.c, Line: 2378 msgid "Allowed local variation of system density:" msgstr "Allowed local variation of system density:" # File: calc/dl_poly/dlp_control.c, Line: 2379 msgid "Ignore the particle indices in CONFIG file" msgstr "Ignore the particle indices in CONFIG file" # File: calc/dl_poly/dlp_control.c, Line: 2380 msgid "Ignore strict checks, hide warnings and assume safe simulation parameters" msgstr "Ignore strict checks, hide warnings and assume safe simulation parameters" # File: calc/dl_poly/dlp_control.c, Line: 2381 msgid "Skip detailed topology reporting during read of FIELD file in output" msgstr "Skip detailed topology reporting during read of FIELD file in output" # File: calc/dl_poly/dlp_control.c, Line: 2382 msgid "Ignore center of mass removal during the calculation" msgstr "Ignore center of mass removal during the calculation" # File: calc/dl_poly/dlp_control.c, Line: 2383 msgid "Set tolerance for relaxed shell model:" msgstr "Set tolerance for relaxed shell model:" # File: calc/dl_poly/dlp_control.c, Line: 2384 msgid "Set the subcelling threshold density of particles per link cell:" msgstr "Set the subcelling threshold density of particles per link cell:" # File: calc/dl_poly/dlp_control.c, Line: 2385 msgid "Create an expanded version of the current model:" msgstr "Create an expanded version of the current model:" # File: calc/dl_poly/dlp_control.c, Line: 2386 msgid "Restart calculation:" msgstr "Restart calculation:" # File: calc/dl_poly/dlp_control.c, Line: 2512 msgid "Continue current simulation" msgstr "Continue current simulation" # File: calc/dl_poly/dlp_control.c, Line: 2513 msgid "Start new simulation from older run without temperature reset" msgstr "Start new simulation from older run without temperature reset" # File: calc/dl_poly/dlp_control.c, Line: 2514 msgid "Start new simulation from older run with temperature reset" msgstr "Start new simulation from older run with temperature reset" # File: calc/dl_poly/dlp_control.c, Line: 2539 msgid "Global options:" msgstr "Global options:" # File: calc/dl_poly/dlp_control.c, Line: 2541 msgid "Restart options:" msgstr "Restart options:" # File: calc/dl_poly/dlp_control.c, Line: 2545 msgid "Intra-molecular probability denisty function (PDF) analysis:" msgstr "Intra-molecular probability denisty function (PDF) analysis:" # File: calc/dl_poly/dlp_control.c, Line: 2547 msgid "Overall analysis:" msgstr "Overall analysis:" # File: calc/dl_poly/dlp_control.c, Line: 2551 msgid "van der Waals (Non-bonded short range):" msgstr "van der Waals (Non-bonded short range):" # File: calc/dl_poly/dlp_control.c, Line: 2553 msgid "Electrostatics (Non-bonded long range):" msgstr "Electrostatics (Non-bonded long range):" # File: calc/dl_poly/dlp_control.c, Line: 2555 msgid "Metallic interactions:" msgstr "Metallic interactions:" # File: calc/dl_poly/dlp_control.c, Line: 2559 msgid "Equilibration:" msgstr "Equilibration:" # File: calc/dl_poly/dlp_control.c, Line: 2563 msgid "Thermodynamics:" msgstr "Thermodynamics:" # File: calc/dl_poly/dlp_control.c, Line: 2567 msgid "Molecular dynamics:" msgstr "Molecular dynamics:" # File: calc/dl_poly/dlp_control.c, Line: 2571 msgid "Output information:" msgstr "Output information:" # File: calc/dl_poly/dlp_control.c, Line: 2573 msgid "Trajectory file(s):" msgstr "Trajectory file(s):" # File: calc/dl_poly/dlp_control.c, Line: 2575 msgid "Restart file:" msgstr "Restart file:" # File: calc/dl_poly/dlp_control.c, Line: 2579 msgid "Job options:" msgstr "Job options:" # File: calc/dl_poly/dlp_control.c, Line: 2581 msgid "I/O options:" msgstr "I/O options:" # File: calc/dl_poly/dlp_control.c, Line: 2583 msgid "Other options:" msgstr "Other options:" # File: calc/dl_poly/dlp_edit.c, Line: 610 msgid "In %s, 12-6 non-bonded interactions are evaluated using: \n" "%s\n" "A and B are calculated using Ɛi/j and r0i/j provided by the force field parameters." msgstr "In %s, 12-6 non-bonded interactions are evaluated using: \n" "%s\n" "A and B are calculated using Ɛi/j and r0i/j provided by the force field parameters." # File: calc/dl_poly/dlp_edit.c, Line: 619 msgid "In %s, 12-6 non-bonded interactions are evaluated using: \n" "%s\n" "A and B are calculated using Ai/j and Bi/j provided by the force field parameters." msgstr "In %s, 12-6 non-bonded interactions are evaluated using: \n" "%s\n" "A and B are calculated using Ai/j and Bi/j provided by the force field parameters." # File: calc/dl_poly/dlp_edit.c, Line: 686 msgid "Are you sure to change the type of Tersoff potential ?\n" "Tersoff (ter) and KIHS (kihs) forms cannot be mixed\n" "Therefore this choice will affect all Tersoff potential(s).\n" "Any previous parameters will be erased !" msgstr "Are you sure to change the type of Tersoff potential ?\n" "Tersoff (ter) and KIHS (kihs) forms cannot be mixed\n" "Therefore this choice will affect all Tersoff potential(s).\n" "Any previous parameters will be erased !" # File: calc/dl_poly/dlp_edit.c, Line: 1589 msgid "The atom(s) above will be described\n" "in the force field using the parameters\n" "of the %s field atom.\n" msgstr "The atom(s) above will be described\n" "in the force field using the parameters\n" "of the %s field atom.\n" # File: calc/dl_poly/dlp_edit.c, Line: 2807 msgid "* this will be used to adjust bonding, angles, etc ... accordingly,\n" " providing that some parameters can be found in the force field data.\n" " Please note that comments are directly imported from the force field file." msgstr "* this will be used to adjust bonding, angles, etc ... accordingly,\n" " providing that some parameters can be found in the force field data.\n" " Please note that comments are directly imported from the force field file." # File: calc/dl_poly/dlp_edit.c, Line: 2836 msgid "* Available parameters with matching chemical species,\n" " %s force field energy related parameters in: %s \n" " if required conversion to FIELD file energy unit will be performed upon selection.\n" " Please note that comments are directly imported from the force field file.\n" msgstr "* Available parameters with matching chemical species,\n" " %s force field energy related parameters in: %s \n" " if required conversion to FIELD file energy unit will be performed upon selection.\n" " Please note that comments are directly imported from the force field file.\n" # File: calc/dl_poly/dlp_edit.c, Line: 543 msgid "Single terms:" msgstr "Single terms:" # File: calc/dl_poly/dlp_edit.c, Line: 579 msgid "Cross terms with atom:" msgstr "Cross terms with atom:" # File: calc/dl_poly/dlp_edit.c, Line: 609 # File: calc/dl_poly/dlp_field.c, Line: 1199 msgid "Tabulated" msgstr "Tabulated" # File: calc/dl_poly/dlp_edit.c, Line: 618 msgid "In %s, non-bonded interactions are evaluated using: \n%s\n" "Therefore the parameters provided by the force field are incompatible with the DL-POLY options." msgstr "In %s, non-bonded interactions are evaluated using: \n%s\n" "Therefore the parameters provided by the force field are incompatible with the DL-POLY options." # File: calc/dl_poly/dlp_edit.c, Line: 634 # File: calc/dl_poly/dlp_ff_match.c, Line: 1038 msgid "%s\nScaled 1-4 exclusion parameters, provided by the %s force field, are ignored." msgstr "%s\nScaled 1-4 exclusion parameters, provided by the %s force field, are ignored." # File: calc/dl_poly/dlp_edit.c, Line: 651 msgid "Urey-Bradley terms provided by the %s force field are ignored.\n" msgstr "Urey-Bradley terms provided by the %s force field are ignored.\n" # File: calc/dl_poly/dlp_edit.c, Line: 669 # File: calc/dl_poly/dlp_field.c, Line: 162 msgid "External field" msgstr "External field" # File: calc/dl_poly/dlp_edit.c, Line: 690 msgid "Change Tersoff potential ?!" msgstr "Change Tersoff potential ?!" # File: calc/dl_poly/dlp_edit.c, Line: 1184 msgid "Weight (1)" msgstr "Weight (1)" # File: calc/dl_poly/dlp_edit.c, Line: 1185 msgid "Field atom" msgstr "Field atom" # File: calc/dl_poly/dlp_edit.c, Line: 1185 msgid "Field molecule(s)" msgstr "Field molecule(s)" # File: calc/dl_poly/dlp_edit.c, Line: 1198 msgid "Please select the new atom(s)" msgstr "Please select the new atom(s)" # File: calc/dl_poly/dlp_edit.c, Line: 1203 msgid "Please select the atom(s) to freeze / unfreeze" msgstr "Please select the atom(s) to freeze / unfreeze" # File: calc/dl_poly/dlp_edit.c, Line: 1208 msgid "Please select the core atom" msgstr "Please select the core atom" # File: calc/dl_poly/dlp_edit.c, Line: 1213 msgid "Please select the atom(s) to shell" msgstr "Please select the atom(s) to shell" # File: calc/dl_poly/dlp_edit.c, Line: 1218 msgid "Please select the first atom" msgstr "Please select the first atom" # File: calc/dl_poly/dlp_edit.c, Line: 1223 msgid "Please select the second atom" msgstr "Please select the second atom" # File: calc/dl_poly/dlp_edit.c, Line: 1228 msgid "Please select the atom(s) in the first unit" msgstr "Please select the atom(s) in the first unit" # File: calc/dl_poly/dlp_edit.c, Line: 1231 msgid "Please select the atom(s) in the second unit" msgstr "Please select the atom(s) in the second unit" # File: calc/dl_poly/dlp_edit.c, Line: 1234 msgid "Please select the atom(s) in the rigid unit" msgstr "Please select the atom(s) in the rigid unit" # File: calc/dl_poly/dlp_edit.c, Line: 1238 msgid "Please select the tethered atom" msgstr "Please select the tethered atom" # File: calc/dl_poly/dlp_edit.c, Line: 1245 msgid "Please select the type of field atom" msgstr "Please select the type of field atom" # File: calc/dl_poly/dlp_edit.c, Line: 1249 msgid "Please select the first type of field atom" msgstr "Please select the first type of field atom" # File: calc/dl_poly/dlp_edit.c, Line: 1253 msgid "Please select the second type of field atom" msgstr "Please select the second type of field atom" # File: calc/dl_poly/dlp_edit.c, Line: 1256 msgid "Please select the third type of field atom" msgstr "Please select the third type of field atom" # File: calc/dl_poly/dlp_edit.c, Line: 1259 msgid "Please select the fourth type of field atom" msgstr "Please select the fourth type of field atom" # File: calc/dl_poly/dlp_edit.c, Line: 1582 msgid " (1) if all 0.0 then atomic weight(s) will be used by DL-POLY" msgstr " (1) if all 0.0 then atomic weight(s) will be used by DL-POLY" # File: calc/dl_poly/dlp_edit.c, Line: 2283 msgid "%s parameter(s)" msgstr "%s parameter(s)" # File: calc/dl_poly/dlp_edit.c, Line: 2293 msgid "Core atom: " msgstr "Core atom: " # File: calc/dl_poly/dlp_edit.c, Line: 2293 msgid "Shell atom: " msgstr "Shell atom: " # File: calc/dl_poly/dlp_edit.c, Line: 2293 msgid "Selection: " msgstr "Selection: " # File: calc/dl_poly/dlp_edit.c, Line: 2294 msgid "Mass:" msgstr "Mass:" # File: calc/dl_poly/dlp_edit.c, Line: 2296 msgid "First atom: " msgstr "First atom: " # File: calc/dl_poly/dlp_edit.c, Line: 2296 msgid "Second atom: " msgstr "Second atom: " # File: calc/dl_poly/dlp_edit.c, Line: 2296 msgid "Third atom: " msgstr "Third atom: " # File: calc/dl_poly/dlp_edit.c, Line: 2296 msgid "Fourth atom: " msgstr "Fourth atom: " # File: calc/dl_poly/dlp_edit.c, Line: 2297 msgid "First unit: " msgstr "First unit: " # File: calc/dl_poly/dlp_edit.c, Line: 2297 msgid "Second unit: " msgstr "Second unit: " # File: calc/dl_poly/dlp_edit.c, Line: 2307 msgid "\tMolecule: \t%s" msgstr "\tMolecule: \t%s" # File: calc/dl_poly/dlp_edit.c, Line: 2317 msgid "\tAtom: \t\t%s" msgstr "\tAtom: \t\t%s" # File: calc/dl_poly/dlp_edit.c, Line: 2330 msgid "Field parameters:" msgstr "Field parameters:" # File: calc/dl_poly/dlp_edit.c, Line: 2335 # File: calc/dl_poly/dlp_ff_match.c, Line: 1563,1585 msgid "Manual" msgstr "Manual" # File: calc/dl_poly/dlp_edit.c, Line: 2336 msgid "Automatic" msgstr "Automatic" # File: calc/dl_poly/dlp_edit.c, Line: 2343 msgid "Force field type *:" msgstr "Force field type *:" # File: calc/dl_poly/dlp_edit.c, Line: 2365 msgid "Name: " msgstr "Name: " # File: calc/dl_poly/dlp_edit.c, Line: 2383 msgid "Charge: " msgstr "Charge: " # File: calc/dl_poly/dlp_edit.c, Line: 2392 msgid "Frozen: " msgstr "Frozen: " # File: calc/dl_poly/dlp_edit.c, Line: 2404 msgid "\tCore-Shell N°%d" msgstr "\tCore-Shell N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2443 msgid "Selected !" msgstr "Selected !" # File: calc/dl_poly/dlp_edit.c, Line: 2447 msgid "%d atom(s) selected !" msgstr "%d atom(s) selected !" # File: calc/dl_poly/dlp_edit.c, Line: 2467 msgid "Selected Atoms" msgstr "Selected Atoms" # File: calc/dl_poly/dlp_edit.c, Line: 2511 msgid "Use non-bonded: " msgstr "Use non-bonded: " # File: calc/dl_poly/dlp_edit.c, Line: 2521 msgid "\tBond constraint N°%d" msgstr "\tBond constraint N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2547 msgid "Av. distance (1): " msgstr "Av. distance (1): " # File: calc/dl_poly/dlp_edit.c, Line: 2576 msgid "\tMean force potential N°%d" msgstr "\tMean force potential N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2602 msgid "Av. d1-2 (1): " msgstr "Av. d1-2 (1): " # File: calc/dl_poly/dlp_edit.c, Line: 2632 msgid "\tRigid unit N°%d" msgstr "\tRigid unit N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2638 msgid "Atom(s): " msgstr "Atom(s): " # File: calc/dl_poly/dlp_edit.c, Line: 2663 msgid "\tTethered atom N°%d" msgstr "\tTethered atom N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 2669 msgid "Atom: " msgstr "Atom: " # File: calc/dl_poly/dlp_edit.c, Line: 2704 msgid "\t%s type N°%d\n\tField atoms: " msgstr "\t%s type N°%d\n\tField atoms: " # File: calc/dl_poly/dlp_edit.c, Line: 2707 msgid "%s and " msgstr "%s and " # File: calc/dl_poly/dlp_edit.c, Line: 2716 msgid "%s\n\tBetween atoms: " msgstr "%s\n\tBetween atoms: " # File: calc/dl_poly/dlp_edit.c, Line: 2768 msgid "Tersoff atom: " msgstr "Tersoff atom: " # File: calc/dl_poly/dlp_edit.c, Line: 2800 msgid "Visualize in the model: " msgstr "Visualize in the model: " # File: calc/dl_poly/dlp_edit.c, Line: 2816 msgid "Use to create force field: " msgstr "Use to create force field: " # File: calc/dl_poly/dlp_edit.c, Line: 2827 # File: calc/dl_poly/dlp_ff_match.c, Line: 1012 # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "DL_POLY internal units" msgstr "DL_POLY internal units" # File: calc/dl_poly/dlp_edit.c, Line: 2828 msgid "Field parameters *:" msgstr "Field parameters *:" # File: calc/dl_poly/dlp_edit.c, Line: 2844 msgid "Potential: " msgstr "Potential: " # File: calc/dl_poly/dlp_edit.c, Line: 2887 msgid " (1) average distance between the 2 atoms\n\tas measured in the 3D model" msgstr " (1) average distance between the 2 atoms\n\tas measured in the 3D model" # File: calc/dl_poly/dlp_edit.c, Line: 2896 msgid " (1) average distance between the barycenters\n\tof units 1 and 2 as measured in the model" msgstr " (1) average distance between the barycenters\n\tof units 1 and 2 as measured in the model" # File: calc/dl_poly/dlp_edit.c, Line: 3005 msgid "Please enter name for new molecule N°%d" msgstr "Please enter name for new molecule N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 3007 msgid "Molecule name:" msgstr "Molecule name:" # File: calc/dl_poly/dlp_edit.c, Line: 3017 msgid "Please enter name for molecule N°%d" msgstr "Please enter name for molecule N°%d" # File: calc/dl_poly/dlp_edit.c, Line: 3308 msgid "Delete %s N°%d from molecule %s, is this correct ?" msgstr "Delete %s N°%d from molecule %s, is this correct ?" # File: calc/dl_poly/dlp_edit.c, Line: 3312 msgid "Delete %s, is this correct ?" msgstr "Delete %s, is this correct ?" # File: calc/dl_poly/dlp_ff_match.c, Line: 1014 msgid "\t(*) Each force field element can be tuned separately, if not this default parameters will be used.\n" "\t(1) %s energy unit: %s, if required conversion to FIELD file energy unit will be performed upon selection.\n" "\t(2) Restraint parameters are duplicates of the non-restraint parameters.\n" msgstr "\t(*) Each force field element can be tuned separately, if not this default parameters will be used.\n" "\t(1) %s energy unit: %s, if required conversion to FIELD file energy unit will be performed upon selection.\n" "\t(2) Restraint parameters are duplicates of the non-restraint parameters.\n" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 msgid "Property" msgstr "Property" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 msgid "parameters (1)" msgstr "parameters (1)" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 msgid "Actual parameters (1)" msgstr "Actual parameters (1)" # File: calc/dl_poly/dlp_ff_match.c, Line: 927 msgid "Update ?" msgstr "Update ?" # File: calc/dl_poly/dlp_ff_match.c, Line: 1020 msgid "%s\t(%d) Urey-Bradley terms provided by the %s force field are ignored.\n" msgstr "%s\t(%d) Urey-Bradley terms provided by the %s force field are ignored.\n" # File: calc/dl_poly/dlp_ff_match.c, Line: 1025 msgid "%s\t(%d) In %s, 12-6 non-bonded interactions are evaluated using:" msgstr "%s\t(%d) In %s, 12-6 non-bonded interactions are evaluated using:" # File: calc/dl_poly/dlp_ff_match.c, Line: 1035 msgid "%s\nA and B are calculated using Ɛi/j and r0i/j provided by the force field parameters." msgstr "%s\nA and B are calculated using Ɛi/j and r0i/j provided by the force field parameters." # File: calc/dl_poly/dlp_ff_match.c, Line: 1043 msgid "%s\nA and B are calculated using Ai/j and Bi/j provided by the force field parameters." msgstr "%s\nA and B are calculated using Ai/j and Bi/j provided by the force field parameters." # File: calc/dl_poly/dlp_ff_match.c, Line: 1398 msgid "Update FIELD file with %s parameters using \"%s\" atom(s)" msgstr "Update FIELD file with %s parameters using \"%s\" atom(s)" # File: calc/dl_poly/dlp_ff_match.c, Line: 1568 msgid "Atom (1 and 2) %s" msgstr "Atom (1 and 2) %s" # File: calc/dl_poly/dlp_ff_match.c, Line: 1572 msgid "Atom (%d) %s" msgstr "Atom (%d) %s" # File: calc/dl_poly/dlp_field.c, Line: 1077 msgid "\t (2) Quartic (anharmonic) force constant of the core-shell spring in [%s Å-4]" " usually k2 >> k4" msgstr "\t (2) Quartic (anharmonic) force constant of the core-shell spring in [%s Å-4]" " usually k2 >> k4" # File: calc/dl_poly/dlp_field.c, Line: 3962 msgid "\t * in the FIELD file %s(s) appear in the %s section.\n" "\t They are presented separately in this assistant for clarity purposes only." msgstr "\t * in the FIELD file %s(s) appear in the %s section.\n" "\t They are presented separately in this assistant for clarity purposes only." # File: calc/dl_poly/dlp_field.c, Line: 4359 msgid "Providing that the force field information was already saved once\n" "the previous data could still be retrieved by canceling the assistant." msgstr "Providing that the force field information was already saved once\n" "the previous data could still be retrieved by canceling the assistant." # File: calc/dl_poly/dlp_field.c, Line: 4818 msgid " This assistant will help you to setup a %s \n" "calculation using %s 3D model as starting point" msgstr " This assistant will help you to setup a %s \n" "calculation using %s 3D model as starting point" # File: calc/dl_poly/dlp_field.c, Line: 141,164 msgid "Energy unit" msgstr "Energy unit" # File: calc/dl_poly/dlp_field.c, Line: 144 msgid "Core-shell unit(s)" msgstr "Core-shell unit(s)" # File: calc/dl_poly/dlp_field.c, Line: 145 msgid "Constraint bond(s)" msgstr "Constraint bond(s)" # File: calc/dl_poly/dlp_field.c, Line: 146 msgid "Mean force potential(s)" msgstr "Mean force potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 147 msgid "Rigid unit(s)" msgstr "Rigid unit(s)" # File: calc/dl_poly/dlp_field.c, Line: 148 msgid "Tethering potential(s)" msgstr "Tethering potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 149 msgid "Flexible chemical bond(s)" msgstr "Flexible chemical bond(s)" # File: calc/dl_poly/dlp_field.c, Line: 150,932 msgid "Bond restraint(s)" msgstr "Bond restraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 151 msgid "Bond angle(s)" msgstr "Bond angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 152 msgid "Angular restraint(s)" msgstr "Angular restraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 153 msgid "Dihedral angle(s)" msgstr "Dihedral angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 154,936 msgid "Torsional restraint(s)" msgstr "Torsional restraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 155 msgid "Improper angle(s)" msgstr "Improper angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 156 msgid "Inversion angle(s)" msgstr "Inversion angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 157 msgid "van der Waals potential(s)" msgstr "van der Waals potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 158 msgid "Metal potential(s)" msgstr "Metal potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 159 msgid "Tersoff Potential(s)" msgstr "Tersoff Potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 160 msgid "Three-body potential(s)" msgstr "Three-body potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 161 msgid "Four-body potential(s)" msgstr "Four-body potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 167 msgid "Core-shell unit" msgstr "Core-shell unit" # File: calc/dl_poly/dlp_field.c, Line: 168 msgid "Constraint bond" msgstr "Constraint bond" # File: calc/dl_poly/dlp_field.c, Line: 169 msgid "Mean force potential" msgstr "Mean force potential" # File: calc/dl_poly/dlp_field.c, Line: 170 msgid "Rigid unit" msgstr "Rigid unit" # File: calc/dl_poly/dlp_field.c, Line: 171 msgid "Tethering potential" msgstr "Tethering potential" # File: calc/dl_poly/dlp_field.c, Line: 172 msgid "Flexible chemical bond" msgstr "Flexible chemical bond" # File: calc/dl_poly/dlp_field.c, Line: 173,932 msgid "Bond restraint" msgstr "Bond restraint" # File: calc/dl_poly/dlp_field.c, Line: 174 msgid "Bond angle" msgstr "Bond angle" # File: calc/dl_poly/dlp_field.c, Line: 175 msgid "Angular restraint" msgstr "Angular restraint" # File: calc/dl_poly/dlp_field.c, Line: 176 msgid "Dihedral angle" msgstr "Dihedral angle" # File: calc/dl_poly/dlp_field.c, Line: 177,936 msgid "Torsional restraint" msgstr "Torsional restraint" # File: calc/dl_poly/dlp_field.c, Line: 178 msgid "Improper angle" msgstr "Improper angle" # File: calc/dl_poly/dlp_field.c, Line: 179 msgid "Inversion angle" msgstr "Inversion angle" # File: calc/dl_poly/dlp_field.c, Line: 180 msgid "van der Waals potential" msgstr "van der Waals potential" # File: calc/dl_poly/dlp_field.c, Line: 158,181 msgid "Metal potential" msgstr "Metal potential" # File: calc/dl_poly/dlp_field.c, Line: 182 msgid "Tersoff Potential" msgstr "Tersoff Potential" # File: calc/dl_poly/dlp_field.c, Line: 183 msgid "Three-body potential" msgstr "Three-body potential" # File: calc/dl_poly/dlp_field.c, Line: 184 msgid "Four-body potential" msgstr "Four-body potential" # File: calc/dl_poly/dlp_field.c, Line: 189 msgid "core-shell unit(s)" msgstr "core-shell unit(s)" # File: calc/dl_poly/dlp_field.c, Line: 190 msgid "constraint bond(s)" msgstr "constraint bond(s)" # File: calc/dl_poly/dlp_field.c, Line: 191 msgid "mean force potential(s)" msgstr "mean force potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 192 msgid "rigid unit(s)" msgstr "rigid unit(s)" # File: calc/dl_poly/dlp_field.c, Line: 193 msgid "tethering potential(s)" msgstr "tethering potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 194 msgid "flexible chemical bond(s)" msgstr "flexible chemical bond(s)" # File: calc/dl_poly/dlp_field.c, Line: 195 msgid "bond restraint(s)" msgstr "bond restraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 196 msgid "bond angle(s)" msgstr "bond angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 197 msgid "angular restraint(s)" msgstr "angular restraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 198 msgid "dihedral angle(s)" msgstr "dihedral angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 199 msgid "torsional restraint(s)" msgstr "torsional restraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 200 msgid "improper angle(s)" msgstr "improper angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 201 msgid "inversion angle(s)" msgstr "inversion angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 203 msgid "metal potential(s)" msgstr "metal potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 205 msgid "three-body potential(s)" msgstr "three-body potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 206 msgid "four-body potential(s)" msgstr "four-body potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 207 msgid "external field(s)" msgstr "external field(s)" # File: calc/dl_poly/dlp_field.c, Line: 189 msgid "core-shell unit" msgstr "core-shell unit" # File: calc/dl_poly/dlp_field.c, Line: 190 msgid "constraint bond" msgstr "contrainte de liaison" # File: calc/dl_poly/dlp_field.c, Line: 191 msgid "mean force potential" msgstr "potentiel de force moyen" # File: calc/dl_poly/dlp_field.c, Line: 192 msgid "rigid unit" msgstr "rigid unit" # File: calc/dl_poly/dlp_field.c, Line: 193 msgid "tethering potential" msgstr "tethering potential" # File: calc/dl_poly/dlp_field.c, Line: 194 msgid "flexible chemical bond" msgstr "flexible chemical bond" # File: calc/dl_poly/dlp_field.c, Line: 195 msgid "bond restraint" msgstr "bond restraint" # File: calc/dl_poly/dlp_field.c, Line: 196 msgid "bond angle" msgstr "bond angle" # File: calc/dl_poly/dlp_field.c, Line: 197 msgid "angular restraint" msgstr "angular restraint" # File: calc/dl_poly/dlp_field.c, Line: 198 msgid "dihedral angle" msgstr "dihedral angle" # File: calc/dl_poly/dlp_field.c, Line: 199 msgid "torsional restraint" msgstr "torsional restraint" # File: calc/dl_poly/dlp_field.c, Line: 200 msgid "improper angle" msgstr "improper angle" # File: calc/dl_poly/dlp_field.c, Line: 201 msgid "inversion angle" msgstr "inversion angle" # File: calc/dl_poly/dlp_field.c, Line: 203 msgid "metal potential" msgstr "metal potential" # File: calc/dl_poly/dlp_field.c, Line: 205 msgid "three-body potential" msgstr "three-body potential" # File: calc/dl_poly/dlp_field.c, Line: 206 msgid "four-body potential" msgstr "four-body potential" # File: calc/dl_poly/dlp_field.c, Line: 207 msgid "external field" msgstr "external field" # File: calc/dl_poly/dlp_field.c, Line: 231 msgid "of molecule(s)" msgstr "of molecule(s)" # File: calc/dl_poly/dlp_field.c, Line: 232 msgid "of atom(s)" msgstr "of atom(s)" # File: calc/dl_poly/dlp_field.c, Line: 233 msgid "of core-shell unit(s)" msgstr "of core-shell unit(s)" # File: calc/dl_poly/dlp_field.c, Line: 234 msgid "of constraint bond(s)" msgstr "of constraint bond(s)" # File: calc/dl_poly/dlp_field.c, Line: 235 msgid "of mean force potential(s)" msgstr "of mean force potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 236 msgid "of rigid unit(s)" msgstr "of rigid unit(s)" # File: calc/dl_poly/dlp_field.c, Line: 237 msgid "of tethering potential(s)" msgstr "of tethering potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 238 msgid "of flexible chemical bond(s)" msgstr "of flexible chemical bond(s)" # File: calc/dl_poly/dlp_field.c, Line: 239 msgid "of bond restraint(s)" msgstr "of bond restraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 240 msgid "of bond angle(s)" msgstr "of bond angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 241 msgid "of angular restraint(s)" msgstr "of angular restraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 242 msgid "of dihedral angle(s)" msgstr "of dihedral angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 243 msgid "of torsional restraint(s)" msgstr "of torsional restraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 244 msgid "of improper angle(s)" msgstr "of improper angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 245 msgid "of inversion angle(s)" msgstr "of inversion angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 247 msgid "of metal potential(s)" msgstr "of metal potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 249 msgid "of three-body potential(s)" msgstr "of three-body potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 250 msgid "of four-body potential(s)" msgstr "of four-body potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 251 msgid "of external field(s)" msgstr "of external field(s)" # File: calc/dl_poly/dlp_field.c, Line: 253 msgid "of the molecule" msgstr "of the molecule" # File: calc/dl_poly/dlp_field.c, Line: 254 msgid "of the atom" msgstr "of the atom" # File: calc/dl_poly/dlp_field.c, Line: 255 msgid "of the core-shell unit" msgstr "of the core-shell unit" # File: calc/dl_poly/dlp_field.c, Line: 256 msgid "of the constraint bond" msgstr "of the constraint bond" # File: calc/dl_poly/dlp_field.c, Line: 257 msgid "of the mean force potential" msgstr "of the mean force potential" # File: calc/dl_poly/dlp_field.c, Line: 258 msgid "of the rigid unit" msgstr "of the rigid unit" # File: calc/dl_poly/dlp_field.c, Line: 259 msgid "of the tethering potential" msgstr "of the tethering potential" # File: calc/dl_poly/dlp_field.c, Line: 260 msgid "of the flexible chemical bond" msgstr "of the flexible chemical bond" # File: calc/dl_poly/dlp_field.c, Line: 261 msgid "of the bond restraint" msgstr "of the bond restraint" # File: calc/dl_poly/dlp_field.c, Line: 262 msgid "of the bond angle" msgstr "of the bond angle" # File: calc/dl_poly/dlp_field.c, Line: 263 msgid "of the angular restraint" msgstr "of the angular restraint" # File: calc/dl_poly/dlp_field.c, Line: 264 msgid "of the dihedral angle" msgstr "of the dihedral angle" # File: calc/dl_poly/dlp_field.c, Line: 265 msgid "of the torsional restraint" msgstr "of the torsional restraint" # File: calc/dl_poly/dlp_field.c, Line: 266 msgid "of the improper angle" msgstr "of the improper angle" # File: calc/dl_poly/dlp_field.c, Line: 267 msgid "of the inversion angle" msgstr "of the inversion angle" # File: calc/dl_poly/dlp_field.c, Line: 269 msgid "of the metal potential" msgstr "of the metal potential" # File: calc/dl_poly/dlp_field.c, Line: 271 msgid "of the three-body potential" msgstr "of the three-body potential" # File: calc/dl_poly/dlp_field.c, Line: 272 msgid "of the four-body potential" msgstr "of the four-body potential" # File: calc/dl_poly/dlp_field.c, Line: 273 msgid "of the external field" msgstr "of the external field" # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "Electron-Volts" msgstr "Electron-Volts" # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "k-calories per mol" msgstr "k-calories per mol" # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "k-Joules per mol" msgstr "k-Joules per mol" # File: calc/dl_poly/dlp_field.c, Line: 308 msgid "Kelvin per Boltzmann" msgstr "Kelvin per Boltzmann" # File: calc/dl_poly/dlp_field.c, Line: 309 msgid "Harmonic" msgstr "Harmonic" # File: calc/dl_poly/dlp_field.c, Line: 309 msgid "Restraint" msgstr "Restraint" # File: calc/dl_poly/dlp_field.c, Line: 309 msgid "Quartic" msgstr "Quartic" # File: calc/dl_poly/dlp_field.c, Line: 310 msgid "Shifted FENE" msgstr "Shifted FENE" # File: calc/dl_poly/dlp_field.c, Line: 310 msgid "MM3 bond stretch" msgstr "MM3 bond stretch" # File: calc/dl_poly/dlp_field.c, Line: 310 msgid "Tabulated" msgstr "Tabulated" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Truncated harmonic" msgstr "Truncated harmonic" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Screened harmonic" msgstr "Screened harmonic" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Screened Vessal" msgstr "Screened Vessal" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Truncated Vessal" msgstr "Truncated Vessal" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Harmonic cosine" msgstr "Harmonic cosine" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Cosine" msgstr "Cosine" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "MM3 stretch-bend" msgstr "MM3 stretch-bend" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Compass stretch-stretch" msgstr "Compass stretch-stretch" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Compass stretch-bend" msgstr "Compass stretch-bend" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "Compass all terms" msgstr "Compass all terms" # File: calc/dl_poly/dlp_field.c, Line: 312 msgid "MM3 angle bend" msgstr "MM3 angle bend" # File: calc/dl_poly/dlp_field.c, Line: 314 msgid "Triple cosine" msgstr "Triple cosine" # File: calc/dl_poly/dlp_field.c, Line: 314 msgid "Fluorinated Ryckaert-Bellemans" msgstr "Fluorinated Ryckaert-Bellemans" # File: calc/dl_poly/dlp_field.c, Line: 314 msgid "OPLS torsion" msgstr "OPLS torsion" # File: calc/dl_poly/dlp_field.c, Line: 317 msgid "Planar" msgstr "Planar" # File: calc/dl_poly/dlp_field.c, Line: 317 msgid "Extended Planar" msgstr "Extended Planar" # File: calc/dl_poly/dlp_field.c, Line: 317 msgid "Calcite" msgstr "Calcite" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "LJ cohesive" msgstr "LJ cohesive" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "12-10 H-bond" msgstr "12-10 H-bond" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "Shifted force n-m" msgstr "Shifted force n-m" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "Shifted Weeks-Chandler-Anderson" msgstr "Shifted Weeks-Chandler-Anderson" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "Standard DPD" msgstr "Standard DPD" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "14-7 buffered AMOEBA FF" msgstr "14-7 buffered AMOEBA FF" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "Morse modified" msgstr "Morse modified" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "ZBL mixed with Morse" msgstr "ZBL mixed with Morse" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "ZBL mixed with Buckingham" msgstr "ZBL mixed with Buckingham" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "Lennard-Jones tapered with MDF" msgstr "Lennard-Jones tapered with MDF" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "Buckingham tapered with MDF" msgstr "Buckingham tapered with MDF" # File: calc/dl_poly/dlp_field.c, Line: 319 msgid "12-6 Lennard-Jones tapered with MDF" msgstr "12-6 Lennard-Jones tapered with MDF" # File: calc/dl_poly/dlp_field.c, Line: 320 msgid "Extended Finis-Sinclair" msgstr "Extended Finis-Sinclair" # File: calc/dl_poly/dlp_field.c, Line: 318 msgid "H-bond" msgstr "H-bond" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Electric field" msgstr "Electric field" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Oscillating Shear" msgstr "Oscillating Shear" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Continuous Shear" msgstr "Continuous Shear" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Gravitational field" msgstr "Gravitational field" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Magnetic field" msgstr "Magnetic field" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Containing Sphere" msgstr "Containing Sphere" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Repulsive Wall" msgstr "Repulsive Wall" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "X-Piston" msgstr "X-Piston" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Molecule in HR Zone" msgstr "Molecule in HR Zone" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "HR Zone (pull out)" msgstr "HR Zone (pull out)" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "HR Zone (pull in)" msgstr "HR Zone (pull in)" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Osc. Electric Field" msgstr "Osc. Electric Field" # File: calc/dl_poly/dlp_field.c, Line: 324 msgid "Umbrella sampling, harm. constant" msgstr "Umbrella sampling, harm. constant" # File: calc/dl_poly/dlp_field.c, Line: 291 msgid "electron" msgstr "electron" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "COMPASS class2 force field" msgstr "COMPASS class2 force field" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Finite extensible nonlinear elastic (FENE)" msgstr "Finite extensible nonlinear elastic (FENE)" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "FENE with variable size particles" msgstr "FENE with variable size particles" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "GROMOS force field" msgstr "GROMOS force field" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Shifted harmonic" msgstr "Shifted harmonic" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Shifted truncated harmonic" msgstr "Shifted truncated harmonic" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "MM3 anharmonic" msgstr "MM3 anharmonic" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Nonlinear" msgstr "Nonlinear" # File: calc/dl_poly/dlp_field.c, Line: 327 msgid "Finite extensible nonlinear elastic DNA" msgstr "Finite extensible nonlinear elastic DNA" # File: calc/dl_poly/dlp_field.c, Line: 328 msgid "Finite extensible nonlinear elastic DNA (2)" msgstr "Finite extensible nonlinear elastic DNA (2)" # File: calc/dl_poly/dlp_field.c, Line: 328 msgid "Finite extensible nonlinear elastic RNA" msgstr "Finite extensible nonlinear elastic RNA" # File: calc/dl_poly/dlp_field.c, Line: 328 msgid "Breakable quartic" msgstr "Breakable quartic" # File: calc/dl_poly/dlp_field.c, Line: 328 msgid "Special bond exclusions for 1-5 pairs and beyond" msgstr "Special bond exclusions for 1-5 pairs and beyond" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "CHARMM force field" msgstr "CHARMM force field" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "COMPASS class2 force field - 6th order" msgstr "COMPASS class2 force field - 6th order" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "Cosine with Buckingham term between 1-3" msgstr "Cosine with Buckingham term between 1-3" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "Difference of cosines" msgstr "Difference of cosines" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "DREIDING force field" msgstr "DREIDING force field" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "Cosine with a shift" msgstr "Cosine with a shift" # File: calc/dl_poly/dlp_field.c, Line: 330 msgid "Cosine with a shift and exponential term in spring" msgstr "Cosine with a shift and exponential term in spring" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Cosine with squared term" msgstr "Cosine with squared term" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Cross term coupling angle and bond length" msgstr "Cross term coupling angle and bond length" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Dipole orientation" msgstr "Dipole orientation" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Fourier (multiple cosines)" msgstr "Fourier (multiple cosines)" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Fourier (single cosine)" msgstr "Fourier (single cosine)" # File: calc/dl_poly/dlp_field.c, Line: 331 msgid "Combination of the harmonic (SDK)" msgstr "Combination of the harmonic (SDK)" # File: calc/dl_poly/dlp_field.c, Line: 333 msgid "CHARMM force field with force switching" msgstr "CHARMM force field with force switching" # File: calc/dl_poly/dlp_field.c, Line: 333 msgid "Helix" msgstr "Helix" # File: calc/dl_poly/dlp_field.c, Line: 333 msgid "Harmonic with 5 terms" msgstr "Harmonic with 5 terms" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "Harmonic with N terms" msgstr "Harmonic with N terms" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "OPLS force field" msgstr "OPLS force field" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "Quadratic" msgstr "Quadratic" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "Spherical" msgstr "Spherical" # File: calc/dl_poly/dlp_field.c, Line: 334 msgid "Tabulated with analytic cutoff" msgstr "Tabulated with analytic cutoff" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Cosine squared" msgstr "Cosine squared" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "CVFF force field" msgstr "CVFF force field" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Distance between atom planes" msgstr "Distance between atom planes" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Out-of-the plane distance" msgstr "Out-of-the plane distance" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Planar conformation" msgstr "Planar conformation" # File: calc/dl_poly/dlp_field.c, Line: 336 msgid "Squared distance harmonic" msgstr "Squared distance harmonic" # File: calc/dl_poly/dlp_field.c, Line: 337 msgid "Harmonic with Wilson Decius out-of-plane" msgstr "Harmonic with Wilson Decius out-of-plane" # File: calc/dl_poly/dlp_field.c, Line: 427,499 msgid "Interpolation style" msgstr "Interpolation style" # File: calc/dl_poly/dlp_field.c, Line: 555 msgid "weighting factor" msgstr "weighting factor" # File: calc/dl_poly/dlp_field.c, Line: 924 msgid "Viz. 3D" msgstr "Viz. 3D" # File: calc/dl_poly/dlp_field.c, Line: 924 msgid "Viz. Atom num." msgstr "Viz. Atom num." # File: calc/dl_poly/dlp_field.c, Line: 925 msgid "Mass" msgstr "Mass" # File: calc/dl_poly/dlp_field.c, Line: 925 msgid "Charge" msgstr "Charge" # File: calc/dl_poly/dlp_field.c, Line: 925 msgid "Frozen" msgstr "Frozen" # File: calc/dl_poly/dlp_field.c, Line: 926 msgid "Core Id" msgstr "Core Id" # File: calc/dl_poly/dlp_field.c, Line: 926 msgid "Shell" msgstr "Shell" # File: calc/dl_poly/dlp_field.c, Line: 926 msgid "Use (3)" msgstr "Use (3)" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At.1 Id" msgstr "At.1 Id" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At.2 Id" msgstr "At.2 Id" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "Length [Å]" msgstr "Length [Å]" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "av. d [Å] (1)" msgstr "av. d [Å] (1)" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "Use (2)" msgstr "Use (2)" # File: calc/dl_poly/dlp_field.c, Line: 928 msgid "av. d12 [Å] (1)" msgstr "av. d12 [Å] (1)" # File: calc/dl_poly/dlp_field.c, Line: 928 msgid "Unit Id" msgstr "Unit Id" # File: calc/dl_poly/dlp_field.c, Line: 928 msgid "At. Id" msgstr "At. Id" # File: calc/dl_poly/dlp_field.c, Line: 928 msgid "Weight (2)" msgstr "Weight (2)" # File: calc/dl_poly/dlp_field.c, Line: 929 msgid "Atom(s) in unit" msgstr "Atom(s) in unit" # File: calc/dl_poly/dlp_field.c, Line: 929 msgid "List of atom(s)" msgstr "List of atom(s)" # File: calc/dl_poly/dlp_field.c, Line: 929 msgid "Use (1)" msgstr "Use (1)" # File: calc/dl_poly/dlp_field.c, Line: 159 msgid "Potential" msgstr "Potential" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At.1" msgstr "At.1" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At.2" msgstr "At.2" # File: calc/dl_poly/dlp_field.c, Line: 933 msgid "At.3" msgstr "At.3" # File: calc/dl_poly/dlp_field.c, Line: 935 msgid "At.4" msgstr "At.4" # File: calc/dl_poly/dlp_field.c, Line: 943 msgid "At.1*" msgstr "At.1*" # File: calc/dl_poly/dlp_field.c, Line: 942 msgid "At.2*" msgstr "At.2*" # File: calc/dl_poly/dlp_field.c, Line: 931 msgid "Potential (3)" msgstr "Potential (3)" # File: calc/dl_poly/dlp_field.c, Line: 348 msgid "Angle(s)" msgstr "Angle(s)" # File: calc/dl_poly/dlp_field.c, Line: 933 msgid "av. θ [°] (1)" msgstr "av. θ [°] (1)" # File: calc/dl_poly/dlp_field.c, Line: 350 msgid "Dihedral(s)" msgstr "Dihedral(s)" # File: calc/dl_poly/dlp_field.c, Line: 935 msgid "av. ϕ [°] (1)" msgstr "av. ϕ [°] (1)" # File: calc/dl_poly/dlp_field.c, Line: 352 msgid "Improper(s)" msgstr "Improper(s)" # File: calc/dl_poly/dlp_field.c, Line: 353 msgid "Inversion(s)" msgstr "Inversion(s)" # File: calc/dl_poly/dlp_field.c, Line: 939 msgid "Spec.1" msgstr "Spec.1" # File: calc/dl_poly/dlp_field.c, Line: 939 msgid "Spec.2" msgstr "Spec.2" # File: calc/dl_poly/dlp_field.c, Line: 939 msgid "VdW potential" msgstr "VdW potential" # File: calc/dl_poly/dlp_field.c, Line: 927 msgid "At." msgstr "At." # File: calc/dl_poly/dlp_field.c, Line: 941 msgid "Tersoff Pot." msgstr "Tersoff Pot." # File: calc/dl_poly/dlp_field.c, Line: 942 msgid "Three-body Pot." msgstr "Three-body Pot." # File: calc/dl_poly/dlp_field.c, Line: 943 msgid "Four-body Pot." msgstr "Four-body Pot." # File: calc/dl_poly/dlp_field.c, Line: 944 msgid "Field type" msgstr "Field type" # File: calc/dl_poly/dlp_field.c, Line: 934 msgid "Angle" msgstr "Angle" # File: calc/dl_poly/dlp_field.c, Line: 934 msgid "Angle restraint" msgstr "Angle restraint" # File: calc/dl_poly/dlp_field.c, Line: 935 msgid "Dihedral" msgstr "Dihedral" # File: calc/dl_poly/dlp_field.c, Line: 937 msgid "Improper" msgstr "Improper" # File: calc/dl_poly/dlp_field.c, Line: 938 msgid "Inversion" msgstr "Inversion" # File: calc/dl_poly/dlp_field.c, Line: 1160 msgid "\t (1) Force constant of the core-shell spring in [%s Å-2]" msgstr "\t (1) Force constant of the core-shell spring in [%s Å-2]" # File: calc/dl_poly/dlp_field.c, Line: 1267 msgid "Default: %s (%s)" msgstr "Default: %s (%s)" # File: calc/dl_poly/dlp_field.c, Line: 1766 msgid "the %d different fragment(s) in molecule %s\n" msgstr "the %d different fragment(s) in molecule %s\n" # File: calc/dl_poly/dlp_field.c, Line: 1771 msgid "the system\n" msgstr "the system\n" # File: calc/dl_poly/dlp_field.c, Line: 1777 msgid "%seach contains the following %d type(s) of atom" msgstr "%seach contains the following %d type(s) of atom" # File: calc/dl_poly/dlp_field.c, Line: 1782 msgid "%sdo not contains any core-shell unit" msgstr "%sdo not contains any core-shell unit" # File: calc/dl_poly/dlp_field.c, Line: 1786 msgid "%seach contains the following %d core-shell unit" msgstr "%seach contains the following %d core-shell unit" # File: calc/dl_poly/dlp_field.c, Line: 1792 msgid "%sdo not contains any constraint" msgstr "%sdo not contains any constraint" # File: calc/dl_poly/dlp_field.c, Line: 1796 msgid "%seach contains the following %d constraint(s)" msgstr "%seach contains the following %d constraint(s)" # File: calc/dl_poly/dlp_field.c, Line: 1802 msgid "%sdo not contains any mean force potential" msgstr "%sdo not contains any mean force potential" # File: calc/dl_poly/dlp_field.c, Line: 1806 msgid "%seach contains the following %d type(s) of mean force potential(s)" msgstr "%seach contains the following %d type(s) of mean force potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 1812 msgid "%sdo not contains any rigid unit" msgstr "%sdo not contains any rigid unit" # File: calc/dl_poly/dlp_field.c, Line: 1816 msgid "%seach contains the following %d rigid unit(s)" msgstr "%seach contains the following %d rigid unit(s)" # File: calc/dl_poly/dlp_field.c, Line: 1822 msgid "%sdo not contains any tethering potential(s)" msgstr "%sdo not contains any tethering potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 1826 msgid "%seach contains the following %d tethering potential(s)" msgstr "%seach contains the following %d tethering potential(s)" # File: calc/dl_poly/dlp_field.c, Line: 1832 msgid "the force field do not contains any external field(s)" msgstr "the force field do not contains any external field(s)" # File: calc/dl_poly/dlp_field.c, Line: 1836 msgid "the force field contains the following %d external field(s)" msgstr "the force field contains the following %d external field(s)" # File: calc/dl_poly/dlp_field.c, Line: 1846 msgid "%sdo not contains any %s *" msgstr "%sdo not contains any %s *" # File: calc/dl_poly/dlp_field.c, Line: 1850 msgid "%s contains the following %d type(s) %s *" msgstr "%s contains the following %d type(s) %s *" # File: calc/dl_poly/dlp_field.c, Line: 1846 msgid "%sdo not contains any %s" msgstr "%sdo not contains any %s" # File: calc/dl_poly/dlp_field.c, Line: 1850 msgid "%s contains the following %d type(s) %s" msgstr "%s contains the following %d type(s) %s" # File: calc/dl_poly/dlp_field.c, Line: 1871 msgid "the force field do not contains any %s" msgstr "the force field do not contains any %s" # File: calc/dl_poly/dlp_field.c, Line: 1875 msgid "the force field contains the following %d %s" msgstr "the force field contains the following %d %s" # File: calc/dl_poly/dlp_field.c, Line: 2202 msgid "Change energy unit ?" msgstr "Change energy unit ?" # File: calc/dl_poly/dlp_field.c, Line: 2203 msgid "Yes" msgstr "Yes" # File: calc/dl_poly/dlp_field.c, Line: 2206 msgid "Change the energy unit ?\nThe value of all field parameters that are energy related (listed below) will be scaled accordingly." msgstr "Change the energy unit ?\nThe value of all field parameters that are energy related (listed below) will be scaled accordingly." # File: calc/dl_poly/dlp_field.c, Line: 2207 msgid "List of energy related parameters in your FIELD file:\n" msgstr "List of energy related parameters in your FIELD file:\n" # File: calc/dl_poly/dlp_field.c, Line: 2322 msgid "Please select the %s:" msgstr "Please select the %s:" # File: calc/dl_poly/dlp_field.c, Line: 2340 msgid "Please select the component(s) of the force field:" msgstr "Please select the component(s) of the force field:" # File: calc/dl_poly/dlp_field.c, Line: 2343 msgid " Intra-molecular interaction(s):" msgstr " Intra-molecular interaction(s):" # File: calc/dl_poly/dlp_field.c, Line: 2345 msgid "Use multiple molecule(s)" msgstr "Use multiple molecule(s)" # File: calc/dl_poly/dlp_field.c, Line: 2360 msgid "Use %s" msgstr "Use %s" # File: calc/dl_poly/dlp_field.c, Line: 2371 msgid "Non-bonded interaction(s)" msgstr "Non-bonded interaction(s)" # File: calc/dl_poly/dlp_field.c, Line: 1267 msgid "Default: %s" msgstr "Default: %s" # File: calc/dl_poly/dlp_field.c, Line: 2564 msgid "Atom N°%d: \"%s\"" msgstr "Atom N°%d: \"%s\"" # File: calc/dl_poly/dlp_field.c, Line: 2664 msgid "Core-Shell N°%d: Atom %d (%s) - " msgstr "Core-Shell N°%d: Atom %d (%s) - " # File: calc/dl_poly/dlp_field.c, Line: 2669 msgid "Core-Shell N°%d: %s - " msgstr "Core-Shell N°%d: %s - " # File: calc/dl_poly/dlp_field.c, Line: 2690 msgid "Constrained Bond N°%d: Atom %d (%s) - " msgstr "Constrained Bond N°%d: Atom %d (%s) - " # File: calc/dl_poly/dlp_field.c, Line: 2695 msgid "Constrained Bond N°%d: %s - " msgstr "Constrained Bond N°%d: %s - " # File: calc/dl_poly/dlp_field.c, Line: 2713 msgid "Mean Force Potential N°%d" msgstr "Mean Force Potential N°%d" # File: calc/dl_poly/dlp_field.c, Line: 2721 msgid "Rigid Unit N°%d: %d Atom(s)" msgstr "Rigid Unit N°%d: %d Atom(s)" # File: calc/dl_poly/dlp_field.c, Line: 2729 msgid "Tethering Potential N°%d" msgstr "Tethering Potential N°%d" # File: calc/dl_poly/dlp_field.c, Line: 2767 msgid "%s - NONE" msgstr "%s - NONE" # File: calc/dl_poly/dlp_field.c, Line: 2709 msgid "Edit Name: \"%s\"" msgstr "Edit Name: \"%s\"" # File: calc/dl_poly/dlp_field.c, Line: 2801 msgid "Edit properties %s" msgstr "Edit properties %s" # File: calc/dl_poly/dlp_field.c, Line: 2817 msgid "Add a new %s" msgstr "Add a new %s" # File: calc/dl_poly/dlp_field.c, Line: 2831 msgid "Remove %s" msgstr "Remove %s" # File: calc/dl_poly/dlp_field.c, Line: 2958 msgid "Add new molecule" msgstr "Add new molecule" # File: calc/dl_poly/dlp_field.c, Line: 2967 msgid "Remove molecule %s from force field" msgstr "Remove molecule %s from force field" # File: calc/dl_poly/dlp_field.c, Line: 2983 msgid "Created new force field atom from %s atom(s)" msgstr "Created new force field atom from %s atom(s)" # File: calc/dl_poly/dlp_field.c, Line: 2998 msgid "Remove atom %s from force field molecule" msgstr "Remove atom %s from force field molecule" # File: calc/dl_poly/dlp_field.c, Line: 3699 msgid "Parameter(s)" msgstr "Parameter(s)" # File: calc/dl_poly/dlp_field.c, Line: 3867 msgid "Please select molecule: " msgstr "Please select molecule: " # File: calc/dl_poly/dlp_field.c, Line: 3898 msgid "Number of isolated molecular fragments: " msgstr "Number of isolated molecular fragments: " # File: calc/dl_poly/dlp_field.c, Line: 3902 msgid "\tEach of these fragments can be described separately in the force field." msgstr "\tEach of these fragments can be described separately in the force field." # File: calc/dl_poly/dlp_field.c, Line: 3905 msgid "Number of distinct molecules: " msgstr "Number of distinct molecules: " # File: calc/dl_poly/dlp_field.c, Line: 3909 msgid "Number of molecules in the force field: " msgstr "Number of molecules in the force field: " # File: calc/dl_poly/dlp_field.c, Line: 3935,3939 msgid "Properties %s: " msgstr "Properties %s: " # File: calc/dl_poly/dlp_field.c, Line: 3969 msgid "\t * the potential will be calculated by the sum of the 3 possible inversion terms between atoms 1 (center), 2, 3 and 4." msgstr "\t * the potential will be calculated by the sum of the 3 possible inversion terms between atoms 1 (center), 2, 3 and 4." # File: calc/dl_poly/dlp_field.c, Line: 3973 msgid "\t (1) average value for the force field element as measured in the model." msgstr "\t (1) average value for the force field element as measured in the model." # File: calc/dl_poly/dlp_field.c, Line: 3976 msgid "\t (2) only the selected element(s) will be used to create the force field." msgstr "\t (2) only the selected element(s) will be used to create the force field." # File: calc/dl_poly/dlp_field.c, Line: 3979 msgid "\t (3) each force field element can be tuned separately, if not the Default parameters will be used." msgstr "\t (3) each force field element can be tuned separately, if not the Default parameters will be used." # File: calc/dl_poly/dlp_field.c, Line: 3991 msgid "\t (3) only the selected element(s) will be used to create the force field." msgstr "\t (3) only the selected element(s) will be used to create the force field." # File: calc/dl_poly/dlp_field.c, Line: 4006 msgid "\t (1) average distance between the barycenters of units 1 and 2 as measured in the model." msgstr "\t (1) average distance between the barycenters of units 1 and 2 as measured in the model." # File: calc/dl_poly/dlp_field.c, Line: 4009 msgid "\t (2) if all 0.0 then atomic weight(s) will be used by DL-POLY." msgstr "\t (2) if all 0.0 then atomic weight(s) will be used by DL-POLY." # File: calc/dl_poly/dlp_field.c, Line: 4018 msgid "\t (1) only the selected element(s) will be used to create the force field." msgstr "\t (1) only the selected element(s) will be used to create the force field." # File: calc/dl_poly/dlp_field.c, Line: 4295 msgid "Initialize force field using: " msgstr "Initialize force field using: " # File: calc/dl_poly/dlp_field.c, Line: 4355 msgid "Clean all force field parameter(s) ?" msgstr "Clean all force field parameter(s) ?" # File: calc/dl_poly/dlp_field.c, Line: 4430 msgid "Select the component(s) of the force field" msgstr "Select the component(s) of the force field" # File: calc/dl_poly/dlp_field.c, Line: 4444 msgid " Finalize the creation of the %s input file(s) now !" msgstr " Finalize the creation of the %s input file(s) now !" # File: calc/dl_poly/dlp_field.c, Line: 4450 msgid "Create the LAMMPS input file(s) now !" msgstr "Create the LAMMPS input file(s) now !" # File: calc/dl_poly/dlp_field.c, Line: 4450 msgid "Create the DL-POLY input file(s) now !" msgstr "Create the DL-POLY input file(s) now !" # File: calc/dl_poly/dlp_field.c, Line: 4457 msgid "Atomic Species as Field Atoms" msgstr "Atomic Species as Field Atoms" # File: calc/dl_poly/dlp_field.c, Line: 4458 msgid "Atomic Species and Total Coordinations as Field Atoms" msgstr "Atomic Species and Total Coordinations as Field Atoms" # File: calc/dl_poly/dlp_field.c, Line: 4459 msgid "Atomic Species and Partial Coordinations as Field Atoms" msgstr "Atomic Species and Partial Coordinations as Field Atoms" # File: calc/dl_poly/dlp_field.c, Line: 4499 msgid "Force field was initialized using: " msgstr "Force field was initialized using: " # File: calc/dl_poly/dlp_field.c, Line: 4558 msgid "Please select the force field first !" msgstr "Please select the force field first !" # File: calc/dl_poly/dlp_field.c, Line: 4575 msgid "LAMMPS files preview" msgstr "LAMMPS files preview" # File: calc/dl_poly/dlp_field.c, Line: 4575 msgid "DL-POLY files preview" msgstr "DL-POLY files preview" # File: calc/dl_poly/dlp_field.c, Line: 4674 msgid "%s file found in '%s'\nreplace existing %s file ?" msgstr "%s file found in '%s'\nreplace existing %s file ?" # File: calc/dl_poly/dlp_field.c, Line: 4675 msgid "Replace file ?" msgstr "Replace file ?" # File: calc/dl_poly/dlp_field.c, Line: 4812 msgid "%s calculation assistant" msgstr "%s calculation assistant" # File: calc/dl_poly/dlp_field.c, Line: 4822 msgid "Force field: " msgstr "Force field: " # File: calc/dl_poly/dlp_field.c, Line: 4856 msgid "\tDelete the existing force field data and reset the parameters to the default values" msgstr "\tDelete the existing force field data and reset the parameters to the default values" # File: calc/dl_poly/dlp_field.c, Line: 4862 msgid "\tPrepare the CONTROL file to describe the calculation" msgstr "\tPrepare the CONTROL file to describe the calculation" # File: calc/dl_poly/dlp_field.c, Line: 4864 msgid "\tPrepare the FIELD and CONFIG files to describe the force field and the atomic scale model" msgstr "\tPrepare the FIELD and CONFIG files to describe the force field and the atomic scale model" # File: calc/dl_poly/dlp_field.c, Line: 4869 msgid "\tPrepare the LAMMPS Input to describe the calculation" msgstr "\tPrepare the LAMMPS Input to describe the calculation" # File: calc/dl_poly/dlp_field.c, Line: 4871 msgid "\tPrepare the LAMMPS Atom file to describe the force field and the atomic scale model" msgstr "\tPrepare the LAMMPS Atom file to describe the force field and the atomic scale model" # File: calc/dl_poly/dlp_mol.c, Line: 89 msgid "The description of atom %s will be deleted\n" "and merged with the one of the selected field atom.\n" "Field object(s) using atom %s will also be deleted\n" "and the force field parameter(s) will be updated accordingly." msgstr "The description of atom %s will be deleted\n" "and merged with the one of the selected field atom.\n" "Field object(s) using atom %s will also be deleted\n" "and the force field parameter(s) will be updated accordingly." # File: calc/dl_poly/dlp_mol.c, Line: 105 msgid "The description of atom %s will be deleted\n" "and merged with the one of field atom %s\n" "Field object(s) using atom %s will also be deleted\n" "and the force field parameter(s) will be updated accordingly." msgstr "The description of atom %s will be deleted\n" "and merged with the one of field atom %s\n" "Field object(s) using atom %s will also be deleted\n" "and the force field parameter(s) will be updated accordingly." # File: calc/dl_poly/dlp_mol.c, Line: 93 msgid "The description of molecule %s will be deleted\nand merged with the one of the selected molecule." msgstr "The description of molecule %s will be deleted\nand merged with the one of the selected molecule." # File: calc/dl_poly/dlp_mol.c, Line: 93 msgid "The description of molecule %s will be deleted\nand merged with the one of molecule %s" msgstr "The description of molecule %s will be deleted\nand merged with the one of molecule %s" # File: calc/dl_poly/dlp_mol.c, Line: 339 msgid "%s\nConfirm this choice and create a new field molecule to describe these fragments ?" msgstr "%s\nConfirm this choice and create a new field molecule to describe these fragments ?" # File: calc/dl_poly/dlp_mol.c, Line: 344 msgid "%s\nConfirm this choice and create a new field molecule to describe this fragment ?" msgstr "%s\nConfirm this choice and create a new field molecule to describe this fragment ?" # File: calc/dl_poly/dlp_mol.c, Line: 470 msgid "Please select the fragment(s) of the new molecule" msgstr "Please select the fragment(s) of the new molecule" # File: calc/dl_poly/dlp_mol.c, Line: 753 msgid "Select the molecule to merge molecule \"%s\" with" msgstr "Select the molecule to merge molecule \"%s\" with" # File: calc/dl_poly/dlp_print.c, Line: 1433 msgid "# - %d atoms\n" "# - %d isolated molecular fragments\n" "# - %d distinct molecules\n" msgstr "# - %d atoms\n" "# - %d isolated molecular fragments\n" "# - %d distinct molecules\n" # File: calc/dl_poly/dlp_print.c, Line: 1421 msgid "# This file was created using %s\n" msgstr "# This file was created using %s\n" # File: calc/dl_poly/dlp_print.c, Line: 1424 msgid "# %s contains:\n" msgstr "# %s contains:\n" # File: calc/dl_poly/dlp_print.c, Line: 1439 msgid "# Energy unit:\n" msgstr "# Energy unit:\n" # File: calc/dl_poly/dlp_print.c, Line: 1444 msgid "# Number of field molecules:\n" msgstr "# Number of field molecules:\n" # File: calc/dl_poly/dlp_print.c, Line: 1452 msgid "# Begin molecule %d\n" msgstr "# Begin molecule %d\n" # File: calc/dl_poly/dlp_print.c, Line: 1456 msgid "# End molecule %d\n" msgstr "# End molecule %d\n" # File: calc/dl_poly/dlp_print.c, Line: 1464 msgid "van der Walls pair" msgstr "van der Walls pair" # File: calc/dl_poly/dlp_print.c, Line: 1464 msgid "metal" msgstr "metal" # File: calc/dl_poly/dlp_print.c, Line: 1464 msgid "three-body" msgstr "three-body" # File: calc/dl_poly/dlp_print.c, Line: 1464 msgid "four-body" msgstr "four-body" # File: calc/dl_poly/dlp_print.c, Line: 1478 msgid "# Non-bonded: %s potential(s)\n" msgstr "# Non-bonded: %s potential(s)\n" # File: calc/dl_poly/dlp_print.c, Line: 1596 msgid "# DL-POLY CONFIG file created by %s, %s - %d atoms\n" msgstr "# DL-POLY CONFIG file created by %s, %s - %d atoms\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Target temperature in K\n" msgstr "# Target temperature in K\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Number of MD steps\n" msgstr "# Number of MD steps\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Integration time step in ps\n" msgstr "# Integration time step in ps\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Target presssure in k atms\n" msgstr "# Target presssure in k atms\n" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Target temperature" msgstr "# Target temperature" # File: calc/dl_poly/dlp_print.c, Line: 1673 msgid "# Number of MD steps" msgstr "# Number of MD steps" # File: calc/dl_poly/dlp_print.c, Line: 1675 msgid "# MD time step d(t)" msgstr "# MD time step d(t)" # File: calc/dl_poly/dlp_print.c, Line: 1711 msgid "\n# Ignore particle indices from CONFIG file and set indices by order of reading" msgstr "\n# Ignore particle indices from CONFIG file and set indices by order of reading" # File: calc/dl_poly/dlp_print.c, Line: 1712 msgid "\n# Ignore strict checks when reading CONFIG file, warning messages and assume safe simulation parameters" msgstr "\n# Ignore strict checks when reading CONFIG file, warning messages and assume safe simulation parameters" # File: calc/dl_poly/dlp_print.c, Line: 1713 msgid "\n# Skip detailed topology reporting when reading FIELD file" msgstr "\n# Skip detailed topology reporting when reading FIELD file" # File: calc/dl_poly/dlp_print.c, Line: 1714 msgid "\n# Ignore center of mass momentum removal during the simulation" msgstr "\n# Ignore center of mass momentum removal during the simulation" # File: calc/dl_poly/dlp_print.c, Line: 1715 msgid "\n# Tolerance for the relaxed shell model\n" msgstr "\n# Tolerance for the relaxed shell model\n" # File: calc/dl_poly/dlp_print.c, Line: 1716 msgid "\n# Subcelling threshold density of particle per link cell\n" msgstr "\n# Subcelling threshold density of particle per link cell\n" # File: calc/dl_poly/dlp_print.c, Line: 1717 msgid "\n# Create an expanded version of the current model\n" msgstr "\n# Create an expanded version of the current model\n" # File: calc/dl_poly/dlp_print.c, Line: 1718 msgid "\n# Restart job from previous run: " msgstr "\n# Restart job from previous run: " # File: calc/dl_poly/dlp_print.c, Line: 1721 msgid "\n# Continue current simulation - require REVOLD file" msgstr "\n# Continue current simulation - require REVOLD file" # File: calc/dl_poly/dlp_print.c, Line: 1722 msgid "\n# Start new simulation from older run without temperature reset" msgstr "\n# Start new simulation from older run without temperature reset" # File: calc/dl_poly/dlp_print.c, Line: 1723 msgid "\n# Start new simulation from older run with temperature reset" msgstr "\n# Start new simulation from older run with temperature reset" # File: calc/dl_poly/dlp_print.c, Line: 1726 msgid "\n\n# Set job time to " msgstr "\n\n# Set job time to " # File: calc/dl_poly/dlp_print.c, Line: 1726 msgid "\n\n# Set job closure time to " msgstr "\n\n# Set job closure time to " # File: calc/dl_poly/dlp_print.c, Line: 1728 msgid "\n# I/O read interface, with:\n" msgstr "\n# I/O read interface, with:\n" # File: calc/dl_poly/dlp_print.c, Line: 1728 msgid "\n# I/O write interface, with:\n" msgstr "\n# I/O write interface, with:\n" # File: calc/dl_poly/dlp_print.c, Line: 1918 msgid "# DL-POLY CONTROL file created by %s, %s - %d atoms\n\n" msgstr "# DL-POLY CONTROL file created by %s, %s - %d atoms\n\n" # File: calc/dl_poly/dlp_print.c, Line: 1928 msgid "# Relative dielectric constant = " msgstr "# Relative dielectric constant = " # File: calc/dl_poly/dlp_print.c, Line: 1932 msgid "\n# Allowing local variation of system density of: " msgstr "\n# Allowing local variation of system density of: " # File: calc/dl_poly/dlp_print.c, Line: 1966 msgid "\n# Non-bonded short range interactions - type vdW" msgstr "\n# Non-bonded short range interactions - type vdW" # File: calc/dl_poly/dlp_print.c, Line: 1967 msgid "\n# van der Waals short range cutoff = " msgstr "\n# van der Waals short range cutoff = " # File: calc/dl_poly/dlp_print.c, Line: 1970 msgid "\n# Enforce direct calculation of vdW interactions" msgstr "\n# Enforce direct calculation of vdW interactions" # File: calc/dl_poly/dlp_print.c, Line: 1971 msgid "\n# Do not work with system using tabulated potentials" msgstr "\n# Do not work with system using tabulated potentials" # File: calc/dl_poly/dlp_print.c, Line: 1975 msgid "\n# Apply force-shifting for vdW interactions" msgstr "\n# Apply force-shifting for vdW interactions" # File: calc/dl_poly/dlp_print.c, Line: 1979 msgid "\n# Apply mixing rule of type: " msgstr "\n# Apply mixing rule of type: " # File: calc/dl_poly/dlp_print.c, Line: 1984 msgid "\n# No van der Waals interactions (short range)" msgstr "\n# No van der Waals interactions (short range)" # File: calc/dl_poly/dlp_print.c, Line: 1990 msgid "\n# Non-bonded long range interactions" msgstr "\n# Non-bonded long range interactions" # File: calc/dl_poly/dlp_print.c, Line: 1991 msgid "\n# Electrostatics long range cutoff = " msgstr "\n# Electrostatics long range cutoff = " # File: calc/dl_poly/dlp_print.c, Line: 1994 msgid "\n# Use optional padding to the cutoff = " msgstr "\n# Use optional padding to the cutoff = " # File: calc/dl_poly/dlp_print.c, Line: 1998 msgid "\n# Use extended coulombic exclusion\n" msgstr "\n# Use extended coulombic exclusion\n" # File: calc/dl_poly/dlp_print.c, Line: 2000 msgid "\n# Electrostatics calculated using " msgstr "\n# Electrostatics calculated using " # File: calc/dl_poly/dlp_print.c, Line: 2020 msgid "\n# Evaluate k space contribution to the Ewald sum every: " msgstr "\n# Evaluate k space contribution to the Ewald sum every: " # File: calc/dl_poly/dlp_print.c, Line: 2020,2197,2284,2335 msgid " MD step(s)" msgstr " MD step(s)" # File: calc/dl_poly/dlp_print.c, Line: 2025 msgid "# No electrostatics interactions (long range)" msgstr "# No electrostatics interactions (long range)" # File: calc/dl_poly/dlp_print.c, Line: 2031 msgid "\n# Metallic interactions" msgstr "\n# Metallic interactions" # File: calc/dl_poly/dlp_print.c, Line: 2035 msgid "\n# Enforce direct calculation of metal interactions" msgstr "\n# Enforce direct calculation of metal interactions" # File: calc/dl_poly/dlp_print.c, Line: 2035 msgid "\n# This does not work with metal alloy systems using the *EAM* potentials" msgstr "\n# This does not work with metal alloy systems using the *EAM* potentials" # File: calc/dl_poly/dlp_print.c, Line: 2039 msgid "\n# Switch the TABEAM default embedding functions, F, from F(ρ) to F(√ρ)" msgstr "\n# Switch the TABEAM default embedding functions, F, from F(ρ) to F(√ρ)" # File: calc/dl_poly/dlp_print.c, Line: 2043 msgid "\n# Thermostat information" msgstr "\n# Thermostat information" # File: calc/dl_poly/dlp_print.c, Line: 2088 msgid "# Attach a pseudo thermal bath with:\n" msgstr "# Attach a pseudo thermal bath with:\n" # File: calc/dl_poly/dlp_print.c, Line: 2091 msgid "# - thermostat of type: %s\n" msgstr "# - thermostat of type: %s\n" # File: calc/dl_poly/dlp_print.c, Line: 2095 msgid "# - thermostats of type Langevin and Direct applied successively\n" msgstr "# - thermostats of type Langevin and Direct applied successively\n" # File: calc/dl_poly/dlp_print.c, Line: 2099 msgid "# - thickness of thermostat layer to MD cell boundaries: %f Ang.\n" msgstr "# - thickness of thermostat layer to MD cell boundaries: %f Ang.\n" # File: calc/dl_poly/dlp_print.c, Line: 2104 msgid "# - Target temperature: %f K\n" msgstr "# - Target temperature: %f K\n" # File: calc/dl_poly/dlp_print.c, Line: 2110 msgid "# - Target temperature: system target temperature\n" msgstr "# - Target temperature: system target temperature\n" # File: calc/dl_poly/dlp_print.c, Line: 2123 msgid "# Molecular dynamics information\n" msgstr "# Molecular dynamics information\n" # File: calc/dl_poly/dlp_print.c, Line: 2150 msgid "# Variable time step, initial time step = " msgstr "# Variable time step, initial time step = " # File: calc/dl_poly/dlp_print.c, Line: 2151 msgid "\n# Maximum time step allowed = " msgstr "\n# Maximum time step allowed = " # File: calc/dl_poly/dlp_print.c, Line: 2152 msgid "\n# Maximum move allowed = " msgstr "\n# Maximum move allowed = " # File: calc/dl_poly/dlp_print.c, Line: 2153 msgid "\n# Minimum move allowed = " msgstr "\n# Minimum move allowed = " # File: calc/dl_poly/dlp_print.c, Line: 2157 msgid "# MD time step = " msgstr "# MD time step = " # File: calc/dl_poly/dlp_print.c, Line: 2160 msgid "\n# Shake / Rattle iterations limit: " msgstr "\n# Shake / Rattle iterations limit: " # File: calc/dl_poly/dlp_print.c, Line: 2160 msgid " cycle(s)" msgstr " cycle(s)" # File: calc/dl_poly/dlp_print.c, Line: 2161 msgid "\n# Shake / Rattle tolerance: " msgstr "\n# Shake / Rattle tolerance: " # File: calc/dl_poly/dlp_print.c, Line: 2165 msgid "\n# FIQA iterations limit: " msgstr "\n# FIQA iterations limit: " # File: calc/dl_poly/dlp_print.c, Line: 2166 msgid "\n# Quaternion tolerance: " msgstr "\n# Quaternion tolerance: " # File: calc/dl_poly/dlp_print.c, Line: 2171 msgid "\n\n# Initiate impact on particle\n# - with particle index: " msgstr "\n\n# Initiate impact on particle\n# - with particle index: " # File: calc/dl_poly/dlp_print.c, Line: 2174 msgid "\n# - at MD step: " msgstr "\n# - at MD step: " # File: calc/dl_poly/dlp_print.c, Line: 2178 msgid "\n# - with energy (k eV): " msgstr "\n# - with energy (k eV): " # File: calc/dl_poly/dlp_print.c, Line: 2182 msgid "\n# - direction (x, y, z): " msgstr "\n# - direction (x, y, z): " # File: calc/dl_poly/dlp_print.c, Line: 2196 msgid "\n\n# Equilibration information" msgstr "\n\n# Equilibration information" # File: calc/dl_poly/dlp_print.c, Line: 2197 msgid "\n# Equilibrate during: " msgstr "\n# Equilibrate during: " # File: calc/dl_poly/dlp_print.c, Line: 2200 msgid "\n# During equilibration: rescale system temperature every: " msgstr "\n# During equilibration: rescale system temperature every: " # File: calc/dl_poly/dlp_print.c, Line: 2204 msgid "\n# During equilibration: cap forces, with fmax= " msgstr "\n# During equilibration: cap forces, with fmax= " # File: calc/dl_poly/dlp_print.c, Line: 2208 msgid "\n# During equilibration: resample the instantaneous momenta distribution every: " msgstr "\n# During equilibration: resample the instantaneous momenta distribution every: " # File: calc/dl_poly/dlp_print.c, Line: 2212 msgid "\n# Every %d step(s) during equilibration: minimize %s with target %s= %f\n" msgstr "\n# Every %d step(s) during equilibration: minimize %s with target %s= %f\n" # File: calc/dl_poly/dlp_print.c, Line: 2223 msgid "# At the start of the equilibration: minimize %s with target %s= %f\n" msgstr "# At the start of the equilibration: minimize %s with target %s= %f\n" # File: calc/dl_poly/dlp_print.c, Line: 2233 msgid "# During equilibration: perform a zero temperature MD minimization\n" msgstr "# During equilibration: perform a zero temperature MD minimization\n" # File: calc/dl_poly/dlp_print.c, Line: 2238 msgid "# Include equilibration data in overall statistics\n" msgstr "# Include equilibration data in overall statistics\n" # File: calc/dl_poly/dlp_print.c, Line: 2245 msgid "\n# Analysis information" msgstr "\n# Analysis information" # File: calc/dl_poly/dlp_print.c, Line: 2248 msgid "\n# Calculate and collect all intra-molecular PDFs" msgstr "\n# Calculate and collect all intra-molecular PDFs" # File: calc/dl_poly/dlp_print.c, Line: 2254 msgid "\n# Calculate and collect bonds PDFs" msgstr "\n# Calculate and collect bonds PDFs" # File: calc/dl_poly/dlp_print.c, Line: 2260 msgid "\n# Calculate and collect angles PDFs" msgstr "\n# Calculate and collect angles PDFs" # File: calc/dl_poly/dlp_print.c, Line: 2265 msgid "\n# Calculate and collect dihedrals PDFs" msgstr "\n# Calculate and collect dihedrals PDFs" # File: calc/dl_poly/dlp_print.c, Line: 2270 msgid "\n# Calculate and collect inversions PDFs" msgstr "\n# Calculate and collect inversions PDFs" # File: calc/dl_poly/dlp_print.c, Line: 2273 msgid "\n# Print any opted for analysis inter and intra-molecular PDFs" msgstr "\n# Print any opted for analysis inter and intra-molecular PDFs" # File: calc/dl_poly/dlp_print.c, Line: 2280 msgid "\n# Bin size for RDfs and Z-density distribution: " msgstr "\n# Bin size for RDfs and Z-density distribution: " # File: calc/dl_poly/dlp_print.c, Line: 2284 msgid "\n# Calculate and collect radial distribution functions every: " msgstr "\n# Calculate and collect radial distribution functions every: " # File: calc/dl_poly/dlp_print.c, Line: 2290 msgid "\n# Calculate and collect Z-density profile every: " msgstr "\n# Calculate and collect Z-density profile every: " # File: calc/dl_poly/dlp_print.c, Line: 2296 msgid "\n# Velocity autocorrelation functions, VAFs\n" msgstr "\n# Velocity autocorrelation functions, VAFs\n" # File: calc/dl_poly/dlp_print.c, Line: 2302 msgid "\n# Ignore time averaging for the VAFs" msgstr "\n# Ignore time averaging for the VAFs" # File: calc/dl_poly/dlp_print.c, Line: 2309 msgid "\n\n# Output information" msgstr "\n\n# Output information" # File: calc/dl_poly/dlp_print.c, Line: 2312 msgid "\n# Write defects trajectory file, DEFECTS\n" msgstr "\n# Write defects trajectory file, DEFECTS\n" # File: calc/dl_poly/dlp_print.c, Line: 2318 msgid "\n# Write displacement trajectory file, RSDDAT\n" msgstr "\n# Write displacement trajectory file, RSDDAT\n" # File: calc/dl_poly/dlp_print.c, Line: 2324 msgid "\n# Write HISTORY file\n" msgstr "\n# Write HISTORY file\n" # File: calc/dl_poly/dlp_print.c, Line: 2330 msgid "\n# Write MSDTMP file\n" msgstr "\n# Write MSDTMP file\n" # File: calc/dl_poly/dlp_print.c, Line: 2335 msgid "\n# Print system data every: " msgstr "\n# Print system data every: " # File: calc/dl_poly/dlp_print.c, Line: 2339 msgid "\n# Accumulate statics data every: " msgstr "\n# Accumulate statics data every: " # File: calc/dl_poly/dlp_print.c, Line: 2343 msgid "\n# Set rolling average stack to: " msgstr "\n# Set rolling average stack to: " # File: calc/dl_poly/dlp_print.c, Line: 2347 msgid "\n# Dump restart information every: " msgstr "\n# Dump restart information every: " # File: calc/dl_poly/dlp_print.c, Line: 2364 msgid "# - method = " msgstr "# - method = " # File: calc/dl_poly/dlp_print.c, Line: 2371 msgid "\n# - precision = " msgstr "\n# - precision = " # File: calc/dl_poly/dlp_print.c, Line: 2375 msgid "\n# - type = " msgstr "\n# - type = " # File: calc/dl_poly/dlp_print.c, Line: 2381 msgid "\n# - j, reader count = " msgstr "\n# - j, reader count = " # File: calc/dl_poly/dlp_print.c, Line: 2388 msgid "\n# - k, batch size = " msgstr "\n# - k, batch size = " # File: calc/dl_poly/dlp_print.c, Line: 2393 msgid "\n# - l, buffer size = " msgstr "\n# - l, buffer size = " # File: calc/dl_poly/dlp_print.c, Line: 2399 msgid "\n# - e, parallel error check is " msgstr "\n# - e, parallel error check is " # File: calc/dl_poly/dlp_print.c, Line: 2435 msgid "\n# Seeds for the random number generators\n" msgstr "\n# Seeds for the random number generators\n" # File: calc/dl_poly/dlp_print.c, Line: 2441 msgid "\n# Limits to 2 the number of processors in z direction for slab simulations\n" msgstr "\n# Limits to 2 the number of processors in z direction for slab simulations\n" # File: curve/cedit.c, Line: 294 msgid "Data sets" msgstr "Data sets" # File: curve/cedit.c, Line: 362 # File: curve/m_curve.c, Line: 86 msgid "Edit curve" msgstr "Edit curve" # File: curve/cedit.c, Line: 372,373 msgid "Graph" msgstr "Graph" # File: curve/cedit.c, Line: 376,377 # File: curve/m_curve.c, Line: 611 msgid "Data" msgstr "Data" # File: curve/cedit.c, Line: 380,381 msgid "Legend" msgstr "Legend" # File: curve/cedit.c, Line: 389 msgid "Add data set(s) to the active window" msgstr "Add data set(s) to the active window" # File: curve/cedit.c, Line: 392,393 msgid "Add data set" msgstr "Add data set" # File: curve/datab.c, Line: 472 msgid "Add Constant to Column" msgstr "Add Constant to Column" # File: curve/datab.c, Line: 478,613 msgid "Add Constant to Last Column" msgstr "Add Constant to Last Column" # File: curve/datab.c, Line: 525 msgid "Multiply Column by Constant" msgstr "Multiply Column by Constant" # File: curve/datab.c, Line: 531,614 msgid "Multiply Last Column by Constant" msgstr "Multiply Last Column by Constant" # File: curve/datab.c, Line: 550 msgid "Before" msgstr "Before" # File: curve/datab.c, Line: 551 msgid "After" msgstr "After" # File: curve/datab.c, Line: 563 msgid "Insert Row(s)" msgstr "Insert Row(s)" # File: curve/datab.c, Line: 575 msgid "Delete Row(s)" msgstr "Delete Row(s)" # File: curve/datab.c, Line: 587 msgid "Copy Selected Row(s)" msgstr "Copy Selected Row(s)" # File: curve/datab.c, Line: 601 msgid "Cell Based Operations" msgstr "Cell Based Operations" # File: curve/datab.c, Line: 626 msgid "Column Based Operations" msgstr "Column Based Operations" # File: curve/m_curve.c, Line: 76 msgid "Curve window" msgstr "Curve window" # File: curve/m_curve.c, Line: 85,707 msgid "Autoscale" msgstr "Autoscale" # File: curve/m_curve.c, Line: 87 msgid "Close curve" msgstr "Close curve" # File: curve/m_curve.c, Line: 88 msgid "Export data" msgstr "Export data" # File: curve/m_curve.c, Line: 89 msgid "Save image" msgstr "Save image" # File: curve/m_curve.c, Line: 510 msgid "Edit Curve" msgstr "Edit Curve" # File: curve/m_curve.c, Line: 513 msgid "Export Image" msgstr "Export Image" # File: curve/m_curve.c, Line: 530 msgid "Edit Data" msgstr "Edit Data" # File: curve/m_curve.c, Line: 592 # File: curve/w_data.c, Line: 178 msgid "Save Data" msgstr "Save Data" # File: curve/m_curve.c, Line: 613 msgid "Curve" msgstr "Curve" # File: curve/m_curve.c, Line: 659 msgid "Add Data Set" msgstr "Add Data Set" # File: curve/m_curve.c, Line: 677 msgid "Remove Data Set" msgstr "Remove Data Set" # File: curve/tab-1.c, Line: 103 # File: curve/w_img.c, Line: 83 msgid "X size must be > 0" msgstr "X size must be > 0" # File: curve/tab-1.c, Line: 104 # File: curve/w_img.c, Line: 83 msgid "Y size must be > 0" msgstr "Y size must be > 0" # File: curve/tab-1.c, Line: 471 msgid "Frame x min must be < to frame x max" msgstr "Frame x min must be < to frame x max" # File: curve/tab-1.c, Line: 483 msgid "Frame x max must be > to frame x min" msgstr "Frame x max must be > to frame x min" # File: curve/tab-1.c, Line: 499 msgid "Frame y min must be > to frame y max" msgstr "Frame y min must be > to frame y max" # File: curve/tab-1.c, Line: 511 msgid "Frame y max must be < to frame y min" msgstr "Frame y max must be < to frame y min" # File: curve/tab-1.c, Line: 543 msgid "Closed" msgstr "Closed" # File: curve/tab-1.c, Line: 543 msgid "Top Open" msgstr "Top Open" # File: curve/tab-1.c, Line: 543 msgid "Right Open" msgstr "Right Open" # File: curve/tab-1.c, Line: 543 msgid "Left Open" msgstr "Left Open" # File: curve/tab-1.c, Line: 543 msgid "Open " msgstr "Open " # File: curve/tab-1.c, Line: 560 msgid "Size:" msgstr "Size:" # File: curve/tab-1.c, Line: 568 # File: curve/w_img.c, Line: 362 msgid "pixels" msgstr "pixels" # File: curve/tab-1.c, Line: 572 msgid "Insert title" msgstr "Insert title" # File: curve/tab-1.c, Line: 582 msgid "Default title" msgstr "Default title" # File: curve/tab-1.c, Line: 597 # File: curve/tab-3.c, Line: 335 # File: curve/tab-4.c, Line: 818,854 msgid "Font:" msgstr "Font:" # File: curve/tab-1.c, Line: 601,667 # File: curve/tab-3.c, Line: 339,381 msgid "Color:" msgstr "Color:" # File: curve/tab-1.c, Line: 605 # File: curve/tab-3.c, Line: 343 msgid "Position:" msgstr "Position:" # File: curve/tab-1.c, Line: 620 msgid "Background color:" msgstr "Background color:" # File: curve/tab-1.c, Line: 629 msgid "Show/Hide frame" msgstr "Show/Hide frame" # File: curve/tab-1.c, Line: 659 # File: curve/tab-2.c, Line: 953 # File: curve/tab-3.c, Line: 373 msgid "Line style:" msgstr "Line style:" # File: curve/tab-1.c, Line: 664 # File: curve/tab-2.c, Line: 962 # File: curve/tab-3.c, Line: 378 msgid "Line width:" msgstr "Line width:" # File: curve/tab-1.c, Line: 689 # File: curve/tab-4.c, Line: 825,856 msgid "Position: " msgstr "Position: " # File: curve/tab-2.c, Line: 348 msgid "Line width must be > 0.0" msgstr "Line width must be > 0.0" # File: curve/tab-2.c, Line: 392 msgid "Glyph size must be > 0.0" msgstr "Glyph size must be > 0.0" # File: curve/tab-2.c, Line: 436 msgid "Bar width must be > 0.0" msgstr "Bar width must be > 0.0" # File: curve/tab-2.c, Line: 480 msgid "Bar opacity must ∈ [0.0 - 1.0]" msgstr "Bar opacity must ∈ [0.0 - 1.0]" # File: curve/tab-2.c, Line: 547 msgid "Glyph frequency must be > 0" msgstr "Glyph frequency must be > 0" # File: curve/tab-2.c, Line: 846 msgid "Data set(s)" msgstr "Data set(s)" # File: curve/tab-2.c, Line: 929 msgid "Bar" msgstr "Bar" # File: curve/tab-2.c, Line: 916 msgid "Select set: " msgstr "Select set: " # File: curve/tab-2.c, Line: 933 msgid "Plot type:" msgstr "Plot type:" # File: curve/tab-2.c, Line: 941 msgid "Data color:" msgstr "Data color:" # File: curve/tab-2.c, Line: 945 msgid "No Line" msgstr "No Line" # File: curve/tab-2.c, Line: 970 msgid "No Glyph" msgstr "No Glyph" # File: curve/tab-2.c, Line: 978 msgid "Glyph type:" msgstr "Glyph type:" # File: curve/tab-2.c, Line: 983 msgid "Glyph size:" msgstr "Glyph size:" # File: curve/tab-2.c, Line: 988 msgid "Glyph freq.:" msgstr "Glyph freq.:" # File: curve/tab-2.c, Line: 1000 msgid "Bar width:" msgstr "Bar width:" # File: curve/tab-2.c, Line: 1004 msgid "Color opacity:" msgstr "Color opacity:" # File: curve/tab-2.c, Line: 1008 msgid "Plain" msgstr "Plain" # File: curve/tab-2.c, Line: 1012 msgid "Bar opacity:" msgstr "Bar opacity:" # File: curve/tab-2.c, Line: 1021 msgid "Automatic x axis shift for bar diagram (to improve visibility)" msgstr "Automatic x axis shift for bar diagram (to improve visibility)" # File: curve/tab-2.c, Line: 1027 msgid "Layers organization: " msgstr "Layers organization: " # File: curve/tab-2.c, Line: 1037 msgid "\tMove up/down to adjust layer position (up to front, down to back)" msgstr "\tMove up/down to adjust layer position (up to front, down to back)" # File: curve/tab-3.c, Line: 327 msgid "Show/Hide legend" msgstr "Show/Hide legend" # File: curve/tab-3.c, Line: 356 msgid "Show/Hide legend box" msgstr "Show/Hide legend box" # File: curve/tab-4.c, Line: 123 msgid "Axis min must be < to axis max" msgstr "Axis min must be < to axis max" # File: curve/tab-4.c, Line: 150 msgid "Axis max must be > to axis min" msgstr "Axis max must be > to axis min" # File: curve/tab-4.c, Line: 179 msgid "Major tick must be > 0.0" msgstr "Major tick must be > 0.0" # File: curve/tab-4.c, Line: 703 msgid "Select axis:" msgstr "Select axis:" # File: curve/tab-4.c, Line: 705 msgid "X axis" msgstr "X axis" # File: curve/tab-4.c, Line: 706 msgid "Y axis" msgstr "Y axis" # File: curve/tab-4.c, Line: 716 msgid "Scale type:" msgstr "Scale type:" # File: curve/tab-4.c, Line: 724 msgid "Autoscale axis" msgstr "Autoscale axis" # File: curve/tab-4.c, Line: 730 msgid "Min:" msgstr "Min:" # File: curve/tab-4.c, Line: 733 msgid "Max:" msgstr "Max:" # File: curve/tab-4.c, Line: 740 msgid "Major ticks spacing:" msgstr "Major ticks spacing:" # File: curve/tab-4.c, Line: 747 msgid "Number of minor ticks:" msgstr "Number of minor ticks:" # File: curve/tab-4.c, Line: 757 msgid "Tick marks:" msgstr "Tick marks:" # File: curve/tab-4.c, Line: 760,798 msgid "Location:" msgstr "Location:" # File: curve/tab-4.c, Line: 762 msgid "In" msgstr "In" # File: curve/tab-4.c, Line: 763 msgid "Out" msgstr "Out" # File: curve/tab-4.c, Line: 770,801 msgid "Opposite" msgstr "Opposite" # File: curve/tab-4.c, Line: 771,802 msgid "Both" msgstr "Both" # File: curve/tab-4.c, Line: 772,803 # File: calc/cp2k/cp2k_init.c, Line: 700 # File: calc/dl_poly/dlp_field.c, Line: 1493 # File: opengl/win/w_advance.c, Line: 1344,1635 # File: opengl/win/w_periodic.c, Line: 90 msgid "None" msgstr "None" # File: curve/tab-4.c, Line: 779 msgid "Major ticks size:" msgstr "Major ticks size:" # File: curve/tab-4.c, Line: 785 msgid "Minor ticks size:" msgstr "Minor ticks size:" # File: curve/tab-4.c, Line: 795 msgid "Tick labels:" msgstr "Tick labels:" # File: curve/tab-4.c, Line: 809 msgid "Significant digits:" msgstr "Significant digits:" # File: curve/tab-4.c, Line: 822 msgid "Angle:" msgstr "Angle:" # File: curve/tab-4.c, Line: 839 msgid "Show/Hide axis (if min[axis] < 0.0 < max[axis])" msgstr "Show/Hide axis (if min[axis] < 0.0 < max[axis])" # File: curve/tab-4.c, Line: 841 msgid "Show/Hide axis grid" msgstr "Show/Hide axis grid" # File: curve/tab-4.c, Line: 847 msgid "Use default axis title" msgstr "Use default axis title" # File: curve/w_curve.c, Line: 157 msgid "zoom: out (x) / in (y)" msgstr "zoom: out (x) / in (y)" # File: curve/w_curve.c, Line: 164 msgid "zoom: out (x) / out (y)" msgstr "zoom: out (x) / out (y)" # File: curve/w_curve.c, Line: 176 msgid "zoom: in (x) / in (y)" msgstr "zoom: in (x) / in (y)" # File: curve/w_curve.c, Line: 183 msgid "zoom: in (x) / out (y)" msgstr "zoom: in (x) / out (y)" # File: curve/w_curve.c, Line: 219 msgid "(Not in plot)" msgstr "(Not in plot)" # File: curve/w_curve.c, Line: 257 msgid "Not in plot" msgstr "Not in plot" # File: curve/w_data.c, Line: 187 msgid "Xmgrace file (*.agr)" msgstr "Xmgrace file (*.agr)" # File: curve/w_data.c, Line: 191 msgid "x/y ASCII file (*.dat)" msgstr "x/y ASCII file (*.dat)" # File: curve/w_img.c, Line: 226 msgid "PNG file (*.png)" msgstr "PNG file (*.png)" # File: curve/w_img.c, Line: 227 msgid "PDF file (*.pdf)" msgstr "PDF file (*.pdf)" # File: curve/w_img.c, Line: 228 msgid "SVG file (*.svg)" msgstr "SVG file (*.svg)" # File: curve/w_img.c, Line: 229 msgid "EPS file (*.eps)" msgstr "EPS file (*.eps)" # File: curve/w_img.c, Line: 234 msgid "To save an image please enter a file format" msgstr "To save an image please enter a file format" # File: curve/w_img.c, Line: 238 msgid "You need to specify the size of the image" msgstr "You need to specify the size of the image" # File: curve/w_img.c, Line: 322 msgid "Export image" msgstr "Export image" # File: curve/w_img.c, Line: 332 msgid "Format: " msgstr "Format: " # File: curve/w_img.c, Line: 350 msgid "Size: " msgstr "Size: " # File: curve/w_img.c, Line: 364 msgid "Make background transparent" msgstr "Make background transparent" atomes_1.3.1/NEWS.md0000664000175000017500000000042715212624223013606 0ustar lerouxlerouxWelcome to **atomes** ! Detailed installation instruction can be found on the web site: [https://atomes.ipcms.fr/](https://atomes.ipcms.fr/) For basic help after compilation and/or installation: atomes -h atomes --help For version information: atomes -v atomes --version atomes_1.3.1/missing0000775000175000017500000001533615212624223014114 0ustar lerouxleroux#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2021 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program 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 2, or (at your option) # any later version. # This program 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 this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=https://www.perl.org/ flex_URL=https://github.com/westes/flex gnu_software_URL=https://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: atomes_1.3.1/configure.ac0000664000175000017500000001421715212624223015000 0ustar lerouxlerouxdnl Process this file with autoconf to produce a configure script. dnl Created by Sébastien Le Roux. AC_PREREQ(2.59) m4_define(atomes_major_version, 1) m4_define(atomes_minor_version, 3) m4_define(atomes_patch_version, 1) m4_define(atomes_version, atomes_major_version.atomes_minor_version.atomes_patch_version) m4_define(atomes_url, https://atomes.ipcms.fr) m4_define(atomes_tar, atomes) AC_INIT([atomes], [atomes_version], [atomes@ipcms.unistra.fr], [atomes_tar], [atomes_url]) AM_INIT_AUTOMAKE AC_DEFINE([ATOMES_MAJOR_VERSION], [atomes_major_version], [atomes major version]) AC_SUBST(ATOMES_MAJOR_VERSION, atomes_major_version) AC_DEFINE([ATOMES_MINOR_VERSION], [atomes_minor_version], [atomes minor version]) AC_SUBST(ATOMES_MINOR_VERSION, atomes_minor_version) AC_DEFINE([ATOMES_PATCH_VERSION], [atomes_patch_version], [atomes patch version]) AC_SUBST(ATOMES_PATCH_VERSION, atomes_patch_version) dnl *************************************************************************** dnl Internatinalization dnl *************************************************************************** dnl GETTEXT_PACKAGE=atomes dnl AC_SUBST(GETTEXT_PACKAGE) dnl AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"], [GETTEXT package name]) AC_PROG_CC AC_CHECK_HEADERS([libintl.h locale.h]) dnl *************************************************************************** dnl Check for the operating system dnl *************************************************************************** AC_CANONICAL_HOST build_linux=no build_windows=no build_mac=no # Detect the target system case "${host_os}" in linux*) build_linux=yes echo "Building Linux application" ;; cygwin*|mingw*) build_windows=yes echo "Building Windows application" ;; darwin*) build_mac=yes echo "Building macOS application" ;; *) AC_MSG_ERROR(["OS $host_os is not supported"]) ;; esac # Pass the conditionals to automake AM_CONDITIONAL([LINUX], [test "$build_linux" = "yes"]) AM_CONDITIONAL([WINDOWS], [test "$build_windows" = "yes"]) AM_CONDITIONAL([OSX], [test "$build_mac" = "yes"]) if test "$build_windows" = "yes"; then AC_CHECK_TOOL([WINDRES], [windres], [no]) if test "$WINDRES" = no; then AC_MSG_ERROR([*** Could not find an implementation of windres in your PATH.]) fi fi dnl *************************************************************************** dnl Check for utilities dnl *************************************************************************** AC_CHECK_PROG([PKG_CONFIG], [pkg-config], [yes], [no]) AC_CHECK_PROG([UP_MIME], [update-mime-database], [yes], [no]) AC_CHECK_PROG([UP_DESKTOP], [update-desktop-database], [yes], [no]) AC_CHECK_PROG([UP_APPSTREAM], [appstream-util], [yes], [no]) dnl *************************************************************************** dnl Check for required librairies dnl *************************************************************************** # determine the GTK version to use AC_MSG_CHECKING([the GTK version to use]) AC_ARG_WITH([gtk], [AS_HELP_STRING([--with-gtk=3|4], [the GTK version to use (default: 3)])], [case "$with_gtk" in 3|4) ;; *) AC_MSG_ERROR([invalid GTK version specified]) ;; esac], [with_gtk=3]) AC_MSG_RESULT([$with_gtk]) AM_CONDITIONAL([GTK3], [test "$with_gtk" == "3"]) case "$with_gtk" in 3) gtk_version="gtk+-3.0" gtk_version_number="3.16" ;; 4) gtk_version="gtk4" gtk_version_number="4.6" ;; esac PKG_CHECK_MODULES([LGTK], [$gtk_version >= $gtk_version_number]) if test "$with_gtk" = "3"; then if test "$build_mac" = "yes"; then PKG_CHECK_MODULES([INTEGRATION], [gtk-mac-integration]) fi fi PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.4.0]) PKG_CHECK_MODULES([PANGOFT2], [pangoft2]) PKG_CHECK_MODULES([FFMPEG], [libavcodec libavformat libavutil libswscale]) if test "$build_windows" = "no"; then PKG_CHECK_MODULES([GLU], [glu]) fi PKG_CHECK_MODULES([EPOXY], [epoxy]) # Checking for compilers dnl Definig the macro AX_CHECK_COMPILER_FLAG: AC_DEFUN([AX_CHECK_COMPILER_FLAG], [AC_PREREQ(2.64) dnl for _AC_LANG_PREFIX and AS_VAR_IF AS_VAR_PUSHDEF([CACHEVAR], [ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1]) AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], [AS_VAR_SET(CACHEVAR,[yes])], [AS_VAR_SET(CACHEVAR,[no])]) _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) AS_VAR_IF(CACHEVAR,yes, [m4_default([$2], :)], [m4_default([$3], :)]) AS_VAR_POPDEF([CACHEVAR]) ])dnl AX_CHECK_COMPILER_FLAG # C AC_PROG_CC AX_CHECK_COMPILER_FLAG([$CFLAGS]) # Fortran 90 AC_FC_WRAPPERS AC_LANG_PUSH([Fortran]) fcflags_save="$FCFLAGS" AC_PROG_FC([xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe], [90]) FCFLAGS="$fcflags_save" AC_FC_SRCEXT(f90, FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS", AC_MSG_ERROR([Cannot compile .f90 files])) AC_FC_SRCEXT(F90, FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS", AC_MSG_ERROR([Cannot compile .F90 files])) AX_CHECK_COMPILER_FLAG([$FCFLAGS]) AC_FC_LIBRARY_LDFLAGS AC_FC_FREEFORM AC_LANG_POP([Fortran]) cat lic > src/version.h echo "#define FC \""$FC"\"" >> src/version.h echo "#define FCFLAGS \""$FCFLAGS"\"" >> src/version.h echo "#define CC \""$CC"\"" >> src/version.h echo "#define CFLAGS \""$CFLAGS"\"" >> src/version.h AC_MSG_CHECKING([the OpenMP specification and flags]) AC_ARG_ENABLE([--disable-openmp], [AS_HELP_STRING([--disable-openmp], [disable OpenMP thread parallelisation (default: no)])], [with_opemp="no"], [with_openmp="yes"]) AC_MSG_RESULT([$with_openmp]) if test "$with_openmp" = "yes"; then AC_OPENMP AC_SUBST([OPENMP_CFLAGS]) AM_CONDITIONAL([OPENMP], [test "${OPENMP_CFLAGS}" != ""]) fi AC_CONFIG_FILES([ Makefile data/Makefile man/Makefile locale/Makefile src/Makefile src/startup-testing/Makefile ]) AC_CONFIG_HEADERS([config.h]) if test "$build_windows" = "yes"; then AC_CONFIG_FILES([misc/win/atomes.rc:misc/win/atomes.rc.in misc/win/startup.rc:misc/win/startup.rc.in]) fi AC_OUTPUT atomes_1.3.1/debian/0000775000175000017500000000000015212624223013727 5ustar lerouxlerouxatomes_1.3.1/debian/changelog0000664000175000017500000000646015212624223015607 0ustar lerouxlerouxatomes (1.3.1-2) unstable; urgency=medium * Bug corrections, for good this time :-( -- Sébastien Le Roux Thu, 11 Jun 2026 23:26:21 +0200 atomes (1.3.1-1) unstable; urgency=medium * Bug corrections -- Sébastien Le Roux Thu, 11 Jun 2026 21:22:29 +0200 atomes (1.3.0-1) unstable; urgency=medium * New upstream version 1.3.0 -- Sébastien Le Roux Thu, 11 Jun 2026 14:22:21 +0200 atomes (1.2.1-1) unstable; urgency=medium [ Pierre Gruet ] * Team upload * New upstream version 1.2.1 * Rewriting d/watch with version 5 * Using appstreamcli instead of appstream-util (Closes: #1120450) * New upstream version 1.2.1 * Rewriting d/watch with version 5 * Using appstreamcli instead of appstream-util -- Pierre Gruet Mon, 10 Nov 2025 13:42:28 +0100 atomes (1.2.0-1) unstable; urgency=medium * New upstream version 1.2.0 [ Pierre Gruet ] * Refreshing patch -- Sébastien Le Roux Thu, 04 Sep 2025 14:21:06 +0200 atomes (1.1.18-1) unstable; urgency=medium * New upstream version 1.1.18 [ Pierre Gruet ] * Raising Standards version to 4.7.2 (no change) * Removing old FSF address from d/copyright -- Sébastien Le Roux Thu, 21 Aug 2025 09:25:53 +0200 atomes (1.1.17-1) unstable; urgency=medium * New upstream version 1.1.17 [ Pierre Gruet ] * Raising Standards version to 4.7.1 (no change) * Bumping d/copyright years -- Sébastien Le Roux Fri, 21 Feb 2025 10:48:19 +0100 atomes (1.1.16-1) unstable; urgency=medium * Team upload * New upstream version 1.1.16 -- Pierre Gruet Thu, 26 Dec 2024 22:15:39 +0100 atomes (1.1.15-1) unstable; urgency=medium * New upstream version 1.1.15 * Refreshing patch * Raising Standards version to 4.7.0, no change * Fixing spelling of the Lintian override -- Sébastien Le Roux Wed, 20 Nov 2024 11:37:02 +0100 atomes (1.1.14-1.1) unstable; urgency=medium * Non-maintainer upload. * debian/control: Removed hard-coded dependency on libgtk-3-0 (Closes: #1068217) -- Sebastian Ramacher Sat, 13 Apr 2024 19:42:07 +0200 atomes (1.1.14-1) unstable; urgency=medium * New upstream version * Refreshing patches [ Pierre Gruet ] * Replacing obsolete pkg-config by pkgconf in the build-dependencies -- Sébastien Le Roux Wed, 20 Mar 2024 16:40:00 +0200 atomes (1.1.12+repack-2) unstable; urgency=medium * Team upload * Removing -fstack-protector-strong from FCFLAGS on arm64 to circumvent gcc bug 111528 -- Pierre Gruet Wed, 27 Sep 2023 09:41:46 +0200 atomes (1.1.12+repack-1) unstable; urgency=medium * New upstream version -- Sébastien Le Roux Tue, 19 Sep 2023 15:45:00 +0200 atomes (1.1.12-2) unstable; urgency=medium * Team upload. * Source-only upload to unstable -- Pierre Gruet Sat, 26 Aug 2023 22:34:12 +0200 atomes (1.1.12-1) unstable; urgency=medium * Initial release (Closes: #1019387) -- Sébastien Le Roux Mon, 17 Jul 2023 17:26:00 +0200 atomes_1.3.1/debian/copyright0000664000175000017500000011500215212624223015661 0ustar lerouxlerouxFormat: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: atomes Upstream-Contact: atomes@ipcms.unistra.fr Sébastien Le Roux Source: https://github.com/Slookeur/Atomes-GNU/ Files: * Copyright: 2022-2026 Dr. Sébastien Le Roux License: AGPL-3.0-or-later Files: Makefile.in src/Makefile.in Copyright: 1994-2021 Free Software Foundation, Inc. License: FSFULLR Files: aclocal.m4 Copyright: 1996-2020 Free Software Foundation, Inc. 2004 Scott James Remnant . 2012-2015 Dan Nicholson License: FSFULLR and GPL-2.0-or-later Files: compile depcomp missing Copyright: 1996-2020 Free Software Foundation, Inc. License: GPL-2.0-or-later with Autoconf-data exception Files: config.guess config.sub Copyright: 1992-2018 Free Software Foundation, Inc. License: GPL-3.0-or-later Files: configure autom4te.cache/* Copyright: 1992-2021 Free Software Foundation, Inc. License: FSFUL Files: install-sh Copyright: 1994 X Consortium License: Expat-X Comment: FSF changes to this file are in the public domain. Files: INSTALL Copyright: 1994-1996, 1999-2002, 2004-2016 Free Software Foundation, Inc. License: FSFULLR Files: metadata/fr.ipcms.atomes.appdata.xml Copyright: 2025 Dr. Sébastien Le Roux License: FSFAP Files: debian/* Copyright: 2022-2025 Dr. Sébastien Le Roux License: AGPL-3.0-or-later License: AGPL-3.0-or-later GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 . Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. . Preamble . The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. . The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. . When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. . Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. . A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. . The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. . An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. . The precise terms and conditions for copying, distribution and modification follow. . TERMS AND CONDITIONS . 0. Definitions. . "This License" refers to version 3 of the GNU Affero General Public License. . "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. . "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. . To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. . A "covered work" means either the unmodified Program or a work based on the Program. . To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. . To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. . An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. . 1. Source Code. . The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. . A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. . The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. . The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. . The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. . The Corresponding Source for a work in source code form is that same work. . 2. Basic Permissions. . All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. . You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. . Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. . 3. Protecting Users' Legal Rights From Anti-Circumvention Law. . No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. . When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. . 4. Conveying Verbatim Copies. . You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. . You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. . 5. Conveying Modified Source Versions. . You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: . a) The work must carry prominent notices stating that you modified it, and giving a relevant date. . b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". . c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. . d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. . A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. . 6. Conveying Non-Source Forms. . You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: . a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. . b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. . c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. . d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. . e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. . A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. . A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. . "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. . If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). . The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. . Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. . 7. Additional Terms. . "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. . When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. . Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: . a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or . b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or . c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or . d) Limiting the use for publicity purposes of names of licensors or authors of the material; or . e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or . f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. . All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. . If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. . Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. . 8. Termination. . You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). . However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. . Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. . Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. . 9. Acceptance Not Required for Having Copies. . You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. . 10. Automatic Licensing of Downstream Recipients. . Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. . An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. . You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. . 11. Patents. . A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". . A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. . Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. . In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. . If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. . If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. . A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. . Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. . 12. No Surrender of Others' Freedom. . If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. . 13. Remote Network Interaction; Use with the GNU General Public License. . Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. . Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License. . 14. Revised Versions of this License. . The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. . Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. . If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. . Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. . 15. Disclaimer of Warranty. . THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. . 16. Limitation of Liability. . IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. . 17. Interpretation of Sections 15 and 16. . If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. . END OF TERMS AND CONDITIONS License: FSFUL Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. . This file is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. License: FSFULLR Copyright 1996-2006 Free Software Foundation, Inc. . This file is free software; the Free Software Foundation gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. License: GPL-2.0-or-later This program 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 2, or (at your option) any later version. . This program 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 this program. If not, see https://www.gnu.org/licenses/. . On Debian systems, the complete text of version 2 of the GNU General Public License can be found in '/usr/share/common-licenses/GPL-2'. /usr/share/common-licenses/GPL-2 License: GPL-3.0-or-later This program 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, or (at your option) any later version. . This program 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 this program. If not, see https://www.gnu.org/licenses/. . On Debian systems, the complete text of version 3 of the GNU General Public License can be found in '/usr/share/common-licenses/GPL-3'. /usr/share/common-licenses/GPL-3 License: Expat-X Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. . Except as contained in this notice, the name of the X Consortium shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from the X Consortium. License: FSFAP Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without any warranty. License: GPL-2.0-or-later with Autoconf-data exception This program 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 2, or (at your option) any later version. . This program 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 this program. If not, see https://www.gnu.org/licenses/. . As a special exception to the GNU General Public License, if you distribute this file as part of a program that contains a configuration script generated by Autoconf, you may include it under the same distribution terms that you use for the rest of that program. . On Debian systems, the complete text of version 2 of the GNU General Public License can be found in '/usr/share/common-licenses/GPL-2'. atomes_1.3.1/debian/patches/0000775000175000017500000000000015212624223015356 5ustar lerouxlerouxatomes_1.3.1/debian/patches/appstreamcli.patch0000664000175000017500000000377015212624223021072 0ustar lerouxlerouxDescription: using appstreamcli instead of deprecated appstream-util Right now the check is deactivated as there are many errors, letting upstream rework the file. Author: Pierre Gruet Bug-Debian: https://bugs.debian.org/1120450 Forwarded: sebastien.leroux@ipcms.unistra.fr Last-Update: 2025-11-10 --- a/Makefile.am +++ b/Makefile.am @@ -43,7 +43,7 @@ $(mkinstalldirs) $(atomes_metadir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/fr.ipcms.atomes.appdata.xml $(atomes_metadir) - appstream-util validate-relax --nonet $(atomes_metadir)/fr.ipcms.atomes.appdata.xml +# appstreamcli validate --no-net $(atomes_metadir)/fr.ipcms.atomes.appdata.xml # Desktop file if [ ! -d $(atomes_desktopdir) ]; then \ $(mkinstalldirs) $(atomes_desktopdir); \ --- a/atomes.spec +++ b/atomes.spec @@ -69,7 +69,7 @@ %check desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop -appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/fr.ipcms.%{name}.appdata.xml +#appstreamcli validate --no-net %{buildroot}%{_metainfodir}/fr.ipcms.%{name}.appdata.xml %files %license COPYING --- a/configure.ac +++ b/configure.ac @@ -76,7 +76,7 @@ AC_CHECK_PROG([PKG_CONFIG], [pkg-config], [yes], [no]) AC_CHECK_PROG([UP_MIME], [update-mime-database], [yes], [no]) AC_CHECK_PROG([UP_DESKTOP], [update-desktop-database], [yes], [no]) -AC_CHECK_PROG([UP_APPSTREAM], [appstream-util], [yes], [no]) +AC_CHECK_PROG([UP_APPSTREAM], [appstreamcli], [yes], [no]) dnl *************************************************************************** --- a/configure +++ b/configure @@ -3477,8 +3477,8 @@ fi -# Extract the first word of "appstream-util", so it can be a program name with args. -set dummy appstream-util; ac_word=$2 +# Extract the first word of "appstreamcli", so it can be a program name with args. +set dummy appstreamcli; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_APPSTREAM+y} atomes_1.3.1/debian/patches/series0000664000175000017500000000005615212624223016574 0ustar lerouxlerouxomit_flags_in_binary.patch appstreamcli.patch atomes_1.3.1/debian/patches/omit_flags_in_binary.patch0000664000175000017500000000142315212624223022555 0ustar lerouxlerouxDescription: removing FLAGS from the contents of the built executable file in order to enhance build reproducibility. Otherwise the build path would be shipped inside /usr/bin/atomes. Author: Pierre Gruet Forwarded: not-needed Last-Update: 2026-06-11 --- a/src/gui/main.c +++ b/src/gui/main.c @@ -254,10 +254,10 @@ } printf ("OpenMP version : %1.1f (%s)\n", v, v_string); #endif - printf ("FC Compiler : %s\n", FC); + /*printf ("FC Compiler : %s\n", FC); printf ("FC Compiler flags : %s\n", FCFLAGS); printf ("C Compiler : %s\n", CC); - printf ("C Compiler flags : %s\n", CFLAGS); + printf ("C Compiler flags : %s\n", CFLAGS);*/ printf ("%s", bug); printf ("%s", PACKAGE_BUGREPORT); atomes_1.3.1/debian/atomes.lintian-overrides0000664000175000017500000000015415212624223020577 0ustar lerouxleroux# False positive, "coul" is the intended word atomes: spelling-error-in-binary coul could [usr/bin/atomes*] atomes_1.3.1/debian/changelog.save0000664000175000017500000000573315212624223016546 0ustar lerouxlerouxatomes (1.3.0-1) unstable; urgency=medium * New upstream version 1.3.0 -- Sébastien Le Roux Thu, atomes (1.2.1-1) unstable; urgency=medium [ Pierre Gruet ] * Team upload * New upstream version 1.2.1 * Rewriting d/watch with version 5 * Using appstreamcli instead of appstream-util (Closes: #1120450) * New upstream version 1.2.1 * Rewriting d/watch with version 5 * Using appstreamcli instead of appstream-util -- Sébastien Le Roux Thu, 11 Jun 2026 14:18:13 +0200 atomes (1.2.0-1) unstable; urgency=medium * New upstream version 1.2.0 [ Pierre Gruet ] * Refreshing patch -- Sébastien Le Roux Thu, 04 Sep 2025 14:21:06 +0200 atomes (1.1.18-1) unstable; urgency=medium * New upstream version 1.1.18 [ Pierre Gruet ] * Raising Standards version to 4.7.2 (no change) * Removing old FSF address from d/copyright -- Sébastien Le Roux Thu, 21 Aug 2025 09:25:53 +0200 atomes (1.1.17-1) unstable; urgency=medium * New upstream version 1.1.17 [ Pierre Gruet ] * Raising Standards version to 4.7.1 (no change) * Bumping d/copyright years -- Sébastien Le Roux Fri, 21 Feb 2025 10:48:19 +0100 atomes (1.1.16-1) unstable; urgency=medium * Team upload * New upstream version 1.1.16 -- Pierre Gruet Thu, 26 Dec 2024 22:15:39 +0100 atomes (1.1.15-1) unstable; urgency=medium * New upstream version 1.1.15 * Refreshing patch * Raising Standards version to 4.7.0, no change * Fixing spelling of the Lintian override -- Sébastien Le Roux Wed, 20 Nov 2024 11:37:02 +0100 atomes (1.1.14-1.1) unstable; urgency=medium * Non-maintainer upload. * debian/control: Removed hard-coded dependency on libgtk-3-0 (Closes: #1068217) -- Sebastian Ramacher Sat, 13 Apr 2024 19:42:07 +0200 atomes (1.1.14-1) unstable; urgency=medium * New upstream version * Refreshing patches [ Pierre Gruet ] * Replacing obsolete pkg-config by pkgconf in the build-dependencies -- Sébastien Le Roux Wed, 20 Mar 2024 16:40:00 +0200 atomes (1.1.12+repack-2) unstable; urgency=medium * Team upload * Removing -fstack-protector-strong from FCFLAGS on arm64 to circumvent gcc bug 111528 -- Pierre Gruet Wed, 27 Sep 2023 09:41:46 +0200 atomes (1.1.12+repack-1) unstable; urgency=medium * New upstream version -- Sébastien Le Roux Tue, 19 Sep 2023 15:45:00 +0200 atomes (1.1.12-2) unstable; urgency=medium * Team upload. * Source-only upload to unstable -- Pierre Gruet Sat, 26 Aug 2023 22:34:12 +0200 atomes (1.1.12-1) unstable; urgency=medium * Initial release (Closes: #1019387) -- Sébastien Le Roux Mon, 17 Jul 2023 17:26:00 +0200 atomes_1.3.1/debian/atomes-data.install0000664000175000017500000000002115212624223017507 0ustar lerouxlerouxusr/share/atomes atomes_1.3.1/debian/rules0000775000175000017500000000032715212624223015011 0ustar lerouxleroux#!/usr/bin/make -f #export DH_VERBOSE = 1 export DEB_BUILD_MAINT_OPTIONS = hardening=+all ifeq ($(shell dpkg --print-architecture),arm64) export DEB_FCFLAGS_MAINT_STRIP=-fstack-protector-strong endif %: dh $@ atomes_1.3.1/debian/control0000664000175000017500000000622415212624223015336 0ustar lerouxlerouxSource: atomes Section: science Priority: optional Maintainer: Debichem Team Uploaders: Sébastien Le Roux Build-Depends: debhelper-compat (= 13), automake, autoconf, pkgconf, gettext, gfortran, libgfortran5, libgtk-3-dev, libxml2-dev, libpango1.0-dev, libglu1-mesa-dev, libepoxy-dev, libavutil-dev, libavcodec-dev, libavformat-dev, libswscale-dev, desktop-file-utils, appstream Standards-Version: 4.7.2 Homepage: https://atomes.ipcms.fr/ Vcs-Browser: https://salsa.debian.org/debichem-team/atomes Vcs-Git: https://salsa.debian.org/debichem-team/atomes.git Rules-Requires-Root: no Package: atomes Architecture: any Depends: atomes-data (= ${source:Version}), ${shlibs:Depends}, ${misc:Depends}, libglu1-mesa, bash-completion Description: atomic-scale 3D modeling toolbox atomes is a tool box to analyze (physico-chemical properties calculations), visualize (atoms, bonds, colormaps, measurements, coordination polyedra ...) create (crystal builder, molecular library, surface creation and passivation ...) 3D atomic scale models. atomes offers a workspace capable of handling many projects opened simultaneously. The different projects in the workspace can exchange data: analysis results, atomic coordinates... atomes also provides an advanced input preparation system for further calculations using well known molecular dynamics codes: Classical MD: DLPOLY and LAMMPS - ab-initio MD: CPMD and CP2K - QM-MM MD: CPMD and CP2K To prepare the input files for these calculations is likely to be the key, and most complicated step towards MD simulations. atomes offers a user-friendly assistant to help and guide the scientist step by step to achieve this crucial step. . This package provides the binaries. Package: atomes-data Architecture: all Multi-Arch: foreign Depends: ${misc:Depends} Enhances: atomes Suggests: atomes Description: atomic-scale 3D modeling toolbox (data) atomes is a tool box to analyze (physico-chemical properties calculations), visualize (atoms, bonds, colormaps, measurements, coordination polyedra ...) create (crystal builder, molecular library, surface creation and passivation ...) 3D atomic scale models. atomes offers a workspace capable of handling many projects opened simultaneously. The different projects in the workspace can exchange data: analysis results, atomic coordinates... atomes also provides an advanced input preparation system for further calculations using well known molecular dynamics codes: Classical MD: DLPOLY and LAMMPS - ab-initio MD: CPMD and CP2K - QM-MM MD: CPMD and CP2K To prepare the input files for these calculations is likely to be the key, and most complicated step towards MD simulations. atomes offers a user-friendly assistant to help and guide the scientist step by step to achieve this crucial step. . This package contains data files for atomes. atomes_1.3.1/debian/upstream/0000775000175000017500000000000015212624223015567 5ustar lerouxlerouxatomes_1.3.1/debian/upstream/metadata0000664000175000017500000000041415212624223017271 0ustar lerouxlerouxBug-Database: https://github.com/Slookeur/Atomes-GNU/issues Bug-Submit: https://github.com/Slookeur/Atomes-GNU/issues/new Repository: https://github.com/Slookeur/Atomes-GNU.git Repository-Browse: https://github.com/Slookeur/Atomes-GNU Contact: atomes@ipcms.unistra.fr atomes_1.3.1/debian/source/0000775000175000017500000000000015212624223015227 5ustar lerouxlerouxatomes_1.3.1/debian/source/format0000664000175000017500000000001415212624223016435 0ustar lerouxleroux3.0 (quilt) atomes_1.3.1/debian/watch0000664000175000017500000000031215212624223014754 0ustar lerouxlerouxVersion: 5 Source: https://github.com/Slookeur/Atomes-GNU/tags Matching-Pattern: (?:.*?/)?v?(\d[\d.]*)\.tar\.gz Filenamemangle: s%(?:.*?)?v?(\d[\d.]*)\.tar\.gz%atomes-$1.tar.gz% Update-Script: uupdate atomes_1.3.1/debian/atomes.install0000664000175000017500000000024615212624223016611 0ustar lerouxlerouxusr/bin usr/libexec usr/share/applications usr/share/bash-completion usr/share/doc usr/share/locale usr/share/man usr/share/metainfo usr/share/mime usr/share/pixmaps atomes_1.3.1/COPYING0000664000175000017500000010340515212624223013543 0ustar lerouxleroux GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU Affero General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Remote Network Interaction; Use with the GNU General Public License. Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. atomes - An atomic-scale 3D modeling toolbox To analyze, visualize, and create 3D atomistic models. Copyright (C) 2022, 2023 Dr. Sébastien Le Roux This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see . atomes_1.3.1/ChangeLog0000664000175000017500000002205715212624223014265 0ustar lerouxleroux2026-06-11 Sébastien Le Roux Release of version 1.3.1 * Bug corrections: Ensure that init_camera always uses the active project 'init_p.c' Curve layout when saving workspace 'save_curve.c' 2026-06-11 Sébastien Le Roux Release of version 1.3.0 * New features: New code structure to facilitate the use of the 2D graph system New 'analysis' data structure New version and structure of the projet file New OpenGL shaders for ray tracing rendering Image rendering from the command line Error backtrace for reading and saving atomes files (apf and awf) Internationalisation (Fr + En): atomes interface is now translatable * Improvements: Improved command line parsing and capabilities OpenGL tilted font rendering improvement New pango markup instructions for 2D graph and 3D text Improvement memory management when searching for molecules * Bug corrections: OpenGL shaders lightning bug correction 'w_advanced.c' Curve draw order 'tab-2.c' Spinning and closing project 'w_spiner.c' / 'close_p.c' Chain statistics 'chainscall.c' Chain statistics calc menu 'calc_menu.c' DL-POLY field match for vdW potentials 'dlp_ff_match.c' Many, many, others * Extra: New LibreOffice extension Improved developer documentation with examples 2025-09-30 Sébastien Le Roux Release of version 1.2.1 * Bug corrections: Linux package fix Windows bug fix to read preferences file 'preferences.c' 2025-09-05 Sébastien Le Roux Release of version 1.2.0 * New features: New user preferences window and associated features: - Set global user preferences - Save preferences in 'atomes.pml' configuration file Gradient backgrounds * Improvements: Reading of CIF files 'read_cif.c' - better occupancy treatment - multiconfiguration CIF files Representation window 'm_rep.c' * Bug corrections: Several issues fixed for advanced OpenGL rendering 'w_advance.c' 2025-05-15 Sébastien Le Roux Release of version 1.1.18 * Bug corrections: Crystal building, bug correction if occ < 1.0 'cbuild_action.c' OpenGL drawing of NPT boxes 'ogl_draw.c' and 'd_box.c' Workspace space groupe info 'modelinfo.c' Dmax evaluation 'interface.c' 2025-02-20 Sébastien Le Roux Release of version 1.1.17 * Bug corrections: OpenGL window shortcuts bug correction 'glwindow.c' OpenGL window, GTK3 menu bar fix 'glwindow.c', 'm_atoms.c' OpenGL window contextual menu fix 'popup.c' Crystal building, few minor bug corrections and code cleaning 'cbuild_action.c' Supercell: bug fix to restore coordination and polyhedra data 'cell_super.c' * Improvement: Distance matrix calculation 'dmtx.F90' minor adjustments and improvements 2024-12-18 Sébastien Le Roux Release of version 1.1.16 * Bug corrections: Ring statistics correction for Guttman analysis with ABAB rings X-rays g(r): 'CHEM_X' parameters default set to Z 2024-04-10 Sébastien Le Roux Release of version 1.1.15 * Bug corrections: Several MacOS OS related bugs corrected Various small bug corrections * Improvements: OpenGL testing utility implemented at startup Shorcuts information dialog for all windows with shorcuts GTK4 forward transition code wide MacOS beta version 2024-03-20 Sébastien Le Roux Release of version 1.1.14 * Bug corrections: X-rays g(r): 'CHEM_X' parameter was 0.0 * Improvements: Option to build model from CIF file using symmetry positions when available 'read_cif.c' Object(s) can be used to fill CIF file unknown positions 'read_cif.c' and 'cbuild_action.c' Distance matrix calculation 'dmtx.F90' minor adjustments and improvements Improvement of the automatic evaluation of the OpenGL model depth 'bonds.F90' Pixel debug is now available in DEBUG mode overall code cleaning atomes code is now entirely commented in Doxygen format 2024-02-28 Sébastien Le Roux Release of version 1.1.13 * Bug corrections: Surface passivation: 'cell_cut.c' and 'atom_action.c' Atomic object managment: 'src/opengl/edit/atom_*.c' Atom search window: 'w_search.c' * Improvements: Handling unknown chemical species when reading coordinates files Keyboard shortcuts added for styles and selection modes for the OpenGL window Re-compute bonding properties of edition with the model edition window 2023-09-11 Sébastien Le Roux Release of version 1.1.12 * Bug corrections: Corrections on reading I.S.A.A.C.S. files: 'callbacks.c' and 'xmlrw.c' Workspace contextual menu correction: 'workspace.c' Movie encoding correction for axis colors and volumes: 'movie.c' GTK3 version: OpenGL / GTK interaction, on fail to initialize rendering: test to change the GDK visual 'gtk_window_change_gdk_visual()' GTK4 version: Event controller correction: 'dlp_ff_match.c' Tree view selection corrections: 'dlp_field.c' and 'w_measures.c' Menus with pango markups (if no submenu attached: https://gitlab.gnome.org/GNOME/gtk/-/issues/5946) "Color palettes" ready (if bug fixed: https://gitlab.gnome.org/GNOME/gtk/-/issues/5955) Periodic table focus on mouse motion fixed: 'w_periodic.c' OpenGL window main menu and contextual menus corrections * Improvements: Massive code cleaning Massive addition of comments in the C sources Code cleaning to remove older APF version compatibilities on open project File associations added for standards atomic coordinates file formats BASH completion adapted accordingly Separate 'Makefile.am' for architecture independent data 2023-03-27 Sébastien Le Roux Release of version 1.1.11 * Bug correction: dmtx.F90: ADAPT_CUT callbacks.c: removed 'if (oap < 2)' 2022-04-11 Sébastien Le Roux Release of version 1.1.10 * Bug correction: molecules.F90: m = VOISJ(l,j,i) 2022-28-10 Sébastien Le Roux Release of version 1.1.9 * Bug corrections: glwin.h: float shift[4], label_format[3] m_poly.c: olg_clones[6] -> olg_clones[5] read_bond.c: update_mol edit_menu.c: cshift[i+3] -> cshift[i] gui.c: cut_sel and cut_lab pointers for 3D window actions dlp_atom.c: compare_non_bonded 2022-27-10 Sébastien Le Roux Release of version 1.1.8 * Bug corrections: edit_menu.c: correction for lattice parameter updates gui.c: cut_sel and cut_lab pointers for 3D window actions popup.c: corrections to use cut_sel and cut_lab glwindow.c: corrections to use cut_sel and cut_lab closep.c: corrections to close volume_win and model_win[2] atom_action.c: corrections to properly trigger bond udpates or not atom_remove.c: corrections to adjust bonds id atom_remove.c: corrections if fragments are removed ogl_text.c: correction buffer size strings for measures callbacks.c: correction when reading workspace remember name 2022-13-10 Sébastien Le Roux Release of version 1.1.7 * Bug corrections: callback.c: save workspace atom_action.c: on remove, trigger re-calculate bonding 2022-10-10 Sébastien Le Roux Release of version 1.1.6 * Bug correction: w_library.c: lib_preview_plot = NULL; * Improvements: main.c: -h glview.c: selection delay on mouse pressed/released 2022-09-23 Sébastien Le Roux Release of version 1.1.5 * Bug correction: w_search.c: selection not to crash if atom_win is closed 2022-09-22 Sébastien Le Roux Release of version 1.1.4 * Bug corrections: read_coord.c: Windows to handle properly EOL symbols m_curve.c: Windows to not crash when destroying label widget glview.c: correct GWARNING messages on widget scale 2022-09-15 Sébastien Le Roux Release of version 1.1.3 * Bug corrections: read_opengl.c: correct 'read_atom_b' initring.c: correct 'send_rings_opengl_' 2022-09-14 Sébastien Le Roux Release of version 1.1.2 * Bug corrections: atom_action.c: recompute bonding on passivate bdcall.c: do not trigger menu init on passivate 2022-09-13 Sébastien Le Roux Release of version 1.1.1 * Bug correction: workspace.c: double click on workspace 2022-08-28 Sébastien Le Roux Initial release of the Atomes program v1.1.0 atomes_1.3.1/README.md0000664000175000017500000001114315212624223013764 0ustar lerouxleroux# atomes ![License][license] ![OpenSSF Best Practices][openssf] ![Development Status][dev_status] ![Hits Of Code][hoc] [atomes][atomes] is a Free (Open Source) cross-platform software licensed under the terms of the Affero GPL v3+ license. **atomes** is a toolbox developed to analyze, to visualize and to create/edit three-dimensional atomic scale models. It offers a workspace that allows to have many projects opened simultaneously. The different projects in the workspace can exchange data: analysis results, atomic coordinates ... **atomes** also provides an advanced input preparation system for further calculations using well known molecular dynamics codes: - Classical MD : [DLPOLY][dlpoly] and [LAMMPS][lammps] - ab-initio MD : [CPMD][cpmd] and [CP2K][cp2k] - QM-MM MD : [CPMD][cpmd] and [CP2K][cp2k] To prepare the input filles for these calculations is likely to be the key, and most complicated step towards MD simulations. **atomes** offers a user-friendly assistant to help and guide the user step by step to achieve this crucial step. ## Features - Analysis of 3D atomic scale models: neutrons and x-rays diffraction, ring statistics, chain statistics, bond order, MSD ... - Visualization: measures, coordination polyhedras, advanced coloring, advanced design - Edition: molecular library, crystal builder, cell edition, surface creation and passivation ... - MD input preparation: - Classical MD: [DLPOLY][dlpoly] and [LAMMPS][lammps] - ab-initio MD: [CPMD][cpmd] and [CP2K][cp2k] - QM-MM MD: [CPMD][cpmd] and [CP2K][cp2k] ## Build instructions To build ***atomes***: ``` ./configure ``` Followed by: ``` make ``` ### Build options #### Building the GTK4 version of ***atomes*** ***atomes*** uses the [GTK][gtk] lib for the GUI, by default GTK3 is used, however it is possible to build the GTK4 version (beta). To do that: 1. Configure using the `--with-gtk=` flag: ``` ./configure --with-gtk=4 ``` Note the default flag is: `--with-gtk=3` 2. Build ***atomes*** ``` make ``` Here are some issues with GTK4 that cannot be sovled for the time being: 1. No way to attach widget to menu items not in the top level of the menu (https://gitlab.gnome.org/GNOME/gtk/-/issues/5955) #### Building the serial version of ***atomes*** By default ***atomes*** uses [OpenMP][openmp] to parallelize several calculations over the CPU cores. It is possible to turn this off, and to build a serial version of ***atomes***, to do that: 1. Configure using the `--disable-openmp` flag: ``` ./configure --disable-openmp ``` 2. Build ***atomes*** ``` make ``` ## Install ***atomes*** ``` make install ``` ## Who's behind ***atomes*** ***atomes*** is developed by [Dr. Sébastien Le Roux][slr], research engineer for the [CNRS][cnrs]

CNRS logo

[Dr. Sébastien Le Roux][slr] works at the Institut de Physique et Chimie des Matériaux de Strasbourg [IPCMS][ipcms]

IPCMS logo

## Documentation The documenation is hosted on [GitHub][github] here: [atomes documentation][atomes-doc] Developer documentation is hosted on [GitHub][github] here: [atomes developer documenation][devel-doc] ## Tutorials Tutorial are regrouped and hosted on [GitHub][github] here: [atomes tutorials][atomes-tuto] [license]:https://img.shields.io/badge/License-AGPL_v3%2B-blue [openssf]:https://www.bestpractices.dev/projects/9146/badge [dev_status]:https://www.repostatus.org/badges/latest/active.svg [down_status]:https://img.shields.io/sourceforge/dw/atomes.svg [hoc]:https://hitsofcode.com/github/Slookeur/atomes-GNU?branch=main [slr]:https://www.ipcms.fr/sebastien-le-roux/ [cnrs]:https://www.cnrs.fr/ [ipcms]:https://www.ipcms.fr/ [github]:https://github.com/ [jekyll]:https://jekyllrb.com/ [atomes]:https://atomes.ipcms.fr/ [atomes-doc]:https://slookeur.github.io/atomes-doc/ [atomes-tuto]:https://slookeur.github.io/atomes-tuto/ [devel-doc]:https://slookeur.github.io/atomes-doxygen/ [dlpoly]:https://www.scd.stfc.ac.uk/Pages/DL_POLY.aspx [lammps]:https://lammps.sandia.gov/ [cpmd]:http://www.cpmd.org [cp2k]:http://cp2k.berlios.de [gtk]:https://www.gtk.org/ [openmp]:https://www.openmp.org/ atomes_1.3.1/data/0000775000175000017500000000000015212624223013416 5ustar lerouxlerouxatomes_1.3.1/data/pixmaps/0000775000175000017500000000000015212624223015077 5ustar lerouxlerouxatomes_1.3.1/data/pixmaps/an.png0000664000175000017500000000060115212624223016200 0ustar lerouxlerouxPNG  IHDRabKGD pHYs  tIME .xrIDAT8˕q0 E@mp8G'6* m&uԫ6 ɖNGl6 A+x:SȻKDLUMULUC#6a ?@$4Me.CN !ۇ9oabI3 "z!nVEpX d{%Vv^VjSAmp,a' Eloᰭ住"xԶm9NYUNa*MK 㨻?u]s.s7IENDB`atomes_1.3.1/data/pixmaps/mol.png0000664000175000017500000000221415212624223016373 0ustar lerouxlerouxPNG  IHDR sRGBbKGD pHYs  tIME7 IDAT8˕mh[uƟ7M&YoI5mdl@Pa C(t2:DuQABZ &ֺu*5mˢKijޛ fמ/8l;f .,mԚD =^ףW|R)~ӊhh],% Kdmei7h/LO,RX L$MOuBҝnPg[ }E"Xo' 2077g>ƙPc SGN";z6 gbw9ai8;A[[Dt.;hrƉ3a5;%LhЯ/##Kc_]ڼѣ4 i|JDi . 0GN޼J;ޥ{{4Zx^ lcnhوirG0,ě7~b ,ʙ8( /f*˲(HӈbE(r Kሗ-IkR|D4 @g4YI, DQ,ˈFHRp\p8Ö'k:{vr?V;c6NR,TU )\|s^}1UUd2xX`Xd2$ L&(6[ 8/q H$ϴ iLJz/K)Eww:|nAP]]MX*z+/In1o=UR% f h)@fhɿ}vqweًi1rV+՚(ݿj-^JJu6*6Z/tf+luRWG`5% GXVu:G_kwp: U%I 2U[eARkTHzc!2py.{'A{]QMeIENDB`atomes_1.3.1/data/pixmaps/tiff.png0000664000175000017500000000675515212624223016552 0ustar lerouxlerouxPNG  IHDR22?bKGD pHYs  tIME A zIDAThŚk]u{s}y/l^F !LcIꖦDHJ_RU/釤*QS)@~( $MPh jŢx<u{{~8޹3s=#G>^^(.8xQJEiljM Brw\bפih___{^!"<s:F?چtppOnFr!=c9k-J;>{~|SP @!ى^\)&k-iENdQo|o޽E5߸xч>7;K}-XW[mxl܄ ҔK* ZlYmbڛz{{|P}ݷxI@~׿ (ˠ4xT"tϠ@4)PZ!jrZ7jI';7}/}:urgΞ=ŞEMkv~.RDQZe*cןyb|y:rp55a-xssscÐ 9=MӯOLLz;}Հ[_j-˝~\Ë# "Wxǘgɧw޼Z317} w݊щ"NSf6y9!5"4Λ{'j  0a h5E!72v~kpsvCOqUxt$(eL`H3nct\RZ'u. 4qFm3LT[qtdΈR'8XIZ($B(ȅM$fR%^HizJŶ}83=[G9>n a6:GgGWo.[a<k(̆E-W}o{xw1s1q*K'$%ttwؽ[ 7! 5 aj6geFnXp.ٗ[)H,\dTW 1a.Ij(NP^8Ses!pr<iwCŖ^COpզ< P#I3 rrVjh5\7]a&4FiaGS -F+~zzƦcu:gRFΤTc3 doDӼ'eǶmlr ]W\]ň+Y8?Ueb:bps ZpdT99zOݾ\{`)c V0>DZsS;PC$DIA$Vh#ޣLA#%*X0;=Ku^H`S/փȯo\B\i^s;1}W(2FE\ `SAV2B;DtBzs ؙoGՆ 5?OcH .QD"!* BYU ނK}`dΈ[>cd}NU/u%m[VD6\~\VE :ސ<#}S1sEf.*‚avW+K^`̝3+XػwB0CQ5H&]r[0R[[[FypU?9633{|ݟ]@wvvv֭[Y H/tZc Zkr9kyn$=z(T ؀1|JXk8k#0FCMqf! cǎW/u YLVXAKs]l`/wvvA V˜aeB^">] 9q47нk~ghhV d_x~t~zfqh R̳?3<l/y0~aA& g8Hl/{Wo}voI^[|姿.0rfU^w/CZ2Z[[ٽ{wWcl6K&9q_766> H)ke H= ?y<[^4Y:|?ǫ*kR tV f-(g~6߿?8‰C8_7>- EaQ/ DWj6T{WQ+81~oTM"W_CU81(Hsq$Yʢ+rsf(WeL9gbq{,R((/ Dk-QɎ+ߥpV1H pTT^.(f׆U]VZ9qchu`UWuU^YJ@^8u_HJ{n{x˖[V%dtTIkUiF׊Y0:<7LWZKI( m@g8c&XMC*֮r V 2JA)/úZj" {BVL B"4k 0@sYWUR` 7x=qֈrSL rd69[PK+$FEr;?#\QR5 Bh^a2 !rXD4zm0)S43մ3 H Ð|YZHbrchBq`Y[J-@S>y,H FT@X5Yt_E;]GµdPՈhTZ|? :qT!y_L)0hf:p;EWvR%(1F.A,0PRGQlGo}0Ibv|{7MO sL#cT+32!ڻM&q-l_G\n)J$hpϏpNF wx7tC6IsKM36 ~f͈] ~{Zx]w+hsh ڄ(P1E}fBI~ T$j6 OxT#飫ױևhJ^!S(qc?$~dUe눭L f0<ƔKET>KXqR*^`f4 %Wsn"'LMlDXFP̒JH&jȵ+oZe?psɟ=B>:͍Q*1FoCp$P owq78QB`t@P -]c"gw ۹agόO0;r !$RT@*AS{' pMxXc^}}NM.c1ťiRJbF)RȪTXQl˄ƄJ)srZef tvxM$=q~3;M<$ :FP3VVA@$vt5% `>}]wKwH,֭]û}D`it{s;4 ʩ|MS|v,R 4Re,EZK.o(,΄O2ivqO$mcX[M!fjJV#s_r!a1ĺ(Sy5JE 4c)vl=fsc/x~x& cAXkյ(?㒸r(MRX^`e Y49 WNh쥩k5|r +NQ㳿u ehtQsmYQwvю{>摧qJ,EJ$L9Ci8+e`? y ~TBrڦ %qNJioAL& Pm[.5I9^T}SSSbvvvebǎ9@R?gd#J;w^\6b8' s0 ET*ɓ'??yf >IENDB`atomes_1.3.1/data/pixmaps/td.png0000664000175000017500000000136515212624223016221 0ustar lerouxlerouxPNG  IHDR5TbKGD pHYs  tIME !IDAT8ˍMhQ7aL;MڤEPZ)DZjQ.* ܉ڂ  1T .?HAWZP7و .w ?&MIldښV{޽'1@Оs Sj.hh#.J\FG$ZZěW!U͙X qL5ЧJ&|{ݻtbێ3 }R d$uJE* P - Vˢ)%Fk}4ë288WbOI %j0x^0 kk,+ e!X, ɠ* Eq`fϟtW(PMX,s],]GaX4m^ XuiyG* %~^Y#QPpێsxuv6l\VW s9:(&^XV.o|?P}a-Dckhi4/.r=0%V3[ХpiVRn<~s(YeSD/|3}<4?;;D2V<]ϣՁ|p!vkDe:ɚ q G`TU| ޳BCmIENDB`atomes_1.3.1/data/pixmaps/import.png0000664000175000017500000000123215212624223017115 0ustar lerouxlerouxPNG  IHDRgbKGD pHYs B(xtIME  Qe'IDAT8˭RKka=ʫIKш MK Ti1B).\(,@t*n`kc QM2If hۤ{wwiWy u@-&M=zǷ|ޯ,",vc==xl<|(">:@5o3q7^$0ldjNnMͮ&|:E@DIn0c3`̙s}ԌL+$QE0{]I)h;ܝ3O8VQ6l桸XjsܚT`1GWŵ /K֪Nب$ EI |}^!"v%{Ta٥D2W }.aZ{]vX9,XA~d2YYyƹݪ“d?0 rٌĖ RJ%lEuaמ(5niy%K1Roȼߏa oסőKIENDB`atomes_1.3.1/data/pixmaps/cedit.png0000664000175000017500000000236715212624223016705 0ustar lerouxlerouxPNG  IHDRw=gAMA asRGB cHRMz&u0`:pQ<bKGDC pHYs @SNIDATHǵ[lTU}L/ӱ-* TZ*LKJ!H*)A/fb4&h">y JhDT"(Q.鴝iQ*0-NKg^>tf %-suYg)ilV?$TP꬈TZZqZRv^;syI(ndYۮ{w^!#"hѢQJaٱX!MӉW[[WӤ-=k 0S)EEYkZ#A"0n::D}}9f(8-DNBͯ?2#A5?'N62 Jٺ0PyK!)T?E a3&1-?4@0d3g5Wi%@)@aQ̗╢ph!#h=g=&:D)2F= /IiY ))PƲzHގc1o[$ U0#qPBքBiwTO;BՃdϡ560M MO`رXZBӹkTIWk9$3ikï#40"@dg$.rX=1{8,_LÈdM%,q ) bk'}p{ǔGfQ;\aM2}Z"-k`&e\hX)<:9k>hsh;`nQ1Ȉ.?;<bH;s 717o$`b#hRkKh$'୩8^o~|Fv= R6P&  ѽt6AI1'z+6?5뭀mP"P}32g"cj. 4V15kȚu5Yޚm<KD̄8kw,n !h lܴု+Zk[i |x Vv=Nӑ/B\i3 "ҁ@wEYY \bm;P${swژ;קIENDB`atomes_1.3.1/data/pixmaps/void.png0000664000175000017500000000027415212624223016551 0ustar lerouxlerouxPNG  IHDR22?bKGD pHYs  tIME  iTXtCommentCreated with GIMPd.e IDATh nH@'B`XSIENDB`atomes_1.3.1/data/pixmaps/molecule.png0000664000175000017500000000206715212624223017417 0ustar lerouxlerouxPNG  IHDRR;^jsRGBbKGD pHYs  tIME FIDAT8ˍ_L[eƟ9--:iC:X@E662ÔHLtY,[e`\Dxgc31n12?JEI BͶm) sya&z/7WNx(*x;wx¢&޶ZzxuܹS)Ë dƱؔ]Y}4fEjʊ3L#'|XU| Nmq֯"Mbzd'O>U]X82p8m7m!4qKKwle daMOZk6/?7i-4"qpsjJ鬳A][6:6Xٶ<䕖9`(ҷx0K'1X 8R 7yh55`ІAv,,DY0|f, HVV 2: %*d`##a)m>v[~䲀r2EIJudY/7{ȿ^u^`yySتΘz4j|h[;pL 7՘`q~ il,Њdw|b=wpj]9)dg|=P `;Ә dm-zr\)#)B 2X͕VMo2$hA&D=,]7BJr 2;IIx.۟A ;_JkDQ~^_w_/d,9GoV;߷ϭ&{N/|ȘI!y>ǔ?L?xcHr|N)|d\.|`1ʴUq?yꏯ-zqۈ/znfG̹~M{;8g>:X&?Yrab9h|qz=5pFK=ȌE$^?} ߁w/W5?Qc\QgZ9}],H_1eE q_ia+X^~~.1K[I/|d`{++j@39gp+Rf1TY{7{cAOP4X cyTr)+2jZ %VYnڬ'LN={<;ƘqgulϱHWYujNnSȻnm=N8ɧzϸM7rnǪ}ϫV-JOcxApRfX́7 fVnR5ޡ*JdEV'rÏrn.պ?Wi?ViX߬b O*-[=izx,uϭw]J#gBcne\B#G̙ΦVlB">iQ;$FeX{UβN/f}׳nӌei$")jOthyq㕸GrmǛI.,+Z~nQMӸKwǭBg=Yu51X`9@7m9<P 8[5[쁸=%AUܑ,$_& %PkY7 c^&~#.+! 3كuC CV C**A GR-hj$b^[;J "_k$l@`67:zD`& *wH|1 % &PG, w )]pz޺m-/U(k21X#Jx%&]uX\@})quf5 &N6q  u%Sg0iYJ&R6! _`_ȂjxYIV{ e^|S뾸,Jz!#pJ][ޒ.%3{`*Y%s_fAӀ9R49R-ɗD2,D#jh & ZNEJ!/LG!~8'yuV c;,HiTh'YAJ 8%1gF , ׮`uF$bjH-έH53AyњFs#.P c8"kAJ<w_^ FOlSyпmK$![æQ0FeBj{L$;ɾFRӋ', 4.U"l;/ 6jTs.c]p R)S-ɕPߛࡨT߅n4y.ō#u hEtR %Ql' q!=ږH\%КX56s֙` %ɺvBSt)9}QjaIGm9`p* ޅRA[ aMZ}s T `Dh\?e|(@^YI@]7PHPi x ,(l a%& )ݗ:uղj]!k6q`0d'=t טu$+ 2DXĵaI w|2x9a"Jbl{F/"bDE9@@7FFb+j R?(  Ry4"P|  PGT?Xo6F ca hL+V,`dAý8 "b<:cP! ;!:7Ƞ5k*LAȋ ʠhn!Hǁx)3<9##֤\mvD"vP78WD5pB1+1¬)]U= ($KD|ipTpo* !M^ `\ʘ7 ^d#n-r`lhh.: M$30*nF&l) GJJM+̉K=reA&|aߙx$`!0B$-ythO);U"l 6D&S^W{?3QO|镥;d" Y(rUXTHekGRjrk2ZiEnYi %4y4p,dcuLzJm/nLySu3SM3`?\@a/JF>)5)x?r&Bq.bAHShm5bX1CR>^ E&~D j5>TH9XC(yqo Z+j Ӱex.Z C-$_"B!=,kjB}=@Y7BSZdL55[./S`^?nm>P0 6m8ew9 @YBI$Oh?DWx.9mQf#ml̀S+I4rkRp0;E^/%mC j&MF, peF5H?M"A@HYl4yM~E0p+ >gq6IzmP*Ah_Yw*"Ru_, SՍ*ҡ=?.*,דBޔ s 9('Q1`#dš0Hȵ7eQ4 D ;%P`x 5>= 30-3+WzdGzF{TY>@*͔AôQ{vCr\-6 Mp bV =*g> ij H@_[ ‚O]!i#BH xA5}UWj$2| $s +% qjGT1b9$j{䠶cL1Cp"B1ZI'  R "nD,En`7W7{IC}J \;Эf3eU]ȪqFCQ[skN, ԉ[p^5Ie94_` ƨhvyCak?HF5r;NYASMe 7RRYBRA-}ķ?jnBF (Z}Ѝ"kHD5b7Єu[$m›jsT!TBE#0g< EEuSL 5/jymS# /;KK2%c`{(mm A&(LuӒYԱZFYvN0K/#kjTHQ:<Q1hALHFkDtr)6cഴpwpG6_rSoՖGQLDtG $uG~~"ӄI"Uo IK!:mxXoL$et,CZd)&ɫ"wOcBZpThc 1.^(0 u{K,XjR? ),*kbZм qQFx& AOHi ÕuSk+^"Agv:o -=Aj⇆/&p-+6bz2V86ېj`D8xU)D3Qy;˧RrU[&$ mEr uDjEmY 9nh;F"1๴·*yݗgBA&0eDܮZz}.Z9P; >O s)Т -pu'u$/s['M|%yuHtce&81V@u9:qxuw2'A1a"wݎlvOHm{l!{!:zJ2iUbjbTV.NP]j]5P3B^:: c౒> \"W2ZXKxfJrAs88#EJw֐XYwײl]KFL!P6++:hsS#<ٴtڷQQO3j/ 1vP iO-*mcz( Я ?՛!FrB#NSLFdY*~L .Q.Cn_ ?XzT>U$Ѽ;?dwk72Q0`dJVɓP |I{cC[;;c%:n>&xr0ɖjwRINH j۴#hHNJx7Ul$j, ١Fip ~]Q&LD՘nD]5*pm Қ}uFqPֺӸ8n&}ԲSX±+ ) ҮMvt=@!P3"<37ձ4@a)) iNb\-GWW_Z[I &-ό> w>)8tRjUih:$H΋lB D5 $J:qAŴ"`ɂ@[̓bFxCzO7[ U!Ccr6rԏ>In΂R:7Ò Zf &\Svnnݲ>۶2$6{emkʶGEς-Ґ85oUvYYhi$أ{SgmԘ)RR3y>;eڀBu{jSUgP !|5Al>ڃ&l…cx/6F6ŃQI4\ O1]>F%R6"uԻd}?-?(:܈l }#fadɮ|[h"]YAQv DPvKMmO=_ig>(v>mbd>6臯ph(ՀUu|2ʰ)0 29U"] ɘ'Ĭv͜jdm$jƁ 3tJĎ.Iٜ9)5ȼЁI될X(36”#GUBkhâ[ҩ!oO,mdNT4 ptrWtk~#W1H6X &r~#j1>#QL,*TεpnA0=PSqeFRu\ ncͲ:͖n5 riZ\H 4 =ė;(#@M ލE':tcۇS)#דt,iV,)*z]*8>:jAff|R]9&gBN(s1`S$lLb-kԫb]'N19=SGKL@aVC]Ԅ6'jMݽk;j\dU VcڃQE wFo jk/O5OPBsE9jy1ffoԨG JzA 謣zԯ}m$Iӓ2@R.uXdmH$tImCF=' su\Zt-=y i?;4lJ8EyDb10}O "Uy3$2tG) >K?.F}t`w|Yr:hǵgQ;cD7w}%:^zm:8p=8JrKuetU3AD*񆺉j#]Z OO8. ߑl+?D鍣wsP?bPgt@rV NL;k"-!%J\4x~JQjYh @\XtmL~#fhW—6^Y7 r9=B3\J4#} b.>SU[-7e˧ԦEs] rN3"ѫ>;Ri'.T! kz7=q]ezTXtRaw profile type iptcx=JI@ q|df<c ](rϐ)hqpá\ jŴ#IV'hyiCCPICC profilex}=H@_[RZ bATQP VhIC(X:8* nnN.RBௗjvfdBV+BAϊb >y?GDɛ 3L7,uMKOe%I!>'5ď\]~\t3F&=G%m,1+*$qLQ5g]V8oqVUּ'a8-/qX"DQʰU#D~/K&9Q nĸN/1wFͶmq+ԁOk--vto-M.w']2$G  }SBno}>*uE^xwW{oirk| iTXtXML:com.adobe.xmp UbKGD pHYs  tIME  .*0tEXtCommentCreated with GIMPW IDATxy$].ŖVefk-%$Kdˀa0 2x3x9:`Y΀Y omx9yd ,ktKjZԖRUg1(oͨn 8Uq-ߏ9van=p{FGG=UU!"8ض 4i~T*=l6D"W$q˲<u]8۶aYt]GF6(`ayގ<, A,X?GE:ưw^d2 I "dYiz0MaVhy\8NMvyyk <ȑ#L&v:d2FQOeOEA"E6eWr~PUx|;A /`kk ijt]GEDRߜHJ{/˲E333XYYp] Àad2ٳgbCuh4t8O0ht…?8//Xw`C62^ di FeYeYڷC0 ^7|>&]׷k ךnccc7ZT  2mC$qH>|>Y,LDg466.;"d ϱm10 zF\.?7uH$L&yޡn=fd2T*L&PF>Zݮ}Fu n6R( CCC0wy ,.3L& Xl .!H_e~mnn:Ο? 8$!NC0mۿl&L@fdRN$j~dddo:, u]i~TNY /Y>i] xpӯ Oz<˗(Jffff|iW; .O>_ppg^ g* << ={XlJUdx$ò,(2I"8:|I, ]8gi/К\Iﱩ`B6p%mfH4SB"(,7qbbe٘,|&y_"2 h>hdX۶|^Tl(+䃤2NhŐNO y_x<838;_4jO펮*C˲PV(jBӴe<\.m_Onڠ l~ d2&IE90yIJ1 ?9l6{oFnd2$i(?."<DzG?"ߏU9;gWz=$  N;333={|?zF?/N' 9z=s}Uk 333KkkkH{^y&,",mY ۶@ aɲ Z>ۿ%DQttR@yVvsF18c9>zSڋ>IxAX8EQީ(v]x 0GV˗ӧOhLO J+(8ػjNVVfutttTE$ XkK^ѵ6$'Ը4M}{{rsυo{:am{Hc#:4jZG.'C>O[QnLQ鏔J%wzzz]t oy[ I%"RwbnQza8Z84,9o-:<^$<ϗST]CX%Qd0q /..bmm͏Б`-Sւtd+kR$KH$={E]0m?,qbcbb=@MT.] #A5EB໸RQQxDYdE# z5 c 0HSSSw[$Ir (")2𚦉n˴Z q0 B] YQ^At.t:'''$I@<ҮHA=A@^VҒu̙/noo7)%)n5[0&"(]M{E9ԫ ___ˡh6n"6Dn4%v,..Vew~_:$˲G_qӊPeaߐ$:wڻ߯Gp(h$v Hzl|kkkodʢkkk_t:u *Raup- bBsDQIe^%âze!Hkq[a0<<1i]|`TM4}XD$8("!͢\.l:J/H@_x]&,,H,&DQz8a0Ru$B","{cE@?i۶|^>0cߡGKe2 :^4oR3I 0m۶YD'Jaff\n Ng 튐̙3PK$jC*rRg'v]3M˲U*bA<4k@HlbssYXXXm Da B>9{y??o?TUEلm;Tj\%=iQAEd,Bi^`ܶmZ-iH4}NȴvX|Ķm-d]z}aև2aUT*Oz=nllD"1NB,ݓ#")Oa^~Ji~mF"Ԕd>PN!LI#S}U8>|^/T%k7R$!IOQwqx<_7خzb`:x ZÞ={:5X`GOdEYdQw:eȒׂxG}ЍZW,/Iy u ڂcQQDPQ8n||zb>yrhk}pI#職K I}ٳs]W"c B I~!3n% #L.Hܬ(KM7݄{'qhZz#h0:[[[uO*XEQ~Z]@ EҊZxFҎo>yt:Z ,˞Y^^^r]D)c0ʹ k o^t陙_NR0(ʮu \M ;Ll8LLL`nn'_&Ɔ߇%&^w$vj*j(%#KtĕLAwvN_X7 c/8r4&t* =tD `WVV"EYd vMIq<󰹹-7I2M,B4??;TnR1˲!-Š]+:uG_YYyoO򱺺>}krnpw!׊x##L9^$IRXbw&}C###,--amm//^2<7s-$dS,n60 .FRyyau]lg ݮyeYh47lv$I1A~Ovz8ضv$9:P{( b1u/J TT5\uWVVP(L6٭IӢ; yٳCLMOO6lQsT#Q5F4z=z>6 9a@4:u dZm )Dޗi`gS,ugYA F_q Fz4MC.5dT_ۭVku{{[ǵEFYdE x_5M{Eu0 ^(~hHJih6|ixh4Xyt#hd2#Gt:r>&`tt MaG^c}}zgYYYi.EB1d[\*BR8YG #\.ckk CCC~BP$I똛@a,-M]~d"?dYf)wGղ׿.F}j|dnO&Ò$q LS*yKh}{#`߾}Q("cbbT*!NR)[^=ͼc=wԹx,Qץ/Mߦi_LFVC7K_#UYiTշi1(ȑ\1(@^OI#}vZ&b,bkk\kaׄoDYdEٿ ]Q(w+yCuضMT*-J0(I? ߒf)r^$4 B'`@FuĉF qȇkw V)3O$yضmT*r-$j5vmb0MR)?7dyu,ê~RQ|>|{/~7vauu> х`=8jz:O&Cx@{[z  /H>FGGP,DM|hg6ih4V766^z\ Ya*JWңg9ro.2zK.ձ k6_4MsvԢEΟxZQΘv A011.$I8m\я,",-u]'ONNuxxأwDLrH_T)eYmޜ/4믿>9>>|^H$.9{SP.Jd],l6G}UTjW F>",QeX,q^x}\Iy8cy IDAT߃n&,v|||XUSU%st 7}ob׏|8bnI::FH~@O~AR,wb,Vki8j]VOaPK+ICIEQGFF qK;d -RI$,r >O$Ү6662UƂ,Z4%q ,:h4P. YzmH4z W3($I{쟮*,>G9 @BW}$IN# q#Njlll~ӛtgGFFv|>T*e_Fmnnbqqahh\۶=imM9 f[R.}YiAKK-"|n` M͉Fdw&jxG>rl6r7$CrkVcDD","{2̨,.QS Aqd2Fo֟5VP:rL&(@0%?}\KKK0Mr_~sگ6S2ο"nV"ر?e1>>LJ?a`{{ۯm Q8pD^dYIw:F9_1 FyOA`u]uX,o5G><x'4Nclְ3D6BJ9+vFmhfDV q]w(n*q9!aԲ,{oɓ'O^eݫ`0R {^, ?\z曯;tuDG>O>Hc{{.]BF,p:E.U'Jf g2P;###]w(RE#CCCX^^SHz6Ν;箮dݗFGGsKKKY%u H@:)r~d`WvBȚ^ZZZ8y3!ױy^"LGw4q|1ۃg]iBŐH$ؾ$X3," K@`TrE77I'bEK!Nn7r<୥IQh-"CW\%keY&)0 o)s0oL~sj$RD6~ĉRn\.СCX^^L$ twg8H1 < ;eMzNSxddG8unnll< 4 6A1/ޯlJ믍3a K Bp3L;z꯼+8xtdZkh–^6y~q ضjWRѽ^:,&&&P,^(Vaaa>u?IQ]zH$|E+k*Nd;=>UAO'JӉx |k2!5~@H;444(CGH/,`ʓ$IeBa.L*f Y3,ă]k\.w4 qEQ|O, 0nyssl>?p=^:kb4&&&F1 WհdxZdTA`\󊢸_Ν2"/'{$IhYX^^F*ƆbYsss#6j-T*G? *`sK_DŽy_Ae/N'+JWj$F#",7EqiO^p#5wy'8VVVp)X\)z~ҹ4_%I(&DE($Ic/_7-b7?dDRvwH#ZbzzzcCarrv{w:a~jIPDRt1,O>#iW_kZ)ZW0`o`t]W2t:uq zIwرw={[W٣ $i` &I&1AM>T*j%EQ;c䤛doQL&133rzCzee=q׫jjjQIbmr|NONN8<57B|\x(bYtQBR1(BTd\.x<>`1_|=z @ɵFw'n*#wjj.\ #p",@ҮH݁pFP^z%LNN !ySSS8~8Lģ>Z6ǖxБ.L&t]SRPu Tj8a:H>˲ggƤVj[RbH^?e۶s3anaYZ&sL" Ic*D?9SSSH?0QJ&>*؏y7tӞm6L\ۭolltΟ?WTA ~Eh;ZT(bwuκl֏|(,677|?KKKm ;RUUAPuQ )( :ig666 L&3(Jl&41xHξ1AYdyt}o- À ;}?+;DNmmm鸢6=&"#EYd !G/XNRzz)$ lmms""򢻢tA&Ӓ; EQ=Ǡ]A%'Ve9~6H p%$ 4] iT*r/2z<0Mӏ r9qAyqrj&te_kIc`?+Are魭4ɤS\\]9",^?xiO98Ilmma{{{@.Bڄ0q5T ҥK~z> #Q4,w4xU6] !+V\.ݡ!D>ʯhG;]Md4MkZÇ鑹"} dY9I z v= xlagZ%s1Tv53WoW;d_D4M0$'&8~ҥcPj \eYضɲT*߿].]X/"dYƞ={tP.zSO= !(J_e8\!8tR0_/ LA1 o4Gz y'v:I)AJkVHD<PRUuY\&v1EYdE t|$R|,=;W&+~޽vdF'O 9F*rQaǕJOexP/ʡuEIK+/:ͦe<ali\.'4\Σj5΢hQYH$PVwD: )y??V|0L2 # ٤{-s#FZŋ<677nC-H$cNj,rLtt]A]133?~g7zޓZ}% D<$HD\y˲\u}bBzVWWa;j\.?lI"i5Ϳ`W2lJ ]}}q4h=A^ Q _yaEU̽mې$i+dni9r1;AL&0 #x'P$(RF$$",!akk \n9a?ffWK{ ]u!K"%t 1L 9T=͞-J?rx w~C埋I_UJ%| _TuqT*\\5 c8{@H2 /~ x,˂[Zi0oYCx{@>qf:Kꃑ1VAr${$I;mkrX!m9r&yg%I8H$ܑ84bIdgU$8u+ 6$9&4

(X, pq,S2<'''PQȐ5A$Eh@$%Uɲct^7a{UQ_P!__@V>zFX^^~u]I kZzΎ[4QV籴qottWzXUy J4V#H>v[߭ [C]0vnDN %덬1:BB^ #$$2I&D&Gٳg199 AtW^yek_=Ajtby7q%zO4k#X<<4 0 7$0 @S0"A}hE?0tà=Ǻ5 AiNvеDHT4}rO'+)2ynTϟ@xU","ߘg^(f ˲|+jP*K.=Y x僺W{ buu799y\wR$O httPT@KpHR^LUU8tzYt:]0ޱ y !DE 8|O铏W<3REt:j ey|WVVpq>}I("z< mwؽ^ny%s,<eA4lĕ % 8z77==i(IJ011j:;[ "jAnZQc{&nftpͯ~O焮_nP;tD#,"g8VVVv%lz=T*=q8ͩTJ%g !`:yo`;Y(LXS v~:Yi@Mܫ ]{ČDXAyi奐Q$", q؞Y/_~,Hܣ(Jlfff@1ܹs>(#Pl6rvܹ˶mJ;:\Hu]'"˲mql۶G@ !DeY5ɱT:kxx'X,vrL_mrqb9[.N ]S(?β,,ReUU< V^YY!q& ,tnw05MضL&MuUUǏ9qē*ʗY}yFw?|vY.bg"F) %_[fff~yjj##P([n>ϣQ0EZ-t:looC4 &Ae:JB}INyExbJe _?Sf'=Y8'!u`T(}c^otiz86ϲ,g1 IDATaaaP(L&ɲYOQk*a \{l6(JWS"ݚi;iA$ IP*077秵c<\^^?pC,"uC@Ht߿(8$I:440+l}jZҥKjΔR@  n?M7$MNNΥR,!!D_?Lb޽x{ރ>0 cƆA,Ӟi7qqdu]g=c4fjV)ɲfy~Gqݴ$ߎ={S/'/~WJ}M) [__ojiJ$mh@uɤ/KR/>Ih2/\pp.i%-Qױ722 /2FFFP(*+#m#HY*°,/---JSʠVD:","{D@Hz}}?,r,T92MNi/M j:F\A$qםO={V뮻=33sͯV8v^|EcŐH$d2:S8H?u]9L²?5  8 tgɟI|COT5.]~䃮T*Ss8c0 b1A80{w"`}uMd7[[[xi_ˤ$ QZF۶K+++d fffgffFDQܓd,$:B7 0 gN_ܹs~$,Dz,*Vd} ^.ZeUU+X,"俷D9)NaKKKkv/gp/>亮E&c|x?o߾d2$I8<$ISO=۶,2@EQ}Çey у={ tPɎ^Kň3nMj U V,..>ẮBzO Fnn<Z2 F1NPـ0˲SJK|Ò$i@[j?"?"̑#G~}bbb_6TUg2]w݅Ng}^oZĉ7$;oDfDFDFH QP{U/f-&cIY%CK#EI^lIcͱ͑MyG6O+bUo/*T%$rc/C$[E9yJEwr%XGGGw7s3 z~ rR,J?d2$Id2JJ>2m۶t1;"HOukzns d/0ʬy %p ]8Nw0 |޽{٣T!$B^ ZVŋ8:N!'mƹs?l0txT*oW8f»ώNR=#8}4zOP(… h4e,߁۶ Yx8n}{{NB$! L" CUUyG[zH!C?S z' @eQd(hr)]+%#4.effgffvH @6%!(Ғ!tw:ePrD.QL`G077۷ociiǠ.#m~~qGτa@1IJu]GVC2D݆ *:SQR=z;8|izzsa$Ix"q(3Dpd2j57i9$]ŭͫ|^W% {cXK;ԍHtbT*@t鱫]'HT*r@+4s$JLË v4eY;fҗv$I"#5d$J$T.xq>ٗJH$vyTU~p}{j;ŋ7nx|G$kA@vȿժ[ymr|SSSB.Yws~N#xDQu;w/Z-h+aǴ7KR)'od; ѣp-loo{y<#⸑;9Dz` s~vvF(rX>VnFM0X3Ev?? n||<-IC_hhZrPQ@vI^2sl烕 f^hZ4**;( l61O{ZFݾYTp4M4M֖@:(#~Inc#Jool$R&"QkU]fDzg ^~&h].o߾;{jd ~~ =^|EP풴鑒@3Ċ[0p?;666700|_~J4qڵƩSN[D/h0< D罎"0^KKK[̞I`xx8-qA,JR4M rmH@$ KUU(EQz$4`&^@DW_8{۽, n8$I B]a;a"VrP˒~SD"!E-˒JiwL,ԆNJ1M-css922[躎 bcc $!ckk Ba=Ͽ%Zmedߋkබ^W`0 Sߖe!,OƾڱqU0vK\}xIm]wEQvoFu]dxB088m۲mX[[ç?iƝ.H#6 tgOLL山tl'(xQ.ݎ@^GXĵk:= hHBO?/R ^`+HuE"J%YvDtH@𬯯7VVVpg;de9A(ah6in1b&ݏGREX&] z%}2D^wȱT*X\\=}L#>E,K6tiƉ'z*=&xNDt:Ӣ~~;䡇: DQtUD^G8& B$4yg Ҧ`g;GH%ȥNMM 6=eƭ\.ww: 4UhB'eY˲j H$&Ey< zZUzVRk5% {9;(:b1Tѽ;Ȳv\%s>яh\n߸qCTU @4h9RT,ɺ#d.4 rٱr4 BaK9W~g~/;E\Ʊ#<3Q$B? z9s;?@8ɤ(ê5y6 b N>ѫoP Ħ~]vF압(17objj tv 1V]#Iz~\._/A-:N#̳)BN^B?0Za֌l~BˋB 000EQV3&dhIÝN(t:L&FAxq`7GÀ@4 >ÿ855uՑ5㡇B<K/mw슀[n5ygu]7Xpi;s̎nl{ɿ]4+r?5v-JEﳗvKn](JVUmJrNRDG\$wL$,P(dG8s(Aw ;viz)Ry$I 'ĩSD\ymz=xv'%rQmZ-J%ƍN~.&v EQP l6\.J|ݟ>鴘L&rϲlxNSSS33, L]AsTҒ/21$HD$'qd?] $yf ֎@uw@'W*,,,,`:F B= FpuB-Bg ^tI6Ew0fffq]L"4X!ukT>^_WPT\0h4\N [\$6龩ꪇe'׫ة G? h4a?qV5tLU^_J74=&vToѮџM&GC$#ntzo2zGh?O@nr˂ |8+9akW*uv`Xw#I1ko(TUA%RF}NǪVSN=O<$}H$D4R$ wWxDEghhȉb.eGN?oy{pa݁$cM\ f0A ~.C۶~s]:.f񁁁*∢HTzưr X9^?|…g =]e4BKd҄j2%5IH2 Nrmnn>tTa%q|t:Tx ;HW*ke.KǶmtQ2z0 dYn1??PZuEMӞ.QhrfggGMM:VyE$Ae8pSSS8y$r;vE׾g[˲,<1#5ha}c BX,888`u l<(>G'ˤe6( RkGÇ MP*000[m1( $dկ~ݵ zEX/dsnDjK4 >fH$ripp_3=2^UסhHӨ=cXl6p_l<ǀ B.4HJ$5VUSSSxG|#8h@~.c7yO(w{4}Qtiuz*D"Vi2.I%s]@"vGh6uȑ#oE;9cccGPNhBc͛7qQcnnQT~嗿j\('" >k t<5M*JX,h۶ƯڶBoG$"~~DU8IJ/㤌V%!48HdOZ4mJ2xxK܂*dp x<V۶me!czzկ~4HON򺽵uP(,FR*L0qD"C[[[6ntPUD8U!>I;mhGt "prlHn{}4H!!칹#o^a5A,e9&wCL<;:N8`/0^"DZUUAu],x^G>,u n] C3~hw\9cccw>?o 8CRבdzdY̩ n0D$EQmF*m_inᘦBl6;*rW Ol ߼yH$h4.QUXl*y4Nۅ$EaUt::=SOazz.\ Аu^ tGd(RQ&3F7VЉX?ijO0$jٳty-o|yB8y x"zu>hryt666^VxƤ:SzYKkZL&P%(˜,j\n @褖(H$qocaIkGw >&89 X,d2 EQi#Z"c||Wpv{硻Bddri+=nl6ŮT;9}0~ǽ@+TɘiT*$}kAӴ +V*{QRm! D"eYE!s$;3@aDܪgZࠛj,C.ǰ^F. DX~^,B044m{ضm\t ٟu1$Igv߻wx9:::;00UU].}݇%dR&aV%;"2Qײ,Y=ZQ,,, Lbcc/f>N$ !O*d/Z-keerʣcF:;#s7h;T*}T*əL}fDQ\qjcD1P(i-m{cgH˜ nb'8x`tzzz$LڪMhcOj\.YcKjd0#b u(88* M,m4Cb(";9? lG'n,>f_|SrY)L2E'g?%;I^Yڟ0 J%B!4 nkkka|||Nl\y\~}P(x<ΩzhEW{cx*<Ts&h6qy7]$Is8G&ap_KR=H?C?'xfyu@hS;⟡i$nq,(Gh@BZN'^p9YZZTbߟH$e@8XZ-wE3 M|T,D%I 1  YgYǦcW^mOi@<CO8iZgsssx788@&M[r,'/Q*jكFvMfLRfNy7VO$C Dc~" L&s]-j9w`S ~~qo9 I1iӧO̙3t:}Z2 >w:!kvr|>$IF pVAQȲ Mϩ*o߾rRJB q/; Yh4p1|%!zHSNJxqȑ#?000.?`0_|cccz*kLw*Roqjzzzljjj;"3(CH?@B #[57{y.]imPR###ĻeY TۥR-"NބNY6v  ~m0nZۊLNA$WMlce 1EQA=0l6MMӚ_`$>gmm .tz;APV166ֳ|TTA2v-B,H?Ï9 H˲[#]~[5$J1l(;I9AmxЉ'zvtG&Nؓ8<t0>>>H$&bƍh4ŬW봱5w?300p.[C0wq~zbbb&N;hԭ aȏDQK/BMӐdp 4WmrIE\.۷o>}%055Fx<2MԫHGVVVzM `߾}X[[sPXn}?}TAs:JR%}wL*;5d;nK곁G?uPf DT%jX$9x z 3dO".mZښgii gΜ.\V=%IB8F"ST2L\|TDwABai˲l>Ӯ`GM8}{tOCUU<xWf Ip 8\"xX4;Ε7x d"giiH$4Mi64 CCCI^<w+Ux.ׂ `D&bu\E%HEd(6+"$m(G{#]2^oWqKz ,'is&^<BCCC>)@{"T#) >4M# m=]:=FF>HnϞ={% VR|k .;t$I`E֍ @RiWՕp8gYW:ϊ êf24Q> rjjj6NKH$}CxW\/]g / 66q8ivZa[(O"Jj]3Az$ h6VVlYC/s `tqBp)lmmq=r"n:;vG>N(Fy`I<? =d~̊ Lbmm =ҩW:&(@Yzv ۶khsl6Dd`f$|G<F>?eYdD2886gqʁ~罅cX>? tR/I'|Xh!DlrBJZB%dN$? p(%##aN.Yqznn!b17a 4"c~_V[Z^^~OBELvIU*62)rȶmTULNNҜGŏdF"رc;044ԣv# ɓX]]uGP&JVWWM˲he'"\?}?AA8οb%}x饗z:V i"7D4E<G&$I; Ij\NiQvڳ}:dJCĮ}nM > 뾟m(YϐwǧL&:<dOٲ,U%N8%*)H&[Xo0킏Gn+r: O?x1v04MCZu^{|~/YaOvA': 9vXfׇ~4i@~MQTP0|s>?o nRF/kEQP(H$Rh4Z4D]-*qu\.\.$K^d6}w(,5 )˲EZr얗*LtUhkv *A;"Dbdhq7$^ ]oi2zV(sB4RoA%-I&#eYv4MEXFv=[>Drv(moo_?fGdY 7ʝ7]3NnԱyOV\''':˲XSq­[_۶E40|~ǽ @4fffQ,/P(V^H nZnY^,5LS,vS/I4M.HyMut:\\;]?}BT*fc6pl:`Ư-˲lơCjV#d^@`p?~;6dܹy>?q9sn~雵Z=6^(qٟD"i0MsB1Sh6KyϥYB>+a];Y+WISv킏!4oPUtdQu"ǗUb "ƞK7qhw(*}!OR#GHrѫJ3 CēoV:R,S@Z`8~vvׯ=Za$Id2V={vFJXx<>2<<ћ7o^r1b~?رcHO? N k/v:Ba7 ;j(g`㸏9Z&zV0\{%IrhNtγDfo-ITUuǭm`;cXvүJnkf뺮ٶmi\v$\<Sou;=|a$o|:t{KpƍQTW_}JV;C/'d*˲822OUU$geYv;,T txGTrkvԇpM֭T*xGk(J(կ>Bl۶v'HȊyZ-Y_r+bL&\& /a`0"~w~%Pӏv,EbؿJ&ǕH.///RPEѦ4M5#xi;H$b%NubѢG. x# 0 VVVnG?w64 4{QeGnUdxu@h!]`GOHdc z)j :L$^%;nex'"w:bZZZڕ{xT*2keqܸq+g}68Nq8~xȑ#&~48pۇ\|Nܛoyaqqh1NyY0lG9Y{"ȞEѕF%qrd7eY~i,nb; 4 nj@e8Ӿ1`ٻ+b5~`H$lh4% z{:$/N`^ ?z={<h6믿<SUcpءeڌ;~U. uJ)849VU6O'rI~tV4!L0 \~Y]!,nqXYYO+s"~~`+W`yy5@/G% qG1NlF r \O8FX,`0M(F!IR((666A]뎦i033sVassE?noo/^^U~`LB4M(5ع}?4M,r}u\ IDATe|>iej@#Gm;$d%a1~^#ǹP(t:b0vHxL|?Ƭm.ZT*V^z"xi$IWضbI>|l6 zJEȑ#k3vUV/^<ɀJb^N;b8*j8_ujJi\7XǒɤB(\2P*iɓV}+=ٻz>`; 4`cx ,E4###q~ 8fihZ8GyS-K 9;jn߾}sssu Fh@Jn͛7OSmFD'E`8OLLR2 YrzYt0>>0F!"n޼qW zqHhYo4Ǐ~+;6z~GT$MysMt:.;%+YyמD1qGr%^|Eb?![E[XjAT269 1ncip6EBJRŋ ^,7ASUu^s]#2$ 89Ut>pqlllW^.\p78=&mx>4&:F?3,;b1# nsR۷8h4htZNqʕ+vgH$bB! h4 L@E=3=|&^{|~) lW|>!wǫOF S4MPU\ǹ]Dy.&W؎f,| Jx4r@.sUO鴭( OQ+.a0m潼8Xհ 9G=::z,JYz ۷oC4 ^#Hs#XG !!@Cw,R~=@HbT*V'.PPhW5c]YJMji?%S.qaMțlN8ǁi8};j(]MbD";dNY ` غcllLhŁ~X,nFlnnn5SSS??::X,&elbCJ(?B|;=;"˗//t- ӝtxQ)/A;0idXZZz=Htȑ|Ѩ[MnxAqr9w/Sw/t߯-KOUEf&hB>xq5 p q-4(䜫jT*RTƸP(dif:tLfAiszP(Ν{w|4P($Q=\.dA @<y^[{ɤE;-ɲ캵={###|4JA \:ҡac@? n~!Wt0 EOV(' }7$I:ۭ E hm˲*dY:000j ]`YwXȲ~$ ͛xΝ+R{GK$A|Rj}E::l,3۶l6oPb޳+wJ/>eg_YYC&Ǭv(Ni{ů۶-$q6u]$I=dApdfmmN&?dT&CLvPU{^cmmsϽLu/D"p8CFv:- fR)irrshԢ;8 Hđ$)+KD 7 TUE~t@? $YY]hZJ.m> ~Xׯ_zݻ$s7i~@RpѲa۶h4\p@(.]Jd@hh4DW\$Ib(0M7nZV _P(@G?B͛?sXqk/R cPIAlXe Rłz4MCR3pN{z cXh4ZGY5O*EZ`DQv*ѝ'N B~qli37`ebIA>EpV766^D"۶˷BeezzAXeh,.. :z~_C d2m>TFa3`qLLL|.$cXQ)LBuBK.] Jy7x* ZM R6!& 4)KRy,ITjz 2O k If1>>@ zb\.yuG2$I"GJ8od2Np8z|>ׯcmmmĄiY6[upht<V?8 [, > ]4 jrueui%k%{666DkME$۷=G"Nm| 8]DF0552Cp*Y<$ pSSSEQ`ca|h6\p.2 ১ㄟgדe+++~:= qn6eY B(Z}_z?,B333Mx?o) =&rD u쥫B_)(/gϞ/vۋaQK"FW'''?d,"G&;8s Љ4?' RB6z ^cii @Qb1LLL`~~a`yybZ Nu4 kr6mT*d2J%,-- Nۖe4Mt6 fw:6MSjZAML(N2( ckw_Lj ]MǮZ]]}jUA#_SdgfZֿ1Mꂐc"(4MQTӜX,okk@dG"8D"GWӝ>zপ*`۶Ǝ(:Ew?"yM% ̙3%n ַ.כňD"IUUVt2WeYlJÃh&cTH@bmHPLػw;HwHWFEA~|Gywfu @w~~;dmm777Mf)RHfYf%I^z?c#UJ0~G?355oppU!; ,q̙ 9ͯ AKJ\.iY`"a$U$i=r#Pr"S:"Ģ'g}X?#B*KKKX__qB=ImۼeYb4i&4o7 ' E%n^:JHdtNjrsV^楴emLN"eW @E`M(9ȲLR]"BEc~l'8/IC__jhQXf2VWW{:!H0Dr=#W)hd2s6Q.ٕ+W8o.ٶM {E$In惍FchrrNh4j0 YOR<ypl@=9r $IB}?.YvRt+%~&yPUu9NH$#58DTOYN8@`G .ARBŔgRWszzZǎ=DQ5ǻ#_;i6th4Q],(;$:DtG?6|D‰'ex$v7aKZbt: -@V]"U\.ZV|(Q e?7[ͥ 3wjZQ8-J;&$!ƍqw[+w|$,ױޣe|?biO}S8qΝ;}bѿ yb1qy9>I~$7/yjJΧp8ܳKsP}ƍr$x|$L?D?uu]wj ;“TgDS9԰ 4w_H$ :tꞫ^ǃ=H9XNN*JۧO> os>~& \6l$zT!IҎ$8ز,ʕ+_^]]@%ydƛo9'z|~~Gp,shWrCrO:+%J{l䞐_}֭oj}o߾x< a ݁Q?$|`W^nLWFFFP*Vi> }Z|FjJvE>MiUTe41@{GCk_['I&/YO"<@&QS{I={`hh_򗡪'ϲ, DQr9cbS1$@?o?u0яNݷfIRh^q`dY) XNc/,,,2Öe$I"{N{?DPlӀ|Y{$+lnFFFzϤ+r\v4Ls=jM1Y_~?{o%Y>efdF.dUuUw7M !X0}` x|x`2}Ǿ aFMknuڲ2rXW9yjʌ勌y}o~$x~7~PT IN:|Od1q8x^pU:` Aat5nrr,!ǃ x衇64MvKdY2B$M ?ErtzTH$lvڅ~>A*C=XZZ*:$ ;ӔBr-7Ǐ|3<<|'z8hiعDo>|~#%34ŋOvT* ؒHVC>0vy0#0 @k+ N }7ZUU2IhI%N {7pG_8:$=躮722rԔNm"K ˙(JXXX:u8b ynLe}28R}hvv6t]UUޡ!/)h4BiyT)AA|qޖR`vy'y{}HtX wq>4M}8sL_NcL/IPVr\+z~$i'`!OѣGo7MS;DŐd1EQGϠЎ(fiΪyRצiBexc t HRu6}f=='E>,*J =sT*9.\T*5pIGFaƋ v[( i0٬?Lq\t mcddO~ g03!XYYvKҽ϶Z;"&'']Vb7ܴn"NDz7mj9$C Fv;n/?tONNjD‹bDW3bǦigA6E^GUkRj\ ˲/~L&2j=;9VA.&s~Bj́T*w}}})&,y.<-Ljks1__nϟLMM/lVTU#O|XXXӧvM9Ϧ)+,*ZySAA=w^b?I C͠<EQX,τ 䳆JRUU=eOk4<۵e6ٳv(Jv}ߣ{offl  B:,-nR,Lkd;a#0#W&q]ןG8V V {S!7ض\.SN'tR277G|\ $۶J #H$"R Mo 7vQVMx1UUNj#FcW=ѿ Y`B"9 \4Mٳ_r91JallFDqm7@FpЕl˲Pqox((YQ^щ9N C'o~ַ'EL*!fI: - {YҭfZv%N驪WEIӴZE|:Nz9@H`cttt2HX,ȑ#h4wo2#di,ֶk\+AvrPJKFAC;Vѩj!j taEhzzN{pK IDATO06M-mAt5r,N>'^gd0^#N#fLjZY^p`+۶{ib=(v?#0xIU59صk;m;!P |O&XLR%kxwxǽo65&a@G BX0BYKݻE"]d3tRBV9(V*˲KKKpbXTUU^$EӴw@ /v೟,an~ZOJ eYMaiXĐl;NWUU}hXop {vu?܀(N2HxGQ|C=LbrrtڿVRFGGqžU|$ߛj %N;OASUUN:X,Jm4?H<7ǁ$IH&@?Vض훒sdcic %HED.Cp?>>Gud{^;G#0#W!s,vm{YXJz<뺾cG$A+HFP(P{/;ӲvЯ*c AI_E>!MZͧj̆ǂVbFxZ.*91լjȶ~xxxassӗ%xȲ1~8q~> oT*Ғ344䩪|aH$2(*,( _.NjZ)Bk=Fx[ߊ~|zZ/ѨCϔ Z-˃ntjakk cccvIMn'ǎ@թkz54~Fa nl(˗/QJm\/$Ixyozw7``=-0j5lll`uuT?uϽJ|>$A{ LCʴ266IM$VZ"B>AŲt3:!"3*5*INt BAؽ{UU# KP/qpU-y?_.\ry4@Yz$zO>|&9(GdOĕy$#Z-o۶ @`.R iwFGGsRU!sv|IvE3 ;Frq3!AQױd(] ] a4?<^ȣ T*L`iXH,b1nob\.<"|rD3X!;/|{A62 nVm8qv7sަĉ'fqAy^^/t:ĕJ%\wub,kڥMvYVPWҸȚ/rL&3iC DHi08uԉ-7LBQO ]|OVU^[[ۿ5W۶nz\U#0@h7^:Q A6AnЮ"oo3N>rM5::34$2 IDh6I !6Iɍr;7wfij+B%n@ f fl6G4MX,B8NbP՚Hm2D>+WsAUC#V'TUD"7s@mVVWDZ/[G9^x;c۶w-?MӢh4X[[ZL$๮ٶ}0l6[__Jh (@tصdDQYDi.IhUU^:޽l!BQ躎cǎu]8qa׈8vT*Iy4 îjx!\` ^y$IiIn}*u䞈G)68$R/#玎~Hwh`}}>H$D\]˲FaUL@qY#<4M‚F^>Kz֋V+J0 \W\A,A'Mӄ(Gh:==qmCežavmmm|LQA,=aܳ>{oaLft\bEBFaƫ4H2%IrA`tt(<_]]=L&kl6NKk*q&e&nj\.cqqkkkZMK}},PՐdءj_#!Ni0MsqӵZ r^CCCoWU_ȲE!npSY677^.CMd2=`?A!"JAuLLLhn3Ulvpu:ZrJ,;,Iu,j7r666' <\.n%@=ڵk;KKNVaT7|>t%$v/%wqxy}ٳgSO4M`hhWCeh׿D"8qF ^tSI,V4 (E'۷o8X ɟ#cn7H@9gW*fY*5r#&&&R)?;Xx0Hq`asssVpu&'3 9Y\UU=vފ0ͅkt=¹0#0^=ZG=;ΎC### Y4iPwT 333h4tZA+ueP(L|PDKj۬yhw|;\oTigӫ^N۶=H$0::v04eYPc{I ӻmZPaX^^nW*+ͅRt)J{]<;~dȵ *|xl <E惤3*F%?M>z xn~ 24Ms3 JMR\Yߚn,$8O=s=s u]# v-2/R;`Ue&(f#GEQqq>A:B=ҏ~vlRARX*q"vލH$|>ﻊCDjjکi6e8h4| <"i~RӴdٜiBNӤԩz.*$Iza: NưFaƫض\YY9tV㪪^/K߬Ipxxد@ҕP: H$qLOOqe"A(\Du, D"?ؿ?*|I|k_d} Qzfo3HE3JFcJ︐nP(4j?R 8S*#OG5tAԴK]njp?###>|9t:M]U4g-ͦu=<ul6}Z2h4<2rȑ b2 ~ @ѣW\)꺮'亢n/|Fa+dX,>W,D".8۶VI ˲n2M#EM\qĭhVwSV'#tH6ZK_Ȳn _a6N8˲p),//ot]%Zdx5O$eP(@u?) `zVe[%U (h4`*^Z' ȲtпrS0 }0h*7@Si *kyzp{)׾F"TUűcǠ:NKeY8xkfgg{NHi𖗗W{~tky>d.۶Qݭؘ9W-tɀ $0#Wg᭯?"akkKm9<<|[4}BӣmHo}}ZHUUj2$K'Q":m?xq=zw~wpI|߆a@y[HB[(( b{}}t>L*9$ i`g1&YŎyM7axxdҧ1EQzH8u BTXą zeiH>SOS|Fa dnN,zy|&M4$kt2Njz>0BWMFy %t:4mܧaF!qt%Vq{D"~>濷 ?S(, |yAW.n}}ɽ{q/h Xd2 Axu݈p@WaƳLY4鹆GDQ,[<FXڗ p\Y8Jqy̐@;l6 u{/x6ylA2LMUrl(722EQ( ;<*\OAwx/QnS`iZ݊j,L0yCw,m^P 'Lh4"2')HSSS?;:: Funvv;3< @goW.l۶lW`&DQxq3MlpN aFa `"*Et:kxJ($0 f'|,[@߄Lxuh<2Nti^l8('˲f6(FEQY.xpIHL&t: 0A^49=ɳ{pN^%IB<bD7Z 9߾!mۏZZY4H6Xen8$@X,r97 x &}Md˲H$~j:N4॓gA g9þ}w:FGG8~8vڅg}~hT*a~~~{}Я|*u7 wNU2 DQ$}C{,頮 @hX5f4MK4Aeגeٽ;44$t70 Wkp]x  i4lj۷mLyޗJ8Je!L GaF @ GMFSl6i65PT+*hdE'WT$)i$<8Nj\\LxNǭjLf2),+IeWEZ˗aO1#={8nEJATBH'\z"CĬ;;7<@ n#қ=JBn ShzbUU\ћf}aaasTrYu> [[[dߞCCC(G't孝$EiPJǎ{4[[U'uTI ]٦aNӊCAݗFu]+i_v/D X$IRtX  6$vo|}Gb׮]8wk-...}[züx1fc~ߌ+W 4M4 J?=v 资!x6Fث_d2!zAQ +0 fggױ]o`?NUUg/*j{鴗N!z<_jyǏVպ2"aFajiO%4աu[`nn?zN _%#*Iu|^* 2M*J;?y^}A^@?e)l6fsL&dY:$b,yⓟd_{t(>hR\.pC!fB@Gx@jwdnY ?Y]~ j>s :̙38/˸t7ͧ?4M|X<쵑N5drN|S;Jzrٳ,Sv'''߼ߩG{TpOSȹw]Lާ Mb~~,~4p8sUUd2ʲѮ(EK 3JtQM"y/Lh{0~Z0#0 @yv:kfm~RqUUA$K8 L_ 41*+{rTzT*0US^AE({V{u:t$ٴB=L}XZYeePWMOO9B$ʅBA@>gxrLU͑AUU~SSSE‚e/b~~VJ9Ɠ*d0vEfK9L&GE>|ŗem{,9YKi> R1d9۶v#ׄ8~ʹ .,߈>fHRܫ:$IbGCw?<ק;o6 KKKw($TaFa `߁`,w~~ȈSK((t:ugiVz]vT*l[V&kl7Zc >XvYoccAv'f1&OtMmcIG5Bsx9cٶl~:*p'PA}ߗ0qA 1KIc? DZ۶GS2$vJN8[n޽{J*x:y˲ 2fgg/^?>*ܓ'O&Vlu]d2oFI8q?o4OZV4"r\"lmmuɤx=a}}{;M4~t]TUg }=zt:=66v뎪XYY]|b?A뺸tb<Ñ#G|NV;Hx.apg1aFaj Tu{q,--' j4u HEA<$I}ߤñk.AT*q\xqquui\l_'4&^<Bhu'X.O+r @dz踗@rZ,@oRp7;USzN0=fcbUN0Msi *虤 ̝/ My~"Ld<Zbqq;yWWWK7WI@b1|Ct]ҴqѲ,2}qljtE~[a,% L"H`%@jammm>wB9f0o'IGecdd7 }766O<R155MPSeYF<NRJa@Faƫ IiPگ 9 }udd]~<>>'&&b###6H$J0??{Ы QpH"JQ0PQ|@{2ڤG= H\Sқ{;["/JIzϥAwy$#H$F5M{1Myx}z[tΞ={y]hpNg`J=[nlltK>gl6]v%٬M5Ǝ0 eq0wuBhi;-M>Ѩ<,ceeedw!#0U @s0UA Ziڶms w5M/_F"i)F,DžeV>zklN6iENhK4-@=V*o||ł^N(t:W"BRD"[hԡiDtMK~9+Ri]\p8Auß;tF sA(8}t !*Uհ% Z-DQT9A@H"@h4n<ۨXt",I1WЮud2:OI}WԱns=ϳ8޷o߇u]u@+I{n1L~ʕ+y景OMMcjj*544D"ѧtvHAQ\t mcll R vtXuȶ s>"0 ߀&ER u]r9*kN3M3taFaBF) k%/7b&9.bMh(M[VP(,Yv 9۝@NjMѸ|Div(Ab#}0C[G˙L&]ڍFz @6hƇ8.f4m?Q@i'ɾi4Aݻ<|pjddvEމDcccV~eP(z\͹':3ϜY\\\׵f^anvi0M '6N133]nQTPͅB!wʕҊoAC/v<GFF~=HX__5$,ht]h4sHGcl6XџO߇d|͸뮻8|_!m'&&D9YvbEwv#0#WdD쟗JA>HIѝZ2j/IYA*q/I 07{MӐfF1׏:_%|}Imm4=EQ|pvpt]AWIj~Ʋ,nc%ܜd<_Z__3xPe HPH$‰Qr/G$yti{u j/\׵-˲<ϳȈ?ݻwox\R j՗2&ѐ$z]^^~jvvvZ6p-=.$h.S8&2kb'2O $l{f  jאn p~)t+|OJ&.b1=z}[▗nTgfϞ=SSSL&w6wRe,z'kףG, P&jyg~ٞ0#0 @t,^wx) lnn)n ۶$l"NsxIz7 _̋/xAd(?zv? .ZݏrZ,FyCCCJxulh4}Z|>Z4td^w־gS ;_Q@KEzG}/PO&$Irܰi1MӸD"M| (yP:ɥI.Lt]?,e<6X,㯍Fb$yG4Fyk`Yl6 0s4ɸdNaABͽǑJ\F\zͻEМ^oeYFjqoE0·aVX[[v L¶mus$r+AӰ\&igguh Aw={n4-N֓C,=<*\ Nrsss9Cd NaX@w#z'ϟ4V:M9"` J]Ba JugR</g4=jvR,+xOu]Y)[^ɶ>ha… eLRU&Fqu<,--PD̃޷]lnP K<:?jPVqEj5?%I (^&4Ik$`;B""H$TIni IDATSl3bth4P*i[ң(q$ KXe-xD"b"TUuYYYj&2jkv5}#Оea#}GFFp7UU144D%t[* nT誻$ISgʃ<4\Y2>+鄈Gy^<RlŜ Z-lmmassEK:ZnjoJ9q,^18ymA9iNXr5\j:\V9(Z/=nkc`阬 hg} A]9z{kkkŶ.ӃĄB<@hcJުt'^#Wa`}}}>vg7֋(0#0^(RW0MsveevA;\zkF}q-IUUE<G2u]G&˗O///5jm1iu] qj8xD"t\~ a؇(d28tpd.ccc$nWh?oƿl4/JRպ1޻.7(y|3vuH>EAT"*PDrkkk?WPгp@ze?׿xhMbv};ZD <8' 1L.qb$9ϠeiA $OP nir9}R}WBjYA4HWA; n&*W*N=GDQ|GDQgWk%Cxܧ] .\xAIp=0#W3e/a!"$u]Mϼ2&ualHzNNŚb1Ȳ ˲' m_lB U.]tѣMb: )iVjk6gz'RcF.(JG23Mu-^7>>0Fbc8Љ1M!q9b1߇EQ6ilYJ2L|A9نNMMcOfZ |v~ΙeY9pSR(X`0T*fRdq {ww+++ɓ'(o;CBB> ㉷giwT*|x{tRUw:'N^@%z jAQla{i.^/}KC_[TH.?5ILMJI4 {y… Wѯh2_KRJ&>w؀, :'Sv|>_,v'4I4v=Lrr-~8 Ǔ=sH{u lg|>Og x@$VUUm ίJ|y9YZcF#dubFGGxԻݮY}-lnnINip8lAi,NNuT*|, jAjw L&mq9u>Z-^\\AvXB^_䀜x%atpw"0xcg?b`C$4 ;%v=׿$ٳgo}k4Mr`t:o߾dH$540?? ,J{ :Ǐ۾}x>t-Q1F]=f:4F-fӶz>MPT/\ CYDE:^[nO@[x<W\F!pL`p>"jbddPN; I)UYu$I㮻zK/405$!B4=C >/SUUCyMx@l60RAUU&RY2B 퐜={'OD^GA2u~e d2jjjw>؎͛7l6Uh0`\._ L!#@>=FjnkP7* r PVz} h n,~=Fh4ww6xv v4M &$I>rȿ7"dzNADtT*gϞ}YQ]|1' lh gϞ/|V$!N~2R.!" In/ONN>LăϼУPVQB!b)UUZmep{kKOʲlC,8p8IzbbX `Fv6L'Ah\WifX3 mv_zycSZE 42jիWJbQ99;4nMtCMv靄\.t6(b32Y؀$I8{,(2 2GF>{Z֗Mt[Vů 㓓j<>>>v5C2 :Zr}߾}i1Z;;;4k% LBܼ>t:m0){׮]Cr(])|r b^P!lUa|*"T*lnn /^̝:ujkvvvҲ8/dS}inw?! NBVit\YMq4 >MZBv yp8fi"ro@4]+fXXXK=ztdds\Aݵd2MGNvJE[XX(wz ȚuxDPs`Y/q t:n{wYi ~,ˇNDPAR Icw|||f߾}JR}a}jχ>C.bѺv7+ߐGQH$PžVQbuuٳgѯh15'''iddvb3R>e; $B8FZO9$IH1t[n[?ZhN޼O-..dYn~LMznݼy3 -Li׫#ѣD"~:GXP񙙙zӧw~zr+(Xe;sLe|ɓ'O vx&"0fff<04ΎR( 4o}aǝ <1(Ѓ,D[,mVĉܼyJ@0 }yy&`05 #{3,tj]a 766.>|.0,_ǰni>Xrh4uvccc[YٕuI wYeIdnlllo0dLOOR6uD@eY&-T*accC ÈNcB}KEQggg?422bw%L&:dz~!%c5N]Ƒ#G~ctt4Il'Z FHľޢ(>`ww_h4lM|`l¹Cr-~tHXeYl3UrzLA@V3fffA+vA*2|\.a>i,;?ż`PT*:-`%=B!T*!uxt!t]b13NV?KRmYOFhL$IA!@I~jf?[R)5w}YAoP@.6DagI9eEiCckwhlRP(뭹*rMiFV[jkSSSo IWa{5 ND9H/LWN4͏ !$GJmll,_[)v9==-FiEQMFm!Q<(C=7N~Hd[ vj5,//|gn[et]Z{ MIUUMVSDdž1јkIbѫjd29x%omrn[n@@VVV4Ͳ,Ӳ,J%!tP,!",Wٕh4bᵵfD}C)2dYF$Gwzn4XYYA,,3 <ӑH$L&T*~bb[T.  \#MLL# uiPc~~`rrDv>DphD"6y_OSF;;;(v7X,bgg(ڣ&###x8e ܚ|z7zƏ+b1+lJ5#qww|$GQ4zc1V4b?\g""{Z֧q.‰۫m'[c eycdrVwaӘWZVkrrE0bGwkk:wRXlYMDb~.tMz<:>ʱ6om~[[ NoddDS`FPSٿ5J_A!N4=0MKFr-& ?(;eyYpOD"$>L6VWWJP(t_oѤR7}6VZ-\t4c;ѱ1{$4*ѨJ_ HPH{SŎ-lvLn^Rg b:x#|;22bvx"Do5kVWWQ1>>ڒfoU>EQWIϱX,__@>Q, ""~qzjڿNRnnaajl6;*rXx`0?A m |gggn[0`U.!/,<8y$2`&4JR3?:$]]]ݨT*stTU54::ȝ+ `_F8FkZW}>50Ktzv}}}wm{H/i^NߏUFFV/; g툄{:^eYit]d0>L&q}`&}e_^UsNkff#L`ݨR=/| Peo {nz/z_&/ FeY n"B4M$z 5-fGX'zg9i?\2[n֏.8qb4/t:-`dww`dp"D}vvrw\u4 333XYYA:>lllP(ƍh6vGDu~hUUDD"!MOOt> c4z&fD";v D>fwEbD( ":੧ɇ!BG_Ӽ~>_[ZZ: :-ǎbbB `0x@UUSe$g:Gt:(J}|7b1`krj\4Ex+[Ej\ɲ,$#311C$ѯ\6=` 6D+JF,s&^fNMMYSC1=Vjo}['82i[F7aC$4t:>-"@ju0Oy(wONN;22WUy]+ibaax<}vN~aiw{]xa &,kXGt?zr-Q' 9yfgii˲P,~:*b؀a_( \x`=NyBO,;v ѣG^z RKmh4jiZ\j4ͦ>55ߍƢѨM>XPCŲ,N.WT5ckk zOE,cddHGO  Ɖxc?\v(n+W<{TJeY^ IDATt:O&bCk16nw6" `Vեn>7Az3Gu! "~Pd|47@,y{pxN%l=,Ai4OhaKۆ8H3A.VA~^G.k|k_no[lxdr$yo0TX'+A,w wpUu]|D4Q=ztxv!c{{)ReF'+l& B p4[n[. DsέXjl,JGqخKH{ S 8B!;^ڜ]x^Z-fLMM!]z"jΜ9cfdz#ZB&Q*Z ###;΂ڮNߏ^`O+h4T*u떸re|/ Fԙv/( @u]l.--}oϨ:NlP+U,..>!YgPQUOa.mtɲla}}j?KB ܶ6_c"8tl6ORHN dK>x^(}衇9s2CL'@]"H.ETU$ ReuNpe]׻vi$y>`Ф*ImYx ÀX`3t{t:eY,a4 7n܀,H$h6v"y<Z-;ȓ neo' BgeYN&GN[n[?@ϟU?o/d$ŧ`Orlyʻc@v׋jj$nkćB!;v dlt0!FQ1^‚lEQ8rŮ]iPVVV6o>&LmhT\p1gW`v7&J vZH78%w]G O9Ӛ< a"\.R<~1d RU z %!(u^- Ǯx h4?R`X !7d;FH$VT08ƒMŐv~E]no 0Őf>h(J܋.\Xbzl6TK䃿/.?/| 6续BON###\ߩh$IBFTBՂiPU>@oq4MAmjiBaO⶙ItHv-r˭9Bˀ)͛8PbI'{Vzv" @w͡H$bwQviZ-m>Az> ߏo|#Z:N:ZfCv\.#H o9;5MT*looϟznnn\ckk뉭- Ţ ' ^WUs_*{1ht(h<#b\HG|D"`0eu;v:6D;+W,r~n`nYvA{ճ&n /x|d^- q{q/q{ ɊՁ$}{˷nt]g :pʲ &K4 V8p(+ώiKJ$M&^V Mg>躎\.g ^^n pLrJ%t:=@>-1iX勅Bayccp/|̵[n[?Dg paǫ|>{?mnnָn~U[(J<O<,vȶ?LG~V3pVWWh4II}X,N?|ſ."߫@~,Jx q-r-$DrJ$I8r"~l#v(uHAdd||^u\__X15u mJe4Mx6 ׯcB6Oӧmת#G8x ".^u[vV[C#6bZ]͛g.\\כ=q$b:ԍLt<.:NgʂiIGNK n|,Ks[ s)6,XYYYpyċ&c}}T4]tEQNiNp""w<x쏅_B(zF|=;aX,n EQ(J\叝>}OJR#e|އx9&fY֣XIR4>z;;;?Ύd+H$//XNVNX^^(vhg^`.JawwuǃMܳvKpm3Z[n[?{ E3MrJيիfX]]a]\Ǿh4N `v=iF]fXDZ(bټh4Xq"bddf^ Y]v] J|'1??o0AztlZpFllln:u… ggVLt"r< }>_1q3V% +{$}o:Uv:Jp8lM:-\ AaA+"tSV 댒޹7YUUnZTsw&Я7y%CDÔ7:ߏ%]^B 9Du]V/zɓnyfi@m=r'"-#¼L&c+=H R ׮]}eeY^/ml6:NNL:23==m댆u@I 8gr9}#p^(vm=ȇxt@vE~[nV?lVj.,,`ii>pj^-bhZXZZj///?i=fnB!_6}$IV@ =,=IKL]ʲlId!xlMR@߬8?u;Uɓv8nL,n#;*JX[[+>O݈gYIarikk/E(VwU+<޸q#777oy[ޚJQbLӴ5:ccczA<x_X(>-˲fӰ!˲8f^o6s)17| x7H~ z:m(X]]E0D,넮N}7 c䮻Ĺs>AA9/pɉ1-"qu+++<k;x0}VatttM"V']j(f}'[(Ndj&lWb6J`G hۨT*ʍ_| s|ˑ;7n-r-0+}c.b Lv]jG jϞӌeYmnݨչwż ~kkK BX,~_`nrbY2i`Ie@ղޔi kvvv /VWW`@[!!nՔ나ommiVр,=#ڼC ʼnCO,ɓ'OD" GǏb1jCipz=쨔>*˲IM,eM?Y׃z c+sY!x YpxCԩSݵWU鵤Y)­[6MSCCsj7uAtf4p8|iw'I)Be+NJku8{TRӧx#)IMhYlVX__7xo8t@ ~;; ,e< nmlB~Ȇؾ='HdHXNr}{ƍDwHB#xQt?-Pu]@JvH[iz6y  h`ggBh4f8IgΜA*B\|n$%Ev7%=cknjĕ{9| tfNdc/g2[n֏< sss}h4~ * h4 }PwD G1liiiIϦb1(A6@Ӵ>7zvu]D @TB<X)G<G$(( #/Izs+MXf>vvvEy:RQ,z|V,;\*^@rr !V 1nG#J$G(s$!H$'# lNu$Ɍiݖe|B;cHiF3`p('0s&p< 2K_B Ii0 R d@ೝ6b1h>}_i|S4\~^xx $nkM:\.ہT lPg677_z.2&=K>r-rkHli}{~e!Nhٲ,lmmaaa(bgg`fu7j l ˲nv}) cW 4aEQvn Cc2o&w%;^"\B$}E4#F,o\92{X2{iѺnkaa!wcccP}>Z($K$,//c9}VH$270"jvIbh@Q>ǯ9{ދ?a-o(xg :"H(3l.loo_:qĕ!é1{g-r-^9a?@ ?eSlEXD..]I!FlB ^=voD"%?8|I;Jat钽X]L,2П<`,̲,4mYc|?YUUvͺ9-OB,xw:h%,P|HlBj`Vs?Et9LY0z V Vo@ZQ9vH6l%n[n}Z޸q`YhZd2" X `zA{HR`61h$W=V٠)h0Lbjj]$dB9>bnk"~YnR(BUߓ7l¡ib;d,uP:XWb uBz+Q tqs@ugϞ=qu=LÉư{˗O9sm\ … HRX\\zy~fqqxٌܱv=Acܹsښ7Xau@#`In,gh a=*0 -DXBa3JMx?:f&Ο?oU9$b}xEݏXXXXps|t1p[n[nJdnCSvMrp5vn+%X|ao}+"^|EzDݶ ‹z}4M4Ml&U%B mt:q$ 倰ôV (Vuc;:Pk\t2AYq K:r-r! 2A DXDX޺uO}OMLL4C` lUUTU?˭XsVA uib; j(vj[zux uxŧF>v"!d/ȲM>(%ITUr-r$ }] V^[ևE)ܼ[n`ÝreqckkkgLx0|>^6#*kJd=jPհZ@vjHuZv[V% ciP(B!B!Ȳbh4PDZlV!@UUh%x<B!h),//kwwlw{8u>pNr-r5 Npx .vB\ t:} + #h5Mx<@ ƗžR~J}d2v Qn#aw FNv/ %i_fü Op^X7Mh+N#`DLCzpMx^>8;;SpXAh %ZVoIdhhhh zRvkٮ?G݌v χ qB!q,//qqe](|}}x<k=L]%B5EX,֗ͱGE`*7nx4q{dYC !^P(TUt혷# D"`}ccc0 lﵦiBe֕f][nep /7JŌF}z hQ(lp{{a *02bBPX/ xvttSC%PZ jTJ7 ffd2l6bP(t(T*&NK~-j@p=Ye\ŒT*|p8mN\4mafǰ~o߾]todf8pQUU?  6|@y<hf~V#ijZw}}ZVEu3]XY]HhZBCed2oWg|>__O0WUlooΜ9`0h|>K$w<,Qg=F="eҵ  [zO W4KYn9ZYerp8Ç#hFTUEXbJ@ 0pOZ-$Ix<mܮ\[n[?@L"΃],,,i*w@KqEQP(S+|{^aA~x1Kd$I8 ]ח9`4M~h7M6`k6TUU* O+o BSӭVWa.M,[,G Ðt]H;ΖP(M" H+DsҥK|@ؿ"GBA5owB0bc\.wt:u+8#, Kף|04Mh4:|<#V8|0^z%{qvDq7:^,O1^ zb8$I<(~zbb"A"P9s2F\. YK@_ y^iq||>; hRe/Ql5:~@w7e}/]|[nk@@WZe,KRZ po,(cǎ;;;o *~A98v܊ U#s\NDQ;h966/FdTXzRw[eZz}Zi;;;_ }]LLLur@$0fffDϓ29  vww/12a\5 TVrD{VVVV 0M@4M:l6-T*x.//~U.+}fa+Y l!],l$ITU}(&o)Ms~t2666SN=~+fǖ/R7aݘd2`0h]|>ȲlgPjP(D1`&k68tc&JzfJr>r-r˭WYîZXP px-0|"n[:i"X.|( 7VV+%ɻ}>_#cAZuSV*Qv2c4\WD4{{or!p̬:[,{E z΅!o浣GGUUBnf4M+ m ɓ*akkJX,/Jn1(0n֟y1Ɲ/ݲnP6199x<UU?ZZ+ 5 Z \ΘynmJRBQߟm\mj5٩9M״r|||:YP(NLL Mxst<^/m tOlgT*!H@e[BVׅ\.w\.W%{oZm[n[n5 NNtӥLpò,҉ö ^w fq!kdd3W^]ܿn+Bk#2B<;;;}֭"r{ɟ'n FX̞g<,aQcii/kCZ6koطoߛc ;>o.H^[[[/Bx3pҁ>DI䥥/%L&sod;~؝RSNjZbggW^}1 ( bFXXX6BoXR3:;|^KKK;@cWBAtS׮]FPő7>1x6#MVVV0;; u?dY 6A# uEivnt,4 j&33QƠ1İ\r-r5& ȷ0?a滝ҷ ѣ?].3xyB~$d`rL&NmIF|>_\.TU+Hwb~px% f]$SiPE^:< LgwvyAOjz鼾Z}-0L&X,񉝝IEQ,EQ$z]rp͈^CS͉! V4M+Nggg<11a*R`ccCp™ӧO/q05%NDG<t:}<9Bmnn"HYw).%|e~~~^m6EҜȐ$ID"p8,)4SE`GHAbhXt Sl.klVH|~A{9]4>t[n[nV$Nc{{ F`x+rz"PH') ,|l6hX >fړzz4M0޽WzB`͵3iȁ6}FEQ;`ǁJӿ-Zef?2jLD(躾Á[W aѸX䁷9x<3~G>U8rܙkw1js ]v"aǚ`{=pu>~a  h4}css:{sΝ[Gs%W,`fO,E"%WHĢ{2 !Ng=ǚFD"K/{g:Ò>V eattPm @$T*e_@Z&5vM~?o ىϵ˗/_ȝS%n[n(4jy(3o*z)CQֲc>2RbȲpi_֚9 SK}r|% .F>]vqiYZ#. #f\DOf_-w(z=`}lƃ%`,a.^&Gԡ!kU>^ [[[g#+n1v<vxxp511!crro~Q(/uٳΝ;;' 5qOaubbFFF}>`rrW\ PU`FEQmeaqqrXmO> >ãt|vvv099i[6~XeWP(PN $Ixdkr|LLLMoz"N:eذΝ;sV{ l3 $s痰ɤR%I$/س6?椣a BmjAh}L kϳMiŢMMZdY6B;Kn4 C[n[nZUU!x>.btaa;efd2d2icXSϞHz;W a dHaQnLj6YVvmY’.EQH$ {1y57z" IǃX,CҥKh6v׆^*^/+ ðt]dE<av[T*zvX XdHOlPt`,--BXK`Fk,Z!M7?99Fy>}z|ʕ+ƹsџzmp> QIUUʯ >.~cݣ$2+#wuU-lYjXcHf9ˬsYdz3,0100323 ؇-ɒ-KjUGTQY-`"#nf}pw 8w#8zOvxѹ,eY.fc4ԩcquxR<][[[/-//W91J@" + +=a~񳄐ax;4>$NN]v@Xdy=vt:r(%$i;Mm.b1/u0 ~^;¿ށebvvvb}}q8[,k Z7f30} ԧ>DX,^βrIٓP(osLe< h~4UUX L۠ +++K)ҾUCq${rzzfC9{ィj8{, ` pG8^._9<:6>D"d2(Tfc*r|#xQT| `ޙl xm`ffB({O>:2",1 ):u R 82?F\.UE^P{oy[ggg?$bnn|<677O<90@(.>L2H@T*%;9UUH)E,s9ew.677.zނ胱,Ȝ 뺟eӥRM&>aS6css ӡ7-7 e83=Ǒ|zA#$"aVXaM@&''}9==(oHDEgzm\zj7L~̌L&>dYn݌ +ۏ$o0bL&1ь@iưxX,F{o V|ݨSDS,E~iO([[xއ'N@$VVV/|v DãfYr<;gkC9q `ۅa4Ε+WCިfAQ0# +?$ckk SSS z 0'ěUUm{H$,R95H6FzUUQ(2۱`,HB6#"3D-`wxkrgVP|πW.D5 d:>L&+a%D,LV:Aem{H;NeZ ?P''x~˨jmW\AAѻ(8y$$Iµkl6cEXr#;1Ji;xi,MZ^L48tЇiE~(=܃+ >2 <㋋mu˴nQ}ȑw%I|`'I|d#MZ֊8H$'$DƍXZZyL&3rah@j5څ5&ra#%^Ƒ IDAT7pCnNC= +^MӠ:LJx"@1If}82EX =8E%KE$Iur9/Jl6_h4OZ`Tw2=""Ire0NN,..gu1>>˲}q:ru>;σ^NF@K{L&ܦo0Pn---,"/f27u'8 @uA ]3@̆'!cLJ otIhw`uEqsw+(X]]?Almmٳ0MsHp^Vq5xl6I4`9 v!۶QJ Y-˲Y,Kz8N,edA8v]^\.7͎Pd>/rllQ!f|Y9r,Z]z=J%BH$L&u166擔ޅ׎ )޵k׾| +vmd26hklؘ?@R^A(Ţ("+" ϣVa`wt:痖7FYh$#/@,rT*x<eAdpĉ̷!sd2!&6nK"t]`n_޾:vcmmdllD"eY&hީ)l~~z/ HCp}'<9EJEHym*ؽ v8qQ3򱶶&8xeQ#|<eyr@$ .o_֐>#yr9_d2iZ]ݫxApHhX4xe~ ,˰,  /:r~D2 ǁc$NMӄ'._\p烑[# +_dss+l6qub1$} qn'xx z3Гؘ 4Mc䇦R))LޝH$ǵZj.f.DE`\'#$x_ bQA#۩j>nN3qwŢbZo:<0G}TglFc~ǏܪS9R3OǙʕ+yٳg_T*̾(ByZ$IB> ^u zkو#;w<`Hd2izGpkpwF]ZZZ9Q,eFV;H$jHC](F>>.,hFP.|SZ؟x# +T &vwwQ,V% 8msu177`/1tPհ1L&&Ljz}ckk3RY,ˎmvW8+G)!;-Nx4QUG$q>cLO t`68G9DpBRԛeYΉ`quAT*(?{?je0Bk3`loo?kN_|СGjjJYɓ8{>R˃QBo>ڲ,t]=zi EDMq 9?Ğ?`bmm R{~qqq{~~"G" NXlQ]A zX~_O;v~pnnsss u魬x=zEQE"xHD{u2Nnnll855u(TE$۶m"I{STZUUOQvy4 RiWpD*2/X^ #!d2yfccd2FL@M#mXWZx8ԩS=vؘFpFN>7nH>Fpuh4vOFx0 `D)( #?{<~.ة`_#Q<ƨ_/Rj 4u1D"o?tr97$AUUAQҍ7~ad7qwn_m*oj0"ȯ]j5ի^z57iQI^VXaVX? ܏" z<ȉbj,k)= t2`ΎeaaZ vmIX.6771>>z'eYˍ:Qu]۶1 FxﱝkqRB,13=\vwwa=qQy#$"$l-Fdf_̒W$w.T j(,avwwt( ><_ēv'''),%[ 0??]Di_@>*lee=d[" $ 2\E"Pq2 .3̾nǭ8}monn"d*APβ,"H !"g ;Ƌ/vd3d29v{Wo`xQ$=݂.y!+ + (`Y j7,N34r@AeY$ 4MDQ#͢^͊HRhۨT*4 `Cx~]|j'<,rZ4hQaR7MBU!r}nQǨ pu,,,]z"[y>F|.cǎ B-WGeP;=zjJR)<am;ٳg__Nrwizzz>JH$2`$O!h4>fĚr9DQ lnn#A:j>8'|'c~iلyu![¢P(C8rP.ilI#"X T V v'SmVA$q__*\=yJ:G"!9j6x'nw<$%`A?__}݇D"^/˲a,錴桇;N\zvzި@=ض̛ ]l6jPՌ 5;efffD"ORY3¥z}-N{llM&<72+]S]QV~zmeem 'OhPpSlOUl,1\]]5VWWE;{s\$ǢX,池ˠ3yzXZZǴx1¾gYD"QL$si5ƍC&R<(MTUٿb=@J~}R.\xڵk›((u0#$aVXa& qh4WWe6eY~Ɔarvu72R&yyzz:5??XLE1^0 w{{[]]}:ϟ9sH* ,,H`bbB;;;u~h4+"DR `~~~(:\.]ױn pIl'ϣmAm$~*"NB𖷼[[[x"%`cW~߿e2 MbM>V񟙟d2r4uX׀^z+H(B%g<xO<}Y"|#?j>Gصcvӣ $'J/AO##VGH< + *a G0~xRs9@"s!Fl45$2^x+Ν{maa!ywD.LR 0Vw62̐%,cעxR}ob10 =T*xWJpwX,}{t]˗Z6DBؿ~T \\&!'*>#p[]4@_Wq*dwwbXu yU%m6/HwbuAt]ip+ʅ\.w*)I55{v:ܸqQfJ( &''|gL&nG^TT)7~2#b܃,aVg쳁}.vmwϲ,wKt]NϾ1`D' u4q? + z i$IL挦iQ~p!py77n{gr~~b1L& oˈHF6<,&LĵkאJރ%Rj5!G0`<9;ysbwTF#.T fs_E$z=FFDs`'Aoj&=.\x6g}udY~)LGQ/8Z?z7ގvH$)"y?l}mnn>=_TN q4</\.nJr4͆VU~3rimANѱU'~AO|\ 2"I%ѩy$U$ؚ mVGŊq~OyȴftdECe(r#G -//r`ɉdtHsY"("@"^@:ޜ>"'& /6F("rdY:qDX,P( N0 Zku2~i,˂PUR ReX5D:4M%bww裏~uG> |8!+ +X%⋯\n!e{mCE?ٚD^Uq04 ;< g7*^N^=1qF'Zο]X. FD5 mxG fܬ? 04Mg=BAC ߭w> 0AvW_4鴟:PuuZ-?xgJFf>,[O)g#W[[[ݯ|+Yz$7"ݯ(&aii L:A( MR  K0)\pŋWyL&=f$Iw9.E˲)D"쳏WZGPl7t[ծV/KGʕq;<$Aணk\UU^A~aaa៵Z-v^@l[(++xDZhf?Qs/ ']pۂ(F~q5DLAɨ7НнA!9v+ѽ7OZ"UU#c4N#Jakkrsl6:~n| %#S+<Μ9s8 ~É[ Vz"(pK7Y9((bRk5 + OD"H$h6hp] -uWxoT!r44t<4Md1[V,OATBE$ARS7mBIwns)and2P]uq9y+dlll6KU \Z_~X^^edw vp U*Bvt:UUL&l1dj=@D 鱵u.σeX5dzk?{4͡I<%]i\^T*i'?ɞ4Nd([;ls$¿PM95fi? mXaVXaNzNt]&Nn0Kd28i$N9Nh4>W/ @9ŃU2xje2f]$$'N:6hBv+nH$fZ v-"rjj^;ƒis˓ɠ/vM4ps}>Et#Ș$Ib^@@= [ <##A.QNv63 &4MqvU_4_̤nNͺdfgg}B˿=k88F3 TePyJ#ȞC3A%Wygb3'R }`3 +3^XxG,X,H-TUt|ffS>w=\YQ*`E>T*qT*s=?WZ]]]]mfȐ#}"@%R}X5{WS<2$ R 4qP{rXjv Z"^>ߤ~RԷgW +gd!Z.S6z|7_^ HӰ, lgTvk0.`x 8O`vAaJ)<X<a"k^h4Ffqљ+WH|IqP?ܣNif"(7EcT*Ȳ}t:+++d[; JFB*w[⏑X h]Cip2QJqPSבNxݱZַph`wA'@ ( ].)O}X%; w@mlre/HcjxuNHۍڶ z c=@X^^f((Q#o4MCDXu[~ x56r `D^{noD"rp BhmYVק%I.>~Z"ǯFH6HRG btA)A4 ^d(RUUi,hb1H$4L#G2Jvu]ٳg_~'l5wrρ:⠠RhwڈUDq^OٸL-MQ yԲ,\.G-BG27|銎9Wf2d2}Έ+ t=H4nܸ}ܹob_0xS&_A'@i 2Pg[7_GJ!C TʝLRõv|,5w? RHJ7C鞱ONEeE?Hcp@![=w# + +ﺤ\.'Kl{<< vndۙ;a;ŠĶmZbrz3"sBp:fIO==zpСO 37(l&b!I,b{zСz2GxKƭ[{MGӴ%_eE0.2T2,K?}*|w@NgY u{F_AE7Io;>O݈;Oo5/v!zAex]4(}AMr `rg{u}]CR$QzaB<E!$у={D<"L|iW*8/jF͠~$ Dd"q" JP?T% D?{rbwOv@ buF [/[C4;gn-}aZ͟xجjsa'$ +LMMunW<+yu D BXlhWcaexMe;jNHD"uY= ^b"D<J7 ZBQ(<Rqkpz6 P rT|ݟ}'Yݾ7>w^@$=)sAkF` 0\$, ~D$@Am& IHXa=џV)pE{c7:ߍExkkʪŒ&7l =b=ӆ 4뙦ކ9 {4fl `,ٲEK,UIUKeV"~Gčw#$&'eU|/ƍ{O ~B;897UTPՠN0åRn7-,,8TJzײ,xrl`.?Ƒm۳DqRha\ߟ1yLLDcA2NqLOO~6T?{Mqu<*}`p< )(qS;,C@2D2 D1?.PxqI2Mgz>ϧ㒗'ֽc:_C!|5oep9)ˮ\; Yt,D H2 ӇPc} 2X&m}>M]9s r aU'bItQ6ǔ%N3@Bu,AzS9w IDATu``Bqxй+(2PPL^$R]w|cs14z-Qk 򠵲32֋2!_Dln퇒- VNQ?sa8zTӶmYfIrjyjW1[ϖY,oZObT.?G&^/R0r ^׏)cEʫH^dbqszz!)_v]\`yk6SSSW:E.玲W'MVC%Pc$$zJ> CaHv\~ibww2flJ2 ?? iXIYiE'UОSH𦿗-  hZFB!Rʋ/'xrrz=z@}R!oVŋmۊnyt1^:a2B  S RF =-JYq`5DdVG=~ڷo6JDvqVn4FɜHȼR/I>?nx`L _sW@W"bƇ|Oѩpʧ]@MbVsЯA^5<</3P|`4 |zoЍU+]KWR*aRJMO^QeM}T* eX,X,rXm~nwC9<o0kZP`bss3mDQ:$+e!6TnUL_ 4](nyE,{'@LUҮ:MTOAN?0RQ,y8VUJypwwC,\b!%f}X[[xq#}#4ͩg}!ZfByJpǏOuVׯ_--(WH`0 y7o6[T8f(2uZv ~?0$VպaNEq*ۀb447V\.YU&gBUyKgWWWo$c a[*J_2 .|?!)~%J%y_δQ.OA7ʀ 9 ?(l`g f ۲K,C5TsA\TCq((! #1XZrCP9v7E <bg|"41 2/^L}N:p%P`J%zO? ^T&[>;#+5 .|ߏ+j+&''߾`v˲ZxV;R(UQzf>M۶ZeYv״ru1 8(z]6-oLyww5 vK>OEdW1aM\~]q΢^P(@y<, n鎏}c)He`%nV*fJ@"!Feꇰm*J8===[*XPcWTpW Ng[[[;ʮoPO0Ν;wu]ϲ,\v mcvvrrA败\EP&gVKA+WpZ5DC2=-i8?VTFy:`q|'> bssklv z^=zէ w?H@0Q Z-JPq!R`h 099YPTA(࡯k& PtJ܉Ln&]+|4 \|A Dĕn\,\.K>ԵMLLѣX]]^Z]RT`ǩ`0ޞWKt] ǀQ? dfX^˴`0r4/aW,,r$ f"`|SRdN #Y0`(N '{͌*s0\V`"&az?76ohI@e/6G8-{yWW?}}wXŸ90/m5K@c9h 0 ◝KbJ.wX9X],A;<7}_EyT333<;;%z|t](cKR RZ/~#r7׷w8 ܪ-6E(RzxGR5Ga-&5^n*/ JT;lfG"OBcrY Ѫy 1U,goIQ:9 q!PKRR Exψ 9jR`&OCKa9UxW*47}'J4`.@?t}6Wpn"0ش~r]?}ǯ'~Scp|":Tgj9s JdB.bmXC 0Mkp=J~KǷ(CX?w}2Nğ韦_]TR+eTP,Q*Ptp{o&iWDRZ={9O3{aRvv3Vwy?,..~BJyT*uKj̒p8Du h۴rW4j#~!R 2&s}}Oz.Ij:]jU ϲ•)4 kwDy?J5cSILfMǏ<ϓɋ]b(ZrRd|lnnn˗RJ)-˒=^___` a: fɀ0@VnN|HSwR㇑BXX`.,`FGya$-aiB2Xr|1ȄM4 BEq- ]glzӯ Zזăk`AqnI( mlsi^[C a&8f$Q%Ɵ*@ۛ= SDh 4Ec #c]d0k?= t{ p#@pyp@=:XQ?Vƿ'2i;~d^s۟vpLu! n8p=j ҍk]{ҡ4 o:Wc6#.Crx|@VWN"",,,nC:QzqG׾5,--XUFx<v155Oy&&''S+ 3 b:ApVannj6}+bDR`55yX,h6^)?av$/011^ciiIeaYXӽD -//SR fSX]]\M?WM(=buukkkKc* $Dd@,QPO8n62nܸNz,;:a`ԏ!DXŵ1])#"gMpSSA!P,QPJ뺑ǥ)%{tAkkkfsK_cPY73̛tf D`$`1ʊA6:4l{A<@2 Goōz$=(2 hX? an0Du5{72/@qx=? k9P'f`)QjaRA`$,ghLA@^Pq#>ǾH<^7` 0 nNuJV]d)QL0m8P aCa 211n;4PW  ȼGjۿx_w]0 DZ7ʵ{8f"f˸;ӀPƥvx'S@f3gΤE*VuzFN'LQ*ҀszS^Ǖ+Wp}@,DZz'8;UQN I/EGT*XZZJjH^,˂T*amm-qD>>֟|A]M?wPoM^KT<mox.VWWdg[gVsfRC%pbgC@!d՝O@ W9  CMu{FB!,Jщ'$%!Znܸ1xG~nc@H0t? K⠅U^cTIsE͚`Ĕ  ݘ;IvG'B12+` a&ds>nK&5уd'Ox?v.}LdIz7d zX^^^[o_zm|MGT@SBElnn}²,,..b}}J(T(#Gd&T^K%[(k̛`[519r)MU|t8v]mIQTeRdN)p%Hb IDAT+Ryφ`޳ .:rYuER:fff2V$tR_{x…rllN>RSjby+'''3+յzE1:1 \Dž[;g բ\ BGp،ͤٶW(d\ǏAVŦi"n?/ch@P!j1=u?sWe8&8(ueUFȁYC $w1iڧ6WϾg8 ύFqdzgoY(BFќ8~Z)(N{wIo{^Jf! ÎHHP>s_HyA`A8~0 Ea#9Ҙ5\ )3F x_yssD5b`HJu.R"j̠ tA8v~W&\)DBVqyG@m0Ѿl|}"J9Y l efϱa}d<8r +O~%>y>,A8t:T )8y4!TvSz:><[{ pZ}ҼT*^bmm ;;;V8vؾJJ%t:b7n21111@4͔ef0??cǎ+ FQ4իA0==pB(lڎERF )*d[ اgf_){5̠ŋe\kzpɼJ+Q̌AƞaZ(00$ɥ0tYlXWH eZ6rtQn%3mAVVVVOK=ЫO '}I"ܷ;S-0$rL;ep>$,M3t@5e"@F`, |ئ7_+gBm5OdتU;$3?? o{ofL9O#Dfs2 b I犯Y'ؓNHlސL'O}h^LFĂ O=C]a^{=uׇg][$ w X*\#(`lobh|HPx z}t]<)뮻KAWjEcrr2G^*~,洳#?]Tuyrrp8YT*)08ۢ\upg5vvvr0jdVC9h!QѵȟqD^"Gyٳg_755uVTU uLSnoh~j3 .ڹ4~ m&1%ݰ9.3q&0K a #g4 b۶P(p$^g>s7cd?Y|7",1q:q čAІFe#3=FRNvUJZNd؅b,#`CXB-od8/!a@=p2D ī]ʙwVgka8< 4 Bd!4brٛa.d򝜖(mmYAHӤC(H qy@ DuWKc(s%c;\ikyH%yU0 ~*"Iׂ@,SQ)Pd8y5iS9 麛!r D:6J{ KT!(U2Ua0L9p*ْf4*2'͞Tr3_&~$@[Ik=02 ($Rn" vx@l#Gl6`pqRڕ˸tz^jئ:ьƕG}wyrvvZmT*E:4M\~kkkxGqmٳЇ>gy׮]c=~VDTXVSG":m!?q01Qt}̤Փ<ɻ)\"R*n[e' ۶ zfڵkH3Fq/ jX UG0 QVn~G]._vQ~9xqUG|T*z뭯j2E mt:;{]oMm2mwlF:2dd⏡lzPm}DBbBVzբg}/b$W`^}'{NXC S8T|O谗Ph?M(v$SeSc8xAŠ{ 8LoV˟˰˷@[u$p4p''2_~ٻ@7d9p+ lS̔ M q?C0p  ծ\]oFv,b*g@X6ô]pAV1,9.(Y9r]d?3$c@vnvߦƘ1 X9 `ܷw8 &8e䥀-e-GL92Si,,+055Id`"]%Ω~ `HPܓG*n F{|ӛ-CoÄ?1 VL؈EɹQrblGQYWR'ZRVJ5ioA/~WX)X:>6&&&2KKKh4X]]M=t^-3n~xΝYT* <(@!y\pZ wun}ݩV^,3U|cx&ƚ,zAp8O<ӧOcyy@fN4`I{@r =J6E42 ἷ,--^7`fJPx̶m\ P& c ?~:jUp灑)X[[ٳgSA>5(5Na#!s!G*[(SNU/ٵZ-Rj,,,GI8@;N(@wj{Ɨ= p"B8jq]nG$cJm @Z^/C[xNF"S0XKk+Nmd% i%M!=2Tr̐[KаBf_a80m]e`J 20]a2`DS_ v=Wp];^_fC. !!ejm Y9n ~a+>пpoLT+8 _d›QxPsCLwq7${9AR R|D[8+'Zp3zBƉ$TSUR4]/dTR0M(jA1 yd| =e@\;!#`U9Ӯ{$  ?iYn'#>j tZ9Ry}I%~8]JG=8Iz"#ȔTeI z6t077"˗qq4T}n^(1R,//G˿_\_911Q,Rª*0>oO+_J,.._*8NZt*XEN u*Txꩧpҥ4;3T*Mozq  L R0255vej5;v }{z:.'Uߓ[[[o,6>߸qW~ Ro5J^8YP0=c0(JBEoxzJJ)ʛoGgff^===V*xe_w܁~xs UͅVOz@zmmEfOSD,0l(n;p_vrOUq'xa8̏ *@@,.8 ,ɳ%cB{=Y@݀٘KGA\mmJRE~׿toQ|kן_=aC `" `$?t~Xv?45dƏPrdO灣!dș^4éŇ XtkB2ipG#[Ҳ@lM@#\ȭ6^}$}?7WD4 FC$XBcJ317lg/t* i== `3(>z@Me\b/J&_GYtjpاNT(,G e"WJ>;)9=_EJf4qM'< Z) Wu:NEבUՉ0 Qm듾ﻺj~衇|r{py|3GPRJGRn|_իWi`O4z=<#q5ϣu]!j!*qmPArAȑ#ٹuccS7TqZ뾳^Rnj) jez 7nȀp= `t#l^7NG@[njsǎZGj3ut]'8Л>7WGh@Ϳi^%Ծ'ڋG8}*XS $Ryk fx_W?qw9AHz3l9ߝFz k#D7kl"EXzh\E )ۻP-E)'CV/ nǀ <`XegS?Аdl:""D τdiͧo_-i~͛kkQ{4Klz(!h0'{f4q*>/CtWf2 ۾- I7.# *&9s ! :R4 07~}/J% AH{ob} L*-t+0We @e w ۈ:ۈ.F%R>i>״νo!O\`~!Ë{?}hU`[̍T&B{NX$~T@sd͗Q&310vQө\c7Tm+Gl$e ɪLȐ$I:[_U5T[+`_;0Q #ȩ~iS`H?Hb9N xi_Vرc1{wFnKKK?ӬE`|'O6#G^=#=PTU~X]]MG]J mݟ!/UɊ~60*%}ĉx[ނV~|3N+#zj~VF(BNi]z=.+\VE^{Z]~r\/y\( D먮˲,?z+VVV^5 Z a@vffnN;;;hZۃyw/CU>Ę ucǎSNJSѣGA n^'qTԔYThY4 h6]ݢl~?Ea fuv^^csqyg0 @P7J+ҕ0H0tMx*v6 R0BtVїɆUzDШ)!coIj2g!N( vOUcRwFn\Fu5Ya:4n{`0caÛ8ALB1jf~sW#fnʝsS@؍.2p] 6.b*THSoe=NYՊp,a>G_&Q 2(FAH "R%" (i`  &,IMA֎ߺUH9T70cſҢH{ -~MM{RR@zz(_lFgy?d`=Dh xgg0l?TpF \cZF~5O> Ψ[yȨG;D f ̴ZCBwVAOfHbeX*"ٲ2^BT2<9xø[>2?g" fwvv(Dc QmJ'||8AJ) :ͩl"NT^Q!vvvt%+󰳳qƾ_v5屡*.A`{{W\c=<zիp-\.T5i\5{+3bJj`zjRRT@Tt8'O*uRT*X,T**\;v zzj ~/eafff5xuLOO}jv:NZF4_ЩTuͦ`~-gΜ92==-jʇ1T}LJURxV5)v3P/O+sOXƩJֳEEx3Cn&;6_*uma]Bo pgړ&j!ks)J$~<9J1$NrFa/իAn iZ*r4 ضyzYtp!amm fJEIhT*^"P2 t: `]Jo:r#&2qdR= *Wqr0}Ӄ -jvK7 <Þ;]{`I@DHT"-)vY%ʼn]Dme'.+dKA;0l=={ݗ}o~s"#cNUOrﳴVP;JIWS'PNGobʟ! CNS$ L ~:'ҧ=]K:r"P]xA @qg~҆j1s! Ź(!Fo2fMQa-h\b n E)0b{lXxt*Ft1餉rApjVE`T`,HF!a8D7$& Vuc ]YUݷntjˏy9&H@tش-J^vGJVG 06 I0"DAHET?>u'?Һ+QC@׻jTȆ1BSzXy,z)waqKs|"dǴl3FVdko@3ͯ:}R40ڗ"yph l(y\tǩf0eAXaj F)L8BGM>QXߖA|<U^"s>F.[iXi$1=$|#ʜw0P+ρ`x,<VWsG6gTt2fi{c"ݾG&`JKYV>ƕo@F~Ԍ_.xk[!?@̏ө0 )'Ǟ'oeAU sx?zb?{׼Ggj$lm`hO--6/ٌvEa?AԊ)MlX y B{yL-dcN B[x"!W9D~ XA.d w_Q.8[Dj5D xzk@a838d)ox?V#F1!&k6.w7 PQ ?JEzp}hC=.fZip @&y8`NnrE4MۻIu3TvaY".X71==zJVt=\l6 .|}eee?'۷TTRT)]R~//<<6VWWDŴq'Б`>}/_FR{#y'?Oc߾}xކ'xٳh4}6h߾}߹F㻻Z*kcmWr9y;Ir5a~O} f9`6*Jf4"%]=>dVaHq.sːe֩w004]͢$GQw (a"$\2*CCI)E$s""F5fVgڵOTQD+[sWRQOf.eΰ9qxk]M=bz FC a I&6N " ]8R\{FD#h߄p܊]J+\}XxH(c0'QH=RE=Ӕ=#2) TO|Y3[Fu8 )X#=ʱid=0Q{D2Yž[/Y,M0 (m28}(3le=)Q.T۸pЊOM)='0AG,C|/Jz`,ogF h~Qk- [03{F+W[+O0HX٩q0KD~{7@ıRF;2h_D DQ!e_ۙI^x @3 7Rp Dȇoæ+0Yx SG.!-p͗E9{g &F]z.|D TRiXTΰ.'x??7oӟt-D:$'%a}o xtJz!")Lz1;k+vOACA@.|Ǒ#Gpض fN>EQAbcc0s޷@V#"ta5y'a6RJt]|sùs2u {m.1 $Տ ZAFõkx1 >{9loo'F|"Z ϡ^T*e>7vp;~j5soN Cؘޏ.IT#1`3`AAЇig[0"a ]'%,jlDaW"hMN+X²K|+kgv8f8o`dc5!7A_eBs *sFOAk] `2_Q!=u7ܩx~kc?ˬS [ebؿK@\IiD$#2{ymƀHBJ?9ӍHp3@+ػ:`m vWF&"}~ubĻ@{UV w;CFg}905Ø2輆y G@$Ŵ%\JKKK`flmmhL #"evuaIQx},// ?ttv(zvmmB;u0 3*Huʕ)MUTR=&ߟ,EϺqvww133-E"k!sxÇVBX6\~=99t?:RNf\t\^|>,6+uڙ^/ee]\v /p)<ØױWnOLW`qt]+'$*WB-k7T@\A&a2G 4 E;^(L4Y/IM>ZW;$ٚ-*|~O['FQ7xJhx [GaMiuLTNzz1 "D{] :YApiD ^&$ f)):gGͫKM=dwr8 X#EsdmÙ :_ [4(d(hkoaнg@БDg9J&nȨ@opgA.0Co-^875`-?.V_#,V`aI$!2;v6л;~Jp$8#< L.|OZgTƵwb 2oƧ>)&v?>O]zWjAr56'$I #>y"+F>5*sCu;N/Eg=Jjt~=t{@GF@W={ٳg-,,|\.'N9;=|2.]ׯ멧[+^wG]u`V.SzXN{b\Ma֭[X__O)Lsssx;ށa_N#zKX[[L?&M5tjRy07I:}YLMMazzz S+^id! SK%|g`ZrF9l\Cc"(8 @Lo"Xǁo`b޺C+'n{$%w1 #ҹ*ݡeF2~ tҙK#- ־;opCV pb` @9b@*Ӏ3ʓC8Jʚ;W&Qmx01dR t౗|$! 7d"q ih:"mXɠ t iNR݅#R4+ױs]e UQFي?52G&G8񄵫pKim堺-h\8ôa~BX/`;@~]z/ȀQ,CfU<ƙ h&z'5@(n$rӻ 9Ꟑn#qx`y+av/r:i8U鵟aFr=)`*ٕOBhlmaqj98!K ٹ'4F   a~ *L6,CH>a/n6b^:M䣭G{^].iLgtwwb' J^| -n}/~:~9rz׻PT`'|[[[i -Z4OU41:FuʶmLOO#XBll[Z5}ƍ6 }\'&]`lnnիW{VYsssV*wbz׻P.o}+" ^<{|c=z=+M' Ͱ~d 0wRSx۷oZSÇV *42+lai:7kn''s. =WMk!NȆU ;p43Y P. Sp ux©-GB@$T#i;qNtwi"F~:8ѩ×mU9kwf&.{uB,, bŨ*Q@93`诙$2g/#gl35p%kn8$Z7)62\ IdhwHE{tWg&8,eeTPD?"ko"c zL 5aN:iN|6͍Fq"iJ6gFIV ,u)dSQV|cN`fDi0*=Ř(̟sogۃNg}fmfVCm&mw8l m$ׂv^hpS;U/?=߼Y94q,04 ,JpxIzaC. cn8"Q 6.v0IcrULنއ1 2O:`e`9j*@Upp* 2JHqqɳE{\Aj4ڹIwZ]g weeeСCC㰢.ׁ1&yo~D4a6wR /~WF(WqPl6jVvS}3333R mJW"{j6˗/^p"&"i+'NxѣGOj1 ;Q À8C==pϟ˗өJ>D*ԉmC]檸z>nwYYOzl A QߏP6sHC"^FkJ"(o"0" â~0BGr3"S4mkm]$a@;HM'L*LZɤ'%%5vcQ;E9N+$`c9Ӹ%FS1 o]$,@  YJ' "od? #C^)hP! ⠧&Ud`iChVЏo&QkNTN(0)xX2d`%`,膉#p0 Ȁ{ZT`)D$N2g.E]KɆY:U, +X$UTS|hI52Rb8wzπa@d9y?N T7[O~t L .# !Umxʇg3cYsX/ѯAG2e~2&U sS7;U%aE`"K2 yqeQعvo,  gXT8-9I2m^ IDATp2dI|} v[oO>%4h\. " kwHB qtiHyM zaoj4lMyܰ4M,b]< eؔ~b䷮MF~:aq]dex~T*=lY;Γr"w80 t]\~i^cT*xߟReo|V+!wJ(ovBjԶI/X\\L>Y[[[3' 8y<0T)"K2^/>|xRt:i3:Զz= ( 3c~~[[[ 灙U=W*=O:5SVv]W !Rwy{{כ^S+˲jKKK}6ommX,²,bjj*#B}Gí[.=f'F?\$H07JY9~e,?i*JJ_\Nu baX1$D%1 }Wl ! "4M_HA pZI(&.\ =D녞k8ւ.RL8)(5G)Z` |G Z!S&ǃs3ɄH-SԲs$)Gq-eQ ,13-إ{GH omێ;b͌QG*U~ )"j`e$ 2RZ0 K;ƜI1)(0k2b6ȃ'%.at.* 0j`Ή)8X_9 ~J#*uTDv0͚!$a†={eH aW3~}y"yv#H 15`0S͙6{Fs[w=UJ ?"4NL;*0ߥg[?t9nOsWYti#5.~kE4ge@G,eBJ`2v{" &qNy0Uٰr}kDͬ ҂QTP; 1PUdоFx,o\"Ean`YG.tXF8,# :7r6ow].o@H[[[aY/ +U(_^phwwmeYx ) ᩧ88x {1|CpU4 \x1 Sq S*^A}eض6N~U!rSŢ(AM{s> [R*5qZ4*y^{Ln&籶:y) qL۶*,CVjx{{FE;z:N:YfZBy7mlllX,Ӛ;Y*#yP/R h6NC'qTC.vwwaYV_fc@kkW7go֛rn& L,%—CUuJ!ھo^UF4P합0lMGmL!1` !&첰+pwU)_#b4<ʕi=5JVSzXԬ@ǻX;g2 kW ~c |o8CcDU ؊} ;cT0&'8afqQ."Á`F<2& 3Nҿ {{kUA4XDmaVL>X mhBԄ`0|T* y̢Q9a \9'8(gAg2K?o4tUR]jr:QM 1e涳MZtݖ[N]_O?t >*$֩.v^di˦iɓKI;(pe\za4}ȑ#xQi8tj^^@)U*QUƣ((&6z!R&dfpLK Xzp]7EQP(<]RXK}LOOc8ª؀z=̬lhÇSEѡ0 iT[qt:W?Pס]۷o#"߿Z--u~R)ꥀ2}Qt]yJSn7ICQ *L.]YSWO"&bBH‚;H@ áׄԪcmwwpƷRkU4B5izJfwD&y Ok R4r U}7"oo'ΓD?hGp eZp c-,Lц",h21Bcgҩz:w v/hDd}x%>NL7aqlpdFw^p w!> <Oji>& B|>C6,,PJa: $]ww]ƥ1Q%j"9DkQ!β#~7wK@,"_ f%Jd \̌6E~dA2"f5') NLT:M2g.( MS"`6`ֳ0|qc|EJ AӍإZ|ل ~?D⿱ ?aoų,{i^uO4ijDb:i ;}yi%") ޭk`:揽l 1swh1s`eӚ1ܹR@Z># BQ@#&5w.ߓ@K/]R+9#SiáH8_~F_qӧOuqjzzz.)Z ^ !yX]]j&ibffy{pYe]"ض4e\}򡃐#G EZJ#8Rn:m)رcX׬Q: P+W !ߏD1& 7 cZ']assavʊ^5 pMT*8p "kɉ?y,)8n?|Y,1;;jB~STJ9aMǾ\.Yg}a$/>g#K 7^Nu#wHDʚr'9wU5e}Dw*%Q)~4o$UF4F@,˵˄LI"Bf#5Ogz ==FޞӦdXNz"Ƈ!'~O$,aS 6-H! KѪԧQ  80$, 2]nS~[0 X,xX!M/C>?6BԱi>AT4.Ѹj.H#af.LN20- {PV&d2]1*@Mf:9M 9@\z(>.wE ~gΜ(X< eQ_v3=> b!ӧO_XX8ŤU4)177Bg3k~1 N'!:]Hun:trNzƜT1R.]Ju=l˗1 $5? C󼴘ÇQ(2ӂrv3gGI%h&Wr^y036"n߾k׮@¶m<L[n _B :U-|Mבh4˿܄xgw[m>?(j(gQLCNZ IM, `oDA\TpeEmD°dŰQ}<.VȈÙ=<#a8epoRtx DzIo\+*[tmNy2kwIw!4{I0]Byn^ E{Ȯ,\•o> (:?8>l,_Gڇ5;m$]rwEۍR0[ F!o\GHL[ fA^z%NW(DZ=655u:.SCX8X[[?yd<#͡P(`ss3 9o&g>ש@sssT*$|@"z>SZ?^V+딦I | ilB|0ѧ/2˖v&heY8p@ dUW 7~yii /}Kvv8u,d9jba02 BeRȱhh[{+O2 3M#m;r'r'm;m۟F.vK9Zgy94;>`6^M-&f8Y>>[agEj W k<˕,׌g,I]fQA@f<61ΜGE$CPI&@a:r)r@3TԍZ NDu9mˠ{1Mˬa&8wpVG:q8((u&dy ϥs8vsԜ|P[`h'?C o_Ci(0r3V:U2"{=I&>rZ7`}@ , ۰˥4&:q$OaJ|rb:J/qQnʦ'sֆWZK-jN  Ā 1D |X^‚=!p$cM 61-TO_ D}ߌw' =-6JSB *`[Ѹ3ŶNqp ZSR;dH-\yRI>[%-JM2Z΀>zvvv033۶S-n8|pN @ĝ@?8<σ뺨T*hZy&vvvvyD')5i6xW1;;Z{~h8ڵk0M3uBw4P۔ϟ:>rQaqqqLpQ.]VP_8 -'ƓDY~W? M4ȶquq4ͰVn셳B(\şI%XG)4o>N{=@kʿA36L( @|ho\@CiY~>tQCWo~ ^[z}!/%;NZ(`=]B Uj3g̨T*V>I3ynF?z(BoNP{}N$Tp*fopA&"Xҟ2RW0ސJ>{ԶZ N>V 58}:~k݊' ˘j5HYY}(g a:ΒMhS7Dg2+ !P?n?p3z|1[Au1 mgEU.!d?{n&,f/{+prO4J +lkV׼ P焹I]ֳ<f]x IDAT4训 :r -0Я=h[8Uf o~ D/;z+HKN*@BĚ 4V_Bw)0) a@2\H34}?{$ aX)shH\5t^GW@d O Fi de|0o3 2`X[g)uTd:I.9RP80'/'Jfqv{RׄƧj^OE_Ȟ~4Fu k:Bto>]9Z}_/T5M6*KGAQ"x:䦒ٜ5@[3c9ĎǣHBUF&~V"P p`p2HH?Lۻx M&|ѣ |mGa{7Is`+ fNeYxUAkS@/&AVlmWJBnt9!& ㍽}u@hY_V۶N;n.-0nܸߺu뛇~^Jyݿ GZX:r{{R7o`doo;;;n͑n-D CSNvJ%e Ӥ(8* R0 SqtvQVQya!D3:+"41{]x0`60lsӁ1j3b}Ə̣VƜJ@ErI/b{v5-!D>0νa +Y# e"HCԞ 1{ svw9ǂůjۺШ,g@0>ȇ5wd;iBw531{ܾ+D"ri ^jKG~os4arḰ%za:G7gpa,+ݗ^]lMмhmy2l`5g k2-Hzu^&F^ :rSv@&wr!a$XSQJzH)X^&j& a UP)R~eñdP76upc[^ 4j9>4)kghLTR2w{kD,L=!2hϯO~Ifz7AkmPRZxF?9OQʽ# u7vV@ 0qS?k0H,4 +Q 92 eRܦ<ش!'AlX/&[1\$hHUA(ME(v)[i&E:(OX̀~ fiھU= G%͚dVQY:g 80wso+_5DlW@& Ъ cBG'WhE؃ zXU5 е[y9sǏjU ׭xwޓ-fJ]___O? 0P,bz333xWKwEE""8p C Wtr'=$0kQ I)Z,lq ":CM>Ժ3iu%x[F.W$@ྉHJ,Q%/ixv{,{F݋n5mY"%S$H) ؁Bk}o~Ē_DF@9y*Q̌wﻗeYlKY!P,DX+Du?t0e"n`¦PslB;ϢIп/ xf9LrӨ6q3̀=qρ B^3f6_䦦4~ 0H\}V2&o c$'0X8+]fTFn( q{̈́%U2kG_ ;R  [+l m X>CQZelq0`,]ZhQDKs\ Hv%~a=Dg`h^<<,qh\B+,ނt['XK W[+( 3o :&"6w! ;5{ݞĈs^K?]m*wu\l3[7Ah(,3ST zLH3c| >5o@W]]ya= &:E;+$(\L2"Q:/,fe2\"YYz9^Mz?pѠO  XB*(| #CPHl*L*Ro]TNiKjV 0tp r@%#Any^<{ kB0~`¼SQ;ƥc"ЭѬɧgEskkh$/2@$!@Ltt]=x/jm2.FUyNPDxTۗs{$D/o)*f @ tssB7o %:947OTA< a HAv[p\}2pABD2^YOd;a w ].4n={5^lU`wwt"ksQ[Iug+$CU0~"2 Эr9|u:I Yz+6ԕ틷0 *ehѵ´Q =Jb+/8gT&o@k+ad kwN/eU$aa6 rIrl-2Ѿ UVua~hӆ^I|+NDu(8F%=T9 =o"㒺mpZ2q4@baA#"\xikYm=5aV%8+ _tw.e5I&>zA/As_K$=fm;KDhTuzB#dSk)\Ma;0(l ҆y3;;{`bb=bu݈AqhsssϜ;w~yGx6*EhϜ9w'N, iZ0;;ZK0 +ȺBů[v]lllCلm)60 ƞ={/ǎpo]ױk.?>T1p=?VVVpexbHԬA=4;F ۫21$"*6778u]4MTUJUzU]122)%V77ͮ_òL*l@dk+C( H$bJҔDL%\$Mq(^Gkzm q<Ҙg-(v?OH!0JhPɰ3-D^,ȠJLiR%5}`W1j5#5y HwVn~( GI@@gu,%0w@lf V3lC]'Z뿒0݇tza D1ǐN=ѝh=~ ,q2 ]nSu.3p| ݄fai e=pansgMM$,׉ v'C7Kƽ >wSG I 0k'B ntXښ0x'9h$tk7 Ps[&t~CUR"*z؞vPr\fI*Qyp }FU&uM .½@PgBɕT!%@:Q|ej4 ޸`NlRF KwԨ @:KYsA څ0yh$SC.ci~ŧu`A3?+Ko3/H|vN Hr q1/ٳgn]5)p]6._xчKAX6nӧO_\XXS.ܹsE){@4 b#TU*Skְw^xח|,l:t(IZ9,--@\. `jhZvp]7Đ zw=ogϞE\N,CBDI2 [m;sa|Ͷ_?Pi%zL{dU),T]"CLjʔOS(_)Aqidk fu+' ';y9> czʻ<*ćI3wfH \^',"-0K$f݂UJ]`tk*Ӛ'] E)rgڋG~ϬQ} M 4Hҏ~40Y:,U6_~k-yTa֜_" *aARXew(tHHH4}׸'ya11!ԻM:UuIpr34~OcU~+P֯ i{$AwNXY/A'4@zV$j#-3Lŕ+c]{nˮy[_"q Y~Rd1B<=xOC=q[O**#|@k`+ Wrm羠bה/?~Ѱz9yBAj>DƟm{ҶmC s[cǾD)>ӅOCqLI)~0ٶ MmQngx =z43nr9%uZXX& y@!8uT2b6*n qxDMϲ'5!J!r>Ca'(`Kθ}lqBYQ{=AG52hPr~3>̡DVe0㑞P1Ʈ+ 4/=hM5Pck Pzخ0<ŠlݰRSO`xgǝUǮQ0O3ű)QȎ5)6eYFy/<:Dn }X/No/l!.sh< b ?r({ּl7|#s*Rөf"{2Boт ÃaA? .cc!% d;[XM,: iF=v@4/{[?aB]zuF?5@]_tv-;=Ǭ,&$"D/766įGRU lIxkkܳ>:4Q,m4dfݻ1??u--n\WbK[u6#;'=~0MBp]o=xo|Ri[Y@`6뮄Ξ=bc[.|奺ՐՎwKW:+^394 T牒{@1V@N=8&pPPRŸuCжȜPE6zF DJս`A)`Ezһ/Nc etj\$>GpT_M'֗m/DwCinkA~w;%Z90Q)})Xe-B2uOb蟆z(Ot)ka6Y< >F(k:8:IDI7ƮRUuyN#~|d9: t0sW96Mt/ƚnc"dBSGx|3(KO䃄~my IDAT鬞=xO8 ` 0H g(a໱_0FŪ1 V5A?'שe൶`T)7ܵ{NU}f2:F& h4-Yh.^r``j:f~.*ŢaRAtOò63 e3;y. ϝ W\oܱu?Gе"B3ahoblX=wu[a+ǾSȫ`BƎ^550A*Z61թEΉltT6eK /ʳr@?ywڶg]EH)1:: q`Y& 7$00pWS$??;&C=TರЗoQTh4pi4\w,%ٞT6z* }epIU|k{40󁋚yv7}9tD2 ~TzDWLtVD>߱E.>ܨoG࣐R+Tf _"pR4/]SoWyieDC llʮ녣0!]]{.Shc.kx7J-ԟggQLk,DE}8l Y ñmURKlHaxX_ $fy{g3Otf 8$ʡ z.aY} FkI+T/_)Q:uԈ4VmfYh#p+32XzCS#K rJ=5%Yz ~5r8k'+`[Clx,@P'0ؤ5s8oe oH&U{-p {\7d7^S|; H&sP*2m =P ,=!H xםR飺j:ʣbqurwR !077Vۗ:fAŋ!z6 3222WE+49<`qq`aa!ٶ,Կ3* VVVUv[+ǿKؒ@Fr;hêT P嬩}F*.Ia_W`p@O!w[6f'Qe"&0QQI2"\ߕ9vp =,1z%654bf@SmZʓ~&X֣1"qJz ,=4:x`tD4M0 dE/B-fy^{. 4KgD^01 \ / y2|2ұOc}0O ^pPA @B20f,֔sS1M yq8X}`>/aBҪTiu:ρ0Jw'܏Ġy| @D2rRd dAeSìJ^('K4=qUKI|l\z<|2pxqU.6X@TGԂm;(<F]g:qh뽻B"CЄ?Vnk` zvkbhoZdIe)TQBmF,|2du?Ri][t-0 e#\7dous:r^Wc``^w3VU)H61 Zud3,EQx- XFD`:un9)e!.U(DIŋ]__022}%&a`ǎxb*W0dEZXXXz'U bl n(x㍇FGG(6BӴh.Ռ)%Zrgy>,<4Z\M UnrrV+͆/Ʋ3Ebjvt ;R3-"'] (:.*HLsd_Yyjj$`lf]P"ދx5td %.nq v[Vۑe'eL* s]K5fΔa:F_@Y.^s `I2βyN7?Mkz]^渢 LB4AʈEe|Jfs_]? 3]PGR$oEy)8BW҇!kxv87a#>9~ DkE }EP^WmpoSeQgX;U>cyג>fP(Me5NUc D}(:4#l>Kn^D+8LD_C(T1F$kaQ T#`hh @ 4Ӏ&1v.YD# IW&S)̜ HQ` k. t•϶`/z^]Ǽɡ5.>銳bٙzW t:^z~u:VK-!ЫUA }73 yy$m yS*8"m+%xΝM]vRVm'`A ӧpª봴tA1%ajj Ν8Iq&z_z/K+Hϻ$uݔ婧z7uuMj:4MpT~8y$\Uc>JRb_\ږڛde lDIsM\{a$1%S0Q&ZN pжs;z$ ITQ5^tc'Ilj, /[$*sYyW9@D] Dɻ{x(M ܔ:Z+$tw­χ9Rd f wQ#ps" *Jr4ӄ'A, 78TS4z#ALA3||ƅQX݉~-1tVOXz`-iF{D]I[rX0wc$YtJ;q(iΩ'cmaV9 !6T_Hh܄t υ6 ){9筏'KK0}oV+ |~PGz+SzfT/|)؆,:(~ wBs*bLtrtJ+s^ m8ߩZ"(@ @4{c s09;ǹfx Mc aR0}T9*PLœÉLg<ܨMA?4jR%/r`vKj62VP^v&D^E7#p_'2u]RJ99 4 q11jG `ssvj۳D }CGy;w\.ۺh$RJw̒FxuuO<Ν;߿wR1,RCCCXXXH njH@ Sp=]; #R= Vҁcwɒ1 0Nm"s F$@t )bPX+5=bYRœ*.X=fcЌ0Qk-E,2 ^¼^P8*"TWE᜖ği#Zq!slf؏qy5 u#%0h;'܂7I&3 c &'ћ~$e -rD{OƑQzۥ7D~ {GI"I_1j>U33,hr-,rF 8U0ޜOY]8Hd phEu`T*h2V1屽h /l4Gy^΂;<} H_ġw}l3P=}峐CֽFuzguCKY?{? P`q>fו8%}KJeI3SJܸ'? &(D2l&0+$%,3 ] adYJ7,6^*w5`8gώϕIdJFȜuPtʠ=tKiVv|(3L9e}0z]QQt^A4]6N3lM$30M J(71 NDiuVZahP*&⨠M#5cmb`@o[Á,QA[~M|gofM$)[V¦nh4kqUW ~y9Ղ|߼ouR%~~^u2Q$o:tkPD$|F#8})I^v iYuɓO8pq;MӬj*PA }_?v۱\MJISݞ_Tdȸ%gU JYP H316nEv"3~"mK~'_3(;ӮASY}~4є"wgәԭٯ',M5;WWf, Fi\@4ZdIJהM^4'^yJ)dF6P# K#Ee9Ÿ)o)}6ҖzV:F^,i'^xԩz!ɼ#:d*!i H`÷n3XJCir~~Ri Nk VX%:QAY%кDﬠN 3:vB9i[0E"38 y" ݕSp+(TzÑ û_s@(g~o;ǝ'QuݮΆh@:NEvű}ЄJ,Nsճ(CvM6.DNͮt{IDX=w=$t !(?IB%4W_B7A8r3qC:/d{?4ZFV9 qESwL1@^x|YJ8$.?}80$ n-<4sQRrtȁ!|p !SHkAa]hp]kk2[bQlk*1P00=MTBƶCJ7?!0Lj:<=tʹ5Qek >l*!|C_IP~8< \bj[g>Z"(/GJHd XRQ̯qq=aTW+E$]NE g.LR2]QH  3趖6!pσe97|RA,#FC7(_bBʬA/yt;`Nj53Ǭ?H ss؍;җ`3, g2*ؒYꨀ dLB)z CVI/x[$p8)DOi<*H`lp|gO+|`YE3GBD.`P(BQσ!0sR4+9NۼZKC$LI慧0vBӭ@m=R'Q(Ӯ^腊"I|N2R0#Р$rqOAv&R}u( rͽzQGkn8_bOtԁq]?5n ՈěABF*֗$Qu# i;nw#hnLR-(`,sQsЈ; [fMBΡtRz Dat'U[_4F NZZu2C;Sߚd>־1&F5.x:? 4~+v v-^'3'eKN?;D1t/< #[j1R.VPq3 X< d!HNJ3|= s>W+@ pl,-a)ts X O"R#4!H{/m1> !aobÁp@S9 Z{Ε=8P}E}y,ISTg@H@ٔW r$RQn:e ٠F!ePƉ3HS]wHS#sY>Ϲٱcplp]VO>V30_o6 f ._6 [5 nYtkCU!j?8U/Ez4>sD03$HH0]8vY0t2ZXJ,=yc`^_+TS(cl&8s`Ww!M˶E{0n~\ 0ܽOEo_YvÀ r655"0^TIRpt*S!XDzN_o!m,A,Ay^﷗Vo 1zG>!zb8B~L Pwk5p!C u4Uq&cր ̀94 <)F 0dbeHff;L IDAT8%֟8Xz\3!4::Eg!u\Qd(c2fM ǣ=*2X룷 -d 1<{'DϹWW U,+7| ~s RxB췑fMh&7{psO?.bq<Ao` aAͳGҋf{du.đ^ae n.'s2" )ݍ{uG 8CJE.940X m "˜(IfoM?fcdmx־Li\L=<`|tOUeBʑ#Σ .ͬ8Z~o~vTM l+e^8DR5[WfOb)CG ^Lj{^frXuǏ]w4[,xqVsȑFiu02\,Swڣ:i]g B)X!hV 2*28S~R:e0HE:6"Ɂ>!iD ?R@BH3 c pp:.,& T'C)z'Ah>(kFeu;K}c7ح 0Xu+n#!JAJ8P DZ-6b:z0^2thXfiw! eBMNfx!o$a,̡D'4<0Jm, ~1>fPۍBm4,(c=Q*#qAS)q1aFКnABK;B@Bf V4'QS^1$$zI.`kD* Qqp>ۣ a0o|p6jN JO\;X$ڛpW0!p.IyR/͐0&h/走*#>;=) tûѿgȋ~ Dx3=?s9ݓˇ[ҎbGB{4}'`aAX-2):!,QTfXqdRB"4`3b 6k51h>kC߀B)Hי4H JWd  B3@ ,A)H3B3Z{o9['?Y9XLsSUalB":rOxȌ>M h;npen:{O˩C?];Y9#M B#Du<4"G% 0*uJ7'1<τ?g3 cU ZՕX /8SKd uBeeeF~W#UK7+ t-̛#eP 4`yY!! V7b^V O'4]t:ẳ)gJ/Y#k e<7.\<4M߮D -d4M:#9tҵٔ|L=c^$[Y@3J 2*ozԤM{NdPPr¾ۄ3 VBz.$8/JgE{@fzPP,^S$S c{9y}stZ Ebfȅ{;':H BټHu?~i?VW19j_=HՍ9..?8 #pg) 2qcFo["Ikyr%piN枴N}B}aB3ln{B/Q`h$t!F(bń^@iص(ӰIT!6KV.c߁0n .ړe~P aU`Ber/0z=,~g qQ {gcV,XbO۪ܲ.@e6]w f!׌.qE1a: >$ӠЕ`CF-kd AZa7~q 2++] 68 B ;ܤ39U; qFWuЫE23fwkV&+ }e@j_7~VMx.} x$p[D::uםػh6:TfK҄ D,:VhHB0! (%)h@>8h*ҞRMԨVLt Eh#Վa'=̀Q`hlj ]Y` A{ kuhep ;3``x|d>rHy5%3I_.~?G+Bľ A/v ޅ@@THwwl)A}l=ߖ .W m^e^dNu5 𓕲[H]W 2Wȋ{ BK`+w Ð1 9LK9H=TfjP8).- Vox%ij*3eF dS=n5~m^/H跆{MC85 %Ӓ!%oWR@6Z} 29 *6濉ez%X^nҭ f$5hߖ4p%ۅ=@]`x0 ̉^nFwl-5"*ĬUIh34s{Oy<:Ց[+5.j{XJ9Z[?˂W_ ay-A`wwT@{P54)z^vc$ tC {hB)\9sthAjtbdF~ۇx7FA{ &]gaq_=}Vz^ |};غ| ^ɐ pި94e>0<+go?*dA@\t Ll8[Q+0!؆aqaJ:3:O} r+e =7cm[tf#tO4,is%(lr3W幻] 1RX_'_}60 N Qm#I_ ^ĕ8A @{Ѐ|`4~;Io ]C4ס-0[zQ>ꗞ/DB@0!,,X1 sRot/'o~A LԛڜCX-?l9@ tYL#(_: I*;~u%-ކBx&GʨTgQ_ nkAІmtv^eWV7| t7îM(r8n20 fAB]ĦYFe0UpoKZIҸ< U!BBX(Vy$Wawh-h:7,}b̬̌T*Jh hbXdY`^{n۫=ed , Y4UI5*KY9w=gss{U%Y{o}Vs}%W&pWp'5oh.(5+DmI/ѵ4*Gkn#~c ү͗L-וj  vҧIq?־坯>=#%| =Y#xIX' @DpV4l7 _v;RHNS<ȓ ݡgv :5A+ IeTJ!=ޅG]0z:\{->9}6jW= qa!-HR"l'[|=5 r 5rLP|!]11Ch"ftbʢ䣫;A ##.QΐZ_GVn5j!c8D$i+KGf$($-V{r|Sp!,@J-hS|y1zcd'cokҼ+ hY Bs]_%9}K " Ez4t@Y}y#}esJ`/v1_5̪IaZٜxnn~~IILV*X  cPJ:'눠TSz| {[Ϥ1k mVE5{XGf 8`x ;nX$;@Egto3%.O/Y*dzksh:^LW;?(סU[@Dm`Oh*' U4m" N$^Ql y95R<'{@ߓe:ǻW5!$DE^XaM >5tS%(&!՚$,'SI6a T?Г-}:>>vr_8f$zbOTBovoS1s л"@H"$:Ì@?wĭD@2BԚvq6b1D F>A]lKRk5y%KntI.F83R#A{pɨŭWdWփ?%uҭu~O H츒,Q97hc<>yru??F=ZjQ5 c=j[c1«}/{!$" 5:~֑ cDpW֐ZwO0FAÓˣ Sh\R n$9ut?34`vP&V,%h-Hq E|M 뙷 [DCca55w=G}|.'ݞ<\|nFP>+3O3ڋ&ͯ [8mDU}',%AAR(a]N̈#>/Xy7I'1XgUcX@& !Cz-ta݄ʷH-p|qyy*Py6 cf ?q/qw1x/B b^UQlŽd}Z7݇بACz_[dRbWbIֹ9>h$#QkVQBg.Qe=y}q_FilK{\FlcVM:fאnϦwL|kSG}9@#?ե&+O  YA>QmNZ+PIF3%%A=$q.m'dU)qnx!oH󋇖n.a}G̑w}ߏҕ&VhքQҫB!rTtx}=: " @#$̷wYm]{逘섇|Ⰳ9ɍw BJp~d.*SkB|w6α@egq.6 J_Ÿ" h4ְY_͝`@fBۋP>Rpyx -Ljk},0ҟi/~"K'@t +PZfgAHB33Q߽a4z?*gd+p +5~ q[HTls\V[l!>{c CmsN|ds/-^{dwpXb'4p QG22*=$@)IagT ӑ[4G*h IDATBSdia$z[^9ُ2ԝ;h$ $]  ^B ܥ5wӫ!VlʲvkՋ C7pޘ.KK7A>X+k6åGSu@!¥<$7H'[1foc^}M22ntQ &9i 4܎A9s׽ƫɩ]==[nH!rP 흃pjh QkhwKA=ԋ #o@~5 mF\~oA+SϏ—% scP-;"XdKdV$pIګ%W&3LsZ`p % NrZ,sp6Mßgl"&(oOȩ9Cp<ʭ19DGc!-HԜ7fLAtJRZ*sJ F2 )]+]?^]yM'۹7~BB++h3 F !ĉD)x4|3V^3OWgoZ[vjx.5`CpS<%D1c0a ca0)|p-/^K@_[jg+ew'rkG?0'}SipJtMA3C3Ai?C)1;5gjy2oYzv'||K~_۪ \Jj]_u שT[j?ܑ5%uӂ9&4c=5\VB/D@_U:yDBB0 `:ky?:EGgS5;H8aMGA :v-ү](WϜ8N nk`s%,c8B{vg=l*kR>'ư0\gͼ8$ݳU?aw`~HwNLvr0Tķ55AsN !dp ZIӦpkG~OHm2kh<γ(Ui9j(:m'ݎcu5Y9mr:`yl}c&F \^b>IGZţdif+'):afd/Z 1ҵOr~E}>>}Ѭ! ښu E8EKNނ6b8Sj;Y"uO <qBzU ׫H> Vn iZE, ΄LCKM 'H!x&UwuN[{l] |~'U})nq-@?k4.]V6ҽXz,!Qk?}, [\x*5|\$N0Qe0׃븦`o d 2a Uī9{ҙPG^ENdYWzV$Fo"25vX)CBVb!hsSG],w$ yŒT/Ȋ=N ]ȑ/$*A\BP c!y@:%J%5Ȋ[㝭;$[}`# thV\ V-3$;A$ Qe#lCWNʳyN(Z {+*"k=$}o?d8hj_9O҅kp-j?!K,Kk*EzGdS>tbr2zWoLn0itrP 6o B5leg*!.݌/'Az i^;7Qz;]Q8BD ݚr [g'h`5u-tI,:Qhmq 6Z#/c`|#k#I(v6.D(6A9UzҊmVJ@;~AяE |ffl,s(%KSmz4ͳ`-Lu p_B^K^{H\kVnޑxfHF L Ԫ ZhKj7ɒNʑPiN b~eQ+ ~Ɠs4 QC)ƥ U ]'5?`.'HVo ݔǏV-9A˴3iSؑXyD1׈74ʌB\c86"Z(dJ1 ׶S(|"=[͉Î_Ţ#皂5όuHg#$C_O' " NGHmt wbgN*\Hժ !Gn0Zg>Fcz(:ZHYXgA h7ȍ_ְ+9ĭsv0vR4WKB^L3FA*گlHX'\&l3Ea@Mȏʀem5yGYao "{@euj 2<aJ漗dfA}-$Eђ:O}TXtCQxֆRk @׿=^νHU7hD AH]} Vc\ҿWMa0Q%StJmRT):fdΙgR 6kSM4dy/0,c!=cI$I0Tч:m8f!WZ9m&3aV;QlW/*V)/$cB8a (s&8a;0 vc#!]3B*\EVQ1]P,'\Kwx n+:8qswPQB6 &$8n=m$7eM8`eAŬ3:9_h)1iUΘc2,O0Y}LP8w'Lԡu6B0ԭ#XE^!Uw @-8C.:mFMRI"8 rUfCP1qĈb`3qq=pH;B(p‰5ОkI̯=꾪7Ğ$KڲVԬD'Hi@R Ҭ81OM@p$ %x.0'pӪhK }G>/Pῼas)Qw޶4/_ߪz&T;bހT{LGi`)eၤ;H  7^Ɂh%õ&IRړgUyɾ/JA)ybo-%<݊_쵑 bmez֡mʫM*قEV65od@:+M FeѾK-OXۡJi&1~?-} ƍ,2@KنU fΘ3k~+:WM? &ѽ%,{ @kUBU;gݧid j8XP&ܥ@OO7${!v, elU$ib8q^K[] :iPe:YhE2 BD&Bʪ"sdr10f_}8$)RgT6c"VQe% XI`Z;?9 V~3LIK3<& r8#d.RGjHlu 2OfMO1b-WY9VdF}Ւj>ɫA֯s͚GܻM? ġE9 /i׼1\žf]zkۆPU; ;|00# =? ͺ@%Q ;*m}4fQbھm+8yŅ RG芃@-p9N'筯-i/=91e6|ÑS{=}9 W70zs'58fs_?U_Oq\ [ Ph{@вV4" IXÏc |oag6v4H%jVښe/ܿͿ}x}[xlEdB<-?iUM)m|C&yK"P,,L uXځ0J S8VA̤kbIY~UdFKՌʞhwo{_^e4KP9 ^HdZW r$:;)e\^6U7l = (D3X`ڔ{^ 5a{dq]6m̭(ZJAތƮ 4ka 5b*jU]l;bq4雱Loh<T̽,,2zZ lP~NjR>sS93 fVSgyBvM4 tޏ'!Ieqzllu}2߰4{K"on Q.J@BZ5ѸiK^4'yaN 6~?ṋL^/±C=X*k5\+&T5j̙tvU?47Uȸo*t4㱪p|vCZ Fh@$$QZ\jDcs΃Idc.z.ʁiXYX[vnb,V]dq[uZ 7$CR1T^ℱ7Gj c8|# Hѷw,v7B ? 5ȧgQ[SGUe s:7ȍ׷Oy5@CF(tJ>XJDiuPQ7Yl% پ0 S*>qm tf he DZabF8hV*r,TjH)#eiJyH͗| •AֺUp<n(8!ǥe6E!!0Uj2|RRх2eҙB2PYO(%k DҼլ*,"{=EͫVpbf;e#M 75@'1$$ tq]^_D !D{@I&6CZT$b/[ח1d#Dgyfo g&j7SVͳ]0!\]%ͺft.œy+d\ࣘ!SC"msZ g/&XkA/V}0Xh€`sLL~z=W`g_GaqN`5c0JR|1 y ĵFF {_ab$86-hQ@iG.g*LJ.ZaaN NȬMCJ8}I=:I؀D8`ĸ%^ 8agxB4$ڛZuG L"N)>"$??,Q a@zHx~hz={@orvgK*B9P*¸Q#dA2|O `YB@~*dTӃ6<848P&zm&6-5LI,8TR(b|(mcQ6 fRgjϯ}YWuR|f  p࣐3"y&+EӤ*ĺ@$ TRxx_zXXKl*5ݬ ʘۯJ\5W 9K l<-jlogJ0|6hiX>hEٵ%2hL*H4g\6@M1S1\?M8¹'Rz?=.KZ'4k(WzKt.ZF3XVQ& eP^)RxodUR[gʈF4MiVPf&MC%txxiocтG-݈d`1:ƽ]`i^x jqKj^śJy~gO5{ԍPԡO:=0\gx %K톀xyߑE8/\DBuSSqML'&93"3q|.r&n03j43ꁀ `%l|"\ñ ]!Q:JU^\s 5yF|T1bPZӖ8'R?ϔK\kHƥuDq3$2;]7{8}69zyN[p7f N` =z?酟h7!) V ȍ׷Ӌg8ћ 1jysIRBmW_+Fk١9\|` e7;ߒkbj3s]Y dbqUne ,8F;жbqZ.ipAE?Zk w/ įTgfThk_p%x@@z TrK/ܨ,zq!8S|Ei5+SucF$ ID{5xor!1WQVqˮmI_Du7FYg&]p֋` {׀C2*\,3 IDATۑU*Y@ ͯBiP?ܭh'`AlZ/_l/yNĈz+Nq5Q8A"rQjJJL;brh6,MET*=K7" Z33Is:ۑ/80'{ n}pٕw@bv0޿˟Pq$ 9jt{.o:H8GE9p:]!%j4JJcf3B&F^}%\GGV"wNll(G,qlAF|-ګ2DhEtuL>!!L9f-tM˕P@Zy`8z KB(HIh]lkhD1?"81f} ٪p\/Ϊa+AT̑[g g <Vĉ. Qb)uGLUXhKZk 4C\HS>cN^}VWL%Ino> !7\3[鯥$BSPI!=C p}7 eb LJ8%vM%D!Z!E9TˏYd N3ZX 8@U, hn/Y.+IM6vo+zU2ޱTG"+twaUI_ZzӮbPo$]I 1$rһ) ^04]vùgtЈzFyvV@ ^yY޳I?Ŧv%m0~D\?6 Lq(f\LQj 40(b]C"%Fw;Иo 4k5%^4N nQĘ|4Z <ApMQA DS;Q3c S04QVy옃Ƕވ}47Ȩ|Eho #c6; s@ ^**Co֍֦m<1@-N7Sx} 7w/>(JQ j>LB ݫظԄjr%uAE6Kɶo~}2F n do|-}=U 4,IޢP["I&iy2?;+{< D]F|ψieQt)0mx.5Ԥ{de!Wdy!&L h`[ dlpK[Q7 4 " Bz(8 MuFW+ĝfi4ʩ>b+>EvPpi6̃lVC0.E0ϰN.𯐕6 yhlDXǕ 6b \" c ֳOSO1Nl@r%=7Za SSn\T%wI` I[t8ٛeQŻ֏{)17xT֓9^+p$sأO}p/FȽһZ=QPe;DZ#R`$d[\5N<{3*r|.tQDwjڑFR(YJ^)Q UH ;{O|yJ7%g+{A_Gd񞈊[쎔V׾hk4o8þRZ;RYz-x#iK4^;GH8]Cki*ޗ 2Wtyhģ]\9Arww]! |o2([Xod=mTYq-ӵ#V-8Ñw>EGqQ{x.됖l<1ʝɉb̵RTɀ5\و6iS&13$W"*c4ub/k k!4u}O)$ȴ:$aT\tL1W\H uԉ0aoTmv׷CMfqNfEWf%%p_-4Fژ\0הi4BQjz <|یU/9ڈ},h X!O)n`x}; k,WAHl\JO &=il_z$,|d/ol?FK I4Bs r iܠJB$k.:Y\{"uU<~JvtbĽ+^@o wmS"t翈ѵ'@Ҙ(V 7*{FoukR? B A#7~,g?Z%]*6A~h 7L?۾cR"En_v꠹@_~72M~` *INIЃa,$ڌl:ʞ`tವ\,O91b߅pMUY `zB/uZhI^ӖZ.=|e~m@#g lΞa};8J}b(!.Jc%2[{ J^)e*J'`sF]*ı&?ů";']HP (94㰣~4^'> G4ڥq x֏-.. 0z!\}ς߱Cඍ i_rg$G,l_y+9pc1'm쁯:Hg@*/D7AޒΈdY+@umy}='$3!I^ :'_ MClEFp{{xY5}2jnUjc 6yHTIٺV]>c fNy+(Tc\GۏKx?NB^*j!R!RpY?90 ,>-wq Hȴwu2شZLOz׶A?$֙Oc,3rXE<i5ޕ'ʌp<&Γ=[D?vYԏ܉IqJ"` l>FѻzLQVPxd&#'Q|dɫKGo6 ZIoCث!bJQRtc&]=kM  0cXHDsXɺft򽄥L/ÿCHr&*0^hKSrÔs!ÀT.޻Xa}u;ӧ{.=rIh-E-I(ɉ#H d+(b bDprA,D#˒X$EQȽ{ٝ}ܫ{NW.)qtOO9oU}UI![~v$| v{;CrW`doeR {`FgJ^a{DF$/SK8yr]*)|_`;@.ETkCT&C`P<;ػX܇H9Nϳ݀-ؗ+-WCލ_ԖkHycpj9 Me˭7fˎ*oMP _c8Xˁ _d;}Ib}S7ZqX[~:$\ k @J^$j p1;@ll_h vrMۈOhk@fAUu=a&>&;b߂ 2Bjvox㥴zHdauJiJ3J&q0na0``kP7ߟbuuK2*> -[@:DPiL NB`3ac?@L]:3q;ɿcn,ܶ!Rr[yc?O.jN/}! ܤFS BH.Î{ncπmZbf'KͽnN9q. .s"n0-][Y1HsC^RUhx0wwv *:0 3V&(]hYl8,$~r^ٵV}B%v)Nil8v$EjCRf+/aȯ T!pljU2aۢ dcc3uʌV5-5% Q@ρ$WM;6QU^U\MXI%&B(9Jm\ru#FPM*Q7d* !  Ffo TMgOD=@ƾ5p<>~mPMn^w(W皭ͫXB8e_Ю.3(  +B1kF}'˷,9^pDFJDވPě &ݞ^1QN=_g7L|z1$, D~8`|U&ûn"R|k[|;qsW!S"=a!;O5w"%RcI~V_ukvv)AR_}$v`oea<$k?($ IDATf;ϭ|-k:H\ c:A\sk=d;pQf~<"7@O77 L Ž̎LTO9ށر* ]6ҝN B'Gng:MtU8{K!D# }f sקI<-H:thra@։$"Wɭn:nTk߿/í5[sR0ί-A\c[s9!sSZzЫGAf1i%I"eH =<84bupi> a -(#ʬSQ & Ȇ!0kEs(qABs,CN-jUbO N3vCjBܨ)i[+b쇵ǂ- `87K WM`wpCY( ME!=ޫ,;y?;Fy"YvMg2-5.Ԣ7j ʇ=aQ(|[7voMO,3+=~98 8U : ǂ3cS磩wC-iWn0ӷ_ j qEVC{Tghv v R lp5C W agr}Hyǥ{`3n.v Տ%sg~ Ÿg .ؠ3;҂J+A=L=l~іo_mQ\VlG:NI5w?gawZ \6@kh,>՜C7@D:x,ۃ/c4=G.=fp6JY,UYo:OX]GAaOs ;S'iChjF"p.x{ _ mz{jG .[ʯwW4pѨyD?Oiq)InS_}8{eKl7s`_|mBd* YW6 4X)?]vX@iƊ?|, `SxҘȏ6Do5*l8:2I+Ĕ%0,.dYABii)jU[uXR#l$#GDhhIq"i\W9>7x\~@;|[r[6Բ'*ŌD|8[)?+1ʇ33+kw}P[#<Ѐ~ F W*+B>AX씼8B:0'Q(mQ.ҕ WD}5Eo(dkzw-!ê31!-R1:- rL:gsb4'ilYC%5IW xb'pTŎF]NWzC=" G{9EՓYj?F*/4`ҁz^Paa&߁G˕w{ 'XZWOccqYMlJ30XSN~& %܊Cm9Ύ5v[v}Ad5;I.l]XAYa>_@B'5jo*P5[f0a:rfqKlsyϴysa@:l䙰GQqi_L!S{H u;~]>֫)*ũIqJsOjpYj\hKlG[PE[f*3G1c]R/Wnc%ֈ yBd! aYm_ytģ["A&?>}t>哋XH" PzϜ{Jcyw̤mvXel'v'VZl†TuF!@e|eaNIB3.k{yBCݛk/\^ k,uʹ 6'5SPуVSZEjB4i6TVM%3vj"b IL* cG{ 7;'zCUU53edFjC51lZ8kepX($Ր8$0W"_J+&LK !IBMP*Uѓ0o yá)dkɅƊ8ܸka:~!,=>`P*o ҶO*V̾+5P"[k"rhexJ9( ,iZh\"911X.T^Q =IQxe)?Wa ZBW&#n1: i}G: \Fb`κV@-`g|̣w1}D> VRa`ѬyCa672LRh"#rIW{'G mM5hf t=݃pVSūȮ "}<UE*PB<=WABeUv Q`]fk @_" ;3@&&@ ~Ǣ߄? q6CQ1JoN&g㫜n l|o'5S1D ]6#tca}ax^qLxO of3 s?' QHT?4~9w5l7\ڻ!.dsC#R >Ng yO yqY lNMfb']?+AcǽCf´pN߃jBpz\]J-6mU"dnR3 ++]7#CV]ZU%`,@$DTR_/m7Ҭր ] JS!e!h"Q h0 d( @ñϝdRo`WFoVU4Vs*͠#lpۧ?`qQiHJDE=>Ҽs eue YY+n{IA甔]j*1q&z{]t# X n0^QJ+Ut(~G^* ^X0,v4P(4$VB&@i@Ak[WI60glϥ8qe29̥,s8 X~\=?0d.e]3X2 6neiv\UI)7VO]xQQ;b7 ۑ>/lR@ I¿bpu|~VPҽP4C$¾$QKt- JS0>&' M5.^\a-P 4y5߬ f|y07ntΣaEWϟ iG.ukna5Vp T9N$麠`$mhPE 8(CX1pd%ᅲzUw1>F7`&B!DTozujcmh렜f7KRܐ$&w|>me[ Nu"p\8"~(x$"kDqYDo츠?dmujMEtZkrILjrJL.qHlPXhk-B@i6<ۗ* EκE0Bz5jhApb ςP' -x;xB8o) ߵh6nܵx|SK:}s*C'BTkE_Ȭ'_Yvoj*1m:,vg4Ѩ0֬޶ñWN L1l(U|+Uj vyZĻ_m1WwNBq~aNC+C5CŏB1+UI\2),LvjFYKWX\iBZ>DtD@V"jЮjQŝp+NKxX"0I}SejK'( g[LU&]vlč3{P*^Ed< P;a@U' 7UKbp#2Sϔ߬nN_Ҋ'!6?T2gsb3<@޾TBa%;.v٪v);|@,Fu s]K`&)PwV%}]콣qL@}Z$,ҙjM}KKOC k/knR;>}|A?YIBܜHfEzʋ?d>DV^VM'I%&J12Z'׮T3RP빦*vY(ʃ<4\0\ӫ/5k qCF]I5 zyqdnO@@V7 B e(C JFJ;MKk*n*ÐX b x8>HŎB(Ni*m1m90V?m(cec!fsBXGcYS\!q .倛5ZU!D!m8QDhҶQ>Tͨ?b1u} 5*^%YSCiz# )JBhT}MgmAAA5 ]WǾUtbI*5*.olzo9\XP 8ikBqWlbzCxⴑK|ߖUcƝu'χ8s<@@9x(Xݴxpjh?h_qxґcn{dF¥ KzJBֶ IIniZv{ޜQU<(ZhJ,X5f]! {t+##£,!pڤ"# Y  a\V3"6#o ݢ/fWtf-qIm2*9̜Y9!G-d]׳n5Y=ΧTH@x5u;ZUZ!ծ>D:lb_)֊Ji$fzCM~cL|tK"qQ& ǥM|wy: G=Kn?%q]碏@w\;ܩ%͍ qFH, )~s#Li]'Io Lja8e @*1)fPT kJBDJy?;RR ZA p!Q$|!IWjjč^'W, 0<HκCv,B طpr $o~QURI$P"iFC+! 4M;ٙmCoThzsNS!5ߞ%H;{ ?[b :@+ߔ~x*XqȬ] Kƿ~3|Kuc }'BEn2Fc>un:3WL5HGШV|LIWaϋtZz*/`0ַkm9dz0=!CODx7[VӨWjE¸zSI! Kk+Dsd_7d}[h)d6rmJr͐2-6;( \}+&S)b_L6ٿς!-"oge6&WJq Rqlkr{+@۹744K8̱m R5% 暞&*Y\ZdP2H51{}陪MT7ovݖ*ewDDOYKPqDD)u%*BO~wKO!#nc FL"4Lv`5jB@*8"՘^UR?y>̈\c%5^97*.gʌe1VJ˹gy5(_e/Q dY#*R$ =jBҬ)iTw՗`XNSfYXD y"&1@Z'JUJ8f"}ey^c }O~,w6q&7N|%d»_{ե]ΞEąE{P%) ,4q\#_)zޖTcPZuΆBK<,d±ʮU e%Wf&Pz-Cyyyd~OyFJN::o]R8{&Bp`o|aGx7I \xr}_۞`<{1EG#Zڲ a[VBD9A~!*fb2#x劙7s W l)eCo.e3!/V>&K)S+3Z[jfi 3U0Q %`Ug{p V=(,}@L@Cf*/\Zc_| }RC>~>E:SrQ}.>Z}9n>X-|Kum8$ġVe"a 8P -TɕWS|L!^P8ҼFB>Yڹʭ9Z5G %dҮ+O`Z殃nߛم>qx<MKӲU*( VIHxu# 4$ sMX3!7ZɵᥫNڳCۅʥ4ȻD D5p2 ̾ݦQ#% +#-7pz4t.8NG佳`*O=]IY=5Kr'lD *y_H"B%V`8NϾ`|LxlvYr l8fV]S%q^pucUݞ +SR9郱@/j1ZTNPV!ݴ4w?RU$ -E_h6 oNj$c|շ[|ͽj˿xL0Ь)T IDAT?ޅLn5)\.{< y9e@%03ǽ-72L5ሀmIc* j8R0n!}; $V f yV6fg.gf9g2R 0 ࿠^|2Wn)&[Dn7#|3ɜĴL< kxv!ydC-YNE<>lgc`pvu5;^bG7$!. .Vr_䵋mF8κF=us1E*UBB(HZ(( rXYiiP>k ݴȌq"R]DhAţgC,vϠk f `m!✒ZE!( 5!jRpgʍ5 cDRȌ[MCA0R[XP2eq9>Ic@~Άr Yu5IF?R$ƈSBsSy\qQ3*FN%^0&84@Bl<_APutH-B^8`y^cUϋaHn#Tc/[xt~`dyfxfҴh#d( W+S|P[ VN8oEFkB%!\i<V  |RϨW aK77`#Aw<QS 8oʓgB tvkxt1J. ḰJ,9z]te CGGh#"`K`<$VT2 qVp@3d0~f#!E{ fw h~;aYvX g8C>Ϟo6;l+ >~<%9~g gV~G8ІUk_K޽_B;ȯV$)/Jwb aLtXΞ =ԎY`" 'FJ*@Tb@ pĹ[ _"]$8+ -77gxL@n*O F] .e86<8=/ hk%ٿR}cFυPtG* ˀ]O6zzsT=lo+yZE!" YGb0m*$dSx"f~>3> p,co٨)+2JcЩҨW} _uUhd(rB zRda3'(03BD (viF5Qh7t.MuSbz<ذX po2KP8oV)+!=/ܬ#rUEJq*U)~;K΃f[vl[MBfɜ.Uk :hZܿ]IS넙]ɇw O4Μ!$` rEҥ__REL@-)k# OP0>6g޶ I (%"[ iFSK&h5Bʻ,54Jҵ/>oOj O+a-T]f~xTF1,mTB5CB1*1acsrԋc`¬n>82}X&'GXYh5*I1+p_Y-a#[D%mzBZ?ȿ0Ε2#ޖEuxjȯ@2#Gw%ZB99bHYWkuo5KK,đ?Mx=C`~kk"lW>7Ҩz'h5;|̂pMx $P[%sEK);!/}C&AdCq!10CGp/iZUWnʋ/ Y(gNf$\ՕpV Q]%?(^X 1;t6|,~A {)(@Y%R_E# +Tl@7xֻaMhw!73XKh7΅86Ƅ@´L's_ė+ J 3<ae7dD|M;A &o)菼9\SA)B/q,sWl7<|?*\L\31AnyD@ fPvA߷xYp|3%|+I;d<%?q++vz^y|˿xسs0"h,K0+>^1Pa N. GޞӬ)45t&x 1RnYi>; \|#|S nxP񃯞t|5QH"LЬ6v6waڝuK_oz#͵KozpFu^ Us`;6@`<Y}e7Mcʷs'C4* KRUIoe_7+#x o;k_;=87@8ŪnQfMqIڶmEW`c#Ef+KַT*?oBm8`0,@kD!8T8Q45ZAwȸKZ?ͼq@6t-i '@w&Y0NwOWՁ?4đBꕥƩ:p$߮7-H"f,3agT>9f÷NqbQAx; W_:xRzfg@FyvvsETcG& Y|hZȬorф">Ʃ/h"| NX3%IH:AŹ\ӊ0&Zz ߂_ivmG{6L@?3Q2UxG7 -{OR!;wXW5N f?1ٽo84 +  ]oNIq^t4OzͷvieY|YYݥZRaF!0f`< 8`<3' &f!c5nuz׬ܗw=}ι7FTTeUVw97}Yp˃iuDia: 8>sh}?J'\T9R[!ϿR$:ѧa}G᫗µy cÕ;>Jg87$܁lnn#Z{ڦ'ƥ&Qhuv\ GG@Dc ,,mS1zHS, Y {|Ja)%eMJVw<~ x$OC$rߟQdpf5F{_k\׸5G?Gc8w9r:í[g>spxM=*B0lᇩ]2~{w:lc(*GR#wT]j+Z19-E }u!@+as>Q#:O\VGPjNGpRXY#GD7Q@,*Vqꈃ* G2;EuDzC|c~J@rX֮NG#xhifv%jcE9(˲)w?00sGS 4]J6.{IεA^BD4?wʼnyF%ru "Q8}n8l8ԚDadD ׈!ϐs9v:D\J!hV*D$ hɽdQ gRm 9홙y%+Bu%£-{ZqB Z"z] tt7 "*4f[{ڳBf{ݖfd\׸5w>i=wwO=$ݻoNw1Lu[?=} S fUVtN;5~k΍VCCbϮrC}΁ fϺ(zBW^ t{%W9,[ci=2{T:a52GQ9P×zşm v7ҺBPH^=$= 4 l0\ާHR# &D瘛X^Mpg%AR֥V) 2#32vWcцb鉴 ]1ƹM>lg#68Թzcc(RaVolZwM5Jy'u$P~_Co']eխ;6ۘw$qk\x1m>* 8{_\" ׁW^ ͽ{?4|ywO?67)E1O `bBݎZuM 1;q׺5@PDBB]1jNJ:=bƒz& }gePx w,~@!hOp0NL1'~Q14*CN#+ @Ǝ·|V4aBy({}` a H~z6rmqc)Lus%m?&{$XG 6T t{mdd-s'ʠ^[!W )d]Q*}\ f`a(S~ c>G2Yp٨ T*K1jmjL9U&J닔&fuCaҘ8wdMduI\Pxt{D{[T>>֤dЊKnb ~J\cG%eu FgY!nv9ݷ\\MpbA:l˄[)}s{9\O^cbV; dM<87qk\׸ oCp]v5\% |NeNu;U\ Rꯟ( A 37!J`vFz2݊09"KdݎSJc f&$Ej!JNGۧtp)hHdnUY} 1@ rZL nmW= ,=IM ȩc} 43:S^{'D YU)^x<cwtr<+ E(E mA ՒVgl[ k[ u4Ү%0z?1n9乲 IDATiΝ `Hj DwVb}E. e%ȏ6ʾG1jB5vWcmKй*EnלpnJgT!g8Ȑջ4DY&E:v_|hڑ?05qk\zFzjQpw̅ 7z {]><4;ZTߜ΂lhM׿ 5%q3si~G7P|̆Шek"6u=]Mn3 S%#йMnWcp,i[mUUZd 9fm7FYI1ϭ0v\ \MN@2]`DM֞3g=n&Y5M.i ; ִqINu5Hki"B}}1R$Op_VJ´< TKKQ[]mHڻJۀMHF:CaL@À# -GqGx#J6"(1(G4GZA{@Y~7۲3M)(g(rfȨI!ͤІ(GRɡX趉^:H(h+7XT!:[vv;?2-Vc3GNw%c}ypčϜuJ6LEt8'Z*Oܣ&H m(K"0ehBY+0#Nah8A/qk\׸.Pm©#H{e4]-tR:0Q5qk\zփ1c8N3 9r8֊ V2ߣQ,^\{(A?0Y^0ِY6om|81'ur҆\V mh8xwd=ϝR#-l.U r-1<;Јd @5qk\c1@<ϛpgpׯK+n=Rq|˷?.))sjT;=)p[JzKNYS;FUT( ~3</Οu;!\KqrChw|~xwA hr9_g%_ G2K`AZ 7HT'8{AJnlڠRtpz%[\H)1?/5n& ŨhZ&JfgO[άJ'e1uY:8'RBڜbsxFq <Ɋq In-e|A2\dxzDZK5P8,mv;͊@&p(C/0VL?&jgk+-M"ڤ3Ib/=v 7WyPBi TK"Q=5 @YSKJyFmH4+1H[3җ R0׸c~JfR ƱYc6fe+5t; ^dOߣ µET(2/R/7=[tdfTg2vw Ay3>Ԃ8 c2qk\Qwĉ";0}s7xaFV1^~0WƯIogaZԋ9 nR[hZ.P0N hAg!p)Fpیg-\ =*9"u!Ǫ]ra*evPG(9KhWR/8I"u 6;^^ˠ? '|B&?wJ?ݣ|sMM@(g]0 \2lo+|ź6%foP:kx0HQ6v4N sP.px= &5ŵ2C1'`ָ2S+kܸ#nED{VG0pRci#ytJi~Z O~$0X3޼om] Sʀ3rW &&}Zӄ>)?$՛k yW PX;i 9plS.%:Oj0 ŵ6j@ 8\`Di(Y]^OgΨfۻ ϶r9/+/ EzOsO˳" g1ʙ8wusv>E׸5k_wNO?R .m?2n1O3>%\aQx)C.76'תnAh̼ /tfhı &YR(8:4UfӸz'Ƒi9γg8 37I}"9C霋v%2aر9Z{ p|FK<#nbH(6nsj]pt~k)BTwpfD5HaD02f'jh!љ3YRz/spjen_csh]ad{ݗav6h:QR3=x.525k4 rٍ(iܿ5ͥWi>eV8 F# Lqlk_ۇ֨٦\NځQrpv)_NG0vN<ܮC9m٦”DKc7M69U!Jdj],-%Q tmru];:#qnV[ٍ AxШIAYZDFu7o.3凰:IXѵsU $_Lpg8:+Qucqk\cHܹz_dt)'f=޴ј}%uJmJN?|50|'6,Y0VV6*Vlian^eKik0J%|2QhV9&mj:7w`6) xR%NY{\ mHZmg.Y8N\간}52h0 1GfB0NT hT976)q۷q ٩*%4CcXH-4|-|!@OS'Ov70}Z@ѹ4f&*%zJ "cQ ;t]]aDFJNkC&pwnD g4 s<}1xGVȱRh8?UK6cy>XQ Ihc45fy8[K1~* 1׸5q}Q Ï^/ |/&yHh~9|sd IQsn{JrLavNcĕ~bd:t{[5z4 JP 96dͬ#=iNlP fWx;Xn\(xpf'< bn45E!d4\+$+^ N4cmK;8,}Zpv4Եǥz7r>B> &s՚1,H$124zrJdi*N({M1T p|^- 'Ɛ/`E02ڣ.%t{궲 a]H̰(1V0;NL)dMOA,61^&w5C"^ 0?)ů_wI4]sa6i~hPr><be DL4"޷Ivz21ݔhT1F F=4)|>`O q?  r! ? ,HI Ei==p? Kjgm.H.P>C4~ɕFwY1TЗ76)UާMȅsD 9w?quTI]I2qLc}meSa'ƺ Qz7"lKT:Td\׸uʺ6:{ νk!܊lr׶`\H@l*4o]ɺfQ)RPc]1^ Ѵ\&9(~)΀W/͋==urL<me#H-+vO#QDOpFf|G{ fLZMgih´aki?C)I i74-;plP+9m`>U*j%8n_VJp$试 HPdDZȈ}xDkBl_79Fay mXʙOˆy&JFk)jQB)-k4syCS0K:cfN?9#c2qk\:z4s؏ϠX" n[ҭGgr`ƑX9@3o}vr ?bļ,/N{( OyV_AkHAtDX0r\լ*tQLIZDwm`U٤0)/7x10g:@o`pg%Ȁplqb0Q(Hh:ćWdi'=yИe+!M.UaDuQlpn- j%+1!4vw77pWoy)ɽmT66gAk9aq$юP&X~/~ހ4mF6Fx_8h\JSӘҮKۄ~)lQ>%0'щHXFLi56}agWɻ2pg#^R sPȑsHϥ6)AqFd]=r'R3=AȰK /MYtJI];ڙ+ 0x!F&>+Q&Z'acbh P9(8m(Ɏ=ؠ!0xm3AI~.w)s4yEΕna)*LՉ:W׮cD mtΠtq01(+} UUx60 v:n *>e;͔9`m+o zy/?$%猋ze:qxe?\>q@1׸5qȀ2DOi DҒƥK0|xvmT_qdN9ib0O>o=ZE(66ZƤT ƣ'65 Sur@ to-^="] wGA.B JƉVU*p#+E/`aJO:QIEiG1OS9rZS-Tp+hE(u.ݍN݁AYU凝`sCp%hBH i |øƲ`H?$ NlilqΝp9=5. 1YnIk&jXg-; yJ=yt8NF6794p^tPV@pbN Z ;hP(cM(HI 70ءA<hD1p^ٴfoG13Or'FK~{#{&x78,~Ċ z}ݎF(N<;m`3)Jf 0( qBA>{E1sA1Ӕfv^W%vL֗<&YH0-W#eTDϬo.&pc2qk\KL1l vw"ir(Hmn輶 RLkLY (En>gZIr>Gİ| _A;A͔\[0YH~@5yMIAm9pNtB4l<6PB,0,1Ȍ@NqH8m]exM@gθ;wv`0H70(a)FKs2I`` B/Fج셽ؕdjU=n%P'!mK[K &'bQ\;瑈T(9r9=7Y8 ~C`v}OxDv:Q~56?M r^D,WZG'F8b%Ьl{ֲ6$ ,Hz*'d@;˱Cr:sk0ݐ(,C֞4a7b=bAVNHrb1P0WF&ByYe~7ƙcΟ[ UAy(y{ _u]oGJ-]td\׸hR>s`iIƍ70L3u L`LДWk`}ebLiK_g)B} 3iN„RBn$OB(8f'.Ͻ7Ǔ:%/mz+1`eKAuZmI#HļQVpV@~Egx\& p89fϺp+X1hJX" )Y@ZK,%(c̍Z3fMm!ks Ǿ/amu) dnňD6Ce-mn1.cm R~ 7u$Y֪ ĆnGڭ8,+Ġ' P?hiYkC  ) $4I9̣-c YS\8$3wiըrs#B W56JQXZOaguN CmkERf]3{SQl٢ Lhcs๧=\A0VmJ[}5n9ϑxgθڷ!i}a 6wWi+ 1=ya~Jf5ik{m+J"g$?Ea$)= gq c2qk\ >k=~G&pē(Z-7K7oz$cnX|&1 ޸'<pVOh6R ? 4 +.D.M=L}ُvah'`ӵ!~hR&InYͥ3C.%}~Ƈ^qjAQy#:=HN͑@gP̧eodyrAבa4mE/+0ZgۃsѸR<۲2%8+"䭨ހ1K֮β#H?0QXTWhV]} :ļ@)8,kw;)C#jr4kCg.4mfs.5ݾn[c1I `^g9@ϻ"* b.엉Ș}n 0hXv`y=ɂ/ݢtTGֻnHdoA4؄t(:oM#7XF*֞dM .bIbດ S.p%3NzI^}w})I#1ݔp䨃L8i+u(}u >QږBo)|lp^8!0Rt̳G],'j2BOtX }RC+b1%!(1|+KA6t| F)Z{ Ow,bڦOOHs6;oG3MKchc5m>;+68gY3]oH}?"o4+־קm,dS%2ۑ A`nf ݍAnvQ@)oG΀mZIc&4I+ K jeNAZ(}.H7u0)32H)?w}$w/' I׸5[ɟqT*9ަ4^x/1*>O %?ђDJCkWYHK*E-ϣyM+i=Y8ٟ-tN i3wV Lw`0䘨 (e{]y;06GΣ08)I 8(8ΞA ѻ;?{QkO#V^$M[ UD1Ouc02h4ˆ@ zeq1k]\rxMo`be͖BccN`M+cSEKiXL#66A :=6>(6Ge2q(6cل;N@$N%mk,̥jsBZ{=z] d 5):sAަ֮R@?+J#hQ KY6&H5p;k z|,=h_ 0Ӥ@#M /x6e=3ԏwcEH4m8Ęj t1[}cc0z s{ Wr1P0>}ɣM%je.['ij3Y%,7P9ιМa Az0$N[1Ā1n)H Y}?Nk4S-Vt٥С(xąkee t0;!qO54$cNWc6^v #js1C9ᘟ9*\RXZO`@aeh$je.:5%a}&pNz>\(iBOG7c^VP;?{9 ]r,Q h=Oa9VЕHlɁ늫Z]TGC`nTnq%>}΁\@1v*]fv_tgX^K:~5w_PsVġ%I|7 ըF5*|hm܄sVxgi7 ͇ox0r?NgdZ.fj'F9(,{gN|;1 WWXl.4tdvd5ϙAC1i ŃqfܡXД,ɬB>8p'8PBmtXY5t;k :};͚ע?Տwu*{YqQ($3dzSGx6S5(\67n t|51P*  HX~OĶi8l-C/\ISY.-+,0=YO<! {K~$et.L;L7ȂIkGlZS ťo<Xg舍ejL_yd0Ⱦ]84jl+rR*(Gq2rılٜO4«{#oA30zyf9>jTըo=|_.Kرj]I3x~\ap o;-G?eNhmJ=č9Yx"qbFQp&7#l c1m-Dj*E̬:kCiܴV x^^ؔKqHل3.vbuzkeg+X/d(*EF=!(:]K5& SX.'ɚC%|gM@!inJ/'ֶ V6p[#^nܒu͋:]DuO(:vZ~^3VV?'51/RmlE}PtżLmDUUK[)jFeߌ| 9Ms+)<%r)beMv1o'tB͋oNH}UwuN`Ghim\ c}'5 UTmhuEgpv!YgكKK5\Ml IDAT470^AB.dY ]7gΎÕ O9-c睡JUqk#TT|e|Oۍň'_ea9qp|ǹ+2b+u30(쟕im ZŚ1ԸwaE(鿾.:1헺6vGDzJr4)Pqk=angJffg:ڤY&9NC|fyVײ^om-O70;MvU=SϬ[=Wrz\2]KJ*z_Do]L,|z@ei5̦.$1<9>~o'fpaj{^(VP O_ wR5;Y@6V\\t'i4^(`s:X5nCU\E7m~nS m}G=Z˕=XlfN*nC%d5D&Ɯ4DVH@G/k߿1g@yB@ِX%h16%4;b4qJđ3U^Ggw(k4 fu)lM?Xoθ𥳐lBh?SyONJyL9+k y $~h _^cI?f .VԭZ|.oo;csKyxE6@:us*{?l]z7_K x~vW~_\o^jͲI$m~ʥVSE3Ch\u\Sk'ـB;;Biww&aᲂ3MȄv$@ ,)Y7F[+z=1MWzO[XoX^LcXZ2╷›\^hS)|n'e<fzM!'`yXOYYO͎l] R0uS 쎹ZqSר4yXErr{wssOi?y_0}q[݌iv,#ni5abLnL?9,ܷPIoe< ,d'.d- h8}1bn!- zb^sZYw3 YQ{N(NQpe%Qv¹+!Ij ;ge9tʚ.cReSdX87y IGF[$ b};7@3#wlyXm*se,F~h)QyW.?g);d%9qbYVt^۰Z+Zhv,'ll=08s`/~b@k5Rhx9ZYxҏK! }ڷ=qI`_^OAB3s8e?`=01?uE񃿃RvGBz89$2!& #2QjTg=N*GP W_|zi0YxUR^XH&IZ'U̸GH\2SQ}?sv&Q,F'~8NJ&&}@ qIav"BNFt,׎q!0hW:'ʂa::2쬏;,_' cm\ܖhBfC63En8 )i|&]%Y "ܘR!u -Te]aBHlH? R[NXHF[QyF=IϬGPbJ5+Y[ DkZŵwOPa 7 o]XHhoLWȕ*+XM=r'Fj5U ? ӸZ8v 뫉h!ҩV#!Ho8,0(ַqzK0ͮRHJf\ 9W(L`p/ t2jWd'^hqol%׸)#d w})G-͐ɶc\!r-nj;3餖b=QnASpm]roVZ|s{>!ϿE+:.gv/Fm3#2QjTz|09k.,/5\m[vzS(K@-֖Ûk.S.;6ǃ4jI3UөuL)UŦcOFLc9P_o{sW"zhAǝihiTIc3;yI"Zi\f'&Dz؃s6dzZ=4l+.xvד"Vh\żl`2Wvϰ0@Ǜ9f96ꆃs"$4ł$ESx(J[ [Ŗ}ve݅/id`Èڨ fP.rD_v,{\t*_18ࡵ\4˩su<h#a6sYOxi3GdTըFpFD37 Zeinbd ƾ~c߬˙ @oenʕn7`~2kSG0G6yҮIg tR{>S1ec[3ʆ-8:Z[YRٖ V0= hoᆰQOr̎wtG2L tՕ؈KOt}>so++i%GߓC;Hez~}7jj34[!}=Ǿ88|Z+}uGdTըF'ͯOp n7K_z!aƉDϿ1n³9~%k],\y% MLQb+:](MO=$qoŧjY}C V ~N3-VG:HPr S.JK}P/KCW2^‘}ɸ$m-?tzoM`{Iߺ}(L{0=)._M~MRLbTVZ;3S6GQdEx(.X+e8ӅjI3<:(/5Xn*16iKPJaJQp-枃ƍj;?4U>;Ig]<ۡRtʹ7z& -(03.rQ@2^$q*΂yMyAiF(rL/4#XC ,4[ o0Qu9㢵XmfP-'N:LYؔkfhtlY_7Ø0Rk8}>ʮBNsRĉݪ͆RAZ,h%vb1x)ʵ{yWOSqeqLI^k fB]jόC @t/HL5%/u#ҒDht*nMaPjV8m%9F6;VTwXߒG[?ƧjM~7~$$Q7\[?pa1Gm (-@ȨF5Qi)?(,aqK/[Ddv[a 7/UsWJ B:A(چrAoRJuAfC4[CZ)꽤Z⯿,M[xn(ll܋~󒤎LS5jYLC`~> o倇1F%vlhK7'ݔ"qjVsm]@ EE)Ѿqt4ہڬVi [܏J.~>e-X\n{OṊV¹ň]oPc4NPPQbc(I Gb#nbZ5;b?Ŗ MNdH@ڶIsLlU7 _w #á=z'6+4 iX[;k S5'4IWao0t |EINz}7RTLT bkwEoTs};ӷzQ @t]q3oQ k,bLtm& &g I4+j Ē>6>o'ג75@ے;m EňF[q}=L;#@1χ*}.GJsO-p)4В:=ehw@o)fnb%l\9דM]Ӓ)M3( 庽plPŖjRAg/GF ¡Z+#L4^n L.ҽt`hQaFIN /O Jes_.R=Ūܰ%pGy$޲Ӽ1v& /@D'8ZQ=XU_?yb{)Nvf0cs2`ne,d8S`ە]+VAQ -#ŽbzL+i}[X&z@sʊ s. 9{[]]6ʚN.vȩjpJ4pk5 o;4PJce9%I,xG-;avR@m $GHX=Gl]ц\4a:MM/r[ 3{>lo/}}1N;Dj꺄Nn5eh8ٕ XarRDganySȨF5Q[?9qCT*`-*c/qiv |:~'3GӳVJF]I3ٿGtsQ \[YAgKMW8W.ސ66,^\g4s9SQqPӳ .?fC/g󽁰ՊkB&ݻsj2`V)j2YsU`h:P:kTKAO#}CKo|mg[nqs9c".ON~",༻A6"74 KqO+ԙ~(Fpu5arL6Z (HFQ %-;Eb^&г(Ԯn -=fkeϿ{u>P@Sw۷)<,4EY⢤\+aQ\N@aװ"aliudS 70qW"q,qU⹊'}\m&iþ#^$Iۙa:|^ۤK6S|%je +T;>`[ /;pH |-[Dże%P$3^(Ց-OYXV柅O|E|q%xb 7_4N:um[<,L43Qb)ϻр 6 ըF5wgyLMC!_ iaڕe\Z&+{XY;罃U]$Q={f%fߍy6ƛBa,g"db[$x"(zWL-B1 Ҍk wiL|_4ܽz|elzòZH4Eo.1wi I7JAp5bf•7Hn\OiZPb{({K1Xa_K}L1F&_y7k0,}"9]6ހZ9m"8h%KST4Qյ.l/Ǭ ^ ~rDo\x6  yVD>qnλhEay\{WF¡=.{*Ԯ5͹\ɱS3RA9L|@C\e4ذRT|]%zϭ*q44ږN4XРӶk< r94[zWgv/啷Bl*.oװk%םds9=crL잫R:eYNxR\Õ՜ώq^Tz}C?ʈ燂ǾI51 4Z}6YYwI3nJ !J41Si?Z=tzvjC9' G"rPv;$RB T#{=B: Mn& ȨF5Q[}4LJ?O$(^}5⭷ Lߗ ^/P9|rbLRAlaea1VW wޢ } usvt4$ܴÉCբp(v0V71xJI1QuxaSKw7$^b^Kh-D0vMpgYNsЎ4y_(d 3ηdչ+!G8R:LT:c,=E {sŜP#JܿZ`7Ҽw*C{\\i tnN#$NH3'Qt!O #,Y ZX,", K14󌚴-Ghmt|Iz"aJ6{ﮭ N.4'z \j9RSKbkku>GVcx4ڒr1Brx y|?>+NVq,[P&kI"3^@!觋(kR+d@F5QjT|dϞK p_ل\][Ծ9oO88q}W"ӧ^fې_jYUvpME Zy N SErA#<ۏFt|婖-Nb!Gm(ߦI6\鼟MIK+29ȩ#+k4;F;2qVb~kD'pXyfaYXW-+&نcH+=@ZgtV[^?TGҩkJ{;1(s蘬i$h8Lg]3SI*>M>Pf[vƥh F;;o$pto|q0pX͸*NHͯWl>66s??ShOڣ\ԃcK4i c'k~anBf]GMa/aAV XFdTըF[|^sOԇ f`x[*{D榤єI"-ZEu|~ʕ&n"}(E'Ӵ!_2bN hy-afsq,b Bͺ]ed9&1g`5pVW E;o?C/,чތ[;aj,M*m$]CiPK.nvfnT%؛hi6vc(azȑ}ʟ ZTиTKSG|9ĸzB_ `>(uIx8yX\ԬoKᐓ<^QoVcAjfC@ݜ;mc9pdagơVB?M?O Cقj]xFM)(6DKږn&Wnt(9o@1=Zt<<,ި/([g{?h UWl"LDľ4 7{8+-$OK ,AjzoS5 ըF5zJ"?beu^yϙ3;>{c*LɃG&k&fZlOQDfz\3;W 8to{`g>`@ HX%Rɶ$8bRq*)ɱDzˉ-qU`'H-(HB!.@b ٗo}{ﳽo>ڳ[,\zAUH]KUۡS+jHH\J̄ln":Kpv-29&jiYPa At]wY#ñ9>0,)fr<\_Wk=A7ؑ3GRƉ}NjhOUny2|#%ZT{z2gg'AP8\욡G7=F!#- VRj%E+<^=I?(6?g{?dV1L2_NneH؊I"Z:}^)hըF5Q ˿_P5*n\qy'?4C ?V Tg6E_Q-4:,lOaR8I n>֓^X6050dn2|[ nl茢:L [ [KqG d(`*nV^-vvX4ĩw_.RG|5tHz+sEe)ՒW6 R랾LM&)OkCHߒ)U5'D{R.acXJ4Z s }GڄT @ni֔`rc-!56ۂnKX \WDQb|3Q[5Ìg9,Ajѿl~緖iv >zčuw#>XDݡVQE^sc齶}>(^`cKh(~Fe6) qls5^R03dV"6Uxx[.,=C"~4 e+\'Η.$Cݦ᥋1@Ҵuc=(HRR)42YwHMV'__KHSWn[}\d&uߓr:F\AoZE;Mdx5RP >vUM z3^ӣdTըF-Gf 0Ŀ`~%Mc66L3/dÊ=8l<2)ZA1_e1 ZW_7$1~#IB.e }oXv92R(OgMl=rr8e&~yS%\9ʳ>4 q D=4UVؾ9||vېv3^TJR :\|˥+1zt>Ztmw } )|\4_9 oQ ^ IF/d t8Za6«: IDATCؽ}6XK^!QNP.{ HóHCQ,R2,N;9[|¯jʞŸuYȷxWl %[ WҬn>H(jYPgO;JAji-5I釆(z;[>e4rt֥ZCZM{n};%h{O/xDE74[SU:Z40k۩eԣbAr[6v,LRe~RF r={/]!Ql5Dg>J-iijd2+M DsQI><A@y{'͑}}ˤyJRY(tX-sp #}d.owIS  ըF5>~?c.\r_{N[Q[S$L*_nv_wDK6Njk!- śۺf?."PM4(mV%1M 8^rkt)a"8toxX0G$,S ͑YKkh-5}9l$UcP,w_iUЅ:ùWeB_)υ,͸ sS8 39ra{!7?-Uߧ W}$ڵc=ء[.pzam82rbѥeCMVV(K@d}_H~Pos.jkt:V2(-kyjHRi" mw?yCK-;u]B,ۦ6Ryi_ds= o<;`q%<`Ah r23v`rL{}`\̬s[MZHW4Glp=@x-6ٱb mu$Mؼ 4bS3 &eIN;'66TޫV~~εdH j%KZ^OIR˫b)ip8} U%C>"SczU5Kt_\ς6lqҷ8sw,'os#A{]-]9_1̖vVn[fO;GVj'Cfub:@YRdE7^4;}fy*g簱23q-2@皸$=n+ӻT$ygƗ͹8bP*(XըF5B=@?[G09w(]~=?\;oz:|lQ羓7Z]G6JЙ-#_J_Fx mDJpѳW44iɯFPݘv^|k_j!WZKc3,Z{t|(+ [.ވHz'7&j2T A`jQ1V,:%MڕFW^C˹KdﵜtkEWbњg_ s3 Y(6w ł>V#Ȝtf`?3t/_ .TPo2V,7LM8\YNtp{l,ͺܛi ͋I˕y><&6ߤl0|?xqi*= i"a+)3wԚ}^#W kW#є38QdTը?"0>~cR?SOto85[Mk{uM-|(FhLڑ^UVX_i\)}=;s歷O(i nF<{+sUd0VKf~Woqo`8KB(hi>X6ijiMTji]z_[ّ̈Vײ Q@K@O9,8 "Lh ҄GRAO=ϕBqqe~yʅ(&rfvP7D?=֍,VܤK)en- "(YRFҽ{Et:qEFp'\GTJ57鰾ՐM=D]3Qsx"p›qRa2)V߳hm9-HS+–޻PSa.H줗iif8vtlj-xՈ1VJX#n4;$`ۉ8㰽g ?P`qƥ^Ք2D I4\4~=D&_,uia_P#" 8yfܗe1;?xxUl˽<# Ҍs׬Kj1cN vO>Ìu0@`jT՟Cqr'8A\ /x?ݶzF&PqoZ?=sk[!ß_pYN|eg_ijrWyA|E0Q2l,DEUV=m>\[k0t99}&4=CQ474X@uV7~%Dk'L 19WK=K&sc̹ "F[«x w'vZ k9ZMk sZxy(TLΞhv +h=zŴtli*_`5achˍ}'"JQ0U5Ks.cA\g*԰N}*BQS*+Ll'VclKN3%5Ak뀧d((3l7ιM9+B̩ZI3.\ߩVч 2(8k alyB4 wA9jM9\]Ix)iLS.V$~AjUZF:=yűʶ{ ^KgiDZb]>XPCŵ՘ Lssũma|ARAnx5/]'蜾<3|a:fIS{HhU$24Ͷ|fz3$Ndf[)i*%Q)dTը_c:WV:O=^xbz0oz䃇=0z fl1Z#g}elciH_1/ک1ArA<:x'~݂WX.rڗi5alY~Z-;fGܭ$IjVJ2 !_'=WVx%⤕d7sͮ5bKЖu|0mxrQQ:Y@&MCo<աm1-{m͌~!ppi bnL=JcjRV2x÷Xn+k6EɺX?{>RR"n7"@sS.5jI i%Zd!KRP|jM,8=C2tcK{9ߏWĤ&#Hy&Cn'LЅVsĻ5M:KB{^RL T*ib aHFD ϗJٙ~= bqs>^~)A%i\T2QĢŤn !MS~w*Jutem+es7}'dTը T<_f|XۆWSy~i@6Nu8x-5إY׾z]5>@PAkc`iVtNsT Tv 7>^XKeG- fP-nOIGY(y^&q9VdClD׾=xƚ s8>vQc>p;Y:hAS.^HHh[JCmr 7\kHRyzGN3Eg[jYj:=C"kfjLR<rk.e!zc'i]yҁr[(|Y\&|ETT!P^(81o./5)Ł!Jݞ3>,R^k̄k"ӗswy4#M}(fJZCMQ$<%\VP1̝\p6(ӷTned(҃K7-w\>QQا)BNӰ'IsS.) $MZ:*2Jb{4uKt:Kcl>xscspYg tud:ᏝĜc]=QjTb}ؘ'>QW%Բ /ran>^C8Nod'] T+IajkL?F{&st;HIhݫW!S\xB+BfL)8h6w2;J5-LIH$qV^ѡ{LݫQc'Q~a$9cR|9R.gqVLXqo8x q ې1Q=ZfgPͫ!)QK/Sgp-&6(3wnián+jB[6v'\-ˢȩ%^voZx'\ja{UG[6*Uw^xbJ0Sr6 DxgHZvVr=:TdJzf?q<|)0ouPr4s͘ Cʠ,{u+a*ʾqp -͜*U**T_F(y=5kӓaD+i}O1VѬ奈ל7=w+ZaaZܷ%5ng i( =}vSƒZIp%k2DVbXIל=3w0Z <(!MAA몡dBycK3[?C pUU7+L+O&Ma Mrfæfz\Թ?x%WFˊ<\ D#h&w¯ŋ!uo`-r!jT՟dCB(??J(c:ti-Gz#!@rp)+$RU}%̇?/sbyCٍwwx YA.CD2V\S*}fPjʅ}ρO/Q]ta${[sn߲۲tGΞaQ~sV*7ʠP/ 5)$ZuYn7 u$JR\G]$6vu3%1-̓"tnW3.3𺴖'pмt#>Z>&-iW͠oh=ߣ1rs#a)قMd}K!W2Ywv.n05&z1з /ϩ .Zq&nyq-Y݁2JEűOH=F!_"ZϨ`KU-.O>ΫiLtZkzkf-)aeAhiuS\Q(PxիK3.2;ܵN:DG}_1U׼J0^S\O1F~r7?{Œ]ã{7Cカ=>ﲾrdef԰Jɏ;Ce 腖( EY6{'%\=vB&U~='穔\./K9wMÕ.Z3QNpjIS}%Vܤ  S3B@F5QOZ3=OĉiI3_]4?<ͼxc{܊pVc#G]#S㎭[*h>l62X? f_#sl_gbX݂hwp3}v3Ǽ, \/|dFɺh5ALP?xǚ~aa: 90\oVņ$:E]-iJG. ^  cqe%xbrX(ee3YJS$_e`c/wnu fna&ȖYc=֖4=>T4~ѡ6`@gZdͣlUk+ɡ ͔^h)Dxe9fnʕMnH8Xr'ܒ|73=(k@$4xVRΓ BO>;Cp}q%XJIH6L섦^wacڂ´ ͝4ɦzIb o}"ٱoyRfL'X7yFКrtؼ3aP~i Qbch#[*@_ v/*NȜŌҖٹ_Θ"MeHFXsD du+,Zuyg;ZS_Y6{^ar̥Tϰ/G\_Ok\[K8T^WiMg(\')ʆFK{iajܑ 0~i!48QjT2|v2~Q.pҥŧ?}$}V>H gj??VӳX?_l- '~4߉S3]u^nl16{ZRU;+7㏕HRS/ECŝЍޜL{|eYTьGݔNL,7m>7PKA~feZZqmV#eq=jVʑyrA3^sdZxEZpt:G+B@r,+ ad q%+,BFszW/>NO{Wܝ‹_{mÍ$۶zrarD$IW|fǰrs=>rL9)Δj!.NvQ*pϮqTN(s ^vB9$4zJKkHM++ 腖zc9a/ IDAT 4ׯ|@{|+Z/Or^ear}M,]ƫ:;x }'ߓ)>7w{OgB BPsk2YYfz 5l,KIbu3ag:.ID0txMՃi2_6 x^0=5r/ߌ޲lr?quO=M#5{mA;Ua!L86/KS!;f'eE~ BU(n( /5jH0[wrQ ad&דK~J&\ OvT$朆 ku+%5dpdlZ@NS(yۡn3SK01й وO[̵Ύ> ӥaO?f'ei%Nc?,+y [3t^Tp80;|aj 2]2]$ʌ%4:}Kx`s=A}h|NOܺz4jTwqZ'IOΜcm~=_΅ o{h/O}rIJB a @v*%UɅ\i\IYeӟB;WtAعN$Q,PDo onlBn0^s߷-eͲ;1ůn<Ӆ[cO3b HdRх~=R,Z8{ҧ s!v #(U6h^Ҹ1 r^`EkcGȆuS0T>X+s y<'Zrh+._s޳wdJSs;m~F  ] R0tQ,S2ڎmloĹp<.lE<0h8:aRZ++^=p{H}"A07pdVS!q0bHr$FkX;HS#Njj\&+q]+[))F-݁IgѐQ7aidgp]G[l0.vfkdM[Z(Z]̝eq !O5{\Hen+3lqVG*?r7f'\#V4`O yq9 R)ݳՇv.w7#g~js^cViaRHf70( Ւi!Pm8mV.iP"27Ck\J񅀭 i*g~mÿBN. 7 ׯEoLO@j>~G;ћAYECZA+C4g8w2@F5Qu~n~LOy|L/E^@=nu1<4_*eHTʰx{^YYu`]/XCqn͝OyLz8 N,ֶRn'> }ֶS=q/VhBq'[Ḥ_]OY6v lJ!WWb!:R*(&jZIS 5@C/Ͻ5͔3$&Xg{M?L vm%īJh{wf'5xt2a([IjI2s(dY/ AWfKh( }Tը{8H/1!¯XY_^]b?@<4Y^ն+f#lpyF8 cZcN HoVީW sS {_58(kWη鮔k~N2."NڷB2~(':&MPZf&&dF6H Og[/F %uNY FJ !qvq?]DZRd\-#. 9QwNqilG ^(`KqzK(qkb:m[ܼqi,θLd\YL3ew vi[_ۚ8{Ϝz.2,^Mܶ[wf=}cy##P-4r%{ZvpCKԑZJl4Z)ݾ&_]Mbi"͔~G>skPj>pfIJƊ|R}:-iP:B;Y|91=p3Pj+,ǒn,iX߾Hoj;a7!(f\2t)_̑SczhkyE88PN&ϳnAd!_. eWom\Y4Clď<=Y^Bo)5#n>f ϱy^[9H |Y$OHu;M#^ģdTը{PIͧ><_^'I ++/3]C+pqb?$(|?H3lG$Yk wΛ5Uzh-"IffR8=ꯂ| WWD,ol5dvߍL48N:wͻ6S Րvfp(snRr e zUh E=KqbnEœ臆nQMTƊzqDDi0_Gi`o#XBr}-:Y`vʥ1gzi_{Xf'[ľ7%5ƉR,,y{FJ'2D=Ca.Nʖ 9nt0kĢn{E<3r vF*٠:|f$RV%=-5Iے}J}{@3KZ(Ŋ?v\ğZY~vjHR1kNo1L ~ȬKOj uGT˒h4@6|` ׯcf|W1Fi #Kw 4!̖wg0q ;7%k:Sv 3 jEKFe4jTʨ Ţ|}G1 ݆ \Ν>>Bʵҭ[<`Plt3u4fQ_͟4ce3_6پ'BBT5g?N{󯳻4EĞˍ 9 LrXvdAi V;ee+k4nʉ`UP`:GʘHp %uzƞ kS=OGGm7_."rkzU СGr7Z6SIyh}G8\Z\W̺M9TJ҈c!N& U uje-[l 'Ou=0llfBq-a$gqd8,l;@aZf8Z1^{ ,\TݿDֵq"A|@t#!ba5wI 7֓yf};ee#味 .! ƚzE601D @וZ.)VyH2WɯɅiu-^8X"WڙԻ(N%bz|_gC9滊UlzE lhy9dv!-VQKiNOum-KY(qW_{zg'v O7 Xl%;_ рmXU4xBI3f т|;4ۆVIS<ֆzU7M7{/%q2@F5Q?]q4=??fr%/'>WXpanA;b #j_5QS*߂yNH N}_!U͞L'<70 TLկ~a繟#6nMe-P^V]::rta |_ j%ק^@؞" ӔO51!Z Lt3aK#kq*Tق\{(^0&Ie@cUSc`@;t]BKb{#(h^^{jw <Ȯ~w{{AR(REŶh'X&ؙ3ēJ&JR585*g9$Jr8Z#[6j_(q'@b߁F7z7{_wH?ީ($sk޸͍4X@=n),+ 6 P.j].c{XNCȅ 1Ij}a$wO8Y290=pxﶴ,_J~W'>9k p$W^< ;%atߜ vM:gǼ$K=A+Σsw'_eIޥ5fJsÈP9&Xrl׀t3.hC@ppܻL)ϩyZ ]snJj)GybaB=~gZGNma kX5 ;~7&&XLi49͹sG?zuǰZvG0b_>h~j~ kX\N1PBZZK=vjͶk# ~8Ҭ훕]W|Sk6M4xERkt#ww݁nt wd+=w wqSTzG&Dh.X~ut3̩K?]!jIgF|.%&^s/â7)JmPN$ ICB.\OyKE(O @Z~9|Cnحl|sYb~07dPʼ/9 VײRn;ඟ$2[D(}}P=m!N%aZylRR-ЕnWTk}F$Q|>V_r߼sFo!VQ nl؈d]Jjl녖MC?JNO ╦w0H[ Y7̌< 7VߏĵNJf+efee@'ov3xtxD(BD˴{Di%)_{C?D={.e(׾(ȇ`F_WY w}#p|ÕjbU`.EZh,(`n{rAP#oڦ!Ѻ H4dXְkB=kk"t+}VG>xXnoJ㡑Ey""\XNt MӳTj39*n3UxnrYLP~o߈d IDATC{ޙR5DDyqfJBnu:oĕ*L،2Ls2|$% Scyp.q q*Oٰz/\4inRA6yZ©KGt3lSz#k&Ea)5Db?#G$l.W7SR+cE߲ܢ]Mp'jIS)mZi = -S!? H;m["nmPxcq? d-Jje$y;` +φ; \RL//[Q;R(>8 #MD4ZRR2=Ⱦ9An{BG*hC Bf*,x.-M%kZ]1X{hMùfd̈́)G^"x֙AA)>'ZYf g%7 \OYde9/wc|rWAJ$]p!z54Q=C/f =,ǖ͖!M>@)mj @3V:Ƣ-&3rAqq!AkR{wA0z_15]A6$xڭ7S<Y_JZ=P MDCH78'3#c,D&ϻN a kX/4|6~yRNpg#^yx<<3 wz$ <-ÏUZӗ#wcP*l>i4:>w1A/WJJҏKtz/qsM7VɌY6؛;!6C(ԫ]i=}O}rE_j7ZNh#{YX_jb*nNKo^4_ydB_/y"\E=| :tW:ϲ+zea9!M%#ʐ+$4oz m:\.op`ej%ydM`[Rw&w$]Y>g8&&$.-x=53;6Ij 2XM1;ne2lx~a!,k S-&խkiuc;)$#KXzh%PG }?R$|Jf>̏9Y>LP*=\')0ZBw ۵5wwA2F\z}9Z"iAX{819c+uHa_k1ƾTS3D@5a !ۻx3>!<M8w^z| _۵Zcq+vÇ&sMsQZR'7FV4gD|ǧ[{j JtX|^mMioEKV ^n i6ZC/44چ=plwP x=6E)(:xQj }}*Q%,j(RkyT+1?cD(Joe(GɇhTn&i1eM8L U=I[Dָ &4^F5M|kh%V4 uxݧZ.Hu!lyʼn4Ɗh^T:LPTxZY{\86ĞѲ|8% x&Ĺ>Ibiuq^@2"dk?BoYC05Q()u3a6bzW#;v` BpR4$V}Y_3iE/vSc.ᇫXdY\jҭ^Fe6pSPPU\>ǖąO}fK}BWRhEl}fJ{QZF1ddc5R 4[(^ǰqt?&f[kiP-k-%qS&f`[& HDυ協=3.VR|em/?zrM#b]Y.%)w.v.4?*ղRҬ] :$Mݾ#:c>?x%,pְ5?nM31; H˵kp Oy.ߞh[:u'FHo.v5n Y CjU(hfQWƙ]5=1Q"[Vq490Ywp62Qd27鰴fXHб,{)giҁYf]Yw04J/EM?\,TPx e|z5 ִTTl4qs }W x$nOpjpi!a.rB%ԋ]. %#$o3:Qi3mՄf=ߥP*(©H\i=O6νPU,Gcnui|*E^61^ ccf+Wczc𜿞5)7JLF[vOQ.HCf3tlnrJB{:`rTG, [ON% Y]![u&7DqZB{NbY},R.qv _]F dw(:#Je3 #dE뙥 L4PKE+Mn؁HcH{VNyϬO,<{ׅM3;FGXM~F(&iAtl>^BÁ.T(wBI x%~T ^U4QA%.N,e)F!Xk]NX.jNxixFH!Mmj> b]z!6o̲W͹|6υeW6RrrEwZYI9CԶA'+E *r7Х9b\9P9(Gmes{?C1z4qq,:͖ay=Ek=ɐorllj1vYf'6[XMc{UKz`. {VJ꩕kFٕϹph(nKWCvQPj ְ'zLOkQ(qlv y&ĉ_ަ0Ƽ1/9z;ힵkYZKN^LI:@5r4yZE;3?Дz@ 2~eB3I'MecNFJi iڵ~_`flAg'ǭsm+M9O|#: 65V.n\:QB%Q4]GĝZ+Y& NG/vTK[mD= ·#4vVf{؞pa!yB;o<QN]Q,Iڥb|;*(:ڤ{1belja ;9ّ{bm(fZ {խ\鞫vZ m.z[֛)oH ۧ3F{}yVtra kXE=xcl'FΜqy?k-`"'YѪg+%m" clե94dVK{g]ZYʊrIk\R,j]u &,*<ſGxBz}C4/ n1n槽AӲ](%y)- jOCiޥDߡۯ& 5ۆՔ~tb(uyED\md] )9gtB4Z VVC|afj<Gs^h*Ք" Y;` kX/8'wkME W*^ztk95?ʓκn/{reHEzUȡy2Q햋yS@xBYGM- K _sON|]^ ^if٭-ʬq3;yқ:t68X:;踃;h))%I /| )"K?ps9.w! %LSizGG4+)b E}_jFO*[Z+%*"T iSK0aJYN^IY(In߼\c p]ifFѪB/3- )Q(I/Kvl73qqĆ5 $ #\OYZMffv¥oq n)Ju,`{0\3;`w{cE_(w V.ܷVÑ~blV5#SIh\OH4o#"Gӗ"_*E!轳n{/ԴՄF[n߲ge~ڥZ¶</"/4փkh6d닦[]Ec@{*eiqIW$52tba9 B-~}71iYe,2d'f臥۳4;Fr:y/ȡ(O䗢cU z'bۜ>g.Ͼ+' ߵ(吤Z)>ͻ01LwED{t8.a!6ƒӷ , pְ5yxmgl]~3g~~ʎaeg wW>xp y'di&w״5h:**ՙw,.^;i'N1]4(Xo#V|.εo`안9&>]vΘo}pK+7c>ˆR7,6ot{{]ŭ\ȆYxQ{7@\xuSCpuQ|YYWXID f|fK92#ǹ2n]x{Ͽ>MÃ87چW$N_8s f;~ ZB85kbk=BjrRk.zOA2F6#MX?N"ԕk)|gS,SR!ӿh 5oi3'Ɯu^-e@ )*,j:G߿ Pk5[)J͖mN *-W['Cq+Xr-d%)VW,wϸ4;VW sDu$piXXN5<gtDпÃBV62S8S}x|tюdv4\R)&P? :lu *ǂֹN/=c|x  q\^wD 2I*)ZFńQA|{'0q [L TJqSdqrk D7^[ٗgy;#\]L0ZX qub0@5a F=|_E_Ǩ!1Qr̙Soƿ^Z3 b.ߣTҊ3}Cot翹"N h[}ŏHoyd}%cbt+/[ף; IDAT j)WhVE7R,%C$XQl9y1텖JIsfJ$hvEh e;-fe@oe;ɹ nH nX~|,Өo/3|%5]՛);~F %G:rcG\_(+ρD+au1mXN^χGl5".db|eh9+9zZ-i4nG?}C,MSQKgz]1i$\yw3^(E?Mӻk2=xWa4!j~ćQTĉ|1YkjBYr4,n DapJD+Fbrr&4kK9#n+$ŘsyS,l!xiκs5W{Z_'G )~j Q"&3@5a K\- eZK2>ZY%AUpq6lEsQߗyo#7 7VED!Ւff‘d9 *Mp@$:ӣ7}x:"Dg© m m=26R $b&N bGHe+}6"NJӋL3nZ7L=❨;O9~?l i7:AbO5 ebKJ[rc9;+aoLiܷZ &SX!sssJEZY4{\޻_[E=PCK|O2SoDw}(-z-kݙytHZ,')OD=fʀ &#U ot="A95Jszi"Kݧ>{cq)ISZ h(uu`neKj\lpe%h"͚x|P.9W+?c0?rQ'4;vgT8БLuZ4S uw?Jq[iW]K{F}6nykg 'L`m3kK='ws[Bf#kT Ւ̕i܏>7쎢XpJc!&QtۊօM7ҋNte#ɬ7{ɜ{﹒3ђ6)/{==ɨ6I=V.uH+eOO촻fpuI(x{f[,j>06P -t0޳TRVSFm`"wAE=e3.~Iv =_YK=϶fpbD ZQ vWٱ[|Q͖h j;YP =WRQS;x)C2Qv^M#A#=F([{05p~&:NDwQJ&10ZV/S)-'\d.Uٯ8lEsѶxAkaSq*ϼySҕJ?Ϳjs/>Hhr:B%be18\>v,1bn% qJ)T,u%],o- a3z $/0t!.>d1^Ź%Lĵm5a kXou~a#G~q`sΞmP4XboΆjNW'G5@5 Rq1^,X0GUl-0\l>WK#vPDaFhy=o[j twٵO r-ObZBcS'Md4DlgR\I025ٲzd^ޢÇ}d_KEFjH]zYX(v[N_fK7 u=Al…"to@rUVN8vEPnM fbآ1BBk8}9~͆^ 3yGH]wN=.wyK,וuCx5fjL塴8܃eAj֛)qZL=^1Ԍc=?TL.%8vtW2<.Xr.J/س8TԢӓ͸Rp:Yo9y1z3NHh)jU "B;ߓ+]w 2 mGgh-al<j_q] <5Z˵8PI_~*x8Ty_)02G'iζ4"_ǩ{wE͞l5B<mLjɶQl9}9Pcޞh-K/eATӯV#>tyN`l%m\)\&T8 n945-ł3 `ٖɻ ʊJY(a;*Ʒ$&I-ϟ8W7۲S>.~@oyʽ53!Kw!{jEp=ӌ- K1H($\ݞnR ,n6z.XI>Zħ5VKhμ W{_ݷǻF' S#v 0rxGgYH= ^>dȨwL:Yf)=Ccohw=-I ~%I+ee "NDPRG|Wz[~d3W$u,ߓn!iv) |u=6B4"􄫞 ;=˅5g.4d3Z,~q%ͶceJQ[m0WQ,*aJ06kFhV7R>ÊhYPSekn R*j U7Rg#mC̭lHjzc8w?4ݞ9]Dg͎$erTPP.J.]uk@A$ ZW a|<{yBV,&4mzMS){ E6 b,3:4 ]Cs]$a#O_ZMYoO1h-*ЊN %µS\Zh>UY~qqVfgy܄Pbe Q-ǡJ (6ZXmX\KSu|>!I%eפ{g E4:ĉ :w>@&F( +)I*ׇ͔Ȱ5aycnNw8p'(Lj"Õ+JsmO3Gm@as~VǘbLlЍZ>r~ėr|נ3Q w"I%4{eI=ݾaupZ<8_(k\]\Hxcn&@^U2L5L'wwxZK3ܝjǡݒY4♈+ / yC2a kXoJ3[k##?&ll./; )W)[K6m_jnS{EBAgR+k2;l6f|Ce$/I%Mg|Zse=˯}Ş; -_O[s3㒣P*hAt4Q`;g֥\Rqݸſ@r&i]2kC%gjVg޴xP$ -o{ݜ8񺃵gL-v m+>?2RQK޳vScB*"Yx:e;ܽsw<G[N봻Y0[l wr}_|oK]#+7btZ#eKњ ł]O46߄{}qceb3Zenҥ5L啳ZIs];Vuf~Fz% t1ÂܗcmCw.D+up ?P܎reQf A`zĨibJY%2Ex} u+ rP#?_}seC5;y[E zk7#jEqpcb$e6oj;w= 'j%Ϛ0@ވF ׳)3'CV7 d#Ɍy_hy q+K wbQ=2ֹ1w?>3h$V72a kXz8cnj.ap<ԭiz:xm[@훓|zU3;.$@sGxǽa6#JwnB|eI^fBUGϷ3咦ӓ $N8ϚRIzO[sbH[?(bQ&+k&G5QlN_ٷ˕tߧ^r&]j#wJ݌S*S8L<>OTPx38Ք ==b ȍhPlP`&J,bjOSJ CLzz*b֨M#ދc6[f'+4T=G4I8s9f.w Ҿux qs+HMÁV4BENY^Oya\kY\Ldyf=[js(456̈́e3@zlDl-,U=,P #;` (2@7v=R-ߒQfS74iƢ zןcݯR@!K7L{ܔrFsC_v?2>KroOngvzJ)3 $ԸKb+>p%ȪFlYmgCygբ-7GE!vrpaPn_fy0va kXC=$?߅lllO3?o׺\݊z܊~x g\GW/opKRNuBrW֧ǝ^ܒv0= Ox1S%8V(jFVL"ʚ卄ѡ?jsJRnIƉQg^^ߘfpJg\8}+^|K)Wnǭ@͹" Py3':qyS{Vlr-5wlxŊ7vd}{1coUO+a@ 6HS˥Ŕ^( K P1#sa݌`{:#ui?9ÉC>˥o<5 %ilF=DYz"w2*}_aPX_<چB(">GreIRljTDX墦1E֢P.*:=Ѡh-f kjue$'zYo ^XzeQk| U5#|^/@zYQ)_J̸ˉC[Q%~kaQ*G=DWmfz ݞ"xvvF_ɈB$tr=HS##ڼfMsp/_ IDATqG E0,g:P xL:o9Qd)5~n;Y.j^ ;ش7P+-AÃ,loz!I|PJal)$ӳ*Ƈ\#B*;־k2M>x=l|*%wԫq]4"ٺ6;c6q9hAcPhqOsW1WFso5Or]ZˆJiEae0֢_\s^>| ^߱W{W{c<?0Zܹ?K\sŽiq+yq܏?>xaZeXX* 4Qlabˆ}p[%jz"Z<{Edc;c>լ!wr틱Bon+¢1f;czמz_TK}.cuy;3Y =AzE箧 jM PJjDs%ezFԍp <>Nh ۙdFGמ^֬mf QĚXae6321Ev /Zk~OwA&zL)ݰeKs>"T>_[3)Gؐ#%VMQbYyx1fm(}%,eȽ72qiVСYo&\w^^OϿRi(EcEm+o `F`֬@tP$9?M%Ȱ^w}*/@nϞH7RĩbJj`ݱ*HSv UʚzU1;i*7E|5Rw紋ܥ*W*_)mM fʕ1 zp!a1:P߬j̹+r.Fga2parag=q$)/B76N,7%ʼnC>ᛪu]f<Ɔj>lro\dnR2"|KS5[HBrJD4 PȵcKq!NNQIe7_Fj1>ha#rP>N(@#E[x!'= 5(LGcޫo XRJycY.ĉejlG\.v21޴٩RA硅zOhMc^w;>~ɵ䓟Q/4-@Htܼo @?ʾӮJ3ÚjI{YZ4zLV4?}…%֛;bS څxfܥVV}*!c$XiV2FQT v2i PMQƅZJK''ǔ fu#゗ ShpM4Y Vw_Nvh E%z#g9Z-ڲ\G' FkEÆ{y}5G _p- &\ٟ:8뙑@QU9Jj={Gjwo\Sw {'M;H*"Ȳrbe4IE7@q(}S.xBN0ƄI:0Ν%<.^ib f=zpu7 ï} -/M^Z&Gnݐ@';k >p g?]"NvbA3獘j79oaP.I.t0yr\dq쀤<(TQT4ZBRB7qbYoa}Kt;n)ĉq V/cy#cjNůYodOOE)[1|(sn{ͫMmHҝ0dzc<‹dS.*.-f72n?3;0\u(VAեc=s \[ɇ:94Z3pyd;?A[_}SG',,+'C}/${ 4;F]_CI)GV{7i+n&F%2PHSo&pR;s;[Xuz V[7ڑSuIJR)fzwzܡR#TPi{>堞Žt7'p 34;n8z!<!bvنB#c&TԔ)XT[z%Φv3(\X/Jic Jƶ8Di%Gߕ̓TO_ehĢPQDƵXbOjgP*(͐o-k_7:@8y7MY u;@O̠ۗl,-9ݕƢ^T okٱI ե;74zƁY<ע$9_SQDhj5{@yW\Ғ׻0|LT7GpͲOi+˖( r_PT ƅndv,qW(d0 sM겤gق)fqMHbjԝ9A`|Xt)B0XB2 |w.A#E%NGěӛQղ>ndtk3JAs75d[$Qb90?|4˅Gxh8 2adh-Kk:& Ѭ:ppG+ҋd󱶕,j7r~_Y#+g U5J ͌FNVT ŕ;8=q<0-m.lCKoyګn߄(>6NsАVR E#.>8Oce<8iyGkf6;-tY#(> ~p[zEcO0%Nl1^lgtBYU> Oƾ]>Tu ?EC1nHPJz^;eZB'4xZ?0\ӹ=hN?j.#7Z%EX(&b2x{ u- "Mq#KA!$ Cїp;O ;ыd{*wFaqŴ;TRY5~ _{K1 5V3{>zw{HI+r17XRC=PhT2ǹUYz$?S1DY|O#mN\_$ǣ+ԯ3WN2(ipCeXYOp@Yʉ\+ XXΨ}^ pzԹ}wqC;u+kbP- Eox@:3c &빊h,y٫ګ=r00g|kM~ ϳ?;13c/cO*H |(Z Yۏ$??u[-SӅUt-VQc*MMUt#Vl[Zsp克z4TFbAݒİCݐJ5I.o:hn/ei/u{ht,=T[$dvgbX0}'piI;ix]=_q񋇨N(ߋ/\H]xܻaŵzU[^q^W@% ѾICsn)B]c;َ6~.<3U [j|5OыŊTosiR>Rsrt/R\5Z(fмljӢXZ9an{p>ll<-H>Ȩ7 YȈv%7?_8\Rd)hs:<|}ǃ[!`f>F|㞚F<س^՜$ZšTg)fU2̨gl[Es [VګګɌ_qG,ŋ˻wy 0|-'1[ Jܠ>?ad*U$A bSXZ7{۽h6Cnl{)sc|HD^Z\=k#CK)VR&ݗ4]<81I)^n|:&qJG;~(x-kr1\'E5&cGa4CU& Oqʿ6!^x3DKZ,t iRJ؉N:\_M94罪bs0>'w6ީܭ N<š|.8dʦw effe}o)(}g.G=HdY~l$Ƈ4p.ѣrwӯBPp OR ƱPJM'MPա\B@RH%>c('zpp}kyj̑{ Cns 7w4'_qGcYo Wƞ{V{ 784z#C̹@j껭- = 1;#?R3fPͷ#TK~vȦ9:|!{if8>?̚kIuٜ)Rq #!t݄V;!iƆ[Tҳ]c +/>P.*F@`*At;њM;ϟ_[s/ܡêTp5adRp1-%%%:cfܣP +rQI7-@DE!ؿW>t[MNF1 +< 2L1]zƹ o#uV.K FN*A&1Ld-zEw4#A1P\0Ul D[FjҔ 9BtdjǖҨdrTE>6ۈ_ IDAT[:4@WZ>^d)r,BJ啍Ji'V`1E u9;6 ;zJLveG`]E|[ DXuB{F(S߄nL)*Q((/PV8o|jfԥd迗d## G: g^z5PR.(elH3RʾlonUd`dٍ? gF+#r`mKr`zlۚ*,/\{V?u}_~gŢIjc\Fb <>P&p-p\Zm%HVN6B Z8o$z5mMy5IQ)XOh&G]yw@Ct6mXh81Xc.^(Cdj@_'`tjwZOIFyIҊȌ'27FƝ]Fp|Fb7ʄ !(4ŢZ'T1ywZ~N.Qբ[$4g \KxNB ^Wη.+lrKlm/מl=ӽQ8;.2gLDZ֔ a$ ZPҜM͹'R(+NG:ɥ&-! o7_+bw:=P)]UK7gZEsrMb!pBP6oPcsF z;DM2\IoyCUn+^{7tm%es6HEV+H\;te*Y]7ĝ()\h$~ytRA'1}n gmXX8q]K? rGit/!0y8!P8T=#uNF}nF{l5W#tPqP#e52mCAVFLxA {eeVZi- cCP\֚m;j+ҿ/$LkƜ|SzSN;)|s6Y5tL!P|Řv;r1Y2y/r?7ll[8v<'n+9kA9<#Ep+̸éK QW,YQSp-^oySs{[dS@=Oaro^oƆ^=ы,'^=}vнjY Q4l6-IjpWJӖP #Ce7{dj I3-j{)Is]$Yam5E(18(ͦš5Z2LW>.c.L̏}_T{&ƠZR9+''x;#'t_gckhS_aQv۰޷HC)F*l-b_ޞ?4Vh #5#u}COjè$u1N_Y ѯ5-' &=6/)^.ٙqf [ѐ+KPQwk?\5ʲq 틓Ⱥqg .M&HÍ ѲtGOKEƶp ,O>B{FUີ &u,Jӝf:VR2Qb_ur뫒cy͎h~W@ [Må &w lwDc[ AIi늣X\W<R6(=:]#@cdo3)e#opC<<I*^d2;R*:Ⳳ 15R\p+Eo;d0cTHvBw-XyHtn 5f̾<"&r7]:BauexXhqˁW\GNϐf/O {W{ݾ Nό|yÃ?;H o<NG3't5é3t7%Gn{+2Iwgw}ii?P>4?iۆ~eU{?~JgӸ!.RnU6%"}B S(ھNE=LtD|EhԂ5.\Wo)Oyx_,Mӧ"Mţ6L:y$q} <_ RFR+'SS",k >0Q h Gn5(_m%ҝa1W(SPO8}N/%Bٹqc2}CY:}.[-C1 hpƬneL9υ했xG"佁onKsA1[[m-=>n,of,mn[:$k~O HL 1qsr+^S*9&D"چ8 mr;dpC$d'ɳ>Fj ۊKx|Bh\s_IE6 oNy*|׃4׶7OI|"sOu_4~Vo(C-qz'5{j.\K@i&FO;Y<קxy t@a"KmhĢSQ h#ҕfyB+2P@ά}ñt!>v_b7ЅA0u#6|X_P:}[^3+K)v^[!icr C74{ﹿ!o7ujY̘usif 4숔yػxQ*hK(iqq8X N7Xod)4V4/L&*EĈB9JAθx-ejQlt92_wq*]ܡ2FIT"6v Vq,y$(E_p+NI͍T;!ME׌lrl<@c1:|zg=o/2:O͏r;_w%ƺ%9JaVLj}ߍ|_N;?oֶ2=`,8Z6))zEؿee^2We{"X^Mx|E ?X׮Ex.["I!N\_K_qp^^큐]$C#ܜ{\zʰi>Pan;Q.*qOouRqi0PA2|ᆵ(4/Y KkcD _'E'viuyn(/(ʃµma2c)4Y?9[]U@9?u҃,ZWn'`O[KcH~mFom-б%̳[k'ĝGI/FPhز9{>s-Xg|h KkfAd <--od7<ܛ[|-f\Ɔ 5<]/[̄K)xBS\ʹCx/>xՊCp[r&Q4H.wؼu&a,팅&3{]Z )s9E,bA@c_[UQ3-lolz^d(Dr >pOrJ.?iut' VZW&p24ğ?x(d_$t -;SS%O=3Rssx|L7t ,Q_H3.$b}xFF 軒@j`Z@Hd*~УT]kR6 r~'^|%;*͌KjV62:}Sv7d5)EyZ唣 ;:ϕL3WuBC)zɈnc{y1!$Z&\./tZi6//R+uM)Geבs\ԏTѱbP:BYZ7\89q.@jS\{lgL8o4xzA޾BOVV]_"GΖ{06$tBZK!PlNG49zB;"=cZ wn]ʐeh?IٌPL?̼@$divb˙ I dJizw?sx[<(77n(_٫ګbfÐ$k2.wa iA/-cT>KdRF=PI C<LmEwKV7(ó_fo@*&ꆩx_w2927갹_&uנ6 a溤gp쯽pYp"I"S~~Rԩ]ƆW*kv%]д%;h_UԊvZܘҋ [Kq~|ȧܹ4"݅Սs. C[Պ<9R d4?{m]y~~n/ TUB*%@06 =mc7=qXnϴn{֌x66c  LF!$UN/n>7s{U*H_sZo޻{y19yo}v26,tţA7R-G-n_sN_~:j%Ͻ;t[5R?^gQG?a1pcNHޗ$AX|7{ ks!)^qK}S_((?716h϶aWsaLzwΎ, g7szS1޶^(xd&7V/Z w-5@DY~}BbNҬTiAh-^jաV!qz\Z#f<1̶T¶nC{"XbB`4*?/!N 6LL![?bGކ܊(Y$LLɋ7Q9*![ g&&Ю{7t }G6umb M.G'z"+jnv([m9E5ԗ!M?s-,M4e|F6ٹ凛q@ޢqr96-)ω蠅hzO44pBydhMb i(ZE׶ #b::`Mqf1)E7OO1q,-{jm3_ JO8%NZdv IDAT|c/]>d"fYwә7֭Dx߳_b|?cڃx%K19zGt?n Za4Lp4}"xlD4Tgxٳlr727@R o3\ |78DՏy2&bZ"j*%Y}o)'Dk1}ٌ ƈ"1~Uah՜ w/j5 –*8}ʮ ,g l۶мJ9j nuj/fB ?FFkqW&>w4!OYJxwdK3>AՄ{9$ רqٵUҪ Y9tF(\XI& /cQԨmEaalL_kV(Z6(N$Gf~Y&<ϕpmqHqeӎگS+ ^CR"cViYZ6GFI:X-zZ2?PoNH{, ʑ(}K%!DR~sg~Y4 &",?_J7d߸l[.tr FmAC"vla|R"~U\vqRh5u\(ILޔUdX 5o{Rh -(@86D_bgVӗ1,8,G(@|3O Ã2slNE> XBn^5?l̅eX{xv7Y9:A3p|Y,z z{7!?`ɹ"QZ/]8˥$asK8d0HM6pfqYOlOP_KSř0u*[\|Fh@Őe^2T"őaf߸hu31-ǿ7>9Gdlj wt)'9ߵ vXؐM[ 0g]Bks5NM~d,4&M c9f"X`cOQ,$t*cQk5"`߈J=4C69Y Jx~U-~M/񺛿I&s jp7ܓ_-ד- (ȱ-p,El$> s1WoulN:L1?"uZS+zɐޢGοK A$hu:ϷqRFcR0\׹S QNH9ϧׯφ\wVE=,պrp+o"Qe?l@Dt:)Z5~tCm%ɼZ'ls Bٜ峩<^o\_Q6 !]8OT*LOC6# ͮ.=ZJcbfKs=N8s 3DyG%%d' n;N%Ik \Be_cZfc}o>B?BXe+sD> q v^9~Rǭro(`U>*c/+fb{" غd=p]ݡxS(r8;$\$>;Vj.Qmpмp6hu ~@EGR[܎EymWSK GfnʉU-LCxPLxqפr|Ncg i~a,Yo]bhI`fV'ͱبMIu)J%: zV"[OzKJ~?>ܙdQ*5ZVyTA+ٔOGz+ p2BINcb1-s=n%CR'Ck(M7W(zJ~ӸsU_kBV1{iY٩T_;xl7mz[oq^ŧZma[zS7}M(AP1`U،3 MZ&nHw*0oWfB!7 O & va9ƹNvO_Y6vȍaq%E]bNŐS! k1; aiIۻHխn]ڃ yneo/ry'Y ?o@DTy;10 [m,NRJRO]A Y0)?HK1w6ݠwm1&b`bt g4壟S؊G_8D Y[^!$?ݢl@Ҡ!J 2Ae"QI88vJ-b|-܄q.aGz7 "HPT{=i +Qa-I?P_J+[Z=0s4m./4,Kl (bl}\ 22!|!_VfVM=`M6#퍲eAօ1g{06 $<OT3M?!$urOQI31+=(p i )cj>fWVKbOL ˒Kio^og3̘5ajB>ע2ut6|&8_i- ~J)ؿ3Y(XJ .jJy͖QN a-31Ѻ0seZlސ6%ԛqZ4QkVbrMܣ#2):Qk˚yta:߭kNE̞oO!YB~P%Q.|1 ;$!>\eFYQ:Ng8A "b[EpoD_2{T2Ql&5-ߢHr` oŪl:: ψD?5Ľ+ ŜP7Lso݁kz>|jtջHZ#!p'΅3Y/&zfQޢ t(#CM>g&#n?um65v\>Mi5~܂ŕU,(ma4٬Pl)YOW`XPo)Ӷl4tҁ8bAŘĘ(iV[B҈RdK՘tL)- *07}]XmLm;LJͪY,ކ!k}p6 =IV,RQDy}|pA)`bs4}MX3+ f=Žy\I{, I-zҭnu[WA@y[R)f˖P0Fo@@6jB?/~}2a5R~1x\L_Biq[4weB2бNB wD"-.\yg\*L&Ŝ8,W$԰l[9?qK1' >T`/nNf"߭._4F]GۣTMPJu(B4Zbe\Hu:>Tz_Juepۼ\s{Gv݄*Y81!qdP硿bEr7Kߧ7y}R'׉V ffx(k|P\'9~:Y3 Z.o7I +rh wܹf8,I/oؠwBm5njemgoQ2z`ڳ9AV-ĚozESRLa8*'w9b>~ *Y#|L} ŕ^K,.8[1:òuh[9B,lK,~{hd=ŞT1NCY%SA͡0/ ²yJLz[--4H][xyƝNK;ɾ 2`tRe5qJ4[B@5&f#4ťjIadc˕ku\[񖥙_"nj7VؠMߨ Zٌ-Y<{$)j w}s#RJȸy$D,%ϺxpؠEOIkS Kh8!㊆õEͶ$/8Yc 2B[Y%;Er0hF1H7=M dxB-[$L-dҐAA4#Z7;e+c" Y \y-U>\kk&t~֕ؠl#9iV)}~X R*ZA)td3~D.+{i1 Y״o_ p˗kǘy~3bk'Hխn]e '#VW_`x CCV菾a2qp:ll -Ŗ!8?uj-apA'g'Nh۠yh}SUcybXB 0mk G^r- A 1' mHޝ뿯6Gqa)#cNH`ֶ} SbNsWacit~OԡxMhl{jf"ζ=3EZKtfd=eşs/o=,XE>/ķ9Ѥ2%  r~w4(TXKVHobsLqP1BnCpSaӸybFoɓ9Lsy/r%Z7VBi8v&,RBsa:ft&Ma1\3ϑ ˆfSN86xȣ ]6)jLh!TJ鉰:F\F"[bǖ0rb߸9˚XS%-W [,9Ud\Vq]Oa]FlJ;z&82aA^kXmEpa6}.IB6زLY\tU!5}yFP::VpmFl!#z(Zk$l҂\9zaRI鄕vnu[ݺ1 1??AkzzX]] ܞaDqG={OFrx8i_iFmc>pK)/Մo1 Pؒ~k 㹿@_YlVc.żx6H <M5&e)2ZDݕzC46'.W'^ޠː"z+usCB<(EJ ]u|T25bY=`06P*5 54uH_*:k[^M*N8Ia$@խnuz(ȇ>4Ǐa|m?O(Nú\q!7 Xolav;)R+*- ;ܳM^pRwh:6M߰VY;],5alqq6"Isɀ}.;8/\̧P7:[YlيGk1>j4-¹v.N pq&&Bc-98<~{Z׸\~X۶blM_N@Uޗ q> .=rY؝]ls8۸cQ}=l#Ig<N:I/g3W32OpA2DP_NqMWԛ `]#6Gdx GEiGM?0 ܼݠM+,Ri _,Nhl)NؙZ™ յKPUC i0rNdS+C!s*2c )i!Qp 1A`X\;)_~ZWKn* 9gY\($ ROmĻi΍{6q%RIHplk{tH?[B=6  ѥ7|=m;bz8^&udhism7Z2`rM!o(5;#ȮuT ;li j#GuRi*uw𚉪=S!BSK߃ 4:"ّkVźԥ\Щ@2YkMZABOF+X\v[fpm~{?[\Iҗ쵐;ڔ H>BH eL-_h4j bF-\Wqj-&Nw+j0ۯHEsKT>1OUwHÏ7)E11_ޠ? }% ?rdlH; jfSX=o+^7b=;2PoYx.iۓ{-69Oq\'}[FKܕOG hzK=z,˯}>ܡ!bLSˬ]Wt'==u-N @~NW )O/~$YπQϯ9<I]u$x0,ĬvnR$Njg[ܲ7ÖAavؑ$lFSX_YK ;Pw#n>+%Rm}J# uc|l.NE<8rKp&or&"T);eJ(Jxq0Mg.> KPHi]^x^g8y=$I9Y قFVVy| ]yӽ8 Ɯch %qr.w`}]V\A<֩$M]\Md#Iq0#auM'\W p\^9OOB!ؠ%i*r;lWӣ!72%)8փލo׍\6 VBaHq'>˖R8括VVc>u=扉~ï(d LܶzՕ;pooNܟ)5x*4(@>[g7|ǂ=[mJyK՞&[~8L֦80I/VYi64!˧dO: ٶEp&{{ӣlVmv1b#:w]J\ch4 4eл\< KMCD#0$Soسfj>s 005WyCkW4 nx'?:A:!)MmzPjLNЇB>Kӱg"&"-و[D1z-j7||E7}Jq=aiT^Kl0kj]J[l%; k;<+Ɯ6$eyjMl-iaIѝ$(Tk^mKVWޭnu[WEA.uZZ9q"ap4_bs7,u7r=./ 1F( F7L'Žga%~/Ҷڍٖ"WT"J&[끲\/'̆{]yOnҭ̄)9L'՘;[26sn*Č}j2t[Z'4(Wo65f83-?0g1㰴pq&sϮSqhu8j%A=We@Ka.7}{憓yɭ7&[L^a#hR Ms-'KCoC/юi47WF!MWv [wx' bdb2iJ|kj5reFW폥 Mڑñ(U5 ˳!K4#oS-L-5/ Wvc?@XEo.0XhKlFwNtP KA pBH,vb}ˇfKq)䤡mk}j!53ث`JIOe C(^ VfB- l ZTb7I6PòN`uM\i>^C^3}? Q"~o_H>~hX^Qx=nky1B-G(0NZcmؖ"NuzxlJ5X_ڙ'4[##uudXXI8?i2 Ӳ 4e8~!;Du!,NODm]KC3^y])C~X7h Vu˿|wCO:m  Pw8 !U fDNp"6s[~˹fJPG(4$B!Iy˜C 9б 6 _ l,E&Oð*ŕ{3Նt8@PdP_=5xk 7$]bnN ]GVfو;pxoj6B%ƴBo0=~w = n7%"hlMC1o}Mb$@Z Y,0:boxuɦ o>o1 =B;WR[A G⍳( i]q A&%FY!c| 4RAjU{r;-Zaې者-rYiF+l+PF͕T-C6[myI_רltvb`r_3rFLQ:gz,sc>}%! 2<~ԧGcA]ՆBUDȘ _~HH@H6RQdWS@Hf=z+\xN:=EфȻjD+bNϓ#\@RWcV*17F)R$d:BiOW;7! ?Plv5J4ZPm^ww$ 3!υf0rE╇/v_Jm &7oA ͢U sKW!,-zL@H7RbǘMaM'}sY~ # aی Y!~a,ż˯}8D26&(T{E*(oAIX#lOM+;(b0WɸBŻ~ )+kIf_[yis֏$z5l_#끗Rݶ='HnBowzTk Ok' Ќ$FlV׹ b3o1:`W"C!H]R$a߸ɸuw\VPTbV:tq3oZV0=@HL2Sx?Tdj." By{e^=u?>a\yo ⹐oZTCq#8ӣ cc ׬CA±eqZ97eHM/C^_wcC]e9|DjMB-GOʱX?ۖ+[fxea"T2+~ S*ZBoixd@4} Vխn]wY7Q bs~5LZMPZnB.,Ēǡaj> LG o/~CeZ]t%Ji׵-_(0V@4O%2b"[*XMoXCͿ$')38GPlO_ Wq#nYVBI&J5!JG6֎QULzE\ 4PFiŇ*Ws+dizL!gQIc df_FWA[[P| ^sO5ȧ)֪ 5n)X||-D33<ϋDD_*W$!>uQ*R|o  '*:ZCj±/!,͓eX! &,DD4BQ$%Mz$MS]i]{(_c$BEc9z"$X櫏70-TF:A/p'Ҽ^$򶋙JSmˠ&Nby-施.ق.[dbI|BXҌ49%M jA(OnVgOdM[bWҜ,$?쒠> /Ƕ6$룧h'^̄d] aA+_K ` ƐE Q$Cs Bi-dWC0ZSyPJɀzFfxhFpDg8C V VmrRLX1 =ue><'w,`P,3K+kvL\qةޡ4 3t"K? #R-J%(YwjY4)]wT*&2f82Y41d#>bVc+:IO=ƩEmp#ͺRıyyx%wgi5?'y=>=?_uCNAr>~z?m`O6ՄZ@)Il%жqj,Ô1oӣEQj;-O@WԩİlDfCy6O unbKz[FQq5Dԓ p$kx8mYYwIO?$O*~w $(Ơ?q~iv)NޔJB`iYy5bˈ̂η`&d>sZܗ]Nf; ղ&O%X6Z ʰv IDAT~ѲH`ԥ4d>S\|`c`!b* oWżN{'TC%c N] cͅ鈑~I68p 1{qW4IWb|3ԍ+i}V: 1}R`U%[wL$p,cK狥i5(oy[9֓g%h7%M!QE1660Q /)-x9邓RZk@|.@gu@ ݬКJupiʸbޑ,T-4΄'|i4 /nR*jXt(٠u&5rV6(ZDi(f#ZVXXFpL@;~h8u1$1FKNEBӣt:=|2|}qٜ>^=wWEu䧤Z" k:v7Et)\R^έRieu3eلU˚Wy8+#@7;VIpaե_T.{0ObN@W"T P:hO 9B`!C}Ve8zÞ^Z@U([qR}; + fmfm0-TLPM1ָ6~P>=h33Pոn',D|⽹n3F-.̈́21W"Fv8qgeBz{"bM:&N6qG<bN=EWx/G3I Imc J l]aDeɚqc&ew&W) gDޒN49Ӓ x!oڰ"%G{asϫR1(T9`*t WLþ,-: /{l]Cb>.$ǡT CaFmUA(6/|ߟN~]wқꌫc#piΏ7m/=fAxⳮ?^dr&HC®Tܵ__?ĶqU28[jeݭ+]qJv]7OKIoHrdQ /P=F[Fnslá.ϿaM18t˷e4 c&:uȽlBZ ˺Z2bK;ZO/לS )뭘٥eD_Ys:[cd_y82| >#e%Wf됍c+cl"nc֩y9F6P S I ^[:y[^P.&nj+kR BG,{E q{7hDRԔ:HY-Mn68~: NdĊ?hu$(=Wcp MT/7]w.V=cgj[ C*%z@pvhҸn. s%Ȁ B204 e}ۭMYgq/!uXmW3F2tQN}\fNVwy-fˈ`"1?P酈{PȌ ~NoR6k6k@ B~ 4 gy߼$Oʖ,VА4:(/tص'!)tes/{ vǶS~(Nug-큺/}ŇޗgVZq 17\(D̛j"ʑE3cS,ӧ żazZ{#t M t__|7'G@6#̷ZO6_}%!XZqq #;'Mg" msj.~lVRD kvN8Y;$u"W8C6< VFx!K1MCQr19w53ۍpVbPE$fnĿ>~a(P3q^JO?V&NH+5 ]1p[2= DU.hڗI6j)ڛu+$H-M:MM# 3Y%w`rҜ0u4l[7r}dc3h `:F06$fEͱ!߷Օk-CXx4nukh\DgX0>t[109bsXaph/i\_B: yD߰L_J'|/kscI:SJ@K[$ @Vo_\k>՘Zj㢿Mȹ+!cV/u$PL^1FB#ژM&9Qc P 4_6I \b0ZKdnC:ö1`_~ET,A\[˟6Yɦ\Щ9& /k$LR%Gc`y>3zy_xC> ;鹈|Vc 'h5( V>Fs&'ɴFZ1_iVf,i/8Q>m}:E . 8nN܍{?$0R#l;}WgmY刌I/Zm*ͥՄ;3L۔ҘHnxpLAh1f"! YnJ&2dB=_ZO 9RŽQ{0$m>Ʋ"Q%~r쁇v:<{ {?SS /mŏ~ ]nF#i6ɶ4aDD:ͅ&vogU X:2?Ft3f"̈́geiI[ڷ׸op#ϒF+lT`똍m ؍BxtCOe:|̧іMhq-nTv{zwkLJJxݮ7%sԖ{ȡ2k'$8'~29ba[ƕAPjX6d6k6H h._>Ic&'wS\Jh}ѩ듭w5[ ם㶸$]`9LuՒuPk]OnpbO !#qVoʮcatNǐM]2/+Q?EPw݀("uqB(yP LyjLEDχzL.?n_Iz۴0k`b⇿$׿ .!HWI_zǯDx^T)4*b98~' )QOnC UlR*tPM,㳗XmjHDLC7b_粶g(d˹kͩ!±8tTP1랯qqP>XmČ|%J8ZّNO!޸N:ɯ=I+&C!1FhO>RZҬՓZvZ?BA,=3orhV1ah [i{ }ei%"QvceD{R.ʽz-5}G8""&=# 9zX=7/)Lpzsa"wv.rTB/h܉~7 YYiX婩/T*1;v|xwj@,?0*e'2k]]&yf e0- 1ns8}9D1abUsq&brؖKFֈ]C#6q0'R><3`6E aj|@e6ɦNp5%(ѐRA Ԏpg`e`sjLǻ7L褹AJj17&>$S+d&eLtJ|էvfOuz'-s%K=s0:|]fh3Ce2"K.ך؍3!Fe-VqQ( >6EjVg-z3* "vf|8˟CV[ P륑K#Z*hfCSb9ϙT( _`4BΥu6;GI5i޸6O?- 4$z;|?T]m ;H96'IqwK,E0Xۻga`lf_S*h^?`\{,bN\س![Zu4#a"N H'6'/D\LslR}L&u-O(W7uGfQQ p8})$6!Yi 9@$:BǶ/v˵>|V2IH_ k;7Ca[r880(ʣHB~kʬYqA>: ZZL G)h\hk9m,KeX,{Lg"xнmٍ^SNw8"\ӭwƏ`L:U:Q,h^6,Eb3h_Y5/A.5 BA~α}Nj'ofp7MGJ8P]z8VFkT\kzj/#K,+m>t~}f3cE.#KmZ9- ~jP%54>׮P * $!~#8?EUCB괡`j.LO*2?:8byŞmvxy6`taoHI" c Q)YT\d8~[?ī{Bn'@DL X[w_|EHbmBuP~:j p3k₧A/류05 ٥X%!5-`Yw]4AA΍/FKKЯZOnF^ D52pcH.W(h N޿>H T,8oQo&L/D5u{ 1cC&٬ڬͺ-ȵ _l?##O}j/[ۂ9 +G Z<--kr?jB˻6Hn6!_;&m 9?86Fl:~j]:fJ=ߗ.^@:3@MHϕCS7 :{0Ж0}†K>a`亵+60 b#o jv>cY"g߁+II`U{4b٢DRO_i +A݄v#3ɨB]PȱPCqymu+8nb&,7ʌٌڽk\8faxiEۯve#7[=Zlwj\:e_qelLKZo 7ypq:owx; "qLn` ?H-֠4cCeݓ]:AE۷4sdiAQRZ NqCzBdU)/' ܥup_?ƾ\Ķ#2 f\cb*k,Dpe6b|²oko?O 9 Zg.;;E>4 v|Ӽg|v?HB|_QmOHtH;'lKrN\9~>4qgn\_#פG?4 QXi@UtmH 4hU ~ꐢp#IZ/4_{ͿslqR|o>"պ^hOwY)8ao.R=kp?QjMt$}cF&y&KkqȪMY/' IDATYuOR.dϿ7'G3oe]D 9vym/ռCy/_2v' Rzזk>?hqBȷX' XI2t,f:56/W,˥R#2; Θ=peZ櫯xleUO"2a:oۭZ x_.64GP/4!_S>y0ՐuR$LĈpyd^Cnu*%`bÏ =ꍗQh_l_ Y\:w <(^B>a`0FuݎĀ$$橭+ Ed3n3vm>rilܜd2bDnNNC|9 :OQZV <ϧ eP=PRȉfݥU9l=EUyBLOҍk5󣼹wVG~&H&j-}/Ne>pZS 9ل$i؅90|N q ,îj]+O؜'3`am_涛$O侲4/Is+1sdY7E+[.$tz<ϰuD$Xޏ1IlWs+E/׸kq86Ibu]q8}\:џ(vHX|MkYH\j1a=WK/{S= *^ ymrPdSk&;I:2`EFOz)8m@p8<186Z6XOK K"`u5m1Q7B6Ad231S.;?Ao /s(A T$y8Rc8 ?s".߶aL ?\fkn&qm̈́l6ih5o_XO>ƿ-צɽ*JJ=aj>bbauB[ZzONE5ضf"o޿7rtgR^\3 q|m.>K)#6cÚ5^"y)ܖ$/+8 ̻'[e6-;/Sg*&Ikxp+Uq ]Ztzu^c\VhxJiعJq3 }6k6nAVm)FFb u# v+=|3{k+hz2h2C;\ ! slCiNJV'!7U^$]'5K2T9b0O0"ZKzY'[.-7w~E & #0 <:5:E~Q'dɣ-pg7}DMPoB,tn¶ڴ,prA'Gaٲ#5v7Iނ L"Ce(L?22`4:q-(5)/fǺ4 ˵Z3a7.ELXc`Ǥږ%?q Of:oZ\]J(4f"XYkB^Q*vY+E'sŹ+&٬ڬͺ nB.\Xe.>X/|= @%2to@gzTh?'3 en-@E ֝ӱt4Pu#Cۃ>u;jQ3,+t2j ,4;ai- $"NBp#OPy(3|cRo% ۔hOr`kZD@ԜCql8ewJyZL_Yq,v`T86Pw[J3e0rq fc%3 Vّb n_:ؘ+{juxlbʲukŀgS*_7xma%a6| řˡzG>QH8܋ux9DISmps'mv`iUlKGTBG+IT/ىavF¹KZ{ 7Rp yC_f c?/_0LVQ NLTωRIJw]p~_0Zƿ-[4V|s;|f}'+/P5g%tZۧ.F\EܒK!'ͭ-I+zy>J)N-PhH4 BtpW7qEJhZͣ1M {ڼIR7[WRT,yHk1-"[etCW^h{"(-暈T{1cf1ؿCi^O/D=ؠX.T|FbmVS(-͞b6k6z)6l6d*?CQ ,2]T <+sՙxfGgvr`);K~h~.z#w2 W ·2Bh=^+*.NG 4ٌ-8;k1Ŝ]F_Ys$CCjf=wc8s%dtPZT c$ ֊x9+K$^V ?HfDBJJi/To%TlȠY'bqn*KT(k,|՚lf}wfj^/][cȣ ٌԙ/MP oz-'%9ڲF-5 XX c#!j7 Q/2+,Sc$$!LƬc;"v 3sURAij fNCx˄LQTm KP`j/;w؅kũ+jYaxu2lp;̞+,aW8zCG_&1W8}sZYbpek td MQjPL.5׶`e}|LSd%E-ǸfbȖgse6vK)"6=\ ) •|Vm̦ZD 0V onooJVbX\I8{5׷|8Ēt+&<ԛ\\K Z׍Z =7=/0Dؤۆmr\HA +b9|+uԦlPD:\o1AZgDG+cZ3Qd6k6ǖزhmpa~y#E{9-d1+.ZHAչXncJٖh!`!a}+ PQG3V26hﶆ-.EA B@CYJe_GwPk&L/ސ~P*hi`Ҋx-#K+C{=a p,SCi(H~R[( t;qכ\:4?Nn||{\zKy S^BK+0^kbbÅig2嘹'0S]qɱZ%XH!'ƶaEmSh uWg"cv\hcɆI" 옰5{9\ i{"JSWnsht|DB3ڏ/aQ\ᇆvAtQ`xuaV;ᕣ秢td\6I zx0xfOds:;|Oi߳z-oqVVapk"-|oU>ƷL ۔ JQtt|HQydi~[ϬT&ew} |NSh=|fn bۘJVVj1ؐE٢R7XN-IJMXZKxl J6~]Pq4Ӌ1.]܃'-FvA?ƶ eK;z˼~0gmav]¦Gj/WdPk&jYYuu3p萦TJطoN"ͺz! ̡V $;ܔ..-ftVGŐE($1t`[2S>JIX&k~R`h] /;R>gYkH֓՞o c}ۅe ?{ŀ>K,b>Mw +5q+8hG#MF]@km)lJg&m 9=H G[+?0ڒeǠNxb^[Zj]n*Iޤ[2*Ib BX'Bٸ:auGYSϟgE|FZwC 3 1ԝ4:bÙ-ӌ%5@;֕وoyqJe!:l .ܰu_ꝘuhENbKsk&7ڄA X'e_?!0%mB'MZSx׹h-FM&m^kvdƶ2*ThcN +d_hKIZ>S'^]x@PU,ۋm)ⵀKw",Cs˰z:uo2Z-#t|jBLWpHGTFP$2 XɆR&MEGkM3i__=A!f* qi"DP-[f % Ӌd3wfԥ|VviP|м M _رE6!>CżW|2U.$(+1χ̯\ yxBL!'k[׹bCI 4["[#6 kUڵ}| $ u~biصŦZm],%4(4#2hy9Yo3:5 0]Zin:20ZD3Qڬڬ{ _ͦ?m[7 ~%+u/yB^;" [,[a)߿YM>'<$1bY ;'$waE ]L;A{!ʔ:"[\b 9uWןKDpyM: C3U,X + O<+ X6X\QJ@HԈ(O(T\бA`7zg"u:q[39vN:cą1g6xT b#XǢʧ4:5#Ce Oz+Ze#Ģ7aCh|Vq5c+˒sŘ[ul4Vgd3vlԤ|!Tp@s6mwW}J(lPZFמ?ȀEVqwDTvJe^:f:2Ykmw)5 '.BbrGUls(5~ օ}S6jS.ZVvq%I?ToX0L{%3+ym1AXj-Aְs¡Rof'aaU6C2xpK F۰pJD&\F1g1':7{ľ{o}}AjnJjH=h<~p_~ѯ~ѡhԢABUP{Vf[ùU'AU|| jEK#dPԠN B_3S4 {7"QuvκX q[@IQ kgS#}D: B789 VjɾNpଶ } t0KՑX$}]A5701, x%ƶk0 Ԡu >z1 9gH~gVnII#>rspz(26eQ+ : _-DH45 =f:>dM yF#efnfӿ) n% PHLޟQDʥN_7 x$o?C-ॉj#^MpyFK'&GZN]Ns:ӆ덩iͰEb| !֫ lbf'>UђhiHz#E ^\Fggibmxn`ޒCil=RXX@FZ.-DKIkT(fp֒`|@5A dw ¹733 Ӕ{M|Oq}{޿iAg iL!( 0h!HP ac;YU;׍ZEѱ|k6U&ǁOԘ땄Ry}nHzKRKp󂍤  HZDk: !g-b޲8iYqrgMU3L߇Xbb6!Q+BzAhbu+A.-b9+ *;C c䰁mjU`FdhwtI7!*Jemݾ*G)8>9$(T` %\ޑ𴃕Rtu|r\ |~a!5$X{n"lC? _΅L1 }k'"cX}|F@p%I ٱ }[A8صJFԺ_f'q~yo"5 9pnDڣܖf@Z&=z^1+ܫ^݆()8AC dt7pA ACKCpQ mu)Y<:IRmڦ>~<z dkޤ&֐RMQyDM6[΀s& <^ 1jPԫ!ZW/bfG l'p⸅Gz "n{+Jd):6naȡѾNK"PNϦ@M:Q*5nݼb,[LF!!O7cD1P̊-q] Ƈ #%B|QIGjV ].#iW?}Ekl`i=7t2=F550=jӕ̕d w0CeG7v)EgK; .YxYXd[ ! 0cox ;+AXau#Pm (mD+K>Xy&k,G!+P aԚ~6!WF* a·+y%0 6~5yfKR&O#Hg8}6Ƞ`%IU#k^7c ,^cj}0F@ۗڑw8m"|CzGfFJ,ٹ9YpiƤ0I퐵fխ$׿`(QϊYBqϺwI>бΎNK@qRճ& Yr5:; /dPԠ^"%~?A6 TXY#<}33{oePQ 5Jo1znрPY>CTMI]XXxHPõUJ$(ą)㹉Y>ñV!Uf(8HKm2y%R ]Đ7W'1a;?8!YaME&B֤L?xyIP%p-jE)IJ;c{[^"|RCV!&aN5]a ]`7xS2#P:ѱ4{ ّVD1U?GM }|G4_@.9QҲa")%d=ƍ (umBri}р,@WPgawD4 *;8mxwLg8\M=.,_F~. )]mBO֒^1PH7 Q.{4q1&G yƭd)ڛ5B X7 !:9Zm֒}kJQVhTZmɡ}e{qV(^vXluh[Il#pI7!)ci=gČ$=tw<^tM)jjNCaa5ƻr]g $N%,8iia:z!( =Dz2-5-1`tB`' 1Cғtƀj#pAS]86rl>6l(o`,0;n"թ B}Uu#YG lLiLMgxi9hC$M &#_/bXX!)4kZ!;4 iv$.1UKWdZכ̾ +"A`/ V_ '[0&/_S-8 ?Ry>+\Ѐ}<ԣьpe * k1vp{USec@H_c l<@ʛBPmѹ]ܸ`=`\ce{]4Ƈ 2@)Irt!cnظ0m"qE mA /JY.oPhi0ģ_< HVkagmKᅭ5ꕚ 5~mCWêXZ!%mrT&z߄G@,!aW !-PH PkrMcd\HD1~`pZdW5 9;)\lU%AJltb@!+ 5^ ~.WR.e)ĕB,OB6aD?ZXQmR>AGg+4MPUf#FBWBzBuHoFlpp34LrivWB*f@g>QOJOG0m_a(/Pr|al@ARDv+[ ^dHo0СM<3Y fOׯ2$huz3C`^86Qg:C$wm|w$ު&),?$Z:&2l7$juէ.!R_'ѡd#g)!])&}~-Y>#p,F0ù oݰy*fZXjn&cX4c!iu3kqm3Cդ Ƞ5A"_9͛o"GP@ڒO2prC-6N/.lŁ"mBh-8jR(()TZ:i<:Qzy>QC_ S.Ж瀔hm)x%; 9gx rh[!ܲB~|j ٱAg)k+|V IF#y^Af2Rd;aMV-AS#l AfVh}M i=4OiQcvxcB1+tNҟZةh2k|ۄ MPqs !uDuJ>^Y_= LN;m|.mnSޏ(5rD1Q:2. JH%Q-q~8aE6Kk1vՆm2&k RrgHGhu u\6P̉ >g8;a;_w15j n["Mv=åu,XJhtB%2Lݥz|A jPzEKzǻ^(2EKU<( k[wy/ |KR>hG]_{`p)fP&c(4C4!ͶBcp]IWi:o.Ҧ3.pm&T=Dr!Z $q,dmER()a[ބ萱jMsr|"%%7ԼN<NyK>-(`QV$;b,#BVcDB1/4eMm$޸b4caH0<Ơjdf.-HFt9ކGOI/lĶ*Wer B#i0=j4wBob\=c&$HX25jp,կCԶ E@uq2ѱھܞDE4v0lV%u"+Eu/n\{y Cw$hb(llX}zB=!QΓE A L҆4mzC᫅k'}GNW<~pu٭B'Za 6Iu'(=2Ku8Q_> @1; Ԡ*m|;Zo~:0-HOSb?^93f|.c lG ү7)@|B&/h^˂FdGj Q4VHyh }q % PB~__\az_O7ܺl=WfZP#L|dg3 8 ޴ 1`y#FE?ch$!g{SЉe b'Q_3m%((8Hڱ.HQ퓇`jxqDwx'Q͞o{K*r)I}OpK3)^#DN$Qd;!NXok" oӪ4\;g#MUw'=Y-+Nț$zfGb.Sm#JM3$lF;s18> wpp?-_;g7~Xޱ`L[Hr)V-Uy{o2Q0 0/FX^ h+N3̆`3Pʋ[)D0Msr9 ׭쐳qڑs& 95۴aXJѳ!_Y$!%my$qE8IÎ(:8ѯ8#-Y%Awb)7Ԡ5W Bv)XJ17|> '?P;d raʬ}2嘨vJMкRʓ7VHf.Y,@)/dj F l{D!r(_v%BԧOt|Z[6$ƶD)1uHIo*GoB2L񓃐jC"f Vbq=M߸d!2PAV"*6!݀3ڡ69gԔ˼f)Dc.SYr3z`H>6Ղ`wOg~.9b殕sK Y& h  ݗ!ŬmS`C=jm$k*'hTE! j|%Ń G>M8/Xεh'=ۣљc=|!җ"Jڄt!R[ yע6#PkHTj>P V SP=7!Ny%PFĢD-zK2Vp|ӯdB8vś*kxt7ԬdӼO9{o ĭ+İ5b[ 3:2CFM$. N!z2eL 0gTDV[RxD*@ydBԮ 5嫤k3.>p|M:,H=޿0Sw;Fa0$B՚oGY(R/Zw4ૅĴJehUo*ԛ ֶ$Ï2BAєhu LUbgg8SpTL~CxJtn2z,աF}a%:t0ף6 _=P& fSY$ !Hq!߳ jPi B e`.Ql>gU,N9]xب&wSyцcs jSHx %qF/ idAY::PCj"{b KL`:u?ȦH lexTYSAgHE]px$Io[x Nm2ȮɁ4T%ꃐ d&:lDH(D7"Ok%8C>+ѱL!nQO%ȺiF(=s?iӍM#1i?/ +u&H ~ҐDƀO/ЎaAj3ڮ 0S)sQ LV=/d)}7<Ot4]LT^<ŵ d{ђVwxPO?Ƞp^i%/>G?Z-Z@ P*Z'()ݠ<hY 4 Ԡڂkяcr&|E|K=]'.Nb"h)҉ \rEnU$i!aDyITDz6R*A!4Wb =9Ժݡj6NSZå :s6TV!iJpNgSK[3`hFlwo]KSt>qoܚlAPȿZ(=: J1}6͎B*d6e [9wwG* t|ڨ&3_u9ct:DzP.haPoh߱mM׶cDB>.FUA5O4+#rmoJyRN("A jP} o1> p>Pgqqv̸ɚ$Q\b#ڂrԈ<&qBfP- $P1c4,l3)tn75զ/k,/H O{RCyV;m?gL̘>Uv$D%^#1_(dOU}'3H35jrh0Lt#Oo{. 1)@>mi$ZEԘ w${Ur9V7]66e L|H`~sئTF{tv@&CVhH<~EZ&2)|J,}S(?LjhQD)'j$j ȥuXA`xpl ~ mBQPA!Z EB7ܭi)5$FE?>N8ll * ~ jP} n'x)dOyH6=jpa juΛ!H)ae#QKg 82Du ^Nŵ1Ɔ Ȝs1?&աf߶t;p#m QMukd)Ȧ4HOx-R&[54 j(Ba*q~G$ulՒI%-<4Ǘ"HE4p3HYk)  nO BVLaW쓧Tڜi)OԴ !^gqM[ ҂7e!=vZr$ӯH(;T}v|q\;Ȩ%C4IRxW9q|@xR'GL|>"~Zpߧ{k!7+/ ~? $ɞ6'I~^ccay yq[,Qj9 K)uxէZ'I-xgiNqZX M̌XN'?݌Qk~8ˤ CFGa6Y1=FgMћR^`Dfh[=%W{; +1R.٬:2=JŽEMa{_o RgƠ_Ԡ5WV= FLs'BrY`h?OZ`bC!eڣ?\[`)4E Y!`10Kow0l$ʷ 9sPЁvO~~9$f}AI?"'D"O)l$- x7a-!L_Ji ?U#kY ? fȦ(^[ӗt!%Xe_G<(= Q.d=iyLTKk mgJ\2ٿb[%^?3lV#$֢{X6Q_ed٦U )qya@J ih Aͷm3_ ;bh ֣2PM{Ga8&mVuge j7'ŏn-!(3uB|j[40`p@X7˦8!XeBB#s_*IK~wĠ1rs,1!e5d # ǣ1ٛV(x` f3c"`tgL<|DX e?|IIENDB`atomes_1.3.1/data/pixmaps/image.png0000664000175000017500000000222115212624223016664 0ustar lerouxlerouxPNG  IHDRw=sRGBbKGD pHYs11(RtIME;+j&IDATH]Teg̎;_n+U)Ab]EPEAtPh"DFBE7}]$b+3~9̞s޷u s8? 5~)V8 R{Ϟ\K$@J0a (N!APY9tumm^6"RbDpfb`'BO⓫ʎ#ErⶶqSEƝkg~xɒf]Of30P#e!qDaX{}n<9I]E+Nni r@>d@6K8XeQB[ P|ZMP.;0w{'U.?VX L 1mX,&*%(Dbx8P1xʔ_2nr/81ZZ&!#, ##!!}>\wuti[d{[Kf78v,Q(0r9R$38!  _3RR@0°JUcƜs̙_۰Bw/XbSG6+ m:fRY F vL0IvnBkkmm&{\{+0=@ynkAaaBzQPbP(Ih`LhɣFsLkڵevgпPz茽wz@ySZcYB=s9PSԔF\U҈{iR6A&S5t?xVWKz08׏0 6>L >˟ D$8#vZ@|/Rg c$I0FP&(`(Hbeb)%)!a  c Ix(1<뒝{38m;1#I "s@a`P2,eXJ DĈ" c0Շ>wtwxO"I8'I(!6 #I7դ"X%e L@$ y0As$x ăQ;ud`pbPƜsBqLBBĨF@)HTW$Aq%0U.ćA qBB b{RqKA"("RJLpnLOzZ|p#~ϋ1|?ArJ;s:"7D"@c86$((6T[TXQDT"n e^;a(~g=kѢw* 3f} I eࣈ RQzNJC\-0 TU^zٹ$u ( +I ?|_=ucIjZMP&py}{ cuT$I-c>2T Bb1Ҽ(I']^: )\ 9ucܿ h_'PN7ad$b.Z}\'׀8N 1cq$ C3~J%D&yk%K?2̙=/^(\ZY">0P\%e0(8'`L8DQ01yx u 0847,ڞ`}s-]BԎ3ɨj)`(GN=wk;Ӭ raA{yMM[dSX j CQ"F0r꒏q4fR*lj7"F$c&[\j5͚uod?ܼ #Ec0TZ%UU"Jf?sl6ukt)-r'T?C:+YC1 Uӛ.aD0 *)<(Ja2ˤ]JS3Je)Q*<]oŋP6PHKʃRa(Z,E^L:8hnfag֯6Cƍ Ğ'Tu `}蹮 U**_n(sU |_xWQ )PvTT }(O<G+E:r8D+j)C` cfB3(L47ӟ}nww\j#𪜓tFy(A`j/8: 9{E {{g wqWW1E}HDuZ0lJٙ F&c"5P(0R.?>cVk'k)U*ip28 W0x^Y '}v(ueYW*a=j⳿-/uxI6ˡsSGAkDBg@'rp4ݨV9%5 Ąe, !d*?~qSd|_0~/JFSP=(:k>*Ԉ +wC&m /g=w_B˪gHM"(j1x%5)%&_8r" pر{ypPj>1ZI1A7==@.bLRSI|k_o|~ јKy [su37P|>erlh1J/* &u&W]϶xfpPJE4]bX:Q.…&:R6ꏷ,^%dCP!T6L3Ju+ZG%Wc@xdZ.]wa'o;wis|Ķ-QGn@PGyY,Ņf1g)KŤՕ O~N'ɤ^ -RA D9.h84ؑv T) j3 | _^csPR*ՃܔUuvך0y$17'8yЗɒݝʐDCFv@){ݯH;ǂ HłaC)0ĉ'~O}?ɵku4R,x뗮P8'8=4LF,BdD F ` x`y曟xv< C0MD61[ZaYI[۲̜9;Ϗ4㺠P&N:: )@Ju@Q@4My(`nTXUcX'o ;x^{mɆ[uE f0p-ǡf9'i L3a0&7999G8BFce!nm>[mko 'n1@SA`P08T*9 eP(BZ(Mu~arT >uٳ<6 ~T*>P9I"nSLdqLض 6`Lo3vˊa FWqs $JaP 9"21T-+y)?>2X`c!\NWOBwwBn34]WL*kLj) DbIA~Ð"$I&ӄa bKQjT[#(=) (|ƂU6DMf3R2QmzLs}:AĒI#RKAhDqJOU*oiCv]~G]mIڿ=HJ|B @5Gr;A=dchuմ"ҳ cd#Dr1*c&ZeA~.(nlHV5T?ƪqݔi:݂وwȖ ׾pڣp\63imҤ֍E2W ?7@qpa$$db&#ϝ@#u]UX aFE҂M\ZB-IIFXÊ8# ހ"r@Fc7=4G'o}u@]骋H@#S  r \NEa)Qh Cs9Z9f 'nX{GZ$PE{$T*UJ.ejUש*=U0y{__ct^68s6)%REdAE4QTv JSS&(XJP8G90Ě^Z[1n`c|~P $ڸ}DJdA)auV= D$mG=C4dLttL]]T~f7po>]* Ys!}>$ PaO 9&4MvTe@Kx5MH,~NGq +IPH!"3d2hm |Pa(nٯqZ$w@ЗdW"Lщ*Z.Ixٯ޾?u_^l; 0:@WrPHdW/AH1Lb ͔ȣ$,+%)+}p8F.I% <$sOYEr*5.!am(F H[DOEQvvupß>lp, e u:}E  T~TH˂aY a 9*% ʷBTFp4<(o BF!EGq@ PDa?<ta{{^nNcr^%& @gV4A i&I'v]WwCU0`LJa R kYஉ!J\Iޝ N:cpT2ԩ{ xbzY3˖t׮=A`Z6Ccj`L6 XDz`[ ۮDG(=өR%!t% *C?qFv q'Hjr#P$Q F)` R2LC'R]6ZSuQ#J$&3R bU6%j:i%_xfz1í2Xwe tuOb,D.]Yb0F6+)VUũy0CĘ6 G)R0Ib̀:5q=T`&s7xҀueGvq$K )DD,^(K<< H$9G,O"!2Y ltu}}"m5@cJ7悯L0iҬ9K7oJ#h:b5@"B)3 0,\Nf vj=O< `A0G)!DC0XI7W>TZR;s-rdͪU{X -ѪcD a&ebQH;~= R} @sw"nf–WEun?tUUӧs:;;ڀC^n˕LDRZbJ! ٴ0ݩ8qM*BÒ`(@8 @%``]S%@}Ԁ7gs~{؟ϟֽ.;7߬}v[DBys RBL=gO8$HD>~ Pq^$.xԩJ%Cs)IpG~mwP@*25Orj'>cC$0'W J5)zD,Hr!q0DwaЀla鎝Sl8Ncӧ#\tETI:*\˸ .$12Q;`y=8$ Dn*A9vd+V)y(e +A'"8ԃ1NR ca,1%QD@r;SN9???{xqz0S$I100<-)a([Ҥ"餏=O}j.WjiӦjF D9"1((D)8F@e5G#p]x !0DR$p Asز A A"SNMcf*@gg'<#W;fjrw]tɈXQJ"AC,CB0mY(\Dׯ0K%$QOǤ$:\H8k!(!Z9{cg~I=|m卨orԐ21u0e a"Q$&9c$' 8FQcCCРT"cdS0΁/p cR6v!0i_ߓl}9&|bpGBv/:i޼{\6%UׅElB`Q 0&Ƕdf*5qXa RI !pfdnp2`YEN.P00\f̸u(7d_{횦|~4΃vuqvx_rG>o[:8љL ?p&3I>M{re~ڪZ.mGd0Xi "Nq'.#`=Ƥ8G0*!1Vq͸4ߤeńojrCGvujuˏsN  y⮻.^x!I].6-[S2MB`J2!ՔSUKC9sR 6 S ۩(ң@8& CidzVܓ#:l[{uU%QuMz4_8uew_ys~opŊ70IDATrFҨU0 C*_ !u41rYJPRHe2bO&x{T.1aVcd ɩB P$~wTe|>~+# `5dATl"Ζenl U-F%-J$|T0l@6z7ؤ0bhGJe<~uې/^0Տ,6&dTy.D$h?dX6%֥d(M,0._ 9-JˉGcX؋t+hGlAҍ l۶V!.W'pQG=vecz{_|2\;&>ҶHOFPW=h)ƣO-s+ l1wׇ ==5kny+f2t?B[9ʕ3 >K8R,J!"`ia`iA0"h&BzҒ|,C VIy+Va8)g~ R}˄`h_ޖ.2l|>AqNoYk]]^VF[h:Imm ƞ{dZF:.²)s 4@db '&Vqǒi*-YF$&u@7d&Cp][ߎޔ+H=zRP#EQ*L_`J!m!Gem0ve镕3mk HK.* R٬DZApf%7ZV c2@?d9v[Ƒ׹Hg'xRA(%QF.ı 9j>kQ282l\ l(ӁDjIr[;oM#ټyӟ紷3[֩@jt_Xɻz@)VrjQ9@B aQtb,yG~,o#W҂܄ /wL?7{prRMHP0qld,Шď@q6qO.(@JM#TO~rY=~! !5kO~ ? w!;wuYy͞=f̘9444~̓a.WϘ1c3,^ ?uׯۼy˥L%55FlQa_Fszu jsOt0X`q=+W]v;:knFCH r&Y[V5:U[_ 6a"y$ RI?۰W޵%YItR`3MM8IappPFEL .,ix?s!s…^,b;TxB>>VEe-d2y8RW0Y JYt"Pp]55 *zJ껬15>xN}|KROmy>3g !'3=(фณNMлI45e~:#&H6A!EBJ)7N&u^'j\KQ*'˥,~ 97W[>-mx!̞oϯi )33댽>u5,{yKo\^^AѺV`hhƹ'F0''br|6N!旫aڴ 8轑[u@Y _=coI4Q#wqx5I争\F!VFPJ(j`-ͮ CC-#li@I<}sCaᤓfbpN۾Tj?`cr꩟DvFDu|T'b! Ε@IJR)D 19#:R] 4^~ͽsP^B)e4~iCSx #pY0k8R- }vNOEG5.XzH>J%eJÈp.|I2 /chࠇR hGͥ Ck~#8% 0$qӧijk@E֖a<KX<5†M y$c/7o۰cVxQ9ڮt ^` aܙՙ1J<K~hRr^Xm=KN1TŒ$6ŴkyHs }G CThYxQ2ԺF]` ((Pa!lۆ!NAjA4S6CC@[[2x?A(@aH$%&UDX29!҉F~f6\":.7x5Bba6i j-BDQƵ5o&D={e%IclKкbɉ*a$@tETbm$uC>{6ی?M~cs|hb6v6oI+-qSRY)U KsKl̓t%!  9O g_zSA:eGi6h:0)>U j\k9jU_ -I)a.L/Wh39w.}73jW=)jY*ikTZ]M!}^g'fpPjџ?؟Y(67r1lG>_Lh5jCŒr$K2Tqz/~y0YT0i\VȈK4c6T!ڥtKXZu_IрK&\_E\F `!IʨV_>4TP.+ I 7VwHy{N;ںծmR^)ݙR;:q}>qv=:;kuhA~ 'NV2 %x~ jTڤqQbŢPzw -Kꄝ 2ܓƵChJ%#z9JyY'מI RKRP<0ẞt /jd K%QG}|vaWr/Xpe6,QFjc#_18ա遠.Dއ]qw[\1cG|a)n:)tC4jX2],K_T7pH }ӧdYf7vfϞ7KmA=h'`5FPJM 3fLEߏ:jQFfIZ ST7k*XR$ #'Unq~[3@iO,Zh!7xm~ktO2)21 EtH TI7[U6o&N{=׹uҥjPΆ8Q:tɘ0aٟGVG>}``cp(jhZoumўFcp&T+gvi/{QKq5/b`F0U ݭ.9nW =ygX*DjMD{Z(F9ECwuEp-7/q֬y/MssviPf1k}n7?^xo[рsx-dJ}6W/!o5PiJu>|9qꪫw׼(/( e(~Ż2ss9c==gхKn.% -[:y6oh_.ڀ=zժrt)`ie/4**GqǯU؉-vz+^>TW=vdQkK2ZA8o~>)Sv  3ƌThhF 39vI'I/{[y|/o$`6xZ5is;woơxwYk.yω>v]/}K&]U 0ZZ&-k}/,zw~L_~r`ju`iF#@II!yܸ]6m<.\w% ڰau?>;T{dٙ[f dQ)ӗLW^yn֯ϻ }DIENDB`atomes_1.3.1/data/pixmaps/bd.png0000664000175000017500000000105515212624223016173 0ustar lerouxlerouxPNG  IHDRasRGBbKGD pHYs  tIME Od% IDAT8˥KHAYjИԅ@(RTD /"<Dx]z ji ${$ĽFDk;\D`B ˈ's ;f`?V^n 4;@+D`;8n${Up Q8t o0oX+BhzZE`p(~Yj`'DJ{:w,|]]n%tS( g5mII&Wee,\X(PAJ_W$U\{;B lVvβ7?644}P+Jb*ir vS$ {n#Gבɤr*eBz<i[_vS+)o60ckAa9@aUTpsn27j֏擓qIENDB`atomes_1.3.1/data/pixmaps/gr.png0000664000175000017500000000103615212624223016215 0ustar lerouxlerouxPNG  IHDRatEXtSoftwarewww.inkscape.org<IDAT8OkQoK&#UdjT)(J~j?,F.YBەC pQLu6Ĥls{UZMJD ZkR(Fއe((I-ڹ}߿jWZc0k'ON"/c#a`MTbF@% /aʻA_Ƈ@4QHaWxbit`Tp`boò `ʪCX V v}!{{-աjh-q4P4sX7J.}~9TSx(O\00S P@Ep)PZçB 52^)y(%EwVF+ yִaN~ 3ˁظGL%WJ8`kJuLe]j`a!]!\BG{r^&~W)}VM8t<ԧ&XZY ss-މCJ?ޗ{ꕵ9蓯@a+}޲o΂KKiO|X悀|@>03Q$Ȯ>^̯Z!3̪߳ a{\/NiӨ Ȁq]UF;`aWYj>8WIUB_ O pbN9 TU˅r`imzk(Y с^%(Wh-?ocV_-.6Iv?|بB<{ 33Ր Ȝ ,ϋ7חI6gf(ЪE?I)~+XҊU$xmێQ/3DBj%ՠT$;yuR{귕2nO M9y{@F:0e<P|fg jϒ,J_ s ~Ogh _V%*f^0_,.ukBWS x'fr=z=VN]S SSQ~uJ|݄b+e= ZSQZ^ v8HIv EЩW1u嗻}ŦA,bjHLn10'M۟d,@~5UPZ\X^,R-],rZT&:aT\Za38a]y}O/ZE6EWW)j zXۮSʰe~޴(sŰMʊp}M_Z7;2gg֏‘OQZ.n+FjKK:=[fim*¤4L krFgRvS~Z[3IyZg?kV,,PxϞZy"iV)zȰc_syahͽ{_ w5 7nBF)ݣ;@`|.ԉ1X I83}S.JL5Vq3?ڷtc4W`T.s\r/joY`j-iJpsӨb{%at)V$3[L%nch||,LaosrzgV\vV}/^4>!59 2E`;xj[,Z2r8sVssx\>lj֠LPrۤ5?\^n.ﳊ\$}/74z9 Xn4|ٳ"@K:uoq94ܖ+S4oZL2c{2 (WuVF^|\<~A[٭"'k L3/}cSGgv3r,\ag>|IĬ7vֲVr6&y]{@SS|/Α#-XNw}]kE AY:U,1(ȼH3 ccU}h-;$?+c= Cƀm5iÔe֏1%< :V*G3|lWC*+nLE,f;| >GuPCɰaYi̝J엩%XC n@A^ka'VeЫĝ!9:ɻqQT#ðݼuI('1k荎°F Fav3/pFS%>05f} ӀVhajn,[xi)U%6;M4::\Z/-aBh2JLwV }r ;'0jB¬3g-ϥQy룸,}NQ|n 0|TVRUF?PJ?;,"XC|ܴ2P# qɡ]բ/xwɪW[H9} Y@ `|ddRJ%[Bn'W}݋J 2}Wpҝџ,0aX"g7Վ9~x0qŻ0,c(۷`JȪX]٘ܢ} ih_B)( U**FYW_TL'6K񻒎sF;ncBT"##U;܄$v$`_UJ?hC9"Y>~0F`,`ALLQlX~2f`4`RWJ;$)zOIENDB`atomes_1.3.1/data/pixmaps/eps.png0000664000175000017500000001272015212624223016376 0ustar lerouxlerouxPNG  IHDR22?gAMA a :iCCPPhotoshop ICC profileHwTTϽwz0)C 7Da`(34!EDA"""` `QQy3Vt彗g}k=g}ֺtX 4Jc `23B=ÀH>nL"7w+7tI؂dPĩق }F1(1E";cX| v[="ޚ%qQ-["LqEVaf"+IĦ"&BD)+Rn|nbң2ޜT@`d0l[zZ ?KF\[fFf_nM{H? }_z=YQmv|c34 )[W%I Ȱ316rX7(ݝ ⺱SӅ|zfšyq_0sxpєqyv\7GSa؟8"Q>j1>s@7|8ՉŹ,߳e%9-$H*P*@#`l=p0VHiA>@ vjP @h'@8 .:n``a!2D UH 2!y@PAB&*: :]B=h~L2 p"΃ p\ u6<?g! DCJiA^&2L#PEGQި(j5jU:jGnFQ3Oh2Z mC#щlt݈nC_BF`0FcDa1k0Vy f 3bXl `{ǰCq[3yq<\ww7Zx;| ŗ]8~ M!8Ʉ*B !HT'\b8 q$C'bHBvay=+2Mv&G&Ec[ [bDDĐ I* Zc0&8(&iYH~Ho(%46h0װu wKDŽ7EGGDDōFG7FϮX{xULQ̝:+sV^]*uՙXXf8t\DѸ@f=s6'~_ ˍ̮`Oq8圉D]SINII\7n5ewrm\J`ᔅԈ4\Z\) /ד>aQ1n3|?~c&2S@L uYY5YoóOHrrsNy};_-cZuuk/\?kÑ)*0-(/x)bSWr±^$E[nEmnfmOk%%%JY׾1ꛅ ˬir]+wZiYYGgʿs{?T'U߮qiݧo۾C*זԾ?=xΫ^P֡ 2mjTl,ixwxHȑ&JG˚faԱc7sŨZr}wN>8(mP{nLGRHgT)S]]m?x3g]8wn| ƺc\x'ߥ+=/_u=wvWO]c\n}Ϫ'l:o\:xviMoܺ~{;˾;y/Ylx~XHQc?:b=rf}Icda)iDӤ)ϩV<|~W_}oοDΌ\«ï-_w>~f~#zGPQc'O%wu cHRMz&u0`:pQ<bKGD pHYs^tIME A IDAThݚ}\ysٝw"/ šr! )JQ~D-0RmU, ??)Y lXx׎7^wv>y\Ϯg?m͑ܝ{93k2rww{gڽAD:nZVOMM>/Y˗/upp~`Klk-q!J3 yJ+R֢p%(Q2JbHZ/EBZ|8KMzM7DP`dd[o0 Tl4,Y:|q La2L""a9|0hٰaC{iÝVYRrJ%v؁Gu7~zN<ɡCk^%ɝ%BhF5ccc[tuum61I9mjJoo/[lرch#K5B!! cd2={u.\h 8o̧b͙8w"Boo/>}z^b\Ә[VPrbY_?ҌNnq8vKFX,fbbb^P(>2]3]]]KtK.?oکǚ"cΞ=۶׸.vB@oooBfF* \|>5ǵN" all7λA Jw}Nj󋮮Fzȃ>#7nL$5bHX\5&cϜ9C*O2p̔JLK??> Ƙпvvve^K)Hڟ( ʀ_iNfIENDB`atomes_1.3.1/data/pixmaps/sp.png0000664000175000017500000000044315212624223016230 0ustar lerouxlerouxPNG  IHDRasRGBbKGD pHYs  tIMEd)IDAT8˥ PG` X{Q0&Z$Kc{%XY=5!_Rf,MJZg,)pyRg뾯HPȷMP=K. 3X 7/aA2qztH۲ٮV9+Uw43q/IENDB`atomes_1.3.1/data/pixmaps/ms.png0000664000175000017500000000111415212624223016221 0ustar lerouxlerouxPNG  IHDRatEXtSoftwarewww.inkscape.org<IDAT8kSA4ɓJ Ub-$ҕ.DwEp]`HTtEi!T0(6}]i^T<0ǽ̽Z\N/">㢔0 c8GyölŶ(_Z+259TNNN'ƒT*iĄN˺B,R7xU ZOzT {uC9hH,S* 0JL&Em\}j?8Ai6~w5,DbǶiMr;lm5:BZZDF\+ͫwܾ4 _K8Ij! x_q~'CKgYX /ã/}kD=$?뮅&^ i_k _|$j&IENDB`atomes_1.3.1/data/pixmaps/opengl.png0000664000175000017500000000250615212624223017074 0ustar lerouxlerouxPNG  IHDR%)bKGD pHYs B(xtIME  7 S3IDATHǭVklUΝٝn-PPZh * 1cy5G"RJ-jZy1L11cFb ƄZnvgwvݴԓ?ws=v?;%pR։Cg!Tn,)mht+pǾ"#ވdhILg2 84s9QQjjogO|^Yό"N# Q q@Ze.q"QS {tȮZ$'Q\G&ׯ/MiO?J$ rzv@).11?3ru2-k׮@{;^b7'=ćTO><:c퍷c1/̀g |$4yicw+֣ey Avx(06{ GڻZ﫫[<Þo8:- aR&B)9̓:y˒|<8KŻgJ]x 36I5 53M0%usB0 |(E>$qw0mE]{~S-L{$V9 &SjTĥD|N\(p4KzM|,1$󇭨:yo;)&Q+I1'J wqR;11\F3b9RB Nwgӑ4< ʓԐpZey-m JiWkcb*k1xhSb?sEh(H9`T(OfNQaA3?.ʪ ?3f"h95GӶQ_:ۥ͖-U5Ou lغmgߑ%/GIf<t3M /ق0H(e LGGO>ܜ2dg`BF`!z@Mg#Ce+6\mK"P/?å549M2  (bUdiII[Պ溺V_IENDB`atomes_1.3.1/data/pixmaps/svg.png0000664000175000017500000000575615212624223016421 0ustar lerouxlerouxPNG  IHDR22?bKGD pHYs  tIME A {IDAThݚklu3;>$I)+˥i)T'It-i  >7)}hAM:H D\R UʵBEej%1;;~v/jp1;w O.a'ă3n۶3_nqAx/, MrSSSk'ׯ_X0b: ."~Ӿ~x@ [H/|qL\'J4 A8 ޾֟wSz8Ėa "C+޹[w Bv}R3מ|s;"/ZYFA7ъXǰc 8VCh"h}fCMp$Vc ARi:\۶]P .055-;v-(k VO_=l2_.<,OO/H.nFW6dBքgY+++>|+[ϟ/477㶁hwXp}:W0ri<×hL_=Bѭ2WǗx=Ln` @6%c۶ I/^hvwwӖ@ t M2@ḯ}uT2,5WW~SdS$Iy~?e!I(900{F;ьCɮ,q?ŷ1|d>5FS#dpebWEj&0qM* QU@ 15ih%@wM~!FO/B/*m#E=ڋY]cڬ< ֚IaTU B 7W-sM*mC87]:ލVH^!W0!6X]&+U*:&YiWEq\d2x 2 ,FbD"% ]:g7 @IzNX0  H.N+s,_߳]z-%vsFX(ք$ۍq/ݭ;'"\uwkIO>r&gэ2ޭ+%(ض팻reYz6?v gI*, v+ {n3lV)PM# Rkf`jUٌ0^Qb{(Y(yŢ*gRI=Sˍ2ϳB(ڶecy/`#`{Z :o&x4B@CCØ(xr4ĶmQ`0̕h7rݪS @>4M `xxH$,d2'pihnn ɠ( 'OdnnbH6vH$H$444P(pnl,t]' r5FGG"*x<Ѩ @UUXE*" T*qOq`X,4 UR܍Ai4Möm:::P(022twws '?#@gg'H1z)b2Hsq)p\~~aѨAng|>fffꢭx@ X,*!i@WW$L&Y^^Ʋ,dYFTUell IH466]nY>۶EQ,v$\.@2x<}$qÇ:px]d)T[[\v OSS333,//;MQcMR,--N,sML299,EA%R|Gd2N8ŋH(bYmmmx@eTUuv9 ƹsH$s%{=Emk+uuud2~?|,..*l֡|`jjp4T~z۷EQ> ޽PJ$X\\tڶmdY& u i:@dY4MYXX0 ^$Ia;QE N#Jʑ#G(?Gz 199 /] (ѣGD"X,uG]{att"544H<ܻ:a;r9\.aDxGWn;vǏc6in(cǎ9n`rr3gDzeӌL&DRWʱJ6#RJS,555x<T*E uo9qgϓt;燕K XaVVVrb1$>}zmnYFd2 DQ[n188O>>[( FS]._tV&^}թgD6./Px*3qIENDB`atomes_1.3.1/data/pixmaps/dots/0000775000175000017500000000000015212624223016050 5ustar lerouxlerouxatomes_1.3.1/data/pixmaps/dots/dots-h.png0000664000175000017500000000042315212624223017753 0ustar lerouxlerouxPNG  IHDR< =bKGD pHYs  tIME qIDATH10C c`" Q:KB Re[!B?]wu=1FrLIJ,m" I8(03wQM &OXk18 P11T~Z9lW үYW6TaIENDB`atomes_1.3.1/data/pixmaps/dots/dots-d.png0000664000175000017500000000036415212624223017753 0ustar lerouxlerouxPNG  IHDR< =bKGD pHYs  tIME ">UIDATH D_+1zYe@3)&RJ2݂-GLjٽ w @8o4d 5R;KUC:u( efr7/\h>T:8IENDB`atomes_1.3.1/data/pixmaps/dots/dots-f.png0000664000175000017500000000036315212624223017754 0ustar lerouxlerouxPNG  IHDR< =bKGD pHYs  tIME *f>zjIDATHA ! E_TnpA2bRnEYH One,3̞ثa1FT;c ^9gB;q9O)QJAUZk??Z/ogte+}B31q3IENDB`atomes_1.3.1/data/pixmaps/dots/dots-g.png0000664000175000017500000000040415212624223017751 0ustar lerouxlerouxPNG  IHDR< =bKGD pHYs  tIME lIDATH1 0Cv.1@cF B^fuc/, n5j!rΔR<# Ix)R$1MJI8d:u۶h uҾԋt㥇PĽTJxIENDB`atomes_1.3.1/data/pixmaps/dots/dots-a.png0000664000175000017500000000023015212624223017740 0ustar lerouxlerouxPNG  IHDR< =bKGD pHYs  tIME *b%IDATH @#\h~T /.P6P0bIENDB`atomes_1.3.1/data/pixmaps/dots/dots-c.png0000664000175000017500000000022615212624223017747 0ustar lerouxlerouxPNG  IHDR< =bKGD pHYs  tIME  eD#IDATH@c'߀$5 璚#IENDB`atomes_1.3.1/data/pixmaps/dots/dots-b.png0000664000175000017500000000023615212624223017747 0ustar lerouxlerouxPNG  IHDR< =bKGD pHYs  tIME 'e+IDATHc`` eY߿&4` ^ IENDB`atomes_1.3.1/data/pixmaps/dots/dots-e.png0000664000175000017500000000042615212624223017753 0ustar lerouxlerouxPNG  IHDR< =bKGD pHYs  tIME %VIDATH픱0DYZm4ҨqFjrہ\Q" 3H) w*w?l Vz9gܝZ+Zk*!B;˲{'u[;"R|SG s{zC:<0E" 0ϳocoy}IENDB`atomes_1.3.1/data/pixmaps/ri.png0000664000175000017500000000145715212624223016226 0ustar lerouxlerouxPNG  IHDRasRGBbKGD pHYs  tIMEdIDAT8ˍKHQFG`pRQD"bܔiMBqU|h'5"E*V0F)3Yi:6 ftV{q ZLL"#oȠټ6^Iҍq~V JOW p6r;ABf0UUyU·/{H&;qq188({~FAБ~b1<]^a墔I {@|uD`{ 4MjCM`4vBB-@ q~q#@Tb$idJ=P\.sGTC#"@+Fc/ vp0fws˔ƼTRՉ?<|m9mA݃Cہ/vV(7B6ey}rp?;h3&54_y`Ig$~ p^ߛ?Vңp}IENDB`atomes_1.3.1/data/pixmaps/logo-agpl.png0000664000175000017500000123240315212624223017473 0ustar lerouxlerouxPNG  IHDR 'zTXtRaw profile type exifxڭiv\9rc^f wI-DLċr].W+[8ϯ>߯}~_w?|K>/;|} |߾1_ }WB)~W?^UKrjZ}kGZhjy/祑5œBwI4 ||V?!, { c[ɯs[7G/]~}SOuc?}IcZ}~= |#zwW>PߧibJ,~n}릢~'m~E l"!FἏ+,㉍1.GN,bnlNXr{Kcb/W 8/##~Z^~`ya}.1KKtⅅ m/@xbB"ac @v4XzL9N2JEƜR%9tϴ^K|TM٩MNʹP?-wjhTr)Vz2jZ[+j/[cǝ6 noC)|ʩ~Kt-nvǯ}F7keJ/lW[D匌Hx#kdV|9GeN9YdQrvP`>!~9O\/o95o(k[,^>mDrV-$v͟[ntPHǥSzݥt|&{12z.w̙ΦW؅B>M(5AbTFc/e]<+g2fkm&!N)T%y v p&7Ӣ^,+xZ~fvkޛ<_Hr+IgGqڎct%8O նn&fQ|&H 4mP@ ?c Q['و-u9oj6n9/]uB!˟0ڙM:l\BDdG~Ӥ+c-Yi nH6Vjm3kᒓeZB@jGQ޹̲CrU3s&%8(įٍ+ld*툾LpT a_\B C$^az7J^Fw]tB I4SqϥӆT˗Xy` [j _IB:Qԃn,yAJο¤^gW xCܷCb|^poT01NzTzeVgU@yiTPHOȳp*,b F, ji`T $6oEzIwEPo[zG]0,Q7Bd8hRIW/PT O;,̃Fn_!JPC"BM{Al@d`"Iuj^<9^. 4. V"m#IBؔ*V̹uQj'Hӥ  n$qr%d\`TOp*'s)n 7$R[@ǡ@ʵ%oD@*5DDFD$IO`^b ]5`bSj"8:EMKo$@0ޅ6BD wat<:ay`,}d$K%eqz$ƫ@]7Õ+* uPHN/G`ho+1^(y|ySP-Yێorڨѧ`0d'Z FAq5ܤ#Sh؜qmXF݀B@{pO/',@DT9eaTocE 5br@MxlPV#뇖%~Q8NUwK6l!R jm06߭V>F N0jwD%'3t"T^cD~4s# #Q xp=A7R_HBm3 <RiAFBpt=>t8_n('.G{ @49; S91.~&AݐLra變l!~D8P`QRu,/% qE < ]AP-s\Y]|oZӡ1V\6QE:kd7 #|.ҏFp61_ )!T~pZꥦ UA0ʅQID%e,F .B5B8"P#A0cgu%)?rLOa!,<43'Qe\9mTF y)W]"NH6R'0Ct$E!Fٙ+kHwNoNj*ިAkBU#'4(A/0WMeHu%W KD np9 ebWc w8wZ K+ORV9_j*7INuU'B? 8&d`1o]%gOu] ݳ(XQCkDje*^3hb,*c:hS-4(Q8RRډ˛$4͉K3r( .G/Y( C@(x=`%Fa zj,`r ~ &]5 GHcLZq\5Ĕޤri:$(MY`ߔ}t5;khIa0y(!S* LtI\&=9khtLP *֨o Ѽ"3~7 >݆K37K=YVE;B>nNXb,O%UOAE:۔)UYY{ME>rez;YwFBV}6>q0@Qk`A)U.샋k;Z隈JkÔH9̀Um_u#V7vY/pb_yԋ8a01vHzM0Wkр*<[QaT9KgDĊ/Txh;+4 ܟ#RC jEB:ѣ1[R3mWv%?GMDCE K$S>rh`r~b,Bv 0@#S ,кmGȮv$R|`tfxs:r_Du [.74(5h72O}$._ej@H+uaXvIl7[oڂ=a\B+cj4"Qt+Y$< n!ڬ0͊Vv")ƃ!Z7+ڣH̐#Jnha-e!ZkhSVXrரϻ:$=عa/TRb|q , 503Xp6 6ն2\b"譬 T 4٨A{ @h5'0`]Ò_;^B`<j E4tS`u(?؀9@T i闖\pHi-.#hH*2BD7kEP4m. E! jD* .4.Ym";gMF 4G9kkp/?M i4[3#U DT^"JX},!ej.(/G:uTrFs'%P0 U'p(n#Ѿ؟Sf5.^8j./IBDj9`ze$~lV>̦& .MM3d@R݄иEY1Cd#uZ_֩S|<7u`7h]Lн1e Ӳ d@T]BF#QH^![E,ki[#\UmB~z"'A])(DDf Ѯ _ّK6h[.5eNBwV\˓)bt*(Ǎ]#DE.$ټʴ׭9d螡촍BG_m`W{ER-"@4BX5 p=/)6Q>h!!Dlt\Xg:iu&A7:5( C(!E 2zB*ʊQ`7f3Nǁz *N5e P7OL[7jj2)}$j:;QOqfd䷣ `xN</jl"^4 2JxӨ@7@hУ^XR;N _|.k׀$1M#VI~C^w l Lq,hEmZ!SfGhIC<^FSaL!?iMu)_.Tב&Y6M剆! %ERշ"2&k_Y_~,Q քa|_#kм묧AnL* Z QOAq* z n&V5hh71XVѡ`?XE1x |G4unQ -H?juHVsh`;MO}JKК:4;@ -$J!d޵ F*nuSe䀛ZL1VbB7k`ՅDJS'?2e,Jy%IT5gJ[5$ɟG$C5\,V ?X k.CEs~{#x'-;v }A_#G өpt >HJ 74-aҵwJ-q=LpEM4MmiLKTͿfٖ\IBR$BIh2.nCz#q Z:J.g u8pH{]|Cup* ~tn- oc*dLn)|>ܸ:w5Աjˠ}H=XLMOr72Fozs +tpD0*9"H}׼љTqPBAΈҀ#^% [z s`_jЀ Mԩ8Lg] 6)Btߤ]`ukut]'Cul${Cȃ64u⼙E!A,PQH_3y4bbhNOb˒vA4KF( :F!:mhwFHvt>atf+Uw}:֬2\|ըbCmQ!Lʲ9Q&S{MA1JȄ޷ՅVZI\&JY:tOhJE-f:tUO(IT:H=nhXNv뀎pg,PB]ǥtyuuBRQD2@@@yEoQSz GuKrHf 4C>U3ԩO|4q4 Bxnjg |ɦT9LGPmoLX^|Г UY[⽸穣D#VrEaP9HpnC,[a 5n~ޣe'~|ئQ6Q'mNdpj$Exߑ7n̨-9 U#ttn4jG+#dnp)Q;!)5.A&Q <.VaL5r܆Zqڨ:wCF_BqGYCNCȊ!jDs gC0 V koڻEWiLtJßIxJgT^B\/hXNK!Buo0:Ԕ&b`niΝ~cX =Ә#bLP($XD ٓgC QD,CTW;@JnMIL'*ᴃ|dDwy%ԦSC G$,ai[U(#[$DECGCĆh{:,[Ӏ2tG. ߃$x"I2zSn[>hk@ ߀CO;ȧ|g}eď؀4TbQ2UN!] Fym}!c< wDFS3Xܳ̕i)HI8 #fC|Gzr#K%ԜPUrD%"0Ě5$TŭЉ93YGB#):h hʒ0c#2Kڈ(X;r5zƸd,WLy蔶vm:|!ɻNh=iw@7S)k>8 gSvF`e[!=$y1M).LuL?7&-Vz=ѯGajB zp:gbXUr܏?vn@,J?m ~Ai!HV ߹)h;TWetxAk& )HCҺYf^5Lt~E曁iWV/NLANO^!(tt8ÉUNygR43G"_ȼu' uꙐMȃۄŌ;hT_UQKDa_+rS A@0E=tkk2{h|K൝[DngNFcZѸobXNZ:]N硞}:DCTθ<]f^g󙤗D(6ѱc!X t/tș۳0HRBðPp?㊡g)x1@oo4~prC4m.^OiO뀝'6p)\v=M%&!нf{g:HIsZ$ئ4rAnF/Rgg?5vƦ(&8Q54o=GɮahX |?5'-wӬ -/劓<-/B!TOwuuZ^ V=[/\ ,cKLr8h2$H]ܜnP$Ă*omj5Τߩ4hG!1>}Wb UPrZE _W56azTXtRaw profile type iptcx=I 0 g FH@:xp+-[>dOɶ.8k?[1&JMoT\0ܧ1iCCPICC profilex}=H@_SKT ␡:Y q*BZu0 GbYWWAqtrRtZxp܏wwQe5 hmfRI1_ï#(eJR%x?GZgaSy8ʲJ|N.Ь;4O3p `z[u[SɐMٕ4bx?o}@[k@Jp|3~9r iTXtXML:com.adobe.xmp bKGD5 pHYs  tIME 8l2ktEXtCommentCreated with GIMPW IDATxy$].ŖVefk-%$Kdˀa0 2x3x9:`Y΀Y omx9yd ,ktKjZԖRUg1(oͨn 8Uq-ߏ9van=p{FGG=UU!"8ض 4i~T*=l6D"W$q˲<u]8۶aYt]GF6(`ayގ<, A,X?GE:ưw^d2 I "dYiz0MaVhy\8NMvyyk <ȑ#L&v:d2FQOeOEA"E6eWr~PUx|;A /`kk ijt]GEDRߜHJ{/˲E333XYYp] Àad2ٳgbCuh4t8O0ht…?8//Xw`C62^ di FeYeYڷC0 ^7|>&]׷k ךnccc7ZT  2mC$qH>|>Y,LDg466.;"d ϱm10 zF\.?7uH$L&yޡn=fd2T*L&PF>Zݮ}Fu n6R( CCC0wy ,.3L& Xl .!H_e~mnn:Ο? 8$!NC0mۿl&L@fdRN$j~dddo:, u]i~TNY /Y>i] xpӯ Oz<˗(Jffff|iW; .O>_ppg^ g* << ={XlJUdx$ò,(2I"8:|I, ]8gi/К\Iﱩ`B6p%mfH4SB"(,7qbbe٘,|&y_"2 h>hdX۶|^Tl(+䃤2NhŐNO y_x<838;_4jO펮*C˲PV(jBӴe<\.m_Onڠ l~ d2&IE90yIJ1 ?9l6{oFnd2$i(?."<DzG?"ߏU9;gWz=$  N;333={|?zF?/N' 9z=s}Uk 333KkkkH{^y&,",mY ۶@ aɲ Z>ۿ%DQttR@yVvsF18c9>zSڋ>IxAX8EQީ(v]x 0GV˗ӧOhLO J+(8ػjNVVfutttTE$ XkK^ѵ6$'Ը4M}{{rsυo{:am{Hc#:4jZG.'C>O[QnLQ鏔J%wzzz]t oy[ I%"RwbnQza8Z84,9o-:<^$<ϗST]CX%Qd0q /..bmm͏Б`-Sւtd+kR$KH$={E]0m?,qbcbb=@MT.] #A5EB໸RQQxDYdE# z5 c 0HSSSw[$Ir (")2𚦉n˴Z q0 B] YQ^At.t:'''$I@<ҮHA=A@^VҒu̙/noo7)%)n5[0&"(]M{E9ԫ ___ˡh6n"6Dn4%v,..Vew~_:$˲G_qӊPeaߐ$:wڻ߯Gp(h$v Hzl|kkkodʢkkk_t:u *Raup- bBsDQIe^%âze!Hkq[a0<<1i]|`TM4}XD$8("!͢\.l:J/H@_x]&,,H,&DQz8a0Ru$B","{cE@?i۶|^>0cߡGKe2 :^4oR3I 0m۶YD'Jaff\n Ng 튐̙3PK$jC*rRg'v]3M˲U*bA<4k@HlbssYXXXm Da B>9{y??o?TUEلm;Tj\%=iQAEd,Bi^`ܶmZ-iH4}NȴvX|Ķm-d]z}aև2aUT*Oz=nllD"1NB,ݓ#")Oa^~Ji~mF"Ԕd>PN!LI#S}U8>|^/T%k7R$!IOQwqx<_7خzb`:x ZÞ={:5X`GOdEYdQw:eȒׂxG}ЍZW,/Iy u ڂcQQDPQ8n||zb>yrhk}pI#職K I}ٳs]W"c B I~!3n% #L.Hܬ(KM7݄{'qhZz#h0:[[[uO*XEQ~Z]@ EҊZxFҎo>yt:Z ,˞Y^^^r]D)c0ʹ k o^t陙_NR0(ʮu \M ;Ll8LLL`nn'_&Ɔ߇%&^w$vj*j(%#KtĕLAwvN_X7 c/8r4&t* =tD `WVV"EYd vMIq<󰹹-7I2M,B4??;TnR1˲!-Š]+:uG_YYyoO򱺺>}krnpw!׊x##L9^$IRXbw&}C###,--amm//^2<7s-$dS,n60 .FRyyau]lg ݮyeYh47lv$I1A~Ovz8ضv$9:P{( b1u/J TT5\uWVVP(L6٭IӢ; yٳCLMOO6lQsT#Q5F4z=z>6 9a@4:u dZm )Dޗi`gS,ugYA F_q Fz4MC.5dT_ۭVku{{[ǵEFYdE x_5M{Eu0 ^(~hHJih6|ixh4Xyt#hd2#Gt:r>&`tt MaG^c}}zgYYYi.EB1d[\*BR8YG #\.ckk CCC~BP$I똛@a,-M]~d"?dYf)wGղ׿.F}j|dnO&Ò$q LS*yKh}{#`߾}Q("cbbT*!NR)[^=ͼc=wԹx,Qץ/Mߦi_LFVC7K_#UYiTշi1(ȑ\1(@^OI#}vZ&b,bkk\kaׄoDYdEٿ ]Q(w+yCuضMT*-J0(I? ߒf)r^$4 B'`@FuĉF qȇkw V)3O$yضmT*r-$j5vmb0MR)?7dyu,ê~RQ|>|{/~7vauu> х`=8jz:O&Cx@{[z  /H>FGGP,DM|hg6ih4V766^z\ Ya*JWңg9ro.2zK.ձ k6_4MsvԢEΟxZQΘv A011.$I8m\я,",-u]'ONNuxxأwDLrH_T)eYmޜ/4믿>9>>|^H$.9{SP.Jd],l6G}UTjW F>",QeX,q^x}\Iy8cy IDAT߃n&,v|||XUSU%st 7}ob׏|8bnI::FH~@O~AR,wb,Vki8j]VOaPK+ICIEQGFF qK;d -RI$,r >O$Ү6662UƂ,Z4%q ,:h4P. YzmH4z W3($I{쟮*,>G9 @BW}$IN# q#Njlll~ӛtgGFFv|>T*e_Fmnnbqqahh\۶=imM9 f[R.}YiAKK-"|n` M͉Fdw&jxG>rl6r7$CrkVcDD","{2̨,.QS Aqd2Fo֟5VP:rL&(@0%?}\KKK0Mr_~sگ6S2ο"nV"ر?e1>>LJ?a`{{ۯm Q8pD^dYIw:F9_1 FyOA`u]uX,o5G><x'4Nclְ3D6BJ9+vFmhfDV q]w(n*q9!aԲ,{oɓ'O^eݫ`0R {^, ?\z曯;tuDG>O>Hc{{.]BF,p:E.U'Jf g2P;###]w(RE#CCCX^^SHz6Ν;箮dݗFGGsKKKY%u H@:)r~d`WvBȚ^ZZZ8y3!ױy^"LGw4q|1ۃg]iBŐH$ؾ$X3," K@`TrE77I'bEK!Nn7r<୥IQh-"CW\%keY&)0 o)s0oL~sj$RD6~ĉRn\.СCX^^L$ twg8H1 < ;eMzNSxddG8unnll< 4 6A1/ޯlJ믍3a K Bp3L;z꯼+8xtdZkh–^6y~q ضjWRѽ^:,&&&P,^(Vaaa>u?IQ]zH$|E+k*Nd;=>UAO'JӉx |k2!5~@H;444(CGH/,`ʓ$IeBa.L*f Y3,ă]k\.w4 qEQ|O, 0nyssl>?p=^:kb4&&&F1 WհdxZdTA`\󊢸_Ν2"/'{$IhYX^^F*ƆbYsss#6j-T*G? *`sK_DŽy_Ae/N'+JWj$F#",7EqiO^p#5wy'8VVVp)X\)z~ҹ4_%I(&DE($Ic/_7-b7?dDRvwH#ZbzzzcCarrv{w:a~jIPDRt1,O>#iW_kZ)ZW0`o`t]W2t:uq zIwرw={[W٣ $i` &I&1AM>T*j%EQ;c䤛doQL&133rzCzee=q׫jjjQIbmr|NONN8<57B|\x(bYtQBR1(BTd\.x<>`1_|=z @ɵFw'n*#wjj.\ #p",@ҮH݁pFP^z%LNN !ySSS8~8Lģ>Z6ǖxБ.L&t]SRPu Tj8a:H>˲ggƤVj[RbH^?e۶s3anaYZ&sL" Ic*D?9SSSH?0QJ&>*؏y7tӞm6L\ۭolltΟ?WTA ~Eh;ZT(bwuκl֏|(,677|?KKKm ;RUUAPuQ )( :ig666 L&3(Jl&41xHξ1AYdyt}o- À ;}?+;DNmmm鸢6=&"#EYd !G/XNRzz)$ lmms""򢻢tA&Ӓ; EQ=Ǡ]A%'Ve9~6H p%$ 4] iT*r/2z<0Mӏ r9qAyqrj&te_kIc`?+Are魭4ɤS\\]9",^?xiO98Ilmma{{{@.Bڄ0q5T ҥK~z> #Q4,w4xU6] !+V\.ݡ!D>ʯhG;]Md4MkZÇ鑹"} dY9I z v= xlagZ%s1Tv53WoW;d_D4M0$'&8~ҥcPj \eYضɲT*߿].]X/"dYƞ={tP.zSO= !(J_e8\!8tR0_/ LA1 o4Gz y'v:I)AJkVHD<PRUuY\&v1EYdE t|$R|,=;W&+~޽vdF'O 9F*rQaǕJOexP/ʡuEIK+/:ͦe<ali\.'4\Σj5΢hQYH$PVwD: )y??V|0L2 # ٤{-s#FZŋ<677nC-H$cNj,rLtt]A]133?~g7zޓZ}% D<$HD\y˲\u}bBzVWWa;j\.?lI"i5Ϳ`W2lJ ]}}q4h=A^ Q _yaEU̽mې$i+dni9r1;AL&0 #x'P$(RF$$",!akk \n9a?ffWK{ ]u!K"%t 1L 9T=͞-J?rx w~C埋I_UJ%| _TuqT*\\5 c8{@H2 /~ x,˂[Zi0oYCx{@>qf:Kꃑ1VAr${$I;mkrX!m9r&yg%I8H$ܑ84bIdgU$8u+ 6$9&4

(X, pq,S2<'''PQȐ5A$Eh@$%Uɲct^7a{UQ_P!__@V>zFX^^~u]I kZzΎ[4QV籴qottWzXUy J4V#H>v[߭ [C]0vnDN %덬1:BB^ #$$2I&D&Gٳg199 AtW^yek_=Ajtby7q%zO4k#X<<4 0 7$0 @S0"A}hE?0tà=Ǻ5 AiNvеDHT4}rO'+)2ynTϟ@xU","ߘg^(f ˲|+jP*K.=Y x僺W{ buu799y\wR$O httPT@KpHR^LUU8tzYt:]0ޱ y !DE 8|O铏W<3REt:j ey|WVVpq>}I("z< mwؽ^ny%s,<eA4lĕ % 8z77==i(IJ011j:;[ "jAnZQc{&nftpͯ~O焮_nP;tD#,"g8VVVv%lz=T*=q8ͩTJ%g !`:yo`;Y(LXS v~:Yi@Mܫ ]{ČDXAyi奐Q$", q؞Y/_~,Hܣ(Jlfff@1ܹs>(#Pl6rvܹ˶mJ;:\Hu]'"˲mql۶G@ !DeY5ɱT:kxx'X,vrL_mrqb9[.N ]S(?β,,ReUU< V^YY!q& ,tnw05MضL&MuUUǏ9qē*ʗY}yFw?|vY.bg"F) %_[fff~yjj##P([n>ϣQ0EZ-t:looC4 &Ae:JB}INyExbJe _?Sf'=Y8'!u`T(}c^otiz86ϲ,g1 IDATaaaP(L&ɲYOQk*a \{l6(JWS"ݚi;iA$ IP*077秵c<\^^?pC,"uC@Ht߿(8$I:440+l}jZҥKjΔR@  n?M7$MNNΥR,!!D_?Lb޽x{ރ>0 cƆA,Ӟi7qqdu]g=c4fjV)ɲfy~Gqݴ$ߎ={S/'/~WJ}M) [__ojiJ$mh@uɤ/KR/>Ih2/\pp.i%-Qױ722 /2FFFP(*+#m#HY*°,/---JSʠVD:","{D@Hz}}?,r,T92MNi/M j:F\A$qםO={V뮻=33sͯV8v^|EcŐH$d2:S8H?u]9L²?5  8 tgɟI|COT5.]~䃮T*Ss8c0 b1A80{w"`}uMd7[[[xi_ˤ$ QZF۶K+++d fffgffFDQܓd,$:B7 0 gN_ܹs~$,Dz,*Vd} ^.ZeUU+X,"俷D9)NaKKKkv/gp/>亮E&c|x?o߾d2$I8<$ISO=۶,2@EQ}Çey у={ tPɎ^Kň3nMj U V,..>ẮBzO Fnn<Z2 F1NPـ0˲SJK|Ò$i@[j?"?"̑#G~}bbb_6TUg2]w݅Ng}^oZĉ7$;oDfDFDFH QP{U/f-&cIY%CK#EI^lIcͱ͑MyG6O+bUo/*T%$rc/C$[E9yJEwr%XGGGw7s3 z~ rR,J?d2$Id2JJ>2m۶t1;"HOukzns d/0ʬy %p ]8Nw0 |޽{٣T!$B^ ZVŋ8:N!'mƹs?l0txT*oW8f»ώNR=#8}4zOP(… h4e,߁۶ Yx8n}{{NB$! L" CUUyG[zH!C?S z' @eQd(hr)]+%#4.effgffvH @6%!(Ғ!tw:ePrD.QL`G077۷ociiǠ.#m~~qGτa@1IJu]GVC2D݆ *:SQR=z;8|izzsa$Ix"q(3Dpd2j57i9$]ŭͫ|^W% {cXK;ԍHtbT*@t鱫]'HT*r@+4s$JLË v4eY;fҗv$I"#5d$J$T.xq>ٗJH$vyTU~p}{j;ŋ7nx|G$kA@vȿժ[ymr|SSSB.Yws~N#xDQu;w/Z-h+aǴ7KR)'od; ѣp-loo{y<#⸑;9Dz` s~vvF(rX>VnFM0X3Ev?? n||<-IC_hhZrPQ@vI^2sl烕 f^hZ4**;( l61O{ZFݾYTp4M4M֖@:(#~Inc#Jool$R&"QkU]fDzg ^~&h].o߾;{jd ~~ =^|EP풴鑒@3Ċ[0p?;666700|_~J4qڵƩSN[D/h0< D罎"0^KKK[̞I`xx8-qA,JR4M rmH@$ KUU(EQz$4`&^@DW_8{۽, n8$I B]a;a"VrP˒~SD"!E-˒JiwL,ԆNJ1M-css922[躎 bcc $!ckk Ba=Ͽ%Zmedߋkබ^W`0 Sߖe!,OƾڱqU0vK\}xIm]wEQvoFu]dxB088m۲mX[[ç?iƝ.H#6 tgOLL山tl'(xQ.ݎ@^GXĵk:= hHBO?/R ^`+HuE"J%YvDtH@𬯯7VVVpg;de9A(ah6in1b&ݏGREX&] z%}2D^wȱT*X\\=}L#>E,K6tiƉ'z*=&xNDt:Ӣ~~;䡇: DQtUD^G8& B$4yg Ҧ`g;GH%ȥNMM 6=eƭ\.ww: 4UhB'eY˲j H$&Ey< zZUzVRk5% {9;(:b1Tѽ;Ȳv\%s>яh\n߸qCTU @4h9RT,ɺ#d.4 rٱr4 BaK9W~g~/;E\Ʊ#<3Q$B? z9s;?@8ɤ(ê5y6 b N>ѫoP Ħ~]vF압(17objj tv 1V]#Iz~\._/A-:N#̳)BN^B?0Za֌l~BˋB 000EQV3&dhIÝN(t:L&FAxq`7GÀ@4 >ÿ855uՑ5㡇B<K/mw슀[n5ygu]7Xpi;s̎nl{ɿ]4+r?5v-JEﳗvKn](JVUmJrNRDG\$wL$,P(dG8s(Aw ;viz)Ry$I 'ĩSD\ymz=xv'%rQmZ-J%ƍN~.&v EQP l6\.J|ݟ>鴘L&rϲlxNSSS33, L]AsTҒ/21$HD$'qd?] $yf ֎@uw@'W*,,,,`:F B= FpuB-Bg ^tI6Ew0fffq]L"4X!ukT>^_WPT\0h4\N [\$6龩ꪇe'׫ة G? h4a?qV5tLU^_J74=&vToѮџM&GC$#ntzo2zGh?O@nr˂ |8+9akW*uv`Xw#I1ko(TUA%RF}NǪVSN=O<$}H$D4R$ wWxDEghhȉb.eGN?oy{pa݁$cM\ f0A ~.C۶~s]:.f񁁁*∢HTzưr X9^?|…g =]e4BKd҄j2%5IH2 Nrmnn>tTa%q|t:Tx ;HW*ke.KǶmtQ2z0 dYn1??PZuEMӞ.QhrfggGMM:VyE$Ae8pSSS8y$r;vE׾g[˲,<1#5ha}c BX,888`u l<(>G'ˤe6( RkGÇ MP*000[m1( $dկ~ݵ zEX/dsnDjK4 >fH$ripp_3=2^UסhHӨ=cXl6p_l<ǀ B.4HJ$5VUSSSxG|#8h@~.c7yO(w{4}Qtiuz*D"Vi2.I%s]@"vGh6uȑ#oE;9cccGPNhBc͛7qQcnnQT~嗿j\('" >k t<5M*JX,h۶ƯڶBoG$"~~DU8IJ/㤌V%!48HdOZ4mJ2xxK܂*dp x<V۶me!czzկ~4HON򺽵uP(,FR*L0qD"C[[[6ntPUD8U!>I;mhGt "prlHn{}4H!!칹#o^a5A,e9&wCL<;:N8`/0^"DZUUAu],x^G>,u n] C3~hw\9cccw>?o 8CRבdzdY̩ n0D$EQmF*m_inᘦBl6;*rW Ol ߼yH$h4.QUXl*y4Nۅ$EaUt::=SOazz.\ Аu^ tGd(RQ&3F7VЉX?ijO0$jٳty-o|yB8y x"zu>hryt666^VxƤ:SzYKkZL&P%(˜,j\n @褖(H$qocaIkGw >&89 X,d2 EQi#Z"c||Wpv{硻Bddri+=nl6ŮT;9}0~ǽ@+TɘiT*$}kAӴ +V*{QRm! D"eYE!s$;3@aDܪgZࠛj,C.ǰ^F. DX~^,B044m{ضm\t ٟu1$Igv߻wx9:::;00UU].}݇%dR&aV%;"2Qײ,Y=ZQ,,, Lbcc/f>N$ !O*d/Z-keerʣcF:;#s7h;T*}T*əL}fDQ\qjcD1P(i-m{cgH˜ nb'8x`tzzz$LڪMhcOj\.YcKjd0#b u(88* M,m4Cb(";9? lG'n,>f_|SrY)L2E'g?%;I^Yڟ0 J%B!4 nkkka|||Nl\y\~}P(x<ΩzhEW{cx*<Ts&h6qy7]$Is8G&ap_KR=H?C?'xfyu@hS;⟡i$nq,(Gh@BZN'^p9YZZTbߟH$e@8XZ-wE3 M|T,D%I 1  YgYǦcW^mOi@<CO8iZgsssx788@&M[r,'/Q*jكFvMfLRfNy7VO$C Dc~" L&s]-j9w`S ~~qo9 I1iӧO̙3t:}Z2 >w:!kvr|>$IF pVAQȲ Mϩ*o߾rRJB q/; Yh4p1|%!zHSNJxqȑ#?000.?`0_|cccz*kLw*Roqjzzzljjj;"3(CH?@B #[57{y.]imPR###ĻeY TۥR-"NބNY6v  ~m0nZۊLNA$WMlce 1EQA=0l6MMӚ_`$>gmm .tz;APV166ֳ|TTA2v-B,H?Ï9 H˲[#]~[5$J1l(;I9AmxЉ'zvtG&Nؓ8<t0>>>H$&bƍh4ŬW봱5w?300p.[C0wq~zbbb&N;hԭ aȏDQK/BMӐdp 4WmrIE\.۷o>}%055Fx<2MԫHGVVVzM `߾}X[[sPXn}?}TAs:JR%}wL*;5d;nK곁G?uPf DT%jX$9x z 3dO".mZښgii gΜ.\V=%IB8F"ST2L\|TDwABai˲l>Ӯ`GM8}{tOCUU<xWf Ip 8\"xX4;Ε7x d"giiH$4Mi64 CCCI^<w+Ux.ׂ `D&bu\E%HEd(6+"$m(G{#]2^oWqKz ,'is&^<BCCC>)@{"T#) >4M# m=]:=FF>HnϞ={% VR|k .;t$I`E֍ @RiWՕp8gYW:ϊ êf24Q> rjjj6NKH$}CxW\/]g / 66q8ivZa[(O"Jj]3Az$ h6VVlYC/s `tqBp)lmmq=r"n:;vG>N(Fy`I<? =d~̊ Lbmm =ҩW:&(@Yzv ۶khsl6Dd`f$|G<F>?eYdD2886gqʁ~罅cX>? tR/I'|Xh!DlrBJZB%dN$? p(%##aN.Yqznn!b17a 4"c~_V[Z^^~OBELvIU*62)rȶmTULNNҜGŏdF"رc;044ԣv# ɓX]]uGP&JVWWM˲he'"\?}?AA8οb%}x饗z:V i"7D4E<G&$I; Ij\NiQvڳ}:dJCĮ}nM > 뾟m(YϐwǧL&:<dOٲ,U%N8%*)H&[Xo0킏Gn+r: O?x1v04MCZu^{|~/YaOvA': 9vXfׇ~4i@~MQTP0|s>?o nRF/kEQP(H$Rh4Z4D]-*qu\.\.$K^d6}w(,5 )˲EZr얗*LtUhkv *A;"Dbdhq7$^ ]oi2zV(sB4RoA%-I&#eYv4MEXFv=[>Drv(moo_?fGdY 7ʝ7]3NnԱyOV\''':˲XSq­[_۶E40|~ǽ @4fffQ,/P(V^H nZnY^,5LS,vS/I4M.HyMut:\\;]?}BT*fc6pl:`Ư-˲lơCjV#d^@`p?~;6dܹy>?q9sn~雵Z=6^(qٟD"i0MsB1Sh6KyϥYB>+a];Y+WISv킏!4oPUtdQu"ǗUb "ƞK7qhw(*}!OR#GHrѫJ3 CēoV:R,S@Z`8~vvׯ=Za$Id2V={vFJXx<>2<<ћ7o^r1b~?رcHO? N k/v:Ba7 ;j(g`㸏9Z&zV0\{%IrhNtγDfo-ITUuǭm`;cXvүJnkf뺮ٶmi\v$\<Sou;=|a$o|:t{KpƍQTW_}JV;C/'d*˲822OUU$geYv;,T txGTrkvԇpM֭T*xGk(J(կ>Bl۶v'HȊyZ-Y_r+bL&\& /a`0"~w~%Pӏv,EbؿJ&ǕH.///RPEѦ4M5#xi;H$b%NubѢG. x# 0 VVVnG?w64 4{QeGnUdxu@h!]`GOHdc z)j :L$^%;nex'"w:bZZZڕ{xT*2keqܸq+g}68Nq8~xȑ#&~48pۇ\|Nܛoyaqqh1NyY0lG9Y{"ȞEѕF%qrd7eY~i,nb; 4 nj@e8Ӿ1`ٻ+b5~`H$lh4% z{:$/N`^ ?z={<h6믿<SUcpءeڌ;~U. uJ)849VU6O'rI~tV4!L0 \~Y]!,nqXYYO+s"~~`+W`yy5@/G% qG1NlF r \O8FX,`0M(F!IR((666A]뎦i033sVassE?noo/^^U~`LB4M(5ع}?4M,r}u\ IDATe|>iej@#Gm;$d%a1~^#ǹP(t:b0vHxL|?Ƭm.ZT*V^z"xi$IWضbI>|l6 zJEȑ#k3vUV/^<ɀJb^N;b8*j8_ujJi\7XǒɤB(\2P*iɓV}+=ٻz>`; 4`cx ,E4###q~ 8fihZ8GyS-K 9;jn߾}sssu Fh@Jn͛7OSmFD'E`8OLLR2 YrzYt0>>0F!"n޼qW zqHhYo4Ǐ~+;6z~GT$MysMt:.;%+YyמD1qGr%^|Eb?![E[XjAT269 1ncip6EBJRŋ ^,7ASUu^s]#2$ 89Ut>pqlllW^.\p78=&mx>4&:F?3,;b1# nsR۷8h4htZNqʕ+vgH$bB! h4 L@E=3=|&^{|~) lW|>!wǫOF S4MPU\ǹ]Dy.&W؎f,| Jx4r@.sUO鴭( OQ+.a0m潼8Xհ 9G=::z,JYz ۷oC4 ^#Hs#XG !!@Cw,R~=@HbT*V'.PPhW5c]YJMji?%S.qaMțlN8ǁi8};j(]MbD";dNY ` غcllLhŁ~X,nFlnnn5SSS??::X,&elbCJ(?B|;=;"˗//t- ӝtxQ)/A;0idXZZz=Htȑ|Ѩ[MnxAqr9w/Sw/t߯-KOUEf&hB>xq5 p q-4(䜫jT*RTƸP(dif:tLfAiszP(Ν{w|4P($Q=\.dA @<y^[{ɤE;-ɲ캵={###|4JA \:ҡac@? n~!Wt0 EOV(' }7$I:ۭ E hm˲*dY:000j ]`YwXȲ~$ ͛xΝ+R{GK$A|Rj}E::l,3۶l6oPb޳+wJ/>eg_YYC&Ǭv(Ni{ů۶-$q6u]$I=dApdfmmN&?dT&CLvPU{^cmmsϽLu/D"p8CFv:- fR)irrshԢ;8 Hđ$)+KD 7 TUE~t@? $YY]hZJ.m> ~Xׯ_zݻ$s7i~@RpѲa۶h4\p@(.]Jd@hh4DW\$Ib(0M7nZV _P(@G?B͛?sXqk/R cPIAlXe Rłz4MCR3pN{z cXh4ZGY5O*EZ`DQv*ѝ'N B~qli37`ebIA>EpV766^D"۶˷BeezzAXeh,.. :z~_C d2m>TFa3`qLLL|.$cXQ)LBuBK.] Jy7x* ZM R6!& 4)KRy,ITjz 2O k If1>>@ zb\.yuG2$I"GJ8od2Np8z|>ׯcmmmĄiY6[upht<V?8 [, > ]4 jrueui%k%{666DkME$۷=G"Nm| 8]DF0552Cp*Y<$ pSSSEQ`ca|h6\p.2 ১ㄟgדe+++~:= qn6eY B(Z}_z?,B333Mx?o) =&rD u쥫B_)(/gϞ/vۋaQK"FW'''?d,"G&;8s Љ4?' RB6z ^cii @Qb1LLL`~~a`yybZ Nu4 kr6mT*d2J%,-- Nۖe4Mt6 fw:6MSjZAML(N2( ckw_Lj ]MǮZ]]}jUA#_SdgfZֿ1Mꂐc"(4MQTӜX,okk@dG"8D"GWӝ>zপ*`۶Ǝ(:Ew?"yM% ̙3%n ַ.כňD"IUUVt2WeYlJÃh&cTH@bmHPLػw;HwHWFEA~|Gywfu @w~~;dmm777Mf)RHfYf%I^z?c#UJ0~G?355oppU!; ,q̙ 9ͯ AKJ\.iY`"a$U$i=r#Pr"S:"Ģ'g}X?#B*KKKX__qB=ImۼeYb4i&4o7 ' E%n^:JHdtNjrsV^楴emLN"eW @E`M(9ȲLR]"BEc~l'8/IC__jhQXf2VWW{:!H0Dr=#W)hd2s6Q.ٕ+W8o.ٶM {E$In惍FchrrNh4j0 YOR<ypl@=9r $IB}?.YvRt+%~&yPUu9NH$#58DTOYN8@`G .ARBŔgRWszzZǎ=DQ5ǻ#_;i6th4Q],(;$:DtG?6|D‰'ex$v7aKZbt: -@V]"U\.ZV|(Q e?7[ͥ 3wjZQ8-J;&$!ƍqw[+w|$,ױޣe|?biO}S8qΝ;}bѿ yb1qy9>I~$7/yjJΧp8ܳKsP}ƍr$x|$L?D?uu]wj ;“TgDS9԰ 4w_H$ :tꞫ^ǃ=H9XNN*JۧO> os>~& \6l$zT!IҎ$8ز,ʕ+_^]]@%ydƛo9'z|~~Gp,shWrCrO:+%J{l䞐_}֭oj}o߾x< a ݁Q?$|`W^nLWFFFP*Vi> }Z|FjJvE>MiUTe41@{GCk_['I&/YO"<@&QS{I={`hh_򗡪'ϲ, DQr9cbS1$@?o?u0яNݷfIRh^q`dY) XNc/,,,2Öe$I"{N{?DPlӀ|Y{$+lnFFFzϤ+r\v4Ls=jM1Y_~?{o%Y>efdF.dUuUw7M !X0}` x|x`2}Ǿ aFMknuڲ2rXW9yjʌ勌y}o~$x~7~PT IN:|Od1q8x^pU:` Aat5nrr,!ǃ x衇64MvKdY2B$M ?ErtzTH$lvڅ~>A*C=XZZ*:$ ;ӔBr-7Ǐ|3<<|'z8hiعDo>|~#%34ŋOvT* ؒHVC>0vy0#0 @k+ N }7ZUU2IhI%N {7pG_8:$=躮722rԔNm"K ˙(JXXX:u8b ynLe}28R}hvv6t]UUޡ!/)h4BiyT)AA|qޖR`vy'y{}HtX wq>4M}8sL_NcL/IPVr\+z~$i'`!OѣGo7MS;DŐd1EQGϠЎ(fiΪyRצiBexc t HRu6}f=='E>,*J =sT*9.\T*5pIGFaƋ v[( i0٬?Lq\t mcddO~ g03!XYYvKҽ϶Z;"&'']Vb7ܴn"NDz7mj9$C Fv;n/?tONNjD‹bDW3bǦigA6E^GUkRj\ ˲/~L&2j=;9VA.&s~Bj́T*w}}})&,y.<-Ljks1__nϟLMM/lVTU#O|XXXӧvM9Ϧ)+,*ZySAA=w^b?I C͠<EQX,τ 䳆JRUU=eOk4<۵e6ٳv(Jv}ߣ{offl  B:,-nR,Lkd;a#0#W&q]ןG8V V {S!7ض\.SN'tR277G|\ $۶J #H$"R Mo 7vQVMx1UUNj#FcW=ѿ Y`B"9 \4Mٳ_r91JallFDqm7@FpЕl˲Pqox((YQ^щ9N C'o~ַ'EL*!fI: - {YҭfZv%N驪WEIӴZE|:Nz9@H`cttt2HX,ȑ#h4wo2#di,ֶk\+AvrPJKFAC;Vѩj!j taEhzzN{pK IDATO06M-mAt5r,N>'^gd0^#N#fLjZY^p`+۶{ib=(v?#0xIU59صk;m;!P |O&XLR%kxwxǽo65&a@G BX0BYKݻE"]d3tRBV9(V*˲KKKpbXTUU^$EӴw@ /v೟,an~ZOJ eYMaiXĐl;NWUU}hXop {vu?܀(N2HxGQ|C=LbrrtڿVRFGGqžU|$ߛj %N;OASUUN:X,Jm4?H<7ǁ$IH&@?Vض훒sdcic %HED.Cp?>>Gud{^;G#0#W!s,vm{YXJz<뺾cG$A+HFP(P{/;ӲvЯ*c AI_E>!MZͧj̆ǂVbFxZ.*91լjȶ~xxxassӗ%xȲ1~8q~> oT*Ғ344䩪|aH$2(*,( _.NjZ)Bk=Fx[ߊ~|zZ/ѨCϔ Z-˃ntjakk cccvIMn'ǎ@թkz54~Fa nl(˗/QJm\/$Ixyozw7``=-0j5lll`uuT?uϽJ|>$A{ LCʴ266IM$VZ"B>AŲt3:!"3*5*INt BAؽ{UU# KP/qpU-y?_.\ry4@Yz$zO>|&9(GdOĕy$#Z-o۶ @`.R iwFGGsRU!sv|IvE3 ;Frq3!AQױd(] ] a4?<^ȣ T*L`iXH,b1nob\.<"|rD3X!;/|{A62 nVm8qv7sަĉ'fqAy^^/t:ĕJ%\wub,kڥMvYVPWҸȚ/rL&3iC DHi08uԉ-7LBQO ]|OVU^[[ۿ5W۶nz\U#0@h7^:Q A6AnЮ"oo3N>rM5::34$2 IDh6I !6Iɍr;7wfij+B%n@ f fl6G4MX,B8NbP՚Hm2D>+WsAUC#V'TUD"7s@mVVWDZ/[G9^x;c۶w-?MӢh4X[[ZL$๮ٶ}0l6[__Jh (@tصdDQYDi.IhUU^:޽l!BQ躎cǎu]8qa׈8vT*Iy4 îjx!\` ^y$IiIn}*u䞈G)68$R/#玎~Hwh`}}>H$D\]˲FaUL@qY#<4M‚F^>Kz֋V+J0 \W\A,A'Mӄ(Gh:==qmCežavmmm|LQA,=aܳ>{oaLft\bEBFaƫ4H2%IrA`tt(<_]]=L&kl6NKk*q&e&nj\.cqqkkkZMK}},PՐdءj_#!Ni0MsqӵZ r^CCCoWU_ȲE!npSY677^.CMd2=`?A!"JAuLLLhn3Ulvpu:ZrJ,;,Iu,j7r666' <\.n%@=ڵk;KKNVaT7|>t%$v/%wqxy}ٳgSO4M`hhWCeh׿D"8qF ^tSI,V4 (E'۷o8X ɟ#cn7H@9gW*fY*5r#&&&R)?;Xx0Hq`asssVpu&'3 9Y\UU=vފ0ͅkt=¹0#0^=ZG=;ΎC### Y4iPwT 333h4tZA+ueP(L|PDKj۬yhw|;\oTigӫ^N۶=H$0::v04eYPc{I ӻmZPaX^^nW*+ͅRt)J{]<;~dȵ *|xl <E惤3*F%?M>z xn~ 24Ms3 JMR\Yߚn,$8O=s=s u]# v-2/R;`Ue&(f#GEQqq>A:B=ҏ~vlRARX*q"vލH$|>ﻊCDjjکi6e8h4| <"i~RӴdٜiBNӤԩz.*$Iza: NưFaƫض\YY9tV㪪^/K߬Ipxxد@ҕP: H$qLOOqe"A(\Du, D"?ؿ?*|I|k_d} Qzfo3HE3JFcJ︐nP(4j?R 8S*#OG5tAԴK]njp?###>|9t:M]U4g-ͦu=<ul6}Z2h4<2rȑ b2 ~ @ѣW\)꺮'亢n/|Fa+dX,>W,D".8۶VI ˲n2M#EM\qĭhVwSV'#tH6ZK_Ȳn _a6N8˲p),//ot]%Zdx5O$eP(@u?) `zVe[%U (h4`*^Z' ȲtпrS0 }0h*7@Si *kyzp{)׾F"TUűcǠ:NKeY8xkfgg{NHi𖗗W{~tky>d.۶Qݭؘ9W-tɀ $0#Wg᭯?"akkKm9<<|[4}BӣmHo}}ZHUUj2$K'Q":m?xq=zw~wpI|߆a@y[HB[(( b{}}t>L*9$ i`g1&YŎyM7axxdҧ1EQzH8u BTXą zeiH>SOS|Fa dnN,zy|&M4$kt2Njz>0BWMFy %t:4mܧaF!qt%Vq{D"~>濷 ?S(, |yAW.n}}ɽ{q/h Xd2 Axu݈p@WaƳLY4鹆GDQ,[<FXڗ p\Y8Jqy̐@;l6 u{/x6ylA2LMUrl(722EQ( ;<*\OAwx/QnS`iZ݊j,L0yCw,m^P 'Lh4"2')HSSS?;:: Funvv;3< @goW.l۶lW`&DQxq3MlpN aFa `"*Et:kxJ($0 f'|,[@߄Lxuh<2Nti^l8('˲f6(FEQY.xpIHL&t: 0A^49=ɳ{pN^%IB<bD7Z 9߾!mۏZZY4H6Xen8$@X,r97 x &}Md˲H$~j:N4॓gA g9þ}w:FGG8~8vڅg}~hT*a~~~{}Я|*u7 wNU2 DQ$}C{,頮 @hX5f4MK4Aeגeٽ;44$t70 Wkp]x  i4lj۷mLyޗJ8Je!L GaF @ GMFSl6i65PT+*hdE'WT$)i$<8Nj\\LxNǭjLf2),+IeWEZ˗aO1#={8nEJATBH'\z"CĬ;;7<@ n#қ=JBn ShzbUU\ћf}aaasTrYu> [[[dߞCCC(G't孝$EiPJǎ{4[[U'uTI ]٦aNӊCAݗFu]+i_v/D X$IRtX  6$vo|}Gb׮]8wk-...}[züx1fc~ߌ+W 4M4 J?=v 资!x6Fث_d2!zAQ +0 fggױ]o`?NUUg/*j{鴗N!z<_jyǏVպ2"aFajiO%4աu[`nn?zN _%#*Iu|^* 2M*J;?y^}A^@?e)l6fsL&dY:$b,yⓟd_{t(>hR\.pC!fB@Gx@jwdnY ?Y]~ j>s :̙38/˸t7ͧ?4M|X<쵑N5drN|S;Jzrٳ,Sv'''߼ߩG{TpOSȹw]Lާ Mb~~,~4p8sUUd2ʲѮ(EK 3JtQM"y/Lh{0~Z0#0 @yv:kfm~RqUUA$K8 L_ 41*+{rTzT*0US^AE({V{u:t$ٴB=L}XZYeePWMOO9B$ʅBA@>gxrLU͑AUU~SSSE‚e/b~~VJ9Ɠ*d0vEfK9L&GE>|ŗem{,9YKi> R1d9۶v#ׄ8~ʹ .,߈>fHRܫ:$IbGCw?<ק;o6 KKKw($TaFa `߁`,w~~ȈSK((t:ugiVz]vT*l[V&kl7Zc >XvYoccAv'f1&OtMmcIG5Bsx9cٶl~:*p'PA}ߗ0qA 1KIc? DZ۶GS2$vJN8[n޽{J*x:y˲ 2fgg/^?>*ܓ'O&Vlu]d2oFI8q?o4OZV4"r\"lmmuɤx=a}}{;M4~t]TUg }=zt:=66v뎪XYY]|b?A뺸tb<Ñ#G|NV;Hx.apg1aFaj Tu{q,--' j4u HEA<$I}ߤñk.AT*q\xqquui\l_'4&^<Bhu'X.O+r @dz踗@rZ,@oRp7;USzN0=fcbUN0Msi *虤 ̝/ My~"Ld<Zbqq;yWWWK7WI@b1|Ct]ҴqѲ,2}qljtE~[a,% L"H`%@jammm>wB9f0o'IGecdd7 }766O<R155MPSeYF<NRJa@Faƫ IiPگ 9 }udd]~<>>'&&b###6H$J0??{Ы QpH"JQ0PQ|@{2ڤG= H\Sқ{;["/JIzϥAwy$#H$F5M{1Myx}z[tΞ={y]hpNg`J=[nlltK>gl6]v%٬M5Ǝ0 eq0wuBhi;-M>Ѩ<,ceeedw!#0U @s0UA Ziڶms w5M/_F"i)F,DžeV>zklN6iENhK4-@=V*o||ł^N(t:W"BRD"[hԡiDtMK~9+Ri]\p8Auß;tF sA(8}t !*Uհ% Z-DQT9A@H"@h4n<ۨXt",I1WЮud2:OI}WԱns=ϳ8޷o߇u]u@+I{n1L~ʕ+y景OMMcjj*544D"ѧtvHAQ\t mcll R vtXuȶ s>"0 ߀&ER u]r9*kN3M3taFaBF) k%/7b&9.bMh(M[VP(,Yv 9۝@NjMѸ|Div(Ab#}0C[G˙L&]ڍFz @6hƇ8.f4m?Q@i'ɾi4Aݻ<|pjddvEމDcccV~eP(z\͹':3ϜY\\\׵f^anvi0M '6N133]nQTPͅB!wʕҊoAC/v<GFF~=HX__5$,ht]h4sHGcl6XџO߇d|͸뮻8|_!m'&&D9YvbEwv#0#WdD쟗JA>HIѝZ2j/IYA*q/I 07{MӐfF1׏:_%|}Imm4=EQ|pvpt]AWIj~Ʋ,nc%ܜd<_Z__3xPe HPH$‰Qr/G$yti{u j/\׵-˲<ϳȈ?ݻwox\R j՗2&ѐ$z]^^~jvvvZ6p-=.$h.S8&2kb'2O $l{f  jאn p~)t+|OJ&.b1=z}[▗nTgfϞ=SSSL&w6wRe,z'kףG, P&jyg~ٞ0#0 @t,^wx) lnn)n ۶$l"NsxIz7 _̋/xAd(?zv? .ZݏrZ,FyCCCJxulh4}Z|>Z4td^w־gS ;_Q@KEzG}/PO&$Irܰi1MӸD"M| (yP:ɥI.Lt]?,e<6X,㯍Fb$yG4Fyk`Yl6 0s4ɸdNaABͽǑJ\F\zͻEМ^oeYFjqoE0·aVX[[v L¶mus$r+AӰ\&igguh Aw={n4-N֓C,=<*\ Nrsss9Cd NaX@w#z'ϟ4V:M9"` J]Ba JugR</g4=jvR,+xOu]Y)[^ɶ>ha… eLRU&Fqu<,--PD̃޷]lnP K<:?jPVqEj5?%I (^&4Ik$`;B""H$TIni IDATSl3bth4P*i[ң(q$ KXe-xD"b"TUuYYYj&2jkv5}#Оea#}GFFp7UU144D%t[* nT誻$ISgʃ<4\Y2>+鄈Gy^<RlŜ Z-lmmassEK:ZnjoJ9q,^18ymA9iNXr5\j:\V9(Z/=nkc`阬 hg} A]9z{kkkŶ.ӃĄB<@hcJުt'^#Wa`}}}>vg7֋(0#0^(RW0MsveevA;\zkF}q-IUUE<G2u]G&˗O///5jm1iu] qj8xD"t\~ a؇(d28tpd.ccc$nWh?oƿl4/JRպ1޻.7(y|3vuH>EAT"*PDrkkk?WPгp@ze?׿xhMbv};ZD <8' 1L.qb$9ϠeiA $OP nir9}R}WBjYA4HWA; n&*W*N=GDQ|GDQgWk%Cxܧ] .\xAIp=0#W3e/a!"$u]Mϼ2&ualHzNNŚb1Ȳ ˲' m_lB U.]tѣMb: )iVjk6gz'RcF.(JG23Mu-^7>>0Fbc8Љ1M!q9b1߇EQ6ilYJ2L|A9نNMMcOfZ |v~ΙeY9pSR(X`0T*fRdq {ww+++ɓ'(o;CBB> ㉷giwT*|x{tRUw:'N^@%z jAQla{i.^/}KC_[TH.?5ILMJI4 {y… Wѯh2_KRJ&>w؀, :'Sv|>_,v'4I4v=Lrr-~8 Ǔ=sH{u lg|>Og x@$VUUm ίJ|y9YZcF#dubFGGxԻݮY}-lnnINip8lAi,NNuT*|, jAjw L&mq9u>Z-^\\AvXB^_䀜x%atpw"0xcg?b`C$4 ;%v=׿$ٳgo}k4Mr`t:o߾dH$540?? ,J{ :Ǐ۾}x>t-Q1F]=f:4F-fӶz>MPT/\ CYDE:^[nO@[x<W\F!pL`p>"jbddPN; I)UYu$I㮻zK/405$!B4=C >/SUUCyMx@l60RAUU&RY2B 퐜={'OD^GA2u~e d2jjjw>؎͛7l6Uh0`\._ L!#@>=FjnkP7* r PVz} h n,~=Fh4ww6xv v4M &$I>rȿ7"dzNADtT*gϞ}YQ]|1' lh gϞ/|V$!N~2R.!" In/ONN>LăϼУPVQB!b)UUZmep{kKOʲlC,8p8IzbbX `Fv6L'Ah\WifX3 mv_zycSZE 42jիWJbQ99;4nMtCMv靄\.t6(b32Y؀$I8{,(2 2GF>{Z֗Mt[Vů 㓓j<>>>v5C2 :Zr}߾}i1Z;;;4k% LBܼ>t:m0){׮]Cr(])|r b^P!lUa|*"T*lnn /^̝:ujkvvvҲ8/dS}inw?! NBVit\YMq4 >MZBv yp8fi"ro@4]+fXXXK=ztdds\Aݵd2MGNvJE[XX(wz ȚuxDPs`Y/q t:n{wYi ~,ˇNDPAR Icw|||f߾}JR}a}jχ>C.bѺv7+ߐGQH$PžVQbuuٳgѯh15'''iddvb3R>e; $B8FZO9$IH1t[n[?ZhN޼O-..dYn~LMznݼy3 -Li׫#ѣD"~:GXP񙙙zӧw~zr+(Xe;sLe|ɓ'O vx&"0fff<04ΎR( 4o}aǝ <1(Ѓ,D[,mVĉܼyJ@0 }yy&`05 #{3,tj]a 766.>|.0,_ǰni>Xrh4uvccc[YٕuI wYeIdnlllo0dLOOR6uD@eY&-T*accC ÈNcB}KEQggg?422bw%L&:dz~!%c5N]Ƒ#G~ctt4Il'Z FHľޢ(>`ww_h4lM|`l¹Cr-~tHXeYl3UrzLA@V3fffA+vA*2|\.a>i,;?ż`PT*:-`%=B!T*!uxt!t]b13NV?KRmYOFhL$IA!@I~jf?[R)5w}YAoP@.6DagI9eEiCckwhlRP(뭹*rMiFV[jkSSSo IWa{5 ND9H/LWN4͏ !$GJmll,_[)v9==-FiEQMFm!Q<(C=7N~Hd[ vj5,//|gn[et]Z{ MIUUMVSDdž1јkIbѫjd29x%omrn[n@@VVV4Ͳ,Ӳ,J%!tP,!",Wٕh4bᵵfD}C)2dYF$Gwzn4XYYA,,3 <ӑH$L&T*~bb[T.  \#MLL# uiPc~~`rrDv>DphD"6y_OSF;;;(v7X,bgg(ڣ&###x8e ܚ|z7zƏ+b1+lJ5#qww|$GQ4zc1V4b?\g""{Z֧q.‰۫m'[c eycdrVwaӘWZVkrrE0bGwkk:wRXlYMDb~.tMz<:>ʱ6om~[[ NoddDS`FPSٿ5J_A!N4=0MKFr-& ?(;eyYpOD"$>L6VWWJP(t_oѤR7}6VZ-\t4c;ѱ1{$4*ѨJ_ HPH{SŎ-lvLn^Rg b:x#|;22bvx"Do5kVWWQ1>>ڒfoU>EQWIϱX,__@>Q, ""~qzjڿNRnnaajl6;*rXx`0?A m |gggn[0`U.!/,<8y$2`&4JR3?:$]]]ݨT*stTU54::ȝ+ `_F8FkZW}>50Ktzv}}}wm{H/i^NߏUFFV/; g툄{:^eYit]d0>L&q}`&}e_^UsNkff#L`ݨR=/| Peo {nz/z_&/ FeY n"B4M$z 5-fGX'zg9i?\2[n֏.8qb4/t:-`dww`dp"D}vvrw\u4 333XYYA:>lllP(ƍh6vGDu~hUUDD"!MOOt> c4z&fD";v D>fwEbD( ":੧ɇ!BG_Ӽ~>_[ZZ: :-ǎbbB `0x@UUSe$g:Gt:(J}|7b1`krj\4Ex+[Ej\ɲ,$#311C$ѯ\6=` 6D+JF,s&^fNMMYSC1=Vjo}['82i[F7aC$4t:>-"@ju0Oy(wONN;22WUy]+ibaax<}vN~aiw{]xa &,kXGt?zr-Q' 9yfgii˲P,~:*b؀a_( \x`=NyBO,;v ѣG^z RKmh4jiZ\j4ͦ>55ߍƢѨM>XPCŲ,N.WT5ckk zOE,cddHGO  Ɖxc?\v(n+W<{TJeY^ IDATt:O&bCk16nw6" `Vեn>7Az3Gu! "~Pd|47@,y{pxN%l=,Ai4OhaKۆ8H3A.VA~^G.k|k_no[lxdr$yo0TX'+A,w wpUu]|D4Q=ztxv!c{{)ReF'+l& B p4[n[. DsέXjl,JGqخKH{ S 8B!;^ڜ]x^Z-fLMM!]z"jΜ9cfdz#ZB&Q*Z ###;΂ڮNߏ^`O+h4T*u떸re|/ Fԙv/( @u]l.--}oϨ:NlP+U,..>!YgPQUOa.mtɲla}}j?KB ܶ6_c"8tl6ORHN dK>x^(}衇9s2CL'@]"H.ETU$ ReuNpe]׻vi$y>`Ф*ImYx ÀX`3t{t:eY,a4 7n܀,H$h6v"y<Z-;ȓ neo' BgeYN&GN[n[?@ϟU?o/d$ŧ`Orlyʻc@v׋jj$nkćB!;v dlt0!FQ1^‚lEQ8rŮ]iPVVV6o>&LmhT\p1gW`v7&J vZH78%w]G O9Ӛ< a"\.R<~1d RU z %!(u^- Ǯx h4?R`X !7d;FH$VT08ƒMŐv~E]no 0Őf>h(J܋.\Xbzl6TK䃿/.?/| 6续BON###\ߩh$IBFTBՂiPU>@oq4MAmjiBaO⶙ItHv-r˭9Bˀ)͛8PbI'{Vzv" @w͡H$bwQviZ-m>Az> ߏo|#Z:N:ZfCv\.#H o9;5MT*looϟznnn\ckk뉭- Ţ ' ^WUs_*{1ht(h<#b\HG|D"`0eu;v:6D;+W,r~n`nYvA{ճ&n /x|d^- q{q/q{ ɊՁ$}{˷nt]g :pʲ &K4 V8p(+ώiKJ$M&^V Mg>躎\.g ^^n pLrJ%t:=@>-1iX勅Bayccp/|̵[n[?Dg paǫ|>{?mnnָn~U[(J<O<,vȶ?LG~V3pVWWh4II}X,N?|ſ."߫@~,Jx q-r-$DrJ$I8r"~l#v(uHAdd||^u\__X15u mJe4Mx6 ׯcB6Oӧmת#G8x ".^u[vV[C#6bZ]͛g.\\כ=q$b:ԍLt<.:NgʂiIGNK n|,Ks[ s)6,XYYYpyċ&c}}T4]tEQNiNp""w<x쏅_B(zF|=;aX,n EQ(J\叝>}OJR#e|އx9&fY֣XIR4>z;;;?Ύd+H$//XNVNX^^(vhg^`.JawwuǃMܳvKpm3Z[n[?{ E3MrJيիfX]]a]\Ǿh4N `v=iF]fXDZ(bټh4Xq"bddf^ Y]v] J|'1??o0AztlZpFllln:u… ggVLt"r< }>_1q3V% +{$}o:Uv:Jp8lM:-\ AaA+"tSV 댒޹7YUUnZTsw&Я7y%CDÔ7:ߏ%]^B 9Du]V/zɓnyfi@m=r'"-#¼L&c+=H R ׮]}eeY^/ml6:NNL:23==m댆u@I 8gr9}#p^(vm=ȇxt@vE~[nV?lVj.,,`ii>pj^-bhZXZZj///?i=fnB!_6}$IV@ =,=IKL]ʲlId!xlMR@߬8?u;Uɓv8nL,n#;*JX[[+>O݈gYIarikk/E(VwU+<޸q#777oy[ޚJQbLӴ5:ccczA<x_X(>-˲fӰ!˲8f^o6s)17| x7H~ z:m(X]]E0D,넮N}7 c䮻Ĺs>AA9/pɉ1-"qu+++<k;x0}VatttM"V']j(f}'[(Ndj&lWb6J`G hۨT*ʍ_| s|ˑ;7n-r-0+}c.b Lv]jG jϞӌeYmnݨչwż ~kkK BX,~_`nrbY2i`Ie@ղޔi kvvv /VWW`@[!!nՔ나ommiVр,=#ڼC ʼnCO,ɓ'OD" GǏb1jCipz=쨔>*˲IM,eM?Y׃z c+sY!x YpxCԩSݵWU鵤Y)­[6MSCCsj7uAtf4p8|iw'I)Be+NJku8{TRӧx#)IMhYlVX__7xo8t@ ~;; ,e< nmlB~Ȇؾ='HdHXNr}{ƍDwHB#xQt?-Pu]@JvH[iz6y  h`ggBh4f8IgΜA*B\|n$%Ev7%=cknjĕ{9| tfNdc/g2[n֏< sss}h4~ * h4 }PwD G1liiiIϦb1(A6@Ӵ>7zvu]D @TB<X)G<G$(( #/Izs+MXf>vvvEy:RQ,z|V,;\*^@rr !V 1nG#J$G(s$!H$'# lNu$Ɍiݖe|B;cHiF3`p('0s&p< 2K_B Ii0 R d@ೝ6b1h>}_i|S4\~^xx $nkM:\.ہT lPg677_z.2&=K>r-rkHli}{~e!Nhٲ,lmmaaa(bgg`fu7j l ˲nv}) cW 4aEQvn Cc2o&w%;^"\B$}E4#F,o\92{X2{iѺnkaa!wcccP}>Z($K$,//c9}VH$270"jvIbh@Q>ǯ9{ދ?a-o(xg :"H(3l.loo_:qĕ!é1{g-r-^9a?@ ?eSlEXD..]I!FlB ^=voD"%?8|I;Jat钽X]L,2П<`,̲,4mYc|?YUUvͺ9-OB,xw:h%,P|HlBj`Vs?Et9LY0z V Vo@ZQ9vH6l%n[n}Z޸q`YhZd2" X `zA{HR`61h$W=V٠)h0Lbjj]$dB9>bnk"~YnR(BUߓ7l¡ib;d,uP:XWb uBz+Q tqs@ugϞ=qu=LÉư{˗O9sm\ … HRX\\zy~fqqxٌܱv=Acܹsښ7Xau@#`In,gh a=*0 -DXBa3JMx?:f&Ο?oU9$b}xEݏXXXXps|t1p[n[nJdnCSvMrp5vn+%X|ao}+"^|EzDݶ ‹z}4M4Ml&U%B mt:q$ 倰ôV (Vuc;:Pk\t2AYq K:r-r! 2A DXDX޺uO}OMLL4C` lUUTU?˭XsVA uib; j(vj[zux uxŧF>v"!d/ȲM>(%ITUr-r$ }] V^[ևE)ܼ[n`ÝreqckkkgLx0|>^6#*kJd=jPհZ@vjHuZv[V% ciP(B!B!Ȳbh4PDZlV!@UUh%x<B!h),//kwwlw{8u>pNr-r5 Npx .vB\ t:} + #h5Mx<@ ƗžR~J}d2v Qn#aw FNv/ %i_fü Op^X7Mh+N#`DLCzpMx^>8;;SpXAh %ZVoIdhhhh zRvkٮ?G݌v χ qB!q,//qqe](|}}x<k=L]%B5EX,֗ͱGE`*7nx4q{dYC !^P(TUt혷# D"`}ccc0 lﵦiBe֕f][nep /7JŌF}z hQ(lp{{a *02bBPX/ xvttSC%PZ jTJ7 ffd2l6bP(t(T*&NK~-j@p=Ye\ŒT*|p8mN\4mafǰ~o߾]todf8pQUU?  6|@y<hf~V#ijZw}}ZVEu3]XY]HhZBCed2oWg|>__O0WUlooΜ9`0h|>K$w<,Qg=F="eҵ  [zO W4KYn9ZYerp8Ç#hFTUEXbJ@ 0pOZ-$Ix<mܮ\[n[?@L"΃],,,i*w@KqEQP(S+|{^aA~x1Kd$I8 ]ח9`4M~h7M6`k6TUU* O+o BSӭVWa.M,[,G Ðt]H;ΖP(M" H+DsҥK|@ؿ"GBA5owB0bc\.wt:u+8#, Kף|04Mh4:|<#V8|0^z%{qvDq7:^,O1^ zb8$I<(~zbb"A"P9s2F\. YK@_ y^iq||>; hRe/Ql5:~@w7e}/]|[nk@@WZe,KRZ po,(cǎ;;;o *~A98v܊ U#s\NDQ;h966/FdTXzRw[eZz}Zi;;;_ }]LLLur@$0fffDϓ29  vww/12a\5 TVrD{VVVV 0M@4M:l6-T*x.//~U.+}fa+Y l!],l$ITU}(&o)Ms~t2666SN=~+fǖ/R7aݘd2`0h]|>ȲlgPjP(D1`&k68tc&JzfJr>r-r˭WYîZXP px-0|"n[:i"X.|( 7VV+%ɻ}>_#cAZuSV*Qv2c4\WD4{{or!p̬:[,{E z΅!o浣GGUUBnf4M+ m ɓ*akkJX,/Jn1(0n֟y1Ɲ/ݲnP6199x<UU?ZZ+ 5 Z \ΘynmJRBQߟm\mj5٩9M״r|||:YP(NLL Mxst<^/m tOlgT*!H@e[BVׅ\.w\.W%{oZm[n[n5 NNtӥLpò,҉ö ^w fq!kdd3W^]ܿn+Bk#2B<;;;}֭"r{ɟ'n FX̞g<,aQcii/kCZ6koطoߛc ;>o.H^[[[/Bx3pҁ>DI䥥/%L&sod;~؝RSNjZbggW^}1 ( bFXXX6BoXR3:;|^KKK;@cWBAtS׮]FPő7>1x6#MVVV0;; u?dY 6A# uEivnt,4 j&33QƠ1İ\r-r5& ȷ0?a滝ҷ ѣ?].3xyB~$d`rL&NmIF|>_\.TU+Hwb~px% f]$SiPE^:< LgwvyAOjz鼾Z}-0L&X,񉝝IEQ,EQ$z]rp͈^CS͉! V4M+Nggg<11a*R`ccCp™ӧO/q05%NDG<t:}<9Bmnn"HYw).%|e~~~^m6EҜȐ$ID"p8,)4SE`GHAbhXt Sl.klVH|~A{9]4>t[n[nV$Nc{{ F`x+rz"PH') ,|l6hX >fړzz4M0޽WzB`͵3iȁ6}FEQ;`ǁJӿ-Zef?2jLD(躾Á[W aѸX䁷9x<3~G>U8rܙkw1js ]v"aǚ`{=pu>~a  h4}css:{sΝ[Gs%W,`fO,E"%WHĢ{2 !Ng=ǚFD"K/{g:Ò>V eattPm @$T*e_@Z&5vM~?o ىϵ˗/_ȝS%n[n(4jy(3o*z)CQֲc>2RbȲpi_֚9 SK}r|% .F>]vqiYZ#. #f\DOf_-w(z=`}lƃ%`,a.^&Gԡ!kU>^ [[[g#+n1v<vxxp511!crro~Q(/uٳΝ;;' 5qOaubbFFF}>`rrW\ PU`FEQmeaqqrXmO> >ãt|vvv099i[6~XeWP(PN $Ixdkr|LLLMoz"N:eذΝ;sV{ l3 $s痰ɤR%I$/س6?椣a BmjAh}L kϳMiŢMMZdY6B;Kn4 C[n[nZUU!x>.btaa;efd2d2icXSϞHz;W a dHaQnLj6YVvmY’.EQH$ {1y57z" IǃX,CҥKh6v׆^*^/+ ðt]dE<av[T*zvX XdHOlPt`,--BXK`Fk,Z!M7?99Fy>}z|ʕ+ƹsџzmp> QIUUʯ >.~cݣ$2+#wuU-lYjXcHf9ˬsYdz3,0100323 ؇-ɒ-KjUGTQY-`"#nf}pw 8w#8zOvxѹ,eY.fc4ԩcquxR<][[[/-//W91J@" + +=a~񳄐ax;4>$NN]v@Xdy=vt:r(%$i;Mm.b1/u0 ~^;¿ށebvvvb}}q8[,k Z7f30} ԧ>DX,^βrIٓP(osLe< h~4UUX L۠ +++K)ҾUCq${rzzfC9{ィj8{, ` pG8^._9<:6>D"d2(Tfc*r|#xQT| `ޙl xm`ffB({O>:2",1 ):u R 82?F\.UE^P{oy[ggg?$bnn|<677O<90@(.>L2H@T*%;9UUH)E,s9ew.677.zނ胱,Ȝ 뺟eӥRM&>aS6css ӡ7-7 e83=Ǒ|zA#$"aVXaM@&''}9==(oHDEgzm\zj7L~̌L&>dYn݌ +ۏ$o0bL&1ь@iưxX,F{o V|ݨSDS,E~iO([[xއ'N@$VVV/|v DãfYr<;gkC9q `ۅa4Ε+WCިfAQ0# +?$ckk SSS z 0'ěUUm{H$,R95H6FzUUQ(2۱`,HB6#"3D-`wxkrgVP|πW.D5 d:>L&+a%D,LV:Aem{H;NeZ ?P''x~˨jmW\AAѻ(8y$$Iµkl6cEXr#;1Ji;xi,MZ^L48tЇiE~(=܃+ >2 <㋋mu˴nQ}ȑw%I|`'I|d#MZ֊8H$'$DƍXZZyL&3rah@j5څ5&ra#%^Ƒ IDAT7pCnNC= +^MӠ:LJx"@1If}82EX =8E%KE$Iur9/Jl6_h4OZ`Tw2=""Ire0NN,..gu1>>˲}q:ru>;σ^NF@K{L&ܦo0Pn---,"/f27u'8 @uA ]3@̆'!cLJ otIhw`uEqsw+(X]]?Almmٳ0MsHp^Vq5xl6I4`9 v!۶QJ Y-˲Y,Kz8N,edA8v]^\.7͎Pd>/rllQ!f|Y9r,Z]z=J%BH$L&u166擔ޅ׎ )޵k׾| +vmd26hklؘ?@R^A(Ţ("+" ϣVa`wt:痖7FYh$#/@,rT*x<eAdpĉ̷!sd2!&6nK"t]`n_޾:vcmmdllD"eY&hީ)l~~z/ HCp}'<9EJEHym*ؽ v8qQ3򱶶&8xeQ#|<eyr@$ .o_֐>#yr9_d2iZ]ݫxApHhX4xe~ ,˰,  /:r~D2 ǁc$NMӄ'._\p烑[# +_dss+l6qub1$} qn'xx z3Гؘ 4Mc䇦R))LޝH$ǵZj.f.DE`\'#$x_ bQA#۩j>nN3qwŢbZo:<0G}TglFc~ǏܪS9R3OǙʕ+yٳg_T*̾(ByZ$IB> ^u zkو#;w<`Hd2izGpkpwF]ZZZ9Q,eFV;H$jHC](F>>.,hFP.|SZ؟x# +T &vwwQ,V% 8msu177`/1tPհ1L&&Ljz}ckk3RY,ˎmvW8+G)!;-Nx4QUG$q>cLO t`68G9DpBRԛeYΉ`quAT*(?{?je0Bk3`loo?kN_|СGjjJYɓ8{>R˃QBo>ڲ,t]=zi EDMq 9?Ğ?`bmm R{~qqq{~~"G" NXlQ]A zX~_O;v~pnnsss u魬x=zEQE"xHD{u2Nnnll855u(TE$۶m"I{STZUUOQvy4 RiWpD*2/X^ #!d2yfccd2FL@M#mXWZx8ԩS=vؘFpFN>7nH>Fpuh4vOFx0 `D)( #?{<~.ة`_#Q<ƨ_/Rj 4u1D"o?tr97$AUUAQҍ7~ad7qwn_m*oj0"ȯ]j5ի^z57iQI^VXaVX? ܏" z<ȉbj,k)= t2`ΎeaaZ vmIX.6771>>z'eYˍ:Qu]۶1 FxﱝkqRB,13=\vwwa=qQy#$"$l-Fdf_̒W$w.T j(,avwwt( ><_ēv'''),%[ 0??]Di_@>*lee=d[" $ 2\E"Pq2 .3̾nǭ8}monn"d*APβ,"H !"g ;Ƌ/vd3d29v{Wo`xQ$=݂.y!+ + (`Y j7,N34r@AeY$ 4MDQ#͢^͊HRhۨT*4 `Cx~]|j'<,rZ4hQaR7MBU!r}nQǨ pu,,,]z"[y>F|.cǎ B-WGeP;=zjJR)<am;ٳg__Nrwizzz>JH$2`$O!h4>fĚr9DQ lnn#A:j>8'|'c~iلyu![¢P(C8rP.ilI#"X T V v'SmVA$q__*\=yJ:G"!9j6x'nw<$%`A?__}݇D"^/˲a,錴桇;N\zvzި@=ض̛ ]l6jPՌ 5;efffD"ORY3¥z}-N{llM&<72+]S]QV~zmeem 'OhPpSlOUl,1\]]5VWWE;{s\$ǢX,池ˠ3yzXZZǴx1¾gYD"QL$si5ƍC&R<(MTUٿb=@J~}R.\xڵk›((u0#$aVXa& qh4WWe6eY~Ɔarvu72R&yyzz:5??XLE1^0 w{{[]]}:ϟ9sH* ,,H`bbB;;;u~h4+"DR `~~~(:\.]ױn pIl'ϣmAm$~*"NB𖷼[[[x"%`cW~߿e2 MbM>V񟙟d2r4uX׀^z+H(B%g<xO<}Y"|#?j>Gصcvӣ $'J/AO##VGH< + *a G0~xRs9@"s!Fl45$2^x+Ν{maa!ywD.LR 0Vw62̐%,cעxR}ob10 =T*xWJpwX,}{t]˗Z6DBؿ~T \\&!'*>#p[]4@_Wq*dwwbXu yU%m6/HwbuAt]ip+ʅ\.w*)I55{v:ܸqQfJ( &''|gL&nG^TT)7~2#b܃,aVg쳁}.vmwϲ,wKt]NϾ1`D' u4q? + z i$IL挦iQ~p!py77n{gr~~b1L& oˈHF6<,&LĵkאJރ%Rj5!G0`<9;ysbwTF#.T fs_E$z=FFDs`'Aoj&=.\x6g}udY~)LGQ/8Z?z7ގvH$)"y?l}mnn>=_TN q4</\.nJr4͆VU~3rimANѱU'~AO|\ 2"I%ѩy$U$ؚ mVGŊq~OyȴftdECe(r#G -//r`ɉdtHsY"("@"^@:ޜ>"'& /6F("rdY:qDX,P( N0 Zku2~i,˂PUR ReX5D:4M%bww裏~uG> |8!+ +X%⋯\n!e{mCE?ٚD^Uq04 ;< g7*^N^=1qF'Zο]X. FD5 mxG fܬ? 04Mg=BAC ߭w> 0AvW_4鴟:PuuZ-?xgJFf>,[O)g#W[[[ݯ|+Yz$7"ݯ(&aii L:A( MR  K0)\pŋWyL&=f$Iw9.E˲)D"쳏WZGPl7t[ծV/KGʕq;<$Aணk\UU^A~aaa៵Z-v^@l[(++xDZhf?Qs/ ']pۂ(F~q5DLAɨ7НнA!9v+ѽ7OZ"UU#c4N#Jakkrsl6:~n| %#S+<Μ9s8 ~É[ Vz"(pK7Y9((bRk5 + OD"H$h6hp] -uWxoT!r44t<4Md1[V,OATBE$ARS7mBIwns)and2P]uq9y+dlll6KU \Z_~X^^edw vp U*Bvt:UUL&l1dj=@D 鱵u.σeX5dzk?{4͡I<%]i\^T*i'?ɞ4Nd([;ls$¿PM95fi? mXaVXaNzNt]&Nn0Kd28i$N9Nh4>W/ @9ŃU2xje2f]$$'N:6hBv+nH$fZ v-"rjj^;ƒis˓ɠ/vM4ps}>Et#Ș$Ib^@@= [ <##A.QNv63 &4MqvU_4_̤nNͺdfgg}B˿=k88F3 TePyJ#ȞC3A%Wygb3'R }`3 +3^XxG,X,H-TUt|ffS>w=\YQ*`E>T*qT*s=?WZ]]]]mfȐ#}"@%R}X5{WS<2$ R 4qP{rXjv Z"^>ߤ~RԷgW +gd!Z.S6z|7_^ HӰ, lgTvk0.`x 8O`vAaJ)<X<a"k^h4Ffqљ+WH|IqP?ܣNif"(7EcT*Ȳ}t:+++d[; JFB*w[⏑X h]Cip2QJqPSבNxݱZַph`wA'@ ( ].)O}X%; w@mlre/HcjxuNHۍڶ z c=@X^^f((Q#o4MCDXu[~ x56r `D^{noD"rp BhmYVק%I.>~Z"ǯFH6HRG btA)A4 ^d(RUUi,hb1H$4L#G2Jvu]ٳg_~'l5wrρ:⠠RhwڈUDq^OٸL-MQ yԲ,\.G-BG27|銎9Wf2d2}Έ+ t=H4nܸ}ܹob_0xS&_A'@i 2Pg[7_GJ!C TʝLRõv|,5w? RHJ7C鞱ONEeE?Hcp@![=w# + +ﺤ\.'Kl{<< vndۙ;a;ŠĶmZbrz3"sBp:fIO==zpСO 37(l&b!I,b{zСz2GxKƭ[{MGӴ%_eE0.2T2,K?}*|w@NgY u{F_AE7Io;>O݈;Oo5/v!zAex]4(}AMr `rg{u}]CR$QzaB<E!$у={D<"L|iW*8/jF͠~$ Dd"q" JP?T% D?{rbwOv@ buF [/[C4;gn-}aZ͟xجjsa'$ +LMMunW<+yu D BXlhWcaexMe;jNHD"uY= ^b"D<J7 ZBQ(<Rqkpz6 P rT|ݟ}'Yݾ7>w^@$=)sAkF` 0\$, ~D$@Am& IHXa=џV)pE{c7:ߍExkkʪŒ&7l =b=ӆ 4뙦ކ9 {4fl `,ٲEK,UIUKeV"~Gčw#$&'eU|/ƍ{O ~B;897UTPՠN0åRn7-,,8TJzײ,xrl`.?Ƒm۳DqRha\ߟ1yLLDcA2NqLOO~6T?{Mqu<*}`p< )(qS;,C@2D2 D1?.PxqI2Mgz>ϧ㒗'ֽc:_C!|5oep9)ˮ\; Yt,D H2 ӇPc} 2X&m}>M]9s r aU'bItQ6ǔ%N3@Bu,AzS9w IDATu``Bqxй+(2PPL^$R]w|cs14z-Qk 򠵲32֋2!_Dln퇒- VNQ?sa8zTӶmYfIrjyjW1[ϖY,oZObT.?G&^/R0r ^׏)cEʫH^dbqszz!)_v]\`yk6SSSW:E.玲W'MVC%Pc$$zJ> CaHv\~ibww2flJ2 ?? iXIYiE'UОSH𦿗-  hZFB!Rʋ/'xrrz=z@}R!oVŋmۊnyt1^:a2B  S RF =-JYq`5DdVG=~ڷo6JDvqVn4FɜHȼR/I>?nx`L _sW@W"bƇ|Oѩpʧ]@MbVsЯA^5<</3P|`4 |zoЍU+]KWR*aRJMO^QeM}T* eX,X,rXm~nwC9<o0kZP`bss3mDQ:$+e!6TnUL_ 4](nyE,{'@LUҮ:MTOAN?0RQ,y8VUJypwwC,\b!%f}X[[xq#}#4ͩg}!ZfByJpǏOuVׯ_--(WH`0 y7o6[T8f(2uZv ~?0$VպaNEq*ۀb447V\.YU&gBUyKgWWWo$c a[*J_2 .|?!)~%J%y_δQ.OA7ʀ 9 ?(l`g f ۲K,C5TsA\TCq((! #1XZrCP9v7E <bg|"41 2/^L}N:p%P`J%zO? ^T&[>;#+5 .|ߏ+j+&''߾`v˲ZxV;R(UQzf>M۶ZeYv״ru1 8(z]6-oLyww5 vK>OEdW1aM\~]q΢^P(@y<, n鎏}c)He`%nV*fJ@"!Feꇰm*J8===[*XPcWTpW Ng[[[;ʮoPO0Ν;wu]ϲ,\v mcvvrrA败\EP&gVKA+WpZ5DC2=-i8?VTFy:`q|'> bssklv z^=zէ w?H@0Q Z-JPq!R`h 099YPTA(࡯k& PtJ܉Ln&]+|4 \|A Dĕn\,\.K>ԵMLLѣX]]^Z]RT`ǩ`0ޞWKt] ǀQ? dfX^˴`0r4/aW,,r$ f"`|SRdN #Y0`(N '{͌*s0\V`"&az?76ohI@e/6G8-{yWW?}}wXŸ90/m5K@c9h 0 ◝KbJ.wX9X],A;<7}_EyT333<;;%z|t](cKR RZ/~#r7׷w8 ܪ-6E(RzxGR5Ga-&5^n*/ JT;lfG"OBcrY Ѫy 1U,goIQ:9 q!PKRR Exψ 9jR`&OCKa9UxW*47}'J4`.@?t}6Wpn"0ش~r]?}ǯ'~Scp|":Tgj9s JdB.bmXC 0Mkp=J~KǷ(CX?w}2Nğ韦_]TR+eTP,Q*Ptp{o&iWDRZ={9O3{aRvv3Vwy?,..~BJyT*uKj̒p8Du h۴rW4j#~!R 2&s}}Oz.Ij:]jU ϲ•)4 kwDy?J5cSILfMǏ<ϓɋ]b(ZrRd|lnnn˗RJ)-˒=^___` a: fɀ0@VnN|HSwR㇑BXX`.,`FGya$-aiB2Xr|1ȄM4 BEq- ]glzӯ Zזăk`AqnI( mlsi^[C a&8f$Q%Ɵ*@ۛ= SDh 4Ec #c]d0k?= t{ p#@pyp@=:XQ?Vƿ'2i;~d^s۟vpLu! n8p=j ҍk]{ҡ4 o:Wc6#.Crx|@VWN"",,,nC:QzqG׾5,--XUFx<v155Oy&&''S+ 3 b:ApVannj6}+bDR`55yX,h6^)?av$/011^ciiIeaYXӽD -//SR fSX]]\M?WM(=buukkkKc* $Dd@,QPO8n62nܸNz,;:a`ԏ!DXŵ1])#"gMpSSA!P,QPJ뺑ǥ)%{tAkkkfsK_cPY73̛tf D`$`1ʊA6:4l{A<@2 Goōz$=(2 hX? an0Du5{72/@qx=? k9P'f`)QjaRA`$,ghLA@^Pq#>ǾH<^7` 0 nNuJV]d)QL0m8P aCa 211n;4PW  ȼGjۿx_w]0 DZ7ʵ{8f"f˸;ӀPƥvx'S@f3gΤE*VuzFN'LQ*ҀszS^Ǖ+Wp}@,DZz'8;UQN I/EGT*XZZJjH^,˂T*amm-qD>>֟|A]M?wPoM^KT<mox.VWWdg[gVsfRC%pbgC@!d՝O@ W9  CMu{FB!,Jщ'$%!Znܸ1xG~nc@H0t? K⠅U^cTIsE͚`Ĕ  ݘ;IvG'B12+` a&ds>nK&5уd'Ox?v.}LdIz7d zX^^^[o_zm|MGT@SBElnn}²,,..b}}J(T(#Gd&T^K%[(k̛`[519r)MU|t8v]mIQTeRdN)p%Hb IDAT+Ryφ`޳ .:rYuER:fff2V$tR_{x…rllN>RSjby+'''3+յzE1:1 \Dž[;g բ\ BGp،ͤٶW(d\ǏAVŦi"n?/ch@P!j1=u?sWe8&8(ueUFȁYC $w1iڧ6WϾg8 ύFqdzgoY(BFќ8~Z)(N{wIo{^Jf! ÎHHP>s_HyA`A8~0 Ea#9Ҙ5\ )3F x_yssD5b`HJu.R"j̠ tA8v~W&\)DBVqyG@m0Ѿl|}"J9Y l efϱa}d<8r +O~%>y>,A8t:T )8y4!TvSz:><[{ pZ}ҼT*^bmm ;;;V8vؾJJ%t:b7n21111@4͔ef0??cǎ+ FQ4իA0==pB(lڎERF )*d[ اgf_){5̠ŋe\kzpɼJ+Q̌AƞaZ(00$ɥ0tYlXWH eZ6rtQn%3mAVVVVOK=ЫO '}I"ܷ;S-0$rL;ep>$,M3t@5e"@F`, |ئ7_+gBm5OdتU;$3?? o{ofL9O#Dfs2 b I犯Y'ؓNHlސL'O}h^LFĂ O=C]a^{=uׇg][$ w X*\#(`lobh|HPx z}t]<)뮻KAWjEcrr2G^*~,洳#?]Tuyrrp8YT*)08ۢ\upg5vvvr0jdVC9h!QѵȟqD^"Gyٳg_755uVTU uLSnoh~j3 .ڹ4~ m&1%ݰ9.3q&0K a #g4 b۶P(p$^g>s7cd?Y|7",1q:q čAІFe#3=FRNvUJZNd؅b,#`CXB-od8/!a@=p2D ī]ʙwVgka8< 4 Bd!4brٛa.d򝜖(mmYAHӤC(H qy@ DuWKc(s%c;\ikyH%yU0 ~*"Iׂ@,SQ)Pd8y5iS9 麛!r D:6J{ KT!(U2Ua0L9p*ْf4*2'͞Tr3_&~$@[Ik=02 ($Rn" vx@l#Gl6`pqRڕ˸tz^jئ:ьƕG}wyrvvZmT*E:4M\~kkkxGqmٳЇ>gy׮]c=~VDTXVSG":m!?q01Qt}̤Փ<ɻ)\"R*n[e' ۶ zfڵkH3Fq/ jX UG0 QVn~G]._vQ~9xqUG|T*z뭯j2E mt:;{]oMm2mwlF:2dd⏡lzPm}DBbBVzբg}/b$W`^}'{NXC S8T|O谗Ph?M(v$SeSc8xAŠ{ 8LoV˟˰˷@[u$p4p''2_~ٻ@7d9p+ lS̔ M q?C0p  ծ\]oFv,b*g@X6ô]pAV1,9.(Y9r]d?3$c@vnvߦƘ1 X9 `ܷw8 &8e䥀-e-GL92Si,,+055Id`"]%Ω~ `HPܓG*n F{|ӛ-CoÄ?1 VL؈EɹQrblGQYWR'ZRVJ5ioA/~WX)X:>6&&&2KKKh4X]]M=t^-3n~xΝYT* <(@!y\pZ wun}ݩV^,3U|cx&ƚ,zAp8O<ӧOcyy@fN4`I{@r =J6E42 ἷ,--^7`fJPx̶m\ P& c ?~:jUp灑)X[[ٳgSA>5(5Na#!s!G*[(SNU/ٵZ-Rj,,,GI8@;N(@wj{Ɨ= p"B8jq]nG$cJm @Z^/C[xNF"S0XKk+Nmd% i%M!=2Tr̐[KаBf_a80m]e`J 20]a2`DS_ v=Wp];^_fC. !!ejm Y9n ~a+>пpoLT+8 _d›QxPsCLwq7${9AR R|D[8+'Zp3zBƉ$TSUR4]/dTR0M(jA1 yd| =e@\;!#`U9Ӯ{$  ?iYn'#>j tZ9Ry}I%~8]JG=8Iz"#ȔTeI z6t077"˗qq4T}n^(1R,//G˿_\_911Q,Rª*0>oO+_J,.._*8NZt*XEN u*Txꩧpҥ4;3T*Mozq  L R0255vej5;v }{z:.'Uߓ[[[o,6>߸qW~ Ro5J^8YP0=c0(JBEoxzJJ)ʛoGgff^===V*xe_w܁~xs UͅVOz@zmmEfOSD,0l(n;p_vrOUq'xa8̏ *@@,.8 ,ɳ%cB{=Y@݀٘KGA\mmJRE~׿toQ|kן_=aC `" `$?t~Xv?45dƏPrdO灣!dș^4éŇ XtkB2ipG#[Ҳ@lM@#\ȭ6^}$}?7WD4 FC$XBcJ317lg/t* i== `3(>z@Me\b/J&_GYtjpاNT(,G e"WJ>;)9=_EJf4qM'< Z) Wu:NEבUՉ0 Qm듾ﻺj~衇|r{py|3GPRJGRn|_իWi`O4z=<#q5ϣu]!j!*qmPArAȑ#ٹuccS7TqZ뾳^Rnj) jez 7nȀp= `t#l^7NG@[njsǎZGj3ut]'8Л>7WGh@Ϳi^%Ծ'ڋG8}*XS $Ryk fx_W?qw9AHz3l9ߝFz k#D7kl"EXzh\E )ۻP-E)'CV/ nǀ <`XegS?Аdl:""D τdiͧo_-i~͛kkQ{4Klz(!h0'{f4q*>/CtWf2 ۾- I7.# *&9s ! :R4 07~}/J% AH{ob} L*-t+0We @e w ۈ:ۈ.F%R>i>״νo!O\`~!Ë{?}hU`[̍T&B{NX$~T@sd͗Q&310vQө\c7Tm+Gl$e ɪLȐ$I:[_U5T[+`_;0Q #ȩ~iS`H?Hb9N xi_Vرc1{wFnKKK?ӬE`|'O6#G^=#=PTU~X]]MG]J mݟ!/UɊ~60*%}ĉx[ނV~|3N+#zj~VF(BNi]z=.+\VE^{Z]~r\/y\( D먮˲,?z+VVV^5 Z a@vffnN;;;hZۃyw/CU>Ę ucǎSNJSѣGA n^'qTԔYThY4 h6]ݢl~?Ea fuv^^csqyg0 @P7J+ҕ0H0tMx*v6 R0BtVїɆUzDШ)!coIj2g!N( vOUcRwFn\Fu5Ya:4n{`0caÛ8ALB1jf~sW#fnʝsS@؍.2p] 6.b*THSoe=NYՊp,a>G_&Q 2(FAH "R%" (i`  &,IMA֎ߺUH9T70cſҢH{ -~MM{RR@zz(_lFgy?d`=Dh xgg0l?TpF \cZF~5O> Ψ[yȨG;D f ̴ZCBwVAOfHbeX*"ٲ2^BT2<9xø[>2?g" fwvv(Dc QmJ'||8AJ) :ͩl"NT^Q!vvvt%+󰳳qƾ_v5屡*.A`{{W\c=<zիp-\.T5i\5{+3bJj`zjRRT@Tt8'O*uRT*X,T**\;v zzj ~/eafff5xuLOO}jv:NZF4_ЩTuͦ`~-gΜ92==-jʇ1T}LJURxV5)v3P/O+sOXƩJֳEEx3Cn&;6_*uma]Bo pgړ&j!ks)J$~<9J1$NrFa/իAn iZ*r4 ضyzYtp!amm fJEIhT*^"P2 t: `]Jo:r#&2qdR= *Wqr0}Ӄ -jvK7 <Þ;]{`I@DHT"-)vY%ʼn]Dme'.+dKA;0l=={ݗ}o~s"#cNUOrﳴVP;JIWS'PNGobʟ! CNS$ L ~:'ҧ=]K:r"P]xA @qg~҆j1s! Ź(!Fo2fMQa-h\b n E)0b{lXxt*Ft1餉rApjVE`T`,HF!a8D7$& Vuc ]YUݷntjˏy9&H@tش-J^vGJVG 06 I0"DAHET?>u'?Һ+QC@׻jTȆ1BSzXy,z)waqKs|"dǴl3FVdko@3ͯ:}R40ڗ"yph l(y\tǩf0eAXaj F)L8BGM>QXߖA|<U^"s>F.[iXi$1=$|#ʜw0P+ρ`x,<VWsG6gTt2fi{c"ݾG&`JKYV>ƕo@F~Ԍ_.xk[!?@̏ө0 )'Ǟ'oeAU sx?zb?{׼Ggj$lm`hO--6/ٌvEa?AԊ)MlX y B{yL-dcN B[x"!W9D~ XA.d w_Q.8[Dj5D xzk@a838d)ox?V#F1!&k6.w7 PQ ?JEzp}hC=.fZip @&y8`NnrE4MۻIu3TvaY".X71==zJVt=\l6 .|}eee?'۷TTRT)]R~//<<6VWWDŴq'Б`>}/_FR{#y'?Oc߾}xކ'xٳh4}6h߾}߹F㻻Z*kcmWr9y;Ir5a~O} f9`6*Jf4"%]=>dVaHq.sːe֩w004]͢$GQw (a"$\2*CCI)E$s""F5fVgڵOTQD+[sWRQOf.eΰ9qxk]M=bz FC a I&6N " ]8R\{FD#h߄p܊]J+\}XxH(c0'QH=RE=Ӕ=#2) TO|Y3[Fu8 )X#=ʱid=0Q{D2Yž[/Y,M0 (m28}(3le=)Q.T۸pЊOM)='0AG,C|/Jz`,ogF h~Qk- [03{F+W[+O0HX٩q0KD~{7@ıRF;2h_D DQ!e_ۙI^x @3 7Rp Dȇoæ+0Yx SG.!-p͗E9{g &F]z.|D TRiXTΰ.'x??7oӟt-D:$'%a}o xtJz!")Lz1;k+vOACA@.|Ǒ#Gpض fN>EQAbcc0s޷@V#"ta5y'a6RJt]|sùs2u {m.1 $Տ ZAFõkx1 >{9loo'F|"Z ϡ^T*e>7vp;~j5soN Cؘޏ.IT#1`3`AAЇig[0"a ]'%,jlDaW"hMN+X²K|+kgv8f8o`dc5!7A_eBs *sFOAk] `2_Q!=u7ܩx~kc?ˬS [ebؿK@\IiD$#2{ymƀHBJ?9ӍHp3@+ػ:`m vWF&"}~ubĻ@{UV w;CFg}905Ø2輆y G@$Ŵ%\JKKK`flmmhL #"evuaIQx},// ?ttv(zvmmB;u0 3*Huʕ)MUTR=&ߟ,EϺqvww133-E"k!sxÇVBX6\~=99t?:RNf\t\^|>,6+uڙ^/ee]\v /p)<ØױWnOLW`qt]+'$*WB-k7T@\A&a2G 4 E;^(L4Y/IM>ZW;$ٚ-*|~O['FQ7xJhx [GaMiuLTNzz1 "D{] :YApiD ^&$ f)):gGͫKM=dwr8 X#EsdmÙ :_ [4(d(hkoaнg@БDg9J&nȨ@opgA.0Co-^875`-?.V_#,V`aI$!2;v6л;~Jp$8#< L.|OZgTƵwb 2oƧ>)&v?>O]zWjAr56'$I #>y"+F>5*sCu;N/Eg=Jjt~=t{@GF@W={ٳg-,,|\.'N9;=|2.]ׯ멧[+^wG]u`V.SzXN{b\Ma֭[X__O)Lsssx;ށa_N#zKX[[L?&M5tjRy07I:}YLMMazzz S+^id! SK%|g`ZrF9l\Cc"(8 @Lo"Xǁo`b޺C+'n{$%w1 #ҹ*ݡeF2~ tҙK#- ־;opCV pb` @9b@*Ӏ3ʓC8Jʚ;W&Qmx01dR t౗|$! 7d"q ih:"mXɠ t iNR݅#R4+ױs]e UQFي?52G&G8񄵫pKim堺-h\8ôa~BX/`;@~]z/ȀQ,CfU<ƙ h&z'5@(n$rӻ 9Ꟑn#qx`y+av/r:i8U鵟aFr=)`*ٕOBhlmaqj98!K ٹ'4F   a~ *L6,CH>a/n6b^:M䣭G{^].iLgtwwb' J^| -n}/~:~9rz׻PT`'|[[[i -Z4OU41:FuʶmLOO#XBll[Z5}ƍ6 }\'&]`lnnիW{VYsssV*wbz׻P.o}+" ^<{|c=z=+M' Ͱ~d 0wRSx۷oZSÇV *42+lai:7kn''s. =WMk!NȆU ;p43Y P. Sp ux©-GB@$T#i;qNtwi"F~:8ѩ×mU9kwf&.{uB,, bŨ*Q@93`诙$2g/#gl35p%kn8$Z7)62\ IdhwHE{tWg&8,eeTPD?"ko"c zL 5aN:iN|6͍Fq"iJ6gFIV ,u)dSQV|cN`fDi0*=Ř(̟sogۃNg}fmfVCm&mw8l m$ׂv^hpS;U/?=߼Y94q,04 ,JpxIzaC. cn8"Q 6.v0IcrULنއ1 2O:`e`9j*@Upp* 2JHqqɳE{\Aj4ڹIwZ]g weeeСCC㰢.ׁ1&yo~D4a6wR /~WF(WqPl6jVvS}3333R mJW"{j6˗/^p"&"i+'NxѣGOj1 ;Q À8C==pϟ˗өJ>D*ԉmC]檸z>nwYYOzl A QߏP6sHC"^FkJ"(o"0" â~0BGr3"S4mkm]$a@;HM'L*LZɤ'%%5vcQ;E9N+$`c9Ӹ%FS1 o]$,@  YJ' "od? #C^)hP! ⠧&Ud`iChVЏo&QkNTN(0)xX2d`%`,膉#p0 Ȁ{ZT`)D$N2g.E]KɆY:U, +X$UTS|hI52Rb8wzπa@d9y?N T7[O~t L .# !Umxʇg3cYsX/ѯAG2e~2&U sS7;U%aE`"K2 yqeQعvo,  gXT8-9I2m^ IDATp2dI|} v[oO>%4h\. " kwHB qtiHyM zaoj4lMyܰ4M,b]< eؔ~b䷮MF~:aq]dex~T*=lY;Γr"w80 t]\~i^cT*xߟReo|V+!wJ(ovBjԶI/X\\L>Y[[[3' 8y<0T)"K2^/>|xRt:i3:Զz= ( 3c~~[[[ 灙U=W*=O:5SVv]W !Rwy{{כ^S+˲jKKK}6ommX,²,bjj*#B}Gí[.=f'F?\$H07JY9~e,?i*JJ_\Nu baX1$D%1 }Wl ! "4M_HA pZI(&.\ =D녞k8ւ.RL8)(5G)Z` |G Z!S&ǃs3ɄH-SԲs$)Gq-eQ ,13-إ{GH omێ;b͌QG*U~ )"j`e$ 2RZ0 K;ƜI1)(0k2b6ȃ'%.at.* 0j`Ή)8X_9 ~J#*uTDv0͚!$a†={eH aW3~}y"yv#H 15`0S͙6{Fs[w=UJ ?"4NL;*0ߥg[?t9nOsWYti#5.~kE4ge@G,eBJ`2v{" &qNy0Uٰr}kDͬ ҂QTP; 1PUdоFx,o\"Ean`YG.tXF8,# :7r6ow].o@H[[[aY/ +U(_^phwwmeYx ) ᩧ88x {1|CpU4 \x1 Sq S*^A}eض6N~U!rSŢ(AM{s> [R*5qZ4*y^{Ln&籶:y) qL۶*,CVjx{{FE;z:N:YfZBy7mlllX,Ӛ;Y*#yP/R h6NC'qTC.vwwaYV_fc@kkW7go֛rn& L,%—CUuJ!ھo^UF4P합0lMGmL!1` !&첰+pwU)_#b4<ʕi=5JVSzXԬ@ǻX;g2 kW ~c |o8CcDU ؊} ;cT0&'8afqQ."Á`F<2& 3Nҿ {{kUA4XDmaVL>X mhBԄ`0|T* y̢Q9a \9'8(gAg2K?o4tUR]jr:QM 1e涳MZtݖ[N]_O?t >*$֩.v^di˦iɓKI;(pe\za4}ȑ#xQi8tj^^@)U*QUƣ((&6z!R&dfpLK Xzp]7EQP(<]RXK}LOOc8ª؀z=̬lhÇSEѡ0 iT[qt:W?Pס]۷o#"߿Z--u~R)ꥀ2}Qt]yJSn7ICQ *L.]YSWO"&bBH‚;H@ áׄԪcmwwpƷRkU4B5izJfwD&y Ok R4r U}7"oo'ΓD?hGp eZp c-,Lц",h21Bcgҩz:w v/hDd}x%>NL7aqlpdFw^p w!> <Oji>& B|>C6,,PJa: $]ww]ƥ1Q%j"9DkQ!β#~7wK@,"_ f%Jd \̌6E~dA2"f5') NLT:M2g.( MS"`6`ֳ0|qc|EJ AӍإZ|ل ~?D⿱ ?aoų,{i^uO4ijDb:i ;}yi%") ޭk`:揽l 1swh1s`eӚ1ܹR@Z># BQ@#&5w.ߓ@K/]R+9#SiáH8_~F_qӧOuqjzzz.)Z ^ !yX]]j&ibffy{pYe]"ض4e\}򡃐#G EZJ#8Rn:m)رcX׬Q: P+W !ߏD1& 7 cZ']assavʊ^5 pMT*8p "kɉ?y,)8n?|Y,1;;jB~STJ9aMǾ\.Yg}a$/>g#K 7^Nu#wHDʚr'9wU5e}Dw*%Q)~4o$UF4F@,˵˄LI"Bf#5Ogz ==FޞӦdXNz"Ƈ!'~O$,aS 6-H! KѪԧQ  80$, 2]nS~[0 X,xX!M/C>?6BԱi>AT4.Ѹj.H#af.LN20- {PV&d2]1*@Mf:9M 9@\z(>.wE ~gΜ(X< eQ_v3=> b!ӧO_XX8ŤU4)177Bg3k~1 N'!:]Hun:trNzƜT1R.]Ju=l˗1 $5? C󼴘ÇQ(2ӂrv3gGI%h&Wr^y036"n߾k׮@¶m<L[n _B :U-|Mבh4˿܄xgw[m>?(j(gQLCNZ IM, `oDA\TpeEmD°dŰQ}<.VȈÙ=<#a8epoRtx DzIo\+*[tmNy2kwIw!4{I0]Byn^ E{Ȯ,\•o> (:?8>l,_Gڇ5;m$]rwEۍR0[ F!o\GHL[ fA^z%NW(DZ=655u:.SCX8X[[?yd<#͡P(`ss3 9o&g>ש@sssT*$|@"z>SZ?^V+딦I | ilB|0ѧ/2˖v&heY8p@ dUW 7~yii /}Kvv8u,d9jba02 BeRȱhh[{+O2 3M#m;r'r'm;m۟F.vK9Zgy94;>`6^M-&f8Y>>[agEj W k<˕,׌g,I]fQA@f<61ΜGE$CPI&@a:r)r@3TԍZ NDu9mˠ{1Mˬa&8wpVG:q8((u&dy ϥs8vsԜ|P[`h'?C o_Ci(0r3V:U2"{=I&>rZ7`}@ , ۰˥4&:q$OaJ|rb:J/qQnʦ'sֆWZK-jN  Ā 1D |X^‚=!p$cM 61-TO_ D}ߌw' =-6JSB *`[Ѹ3ŶNqp ZSR;dH-\yRI>[%-JM2Z΀>zvvv033۶S-n8|pN @ĝ@?8<σ뺨T*hZy&vvvvyD')5i6xW1;;Z{~h8ڵk0M3uBw4P۔ϟ:>rQaqqqLpQ.]VP_8 -'ƓDY~W? M4ȶquq4ͰVn셳B(\şI%XG)4o>N{=@kʿA36L( @|ho\@CiY~>tQCWo~ ^[z}!/%;NZ(`=]B Uj3g̨T*V>I3ynF?z(BoNP{}N$Tp*fopA&"Xҟ2RW0ސJ>{ԶZ N>V 58}:~k݊' ˘j5HYY}(g a:ΒMhS7Dg2+ !P?n?p3z|1[Au1 mgEU.!d?{n&,f/{+prO4J +lkV׼ P焹I]ֳ<f]x IDAT4训 :r -0Я=h[8Uf o~ D/;z+HKN*@BĚ 4V_Bw)0) a@2\H34}?{$ aX)shH\5t^GW@d O Fi de|0o3 2`X[g)uTd:I.9RP80'/'Jfqv{RׄƧj^OE_Ȟ~4Fu k:Bto>]9Z}_/T5M6*KGAQ"x:䦒ٜ5@[3c9ĎǣHBUF&~V"P p`p2HH?Lۻx M&|ѣ |mGa{7Is`+ fNeYxUAkS@/&AVlmWJBnt9!& ㍽}u@hY_V۶N;n.-0nܸߺu뛇~^Jyݿ GZX:r{{R7o`doo;;;n͑n-D CSNvJ%e Ӥ(8* R0 SqtvQVQya!D3:+"41{]x0`60lsӁ1j3b}Ə̣VƜJ@ErI/b{v5-!D>0νa +Y# e"HCԞ 1{ svw9ǂůjۺШ,g@0>ȇ5wd;iBw531{ܾ+D"ri ^jKG~os4arḰ%za:G7gpa,+ݗ^]lMмhmy2l`5g k2-Hzu^&F^ :rSv@&wr!a$XSQJzH)X^&j& a UP)R~eñdP76upc[^ 4j9>4)kghLTR2w{kD,L=!2hϯO~Ifz7AkmPRZxF?9OQʽ# u7vV@ 0qS?k0H,4 +Q 92 eRܦ<ش!'AlX/&[1\$hHUA(ME(v)[i&E:(OX̀~ fiھU= G%͚dVQY:g 80wso+_5DlW@& Ъ cBG'WhE؃ zXU5 е[y9sǏjU ׭xwޓ-fJ]___O? 0P,bz333xWKwEE""8p C Wtr'=$0kQ I)Z,lq ":CM>Ժ3iu%x[F.W$@ྉHJ,Q%/ixv{,{F݋n5mY"%S$H) ؁Bk}o~Ē_DF@9y*Q̌wﻗeYlKY!P,DX+Du?t0e"n`¦PslB;ϢIп/ xf9LrӨ6q3̀=qρ B^3f6_䦦4~ 0H\}V2&o c$'0X8+]fTFn( q{̈́%U2kG_ ;R  [+l m X>CQZelq0`,]ZhQDKs\ Hv%~a=Dg`h^<<,qh\B+,ނt['XK W[+( 3o :&"6w! ;5{ݞĈs^K?]m*wu\l3[7Ah(,3ST zLH3c| >5o@W]]ya= &:E;+$(\L2"Q:/,fe2\"YYz9^Mz?pѠO  XB*(| #CPHl*L*Ro]TNiKjV 0tp r@%#Any^<{ kB0~`¼SQ;ƥc"ЭѬɧgEskkh$/2@$!@Ltt]=x/jm2.FUyNPDxTۗs{$D/o)*f @ tssB7o %:947OTA< a HAv[p\}2pABD2^YOd;a w ].4n={5^lU`wwt"ksQ[Iug+$CU0~"2 Эr9|u:I Yz+6ԕ틷0 *ehѵ´Q =Jb+/8gT&o@k+ad kwN/eU$aa6 rIrl-2Ѿ UVua~hӆ^I|+NDu(8F%=T9 =o"㒺mpZ2q4@baA#"\xikYm=5aV%8+ _tw.e5I&>zA/As_K$=fm;KDhTuzB#dSk)\Ma;0(l ҆y3;;{`bb=bu݈AqhsssϜ;w~yGx6*EhϜ9w'N, iZ0;;ZK0 +ȺBů[v]lllCلm)60 ƞ={/ǎpo]ױk.?>T1p=?VVVpexbHԬA=4;F ۫21$"*6778u]4MTUJUzU]122)%V77ͮ_òL*l@dk+C( H$bJҔDL%\$Mq(^Gkzm q<Ҙg-(v?OH!0JhPɰ3-D^,ȠJLiR%5}`W1j5#5y HwVn~( GI@@gu,%0w@lf V3lC]'Z뿒0݇tza D1ǐN=ѝh=~ ,q2 ]nSu.3p| ݄fai e=pansgMM$,׉ v'C7Kƽ >wSG I 0k'B ntXښ0x'9h$tk7 Ps[&t~CUR"*z؞vPr\fI*Qyp }FU&uM .½@PgBɕT!%@:Q|ej4 ޸`NlRF KwԨ @:KYsA څ0yh$SC.ci~ŧu`A3?+Ko3/H|vN Hr q1/ٳgn]5)p]6._xчKAX6nӧO_\XXS.ܹsE){@4 b#TU*Skְw^xח|,l:t(IZ9,--@\. `jhZvp]7Đ zw=ogϞE\N,CBDI2 [m;sa|Ͷ_?Pi%zL{dU),T]"CLjʔOS(_)Aqidk fu+' ';y9> czʻ<*ćI3wfH \^',"-0K$f݂UJ]`tk*Ӛ'] E)rgڋG~ϬQ} M 4Hҏ~40Y:,U6_~k-yTa֜_" *aARXew(tHHH4}׸'ya11!ԻM:UuIpr34~OcU~+P֯ i{$AwNXY/A'4@zV$j#-3Lŕ+c]{nˮy[_"q Y~Rd1B<=xOC=q[O**#|@k`+ Wrm羠bה/?~Ѱz9yBAj>DƟm{ҶmC s[cǾD)>ӅOCqLI)~0ٶ MmQngx =z43nr9%uZXX& y@!8uT2b6*n qxDMϲ'5!J!r>Ca'(`Kθ}lqBYQ{=AG52hPr~3>̡DVe0㑞P1Ʈ+ 4/=hM5Pck Pzخ0<ŠlݰRSO`xgǝUǮQ0O3ű)QȎ5)6eYFy/<:Dn }X/No/l!.sh< b ?r({ּl7|#s*Rөf"{2Boт ÃaA? .cc!% d;[XM,: iF=v@4/{[?aB]zuF?5@]_tv-;=Ǭ,&$"D/766įGRU lIxkkܳ>:4Q,m4dfݻ1??u--n\WbK[u6#;'=~0MBp]o=xo|Ri[Y@`6뮄Ξ=bc[.|奺ՐՎwKW:+^394 T牒{@1V@N=8&pPPRŸuCжȜPE6zF DJս`A)`Ezһ/Nc etj\$>GpT_M'֗m/DwCinkA~w;%Z90Q)})Xe-B2uOb蟆z(Ot)ka6Y< >F(k:8:IDI7ƮRUuyN#~|d9: t0sW96Mt/ƚnc"dBSGx|3(KO䃄~my IDAT鬞=xO8 ` 0H g(a໱_0FŪ1 V5A?'שe൶`T)7ܵ{NU}f2:F& h4-Yh.^r``j:f~.*ŢaRAtOò63 e3;y. ϝ W\oܱu?Gе"B3ahoblX=wu[a+ǾSȫ`BƎ^550A*Z61թEΉltT6eK /ʳr@?ywڶg]EH)1:: q`Y& 7$00pWS$??;&C=TರЗoQTh4pi4\w,%ٞT6z* }epIU|k{40󁋚yv7}9tD2 ~TzDWLtVD>߱E.>ܨoG࣐R+Tf _"pR4/]SoWyieDC llʮ녣0!]]{.Shc.kx7J-ԟggQLk,DE}8l Y ñmURKlHaxX_ $fy{g3Otf 8$ʡ z.aY} FkI+T/_)Q:uԈ4VmfYh#p+32XzCS#K rJ=5%Yz ~5r8k'+`[Clx,@P'0ؤ5s8oe oH&U{-p {\7d7^S|; H&sP*2m =P ,=!H xםR飺j:ʣbqurwR !077Vۗ:fAŋ!z6 3222WE+49<`qq`aa!ٶ,Կ3* VVVUv[+ǿKؒ@Fr;hêT P嬩}F*.Ia_W`p@O!w[6f'Qe"&0QQI2"\ߕ9vp =,1z%654bf@SmZʓ~&X֣1"qJz ,=4:x`tD4M0 dE/B-fy^{. 4KgD^01 \ / y2|2ұOc}0O ^pPA @B20f,֔sS1M yq8X}`>/aBҪTiu:ρ0Jw'܏Ġy| @D2rRd dAeSìJ^('K4=qUKI|l\z<|2pxqU.6X@TGԂm;(<F]g:qh뽻B"CЄ?Vnk` zvkbhoZdIe)TQBmF,|2du?Ri][t-0 e#\7dous:r^Wc``^w3VU)H61 Zud3,EQx- XFD`:un9)e!.U(DIŋ]__022}%&a`ǎxb*W0dEZXXXz'U bl n(x㍇FGG(6BӴh.Ռ)%Zrgy>,<4Z\M UnrrV+͆/Ʋ3Ebjvt ;R3-"'] (:.*HLsd_Yyjj$`lf]P"ދx5td %.nq v[Vۑe'eL* s]K5fΔa:F_@Y.^s `I2βyN7?Mkz]^渢 LB4AʈEe|Jfs_]? 3]PGR$oEy)8BW҇!kxv87a#>9~ DkE }EP^WmpoSeQgX;U>cyג>fP(Me5NUc D}(:4#l>Kn^D+8LD_C(T1F$kaQ T#`hh @ 4Ӏ&1v.YD# IW&S)̜ HQ` k. t•϶`/z^]Ǽɡ5.>銳bٙzW t:^z~u:VK-!ЫUA }73 yy$m yS*8"m+%xΝM]vRVm'`A ӧpª봴tA1%ajj Ν8Iq&z_z/K+Hϻ$uݔ婧z7uuMj:4MpT~8y$\Uc>JRb_\ږڛde lDIsM\{a$1%S0Q&ZN pжs;z$ ITQ5^tc'Ilj, /[$*sYyW9@D] Dɻ{x(M ܔ:Z+$tw­χ9Rd f wQ#ps" *Jr4ӄ'A, 78TS4z#ALA3||ƅQX݉~-1tVOXz`-iF{D]I[rX0wc$YtJ;q(iΩ'cmaV9 !6T_Hh܄t υ6 ){9筏'KK0}oV+ |~PGz+SzfT/|)؆,:(~ wBs*bLtrtJ+s^ m8ߩZ"(@ @4{c s09;ǹfx Mc aR0}T9*PLœÉLg<ܨMA?4jR%/r`vKj62VP^v&D^E7#p_'2u]RJ99 4 q11jG `ssvj۳D }CGy;w\.ۺh$RJw̒FxuuO<Ν;߿wR1,RCCCXXXH njH@ Sp=]; #R= Vҁcwɒ1 0Nm"s F$@t )bPX+5=bYRœ*.X=fcЌ0Qk-E,2 ^¼^P8*"TWE᜖ği#Zq!slf؏qy5 u#%0h;'܂7I&3 c &'ћ~$e -rD{OƑQzۥ7D~ {GI"I_1j>U33,hr-,rF 8U0ޜOY]8Hd phEu`T*h2V1屽h /l4Gy^΂;<} H_ġw}l3P=}峐CֽFuzguCKY?{? P`q>fו8%}KJeI3SJܸ'? &(D2l&0+$%,3 ] adYJ7,6^*w5`8gώϕIdJFȜuPtʠ=tKiVv|(3L9e}0z]QQt^A4]6N3lM$30M J(71 NDiuVZahP*&⨠M#5cmb`@o[Á,QA[~M|gofM$)[V¦nh4kqUW ~y9Ղ|߼ouR%~~^u2Q$o:tkPD$|F#8})I^v iYuɓO8pq;MӬj*PA }_?v۱\MJISݞ_Tdȸ%gU JYP H316nEv"3~"mK~'_3(;ӮASY}~4є"wgәԭٯ',M5;WWf, Fi\@4ZdIJהM^4'^yJ)dF6P# K#Ee9Ÿ)o)}6ҖzV:F^,i'^xԩz!ɼ#:d*!i H`÷n3XJCir~~Ri Nk VX%:QAY%кDﬠN 3:vB9i[0E"38 y" ݕSp+(TzÑ û_s@(g~o;ǝ'QuݮΆh@:NEvű}ЄJ,Nsճ(CvM6.DNͮt{IDX=w=$t !(?IB%4W_B7A8r3qC:/d{?4ZFV9 qESwL1@^x|YJ8$.?}80$ n-<4sQRrtȁ!|p !SHkAa]hp]kk2[bQlk*1P00=MTBƶCJ7?!0Lj:<=tʹ5Qek >l*!|C_IP~8< \bj[g>Z"(/GJHd XRQ̯qq=aTW+E$]NE g.LR2]QH  3趖6!pσe97|RA,#FC7(_bBʬA/yt;`Nj53Ǭ?H ss؍;җ`3, g2*ؒYꨀ dLB)z CVI/x[$p8)DOi<*H`lp|gO+|`YE3GBD.`P(BQσ!0sR4+9NۼZKC$LI慧0vBӭ@m=R'Q(Ӯ^腊"I|N2R0#Р$rqOAv&R}u( rͽzQGkn8_bOtԁq]?5n ՈěABF*֗$Qu# i;nw#hnLR-(`,sQsЈ; [fMBΡtRz Dat'U[_4F NZZu2C;Sߚd>־1&F5.x:? 4~+v v-^'3'eKN?;D1t/< #[j1R.VPq3 X< d!HNJ3|= s>W+@ pl,-a)ts X O"R#4!H{/m1> !aobÁp@S9 Z{Ε=8P}E}y,ISTg@H@ٔW r$RQn:e ٠F!ePƉ3HS]wHS#sY>Ϲٱcplp]VO>V30_o6 f ._6 [5 nYtkCU!j?8U/Ez4>sD03$HH0]8vY0t2ZXJ,=yc`^_+TS(cl&8s`Ww!M˶E{0n~\ 0ܽOEo_YvÀ r655"0^TIRpt*S!XDzN_o!m,A,Ay^﷗Vo 1zG>!zb8B~L Pwk5p!C u4Uq&cր ̀94 <)F 0dbeHff;L IDAT8%֟8Xz\3!4::Eg!u\Qd(c2fM ǣ=*2X룷 -d 1<{'DϹWW U,+7| ~s RxB췑fMh&7{psO?.bq<Ao` aAͳGҋf{du.đ^ae n.'s2" )ݍ{uG 8CJE.940X m "˜(IfoM?fcdmx־Li\L=<`|tOUeBʑ#Σ .ͬ8Z~o~vTM l+e^8DR5[WfOb)CG ^Lj{^frXuǏ]w4[,xqVsȑFiu02\,Swڣ:i]g B)X!hV 2*28S~R:e0HE:6"Ɂ>!iD ?R@BH3 c pp:.,& T'C)z'Ah>(kFeu;K}c7ح 0Xu+n#!JAJ8P DZ-6b:z0^2thXfiw! eBMNfx!o$a,̡D'4<0Jm, ~1>fPۍBm4,(c=Q*#qAS)q1aFКnABK;B@Bf V4'QS^1$$zI.`kD* Qqp>ۣ a0o|p6jN JO\;X$ڛpW0!p.IyR/͐0&h/走*#>;=) tûѿgȋ~ Dx3=?s9ݓˇ[ҎbGB{4}'`aAX-2):!,QTfXqdRB"4`3b 6k51h>kC߀B)Hי4H JWd  B3@ ,A)H3B3Z{o9['?Y9XLsSUalB":rOxȌ>M h;npen:{O˩C?];Y9#M B#Du<4"G% 0*uJ7'1<τ?g3 cU ZՕX /8SKd uBeeeF~W#UK7+ t-̛#eP 4`yY!! V7b^V O'4]t:ẳ)gJ/Y#k e<7.\<4M߮D -d4M:#9tҵٔ|L=c^$[Y@3J 2*ozԤM{NdPPr¾ۄ3 VBz.$8/JgE{@fzPP,^S$S c{9y}stZ Ebfȅ{;':H BټHu?~i?VW19j_=HՍ9..?8 #pg) 2qcFo["Ikyr%piN枴N}B}aB3ln{B/Q`h$t!F(bń^@iص(ӰIT!6KV.c߁0n .ړe~P aU`Ber/0z=,~g qQ {gcV,XbO۪ܲ.@e6]w f!׌.qE1a: >$ӠЕ`CF-kd AZa7~q 2++] 68 B ;ܤ39U; qFWuЫE23fwkV&+ }e@j_7~VMx.} x$p[D::uםػh6:TfK҄ D,:VhHB0! (%)h@>8h*ҞRMԨVLt Eh#Վa'=̀Q`hlj ]Y` A{ kuhep ;3``x|d>rHy5%3I_.~?G+Bľ A/v ޅ@@THwwl)A}l=ߖ .W m^e^dNu5 𓕲[H]W 2Wȋ{ BK`+w Ð1 9LK9H=TfjP8).- Vox%ij*3eF dS=n5~m^/H跆{MC85 %Ӓ!%oWR@6Z} 29 *6濉ez%X^nҭ f$5hߖ4p%ۅ=@]`x0 ̉^nFwl-5"*ĬUIh34s{Oy<:Ց[+5.j{XJ9Z[?˂W_ ay-A`wwT@{P54)z^vc$ tC {hB)\9sthAjtbdF~ۇx7FA{ &]gaq_=}Vz^ |};غ| ^ɐ pި94e>0<+go?*dA@\t Ll8[Q+0!؆aqaJ:3:O} r+e =7cm[tf#tO4,is%(lr3W幻] 1RX_'_}60 N Qm#I_ ^ĕ8A @{Ѐ|`4~;Io ]C4ס-0[zQ>ꗞ/DB@0!,,X1 sRot/'o~A LԛڜCX-?l9@ tYL#(_: I*;~u%-ކBx&GʨTgQ_ nkAІmtv^eWV7| t7îM(r8n20 fAB]ĦYFe0UpoKZIҸ< U!BBX(Vy$Wawh-h:7,}b̬̌T*Jh hbXdY`^{n۫=ed , Y4UI5*KY9w=gss{U%Y{o}Vs}%W&pWp'5oh.(5+DmI/ѵ4*Gkn#~c ү͗L-וj  vҧIq?־坯>=#%| =Y#xIX' @DpV4l7 _v;RHNS<ȓ ݡgv :5A+ IeTJ!=ޅG]0z:\{->9}6jW= qa!-HR"l'[|=5 r 5rLP|!]11Ch"ftbʢ䣫;A ##.QΐZ_GVn5j!c8D$i+KGf$($-V{r|Sp!,@J-hS|y1zcd'cokҼ+ hY Bs]_%9}K " Ez4t@Y}y#}esJ`/v1_5̪IaZٜxnn~~IILV*X  cPJ:'눠TSz| {[Ϥ1k mVE5{XGf 8`x ;nX$;@Egto3%.O/Y*dzksh:^LW;?(סU[@Dm`Oh*' U4m" N$^Ql y95R<'{@ߓe:ǻW5!$DE^XaM >5tS%(&!՚$,'SI6a T?Г-}:>>vr_8f$zbOTBovoS1s л"@H"$:Ì@?wĭD@2BԚvq6b1D F>A]lKRk5y%KntI.F83R#A{pɨŭWdWփ?%uҭu~O H츒,Q97hc<>yru??F=ZjQ5 c=j[c1«}/{!$" 5:~֑ cDpW֐ZwO0FAÓˣ Sh\R n$9ut?34`vP&V,%h-Hq E|M 뙷 [DCca55w=G}|.'ݞ<\|nFP>+3O3ڋ&ͯ [8mDU}',%AAR(a]N̈#>/Xy7I'1XgUcX@& !Cz-ta݄ʷH-p|qyy*Py6 cf ?q/qw1x/B b^UQlŽd}Z7݇بACz_[dRbWbIֹ9>h$#QkVQBg.Qe=y}q_FilK{\FlcVM:fאnϦwL|kSG}9@#?ե&+O  YA>QmNZ+PIF3%%A=$q.m'dU)qnx!oH󋇖n.a}G̑w}ߏҕ&VhքQҫB!rTtx}=: " @#$̷wYm]{逘섇|Ⰳ9ɍw BJp~d.*SkB|w6α@egq.6 J_Ÿ" h4ְY_͝`@fBۋP>Rpyx -Ljk},0ҟi/~"K'@t +PZfgAHB33Q߽a4z?*gd+p +5~ q[HTls\V[l!>{c CmsN|ds/-^{dwpXb'4p QG22*=$@)IagT ӑ[4G*h IDATBSdia$z[^9ُ2ԝ;h$ $]  ^B ܥ5wӫ!VlʲvkՋ C7pޘ.KK7A>X+k6åGSu@!¥<$7H'[1foc^}M22ntQ &9i 4܎A9s׽ƫɩ]==[nH!rP 흃pjh QkhwKA=ԋ #o@~5 mF\~oA+SϏ—% scP-;"XdKdV$pIګ%W&3LsZ`p % NrZ,sp6Mßgl"&(oOȩ9Cp<ʭ19DGc!-HԜ7fLAtJRZ*sJ F2 )]+]?^]yM'۹7~BB++h3 F !ĉD)x4|3V^3OWgoZ[vjx.5`CpS<%D1c0a ca0)|p-/^K@_[jg+ew'rkG?0'}SipJtMA3C3Ai?C)1;5gjy2oYzv'||K~_۪ \Jj]_u שT[j?ܑ5%uӂ9&4c=5\VB/D@_U:yDBB0 `:ky?:EGgS5;H8aMGA :v-ү](WϜ8N nk`s%,c8B{vg=l*kR>'ư0\gͼ8$ݳU?aw`~HwNLvr0Tķ55AsN !dp ZIӦpkG~OHm2kh<γ(Ui9j(:m'ݎcu5Y9mr:`yl}c&F \^b>IGZţdif+'):afd/Z 1ҵOr~E}>>}Ѭ! ښu E8EKNނ6b8Sj;Y"uO <qBzU ׫H> Vn iZE, ΄LCKM 'H!x&UwuN[{l] |~'U})nq-@?k4.]V6ҽXz,!Qk?}, [\x*5|\$N0Qe0׃븦`o d 2a Uī9{ҙPG^ENdYWzV$Fo"25vX)CBVb!hsSG],w$ yŒT/Ȋ=N ]ȑ/$*A\BP c!y@:%J%5Ȋ[㝭;$[}`# thV\ V-3$;A$ Qe#lCWNʳyN(Z {+*"k=$}o?d8hj_9O҅kp-j?!K,Kk*EzGdS>tbr2zWoLn0itrP 6o B5leg*!.݌/'Az i^;7Qz;]Q8BD ݚr [g'h`5u-tI,:Qhmq 6Z#/c`|#k#I(v6.D(6A9UzҊmVJ@;~AяE |ffl,s(%KSmz4ͳ`-Lu p_B^K^{H\kVnޑxfHF L Ԫ ZhKj7ɒNʑPiN b~eQ+ ~Ɠs4 QC)ƥ U ]'5?`.'HVo ݔǏV-9A˴3iSؑXyD1׈74ʌB\c86"Z(dJ1 ׶S(|"=[͉Î_Ţ#皂5όuHg#$C_O' " NGHmt wbgN*\Hժ !Gn0Zg>Fcz(:ZHYXgA h7ȍ_ְ+9ĭsv0vR4WKB^L3FA*گlHX'\&l3Ea@Mȏʀem5yGYao "{@euj 2<aJ漗dfA}-$Eђ:O}TXtCQxֆRk @׿=^νHU7hD AH]} Vc\ҿWMa0Q%StJmRT):fdΙgR 6kSM4dy/0,c!=cI$I0Tч:m8f!WZ9m&3aV;QlW/*V)/$cB8a (s&8a;0 vc#!]3B*\EVQ1]P,'\Kwx n+:8qswPQB6 &$8n=m$7eM8`eAŬ3:9_h)1iUΘc2,O0Y}LP8w'Lԡu6B0ԭ#XE^!Uw @-8C.:mFMRI"8 rUfCP1qĈb`3qq=pH;B(p‰5ОkI̯=꾪7Ğ$KڲVԬD'Hi@R Ҭ81OM@p$ %x.0'pӪhK }G>/Pῼas)Qw޶4/_ߪz&T;bހT{LGi`)eၤ;H  7^Ɂh%õ&IRړgUyɾ/JA)ybo-%<݊_쵑 bmez֡mʫM*قEV65od@:+M FeѾK-OXۡJi&1~?-} ƍ,2@KنU fΘ3k~+:WM? &ѽ%,{ @kUBU;gݧid j8XP&ܥ@OO7${!v, elU$ib8q^K[] :iPe:YhE2 BD&Bʪ"sdr10f_}8$)RgT6c"VQe% XI`Z;?9 V~3LIK3<& r8#d.RGjHlu 2OfMO1b-WY9VdF}Ւj>ɫA֯s͚GܻM? ġE9 /i׼1\žf]zkۆPU; ;|00# =? ͺ@%Q ;*m}4fQbھm+8yŅ RG芃@-p9N'筯-i/=91e6|ÑS{=}9 W70zs'58fs_?U_Oq\ [ Ph{@вV4" IXÏc |oag6v4H%jVښe/ܿͿ}x}[xlEdB<-?iUM)m|C&yK"P,,L uXځ0J S8VA̤kbIY~UdFKՌʞhwo{_^e4KP9 ^HdZW r$:;)e\^6U7l = (D3X`ڔ{^ 5a{dq]6m̭(ZJAތƮ 4ka 5b*jU]l;bq4雱Loh<T̽,,2zZ lP~NjR>sS93 fVSgyBvM4 tޏ'!Ieqzllu}2߰4{K"on Q.J@BZ5ѸiK^4'yaN 6~?ṋL^/±C=X*k5\+&T5j̙tvU?47Uȸo*t4㱪p|vCZ Fh@$$QZ\jDcs΃Idc.z.ʁiXYX[vnb,V]dq[uZ 7$CR1T^ℱ7Gj c8|# Hѷw,v7B ? 5ȧgQ[SGUe s:7ȍ׷Oy5@CF(tJ>XJDiuPQ7Yl% پ0 S*>qm tf he DZabF8hV*r,TjH)#eiJyH͗| •AֺUp<n(8!ǥe6E!!0Uj2|RRх2eҙB2PYO(%k DҼլ*,"{=EͫVpbf;e#M 75@'1$$ tq]^_D !D{@I&6CZT$b/[ח1d#Dgyfo g&j7SVͳ]0!\]%ͺft.œy+d\ࣘ!SC"msZ g/&XkA/V}0Xh€`sLL~z=W`g_GaqN`5c0JR|1 y ĵFF {_ab$86-hQ@iG.g*LJ.ZaaN NȬMCJ8}I=:I؀D8`ĸ%^ 8agxB4$ڛZuG L"N)>"$??,Q a@zHx~hz={@orvgK*B9P*¸Q#dA2|O `YB@~*dTӃ6<848P&zm&6-5LI,8TR(b|(mcQ6 fRgjϯ}YWuR|f  p࣐3"y&+EӤ*ĺ@$ TRxx_zXXKl*5ݬ ʘۯJ\5W 9K l<-jlogJ0|6hiX>hEٵ%2hL*H4g\6@M1S1\?M8¹'Rz?=.KZ'4k(WzKt.ZF3XVQ& eP^)RxodUR[gʈF4MiVPf&MC%txxiocтG-݈d`1:ƽ]`i^x jqKj^śJy~gO5{ԍPԡO:=0\gx %K톀xyߑE8/\DBuSSqML'&93"3q|.r&n03j43ꁀ `%l|"\ñ ]!Q:JU^\s 5yF|T1bPZӖ8'R?ϔK\kHƥuDq3$2;]7{8}69zyN[p7f N` =z?酟h7!) V ȍ׷Ӌg8ћ 1jysIRBmW_+Fk١9\|` e7;ߒkbj3s]Y dbqUne ,8F;жbqZ.ipAE?Zk w/ įTgfThk_p%x@@z TrK/ܨ,zq!8S|Ei5+SucF$ ID{5xor!1WQVqˮmI_Du7FYg&]p֋` {׀C2*\,3 IDATۑU*Y@ ͯBiP?ܭh'`AlZ/_l/yNĈz+Nq5Q8A"rQjJJL;brh6,MET*=K7" Z33Is:ۑ/80'{ n}pٕw@bv0޿˟Pq$ 9jt{.o:H8GE9p:]!%j4JJcf3B&F^}%\GGV"wNll(G,qlAF|-ګ2DhEtuL>!!L9f-tM˕P@Zy`8z KB(HIh]lkhD1?"81f} ٪p\/Ϊa+AT̑[g g <Vĉ. Qb)uGLUXhKZk 4C\HS>cN^}VWL%Ino> !7\3[鯥$BSPI!=C p}7 eb LJ8%vM%D!Z!E9TˏYd N3ZX 8@U, hn/Y.+IM6vo+zU2ޱTG"+twaUI_ZzӮbPo$]I 1$rһ) ^04]vùgtЈzFyvV@ ^yY޳I?Ŧv%m0~D\?6 Lq(f\LQj 40(b]C"%Fw;Иo 4k5%^4N nQĘ|4Z <ApMQA DS;Q3c S04QVy옃Ƕވ}47Ȩ|Eho #c6; s@ ^**Co֍֦m<1@-N7Sx} 7w/>(JQ j>LB ݫظԄjr%uAE6Kɶo~}2F n do|-}=U 4,IޢP["I&iy2?;+{< D]F|ψieQt)0mx.5Ԥ{de!Wdy!&L h`[ dlpK[Q7 4 " Bz(8 MuFW+ĝfi4ʩ>b+>EvPpi6̃lVC0.E0ϰN.𯐕6 yhlDXǕ 6b \" c ֳOSO1Nl@r%=7Za SSn\T%wI` I[t8ٛeQŻ֏{)17xT֓9^+p$sأO}p/FȽһZ=QPe;DZ#R`$d[\5N<{3*r|.tQDwjڑFR(YJ^)Q UH ;{O|yJ7%g+{A_Gd񞈊[쎔V׾hk4o8þRZ;RYz-x#iK4^;GH8]Cki*ޗ 2Wtyhģ]\9Arww]! |o2([Xod=mTYq-ӵ#V-8Ñw>EGqQ{x.됖l<1ʝɉb̵RTɀ5\و6iS&13$W"*c4ub/k k!4u}O)$ȴ:$aT\tL1W\H uԉ0aoTmv׷CMfqNfEWf%%p_-4Fژ\0הi4BQjz <|یU/9ڈ},h X!O)n`x}; k,WAHl\JO &=il_z$,|d/ol?FK I4Bs r iܠJB$k.:Y\{"uU<~JvtbĽ+^@o wmS"t翈ѵ'@Ҙ(V 7*{FoukR? B A#7~,g?Z%]*6A~h 7L?۾cR"En_v꠹@_~72M~` *INIЃa,$ڌl:ʞ`tವ\,O91b߅pMUY `zB/uZhI^ӖZ.=|e~m@#g lΞa};8J}b(!.Jc%2[{ J^)e*J'`sF]*ı&?ů";']HP (94㰣~4^'> G4ڥq x֏-.. 0z!\}ς߱Cඍ i_rg$G,l_y+9pc1'm쁯:Hg@*/D7AޒΈdY+@umy}='$3!I^ :'_ MClEFp{{xY5}2jnUjc 6yHTIٺV]>c fNy+(Tc\GۏKx?NB^*j!R!RpY?90 ,>-wq Hȴwu2شZLOz׶A?$֙Oc,3rXE<i5ޕ'ʌp<&Γ=[D?vYԏ܉IqJ"` l>FѻzLQVPxd&#'Q|dɫKGo6 ZIoCث!bJQRtc&]=kM  0cXHDsXɺft򽄥L/ÿCHr&*0^hKSrÔs!ÀT.޻Xa}u;ӧ{.=rIh-E-I(ɉ#H d+(b bDprA,D#˒X$EQȽ{ٝ}ܫ{NW.)qtOO9oU}UI![~v$| v{;CrW`doeR {`FgJ^a{DF$/SK8yr]*)|_`;@.ETkCT&C`P<;ػX܇H9Nϳ݀-ؗ+-WCލ_ԖkHycpj9 Me˭7fˎ*oMP _c8Xˁ _d;}Ib}S7ZqX[~:$\ k @J^$j p1;@ll_h vrMۈOhk@fAUu=a&>&;b߂ 2Bjvox㥴zHdauJiJ3J&q0na0``kP7ߟbuuK2*> -[@:DPiL NB`3ac?@L]:3q;ɿcn,ܶ!Rr[yc?O.jN/}! ܤFS BH.Î{ncπmZbf'KͽnN9q. .s"n0-][Y1HsC^RUhx0wwv *:0 3V&(]hYl8,$~r^ٵV}B%v)Nil8v$EjCRf+/aȯ T!pljU2aۢ dcc3uʌV5-5% Q@ρ$WM;6QU^U\MXI%&B(9Jm\ru#FPM*Q7d* !  Ffo TMgOD=@ƾ5p<>~mPMn^w(W皭ͫXB8e_Ю.3(  +B1kF}'˷,9^pDFJDވPě &ݞ^1QN=_g7L|z1$, D~8`|U&ûn"R|k[|;qsW!S"=a!;O5w"%RcI~V_ukvv)AR_}$v`oea<$k?($ IDATf;ϭ|-k:H\ c:A\sk=d;pQf~<"7@O77 L Ž̎LTO9ށر* ]6ҝN B'Gng:MtU8{K!D# }f sקI<-H:thra@։$"Wɭn:nTk߿/í5[sR0ί-A\c[s9!sSZzЫGAf1i%I"eH =<84bupi> a -(#ʬSQ & Ȇ!0kEs(qABs,CN-jUbO N3vCjBܨ)i[+b쇵ǂ- `87K WM`wpCY( ME!=ޫ,;y?;Fy"YvMg2-5.Ԣ7j ʇ=aQ(|[7voMO,3+=~98 8U : ǂ3cS磩wC-iWn0ӷ_ j qEVC{Tghv v R lp5C W agr}Hyǥ{`3n.v Տ%sg~ Ÿg .ؠ3;҂J+A=L=l~іo_mQ\VlG:NI5w?gawZ \6@kh,>՜C7@D:x,ۃ/c4=G.=fp6JY,UYo:OX]GAaOs ;S'iChjF"p.x{ _ mz{jG .[ʯwW4pѨyD?Oiq)InS_}8{eKl7s`_|mBd* YW6 4X)?]vX@iƊ?|, `SxҘȏ6Do5*l8:2I+Ĕ%0,.dYABii)jU[uXR#l$#GDhhIq"i\W9>7x\~@;|[r[6Բ'*ŌD|8[)?+1ʇ33+kw}P[#<Ѐ~ F W*+B>AX씼8B:0'Q(mQ.ҕ WD}5Eo(dkzw-!ê31!-R1:- rL:gsb4'ilYC%5IW xb'pTŎF]NWzC=" G{9EՓYj?F*/4`ҁz^Paa&߁G˕w{ 'XZWOccqYMlJ30XSN~& %܊Cm9Ύ5v[v}Ad5;I.l]XAYa>_@B'5jo*P5[f0a:rfqKlsyϴysa@:l䙰GQqi_L!S{H u;~]>֫)*ũIqJsOjpYj\hKlG[PE[f*3G1c]R/Wnc%ֈ yBd! aYm_ytģ["A&?>}t>哋XH" PzϜ{Jcyw̤mvXel'v'VZl†TuF!@e|eaNIB3.k{yBCݛk/\^ k,uʹ 6'5SPуVSZEjB4i6TVM%3vj"b IL* cG{ 7;'zCUU53edFjC51lZ8kepX($Ր8$0W"_J+&LK !IBMP*Uѓ0o yá)dkɅƊ8ܸka:~!,=>`P*o ҶO*V̾+5P"[k"rhexJ9( ,iZh\"911X.T^Q =IQxe)?Wa ZBW&#n1: i}G: \Fb`κV@-`g|̣w1}D> VRa`ѬyCa672LRh"#rIW{'G mM5hf t=݃pVSūȮ "}<UE*PB<=WABeUv Q`]fk @_" ;3@&&@ ~Ǣ߄? q6CQ1JoN&g㫜n l|o'5S1D ]6#tca}ax^qLxO of3 s?' QHT?4~9w5l7\ڻ!.dsC#R >Ng yO yqY lNMfb']?+AcǽCf´pN߃jBpz\]J-6mU"dnR3 ++]7#CV]ZU%`,@$DTR_/m7Ҭր ] JS!e!h"Q h0 d( @ñϝdRo`WFoVU4Vs*͠#lpۧ?`qQiHJDE=>Ҽs eue YY+n{IA甔]j*1q&z{]t# X n0^QJ+Ut(~G^* ^X0,v4P(4$VB&@i@Ak[WI60glϥ8qe29̥,s8 X~\=?0d.e]3X2 6neiv\UI)7VO]xQQ;b7 ۑ>/lR@ I¿bpu|~VPҽP4C$¾$QKt- JS0>&' M5.^\a-P 4y5߬ f|y07ntΣaEWϟ iG.ukna5Vp T9N$麠`$mhPE 8(CX1pd%ᅲzUw1>F7`&B!DTozujcmh렜f7KRܐ$&w|>me[ Nu"p\8"~(x$"kDqYDo츠?dmujMEtZkrILjrJL.qHlPXhk-B@i6<ۗ* EκE0Bz5jhApb ςP' -x;xB8o) ߵh6nܵx|SK:}s*C'BTkE_Ȭ'_Yvoj*1m:,vg4Ѩ0֬޶ñWN L1l(U|+Uj vyZĻ_m1WwNBq~aNC+C5CŏB1+UI\2),LvjFYKWX\iBZ>DtD@V"jЮjQŝp+NKxX"0I}SejK'( g[LU&]vlč3{P*^Ed< P;a@U' 7UKbp#2Sϔ߬nN_Ҋ'!6?T2gsb3<@޾TBa%;.v٪v);|@,Fu s]K`&)PwV%}]콣qL@}Z$,ҙjM}KKOC k/knR;>}|A?YIBܜHfEzʋ?d>DV^VM'I%&J12Z'׮T3RP빦*vY(ʃ<4\0\ӫ/5k qCF]I5 zyqdnO@@V7 B e(C JFJ;MKk*n*ÐX b x8>HŎB(Ni*m1m90V?m(cec!fsBXGcYS\!q .倛5ZU!D!m8QDhҶQ>Tͨ?b1u} 5*^%YSCiz# )JBhT}MgmAAA5 ]WǾUtbI*5*.olzo9\XP 8ikBqWlbzCxⴑK|ߖUcƝu'χ8s<@@9x(Xݴxpjh?h_qxґcn{dF¥ KzJBֶ IIniZv{ޜQU<(ZhJ,X5f]! {t+##£,!pڤ"# Y  a\V3"6#o ݢ/fWtf-qIm2*9̜Y9!G-d]׳n5Y=ΧTH@x5u;ZUZ!ծ>D:lb_)֊Ji$fzCM~cL|tK"qQ& ǥM|wy: G=Kn?%q]碏@w\;ܩ%͍ qFH, )~s#Li]'Io Lja8e @*1)fPT kJBDJy?;RR ZA p!Q$|!IWjjč^'W, 0<HκCv,B طpr $o~QURI$P"iFC+! 4M;ٙmCoThzsNS!5ߞ%H;{ ?[b :@+ߔ~x*XqȬ] Kƿ~3|Kuc }'BEn2Fc>un:3WL5HGШV|LIWaϋtZz*/`0ַkm9dz0=!CODx7[VӨWjE¸zSI! Kk+Dsd_7d}[h)d6rmJr͐2-6;( \}+&S)b_L6ٿς!-"oge6&WJq Rqlkr{+@۹744K8̱m R5% 暞&*Y\ZdP2H51{}陪MT7ovݖ*ewDDOYKPqDD)u%*BO~wKO!#nc FL"4Lv`5jB@*8"՘^UR?y>̈\c%5^97*.gʌe1VJ˹gy5(_e/Q dY#*R$ =jBҬ)iTw՗`XNSfYXD y"&1@Z'JUJ8f"}ey^c }O~,w6q&7N|%d»_{ե]ΞEąE{P%) ,4q\#_)zޖTcPZuΆBK<,d±ʮU e%Wf&Pz-Cyyyd~OyFJN::o]R8{&Bp`o|aGx7I \xr}_۞`<{1EG#Zڲ a[VBD9A~!*fb2#x劙7s W l)eCo.e3!/V>&K)S+3Z[jfi 3U0Q %`Ug{p V=(,}@L@Cf*/\Zc_| }RC>~>E:SrQ}.>Z}9n>X-|Kum8$ġVe"a 8P -TɕWS|L!^P8ҼFB>Yڹʭ9Z5G %dҮ+O`Z殃nߛم>qx<MKӲU*( VIHxu# 4$ sMX3!7ZɵᥫNڳCۅʥ4ȻD D5p2 ̾ݦQ#% +#-7pz4t.8NG佳`*O=]IY=5Kr'lD *y_H"B%V`8NϾ`|LxlvYr l8fV]S%q^pucUݞ +SR9郱@/j1ZTNPV!ݴ4w?RU$ -E_h6 oNj$c|շ[|ͽj˿xL0Ь)T IDAT?ޅLn5)\.{< y9e@%03ǽ-72L5ሀmIc* j8R0n!}; $V f yV6fg.gf9g2R 0 ࿠^|2Wn)&[Dn7#|3ɜĴL< kxv!ydC-YNE<>lgc`pvu5;^bG7$!. .Vr_䵋mF8κF=us1E*UBB(HZ(( rXYiiP>k ݴȌq"R]DhAţgC,vϠk f `m!✒ZE!( 5!jRpgʍ5 cDRȌ[MCA0R[XP2eq9>Ic@~Άr Yu5IF?R$ƈSBsSy\qQ3*FN%^0&84@Bl<_APutH-B^8`y^cUϋaHn#Tc/[xt~`dyfxfҴh#d( W+S|P[ VN8oEFkB%!\i<V  |RϨW aK77`#Aw<QS 8oʓgB tvkxt1J. ḰJ,9z]te CGGh#"`K`<$VT2 qVp@3d0~f#!E{ fw h~;aYvX g8C>Ϟo6;l+ >~<%9~g gV~G8ІUk_K޽_B;ȯV$)/Jwb aLtXΞ =ԎY`" 'FJ*@Tb@ pĹ[ _"]$8+ -77gxL@n*O F] .e86<8=/ hk%ٿR}cFυPtG* ˀ]O6zzsT=lo+yZE!" YGb0m*$dSx"f~>3> p,co٨)+2JcЩҨW} _uUhd(rB zRda3'(03BD (viF5Qh7t.MuSbz<ذX po2KP8oV)+!=/ܬ#rUEJq*U)~;K΃f[vl[MBfɜ.Uk :hZܿ]IS넙]ɇw O4Μ!$` rEҥ__REL@-)k# OP0>6g޶ I (%"[ iFSK&h5Bʻ,54Jҵ/>oOj O+a-T]f~xTF1,mTB5CB1*1acsrԋc`¬n>82}X&'GXYh5*I1+p_Y-a#[D%mzBZ?ȿ0Ε2#ޖEuxjȯ@2#Gw%ZB99bHYWkuo5KK,đ?Mx=C`~kk"lW>7Ҩz'h5;|̂pMx $P[%sEK);!/}C&AdCq!10CGp/iZUWnʋ/ Y(gNf$\ՕpV Q]%?(^X 1;t6|,~A {)(@Y%R_E# +Tl@7xֻaMhw!73XKh7΅86Ƅ@´L's_ė+ J 3<ae7dD|M;A &o)菼9\SA)B/q,sWl7<|?*\L\31AnyD@ fPvA߷xYp|3%|+I;d<%?q++vz^y|˿xسs0"h,K0+>^1Pa N. GޞӬ)45t&x 1RnYi>; \|#|S nxP񃯞t|5QH"LЬ6v6waڝuK_oz#͵KozpFu^ Us`;6@`<Y}e7Mcʷs'C4* KRUIoe_7+#x o;k_;=87@8ŪnQfMqIڶmEW`c#Ef+KַT*?oBm8`0,@kD!8T8Q45ZAwȸKZ?ͼq@6t-i '@w&Y0NwOWՁ?4đBꕥƩ:p$߮7-H"f,3agT>9f÷NqbQAx; W_:xRzfg@FyvvsETcG& Y|hZȬorф">Ʃ/h"| NX3%IH:AŹ\ӊ0&Zz ߂_ivmG{6L@?3Q2UxG7 -{OR!;wXW5N f?1ٽo84 +  ]oNIq^t4OzͷvieY|YYݥZRaF!0f`< 8`<3' &f!c5nuz׬ܗw=}ι7FTTeUVw97}Yp˃iuDia: 8>sh}?J'\T9R[!ϿR$:ѧa}G᫗µy cÕ;>Jg87$܁lnn#Z{ڦ'ƥ&Qhuv\ GG@Dc ,,mS1zHS, Y {|Ja)%eMJVw<~ x$OC$rߟQdpf5F{_k\׸5G?Gc8w9r:í[g>spxM=*B0lᇩ]2~{w:lc(*GR#wT]j+Z19-E }u!@+as>Q#:O\VGPjNGpRXY#GD7Q@,*Vqꈃ* G2;EuDzC|c~J@rX֮NG#xhifv%jcE9(˲)w?00sGS 4]J6.{IεA^BD4?wʼnyF%ru "Q8}n8l8ԚDadD ׈!ϐs9v:D\J!hV*D$ hɽdQ gRm 9홙y%+Bu%£-{ZqB Z"z] tt7 "*4f[{ڳBf{ݖfd\׸5w>i=wwO=$ݻoNw1Lu[?=} S fUVtN;5~k΍VCCbϮrC}΁ fϺ(zBW^ t{%W9,[ci=2{T:a52GQ9P×zşm v7ҺBPH^=$= 4 l0\ާHR# &D瘛X^Mpg%AR֥V) 2#32vWcцb鉴 ]1ƹM>lg#68Թzcc(RaVolZwM5Jy'u$P~_Co']eխ;6ۘw$qk\x1m>* 8{_\" ׁW^ ͽ{?4|ywO?67)E1O `bBݎZuM 1;q׺5@PDBB]1jNJ:=bƒz& }gePx w,~@!hOp0NL1'~Q14*CN#+ @Ǝ·|V4aBy({}` a H~z6rmqc)Lus%m?&{$XG 6T t{mdd-s'ʠ^[!W )d]Q*}\ f`a(S~ c>G2Yp٨ T*K1jmjL9U&J닔&fuCaҘ8wdMduI\Pxt{D{[T>>֤dЊKnb ~J\cG%eu FgY!nv9ݷ\\MpbA:l˄[)}s{9\O^cbV; dM<87qk\׸ oCp]v5\% |NeNu;U\ Rꯟ( A 37!J`vFz2݊09"KdݎSJc f&$Ej!JNGۧtp)hHdnUY} 1@ rZL nmW= ,=IM ȩc} 43:S^{'D YU)^x<cwtr<+ E(E mA ՒVgl[ k[ u4Ү%0z?1n9乲 IDATiΝ `Hj DwVb}E. e%ȏ6ʾG1jB5vWcmKй*EnלpnJgT!g8Ȑջ4DY&E:v_|hڑ?05qk\zFzjQpw̅ 7z {]><4;ZTߜ΂lhM׿ 5%q3si~G7P|̆Шek"6u=]Mn3 S%#йMnWcp,i[mUUZd 9fm7FYI1ϭ0v\ \MN@2]`DM֞3g=n&Y5M.i ; ִqINu5Hki"B}}1R$Op_VJ´< TKKQ[]mHڻJۀMHF:CaL@À# -GqGx#J6"(1(G4GZA{@Y~7۲3M)(g(rfȨI!ͤІ(GRɡX趉^:H(h+7XT!:[vv;?2-Vc3GNw%c}ypčϜuJ6LEt8'Z*Oܣ&H m(K"0ehBY+0#Nah8A/qk\׸.Pm©#H{e4]-tR:0Q5qk\zփ1c8N3 9r8֊ V2ߣQ,^\{(A?0Y^0ِY6om|81'ur҆\V mh8xwd=ϝR#-l.U r-1<;Јd @5qk\c1@<ϛpgpׯK+n=Rq|˷?.))sjT;=)p[JzKNYS;FUT( ~3</Οu;!\KqrChw|~xwA hr9_g%_ G2K`AZ 7HT'8{AJnlڠRtpz%[\H)1?/5n& ŨhZ&JfgO[άJ'e1uY:8'RBڜbsxFq <Ɋq In-e|A2\dxzDZK5P8,mv;͊@&p(C/0VL?&jgk+-M"ڤ3Ib/=v 7WyPBi TK"Q=5 @YSKJyFmH4+1H[3җ R0׸c~JfR ƱYc6fe+5t; ^dOߣ µET(2/R/7=[tdfTg2vw Ay3>Ԃ8 c2qk\Qwĉ";0}s7xaFV1^~0WƯIogaZԋ9 nR[hZ.P0N hAg!p)Fpیg-\ =*9"u!Ǫ]ra*evPG(9KhWR/8I"u 6;^^ˠ? '|B&?wJ?ݣ|sMM@(g]0 \2lo+|ź6%foP:kx0HQ6v4N sP.px= &5ŵ2C1'`ָ2S+kܸ#nED{VG0pRci#ytJi~Z O~$0X3޼om] Sʀ3rW &&}Zӄ>)?$՛k yW PX;i 9plS.%:Oj0 ŵ6j@ 8\`Di(Y]^OgΨfۻ ϶r9/+/ EzOsO˳" g1ʙ8wusv>E׸5k_wNO?R .m?2n1O3>%\aQx)C.76'תnAh̼ /tfhı &YR(8:4UfӸz'Ƒi9γg8 37I}"9C霋v%2aر9Z{ p|FK<#nbH(6nsj]pt~k)BTwpfD5HaD02f'jh!љ3YRz/spjen_csh]ad{ݗav6h:QR3=x.525k4 rٍ(iܿ5ͥWi>eV8 F# Lqlk_ۇ֨٦\NځQrpv)_NG0vN<ܮC9m٦”DKc7M69U!Jdj],-%Q tmru];:#qnV[ٍ AxШIAYZDFu7o.3凰:IXѵsU $_Lpg8:+Qucqk\cHܹz_dt)'f=޴ј}%uJmJN?|50|'6,Y0VV6*Vlian^eKik0J%|2QhV9&mj:7w`6) xR%NY{\ mHZmg.Y8N\간}52h0 1GfB0NT hT976)q۷q ٩*%4CcXH-4|-|!@OS'Ov70}Z@ѹ4f&*%zJ "cQ ;t]]aDFJNkC&pwnD g4 s<}1xGVȱRh8?UK6cy>XQ Ihc45fy8[K1~* 1׸5q}Q Ï^/ |/&yHh~9|sd IQsn{JrLavNcĕ~bd:t{[5z4 JP 96dͬ#=iNlP fWx;Xn\(xpf'< bn45E!d4\+$+^ N4cmK;8,}Zpv4Եǥz7r>B> &s՚1,H$124zrJdi*N({M1T p|^- 'Ɛ/`E02ڣ.%t{궲 a]H̰(1V0;NL)dMOA,61^&w5C"^ 0?)ů_wI4]sa6i~hPr><be DL4"޷Ivz21ݔhT1F F=4)|>`O q?  r! ? ,HI Ei==p? Kjgm.H.P>C4~ɕFwY1TЗ76)UާMȅsD 9w?quTI]I2qLc}meSa'ƺ Qz7"lKT:Td\׸uʺ6:{ νk!܊lr׶`\H@l*4o]ɺfQ)RPc]1^ Ѵ\&9(~)΀W/͋==urL<me#H-+vO#QDOpFf|G{ fLZMgih´aki?C)I i74-;plP+9m`>U*j%8n_VJp$试 HPdDZȈ}xDkBl_79Fay mXʙOˆy&JFk)jQB)-k4syCS0K:cfN?9#c2qk\:z4s؏ϠX" n[ҭGgr`ƑX9@3o}vr ?bļ,/N{( OyV_AkHAtDX0r\լ*tQLIZDwm`U٤0)/7x10g:@o`pg%Ȁplqb0Q(Hh:ćWdi'=yИe+!M.UaDuQlpn- j%+1!4vw77pWoy)ɽmT66gAk9aq$юP&X~/~ހ4mF6Fx_8h\JSӘҮKۄ~)lQ>%0'щHXFLi56}agWɻ2pg#^R sPȑsHϥ6)AqFd]=r'R3=AȰK /MYtJI];ڙ+ 0x!F&>+Q&Z'acbh P9(8m(Ɏ=ؠ!0xm3AI~.w)s4yEΕna)*LՉ:W׮cD mtΠtq01(+} UUx60 v:n *>e;͔9`m+o zy/?$%猋ze:qxe?\>q@1׸5qȀ2DOi DҒƥK0|xvmT_qdN9ib0O>o=ZE(66ZƤT ƣ'65 Sur@ to-^="] wGA.B JƉVU*p#+E/`aJO:QIEiG1OS9rZS-Tp+hE(u.ݍN݁AYU凝`sCp%hBH i |øƲ`H?$ NlilqΝp9=5. 1YnIk&jXg-; yJ=yt8NF6794p^tPV@pbN Z ;hP(cM(HI 70ءA<hD1p^ٴfoG13Or'FK~{#{&x78,~Ċ z}ݎF(N<;m`3)Jf 0( qBA>{E1sA1Ӕfv^W%vL֗<&YH0-W#eTDϬo.&pc2qk\KL1l vw"ir(Hmn輶 RLkLY (En>gZIr>Gİ| _A;A͔\[0YH~@5yMIAm9pNtB4l<6PB,0,1Ȍ@NqH8m]exM@gθ;wv`0H70(a)FKs2I`` B/Fج셽ؕdjU=n%P'!mK[K &'bQ\;瑈T(9r9=7Y8 ~C`v}OxDv:Q~56?M r^D,WZG'F8b%Ьl{ֲ6$ ,Hz*'d@;˱Cr:sk0ݐ(,C֞4a7b=bAVNHrb1P0WF&ByYe~7ƙcΟ[ UAy(y{ _u]oGJ-]td\׸hR>s`iIƍ70L3u L`LДWk`}ebLiK_g)B} 3iN„RBn$OB(8f'.Ͻ7Ǔ:%/mz+1`eKAuZmI#HļQVpV@~Egx\& p89fϺp+X1hJX" )Y@ZK,%(c̍Z3fMm!ks Ǿ/amu) dnňD6Ce-mn1.cm R~ 7u$Y֪ ĆnGڭ8,+Ġ' P?hiYkC  ) $4I9̣-c YS\8$3wiըrs#B W56JQXZOaguN CmkERf]3{SQl٢ Lhcs๧=\A0VmJ[}5n9ϑxgθڷ!i}a 6wWi+ 1=ya~Jf5ik{m+J"g$?Ea$)= gq c2qk\ >k=~G&pē(Z-7K7oz$cnX|&1 ޸'<pVOh6R ? 4 +.D.M=L}ُvah'`ӵ!~hR&InYͥ3C.%}~Ƈ^qjAQy#:=HN͑@gP̧eodyrAבa4mE/+0ZgۃsѸR<۲2%8+"䭨ހ1K֮β#H?0QXTWhV]} :ļ@)8,kw;)C#jr4kCg.4mfs.5ݾn[c1I `^g9@ϻ"* b.엉Ș}n 0hXv`y=ɂ/ݢtTGֻnHdoA4؄t(:oM#7XF*֞dM .bIbດ S.p%3NzI^}w})I#1ݔp䨃L8i+u(}u >QږBo)|lp^8!0Rt̳G],'j2BOtX }RC+b1%!(1|+KA6t| F)Z{ Ow,bڦOOHs6;oG3MKchc5m>;+68gY3]oH}?"o4+־קm,dS%2ۑ A`nf ݍAnvQ@)oG΀mZIc&4I+ K jeNAZ(}.H7u0)32H)?w}$w/' I׸5[ɟqT*9ަ4^x/1*>O %?ђDJCkWYHK*E-ϣyM+i=Y8ٟ-tN i3wV Lw`0䘨 (e{]y;06GΣ08)I 8(8ΞA ѻ;?{QkO#V^$M[ UD1Ouc02h4ˆ@ zeq1k]\rxMo`be͖BccN`M+cSEKiXL#66A :=6>(6Ge2q(6cل;N@$N%mk,̥jsBZ{=z] d 5):sAަ֮R@?+J#hQ KY6&H5p;k z|,=h_ 0Ӥ@#M /x6e=3ԏwcEH4m8Ęj t1[}cc0z s{ Wr1P0>}ɣM%je.['ij3Y%,7P9ιМa Az0$N[1Ā1n)H Y}?Nk4S-Vt٥С(xąkee t0;!qO54$cNWc6^v #js1C9ᘟ9*\RXZO`@aeh$je.:5%a}&pNz>\(iBOG7c^VP;?{9 ]r,Q h=Oa9VЕHlɁ늫Z]TGC`nTnq%>}΁\@1v*]fv_tgX^K:~5w_PsVġ%I|7 ըF5*|hm܄sVxgi7 ͇ox0r?NgdZ.fj'F9(,{gN|;1 WWXl.4tdvd5ϙAC1i ŃqfܡXД,ɬB>8p'8PBmtXY5t;k :};͚ע?Տwu*{YqQ($3dzSGx6S5(\67n t|51P*  HX~OĶi8l-C/\ISY.-+,0=YO<! {K~$et.L;L7ȂIkGlZS ťo<Xg舍ejL_yd0Ⱦ]84jl+rR*(Gq2rılٜO4«{#oA30zyf9>jTըo=|_.Kرj]I3x~\ap o;-G?eNhmJ=č9Yx"qbFQp&7#l c1m-Dj*E̬:kCiܴV x^^ؔKqHل3.vbuzkeg+X/d(*EF=!(:]K5& SX.'ɚC%|gM@!inJ/'ֶ V6p[#^nܒu͋:]DuO(:vZ~^3VV?'51/RmlE}PtżLmDUUK[)jFeߌ| 9Ms+)<%r)beMv1o'tB͋oNH}UwuN`Ghim\ c}'5 UTmhuEgpv!YgكKK5\Ml IDAT470^AB.dY ]7gΎÕ O9-c睡JUqk#TT|e|Oۍň'_ea9qp|ǹ+2b+u30(쟕im ZŚ1ԸwaE(鿾.:1헺6vGDzJr4)Pqk=angJffg:ڤY&9NC|fyVײ^om-O70;MvU=SϬ[=Wrz\2]KJ*z_Do]L,|z@ei5̦.$1<9>~o'fpaj{^(VP O_ wR5;Y@6V\\t'i4^(`s:X5nCU\E7m~nS m}G=Z˕=XlfN*nC%d5D&Ɯ4DVH@G/k߿1g@yB@ِX%h16%4;b4qJđ3U^Ggw(k4 fu)lM?Xoθ𥳐lBh?SyONJyL9+k y $~h _^cI?f .VԭZ|.oo;csKyxE6@:us*{?l]z7_K x~vW~_\o^jͲI$m~ʥVSE3Ch\u\Sk'ـB;;Biww&aᲂ3MȄv$@ ,)Y7F[+z=1MWzO[XoX^LcXZ2╷›\^hS)|n'e<fzM!'`yXOYYO͎l] R0uS 쎹ZqSר4yXErr{wssOi?y_0}q[݌iv,#ni5abLnL?9,ܷPIoe< ,d'.d- h8}1bn!- zb^sZYw3 YQ{N(NQpe%Qv¹+!Ij ;ge9tʚ.cReSdX87y IGF[$ b};7@3#wlyXm*se,F~h)QyW.?g);d%9qbYVt^۰Z+Zhv,'ll=08s`/~b@k5Rhx9ZYxҏK! }ڷ=qI`_^OAB3s8e?`=01?uE񃿃RvGBz89$2!& #2QjTg=N*GP W_|zi0YxUR^XH&IZ'U̸GH\2SQ}?sv&Q,F'~8NJ&&}@ qIav"BNFt,׎q!0hW:'ʂa::2쬏;,_' cm\ܖhBfC63En8 )i|&]%Y "ܘR!u -Te]aBHlH? R[NXHF[QyF=IϬGPbJ5+Y[ DkZŵwOPa 7 o]XHhoLWȕ*+XM=r'Fj5U ? ӸZ8v 뫉h!ҩV#!Ho8,0(ַqzK0ͮRHJf\ 9W(L`p/ t2jWd'^hqol%׸)#d w})G-͐ɶc\!r-nj;3餖b=QnASpm]roVZ|s{>!ϿE+:.gv/Fm3#2QjTz|09k.,/5\m[vzS(K@-֖Ûk.S.;6ǃ4jI3UөuL)UŦcOFLc9P_o{sW"zhAǝihiTIc3;yI"Zi\f'&Dz؃s6dzZ=4l+.xvד"Vh\żl`2Wvϰ0@Ǜ9f96ꆃs"$4ł$ESx(J[ [Ŗ}ve݅/id`Èڨ fP.rD_v,{\t*_18ࡵ\4˩su<h#a6sYOxi3GdTըFpFD37 Zeinbd ƾ~c߬˙ @oenʕn7`~2kSG0G6yҮIg tR{>S1ec[3ʆ-8:Z[YRٖ V0= hoᆰQOr̎wtG2L tՕ؈KOt}>so++i%GߓC;Hez~}7jj34[!}=Ǿ88|Z+}uGdTըF'ͯOp n7K_z!aƉDϿ1n³9~%k],\y% MLQb+:](MO=$qoŧjY}C V ~N3-VG:HPr S.JK}P/KCW2^‘}ɸ$m-?tzoM`{Iߺ}(L{0=)._M~MRLbTVZ;3S6GQdEx(.X+e8ӅjI3<:(/5Xn*16iKPJaJQp-枃ƍj;?4U>;Ig]<ۡRtʹ7z& -(03.rQ@2^$q*΂yMyAiF(rL/4#XC ,4[ o0Qu9㢵XmfP-'N:LYؔkfhtlY_7Ø0Rk8}>ʮBNsRĉݪ͆RAZ,h%vb1x)ʵ{yWOSqeqLI^k fB]jόC @t/HL5%/u#ҒDht*nMaPjV8m%9F6;VTwXߒG[?ƧjM~7~$$Q7\[?pa1Gm (-@ȨF5Qi)?(,aqK/[Ddv[a 7/UsWJ B:A(چrAoRJuAfC4[CZ)꽤Z⯿,M[xn(ll܋~󒤎LS5jYLC`~> o倇1F%vlhK7'ݔ"qjVsm]@ EE)Ѿqt4ہڬVi [܏J.~>e-X\n{OṊV¹ň]oPc4NPPQbc(I Gb#nbZ5;b?Ŗ MNdH@ڶIsLlU7 _w #á=z'6+4 iX[;k S5'4IWao0t |EINz}7RTLT bkwEoTs};ӷzQ @t]q3oQ k,bLtm& &g I4+j Ē>6>o'ג75@ے;m EňF[q}=L;#@1χ*}.GJsO-p)4В:=ehw@o)fnb%l\9דM]Ӓ)M3( 庽plPŖjRAg/GF ¡Z+#L4^n L.ҽt`hQaFIN /O Jes_.R=Ūܰ%pGy$޲Ӽ1v& /@D'8ZQ=XU_?yb{)Nvf0cs2`ne,d8S`ە]+VAQ -#ŽbzL+i}[X&z@sʊ s. 9{[]]6ʚN.vȩjpJ4pk5 o;4PJce9%I,xG-;avR@m $GHX=Gl]ц\4a:MM/r[ 3{>lo/}}1N;Dj꺄Nn5eh8ٕ XarRDganySȨF5Q[?9qCT*`-*c/qiv |:~'3GӳVJF]I3ٿGtsQ \[YAgKMW8W.ސ66,^\g4s9SQqPӳ .?fC/g󽁰ՊkB&ݻsj2`V)j2YsU`h:P:kTKAO#}CKo|mg[nqs9c".ON~",༻A6"74 KqO+ԙ~(Fpu5arL6Z (HFQ %-;Eb^&г(Ԯn -=fkeϿ{u>P@Sw۷)<,4EY⢤\+aQ\N@aװ"aliudS 70qW"q,qU⹊'}\m&iþ#^$Iۙa:|^ۤK6S|%je +T;>`[ /;pH |-[Dże%P$3^(Ց-OYXV柅O|E|q%xb 7_4N:um[<,L43Qb)ϻр 6 ըF5wgyLMC!_ iaڕe\Z&+{XY;罃U]$Q={f%fߍy6ƛBa,g"db[$x"(zWL-B1 Ҍk wiL|_4ܽz|elzòZH4Eo.1wi I7JAp5bf•7Hn\OiZPb{({K1Xa_K}L1F&_y7k0,}"9]6ހZ9m"8h%KST4Qյ.l/Ǭ ^ ~rDo\x6  yVD>qnλhEay\{WF¡=.{*Ԯ5͹\ɱS3RA9L|@C\e4ذRT|]%zϭ*q44ږN4XРӶk< r94[zWgv/啷Bl*.oװk%םds9=crL잫R:eYNxR\Õ՜ώq^Tz}C?ʈ燂ǾI51 4Z}6YYwI3nJ !J41Si?Z=tzvjC9' G"rPv;$RB T#{=B: Mn& ȨF5Q[}4LJ?O$(^}5⭷ Lߗ ^/P9|rbLRAlaea1VW wޢ } usvt4$ܴÉCբp(v0V71xJI1QuxaSKw7$^b^Kh-D0vMpgYNsЎ4y_(d 3ηdչ+!G8R:LT:c,=E {sŜP#JܿZ`7Ҽw*C{\\i tnN#$NH3'Qt!O #,Y ZX,", K14󌚴-Ghmt|Iz"aJ6{ﮭ N.4'z \j9RSKbkku>GVcx4ڒr1Brx y|?>+NVq,[P&kI"3^@!觋(kR+d@F5QjT|dϞK p_ل\][Ծ9oO88q}W"ӧ^fې_jYUvpME Zy N SErA#<ۏFt|婖-Nb!Gm(ߦI6\鼟MIK+29ȩ#+k4;F;2qVb~kD'pXyfaYXW-+&نcH+=@ZgtV[^?TGҩkJ{;1(s蘬i$h8Lg]3SI*>M>Pf[vƥh F;;o$pto|q0pX͸*NHͯWl>66s??ShOڣ\ԃcK4i c'k~anBf]GMa/aAV XFdTըF[|^sOԇ f`x[*{D榤єI"-ZEu|~ʕ&n"}(E'Ӵ!_2bN hy-afsq,b Bͺ]ed9&1g`5pVW E;o?C/,чތ[;aj,M*m$]CiPK.nvfnT%؛hi6vc(azȑ}ʟ ZTиTKSG|9ĸzB_ `>(uIx8yX\ԬoKᐓ<^QoVcAjfC@ݜ;mc9pdagơVB?M?O Cقj]xFM)(6DKږn&Wnt(9o@1=Zt<<,ި/([g{?h UWl"LDľ4 7{8+-$OK ,AjzoS5 ըF5zJ"?beu^yϙ3;>{c*LɃG&k&fZlOQDfz\3;W 8to{`g>`@ HX%Rɶ$8bRq*)ɱDzˉ-qU`'H-(HB!.@b ٗo}{ﳽo>ڳ[,\zAUH]KUۡS+jHH\J̄ln":Kpv-29&jiYPa At]wY#ñ9>0,)fr<\_Wk=A7ؑ3GRƉ}NjhOUny2|#%ZT{z2gg'AP8\욡G7=F!#- VRj%E+<^=I?(6?g{?dV1L2_NneH؊I"Z:}^)hըF5Q ˿_P5*n\qy'?4C ?V Tg6E_Q-4:,lOaR8I n>֓^X6050dn2|[ nl茢:L [ [KqG d(`*nV^-vvX4ĩw_.RG|5tHz+sEe)ՒW6 R랾LM&)OkCHߒ)U5'D{R.acXJ4Z s }GڄT @ni֔`rc-!56ۂnKX \WDQb|3Q[5Ìg9,Ajѿl~緖iv >zčuw#>XDݡVQE^sc齶}>(^`cKh(~Fe6) qls5^R03dV"6Uxx[.,=C"~4 e+\'Η.$Cݦ᥋1@Ҵuc=(HRR)42YwHMV'__KHSWn[}\d&uߓr:F\AoZE;Mdx5RP >vUM z3^ӣdTըF-Gf 0Ŀ`~%Mc66L3/dÊ=8l<2)ZA1_e1 ZW_7$1~#IB.e }oXv92R(OgMl=rr8e&~yS%\9ʳ>4 q D=4UVؾ9||vېv3^TJR :\|˥+1zt>Ztmw } )|\4_9 oQ ^ IF/d t8Za6«: IDATCؽ}6XK^!QNP.{ HóHCQ,R2,N;9[|¯jʞŸuYȷxWl %[ WҬn>H(jYPgO;JAji-5I釆(z;[>e4rt֥ZCZM{n};%h{O/xDE74[SU:Z40k۩eԣbAr[6v,LRe~RF r={/]!Ql5Dg>J-iijd2+M DsQI><A@y{'͑}}ˤyJRY(tX-sp #}d.owIS  ըF5>~?c.\r_{N[Q[S$L*_nv_wDK6Njk!- śۺf?."PM4(mV%1M 8^rkt)a"8toxX0G$,S ͑YKkh-5}9l$UcP,w_iUЅ:ùWeB_)υ,͸ sS8 39ra{!7?-Uߧ W}$ڵc=ء[.pzam82rbѥeCMVV(K@d}_H~Pos.jkt:V2(-kyjHRi" mw?yCK-;u]B,ۦ6Ryi_ds= o<;`q%<`Ah r23v`rL{}`\̬s[MZHW4Glp=@x-6ٱb mu$Mؼ 4bS3 &eIN;'66TޫV~~εdH j%KZ^OIR˫b)ip8} U%C>"SczU5Kt_\ς6lqҷ8sw,'os#A{]-]9_1̖vVn[fO;GVj'Cfub:@YRdE7^4;}fy*g簱23q-2@皸$=n+ӻT$ygƗ͹8bP*(XըF5B=@?[G09w(]~=?\;oz:|lQ羓7Z]G6JЙ-#_J_Fx mDJpѳW44iɯFPݘv^|k_j!WZKc3,Z{t|(+ [.ވHz'7&j2T A`jQ1V,:%MڕFW^C˹KdﵜtkEWbњg_ s3 Y(6w ł>V#Ȝtf`?3t/_ .TPo2V,7LM8\YNtp{l,ͺܛi ͋I˕y><&6ߤl0|?xqi*= i"a+)3wԚ}^#W kW#є38QdTը?"0>~cR?SOto85[Mk{uM-|(FhLڑ^UVX_i\)}=;s歷O(i nF<{+sUd0VKf~Woqo`8KB(hi>X6ijiMTji]z_[ّ̈Vײ Q@K@O9,8 "Lh ҄GRAO=ϕBqqe~yʅ(&rfvP7D?=֍,VܤK)en- "(YRFҽ{Et:qEFp'\GTJ57鰾ՐM=D]3Qsx"p›qRa2)V߳hm9-HS+–޻PSa.H줗iif8vtlj-xՈ1VJX#n4;$`ۉ8㰽g ?P`qƥ^Ք2D I4\4~=D&_,uia_P#" 8yfܗe1;?xxUl˽<# Ҍs׬Kj1cN vO>Ìu0@`jT՟Cqr'8A\ /x?ݶzF&PqoZ?=sk[!ß_pYN|eg_ijrWyA|E0Q2l,DEUV=m>\[k0t99}&4=CQ474X@uV7~%Dk'L 19WK=K&sc̹ "F[«x w'vZ k9ZMk sZxy(TLΞhv +h=zŴtli*_`5achˍ}'"JQ0U5Ks.cA\g*԰N}*BQS*+Ll'VclKN3%5Ak뀧d((3l7ιM9+B̩ZI3.\ߩVч 2(8k alyB4 wA9jM9\]Ix)iLS.V$~AjUZF:=yűʶ{ ^KgiDZb]>XPCŵ՘ Lssũma|ARAnx5/]'蜾<3|a:fIS{HhU$24Ͷ|fz3$Ndf[)i*%Q)dTը_c:WV:O=^xbz0oz䃇=0z fl1Z#g}elciH_1/ک1ArA<:x'~݂WX.rڗi5alY~Z-;fGܭ$IjVJ2 !_'=WVx%⤕d7sͮ5bKЖu|0mxrQQ:Y@&MCo<աm1-{m͌~!ppi bnL=JcjRV2x÷Xn+k6EɺX?{>RR"n7"@sS.5jI i%Zd!KRP|jM,8=C2tcK{9ߏWĤ&#Hy&Cn'LЅVsĻ5M:KB{^RL T*ib aHFD ϗJٙ~= bqs>^~)A%i\T2QĢŤn !MS~w*Jutem+es7}'dTը T<_f|XۆWSy~i@6Nu8x-5إY׾z]5>@PAkc`iVtNsT Tv 7>^XKeG- fP-nOIGY(y^&q9VdClD׾=xƚ s8>vQc>p;Y:hAS.^HHh[JCmr 7\kHRyzGN3Eg[jYj:=C"kfjLR<rk.e!zc'i]yҁr[(|Y\&|ETT!P^(81o./5)Ł!Jݞ3>,R^k̄k"ӗswy4#M}(fJZCMQ$<%\VP1̝\p6(ӷTned(҃K7-w\>QQا)BNӰ'IsS.) $MZ:*2Jb{4uKt:Kcl>xscspYg tud:ᏝĜc]=QjTb}ؘ'>QW%Բ /ran>^C8Nod'] T+IajkL?F{&st;HIhݫW!S\xB+BfL)8h6w2;J5-LIH$qV^ѡ{LݫQc'Q~a$9cR|9R.gqVLXqo8x q ې1Q=ZfgPͫ!)QK/Sgp-&6(3wnián+jB[6v'\-ˢȩ%^voZx'\ja{UG[6*Uw^xbJ0Sr6 DxgHZvVr=:TdJzf?q<|)0ouPr4s͘ Cʠ,{u+a*ʾqp -͜*U**T_F(y=5kӓaD+i}O1VѬ奈ל7=w+ZaaZܷ%5ng i( =}vSƒZIp%k2DVbXIל=3w0Z <(!MAA몡dBycK3[?C pUU7+L+O&Ma Mrfæfz\Թ?x%WFˊ<\ D#h&w¯ŋ!uo`-r!jT՟dCB(??J(c:ti-Gz#!@rp)+$RU}%̇?/sbyCٍwwx YA.CD2V\S*}fPjʅ}ρO/Q]ta${[sn߲۲tGΞaQ~sV*7ʠP/ 5)$ZuYn7 u$JR\G]$6vu3%1-̓"tnW3.3𺴖'pмt#>Z>&-iW͠oh=ߣ1rs#a)قMd}K!W2Ywv.n05&z1з /ϩ .Zq&nyq-Y݁2JEűOH=F!_"ZϨ`KU-.O>ΫiLtZkzkf-)aeAhiuS\Q(PxիK3.2;ܵN:DG}_1U׼J0^S\O1F~r7?{Œ]ã{7Cカ=>ﲾrdef԰Jɏ;Ce 腖( EY6{'%\=vB&U~='穔\./K9wMÕ.Z3QNpjIS}%Vܤ  S3B@F5QOZ3=OĉiI3_]4?<ͼxc{܊pVc#G]#S㎭[*h>l62X? f_#sl_gbX݂hwp3}v3Ǽ, \/|dFɺh5ALP?xǚ~aa: 90\oVņ$:E]-iJG. ^  cqe%xbrX(ee3YJS$_e`c/wnu fna&ȖYc=֖4=>T4~ѡ6`@gZdͣlUk+ɡ ͔^h)Dxe9fnʕMnH8Xr'ܒ|73=(k@$4xVRΓ BO>;Cp}q%XJIH6L섦^wacڂ´ ͝4ɦzIb o}"ٱoyRfL'X7yFКrtؼ3aP~i Qbch#[*@_ v/*NȜŌҖٹ_Θ"MeHFXsD du+,Zuyg;ZS_Y6{^ar̥Tϰ/G\_Ok\[K8T^WiMg(\')ʆFK{iajܑ 0~i!48QjT2|v2~Q.pҥŧ?}$}V>H gj??VӳX?_l- '~4߉S3]u^nl16{ZRU;+7㏕HRS/ECŝЍޜL{|eYTьGݔNL,7m>7PKA~feZZqmV#eq=jVʑyrA3^sdZxEZpt:G+B@r,+ ad q%+,BFszW/>NO{Wܝ‹_{mÍ$۶zrarD$IW|fǰrs=>rL9)Δj!.NvQ*pϮqTN(s ^vB9$4zJKkHM++ 腖zc9a/ IDAT 4ׯ|@{|+Z/Or^ear}M,]ƫ:;x }'ߓ)>7w{OgB BPsk2YYfz 5l,KIbu3ag:.ID0txMՃi2_6 x^0=5r/ߌ޲lr?quO=M#5{mA;Ua!L86/KS!;f'eE~ BU(n( /5jH0[wrQ ad&דK~J&\ OvT$朆 ku+%5dpdlZ@NS(yۡn3SK01й وO[̵Ύ> ӥaO?f'ei%Nc?,+y [3t^Tp80;|aj 2]2]$ʌ%4:}Kx`s=A}h|NOܺz4jTwqZ'IOΜcm~=_΅ o{h/O}rIJB a @v*%UɅ\i\IYeӟB;WtAعN$Q,PDo onlBn0^s߷-eͲ;1ůn<Ӆ[cO3b HdRх~=R,Z8{ҧ s!v #(U6h^Ҹ1 r^`EkcGȆuS0T>X+s y<'Zrh+._s޳wdJSs;m~F  ] R0tQ,S2ڎmloĹp<.lE<0h8:aRZ++^=p{H}"A07pdVS!q0bHr$FkX;HS#Njj\&+q]+[))F-݁IgѐQ7aidgp]G[l0.vfkdM[Z(Z]̝eq !O5{\Hen+3lqVG*?r7f'\#V4`O yq9 R)ݳՇv.w7#g~js^cViaRHf70( Ւi!Pm8mV.iP"27Ck\J񅀭 i*g~mÿBN. 7 ׯEoLO@j>~G;ћAYECZA+C4g8w2@F5Qu~n~LOy|L/E^@=nu1<4_*eHTʰx{^YYu`]/XCqn͝OyLz8 N,ֶRn'> }ֶS=q/VhBq'[Ḥ_]OY6v lJ!WWb!:R*(&jZIS 5@C/Ͻ5͔3$&Xg{M?L vm%īJh{wf'5xt2a([IjI2s(dY/ AWfKh( }Tը{8H/1!¯XY_^]b?@<4Y^ն+f#lpyF8 cZcN HoVީW sS {_58(kWη鮔k~N2."NڷB2~(':&MPZf&&dF6H Og[/F %uNY FJ !qvq?]DZRd\-#. 9QwNqilG ^(`KqzK(qkb:m[ܼqi,θLd\YL3ew vi[_ۚ8{Ϝz.2,^Mܶ[wf=}cy##P-4r%{ZvpCKԑZJl4Z)ݾ&_]Mbi"͔~G>skPj>pfIJƊ|R}:-iP:B;Y|91=p3Pj+,ǒn,iX߾Hoj;a7!(f\2t)_̑SczhkyE88PN&ϳnAd!_. eWom\Y4Clď<=Y^Bo)5#n>f ϱy^[9H |Y$OHu;M#^ģdTը{PIͧ><_^'I ++/3]C+pqb?$(|?H3lG$Yk wΛ5Uzh-"IffR8=ꯂ| WWD,ol5dvߍL48N:wͻ6S Րvfp(snRr e zUh E=KqbnEœ臆nQMTƊzqDDi0_Gi`o#XBr}-:Y`vʥ1gzi_{Xf'[ľ7%5ƉR,,y{FJ'2D=Ca.Nʖ 9nt0kĢn{E<3r vF*٠:|f$RV%=-5Iے}J}{@3KZ(Ŋ?v\ğZY~vjHR1kNo1L ~ȬKOj uGT˒h4@6|` ׯcf|W1Fi #Kw 4!̖wg0q ;7%k:Sv 3 jEKFe4jTʨ Ţ|}G1 ݆ \Ν>>Bʵҭ[<`Plt3u4fQ_͟4ce3_6پ'BBT5g?N{󯳻4EĞˍ 9 LrXvdAi V;ee+k4nʉ`UP`:GʘHp %uzƞ kS=OGGm7_."rkzU СGr7Z6SIyh}G8\Z\W̺M9TJ҈c!N& U uje-[l 'Ou=0llfBq-a$gqd8,l;@aZf8Z1^{ ,\TݿDֵq"A|@t#!ba5wI 7֓yf};ee#味 .! ƚzE601D @וZ.)VyH2WɯɅiu-^8X"WڙԻ(N%bz|_gC9滊UlzE lhy9dv!-VQKiNOum-KY(qW_{zg'v O7 Xl%;_ рmXU4xBI3f т|;4ۆVIS<ֆzU7M7{/%q2@F5Q?]q4=??fr%/'>WXpanA;b #j_5QS*߂yNH N}_!U͞L'<70 TLկ~a繟#6nMe-P^V]::rta |_ j%ק^@؞" ӔO51!Z Lt3aK#kq*Tق\{(^0&Ie@cUSc`@;t]BKb{#(h^^{jw <Ȯ~w{{AR(REŶh'X&ؙ3ēJ&JR585*g9$Jr8Z#[6j_(q'@b߁F7z7{_wH?ީ($sk޸͍4X@=n),+ 6 P.j].c{XNCȅ 1Ij}a$wO8Y290=pxﶴ,_J~W'>9k p$W^< ;%atߜ vM:gǼ$K=A+Σsw'_eIޥ5fJsÈP9&Xrl׀t3.hC@ppܻL)ϩyZ ]snJj)GybaB=~gZGNma kX5 ;~7&&XLi49͹sG?zuǰZvG0b_>h~j~ kX\N1PBZZK=vjͶk# ~8Ҭ훕]W|Sk6M4xERkt#ww݁nt wd+=w wqSTzG&Dh.X~ut3̩K?]!jIgF|.%&^s/â7)JmPN$ ICB.\OyKE(O @Z~9|Cnحl|sYb~07dPʼ/9 VײRn;ඟ$2[D(}}P=m!N%aZylRR-ЕnWTk}F$Q|>V_r߼sFo!VQ nl؈d]Jjl녖MC?JNO ╦w0H[ Y7̌< 7VߏĵNJf+efee@'ov3xtxD(BD˴{Di%)_{C?D={.e(׾(ȇ`F_WY w}#p|ÕjbU`.EZh,(`n{rAP#oڦ!Ѻ H4dXְkB=kk"t+}VG>xXnoJ㡑Ey""\XNt MӳTj39*n3UxnrYLP~o߈d IDATC{ޙR5DDyqfJBnu:oĕ*L،2Ls2|$% Scyp.q q*Oٰz/\4inRA6yZ©KGt3lSz#k&Ea)5Db?#G$l.W7SR+cE߲ܢ]Mp'jIS)mZi = -S!? H;m["nmPxcq? d-Jje$y;` +φ; \RL//[Q;R(>8 #MD4ZRR2=Ⱦ9An{BG*hC Bf*,x.-M%kZ]1X{hMùfd̈́)G^"x֙AA)>'ZYf g%7 \OYde9/wc|rWAJ$]p!z54Q=C/f =,ǖ͖!M>@)mj @3V:Ƣ-&3rAqq!AkR{wA0z_15]A6$xڭ7S<Y_JZ=P MDCH78'3#c,D&ϻN a kX/4|6~yRNpg#^yx<<3 wz$ <-ÏUZӗ#wcP*l>i4:>w1A/WJJҏKtz/qsM7VɌY6؛;!6C(ԫ]i=}O}rE_j7ZNh#{YX_jb*nNKo^4_ydB_/y"\E=| :tW:ϲ+zea9!M%#ʐ+$4oz m:\.op`ej%ydM`[Rw&w$]Y>g8&&$.-x=53;6Ij 2XM1;ne2lx~a!,k S-&խkiuc;)$#KXzh%PG }?R$|Jf>̏9Y>LP*=\')0ZBw ۵5wwA2F\z}9Z"iAX{819c+uHa_k1ƾTS3D@5a !ۻx3>!<M8w^z| _۵Zcq+vÇ&sMsQZR'7FV4gD|ǧ[{j JtX|^mMioEKV ^n i6ZC/44چ=plwP x=6E)(:xQj }}*Q%,j(RkyT+1?cD(Joe(GɇhTn&i1eM8L U=I[Dָ &4^F5M|kh%V4 uxݧZ.Hu!lyʼn4Ɗh^T:LPTxZY{\86ĞѲ|8% x&Ĺ>Ibiuq^@2"dk?BoYC05Q()u3a6bzW#;v` BpR4$V}Y_3iE/vSc.ᇫXdY\jҭ^Fe6pSPPU\>ǖąO}fK}BWRhEl}fJ{QZF1ddc5R 4[(^ǰqt?&f[kiP-k-%qS&f`[& HDυ協=3.VR|em/?zrM#b]Y.%)w.v.4?*ղRҬ] :$Mݾ#:c>?x%,pְ5?nM31; H˵kp Oy.ߞh[:u'FHo.v5n Y CjU(hfQWƙ]5=1Q"[Vq490Ywp62Qd27鰴fXHб,{)giҁYf]Yw04J/EM?\,TPx e|z5 ִTTl4qs }W x$nOpjpi!a.rB%ԋ]. %#$o3:Qi3mՄf=ߥP*(©H\i=O6νPU,Gcnui|*E^61^ ccf+Wczc𜿞5)7JLF[vOQ.HCf3tlnrJB{:`rTG, [ON% Y]![u&7DqZB{NbY},R.qv _]F dw(:#Je3 #dE뙥 L4PKE+Mn؁HcH{VNyϬO,<{ׅM3;FGXM~F(&iAtl>^BÁ.T(wBI x%~T ^U4QA%.N,e)F!Xk]NX.jNxixFH!Mmj> b]z!6o̲W͹|6υeW6RrrEwZYI9CԶA'+E *r7Х9b\9P9(Gmes{?C1z4qq,:͖ay=Ek=ɐorllj1vYf'6[XMc{UKz`. {VJ꩕kFٕϹph(nKWCvQPj ְ'zLOkQ(qlv y&ĉ_ަ0Ƽ1/9z;ힵkYZKN^LI:@5r4yZE;3?Дz@ 2~eB3I'MecNFJi iڵ~_`flAg'ǭsm+M9O|#: 65V.n\:QB%Q4]GĝZ+Y& NG/vTK[mD= ·#4vVf{؞pa!yB;o<QN]Q,Iڥb|;*(:ڤ{1belja ;9ّ{bm(fZ {խ\鞫vZ m.z[֛)oH ۧ3F{}yVtra kXE=xcl'FΜqy?k-`"'YѪg+%m" clե94dVK{g]ZYʊrIk\R,j]u &,*<ſGxBz}C4/ n1n槽AӲ](%y)- jOCiޥDߡۯ& 5ۆՔ~tb(uyED\md] )9gtB4Z VVC|afj<Gs^h*Ք" Y;` kX/8'wkME W*^ztk95?ʓκn/{reHEzUȡy2Q햋yS@xBYGM- K _sON|]^ ^if٭-ʬq3;yқ:t68X:;踃;h))%I /| )"K?ps9.w! %LSizGG4+)b E}_jFO*[Z+%*"T iSK0aJYN^IY(In߼\c p]ifFѪB/3- )Q(I/Kvl73qqĆ5 $ #\OYZMffv¥oq n)Ju,`{0\3;`w{cE_(w V.ܷVÑ~blV5#SIh\OH4o#"Gӗ"_*E!轳n{/ԴՄF[n߲ge~ڥZ¶</"/4փkh6d닦[]Ec@{*eiqIW$52tba9 B-~}71iYe,2d'f臥۳4;Fr:y/ȡ(O䗢cU z'bۜ>g.Ͼ+' ߵ(吤Z)>ͻ01LwED{t8.a!6ƒӷ , pְ5yxmgl]~3g~~ʎaeg wW>xp y'di&w״5h:**ՙw,.^;i'N1]4(Xo#V|.εo`안9&>]vΘo}pK+7c>ˆR7,6ot{{]ŭ\ȆYxQ{7@\xuSCpuQ|YYWXID f|fK92#ǹ2n]x{Ͽ>MÃ87چW$N_8s f;~ ZB85kbk=BjrRk.zOA2F6#MX?N"ԕk)|gS,SR!ӿh 5oi3'Ɯu^-e@ )*,j:G߿ Pk5[)J͖mN *-W['Cq+Xr-d%)VW,wϸ4;VW sDu$piXXN5<gtDпÃBV62S8S}x|tюdv4\R)&P? :lu *ǂֹN/=c|x  q\^wD 2I*)ZFńQA|{'0q [L TJqSdqrk D7^[ٗgy;#\]L0ZX qub0@5a F=|_E_Ǩ!1Qr̙Soƿ^Z3 b.ߣTҊ3}Cot翹"N h[}ŏHoyd}%cbt+/[ף; IDAT j)WhVE7R,%C$XQl9y1텖JIsfJ$hvEh e;-fe@oe;ɹ nH nX~|,Өo/3|%5]՛);~F %G:rcG\_(+ρD+au1mXN^χGl5".db|eh9+9zZ-i4nG?}C,MSQKgz]1i$\yw3^(E?Mӻk2=xWa4!j~ćQTĉ|1YkjBYr4,n DapJD+Fbrr&4kK9#n+$ŘsyS,l!xiκs5W{Z_'G )~j Q"&3@5a K\- eZK2>ZY%AUpq6lEsQߗyo#7 7VED!Ւff‘d9 *Mp@$:ӣ7}x:"Dg© m m=26R $b&N bGHe+}6"NJӋL3nZ7L=❨;O9~?l i7:AbO5 ebKJ[rc9;+aoLiܷZ &SX!sssJEZY4{\޻_[E=PCK|O2SoDw}(-z-kݙytHZ,')OD=fʀ &#U ot="A95Jszi"Kݧ>{cq)ISZ h(uu`neKj\lpe%h"͚x|P.9W+?c0?rQ'4;vgT8БLuZ4S uw?Jq[iW]K{F}6nykg 'L`m3kK='ws[Bf#kT Ւ̕i܏>7쎢XpJc!&QtۊօM7ҋNte#ɬ7{ɜ{﹒3ђ6)/{==ɨ6I=V.uH+eOO촻fpuI(x{f[,j>06P -t0޳TRVSFm`"wAE=e3.~Iv =_YK=϶fpbD ZQ vWٱ[|Q͖h j;YP =WRQS;x)C2Qv^M#A#=F([{05p~&:NDwQJ&10ZV/S)-'\d.Uٯ8lEsѶxAkaSq*ϼySҕJ?Ϳjs/>Hhr:B%be18\>v,1bn% qJ)T,u%],o- a3z $/0t!.>d1^Ź%Lĵm5a kXou~a#G~q`sΞmP4XboΆjNW'G5@5 Rq1^,X0GUl-0\l>WK#vPDaFhy=o[j twٵO r-ObZBcS'Md4DlgR\I025ٲzd^ޢÇ}d_KEFjH]zYX(v[N_fK7 u=Al…"to@rUVN8vEPnM fbآ1BBk8}9~͆^ 3yGH]wN=.wyK,וuCx5fjL塴8܃eAj֛)qZL=^1Ԍc=?TL.%8vtW2<.Xr.J/س8TԢӓ͸Rp:Yo9y1z3NHh)jU "B;ߓ+]w 2 mGgh-al<j_q] <5Z˵8PI_~*x8Ty_)02G'iζ4"_ǩ{wE͞l5B<mLjɶQl9}9Pcޞh-K/eATӯV#>tyN`l%m\)\&T8 n945-ł3 `ٖɻ ʊJY(a;*Ʒ$&I-ϟ8W7۲S>.~@oyʽ53!Kw!{jEp=ӌ- K1H($\ݞnR ,n6z.XI>Zħ5VKhμ W{_ݷǻF' S#v 0rxGgYH= ^>dȨwL:Yf)=Ccohw=-I ~%I+ee "NDPRG|Wz[~d3W$u,ߓn!iv) |u=6B4"􄫞 ;=˅5g.4d3Z,~q%ͶceJQ[m0WQ,*aJ06kFhV7R>ÊhYPSekn R*j U7Rg#mC̭lHjzc8w?4ݞ9]Dg͎$erTPP.J.]uk@A$ ZW a|<{yBV,&4mzMS){ E6 b,3:4 ]Cs]$a#O_ZMYoO1h-*ЊN %µS\Zh>UY~qqVfgy܄Pbe Q-ǡJ (6ZXmX\KSu|>!I%eפ{g E4:ĉ :w>@&F( +)I*ׇ͔Ȱ5aycnNw8p'(Lj"Õ+JsmO3Gm@as~VǘbLlЍZ>r~ėr|נ3Q w"I%4{eI=ݾaupZ<8_(k\]\Hxcn&@^U2L5L'wwxZK3ܝjǡݒY4♈+ / yC2a kXoJ3[k##?&ll./; )W)[K6m_jnS{EBAgR+k2;l6f|Ce$/I%Mg|Zse=˯}Ş; -_O[s3㒣P*hAt4Q`;g֥\Rqݸſ@r&i]2kC%gjVg޴xP$ -o{ݜ8񺃵gL-v m+>?2RQK޳vScB*"Yx:e;ܽsw<G[N봻Y0[l wr}_|oK]#+7btZ#eKњ ł]O46߄{}qceb3Zenҥ5L啳ZIs];Vuf~Fz% t1ÂܗcmCw.D+up ?P܎reQf A`zĨibJY%2Ex} u+ rP#?_}seC5;y[E zk7#jEqpcb$e6oj;w= 'j%Ϛ0@ވF ׳)3'CV7 d#Ɍy_hy q+K wbQ=2ֹ1w?>3h$V72a kXz8cnj.ap<ԭiz:xm[@훓|zU3;.$@sGxǽa6#JwnB|eI^fBUGϷ3咦ӓ $N8ϚRIzO[sbH[?(bQ&+k&G5QlN_ٷ˕tߧ^r&]j#wJ݌S*S8L<>OTPx38Ք ==b ȍhPlP`&J,bjOSJ CLzz*b֨M#ދc6[f'+4T=G4I8s9f.w Ҿux qs+HMÁV4BENY^Oya\kY\Ldyf=[js(456̈́e3@zlDl-,U=,P #;` (2@7v=R-ߒQfS74iƢ zןcݯR@!K7L{ܔrFsC_v?2>KroOngvzJ)3 $ԸKb+>p%ȪFlYmgCygբ-7GE!vrpaPn_fy0va kXC=$?߅lllO3?o׺\݊z܊~x g\GW/$DuKQd[Hɶ\hى+sb;䕬8_\bz/V;ؖ-[TebI,с;c{gH kaޙ}~[4 )6yO`?gOFw^FClBdI BjR%bc\WzJ#ZJ0wP+QJgNDl{Is żdtf׸1q8jV53娖UqlS19~|ށ'4s-s{$3iO3!e3){M)&kߍ?=~ h4KqGr!7n{>'f: 43)_^\f%͎bl%yLdOl5?'X $ _n=}l*gk+Nڥ^}OKt=Xd{m.+oIחE) ?Ư{ %k.bfYq%qyĞ)g쥘}ՒE3":+*]G\ M{]6\ER8o(Wa63H>|(5\y7TJfcf ԵRvxN7kǚZC {rQ[|N^32ǬAAFjyIi&TB 4 5%%7dcGlk{mm{Ch?q]db)ɘ9;sžlq%䲩 |bonR.n V$$4ZX 8i-.̮N ڥKhHcD' ez\^d2N-cCVgTQ ݥ rM]غQ_.#N/, UdhCm cŠѾn{Ϥg"֛ ߳L?w(i(uӵnNRzWvO8=0 6϶^k{O~LO|~0Y#3ڃ;6˵S3&; :\flиŔ$w \;k}K~ݻ ('v`-ť%IR|лИBZ=kV3E:$&ȰR8 i6'Ӛ Ds~6!QZKYojLQ'W  JI01dR(6akbqkhKU&|/U-[ʯNƹՄg"l[)f阕Z@PZk(NTB&F @̱Pd12`WNu"@چޖDV)kuZ[+83 9ojp#oJā>JxlTMH_ɢ62v}O#{yqYX'ݢ4<\W浲saϢR(e McWu29b2"lJ/:  DZ,@..lIz?L^mbeb^gY6{S7Nj)CUTi*}}V0e@uL :wWz|!=Yg#>\<*E~vOZad1\Tk7UDA'& S_7u9!ans0R: Qw ޠ.& ۗw6VޗYhaf1X2ı @^ƿٽ]T)ɴ__}( ͻuczO46כO?T1f$ IJyM΂^]Ob'W>N#{s3ybiA1'ze==t iM zy].7=D7ٰEiBO;Qoc;g~TAiC)iW\7 ;nWTJ>W896:q*plTIc?% Px9i" s=G3ZCq~6s4g2 Ƈm%RA^6YuE>瓟P*m/|I'LRc&Q J1/yL_?}sxNFI κ?#?3BrE&P:gb'6R_Em a'_/zXJ?dfu)PW6+MB/|Ƈ-X▾Kys]6Kk)2 EjiUVSF%wQʸ[jY+@.ؼҌ+Ht,c]$9FԨ1]C]<^Ab{뻋LNjpktH:t"-OQݎ֦`H 퉕2}陈ݓ+>)q@ʊDSZRеf;idw*9}^(esz eidrd.,)rM⸗yf:m~,CFklV.NG)3 Ad?6Ɲ,o_֡WBmMhDUqmzK#-)-#o&]@tVK!jqvzlVj T$)eF{)"7dv1adЦ{_|>l!'ȍA{%jj-ELb4c =Rv$t`v)]l+4v756-qU$Z jk)J͐"mAF%.-I`ߴrjm3#Ƈl-s e47Քz=?09l@a`([5B Y'Fls~z|jzAOhuDS BXs!w6Ͷ\8e%v vciC 1&b~mu4n?1pqиiSx J;]}Q^k{ys?w|ͦi+6LMA8QO 349{6/~{;y_I)b8Gq;?~ @ )99lVGԮ GW.yc /wh ̕o^'n~Gtۙu_|c62ϟu'x0:`Fa:of@DZ?XbZ݃𓋧㵡֩CCgU:̜EK;I5< )ajƺpb&tƒ;d]٣Wx7\eY&N'J$VOM9:fv)bfǘ@I~b@]Ԩer{(7QQ 8L}9%2u g.81s1':,Q #^]W S'и)D32`qC${:\\L'zt(6:|IO=Wc:piȠԨE٢7Ea΋|i7qxE g"oEI 8dykkfzv\ft;&]ep%NJVG_N\Ku-X.Xrtse4FS'a'NE86=sO/Jy5秐MY21bW(䲩][`p=(pn%kHI) Yv<VmV=l+j4TPsR.fbN^yzK=_|tW5? aall˴DcKPHzk&pl --9wPZJS;ڑQuXP,=n^k\0ښ4rf G^KC~]/4Z[,{i^7){u(҉(iظ[)G+!/II:x.`=Czbt~ qmN*-FBoL7, =21|mE@36hiI4nb[sͥ9֪4aѓ7ٰ}9IW=')%c6JA)j Ņu%<p%S..hK;*6y_o웾~]݀meMt7$5m1}G %Y53*Rm . {9:R4q-ۿ!N`0pnwK-윰r-&weň=I,wV^RV6m~Ik}%o:\zRe˱ =ÆLRNo#gcŖ&j"1 Elf0o=Wd׳t)dv.;]sPѥ[}Gr3.dž dbf~yfC:ltO{Jɾ)vnVwAcїl]dff*ѫ&ʦjqj5̃yjMK^C&fn)>a4+6VJ'Tt&tB3XZKJ ~~%ݳ%Ic%\os!ZNG.~p:k,{޵X֙=4 @^'!}=X8r< TCCry唱t)tIěΨٯϾ̗?x(ֹ02z3yh,WdJw :m`xWKՒ{K -Op/pLH>Nq!;?$U&ѾW\lк%W|əK cF0[ot4GY|>›}n3^ZuOӚwtaO|62owϝM٫XKkbkF&yeˉS-$hPZ=ef^S9fCS|8;Np[3>l15j&1R̊$FئXrxMye(ҎtY #gOefяJ/=憝k ,YnN>+BdnJC.6k šHN[S?z&$L[fRpa>LJMsMAu脦:"s@> V)ew62] +71o<&Qj)<~5;4AܤKe FX36u,|Փ-NLؘ~Q(͎eU?Rγ4ډKh cvISm[`KZCp$bs`f>\W簝,;$1ñkm >=]GhjLJnpt^ΓؖqL!kI&؂ThVpm(n LX>'>Gl{}˗RR?ؘߨ˿ٱ#Y8&Aqmso> }p\(Taa7hݍ8O":mZ 2¡1Q]Dy`tH%ZzKԛFm7yLd:)^Ω(59_0>rْh9r^mRe:'˴ڝOS$UPki"T+$d߰ePaNX]ᤛ.=S:hvS13ax$vǚFΖN9fR*%MJѺ ZDS#6',$R⻆E- VyP|f#ft"cE*Nw|/%'m\a{tw<M7/q@Lz(Vin6t(4;Z]V7{`]{535_%k 3I1f*2q;YZh{6sbv=fI㍖0ͯ.%[EDR\\HXorMq`M"۰ÍrMqBĎ12_1* RFW资 {FY$JC \@Y226d&yZS+FMuC}2mOW&m}tHT7Rˆ^fO #hkۤ[dήcXd(iRȌ=p `s7/s=Q%5Yg$9v&"5Ef &vSꍔTgzؘEo+_;?&ғ5߉͇Q !;w>=02׹ZWsmcz^UєqCNu 3$+iFqOܴ5z.̈́[~a3x8t>o7h:lj F}I+0jɢeb) bKJRbI5a_^0.a 6R*hik }%4gFn7O>Iºᄗ_;F͞`Y$0SZʵqV6[̵H!ZŸ?;S{Mg?_~*o>W|PN21a?sfW@_DYJy|O0ѭ߿.,,4Z _VqL$f\JLNU:PB>/夡u908hM'q AaEhίS|xƳ+&lGMzRNU|ϟYYoUu/Fiɴ' +jo2[ֆ̵L9 U~ӑ.$y#MB` :yPuO5Fi :kG9ㄑ:fj Z{+ME!>蠕M PWnrȵyhh|qVNjj=h#5g5Obeb.>Aa78beOuo*OY,#rW!>cgcHP)jҜķ5Ԏ|3v8YfPYXٛkKg9@=2:ܥ΋F/r/Xo)t/ $պ&Nvo5M)e^ oܮe}y`}!.so]<p[wd{?_8z^uDxO~r9[@d=G g.%↝n/IVJXZL /U?J `n{ce}Fs$֌֓}'ӛ2{{R'0<2 h]89*7 J[o 8݆u~2+kNcg#(:VzxXgEY4;Mz[_Ll Tͯ$&-ҙEYN m,",֔K+e ?qLnԈJ]: 8MTKf'; mK9BUy#X K{iHgR)a>aåEc8Ֆ"I^#skuK1S# kuE_LJEɻ&s@ܰy//pFJiGQض$N4=P)4s+;ra~1җLBh}n/o[cRK~>x/Q%g NĶj.-$L :؂{]VSځFlr+v1'Uj*sbrw~jf dyHt}7ݚc<윸:TcMdE2/Lcvh %5}}w8q>ƶc( wѲ<+9%v߹{?{ w;;:puj`膡Ώn!׮7K [&f¡~g`zZq]?ʣ&OC/22kN[<;y8;Z0>$X^\ZLu=i mO 9:`e]16`e0hܒEe"q9DgGgYo J;=]X= [;Ԍ ^]![ܼ?|(*tY-I%Ln,h#ä :/H;4ZzCkX$$rogk)/pi[iՔ;nht(f  @>zGm5;#l`VxchBl{=?z:{S)^CAʥK ##} 7M@ԹKi\p!'RJ:pߘogB<?ͷ\MއrAw9Y%ߓXL k~IC}\z8?37M6H=.s*xץQ[&'8}bChYwhG[M5#y/aYM_3bfcѧ,=@ }ϲ-t)}ڃeIY[\%:}–[J.'Fl+2(6`N޼:flt ] Raw!'{;'OYTD9>/M':2[_bE!'SC5+If2i^bzw]\H2o A&{)˯cǰ5^]2;XWtBLcqpQk._j{FT`iq,KyktBCdRfS:ҩw29fbzt$X3})7) #Y53oL"A)M8PAd|EWXE|4 pmѣ}/ʒՔAM,)И"ԆHYM{- _']HKb SF/MUztD)=zS1W+mNJ[uev:+Rz@ʅ){~vRL?G{ oxztzz=Yb^E@dc"}9FFrm<\PtS}~ڷVKZyf% #^$Przb!\Y kL#1~:h6ae9EXXus<yG\f:Zͅ*[HOR4:6Q|:4hդƈM)fګ+c+5Z4\uS[0855`2<_O]>Qr-%JVO}*(RP M u+)g.&X #6{2n[]-P(IdEypSgh5bpxݛLog3 sSH"C/KVi3zyQļ\Lܙ#&iDn匇^k-Uc1yp0:IS}a.aC*OSS9?\bSb$ #x<&'cB#:D1W|f 7Spd4){1F|l[G#l3xqJ$ XB_*|Gz?{k~obDŽ)-]5H|g='#8G?|!}qFvݻ AHWh.p![ny oS(29*cYNoZ]H ΁d|kJZ\022h?gc8. - ̓ńuP< 4MAAჿQ!u C¬W/AlLa(8濶i7kXKs|2?zzphI5YaJ;04NYNpl3 Znetu3>v/d 94nyҗOZkv YH|:4wE?q 6w Kq)da.w^}p,JE a kz>%lUtFWSfeI,Cv0!oUpؙ::<' *5 [ fYulMϜ4t(֤Ή&h,ilwOؽɤqƇlWS;qńጢT0b^@cWorY"m7:9)lK`jq|k5T] e(HRIއBN3AjfKS2\vD fY"9;Z^f,-3hfRIS۾ ܽ~c.%bqnte`;0 #3Mx%&Ql,ϙoaq=^3ɑM%]{٥uU ѥn&ʒip]mYr#9Ap.bR\ }k /($ C2HJysw˶wdhj393;a4:1Z67[/sż]V|E#o< nصŇ`q~&/=T)v\r;Қ;:ǞC{l':q-{htHTVɡϝ~:x߹~G[ul>fgf;O|zq^%ClP8?8k}+}qI/7Fa-ץpn !f|dM{猦T nrjt&G3B?v֤L\)Ųo׾/5ǀ&{_dr /}F_ZW2pR+4 8fr¯ 봖8w%w&*6o}"I4u_Ybtn?R*8NGq)6(.Jk>gf4{㵴ך%4g9<}3զH kWXLCLO4ѵ<>uJS5 k^WXHG)YQqCD@Oq fZX}::QzuivJWghh"$Tb(>v] ME t 5K1P'ӹfnJ|$UF>3eH. ʍb+: nNeuо=?~@d3va\)T'G@Y+֧Ƨ x'g}揊WGkޮZ~8#?Jn}j_+%t%cۥd*hhnV>лW~3_)Tk^{]q?ߵ/Z]y[^B:r*NeDu(X280;[fiSi JFQ't ܰRRcIѱ~†UVD5ƉK&SmN-(BqO,Wu']:sm9GYe(CbE]ZgsfPTK Mcs|;iFQilcN;9Q<,uE k@u[-@p02Q=fͶ3WP">'tˈR"k'WA 9ev=i s R Ov} IDAT.`s+ 'Wf]VH$$IFf'8 xbKEQNOMO@LJ}3ᙚ y|omN.!HR}V7)DGQ*sA0cZ#3ht#_=RfgŤ TV(^j![+S4+^"޳.(^khi=mF-ѲVZvqC4MWጻbB ƧVuLΆؖĈ ]C;+>7knܶ.] iB3 ݭƲQPV8xe|:. P!cSӄ: U%j`v(3gnRH$p%3 iX•x::fͻq50Z_/GM~.83]}N>䵯6w=azU4Mh׽iįbL)76Жqy\[8r Zk&& RK~eD4!<וՆo]Ϳ~_'/}Kg{u m?_~5ΤS~CxǶ׹hH9̗4u=Ase/+_т`…9!As?{8^_hrاDÛߓwWk7ق.ȕCnTe !fdL %Z5lT .<r쒕GxٜظK &2EΏ? ܺIuGdIx|n=c|M nf+E( clS(k  CQ-zJ } }މ 3KwRIH8>1Rr$A(1292ij~+-AcNs r+b ۢ#~ jN\&kgfV%3{P"WFC;_P-6PWnSWm)-h^bpGרW756[lTs5:;iYR`vܣؖEiN2]}dLu~8SVzDLU*[`P:vgnl3QvUy}ǽΣf΀܄b#+ܪ0ŊQg|Zٟ7ˢ)L4f5iا(153p\Y㘚r9cwٺ"Zs2ytڴ4DÇ`{tu726۞ޞ_ H"x%K08#|GJ@?yZZ3EVeGR(KW ϏIV%MMi:3=YEc%> ,]D62!Ly|GSa"W۬6eyJcÊ+*iE֤/=9glO>*aqi4^J|ytѳO54v^W,K'S[oj/@F:K7+ M 54adpDbu*aԊc=mm5W>k M2Ϟ%n[تS>͇Զl{ݶ܍xc=x|7wݹtΤOo$;?q=7l<"P<:;/#&u%P`>>/v~ ߰m]LH@>)&+\{i]&wpp4W?Y'yr%t{c09ik"Nx_ޖ!9QҜ6p &TK ""X2WZO{M|>dEGB4cʑ쥼EB>>zlk)c,kWժ2|Big- ٦\Œh[0J%4:Rq%ٴoC]Jzl:WR%NP@èbu.Bt㪟TRa1KIh2p"*x/T$sulu] Z3zNwk@]i#_HҔػsܿ}wtGj?߷?SgGyᚲiyd`Sڀlz&|G-#v_ن^5{ j@4Viz5n]_]dkn~]go8 ~t{9Ґf.{ Ҳ .0y/B* HCXpw0yɆ2UnF6"Oxc_tJI:ڤ81KC.sEeOjժlZhj33hUw_~?}sd\;7PDs :D%R*ME(睫o|^UguI(%sYq-꼬Riթh(*P91d`Z;ii0`b¨̈S(8UQiٖ1P<U^vχ}G]Y {稻`zN6ui3}Isd:p|q:ruRʚ48L1dV!9Bdr:8*WB,S(aIYz>m?q|2ؖKyJP}dkcr֢2wy s5!=^a KљtY$yҖ%O2Wh6Y5nY>)9^̟ THF/dR_HL.4Et<59&`"fz:$5PRr$nPexҤW<bއ?a9 pбҿ/)@]зdSQ;r8@lWڋ.R?t=fZ~лw=難L}jMQ~q|?vđiq??q_sJ ۋnyQnͅklRS~85_<_מߞBDꇆ*::BVx>M+L1!}riN/O *Z 6 L!5P՞˪bS&UiXFakl IFCL29c2l%,$oSͪ I&r9I@'4JX-E]@ss|i(3Z)0r|А~H+LZ4\9&c>)hok GQ:lZC>^-tA Iv.b 4NeK "޿e 21`^˃>WZgT\bQjz5 *$-uc`֤\qpwP q"/r*^ZDdLPH@WyOɗF^3:?*j_,%̈́R27 ~3~s4+\"T< ){[PMEָ 03#Ҡ/U9$fi3_( *4 =>Riə  iJj@ami4XmR,]LzSWpcrlW/]ߒ+9nk4k"/29Y['ї**TvG6uACK ]W26%[2fJ5cN$5U\EL8T=+\8}xv+`/v=/ʥC#L,B'zVTG91mJ~Oسgu=__7.LN/[ ~@=(HTO6+ٰr((ׄ -jD `.onxcincQ2&.Mz; \OMΒHp7ږ_T>t,hBVYpԍ~W]o˜VxL4+XjN{ԧ4 رKsz#8mlqk|rzqTi_q[_Dȱirg)Uu%rcb.HO%4Ʀ= uM>fܠSxNQlJ\ˌr,jS"-0SJlWQ.:Ȟl=T/p=ߠiJ¡k.IҐɤuZ< ,C 5)| jS`* 9 Ej:&g-u?WvtsQ*Z./5w͍ЯbH*.h_n[`ʬȐ!:^] ?ᕛ~G1%[Oq[|WEn6 eXgB(TU3SQ%ER6ɘvb6#W3MDO BTѩF?r*CRqbYc2qXեhY{*`j\H&g%][sF[N:!4G<&C&:L7ai*Д\b~7 ?^gOg`lx{? >ũ+.zE"`~ܻD>1loZfgűb*ۛ-g2etgvxFy/4al؁}ﱆfyʵ󑝳?===_y֛}"so@~cl4Acc==ij="mY Tn_{+R 4u<K|£AI9n45 l|e>M:+-8FI [_>e*&%nžc.{4e'U8rƻ(10+/IGpU#x@s\!D ʔ1͎x̃dL0Лl Ǜ )Cr~NWh(M++Mem{]}MLM𫨚%yqLR@o40BW)H@?/{StB6M;Ų48^j-&5&f1B)kQC>H'5V7VkE|71:2ܒڢc~˶>LQ(r_[m: ~`_Z$ W+yjN!gkzFr28[~\dJE:!"1 Ba t]X |VUQ,gr*]PkէC,C38mZzPSc#*)jnb~>7 BA{Ew`bl[>mGzZ=<0\ٰfp=j/f;x쬏̾+ʖm%4-:E^,(N8qcǂ󆦆D5Y)cy?/ݴ6og~,D*?[齼}'߫%%o|槟b{~[׵X{=ZZ {ǣ{%NzHJ%?S_6*k)OHMR$N]cQqCnTBt K?ȐO_]GZ7f_ LB9ZU xؔJ*61ˡB)>Q׿",:Jj k:n \($KTa %?}sコ2L̟.r\ȗCcYfU3+5i֚D{UQUW;7+A|#|c, CYe5\O]/IMo)ƬenhQ`}L9xZBIw$Pԍ}Qqn;p ;*&SZ?WmQ($#nQdLwJӢ-񳶥Sݠ>:>8F2}kbAēF +PrLؖ`b&@h:R2WjJ|h(ĠkeI<`Bb  ͨ!MAn2 +y܋hD}ـs&M)T6T\v$WS"gJ _EԬ\1$WElYk/hs@Vv>[_m w⭏Pv4\OhLeG:<Ʀ+xM["\A*H%Il}f6#R)J-/Pg IቀVAMRY%k$Z?4q<#jz;SM+ꞙɩ{0n bs|$ LIeb fhBV.,:=}=#pxaZwunS;~Y.\޳.\4X~ 9Wls=Bs}k;?{g\We^|nd:"$X<hyY iѯ7xCks Qa$ |>BRj k9e?WwԿQH{#H סr hMոGKg^,E:22ro mi i0Gʤag:B KWTa= IDAT, |ϡy 앛 N)?e 45%m(|Q9 "TQ'<@=N&Rŗ #:(Դ)c>JiW 5 `T `eX ho)|r^ %zUt'dP]_!(t(C6[ 5JEA+C:Z )I'hLR&lZcrV60908h(žfU1I2!kH4M`iўXH"}h+\kNjaA }6>^Z!mZ6Ͼy|"}z?`nSy]s>ITv?[DsJwjb,]+j Zȯ_xꡧ$@w"]g;fV~%ÙDs"З>tv5{?;3"WoiƞVYQ^|r~x%'vֶ5k$rEpb d@=?[g7`o-~ʡ^&*IU٧ަ<x+hXnws%L7te4E߇Qub )ebI9 's{ 9\\S\6˯OHόpŊ3>9+ԡMiҠc>-Xi;QX2.:cL%I4e7vut]O.|]MK3 _be/cpԧ׬eTkH u RY:{LV)"\'\J{(;J\00+IY.I%d:i(AkO >kWFilЮxL,B ]  Vyl[ ,WBb 6a\F&%[* p*f:_1O}IٖXQxd]IRP.jq 3.0%Rf!9+w-o5Wa|qG)u*SԲ\D@, T蒆e*hfz. ͚E7>Œ y-յVq$#> g6LR뮲A콼wW\Y:F۲B7֦ :62P\@X>r0DZ{ߓδ NA.SDML?wv%z7| !V::z~·ߞ j@{gvviimZxi@X 89y?LoS{W޶0-plدBL>ֲ ,L zжf mSNкy^$zBL@^TBr //zg}n ]ZZ,Hr5%'~eE股i\BiḪ1ھzc:^`K"(՚ns25әڦaSͤ^M_# 8̍xӂ/͛SDŽ0X_MO&&|> @!':Ox]T>>5_#1CNݚ%d`, BZ :,RyVBJڤ5$a@')g8P΅C)%{4f5t]D@E9>tn8\OF ֊jjaf*B7\sTb{JDƈ4p:\GYJ*2 94Psu!L̨)i0lJ׮]oY@%>G:E-!-:]-O bV[ q-[N*4y7%Ula{󘆐lA(%֮05htԥ52QU K ~ 0 ބ!L5*!p1[ BMC yߟמU\Isؽ[_MMj\ٿ ӐHʕ oG&}d45em:JQMaH6ej29OwpvZbZU(\%Y[7ɗBFjxcuݚ9+š=rձA$cJJa[5\|a2 OK&ŊʧXһ.fR[=KkMp& /9tk_p ^rUJP,~S|3񺍮i->wgeYa} :m) HCSC}˺S凾!{EwC~r!Yե>tSQTbzBAI(H}=BoImV줮ىyOnf@ #N^Wē) 3KmVŊjwhlv 9p¥BJn;@ْ%lKu4kV_fCWK:")Z4,8̉Q[J ;aJ<\9*qlSWs51-Z&k?I׽*52_9"CT`UX0&?AaF=KʐE\W?.cChZHsN3FUgN'!f c1H$+ rrspR.ˬ*:eD3lj8+GH:ItݞFIG&*nSEZ9'H42Ivf5PM^3)].8T@WA*و32+saаs.)tb+wi7);YEB,Q鯉353 +,ff+ـq:ቀ6%o.qFx:auJTͅ8C>rH")[,uTIKACibjB 5wXX C /zB`T r q TFeRT"e>دZs=45֚:=^Fzj6X#ndR,+],#]EcuALS\17E$q\ǽSO.U)}rY68@UkPtv15M_ /T(YiyH;Ԯתh=KCe Ww/ܒ蒋ʥr?G{ilc_)辣3)]S}-M:So/MXֲ,w `Ҁ@导SqJR,Jmg΂xw6pǗw|9_۞ߞ(??K^"/}w#8= d]&g]@dRF#u x٬b"an1KPjBE60t^R-ofZv$s|UilZ tNQnqX&Rr6GJ[؝o'P_:LTrRaZxWr %vu/ϵI9We^a[m=!m&-  -`' )Ult\IG}m 5 GCbj.@NK.P6H'3Ãċ37PYEjiT61kAk"H_-MSmKKiXu:qŒ_>JG lJ&Z,GժI'T@jeU[Q΍{A.$ C0 eD]pE=͗$U& /5n5o~<,#]U/4:D͙BgazL4hQqzU7xʀI4RII6u̇ QȮ2ȗe5 +: UG)F)HK:+e4^|Yhj1p=l!SȤDY$ZU{ɦENWe$7H*nH]@09,ovsغܟllKf~[>q W!5dj3N) <2p 龯ݷ醏PrgUϢЎ :e kwwEG;:S)ʋԫm,n@^mlsc޿9!Ux=}=C{'4^hyzNK.obD:BN8tw~'JNz홐x}/?U>BJ򹀺=,EjT,h4S*NLN5X\@ dt*>nDcSKjU&Q|`,upʤJ10Ә]?% Dž]^uu*q\Q#BB.N!vj\M7ϚC`,e=nR,iՓTQ [p쨋\%w KC1DsF}FgMP'o7Pji!Hg%9;Jزn#p&6@w!^2H[wxSdw nKYlS9i1ꨔr390Wī5ٌXkmY{dJjl>D놑DH2i7f[L!q 8qnC?@2kMEUNH$Ya.&[.IJq44M.Jlݚ?#\8 % A2_myХ1a[! CxY@A(UT3uLE{ԥ$:(`p<^Jg1 4hxkN &ߢu炀1^xͪBMB)5$#J=Jɱ!=ieZ6&vj'{?siIrYc*7]WCU}JE+XɦfX! N 0+l;3 r;:60ņyFZ$ău:3<~{7R6(hY&7נ "Z!']kN~W°͸P@3|,>N,.иf=Iُcش*F<Gh&a8d6QH ]q[ut6 @Q㨧2FmZ趇W).~vT)kbCQ}1QNWRi4Z`u4ZDQQN-&FJ|MBG= ֋:SXeh5Ċɏ|NCZ[lj6JTj.BMNaM6H) T*!ӣ;<+erEjO2Wd6+ٸ&6hFvŲ}#/F|9x /)jW*}9 O-h@4 .cz.Os=J[dпg3̏(Bڹ8 HsLYφD5)b+ #逎f㴈L&A% rR6γ#KT&Y!'*Jg0Xn3Okju%VSEz߾u檗\~85>/k"P-+z6n>Gf;z:䂆1 [ \ۚ,d54ftpL4V+,yUn>/֟ڝ筶B)gbz\1y5ƾoi|+V>:w |={~{7#:IA/Gko׿iӡ "Y*a6/5I*}7*tb) ny.3Y⊎5>a.dɘc^-jt*W%H$rC6--8B>i{,f,NOP s$bQ2ы ҧ-4mN!wkB_yn|etR;+%ٔ%rKTqѬ+( \QAݢCxhG6?]&Q-A0hNz'lyHdR(2 AܤѰ)jG4hz4A)#7pb`Uի>[+>9u)KYaC!c갺 ԕֈY󖟖 fJ'7H d6E(Cyf/mp=U%섵lC' 8Sѧ(KmmtҧT:k^a[B5RR*Ͽv5 ]5(s*K\4cSbuar|C%u%m4M53Atj VuGQLjYnlH5dBCv|E fsfKk <K> Y^m-­jWu)ݔchEe*@ A- {uޟg̙>#,Wlcl00vB $!<77M`D0w4h4^Nk33Z}DyeNY߷TSEe\AٴG\☖9'jǖGmsG IDAT~ƭaϯOAf;X,\}c v@7ܒIk2kXuRQjzP݅"t Q=YICa҅ 䋪kܠ44F&̀W-h[] *un?*4g4m*C.Sg &_*o@CƝ3E}̢NӄgWI9c2>pd#b*>CK(SrIuS.#Yq7=Wu˭zP-QT|Y9Uu ]hj?UH \{el4=H-\?0!^Qzqx3 bF q7[ SKa+uKtLr!%H#ը/c1(a!w8劬k3yc;&"*UsTUMAcJg" MbY (Ģ /mQ<:4`|TȪ'yךQKnd\5 S%44Eii`Jiʝn ҨP FɼNbJeU3aY;rɪ-t9Ӹ7k\k |%Qהv_s=u=8d"#NB.3IDkbCLx*Qޕu0\Ko zmت n~U<2289,SЖFɀÃnJ n0uBC%{\$K,K9x΁~o~t~WנOӼNN?L4K?$d 7w^[‰{g-mwi%oGv5 d[8OL1mS>/Y}o^/`,U-{hŢ8ptZ awhnǷOv̆˯2vdi?SԜch`B_ӵ?_Ǟ_EtG?yxb=d2ױz#Yc|@\ ewp*N,ݶ b3ꏅ2 9k&a݄}T\C@QHBq8$Ut,|š(Dt _TOMLaKckZ ec.`~ 5mѻNJr}MiUe*U:ˠ㥽.z U9/Relfw5i:5vؐqfh/> ]YF SӠTHXH 0 ~lGRv$ɘඛt3gZk2 hI1L{ ⣨qcQhPϤu>T|+0R~!ce* n%?D{CUW {LtSG$Z :u"gOch9E,66Q߯YnJj5n1H%TJFEэ y  GGp)~e-3X<ڼæ͠oЛ8vsLgb%V,NFģ.+ZD^%bqЈ[߅ʄO"ì l&s&d@M_ S 0: qYcx+ lZzkr]U_ߟ,u+ZuA(x:bR@*_ t=5(YHŲ 0t1jKG֠C *:\浝 :0;DiW1O:Zc*.Ǧr`9hi0̒zf%ɘ H'Uk-~JŵUmKTZvKD2+n?Əolʜ_x˅ :Ȑ9968S)5KV/5{AwoyxOleyٷ=_׶M^wuug}&Ϯ®wM˜Sq559etKwp:kfIoo /遞;gN@9~ R,zsF7"<ӡ)ݪS$pf40PVPBh4h1!#g> :R')ŭκ%;!yCLJiBԮLP&m)1g$@G<:sAnH4&'!\T ًRR<96衡:EF&k4bYRHް>:+ɸoe!yW$$q.__n7CFaԳeIU,Fbb)`x#j|]SzT vd%΂NBY32FGqb9,?NEn)z: Zt\Oo2Y4?C#5Q /H, 1-Og| r!cCMA-Vp'B ȱ)]}i>TƩPBSP75h*}gxgbk⨦ œomH'UݲDBjUǍ(0o lԯB1rmvVhh1>a3[.tNGNSZ k$ХJ ,11 M:ȼO0bץN+ے]Rm4F<hL!SE,Ȥt6msV%X3@>&^*W k{#=\V-VxѯMȌk@$r4]jL| H(aQ,bZw A]ٖ'U "}B-;[ԟw쯒H|nlH.z,F]HP1vЫH[Vkܐ6 hLϽJ )iUW2]NOŽ]7~X|<#KOԩb?Xt썣}GO =Lmio##AY*~{W{⎏nMh\<8<=4~;. 'I|Ϫq7oT\౐+LG>:;9 i֍u_Lh}.(̭ј@8h15 qu,B@KFGh!fи褯84y7h_d"z{]\IJ,Iř^؎*B_jLp-,AKF'*kL¢ nm'h G$DJhDbw->pGK\&BWFƛ*Ag=<8U4*R2k.f"L7t&4 qu&r>kZĒFNWUr^12}tXђFDUW}E&_b]  CA zk7{e"m񛏿G/ |q=D)& ~RhjbI@)qf!9O4t eI$愺!8دNUϟ/@IL$?Vz%\<$@i0.[ب&c\%S PB(zF6͈LO3J':8r\x }-ﺥI@}/_6KlՆUiQB]+ő#)75MOtauKˆi@}_ϼK&,Y8 J?ׯ*d*y̏dwwpƭYϯ"xOl\e"Sh%iݙZ-f-Z-6=F_u%Ų,v4,7]:¯n5 OpiH ?4$>X Ru$S>BpLzxMuJ^&k"l02S,L5igeJh. e4M"wAJzhB=!_^J$dp ;MU}U݋!;/"|< IHY 8t,684T%M :ȴkզ_${Eb0y F_sI-LTCH!}ZY:N%AĢٌP)l9:-0|O*ZW42-ONRuA| % ]UV2bc|e2paNrlcbcA®)SqM#;$4 XVGf-wX \O2 ( MhG^0ͱҤԤ3t0U:LVODU:XgQuUHISMK,O~c™UmUW]}:kftVwN,Lu!}*]U^ڧrw&}>6~[[1-Mg-< 裏;M'4Ztڳ*Xr˞*B)`t2`"C#2)jVh~hu$6Ô|Yy^Suz8l sP ]j"rl%y˵q2erw;N۽vP2*02J"FL"&yD9ҵT@9׽Ukکw;B!ù3g|= 1 0 o`_tEwtLlCu .`֑=Yo+gyEޟ'#';[b7 d٪eGi#)#c?꼰O'X|ISЇ 76q֍ϯS|nyn|5LBhR~ >>8-MzKB`(96sYb^;W ,>46r*ro)eֈS KEXxY.h*= T.5ܺQ2w+V-fG<38V2l[&..2hkR R9`tgS?.:=9ږ\+Ѝ+׿ݷ6u[LN4v)oWiΨ| ,Q]181T(KS߇*S4]ި@ ,sj9-Mt(;ZKՕaJ<ȍĜcfppԈ͵Giv>H-|b tfCA7a~R >2=9Tڸ='%>w v>(dKh<#!ޖz#ISHft ]G䪔c.nGau vUՒU WŔ3OU@B@,:EFrae GvN0(+U҈1u\C.JjQv϶Nj u=J5q.~ټrcfqombźi왼v{Iˬ[Χv9#tcᤁs ׾Z5/)uzê̂|'t]?>s O[r|_Hս#D"Ax HXihD-wZK4qlZkrȄWf7>.d<ѶФc_u(&O BX!?16,p0ϮJ.lӴ:[-jƳ 5/t] Fe*1f(1T!`%NE^)x"c02,^ ];ﺒE)}^8@ +b_^ |9>ð/]STt>82vuqF&Ul7 z͈- Tkb ӏNX*:b \_P0Eٮ2͏(^gհ)IwG}ețQa, ;CA|;/k$ٔ!N4dݺ"3IRN^RNN>[CeJo{0rEɗ|+S(+e=&!Y*o7H.ؼ!0 Ѕ:FBS $TQAxQK UGU FYT$.fp|u~TՋM쪚FJ^wl8_2 75htduI_()t4m7[UL8kM O47juq=(٪MOC)}e].`:nB\'2ɐ~X|4F0v [Ty-sxT]KM]_R*D9Pᗾ|89_-T[BHrŀZS"=!lw(W'|ZD1 p)Uӏ?:^x =Q??>[sh~Q7}cS<_Yn$9mU=o0}pD=TnH9wݥxZbm:W*lN|⛟xΫX6Vn+mnCҊXS%1k0S1q%wNѶҽk!d,\z 4g%xIxB:`Y 5e?+^j-[Oth"PZF*RǣUZai"7fuvjQ|aJOIk.Հ<7`jd]-:M :GdEɗm~wߍk,z:-cHѲФceGѥ&9cS> Ic$-Z:Z㹀v\2ȭ64sAH<*RʈE]h^~؊_ǠbZHv45(D3 XlW ]PN,_d Ã^9ZVfXAA#)T2kl IDAT/xy4&t*M\l78|Lѿ0"g번|%&VF0st[ B: hQp%?kܨ; ]w6T%YouPJ\uE@csNdzJjx乗Gi2AZl"4,62*F" >6&ħ ɏCpR<UTT_jf8YfT"]'2>MXf΢p(69bE4jؐlC-jBtRcAͷT$tlG4l2uDY+#1@=Rnk?߾okΙN;ܫ^z}ނy1N#`lx,/7Z}lܺsh 2{{KttH2<vLey.i٬3S[2nIg˩oRBw#va$LII8Jhv%cS>Fԯdmp չ/4_#zB("*t` P ߾rIȤ_碿Iȁ#.z=2Uc"ኸƋ;m& Ŋ_(j̜hsls]BPu%H ЀC[>1JJ1"J@^W?8 ^C0;'JGf8 5iI'@#%iJk4\rZ PQJf,!+g`g+cQY yģ!0#Rq:|& @b}DѝC ^ȕ|~Ә8ny{J?ndwz Kz4|O*pRX3Ih{~0ͫkTzCsj\_ݼL#9hAdt MX Ty,UKfTI(Zl p]Ƌv] I"DmG51Oc CptbDHS[lXS#EMA R{;ٹu V*\ Drγ/oJXت_Ϯ'9B=E:&{T=D*2v0GEX:2J=+TQCnP"XPVEИGs8i m,) w~ UϣXD/*Zj\LCQث{4$U\{Z;&c5:;]Arɹx7!ږǶhOK7DQ;9gW?ow'F&?|B7toth vzޭ;N(X|qꏾGoo/rVU.bwū͞%=aӮ lR' pƭ;__M4ǟ朗)N{{\/DEZ i"%&}|v+>k=ytͺ`!{d :VZZxT]io65@S xe k#HtfӼ6Oց3'ʡG[U'Up˒5K-"I< rNT^#,055HvFųGkVMKNXP՞="^kWI:.S|H JG'}ZE&Y2qE Ptffu-싨RsȥP] 0]'Y,n\чZhGbQeQD!D8Tx_]WYO6J\Vq^j(W'yt"FҰL-,TALhFTJUT}ԫSݚ@U rP7SvP>ژNv쯲fu)NIwY8J"kaH`jTw-w]jrce84eʂdD_!e1-POAM(!B֕5P*̇~K+n)\YXNBYMmIπ5mq놢S k_)CUL,POvqMeٶ.ԞA-K~rĥͨ3kͶ-R1|)'3Z^U=?TU8d 㸽mi?v?H[?閆Jsn/,O'~oOyv@Bڜѹ>Yn6e #--œ^g>XґG_ʗ!i3MB[GL'Sk[ ݻRmܺq|z~ F_.Sݽ8PB XD[nH-t}24,kG/A>4*&r]gft@ȂNC %=&],\LJ;uK+J_cs͍#ܪ@Hq {,2i:XRDno 6)Ѿ*:WEmZ@8)݂aG^""}bQkms{ N\B(ށ WZd*mYXDuP3-vK%X2dwKJYANBB@_ÿQ432ThH$EVCzK2&X:/VnSlнrDQzy0GHYpbfĦ23'.tKeɑK盡;v`"jjs$O\WS^tudHXy\BocWZDmR IРbk9'sڅ||-%`C8r El.JTE ,j骻kXVVM ʹlK15\<`oK,*0 M9t  >M Y LQd=kpSqDSʊ (Ml`ڣJwZ5hnͱTp\HF,5vd={ḩI?PL}\:Q3иOhL[D#w;tEXDiOIu MNtQyWux,LG]ޘ>M zͮ LXfor0-r^6i\ueq6+œ| ʞ? phkG+wn߼z{ZD#-:0;КP>nStQc~R[M'ćZ+bK3i4h1{~d+%- OGj2WC{uJ%$α~k8U|#_ #bՄ Fgk=XTPB4 M<'ChEF{JO,_sFʺ@7HwU |ˬ?}=T a@y~kXe~Cbĩ$SkKY+tp}6= MƖUT^9ݽU3<&Z`Ck@t?0sctJ'4UƓ2%[Qզ/wdubeQԭ=_e ǔQEbΠU{ lh4٧>J|/>[('^!o~Cءc|/~Y~m_œ @^ً xק v8?~y9ozכOm~[g3u]|_\t w{W}઱=m}JWJoW]J>Rӵ7 .*Rp os)~w޿ Jh~| z~_sLAv(~Z[XL{%G>U0{l-I+/sҡZ.vjςN)8#"Xhﰋ/%]-@K4L T:e8iƣ!veJbs|uE١Na[]j?HYt.xYigwʢ2*5M0ly{ViE&r>~N!FGI#S?"M (e:ڃcNF6YjPh\S8JNQw©w]adB# ʒccK6ͶmLkTglXpVCij4xec<`~u"aF{*0۠38'z/ MSg sEŗ/|<\oOOBfSLfd ERkSRDLxypEGdRd,`e0Tg;v]h=ABLp ,ɉ<~R]Ѻ*e(=<5-9,19cgzѣD$BFb˷+Ģ&&r>vq~- Vio6ii0R(٘}4 Q-0: X&F\#"L6MҕH enͿn5ԾmY&z,{D2!|jUוtdܟS>ךn(&v v:@ Y/ɘƊE&G=^08+@`Vi(0)\4 5=-W>uM+N惓~VӠ>JՖ) !ŒROrrlmF< ɼo_" )`ϟ{Ro|lg;|].7&.d!Wp/{eiv #nxw]?{WƖF`q+b|ʠR㉅hUj[CX{ȸ8=!meˀxKOf))e{AwDaپ?*#?zĹO"8|t֍7ϯkd6JvQZ[hkz2>MA!ɑ D,4My襐KLF'J 3<|5Kc,6H4 fPq&S(L|uk d`dkC˪mӓr BTQ W/A-]vȺ1NB&^#S,3ENiQg<㟋&ƚ3ʱFHuT>bY2QpE:yvĵIȋz8uuh׎"^|9T>lwlC+R9`|ʧEg~1TŠ٨#Rr>W3<&_ N Lom=@&W\=\_'hD,a2'y7gt^0&ؾ'|mC.Olpث'"On ]4i 4:Z>K5|ke _͢nCWY9{]vtؒ֬Aߠw܍iq%|@ )4 j j6⮧t(GÎfsH%VŚ`iȴ SIɘcǼv3WZQ8s_Bc:tCm{NdeihB}.0iE^jt9!*Zu/ƲHTۋ} nѐl dUu~7|5 0"zvx9XT(ʒTuX=X 'f|CyC♡&\~iݳLJ]bV͑KT%t VDq>&ehPKFsFgX\tb4P.kN !e/ tJ*][] ЄF|.?Ag~ %ܐG4b f0hFi.NMHQv''\lrv CsGH;TL3dtxcDLiFj5ZiG25 U[bے҈O ‰kO{7/-[TE:S-S 4H%2py9 ~%4xqGq/ק}wDCƖFg揿cw77%I`ԗKbwEfy7_ce۲gl\ ݘ..Y$v+޷5u8&'IO?twgoTӴjT)>ݛ>0v- ,_ 7=?o^y|q `ۏ5=䑱kG~4}ǾXp5M3#(b_|EG#0PHq#k:-w Jϲdرy cg IDATN7/g.6A$_}ew!b'!BWTg_>c">]Pij.+*<DLMB0BҺҢuI/]Z ,S&cӅa_2Nn38p$D+]CE161<)'!A<Ӫx WN@.]ƴO\KJv{ H9xf86(u:,]kZ?wti}yPQVu:Qa,'Z{ٵk1E050`fztNRZY*IM&8M瑀Иs,BۂxP(. u ssdCիeCIMty$A6'd7T&>0trD7R)WWk3O?Zw"6Wy*HYβ1~*E8bL\/=*UtqE]XuqSf38yO v̹_kc嵓E/c!>8pgf%gxɏj$`l4v]}#hIUW 2iﵙr ~B%Y1M&Mr@.P,ub[ J] Y:LOpC*aC yIJ9rݥbsMKҠ"-%f}-;!B˧lH'tjpd*JtXJ5Q)|:eq_pB̼w dx̣)fˢ9)G B!QR(^PXLf}M$ NJ8z-!6شLF&] '.(+^C_d.Z5hD쓳>L;, Z7Fif=UlN<@upaaƧq%:-RM+"f);lޙ`>鱣7DgA*aйP!f}9م1V7=q×9 llQIܰ×Sq%[[lhINu.\^*o;[\Ote/%o|+m}\O$S&fQ;'X-7 >j.σjeX<l=  :*t t323:i-Sj|ɶM6W3Wa}C0io6;W]QGj55#ҙ*S>M1GKR ktIP o}8!Tǻf~i5ǸZq||*t2sΖ{yj\8}}KO't2 Oy%symXuu\cV%(=|8œOֵɠ|m: =~Z+\޼nzBGaƒ9WOǒRv4CQK`IQm#)UY,ڑn2UkN:yYRt2M)%>;,LUqnrlAQ]+tX$jz;Jm ՋSJ@ڿK7_)~(Am"9Ͽ9K3>Im"m;RUGŊ4T(=#hpuI'p6VpPb_}*uȽMѱyVk{/P-Ѓ6y قC]VrTZT6`&XJs]ɅrU81CǞӴ|7O1*ٗw,%=]iHGX2Sg >RJ/$ _f>\q@Ry}tT$?\C 8sMT"{y{Ncѐ d>I{}aшHbOoO V s󹹳'oO/|s˼qW]c3s=I8NbqK&msmGd+ϖ/޷+95,i ^rUq 08 V% aEhKT{ݎpH04ꑌ4'UQ +e$`Je>MQaڜ48?ţ*FZsI56%*1qǃID2KzkeT| !::|wl=:,mosEbL.]W͚^IV *LJ{zx YczR7`.8<&-&01МTѦ 5m05R-3LC\A<,?I;D>s9 rkT ִI"n/| yQ-m._w1ӐZݯD3~ WA=ִysqs &n,OzضM' U]`le[5$.5vs$y~zIvN5;C[6|etSWEA:mгgڷܻ쎝yǕ޿\ќ05}I/j׷YenڸK tuX>'p|_* S(xMx/wcM3jc.pC*~^GjN:E2 83Vض+9j!WP ͊VskvWq$^lcce5rx~cEK6= 5m|quvL7J#WhǬB  xiЗKG_Ȼwmvn@yn~!Ĵ~:'sR̜Yh>_>=aސZ:$WX]'d:StRja-7_ x]mO`{ F BED4wYti=1Ȩw^¸˥}!.H.x /}F26-, nNU' 6Y:u'y:6e7B(AjGR|<Иk1tB8F;qtJevX{' [SZLQg߄Â=o{mwI' * {5wL+w3)>҃ÒlB!+3>*4tEٜؾr>aNșHXyvNﻴ'B7,-\\?!ekm"pT*WU)]mGz[N]'u><:/T5'4C*5}B䝀W/T)Bu-r񸏽D>{Q\P\^bj+V q2ϝo]'sNjo{io2Ͼ ᐁj#Q#Sw o/.*~ZW`[@ 4 C @iQʒxDmSg|xZio1ZLI .9lۨܿ l!tvə!=}!| ,=_`5_ֵ-A,\_|$₈^J/[B$=&W ޫE ku 7p+{Opxxx*Jfxm[Ѱ$O=u ;aYW ԱZ`I]_|ZF$RCi !Ų$0H5riO$E6$eGҖ2d}r!A0\!WnA!^VK#:M|^{$|^]`%wR߶*/٫XRBǃQ*ϕrho6޵t$ܮ+u>`9|@$}qĥ` =^t]#ٺ! mF@t}u"h^.K?*VqEZ F&?wdzG2 t"V rdN>q,bz"} HKXX7C0 05ZYZY T_LΔK"o?0N<<ʺ&C)EEAgޫq%Xz7{_ +ˆDN]Gz1x,6ŔU9ʟjR]7877Du^/d@R*1{"k\̚_ז \ЪM&=6SY&>s>&=|/PRntb li*{ BtxZDŽi W!U rE:oDI&unYnR,Wb9 _4'̻ "\y%s 9 FzM@8"̸k36 ,cJ/J-[uiԪ@m6p7W:7ۀDV !RPl3;ii C; =I׮0uB<_%D{mw>/&zw.Z<ɕQOR-\j rŀQ.8r*ZYo{4UTIoqdqJ L+R *"UšlQՊepH0i":Uh D3w/r@mtkRYuQJ\ѭ/w"%tXԂ+.O?w+ʲYu+ڕ"=-2TH}Bw,S9zARL+th>v䱯!p>r=:!u,,K`!/,A{I4Wr`{i"aGb\>I{<aqa;/'Fm!AMQUlA UUUj(IL@Ĺ쁬9sTA]H~0f=QY:/~dW# ַEJOloH=ȽR}ؖ %evPK^nٶQ"5hILyJhKdG^$xXM4~ ylE*ܧR;EC&ͨ:8T%&^g~&G>"Q/ZXX!G+jV 0k#,A-q|!# 9$d :-> ݨ.l] uB,w B&g9ߕTR 8T՝jvY_q7?VϛZUeT#wN8Wswu;yt@@ {::r=uqH=RRdxyš=P;"ǝ$ BT5CTBi}nCőuŨ%_TTq6L)}Dk5{C!S ;2f4q04IW czk.PJu2!Z&kz<_[Bwy7GB\KDei7$} ,?yr]-a!g&# ۪4`>/I'%peuG)SaA| <*UՑ}-;QG"t75`njhA|95Pmú C4öw, y OLCuj^Aeձ~pGHT3C.;t`>/IW<'uK@ej%[z@g4 *-%}%2aCA])U)M=-7&ik^Wrt3P5#m9fۛ/7F: >uGJt9ŊJ/UKZ6XwU6ު.Ǘ4{&b1;CF{p ˧n jm m8:K K,|VOybkČO$,DT%m;#E%训&vtND;@Z/U %ܷ0{Y :\RqhT7XVeG/R͡;~HH0>a`o%&p^]޸(%\hN44 LJ+XFjHm._:]%!|eTI̕A*Dőw5gG<INmbxmVP9v:X߫rmAkJlj9Rw2|q1~*л΢K&:+4; IOU. hI;/WnW7+\Ao XF&sÞ/ZI#T,8j^baƧ}ʖ{lRMR(TVxN{ڤwEOa*߫zLeWT ೙/ x2w})3s|xۙY8\;wƍ7ojvdtnt BsKK% 4h8^Q+s9tbYر^G dScWqA1yI3J qmMb9TwM!*"e`°úvKJ%-cGNy\0p5miԗh<]ۚX3 r4#y?;N4e߲ޢ\v{ 3x@?EN/pgTU42HU5 4bYk'5Ɖsʾ{#b`EY6&F\^0{A3 ؼ*Vh.y1^}F\fP9;ri j09:4ȭ33yCZG y<1ͪ9a ~M7+ xNI-:\yݛCM@ruܲWx IDAT4CX ݽt|wcFsBkmckZK; ɯ}w{ tmUxt(̵J]Z Ha@LܞU4z 1[oM0 ONU $v+!'HFsѱ >= {j?d)b w({΃- tB57ʝi(Hg6{@oBb۝2nWIڃgɝ 6![lݠV!BۙyRyuBx`fKFK,CG2W?$0n*cQU5 > 9 ڬG8zGck$REҷS{߿ ~V Ke@fk[@ +3n%hX Ѽ۾m R]Ol za 0ط-ĺsj+y8DUG `BgR xGroZ #Q@/%e^@BSU=))#\0W*cbƣCcZ`>܉*j?mKY&u>M pȄGBPT ֯XVZdFLiu'Emo?_s_îJ(_4? V/ACck6C,@J;bl&I2_.rt` Yuδ7[ۓMf¶^ArC\Ţ$R窣G|9Y(_G Z!`XBG{"V߰D]9倒+ TO/K%ՎuM]~%V̚ŢUI, ѰPQCy9CJNҒRV")*Z,O9[l"!AYڷP  \}61pCdJ2#KfsJUBe *M:% ; I55DE{aƭ +U{!hN?\u Tq봤LMU(KfcZWK~G^cTcrQ`H'@,L8txS)@:ݶ"m:Y$.:T]u|$tҽa@OE2a+T<_TTV75d0r~:}YCtŢfwEzcI W #>Ŋ\6ASLW#^I6Fb:7(0"hk1cO*a]i󡹌gxOEGAkʬSKgN\phI\Z0l1iMBQ25-P*nD-ҭ(مWUg.d+Y$"X(L&QT30[ywI[Kz (I 2CƦ}JUyê[ 0VGp/0 `{f0}?af03oV fg3QV!Tf0K .~4>ۀ=`لC(3|x'p_f0O fFc@pFB_rLI~xTܸg60=z ZWem;(@eyӛDzo!/,~jgv%<' UV&U@2ZU"&M9ЫSOWiFU[$˒tIXxEuՊ0fl#$Y0RcKqb]}PMܓ,=v\Y_!jURJZ*^'-&׵0P2:W=mUM]qOuOi#,U'DRWhfeWk0T5GȞ,CnrnU;GZ<؍8>Sn@>-&VB99ujS-̬(tjs⼣eyښmbmk(1p$Lڹ~KУ"wl/ +Ǻ_rdoXVطh>Ct[W?\i-42;ӱU3XaSJYH\Qy9('e=ki™/_7^,C:[YEݐY~}a`ۜ.fA,,p*RC3X.C4:$:ۺ^i^&f}Rqlep ss\25lKun"-- ӅB@߆ k`<S{VvtI4bВdsrMP D¢-K3%$ɸKei[Pǝ\nlKhEG1&.[^ #C5l.z]n<<8c خ 'L)G_Zfہ4peu'OOF?xJSQ+ f^GCN/9jo?%x-ٟ_6~EԠyࡆ׀nYɵ6V:BN\St9ᩧ ve.!~N".Ν Dê0-K;B)\>7`*%];Й*mW `bƂvSd\(I|>!061mm ìst;!Iم@YF {H9U%\!DҖ4F[eNXTW![|Tm>8o9KYH,uMIn8F&=\ӋO YSnrvHуt+Y<{G]V /`! (hnJ3VvJU`*!m+:j6,:[a2볐(kHؠ-%bUB_2UŶ4+]PE-uT ώ-f5-:q̂JJwVHz_0+V\ΧqM :ZL^谡Z$ yePTX8٫u-*UT'*crp`St^~^[A >.?U&? 20`8 ? ,Expov~ozZav,Dm_xQv'l)4:+2 |@O+1噁Ge? >_(b?1?+3җ5QxkuXw5iUr[hiس;/邘,?V!~%d| RR+qaKr_D|>5КRa]$Հ!y>pL뮈JjFTk%e0iM/*"WY:zYM΁\g!Ui@qRjwT_\:=\_&E.%I:0\KE [l0:2xB!ڄ[J} %G: ^!gºgE.T`9ii=(&>t"B2y::ۄʰگTNGxAlMCļB,Uc]fBXwVo›=6DBXU!T%WeF&=GJ+;AJ=a% /XRZ?Zclgb=A0yT!l@腁cd#ݷ`a ʽ\QbB}8L 9tfcEn(%^,j]WQs'됽\\94u8|#/WoYo5>r,賾â\ ɸZ),58sd) ! y 4E=_T7 ,(椁pùhqϸxFÊ0e3Wu[[wf0;̫oQ'|&UTli'32KRf0S '̬@oӷ =i!0K~(ཙoe3o!c!5S`\1?!3" 4"廔yt8Of34>=71~e3jZ6]yxa==} K~!5^WjNk쪵 {g=7dN7W+Lu>;0 ̝к7F,ۛMP4hĨ q+Հ|AjMƵa1<2te.0}JeޣgOfey*bC.cJ81393>,Q fO/д-E0iyZ0`čDvtȖ{# |[޻(с%@Yk5n?z;8}$HyxO_SZk6:`7}6[4'MwX|y X:/\:J kz\1-}T**r%Tѿ%TQ|Q ʳ >ш+i|Vd]ɆN'f)R آ[ɗ[j18j*ݬWænmm&b@w|󔧻9'/:7\LSu?\+%D\hU-*obuZzQ0jE_\%Yb/}¶q}ع9ϥ}B<{R_q뇅 ܷ΃:m\w P*{U@̾r!E!Eo| |qxtЦ{s{ڔ~" С !jc3>ث^ q=WkV\8C^m\=W [0 ,YB-pEm֝[ZD"W sM?Ny >d6 a&ш p(6W\o=Q -5sV[`pU^ 8;{,C#"r d݄\զY&S%ض°ù+sMv^[2ЋBU'XfyfOy|d@xErh@3@D3@73mjԠ8r˚]wNX #Tq-3"%_G"[fgP@^0̼; ?hf0~(Wm/=o @9 Z(=N6~U]u@ڸ7@W:ŏmm4YN^[Zilko4$.Wɛ_gvczWZAeyqT+IK]0>;YjJrrڲކ NQ2B Pxヱ>c[&V6#@(y)RC'5;^-/u%CUw:"a%04J璈5syb)'J9U˖ Nѹǥ(ʭVuG=@l*t&% 9!u:eSb#iZ拾*Z (coYb9)&`:<4V:!I_nhuNӑIDAT{ CƣB[Ok#rh:*=_ wؙWPy.)x )]}W+>&qP'ތAEVڋ@uwncUލu"z8ĬU+1 bh(zjV`wCꊘ8Ig*gTTHHh@Vչ-yΡi\[Dp=0yivK(3@J–g׈\AmB(zŲdf)@?P瘭[Ω]<<1 e V?r+"y-QJPtn`fNgاom|T;o}40hy>3 w;8Ţ; "z^AiN(j:-L x0A~ uOk(.V~8_~\4=`fAwQ6iGoj`nXw@j Ð|SLbJAKLXDnX,=5Eb}8$8~9irԜrQ ؽ&jҳ-D{Zӌ C(CVm}gݛmXldshghcSGTnCqңpfEǪJ #@qƫN@01spGZho68}aj6 9%gc֔A{ԁdBG"Q@o!.)(@Ttk٤Z1%NFdTѣ\єP5Cl ڻ{Xj깛' $K[[8B!$ Yxa2O^A'q`G"YHE6ldO5o7-U QRUzCog)W4IO`aZÇ}ݎQoKl\oUP~<ʂF*Փ2vBZ%&E:Z3ֶ"\(2.°J(C.1班hv(ڔhw:}Cԝ^f'''}"bsWW"6m%6({j>UQɕ[ܼ֕@Ṝ&5t&]a= }@mjd(W-~:kst7B|zz+FݓDFyb>3%OL l3DD2tv?|0Ѭ}Ni+4Dk&Ϡf ڈmi1']ḡy}meop+sT aa\׸!xe?ߢ\… oO'?$'{N_ogWd]޿#㒻V&MӱA0Ȍ\Z $֮RN24$g8R6yμel~p Q>`qFéE Ga;c.>87coA? MݭnԢ'M*r\:c Os~x㨵LB,'`l$~i) :6Fc mvɂ@ uArSnp~CTZBI ȏapv3 Lr., o[?Apw;B+!8C$W#o*qJ\" /#nCu pl@)G2Cw$V֫jt]nbLŞwR\1t*w߰1[pS~$p.iн]vo%/(VJCզ<䢎tIM|4@* t ai#tjtv{ĝkIB>{LY"՛!6kC=!hx:=ڎocoǘ*M6Q0VDۨ`,Nh HRVG2xqrb7k\סs;1?΁0CՊq"F Sx|V2)wL/-v+ L!nIr9/ z4b36q{etPz=~iD^̀L $ū> i\\8OE զč;x1J'_Z T#Dԓ%5Ŝmn =d(n\ypj?F_2^ZPoڷLf}GK[L#VxwHğuoӕa͖)AJnO,Ⱥh=N WqFf^F 0 ^e S2x2a£dV-{njl @5qpA:Ű*LSկ΃hZ @@^Xpsg)4l㭯9x nҥI&5x Qƒ BZ 3u6JKC5ݾB#lA8'ZRyW ( mͪkϚK~g@&pc-"*gPub D .`orN\ZM$jӠƫQLMA%tθPpB!u bvIVB ' Cq!7EC>#cȸ.>D"UXی0Y B9ߨxYi™-)96 1+f&a3p(ӧڤ#` P58> ]# At O;^F3S\Ka Gf >+$ug5wĿj]I;wn8:qW7V,w yݖ(֊NxEO aSk*܍t$?#6#n "mE 9|V`~JëOnD'+?zb{ %A`YluڮP'uxYbUhwI^)`8mV7id[du1oaf*^uq$hut. 61}j-nOAV :ti @5qڂx:z lY,/wmAG_2oj쟞FEMSJZ7: 6gxaBv$bN B`DQ {7R*|,('[e&w"LdrH7N\< s/ 7|fdaIDݹ4lh'?i"rx\rgT7sJ9/="ug1"!<Ҏco%v\p4-]c(zH_@6MR^7PĎ輕LsgJSz_黼0`6EN)Yo'9;,mFa] >03+H~ i#},èO[>/M=Ifg :[u|}n&לMqi,3!m`f,7=nphnõ9nM./ّ0,G&K࡛虖nENY p(I[FGbi5why %O@*g *Z]j S`\ @++!>AZMTQ$[/f-r3qMfG֒]aKsrƓunWmFIZ;J#՛! Y)%L)r&UID Ggtb @5q  ;^kbz%p\ KKM]gয়ܿ;28vO"R6Cv=&~xNޣɠ:fA _vEj 5%O HK?O?a †+(cHx"d(0C n<Q=Õ!.Tmw6 w!;ZjC# cD) -I07/pvƈz{6l ,Hd:>tٓ&8'a4Ȝ ~< @p,AMs-G@'.tQ`zB{k֗R42dFx1`VMDOڝ}2Q ~N,86fWkJX&W@\? 78g5/@9  ri=0P":N?ǧWi#nGp,!~e'pڤMd 7=XR0xWÂς m0:;ۋXlS>muf Ku^p#^c1ue){3Inm1ugHgx2 Y)Og=--]$>OȦ96>7ٮ&  lu~>WS,M:'eĵ|Y)lY$6hުN,S~i 4vL/nXJH;9r{{FԶ0VG@ff[&֓p?$@u9 YF՛ $e(c&wB[d%lɣ4v](~/eqBIL1u=x}e[icµBH9]R&͎&޳gCnUa8V4/`~JC!+v| _NC3R+xjy[)'x8'z OI: vI9\lP6" ܞ0ױ8a'{v(k[tN0tڬ͖uh6*C Ta?mrOiȸliYۊQo*& 9n'vWHo5|=8a ۝;lu -|d03Iqqk\:J0OE?>ʊbQT}?Dp&rئ@-(7P$?ڌ=A@QpN#ЁœϘ|0l7|޻}lsP ݇Ttl^c;Y#!U0 m :9 UY!l *M@|Pc it=GCB1'!05cpSC&O/mLj!bi&{H^\ ]b ..!4\฾ҋ ??EO eRRdQcH'QDmu KsT1݉|MWKάyar:]Jp8^{}!PQ6NpLE y/Miq蓗$+hh: 4}}SAɲ Js@Ϸ!qbtX D6+8سHqIP7-!쎟?eRqi9ʝ] g5 Ph8 қe~@4VfKs|/hu_Xb,tLp5_lKs\_glK[0U#"8)14RA<.NXZ A>KAȴ -x)IENDB`atomes_1.3.1/data/pixmaps/convert.png0000664000175000017500000000116315212624223017266 0ustar lerouxlerouxPNG  IHDR;֕JbKGD pHYs  tIME  22VpIDAT(ύ;hSay$b"]ivRoi",(١.,B3(x:XuZ mǍކtr眏b*D/h}d rx8tHG4yn*t`TV&;2NT<Lee5 ԁ[BO.:f%T"0 C6l*k]ރ*MW˞HB)SYǶuD۰㑳'wZxT!ٙ$s/)2&|wD b)nVV|)M` i`X_}YO3; ZT+=3ndRef/ξn,.k1~=od?w׈7W穒 1BR5~ w`t`db87 𐔅3]{LJㄾPL؝J]ߋ<ίj5hBefu׽h„ ÷:IENDB`atomes_1.3.1/data/pixmaps/bravais/0000775000175000017500000000000015212624223016526 5ustar lerouxlerouxatomes_1.3.1/data/pixmaps/bravais/Tetragonal-P.png0000664000175000017500000000515115212624223021533 0ustar lerouxlerouxPNG  IHDRQfbKGD̿ pHYs  tIME  ,6 IDATx}pT]B)bA%mOP(0tP-mEB @!%-b(eJIYw3Ny={s{AAAAAAAAh8.'8~C; yFP(L7=IjQ 틐 > 7ǵx?_euC">{8dXam!H [ΤKVтc+H3E%n~,d_N!-p-,9Ic 7B`0W ]$O +5ƴ>`;GwU,铩7WYbf,v0Fb2n RGfUk9:cD o>p[88:+"ʪmB<.Iepk ~gWًl)N~e8,t8 CU1jY.c\"I%?[/sbH],+;ɲdXX"URH+ZOgos﹓5M.7&=d(Aݖ3-sP+|̵$FƜՃNFҋ1+'݋W:d #utܸ2>zh w $֤sƜ 7,.l:Շ28!0."֧ CTb;  Ks9^J%1RDsڛkc{4! SfMɰw`x"mefA/@1ǘr8{_7{NJ`z#8L{&G9[)a.r  srLM37ò`LZLC7FL1ò*Wr_e G*ijJyͰZ$1i~K&_,G.m!x"pX9^EZT!hIMyJBncPrgk cFe1-v˂tL!=| fXfG"sH@2q( ߣ\ceA?YGo uQ'#B'FaY*`Q+P)YJ:jVr}NEq ]Wun\)E1(')W7m"ޥ(fbY>wa$:5E 3a]d. ,K Qӱ|fcY rnmkVJG3, 'DQi欤MYLNJUxcL$ CPKI^AjXBC@;ZH/8wH;,e#d 6ѐ T݃f-buw~.ǢQs")-YV"","ܚjژEzs>tfͥ6p}E)?.Hc.rN& C$0?pbyU`F<2/d[AMYϧ?zOչ9\AAAAAAAAAAAAAAAAAAAAAAAAF14~O ,5FXE&D_@cԈ1Z \ ̮,+"Lq]~pO/䩕Mp_JM9_cb[&1k(K|"\ y h/1p=y%!C[nixd ;jw+];P pxw8 xR7>fU#kFvvi@}`)jVx@,,'tpg^ t1.y~ޮGC6qXT=̺_<)rq ԓ[=>,8\x t go7nMwmץI}ρϹܫ@wx8HjQE1mZ-_#e**~8Hj.>-*3䶯@w1KY \Ńd\{{>ueɨ`i9 g _l&u4"vM)؜n@o֬,z,`Mz>*qJ{SLطg"cӝt2J|2tz}|rEUxd I-lz0 8=92`7`1O}( A+||gmjыl.2(6Z`כTSxE?} l=!cX*oӂU.TE7㨬Ӊ{E/">N$4N>HT4nܸQǎ߲e˚˗'w5c!ᜯ[ sP\Vt1l"^έH7G,Dgf>(:<NrP;1GGA?B7?)]$t/Qv֥:6|/҆8֠cWQER{cI=XNQ+F>"|  EE1zFmA ʗ&MWIAjIwI@1ɮ~A6|,sL <10W$"Г#л,=Y?[z t?8ZSZt8TC'7.`ͨ6S$C :DyHvG䦸Kd@7NwA "]" "ЍMwGQX]gX?*@7CFMz$sptzg` ED1ʦ9tt{d\D$3j"Ѝ蟋$D%У$5j "Ѝ$Qn@76njn@72D <Am~*DN@7J3+hԢ^?ԶlT1R>"<sQ ӨmNΒ<8e%S{Y'`.j#ԁ>}|5j!Bbg$eE^{x rm@)jzq8DzE#л~؅߁]n?E푾s\c,F V"e;1|t艶m^F3*/;TR?/R]ڊ7v;JK/OA3w,+<*R]xRkuq vTj{w= =1¼px(8˲MШ틡bc\ T#:p^*݈mD7;|Y/ft p!`={ܖr&rv*Nk*J@]17$Kʬ>}4nx[AA&Cz1N,--L6Y:(f%iK/٬'= u@7}~_g=fTtzk֥eY%?3t֭eYXծBXAlY@c2i_Y?WVloc{R. tݰ܉uވD"&Kf͚u0n͚5S#kiف@ w11!8|q/"gRguvL;]#yiAע}OΝ{Gg.&Oo0#E.g[ ^b #<}lsVhL],])^$=RޱiӦTlQRuF&8":C}^~n@O  (,k&Pq\CFf㹉2nԽJ s!6$C2qڧxi&=q޽yqB\6K@lVv8x J|x{ߢ[x8]ٞs  N(/ΏzbZu=&E'meݹhѢzq|ELqul!zŨ:"C=vZl߾}tb=ZuxU/tT:)CPY!RܫG}ttFFƏ㜚_ZEhEy8nJ*f"r$gMsp'$^JsKz}. ak8ȵp Teb ; x  0FhYNY-~!rss׆B-˺g U/ǯ*"=zW j'Us N@_ w2n/>/FC8GAb& I=j:躅\HRMe:Z=9E;bԪ%(X53o޼.Up }5}p3*MTSy,uϦ 6![eLh#>&Lս= u >Tnwl*~"~`%Zdj+QQ6 ύԭ=QtuDHX:%6fje ,A~߱y?ٔ#>zu\G>l^9Hh>"\VQkgc8Ӂs8O ֣2J8q.:W^q%M!.\Tt;BZ']mF?:@^vU÷+DMlnn1x. P@;T B7T,Wn?3Y_ɞ7㇎vO'6,CQQf81 BM=+jۗ|{cA{gZƲlOA%''gjN˲yN\֮/du"`iOVV3CP*.wozUqNTc|)c3ҋA-VkX ;PUkqe!PRR2 (vnU )G3{ZH'dc4œ9sf;ڠzXdpAJRsZ J#ç zdH;4wN8`x1MxNӘE=TE| _]4aJ-Ps'+8:Dݼˆr BZqT\T6&iun@%&ҕc u QLBr-s?1aB? UhH$4}9]HHgC,wOo`>ZL$3s#w(=٧{{ߋQz P}?s41#(&8l,CUJ\_QT                         f?ʠ_kΔIENDB`atomes_1.3.1/data/pixmaps/bravais/Triclinic.png0000664000175000017500000001267115212624223021163 0ustar lerouxlerouxPNG  IHDRXbKGD pHYs  tIME  +1XLyFIDATxyxUN*bDYTP:F\P\sT* 2.#(bdM2 Iw?I҉}ZKXToJB@. #`oAw} h_sE Hyo%@876#S_o9Α   )a$K.ynV7X]$a ױof >"ȜH$b C[@xL+5a-gHdeYיAC(ݭZgQdpa+ ðPsG1`$&wP= 8$)--=YBr@vlp? tBaK?qNybYVr{D 8ZHnHoB;Ld&7a2|8F;ssst55Jo~Q#&fnȆ%C<\IFܿ/}cp4ҷLAނ aҶr&f FdjHd^ٙoLǖu f`Ot;+ @ARA xh/dSeR` p/j|$tԊ[QCcG_n0 %̥\W)t;`!" 𺭨I[s;_285t;ez@)p4B[ 51U_Q]ː.ܟ%`ѿtD iB_7aMX1h/ ]@$] ʢn&fVJI;y@wYG'ͫ@&Tsq{N ,+Qd85iAa|5X~dqʭfRqx^ P ϴ0zҎ9o89$|'c z]覻J -Nm$R`>\D^b1|z98A?P[0ģ4G]Xau%_?&V }BSLW q$  %@ >`eV칷.͠y!_H )q|_&5}>U=4!-xQwڻx~ɩAckP J sޭFmVי|4tU^1U$TV&x } -PUۗ`tՏRoԭa5\8cx`X KϤi+hqv@g5|M;`W/_رcGVZץXop*I{[ً{W_wJ =b J-RR҆.lTFFF㧟~zR,sVs-&mswYw#҆fH$ZTTvz[qⳁd^gZ%W`90RS c`jIn؎JE>.ǺW˓p6c~c{M7+SZ" >5d<]ϠWE .Q5= Ĩ6kk+e"o Ae-\à 3ă*&;XTѧ$tCg*GAz%JK[b~*d C $Y"- 7ڤ@Rc?x֨lɺA?A*ĻN]b@Ġޠ@ĠA盓Ż"z7PD ( [ zJ zU~t*]"] .QtAM bSoW@݂$+T z ?Hp+41nߜʀ"oUL zLT15@D Ne ? D tt1"SEQGwAE hT%w1oгDH"] @?v$13,!qebj" 9º z *WA:B^*c\"] zU{AOA ZY)=1IE0w>0$_QudE"-HsT zJ z+t ^AT>\,b߾҂AA6k9(Q0+L'c#9.J8[1n˜K%db10261 ܜnݭ7l."QVp7i̧18/N|실IO$kQ3"8Dg'ƴ@ jP7ԟtAm5, eAl'*>`jZuT'vxiKv ĠW[o  Al Pg8Zqs |[PE4DZzR߀3jtM$QF[,˚poB[}_P"tdo큳0XA  D{6K Rw/?b˲v&;;{+0U_ >$K %ZM|mm~ &Pa ={6mڸ;Ӄ9޼a~vyj$p^md*&1+G [n;t"8ǿk;RW8i?+S}t>¬}AI[_`lmZt0L{G [n(γcV\=v9H@orrr腚TfannnQ|Ei_ }P0[usC"ȲH$RhѢNq_`*&&'W9El;Kdŏtxx[-HZϠۉbSp4UK*Z23 hͶ׶BCL>Lݬ.Oqӯ_PG(**j[I 5gLâp5GЏq촽5 ҝQ t.Aͮo Aƴ" X,6ג!,YN(`:*lЫI&͆a\_XXز {$SH_2!q\={Y5hlƍ 3V'/;HzEe6*2NӦM~F6k#{Ћ@3`pZ!E(]ҀlϺ@3fb'++!˲Fhmi˱5E%&$5y=0˯xaa 0Fy~SU4 aQۣLb* MTAH: Aڍ,쭻 GP5'ߠ9XVb>5933t7teYa,o2 1n'y{K `ACT*|Amn٬V$XLx ^^Ԟdq"+AD"b s~N q+ $Z)鑗TK8vIa\" z> l5ك,w / OFy_~=-I@,Mv%em.ZpB0)F誓c֪W߭ȋޝg yb^>]'7h]:b]liCL*f(gf{i#,u7{=E .QQ_i~l*16NeB `CX\ʣZ ;F">5LE ޥU^>BM}PDzY$gg  ldxb7x0U(n$U5g8xUI0F~e&P-tnjr9jXz@srr7 ༅  ==mSP%7y2T!3m('j70x\w^d%&WS׎ehm3݁ˀ`Ijz͋LU1g * 3jFl F1Qd>PC\mbp+bRXeNF߹ 94%*(-H]y5 8U^fnc"a<}UjN]7&?rB,Ţ?zYڇXa2s=MXAGPZP_kAQ+a.vSp #CPN;b@D= U矤Ai}40 Ga2CFQ,.=xPIz zDf㈲< l, 4wt?@TP)*GM=a4̼ւ-D  1*ݻnגr4hQl1c4u?KE ǺAbp1&%8rϨ541AH j3BVUV3g;jT?x /P6w1 !b9^~eQ_@Pq1ʘI+YS3ykD#IqZJAr.D+: ~騑xHf:S4`q(jk:ß*: g|ޗK'8*Pa@߄ھz$>uK[!0>B[;F-K* ~E'=PC^"FŖ'$!H9}"d|L>j>Bϑ=(jn ^C/BԨѽck ]/*{t|&[mmA!j}n!蜪 z[&Uꉰ e 0*}xAP3MQ/.AAAAAAAAAAAAAAAAAAAAAAAAAAKJLFIENDB`atomes_1.3.1/data/pixmaps/bravais/Orthorhombic-C.png0000664000175000017500000000766015212624223022064 0ustar lerouxlerouxPNG  IHDRQfbKGD̿ pHYs  tIME  -K AIDATxyxUT6e_@dV(<.e4Ӣqa O;hOqyڴ>}>J'.Q@}V/-!oMrB-R?uNկ|ߩs`0 `0 `0 `0 `0 `0 `8kF8\]s㹗+Ee2$DGQ'*%,x7]㎐SND/ XAb"NurYk%,r!l j )ͮ6.⩠$ɢG!3 A9ʹڛl# He)~d3+AbRn?Ռg;߰`id (̣3DqP è@"Dk&O6W zWx%'ma])L]Q^ [*l=t-g)BԺB\$*9IJu (h{v-l(ed4ܓ}<.qP{W4|&a:V'8$>Ϡ c𳪅ydQS؆rrUDew]A` Jr P*Ȥ{;]STX5 #DkQHECC T,mIm }8ɶ|T۰ SAOćREpe ز-.|\|./ 2eq@ yTTE>Fz;\ *l`+)\rou)Ok^x|"ur;gϒA*ZU!J^Ȋ0!A(aJ85>jcaea6(8cHg+\tu>OS/ b7|j?9 ?sy9\29ҚRUT_~A]A.V @뚉*6XETyeAbBU)e/3Z0Zf |K! YÊӪt8A`:[1&U=cHz~ A 65xN+萏q#8$,tD`YDcDeYQDZ&>eAq (' , rH!ޜ`_^s?+Gv@vETEW.Ȃlk^ՑMuFYyc!9 ϑG19d8þ%CHoz7qOp/:pkmuĺoj|!i_&D氿]rj/ %!diېK.T)l,qӺ g(Hl(>sOT HM-FXƩh\ (&'k/z[/OfccYF b,em! 1e,e>',cY&1Ae_SC F-14aoRGcY´!&5ҁ1Ʋ &1b,I<r1e,r5qFЃ,g!ѷq|A)z:B 97| KcY~XǦQwe%&rC dML$:#}қnI TU62vr/{Eov0q1-ܠ܊5GG[MϨ 25!]g ?c"^Wv jֹc%yK щ\V7EGvxj^w9~Yۚ/a/jA }qm~@i4.V$EǼS&%GqhC{sUd鷟v(w\,IS|[M [;FRx'-n>5RJbmw ]УzaXɔ#NߛLk+Q9UMgt#9:YBr$ERTNݷtOzť'*U=}iw^ 9B9&R$v= )eΕ2EFpPfM~=QcaYAcT9 *M}L͉ 8&-\$>,iy|!*F 5QgZXANt(caV(JM7z-L&%G٨Ivh쿩9a^Cx07c%SŠLT*6+j7y5ܴ.)lS]-L-I)l'Ǭ1hl<0¼Am^I/DEed?jJQODԐHhă([\~M͑ 7>Q}փ\l7n<N:<~F X'=ZM^zڪ).D~OYw?wLŠ  唔N΍/^+y N`LbE&:Mg2KoU?~ nM|m(oXԱɼO^"'"=\rtxevnI}`%QOJJQ|ky-v/n3v<;8IӉ{Pj~WK䔨#r̐urT Z1 =KԮ 5Dr(eFs"N=Njso^>ΐ-%\$c{_3p%8+-.:]miQء:\Xئff$O ir+^4*ȲZ&<5͗4-> YM}*Rfqx|~;Q~MKSԠ3@7:׮dyѲ8Y~RI3(qM+~7'>46faRƷĒh\jqDB2ל&Wtf8r,ɛ2%Z5 ~G?՚1bA FR6[b6['ngrfu? vlChFW{b2~ 2<4_r~R}f:t$*/p|adpF_TT6]?Dzz{[s^Œ/cOe'Φ6F2. r{56d裳mDb`+cX"Hېq+`y6ŋ2b ǘmdpkwޢR=xe|cqSi'XB.4D!YntБu( < f!n/Ѕ2#Z(,F&rRe.H1T WՓ@P?ϱ;4!«C `0 `0 `0 `0 `0 `0x=( IENDB`atomes_1.3.1/data/pixmaps/bravais/Monoclinic-I.png0000664000175000017500000001572215212624223021523 0ustar lerouxlerouxPNG  IHDRXbKGD pHYs  tIME  -8w[_IDATx{SչߕdFDhGR& /x+x FZJ =J/XޣxrDъR&=V L|dIv޿[߷                        9I!-itf=Z NfI_56bia=ꀣi(>>^i2XkCNB:ujY__恵'B_kx_ 03/`mƔ1zج>s[+`Vr@ JcY9w\_^^6?!9im2`PŎTrZJQ`: NMzoK` = t9d@a( oѢEM>]LV?R w.:pHx2}s1(]DY,RS}>ߑ/ުz,'UeS R:< rInޭ8G|M}Sx3Ly"46yWo4X J)ݡCoi /wg$d1pGDhnznW?G^Է6(rELIG<^45r/pf$[2dȚP(t!&hduu0yI Sn/3ZFD xY|˫ǹx>p²#F_@"~8u+|g"_E2'3gm$K)++8 fc򒾋s9!5k0yw4QLY<&m$٦\k S(foCQ֣@JgٮJx|r{ ?QTVXBS~~YY?P"Yfɕ@x,#4x<ϴֿv'I|L_zzTј_Q5jLj[01D YHiiJIu^@=p,o bTL4/gnW$ hoi/[]$DtCO"%-2ؔ'6L/V,K@F=4Y@kO޾}#`o{y֜~l*Gk*zǔ(RL_aԽZ@[Hjܹ+\i|h(A 5V$TDʓ:܌G'E6]'YK*lZbEц Utbɒ%>opRjT!~7r0iS9իw^o͛7qv_ݻ k׮0CyT^g]Z wm/Z /ϤG0J)G/XQQ5&5!Lʖ~#Nׯ ͙3jӦMqvmƌ%Ĵi644뮻~&ns47cGz#MC=4x]ם8v]Y.Isg8`RǩsXD/|7g3LRVV &uA3a>ԋ7gH|O[ ":$-~π<Oy]&Z:T(S>߸SF H֨ ???:jX&g)ښIRn"=0hР5k\PXXXTSS}fqbS1E;?wxv%lXw3\L}\0"6cǎ:P(4ˏlcz]ij+\FًW_}u]~ҥ˯ jʋ0)Bq1LEuuu7j󀹘قc"J ئ>SqfMMͩQl1c瞖L5fJ|~E .OmFy[O3a„uMMMަ.˖d ES.IJہý^rus1`syyyј)0fL@Q˛ k inMLg)_~{1nU^HxzRg/]ӾS2M֔ߖ\$R*thll ЪݕS_L* I ZUH{L_:K1 îSHz8mzn!G_t01r1"tZ[[g[ 3ZеnvU;PH* r8&Cg}j9" }sJeee*Ƹ]rGcۺ})=嬊@`1>6\Z8^i}3&]$Dׇ9 Sfs-eSag'lK$ϔ{ޫm۶-sKJJ6BZ㇘!UH㙮BoJPsDn&0Ooۿ 3sժUo~#gTTSn#+/IEn}R?Ljiw1DŽ&MFΨ$|zaR]^^ʚq5Yz>f*(;v*I)'HyLsؑP(4oٲeyQ܍-TYjaODPY\\嬊@²e¦Dʓ iVa/1XtĔ>iGbFǑU^D ۷o l~R:\Q)u뺗00Ycr`GO:3SQL!"1 YQk=v@.?01G.V]Ӊ1%7?|C"|_D/ }Ze5=H~a0S~Ӆ6D  ><`RjFMMn%o؋18X L$L4hпl:xq 6czjv=p=fIZg]"f!k0nj^x<Qq< S9JsP nf)S0g_T)Wݻ8;SL{nG}Tm6UYY9]kɦ<+20B#Dq]͞㜆Y}]L{3N-v ?3UɊCN ǻh2Z]׽r&ٴJV;Lŋ> k1QfTvOk}:z^Gk}/|f)9@`&/u0HnTVV.?~|J>Çӭ[xkիWs-0rS=<S\N"[Y$m6455,stZ[[@63y\zuСC׎9rUpLϭ0aTy%D3ԭ[lnǹ۔ G+V5V)tJEEŊO,.Sԭ=ebʣrhFD)¤i3UbF\%5B_i=yyy 3V)sB }XLkb@ߏ8wHS~.)-,,졵PJ Z_շfX3yTxԘdz+ص~' 8it]2bSGu{l״ümd%(`}dԜ8qBnM_%;@$ڗHUug8: "bS &{ LN$˹"#Omv`a FTZP]]}8H,u؇^g[xd(C0#:ߟ93ZOEo(!jE2? "C6")]~s 1[f5LII&ufsR m0/! c"y(Zp* L>%@`[Ga2| յ]ؕ6SM|U &"U S35o߾MׯH)? Z]]]`C_%ܠ+&\2̾߂6{u۬'$=?lzb*W 1O?lM(P탙Si UJ]{<`0|ךH{V0'Z+uꪫtل+'aS1LP yE @c;z8SMS(+>x.SD,JOt{ض=,p#t"4-rYDw!IGǁx].֝r#0û:84u0 jcL &!bRKc bkz&(KEH>TRG 89"awN}<34 &?S>7NGu^Ǥ߃/˷5L$+,aS7` *D!IB2؊`-&k9w#Ĥ*%a"V> i&!WY`G=>4(m4.̀6"?ދ)}43OE@6[15 Dyr~ n, -cL iAAAAAAAAAAAAAAAAAAAAAAAAA2T3bVIENDB`atomes_1.3.1/data/pixmaps/bravais/Monoclinic-P.png0000664000175000017500000000714515212624223021532 0ustar lerouxlerouxPNG  IHDRXbKGD pHYs  tIME  -)zϩ IDATxyoϲ ,r(htQ%*D(H$#xU4+ B@RL^"Qa-23ӿO,~ """""""""""""""""""""""""""""""""""""""""""""""KucU )5V1O`<`peB`-80 hbv'lZh|>T<ɢz.0q?ȝ;wnݚ*=^,R-bq?X,Mc]T!ˇҟ &DQ}Z=۵k={[Fk`0q{Q4B|J('-ɄMƉUY>nu];ڂF!yxw p !zaTN3f`E5c뻶"> @p!-x&>6$cjh*VEUZG1"Kv$Y@/J=EmYoGkD{\n st`:M71.\\oާ}ǃ|ee˖XCy8IG@*n݇+YZ>q>[5xϘ11˫%3&!Y^FA5Vy1^e~޲y9RFO1S!ްUÇu!{ $C4UznlIosr&ٶd[%m<<4`>f<zѓy hk0yw4%FSB\&3707'ė9VF.-)m( >V0:.`~iCábGBL2ZdC60ضMntKJ:窍HS8 qkF=jGlh|̹JN@{Vծ T~ sNR puB5 Qe!ق>~$hfjlXfێ9c`#56NWأ2+ !ZxĀ~0[9C稪) HޚI86X++y8LoÄH>f\Yy-`0yѢE7mڔ+NZŘ3*)+:\ugEW^!([ho./nޟr?N2胯\ fjx#mv) 1SiTg)aÆF >ίc.dss%Y0AEI8H**xQ.mkjǜ5{cPр =Gk!f>{ /߷`du!Yk_PQ@DDDQ@DDDQ@DDQ@DDDQ@DDDQ@DDQ@DDDQ@DDDDDQ@DD$.RN;{@"VKbߵJ sy Y>0 ܖP Wao]eWOф7odQ@$S( ٣ŗ Ⱦr( k&@^sGC h1p#k+F%FkGl" N6HR@DDDQ@DDDQ@Daum`.'p]Ju T" ȍ5kԊFf U pyu̜@i$M%㏀@wȒKǹ!yz76CMgvlA>}80-oF޽;5j6qD/ qs; R-b+xx<v2|NNly;'¼hUɲ}ہu@VUp+q5gw,;[nօ An#`8pt`+?$cy|W=Zρ6@p1p H|ܣ '׭[yǹy0LVRRr6y<`an[ձ6[ '_vuwE">iby?t\q>LD2i>Y^^y޿]׽[⯀TeWoa!@.]b`L8R_@ƶSJV\\8_,ugOzSu|ˀ6$m]Yf05LGd; mm<.p8S̙SO%㯀|c.w95,ᾭI&Wh4:c̙MT2 {]@ov0aÆ~<t(//ƌ'd!03"A9Hd뺞kKJJL8Hh폩ql;[ ثSN4 p8|J%X8(71CьĐaNq$=_ m#ltXI cOHHd\8dc-զx)6hߟx:;3q{Q`ol_'\K23(@ǎ+((sXiӦW@}z{w ?=Soi.As|C;< ۷p"R\4BW Oc.mުY"[:PضKܾFO9kطIfq!y`ϟzySʯف߷mv~KSLm,pse[1~V?E=JMw}Sn?~HemѦ'$W!>BV6soV͟?~\=fdݙ<Hp=d0GY|9-dLJi.Dina">Vy< 3Uc1WnTc23q :4+>Vӝ x.iRLwzķ:Ɯh]vIt*Op')mW1_MG-sTDW6ē bj(QsENwϾGGa.}t f( w"\K1'Q\^Pp fp +0P񈈈H?v5 2IENDB`atomes_1.3.1/data/pixmaps/bravais/Cubic-I.png0000664000175000017500000001141015212624223020444 0ustar lerouxlerouxPNG  IHDRQfbKGD̿ pHYs  tIME  .gPIDATxy|Tǿg !$bB5*[EEK)03!@]QVąMEVoQZ5"AQ7HIr RTD([Xٲ̜$3L61|O3w<9Fh4Fh4Fh4Fh4Fh4Fh4Fh4FXDK6 q1RNav0䰓,-%= 7Q΃wK4ksb5Av]Q7qKX g[Y//@$! j (1 mO$)ZX뻃o"J>`v~aZTiQk|ԯ ~eVr {1&@}ӻ`XbD%Q61Y/EdЅ4~R1#z_8~tfy( Jh6-@svs'bls6Y*X"ժE">~`=G6Q~/4@9N9@ǞQ6/ht:?I*a\ZbmZZ6nH@8[a6 yd滪'rU-2? Hh~U-sQ|WӘd`J6CxVlrEϓ;'\RٿT2+(,kVEr½Oݢ=>%lwipjQppWh{VwU,.j`+]e5Rb2'YhΗKZv\^+}7yCfiMcrzJ6sIEyg!БR6WJ2!5f ?$_L _F x0F-ݸ7l0߫&1>ԝ!.&Zt灏&^0pUTfv]5(~ _-5}$=a& ykVJf# س$w!oE(*=2o&;W\sI5r)S ʚ)@%ljsG ?>#[] =KZB B JJG]N<ݶ #/[>+e\$78xØ\C S*ׄ5<6>݊sTjK>rN[SD,1C޸O@yzFAEjTRBa p\DGYDOi?3OChNB̌ ͢.}IE-۵,o:⢝.:Ta,Gz&bLrv9iI㛿kQ\^a|u{K!<=x\f#0O\_l{kTgml^Y@KV֟%ƭs; VB\+;:)? r̗eo(al:V`/:n2hSq;[&8;o~*OkՌx^QP5̹oGF]pw~ܕ@l2S}٫k ɴBV5tK$g'C bP}=^ V䊜Δ9jcqm+56eڱN BsBu-pO!e>'?_Ms>[j|s\ru81=ΰԳ9]y+sR|ץC>8[Okޯ%ⷜHϒİ ίToVeSꃳW 1)|2GȯībJq=Q6tY=^ZuVL&B93lW΅Bn١]''v?u;&Q ivoSb+_BokϋF-3n >^y6;-h'u]`pk N|U):.h9\ԄujK7K78kSm}Yyӯ>}Pٿ>WrX*59L\4AI ց)+1]dJL98*}T v.IY&-U Z|;yhZwqT+ӟChd_YPhjpv;k^&?6?uJ6TpvL)}7U/d1+WVP 5J_81xl%́y/04q(ճgԇ;gOKe>kDn^UYb 9qS*q[s9㲐/k>MBn(g>g0(9kp4aANW'%I־59%Gإ^8cqM>tY~N*mXW,n )j~8ǹL-/ w4Ab?LP͢8aYI l6a2wMag«)} XuV͵g^ <Ls-eKz錇D]4r6ΙRul#r]cK9ޔ-$x^|\v"g)}xEEO`÷t@q1/O&xUuD[j1Wg*-Ho͛\Lf+=  i!tlcGzKezUtA\ybu+5bYwlN1{ 1~V4 zIŅ{yoj! :0L[:3zNQZ">yo:^u273n^ 9[\r˶ZWrt\(2vH /RcaAQJfu +{ˮI e&ꥱ|S|3"Dڝ ",ry2%j"}>@.) /]%F< [HMhǿR=6w (װ5AQ! 1|G mGkf;[8t>^6˵nVQ?hs}h $[h4Fh4Fh4Fh4Fh4Fh4Fh4Fh"x5D]IENDB`atomes_1.3.1/data/pixmaps/bravais/Cubic-F.png0000664000175000017500000001357615212624223020460 0ustar lerouxlerouxPNG  IHDRQfbKGD̿ pHYs  tIME  .'mIDATxi|Uև,5HdUeaT\!.82:/:^Q PgFɸ2y]F5 ( ATB,"BXCNCWWW'!!0KuU/7=SW\rʕ+W\rʕ+W\rʕ+W\rʕ+W\rʕ+W\rʕ+W\rʕ+W\yaV x2=qGD:nѫ2/ gr]Aw6K@/cv5 ?:_4))KӀǸK9zXC(Zf$E t6Hk_c˱eub~m2U?JPhC&^OoIK5Ii]ǀ6PF9e)+̛dEYՇ"h/%,({?JzYܶR8RɢYp4 _=AtD?U E([(Sq+e+v wD, jn\@~Fy CЗI,c<)GP"e yE%]5|,U [P2ANA(bHj ` J_h] M Pp/$ƳEItb*VmE E~?ٱeSb_ N˄a9"2GT^f6ʹ {vӾN!$ҘeSIq6TGRDR!9\2-6DI;M +_Cj`|Cq@^Q&e?}cZFeÚW<\dIfQ (_suңokQH?)W@Ơ)Z @+ɶ.ދNLCdQsLr!Q1?<5AЛ K&{aqУMR8`I+Q)\܈{@:@ əثTQߞ XRT>65ı=NT}fr^eskT_5@gṯӛ_?ֺFB A(ONUQ.x=&vҥIMD(j^alG1cTW}sD$!CX-:1(F&qRW'0wي {{cu$Ǣ֕ աqR.De. PHx嬬cbJÌ(D@I2Tk4]}ؔ4+;tƋJx(% Sl?T"5VV%YTnl@QcEy8[PQle.[5kp8.P|ߒXJ, cu(+E~D Gwk#dFE>5C9hXyx#J>CI sPAb0qX#6lD93V4JE=%u8R|(%"r7_-lrt!ʫA:?㒺\sYla=3qe^**e.̺2TM9 zIwu?1g(ہUbd4 ]M^:Eܶҫ}uRnZwPd|kX'27jmz>r!97o#`$P?uiЈspE+O@y1'l[fs/a?Ҝgn\p͏۰Q?;bJ=>kO1rCO:kpP:oh%  W)c= Vù=L$r+{ |x[8êFmӵJ(@>M,K"#kZ6SӍZr(@Gs,nVo;~!:{ދr?5Lv GR5 UW1d|io$2eΔEe&ٔ4̉j n VD*uP5c#;(0&7ܕ[@@~M/fH%$$4P-8l>ǎbd CCH"r%Mk+b8ǓoEuUuBHڞg+QyjO2Sye坮lW|Y]b1UeҲ+ zL;Zr*@&e/ VW6tt!zq ڸF[hŋ" 'T*y՘uƚ!q4TY Y0 |hb]tbJ ?i 0YF% ӋwYH%jQA_ 'u4#D݂WP*Pxs6B^UK:QQsw$\;.{,0C7#$h9V\o݇T)@ 9Qޗ4ɪ& j`#)[ȸ8B=j:bl$"7mGWjdψ-5ZZc*[Oib]2 ѭ= I$yfwWqPe1g.c;5}d,`PH|xaŀ/bebAᅀgCڎó**&:[QX2Y"܍B]lp@"!wTAe"Ӊ6ظLl̑ǰO@]ȞYg];MV my|2GK3ahB!:2k|s,\dW;;rS$_e͵/&i?`kqDèkERb@/1)-:fwULo8Y=ek@zTO @9R@_DyooOt$,RkaF)ezrNxfWY\;z_kX?_{qQ҉q$VN $l=߱5ǝWO.ڻ3}ًȔ \_8^{5mMXa&u[uW*U&qSԚ}Uu>V^|W38&v<&j+f@Gǐ歾S"ْfP1$w}HHx}"`4F^H:zU Yfs?M<sLyITRwɃ:q"lsQ.y="Ͻq*n6a_TP i'w[[ȔF>I装h_ }gry))◩Dkw'td5j݇b>YqTz Z!$-a 0$1QY.Bel}RIXҜlw>ezJ\ىDE܍Ⱁ=Q.s|V5 Qa{L 69o؛;}h [1@ߡMJ<_.yX 楱 4d,:vAִ:C6ќ`KQ!]J|Vi9dM_دڣLnC7dX8 Q)QEGb~"s d7[q..P*V#_ d dTܬh8*j{elkr/k rpFڽK)![P+tɞ?_?;#Ҽ*t,91量[}s}r"Pn:bz** 2Zo,bjļBT޲Gmd5c9Nm80 tb"Y17>%>N2 2k,rQ!Kf/rk|>-(H%/hiX5jG"= Ď;*xސk:c+x IOٲS/O\(Z_w,ml $F&@] 7Ka" k{ng_C}  P&dEH&o,qQ$"k+I`F~>+V"{=lH10{'z'^{$7MjQiR}v+r$IXTvh$sL03@2eg0mQ;K,}E͏H=J֯CXpdO25T"<̫.R-9ٞ{_"$<4mPLEe)5ތj|XT}Ġ&5(o 2T e'](qH>Y=Qn1e^:pXJe02-V$#.@ ;`Uq؆oj]~&7C JTI>HT]5,V ىrGegJfNOǛ*SXT|-ia yH Qs05z e%~;84Tu}RH᾵9\(**$3HrzKuzcɔ[+[J.9:?{wl5I LMոĬ޵h#gku,)+TM(] gY@%=yܣ`1a򵨨lNjv뿳sM YgPlQ4Txa$S~YJ\}/u!}Ȯ~o8kcx؃z_4wxnO_9^%}==adn74E qLd-y૑y=݆hѨж`)b>W Yţ ?ﺧ5z8A w՞  !@9=! QIHht@Ke).VǿYG>5 cmc59͛lfNGj-(6#lW\rʕ+W\rʕ+W\rʕ+W\rʕ+W\rʕ+W\rʕ+W\rʕ+W\?gģIENDB`atomes_1.3.1/data/pixmaps/bravais/Orthorhombic-F.png0000664000175000017500000001666615212624223022075 0ustar lerouxlerouxPNG  IHDRQfbKGD̿ pHYs  tIME  - V~GIDATxw`U?BB7 UjEĆ ."pź iAd΋TЛ!W2% 7͝sgs=s6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6ln4 f'͓pjP\$-zEQ ?:R}|%'Aۣ"dzYC,\dWS7*=!QTIn"Lg"Aunf[)6'Qr㈑b9[ mix:(T" UT]ޭ,ōrŨB=}h+иKZ<[Qʂ2LИJ*hAN /:Nw56L*)Ho&jf#vIrbf$wCR֧Ԡ,Gc*-e#}EfSQQ'!PF71$_zEX',Ne:.;Qb)‘((yeٺaxQLq+qAY%"S5MfO2> ق2聛2QT~\ڠb{,3 2P0c!o:~EDèo!:H$8_uGbBlNK_62xetlb/$Gȧzq5؄`*Y1I,ZΛD%cY̆2QyhN.U>A`E5'Ws"LYh.bs;Q3zȁ3JWs$ P ?B^AU}QRFQSᚢQȇwvÒ(T%y]zUBTWa` ^o_я+IiU|f3<p43yBPj)3FĭUIIfq6‹$> 1y<<р~sU [H5}" Qz 7!)"+_pvd뢢Ѝi/fBE^q-<{<#WT,|=P泍_&k,BLpZ01M>6ZƔq2OtX&Z+fM2mi$!$hˋpYUGT/* J"d9kPfQ8l\T)=)B9J2B+bD%eYQg|^Di?z9uQeie:Ebt٢VINmG+&ETR0 ɏ֎؞OPz[ހF]TGKΓɲhk!9&%gu~ZP !j9ITJˡ&$QNO K3C%D% ES,@>F$XOIi'[Zؑ# "ͦif{IHC%qQ hi3p![ DI8ߤ՗u(}9=/,(jS8GL&f'9VV 1eUP](iE)b_-2^c )BkXgJjk~d٫Xod.ripSh#ϫHW @6wjlmqRTCN2B桥 (O8ElVz/nuPr|=q ʸp!yAeu#x&Xdj 1_#nag/2"B|0HnT RDqP\"Z$goDԌ%E;gdB2菖X`f:ЛO2*HS =W8diުK~9 :{Ki7ϘϾMU5ب?&ӳ>ԬLmOgx~bԂa55Cj"-_D`M! {[b%Eu:?;x޹NM:ц< N;Kyrڷ5} ^)C? *? :;u&' )r.0cE%R`xÍeNU>8LAk2^ fFY^OEr,2dyV^e+ D;c'?>iPdxCB;&|ҍ9(*av~ռr Rkld9:Q==Q$"nF<2n-D5x}oUGS9t f#d**]}-22!#Г)dg:P=z7?q~#WZݒYG+!BoDmr"+kDχ*C>gQe 9 ӕŴ`XÚGÇȤ_l(z Pp ire0qg^F4K.B}|+!4cqrLu3Y {1Fӛ>ocmM3-HǼ2>7@x Jsʷp>/bNu~N%lo"!d,h8I?cWfp>Wgǐ~Cq"3*aƐ;%Z_h~)MY%o Ir KKLc%-؛Y/URd ivOKQGMOUװy_,"b c>M-gQ?1='L\ r5 ̑_Vd;>l+r?;GM~5҅\aeB}F d(ğ5KԲ`4zzqTS,!Lh,$d8HCg/3$Ta߃F]o0<䢂!`+N"7 tZĕB c!| o:z]Z_˽()|zU`X dBεsx+'Ef/nW͵<I%uMd9!}'p]eLV.u#t Muq ^U<`d`Du75w$ "y7Z)B- z!܈&OЩhaoK&AaC8ؚC,_>0r6\IygVա?mkf4v~BbsXN8l'N2/r9Z`mh[Yf&$2mݙKDd{rx5h>D#~G"K'"00v,ۜT"3B|4g'"&Q k'@-wege -c]WVli+!vů8;h'(y liDЏ_42n_ڰi\|nwoq(FӋi7Ն'dm":1ǛD1,x5S["K+g'$&90է6!,t KPQ'rXNȀ@Յ+UUjAvzcK?@dUNexV#l%)}Z,FűЂZvTL#yu5EL"W_}/ͺ"k XIĝr>?: .Vh*ɧ^ⱹ !bycK`]Q׍ q~sXcv;FUq!gu(4o\0dጬ9t?{ØMQ)c{cȝ.lU}FgGj[tM}ohO;QygSTtb\|y%o)@F\rjsDK'2Ȭe1 Ol ibN,` $.^ք۸٧xVyng|'~ |c["'BH9){%Uq2nerȊ0|_.(l#9v$Ɂ4g;-kaiy2m(?̾VT9y֑8's7-#5eh**G_F]{\= *ih%DH$X@˞-Â3wK95):$; & F֢ pY[zH$d; z-*\gk?A lHٻT塔JiY ɓ́3CT!U="9+2:ng` `23<XKs)3ޣS@u;6CAm}B~qA$$){b! oe&?;yCdq]8hY_,Bw[P?5\I!DXS6o9YDB׍o'y9=v>g2={:~\^k3;@a(3j24gQ7]'$l혊:, ō!*щX}ln;Q9NM}Fʛ:J9uyM&;3] j>!U޼La.f$˾nDY΋jN^KvN/L,pv8Ҫ|DeWSQ[ 9N}vBZ&6/T E%_UO5gQɑͦqrDTs^zL mVOF#1ӸM6veݿGzy<]hg/ $9gGODS;{~=/.X { GO ůgu,ە\OAi]ƒFQf3m)el*9e;㹀q$k*]u&F,fmlNשEe ]ys,$}:lCݽZT׀HK3`>ʭA{{P[7&^Rל,GEѲZTTh(k=fxYK Oa;Q'A H#*;# qZWs=KB1 Kٷ"$㒼p$$=wr[@(KVyBTr+b*V}rW@Te -c GFK2ETƂ|5uR @&?EmXJf[ܒxoe#hrQQ9$Cf+`YɖL GBp=tGIE?ޓlЧ퇚d~%Gn_ylBNdAP)lT-O_ n e0WQĮgӒf)QhN$8aÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lE|IENDB`atomes_1.3.1/data/pixmaps/bravais/Hexagonal.png0000664000175000017500000002274315212624223021152 0ustar lerouxlerouxPNG  IHDRXbKGD pHYs  tIME  + $h IDATxy|Eǿ39 !WTPT'yA /yk[%=ZOщh \F X3pUu賑Z+]ifA9}G\jur Y':ۜRNHcK~=S ޅ(h$줭FA8wۭz} v8G{>{W*!M[OoYCt4O^^BGTBJ; ZueY?H)!֎K)gJ ݠd}JiZ DJ]l6$KPi<)ez~BvWض=YJ9^׊x?Nߩ))lWX %%ib#q*>qm/B ~X-VK1ԲUD\2J!REiw#ҽgBƌ\4qk71fK)?D"ƍ\qqMJ\V_qJ"^ ekvrp믷vCm^o-ZӀQ}>dȐ$1~ gw9 mg۶_R*%%eQ(+(((Hsr!?>0it]ug6nlaaa^2٧ ۶u]BwiG[qH$UI,Ys炞={.*2335 E!+gJw  &STT4ض"5RMӼhԨQyHOp)..NŒR q& !^۷qZs!ZjDz4W>{B9B^ >EEE|>r!ӺRs2p &w4@7%BpZXXR.>i={,R^[ ̀j!}i~4M& !~zɈ#tp"iڡHd~ XNǶ'QRinT1Hm~ucT]8v!.yuݻug8szY/X~qv3˲q])jw1c;Pt;B6k !0 .15M/N(!ߤWH(..>XӴRꔔy3ґѣ]@iOw0+<x@c}{=u]wi)t EEE}>BJV]Cm*@_.YėwpdFF6,, !233GŲB ;$8`RCCe23pvWq{ҎoA0϶">q0trqZZEEEbPIOt ! 'p"Mu/BymzsYB!.Qj! @q( B>ԑ)..>BӴe3f̝J m\n!B)姻:cY0!)m]LSXX+XaYJ XbEP(trraW #V}1cgw˲jvrpMFH)5q^1lذZ iI)'!x'cB??j;PJy2/;vlKض};priv%fUFtw4VDffx-˲IIIytРAwSF%%%G"RJWq_Ѝ0 cm+Um;DB\ISOf &|8WNׂ۶>ξVKezΰeYm۲ūhpX͗m!yyy<5###2ذaC뺢y׮g!R^GJy[nudpDMMMF< ^ lMH"7ν-eR߁bv+W㿤TAۉ,:m>}UVmt#]sF0bRFoH=OkEIOO߯K kYV83ߒR~_n~f:h2{üg !B]ɶ)ꤔג ;vEEE5k֜xhCCi{>iouJin0\|G41sۀo$#Rt]כ g3uō+/OM/tsI. 8Τ`0x!_~5MRXRRr뺗B;O*^z5jjjNKKjـ蔂 @p/8Gq oÈodffNhmÈow}9ˈ&<X$M ˄{rdBWrK=ȎTQQqD\n?ez|f0w7;; >xyDYDX?DɉLIIÈ#6CmopYYzo;dÆ c&Ō#7 sp)p ܕb0Da;0Y܅ 4͛o999k𨚚==Hi i0䓿ˮiL){"$: oD%G[H$T|u]>744,KMM-D"X^B>S_C̽RRʳb4v0xs&?$@rN$q7x.o?-[~{ӦM8kkxXi̡8*ņaĺ]N7hrFZu3i~=]"\UUuTnnck׮0`֭=ѓS w7s(iǍ?@quݫ:ybO$\5\p8˛aÆvK#632wie-B̏SWaчwN ǹ n 뚚ò,//nG[]؏eZ5 D&@zψW/Nbl[@}-vK$Gggg߽nݺڳ>H s~K$PJlSJ &W8'Ʒ/7-g?IYn#UUUs?xOܡ+r1 5H #V"xH.$&WDO p/.vk,˲V}}I&LmFHu~[Wo]u֣@VߜZc&HfCL߹R3z|2O$Ox* RJ ;}>_q8^>grqз5~6\;c0!zUẆi6_J ֭[^?uG[2`9߭Jm۞ /,9&xLsiL{-|#Z{@LYqis#Hi1;@ 3Z˪w[2wN$K<0/^橓MӬ!џ?|%OдL^RRH$r P @K)$]˅G"[LzOƇNSE7]fE.--QGuU"m TL4b@:^&Vj%do;c_&JJJY3Ob ~wޥ~8?tFwHFF/6nܸ&&>zd7f<@tԲe3g\o;ohhh#eZyAǿQHD$5-辮o[  GtχFy@ :ɝk5Q]{`\ҽP((J BP((J BP(@ %B DPQ(@ %B DPQ(@ BP((J BP(( Mg;{=N]͋wD'(+u`Mu p5x{,;fǗMKPt[\] [be^VR %֩%%)s+@NzCg;terE" Ӏ\|nn-DeML_̬PٞFPDPQ(@ BP((J BP((J BP(@ %B D;xilxl)S":`t>!A8FjV RjD4_~w)eYW{eq;vѵ @Ӵ_bŠ{VX5_J;\~=>x`NU_klm'fK@6"Mp8&knܸsO8pAׯO>ӤL(i휔2W >O5>uX]{ܹ7s>gqFA'ܗSO9 杵}VN/W1H 8B)b)sqe4q.BP҄RcKJJTI",YsMl i`ƕR}\ם$RS95/0Sˆaw]w(p뺇D"smNnbI)8K2d6iknq ,˺0B7Y󤔧H)uԖ5|L4X6J) oض]뺞=mۓ%ؿ~ǎua!ěOK)ǻeY*YYYY>"%%eiƍ#1jԨ-eee !m)ӯ_iii9[n=NP(K ۶Qm=sB>5rȲX]oʔ)0H)},Zd/c0ӶgeeuY~`Ǐ2 !D۶[zuH`Ym?R^_~ڙ7MH$j= mE!p)֬YUg][!u]*--+RR  4mi73.w;xn 2z#4M6|v#6w}n,))0 Ӷ3 ð@b"n2CӴu˲4.۶J`YP!5Bo\׽4͍`ѣG/ugضņaܡҁ᙮7Mx+i5Rm۾qCt]3c0MӮ֦%n4"^j83\ӕ@v~;_D1++͖enY֝z#Ow !Bt]!3lذm?e ~ի Z83SRR^ 84D)i~˲n4M_{p*pkG|gdeY !Vƌ%4\)iRu]?&&;veYj@ PBR@`u2 YXZZ:<9TjFs![@}ff汻3(N+A1c.|C-˺=]|y˲B4>4&85jeee{mK MSρwlGOyv˲&98##cƎw/n 6 c%I̔)SQmqW^=bȐ!5zwߣGOII B{l۞XZ__ήmׁq%Mqqᚦ]U\\u(&>R^5nܸ~iF"Ł@ a'v}zeP=zW"〥6s&NW^"0gΜ;X;{׬Ž@<*4Ms}2_Lb'x3vط>Bɱp^^J 4QQoKdqnjmvj^r-}[.\!],)gJ)af pbsuox puq]7777 !-*͆I)+~ 43$P#8y֬YwM6l>q7=#qlyVX+z&*uG\uRj`p*0X\3fRӴ6J)_ !ěiiiW&{bY!)}>MK-|D"Ob=SQc1833ill9dH< !^۷;'???\Bϟdf%_JǓ@zTVV۷]vWÄmۓ=addd<`mfͺOQ-2o޼dH0LӴ[ee }wUUO|̈́m' !Й3gNBd !ϟ?DHQQ`wu݅i~O1@ffuuukmee(Dmۦb:P@}>R/{x͗>áDHii^Phu.Y o|>غw] `p3uӦM띚D1(B~.˗Bzx7`\ c`vvvv7np< .J)?2??___;p'z_ģ@Vjv e[" 3;;@ٰaE4{ҕ6DN_뾽^^/YbEP(pfdIDATtrV4 I D"5''gQUU޽{iӦc!\!D0G]f͚5hڳ, ,Jedd\!<[q n`%`O OkCEEH8J)oBTۨˬYx4==Ht r"/t'^|)/[K? F7;~7rU;3DxxϞ=TTT,94{5{U7:???i`"N$9uѢEwF V7 !*c~G7!~xlF]rYk999ՇDۘEJZpg͚5 &.X+Mh`M /-]N o}q;ph\vf)-;;٪S5Mq]7DJJ3K.<==uDt7\3Ǿ mҥj..,,QGJ0Qt)} zڻٳBm:ꨣRv'xɚmg!؎P2l~Q/^ՕRtb]" BZ;i u)y$Y l\VﻴejK nT,hŪF*Ӑ|؊}2y 9輮52..`L+8(!:zי}f5 E0=@^˽$[P}=qĶ#z2;U-Ӝ re"Ew%swz22-grT¢Ρ垺7yVЅ J ]oӀ95D$q b{z;H {;8be&BP( BP( BP( Eg,| ]IENDB`atomes_1.3.1/data/pixmaps/bravais/Tetragonal-I.png0000664000175000017500000001246015212624223021525 0ustar lerouxlerouxPNG  IHDRQfbKGD̿ pHYs  tIME  ,+oIDATxy`SU'I"#3(4O, lPQs@TG "([iRTF RtK?%mi$rz}9Y@ 4hРA 4hРA 4hРA 4h O`=_I#H![B"(<Q"Ӑ,+/т Ci$; :!ySs݉NWPJŖDR\*Q43Ց}ә`kt\zu6# ) eK\&۝D\S:EvnLnN붌=d: q0g 6_x%^ϓAonS-!SA@fY Ja3s'Kˢp,\dAk)X.Bȕo;ڈJ".K)^B$:~qp#m{n,RZe 4S8NY}F}q&F[B%HH$,/b@@rJ= Ud59`XB,F|/YkzuHj׾a&K?MSK١dʭRij&d_r{2IT.lr‡d>tP/!0 B\OI^w;_ԑ0В)iWWZC`+2%D2YSnՔd4}]nVCy虬^Bep\K(e^n#N`  %Daz!Y#|B'v^! %\ ̍}jhZtN1!Dk @#b};tBOt$j/%`•-vK7_%Ȓoޕ0[erLCPu'y8N]6!_|zlۖ' =uwq]0`4WY} ƿW _>G귏pk5W;YрQ.DӧT}һ4sG8c7[fuOҲ"w~?"-;n9=\?Wg :k>;&mae`ulF3vVu.#B6 _5J;R!^㢅!İ|3UN0?/ӹ,{VcLCib/CͣMEuމ4ʚ#ʺI<Jb2B:3b1#ͷ`uNǻ]?XVvp+%H:bBJ`7# SսY*@ yl_y+ުC,:P@ۘKeMlF$u(T #7zktfbz9)%h&DK!cgXPkibv8/8!( m8@ߌ4_+;tuKʹ5X!|HHS|ku+8̣Ywxkk+iVV[nI'A!& /R.=PxCVyҏV V 37b.U>E Rw2{l ?% f*%t9(6+sj4ycJN'!-A!9E.hMD^Rΐ e0Và&L_ȧh*{} &`5%fLjr< w&~B#k$.CL˿~V5w}wk>z!>'@z:BQcVnv3)I>k]:}/ȃQӡ*fҟB){ωdh:W#RH8Q(^ h&O҄KDثY Ӡp.p͇FCKxek#{+uB@>aZQk-D"Z+0]ȗ -twHEQ :)!FH5LߊD8<'O;:`tƷYI4].Z8FRgkݳFV~#lӰD:VV]5Lb¬&HwLhm1!b+64Js~j|/:&TsS?tcGG7 Bv\ V0q! z䈑D)XΪ[5l:FYMDȾNV !ߦD;'o4UYd$/S4w4 Vth&'K-/ע k `E #DVpo2Ś;ӏ^wМ':lQ,}{.|Sc# hG,\ePkx#DqPHzgMa|HM4b4MyDeK3Y~$b|L**M5'/S9!"I?)4XܣiH뫋H(廥{O LM|[<ґul:UVr>FyJۥ>!z:M5JCQVT@%90a1G>wD TЉ<@rMB7vqFr՞IRV>Y,vAj<^%"o `H>Oʉ4텙neU{iŠޅ?dK hD?!BլdHqO/Rξ0r]jfKdmBwu to{=)Z؍b b:61Ǚv3Y&V{NW9$˹ ouheD~G>wi Mխ:R̕а+WԺc(yI,✪Lvuk:ɴdu͎J|C#"l8'd׆Nj^";!,^XݚhקGQ^=)SmʎeO]m8"ߥZq=r0髚~9+Ǽɦr!7ު quJY#kIKI2|'VL'!ֱ!jҐ*H!F_M w^SKL6934w}lWR1/vlk: %DY+V3Yݫ<(5JuM-&dUt:]G:<ЮXτ=ާeAw5F&K=>UaxHkh؋c]b{ekfq*`t.͸|DZ=srf*t- K: >&,i@U9qzg]0H!DEw ͳKCaE>7:m蕲%;BvKv:] Mx_,P)s&&cz[狂a@Kem^׈]I+jo/.56 .s8>CwLʚYBWrO d"NV;'H#4}n$\XGS>rrr"K6yu#VO2D1Żx(8{c߈11M~$56{f $LVl?&xXx,!z;GkU?K/Rrg nVX,$3k z/H:$^u H#ʾ:9nzq{kn=tWzf1U\F…H\,k!:_aXO8PM%d73kCX+b$~iRǠ^Bec%VyyA'+B1ǘ#'Oa=w0q_+b'+P5~"I M_#rӆmĩ#{V6-"S̸g?nAZA Y-lT5x^A + ] c:.<#2_T급O6F 崳C @6:vYȬ׋Q=96)ߦ( %Cy4E==@ h8{=8A)SQ75,gVrmta-,C ժ)Xe<8I'[=M9VujhJ1m)SƳθK|!_\b}toxiv*JZ:[3´DZ x}ƼT<ޝfn,h5yGac {iZcSn؞5= (DWs9sxvjջl:D#7%rH-8UAmQHA  !!C$dI2Lc`$dI" ADCL+ eثteCd+đ rqQB"u""!ju <<$d ,7Af '!CV/>`kyMrNr{5qDx E''}E.}uDžx Y=)c(\2֋yg<I @ÂxuVRZ=3Aq:)Q%YNR gt %c` #\eLc@oXIa{9r:3A 83fIA֩+ cqf:vbDQb/aO#Ɋ o)_W8IKxx?lc A6D;j'W#~=Zc`|43݃aFUx5ۓN]|sHn|< ۳6 a!7e@0?`Si8TJ:BC|TRbzwM&VP` f:p3y!Hb& )$ \AL R8tcICH{P f}'IGzҖW$r&DRNS9            XFdIENDB`atomes_1.3.1/data/pixmaps/bravais/Orthorhombic-I.png0000664000175000017500000001171615212624223022067 0ustar lerouxlerouxPNG  IHDRQfbKGD̿ pHYs  tIME  ,8n_IDATxy|EǿՓ +UTDp *Kpʺ ( %*eYH;#ˋEX\ @H2S$3&1]_ILU穪 BP( BP( BP( BP( BP( BP( EİEF=ȏ+ (ÜG"9G$֓˗Q?jWacfE~\o8[WkĖDAq*|dj.n1P~.` >0U$vkVsQ,G>f-8I3L3ɲi\jg?ߒlq4ꭊ1қɻu>fR(S '3%Q1d+h=OIQ]y/WH93ު5ܼs\]1KHt@RYMs Sqf2M}A\% {耛̇믪V @ohHc%aNQϪ;X-uz@ B\d>W3Һ $/ ҌЦ3ED /m]Ab=w{QQJhCS'e1Mxj_s+ҳ濵b3"W'5*#1i!t 6BŃEޭ"o 8λ *0 @>K\Dw^I xB"%n`} !rٺ \_s+pYpiOZH]rLI ƱBY,ȗK~vnUψ9!3]+DQn>RuEE=7bz1S3tr21e'.7v̖Ud YI4Eq$XB$3_hz<.'U*!q&[WXɷ &$ne~b0AֱXQdF.q ?8KP6GlLJ d\ Jm1ҿUːƺ |9ėmǿbŮZ+ײ/sYMb+[U;@<&0?#Il3%~=ΐ <XBH`-,aɑ,[ȉ1.2:@ms~OogpuqXm! [ɜ$uj!<ydbmyesف?~l`h?XL@skFNqn/%p#ܪp+9JM[&{^Of!CF!34UM}!}p$2#|4^_}~v,{XBU2I[am"_oec{䮓 b_cBxOWm"1 +?^1TxNYfqs}}q}8N:#ś&5'L-F\+Fp 7c\jE,k%I >ؗ&`i1R1Sg]46{͒\H8gn,x3_29摼r>{nu_4_%-uԜr|?ms :m!JyiR6em 97ۺg,R+!JHVx;ʠQlvoFO`OGPn$ѦBc`n9Pu yAV%ggGsDȴJz9LiG/` .YwlÝS\Y9;gʬ:3IredY!ս<2eg73h"|{w"5a8Cz=r)әToC}vW7_/}[U`q? )TaqP ҇:?? .9Im?+uɂ8s?$?JxLz@6 [hy12 zxNn5%3D;:zțSs9~ JT\ c.U7ox&8 wӐAF~.+zH ~ ƭzaqAo%^xXZXSB"%8m/hμ(%sݏ:.Q#%X.<+Iliݙ_-n!"URDmc%<9A:0]՚.H) x_# r8RUDQ.+\AK>m78bETeAq7;pO8M^'ёYn R R I4SW%9t= `ÓM>dd1?˺tA8sD^n`acFRjI¶)a֍'(U&w8ŕN:^.F9ɼA REw6xѫ#" a+܅Q':[ˊ tB|tCٱ[cلmcI>_/^-DTd\g,*CY(˷J'lW\| }[̯prYṬz cŒ$4Z\iL;~FZNrY%ȮZ戢=VC "fz 2CοRA"Al1n9PHq :j?~J.\ydbl1A^\(&^_cHs3eRx2\V'<ә! }иmH.2ef8/wnh`̮`xc>c?^=r~/* t?7ZB2; }#ƍt=R9 ]CŋޕHdW1̠Jx.qj@Do϶mGZgm #*>>ƸWx'/8":d˲EKuuT7X{h2›X)3}t9ny.P%@++'G?XX _&?w<7,`TxL7^Omx& ҘD+)=U#vpo PgH33;5统f>RW&T-wxŤmr ]z O&fV odn10ҐFne|ٙC|͑G/Z}44IÁüFZuix}"U"HTXlLហ'm~KjNDEeh@3;9^N yi%ȭ^qoS-o|B y\m *#%>%./OeEIxΡrZ8Llr|VD,-ؔ^%{14{юI+'Hmy`O!< z5xr8: IJȖRG.џ8l!͉!N_]s]BSUCZHmH)fPr^;,$B4&q-HVN:4M,K.+c ^"|~Es@2S Ԫ /ZiK2|_yL,5ŎD[ST) $z'RHoP J˼uL RnA64Cm"Y7VmUV Wl$ўQn-Ԧ`aZPd'id3NU]A38R򢄹ƐeWr&[Hw>C^E`r;p,hb-]{X}*hV|M{H~tJ8R28\ѲԌK-#pb!#9̿l*W.a[H.ʈYUZYϱZw(e27 &]yaq+gF+MO :@b5 XL:{)\9m5cKЂH!S]j%ꚓN$'Ze) egp//hJnߪj"9wAKIm,&~mKRT^QxJߋ'eYہP xpF!Hsϥ}!uoScgjnp] f!boM9 ~xҶC҂iUSa ei\0ǐ䳐(1D¶rtN1I LD*a[ C.72=0h7>Ώ91MjVRy-DE"}/* YNk^ re! b2K#+Ɗt۸t+/0"G x$wW 6򙼣qc t ",Yna;y,mHڮOUE¶rd&}q%nގc uӰkcko?Cba|G_oA>}=oZtoF,|an?1z5' H.$<gWXQe?i1/&2o^2ΐˬHn)_VžJ P>`*Ahʍ4v^G59 K:( A3+8gAK&"&G=¸HR7 @<&~aA 9ioCj1ԣ-W[P( BP( BP( BP( BP( BP( B?ЁNg"dIENDB`atomes_1.3.1/data/pixmaps/bravais/Cubic-P.png0000664000175000017500000000621715212624223020464 0ustar lerouxlerouxPNG  IHDRXbKGD pHYs  tIME  . 0 IDATxypB 7VQkX TD:ZQ(u)E tQkhnXŒVq[EXeɂ!<'ސVx3Ie>>{{6\ ,:),-< |~tPXOt/ PZ!߽XQ^LTnhtW[-7Fhac75&] Y >8/^RRm6$L"Y?site2yZolۡ_eCMx8Jb[^-{44Nӄ$cA%H;-& ꅤ-S ^Eu0gI\[$ U'ȿǁc1Uy [oD\ UjUP"JX?z*--}(AKU$h)A"0׳Wl9q(J |}! Rh[|gM U/7( Ch$ 4k@;^3 xc`cs @U`Ký%͛7o^r669N>{voKY,Qt:B;^ XlH WZsU1vw+i\;_ Mmp$ }cY|*6]KzY/۔ UMW+xl W(A$s]%dkTD z;DD "Q|*:+)B J%DڮF!PHa ;DMJI D ^J%hB JjQ(AD @ uRD "%Bv@v/c[k{ " <\ <,{(vCm>@sѢEŻ-#1`0pЋlX6Tl6 桴L&3h'v,59W}(Av{hwQ'7Aslvb;#TqlOIW=>I( <_nUsܪ((pi')vII_:ˁ;^]$LuEEE|_U }/l6`snʒ%K4?XLF >|=pw͚5("%H5p+Qx9n†OkGgS$ǭ>QQyWGQt/ppUUm|F%HrUX-0hpU8"E$7_z Lj#CɊHx p?6twl[d*`ˮ/@|[(rΝdNPDZJRk+,7Ql<{K7ꜫ$M|O$t*NgSV;62AU`lyͮh9e|8QU&,A. ,IYmWK┗? E9L@FrdB.ȘIaCfI+s::*"I>͎/z b[?4}5k&>sd$G~Xj8o| rq5FQkx# r;6=lDj=a";_MrMM}jũTR$jv|$0s;bKbVckh57'ѤJiJrh6j16VolnoH;QM^`AiB].` 6ÇW'*AS܄H)9w3T*Q ۱ @SЖkqWι;:Vgl|D(:*AeOW, 6l%0dNSg56`[JضHitִ[ hZnȿ?'{_%Hxs!hc! 8RqXzr}KLرcWt֭((s|b4y(Vßj sáخqfw~Q౳c3-:ךAIJۀ'[6>dGbӚ㼩OcŶBaSs* GEuf!.뫰l7֡G3AvO|hl1$l3po'lFK ]o[@0>ZН듡g]l V>+鋍 [f=.WQcl1q&vHB :X*lC" ]`ۖM-NB=""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""{sTПIENDB`atomes_1.3.1/data/pixmaps/pdf.png0000664000175000017500000000623115212624223016360 0ustar lerouxlerouxPNG  IHDR22?bKGD pHYs  tIME A &IDAThŚk]uksx,c(r Vp&QHTCӧURP?C:%JS>Di4ikd_3{{~8>{Gښgkzxܹ3b$! |Hc7nooz!<[$onUMN̬֪sԟ<~y瞽{~Mw 5k6j\UI=i)W\Q,(T*Iyoy\$j5IP,]w9u?pׯ) x#KJ!3b]?dE1pҨ7yO ߚ)l_]IXĉ1<<Ae$P޻(w~`q?=_gr QP\6Vs{O7̙3gϞ۴i&Fc4[ ,IzKvxsX | Ica~ Hw]}ʛo2N0,&R# p 4::}׮]Wa4Rʙ3k |eHSw$WvۏH6Z.35|ns| '8P,,K.oƏ6nϔ͸i%KXds[Ƶg 8>%>~aIc{'Y!:nԃYnfVT8vΝcbbJ(ccc+s/?~겑Š]GrŎko8+oe{HX@/]S$ ;ؾ>6mTU%S.[:44ծG̾#?OEP08HrO:ݴތ l$齬jV;;5G5uS՚3T*Q.*F&Gt4R؁E$wdwcVѯyE+%qk\=1.MWaFZiE{ "^}Jކh"N?NS:$\~O=ϒC l5@uJfgb x,ԃ xpYXBj%Pɏ\pcDHGycqnU%SVS 8J]NAp՗3o[vꍽ=@41m fY% :>(ɲ}늚q|VAA;(<εW^]?!@L͋VOT,RkA@GG4iM(qFcW^[iȵk5o'f#mmp> իmzbkltihU$ɘfC`u)aHk5Qf".cu\WE)л #p]H-ɟ_(׬lI7 dzzzq"XTղTl{qBXՔ/OX+ÿn ,Uc$Ɉ'gꇯ è,{4&`*6fYhEA#T0bE[?ɥտBdIH ee̺ &LMQb(StEI >E9R$*9uΣv6جR1#U%VRJL̑jBt ]R;  H6'j5NҬAdFD&$f1 Ƒ~}K 7SHD{R%CFBH`PQb1eE7ħѯ~Y|TBGjX2Rc…x5b Y6B^ 1m{޽JdlNp~=iǷ~g5>3" CPs T.%tw7|KeFVn;pv>7Ej@GZ (7)X <BPIS"Cʈ)gIcF(K?)+YkւhNr2cTLLn۶sWxDXp`FbN@k2g_{`NJmOIpY$.D>rUL.ik/ ScAe_Y' ƤV0z~bM!jBHH@Ϻ?qhZ~hH5%yZEJ,9fY%-҆Vz|UT($we<L|Ay,H-s)Rsְn8i&fT ܕ|O9֤ UiX-$I$⠨9a1W,ROpY|e*Tlju}T^FC1Ϳg%%(Y0cU5kxX}5dd3Q*,q̣&fbbtjaZ2=0 A+Zzzk5!>e~6Њ['E1V塹N7ޛ[!`)6g"b9*DisM_Z8_iLLL\pb@ ‘Ç?yўrst@.oE 67Jr~˖-ߜ.3#IID(brrR}ݴ)sGIENDB`atomes_1.3.1/data/pixmaps/field/0000775000175000017500000000000015212624223016162 5ustar lerouxlerouxatomes_1.3.1/data/pixmaps/field/an.png0000664000175000017500000003060715212624223017274 0ustar lerouxlerouxPNG  IHDR(bKGD pHYs  tIME@Za IDATxwxTU{BZ],.*k ,]+UQ׆ETX WAj=?fnq33so3S|WBD֚@CCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBC@5'aRcw҂N'{#9IxIk9pl^R|_ٶh1VOT7q JeIcx 5z&!CCUxy4,& ;2$ H A! EEp3sq&&EkWLU'dH:xD^THИmY1s5)4!NXxtd @ƆG@Bv";UpUf9+nIB>N dÅ6T2:v|tٝ2S^κ1ZP#yEιbM_mWv^ڕS(Hɐ_*DR9%` =7 a-HhJ$!7PѧM_-+uד^$WJ$XRH 44B0Q'hĩDƉL:QPUUklMC|]ڞ,C]-*Eb6}"{pV\LÀ:5lW}LkpmRqitMNJMQ;7 PUt:]y}Xk? ZRjJWKh=D\Y+Q E[Wd\ɺ_ȶnegv7M Sm=ސʔr9…ZkBtLv,_Z/~ ]*\bM,u6"|Y^D¯hlhpvRB;^KaFb{Ae_={$-ʩzBBgC !+2P[VFVZ'صKkx=m?vS$ /4'b0Bk Rg Oj7)^c"=\E"@񱧼ĩcp,F9ԔVԹ4!S` HK$Ro MKd9=EYږ h;Ա'ߣ7z(8PyPR ϥ`|{f;;D۱Wc犷ݵzI#)cG ZzM.JH7mzٔ+چWM?InEXv猲o#Qׄ ;s!ÄH< d8z4߹>Q)h+ JcO:Ґٍ' Ɵs>@8S vBRB$%~=>^.5>.&r&68(/P/FRtÑӰ~IQ+#ط;] zߐ)ZM KPiMLi8K+H~AO ]\bkjW=&C8"/~\E KQף|-$(!bm-m)ؿh;Pi&Az" X{g@,mjl{qJ"!=?>~&į^|x:o9I<8D8L4I$TuBZ-$p s.:'z=Ӑr;THK B!L7^zm +QkxK7dՉtD]=ѯDdCİM:Æ˯U=H6dڗJ]xex%鋑zlH]{j GgJI:(X0_2[ڇ RnX0a*t@2tz#?ȒM4RJڋ+5Q|#Vl\{E@g2STĐ#u≜xIh$ % b]j{{gRDE]^$[$a|+#]+ ˰ibӷ1A7Ɓ9H'(LhZ"6vgQny<}5"HQ[ɊܻjooKQ֐`s0BQ<;w&ۚ+ޝ'V]{3܂"dÎ#+X4֪0PSg0.dV>E! / .w6}F~.?~y??谣GlWPj(4 ِ.sq'*/J}茞V)/HtK>%Ji ̖">_Hw&? }鄞4d&{# R|hAʔ [ٜpɿE`,35%E:i& !#_Tt2qs84)4!3j"nާò| n]H|-ޝnZPh A% ۉ;ϐ#< ۢ9o/8AnMNCBPU[j4ؔ)q2jxM MM4fW ݼ鍡CBl ^ZR%QF_ ?Tzk3_}1&4!~v~ l3ҩ#hB;<5AZR1 l!N<&׆KcpBw Ja2`ʖ*(~n; X0G8k4)4!ᩯo5Uemg2NV#_ݘ>ד`/ [?n0|dӿaƍϢweTm2NslHsZ),iNDwM\r]аwxkt+m?ő>76j nOԦϛax3͓ C[vo*^8w2]J聁NR1XeBNji~^Ğx0t5W=$I&JƍbSK8is^"nş>PBk.矗dc.~&*腱M :ҡ uG`2#!5\{~at Gg@y@v2wpGb4>'Ɛ;nߦvrV7.ι5*NÌwJQpa͇o.A-@NHcF!V%lO[51ɇ:" s' +郑Bd!D[>P_*RR Pnϋ4!߼t(H 'i䑨KVX]E Mp1Av$K/J l*!,DT5IJa'=瑕+iB|gFE4d@2~mp[S12\9唃PUW\)o|Dtn#|[2)- Br $MC!sNgGgݘH=;ZR y9bA}Q8Ob+ HvI >E%  ~I[awsq뗟St E.r*}vEA[s= *R>8Tn;oLfC HW d#'2B Dts>%)L PZdpI &0I±h-=Si .tXLH@X@;y)(*:.7;ѭ}RˈbĶ 90lhI ]_/ޚx.9+vңgKiܱ(ĿwCTr6#8`5.+>Í AO#KclG(I79 KB-MÕ> ͩT2l F%yW-[V;lE)FO^Ko4 VU[ROh1|.&M&iBt`-_.s}E;:LNز>(?.g oLxw =ڕt<0ҝ$Uh'+$1o*{ tz1ƻaH'a=yIᤇødbig}{#0ߖ'2Q_mO44 oF 6UiIz vk3SLK.?BQz)q10j(.]*IMEA-R4z[Go#].$%[?c6߮X/4!~!.ν{>1sl9NY8f<654WiAj5ԍdL>sx\~s RH.b:a7kcH 5aLw3:ћǘ{$&_䠐CO?]N4k~]E譙-v28j4lYK|-9HNkQ̸9_())ӧO /𐉶7رC}ݬX;3)SvXj73aNޜ"k JĚ1?pNµQL9LI Q)k@rY՚j'(#Cu jWCMļUDw[םɔKO?T{(ι{X$ݻW<|\~vmiiie?U6KySF E@34[mLJ=wZ˴Iu%MR<`9Nѱz [soMx˘p}VU>@O|I'56MÐf2yy37JxpV|kիWYf駟rs饗2~]yyx73gF)SpK-N:@kl-Ņ [ʤ"#)'PU¨^o>vK)a\\܌9׾s$vd'-'԰tuENz~m8묳4iFsG1o_^̛7?H$رc7ncǎEuk׮-⫯b˖-=> &h+M᮫5+)Ee`J ?1_5tOkaS9k!boNtƜ-ʼn$B~iHx =6rD/=.lEƍG}ŋٲe }ceȑ >!J%%%^˗f\.<ǏwoV?Pra10XYX qWo{%CUk6. 3ΔK!vUԉonlY,N-}*4/"D(fZ"2B%էh x^[|rV\ɖ-[p:ߟ={ҳgOڵ+f_ 8^***(++cϞ=ܹ;vP__Oqq1Ç裏㎣LUUe㯈wĚ;SZg ltf<SF P~`=ؔ|)7b]q=cJ 9p13b, ;y(fb"ͻ խzuXA<gΝbÆ lݺ2*++^jb*u$!  dggGQQ]t_~ߟ}>xRy1wIfl'yG {es?S$Bk`oGbpa!╛_1kFWd s(_.k6y$wrA*=s^0$ 2Nffo6ksb)k2Ɯ1I04mq?JP])jF>vG 'B{q쵘2$'] 6;G9b$lX Z{5kx~vY'ŭO%ohrhlEgIØ$gB1ID o'R:S؍\Lg],sdYoSxC`Ƶd*FHvy+p )B\Aev>ĸFJs&qoQ Tq́f$$!!a$o Eb(WIDAT LRC$T{[,ޘ'>+ө\Ż.\AKd's#=C<h4 /cĤ/Ü=%EF? ,+Q4Q~TKq7L<[ͯDכe,J <]&'=4-PKԽp&2e|C G #-zq:H)|`kC:4T%߅lr"0ge` 7?8(xϹ}XWnǒ7U"&sagX8f&Z-ej7Pd˷GqwMC] E/ [pS)1oJxЃ4؊\LNd Kf1GfmH$Uؽ۝%w[$ 0?Fk/Wsrsr4a Ofl$ܸ%؄i oɅdta膣pޚ[p Nu;G;'si؋ iE45U'c 5k8ޞhXr33>yoP& F.?~b;z ”G0V1pԿ`0qXm8{9,.},s:TODQBļ~{kH$x1#rssg}6 ~x<vY-|=҈ <ă (a>7 zH8{[]ɢhiE8 )W/ZZKff&vbĉCM wtј%M4n%+g&++;wܘ1cĒ%Kݻ7۶m;y =/}5o(n쩤dRQbTlP])eԐw{ UUYhxز![dBUHD䈐3`/:=% Nd :OT<@C@S)@)t/G xX.Z >1~x,Yž={M]9t)ef~ H{f.rjEܓJԟNϥ̩qθ1/"Į1WY`Ɣ3RGHD}($ 5cȤ'ρ`1O9ƭ ={2Jmm-zӧXr :1l|}"BŐ4K& 3REEBF–חgFT6x(i"O`6drA2fd46l Kv.:YoA 2(jKsF~~`%LY-.2*ּOw3ؐti@UbllČߟfmBT6K~a)u7aQzKXzDd&{1|W\2IRpmDL,Ā>? ϞI. VڿP,s5l3Sń"6|ɍV\?LO]HPKfdd}2VUJK,>g7+O%Ο qC٘٨V?{*m⟽ݑO1·8྽89=}g-2999x^v߿sNگ>U:|RA7 >V:v{Л2AHjEEP0k"vF$U;rEs̩{(nscޜDIl~}ö40Q!M.j7%w1w9uLY9lns6l;wdժUa,˿|_ @׮]ҥaչ0_Z8k|_jT*W)UIĬ# # S~h lRU`[Nx;$H!^x){6:dC6Z1rܟ2zn߉aO$#: h'U\5/&Ï '}[$Σ#@-(ϕ>}vpfJFA7K 3QIa| U$ &Guգ'|V+mB|_`OMH:#k1CLY0ڗ{@d=l@ufdDs);o>i&x<<ݠ0pB1ydbznr:Ayy*V% 3;љ|_gk8&c=[@zkIgAgt#[yչɡmSs{> IgY$$d$LNCIR=tIAfqEfРAnnk}}ĉqTUUüyZn&S:`:1?:YoF֛K}1gtŔ.k%{ێF@қ dɢkbȁp<$ 􆟬!zDY yyyҲeˤ[o'X,Fff&>=Fz`A:Έ$@#z1٥ nbE)5uc"* lZ*zYB$b5\R& qJcM{jBI."D +K\zǩb;wyUߒ&O ),$%G@#s [vqrtb#T%D(E  zΪ5PbJ5>U CZ}Rm@VV ?DBA5K=H T`f[xmٖ̒߫;_y &Q X!ˮG]1?7@"z5Hy3j<5& F(a7';B4N+B"j('H1xiCO"my9xIVkRɧ໒驕&J% !;;g_b'0aS^ID!!JB¹йsQ5oT+ŠUͥ1*E;U5b]]Yހ(a7"XOx%67U%[)ѥ FɥGn&!HWqIBCB wIENDB`atomes_1.3.1/data/pixmaps/field/td.png0000664000175000017500000003410015212624223017275 0ustar lerouxlerouxPNG  IHDRN@ pHYs  tIME 3' IDATxwxTևsOz&E*~6īRد X@@]Ѥ(RDHeL9##U/HKXZ-(Y Zs_cqX 9}iTVVʹflal-~FUяs.B vL%H/`X,B9t8H hDCO% c璱m'r_i.1'DKGpC?_AB` [1~:qqq&IWi۶ sNACƌ}LJYDGk`dvs^˂ {F_XJQ-VpA*$3 [ #4\ ɄM C‘[FqIɞN똟@zB!\ľ6Lhrd1~nAPvito_uRePC>bTƂ?ѓ7eEsʫFM4Ouq~KrΪTR_f&+/BP=eݚX${I*SATdAGfD+M~UP$1"tM21A\F !ɽ@Z,l|1zz9穊A|Å'C,(edmǓ̌qwsII*>)^ø~a |͒WnI=8궞X%eAis?0.Ofu#H* ]Al|%&3}G{}!?eOu2"OY!aA(ne*̀G{ zoƢ~WA64sC]IT7IX`H}Y:'.ӈ?qlUUkH({gڞ*A-ĨQRSً |.g,yj>iWL$3NG+UePpQSxHŅs$C\qi$=*Ѕk\9T1\0,X <|LB?df"Z^߳z_v1#!(.(99x<㉎$IR pQS(v/# aG`@Be8Km$6/㛷ͮuDrȑtOUjlqW老8qؗNNtʼn96.q_p2%Eܻ>մAOKDG 4ηa[oǯ^9pXN$-!l+Mq3f*Yw⚩b.[.f~~!:84ġ%xWV}U-}!a@B$Yg@'!QG!sg8n5f~r4ti@KH5)DPl8niyEh+<,9)1t+-@9ӿ 'fWP:zT|=fI. hE&aFL$5Nc4@ SK821h (S o^31 ^&qܣwFq}Q&kh0bÑPYt _vVyOHӔbb V9Iɞ-ᒳMf3#gϒnY5p 7(#u8Pp ~" q UYa!_IE6ULjUioR(.v7 b`2l?g_`^} Y/Z1L6M >\,_F=ˊv./UMDălcs7m-c+]O}aAE+N?LyV~OR kc8geD_7;+MٷG򎹋ݸ(Y(td7׿:’ L~z6nH.>zw>[A021wf Aewzb!';w%MQח{B/x1l'_{O__B C!' ,-.41jibchxu߅7)&#eE|l=E<0텤cRh߮]#3 Rp˱Bd$ uuU㱕dbX~6Ne(ڵnrA>3F# 'N~1EtroQj{WyLEhaytm>(ޙ8z1Ԙw<;dkK5^Ƥ }-9{^80}x32,(nA1^_wE]-2ģ+9jp`+yg_ O̞>Y?7deh "[ZO٪* 74k&> 9x˽9%GA_[~\' V(K.^NcߜA'cT8xazO}#G^i R&69{p[@Ƣ =ݵPvl2m6-[FVV;wO>tMEQe|+<:RhXܦFz?$IBqpVd.Q 60Y }+F%b?!E$Ӣ_t Ą57E7#nՅ`Maݹw`O΋!55Us=6O>.٧ n֬YґCČ(y;[AV#ngly{i`ҥ-z]:v|rvZ`QKu.k5@YyŨo~:!;h͡HQ8]݉~|wCnn޽;YYYCߒO>~n:I+6loOk׊Gb`97 䶗WBgcp`?@+>' Zso!&)xd u.@°T JQnhOh &M"++6oK/$EFCk׎9sH}z׳xVtYY٨QF1r@ߛn$w{fIPpE rUSD=%؊SRɵJ{w~]8~zXډ疤2}i_Ұx uVUVO'=nvo`ߋ6ml6gUF /F`h{Q UY6)j1L赱қvF)فہ)5anCo{3//)֊_ !Cwy'"رcbƍ,Yg]{6 He!$[^l;9{5|ƣDGEOOS5/n[ ?b#8U.!󖮫!##GZUV\.2~ÿAƍtC$)ͯ۝ &x]N%'pl㗆4)ΜjXX/|J wU>Zs n֢1@ i d^1XV)>鷿;EaС_~Lg%ix]~-@QpĚyӥC:y-7@8+y5jKMqB\{bէ6缯3g 6G,]AÆ=__ Y^Ie^}ZZgOY~gELٸ2qޛb_>yyyնG=s e?SNegWbgn`爱saj`^Iuv-︩NaTx4m T]X*.8}~Pkd2aY|yȨQt+V"##CvNÇӯ_? v7[7-`bc碯?9[I9{F "o)5Os?9zS8Z'8wbL>o}ODDDom6|sGuumo|}ͨΛ?3 Zsb(O[8+2d).K_nS+no&8q^zubɓ̘1C~TWWӱcGƎ{N7.,,l%K^ H5qR,[$ہ~F1)eYp^U9Q+ЬY3믿&>>TNrr21?)**kaŊm6lԓO>)~c ~~?됕љt#n*ŝñcߴiߺAA7On=A ʑd-ûXG eŃsT6W+6yҤI# 2d/9>L^ 6i ܣdC.ED([6'"ğ1|sʬ%lHÕLVVx駹[~^HH!,iSӱSW8KvmڥncƌYfX,f̘#2w6APUgŸ"hfsvpnG3|2̘1?̔)Sp8眱6XKh*# {6`rUPx\\ Ihxidb6v;훶{^N_e_~$$$Ю]nf 22)S%KѣG; ٧h+ȄG(8* ]wzu+uInDRR_}?uT`;=,,l~߄ #A$,GtPUcɔ)SDyy9s, P O{N?LEC`Æ b>l0/ٿ?{nIJʥAPP/1b ÖڴiSi͚5߿]7χ{PH*j|[oemݺcǎG:w̠AѣXp(((*bPZ֭[E֭s=--M̝;˗STTD&MhժJ9#E…| rT U1D.] k-ODdu|+f ө,5f&M\/eϺu!gQG.B!FPp1p{k\}jS-Egƍcǎ]p5GِI%-y,"5O hZĶC<9ঌnbTTT$5aÆѼy jʋ>1x(4#Od  U384xv B0̘1セH=\HhnhE&P鿍}km0@dB?!yNU.ׯW.%yy"o C&?ˌD' 43}>zRd:O'ȌPt$ƒH#ӦtԵ۷~z",ҥZi0 _{߈n'Ar#CzѷdmLB`PTpaPj$IEZ3-}/0CB w nۓe0Kh@N{0Wصc*bp̚5KK(rQp4O$d@khm\9fZWI"#._@84U Scq!23J Ϩ&,@+1vGsԖm޽{_,^{UJ2re53 !^mwxϊR֭[|+mZu,SS;Vժ( Vx`{RsPݤ/+Vn9,tV-YK'GG`:]ӂbPk>7W 8|.o۔/UZ&oRXkE{y5bYơl1~x&MDN.Uºi^p ? B<HᗟY ^Q-0̃;`@¹]Cx 2wNCm(€`ӦM%V(Ed# z7]sJs8L1֗F6_QB!^LHL!P4 CnqoBn\-Op0,@XB8p 5 dO,Ao9)yP_ Rls lA/v0Ġ93 3b ,I@KÌ軶E# ݃mZBEǭRt::tx饗hݺm Y">9D_ ^_))Q9 qk? fruZI2Bݰ!ucwӺͿW).( GA^Iw*ʄ[kƹ. 8ZUɚ|:Ynz䑫rMU 7|ݻ/drmܹ"}TZX$ch{ݑLՖ&p(Ijx޳Z(qbgi[(4ܥRxa;YYP֥6 _<zWİi&q뭷W_^T|(**[?$^U(;YA!^𐊋VZ`nfPDNɔT9C$!{M}ԷhS)-Qh11uJP<;Rз"ȏSГI~j-ɓ'իWsNl6w_ң%-h1\ԭ[ؗG1rp 5{& =}S珌&&$M }w.J]vfeM#upj%T18΄W|XvF@C@kz6SVhpxzBqޟȚ66-@=.MdĽ0"'14YGstD!РC׷ RFWmX)Eg'F2zb:vVkRGOO ?u^/GpZsdLLx&M4ja֬Y_g;|bn4:VNCt/ވrlkwRbqP$ljyMss^RwĚqO,NJſ} RFN%Mf}Z:$pD]]áCDϞ=y79r9@({}}]Z4Ģ% . Hݴˮ,𐋇t pˌ׸sĈZ` ss"/B+.#6$,8w?;RiamQ!^~yDD]ç~*֬Y~78PzAB ɗ; ңRP )˭$EifL\:;^xV%'t:!Տû+۩D-2obs# SEQ{Ζesvؖ.)k|kocTo:DE-cdH?c&DbJstr& hFHayb3R_˝7TQ[ŰuVjҥ9$ykd}ڶĽz#iri9R?/{uA(—Ӧo֗-Q׹#y^"=]M%Q`Xԩ0`Y7sCom!49c\bv Ji<\Hz2~D Ғ#' ah{_)E6nG6-b:ˬ( sYVњhoKw{z?;^;6+"qct8D曋hzxv;XaO#z3Uj'<ш؏+{/S2jkbXtxٰaY͏ZRf٫ڟ) Z( #2qRQ$ xE)$o(~d 'LMH~t~a ɽ+3f!N-T+q9Đ#ƌs=?o 55TwU> 8=#̙*{UWV2ĆT'~C1:<.8oF&'9{a)=Wp',Ņk׿cl> ]@0hoRWU.K4d!fOʠ\Ool cX:ht!Dt ım ǬC5Ii=Lf(bU+q)İeѥK?5\C=ch#~_ ZcǞ[gIlimcԧILDzisM"[a/s|Mz*-EtTrwa}~Ǎ5bHII=z`޼y}z*f|uMp Ah͡2ѭჂSXpYJpU(==7̤G^چEKWW?چ> FՏGxeZ `qմ`?#:2\Ņ{~|x+mBlKah. }P MnГPrwu!NKy3Xhv޴, ɬ}P<:0iCGq IPO}rkn* (I&K{?u_f$ ! OdJK:+\U8N`Ko:A PGz7}-.;)#ppHQ`#$N)ڕl&3s}R*%//Onݚ?[n?2G?`l &;® qW^|lS?Zޔb+P }`,ZsA͂h]&;MPlCkT#s6<;xw`JRp lOGf~OfEdM_@ݨlkXJkܢLlh\©OԨ*s8xa_0E\{&2; x9r>F)uD &,۴WLYMP A B jf{opVQzk.ؒ~Ttjk@luxlWxc k. &Q:N2'凭$"cϛb!lr<[ K.cƌ!55( p+ņ^L-j.~`zIJݔ.]]˒8sw5TTT%>;1G=1tÙ:'QIFl'8y%laoYѣGKffJbM)>.dlհo {a e'K#^4=,,tl/.߮YLzo rHk%BOB UV59ӏJ#b 0@v6m$ɲ̬k>0_Mt{w),.{؈Tkp +c.`soŐu%kM.c۹хnsN}0{lkm6B#zcyǣ$|hWGX(l[dB 7&мZކ>]M/Q͏%bta5-+aU10ah޼9qͯamBКC L{?L8ˋk J3yŧ{'I19U)9@_a0M{j(#b KyO:eU69J =$??'杇Δ Jc\M[^x+Wcl> ]@0 l7z)9PWe64)ު5Ex<f,J> cduG7qu2R}uh H-B8qY 7 ӿG7? Y$({YN`C OZW۱*8]`2ƇoS, $Ʌ$:%nK< ł]LzuZ`Wl<7Slk!ƨu2MF$YFg2Hl2 ;N?Kfb k?Yz<Q.nW(JOi}m[׹o).FG1{pmfָ~,*:NDxX%Ӟ=O #kHZVad&dI":$YgB6mgr8ïN1"ZBq1F ^l=o"鐴Fd WU.GWQ_K^oQݢ+{pFM$Ъ)>OCH IHLaqI8nr"kAŽsW^wmp;yYFB0H&Im=W : u#.Kl\ٸ,Y8Oa/90vzUwWc o/ IcAqAk]U0/ēc2v;Oz];]@lM׻MrYJqUdHN+uj?M+Uh5"iۉYYi.;'BX&1U{A( 8S3u?u{Se޶]{|Ȟl4@dǁVJ5a4z\ *v+dY&&&N]? YYbϾC8\nc6$ձTT.TT‡"іzIENDB`atomes_1.3.1/data/pixmaps/field/bd.png0000664000175000017500000001071715212624223017263 0ustar lerouxlerouxPNG  IHDRobKGD pHYs  tIME;p\IDATxyp]u]ަI^m^rؗKJVBi! .SC Cap I-mlKekv޻X f.2ϾW|~||A-ADAADADAADADAADADAADADAADADAADADAADADAADADAADADAADADAADADAADADA0Ң;[[K&0,if1y4%raԊeFO?Ɨ^f. &Wgz2'w.\v"p֟e~н* (b(ȘK.)ɠ+n6'q!|DؼvoHcP*I`0!¬P3C|Xnz&׋gC˾C`P"AB AFиaf( eǧ|2SG9 Es]~sKLĤJ (!T(_Ał!Rd\A2V,NFA8euowL*H]`D2J[)bK{&GwwCyFʛn"p؉kջVD=TCPft]%驓&)8߽btgPy7 7F+^]A~}op|d#'rG󕋾@c>Q|s4L"CTX aEP(Rb6ayA~;66e~=xtӊIy554 cxSر7(qkh72!*f})gPQ`"&i KNT)EHb?u\HUӳw;Co!;$#vZO,K"bџe®H`08f8ўrx\N o77/[Cn#G UH6GZBX,qm߉"]}خ&U@QAηᩕ+K%+1 u.D1ZXaadaR8f {Chl ,&aRYCEÉP,u̔]icWіEqhޗ'ҏG_AƧ- yG¦Mqw{)Xqj ;bA\yhÎS5q2ӎD2}c k%ߵk.={ncezᇩŠ""0DEkmp,dI;pMȡ9*cg&0IbPOͼ%_d1m[v9ӱRi@ô^NU5LWGR }>wbgك~OOj_pqF(r\5u>dL0HcR*1\_iW-@". 0#ts=TϨ3F}l:bi+;ۈ]uvrF.9}ϬYNJٳe-8mAVia_zL%ew֬ IA]!p(Tdl6K2-& 4F~ >q #۩o"flv)c:#X9d3V+P~0$rm4(PR\p).=Tz\Ĵ+UX:.O=-HU)X(z^^Dmkg|D{P$Q5IN3Er]V0(+_ɵ<Ĭa'cuQ*Ϫ`>eQvJbRX4+V=%_YFرiҐG b1lP^ST|O^%`ru?Q(0#sԠg,:a`WN"v%ʊcX1ec6:5'X$f,T6t͡z ޒM;8lh|?Kּz"hnrX@A҄qU0(Ԅ GQg轃PH0Q0Ic 'RX-G6&J`A0[1 ?*?{0s{7ɣ2PRUu\pE"d{{Qs̀$jxT*5M㐞7TkxbSe;g*SbcRf`S?aXp ?ϨVҼ5(xe21Lm#uۧ=К?f}Z]EWV';\V̊Lf~$Aߵ!}Da~Q_Y:zeu6"6>Z{h-]#!Q]Gn$(=t ^%Q}>gkqDQxCi\4:Ȏ "{cL;9k|+`( E.+6SM-|Wбh/㢽W!9h7X7uJD0cݛwviP86}̜6Xˍ憗Nvr^ܾSO (ws(7(}`x:jf‹kg2əh y[@ywxN/'8kD"`ϽA>g\q4f^AY J\`w^˶p(yxS\b߁X&."5x=/v\a?90s"FjmckeG1h>/d\^ wi6䊑/._,cRL+Z(E {w:!-AI, >}h§Wh"Y}:㾇Ϟ~XةX4paF{.Z;nP,[4n7No/<\|џ266o.8XL,G(>MK1>)¿k8v|QQLD^|hg.3`-a \ ^ۜ%V}V.؏`5D2Tj|7zzSnW=?'ߏ0As$011(OPa)C7*xW20O(D>7c2YX-Ҍf1`i[ +|?_ c7ۅiг$A3f}3=˄!{9"BqRP^4]}TvȆuA'_|!r g-\(M[V쳬}5vnق՟/eb4_1 s|!J.c۶mV54SN裏ƆYD~  " "  " "  " "  " "  " "  " "  " "  " "  " "  " "  " "  " "  " " &IENDB`atomes_1.3.1/data/pixmaps/field/in.png0000664000175000017500000002544615212624223017311 0ustar lerouxlerouxPNG  IHDR3cbKGD pHYs  tIME;2ŗa IDATxyxUU{:I,$;2̈1quTTTFE PQEǝA@ ![wz:.b@ zS9}:{;GB`@Glt 0`A "0`dtc_IlsfUFvrW?sp(q :/-Pf0wB6; y+1kLjɤ( x(*%Jܑ1$+awW]b7}PO+jA'L0n?E7N 'Czcxxf^]0s7ҝO %s$uԺa 8X(J%!!q_;+7;ל& 5aJ/^ycy=@/yD`F.qdVa'Xv's,;2 Bu3n#wZeV0f-onlD6ZՕGITPPMdIOaϛZl@b|dY6#տLQ&1&U9V'lB6Y4<~  !D}$Ix-vw(.)mm (" "CK js`6yռs D-@h!RD01OwBP}56Bhקn>MӸY' $P}Uh7ZЍ%TW! "h2wϠ(+X$Qǜ)]dD ,\&$D]J(9Y2`>ʊL; _NdŊ9ZXNS_e6W}n#`Ű9HPC,v+$ p>PC U.͂H klڹW\п%bBUPBD(bBR,a"Z2L=C,tޘ |A]+ -&v@QVY[ႚz_PM]" tf cf{Y+ N/TS_Mn]6Ch/X5&[49 T_m_k Ε[ "8/ؔ)|-&{x@Mc idQV[[`(dEjbY(y'ە/0`I*7'$K$/plǮ#5^B_k|Q?3< A_.ܹ?08?|cҽ{x222xǙ8q1:0~-'3{!o wl-g26W^MUUSN=:iBjj*3gΔA}AY8뮷g óbJlRSX?(**j}[5ޘk >B%* P T)_8LiS$p\ٳйs555ƈx⍯DFQ$WWk4ن TRW:8ͩDƈb\l1 C/⁩7IܢD"''(f@+*w{(bB x U]X2X}m6^͑H!&&2ctt _p d,|DRbB]HIJJD]t!S%`^63Cۤ/8Ver3FHG붊SSOLNo|U)bIHA^ll!:/(.w/q!_AOL,%(>>ي3BJJ!:/w[zQȏ}Aetκq#K=~MFm{6S\!pΩ9)-Ո7_X%aO}Unrչ+Ș?lW씏!..f=K7}fUa )fZ {F\'h>YQ| gl1,yDxKex7︱FF{Yމ.#' {\o]:%'xF0(_z'15~gb?gllmLLLliMaaah|.~s,bLDE!+VzFsҐem[CbYo`3Ks0f@ xw•\kQ꼧ZBRx 歹S7=3..=D>]}w?fWO,Q]09PN)cHJDe;5|5h:ccF ኎m = w;sɫ`T4#ۇI\\\,Y(J6`ΘPQ v)ܼA _mLmoe [DK遙Nؐe s_:_[?p״5%%Ennn + ۫ g Oֳ@0 Ɏld7F~efn>XC :4KkLܛX8灞GRJpH"ǷaޙSW+&kuwG!o% e0&}|7*Uh$D‚TJ!D4Oω )@n%DN悐ۉr2SRai Kd25 f&}Nc p]"i^R1PJ9gz!#G0 -%^Z鴠ძ-l.>c(;2?l&)&l$pf+{Bȭ3_U5=:* ֿLxGLt_ nT*( D\vN=Vښodj3Bl.A `p^ uݻ&d>_D4bC1G\//?k/L&Ð83S^F ɿ z_0jweΝ :狖8w{޽ . b͚5޽WN;4uqqq-#q?H/\6߀`t<(J.Յk+e6BTo%ZS/$ŢbD`܇ +>zRdkBnV\=>Dz_Cلko |*]V>}:3f{=⾨q9[n}ǎ;8sqqq*%{$&&6c.߬NΜ~ک=].n?һh1X190٢M$Im5Z[-]_*َ浵lu¾s`&; PI"B$|9.<]_OFF/nwYf1w\nviܸq"77;wJ~ kx׏Zj7o˗/ݺu{iW,n>\3 bD6ّLf$I!Z-C y+m[/sǶv]X~:Cdd$=rb7!6<\Ri̚5K̙3oY0l0OnndXhH$I:v]cq뭷6i3""Z(CM]HW \J'^ؾ+ͷ=;=]l'c&;GRJ q s;(dY桇͛ǃ>ӛrrrի߿?%%%Ӿmn)AD8"趂zI+ϑx j$59k7^oVꫯ/_΢E曅iM/4l  ӾiF-g~%ֿ@-ߌ,@u.AOYx5G}˭vL6fg"N='or}MxHQF2yDe%D:~: lr9H+VO>ooR5yyyDDD̥gsJ M/mef;o־3Y"X[H[~\2#dTu }y"k˖6Aox |T~%@¤K)5jl2~ö}dee~zqt vDp5)%8gHMN>Μ)ěçtUNmsW蓈YgF[n5UU̗.z_@B}A5E$@^<~O^|EfΜ_:u*Nn- +S|||caH8^_5 -ݡ˥R@ Zȇ, ?ĎD42H Bwp֧ P(t}W9$/keoaZߝ8qtM7quXaȑ /@~~> bʕdffңG6n?_"ZDh|c ĝ7^)?` O|Ӄ3>Ï@fD'dP艙>u^?uزnqKZM jt_?犹Zt͞=[ի7pCM4Iڴi/{&!!gy 6p}evFhKՅx'Kt]#Jo_C,ШC$\dE‰L )胅3<3:QVXxL s ˇ_/Mȅ'H1o<֮]{XԵkWnRRRbڴiR>}kl9ҾQ"ŵ5F"y%鱛DF,KR})ҋ@V/ab0#yz ~=I *Uh6w?1p}&LOST[ -#F7\y/p奤G"HSV/Lȥ[gGkpáO'^KB< ȘQ5/&X3,{ [ Ca̙deebŊ6ploRGI\Y"iޛ +7 2f}р:6$N &"^iWe߯{iiil۶~ɱQXX(Ǝ[wTD7nx0`('3SpT*?_Mf:B& >+Ȁ x,m"z6h/, zt"#BdꋉذEL.뾧kѣ1c]w]M-%8#8=gt;$U+V76$˥'V$\x>_KOL ߣ?#M#j*^~u?_3~UHн{6Tp4 /o>v.%˾ե}˭v$\("4L$XL':b9s#Mp?_p.ZTTT響%Bs;67̘!=خO:~ RJ4rk)*eh`"N.dD"D*!^=5$[8GLVmLLL'B||<>gAwDv.\tWw@  %zˋ';ZDN[h@N b盧ș|&?%Fوea S_ Gkv;6yۤKzZ[ğ>[z%gd[ ]J~)Bv`L˙|cE u5egQ &CZDzܲ%2D8;2L&WM*=I3ou(l8 [YڢyP <*fpr|ǭJTi$iQZT&%I3/Z%jB$v}Ȃ0#aҗR\E.FzE_I2˳Vl6fgg֦:bQKbђ}p4ZB" Q}6#׆{)L:1fjv !رc hTiX"t|4U| 6 v:@{7vG8p[M@)S0z6MG߿hz5jT tP'˿ 8S6lh5 /2#1bјkxK/Ĉ#/5j$頟y.#*ԉ oWL Ċ {CPZ?38?yZǍ'럆3gC {w_GO0x{?C~G? T_F裏24U7o4mڴ]bs~[zܓ}ɇޟW]u!.kΝ;kxtUcyB?[{!3 "2E8N:yƌsL 7ȑ#ퟆdӁ}x 7z:ln?ji/5e&#pשc{f AOm ߗR.K-^ͷpuc>uѨ@TFE oe|/#'М"h47WHdb IO ?كNf_wɓ`$~^ WCE 9 b<j*4]vz=>ri7j:n7MKd,\oRuCPF5[iaD q5:jШ3_{v7ph$%%Q]];l"yj +LB޺d.ƒ;,mD> A3ДRD())1z> Nϟ@|X=ڌPơMy/>R2I,Bd,"H2\fFy3m Aє|J#F]-[ī'1 n4% Լyg=x1E>W$73Xַ/w&Ry ?є|&[)3SX}}ԥP]]_D~fW\}II5Sp͔)FCit|&!**Bњ6&*QX:;8LTmS4z6gm!Y[W V5necҾо">}t *x (Θ#MVk1摖 KOD7Vw^"yEk 3 lYAhZ7=Ϣ 24C/:~aAAa#W4iOEN92lB ZjMf #!.^~%| uy1ڜʶȂI!bJbU{ Ud-GH {7'vB79"ՉBZX |AOו'9*%1t`+%hVP۴o7<*KT! /l}U=%*ryُoƌF{7z?|8L(8X6uECe߸쒋Y BcҾYDHJJMTEUMN>=IEG^aï]ppñzC\F&=bXA*~I⤮,wz]GB"aC\ b޳O4v8qX)AVSK߱[~}5]sxxX醪oh3d=B\A]W̜ogW EIFFF7WW`_X<c,c18oH*|kt & MqqR^ :9oҨj<{'k$l=TiiWTPRE2GX(6&_nƋ/> t4oԬrQPPЪYqe݅l!$ŌNԅ1ٍ9<~%-AVlV'qj/0ǝi|fxd~pocyC&!$$$Y14HAwHi\i穙$ Z!BzjDg=37#?)%7`mBkA#4J Yk~r.|ը~ZA y=bKa}@rb<6-X'rrcDtPFFEEQZZrG +EWWbk^&$!A\,\0/>OUV"YƈhDHMM|xAy)婥-Obmzݣ Wj&B5Rӑ7wX-r*XK4 : bW_M(ɇgPGLV5̊»sgkk'lI3FfK1MuvoEt Mp7?}iJş/gO=[}JJÇW?݆-6D+ J%*>ڈⰢӇwrI < U*`x|x<5V>$FYtm'dЌdz NS Bqxrkcqrݵx˹d6+w)rɋ^AThNkZڋMGre'_^ @C(~T6_1XZW~*)I1|p\ :=ݼrCQ%u-d3a@=JJYqHrKbJJyf:+>ߞSot>ȫ 7̠`W#nG4>8[ї Lοc9o~=5]uNo q|K7l {,fFKd(ﬣ~:r%uVcwt/­1 ''U_%: C(XnFC0j#;=,,tk k7ZP Z;^ǝ5}7=R~iCBB!BhÙBiAq]"s_F,EmK_n'bAm6.;Bvd(B,6tG,,V8,Vsfmg^Bŷܲ~s"i f!h:Bb(Q8x iihb)ø0t$fȇ`ChMqU!c۲et֟Cϗl(HW+ {{-1@8BH)0h%5ͪm/cŁk|EaU^@|b9۩ rRb0 ၵnA8(jR5t6\ޙ0QvֶyTtXu] F" tAm]->|YsoBPJ cJFon&e-,ˑ?~ٜ;D^Zݽw>L"ԉ ÓsD"t=J*Um~ )%%%xF٭>P|,d``<1/^ñ چ "K3ÂL24ao 9^PVMGV4k;Un6[/ #~SN_^~ģ1/F˞|Dv 3؍4Hi"Э^U3E6~cg<N#5,#DKi)q@ ~BE^3m~ETH!FKJ@$&`KINtf&YĦ%} w{}Z.W|U͚6uu`q&'- $!ĤFBTB $ȇq8>|6VUWFG`"@RO" _JtA&'2GBmh(+rCC|%a4 E^!FbT{h d КZ0;Ь HCA\21ӨMrx'.Lv(\N.o~Kgǎ=rk+ճ?# F!bmt Nhk.$4cRG$;IG"uhOϹƽ1' ri4m#  ІI%Ajq:?B&9hz !%ih 0^3g& '&M"3zvnZ ~$%pD*qO,,&zw0iZombTzC+KYfbJuO]$G[HqHwKfC,4Îm|݊ B^#_Uju!5D.?* M øѣTA Nni6vtJ~aZ9ğ(|ڮܔC(XTՊMyiq.d(bjI YihlZRq"3+bǰR\Z1ZlpBG3XP%8|aY֑׶[[j(A(R%81vi1t{#[[޸L[Q]5\#_{5߿?yyy 6#G2rb_q _JۻqH6~锖}v6ơoIEEa#ppqlj;C\RTVV2o< n ##ӧO?Tg軂IId 6hHKK3f .eee_ɓ'3uTYXXOQWW'9j( os1{LPB 0pCcGXι\.:,tR'i'N /{Zɓy !!6JO)B b7lN!p"߶m~I&wyGlڴc#Ƚپ};gѢE裏fSNGSP5brs# aADt|N:IXB\qr-|ɲjwaܸq\x]w>ZĮÃ$"lS9m6sK.:>`DuVʄ Çl٢ZĮ\tM~픕b "n@#Ǫ$Y"ime}ᮻ:M7ݤjZ4h]HHNYDWIZs=,X}NK|:#kj8tn3'x"vmDj~~^Kz 7W mn,Y_|b "J2Apo bʔ)bر̟?_ոb  &7מW'Z^%\믿e*{,x1T:M ۷=s_iiiaŪۤ"g}u8#lWMLLwЄ XfužDҀ|:{"k:(/.s ;uCMJMF~h!YN[[nvB!o߮}+ݎ[[FQ_T6''Gl6T+co?x %NL сI'&b+ɰcDFQZZj^o#Ď֊ >b$`+ia_qs'/׮ݔ4jjjT+ ?)$ldV򰐃A?,B r0 X`j<8. M[[yž2u}0tbpDC{F®Jtbڭ6j` ?R_['{ABРj^lkruB :ntl()mZ]8k]zV,_-L$ 1BQήl}P^:Z[s}dcN<:ƶWd]KۛeG'Oˍuw A{-wz8x,Ģѓe לC Y xy3(n]Jbqhu0=QR=Mh8xp`]!*1S=N,]˦XV;y2_4 {l2u$g_:(]`0jU5sA}% а#hk|o"֘tBF,W<>ȼOsv6l 6iKT*)ձ#p*o`u$U=D8#ARz`ܴi1l0};_/KZ cŚ=W4UhFWW_lB ׽Xt& {y[ tmAN?r=r6o].\k*A(B^9xHqN]7ľ3X5ĴT4 tK؇2@7fw3]\lX\IXtY@hH3 ; vh߲Gr3IMNا˓fꫯVBwX̳K~MщEI-FE!~-%d&-&aO5:KT"5C eu4$кN5玉뜧rٯ_?>sƏ{A\IDAT{Ír x4bڝ5-'ah[ *ZMđ8KT:3f#D&f`W#rJ~sf;U`9sLjjjnW57x{ $ Zz t"i,--'YXY+jwaGF#tB7s2&k#ՀXK=q{H͚5K_e˖طX'k}h8zGAIFBĎM'+ ϿD}=<"{\.tG~p8ٳg+A( z_fUT@6lC>OSO#|s濵L$1|h".\( P584=q-eXw ҭN;Og*:(mA;nᷯ^Frj QgL; @Bq o8R1ב:y\"|H:1i ENI/Ng$)a(}ASG ?(LRH:0i"D%!b#g~sR(A7H4n/K$:rQ:tc9 HUv4coiW]%t5VC#m_m($5x-SHa@24 N91T7JW_ySv4'C^AҊI!JPwaԱ*a(AxyzrS%;vÍ+rFT?.$-%D\ʑR1ښm?m&Mcz7]" H)~lvʜ۩~-c!&GDʑR6aڵn\XHG'JT#ښ[YTTI|j* Z?oϸVT;&HՔȥOoIRlCq餎س/WP[A?\2NJwّ'Ďo9R~o-?4.Itd;zNi͎yws9gDbo)ShA[{x}ֻVA0ii HAFf7wU8.Lj:]daN:Qٝ $f'tZVIqMAW]}TE %HU=&Xבz-CDw& F e|Z[=Td.~QN"% %CˑG'&H}f0R#E!(GG/u:ʫXnj#]'/lݒVġH-xtaD'ֈBcNRC#a Q⣁ K+{Uhv΄iĝ?G>y/+sbX/щ$6H9#]%; Y)Zs'G%ׅF,Aġal 1oFu׍,Ofm52  0i^ȿȽDмi;*T+A:v.f1sz$=>\QV .W{B֥G>ÎFIq*d%CO[y rw/|WJyi*\%CM&ӄxzy,Vq葜7y!/!%]LJIpTuc /Uyc&]H1"!0JΚ@Tļ\ |ض'"7'%4荼 n >M|^/Wϓu^I}"I+t`?3`( E-4(&@' T8>x(BD`bw7fdoLZ1#AjU*B474G9Z'I<#k+:" Q nm m.|M>:br1zSƝ p@" ΐ펜 ى'dfe)A(A`'hlQbk眛 H.zU/s^axwQTah|}_3IENDB`atomes_1.3.1/data/pixmaps/chain.png0000664000175000017500000051362015212624223016676 0ustar lerouxlerouxPNG  IHDR&bKGD pHYs__@)tIME   N IDATxdus2;)qC;%n"eʢ-Mb;w8^PMKd'8Dqfzn~*~> @9u9)l<ps B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+yEs<|3b{FMf7RD:\|}Q]DEF<}Q`'Qqvq]P/)Ef\XO){M><|ߏ/E",7͠+\V?WJ{tPx"Rh>HqaMٽ^ه11qQ$_'Z{}^/2vYKcܹm[oE'{QX jya}X^"DRx^_?mDIgҙsH>xNےNK̾s|_` mQX7z=n62'Tdqj>\xXShxA~9Gl'IIUJL;rqzq?޽~r{o#TiWu#{>4]ގ;Xl p)__ORή7dpNrK&N:tP|?̟)AxbO}-#.El/"ΎsϮׇ]fz"s~o%{:149$f^}8b8ɣXyrWs+k3+s*#K%yI('3sC>C;:؏M\4,q\'{ 1r^6 ,`nן>OEȿAv P`ߴTÔs*I#cD*/L"& Ph9v?x^{3paٸ^;yʘj[X"ZThoɹq\W{OF{:\d_t^w /cqع,2ZhKM&1|H4k?Yۻ:]kKة:X3?ޫe0,)cXl2]ZiEx94 Ӡ tPpHB;3ſa> uF}nS%٘fEςcכ:%׳(?x:s<8,9=3)7Sj L:˘Vh;Z:qPp']13Qna"R=FsD,D;vWP^%y^&Ydzl7>q m"6ч.875;]s3go)&ȍ܉O>8,WT*bfgwR}E_Dlt;32ݰޛCx[,Gý֭spz-s,%C ~9e>MwR`+tNpFc\̂Q1cSs3۫dƔr~q2|?c2[>r·ss>FjTE$䡼8ĂUl?>ߞwb݈J n;r"{0XPh%ie,[DHfQ>9G:v>xh_p/$&}@rq^4m9a(.Nʱ17 s/6G>m?^ku?-bCɣGD-Nx?~*E_/9Ϯf'O4 S`ګ '% :{Ũq3ۻs@*F ')`LL9=3=bH O.삮^"1y37N0J 0q8#I> x>=]0}fIis[1q[X ˘Sh_2:f;tQ.(މx#?#W~!2ʲӫ%f̤lt==lأ(v:(Wmt\%G~?Dxc/㺑LRu7K͂D7f/NwF)5҅y=W"F6OnwUKG騘S@hdLW)De^ov /{xLo{ q/xV\5L江Ubm}A=zzk_l|\.bkڣ?:;}7bxҐnU +9t\^,-:y6 ⧈jꟴ"XH̍i%7lol-Gͤ%g_L/Gxa~~6bGļe=n8q6\|܋kKOߧf\\FF|dAjsL)e?~oB;@e?*$sߗN,ʵ\2OH":Q Ƣ!Ig{s_ Ŏq?^?ּ)Jؘ=D擘6{?;RdN^;3wbdg96SuW s(W:RX֩S+Fj&ek%P?w$~[9s{#6e7>fbj<8xɸ3ʷފceiH'%Q`Zv/įڲgSKtf2yv~(4.|Z@,ڙ,J}:?%P/Xq};>(bߴ0ݜV`7]~ZS3<^,wrF{/Ԕ0^8jm_:ugCw`B;pT1v[ Fd7%粗N g>MEueNQIY$W3)dލx_J&~d->]hә^k.i.@Ӟs'f>!V^1-G>>rVhύ{w#zsځ7VwAm:KO;bzsc0ɈXױSl.\Y흢I#F:7#33rRl툿o{ nƹWES죘w[i*); PO3)7bnIk N|vnVl|uygn{n][Pt3cȿ gM<39WWIG)b6O࿼l.\^f'f%͏joʿtH QH9"oﳻ._/]fx{:}dzukEQSIqrsVOqΌ)Ot'9{𒓞CԺdO{c9E) {uL<+EL/O_PǗ>+oUnuovDtgfN+% 3cd&Ez;W<v#bdbTx:!`DrߔPw#Ow\|+o+#cZ]D⑊3 (6Ct].4.\GEZ<(OPW)_Wks:U i&l B;%_^'ۋ"8&ۙyye=fS2^٩z ;ukIwM.+ޮ&DuIE$B{Ja'{*O~]B<߱g6O-ol<ŹdtL;܇חq)c')[OQ\׏[/ns?ٌcJ=~M<~6bcvJ9PWoOm^ǻdn.{Jf^=ڗ^_yR=V84pTS8zRt?6N}v<}X`ϵܠXʇ0PdtWt޸^}I}2?yBL8*\#ġzMӺZp}H"D"6|G ɶR.97s#W?|~uϋ117Nl.MY^>_}b۵zݽFw{5.")es8,9¨=z^+xi)/_qLAWvtl#VfQ'dut%qZТ7R!=}v9~8Vk/M1xS A8q؞7s-&^: t|gr<|s~ɾv疟nn1(.K&ZNLNgԹm/\VaSi$äsIO?x7;ίmCn Mt Z|Ӹ8-ۘw1qkLckGmvnvQqm ۸*o"ABbbॢ8q1\|:3J?]~鰩;m,?Eƻe[-fDzEV| -iBSvc8~8_ƣ=AoWߪQ2y܀r/G·swxi(/􍿙^\wܸ^~ñ1IܱJ00,qSgzo$8$ cE,T=]& cro3˟l]}FrYbNɯOoG$nM%i72&jKO+l56o8>´Z>13[p/b蘹Bd1n'f8R? ?a1λd"^yKEI%ǽ^}8*u@Eg1s(WsID4Xp,Rä^tMe(Kn$g˕1ż 8?ox?㍏OWEc7{e6Q4ƹz4FĂ始tߤ>ssЮAۛ^%3?ƒyIzwߛ>2 /}f~Rο4/vn'_N粏n*kf"{[窻=:s(Dԗ66ѫ7a߇>c3#DŽH*FMg^{p/R~ԧXE\\粗O'x5GȤg5U\_\TL 1nV9v26fiWl̍%E1cg &]D>;{q0җ~6bbYK=+jw ;zϥ$#;99yO`d+i##&Wǥg >\vh?E{h9*.=5 Gtt7훘t.dzdz߄Ǜs _ ]4}8rx?=ڢ= \j^7被Ũ ځ Gs&fZl,Y8XDMjP+}]4NZj}8}8$;{Egr$}9FH/:։"=u %r<iA|3帘"k +ؘ/>b{D1}rs.l6x<9tGE/_/4vn&_^˾9ͩGeߧ1$͛mîNV ]޻|4L&IEB֔Gc+Gg2yq4NEȘMcdL}eQԮ+簧ǺݽEyݸR@_/W뭘{+Vh/cȘΎZ|<^)Ԉr|{AW{u|u3~M1BiHj]v9?"gۘM9YTIΟEJ}p,I$~eb H&ĹQ.q+:v DE-(ȌN^'j0="f{8&̞=xS_~Sb,yrvɞjIT[ףѽZz(~ҳs6}ICJYT_պ::Y=~E{DelL4q23ia{ѐ84~!s >l=Wm1.67E''DϜI"jٓKfG-8ۏXuua챛X}>?b;0+"xLb4gñ6651MZJ\jJ87ք2diF9eN{W-{Pp?8}*&ǜB;pgmϋcq1K 8it 8]5䧴,H 6H86&:`kwm8\jOEU1\zI9~<*o}="v")s\_9,@ǼƒTi Ǹ ksTT8vI|8P럯\ZvoӘ&j>ZdL75w# ywt|U/,v$_^hcq6>>;^/ /zxFٗ$=ogtfAykdL^9 [ьiݘ)>wf/28oy2+#cK64uf"{- 8f3fᛕbU]+G(l#9(SȞkC7{*.Ys G?{0ڇ#/is}z#HT)7cؘal8)S1{ѧ511wpi^cJQXŻxylJl=i)\W\to/".x!)wB/8ٸ*o;skCQ;INԹmZ|}h뵂kwĥd"ƉPmӨȾhi!s50B2@=Oxc%nr jfe{4.q|ҧPqB|\O=zj,O^io螦quKO֊ej%ޯD+<,*훢m#.#}sB;'_u~\u6-W8w$vI:g:mŬVv]5d!ޝszmLmkLr#a;v]T@]%1h?ٝG|vWFt cc"3٫]T)vG粈 췱Щ26=* #EaWlOg娚c^=9~^5ca\<9ljߞaCZ eO7Y,n˺Gަ w,M}hщ3OB4:zo}/_<SٌO^l/g]k~9K]ޡjNjviwގJ &5e}#%Ɵsy|L_S1κ_+/2.n=t?gbax|H8ҶQX,+̝\\dع$bhN{t׎Z`ZKQk]:Q2Nh̢luzN=t]TDѾ,]<娛#u{^8?^CǨp elx"{ZQ`O4έwj-Cq1.a=7b17\A_CItz'xfw=Bvv`b6r\Vr좧g؇ GMO_z`>8ÊLn XOΨh?d5U&u;SyrD]w\=_(Q9==2f0Zcc;b\f)йP,Wnjq;R~Ql[y{m^ջ4(S10pDYEQSc$X2k3g2zs}=94@S)j|{O,^[,Na]e{ᅳrshrniZwֺ{͑1eۖL=U+[3c)Ϙ9يǤ,v=iR3'=+xxjſtϟgTُ2=69쑊fYmT6s }$tr}LI\IN_uuIaOѝs|ѬśizLz{+>i< h'qQLqÕGS__]͟8T<Sh+G=n-*3=V-GԒ|*LFxLQcq,~j$'lUI4KQW__2|.AŽùכza}Se7{qQ.čx[R闢C><+KP#(8rL8"NX8q4ɼ)K;}Gl7{1#.I#cbfF{(H)YR~T_툊QإMl/RQ&iz"c2~Wrl^~4šl׵SM:"fO6;o7%CX? {1n-Bަ}G];Qu\wj#d){6/~>F;cWn[kx~+nu"yn"nl#M!}8 _|8Z=7~5r5`WbH9+qp5]2صn'<0s#};y;>:{ n=ffq(%1}oIQ/y([rF_֊nE]AEb1I U4v ^iduyj/͡ll_^7#c1D]+31f%UV ~[>5gK.F=ggyXxO9љZjTmUfѦs?ځ.oG:{f@ .O3(Gq-H7<;3=Zֻ )Qe^)T[>>TZC9 JZ疐UGɤ|J0E\5l7VJf^wz,SkX2Nl-ƕ&88،Rk"jNHǭsTu5oڳ7gwB;\H?7r]'XS-pF:Ș1CGnطcfx#hu/.qL(cTJ,6bKyKp.n+sb҂zQn[=+_%ԝ\ińجV@neX-^GTGEFkNjmQ{,1(q9QgOs3:|QwB;|8w͞ŧØf :ä#ڝ(R^}s9jtխ{Hi/zI,u9\}|]b<{> ]J)lJG{lZ8d/ڨINf~a5r]gu >O{/hl&@㭭ْ'ΟΞ$1,fOvΎi%opv {8fS(j,8vovfIQ=[cc%ԯ+]h:7e^mXGz4]*Cyd.6nĬ%R{ewkѦ1VC';IzԦ)WGhvp/y1isߨ УAD9jT;sSo%bhk#+3l*xˠEznx\<(U8alLu{%\f٘nn9*o:^%*ϼtp_~mG,Ll FD~5M ~c'>Ɠs';I_^ڛM^= E˺\"NOSlkLDg9 ٓlۣsB評tH)J:Kjs,ggS"W^ 1%qڭ ƂjAGǴ⺹y0{͝1Xms+NjC<]3y`׿FE?ʭQp9 lntFh&&#AnZ7{'=S1҈͈Fq/DJNH&]L'5#c&]1[vOu'Dqeljo.'e-XƧ'uֈQ+skctčNj{a.n^4甮SX9>&Fzڏy1| Si%Q鴈VwEsj4FI|tzh'ݙ33 F~,INL#d&7j{s IDATH,5V, /#<|pX4OW e51 ɧHX13~0Z.y6^}cgs'<#5TyDP+>vNw1 k{jKĽ <չR?yhޗv,)W}Q/N{~=2,x'̢AW{%HQ_6LROnnVp^,ޫ~OftG%AQ9y8˪M348:;EfůȭX3&&b ]0I84'Z]M9ݣ|`,,׎"F'E/֞)vw؈EeJj8lvs P3VRK$鋞Nj/ȖztĦ2r8xab7>cs>3'ʸoRl-O&ccj84// ҉BΘi|K3'x֓ uQڹas6L SyJ^Ľ'G)'O8 ) SDsvkFT skq֍3Qn|N`[%K&[q-ј= ӂΝEGdվ/c扛Ec*<}bmbdRXYvGc}wP'~ؘ2n]$^^܊ [{~^mxƛFDm&|_/Ujo}Yxz9w`x٠{[e.=̧V9ݮZP*F7{Xh9y1j;[AIPÏ?w΃ˇWO^S _/΃ʻc|?W7>ܧ8~R.>GFu6콇~_]w~^^c~wL|fұKQq?ǜQ08:cz8t9osG2.]WƱ78aqӫs-ή;zbi?9bٜA1@/fT`l#Ό;o{6n2ĸ]>щ +/17唀~&VNK7?lm (jʹa?kʇcus3)l|h#^؜vRh>GgSc>{4c6ڷ;E#aKgOu/Rs4(򧨟OD#){R{37=u8D&d0<+owTz96g^-j/+NEw=ulL/[Y?3eT竝 {IF=姥3ush|^1MR?i64b|L_w1gw0sSolL+~Et:SL}dr1Ne06jKǩ#Q1cc>ho.< S}L>om|LǁS: fQ"UM&i]i5Sp_щq.nݿE:m w80Cn:AKodLLkTKʽ1ъQ5Q(.\<;.V-, 6$vhv1\}ș}ͭDhXtσ85w=*'Ec&a碠 DkDedc.&ïydQKΫmv?M&Mo-@Ýfo2>%7^;KcS前-yW/.CKٰ1ZP_o:\qsڇ_o'ii=sځExҗ~&+oEMu-^QغG0Ğ8{rn{DHN3/9[8WqZ$(gIW{/{n$>E4L,ZOqXYEr9-w̱Ⱦ&h,BZZĘ/VsIŠ b2ړ>*37J; ǂnv/7bQnSF݈k*KP/]^΍~V7(AmvtܿʿEQ1`?LSgḚ7Z.dmA s{=Uh|=& eBquyEL`4dLy]*TtQq~ؘHDX4Unjk|Ž]=_׺[1|>>~#>=OE4 k}XNrѿouӞ;0}qHX89J5fܕrxydL,.[$INӊ?{A'(3EE '']`R(pv)ڱ%Ge\K3}~~c7s^MʉnIǗou6=u7fԋ߭#6#>ӠQ4As9<- cgl$={ې-W/۩/[:B;mnH6&3)g:gfO`ف>Wd''eWqc{׊Q^ ;Eڑ1ٷMʣEGޚ|$qݟ|bM7FTgwTC֥E2QBe(cOEG~xn,V;q~a3˝eOKKւvuߜ>>"9ȩ]']YdBTccʘKhI`y`4niFiiݻCv*~v,^E{`6W"ƾؾFi:Qhv'7:k30 DK~tr%30{NkE\eifg>.y/WE+عYd 9f,o/F4w mě{ZI4Z %?˧Oe,݊[v?zo{^??]pbD.???TNމ14u3ǫrTagᒑ1 H8<:ځExƉƶ[ўk%Kt 3rQ}۴&z59 a}w!y7N&#[t/p{3?(߱55Ք?E'[uwΰ$X\A89nIܴcb.E\^^w?"⭈xsvl#Qǎys88,;Zp/Y{oҀRItwB;lm6ㆋPˤ҂?5I$aH'*Ot7eῇΞVwU4b{,(;*˞XZ O?t/_lƇjo,:5aB~i>aXzb=$|oF-><1vIz8ySf]*泟W{ɸ.o!~1uspL.F.0=1\tI|?/1G/{ Qhox+SgI-kZ2Zy,%Y~12@\="H뱸~h_Ҧ0xt/ӂƻ+U|>[4Ͼ 5J Ɍ7gRe1jyvx'p'2/ZJhȠ~`?w_퓂z\˗'w=zxnvt\sʣX s:C uLIמw8vx" ?HԥA.8.|Cv i[Ao y"Oۊ6zteNzfGIݓorGv<<LUWuy7b%F`9խ|H Q> ~b?xz_ %גO|<7 7 wW2,Gl:R)7 <3k^ЍX$H@LH#5CÄ쇡21~t8q_)Dj!E.`!A \ At7*~~/73NDEfʺy3|W]ޅ?k?0o/ aQxoy}- &u?3$υ-ɯd0T]˵ߴC+KfPzɾƝ~.+S4b 4t'![&/ˍ|X~Nhi7{0{_`0.Jf|~FnRb:;O' $`FdB{wV35ޚU9 E >7_w3$p Mp ~e 5Wu?&fm;aډw2X['z `0\4*|*{ZlT;FpM؃h&Vj!-{ Χ%v4<$ aT~ ;hN N>pvO}Ql@8ш\dy1+y/E潬i#/6`0 [c̤Gou tJ!u#wbN`~L{h"Z8)(zi1U?PҪ?K0`0_ ؘ"ѵdpy:{㤔 UFKv<]1j%#c{ ~|xkNx `8PE`GwtKDOAtSh3^ZeF}9g=_Pebeh OTc& & AR09sWЎFh@#/{|7ۯ5BڵS`0 (@\LSݾLyx鱟U*;RnRR3gBY4B ш/cpf)߉|ǹ]@W{hn0>g0N:^a]??G!Ս?F0oߋ4םK2 pp9'_q{cOm'jw_sŞFnk}JZN{4gЈшfzt|%"2U눧yALh7 & }Q"+ejdžœ%n;Yκ 0>Qh2⥄J%dB`0 L#1q)7D籜9=9qWDr<р^1|wڮ5 Ð~} v*chvѝ#6=}g@y鯗 9,F`0\ 0`0ܢnIКS"']4ʶK9om{P01ҫm^t9R2ANbT1 ŜQ1"D+*rL)v`?R~ǥ^| xif {;heChK~ϣe?&}}oyz6rjkc]>+qD|yV*E?p׏m o~[dW(L 'd0 & }2%#Ijmݵ}"Q%;h]o02V.9UZ?/,^k0 s2&{$Q0d!4߻hn]Ѿ>h>_^C|&*eW7"l~j3f32=y#q2t~d{gS9⩯=瀛g)2C ÄvW3n'gF?B3`^U4_8u<;02cZe"U>%`0 W;7\$1ZI 1 еMRW.XW"e+!e1a0hx^ʡ<ž `y+|v-6Fs%#ccJ)x" ՛7*0ErΏsIlݳK-}U  a?'4' 1.pQc˧`%^|hI^t3(wa[ʗj"{V E" H~:A_n9`0x,)yÜ8*nKI.Α]y"^4A2f)b.kv5U ̫ATޗa"{-٥!/rӕ IDAT_Bׁж>$0Q'Xt0yw+%bHpxv =1 & }BNx=vEv zfd_Zs,F3t\6Д?°\v <1ґ$zJ#@z oDv`0. s+EFM+@vE%9eOQ6(DMVnc8:\q}8]\ٝ{CD ww[{%Z}2 _YU8ʔtWǫfZ< `7qsp%RÄv?9 pb\{_E(zs~Үyӓα ;ֆUsJBBs `߻yf@!]Z1WR\ܿ+k-:ADAq= pq=n@EvGc\da7E-J&˛s1 Ův%~ǟ@_4Dxv%( v{ .BTTH";Jg~V÷Ǫr,aƉ^:#f*5qe9O  a@g t(эpDnjn)Q?sLN;^SZ} k_һ g0/ɦiJ$m]lH$>q2䗁EAw " a@iUKȽ`~襰\cbs0Wl S%0i˗<E4{;o.:[&Kʐ8r NYGe^(98|Vhra0 6/\`K:m ܌'scN\V:wGv֌)EMڝ/OÅk͵ǎ.rhw?ԻٕŅj/ko] `F"e"95 Lh7 vJIx,[G:oY [2`!JDusπY*vy0FXK~e4bhbv5q4,J| t\3">F+&֧DV99- MDG 8 `n~7[&ړ]Zap n#9n/f:xJ,rojᆵwm C^c'w䭻Zq I$)'PԈHN Ĉޟl'$$yႻn6Jڽv 2GnzWd, %pv?Su p]xd1z/"|X\/DI·"d\ {ݬi>懀=-7vP`{ vXJzqfQNް֙#U)-okj?H,w`0 wWG.ktox+'D/p oF Q=+|_\w՗}JqiUqQwxk/-?힫VEr"Bz=q"1.SsCјJmzhw ;!r۟;ψrx`8`B`\zm)4؀!s z^c&qLr*dN=1N|_˺=,Ft Flߙ"5Cw5||l/tu)rTcJJo%2=Uu~ `80p7pm`ވ쓵kd+Bm!h'\SiGtxu ޒVJ*r;.NՎ9s;vbB^1Km\JIowձS BCaS][*[UqPfHǀжqM[¹f0 & l7=H9Zf-], eͺ)dz%uxNVtlX95lY|1Z T#zJO=fL>;?z_ξ>2+^cÔrl!`0ǮַZFb"{5C,Ҝja@z8Qʃ@|Q\V3#nv'9,Nؽm+""|/P{b;D"xtLwW{/*fڅϝx1aَ1 Lh7 ~Y~N*N.0QS2ڕ34,'L,5DFrӚݮ8\g^+~DpnmD獉0fX `pop2`Nd& ?Fd5 ?8M`wHsPDr{Gx|QD)jo0=".nqY+_8?q9*"5S";9|xACb޲Ei^HO& pJvτvpqv -ÐX#>2EEG\q{t|L| ڠŸeu]VꄣݵD17IGpEhmDd |,>7>*MǵQd{>lVe침_ w;?.`0?_5N#"{+WPM _ W'.8SG6>a(sm"rNM2TLxDVk&D/"CDxSpLk%_-~UpEc0.n0]7loU.1P@,D iխ#!s "3׺܃+R\ՁrgR娃=EB1Z&cccyJyW3dmzǔ}|=Yݠ>5[KxA|w`0V wW}{L/[/-dr1$ZDJ3K"dr9!".vyN9&b:o$ j2ӿ|)Ni}Z%ՍqY5iFxNwR}D}`80`0o.*,U3c.N c1ώ--ɖ(S%<& MMÐ.#'j߫ 3|}ч.*LȘdϰ97]|݆`0V; G/h]bdDqO|~_ !sHq#hĄ8qP-]rTn{WΤTb­=%Vw%v>%{6JFϽ}FqU%Hf{hoʱO hV?@O5 oDK =RJrIdT\@&S*$#, Bt,L6gn Oecz,Jf]ls.UǢ ;aWHRZT}mqխj: w1 a9E8q5u y޹7l.:f.+4E8-Vi!?GRLFhZĞ|d`0h`0~ }\)ڔJ&(tpN"RC ]%Qޚ@]֖"5)-}*u=}f$ gٕ?W.T[?Ԝ pUU?p`0 pWHVXմ /<11m!T|#}`Nv R.=~\2SFxDGqGQ3ܘC=őN]!)Ee&||e%)*GT^vTq_!zm Á a@عGPi1[2 eix%RCRDR+Fh"%OP vD X(]j:JdQ %#JPH*R`Ie~ՏH$jl.PPKP7O:M"l 1 -<]LX* R:ɝ (+1D y"jmg)c+Ap`9:)C%q2I=ZnؒTx@kqZ 'BsiϷ %;_|`8P0`0/hGfR"VVprpp$˝;SNbVc1=c kN 񒸏 )R4"6Fyl2l t5EQL8 W;ݻޱ2; Գ`0"pp `c-}O{R^;ݣDT}`08Uz~R> ^ ;V}HE /bEJQ E$270DxrNlGtR~'&HO.FE$Uꈕ*ۓhtWT5|,fOV=@v嚵ծÀDdHf^rvҝ@dž$vK;AcEt10>XGA 2y1T*"DRVP`'J)?2Q8[MյlKz?;Pb0 W=kŞ5tnVTB{޽خ:L(U^T+9WcQ2SJ*=00]%s{ne/wWϼ ">~! yqh<BI.{G{Ka 槌  bc"^N P;nq>HĆ-ˊOO]/4 "qh9DvfDzA&& I#Q`#GsCHpm~_%tpZ׻Y["zk6 U w^?N7u`챲Hico'͙18˘t+ɞB@k##mJI @tW+'7V}?kEW_DlTTV+IѕN`0˅"eD T$f^ߙz#e`0\XnADv 9 ap,W˽%NJY ! 4 yHlcĝonb/\HFTʑB.mDgK9Xh.'j]|[N0f{=_3`]=S3~FĞ]`o= ;<4蹟`b0 Wm'CCd SQ8DnO _IsP.qkm䷥8m5UcYP re؎򸘅y{)׶][8綵›۞v^= aQұ1sl "#"z!j~(w,7s\褗ktIrr2%by#O6gٵTyXl܏@ȇxم_UKZ{Ŷ]%pWd \~ &`x^±+1Yoc0tɞأvoFluUhVV|B_ Yjbۢ+EJiHkQ"YXȱxU:+.IM>o>nⲻs^9fO?BwA?Z0`0?f{}j12NݘJhÁGee`P/Hs },!5fCJd$ ZD::J Qv:vIJ6{DzEdm*?R1ۻ#pHv{Wz}DO|ц`0"^;+#S2[x* O#z[?|o"b{xKIV;|,P!Q3&/"T'T]re8F. O%8?,[縫׹^ /Gy}k þ„v;WjYZ&Cs@o -jw iVÝ6 QV> (rIG+"bCCPt9(Xͮ Q\Vyoi!nu^rѽkJRpy:_^I QL Kmb6T)ce6u4߉U">Fs!/%A,X$fM"##ɎPpg`d2K2+k/QZh77҅n>j۠5v)ebG;pw;m'!SC~ wy5Ȇ`0\tpo-k6]\d_ZhQr=Ux m0_Ź1b3jJGL^b fG|%(iyՠ_wB NIh']Pf 3T H5t^!fq2*I3}Vy"~o=g y `iS1ұC2Ԕ=6@PFud&(%d/ᖔH`=p줹ٕLu"ծ(a IDATZ)Vڝhr*y]|2Jf◥VS]6Ն`0\4ppkӵM`+3ȡ؛1Q2TRz"pCvw~}sw}O5 & ݗÍjG;qJt ڣ,xB5מpfG"HJC2.vcFҩ.j!&Ɓx *BaG }f":tv,~a9`.·I'ny/y`0XF8~USxvXbS^zZXLy*<9pkS=\:7NeJ|v[۹.%Ηώe-"FF) U ~Yv#b|-+)-%uxb,PE$s^_Iøw-D!W0`8o<( 6y+JƒOIF& Eb qv>…X%McfFJ۩1"{wCծA/AJ $|K4{rmeg]712|j50kVvݳ@? '`8x{ ǛӵVd_k%bB{-<ϬȘQ1Wfxß;UZe"nPP֚$cn)-$.…qds{ ~.AK 4Qى"KzjY1=|{Nc:/5 +9 Å|OKѲs0% *oqѓGDdL H綳r&9u Li/(D絗FDXd LGT+I"ԜK̰쾹>4,t12@\bPV(u w '`8Hp'$Bj"ee LGcnSQ1RtOf'c\,fq^vwQ? 7Z*PgPe"eKf,{/3ZgS0@^wEDŽ$UvIJR Yʸf®-{T߱ Ya0`0\88HtL2aB\=0o#n|Y,-G݇b'Ut9SMXOEDP)̊'E\GBl\;a_Ngpg^KlX V\m*tɵN?zP p['Ǚ}zb Gtkqn_C\l羹-QB=ܙrk3,'6 1ɹ2Q~.JfђT?KR8ŀJ%]dc[9.+~o}ڸ`X/pA1/*%Uri\u$ }T!|!CBSEr5]Jh!sŅe,MMFƤcj%B&SmQXZρS}ߓb=DMt?e\D۰xv{8/%P QbVڈ-v%Yx+H0tƟ .17;8)|8.^̝"‘=7{-4d^Knvw)^vB.۹qywv>{4ѿ6.k0Vs BU:v$r=WDz\^' u4͈M4bVQb3ɀ´NjYFgi$?.y/PPvߪ.f=%fGvڜ;Ny? }gˮ" |LGg‹=5aan0.(rwSBK\{6PZi;S,FA)R#Cڍܮ 0HʊP1YNv cv/UO|I7;ȗiRCvo0QO}kV% s5['| "R R]o.vӹקa)U'{F`OFTs]fGyi /Db=.΅"{t㢌zAaQiYcǎg֌;GKQ^ _*mMlW]lū՗ $*ޞoHFR:qrԖz<D_ǯ>'h<`0, Ål7\jJ#dߐ.^XPA,zˈ퀷R$9Rꤺu!R)Q(!ο'R^*"Ep'?RӤе_ٹ| c0pNdQk}W ۝|g<`0,Vj0.kn"\rYM]v?办}3N$m` Es U̖E* R"G_ ջNgGKP#}(aPE; XyԈ3u-RNSz˧@/`0,Pd*vdW@9S /kB;Nx.ΑxOE;c.}]fy9%o_r!WzK_bIQJKR#|>mEpۚ/H%g/a (`0\pϾ܍M|L=I&>Fhg',{w\fOƖ*[*uJtu)ku Α8R7t{vYoCKXznp/SsW{5iONA`0 pB8qM[x9𴚶1\`q1Rt>o@"p&kͱ84V1zNY-H")RREt^2]aG$+X)*l@e]ێɜؕ╰@m8M/ d" b^NNyqɽDqXP_n07Y8הECIL2c3T';tܵ, U s ;^ա8Q;Fss-3Kc'ým^sw>@#h8۹+. P oxax  .؊T/d)B"\_[bn4+C/x7]ȝF[!%?G<_ڶ l/2YcFQw,R㳜4ϝ=a C1`0?H7G8tX;do%46WjUCiI#ūbÂ..<1DGl[Ȟ dNwDvZ _|׬Z)fMH௩h8q2,JfvN/=7mX1 \nphΖA4RxE *sh)E +*%X?:loG\M2%B{鉆l\NI}'gE(!L~sNخ q8b^Xⶒr.ޞ|}pٽsˠ`¢c K蘪"dzp-%I4?L]"A)8YmKbdP倱Y *Bv=u@4>pӐD, ,uXq*/ ~?z(Ge.ݞ ' x/ѓoÊ`0fop2Y8%DU6a{5{N]©AqX ` Ww%s74 y;`tyN|1GXNB'386==cRKfwA% NTZQe,( Dv5rIy/MlWE_uCu0;ݹ\{*DZ8~w>"a`0^<ǯjbI\dOnܙ^3؋b,<К{w3&p0u8 Rj";L% q.y\챌v%Wɏ5Wwwhx/i"@lx]/9II?Vr1r/?[@;-q' 5 J1  .67eWӍ!W?&j*'rڗY2K~//.B-VC@`G ];xTR"6f泿돡2Klcv"`L.}R.Jf,y2\yWmX1 W#&¥67.r;L_O4ߓqkx ',ukQ1+L~lׁ@b_~l|b,f_# ^&s~2b(=9"j25;,:2Pnn5r[@wc>2^r-!<#г?`0^-xS[xʌ%=2H`_e'tgYmd9 l\ g &"6Jc2g:Յ+^r^"科׉BIҵt /0Q2{W#p;{q1{ ຕ9Pp<Oso ѣc`0x0`0\X\&_r Wܹ { o$d{-ț&+$+68.t#5嶫1 )kT_vp1*Fo#S @B<˂iےdP%~ODf+?pr[]syL &/^/4.=~ X wcW}內}zt9q(% O/@Zf;XB9Jddw.vb K"3*z=y`veC.g&~K%rI.hw9Ÿvb4j0d1BCYF`\&O`AK-KS`%{)|\d0fYl˜v-+B]Td-3ծ#Ũz<'c&{m$c,N RGb-[[wQ2RܽsRS'``0$| ENPq8S\|FcHٺ؞4p&]_/uK":;6ƭf<>#\A ~(:hA^+|";kw΀qW 5`0\?>' D.d-^x ?zddVf93'aIr/q{J ‡n76 )<=ޖݗFvW51fnѨJ8,넗Jכu  O+?ǒ=g +u|WtlsF Vg\>cfy猻 bXF`%:O%Zz=eKfQb mI$#IQV'fHޤq] #N<wd33v~[%#RRd|cjf;5,πEfj(,D?C/GQ9".R֊ؐ/O?"`0.6w WvD)wO3Î#'C6} kq7I?"3;5b==v/+D>=ǑcѬvdPc8G77[.6C}pu:.(#A 2XLl۞*IeAIj6l73N˳1JQk~m#z3[ W+1G`?:w|沯e LO}-R"Ya,NDqAٓtv!/3Bd #Z\߶Y#w9<\J>ڶ $\o).mvg^}lh1 ^¡VZt-3RB˸eI5tEy}k{ ~b7x~4sq~)I9c;jultL(G#\ިߏ2HgdL4Awfuސ36;rsAr%kߗY:k팻{ 觌 B`0u?ؕͰ.bb)^h kH:HI BqwXqP̙9!'rp.UM v<,GIFd"]ە^Gʓ3~b<׊1?)z]smc;pw>% n+^ϥ9ۻ-}\DFy_`8| omKbc..4HX3ӽNכǁ-Vxzo 53M4|x[/tR|쏫= Y,9p;opG;;9+:JW/lOɕ8#W}"&+" ^|7yJqg gݮ= l4 V"z䯌 2n0O ˆ},UK 07 |+mƇ+zGt IDATv1 !" cfRD NpnQ$#Ϟ,?%ۅ},?`bns}2Z}މ{^w':&~;vg([F0NxDO78)CuK~Zw=D? .pnz'ĵmekoY4Vw>Bg~wams(,W^xpII)j'9(,J顣&pMl-&<9k /p+(F#yl7 >F~*y*&cTB96Kj912vKR %fĽdϞ{[ Wn0uoO Ct4I'&W1'9A>_ %:Sse\os#vUsgHrQsG%1%Xx*B#ߣ9s79i]AhRU;zsw+B(&k\qZaj%bd/ dxQj#Tpb0 m+ lvũdWDvT1yunWn7{~\0_yj4xH1*Dj{r eqs$enؘÉ'dT<&&vأ)<=ߖb{ߩK`dI(}%R!۩ozVj!s]! wD8 _j.Z\_4]#2ܭq'(s1Af*f 0e3y 9Ø"=TPqYqiwPQڋFnj*AL9ЦOƽBU~|T^ b٤qYKrr -/_6,!euKb?|;>kׄHdT/L:M"lp1 ypɕMz5"$V-VSJBHD\h_Dtb?ثisLӭÍRo@S|Nx^_xگ"vN,Dw'=p !L[p c\Aؓ|RvHN6(!{-6OT!#z \$b"혳-rg5^0`0_>1dtrWSHjLvǖvFn~7"Z~$m/CsNF#/$[܉,3Jd vd԰T&~&&Eٮ?v}ޒ)h6{A:$&;]#n.ݐKEwZ85g mo'$zob0 7KCKۋeSfPLjIEd)G$*bym_vlᜠ6v[sӠG 9 AI+]sPxžd )!=w[ '[-HeA$/9v!7Sx/3*]n_3&x9Nn j& ZAqOF'9|,}[wb.3X^n1/ZjIJepw.ҥo~w>"`0Vn{prQx+i1…+(Mtcfb M߀E O=~{įeRA 7F^41;3r1g8M{_ق9 4;Hn;!P"f~{ZCRu+5? w= ++`0˭mr7ˉ蘵v)4]-AMzs9|پS^D%I4~?whv (?\hM.#u=ʡqx9z|6eȀk>my; plU5n':JwXt_\|{e̯AO}`X۽ab_хn:s HGYJT /<USxz}Q,Zx }&UVSfGL8]7Lwzkls˹߆p:&5E}!c0 @jQSd/1RD"J2|p+\̥ETSt`0J9n#\r`.+;<Ŝ셽;EQ1UF_AT*WJ;w.րc@Sx:YM _8=vN/Vx 1ѽ7qGTzK)b|Mpgq]rS (道eA-"{Ma9*/جAu{ '7;}O.JvOdɂwW"UcWc=O"ܕSNVm=YΟ,:`0J˾:Ș>G9R[v)2@9<0ލ]쀰\EKr2ݤ?^cK9}T""Lhvu/*lp(9%ËYkp+8ӆj~KVdW%D)L#Eė©z6Nsb,p%_`0r{ [;t.TD{L_*Fdtqoh O%ބd3^U)ǞG(,]Eٯv;zI+mHE,#?DGIj6Gʈ/JQ2}x蛟2j0\0G`X@v{fiXU r $v!H[>ӣ38 J!%Kb}K6)c9?V3&6F_Fo f21xPCZ8nLd6[X'ӻ׀ vrN#3 RyJng˒]Kmwp5%e?3jU ƪ SHLD~ңc =jC`0hW0XSR\V29Hȍכt(}8:4始+<}RxZZ6LJGQ_VQɅ&GK#d4{ C E׆cJ%a%`Ɍ}~ڊDnw5rvEQ2$Uujv!F$:;XDT" a58r)s `)׫U治x.{Ttr?|/F(cӄrʐN5>Rf~yMqcL.;E 9['}۞)IFN#՝#̺ޕv=L]olT-tw_UE r u>'9_U+U6T|T#5lOʗFQ5R#@&^<%r3yqɼH%,W|h,07~Gc<4@IcZx.HČPIjw?Y[{8c5j0\0G`X/65NTM\v76}DlLI.+e\Z]|f)?k/rm['fF .|N5e7'fs5[^+p?[uGKn'FfSSE{;.dxn"v]I.V/c* +g5%bNNG<~ d +[d?E OErJC/1Qs@ވVMPx&4Y?@[xJSzi]b )!硫gvRVc8.w\X{]xg{M_'!w3u%.w4Hdv@-P Cv콍(IAgQVnF2+ ReW%VoDwiAXh7 wۗ4Zʲˋg 8Q&Ja9V#^-ŋ;uR.`2.ͮ:ٝ>37& i2Ԅؾ \v#n] 2ۻ/`T29'vngns}>4,-uB{OP.;cww]oM8rYS~okZDH8ڻ))AO?bÌ`xe#\rUt7JR0#md&rE O_D^߀D<<>౿V9nwtvp7cJLdQ%+K<%t#𙴓*8آE]s0&nh%;s"cDؑ> q&`c'h2ߏY>'v1*u42xbHeX"Dvȸb n.y+ϡDdڸwӻ%f ݮp⚶]9KfW,!Q-<=Ըy 6|~~t { O {Td_=B;)2e' SMLpy輙^ D +EDuMdwy1=ŋ;}Xj@eRQTv*=WR^Mmc,Tn( Q3sƍ+ ]M#ݥQ;C!KS_3j0n0.jnrٵ*ƪb{A.;ew\-Ʊt\ ƻf IDATc,Pwm(tfIQt[a"cّv?8ZLn7[ [I+!c6z}6@}e[޺ʆ>k/މ5^6^FIUJɴ2~YOa`0\\" \6*t-ƌ((.Q1t9VۗۮYx^t0^a_Ts}v;{@p.}BY2>%Ʉ&vZ B:l I ݹ^nOi< eb{FxTlTwOuk+W{ՊC/̾pj#zO Ľ,`0w[4K׻ؘˎPK\,ı4U49Gyf;0.{@͞Ln}=jׄuMx_qV|fG>[c3g2JqF{7Y׮%3f}7ٻA~.@~ޟH9[*HٗK/]2s6{;2o@ 3mO8t-/mSEb"C1O$KbJEb랮7Q`{1^\ '|CaDi_\Yiq|.rۋrKF7<"We# NfeەY){l 5]QCVE텆`N)3*y|ݦalOY9 Cٰv /c;/J8U8&(eGBdPrG^,~̋{IofrS IPI'T*/j_Ѯ c\J**b{OhL8q1x1p\M|'Som4_4i[uvLQ2]f[Uy''OKb w{5ΎK'r}!V>{wrn)O@c0&g{]Mmzd O].%%b*=eUMvZk`׷ct(,EEs۝"rgsRDb+ϪXL$"{'dibQ2oy?ѷ>m`8<!w_ lfٞRlϕg-z)7,>חs+*kߺzwV7# o`$@Hzփ"3Ba83d6IvWWWW׾wUu-g~Mfvs54~s>5Υ7Gč&^V}k8~gY9ڧj$t}Z7V1Y n6f |a&sG&]4r`{l|: ]x ds#{q? +}?fwVɪmn_= ?&V.j\ _4<Ȏ<ȣ{#cpcnv5SXLX6j0 eO/x m`R#91o'^.B-,j2 )G{gw!5m{nK *jTԅpP*u+T :(ծ0хq{%P.raI-rlq&Xj}Jv%9e8^@a\)!$]lC/jsCGy\y]) 8A#*1% 3vnTtk<=, Zn Sx 3<2<~Ӫ]_>+/Ȯvn/4q]5k`L,w.jVHcg9?moRZY󞆣w RQ5W6z˵-8[!Kpwlgs"n;cy}+չ?N[剀ڵ4!V{V=m\G#}۸}; WӒ9 (S0R04߈F `Z8, v^";q(i dTؠT"66 &e2RFο F%d8R)E|>)c*d*%dJ#֨Gq O&<2=x)3V4D.vYb+ xzvspں[csb:&V|mVY'S;DIE vM{Zd./N sÂЌ Q+4<-bd,Vlg=bہhH_o,TPTGLU"RPO~W\G#}׸=ut\^-}LG`^k3o5(q />¬vjvJ CHV{k(ga1[B7abU'znMc\9s:w>mnnm I8 咻]h:84&"<;ٞjWNx';703Ry_qnj#Ɓù)1V$wNa`*wyS.,#S0[634] <*!/N[]IUc1Aw;ةڅ)CYE_(+߸}\ߎ4t'V=% k&(rw-m򨮤Οv~CVm+oBqZV}Gn^|Z>NCw6#2=</~F- \wH.R9mU3sy'Lo[ڷ.{5j+]EmbbO4]j]\OH^>6t Dgc|eZ<آdƌA.%c<زSM$Krvmn0?~G[1`nw]ٕdgfb;u~\í_<̓w^.s#6{Ji>Ϭ+:=nW=Zbܡdrn{NQ2@rWܱ-{gvJ nw|n`r}_G\[ OOkOsSGyB\[yBzjh}*<~RT C|>EŭnrH[kfc4B8@1$#ߞk3A|bm(->wG=:%;=¢HY GXsiwN.8JyRU6=lGwsČdCOmv%#F?VA2f{Y,P`|x׵~4Ѥ fn"= - ]}6 GM8et\ܨԹH-ە ۬+/mgZ1[U;r>$UĚXzՍQw;`Uj1&T?5iyd=<س&Oii5nc%1ha<9dd ${lvˮ.ˇ'O(.גsGLvџv͗Fv.k=&)a]\F1#Z PM'hNEI1] -PKґB/~pg}0PɕFиRkE0bE*cM+?8xE{a2C=*1g"BERvڢ{ŃfA4N#<&6HZh~A#"vx0;<#=Eੇ7yǠٕT0!pT%<3Rֿ#,G{2dm] zn$q=Et,E%.tu~_2 ն qťٜ~x'xJEf'BV(.ad{7bXYbR~ߵla'(Iph8IQ:>fNo]#~8Ja¥ 'v{RtGm횲v 5}3^*=랻 {*sa]ۉ(^C]v9ѷ]kWo&|^;} /LW/$פy䑅{}+oŢ1Fa@JMn/D(hgs#\cd YCy_qnl#x]vnO^ 54='O%{,= r@wP]Xj(p(;k{viHiIlw"~imM2fH$ !* WjC_4<ОGy̼{k1՟k..;ЋE4\vtr7h웫&p'\vDl1G{D`o!kdl ug!ؕJ`>{bu5Mq Ax[=/=W'SAAڞ/Z7?y4rbj^}7~S=D nz* ڠ|qe'cm Hw]*{4&<\ҸN`qX]%ðSQʈ#2\Oq4K 0?o\GaV/Lfx^OP{Un; nd[Vv; e]Z[oGHx=w AϽRhsPDNnEjQBPwh&y2a$8^qq zX%5R)չo;-g4>!d dĀT&`$]vDH΅u0$5PvJYCn%;H jA΁dֿ\G#} c7e8tq_rL=Ӡ.Le? `iFeG@dwϟ8?ȍwS=&'CK\bq^Qv(uZ= Dh' %W;)@Bƌ ĤЖjT Z8~icmg{Q狲A(fWEQ[YAgn) })'Jmv/]gM IDATU)^8OirG[-_oOӢl~5"& B'O%d)F,>pPq @ʝ*wpO'̭MU3j*fiƤr3[2yINp uQEw/7UF1OdI*?~BQB@Ȑ>BKϨn-L, 2K1LDۉ(>uHj-lWr]UM^kN_ ٭wşZ4<ОGyLUBPq.m!4{\v ,Oeff0ETм (yUv@2Td;Ć#&On}|/,ҹD\( 8I!zK&iZUVh K۶"۱GӦRҜ' Ulbb7bE=wREuE lwLtQ~tmTp_هzgކ~P߲@`R\*R_$0؋s=,p*eԬsA?)w:L2ICx3&rb0Z#Z7ERSo:p '#MG.{=H-WG:&WGa0?siICKTR=Vy[؎ﮈN4hH*&\)jRK<[b%4.~rFG#4n]S,t= ˮ"\~70\ ˾a#apqOV8/"M* Qge:ʟp1FpxKvmZxwm qaLxwOdM2tל$ۭN{ To^{;Wcn/}w*8vR ]3YS BX݉- }3d?S ;WQh2RBn>ɏk?'<:Vn .vAxE A#gx,-IOWy`&.S4oLOՌWQ੫S,OG[Vv B}ˉ̭^E$45e(6ʤ^:Cn w{3^hR6Z\NJZF.xĖ}'}n;3وb{q$Ghw*g5?/iZ4<ОGy$÷yP4_]\b\vLe/(}XN}|o~?A2RH*|g{PMLB2P)>ؤNR \+#c_p-~':9 . wkr5\CT~p ? Ny\k"ɏk|1pTL4\/Znߢx A8up <3iiHhOAtw!𴅉I)EŬk9׻F>bX޹2RgXt wcNviR pwR%_+oBRݓÝY9`Kk"H+=8{(כ81$U -p*q]R{bQLk9ֿ\G#hķ-!cZ]b d"=Etڟ3\Uehe2FFlOv$*v K ˫[ҒZ渢h˄Ɏ83I`[݉- )R`ۑ,ìIR;ȎĠTʎ퟊.pAp=p׉D,s Qj\Hv>UwռTtװ1kg#_׸tsGB 5r{.eI*[t눬RFƒѐG*סy䑅g#,G8rmaWH,ˑP㲫"9}X0 pfu}; ]㱏RJO3<O.=o  r<2fsgTJfBHXIQ sKT/[8ݥ,"\;CXC_x%vY 摔T.L=>FKF!&?5hyd=sU"ۤ,>Z9\!j ad@Y{ظ/Tm=j$;sWN?Il'orHjDLG==:/abÇW&:נy䑅<Κ;8~R沗ej1 c_GDT.岟a0ˈ/lNgen9y5@}7"1ۻj#4|Q![lUmzoO4wW vL=L\DmXcd8N F :u2RFz;+ef5,dEcuVWTcD |f֍4*ERUbf<\ 4]b6]R ssB{d&C]Ь5UGrGb<]sLL &#Qi$GOjҹ < >diLhߗ{+tZ37g߅>vGJ-qK: M_RM"]46 1TsI8?^l'TOJ]!$U!E!&NգWy䑅< %kHꌹ!b䲗~;'᲏ଶ\ue]Z,9 M {1f$HY-n;u$O|#}ޢd&ӱ]Xss~;=YMG!EvnR{B`R610^_snRv Ҭ1?o,5sW͗!j#e෫nAqqƪGq,Ny\ Ok< H)y|gi>cTLHXϞxjYuE,M]Sb_D9ty7~'Ql|Ne9ɅuZiP*Zaj\xM&ֵTlgdLm!g6Wk&K@vc%ve}\zEPK_|#,u=-Eeﵑ1-Sٟcen)`g\vx~X''(˾;xq٫sSB"MqDl xaѮ,o?Ա5hT]vwOh򊇤j"4-{foj9+2 4 c<74ad{}zfR}R |# KFK= /h$,GP[o .Y]q ]E%pOj y+]$ȘQӔ;.]Z a¬6.V*emý΄u_}ٜ9"|%SRCbds`[j`bΊV|ǻdW{jqmX;MP7/kC*Рq+r v:.5jPQ#xW6$չkGwNk2R&״ <dg{`JPsAbnxc5R} ڜoQ1 4()X=gMvGگ9iՖ 0"7MXa.g<7c;rA}m%)卧:q,[4jlRg;wN{1 ;--M`8`P|,B"9LkSnZF0nmՠd̹ 'FZqsh/9 wj>n RO꼔7jA dƆrSg>H 1iPy^C'4sN{)$l[an-Z$gWk<!#9Yxe|EBc˽nw+0(vHP>J-@WsSq;XnO 'VX$ӰԲ)9*L\QLL= g-f-} !ۦg#b)Iiծgx:nB7M y9^O94׵\z: Ju/p2\/i}Zv{$d!-=a($w`K0O9$L@@D=0+rT4+]__=j,ڍN3m /DtW~S`=[o?Yh#yjOiX>fQ1BOs燀*Wꭀ.wxoDy< <= hfK < )xz=멖ݸTo`#ުZ{YlI\힆NM#+*ObX́u;2!n԰Rp*Bb3ᨼ]*Ror!uz nGb{NBɈ!tByݽ5)A5T%u7}G-&3L $C^+ßHUK׫F:Yh#CѧvڴqSw;uSwmjzM ;+W;ӥ<=˭ܐVtpwu{Os]m[d۝]ww{iAtq=&%p"yXCxl;.3W=U C7+ס zTb@Ak,a`xDńxuuR1D瀹e`aɘ!>O-*f${Ю'siڈGnJGj'] ;JE@OMC"' 'Ӻnb{k " @{AT}*듺^Ɣs, KXMt쾁{ sP?k*rR#+>]e̽}G\.G|1}*.m5K'qE=g 1W\=e\Ѧ뗀'n5*o>n0-1$C˄BRk4.D21O O{Lb%48kYEq;"f Fg^ Ap>n8 W늛dW{,-80:Bx^O鼬5뮞 ҡfz,ԙS cOnW;v!u#g)bi <=?Ny੄HA\Ӑ>mE7/~ybg>;Ka < 8H˿xA #b+%oј<$vCt2դW{)Ek!L[=Ex냺:!he@\O;3Kݪ=L,ˣ?iu>_dzОGyYSi,6N^!=AX`]*}Xc2.0KWlø]ge=^}IՖu.]ξݨ|En't?]X*Abc vf!r T)(5|uAEkxZh4qhM4hm*qkv{8ە9eD(;a!"H\OzZ(©q+) rɌ!b9;(qᅳ'y\ <S+CEQW6F`@LxʗOa[dcӥq )wY{ri%Ɂ=f܉^&w9tւ94N}4"JQ%[2q؞(#+!{¬$n;L I^/´gUkTF\_0c$Ж&4Sԓ2  Njc`dP3Nt= yǮ5|IS";wZ]Vg%Ww!aˉ-%W |{ӈЮ9]'p+ˮ粏W˾ytzRUJ8|[4 zcjg;ܙ]{Q4 10~ܴ JKxx‹@1rӆ%&b{w\P2!vzDET[^ Ұ"68`|H#'fW{ ΅]GMX*6cuuFqR7mGz"{?Wh/bbiI{ c5gAh`p#Gw^[4ǾxZW^/O/75;jƲn 0!D2n-Ո;kAn՛,U3aZIzr(;nLJHjَVv+k0&W.B1^xB;* MA\W]%#a#1:5\zۛZvg=誃4x ]lLˎ%1KoqHU۬nM" AY{e|p^.g7۽nV{I +A7(N.40Ub^#vV׾3B+(5T+ҀfR wS,((AicZ yńʦD>sntAܗU[xqX,}Lp2cZ_NTpC=EaqmwB{DC"4cɨDOEL<ԨE`Ѯ8ӻc\lbi%-fxj7&& ˖˾و[j|Ÿem&2 n.Y&WYyy8rԻ7v~m~';qpUA 9]I1^˄>APΔiςRAiBRa;C1t.#!0 `â{|il/`8BRE 'cGutCqPw>n/U=xʛ2x.џxiHP6+If`LH,,N642$c4T`O?z‡ƪREi0Z>DTLhjWpQ!w$<_)ܩU-%ןcZx ;kb{/BRԬ>N}GbVC8.(+P;؋ }91ܯOil!DB{yz}n4"> ,rc\v5F>4K)}%q~]\3 !cLe9tzBf{hŃFڱ+n/ySCR FspS U| x]Ntb-$֑T)p=oz;R 6ˡd۵uZLn>ߣ˙Fվοj<_p2P>R]Umo,Lz>a{y\]5ԩEbVp<PLLWi0$ BOs;T <= df*SP䱄ŎHf{xzg58ԯ؄]زH ";]]WtsDwpTϰA]-TZN {yBJ'1 ^z?S| Ef"^e .m ^Q$W'屷V|iNv~;vtHG'l@i!q?m56'ОGyD`8oC)zi\"dYtOeg[M]8ʾAm,5H粯ۦظh}e\2f-v\ws?6,o?Ա ` F@5g}mǛo'=W;I2KJNWJfNIR. &+@+§g`,MRvOkO5(-K؝1bFOK3Qi ?A)ڂ}B<5C W=kjOǂs:S `:TL }OOŹAF1Uk#52,K]ZBr=e5fWM r~&̤!b{%?́,O.4$LV'M@@hOwb0j&ǑҳPO:sYh#z˜ wiHjA`KcDv IBO;1! v~ EhgZD0?2):}(}4B{e뛱 y Rfs7?,(~r@^0  ݽeYq}9~ohS+Mw ҹo^".sez.;[>q5mYG3ЫjjZ>x͔qw>{CJ^ ( q9. K9y1'{Xbjsi}wHjlC >D`v'"}v  1baT +zA'c]ZEW'~>y\I)fno(J< A`N3@ŐC=GZJxa\{y1_)<!eK<= mIik lwXX1 ~>b$1>Bwo*&KEa9e1=YDoi_~% yq`2E.{-r.{콦cޒ=e_d퍶3j\v= Jk!k<Fٴakd.U۸R'Ni,5]PiXEvooRڋix(j]EyW떇 IDAT3dz=oL0&z{mtšdMQTG Qa "BXEVh&!8RfW\g GcXH;E|CYSy~3ˈƵݚj^/-t`C6ўKAńOps`Πu&Ng,U/'tI.v:$^Ta}O &&KgZ8`Veιm!K'd dTz'S D,LXL % IU Eت?ǁǀ72]E&EG2Mۆ%ׄue,牊 ]^R]g{UdQ~S_Ud=)=:3}PLLd,FTM0v퟊˜1YjM2O~Wcc5f=[y^t7gpty\[j c,g/BB@GDKcaHxM ;qyxz+g c 1l[Yr$4OEd.r4 <];z[9k q)BR8x'KyuẀ 'Pn}Z]j.K*N*wL2w$ci,56V62e/Laq}\v'pٗ1}e&jkݺٷz\l̴\_J\N-V'YBv8N>/̙u+׎^ـT'" I%v_xrDK,,nHhxi@| RPj,vq wmPncۓοA%m/lsSvZQ!PЇz߆|mc:顯h,.vϔ M)xaT {quՁx;E x:fɨڴo&C>6U>Eۡ пv*'@8$Og`1Cź*~*:؋BcD]}b$_.{ \xDvD2de]^)+}1;5{Jg"߫ОGWaxon#cJCDqٹ"prop0q|eNR^̀ˮc\v=9 6bcxs|ҙ|S7QI#(-c?; )#!B^"NF/|aJQ Jvqa\lJOV!RFn]U6#=QxA$vJu0WKvM|*+^Z}׸/ź}՝Ow\#G8sB;,R&=* n2hKCq:v;؉.(UmY="> ڳrD{Q`r 1n}Wv>UĿJ"/(y/#AM uE01- OCT\*li}[!Aj <1cbρy\ꥳJ-h8.LEưc;Q)NFW͵Z ; QZ?%qô؎pH [1#Yqeŕb "{JI=OgJzD`σQkArYr\p.E W~< Ț>pً nS%3.O/VɹOpWϷOE{e&6ds7r_Ș?׾<^,c {X\x U}<pOZifg0T xZK#Fl?~ocknI\$a]9EE@7eks+kUkGɆ6=p1{26u꽵}1>${dѝF1Y`ڟq"ޓݙT$>?7oEh/Uj u.y%-.Dd\8]Me%pٛ;e;Ob\M`spK 1G#h{X$>Rg<'Ü+%0ܫ= JŌRxtng"hߗ#ە(\rt(*Ch@jLHw7$Z-NF|{6Mnb.K cĒfa`@n }3E;wQ^v' &D̙JAe+B{R{`i,\vfG)=xy'\vvW!Cˮ~~ù`S˾Tr[7xU^X>beQx쇥dNpW$PޝۙCL.+,(UN )׬kwl9+} _BQ%w;-u9nὂ?~Tivj8F _׸1goAQ#6tНuzEi6*f>+x:^4 260ijP$~Z0xkIip"tXR%,׭RElo&ޔD| ҋ>g e>R8-2}ϋd/[t-> 9q;dlJ-7DZ[|»,!qпS;4Nm":*`MA=5T8PJ\-eRn=eW3ಓ{ބsp\K dμԉG5&Xw CԖ=@Hj+WcƉXXcw;n7>4s P̽]d|zE=w}K_&G?Pչa*7d3{pĐǻidUE9'@w\b?rFߔx:S%R4p.y;/~8&ketJD޼\zUvQ)8>q-jv^ dҟ^Fj')>w%{jmjKt mfGCڙ()B'ud|Ǯv=0Dw TvZ5j'.x 3̀/ކ=&şEh/U. O}U)DrQˮved똎>\#f{Flϩ0n+\r'a.6oʢTjAKKf!"qR󚇤o+AU;RlG%'6ٵ?t!vJ*ltЖGnc#qSG/dOJ]18A(u P:ݯ1 yܦg?0z5^i[4}h.0"&r!p=+ P1ѽ7CO*f_ ]cS>< 3rOہT:p*%W)rT5u'xM8t 4@P2Nlg9]sӭR& s할.>oDpC'hx* "[;O_[ -Gߧ'Ȋ|%ӆ Zu=ICN#w72BXWm%Ȯ]4؍K{zVn1/sۏze>V/ק!hM菿#5߅sWB׫ B&w<Q1S  <]\Vm30=4EO7&384Lx:~O",*Qo\Rjq՜,%f[ vNq2 Z܅vSr IDAT2؎@oboM`p_d 'l X!#z'⢻qDXw{6Xn8%W;>9 o*P_)_&T;4Xsˎ>G[\ve#\v44\pBq eb=eewynjog-ȘRdξkZӯXw ^pͅ]Lp2ދv~L Df )v7ȫSn'8ze4gnGDPrm6pqm!@w;򾇺=wM)aToֽ#531h&RTh ?h\75?htP=`xV"HBX׳zC^lowwNvX9br$&fh[e!Q{J8zx:oKҲ <}S>< JP2fvx[+U*Gy]#_~czRZd$ g4D|i eފ,4iTdY_Ebhиfmj' `zdL."* z:&b;5&pT{vk~8ۋ^ԝ._.Z·`w}C˻pJ\qixue@.=v_=LpVjRgLrnM=ae*dZ{qDxH5!SH*,ri#ENva ORP"|tОh2mج(S;chX*mr: Gw' ,A5U?"qk:r7PBY\|Czk> ܏i#nB;v/Ƒa_ <\uIg{/9ǧca+![0#xg.ð٥S0z+'4b* 0ta ol?*J Oo2!'3yz5;j᮴{fJa[Gt32svp2wϑc)=L6{"4cK=<"}ЦGr%ٽ?W@ٽ+jӐי5I.b{K8n 1=p$:eGApGsfv\`9u~u ,oao \vӽ9qo\z hvo-z`i۵ \v*v}=u DXjxH{2)0 'CDp fkaۆ\-7QCC,=ԨsM=VGʸ]a dT٦ǖ]Ph i?kzY.Lf蔆}I}hiw!"?IJ?ڈO2-cvNu9D7GDd_ERkL~~dDvc`dvBOۇ6=&6%N{Pl>'*" !h0a)Uɷ'Sv%_oh?g"*upC~$®uT2[o= \2㲏E` ~Pk Is{ s.ͫ3oWi3fbn\ dT8=s 9{.-fTQd7# NF؀G9Jg9G>nkI78A}=^Wm+9cސ{NQ2}ꜿ׸LEb5̚}AfG]Q4a\sq7=fX\z/iـ>ƎOW5N>aO:G7TjzGSSf^Ɛ1^Ƽp >M#M#cZbB{p'q]B#ew+t2%TG"=jbka%d>'-7y!u>Thd dTҜq7NkEy:96\ 2Li 9z*u֗z%d+<ůDvd $zY?=vT]*_X>GTdYP@\.b\vgt\`.|[nk>( gD WVtЋ?qIp1E`a`f,} ]=5xJ}b˩`i~WO*cw.b_XVkO^nm?],a!Y:&,J.r!d55Ϸcݹ=#6@8j@3R!乨>TlwgHl`X6N7C";y"mlGQmWZg{qH\"5dr״yDxz~-VwRATN c CC`2?$L:u- uظ[qM|TlQ |.U0+[׍Ⱦ/:p.meG|^Rww9R'8|vhnQ2-S5:w;:PCDISU*~lU;$n B#͂~19`umT}n:Q/(VD?`]Mݮ=ac'v"%&vCQLhg'c/k/G3SRFAL{3Ɠ6S='5?04&p1; <Q1S6Exz?}~wO `= xx<\*u'{Z\8ĮOZS Ndo5tjsl<5 C@ىy(lxJ&wXckL1 C󴐘"ِ%AR6Rsw N{y) .+^1q…<.{H 2dxX: w0ND{ˮC\vA`[urj>xM8tqT6@`Q2c"ӰT1ܭ^qW;{ "VBˈ=xIAUsRyAS9fF #4U$'R r]t`wRR1 gvrO{%SuK 9,vbg ٧Y裼vk)uW<'\a|ʄ-Sb8:+xTy oP16i{9\\OxS^KO5J*uқוېT-okmzCsz % #m, @(A6puB`JDĄ̀;Ƥ\BNzV_r-]|CșCvqM:ҷv߽'"*5+e_쇏PLjw=}del;^_0o2\v6/@߾UR{s9y~źsڲ'޾V] Kv={fXjO4pPۤ6Km6paާ7?[In.owK}'BQmIwԸG &wzHvX!a|}a"ϚeGU0Y:w,)@JA>"8jbDzݯ-#C> MLS0Și[ NcBF2W-h #?c^/֯_o^,Dǿqi3Hwς.&?4`(]W1[׹}oog ,UjO6KX=a>r(M028-!3]kSVXAAI]>FuGc1:!v{{_qwEƴ|vr-۩#wI+)pw{ gLNd(vOjw[C591dٺ5kXouBrZ%\Ӑ\`}k*=$J* zZW{N4Ls{brӊCfGEaursف׹bc/Lg {Rh=o0!4xwxv1uo7RLOۏ=?7C!z%tyTCm!Z^.^N˂0/ou`9EσO)2U36mTl!)H nY;g롂{<g "Ttb&/9XkPuJ͢=|\Rf䲫ppٗ:.}0nzW:Vk!.e8q 8Ay]?ͧ7GvyXZ#ALܨ ?U AupwHi_$2TynKsMv9Q;v3|fd.xp>?no|ɔA1ι ^Y1K bODSǘw,KUHhX맢nZ^py.nrPyv ;k`Ο1)ah*$ /9nXKaVc9^쑝aH=7 U粯.1 XbC[:d̞'\meig;l6͕4Vw{3N vԩ#!wNL>=َ0}^aAµDH2ntB&|k)a^%:N7ucK84 Vn}Ql$좎CX0Wlu`(ٕQB;Nxoڼ5Ŏ'ONH}ҝ <,DO)x).0'`C 2̀j>Pt }BLO,Jǿn= ldcAx-,-tzٷQ7p"*f[pkyS]+aT4DqW\3>pm݆rm.@'4EvۺZ7\͍2ڿQI㧀?blkB;:g>p6 V&,sKAT:hAnWцVX' kL]Sc m'0ު2gU2Q#Xq77q]02+Ȏn|,R.}|b@੊RUIi'  voi 8 `z r46sOghM6CfiS.{%T}&Z;z<>02@iR@*=tqP)Vpa6x|,Ș)~O%BksOdns1}++U.:CcB.9CBs{T+r{-Ty{=~40@}/k@Eh/Uj'|rb7kqGU]/k:.c; \M[\v縍=.;c$Sd-_ }2͕Uԋμc]ZwXHv' RF`· eysOՐ LE:Lu*.N*[\g]/Iw{w>JGSTB2`ne 8؊`lS#=8i?̶ۨ}7{`:ܝ6]դCT\sϯcb_V&I/ˆnv'fxݵ|ڏWCң*zkZ>lmh׳65Z5t  Hda2S$H -s0Tҫ/Me}Aq\L=I&I _Đ%a!4KʸZ$w ړ'z8S6ڗ hL7 nμԉG5&g76 u wE\y`*j"KJة] ?!1}ݻٍ&[&=r4ݎȞj{MpWTN IDAT-#{Ϝv.31qޏQ ಇv>}#LX eNDxM6nBigb;Y|w<4sP1g|O\Fd_2x cWdɱ|T#Ci6:P`" dv$%2)=(#v6H?#&羪mfy`TT768~=PkuKz|5N 3Wx!]:8N˾a8;t?q>nAp>xM8tV4@`Q2c"J%{aaLGLhוTCӠTuЍ1wskkDxp2ݮ#".)Rᝈ{7w#35^EocwnGo]ES>T#Sl~ B cbxΊžZxӉAiTh>ӆxP~7>QJ:H I=h.{u!2fV3؏% .NN/Ǭj~87R8=װ n|>U d ڴm#6rDG 7ML:UDם]iI02xh1/̚]R)G$-dBCc=.-o ܺf:\vC.$es7@_*\RȀs]f~Ec:9&v* Th1۹_dM)e8Z BmY-N&2 wQnR f᠚51gceypj^te"2U##e}ӢK`bD @սBt'#"Swl{˜l|Oԃ;XS)ӷ*fi٘)/.c`iC-}i24whiŞx:!<]7y9%Tۋjmc0b!P{9+jׂu`5r6Ɖ'ퟢGJ%}^u4Bf]VgO-1^v9]?݇5ф*v=zS$OeI0TKP+`ĥ!\vx"ePD>- UGwʷ\~epٛ;ev\ Խ7-|Zcl!M&L4vappwrzPg;¬TFƕvouzZcf[[;2m@mwLwm]-:pG\~O@x:w}+6iȷG.b: A†!@K{x`Ocpr )L. <"fxu: :Lpb*uψĿ'vڎF d"iDW~_۵7*ѝpZD}5̰08uF{BlTxYEwUZpcMYAܰ쬪+;yXGVv5!h?=kxKʽv3+G>'",8B5r٫[G*pd~8;v@qr7;Ձ؟>)\Rk<"MfU96+#C*-7ڝn7\G-~FjOv~O\Xe<&Ch{?_Hن^U{pqުs!Vp\2i n-G*2iu l_ϙM@po|]Upu+x]BP_<[V5+1ϫ >> a7)9n*>^JO$hk}4;y! O]-&Q1|NP ߁]E,,ˋ_zNњ64* z}OQib؍Kg(XRjƪLcsbH }WmR9B#c6;>f :٫@੒~cd~٧ A Cui2k݌{;uSSs #_vjc>a<"*S+Gc[#~Z[)Q=ˎ 0Qe[41 ˾.o|e 7Ml_IJr=QIk>j\Н] IuX)Lڹފ쒳 8Rh0(UrHuC 8;Zŭ>nSuL7%s2P$H^ !1^3h#}d *T #bBh70|.azc~ᯗzs44% w @ R33r| teQΐe)kb_Eh/U*u)/h,9"gp٫1.{T\vǠLı 8fϭWa=o\no.ˎ;ewNidWUr~{0J}ڕMK{E#yu5yTPgmمdݲ1ʨ$^&B4N:wk}3! sMP'{ٱp"GPߚh6'%pۥs ogv>ą/O+L@8T݇خ"bwWӽJ&ze *2׺-*f~禼@(tcӍ+ZRJu5<]TP/dsz9dھ?5B;usd =MCx˞#>F#}CPځ/"g~nPB'131@HU匸ۙޮϫW;mqm_^T2O[.0݊q٫*cCdB6@:*pt ʭpQg's..;puNIHd_0@K :gPģOU4M|L@m12TdwwwZŚZ&kXq4TwbuN;\:!ɐk7\ݞ_fw;漋\v=DRׯTTKyCs5z%anLsjuDvA6k`, o:&A$*fքp& {v%dxMrq6*Ujhۏ=z˩tvޮcs{*n7%!_d\LEP31RRvL)rԫ>a^ J>/$wxύN`^!0FW\^tiʿtpG;'ܓe?damX. \7:p6̘@/eNp㳻ј^s Y&mmeMN'A%4=7Mޛ@c󷺵37d3Q$P7T|:NpuGj)V =!Q= =K`"L030bx2(0Ѽԑp#bAp7Oo\˟J*Ujl׺1Z=u_DEwEv C#uh\o b{OCF>6H3e2Wx5` T߲69@s*!dtYb;&t7y9Bl_ߛiןoW{KQeo1Sj=z W=˾Fs~ jaP \&ٷAVJtyU|Fca-㈽V]X*Exv돸ڛ/Ưm,Уd<@e3R0րGrLNp1l֛CLaBݰ?b=SMe4]4Rb;E-.MaGIDtW7]$&cx' *!%WT Fϛ[0Ҋ <}3M}l߂Dpf300 <2tb][LYOK*5+}2VknhNRH@jUݠ5q7"C%dHNȈ' Ilrk0v =fvDe<*D}`Ipj="y~iIhXN~/UՕk:zg~w]/PRi.(e1BGn~ .{&Gs8azBr;Xg703.; jdwb;q\KˠW,O2W@16&₻fw L.w2{P`g,cCTDy #MvP#º ?skO}̌@KYDLn848'FwR}=6i@XeyAto ٙJ4e%m#{*faX7!WlStg6a4N\ . #CTwnu>OouNF';Lף>:F@5!tT)Z+G͋9eG89\vď^yNL.{UY(5./4,kkr٩۝ȾurٯB_ zJGkp`Q2svRimo12V`Si7yߎ&SSO JsW5';v{3wh]䞈DS-rD>.qw9' @ ?Քx3Ȥ#Qs }yw2cJOŮdh޺m< v;4KtwxJiOi5 ;7TR3?_Tjơ›5^/ i"F H1Q{nf0abz| ),{J`{-}: Sn\1F/L"BX0*լJP5tT)wIᲫZvW*dOrم< }sُF`?=Nyơ~Ndk\v=C. ߺy8nya*[Go*uƱSkEkzq{* W:w{M2jA~1',UwAH&R:R1 ۹eouFYֽcm9nOۡc2&) SoI[hh˝6FK_Å@=a!v7?Sq_~OMy{gAi̭ {.2׋^T=7*5qsMga>Gx?DwKfl,\mz%=,`<^g+B儛c~l['. lv0n(edL}B5{nz4h9tsmYZSR/ec?U!}\v{\#KQ 㲟o}sg).;2M.[wsUm ^nz3"G01C!*at_舸مv|8v&*!c__m)TLf6 IDATغVձ <} к=O=xsDS8Z$c%O7 uxAJ*x]ڏ+dM|҃(ۿ,23;蝠좛=A@5{A 炻ä|٧ T*2v6&k)uc ZFѮiZOk?7}BK)~G,bA.QVfEp;eQ2!&Oی~kpo\*_Rwj9ROiyv,sm;vXIaU7oE=>1(e {5"vv{ w5&l[ :w!?S,(rWΩ% 1.}ց 4'Sb^~[*Uԝ;]HS|o.K(-ws7_(_ÿ}m3T h !Lua(Z}= eE B*B&kPÏ'~1 ~n Is ^R 0d8e)CB/Խ5s˼?np/j`{\v}:e.$ei\i?.Rsጹ=%@ 'XTJF7BHj[Ċjp(l5Sx)(5*Scd;6N w(:v{Zu &눍=1a=X .S7;-J0Ƙɣȳai }BfYNvSyT6ʆd՞<>9*RTpj[ <ݸBP1x D`XRAL#{됋=t aLvNXr]z$| ᵇ\kjjOjR_\ }Lg՞I;HDw`o}lg*W),mױ3 ZEbwv34ۿ%4 fuDP2Cv9C}!F{`Dxq{vUN 9"7Ej<>U.=qtk\*e_֎.__޴\eo+4eߺe_(_R{iyU|Fce/ȯyJQ2m`jQ[5 ;mܩ5)a{R '{ߖɠPz6o5JU@Suu{Ew{ߒݽ*pJL: #bśvS<[ Du{ULtp{v7$v&{ {k3\=Vfv;:esxh.{eůwt a2P r.$b.OΩMX.$wewˮwcQy]*O2zObX KbuD)o)R&H㐠Tq'1tr H: Eɸ]OTnoTWH8w̪7~ CM tAQ]%fڣN|>77: .hH8*ۿ羖p+r-KL6͗dR<Y/!qx*~|OKiRIyRKkϾ5_y@*Y(B#_ @M=fW 7J8ED5ȾS=ջeBPp2s}>{C?.} G{EUn^/TX?o SŸ|{" h A.ظFFhifeҡq\v7"Pe)Uj/>X#k,5Bno,NFH S2מP.@B<^)^)$$wՄDuQVl\w;IT 2Spqm!28fNh!ǻΛ{Ltr y==vSYX *16&0'fx*"F=a}S. OWRJퟞsRsG=cn5ڱ BZ\5:D=zC>-/ ggbdف> 6Ϗ{?#SdG ^ E·. 'ԉq;dLI$Op_{C$vGZRX\Qe#\v߹\v5.{osG͵ Y6Ș!"' \rفA\v >w!c쿷rٯ+"{ReM8~ )N5׎;ѽ1 Obdt';aҾ +ȞnO JN dt_RDvb*m+ģsR0"FrB+~:rT\%:f,%#%#z=;{U%bׇYhrsY_qOİ/(6&#M# 6t-'o^}\J*7iZ]ÿ &"{c_<)*EDS!c<=͞#BƄD =tPjNrCθ1]1"ClxI`N9<2!Eh/u'xȘ]I{ˮr^ɋK:/w\G2_A\4̭[Ld;a\v=k.; ?l}r/C_;_RssrzQc 4>GC02]B8E$sZvx 5.+m/lP*nWސFNp3tRO 8%NPd9Mb8rC}Mug\킸=>EHo5@c}Kd_ Y ⷋd DD R"{*X6U0d]+ApO%z@lQG-lx"i״>ә-4c^Ԟ/"s\v2qMePp)1Q 4~4os.{K\f .pٛf0d_.)Rt 2G{V CH5 K>B=wcr&k[kܵKNvkSu7N1C)je98!~bDOR3J[7{ n yIwmR\ BTtv9DZ2AuZU\l/tG&4nnѢbV9,523 .}qu~q7;Př!N{HA,"%݂7,_j"BQ4kYsC7e?^Fp_j1`9=QdswQ}駴~6f;ׁ[ /yϘr׀#sdz2׍KP\vC.; '[/ ]1Js|Kˇu<I 6"; ¹-"9۫RNv!<n!aTlwu0Gc7t\waQQ=As>.9Z#eM}S,QM4wzo.D|~OȘ)^{'3N& 9`A%\EEPmXZ͞ANbv6>şX=n]] W3#NEve?b1);eqNW˾\+\RᷕqC']F^ ]wNo'D;GxSETw fR Nv pKݱw]U池\ݡF}G"{N(:&2 a-)|?JEu=C]O׋9b^]*q 2+iOsud{OX+%TR^lu>4RuF!۫N)Z%RY>ri4 b^?ut ]M'th pC%Hl8d>5FłQbb;y=?׀`՞{>6M?L4W@F>xO/is3J*UW)rTgY5@a\5* GϣA 5*֘psD.9հLQ ~Zs\C2aG7sE:Ojv3v>% b ac3sVd?irj~Cz 9\vC.Cܼ \(\RJ=9ɴbܰ&-"K Hv +,FB$;]"B';0ݎnCmB4\։t":E(+vmo "hR a]ŕ Wvծﳇ!"d9Bfw`N]q'O3p1ODO'[6G2+~JZ\8|2Qs]ɧ>J:IDЦz ompCclvJdLW.fM~^v.eJ` =} e.0ܥ0TObخd|L52":sHeW!.{:r1t ,F*cr !8~~poJ.ް\v*;. 2T{a-< t J#)(:LFzps7{Jx iٵJlnH#Sqv;|!YW: |w{Cw=XdWg{bpSmڳ:=䉬v m$1 /tX2vzE2׀Wdn"4fx@&(Vp**UYn^Wj`BR)ڋ1!zCT#!ˋz=I!cBrD9BtN;)vk01w4gfoj4BLsFw1Eh/u0Eve/DdeҿS\v[^ [\X.cA7vȤ eo.;;q'['O`XԽ29k5"xc7^%S;ᘅM1\ 9$ % PvWvplEzcvuK mjL\i1w"UM/xcc#;ƒϽ_5uE#Oc,O#<::qxZTRnSlj5xgvT sT7 HTUXtXr)O%POpHTjHlGs!v;s#so5Ǵ}!G6UPo{7)B{'?Ys^۔*e\.;2}dBe_VdCV2k\-Fںeɖ:#ˮkr9Ge+gpXԽ8}ROj?,v׏QcR9J&ךjdhxheurŀ>]r7q|L&˝Sdߠ:73uk^*c[v{QYUM {L`Q"% p:"DwDQ0rs'\5+}?9LYllWIbo]쒸>(4OS<l]以*UT)oFl?vJuk_6p}l=QL;|=>/ZI\G"cT O۷P:Tl OQv_D_`Lا^_7F6' Eh/uF5GƌΜR)eFdS*x0]dl˾r8~do^\~׬)l b .p(U^lX:`ahT콰TMR+JCzTO+6ة<! /f'P۷d@P=>B\,>;!eIU$U>/WM 'x pn7K{SAPa[>b?iK*U*&| k;È)l ~)d (\d)'&]D_%DTj\tE ,v0ЯOA_H7(s@}Rמ3^Ez6lz}Xs=!=)Wq/]%Q.L(B{R( }.{EP+'9dqU=[ǹ +ae?=N9 }W#\su-㲇dPtn [eH,UT^\٘_`L;uC02#rY]vt+$K; Mug8iS"g*(6ǡT9InH4f>Bj'. aAULsnV.F E; vBQ OuXhi@h3<\{*UTb;?6&uvև?=q Y|S4tCʳQ2 * l7?(At yP]C+Ƌa6{ϥHch6sAZ"@ti/B{!?Uߝ" @unvˮ.{hL.{ݱm}rF>: Җ9;eod7{bKǟaE2З?+CbRo+uNL'D&ݮ@mXjd]p!E.{H\ O݉7͠}pK*TZǦ:aY" Mvoviu-{Idps122S[B'ádF.(;;96 =k *M d{x.RV{NqwN5_˝_^ r/xnN44Kt{`ILY֧ @@ŋ)j$6$%KcMX3c;6~t=; ;3g,33Ȕ@H$.ą>ת\~ؙU{;t^DũSu\4|l͆R=5<5L˽Ν7͢1? %s|veMwC bcxR4k*]Eگ7ON(Q=1ۡ5HEמ.S MQQ2>}~7X}3/M1k22O᲻Z.[ˎFokewӀK.;0\=㷌n2Dc#\x_4bRL!ù_!eBc@ljX8.gBy*4ݎkq:=~Y *t{taw8mZE9M.#}Б8)ysg! rwLB(U S_EîZ O\)K4<65<5LՖ{έo]k1b90ώ| 䠀ˤ+rZĶ&.-Gxx4 Hu ۙ6I 뱨V2SP ~7E G3#P1APuzv3MgZ~qי>J푉>. eo 3Zepysnb.{4}.sٱ$.;I\qe?YG6X4LDY=`?ѣdBӝzn)XNw Əbcj!Iv5혽(Nߞ?KڤtF;Sk3.;Ig0`ə$!.?~Pr8d2ع+QCߣQzHupUϝ//5Gؘx3OB}JtUgCXFSn'2u!3(Gf;2=*_B^Og Qh7YO2<^EgGH\4W`Gf:d.;*.{!c6;ydv*ߔ=t\O(ΐ14Te5? L~xo\vɴ؀odij Wf}kno;vh=h$OMRT;+.Z=q1#,bQV;[a0OAot06FEF&م|lv 5ӁrC \qOW[0`ɹ`~iIc4{8nz'V3L&ө:n, eKH2 '&r#Sx)/`J=Sưe")k+,$$)ڬNq傺QY|a΄Rr=Qϸ">&xPFi]A  j=D/~kej3MgWWB+ˮ5 4C͙ YKo_xcޓ)Fe? ^eq6 Mb7wa2sMkov ۦ wo!=LKS{CLma0&,i4OT -uu?6d(\8bbk!&4C:4!׻QӪ753K S_7~&ii=> [cݚ5J%mQpd(("s)RڵRY>J'DT8ATkr%쮆)c<#ܸ^g.eIvb$IN |w]SwiH8v?J&tWܶ1F.t mJa.z+ĵ8,e']8{ qvZLx6u01.ng8k5_f ~nղh79~pNHK\vp]hZ3}}n.{3;Arٯ`Cqُ=M.;eϥ'yYL>{6p4LKE}pqޜčfk7CLlw4G02RI T;aTgExp%^腢LQf -o 5k`b}1>dvw:7=F=1ۑ&ىF{xzjI754;Yx)vîsLSD܆nL&nic;"DY"PsN">Qϓ9>5fɋ8|&`}P5'ͪk1@&Alp̙լz|grXCT^99jqh7)gJ1}mH4f6;ಋgm(=07c.7< sُfᲓe"c}rMЍwmh2NM[~/~6Qj?uf iҽ7}3 N&1ٛAQ 9Nݠt犺 &e KH@&<W*dLwpJPƧHSNAa#MG5KG&4F g74btUjENHhx:wba OM&ṁ@KeSHꍡP]iy%Dy~Πs h`Rz6mQ}ώIW&i[V)f{XQSHσ7{(uGA4NusH 4ӷL'˾63s\F1kBˎ}_GZ }t\>^1.{ H\]wa2:3K lRi pw=3.Esa*A下vtXg@yLv6Ӧ+vq&ItMAlv(2&# 4^;GD{uiug OM&hs,YOQcZB1拑r<]|Wv>- vh^d{xhFGxt'~I?SMJ &P|LE10إ&wf%tV+$3MgF˿9K7Kಣegǔ׷<9x-Z\v\py9׍n2|9 ۗv{9 ocefG>=p'9 YƒCt1W:{n9[V;?;XŰbq5B l,> NKb |2Fp!esc4ڝ^bG~&)vkxj2Lֻppɸ'MR-RQNx!?O0<K>WX ԂQXE2f6f5 0ҷKj`Ȉ-u3FX\ntfN D 1ᥢ'ॻHUB sH= J=fƁ$\O~gMe%t)k~u| oG Po]O.e?vmi2{sk~?FYj*I*d;͚N<ᄰ, >)+ݰFaBFBkߞ5CRV(c݈MR=@l*"v58~M؈զs C¬9j2tf^~R)v@M#2O7< #kxj2L^Ԡyc i񮥺dHHtP67͝(@37/ke `ms,=I@lơMIKhlSI&:{-ɬple'pNY[_{+O<l6H岏RiH\v㆞^d 4}=_|SᲷg>Qb\e7LV+9Gx+%`Q2Wa½7ޓfMvoF40 żjIdBQjf2OF;2}Qh$>!j-h'y:M˓s;Q@;RvGR? 7QS)=F*4<=w@md2PT aox6suk{#ցQgon ^ڏMB`sMM6conZ}]7{} \vW`:pTun ]_e?l_&#eK4dg.& ]㲛LPfpONYk:ƴvCʖ\s3L2cf_[13׷nn?.Gݥ7&}(řFJȦUc(|lZ }WnFi5㲳E.ee_c\\~$pٕҹᲓnI؛쇻w9j2VNK]~8|#p}46  emFZujiB e(Lv̌7^Nxc@8^;?.UN몆@`wKkh p=XU|]b#- AŠmUډ}/}w~zP95 O@4<ޏ.2LUR5Bh}W!^"H\MP|r9eցާ6 `P?~`<}.Bh#>߶LXM*EN{1/BFxTjBjK< k#e;7#LLw]^lEi@5]p BSk kxj2LE4Z O\,׋=gp3๪6C|(& u&91Ctӹ=Іh&m-C9>VcᡏY L-'W;narh7_kBӄ>*pٛV\d_6k>8˕!:.{ MG8+.;s=L\;7A߱dZyO_tڧWR ΰ^#JQ2^y?pX ^&Spjgo曟:`_2e5ޞޔ7qo$s$dCp3m2Τ:3K RqP2a½<)e8o*I `e/f*Īf5eIy!2xkE~@51ܵt;_FH^a۞xI2/] nKW5{O3ڹ'~V5<5La ?vࣀ[CL'xZLj:ZF5>"Ge[1@ S3XÐB6ы&S'7z.ls.ˎ\vMw>[Kf\nC`ˎ\va`I]} ,M&ә?bLMRF{x7_vd5< 4< j[L&,ɹ<.&"Y>\  DΒ6"5tBHp1zdFiu~2_]ӍY0@Cc f= s?5MrٯWrL2\v .qM&%z#<`0ZO_qGkA3{|#Cf{p!:FIz *+fֵ%eEg6Q d+ ]C T;BNVrl`%L&t| =Ynw ޿oT %b4۲+{}ZOu$BRPgQMi->5Wh7OU`}kde/&PeOv&&\=Cou}|Fe?>\6MOktGzm]Lcp=y9+hFl5 %CkNu3zorL'C`wnoӑhh.TfA롂iv)準rֿPҽb'w np툓 ^;GȈxE.4ErÁv  O%4mtػ|?G椘L&}ea@2R|d/Qt~&fa@ؾT7269=lB;}P?Α1[veq_3{7<>e'd&{7|'1L^9)•ǁsf" RsI*FgޛZTQ=d^*$jd2_ຖzb% Lݓn]zoO}`[z_{D+Ah73\5 ؘ)a9}E.amo@o~z_pé}d?2.dzXy&{y%v&ڬYj_mm SCC3)H$T^J>,`y}o/hPЛYoaQ̳ k[Yg2tO:#!cdo4;N lG\KUO݄O<vd'6fc%]k:hclL&n]ypQ`rlVӔ%n(fZ%HSw٫)%:7-Q1 !]욉/=H΍]ZB@1P1ƨ1''ƪB>2ɄɎ<|h}s>=&tVtm"ʃ2)/4)n>#o~(*H^\oidOK؃7OAH/'30ໄ3cn#ʌv]WeOMjv'f{|.e\Ksٟ𦼂~6UIʋ'=!cL&I_>GعluQ%C )C3on{d $Wg'%its΍!GRL.z.u5u6'I.RA7%'dƣ(5@eI|$^5ys3 )as=sN{yS_\i &}kn OM&A&I9Fle^y|VSVLl ef `x^Nolߙs?pT q; Nmnbn{T>U.H?݈ڍ)k^ˌv]{;͸k>Λ1W岇 \6q߅G+eoe.{45'~y3M&)WVs?;{YgRdh-#.=m1ٝq.s{P@Lj iB <3ؗP+6記>"5AH qaIvz& 7,Ow~:ܳzd2ȹWD4Ƭ1ҵ;io)G2C2߶6T{l25}l?7ڧ&;O5G}}sweLq IaM-sj 2t_MZf bJl̦o.]&.mxd̍>m~:+eo},'IguMnhNd{YH%sYd>0UHqٵb]2$(.SOEi6M+)FL-k]3ᡘi.6Eb$, D9}o| 6<=Ƈ*f:?&n)]Coy1г`!rvÞTYJqdM4#h#xs>~fa3N& O2t q~7Ŀ F}$GSOq}Oz?3MwOe`cۧG%.{pYN8-54#5\77d$M~-*?9=c=NR.DvOoe d2x%.?JIkm K޸&Yԏ12"RgN_Ā|uV~l*,a C_h7#6h$Xxtd ]Lh\eW2eG.\k#ejrُgO'{~74>a\V沏.q1.d27|p 5ڭn<):7>HO}3]dwҬ/ 6,"&Ş]+,d3oQNK}d@4@?ֺ> xTԠeL65' rۄ4ݎWs;? Oo^&k'H1RN~2f>Ur"bFzFsrڣ*L@LC&]urs~x.|cxL4i#3ٹ1Kצ׋(([q)S+7IÝ8}Ji?>$hj~3FYqGB=eo*e^<\5oe~k8p3pهˮL췍n2L ~s}pq܅Y1dn{g7s8>=>Ԇ%~gw cŜYu.bo$;l <@"[BK0 ye|3u*mJ QԺt뛠A?{jdzV0TI7HqxO i-B&:%= 3,82k'ݥ &'dzqMPGt(w;$_Q]i`G2>V>ZaN|;WިqRSYKO|aI .4p١.TKmz.ŀ˾^#cܛ/t SG\[d2Q~?=K}Xxռx9rU*5%| ^/2wњ7ٛ`5S[%@#)MTTB ELE]s^#*@6+6;JtjȌ3*[a\vL]}㲛L&i2a2nl=ϰitfM+ oPp*rԬ}=D5Ƭ)|oۏn07^I7u2\K27?Sg 6 ЌIpbH5w[G$jE `X(kZ NJȌ3$s6 cq ']#aڛ7 UGE块ߟ;q)t^.;* k~puzާ?=ny}e\CϡԶ65LSs}eI'CAu돉 8 vU44ͭ7w|"6f$[=7%u1f[#l̚ J !*_5`5qi#Eaj= 6xڱ&dP 3EF7RHhOS?B8!Yø(S1s> 3m ^zW"~wyACлX]c2L&]m`3MRDwM:]h| a١ N zJSjcW@MO,>] -Ăzv 6 zb>Auj`hSf j=y%>* /)|(t_~/zh_Qg_k0+K]'az'mqGd^36BIj.+p{mVKΆc5zw.7wAl߂`7KbMOy6EEὧwesf\|qY0IQ`s>~ C 3M&ɔW;$5- d'ڝjO.JBw0.d2C/9wQµ's;3v{;FdBxg,$'aF\f߄7/ l[2`Jd3!hGa?0V/-+5A勻*.F̓dlb2L|EܕO7aX f88Oq-6"hbk!2 LTbaIw)~bzaY wr$ qAGd /}ΒoSZ\ֿKW}Qn*yƧ$+gh_ *asm^lhd IDATXp<`EF[Jvw7;N0 pw+sp?ߺd}eȘ.~th|l&d2{d&S|.mqa5^¦ o !3n'뛎+ .hA< Q3 ^{&_\!d2VX Ȧ#$[lLoS4!jwiWq3|xݡNa#݆L_tlv$]` :Ĩ&{cY@Yg:y#d Z')ϣb#ԌB2}׼ާ F0س]2ݐ*U4SM^/VwBJ] ~Ŏ)DZsٯ=~OR.qnng&d2F#_sl]`N CZ/dz UNM%4h\vznӴ*#"lLgo'ׯ熨7{ I?/f;0 ;=~ѢY[2B^m_b2L'ʸH>pf| l<ueㄧ̛j`eN :c=ҧ漫+mO&"T$ld;P'R$ X Z}7<}O;F3X F6`}PT>8fr`,-ew˾ :?<=q.{~poi?vdZdotZ,u7/9Bw|v %>=|:K ser⟫5Mmlre|a2 IϾfl,C`2L (0s%޹`O{cd\\ ~MQ$vBPlx2]K-em;.>xMP99Zm.;eR!c="7n2L`\ݼ;E?&yx'5`mݛ=/ـ_]XkRcE(,H.~}Ҭ`d2L%ORdf\jf4f d$N;O/0ֳ0T2~ 5Ϧ0bMk4VU^hO,GƦ|{H9)97j㣕~7orQSqMd l`c2iieåLĩ6|`Geo:oH{nrQ50.p%C 2&4']8v?n2L+Wc"r7}{ɯkM-Ƨj[zWŇ3"]#4dW=aM5N O0h2LZ1Hs;IqJ]Jce؊cC Bmߠf>x[!og e:&%xxE2Qrmt 'Qbc "/°_TqfFiaF,`M{ /e~Dd2*DD]zb@ ()N0G#lLL3~9o6#|LSi .RgH!B.aS+$ԓiv~}%cr|v{Z`֊3Oۗ|ñRQ]P1x64?\~.0ҝpg? G_wse6̸)rٱո4&=}2Oza;dZE:?F sB@9fxz%d2LYb|w b3TX\Pg216:)jϱ3NUy.>&R&Y6װɞhJȘ9kLuUy!@*sdr?{3ڗ]SKKi`m(HrqC qqY@_[s Ą\&沟\[Mdžp m7>NXNs\e8>z˸&d' G=4,hwϧ1>0E>ok2L&SAG3| ǵr_@'PDp==!P> \!/p*v&dC,Ցxn3ÆayBi2Frv-NHໜIzadޙB׊ 27NFP24."FQ!og^WGp2V΋2}~S*FIX~ W; ;^2C=J;{ڙ. 7DuɾƸxdGe8UոGɁoj\vd:'ii_vrRף%<+~bOEL79igMs}iI V0L&)y<>F Q<' BҤy﵈MO $ί&JƧ29t]k !~\LuVgɮ')m=N'~XnG᳟ތ9:f]5i4gx쑉^5i|OIwH+Y F3'RI=䲏g l_mx.dk췀;d_.;.&'1#c&8m\vd:;=s3#:]hkta 66qtC$oGvR]s &^.~mn[sRd2*u8Ze:R/$jJH ~WvjQȘ<*KHO2}^@\w5TB:1ٵd{ v^פٓ`u)okE a*Si* v57b lv`΍%c8,̃7ס{|%Ьpk\0:|ԛIY.;r' }r]ӎ~g&d2p:WҼ>G\j5σՇJMlPV_cpg=>'YȥsCC Z2jdӠDqQo2L& ޻Mǔ G) ð1S/٧&{)v Ubz#]1#-7 ,4:&cMO1>C.]g31Lp)R[h&?2}pVb_ޣ.̌${>o]Lk vWsMLSЍadP${t_I2f?S+ GHeoS.{hOhؿ &tDMWl *1ZDXجKgMz3lt {G$=|99Rx틀K -../re/-|&d2 Q0&h*u;N%P)Mw".gdJ3id2&0ۙgEpi A:Vғ2Ro/dxj*jgwN-U8 c _٭~=AC㵃%ܿ.acں粟\WtfV6@=雟Nd2Κ~oƩg>k* PJ3ͥ۩0q zLDÁOܴXN8ޘ >~&B NOiMN [g>JiIې[h|5L&C%¹x;kfG>(;ǒI˜Q0G=Lk)v@5ű,)QjQnHmBMBAZC2T*|'Rq92QLKMPjރmJih'xefW=; = x0>ZS0h >&ADŽ;>&\^;;Hɜt`7e;ZL4ɭ5H?L.;g%\Oxx ~r^p[D\v\npُ=pqM&,OC<۫K,J~Q0IOXS܀۩8꺉 pmtop p57ᲇOf'$2؁0B,sO6uVrI>RYl{R7D6ivd2 m`ho[ 6ff@.bd;NIsB&5%zT׹ B/َ:%=(U5Qn& / c I)~(~F Ғ]$ Է{Šʌ'\{ :7f,iS0{`샌vv=I|ZA%: !t^$__˾ l].xd7q:.Q7u[bc.{q'1r\d?~ ڿm&d2E3V+؅i_`}F]ͮjQq!Aڶ31j:n]7;G=.뛯G6WZ1ἍvzhӪI1n!/܃s2}d2æmk1~zN]J #Ǽp,H]g+1rj wq8dӗLJ&Aǰ[e x >/8%_bx<)hZ)ƛXp߃7{c}\&m­g3BgJʠ {nX=9' s8$`RxۗL&iȹ<)! cvAj.>H /klJV;7׳QY!ZF3Ճcvx;2(d wKNy !N`'d xi/Mgxf r[+dbBLL 驔f~Q3cϓfvD;\=>B$,tW@_GK~={7<>q۳e&{0'J n2Lg}w}>k$Oj6RdTj@/= R=^ԉ >Az fu10^qMCzmg'&IdͨS:R>OzEr+g0L0e{] psYB&dK{ׁI cx4)F&4ѝq,G#1.`O! djB.o'&1s;P6en6X֘$V-gjibi*eQg860={s=&ɞMM> )vnKdq/l^aӊRlj?i!\7컷n?HkO3w?3.d2 Y88V)_ShR]dhIQ? 43 h&Pl $ಇC\[>!-qH"?h D?3%;ɐ;g7L&"e1xI|NBUb,U.qmSᱞrM)?8`񨶍AT]z5d2Ls`>fћvXST&;ubXDH PivX[en I j7j8\C\M.jBYAwL0Jh:_&܎o9MX=0اlv'$ڝu.{1ΗSv$H9Wh89YN``g'\Z`o ڟ cTe1~o\vdԎ'i`cE,RR},E[(LHQIph'{$j8AkO#6nLSITfvfʃܠ̀+'Z5}d2u%`]jf fcbc. yK\cTXGəHo/bh:OԬV2!lK>Γ蒁^cIT2١!'hzޛb]AńzibD4i~*&Nw;?~%Z]yh.]lڵcOf{essNz.x1.;eoYVm }sv^d2OIh( T/↟&20mSF' _%Pq]Q7;Q̮lqMULL,>;Y.Ȭ,t6duvneEnwî< IDATe{ewFI$ٳ̭L⁩"7]YأQ!a(卪aP{nց l@"ЗTB-WK{QNJ4pET :) L2/s}lCL&ɴv+V7._KM z 5DvVp OJkq-U`ϱ)dk;E ۚ;ijW!&;b_* P2y\Ś3Q5}񛄭ɾf(FhFbsf+p{Lzv{a)p6hfGɯl4ZKIL.V?ƣdߚqcVbr%p5_ dޏcd4*HO (8* "P"fY'%D3@F$S`[q50NTszJ=wH]lzJJ`>>{KZ6#RMym >d2L }a2q_âP2C+P4Lne+d_XC:CAR+PnFv?|oWGR@fRRfjFQr/Ƨj7A=<32:E`}+5{e@d*dtp{;&H[@T %{ j~y.s~ {?1dd2ǃ;_%}f82#2i]8iz2bdeNXx*MQT{!1v]~.c\|qv'c(<^ŗ)b OIH'(@fegh`9P|k_*'(5e&0A!sAI>>>|8}v&nF{-2NN'F;MPE]dP+Z yA i&{`ט/_]4{d́zLvd ]͏N{6+r3፫\)>')v !̳N`) _2ّ嚥Ay}NTX2ɳk fl~7}d2`㜟ֳڛ1j.ƴiCup^;p e2뢹Hj gzJ䚡&8\c{[d p"ծκlPDhL+gƧzv l_IQ1Swk|P9su}ݰ}p\m;O;(7K6Xa&WW3eou.5_~l&d2tfjGeM-q$ p* nKtR?$H{~>R ĆkLȘbO=_Tj=3g'>[wL&i)""k'd{Smۙ7Eˤ۠@lJc@$XCfBz= UL/vJMCP?b`vPPW եُc'\}7X;sdOR C\kZj ?1֝oC5@~%c>F1$yj{hok]_!* 㲿md2=wF$8[ډᩩMq=L˝C$5EͥڙדȤ$\0^V/1T+;r쨮[N2!|v@&&dZemS>>T8wT;eLvb14I M@@y vd*fX{ hת* +HA\X2١|"2F3I6[0ac??S'~1?-MOyMSe/`cؘ1SB]P#M3,C^hg |O˞-~rd2$ͶXY?eT1r}ȥsitx^G 1#Wv0 48E?_l_l wa.4\p:.n}gH𾉟G te\2.IeLvdzvfGr3 9$iXZk eI_e4pJ/dHI &;xkʿGȯ[^I&<| 4@}J&dZv||ܡƳq|4[r|Cgp%σϵcqt_NjNv;OmKkNC:K%|׸b'5o+iߥ\pTY(J^3Wv&q&;KfjR$ lp*[$0&۝r +#"_\ 06!gB; eaYMrewR28nndGdz4\xc:dP2cT9JWJqΧ+!'6XUrMk9{#S5S%=IF)O'-aʱ~dSXHAt~dN0d~gd2-_>~&c;V 2<ծm80]Uo4ӛjvp_G㳇ϝŐO4-j,^ē5vyCUdO*N~7 L5 XL(uؗۥ2cBhn\QNy0[駦UF7݌kK{\vD{"c=6[VݘL&ӃĬѦcqJ !d_-m4d@nFZ53>8M?R &/IMI, %ViNd2Lm`"9/YC&0۶8>C8'&\pcf;;!'_p~7֡1'#v;h*xI Ws=pqmsjR*f* j_]HLف=~bXb#Ōҋkd{i ¤ ~|}z?w\WMuWu>Fcgjcq>.ϝ)lLv1]w t.{8eOO=4hdzPuL.'p5V q%چySNlІB|h PWJj>2 ZL,2FjkA*^7j^{>\3ۅ'0L&ө(NuS]  Q3vn lf`S2%uj lSf㵑Zj4^)`a-.>"4;po*%C]Hט \))KDDŽߝ7P8aAlQj48DP_JOZSacYp& s%+9n7QH/j5Fu ؐf$A2rAZJFs쥦|NG/rPlL3 ??d2NO}Pt}h;j<3٧ v P{_u>>M#dp:YpݦCdl$SuCT?5XXqmInTGI5^MO-ٮه6@M칤kPB i8>g֯/vovfOf pOp1%@,.c'I@d;3Eӝ%˴ul(`f\`zt4yF>&|]/?Ur=d~r ]Lvdz51a,.5fr| z |<疇W1MJSᲇ z8}:a#.jJV1ra}il]cMQA8U93ތlUb 39pd2NUD `yT}_Inw3λSLf|(!d 3ђ9S }^FUs߄^#5rij>{`WB#2H${^y}g:a硘o5bIFH'M0ٳlv̏cReDN bNu 6F)>ohi2f{O ~}?g8op^sLJ>۸&d:9A"n&؉AXr({ݥ{dC6T7A%9=1&֒iف6XSVcv !dzrMR|Qh2ld2^j} d:f  w>-o2QKfA*0.l[XjVGe5"v ŧc$hJ %?+{$if{_},>V ?8#c1٥4;Oύ Z!^BW  C5RC28d-mrxNlBfko~c\v>&e\ޏ,e2L&]_7cֻY+5ă PvatD;)' vȘodڥ]MSTR-5DUu^;A0ԅ眗1M0L&EDέwcz\L)j A}t`;!OM\ek1^bK'DFs6~K?lylVQ|vdo]5>՝g|_K cf&{sRR}A}HZ]l|Zf_*1Qyʱf ڥ)pʘ,#^l.${{w"^e2Oi.s?4d2LCއo:_YUSLJ'XfLgMI+kDRYY$d)h8֌Μi2guiM[==7Q܊"Y{;6|g#"3wp gׯߧ mnr b{vq)&F fg(;5`Sޘ5@f'jK\6^!cNBOm ፷"wv ەҬFG{ߧ:++S[ʨ}p, b; Q֘1pD̵.gp]]?$Wٵ}r' PG]*vbwbc_טv憯.hzmcjy#<v ѥk2V})*sٯ\SGqH!$esjgMurnv]g;PA#cxb*$LQ=bbBo5׺Y6o 6|zpQrKq>.sl 跢 *B!y}.>Zj/ij"{i:4 1`8)Ut$np{1IohvjD%7&)?hɾOf/% ݊o`3\iluwOT/E̸u#`\pw\Xe\tG?eB!$)puE&cB{5Zdj=JGY *AyKJ)rE:7ѓNԚK n[!/ByCx3qg"]9x!3 hijOM4mdJ 8Qu)rȾM 5jiFsx:=O ts d췼7CĽCwf-.e0]^مX mgn,h*;zrjyINpN ]L]g"ݿ66 ɳ2Nbe\"32B=xGc|FsS WK1%WTBAx Y^\ ۡ!]8,=;5@ZJSԆV j=cq%MJg;# ~"9}ympK7L2!2F*ȮخLǥPji$KMjo*ݍE]':F=nL{ L`2"WA\/e"t+nv8ºZ\ؽ|lppϖ(Du81ڢ>E=yXCd%|WF\1Pe}z$. 8?| Bϕq\Q8Zrڣ%V\ ; B\rC!QO_ܓ!bK{aNA\iJ"cVvk7;کϥ126Bȋ#B42ifɦ3v]gp8BTCYT3=ʊ SR-&e.!j/GƠU2F>8^֓_Y"2f] 9m^Mn=wyMKxwDw)gJ,6FlVDUfƐz[g~3 Dt_]Un.F 3E՜)s !T8{ {0)u$W>^#Xiop'J3T-g34BQ1Ew;&{naV`CTSdvnks=7 1nB4;m!F1;Si'T^{/^hNkhǨ]3:0qk yb.vq]symТ3KVsMD(ݫlveݎi WS/nu*&Idp#b7&{;,4 aZffG1P8iR|/١BhSSTn D8Bl66 jUeOn. |6B!? 爣j}`M4z,vo01Yg!ӁYbGK1=sԃ1GtXuK#q{~V˩Ȱ#b}Ǎ;cRgl>ڍ6fB!/';0J((owzz u\n4 9.f;2iSԵ4O3Tnj:w`m,a]DZKtLcxrا88C/4BU[pԯ.N/]u\(?&2׍!:#IřbaF_:kU6ݐ.RqZc~ l/mgI>5H ?F̹F,_Ș?a.;!v΁`zYEvj7yWԾ9PDX.v,58s˯X-[m9PMI4zj|ͽ.N/:Dmuym!N!#4ҴXlE-FzP5}daV^{P禬o2SflֲT.M{ QN7ߧ&ssحiڵ-Sz#8Șᅯ[+/vėdsN58KQ2NTX3z"ߐޜnNh|Xܭ8㶞?൳݉A~O:=$B&&u?OrɛG Sj- IDAT$΀W !}8mǦ[Ӿin> Jb)e^jx134)A֍5B&0aGռOf[Ew"cpأ:uNS/-+8B!A1CJt;}%F^;8N\g#n/!"e)?jodvz͋y1h"{$*ELjoԭnK36@y+'+d{MPue͓nmI JCX9A-+{)Nun{ UCYdwuO]~_WEdC#sIBȲB?cv{;e-c^엝 :f%cde:TB]ٝ6F;lvcV-ٓ/|qG+}݉+)MP?g-E!p88Kr:VkXYYLzB/dm:g-&J3:(vS ߻v&ttL-6h{*8ؓZeq2)ꥭnGh~9NdL)""{cTL6]gi+u\|v QKb{nrsm53:/cb>'? q45D4Bٓ94͐Ӟdy|F+$Z},~-zqa.jVݞ<YU,o 㴺^ɉ12iʌ%{vfΟp[@!䠘#dV;A(N2R/1݌ A6H0GYz=]0vkXŮO+oK՛jlL_pDv7]k18~y ~|f_Nvtؾw6,v9+›"ϲ٧vrtޠaF{"vg1jJnv+jd\e>[P-۫NCl"Gm'#첧_"cVh^DF{ȏDxKXbaF;*Poj 56vMQؘֆcu!Ǡr;;>fW_j~4<N>E !\XBڟD7vGYDx$;PljegNQ/Mb^Ϯs[fvxP3~Uўfl֥Oq"?t40wzBasɨե oD]3Htsw;oQg'E]Lb{xࣟ1B~վiš%N0ݡn'PeqY#/(jg ΠkA9`n+޴ƌؐnEʀra͍}f'r;jIl~]&.'i7H|eo\?L5q-ketPGEǴV0\Do+Y=7"vk͍PaPRoBmNWDwKp/eW6-12 <85AMOw!y >#vnQU3Ԛ}v|n5|?'O)By.NWv=EořVStLo;ړq`6蘤5M,8d3tr_٢:%=n07k߷d(//ͱ1W{ m:e_">5![C1qHyh7RUv/EA:م1?ш1ETn<VUGƠ^Ê /e*)vLa8Ens6e.{]}_,{*p-:hokZ Un Frg: & s>ϮW w"B}g&!'y'W{oDȬvz-l+!ۥվ:KSehquB;1P\ riKAQq?#'BF(j¹װ6&6I6;=!W]pDI_Xb{űރ=W26%ڎl1g&ڎ0Lj!=\5oѮLWLKj{MoU\̔ɾ O?z%Gh_ 7j҂$ 1Ӏ(8N!g?B6;B>p^jfQi]x0)xPhLM7%lj5GE>(On1j?#zEv>!C!p~bh~}.hC]بr!un:r1BEX N4^R+ņZlIgs(89[2V^hkhTf8A|B7;!I<{ƒ4E0Vo qmq+ċq͔ V,~׽xGLK65A]#3u-oG].πOd}u+#iٱ0 !#c:EtlkV\f2tm֋[+yS2-wsK\xf$WڡDDU ^3Wt)W!3L׽tNc,!<Ͼ8IS D^b' t߃A,[_Cvc7yq3Jhd fWjTh:}Td/떻+[hu>~?vB!f{q熨J) Ev/N[ :1qky1uŚW3C47/49ʚnn͞5@4:u\~oJd\!?в{FG{kl6A鵭&b|v("9_sk=K٥>GwN!q8lk.%&f|8=cKv>vg@.uג5׵W\46kn2%>Qt_"sWy@=HT+yfw\gOO"ry35hD4룊jN-^ R2#deim(FgՊ+:BfL ~ \]NO^&7W6@"lOv8?dG\ۢ䶕yeXϠ!59?X~"E+6B5d*>S|v/BF?:me]fvwE Bta:4ƢB3!cVtf&ıɦ] :Zc?FƊqcTF{2pk+"OpuZnFroܵ8 WVdsIrم}s \#{ !5[!3sU$*  ݵE!%,[[*) [be]}.l='縘d.OLjW:|G}mDMP-sUhpf f;`f'  6jQ^D#7"e=.llQjxќn Ӄuf**LXƨG*!<; vožjk"=,@~7ᠡkۑq=w>N˽2ڑ."=ϜA\u ,kv^&˹v^n1?1ۄB^*f}5bC]cՎTt1:J&sâ^+x ~,>5u/Az*zj3]406#'2br{#dv߄^q{1197 Pn沋Wlq/żvMPl?#=۠IQv\2^1OrюzSTRcCn!<;|8Wkc42՞dOXǃ?zފu'7Ϟ Ax4e}AjTL=n\˱IMByivK̝` \CԵ\1v)w;#ds^R۟kmpZyƧn&T6~"wMP]HEwK1U7 ߚcE܄^mߺQ&V&V~5vH֐{vʝ^, h 5vYwskF! >~7/j"dLtJha"f)£ksڃ㼆u:. Y{g~-i`ƠbG[`+拧!!vYiI3z?bG&I`EN\CgȞ Gn@=J+Z,j~0\sUj@tvLO_XS)[hbcvb՞ a<F3Ԑ7L͖3U?&_;[!ƨ06@ GA6A%q1҆tjЋ'GM4cBEt`By}'8 Po5F~NQ4@7NODvu2((_Xs4FiQv91+עc,W ͸jcc)[TD컬!ۨߌx`hXw3 iGZ l\.{Z$zEnv]-t/Iݔ뱖Dɧ VhTZp Nl'doi17([a'(~[~~ +"f4AFh؍A.'Qծ7jjm3ukӱ)*!ӏp;1~S>nQ;u^iAjisis_pޝ&oÚqƠ- oZ9 2G{,7J2DtP8E\'7L!#>(oD<<2{J4f#eڡ;nڥvilPtR~ϖ8ڭP5>7D`E\j|:ޣ^pjɫ#5sסLV7SBNuS϶̦C{i2kjZd捆k^cR jdn|qz Ȝl1js|(y[4B!v!|q3DoZݴ͞[;=)n&}t1J/~mP|z7K-wRM̓R&{ў9jrD{˾.N B^QwG{֤|5LVu;٧hI\1f12J7qV:".jqю+م3 {f| !g?P{ilT}`ǰż16F:٭tGIޮ` l8.:wk1 h,ךn#j /N6#B!v wq:䶿1:%39W>! j.84zՎYLծYA36b8fF.{%:+jwV T)Q6/=-MPŴLp nv.-1"{^m60F ߛbb ŵH]ۓשQpfDv{脳}}4O!9pf u|%) U^qI݅]6x5ӕ6@-e"{ e\LܪؘI`vm.3FB!s)06I없}r:۫oW>]# p7cd.bܥkyuVn:ȳj.n"dZj0`y.F|~ٞ"By^¯^v'BF.s*X#Ȭi%]4A *m|Mo5z3TKy7+qȮczto4!!2&6Y~*QTdFq]ޞtSl.֭v!MM#cb,kfQ/kSt[5WVs]R`ꨫY!俳Za cnNS.1]xHg~yj1-QDʘJLEĹ$lF8A݋)沫m";aStʍPQnZkjǨq$]}O˟ƨjhLwt1B ׮7uf6FEC!]f1Ry%^џ7eZNE쭃3&ƈ^Dw˚B*p$-? g,1}r:]Źwvp^n IDAT#f9ۓy{iivOunzc?E_ڃWk%b'>'jD,0@ fn 8.wP[v+}PlS!4MP KڳF%Wt&,8"s8>cv*zGb9ej_sF! f_㸋2!̚yh۵Ȯ%}| eYIc]{鞣j[ӗ}cc`le4B\XWs.| H !Ruqxܗ{֣;MRG{Y5x]Wvg=N,Ύ F|LӾ.> 42 ڭ"b{)kh*k7(}mdt z|_0;{fe[y"6A?45_&쥁]q(4NYFc ^w2]:FqW&a:VnTwA%Kl5p5n!<? K3 ;X!pwb7 8:tk 1?+ڌ~͐U90k5 P>qsZyPlE.jd\ijGe'BsSn78@XohW=B0q4NY|W;BjۑkҤ;F,/d^4/= ڼ`JT pxBhU?,*/ KޚPt)كB32 %C:Y ZdQΑ V+ެe\Wk~٫}҂*9p."jpN!~1t=f4G]L*W{E @v[}d1zg,{ip;4;۫F7{Qh|1 LNuDv5@jٟ !}˳[IlN8ܧKXD)]:ۧ81m'K]G+9*|ncCz-g3UohM.s (DleT5xsc]+Kug-J?Z&z|ܽhY؍N7v* W=FcT%6 ZnfDxhir4 ]^N!E Ufl"gQQAխ(@E ,:k\踽zWy.6?mlj 3}cnsg@BNΚ1>VxۭwQ2s$w;W*] jjE]iYXŸ5 5ւύ?-nmDƠϞ& z2@òؘ&$-r^bd%\{;G7--F”aS)(Cʊ3|1JFS',,OA4568QxFs)Vy6!sg4/@;Y`;u#bHꥏ'SQrF%gQ29Lt/E}ep7-;tof&; _q'Cs@q:/NOxFB!!D|׆Cj;Q G]9b;:_ dJzWCkP]Tfesu=Ec 9,=d[no8YJNtL//4AM֭nͷ^rBw5 *b{̛z,V焆oF{-܍Nv* QW+nB^̀_#>ө3 ק}:wEHj"b=n,;)|&zN* `. z i>9)qAӍ\ x⧿䠑ByV${=.pt<ƻI}D#KuWgޕ".O`{hHY}`^h4WSbe_"Y+=KhVF#Ԑfd⻕5qy:4Pd7Rj㵳Y!M#ۧ&ӆDGX.fKmVkXӋf׶ưj`glJ! >Y_hd僐~ jk7cjv ܃(ut52.bd<N>F|8B!ϻ{ECBΘ.wnG= lvV(bꕳȎXiz)cmZ+]. VӆFfK;0];ƗƴQU'ˍdrgp'##rFLCVc*虣嶇ᖷ#]B;!C~k~)>`l>Ckd3!3 Leݺ(gY0d Pos恟OKMӞ}j|~#!<㻃]:ܻUp3\]Oo!Z7 NrߔJMVlH_+ ^ğ)@Kh?RC=Cۏk?4=iIphP;-"*y4rqouE3I=gRձ<>f8oQ$YK3ush'r@_:b{R44Jfrg݋ibvWeS>:tv',8rI!B'_=v!CsnҥACҚpwvKkbWURoENBKNkG?'G/W8 p\r}0ӓVATw'{16S})q݆k؏vVܱX\BNAǗT "Q]UZ_P!*be]c!K #(.pBcoL=0Ю.}y:KNho뱯؎4jUg :1 䀰Ҡ+K.€1O'7Fd[;B\_1e ``ݝ>Wklv߇]0Amxݚ^qZz]ZBLWYV/!r(~SQV\ӵGv{j'^1_nUdou|f-]X2[{;Bt+tiMON!~A־ Fnީ Y\_^{kf;9YP`އ8GA|?<_3X¹SF4~J7QmOAmX q#DNX_r جrXSjkmrDlZ^$7<4Cg6.B9A?lpLQh.?ۮ[]R岋ha!ښn g>{kV7!geWq1[ßr@I!ܦq (% } ݊R_i{}l>5gϬQf'ð"Zl7-ո= "۫>#lFN.vdEG]rw8/0WkrVl&2^UoPK9>lqsHGB!6!|W#(k[! >7׍v7} !} 7^ UD'Lv4O#~s* !ZX"^+Tp9܅nRj5bzdL0)Ͼ:p8B{g4AMԋ_d1& =+] 0]:ECxmpSO0gDst ,k1ڣr{%´ゆFu,|y-QOv$?B9?!_?H#H&VF5g${"{gIW%Gk_\>'hgσ;~hpWXŸح\su?~w>B!/A8 FĽ7Nޭv-RB!S u$r|tسX=uvjn6[a9C%WutGQeqJ4>~tg8jxw=Y  bxy 'x:^zb{︜:qZ8m:ii-\O_2Fz\ɊO\ Mw?agD! k< 0 a {"[F10h?Ls0V.ttL_(i\΀`B!/{=xh{=fF+lWQ2hj'=)*fU+u4Xr/:&NؕWrAKnVs8ܧicZُAuobk}3q{j F M7p1E:{mŀmb^s]>yj>8w/c!܂;W7 vwv Riㅋ}nl*ϜNC)NF_&;.f[|RShvzpjt]WVyJ5RN˳!MB!ժ Ϟ*"~ao{ΟK )5wy1ܞ(}=!juJT'&AḎ1k8e ~ugҜM}7\d4l7L˹/+izkiJ&b!CXBWN)~aGPmQ4Lie ! ^̸K1\AYkqA50ljڥv˥[[;w4qOH"'E !*׆*7G];'Ͻ)#fvQ%C3 :%f}xTŁDpn'k\cnuؘN7bpkzS R7wvvьw&]w<^㟭o>}!g5z!N%7^^~5V.]H/OVk y}5woQe9`{0G[VրBd|;N!gd>nrK= }CEp/9ۧ-RwIST!'}>fbcSp/lv>޶\S;zts9gɧ!BՑa I.d o+:~ vȾw0~a+fO={u?먗c1͓:ZzB!>Hz!ݍw^!/;Ia%v%Ӌv!ϦhN'!voono]ݍcؘXh6ҎvE%Ө79pq| ħ`!B!/$~8 &h8a4Bgّ :B^R [sf= StQ2=v@EҫZ%Bf(vaN<7f&%2cI`OuTfc΀Lj !ByX#xUFloh[ N#v3k}iԤB!ϥy!?(Gj;+E/»6Ǿ4UR#uQ䳗\:*& [3\.Sӟ#>";!ByeB{|~/sK4~klrk>گv K=r39زx#Bm >Ră71Nfu4^>Jl7cy)ٵ}B4I4j=x,8ګOw0Ȯ |)B!Wڣv\]D^j/[ ϋ!J 0~SrJ]ʜ ߖfwju J=PSolB!? uo1:v)P IDATItDxWq2^sCIX$7:ڭƧ^Sb=s\9CB!XF>kq!VמBT]ZwG/K#B`{s}.b/jqehl>++O'\SNN31vB!sXv%z$Zn B^MG?Eʼ>ς:m: ޥy^LF]$;g]/4=Il1-N]gO.ͮTߝ=cw!B!mоl0&2ۣ3rcOӔӽ5>Ȝ):$B αխĩaV[u:ddiTr$XKg/:57s-sְ5P4]-pBH˞]፷"?\+rO]g(+ 3iӫm>%C4SB!\گ cG^:*^,j5*aYv]d~ZwDKڭ2S7^-]8Gs0i 6[kq4rК=?QϖukG&j`p G!,$>z/)~#&2Ipw!gMRnr}kGl.3ß7B!Bn*?⮁Li9 "cE$hy`W Y$C5[- |V4HEqyIQFv"Q尟<@qGӛ;`NuZ3 g57cCf{iP͠fEr7Aek~{`CBR4+Bo~eplLtop{E.7c Ⓩ(B!8,!d38 hk - Qݜv=p[cD=2ôQXQj:ӣ`/ϙԘuiw?^;߽I0h?N3B!υC<8Gάv;`iFè !B9PhZ$"\E*si wI;IlKEr׽? m\Uz|grhkrP8UY^#.4g+ K"( ϱ2r^QΊ"G";vB! ާN!B+:-6 a4S|ߜA/K9(%[縉nc˗;=΁ ɖ>L|\F1>e=G!众MN eB;B!B!8,}qbH\P"j: 91Ff{j/5?0@\lbrf};'L"d9sr{^/VD,%ccc}`./xO`ְ޿ћsF O#'B!B!9qXB#cNLSK Qh\iHeZ˓TZ44?uخ눐;ܧb^zZc: &׹iPj[z<8E)AcC~;4B#B!B!<CZmg< ȳ d6\f2oCsZ1%:Y䋗"Gb?4JnG};:k "{t˗Ο| @^ Sg#ki> aƴ=iOu#B!B!9>5nWnli' ٺ1f12 މYjWk!3c3Gr}84+_|79ڽe7ƸyK>>wz\C..6B!B!8@iyN;tCa-C-OXg#"B!B!<7[}vcT/&du`[a&O/Ă]DD+܋Ѣ\ [*1٭ ,[ !B!B#AU1pzB!$bsMq,in7%',.Z'G{Jb{,Y>r~@ ծ^ OF'BrkAsOO1#d`䵣]HE̫[bӯuыr^#Fy̧)6>|fn{)Kn|~)ѽ0`F6tlB!B!8h=0 qZxtQcl9Aqܵ=tx{3`Co^kڒW~~@Hhe&NJq1}α1n!B!ByA~ .{jtwۉ!ӧq,n~@< +BMbcv33Fd}Y#Hcbx;yAS5v-}m'%z{~^^[/k C7B Ș)}s-!B!B!/W0~υ7ܾk&ƃnćpf %58n MV|IS=D3>KP=6<6;k| ;آ,5gwJ71B!B!8ַb-7xto3D^pol?_lwvOﭵ| 4E=\-Qa A'^nv}ndO1>il7%pq-!B!B!/!_wӦq1]*LN6z v{G"cgI"d;2fZ@>~؉A#vb~ '|EdXQd#{rKq1VSY/fogM}aEHG(os !B!Byta%2`s9qVOQ5!ӽ( 3fшYU,[G̫Wij .i޲ eɘQ2c5݊k;c0Jn@Ul٧ؘ%Cn!B!Byo͚^]GwwBcX Qnp\Q2Bp!(';rZ].C>!VTWls?%ӽQ#~DD/][n̗1?@rO ؘۭs-!B!B!@w[V4~w~-Q(r64L b:ڧӹߎk6b.lw{4pSTמ΀ϩ6ip"cCj,a=q1WcB!B!ro^]MQ׃ !2DTZ( g.sycʥn9ŴiyrR6{POJ+ þ uqV{MdO?p"cf lJ!B!BapO{v t16f0awPX:B&a4GcX嵊KP:`*kܨF"i\ca49sSX PG}s \N!B!Bȁݦ?W烣HEȨ&ڹY V=>vL4;΀O"B!B!Xʵ:4EV@؎~@=9Pc>tCјyCTv]o:z׮,]o!js#Tkz.牕ǤnMkqf\ QB-CwJl79B!B!m\ηwYNj7DӾn/:aͽ5rG97]*1-JSUE)iF{`b;=q_N!B!Bȁk=ΘӾC78'WtJslw-~OCn9-g{x1sAisك6Bey,ͯcṆ˽n4B]${?%݉qB0God}LE9*F~nvB!B!Bx?\\Xe\[NvxN)]Y72o"n8:f)6Fłm艾 7be} "^Yv-(Ί6[!osGtB!B!r_wqX MQ Vfvq&=Y˥W#:Xܞ'If~ҧؘiG)" ZV rZ+ ;R1}vOp_U_ohcioDL"fl#n!B!B9p/"1=}r#]u԰3'Zܕ= 0v^7Ew5x(=x(GZ< /v dw#cȾ~)#c!B!B_wsDDȌb{ =v;``|ۣCPӦal-;Ppǫ)f3.hB,=NJu1I`GnM)/7B{1%fp_] M~B!B![K%1BSB@j;݊).n>MI -BFRܭؘD`WXnw9Zqѹkڭv=}|vo'_{jۍyl.f'B!B!䖰~!2":&tQDV;1 NKZvKtޓz 76Ng_j/6B 1}!] E ]䲟|BB!B![|WnfʲMnFٵ.fleBXj ;L-6^CƨVLT f[v3pgBxjoV,L!}v+'$_]OC!B!B-?$`-IDAT]1pA$_lyIq2;݆2q@~qfQ;Fǔ\q{.O.vjOb}3ާB!B![e}c;7CvB;ke\ϒa9ý>AD$7Rw>O!?r=կ+Fnl>nj-}rbȘu+.f+V2WxEvB!B!Bn!!џŤ1j&t"%GǸ Gpi螸ڵ#:{0V>a?>r_;}VzITO0Z{IcT\L/Dpu=BN!B!B-dҿw |HBp~y-; ;v9 ,(>\\E6; "{+1}D"}}s9쏁pkD!B!B-? .qZ`\[e^ݴ%v`E,uj6t?lvp{a7c~ٷ~\vB!B!;z3"KBIIAK%Ö%lxka"%sϋ|ECwcJvwE5x]xٝ܆o2?f۴]=a<kSKQ_G+>ڽ! 71mWCY iQmLy=uT{e}gоOV"AȾU7->]^gŧ"~Bvxܺ;1 {Y<YZaj#n]9p ܋gM}_HLe1vh_M/@-!{mؾ&ٯ."."?+euo>iOLga dY~O̫F%uU~{;nMٳזe#z_>ٗEؾt",Qē^!'NoُFa ^ls~}P>f)[:wMa~Գp} է&٧ۏ ꇦ{w#'G1SIU.fY^!G_E&~:E/*d} }Qy>1jdj[Lgj"Uq&O4{Qdbη! tr_2\<)"UV̢=!{9x9͞Sal6ԫ52ٟ/a/lb{V%S "Lߜ!7e4DȾY~zquq8⋏7#NGމX拈8[D|}>˿fl{uǨ<*ϳ屹oF7PzwGU%l?$h/؋i}w!U_E<N޿[wEmОA|GE+p^wj&{6x>.ofj T{ʘkYny'jb_ p[_x{Y>?X,6\l?p}u hQ^澵]S]=핉,ANdNA{^S|ޅ:6/O?l?ن0\/c6GV#SϮbpjxM%} }PSLo:ٯ#]]EW('Bv%NSv.yvva,uzچ-M͗lȴ_r:+FL/Iy0/ߛϖՎ}{kb6~`/`T'Uu6~d(Ophr~w'O52'8c 6վZ}W6|D{Y+Sh?jjo_>Q3ɞzZӲ Im'{_H?-#h~)ޅYo{){}h~`:b:h?}4iGSiC&ژ=W]~,瑞=-$h?%}^{9^k-E;x\1SGgY?/m*zb riWw-?WN>ty&d[J~z)^qrYL>>h?$peL;n,E-NZzp7{EO*{&WA{ob}U&d?8{#KOy'V%SLdRft?ۜGq>aSr=绺ٳ}rj: `OM_^G\E<'v@~W%}o|{Mud{w>xX*{voؾ4;w/}О?Op?ԎP=~L/{v] w애}/U1Ia~}<[?`@ӺJnU2q|?hM ٧&#&ѳ#c1SNzz/=-'ٗ4{o/GA_K|oR{#v=Q_d_}S/<=_W<$Յȗߥ͢tԩ*}{V!3*J{oIqeML^b\ O}*`vJq[EݾmT RC=XUO륲}"d5~ɠ}b}vO_wS"8Z%h^Nq絈;|-K׻LS#9쫒9P5|Oհ=cG}iOuo&󐽘b0ғ_)vĝ{]wĢŸ%1qv|yQŽ h_KO0=Wer˾dBu~dŞ8x|틾*9ﯣ>^mϤ=7ʰ}"ԽA!O+{y;;pce/S{=n7~U٬^'3G}9BȐT]{L1Yoia>c/jbF:`|.@AwT fQ?@5ha_OVǔU1OOz>bz/G<}쉀x!_)>#c|7l/UɋcL1=`t=W|. JM!uݮýGl{Ď|'[:ʘ>P bz=W"|ڿi?u.M] }^Ȕ2r}s8.fbiZXx!հi/Z4rp}^[_DL>ө8ͯw4^pNkKN/gϾ_һr߹4V'ѥto1Y3c1QSvOĬS뮇z_G?S:l?wS 2ݡ{D%xO~-hLuU Njuj@2i7^='gR%l==m}źw7UAVqrwT+p(B i4{WT{Wr=~}qu#$\{m/Q]dje"TJ>US?Pxo?\w}>.K5f* ח[bxgBu'hgomb8>M:"cA:@W7'hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hS֢IENDB`atomes_1.3.1/data/pixmaps/jpg.png0000664000175000017500000000660215212624223016371 0ustar lerouxlerouxPNG  IHDR22?bKGD pHYs  tIME A IDAThŚm\Wy/I;!/$@7qBR$i((jP* TU*B[$:/DQh;zw۽~83kRtwܙ{??yfy۷O !$I4|!:62L;pkCa-I|ahh(oT#ιӤf|c{kZ{#;v`5 +뾵4M1Ɛ)i`1:<{ں2Q0Ƭ^[hH0 e.yW~|뭷/_|ͧ|$&BtM*pW_uƯFFq-3J1!tZyZF #o' C9 SSSgd2Ow}Ƴo1]!%H+187B *IM`Kќ`1t__sM7o3??SSS'O:xP]wU Ε@8!Ho)ImR%KjR @kD3"@){H1RU)(5c6&Iګ]):Yy)K,|ßů wm;{HL+o opDaĮ6\ k-82&^C+͢\5VHM (H'Otj&/:x! _97q޿e6]Վ3J) ?ۆGFFu?xg3x-_G$Xg9M\Vqv,bq[RΗ^zI-[d!=CJMX Hֺv|h$͖y(b~~~Ԗe@ڣ;0'?wp1Εd؋}!>$Mli&M,ݙt;Eu_k]V.Q(PE>#D5ſ=Cj(:ן[!AإX}-褷皪 $>ѬY['|r6DJX9:uL#\BgZZb9؄?Z&dăqx冭;wovMձ|1Va՛RJ@_c:ÿ_޿s=8+*[w˕׊zp89Rl6$Fztbsٱm۶Bȅ6NuIN@{)+pk< \"y-T*QTVː^S8C"۶mWHgzn4=z|>Y@' 5(JUuCP;j LquZӛk_7|M6\-W>=()l aJ0>  =撃HaPhW75` `6XP{((Y|P/D'օZBy)!`XaFLCb!,PK}"a 8>:DW]24 !axoLڃ@7KP`a*5MsVHklaDB&+:3e85c&P5R$uB\j`4#(7`=u9sGWr<he@ ('0SRPກQ C}#8s_n(ԺuTkd %h[rYO!'= @WF0l`!i a(}J BOfvQKt{g4gd@37sۮGyYTA=52p%0Hgj@ j s v UK_L/CR\?f1gVZ{Uf6DT=,s/z_:kI sEuH 8~zv9aDsi6uPBԼ?%K֭^k`*y 4d!s0[. j;Ɓ3n8w2`o/#rvYvկjl\zG)Q{'ar]Mkw15&58t2+Yl,,/K~;ӊ4upK*_^'M2З#8}'fR/#cl:V ˎ3;G&g8zi~rod}!-#~T8㳘 kAG:E sUx HnLvzd*KMoRl4( x M} kIH+E(: Cs?bӌ6Mh%^_Gy}񳿥gn"5r˲8ڱEdE&bm I.q=8ے>v,pL!x# ZA_'Xfwv>~u{-,[8NZCMwؿB'okfiIENDB`atomes_1.3.1/data/pixmaps/png.png0000664000175000017500000000773215212624223016402 0ustar lerouxlerouxPNG  IHDR22?bKGD pHYs  tIME AgIDATh޵yW}?uOϵ3;;k]:lL0P $ $PIQ#) !\UGPE6E˲% Yڕݙ~gFZRkj^w}wV\ĩjqcR\C)A* ~˽VZ'cPs͹Ds|vv;vm۶uO a~ 10 Ðrl=>>ŗ^z{6m]W @2J. Jƛ` :XLA0ȈٹsKix4@)(7}ho{{ D+X@ո&"Xt=yo\%=Cb8;$uQhD+ш$V@T ($t U9˥@4V& [U̖oH*P(000w]ˣ۫2_n]S P@@hj+PYb8.+FX`D0ւRZhՎ+ f(gpX,dY1Wݻ7ԋoRxYnσUv i[ى1c'3;v<̶mٌ>ZMcP$1>c,ۆ1@o'|uAH.;X "t$cG6qF ZξE8R qZvqhM#>l^K-r1 ,4]<[ >}=/q?4hG+B-됌{ hk}_.?֭[E"7p|}xᵓ@kTǟzVbT,o:w |pRM,YkIRj5:rZ33+]bΝ;E ;){7 W=Gp/ orA>֪V|jvV7ܹ h ͮ.x֭Xc%233Kv+t700,y~qo' سƙړ~0OogDxkx+ɥ=;x>H>(MqD"yu]<#ϊkV-bDT $@=4\U=bU͗]s:;;/喼hfgY1G&tLJhF rV-=V,zSNL&Bl8>ON2AMGVQ/+1MU,~̥͐+{:4T0sS(*A$$[Ů˫FO[n(T06 C77ae[?̼zy It<3xV,"LK>lAn'W 1D&xsbK=F %Ls ܀>IKO=dn[ǺJF`RXkB6'݈ת !;>)z b I:)rNy KR̈Pd<_G>(Bk@lCpikbUZřy^}7 le` 2ĵԜr"t3a(QX, rз z` 5ebT(08fI5҇^B fM>/̈fzҢ'8XßЧRCk T UQ zzNXL ,aՖjxkw(N7b'XRM'yq tQ|H07 :q ?†k-E_}Wag9^*efbMޑn~f{1]7xܚrdǯL6l<6L(N)f%3:"hфw`J[d&f+ؾ>=Q(Zkcb~Y`2(^stD"[c:Sӆn)jIbNP"9)51ҪU []RUE+[R"hfEP݆ólmd<:0k FNc mrQv͑=6Ē1^9')k:NkTQDŽ0,Kk&bܶIH8'!8E)ĄPFe<~ףk&g\b#Vo7o /{?7f^y0K+rtBXd'5ÆP$tR|g.O B8y&KPu@xxժ`LJ3R yL-{~>Nlłpg~L|=}v#s_{',ʂ1VWe $jKݔw"4o}$Y~U.'Z]*d`-QT0SQ&HšP.SC-I߃;m )P)]nOxx@_:dxAE!f:M/piM$Mc3_<ŊZ!li?瘟y܎$ugi}N !Kq:> K vH# E6هuDWW*D\HcZBĒq*́uM5{䭢 |kߴ @ .+R"(<@%ت؅&iR@h߻s:FgΜ趷^igqhWZtXm+t9`/4nkjHsbX슄:_4XWR j*ęY399)~t= uUB_LcoD9uKW $H{GSTǷZU(~46kpDZvr˖-3z׻^TGgh0TA(Vȑ#ax%MIENDB`atomes_1.3.1/data/Makefile.am0000664000175000017500000000314315212624223015453 0ustar lerouxleroux## Process this file with automake to produce Makefile.in atomes_datadir = $(DESTDIR)$(datadir) atomes_pkgdatadir = $(DESTDIR)$(pkgdatadir) atomes_iconsdir = $(atomes_datadir)/pixmaps atomes_desktopdir = $(atomes_datadir)/applications install-data-local: if test -d $(srcdir)/pixmaps; then \ $(mkinstalldirs) $(atomes_pkgdatadir)/pixmaps; \ for pixmap in $(srcdir)/pixmaps/*; do \ if test -f $$pixmap; then \ $(INSTALL_DATA) $$pixmap $(atomes_pkgdatadir)/pixmaps; \ else \ $(mkinstalldirs) $(atomes_pkgdatadir)/$$pixmap; \ for pixma in $$pixmap/*; do \ if test -f $$pixma; then \ $(INSTALL_DATA) $$pixma $(atomes_pkgdatadir)/$$pixmap; \ fi \ done \ fi \ done \ fi if test -d $(srcdir)/library; then \ $(mkinstalldirs) $(atomes_pkgdatadir)/library; \ for librar in $(srcdir)/library/*; do \ if test -f $$librar; then \ $(INSTALL_DATA) $$librar $(atomes_pkgdatadir)/library; \ else \ $(mkinstalldirs) $(atomes_pkgdatadir)/$$librar; \ for libra in $$librar/*; do \ if test -f $$libra; then \ $(INSTALL_DATA) $$libra $(atomes_pkgdatadir)/$$librar; \ else \ $(mkinstalldirs) $(atomes_pkgdatadir)/$$libra; \ for libr in $$libra/*; do \ if test -f $$libr; then \ $(INSTALL_DATA) $$libr $(atomes_pkgdatadir)/$$libra; \ fi \ done \ fi \ done \ fi \ done \ fi # Remove doc directordy on uninstall uninstall-local: -rm -rf $(atomes_pkgdatadir)/pixmaps/* -rmdir $(atomes_pkgdatadir)/pixmaps -rm -rf $(atomes_pkgdatadir)/library/* -rmdir $(atomes_pkgdatadir)/library -rmdir $(atomes_pkgdatadir) atomes_1.3.1/data/Makefile.in0000664000175000017500000003333315212624223015470 0ustar lerouxleroux# Makefile.in generated by automake 1.18.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2025 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__rm_f = rm -f $(am__rm_f_notfound) am__rm_rf = rm -rf $(am__rm_f_notfound) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = data ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ATOMES_MAJOR_VERSION = @ATOMES_MAJOR_VERSION@ ATOMES_MINOR_VERSION = @ATOMES_MINOR_VERSION@ ATOMES_PATCH_VERSION = @ATOMES_PATCH_VERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EPOXY_CFLAGS = @EPOXY_CFLAGS@ EPOXY_LIBS = @EPOXY_LIBS@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCFLAGS_F90 = @FCFLAGS_F90@ FCFLAGS_f90 = @FCFLAGS_f90@ FCLIBS = @FCLIBS@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTEGRATION_CFLAGS = @INTEGRATION_CFLAGS@ INTEGRATION_LIBS = @INTEGRATION_LIBS@ LDFLAGS = @LDFLAGS@ LGTK_CFLAGS = @LGTK_CFLAGS@ LGTK_LIBS = @LGTK_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIBS = @LIBXML2_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENMP_CFLAGS = @OPENMP_CFLAGS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UP_APPSTREAM = @UP_APPSTREAM@ UP_DESKTOP = @UP_DESKTOP@ UP_MIME = @UP_MIME@ VERSION = @VERSION@ WINDRES = @WINDRES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__rm_f_notfound = @am__rm_f_notfound@ am__tar = @am__tar@ am__untar = @am__untar@ am__xargs_n = @am__xargs_n@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ atomes_datadir = $(DESTDIR)$(datadir) atomes_pkgdatadir = $(DESTDIR)$(pkgdatadir) atomes_iconsdir = $(atomes_datadir)/pixmaps atomes_desktopdir = $(atomes_datadir)/applications all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -$(am__rm_f) $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-local install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am uninstall-local .PRECIOUS: Makefile install-data-local: if test -d $(srcdir)/pixmaps; then \ $(mkinstalldirs) $(atomes_pkgdatadir)/pixmaps; \ for pixmap in $(srcdir)/pixmaps/*; do \ if test -f $$pixmap; then \ $(INSTALL_DATA) $$pixmap $(atomes_pkgdatadir)/pixmaps; \ else \ $(mkinstalldirs) $(atomes_pkgdatadir)/$$pixmap; \ for pixma in $$pixmap/*; do \ if test -f $$pixma; then \ $(INSTALL_DATA) $$pixma $(atomes_pkgdatadir)/$$pixmap; \ fi \ done \ fi \ done \ fi if test -d $(srcdir)/library; then \ $(mkinstalldirs) $(atomes_pkgdatadir)/library; \ for librar in $(srcdir)/library/*; do \ if test -f $$librar; then \ $(INSTALL_DATA) $$librar $(atomes_pkgdatadir)/library; \ else \ $(mkinstalldirs) $(atomes_pkgdatadir)/$$librar; \ for libra in $$librar/*; do \ if test -f $$libra; then \ $(INSTALL_DATA) $$libra $(atomes_pkgdatadir)/$$librar; \ else \ $(mkinstalldirs) $(atomes_pkgdatadir)/$$libra; \ for libr in $$libra/*; do \ if test -f $$libr; then \ $(INSTALL_DATA) $$libr $(atomes_pkgdatadir)/$$libra; \ fi \ done \ fi \ done \ fi \ done \ fi # Remove doc directordy on uninstall uninstall-local: -rm -rf $(atomes_pkgdatadir)/pixmaps/* -rmdir $(atomes_pkgdatadir)/pixmaps -rm -rf $(atomes_pkgdatadir)/library/* -rmdir $(atomes_pkgdatadir)/library -rmdir $(atomes_pkgdatadir) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Tell GNU make to disable its built-in pattern rules. %:: %,v %:: RCS/%,v %:: RCS/% %:: s.% %:: SCCS/s.% atomes_1.3.1/data/library/0000775000175000017500000000000015212624223015062 5ustar lerouxlerouxatomes_1.3.1/data/library/force_fields/0000775000175000017500000000000015212624223017506 5ustar lerouxlerouxatomes_1.3.1/data/library/force_fields/amber98.ffl0000664000175000017500000016131115212624223021451 0ustar lerouxleroux AMBER 98 k-calories per mol 54 83 0 0 191 0 83 0 31 0 51 atomes_1.3.1/data/library/force_fields/charmm-ethers_35.ffl0000664000175000017500000007400515212624223023253 0ustar lerouxleroux CHARMM 35 ethers k-calories per mol 13 22 0 0 55 0 106 0 0 0 13 atomes_1.3.1/data/library/force_fields/charmm-prot_metals_22.ffl0000664000175000017500000054230415212624223024310 0ustar lerouxleroux CHARMM 22 proteins and metals k-calories per mol 98 139 0 0 345 0 452 0 43 0 98 atomes_1.3.1/data/library/force_fields/charmm-cgenff_36.ffl0000664000175000017500000372537615212624223023233 0ustar lerouxleroux CHARMM 36 general k-calories per mol 163 506 0 0 1561 0 3937 0 125 0 156 atomes_1.3.1/data/library/force_fields/charmm-na_36.ffl0000664000175000017500000035704515212624223022370 0ustar lerouxleroux CHARMM 36 Nucleid acids k-calories per mol 42 89 0 0 226 0 502 0 15 0 42 atomes_1.3.1/data/library/force_fields/pcff.ffl0000664000175000017500000113537615212624223021135 0ustar lerouxleroux PCFF k-calories per mol 133 627 126 0 329 302 216 492 0 83 94 atomes_1.3.1/data/library/force_fields/oplsaar.ffl0000664000175000017500000154764715212624223021670 0ustar lerouxleroux OPLS All-atoms for RNA k-calories per mol 145 242 0 0 593 0 2482 0 131 0 145 atomes_1.3.1/data/library/force_fields/oplsaap.ffl0000664000175000017500000075640515212624223021657 0ustar lerouxleroux OPLS All-atoms for proteins k-calories per mol 78 159 0 0 437 0 1446 0 105 0 78 atomes_1.3.1/data/library/force_fields/charmm-lipid_36.ffl0000664000175000017500000016413315212624223023065 0ustar lerouxleroux CHARMM 36 lipids k-calories per mol 29 50 0 0 131 0 180 0 4 0 29 atomes_1.3.1/data/library/force_fields/charmm-prot_metals_36.ffl0000664000175000017500000062466415212624223024327 0ustar lerouxleroux CHARMM 36 proteins and metals k-calories per mol 53 132 0 0 364 0 706 0 35 0 53 atomes_1.3.1/data/library/force_fields/charmm-silicates.ffl0000664000175000017500000003307115212624223023430 0ustar lerouxleroux CHARMM silicates k-calories per mol 13 14 0 0 27 0 34 0 0 0 13 atomes_1.3.1/data/library/force_fields/amber94.ffl0000664000175000017500000016073115212624223021452 0ustar lerouxleroux AMBER 94 k-calories per mol 55 83 0 0 191 0 81 0 31 0 50 atomes_1.3.1/data/library/force_fields/charmm-prot_36.ffl0000664000175000017500000062267315212624223022760 0ustar lerouxleroux CHARMM 36 proteins k-calories per mol 53 132 0 0 364 0 705 0 35 0 53 atomes_1.3.1/data/library/force_fields/compass.ffl0000664000175000017500000013662715212624223021663 0ustar lerouxleroux COMPASS k-calories per mol 45 0 54 0 0 94 0 95 0 22 46 atomes_1.3.1/data/library/force_fields/charmm-carb_36.ffl0000664000175000017500000110444215212624223022671 0ustar lerouxleroux CHARMM 36 carbohydrates k-calories per mol 59 153 0 0 438 0 1354 0 14 0 57 atomes_1.3.1/data/library/force_fields/cvff.ffl0000664000175000017500000111746015212624223021135 0ustar lerouxleroux CVFF k-calories per mol 133 776 0 775 563 0 295 0 41 0 45 atomes_1.3.1/data/library/force_fields/cff91.ffl0000664000175000017500000072336615212624223021130 0ustar lerouxleroux CFF 91 k-calories per mol 93 667 58 0 330 155 216 294 0 70 40 atomes_1.3.1/data/library/force_fields/charmm-prot_22.ffl0000664000175000017500000047522715212624223022754 0ustar lerouxleroux CHARMM 22 proteins k-calories per mol 47 122 0 0 324 0 445 0 34 0 47 atomes_1.3.1/data/library/force_fields/amber96.ffl0000664000175000017500000016101715212624223021452 0ustar lerouxleroux AMBER 96 k-calories per mol 54 83 0 0 191 0 81 0 31 0 51 atomes_1.3.1/data/library/force_fields/amber99.ffl0000664000175000017500000025127615212624223021464 0ustar lerouxleroux AMBER 99 k-calories per mol 64 116 0 0 281 0 164 0 38 0 62 atomes_1.3.1/data/library/force_fields/cvff_aug.ffl0000664000175000017500000117402315212624223021767 0ustar lerouxleroux CVFF Augmented k-calories per mol 172 798 0 752 640 0 342 0 41 0 86 atomes_1.3.1/data/library/molecules/0000775000175000017500000000000015212624223017052 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Fatty_acids/0000775000175000017500000000000015212624223021304 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Fatty_acids/lauric_acid.sml0000664000175000017500000000604315212624223024263 0ustar lerouxleroux Fatty acids Lauric acid Dodecanoic acid Lauric acid --i--n--I---Dodecanoic acid Vulvic acid 38 atomes_1.3.1/data/library/molecules/Fatty_acids/cervonic_acid.sml0000664000175000017500000001034515212624223024614 0ustar lerouxleroux Fatty acids Cervonic acid (4Z,7Z,10Z,13Z,16Z,19Z)-Docosa-4,7,10,13,16,19-hexaenoic acid Cervonic acid DHA Doconexent 56 atomes_1.3.1/data/library/molecules/Fatty_acids/linoleic_acid.sml0000664000175000017500000000761515212624223024610 0ustar lerouxleroux Fatty acids Linoleic acid (9Z,12Z)-Octadeca-9,12-dienoic acid Linoleic acid 52 atomes_1.3.1/data/library/molecules/Fatty_acids/myristic_acid.sml0000664000175000017500000000656115212624223024654 0ustar lerouxleroux Fatty acids Myristic acid Tetradecanoic acid Myristic acid 44 atomes_1.3.1/data/library/molecules/Fatty_acids/oleic_acid.sml0000664000175000017500000001007315212624223024075 0ustar lerouxleroux Fatty acids Oleic acid (9Z)-Octadec-9-enoic acid Oleic acid --i--cis--I---9-Octadecenoic acid 54 atomes_1.3.1/data/library/molecules/Fatty_acids/arachidonic_acid.sml0000664000175000017500000001026215212624223025246 0ustar lerouxleroux Fatty acids Arachidonic acid (5Z,8Z,11Z,14Z)-5,8,11,14-Eicosatetraenoic acid (5Z,8Z,11Z,14Z)-Icosa-5,8,11,14-tetraenoic acid Arachidonic acid Eicosatetraenoic acid Arachidonate 54 atomes_1.3.1/data/library/molecules/Fatty_acids/stearic_acid.sml0000664000175000017500000001022515212624223024433 0ustar lerouxleroux Fatty acids Stearic acid Octadecanoic acid Stearic acid 56 atomes_1.3.1/data/library/molecules/Fatty_acids/hexanoic_acid.sml0000664000175000017500000000352715212624223024606 0ustar lerouxleroux Fatty acids Hexanoic acid Hexanoic acid Caproic acid --i--n--I---Caproic acid 20 atomes_1.3.1/data/library/molecules/Fatty_acids/palmitic_acid.sml0000664000175000017500000000740015212624223024604 0ustar lerouxleroux Fatty acids Palmitic acid Hexadecanoic acid Palmitic acid 50 atomes_1.3.1/data/library/molecules/Fatty_acids/decanoic_acid.sml0000664000175000017500000000523515212624223024553 0ustar lerouxleroux Fatty acids Decanoic acid Decanoic acid Capric acid --i--n--I---Capric acid --i--n--I---Decanoic acid 32 atomes_1.3.1/data/library/molecules/Fatty_acids/caprylic_acid.sml0000664000175000017500000000427515212624223024617 0ustar lerouxleroux Fatty acids Caprylic acid Octanoic acid Caprylic acid 26 atomes_1.3.1/data/library/molecules/Fatty_acids/valeric_acid.sml0000664000175000017500000000325715212624223024435 0ustar lerouxleroux Fatty acids Valeric acid Pentanoic acid Valeric acid Butane-1-carboxylic acid Valerianic acid 17 atomes_1.3.1/data/library/molecules/Fatty_acids/linolenic_acid.sml0000664000175000017500000000746615212624223024772 0ustar lerouxleroux Fatty acids Linolenic acid (9Z,12Z,15Z)-Octadeca-9,12,15-trienoic acid α-Linolenic acid Linolenic acid 50 atomes_1.3.1/data/library/molecules/Heterocyclics/0000775000175000017500000000000015212624223021652 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Heterocyclics/isonicotinamide.sml0000664000175000017500000000302315212624223025543 0ustar lerouxleroux Heterocyclics Isonicotinamide Isonicotinamide Pyridine-4-carboxamide 15 atomes_1.3.1/data/library/molecules/Heterocyclics/nicotinamide.sml0000664000175000017500000000314715212624223025037 0ustar lerouxleroux Heterocyclics Nicotinamide Nicotinamide Pyridine-3-carboxamide Vitamin PP vitamin B--c--3--f-- Niacinamide 15 atomes_1.3.1/data/library/molecules/Heterocyclics/1h-indole.sml0000664000175000017500000000311615212624223024150 0ustar lerouxleroux Heterocyclics Indole Indole 2,3-Benzopyrrole Ketole 1-Benzazole 16 atomes_1.3.1/data/library/molecules/Heterocyclics/benzothiophene.sml0000664000175000017500000000306415212624223025413 0ustar lerouxleroux Heterocyclics Benzothiophene Benzo[--i--b--I--]thiophene 1-Benzothiophene Thianaphthene Benzothiofuran 15 atomes_1.3.1/data/library/molecules/Heterocyclics/isonicotinic_acid.sml0000664000175000017500000000304315212624223026041 0ustar lerouxleroux Heterocyclics Isonicotinic acid Pyridine-4-carboxylic acid Isonicotinic acid 4-Pyridinecarboxylic acid 4-Picolinic acid 14 atomes_1.3.1/data/library/molecules/Heterocyclics/1h-pyrrole.sml0000664000175000017500000000221015212624223024364 0ustar lerouxleroux Heterocyclics 1H-Pyrrole 1H-Pyrrole Azole 10 atomes_1.3.1/data/library/molecules/Heterocyclics/furan.sml0000664000175000017500000000215315212624223023503 0ustar lerouxleroux Heterocyclics Furan Furan Oxoline Oxole Furfuran 9 atomes_1.3.1/data/library/molecules/Heterocyclics/1_2-thiazole.sml0000664000175000017500000000202515212624223024564 0ustar lerouxleroux Heterocyclics 1,2-Thiazole 1,2-Thiazole 8 atomes_1.3.1/data/library/molecules/Heterocyclics/picolinamide.sml0000664000175000017500000000301315212624223025021 0ustar lerouxleroux Heterocyclics Picolinamide Pyridine-2-carboxamide Picolinamide 15 atomes_1.3.1/data/library/molecules/Heterocyclics/1_3-oxazole.sml0000664000175000017500000000202215212624223024424 0ustar lerouxleroux Heterocyclics 1,3-Oxazole 1,3-Oxazole 8 atomes_1.3.1/data/library/molecules/Heterocyclics/1_3-thiazole.sml0000664000175000017500000000202515212624223024565 0ustar lerouxleroux Heterocyclics 1,3-Thiazole 1,3-Thiazole 8 atomes_1.3.1/data/library/molecules/Heterocyclics/1_2-oxazole.sml0000664000175000017500000000202315212624223024424 0ustar lerouxleroux Heterocyclics 1,2-Oxazole 1,2-Oxazole 8 atomes_1.3.1/data/library/molecules/Heterocyclics/nicotinic_acid.sml0000664000175000017500000000300215212624223025321 0ustar lerouxleroux Heterocyclics Nicotinic acid Pyridine-3-carboxylic acid Nicotinic acid Niacin Bionic 14 atomes_1.3.1/data/library/molecules/Heterocyclics/benzofuran.sml0000664000175000017500000000300515212624223024536 0ustar lerouxleroux Heterocyclics Benzofuran 1-Benzofuran Coumarone Benzo[--i--b--I--]furan 15 atomes_1.3.1/data/library/molecules/Heterocyclics/1h-pyrazole.sml0000664000175000017500000000214115212624223024540 0ustar lerouxleroux Heterocyclics 1--i--H--I---Pyrazole 1--i--H--I---Pyrazole 1,2-Diazole 9 atomes_1.3.1/data/library/molecules/Heterocyclics/thiophene.sml0000664000175000017500000000217615212624223024360 0ustar lerouxleroux Heterocyclics Thiophene Thiophene Thiofuran Thiacyclopentadiene Thiole 9 atomes_1.3.1/data/library/molecules/Heterocyclics/pyridine.sml0000664000175000017500000000237315212624223024217 0ustar lerouxleroux Heterocyclics Pyridine Pyridine Azinine Azine Azabenzene 11 atomes_1.3.1/data/library/molecules/Heterocyclics/picolinic_acid.sml0000664000175000017500000000272115212624223025322 0ustar lerouxleroux Heterocyclics Picolinic acid Pyridine-2-carboxylic acid Picolinic acid 14 atomes_1.3.1/data/library/molecules/Ethers/0000775000175000017500000000000015212624223020304 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Ethers/ethylmethylether.sml0000664000175000017500000000247615212624223024432 0ustar lerouxleroux Ethers Methoxyethane Methoxyethane Methyl ethyl ether Ethyl methyl ether 12 atomes_1.3.1/data/library/molecules/Ethers/dimethylether.sml0000664000175000017500000000220115212624223023663 0ustar lerouxleroux Ethers Dimethyl ether Methoxymethane Dimethyl ether Wood ether Demeon 9 atomes_1.3.1/data/library/molecules/Ethers/tetrahydropyran.sml0000664000175000017500000000307415212624223024264 0ustar lerouxleroux Ethers Tetrahydropyran Oxane Tetrahydropyran Oxacyclohexane 16 atomes_1.3.1/data/library/molecules/Ethers/dipropylether.sml0000664000175000017500000000367215212624223023723 0ustar lerouxleroux Ethers Dipropyl ether 1-Propoxypropane Propyl ether Dipropyl ether Di---i--n--I---propyl ether 21 atomes_1.3.1/data/library/molecules/Ethers/1_4-dioxane.sml0000664000175000017500000000277415212624223023043 0ustar lerouxleroux Ethers 1,4-Dioxane 1,4-Dioxane Diethylene dioxide Diethylene ether --i--p--I---Dioxane [6]-crown-2 14 atomes_1.3.1/data/library/molecules/Ethers/diisopropylether.sml0000664000175000017500000000371115212624223024430 0ustar lerouxleroux Ethers Diisopropyl ether 2-[(Propan-2-yl)oxy]propane Diisopropyl ether 2-Isopropoxypropane Diisopropyl oxide 21 atomes_1.3.1/data/library/molecules/Ethers/di-tert-butylether.sml0000664000175000017500000000456115212624223024564 0ustar lerouxleroux Ethers Di---i--tert--I---butylether 2---i--tert--I---Butoxy-2-methylpropane 2-Methyl-2---i--tert--I---butoxypropane Di---i--tert--I---butylether 27 atomes_1.3.1/data/library/molecules/Ethers/tetrahydrofuran.sml0000664000175000017500000000267415212624223024253 0ustar lerouxleroux Ethers Tetrahydrofuran Oxolane Tetrahydrofuran Oxacyclopentane Butylene oxide Cyclotetramethylene oxide 13 atomes_1.3.1/data/library/molecules/Ethers/dibutylether.sml0000664000175000017500000000455415212624223023535 0ustar lerouxleroux Ethers Dibutyl ether 1-Butoxybutane Dibutyl ether Di---i--n--I---butyl ether Butyl ether --i--n--I---butyl ether 27 atomes_1.3.1/data/library/molecules/Ethers/diethylether.sml0000664000175000017500000000304115212624223023511 0ustar lerouxleroux Ethers Ether Ethoxyethane Diethyl ether Ethyl ether Ethyl oxide Ether 15 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/0000775000175000017500000000000015212624223021756 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Cyclic_alkanes/cis-decahydronaphthalene.sml0000664000175000017500000000461115212624223027423 0ustar lerouxleroux Cyclic alkanes --i--cis--I---Decahydronaphthalene --i--cis--I---Decahydronaphthalene --i--cis--I---Bicyclo[4.4.0]decane --i--cis--I---Decalin 28 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cyclooctane.sml0000664000175000017500000000377215212624223025007 0ustar lerouxleroux Cyclic alkanes Cyclooctane Cyclooctane 24 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cyclodecane.sml0000664000175000017500000000460615212624223024752 0ustar lerouxleroux Cyclic alkanes Cyclodecane Cyclodecane 30 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cyclopropane.sml0000664000175000017500000000201615212624223025170 0ustar lerouxleroux Cyclic alkanes Cyclopropane Cyclopropane 9 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cyclohexane-twist-boat.sml0000664000175000017500000000322215212624223027067 0ustar lerouxleroux Cyclic alkanes Cyclohexane---i--twist-boat--I-- Cyclohexane---i--twist-boat--I-- 18 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/norbornane.sml0000664000175000017500000000341015212624223024634 0ustar lerouxleroux Cyclic alkanes Norbornane Bicyclo[2.2.1]heptane Norbornane Norcamphane Norbornylane 19 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/adamantane.sml0000664000175000017500000000405315212624223024566 0ustar lerouxleroux Cyclic alkanes Adamantane Tricyclo[3.3.1.1--b--3,7--e--]decane Adamantane 24 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cubane.sml0000664000175000017500000000305515212624223023733 0ustar lerouxleroux Cyclic alkanes Cubane Cubane Pentacyclo[4.2.0.0--b--2,5--e--.0--b--3,8--e--.0--b--4,7--e--]octane 16 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/abietic_acid.sml0000664000175000017500000000771115212624223025061 0ustar lerouxleroux Cyclic alkanes Abietic acid Abieta-7,13-dien-18-oic acid Abietic acid Abietinic acid Sylvic acid 52 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cyclobutane.sml0000664000175000017500000000233015212624223025001 0ustar lerouxleroux Cyclic alkanes Cyclobutane Cyclobutane 12 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/trans-decahydronaphthalene.sml0000664000175000017500000000462315212624223027777 0ustar lerouxleroux Cyclic alkanes --i--trans--I---Decahydronaphthalene --i--trans--I---Decahydronaphthalene --i--trans--I---Bicyclo[4.4.0]decane --i--trans--I---Decalin 28 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cycloheptane.sml0000664000175000017500000000346215212624223025156 0ustar lerouxleroux Cyclic alkanes Cycloheptane Cycloheptane 21 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cyclohexane-chair.sml0000664000175000017500000000321715212624223026064 0ustar lerouxleroux Cyclic alkanes Cyclohexane---i--chair--I-- Cyclohexane---i--chair--I-- 18 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/camphene.sml0000664000175000017500000000437115212624223024260 0ustar lerouxleroux Cyclic alkanes Camphene 2,2-Dimethyl-3-methylidenebicyclo[2.2.1]heptane Camphene 2,2-Dimethyl-3-methanylidenebicyclo[2.2.1]heptane 26 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cyclopentane.sml0000664000175000017500000000270415212624223025162 0ustar lerouxleroux Cyclic alkanes Cyclopentane Cyclopentane Pentamethylene 15 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/cyclononane.sml0000664000175000017500000000427615212624223025014 0ustar lerouxleroux Cyclic alkanes Cyclononane Cyclononane 27 atomes_1.3.1/data/library/molecules/Cyclic_alkanes/r-camphor.sml0000664000175000017500000000452615212624223024372 0ustar lerouxleroux Cyclic alkanes (R)-Camphor 1,7,7-Trimethylbicyclo[2,2,1]heptan-2-one (R)-Camphor 2-Bornanone Bornan-2-one 27 atomes_1.3.1/data/library/molecules/Alkenes/0000775000175000017500000000000015212624223020434 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Alkenes/1-hexene.sml0000664000175000017500000000316415212624223022567 0ustar lerouxleroux Alkenes 1-Hexene Hex-1-ene 1-Hexene 18 atomes_1.3.1/data/library/molecules/Alkenes/z-2-octene.sml0000664000175000017500000000401715212624223023036 0ustar lerouxleroux Alkenes (Z)-2-Octene (Z)-Oct-2-ene (Z)-2-Octene 24 atomes_1.3.1/data/library/molecules/Alkenes/z-2-hexene.sml0000664000175000017500000000320015212624223023026 0ustar lerouxleroux Alkenes (Z)-2-Hexene (Z) Hex-2-ene (Z)-2-Hexene 18 atomes_1.3.1/data/library/molecules/Alkenes/1-heptene.sml0000664000175000017500000000347715212624223022752 0ustar lerouxleroux Alkenes 1-Heptene Hept-1-ene 1-Heptene 21 atomes_1.3.1/data/library/molecules/Alkenes/propene.sml0000664000175000017500000000207615212624223022626 0ustar lerouxleroux Alkenes Propene Propene Propylene Methyle ethylene 9 atomes_1.3.1/data/library/molecules/Alkenes/z-3-octene.sml0000664000175000017500000000401715212624223023037 0ustar lerouxleroux Alkenes (Z)-3-Octene (Z) Oct-3-ene (Z)-3-Octene 24 atomes_1.3.1/data/library/molecules/Alkenes/e-2-hexene.sml0000664000175000017500000000314415212624223023010 0ustar lerouxleroux Alkenes (E)-2-Hexene (E)-Hex-2-ene 18 atomes_1.3.1/data/library/molecules/Alkenes/1-butene.sml0000664000175000017500000000243715212624223022577 0ustar lerouxleroux Alkenes 1-Butene But-1-ene Ethylethylene 1-Butylene α-Butylene 12 atomes_1.3.1/data/library/molecules/Alkenes/z-3-hexene.sml0000664000175000017500000000317715212624223023044 0ustar lerouxleroux Alkenes (Z)-3-Hexene (Z)-Hex-3-ene (Z)-3-Hexene 18 atomes_1.3.1/data/library/molecules/Alkenes/1-octene.sml0000664000175000017500000000400315212624223022561 0ustar lerouxleroux Alkenes 1-Octene Oct-1-ene 1-Octene 24 atomes_1.3.1/data/library/molecules/Alkenes/3z-penta-1_3-diene.sml0000664000175000017500000000251415212624223024256 0ustar lerouxleroux Alkenes (3Z)-1,3-Pentadiene (3Z)-Penta-1,3-diene (3Z)-1,3-Pentadiene 13 atomes_1.3.1/data/library/molecules/Alkenes/z-2-pentene.sml0000664000175000017500000000267315212624223023225 0ustar lerouxleroux Alkenes (Z)-2-Pentene (Z)-Pent-2-ene (Z)-2-Pentene 15 atomes_1.3.1/data/library/molecules/Alkenes/e-4-octene.sml0000664000175000017500000000402015212624223023005 0ustar lerouxleroux Alkenes (E)-4-Octene (E)-Oct-4-ene (E)-4-Octene 24 atomes_1.3.1/data/library/molecules/Alkenes/1-pentene.sml0000664000175000017500000000266015212624223022751 0ustar lerouxleroux Alkenes 1-Pentene Pent-1-ene 1-Pentene 15 atomes_1.3.1/data/library/molecules/Alkenes/2-methylbut-2-ene.sml0000664000175000017500000000300015212624223024222 0ustar lerouxleroux Alkenes 2-Methylbut-2-ene 2-Methylbut-2-ene β-Isoamylene Trimethylethylene Isoamylene 15 atomes_1.3.1/data/library/molecules/Alkenes/e-3-heptene.sml0000664000175000017500000000351515212624223023167 0ustar lerouxleroux Alkenes (E)-3-Heptene (E)-Hept-3-ene (E)-3-Heptene 21 atomes_1.3.1/data/library/molecules/Alkenes/piperylene.sml0000664000175000017500000000246615212624223023335 0ustar lerouxleroux Alkenes Piperylene 1,3-Pentadiene Penta-1,3-diene 13 atomes_1.3.1/data/library/molecules/Alkenes/e-2-pentene.sml0000664000175000017500000000267615212624223023203 0ustar lerouxleroux Alkenes (E)-2-Pentene (E)-Pent-2-ene (E)-2-Pentene 15 atomes_1.3.1/data/library/molecules/Alkenes/trans-2-butene.sml0000664000175000017500000000243015212624223023716 0ustar lerouxleroux Alkenes --i--trans--I---2-Butene --i--trans--I---But-2-ene --i--trans--I---β-Butylene 12 atomes_1.3.1/data/library/molecules/Alkenes/z-3-heptene.sml0000664000175000017500000000351315212624223023212 0ustar lerouxleroux Alkenes (Z)-3-Heptene (Z) Hept-3-ene (Z)-3-Heptene 21 atomes_1.3.1/data/library/molecules/Alkenes/e-3-octene.sml0000664000175000017500000000401715212624223023012 0ustar lerouxleroux Alkenes (E)-3-Octene (E)-Oct-3-ene (E)-3-Octene 24 atomes_1.3.1/data/library/molecules/Alkenes/z-2-heptene.sml0000664000175000017500000000351415212624223023212 0ustar lerouxleroux Alkenes (Z)-2-Heptene (Z)-Hept-2-ene (Z)-2-Heptene 21 atomes_1.3.1/data/library/molecules/Alkenes/ethene.sml0000664000175000017500000000152515212624223022424 0ustar lerouxleroux Alkenes Ethylene Ethene Ethylene 6 atomes_1.3.1/data/library/molecules/Alkenes/2-methylbuta-1_3-diene.sml0000664000175000017500000000253315212624223025133 0ustar lerouxleroux Alkenes Isoprene 2-Methylbuta-1,3-diene 2-Methyl-1,3-butadiene Isoprene 13 atomes_1.3.1/data/library/molecules/Alkenes/z-4-octene.sml0000664000175000017500000000402215212624223023034 0ustar lerouxleroux Alkenes (Z)-4-Octene (Z)-Oct-4-ene (Z)-4-Octene 24 atomes_1.3.1/data/library/molecules/Alkenes/e-2-octene.sml0000664000175000017500000000401715212624223023011 0ustar lerouxleroux Alkenes (E)-2-Octene (E)-Oct-2-ene (E)-2-Octene 24 atomes_1.3.1/data/library/molecules/Alkenes/cis-2-butene.sml0000664000175000017500000000242215212624223023346 0ustar lerouxleroux Alkenes --i--cis--I---2-Butene --i--cis--I---But-2-ene --i--cis--I---β-Butylene 12 atomes_1.3.1/data/library/molecules/Alkenes/e-2-heptene.sml0000664000175000017500000000351515212624223023166 0ustar lerouxleroux Alkenes (E)-2-Heptene (E)-Hept-2-ene (E)-2-Heptene 21 atomes_1.3.1/data/library/molecules/Alkenes/3z-3-ethylhepta-1_3-diene.sml0000664000175000017500000000411715212624223025457 0ustar lerouxleroux Alkenes (3Z)-3-Ethylhepta-1,3-diene (3Z)-3-Ethylhepta-1,3-diene 25 atomes_1.3.1/data/library/molecules/Alkenes/e-3-hexene.sml0000664000175000017500000000314415212624223023011 0ustar lerouxleroux Alkenes (E)-3-Hexene (E)-Hex-3-ene 18 atomes_1.3.1/data/library/molecules/Ketones/0000775000175000017500000000000015212624223020462 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Ketones/acetone.sml0000664000175000017500000000230115212624223022611 0ustar lerouxleroux Ketones Acetone Propan-2-one Propanone Acetone Dimethyl ketone 10 atomes_1.3.1/data/library/molecules/Ketones/methyl_vinyl_ketone.sml0000664000175000017500000000242615212624223025273 0ustar lerouxleroux Ketones Methyl vinyl ketone But-3-en-2-one Methyl vinyl ketone MVK Methylene acetone 11 atomes_1.3.1/data/library/molecules/Ketones/cyclohexanone.sml0000664000175000017500000000324315212624223024040 0ustar lerouxleroux Ketones Cyclohexanone Cyclohexanone Oxocyclohexane Pimelic ketone Ketohexamethylene 17 atomes_1.3.1/data/library/molecules/Ketones/p-benzoquinone.sml0000664000175000017500000000256515212624223024160 0ustar lerouxleroux Ketones --i--p--I---benzoquinone Cyclohexa-2,5-diene-1,4-dione 1,4-Benzoquinone Benzoquinone --i--p--I---Quinone 12 atomes_1.3.1/data/library/molecules/Ketones/butanone.sml0000664000175000017500000000261715212624223023020 0ustar lerouxleroux Ketones Butanone Butan-2-one Butanone Ethyl methyl ketone Methylacetone 13 atomes_1.3.1/data/library/molecules/Alcohols/0000775000175000017500000000000015212624223020616 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Alcohols/propan-2-ol.sml0000664000175000017500000000256415212624223023410 0ustar lerouxleroux Alcohols --i--s--I---Propanol Propan-2-ol --i--s--I---Propyl alcohol --i--s--I---Propanol Dimethyl carbinol 12 atomes_1.3.1/data/library/molecules/Alcohols/cyclopentanol.sml0000664000175000017500000000311115212624223024201 0ustar lerouxleroux Alcohols Cyclopentanol Cyclopentanol Cyclopentyl alcohol Hydroxycyclopentane 16 atomes_1.3.1/data/library/molecules/Alcohols/cyclohexanol.sml0000664000175000017500000000344115212624223024025 0ustar lerouxleroux Alcohols Cyclohexanol Cyclohexanol Cyclohexyl Alcohol Hexahydrophenol Naxol 19 atomes_1.3.1/data/library/molecules/Alcohols/ethanol.sml0000664000175000017500000000220415212624223022763 0ustar lerouxleroux Alcohols Ethanol Ethanol Absolute alcohol Ethylic alcohol Hydroxyethane 9 atomes_1.3.1/data/library/molecules/Alcohols/propane-1_2_3-triol.sml0000664000175000017500000000300515212624223024725 0ustar lerouxleroux Alcohols Glycerin Propane-1,2,3-triol Glycerin Propanetriol 1,2,3-Trihydroxypropane 1,2,3-Propanetriol 14 atomes_1.3.1/data/library/molecules/Alcohols/methanol.sml0000664000175000017500000000167015212624223023146 0ustar lerouxleroux Alcohols Methanol Methanol Carbinol Hydroxymethane Methyl alcohol 6 atomes_1.3.1/data/library/molecules/Alcohols/but-2-yne-1_4-diol.sml0000664000175000017500000000253615212624223024371 0ustar lerouxleroux Alcohols Butynediol But-2-yne-1,4-diol Butynediol 2-Butyne-1,4-diol 1,4-Dihydroxy-2-butyne 12 atomes_1.3.1/data/library/molecules/Alcohols/2-aminoethanol.sml0000664000175000017500000000247015212624223024153 0ustar lerouxleroux Alcohols β-Aminoethanol 2-Aminoethan-1-ol 2-Aminoethanol β-Aminoethanol Glycinol 11 atomes_1.3.1/data/library/molecules/Alcohols/ethane-1_2-diol.sml0000664000175000017500000000234215212624223024104 0ustar lerouxleroux Alcohols Ethylene glycol Ethane-1,2-diol Ethylene glycol Monoethylene glycol 1,2-Dihydroxyethane 10 atomes_1.3.1/data/library/molecules/Alcohols/propan-1-ol.sml0000664000175000017500000000255615212624223023410 0ustar lerouxleroux Alcohols --i--n--I---Propanol Propan-1-ol --i--n--I---Propyl alcohol --i--n--I---Propanol Ethylcarbinol 12 atomes_1.3.1/data/library/molecules/Fullerenes/0000775000175000017500000000000015212624223021156 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Fullerenes/c78.sml0000664000175000017500000001272715212624223022305 0ustar lerouxleroux Fullerenes C--c--78--f-- C--c--78--f-- 78 atomes_1.3.1/data/library/molecules/Fullerenes/pcbm.sml0000664000175000017500000001453615212624223022625 0ustar lerouxleroux Fullerenes PCBM Phenyl-C--c--61--f---butyric acid methyl ester PCBM 1-​[3-​(Methoxycarbonyl)​propyl]​-​1-​phenyl-​[6.6]​C--c--61--f-- 88 atomes_1.3.1/data/library/molecules/Fullerenes/c32.sml0000664000175000017500000000474715212624223022276 0ustar lerouxleroux Fullerenes C--c--32--f-- C--c--32--f-- 32 atomes_1.3.1/data/library/molecules/Fullerenes/c50.sml0000664000175000017500000000721515212624223022267 0ustar lerouxleroux Fullerenes C--c--50--f-- C--c--50--f-- 50 atomes_1.3.1/data/library/molecules/Fullerenes/c80.sml0000664000175000017500000001314015212624223022264 0ustar lerouxleroux Fullerenes C--c--80--f-- C--c--80--f-- 80 atomes_1.3.1/data/library/molecules/Fullerenes/c36.sml0000664000175000017500000000535415212624223022275 0ustar lerouxleroux Fullerenes C--c--36--f-- C--c--36--f-- 36 atomes_1.3.1/data/library/molecules/Fullerenes/c28.sml0000664000175000017500000000433615212624223022275 0ustar lerouxleroux Fullerenes C--c--28--f-- C--c--28--f-- 28 atomes_1.3.1/data/library/molecules/Fullerenes/pc70bm.sml0000664000175000017500000001567415212624223023000 0ustar lerouxleroux Fullerenes PC--c--70--f--BM Phenyl-C--c--71--f---butyric acid methyl ester PC--c--70--f--BM 1-​[3-​(Methoxycarbonyl)​propyl]​-​1-​phenyl-​[6.6]​C--c--71--f-- 98 atomes_1.3.1/data/library/molecules/Fullerenes/c70.sml0000664000175000017500000001171315212624223022267 0ustar lerouxleroux Fullerenes C--c--70--f-- C--c--70--f-- 70 atomes_1.3.1/data/library/molecules/Fullerenes/c180.sml0000664000175000017500000003025715212624223022355 0ustar lerouxleroux Fullerenes C--c--180--f-- C--c--180--f-- 180 atomes_1.3.1/data/library/molecules/Fullerenes/c30.sml0000664000175000017500000000453715212624223022271 0ustar lerouxleroux Fullerenes C--c--30--f-- C--c--30--f-- 30 atomes_1.3.1/data/library/molecules/Fullerenes/c24.sml0000664000175000017500000000372415212624223022271 0ustar lerouxleroux Fullerenes C--c--24--f-- C--c--24--f-- 24 atomes_1.3.1/data/library/molecules/Fullerenes/c26.sml0000664000175000017500000000412315212624223022265 0ustar lerouxleroux Fullerenes C--c--26--f-- C--c--26--f-- 26 atomes_1.3.1/data/library/molecules/Fullerenes/c60.sml0000664000175000017500000001063415212624223022267 0ustar lerouxleroux Fullerenes C--c--60--f-- (C--c--60--f---Ih)[5,6]fullerene C--c--60--f-- Buckminsterfullerene Buckyball 60 atomes_1.3.1/data/library/molecules/Fullerenes/c76.sml0000664000175000017500000001252615212624223022300 0ustar lerouxleroux Fullerenes C--c--76--f-- C--c--76--f-- 76 atomes_1.3.1/data/library/molecules/Fullerenes/c320.sml0000664000175000017500000005263115212624223022351 0ustar lerouxleroux Fullerenes C--c--320--f-- C--c--320--f-- 320 atomes_1.3.1/data/library/molecules/Fullerenes/c20.sml0000664000175000017500000000331215212624223022256 0ustar lerouxleroux Fullerenes C--c--20--f-- C--c--20--f-- 20 atomes_1.3.1/data/library/molecules/Fullerenes/c240.sml0000664000175000017500000004020115212624223022340 0ustar lerouxleroux Fullerenes C--c--240--f-- C--c--240--f-- 240 atomes_1.3.1/data/library/molecules/Amines/0000775000175000017500000000000015212624223020266 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Amines/isopropylamine.sml0000664000175000017500000000257215212624223024063 0ustar lerouxleroux Amines Isopropylamine Propan-2-amine Isopropylamine 2-Aminopropane 13 atomes_1.3.1/data/library/molecules/Amines/triethylenediamine.sml0000664000175000017500000000350115212624223024665 0ustar lerouxleroux Amines Triethylenediamine 1,4-Diazabicyclo[2.2.2]octane Triethylenediamine 20 atomes_1.3.1/data/library/molecules/Amines/methylamine.sml0000664000175000017500000000200115212624223023310 0ustar lerouxleroux Amines Methylamine Methanamine Methylamine Aminomethane Monomethylamine 7 atomes_1.3.1/data/library/molecules/Amines/r-sec-butylamine.sml0000664000175000017500000000301715212624223024164 0ustar lerouxleroux Amines (R)-sec-butylamine (R)-Butan-2-amine (R)-sec-butylamine (R)-2-Aminobutane (R)-2-Butanamine 16 atomes_1.3.1/data/library/molecules/Amines/piperazine.sml0000664000175000017500000000307315212624223023154 0ustar lerouxleroux Amines Piperazine Piperazine Hexahydropyrazine Piperazidine 16 atomes_1.3.1/data/library/molecules/Amines/dimethylamine.sml0000664000175000017500000000222415212624223023634 0ustar lerouxleroux Amines Dimethylamine N-Methylmethanamine Dimethylamine 10 atomes_1.3.1/data/library/molecules/Amines/triethylamine.sml0000664000175000017500000000367115212624223023670 0ustar lerouxleroux Amines Triethylamine N,N-Diethylethanamine Triethylamine 22 atomes_1.3.1/data/library/molecules/Amines/azepane.sml0000664000175000017500000000350415212624223022430 0ustar lerouxleroux Amines Azepane Azepane Hexahydroazepine Hexamethyleneimine 20 atomes_1.3.1/data/library/molecules/Amines/ammonia.sml0000664000175000017500000000142615212624223022427 0ustar lerouxleroux Amines Ammonia Azane Ammonia Trihydrogen nitride Nitrogen trihydride 4 atomes_1.3.1/data/library/molecules/Amines/trimethylamine.sml0000664000175000017500000000254715212624223024046 0ustar lerouxleroux Amines Trimethylamine N,N-Dimethylmethanamine Trimethylamine 13 atomes_1.3.1/data/library/molecules/Amines/piperidine.sml0000664000175000017500000000327315212624223023140 0ustar lerouxleroux Amines Piperidine Piperidine Hexahydropyridine Azacyclohexane Pentamethyleneamine Azinane 17 atomes_1.3.1/data/library/molecules/Amines/s-sec-butylamine.sml0000664000175000017500000000316015212624223024164 0ustar lerouxleroux Amines (S)-sec-butylamine (S)-Butan-2-amine (S)-sec-butylamine (S)-2-Aminobutane (S)-2-Butanamine 16 atomes_1.3.1/data/library/molecules/Amines/tert-butylamine.sml0000664000175000017500000000323115212624223024127 0ustar lerouxleroux Amines tert-butylamine 2-Methylpropan-2-amine tert-butylamine 2-Aminoisobutane 2-Amino-2-methylpropane Dimethylethylamine 16 atomes_1.3.1/data/library/molecules/Amines/pyrrolidine.sml0000664000175000017500000000275515212624223023354 0ustar lerouxleroux Amines Pyrrolidine Pyrrolidine Azolidine Azacyclopentane Tetrahydropyrrole Prolamine 14 atomes_1.3.1/data/library/molecules/Amines/ethylamine.sml0000664000175000017500000000221215212624223023137 0ustar lerouxleroux Amines Ethylamine Ethanamine Ethylamine 10 atomes_1.3.1/data/library/molecules/Amines/azepine.sml0000664000175000017500000000255715212624223022447 0ustar lerouxleroux Amines Azepine Azepine 14 atomes_1.3.1/data/library/molecules/Amines/diethylamine.sml0000664000175000017500000000304015212624223023454 0ustar lerouxleroux Amines Diethylamine N-Ethylethanamine Diethylamine 16 atomes_1.3.1/data/library/molecules/Amides/0000775000175000017500000000000015212624223020254 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Amides/oxamide.sml0000664000175000017500000000234115212624223022417 0ustar lerouxleroux Amides Oxamide Oxamide Ethanediamide Oxalamide Oxamimidic acid 10 atomes_1.3.1/data/library/molecules/Amides/urea.sml0000664000175000017500000000213215212624223021723 0ustar lerouxleroux Amides Urea Urea Carbamide Carbonyl diamide Carbonyldiamine 8 atomes_1.3.1/data/library/molecules/Amides/urethane.sml0000664000175000017500000000256115212624223022610 0ustar lerouxleroux Amides Urethane Ethyl carbamate Urethane 13 atomes_1.3.1/data/library/molecules/Amides/n_n-dimethylformamide.sml0000664000175000017500000000252215212624223025245 0ustar lerouxleroux Amides N,N-Dimethylformamide N,N-Dimethylformamide N,N-Dimethylmethanamide 12 atomes_1.3.1/data/library/molecules/Amides/n_n-dimethylacetamide.sml0000664000175000017500000000275515212624223025226 0ustar lerouxleroux Amides N,N-Dimethylacetamide N,N-Dimethylacetamide 15 atomes_1.3.1/data/library/molecules/Amides/acetamide.sml0000664000175000017500000000220715212624223022706 0ustar lerouxleroux Amides Acetamide Acetamide Ethanamide Acetic acid amide 9 atomes_1.3.1/data/library/molecules/Amino_acids/0000775000175000017500000000000015212624223021260 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Amino_acids/d-glutamic_acid.sml0000664000175000017500000000345115212624223025006 0ustar lerouxleroux Amino acids Glutamic acid-(D) (D)-glutamic acid (2R)-2-Aminopentanedioic acid 19 atomes_1.3.1/data/library/molecules/Amino_acids/l-phenylalanine.sml0000664000175000017500000000406715212624223025064 0ustar lerouxleroux Amino acids Phenylalanine-(L) (L)-Phenylalanine (2S)-2-Amino-3-phenylpropanoic acid 23 atomes_1.3.1/data/library/molecules/Amino_acids/l-allo-isoleucine.sml0000664000175000017500000000377515212624223025326 0ustar lerouxleroux Amino acids Allo-isoleucine-(L) (L)-Allo-isoleucine (2S,3R)-2-Amino-3-methylpentanoic acid 22 atomes_1.3.1/data/library/molecules/Amino_acids/d-histidine.sml0000664000175000017500000000356215212624223024204 0ustar lerouxleroux Amino acids Histidine-(D) (D)-Histidine (2R)-2-Amino-3-(3H-imidazol-4-yl)propanoic acid 20 atomes_1.3.1/data/library/molecules/Amino_acids/l-aspartic_acid.sml0000664000175000017500000000313415212624223025015 0ustar lerouxleroux Amino acids Aspartic-(L) (L)-Aspartic acid (2S)-2-Aminobutanedioic acid 16 atomes_1.3.1/data/library/molecules/Amino_acids/d-arginine.sml0000664000175000017500000000441115212624223024012 0ustar lerouxleroux Amino acids Arginine-(D) (D)-Arginine (2R)-2-Amino-5-(diaminomethylideneamino)pentanoicacid 26 atomes_1.3.1/data/library/molecules/Amino_acids/l-arginine.sml0000664000175000017500000000441415212624223024025 0ustar lerouxleroux Amino acids Arginine-(L) (L)-Arginine (2S)-2-Amino-5-(diaminomethylideneamino)pentanoic acid 26 atomes_1.3.1/data/library/molecules/Amino_acids/l-glutamic_acid.sml0000664000175000017500000000344615212624223025022 0ustar lerouxleroux Amino acids Glutamic acid-(L) (L)-Glutamic acid (2S)-2-Aminopentanedioic acid 19 atomes_1.3.1/data/library/molecules/Amino_acids/d-phenylalanine.sml0000664000175000017500000000407115212624223025047 0ustar lerouxleroux Amino acids Phenylalanine-(D) (D)-Phenylalanine (2R)-2-Amino-3-phenylpropanoic acid 23 atomes_1.3.1/data/library/molecules/Amino_acids/l-isoleucine.sml0000664000175000017500000000376015212624223024373 0ustar lerouxleroux Amino acids Isoleucine-(L) (L)-Isoleucine (2S,3S)-2-Amino-3-methylpentanoic acid 22 atomes_1.3.1/data/library/molecules/Amino_acids/l-glutamine.sml0000664000175000017500000000355515212624223024223 0ustar lerouxleroux Amino acids Glutamine-(L) (L)-Glutamine (2S)-2-Amino-4-carbamoylbutanoic acid 20 atomes_1.3.1/data/library/molecules/Amino_acids/d-alanine.sml0000664000175000017500000000261115212624223023625 0ustar lerouxleroux Amino acids Alanine-(D) (D)-Alanine (2R)-2-Aminopropanoicacid 13 atomes_1.3.1/data/library/molecules/Amino_acids/l-tryptophan.sml0000664000175000017500000000450515212624223024442 0ustar lerouxleroux Amino acids Tryptophan-(L) (L)-Tryptophan (2S)-2-Amino-3-(1H-indol-3-yl)propanoic acid 27 atomes_1.3.1/data/library/molecules/Amino_acids/l-serine.sml0000664000175000017500000000272515212624223023521 0ustar lerouxleroux Amino acids Serine-(L) (L)-Serine (2S)-2-Amino-3-hydroxypropanoic acid 14 atomes_1.3.1/data/library/molecules/Amino_acids/l-histidine.sml0000664000175000017500000000356015212624223024212 0ustar lerouxleroux Amino acids Histidine-(L) (L)-Histidine (2S)-2-Amino-3-(3H-imidazol-4-yl)propanoic acid 20 atomes_1.3.1/data/library/molecules/Amino_acids/l-methionine.sml0000664000175000017500000000362415212624223024372 0ustar lerouxleroux Amino acids Methionine-(L) (L)-Methionine (2S)-2-Amino-4-methylsulfanylbutanoic acid 20 atomes_1.3.1/data/library/molecules/Amino_acids/d-leucine.sml0000664000175000017500000000375215212624223023651 0ustar lerouxleroux Amino acids Leucine-(D) (D)-Leucine (2R)-2-Amino-4-methylpentanoic acid 22 atomes_1.3.1/data/library/molecules/Amino_acids/d-asparagine.sml0000664000175000017500000000324515212624223024334 0ustar lerouxleroux Amino acids Asparagine-(D) (D)-Asparagine (2R)-2-Amino-3-carbamoylpropanoicacid 17 atomes_1.3.1/data/library/molecules/Amino_acids/d-proline.sml0000664000175000017500000000323415212624223023670 0ustar lerouxleroux Amino acids Proline-(D) (D)-Proline (2R)-Pyrrolidine-2-carboxylic acid 17 atomes_1.3.1/data/library/molecules/Amino_acids/d-glutamine.sml0000664000175000017500000000355215212624223024210 0ustar lerouxleroux Amino acids Glutamine-(D) (D)-Glutamine (2R)-2-Amino-4-carbamoylbutanoic acid 20 atomes_1.3.1/data/library/molecules/Amino_acids/d-tyrosine.sml0000664000175000017500000000417415212624223024100 0ustar lerouxleroux Amino acids Tyrosine-(D) (D)-Tyrosine (2R)-2-Amino-3-(4-hydroxyphenyl)propanoic acid 24 atomes_1.3.1/data/library/molecules/Amino_acids/l-alanine.sml0000664000175000017500000000261315212624223023637 0ustar lerouxleroux Amino acids Alanine-(L) (L)-Alanine (2S)-2-Aminopropanoic acid 13 atomes_1.3.1/data/library/molecules/Amino_acids/l-valine.sml0000664000175000017500000000343515212624223023511 0ustar lerouxleroux Amino acids Valine-(L) (L)-Valine (2S)-2-Amino-3-methylbutanoic acid 19 atomes_1.3.1/data/library/molecules/Amino_acids/l-threonine.sml0000664000175000017500000000324515212624223024225 0ustar lerouxleroux Amino acids Threonine-(L) (L)-Threonine (2S,3R)-2-Amino-3-hydroxybutanoic acid 17 atomes_1.3.1/data/library/molecules/Amino_acids/l-proline.sml0000664000175000017500000000323315212624223023677 0ustar lerouxleroux Amino acids Proline-(L) (L)-Proline (2S)-Pyrrolidine-2-carboxylic acid 17 atomes_1.3.1/data/library/molecules/Amino_acids/d-threonine.sml0000664000175000017500000000324215212624223024212 0ustar lerouxleroux Amino acids Threonine-(D) (D)-Threonine (2R,3S)-2-Amino-3-hydroxybutanoic acid 17 atomes_1.3.1/data/library/molecules/Amino_acids/l-lysine.sml0000664000175000017500000000414615212624223023536 0ustar lerouxleroux Amino acids Lysine-(L) (L)-Lysine (2S)-2,6-Diaminohexanoic acid 24 atomes_1.3.1/data/library/molecules/Amino_acids/d-allo-threonine.sml0000664000175000017500000000325315212624223025141 0ustar lerouxleroux Amino acids Allo-threonine-(D) (D)-Allo-threonine (2R,3R)-2-Amino-3-hydroxybutanoicacid 17 atomes_1.3.1/data/library/molecules/Amino_acids/d-cysteine.sml0000664000175000017500000000277215212624223024051 0ustar lerouxleroux Amino acids Cysteine-(D) (D)-Cysteine (2S)-2-Amino-3-sulfanylpropanoicacid 14 atomes_1.3.1/data/library/molecules/Amino_acids/d-lysine.sml0000664000175000017500000000414715212624223023527 0ustar lerouxleroux Amino acids Lysine-(D) (D)-Lysine (2R)-2,6-Diaminohexanoic acid 24 atomes_1.3.1/data/library/molecules/Amino_acids/d-isoleucine.sml0000664000175000017500000000376315212624223024366 0ustar lerouxleroux Amino acids Isoleucine-(D) (D)-Isoleucine (2R,3R)-2-Amino-3-methylpentanoic acid 22 atomes_1.3.1/data/library/molecules/Amino_acids/l-cysteine.sml0000664000175000017500000000277715212624223024066 0ustar lerouxleroux Amino acids Cysteine-(L) (L)-Cysteine (2R)-2-Amino-3-sulfanylpropanoic acid 14 atomes_1.3.1/data/library/molecules/Amino_acids/l-asparagine.sml0000664000175000017500000000324415212624223024343 0ustar lerouxleroux Amino acids Asparagine-(L) (L)-Asparagine (2S)-2-Amino-3-carbamoylpropanoic acid 17 atomes_1.3.1/data/library/molecules/Amino_acids/d-aspartic_acid.sml0000664000175000017500000000313315212624223025004 0ustar lerouxleroux Amino acids Aspartic acid-(D) (D)-Aspartic acid (2R)-2-Aminobutanedioicacid 16 atomes_1.3.1/data/library/molecules/Amino_acids/d-serine.sml0000664000175000017500000000272315212624223023507 0ustar lerouxleroux Amino acids Serine-(D) (D)-Serine (2R)-2-Amino-3-hydroxypropanoic acid 14 atomes_1.3.1/data/library/molecules/Amino_acids/l-leucine.sml0000664000175000017500000000375615212624223023665 0ustar lerouxleroux Amino acids Leucine-(L) (L)-Leucine (2S)-2-Amino-4-methylpentanoic acid 22 atomes_1.3.1/data/library/molecules/Amino_acids/d-tryptophan.sml0000664000175000017500000000451415212624223024432 0ustar lerouxleroux Amino acids Tryptophan-(D) (D)-Tryptophan (2R)-2-Amino-3-(1H-indol-3-yl)propanoic acid 27 atomes_1.3.1/data/library/molecules/Amino_acids/d-valine.sml0000664000175000017500000000344015212624223023475 0ustar lerouxleroux Amino acids Valine-(D) (D)-Valine (2R)-2-Amino-3-methylbutanoic acid 19 atomes_1.3.1/data/library/molecules/Amino_acids/l-4-nitrophenylalanine.sml0000664000175000017500000000432415212624223026275 0ustar lerouxleroux Amino acids 4-Nitrophenylalanine-(L) (L)-4-Nitrophenylalanine (S)-2-Amino-3-(4-nitrophenyl)propanoic acid 25 atomes_1.3.1/data/library/molecules/Amino_acids/d-methionine.sml0000664000175000017500000000362215212624223024360 0ustar lerouxleroux Amino acids Methionine-(D) (D)-Methionine (2R)-2-Amino-4-methylsulfanylbutanoic acid 20 atomes_1.3.1/data/library/molecules/Amino_acids/glycine.sml0000664000175000017500000000226715212624223023436 0ustar lerouxleroux Amino acids Glycine-(D) Glycine 2-Aminoacetic acid 10 atomes_1.3.1/data/library/molecules/Amino_acids/l-tyrosine.sml0000664000175000017500000000417215212624223024106 0ustar lerouxleroux Amino acids Tyrosine-(L) (L)-Tyrosine (2S)-2-Amino-3-(4-hydroxyphenyl)propanoic acid 24 atomes_1.3.1/data/library/molecules/Linear_sugars/0000775000175000017500000000000015212624223021650 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Linear_sugars/d-gulose.sml0000664000175000017500000000422715212624223024111 0ustar lerouxleroux Sugars (Linears) (D)-Gulose (2R,3R,4S,5R)-2,3,4,5,6-Pentahydroxyhexanal (D)-Gulose (D)-Gulo-hexose Aldehydo-D-gulose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-altrose.sml0000664000175000017500000000411715212624223024262 0ustar lerouxleroux Sugars (Linears) (D)-Altrose 6-(hydroxymethyl)oxane-2,3,4,5-tetrol (D)-Altrose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-erythrulose.sml0000664000175000017500000000314115212624223025172 0ustar lerouxleroux Sugars (Linears) (D)-Erythrulose (R)-1,3,4-Trihydroxybutan-2-one (D)-Erythrulose Glycerotetrulose 16 atomes_1.3.1/data/library/molecules/Linear_sugars/d-xylose.sml0000664000175000017500000000354315212624223024136 0ustar lerouxleroux Sugars (Linears) (D)-Xylose (3R,4S,5R)-oxane-2,3,4,5-tetrol (D)-Xylose α-(D)-xylopyranose 20 atomes_1.3.1/data/library/molecules/Linear_sugars/d-sorbose.sml0000664000175000017500000000422115212624223024261 0ustar lerouxleroux Sugars (Linears) (D)-Sorbose (3R,4S,5R)-1,3,4,5,6-Pentahydroxyhexan-2-one (D)-Sorbose Sorbinose (L)-Xylo-Hexulose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-glucose.sml0000664000175000017500000000417715212624223024260 0ustar lerouxleroux Sugars (Linears) (D)-Glucose (2R,3S,4R,5R)-2,3,4,5,6-Pentahydroxyhexanal (D)-Glucose α-(D)-Glucopyranose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-idose.sml0000664000175000017500000000412315212624223023711 0ustar lerouxleroux Sugars (Linears) (D)-Idose (2S,3R,4S,5R)-2,3,4,5,6-Pentahydroxyhexanal (D)-Idose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-galactose.sml0000664000175000017500000000417415212624223024556 0ustar lerouxleroux Sugars (Linears) (D)-Galactose (2R,3S,4S,5R)-2,3,4,5,6-pentahydroxyhexanal (D)-Galactose Galactopyranose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-ribulose.sml0000664000175000017500000000357715212624223024446 0ustar lerouxleroux Sugars (Linears) (D)-Ribulose (3R,4R)-1,3,4,5-Tetrahydroxypentan-2-one Adonose Arabinulose Araboketose 20 atomes_1.3.1/data/library/molecules/Linear_sugars/d-talose.sml0000664000175000017500000000415615212624223024103 0ustar lerouxleroux Sugars (Linears) (D)-Talose (2S,3S,4S,5R)-Pentahydroxyhexanal (D)-Talose (D)-Talo-hexose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/dihydroxyacetone.sml0000664000175000017500000000251115212624223025746 0ustar lerouxleroux Sugars (Linears) Dihydroxyacetone 1,3-Dihydroxypropan-2-one Dihydroxyacetone Glycerone 12 atomes_1.3.1/data/library/molecules/Linear_sugars/d-mannose.sml0000664000175000017500000000422615212624223024252 0ustar lerouxleroux Sugars (Linears) (D)-Mannose (3S,4S,5S,6R)-6-(hydroxymethyl)oxane-2,3,4,5-tetrol (D)-Mannose Carubinose Seminose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-arabinose.sml0000664000175000017500000000346115212624223024555 0ustar lerouxleroux Sugars (Linears) (D)-Arabinose (D)-Arabinose Pectinose 20 atomes_1.3.1/data/library/molecules/Linear_sugars/d-glyceraldehyde.sml0000664000175000017500000000252115212624223025573 0ustar lerouxleroux Sugars (Linears) (D)-Glyceraldehyde (R)-2,3-Dihydroxypropanal (D)-Glyceraldehyde (D)-Glycerose 12 atomes_1.3.1/data/library/molecules/Linear_sugars/d-threose.sml0000664000175000017500000000312715212624223024262 0ustar lerouxleroux Sugars (Linears) (D)-Threose (2S,3R)-2,3,4-Trihydroxybutanal (D)-Threose (D)-Threoterose 16 atomes_1.3.1/data/library/molecules/Linear_sugars/d-lyxose.sml0000664000175000017500000000354715212624223024142 0ustar lerouxleroux Sugars (Linears) (D)-Lyxose (2S,3S,4R)-2,3,4,5-Tetrahydroxypentanal (D)-Lyxose Lyxopyranose 20 atomes_1.3.1/data/library/molecules/Linear_sugars/d-allose.sml0000664000175000017500000000416515212624223024073 0ustar lerouxleroux Sugars (Linears) (D)-Allose 6-(hydroxymethyl)oxane-2,3,4,5-tetrol (D)-Allose Aldehydo-(D)-allose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-psicose.sml0000664000175000017500000000426415212624223024261 0ustar lerouxleroux Sugars (Linears) (D)-Psicose (3R,4R,5R)-1,3,4,5,6-Pentahydroxyhexan-2-one (D)-Psicose (D)-Pseudofructose (D)-Altrulose Allulose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-erythrose.sml0000664000175000017500000000307415212624223024636 0ustar lerouxleroux Sugars (Linears) (D)-Erythrose (2R,3R)-2,3,4-Trihydroxybutanal (D)-Erythrose 16 atomes_1.3.1/data/library/molecules/Linear_sugars/d-xylulose.sml0000664000175000017500000000361615212624223024500 0ustar lerouxleroux Sugars (Linears) (D)-Xylulose (3S,4R)-1,3,4,5-Tetrahydroxypentan-2-one (D)-Xylulose threo-Pentulose threo-2-Pentulose 20 atomes_1.3.1/data/library/molecules/Linear_sugars/d-ribose.sml0000664000175000017500000000357315212624223024101 0ustar lerouxleroux Sugars (Linears) (D)-Ribose (2R,3S,4R)-5-(Hydroxymethyl)tetrahydrofuran-2,3,4-triol (D)-Ribofuranose α-(D)-ribose 20 atomes_1.3.1/data/library/molecules/Linear_sugars/d-fructose.sml0000664000175000017500000000422115212624223024437 0ustar lerouxleroux Sugars (Linears) (D)-Fructose (2R,3S,4R,5R)-2,5-bis(hydroxymethyl)oxolane-2,3,4-triol (D)-Fructose α-(D)-Fructofuranose 24 atomes_1.3.1/data/library/molecules/Linear_sugars/d-tagatose.sml0000664000175000017500000000424115212624223024416 0ustar lerouxleroux Sugars (Linears) (D)-Tagatose (3S,4S,5R)-1,3,4,5,6-Pentahydroxyhexan-2-one (D)-Tagatose (D)-Lyxo-Hexulose keto-(D)-tagatose 24 atomes_1.3.1/data/library/molecules/Alkynes/0000775000175000017500000000000015212624223020460 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Alkynes/ethyne.sml0000664000175000017500000000132115212624223022466 0ustar lerouxleroux Alkynes Ethyne Ethyne Acetylene 4 atomes_1.3.1/data/library/molecules/Alkynes/propyne.sml0000664000175000017500000000172315212624223022674 0ustar lerouxleroux Alkynes Propyne Prop-1-yne Propyne Methyl acetylene Allylene 7 atomes_1.3.1/data/library/molecules/Nucleobases/0000775000175000017500000000000015212624223021315 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Nucleobases/cytosine.sml0000664000175000017500000000276715212624223023703 0ustar lerouxleroux Nucleobases Cytosine 4-aminopyrimidin-2(1--i--H--I--)-one Cytosine 4-amino-1--i--H--I---pyrimidine-2-one 1--i--H--I---4-amino-2-oxopyrimidine 13 atomes_1.3.1/data/library/molecules/Nucleobases/uracil.sml0000664000175000017500000000273715212624223023322 0ustar lerouxleroux Nucleobases Uracil Pyrimidine-2,4(1--i--H--I--,3--i--H--I--)-dione Uracil 2-oxy-4-oxy pyrimidine 2,4(1--i--H--I--,3--i--H--I--)-pyrimidinedione 2,4-dihydroxypyrimidine 12 atomes_1.3.1/data/library/molecules/Nucleobases/thymine.sml0000664000175000017500000000316115212624223023510 0ustar lerouxleroux Nucleobases Thymine 5-Methylpyrimidine-2,4(1--i--H--I--,3--i--H--I--)-dione Thymine 5-Methyl-1H-pyrimidine-2,4-dione 5-methyluracil 15 atomes_1.3.1/data/library/molecules/Nucleobases/adenine.sml0000664000175000017500000000304715212624223023441 0ustar lerouxleroux Nucleobases Adenine 9--i--H--I---purin-6-amine Adenine 6-Aminopurine 1,6-dihydro-6-iminopurine 15 atomes_1.3.1/data/library/molecules/Nucleobases/guanine.sml0000664000175000017500000000333615212624223023465 0ustar lerouxleroux Nucleobases Guanine 2-amino-9--i--H--I---purin-6(1--i--H--I--)-one Guanine 1,9-dihydro-6--i--H--I---purin-6-one 2-amino-6-hydroxypurine 2-aminohypoxanthine 16 atomes_1.3.1/data/library/molecules/Aldehydes/0000775000175000017500000000000015212624223020754 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Aldehydes/acetaldehyde.sml0000664000175000017500000000200215212624223024077 0ustar lerouxleroux Aldehydes Acetaldehyde Acetaldehyde Ethanal Acetic aldehyde Acetylaldehyde 7 atomes_1.3.1/data/library/molecules/Aldehydes/formaldehyde.sml0000664000175000017500000000147015212624223024136 0ustar lerouxleroux Aldehydes Formaldehyde Formaldehyde Methanal Methylene glycol Formol 4 atomes_1.3.1/data/library/molecules/Cyclic_sugars/0000775000175000017500000000000015212624223021644 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-glucuronopyranose.sml0000664000175000017500000000366215212624223027472 0ustar lerouxleroux Sugars (Cyclics) Glucuronopyranose-α-D α-D-Glucuronopyranose 22 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-psicopyranose.sml0000664000175000017500000000403715212624223026567 0ustar lerouxleroux Sugars (Cyclics) Psicopyranose-α-D α-D-Psicopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-arabinopyranose.sml0000664000175000017500000000344415212624223027066 0ustar lerouxleroux Sugars (Cyclics) Arabinopyranose-α-D α-D-Arabinopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-l-arabinopyranose.sml0000664000175000017500000000344215212624223026722 0ustar lerouxleroux Sugars (Cyclics) Arabinopyranose-β-L β-L-Abinopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-tagatopyranose.sml0000664000175000017500000000405315212624223026727 0ustar lerouxleroux Sugars (Cyclics) Tagatopyranose-α-D α-D-Tagatopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-l-galactopyranose.sml0000664000175000017500000000405415212624223027073 0ustar lerouxleroux Sugars (Cyclics) Galactopyranose-α-L α-L-Galactopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-xylopyranose.sml0000664000175000017500000000343615212624223026275 0ustar lerouxleroux Sugars (Cyclics) Xylopyranose-β-D β-D-Xylopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-lyxopyranose.sml0000664000175000017500000000343615212624223026275 0ustar lerouxleroux Sugars (Cyclics) Lyxopyranose-β-D β-D-Lyxopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-ribopyranose.sml0000664000175000017500000000343515212624223026234 0ustar lerouxleroux Sugars (Cyclics) Ribopyranose-β-D β-D-Ribopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-arabinopyranose.sml0000664000175000017500000000343515212624223026714 0ustar lerouxleroux Sugars (Cyclics) Arabinopyranose-β-D β-D-Arabinopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-galactopyranose.sml0000664000175000017500000000406315212624223026711 0ustar lerouxleroux Sugars (Cyclics) Galactopyranose-β-D β-D-Galactopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-galactopyranose.sml0000664000175000017500000000405515212624223027064 0ustar lerouxleroux Sugars (Cyclics) Galactopyranose-α-D α-D-Galactopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-fucopyranose.sml0000664000175000017500000000374615212624223026414 0ustar lerouxleroux Sugars (Cyclics) Fucopyranose-α-D α-D-Fucopyranose 23 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-lyxopyranose.sml0000664000175000017500000000343415212624223026445 0ustar lerouxleroux Sugars (Cyclics) Lyxopyranose-α-D α-D-Lyxopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-talopyranose.sml0000664000175000017500000000405315212624223026407 0ustar lerouxleroux Sugars (Cyclics) Talopyranose-α-D α-D-Talopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-galacturonopyranose.sml0000664000175000017500000000366215212624223027773 0ustar lerouxleroux Sugars (Cyclics) Galacturonopyranose-α-D α-D-Galacturonopyranose 22 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-l-sorbopyranose.sml0000664000175000017500000000404215212624223026602 0ustar lerouxleroux Sugars (Cyclics) Sorbopyranose-α-L α-L-Sorbopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-fructopyranose.sml0000664000175000017500000000405515212624223026602 0ustar lerouxleroux Sugars (Cyclics) Fructopyranose-β-D β-D-Fructopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-l-xylopyranose.sml0000664000175000017500000000344015212624223026300 0ustar lerouxleroux Sugars (Cyclics) Xylopyranose-β-L β-L-Xylopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-l-xylopyranose.sml0000664000175000017500000000344015212624223026452 0ustar lerouxleroux Sugars (Cyclics) Xylopyranose-α-L α-L-Xylopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-l-rhamnopyranose.sml0000664000175000017500000000375715212624223026756 0ustar lerouxleroux Sugars (Cyclics) Rhamnopyranose-α-L α-L-Rhamnopyranose 23 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-l-fucopyranose.sml0000664000175000017500000000374715212624223026425 0ustar lerouxleroux Sugars (Cyclics) Fucopyranose-α-L α-L-Fucopyranose 23 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-gulopyranose.sml0000664000175000017500000000405515212624223026246 0ustar lerouxleroux Sugars (Cyclics) Gulopyranose-β-D β-D-Gulopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-glucopyranose.sml0000664000175000017500000000404515212624223026410 0ustar lerouxleroux Sugars (Cyclics) Glucopyranose-β-D β-D-Glucopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-mannopyranose.sml0000664000175000017500000000405115212624223026404 0ustar lerouxleroux Sugars (Cyclics) Mannopyranose-β-D β-D-Mannopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-allopyranose.sml0000664000175000017500000000404115212624223026374 0ustar lerouxleroux Sugars (Cyclics) Allopyranose-α-D α-D-Allopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-allopyranose.sml0000664000175000017500000000404315212624223026224 0ustar lerouxleroux Sugars (Cyclics) Allopyranose-β-D β-D-Allopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-l-lyxopyranose.sml0000664000175000017500000000343615212624223026457 0ustar lerouxleroux Sugars (Cyclics) Lyxopyranose-α-L α-L-Lyxopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-talopyranose.sml0000664000175000017500000000405615212624223026240 0ustar lerouxleroux Sugars (Cyclics) Talopyranose-β-D β-D-Talopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-fucopyranose.sml0000664000175000017500000000373515212624223026240 0ustar lerouxleroux Sugars (Cyclics) Fucopyranose-β-D β-D-Fucopyranose 23 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-idopyranose.sml0000664000175000017500000000405115212624223026047 0ustar lerouxleroux Sugars (Cyclics) Idopyranose-β-D β-D-Idopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-xylopyranose.sml0000664000175000017500000000343415212624223026445 0ustar lerouxleroux Sugars (Cyclics) Xylopyranose-α-D α-D-Xylopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-l-ribopyranose.sml0000664000175000017500000000343015212624223026411 0ustar lerouxleroux Sugars (Cyclics) Ribopyranose-α-L α-L-Ribopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-mannopyranose.sml0000664000175000017500000000406015212624223026556 0ustar lerouxleroux Sugars (Cyclics) Mannopyranose-α-D α-D-Mannopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-glucopyranose.sml0000664000175000017500000000403615212624223026562 0ustar lerouxleroux Sugars (Cyclics) Glucopyranose-α-D α-D-Glucopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-rhamnopyranose.sml0000664000175000017500000000375715212624223026574 0ustar lerouxleroux Sugars (Cyclics) Rhamnopyranose-β-D β-D-Rhamnopyranose 23 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-rhamnopyranose.sml0000664000175000017500000000374215212624223026740 0ustar lerouxleroux Sugars (Cyclics) Rhamnopyranose-α-D α-D-Rhamnopyranose 23 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-d-tagatopyranose.sml0000664000175000017500000000405415212624223026556 0ustar lerouxleroux Sugars (Cyclics) Tagatopyranose-β-D β-D-Tagatopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-gulopyranose.sml0000664000175000017500000000404615212624223026420 0ustar lerouxleroux Sugars (Cyclics) Gulopyranose-α-D α-D-Gulopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-l-ribopyranose.sml0000664000175000017500000000343115212624223026240 0ustar lerouxleroux Sugars (Cyclics) Ribopyranose-β-L β-L-Ribopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-ribopyranose.sml0000664000175000017500000000343715212624223026410 0ustar lerouxleroux Sugars (Cyclics) Ribopyranose-α-D α-D-Ribopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-d-idopyranose.sml0000664000175000017500000000405015212624223026220 0ustar lerouxleroux Sugars (Cyclics) Idopyranose-α-D α-D-Idopyranose 24 atomes_1.3.1/data/library/molecules/Cyclic_sugars/beta-l-lyxopyranose.sml0000664000175000017500000000343615212624223026305 0ustar lerouxleroux Sugars (Cyclics) Lyxopyranose-β-L β-L-Lyxopyranose 20 atomes_1.3.1/data/library/molecules/Cyclic_sugars/alpha-l-arabinopyranose.sml0000664000175000017500000000344715212624223027101 0ustar lerouxleroux Sugars (Cyclics) Arabinopyranose-α-L α-L-Arabinopyranose 20 atomes_1.3.1/data/library/molecules/Sulfoxides/0000775000175000017500000000000015212624223021177 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Sulfoxides/dimethyl_sulfoxide.sml0000664000175000017500000000235415212624223025621 0ustar lerouxleroux Sulfoxides Dimethyl sulfoxide Dimethyl sulfoxide Methylsulfinylmethane Methyl sulfoxide 10 atomes_1.3.1/data/library/molecules/Alkanes/0000775000175000017500000000000015212624223020430 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Alkanes/dodecane.sml0000664000175000017500000000561615212624223022717 0ustar lerouxleroux Alkanes Dodecane Dodecane 38 atomes_1.3.1/data/library/molecules/Alkanes/propane.sml0000664000175000017500000000224415212624223022613 0ustar lerouxleroux Alkanes Propane Propane Tricarbane 11 atomes_1.3.1/data/library/molecules/Alkanes/pentadecane.sml0000664000175000017500000000702515212624223023420 0ustar lerouxleroux Alkanes Pentadecane Pentadecane --i--n--I---Pentadecane 47 atomes_1.3.1/data/library/molecules/Alkanes/tetracosane.sml0000664000175000017500000001240215212624223023454 0ustar lerouxleroux Alkanes Tetracosane Tetracosane 74 atomes_1.3.1/data/library/molecules/Alkanes/icosane.sml0000664000175000017500000001075115212624223022572 0ustar lerouxleroux Alkanes Icosane Icosane Eicosane 62 atomes_1.3.1/data/library/molecules/Alkanes/butane.sml0000664000175000017500000000264715212624223022434 0ustar lerouxleroux Alkanes Butane Butane Butyl hydride Methylethylmethane Quartane 14 atomes_1.3.1/data/library/molecules/Alkanes/hexadecane.sml0000664000175000017500000000726015212624223023237 0ustar lerouxleroux Alkanes Hexadecane Hexadecane 50 atomes_1.3.1/data/library/molecules/Alkanes/undecane.sml0000664000175000017500000000534115212624223022732 0ustar lerouxleroux Alkanes Undecane Undecane Hendecane 35 atomes_1.3.1/data/library/molecules/Alkanes/pentane.sml0000664000175000017500000000305515212624223022602 0ustar lerouxleroux Alkanes Pentane Pentane Quintane 17 atomes_1.3.1/data/library/molecules/Alkanes/octane.sml0000664000175000017500000000415315212624223022421 0ustar lerouxleroux Alkanes Octane Octane 26 atomes_1.3.1/data/library/molecules/Alkanes/tetradecane.sml0000664000175000017500000000644315212624223023433 0ustar lerouxleroux Alkanes Tetradecane Tetradecane 44 atomes_1.3.1/data/library/molecules/Alkanes/heptane.sml0000664000175000017500000000367515212624223022604 0ustar lerouxleroux Alkanes Heptane Heptane Septane 23 atomes_1.3.1/data/library/molecules/Alkanes/tridecane.sml0000664000175000017500000000612615212624223023110 0ustar lerouxleroux Alkanes Tridecane Tridecane 41 atomes_1.3.1/data/library/molecules/Alkanes/ethane.sml0000664000175000017500000000172715212624223022420 0ustar lerouxleroux Alkanes Ethane Ethane Dicarbane 8 atomes_1.3.1/data/library/molecules/Alkanes/nonane.sml0000664000175000017500000000446015212624223022427 0ustar lerouxleroux Alkanes Nonane Nonane 29 atomes_1.3.1/data/library/molecules/Alkanes/methane.sml0000664000175000017500000000151515212624223022570 0ustar lerouxleroux Alkanes Methane Methane Natural Gas Hydrogen carbide Carbane 5 atomes_1.3.1/data/library/molecules/Alkanes/decane.sml0000664000175000017500000000477315212624223022377 0ustar lerouxleroux Alkanes Decane Decane 32 atomes_1.3.1/data/library/molecules/Alkanes/hexane.sml0000664000175000017500000000336415212624223022423 0ustar lerouxleroux Alkanes Hexane Hexane Sextane 20 atomes_1.3.1/data/library/molecules/Alkanes/methylpropane.sml0000664000175000017500000000263015212624223024035 0ustar lerouxleroux Alkanes Methylpropane Methylpropane 2-Methylpropane Isobutane 14 atomes_1.3.1/data/library/molecules/Steroids/0000775000175000017500000000000015212624223020646 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Steroids/cholesterol.sml0000664000175000017500000001301415212624223023705 0ustar lerouxleroux Steroids Cholesterol (3β)-cholest-5-en-3-ol Cholesterol Cholesterin Cholesteryl alcohol 74 atomes_1.3.1/data/library/molecules/Steroids/estradiol.sml0000664000175000017500000000703115212624223023352 0ustar lerouxleroux Steroids Estradiol (17β)-estra-1,3,5(10)-triene-3,17-diol Estradiol Oestradiol E2 17β-Estradiol 44 atomes_1.3.1/data/library/molecules/Steroids/testosterone.sml0000664000175000017500000000717415212624223024132 0ustar lerouxleroux Steroids Testosterone 17β-hydroxyandrost-4-en-3-one Testosterone Androst-4-en-17β-ol-3-one 46 atomes_1.3.1/data/library/molecules/Thiols/0000775000175000017500000000000015212624223020314 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Thiols/methanethiol.sml0000664000175000017500000000170015212624223023510 0ustar lerouxleroux Thiols Methanethiol Methanethiol Methyl mercaptan Mercaptomethane Methiol 6 atomes_1.3.1/data/library/molecules/Thiols/octane-1-thiol.sml0000664000175000017500000000437615212624223023567 0ustar lerouxleroux Thiols Octane-1-thiol Octane-1-thiol 1-Octanethiol 27 atomes_1.3.1/data/library/molecules/Thiols/r_butane-2-thiol.sml0000664000175000017500000000306315212624223024106 0ustar lerouxleroux Thiols (R)-Butane-2-thiol (2R)-Butane-2-thiol (R)-Butane-2-thiol (R)-2-Butanethiol (2R)-2-butanethiol 15 atomes_1.3.1/data/library/molecules/Thiols/2-methylproprane-2-thiol.sml0000664000175000017500000000311715212624223025517 0ustar lerouxleroux Thiols 2-Methylproprane-2-thiol 2-Methylproprane-2-thiol --i--t--I---BuSH 2-Methyl-2-propanethiol --i--tert--I---Butyl mercaptan 15 atomes_1.3.1/data/library/molecules/Thiols/pentane-1-thiol.sml0000664000175000017500000000331215212624223023735 0ustar lerouxleroux Thiols Pentane-1-thiol Pentane-1-thiol 1-Pentanethiol Penta mercaptan 18 atomes_1.3.1/data/library/molecules/Thiols/proprane-1-thiol.sml0000664000175000017500000000254415212624223024137 0ustar lerouxleroux Thiols Proprane-1-thiol Proprane-1-thiol --i--n--I---Propylthiol 1-Propanethiol Propyl mercaptan 12 atomes_1.3.1/data/library/molecules/Thiols/proprane-2-thiol.sml0000664000175000017500000000254315212624223024137 0ustar lerouxleroux Thiols Proprane-2-thiol Proprane-2-thiol 2-Propyl mercaptan Isopropyl mercaptan Isopropanthiol 12 atomes_1.3.1/data/library/molecules/Thiols/hexane-1-thiol.sml0000664000175000017500000000361715212624223023563 0ustar lerouxleroux Thiols Hexane-1-thiol Hexane-1-thiol 1-Hexanethiol Hexil mercaptan 21 atomes_1.3.1/data/library/molecules/Thiols/ethane-1_2-dithiol.sml0000664000175000017500000000227715212624223024316 0ustar lerouxleroux Thiols Ethane-1,2-dithiol Ethane-1,2-dithiol Dimercaptoethane 1,2-Ethanedithiol 10 atomes_1.3.1/data/library/molecules/Thiols/heptane-1-thiol.sml0000664000175000017500000000413215212624223023730 0ustar lerouxleroux Thiols Heptane-1-thiol Heptane-1-thiol 1-Heptanethiol Heptyl mercaptan 24 atomes_1.3.1/data/library/molecules/Thiols/ethanethiol.sml0000664000175000017500000000221415212624223023334 0ustar lerouxleroux Thiols Ethanethiol Ethanethiol Ethyl mercaptan Mercaptoethane Ethyl sulfhydrate 9 atomes_1.3.1/data/library/molecules/Thiols/butane-1-thiol.sml0000664000175000017500000000305115212624223023561 0ustar lerouxleroux Thiols Butane-1-thiol Butane-1-thiol Butyl mercaptan --i--n--I---Butyl mercaptan 1-Butanethiol 15 atomes_1.3.1/data/library/molecules/Nitriles/0000775000175000017500000000000015212624223020643 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Nitriles/acetonitrile.sml0000664000175000017500000000174715212624223024053 0ustar lerouxleroux Nitriles Acetonitrile Acetonitrile Cyanomethane Ethyl nitrile Methanecarbonitrile Methyl cyanide 6 atomes_1.3.1/data/library/molecules/Nitriles/isobutyronitrile.sml0000664000175000017500000000251315212624223025007 0ustar lerouxleroux Nitriles Isobutyronitrile 2-Methylpropanenitrile Isobutyronitrile 2-Methylpropionitrile 12 atomes_1.3.1/data/library/molecules/Nitriles/propionitrile.sml0000664000175000017500000000225015212624223024256 0ustar lerouxleroux Nitriles Propionitrile Propanenitrile Cyanoethane Ethyl cyanide Propionitrile Propylnitrile 9 atomes_1.3.1/data/library/molecules/Nitriles/Trichloroacetonitrile.sml0000664000175000017500000000164715212624223025740 0ustar lerouxleroux Nitriles Trichloroacetonitrile Trichloroacetonitrile 1,1,1-Trichloroacetonitrile 6 atomes_1.3.1/data/library/molecules/Nitriles/butyronitrile.sml0000664000175000017500000000260015212624223024271 0ustar lerouxleroux Nitriles Butyronitrile Butanenitrile Butyronitrile 1-Cyanopropane Propyl cyanide --i--n--I---Butyronitrile 12 atomes_1.3.1/data/library/molecules/Macrocycles/0000775000175000017500000000000015212624223021316 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Macrocycles/phthalocyanine.sml0000664000175000017500000001035515212624223025045 0ustar lerouxleroux Macrocycles Phthalocyanine Phthalocyanine 58 atomes_1.3.1/data/library/molecules/Macrocycles/porphin.sml0000664000175000017500000000600215212624223023510 0ustar lerouxleroux Macrocycles Porphin Porphin 21--i--H--I--,23--i--H--I---Porphin Porphyrin 38 atomes_1.3.1/data/library/molecules/Macrocycles/ni-phthalocyanine.sml0000664000175000017500000001160715212624223025452 0ustar lerouxleroux Macrocycles Ni-Phthalocyanine Ni-Phthalocyanine 57 atomes_1.3.1/data/library/molecules/Aromatics/0000775000175000017500000000000015212624223020774 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Aromatics/xanthene.sml0000664000175000017500000000416315212624223023327 0ustar lerouxleroux Aromatics Xanthene 9H-Xanthene Xanthene Dibenzo[a,e]pyran 10H-9-oxaanthracene 24 atomes_1.3.1/data/library/molecules/Aromatics/1h-indole.sml0000664000175000017500000000277415212624223023303 0ustar lerouxleroux Aromatics 1H-Indole 1H-Indole 16 atomes_1.3.1/data/library/molecules/Aromatics/isoquinoline.sml0000664000175000017500000000320315212624223024225 0ustar lerouxleroux Aromatics Isoquinoline Isoquinoline Benzo[c]pyridine 2-Benzanine 17 atomes_1.3.1/data/library/molecules/Aromatics/benzothiophene.sml0000664000175000017500000000310515212624223024531 0ustar lerouxleroux Aromatics Benzothiophene Benzo[b]thiophene Benzothiophene 1-Benzothiophene Thianaphthene Benzothiofuran 15 atomes_1.3.1/data/library/molecules/Aromatics/nitrobenzene.sml0000664000175000017500000000273615212624223024223 0ustar lerouxleroux Aromatics Nitrobenzene Nitrobenzene Nitrobenzol Oil of mirbane 14 atomes_1.3.1/data/library/molecules/Aromatics/cyclopentadienyl.sml0000664000175000017500000000215515212624223025062 0ustar lerouxleroux Aromatics Cyclopentadienyl Cyclopentadienyl Cp 10 atomes_1.3.1/data/library/molecules/Aromatics/toluene.sml0000664000175000017500000000277315212624223023175 0ustar lerouxleroux Aromatics Toluene Toluene Methylbenzene Phenylmethane Toluol Anisen 15 atomes_1.3.1/data/library/molecules/Aromatics/uric_acid.sml0000664000175000017500000000330115212624223023430 0ustar lerouxleroux Aromatics Uric acid 7,9-Dihydro-3H-purine-2,6,8-trione Uric acid 2,6,8-Trioxypurine 2,6,8-Trihydroxypurine 1H-Purine-2,6,8-triol 16 atomes_1.3.1/data/library/molecules/Aromatics/naphthalene.sml0000664000175000017500000000331015212624223023775 0ustar lerouxleroux Aromatics Naphthalene Naphthalene Camphor tar Naphthaline Bicyclo[4.4.0]deca-1,3,5,7,9-pentaene 18 atomes_1.3.1/data/library/molecules/Aromatics/benzoic_acid.sml0000664000175000017500000000304015212624223024117 0ustar lerouxleroux Aromatics Benzoic acid Benzoic acid Benzenecarboxylic acid E 210 Dracylic acid 15 atomes_1.3.1/data/library/molecules/Aromatics/aniline.sml0000664000175000017500000000274315212624223023136 0ustar lerouxleroux Aromatics Aniline Aniline Benzenamine Phenylamine Aminobenzene Benzamine 14 atomes_1.3.1/data/library/molecules/Aromatics/indene.sml0000664000175000017500000000322115212624223022751 0ustar lerouxleroux Aromatics Indene 1H-Indene Bicyclo[4.3.0]nona-1,3,5,7-tetraene Benzocyclopentadiene Indonaphthene 17 atomes_1.3.1/data/library/molecules/Aromatics/phthalimide.sml0000664000175000017500000000315515212624223024005 0ustar lerouxleroux Aromatics Phthalimide Isoindole-1,3-dione Phthalimide 1,3-dioxoisoindoline 16 atomes_1.3.1/data/library/molecules/Aromatics/2h-chromene.sml0000664000175000017500000000324515212624223023624 0ustar lerouxleroux Aromatics 2H-Chromene 2H-1-benzopyran 2H-Chromene 18 atomes_1.3.1/data/library/molecules/Aromatics/acridine.sml0000664000175000017500000000403615212624223023272 0ustar lerouxleroux Aromatics Acridine Acridine Dibenzo[b,e]pyridine 2,3-Benzoquinoline 23 atomes_1.3.1/data/library/molecules/Aromatics/phenanthrene.sml0000664000175000017500000000410615212624223024171 0ustar lerouxleroux Aromatics Phenanthrene Phenanthrene Tricyclo[8.4.0.0--b--2,7--e--]tetradeca-1,3,5,7,9,11,13-heptaene 24 atomes_1.3.1/data/library/molecules/Aromatics/acenaphthylene.sml0000664000175000017500000000353315212624223024505 0ustar lerouxleroux Aromatics Acenaphthylene Acenaphthylene Acenaphthalene Tricyclo[6.3.1.0--b--4,12--e--]dodeca-1(12),2,4,6,8,10-hexaene 20 atomes_1.3.1/data/library/molecules/Aromatics/anisole.sml0000664000175000017500000000313215212624223023142 0ustar lerouxleroux Aromatics Anisole Anisole Methoxybenzene Methyl Phenyl ether Phenoxymethane 16 atomes_1.3.1/data/library/molecules/Aromatics/phenanthroline.sml0000664000175000017500000000367215212624223024537 0ustar lerouxleroux Aromatics Phenanthroline 1,10-Phenanthroline Phenanthroline 22 atomes_1.3.1/data/library/molecules/Aromatics/naphthyridine.sml0000664000175000017500000000311415212624223024356 0ustar lerouxleroux Aromatics Naphthyridine 1,8-Naphthyridine Naphthyridine 1,8-Diazanaphthalene 16 atomes_1.3.1/data/library/molecules/Aromatics/phenol.sml0000664000175000017500000000264415212624223023004 0ustar lerouxleroux Aromatics Phenol Phenol Benzenol Carbolic acid Phenylic acid Hydroxybenzene 13 atomes_1.3.1/data/library/molecules/Aromatics/coumarin.sml0000664000175000017500000000323415212624223023330 0ustar lerouxleroux Aromatics Coumarin 2H-chromen-2-one Coumarin Chromen-2-one 1-Benzopyran-2-one 17 atomes_1.3.1/data/library/molecules/Aromatics/acenaphthene.sml0000664000175000017500000000401715212624223024136 0ustar lerouxleroux Aromatics Acenaphthene 1,2-Dihydroacenaphthylene Acenaphthene 1,8-Ethylenenaphthalene Tricyclo[6.3.1.0--b--4,12--e--]dodeca-1(12),4,6,8,10-pentaene 22 atomes_1.3.1/data/library/molecules/Aromatics/quinoline.sml0000664000175000017500000000327715212624223023525 0ustar lerouxleroux Aromatics Quinoline Quinoline 1-Benzopyridine Benzo[b]pyridine 2-Azabicyclo[4.4.0]deca-1(6),2,4,7,9-pentaene 17 atomes_1.3.1/data/library/molecules/Aromatics/cinnoline.sml0000664000175000017500000000303615212624223023471 0ustar lerouxleroux Aromatics Cinnoline Cinnoline Benzopyridazine 16 atomes_1.3.1/data/library/molecules/Aromatics/quinazoline.sml0000664000175000017500000000320315212624223024045 0ustar lerouxleroux Aromatics Quinazoline Quinazoline 1,3-diazanaphthalene Benzopyrimidine Phenmiazine Benzo-1,3-diazine 16 atomes_1.3.1/data/library/molecules/Aromatics/4h-chromene.sml0000664000175000017500000000324615212624223023627 0ustar lerouxleroux Aromatics 4H-Chromene 4H-1-benzopyran 4H-Chromene 18 atomes_1.3.1/data/library/molecules/Aromatics/caffeine.sml0000664000175000017500000000430015212624223023246 0ustar lerouxleroux Aromatics Caffeine Caffeine Guaranine Theine Trimethylxanthine 1,3,7-Trimethyl-1H-purine-2,6(3H,7H)-dione 24 atomes_1.3.1/data/library/molecules/Aromatics/benzaldehyde.sml0000664000175000017500000000300715212624223024147 0ustar lerouxleroux Aromatics Benzaldehyde Benzaldehyde Benzenecarbaldehyde Benzenecarboxaldehyde Phenylmethanal Benzoic aldehyde 14 atomes_1.3.1/data/library/molecules/Aromatics/benzoyl_chloride.sml0000664000175000017500000000272115212624223025046 0ustar lerouxleroux Aromatics Benzoyl chloride Benzoyl chloride Benzenecarbonyl chloride 14 atomes_1.3.1/data/library/molecules/Aromatics/chromone.sml0000664000175000017500000000316415212624223023327 0ustar lerouxleroux Aromatics Chromone Chromen-4-one Chromone 1,4-Benzopyrone 17 atomes_1.3.1/data/library/molecules/Aromatics/tetralin.sml0000664000175000017500000000371415212624223023340 0ustar lerouxleroux Aromatics Tetralin 1,2,3,4-tetrahydronaphthalene Bacticin benzocyclohexane THN 22 atomes_1.3.1/data/library/molecules/Aromatics/purine.sml0000664000175000017500000000250715212624223023017 0ustar lerouxleroux Aromatics Purine 9H-Purine Purine 13 atomes_1.3.1/data/library/molecules/Aromatics/carbazole.sml0000664000175000017500000000375115212624223023461 0ustar lerouxleroux Aromatics Carbazole 9H-Carbazole 9-Azafluorene Dibenzopyrrole Diphenylenimine 22 atomes_1.3.1/data/library/molecules/Aromatics/benzofuran.sml0000664000175000017500000000302215212624223023657 0ustar lerouxleroux Aromatics Benzofuran 1-Benzofuran Benzofuran Coumarone Benzo[b]furan 15 atomes_1.3.1/data/library/molecules/Aromatics/acenaphthenequinone.sml0000664000175000017500000000354515212624223025542 0ustar lerouxleroux Aromatics Acenaphthenequinone Acenaphthylene-1,2-dione Acenaphthenequinone Acenaphthenedione 20 atomes_1.3.1/data/library/molecules/Aromatics/anthracene.sml0000664000175000017500000000411115212624223023616 0ustar lerouxleroux Aromatics Anthracene Anthracene Tricyclo[8.4.0.0--b--3,8--e--]tetradeca-1,3,5,7,9,11,13-heptaene 24 atomes_1.3.1/data/library/molecules/Aromatics/fluorene.sml0000664000175000017500000000402215212624223023326 0ustar lerouxleroux Aromatics Fluorene 9H-Fluorene Fluorene Tricyclo[7.4.0.0--b--2,7--e--]trideca-2,4,6,9,11,13-hexaene 23 atomes_1.3.1/data/library/molecules/Aromatics/benzene.sml0000664000175000017500000000234215212624223023140 0ustar lerouxleroux Aromatics Benzene Benzene Benzol 12 atomes_1.3.1/data/library/molecules/Carboxylic_acids/0000775000175000017500000000000015212624223022314 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Carboxylic_acids/formic_acid.sml0000664000175000017500000000161215212624223025270 0ustar lerouxleroux Carboxylic acids Formic acid Formic acid Methanoic acid Carbonous acid Formylic acid 5 atomes_1.3.1/data/library/molecules/Carboxylic_acids/oxalic_acid.sml0000664000175000017500000000206015212624223025266 0ustar lerouxleroux Carboxylic acids Oxalic acid Oxalic acid Ethanedioic acid Wood bleach 8 atomes_1.3.1/data/library/molecules/Carboxylic_acids/l-lactic_acid.sml0000664000175000017500000000251615212624223025505 0ustar lerouxleroux Carboxylic acids (L)-Lactic acid (S)-2-Hydroxypropanoic acidd (L)-Lactic acid Milk acid 12 atomes_1.3.1/data/library/molecules/Carboxylic_acids/trichloroacetic_acid.sml0000664000175000017500000000225015212624223027166 0ustar lerouxleroux Carboxylic acids Trichloroacetic acid Trichloroacetic acid Trichloroethanoic acid 2,2,2-Trichloroacetic acid 2,2,2-Trichloroethanoic acid 8 atomes_1.3.1/data/library/molecules/Carboxylic_acids/dichloroacetic_acid.sml0000664000175000017500000000223015212624223026762 0ustar lerouxleroux Carboxylic acids Dichloroacetic acid Dichloroacetic acid Dichloroethanoic acid Bichloroacetic acid 2,2-Dichloroacetic acid 8 atomes_1.3.1/data/library/molecules/Carboxylic_acids/isobutyric_acid.sml0000664000175000017500000000277215212624223026215 0ustar lerouxleroux Carboxylic acids Isobutyric acid 2-Methylpropanoic acid Isobutyric acid 2-Methylpropionic acid Isobutanoic acid 14 atomes_1.3.1/data/library/molecules/Carboxylic_acids/propanoic_acid.sml0000664000175000017500000000241015212624223026000 0ustar lerouxleroux Carboxylic acids Propanoic acid Propanoic acid Propionic acid Ethanecarboxylic acid 11 atomes_1.3.1/data/library/molecules/Carboxylic_acids/trifluoroacetic_acid.sml0000664000175000017500000000231015212624223027203 0ustar lerouxleroux Carboxylic acids Trifluoroacetic acid Trifluoroacetic acid Perfluoroacetic acid Trifluoroethanoic acid 2,2,2-Trifluoroacetic 2,2,2-Trifluoroethanoic acid 8 atomes_1.3.1/data/library/molecules/Carboxylic_acids/acetic_acid.sml0000664000175000017500000000211415212624223025237 0ustar lerouxleroux Carboxylic acids Acetic acid Acetic acid Ethanoic acid Hydrogen acetate Vinegar 8 atomes_1.3.1/data/library/molecules/Carboxylic_acids/butanoic_acid.sml0000664000175000017500000000275415212624223025625 0ustar lerouxleroux Carboxylic acids Butanoic acid Butanoic acid Butyric acid Ethylacetic acid Propanecarboxylic acid 14 atomes_1.3.1/data/library/molecules/Carboxylic_acids/d-lactic_acid.sml0000664000175000017500000000251515212624223025474 0ustar lerouxleroux Carboxylic acids (D)-Lactic acid (R)-2-Hydroxypropanoic acidd (D)-Lactic acid Milk acid 12 atomes_1.3.1/data/library/molecules/Carboxylic_acids/l-tartaric_acid.sml0000664000175000017500000000320415212624223026052 0ustar lerouxleroux Carboxylic acids (L)-Tartaric acid (2R,3R)-2,3-Dihydroxybutanedioic acid (L)-Tartaric acid Threaric acid Racemic acid 16 atomes_1.3.1/data/library/molecules/Carboxylic_acids/citric_acid.sml0000664000175000017500000000370115212624223025267 0ustar lerouxleroux Carboxylic acids Citric acid 2-Hydroxypropane-1,2,3-tricarboxylic acid Citric acid 3-Carboxy-3-hydroxypentanedioic acid 21 atomes_1.3.1/data/library/molecules/Carboxylic_acids/l-ascorbic_acid.sml0000664000175000017500000000344015212624223026030 0ustar lerouxleroux Carboxylic acids (L)-Ascorbic acid (R)-3,4-dihydroxy-5-((S)-1,2-dihydroxyethyl)furan-2(5H)-one (L)-Ascorbic acid Vitamic C Ascorbate 20 atomes_1.3.1/data/library/molecules/Carboxylic_acids/d-tartaric_acid.sml0000664000175000017500000000320515212624223026043 0ustar lerouxleroux Carboxylic acids (D)-Tartaric acid (2S,3S)-2,3-Dihydroxybutanedioic acid (D)-Tartaric acid Threaric acid Racemic acid 16 atomes_1.3.1/data/library/molecules/Carboxylic_acids/d-malic_acid.sml0000664000175000017500000000310715212624223025320 0ustar lerouxleroux Carboxylic acids (D)-Malic acid (R)-2-Hydroxybutanedioic acid (D)-Malic acid Hydroxybutanedioic acid 2-Hydroxysuccinic acid 15 atomes_1.3.1/data/library/molecules/Carboxylic_acids/maleic_acid.sml0000664000175000017500000000250515212624223025245 0ustar lerouxleroux Carboxylic acids Maleic acid ((2Z)-But-2-enedioic acid Maleic acid Maleinic acid 12 atomes_1.3.1/data/library/molecules/Carboxylic_acids/l-malic_acid.sml0000664000175000017500000000310715212624223025330 0ustar lerouxleroux Carboxylic acids (L)-Malic acid (S)-2-Hydroxybutanedioic acid (L)-Malic acid Hydroxybutanedioic acid 2-Hydroxysuccinic acid 15 atomes_1.3.1/data/library/molecules/Misc/0000775000175000017500000000000015212624223017745 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Misc/water.sml0000664000175000017500000000125515212624223021607 0ustar lerouxleroux Misc Water Water Oxidane Dihydrogen monoxide 3 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/0000775000175000017500000000000015212624223021762 5ustar lerouxlerouxatomes_1.3.1/data/library/molecules/Cyclic_alkenes/cyclohexa-1_3-diene.sml0000664000175000017500000000271415212624223026124 0ustar lerouxleroux Cyclic alkenes Cyclohexa-1,3-diene Cyclohexa-1,3-diene 1,3-Cyclohexadiene 1,2-Dihydrobenzene 1,3-CHD 14 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cyclohexa-1_4-diene.sml0000664000175000017500000000271315212624223026124 0ustar lerouxleroux Cyclic alkenes Cyclohexa-1,4-diene Cyclohexa-1,4-diene 1,4-Cyclohexadiene 1,4-Dihydrobenzene 1,4-CHD 14 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cycloocta-1_3_5_7-tetraene.sml0000664000175000017500000000306015212624223027315 0ustar lerouxleroux Cyclic alkenes Cycloocta-1,3,5,7-tetraene Cycloocta-1,3,5,7-tetraene [8]Annulene COT 16 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cycloocta-1_3_6-triene.sml0000664000175000017500000000302315212624223026546 0ustar lerouxleroux Cyclic alkenes Cycloocta-1,3,6-triene Cycloocta-1,3,6-triene 18 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/z-cycloheptene.sml0000664000175000017500000000334115212624223025431 0ustar lerouxleroux Cyclic alkenes (Z)-Cycloheptene (Z)-Cycloheptene --i--cis--I---Cycloheptene 19 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/z-cyclooctene.sml0000664000175000017500000000364315212624223025263 0ustar lerouxleroux Cyclic alkenes (Z)-Cyclooctene (Z)-Cyclooctene --i--cis--I---Cyclooctene 22 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/e-cyclooctene.sml0000664000175000017500000000333715212624223025236 0ustar lerouxleroux Cyclic alkenes (E)-Cyclooctene (E)-Cyclooctene --i--trans--I---Cyclooctene 22 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cyclohepta-1_3_5-triene.sml0000664000175000017500000000302015212624223026715 0ustar lerouxleroux Cyclic alkenes Cycloheptatriene Cyclohepta-1,3,5-triene Cycloheptatriene CHT 1--i--H--I---[7]Annulene 15 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cyclohexene.sml0000664000175000017500000000311215212624223025002 0ustar lerouxleroux Cyclic alkenes Cyclohexene Cyclohexene Tetrahydrobenzene Benzenetetrahydride Hexanaphthylene 16 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cyclohepta-1_3-diene.sml0000664000175000017500000000313515212624223026276 0ustar lerouxleroux Cyclic alkenes Cyclohepta-1,3-diene Cyclohepta-1,3-diene 1,3-Cycloheptadiene 17 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cyclopentene.sml0000664000175000017500000000243515212624223025173 0ustar lerouxleroux Cyclic alkenes Cyclopentene Cyclopentene 13 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cycloocta-1_3-diene.sml0000664000175000017500000000344015212624223026122 0ustar lerouxleroux Cyclic alkenes Cycloocta-1,3-diene Cycloocta-1,3-diene 1,3-Cyclooctadiene 20 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cyclopenta-1_3-diene.sml0000664000175000017500000000235115212624223026303 0ustar lerouxleroux Cyclic alkenes Cyclopenta-1,3-diene Cyclopenta-1,3-diene 1,3-Cyclopentadiene Pyropentylene 11 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cycloocta-1_3_5-triene.sml0000664000175000017500000000320015212624223026542 0ustar lerouxleroux Cyclic alkenes Cycloocta-1,3,5-triene Cycloocta-1,3,5-triene 18 atomes_1.3.1/data/library/molecules/Cyclic_alkenes/cyclohepta-1_4-diene.sml0000664000175000017500000000313115212624223026273 0ustar lerouxleroux Cyclic alkenes Cyclohepta-1,4-diene Cyclohepta-1,4-diene 1,4-Cycloheptadiene 17 atomes_1.3.1/data/library/space_groups/0000775000175000017500000000000015212624223017554 5ustar lerouxlerouxatomes_1.3.1/data/library/space_groups/81-P-4.sgl0000664000175000017500000000234615212624223021056 0ustar lerouxleroux P-4 81 P -4 Tetragonal atomes_1.3.1/data/library/space_groups/43-Fdd2.sgl0000664000175000017500000000244515212624223021273 0ustar lerouxleroux Fdd2 43 F d d 2 Orthorhombic atomes_1.3.1/data/library/space_groups/55-Pbam.sgl0000664000175000017500000000406515212624223021376 0ustar lerouxleroux Pbam 55 P 21/b 21/a 2/m Orthorhombic atomes_1.3.1/data/library/space_groups/72-Ibam.sgl0000664000175000017500000000535615212624223021372 0ustar lerouxleroux Ibam 72 I 2/b 2/a 2/m Orthorhombic atomes_1.3.1/data/library/space_groups/26-Pmc21.sgl0000664000175000017500000000204615212624223021374 0ustar lerouxleroux Pmc21 26 P m c 21 Orthorhombic atomes_1.3.1/data/library/space_groups/158-P3c1.sgl0000664000175000017500000000173315212624223021310 0ustar lerouxleroux P3c1 158 P 3 c 1 Trigonal atomes_1.3.1/data/library/space_groups/63-Cmcm.sgl0000664000175000017500000000526215212624223021375 0ustar lerouxleroux Cmcm 63 C 2/m 2/c 21/m Orthorhombic atomes_1.3.1/data/library/space_groups/166-R-3m.sgl0000664000175000017500000000477715212624223021332 0ustar lerouxleroux R-3m 166 R -3 2/m Trigonal atomes_1.3.1/data/library/space_groups/160-R3m.sgl0000664000175000017500000000226715212624223021237 0ustar lerouxleroux R3m 160 R 3 m Trigonal atomes_1.3.1/data/library/space_groups/60-Pbcn.sgl0000664000175000017500000000304115212624223021366 0ustar lerouxleroux Pbcn 60 P 21/b 2/c 21/n Orthorhombic atomes_1.3.1/data/library/space_groups/10-P2sm.sgl0000664000175000017500000000406615212624223021330 0ustar lerouxleroux P2/m 10 P 1 2/m 1 Monoclinic atomes_1.3.1/data/library/space_groups/79-I4.sgl0000664000175000017500000000147515212624223021003 0ustar lerouxleroux I4 79 I 4 Tetragonal atomes_1.3.1/data/library/space_groups/87-I4sm.sgl0000664000175000017500000000354315212624223021340 0ustar lerouxleroux I4/m 87 I 4/m Tetragonal atomes_1.3.1/data/library/space_groups/70-Fddd.sgl0000664000175000017500000000460015212624223021350 0ustar lerouxleroux Fddd 70 F 2/d 2/d 2/d Orthorhombic atomes_1.3.1/data/library/space_groups/195-P23.sgl0000664000175000017500000000470215212624223021146 0ustar lerouxleroux P23 195 P 2 3 Cubic atomes_1.3.1/data/library/space_groups/127-P4smbm.sgl0000664000175000017500000000642415212624223021742 0ustar lerouxleroux P4/mbm 127 P 4/m 21/b 2/m Tetragonal atomes_1.3.1/data/library/space_groups/117-P-4b2.sgl0000664000175000017500000000367715212624223021372 0ustar lerouxleroux P-4b2 117 P -4 b 2 Tetragonal atomes_1.3.1/data/library/space_groups/193-P63smcm.sgl0000664000175000017500000001047015212624223022027 0ustar lerouxleroux P63/mcm 193 P 63/m 2/c 2/m Hexagonal atomes_1.3.1/data/library/space_groups/212-P4332.sgl0000664000175000017500000000524415212624223021305 0ustar lerouxleroux P4332 212 P 43 3 2 Cubic atomes_1.3.1/data/library/space_groups/21-C222.sgl0000664000175000017500000000420015212624223021107 0ustar lerouxleroux C222 21 C 2 2 2 Orthorhombic atomes_1.3.1/data/library/space_groups/211-I432.sgl0000664000175000017500000000761615212624223021217 0ustar lerouxleroux I432 211 I 4 3 2 Cubic atomes_1.3.1/data/library/space_groups/23-I222.sgl0000664000175000017500000000327515212624223021132 0ustar lerouxleroux I222 23 I 2 2 2 Orthorhombic atomes_1.3.1/data/library/space_groups/165-P-3c1.sgl0000664000175000017500000000371015212624223021360 0ustar lerouxleroux P-3c1 165 P -3 2/c 1 Trigonal atomes_1.3.1/data/library/space_groups/188-P-6c2.sgl0000664000175000017500000000525115212624223021373 0ustar lerouxleroux P-6c2 188 P -6 c 2 Hexagonal atomes_1.3.1/data/library/space_groups/30-Pnc2.sgl0000664000175000017500000000205015212624223021302 0ustar lerouxleroux Pnc2 30 P n c 2 Orthorhombic atomes_1.3.1/data/library/space_groups/4-P21.sgl0000664000175000017500000000107115212624223020765 0ustar lerouxleroux P21 4 P 1 21 1 Monoclinic atomes_1.3.1/data/library/space_groups/32-Pba2.sgl0000664000175000017500000000157315212624223021277 0ustar lerouxleroux Pba2 32 P b a 2 Orthorhombic atomes_1.3.1/data/library/space_groups/97-I422.sgl0000664000175000017500000000434015212624223021141 0ustar lerouxleroux I422 97 I 4 2 2 Tetragonal atomes_1.3.1/data/library/space_groups/219-F-43c.sgl0000664000175000017500000000705715212624223021361 0ustar lerouxleroux F-43c 219 F -4 3 c Cubic atomes_1.3.1/data/library/space_groups/25-Pmm2.sgl0000664000175000017500000000270515212624223021326 0ustar lerouxleroux Pmm2 25 P m m 2 Orthorhombic atomes_1.3.1/data/library/space_groups/73-Ibca.sgl0000664000175000017500000000366415212624223021361 0ustar lerouxleroux Ibca 73 I 21/b 21/c 21/a Orthorhombic atomes_1.3.1/data/library/space_groups/37-Ccc2.sgl0000664000175000017500000000247315212624223021272 0ustar lerouxleroux Ccc2 37 C c c 2 Orthorhombic atomes_1.3.1/data/library/space_groups/130-P4sncc.sgl0000664000175000017500000000531715212624223021724 0ustar lerouxleroux P4/ncc 130 P 4/n 21/c 2/c Tetragonal atomes_1.3.1/data/library/space_groups/229-Im-3m.sgl0000664000175000017500000001536415212624223021470 0ustar lerouxleroux Im-3m 229 I 4/m -3 2/m Cubic atomes_1.3.1/data/library/space_groups/109-I41md.sgl0000664000175000017500000000217515212624223021455 0ustar lerouxleroux I41md 109 I 41 m d Tetragonal atomes_1.3.1/data/library/space_groups/113-P-421m.sgl0000664000175000017500000000266515212624223021456 0ustar lerouxleroux P-421m 113 P -4 21 m Tetragonal atomes_1.3.1/data/library/space_groups/174-P-6.sgl0000664000175000017500000000346315212624223021144 0ustar lerouxleroux P-6 174 P -6 Hexagonal atomes_1.3.1/data/library/space_groups/115-P-4m2.sgl0000664000175000017500000000415615212624223021374 0ustar lerouxleroux P-4m2 115 P -4 m 2 Tetragonal atomes_1.3.1/data/library/space_groups/114-P-421c.sgl0000664000175000017500000000251415212624223021436 0ustar lerouxleroux P-421c 114 P -4 21 c Tetragonal atomes_1.3.1/data/library/space_groups/95-P4322.sgl0000664000175000017500000000235115212624223021231 0ustar lerouxleroux P4322 95 P 43 2 2 Tetragonal atomes_1.3.1/data/library/space_groups/50-Pban.sgl0000664000175000017500000000613615212624223021373 0ustar lerouxleroux Pban 50 P 2/b 2/a 2/n Orthorhombic atomes_1.3.1/data/library/space_groups/131-P42smmc.sgl0000664000175000017500000001050415212624223022012 0ustar lerouxleroux P42/mmc 131 P 42/m 2/m 2/c Tetragonal atomes_1.3.1/data/library/space_groups/128-P4smnc.sgl0000664000175000017500000000555115212624223021745 0ustar lerouxleroux P4/mnc 128 P 4/m 21/b 2/m Tetragonal atomes_1.3.1/data/library/space_groups/208-P4232.sgl0000664000175000017500000001257315212624223021314 0ustar lerouxleroux P4232 208 P 42 3 2 Cubic atomes_1.3.1/data/library/space_groups/150-P321.sgl0000664000175000017500000000246115212624223021216 0ustar lerouxleroux P321 150 P 3 2 1 Trigonal atomes_1.3.1/data/library/space_groups/28-Pma2.sgl0000664000175000017500000000222415212624223021311 0ustar lerouxleroux Pma2 28 P m a 2 Orthorhombic atomes_1.3.1/data/library/space_groups/41-Aea2.sgl0000664000175000017500000000304715212624223021261 0ustar lerouxleroux Aea2 41 A e a 2 Orthorhombic atomes_1.3.1/data/library/space_groups/199-I213.sgl0000664000175000017500000000263615212624223021230 0ustar lerouxleroux I213 199 I 21 3 Cubic atomes_1.3.1/data/library/space_groups/146-R3.sgl0000664000175000017500000000166215212624223021064 0ustar lerouxleroux R3 146 R 3 Trigonal atomes_1.3.1/data/library/space_groups/126-P4snnc.sgl0000664000175000017500000000724515212624223021746 0ustar lerouxleroux P4/nnc 126 P 4/n 2/n 2/c Tetragonal atomes_1.3.1/data/library/space_groups/122-I-42d.sgl0000664000175000017500000000264015212624223021346 0ustar lerouxleroux I-42d 122 I -4 2 d Tetragonal atomes_1.3.1/data/library/space_groups/49-Pccm.sgl0000664000175000017500000000676615212624223021416 0ustar lerouxleroux Pccm 49 P 2/c 2/c 2/m Orthorhombic atomes_1.3.1/data/library/space_groups/189-P-62m.sgl0000664000175000017500000000513215212624223021404 0ustar lerouxleroux P-62m 189 P -6 2 m Hexagonal atomes_1.3.1/data/library/space_groups/186-P63mc.sgl0000664000175000017500000000247215212624223021474 0ustar lerouxleroux P63mc 186 P 63 m c Hexagonal atomes_1.3.1/data/library/space_groups/120-I-4c2.sgl0000664000175000017500000000401615212624223021342 0ustar lerouxleroux I-4c2 120 I -4 c 2 Tetragonal atomes_1.3.1/data/library/space_groups/18-P21212.sgl0000664000175000017500000000161115212624223021277 0ustar lerouxleroux P21212 18 P 21 21 2 Orthorhombic atomes_1.3.1/data/library/space_groups/66-Cccm.sgl0000664000175000017500000000573715212624223021375 0ustar lerouxleroux Cccm 66 C 2/c 2/c 2/m Orthorhombic atomes_1.3.1/data/library/space_groups/52-Pnna.sgl0000664000175000017500000000335715212624223021413 0ustar lerouxleroux Pnna 52 P 2/n 21/n 2/a Orthorhombic atomes_1.3.1/data/library/space_groups/98-I4122.sgl0000664000175000017500000000354515212624223021231 0ustar lerouxleroux I4122 98 I 41 2 2 Tetragonal atomes_1.3.1/data/library/space_groups/129-P4snmm.sgl0000664000175000017500000000657715212624223021771 0ustar lerouxleroux P4/nmm 129 P 4/n 21/m 2/m Tetragonal atomes_1.3.1/data/library/space_groups/88-I41sa.sgl0000664000175000017500000000351615212624223021406 0ustar lerouxleroux I41/a 88 I 41/a Tetragonal atomes_1.3.1/data/library/space_groups/40-Ama2.sgl0000664000175000017500000000323115212624223021263 0ustar lerouxleroux Ama2 40 A m a 2 Orthorhombic atomes_1.3.1/data/library/space_groups/161-R3c.sgl0000664000175000017500000000211415212624223021215 0ustar lerouxleroux R3c 161 R 3 c Trigonal atomes_1.3.1/data/library/space_groups/8-Cm.sgl0000664000175000017500000000364415212624223020776 0ustar lerouxleroux Cm 8 C 1 m 1 Monoclinic atomes_1.3.1/data/library/space_groups/162-P-31m.sgl0000664000175000017500000000514115212624223021367 0ustar lerouxleroux P-31m 162 P -3 1 2/m Trigonal atomes_1.3.1/data/library/space_groups/139-I4smmm.sgl0000664000175000017500000000742215212624223021750 0ustar lerouxleroux I4/mmm 139 I 4/m 2/m 2/m Tetragonal atomes_1.3.1/data/library/space_groups/1-P1.sgl0000664000175000017500000000063215212624223020702 0ustar lerouxleroux P1 1 P 1 Triclinic atomes_1.3.1/data/library/space_groups/167-R-3c.sgl0000664000175000017500000000415615212624223021310 0ustar lerouxleroux R-3c 167 R -3 2/c Trigonal atomes_1.3.1/data/library/space_groups/228-Fd-3c.sgl0000664000175000017500000001541015212624223021431 0ustar lerouxleroux Fd-3c 228 F 41/d -3 2/c Cubic atomes_1.3.1/data/library/space_groups/118-P-4n2.sgl0000664000175000017500000000375315212624223021402 0ustar lerouxleroux P-4n2 118 P -4 n 2 Tetragonal atomes_1.3.1/data/library/space_groups/196-F23.sgl0000664000175000017500000000375115212624223021140 0ustar lerouxleroux F23 196 F 2 3 Cubic atomes_1.3.1/data/library/space_groups/83-P4sm.sgl0000664000175000017500000000405615212624223021343 0ustar lerouxleroux P4/m 83 P 4/m Tetragonal atomes_1.3.1/data/library/space_groups/148-R-3.sgl0000664000175000017500000000305715212624223021143 0ustar lerouxleroux R-3 148 R -3 Trigonal atomes_1.3.1/data/library/space_groups/67-Cmme.sgl0000664000175000017500000000644615212624223021410 0ustar lerouxleroux Cmme 67 C 2/m 2/m 2/e Orthorhombic atomes_1.3.1/data/library/space_groups/54-Pcca.sgl0000664000175000017500000000363615212624223021367 0ustar lerouxleroux Pcca 54 P 21/c 2/c 2/a Orthorhombic atomes_1.3.1/data/library/space_groups/64-Cmce.sgl0000664000175000017500000000514415212624223021365 0ustar lerouxleroux Cmce 64 C 2/m 2/c 21/e Orthorhombic atomes_1.3.1/data/library/space_groups/124-P4smcc.sgl0000664000175000017500000000751515212624223021730 0ustar lerouxleroux P4/mcc 124 P 4/m 2/c 2/c Tetragonal atomes_1.3.1/data/library/space_groups/24-I212121.sgl0000664000175000017500000000202715212624223021350 0ustar lerouxleroux I212121 24 I 21 21 21 Orthorhombic atomes_1.3.1/data/library/space_groups/152-P3121.sgl0000664000175000017500000000163615212624223021304 0ustar lerouxleroux P3121 152 P 31 2 1 Trigonal atomes_1.3.1/data/library/space_groups/191-P6smmm.sgl0000664000175000017500000001247115212624223021757 0ustar lerouxleroux P6/mmm 191 P 6/m 2/m 2/m Hexagonal atomes_1.3.1/data/library/space_groups/35-Cmm2.sgl0000664000175000017500000000272715212624223021316 0ustar lerouxleroux Cmm2 35 C m m 2 Orthorhombic atomes_1.3.1/data/library/space_groups/220-I-43d.sgl0000664000175000017500000000555315212624223021354 0ustar lerouxleroux I-43d 220 I -4 3 d Cubic atomes_1.3.1/data/library/space_groups/9-Cc.sgl0000664000175000017500000000643515212624223020766 0ustar lerouxleroux Cc 9 C 1 c 1 Monoclinic atomes_1.3.1/data/library/space_groups/46-Ima2.sgl0000664000175000017500000000324415212624223021305 0ustar lerouxleroux Ima2 46 I ma 2 Orthorhombic atomes_1.3.1/data/library/space_groups/203-Fd-3.sgl0000664000175000017500000000633415212624223021264 0ustar lerouxleroux Fd-3 203 F 2/d -3 Cubic atomes_1.3.1/data/library/space_groups/48-Pnnn.sgl0000664000175000017500000000560615212624223021434 0ustar lerouxleroux Pnnn 48 P 2/n 2/n 2/n Orthorhombic atomes_1.3.1/data/library/space_groups/136-P42smnm.sgl0000664000175000017500000000641615212624223022041 0ustar lerouxleroux P42/mnm 136 P 42/m 21/n 2/m Tetragonal atomes_1.3.1/data/library/space_groups/121-I-42m.sgl0000664000175000017500000000402715212624223021357 0ustar lerouxleroux I-42m 121 I -4 2 m Tetragonal atomes_1.3.1/data/library/space_groups/154-P3221.sgl0000664000175000017500000000163615212624223021307 0ustar lerouxleroux P3221 154 P 32 2 1 Trigonal atomes_1.3.1/data/library/space_groups/59-Pmmn.sgl0000664000175000017500000000405715212624223021433 0ustar lerouxleroux Pmmn 59 P 21/m 21/m 2/n Orthorhombic atomes_1.3.1/data/library/space_groups/123-P4smmm.sgl0000664000175000017500000001121515212624223021743 0ustar lerouxleroux P4/mmm 123 P 4/m 2/m 2/m Tetragonal atomes_1.3.1/data/library/space_groups/102-P42nm.sgl0000664000175000017500000000232115212624223021461 0ustar lerouxleroux P42nm 102 P 42 n m Tetragonal atomes_1.3.1/data/library/space_groups/69-Fmmm.sgl0000664000175000017500000000575615212624223021430 0ustar lerouxleroux Fmmm 69 F 2/m 2/m 2/m Orthorhombic atomes_1.3.1/data/library/space_groups/216-F-43m.sgl0000664000175000017500000000547515212624223021372 0ustar lerouxleroux F-43m 216 F -4 3 m Cubic atomes_1.3.1/data/library/space_groups/111-P-42m.sgl0000664000175000017500000000516215212624223021366 0ustar lerouxleroux P-42m 111 P -4 2 m Tetragonal atomes_1.3.1/data/library/space_groups/187-P-6m2.sgl0000664000175000017500000000542615212624223021410 0ustar lerouxleroux P-6m2 187 P -6 m 2 Hexagonal atomes_1.3.1/data/library/space_groups/12-C2sm.sgl0000664000175000017500000000557115212624223021317 0ustar lerouxleroux C2/m 12 C 1 2/m 1 Monoclinic atomes_1.3.1/data/library/space_groups/74-Imma.sgl0000664000175000017500000000572315212624223021405 0ustar lerouxleroux Imma 74 I 21/m 21/m 21/a Orthorhombic atomes_1.3.1/data/library/space_groups/6-Pm.sgl0000664000175000017500000000133515212624223021004 0ustar lerouxleroux Pm 6 P 1 m 1 Monoclinic atomes_1.3.1/data/library/space_groups/214-I4132.sgl0000664000175000017500000001047115212624223021274 0ustar lerouxleroux I4132 214 I 41 3 2 Cubic atomes_1.3.1/data/library/space_groups/62-Pnma.sgl0000664000175000017500000000305015212624223021401 0ustar lerouxleroux Pnma 62 P 21/n 21/m 21/a Orthorhombic atomes_1.3.1/data/library/space_groups/224-Pn-3m.sgl0000664000175000017500000002021715212624223021464 0ustar lerouxleroux Pn-3m 224 P 42/n -3 2/m Cubic atomes_1.3.1/data/library/space_groups/31-Pmn21.sgl0000664000175000017500000000166015212624223021404 0ustar lerouxleroux Pmn21 31 P m n 21 Orthorhombic atomes_1.3.1/data/library/space_groups/215-P-43m.sgl0000664000175000017500000000633415212624223021376 0ustar lerouxleroux P-43m 215 P -4 3 m Cubic atomes_1.3.1/data/library/space_groups/39-Aem2.sgl0000664000175000017500000000342615212624223021305 0ustar lerouxleroux Aem2 39 A e m 2 Orthorhombic atomes_1.3.1/data/library/space_groups/108-I4cm.sgl0000664000175000017500000000230515212624223021365 0ustar lerouxleroux I4cm 108 I 4 c m Tetragonal atomes_1.3.1/data/library/space_groups/142-I41sacd.sgl0000664000175000017500000000614615212624223021766 0ustar lerouxleroux I41/acd 142 I 41/a 2/c 2/d Tetragonal atomes_1.3.1/data/library/space_groups/217-I-43m.sgl0000664000175000017500000000610715212624223021367 0ustar lerouxleroux I-43m 217 I -4 3 m Cubic atomes_1.3.1/data/library/space_groups/206-Ia-3.sgl0000664000175000017500000000515715212624223021271 0ustar lerouxleroux Ia-3 206 I 21/a -3 Cubic atomes_1.3.1/data/library/space_groups/22-F222.sgl0000664000175000017500000000342715212624223021125 0ustar lerouxleroux F222 22 F 2 2 2 Orthorhombic atomes_1.3.1/data/library/space_groups/112-P-42c.sgl0000664000175000017500000000540215212624223021352 0ustar lerouxleroux P-42c 112 P -4 2 c Tetragonal atomes_1.3.1/data/library/space_groups/149-P312.sgl0000664000175000017500000000345715212624223021234 0ustar lerouxleroux P312 149 P 3 1 2 Trigonal atomes_1.3.1/data/library/space_groups/210-F4132.sgl0000664000175000017500000000710715212624223021267 0ustar lerouxleroux F4132 210 F 41 3 2 Cubic atomes_1.3.1/data/library/space_groups/230-Ia-3d.sgl0000664000175000017500000001527215212624223021431 0ustar lerouxleroux Ia-3d 230 I 41/a -3 2/d Cubic atomes_1.3.1/data/library/space_groups/144-P31.sgl0000664000175000017500000000075315212624223021141 0ustar lerouxleroux P31 144 P 31 Trigonal atomes_1.3.1/data/library/space_groups/65-Cmmm.sgl0000664000175000017500000000650715212624223021414 0ustar lerouxleroux Cmmm 65 C 2/m 2/m 2/m Orthorhombic atomes_1.3.1/data/library/space_groups/68-Ccce.sgl0000664000175000017500000000607715212624223021365 0ustar lerouxleroux Ccce 68 C 2/c 2/c 2/e Orthorhombic atomes_1.3.1/data/library/space_groups/137-P42snmc.sgl0000664000175000017500000000543415212624223022027 0ustar lerouxleroux P42/nmc 137 P 42/n 21/m 2/c Tetragonal atomes_1.3.1/data/library/space_groups/192-P6smcc.sgl0000664000175000017500000001145015212624223021730 0ustar lerouxleroux P6/mcc 192 P 6/m 2/c 2/c Hexagonal atomes_1.3.1/data/library/space_groups/85-P4sn.sgl0000664000175000017500000000330415212624223021341 0ustar lerouxleroux P4/n 85 P 4/n Tetragonal atomes_1.3.1/data/library/space_groups/145-P32.sgl0000664000175000017500000000075315212624223021143 0ustar lerouxleroux P32 145 P 32 Trigonal atomes_1.3.1/data/library/space_groups/155-R32.sgl0000664000175000017500000000304415212624223021142 0ustar lerouxleroux R32 155 R 3 2 Trigonal atomes_1.3.1/data/library/space_groups/204-Im-3.sgl0000664000175000017500000000567315212624223021306 0ustar lerouxleroux Im-3 204 I 2/m -3 Cubic atomes_1.3.1/data/library/space_groups/205-Pa-3.sgl0000664000175000017500000000402215212624223021265 0ustar lerouxleroux Pa-3 205 P 21/a -3 Cubic atomes_1.3.1/data/library/space_groups/96-P43212.sgl0000664000175000017500000000163015212624223021312 0ustar lerouxleroux P43212 96 P 43 21 2 Tetragonal atomes_1.3.1/data/library/space_groups/58-Pnnm.sgl0000664000175000017500000000361015212624223021425 0ustar lerouxleroux Pnnm 58 P 21/n 21/n 2/m Orthorhombic atomes_1.3.1/data/library/space_groups/194-P63smmc.sgl0000664000175000017500000001003115212624223022021 0ustar lerouxleroux P63/mmc 194 P 63/m 2/m 2/c Hexagonal atomes_1.3.1/data/library/space_groups/222-Pn-3n.sgl0000664000175000017500000001502215212624223021461 0ustar lerouxleroux Pn-3n 222 P 4/n -3 2/n Cubic atomes_1.3.1/data/library/space_groups/201-Pn-3.sgl0000664000175000017500000000677415212624223021316 0ustar lerouxleroux Pn-3 201 P 2/n -3 Cubic atomes_1.3.1/data/library/space_groups/143-P3.sgl0000664000175000017500000000136015212624223021052 0ustar lerouxleroux P3 143 P 3 Trigonal atomes_1.3.1/data/library/space_groups/135-P42smbc.sgl0000664000175000017500000000620515212624223022006 0ustar lerouxleroux P42/mbc 135 P 42/m 21/b 2/c Tetragonal atomes_1.3.1/data/library/space_groups/53-Pmna.sgl0000664000175000017500000000433315212624223021406 0ustar lerouxleroux Pmna 53 P 2/m 2/n 21/a Orthorhombic atomes_1.3.1/data/library/space_groups/198-P213.sgl0000664000175000017500000000204315212624223021226 0ustar lerouxleroux P213 198 P 21 3 Cubic atomes_1.3.1/data/library/space_groups/169-P61.sgl0000664000175000017500000000113415212624223021145 0ustar lerouxleroux P61 169 P 61 Hexagonal atomes_1.3.1/data/library/space_groups/138-P42sncm.sgl0000664000175000017500000000673615212624223022036 0ustar lerouxleroux P42/ncm 138 P 42/n 21/c 2/m Tetragonal atomes_1.3.1/data/library/space_groups/157-P31m.sgl0000664000175000017500000000167515212624223021326 0ustar lerouxleroux P31m 157 P 3 1 m Trigonal atomes_1.3.1/data/library/space_groups/93-P4222.sgl0000664000175000017500000000616115212624223021231 0ustar lerouxleroux P4222 93 P 42 2 2 Tetragonal atomes_1.3.1/data/library/space_groups/29-Pca21.sgl0000664000175000017500000000146215212624223021364 0ustar lerouxleroux Pca21 29 P c a 21 Orthorhombic atomes_1.3.1/data/library/space_groups/19-P212121.sgl0000664000175000017500000000105415212624223021362 0ustar lerouxleroux P212121 19 P 21 21 21 Orthorhombic atomes_1.3.1/data/library/space_groups/5-C2.sgl0000664000175000017500000000377715212624223020707 0ustar lerouxleroux C2 5 C 1 2 1 Monoclinic atomes_1.3.1/data/library/space_groups/172-P64.sgl0000664000175000017500000000163415212624223021147 0ustar lerouxleroux P64 172 P 64 Hexagonal atomes_1.3.1/data/library/space_groups/91-P4122.sgl0000664000175000017500000000235115212624223021223 0ustar lerouxleroux P4122 91 P 41 2 2 Tetragonal atomes_1.3.1/data/library/space_groups/71-Immm.sgl0000664000175000017500000000510615212624223021411 0ustar lerouxleroux Immm 71 I 2/m 2/m 2/m Orthorhombic atomes_1.3.1/data/library/space_groups/2-P-1.sgl0000664000175000017500000000221715212624223020761 0ustar lerouxleroux P-1 2 P -1 Triclinic atomes_1.3.1/data/library/space_groups/84-P42sm.sgl0000664000175000017500000000425315212624223021425 0ustar lerouxleroux P42/m 84 P 42/m Tetragonal atomes_1.3.1/data/library/space_groups/141-I41samd.sgl0000664000175000017500000000636615212624223022003 0ustar lerouxleroux I41/amd 141 I 41/a 2/m 2/d Tetragonal atomes_1.3.1/data/library/space_groups/78-P43.sgl0000664000175000017500000000101415212624223021061 0ustar lerouxleroux P43 78 P 43 Tetragonal atomes_1.3.1/data/library/space_groups/7-Pc.sgl0000664000175000017500000000161115212624223020770 0ustar lerouxleroux Pc 7 P 1 c 1 Monoclinic atomes_1.3.1/data/library/space_groups/33-Pna21.sgl0000664000175000017500000000147215212624223021373 0ustar lerouxleroux Pna21 33 P n a 21 Orthorhombic atomes_1.3.1/data/library/space_groups/147-P-3.sgl0000664000175000017500000000246615212624223021143 0ustar lerouxleroux P-3 147 P -3 Trigonal atomes_1.3.1/data/library/space_groups/51-Pmma.sgl0000664000175000017500000000517315212624223021406 0ustar lerouxleroux Pmma 51 P 21 /m 2/m 2/a Orthorhombic atomes_1.3.1/data/library/space_groups/159-P31c.sgl0000664000175000017500000000153015212624223021304 0ustar lerouxleroux P31c 159 P 3 1 c Trigonal atomes_1.3.1/data/library/space_groups/75-P4.sgl0000664000175000017500000000145415212624223021003 0ustar lerouxleroux P4 75 P 4 Tetragonal atomes_1.3.1/data/library/space_groups/16-P222.sgl0000664000175000017500000000530015212624223021132 0ustar lerouxleroux P222 16 P 2 2 2 Orthorhombic atomes_1.3.1/data/library/space_groups/61-Pbca.sgl0000664000175000017500000000217515212624223021361 0ustar lerouxleroux Pbca 61 P 21/b 21/c 21/a Orthorhombic atomes_1.3.1/data/library/space_groups/104-P4nc.sgl0000664000175000017500000000177415212624223021402 0ustar lerouxleroux P4nc 104 P 4 n c Tetragonal atomes_1.3.1/data/library/space_groups/171-P62.sgl0000664000175000017500000000163415212624223021144 0ustar lerouxleroux P62 171 P 62 Hexagonal atomes_1.3.1/data/library/space_groups/47-Pmmm.sgl0000664000175000017500000000767415212624223021437 0ustar lerouxleroux Pmmm 47 P 2/m 2/m 2/m Orthorhombic atomes_1.3.1/data/library/space_groups/100-P4bm.sgl0000664000175000017500000000215015212624223021361 0ustar lerouxleroux P4bm 100 P 4 b m Tetragonal atomes_1.3.1/data/library/space_groups/225-Fm-3m.sgl0000664000175000017500000001431115212624223021450 0ustar lerouxleroux Fm-3m 225 F 4/m -3 2/m Cubic atomes_1.3.1/data/library/space_groups/103-P4cc.sgl0000664000175000017500000000213315212624223021354 0ustar lerouxleroux P4cc 103 P 4 c c Tetragonal atomes_1.3.1/data/library/space_groups/132-P42smcm.sgl0000664000175000017500000001032415212624223022013 0ustar lerouxleroux P42/mcm 132 P 42/m 2/c 2/m Tetragonal atomes_1.3.1/data/library/space_groups/56-Pccn.sgl0000664000175000017500000000311715212624223021400 0ustar lerouxleroux Pccn 56 P 21/c 21/c 2/n Orthorhombic atomes_1.3.1/data/library/space_groups/77-P42.sgl0000664000175000017500000000160515212624223021065 0ustar lerouxleroux P42 77 P 42 Tetragonal atomes_1.3.1/data/library/space_groups/119-I-4m2.sgl0000664000175000017500000000364515212624223021373 0ustar lerouxleroux I-4m2 119 I -4 m 2 Tetragonal atomes_1.3.1/data/library/space_groups/213-P4132.sgl0000664000175000017500000000524415212624223021304 0ustar lerouxleroux P4132 213 P 41 3 2 Cubic atomes_1.3.1/data/library/space_groups/44-Imm2.sgl0000664000175000017500000000253615212624223021322 0ustar lerouxleroux Imm2 44 I m m 2 Orthorhombic atomes_1.3.1/data/library/space_groups/36-Cmc21.sgl0000664000175000017500000000305015212624223021354 0ustar lerouxleroux Cmc21 36 C m c 21 Orthorhombic atomes_1.3.1/data/library/space_groups/177-P622.sgl0000664000175000017500000000613715212624223021237 0ustar lerouxleroux P622 177 P 6 2 2 Hexagonal atomes_1.3.1/data/library/space_groups/125-P4snbm.sgl0000664000175000017500000001005315212624223021732 0ustar lerouxleroux P4/nbm 125 P 4/n 2/b 2/m Tetragonal atomes_1.3.1/data/library/space_groups/45-Iba2.sgl0000664000175000017500000000230215212624223021263 0ustar lerouxleroux Iba2 45 I b a 2 Orthorhombic atomes_1.3.1/data/library/space_groups/209-F432.sgl0000664000175000017500000000745515212624223021224 0ustar lerouxleroux F432 209 F 4 3 2 Cubic atomes_1.3.1/data/library/space_groups/180-P6222.sgl0000664000175000017500000000575415212624223021317 0ustar lerouxleroux P6222 180 P 62 2 2 Hexagonal atomes_1.3.1/data/library/space_groups/11-P21sm.sgl0000664000175000017500000000236515212624223021412 0ustar lerouxleroux P21/m 11 P 1 21/m 1 Monoclinic atomes_1.3.1/data/library/space_groups/223-Pm-3n.sgl0000664000175000017500000001663015212624223021467 0ustar lerouxleroux Pm-3n 223 P 42/m -3 2/n Cubic atomes_1.3.1/data/library/space_groups/156-P3m1.sgl0000664000175000017500000000177115212624223021322 0ustar lerouxleroux P3m1 156 P 3 m 1 Trigonal atomes_1.3.1/data/library/space_groups/34-Pnn2.sgl0000664000175000017500000000161315212624223021325 0ustar lerouxleroux Pnn2 34 P n n 2 Orthorhombic atomes_1.3.1/data/library/space_groups/200-Pm-3.sgl0000664000175000017500000000754715212624223021313 0ustar lerouxleroux Pm-3 200 P 2/m -3 Cubic atomes_1.3.1/data/library/space_groups/221-Pm-3m.sgl0000664000175000017500000001605615212624223021466 0ustar lerouxleroux Pm-3m 221 P 4/m -3 2/m Cubic atomes_1.3.1/data/library/space_groups/185-P63cm.sgl0000664000175000017500000000257615212624223021500 0ustar lerouxleroux P63cm 185 P 63 c m Hexagonal atomes_1.3.1/data/library/space_groups/173-P63.sgl0000664000175000017500000000152215212624223021143 0ustar lerouxleroux P63 173 P 63 Hexagonal atomes_1.3.1/data/library/space_groups/82-I-4.sgl0000664000175000017500000000232115212624223021041 0ustar lerouxleroux I-4 82 I -4 Tetragonal atomes_1.3.1/data/library/space_groups/27-Pcc2.sgl0000664000175000017500000000217115212624223021301 0ustar lerouxleroux Pcc2 27 P c c 2 Orthorhombic atomes_1.3.1/data/library/space_groups/57-Pbcm.sgl0000664000175000017500000000332215212624223021375 0ustar lerouxleroux Pbcm 57 P 2/b 21/c 21/m Orthorhombic atomes_1.3.1/data/library/space_groups/176-P63sm.sgl0000664000175000017500000000432615212624223021513 0ustar lerouxleroux P63/m 176 P 63/m Hexagonal atomes_1.3.1/data/library/space_groups/227-Fd-3m.sgl0000664000175000017500000001450115212624223021442 0ustar lerouxleroux Fd-3m 227 F 41/d -3 2/m Cubic atomes_1.3.1/data/library/space_groups/89-P422.sgl0000664000175000017500000000545015212624223021154 0ustar lerouxleroux P422 89 P 4 2 2 Tetragonal atomes_1.3.1/data/library/space_groups/106-P42bc.sgl0000664000175000017500000000210515212624223021437 0ustar lerouxleroux P42bc 106 P 42 b c Tetragonal atomes_1.3.1/data/library/space_groups/110-I41cd.sgl0000664000175000017500000000176515212624223021437 0ustar lerouxleroux I41cd 110 I 41 c d Tetragonal atomes_1.3.1/data/library/space_groups/202-Fm-3.sgl0000664000175000017500000000653615212624223021300 0ustar lerouxleroux Fm-3 202 F 2/m -3 Cubic atomes_1.3.1/data/library/space_groups/20-C2221.sgl0000664000175000017500000000227315212624223021177 0ustar lerouxleroux C2221 20 C 2 2 21 Orthorhombic atomes_1.3.1/data/library/space_groups/183-P6mm.sgl0000664000175000017500000000320115212624223021407 0ustar lerouxleroux P6mm 183 P 6 m m Hexagonal atomes_1.3.1/data/library/space_groups/163-P-31c.sgl0000664000175000017500000000432415212624223021360 0ustar lerouxleroux P-31c 163 P -3 1 2/c Trigonal atomes_1.3.1/data/library/space_groups/90-P4212.sgl0000664000175000017500000000317715212624223021231 0ustar lerouxleroux P4212 90 P 4 21 2 Tetragonal atomes_1.3.1/data/library/space_groups/116-P-4c2.sgl0000664000175000017500000000416415212624223021362 0ustar lerouxleroux P-4c2 116 P -4 c 2 Tetragonal atomes_1.3.1/data/library/space_groups/197-I23.sgl0000664000175000017500000000344115212624223021140 0ustar lerouxleroux I23 197 I 2 3 Cubic atomes_1.3.1/data/library/space_groups/14-P21sc.sgl0000664000175000017500000000275215212624223021403 0ustar lerouxleroux P21/c 14 P 1 21/c 1 Monoclinic atomes_1.3.1/data/library/space_groups/38-Amm2.sgl0000664000175000017500000000367215212624223021317 0ustar lerouxleroux Amm2 38 A m m 2 Orthorhombic atomes_1.3.1/data/library/space_groups/181-P6422.sgl0000664000175000017500000000575415212624223021322 0ustar lerouxleroux P6422 181 P 64 2 2 Hexagonal atomes_1.3.1/data/library/space_groups/184-P6cc.sgl0000664000175000017500000000260715212624223021375 0ustar lerouxleroux P6cc 184 P 6 c c Hexagonal atomes_1.3.1/data/library/space_groups/80-I41.sgl0000664000175000017500000000140615212624223021046 0ustar lerouxleroux I41 80 I 41 Tetragonal atomes_1.3.1/data/library/space_groups/17-P2221.sgl0000664000175000017500000000217015212624223021216 0ustar lerouxleroux P2221 17 P 2 2 21 Orthorhombic atomes_1.3.1/data/library/space_groups/190-P-62c.sgl0000664000175000017500000000431615212624223021365 0ustar lerouxleroux P-62c 190 P -6 2 c Hexagonal atomes_1.3.1/data/library/space_groups/175-P6sm.sgl0000664000175000017500000000516115212624223021425 0ustar lerouxleroux P6/m 175 P 6/m Hexagonal atomes_1.3.1/data/library/space_groups/92-P41212.sgl0000664000175000017500000000163015212624223021304 0ustar lerouxleroux P41212 92 P 41 21 2 Tetragonal atomes_1.3.1/data/library/space_groups/105-P42mc.sgl0000664000175000017500000000264115212624223021456 0ustar lerouxleroux P42mc 105 P 42 m c Tetragonal atomes_1.3.1/data/library/space_groups/218-P-43n.sgl0000664000175000017500000000773015212624223021403 0ustar lerouxleroux P-43n 218 P -4 3 n Cubic atomes_1.3.1/data/library/space_groups/134-P42snnm.sgl0000664000175000017500000001066315212624223022037 0ustar lerouxleroux P42/nnm 134 P 42/n 2/n 2/m Tetragonal atomes_1.3.1/data/library/space_groups/42-Fmm2.sgl0000664000175000017500000000312515212624223021310 0ustar lerouxleroux Fmm2 42 F m m 2 Orthorhombic atomes_1.3.1/data/library/space_groups/86-P42sn.sgl0000664000175000017500000000346715212624223021436 0ustar lerouxleroux P42/n 86 P 42/n Tetragonal atomes_1.3.1/data/library/space_groups/101-P42cm.sgl0000664000175000017500000000244115212624223021450 0ustar lerouxleroux P42cm 101 P 42 c m Tetragonal atomes_1.3.1/data/library/space_groups/140-I4smcm.sgl0000664000175000017500000000717315212624223021731 0ustar lerouxleroux I4/mcm 140 I 4/m 2/c 2/m Tetragonal atomes_1.3.1/data/library/space_groups/168-P6.sgl0000664000175000017500000000167215212624223021072 0ustar lerouxleroux P6 168 P 6 Hexagonal atomes_1.3.1/data/library/space_groups/178-P6122.sgl0000664000175000017500000000253015212624223021312 0ustar lerouxleroux P6122 178 P 61 2 2 Hexagonal atomes_1.3.1/data/library/space_groups/13-P2sc.sgl0000664000175000017500000000331715212624223021317 0ustar lerouxleroux P2/c 13 P 1 2/c 1 Monoclinic atomes_1.3.1/data/library/space_groups/164-P-3m1.sgl0000664000175000017500000000442015212624223021370 0ustar lerouxleroux P-3m1 164 P -3 2/m 1 Trigonal atomes_1.3.1/data/library/space_groups/207-P432.sgl0000664000175000017500000000744215212624223021230 0ustar lerouxleroux P432 207 P 4 3 2 Cubic atomes_1.3.1/data/library/space_groups/133-P42snbc.sgl0000664000175000017500000000770115212624223022007 0ustar lerouxleroux P42/nbc 133 P 42/n 2/b 2/c Tetragonal atomes_1.3.1/data/library/space_groups/99-P4mm.sgl0000664000175000017500000000274615212624223021350 0ustar lerouxleroux P4mm 99 P 4 m m Tetragonal atomes_1.3.1/data/library/space_groups/94-P42212.sgl0000664000175000017500000000334515212624223021314 0ustar lerouxleroux P42212 94 P 42 21 2 Tetragonal atomes_1.3.1/data/library/space_groups/226-Fm-3c.sgl0000664000175000017500000001501715212624223021443 0ustar lerouxleroux Fm-3c 226 F 4/m -3 2/c Cubic atomes_1.3.1/data/library/space_groups/182-P6322.sgl0000664000175000017500000000430715212624223021313 0ustar lerouxleroux P6322 182 P 63 2 2 Hexagonal atomes_1.3.1/data/library/space_groups/15-C2sc.sgl0000664000175000017500000000777315212624223021316 0ustar lerouxleroux C2/c 15 C 1 2/c 1 Monoclinic atomes_1.3.1/data/library/space_groups/76-P41.sgl0000664000175000017500000000101415212624223021055 0ustar lerouxleroux P41 76 P 41 Tetragonal atomes_1.3.1/data/library/space_groups/179-P6522.sgl0000664000175000017500000000253015212624223021317 0ustar lerouxleroux P6522 179 P 65 2 2 Hexagonal atomes_1.3.1/data/library/space_groups/170-P65.sgl0000664000175000017500000000113415212624223021141 0ustar lerouxleroux P65 170 P 65 Hexagonal atomes_1.3.1/data/library/space_groups/151-P3112.sgl0000664000175000017500000000164415212624223021302 0ustar lerouxleroux P3112 151 P 31 1 2 Trigonal atomes_1.3.1/data/library/space_groups/3-P2.sgl0000664000175000017500000000162015212624223020703 0ustar lerouxleroux P2 3 P 1 2 1 Monoclinic atomes_1.3.1/data/library/space_groups/107-I4mm.sgl0000664000175000017500000000247115212624223021402 0ustar lerouxleroux I4mm 107 I 4 m m Tetragonal atomes_1.3.1/data/library/space_groups/153-P3212.sgl0000664000175000017500000000164415212624223021305 0ustar lerouxleroux P3212 153 P 32 1 2 Trigonal atomes_1.3.1/man/0000775000175000017500000000000015212624223013260 5ustar lerouxlerouxatomes_1.3.1/man/fr/0000775000175000017500000000000015212624223013667 5ustar lerouxlerouxatomes_1.3.1/man/fr/atomes.1.gz0000664000175000017500000000613115212624223015661 0ustar lerouxleroux9"jatomes.1Zr)6@'w\%vD@!43 a_w*U>k4GX4bÚ*r2MA lxqH`}>Zz bYFLP$qJ0 72 xg"q7U* |6xT藷y~*9L#-D@PTxlp{1-NTN~yxfB}ͷ6! ׀ߦ#J|Tbq' 'X3#>3#blX"đT|(l:lէl 7> @F<_57F!s'2Ԏ*Yc. IK8[<' Kb? :b/W El4Pk:K/eJ}p/*Nk,%ljjDE*-暌 Ky 1f"a^xїL-l-+!?`|8 :JJaG;`7 Ho*a`Ov''_=h;fw)H$TW^:aBw^Xf2^ψRg&o\^`?_ >{d@qgyAh *ػ&I9p11?@6AN YR-7v uk5D&hFx2`^һXcL'H)V$JOHg] CХipl0pOhON&K`%]X}!s,>#[<Q8/Cn@<M.aFkNa[ٳY/Z46v]t?T 1mp0|TLw" ̽9\nvv󳐌9|'H*%1"ފ "Qj#B"Fb>cBLf7ܫitm40;2Q#T"ZI; MH&)p1@L@ФevPVdYBk>Vs'qja[!v1V|AdbUd`qLnc[S$a:VB]3c< AbS zdEk*ATia8ugO!A1?- 8tMb]kQ…@d6i)Xzᯕ,Bw i":C}>4LVfØ25;aF4k'^ Q+YK^4sC:<Wqp1(i24WXc3ck{c ee89-2Yy/kn,A4]|ׅi7=)4 gQVNO0yD ģ8Ku<ç.X"NTFSs[ŧ4"s0oU9"/ _/U GzȽU< u wxXqujB!ay ?HKu^Q#Q_,$@׽F}yim3F!Q?d Dxj[P 6-Pk[FgϞ[$үɜ4uuY/{2 Y(y,挻OIW{ Ѽ\+@4 _@xAc\5#<9,Ng -WiD*{nN?#DAQ!fSO<ҕ8qݥ1*/> J 'jfOGPlqg6/+Mwn9e* W~uStIs15vM1 Y8\O),T!Kƺj"=a/O7j| [=:5F&3_8~R֎ٜ*nRJ_ә٢;SfiXte:(-ɸtiC-sOt5]=vSEgnV;iOx vVTWJ$ڈoJF3lVlJ 0K[p /7_ĉ@[ խ_ 85۵/v~ _,euW'2+jP[.72ԈN6]5k%#68^}{7+7}NUi oW(mI4O7j^ldOc;xj*ƢVnY'O=uf*bԧ[p.i*X dz?zYj0@|}6MHVE{qu 9m)#5'ţ흴ߠsrBϮ۬򁜐c&lz?4=5J}ºvr~+U_\QwQ!atomes_1.3.1/man/Makefile.am0000664000175000017500000000031615212624223015314 0ustar lerouxleroux## Process this file with automake to produce Makefile.in atomes_mandir = $(mandir)/man1/ atomes_man_DATA = \ en/atomes.1.gz atomes_man_frdir = $(mandir)/fr/man1/ atomes_man_fr_DATA = \ fr/atomes.1.gz atomes_1.3.1/man/Makefile.in0000664000175000017500000003703715212624223015337 0ustar lerouxleroux# Makefile.in generated by automake 1.18.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2025 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__rm_f = rm -f $(am__rm_f_notfound) am__rm_rf = rm -rf $(am__rm_f_notfound) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = man ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \ } am__installdirs = "$(DESTDIR)$(atomes_mandir)" \ "$(DESTDIR)$(atomes_man_frdir)" DATA = $(atomes_man_DATA) $(atomes_man_fr_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ATOMES_MAJOR_VERSION = @ATOMES_MAJOR_VERSION@ ATOMES_MINOR_VERSION = @ATOMES_MINOR_VERSION@ ATOMES_PATCH_VERSION = @ATOMES_PATCH_VERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EPOXY_CFLAGS = @EPOXY_CFLAGS@ EPOXY_LIBS = @EPOXY_LIBS@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCFLAGS_F90 = @FCFLAGS_F90@ FCFLAGS_f90 = @FCFLAGS_f90@ FCLIBS = @FCLIBS@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTEGRATION_CFLAGS = @INTEGRATION_CFLAGS@ INTEGRATION_LIBS = @INTEGRATION_LIBS@ LDFLAGS = @LDFLAGS@ LGTK_CFLAGS = @LGTK_CFLAGS@ LGTK_LIBS = @LGTK_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIBS = @LIBXML2_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENMP_CFLAGS = @OPENMP_CFLAGS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UP_APPSTREAM = @UP_APPSTREAM@ UP_DESKTOP = @UP_DESKTOP@ UP_MIME = @UP_MIME@ VERSION = @VERSION@ WINDRES = @WINDRES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__rm_f_notfound = @am__rm_f_notfound@ am__tar = @am__tar@ am__untar = @am__untar@ am__xargs_n = @am__xargs_n@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ atomes_mandir = $(mandir)/man1/ atomes_man_DATA = \ en/atomes.1.gz atomes_man_frdir = $(mandir)/fr/man1/ atomes_man_fr_DATA = \ fr/atomes.1.gz all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu man/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-atomes_manDATA: $(atomes_man_DATA) @$(NORMAL_INSTALL) @list='$(atomes_man_DATA)'; test -n "$(atomes_mandir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(atomes_mandir)'"; \ $(MKDIR_P) "$(DESTDIR)$(atomes_mandir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(atomes_mandir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(atomes_mandir)" || exit $$?; \ done uninstall-atomes_manDATA: @$(NORMAL_UNINSTALL) @list='$(atomes_man_DATA)'; test -n "$(atomes_mandir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(atomes_mandir)'; $(am__uninstall_files_from_dir) install-atomes_man_frDATA: $(atomes_man_fr_DATA) @$(NORMAL_INSTALL) @list='$(atomes_man_fr_DATA)'; test -n "$(atomes_man_frdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(atomes_man_frdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(atomes_man_frdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(atomes_man_frdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(atomes_man_frdir)" || exit $$?; \ done uninstall-atomes_man_frDATA: @$(NORMAL_UNINSTALL) @list='$(atomes_man_fr_DATA)'; test -n "$(atomes_man_frdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(atomes_man_frdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(atomes_mandir)" "$(DESTDIR)$(atomes_man_frdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -$(am__rm_f) $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-atomes_manDATA install-atomes_man_frDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-atomes_manDATA uninstall-atomes_man_frDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-atomes_manDATA \ install-atomes_man_frDATA install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags-am \ uninstall uninstall-am uninstall-atomes_manDATA \ uninstall-atomes_man_frDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Tell GNU make to disable its built-in pattern rules. %:: %,v %:: RCS/%,v %:: RCS/% %:: s.% %:: SCCS/s.% atomes_1.3.1/man/en/0000775000175000017500000000000015212624223013662 5ustar lerouxlerouxatomes_1.3.1/man/en/atomes.1.gz0000664000175000017500000000537715212624223015667 0ustar lerouxleroux"jatomes.1Yv۸RLfTd[VEg'GHPCQ/ܴd9|D ϥX9?t~faH {}֕JEyƎx$c+X*y>L3G26ECBȟXחR((̃{.I$*AU;LVn RD~JjƂC 9 3ٍae0fmޯ:~Iә$ŠMw4oMpM4n#*S@g 71H.1yɦm!dGГyvXOa*amvB3ۖZ !h9oDО;xGi˃<;X"x!5>_Dy{޺1KRZ:zZ"EUc5"i@Dݧ;|.SDw;~U!EJseunqI㍾ES.mov؃m5$YrUK&TJ$Ä7֎?ju[`L@1kp>#lHB|H""jrͺܫHϜ9>C! vlL蟔0*;ujbj+Mfv.1[c3d VMtoqu"DF[DH l-"N,RQ X7ֲZFA6?{7W$> /dev/null` if test "${COLL}"; then # $COLL is potentially multi-line; concatenate lines by not using quotes. export LANG=`echo ${COLL} | awk '{print $1}' | awk -F/ '{print $5}'` fi fi unset APPLECOLLATION COLL # Continue by attempting to find the Locale preference. APPLELOCALE=`defaults read .GlobalPreferences AppleLocale` if test "${APPLELOCALE}"; then LOCALELANG=`echo "${APPLELOCALE}" | awk -F@ '{print $1".UTF-8"}'` if test -d "/usr/share/locale/${LOCALELANG}"; then export LANG="${LOCALELANG}" fi fi unset LOCALELANG # If there is still no locale value, then set US English as a default. #if test -z "${LANG}"; then export LANG=en_US.UTF-8 #fi # The AppleLocale setting may contain a currency-related substring. # Attempt to act on it. # First strip the string to just the currency symbol and the language symbol APPLECURRENCY=`echo "${APPLELOCALE}" | awk -F= '{print $2}'` APPLELANG=`echo "${APPLELOCALE}" | awk -F_ '{print $1}'` if test "${APPLECURRENCY}"; then # The user has set a currency different from that of their locale. # Search for a locale that uses that currency, and set LC_MONETARY accordingly. # First try to find an LC_MONETARY file that combines the language with the currency. FILES=`find /usr/share/locale/${APPLELANG}*UTF-8 -name LC_MONETARY -exec grep -H $APPLECURRENCY {} \;` if test -z "$FILES"; then # Otherwise try to find any LC_MONETARY file that uses that currency. FILES=`find /usr/share/locale/*UTF-8 -name LC_MONETARY -exec grep -H $APPLECURRENCY {} \;` fi if test "$FILES"; then # We found a locale that matches; set LC_MONETARY. export LC_MONETARY=`echo ${FILES} | awk -F: '{print $1}' | awk -F/ '{print $5}'` fi fi unset APPLECURRENCY APPLELANG APPLELOCALE FILES # Has a language ordering been set? # If so, set LC_MESSAGES accordingly; otherwise skip it. APPLELANGUAGES=`defaults read .GlobalPreferences AppleLanguages | awk 'length > 2' | awk -F, '{print $1}' | sed s/\ //g | sed s/-/_/ | sed s/\"//g` if test "$APPLELANGUAGES"; then # A language ordering exists. # Test, item per item, to see whether there is an corresponding locale. for L in $APPLELANGUAGES do POS=`echo ${L} | awk '{print index(ENVIRON["LANG"], $0)}'` if test $POS -eq 1; then # The language symbol is a subset of the $LANG variable. We're done! break fi # NOTE: the following may fail for the alternate Chinese localizations. LC=`ls -d /usr/share/locale/${L}*.UTF-8 2>> /dev/null` # $LC is potentially multi-line; concatenate lines by not using quotes. if test $LC; then # There is a UTF-8 locale matching this language. export LC_MESSAGES=`echo ${LC} | awk '{print $1}' | awk -F/ '{print $5}'` break fi done fi unset APPLELANGUAGES POS LC L if test -f "$bundle_lib/charset.alias"; then export CHARSETALIASDIR="$bundle_lib" fi # Extra arguments can be added in environment.sh. EXTRA_ARGS= if test -f "$bundle_res/environment.sh"; then source "$bundle_res/environment.sh" fi # Strip out the argument added by the OS. if /bin/expr "x$1" : '^x-psn_' > /dev/null; then shift 1 fi cd $bundle_contents/MacOS/ $EXEC "./$name-bin" "$@" $EXTRA_ARGS atomes_1.3.1/misc/macos/atomes-workspace.icns0000664000175000017500000177002015212624223020713 0ustar lerouxlerouxicnsic12։PNG  IHDR@@iqsRGBDeXIfMM*i@@FQB8IDATx[yU?/ovf`EY\Qqi\b4HbMLhMӪ1HbJuIGE:PEa`f} _ͷw&kttT,D?M ˴x \`\V9711dx qq<|E _dɒx<  QЏwuu;v F]?@&<р|Z}544ċë5\Dm۶a˖- JO/-aGuG_6Dz_Yf9LE,Ƽ)d &@U/_H7]Oओ=/wŊFywѿ Q0Tٴ{ex"*-*ݜϧ9G} @B9L,#~y2LzLRDZ _r|8aDKR28Qb>//Orsse``I'MT!l|;v1w҄PLҠ |TUU1_s؄r;Ɯ\!(z (]ދHP@NbhHc~~9B,Ŭt}+5}##cX N2k׮00J~݀T㴍 {ٳg?@,ƄB((eNARnսhq,PPPfhSz_ }q7Ra4!h Izw]*Ңg/Pl///@VZ+8Ɵ۷4Ρ- 2ǼeݖLgOv|yunz,R$GqVUȚkX9@  D`d+h[w>nw=W$&L Bp uNTzyc/83 J+amT5A˚j=hT1yy?ji+ָmyOO>>|GӧK.xSS40AcOx2Ųz>?"x[|"iZ:޼Y*>X |R= :-/0/ uBN.¶q{R^ݽ[Νj'-,)S 4ln>ls㜢%*pwMtAv'Vm3?#+JhxUN7HJveҳp,}eò@.OfFCr`ǻ(28)*@Pu~AC(XqZTw_2P~n \]VǷbzuR :EwJ~T,H e?>J> S(*g#qPz>Q<6eNISp;ОMN-2Np]~@Si|fut]=8uz2 ʆ,5bjO%(<(#2{NtӦ9Ň;̓@{O|IrHnrsLh =Np R  a?GP_zNzq{1p;^N/!SPpWx j ]7IB(脤W)Xbp)9yݲz.㕕"w.q48š+" \_|(Xt"e׮eux GJշNl?7`w9H؂Wpޝ3GnJ:<8*N1NSL@wc֮ʋֳy$ ,KL'g 'kkwx(>n"" hū4Mm*Z 'aec^~2Ny&_s @yPAXڦcӥ`<_cfa; U>t2 "]Dn8p~AOBxq|Dl8mfwˇmZ6k ~=q b>b$IF-k0@@shY}1yGAUetih AXsA p^JeXl bV0ͫr_-ocyֱxw ю3ˏ>~0oșk<,#|Af!{c>!ccO x֡m1o iţ /Gn^lߠP0U7qte[LF0E!|wKZun_\œ\ tY\!Y |~NQ2ŏ P\q?!SJ#(S ҍz,?64&'sgy\/Խe3g:Nۡ4|2Og @! Tb[&ц'4ƈxP2v"ֱۥgH TϞub)vf. Ә`L!0\x{986x"; MA=wG>s4,x'ո6=q?0/rrƍRa8gp?`{<#橷ޒH(?,`KJ >!SCRb| 7ZEYirUR9Ї%՗"Bcr TW *x팃UBK/>BhWⶎ+N[d}w8 W6U^,@ B}f,Lqў*ھtnm[[OT:z"TЌ<|Dڶ>Q~E<4Vk3ƼyyEܫ?])vR)v?G;"NP%pFHjcS鲍>}xr<1t'|sS ~`&T"5WOAgTÓ @0f2NLisV <):+/ ʂ'XS: XS3ϔҠj}43*Yd)Vwx w~cJGS;WmNAzOIm杓"ܳ#*+kZ۔maBh( i=)pƭ"M/ TSۦڦm XJ Tiukm\Z6jZiz:1mZ}@5T)5PI,'ז5iPcߴ*AG>͞0m޳GT`7Z ?Nlz*Dԉx";0o3L b"ްF ?%F$)#ъDh4)0<%? Ty$)ЀfV ؙz9M:W ELXIENDB`ic07'PNG  IHDR>asRGBDeXIfMM*iHw&tIDATx Gy{CZ},ɲl'I*R*pU|PNAQ*|#M 8 8amٲ-Y.>vU=F3͛yJz{oﯻypQWk+JXUacШ=|?>N\P߀nTw}n( ǏOh'G)k$ | ]GJ 3۝$"*]C|mppudd$ Fu93_ijj~衇6߿rPOƫyQ?rr۶m{ׯE' lpB Vzy]j{,VVW`ʔ)o馕gUtdNy?A1UAs:B{>`xxiZs&M~;}jKD AG0O˭:kL h㺺&q1O $y4y@m=erIfS(9:{ֹ*c$ A@! O$9S:.o>kr\ssSaǵ&ȋ6deex]v'HUa:.o&A^?Y[bOZ\k Mmʕ+ly ƥ&(e.Ȩ4*%χ0o ;v(`43G`aa8.IPتv]3á=x#qh{2$0a`=s6; ::y<_y1q!@ t=^Q"o'$2bQׅunc~h>F~~_ͪEda8.HPܗWĵIِkxooovA$8宻04M0nHP蘬:8f\yvo{&n@ƠLEp,` jT&ˈ$4T(JŅ!!D0-@hS@ .P#Ƣ1!A!H[^&t?ү]GU4kF($頧>_' ƌ֩'̵Oh|OL l::Q~Wa0e:W0E<ϗ_26B \v 77S[~<>?|k_(|zzFMD(`Eչ e>#1s`^h6'^ ,6ݴ#<2ܛ.z@FnӃN$@6=Ls^-gYQW^qۤ ϚU%|l~3(IhH`2{/_ަHj/%b"@\]`ZZ_.ozםGu&0`)MD4Bfky _6jqɳ!udtTMݲIO]̽Lz>؀|!mfj;<-@qj_gڵJ 4 v 3B`O[NH+#*z@ڲhx@gwRT TX|$&y#OcWJk`VeVGq}Y4omV\ jiOw ӧz:y^<~睮'N~{K!{}H(ۓD\H0괕Pa҉UH/JȀF}?ڵGdjgl=Qi=ӊ;Gyv@qGJ=8X;T5Rt~׬qW@Wkh֡ea}V*e(V?R͚2,&+ \aI#d֕j+llg?+/*jf##j~o!N n"CX,pÆRQBW])gBkL 3o/If#_>mbԿfPr䋲bMf- BkCR>Ky ^jN;LXZSw۶-XݷnPJK1ؔF?eP-Z %!E&Y gk7ˉ 䫔Z !ݫkjed>׹w]wZ `e⾱4 ZZ}/0Gd$zQ6yuhI]–,:v~r?.otgX*}J}Kn2zmL{aYMpLV7,/XڥilSG^|}:x@#|\q;o ޯG\嫔nrJjvgm`\ݺjTڲh@~A\_,z'Ge@u),Mg.j-i$_ h{Zօ! I-/Yk߹葪?=\Jus O/vjM7Ke)<IA}Tt_^jRd,v:ޜ5.:}!3e@$M A {C oitZ Wn,laT"BTamRWpkAO,绕nPMGu;9}Pyz@3Î0SsvtP|vgpF:j_t .K͛6D(6 5ґ')-R`Ⱥh!,h[Ջ~v}VרT0TQ_ fCnCWiҟ-bY Ij0e P~@(`"iQrSqQuK j48#:}R&.Εꔙ;.ޞWX]@nAgU [ *,yH™Bed@g yզ82$9#"0 |B\R҈K nHj5-b]R / -ZM*n'JQGr?Kg 9MImS]6M o>dX?+z]WRt@U c1 Q± |)?;V~^vZ=Y:K ,* ̒Ix/Jrt~Fak=,N<rnGo7""?B\X<Iqi1 Mآ! 籰 ^~zϗ2CژIf L34=аVNuDpHmA&Ip|ܣ (n HOxlB` QuSX@hԜ|XR8e'=|H4O*҂a?[9!v\|xM$#uJ"pqoo sFYfF;enR(f)|Xu>%Uk@ByH#OʜE^&RE`lK1;Wu:0MŒ~Kpz_7$5Oc4&DL:hJ!C'QvGڠ!m|!4F2e dF'(NoyJԆXd(חQm_6u]0?N}B?K~hX>krU%06h ,Q"=bhn2e8s~>_$(F= o )ۗSm_6C'2io}mG#=KQO =njУ>JP`.V9f2'lsc%7 B~4Dʱ}9=߯, @g'`a&j񈚣 iOj|q3S~F):ޢGCe #6Tm ;Xhѿ1;uo׽"8T UGV&0cUB5 cWοK!!hjDc˗-$VD~,\GlqF Sgj=ӯD`Qh2yS;1(_-{Durj[<,Z8@$'G0ףw +%Դu@`-ga軪/\u!ORnHvAbHR"Y ':UEqM2!d@+soD Mz 5JDДS?5M@LuDRYUBJ #}>‚X6={c',k|g&ycotS݌~T9t Qcu/֓fZE6i8WIȒVDUo(۸s4OnoTf)] +>s2޵}t*9<8V3`qr"htU^[W3 2G%1P1{!giy Mc3WvFu׹ޠnԪHtz0 ׿pB4qyY6>@| uLf%"Q=h&~Y!@u0MV:6ّFdqܳ7xmwT ^Bu u|KTrfB%O5C cd*jҧ G~~2/ڰKsh q.Rی<'A:D+m\!H1£V! H : KʿA??INǢ:-ZgξVG[$M@|r`zάc k~ wqgZ'TfW҃5IPMɋhFWjdr ʱ`{=iӕ0MaR俪,LD"*N`^R(m`!߬9)nhײtB!'Q8i "]5*.t`eqQBdORu\FTpPcЪ`;G rLQ49<SNk/vazitnnhy.RB-p~vvVq 2VUު^(m/͐Sq1[uc׉yzDz^z)+b])^2,vDPDup8iy m\V=ӟ-g)m#dYv"¥Zoaѭa~? [%-z>[HS Zv~/ˀ f7P~vΙ+p>^ⲥK K@^>3f)7e,qYdUAFRt~ݼSkKN|sn׆ #^-1?X>yiFJgvBRh%rI'\ [ ۥ}sRʘ?3nBpBB@1 p|~0{s =^TX0JA2A'+|H]_bESF7u~*nSo!u4'<plhL< 9E q+at3{~PF~[Ryn80 \==8D[G MeFҊr 4 HS煑u(!7+WEzHPoP`;URJF˒HFF峑Eg'|A}6f.Y.(Gs0L"'*^ 8G#|~ϣi0ʆ.1MӖ ,U, 6g 12 ݇Gv/R !c]hK4?G,7YG ~\yQ`%o+QyjmRoHc'K7!L ?o\7ěf`ćOW\^+f-'R| MkX1j)ᄇpd#o;G6yF}]8jvG([ /mb)m{oߞcD >ge0*_T_&Vkܸ$@mze))D1 ęK4 q&0Jv5ZTS4.Ü 8 64!#2iQq]^y|y^םY*O'qʂNݶpF0l{Vl?OuQ[%m WL B|>ӢLU.'|LXF1'@J9ItO锯QQqẤɓG,1~@rě'ݮGyYʄeq_Fof]I[RJ֤,?a2~uM}!/8_mUՖ/<ZEUp2a2g;Eb}.V}ױ\*WUKVR>KpMd(> O"U 2n;:|&V^ݦl <]w` 䩥39Q jpU6oR8sI+Gz~p5J8` ^yȀAv,ꉏ^ȣYh-qw>E0$H@ߢak73*@eQKT`$)SX &,)&zJSQ 'G5U1-`$Thg^Pդj"  |Fy]t){~5o#O[.ؒ06 xK"'t=` [x\.%?!UކA?+Ŷ#El { /JWqIENDB`ic13n܉PNG  IHDR\rfsRGBDeXIfMM*igI@IDATx%EHQU$dE-g>MZ?{͖+ضaY,VYZǞ ?/HS0q.e1fFfR~ꭶ56 =>g s;w4$A#lg˚7| oIV^NU0EM{A&Ɔ@o|9,N4߼ri.j"wtkW#o<<'pkw8fiqyG\a0;P>h Z7KÜ2V)cK7° \%.~_4+jmF$ zpǯ5Kݑ@|{w~Ν; ?яggg...fRNȲ k\מZ{)л:>=UGJ ,rǁsn o_Nׄ7@/ WxF49 DY_w}$O>LƤdޚr zMAL{5 ʠUM Qt~ߑmLr^_-isR_:z EH\P4ӄ@a!?]դ矟I mL 4L&6Cn}ȩNڥnO_t曳ovyޗ}ь&tSoF5 tE_]uc` @)I@PM@fEkkkg?_>/k&_?L5 uV[@*.F)77(v<%ؘŕ=AC 73٨@LN-Ǎ\Y?\22íj}d7I+,^.>˹:3sKKK"e3' RF_F2­5©5NAjgDo7%@Ό?D!˅ moQK:hN`Sx86q tCiCsF;\ pM~7 F?s'o,ʽ:OfU@3dFYINs) _ hYs ݻw7D"VsdDMt w ml-qbn1  M@q>Ê+pSiDMMD"&PyN>߆  `yG N2C':aR 3 nQ~ ? ?%9J@9Z1u૯pS<|M6pk_54S-x&)b·{ hD}5H&ޚa@"{s&f$`d`Z,".E`Z1x&@@,/_@)"WhuЈ$`箫j`.p/5eNM 0]jNoz4W$"WrR6 TՏ_?Ƣ `J_s W^h*&p.E@3B$07*8q_3YA?͋f ph8-p)&/Kͭ&!Dm&G~_-5wXt"` He~$ZJM %'[KC1PڈxSף(󦞥U>g nMR.8&E|? S0KD ;p Vdp+I`ov_)m h@:I P8L. uWs}K 0'P:Љu$p Qy]g:A*i&%74z-ijR*"VܲBbvs0VAf"p&+-D&?)Zh91M` YCs񐀁Om dme7Ok4|<D <ߓپbWwn L5zo$PE5V0 Gx/ M "zNALT5Q@O\ # Z:n S_Wdꫯ?y'4|5!Q&mlf%`W6\6 Iސ&p)M+*Rj<_?$01 aCG<] `K%X[bN@Pt?$0Q6?K <#'NÕvI! kk4$_*V~I&j\']d*8y: n SoM{.vwϟ?oaL- W\ALOx P/FZk͍U/+ۤ: M "T (5mrjn%0}õ8h%]׈k| iK\=RMtc&4-k)O![Iz mWǵF@׆}<>"e4}g:9_ H]O L%{\\[HAn94 e1g bbN@Fg\h&I7U.Y5zUqүOĢX89x'Ϟ=CUpĒD@[O ~͞ f{iwU~$;y *RJ'‰$ ލ"}aQ9jWFmP~I^s"l iSK>ƟZ©KGH19gfĒD\#?'/,=::*Gtjt s??RK<%NeT3gaKX L$ 76dmzhp%^hנ%' x's^e0Ϣ<8{)B:aO_x~_$@_ zb&ܼR0vS[}[ZUĭ޾aNYg\{ @ `"h_5 \OM9Woz?@VW򘥇,UcLe}r{̎?.:v9!?qI[}ʔ&p{8 SJM\M&dt3 AXϋ#M jepai::cOXPVq䏁o<4? ϔ7_@ hqkJ(_/n,̰`hVɴo)Nvw ^j܋ҽ{o+w+kkłaA}s;(A:_7::*7}6O\0 "P^ kV ʢ *&"@n']L%t\ o}y[NS@,bw?iѣb]! aRPo~ @ u^gq8å>6E 2<˿B!w %] q=MQQY =?-K5Y#-Z߅z|Q|Yk֝ӡѯJ3XALOnV 6\C8uȁO^.uR?aɟ&)–^*HXf^|ijMw@Xh\^t) rO}Po?zT޿tjD5䋥WߌҲ|pK~kéO]ב0[W\_*z!@OmAbBp" @=ޘ]qs =Rz~N`*([jܙƼZV\h~D;k49E8i]K*ԟ38 s pѣb0sHO?Ay=k;>=_ք@:M \;>SϵN T#kFL$FT[*^2 ˞sԍ VG![Dqgš{?ABrA7pqwV?|~שnc]KӅ7ʿ(#>\1-nM!>ҳn5&~ /=F.cXʦÅhD]# 8{8,kryM N^=r=k#Vi8a%(84eos"s*M< F z0p#LD5Y1ϋh(۴#YZ DyDZV @Kxq@.?N.#~}\0_n&,Λr_.:3i^WY=>V: [A~nZ?Bh@h B=]1kfP#'Eh@~Ύzr Ev.ᾮrۅUݧvF3VDho˞Hnv wO>S=.^ Gc ,h/Mo&Ώ7@啇85~b7MO&w8y}|]:}O_7d'D˿ B|E0%L QQngT3ieIOC8z5j:; JPY45Cp%Ǻ ]q^v}v':k-O͊|hTb<vgϾ|FۉJ?-pSTyŜ>B$&ЊsOZ $@K{:_kG~[|<ۊsG)ޜ\hB ]^ cLdg4_ڿ,1䓒pTny|)4Ig4Sc؏;0- pb =?z#2ؒ2cZ̳aAĄ]45l8zw)f>,4w_7EK",7%4&D׌C?&Ϸ:Gy`)yj_aÍ5h^O4D=RQT`%-QMw:o8QzoUڎWp$X)ةG 0/0B?W)7$>koDYx'#nӤsʇzJ#jT(F$%M%W"/D")*&gU fd .T2h< d/K$I- Ļ̻-KPzV>8S'HB@>_]S W3u 9s}W̋ (Z8839SPÉ8S?.YL$RRkJ] x mL(M/?fOOuTYFf>_KСu+gUo@{khI,ޖ )T{WVTyҰ>SX䐞)&LAd9(y6bN'{PL Xtn0 `3{z}ki Y|@צNG?~LMc mYo_>(tE[i(O3fOC$sPu4?aj@*q3n֏uؘ/cSzZ&=~Q5!zwv + 0]XXH߾+GϨ_Ȩ3e;S07TgtyL$ܴP{X/D> `G=~R9sr%c@ b`y06H#zs'_NvY_V}:>SPs neuk$p gg#K@mzgk?8C-T~P~&NP!}if V^C#8SpOu[9 P}׬kNB&>r(p6- eb!*]}_*_3z<7VMY4V \d{'}1y0/G;8nN4 ,LKG)|LA}-<,s?y*6×TYxz9+>+7_' L?TD"VAAeѓښhQ~AL3=3zP[ߎ7c|ͯN5ܔЪ1= ;[R+ZWʧӰSd.= Áy1*OyԝܐO!%M}D9ǤcfzH}SH >4To@ ahpTs\iz,T}ɗ3قSp30rHW*owgkίy=&zb |ڈ.>vZy./EX홿yf14mkbSeB`OZQo̔o+/etF~@" 6 K^y,4+ zଶ/rRJSYʘuMJ`b BLտ~Iq! ])2fS+Rl|oi y:S0/ֆ=,3{q%zsߙoO28&ߊω3g jВ4 d]nԏ>L=D@7RbXs_(jmEae#{.@ݱpA=3 \\q=N9({MzK~)`^>ϵTDռ饿Bګ$ =7 ~*{" DsrD&˘ՙgҌX?y_k*UF%&X{/ ˏ?%qn l[45`ζ^@.;'Ь[@K?py\?L?α\@b Niy'% 4\LCn =e,_ ϷM?8]O5PLӟ?XQr @~vyezx0&=y(Od\&r'L ?PEZg<=>Ld0/;:`6ll4R]ڞP'.iGi%^{;./ |fB z_/=zM_YiKT )cYŜ,}wc}Ok=yxN3}g M9]:H@`n B&'=AI|ԟmN8^7}ZQ.=#{Ay| pǺh0# T]3Ə@5ԫ! /?%#3dzЛ3w)GoXg/"]wz S)2lJ>pHiq!h |&%l|q(5%|&Lb*_ \}Sodã@10XʪU>LM0V+jWWNиV~ ?7Lz}/x> @Gd:3vzÎTYeRijO:BZ*;35tvۓϠGN&aj :+!.6jyGcثb+`Rn U^1_|2S9~+tz3q$5{Q _es^62L@υ͙j[u[W}2g sMLA>g ^OD+>Sѣb]_3΁V F]!I1GicHUo+ڏ,!OϿ2tĪBʼn|OHA9'@h·^clfZϋɹ},jbOz6s Bȥ3M)P!Mr8Ȯ3u=Gdy,=Ԝ̑L>Ij^?'&nukǣn̠Qǝ(_P'ړ^ ?%|M}?4PFF>V *]Xn'r#=d&W~??s4Aɩ\NE IPe<O'g T=(]9+0~qV)&s[ihb<7@^ g 21Ȑ$9:ORϚT{AtilYYN4n=H!N]5ƹ,:Ri$ 5pDM~_@rY46#`-ȨI͂A^ݜ)sdO YP4mz~&b8eA҉/ "5 |@8yZ'>ӯFkf2TTeA`ff/4<1 դTD*ڑF"mK5C;؜8x|ѫF+&[,XKDsN47.qegԣF_)_^2(qPa& "YSM+Yk*)t ƞ,QoOSB=7v & 5\ C=SKp*Y}h|w+ '4*{z:SP|E$)3Ng *8SPA SG7}E&^IkZV{^G0#mn[=c_"R 4+B|ƨ4q,vBX愕 S_  9f @Skh04nAFVg=53cϒcāxW >z^IED4dFoIK.CgðJFeTo 1nХsǚ|=!5g ,f8NC´嚉@^r%r -D_/|8Š9&?_+L.^5nTN4x,=`UԴyIxA=1QDl)|e- lh;1PL >%?Lh *\7 =yI>S9O$@YJ8n䱦^a U?^Yj+eL Ѿ] p(-!YܲV07=u{n,!A(Vg~zSi#(/z-jԽ:@&"/:8LW~/N2MttKb֟?nuMtc7vhNceY~F>Jò[7oEqd_jq+,Aaڽy+UZi:"M٠{kUҸ 6A>zq;Sƌwrbh&Fg A$ 3d$1d,@'{GoQ/ Vg]ui krWEgX^vcZ_dwOB(1I( T5ЧuqtC.Oˍ]9 q9-.R3Cf.Gُk.=4u$GKDؤI5o=36u^F, H5lxSwY"XT8z lIx 'oUX)(oXt,HbpV6jף8xg LcM.in xG{ 'xe64I{;Yg B C ߒ x(ޙIX'1}Ǹ_4@/&MXTyo,HR0K5/03%sºQ3SY=,_wK߽ZNmVy۽"n6zy_{uY_@^0T(0@}MjJL*,Oˊ'TEHt +4ku)(=.~Qpʝj43443z/"XPz k#21L(]Řs䯶=!]Ir&I9^NU7{t+0f K%x5V%7?Z@3?_D~4d}X)(c|~/!'5sG!i,s҉IY`Z)Q![@3Og1ğkWq1LԸV~ ?Lc|6*Puə*q>pn> gv~9kܩ"^n@ X@4q`O 2`h(ǖXU)3$KNT~1dzE>{9e1MH/DL>S0M^ȃ'zB j.{GH{ {>-L ' *ơD{|TǺ&rEf)BRh]]6f{U{ѝgv՝ W0,CFY9@gk'Q!LweI7!J=q6&;7M @z~ۗe6Q_O-?d>SP+HNbҐ >m&Y)0@./ʮb:}#r.M8!^_MH-W W;/zuW/xH]`L @W*ol+.y"#,İ a$ u Q\ 0o7럁H`b }^U-_6U>?aKULAM<66HwSY_c_IMSPM u` Rg@!{G՗>!&eM?(GH_hD 3ЌAiьU%^]}ǁdm?S*%׀:m(@T#pN㗏2//&%rpǒ_0hߘMz/z~z15s;'LA-(oMhBCM`S#"1F&k'ƺXShv)=˳ve~~ܩ 4/ N ,i(zף_P5T #,M~Y$`RrIij?xr'{w$͌Vtq) "&~Q4G-e$0Óz&⨯8k@Ue/dM5;2UtTE2O]^k$3qnHYeI0'ǧH¸ 80*0ݗ0ig ̙p`Jzl2unVzyqI3qz}ݦ º0'osTaǷo8'LAH kN *_pɁF`4ٳ v G`CysXȺd" OsN54>e( P)lUx,DTa+6"8BcU)pl[~枍av˞LqXG<>2@f.;YaĠ-. u43 U}t˿sJ(t(,k&Ȍq> j Qy$^Qd,!sF 8 0;.~O ]iVHO.2IDAT2b2P#ux.`H` 6ZG>:}tN{n7+w'F%(^4kCeYFѭaojHp3O5Vct]kŁkg _ @sЃ5L8b0̒{؟^%\ MHrB/߃aʱ$5vu 1UIݾ<ZX)PzI oC opp S,D Do DMT|#B\ y@0a,@NȸPuY:XT9Ҷ!wA,C k"ປ2S6~G٭&IL?=ܗF`L(i X4&l,+fg ^{ Rޥ (NsKꄅrґ'n;SeY>gGyde X:0VU $l @2&a7rz}N=ׁؙ;Y%ϋYY/"!z3K[{镏tLPX5\@L 'K53N,.qV2OEBg"B.Ui:c ohď, n̵vAnwТL%-DG?{ؕ\b]{ź}Lg?Qq @Ew=lw ik8`7aU/7Ofį#.j?<mO!^YVh+ ilbQЪm޺ʈ_ Li7,M1||c_|umP=PTz}\Ry}!8XVgKiBLD@ &Hh+&T,f? ӀAN$eF쇼Lh&UrO,}dh(e=$\3. YK9.Z}tEVc{k`Rq_?g,?),w? &Xs$ =9 `FC/uoF޸ѣh @+=SRCVC b$kn ~U CO5S}>2@"cS @̵OXm^I`*LZ?Pt7O?8}boTzs&i|:VVSJߗ{/ 7> Պ^Z 3j+/p!z֏PychC֠ x{ut#ӷKzn5Bh9 9bMNUt%{Θ/v_?XVϱ]:_2I;u9`j`|X 4 iذi^?GXj]/H-j@vݺo zG}Ia$H>yڟݖ5'̝f~œ8`V=?_ w 5$OFɸhSm5Mf2^,& 2~$y~.chs.9eWs&f5_tYtg2虏pv6~_ @_|P,J^&{tgbxuGDĕ&7yg ƿ^=+ȅǺ>Gqmf\:y_gg]ժ-ݦ0?.ԎcWƧ!˞i 6/'Bf䟪A4a0*){xgj3TO ;>ya N&%.95loC^Uߙ&\|p* σhs^Hm:'@.6jE~QUmaaoXʔ^#, }.|Kߐq؉WTeK+=TLQb2lcҸc{<a{K-3t F3=-7E,PcK=h孹5Q[0"4^5I 0\@޳?r( ]Zi :TTܨ[?RֿVVyI aΛU\;]DZ9'P`,4D^ tH`5 ꐥ|aI.D\]>n7gSM l|xV0@kOSEy<0e3DaNJȣWVSe*4'hs  Zn\,Ǣnt4*7upE`ߩ$ǩ*ٰUbx2&MOwɛE/$l-\bRnfyyT@/8<s69Tq<1ξ}],܀Wn$pʈ4$[\T>.}쿊q4~%m&4 Œ`EЖT+5]y25p]P'&0De"*s4$.>/5rE ?ev c }"q~[}d1ѸMVY:S*nl qUwgz4 qMT5#@:&g GB+WŠ4Ng.`_Ài;R?7 AkkSE f!ŁjKDzA=4ˀO9̿v[yf%' !"=S#FzE.~ Y%j4~: PS7,P@Wwu@q熯F9Z.'xiGYQXh\dzgfXI `C* #+%uu841UЫxeiobO`V#;²w EՀYQ[Z brV) DM4> `Y?.\2ǵ%v `m^D'vM+}^vV2)'}- Rڳ(V=!al,ј//X;44^=4_f *S^w}X0b}4Z廪|9O`QO]M -Tڀ `[CTnh5@:SV%.`[CPڦyx譕s (V࿔ T=&e0x:< Tr{4>s+ QWI/x!U~W+H&gEBԻϫTϿӟ"=l֕v^ Eg ,@\R@U[gX]zYR))NGR?ϧ 48q(%Lՠ=v\KS:t"Od>'F "uᮮ] ۏ;2ȩm2SAzy|6Z@w_M ^3Ȃ~Iկ ,A5ɏ1| LUc4PC P ?<g],{l8cQCiF DhJerr[iaա`^ ??{Ю4iSAz1`,Bh2oSv5,ڊgRQQ]PeD[/' ˙X=i4&\4SK?]P{,˙G5O :šu--eoM0d쏀Йgh8tU@`NY"0rc2Tahv oh7:*`R:*x;w_wU_z4# /c.y'p/ tw]~4$Ucڍc5}Ex)hAGq&{:SׇUcg΂]sL!( >>S>'X10U]&+!SC$_3*4,…OU͙ǺLJynl0O.qLB}1wT!O9HTfuޟgWG9NCQäqv9 |.M޲rn\3!̩^1_!YLΩ{Io iwE?d+v5PojuǗ y~o\h2'9@ \v"I3CO 3M uBc;9w}@Ⱦ>uU)L&@"?9魙UD4G&>ՉII|Ig΁: WNI x^uMM%>]5_9u&`el 6@{p!?뜆I0SIP  1o4 @(Ɏ: Th"#;aZt*< ]Bc85t@$`/ |5qcUq0%h3U`T囆0|L\۪"uC=ۊ,X|ęh4kFea*?Tq݈CLQY4¨M+@WC=cvI&fԳC-LNYaB^NXnO)C4$k |$3U0J{(,rXU٢NTq" A K!QcƸBc ~W}M# & D_#9v\k"vQ_ .[D`9Q(͡4Y5y&;=5s+ ӗig[KFXL;"6 AzvUɾ0By0{dQ=kCI 40{ky;I~:} d|-9Sp_k:SPBv 2K)0ccQ6$ p}YD՘ ltÍmi|9| .guÌ@- sن M-#ϽU (f!HA-l+Ԙ Q g >zTj}9Ί::SP 3bCg c@l}K9SpK]5l8<PP[rYcO13Ԙ X< l&" tSt}pǸa}J $C8]/D3S_&_@Ҥg ,,3 ?/LA sV9SLA_`O @]Y|Ggܿ_=%{ynG4>`F%q 侥kfCr1ⱖAG?ѣk0U8>A%!~ $cH{[Q;zY_ZXfv dcO3Eiq?S\=K 8Բ`V]hFqzS@UϿəs4g9UgSaײVQy؟+cbx3z~4QJ=<Or7T7@5D?N:cYܘ%O@:ӑ]=pЩd,K˶6J."ߥ_h7q~oW+D3K :tVi0陂 j>SPj p J)FVTg F^1*>yaLA=s30n>n=_FX7 i\X°r0*{xٓx~Y <ӵʪab}=yBN${Nw yJL.IcS_(Yy.Qz&Mn4@pTk@q3[u 1Gh3i_z/5A \,~fcrN. dYh{LOٕ^o.n\ޟw0s2+"3C( Xw߄{KZ'4/3x4{rbMB}Bv3w5waKr۞)(U5?XuLXHԖF㣮s^u~ѳjr/_uMc|n?&@A(LnH6'MG^x..iHW!AQO*Ig ~EřSqʙ ,Ku]LKzRiYJM wi!O'o3=< 򌤃==d.LuC) n\˚X0M˩"Ov[sqrkAC!`hd\H8 8S@c:SGq3g B, ĺv]ua4`wk˅ޖs>kn~ao*Өz_kPZvIw^q!&tS A 5HrCM*~_pz )^*bUmO|~=A~ӓ3NG+zwQqݳ\ҧڅwZU'~ q0\-o2wNOckBi0SIln:M ~rs#89I4} p0 A;k=V W/7fKvӷrG8j7߆|*pz\K[f&0I/. Ӗ[j^<]$ w>7Y3畖cΧEhČ L a <4sZƩ6LaG陂B}l Nok0L0k箪 Sj݃R_uZxiش&roUҖe/sDk[  ࣬L#ۂ_qrX߮ v K}mz~k3YU@ct.?hQ38SPg jRT}_Ig8SpY`O&k{߮땻>S^=ӵ?xn| n|:1T}B5;U- }ǜ)A" \LM]s`wϳ{~tnyunt/ :#=SάMdΡra˺7Ƿk=paBe-&n%ANBk 89> r U.K X&}YN J$~l-) 4~?GG]v~u^*]M3{4$@ P).6=Sp]ߎ1I紤7qsp񰵹 o"IQs A1'viN M)C;v/}wZM]MI|il9+{ gn ȁ4Wެ>i8@ŸW'<6 ɟ'~_D&O8N.]ZŽq˧]} q|:Ѱݸ\;?i캧OoRiUv}? X25 PtoF$rLvi'?/8N]hנ5+᝖*&^64nv^U:vK&!^,]~$;(M]};-]>vz)0]UK`$PkcB:{Nzv|;t;||!s8iM++XK$0nO5l:JFuJݔ;rz-A|swX嶸l-8idC#uS!s'{IhX jT:tvi4N4^ӂ:1rUz(m nqg DU18j` - >FYi.&?rխz(%mVuz5 &6~%G7j p*o!@?wPtCs0o9|7PԵ,]ʻVxrqP:y*mm>pX)ǂJ&Ys&1ek_<{A}9퍟Ū7-%zmپOu7M]v;#/ꚭŭ gk:iwUI.n}(3rO=6+?\GkFF,]k~?.˿$wQ)); 5"; iG;6K7AH?uV;'yi |αRvww?~*I@ 7{43$$[ [Nޒ,o&|[ykSK` (4TDzG%̖x&wt$ik `k&98ڭ%0( v x)|pGjƁ@*d=n5& %Я V\QDPEi[N}@ Ղ1K"4vRA-Iq;un@5v wdfpE1ͺzc;U[nvIdk"IiGߕ7D@OfAvMZ?{͖+ضaY,VYZǞ ?/HS0q.e1fFfR~ꭶ56 =>g s;w4$A#lg˚7| oIV^NU0EM{A&Ɔ@o|9,N4߼ri.j"wtkW#o<<'pkw8fiqyG\a0;P>h Z7KÜ2V)cK7° \%.~_4+jmF$ zpǯ5Kݑ@|{w~Ν; ?яggg...fRNȲ k\מZ{)л:>=UGJ ,rǁsn o_Nׄ7@/ WxF49 DY_w}$O>LƤdޚr zMAL{5 ʠUM Qt~ߑmLr^_-isR_:z EH\P4ӄ@a!?]դ矟I mL 4L&6Cn}ȩNڥnO_t曳ovyޗ}ь&tSoF5 tE_]uc` @)I@PM@fEkkkg?_>/k&_?L5 uV[@*.F)77(v<%ؘŕ=AC 73٨@LN-Ǎ\Y?\22íj}d7I+,^.>˹:3sKKK"e3' RF_F2­5©5NAjgDo7%@Ό?D!˅ moQK:hN`Sx86q tCiCsF;\ pM~7 F?s'o,ʽ:OfU@3dFYINs) _ hYs ݻw7D"VsdDMt w ml-qbn1  M@q>Ê+pSiDMMD"&PyN>߆  `yG N2C':aR 3 nQ~ ? ?%9J@9Z1u૯pS<|M6pk_54S-x&)b·{ hD}5H&ޚa@"{s&f$`d`Z,".E`Z1x&@@,/_@)"WhuЈ$`箫j`.p/5eNM 0]jNoz4W$"WrR6 TՏ_?Ƣ `J_s W^h*&p.E@3B$07*8q_3YA?͋f ph8-p)&/Kͭ&!Dm&G~_-5wXt"` He~$ZJM %'[KC1PڈxSף(󦞥U>g nMR.8&E|? S0KD ;p Vdp+I`ov_)m h@:I P8L. uWs}K 0'P:Љu$p Qy]g:A*i&%74z-ijR*"VܲBbvs0VAf"p&+-D&?)Zh91M` YCs񐀁Om dme7Ok4|<D <ߓپbWwn L5zo$PE5V0 Gx/ M "zNALT5Q@O\ # Z:n S_Wdꫯ?y'4|5!Q&mlf%`W6\6 Iސ&p)M+*Rj<_?$01 aCG<] `K%X[bN@Pt?$0Q6?K <#'NÕvI! kk4$_*V~I&j\']d*8y: n SoM{.vwϟ?oaL- W\ALOx P/FZk͍U/+ۤ: M "T (5mrjn%0}õ8h%]׈k| iK\=RMtc&4-k)O![Iz mWǵF@׆}<>"e4}g:9_ H]O L%{\\[HAn94 e1g bbN@Fg\h&I7U.Y5zUqүOĢX89x'Ϟ=CUpĒD@[O ~͞ f{iwU~$;y *RJ'‰$ ލ"}aQ9jWFmP~I^s"l iSK>ƟZ©KGH19gfĒD\#?'/,=::*Gtjt s??RK<%NeT3gaKX L$ 76dmzhp%^hנ%' x's^e0Ϣ<8{)B:aO_x~_$@_ zb&ܼR0vS[}[ZUĭ޾aNYg\{ @ `"h_5 \OM9Woz?@VW򘥇,UcLe}r{̎?.:v9!?qI[}ʔ&p{8 SJM\M&dt3 AXϋ#M jepai::cOXPVq䏁o<4? ϔ7_@ hqkJ(_/n,̰`hVɴo)Nvw ^j܋ҽ{o+w+kkłaA}s;(A:_7::*7}6O\0 "P^ kV ʢ *&"@n']L%t\ o}y[NS@,bw?iѣb]! aRPo~ @ u^gq8å>6E 2<˿B!w %] q=MQQY =?-K5Y#-Z߅z|Q|Yk֝ӡѯJ3XALOnV 6\C8uȁO^.uR?aɟ&)–^*HXf^|ijMw@Xh\^t) rO}Po?zT޿tjD5䋥WߌҲ|pK~kéO]ב0[W\_*z!@OmAbBp" @=ޘ]qs =Rz~N`*([jܙƼZV\h~D;k49E8i]K*ԟ38 s pѣb0sHO?Ay=k;>=_ք@:M \;>SϵN T#kFL$FT[*^2 ˞sԍ VG![Dqgš{?ABrA7pqwV?|~שnc]KӅ7ʿ(#>\1-nM!>ҳn5&~ /=F.cXʦÅhD]# 8{8,kryM N^=r=k#Vi8a%(84eos"s*M< F z0p#LD5Y1ϋh(۴#YZ DyDZV @Kxq@.?N.#~}\0_n&,Λr_.:3i^WY=>V: [A~nZ?Bh@h B=]1kfP#'Eh@~Ύzr Ev.ᾮrۅUݧvF3VDho˞Hnv wO>S=.^ Gc ,h/Mo&Ώ7@啇85~b7MO&w8y}|]:}O_7d'D˿ B|E0%L QQngT3ieIOC8z5j:; JPY45Cp%Ǻ ]q^v}v':k-O͊|hTb<vgϾ|FۉJ?-pSTyŜ>B$&ЊsOZ $@K{:_kG~[|<ۊsG)ޜ\hB ]^ cLdg4_ڿ,1䓒pTny|)4Ig4Sc؏;0- pb =?z#2ؒ2cZ̳aAĄ]45l8zw)f>,4w_7EK",7%4&D׌C?&Ϸ:Gy`)yj_aÍ5h^O4D=RQT`%-QMw:o8QzoUڎWp$X)ةG 0/0B?W)7$>koDYx'#nӤsʇzJ#jT(F$%M%W"/D")*&gU fd .T2h< d/K$I- Ļ̻-KPzV>8S'HB@>_]S W3u 9s}W̋ (Z8839SPÉ8S?.YL$RRkJ] x mL(M/?fOOuTYFf>_KСu+gUo@{khI,ޖ )T{WVTyҰ>SX䐞)&LAd9(y6bN'{PL Xtn0 `3{z}ki Y|@צNG?~LMc mYo_>(tE[i(O3fOC$sPu4?aj@*q3n֏uؘ/cSzZ&=~Q5!zwv + 0]XXH߾+GϨ_Ȩ3e;S07TgtyL$ܴP{X/D> `G=~R9sr%c@ b`y06H#zs'_NvY_V}:>SPs neuk$p gg#K@mzgk?8C-T~P~&NP!}if V^C#8SpOu[9 P}׬kNB&>r(p6- eb!*]}_*_3z<7VMY4V \d{'}1y0/G;8nN4 ,LKG)|LA}-<,s?y*6×TYxz9+>+7_' L?TD"VAAeѓښhQ~AL3=3zP[ߎ7c|ͯN5ܔЪ1= ;[R+ZWʧӰSd.= Áy1*OyԝܐO!%M}D9ǤcfzH}SH >4To@ ahpTs\iz,T}ɗ3قSp30rHW*owgkίy=&zb |ڈ.>vZy./EX홿yf14mkbSeB`OZQo̔o+/etF~@" 6 K^y,4+ zଶ/rRJSYʘuMJ`b BLտ~Iq! ])2fS+Rl|oi y:S0/ֆ=,3{q%zsߙoO28&ߊω3g jВ4 d]nԏ>L=D@7RbXs_(jmEae#{.@ݱpA=3 \\q=N9({MzK~)`^>ϵTDռ饿Bګ$ =7 ~*{" DsrD&˘ՙgҌX?y_k*UF%&X{/ ˏ?%qn l[45`ζ^@.;'Ь[@K?py\?L?α\@b Niy'% 4\LCn =e,_ ϷM?8]O5PLӟ?XQr @~vyezx0&=y(Od\&r'L ?PEZg<=>Ld0/;:`6ll4R]ڞP'.iGi%^{;./ |fB z_/=zM_YiKT )cYŜ,}wc}Ok=yxN3}g M9]:H@`n B&'=AI|ԟmN8^7}ZQ.=#{Ay| pǺh0# T]3Ə@5ԫ! /?%#3dzЛ3w)GoXg/"]wz S)2lJ>pHiq!h |&%l|q(5%|&Lb*_ \}Sodã@10XʪU>LM0V+jWWNиV~ ?7Lz}/x> @Gd:3vzÎTYeRijO:BZ*;35tvۓϠGN&aj :+!.6jyGcثb+`Rn U^1_|2S9~+tz3q$5{Q _es^62L@υ͙j[u[W}2g sMLA>g ^OD+>Sѣb]_3΁V F]!I1GicHUo+ڏ,!OϿ2tĪBʼn|OHA9'@h·^clfZϋɹ},jbOz6s Bȥ3M)P!Mr8Ȯ3u=Gdy,=Ԝ̑L>Ij^?'&nukǣn̠Qǝ(_P'ړ^ ?%|M}?4PFF>V *]Xn'r#=d&W~??s4Aɩ\NE IPe<O'g T=(]9+0~qV)&s[ihb<7@^ g 21Ȑ$9:ORϚT{AtilYYN4n=H!N]5ƹ,:Ri$ 5pDM~_@rY46#`-ȨI͂A^ݜ)sdO YP4mz~&b8eA҉/ "5 |@8yZ'>ӯFkf2TTeA`ff/4<1 դTD*ڑF"mK5C;؜8x|ѫF+&[,XKDsN47.qegԣF_)_^2(qPa& "YSM+Yk*)t ƞ,QoOSB=7v & 5\ C=SKp*Y}h|w+ '4*{z:SP|E$)3Ng *8SPA SG7}E&^IkZV{^G0#mn[=c_"R 4+B|ƨ4q,vBX愕 S_  9f @Skh04nAFVg=53cϒcāxW >z^IED4dFoIK.CgðJFeTo 1nХsǚ|=!5g ,f8NC´嚉@^r%r -D_/|8Š9&?_+L.^5nTN4x,=`UԴyIxA=1QDl)|e- lh;1PL >%?Lh *\7 =yI>S9O$@YJ8n䱦^a U?^Yj+eL Ѿ] p(-!YܲV07=u{n,!A(Vg~zSi#(/z-jԽ:@&"/:8LW~/N2MttKb֟?nuMtc7vhNceY~F>Jò[7oEqd_jq+,Aaڽy+UZi:"M٠{kUҸ 6A>zq;Sƌwrbh&Fg A$ 3d$1d,@'{GoQ/ Vg]ui krWEgX^vcZ_dwOB(1I( T5ЧuqtC.Oˍ]9 q9-.R3Cf.Gُk.=4u$GKDؤI5o=36u^F, H5lxSwY"XT8z lIx 'oUX)(oXt,HbpV6jף8xg LcM.in xG{ 'xe64I{;Yg B C ߒ x(ޙIX'1}Ǹ_4@/&MXTyo,HR0K5/03%sºQ3SY=,_wK߽ZNmVy۽"n6zy_{uY_@^0T(0@}MjJL*,Oˊ'TEHt +4ku)(=.~Qpʝj43443z/"XPz k#21L(]Řs䯶=!]Ir&I9^NU7{t+0f K%x5V%7?Z@3?_D~4d}X)(c|~/!'5sG!i,s҉IY`Z)Q![@3Og1ğkWq1LԸV~ ?Lc|6*Puə*q>pn> gv~9kܩ"^n@ X@4q`O 2`h(ǖXU)3$KNT~1dzE>{9e1MH/DL>S0M^ȃ'zB j.{GH{ {>-L ' *ơD{|TǺ&rEf)BRh]]6f{U{ѝgv՝ W0,CFY9@gk'Q!LweI7!J=q6&;7M @z~ۗe6Q_O-?d>SP+HNbҐ >m&Y)0@./ʮb:}#r.M8!^_MH-W W;/zuW/xH]`L @W*ol+.y"#,İ a$ u Q\ 0o7럁H`b }^U-_6U>?aKULAM<66HwSY_c_IMSPM u` Rg@!{G՗>!&eM?(GH_hD 3ЌAiьU%^]}ǁdm?S*%׀:m(@T#pN㗏2//&%rpǒ_0hߘMz/z~z15s;'LA-(oMhBCM`S#"1F&k'ƺXShv)=˳ve~~ܩ 4/ N ,i(zף_P5T #,M~Y$`RrIij?xr'{w$͌Vtq) "&~Q4G-e$0Óz&⨯8k@Ue/dM5;2UtTE2O]^k$3qnHYeI0'ǧH¸ 80*0ݗ0ig ̙p`Jzl2unVzyqI3qz}ݦ º0'osTaǷo8'LAH kN *_pɁF`4ٳ v G`CysXȺd" OsN54>e( P)lUx,DTa+6"8BcU)pl[~枍av˞LqXG<>2@f.;YaĠ-. u43 U}t˿sJ(t(,k&Ȍq> j Qy$^Qd,!sF 8 0;.~O ]iVHO.2IDAT2b2P#ux.`H` 6ZG>:}tN{n7+w'F%(^4kCeYFѭaojHp3O5Vct]kŁkg _ @sЃ5L8b0̒{؟^%\ MHrB/߃aʱ$5vu 1UIݾ<ZX)PzI oC opp S,D Do DMT|#B\ y@0a,@NȸPuY:XT9Ҷ!wA,C k"ປ2S6~G٭&IL?=ܗF`L(i X4&l,+fg ^{ Rޥ (NsKꄅrґ'n;SeY>gGyde X:0VU $l @2&a7rz}N=ׁؙ;Y%ϋYY/"!z3K[{镏tLPX5\@L 'K53N,.qV2OEBg"B.Ui:c ohď, n̵vAnwТL%-DG?{ؕ\b]{ź}Lg?Qq @Ew=lw ik8`7aU/7Ofį#.j?<mO!^YVh+ ilbQЪm޺ʈ_ Li7,M1||c_|umP=PTz}\Ry}!8XVgKiBLD@ &Hh+&T,f? ӀAN$eF쇼Lh&UrO,}dh(e=$\3. YK9.Z}tEVc{k`Rq_?g,?),w? &Xs$ =9 `FC/uoF޸ѣh @+=SRCVC b$kn ~U CO5S}>2@"cS @̵OXm^I`*LZ?Pt7O?8}boTzs&i|:VVSJߗ{/ 7> Պ^Z 3j+/p!z֏PychC֠ x{ut#ӷKzn5Bh9 9bMNUt%{Θ/v_?XVϱ]:_2I;u9`j`|X 4 iذi^?GXj]/H-j@vݺo zG}Ia$H>yڟݖ5'̝f~œ8`V=?_ w 5$OFɸhSm5Mf2^,& 2~$y~.chs.9eWs&f5_tYtg2虏pv6~_ @_|P,J^&{tgbxuGDĕ&7yg ƿ^=+ȅǺ>Gqmf\:y_gg]ժ-ݦ0?.ԎcWƧ!˞i 6/'Bf䟪A4a0*){xgj3TO ;>ya N&%.95loC^Uߙ&\|p* σhs^Hm:'@.6jE~QUmaaoXʔ^#, }.|Kߐq؉WTeK+=TLQb2lcҸc{<a{K-3t F3=-7E,PcK=h孹5Q[0"4^5I 0\@޳?r( ]Zi :TTܨ[?RֿVVyI aΛU\;]DZ9'P`,4D^ tH`5 ꐥ|aI.D\]>n7gSM l|xV0@kOSEy<0e3DaNJȣWVSe*4'hs  Zn\,Ǣnt4*7upE`ߩ$ǩ*ٰUbx2&MOwɛE/$l-\bRnfyyT@/8<s69Tq<1ξ}],܀Wn$pʈ4$[\T>.}쿊q4~%m&4 Œ`EЖT+5]y25p]P'&0De"*s4$.>/5rE ?ev c }"q~[}d1ѸMVY:S*nl qUwgz4 qMT5#@:&g GB+WŠ4Ng.`_Ài;R?7 AkkSE f!ŁjKDzA=4ˀO9̿v[yf%' !"=S#FzE.~ Y%j4~: PS7,P@Wwu@q熯F9Z.'xiGYQXh\dzgfXI `C* #+%uu841UЫxeiobO`V#;²w EՀYQ[Z brV) DM4> `Y?.\2ǵ%v `m^D'vM+}^vV2)'}- Rڳ(V=!al,ј//X;44^=4_f *S^w}X0b}4Z廪|9O`QO]M -Tڀ `[CTnh5@:SV%.`[CPڦyx譕s (V࿔ T=&e0x:< Tr{4>s+ QWI/x!U~W+H&gEBԻϫTϿӟ"=l֕v^ Eg ,@\R@U[gX]zYR))NGR?ϧ 48q(%Lՠ=v\KS:t"Od>'F "uᮮ] ۏ;2ȩm2SAzy|6Z@w_M ^3Ȃ~Iկ ,A5ɏ1| LUc4PC P ?<g],{l8cQCiF DhJerr[iaա`^ ??{Ю4iSAz1`,Bh2oSv5,ڊgRQQ]PeD[/' ˙X=i4&\4SK?]P{,˙G5O :šu--eoM0d쏀Йgh8tU@`NY"0rc2Tahv oh7:*`R:*x;w_wU_z4# /c.y'p/ tw]~4$Ucڍc5}Ex)hAGq&{:SׇUcg΂]sL!( >>S>'X10U]&+!SC$_3*4,…OU͙ǺLJynl0O.qLB}1wT!O9HTfuޟgWG9NCQäqv9 |.M޲rn\3!̩^1_!YLΩ{Io iwE?d+v5PojuǗ y~o\h2'9@ \v"I3CO 3M uBc;9w}@Ⱦ>uU)L&@"?9魙UD4G&>ՉII|Ig΁: WNI x^uMM%>]5_9u&`el 6@{p!?뜆I0SIP  1o4 @(Ɏ: Th"#;aZt*< ]Bc85t@$`/ |5qcUq0%h3U`T囆0|L\۪"uC=ۊ,X|ęh4kFea*?Tq݈CLQY4¨M+@WC=cvI&fԳC-LNYaB^NXnO)C4$k |$3U0J{(,rXU٢NTq" A K!QcƸBc ~W}M# & D_#9v\k"vQ_ .[D`9Q(͡4Y5y&;=5s+ ӗig[KFXL;"6 AzvUɾ0By0{dQ=kCI 40{ky;I~:} d|-9Sp_k:SPBv 2K)0ccQ6$ p}YD՘ ltÍmi|9| .guÌ@- sن M-#ϽU (f!HA-l+Ԙ Q g >zTj}9Ί::SP 3bCg c@l}K9SpK]5l8<PP[rYcO13Ԙ X< l&" tSt}pǸa}J $C8]/D3S_&_@Ҥg ,,3 ?/LA sV9SLA_`O @]Y|Ggܿ_=%{ynG4>`F%q 侥kfCr1ⱖAG?ѣk0U8>A%!~ $cH{[Q;zY_ZXfv dcO3Eiq?S\=K 8Բ`V]hFqzS@UϿəs4g9UgSaײVQy؟+cbx3z~4QJ=<Or7T7@5D?N:cYܘ%O@:ӑ]=pЩd,K˶6J."ߥ_h7q~oW+D3K :tVi0陂 j>SPj p J)FVTg F^1*>yaLA=s30n>n=_FX7 i\X°r0*{xٓx~Y <ӵʪab}=yBN${Nw yJL.IcS_(Yy.Qz&Mn4@pTk@q3[u 1Gh3i_z/5A \,~fcrN. dYh{LOٕ^o.n\ޟw0s2+"3C( Xw߄{KZ'4/3x4{rbMB}Bv3w5waKr۞)(U5?XuLXHԖF㣮s^u~ѳjr/_uMc|n?&@A(LnH6'MG^x..iHW!AQO*Ig ~EřSqʙ ,Ku]LKzRiYJM wi!O'o3=< 򌤃==d.LuC) n\˚X0M˩"Ov[sqrkAC!`hd\H8 8S@c:SGq3g B, ĺv]ua4`wk˅ޖs>kn~ao*Өz_kPZvIw^q!&tS A 5HrCM*~_pz )^*bUmO|~=A~ӓ3NG+zwQqݳ\ҧڅwZU'~ q0\-o2wNOckBi0SIln:M ~rs#89I4} p0 A;k=V W/7fKvӷrG8j7߆|*pz\K[f&0I/. Ӗ[j^<]$ w>7Y3畖cΧEhČ L a <4sZƩ6LaG陂B}l Nok0L0k箪 Sj݃R_uZxiش&roUҖe/sDk[  ࣬L#ۂ_qrX߮ v K}mz~k3YU@ct.?hQ38SPg jRT}_Ig8SpY`O&k{߮땻>S^=ӵ?xn| n|:1T}B5;U- }ǜ)A" \LM]s`wϳ{~tnyunt/ :#=SάMdΡra˺7Ƿk=paBe-&n%ANBk 89> r U.K X&}YN J$~l-) 4~?GG]v~u^*]M3{4$@ P).6=Sp]ߎ1I紤7qsp񰵹 o"IQs A1'viN M)C;v/}wZM]MI|il9+{ gn ȁ4Wެ>i8@ŸW'<6 ɟ'~_D&O8N.]ZŽq˧]} q|:Ѱݸ\;?i캧OoRiUv}? X25 PtoF$rLvi'?/8N]hנ5+᝖*&^64nv^U:vK&!^,]~$;(M]};-]>vz)0]UK`$PkcB:{Nzv|;t;||!s8iM++XK$0nO5l:JFuJݔ;rz-A|swX嶸l-8idC#uS!s'{IhX jT:tvi4N4^ӂ:1rUz(m nqg DU18j` - >FYi.&?rխz(%mVuz5 &6~%G7j p*o!@?wPtCs0o9|7PԵ,]ʻVxrqP:y*mm>pX)ǂJ&Ys&1ek_<{A}9퍟Ū7-%zmپOu7M]v;#/ꚭŭ gk:iwUI.n}(3rO=6+?\GkFF,]k~?.˿$wQ)); 5"; iG;6K7AH?uV;'yi |αRvww?~*I@ 7{43$$[ [Nޒ,o&|[ykSK` (4TDzG%̖x&wt$ik `k&98ڭ%0( v x)|pGjƁ@*d=n5& %Я V\QDPEi[N}@ Ղ1K"4vRA-Iq;un@5v wdfpE1ͺzc;U[nvIdk"IiGߕ7D@OfAv_gDݮ DKca߰ JIdఁ QX]gᲁ YPoU hv˱Ʋ 隶崁 嶏ԂÍւʷ ͮ3ֻĚ ٻvvMګ @_ku\o۫ c>_gDݮ DKca߰ JIdఁ QX]gᲁ YPoU hv˱Ʋ 隶崁 嶏ic14dPNG  IHDRxsRGBDeXIfMM*i @IDATx#mg~JVgq˱{`^vI˰sI܀IŨk`CkKC귪z5yuWե@i4P( ܑ^U>( Aκ;@nYU݃@쭭 % lRڗi: er._{ᨫjr.QGEJKk:JwXBKt"RW͗`i`4pYAٚX.@B%T4hiVe_' 0n_3K㹜ug-d^iCq\pDwx%͞Ô\V'Ч= @w/ k=%9ljP`oO&W450Ⱥw86Lϣ,x˃_B 4P3wS 49j]W4.0 zs}al":x3i5ЪAeOK7/ |(+iM3Cn(sahx ̛p>E&Z\9ŹX{`@L< f9su Ij[I-p;nq_mF@* yfq­@04Xu,nS:j`ǡ7'p{1@&w 3 nh?fchreixNkm`/cޠM]f6lôo Ϯ索g.|p˗/t pFaOyqnC3j}@d=s./ @i`S# rbl(n[. d$ok-_ihĬx[xކ@k'oȕ M[i ǵ@6OG4·rh>s8~gmg2d\usQ|s_ƿ)Guh߹p~,KeX#EWVnvwa(@XkEK@ m<e7gC`Gm 迓:!p:G ot\dSYڨ*i` Ekg6b&ѿ:xo2fC@SHT Z / Z[ު@'gPV_ Eh~N}2g@y5M- j oA9%'^eC^ݻw!Ropj릮sc14ӐAjV4pgX;?amӬ|2%YLj*\( \EO=8 0{bc_}%oYM~Odl*D p;jOAw@@ ЎF gM;]4pXw +sH8"iY>aYђ+ Ztyp=M~ɞמZs>j oCq|p f#`<}vNWDeYwW߿7`OupeLPw2RGxΦFR5h6S?9Oc9O{V7w!Lr/ S x˃?v"2Hy6Z[EoEeW U130J- nR?je.2 `S '@tp:'H9>Y[\k]j -⥁@5i#1 X&,Hhi[ rx<1Fk #9 # Ua=Dѕ@\N"p:sJ~2CwǙEŞ߷>!f8'ġի >'3,T4P\<tgq䱇Wق \é>Y4>!aG^[XKW@W7zG Wr&;h.Cҝ9ώ<#Ѿ#t8c_x&@#9 P`y2b'_< [GpjSXEUe,)+Ki @zS + ܔ.|vqMI0/LP=<6'> ;weĞgϞŞ?=$x9ݞO)?;fj ~u/ GG_dqK/@QDóWOG `O#yo'B{ 9'/'f}-_2QV;hi(sյ%>+xq~ŒWؐ4@Z8tHR=.}[^/W4_e'_,|)-!Oq02( g@rOD5hG:* zc#`џ*#-[Ze,, nKny"fy!0@mLxvu26 {)O7|o,'-2pgyF@4fᢽ(W-, Zj Y;Lͷ N:р ͧ , 蘀'^=nd 95!کQGEJ=; u<͏Cm H*s\H~O9#x$0XCp>uM.ϩL)N2QՀ;bn00/R4@fO6mLPy>#@rcOsGy(-#xcO'o謀K@v 1=5h uT4PXE qnO!G}#t\[^ΗW>^ dI Xm( ϑ6>ѷh9_W h|>!-i{\@ J+7/G]ַ cP~71r9n+MR%(i[ `.{ȫ3nG,;gwcȯk(# kreP_Xu V7aS䜖\6?:/i 3~M \|ZB HE}̠NS2Y\Ghdz4@gU45whGeB`75(k0P?-'oϞ9-,։gGkT50UEJ>; 9n97Y\ewq9C>y[G/;V(y x9EFÀuLDk[l068Cq}EW?:p:KeѠ.β|U>ߺ>^+3ĩ2 y}lGi\  nOwoӠN˼>#mq8f'i<Rᇥ2n~^㹥&ݫjJ{Vk魷o(6\?@2M3Se]~]=!+p`ڌ='''wps=' kW@W\O)Vi4pE Wrv9l50C=u_VK\}cjO-}eO2#OƾR)QU CeiCFZ@+{w7EQ4P Pq9kr ^,4w8p.9UeЦ@d@lホsȊ"t;ß(gXh ^2n.dCլL\k62-;%)ʵ)Ozݾf.7 n\nDzW_}u=x{jd2Zm=x%Y2atPef@ '\5?ubv=2/7zEsQ.~mpkSx 7.4|3h:uz sqP0cs2`Dr~&3o~{4#A0~FT Ć@dʏT epF6-ݬjji4p03h3yf ն|r*FZ8zi=m|Ǟws wrDo+[5᯹*4Pc d_?wz oi,LcI˷ūp8{=,cyO55;n:oSefJeX3+H2d@UUdi4p0Umsg7mhd'{n{@n6ZffA]F@{#W$^ P5XtQ4pTw/2Vmd6z3G wm^o[ ܀Cm`Oƒ{sOeW. 2@:2u:]ӧ~.Ӗ >)JYyVV9vPS|wߝ(|ٳ=};>)(f4pC l0čS[j&Q]G;PJKi\*2ĩ?9Kmwng>2 d)p$`0'0﵀!+RyCF@TϏ+ch+p i`Fg]7r>jm-mzl qXª~sG$01s>F}R"YtQIIw,.uVմu??e.u=y [b׽cO`scZ8֞8'xўs<PGNs)f\t7-R@;Sg #gty\mD9O,=;-JWMpNSw,x6Ӳ{6C0[>b vpGjKkyij)+6>~n_}F嶆\&rZ̗0\Wڱsv{8'`ޞ\} wDm)#ʸZ(, @p˔ّ35?S˛˄Ցs:Z#txjc |;` ZnOҎtd>)V.ǛG]ps`2-~Wѱ+ .7}oN'q8|;xy0yYwe:sr{t~ s"s'0o~3oOmTHt,K:qõ ܶ+5^JV±6ᾋmӈ@9y^$Gz'W~Jfk,_ /$`@ePA@f'\FJeW-++ V_eZ,2es2;aeexK-c~3_tS mɀ:8'}j˅쀼'`!`oyj 9e.#` p;zZJ@6yC]$ۦ;L4L0imGPT29^ tN@ߞpK q;\Fq[  7/?C 5A ,p?[lMma.?C9S@ND`?'@opNNtC<ݏVx-2nQUUi4phqyyLMa}yrގ2gI <6|˴Yy!0Taf.-Ǐ^hCǏ_` ]]x$qe=`p3zRK@p_@*|9W4M)o8)P |AomX. d7KlIid~e̙ *r9 p9}]k+!no׻N2!erk'y~ ǣ9=&0OtN#,09^2edmB [PrUQ( ? |i9ՐW`Wl dJ!걱:M/nfx;`OjO ݞr2@-2nAUEi4p?5 rYr3?v^4k;_K%M'@iApN~7vvv' }; }bb MY2vn1\-** _*(ׁg`t?5o#r3H%A"TxGGGc wP=Dfg(~Q֞ė:Tõ[ nZސmzH#-z>_pwѿa6*P^ ԵO1BeQU9'BGі `I˸vm Dhw@vzsҋ]( VBaS7?u5i; |x f4myng:_K]NpYCpw,F@nidel=yaWi>@ $r!#JW$:6٧ڊJh3(R/qOg#LGі%/~[N_,y\^ۆ<[r;uvzb4rT)8THW0: ZF@ AާʕVEv2E&방Ӊ\/5q9e2,%s呵ox_X=m]kuțHle8R~>tt='`fIyàLCNm=}[+`*4P_Fa3?gMf+C:<8Ck)L>SsoẎg]Fe3ZaIeByxUBh䃾իWC:Iɓp,Y@ 1@KKU1=m'lx.aSỜ4:& }Բ-5?/4Ik>rT0G]%{t>@L! f 9Lbġ 2.. +@i~h0q$i ѦE0ǙR x9-׉9l^m>г^F4(An aymg眀lɠ'OTv>' (aXSoy]RF:VZ?lI:Ʈ]*-gH`>zxn:gsvܔK3Z&*1o|Γ,}y?iN|ɲsr NbG'*'ƞm ^ <֞m |Hc`ذh+#Z-*kYؔvta6@7 aKttso3Fgo0IsBI:4˴OG4[guRj{h<%_w_o8p=v=g*oLHxU =c!6 le2J+:- #JsnJHNF:e^N]}񜶪ϴ Er}qezUPnJM|_׊1`0srX2ĞN U,)@ 9*_XӼ`:IwQ8 P3X݈m 2Tstgc 0:?:=!= o}](hbm^U]6lAnFņCut.Àzvڀ~ɓγgmy2 `g(aV6k2#̵s =|(p8oD}о<2qA9ۆ>xO-!-OttrVٳg מݷ ؒGμIl ߊ$y*62fQjh#e:M~GЁ*-y3:kA5H3?^PLiH䡛O&W_<>:eMtM0"f3hqMs=Nys|LK1GsZrz#@:AC1DY Pأ3f9|MG;MI!hR]i vُ[Mkw#?|geЉU!0*LƄat ?~\0} _ P l&@w:4 Z%ʱ,oG2G#D\_y09-r"SP.ѯ1˲dxU t'|Vhfϣga4ҹ2Ѐ:;3o};b/ ]~(&z9R43_ssS-3щ:CŏEA' Iu |aWb͞v>gY SoeJϹ6lȵᾼqy8F{6qg3HU=eLtV3n虻:nu 8=ty`?Xgv4Cn@g#mSCSՁg$Dg\l%]yuƣ&Mn tC\./Q~L3HG:[O=9)>їn4qqz5o^"=h2AdtxznJ@5u8=p.@QgU|,H;XSxoy9}-5.z4G}!?忝c.3tNz=0|;|S?]оS5ej (΀)@gCrM8ʥ 5CP_eqsחz繾t\~ad^&ɋH3\.ZQ;Ooz9eoK'9:xS }Q];?9N+4J;TZb ikxWOEā?p*g}Wb[ {?pP?i f@Tm:+`f``l)<ԯGui 8a N{r(r}}iˤ;鎛C6wSy_Nai˘/ mGo޼i Q%#lɃdțƵ7 -Wc 0<'iʓ>Lj/^Дӆ#fen=!ހXptt3Ϡܔlq7a ;Prϣ9ʘ!6}(n49-o2mAGbV >|WGJ?Q^^ #Gi FS@IDAT4hNeԣPX 0{PZgwfTz0ƀL)@N Hb S?%^Yg $nQxxnfP-x9 ӮyMiRǢӇtI9{!,^o4xN zQlH^Q$2 &9{~)w_ }T/!ѿ3'k^? =L[x%bxA3Re@s:uܖ:|]n6g̐p-EYimEmkӗgw4g^Ƒy2Z=N SG}P/żՍS-*~V\2T4p0@0LLi@iQ/Iiwxӻ0zy_)FӶLFLX6thn{;ܦ/_$֝6u[<[Lƽqj _YTF~o4N 3cp2or?J4#򘁰 ikX] n{.0Ři2bm?R{Nܺs6vf q3"2C;6}^in.;LJ–f7ߴMߥmu{62 \tfAN$>6|7@^[}<տehOnPaHßx3NNil2Y'r7CՆ'Jz1; L6 s?}mee}v_.囒Y6/SʴFMoY/-/Ey[^Nq}z#C\3e <?=1eϣNp9i z Jww{s[J0;Smˈ!ǟl/N? L¹P')w}Q<vwZ_Y/7.v;-[PLΗil9RCoG 9.lpy?~ Wte}^! hc;:TD1jjoqsG^x3 08T>F_G2,0%9ImǛQ Pa~q˘8UۖsZ9Lyysæ.<?@a0 ?߀r_{З> **P; 1ObD3$ KnzoQ <|tPQw 332&'4AUt5 Pz>9=37#S].k|`CY6`OA0)So6i$9rj2<[x,+_e2mx[@%uΫc/YByނ, G@M\( M}UDtx6LL/ѧF:l4(|,!<׋ z3h}= p:4^`_@ H_W7Ed0++0(Wߵ5ԎΓnYn(K_RN_ޡvʸn^[wI7)`>ϻ(iUZ P'@D6%13hyO%w w_F26dlbM|0:1j4xcjyǡ̿p_eڰ\^_52mE/J F = 8ep팀2>=Za {w1?F @lu|g[eMC. {x@31׶ ;_wMߵm~NonEr7T{k6-Snpoi\E`g ?,vt?yo)KUsڻEݢcvGcс> ?k,zr,$Ѩ]QfCβg#⫯F/F;o1>m\U-%e\_=9w,M<}u /֑` AUs?6 rSH_a?hεF2fץ޾$|HDnMG}?;:~^G''i;HO2r|6r(!k~RiM)Ώm~hS =08{Nxxwۢo rC_h:5[wa] y~˔&s((^i4@lp,חFoGo?l@>|HFE=p*55Z0/g/`?\# F2vd~ ji\m Xm;6.S*wںu2*˳~/6 \l1hkuboSt~xc_~ (#U_޽  }-+73Li08o<  Me<(Uc_ϔ0n0Lnvz>}^b f` L3ڻ2Xi230hL OL>/ [ H~We : 9G[' z]0z;>ӟ!?0t'` #@~G;wi7OWV7-zZ$뢝gYy+je"o <%-`-o{]uke}yШud0N1z8gGI/œ@  4ϱJA?P^eԿ4^3hQtgPԲm,ʔVn۪ڃ!k"~[MEHʨ`i*$? ˿PƏgxPg@ sPG;p6n+mSæc (C4 w".@?ߓg?lC;~δ?ă_xwâv=Gܾ-`ny]uj?FLk/^:k 9H>N)?~<^gx`z>vKBqQCb?X~$?3>P oOcDLJxæ}y9qUu־G5g_U\X[\G_'Ϟ:q(k/Ϯ2~c@߰ p(~ZonYG~3g۪_E em:=;ScOoS^2#/6)ukjcH!a|pB0B)Pʌi'q(A;rm[幬t]mW}˶Ǻ>;bw3?IJh uT4ЯXW{Y?ֈ~(kxŏ5~J?X2JgG>?M|Pn>+WRՎ MΔwG1>XXW w;~0r<0q}i7ʍN #f{ߐ̹D(?zot2q]oԃr g24Lgh2)6Fogwt_b!C(#LB*ZqxOf?u>o{)Q}/0>h% R<{;@}Sa *@dY}$}aF-CC?20JxkS1*8gF Ǻα fEiSBADQ_bCD*4̓.W؅3^N7+vW.hE3&^ 1@R_`;xPT'*RpZxFB=]y9f fxSa$w_t |"c36̓cO >Ёl4dKsF]9_{=fvdK:`g8,,+݈[Tv# (t׶gHz9t PHP P+|IPaL@8E0=g$AԏNBz8յP=:a3[j׎ CQ  Ԟ6eI5cpf kz4@ǨVϱǀ.>##~QvtC:#K^̰#83p֙_8֌'r@qЏF׼B]qP$NϨ߆͛gzawUN,CR[j'郢{zM 'j3Ǝpo餲] `u\ ^b7*z5࠱^/9̇5~Za_ GH{3zM0h?( 8c d13Š o[ {}?<ѩ[ZؖnJq&NJDF(m}{`[es4B ;\t4PF2Pd)kUd[ ֟uٽwzwo:sjFz:kTLjSS#@|6[<XpRc0S(,]c_G_~~ eYMv\3|\yN1YbuGf!~ah#CWl{5_M݄ce]s@UU%5@(1y^@3~(S9ΗJ8ʑi<7rc MCI5~j0 p 3, o Odh$Q|GiNʣ6kޙI8SKؔ ]8XD 9Mŗ+ @K(2"y4BTnu4/px{0k|>}Q^˔?  tWRI>6yg ~3ݘ!@|iƃ'q:lACψѿӘM _rc5KWz b ݜj&FJ3t,1}#=QC|.{'2^0 v9`K3G4? ~MҞ'YUkϭߐZaƮe#giH@Z?ƴ!ᵮCr҉A)'@\Nx^#f(@97 ѕ"'p;pHWɛP#2$2q.(ʨC׆[׎tú?oƙ:T(JӵA 6P;N1Mކ0t$*2ӵ(vIggv>L:gO=\EAvUA|K aܐSXc @oCܡs @Aʳ?^cN ?QFʻ/y<nݩΙ@/;Tl[q#r|l$.\/zxO4p, ޒ~vE7mH2}7?O:F<rt?8,LW98Z'u&2Gi_N jm۳j{t,>ܥjg0f꟮+̹q^G=N'JnF@pyvnLh7pLy@G` w{&33C}:a[ Rֆsщnp8&n?\?5@k|ӱ3]j>8xw ?Fl>vax՝ co#`[CYGyXJd>0o*PnAG:g?&wޠC@ז-QFg@;$c 9nϔ2B' IpNg}_sEx$;4^6(owsQ(`3f )O EFCQ$ =0 g?>?>t ZH7{ik_{I/0eYtVt,#{ff5mN7cv`@~<%䈷.D'^x+QAզ! 7Չ.A/u^k]ޛn]| GGh˯)zo4 So` ?Dk@;~[w:#}M#?W$[.xفe(f6qtg”e H^ԆJ; pWnVeܬ~+h :~v{./~{vf]~u|ԆJN'a<Nz"j[e:i{R$߉.EukqZ+#S70@ǻ yϟ})Q}1F|P@2 \ɗ WۂMG{߳Qi;5ȏpU,K@2 ߵxNs/~q_(~JKeΊNu.`:0;K~}C\6\/mi3OO>?FO=|]r C{M4G[{ڋfdx3Ȼ>̔ӫ́|;skgb46y%O6Chm@^S~~guwI眼M˰ EЖtwݾ.uJuJwy1m^)LzF*y d_ Q}4ޏZ׏w5{y(m%3.5k?)9@)FmڗΧE7SyH$,Im2^ g*Lu[u3DZ/;-#SQ (6w]E΄p>- f Uh Ҡ<|uP9Ԡ D=| 0f$yRkytZq9+2nv=}/i =1/dz?x5luhpn:| OGg!;3Sf D~坐d%~ $?[к+ZƂg\W o#jgh `㥿t>Aԗa [ﲬR׉ύ?<XDڷ#>[O`o OZ0P| lЧ7f)*69qֵ=G.)<LSwOgpCz7E9'0%  e_@ P]Ѧ-=cz: r5sn?<`8_hԦ *kg$p舀AxVD:~}QN'V~@eo)Y(ܙF2Ƿ? _gkK[2><٣hr%RX pw9:hbN:>*Xף˗_ x*@B@Xf Xa]i5R $ʈHux6=Y=^߇U6#RL.m }18# Ok!׬;(Kw.c8ѿG B: Ms y`::x3 ti@GmChxݝGnY? d5?z5:==_hOnbug 3-)GZv{ >ujt>} /#U;Y(k{BK77#Qz1@4g@+=}kcD sy\@c9\4;V9c{a;Q|[uZf`G Cβ~x;krM_厌m0.1>$g+6qDx |@kQe6S/ LwG'2: w[g俩 lv1 J]8hKP7Qf$=~aw?345~+^H'^lg|!$T򒏑hʉeLb_t4^Jh7';UTuA-Jk2(Oi3p5хxLnI.W'XaC=1]+"e'p1@czʆ?^cW?}s+|OzF/ x3tݓiqT{S^cӧ6~[ saH{@;ccV}kEq] @,ȵD# @?Fx À}]=ט>QEW4P@?1:jcM3\5?o*7Q5]]#qi7 x 8;jgxCw:I1a H7v~~S=Q⥂xO-]GAsB (|aVy7'Q8]2X~FP6ndG#Xq#3qEO&2d2/f2Ë{oY2魤]8p~i4F?8i`C Ν.࿬ЙCΏ &18Ui-:Pև2` S* pه311Wqԃ}]χiнuD$Lj߆FWvTήx$'=~mս-^(2a2St |l =psgC~v(`?vwcQ<[T+ZX h15cp,D3fvoFgAvIFlVطt? L5 tNcU7t,0a>u>X 8t/L@N6t6[*'tc4Nԁ(t#c?e|MŏS%T P~Jd?U}S[$&?Rx#E|"k-DS%/#,HX$ʨ[>yv:}摧\i40=>` i&]g}<>)tf܉}i?;S9!?H{'c` 0=KIyd`FXɑXNyOFHkLs$K!4H`?>x}mVD5pOjU.l<պFzo$PvF:jn6`\YpbdEG9a>('NXm #@r+0L1`izm?ca )SiHl0@| ]FQg {j#~܌ع:{)S7~[vX]jFH,C`jCC@i^0fbsh6P_gGicLƑ,}ͪ잞LRj}GH!qܰ#ݞ.(G1=HދIss_,ttn۔]n{39oU USoNUު-ú G ܃b|#ã)(tOdfy8@Љ$ZN^Ӽ^ZN3~ P¼ާa@Km8^K_zy=3^Q ?w(Ni^[9~khbߐ퇠b@_CE ==| ?߀' ?(A#_oM# {E!<| tooc8f{a4:0~NXa9af)+Md9>ق(=jH`3~[A@y͇?RW{>| úHSkdx.Te~?F@@W*CNuul]jc?} 4eס~4pPg3|PA_Ӿ <`]rm](ЈpOn`g/ۺ5 ubi72 euUpFe&QpGej  5 5Œۂfg[y ];!oaۗrC^5Iꌎk)̟/I9 !sC,o|`__vs <Ylo@ܷ^_S%3W:>þ/L˷|di+@ As-;7>#^O B]?I]ct33SҙǮSmۭ74H#7@o? hb3~tU*?\lj!a [Z]p7xp}'\7㟡<0ei¦Lee+%~OZs_4,p:kp|οhX"F;])~8@K4w<6jXjp81|>o1ړ@ueW=1+OǿnR!,O_ƝgC Xj1lgu>_O1PYCaby􆥛;.2Ny3~_/U xias+^y8r\zDYRAڰuh)e qs*l;&w܄ܤ o4xû fg5<9Os;Ż>I\㟑s6AڙeױKR`:CH x'j ؏O@ٌ{@]5 ȘG*Wo83Lu@#@rp%ch7? tQԔ)◰ig<BdJݐJ]h ٷ)>6-oT7=md v~o#>vZDβO3(O}f3>Wrgc]n,sv]_}VARG(ԸS^3γ:*`t@ > sȷ. gxOks1(bٺo1>Fサ%ut-Zuk5}NuOk97M+gT/(#i4A񙚮r·eU-0sa "L>m'6~aS8i?u)3eR?__7]^_3R=zwg?yfm_Oc5Ho3˱)kGκ}B^a9=l#m ~ZY|gr ?˧YkI\R>xsAu/+( ~=yGuyZ>5 _h(\_Zynxs~ l R@ XXFp*6@0z -gZK3Pz9gPJq(x[^Pu {#|e+m].t=Bmo߰T7hi #(ل6-e H9g.$=A aP>y_)RQG9=,iCw ap{ϱH]zw5*/[~x?ؙ##+QlCYjTsBY~2=q>[\Sy?pt5n⿿ n l l*U[)O @=m?EpFa9yTNt6JxP5>s = W|sӎρ}L% ոԴS6l^Q[ado/ܿI@IDATۮd6[.L(Wj-<)c }A.i Lʡ4m৲ ;$@N_~OGxQfRd? ~/?E^Os_/~5:6 c@|]++grʥ;4=6؏ hywm8n:l% l- GUg()7O*MfJ*F79 UR??(;/ @W(e5\6U6ϊx閍W6q>;C2Ȋ{WFW ,ԙܻŖJ .my k|`9o;*k^Mgfr.|xʚJHSiTPWLU|UR5>.C9/@.gn 3Q`s_6] u|.K'oh[O'&#h 73ڦtO 2Ls/"pI}>{N: c8x +iU.X~u'Y&?P{MLbz5fO4dO53y{\%&u,c)or_>~cJi??ӗc_c s[fnCpR6U**[a ?T6hc}t,G?1b9*{P V:J#Pp&o<@c|_1ݐ]Oێ'+X)3M|[o8uo/n}'VOoޔ@fzWMwLToFi^} IsT 7zR__7=]Ǔy?m˶,Go}?镏VaQ6nRz,xWvN,G0b* l}s?FĻ10HQ;GYI|n9ghw~} /Ilyaر).nި:ޱkv^þ ׻ܯjzL~v1 ۠-ye} 4H 3MsVN&nnfܑ qnpW,Ǜ ȹ|"lm|s!=QNZPn[u.uۼ~dNnH0֧Jo^pX,OyOkjwL+mx-}f߯/ j/ AZ#of >35rFZq֟~#|_:qq -em4~)7>5V5,߸iJ8ʙyS m_[Ư nn]fs+g&Ώxg- >9q P5ew(n_{m*sW:h[vM6W\.%-pҾj+/6ct3i!>n]VhWy;cɸV+ WfKŨlߺoez~e{A+{lux[WJZ %10K}?:+}W|U~qQg5iʡ6I%7(lJWt}GL^kXМȆR~K+y**Ȝx}u]YqZ׸@,5boh~8ρC)]MQ_ϡv7|9<.#3qAå~w/<?85%Sʭg‹?R =nc`gR:9B14GƄiKp~Z aGOpυ2r^lcz }˸aiLr?~WOީ Ϥveg,S~@ /i=O)E]`,y0D:@0XcD ŗ4\ml='rp\]j!oY+tL;ӗv]H> s5r;MSַ$pB Xk+zg1C7y*UA f,q.ߣ'즨d'`V3 cQ'M:Ҏ r(jy" @Ts|R4Mz[Jcl1q11T Hʒ/)>Jg 52c0n,;װ?ݮrTWthRY _4~BH/-9nR$p kuHYPfgyxW)vƺnj겵Gz>{ 87s[p/=JN%S^#2[gy/Z_Dj_5ݰEoC|a|Pfm}Od?^p}W $juẌ28y@sq2 ?^`i4uҲ"YffϏK`3~\aT_Y3xVeXwV.տ$E7џX`G|5mٵ|{/<\QxFCQy6=+(bWx:G{To}"}Bp ꤼucc[L;@?)0?q㋜[NΌ/t#{P.^k>)^Y'$~Ӽ7F0|zge)l#Ͳ42܃0gci}=rыj<~Wͻ߭I`3OnWuџJ)l;>5|YUDB6v 2Grk3+ P w%z~3 |}k ?Z81o| ?W8κ9ܴnY$'R7 lGe*gQCeY.ÇojΨ,7K/RW;hW_ D(~KZPt@@:~V$k?A3)itȸ>n~jJy\ ]Ty>"yok[ _Vfl_2 WrP=}^3Hw!$J`3~Kw*κy͟ *Jy_`WyOvJ;kKͅR i#J,0(^,ǾaYO{#Pw)LfGyR?!u{ep%\g>#@_~xdzQ|]%={Ѿس?>%g+5'K|<둳O1(3{,vMۑ}swX8#u?u{?ݭ ls~?@i }H'1`M` Cg^0zN^p {6c<3 ğp2gÔJM?Vu6IH`3JT^3X7H")gp>L@svZ}ra|@ ꚞ/#ROs@+@@5L aeCq=ϼN~z g_}O>,\} t~e޾Р}?#Ǡ@ȱWf~f σx҆ms7mm lm_?+X} vFW^_3 g|>v_u?_ܝ Q ֠1V 2B@ 0ʓ5(W(eW0k#9YYQ?|xr`g>>x!g.4yկ7S[ݷ~NMVקjw޺Sno_Np99ԥ (Ks 9?OA7C/_ t7}@*ȿD_?fٸG;3{]TRpG P̘S~c {͕L2h MGgȮڎeggn˒3} 3 xCqZxm+ r%؏* a\ p@W~JzNUzpi񣰳Ϙ:/KKU'gz˲ v?W|3-Όy-!t~o!_TPs-Ht5 6y5I^Sm}fg[S7j!y GVlx yG>Fadܱ:Rik<J\Mtno=-~XpX.tjLkR`UƄ 2| ezP# Ύpꦏ;}@T.&>YG^޹;_ )5qZ6W u2ˬާa@amAãpv#܏1{2N!>{({ai<$乑0GGw[r_oTZyeVU&wsH* fO֑.0QL~6$S=?O(P+7O@leCMc&~8Ɯ;7/w!b}8[s!yĔ{ė ~o^Fy sVFc } \x?}ywsT=@!e?acA_xQ7B~ ˽~$+2 &cL6I.H`3U>Taw|E-{3fouc1&{o_0 0\]r](gLzax%bgx}=}x?x6QV"~qײl=?} *\p į ;Uy߃ܓ}u`7qgߪ%*=_UYxcBĿ3yy]0= Q>ӞNp(޼\cT>9to=s>R? Y Q3o'!LwfڰUy]p.xP6#(S"y7Ûiwɭ|W2u{tD쟴Ko~Anx7ڹ9ŏpPc(%BQCҎ׽c8.A??cSr?]x@"F|G|>$U)ۛ]4n]Tu6Mo6ΓZ[* H,; Q#0 Rg<θՄԺnX0 :?y>J+fP[O"^3l }[@1٩-4Y o_#`Οj=.Kʲ O^[F@O/LK~pw 0Җ,H?>0@x=H6R?F-8 >> XdLD=EiJʵl6z9 (7M~UKmU% k 8Q99Q3;%]R%oŮ NYoC͖ˡ9 {r( (]Bk#mgTQnF[<\ }n~*x˜(#K&~o#>v?2ZsL 3_@t?gxr5FOo0S;)ƞ}byoUB 3ϳ{:$k8jȺfBWz?RsUvҭ[uۻno6` OC+߯$? W<˫pUYS[jt *[ի@|>v>lϯ7 PJ\AD% *%62VZ5TNwgCSsޜ;|G&t1ǐr@_'{9B~!hÏ @ x3ǣw,c<ލ<'/{~Q+~JOJ/[Ot]no ~n*Z݆#,.6ԁ *UJ5T*cf#A>3;1$@3{w\ [~eH3?cQjjxA: Ku̜? 6m[f? 6̟}vb0 fJ53wqu,{ޮxfX߃~QgHRq;T}@琇6 9 l$!Wa7]3+Cѩg0-u.?JX{G w —:Ą,7nҏmKj зkڎtzAATrJ?f>gG5z-X^ƔU1[rȡAA5Uv2u^={jdu }]InK`3nR n+K[HCH;+R} s>ui֖~SkzeO?ܞ/PP]\j\vSV`#ʽa`?¸eyvW)^IvI3 }`_8\ .} I>3K.#)_Gvԉd`y =v( ֛l@pq!\Oޱqn?&1v3ڭ(o 8Pp`BW_t}\ =Hz*ۂƁ\> :_. ЯCޒ#DٵM9'@̀ײYfT,5zo}r| 5<|m\hyQ6ԈOl9I<gf\ 10O)\eЧ7}= :b?s"G0嶪o]CB_-+7[x]fʜxNw*(.U2&??l] V_T|U*԰_#[~_ | Tj$ف}4QR[ℳG>6LlxPX;^xï_*OὦmR?Hr_hdw54Fǩ\vܣ'Y;P{MY CA[*mzotmK`3n nH{Q(PmϝC\_&_sѬ/pgn('Z. 8*~@Q>>?߶.eOSO|q8h ĕb1.4`fXk%s4>Z;F ru&o<^~wg@5z0t펶31\! I/}K\ GæR@{HwS:xi <j$ 3mz`sk:ցMwl\[$W׽+]Lʃ^O0BO!7:xgOP@Y;>?\__I{ξ//>`M?AΙ'nzJ.iDT*`-4eJK],%yz&UV|^ lyB8}zeu# ÎmԿHynPӚ?; 5P}%7 4]AtmZ霷7  l]wQC g@~*~'S)@2g{Z_, tH9i]Cs7cE[oyӏiqxLvSrә=Ѯm2]ʷ<5f_#}OPl͋P7L31-Jtɪqe49F"UuT K>?ƖAW,W~g1nn]fܥqW 7(=/U;` Y@Yg_%A@*[Ae|=~Ee^*tD ZvЩw#O|UC0<7t4`;F/6cts?YV_MPJOc2BTf,Uv [W˂2} oL(G +R/iflF[` %'MQŲ_eeJ:祣T_yPxReH?$_E9+p>.xO1TљB5~ns~؎^ 6,K W8ř~zWvL:*r74eGx)5iusxefOR̙pfd04go{(srW!PS/1f?[tG \P//t_9f=p [c2KVawnMݤ,6gz7wz` ~2)r~ c>wvBO5TRO'\/[G hHXE2WMUҪxYP-3оK7>+eHgA#eF-ʯua8[d?L?/qtq)q+G^_Ǣ m=' gו)>'\q9MG٭p›nRpIۚ wc<|s r> 臒v@<'7{[xD)k;JUs *]Z)p8췰|1ߡ#n;?:!y|*Qg7T WW BsR9--[]};<#fe6I%}hbV n`Mz5ag3o'zSߕG@8n~w_:,{L`I{Y;CL6d,6/Җ1>ܷn,t`@ м-fOFe|Ghx 1.Sf$Ɨk>/u'y*"YX̡Rt/o nnUp|㷩4lQJ7Isסp;tTRw&i5 ?㙵 U dMyp_(mBGZ6uSO\ POvpPӌ氉#>"AB]j5ÖE]voGm{k3S9R~Z9/kz贈sT~^@xӑgxs%PY/\6: rۣ(Ew*4g7 i ;;7}Ag3%L܎a/ n}e U_o{tL9ZWȍzʮƈ} Ӎi2ÿ_V>?ä}qS_>5>"Pntk5~^ Lfϵ:xL.,/. lHԙ| Z U!4^WL& Q/Y'QeV)uJw_RsЀ?a@ \:§Gp@P_U#  (&I6a}BXmZp]IǞG. 5uQ#@jy?蔷+ =&]>Z:s|6s6.\}%v핒VeF E2J3@Ey܆bCG<0z=u:^ߙ3lBX}9^&D!x<0;]9o=x:=X*0;|-'θ7GA;J\ 1*яڎ3n-3HL*+ytE-g=ꗗuyms|!C5dc\cqf4 ~.*[tmwYg{2p,? __{I;&U v׶JpV֫m sTuiB ++cp•?J~kԻQc |Lq9a}څf7+'y BiOzM+Lp/cLdbQ}zp]E~} =*=!= 5 77^m,JSpye hzȏKy/]8\'qegG¶3kϫ(9%X܃JT#1|ޒ8C<68DV o>ϺB1 >3mV3C^^ G#:ddJs|;@C@Zi3k1ӹ?gng0 3,z$x i=ƳKzKqJnoP] @xI߾}ݻP * [ G}TS#* (lV$ng0wH+z3eOvqV,?54ՙ{䗻2\br ^g{> +7YV:o꯼~UW㼍qmmH6of}rUf\!}*pO83cƣԗ]@Uo_Fr#*8??R&-Ih|`pzKE'7R^ Rb;͂m}H]?[1G{{-B S&<)}8?r?[\F@3,q =gRDXoJgg[t7)ryo \&"E-PĪE-2kmۦ z 5z#UoɬxWl_y =N4ЖFn~I# 0H˹%{|htW 21w7 HcX 1"OR}<}Jp> )cgi[`N_!>_쉐u?r@^OW{i1TY#1 L{ d(yٯKnsE QÖRV~Q}ڗ2S+W "ePoFez>Ѐ#@Y6>O y-w>ƴcqX.:rqi;wvkv6lpL7<  wK_/gygo.x"|bz|q8: lSfx7-(#}&{|y _ 6m/)t{ 0>xJۗvsnL]_O}P ~4;V ۲1`|*bmit\g_a?n`u 0v*Vc_td"_ )(?!H1WYoz|&BWrmO켖z?y4;AW܀Gޗ/2/~ l _,9k C0ҎV}(eMQMK::.K/Y a]_}˺*/+ gy6jL79d@ټ]'rݽa"'^] yziz[/ulNL0}sN-8ou+5?TӤȞ_c&Y;fBٵwyӆblTZsZ޲s"q kX9Au_ 솻`;  ڿ:!@ٿ\ow׍{$3cx-LIZZ@5'k :>Ҝ@Z[?̀,|ۛUwujtFpF$[ycgc/~~=}fw/tF &wf 2| ez{QO0 <'1τ|XJ:ْ{ӝ|gK~[c1kHoRd]igts04|!Jc/JӰ6ն7z$&KILꉀ/9xK@B@]gXgM l|g_/UbA^ρ? }jȿyek[ZXg]3_:o, ѽ/ƽ'3>*;s2nƷM7%)IWcKRN 8'@ݛ05#'}+ :=Fu:QcH˵.U˵R7i^_@Z=3_'͏cQ kox6w%?MeaxRsW蟳? 8WiO2R[ kCe5 ,Wי?]׽=OX_qe^CUYCSƙ?_ s(qUۼ^ k! C|4"weٯtkkޚ?,8,-# ܌/#u&SG (T4|ev-7OgHP/p QxLծ8{#7bK `{_3qDC?;IP۔u{t8/k,V^;h|WOa- HxF+7UN嫀5/O 5gɾo~]?ǀˆi.Jp*|@q~Y__>h g$ޏgtylVeU4'G  Qa%pN}n٤is2Z?K),o)>p֯ђC> Ugzpj "g,wl()=:U#%`|/3}U Kg^W>҆%C+9#}뇀<4T Qߓ Yp4ak5]Ҍ뚶%%~A^+R'-֟鸶Psԫ05kH8f,{L*;.yr~7 |6EwU7fgo/~(+6Op6^Z_%;D[Ѱ_Xb[_C%U~1H'`hsrwӥAnڷNp$ Ʃ\@cLQYR-:=/|%Ѝ1?QcRd=fcaXT?Rr/t]xO ~PL%̀({6TAh uQ(GtdW>Vnlۆgo&.avj3;}T܌ c ?ig܌I!yFgda;iϰi#nȩcN~7!g\gFRggz~i5OtOcq#2THgNaef\, /4gs[PV UDUT 1,/HUiz >h@a? ܾU/*-2cYn -~a㖻wo${E}_}?G~F ߍ[/.*c 7υk\tgx #s({܏5ԕO?C|L0,,c4, ~du 't]]e6m]ZG=q=8;Ve!R2, z.,o𾹐͢"c4[YM#}f͖sD1}1p6+[8%S^^p#/|(m!D>p;d|[~ѰA  R_ N@yt۴Ɇ{α0hYK8s(SҲj{og|+mx#0S~5mԸv!7'og. OU@>"yMקflcV` m l0Q~#UZ}@l+iR vf!@eB_t#*g~_ | *x쎍t;׷ =k9qQ>'2z7d{8LXH~m̼Yf(]6:߰+y@t@c+҂V+-xO>}| W5p?sXJIN 1M>R|叱^c H}?5`uԥJ?f!-]_~ߣ/_ݚR-&gcsMfga )e0pokx<FV °X?-)[`I`3~L~]ݞwQYG*HB mc(Ӵ7S h}M -`W~(xJJdUμ4_ՄOG`5{'ۇZqsh[J|qK@W:,Y>z]Í7-yRyy^$A{!,qvoV,;V*rʺ{I=0g`d1u}oᫌk]V>t7)rxo \&wUzN>eA4*W' O W&svWgx*Tl(ĘG' =j+8#ep3yY2S+Ri#iD %}la#X͛sD_Rv|:J~ Џ}H9)0Od lYUHX%+uSa{y]UTy]x`?ξ4_js_J|7j Ym9}\経y)+_MQ1(oߐC1ӶgOީvfΌ4ݴ:/O7<8:{]! ^f؀g (i#D /w\+ +Q5 c&f\D(XH<J@r Dw_wo].})k@?a}8ග#` 5Z`Cy_F@Ao1PIlG%?*Kֿ?MU PC&3 |R`}ƭӈ`<%tx!g`/0`,Ǿcx@wVz|O[ns>8΀ +zoh:tif#׻04J+DTFحOz+?]lzȓyV_C#w  I?󸈼j:ՉYs|%ƀoεOx5u]7g+XpX.[%% dw޿f,ÿ?>}'1<&B׫D`TtU*Q,PK@r5e}v< o 跏{˻'@AP-ْ^߆]A.g>+e;L dߖ/5|[ uYkZ\筸9FWq]?z^SrP&yqC Mh  Q`{oðI$ 9?cJ_o0>,#O5a_ O8|kP'+^PΉ~8){`x,+u=O{  ֵЌC:4He쟮aJ?o[z]܎t39R3.++=YW-sťl /*jȗ~{/^|6Ujh {״z9 l.}:N} Oߡ%ZS1࿄M|k%* "٤'0v.?Ow1yO,.H}W6寛_ xɘJGe!Æ7O{C||his}oޅz 3=g,:/CJ;ix 4/ރh6*@o98>ҷuPY?Docs6&ϫmLwp}(P퓖YPȪO ~DSY:u4j47zx?jO84ƩkAgψ!>^ kpV.(C:8e i-<{G ξ3tӳ PW[* '#83{_Y'uVM𓇀U_+\V[2;nj {hONK;__G<䷀kg:?ozAdLfsrn7\jp:X?c OivOFQs5T#{znz|[{?6翆6OO n g߃;@,>Nw\q ٿ3#F0/`ax j" _4U~IoW>iuV&oa"(NkߒwCqa0O8Ɵ|,3rMk]T$~O]:x_|^OlW-MWf\EZ[كE+~ κ= M1KK9eO@<*AyU2 YU^d/,`!pS'tm:րr L/FaBeԼ9nуZo[Cat.uq =$51+>p@#>k>)_lG$?"[{u{UDPζ~WmR _E]>y0o@ҍ]Qa.<YB?=n۲ALUg!jOn\L͛:.Uv^ym1%qw,+e7]hh@~=s=51pY#A}+7w}^ ȭc9ּۦ_;5}*QV :~)'U8 x g)q&^6PY Ќ:5(&߂mx|ڷx*'l~ 0x*\~--Ӽ9~,ܲ}} _~ֵu̜Z޴ XZCw\ѭ''Fkʄs㩆Ja}kX|cݛp㻉kp_ƍTꙉIiKExC% 쟲*Iw컋 U%J_\%F`_㖛<}gR] ڋx@k1Gi}9E/7,]hRg\M3.zI04 u5(4B^dRcҜTd?z"}ORԽ 79Kk7w: ld{8g3[.;+¾]}Dc}j Rp@Z F8(AgM8;Ǜam.>~.ha}lWnM-tNoޜ4Z_u-L:hr3EWP @03vm^- W>E |D+CEW6*Ǎ^6ez7_qg-~Z3# W~1o<߾}A]xN# n_nUyY:'< f({#ԝٶa֡rSoAwDKSܾ` /oʖiz]i9~ZO[fnoͪ};Tf7|.=J- k_ M' r^M}xφg~]Zfk}pY>ʝv{f;_r>σ áAySԕouF$?y@AD/JR^ LY);Y|c8+3C'ixd|& cmKrs9ݰ| #+b,v--ChVFc\St ξ  9SR=J;>#,䄂LD :Gn"9Ie\?S gD~#kr\a<+ѵc>,<Y'K.p#^ U@}( v>igQvNOps Ep䛜ʑoȮO}]9QV4p2JMhCk}VPM[]()^em W9-SJ`]&SQS?iCz$Y|eu\Ӝ~vԓ:v-?r `*6 ϵ`_o[׿^}P w|n q{l["Fi<"u7 0(xqnBeW#`([@}vWP-^urQG-=Yc=AF5iyZ7c+c;)[x(r::^aZ vL*[?cȲ[^Ӯe*0rp7\e;F`u:#֍ X_(wŹx jw aQPm>b<<Ϫ(#A$o|X(B^(O>SJ"**1n}s? IK5^e1xۊWr*׼5)VjWONx-0-w_h< ||a̍yLg? /,.o#JCso`*]RٺACBojyX!5FJM; )A{PnjkŬUi[6b-5MZ?=#>3֡Ry8x8&)|먅3;N[Î;9C5q@CNqb =FG}2aޯReY^\^/k `;pBU%8}B  "/o5jN! +[mJ;.Dp(hs}"_Lh3pHi Bնj4x?G̱iո`8,N A q'À6Bs0{J덁ߧr߷gn8\دg9Ƕ9+Ed өLh00?ꊡ aX t-֣޿_\^ y ]J-Sy(\|'d~>c#6"zR^x5ޗU1a > &`U\̪p'O!ne+]WrQ?WX~GJp]S6J#'OǘRGpL)U`3~kYiCW^L@GZ<a\h :F0hXY*CRRl(NHY9I1jy +V *w:와PKv6+5 Dh;ox!]z 0Bq[ }R@ޗOڜ0}?}%w'h\yvGv\ ̩[1 u\W~ Y1p`>AP :#2Hڠo{Bʇa,@sFPvy`& 9RB q?j|V8YS9@vDm-UvXeWK||5ʘ2|]ɤq.\9'o\'{񑫻y.4Dod^FnhVyB5>Y4}MU9 7u7w%fknx g|}K=ă{j4i}c)O%ҚgLMU>$=TLNJ6QbxKSގ"w^!NbLKeͿsDM!4eQdV}xNZn6-yrXskH +S9#WU=6]8]8f@qp %/wpowBcQ R*B>J䝔ρM╥^ոQ'Po]o9>JIZ4qp?=V!y)zɠhяkS=imٷK;WOm6Ckƨ#g %sd ק_<ҪZg0[?1V '=>BU$,)qxJ>ֶ?}{oKC\_٥۷]5k; 7|WJWrX %G xP?JVA|@Ҥ64<}.U@+ GiӖ(rVܢ:\u}M@ |^ ;K{՗i1]1Pe{<=.9}ZO|JW>gM=)P4B= 0U#Q.p_q[ QCF| G?xIZhГpCHhop?ǡnP;7R)(=QQ9mOuJJ{Jֵi/h9QVES(P𓺦.W_cg#@[Ǧ})ICpTEjٔ鲬Ͽ)o8mxř̷jlrKΑ)(cdH]{ޕ5"K6>(}@O[ëfSv!6F.d _07˩6ϐR !^5(Tkuz_Q+(qE[`#<+ɑt#uYQJftGH i7 BSgy),\M),MOޞ" ^Sm# >"sSu!GQcEy;2Bpz`\9# i1ae?ߩԗΝv {Q8V(=h='eGIt&k7`z9J`lKsk [=كw_, M6rʏ[y@B@MKw␯5̬-:WKyTPږ>P12% / *o.NI=)ӹW5\eߔS_k+c3$@g_ agb2T!SBS(?NOng(uQ:%^a)h]`0P@q1m >ƩF:eI_x}y\^ڿpdF8T;^yW^˦ ;DCg`݅ HdR/,YQb(:O>_por&/N[)NJ0 p,R+qMDA%(.EqbU8yc 2<ީnX`,©Rlp-p) <ڼ_a>h >[Q2nJ*ӈ}LJ'0{ gka2 WΥWɷk?8h;|)N@/ʑ;X\C'@)〕>;?iq*C?a`@@W;2Z>IE綑{b,5~^\}"f+ R~#S52MP㭴@m6AKoq}jI)V9.m9),Pu4Oʿ N㪺Vu>sMeM{։'?ξ?Id8_iʚf~Mma}oyrM?%M9_y<[9ҵ!mvL/ojqh^} M&f{'v `R0plP|/U[{Pa+<#~p@mH8m;o>x|˂ʟ8rNA}kGJ<*GmfPGu)u w_,v- R8)K{ ojwжkԭrWvsx?\\rJD@IDATokm`fWK&_+ԷD=/C>{%NZx79x}} vR(/Js@q =׭k ֓W< #/]|< KQ"!K85*3I)I]Njw(Pƻ??kP?(@U<_x?^]a0S0Xs?SȯL/@MMnstIGQ?sW8iV?kdN.a}K]{*!@hɥJxJ,5iSh85x9Q4uy@mpxx&iBH( \3iU6"q sNI  VJEBxc@c cVi/MƁo?(gֹ pw5Cr Iw#,["^Na3F.mELą\{AUG{~ok}7-:ZY%\_275wlЊms$Ꝃv҉3Gmƌd~Pp #Cd2a.42;an`(2V sϟUoVk ^kg {_FZɢ;.!(dxj6vld@?(lh³Ye&s:z"cu /M)/c2QCxvU~‾\2HKQD |_yzĚ }l<+,#Iax4~ۗ> W^y}Wv{\+C_Qpjy_cpVKR,|\ڧvOgb 4:u1PZ-xaj_miGc<1(__fW7xutw Bm4Ec7+a/PuTBa55#Qxxal>툒 ?*^uB1gJmW [me_q  m\ .ЖK'.uj6Oɴט OM#ܧˌG`&#T*򧅢/|r(1&CGViNC5_@<'e2' Įs90P@~REuiP;y QׅH!ѝڋvƕ?UFq M'_(2\KX 1~?ݯrg<*mO("}y][T 34[x#[Ν Ya)b♟B~2C&mi+gw2YhT~#0 {GR:@4:Qp({ (l3GSWҒ lo^ s `,p,e?Bn%.V5^<(Bs;g2?"]IҧOrVwV1}넧ms ݛ\ۏE'(+oQͧy3y59m\!j93s%js ^s';z|_L[=qɥ-ɿ@a ~Px QI<%>e5dL+EǞý#]}av-y=?H< KL)/.}.+_hU.,!'Ncy[(4WB?+"V?'2 vX1#{ÎJ!imz[7#FM۩My+/yvk@dᇒSķ;Dq7USyJi >#Yչ+ٕNvK3s6%yU$#>k2gI//?[h0w>8WJ#O9# yՑ?.ahVsZ!p xunVy(RFPR{A{Ǫaڦ4@Jʢ`-5J#9M(i;?ӀIc ת}5(4m:;l,(kVLUG̅̋&zkB?cbs:>g{v G=Jp&pț)`HXAqzg 3m=75o4y֩泷Jx]z0_nq0v{AN,G`=i (\?^,1jLLV_Y\-s=Cc)D+Ҧd:V6T9R c$ #`42gW`P^&60׊-x)eJ4fzE|\dq]eP;+iaSs 9xR'bP,Ǒ09n*kYW^}Wlyg@a"mkwC HfN{LY7Ⴡ* ޿[8x ;!ǝy<4ϫacPp8eDghd:Qr2~O^\/.d˖؛*]BS7p"CGy[_J/.b/P`g\T~]LOAcVDVϞr IeL/z2[% !L{~Y/ / WJ4''ͤ<G%i8r?4PV\0ks3Li6R.w29 DE<[qy7s v?Au#1Gƫ%m'"]}r3N^+C*JY|7u"ceP0|ǧJg+4Gd(UR4Zuǻ7P|G}zGdi0nxb@yvOpJGVqBf 2'l8ȓ|s/72x7eW #F5;C5|߾-O>pͮ֍q'Oxt: U{\uyG`{D?ȹ?q$B-p:?.ux&sWε¹꿑JP+C)99PtjBXi%O "]^Bޯ2V; A0IbwүPW@xT.8yʲ:(aTaόk䷓\dC<@fpV΅맵˻)7Ɔv`u}/zGIc15gUo-FNh9"%:Z)kP9xZ@@cmĈrk!`׼G{}O-Oh r& בv&{!e^Aw;x(Y;7ק>D% ]*E\ BkZb+D\Qd~|'o88u!+$ `O! *Ga. 0U"F\vP<4{Iq?]s]m N0xŮ0ښ+9v!>KӼVva@u1Lc8 g>8]MZjek :_OԆS?x*妲_d` LRU| @CTc#g31 .EoTJ\kt)3)K\GqMZ[)?=|1۪L*xL-N Epas⾿9;??Lf_R])%J cNvRJSvd0$eeI9}uU70W\yqX/|yoe<\6/xPVrG~,=Q}g޲:f<9R*9c2p8$@#dÍhkvc01LVx+bdQl Hy6j){V*gGko}G)KޥM6cDs%13d}3y}ڵH"ƹ2WU|&d(/C!S]y\?=7Dc#^&ġXIs!N6t`<ߌ!49 #ol͓0_Fxw#0 ݍ囕Q+~f> I~VV JMu?gВ(YZ|xP`b( Hz'R=6}m)sgW>&錽J-Oň]r_khْ?Fqg\8з >!k@aƞk#_]b6i*|cK_\YճMzd)oVX>V~)aUL=c3?=.2p0gxN~䙾}FF xvnO G'ִv9)V"l$$#@;)8UbbS>¸(L(J9é)Q V"UۿMy/'d`>wTW zW{+[-"J֊r^W Iz$y 4& [D=7P&|A@07 \7yX=o+r@9׼_T9YΒI^Cj ́}m=δ PGe~!]3ϸ9 h'2Psi0xͯwdhD̖ aEEiV=cbX$VP?N$Ռ"7W{Db*b5]Wcǔk͗|Z9=Z;y%cmXr}%|1W||Ew|7%.5Μԓ;*/w.W͛ M?(=`̸j$LZ:\5y)T'^:PZ(МHMGy%S&wx zCU' HjM^a[\<ԡkR S}8ʚ D#S8/ᙶ\|?sc9 86~w?x=#׊yk&ډzwZ *Ӣ̓PG.>g#*ku: p F9oЉ:FAqlk `C6+R 珟xFƣV^R `'QNs0_kй_'?. Q'(o;xgcPWl,=hZ.>d<]%1y1 :C;ȖuJA}>)渿C ~ε,Yn Q+U~f`o@8i o61j}yv2p/Qy6#0 gs)^_CiY!z1KFH<ˀ-W7/2mFţ(^.Jv ⬐OSI3g\q?6mhX !/[>2U?/xASp07 36g *b>'~Ҋ Yi `?HGnbN9/i^Poc?;uG`O ^} P3 jz҃?%+HQUQʨaA9:To*>@ۿ奌@,VkpU@(uoSeX_Zy#5=#W >̙i@_ R{ ;aWanc@߇ 1QeU>1|JK^eg☜-}K MġQ} ܧE9Rx &+%@Tq3LQ[99.Hx?M'OȘ5kD2˫X#ד1on3$0Ly+\}/wu|/|RZ53QxrO8-cn` 9=i<8p3x%~G`!!#!J"a+M-I(3<^<'Qxᑖ|UvU^xQx& O^x~2AFxh5\">d,968 PhFX#0SC+~m/iVn#3ƺ~\8'׀55'T>̣CxԵ'\ +8\yh . - _py'O8~yG5W櫅GaL7QRVy@;|Ru)30=LU= 1K_EЪ@8;;1?dy @heUmg+elwUucpgfbK#aW~յ"S;yJ>`}|h< ӌ׺?ڮbEj=C{l2 SJGU%-(7PxmȂU (ʊJ[4[Ȥ~\}e{~mrGKlmt@-дl(tZNe#Ѝ'W! V1 ?Uko/b=/+ހ)5?#tO F DQGzɯE@Dַx G' Gy)h|bI-R(_s dSes(7Uܫ(2lTYMV7hTm%}eȜD^ a-yuךA>ȇ~{V<: 3Y#z#pڂq=W&v5H?.6h:W?_wg8a2WDE)Ql(9QP8 2QR)?V|ϋ~k BW7h[RVR7p+^S]Fm 8axjWdټ p1kS$6ڜcm#@0O O21pĩ3|;a̙W6Uqc1g#M~=sd8] hHQ`QnqE~hdO;R~6:D1ت˽yL( TE.O]3ցDGy7km­h t#k*̉0 /{%30<1:8?;9l1K8 ?C_P[ yG;48U jóMxwZuGvEaSկ7чntZ;RW*^a<[S̉LQV< 8׿7:pS|OB5z /I^ To8o no6sT/sNMKA2Ϣ҄F ڎ<;2ek2~s9(_ @F y,K~x(X(FT>X o wD[ gc0queg>%NO2\*_r`u(L/ah#BKa6>z+2jT .J EeLz 4y)i:1.\oU;G8 C#/@ZS)*o<.ŬP@?ڽrЧ../6(؟Ȋђ2Ώ@N?y48.W2s]Ҙ-A'jbw-Z+p {XV>2S:̜@V<'PsZJ[vt)Ylih)E>U=*Jqi)k V9瘺^+3)_S@!8V;$}+j;q(y\6]MPC]0,%?xe>vA'>#{H~<#j<|ٺCFe @T򗹡0Q׼{h3!I#;`7jՏ}yNm^Sɲ.aV~lU`e!Nlv2QVRl[Q;O vشۑ4+fʟ m_; 6hVxNQW{G_~d /eenد՜|]䯔F=9'4A y#o#X8a=]9sȭM>y{qE(%ҧIg -HX9 >s3"O՜=@X O0T)^+y? UvDm;c,(>\?}0_! zLXGi,c +@Uj@apn8.2Zީ |ecdQ]<9j~(7VN-_ nm+K|i./)6ōoČx{ͭ'Qæqs/8?.رS/xDubx1TOOq= i}zefwK)+)K7v.hL sxvyП>zvƙbV|I?ZAo]PfE.t8L%TԠJվ< .B~kJKU|@c,~-A>cqXs k{"8q8rUe=5 O2/q(c{^yy~+)쁀?f9/s->aIv }+olXũPQ?Q͛dH$<G+{O1h-qv/s?o)cE~ %J8~'t(.]ϙRg8_/:soG<"Bh~g'3rWn : ?]%gOӗ&GalOᐰl8/UaCPWZR"GzTe|?Kk*ʈxVU%Jsim+ c~+[Fm.V*WRqnUPy>9gxm dxl<+X;yپ^>/!:])5K<]Yƴ"K?4yw:>;Bwy#π9jz˓1 ~Vn40ly^ nY Yw>}sa 5uQGԢBQ6"F{<'y Hu2HG?6@b]0 2+ MPM.wVxs}q|9m)5/<\xq.ye2 %^ ?hE-6sFyb<ϹGg$6U??J_}?4G=3~(Nհ2G +ҭPlMJ ʋ6$JRn\+1z7o0d vNl5O0նR*9 ][/93`Fu!1TVJ{G:y]!>}>kA-~eR-,Ʋ5}.\yo׍R>z9|5 po 7FY PEBKJ` aȇIC18s_P.;zG kʏ?G&l0))Fn|[5S:Ã?KچnGa<`3wޒ5rNe( u\F@ 8n.x.+y!s/W~$V':n> Dq o_S?>拂g2*xS;Z=pQ[LPJ36i PP7r}M^xʅ{ڧu5\U>9UG3ߡί4\dSy4` 'ORG>= h"J(6K WJQRvNNAod;~f0Ly$Wc4_ 3f1xi@3iw9$Q YC2Vo(w hh}\u6BKw&z})LZ2W+rԝGß'd<:(WJ(.xPn/ᔏФz%P?#_Wkq>o' 7Oy\;?th_%a ՐpSgmb s'n  -*6Oox~Rʫy*kpfTڇ73#?2'ᇒ^qg-e;`0Fौ@Q49E.X~jVjY_k-z-nu S8Z(?10XٓVBǼn:V]QKU+!ť_{.:mixl姜P9dz=c|M}˷mz/>YܚO}^q/c=8'9MC+4:G;ք{PCS&t]=t#0 QG (P48Zh&.|iu~Ua>_ Y߈.??ß)ހx@R zaH؟_ 8g=u!3޼`@"jqԓ{>/qe6(@g>m+&dA \ђ-FW&((#r5ē1.Ҷ_j~lLyfJ<~|h!_,wW y 8}M:@=Sq{#JI)=8@[>oaOXx jzh_>j7O:)OMe/e\??nȭq906$x&4d05-gXR-{)7(JL5'> <ϣ~?; s#IDATgsϟ 3"#^Abh'x OZjMvДdPȋ\V^8v^V}w~ +%gҧwiI=[G#s]z}Ÿs|7[,^y3?k^;u>ejzxPiu'{r y^ZU-/]JC@WJ>g=c\byu_gܑGrVmV8OX^ p6HCU{cLȇ\7M;SG^>Zx*9hgڷmNoNvx6R6 N|#W\ġz_s嫬~#0 =\10D]#Ţ#xu}\:^Qȟ_? |\'wjN< P^tzNtoi'0 JOA1Dtᣰ[:0|F@I>kq)\x7;Dk>}]Z*o埓1NjFWӖSfЄ305T5~ ~=';=nݏ1(92|U?/[?j w oSsF@5\~W<ȉǂ0N}2[SW{4@O>+xSOoʗMtSZg#ex*^'^8ޓ is֓0y?'wnG#P'~ HaPlKo $#DYeʪ@_ ʶ@>OoUw&>>`}F3f1R&&8'} nJoNJ-DNa=(&>xdQxU?>϶uQ O(=/д=q(7_/q?pL8@}.>TG<5th\9Hه#m>SO֟pd_WW-3?x15>DQQ (qhUH5L}C9Eɣ/_B.#U ܽ~NͣxܧCxU]<ԑxOKO~ͅD7ECW/9OM3Cim e%=%m5xYkvD%t#WV@ +4 `ŽUyȍ>-m˒֕W=Qw#0 ݍG𗛶GQMo'){j_ λQݲF;@6]V ԡ(> /{JCz^5m.^(iLz9s#Y:F୎0/oc4~_% i"k3'|@JZW^\KR+?P$|ykZGn/#0 /c1Bo|&5?ch N[@ZÉg@(8s{_КP / xϕ_W%.ex#0?'<߁>Ny6xJ{PCs `&C." y (vm*o 3Pxy^$Sm}Mja\/c{x{)#0 rF;mPl >~\׋k^,2[~}K Jvv뫀wzӶ7\} j<ǫġC17_8ڜvdkX'2 {@?CQ@*Qտ΄´uCᇒ'#0Fa#0 ׋].kyhSE;Dp]xr %AK"@>I1|n L[=ك_,~ő>L!e0W=/=q)}[A_˨}?ɻD6xmma# կw й>|+  i}@gYSRW;{.~v$0>j>\a.z=M&Z\pc< i} GcXV _py p8P.@_ H f\i)e寝#?qq*7wf=XhB|§O ԑ1c \ь1i@+nϋ 0ĻԎ@BFwIV- mH3`{@J6'&c!JuCwk1cv;xikFŚ,bC^ ـ:@{*0-ZnnxG;  \y߷Z~ֿ;Kϸ՞-+ptƑ^]:*/k׷㯽O=U0kG=~Pj.cH`{"ps];  \@#mX茀 -NK$P|[z:gVa/6{JZMbp. x#0  Gv8V8_ I{' >׎^^iGV.\TeP6yZaNs~l+|* 9uOz@<HLPx=#0 s-GOv4@? (wl @Ο'y ?7WVp 8y'ז8?8?@"1(kzNh;!fg8x&)֞LeܱV&>^g'-8'y𵥿\ / rveDj˟CgxnH&+aW8>IחϭY˾t/ۄw]ۦ#aGw~#RZ1=߷v 8?zg/OH+VOpxOkzAq1c \o#ZAx8'4=ϗEiA8%_瓧R}ڲ+#>F`ak9zD@M<ѻ=pvMkI9Oރ?#0Fm0[_/:hlCI%xd|⩋xdFnɓ9ڷk..y˫}} ]kЇa4d#b Xq;uFq\:R~BSfFp7<xt}D{O4r FiKOM8e1c m^PZ>^hdA# ̃ K;CǧHhO?"##0 QY\ J:F'o'J oFFd:Fॎrϸx2t|p_'#w‹l޺0"pc^+6 JFWD+ʟ.״ïpugV(#RG Ksj0mF%6YCXMtKR5k5M;M_ץt~skKox+Wzso#+ڸȫtSꫬ#0F`1[@9Y*\GS&sƒ0e;1c606H#s:#%>1c{ܴ⏻*rUp@KMբ5^I,۲[;ۚ̌<.q~c0y(PyhGUk듩?#>Sϳt{SusߏvE>86¶Jr0@K0F`Cxu_!0f9/ԛ#` ` j^c@@{T#`R\N%`z}Vd͹M=-<?/wL`f@Mg8XR?CF#0J<׸v]yuNA[c0"cy{9:wqpe:#`fB ,׶eNmU7?^8N[X1[3YL>ϡ0yn9ʵg:svs,УjLꀝ PgǜW#R4vLZűʐ@?:Ӳ̕ԗd?oj0Bq(gqSA'Kò: D#0Ҟ?ݰW0R:(v7Ӟu\z{ntkϡW߲Zzk_7OXtp68(tܤg#`>06X_4:SAQa@t2L!ߡpL:iŖUF#pM|02S&VA@F'B#U*ɿ@F pssoZs f&!ȓ`lIc̣@P8)|A=}{mΔK#_*hsc2e`xLi ~NN]+~1F@򿽽-6vL؃ `:HvJ(o_F#0bm{EcwFZO]GPNR)R򵍀0 KɟT 9n03cбjϟ;Ǜp\rotMר}{?zc(@1PEmqho43&QT^XPя†^]{;}h߶@|y1|ҏRhc~Աt}1;3b sN{v"ݻw_n_z6~q_>>>@R4@),1!A0Ÿ+,C4~=d\ng>϶g= W&wG@b$l$|+4 =?Fϟ?waaq;m9sƵ1ڶO:J3|_p7o|y嫐_D E (@Ѿt#-gG3@ċ 8e{DЈ%I|ɞI( #_#>\(r,\~Mu %'fe?dVvuñLPɷ7>)xLуj\L;끐i{LzƘ^uM0F@ y&[PM ceAS`r=xC]? y5 i ]):u8g8{ўA P${XO-fX"y8x&ݾɄMZK9s.hͮ3d:ULt2b=(ױ`WLjKÞ0F`hG52&j2dz_a47C ɪcd 'j ڡm&Э8,D-eup4b|:&&~&}~']42#`΅b65QgI1S܇s[UsypM܍fsrc‰Y0¦s݌0K@1PePZN ̣ <KJaMi˲wHthڨGrGyHY`&PEyP6D"2RF൳<6hL)s@V[?5@@&eR:R'1=`280FRJ^LԑQu҆R`Mp ` GA"s8;(:ׂr\ pnFDqF5n%r@Z1-! p&bhU9IKqF"&ΙuA\繐qV @z &_RՑ(;2s11ʠ57F,Z:ecY&5/w+q`̜)Adz-幔M0&gEe( Aκ;@nYU݃@쭭 % lRڗi: er._{ᨫjr.QGEJKk:JwXBKt"RW͗`i`4pYAٚX.@B%T4hiVe_' 0n_3K㹜ug-d^iCq\pDwx%͞Ô\V'Ч= @w/ k=%9ljP`oO&W450Ⱥw86Lϣ,x˃_B 4P3wS 49j]W4.0 zs}al":x3i5ЪAeOK7/ |(+iM3Cn(sahx ̛p>E&Z\9ŹX{`@L< f9su Ij[I-p;nq_mF@* yfq­@04Xu,nS:j`ǡ7'p{1@&w 3 nh?fchreixNkm`/cޠM]f6lôo Ϯ索g.|p˗/t pFaOyqnC3j}@d=s./ @i`S# rbl(n[. d$ok-_ihĬx[xކ@k'oȕ M[i ǵ@6OG4·rh>s8~gmg2d\usQ|s_ƿ)Guh߹p~,KeX#EWVnvwa(@XkEK@ m<e7gC`Gm 迓:!p:G ot\dSYڨ*i` Ekg6b&ѿ:xo2fC@SHT Z / Z[ު@'gPV_ Eh~N}2g@y5M- j oA9%'^eC^ݻw!Ropj릮sc14ӐAjV4pgX;?amӬ|2%YLj*\( \EO=8 0{bc_}%oYM~Odl*D p;jOAw@@ ЎF gM;]4pXw +sH8"iY>aYђ+ Ztyp=M~ɞמZs>j oCq|p f#`<}vNWDeYwW߿7`OupeLPw2RGxΦFR5h6S?9Oc9O{V7w!Lr/ S x˃?v"2Hy6Z[EoEeW U130J- nR?je.2 `S '@tp:'H9>Y[\k]j -⥁@5i#1 X&,Hhi[ rx<1Fk #9 # Ua=Dѕ@\N"p:sJ~2CwǙEŞ߷>!f8'ġի >'3,T4P\<tgq䱇Wق \é>Y4>!aG^[XKW@W7zG Wr&;h.Cҝ9ώ<#Ѿ#t8c_x&@#9 P`y2b'_< [GpjSXEUe,)+Ki @zS + ܔ.|vqMI0/LP=<6'> ;weĞgϞŞ?=$x9ݞO)?;fj ~u/ GG_dqK/@QDóWOG `O#yo'B{ 9'/'f}-_2QV;hi(sյ%>+xq~ŒWؐ4@Z8tHR=.}[^/W4_e'_,|)-!Oq02( g@rOD5hG:* zc#`џ*#-[Ze,, nKny"fy!0@mLxvu26 {)O7|o,'-2pgyF@4fᢽ(W-, Zj Y;Lͷ N:р ͧ , 蘀'^=nd 95!کQGEJ=; u<͏Cm H*s\H~O9#x$0XCp>uM.ϩL)N2QՀ;bn00/R4@fO6mLPy>#@rcOsGy(-#xcO'o謀K@v 1=5h uT4PXE qnO!G}#t\[^ΗW>^ dI Xm( ϑ6>ѷh9_W h|>!-i{\@ J+7/G]ַ cP~71r9n+MR%(i[ `.{ȫ3nG,;gwcȯk(# kreP_Xu V7aS䜖\6?:/i 3~M \|ZB HE}̠NS2Y\Ghdz4@gU45whGeB`75(k0P?-'oϞ9-,։gGkT50UEJ>; 9n97Y\ewq9C>y[G/;V(y x9EFÀuLDk[l068Cq}EW?:p:KeѠ.β|U>ߺ>^+3ĩ2 y}lGi\  nOwoӠN˼>#mq8f'i<Rᇥ2n~^㹥&ݫjJ{Vk魷o(6\?@2M3Se]~]=!+p`ڌ='''wps=' kW@W\O)Vi4pE Wrv9l50C=u_VK\}cjO-}eO2#OƾR)QU CeiCFZ@+{w7EQ4P Pq9kr ^,4w8p.9UeЦ@d@lホsȊ"t;ß(gXh ^2n.dCլL\k62-;%)ʵ)Ozݾf.7 n\nDzW_}u=x{jd2Zm=x%Y2atPef@ '\5?ubv=2/7zEsQ.~mpkSx 7.4|3h:uz sqP0cs2`Dr~&3o~{4#A0~FT Ć@dʏT epF6-ݬjji4p03h3yf ն|r*FZ8zi=m|Ǟws wrDo+[5᯹*4Pc d_?wz oi,LcI˷ūp8{=,cyO55;n:oSefJeX3+H2d@UUdi4p0Umsg7mhd'{n{@n6ZffA]F@{#W$^ P5XtQ4pTw/2Vmd6z3G wm^o[ ܀Cm`Oƒ{sOeW. 2@:2u:]ӧ~.Ӗ >)JYyVV9vPS|wߝ(|ٳ=};>)(f4pC l0čS[j&Q]G;PJKi\*2ĩ?9Kmwng>2 d)p$`0'0﵀!+RyCF@TϏ+ch+p i`Fg]7r>jm-mzl qXª~sG$01s>F}R"YtQIIw,.uVմu??e.u=y [b׽cO`scZ8֞8'xўs<PGNs)f\t7-R@;Sg #gty\mD9O,=;-JWMpNSw,x6Ӳ{6C0[>b vpGjKkyij)+6>~n_}F嶆\&rZ̗0\Wڱsv{8'`ޞ\} wDm)#ʸZ(, @p˔ّ35?S˛˄Ցs:Z#txjc |;` ZnOҎtd>)V.ǛG]ps`2-~Wѱ+ .7}oN'q8|;xy0yYwe:sr{t~ s"s'0o~3oOmTHt,K:qõ ܶ+5^JV±6ᾋmӈ@9y^$Gz'W~Jfk,_ /$`@ePA@f'\FJeW-++ V_eZ,2es2;aeexK-c~3_tS mɀ:8'}j˅쀼'`!`oyj 9e.#` p;zZJ@6yC]$ۦ;L4L0imGPT29^ tN@ߞpK q;\Fq[  7/?C 5A ,p?[lMma.?C9S@ND`?'@opNNtC<ݏVx-2nQUUi4phqyyLMa}yrގ2gI <6|˴Yy!0Taf.-Ǐ^hCǏ_` ]]x$qe=`p3zRK@p_@*|9W4M)o8)P |AomX. d7KlIid~e̙ *r9 p9}]k+!no׻N2!erk'y~ ǣ9=&0OtN#,09^2edmB [PrUQ( ? |i9ՐW`Wl dJ!걱:M/nfx;`OjO ݞr2@-2nAUEi4p?5 rYr3?v^4k;_K%M'@iApN~7vvv' }; }bb MY2vn1\-** _*(ׁg`t?5o#r3H%A"TxGGGc wP=Dfg(~Q֞ė:Tõ[ nZސmzH#-z>_pwѿa6*P^ ԵO1BeQU9'BGі `I˸vm Dhw@vzsҋ]( VBaS7?u5i; |x f4myng:_K]NpYCpw,F@nidel=yaWi>@ $r!#JW$:6٧ڊJh3(R/qOg#LGі%/~[N_,y\^ۆ<[r;uvzb4rT)8THW0: ZF@ AާʕVEv2E&방Ӊ\/5q9e2,%s呵ox_X=m]kuțHle8R~>tt='`fIyàLCNm=}[+`*4P_Fa3?gMf+C:<8Ck)L>SsoẎg]Fe3ZaIeByxUBh䃾իWC:Iɓp,Y@ 1@KKU1=m'lx.aSỜ4:& }Բ-5?/4Ik>rT0G]%{t>@L! f 9Lbġ 2.. +@i~h0q$i ѦE0ǙR x9-׉9l^m>г^F4(An aymg眀lɠ'OTv>' (aXSoy]RF:VZ?lI:Ʈ]*-gH`>zxn:gsvܔK3Z&*1o|Γ,}y?iN|ɲsr NbG'*'ƞm ^ <֞m |Hc`ذh+#Z-*kYؔvta6@7 aKttso3Fgo0IsBI:4˴OG4[guRj{h<%_w_o8p=v=g*oLHxU =c!6 le2J+:- #JsnJHNF:e^N]}񜶪ϴ Er}qezUPnJM|_׊1`0srX2ĞN U,)@ 9*_XӼ`:IwQ8 P3X݈m 2Tstgc 0:?:=!= o}](hbm^U]6lAnFņCut.Àzvڀ~ɓγgmy2 `g(aV6k2#̵s =|(p8oD}о<2qA9ۆ>xO-!-OttrVٳg מݷ ؒGμIl ߊ$y*62fQjh#e:M~GЁ*-y3:kA5H3?^PLiH䡛O&W_<>:eMtM0"f3hqMs=Nys|LK1GsZrz#@:AC1DY Pأ3f9|MG;MI!hR]i vُ[Mkw#?|geЉU!0*LƄat ?~\0} _ P l&@w:4 Z%ʱ,oG2G#D\_y09-r"SP.ѯ1˲dxU t'|Vhfϣga4ҹ2Ѐ:;3o};b/ ]~(&z9R43_ssS-3щ:CŏEA' Iu |aWb͞v>gY SoeJϹ6lȵᾼqy8F{6qg3HU=eLtV3n虻:nu 8=ty`?Xgv4Cn@g#mSCSՁg$Dg\l%]yuƣ&Mn tC\./Q~L3HG:[O=9)>їn4qqz5o^"=h2AdtxznJ@5u8=p.@QgU|,H;XSxoy9}-5.z4G}!?忝c.3tNz=0|;|S?]оS5ej (΀)@gCrM8ʥ 5CP_eqsחz繾t\~ad^&ɋH3\.ZQ;Ooz9eoK'9:xS }Q];?9N+4J;TZb ikxWOEā?p*g}Wb[ {?pP?i f@Tm:+`f``l)<ԯGui 8a N{r(r}}iˤ;鎛C6wSy_Nai˘/ mGo޼i Q%#lɃdțƵ7 -Wc 0<'iʓ>Lj/^Дӆ#fen=!ހXptt3Ϡܔlq7a ;Prϣ9ʘ!6}(n49-o2mAGbV >|WGJ?Q^^ #Gi FS@IDAT4hNeԣPX 0{PZgwfTz0ƀL)@N Hb S?%^Yg $nQxxnfP-x9 ӮyMiRǢӇtI9{!,^o4xN zQlH^Q$2 &9{~)w_ }T/!ѿ3'k^? =L[x%bxA3Re@s:uܖ:|]n6g̐p-EYimEmkӗgw4g^Ƒy2Z=N SG}P/żՍS-*~V\2T4p0@0LLi@iQ/Iiwxӻ0zy_)FӶLFLX6thn{;ܦ/_$֝6u[<[Lƽqj _YTF~o4N 3cp2or?J4#򘁰 ikX] n{.0Ři2bm?R{Nܺs6vf q3"2C;6}^in.;LJ–f7ߴMߥmu{62 \tfAN$>6|7@^[}<տehOnPaHßx3NNil2Y'r7CՆ'Jz1; L6 s?}mee}v_.囒Y6/SʴFMoY/-/Ey[^Nq}z#C\3e <?=1eϣNp9i z Jww{s[J0;Smˈ!ǟl/N? L¹P')w}Q<vwZ_Y/7.v;-[PLΗil9RCoG 9.lpy?~ Wte}^! hc;:TD1jjoqsG^x3 08T>F_G2,0%9ImǛQ Pa~q˘8UۖsZ9Lyysæ.<?@a0 ?߀r_{З> **P; 1ObD3$ KnzoQ <|tPQw 332&'4AUt5 Pz>9=37#S].k|`CY6`OA0)So6i$9rj2<[x,+_e2mx[@%uΫc/YByނ, G@M\( M}UDtx6LL/ѧF:l4(|,!<׋ z3h}= p:4^`_@ H_W7Ed0++0(Wߵ5ԎΓnYn(K_RN_ޡvʸn^[wI7)`>ϻ(iUZ P'@D6%13hyO%w w_F26dlbM|0:1j4xcjyǡ̿p_eڰ\^_52mE/J F = 8ep팀2>=Za {w1?F @lu|g[eMC. {x@31׶ ;_wMߵm~NonEr7T{k6-Snpoi\E`g ?,vt?yo)KUsڻEݢcvGcс> ?k,zr,$Ѩ]QfCβg#⫯F/F;o1>m\U-%e\_=9w,M<}u /֑` AUs?6 rSH_a?hεF2fץ޾$|HDnMG}?;:~^G''i;HO2r|6r(!k~RiM)Ώm~hS =08{Nxxwۢo rC_h:5[wa] y~˔&s((^i4@lp,חFoGo?l@>|HFE=p*55Z0/g/`?\# F2vd~ ji\m Xm;6.S*wںu2*˳~/6 \l1hkuboSt~xc_~ (#U_޽  }-+73Li08o<  Me<(Uc_ϔ0n0Lnvz>}^b f` L3ڻ2Xi230hL OL>/ [ H~We : 9G[' z]0z;>ӟ!?0t'` #@~G;wi7OWV7-zZ$뢝gYy+je"o <%-`-o{]uke}yШud0N1z8gGI/œ@  4ϱJA?P^eԿ4^3hQtgPԲm,ʔVn۪ڃ!k"~[MEHʨ`i*$? ˿PƏgxPg@ sPG;p6n+mSæc (C4 w".@?ߓg?lC;~δ?ă_xwâv=Gܾ-`ny]uj?FLk/^:k 9H>N)?~<^gx`z>vKBqQCb?X~$?3>P oOcDLJxæ}y9qUu־G5g_U\X[\G_'Ϟ:q(k/Ϯ2~c@߰ p(~ZonYG~3g۪_E em:=;ScOoS^2#/6)ukjcH!a|pB0B)Pʌi'q(A;rm[幬t]mW}˶Ǻ>;bw3?IJh uT4ЯXW{Y?ֈ~(kxŏ5~J?X2JgG>?M|Pn>+WRՎ MΔwG1>XXW w;~0r<0q}i7ʍN #f{ߐ̹D(?zot2q]oԃr g24Lgh2)6Fogwt_b!C(#LB*ZqxOf?u>o{)Q}/0>h% R<{;@}Sa *@dY}$}aF-CC?20JxkS1*8gF Ǻα fEiSBADQ_bCD*4̓.W؅3^N7+vW.hE3&^ 1@R_`;xPT'*RpZxFB=]y9f fxSa$w_t |"c36̓cO >Ёl4dKsF]9_{=fvdK:`g8,,+݈[Tv# (t׶gHz9t PHP P+|IPaL@8E0=g$AԏNBz8յP=:a3[j׎ CQ  Ԟ6eI5cpf kz4@ǨVϱǀ.>##~QvtC:#K^̰#83p֙_8֌'r@qЏF׼B]qP$NϨ߆͛gzawUN,CR[j'郢{zM 'j3Ǝpo餲] `u\ ^b7*z5࠱^/9̇5~Za_ GH{3zM0h?( 8c d13Š o[ {}?<ѩ[ZؖnJq&NJDF(m}{`[es4B ;\t4PF2Pd)kUd[ ֟uٽwzwo:sjFz:kTLjSS#@|6[<XpRc0S(,]c_G_~~ eYMv\3|\yN1YbuGf!~ah#CWl{5_M݄ce]s@UU%5@(1y^@3~(S9ΗJ8ʑi<7rc MCI5~j0 p 3, o Odh$Q|GiNʣ6kޙI8SKؔ ]8XD 9Mŗ+ @K(2"y4BTnu4/px{0k|>}Q^˔?  tWRI>6yg ~3ݘ!@|iƃ'q:lACψѿӘM _rc5KWz b ݜj&FJ3t,1}#=QC|.{'2^0 v9`K3G4? ~MҞ'YUkϭߐZaƮe#giH@Z?ƴ!ᵮCr҉A)'@\Nx^#f(@97 ѕ"'p;pHWɛP#2$2q.(ʨC׆[׎tú?oƙ:T(JӵA 6P;N1Mކ0t$*2ӵ(vIggv>L:gO=\EAvUA|K aܐSXc @oCܡs @Aʳ?^cN ?QFʻ/y<nݩΙ@/;Tl[q#r|l$.\/zxO4p, ޒ~vE7mH2}7?O:F<rt?8,LW98Z'u&2Gi_N jm۳j{t,>ܥjg0f꟮+̹q^G=N'JnF@pyvnLh7pLy@G` w{&33C}:a[ Rֆsщnp8&n?\?5@k|ӱ3]j>8xw ?Fl>vax՝ co#`[CYGyXJd>0o*PnAG:g?&wޠC@ז-QFg@;$c 9nϔ2B' IpNg}_sEx$;4^6(owsQ(`3f )O EFCQ$ =0 g?>?>t ZH7{ik_{I/0eYtVt,#{ff5mN7cv`@~<%䈷.D'^x+QAզ! 7Չ.A/u^k]ޛn]| GGh˯)zo4 So` ?Dk@;~[w:#}M#?W$[.xفe(f6qtg”e H^ԆJ; pWnVeܬ~+h :~v{./~{vf]~u|ԆJN'a<Nz"j[e:i{R$߉.EukqZ+#S70@ǻ yϟ})Q}1F|P@2 \ɗ WۂMG{߳Qi;5ȏpU,K@2 ߵxNs/~q_(~JKeΊNu.`:0;K~}C\6\/mi3OO>?FO=|]r C{M4G[{ڋfdx3Ȼ>̔ӫ́|;skgb46y%O6Chm@^S~~guwI眼M˰ EЖtwݾ.uJuJwy1m^)LzF*y d_ Q}4ޏZ׏w5{y(m%3.5k?)9@)FmڗΧE7SyH$,Im2^ g*Lu[u3DZ/;-#SQ (6w]E΄p>- f Uh Ҡ<|uP9Ԡ D=| 0f$yRkytZq9+2nv=}/i =1/dz?x5luhpn:| OGg!;3Sf D~坐d%~ $?[к+ZƂg\W o#jgh `㥿t>Aԗa [ﲬR׉ύ?<XDڷ#>[O`o OZ0P| lЧ7f)*69qֵ=G.)<LSwOgpCz7E9'0%  e_@ P]Ѧ-=cz: r5sn?<`8_hԦ *kg$p舀AxVD:~}QN'V~@eo)Y(ܙF2Ƿ? _gkK[2><٣hr%RX pw9:hbN:>*Xף˗_ x*@B@Xf Xa]i5R $ʈHux6=Y=^߇U6#RL.m }18# Ok!׬;(Kw.c8ѿG B: Ms y`::x3 ti@GmChxݝGnY? d5?z5:==_hOnbug 3-)GZv{ >ujt>} /#U;Y(k{BK77#Qz1@4g@+=}kcD sy\@c9\4;V9c{a;Q|[uZf`G Cβ~x;krM_厌m0.1>$g+6qDx |@kQe6S/ LwG'2: w[g俩 lv1 J]8hKP7Qf$=~aw?345~+^H'^lg|!$T򒏑hʉeLb_t4^Jh7';UTuA-Jk2(Oi3p5хxLnI.W'XaC=1]+"e'p1@czʆ?^cW?}s+|OzF/ x3tݓiqT{S^cӧ6~[ saH{@;ccV}kEq] @,ȵD# @?Fx À}]=ט>QEW4P@?1:jcM3\5?o*7Q5]]#qi7 x 8;jgxCw:I1a H7v~~S=Q⥂xO-]GAsB (|aVy7'Q8]2X~FP6ndG#Xq#3qEO&2d2/f2Ë{oY2魤]8p~i4F?8i`C Ν.࿬ЙCΏ &18Ui-:Pև2` S* pه311Wqԃ}]χiнuD$Lj߆FWvTήx$'=~mս-^(2a2St |l =psgC~v(`?vwcQ<[T+ZX h15cp,D3fvoFgAvIFlVطt? L5 tNcU7t,0a>u>X 8t/L@N6t6[*'tc4Nԁ(t#c?e|MŏS%T P~Jd?U}S[$&?Rx#E|"k-DS%/#,HX$ʨ[>yv:}摧\i40=>` i&]g}<>)tf܉}i?;S9!?H{'c` 0=KIyd`FXɑXNyOFHkLs$K!4H`?>x}mVD5pOjU.l<պFzo$PvF:jn6`\YpbdEG9a>('NXm #@r+0L1`izm?ca )SiHl0@| ]FQg {j#~܌ع:{)S7~[vX]jFH,C`jCC@i^0fbsh6P_gGicLƑ,}ͪ잞LRj}GH!qܰ#ݞ.(G1=HދIss_,ttn۔]n{39oU USoNUު-ú G ܃b|#ã)(tOdfy8@Љ$ZN^Ӽ^ZN3~ P¼ާa@Km8^K_zy=3^Q ?w(Ni^[9~khbߐ퇠b@_CE ==| ?߀' ?(A#_oM# {E!<| tooc8f{a4:0~NXa9af)+Md9>ق(=jH`3~[A@y͇?RW{>| úHSkdx.Te~?F@@W*CNuul]jc?} 4eס~4pPg3|PA_Ӿ <`]rm](ЈpOn`g/ۺ5 ubi72 euUpFe&QpGej  5 5Œۂfg[y ];!oaۗrC^5Iꌎk)̟/I9 !sC,o|`__vs <Ylo@ܷ^_S%3W:>þ/L˷|di+@ As-;7>#^O B]?I]ct33SҙǮSmۭ74H#7@o? hb3~tU*?\lj!a [Z]p7xp}'\7㟡<0ei¦Lee+%~OZs_4,p:kp|οhX"F;])~8@K4w<6jXjp81|>o1ړ@ueW=1+OǿnR!,O_ƝgC Xj1lgu>_O1PYCaby􆥛;.2Ny3~_/U xias+^y8r\zDYRAڰuh)e qs*l;&w܄ܤ o4xû fg5<9Os;Ż>I\㟑s6AڙeױKR`:CH x'j ؏O@ٌ{@]5 ȘG*Wo83Lu@#@rp%ch7? tQԔ)◰ig<BdJݐJ]h ٷ)>6-oT7=md v~o#>vZDβO3(O}f3>Wrgc]n,sv]_}VARG(ԸS^3γ:*`t@ > sȷ. gxOks1(bٺo1>Fサ%ut-Zuk5}NuOk97M+gT/(#i4A񙚮r·eU-0sa "L>m'6~aS8i?u)3eR?__7]^_3R=zwg?yfm_Oc5Ho3˱)kGκ}B^a9=l#m ~ZY|gr ?˧YkI\R>xsAu/+( ~=yGuyZ>5 _h(\_Zynxs~ l R@ XXFp*6@0z -gZK3Pz9gPJq(x[^Pu {#|e+m].t=Bmo߰T7hi #(ل6-e H9g.$=A aP>y_)RQG9=,iCw ap{ϱH]zw5*/[~x?ؙ##+QlCYjTsBY~2=q>[\Sy?pt5n⿿ n l l*U[)O @=m?EpFa9yTNt6JxP5>s = W|sӎρ}L% ոԴS6l^Q[ado/ܿI@IDATۮd6[.L(Wj-<)c }A.i Lʡ4m৲ ;$@N_~OGxQfRd? ~/?E^Os_/~5:6 c@|]++grʥ;4=6؏ hywm8n:l% l- GUg()7O*MfJ*F79 UR??(;/ @W(e5\6U6ϊx閍W6q>;C2Ȋ{WFW ,ԙܻŖJ .my k|`9o;*k^Mgfr.|xʚJHSiTPWLU|UR5>.C9/@.gn 3Q`s_6] u|.K'oh[O'&#h 73ڦtO 2Ls/"pI}>{N: c8x +iU.X~u'Y&?P{MLbz5fO4dO53y{\%&u,c)or_>~cJi??ӗc_c s[fnCpR6U**[a ?T6hc}t,G?1b9*{P V:J#Pp&o<@c|_1ݐ]Oێ'+X)3M|[o8uo/n}'VOoޔ@fzWMwLToFi^} IsT 7zR__7=]Ǔy?m˶,Go}?镏VaQ6nRz,xWvN,G0b* l}s?FĻ10HQ;GYI|n9ghw~} /Ilyaر).nި:ޱkv^þ ׻ܯjzL~v1 ۠-ye} 4H 3MsVN&nnfܑ qnpW,Ǜ ȹ|"lm|s!=QNZPn[u.uۼ~dNnH0֧Jo^pX,OyOkjwL+mx-}f߯/ j/ AZ#of >35rFZq֟~#|_:qq -em4~)7>5V5,߸iJ8ʙyS m_[Ư nn]fs+g&Ώxg- >9q P5ew(n_{m*sW:h[vM6W\.%-pҾj+/6ct3i!>n]VhWy;cɸV+ WfKŨlߺoez~e{A+{lux[WJZ %10K}?:+}W|U~qQg5iʡ6I%7(lJWt}GL^kXМȆR~K+y**Ȝx}u]YqZ׸@,5boh~8ρC)]MQ_ϡv7|9<.#3qAå~w/<?85%Sʭg‹?R =nc`gR:9B14GƄiKp~Z aGOpυ2r^lcz }˸aiLr?~WOީ Ϥveg,S~@ /i=O)E]`,y0D:@0XcD ŗ4\ml='rp\]j!oY+tL;ӗv]H> s5r;MSַ$pB Xk+zg1C7y*UA f,q.ߣ'즨d'`V3 cQ'M:Ҏ r(jy" @Ts|R4Mz[Jcl1q11T Hʒ/)>Jg 52c0n,;װ?ݮrTWthRY _4~BH/-9nR$p kuHYPfgyxW)vƺnj겵Gz>{ 87s[p/=JN%S^#2[gy/Z_Dj_5ݰEoC|a|Pfm}Od?^p}W $juẌ28y@sq2 ?^`i4uҲ"YffϏK`3~\aT_Y3xVeXwV.տ$E7џX`G|5mٵ|{/<\QxFCQy6=+(bWx:G{To}"}Bp ꤼucc[L;@?)0?q㋜[NΌ/t#{P.^k>)^Y'$~Ӽ7F0|zge)l#Ͳ42܃0gci}=rыj<~Wͻ߭I`3OnWuџJ)l;>5|YUDB6v 2Grk3+ P w%z~3 |}k ?Z81o| ?W8κ9ܴnY$'R7 lGe*gQCeY.ÇojΨ,7K/RW;hW_ D(~KZPt@@:~V$k?A3)itȸ>n~jJy\ ]Ty>"yok[ _Vfl_2 WrP=}^3Hw!$J`3~Kw*κy͟ *Jy_`WyOvJ;kKͅR i#J,0(^,ǾaYO{#Pw)LfGyR?!u{ep%\g>#@_~xdzQ|]%={Ѿس?>%g+5'K|<둳O1(3{,vMۑ}swX8#u?u{?ݭ ls~?@i }H'1`M` Cg^0zN^p {6c<3 ğp2gÔJM?Vu6IH`3JT^3X7H")gp>L@svZ}ra|@ ꚞ/#ROs@+@@5L aeCq=ϼN~z g_}O>,\} t~e޾Р}?#Ǡ@ȱWf~f σx҆ms7mm lm_?+X} vFW^_3 g|>v_u?_ܝ Q ֠1V 2B@ 0ʓ5(W(eW0k#9YYQ?|xr`g>>x!g.4yկ7S[ݷ~NMVקjw޺Sno_Np99ԥ (Ks 9?OA7C/_ t7}@*ȿD_?fٸG;3{]TRpG P̘S~c {͕L2h MGgȮڎeggn˒3} 3 xCqZxm+ r%؏* a\ p@W~JzNUzpi񣰳Ϙ:/KKU'gz˲ v?W|3-Όy-!t~o!_TPs-Ht5 6y5I^Sm}fg[S7j!y GVlx yG>Fadܱ:Rik<J\Mtno=-~XpX.tjLkR`UƄ 2| ezP# Ύpꦏ;}@T.&>YG^޹;_ )5qZ6W u2ˬާa@amAãpv#܏1{2N!>{({ai<$乑0GGw[r_oTZyeVU&wsH* fO֑.0QL~6$S=?O(P+7O@leCMc&~8Ɯ;7/w!b}8[s!yĔ{ė ~o^Fy sVFc } \x?}ywsT=@!e?acA_xQ7B~ ˽~$+2 &cL6I.H`3U>Taw|E-{3fouc1&{o_0 0\]r](gLzax%bgx}=}x?x6QV"~qײl=?} *\p į ;Uy߃ܓ}u`7qgߪ%*=_UYxcBĿ3yy]0= Q>ӞNp(޼\cT>9to=s>R? Y Q3o'!LwfڰUy]p.xP6#(S"y7Ûiwɭ|W2u{tD쟴Ko~Anx7ڹ9ŏpPc(%BQCҎ׽c8.A??cSr?]x@"F|G|>$U)ۛ]4n]Tu6Mo6ΓZ[* H,; Q#0 Rg<θՄԺnX0 :?y>J+fP[O"^3l }[@1٩-4Y o_#`Οj=.Kʲ O^[F@O/LK~pw 0Җ,H?>0@x=H6R?F-8 >> XdLD=EiJʵl6z9 (7M~UKmU% k 8Q99Q3;%]R%oŮ NYoC͖ˡ9 {r( (]Bk#mgTQnF[<\ }n~*x˜(#K&~o#>v?2ZsL 3_@t?gxr5FOo0S;)ƞ}byoUB 3ϳ{:$k8jȺfBWz?RsUvҭ[uۻno6` OC+߯$? W<˫pUYS[jt *[ի@|>v>lϯ7 PJ\AD% *%62VZ5TNwgCSsޜ;|G&t1ǐr@_'{9B~!hÏ @ x3ǣw,c<ލ<'/{~Q+~JOJ/[Ot]no ~n*Z݆#,.6ԁ *UJ5T*cf#A>3;1$@3{w\ [~eH3?cQjjxA: Ku̜? 6m[f? 6̟}vb0 fJ53wqu,{ޮxfX߃~QgHRq;T}@琇6 9 l$!Wa7]3+Cѩg0-u.?JX{G w —:Ą,7nҏmKj зkڎtzAATrJ?f>gG5z-X^ƔU1[rȡAA5Uv2u^={jdu }]InK`3nR n+K[HCH;+R} s>ui֖~SkzeO?ܞ/PP]\j\vSV`#ʽa`?¸eyvW)^IvI3 }`_8\ .} I>3K.#)_Gvԉd`y =v( ֛l@pq!\Oޱqn?&1v3ڭ(o 8Pp`BW_t}\ =Hz*ۂƁ\> :_. ЯCޒ#DٵM9'@̀ײYfT,5zo}r| 5<|m\hyQ6ԈOl9I<gf\ 10O)\eЧ7}= :b?s"G0嶪o]CB_-+7[x]fʜxNw*(.U2&??l] V_T|U*԰_#[~_ | Tj$ف}4QR[ℳG>6LlxPX;^xï_*OὦmR?Hr_hdw54Fǩ\vܣ'Y;P{MY CA[*mzotmK`3n nH{Q(PmϝC\_&_sѬ/pgn('Z. 8*~@Q>>?߶.eOSO|q8h ĕb1.4`fXk%s4>Z;F ru&o<^~wg@5z0t펶31\! I/}K\ GæR@{HwS:xi <j$ 3mz`sk:ցMwl\[$W׽+]Lʃ^O0BO!7:xgOP@Y;>?\__I{ξ//>`M?AΙ'nzJ.iDT*`-4eJK],%yz&UV|^ lyB8}zeu# ÎmԿHynPӚ?; 5P}%7 4]AtmZ霷7  l]wQC g@~*~'S)@2g{Z_, tH9i]Cs7cE[oyӏiqxLvSrә=Ѯm2]ʷ<5f_#}OPl͋P7L31-Jtɪqe49F"UuT K>?ƖAW,W~g1nn]fܥqW 7(=/U;` Y@Yg_%A@*[Ae|=~Ee^*tD ZvЩw#O|UC0<7t4`;F/6cts?YV_MPJOc2BTf,Uv [W˂2} oL(G +R/iflF[` %'MQŲ_eeJ:祣T_yPxReH?$_E9+p>.xO1TљB5~ns~؎^ 6,K W8ř~zWvL:*r74eGx)5iusxefOR̙pfd04go{(srW!PS/1f?[tG \P//t_9f=p [c2KVawnMݤ,6gz7wz` ~2)r~ c>wvBO5TRO'\/[G hHXE2WMUҪxYP-3оK7>+eHgA#eF-ʯua8[d?L?/qtq)q+G^_Ǣ m=' gו)>'\q9MG٭p›nRpIۚ wc<|s r> 臒v@<'7{[xD)k;JUs *]Z)p8췰|1ߡ#n;?:!y|*Qg7T WW BsR9--[]};<#fe6I%}hbV n`Mz5ag3o'zSߕG@8n~w_:,{L`I{Y;CL6d,6/Җ1>ܷn,t`@ м-fOFe|Ghx 1.Sf$Ɨk>/u'y*"YX̡Rt/o nnUp|㷩4lQJ7Isסp;tTRw&i5 ?㙵 U dMyp_(mBGZ6uSO\ POvpPӌ氉#>"AB]j5ÖE]voGm{k3S9R~Z9/kz贈sT~^@xӑgxs%PY/\6: rۣ(Ew*4g7 i ;;7}Ag3%L܎a/ n}e U_o{tL9ZWȍzʮƈ} Ӎi2ÿ_V>?ä}qS_>5>"Pntk5~^ Lfϵ:xL.,/. lHԙ| Z U!4^WL& Q/Y'QeV)uJw_RsЀ?a@ \:§Gp@P_U#  (&I6a}BXmZp]IǞG. 5uQ#@jy?蔷+ =&]>Z:s|6s6.\}%v핒VeF E2J3@Ey܆bCG<0z=u:^ߙ3lBX}9^&D!x<0;]9o=x:=X*0;|-'θ7GA;J\ 1*яڎ3n-3HL*+ytE-g=ꗗuyms|!C5dc\cqf4 ~.*[tmwYg{2p,? __{I;&U v׶JpV֫m sTuiB ++cp•?J~kԻQc |Lq9a}څf7+'y BiOzM+Lp/cLdbQ}zp]E~} =*=!= 5 77^m,JSpye hzȏKy/]8\'qegG¶3kϫ(9%X܃JT#1|ޒ8C<68DV o>ϺB1 >3mV3C^^ G#:ddJs|;@C@Zi3k1ӹ?gng0 3,z$x i=ƳKzKqJnoP] @xI߾}ݻP * [ G}TS#* (lV$ng0wH+z3eOvqV,?54ՙ{䗻2\br ^g{> +7YV:o꯼~UW㼍qmmH6of}rUf\!}*pO83cƣԗ]@Uo_Fr#*8??R&-Ih|`pzKE'7R^ Rb;͂m}H]?[1G{{-B S&<)}8?r?[\F@3,q =gRDXoJgg[t7)ryo \&"E-PĪE-2kmۦ z 5z#UoɬxWl_y =N4ЖFn~I# 0H˹%{|htW 21w7 HcX 1"OR}<}Jp> )cgi[`N_!>_쉐u?r@^OW{i1TY#1 L{ d(yٯKnsE QÖRV~Q}ڗ2S+W "ePoFez>Ѐ#@Y6>O y-w>ƴcqX.:rqi;wvkv6lpL7<  wK_/gygo.x"|bz|q8: lSfx7-(#}&{|y _ 6m/)t{ 0>xJۗvsnL]_O}P ~4;V ۲1`|*bmit\g_a?n`u 0v*Vc_td"_ )(?!H1WYoz|&BWrmO켖z?y4;AW܀Gޗ/2/~ l _,9k C0ҎV}(eMQMK::.K/Y a]_}˺*/+ gy6jL79d@ټ]'rݽa"'^] yziz[/ulNL0}sN-8ou+5?TӤȞ_c&Y;fBٵwyӆblTZsZ޲s"q kX9Au_ 솻`;  ڿ:!@ٿ\ow׍{$3cx-LIZZ@5'k :>Ҝ@Z[?̀,|ۛUwujtFpF$[ycgc/~~=}fw/tF &wf 2| ez{QO0 <'1τ|XJ:ْ{ӝ|gK~[c1kHoRd]igts04|!Jc/JӰ6ն7z$&KILꉀ/9xK@B@]gXgM l|g_/UbA^ρ? }jȿyek[ZXg]3_:o, ѽ/ƽ'3>*;s2nƷM7%)IWcKRN 8'@ݛ05#'}+ :=Fu:QcH˵.U˵R7i^_@Z=3_'͏cQ kox6w%?MeaxRsW蟳? 8WiO2R[ kCe5 ,Wי?]׽=OX_qe^CUYCSƙ?_ s(qUۼ^ k! C|4"weٯtkkޚ?,8,-# ܌/#u&SG (T4|ev-7OgHP/p QxLծ8{#7bK `{_3qDC?;IP۔u{t8/k,V^;h|WOa- HxF+7UN嫀5/O 5gɾo~]?ǀˆi.Jp*|@q~Y__>h g$ޏgtylVeU4'G  Qa%pN}n٤is2Z?K),o)>p֯ђC> Ugzpj "g,wl()=:U#%`|/3}U Kg^W>҆%C+9#}뇀<4T Qߓ Yp4ak5]Ҍ뚶%%~A^+R'-֟鸶Psԫ05kH8f,{L*;.yr~7 |6EwU7fgo/~(+6Op6^Z_%;D[Ѱ_Xb[_C%U~1H'`hsrwӥAnڷNp$ Ʃ\@cLQYR-:=/|%Ѝ1?QcRd=fcaXT?Rr/t]xO ~PL%̀({6TAh uQ(GtdW>Vnlۆgo&.avj3;}T܌ c ?ig܌I!yFgda;iϰi#nȩcN~7!g\gFRggz~i5OtOcq#2THgNaef\, /4gs[PV UDUT 1,/HUiz >h@a? ܾU/*-2cYn -~a㖻wo${E}_}?G~F ߍ[/.*c 7υk\tgx #s({܏5ԕO?C|L0,,c4, ~du 't]]e6m]ZG=q=8;Ve!R2, z.,o𾹐͢"c4[YM#}f͖sD1}1p6+[8%S^^p#/|(m!D>p;d|[~ѰA  R_ N@yt۴Ɇ{α0hYK8s(SҲj{og|+mx#0S~5mԸv!7'og. OU@>"yMקflcV` m l0Q~#UZ}@l+iR vf!@eB_t#*g~_ | *x쎍t;׷ =k9qQ>'2z7d{8LXH~m̼Yf(]6:߰+y@t@c+҂V+-xO>}| W5p?sXJIN 1M>R|叱^c H}?5`uԥJ?f!-]_~ߣ/_ݚR-&gcsMfga )e0pokx<FV °X?-)[`I`3~L~]ݞwQYG*HB mc(Ӵ7S h}M -`W~(xJJdUμ4_ՄOG`5{'ۇZqsh[J|qK@W:,Y>z]Í7-yRyy^$A{!,qvoV,;V*rʺ{I=0g`d1u}oᫌk]V>t7)rxo \&wUzN>eA4*W' O W&svWgx*Tl(ĘG' =j+8#ep3yY2S+Ri#iD %}la#X͛sD_Rv|:J~ Џ}H9)0Od lYUHX%+uSa{y]UTy]x`?ξ4_js_J|7j Ym9}\経y)+_MQ1(oߐC1ӶgOީvfΌ4ݴ:/O7<8:{]! ^f؀g (i#D /w\+ +Q5 c&f\D(XH<J@r Dw_wo].})k@?a}8ග#` 5Z`Cy_F@Ao1PIlG%?*Kֿ?MU PC&3 |R`}ƭӈ`<%tx!g`/0`,Ǿcx@wVz|O[ns>8΀ +zoh:tif#׻04J+DTFحOz+?]lzȓyV_C#w  I?󸈼j:ՉYs|%ƀoεOx5u]7g+XpX.[%% dw޿f,ÿ?>}'1<&B׫D`TtU*Q,PK@r5e}v< o 跏{˻'@AP-ْ^߆]A.g>+e;L dߖ/5|[ uYkZ\筸9FWq]?z^SrP&yqC Mh  Q`{oðI$ 9?cJ_o0>,#O5a_ O8|kP'+^PΉ~8){`x,+u=O{  ֵЌC:4He쟮aJ?o[z]܎t39R3.++=YW-sťl /*jȗ~{/^|6Ujh {״z9 l.}:N} Oߡ%ZS1࿄M|k%* "٤'0v.?Ow1yO,.H}W6寛_ xɘJGe!Æ7O{C||his}oޅz 3=g,:/CJ;ix 4/ރh6*@o98>ҷuPY?Docs6&ϫmLwp}(P퓖YPȪO ~DSY:u4j47zx?jO84ƩkAgψ!>^ kpV.(C:8e i-<{G ξ3tӳ PW[* '#83{_Y'uVM𓇀U_+\V[2;nj {hONK;__G<䷀kg:?ozAdLfsrn7\jp:X?c OivOFQs5T#{znz|[{?6翆6OO n g߃;@,>Nw\q ٿ3#F0/`ax j" _4U~IoW>iuV&oa"(NkߒwCqa0O8Ɵ|,3rMk]T$~O]:x_|^OlW-MWf\EZ[كE+~ κ= M1KK9eO@<*AyU2 YU^d/,`!pS'tm:րr L/FaBeԼ9nуZo[Cat.uq =$51+>p@#>k>)_lG$?"[{u{UDPζ~WmR _E]>y0o@ҍ]Qa.<YB?=n۲ALUg!jOn\L͛:.Uv^ym1%qw,+e7]hh@~=s=51pY#A}+7w}^ ȭc9ּۦ_;5}*QV :~)'U8 x g)q&^6PY Ќ:5(&߂mx|ڷx*'l~ 0x*\~--Ӽ9~,ܲ}} _~ֵu̜Z޴ XZCw\ѭ''Fkʄs㩆Ja}kX|cݛp㻉kp_ƍTꙉIiKExC% 쟲*Iw컋 U%J_\%F`_㖛<}gR] ڋx@k1Gi}9E/7,]hRg\M3.zI04 u5(4B^dRcҜTd?z"}ORԽ 79Kk7w: ld{8g3[.;+¾]}Dc}j Rp@Z F8(AgM8;Ǜam.>~.ha}lWnM-tNoޜ4Z_u-L:hr3EWP @03vm^- W>E |D+CEW6*Ǎ^6ez7_qg-~Z3# W~1o<߾}A]xN# n_nUyY:'< f({#ԝٶa֡rSoAwDKSܾ` /oʖiz]i9~ZO[fnoͪ};Tf7|.=J- k_ M' r^M}xφg~]Zfk}pY>ʝv{f;_r>σ áAySԕouF$?y@AD/JR^ LY);Y|c8+3C'ixd|& cmKrs9ݰ| #+b,v--ChVFc\St ξ  9SR=J;>#,䄂LD :Gn"9Ie\?S gD~#kr\a<+ѵc>,<Y'K.p#^ U@}( v>igQvNOps Ep䛜ʑoȮO}]9QV4p2JMhCk}VPM[]()^em W9-SJ`]&SQS?iCz$Y|eu\Ӝ~vԓ:v-?r `*6 ϵ`_o[׿^}P w|n q{l["Fi<"u7 0(xqnBeW#`([@}vWP-^urQG-=Yc=AF5iyZ7c+c;)[x(r::^aZ vL*[?cȲ[^Ӯe*0rp7\e;F`u:#֍ X_(wŹx jw aQPm>b<<Ϫ(#A$o|X(B^(O>SJ"**1n}s? IK5^e1xۊWr*׼5)VjWONx-0-w_h< ||a̍yLg? /,.o#JCso`*]RٺACBojyX!5FJM; )A{PnjkŬUi[6b-5MZ?=#>3֡Ry8x8&)|먅3;N[Î;9C5q@CNqb =FG}2aޯReY^\^/k `;pBU%8}B  "/o5jN! +[mJ;.Dp(hs}"_Lh3pHi Bնj4x?G̱iո`8,N A q'À6Bs0{J덁ߧr߷gn8\دg9Ƕ9+Ed өLh00?ꊡ aX t-֣޿_\^ y ]J-Sy(\|'d~>c#6"zR^x5ޗU1a > &`U\̪p'O!ne+]WrQ?WX~GJp]S6J#'OǘRGpL)U`3~kYiCW^L@GZ<a\h :F0hXY*CRRl(NHY9I1jy +V *w:와PKv6+5 Dh;ox!]z 0Bq[ }R@ޗOڜ0}?}%w'h\yvGv\ ̩[1 u\W~ Y1p`>AP :#2Hڠo{Bʇa,@sFPvy`& 9RB q?j|V8YS9@vDm-UvXeWK||5ʘ2|]ɤq.\9'o\'{񑫻y.4Dod^FnhVyB5>Y4}MU9 7u7w%fknx g|}K=ă{j4i}c)O%ҚgLMU>$=TLNJ6QbxKSގ"w^!NbLKeͿsDM!4eQdV}xNZn6-yrXskH +S9#WU=6]8]8f@qp %/wpowBcQ R*B>J䝔ρM╥^ոQ'Po]o9>JIZ4qp?=V!y)zɠhяkS=imٷK;WOm6Ckƨ#g %sd ק_<ҪZg0[?1V '=>BU$,)qxJ>ֶ?}{oKC\_٥۷]5k; 7|WJWrX %G xP?JVA|@Ҥ64<}.U@+ GiӖ(rVܢ:\u}M@ |^ ;K{՗i1]1Pe{<=.9}ZO|JW>gM=)P4B= 0U#Q.p_q[ QCF| G?xIZhГpCHhop?ǡnP;7R)(=QQ9mOuJJ{Jֵi/h9QVES(P𓺦.W_cg#@[Ǧ})ICpTEjٔ鲬Ͽ)o8mxř̷jlrKΑ)(cdH]{ޕ5"K6>(}@O[ëfSv!6F.d _07˩6ϐR !^5(Tkuz_Q+(qE[`#<+ɑt#uYQJftGH i7 BSgy),\M),MOޞ" ^Sm# >"sSu!GQcEy;2Bpz`\9# i1ae?ߩԗΝv {Q8V(=h='eGIt&k7`z9J`lKsk [=كw_, M6rʏ[y@B@MKw␯5̬-:WKyTPږ>P12% / *o.NI=)ӹW5\eߔS_k+c3$@g_ agb2T!SBS(?NOng(uQ:%^a)h]`0P@q1m >ƩF:eI_x}y\^ڿpdF8T;^yW^˦ ;DCg`݅ HdR/,YQb(:O>_por&/N[)NJ0 p,R+qMDA%(.EqbU8yc 2<ީnX`,©Rlp-p) <ڼ_a>h >[Q2nJ*ӈ}LJ'0{ gka2 WΥWɷk?8h;|)N@/ʑ;X\C'@)〕>;?iq*C?a`@@W;2Z>IE綑{b,5~^\}"f+ R~#S52MP㭴@m6AKoq}jI)V9.m9),Pu4Oʿ N㪺Vu>sMeM{։'?ξ?Id8_iʚf~Mma}oyrM?%M9_y<[9ҵ!mvL/ojqh^} M&f{'v `R0plP|/U[{Pa+<#~p@mH8m;o>x|˂ʟ8rNA}kGJ<*GmfPGu)u w_,v- R8)K{ ojwжkԭrWvsx?\\rJD@IDATokm`fWK&_+ԷD=/C>{%NZx79x}} vR(/Js@q =׭k ֓W< #/]|< KQ"!K85*3I)I]Njw(Pƻ??kP?(@U<_x?^]a0S0Xs?SȯL/@MMnstIGQ?sW8iV?kdN.a}K]{*!@hɥJxJ,5iSh85x9Q4uy@mpxx&iBH( \3iU6"q sNI  VJEBxc@c cVi/MƁo?(gֹ pw5Cr Iw#,["^Na3F.mELą\{AUG{~ok}7-:ZY%\_275wlЊms$Ꝃv҉3Gmƌd~Pp #Cd2a.42;an`(2V sϟUoVk ^kg {_FZɢ;.!(dxj6vld@?(lh³Ye&s:z"cu /M)/c2QCxvU~‾\2HKQD |_yzĚ }l<+,#Iax4~ۗ> W^y}Wv{\+C_Qpjy_cpVKR,|\ڧvOgb 4:u1PZ-xaj_miGc<1(__fW7xutw Bm4Ec7+a/PuTBa55#Qxxal>툒 ?*^uB1gJmW [me_q  m\ .ЖK'.uj6Oɴט OM#ܧˌG`&#T*򧅢/|r(1&CGViNC5_@<'e2' Įs90P@~REuiP;y QׅH!ѝڋvƕ?UFq M'_(2\KX 1~?ݯrg<*mO("}y][T 34[x#[Ν Ya)b♟B~2C&mi+gw2YhT~#0 {GR:@4:Qp({ (l3GSWҒ lo^ s `,p,e?Bn%.V5^<(Bs;g2?"]IҧOrVwV1}넧ms ݛ\ۏE'(+oQͧy3y59m\!j93s%js ^s';z|_L[=qɥ-ɿ@a ~Px QI<%>e5dL+EǞý#]}av-y=?H< KL)/.}.+_hU.,!'Ncy[(4WB?+"V?'2 vX1#{ÎJ!imz[7#FM۩My+/yvk@dᇒSķ;Dq7USyJi >#Yչ+ٕNvK3s6%yU$#>k2gI//?[h0w>8WJ#O9# yՑ?.ahVsZ!p xunVy(RFPR{A{Ǫaڦ4@Jʢ`-5J#9M(i;?ӀIc ת}5(4m:;l,(kVLUG̅̋&zkB?cbs:>g{v G=Jp&pț)`HXAqzg 3m=75o4y֩泷Jx]z0_nq0v{AN,G`=i (\?^,1jLLV_Y\-s=Cc)D+Ҧd:V6T9R c$ #`42gW`P^&60׊-x)eJ4fzE|\dq]eP;+iaSs 9xR'bP,Ǒ09n*kYW^}Wlyg@a"mkwC HfN{LY7Ⴡ* ޿[8x ;!ǝy<4ϫacPp8eDghd:Qr2~O^\/.d˖؛*]BS7p"CGy[_J/.b/P`g\T~]LOAcVDVϞr IeL/z2[% !L{~Y/ / WJ4''ͤ<G%i8r?4PV\0ks3Li6R.w29 DE<[qy7s v?Au#1Gƫ%m'"]}r3N^+C*JY|7u"ceP0|ǧJg+4Gd(UR4Zuǻ7P|G}zGdi0nxb@yvOpJGVqBf 2'l8ȓ|s/72x7eW #F5;C5|߾-O>pͮ֍q'Oxt: U{\uyG`{D?ȹ?q$B-p:?.ux&sWε¹꿑JP+C)99PtjBXi%O "]^Bޯ2V; A0IbwүPW@xT.8yʲ:(aTaόk䷓\dC<@fpV΅맵˻)7Ɔv`u}/zGIc15gUo-FNh9"%:Z)kP9xZ@@cmĈrk!`׼G{}O-Oh r& בv&{!e^Aw;x(Y;7ק>D% ]*E\ BkZb+D\Qd~|'o88u!+$ `O! *Ga. 0U"F\vP<4{Iq?]s]m N0xŮ0ښ+9v!>KӼVva@u1Lc8 g>8]MZjek :_OԆS?x*妲_d` LRU| @CTc#g31 .EoTJ\kt)3)K\GqMZ[)?=|1۪L*xL-N Epas⾿9;??Lf_R])%J cNvRJSvd0$eeI9}uU70W\yqX/|yoe<\6/xPVrG~,=Q}g޲:f<9R*9c2p8$@#dÍhkvc01LVx+bdQl Hy6j){V*gGko}G)KޥM6cDs%13d}3y}ڵH"ƹ2WU|&d(/C!S]y\?=7Dc#^&ġXIs!N6t`<ߌ!49 #ol͓0_Fxw#0 ݍ囕Q+~f> I~VV JMu?gВ(YZ|xP`b( Hz'R=6}m)sgW>&錽J-Oň]r_khْ?Fqg\8з >!k@aƞk#_]b6i*|cK_\YճMzd)oVX>V~)aUL=c3?=.2p0gxN~䙾}FF xvnO G'ִv9)V"l$$#@;)8UbbS>¸(L(J9é)Q V"UۿMy/'d`>wTW zW{+[-"J֊r^W Iz$y 4& [D=7P&|A@07 \7yX=o+r@9׼_T9YΒI^Cj ́}m=δ PGe~!]3ϸ9 h'2Psi0xͯwdhD̖ aEEiV=cbX$VP?N$Ռ"7W{Db*b5]Wcǔk͗|Z9=Z;y%cmXr}%|1W||Ew|7%.5Μԓ;*/w.W͛ M?(=`̸j$LZ:\5y)T'^:PZ(МHMGy%S&wx zCU' HjM^a[\<ԡkR S}8ʚ D#S8/ᙶ\|?sc9 86~w?x=#׊yk&ډzwZ *Ӣ̓PG.>g#*ku: p F9oЉ:FAqlk `C6+R 珟xFƣV^R `'QNs0_kй_'?. Q'(o;xgcPWl,=hZ.>d<]%1y1 :C;ȖuJA}>)渿C ~ε,Yn Q+U~f`o@8i o61j}yv2p/Qy6#0 gs)^_CiY!z1KFH<ˀ-W7/2mFţ(^.Jv ⬐OSI3g\q?6mhX !/[>2U?/xASp07 36g *b>'~Ҋ Yi `?HGnbN9/i^Poc?;uG`O ^} P3 jz҃?%+HQUQʨaA9:To*>@ۿ奌@,VkpU@(uoSeX_Zy#5=#W >̙i@_ R{ ;aWanc@߇ 1QeU>1|JK^eg☜-}K MġQ} ܧE9Rx &+%@Tq3LQ[99.Hx?M'OȘ5kD2˫X#ד1on3$0Ly+\}/wu|/|RZ53QxrO8-cn` 9=i<8p3x%~G`!!#!J"a+M-I(3<^<'Qxᑖ|UvU^xQx& O^x~2AFxh5\">d,968 PhFX#0SC+~m/iVn#3ƺ~\8'׀55'T>̣CxԵ'\ +8\yh . - _py'O8~yG5W櫅GaL7QRVy@;|Ru)30=LU= 1K_EЪ@8;;1?dy @heUmg+elwUucpgfbK#aW~յ"S;yJ>`}|h< ӌ׺?ڮbEj=C{l2 SJGU%-(7PxmȂU (ʊJ[4[Ȥ~\}e{~mrGKlmt@-дl(tZNe#Ѝ'W! V1 ?Uko/b=/+ހ)5?#tO F DQGzɯE@Dַx G' Gy)h|bI-R(_s dSes(7Uܫ(2lTYMV7hTm%}eȜD^ a-yuךA>ȇ~{V<: 3Y#z#pڂq=W&v5H?.6h:W?_wg8a2WDE)Ql(9QP8 2QR)?V|ϋ~k BW7h[RVR7p+^S]Fm 8axjWdټ p1kS$6ڜcm#@0O O21pĩ3|;a̙W6Uqc1g#M~=sd8] hHQ`QnqE~hdO;R~6:D1ت˽yL( TE.O]3ցDGy7km­h t#k*̉0 /{%30<1:8?;9l1K8 ?C_P[ yG;48U jóMxwZuGvEaSկ7чntZ;RW*^a<[S̉LQV< 8׿7:pS|OB5z /I^ To8o no6sT/sNMKA2Ϣ҄F ڎ<;2ek2~s9(_ @F y,K~x(X(FT>X o wD[ gc0queg>%NO2\*_r`u(L/ah#BKa6>z+2jT .J EeLz 4y)i:1.\oU;G8 C#/@ZS)*o<.ŬP@?ڽrЧ../6(؟Ȋђ2Ώ@N?y48.W2s]Ҙ-A'jbw-Z+p {XV>2S:̜@V<'PsZJ[vt)Ylih)E>U=*Jqi)k V9瘺^+3)_S@!8V;$}+j;q(y\6]MPC]0,%?xe>vA'>#{H~<#j<|ٺCFe @T򗹡0Q׼{h3!I#;`7jՏ}yNm^Sɲ.aV~lU`e!Nlv2QVRl[Q;O vشۑ4+fʟ m_; 6hVxNQW{G_~d /eenد՜|]䯔F=9'4A y#o#X8a=]9sȭM>y{qE(%ҧIg -HX9 >s3"O՜=@X O0T)^+y? UvDm;c,(>\?}0_! zLXGi,c +@Uj@apn8.2Zީ |ecdQ]<9j~(7VN-_ nm+K|i./)6ōoČx{ͭ'Qæqs/8?.رS/xDubx1TOOq= i}zefwK)+)K7v.hL sxvyП>zvƙbV|I?ZAo]PfE.t8L%TԠJվ< .B~kJKU|@c,~-A>cqXs k{"8q8rUe=5 O2/q(c{^yy~+)쁀?f9/s->aIv }+olXũPQ?Q͛dH$<G+{O1h-qv/s?o)cE~ %J8~'t(.]ϙRg8_/:soG<"Bh~g'3rWn : ?]%gOӗ&GalOᐰl8/UaCPWZR"GzTe|?Kk*ʈxVU%Jsim+ c~+[Fm.V*WRqnUPy>9gxm dxl<+X;yپ^>/!:])5K<]Yƴ"K?4yw:>;Bwy#π9jz˓1 ~Vn40ly^ nY Yw>}sa 5uQGԢBQ6"F{<'y Hu2HG?6@b]0 2+ MPM.wVxs}q|9m)5/<\xq.ye2 %^ ?hE-6sFyb<ϹGg$6U??J_}?4G=3~(Nհ2G +ҭPlMJ ʋ6$JRn\+1z7o0d vNl5O0նR*9 ][/93`Fu!1TVJ{G:y]!>}>kA-~eR-,Ʋ5}.\yo׍R>z9|5 po 7FY PEBKJ` aȇIC18s_P.;zG kʏ?G&l0))Fn|[5S:Ã?KچnGa<`3wޒ5rNe( u\F@ 8n.x.+y!s/W~$V':n> Dq o_S?>拂g2*xS;Z=pQ[LPJ36i PP7r}M^xʅ{ڧu5\U>9UG3ߡί4\dSy4` 'ORG>= h"J(6K WJQRvNNAod;~f0Ly$Wc4_ 3f1xi@3iw9$Q YC2Vo(w hh}\u6BKw&z})LZ2W+rԝGß'd<:(WJ(.xPn/ᔏФz%P?#_Wkq>o' 7Oy\;?th_%a ՐpSgmb s'n  -*6Oox~Rʫy*kpfTڇ73#?2'ᇒ^qg-e;`0Fौ@Q49E.X~jVjY_k-z-nu S8Z(?10XٓVBǼn:V]QKU+!ť_{.:mixl姜P9dz=c|M}˷mz/>YܚO}^q/c=8'9MC+4:G;ք{PCS&t]=t#0 QG (P48Zh&.|iu~Ua>_ Y߈.??ß)ހx@R zaH؟_ 8g=u!3޼`@"jqԓ{>/qe6(@g>m+&dA \ђ-FW&((#r5ē1.Ҷ_j~lLyfJ<~|h!_,wW y 8}M:@=Sq{#JI)=8@[>oaOXx jzh_>j7O:)OMe/e\??nȭq906$x&4d05-gXR-{)7(JL5'> <ϣ~?; s#IDATgsϟ 3"#^Abh'x OZjMvДdPȋ\V^8v^V}w~ +%gҧwiI=[G#s]z}Ÿs|7[,^y3?k^;u>ejzxPiu'{r y^ZU-/]JC@WJ>g=c\byu_gܑGrVmV8OX^ p6HCU{cLȇ\7M;SG^>Zx*9hgڷmNoNvx6R6 N|#W\ġz_s嫬~#0 =\10D]#Ţ#xu}\:^Qȟ_? |\'wjN< P^tzNtoi'0 JOA1Dtᣰ[:0|F@I>kq)\x7;Dk>}]Z*o埓1NjFWӖSfЄ305T5~ ~=';=nݏ1(92|U?/[?j w oSsF@5\~W<ȉǂ0N}2[SW{4@O>+xSOoʗMtSZg#ex*^'^8ޓ is֓0y?'wnG#P'~ HaPlKo $#DYeʪ@_ ʶ@>OoUw&>>`}F3f1R&&8'} nJoNJ-DNa=(&>xdQxU?>϶uQ O(=/д=q(7_/q?pL8@}.>TG<5th\9Hه#m>SO֟pd_WW-3?x15>DQQ (qhUH5L}C9Eɣ/_B.#U ܽ~NͣxܧCxU]<ԑxOKO~ͅD7ECW/9OM3Cim e%=%m5xYkvD%t#WV@ +4 `ŽUyȍ>-m˒֕W=Qw#0 ݍG𗛶GQMo'){j_ λQݲF;@6]V ԡ(> /{JCz^5m.^(iLz9s#Y:F୎0/oc4~_% i"k3'|@JZW^\KR+?P$|ykZGn/#0 /c1Bo|&5?ch N[@ZÉg@(8s{_КP / xϕ_W%.ex#0?'<߁>Ny6xJ{PCs `&C." y (vm*o 3Pxy^$Sm}Mja\/c{x{)#0 rF;mPl >~\׋k^,2[~}K Jvv뫀wzӶ7\} j<ǫġC17_8ڜvdkX'2 {@?CQ@*Qտ΄´uCᇒ'#0Fa#0 ׋].kyhSE;Dp]xr %AK"@>I1|n L[=ك_,~ő>L!e0W=/=q)}[A_˨}?ɻD6xmma# կw й>|+  i}@gYSRW;{.~v$0>j>\a.z=M&Z\pc< i} GcXV _py p8P.@_ H f\i)e寝#?qq*7wf=XhB|§O ԑ1c \ь1i@+nϋ 0ĻԎ@BFwIV- mH3`{@J6'&c!JuCwk1cv;xikFŚ,bC^ ـ:@{*0-ZnnxG;  \y߷Z~ֿ;Kϸ՞-+ptƑ^]:*/k׷㯽O=U0kG=~Pj.cH`{"ps];  \@#mX茀 -NK$P|[z:gVa/6{JZMbp. x#0  Gv8V8_ I{' >׎^^iGV.\TeP6yZaNs~l+|* 9uOz@<HLPx=#0 s-GOv4@? (wl @Ο'y ?7WVp 8y'ז8?8?@"1(kzNh;!fg8x&)֞LeܱV&>^g'-8'y𵥿\ / rveDj˟CgxnH&+aW8>IחϭY˾t/ۄw]ۦ#aGw~#RZ1=߷v 8?zg/OH+VOpxOkzAq1c \o#ZAx8'4=ϗEiA8%_瓧R}ڲ+#>F`ak9zD@M<ѻ=pvMkI9Oރ?#0Fm0[_/:hlCI%xd|⩋xdFnɓ9ڷk..y˫}} ]kЇa4d#b Xq;uFq\:R~BSfFp7<xt}D{O4r FiKOM8e1c m^PZ>^hdA# ̃ K;CǧHhO?"##0 QY\ J:F'o'J oFFd:Fॎrϸx2t|p_'#w‹l޺0"pc^+6 JFWD+ʟ.״ïpugV(#RG Ksj0mF%6YCXMtKR5k5M;M_ץt~skKox+Wzso#+ڸȫtSꫬ#0F`1[@9Y*\GS&sƒ0e;1c606H#s:#%>1c{ܴ⏻*rUp@KMբ5^I,۲[;ۚ̌<.q~c0y(PyhGUk듩?#>Sϳt{SusߏvE>86¶Jr0@K0F`Cxu_!0f9/ԛ#` ` j^c@@{T#`R\N%`z}Vd͹M=-<?/wL`f@Mg8XR?CF#0J<׸v]yuNA[c0"cy{9:wqpe:#`fB ,׶eNmU7?^8N[X1[3YL>ϡ0yn9ʵg:svs,УjLꀝ PgǜW#R4vLZűʐ@?:Ӳ̕ԗd?oj0Bq(gqSA'Kò: D#0Ҟ?ݰW0R:(v7Ӟu\z{ntkϡW߲Zzk_7OXtp68(tܤg#`>06X_4:SAQa@t2L!ߡpL:iŖUF#pM|02S&VA@F'B#U*ɿ@F pssoZs f&!ȓ`lIc̣@P8)|A=}{mΔK#_*hsc2e`xLi ~NN]+~1F@򿽽-6vL؃ `:HvJ(o_F#0bm{EcwFZO]GPNR)R򵍀0 KɟT 9n03cбjϟ;Ǜp\rotMר}{?zc(@1PEmqho43&QT^XPя†^]{;}h߶@|y1|ҏRhc~Աt}1;3b sN{v"ݻw_n_z6~q_>>>@R4@),1!A0Ÿ+,C4~=d\ng>϶g= W&wG@b$l$|+4 =?Fϟ?waaq;m9sƵ1ڶO:J3|_p7o|y嫐_D E (@Ѿt#-gG3@ċ 8e{DЈ%I|ɞI( #_#>\(r,\~Mu %'fe?dVvuñLPɷ7>)xLуj\L;끐i{LzƘ^uM0F@ y&[PM ceAS`r=xC]? y5 i ]):u8g8{ўA P${XO-fX"y8x&ݾɄMZK9s.hͮ3d:ULt2b=(ױ`WLjKÞ0F`hG52&j2dz_a47C ɪcd 'j ڡm&Э8,D-eup4b|:&&~&}~']42#`΅b65QgI1S܇s[UsypM܍fsrc‰Y0¦s݌0K@1PePZN ̣ <KJaMi˲wHthڨGrGyHY`&PEyP6D"2RF൳<6hL)s@V[?5@@&eR:R'1=`280FRJ^LԑQu҆R`Mp ` GA"s8;(:ׂr\ pnFDqF5n%r@Z1-! p&bhU9IKqF"&ΙuA\繐qV @z &_RՑ(;2s11ʠ57F,Z:ecY&5/w+q`̜)Adz-幔M0&gEeƇȀ>m|  23LJ o7  3FLJ 㼪| 33wLJ 㿠F 0Iɇʽ\  !- 2ɇ 崷0 131^ʇئg8-38RoʇḪ}uˇàˇˇ ˇԅе{ՄԵvւսp׀؁صi׃ق¤հf؅ Îcك u{̨w€ځ Sm‡ÀۀmZp^ۀۿx^^nDXL{^ kJ*ÇDT]ajwe^g\}ćшC4cb^^`wDoć߱ W]^bzfZpŇ>CV_gke^^nŇbY [^ kƇȀxZT]akLJwYXT\em}LJ0eZ^_pLJ Tx^ pɇɳ/A`^xpɇ 2m`}b8ʇip]Pʇ2ˇ Vˇˇ ˇԅе{ՄԵvւսp׀؁صi׃ق¤հf؅ Îcك u{̨w€ځ Sm‡ÀۀmZp^ۀۿx^^nDXL{^ kJ*ÇDT]ajwe^g\}ćшC4cb^^`wDoć߱ W]^bzfZpŇ>CV_gke^^nŇbY [^ kƇȀxZT]akLJwYXT\em}LJ0eZ^_pLJ Tx^ pɇɳ/A`^xpɇ 2m`}b8ʇip]Pʇ2ˇ Vˇˇ ˇic10OPNG  IHDR+sRGBDeXIfMM*i@IDATx읉vGlQdnw{ۖHpz U)`Z3PUqj: je_A  zVN^ϑ -vϳA  @A  );@A  @o=A  @A w@ ~ﻚA1A  ~`mȉٵ A Ǣ7CeA =F /_7!'[G@|5*YSA`H`w!gN ), A iRx?,A3{@/SΝS@@ = ?O@G cA  DDfyBI4 ̎ > , A #𤏘cÑI @xvrC>Iȓ$ R,) @x/oAo{ @E˻3Bo\lc6@{Rv M}v͛' @m|[UQ}bِ)l# ww?39r>-[|4f|A  6={ܑL@x߁$,'ڽ=ʙwXXу@A l#٣ȷ Qی9mS $  )u,|=Hr~6; ۈT6m69XSXC% HϷ;m_l?g15'ض;2 6b=ޞCϝܸfS_A ׏@ 7z+Bh}~NjW{Tn?W\_D ~#0Ks>Xθ5V铹)/ vHV/G SĹWz5SZ<у@A 0"uG}նnYGG_}Uw6@x&~_#q3C|Xk_Fr׼Q@Am!0IW1ckuK[-qk{[ǬMO$q ^5)e(>#ݾ^`ӜWmֱStK:9JA 5xףxv֧d͟Y-mcwNwߵL` E G W=ٶ%;9e}~o_WmqrwɩcFA }lv̒?Tz?klJwL` E F W<F$UL[ָ}ۤr}p*8o}.>s @xTR<ڛxUqmݲɑ񑍯DdA"m}eOH+9n~Zɑ8VǨ:qcX:nrO|.A  0O(^}>n{$G>օ1Hȿͷ׾|`D D /zA O*q!Pt(V}Ug=S(G1o؀#FAU!9^n13)[Q#Y}##_ͷn#s1D  0$eoݒdWeb4-؜(A  jH/G$}(ЫZ˝F"2 z8~=KJ^=1eyTzjkl|t]{m= &&SטHr9N!U5MFSh\`H`MA C uL@[5 魷5f?ǜ\Kb-EIhA <;)<;ozBn#ݾ*>}g }XuNmb2עJcTc ~!PvgZwǯ:W/..Fztr9.9i-2$#sp8@/@ /HJf Cϟ?7óC"] "3Sc}@ !B+"-%b7(\b?kk:V ǹS>63E)hA <)<֯n&;.j*WSk dP'@GONN5Q1kBoo\RH WA ! wX[^]]Jލ7*+€ĶmqlqHc}t>}Y7# :% 7?sX۞ոѯzWAHM7X$>۽ieV*A  LXz]dAP}EocFwwnnt_sGs4({*:9e1i>G$@xZRxZ|_|bq;߶%ZJv_'=GHw7B!dGgd;6hci-|5^6 @`,.6_ǯYRvK_XV1@wȾU!`uWs6e}n[xm1=E Db : z}H۷sn :9V!X'@Gp6])S p IXG9߶dkuE A  Ğpo)}mKs_5nW7:]o +_-Xzވ=ɮS"8 5 mH^R':\?΁(pct)uI+:'Kf_խz6ҍ֫ל>?ȋ+ ^w%a_]~DNn[:6¯`+r+A>.'NLy}։OQ6JJ,;J7o8c !A:^8z"[m޸̿TSGt~E5їb#]#lX @x;O@M_cXk1D} A:a >%=''S̝㩤:}oZA <1)<1oxxمۮ>j7LIN@x?cml_~=Ku񿵏:9ĈI>b~XW_]K#fA  ̡9!)jl++5/ T׼,XH$K['otgh}̫sr#~7) R@$FAiHip}>>>gk}x//|?1yd1mm><^z[Nw<2 ^'Q3.Qw{Kl'&?Jr]@ta@dإ%ERq n~U@XE}O5smOYfj)l # }@o/X/7:6Op;>oE_}mj~Wg}ۿu9Ƽysc$@σϐ~In ylxsI6~)^6EQ/)p믿.t\\pO8(rGk]kRZu!L9&>c0&:6yح @x$Rx$ lv(&] h/틊:g!tb뼩ٝ}?;BwȺe[e_у@A#Ã!u 徫>'ٞqP>x @)}?-Gqb}Wiz$sg\KCW:~וO:'ܠEg]ujwgg?;D ^=&BVwS侎# Z}(@ٸF!Bo'|fP=p\SPw@ i_%1(8R6T#y,ɳ>ĝn% ~~w5@#{L)d#]K} '"tE'5BNluRVRuƱ*4"vsRxͿN"0ECK4ʯc;nI_γ-),(owuTc(Ε#RJn!Xxl@\dmiq?cluˑ1dӾl2+ @){g~Kұ)&q6l#]8Չ̙VWmkI :ɼ[h՟U꺣s9eW@B@ow'io8tq|@[ȹSl"%_wE:6^*B@ ڈ Jy։{L-?jGy-k}N8 # # #C`nYw_wn}?3?]'7_9Xͱŧв|xO 'H +C璽];s^c{NUq7RSBw6/t8p"A;.*`f@/ՒJlW%q7ynY!6r ;G w vߤh]e+y+VǏ$?iul< =Kb@xZz>yUsy#m|ZRq;[1yQ+=w;ܫ?RC>H;@>'!li?m.`;!:ØUu$\G_7"(A #ñǞ>`Ibs8>?y)d5@iA  Jyb}.6ğf)c^;.j#Br~<O|PU7ER^pgv|^XMqZk>}شme_a""1@G cO=|ev%cZI~ NfThAֱӂ@A ,S~|sWgPs)tTWQ\XiBcp+@nyl@cHpt u}dT{9j^39x;Xa&lR0A  @{g]|f{n5F.0hZA B@O[>^Rhko>J٪ }<SD7+= pGU-7W1y"kv*wdV>jW1x@;!N0zg68nl҅9qm @YLGLŦ1|1m bϻ4e+VZ^~NW8ve* `H$mtoA1tG#pA wPSA!msloŞ @ǚpQ|[NG\ʿI<#9eg*|LyՕ~ޥs@R SD7 NF_ h~B֑>]&vTH:Ծp8@0O)?>Eo'@05S@AAp,s6|&k4>oF%-H́ȿ\ V3ik }G.!"'*p;S O~ڻˁğ|ք;%i_@;  _PqIN|2W8ɉA  ǒ9->7Ը9q`k/u ƹ?nұJ[ȿo_.xv` _ 6FFdig򿭏1َUI fS;2) ;E wkw=PP]}ն~.prm}l:> dz}G"cTt纉@{$s{__3?.jJ/vv9(ζn|VmHk~u6 @"w-ZUmKU~W7t_<% @EwD<'GVw |P=@5STBz{3X~)bO.(S ƑGc%] `{z WƸ+\@Kr;AqbW917Oi{NB')uA  ^ :N{):t׎+#($3s߾};W_Պ ;^#Xc7?/?$yύj7?+,)2 H} uʭ~U{cU6үZ=  @xTY]]#q}!@EvryȰOT8[ŀouF&dF0\wЯ'}@ɝk='o"1@~wس>VmdJ|tҮr0ziA  ^ :N.e.Nn dCcZjޙv ї~&"E^@# 诛n(>_L w<.TtIܛ|.WGi +Q@X+ #q-G>ǐsHNܹ֒ ɈavQу@A <5kVym#֯ySmr ߟ *C7N9PlI'y*WzpS>(G<휬$~_=6>z_?X; @^8u]S9o}NL[o/A  ^;=獜lw/xFpU<fF)ݿaWIcR"(A dCY11"7M׉NKO$V]у@A <;ڶ5~95^9@+>ƚ_wZwp /ӻno_Bsm)oyf~} A +f~ >:z2FA )(x{ Eu[9?n!??;u2ov\-4.%p@ b@Rvm|۵1;UIȦ7)l #@ ~ 36;q-g @o[xɡs ?_p3}|uY_\ }1yf{r"8ku$y @FR #3dMEuqsۘ. zA nVv'i$GOtO_jk_~壮G.!(F.??䞜1F_ص@~Nh)l#w@ G]`sƬ ;OZV@*- :6RΓSnYnk1~^ YR~*?RFˣ?&Dۥznu}GY{_1&H8Մ?҂@@ o?,YuM;tn@y'@A!k-V>ȮH g&\L|#w+tz,?_믿[`j;P!0/D{:icJxr'}?=69#]e^) ){Y^|#>w^wIo)nֹ\N A  VGqK,c(qo[1lsGl81+\sb6N/eR,TP}]׷)Г|?}ޏlOCd A`H`yWsGz'N0LyAA  ğvzͱձ:/rQR~3?q}*P@Un??g!Oa^cR}M)A% }}gtۖm"v= +@`DG>Z#]\xY B䵈<1!"s PޱbGʿ5G1DsþmBsz*=rWE%WewGp8@WR_y]fiXoWcUr]Ủ&/<;ՄՎegfK:UtxzL|v^?ҭ7"ݐ#[uO.e~?j>ແCzqoGbKZޮxcQ@@ > 7ٶ\'D @xrݖ&i]\Ւ>UMc-wS@&#p"/*|_Ⱦ__kWE&LJ}%D];kwI-u!)Ed g}n{/vm>pm^sdA ĝV]} in 5v# ~8"uq@E5&wr0J9(ѷϵJwXG$E5Q@GR_?2cW+k]N>A  ^J{.Uu<Yu/6q,I#+I@=Iqs0}("SU Qժa*+w>cǺ}HѴ_)l #}B }5~_IC=sd[:Ys#ӂ@A &De|޶x #?jkW/걀"3ѣWC`!7 $GE]z~{GzY vD A  ) hjjW=E C@qc*sdF>E ^L_;C~\>ܟ*G}Fy7 W ,xyRh_ L[6'bI}`,amSh܄'@xXQ>$_kն?2 K!`ύ` is|Yb2tŐU<*ϋ!|pMuJ%LLWïcWY ?:ri9v!؝6گaNrA 7@ oGz%r%gg/%! @q51: v}v>ogUkʮ:CR@> p\W4A(JsbBGYWW<Az.'];>)"`o ү축sIz{]m4wI1@^ǁsn.k|x[M@Aõsws@3 WWƷ]$katm7¥@x#F~=[f=[OH8@A c,O]u&vCsڷεF cmI ӭ= }%@r9U8Mo]7?x>^쒰3N%Ugs̈́t :};@'-7@ og{Es08-[|b@A'0e~88jӧ(vͧο\uKf+P6WD?ȼ|ꎀ3]?m̟ʁQ1J ,dRjwHGJ+X`rHs;CkSX%@ oڏlYtԚ9;72 }(Ǘa7hWt: 1ڮc;7q7ikp?|>GY k?O* hl_Ń\&,ݤK@l cX+_"Q@IVZ ;ArcuұE A  @i8{N)(?穱ڷ֏E̾)öOXix$Dx>RϟN\qm#юrA?`F}ѧ 1w A &RxMY#i N>F @τ]wUsiosSy:yέ1<*.Ѳ5f#׫JEkWs=M8l~^ِgLDow" } Qxm ;uB"ůz??Sʽ>WzqUcBw0:;B>Zo/˿&&}@ c$2 H5 w O=lhE'+ A  #k2^k^e^w?l"uAb?NV`<^?_CKR/^ TX\%?ês ; ceHcsEԶ37_a"(A VRx۳QA !` #_m]ssz"k.0VxlǰRVR ӊ+˩x+? @?ӛأcS )xLI8nIpK A JRx?-jgyPe'_K38',տwe@A`?l{w5d;KyU_6ױMO{L`F>"X"'=; (Mڱ.!.kL-aO^:C@'-W@ g٫E8}gѓ@A X;dSV"n`OٽoO@HۖAMA!cm|%nʖy|J@_t@ȿҸ R?aVP4!wZWq9^cˑ`V Q@^J_]W>ʷoJcA   }+⯹#ۜ}kcCݰiA;* qX 83T&QFTQn M8-m'$HI XA D D73;`A  q =5uCfoĽ1'Ǭ:>%EU ~on;w/Oȿ+pɓs>:wN tWϺ\K|cH)5e@;Ɩ]7 yW^;> >tl>+{|@A ,߶G$ݯݗO:ߒq{mUq_F~b'+_+M'&]F) @m&ȣt⭰.sQ1C Ho5̉3 \\H< 'BiA  @x4j.Ȯ:政LO7puNU\@6/:>U`(a"8@xJRxJt33|w? XA Bn0ek:֭Jto*k$Uz׆-ߜ%vlU<<?TFe Xh;R˨@WkP~f_wWq sm9E5Q@xRx3GA  @x2;G@8gJ>m{zٮҹ ,iFɕTRXy'g*\_Q ]k_9/ 6]Nu'M[E?لI$c#c#^5 0?sa[B/oum^%[GNm"ι~$Mr}e H $B|_sz\W. d j|jm$mN'f_uIAn4pSȍ@R7 @x7e8Z9M291ݿlRu#Gss$ѷ%jk[Bs@,Rݫ8_K??(S0`+(?$l&"@ wDԷzl{ Q@O@ Oj|||#g @#g8xxwJVHnݼ.1Ǫ6"=}ݬѡmq{MGcpS tuR9n?Edy3>o%HU¼'?2q~K"1=~Mk&y`A <6)<6/ @k wo?ګ"}R_mCqGB V `}&* (MODqE(pW^n˝XkŤIQrˡ<6I'軿m熟c2zUoj<*VPd';oOaH8c* xo߮D*3ۏZzLƱ?seͿȿiA GF G4 @;b4m"Q~6R9Z?1JƽG+#~eQ@ɿvb%ȞHWtE/޲ 2sI:ύp֎(A G@ G1C<>:n1@A 4|>خ˾ X gm|e6O;lvsl@PZAH0A  D@$mT} y%?Ľ*sՍH:W烇;>Z4UKu%WqGIs#cɾ&b' - b@IDATiidjO!:M}ٳ>w?Fh#w p+!pKW'i=ϿCلFy~ߧZ?26ySktl$wۨ:Wvi2>Hk12'GcU.:w\k #  O>]/_^L^QPJ^`sͅ@}7>HQQ &Ixȉ@vA)9A  F1AǴ=%\24\^qo$^%:Ʃ}lIm`0'q#B 5_U~;c چ_v(V>1 ᎍm}OWxF#JE "~A  Bk\;>7'1o]OO{vϼݪ>?Ǖ&6rT;EU|yBZs{wzIn_j?6γ$h=F,FA`R @Am G)w|d{}?cYcW 3䖯  |[MU8RAO~饁뎀wDm&빕]}CҾ$y!0s6b1@H`B @A`ך?(u׹{~t)m3n%{ιy+K<@) ȟ؟i=ЪOdTnTKQإl1%M]p>qǦ!Nsz5szdA`@ k( @AϚ:N?jXoĸKuЭ׊-%[&+.TD6ǰ>'ɫE; V܉@B )dA  x꒓O|Ho4kmF뮾pߩW~QV}ߦM%3/02 v$ߩ?i;sQAZw,T ]qjmO%|6wX&c?F[}Ma݉@HG$vA  ^qua꣥8}%[zU?1Zx˿^t޾7b#q?Uܟ)cilggg*|WHmy&+s:ύ~R}ws(F8iA $ `8J A <WRǮ1#nǿϔ+m4k y+b̪+_?7oWqj=%=z @D?^/ (8@^ xzMՁ6/Sc|tڨ(߄UI6ć Ld|) %)˟=;@A <&_z91KO3yޜt^9='yuX^J\GkEJkRC8 2/ $v9ׯ2*@ps|&KGUO|Wϣs I>h`&A :@b @A`m\k3|uLrim;>-#~ƶmׯ';DZt9W_ '<Wt'gW9t'H 8?k[,7JM6=w|O ~Gs_l֎(A :@b @A!@X{U}#Vǩ9i?MɚUKs~/{~N}O]ە@b؊;DD !o 0pӧS}OpGgMIOx0&1+'V9 A";ѳA  # Aqs,GA|]$cW>y^2I%>m[#S|7}v+7}N2SmH \НWʹԸ<PdA?0gYDZ^%? 3o  @da`[et{IVchSҹ#Um=ڈ5/xl)_3Կr{y biL`#˥pWGx<zG͗/_믅r.__`/W㶎wwsHC}UxM 6A  @x Viߦs~$>7]}Ω%16ey֑϶s^[/,7Wc>W{#C?!q3+.r9n_ 5'jϼ}&{?ӏ1kx  >H} @Ak4/獤\u t}qKre] g?qb>c._WC>"|*T8o2+;.|y6iXsY <^3pK`>">٧ @A]![v!}=W ü^6@ڌa>-oRq |D}>/T*?З\鎀K]P\Q=* 0LmHy-~S:-wǶ8Uh`#,o##C MGOO8zA  0F6^8yuHsD:s=vVTqͶ@ڧu\9贕$0 =ys.ϧRŗ/_.~ſU$k~h3qNt;?}]%J~k ‚iA 9) A  ^'\C:W\nuN}>FWI.먾^NCŹx<? D@ONy.uB/\J`sIgI7ۣ&6~4һ+lS@$FOR5{@A # ޞb+.bHwk`m6mI^ zi#O5/(v7qCOqT<`Ҿ >nMz} i1dĹ՗"1!v8w Dv<  >v-yow[Ync>7xO]ur3'6 ٕpQ/FN^x"Nrot'K< CL⫎%9fOzq6po5ov@x*,, @o{lL!&.8֯ky{^Ƴ>%G5i"zy^e1@+7n_QPoW(N7p;x\@xI}hrmԻ oITcJ{:]uǛl;1@xy6A  ^3ʫ;º^tQ7e}&any_VsH=TN~7zOG׍e`z(`.'E=$ѧT>N)poe/A7P @x@>!ڶ\0b|6mlj6Rm h?|v 6͆3Fo{| A  p\HsYܸ} Pu:ՉݷOH|RB~Iޖ<Q}?}ǿׯ'z,@X\*K߿?ya`]zbbmk!d6~e=n>dW_w8S]?yZAKP]?0_8;NEut7;':bgc;Ч0] =}#~HVAo nWcMww Dv<  ĵ|5>z~kglD6_WoLkYzcUDZdl?خ1FI@N$dCWot' "CZAARfO*cm4EY ^o @oCwlHzCj_ "-49KBۋ.Gn݊_kڭ\ͧOGTF6^j5gI?:c8׺@#Fҳ}O`Am *u\yA AcI}ۣ~9Z+:sֽz,4y9u5oۇdN1}l#{ݶs-Y;ۨg*6ʷSmxئ;N(K*qnw (T&\=.x4;dfto KMw0&M6H`Au#} +-׉[s.9sg?F:ѧ~,X9{*csI>Fʧ!֤}sެ6LN{@_.?c@ A=)p"P);Z عk~ğ"(=C =A;A   `9}.|rh&OIxz?t|dOuSkqߩ"fW2_s;>%[꿈T^ *GWOe >___zAS}`!}w\j[=)8]_xߊ8k k3w~oIl/#,A ()(< @'ācrW,|Q;wMGljsGq|yqb#3w?sjOHEZW-G>_/PX8o%ȿھ IӧO'"\?W{[>w!I~&ĭ:3<VǷ9}k?4X&U=N/:P$/ TDw*G>(?#Ntg*P8h?ߨp-RsWGdz].&O=>o۶sx#n_S?]]֧ƆЪ{k= l И|SO`]ם+}-@. ]$L-7fx[IVg6b1@x9Rx93sA  m)ۮU3No{쟑۶Y:i}oʟ MudBoߜ1Fŏ!ԝʿ|2 ?4Ҭ|bp~$܍ߍnR}k/m$z?aF\=$b)lB+8)O @8К!&V}&ڵ5`W>α8u^;-qSc ΍ڔmHKGS>Ъicȿ&d5k.Oh ǏV^0c&Uªc-?v~4#<ɿ%ݧ;CkSJAHA1̄A ׀Sd5Cp} L'b_uF1rwHNun r_V~ᗏ"M[1uȾһ.2ׯ_T w6 ?HJ3ﳈկz-O˗IX賀>x} }?~%!fC{\|ǯs[GN H BBg @A u FqKr1׹3ywj;1K-!yD@B/g%m|%M_ WQ#r/'x*nݒh4]Z+RX% ) 5 @FiL޾uAanuV<)uN}E;,ɷN*GV;"|1H \ȿ?_/sL׎R?ŀ] Uɿ}='iAHA  @؆sD{x%Ug5X[:o\/[|{TvG+ h@g"n/$nGts_JcS_u39_;@M-W>Wg=m V` I@A  pēĺTmt)]egwJ:Jg_={>6';WF㱩k+?aC?p_\ p;xIFS@0ᷔkg1uuӾF#Jx>Rx>3SA  vF@hMw&SCߖC_V~XK~?Τjt&kWoÕd#Ro_}h_c|<=pGx\z6?nPBޓG?ʏB2Jݧy'<&;<)<7 @D@hTo8ͽA^YunEzU6GzQyǪ=rMuyPc\y@]Ӂ8Z_ T`9Nqޓ|}ri*Rw8kEϒ.S:F FO@ Ok ct A  m;8z3CBU1ǫmO?{ʵ,t}sCA`5'.q *\~o< YmUv>m-c5r|2c}$65ϫ>t܃lb9g$qF9mix/b <\˻N+=p[D%ydAWp"€;."${vaݶF}/hu$}4a"T@ iF A  Bu((mJM[)ZS9yUϫ6CjkW%eD5K%[sىM_8ne}*wp%s1$ܺ>67EDC 6# @AwZ5Xa~ &Hs}^booKs&Km<t(f$]ٷOk+m\>]۱[ .]KCKa#~='n7E5Q#c@A  dل2U^usm]`xMU˷cmiJFw@'_CڧUP਑nru(g?k7z)InIZ&kG   @A D.&NvnJ߶G}|*'U7MI Fۘ7l&y@k׏h,WbI[>;(]5 Gwh+}#Isvoc#F 0 @A#`5%fք>lZrB;m'N]3;xSح I>@1>xL>@EuW%䟘S@$m\Qy<6yg9\NbA W@A  &HĞ[17Bg>z/>?K^菾[wܲo—dhkn*";RDT+/`Bsp>l_^[wlcZM}~iGx8)<Ctý.,Dbox&Q#lZ#IM4TmzbU.p]d/[{{a4b,}uſxůt?}t˗+'0_\IjWߧ@tp!B+ٟkm8c Rxl@A  # ֻbp8Kakzs<~jJ\[|\6n+"<H@nՋxd@*-[ }2R <Ћ?#?$9\`=K1\2l{&KC ^τŴ @A!1q$}|{HσU7gΪ;v} c|hL, @w_ q!,ˆ6wbEncz5%$ @A lC@l2zI'n֑5=՜7}~MݧΫ>XԾ?Ph$jnU y_#{Lx wIJ*)WNZ6;nTVR^ȒI opzI9c웓yM",B iR& @A {" }%ϜN1zjW쳴oo|!nu1@+|mkO~]_i%qq_4q&I3箺MpsF,F0M"iA  D@\$AUG3ݜ?dT#1-5dM:pcUZ# h;V3<*# b~ ٛ}U\#'cޙhǍ#kZ奪o~m/*2.mI8{RI#[ȯAoD6:>ڻt:@G@lCN~ ޶<]cK)2d^ bB'bń(NlV;~GrO*]wxQ|l ֒1?O<?az0M'AtO@C׆ (?I;h F7oo?_DV~`Taw)Hs:_AN >SqB&:]zτ@G#t:ό {?ϸu}xRF}I}{2gʳlej+vGw5jANwSCUgsǵ߰>@^ Sy8k8'AMMoY"mE1E4GqinG#t:"@F=2UJ;[ s۪zmyN+:یlkegH3<"AI=4m8pEH56l;.>7V{!}ˉKT'B >,۲p" D{gbzDG#p^8G@G#tgr^43rZnm38v ~t}h)U'2 I=93 NM ?10>B/AS8^xoc''!iFG#t:"@B6]9xV%?[ ~w[8)2 ?Y?֩<ċw= /#DGOt|*P:sOM-a26' Ge#/ƭ-:iaGFau:@G#唇3/ւG>ѷN[nu@PKeL'wAϑc7DK8HwM_dQ.\X`p+wnJȥ&y@NkW_Y6ַt-@wt" h#t:"@yӨd~ƭ;YV!n{7񇌒hLzSsg|rGX?=- FB@Еa 3%z/ˆ|(ƀh /؉mMco?K;6E)pNGt:@G`@JWcrވyƁ38qHzf]pmw:m5H,Nꭟn^C;I/8@$'!q"f?_ DY/x%~)N(w ƨ,%f9Uhp&=pg@#pDttt:"CR?emck 5&.s?h?d^[ <"o[-7׿n$j} ^ ?KAG'!:ƽ8ݪܧ5u*}P4^8H^8ct:@GD@>1Js|Gl-N_i48 ip ysp|ۃSF4||T:IhZ+NUz.@[p?]|HƗn >?Jo}K77E "1'NbBy10cL (F;@G#QPqoi-~R^mx֫|Y'6ªpi2aHY;8e}:NUamU#vnGOs(볁|&JD_?M>Wgy^uTq"3H1oGڛPqE4qs<=@G#t~zH\x3Ա7m2Xκ?}>Ϻ~Y05㸌|d=pTt+WhܞuWy7pVBU?`< 8y -Qp\0ŋڅ}ݜ7&1qzjx<=@G#t~tHRurs/iHJUYi?@G4<seIw3q09Y5| ^p]^F2,Ukmg@.bz$Aw$c㺖W aA;-3nXugbҋi{@/#t:@GDD %thg|mۄ_dq7F=ƘeWq@l-k6)QYx1p$3P+GubBI|SO=W̓[ƋBO.sKwFk|d=97/N_ْ?ƍD+b@6t___/Gn]~ ±;÷hk(}'(Q zhx8=sO\t:_֍ON`!z#<`.2sULp')?n72&WR?.bOq$Ł#^6-_{JV xK/nmM¼} }DAB?9>-Ro_O{:=@G#t:3P3#y}lJ>fHf^-?䔜bR%9ϸu3/#y86 7 \k! og|$$Zge?Vjsc֋f ^ PQ@Nѱ?88< ؇R#w^xt:@G`.oN2j?5Ng?ky7/CeH ijܼ5Xsm3nHn#$U:| =e} c[L<pϋ@KIkkp="|hJرwcy2l}ț[=r@G#t:49Yf~f}g91 L?G9.ϼZx@rpn^x`AHA%>J(hUS(835vR_WZD0#<ɖxntJzgG#t:##fh1*odOSƹѱ>);"[@/#Uh_UǺ37_Uw#pVڐ>|MW:vh9mɭW*y. ;`Lq qVx e'V/S|獸4A h*ym.P>ݞysW(N{"oFG-Ev:@G#xepB#E9_5@O0hLomw /.#|.7+ 낻-/^J菺'Ip+9N\-|PCu;X 's8P:0.Yɿ#y@Bͫ[nX">[>z@G#t2S^WtGq0 _lNy<֩9펅%9Y_-_3j>iNqI'H|&Pw%eJIcP؀\̖pW.ȏ :D^0~Fkܽ#@/֝t:@G#R9{&2^0ۚІJgYød?Et@f='VnķۜtE^_kl>j3 -cPSgDG0z}J//-xn \F(Ɲ[:Z׎@G#t:S~u< ڬ<֎"gT=j_/nw ݌n~1 ½p/<).k%""Z un;ie@cGeaNp~> &x!#^ ;o)V#t:G@דzgYm@|TqnKek_aw^H@KO Q0  ]7R ut~.ρ6؎kyCXd܊mdMt^sz5[G#t:CB~3+/Kx#)P/і ;5xh[$9Oz`,޽iM?w"}ߞJ1)yHu{uyWxIt~k߸~FOh |LQeXcb, /6F Q'wWE4Z# t:@G#(ߙݒl nq%2|[`ysY>s[Ysmeτ ]TC˗vz7@|*D$;϶-C`wA!zU;;:5x-r$@G#t^yǔRz> '#2%w78@DGD^A.t:@G#xpZNjޕy#ܼ%u29ͣcy${"?τGHsLܩ|9CK\}u_|>xH;V1}nz''9md5  Mt~Qzt:@G##&oZdndl#Y3mtG6c3;^rSWں/V./IIՂ? i;j٣*N}DKDBZnz2xŽO@/ws@G#tr<><'_p?A/ᖏ Cv$3\}Vx??AəAD["3Ώ=~'\@DGF~n@G#tiHr“Ye򗀴qja|T'COF0BFm5IȺfڸ!#|gN˸۞e<S9w2kGKgSr{%R@@|ArEytsF/ Wpvza+>Gpn1]1ZU/D_^Uv;@G#xw !";zȶ,Ύ+mS۩K>Tye|} b:'ƷԦx /(:{'MT)=Aw*E/ q" >wn! 띲}0qdo'PxE_n#t:3ERdJw3]Kblѫ*Rsc},dy|1_ƟIl$ "\ǁw_껢 _+*bA ?^8IbDPO^ *]:)hG#t:yқp Kҡ>ܣu3;T%u3`ku}s>F|ɪJW9<j:N-;/ ]<W ?ʴɿ^D>Ǖq'Y׼ /=ϼn3_x;C$蟎O@/ws@G#GH*]#&k4jt 8v8 hn)}We~ƫO0W_[fq3=[׋ɿ@| z@ʛp_">;./Ќ3wM߾2l#;T'(5 ;`? SN5t sqTh*W)D6*xҌ lt:@G#@kHҗ-%?ŏftgܴpԏ,x9eF3m_Y*b>M[7 ic82W$AbɭxrpC_&ޝbogFnvɿ}CF[/؋iGG~tG EP@GD`tѯyu,c $0W.c[t3nQۖAY"w-7ޒo˰1X顳7seмI=F>7mqoߊp@^P<h=bK̂EP.h2~l#" ?(#t:)P.)` us <%룃mѣdh<6l\&5gY_yپ6LW?!rJ]š3n 'L {f<" G>jp:YHEJ߰xp۷79y>@zX|IhxXl72pإ## ?8#t:3SiY0ۮ[NE{ ͛ㇳ\׼ul}W}T~ٮʫ,Ɓ[Kk}'Xkm(ɿІI>gonZGO?`wr̶'~\`!"9ȿy#Q?S z`F~TzGEv:@G#p&+ ?2mȹrG:7ܷc3/p+oɿ}eX}*KX*IeĜ>郪WGL! o0&}TWu[|*wX:y1!|L?n#*F^vNA䣄C7-}IÎQ@G#t^O,$йdz Gd*)e#vlk? rK%U|ĉ,ރ;ѼֻN3vJd:nzkYSguHkEy tc(9a?8.{/5 !/D' +aWxv>11ϼ]#Owal ϲ|Ώ;+bЌ JG#t:_r3> \*='C/ó}G3qkȇykfij}C/fYi7 ܼ%;'ϱ:~t $6*.ޥx$BHh#L$~[{N?d 9|C%T|l'i:Gy6C iS#v]v0^iLsڝF5o(q,Qm׷#5P%~ssl3ZViAjJuwjw,=QR}>J1trT,̼chF!l%~8w w?yt_aGf[i< ڗYl~ܑ<"vDK{,Ќj-v[%EQoAgyKKft6F6:@G#0W)qכI';8Ë*|ZNzs#\ʥ/h 7n9_fZByJ6*tn{WhċJ?C΢Pd?%akN,R^ _,> ^o-(gAF_ `>w`]@u#h#}:#2UY@c?1hFG`&0fw:@GE"36mzuLv  }. lC/;;'GN]v:@G`!L-frvv2 F.@PeOl@/lRt:@Gx^DiBY㮿=zd=N|:|ol~%WZ6BG; 4ѧSoè~X|1qcr[02[3UzKvUZikZkˁXfy\cFzq:fQ>Ÿb].ϝ F"~1xXЂS7"x!tv ]p_A[:aLg$1{٨Rz`):-t: ɖ).wU-n.9uA5}E\hr,1%Sט5&5޷O#7 Kq,G}*=̼J_Uw~~cWkݯ X1%8vTW`Nѥdʼn?Nϱ$!љN{]H=NOeQG } >La/lCO= @fwKOmO֛= mWMG |7xZ~.~&-|\kƏ=ػV[uT9\#'9%׎?-"2 `!!h)×/_L`,hzK믿Z!Z.N Gj[i|SLo;GGYt:FYYLl_&FMrrOP7A@[H@)!Oz+dd~ I#)Xʣ)bR=~pM|tQS`lY3$7J^h^qyǟK~ 3k(t/е-xC׆@G#pn`"/i!* ݿ5@H=y fyIg4 i@Bw? `@6$WLbg4פU1h=~OK8腯GN@c yX{TY;޶۪HHKe$K[e֫qmS3D֫J sx_W@00Gm%d_;k{-`zh(=R$@/HIG#zbI*\3YЖRb:,/pIϖv9Q~xGiN9(`d˴qCL ~sv# P4t:0:MN#W|B`_4w-|ݥo^}w_L^fw8L@Zogv\OZqx, /?? AgGj2OCwy^rLZ=gqlk;d.7/C\2o m\ܷ:[9mpe0˷3gCSs]-}bw[dь`$_#Z}G x }cE Fأo?>93m_;^81pmt:M&Te'F[_7[^4%nC|0뛭Bqغ $çKRU?w#׸H*g.!s8 Np&ZZf>xKe>_!dmkqnCg-8cZɗxm5>3?h+:nrw_Yk_ g1< I>|q]ề|*POe}բ{ +v>h!Ω|f4%:Ct\BJ'=Fw蠙^8ߣt:c"0MPOFUҬy%so%,^܊OpI.|OizAOFOb@,@O՝˔Ӷ>|G/[^_6Lگ3݃"O|>i^͛>13t7lOp--ϸu+ھ֠GSFw*pe|Y/㖯 Q¾w.9Xu~~^^N.Kx ?G Nm/>!RNj؍NrZݥ#o,~#۟12MANSS\;y_7Z0"gd<P+Uш^1K I.ƒ )gj vŁ (ւ N1 nֲfoy^1v6m I9]*m>60}ˠ3~*ݖB?^+oβ-8z>W.3>OCx~?;|J_<U8'~@X45[.N e@qAB,D*NωOKf/ev(Wq胢q:5;@G#P#yJUɻx_wo^ .#@$?λD]nf{,2:3]z8^mwɝ I8E>T屆۩_HewENҨãXt0hL:l28JU$ֶI䊾̷h }<6ُ䕷Dg}[]:k0flkzX߸P~|.gV(L> ;!Rd]z'w|?_R N aY=g5o?"c<[@/,E@G#p_G  +O)*䟻y עAv3Yygf_|)y׬;L"gq@&_X@:v>H@ӖO*džQ"Rm(?~z#?ٶãfܼ pDEc0/cNASyCxJo~NނWöUooa70ˌ#.t玗7/(笠X%INuwR+$Jw'D>ywre#ZRҩ-REmTlKboYš/D$g)u:yF@I>p&<@<ϛJl?ݴ;󩿸ϝtUp˽"nľGU?YX`y,p$Ml#G1K#}I曻q0y8ĮzY->n07ϸ]feY?i1p~NLU}7߰گ-7s<7.%]%yJcEïXb OꩦuDUKOK}PD?+.,p Zr^F׌%BčuD9v]+aI&wsJmJϳ,EftK]0`l"XM4j |AdNr6ڮof)\wc"|VrOƘm4s*1 [ZmqCt' |Fx9-%c~d[x[G:7_Vc#-ŀ8;R<[gZC?gEg1Yw ^gܧϴqCezo>j1z#^=1E+,Pt$ԣH]ԝ}L a]wZRoB<."Fس_?%0b i!9^83_׷w0BG#"@C23P||KO.$Q?Es%tW|*~aAǎxJY P_⎽xa ^Ƌ칾2'r $2GO&ߒDdz5>#˱!^)w~j8e~x}Wzc-po]Ycuഛ܏/fg{ˀද0@ϩJK&Xe* "%gc_I>/ӥ ;Lvog/'qYL_Ƴ|@Jm>Ģg^8D#x=I1[,ܲG_ 7?/N8wϡ\F9xѐ.>Q-˸ƅ>Z1{d$T=X Ic$zt@HY&s-4}͜_tBZ߭!6yG7<*>;ѳ8s4|R>NmϺ[pznӰ2mTlo3ómYc<*spǟi; G%{דNq?ϋwe w|W)k_Q xǥSG4粒rsG.ijCv-/a:LE^ȧǃ4nbǀhʭ> ߗnC/f HAA8zADΛ>=@G#" Δm%z3p}*^GObZHl  =κcV~x_2jw n]`ƳtmnG~}N' wyTI+m\VYx$ퟒxџp=pFL ʷov'xY/n>C/ 1~ >tQxlF~w:G Q%Ú8>c@~ qw(c3cse` GLв3JC*sxP/Xzvxy |]L4 {:DWi~_*YϸuBiC.U'Q)>f^e#1}9&zlw վ=v񳤛eٶBk^ƫu*4^ZfZJ⯔IOb ɦXிN)=* ވfoC@z\^.0'?vmo=e.nkNߎ@@/`4t:g'@Z$Jl5a Fw%Ƴ(y$,١gZ|h|G=.7/D]^xPɿޠuWh+g1&r&YFOn'cqf= \a@* fgl$V>lկzKoWciSmFs u:6^aגzYg[o\4P.˻L ;|9Bpy%kQsqK+tC|b9#:9;U/C8>o=@G#j޷~{vp;xF?v3HSeVix<= _ Zsoў ,~h~,HIafÈ18 fBaD6zY澙i۽%Hr,i`mbgMw1UBc~*+fK~cuള.Ì<Ղg'(/H,4z/[%pk\@tID녁"V/a:. "Bj#v\?:f| N3@/_ץ#E`0DJ$T%@}:j)_xޟD0'Kx.U14Y%8 鑍ۢă&ⱓA}P K? /G4 8|Xot2קs-92̺pqṟy,svX/I^@IDATNg<#tim݆yUg+m%XX2`5*?jSeKtkXu22m%e%kͥmԺ.y\xEs¿O/}C]?>Hݟ'/%  o[TNCO*o(>*x#@"? @F'H @U1ܞ/;r< v3mF8> KG`^؇@G#8\ƶw%$$q{ y,x` vY5?YGм!瓀ZJ,G|"=x/_0vȑ?)e3 :@#*^/5Y\ez,:wDV@G#80Adh@<0%< ų4\^W^N`!v VУx[#[y#j{ u3TKe#h^CsΫ]{^ TAl;ZοlN>_PWpB Ј6Ik 倾T.?4_/ѭyևx^xft:F"&qq_Im^vwd$QI<Vz?k3̮*ebi, 1HIE"EUAϤR5{?Hܷ9vsYJF}5hd,qxmqF*?a+m9X=WoXR,|_?1򎡫\#~5çpҹ%t յ* +@5> a*o. b|_OK/RK5ЗmCKQO鑎uyzO~G#"0Mwh@<_~wY aR 5 ae[f~籀@G c$8B/wY8s%롳Uzk5{iCҙo]mk[f}0B!Ɯ9c16]]ɶ깯MCWc}—UhgAoƵB]$$c $7 "}_||SWtd ZL3\ι/ Dvp>^Pw%]:>t:G &lQq-~ IK)[kVivg:ƙ)zҮU} r;zф$Sx3c$CX^uzbE/ۼ&qo}yeaCN#:6T_#-:#p$3o ڏ̛q`utP(eN[k7c໒oZGq;o$RЗ C[>DEj[vaX5~M/s{?Vҩu$]m%$N .KR[™52˛eR\D;v wYdnnWk}Z+~k쬗|KgyUgD;9s8s##^Ò*ʫۚ/m3l'}.i~k}ID|%T.t}5t@y߅~!gY~}|f~%z`.;FvDDu:@G]G :2/trBqv`:ɫiłx'8:ni2}дYu,hf<ۼecd θk ?Ը_BFeM>y)\_?U^*=ߚH7ҡ9~H<+Lf{Kb?%N̝Z'~Q&UoU< ;]rBA⏞]곞D#pǹGt:)[=s$PԖYXkCS QC()ѧ)F9fsyi X-٢F߈cu|WPchn| %1,7o vk3SƘfT:?—#ۂ皮@UIğ@Do_ ^k} =Yq/|͊1'zQzv#t#gHN0І)-0zn9FgJot]mE\5vCp+ HW79>zsmk_2&㪴[}o1̾pAl(nѷN})zo[?G^m+5|+Gs}fnY^yYfzzED^xxZ5ο]O>#;< |-;Nst[.,5cs<=@G#G& )9 洐{6g8ҭJlNM`Izbf5KX?J/ںY<%|0ΛC.**+w U],s\ѝm%ݗ]7Yi, Y3;=܎@G#I$r) ğ:GBQkr,γ.xɩIߓmoo=Fm| M(0ؘ={/Qo9j[՚ޒT٨/sN3mבfd1}-|m[o|?W/B_qrf+qmQο[GHu_O>98!-j\VmXy+jʇ>iLA4.# ~TtQ@7p^;XkoWB#*YWsPߩzk=ב,>NS͟e19Xk|g6>k~Gr&7pR폕Ok?f&9ʟRK}htՇ/˄һVtw» ֳ֝m %v֪/Yb, XM兠7pǾGt:9J>4U%sqIǏz^|>]A/fYk&N{٣gr o-Po/i̚XEE@N.$71sɲ?'yYx˱6f?w_>d/V-r;eUI> Es<p}NfW_M|aD48elk,kxf3;=܎@G#p% {'$XPEU`պjSifXpAQ/lpUS`!>e,|Lg!``|ZWx,~Ԙʂ@G7qXT^:V0xjlo5y֝o=\X=?k:#7ctq\H'2Ñ(v낸+$TQ@> [ɀ[lHv$M;;=@G#8=ńV]6vL;XODd9'̨<ӻXS woEBԸcH?Ex$&AĎ[-[e8f?Knsߚ|ή=&RK#ٜ|Fڏ-:fޱSdSek2;$^rw`2-肨# ~JY\w܏pt}(t:sIy- >0wf^AJ3/}|N ඬoh #'j|ࡄߏ?D 'ciOp`*<ǾV7̾tߢpLqe}ٻ99<ϱOύ3ܢMm2pK/1t+ҵ;xi_P9@B#\ zkj4߁;Q@/aAv:hG;vKy$OΝlT{g!ƁLci880'm4X`Ƨ;^˞σ>E:S8\!qȱɴcdyG\ uF<2gV|V۬Wd9c붷lѱShm͑lij,h.j\uIQTt1ͱ&(n8:#^7~f3;=܎@G#8@$O:ك.8CRLwY!31*t{YeN<m ta_ncN5.Ge;113nbx0Mɲ+&dNR(qs<=lrG8z-?>q9_ۭT)ml9-v[tGD|Hs@ 'y\͛OOpN/[`tc`{_],3m ;'AG#t+*X܍KQl~f#g֖yK8) c4Fg HXEOE &&Љ؜|X0XԘfKgI9SǴԦu~D;nkkQom\K 2.?VD.#~[Ԟ@CU_@('G5~f3;iKqb3/>>/s8ύߺPwH)ˉ, nddaų@ '._ Q ˳7𰟠zsATi/Wf^_cHEO..BIe1U,1Rtz~+zez&Ͼ/sϥ9ֿj[U~6cM~jnmGʥ>]4H,p)_h\C0=" YVzr.t([tv]Elx[uξk޳P#Xs'Uc!@|'@{@vp;.IUIxsŸg\N{gLKA/ՃH״ ^_w/Pwʖj${'>bώoc77ҟ>{Nehgץq9*?[8U2.8\z9ϴ][yG`7{+>8ݵ"va>[kw:)uv(+aGN/hA :Qk$;x g.OL Kuf|T꬏6Ɩh ?qx{v4LwH?#7ohsuیtG<a> k ^˸_/cn钏-S1w;0߸/s!Y_]K|'^x'܇qS<ьxJ~Q'N#QVt^PޙhǑVg}tn[_(J\HVRvxQ";fO_q.6pȨ#![c _}Ϫ?Q= >R~UGi"iIN#[#u${޳~W~WǶKc'<~ᡫ)di暟9,RΚ^9Ik =et}l |T l& 1\a([ %3Gr ;Yj)kl}S6M?Qhk1pX_` *wϢoیGKbCZC]JiCH{C }дOWqsT=M\Ñ9K'ßCr6m+[i`oi@A1U[I`m)4%|*/qS#:?О~cPm~qo,~ '_}>)?OZt=.z}KxGG{,zo15G*9.;=<&=餯YmxOvo < ލxZᾁeHϊWxQnqyyg~F.]_*/.1  8m9JǧW^Ù᭔.DۛղW#+/=⑅d{8kG~G3Ttτ/c>$n?n[˻=7詆#K_׸ț>\u̽>=\3}lyo(}O8uz^8xG) v:5h ^_WYgc! gR_2$أ!0@zikN2fk}A QEp1mO۴Sa%J2%oҥh,qM߱nw5h W dJ?1xó?=^YGOIy>)NfPLjYg}W|}@zf]gˣCrC"7WWsW?7y0p. ӖB߅OJk*oZ&ٓ]8pZZvcxi>f,ܧow6>4+n UJUX|WD&i~@ >rk5xȄq@6BY&*&x +8_\q2*\`/^ s<ޠ1ysQ<V#@>Kğh1\?"n/;0xeΦeb:#j1|+=E~_4쇖~4;~Zkվ2 ?h^4V>2yW>5>Tmxh ޳2 t^'pc!jWoGzQJW9UuW?Yo.P43 ex2 Fq$o B菳gs9?wFd28|h[ÕO|8$>4j\}]䷱wOOkcceK}kjs~b+{GF,}ïq۵Nj 'ӑ@k54P'}9@?(~#S*~(?D)?d8&|/w/(.F>3>ꭎ8i @y?.ʳυPw<P I*_÷-~-#M~#O.iEWqMW׸R$ <.i_d_A¡5%͚Pmxh ޳y<^޿??EK4WҪ6t 3 @#̾= >!`-cMМ?=U'~hByq_f!K*_<%KGQ<R6=GOηZNnO=vaxhx({42:#+XyMC]k`6lс@0t߳4:ٽ;H [տYg՟U~|VF''<7j`cꆞ+!lPfyY&O(lVCWG 0@(`g5> x >߫?(]/c#@ryF{ad =*n[ =ecu 9/>h.%䥍Adָ=ee9&%WȚ>\gS9[sx_5?Cy)IMj4Ah֙Z@k)5` E~s^rn^>JNBE#a3~P{ my('sy~Q~ϕiPvR)~#G#M\¡Ț> Ğ/Sj߂~0tȯ[hҐW߃cOkhYZ@k4x &s|/e)Amr ij[ <9 o/>P?xw@S.]* \d>@JOC}0xv̻|Jk^t`@3 Pէ?}'0TyW_eCk^Og~5p_~4~[\^љAL"hh *Z@kUlMȬs _þO} ]blpXu/>A7}l <0[AY?To*LCRwov+x_7>+y,TﶪjrW!OA։.IokZ‘Ԃ77?㧕~x%~\W=+=Y@zx[PxR(`x?V=ã|IFGPzk] c_S}W?g}|C&6VN{7ٙdFv*L8CkYmi ϒEkwZgϩY+%dmc?Nmx:wk5h a JC;1\ 0\{Kvm(<.TE._CqL3N#lMS)i7yӷ|GN?VJvUE5 1뼭{j'TK}'kzzLm>MlU~+1i μ/`So`P=f$ eS.cpmQ^9?j@n PvFA6ꭋ!%!t?EmPYw>ԙWj/n9<,04;I9)}xN?g)1v_O)os1R6~\VnJꋠ׸Ȏ?Zri = Z@k4Itë@@ϫEƥ|cs뿎|+W\շ]L4̴6+Є7|v90>Px?\hI#\~.A%g10`d;1dߔʇx /U',c/TƉoo' Ng~G(eE.6Uab}<^J!pMIwHIZőۼH𢑚6<4Aʙmw5wxs@k4?}^`ghYe|r_e U*+c?DYPHSgO#cR@8 +OOOW PY~F#tʎ`l7bw!ud. } [N !j'}lrO^eGvI/7Mqn%Հ/k]l5h*j Z]1Y'̊?mm| Aki @ɫ;DԜs %yT2x< 9;j9`o#@0Z>o8geL&1TaVd6U o80?jPlP. <7v !؈"d\0&0$L:5TeW`q<0Pe)ȯr%y5y@kh@R</Q?Fmx5h ޮAxy\-Yϧ0[/󙿙^y~B.3#l' ?G(2 X{]e*2/cGY  ϪV#1P^T?vdi+ȅ  x)Of>Uoi?/܀:2#N#?NրK+JQwMwk L `@k5x ? Աo`/p. >4a9@??|(Prmڢ6i㝜y@]2=s`~Y= V>GLٺ[ +> r>  G6WS>&1ꎎ־K4]|2>ġʛ#N iD'O +>2D/ۡHG1m gv #oh } ͏=/;xCo%pKni[k w[c5੎hj/[1K+<2 +>VchCj#'/fUG@R fgJj' \>HSv-qX`H}<) 'vJ-70]íw)f9.OvO.7MZ.@TTQ 8sATWe{<8#oh |x \(U_'|k O.5h | t 3b }ߠWCYjtEUWWsv_>Q$J?(Gi=`/@ή UwHFZ|f)~GRy FP;  !_Aˡq"#lD``x L~聰ݨ2窿1+yGi鷍/.|ovM5y@kch@*YхuWmx϶{ Ȥ"_@J C)~vlgz5dc'ij3_ݍDO%害3do9< / CC@|..dE^1`P>>[(W*{SoW~oW92AػD7 02' # 'zWx@C~C%/L 68cT<)rt#|ޔ_C:d=:^H8hM]O6gj?*eO^e=S9 ]e~"-^/]ȂrƖsώ'ӶڞN@¾Puc!9`yD+a#[y,&%\KG|d?<懌|-厶m{?P. >ToJt!q@<}-4Kڤ!ܮ5Pˏ.i>Һϫ6<~@k5f4^ lz/Cj?wr?g8QfK<#SRPBԼEyW<8B@]r? T_ ~vk"PySꦝ8ڇ n\€~\L'q <2jR;+/51MeqDmnPj8 ~ P82&g:%sYڹRmُ5a[GmUi qtcZ`-RxV}41 p?2VQҖ FMS/.4Dj} x>T@|@44a Ufw9+KԹ@5TUJ}68dWAJ;;?+~?cK{h3=ϵsBހ?c 1@U>uA7mq?ȣS0f@' E+Q f;' VNce?]1#;NiH*)mH䋯:xQ\d\og}v0O@>>_ƀOzO6Pw h?I_!\t?<,p,m\n38?RV-)ӶZ/;~B }⻸M NZh >&S1dYPl{+(X1Yo'>gc1W{PO pxo07V8>|\V99#;wx;#@2 #@It&$m3z֗Ҁ˯_o Icƀ^(VGе0  P?+P[/~.ơu2 U_u>rJO@k@IDATui ݻJfoВ#4G(Z0g  d/S~Y?n/<ay@?G' 0S?0@%uiW{(~C|+߼xOi}{d:xdgllm1rF!>?Q8Ґކ 8Iq;Cy~h=g ?d_˗aCGWC@7@:ʑ.IĪsv 6~qv?~{Q_3qwc;"X-o ^۽gjK/4;h wPR'i ZQ>嗕@7=>'Mt"`ЩzѪm7/tث0u`xƩ OJ8%>0wO0X  W{F.<Ϲ5 4m Zk O.y4P'Dں@ /G}3@/>dGTo)6~'+)wk݀p4"|(suxHgp (20@9r @ޔ|3= Gz=G5 {wC=SinS@F_2|b˽Yyih'q븱~)KFFFg>n.3ǨW|ET2~3w}cLwh Z{hVZj5WhaL$R= 쬟 '0?Vs?| t+xPJ66iJ*vm}}; )ʪ>lP{ء]#d4+~^bYFF oW]1={TM긙3ny~Ws~YpSP(5/4f,7@\o]  ]Kuy^3%+~dʛ93Z(xrNPc#|@ʳRcmsџ?'#l7Uƙ?11W{TP?^MTn]3K*O온{'*_ P^ g1|Fq?W1̌'WtM[@k5hShx6 0 %met|kh @(? p иmC1쳺^!M=P)uzig{16mVdT$ {8qR ҥt o Np-4soWy(G;.RwFz`0bpO̿g1* O/Ś=7k2( S}tQ}Fšo !_`Wϔ>=XQYY(h Z6|{ қHw5TX0d@A_%KFK U^CA8eN[>d+_Ŀ*|p? d[.,9/:]jʪIo+  (q?gpφdx *^zO P\ Gv91|urCэy%p3Džj{?}%-vl?KFѽG0P!ww0is̔մ5h Z@N5= *+ 'Q< kp_c$"@??/9DgZxh| +xҥ/ʑ@E!hGǿwp/'ȷ;|@υO}f_iFt\y~o 'M H^c{ײz޻~{=fttj /ﮭ5h ̖g2ݞ1HKߴ5h Zw@Nh ~2Og{˱@BC\Tq-6>U<v<<ϫԧ`$Y@Tڎ&<6|#4J ]~Ϝ xB.owULݴRx1#`<@Oƍo6o%56_yOQS7V> wDW%nwט6pX] C@V`bDi/;4W'1֨qs*4К0N?@k5p%u@k5g)^/4 *c[EF<P{6Hi=E}N!)e^\@(B֔H_v \\4G{K'ge|q#qOi̙*S8/vU=q2rI G}<+{?;>Wy+ 6K8ʪ5qI[ӅOih ZSh)t\k5 dC}oC< M{EPd{?2gI?WKi|c',@ON39].p8(Ā:oxg wg6Zx %snncK<`?+^! |@i?hx.?FAV)%#';o%b\~ ԥ;0xNsTw[8{ik|@k5pWMu@k5:)2ϲA+>j?ryH+qAYg7zJX fX-|O? 18s͒PR\@]vߔz{ !FXٶ@?RxY7ոI=퉬ȡdG|ug@ߠw}<H.Wbuv%p'\qŐ~3{@>syVY-+e |4m Zmhm@k54P)<+ޚ-!g?[u.wl?[gۿG={<0 :oPӃ f\@'/G ".w?iVR 1hx L>qfxNxV 5~ :< ȯzO9<&2WZ3kcdcmd>0+0U _):2\J܄i'{nA+y~ PWj#p~>NF'q}##O t5nmk8Z@kpL3-o B D>&NRp+1)Ba@?@l047O_ |ڏU* #JHlJ;3_9 0 O~Uw(JyK^(^㑉'MSZ䓎~1t1 5Ƽ ȕywxyP6k\SN#g  KqS7IKjt&}Ņ]o Eo(υС*g}/,ϯh.q5ti8·婲ڮ*op~z|_Ƕ6G[5h '' rtoOYiƑ2 o(?m :Y|z><>5VScK~c 6OnK'JU= qpGr}1@Z/&\ߺ/ ?<ƀ}i#A@oWzhuoWCF ^R/.=8~O9qK>&ni !uޖg6N1;x+F@2OywoI*Ł'GO#k/rd?vW%?sۏ ׯ4[?+KkțZ@kpL3-o ZOL䡬{_!+\v~ֿoP/ w( oAڠ?0D}ŨqJ0,߲pxz]Hc@(bxyaMy3{N+?ޫOȇz'LZ;4{1'~d+.n.=@2֪Y”riyk5h c5h <>[)?>s) 匿˅1 < IgTū*:+ֵQdCCt=2Sިj}wUIz7I5.q+xA*&ch] eл#-qISֻP;}A~ģ@?Omd66T^_y" *+ͶZ@k =Z3iN FD_t4S~ ?nY7N D#˞Xtr~|+`5PCJ<5mD&FYF'zϳ) {޺{//;w'MNLT@9~3I΀S8("ςB{/>cEOwZ1ɇ,N-j Z6|o _syvp UObUP\-DꚁGmhhVG'؋uK1n=V1T# u?}wo#IϪvL#z." =nJk55$ʐ`Kf*@-ȳ9?XE_ 诟vVw [֘mz ''#=ZMxP ZA619W'[<&fW9vm:)W^5yz@'=q0 &pU1v@k{Ӓ@^3ZD-eŸ0 |z_x_\U+_Pp /bۀPZp`M:˄II?8MAWoµŸO@P*h3]quSm=Jks{.ֻ 3MOicemCT@k544 }.3aVs;U~V?Ms1xhAzrKWqq$Xĥ w]sI@|c3r@_R䳰Cox*s^ZiOE ~V}_VΧr?ɖ N.]*Do 7 ^k8Ϡ]`xv]J69y<_a)I "^ħcTښA!  Omh ]hO#_ MZ@k5П1h Ni`3g/p~Gj?A+~P?T& XyQT| 4Hk|@AwJpMN<F9VAvzg@?QD ݹln)bOmjYt/ tI> 4Nw ^@kv 𻪿?rn/S~z݂@khI}&0 ҏ~o4< _Xg7WEg^$(>m`7Ɨit m%.ɜSv~GɫP!aW#CYg:_$8t'CжPΪ:ء' >O;0.X<߷oie S钼@k55h : ^i.g_>/ʊ?+BD@/2D'M&,@)d'<7`K4`=t0wg0Y`ƕ6̺z#@xs!ep{qB$U004S馶:>9Ҁg]_YeGlqk5p {;d$W6ҍzݓ{Y&*cr*W'gd):V;47-gUoЀlS1Oo_ݍggz<<>=y'XSu+z{ }}6~t=L@~3i \+U*8Oj I0Ɠ\>bj|߇OP&.}Ҍ-?%>GEyw~t{JgpjpÏ1"3f1 {!{vNSgJ>Ơ8gSx{x^ǻxWp@<| ť1TJ |ODZ_QQэ&ϐ١_Ꜧ @k4otm?C5]dkI5'Ug .\w@pSe֔2%:uIWNҹ Nxnn:x&=_2g0P>+}o)k"J470!!n9R.Gzg[4pΧs췮 ||0T^ 5cqJSy;Q~ FAc0^Ƴ42\UyL^-k Z6|߽+L07Fr媜pO8j|Mww5x-7BN>ik5i it[ZЀ!dU{]^`r&v1ɽ h%zAz&8;W=O;\NXEo۴YCgbG'JJG~'&LOQt 5 VQa{_ccxe}Hgv-s__qJ*!<:=Papx'`xh.tMFWm'p1Cbw3nƻx NʹZ@kh=I[QL # P[r15T ũiG2Nd:Ձۋ>e :~sqCϥ~.1ثYoWʻM?r'@!8Y=}<)cM3{AKz -7/oLzyskD/pZH%ᔙ2V4/s6 >F=FyO kțZ@kh]5ZP+%\X웲^}Մ F'e0&N̲ d7>ƏMq"ep0<>; N|t[o[}|n@)oFL~;8 Py)g,1XKXlܲ6lOٸRc ϸC;ơ m5y}wSW{(y 0"[! /l?m?<c*4:2(n_%Ҕ->隶Z@?h <*!yNqr72M=e  ] @.a 7@r_?0Y hzO'n5FwC'@?Rȅ~<_#@Jwzjt`Y0!AIL?s\+xY-S=;ԿFJm)w@W1p>6y~WCVs+?c_] (` bx[Q>iwo6p1~@?]w׻gB=j+mu{״4Pϡ{v=?@>3=|*f;t#?SL̡Yį<^ `~P~ɡ17Uy%kM~V6haLL*<']&S"#ICZl^^嗎X~1x_>;|@7S`i!O9Ɗ]Ƈ~ow?16ڦ5L>e~RNóxB~?{)!0|F>]P<(C@uԙzÇ>qno8xS1JGؿ{76r_gg %#|I/ki-cܕZk@^S6Y&-Em3j~%2/3৬#Ǩc+ M~1\ ʄx^P`0y 6hOv F;#}nPE mҁKO6&O)OCMP!hh,lP= C ρC+gmk(cڮGxBM#'r2OshM7<Ǖ:i\9&ę=ol\7ƥj';8@# wXec?u.iÇfuS"䫏`+M~O{L>3Z@k7i I]jL|O CBY^ _ _*R>>T&g)m&LgKlx/Bɲ &;?T/ 1yP f(Q3E:9ZG*}~ؾ''8ˏWjSz ?x3 ?H(u3y8'Q&KL]&o^`{LYR~n}P~Ҡ_9)GaVAVM u# :.c٣{@էyo'wOct'}:Z@k4t` {p9'4gۿwr;Z7 /~BQ@/ 7-tqLG3x~0*9?OP}*@AYrr@wM'm!l5O_zʍڱt@_3~*#@<+QzSP?ѸBh@hJJi(᮹HͧP/;_潖tǫ}:U2W;Y[J>/;Xl} zbOV_gCN~{):?F͗0ZOLUnUvsBuhgMW5LL =7 a@e@+@z[W( j6oA=w YoSֈwOԙ1qmGO9r ٠O;tdQʟ[ ~ߊ)ƾŻl=^E4 `R1m#VvK<ҳ`ֲ[ΗnBI!(Tߋ#V䠄oq{idkɓ;]hwW߁bwh@vLd~n Wv|_|ᕇx@'aBJ}Q:NT1ẍ́yKJqۨ!W֕êʮgJSoE((a`WK|_m*M[py`79v,#,?AjS?g;Ӎ qPfy0仯ӘՏ+A[dy7'.<*myIk#7V[y1skI.g&L~V_\z LǗu&V9 +`OGFBA}ԯv{]۬"hiqL=-a}_uhsAs媟Uo"Ty}_e7ٝ?oBܠ Yx_uTc:qqK} yF\WȎQ~3qxi톗A=C y c̛^}1^@vЧ yEplT}i%yɸy ep] {0γ˓iz[wlQk5h 6hFh  0)l2if-0y`}W/1=1_s.տ9iS40 ܗ { C'dD1kV~=o/?|ߠW;¾OeSGcvPj(>+;<Ɛ<V7N.16ii  KڔC.#=<㷇#[yɼ_0i'o#\]W_ӳO\(xT8MW~_o|}&m ;U-ߣ毟T~{yZh ZUmX5KjIzI{ ?ş-@`Wsn ? anu3ma a h0P 5>d[0 H06r7LcB]lg?^o񪇭F_mMuf{u<7@ekVuE IN8 SxH&=$)a @t M~SΩ@D Ԡ_d&<~󷬲&8+@z`mt1}!>wc~K<(:d|V1Sxly~mC%Bv-m5h >zuh@LZ3gn&L\@[s_>+[?Aٺ&~_37"O=P:JB<Lmv|>7MЯOyUZq`nW:`rl >~PvLY'761X@~l)'ی,!)]\8Q7y5h uZ.lT5)}V|R[}Ƕ;5 L٢[<ɦ^Rx؄GD=Ѧ1Xx9AVƘ{"@3|&ܲͤOAkUޟ+KgO!@- ?fէN7}FUi㣴aTo@߸ *tԡ;H4ٸ>~פ{2 Ylzvqó5}6H ù?}_`^@* 8LyHWV{[:h Z6h N ԉ;Pxn7w]υl?x_GLBn`F&WW1T0J'܊Q&ä-Լmš<_ʟ&ܲmC|g>@=3JG9Bv_=I|5J5qFdS4`!]+XCtQiI W48AR___ o?wc67ig0z0 =`y4ϻ]Ο7->mm>$|91سT>|F~DV7^`/~OV4h Z6h .So2,Ry.+Is40Qv@`cؚx1d+ȿq?硩|]JX4ڈ{Ā?@m|/ wF wy6gon9˳ ABU2PWd򏗡2yv6>VZeN0$]k5d!M[8 o@~?4͹ZSM*0~.]|?Xp.?M/DI8?:iR‘RF'Lmc x$pY .av?GYB? k1ADo/3#Pc!1*a_:>R0gc ~0˅:ޢk`C_2o^/4OYP=/䡟)υ#rF{Y叞y~/ VKo JF73yNmdjU~Oxjc0wƅl!*.%8q J S7 }eM:xȇwn LC#t4(`tEʏ FT.&8#oc$W>=%*E/[ma~/=P7k#}y2lAW"ǑCph#@k5h@Fm&|FgGKS9yO<쀎5vNGxD+L Tm?c>C品&4#&2хw6Hg'?IQ44 _.p{?'O(U}>/~ʓY?<;Od*o=%'EM@k5@mqxa 0eͤpo.PGpW_̩۫/I&Dmw17Uy| Pj U{Gޑ4&&?{5Ƒ`IHt'} \ƼapRS.Ocz=o/~a Te52Ze6- {E_em@}5U?у#U:Cy"Jmi*oC sx xx7 ~ޱ3:ṥryt&mHri Gzl Z6|! xQ 03!$[5`Up_q `A|ʛ:Ĵt pga ~-%4z ?3M™l;.~g; <9:*6 3}zS{рƂ(`^m94A ҥƅ>' C]^vPIGݮB@?|x*o?( +ʀHN`87⠓F$|+#1?s +PD~PeG Vר6) g'Е%.Jc@z~V|LCн{@k5h @k5I&^ׄe*x1`#:03) /LTÇz: ==/Lġ@[|<ׄٓ|&њ\*#~ _4ՆgTހ?u*A?oW^Άޣi<<)c=XSx#'00}Am"׶6z(Sl߀'|i?10Z#@yWவ#~1o8b t1~J{rP,Osu9 p7a3mQBP uY3<YPPp((yS~=ZPGZ@>#N 0d -^`G@Գş/|CиLСLCW>|𫯀`~2=b'hSi\`4P ~&hz]=&N+@oǚIϪƛe5~Oć#  `uZQx`O9x;7 ! a6|?(l_?ixx5SF4pWzW;t{o}l m Ѝ)a9<ǻ$s#~. ÇBD7x4$,Yh n/c}Q$GfmqvOڮ)w[E{h ϣ.5p h~p Ϡ7P?6/OsUKu_Û O Q@_`켇c9ew^||{@r>P >?O7e)$Ao>w ~t~ȸYcEs k5G}E}D\vL\bQ͙p^f'f9<3ea/@wX4ކ*`ZK YZ_^/Vs ѶmnQRMׁqQE@2\ۂ_N 9L+^oA9/cs?rso?/:}g@w_8@͙mCe@_JA~os?O FNO6ό{O.0Amک:`sϻAk&W)#+)3e.#Z){WޑvcYiY`Y`Y`YuX`myZZn.<xtϸYnɣL8 "'}BNj@9(n8j?tYE݂oZ Tm܃Q0$w  7&Ёa$W-0 kv/~g~SN&tpb]Vټ?RFw9άȔ5sY[或^Koo;^QhvHY'mPEFeh@4N3>"O5Nxl½@I|7ɀ[( ?;>ϧB̕<M~&4,[_*?00{{G·A?Pvw9Ԑ5#/2zgD/&@—^˛n9^$;?x!_3ddndڣwS&Q'u$;@G9?P]^.[!1>*F,\5:sLfm0 = k6\\G׃{-?*{tL`N=^иvm @z7@?ux"@d"+9sr/'zOP}\2  rapg.Ie'9w/o^cA/XFL0Om/ bCD  s9^r1,ݗX`YN#\*I0nC~; ZFr711lqql:ppIЫv[YXlW_~j*4d|r]}:%Y;eϚb<=<a$S&i_Bhڹ|Β<сlZ* cw~$%q|̥7vLO)@/}8O7} ]=? cCgں _>}˚ϭ /~a]Nǽ@O/=SPWxDZǔ=69876؆:R.<#rΚ>T./r^*|y]z- <k)V[m~؜ ^.qdyc^)'|:hq4wMN/S)_m5v+8 Lw[fopϧ `c3@t sMGX[ )kZG\xթƒk4A=;kǿ%tL=|$MYWGd]ϑ͙Ku4H̭{?|jBA'2O ?'D6JG#sK?ѵʌVO{\d |SpؑyXV?` lW>#NcOFO6;690dH=a3Z+EXx}~iV-6̯qz VB#ʟ\N鼤GqN^6%'/p@kx!V7ң-0w v'/؟g3 eFh'zX:PEI<t h>$?yrf\ImJ@<,*s&c Gt6>iGty'm 汑lⳂqߧDIþ#G'?' gH )*ō#a )oh4a+mp[*>[=^ LV'( $$P_w;.Jz]fy+- ,  !"ӚsZ'hBs qRoKIhފYr4?_Ml!~yBF\xRE \Zw;hsPDC+D2Nlמ` w?ÒIC`ӛ+ŹzüpFlkNp+?9O>l`/glx@2 .@tAWtM h+-r$y' 9?} p3%y#^c$Տ$^z({q"ur썀2@6V8AbsyeeAhvн6v]ejcs . t >CKerp7qsnO:|se Y9|1XsLr*VP4Z qx-StpzեuJ]/c0^mʹ>Y`ޞa+P|$O}Rc# 4%CkmSt^-Z WkxqEС42k;;L;gҷwؕa `צ\vxk? ;54?chsU? QgjGSw6v6M{ ~_AjtOp> l> lRr?̡Mp^Y4^UoM3сG^}BaN}"*;6eۂ.[2?S٘>qcOs3f i{eU- , , , `%rYj ęl vfCq>ֳ{0qyO<6鿜OEaΣꃻI"GX.-`U!^s]ӶՍ&ڐ}4FC.|x̳OyZ_ ߳E`6XR˃Ӷ d;Lζڛegs][EZvv<}{zP7L8iN|V0 y@;-`UG^@SF7#o K8)pMW83G?I'm|o_E#'7Wj~}6(A %w*}^_gLkz@ Wdl37GZ&yTv&cї^rm}okK\mOmggxw|κЁd@㌃Ie'p> g'JƁ8N8垽66袶LQENknC{B ]ؙdڜe &r1MFOH\9?8_>"ȺOT5 {v5b z(cNف]Q@A6T= G@3O/cޑJq#=d|܃GA;K;=HM7`S{?l$v்]5>*zQ3~tc_άc5d:׽/dl2m:N,yH)ssƻ/} DNY`m#K9ҎSdR# #yFokelڍyԺK~o8UrA},zt gܟC,9>QS(9;}o;З}^L-=xFZ{^Vv<2Yx |g<8.}8Of8 ]NFqq팖ɽ6HrTo)w:0@phW=6y|)OPGuǽ?l Z7 ~[Ch3ʁ u㈿"6F/) 'HЏ(;^3ϭ*`H(> >ˠ1Ie@8O-W_e e]u}D%+׀З=xG@~.M W<Ѧg;c܍<#7yECRzmֹ3(&F2 ]39ט 8ToCwrPigGC'TBF(/sԌ}du'Eyb{6C42DSYN#xͻ syyx^7I%\&xTzLB7a#p`3|_}ӇWṗ5@Xi*{ng.90R@oh~|[ y Mi`txG|wM.OC!sPv(O ~~ѽ*0BN/{|B]֌˥mvw5*I{Y;)A+z>DAۼz"746u?ksEivtbT  w/94Q ͑̑o{O8洆 EFNX*5L]=n=2[g2<^}3tv>:X _XXXx g1-`W+$Y[w٥Mx|d a8`{C9 yO >P)CCוtd o_j}F)\u_-u)ݶaujnI]`k?A#.<wO2dil-AN` eƁX6Mܪ~Sb]::ʦuHrh^EN %A7^K5>,zk^Ki6Qi-'? Gyo(x  %;!cY])ۀ_=.*~Nj(+ e˼30F~<2} lsғxchgɶ1t /|Y`Y`Y`YXj ,pR/P]ђDu bz;hHVO`S#73<39y u~Ûq:*[ zYS6#/2ۏ= -gҎv')BvˡeAGO襶qF eg{[8 v wqRǘHhH}mh/vCȼ2 >P?Og@F Mc-)f[P^8k%Xilr`_r8֕{$ϲ2 wo-%"{{^i{l` ގYk峂l|6<7zl2чd+ptH:NNB9ٶm1 r'7g&KN~/דNB(!J }\o^ksU^XXXx̶T 'g\kS.~t>4N܀qp qq&9%iFpF;)R%ϭu_q]Oʟ56 Y?Ekps*Œ1u<TN =j4c56ѕdX: zG/p(Ӹh;܄Cexxүֆ; d0ؽ۾$_/S0fr<7dY (9ÖS9ݼ*e v.c+Fy2Xw64+2ceo&s?,Ȝqxwpd?XSY/' ysOt~K_e&ds)onD/ ,1C=$0HϾ͍_{6.n^p+ rgbo0Wy sXy_~pxBԽze|/a,?BGt\xS-- <2| d&'?ȩo3|}UUN/^RM~%S\i?+L禠ǟ` eA(8SF}eGWbcep{dž*4>gS4^zY.O@d2/M'es'~ _늣^ {jMϔ;K}, N4 51}ƍlD[=E,17̉?`%;@u2Gܓu>WZXXXk:;-e@U#9P8U=֛4&2AP=O[ӳ1@^|Ut68N9? ~້Ӽ̓:bЃ,&Y+BCYe Yn;r g}W9$P`Zܬ#';q”(69t i=A~~}_)w(?8ԟ7[E Dޤzh'SOrr,1 okGt@K.%#TXCpal0c~4Di#\AK#` 28?x/3'ʶ/LI1 :A_N i>b@ &?죔hրbs3gAALv;CkpشuOuUn/c0'X/oȓ@hg#OŻP{bɗr$rh[gt,u/]n񓋲5?E=r} 5oI`{$1QrWO]MY`m\gŵ,,C#3$G߄GGl6<}8?OpHwVC2txe}A 5f#'19:4qP6:I*y -26IxjrG<3.،vt ]a=O! #LKx z;%S/*;@Ou] hO G=AE#l[ch);S =}Nrs-2K?an4#g2@gͷZotNpW&7q {w;C{G'u<4oX}A60ׁlv鿾vljsd6ȵ;.txJY`m\gŵ,<(g5'8ZI834#-8 yZECM&3aw*i$~KGoz@^|gtAg2Y};> =#I+2S& ,6ᐪ 7_SG4C;5_iq>YCnr ЗD3-7C>Tz6%Av}]c@ I\Vqɳs=1vaF;1bEe~j]KBEN%.2̹2u8|6נޡlZ< #?\< XX(L%@IDATWj- <p\<)!Ƀ&' o^QU䒅̇Rxw>љ'>߿맬^mгY87w FqFcuZ6prt!$͉4por#.f.t2letM;wU|c geSPuCktAMp?ŗPa 7t}dCOƛ@ehȢ%(y0Ax]3\@?6zԞ|ւ хZS&ުuZ?l;A2R/~_8t֥YI.74,򠃣#|s3?u=26;ySDv`MOy)b?6V?|m &y ЀϛA O_iY`Y`Y`Y: 촸vH\6TvÅ)M?r0Rfd >s ~~ 㩿SG?sڝ{(3أ !G.(qoyqlf^NcMƜl'Q4pe $] x-Hy^X#\kuvD +Ex~ӟ#<wЯzƖtDpATCؕJ5cfC7uO?sJz9b jg 9wN?tpz"&@hJ_m>Awtt#vK9 4?ivtkёT!mY3W5:V6N}h`ugR]q~-BPmA}Ŝv$fqk {b̶5qoYvxxK 병ѬYWȺgOOr.%]ֈ 49)'b?UO1ތR >ץ F:W 8SKӗr턛Jz@Yv4dl9ؑ 'G0N{ۼ1^mVݲs[`m U&78B蚺ț{u?6 p.Ч4^ ^3ׂWs6̧7KѴh.fi#Z'=8Z.)rD,< g{ :p}dx[|bW66=7ykhyv8:i+%k6N1هu̽3{0?o-֘Rl`93M{E>Y6`׼^26 .@eoO *{\,`3&u}. , , , KoJlSLnN:N]Rd<é=8\9㷦xwO ,hOn@2Es m~6;^+ָ̃7{~jnӔu>Q>a>7-)2l=c]ͼ˜Q!Z Z.=qhܻeG\ fМ]Mo0u]ϒU<}xsZ NN9;8' _+` ӅN"HsDe{6 9y?oO  (f9@FYy)f3_O/ŲH`h3/]mYm[edu8L_ᷮuŴ6rxM6CṀؚ7\)s?#W<v%=J&U>Կ B=^6eNff7O9S$`M%F!ON9։HcЯ-cF@?;]'{ali8V3FmydU\"g*!n~@Gxq~ӀO`g ooOƆvr嗼ϒ O -6IQ9un\;ϵЃqX ~а-elg#)G5`ʖߡ %-/"ppˑsOg;y[z`Ϭ%}бEW n=xCx*[ 1/o=%hvܱkG>`\N|C`e;+OП߹&Rl=׃dflVnV ?)NO;\v'g51bG~%~Uu=gܶ!@^]`JԹq<4 }FhC2 B;=<< '^Dy1vzƞ ?8A/FJ (9cnY%G4RV:3p -t{:͂.wX{s9.Ú =A4NHe39</GSl o  ʶ>w&bX`m<`U,,|N;='/?('m]?.$ zN{V}ʱq FҼZf$:nj$/sQZO[hR&'&+{dMAW=k[}N2d虠Zͥ? ޲0ʏL L 1zЮ(+M] i|Ÿ,,,-6Xu5@"Qԓݧ)Wwy#Xb@$Nm,טl*(D6_ U_,Y#͂K%]yYY7PG8>өaĔÏ˽2?8uNG3Z͂ O֦kE.|@Xkݎu C;=HntXWQP~3XfTƱMe䌠FP*viak @dRKsyWĂl {8u:u)s{V殝<ֺh3N_?kR_Ҹ>gOF H;]eSwT.so=}zh}|u^/ke [/1rRu%|WDFqv_ċ:ON4'@ ̈́8S9}@ܛ8-&;NfFtlʳ>B;jD-Aɀ2Cl }ݳv?e]S\S2u<:hγQikpZc Or]SumzxF~GϦP{ Nv {5pKvl]w9}$1*wƑ#SSAa6S؞2#ӎy͓h~}\ӫa?*/$ T!xU,( ]ӏ~O0bY`GHx/ d#7Hd%\`d ݗ|Q;k@H.LQOx3Nt} BJ`#p~yO=Z5zGijFBh)6w`o)g u;e 8$i(ۦԑ7>A3Ztr`xSẉx=32k+C墇w%7 `w%χl9n^w^{ejgu>w=mMJ]CsvO?(<9w]isul}\Дvjs#㌞޺[_k80t`- * G  o43ow x R<$!Wm|vg W]>Fڷd~x&:'4䫢ʴ ."Ŀ/G#p֓zhom.S]>mge!Z fc >806ՙ[z+dxFۥ* `JᆲH=6?ȩ+1{$O/rXto"Zvk֟j6^=:~I7/}Lr/f] ڥa.m;-uGZUokLK@q93d7 Q?6ɢU@ӏ 7]wh߲P'R$> Ƅ^L9y"$]9ex_ Bfc_p ڸ$0qNNߤ}.y$S ?pj7_td( Z7bؽY#st֜s{'8l3:n&$}88m-Ѵ*<ȡ~r9f"}O'6]vt.8ۊL]0DdGNtdVm͓v\Y3@hy=e'mM5.;fNºR^\.Y!]/=>*I~/uue;n;MGP!겠a;Q} ~-_E#:?dx@|txgvbU]RKxɳt-п8:5zs`ToaFO'_K6pzrx3?=9s9?E@Nn#GfR4m+D} Ak^f.!SO} +'ݎr`=xz=\F%Q܆rV] :>Ow+x oR8է |Ϟ&[&.xeT,/D,tY`Y`Y[`m% -8.8¤0t>/W p#&3_)xeNs,;gK8͸AkrYiz$hCG8B~vi}'e)S mCg6MAѢkM2A/ky-hƸS jvyеn]u8U[@3|b0cklh]vLn"\*ZBfg8edzϐt[**{'^)k!U,-6^,^י拣&myIO'(FeAle57m  _Zm, XmYx& Y| <ˑ *"qCE/<'7MO:EH27>N#xߎ%:#: K޼bwd>8sĎ*}B<> SiYNO,f(nX#,!ʍw_h4qۊgh&^]DG?Vvؘ$8L@^_ޯЯѮyj;حv\Y'FO6hy{9<Cx'FAP57d\xWg녲l):𓓰/NH3D}% Dd,:ew&C7έ. k3b@2i'u3TsƁ}fB>m.W WY`]ܙKf|PVN6hZ˾O4ؘ1r"XZ')}?~{\~&7p_1㾔ѭeIg.IFmHNUqOs{8XGj9|Qzm-kv9 _YXgYz XmYxF %HїGth8ќ8{:O&O fO [O? (^fLO w ع-[ \.8N$rm)HdM+;|ɿlMѾef']82n[gHۧQ1;{.Qr<^x'-vY}2R"csXuh/,0D.2}GЕKDq֊r S7w9J }H[?҇@y*7kI=cH;Zi_#>`􊌫`l l1+`^8X?#K~u{nkHnO^DCMͬ:[_pYY`mYI _00or8@ _XGA3:`\KΟ}$Q|}PK%5V͎]A0hvUɴ"3i2~2#9-w~H[Qt@l$PqTQ<]X: }(F?gl=FPJ){,& nF,ۗϫp7r~?}u?z4ZB;M')^3Kh{9Jh$" [P&v=g }S q;.j o E:=P|尞ѯ߂?Y?ײS,6bfY,EۍY9c8ȄF{Og`)_R*A6>v?. Fåjf@}O~HPWh WGexOиƆGGawiv AESƾ̘;:yn<w/]/42ZW39%$=OcK(^jY7q!z|bY@VS'Ϯy# ]K'J׉ɹ!*]*Ӷ]@9oVXY؄=_* %%awͶuԥ0grz/ , , u pZ>"#'Y]  qRr?jcdǫs<͉ Nisi z#9ЦKߛ$"zlTx@BDV;74Ɔ<ۇenG8֡?U{ls#"k }O|_K>IlHApʡ  KG{L\|JX냵U,udRVz`d\v1:=y3+Ao^{q c'U5xbښxh6[<ˈԟB8mU9lQ\Fggpk*g|mT?1[eeehg}EY s9*l 'vrb@&rGlA|@`";O1e,q0]7~@5fȌӿ}=oW· $x/w8&}DGyEn ) 8|seWv?Mc({ kf-?4ۣc4]Fs=&U_#&'+#|P\ Hϵ@(]L[L=B^~53Nـ1 EI3o@Ã-˞V ݸ >u _ dCE[x)X/e&?8 ?EN.}t98?8rr r{O t>)i`K_JeGtDRbK YHdhSdkNo}ylU~5/>гu''GuA>kr$d8ȿ=yTyB<'~+@ { ڢи@YP0x &@AӅFxp8Ɔ/Ҋ-4.`223V'#)' J8C˘>YY k{MFcr !2x/%!]nq}֔Py%y3U8/;6lr:GwZ۽0yzbs@ۯT~(0&6=|_c@ /?oU~̀{ر$@\fLG:/ڲϷ6_=. \@067ē,ʉӏ7:;tj7&yƙ Ǔ~ Р/РwO /e%?SN™"ԠLT)O*" OlZ3i ~@k3ւd < #q_)vG/*[$k7J ~ ߸dy2N/r tW^Mrلp/S{4Λ> @Ym?e G-*^A \֜툎&Ϊs_c ~&EiSrrhn?k${UhG9>:O> M]m%:w$G_t'c@5oN}*vNQL94Q.ý)}7SN }O1nI*t< . , , , 8 g%yY,S,\>vg8<%tBg[ A4OBKN Q ;6#=?#\I{`dz)` vvUÍOQevGY6v v-T444A^ n[ڗTA=kk>r ޓuB`@_O }}s'YE7z_,u}RgeɌ %x xn7zC;8 P(Y-JP*fS@ 7Wi=6(pbpr yQ z c]U:ӛ!} I 6ccVՅvO ~ 6~&ypeeeecbb),Y){൶y,\?'X88v.0'wP3NFe@[&/Z<;,R4s' 7;'ٴG r/GoL4[<\(&Pn34or) -wۜC_Y%W u{+ {6(:Fu܉k9;ѻt$ p?מ|,|!yT$rh[9zs_  r68<^7j`搼6M(WZ`m\i-:+A}C3dٔ:^vfˡC/{Ω=|]!@ݎ4 xc̀fZNɍYǡF0+2)l# QAAfN8O:bߎW;A}lF'dK`}6z/u2}z19]vhG$V]#/u!! q\l18SxO` \ƵW̹Cϐ{l%~mj5‚?k৛|u#-%76p?rqVq +n6lvj'n#1!(Ef\V+A2AO[,>ಱ "ze8rpJ?o@ vPS E>~,`!4F@c|BGkO$UWMrԽgyJ)xA۝`v@yp'>_GhUC63UxqMmʖe_u e6D A3?"@ra3_'*cϳhȃN:Z GrwL*9C39{h6y >%knP߫% @w0EZxX/vjbgxKk3|!ޱ#˘˱FA~o@AF^>Z'={?W`6>yOiǩ}F2;)qKW~AqxU|߼O/2ǜSsBed}~A*CO0˷@֒53YGʾ[^(Q?})^Sl>Hh\Ǧ} u Rv^e f@7">׽Q@8<.|QE"Y &}9z gMi}s?sN=8 lhM<ט |{+=ӏ3mn~/ , , , lXk% \jtx?H\f'T}H=ѡ^u8guOyҕ`ݿ |__))gy@_Tv{IOlR}Wqp{n'_J~lmCud>Xe,8tYN42,Se4I/hzM!63[ u=^j\ @V=f-KCc- (4䬏@[F.{Xzd`Û k=)^ׅCK:ph+rm rxV@WsNF}ApUu/yrw8zIQ w06_6r̥=E3\M{J6]—ޒ[W: 爖2>;̌?u| )2?qC8>*WkV剞IJ[2_&g6>>IPg=cwYg,qr-Io* _t{@0sql H>' &(5$u[Gg`p'R˲}:P&(# u2^?wI)t\VFl:uO3kStDs%ࠞ'\N_sqr`d؏A@{h_mZW9 #_ZwN щ~bkG 8=e}]KU?_u\|kl~N{'}v[#YVi<x6~W=Smj?znvDu÷} 6Yb;/DO5mY$2A?  tȕSMloxf@0Nq`]rI_x)Nuq c[o0 SxAṆ#)DT|,֋-6~I/2|8v`Zȋ`Xʬ=`mry _8=uw :taOPn^ZCs ½ k̛ Hc˽h=&1!ZKrmTeh=8I2:~ᬃ}?:!G{`îgu<6T—X{{Ҳ/Cs(gG^!uZSLp9UNR_!x'` : l xYʡ&h:ȱ:2qޱxlB *P ;sWG_KmܛS$>)o%([z_\o8gF^>ea]>}Bw*\O Y}g`Ш+>oANOОA> qd1*_qM' 4cdAڞ%\&  y7ƁqNM[sysP3ʉKmO,xS~~F]{9{$sUU)lwΩ#'vKeh~NYrj r9@//Cz}ү2 8;ؽ N- >w_e'&rG&`H~R*^]3@ 4pA3K!iUod> 5f m0y"他-e-jMڢ^W:}dчK++?_}u;Fo׽Ao)FI^ukYc)gB=}-c̃ot`B`_ɿU c.9<Of.<^]e/|Y`Y`YZ`mՙ_~Q ̎p ڦYSvo}Q$('e%O0lM;ˁ@9Oo(:':Gԝ]>XDLȏÝ1Umf؅ S ޘP9 /vT!2<'Is~ d.ZY d[tF]' І5Tk|\Дo[u`m%GSC{m|$g˔'с; "vl(o W{q=sBo%nynEg\qnݗ$ݳ3Jzi%_RI2 A)$Hzc){j;(6@IDAT'Я_}~ρ?4GU'@#2iux]&s m\ڰ~_*_xK ҵ,,'_~:wQ_r9rۏ ]Yx8 |;`~p7.@wVLwZ.m=> DG*;A;p07eٔ_"dW@IB uEE Qn O7\\YG9pP~نw'zN*ϝa^<0>"C&-jiYnxu }_ρ@;:H=ͯ*ImDKIί}\2:;F[ʮ)׊w?98_3Av7џ9\nb<*bVD/r _XXx4 G5wc!;5#y/2+c$Ǒ@w`x88qrDZN~s?C~ &.nS2qGB<)wABxaqf~Va Yu#Ggqr)$ᐯ `Y=jp!AUV kkd(r Rf3:Y Ts~{_}GgoC{6 g0 :?5b+_^9!d"+8,$>UPBcAƉ} h1|haOt;>Ă9\*]{5>0@w?7~~O:htN+7ʑ=J}8x/oeeeG:xԙ_~cFG~V<й|@@N%Op7/rp}Z8w|j;8ϾCV$@=nG[ oKpUk'mnw(9B:h(:<!FSmgrБ'aljJl"RXaJ֯ Bg;ihw LGu-gitiK0tV11Ro_>tT]#ɱO):Mwߡdl 2M߰ =C6D,{2Ϟ#k싗_9`/cR';ʑMBg]x)[pY`Y`YQ-u׸ߍppp`I=s ]-/'ˁ%^~VdOvWyWrOl1k{O_ 7lɺ |;׵;A;rqm]x\zi\~ @cA< 7\r˖s_P>U{ɿ Կ*+3C!'A@ù>|g c#e.\Pz{gݢc_cQcu8sF-g^8qXwZŻm @jG+s &9]?OY O]>Pk(и$:dxC? Hϐ>qFӎۢsR;s@?^-R =$P@'thkz4l#9ӟJIC;{Kn$? T iJOcdx(yO7qU|yS?<@e|xE_+)~ɥoGe,,,,Y`,,E8@"'qq^q\ (98| ǘs+׳ptMyκ~ `g[X .@r{kWh>U7H~2OUv C aW+>i;;x C9;$G93<KeE/ , , <#CYgGk59TG?,+Wʑ1RCM=П6.v@=#ޮ%'0a9?ƌ;q~LW3nG ҆&0CU6x y_`~u6twh\kQd]$zǧ8p V_>Kv @g_{?A*xng< ݂txU9GY@a]/[S=~? >vNb~ZH8|K|_y*ѵh)w]p˺: .#[ROfx%,,,HX4k?qLWGpIӃ|QYE8yՇr M,)?;HDzԥoʻhsT8sFɅH8t29kpF1.l,^ȿ:t[Ֆ$,|_K;5Dv /t/GNiYY| ~mKOYݾ,)u#_GA?w>0* -ʹX#UO 0 kt\7װz V_п/4/i>\@7ư?cG{!z ϓF}@.Y;wLÎu%^/p}N]ézx{-6k~wmVK,^b%,Zǀ/80 l*(O#Q-A=<78twG>eS՝p{ 3Iԏ :HK0`9xJ]7vFJ0 y hM>*spF5>k $u `XʳO~\/W#u^?KWOw\.wx# IgU %cPFOOX~zIm92_@z~ ?:!ACDz9O~~៧LN^?I#nvsdodA?[:ޥYvju3-#v;Isl5l8y$3#| f{^xo <?NO/?LƏ3#VldEfG?`/: ^ӷ޿X#|!@F&0fNx? Fp 5Zn~x r{wuWǃN?Xh!?$GI2y9`oRCɇҝC߅wf<kOn u$~.3Ng#޿#:n#w)LH?7.rY`Y`Y-~ ,g ř8;/NSdBGвe;Jp{0~䨗@=0:<*{-TeM F/$?K.u|pa(Jdև^G |@9t:\\ y໬uHF kuu ?8A}>Rttp} XX^|{u=q!$5g ?C+~ppCO Aq(sH_<^$ ϕGDi7=/ , , <#CYq:Qf:hXNǎG$Ps}Fv}e-m"{.:=On(g| v;MdnS6b}k d΁^' R: 4RyC?˪Hylp w.܁]R6kY,#9743qʃZj7z % /&K]ɼSfW9P'8|^16}׿ v ^9=p@d#wu[ӬKeeee [xCe) :"Wgr A ԁa灿$'!:9[OIzA bDUz4D/vU@քGZКaMv=x4e/z6>THN\0>0wr'" 7Nm̫ݓ42d?y?mx?/}1tϙlVO/(o9`wPӇHX'}_ks?>\_-dqޭpp@<8e#`2;*#2+Hyx^[dm z7P',`Rזdd O{ @e9pzvH8Q,ul; cI3ܸ'~@~j <9(Qp@hmQ<Q^]Oߔ}mM ҏ_R h\wПA(#ȳχ: } W'+o@kwp0 kGNRxʏdz}/0zE/ , , , ,NXزCX)A}/!^iNXs lޚS9I}M<:}H;cg9=@޵4\cY?>@"xTdn? ,?̬˃2(࿿RwN뱮716M{x?wr=@\8Tcۓ\t<k y t}Q|  }P{#}s9x'So_pY`Y`Y-}P\_fl/-(JTƩ5jDzEq0Ji~\>C#Z6 8'+p_z 'Hv B<_7_03T GPdޓ-=K_`GM*@=OMj<v$p}*Dx::-_265 b_&-,iX& IdG"GN8@9,y8qw [ٳ-An-tON@ƕ;h8Sߥf ;8Vx _S3%^Z&ރBq u }rZo ?Z \xjW4׆ym>e\;u/sU۫W%RYxc_6gN+#OWڀNPͼ:vQ{Rn?D:}z:jF9a>Uf}^(L?%;_i>u\[kktӵ,:;G`up,-п+s@9/^0T'DhmH)x]8 , qC<6=TgKnT{(HDyVIc ];SA?ews~ʨg}`|o4^Jc$@#yfp_-cw mq]c3_\" >i<Y|1y'u 7p} |k?mg ޯԎW~@47{tm3H(ƘtO9˄.]_ǻ—XoSG?ie{:YY}ZȗM_`|DYx_ά 7TR,<gog~őa~9>RC wn.e' ]r,vc4.ZSe6uܘC\{+us>^'>OL5'zWp_hHFIc4͕xEM6g_6cI?0~@^'|!@k/8W~_}@ njtEXkKHvz3n,eoZwhU[`p|i%(9:8;j=>!S =ˁ+5^Άk6>c&4Nn'̟99(w=㫺΍a(9P'V>)Leq֓ˀᵺMYtKY'ZCи{Pvmd^<A/. u^SU,pX{ޣn^2wlupǓ,,/ഝ/d<V8$ ~ @F/A\JL'y+Q< CyNr ?Y ݾ8%9(9ixr#_r.Ue C lVߊ˚G^Zg&=ß3t]9i}k}'~?"碠kRt|#çoUq0}Ss(fn=\;Xt?I.{))kc = 7>PO)k H!' ԉm"ycT/sY^CE. XkKw:^~% /EƗ45r\ D!@A?l,vzt:: 6uk99ד!!v"LdžC~PμqSǁaٔ:BU)znC{& ]Z#l::粮]mt {d]q+`p ja_+|盥?+B?&?suQCF|\s}Pr<_W/yG}P$tfJO}Xm7GL8{[d*'u<"iT[!f}]rk.{kuz?gZ}wxĵ e Qv }_(3rm,f=jsy/g:p }^`eG& $T%H;ؔ̔ ^#IY̼A΀μEomBOL ۟t:*_c|O!e^R&9ᅎ3AD98k1Aq)O/'^w﮳@9ĆS7[c5!l:͊5^3:r@-C"yAwأ_9eUN_F!ut{߯"Hqϣb>;\:z٬|YLWUا_W6k=/ ܓ=˲X/|Qw<]Kx]rʀ88q{ }tǽi#wN=S)L }"~,i+w=6y\Q|:mnh3#t gC1rt@Wk?A2e_ [<;҅KK3zIG0ZPe)|3isz!xY I@ w ۵3n^l~4ge!yL@[{91IL#.uut's^>A+E?y'XC(@K TcH?%5N$hLG $y 2W>T4-P"{7^KDC`4V;Uo&} c'J?ʡ콿,%RK\vD[iY`Y`Y`YX`|.8u8d{wa@8qqvɜaT8G<uufu _x Y6TYcU'(^TYߍ۴2+S?u lziơ9`sIw[( Yө? dƜ |qP 8לoRvQ8%K3-f(g8ց9H`kx"wjk{}άm&go~JadA?Âge|)/ ʂh#Rhx,,,-᤮!- |p쟃vp@ՐWx~_('Gj Yu(qB{8qZY˂C_ŧ!8!Ԙ.ك zpq/͛14@r ჆O :JFy_ ().Ts}r?)0iIc" ? #]/ɱv҇ZG?F耖9%W4AyٖΝ`w&/;5/GP8Uz,{ue _V9WD:N-z6 zfwE[t+I ^u,,,,plupl,'5u~SksN!1iy_4*4)N0N%8wY_# D?v{(ixvj?"[9_t?ݺS_+]g'/rDS-I t;N/U-2,yV'S`ldX}<~O 6A Z._xة$N]N+4D2w8ȱ Y8At }"vF6iXdӏ1~D4< 9!ƅ^ASO=ذ{wlɼ:>]?/> ;<#WK .hn [S z/>4Kأwbc48sS{dž(<6>(~]v"W}39 e$1XXXX#-@wg7qbw;d8qp$is`ʔU9xRN9J?}ڊNE㐞\=v|F>|7!sO>expCV; Ds_ r@]? qR{.le#7EE 2ΝhEG63x &fks ktZb38p@>˶R7ί6J5ӆ=Lp v=mݚ9#7.k}9Y6mӳE=|?;ٷTe[ogxR rYXvYܟh~|/?1ؼ;_ qAl>e`«,:/^1irIZ<Sy_~-Amѧ'''SЏ<geG`m/Qǟ4w=bK?4r$d[8nRӵJ?̡G>z515OR.^K#>5khp5N3'ʶoSϣ>l`.[5xj>J lr j!H6mz=עkxeK/;' w e?&852 w)at . , , , tiIvO' ,rq0h(KQ3@r$3czzR<~_D_A|]cr/Y^Я؆~VxG?)u;)וO9ZE]8@+9lu߀Wo-i>T~吀>w*;0SI>3/4^\k Nr'+x-OOy!y̟U R7uݱCFغb[7<3'c>yF9tkoSl#oI_^Ԫ,,,[`S֗ۯlKywKV}C޲Х3.$: zFd%zH7)uUK%1>8 D tn^Pkw#֮>$oA}s:mW8]cpyCGR+{'<)x`-u:\9j<^#rE;>!Mʩ;#@$F>+e _XXXxjݑf⎺w%n 8r4|6go''-vq+ǹ$&Oo(ځ=_wTouGZxA?߱AOԻ~x+} ɡ1sY.tu^vkA}%I8"dX1]ot҇ai"\rWa)::/2szw'kcC~\  G}Pws0`'H7(CP7g\<)pm>ړv~BϯA@yM\jBY9LaX'QP WI6=M"\XXXhX O \rTvzc88U.mpJ|&Źtp,}-'N'| Dv8k)&S'|_֏':_A~?:#fj;:mc"um%?cݨQ㰾WքۂT0}` m\@/InН~I#Y+h:B0m?52A_{ Qk!#¯2rQ\4{N <])4^y >i9tMQ1W+Uٳ'nkPk@%쥁ޣX3 uE> 9̟!xy5,,,X=oq>ȶm>'VqU9?,?W;8Bq{~%@ہ#rd5!wE rÀ *JוIv4^MP8 ACA2Op Air:.fK[/mF\9@gj|g4ZXV52ڭ6B[2 ;㑃7Ke^(5zGEe~u!5ȝBlBvY?`ׁLƛʍsZ.kH֞6iKC8}S5ɽ42+=s\pЫ#:X`Y`Y Epy4 {I_O D}󠕿%l ?#)w5xY*@:}$?>; +牆8qi#)ẋN_S}s{LcINj`P2. 5'#v)U]܇ޡ9x L'Ͱ:9xIGϔWc^8Za) Z82'H?teG7pjql] #!0xʀJWςp6җ@.c? 9Hڡ_;@o?5%h_عSleglU,,,,` ^l8q q} '?'I_}ݑ$XqppZ;K>Ozv&o? M&gL=H@ w= rK}AfMix[/ oIu?ӧ;Bwpqf E Ѡp:CN;7v~? 2_Q<렽З`/S61v'8SO땾&) xG=d+ \<Oxx^k;s@xnYYIR!#>}L6-kzZVס`\Q~fKQ[XXX,JXXxpဖ7x˹7O(;Hyt0zASuw_=.3wh,H[O!T8eg榌L8P} @>W#]<5@ wS/};/ uuym^z\@z=g i1ywе2I_ti^v ,)Bp*{ʶC[ }mÏ~$;%5G^'Yk܇S%-NGۥ.#}KKxdNO;8<~R8.*ʫpY`Y`Y`Y`X` S,dY`Y%|(Ư ʿș# '`=?¹_lwO&yG|7ex.3^sC#_9@!7ZRȐ[馫˅vHah;3ЕCẍĺ>Uq脯C!dKr2 6st]W񶞪YdEֿd}1 ΌCO5{}6ޣ}Mv15o;8sz*BY>B)08 ReP ~^el=|^>!%cvWu _T ,Ӊ=A:_P0+Oj# ԗ@IDATH9 8q8?hjڀttuF/]~p ;<@b,v4_q'wDl>;w[Qc1diܞAh.)7,~tA)ʶ!:a'/~oHtI]n>/**!Xc}(hlMbYzi-d3ks00uutE_븫E>:2r=HA4~Mjp:Yc-3:O)wUt1zveee:x_C_x8u8ʹ|< '25'>J2No,A0'$8;?.t C.?O< SL;swPi/42ƾ{8l7x #6&7^kmn tv> "LY@D}g:|{J9]|19h;*ݟH{kGO^kU6hzJ>S>zJ{m;BWhYsX=G&Џd>4wkٻ^jW H/W8  "'^K@j=h˲ɤ0>nK^e/k^euXF{xCù>NQ^.p@ j>(C}=G/#A$pB]| OA!#[F:7*?đqjA,:=Udg8ЗrGФ.V}Gָ>)rtf̽}V]Iۭj;喍<N^G.s^^c#(UN?P5 e3ʕRQTI3xcƱM13?ž%C]05F;\^otuַ#k?8?;u^w觬]"\ Ցe_|QqhW t7d%/r O> s~W];%_WvYy̡w_>}+BOu$tJ4m T6wĵ"!k8gT/zz?Qw5>Svx]#v(A 8Zcp Tr}lRsDOݞUKgєeCc/b];GGgЖZK,ו;%9  `x4&dNָLx-ryeeeG:x_]xc tg 8_(w_rԏ't@2(N ! N=3xs4|#P~;8vՆR)[qndɈ5Fd+N25KB|=Ә <[Nw3P*OjovyEIy#:ẉ ?@eOp~x;XRҁC6KtEy^UhѴϾf؃\\h3E +H{C<-A_c%1})!G}_4^"q蕖6?yaY`Y`YE3;y C~? G_LN ʎ$(u.9闌h8(ܕJF'82O@c } MN?pnw)Se 'ЛSPa9O#VfX_`LA?P6 {nKҴT ~" /0ujͩ >"Q{Ͻ{yp`֮mPp\g Y%SeDQZLx>ʦ  J"zgҩ&!঵x?2x"w|K=ё!x_k=SY8cfMg >ֹd{\Eu=s—Z@8cGƉ}wU%:[e$ΧOq;9W{;؇!mJ y x}>~Y:7$/xY;q?c ˲X&;N4l:jZ&xDSO}1tYg31 D&8TuLMz\;g['!a'=ԭ8S6`k d.Hƍmx Z_pC ][knr-e`u"MioR=g}Wc7U? (A!G$E {ٌCW:[ ?T?G_XbD$v!?{"RY@6%e2qJtr)#n|-ӆ%h ޡN>O?~}BrcTξ=5luȑR>z>w~9,,,X8k8\@''˹4!锒AoX9ShllZ~`Ы:vUǸ`WʹNycȪI`:QI8bM:`f=]w-X)tp( ./~p#~'@R{3=H oH,`1O"W#tT *=)ۍi&e[c/z k֏'2?ѕ>g=qdFwOP}( WXُs`@]*ضqxI!8۽#]MBdu7Y;_vX$ډ3@_0?\\;8H$P4Υ nYӎt?^@^3աu:ˤgQINjc.qUo8GWv%i5:DA< #%?wM;4uxx]o槎 vӎd @zt Sz[.& ¾- iZGc]u>zoa*< GeګW@bSOjЯ@ z/m 9oG[9T堀ibxФ:يQXXXxx _oi#-ߓuvPKO2 q6q2+~!H2.H[Γx?EW;E7x|}W gq=F]epzaKZ砳Q(k|Pב})})8@K_A;RBylv8⥬Ii}lOy g; NofƂ,Ps9-Mc Q7}aڰ(}QȾRBwWg9ȡAT=2/l5;N qM?~, r)Zx (s(vJɳz .24-'N܁"Ee~u@<uP_z2? ݆J^W8i|ᶱ`llƲkqRf|dSi.._ <&`5- }lf(hW ޜ5Ɏẹ?_"ܘN`}>Q[yyf1*Z+# !k-? 0ޮU]AxW G8bpC㚰T7{!eJN>>W7:neW[u5j%O:I_. 8ҋ]e;5}콎]9Gm:.0RJ#mT̾HWLqwH<{8o ]臟Mb q%Zok rןֲa ~S6yV{r%_͛EULfGe]68ufz$2drx9*|eeeG:xƿ, PŹJN;^gs SNn8Ӈ>%A94wCGݞnH}ЇKr`XRFp@9ɰ}ֆ E4-(" P]P@8> \cz$y0F(Nw4ڻv:MBTϺ<=frnDEW *et{'o2W͜f} wS2<T۳x/2{E2lk2ьȤ<4lY#[`<쯱/ |px )Gg1plE;z2ߥ>t x9G=gn:dNԍSuMK.G~GO2Nz2#=8#RT}гK ^;U1p*vaFQA9#oFWzv2l6mhE絠+֊8 _SUm8S;iv|Fe>yw?m~矿SpPhrɓl 9 ;+ &y qY{X;k ԵCic! ,mC Φy@>"(4ҽ.Ҁ҉42L 'dJ14Ϭ1,ӌY4w4{h'%>?Ic6rE~)Ȏ^ጋ48z{%$OcK۠Y/f!@rUV}H{+6ޫxj\dCε]'{fA;)e5P՝IGNQҫdYY,pX:3_wlqT;;+x`xۇJpH `L%SM Nrn8n\G%!=)=t/W1~ɺnNZ}6O`WG$;Pg}UYOwE`? v}NGHۓ/vq06`z s:2~3 x-kĺ2Ժ͝^s%㎀ iO/#Dy6@OrHׅDּWP<blyU+,^aUeY`Y`E9m)4|9$s %n8 'fgv=[Y}V,W{+Ax.9?xكk_c_ۘ2A89HIy {N#7w 1AP0.;çWd I٨FY s~:Qt.7jjӟ_){_ Y r>E @~$\|]ok/^*[xX[Y/fc- _Nrho?[P8]yAAb5'ӁTIyFR,~絶)xHGl}:*v 6&6rZ *hI'kt;K~ῧ~Se?t )TG9 |T=2A#spqqq6 "y?(;xO$;w}Z~KA8Щ,el@sE 9 k{AQ%^y~4.`2*3Sm|2XkU?uLȬ,uyy= e/[աțm)Tgڥgytc_š3|^\JOsN$S~SXoѳ. H iֲ;ᗞ#@ q8o>ނqC/8o#0#ia,4;㔓txK7K/ԮL>O/o? ek4%.4qj>|WИ9 _Dן>c.FKy6W~pIK6uW>~vl~CkJ岾ɨpEݜKS;/ɴO/A~p^#õ|=^񼗇zs@蠎xP5z,ֲ6,pGXw4+ҋ35@'@Gp ѯvp7bVf; w O;0-GwO[ Zu?46Ils9pp_pxxnCy\:TAc+YD;+gSl,ߊ-yfd*:s˔\_ijAqIr-skZב3DuI&6k8eqnL0"|SgeKZ2}u,|Y,i6V_~u ]V~7,;*'8 'Kv< ';vҰ Π:ĉC YE&e?v%GKuCbLkcˏ$wO_}C^12 A{yP >Я _ugҧ~nqt`w֊Z*=*Jj2 \V^`ݶT@9kkR?z >CxcF/ ZK do,]DW\oduHƺ,,eJw*pc~RYo0Ƒr' q$%;8@!rTBV߇L/q7Jξ}8PQ }k\nEF k @8x7 1j>@{Nr ,E1o"HADL1f:r ށXS8kSpʃ+YRv+ڨ֞I9wzg,ir?K?%$8:N;sJy!t:/ . ҲZ`̬~- ݅#=?qZA<p+Q(?;gt%\^doئ;[AW,  Y$;jvw{5>(>?ⳠAƇ^|T</-$)h"8*;oOguD`7tG}8 >qߡhgŢo RbG9qF-r;-w\ARp-؟^p>ؾؕ6(O};[ uЯ@@RACsa{OsP𘇑'8L}hSrL8mS-0L/Ѽ AG'ȿ-@&7T2;,4gYBsw%8~A %O@@;(n8d]̘3diLrouF~d"OfW[n M0HSaJSq W Q%S*d>8@Wwgw:T_;7-^~,n;a+Ew%' u37urQJ [Mse S 6 C\CQ7 ѐ5v0ܬ@[G.~G jw# 2fz!8;K? s//óx/ U|1%넟⢒U,,,--  a7ڟڙFPل|/n2q >DndG):p6pq_+sg8 H~tӶi/}}Kṏ du2q 9 \<GO: fnXz /#^/_XHZ5;$*hD>8kk}u] [>{xMпH q |cd 'uh;{#uf_־Jއ5ej8Xt$N;CXG>WSdFn6}s'}M;GtL`M; 9~_ ym.M?s_; Owv*'cO9W@EE>W=+omZ+^~-:Jb}#֚b9*G52t3X 9'Y/!ծEl;=wJշ@2+_!{%9O#yS}|8%f7Oe=Ɲ.Vmauy /_oĿΈvS:KnNё)+8>I٬+|WF1K_jߥFՎe=p5-8_s揻$P v|ORK?<#vցmA:3`H|'??Ά< RQ`JMFy%eO$jt!̏Y{Ysj}@d 뎵F:8Ÿڧ/~~\U)b\7\c\OAdc2.?vmeE歬 _XXxXqVט~(_k ]w}8I/eG_ " AE.\;sTD.+ 9 :`P6}*CUw4|OvE ~h̿`@"$DޡYV87<OZ!9Rhv]撒:(1J؇+[&u¯1) } `drk7|!e6JmKG\o=3g`[ T+8vqpvI }LKt9Wel4@ei%Rx8 <@pCp'!G O"NfxACenKgLun]szt w,' Q2@I6D3'(9r՜|T% }P4i g4X * pSS ֊SmcIbvƆpeGwuTINIn@W@9`gXaͺ%iewZu`(J7gl^U=Ʒ7Op`\W~M{EogW3}jؚ[_<{l~>y-5z`m\QYcz#NyK"z ~p, * L@`N$w9!A_3Oƌ=\KP@GݝPm>X.ޜkIo?gu|)^2 Ė_';wau'y/wunKN ıާ4*o| wᄟd @y@lpmyzG;!sAڎ|55ק$ŸU$5+ykEXi)i;//=^,g<1 ( LkpāTI?`@G$t5Efth/@6{IHk $d`jh`/3/1@|ssgJ&OHFKbV=9V1~P*< aEuAqq1l0\3baI˹Cw?k~@|? ~ܾǟUV5БJ aOitnkz@a`W\JC`U߽iAJ/dlB3Y8:}mVi꾚>^6<́{3n46f^w:8MJkI"[O|eZKe\Tr se\J . ijm:Mf<M?y ~ .5[Mo/%h}`y`y`yF<6n@a.ܒHe=~yzCF[Ʌ:)/cMcGU-/sRls^0w+7om;V}ϐ76BOɸ;7HgJ+&ڐ;Bf nڒfxvyҠmIWmjw/5Rv$㽊%ם6?'aM//a[5{`m\ycݓG|%CHfz|p'#OM' =<@X;-=fѾTs} ;ÅmEO@->%8xNcńNEz!+yC<'j`68L)_WXB;4Ok^tíT/6|`q-``[^::;no c. ZoMz@$6sB\=[壷~w ݙ|Y/%_;"R3D08n} v}>_<Ȭ6:Pk^.GOyp,J?b/sMPpz.UH1a: 0w R|Yckygr-ąiݧM[s˵m\yXo/E`<_$I?+w?N.;UP3A CGf?h$$Aa+6'-5s!N!8G!ڇ Z~s2ZzNcb,9f?9 {+К9u;H%:.R:\Ym:i-9\3]G@ k6d#op .Ve4؊"{仨 r—kzA0}_ ztߨ9Q%J.8ѿ00^ v;No\véL1x &GN ߋ/$'lxctEF@'(ǶqieK5B{`<{=kMyNz *sɿ<_~ׄku!O!gStmh|Xɱ& .,,ܣ=5+UuUO|7wUÏ<`Qq %4:PhړswG;c̼ }SĹj'1I|:^x t:mwRlơWp&@m"5)PvJ/R]ti]rPƹ 񂌑k_M'gs F~?$Tϓ96l!\ shCwu%[XX [9Rk7%J=]w~\O|WO;~_vÞ; 'SM2LBnHtC?V}oXڷa"M/;:μ ^FEP>cWzW͓Mg؂Ь*#TٳNA{5d]c!#կl?0?|`+_c{%M,GY聵pGmyy=@@&W '@Bݝ9/:u/йW|JkXx$pơ/IgH{ւL9Yb9ǿ OkZ a'v9NjftodMxA֎hjxX.Mˮ5xӧѻXen ׌u:1?~$|l:ׂ-]+丄̋l[#ƽ⧾tl߰|y.iL]\Tu"7-}xKAm3o6z79ŗ>،ulLDzxH-oBcr+e;mq~$CG7Sܨ#lΥ!k:r: ``N>S5<%[C<ٯ-.?6kc_偧x`m<[Kwy`y"Ee*&0󙦷=E@ =Xt'Ś`#zfܒ%3' k7/Cd6ӝyE@;9OOlM*<|"8|S>d;QY=֞cb]}<^r?pl̉?m{}X5hfE&VQЪ@{)-]/ _3#%lP ~EHUmvdLs{06&ms=|VOOܽvzZAB_r&:~~}](.]6uB88K/WYXXg {>knW|`/xjw#s!wZuNtfzj̛{ƚ7. @>0=Alp C ~a~'Ç9>M6&)N}bc]mx廙i>DAoTr?6ᵶ}<`0(pXT&ft5FוӰ%\#r@6.-i~oӗ[z恵pmGdgy<1Owէw -8A*?FIk{sM#4qy2O >͟/}h/}Ď ط(%xR}òm,/g:ozR6vDE[%n㻿t<#ژKaU6wMF2[~S4Z1`s _R(W*}L=Z%Mﭣ=ʚz`m[^r_ <d5Akϋ`^e ܴQ=h|8\淓 9:opIи7~@'~ӧ7dEwg 1rXqduvn\2] $[햮tj6)Ɖs IzjTc7odS.\ҏ~\h|>+^m[m:Xd]\ 6?mc먟ۺ;uS3fJ>淚õPsI?t|<]$$T6^}EW%zg>УXu1isYQ:5Wtzy=6^ء #!0VwGm(s8 `[;ȁ;oN JxL,⥀b<V`mˆO`d(=RNEv p_5^zh-|zIG0ZPȲȣ0>!<50L/̇{Dƺ'xT5:&7 {Um"wC$fɄQIc3v*⁵p+GjsyF<8A=({3:ƚ+zk ~,y T뽚s>:p.c{߷r, k{`mX/ 0 <)%ljx$#@$Bt(`Q_2?FGrΏ`xpۓ>rpQ] iF7lz@CsZpY8p@m1q/م7aL.} G$g;tml&)عs%6_s<|tưe e(u`A&j] <@l46e1l̳79 F<k I?)tIr΀‡#~-<<6c;WxmL+ʀ/4mKKc'F=>zj=u#|Gɫ{J|Q Ӗd??&<AMr.,54x`mʑZ\1$PÆsw'Ԇ.Vlg{_=Tz'~$7G?2̓F}JaS~uYo;IaN=7旚$?$`|*cL殿왯52fx?l1Z.c5^}fZc&Y0rƼ3F$5CẊΉ?tZ?O;6>K1m'fEx bermrbTM'Ns^Us(ncx^5]`y`y`y<6np.ܞ%hG7;<Nr$3$UGdIDܢPkCw  .u3n`hCf sVSl$_?O 'K: V^aLGePN|u,gB^xw+2q0{`{׮'FfܻcLAQ:zP_G5{h!_gI7?(? }~0lx@J|/:϶Vodr=,޵y`m\YyU ogb$IUyBx :9q}R:vfN j$WvIhU^Іj̽l `>)}*ƞc7K_M *wy5_2=^38MP.^5"ca#s۠ %11 ͸5>Ӆ{7'#CcWf\ s.9qM\C1IDeCtINsWo>gb#,  :f0O>E{xRyG/ii,Gt,wp_O (4qיB'C'hoHX$#$KIe.$W|' 46CH5(w߂ߴ(9Ǫ nh$?Z7G:ԿU>Ɗ^=<< ɗ[sBd)C'xY04s(o dV7;㳌C_O<$x/ɪPNbO+.`1F;J~Ʒ/7cAF庆2M$ـM9ד@Ԡ. oEgk#Ʒ 2ύhϝ6{NE'ۂGzpxxM{蔎o$YC>gDxAktV2rUN~ƨ|L&'~Hy 8/ǿ} $tG=f[kư @0|िgA<2_\vXC-͓~}z;DZʯ' II85l@w v~u|3&NJ})Y~x]'Sc- _@ 7Fnkts~8Xڢw3'C[GSXfj==2;N*w<.VldpL#>F@|M\_`f!>W{/g|;+gyw -T_ 㘸\^B#mm<<<X~F@IӅ窀 /_PbMdF@C'%tm! Vc/MGߢ:na`FKJ V,3{Ƃ-|4s7G㌃d??/c"w/ 99ܬ/W4%z/܇Mx{42q+ 刖k:^ņ ds=){Qf^6t coxx-?bg^h9a9:vߧ9lC2q:?'Җ>e ?:&@>JFJ#Ox9T C cx:NokưV~ >bU5.mi/8 =<B}tdֈ#oG] ]|JI3HunAzC{vf3Tf O\S.<8w)fm[5z`m\QYcZ3 ܕy*@#'SGIa%`˸XKR %)A~&܉~Cɉ Os/;};*cRH${lH*w_?;)z/ce᳹@Ÿ<Ԉ̩୉QRkDZt܇"M@t?qe >4ė5&F3s98 G4@dIYh eó#ßkJTz>7>/}Yir_5'pL?>&~Q A̓:E=Q8 8>f[Kgy`y`ywz`mN.oI~9)Kđ 9x~_aAP9Im'G~i7"lDA|5ԼO`0/T $9?sFeϺ] f 5^ic2?^;\З=S˟6B0}k<%fSiswys7P6rs }یYi j/Б-l0u$\($/~ߐQiWjs>m ͱHg₏x5I{[XXxm >?K^ksK@ N w-t6ww3,>m$҇Ϝ}\IWbWIĂI(1{|UxD ױ/ ylJ0A'5<I>I6LөINMGbvF<ƘYsx˚X~r~'s:B߳؎kZz`/L3tc:pᾂ4n B/oRifM'8В'E+n Q$ݿΟğmDU.od#8cqpqx#@I p'k6[7S =)3 ~d!;{K p'՚'pT=A d->"o@t2xB]vG6qG>W<\g* t?&=[8:$~$q7% zC{j4нݽY$8skFl|*c|Pc(+{cKZ?큵=[xWs7\DMDqߘaeoơȫ>r$ y~ '㮿pTdloeB؎-U6gN.Z}fܭ+ n,[6?۸5i.nn|5lyǺݺ}5N~ʶtps8 U><0 ]蔎w DaC6GBsˎS⏉4؞ug G=>&_o;#]u9zE' ]Rh7sͶ<<<;=6~w{5=n^]Y\82`,aS 7jJK !޹ӎt_|'1V[ ]Ck̮}G S䎽N6$N;_'y|&'Bf? %|t(GIz}9aq5~Jh+/L,mܲbk[6WA=v# ;Vj~d ʇc3 xx }㐾8| /khl[():=~HgSM 0 '' ~8 RJ<^py`ymx`m|wrnw2!9x <54KѿSz3\JHa>w :Wt+Qϛ$Nlh#nj W藠cnh3ow~'(ODGG\q0pb_C f 8)a{a[/dVX;c=N9:;usF)8e xCO"Px9f4IX*NusSgh_ic O@6x_s~p(*z#%fyad .,,\5;@L+K` $Nmx~eo< ^^o-#Ε P?0;l ?dy2@IXNN(`LI7bLnyIťSL}QͬbÜ\5G|LŸ'.AO%q^A'nUqt)D2<< ?13Qul/љavM5XN ]&8J#I kh{-ɼh|Fɿ7tL g#vH~i>(ijt{[XX k8 k 쁣/_6 |*Q-! `opxUF 'H7dTc 2)vMs`*0V !ο+w'i(ɨ8?=VI?XK P6$y ?ީ'uI*f ݔa{mxO%4?A'ۚcJ?(}H#ke(">)v[ClPGxg ^36qvS㙎=B6CGN4I`lIGF >яcNsN[Vkqu^S0op:F&4miGtNjǬ ƣ<1e+Dx}UseO' }rGÆ[F&ZN_g3/4s#:|ܶ |܉~pKl5ߺ#klDJkKDk  #u ~]@xOnxcd3H%z*'g6^|񫪟h~/Z6} *遵_}_UO`Nh*H"PʝOJ<_zTeՎ@|N[g\:ͼpy砱bOXOfLw깨jlz9ڡa#P۾;'A:EJ% =˟§}4C )1]6(wۃ@y9wh[<xM;kk~\$w/|VmNu_˕_, u~6 _XXx- Iȗh`o_c4^ߏڟ &=@L.Hd48_$1wWvFho;o: E a%>A#mw^lv,+<;>ht %D>gsV̯x|d2x,exuiC5 M'gn#idi!ͪFɨrq]Qlv1jwfe=Jz&_{@Pץ+Л.gjf0xtR u;ւkOyz<<@ty^ZG % ~]HϴI6i| q=}eˏJ/!$pSѡ`c0##& GQHHplHPc@(c?lrOHy@t>[:hi@yhݢ*m({8d\>}OO84̽V;9Yp xn}`*;2BwٌCtdg<<|y]>f:i63g^;std3T3'W'@HS$_/:c__%>Ɓ- u#_XXX۫7'F hX~6@:ƁAFPY A"l`ôcğDxDQten6iePS>aDy:IxjlL<&;A2w8l@n|np3@@{½AX8}e$ >vr/AO;?8vb63f# D<ۓm)]'<;/-s߱˰VglokkDrR0#wKMm[(w\>jU5aYjZ8N~v뼅/,,kzX_?nc iơԏ+I?+Hwg| Byy8}(O#=;jCK]dݸ?N>e U# ɼg\_Iچ.Ii%&@6Q>t4^}A'Vpdr^& LEK>(+QC:d)UYx#_hh%m箶f(%ɿh'ޱ#@$QN$HE3.sF6r>lxK.vЗ}_m=td-B{Fh7xSx36Wg@ KM'AhsF851<=;'GF=۟efM>'2g^ y觍3lw,>3I߬C/Y>(Б%^ }(@7I<ل_TЫE $Pf,;,tl_:۔#x bm txFt<*pNze-B94` 61y;:ؙxS>f˹dsy\'`~+e&l $Ml.|tnpdAʌyGlt'd|kOyz<<B O|)ɲIM']̉Ix~@t .=¿k,$+=^A!?8tmb3A^rl;U3Nr3n5_ 5i>8WkNذ&}q|#MN8:.c'#m}K~il[lϼhH/? OG:?x^ȩu5z3~nlHǿN dTT?S <<;3O 6xOG^4~?6r=:`y:6j<<=6_s_Au\^7+@.\ABWy.Z} )@j : }B R3vڃ' dd^.fLdO 'Oٰd}JN mvpBw#+>GgILvzc?ƈx{%\`t=O14_1дLϲs=])dk?g:N;.AǞ<8=Q==t:R䬩Q2'6%5G|YT}z?8?;(Ao /Ur x[>| :#ZXXX偷\͞@ Ml(9m$yd7`A#w IzIZсp%-݃,Oۢ&([:Cq$]ldx{.>Z_N@σMlML#F8`ږ觩e~E?zܚ1Bx5nss|VNzxt:ٓUgV0z+vakO~){Ⳏ. /X]k}u1Z[}I\迟@f]AfC?>\\"C<: .,,) ?^Hx?wIS7ÝlО^\Q/'o cfGx<$ -ӣx:cqQB($(+Tٸ ;} !Tq62k|C[QȬ4}m{10ަiyGxt^x=>^9oRh~V |Ui{$Gkq<]c}ЩЪ@Vi|=pC2fO:Ob;~#Ȱ  V6){"#U~>/|2l@[6LB;C$|懎.x;vFFcH_G~㳖\5~?pZe~#;* >|&>#) BlħЛ*ҙqK?蔮^`ã]h@ ~U­^}7xsA:W[ ?ءHIP@NϡBǟ ɿƓ=3pNidFwf#^Ks`L`  ?7x6s3zg 2kCCZ$@i3Vx~5swDs'I}??|i%T< xJɺ—~<{lq~#zNli{TTCzCAHd:v{6 uexls4m6m#K}spw_WMO}?zwYSS 알6{`}ن֬7%8%ޔu3—~겹<<$@N,Ud ;_&`6x?A`pw&`LՉ6h &h Ncv$Fg̭< DzBO'@3y i ڊƔAY;9.Gf`_=^d?u1{x]n#<@{=ms \<}ٳ7@n#v^1:cX(nfm#1=}7 TGt_ smX8}?צtYx ^1x- 6!m@I9˦.ωx"SAFxt_ִ]tNy:MJ[x5NIb4F7%m*>x=1lohd]C{[5cݓwٞ<6f8)d3 >.i/c3}{gc|=5*kT|_7+kMU&@ؕc~ZY4:>o փ]4\䁵.,<mp=(T j(&s?HW74GGW Jyl0N#:p[ņKYaE>!?|a+иGeΈn?dfn1AG GpWn+Dq̥:ެ3i!:]/p<Α/JsKѱszx}cOw0פlU$昝 5y7~w:}opF~T}/|4ڵ925cf /#""%JکE[U ދA'$U6~x<_1s #S|x+$z4FM4~!ݧ5*C;5 T='r+ضN"V870zV/degn7֏gA؝72w:鼎G8ہ>u.Yo9k{N>.O1Cwף|Z4}\.?t? z@W̆EC8}4.mkc_xx~kW.,\MDz+uI+yo]8h꿪T߫~}R?/NA6 , {%N|ԸDL%@#wVmݟۉ⻔Syb=DWzN:"6hE{/@R&=F2N([zIwMmsur\{>rpxIyLo?F>.\\n ۣgNm|eSy|i?CVp%f~Yz`|jUnkz Zws6+ɿ66T?+g?_@zĿ*+`5.?%6$\(7)4NbWQ6_U2mgh _=8IIX?!`[V{ۉDykH[О+MU>Ͻ.1H^O66{#{ ~d>s%<53)6/Gk&s+]su6LfnoxTz&6ms}2-AopOqxPu$яbᇎ|偗xi.{'@9W] C%'7JQ?ޟp/[eOG2 %UxOOH0W$:饽b\?$'ppt<7d&rNvpp@#噏rqY.ad K_ƻ74PsM>>b&}JtmˌpQ"$U& r&^O)U p}#dq`>tlW⁣cwWr0x`m%γGtgwD+I\<^f:GKe?v3֙_6 ZKŌ=+;֕,kٽLΦmJxe 1ZӾl\:' >|-t{ u<<<X/ecy`y`(1^A(?Pwn6D 0?&W$?'?G bCQ{|U >H7Ar?y'28z;ͣF2DY<`e,(9c}P: ҇mz]bW*“<^p]>k6Ç5$eLkigA3mR:~|fu;>ϲF ߫}# 6;y-k=^4>zckP3g ^պeǫMf}p{U.~e_7Zw/e\w8r^.z}zXxP0pC)ռO;_u>Ih~`xWO;Л' AcU%A( lOϓV pɿ6)oU4%a`GjǸG٣YGoxHF@bhVq6x9inɘQ.FwtW EQ̲g>ȃ%>> SwO^?MY&YsI$U۶bnas|5'M?/W.m q11ʼ!o\o/%)td>n D/<<<X~y`y`G4<8=wlG#$U? dNFHNO@%0#蒌@hii'(ܛ?=mUm!> *rЖ'Ca0vJ8< th0H;&[hBbMC̍h]霝[·ЅgnxnCV s鴛!v{:-x-ms{~zuB**,W[Zg#o#k~H"<$M7G][Rw!8%@3xOU1z+w-Xr$8nOr`k ? o{q%y $^T%t>'}5' H}6r;e[Ɨ*>qZsߛ}@̙+)9 e}G 1 ܂ǎ&h6});,-DZ?9ޣ-4n{c6Uff{:Gu.6#k=ǁE2+su| z+mK|;w>6jH5xX{mM~:Z[qcy%<6^‹=SAIW}%rI*<ߪl/$z{q٧'mU} qNt5} :Ts@&ƣUwb[rJ.Hgy1ʎϲ#ЏB=ƾj)ѹHB3о*^((>NwOI: }c@u@#UP&@Q|+A@m*4ljl |KwiԎ0Dܿ,GrN +#e p:.97Ԇ b=Բ'lUm|Ixá cV/);N;tT 0TyTv* W: gHM :O}wlY}|ֿww`/QE >?UOf=G+\]5 V/I{Cʆo8O e[?O _Xx 㲲l%'GᏜENQ?6JA~ğk/6o xJ쳖С&RzC{4#U~kW=/a$hp߿D=$oHI 6>6{4'Iaqr?0@He$#Km;8rK˖:=93?O%yFRօ\ Ad Fd :lmH$ 3g:i!ktlJoT‘VL|nՎUZ%_! I.h ,p^% 9DŤgwQ2֟K bVYw]nvq?sCr65#6G5o :H٭ D.,,,,2X/cǥeYY:,t^󂿿 9OOv/9.2wGw)lT \n@[g9Z8}v9%NrDQN!<$ ,:}8D{TBzԭD3|+^o_EZ?i 45;ƞoD 37y\Si{xϵlUp\qx5Gc˵s;߫s@]Y ZN(Bl_4eN PowV֠SRFFy V6j$@Wk2e``6rܦlᔶr-L807G6=ryy[l*1>9&.Xu*DdkJ{hKxU{g)_xa 6R,-% CϑUP߂?ŻO K vG'rG0e |2);r777W?|+'N8݂CljLƙ$q:FIe!Jhiq,Wz߾Kc& ޴3Uy5rR#(7U :PkP#Z5٧h?¿ʆ׬jw -bU6t!`=0Bv-6vMpF\wr~(?6˯q䟻?$oy~6Q |2iK</x6COx8FS@2m +A;@Kv(J'Nc>;҉*N[S 0gGi:5YqɡA'-ď|?|ViS5hp̧d; 6$!hcÿPGF~拾 yL .'?`tDmLyeeeK-6.Ԓ[XpD m';/)lw~r\^`X ^aB; Ryl)''ܳ 7$w{C@v 8 g\2VM8 D^yȬ-9u]\atRV>g?'X/ekz,Go%nl">ɿ*kDο_]>B%I{v[߃C#%ofӻqeXiI- , `$gVNp o%6?o'| @;8lN:ŹLƹxd{ϞsSi{8M[Y`<25$%WzQtR`Ϡ+|T]3@Cϥ{:^~0s6y~~4W]l5ݮ@g_^wͿUM ;,xaxF4R 7a}, , , \`pȲf\ )a> ;#?g9U?'OqNZO&7Ap;mv u\6F@kL.hc -{pwiz#o,Y=]ڇR.'[g])hlGUk_ڕ~H$GUk5ZߓW;>XF^F;&0m.,,,pZrvpBp\#r|8@'~az@(9IaɄI{^('SqbCۖC׃#CV2&s?h7?UYMxh3\\c֯"Wov䅎.*n?74dj 8yߴ/׆!ϱMp? PyZS~~x@ROd\XX88}8 #qpFphg$ 7*ߵK?MeI&NIp3(3-)# D7x(Gy֬4Eke;@9y7@Z -Ns]${'}ѓkaĩ/^mIV nztahM2^iťzY%,Ѷ>vA#^]Hܭ2 'qOB6) h\Sy4Sd}gpG=1mÃFES-W lH4.um'76`~\t<}2QmDn Wyڗr\dO9o78V(C]w\ youum'tV2>z߹&Y]GsIl\sL~Xgթ0:Q#k`fE[X8ws+[|'w!AqA,|2es^7'+g"o4?@p&'"|P95U;I PxG?J"jsccb]zw}#͌-&U<4Zk^N*b{9m){^>k{F=_Z3f5v+z6>=e.G;~9S]tI@~.M ,3 UmY`Y[  p^ ;9; ۿ[?/׆ o2Ύ4InT9t['Q:Ȏze=np eN;c#6!ط&@KwE;$ Ռms nK~vOd3*i 0$cVs~k |݃kpOv#ܓ-uWQfph~l\q.>jT²_>: }_ -'\W|сN0ZgF ",,-BoU$:#~[h?9p%osҏ T |h{K$ٙD>^hN Ic 2r o4NE81SO[΢u/ Yx*OIr 5ɛ=Lx@ ]i5(I픅6 07iM) 1tGzW{xF"tQ(ON1*㜽^C#"5 \׸Ew zZ߽)kr{s} ᷁Mo&[{qC*~o>w=A8y@u2qdpz# /: LmpL%3ڽlI#LNH*ȕYp_vBΗ_aękͶS}Nap`ڣ_V"~b SKˣͽ :/,Ag/y@v7f@<gzA:ȵ3ވ闖S^O˥}%#od\@ror_{_S׭2_F:ApG|Ai<xj;=H7%}"#-u\XXXXXx`80}y@Gyo&uoI_ f(;LCSq#\Z?'FWmpL]d&q$C)A[m%@'`豦dsŶ$7a}~{T7g sg9:?Ǐ ӧsmUnFO-PƓGpin,jqas[ }GÝ@c=)tK=$Grւ^-C[iY`Y`Y u| יp94>P;nx78F8I8.bP F.P=Cp5~p`zR28nyΡ};=*ƍS= 'w-؆@{A#B}t*x ^O7|/}  c}FaNL^R)2#~PffrtGGtT^#;৷2Ukw^y̍oWE;uI}r+y< ZY3~R6 (G&x]kނhU~x?|o88(~|Np$ä+>|RwOjN?nUp z (,[fS/jU6 PRF5AU+ӤWl SǨm%旄\2<-yC˞ݏxi>0AL+Jx=#T+(^ˌ٬Z(e273H*W{7ki 9cC@-!A?$ `>H0?t?4,83?J{[dzxsGtn`pq48a2 |t>BtdgȦS> qm~)g4\§ rPCLͣ~}MxR8'I4;rgO6M/٭|W^V FxSި}R'95jS*[GsDhKYD==n>8z~l8e?~ k9r:yn>3jD%tF.)+" . , XEVyY`Y`n`^h%sGei'`3;⾃8S!#DN6?C>e?InN县!40>XN/1^d5-|ɦG}:IJ|d+=8#џCG~$׀<9|V|5(r';F9|Tr*q9SuQ{mK9. n1^y'Wr @dc] ^+L!Aԅ??0$&snfX@~M?bG3$&OtL| %R?P8aޱ%*CRG?$/^6&rM~W{:>AFsL Ug_րCEFvn r )!ߣj##яtGcN ԛsOM 77 =#xNH9+ѯܬ7 :&?f?I65HdLkOl֯v_ yR.eeeYre7o9cq.Ab烟ɴHR>䡑pFgr䀤+i+4po-PG6I}H[9wb 0v^+=՘W.h{g#sE{cN_a~e*ܫD>)fA.Z*>57ʝ+6QdxnkV:^ [vw! =&;w$YjNO@ S7hMEVyY`Y XĂoGMMwt`\]vXpF ̖f =Ī~@׃w:g4|Xbee= =,{{ݑu^'$QM$OYN6(qJGef g zrJj>G.}D<}L?Y#}߷f,ƿq sh\~) Pr Eg^8g=#:0H ˤss.{jsX`m|y^\xU 񹠅SdG9*}-2::)7s8rtSqW@'/(r2NUtJz $dӝ=NxM[}Q2:Hk64`g)2#V]普ˡ_[XG-}4p&b]ԃCg ~Up,k sLk]!dR,.^d;l|~uO׿~؂2NſG6bz_9s RS/80Wz T;ƥeYY`m>[޼pHp~f]JX8/ыCc]uVO׍ԛA@O-](Oi 9>> t9Vz- .qQRC{6,;J_Oc9`wM{L<5{l-Vfx xu͝ѝc;/UnZEo`T0 rg|+@Y]'~>BoLBWvҼF%ym6`B/.?'t֛1w*YJ@IDATAg@wQ]6`7Y߹nvJFU0Ҳ@XgI|sZNLɇ޴mVN$O&%QDW`m3ؽ/#NI *~97dh~Sc[JZŸ%x|6 4l2/v2=Mwۗz!OLj?4ʬ3ڞvd42/Y{Ly=\|X˜|{_~@| %ǺB}|3n 2cM&}Ws@>2 $gN``zΧ?[x}, , Y`mYgN,0q͇^`,^!2- dzqV zlSVcjur@T3_w5NoH4f5±;( Xcb؅q>E؉'vm8g#?6{ oghOIOwi[?zӟZp,c=sj2sRe^NE5h\NgJ؅1;pJ ')N@@4ѳ7tۛy./`Q p7Gm,,,65,,8At 2b8*SVPH]`Si88WpOp?H&U<jqĒoNʲMɩmk:텑7j)2m/wʰCuH/F^m쇣Ʉ8Spc.|j*鼙vc{zpe|oHo. rR@kbѬ'tHGzFu\]E'Ț[c>GF6P `@/c_UM:_(>G~\u,2 ĎUzF/ U :3_oq:學Qir7@S7zS璴'Gߜn8}rK'o#NFtPdV|ϪA_KXɜ&( Lj >H^ukQ?8c]AN/Fʀ\}a 9[*PF$wrN$ 4l2)|c<&yc 2_^yt83Ou^RڈrIs sY`YX`mc,tY`YY`pإ8qIvJ.h2*&@clvi#/: - +'C.9NXG# 6/ -/APIƍhI&GK VpX5y{tW*Um)|̈&_FF~}]ccR (R!_W&!Cf}f]*s7'sB9@6d'dKhy Ɂ#s kjꃓ(7}ѫZ 6~Yeek[`Cƻ5;Fzmx|U~#O4!/v>P٪'Az#/|h)OBpҬ}~WzڧՍ|=cyc?rWmBYgtn+ADgx J_i}ы+itR@l[kUW—ފ[Տew`\~]p ;I8F 9%&ٴ8B1Zp`˩?80xUXyvhGcJqRN@dRl&c[`V+ /O[KrcTPsTmSm~h<t0sF)Iƥ0}T:GKs:fعޮΦYd9&{.Wצ>w >Dbl7q58y_q:Aё%A(gQn rY޺[տed9.8/'8v$yёu'?ж'd8 ԁ5GGd\h#[H&Sh'h8|vKJaaL;SWKAm5G4c.Cpʩc|W<>2Ķõ@@#{D& 5#2uV:u\kMsC9+VlsǶ9݃.V~Ō9Pd}q~dS^&t./ 5!C{#ʼ'ܶcLFK6n3<l>fA;6Vz] 5ne[`m<߆Kò΅ =p#?G R)8M)۱j4GVʩRd`<>e~Jޮe%0A0Ƞ)m|Wgn >Ƒ]2=I梄ܘ VFX>Pg#]33Zms==ztW|.%]`3ћ?Zy! =G'$ 7~M5|'M˷b !'~,GƂ_gF>xչY`Vk{Z[x11t't/ # q+' 'plJG:ln)~6B2C!z@S8vddl;SSd Ű(8mBusSkjfi4^u LBW&9>FX[Yx3+.<֩]د}^"dP^#ꏴןȝ{cqjɴ(s=%~V5Ee@V\Y'H;ke}?&hA;Uǿ%5&:hفn=ֲ}dF{Pq>5e׳=k0 ;eu קfI`/DA^tS:‘?W^d'YNorR @~<k ӳbG0kLcB.uF*/ , || ?k/gNp(pW؝"|qVK補5>8 rᡜgN&5X8MY&Z/4XځWi; _?>W[j]l:xl]a95Kqm%KA0o3U7x]+?x+mB@ y#OQh=m778 f [C&zД*Jl:ml-WZxXuV迊j'sFtl?E)ON=q6GIŁ$؞Au!|R~gZ GroǡkdjИ&Hf#(_ A$WM]6q7*[Nۆ[:,}^p5vsD6v$iI2(r=ŒH /Svʍ#uF<6N|Mr/Wi\kldhڻƿ"BYǼ) Ӻ\I483PϬ4m.;n>Xmbl5Y`'劇Vm0)ZuB\_ehg}yY c=A&VP{F7~/p ^4Od4Jì~؁@8)n C'W>g5e'X: Z6nSwS{Mc Wg_΂ Hڃ8T=3kxJ@J2/A7m|dG`@)FrIdYqMo( y@el՗8E- <88 I}@^7e!?w 9"l@'U9DVX8Z^?y>qpJw o $^ [e+SZwpv0j ?\@5$ݺ47X%l'Mpxثk*PU~>TBz45gKiV|7 h"G]Rʣ^[:$u+5Y4?8kT k0|Z}d_}[a#gɳ!xiߠqgxAdFkeee{vY" 1) D?'A8ረn'$SsgNi B#g 08i9߃6y!/#w(k{@c& l` 9;`V򲴝l8%<f>1>8敔O2r~ݱl"cl:݄MS>#0sz/wT -Uǘ;UU_ڀzh)Lt_M6x *,+ȺHu :(5nn*IoO'~hi3&P dN5pᡱ6R28in,,,-6>. <B h}@A(; *x@u>p9dU1"᪌8.OܞNl:2xwq|]}"wUNП;GlSs<'T''nV"9 glݢ7v3]GeFvǓMo^;ʂqDn͊/=N~Ĉm`Cv'Hlg#< Gkk:MLJ6>q3\eSGn/hNnuee׷x}ޥ !@o@lj@^ y?'|_unv S4}Q0ٜ0;e_wk4?M{+!8~Ͽ# {'Kq~K}_&QfHϣs@sP"L5sT]zh9NKu|tO+ +$Ften:ױ]Q))t,G!L_~G[Gmf373jyO[?ꪼssݏh_*Z5Ià~!dwPN%NelU_ K$7 ۃ|Y33Աk97?Q%u:/Y>9>}2?En[))ٗieom gaf(Z_ϑi7BrE ԝɡɁ?uzCc[<ǵcm%##)6 )sp%_YXiS\_J/c2v\Z> PoL̿*{|` /@o&o.Np Pq IHd>mh*P??/ Guߛlrh=hrNN.6!6 ثq8 t]k;R?moq; "ʖ2}ȼe&jƧڈ+\re37{m@GuFY9\=3ݗr]3<@U2<~ABKn'zCL:뢞'^u555\q7 4%&iCOgeuVtmcj}w-s1> @b- , | 4k(rZp @J5'x`E`_ԣW&P@6:! }Kr, @Ju 7Nx^7f?54/Ѓ>tmARujZ㼖I`GZA;fiT2qDmY}rY}kPn+m ~z`{Fݖ F\x~sNh{p43ro}_S*_q -PUlc:PdNiycGtxih UWWY :ʌR] @r Юq3A3 ~\ɴg}A2`"lAEwqRFLFʥl{kXXX`c;R#SAâNG| jq9G &m1tL6.45Ɋ ΑSGO5GW?*)ο;.'pJ Tlf^Rf _6 fz̈́Ȳa5{#A|CH$*gc-{=-3Pj'MdzXn)P"ge 6pR'Ǧ6;;hڟgfxh#T} w|ygd]|7`ڍ\]^ЪLp`ur^@r[Wn";:uvlNq_= d|''Tfw`6 O]ld\4VNغ$hdptRx>>5eױ9^848,Nq_+ Z_^Ч87Ы6'&\k N NXUZ <ݔy査W_tԟ_ox aRG6w}@f+pGMuv>E%Ho\ Sʋ)cSbG;u,v-p"5Q]Q)q콌Mek_>?crB7)8e?kGP9,=4{s{ML_G?Oh7ZWͦ>Ա5Jd#C$G`td/n+^ p> dG 6F"~R'~Rx-{D8YXiY`YCY`m|\Yx $@595ړ3cApw;ַǛy^2WP7^ v?pVԶ78d%>ox)6&|@AWgy~ȱ?&>rЀw3.߁ #[ZIpl\ TB E;=wٙV[5{,8M:ɩBδy -2{\XxX{V_v_XGS7:8 8<_y܎!Nd4}_t`Ue woЕxl=G>@9W/sUSL56􏀾HY0[&mXNMU6leN-Pxh! (zLg; *td&)2z4įaod<̃rB {%3'>0=U˳v*m>Q3H^iꧭD]4͘!37{%udMk?J#E6VT1Z xn6 $M[SMpNaC'䰇}]]F@8ryO6k&ط™sWi E ˉN'%=VdyRkGOV@o&KojnYY`m)[^qc(:wuv}snP|(OGϺ+uNw9!b@~t .5'P?ygȺϋC'/d'Uܼ_6*F3:xh<ey+v GY8'Ω!l:l 8!A'CFo?z-J+ab\/q ΜL1Wjy+]ɵT-;oi7ʕ^ͺ'p+oeo dl&py#]7 ;>w9ݚB_4^zѝ/Z肬׭Jkޏ!#x3o4+G`/oNOI(RMe2IYpY`Y[`m9\#X8q<إ@ T-wx ;W#〟pz>8%; ov4YchxSF؝Mlp;?I oc,pRiYuphOE'ӄѷȸcg}>O!OOm=kF1&VhlhЛrsmQRڞyO--@Zx@s7YY-P:kIUq?;.:>Y%\4pNA+(n `#k~:!NK/'kwRd1WN.8N5Hb{s-NM& a56G3tPhz ٧zGڅX6^o&PsvMGgIfI`Jw:1$FȸT}.24۫[e8̱x߁w _rįW?W 9slY<`2AX@G5DoYG,A—_r%GVvjJ2NWύI>Cݲ!࿬;!Zrx G#=eCOX+Dwϵ{$mT3e_E3${C,nuu:z_'hKA?eDk p6OGXOl^VרM_86F=qiQpUZ+%=`o5l;W\4_Prp~@]T7<\W=7agSہ߲H'qjcU}ʽ)6IeekvflYM[>'QLjg9Nc`4^&hgNpVƁJgY;KSp60&Olp3lܕ /T j)p_pѿ)*nv>-k#̿)@=eϙppumR8/?η +M{pYW;2ڥ͉ŃpFdKuNH\IRs&@3274_Ll. װV8|Nr/% H:w5 z3$z oZ<3sҴ(X)4^p Il#ڇʱw#O '{~ Ob^SN =}o{!g[eecvbdY]ZW')A*7GEc _ ?Ϧ$Ou$ͯڥU'W | NV#_{; @IDAT@{;z<_AȨ8έ߶g:.:+ǯzo_,64[8(O]LI{[6!˞3p|ST< l  Fہ mT 9HLn eLkW}N]㚓5ϦkY։ c,~w> 8[6/2#GS'AY2}Mnu<|W'e kW{uYg^F}J5 C tK'M]C=X ![}$BWEkRgF5[f,,,6Wϰ@bc'G83jP &~GvUf)=PMy}0&6d)t'Kǁc qq9cFͭqiρ vO~\A MgE߸ǟĵrjyCOUYd*%##o,}_`|N g'?rLlmEU;%H^a[]~Ԁp- ">P|On—n`SXeRj#63I;wЌ tc9qw|#wWm=OG^?}G?zIVv5Vt?t&x 'mL*gl'J oee?glZ^xҏ;*ȑp;8Ur*1 wSٺМ(Q}Q%W˴25?_{;%H wT&7M8}d[ASs+YW2Xo{ehP;$;צ K;dIqM tlڬ gPx@ DQ@K_"U3}3HSY]ntlOM 1vE?](e֊DVZG'WY'CK$T=n+k(e-)d}'u򕾍QMhf(z>yͧFo2̍?~'N3.X߀Ҳ_QzW;G?#o,G_ڀ?fdB =xf#r3+/xtzB~}po}}e~A;q!c ]q0CRcvLC@977 <Od) 81-Sҋ}?8i!C@xc%{^dd)^E7ndCv(rc%҇U.4Xy=^P.r⽟}L0@p,k^[7 2sRfj:Yg{FNߧu7KN]NDžg,#Gʒ 'ކp5ֳ@>{NR'EX?ÞeF䲁>Rַ% GMW_#@oJ-sO [owz &_"CY}&o{8Ɣz#=Y.k6̲{x/3,F,Pӥԫ?2fǴSekUC?!:FQ9mi 9}= -W_L/H@[/l?/ӎ2l8.3(fO8884(Z:9p`@:4m ߺGV=^Le]qr#NHۼ/pe$Q c;a5=FuM\нNjZI |AhC\읋v0mI{f;ktb#EKUv}"w^A@wA; <G (qB7'NvhK֯`c^rpzcg҃n(>y;Q}C91V?T%t th}{[e\ثv!r Ӝeu ;yak:U5ڪ1;6ϐ]ghϵ<3fbt+PguDٔ>$LW 民7{-x_TtՇ9Ic:DS΋`y%$9S2[6v9Osԛw* ^ Z,op=ŦmKke7Կff<#/okc\'ԮÝʙ~@m2_'3,b=*2=F*ZXI 4ܪ,,po\sq?ʧ~#L;i˄?cd7^)K$q]ȟk:<.cF?;Ev,qp1fM}%lj GAh0twr!%hIes'hJ浢1|zU!?"]+@uʂ;\?fн.U\x{>.M/Juvwczƕw?T>ΏFS;R9&c_s#ϱ͢sfHq%O Ϭˆ=Pxc"`s4w375&Zahb{Jcgnoxcծٯ|`o&J./}_O_dL QR@R] s2H3 zWZX%XĬK@~a{dY; o{^/tǩyݖ1q6]A=M>(gX4vSh6s!wJG)UbRC~Nsw?G%8`E)3\V[䐷  &xSԅ#q=fl숭{޹Œ&dEkpA؁=>gX+ynL/63,~x˺y$OSYd!Cݔas0 |Ny ׫qzȐ sx S/|Mk"S^|X4_JʛOXgն'LL7''׾饟aW;Ic#R &1gG]"Ox,why,/G8ND/9FiUH{~ u;9rr8;{ c8@vH,lZ<ϒMLlFnw}_Ќ Ǝ!匹zє!ggR & `tXcZy&{Mp mwT4l`46 cc]^ 3?ecOH4X(\?`G&:JC{̘]g.&7΍g] }*"V#nΝS'Yd CBd'o6e`tS7aeнsRA܏-Zg $Sels=X ;bū^?`ln>ꙻpvE9^!O\i5\[ aΝ+ќoۦbe'"^kT, , [ p8s1LM$g^'K?@=@o߹/P Q(lǵ8zv,)4F㮎AzݖhY qJKO0ty ĖiY6+(06SX+ʾؓm5l!*~[i%_-?T}ϼ9c>[s'v{QQ9(Nw)}t hF ?F_$(ϳױ1$#|]w}4{r?|䞃ge~׽n}pFtcӌoW0 }_׋;~]3>za,}'Ӝtn*m@zO!d*X?G ;mz !Se.;PϴxWeXkN;BO\)4#:.\1fcK_A[9r|G yG@ew|*ٹj؁Kw}@硇n8)7>>t9|S"_v8 @6 zYEWss浜7{36*c5c<$91ϰ8`w)]'|XC,m#>7}[AuF#:}G py\xW˜,!ixc1^{y"д.Ⱦx @bx>Jy?c*Q7|)'U$;p?w@ncci w}lP 0KZ z­^Uhs` C\r? g7\x 0R,,pj~a 1ҹ<;W'kJd]J$ӓk=z|[?W @uǟ@^z0ӿ8{8:( M S^Ų;Ir|_NE97$?XR 4vqŶkMx'Or򲕁9d~9v325I Vߘ RaA<Eg :F֜G򴽱MޟNSa R1w7zB-%Ff`:>#AsrSp[υF{!S`Y(;#CֿO^919~!mR]HC3<n׺6@l$OoLؘD[*tam?< &ifFh~Aǘ;@  ly\%/=; zeeY@J{ t`sa/,?amoONߙs'*"u\;a8nʎ|wBwNz8IΑ[A{6da8z(,g ,e]v*s|e̱C9/7axnyʪFB'iH#ŋLa/1WyNs/m[2黰0ecl $ob,Μ`܌<$1K?s92dY.v[)ymOzysO"9eCÍ| VES>a^WlLOp?'վtێcdmfAN}ظ>O3og-"$~:=OQ4?gY`YXO6٪,,X |?bt=5/,A?kVw?ؿh9S8X~T v)J7+Xb'(r``T3-H):vr|ǿSr"+88Xb?-W6tЏ449x3 G,vp=zƆ mu\8^$h?tp9w|$HF$E(S:i-?#B=у<)+'ݿʦ_s#rëˇܟ hfL)mvܳ$Ok^ WWdž ?Ǚ|=}UkojċZۡy\lyT6KYH / , <kZ\"#tӏeպ\/?'spX8@k7r6jW;WlQ5؃M܏LYN)84udIigU0)q9>&y~2P|a1Cl^Nas,ҧ׀b=@IJ-4vE9$l݂)y8A#kK:M[!H = HT]-lʹ:߅ϥӷs )V6μSf<9ۑs9f9՜`'t!C=ARdǜM0ʜ 6y$:Tg]7?M`N=RͣMcj 鋃 fcQO:5˯O*n;  sxur]_ȇ?.{zV Ȭ~- ! !:?+(7 ym_ g ,=W`hl*;@t_EN9'~`χS㊓( d"p⬎\/4s-v->葭g#~6>&=oYIUdXUpx[o;{Q6| / , \l%Xh?]^]8,SdO*`&< W<9i= @w!mCLY\L[c^N]>e8sy tGk'#m@*LsW}c1_򦱃|"oVWﺪAKыW m4L s)Qx1¿g`1Ldl+5 =Ug.Io$+2cdi支52Sw+1O{q톦1V~ԆmM+5@G Um :1}yLu|~I^Rҵ,',6Wo`>]ȱU.ϱ߯@yA9E<Mo_p?N, ̻#6KeC7tp䑅d; X4ډn29MMW冧:O l8H!qf#l$}$ʰ+33'ǮW!_!rz~lf/Y @s9Z49%9'5@MO덟\[>uXvGtϻ[aޱMx{ a&y;6(ٔ!Wqk.[ef֎ϲ+@"0:݇H&rd!Hto|;oi3HADQvSfznvDZڀƵt:`6)  wzpy W;GZ#Y`9t1tEd1ƴ %R}5qxuLü .t򡝗.d)XFЛ@J/{ 9Ct-,pbJ1ب"`ub~kf",9oj!/AgG4@9QyTdz@:כޱ捻ܩJnC:d| 糞xj.y}].ǝ6+f+K`:=U-y Ȳ3-6iU}Y`Y,0_4kJ#iH<">]Cѭxgd⼕R;aPt2Rܩ#NpAS`6yGJc<;UqZɏ_4>m\O&i$7Ǘ (& mͥERO42UI'8onS:vp -~-iA2d1WE'92Y%O@iN~`SM_Jƹ5mUﶌ <z 5D} HnuS 6A:OꧯVVBy`[t遲(6|'OjD P]Oe% ߃& .d"^p/r / , 8oU,, -/4{,fGc.<Ψ^6 + O;%&b9Cvؤ+ʏNO©#u=9ĔQ=?68x<0Vfv(Nt6h3)HEvσa oŒA?AY ї.sR"[~m;AsΜ ַQٺyX+7 hNT6R#%ya<|tSVt;U~څrRM|"Fp>9 O=s[6Ch1x>7TY)9)sMI:{"Z!M:+[6sH7c(8{js6vRd}<,Eo /=[yyVFsy9J%/0ͼg`NvlFd2* J<$C~r2v9r`xՆE#P衟Gq}lQ9.F fݟ7%ǃƶq]| `ӠƝ 'AT]/(^󡻎;~Oy 7~ ™ |sGsse:wL]A?w >'xW#wrqS=sE9ld{^Y';9h?8U4D.<5!8~[/a>v%T7Hj9@ڣ#xo0x0v-RP|[9~GgS+^?6hD:̩X <ʇ ⛮uÛYC&K?MtQV$GKKG~zo mks]~XziNͽwA{S+A|~x+"r6~ .ǃwde=:?R+hWg~Xoخ- : g{ꀨ=ԝ98y0O\i6>!0Kc1cHVQ?U;8 AW<~GءE \ ؂>iLN8)YA6tP^<1 0i f8`t{_#|`eko>:o/l~|aՏR> K{ uġSG n8` ptp%ϘaW}/7t8<ޭLA~9id#໰I8Ic8yÌs 22d{k$cm3y\qI.pA,Jc^ 8O*:rL'7Xvց%As$~]C2HF.O_׈e5'}{iL/tI}ƓT.6y? u |^p\,w=tp<-ρpa2)y3E. , k`MeeWc\{g^#v(y;2#=z^XŢ^rq]CGs^74u{8%hY 5i),2?|JS^4u)FfL[DYW/upܳGq <@:hCB.nSR;8 ZZcɹ^zY Cǎtϧ_T; ægYZ`ߚeor߂GcmNk&o^;>ʕf mBoh>/ecO3\ôS=z3-Y0zG>mN~5M!dc!i[cOpd(rWZXlpFKbY`Y/= @/ oB,rM㴨I2Fg!N?"ߝ=&8N^x`Ypg'iv~!^;=oFnٔ'G88ؙ&o8= oOuncMa;OL䜯dUшy"<%8qL 箿7`QpJf1s]_<)/t :0 v52_ٲu;״zu y@7`c'gc~d*KH} EyC29?q\d? e CcgO{1m̢4Yf*8vRpJp^8qj,.F@'"qX`QNyx$ܭr?#&%fL[& >BGevUڎ/0^ UurǨ;$KcvCW_I| eiQ?)(mS 3C,,-9$&CY2Y ߴO7v@x)#PMH?%9oOʸ;~]mwz*s<{STrYoQv=r0{mQ7| 5Ɓe<5o9G`ea:7hgG5݅>a(? :gK9Jjzʟ$ԥ=·ҝTMKg kXXhNb{@#I&sc7rCE>u1N.=S6П]R֮(<6 5`K`_4N bOqw G1UJ`Q/)tpt42rs*p}GLqߜ`P9UZV?cO9~g*'GyЁ'c5h\I.O#6ُ2>о`?}ö]'Dݕ-՞W*gQt9G*LwU]ց/=N+C<@yPGew[@Vz#5NK 8 Y|c;u {c+@yc۬m.[Iޛ-/<JO{tٽ[xKXoh, , pHفHYvL<vuT\:w9xx֋xI)#锟8KcG^@i+;fPc@W1.V5f(4w$7Ϧ{զdҖFrG2 t[xI p`) @:N[tK#e2C`\̛CcG ӍND6lVeko9pl*$G;*Oa+ٙ %?yѷ&dg2&Xʼ dr'(1NMZs:ԺWu YGC>OH{ǫvK_meB@*!12y'̧Lf yN;X+쵕@|W_Ǔ97}i5Ⱥ@__dr eཔY? %Xc[wڙ5g:=ΧYk=5eegYsbKicd1p8z8Fѳ^6 #m;6Ǐ7ojIw^{z㧿o؁Hd[Wm:~p՗{$~>r sy>ٙ^RV^ Qkmm'kn_>mV_6 `z ~Db;a,GYF}'y]c)<p`rTXgC Qp>9Fi;2<̀eS}X՗u.|΄|p (<#!e텦.-ULOk,pg]7I) Mx @LBmƙ_c e$ز9mz~ bje=5;>6kxGmyY`YZGz`vEvbf<4[ ]w"~(o_o-qwl9MFN#ߊ]h;?U/ol=Oih+ ۵->Xx`>s^oLK!>oOYo p] `:s^W#@ƙO9?i=G߁CYO|9vZ|M<WjW0Ə޿]g X=KnYY`m#Ƴ,,qTi6uS,NtV{d @)pd4=ǀWl9rH?C|EXu-%:eA;j{\8 n6O8F[w;[M zWoЃ%,[S'[y#9F*~6#r*"H_ gog]! Iz 9mQޡu:2'ye/0?[]&dLW;ss8:PB?2n_mԷъϲ+v&\͘5k7k zUE׼> >,/9dXy kpOy|=;u=lEC!̔ϵwOU]g+ewbN-bFwy?d'@kwpp>=ġ#O ?_<JL~O~<:qeZݾ}a;/`5_MiFiۧ @9λ~)x]xb'_6ryіR'wˉ3^uSsܢj >vz)Z"C[Cti-s94u>o$g@#~RuK[.`d;|0e1\~RuuN{O;ruRpSoel۲-gcQTcl\ lU9uw}N28^ Q0CtD˅x߯kR8Xt|s{6hǔËh2y{9^ʂyڝd;xح>Nyfx4-L>ȧbxv(Mr1/pY9:|iI[@t=L? L_k:z3?0 _pMS_砑Pw>6J 4!Ⱥ,X)'xOކ@Ys2z]x=o[;`A6yAy2 ___k5eeX'';-R >_Nѫ~@"-v FG2-ϸ,FL# 668xEXypKvwSպ ^8kWqf^r=:󰵝mi{U?Q]+-   #YK89c\ YX`=#'OOPz9G2G~"q]ygڞrl-<֥;ړvZ'`K<^k5eeH0^#|Iwz} FT>D>Qq|sِU1q?<6Dav|wΤb7LM :Q+~Oibq>G0Ϧ"x۰&7IK{}Yee~FAh.K" f?@Gu!ZϽ lp>Q`PP ߯h\ D/@hadd )tuGJ_fF}-kh˹'`#xkr^,sN*[xXoȮqrYo3W)w2x? g9wwoi Y/,Fp͘rΘrRw;MI08sxpᷜ RLfӋkW2?W=̣UqcwyN*[׫iG]@t]̚_絶g  :3~g5<9v>k;P\|ָN91u9xII{^N3A^6 gotsMkR֞`z=[XxXVZXXXhQ1,97Wrv~VY~h6n C;@2gtxW4q8tN^%7-l2O7\ x? __|,̦ȵƌQ¶G+lYPD!̝/ 3!]4ڼ11<}4GcF5C(dV)C&uYxrN:{Sƚ>#S/ ct<8PvpM>4璃W ~oj-X V'ZcI%>}L μüSkf5v6A뼁9*7Hkj,7Z`mGeiY`YXG ga/%"غ#GP{]_-wAzsl]4h Op*GɶU99ؚ~_>R|uBTfLB8=9/ȝ}A,~dҷ'ۧwfẹ g:2Ml=qysG@`'OY΋\pG+kк tN?hޱ@D)K\M/@kMЯûo6~_k_#uZ IS j%,plplU,,-3@L9@c CH>']<r~ q.ʹ m)u:= ?-ya6??O^ @IG[mվ74 l%{HF_\p cS?*I.wͫMNA6-!8{=hnmJ7j+yXt hYȹ@alwP8ֽ BÖGO <@;:% Y; |ǟrP?Y{}`-@&}zg̀Gy}?<`MbEc0`*7H6%ynZϵિ,Y`m,,,0Y1O̴J95Rz3+<'nP8GH8{$ttvph+Z?/df~8A>Hi:4 <=Oyx{to/k=?ίuxT 7` YSW/O]֝siH)yY=} ~<54f(8&3 / }]YXXX( ͛b wqqѹy;"l/lv 祀8f8$yI!8|{Yt8r主ck >\+#60?H=^ δAz&+sAn:%ƦӞD^}34#9>ai d !'bL wYi`<ku CJN/KߪɅopMy;KCFz^Rq^|0έ; cyA's8m'w?ioj<Xd#|dSb#Aix \@pR׭=j F!z0ݿYNKIKɏMj'y,M_?ņ{ӎ'tvXlMa$)?R]_1 'i1|\ vOqtȫol|_d 6ǺI5R_xY[ [߲-9\R 07U߶ HPKt~,,pjpj[XX78pɡA*Q9o򸿃9'>cicmjklA/>h5~r!`N 9}>hsן#Ɲs(c5_K6`)9i_4"7&%.ͯ8( /c vN6z۴-i6 |Q1֏Ǵ۩|UYyxȜgrל|h: \缀\>G?ӔQrj/}x(^3}ν6GDK>'Gzk05Z+0TGKߏkk tM!i֏Ӽchɿi0)o˿ &0_`\ x߀끯U>w𩗺#=oO- E xTט~!©1!$w cG]8k;G-;I8#Pn'4U Ɍ Qa;`e <ߡR?*p9zٓ|> ЂGW/'?p'mX7k)9A"Ac&=s͛Aڀ͠ѯ!tlz%4'=l+ R`7O4sț:F[LHEҚM&qXNS6ȇsziW^i6 g{R{@6dLW{_2)BRt}{"ZTeg "ԕSk7Te6`u} L#z6yk٤D. h7w@9@;j8rDv$wǙs௾)Ѓ}O؟c=W|Mi}lmoNyUӰg3?KقT]îEEO?̓3A%}XrǤ8{Y =1ԏd^i7f4K p~6:!u,k2oxy5@1Osc+O 2Ե>dkG&}7NlgEЖ~Ѿh=9]khs :ka7^GJk/K5a: ֶǦrR5&<0Uוv9k3uOY4lPi0a#kUl_XMc=mS sy/[{@05eee@BdDCr>}1Wld+@s(G.P9~DT#vr ^[C A?h_^~qї {}uvO_+ @=?2;ڀ>4D?@~{CSöqlbtfa jyMY,0渆GcC3&B8Is]=C\8Lys"G>Ll?tvݢGy5JVGz/Gy}֏ð͝+0BBoTk<6uHe2 rНLl`lhӗk_g#MWްu)48k!use|̟۽v/ ) 7u8`.Y`p,_־d+@.pnD3#ȝ /2|p9[~RAܙ1{G3q 0%E㌚'WϋxSvKISJ+@]Ӟ3սБtOmQ[RouΕ庁@os6nYU]^;ضS9``~Z :u#P[ɩ@_O@s]].c 6*?y>g }N-{l(O~!5q*8CĽQ7^Yr)+/c8~FC3cl`6>՚_3+\Oy= ܿ\y}S?^ <>1Ky2ɛ뱞g:O 9D_D<^DR,,6~Woq0LJ N Fa%76 O? CTz#A6 pF/GT>'w_;Qɲ8n#}:&~,e;`asw܃HnƶOc۪ӧVQ?H.].'qaLpkqg[f "\|)idfHy꧙9^;K䘣i5{o|>IWAށʲGnyS-zY=Z`mǣƼ,,S`299NN/狿h8CQrqp;R9/& Կ:c:e=/ƉIw[?%:=xsa{dKL1I/6JN{XL;HtP?ml9w`xK,H{კ' gd"qIgmvg^h|}a$zU>mQ/cuSLo #[s\?'67;6~9Hl| e}l:aWi~}#ƏkmO' 'j3`Ftf+C:2+uFW]o͇l[6VaM6w^ʘD+%PYO}`t-/.5r$گwrpo&22N {.,t>ޒ]9||H}cKu]c'zun{=QC~{9>e.q#~v???j_SG~ū^I0hеT`Mcl*x# Y; ؟i \#+m l^nFkTQQ_xoX툯. , <GN e~<)1O~_Ai78t`:N=cY~Е?qJA&b9xv e9zϸ'f $Fz6mVBH迃+{7XY7zUǏ/?RFѧ,>R~aW)q͒6K?M} cjDCg #(_֚]z5BekO5쾰O t0,/i.#f9df9+rNu\G^f,,,,Ac!q= q7e͟T9|kp篥qNFh0m7L_"G0Ƽӵ /<M ʎ_eoT? `\cW#}ۧ!W/R뼞|G@XTKzG{x?1l6Dt}" dzҐUs %GAOpƟKk^زcx 0F] Qcm\@4~ J7(.Q,rE1jCEZ׍|Fυf7hKe>9vGlkACh,r?y "{levttx2`]c9skwYƜO_B.ܲI ɛ_/|3>9.cG_̫t$ô+!u(yςKh@8[bU& W?3ʻdg*y{I\J?t>TZVG]"[;gת|tM ıu\/GwKc;w}ߟbLS#l-{OB*W}u4cx'/̿q٫,B,8,:~,hb#u<1~ ? V9iQXX_y_^_D~㏛o~sn0V,AGfqNcǟ6X.6$s\Hn9'1a\1t,Zq\?_a~t:{'?$C㬬ݷ|V(YX9ЫAi7|j?}C?G,v{9&k+Kn8ɿag:NW=<ᗨoʟk5G'I~C@\ Gqε"SGYGqOӟ\s''60`t/Iaں\mGG7FQȨ$c]Q_46Z\ D)t.#G.X0x/>la$'4<3'Nί?@WSŸŊ)_FlNCs@P IhE9ܾF+k#E9G"Ÿd6yc'8Np=nDx ~-+?C,zgK8_gq2E9+uP:yfK L:dkljɚXE9[m3Gv|iկV[LL\[z#U'e :? k~${Kr %YǝGyߠYZrl?`|OmkSp%#`.,6M;,ƣP̯ o,x3=9SG6FU^wE/#m.VC0[OIKpChO^Pdgϵ"WyM= S݉Ww?kj_6p:Ϡ9ƈ|sI/tj+^e-_덀FbDyXhea:3^~G>Pda ,"1CH ?Ŕ0č/wLeo,~ |z!th}Ճ6x +7 ( _#'<žb+ X c'Na|3gB? sq7;,) 9 u 9maSE+AsW,C'=1|Ջ/vB+Ƈ&ԍrlkyQO^|@`KB'np^^e?yRv_)sba;ܽb{xU?t++*?W~b|- O nlkGtWE EQGc"xT77"Wز0;ƣʣz 0h+~CNrhm0xίu7 qNl3l#ҖK-C,=_/t͙2|?#D,j]E|V&eaXm$2'O lM8l?|7Ԥ{IlKxh+9>5_BɭrKMl3ZuGuY[Ra7U;cudCro]qUҙ7>q#hXlдؒu"|OWevRİ0hn)1{? N?Y;| \ ;bYg3O=⟻lS04@Wrm,>1.y21щE+vz3˓YlhBn8gQC>̱? }IgnKNH;[zM5n_?^vGywS=gƙ3&ʼϭ)wq\3Zu𵓿|+KZ{JJ~\>u,FRp)b7F4}_H_LzU;%N9ݯݷ5Ǖbb+kE/]Q=,)Σ&@sWtY*YR= lNGNA>z娛6Qn*KS@+?AH]m5wB 䪓C6t~/{SyL˿_,a>MlկGױi[9l5\s"j9_'̵_g:ىkȡ㖎湄WnQbCե<反Vs&*{:0=H0F< \_UyV̌+i.[K1͵؉RMAO?ѧ]<4_y>&?' X)ca~o6pbàq_Ayk7@We]#g5t4<1x`ҝW(jC;y%C,f _gܓ}+rېױ}&9EL]./nr>PޜGcv.ci5vќKPk/uy6(4];G9jUn(?WHI)WV&SSy>go<5gE. m_Nݶ%b<=GM-: x}r?Q6[ y ('<&@clD}M6Ź|n0?zRRT29Ǭ <~{㋎1V: KT'>/SI劤yզ1t*_= dV:ntYwH/C/64b3Ρrcr.ГSc(ꪽYaq7|2"ҋ>ԾVۊ~ȴh3LWcOm_2Ɲ?C>x|u\]'+F_Pu#56tP5қ# 0g"pbt[|.̔vdj\ɶE%lSݩCJ+(ߢםۿ})>-J>qٙ | FO>7P^;c^A4haد!S?SkAN6ʹB\,>#FE'`G^m\m'|Ւ_=GN:U>>Lw4bh[~{ig^W\I~GyεOg2un&Zyw[wL8rtnҽsdL(s3׈7xNFIXha%^"gSƐ|DgV̾/-}>bŸMb|YGo g9?#?O0H]8_ ;IOO#P_P_1ig2ƽ ܄(YT?_C3館Ǘ([ ]{w9YeE'^>=9ҥ!>|'Wj#ƽyUs=nr!}ϵ7Ewr }27*S#GmK~(%]mCպ]zS#`0F<Ztԅt 8 &?twKAq (mtQ^GaNFvT =4kltE֜C.}]EhxǞ)R }=5t4"xZZb٢S67t6TwXS<*Umʍ7t3Cg72>z_yǪg!'Iv;.G591O491ԱeUcXRG#;s8\{6qvW\6om<:xg=ԋ-hOȷ(ŀAj=Am1жb=+_iUDoQQŴB>Mւ#G|;銁|ݓ9أU+eOOVlnr3]oG^>8~5=Gvٺ~V}ƺ*^C-qyJGkG'}[*NEgUxCkg(FςByΥ|=ɓr_w]ʯ~Țr%O4sq]m>S吾t9>=S-9Kshn1}]>hs|f~FCri;ε^uUyɕV^Us cp=0!E *^8ْKN.[o]G1];y??m~?&@nMl| _"ZMx 6Y9g|`.:)Uܳs`@v@O8&E:n-(^+h_s܊yIs͕|谇trqBTiD:މ\qO/[O9|U7;v^M{|Ϸeu;9߲3]&&#Jڪ,Zyn^麞Ǽ0x#{#`.FEIMO\}dS/1Tjn[kwGg "?;Ć??wa%h*_b]'78>O=|`&@>qv&y4?OLc)a4يfkFϏƦM>PrPeS.>w? /U=h7[ <9qf6:=7)l=_ʼnf3f>blyHWiQm~ثE8WxZcwD/Zyَt=N,NM0x#{#` -k^_kf[71ld?ŗ/ =x"ZD]/K׻"k9W~tm0=ʇ63)g_7?!PLǡyt=F?G16M2<,Æf|gH9}}9F.}3>t2_3D;= 1|k9Dω>]R9?2)|jsٸju[ϪǷʳ|39q{>G6<9ZKB=^G9'#`3!D,״P\gP]~zMQB~+<??w#P1G%ij_uе 8*u}? @l`}_aQnF9m1|6Ա'z~9*'i8t\ b+&!IC]O1ܔ;m=Щ)GͷWt˯\㻭W(*W~V{.dZ]4uݧG٢u-:ɢ򻄞;=Msʃ?3_*<)tU/?QjZzMFbxB Yo*| {s\mcI֯(y?_ϯLw~AY@ƄX‹G^ |֦xh/KQ/Z:[^OPG<Tsqq֮kN5NSlTKD?^ЁCЭЫ qYD烼D |R2|2Ɯ^1=K^su;W[L{9fk-Wnr?<.LuU>UVgSoVgyh,l#?gHWk~ے75F`olcc0F`¯R "JSuxdqj8O&?GwoW~c? 4Rg9EcLݢrR#(k'YxAyͦ|@t'E?W֧6k- xS1M |=F}Ɔ }u!b:m8>]oȋ;r12OY'fdUZ#FSU{#d)h#C9}],T};X[Oʕ׸3lY|iu# =hUd[3ox|ibxğ,*;e,[ͩVS/~Y/cG҉R g"'"|:ienOLq?2׎G埑,G;$'rC5N؊4糧#.jGWKKٷƻ4T]kK V,o_*+W;˾EUk|fv)z*HW欜OChqLx:tX: 0a{x#hEL+Gτ'CF?i@~*j|(SFU~,;@E<*EW :8(- 8Sسl𢿠<@NUrx 1y@6I3C'Fz܅wa𥉇X؅׸N'⸜-1!1f^}ߥrӥG-f2:Z{.n=&PK*̎GkLKYmu̱TYC)}xxn2F< ,pNru u]}ՈuQß"?_W?_ ^>@z˿Y(j5t[+JS Y=U#W^v( *9!p lÏ'&a>j|`TeoW+ _Z3.+-~|r^b;.z\kex2|xQV!!϶{U/OJOw՞|%,,oz` @<)6>96>W??eaf4 аQPu&&=|-c̑T0w@)z&5tyDG~S^3#{'_*tA5^MZXe=~vNKrVcrا"G=?=d\bh5ߢYn/o:A|ՎJn'nS,^Kln٪N(q̧݌x48:0FhaVB")BQ;|ys6)#BNWP:x u|UFW3>>J)c{ 7`#~G[v}_P=%?t?8x()X}VV8Ċ'{\8rV-^yӪ\-9>13~wy3 h,+LZw>+i`O ӈ @>O,% '8ް`3_DRμG]\x[4b#]gVu3{T?W-9,_n :Ƣ>{r[ټ9kzmaQƔ<~Kzsﶧ<&2F`A$#b_l+g#äU*~ͧQy?wy > `ȳ^#O2ߢ*4rHcE/#g=={I!'/ɻQth3 гA\Th]/9a[uT;_\+=Wum1Ʃ#EY<αUߧlKlr8#`A.f eI_40,(CZ {ԫ^<9[(F»҉b%-tƇz-ȩeƗ^24/.{|S'Rg:~a\Q諯T[yYuU+^v٪"VArU>Nu;roeѵYV2V;>*\&UƇ~kWY ZyZW p9]Z[SQy|Y/A7b׸Ֆy_RЙOU^ɯ7nۚkr6dZY役mQzks;3|anu]|ƴGO3#`^IT}T~uAaU 2GUd?*,~u|c &=:|6ʩoȢ_4lbyOW);hMbF~=ï_#[k,.#V=>C3ߪ,iկUWx|E.dѭ-=q|kL>u\[cH_lj7?G´,5Fݲccj" ٌ0ώޢ.5=@T6 ]pSGe,+/hz}iAѰSMqV/݌hOwMnݨP~9Ok>bO_x* /3{U^qUWjzxZ]E۪œ\۞of2:Zd,L>C@xھ%MV=|%~5!15޼0G0Wق0cG+)82-*j蓧m6|hυU?06G#dC#l-ycfUWyV]gL:tЪ?1GSdݑ=sxݒ<+jEϋ#` mQ\[E-+O|陏?Ѫ^ Jk]m(]ſ61%XѪ:'u!M[2ɣ^.(*z~]ytWJ++{%O{e_Eto~vjEs_7!Pϗ ۛ{dS=g/mF< o< 7GDrW2kb19Y]_m[bHV(=ċ.xѣj{LX{ϯzNŎG?C?PI\q)R0_z7 o31F{Yp%>,b(wzÿ(SiχliUH?Qį>HT(ӯɲu?{L{:lsu5u.W-Ty/ު?*Ul{ܑqeYm捀0F# }Fo N==wGםנ'U|z ~^ej*VIΘIc:Ň"o:ٷlUh*8Eg::{|5vwy˯{ ro|Or&+0F| 1γ#pjeߣfh]m~Grͳ[xMV8M0FTP0o3 cy@[t!_锊U.?6P=W\ȳV?̡䵸Oq^S@w?U_cxvv$&^t;W?ÖnOq;>&1g0oos#`?z\jaTX2|-Sl{ϮMT'{^QzN_/><4"{#rwSs|V*Wy#`0{x`ی0,+N(3*EB>s Y<9UMlP7u&hkkUWZ~j^*U#7?ݷ#`x:E}j}Ez'/wכO=bjBSf'? eSSצ\h@򊫴;rF>ACX7֎O/ڒ^%t[u=[ O{gct5~fҡW9*zo3;ϋ p8:G}G{;p9#`hh bo|͗߾-o;~Fi7?~*)%fxy?/7_8OcS7+b(kNAL1 >@@Iɋ/zƥeA^{_}8r hq*xCWXQGu=P8UuE_iO=ߋ.k^պnO6rt`s3F#xxF7EQs<Ms( `Ӡ>Ut3ذcWEN3ݖ&8@G937R'v!$>^ՉWM|^|uYCOL}6rc8S#`07^ x|#`[A;<=?OԯQ k<@Ly)USӠm`onFkܥ|-b?7:GGʑC:Q6?A*ߣ3ۑ;].ox_+}=_7F#pmxΈcxE(f3-t?^7Op?O~"0]qiPmT^*u8czzbfcUʓSmW]{c\Ǫ<~nK囉vrnj0F-! tVfڪcxAѱF#x)t.#h1<8B׊󢀁_' &~c#wy*ו{_e\(Uvv:R=,1 |h#s Ӏ z.(!8I8n{d?zGǸ7F%N|2G?W7Qw.Ooկ$#+{6ޥ9ұ=knݣ^'Y#`^K*E"7S~kl o~@۰f@ЛHz׻GL':_5bDl15F#QG9>N#`#헱[? pw?m"/l DE?2MſJ-dE)yRa-_7/} —ϛ-oa˗#6'z>U__BgU#YsOm]V̷#`xࣞy0F+1th 鿟1 c~ e _BfT@P 桫E񑼷Mѝl Q _AS :@>3{iy^(c|t,oϵ#`GD0;PQC (R@~@AƝsPp#.Ѷl*+<>ˬtFk;oϷ@~?/S7?i (_ PZgq]W/%t拎YouyϷ*7F#G0(Q ׯpq/?߉O=*rGKnc啧4Vg𴪻d?>0 [m ^q<?qs;zbu]ŋ~,%Myi{(#`0# 󱲧0FC!@V7/;J]} n'n@QFwPdkZwM3ڿwX`_>K)D%/_@qz Q[ٲm{LN:h4"y3F#`o<%exgPM YK{#QS[y J,GFNN/?͗1_X~]OP#/|vb+μRؓM(d3M9q}\G#`xxc0#־zI/8e{.E{:20(GUZ^)Qao9ss_}~Q|>q_#Ƴ9#`^ i[ ,&@< + @ wy(o">q<ѡON'!jAt~12?OZxAfDTK(w׍E0<@:d.=cǸy> ]ɼg6u xB! Gl@ᯮ'b<hb<'dhsֶ3_대0FGϏG0FI(&@-, 6:?wo<a~s]cgl'ѡ3NGcL.: $@nDcS@Y~Qr? }) }G+q|9}M1?G骏=MܳZg0Fx9=0F!@!77vnD3Ǐ%6 )t@~?br!(_Pqga-A)F*,=(WQ~Gh ~Qy<P;l00m>u}hXnF#`u# >?0FЎ:|,ϗ1@cQ$`= '||~M]z6xO#Ѳ̤g'tz < ol?wo//fFlmE&@8Zdo##3NC:S#`0F##KJa8-M%yNcH??= o!b?SSxEM)E}QS9EQL?Ab?uzAy_?J88&6 ` rh71Ho(ּd9ftF#`Coyψ@7Ϙ6>o >~|x@6_ _קSl@t@E~KLF7 ^_ȗ@u/bע< ]nJO = ~cs GvgFۊ?^Ƕplk!2^Y(F790FB\(w߹ rlQP,wGߏmڷ((Ed`PA_)?ycIs;ǓǸ%b(cq'щۋgf#`pMν5׉7xVFGm]7  ~j @;?(|U_b_9ȑOŸ Os`7z*8}Oxoՙ7F#`6xϳ7F:*B5b~! GLٰwC^ OxomlP&dPsP (cAa׆E҈OFctX4jWz;њG:S#`0F# }FA@EzǿE=p|49GͣlG8v߿gO_<4,|*M邪 6Q ㉀N=7 JC~> {i^+<0F#~9>#` BOeqIa܌ [ ywqGP~=Gt۲c#YYqmPʦ؄`3 A3so6APZ=\0G#`vx7Y0o4S4[?WxgS?ȧЇ2a"~P~Y}ByT>4sʿqu]V]/=#`xx[0FEUK|v1Z;w;wt~q>&Gmx0,j1p:ǧN<8 w^#8zG~k>t*E};Bn<~Q㫴A>ɶESsVyL0F79#`^  Gg>Lc GA'g'ž.~R_uӫm;oţOҙ#`0os#4F<W1x)25%oQе_CO/ (yJ6[⯜+gՏHӸ9v(y[st^K|kY|ՉF0F#18>J#`"@Ѩ_PK L {51r, s՘Ъ|c1xI*/͜~z~Isxa;j5W <3]7F#`x_Gcxq("kZXw (WTp"O`_49S}ܫ,=[KשxUf0F|L1ϻ#`( u_VQ){l8g{'7]wgcqW\(%EW[2Ng#Rx7#`0Fc" y}F'A@E*w\:P݆MįI/k~I t6 -u(jߒe|.Wͤc0F|XaO=Ts.(ժTI9B?g2sȽ){mF3]팿'W{CZ!99Lkwvl{\7*捀0FlX]RUw\':Ki|e:_}hu~&3ϡ#`0BB#`.FTE K>6#`+!bR*IgcmSzQ%!tY:#ǹ0F`/]#l17^xFw@]őIؚ_Ջqu*㻭u3F#`%xk0!@᪻#(љ}سT*ϱWv[WnF#|p=+EhɦF!#Eӌ7[\Uc|5ngtĉo#`0x#{#` @Z7 )4s{]KxV e]y+V0F\ϟ?ޤ<@Xm0!P=Eν{^='o?=ftv Lwّ#`0xKF#P)Q '䧠[9􌉭K;ѩk.K?u^捀0F/$" z}F\=-6D5B?/.5'@nO6ʅ,]GŦc~ܽ~(rwt?5>9,G@,0W _*:Y,6黟dѣq}O/]gN]e#`0F<x #` ZHm̊Zw{d۶dňwrVL0F#xv~#pQNNZjNٻYyCxEg:c?O{-fk?Oso7=w! ;'0FL`؋"Q~'y+O.o5#`0Fx9#`^k N>&ݥ]T^=Ss#pt~я3\y=>?EFz|=SL0F#`0FBυ#`0F#`"pE'S1F#`0F#\x๐u^#`0F#`0W7dx*F#`0F#` o<k0F#`0F O#`0F#`s!;0FDw_r.ׯ_99@Fq}~COaa#`0F#`E^n{4F#`077mo7t<;xv=0F#`0 Hgm7zqO#`0͵FbxŠ@F#`0Fg|=qlx=ź {8>#`0F-:FC0F#`x{?oi{֯{:[?w=ǝ_{ 㷇|~^|.{kˇz)~R>c/.5^."#7F#`xh+cĞ>oy1tSF.<6#`0F\?Z߲u_FQxQEha/g0F#`:MDݚ}+g9fc" z_/ NC#`0FgE@kcgɍ@Gρ@IQnF@ci0F#`uc88D 4F#`0o+fxmךs\sXelj0F#` e_sO1sp"Ji}`>>t#kO_^wz{3t#\y]# [@&]Z6#'.O.jhPtь0F#`Xukh+v#p68*;.V[хMt.ь0F#`B&kXsQ(f6#p68*;>ִ\4W_ XQ1c0F#`'_).l...0F#`E@\_G}z#p12<z/J u^ی0F#`C8\fV$[C#p1_/pF^жAbύm0XH#aE'5ѿ;G$6ֽvo֢8EOa>\pMYt'|h+0F#`fuȳ5o]i?Tٻ5wY67.$ݦSq_/UI#`0FkD_zJn-|D b3m]Ĥ#< zI17F#`0ώ@]8Y6%kߙLx{5g\/,לY]>Ю[zD捀0F#` 5hK\LmOXўOzS#7vqzK%hKV rTS#`0F#puָdhoI#8 oWoPbl6F#`0l*]lyO𺞖\7.΁@tm,w'K#`0FFlYj mO_*?Q._w6}I3Ewt3?N2}wGއfc}{Xίc~|\sagk]Ļu].<6 P/<[Kpk0F#`xuf}wn{vh],?t4xL>EDˌ~⩝Sɢ<0F#`8e-3esl|W+l[1ֿCOREgt=^{T> )0F#`M?z7&uO:3ZuUuЭ܈?z D+/݌Jcf|)3]D.ub폥} c=.4veù3ǻn=9s|_GՏ55a3q {9מk㚫A9T. B=/vtֹ2.y|?~ ~F,Wo:O|l` nK^RbkzqlG\^Ce}Nq^_{q{Ye{} sܛk9kR] ^"׾ËφI\r9"~B3ܤ׿?6ڿYӲ7z< EGӜ}W1U;U7IZ3|^^ς\4/ W< s 2~/fP5\鞭!y} B#k;k>E$W9qmyΓvmV6(SN/8]_ǭG:okFG\q{`+W]cZyfuþII޵s` +wDO|+q[(zNlgtK^-E 3]s^{=EBmU_FGwQ?ow~/q͂?33zI?3C)Y6h v)*ktoҫGru#?/k5psrᷜfF&y'>U.|HŸؤ 뷸?7?Ym|%] 1Zu4,=[zi7Y=>&q[mVJՙJOx_ϸXgvM#tqB?|}!k3 +_jaѮF+Eq\O^@^`X\?Ǹ*Bq'e2+bNS"?r#WT-7 ES t6]'q8W^ݧgVuoyt\5?ӓd٠Iޣ.i\0ȨxW\8W}<@q?c@w)n@L>FE46|fW uaw+E+=1A86] |N)'^uͮ?vB~4gw+o5xb૬b#X~kZWծí+?t*l#N"tUy#`0F8)Vb=XeЕ>ҭb<|^ؼ C*YEl / ?Q6*xb2<cU';EO{aB"*_ڹp etrpMQ -~o1Cջ,}>hV]kSlՙ7F#`8-L;sQn]ǕNv'|vZ4wDƧ5w~{&5YcY_g_67oZutq檟$_5vvwL%ӌӯK}]+US_צdkS_73Oc__tjuok=,u @2pVyi.~Z],͛{zdKm_?ӾjG-s髾ƣ1_/~íՇ7˷%(]zfS_kgƣ475.kew[η&RÇ @&P\z?FsTkں812[<-Z,un'T3^z0yQ,F6m5urۿz- @jK-}}z#_Sl-{lγw4Ҥi\<88_n]f\}uZ~HWe^ԧ=OWc9kLKWsM @`L{Ke hZO[KtVwzյd|cΚbuؓd_ 7կé5y6cz/w3k;?Xqq˺6[3@ &wlz_+_T۱9լ۷n+]Iq>_ݍN>%eܱjm9M}ݥS~ZjꓭƙÇ @'lX/O;ҽYҸsM>kg?B?E=izh:Q}= 0x^FW۪OU @ .[Pu]qUwD3\Gjs^Z/ӽɶk캙Uvr7ܾF)izz.4j[zwiLoMVMj9|' @g!wYX|{c>eخkFVBCp/=DڸJ-kGֵi_m5 @}sq;Az4H˜}Y5V\C ܨ\~T_ySn}]u_cϙ5Y^*  zXձmE⇋:GV:oGc3> 8z^~K*_5<^jGz# @J@p]tiW~Ηf=mkUs˪9&6sZb[Ǟ'tz`60QjkzS5ϭ/ͺj;}[~>iLJ @#ڪ8W&9?K.򇞾jGmA?)NŗC۴Z->ҳB۪VCowV9}[Ϳ4}X8q2NRfkd]Z|C 3w|jeXRb'fmjٙ6Ιku*f}~ '7ݠͪꎵk6ZIMy_|~UZ5FFjgn,4@ pV19rӦ18}o]g}[ؗM?s#RMmW~?!NnYnjZOyWXl5fnշjiʫe]eղ]tSf*<@ J@pɦ12޼{9Y'}mFy5sVoR٦x4衣kM_c^}ŵ~5O;M @'wY˼}?㑿1ϚyYcimku pp/}F6}uC$˯}XDۦPsֲ.Ӧif?rY:XMcjlzb^у$75֤q0׫nv6gw,ZfjuK9y|@ wwʧf>Ӧi;5xNj˯j5'&I`ZzhSY8x>FrmUc?mXx @.mo-W步}*g_ñlw?Bj9x;F:YCכ4]NiΥ58[rJ @>w̭|eꬥnW>QϬrj!h^?qWzt[5@yy ;ziVtw65j]GաC yoLF>ηvׯu],mti].s|igs}jW>Br*S}wݬ(v;cO#.cI;kN| @x+Vln'//cUϸ󭥝 ł8 7o-Rij+_?d6sZs_5ݯk @ \~عr+-륵w>W!hN)7-yUl>rl.yj;jrwO@ $:G3|kմq6I-{9 ߀6^Z4elKM,Z2_u~Ws{tw5] @٦U-cZ|iw1=2Oߒuo29/NoܶuC>;6 ֙;jw樵֪\6}I}< ۟ @eƷj.o-mu΍t]Sds>5#}C .8xyr3m6Vkwݑ17mY~s, @r\GT;;8>5c8|{zkoONO=Vݬ}2v]v侮̺m]uU^uq, @c nV5ռy ڿuc>cUWůnvkT-tj8\J{X>OI};58 @F`gqVoZLVm{̏Ƶ p`/4fZSϚ˱z~ @L71Ԫ3=UWiƴv  Jn3>g\Gf|C <@U+sۚmkmc̴ݿa+*/n8Pf9^ki5_c]ֹ @ ݆yUWWZ#mE+$9hCQ5~Hͻ @ ;6^(_U=kv|z9fl pQA"Cn3N_}2N6s]}ꝓ:|@ n-crvZq-΄8XFj=~ @ { 7<ߒ>kUXg8 l\wԍwU]w5_gy~Ywo>‡ @=2N1V_W Ep?~@|ԆQfG@ XmWy/vUws.-%"  =wtNbF*l[@ @}VUѬ~Ns1  @xE6BwusA ݺY.i9g?DCbA sp nȏ;Zy @KfhWߨ~{e?DCb(Cvr @?O`w[{G;Դo  X <`<8st~<3@ Dh<.]p0C;4OmjC|) @;gk^6wҧ>P< ]*{  6"`c/A%G;P{ ݏ>G@ w_N  }j5} @o} -!AZB @ Z8xG(]@ aDy,}H!@W@ <lǚO3g A@gJ@ C_K/- @Kwf#ϱg'dL@Fd @ @%nX @ @a8xJ @ ^etIENDB`ic11PNG  IHDR szzsRGBDeXIfMM*i  bIDATX W[LTW]3wfx:[a0 UM(!cb `Ӵ iW~G111>b[`!U@Adp};ܹܙROrf~>q\l{ dz䛥xI={]]]_|JKh\& "@܃yyyڿNb*=VIp/VcnnڅGljcUSSF/4Q$Τ )`7$5կ멩 W}}W_PϽ B;n7 eeeʭ@t]uOƞ={=|䞣'PjSe:SٟDzfٗtww#O]]wٳgqʞaQJelgΠVzak[5,T=[[ = ;>z71] ӌuk<௪ºݻI)yDʩ9j"0]ebyгgVG͛xc?oeaK ")nlDw)\nG£'}hшI.-"9eoyc'5n'cks W1 23`JF"W 7{'&PHj:NruL?OaFn&%ǵ0I#خ;w y2D@ V[<1?C"M),yb^~ /WQ&ITC`Z#Rs'2X'>q99 QfEC!_D%[`ۓ'HT 7yOD*1 I9ď }^%3 ,q<|yXI'&]IO*34V¤%- )B'j XUڅ[̇H-PvjՑh$*,@ĵ%|Xʺ8ug߈ZQiNe]d<3NLJ 3^^1)!>ړb9}! z"?{tIENDB`info>bplist00 X$versionY$archiverT$topX$objects_NSKeyedArchiver Troot U$null WNS.keysZNS.objectsV$classTname_assetcatalog-referenceTicon  !"Z$classnameX$classes\NSDictionary!#XNSObject$)27ILQS[ahp{$atomes_1.3.1/misc/macos/PkgInfo0000664000175000017500000000001315212624223016014 0ustar lerouxlerouxAPPLatomes atomes_1.3.1/misc/macos/install_lib.sh0000664000175000017500000000371515212624223017400 0ustar lerouxleroux#!/bin/sh lib_dir=${MESON_INSTALL_PREFIX}/Contents/Resources/lib function inst_tool { libf=`echo $1|sed 's/\// /g'|awk '{printf $NF}'` # install_name_tool -change "$1" "@loader_path/../Resources/lib/$libf" ${MESON_INSTALL_PREFIX}/Contents/MacOS/atomes-bin } function lib_copy_dependency { local lib_path=$1 local lib=`echo $1|sed 's/\// /g'|awk '{printf $NF}'` if [ ! -f $lib_dir/$lib ]; then echo "Library: "$lib", in : "$lib_path cp -R -L $lib_path $lib_dir # install_name_tool -id "@loader_path/../Resources/lib/"$lib $lib_dir/$lib # install_name_tool -id "@rpath/"$lib $lib_dir/$lib local liste_dolib=`otool -L $lib_dir/$lib|grep 'dylib'|grep 'opt'|awk '{printf $1" "}'` local liste_dopath=`otool -L $lib_path|grep 'rpath'|grep 'dylib'|sed 's/@rpath//g'|awk '{printf $1" "}'` local rpath=`otool -L $lib_path|head -n 1|sed 's/'$lib'//1'|sed 's/\/://g'` #if [ $lib == "libjxl.0.10.dylib" ]; then # echo "liste_dolib = "$liste_dolib # echo "liste_dopath = "$liste_dopath # echo "rpath = "$rpath #fi for dolib in $liste_dolib do lib_copy_dependency $dolib done # liste_dolib=`otool -L $lib_dir/$lib|grep '/usr'|awk '{printf $1" "}'` # for dolib in $liste_dolib # do # lib_copy_dependency $dolib # done for dopath in $liste_dopath do lib_copy_dependency $rpath$dopath done fi } liste_lib=`otool -L atomes-bin|grep 'dylib'|grep 'opt'|awk '{printf $1" "}'` mkdir -p $lib_dir for llib in $liste_lib do lib_copy_dependency $llib inst_tool $llib done liste_lib=`otool -L atomes-bin|grep 'dylib'|grep 'rpath'|awk '{printf $1" "}'` for llib in $liste_lib do lib_copy_dependency $llib inst_tool $llib done #Extra stuff because you'll never know cp -R -L /opt/homebrew/lib/gtk-4.0 $lib_dir cp -R -L /opt/homebrew/lib/gdk-pixbuf-2.0 $lib_dir install_name_tool -add_rpath "@loader_path/../Resources/lib" ${MESON_INSTALL_PREFIX}/Contents/MacOS/atomes-bin atomes_1.3.1/misc/macos/Info.plist.in0000664000175000017500000000344015212624223017120 0ustar lerouxleroux CFBundleDevelopmentRegion English CFBundleName @PACKAGE@ CFBundlePackageType APPL CFBundleDisplayName @PACKAGE@ CFBundleExecutable @PACKAGE@ CFBundleIdentifier fr.ipcms.atomes CFBundleGetInfoString @PACKAGE_STRING@ CFBundleShortVersionString @PACKAGE_VERSION@ CFBundleLongVersionString @PACKAGE_VERSION@ CFBundleVersion 1 CFBundleSignature atomes CFBundleIconFile atomes.icns CFBundleIdentifier atomes.app CFBundleDocumentTypes CFBundleTypeExtensions awf CFBundleTypeIconFile atomes-workspace.icns CFBundleTypeName atomes workspace file CFBundleTypeRole None CFBundleTypeExtensions apf CFBundleTypeIconFile atomes-project.icns CFBundleTypeName atomes project file CFBundleTypeRole None CFBundleInfoDictionaryVersion 6.0 NSHumanReadableCopyright Copyright 2026, Dr. Sebastien Le Roux atomes_1.3.1/misc/macos/atomes-project.icns0000664000175000017500000131354215212624223020365 0ustar lerouxlerouxicnsbic12 PNG  IHDR@@iqsRGBDeXIfMM*i@@FQB IDATx[[lU?mlccyف\ TUQTDMUJ M$?QVB%)qDakl{m*F̞=5{/F@3}6hOq<\~5448LVGXo2twCCCСC|handʸ?]׽ eE˖[PP.ܼy/0XѦfJYAPB*q,=`UUUmٲ 6|x gl963,-S+,,tA9wba?>|Kqw'$22qDk&\uu5%X9zib J(U(W= L@gh~r}о1#6V}~ ןaP,++ H92cq~%^ PWog>zv*n2van}9p&pIRyyKn߾}9 4rkt"9S.sS*Hõ'@/*Xb޽{ڵWЋYK3?J"7{f<㭰D5W"*w.Wu]2kVoiP/>3%J`gO|ҝy)׼y7000iZf 9D1  /_wn Οwgxݽ{7o bKtaFw&PyJQԎS&d0XF|'Nsڧg#-χ6M `J c= .< z5wqnU鴫]ޝǩbNjRM◫Ll1`_/ot57?#,pGp-y!W}}p^6I@Ƕ`⛭mP#~[Npcw7)T!)s0)s3,Eq,-$m'6%fvp!)rngG?ȽXԠ·Oq] q GY8à?_)6CrV@ -U(\n.\.G+Ǐ@fe1ֽRh},xgҬK$D%a7^u=Vއ{6lTE֒%2XPA>s˱ dķf2ZˆQd$fBP${_*@ .ߋEE\x Mn D[>6UgD@-[ܿkz w WXV9줠 pQ(Kxq`$7x4: >,mՓ `薼K=vl߅{acQ AǴ;D ^C胲6$/2^`@|۶uK+[=|&lblJOPA͸40v FMX<ÌXl5V&2% ;_pjW (z"0 w,ugCtExbqaF0sV l0^VW"SF\HaFjpJQ.nhp]ncS5}wwb+Uu=3m: ܶ:`l }TI`p)xGC|M<'jOmѯ#|G|c ^0D$·n p/²B[GSB۰!rkEKrHRJz Od)j ,s#!By0N%c| `I~Kx>jNU#NJd|T9{M]_1ʟ}Az1TA KY)NbֳXv*|7ཀ|є$K~-Nlg9r̓<#wc BQF|ȁ Ki*Jŭ:sH)a9@,‘lϕb ez ŵʫ _+/pR<Ru*m׶,Ļ,l5sg0k={_rctazgގg=%*SN˜V=/vry5~-ٮ[+eg8:q}X- '2T}]r=nKס'eVa6N0_& +@X7\i[0ZgqV]0LRNb@~ Z-_qGsa*SNb U*UDueq3 (RT]̅~vc8,_g0R8TJ>exEۺűxp16@6~ue~'\I8 QDֆ\BOBO4&#+iafOę %Ml=.Qq<œS8 b#F/߸I@"29[%/wW2u\DYa 9)sΥi6Dx#FYANHtQ ΥkɖhIENDB`ic07!PNG  IHDR>asRGBDeXIfMM*iHw! IDATxy]G}{{YlmMB @ڊUEmH  RPXJ$"@$"65IJQ Yq c;v؎%~Ϝsf3g7,w_rCrm(:l5T{e^f6Ve<~toE\1-L#שqpC2(ߊ" BUt< lw8o F#cA@"(z: }3\(|'رcΝ;Gۗ@#:ڙ+_2eޛn-[lUCo)Ovn k M=ʟ{T׵6Yi={ݻwgk׮}c=Syy xfbMuh3o 0[mOje}Y޲R:;_K.=F ϐgTlZ @p Q>`޽lΜ9]hѢՖ"~C0[لMo^'={.쟧O~9XzHɕ)'BeWt!= ?krttt?,@/xᧄS)v)A[,krSfJ'\,⤶MC 8D_0Ty,AH, \Qa+@^u0lY*Q4[pg݁A@bŊ? BяM!) )2SRnp'Ė ^{sGp۶m|mHc}@xbs0?_J ݴ~M``@&\S|t;s<8 #@SEX Zj;q=v/a<1 ~OY:[/ 3c`+@X kC|q"uWrWhrДҧ4ˣ+z`4E _ tx‘_T["/  Xb[Yh t|6|3Y З`^ss/oip3wn -m}h{xvڻ@huM6=x9OFF'=OZ7Hvͼ ˜g((e]ڼ w^:PV81x~sZ+UY'1: Z@p1 ?|xON  QIfm 6T#h;A3~zHUS+ ٍKIoGY= e UUue G:h#G 7qY˾Oesn%_eZre6~}>2nX!u)R4WT_ p t uJLʟ/>Lv~Kُ{;ޑ+qS9P,)Cl"\ҍ04ԾrEZ'|ysaJ~?TG;vp}r|eD.LʓSMoe ( Acqw;R= 0nxnW- ݆2,Utn27/֥?PIăGn?.K~ @,o^SCoN:)u)ِ}vmޚ} qnhgo͊< r^d> NJAnS]]4 PZ?0(N;  |0+묩2S::1_ *?@y@de g]|7LR?Q;Fuyfsܷ=-G_e(Dpg̟-&!km څm)R4\WK-hb߫νGw7k%ګ3~S׫+eX<:j2y: pN~gKyR4)U|8;lۥ0ڕ;\:r'ڝdUQƣ,ΪV#X1_y<ݺ!ŠAo~r=Q[,D;he1^g R̿y6LXñ\#!ylyX'eMSʫ!b$F1Ry'~z?3C[;TBn3_O+}0C#^KFZg9DvubBpGMU ʳbx06Y_ M֧n\1Q)^M9Q]?)rI~%phߧV٩.\|O\A/Y'>)+Q AV T^f zߐ~w@JTs +^+52eO(2 EpeI!=Q:(s l m X "{Js;c4ud5UQ)\k$Fq7r2|F#O٨Eb< rl oB'k&M*?g1~ux*SX,@ .D8bPTYizkp`u*EP8| B!TTZ+`r/FhʙSa+(k@Y(L)_|T]h}beTd~,{ C o;O-ڛTzX]gU ; K(nyۇSuZℤةia˔=4 FҠTCQ>J=vP磟/Y()iBE},tA%HT;K7u5 /k@TbKfZ2qv`zO-r~ B%L:Lh|l9gK ,XۑOIO9TM*F@(k_y5@ʺW[f[(s o8a[D6C(湟s'tDXK\a+H V RLјGXH eL7(kXL۴)_giLNimg(ژj{*=oW?@YCh# j[ᆥ,}w}t@R/A+tVpQGe'iX( KLxA}:*N?ma jo]Q+գ`Kk\̯Cэy~3"УE83#jaL l(r+ȁG#TA<P uj8(yC=ĽNڮ,4M lt(x*4a>Sw^a87wRL]2珃 )j7SA6R6; 8ϩ]VaQNjwx.=uV}j14Xؕ);k2|I&vxJ ٧ҡI17e\}@|X#EjTo` KeZǤQݚN`h\@`*0f)?$ñ?Mēk/(ր  չt:,+v0꤄iR6/v0* #uȽ~]ӹ®FT)?i6 Gw_vYDxCulħŶ1ױ!x̥ҡʣ8>*0aY-.`NO8!g%]yMKyt&p;Jge1O ;t"K?^,u+ j<8 Dd{8L?/nN՜ P>;O,(4¼ի[}aQI])Hj>-/CZBR HS5x$<-܈FPgs+fT i/zuQQ;x.y@Ȕ#;5њs6`ZXLC&@&G}>#ЇmX'f19Q?ry:iUbGO-լ&^KGTM=T'9/;V'w#KX塉I+u+#heE:<,_󺍛W]eß2EXZYz-WirtunuK߯+K+ctbb KGU>tő버I ,H@,@/Ks'L\iSݤhu{-WSuiPTReIOx驲ݦWL ˵oM Xһ>1^],-V6LLX,>)OʒeY7o*/;EoTb|bi 7/e1Á2ݔbu֡oL @/kXO*=#L!+W)^RȣESEK~UdCk>,P)%nK-+K2~o?(Q/SL]UT􄽔 w}m_h},4 u-:}]biUR3ƒ~qW=6i|;Ԉp=JQz)SdZƣӧ< Ȣ`G'{LYuwac[# =,XGuhjV꧟ߟh ށ$xyC2*/3}3Q!P ¬lTͷ&x ¯FR4`{VbXX*ek}~ uB GbQ0 }ߞk Y25ӧX &)/`z: GPV>e;A@2 gR }#O;O]_@W۱(#ފw+!t@G BtyYTr~݄se5d{P$i^Ψn5uIENDB`ic13XPNG  IHDR\rfsRGBDeXIfMM*igI@IDATxǙu@)RSugvl쟽f=4m=#EQI$P+#"3"ψp3O;=<<...:[}:< b[\ZN:Q4VЬ4(| oI9sg'"pݬ#= jnǵ?ٽ ~g%;uia Ha?!1۲^8ױuK ;99zV;;;'/_>&lID Fg V`:$&S׀_7{g@85!0=t$`ߝ)D4+??zssmue0dhermUWFդ]:I@ۓCL}.kHY` m9(95%` w F[o/yӟO|!t$P9 J>3( ~?l&`:SmЭu@TM@q"7orokБ2wfk_I+.uH2|A0ni: (nA_KpKu#KjD)mz$ԏFA}lsť~_wiwH ԪIB Oݘ!ioZ[ u `y"̖ݻ?S_|_Uّ@UI5͊$uR&*n l}5Q q5'i!#h  ,&<'4gJ˚6T I* k5Dy">È L~Xxv4[2E񚀁"0 \ʡUw»R`ɧTej.ZŸޢ~fvMKz,s|@{4| \T2MdH H~*(.!) ?~3 x$G/6> HT DB;f|muQ~ _ >&5ʿB=1vW! ߔ _S̵5\G?OIn\b g@:xж &R}"xME.G t$p)pf'dzC7yE(!(.hz;Чh$}52Fގ"at@$;9 xA 4i*' >"p'1x&@@8Y(NSu#\0sER IO]7'ZiY .6yڠ h@hКjW$"W϶5E))ȯæ 09诸,4A8Fp"tM= NEghizda,,L [pY^Od^P4Dx)ߘ]m5 i ZZu~5U il* Z K\ YRڒ@k'F;Q'u=:'u/ʭ{1)78Ůi[>?.iL.` cqM ߁ `MU#kI"?mbۏ!x nC@0mBk d"T1׎5cV]%P&?9 z_菟<@-eAPԛxQe\Oew!{ "\5,t #vaD@:a&4q6_a|B|Gd&õ:;M6C>1?q46cM& B`M<-$0YvI hk  av& ϵ$&5!3Pԙ.onL\  "{ZWe7~׿/>,)6kM50kĝOVJ1q~Zul0wW4l @ {U,ܒ@kJh4 cX3lS [cׄ@ta0-׹˖a,Oš> ^D@oܓ@ IŀQ_ʻ&{M@δH5IT. ?$@p)@U$ k:Mi΃kq4 [wΝs]v@>ӧOS[sKwX%`S"c !5qO\h  $@5kIq'p矎$a-C&r4?aK烡_]X 'O ,c?%vA:9NkLx4="u4cx;5o 5Kp̓t?ty7 &r( #qr1aM`_FgkMU@Q+KI@@E)؝.7xtٍۯ Y4LoNt_ 8n $fΪ=@Lp/OH4[.hNgMc8^ǏD0Zh5=.0E 2C-iJn*꧲K'.D4"l% `zw afQ4kPu۠"JYs"|eǖr|?ӖGYH15;;;fn^kI`)wn{$>wqL#pHNX8C8'.sz\ҔFvIm:ER=$Óp дY-qbǹl|lIgpҹ< oʽ!={~_$@o 0Pg&/V怼@92q,$!hYczn~Y 1$JMLI}e-ňT@B'.5;=aiqSk"g SLiÐ 5w^w50Qu+ ,d; c>:v&o6vt[o_>| $c20ReDp ЙJ e1cGtO^O# 84uo MNXD;AVMt^̵&:D%X0X`?%7,~w/NwZ'v]V[_ᢋ:S~%^ԽCŝx;F VʹWqrЄQaQxv.r^s Hдc- >Vؾܽ?|W, \ ; 8y4cp۸~i(/6.rN]05Ŭi)_HYXʭsCUl`$왘Y_m7'\@ c?Cz"8q8v?N:ku9r,ԶtiHӁmi3Hȝi  Z`ĕA)v]nzu:دXm h3%C\OLI\VIziNckǮJ"l_cU0h 4\KHj#7"7 OuǮGn~n `:@w?IF r-J9*}8L(\kÚ ۔v jhFgj?{v㲤qz酷_ŠrҮyWyEܚb_Ԭ5DmT@cSΡy$;tP8}I_ V>:;~%0r%0㪰e3W0Qәv}U4L@ّ{4{?xw٢ @: cuk+[s'|lllUlr-qrS@ed0ʭw`di\䫯߲|e~->^dsŭ[ҏ~av{￟md@&k*3Ǎu`bohg[)+\6#?"%[)]1?kxu5 @۔=:u-O4c&i[C݈2!#L~tt ى@"Xf#ϲ7b3 K5ߢ7?Fi4ς߮Bg6u&8˗ٱ_hMMM V0`Hz _+G΢:asqSJJ{#?_5ć)+}EvpFwU@&B( R`X׊g""G:ٳ0-/A{ 4MȔl_ 74=@ )ksú*匫]$zR(+30ߓc> T 9Z XtB Y״`ׂ,k ?uLޙH` `ڝmX8{*.D6& {EsʑO-Jer$(&-ny;w4jiWX%`@^&jE7).uAWV_Shb6͕00Ӈ3kTsa-i'ߙ֌sƵ5Υq=GeɤLF-o# cL$kS {7rM/?֎OϾ ;Yk7lePQX*:ȶPmNӹ"wi}z j}m|{gG!4%)}RHi;Ro oҞ44m{/[w/4o-!7N[]}kH\ L>Q}FOϷ pvʲ@# P %ІzE hC@~;[е˖eyc\L=R9~4u.orF_N;0i5|:s8G#|-"`A>mX{w_ OeF%RX ;X|f-?RAlskxsEz*wX$x _>TzY]^dGş {^>!`wߙT={ K3/#Cȣ|L[匚n{'~`jj_~ 5 d_:U=@}ewe]iDz5E<du /.jj~Whfzk~N⇏y Pa$YLʢٰM,滭 --quqvUuF|43kd[m_gj3 ,F ? CʧW*PE>HaI? h1V`:)kخ2yT͟7j9OV@76X@Fo}k=vI,21T{_ 9.0AB +Z ρ!2V[16O$p &4#w_cߋQ]? rք| T{iFKTi#@)@姸HvmnSLrM9Q~a3j~muܵ"Y Jv}) r] @-$+igX_A %vDEwXQ9ՙH` `Rm\zDct쳃Su?Fa`gG@ĀVvu]T'SOU Ks~R[~ud&I n\eӉP'|+5zW~t(u?s5t`Yr`:P`0 =<VMƖ{ğ. Cnb`p[aLjtXk`ҎR×zzlЮ  ?o@לew۝.i"#f+7.ɚbIQ|S7󹾺o\$@+h}_ sGt5okܺ\SKY(|쳃a/rM1P~_6\˚r{z 8W,Bܯ ?ֲ(+~mV;RZ?8 {z apzs{f]gyo*?d;W{_¯C IL6a* 6#L@k2 F17jQ>#!MRp_}!? :?xkv,"'X,G٪ӟf?xKVٳ?߳~|0d$ <_ϧq|YtdWˠk2RnY}]$:yHt"`'_~=AϳsxIBiRaZ;!`02"9m~QpsRRo\ /h-0XR.Zz{}.jX0 @ԛ?v=niyuq ZE~  ~O'م4sYİ$6t~M#y5-@lO3Ri—zOeď~!`]+ "ev[Шr/2u[*)8[ @` J G,i]|Yk0_yOqnOq.lw"*PjGz@*==; e9H r@nʾ%[XdL~vd;"^+x=T},пND~,e_!]#H'ך:z.xkX nOky\;̽N:\(lkkF=澐 d{"}De՗Nw 9%A?c2{U~63U};NX Pl]nI2J-ٹsE)$V!G3 2 {-jS pHߚ]j˒_e]hQ_j_dG&:{[`j>4ݑGrR6z`V'!5mC-nK74,0Hz '=]!,[֔#-O\F4$%LmOvsAz\ \mكfk KNϼ;AxD=2z-OÝ U3LNX/B:y]Fb0† (lX1V~\F[`'N]k}b (Ke/[ 贀Q$=|ўsX"WVoO1~˰oAk N]:;;y0Hd dXq!ny%̻A0G:ovI"+CiWh.Q&Xk%  ]FβWwd6I$ P@/?/%!pw?S_< p,@d4H1p0m*Ö,7u`[ 4XY:>o/szDG1XqW>ս3u6^n #\ H|HOg\~WE'Z`ϖcľKupԶ*``x &|li*?, p1 j8jz}hk~\@菥L qMz\acI]9B\LoX |2o\ t7&-D`s|]M16ePW<`:"kZ d Hk篳 cu uȥ TOя5c#:Ix[kKI{'F i}yA`3^;AoޖqeiաqE_[N!OJesB`zbTnq3ҼAqSRL-A:D~L3:>@Wڣ a@ 4=S3Ԓxl:'Ά|ԁ;uFeX`TFT֛*/$Im kxC&Q]?wGAstȸ" n.E pCٸ#9:Nv&" AID1`m Le &qaon˲߮ ײN*{6_xZG~(Ӓ-Aq)9H3GB(j, a= KaM@A^FOgo;.[uf.e  S!18'`HPtdH Oo{?'0^+mϾ&%B.w)?@t-*x@ϼ  M P=?ٽy<*; S8ۓZ'ȜRn[|ule[C<?i4MqK>x睰@G=DΘ5ar P1ৌBFeLWb-u@k`5.`DX4;VcMc+x֠O t[V #Kz-+3,>CޑemZ1ȫ8|ul@ h,@'j|5~Dg`R @gԏ_[70ԅ2ȄT?=/).XoFMjF4v i!p|wČMM7a-@r{!ml ӭ~4<:n>wus& -iY UMm;7!SМq6`T}-i\2vx$`a5VlgZUP+ϥ0샨p!%{PXaFA ~œ\Vl:E.cjX]H l RX O X۪Rg=j #IKʥ,kV?xmkz@{F}F~8K~\]۽, ZqvrϴNR mlC;- Q>l~?ltxM\!+!v NYԽ }<-GCHZW O~CQhKlܮ5lf%d:? _3Q|H@`~q8(xI8pf9Ȏj="OSo^db`VK_&a;°DHȖmi}%L}Lh:zs≋7qE"[sP;Ft|+N ɔx=@j^uf UAuV&|2,@@y  iƍYѽA:# p8_ )O{yFhNVyo;gk?[G$0l>,?h]v Vr ٰ P@z<@ `%{sxq'v 4 R/ 8$|-(wCaA+P Ƚ /0AL5|bUE޶qqUG9W5}ܶ[EkPiC~,#0&~ c(Ơڒ~7RO\ cY`ozCq,.VqjS}{ ʾ3JkF%*IwhO6աS& S#6.T)isAڪ.?T6|Vkj]\ H@j=Ǟ0m/˾D#vuM8jZAM^ڮpOܜҤ @_.r *b?~,a.b4zF\HE)>%E-G `1R9p!UOX|&G3sMf"&yx%v74]x9{V5೑7{kFg,1f#6BL[F"@ֲ(2 r43]Īdj.~LU}R/[Ӭ߹&iڝ#߄Ո-2Ƹܰ?b^Tu#O,D 2Lc8}ʗ{3~cv>gQ(L_d:6- >')-ɏ(d74hF?MhC[KA  `C6$47%O-K:| :xm^6T=phĺ hr>[98o)#S#ٓ$[-.m`E&) cMeM_PDc"]: mKw7gO4U5~Fvh́5CQâ zk;wjנ3xe6;mULKjWXOS}ZA~[rNRKEj [7=\_=Np.r}:E =Hs@"V@ݎ[7%U5x,RAw]Ç.UGϸŻxFkVC$lQ?kJ,Y=,\P>vGx3iM߯ĵ"6w y(K;FR;XQ r 톼DJ^3fQ،ZKO\:lXc4HrC 1|I#_rbϿ6, wjnKl˯ K"dtI,^yE'^~m[nXMXNhS+puZE~PW^.%nn˿)@jkaOfg> ` =@(S^ٱYiA#t@#8P ?w/7^)^f523d޸<،SY? ܰ@nijUPW*>QCB)h ;e{<'n9]6+^\){ܫ }5ɉOE6`AK{$ۅ!Rw|Gr2DC#}*;_;^E5u-lFsM)[!M~Ȏ>U@`YwUs\e OܗPפZpKpsQdet(hs @qc+M۞K O{{䠣1 `fHu9&9|oGG~FeM-@z Q{`EA2Bnᵡ6t4|Jod eIDAT [UVFAm3S׌I@I^%RtUG j!5_ ~aO=9 :$~dv?ߐ%{CDHh<FM-ek>ς߁Yk+! )&>` isAsEu_7L|a~[:4bQgĄA7(/#RWd{ !Es~z#D҇=I±r@>}>3d@nҀ EzV r6c3T58p4@l\@SNnlPCc ~6 0'M -#tݓ!K- Asz=$Cx_rڕ{([aEYp_y'[]@:kIUؿ3 x\FsJ]ujJޣ3j1j(/&t[ZWO Cl4̝s -{e\ H2Z{ώcezҐCz^" mP8Y|ʑaHy ϰenGsnbYpo {- , LBǞ!:J:j{`N\33MKrp¶܏]cB+O__(ӇN?u#Dr9/_*_g"u% FT̵6sA~uwGc.fg \>%a@8>y?oW%H caGx:X/e(]3&xϺ@EzUPT vd7>0CGQH^1Fz7\@:|lސ=u>nX5k1{Sozuaq#<~zڟǑ  - /~;?l} {ى4 }sW%lhʰ%al]'6<%u_WPaN:=QC25bk#E`5-Bi^迨OiWb,?Z{:rl+m/-!GC X KXq 7=P[wB7EL6rSu$YBH NQjܞ ҇ׄЁ O#weK|g`eKq [oa5|(&_SWM p1ďunn\;cysEze2+ЇoEl'qPNJtjx WSzi'v[PFlbcQzŠ803ri˸K(uʡ3`}#{/1p T4y039!T0Q✞v&vS' Jגܹ r: [wcBgеӄtlhoǮƖU OxS5er+ג<Bֵ_\:Vc e9@#=GbiM_E@@&qSp1{}$0N=UM7DwKߣ3ֽ?[L0>|M@+mM_/jn'[v դe qjIZnt}6z.`39]GR_B"El ` {L~m&ߺ3G-N[R*Տ;;TӭC[N NѤ6ߑHl~.Q/9?u՝+5 P^נ7 q=WAzÎ讯j~;(}䶎$D(頸&{SS@/½y8&ʠIϣkKu f:L sx4s?r&J_5_JW垛4!:`w\@L$1 L%3[AʨF8G[G߮5`/2nCQ0ai=Uw髶mRV : `ON 6qqGw=̮N= %,L*Gk`@H|A_r=*Y_U髦׶8jyUe7@~M*1SǠ9tmx&]_@kO>dXviy'-qoؔi/'n{z\N|U*]{nKQU/(}I`0nU_7]ڞqnT~t.wTw~us ̕`f3t}.\rr;ԮnzխZot ; OkC'I`4A24+ݠr_a;ݺ9ݪ#uUWM?t2j7!6t0.W5˩~|Οez]ߠsӮoZH`.43d\mGz릯۞wHNzRjUӥue0̴5+ =OM$if̜6%z3w=Ö|׸s;zz\>$ >f ?¹׏s\4o4K!ZGJE#a\ MjҊ*FLAͩ˺/*v&M3($d WٸO7MbA@ڌN5] M`MAAU=~=7Y;j*U,cnc̬5X(BCKKKguVRaVW}U~Y9wZͪUm6>_ԉ7I0b7& F|:5$Ј{`!v- 2?./b5,]({qE;(>N_'m⫔YtiQp/L2T߯muJ[Oy{}*oOvvv>O5w?Wl@E°k _';==?d]5"HAvIAr^!q HQOY[o Qڬ~0JKa3E=ш=ZYY9|?ߩXpv?ipٍጞT90$z_Uzd7n.qkC# ߒ,|[y;I`,0`qh>===H,a3)gI3$X `rNO wn'qI}SOZo;S@@Ng@a=@5aL'Q%`⺏菶&"m9V ,Pc[vI]1] g1΄@8_+7sݙN@ XqG폯wnFXZIh׀O}k$0Rc; ?i ƈp#c (%3&-:u8Ц4BI EaQt$0Q \w^SgH # uGDBW6I}6OE ]S(Kڅw2JVR]J}+q/IENDB`ic08XPNG  IHDR\rfsRGBDeXIfMM*igI@IDATxǙu@)RSugvl쟽f=4m=#EQI$P+#"3"ψp3O;=<<...:[}:< b[\ZN:Q4VЬ4(| oI9sg'"pݬ#= jnǵ?ٽ ~g%;uia Ha?!1۲^8ױuK ;99zV;;;'/_>&lID Fg V`:$&S׀_7{g@85!0=t$`ߝ)D4+??zssmue0dhermUWFդ]:I@ۓCL}.kHY` m9(95%` w F[o/yӟO|!t$P9 J>3( ~?l&`:SmЭu@TM@q"7orokБ2wfk_I+.uH2|A0ni: (nA_KpKu#KjD)mz$ԏFA}lsť~_wiwH ԪIB Oݘ!ioZ[ u `y"̖ݻ?S_|_Uّ@UI5͊$uR&*n l}5Q q5'i!#h  ,&<'4gJ˚6T I* k5Dy">È L~Xxv4[2E񚀁"0 \ʡUw»R`ɧTej.ZŸޢ~fvMKz,s|@{4| \T2MdH H~*(.!) ?~3 x$G/6> HT DB;f|muQ~ _ >&5ʿB=1vW! ߔ _S̵5\G?OIn\b g@:xж &R}"xME.G t$p)pf'dzC7yE(!(.hz;Чh$}52Fގ"at@$;9 xA 4i*' >"p'1x&@@8Y(NSu#\0sER IO]7'ZiY .6yڠ h@hКjW$"W϶5E))ȯæ 09诸,4A8Fp"tM= NEghizda,,L [pY^Od^P4Dx)ߘ]m5 i ZZu~5U il* Z K\ YRڒ@k'F;Q'u=:'u/ʭ{1)78Ůi[>?.iL.` cqM ߁ `MU#kI"?mbۏ!x nC@0mBk d"T1׎5cV]%P&?9 z_菟<@-eAPԛxQe\Oew!{ "\5,t #vaD@:a&4q6_a|B|Gd&õ:;M6C>1?q46cM& B`M<-$0YvI hk  av& ϵ$&5!3Pԙ.onL\  "{ZWe7~׿/>,)6kM50kĝOVJ1q~Zul0wW4l @ {U,ܒ@kJh4 cX3lS [cׄ@ta0-׹˖a,Oš> ^D@oܓ@ IŀQ_ʻ&{M@δH5IT. ?$@p)@U$ k:Mi΃kq4 [wΝs]v@>ӧOS[sKwX%`S"c !5qO\h  $@5kIq'p矎$a-C&r4?aK烡_]X 'O ,c?%vA:9NkLx4="u4cx;5o 5Kp̓t?ty7 &r( #qr1aM`_FgkMU@Q+KI@@E)؝.7xtٍۯ Y4LoNt_ 8n $fΪ=@Lp/OH4[.hNgMc8^ǏD0Zh5=.0E 2C-iJn*꧲K'.D4"l% `zw afQ4kPu۠"JYs"|eǖr|?ӖGYH15;;;fn^kI`)wn{$>wqL#pHNX8C8'.sz\ҔFvIm:ER=$Óp дY-qbǹl|lIgpҹ< oʽ!={~_$@o 0Pg&/V怼@92q,$!hYczn~Y 1$JMLI}e-ňT@B'.5;=aiqSk"g SLiÐ 5w^w50Qu+ ,d; c>:v&o6vt[o_>| $c20ReDp ЙJ e1cGtO^O# 84uo MNXD;AVMt^̵&:D%X0X`?%7,~w/NwZ'v]V[_ᢋ:S~%^ԽCŝx;F VʹWqrЄQaQxv.r^s Hдc- >Vؾܽ?|W, \ ; 8y4cp۸~i(/6.rN]05Ŭi)_HYXʭsCUl`$왘Y_m7'\@ c?Cz"8q8v?N:ku9r,ԶtiHӁmi3Hȝi  Z`ĕA)v]nzu:دXm h3%C\OLI\VIziNckǮJ"l_cU0h 4\KHj#7"7 OuǮGn~n `:@w?IF r-J9*}8L(\kÚ ۔v jhFgj?{v㲤qz酷_ŠrҮyWyEܚb_Ԭ5DmT@cSΡy$;tP8}I_ V>:;~%0r%0㪰e3W0Qәv}U4L@ّ{4{?xw٢ @: cuk+[s'|lllUlr-qrS@ed0ʭw`di\䫯߲|e~->^dsŭ[ҏ~av{￟md@&k*3Ǎu`bohg[)+\6#?"%[)]1?kxu5 @۔=:u-O4c&i[C݈2!#L~tt ى@"Xf#ϲ7b3 K5ߢ7?Fi4ς߮Bg6u&8˗ٱ_hMMM V0`Hz _+G΢:asqSJJ{#?_5ć)+}EvpFwU@&B( R`X׊g""G:ٳ0-/A{ 4MȔl_ 74=@ )ksú*匫]$zR(+30ߓc> T 9Z XtB Y״`ׂ,k ?uLޙH` `ڝmX8{*.D6& {EsʑO-Jer$(&-ny;w4jiWX%`@^&jE7).uAWV_Shb6͕00Ӈ3kTsa-i'ߙ֌sƵ5Υq=GeɤLF-o# cL$kS {7rM/?֎OϾ ;Yk7lePQX*:ȶPmNӹ"wi}z j}m|{gG!4%)}RHi;Ro oҞ44m{/[w/4o-!7N[]}kH\ L>Q}FOϷ pvʲ@# P %ІzE hC@~;[е˖eyc\L=R9~4u.orF_N;0i5|:s8G#|-"`A>mX{w_ OeF%RX ;X|f-?RAlskxsEz*wX$x _>TzY]^dGş {^>!`wߙT={ K3/#Cȣ|L[匚n{'~`jj_~ 5 d_:U=@}ewe]iDz5E<du /.jj~Whfzk~N⇏y Pa$YLʢٰM,滭 --quqvUuF|43kd[m_gj3 ,F ? CʧW*PE>HaI? h1V`:)kخ2yT͟7j9OV@76X@Fo}k=vI,21T{_ 9.0AB +Z ρ!2V[16O$p &4#w_cߋQ]? rք| T{iFKTi#@)@姸HvmnSLrM9Q~a3j~muܵ"Y Jv}) r] @-$+igX_A %vDEwXQ9ՙH` `Rm\zDct쳃Su?Fa`gG@ĀVvu]T'SOU Ks~R[~ud&I n\eӉP'|+5zW~t(u?s5t`Yr`:P`0 =<VMƖ{ğ. Cnb`p[aLjtXk`ҎR×zzlЮ  ?o@לew۝.i"#f+7.ɚbIQ|S7󹾺o\$@+h}_ sGt5okܺ\SKY(|쳃a/rM1P~_6\˚r{z 8W,Bܯ ?ֲ(+~mV;RZ?8 {z apzs{f]gyo*?d;W{_¯C IL6a* 6#L@k2 F17jQ>#!MRp_}!? :?xkv,"'X,G٪ӟf?xKVٳ?߳~|0d$ <_ϧq|YtdWˠk2RnY}]$:yHt"`'_~=AϳsxIBiRaZ;!`02"9m~QpsRRo\ /h-0XR.Zz{}.jX0 @ԛ?v=niyuq ZE~  ~O'م4sYİ$6t~M#y5-@lO3Ri—zOeď~!`]+ "ev[Шr/2u[*)8[ @` J G,i]|Yk0_yOqnOq.lw"*PjGz@*==; e9H r@nʾ%[XdL~vd;"^+x=T},пND~,e_!]#H'ך:z.xkX nOky\;̽N:\(lkkF=澐 d{"}De՗Nw 9%A?c2{U~63U};NX Pl]nI2J-ٹsE)$V!G3 2 {-jS pHߚ]j˒_e]hQ_j_dG&:{[`j>4ݑGrR6z`V'!5mC-nK74,0Hz '=]!,[֔#-O\F4$%LmOvsAz\ \mكfk KNϼ;AxD=2z-OÝ U3LNX/B:y]Fb0† (lX1V~\F[`'N]k}b (Ke/[ 贀Q$=|ўsX"WVoO1~˰oAk N]:;;y0Hd dXq!ny%̻A0G:ovI"+CiWh.Q&Xk%  ]FβWwd6I$ P@/?/%!pw?S_< p,@d4H1p0m*Ö,7u`[ 4XY:>o/szDG1XqW>ս3u6^n #\ H|HOg\~WE'Z`ϖcľKupԶ*``x &|li*?, p1 j8jz}hk~\@菥L qMz\acI]9B\LoX |2o\ t7&-D`s|]M16ePW<`:"kZ d Hk篳 cu uȥ TOя5c#:Ix[kKI{'F i}yA`3^;AoޖqeiաqE_[N!OJesB`zbTnq3ҼAqSRL-A:D~L3:>@Wڣ a@ 4=S3Ԓxl:'Ά|ԁ;uFeX`TFT֛*/$Im kxC&Q]?wGAstȸ" n.E pCٸ#9:Nv&" AID1`m Le &qaon˲߮ ײN*{6_xZG~(Ӓ-Aq)9H3GB(j, a= KaM@A^FOgo;.[uf.e  S!18'`HPtdH Oo{?'0^+mϾ&%B.w)?@t-*x@ϼ  M P=?ٽy<*; S8ۓZ'ȜRn[|ule[C<?i4MqK>x睰@G=DΘ5ar P1ৌBFeLWb-u@k`5.`DX4;VcMc+x֠O t[V #Kz-+3,>CޑemZ1ȫ8|ul@ h,@'j|5~Dg`R @gԏ_[70ԅ2ȄT?=/).XoFMjF4v i!p|wČMM7a-@r{!ml ӭ~4<:n>wus& -iY UMm;7!SМq6`T}-i\2vx$`a5VlgZUP+ϥ0샨p!%{PXaFA ~œ\Vl:E.cjX]H l RX O X۪Rg=j #IKʥ,kV?xmkz@{F}F~8K~\]۽, ZqvrϴNR mlC;- Q>l~?ltxM\!+!v NYԽ }<-GCHZW O~CQhKlܮ5lf%d:? _3Q|H@`~q8(xI8pf9Ȏj="OSo^db`VK_&a;°DHȖmi}%L}Lh:zs≋7qE"[sP;Ft|+N ɔx=@j^uf UAuV&|2,@@y  iƍYѽA:# p8_ )O{yFhNVyo;gk?[G$0l>,?h]v Vr ٰ P@z<@ `%{sxq'v 4 R/ 8$|-(wCaA+P Ƚ /0AL5|bUE޶qqUG9W5}ܶ[EkPiC~,#0&~ c(Ơڒ~7RO\ cY`ozCq,.VqjS}{ ʾ3JkF%*IwhO6աS& S#6.T)isAڪ.?T6|Vkj]\ H@j=Ǟ0m/˾D#vuM8jZAM^ڮpOܜҤ @_.r *b?~,a.b4zF\HE)>%E-G `1R9p!UOX|&G3sMf"&yx%v74]x9{V5೑7{kFg,1f#6BL[F"@ֲ(2 r43]Īdj.~LU}R/[Ӭ߹&iڝ#߄Ո-2Ƹܰ?b^Tu#O,D 2Lc8}ʗ{3~cv>gQ(L_d:6- >')-ɏ(d74hF?MhC[KA  `C6$47%O-K:| :xm^6T=phĺ hr>[98o)#S#ٓ$[-.m`E&) cMeM_PDc"]: mKw7gO4U5~Fvh́5CQâ zk;wjנ3xe6;mULKjWXOS}ZA~[rNRKEj [7=\_=Np.r}:E =Hs@"V@ݎ[7%U5x,RAw]Ç.UGϸŻxFkVC$lQ?kJ,Y=,\P>vGx3iM߯ĵ"6w y(K;FR;XQ r 톼DJ^3fQ،ZKO\:lXc4HrC 1|I#_rbϿ6, wjnKl˯ K"dtI,^yE'^~m[nXMXNhS+puZE~PW^.%nn˿)@jkaOfg> ` =@(S^ٱYiA#t@#8P ?w/7^)^f523d޸<،SY? ܰ@nijUPW*>QCB)h ;e{<'n9]6+^\){ܫ }5ɉOE6`AK{$ۅ!Rw|Gr2DC#}*;_;^E5u-lFsM)[!M~Ȏ>U@`YwUs\e OܗPפZpKpsQdet(hs @qc+M۞K O{{䠣1 `fHu9&9|oGG~FeM-@z Q{`EA2Bnᵡ6t4|Jod eIDAT [UVFAm3S׌I@I^%RtUG j!5_ ~aO=9 :$~dv?ߐ%{CDHh<FM-ek>ς߁Yk+! )&>` isAsEu_7L|a~[:4bQgĄA7(/#RWd{ !Es~z#D҇=I±r@>}>3d@nҀ EzV r6c3T58p4@l\@SNnlPCc ~6 0'M -#tݓ!K- Asz=$Cx_rڕ{([aEYp_y'[]@:kIUؿ3 x\FsJ]ujJޣ3j1j(/&t[ZWO Cl4̝s -{e\ H2Z{ώcezҐCz^" mP8Y|ʑaHy ϰenGsnbYpo {- , LBǞ!:J:j{`N\33MKrp¶܏]cB+O__(ӇN?u#Dr9/_*_g"u% FT̵6sA~uwGc.fg \>%a@8>y?oW%H caGx:X/e(]3&xϺ@EzUPT vd7>0CGQH^1Fz7\@:|lސ=u>nX5k1{Sozuaq#<~zڟǑ  - /~;?l} {ى4 }sW%lhʰ%al]'6<%u_WPaN:=QC25bk#E`5-Bi^迨OiWb,?Z{:rl+m/-!GC X KXq 7=P[wB7EL6rSu$YBH NQjܞ ҇ׄЁ O#weK|g`eKq [oa5|(&_SWM p1ďunn\;cysEze2+ЇoEl'qPNJtjx WSzi'v[PFlbcQzŠ803ri˸K(uʡ3`}#{/1p T4y039!T0Q✞v&vS' Jגܹ r: [wcBgеӄtlhoǮƖU OxS5er+ג<Bֵ_\:Vc e9@#=GbiM_E@@&qSp1{}$0N=UM7DwKߣ3ֽ?[L0>|M@+mM_/jn'[v դe qjIZnt}6z.`39]GR_B"El ` {L~m&ߺ3G-N[R*Տ;;TӭC[N NѤ6ߑHl~.Q/9?u՝+5 P^נ7 q=WAzÎ讯j~;(}䶎$D(頸&{SS@/½y8&ʠIϣkKu f:L sx4s?r&J_5_JW垛4!:`w\@L$1 L%3[AʨF8G[G߮5`/2nCQ0ai=Uw髶mRV : `ON 6qqGw=̮N= %,L*Gk`@H|A_r=*Y_U髦׶8jyUe7@~M*1SǠ9tmx&]_@kO>dXviy'-qoؔi/'n{z\N|U*]{nKQU/(}I`0nU_7]ڞqnT~t.wTw~us ̕`f3t}.\rr;ԮnzխZot ; OkC'I`4A24+ݠr_a;ݺ9ݪ#uUWM?t2j7!6t0.W5˩~|Οez]ߠsӮoZH`.43d\mGz릯۞wHNzRjUӥue0̴5+ =OM$if̜6%z3w=Ö|׸s;zz\>$ >f ?¹׏s\4o4K!ZGJE#a\ MjҊ*FLAͩ˺/*v&M3($d WٸO7MbA@ڌN5] M`MAAU=~=7Y;j*U,cnc̬5X(BCKKKguVRaVW}U~Y9wZͪUm6>_ԉ7I0b7& F|:5$Ј{`!v- 2?./b5,]({qE;(>N_'m⫔YtiQp/L2T߯muJ[Oy{}*oOvvv>O5w?Wl@E°k _';==?d]5"HAvIAr^!q HQOY[o Qڬ~0JKa3E=ш=ZYY9|?ߩXpv?ipٍጞT90$z_Uzd7n.qkC# ߒ,|[y;I`,0`qh>===H,a3)gI3$X `rNO wn'qI}SOZo;S@@Ng@a=@5aL'Q%`⺏菶&"m9V ,Pc[vI]1] g1΄@8_+7sݙN@ XqG폯wnFXZIh׀O}k$0Rc; ?i ƈp#c (%3&-:u8Ц4BI EaQt$0Q \w^SgH # uGDBW6I}6OE ]S(Kڅw2JVR]J}+q/IENDB`ic04ARGB$UGwxxzxQxwxwxwxwxwxwxwxwxwwv.ԂÍւʷ؁ֻͮĚ ܯګ \M۫ w*ݮ )O߰ N (ఁ w.5Fᲁ v㲁 䲁 崁 嶏ԂÍւʷ؁ֻͮĚ Iګ όa۫ ߍmckݮ dj߰ oఁ |.ᲁ E㲁 䲁 崁 嶏ԂÍւʷ؁ֻͮĚ Iګ όa۫ ߍmckݮ dj߰ oఁ |.ᲁ E㲁 䲁 崁 嶏ic14VPNG  IHDRxsRGBDeXIfMM*i @IDATx콉#ɑ*k&5?) GPsH"d/յ~qQdb1?akĵpع{xvj tߪf:GD`ۮ B( B(G(?Q(^m,_S[@T!PSP ;Z8h@ EpTxd0/?Tm@7;ݔR-`!ue`0oluS P@H#"!}۝ی@KmŦMo2Z*M0l߁3kӑ֧ӹ!p@pMN O)`l8e $L9Zݬ˕, LP#[WԨ l:eo ڥ2ipF\!A;lSl 9wx$͞\WqO(#m5Н;iOM[Zgi=Һ.˓Wt&Ygنypyouk]@P?@QtN5y [ʜ/H;u% mAqŽC^uy֡HoeOK'/z$+iTM#P% MG%w=o SG:.n4 Ni7jKijϤepN !yZv#$ hq?3tj6R CQ @` tMV8g"wCem̒SB` a8&|oye PG2DuG 3 pMY|rӧ{WWW] XR'i],2`B`َW?Ү-ή𧧧tH׋^[.p R!e>ipQd =/^o~ᇃgϞ]^^!w [7wrL9&Vv `bfVďӧO?TR!ƳЇN6g1[oG'x!g 鋉]i% MA#ñyqqAqܙr8Ʌ*ԈI5ۤoC^p($o!>l4YYt"Ãϟ?}3݀ }5;&NF!v{$%a;9^$xC?G.K¤e-ZIjUV}]&zǑY>:1chÇ'?~<ſ{_~Aލ02Q?q;s"@7gɤsxd/oۧ2{;88F+>SúMh4dv}p@4}@f^0\V _32pc{g|?#'%ؓ!p2l7lPahkQn(̉kqdq_{_Y)t @) W<t9_ڢu 1a&4](3,r#oy?z%cZig*7F@_+qi.# ੟M@ ɳwC$%F@xA S<ӗi,V%+:)u6z??ꌀ#?+ρ Qx$I7IDS~G9b(]mOTX5>#&>ibZD7{{{*IUp+R ђ ;1\Xy5}u|z5\#sg/r*~7-۷o_K5 ukPRF)psj ڛA7gJ/ESg+!A }O0 d#OTw}_'''#F <󨀟mFzF2DF /?]a_+u!\!Ṕ@K9ùL;#Wn~&#`O^ZE_i=7z1쁝~`;ܬOHeKe+70MCFZBDsU&zF0h:ै?ϴ^`pGn=6r,#`W1X%\Fu&!ic F0x׍'^{M\!d7';_D=/D;Z YS?~V Yk>kf`Wo y O6-_ "oӲtIr< OpLjE B`&&yg$/x55]Uo޿F h*7 صuK7E۹3peC;d!hlC2o]7OH#]~&Ss }0"aߓ{g^ЀsĚ ,T(D8 熠>Lr  ퟕd&p]hy, 0Ϗ|.`W TiNk 0Zv49 @&s9 G` xs11BJZ GOǑgGYCZQSO'Mh 5Z,x_1cҧs8~ƪ\!50g\<a_sRl!P̏y#~!]Ki੦^kQ_u$J߰OS2L}WYO!_F<(A: ;p+'_c^3ҍCjjL!R:OLxOSxZY H?~ Pn=@8t 8Cy"@Àg/M^SݨB|#r=FQk<FXw20dxF;"8\ ?$e|A%zR7t'f*":L~xlӎǍ^e(|܇EO~Z A?tz5>uX@[(:\78#!P0+t'TX Gv$~Ke ^eo&@oo~;|Mh:͟gF kiGա; $G~@a;gLLR B`@8}&ȖH^S5 xI>'J??@Suk KеTXeFF9'H(N]c( 'F^xz˶BwY+Cű0@42^QN>;?RoY:Lv&H\ 4ܧJ$b9_k&9G^G_3zxe_[zSX3')Q ?M*7ovOKC CkcsUΪ @BDkuNz(c=2{Jk=qCfv_#lZoo# o0(:9+ Pԟ22b^8e Cj.tnf g*YL֙:Aڻ9N{t}uHbљ=$Sݚ ~&5Z>}EAm>0ug)wBVVBp_nv)-VB`0;l>$e?Q&{iV:1D=u> Ph\扝r'K9nD:ʅSj$`\(eU$@z +XXw g;ۣs~Ek?ZOdĚ/_ƚ?T5Z$x>ݚOƩ?;FȈTA(Y\Jq#鯲@!5tDU=:itDn<Փw_\km ? [ŖOt2QWwZBpz;?qs}(@b&Y2WK9{^ivgGžX)};}/p*C<Ӆ7 |6't*[e6cύUUB+{neА? 0mȱ5#ȱO~+ dM{=@ h9|Hk: RA a,N iRl8@S6{AU, X|+Kw O'M|#3jMQ-gWA.bvРsZGc#yZ:Cu22Gs9;i޽>$7 (h2B}逌J@wYނ, aZbv=5xn[I q$:P7]v ԔU)k]ZзO@{ (:v}2K}Ѝk@!02f4GO8 P+Fg}äv/{4@?etm!-j<9OÀ43}.X [_0Hw \!P|=NTH$ÖqH1i1Ҝt`'ZBk2N&}ɞğsވOe3(`&Dw0t[-($ !gIZ&i҆zlnae@%^3  oiKa?(}L&p 6BJu2nc7TƕGXuL[?w[ʴz ra~6L(s}$>ZI~Oj& яY PWPnnX wZ!Ϻ0DmNt~uyvE, i hQɟjZgdM3O5`K"P@/,, FR#۾~ad'Lp&#@ P L ho޼5nsB ѩeLQBX L&{04?.' ox4 gtUP@nZ50+'2 5 8ÉY{[|Ʀ4eԥЋoz}}gM? |6T ߺ\O|>5X@} +`Pɷ#&~ OX "@!@qՑnO!G}#t\[_.W9^ dJ ZPnY?iqs};୦~_5m's0ۙ20}/#ȕ  (V7/VGշɼ cPt?a0zW0SH6 Z' ?k n l9=m:22[.`/:B`xM##nÖsZ.Cz۸q}s2נ JO _kӁ5[LiˀXR9q:n CUB`n ;σCN}6LrM,>꺙 ]{*k[_3e{1yw6|`x4z`4J1( uFq;uMH(\ I `q x2N5߿gMnMoHR^peP8 G`el/6dlrFⳎ:m0 mZC{]i ^e>횀peo4`j~\B[V:B`3t["gЯn$<+mG"I S& =AMm>#y\ #@b~Xs΍\!Ṗy^=1?Symx-@[G [> di]6&2l}F/# #2aD .Qp[;D΃>Wu@ȧϞ=6ߟj+g'3z-d>T`B{({YFD,Л!PN!P,x6yk6y婯s(dˢ'xWx>p2v"!#VYWF@@?ely,6pѷOqC&zEu}qNҹ'@/&|7@5<&9NC:-P\I7 2|@]Zf =]vO7bַqv!}nwy]];nH~mjVyD) ~Y~ߜQVkkݯ͚yпFH>珺WM|m#Celi*6HD<OCn'7g?!zڶ]_%kiP 5k >iCFOձ*|m=aq(WAڴ4kGܦù}s}qİvb`l@Qg,縑}Fqs8F&Wl(`IgLKjfeXm> yZg-K:SkSuy0a$zi+ջ+|ͱoG5>|wM@l@Ⱦ 'D Y ޵c~kdw}LV_:vh8YFySȆ26DaۀIqƁ8iru#ɟB[o4zsYG5 `R p&@8 o 4d0Бz"Pzu!@e+3 ,s8"~a$><#:nF8FgWeYA ?>&ӧOgRId>e``Pm@ 5?~MuUBEԗ]C ٻ4C-±&@y ~h xGj( 4ƿ܄R0h~بYSFƙ&Mɤ˸>?H9_/oS;ܯ)o>W~S}4kȯ)ȼ%YqCo#apXcWz!P,k&n8o  CIצ iBilL_Xp%L+h7oȀ$zECkTtBv# 5dLfP׬'\'~V_BgkXE P8@>>v ;CNi} ȨQ 9Y\-mwH̵4zfB%SX0$!K}5ZX c><.HzFcdkt@!YC#&zh[=q9F( /4%pZ 59zI;7OyH^4C u5pS? B><Ӭ9y:GS]=^E: Y i 8ZK:DYPFYAYNʐuBxLCMt|oVq- Czh zM9@:ǧ- tQw\xK:ٳ_R3kS-X{<)Dx |ew?x!e%fӳp& H10ҷNZ"9?q 'gMe鉫nۄD-S_G9}ڷ.}ɤԕGn}%m.#qu킏s^|yo'*i 2H'N}ǎg/ , j3T-tⴏr\6 (;Dq< kQH8ךi Y^Q2y~teeI.!0DS3ޮ[O=9&>Dy6reUre٨\@ x&Ygteg\y8:psQikw>ϻz.ީ<իWZ ^f %zD9#,j$<,f B@Cd7-mVKԙ=ueƝ֧ks@$]Nǐ) +RZ>Z 50mM@n>M/;`0AW@!p Q-KjCgG,2%<ôkPp7uOA tk>+K'`}F29Gee<07r@!p7wZ]K94!w<ۡOSƞy|]Wn3' ҏqvΕJ87w&6yTHr7s^҉Ю F+ E@<;wmz='ó嫁 +5ovך0I[2 E9N@x`W^"`򵜧7%9ܶ<;auex+GgF~}X\k&;rCnܬ|<0Fae< J!P\V<쬼mH aO4kRVƝ_kT>JYY+p͔ [n?>ywy 0ʕPHe;A|e5U|I|Q/UZ|27^/[ä٣k]r|OQ <"5ZxOO'|;}p;@~L&氧`P`WS@!8OoLieG[YNo$oSOv~bM_j Ipo|Ыa!v:m :F1@$Yj BZbx(V I9:6| 8$L쨽 ַ={|>}z1awmӑqHTe)`9V@!"tUt(G.}Isؒ:&_U?v$-ݎڌ0Mp$}O@&~M81[FaW_h"wC ᵰܺV&VmnxsFyrk'e&~ )ÝIĜٹ 8UpفYku9O W@!~|9PVdVl dI%ӌڱ6-oFx;` /^<њ5juee<D!P'xG낔s<ן3R]KmZ|{Zk~WWx`_kbnM@߷2&n,gԡx@BX? (בp(n#z3S=T%A t'''g2XpֵCr2! >Cr賌j_Sc5u9Vñ}[⢽V7sw4=ҤH+c~Y|gvtyw>tuO`ý wucPU0eU{^pia} ]\; @L6N_F];>. B`%Lh[mi2H''ݑGmHC>*0#˵[]; 5$)gvN'q͚Xme}zǟc* ,Ds&vۘ,USR B`L#iiC}0Y[:$Cӱt:#w,spp+y1rHW6S@30Hܕ(2`=0 ´FnrL^ ** B`9@r&EKZ"5: l SR_9/e\_.ۆ2[r?w>r} I7-@i<_ˁc.4Rptf`8dzte,uBB`UhYd$%yr[:b`Xs\irNw~ڷer/,鮋~q\oM|$]fttzu2,;lZf=:맅]&7Ҩ4Stǯ";*ë'@S%Oo޼'o}l D=:SnnXĕ9=}'lxaKѻ46& }y[i~ZiD7;VlL,p^bA1J 0gU$ec ;V B`= s$ICibq!|>Q U\rz|L2&?RXtN B %sk7׺YtsEHh=O&Ҝz ˁ8e>?cMIjMD9$1FlX8kWFQ,`UBX/ -;}ޤH-v'(ͲM#[.>yr3 @ *5WO ޠ_Xg'!#22ӇZ:S\SB :2E資 A|6Lβ9҆\Nsx=:pxC{KΣvxM-ʫ+;`k5tnLVHZh`$eRe) Creنy2t=&}$w8h?-۞?18ֻrzXLy$5x K\*Dݭ ><)˛/Q-# .SCeLguZά`O Şa dD1؍C9O󺎻JrGAzڡϐ?"Eܘ\ PQб0X3ҵ`_5%/8 ͐<~g!P,*(ɮ# 9?:=CH8‘e$sGA[YpxM!-uumok˗ 5o;IQEn@AТ5/`R `2Cf3i-9r[汾OF9huY4rzgߧ9L^ D d&@+M# Py%Oi*tH;䩀 iv6 / P@HE B`pH{*M^&zLM~Nwz. 9i.;<$ϴ|Ny/L?}Ɗ|.Fl"_;< >Z }LFW;+=HY_>}tW&KZF@[!dGl#LH`T(VDŽS#ϤER+7y,KxĞsmNs}exw>׃,p9ƙmj#ǫ|N \ƚ 貧.hVPI6Wy\_m/ܐC>Ȣ/"}aYca~kv TR]p;HS(Cw.U2QkD"\&"MRH?L[o㴉.ˈ8_ORҭ%/,]N'<=i6qKsw0^ȳ'OHSKtYo߾m $n7\72 (rEn qpH#$i}:9(O>~HRP.7-Ӳl㠭1x+_ɳOF/Ͽ,8~},Tn0!ޕr& v8 CFYIoiB0ڸy>aW.uZ[eyI'7륃Yx (k>)̚FDl|7XqLc@66KUd} >TJWkbuda |9<9LIZoB9_6OV%e̺vМt9}(L߆\;_9JFgǁdAZKB>}:_HJo WoO^=t}e_\>-YaI鮓xs1 #?36@i,8~'xU0NMC B+5?vѻݕ@{#!m:I~{F:e({~ImY>Msm/i+Yqgo]4pܰc Ggaxk/4p46 "G-{E#~s#P &!8CeRF̞L;%֑?6!ӑYp>o|VaK-!v87!v +Z0S_׏Jc@?>F'!|R\ iD@m~ej)Wq6LɔqyƇ y9"s޲MCߥuzb2 JłZp>p&x BG u\ :h:k ]u4d?癖%~LoCg9oHrY:[IamZOl΁?dLCaW [ Dn>&:ҝezǑ}ކm9>-N\>ɓ9aKA\a( g3?˾Q`2( Di 4-;rYp6%g獷xVtg_OH'AȄ?]tZ6((`++UOw+)6xꢯ?|Yf2;9__T}k}}}mh62mqvNWǓIgo%' އ@ﰥl,`ɧ\U_l 29d}&u뇀t=C_z{HWǢumm<'l0XK&,]I2jw+(䴋y U! P;eR :ug"}ì:r}9|rvf?+:xoF2)sڗ F4v:# /BC\ m*+ [C@߄g-+_V{c\TiWmA}#&V!qXi}F@R@s 2W3߹2-GȮ/ʒ.ӗumqr,Ֆ?yJ w:- .@IDAT\0Ėز^[l# k^wUd8ԟEwVmcumȳ!`]txCՆ@}E B`0a$7DmUd; Kd~d߆i47M| P(6@r SqSF&!Ivpm8 -9n[C"0O"7=\.?"9}jm?`0R( BA`]^.?:>s0L@@!PdJb~uu0A<_Fg''SKL2JchOnvOM쉏(MD  ʳU2twC2c89>}9=e1`C @l wK_g2gZ"P\B~[%*;!KE3Ǐc?6zpa0$Ϟ> qԀ<k>*jϬ)ԤU_۟yQ[\*Zyz߅̼>ďdDoLsyh#2 =>:xƿz5:P2 )ZO},rxh#c58,@XUO!@kӛ7?<$믣+W@;6334?/{bw$vLo c!d 0[1CO_WKo5PB@+L~/TF.%!kܵ +䎈~7h_ 4Fv$(7%@=eP#_ ` cR͔+ ; P'0[7y<@y)bgO O?޾'_ϓ;׷|68@"w¾"z\Ș8!.LaPvBYN#\(C ps.߬\ g w?Ұ?OA2xː8u _JE\h*D?tW?q2,1 kH>v?Oߗ?O&~<#@j@Hw:4"c(8T@l,8hyg+Yl;elPǿeOIBUxOs&~$=`H _*%hjRO"sp.? `a$C=PO!P̅@sT B#WDc#"xGM&&"li8^&@kB"ׯc=&8ȝ<@W#C3(`&D뙡n۶cr4*#z> 1󮾟$4H<x,Fc/P?ȟd~K9RnW'>[Y5=__ʟٗ g P8&nߒQB@ )E!<zg &#B+Oa!Hl@ 6O=|[ ?F/I| Ul7gIzPF al*8 IЍ@[Y+&qx*C&p؈ElȟQ |r@?eMm=9B  )o=z9MFy1 E}4D=O';˻ y ݵ.}zh9cxk{?!0wD)f rboJq9&_=pʸ5ʕ[?fwD2VT "uN30ۼCuf? 'BMw<]B埯2qP+•50<+ ? Ϭ/p?udN^ێ@X+`ݭu^ޙge=_c]gcOve͑:;e,۪XYnB7`q`#GOg#<}FDeGN`0u@ԟ[rpi:;ge,q}pn\`QdBqcO\$"[!`wOS:H:A6i_q jR^|`G_ѧwf @T|#MЦ5?aX2[1 `L@!uu]z U@>RU ώ8$p?i ;> ֓FNTɩuDZ1vn?k@òj* _d~ޑHX_ ߏ6=}y\~^9\{~f_t.ܖؖ3]ǹ1p3gs>}DODC x/;:/h 69?Q]O=p|t*^['}V0 wއ;'~Ʈ&>ɉxELWFƳ^ǼIW̊}usCP'c#$e=r`Q Sy*DOɳ4 ve@P@eB4.\H?S¼TP?#?'[>絎 B6eƤ4J"`G2p?w ~znbH"cLl#Il d` cd*L~"?¾K^>H gkDPp|PO3FL4p[ tL`0ɪ =((?D1dD\Y'["yڗf?&>IC:G>\im?ܔؔ3YDZQļg^O97"7"_%jB"3B=&vG}c=ʞll '=W{vю.R.UL+ODg?ZujZ K,7@~{~#jy!jSHZ:Ezrߓ|:!3 (a H#!P?F #&lCIbIƵD,ٖuY((G9kaLBtGzbe"R$y;"#G4 h'j1i?m\m3"f_/⏮X /VɿPOt=3@7.^y0(Py)uM3F&ya_WN&)sMǒ>?vE` u ga~]"sط_3Vy>+o/4"d}`Qa8_"c^SŒ`L0@EHFK0,)Һ+y\ι)`9V !~vc~?($H·dϐ]ɟ"e1 oVC҇O5"΁|+тG}gtTO01F>9!M?P u}ᬻ:#N@ųj+"YtOle~jx}"?N9e/EprFkd4 P>vCFqk$`<A]8U#? i \&weg]G`9_{#(ﻀtЕX} dO I!}v4elo`0@ |0 %!PMr MTkD^tﻡ~B!tat$/OC71ywXvusl`"YPs3`d$]"V-U\!P@ Uv#D$B{sΗNOlG==y?G{%>?/}R|.1UIQh?]^ă?ī~".7@<@ky+;g''<նP]z??NvƪKA~ Cge)Cz7"I[Y_ ?_e,jaB?y|y||GO~G*yE~&G?t Ņ!L8>q ?a{ʥ*zԋ{p$aLzǑ8F*ʭe,|FOHy~=^>2Ft<ՎIs;\Wzh@tWimH?e1<dޟi )vF|:$6LYl_<{ۄ@+zWp|cz&M }>a` }DD3?d'i8Zl=[bBwNLƘc⧯=G72lwC{SdsLe@?IHDޯrbM4I_sP~YnV|.޶?nmϲoxz||';uO{zgxLqF.!}>}$|"dx }{#?O8WngA 58`0yc Dm xrkUe|}yd{=(c Sտ"(!Zix=Q#P\Jd>'/F/_%40~GgԺׅ}#p? G'F 2;ǐ}7^w| rHXH/ s8@3DBG;`?q .P;kp(LuA&ven^H?]>p,/1Cu+CxLж| Cg?_enԹ<[1AtJG#Lq>//b&&TS-1h D`o"t_!:PyOO)s1#.ݻ\w! foi_v{6Q6=f݀Y|?E"__i`G'#{w] C<9Su^*OѵKv HB6yGX}g~U~ b!+>{'֏}.,UW ,?0w®mEɟڒdo6@ȧg*FI%/]6X r MsxAjFXY r?nuEw#?h$)_xyb?t$;BȚ7!-E8!P:Ćde,e/26h<5d1sWC'H%0D12<9:+zQg@_k" 'F$xƵ 1}Eer@B &}P*?OGi0s&7|ȉp'/ #t]`BS GӇx½dn3đ^l]b_3H^y0bX|+*;€AX&'LEx*\qFe&ia7Bxfom/#gǴ*>ė̻=>1/C&y n?2_#y`Z@ŅRt4$_tE'Pٍv!i[h,#1Ba IwCYc@,U -=XWF,4+y YпL}aKۂ@kzM4a]hH @a<9sp!":§K2VtT0nb3lwtc#֍hJ w/ /ꈕVqq|1Sx T}c'F0Rg*@+0=Lj/x&]&% d^7*$sTIAiB_Iқ}5"3yMJGpܨk]{G.xr&.C3a)  Υ|ٕ{H,MQ>}ԧ't^pݴ<y,m/V2V,Kip4ȿ/TUk@+zV餣@Da[I: Q@;nsӇ=eAoX2HW \GAeBi"kHJy1A3sC{Gx-PFZ Ʃ}ߧ{c^kϲL<ץ2LJ?u7Wtے9K]G]D uC1'Zb@F?0V*?}lO',\a0.'y K@ p>Gd GOy8T<^U8LK-y{dGE2q6k͹[,e,ͭ-LZy/l `CXk|^cWk n «8v2[!CZ˄.?w)1S-3ǎa<<%.m <LJt Cdq hPf9 ٵB&;)0š^=(`WXo]u;n&{.20!u:z { =tq,%(13 `yT0#LY 8>V7_ 6"ӛlkn>Ե@Fpu&~?q&kc@$)1 w= T5xq8L` ؟XmnGRo>&- =t]4m{o(;!`₨2m]ܸ!lp!7铗wIx,h]j5mqh; ()3n+X;@D{IkTɖqoe3odE:)"sA$ á>Hj7e ;f@ m|O"-#DQ?`]|# ň@y(:ri,/Zxi(cHf<ާ"p'm_kw䫼 ]ș וK5LQeeҦ [F)L$,x~'6zl)xAeOƖ3P. "1p @_ΗadV(  J$#+viv4yhqϺpkZ\E- MI[ dnC=FmX@>+ 8Ds1  Tv\fǯH߼%ϊ/Hp̕>#1?8-ߣ,g(-P؄2&;@W&mqVgSVz&o:2 DL/r;J_Z_["p6EGUm*`&xEp[NCneH0č,9!xgAvWbc +7)o}K㿌c?,ſiq-O:X}ϧ5-}dC}ISQ qS`' ݇}7{z 6{mi?j.{<|>,*.ŭ>3obUT*hCUd/}R((W[.ghU|g0 47.K XM)ɟ2&.AbAZHZ iy9.κ]A*獯*r Y^m7?n}˺slc8*^Ԡ76JW@NuRBY`dG潤ɟU_zY9g&H~p};QE?+jSHdw@#7y2Oa r y#}_ =NSt%ݏ?&i.M)m*WsBz?h~?W <08 䌣8x~I_S,["8^xZ3Qppxv HWPqnlc*)  t|((j@ֆ3澘?1SAϏ G7+Zؕ@/IDZh@2*t8py?:{@}qB4@KNWr4ǟ4x!s~S/ psu /Y\ۿ-nykDvvN$[!eu :kVr>:8W>|Q#bl?K>B'8*)k  L[sڲ#ʘo~ Ͱ u޲Ͽ])]q~jne[.vJ_~}Z܈powdҎIo6vmj8ɷ(+X-?y79S %@.4@YpV~桔Cr낮 SKuʍv׌ 'N|8AKNq!PE~/;˶dyw@9sY d =Ӫ=w7@X:;JU?/Oq.9,}Ru^E/Q[(2UT{JB~;@dJҦ旒y9p?|k't:k( :ZQsZeM4;V#<ċD/۱bMUe%ĸUʘ*^xGxy;qh۞_t3W w++v@}*a(9*\6J@p=ң H;\WxJ1dhonJXGR6:7F}cU6NcDZYY?Uo @oa\P *6QXڡ~_x!mP ~o pIF; P>aW$Lj_v v"uE &5MdY?Җ1>ٜ o~yrGSdnwn<)9c@\\កfg8Ͽ>=vtXGsJgg|@Y!e{M^cr^QĘG/`' &L@Pa<.<70x|CDMg- ;13~鸩K ] T>4]ѭV?}o3ʌW 6E>):Yf>Ecc1E$q=t8<^NC+ ir ӝ'pDxOk5 x|'u# sLhz$\R 1!tI5o*/ѷQo]DtN:Ym Oc $G(Jĥh6h. y1ЕA2^pxoxL>ʕ,\-Ps=rO{ML/ %AS?o z,ɗsDm%y|Бe.( 7?lEcDhy`1%vpn|5yceReky. D@?S7]Qt.C,]PIUqty0cqDޫ_*ƛ#x9@S#ز(`vO1LF+}d$ТI ހ3&Z@Ur>s_/zaB7 .D)^Pծ8N0ȁ`b'6ೌ<4b~) ޟB. ?]yz.<T~"|@IDATuYuMs=uP;6 DounpTʹm㘰 @y Hk.;Pœcڦ}ӷڛd/Be9/0?&O y1Vꎿp'p \p&ak9g9BJ^zgJuL^q8BU_q$sNv.C@sd2ci{NS/jx@uzJϜ6oJ]Pt{8M8ToD/3܌ʻ$`P>*r>o Z :>@9i c*qnyMl R ).w;#v>Kƛޘԇ;Y>& (}j Nx@o]@ȱ)yd5 syS끶"dYNY,o (a3. x9`GU9qvb8@?=s Fz_y9Ŵɏ~S2r* /9^KNĊN !m=QXAA'@:E7E|OGCNorr^}ˁYcuM'}\ J3OvZth 1H?oVGv.2g9 oOYX#=O={"\΃w\Π7i2ΔVyzrBkGO`?tXGMDrW @[J~9)\yNr׳jmGdYA7pvpWoE@[ >glj>s"?~}Q_q{C¶DZ=u{S!6x ux Gy12I {9ɉ)VZN]^ot~b'=\/eƢ8/. ;nXr.z)pܼ 7#qCs.Op @+'x7OT@3Ɣf S4Z?e,P F} *=az2:3mÄʔJ'ѣc.3dt,l^V&&uM>2t&<;^F:vYSBCs<喑[|ɱOuQ6=aG [ߌGJ\p8M=.X 4B>sCeF3=+qg;ffڗ8Oyߓ'/{=;%ZztO՟';T18|"/3ܻ!q(T?|3)mU~X,5D=>hL'@{:tIW v/jm0H{ /DϘ,zR.Sp]ӫ}SdYuN1]Gٷ5ɡ.79җxCj O8t|7KƢ,'̮1zLY,0Қ#^$`Ls^L*r8MvJ2QP[iYvM>z`rJFK|a'\rSA^]ˏFa+S gbe] ?|"8V8|(]6EpPx7auoYѲs@9Hy?=x]Oy X8hg\9 `缱tس@Wx4l&Yv#DCvp;y$; N|{|.T*sfSx&(@'1A2D@Dmvd^t){}>zA7+ohVч,ni|*1Cq#e2I[Q.˶M|8q5ݤri'6ߧI\^,8 Fc-x:B^ 1<&MRRear&>N=Ծ։!{bՄ׈YS>g -n*K\Np@Bz4ć3C6r:Mz(Ч-rKCyܧF|7i? 6xSiS\webrf8RL mbK%4O `_~ S*כ镶5!d~n`( PMjl}kvw,rhno?j ̢/D ( s5*6?)[,,Ps:ZzQ'yoN=S>1&"M;o;@yw@ah6s`YQ D}uc@Vι ,S ǁjgZN 댹`O37QU( 2X _,,Ps8J/wNAl+i l\9{ ss=Ӝl ͼp4ܪ\k:`;KS.cN2y<#'}3سe@gÕ(9L:z$ A쉛vh=1T{tz]5g^?׷W3`'ҎV+KQx=0۸NI[}`tq\>w?1[i_f42oّRzM!p?j/9@8d50{<6hA|4T?6}*drv2Syr'D Qr^sL'$z4Xkl?qVصodQivx B;'<}.yd =UtڣR'~=wzЅ⹜. po&|/f(@ގ5!vݾ|O8h_2D/k-gۨo Pp&YR s]hЏ)/ 8],/\gt(`:[=-'˼OOgy }BejUփr.O>&'YOߞ?A7>ݗwzS9a2i8&]3M9y50<h[MoY?F&xF[i-P@oJ,p\;<"*-+?=DO~r|.g~_.]2ih.kdBz:s'@7{_otDp"a|*3?^\=/ndO?rD5%,8~Y?\fQi)ecmݾCgFY&>x$]NEysnSަ횇J}Q. َ2GF{ Hrr)C7eK #s+ V r`]5S; 98?Sxvƺ:ntLϘQץ\.+k8;7V( 9n.?@?ߖ;EOmr=9ҚY 4@C \N/suaSX]ˏL&:^>L鸑S6#-|D?7(;{86?O o: =x܇e},P>֪Z O -Z~v'`lWF苩ÊwpsP~۸<_\n˹^KuQte|`=> ?㏉^e٧2;s%?(eyxB/s:2ec@9Ot$=)}JV*E p+nc{2q@r^sGpI@rJZa>L}Ty/ڶ(z77]7g8t{s5.Gsg>?|yvŭ)QCd*S|9/CA4eB/wzJ>6sŽb>׸SrS"i<}OF8~4'Q 4|YHw30v[o߾߼MXGɽWCqc8=PuYb]iK亮Yk_~S>ixJc)>v+ (PMG`9r}Gt?<ւUz 8//\]->5C,>Ҁw `Rx3DY7Oe{>d}t;< 2a@: U `/҄Pr2Q )%opD.U7;B|3". 4{ƹ`H}PDՏkDq2=չ)+@93?̸m]!grg;8o#хVSOlSrL+NN,' _l2k^  BT/99e<1d}>M=dgj1R?uVG1d-} Oz=炢 rq.v}pM@Dv>ˁ}^Ǹ4!mor>r?}/NkQk0u'۾Pp_e u!C~ ّN.'v >x*W?Y ѫU2&Z'm+֧~<{n6Ww̏~L>RO|ЋI^ Ny\+&է %}hG  ,t6־A*/eG-2f;_PṼ̬6Q ~%`U>^x6h?>Q-1x=*-ųk/(:';P@EL1׾}O x" @83Kx-;9o I+VjzҠ>nco~ es`R㷯#g=g-T|Un8l؜cA:"M+x$ +~=^yCe8!C"z¥'8{=c>s/j;W4̀s:]֎@.vݰK,P|-{Z  8i-' j~?ΰq'2~whs=[C"3-OYY\>Ɍcj\1O2"s~q 8i:WC׏ N@uP8^㑁 _ĎgE. $qCݔo~>@9#9pyh;VV* 0Iibׄ{DM}? Oˮ }#v1?B@?Ƅk匟/4qkz8~^v8JG-`T<."|l_EC%()b;SwG9Vԇ268|)0t~Sƈxk > B8'HSSLOA?;E\$htLy9mQ;FK a&V>&֟|bpJ7 +fT@xzC*߰כV.'Hp`/Xt=B!8hon<\ ոDNݾ&?8HC,Gc`*m}p Coo߾\|E4j}/?wK}x  &@MxP7]I/:220<&pDKeWTDOx5`e> gdu[!xb'6E_ zgFNjC|W'oH#J}R'lo\uFGCO+k>(j# vy`8\*7MY7ZO(^jo,D'6;k8WT{鉖?i?|X}N_HE&M Zs{E g23Qһ87wQc؍*`Uuѷ_u?9ú "[s&-&y Vc^u<U |y92c CO6[ Plxȟ֯M[]}i :acÑ^hi,eўD8`HZ Far~Ѫ~1vqÉG |q?t_ky݂Q#.W Pc*{P 䉎[mR8M:PvqH@E%+"Ph1E2V|c`co9C[;F'SvSchO}&0~(^v;֑/0> spDṋNIE>Kn \@SyA<#™WkrhG{c+'@ƒ-PMWaO~yZ 5w+M֬ ^Y0N dLE%mlQB5G Y" nu=CؑDn.wHm$죱}o':(\Αa׮.6PHq61Mv&'~svT?_ ;ny,п7鉾 Ot r'@c9M('`ioIj7q%s[<|J;=2Nx 'o;$<3} ]LʏI^e%"E GL>^=.\t Jx;)8Ya?9*kl=8 X֟8[CTu~@9?drIgנɏq6Os ^iͫLhG}Ҍ^IՀPl yb]6R݂$ >d:D;sVex<"/ouC;28].5pV;S9t|vs~?8.r'S_t'[W~`.1sICU( l@9[ Zt׾FCB<W`ѤL&ʦxV_6<\ӵ 2J qQUv|tI4. h4nD0f8|/0~/%t4TGbV&]9 G 7'8*oT%6 nE!ڍ E}"[l C{P@9cV@V1P xh@KDXQ]T mQ~4:EΌq*8Dx{pU#xmy >X>$s3N4]V~sm@[X: 2G.?g;rn/t~&ޝ!V JkaA)Hw/Y*oT@gQhe#3n$f<I xӽ'V܎@?8li^%D$; ꇷ{n /^鯣> ,|?#ߗ[yxGɂ7 LyE*q=U~lk\{/_ubBN@4'rSL '_ 9Q88` :|O@}zyyq^e/=jfɛ R6tL;XHn@] ~?u=Z]Y\7"& o4S΃8_c}@K?FT܈#`'os>Q;T( (ȑϭYr $0dNq.og@8L+=u>upǛZ,`[8n:A11(9XyxhF>|#D )i"|"m%B/szʊ/4C9Y0G0sD^tr^}Y$୉>&WDM * b 4Ħ'V0|^@WLxq9Q=OdS{ڊ Yvi7BY]@iǹ>qF9-7UC`X:LVc6tX4' &m55k8W+~M%3X_JP[}[.) ̿|I-lShr}o|%Ît:w]|4㵿:'ntiJ@.]P)UXVϋ7?-NB+9 >K:u^z-P=zPvx=0$5:&⸾+K nRowof ;1Yvk _]V}-64p7CI5@7 88_XG|Pq}0$#-3g7'D]OT;Le>G|0({QH{z c/g׿.\p)/Զ8Fѝ ~Sf7LR;j3TxW<#4),PIwቱ:DYZC?@q8c(}QVO7{&(\v@yHc2-F-GO 9YEGՉQKa]>i_ &SxCKL7׊qv@/;xOs+#utx;N=mhh.zKRyj'$1h:Zn;8/Z߾W,PnvRG`~R\qglBlo:|hij"cڠ%񲌨WqO9Ÿj_1n$9xeh| ^CqM3ǟ2t`Gcʪ>-q@Z+~V;?7 ~Qx+%](8Y0t`?"+_m9f<}|e<֢er96aժ ع5YͲ ;U{X`Ys3v +Ed2?Z*9BxⰄ( ;BF]U|8EJSkq_%i?䵨1}A܆ m gϽ<ns?CY@~nqQ3Xq"Ŧ:ַnO+zeI :m~Uo-Y?k%]+rޫ(_|Ue]붊?jf@M~/d*s/q܎L#+sQ;؊-}޶.A[ RtxB:L7֑ˌ[]:o,z H+p%^GPwZy||$sOzxS$5v8ǰt ous>P-Œ4c/ZuLd_Y\?'^.@9 Z|@xbLχbժD翿2Ik7M37o%`'G u(O8* MfgvO |V7I48YR:] QqaH2 psΙY5\ж{xoIj62.},iVL¬mO~9c;!Lw!`L_I{G]+*3J;ۑp*=Pw~5(x!Z]ig7Q[r%7g>XK1մYj}Ҭ2^W?W Îd|Ѩ2eiߧ[e `'m>u@9O3?8LvQj`yq\y1?ac+K9@?az"V?[_O.oxZF2 Q-|Mm~t7?5! CA*[px;Pe둓*Sr#OpPФ ET?v^WV % ] &x|\Og:> דdeR˜yeNCiN(##M c2fu3leb  ݓ/4G=@Cl!' s9 oTL|<-=>mРoiq'Q|?m3М66o H\߅O-B3\so|8+א5Ά V<ڃ6҄L]]ҹyӾ>rBn12y9yNv9r1YFxtB]f8[/U|Y((z5o8_|UN}^|M?.K@9*T|?7y=n"h@\tȽrw'p:b1`j`>@|=?ڑ|4ly{:i7yr/S?:uyn6u<S;}rSgn,P:|?l\gV?ZNߋ[ɸ럕ky9|#+{+Ey J_7Q# p9@e:6źLê\27-}g06UT+Mܔ%/1%ܗ.kߧ{pvzr26zio:Ce3 p CVد Vk~?oDpk;R`oP΃8c,PL})™Zs] yIOZNoN.Z@9cV9B'vh=c}^J_= ]PTh_iàx x"[!Pc|uOxw|%ixoxޡJ>]f)Q'3OyMI[ik:JM7ӉܡI# o9@ .27FݦH;"3o'y91]ӽcӷ8^{r^pg|⣶hV4'+1W噊]xOPvxS^ċ.p{.tI'n5_:#~Lʭ5|%⡌cxǾv@ȋiܦt3oj9Xe=P;Ey^Ѳ(`_UI-g MINBZ0(ez5;=.ǂ. o'8rxǀ) A=}tEJC:~+<ƣ4刮?eؕMi癆 ]}p4 JX+e^Go]>\s3sҚ3F刊v5]v+c e'@8H;8r.lKNX{ hD yA&ua 9' ʪ&enR=?τ̶=nm|=q%V[1 /'@C~[v9A[&)>]4u9:v{N[_D7kݙHӛt?<_1i?վ^?|ZT겪)0.;)k40Ϙ xsYk6s|O}XzL3oYOוˑ^ ֵCDink@;.׷h#ur&}XںoFַʟLcH 0~?Q'LZ{\oG\BЏU?i @]襍R-~揕ڶdB\q X>ue-7uN"7oew&)/!˼˲'},!}BfgYu//,bU~Z 4e ho7-0Vjޚ^2ȡ\w]E@pb_ s4T7ebR"5ˍc2˘Noֳ+E8\a g>Ae}e)-P֜Ps&os m6ts̀ L日zsYǥ~5O`7gyt?^Nd9yC s^_6*˲mm>}ئ?rYt.XW_X}bCC[a__OIG[Z ɏWrݟw/y֑yeLj򨣲]#esz̔{jQ@?ceszYOQ` d5#@9G~^z28 ޴3D%E}/fBme2qMK.M)g~e3ycY7gXxWNk;;rؼ6nAy]l{tL+ߎA9כGo9oE2oX΃:XEwv+'`7[Uy-P=SOS-Nܮ>F9U/ \yEegry.Mo>p?x[}-n$??_$H7y:ew;v|. u8r?-O6%߅{AzS`^{;^S볳ōD^eqox'z|h81ćӘ1gGXX'+[@Ye[}|ztXe_h}% חeq8婀Xss>;X@rߵ:.Soo7?/.DɄKc|9nc:JYhY,Py0hv'8? ,P }l5m㝺s럻?u79uIJ_+q7rw S{#}7r9.PDVꗁYfG6V=x2oYѲ@Y,0ʒ0ƣ+9Yq!?b5>/n8p*熿_C.\*BUw;7+g9ءe!-P!ښz?v}ikYԁwX~|@͋y}Qv/V_@.@<,OOgr.%Q}ѿt̻3c /jL}nw(W;>v ވ3詮srh>G_{wMﲖC+-")X:&@pZ*/oR;=twߑcU/~'CW;gɼeyleS[>]@o?%I@f Y*LA߀T@[ D^n\,ƽ)̽;t}{_]@9s[X?|M` @:.Oޙ%F>Xs=LU6t5mdހer{Ѳ@Y,p (`@T jp Gxd nC(v2!݃}f}e1Yc:/=H SPAs^ ӱzl( G`rt)KA 'ƣl ɋ4@w=S횮,wz;a2랺6}>.E@9ڷi&:O+<;SuP6G@y2iN^Os[ŗ[X-P6-`S`'INȜ6um3,ϼT,P2oYYٯjd n'|L]m'-)g:) eO@9صiOH2+@KྍwD3;mv̚vmNЮ]nxs/}XiXZ&pY'gs]Yyhue@Y-P1W7 3M.cLcGuW( lrT@X PҾjǠ/C`M|=o7%?Ǭ@Y,p(؏Ph>7}<~> 溙϶0u,:}xt2<=}m?SZ_Zc,?[mhI?Za)X@o_;(,+˺C77/ x "36T6%m7#Y`{zA~e3@94*3?aY` {Jql>zs:< e@Y9ZxԎCuo IgyWu̻eҖ}u型||ʱ6}S5Ζ - |=XwgJ̏)YY,Px(9Z e#+q9EeK@9/({[~,P( & J߾V~[ԇMm϶ݙ}׷wK:,]e@Y,PJY,P( erej,P( GdFJ,Ρޞ~gj{No4vVe@Y,(I_e@Yi,PؽZ- eZxRx-MݿO~S?צ?^׾Wj΄@Y,P( B  z ,P( 9P( eWhr}Z_ߟ?u{}دOS_ھjvej,P( Gdr`TWe@Y,p( p(KW;e@Y,P8" =Gr0kjOݭc{s>k}]?m;m@q^eWkAyylR_( [morX/ e @kԫ`n}{Ǟf#9u7xƳ|<ݲ@Y,P( <xBWe@Y,Px* Tve@Y,{/K+c{NlǮKϱvTe@Y,0Ѹ,P( jrTe@Y,0{H5Cښ>SfckcX}-B !\me-;LVTW,P9*Q( byD9ڷe#,?BeUm{T8J ?['u?gni,P;رe@YYYgue@Y,PLcR( egeY:_CyṋVkǮz|c뿴<ZvTe@Y,0Ѹ,P( jrTe@Y,0[5ȧx޿^?\ڏ xȖ5c/mO М18+@X(;%v`I퀲K`_ZY+ @8+wEeMrK5j00X6VB@H G@t"n8+ wR9v3)"P>/k=7=Sca{ldUB@|uk|Q4}q}qs 9V?X9^bzVEl׸^lH+7]nЙpǮHv {(ğ†o| {8v_m/BmߙzlHnh 5ګ^bu^g?,η%/ƄA'${^|Ç_~zc]|E/kwƠ4Wӽ֧3f0}]6p_{ߗ];ge6kڷz}^Ok~oj@Eƛ^bv ugd ӑmNNm{xӧ7o|Ջ/Q{]ɿƇ`] Z?|Skh޾}X[Qۥϙ]acm+r*PEk!{A^z/J&?|Az2d`(j|uJ&3>hgp:@+@C~_2^IUYkϟ?|{}^O(X,y؋ֽV1Ƈ00 {!,W[E2UB?&(<S?_ޙcȲ3|=PkoQXӇ& c#D-ԓ4>^|.Þ6{,Ηz:/b iɍTN ; :q6Ջ?6${U-ՖM 戀bgS܃WҝJآ&wͅ.-s(QzT)kde= u*^m} 技=Ψ8J XddRk١O+R ɺc΃1)D-u`: kTK֔ P,%)v%b;Zۭ̜ c"@&YP2:z/{W󴶥'|Zd݉p0O̻pYOPlhm˾hM*Х 愀QA%+>zo gȶSieto)VAAA o@p%b.'TRu$zg:A{NQl Ew~H3)ZYp %b9z:{[{>MWy A =^:Q%xdċsw*Tеm-Yz|Ik)6[~?5&}hA` <ԤGv>_i =EPv|o hT,}hAHu1.O\Ơ7tߡY)14"D-ʸxQzi}m 9"\/Cђ7#̑EJ=}O ^鸾uE$wa)YTU)6~l|rA T w^#M2)l*$`s~i_Bf I|ǥ\P MθEa0V G`g"wIOӦ (?Y@ G(O . 0$? %O8m@8+vxxרl|H{qpϮA  d@G~IENDB`ic09VPNG  IHDRxsRGBDeXIfMM*i @IDATx콉#ɑ*k&5?) GPsH"d/յ~qQdb1?akĵpع{xvj tߪf:GD`ۮ B( B(G(?Q(^m,_S[@T!PSP ;Z8h@ EpTxd0/?Tm@7;ݔR-`!ue`0oluS P@H#"!}۝ی@KmŦMo2Z*M0l߁3kӑ֧ӹ!p@pMN O)`l8e $L9Zݬ˕, LP#[WԨ l:eo ڥ2ipF\!A;lSl 9wx$͞\WqO(#m5Н;iOM[Zgi=Һ.˓Wt&Ygنypyouk]@P?@QtN5y [ʜ/H;u% mAqŽC^uy֡HoeOK'/z$+iTM#P% MG%w=o SG:.n4 Ni7jKijϤepN !yZv#$ hq?3tj6R CQ @` tMV8g"wCem̒SB` a8&|oye PG2DuG 3 pMY|rӧ{WWW] XR'i],2`B`َW?Ү-ή𧧧tH׋^[.p R!e>ipQd =/^o~ᇃgϞ]^^!w [7wrL9&Vv `bfVďӧO?TR!ƳЇN6g1[oG'x!g 鋉]i% MA#ñyqqAqܙr8Ʌ*ԈI5ۤoC^p($o!>l4YYt"Ãϟ?}3݀ }5;&NF!v{$%a;9^$xC?G.K¤e-ZIjUV}]&zǑY>:1chÇ'?~<ſ{_~Aލ02Q?q;s"@7gɤsxd/oۧ2{;88F+>SúMh4dv}p@4}@f^0\V _32pc{g|?#'%ؓ!p2l7lPahkQn(̉kqdq_{_Y)t @) W<t9_ڢu 1a&4](3,r#oy?z%cZig*7F@_+qi.# ੟M@ ɳwC$%F@xA S<ӗi,V%+:)u6z??ꌀ#?+ρ Qx$I7IDS~G9b(]mOTX5>#&>ibZD7{{{*IUp+R ђ ;1\Xy5}u|z5\#sg/r*~7-۷o_K5 ukPRF)psj ڛA7gJ/ESg+!A }O0 d#OTw}_'''#F <󨀟mFzF2DF /?]a_+u!\!Ṕ@K9ùL;#Wn~&#`O^ZE_i=7z1쁝~`;ܬOHeKe+70MCFZBDsU&zF0h:ै?ϴ^`pGn=6r,#`W1X%\Fu&!ic F0x׍'^{M\!d7';_D=/D;Z YS?~V Yk>kf`Wo y O6-_ "oӲtIr< OpLjE B`&&yg$/x55]Uo޿F h*7 صuK7E۹3peC;d!hlC2o]7OH#]~&Ss }0"aߓ{g^ЀsĚ ,T(D8 熠>Lr  ퟕd&p]hy, 0Ϗ|.`W TiNk 0Zv49 @&s9 G` xs11BJZ GOǑgGYCZQSO'Mh 5Z,x_1cҧs8~ƪ\!50g\<a_sRl!P̏y#~!]Ki੦^kQ_u$J߰OS2L}WYO!_F<(A: ;p+'_c^3ҍCjjL!R:OLxOSxZY H?~ Pn=@8t 8Cy"@Àg/M^SݨB|#r=FQk<FXw20dxF;"8\ ?$e|A%zR7t'f*":L~xlӎǍ^e(|܇EO~Z A?tz5>uX@[(:\78#!P0+t'TX Gv$~Ke ^eo&@oo~;|Mh:͟gF kiGա; $G~@a;gLLR B`@8}&ȖH^S5 xI>'J??@Suk KеTXeFF9'H(N]c( 'F^xz˶BwY+Cű0@42^QN>;?RoY:Lv&H\ 4ܧJ$b9_k&9G^G_3zxe_[zSX3')Q ?M*7ovOKC CkcsUΪ @BDkuNz(c=2{Jk=qCfv_#lZoo# o0(:9+ Pԟ22b^8e Cj.tnf g*YL֙:Aڻ9N{t}uHbљ=$Sݚ ~&5Z>}EAm>0ug)wBVVBp_nv)-VB`0;l>$e?Q&{iV:1D=u> Ph\扝r'K9nD:ʅSj$`\(eU$@z +XXw g;ۣs~Ek?ZOdĚ/_ƚ?T5Z$x>ݚOƩ?;FȈTA(Y\Jq#鯲@!5tDU=:itDn<Փw_\km ? [ŖOt2QWwZBpz;?qs}(@b&Y2WK9{^ivgGžX)};}/p*C<Ӆ7 |6't*[e6cύUUB+{neА? 0mȱ5#ȱO~+ dM{=@ h9|Hk: RA a,N iRl8@S6{AU, X|+Kw O'M|#3jMQ-gWA.bvРsZGc#yZ:Cu22Gs9;i޽>$7 (h2B}逌J@wYނ, aZbv=5xn[I q$:P7]v ԔU)k]ZзO@{ (:v}2K}Ѝk@!02f4GO8 P+Fg}äv/{4@?etm!-j<9OÀ43}.X [_0Hw \!P|=NTH$ÖqH1i1Ҝt`'ZBk2N&}ɞğsވOe3(`&Dw0t[-($ !gIZ&i҆zlnae@%^3  oiKa?(}L&p 6BJu2nc7TƕGXuL[?w[ʴz ra~6L(s}$>ZI~Oj& яY PWPnnX wZ!Ϻ0DmNt~uyvE, i hQɟjZgdM3O5`K"P@/,, FR#۾~ad'Lp&#@ P L ho޼5nsB ѩeLQBX L&{04?.' ox4 gtUP@nZ50+'2 5 8ÉY{[|Ʀ4eԥЋoz}}gM? |6T ߺ\O|>5X@} +`Pɷ#&~ OX "@!@qՑnO!G}#t\[_.W9^ dJ ZPnY?iqs};୦~_5m's0ۙ20}/#ȕ  (V7/VGշɼ cPt?a0zW0SH6 Z' ?k n l9=m:22[.`/:B`xM##nÖsZ.Cz۸q}s2נ JO _kӁ5[LiˀXR9q:n CUB`n ;σCN}6LrM,>꺙 ]{*k[_3e{1yw6|`x4z`4J1( uFq;uMH(\ I `q x2N5߿gMnMoHR^peP8 G`el/6dlrFⳎ:m0 mZC{]i ^e>횀peo4`j~\B[V:B`3t["gЯn$<+mG"I S& =AMm>#y\ #@b~Xs΍\!Ṗy^=1?Symx-@[G [> di]6&2l}F/# #2aD .Qp[;D΃>Wu@ȧϞ=6ߟj+g'3z-d>T`B{({YFD,Л!PN!P,x6yk6y婯s(dˢ'xWx>p2v"!#VYWF@@?ely,6pѷOqC&zEu}qNҹ'@/&|7@5<&9NC:-P\I7 2|@]Zf =]vO7bַqv!}nwy]];nH~mjVyD) ~Y~ߜQVkkݯ͚yпFH>珺WM|m#Celi*6HD<OCn'7g?!zڶ]_%kiP 5k >iCFOձ*|m=aq(WAڴ4kGܦù}s}qİvb`l@Qg,縑}Fqs8F&Wl(`IgLKjfeXm> yZg-K:SkSuy0a$zi+ջ+|ͱoG5>|wM@l@Ⱦ 'D Y ޵c~kdw}LV_:vh8YFySȆ26DaۀIqƁ8iru#ɟB[o4zsYG5 `R p&@8 o 4d0Бz"Pzu!@e+3 ,s8"~a$><#:nF8FgWeYA ?>&ӧOgRId>e``Pm@ 5?~MuUBEԗ]C ٻ4C-±&@y ~h xGj( 4ƿ܄R0h~بYSFƙ&Mɤ˸>?H9_/oS;ܯ)o>W~S}4kȯ)ȼ%YqCo#apXcWz!P,k&n8o  CIצ iBilL_Xp%L+h7oȀ$zECkTtBv# 5dLfP׬'\'~V_BgkXE P8@>>v ;CNi} ȨQ 9Y\-mwH̵4zfB%SX0$!K}5ZX c><.HzFcdkt@!YC#&zh[=q9F( /4%pZ 59zI;7OyH^4C u5pS? B><Ӭ9y:GS]=^E: Y i 8ZK:DYPFYAYNʐuBxLCMt|oVq- Czh zM9@:ǧ- tQw\xK:ٳ_R3kS-X{<)Dx |ew?x!e%fӳp& H10ҷNZ"9?q 'gMe鉫nۄD-S_G9}ڷ.}ɤԕGn}%m.#qu킏s^|yo'*i 2H'N}ǎg/ , j3T-tⴏr\6 (;Dq< kQH8ךi Y^Q2y~teeI.!0DS3ޮ[O=9&>Dy6reUre٨\@ x&Ygteg\y8:psQikw>ϻz.ީ<իWZ ^f %zD9#,j$<,f B@Cd7-mVKԙ=ueƝ֧ks@$]Nǐ) +RZ>Z 50mM@n>M/;`0AW@!p Q-KjCgG,2%<ôkPp7uOA tk>+K'`}F29Gee<07r@!p7wZ]K94!w<ۡOSƞy|]Wn3' ҏqvΕJ87w&6yTHr7s^҉Ю F+ E@<;wmz='ó嫁 +5ovך0I[2 E9N@x`W^"`򵜧7%9ܶ<;auex+GgF~}X\k&;rCnܬ|<0Fae< J!P\V<쬼mH aO4kRVƝ_kT>JYY+p͔ [n?>ywy 0ʕPHe;A|e5U|I|Q/UZ|27^/[ä٣k]r|OQ <"5ZxOO'|;}p;@~L&氧`P`WS@!8OoLieG[YNo$oSOv~bM_j Ipo|Ыa!v:m :F1@$Yj BZbx(V I9:6| 8$L쨽 ַ={|>}z1awmӑqHTe)`9V@!"tUt(G.}Isؒ:&_U?v$-ݎڌ0Mp$}O@&~M81[FaW_h"wC ᵰܺV&VmnxsFyrk'e&~ )ÝIĜٹ 8UpفYku9O W@!~|9PVdVl dI%ӌڱ6-oFx;` /^<њ5juee<D!P'xG낔s<ן3R]KmZ|{Zk~WWx`_kbnM@߷2&n,gԡx@BX? (בp(n#z3S=T%A t'''g2XpֵCr2! >Cr賌j_Sc5u9Vñ}[⢽V7sw4=ҤH+c~Y|gvtyw>tuO`ý wucPU0eU{^pia} ]\; @L6N_F];>. B`%Lh[mi2H''ݑGmHC>*0#˵[]; 5$)gvN'q͚Xme}zǟc* ,Ds&vۘ,USR B`L#iiC}0Y[:$Cӱt:#w,spp+y1rHW6S@30Hܕ(2`=0 ´FnrL^ ** B`9@r&EKZ"5: l SR_9/e\_.ۆ2[r?w>r} I7-@i<_ˁc.4Rptf`8dzte,uBB`UhYd$%yr[:b`Xs\irNw~ڷer/,鮋~q\oM|$]fttzu2,;lZf=:맅]&7Ҩ4Stǯ";*ë'@S%Oo޼'o}l D=:SnnXĕ9=}'lxaKѻ46& }y[i~ZiD7;VlL,p^bA1J 0gU$ec ;V B`= s$ICibq!|>Q U\rz|L2&?RXtN B %sk7׺YtsEHh=O&Ҝz ˁ8e>?cMIjMD9$1FlX8kWFQ,`UBX/ -;}ޤH-v'(ͲM#[.>yr3 @ *5WO ޠ_Xg'!#22ӇZ:S\SB :2E資 A|6Lβ9҆\Nsx=:pxC{KΣvxM-ʫ+;`k5tnLVHZh`$eRe) Creنy2t=&}$w8h?-۞?18ֻrzXLy$5x K\*Dݭ ><)˛/Q-# .SCeLguZά`O Şa dD1؍C9O󺎻JrGAzڡϐ?"Eܘ\ PQб0X3ҵ`_5%/8 ͐<~g!P,*(ɮ# 9?:=CH8‘e$sGA[YpxM!-uumok˗ 5o;IQEn@AТ5/`R `2Cf3i-9r[汾OF9huY4rzgߧ9L^ D d&@+M# Py%Oi*tH;䩀 iv6 / P@HE B`pH{*M^&zLM~Nwz. 9i.;<$ϴ|Ny/L?}Ɗ|.Fl"_;< >Z }LFW;+=HY_>}tW&KZF@[!dGl#LH`T(VDŽS#ϤER+7y,KxĞsmNs}exw>׃,p9ƙmj#ǫ|N \ƚ 貧.hVPI6Wy\_m/ܐC>Ȣ/"}aYca~kv TR]p;HS(Cw.U2QkD"\&"MRH?L[o㴉.ˈ8_ORҭ%/,]N'<=i6qKsw0^ȳ'OHSKtYo߾m $n7\72 (rEn qpH#$i}:9(O>~HRP.7-Ӳl㠭1x+_ɳOF/Ͽ,8~},Tn0!ޕr& v8 CFYIoiB0ڸy>aW.uZ[eyI'7륃Yx (k>)̚FDl|7XqLc@66KUd} >TJWkbuda |9<9LIZoB9_6OV%e̺vМt9}(L߆\;_9JFgǁdAZKB>}:_HJo WoO^=t}e_\>-YaI鮓xs1 #?36@i,8~'xU0NMC B+5?vѻݕ@{#!m:I~{F:e({~ImY>Msm/i+Yqgo]4pܰc Ggaxk/4p46 "G-{E#~s#P &!8CeRF̞L;%֑?6!ӑYp>o|VaK-!v87!v +Z0S_׏Jc@?>F'!|R\ iD@m~ej)Wq6LɔqyƇ y9"s޲MCߥuzb2 JłZp>p&x BG u\ :h:k ]u4d?癖%~LoCg9oHrY:[IamZOl΁?dLCaW [ Dn>&:ҝezǑ}ކm9>-N\>ɓ9aKA\a( g3?˾Q`2( Di 4-;rYp6%g獷xVtg_OH'AȄ?]tZ6((`++UOw+)6xꢯ?|Yf2;9__T}k}}}mh62mqvNWǓIgo%' އ@ﰥl,`ɧ\U_l 29d}&u뇀t=C_z{HWǢumm<'l0XK&,]I2jw+(䴋y U! P;eR :ug"}ì:r}9|rvf?+:xoF2)sڗ F4v:# /BC\ m*+ [C@߄g-+_V{c\TiWmA}#&V!qXi}F@R@s 2W3߹2-GȮ/ʒ.ӗumqr,Ֆ?yJ w:- .@IDAT\0Ėز^[l# k^wUd8ԟEwVmcumȳ!`]txCՆ@}E B`0a$7DmUd; Kd~d߆i47M| P(6@r SqSF&!Ivpm8 -9n[C"0O"7=\.?"9}jm?`0R( BA`]^.?:>s0L@@!PdJb~uu0A<_Fg''SKL2JchOnvOM쉏(MD  ʳU2twC2c89>}9=e1`C @l wK_g2gZ"P\B~[%*;!KE3Ǐc?6zpa0$Ϟ> qԀ<k>*jϬ)ԤU_۟yQ[\*Zyz߅̼>ďdDoLsyh#2 =>:xƿz5:P2 )ZO},rxh#c58,@XUO!@kӛ7?<$믣+W@;6334?/{bw$vLo c!d 0[1CO_WKo5PB@+L~/TF.%!kܵ +䎈~7h_ 4Fv$(7%@=eP#_ ` cR͔+ ; P'0[7y<@y)bgO O?޾'_ϓ;׷|68@"w¾"z\Ș8!.LaPvBYN#\(C ps.߬\ g w?Ұ?OA2xː8u _JE\h*D?tW?q2,1 kH>v?Oߗ?O&~<#@j@Hw:4"c(8T@l,8hyg+Yl;elPǿeOIBUxOs&~$=`H _*%hjRO"sp.? `a$C=PO!P̅@sT B#WDc#"xGM&&"li8^&@kB"ׯc=&8ȝ<@W#C3(`&D뙡n۶cr4*#z> 1󮾟$4H<x,Fc/P?ȟd~K9RnW'>[Y5=__ʟٗ g P8&nߒQB@ )E!<zg &#B+Oa!Hl@ 6O=|[ ?F/I| Ul7gIzPF al*8 IЍ@[Y+&qx*C&p؈ElȟQ |r@?eMm=9B  )o=z9MFy1 E}4D=O';˻ y ݵ.}zh9cxk{?!0wD)f rboJq9&_=pʸ5ʕ[?fwD2VT "uN30ۼCuf? 'BMw<]B埯2qP+•50<+ ? Ϭ/p?udN^ێ@X+`ݭu^ޙge=_c]gcOve͑:;e,۪XYnB7`q`#GOg#<}FDeGN`0u@ԟ[rpi:;ge,q}pn\`QdBqcO\$"[!`wOS:H:A6i_q jR^|`G_ѧwf @T|#MЦ5?aX2[1 `L@!uu]z U@>RU ώ8$p?i ;> ֓FNTɩuDZ1vn?k@òj* _d~ޑHX_ ߏ6=}y\~^9\{~f_t.ܖؖ3]ǹ1p3gs>}DODC x/;:/h 69?Q]O=p|t*^['}V0 wއ;'~Ʈ&>ɉxELWFƳ^ǼIW̊}usCP'c#$e=r`Q Sy*DOɳ4 ve@P@eB4.\H?S¼TP?#?'[>絎 B6eƤ4J"`G2p?w ~znbH"cLl#Il d` cd*L~"?¾K^>H gkDPp|PO3FL4p[ tL`0ɪ =((?D1dD\Y'["yڗf?&>IC:G>\im?ܔؔ3YDZQļg^O97"7"_%jB"3B=&vG}c=ʞll '=W{vю.R.UL+ODg?ZujZ K,7@~{~#jy!jSHZ:Ezrߓ|:!3 (a H#!P?F #&lCIbIƵD,ٖuY((G9kaLBtGzbe"R$y;"#G4 h'j1i?m\m3"f_/⏮X /VɿPOt=3@7.^y0(Py)uM3F&ya_WN&)sMǒ>?vE` u ga~]"sط_3Vy>+o/4"d}`Qa8_"c^SŒ`L0@EHFK0,)Һ+y\ι)`9V !~vc~?($H·dϐ]ɟ"e1 oVC҇O5"΁|+тG}gtTO01F>9!M?P u}ᬻ:#N@ųj+"YtOle~jx}"?N9e/EprFkd4 P>vCFqk$`<A]8U#? i \&weg]G`9_{#(ﻀtЕX} dO I!}v4elo`0@ |0 %!PMr MTkD^tﻡ~B!tat$/OC71ywXvusl`"YPs3`d$]"V-U\!P@ Uv#D$B{sΗNOlG==y?G{%>?/}R|.1UIQh?]^ă?ī~".7@<@ky+;g''<նP]z??NvƪKA~ Cge)Cz7"I[Y_ ?_e,jaB?y|y||GO~G*yE~&G?t Ņ!L8>q ?a{ʥ*zԋ{p$aLzǑ8F*ʭe,|FOHy~=^>2Ft<ՎIs;\Wzh@tWimH?e1<dޟi )vF|:$6LYl_<{ۄ@+zWp|cz&M }>a` }DD3?d'i8Zl=[bBwNLƘc⧯=G72lwC{SdsLe@?IHDޯrbM4I_sP~YnV|.޶?nmϲoxz||';uO{zgxLqF.!}>}$|"dx }{#?O8WngA 58`0yc Dm xrkUe|}yd{=(c Sտ"(!Zix=Q#P\Jd>'/F/_%40~GgԺׅ}#p? G'F 2;ǐ}7^w| rHXH/ s8@3DBG;`?q .P;kp(LuA&ven^H?]>p,/1Cu+CxLж| Cg?_enԹ<[1AtJG#Lq>//b&&TS-1h D`o"t_!:PyOO)s1#.ݻ\w! foi_v{6Q6=f݀Y|?E"__i`G'#{w] C<9Su^*OѵKv HB6yGX}g~U~ b!+>{'֏}.,UW ,?0w®mEɟڒdo6@ȧg*FI%/]6X r MsxAjFXY r?nuEw#?h$)_xyb?t$;BȚ7!-E8!P:Ćde,e/26h<5d1sWC'H%0D12<9:+zQg@_k" 'F$xƵ 1}Eer@B &}P*?OGi0s&7|ȉp'/ #t]`BS GӇx½dn3đ^l]b_3H^y0bX|+*;€AX&'LEx*\qFe&ia7Bxfom/#gǴ*>ė̻=>1/C&y n?2_#y`Z@ŅRt4$_tE'Pٍv!i[h,#1Ba IwCYc@,U -=XWF,4+y YпL}aKۂ@kzM4a]hH @a<9sp!":§K2VtT0nb3lwtc#֍hJ w/ /ꈕVqq|1Sx T}c'F0Rg*@+0=Lj/x&]&% d^7*$sTIAiB_Iқ}5"3yMJGpܨk]{G.xr&.C3a)  Υ|ٕ{H,MQ>}ԧ't^pݴ<y,m/V2V,Kip4ȿ/TUk@+zV餣@Da[I: Q@;nsӇ=eAoX2HW \GAeBi"kHJy1A3sC{Gx-PFZ Ʃ}ߧ{c^kϲL<ץ2LJ?u7Wtے9K]G]D uC1'Zb@F?0V*?}lO',\a0.'y K@ p>Gd GOy8T<^U8LK-y{dGE2q6k͹[,e,ͭ-LZy/l `CXk|^cWk n «8v2[!CZ˄.?w)1S-3ǎa<<%.m <LJt Cdq hPf9 ٵB&;)0š^=(`WXo]u;n&{.20!u:z { =tq,%(13 `yT0#LY 8>V7_ 6"ӛlkn>Ե@Fpu&~?q&kc@$)1 w= T5xq8L` ؟XmnGRo>&- =t]4m{o(;!`₨2m]ܸ!lp!7铗wIx,h]j5mqh; ()3n+X;@D{IkTɖqoe3odE:)"sA$ á>Hj7e ;f@ m|O"-#DQ?`]|# ň@y(:ri,/Zxi(cHf<ާ"p'm_kw䫼 ]ș וK5LQeeҦ [F)L$,x~'6zl)xAeOƖ3P. "1p @_ΗadV(  J$#+viv4yhqϺpkZ\E- MI[ dnC=FmX@>+ 8Ds1  Tv\fǯH߼%ϊ/Hp̕>#1?8-ߣ,g(-P؄2&;@W&mqVgSVz&o:2 DL/r;J_Z_["p6EGUm*`&xEp[NCneH0č,9!xgAvWbc +7)o}K㿌c?,ſiq-O:X}ϧ5-}dC}ISQ qS`' ݇}7{z 6{mi?j.{<|>,*.ŭ>3obUT*hCUd/}R((W[.ghU|g0 47.K XM)ɟ2&.AbAZHZ iy9.κ]A*獯*r Y^m7?n}˺slc8*^Ԡ76JW@NuRBY`dG潤ɟU_zY9g&H~p};QE?+jSHdw@#7y2Oa r y#}_ =NSt%ݏ?&i.M)m*WsBz?h~?W <08 䌣8x~I_S,["8^xZ3Qppxv HWPqnlc*)  t|((j@ֆ3澘?1SAϏ G7+Zؕ@/IDZh@2*t8py?:{@}qB4@KNWr4ǟ4x!s~S/ psu /Y\ۿ-nykDvvN$[!eu :kVr>:8W>|Q#bl?K>B'8*)k  L[sڲ#ʘo~ Ͱ u޲Ͽ])]q~jne[.vJ_~}Z܈powdҎIo6vmj8ɷ(+X-?y79S %@.4@YpV~桔Cr낮 SKuʍv׌ 'N|8AKNq!PE~/;˶dyw@9sY d =Ӫ=w7@X:;JU?/Oq.9,}Ru^E/Q[(2UT{JB~;@dJҦ旒y9p?|k't:k( :ZQsZeM4;V#<ċD/۱bMUe%ĸUʘ*^xGxy;qh۞_t3W w++v@}*a(9*\6J@p=ң H;\WxJ1dhonJXGR6:7F}cU6NcDZYY?Uo @oa\P *6QXڡ~_x!mP ~o pIF; P>aW$Lj_v v"uE &5MdY?Җ1>ٜ o~yrGSdnwn<)9c@\\កfg8Ͽ>=vtXGsJgg|@Y!e{M^cr^QĘG/`' &L@Pa<.<70x|CDMg- ;13~鸩K ] T>4]ѭV?}o3ʌW 6E>):Yf>Ecc1E$q=t8<^NC+ ir ӝ'pDxOk5 x|'u# sLhz$\R 1!tI5o*/ѷQo]DtN:Ym Oc $G(Jĥh6h. y1ЕA2^pxoxL>ʕ,\-Ps=rO{ML/ %AS?o z,ɗsDm%y|Бe.( 7?lEcDhy`1%vpn|5yceReky. D@?S7]Qt.C,]PIUqty0cqDޫ_*ƛ#x9@S#ز(`vO1LF+}d$ТI ހ3&Z@Ur>s_/zaB7 .D)^Pծ8N0ȁ`b'6ೌ<4b~) ޟB. ?]yz.<T~"|@IDATuYuMs=uP;6 DounpTʹm㘰 @y Hk.;Pœcڦ}ӷڛd/Be9/0?&O y1Vꎿp'p \p&ak9g9BJ^zgJuL^q8BU_q$sNv.C@sd2ci{NS/jx@uzJϜ6oJ]Pt{8M8ToD/3܌ʻ$`P>*r>o Z :>@9i c*qnyMl R ).w;#v>Kƛޘԇ;Y>& (}j Nx@o]@ȱ)yd5 syS끶"dYNY,o (a3. x9`GU9qvb8@?=s Fz_y9Ŵɏ~S2r* /9^KNĊN !m=QXAA'@:E7E|OGCNorr^}ˁYcuM'}\ J3OvZth 1H?oVGv.2g9 oOYX#=O={"\΃w\Π7i2ΔVyzrBkGO`?tXGMDrW @[J~9)\yNr׳jmGdYA7pvpWoE@[ >glj>s"?~}Q_q{C¶DZ=u{S!6x ux Gy12I {9ɉ)VZN]^ot~b'=\/eƢ8/. ;nXr.z)pܼ 7#qCs.Op @+'x7OT@3Ɣf S4Z?e,P F} *=az2:3mÄʔJ'ѣc.3dt,l^V&&uM>2t&<;^F:vYSBCs<喑[|ɱOuQ6=aG [ߌGJ\p8M=.X 4B>sCeF3=+qg;ffڗ8Oyߓ'/{=;%ZztO՟';T18|"/3ܻ!q(T?|3)mU~X,5D=>hL'@{:tIW v/jm0H{ /DϘ,zR.Sp]ӫ}SdYuN1]Gٷ5ɡ.79җxCj O8t|7KƢ,'̮1zLY,0Қ#^$`Ls^L*r8MvJ2QP[iYvM>z`rJFK|a'\rSA^]ˏFa+S gbe] ?|"8V8|(]6EpPx7auoYѲs@9Hy?=x]Oy X8hg\9 `缱tس@Wx4l&Yv#DCvp;y$; N|{|.T*sfSx&(@'1A2D@Dmvd^t){}>zA7+ohVч,ni|*1Cq#e2I[Q.˶M|8q5ݤri'6ߧI\^,8 Fc-x:B^ 1<&MRRear&>N=Ծ։!{bՄ׈YS>g -n*K\Np@Bz4ć3C6r:Mz(Ч-rKCyܧF|7i? 6xSiS\webrf8RL mbK%4O `_~ S*כ镶5!d~n`( PMjl}kvw,rhno?j ̢/D ( s5*6?)[,,Ps:ZzQ'yoN=S>1&"M;o;@yw@ah6s`YQ D}uc@Vι ,S ǁjgZN 댹`O37QU( 2X _,,Ps8J/wNAl+i l\9{ ss=Ӝl ͼp4ܪ\k:`;KS.cN2y<#'}3سe@gÕ(9L:z$ A쉛vh=1T{tz]5g^?׷W3`'ҎV+KQx=0۸NI[}`tq\>w?1[i_f42oّRzM!p?j/9@8d50{<6hA|4T?6}*drv2Syr'D Qr^sL'$z4Xkl?qVصodQivx B;'<}.yd =UtڣR'~=wzЅ⹜. po&|/f(@ގ5!vݾ|O8h_2D/k-gۨo Pp&YR s]hЏ)/ 8],/\gt(`:[=-'˼OOgy }BejUփr.O>&'YOߞ?A7>ݗwzS9a2i8&]3M9y50<h[MoY?F&xF[i-P@oJ,p\;<"*-+?=DO~r|.g~_.]2ih.kdBz:s'@7{_otDp"a|*3?^\=/ndO?rD5%,8~Y?\fQi)ecmݾCgFY&>x$]NEysnSަ횇J}Q. َ2GF{ Hrr)C7eK #s+ V r`]5S; 98?Sxvƺ:ntLϘQץ\.+k8;7V( 9n.?@?ߖ;EOmr=9ҚY 4@C \N/suaSX]ˏL&:^>L鸑S6#-|D?7(;{86?O o: =x܇e},P>֪Z O -Z~v'`lWF苩ÊwpsP~۸<_\n˹^KuQte|`=> ?㏉^e٧2;s%?(eyxB/s:2ec@9Ot$=)}JV*E p+nc{2q@r^sGpI@rJZa>L}Ty/ڶ(z77]7g8t{s5.Gsg>?|yvŭ)QCd*S|9/CA4eB/wzJ>6sŽb>׸SrS"i<}OF8~4'Q 4|YHw30v[o߾߼MXGɽWCqc8=PuYb]iK亮Yk_~S>ixJc)>v+ (PMG`9r}Gt?<ւUz 8//\]->5C,>Ҁw `Rx3DY7Oe{>d}t;< 2a@: U `/҄Pr2Q )%opD.U7;B|3". 4{ƹ`H}PDՏkDq2=չ)+@93?̸m]!grg;8o#хVSOlSrL+NN,' _l2k^  BT/99e<1d}>M=dgj1R?uVG1d-} Oz=炢 rq.v}pM@Dv>ˁ}^Ǹ4!mor>r?}/NkQk0u'۾Pp_e u!C~ ّN.'v >x*W?Y ѫU2&Z'm+֧~<{n6Ww̏~L>RO|ЋI^ Ny\+&է %}hG  ,t6־A*/eG-2f;_PṼ̬6Q ~%`U>^x6h?>Q-1x=*-ųk/(:';P@EL1׾}O x" @83Kx-;9o I+VjzҠ>nco~ es`R㷯#g=g-T|Un8l؜cA:"M+x$ +~=^yCe8!C"z¥'8{=c>s/j;W4̀s:]֎@.vݰK,P|-{Z  8i-' j~?ΰq'2~whs=[C"3-OYY\>Ɍcj\1O2"s~q 8i:WC׏ N@uP8^㑁 _ĎgE. $qCݔo~>@9#9pyh;VV* 0Iibׄ{DM}? Oˮ }#v1?B@?Ƅk匟/4qkz8~^v8JG-`T<."|l_EC%()b;SwG9Vԇ268|)0t~Sƈxk > B8'HSSLOA?;E\$htLy9mQ;FK a&V>&֟|bpJ7 +fT@xzC*߰כV.'Hp`/Xt=B!8hon<\ ոDNݾ&?8HC,Gc`*m}p Coo߾\|E4j}/?wK}x  &@MxP7]I/:220<&pDKeWTDOx5`e> gdu[!xb'6E_ zgFNjC|W'oH#J}R'lo\uFGCO+k>(j# vy`8\*7MY7ZO(^jo,D'6;k8WT{鉖?i?|X}N_HE&M Zs{E g23Qһ87wQc؍*`Uuѷ_u?9ú "[s&-&y Vc^u<U |y92c CO6[ Plxȟ֯M[]}i :acÑ^hi,eўD8`HZ Far~Ѫ~1vqÉG |q?t_ky݂Q#.W Pc*{P 䉎[mR8M:PvqH@E%+"Ph1E2V|c`co9C[;F'SvSchO}&0~(^v;֑/0> spDṋNIE>Kn \@SyA<#™WkrhG{c+'@ƒ-PMWaO~yZ 5w+M֬ ^Y0N dLE%mlQB5G Y" nu=CؑDn.wHm$죱}o':(\Αa׮.6PHq61Mv&'~svT?_ ;ny,п7鉾 Ot r'@c9M('`ioIj7q%s[<|J;=2Nx 'o;$<3} ]LʏI^e%"E GL>^=.\t Jx;)8Ya?9*kl=8 X֟8[CTu~@9?drIgנɏq6Os ^iͫLhG}Ҍ^IՀPl yb]6R݂$ >d:D;sVex<"/ouC;28].5pV;S9t|vs~?8.r'S_t'[W~`.1sICU( l@9[ Zt׾FCB<W`ѤL&ʦxV_6<\ӵ 2J qQUv|tI4. h4nD0f8|/0~/%t4TGbV&]9 G 7'8*oT%6 nE!ڍ E}"[l C{P@9cV@V1P xh@KDXQ]T mQ~4:EΌq*8Dx{pU#xmy >X>$s3N4]V~sm@[X: 2G.?g;rn/t~&ޝ!V JkaA)Hw/Y*oT@gQhe#3n$f<I xӽ'V܎@?8li^%D$; ꇷ{n /^鯣> ,|?#ߗ[yxGɂ7 LyE*q=U~lk\{/_ubBN@4'rSL '_ 9Q88` :|O@}zyyq^e/=jfɛ R6tL;XHn@] ~?u=Z]Y\7"& o4S΃8_c}@K?FT܈#`'os>Q;T( (ȑϭYr $0dNq.og@8L+=u>upǛZ,`[8n:A11(9XyxhF>|#D )i"|"m%B/szʊ/4C9Y0G0sD^tr^}Y$୉>&WDM * b 4Ħ'V0|^@WLxq9Q=OdS{ڊ Yvi7BY]@iǹ>qF9-7UC`X:LVc6tX4' &m55k8W+~M%3X_JP[}[.) ̿|I-lShr}o|%Ît:w]|4㵿:'ntiJ@.]P)UXVϋ7?-NB+9 >K:u^z-P=zPvx=0$5:&⸾+K nRowof ;1Yvk _]V}-64p7CI5@7 88_XG|Pq}0$#-3g7'D]OT;Le>G|0({QH{z c/g׿.\p)/Զ8Fѝ ~Sf7LR;j3TxW<#4),PIwቱ:DYZC?@q8c(}QVO7{&(\v@yHc2-F-GO 9YEGՉQKa]>i_ &SxCKL7׊qv@/;xOs+#utx;N=mhh.zKRyj'$1h:Zn;8/Z߾W,PnvRG`~R\qglBlo:|hij"cڠ%񲌨WqO9Ÿj_1n$9xeh| ^CqM3ǟ2t`Gcʪ>-q@Z+~V;?7 ~Qx+%](8Y0t`?"+_m9f<}|e<֢er96aժ ع5YͲ ;U{X`Ys3v +Ed2?Z*9BxⰄ( ;BF]U|8EJSkq_%i?䵨1}A܆ m gϽ<ns?CY@~nqQ3Xq"Ŧ:ַnO+zeI :m~Uo-Y?k%]+rޫ(_|Ue]붊?jf@M~/d*s/q܎L#+sQ;؊-}޶.A[ RtxB:L7֑ˌ[]:o,z H+p%^GPwZy||$sOzxS$5v8ǰt ous>P-Œ4c/ZuLd_Y\?'^.@9 Z|@xbLχbժD翿2Ik7M37o%`'G u(O8* MfgvO |V7I48YR:] QqaH2 psΙY5\ж{xoIj62.},iVL¬mO~9c;!Lw!`L_I{G]+*3J;ۑp*=Pw~5(x!Z]ig7Q[r%7g>XK1մYj}Ҭ2^W?W Îd|Ѩ2eiߧ[e `'m>u@9O3?8LvQj`yq\y1?ac+K9@?az"V?[_O.oxZF2 Q-|Mm~t7?5! CA*[px;Pe둓*Sr#OpPФ ET?v^WV % ] &x|\Og:> דdeR˜yeNCiN(##M c2fu3leb  ݓ/4G=@Cl!' s9 oTL|<-=>mРoiq'Q|?m3М66o H\߅O-B3\so|8+א5Ά V<ڃ6҄L]]ҹyӾ>rBn12y9yNv9r1YFxtB]f8[/U|Y((z5o8_|UN}^|M?.K@9*T|?7y=n"h@\tȽrw'p:b1`j`>@|=?ڑ|4ly{:i7yr/S?:uyn6u<S;}rSgn,P:|?l\gV?ZNߋ[ɸ럕ky9|#+{+Ey J_7Q# p9@e:6źLê\27-}g06UT+Mܔ%/1%ܗ.kߧ{pvzr26zio:Ce3 p CVد Vk~?oDpk;R`oP΃8c,PL})™Zs] yIOZNoN.Z@9cV9B'vh=c}^J_= ]PTh_iàx x"[!Pc|uOxw|%ixoxޡJ>]f)Q'3OyMI[ik:JM7ӉܡI# o9@ .27FݦH;"3o'y91]ӽcӷ8^{r^pg|⣶hV4'+1W噊]xOPvxS^ċ.p{.tI'n5_:#~Lʭ5|%⡌cxǾv@ȋiܦt3oj9Xe=P;Ey^Ѳ(`_UI-g MINBZ0(ez5;=.ǂ. o'8rxǀ) A=}tEJC:~+<ƣ4刮?eؕMi癆 ]}p4 JX+e^Go]>\s3sҚ3F刊v5]v+c e'@8H;8r.lKNX{ hD yA&ua 9' ʪ&enR=?τ̶=nm|=q%V[1 /'@C~[v9A[&)>]4u9:v{N[_D7kݙHӛt?<_1i?վ^?|ZT겪)0.;)k40Ϙ xsYk6s|O}XzL3oYOוˑ^ ֵCDink@;.׷h#ur&}XںoFַʟLcH 0~?Q'LZ{\oG\BЏU?i @]襍R-~揕ڶdB\q X>ue-7uN"7oew&)/!˼˲'},!}BfgYu//,bU~Z 4e ho7-0Vjޚ^2ȡ\w]E@pb_ s4T7ebR"5ˍc2˘Noֳ+E8\a g>Ae}e)-P֜Ps&os m6ts̀ L日zsYǥ~5O`7gyt?^Nd9yC s^_6*˲mm>}ئ?rYt.XW_X}bCC[a__OIG[Z ɏWrݟw/y֑yeLj򨣲]#esz̔{jQ@?ceszYOQ` d5#@9G~^z28 ޴3D%E}/fBme2qMK.M)g~e3ycY7gXxWNk;;rؼ6nAy]l{tL+ߎA9כGo9oE2oX΃:XEwv+'`7[Uy-P=SOS-Nܮ>F9U/ \yEegry.Mo>p?x[}-n$??_$H7y:ew;v|. u8r?-O6%߅{AzS`^{;^S볳ōD^eqox'z|h81ćӘ1gGXX'+[@Ye[}|ztXe_h}% חeq8婀Xss>;X@rߵ:.Soo7?/.DɄKc|9nc:JYhY,Py0hv'8? ,P }l5m㝺s럻?u79uIJ_+q7rw S{#}7r9.PDVꗁYfG6V=x2oYѲ@Y,0ʒ0ƣ+9Yq!?b5>/n8p*熿_C.\*BUw;7+g9ءe!-P!ښz?v}ikYԁwX~|@͋y}Qv/V_@.@<,OOgr.%Q}ѿt̻3c /jL}nw(W;>v ވ3詮srh>G_{wMﲖC+-")X:&@pZ*/oR;=twߑcU/~'CW;gɼeyleS[>]@o?%I@f Y*LA߀T@[ D^n\,ƽ)̽;t}{_]@9s[X?|M` @:.Oޙ%F>Xs=LU6t5mdހer{Ѳ@Y,p (`@T jp Gxd nC(v2!݃}f}e1Yc:/=H SPAs^ ӱzl( G`rt)KA 'ƣl ɋ4@w=S횮,wz;a2랺6}>.E@9ڷi&:O+<;SuP6G@y2iN^Os[ŗ[X-P6-`S`'INȜ6um3,ϼT,P2oYYٯjd n'|L]m'-)g:) eO@9صiOH2+@KྍwD3;mv̚vmNЮ]nxs/}XiXZ&pY'gs]Yyhue@Y-P1W7 3M.cLcGuW( lrT@X PҾjǠ/C`M|=o7%?Ǭ@Y,p(؏Ph>7}<~> 溙϶0u,:}xt2<=}m?SZ_Zc,?[mhI?Za)X@o_;(,+˺C77/ x "36T6%m7#Y`{zA~e3@94*3?aY` {Jql>zs:< e@Y9ZxԎCuo IgyWu̻eҖ}u型||ʱ6}S5Ζ - |=XwgJ̏)YY,Px(9Z e#+q9EeK@9/({[~,P( & J߾V~[ԇMm϶ݙ}׷wK:,]e@Y,PJY,P( erej,P( GdFJ,Ρޞ~gj{No4vVe@Y,(I_e@Yi,PؽZ- eZxRx-MݿO~S?צ?^׾Wj΄@Y,P( B  z ,P( 9P( eWhr}Z_ߟ?u{}دOS_ھjvej,P( Gdr`TWe@Y,p( p(KW;e@Y,P8" =Gr0kjOݭc{s>k}]?m;m@q^eWkAyylR_( [morX/ e @kԫ`n}{Ǟf#9u7xƳ|<ݲ@Y,P( <xBWe@Y,Px* Tve@Y,{/K+c{NlǮKϱvTe@Y,0Ѹ,P( jrTe@Y,0{H5Cښ>SfckcX}-B !\me-;LVTW,P9*Q( byD9ڷe#,?BeUm{T8J ?['u?gni,P;رe@YYYgue@Y,PLcR( egeY:_CyṋVkǮz|c뿴<ZvTe@Y,0Ѹ,P( jrTe@Y,0[5ȧx޿^?\ڏ xȖ5c/mO М18+@X(;%v`I퀲K`_ZY+ @8+wEeMrK5j00X6VB@H G@t"n8+ wR9v3)"P>/k=7=Sca{ldUB@|uk|Q4}q}qs 9V?X9^bzVEl׸^lH+7]nЙpǮHv {(ğ†o| {8v_m/BmߙzlHnh 5ګ^bu^g?,η%/ƄA'${^|Ç_~zc]|E/kwƠ4Wӽ֧3f0}]6p_{ߗ];ge6kڷz}^Ok~oj@Eƛ^bv ugd ӑmNNm{xӧ7o|Ջ/Q{]ɿƇ`] Z?|Skh޾}X[Qۥϙ]acm+r*PEk!{A^z/J&?|Az2d`(j|uJ&3>hgp:@+@C~_2^IUYkϟ?|{}^O(X,y؋ֽV1Ƈ00 {!,W[E2UB?&(<S?_ޙcȲ3|=PkoQXӇ& c#D-ԓ4>^|.Þ6{,Ηz:/b iɍTN ; :q6Ջ?6${U-ՖM 戀bgS܃WҝJآ&wͅ.-s(QzT)kde= u*^m} 技=Ψ8J XddRk١O+R ɺc΃1)D-u`: kTK֔ P,%)v%b;Zۭ̜ c"@&YP2:z/{W󴶥'|Zd݉p0O̻pYOPlhm˾hM*Х 愀QA%+>zo gȶSieto)VAAA o@p%b.'TRu$zg:A{NQl Ew~H3)ZYp %b9z:{[{>MWy A =^:Q%xdċsw*Tеm-Yz|Ik)6[~?5&}hA` <ԤGv>_i =EPv|o hT,}hAHu1.O\Ơ7tߡY)14"D-ʸxQzi}m 9"\/Cђ7#̑EJ=}O ^鸾uE$wa)YTU)6~l|rA T w^#M2)l*$`s~i_Bf I|ǥ\P MθEa0V G`g"wIOӦ (?Y@ G(O . 0$? %O8m@8+vxxרl|H{qpϮA  d@G~IENDB`ic05ARGB  |mъԋԌ}ԍyԎs ԏl Ԑ\ԑԑԑԑԑԑԑԑԑԑԑԑԑԑԑԑԑԑԑԑё 6QTQ5  ԅе{ՄԵvւսp׀؁صi׃ق¤հf؉Îcه̨w€ڇ‡ÀۄрۀÁ܂ ܞ܀݁ qb{Ç݁ ۊ !6ހćŀ2 #3xćӧ| 3?ŀŇߨ213ŇQ  #3KƇ}  03LJ )ZπLJ (*33-$cLJ$+3 :UrɇƀJ?]|ҹɇ楸ʇ ʡʇ ˇ ˇˇˇԅе{ՄԵvւսp׀؁صi׃ق¤հf؉Îcه̨w€ڇ‡ÀۄmπۀÁ܂ #܀݁ ז6?Ç݁ ۦh]mހćŀr^^ećZ^^cȀŇu[Vhj{Ňۃ^crƇ^`xLJ^^΀LJ^aK LJdlbzɇ!dҳɇJ_ʇ bʇ ˇ ˇˇˇԅе{ՄԵvւսp׀؁صi׃ق¤հf؉Îcه̨w€ڇ‡ÀۄmπۀÁ܂ #܀݁ ז6?Ç݁ ۦh]mހćŀr^^ećZ^^cȀŇu[Vhj{Ňۃ^crƇ^`xLJ^^΀LJ^aK LJdlbzɇ!dҳɇJ_ʇ bʇ ˇ ˇˇˇic10PNG  IHDR+sRGBDeXIfMM*i@IDATx읉vGlQdnw{ۖHpz U)`Z3PUqj: je_A  zVN^ϑ -vϳA  @A  );@A  @o=A  @A w@ ~ﻚA1A  ~`mȉٵ A Ǣ7CeA =F /_7!'[G@|5*YSA`H`w!gN ), A iRx?,A3{@/SΝS@@ = ?O@G cA  DDfyBI4 ̎ > , A #𤏘cÑI @xvrC>Iȓ$ R,) @x/oAo{ @E˻3Bo\lc6@{Rv M}v͛' @m|[UQ}bِ)l# ww?39r>-[|4f|A  6={ܑL@x߁$,'ڽ=ʙwXXу@A l#٣ȷ Qی9mS $  )u,|=Hr~6; ۈT6m69XSXC% HϷ;m_l?g15'ض;2 6b=ޞCϝܸfS_A ׏@ 7z+Bh}~NjW{Tn?W\_D ~#0Ks>Xθ5V铹)/ vHV/G SĹWz5SZ<у@A 0"uG}նnYGG_}Uw6@x&~_#q3C|Xk_Fr׼Q@Am!0IW1ckuK[-qk{[ǬMO$q ^5)e(>#ݾ^`ӜWmֱStK:9JA 5xףxv֧d͟Y-mcwNwߵL` E G W=ٶ%;9e}~o_WmqrwɩcFA }lv̒?Tz?klJwL` E F W<F$UL[ָ}ۤr}p*8o}.>s @xTR<ڛxUqmݲɑ񑍯DdA"m}eOH+9n~Zɑ8VǨ:qcX:nrO|.A  0O(^}>n{$G>օ1Hȿͷ׾|`D D /zA O*q!Pt(V}Ug=S(G1o؀#FAU!9^n13)[Q#Y}##_ͷn#s1D  0$eoݒdWeb4-؜(A  jH/G$}(ЫZ˝F"2 z8~=KJ^=1eyTzjkl|t]{m= &&SטHr9N!U5MFSh\`H`MA C uL@[5 魷5f?ǜ\Kb-EIhA <;)<;ozBn#ݾ*>}g }XuNmb2עJcTc ~!PvgZwǯ:W/..Fztr9.9i-2$#sp8@/@ /HJf Cϟ?7óC"] "3Sc}@ !B+"-%b7(\b?kk:V ǹS>63E)hA <)<֯n&;.j*WSk dP'@GONN5Q1kBoo\RH WA ! wX[^]]Jލ7*+€ĶmqlqHc}t>}Y7# :% 7?sX۞ոѯzWAHM7X$>۽ieV*A  LXz]dAP}EocFwwnnt_sGs4({*:9e1i>G$@xZRxZ|_|bq;߶%ZJv_'=GHw7B!dGgd;6hci-|5^6 @`,.6_ǯYRvK_XV1@wȾU!`uWs6e}n[xm1=E Db : z}H۷sn :9V!X'@Gp6])S p IXG9߶dkuE A  Ğpo)}mKs_5nW7:]o +_-Xzވ=ɮS"8 5 mH^R':\?΁(pct)uI+:'Kf_խz6ҍ֫ל>?ȋ+ ^w%a_]~DNn[:6¯`+r+A>.'NLy}։OQ6JJ,;J7o8c !A:^8z"[m޸̿TSGt~E5їb#]#lX @x;O@M_cXk1D} A:a >%=''S̝㩤:}oZA <1)<1oxxمۮ>j7LIN@x?cml_~=Ku񿵏:9ĈI>b~XW_]K#fA  ̡9!)jl++5/ T׼,XH$K['otgh}̫sr#~7) R@$FAiHip}>>>gk}x//|?1yd1mm><^z[Nw<2 ^'Q3.Qw{Kl'&?Jr]@ta@dإ%ERq n~U@XE}O5smOYfj)l # }@o/X/7:6Op;>oE_}mj~Wg}ۿu9Ƽysc$@σϐ~In ylxsI6~)^6EQ/)p믿.t\\pO8(rGk]kRZu!L9&>c0&:6yح @x$Rx$ lv(&] h/틊:g!tb뼩ٝ}?;BwȺe[e_у@A#Ã!u 徫>'ٞqP>x @)}?-Gqb}Wiz$sg\KCW:~וO:'ܠEg]ujwgg?;D ^=&BVwS侎# Z}(@ٸF!Bo'|fP=p\SPw@ i_%1(8R6T#y,ɳ>ĝn% ~~w5@#{L)d#]K} '"tE'5BNluRVRuƱ*4"vsRxͿN"0ECK4ʯc;nI_γ-),(owuTc(Ε#RJn!Xxl@\dmiq?cluˑ1dӾl2+ @){g~Kұ)&q6l#]8Չ̙VWmkI :ɼ[h՟U꺣s9eW@B@ow'io8tq|@[ȹSl"%_wE:6^*B@ ڈ Jy։{L-?jGy-k}N8 # # #C`nYw_wn}?3?]'7_9Xͱŧв|xO 'H +C璽];s^c{NUq7RSBw6/t8p"A;.*`f@/ՒJlW%q7ynY!6r ;G w vߤh]e+y+VǏ$?iul< =Kb@xZz>yUsy#m|ZRq;[1yQ+=w;ܫ?RC>H;@>'!li?m.`;!:ØUu$\G_7"(A #ñǞ>`Ibs8>?y)d5@iA  Jyb}.6ğf)c^;.j#Br~<O|PU7ER^pgv|^XMqZk>}شme_a""1@G cO=|ev%cZI~ NfThAֱӂ@A ,S~|sWgPs)tTWQ\XiBcp+@nyl@cHpt u}dT{9j^39x;Xa&lR0A  @{g]|f{n5F.0hZA B@O[>^Rhko>J٪ }<SD7+= pGU-7W1y"kv*wdV>jW1x@;!N0zg68nl҅9qm @YLGLŦ1|1m bϻ4e+VZ^~NW8ve* `H$mtoA1tG#pA wPSA!msloŞ @ǚpQ|[NG\ʿI<#9eg*|LyՕ~ޥs@R SD7 NF_ h~B֑>]&vTH:Ծp8@0O)?>Eo'@05S@AAp,s6|&k4>oF%-H́ȿ\ V3ik }G.!"'*p;S O~ڻˁğ|ք;%i_@;  _PqIN|2W8ɉA  ǒ9->7Ը9q`k/u ƹ?nұJ[ȿo_.xv` _ 6FFdig򿭏1َUI fS;2) ;E wkw=PP]}ն~.prm}l:> dz}G"cTt纉@{$s{__3?.jJ/vv9(ζn|VmHk~u6 @"w-ZUmKU~W7t_<% @EwD<'GVw |P=@5STBz{3X~)bO.(S ƑGc%] `{z WƸ+\@Kr;AqbW917Oi{NB')uA  ^ :N{):t׎+#($3s߾};W_Պ ;^#Xc7?/?$yύj7?+,)2 H} uʭ~U{cU6үZ=  @xTY]]#q}!@EvryȰOT8[ŀouF&dF0\wЯ'}@ɝk='o"1@~wس>VmdJ|tҮr0ziA  ^ :N.e.Nn dCcZjޙv ї~&"E^@# 诛n(>_L w<.TtIܛ|.WGi +Q@X+ #q-G>ǐsHNܹ֒ ɈavQу@A <5kVym#֯ySmr ߟ *C7N9PlI'y*WzpS>(G<휬$~_=6>z_?X; @^8u]S9o}NL[o/A  ^;=獜lw/xFpU<fF)ݿaWIcR"(A dCY11"7M׉NKO$V]у@A <;ڶ5~95^9@+>ƚ_wZwp /ӻno_Bsm)oyf~} A +f~ >:z2FA )(x{ Eu[9?n!??;u2ov\-4.%p@ b@Rvm|۵1;UIȦ7)l #@ ~ 36;q-g @o[xɡs ?_p3}|uY_\ }1yf{r"8ku$y @FR #3dMEuqsۘ. zA nVv'i$GOtO_jk_~壮G.!(F.??䞜1F_ص@~Nh)l#w@ G]`sƬ ;OZV@*- :6RΓSnYnk1~^ YR~*?RFˣ?&Dۥznu}GY{_1&H8Մ?҂@@ o?,YuM;tn@y'@A!k-V>ȮH g&\L|#w+tz,?_믿[`j;P!0/D{:icJxr'}?=69#]e^) ){Y^|#>w^wIo)nֹ\N A  VGqK,c(qo[1lsGl81+\sb6N/eR,TP}]׷)Г|?}ޏlOCd A`H`yWsGz'N0LyAA  ğvzͱձ:/rQR~3?q}*P@Un??g!Oa^cR}M)A% }}gtۖm"v= +@`DG>Z#]\xY B䵈<1!"s PޱbGʿ5G1DsþmBsz*=rWE%WewGp8@WR_y]fiXoWcUr]Ủ&/<;ՄՎegfK:UtxzL|v^?ҭ7"ݐ#[uO.e~?j>ແCzqoGbKZޮxcQ@@ > 7ٶ\'D @xrݖ&i]\Ւ>UMc-wS@&#p"/*|_Ⱦ__kWE&LJ}%D];kwI-u!)Ed g}n{/vm>pm^sdA ĝV]} in 5v# ~8"uq@E5&wr0J9(ѷϵJwXG$E5Q@GR_?2cW+k]N>A  ^J{.Uu<Yu/6q,I#+I@=Iqs0}("SU Qժa*+w>cǺ}HѴ_)l #}B }5~_IC=sd[:Ys#ӂ@A &De|޶x #?jkW/걀"3ѣWC`!7 $GE]z~{GzY vD A  ) hjjW=E C@qc*sdF>E ^L_;C~\>ܟ*G}Fy7 W ,xyRh_ L[6'bI}`,amSh܄'@xXQ>$_kն?2 K!`ύ` is|Yb2tŐU<*ϋ!|pMuJ%LLWïcWY ?:ri9v!؝6گaNrA 7@ oGz%r%gg/%! @q51: v}v>ogUkʮ:CR@> p\W4A(JsbBGYWW<Az.'];>)"`o ү축sIz{]m4wI1@^ǁsn.k|x[M@Aõsws@3 WWƷ]$katm7¥@x#F~=[f=[OH8@A c,O]u&vCsڷεF cmI ӭ= }%@r9U8Mo]7?x>^쒰3N%Ugs̈́t :};@'-7@ og{Es08-[|b@A'0e~88jӧ(vͧο\uKf+P6WD?ȼ|ꎀ3]?m̟ʁQ1J ,dRjwHGJ+X`rHs;CkSX%@ oڏlYtԚ9;72 }(Ǘa7hWt: 1ڮc;7q7ikp?|>GY k?O* hl_Ń\&,ݤK@l cX+_"Q@IVZ ;ArcuұE A  @i8{N)(?穱ڷ֏E̾)öOXix$Dx>RϟN\qm#юrA?`F}ѧ 1w A &RxMY#i N>F @τ]wUsiosSy:yέ1<*.Ѳ5f#׫JEkWs=M8l~^ِgLDow" } Qxm ;uB"ůz??Sʽ>WzqUcBw0:;B>Zo/˿&&}@ c$2 H5 w O=lhE'+ A  #k2^k^e^w?l"uAb?NV`<^?_CKR/^ TX\%?ês ; ceHcsEԶ37_a"(A VRx۳QA !` #_m]ssz"k.0VxlǰRVR ӊ+˩x+? @?ӛأcS )xLI8nIpK A JRx?-jgyPe'_K38',տwe@A`?l{w5d;KyU_6ױMO{L`F>"X"'=; (Mڱ.!.kL-aO^:C@'-W@ g٫E8}gѓ@A X;dSV"n`OٽoO@HۖAMA!cm|%nʖy|J@_t@ȿҸ R?aVP4!wZWq9^cˑ`V Q@^J_]W>ʷoJcA   }+⯹#ۜ}kcCݰiA;* qX 83T&QFTQn M8-m'$HI XA D D73;`A  q =5uCfoĽ1'Ǭ:>%EU ~on;w/Oȿ+pɓs>:wN tWϺ\K|cH)5e@;Ɩ]7 yW^;> >tl>+{|@A ,߶G$ݯݗO:ߒq{mUq_F~b'+_+M'&]F) @m&ȣt⭰.sQ1C Ho5̉3 \\H< 'BiA  @x4j.Ȯ:政LO7puNU\@6/:>U`(a"8@xJRxJt33|w? XA Bn0ek:֭Jto*k$Uz׆-ߜ%vlU<<?TFe Xh;R˨@WkP~f_wWq sm9E5Q@xRx3GA  @x2;G@8gJ>m{zٮҹ ,iFɕTRXy'g*\_Q ]k_9/ 6]Nu'M[E?لI$c#c#^5 0?sa[B/oum^%[GNm"ι~$Mr}e H $B|_sz\W. d j|jm$mN'f_uIAn4pSȍ@R7 @x7e8Z9M291ݿlRu#Gss$ѷ%jk[Bs@,Rݫ8_K??(S0`+(?$l&"@ wDԷzl{ Q@O@ Oj|||#g @#g8xxwJVHnݼ.1Ǫ6"=}ݬѡmq{MGcpS tuR9n?Edy3>o%HU¼'?2q~K"1=~Mk&y`A <6)<6/ @k wo?ګ"}R_mCqGB V `}&* (MODqE(pW^n˝XkŤIQrˡ<6I'軿m熟c2zUoj<*VPd';oOaH8c* xo߮D*3ۏZzLƱ?seͿȿiA GF G4 @;b4m"Q~6R9Z?1JƽG+#~eQ@ɿvb%ȞHWtE/޲ 2sI:ύp֎(A G@ G1C<>:n1@A 4|>خ˾ X gm|e6O;lvsl@PZAH0A  D@$mT} y%?Ľ*sՍH:W烇;>Z4UKu%WqGIs#cɾ&b' - b@IDATiidjO!:M}ٳ>w?Fh#w p+!pKW'i=ϿCلFy~ߧZ?26ySktl$wۨ:Wvi2>Hk12'GcU.:w\k #  O>]/_^L^QPJ^`sͅ@}7>HQQ &Ixȉ@vA)9A  F1AǴ=%\24\^qo$^%:Ʃ}lIm`0'q#B 5_U~;c چ_v(V>1 ᎍm}OWxF#JE "~A  Bk\;>7'1o]OO{vϼݪ>?Ǖ&6rT;EU|yBZs{wzIn_j?6γ$h=F,FA`R @Am G)w|d{}?cYcW 3䖯  |[MU8RAO~饁뎀wDm&빕]}CҾ$y!0s6b1@H`B @A`ך?(u׹{~t)m3n%{ιy+K<@) ȟ؟i=ЪOdTnTKQإl1%M]p>qǦ!Nsz5szdA`@ k( @AϚ:N?jXoĸKuЭ׊-%[&+.TD6ǰ>'ɫE; V܉@B )dA  x꒓O|Ho4kmF뮾pߩW~QV}ߦM%3/02 v$ߩ?i;sQAZw,T ]qjmO%|6wX&c?F[}Ma݉@HG$vA  ^qua꣥8}%[zU?1Zx˿^t޾7b#q?Uܟ)cilggg*|WHmy&+s:ύ~R}ws(F8iA $ `8J A <WRǮ1#nǿϔ+m4k y+b̪+_?7oWqj=%=z @D?^/ (8@^ xzMՁ6/Sc|tڨ(߄UI6ć Ld|) %)˟=;@A <&_z91KO3yޜt^9='yuX^J\GkEJkRC8 2/ $v9ׯ2*@ps|&KGUO|Wϣs I>h`&A :@b @A`m\k3|uLrim;>-#~ƶmׯ';DZt9W_ '<Wt'gW9t'H 8?k[,7JM6=w|O ~Gs_l֎(A :@b @A!@X{U}#Vǩ9i?MɚUKs~/{~N}O]ە@b؊;DD !o 0pӧS}OpGgMIOx0&1+'V9 A";ѳA  # Aqs,GA|]$cW>y^2I%>m[#S|7}v+7}N2SmH \НWʹԸ<PdA?0gYDZ^%? 3o  @da`[et{IVchSҹ#Um=ڈ5/xl)_3Կr{y biL`#˥pWGx<zG͗/_믅r.__`/W㶎wwsHC}UxM 6A  @x Viߦs~$>7]}Ω%16ey֑϶s^[/,7Wc>W{#C?!q3+.r9n_ 5'jϼ}&{?ӏ1kx  >H} @Ak4/獤\u t}qKre] g?qb>c._WC>"|*T8o2+;.|y6iXsY <^3pK`>">٧ @A]![v!}=W ü^6@ڌa>-oRq |D}>/T*?З\鎀K]P\Q=* 0LmHy-~S:-wǶ8Uh`#,o##C MGOO8zA  0F6^8yuHsD:s=vVTqͶ@ڧu\9贕$0 =ys.ϧRŗ/_.~ſU$k~h3qNt;?}]%J~k ‚iA 9) A  ^'\C:W\nuN}>FWI.먾^NCŹx<? D@ONy.uB/\J`sIgI7ۣ&6~4һ+lS@$FOR5{@A # ޞb+.bHwk`m6mI^ zi#O5/(v7qCOqT<`Ҿ >nMz} i1dĹ՗"1!v8w Dv<  >v-yow[Ync>7xO]ur3'6 ٕpQ/FN^x"Nrot'K< CL⫎%9fOzq6po5ov@x*,, @o{lL!&.8֯ky{^Ƴ>%G5i"zy^e1@+7n_QPoW(N7p;x\@xI}hrmԻ oITcJ{:]uǛl;1@xy6A  ^3ʫ;º^tQ7e}&any_VsH=TN~7zOG׍e`z(`.'E=$ѧT>N)poe/A7P @x@>!ڶ\0b|6mlj6Rm h?|v 6͆3Fo{| A  p\HsYܸ} Pu:ՉݷOH|RB~Iޖ<Q}?}ǿׯ'z,@X\*K߿?ya`]zbbmk!d6~e=n>dW_w8S]?yZAKP]?0_8;NEut7;':bgc;Ч0] =}#~HVAo nWcMww Dv<  ĵ|5>z~kglD6_WoLkYzcUDZdl?خ1FI@N$dCWot' "CZAARfO*cm4EY ^o @oCwlHzCj_ "-49KBۋ.Gn݊_kڭ\ͧOGTF6^j5gI?:c8׺@#Fҳ}O`Am *u\yA AcI}ۣ~9Z+:sֽz,4y9u5oۇdN1}l#{ݶs-Y;ۨg*6ʷSmxئ;N(K*qnw (T&\=.x4;dfto KMw0&M6H`Au#} +-׉[s.9sg?F:ѧ~,X9{*csI>Fʧ!֤}sެ6LN{@_.?c@ A=)p"P);Z عk~ğ"(=C =A;A   `9}.|rh&OIxz?t|dOuSkqߩ"fW2_s;>%[꿈T^ *GWOe >___zAS}`!}w\j[=)8]_xߊ8k k3w~oIl/#,A ()(< @'ācrW,|Q;wMGljsGq|yqb#3w?sjOHEZW-G>_/PX8o%ȿھ IӧO'"\?W{[>w!I~&ĭ:3<VǷ9}k?4X&U=N/:P$/ TDw*G>(?#Ntg*P8h?ߨp-RsWGdz].&O=>o۶sx#n_S?]]֧ƆЪ{k= l И|SO`]ם+}-@. ]$L-7fx[IVg6b1@x9Rx93sA  m)ۮU3No{쟑۶Y:i}oʟ MudBoߜ1Fŏ!ԝʿ|2 ?4Ҭ|bp~$܍ߍnR}k/m$z?aF\=$b)lB+8)O @8К!&V}&ڵ5`W>α8u^;-qSc ΍ڔmHKGS>Ъicȿ&d5k.Oh ǏV^0c&Uªc-?v~4#<ɿ%ݧ;CkSJAHA1̄A ׀Sd5Cp} L'b_uF1rwHNun r_V~ᗏ"M[1uȾһ.2ׯ_T w6 ?HJ3ﳈկz-O˗IX賀>x} }?~%!fC{\|ǯs[GN H BBg @A u FqKr1׹3ywj;1K-!yD@B/g%m|%M_ WQ#r/'x*nݒh4]Z+RX% ) 5 @FiL޾uAanuV<)uN}E;,ɷN*GV;"|1H \ȿ?_/sL׎R?ŀ] Uɿ}='iAHA  @؆sD{x%Ug5X[:o\/[|{TvG+ h@g"n/$nGts_JcS_u39_;@M-W>Wg=m V` I@A  pēĺTmt)]egwJ:Jg_={>6';WF㱩k+?aC?p_\ p;xIFS@0ᷔkg1uuӾF#Jx>Rx>3SA  vF@hMw&SCߖC_V~XK~?Τjt&kWoÕd#Ro_}h_c|<=pGx\z6?nPBޓG?ʏB2Jݧy'<&;<)<7 @D@hTo8ͽA^YunEzU6GzQyǪ=rMuyPc\y@]Ӂ8Z_ T`9Nqޓ|}ri*Rw8kEϒ.S:F FO@ Ok ct A  m;8z3CBU1ǫmO?{ʵ,t}sCA`5'.q *\~o< YmUv>m-c5r|2c}$65ϫ>t܃lb9g$qF9mix/b <\˻N+=p[D%ydAWp"€;."${vaݶF}/hu$}4a"T@ iF A  Bu((mJM[)ZS9yUϫ6CjkW%eD5K%[sىM_8ne}*wp%s1$ܺ>67EDC 6# @AwZ5Xa~ &Hs}^booKs&Km<t(f$]ٷOk+m\>]۱[ .]KCKa#~='n7E5Q#c@A  dل2U^usm]`xMU˷cmiJFw@'_CڧUP਑nru(g?k7z)InIZ&kG   @A D.&NvnJ߶G}|*'U7MI Fۘ7l&y@k׏h,WbI[>;(]5 Gwh+}#Isvoc#F 0 @A#`5%fք>lZrB;m'N]3;xSح I>@1>xL>@EuW%䟘S@$m\Qy<6yg9\NbA W@A  &HĞ[17Bg>z/>?K^菾[wܲo—dhkn*";RDT+/`Bsp>l_^[wlcZM}~iGx8)<Ctý.,Dbox&Q#lZ#IM4TmzbU.p]d/[{{a4b,}uſxůt?}t˗+'0_\IjWߧ@tp!B+ٟkm8c Rxl@A  # ֻbp8Kakzs<~jJ\[|\6n+"<H@nՋxd@*-[ }2R <Ћ?#?$9\`=K1\2l{&KC ^τŴ @A!1q$}|{HσU7gΪ;v} c|hL, @w_ q!,ˆ6wbEncz5%$ @A lC@l2zI'n֑5=՜7}~MݧΫ>XԾ?Ph$jnU y_#{Lx wIJ*)WNZ6;nTVR^ȒI opzI9c웓yM",B iR& @A {" }%ϜN1zjW쳴oo|!nu1@+|mkO~]_i%qq_4q&I3箺MpsF,F0M"iA  D@\$AUG3ݜ?dT#1-5dM:pcUZ# h;V3<*# b~ ٛ}U\#'cޙhG#KVKnU]tWUfjZIp`Hr$͏bs!FB6A G {(¼v;1 A  f <)xV꬇~m}|/;ٯ/QA8;1,`t-Ub?"_ZklZ3^wxQzb֊1?c}`"CpG7oD2O.~y]͛>v

>7g/[?Gk.|zƹGWc~j|2Z~Ÿ 6 $ppSfEdLŶvKoc$ HA  iPMui xwukg~ %qw<ӡ5}|}zRKwuNj?b^: V,> -\J?W?~۫+-w/mFa_*O1' {m#/6-&1SN?L+ @ρ<\u:5}*ou_gNFw e }WeF<s+扛|DZs8(w]Zpmwς ?- ;jυm#j!WFDӂ@8@ pDA  {u#_UZ}iI(ֶ$Gu2\?S1-%=ս?'nƀP;W-ৎ زEʔaROlo]#4?Ddࣟ8H A S5j\[99;1m e5yz̎=FvOz9Iu+I*o? @P-~"~J0 kC(^ @gnÆ݅%>=|4, ##gA  /A@Ǿ0^ b\ۿnyҟ16ѹ<O=Qc\;~MvRt]hKnڿϟ?z+xS(޶?,?xS8EOʉX |جg1bm!LsoZumN0 ,T@Xa?L< @x.Tk[9%fK->9mN><_z٧涮;OGu#l}t.iKm;gOS)jmۇj?[Os_(뵁& *ߗIxk..>s dybJn'[רp"">"Yz@A r(\\y+4o$;er}e;ƼޯN?(GOwn}/8=uiϾ4 <xV~[D-2q0>.<jA- Izd"@NbrOo-͛Sy`B?$Y{&@A <7g:s dk`{l__}G2:7|smV w\yΔ9[1= <8_؊aRMTl{Rr-Yp ::x̛ȳMd`;Yxp@A (\P2^Z[s>rU|޼iu#syPbmk1PocfHVxF] L([4jzN+N7zUL?E'E%]Ӿ^uU(8G,O8 A  ^ ';v5ߜ^o] [|kZcRAG^gy䏍=ߌ/-Skv3ePo?)g+ _ Q@<P[Y5@!lsst.4Uל=([Yxb@A ^Tc,dͧo?/E=9Zet+Er.tݥ?(?cۿx\kjAcw@ܢTn.Mq#]OnFd`~!>L 0Q(<@AM=ֆ\1o[f~߶>#E8yFT\'z[u_O!OxdŁfxp ~ۻ+4͵빀׀|.t#k2E5ᇨ1hyG?# hExOd=}KA  fP3cy}jJ=f͛V]mR>ZTد}#u<17 |BQϼy35WE))Ե.pIE Y Y+.x1@]6B3oJGg}}h; ,1SA  o4<} Vu=o]r.\jb/G~mkR5Z+Z l lDϵ0IEO/;Zh0^[F]/tǟ֏-y33>L' @ "N[X9ɥb ޾\!_:1U_U~#~_M+̀ՓUhy*U 4@ۃ{r] ?8΋~NWh"#Yxj@A wl-+ubwPZN{؟u[\ۿ*6^1_SHnᷢnEsz.ȧK pj1F <.5qL2W{*ӾЇ+]\se  ;@ C@A  `T}11;՟mUv^{z*%Q!iht[F{Z[;*?[7C> z3@+5or6x[- b? |Tۨ SlZL墁*V؇q?I=JW)?N=Nr.2vK@IDAT[nYX~ #i pH@'*W5 &^TbP~?9p5䴎jF>*y^3snjRQ2FێΟu=@oZU׼畴tp)zbNp}A.u}[({R|usaV '=GYxKV@A W }kN~2<°Uy S(cqs[)}}i~큀Zho YWoD[+r\N}ScN*8 Z8O[wŸG)[#G#[F o؃@A T]@@{K[}Oo;X8*_55J?3>m@s;5moWS_k7i&PO?f*)ۤm}"|l0Z EӚgkv;o,ɏ-A  =nsAU{ֹ*waiJ\m=߂5Og:s;Ty}}NU|B]f3-+ m Cv\b^Hn`Ju'V ׺Ԫ~IE}i?+u_P65;@1>%>5 @/]}:=o䵾׏en][y瘣)y@ H¿x/܊o??T_h'/Z u.hڨ&؟[}~bHlv o ,O+c A  G@׃zIg[@H6eׁz"d(Yv}NQ-Dxd5:[A  ^u#2o7)y՟~uL{p;Z 2>S|܇h;S""^+YxL@A W-fXTMQ7]a#=ݺ9jjwֹGԶG[~.M"cO=* Dd;mß`wXQY)~<2w焅u`^ Yx-D@A W #:*?p~Fl=TE͛{ouКGQ }|z Kí hlPH!@5iq+.J/ P?<~ZCc\W‡}wjQ0aA!Wad(woDu @A7or1ySrOW2y|Stv|}q.>v,U.nZ7<8PU<,Pn+"zzao.}?s> vˋ3E/F t@A jG/%e Ďl{kjΞ>#q5Gu }q]wb]?~_ WZ ŃX )yqma9F!JFǨ?cSu].#kog #۟2s>%<>T zwzۙ voO)x;'W5J곕XgDm[O?;Zڵҏ;$׽psoz=\sze:0ik[Z` f7qQbԑk0E @A S(jSzپsz۟ǩqt 5}(t?.{:fcesEU6oJ_ٶS*t5γbj޴.(y_+V) )Q}v)֌ZytsJ <[Hvza@+9Gtn1_1Z*Dx)Rȧ @A!@AD!vJ{L)1K3zhۇW֊m㜸wJs?}dc Ur8 fҚԧ @Yr+[8i!;m[.u遁5Hw:wn!@sM_?FA 1&Gx!B @A}"@Q4WEQb*g=wm7al奼cd?Ce–WAS_"Wg_ RRU_łypԅ\Y P@#lA  7OOkˀ^@q_2vsk;m?Ln9L7o:cwޑ};c5ojȶJS~j%6Εiz8`M:)k_ʻ௾U}vrօxܟu<2m H4!?/F t@A | ({]/Ȭ{5|}z:xjy :?]lҜ涮CWVs:oOḵ|2yx۷Қ1oxzT:i/h[=˓p _&=;/lq˫e#Q.ub"+uǀyg隍CB @A |8gN1=ks1o?dh[CV:ל#]Wy+n_ǻ'ߒ_[_sZ;WSl;V'4kچ**@+*W;wA`-+ }rB${H>^?3 τ@ ؤ A  PQs!X:;<OQX~y8km>Umk iپ͠\)}Qb{Mz Zomŭtso2n\+Wnϴ}?3vo.MϚlF5, s#A !?ohjA Q˳wޏʕǿbil*ZvYnu ?ϛ?[eahu@veEйE_5@7\2Bx&L&mA  NA@@+N%ڐG_5okl[?>z]<~JW?go5wSk>Hzy*gabUz:)iA`lVZ"mrq/p+ɥN*U_xpǏK܀Z<~6/_mnU%h.Em`N_uȌAGL·)&\Z3.T@!mńc>Bh 5?:#}Tt6ae G!sA  ^*TڪcW1Ai՜#qk[m5H_oGq^y[kZu+|Uds?򖣏Gvs_e> klž>/;: ]9k[{5@{Pv \,۷omi yr҈=~\[WXȋ߰  D 0A  @x*AM9Ho:8Fs:OAl1u?#Hgҹܞ)7}^_O1Ovuy{]x{_=4z @ ']ŧg!@vEcG+9ډ,ݝ<W]5j7oZG}gsՇ?WX!ӠUqlN\C\ڮ#ħ5xlG\$!hW5 uN/.\Ulч=89kQ d`Hq A  K @+? zyΆ_=r屯ɣ֭>yɷ*OU6oZ-Qlߵد2|ιSm8(;Zm+jvտ$@onпR.Z-}cT~yOrcwDy*Y8g@@!kR [GӨ;*s͛vyS|hX컳㎕3[{>mپ|h[g~bc.=&]<>iXi-@u.TW"+zp"vzEK}",ЍmuПL1sn!Wud=|m5\z8E6"@- @ cCWu֪mm·O<-Y,xbi^8ҵ7o^s[~vu{mZ/%c>#68kEA 3D@A ׌zu;דg垮}}?9R|o{I=⭫^ࡀ7qj=m}RO ߿_p[e`T8tJ//w`[jq9}WsNO Md`Lq A  AUڐ)~UOVik^xZ֛V{+;sQ/)׾Gu\>v,mUw.SAnEt*qbܿ"P}bBW?]?gZՂ|-+/5|Et?.}>&s @A jÜӡ t\ts5V4ekȿ׽\6F=wcR@>ogoG:#9;JQ˃x@_TIjANؚp^+ȖV@+NcF;E4f:?y8;9mLS|SgL! ,l).A  @x-Vy<ȵ!:Uu[R_h>^yksQ9U~ͯ{Im~B6V5?۪X䪫oC5,Wd"@E+& 8 @Au#Z`N~Y{YG:wMyWO\V6O5Z||i5;jsN}S^H"$ޅrqP;3B l(TsZk$?E{'ζJ|-w<,~Dk܈wY"YC& pK "T+?ѿq}.}8TX8GKsmRڗh\yTc?g}~9(0ٹUiN9Dۖ~ɇq4q.΂ (z6>̀ſ35qT>' ddɠL @A =eU޺J+o_t\s_?KvocI_txU`A06vŲk)TM1?<"(»}C]_js!slYulՅG#!K@A  ^*r6Ѡ=o/A)(F8nsU|IR{cح6ymYg:D=ן+5?6d5@< I=8/S((.[ bq̂Eψo+? J#Wkb,< I@A ׃P=[g R*_ljLXl#)7p5WWs11rSUW޷Set`ogaS"d:اvB_j[.;"'Rzs@o֞COB9Pܖm3%~d>0A  @x;9(}zV޲s`[j)j-68bu 9E>zЖؾ P㽁*FZ"[[HƗ $@y!:dZĎ>"3_‡1Q~l?> @xgPMPbz1,_w5X+o^w\kXc i^w\x^mUzկQ Q? }=/Wijm@Fۯ_пk]-U=C@~4Ǜ//ktwݾ '#K[D?4i|^? ">ܟ)H_ -|0O[mC2q[x궖sduKrm_rՏno.b[k9+J3չy.~~CW9_M-$P=ֻ皮EyX 'PB~1OP*_L3c;h8ׁ-B@H @A ,}<:Pڈ"5E<Û:oS?<&׵-ն|'ZQh7Ĵ9M?|Z>Z(.];- 6,["5Hߎ|Zps)/\Խ'd`@A  p|_/En娱=?:[SCLa]K4EOt>SU|ksֱ<ڥj/:X{kr׻ue_F&]WL Ѣn],Pׅ4\`: ~StvhC#Hf@F?(տ} =jUS)>ȦH9-c⋏ǻտ;&nWcx7~f?;n=9sey[ )?KEDx=m_E>wբ&V;ntk F.ZBA;ۜP曢 .aYri{M?A ?xfnJq.W;< ֙R=Gsb߈gPZ{JoqjL|GsMOMi9֣4\oWEnb ?]ѿU'mUo߾] DNb[!n?A_uWdŤ$}ggC 9e  8s|Qs976t>g>G6ĒxmdGW[UGܒ\mMXGt6~DѦsb}!'&OQ%ە(;t\ ;n*@\ 6nj߰{!Z{1J5u\o@A  PAъ5ڏ  }'G`܇zZDŽFLmkrT~U<}u|w 9L{:hk㫯yy$s~x/.a\E<;>5t\3]5@<\ɴk89j#7j߈}w9P4;;ơgА@΃ @A Aql݈ ߵXP6d zXma[-2>Ǵ1q-K~Uj"+xZWe|3u\U] @N @A (>(fGtiČEmG䩇P렴֔E_}F~[ǰտ\zVyk|wx9FMGkf37|ss\;W)yM o2{kɯ[%Nzy_ǾtlG3Z _>vlh<1;׹Z`~|<>8 @xapf(\u#[?||FfYN++u]9,kJW[mdwy~5euk(f[SMϴ[gZmʯ\圆gQ 1mg+⑯d?]Pj'ƀv]sNbQ~+Ы}#5A3 @Ae8ql;s>Q](^Jy~[d|ic[j1tKO_-~sy~ϴګ+oJ+TTm?lW[5rkB~wnoˍtU|AZ2MN,vNQCFjgp|gA  @xaHCzx6u桵WчCin櫽9Evyn~?V>&ngͯڏw\w.t֣6ݟy{ZbN_Wrs"ZОJ{( p{/F-] /&~?|mKgoIdC?~iA  w 9.~wO>Ppk=47>֭[}%_i3K}cecxzے\ms?>U۪l%Zmzrp1(u:uOW@+-?]< Pa,_lk%Agu YX( @A <7*ZA>] > ~'p?K^Uy-5zت<ǯc.p̈t}^XϹ'gtCy W)Ÿmwpv[ ǎvnP; ׍zYvZW^v pA  @xEM0FqRP!_xs<ǹ*YD|f|;^ߑnN?uU(璽*otPJɭ]K[ Y>_Dɏ_P@B<,gSw}eV'`?:Lv ,0 @A!@R^dZ!ۯR롴Z4:ǑwٹF6=|ik#ct>V~xj̈GgZ,=OB'_upUnVU^kGxn?>l'lIX_ ,3__dso)޶d`KA  @`ҕ(͛<2bŵm[W;Frs.{1'`Fx]#[u>VdFԺ~s^Mݕl5*/uʿe v_1lQT_n;oCy.R_FſBs_@@A  :EHfvx[gr8Ow̒cnV??.a{-nQchi—Ի+?:Xڮ}"s^~|Z|mz1Tnz!:(/{y#d @A  ^ ,lar՛7ŗ昩i/a9ƴC񙓭_9->s11]]ٶyQL;F}\S絾|οVO U W0>_zo߾~h Gqwo =~M%ڦ9y} )-]'Yȉ@A W@-Tyi9j^ :U]s֏jF1[|Fq[u(r˱X}qCG6֨د櫺I>X(`/K7]\ ?U"w ;}{~[.p!o[T>K}Icm C0% 2^f"m]mt^~k߯y뜖fijy[^їߪ}F2c{>5ZSGF:%{oe^v_s%c\ߊekb{]Ku[!w:~h|Pyߙ~n!h8b y`'g؈@6 @A $*DӜwMl-\ٷqܘ[?h|k>#ȇul#Lks^gٴ\wQbT7?k\?WkGFbb9j=m|m'*%fNР5\'?/Yxmf@A s~Q">foS|F<:k U9n1UW̱k-{˵z|#ݒ(ιk;TOv@:HDEXP!zmW>q 9}1g[LE ̂@A wxad^~+un;=ǻjnCsO%ύmk^^ȾUG#߹1|nwjuf۫@ċ3]g{|Dە᫫_|_&PwT."~?k,|< A  'M⛘h%cOʏS]G9Gvts9Sk-T{)vdoN?79Ro[7,k{\g,|OOhſbtIvVr7E7wn^--8f&TP@A 7E 2|۶Ny_exZ O*7~Ҿ>nnY>z|KX?e }}Mu*y%W t tU5-:XPѹv<YX+o\ ݗ~Q`.nǠ5潼K,O8 A   Lbzl[߱\y-;~ ]]Ӈ}{L{l^Fc؜s ۮSٔ:_wuY J>?uZ:جn]F ԃ@A  }k~Df7E5>[nzhj'ȏg-{SecXV[j߈.~ƛ7X_D \mD5nQ@ YUWWWi?M\w@@_.WO- 76)F(c]񇛩==I |Tr.^'Qe#z F\cx~'_m}vr9jS~Y_ߜOp9ٗ皓>G+1|&="ONWϼ @Knt•moſxn tB~} e,ŏtK~Kc¶%jϤ]- _:/w!ݺPOZn0PcЧ}@?L9 @xxxP*7e+=u棅˹fzrFϺ5=z|"Z_#H77c|q\ȧ*8 ej()ۻ 剀mw1-V6SCi.iw?~F~gd}NA  ~PuU6h7=x9{>='R|G;kK->t81s՝2޶&ƫvEԿ*~ڴ  |!O-}.aKZG X A  C@@IDATFS-HUƞ;\\\cTw*}c[sd霳'/E=9+Y"(;mY ؃.h-{~~z)}l9-q[|9}bs9gd9 M .;vhw_m ;uRpNLA  @xmPԢt${7S⏍dz#זƫ>G?5lkkјނnm^K 6 n{lo+y .z @_tׂ|_7oU!.)1sz<= èp3%}^v5sXl59hg5p|1rO5ŭHܩwM:2 \oV7tlMBIZi֭;?@[o;B HS|?Ҽ3 @x6uo㨟suu[^˸1:5ϕek0 %J*۝v$EL藌}jNyw} 9~Y~(2 @xo)k[#%)NU1Sw켟Shcƾw31i>ڭ%>-ObTٱ#:ܲ0B?<_y[A Q\tkn<SK?}DZ3sVuA?ZlU?׈Zr<6~3W@^mG`L A  k #rwd۪#}רhcbZxKVLrl2QHԿ淿/A ͛7?wizJ]{4/~C A϶Her?:}K];w;.;.N?bLm7E?Wۆ/@cK d|ye܂@Am"m}1:7?>~眶Y>} To njXLeh=p:x6oG͉'F ԃ@A U_Tb=>cϟѮ{k|D6zz^^"wfJA  E``4-}WKy7\@ActOABiC7C @A  \(=h)&c{Xyg4SܜʏjwL>pc s,@A  Z@?G`$C8υ?55/ p^޻d9- 8"@m$A |,[E,`s}^/y/;tVPr 3 @A @ c:7.cº%j{z蒭C0% @A P~+r]>ݕOE>UQp9 @A-boS ˟[g @} rm G#g Y@A  @B)LsGWsl?_5ZC>_NK`A  S"@SM ~ׯǷL; n9<,<$A  @xJ~e~-'F7Bqdq%: @APK;෌SS׎}몿ylKv3+Aq<Ǎ&ѯ x*ǶO;rc>?0\t7}{/} $zsLUoƇsݾ!%)ӪO#u'z#9 @8۳FcT6Ol'yS\G@7~Mޭ~MM:P"yc;::,7 A  LPܗ:x%V+U[>=?Yς@mM?)U= .:Q"'3ɂ@A |T0K执9娼}۝kmw?m=7Eo~ފ)W~<n> A d+@3{TzA#_y: A  C}_>7{k.K.-7:-➢~:ždۈ=X6QkqW دrR귔# G {( @k Q${U ~~Zô(]#yI2-2~AEGg{I6մ'}C`S\A#m,|?SA  p*oWmojk5'O WN=b{'OK nkm _+4 ]꣘G Oi2 @xLP}@g;8oW'ĜqT v~Bb bq7};:}- LcX8," ~GG搧|>\3gBL]$3"M7 DT$W?~ ZWދ>U+>(xBijs菻I|IWmU5r#X|y-o])%>_"1cs-QA 9@A S_E-k=7lk-w?ZW~_lY@?7:ŷ[Dm?E&Ʒ+]:5g @A`/->%e 88@A @+CWۓ)U߈roTO*iӥnt)K2m_O:))Q~_ ~ (2vX@жCNlY 8~g/@^t@A _E# g:oF-|zoK_=ӕ3.b׳K7E''&-Y\6t!?o\;|Z}+,<+I@A @1v-/z%ݵ;,MǞ Lm'Q PNx/4U~ oZ|>vϒUş E-EccK Au#3_4ӝA3A   P vPns O~ُ s,M*Ѯ/E- Vn`KY0-fPط⟢_ v06MB+!1 w{;jakl hh  @U@mgF\ ?zd,;v0]6مwAP:>M~?, o- +-SG#_s['lB `SA E7ſw|W ?g{vEo6"[C%^e!6\Pm!aO4/lſ57z1oi.L1g|@xYQ?AI[E\3Sbe2>D\)[=O+m?пvhz-z- 9,kw(S;Ѷq]:Aa\<!lC;],m`MoiᭃO{=͈_Wy_קeO˹hJAm"*Tݿ?UЕO3_z=Wޕ] p׫V۾蟔Ӷ*)]cho'yɮUB|Y€G0yXRR-zX奼 @xJh&׳!PIuA q~*:X+ m?YWko. 4 2~`ґ=@ފhſtt,4r04E`xOc1A  !m8 ^a ` &b*yBmgF.߶s:v_jJ=Jc'yUTSFہ^sNOߊgq8;p':*ر^iK A  +@9}< ?U[@Ly mo[U?Wo8& }~U^b}Emv_SQVċdXmi]OR?%@[V?R@xEԂS1Lq|{@{SOT(}l,u1`?/_4^ h `REOҷ_hm\8 +?*,V@AQdQ%?IKlY- PY iO]ŸW\;ڽ*)Qy ] (׌TĶRVht;~z?s?-nfyDb:Q1R7^zvo jySߎ̕Kn`@ ss36-2|A   ,<*?QKtxxn F)u7*ueFǵ_O0=s-Kʭst*0~ ?m˿Gvc ao/g<\ǙvL;*y'\"to}L51>Qӏ|Oձc{7o@{43 @ PUmló;mۼv_T)sE34[Uk.\woc O똫*40 - mVp[7,-Kay ?z#,V ([=4 S @19@A v(u.qWa|ދ<1?W}_X7.йFn;> v h2Ps< aSqBSk,\k`C S!B2y@A rX/L? [TsuЮSs0w_@ xz( ug@9)5;y͗w s?}-FDžl%iۢ먐}Ӫ)ñǼ}B@A <,< @x _{pgv]5߮# ܵ/-])~t4EW-~g@{ ?PkQp#lҰ5t[z/wao1o @"SK\A 7 V]* 8-7.BC)ء?joZy jvHU@+uXN<ſx)m<P1`EGplOWum>w\շ򏍯G ˟>95@A+A  *SUvջPV6|?j.;¿$c})k4@#v4@#;ȿcul{-;pdX*ɮ?oPK [X%=qI`u_VCCלׂm?6@#??a#4@#@fzWV\},->;:a99DA}U[4@#4OBO 7@#4@%[d !'o%BJKbR^+}Y1:&~ǮK;m.mǴeFy}{wytFhc=}g?߽FAJQDMdw :)w{USDj٤)_mi _3Gq@roP]7MLXGp\szt / v\ҧsmFh v\]+||uս߲A!I\H> 5C!qO d:mGA19fdc`4yk#Kҹo*{d?2|n{qF#i#tn#4@#pR݌6H+$քVF&! p ZnCq$P>tBi:8;J@Ǽv ',}žUq ԫ(ٍ@#4Ap.4@#leVYVqE~!rMR{ ѧ!e'D~di(9͎s8&ݻd_P]})|cFuޭ5@;^nhFP,oR=8ݼB˶v!< f0fхtsPri:'Dُ }|dU9ćKzØ`'xw#v6eR):[#q(NFh5JFh3Di;l=']!ŃBC!CC#-:Pԭ.8J棧1rͼg"Ύ_:8(mpTaq/ӳ^Q)S4@#< v< 4@#q<HźUnȲ2]!=='^aJN^"S2lgߑAs| 8 \J/Ӟ1eU:4@#< v< .4@#("u s@%]٦\']>j#}-Ď<,p,W/@>Rqk;u!U=i %,딬VF iFTh~r=7PwӵNۏG=.}7ےlSO;u;!ƬyH= )N`nˀ$$=Ƿ1o"YWO|=17>௿: l1߫8*`5mgm\&ײ38];i<߹>m#vǧs?O?{(@#Q 4!r|'" 9FZѽq-┲BE<:a-vv̥hۘ#N vേ}Iտ}u]}x-;$ &Aj3~ik@#4E"X4,C·meH2?'H0 '^O]݆3Z&zdXlb z%S׼@Y> 8> '@#ޡhF8p*T4 h<""qlPK\w~H'?Ik\MFڪܔYmu>Ll-[+c9![oFh>:PC)ÍnFh.XboutKZHs8VsB0a7V[kFKE<*_[ _tqϹδ18 rx6T[v ;4@#4'@;NaG:h@x =3vpwg?ɼ`WYg\V':}U=s 鏴c@v#s_y@`?=l4@#p2d>.l2moKCdO/⟕KMIyڽg@zoo<pMG#x^CӟXd.iG: b#{wu8@#4G##Fh.Ay ` @ĝ$Y+ r[s5`1$8e"_t䡰F)[Rce^~!_[lzgMFh@;>Cx=!g?>2z~C$B!U#K+?~FFǮS)ު/Kmߊ! W;$ɫ|W_u4:a e{!{ɐ{gxZ"Z9@sk5_k~ \kel4p(?|NZ~ys)!L{F@#4g@.)OH~D벑F ч~}~u՝{k|! 00!^˄W9iϤ_;=mc\>PlʿHէG?/[Fp,V+ٟH j}yT8F--Fhh@_@#4D ğ!uU}VWt&8")o -o@iR]'ǩ?ud?G M1(9uV"E?PNO"D7Ye>Qf<ϼ'ٖ 2%}̡T@#4h`J@#4!IOqde+ҏ}~H$f l@iiC;>(;[7Ĕ9`nǦI/v#JI'mS? Aߏ='=v\y8М>:a)7֭W}H_ӶFhFੈuFhF _YAV!Y>'݄' IKk Qunl7un^z0䞐H 8 ע;C^W5'@>O+SZ7C;XOg$WXU9_jhF؇@;y@#4@`/%-882]eL)cHlr_*E K+mA+ǶFC7鏍)ǘ#@:9?YVO @4UQNcUCKۗG_ɏ `wV[oFh`HFh?@?GG:sɿ:+8 ů8p@G]cS#Wܿ*l®|Iqئq*O G%WS3G;kL 'x~N-RGrʿ @KBPkqD;AY#kPC:4@#BFhFI dag7=ߊ~ˑF|[[G &tAM6<+5Rmq @:$"Wc+ls?0ˎU>1m[(ʮvhF؋@;әBo>ڣ}*qsʙ؊xL%!SJ+}"NoG*~ GWKA%}|"8x @*u:WET:P *gQ؜?Y'X.t &??{?$ğl'^gnv=v(r)&~Ec#~)"|ߎU*>xFz-Z(~VEglˡ.?^-W; hDy Эmor_D qE9H/ 3&`gp )qXT}_>y5z5ʯe[oFh@;ZiFhD +s&"{_ˑgk?DRpT8T6' Rm}WDw7jt{u `<΀Ձ4W -U}״t?Sч͇)vSlqN  Rc[c_) 쑩Se#4@#hFx#Bi}$gC KGi[N~Kc?c 2 ;stQ 6yL+a_eHj{ޑ0V ?#vW<;D?nTZi;ԧ uƹCtW23%]S>rlZ6@#4 cP2@#4Xȯ ?!cE|oI!E&_'8,[`CҭDgZu>D>tHw@SiUk?d9QSת=}??顛˖r8p|$% \3^Ey$q%O)[cZMfEL@#41L#4@#䟪0H?"HH,?Ql}!S͏HڱP% !_8,[7"O)ݏ@pUCMn ^Wٿ쐐ζ;ğg>Ov ~D_%>AGH>Ee/,˒-r_kFh!Cu~#4@#Bnrp?_D_߇$d^C&E%U}K_ʌ" t?/ G7)H4@W4qU'QO6g|~DlvBHkTNH=V')s ~:Ğ|36E%kwƫAo-IᎌmvR>LHSK:־kFhchHuFhF pWEɿVYϫ{dz&ȅ*?}PO}:~+0 N-m=ՃH'd8v8nt 3qo8H~ƦJTxw-$$:Cvi#eG\FhF8P7@߬"hhT%D)/˛Ȋ#U}Jd>?69?COCj {5Hf/ 'lֻ?^Q9&+Ws0?+UrMdPΉ1="REmM_K:rWwE$vbk41FԣhGc%Fh.]kj_'̟!"d~S̶}8*x>^ K =6H/p*QoV?i^M3 "~`'ڎ`:PmA~y g1?/ƭ͠ޡ ɸL%0:JՏ->M'yL]hFXCkhFXA ϊ?iGB}E&V!^v3j:Rf@G ݦ._t"$9;~hg 7ُp8t,ɿt j.`4'W{~H1n<PHv$|3oSe*>VO9gUOֺW[@#4!poFxBº+FyH;YA8gKHA!IzU|v@N?#j%h:3?cB%#).=x'}mNkhC\_@5quF"?4@#X:OdCEjY "8x??N뤇Cus`Na0+hiSx~5VM6._Tƫj&#$ 9;n\*@Y #8?NU_F(c4BHʥ]z2msNFhv54@# J! `/C`/RϊG'_|lgB_$B#Ss``A}  `QvK7D]JSڝ-~@+<`'0~@c$hvHz})2:%mGB#mNetʭI^[Fx-/OK#uz}[|Ͻޘ-'t`VVC}O8W9 ?"հ$b5{[ߗt.[–Ȫ&h:ܐggIymnoCB>%3`A=Q"?Dgޔa,xPoPK۾tkN.ӵZbbttz].v\޳nF"M ~9>/ܲ -/ҏ}a~ =>ʩ&"]}M/=]>"!_C$@D? u,!7c=Dٚv50776~CЇx+c8$Fơ<>Pv?q(9OX]:k^;VRwY>.4/G7jdES@)Fh^@VY~;~*wK#GګJFyD`>27˛Xl!>O{H<۫#2{DŽq@@v;g?qѷwMߌ1?/=Oy G& Ej+zLd:t[]@#1@;YhF8!jM9lU~o=6I!?}6@<g~Xnh+ݐqيO˖;&ݔR4;~^;2$cc̊ ;;8 ;$FY6 W}+uI]:ϩ7@#4KDӍ@#4gf in{g/?,ssb?`kH>DH~-K$UHmmZrSV!t'w0_#R>Z>P&-Q:6V<uڃ{ SvH;!$c#͏w HR/mHU^TA./۫y7B?:8p N^yV_ F4>-T(egD y|H7N) fJg!8x#=gUcBj;JfuǀTǟ3R:g\2p a,2]nv{5>4GǮkA^n7@M6s{Y|uWE/]#>W^NJ;hW5-b["k΢9ʃ_S&rdyk?ZcmαuFhAYLy^trCt#\&Zce?tȾO߇DNU~o?}+!ى>Jf#m"8v6&6ʆ4oۆ So Y#`O_aA{? S;$)gdVdm+B@lF-O1: r AcUm^,rk,!2la )8@Cye#A"IAC![\iF)cܤ`O.HvBƶ̡hP4@#v}7H>zp@#bLD.{^9|ʑ@D_m:m-ʷL(q~qmeZqP.ėS냬z߰ܣw? [-&D?d_;pA(6VBpO⟱%=;I @#4HDo>ңjM:DM: g_G"oMrWV{XioџalF4Dž̏ƸW84}5̗H׹#k[!CBe0X?u =!zRsItaT'nCo5։FhFh+| js?{ՔN$Wcҏ+@!OGtvHqjl4iuHu}ފnO%*ҥ?OTCejDrBwI!296c;$&}'j5b^ߥs?kvz>q#4gi ! zE9"yO8*MEJ?8 ̘6m<>bIpwt5:e#IVئ8}!WqKۅGW_}(I̯Jtb;!iy] IO]y˺I3 HlFx v@#4{7$?"^g!e#C'#'+&1JI5`CN]껈t dVĎr#Ҟ#d?u@)@Ԯ8N9莱T_TE2џR6uZ6@#4"cr@#4࿃dCB!@~CY_?YYiC ˏ"dBMd*]%#uC#G{NJGV%y߇w>_ךl%a?R/!8dϵ@ԗ:.Tl((EZmFh@;[WjFx &T1k5AC_D+Go`H]vd9bHW{߳n^WOd B/kY74[JΖ vHJVO?lY~ÉG:JP>?NQ"^7yu5IؗiUCwQ4@#<v<4@#\&Yя@Y r~ߧKk Gy?:!87}D3Ϊ?w^?}Wnnf ڔV ~JUR@?;C`c,ucc|n&\*s3liW[թLJcڨ[oFh!Cu~#4! 3)!9&"gEyqdo7RC@$g9ԕfA.z&:ÉJ:جB!ѳބr ?c]v"<Ç s)ĿN;4Z~IؗƚkmhF؇@;yC`:w9rrLH9SiHVɇ`Y*l)H-pz?꧶-ϢC.- †???uc/ḫa! 2TK s/K:[y e}=qg"զcOמ"4;4?:W%M4G#ꂍ@#4=1 {?4[Mʏ# ry3}_Kz 4_H?  mH-qnC*^%z%F}FKdx)1H;Ȑ[ğ7麎mus`qOv>}vhFhv!]ȴhF( ,$$qϩ~)4W`8*clg߇!;;j2gT\3G,wē9qGQ5m 1Hߒ\l$W)u}Uق?$΋-u}gNIekXwLFiFhh*mkF8 JYuZ9c[oGpLG$8^@}@JvԄα$uI!8v}VXԛ;$Ju+?GG>+DngƐZϜ@76mWI{Kw{`g6@#4B}4@#< J:Ϫ>?-!#D]1:[* 4V@y|.SGBNI6G\ =\ țZE!sy4;dG@ȿI2\WiBl>^/TkmL@#4ShS겍@#4FH r?]g9Q!j?|I $_u;?}n^ i qn2$n n3z[4}Gmz,nx_`'lQc=RWW V{kFhchHuFh# I$GB!~8Cѫ| "I~&eJgߏC,5H0ڌe>X|iM}pCǶ١$DnR'keh2fzsM aEx߇IJb@*;(whm^uFh.v\޳nF@DL?l7[/۷+^Uѯ:P d$.rb7ǁ)DnR7Ė'@ =8R^$mDڏIPB 4IsB%7C$4N;j;SfWݶ7@#\6Ͽglؾsߗ]S4<%tCI~U|~^_- M!kbCP)u##}eQC-sC8hVX2j83pD n @70R_#c<!U@]BBO{*ϙ0}NSsp?8Eh?7IUgن݇Ci{?RYg뵷_K._Wp6ZZ_  o!{b-ΏڕmVz]ۡ?;nnˍqNAo/:й4;&ր!.VTҘ$s<RO{ZN@#vk {iF#pH$ዴ?z՟ɟEC˶+cQ0J d:,PinXM!b",J> ^-?uJz F ?Js]@T=%$uCM%!5NsM>gPu)mA @g@0R*}'q-Kg?|;˜%,ҕ\XR6˰W˵4@#@;A4@#pLQ$M"摬~xtVcc{߃=?2:!o烰u O -6lHC!&# gtacg{~ͬs&8q)9Jr x?y |oBԗoT:u6Se#=|lo?x9x9B#4'@z&氿;JW!cE/+!E3R:1~,o4paEׇ.y!ܬT/nE奵~UO__VySn&ƫ@?ğCykV`8L_I{| vꤽ@#4. 7@#pTᩊ`*ǁگg}yKg̵:_t5qp$= gv@ P1t'ř?@?c%ЎIU":(Fy哷,Ox)npU>>C;OG v 4@nB,u3M{Օ7ؗy 75ҴvfK[h#}yJx3ؔȜ~!dH?zPwHMuYc(. <\"Z]u uԵ|İarĹŝƙUoOc88%9Q8j'S/ZuhG=!ò[j7F2GRsvhxgr^UƳ5ﱨѥ}]eZjK}[iaϊyw:Wq;$QPGk@.B߱!Ϻ_)i77awwo6E3 | @ֿcYgW@wR&׻gSNݚF )@# zhnl:h>"57[:ğ=d-)-nC?}=*WI{葁 9S&ueW3Hl"/o??҇waxƄWI>0:o'-%lV: &RTY,KIѿk mRyl&3+_J=ex+|G]v7?Ol4o߿oy1F ?\`sbUmog贈hM/i{fݧ{|u#' _cg!Of?km[YvOg,ҩ[e-=sek]e(WЉc 4CԉڪOD6~{ q8-;=@}F@O\t$q~$uq?F'@SrY!HhoH9kgU1;$!B{tOs^wH7G&n%ic7 {{wV#4# zGG`y#L_ ?+vHV^ĕ3+)'˗͊57".ڨ'jt-lwikc[`(E3%iEd!ra QX[K†o%]EVb:gtvS~Imӷ#XSȿ1;ų"n[d7g? Wm4@#>x}LFx%rcHUJѿ{47ܜf, ;L)7M=5;Cm2O9VDNm"~N!>H?X3So!`#0(Ym㚆p"vZ:r ݶlmJ|'ޏy=qpg~Jfm@^vlB\5 ZyTp-mGAq }2_ M7Փ<+ϴdb)fmPd_]Vg2QZ+B`D1 Pv Q j…o vE?X =$;J Z;H!sYSv]6ՍxhkD_}ȘC2[ʖ&v9dl')X/*r0N ֶ'}y.}rjt.}z].v\~~?D'dn&-Ik.z/ݫ"YͶmȽj*g?26;7('*+U`Sk6Mie0x= '$΀CD@Xe'=4?Lv4(xJ Is ^5눼1\gO?{R٭O2MYmԺBo:^8\>*w# K:$V!߿ejB\mo4@#TPhh5i2+葲݉nE o.rdܜ+32C+~RBd@澼 Yd̓|}[Wڇi>-f2H*S?T `B1l.fpBq=+F;2Hm8Ϡno[:cId XMtf'n@'_I1o/_rv?CB]y˲nF,pYw϶pc5zҽ/"6gK=D_>l 8}nWZDQ?:NOvD gT&;qn zWeI{_ W!qvPNE?y_>>ՙ$vx']\;țH'T=9sLlkц.I2s=gIu{H.ȾEh};LNFhF?7^= DHoqX'=Ww+Hllu!3^a7W=6d]_97^7n7PXm!晹FksA|ݎpF2m?)O`4@#!5T7>ln~n&uFrɭ)DO>n-!pZ woIW Gn'Rl_! C_8 $a w.ܨs],v F}x\! 8_5~>_,?N^H;IGz%|c, I@:{6<z_MtFsL[v֑œğCۑ<|wC}tB0I=R"Sm/m{Fh Ct?n|q mCw?\Ո3`@[R$>iK98\'kgzF&ϣqv #]A\sԟcTX$?!o"'$A9gt4V8xCMhd&dlU'; f|]a_ؑ)S:;fH*'_>&V}p|RU9k7 8tv _?WqL]ָ45ϙߴ?nw]xT;L?D߯uHOm i>q\0Mσ+=an52m"caRo-2%H2mO9~Paa17l{2veS>/lFh@;D˳@`y3tzI5>9d%̬KH"( GRD~{Htaȿ#{ 0,[;{ȾozNZvwO״$-QzYՍgVE?k4#YL]6 J@ 4M!Hlɿ~-wh|ʯ"yyV/x@8DF}HL~Dޔʛ-fCUQuӏuh%:}QQ?281&cPu}&;V@rVTHكy~3Vް,_Ƕo6]f.;?yK;u|whOhE}1CDc9 ER̿W!";C$y:&jd_$~E?ˍqcNy=cw <m]'_18S 9I;"f_>QlGvg?y;jƏ!~jmmJg@ $kQԱVufYҔM_}+D ל@=|-#G:6y>Qm/u^3~}HcTp??3%V>\/n 5Ttl|&leuYoyYmM?x`[)-xV 01o 3wQ}<jUȫ5=[6@#\.df\L`͖j(&"qU"ٿ﫻`k E~&rCMտWPUfv`7iɭl!}"tm|oNL%{#;6#q3SZ綒Q-{ToS#4# {#y[ bv܋,J>u-Uw'fR7+7yɈn8LH3n;"lWEu`!+y W:!}"[ۮY݇{Yl/'s|yyV/S@"z4Y@m'_ib#&R .Aar1]0E 9w^}0clёD;$;~h~v7s@$]NpI$}%׬eZf-oim4@#py>17Nr `RE^_Do8Dg=E4/ Q ǧ}>u,ټ#@3~[˧|P۲ BL dȽӃ!0'No/ҏ%0+>!sXfLudTh! ׵np-ږ!M(5\] 6b8%| w 8~ ?o/GY;Pb'I0ߴQ3R~{-z#4e#{  /63#~՟vS?V#"|"zVTܸOt41Үʍ9 qHg7HH:<7-Wz} <t@$і~NGb l{wl8 3j>Svfy(T}c_We N뺃С:" =g_Үkt%e'l>HM!="[j NٴtR g|H-Gqq -H-Ic+ O%)oHFhF`vҦ]7 nl 9EB">88/vifn^qv:Uxm3"gOM{jvQ+yzKʈ+n<"Ĩa;خUoEd"~5"Hf^I~1AuC-Cuqm܈[RApV( c v˵f~w "Mj?NB~/?37,vY5slXl.4@#p?!p 7vQfD>/B˶;[E}z෢_Ƕrf{-\M3Ԥ&?ii/qDpi~>PEay:5iƂWM)GppuUҾfHv@݆æ?|oo:U;zF[{Q1 zO)gXq(`v 0#@y8*OOJdoz{~juFZ9ϩ!?4o^v&V#ի"C>_D~< ]AEyƟm7ұqљ_dғ[ 1A;9?hO{'rڿ_(s(HHR}JpN:᚛]#q0}3l h@IDATa[#~uK("LQloS1ϑh>w*`k?>uJY"0T6mc[C~Fh@9,AXzҿOU#!+i߯!s"O|A98|мLPqSDHHXrw@ ۶K 2D$kCۈ^.r6>d!p/,wUcb|H;94wwq[ !r:|Y: #׷𘀝~C{5jǦ&h{ ƺR#4"zৈ@nNqnjcGryVçS^8%7R1aPXCIW=yɯЗ%,9~ƞfۺ,yU_eC?G~G"7%Zm0y+f՟kΤtk>\>]r\a(lȩJ?&'*DU3.kN+v(?2S"/8>ROZYv R?_?Yxxn]h!MJh!!!K[i#eL#D>z ets^)T-zi7v1"m`r.>w ړVr1(õZLޖT]A6Θme[EG|܇zJ#M7cDDv&r%v_XWnF8Ip[LکklY=DFKDS2!s~ .tHVCs?r>ۏ2[sЇoUAxAjN՜ יWׇ`u=k%?d*!S>l>Q.]w Dc'A9&Cl*g6)ޡhFx (v@#Ft]QF8uHe\ö94DŽ[tVbL\;cS~'Wt8s{??ZQ٭I!H'y4ZG!U=gGڇ #g20? |˲?A;SFhs@)@ì?v$$=7ɫzl$ĤG!':5A#HVrPgp;dM>7HqIw8_; }]U#)3LVFk=2s!!5;D5f6^.|n[&{GaTL:[&Fh.v\§sl &nE&yz˼\Q {l=yiys}n9{ @yKG3ڣR;\q.L0׵|$a)7{ґ a5g!jډd MBU'}FǼIo/?[ota@]Gv.vN6[i6@#\O'q%,( (=YmUfhH[I̍wuA^'@}Gݤ˾k@ngXeoΥ}&C0V]@rc}' Yћɐ ˘)VB~W ?# m|<PN>(4_KOthC_@<=) Rr4)DA\r;<5߅'=)T؄o1FY/=eF2K:]5~.x'i/8r g5_:^*_syx޻?:uLgԩKBi\@@-(vF>Ao'Սg͝<9av$H>82V ኽM:m>'Y=뺉|Pg->e,kчա+ϺDrMF? c8M߅/|Pu=>R]*߅H=EvR6_ׇk8O(> p<{eAF\1f[r@y\?yY:q@!c kcV9aW u;<ߎ-{pv-}Ho']tƤwI¸z6Vqp}uK>e&1#9Яsݧ6 J)Z<:}Y|D?S#pN r$FR3_t}- wv|n =}(78l9czT8 LFy3O~ g6nY&-wܲKM9{1a|=w͟i׿ %Ŝknޫ F9Ok͆ȋBEpLJ$ ̫f+5GNE@#4oxǭG>#`ʠÛ:Ŕ*%Px68|S9ɡN<%h[?x$sTeqդqytRozA,46.g$fӦ-@,Ǧ_țM }|@%F͟6$+藻z@ku`摫 ?|9'Dix3距oeC>'n'j{S5YZW]|׍Ǽ P64@#  {M"P$tN/(I^)DiD%>x z,ʱ\݆9@*9Oxc`,ĚJ0*UIP |J|3?ƒ>bns,cyÿ `ANsrRV5qJ9Rf~# Y$NS#d*: H?o5wU~IŚb<#Vjl#4"wxP{Jk#E0Zǖph6Vvt8TY6S| H )? P}HThO xW-]4H ?LSzY<2$ŏDn'>ت_̦r*\u1ѳB=_E3Ϋʩu's:ClNy`68I獀iOK7۫>gSlFx[>z=FpR1V TIgOJ$FtG΢ܛZlӎ&'%$w<IW˜$إ:>$ɲ♲hnӏvѕ0gg3>3q1x%qbyHdfmbΔA|O1~3f#S98vc}>V~sd0'T// ߼ ɹ$]N;eN䫽WԺ?Fh sin,$LcCb6D}gM,'}BӶ>@Б}T~/Oy『ƶ*F۵`F釅Yb?-h7eWT2nJhx-C6v0}VyZ2ysqo(r>e}ޫ\>Q_M =wuF楀<9wx$U:Jt>6)sT>16@#]zw?ys isMܷ[**S:!/G U'0bx+$UDI*n/*oϟ?|ӘPEjߨjm0.Oc2WY_dl3obc8bs %1ct7,sg|b{>>2qu^֌+>x׵er@1ךc\Q<9g06?hpMf#{li\\lϡ؞#kx*>>>8FcvSsJ]Vr7?TWcMɄ) P1s-_J񋌯qыhϥ('s :$In|Kպ xjeL0VRm+>:(] 5L(O># / 972p#TZgl2lӹ%|ęce הO:$ u}y&v(%Q<ΘbO\*ϒaDl]g_D}N 㫶N<:*96|="ץhF> 8j BTT6>iāelA?*ߵǷo䟤_< QdDk{!Uʣ<($$𦒿h>$t$(HP{2FX(?gtl7% ,5$n+yk#sL9~3ьƥ}zW/yIް̴0>wOhх7S*%c],NSV#vFs%#G~%Œk0lD6d$aIc-~`yƾ?UY7ihFm o8Q8Tދ^D>N:|U;N*,0J|*Y+a/Vmѿهz$$gWwቧ>@ z֟2w!;msgK񳓼J-/NOlq3sĩASu4s~0ut}9EuQ6+G_e|R s(%298<ux{2f_A 'yȱx8>}_ :J>UW.Fh@o֣^ Z-Z8* f$B66><06?P9O0U⏞'ZI?z'#y'w?( A dIx_xm'kD[&9IAKb\-NPLj?7]]y0gràWuDyL۪u{·-'rhδz !?pM?N4]?&T@6='‰N''}G럟>>EKp?%jsQ}uiFx>~=Pi`^ -9Iy5e$ l7=@{H%֊5ᖔ55:7/ %N7F~g3LU~@}g硅yȔb'rvI"ă=q)>x&>TxgblqǸ,q0&Bt/f] o^ݫ:GΒ=oG]}qS{>#oI2c)?n})"w 7{5/a`cAMsYx2a}1L%&R2b+Fh~7,^ *w2/} N  Q) >DNh _l`j\Y21&"ӓ߰#\8Rժ,G=ďg졋l69 I|,%a>!swߏP}wlKiYS_``̆!G'RWoU_GpM||}]ots~ʉjohFm o8Q-4lW< Q O lNß@~? bpˏ.'$^&' 3'֏'_4?y_6$3,❜$,c\YGݥ~GڈHv<s=8y5K_#WݐuY⯢8;?gv+=TGgL𵟽cq @ԏ;4c.Oa tnjlɿ9/F}r`\/%z CqsKkVm[4@#߽?3 ąqrǟD [x)G%<?|OfL>RIإB7'hM2V nb)_/wëMy$ lXV(wNp ѩFe>>GxE>1`q?I;'n,m#Mhk;6j{tW*O۽rd1gU41>1߫QQƜlOˆ1F Y3 JD2I'w/J*XSF6 X^:IUe\,i+|l>y^s׽@h x.$;N#D i0e*DMOJR??W !_wA?c$ZCrMԼ?W>_ՏCoz,#%|GXc{*%_bbShDZ:'i?>/JF[/JGBy P 4e,F?SU`ң6ب]|*%>r'_O mLq3|wIo)Bw,SkI꘰)I?v9V]L;4;*>5||*_oFmzඏOx %t ֣W%;m D?h|$/ T[+Ff%-N;NZ^;tY{Q.9T,dLjdygؿD]B;<[MtȰIJ~6N:^+~d|9t.hڜOfg:Wagto49zLă<>$~ΝZ1$'D\|Rs=? H=&iswP @~ @U âWO$أ%wCsGI P6~jnX:/(ex4PSuy3/7QKsSX$#󱙩[X#ߌwgĶ;:Ab?eZ}~ϖ'f9~]|Њ'U9pp \TԊx`4@#pMD#pGE9f $OQ@_\|kxL.aFh#hn/YExDml }66<p矅.<}z Q&O%_P ZJ'OJm`[c<\L?t lJ&HM> qWTqlSEs7}|*U;<4??W=T<{1~0n|FCqgË vLh3 zɿl*)]Λgq rG(c%?Gd:\y.i77HJgFhnӣk.,VU'ݟ~&y?)MJS)هoXպ Լ M$I6\(>ϿUlm,'xO]Е ~!ǯbKݳ1:\IZ'\3NPycx:1%6J|ãcأm+|ڢT'!z|g4>3?72S11]'u v\~!x'ϊmk+CmFhC7ˎ4;xy) SP W/zpw|_%_H䟟wEw |:{,ZcOcwH%y.UOe~ы=+ _}WmW4?':s?RqB1ݒ@*s^J$pa棫m+]-YK3p*rqj3ƳXm3dĒ͋ew -ñS'dߒ*OYLѝ,9#qj~grcvT=깎?Ym'/'2n=նu0mч6 휞mO;(}rcҍo_j9Jl>kK_VVϻm"y\zTF?b  m`$ `OUC8t{X|KI9]6| *=ߔ_`U:6T|~n`ZytҸ؄ͼڒrt椅>g2W9^kvG16{r5JWf| O'Uj,n#1v+f*w1dF7;maqgl ~g%]ߒ錈0/6M`xQ&S 1kͺjohF ;&=F |dsGElwBϢr,,<_1J ``lPd$#TO c(/婖Â:-qe>;J_lE_YZ]ڦNQo lf?#{5XS?|E5f|3~|6}?}ͺU5 Mrζ*cxOi_YѓRZPLۡsb*hc^}MwP8o?&*\ p qL]s˗r;QF@#4B7[7j=X`aXYj)#'$T%M$WK]<v4|oGq?s.n/E61pi>lAsǿ/ۏ1e\ 8;P—_%߰'~3MJ+O#lKEwmMw\O*G?Q[*3m)@/I->h7b@?y󿶏cJ_6ld XʞkWDŽL-M9׶Fhߏ@o~̻F!^T51lS[PM/w0ǏήŎ\KUKO ?vJdQ%c%9t4r:[u3R ]٢|t$UWcMluU}Oo!=[_4dT6k"y ^;Is={dn4@# xwgXlRH`H(ɨ_*пइN#rQ>[d;Yuxƞ">Ki/<~i#=~`O<,}$P$nvD' jЇw;>Rתd>RjەgyLЧMJWRai{tU:K|bluUKB}eOIҚsId4/2ݙNcnbɿx:~!XpJgGKbEn4@#pm]#`aȂR/Ixq/$倦Y؆;NHQXL\j#Ļ_tC:M3Y{J{\6b ۦ+q)*ťڐcOA=ֹ&/t5AAyGƖn棫{#}WZUg{vDCkcUCx׹]!r JrtQ;&;׀lyc@v)n'ׇ(_qIy;t<` =$CkxnEW~FhG7n8:,>WCJϢ?<~$< "]Qf]vd }_hG񼁛%W/&-ęx"ƽ,Ot fDc8U>2بF<3nJOgT9P|*_\c]ʼn Z{${k{?۪l?WceDV8= lT}ν|HOTԄQ, /OO,9xSdkSm|!^Sl_uO{~O67@o4oY$ <WOJ~PGo `1,7)'$#g6Q޲͋ͅ˲@'x31tN`qz=8LkO_G4|l_>0ȕ72|U]ccT}9[bGw'|m7몼g=_SBĕ7Gk= M Rf#-m2V^v5T'7tGof=F` }*4oA ,4BrKIĹ?$-,/(IFOe#M$?JBQۧ|=)2cd~ESig&3?ڎxb/=zj al~u>%%Qؠ8c5?PMQ\8_κ*W>q&]N̜ >gJweD=o!縚U ^:v'\ R:_O㴫`ט᫽Fh@7n8(A_ߛjHGU?Ŭb@:?h?*&<E7((ߊ_p|f~ZFx'Ym,Y{nQaǏBI܏fۓaK0_Mm]b.Z\y挜>}>ǫ5Ftb5~3b8ڳ.>(Ga+Գ'c.)kdP Ipqҏ,U8AsNp="2GŅlcQ=}4@#"дh,'q]6 =$.bzo^莅pxByld#ğl P?p_h/>>yB%ۢ`?iǧڰ(楷dI$MvCy#ѴnUV*_xj|Di١l.f=r-կcG'ΊW jO#=J1x+?g\ÇˢS[EVuX[|ܑ~kw+Od?|`P_sL,bk-؋lFhnc#lYxցϺ, `UO!I&W2|p4:I6$`c?*wYO @[jtΝ6JӖF4r3i۞ا^$TD;͈Yi.òәj||CYJ:jO?XQ@IDAT]+q_~{|{G>/ E~_+'h3LwO6ʼHgضQ 0$G&0v/h Q۾F8HGu8&+>LWsĞ۶E88F77/@̧tHL} _';{H#*,SN]SԞRY[7l'+޶oN;ڦG}Bs?Ӵ>2*kucĤr>^q3qwwgV_*t؆K_η-szfw9|ﱀ\0uLMof^:oH  zA_);Iڣנ6@#&pǥG YX> bEq*w#7ɿ< [ogu%2j GܞkĮ~haW;pjV,?N3w)>?cH*3Um|jOՇk[s9>ᡏ-\ٳg\sCՅ?>I?!TM5y6gUwN:e3^xZ&0rk|)lEE?Zi#p/p߅{[}!xlޢaLK?xK}$}9I*&b8g~ AbZG*j'0'_lx +O`?-GQ?#v^l{|nohңD?=|'Ke*ig/8~nȹ]7Ju*ns47^vo0ל)?%񗎤( #Q_t|rM\NfjĎ.|}+[Jx8ܺU#<D]|.ٯqUG%^ifaEƲ-(rT& ofS|FB{|j]Av^#6Z39V{5vbXV9%yoi7S5=f3Itp]J!f37v/$_&l'Kޮ:.ȆO5N'6@{S ?=FȂ0FﵟEwG:ԓ!Ͷy?Ѽ8v`'7+ ~$]*:#:.K5ۑ+mt^_OՅ^SuվgqgLOGڣ}U'5^P~ 0J /0_jT_RX!.ϛ L,#Ûч Zϊ[n2}#}|{vM!Ⱥx"l_]l:1xyE/lȚgUos~GƑq%~XXgM4/|}UfGlу\s.b ũiŶ+Bi:WZg{UG:ځQrwc_?w@9sUJJvm -8c9jJr͟'UeMMpGtItqQZ16||50 ]&7@d||M7nxw@#?.W~+I"L-WjM4Fڵe,Ug@P:$,PpGg2+RW>yU!>{V1 u_m5|b#6Gئm~mxL[9}N+Cꉳ菕n*vno]zNt^#=PCk=J61X\<}Yśu:~A M#[#n6;+i; p8{@2ɾ_U4jϰ %Y\Wms{F s{=v=FM"gN$˺DWebtZ=SqjƷkL$I]X?dJN*Β۟#H2ت=VTJhW:;#{՘]چߣl>jUs-W/qsY ~;rs k>G%U_9׳ .TN d_(,x?)=lpp5#\\nFhߍ@onĻF fXf<`&.~ƔR$H7AHcL)2F>K<*suu|W]ccR|_koUy(O=,b١Le|ܽ*I6lg ݝnj w%s]$]lqL0T\Ş񑡴K#pLgoc{v)~|G^D8Rxl>TW%~R"} ƚϰԜ!9^ehϖWb;{Xf9ǹ>zay>J=r|>i0~~@&"\rM3Es_- kmEG-"K~sܽ8oU> yb֗$$8,zL6 E5JY ib8M].ƸT/Ek*~8e3/5Pk~hScx+yrj{ikLWs۪N)$Ol|Vg_g \rC8pDs i7#e޴hF"h,0Dua9{1$ġH6< }Fm8ˁa>{O\2dZ~.mJ=Ъyǔؒ'6WVc$NC ONУ:J婢7tn3c 딓D_2}^ wkfǹ&Z0 sM+16@#<|XvFx Y|fuW< k}ދf*Or&+6rS13 |̃IT.uBNu,o?۫_lG@gY*G_m5FWHR,s:O:wxMQαjS\3Qz_ģ:Y;\`;h+,Ku2V^Hb>m4@#c=4,>V~,t6)Z*˘k(s2Ƽ:U` ƴ c0(xPo%0'A_kWZ~2V`f]lA_*~f,}\_:記W\/^iO&n5֊_Fh߃@ogF ݼoO_㬻fi_}W:I"Lv_h VqaLDIRvK\2xf%'ɀ:EB]g,8Wu x5fcxJw㩶ȳoK |(q|{oL6$3{M$~@4?;KOa+HXso4mFx9zȍ@#@X f,YxAYcJ .^H)!-޼d1&ˈWh6˛s-?UG7Q?R%nh9d3ņ<缣[kLJT ?פ'm  2/_U},oFh߇@o>D C&1ÇzŪYz#:Ul*/^Dɐ`XgARN'ѝ [mݠH_3knĭnT=жʏRKd~s@]5o6Ŝ)?Oݿ|e s,rSYbI8X9^i4@# ߇u˛i|"g 九~%xU??}ߢw/F$늲絚A]DGŭmqƸ }~U՘+=]%bwO+cGlu+?(<5?voXQ8(~^g,LKf[b\e/|$F+cSz8^ݽ{mV 5}p?c=qVmg癓%)O%T U'k+GQW-sȵ&鯺=>ǾCi7W۪=>*sngɷ)NW{#gY'|_ $ & 7Dz+Jz핸GeXsBwiF}ú{j""¯ ϱ?*4{@~==~ۇUreٖMKUFt3buQΩ _ϳj`ʫ~Wxm `3Ψ)=G:oȲq6yeK>_+eZ8?4mF þ{>@ y1mKoo3ivuYϝ<c<xcY@tO$S'c~G9a%2kP'{^*\۳ʉq/gwi|Bѱ@D'L9W@{x6Q| 6\=_FhC7^ێ4τs-( ?To~oh~wKI晠0I@>P*StRSg}3tJß,ǟ:vRR#cgṿ`V)$O7)eJ:&ˣ\x!`ɎSF@V%={7mFx9zȍ@#h1]H%s_7ߋdٿ&B?NT [ XCz)sI[t{|ym$?rc=ᳲϺ:.3|~gmTJ_4>iC\[} 5͹&?ʥڍyڟ@#4(w@#pW?p?^B9V;hc$ˁZ!r>R.wDI3rRK9ޑXQL.SQw\F?~_6`PHV|L6_ċlu"T4#i|.H.^<\B^jQZif]Pל+O;i7tfOT=%/~ifXm&mm!* {JG_΍й撘UWkkCUO $~((@ES.?& *^Ǚ3Lh%Isb\jFhA7ǎ< (FpI},BW8li^i7c+OT^ ^̝|ݖ&#9I]הc69ٟ݊'{mWWT K'أ|oN`7 &c)Ϫ<o}|E!R(9<5o}~o}v>x7Ͼ Xx.dDo2!Ki,OR :&W|J⿗gEkr\6o%P+]~jN%~u0BG??!];Ic=u{7@#<x jݦh^/L(Mr]T82YV}#M_蠪2loF@={PjM йC񟩝sW.Wm^Z1^[JW;Qx1(Lϝ*?(Hb'|"?ZLzh4{E7y7w ƺdJUe|"g+}ļ7Moq,uOf.ήzf}/'^ѣdf@ij6}VckنBk} H9\Cf!uק#yQk+aXVL?P>bll#4"ϋgGkW@ FY`ŖaV:,vUY2w6as|>UyPmW~:/b7Ӌ o!s!%Ksh"K~XϺG\SΊfأG6MFhx^<;Z#",2|jhRTȣr5-t*QkTF7Gvʜ,Y6g/,^F~;s wyOȖ':>\ ]i?&^>ptG5LjLi@#4τ@o<hnY(pV /@C}tg1X(wy=*?~&4_v{m.>|{[-YY Ԗup矻K^J7S 5 .v"W?~G6]Fh@o<n<yp;hYDVz#/B?I3~ٖhNK㣞[q Ui]pןO%u>o/#W-Ab@Ÿ\NX٢rN[޸2=.o]_@oT4oBAG?5G%TA?~4LƿڪgM?cѣHHRF2%|UxbOP앯)u,''~=:޲|xNcLv8&e~ <w|Jhg6r-E='v;*8r(m+mk P<x zݶhn9|j(|o?|$N${MYd Rxe;]V>c Zɉ B۽J̣سm;Ǵ[]kۼc$l^6hKos.r=Ds߼55F_U9>{؛6@#< x~ݺhnyqz"6,vPRmH훟IC/*K#@2C>ZI24QZcO3\i6iM?qfF?_.KӴhF떍@#pdQ0+aϋMCtg?eS[`aᲐ^-3OD$yBE^Qtsձ<՞Hv2=սv8f:KxԸp\gk<mOȖ'q#:Lo:_o?fR̶7@#\@o\U{6D``4Xdւ//w?Ods,yyVtM_h$U_[e=6+:o+C]7dohH6l&v_6PT uչM\3jjzV[vnվuF{i#p-[#< YP-: KU|(?5Od/= j^WX6f8 {{J?i?X?n~U})%{N1^;Wڛ3ȹ$%O' ,``_5Q2+Qk4@#xzuFxcdZt2'ZnO !wn }$4x%)+#۩V=l[ts |~ I #(4bpL\t2:ڦW|YZc>@7Ŏ >ҭXTmU7F> '{xlČird[6x&%ɘWS{yU>~jIY_}*__T~{2sU$.|* c6r$<Tlp2 z* S3KLhUSS1yyCC717K"l @g< it~bɋf_a $sg*\Su ;3zm:B\Jt'mRӢ5vVߪ?۟*'#d Qp}d p$~̵dY'x mΎ>6\CR96| ڥx } c16A7DFx7 :gQK/%c`{:@ma@[|yf wd5GOtJʌ#OvqWc}"W_x ß4?O2Q=.d?v,=6P496{%$߄.?/x~ @v%qNCncNڤڪ>|/rMFh@o< n4oYh2(QB,)˻_G'o>FFb,E$ y]wI%<Үĩs i[iīrc=ᳲϺ Oj=E?ڌ3^GW~U~qcqY5?ػJlT/>%{g[n~'{z=_AR6@oF"Px>G1/;X)iSilh4|D/^žd{ؠmĉ:п4ܶ [?lgOxK5qPl:$T{t=ߕkhF:z:ګh ,2{D"}6 7Foȟ/qLy.n-ˑmJ%5 Շ{v5*k=%Ug/ڦ*j7]kGGU$g(/fO(3/1: 'Kz,.|$\3hhFzzzڳhYh;1TE?)FcoM>bz{- )jL(H_%ZxbTv!ߕn/&M@~˷ڲ :a]~Ty9 / &q{޸=JJࣃKv;mhF1@#pGdjyA]0'=;xQEh4ǂ6pd}"3ZI Z}XSҾ+}vxU~%ϑf羮~hNt* >4qiF싂73/CSVu/ц^>b7=<?ʜ[6;V7@@]Һ[C7nx^~~blm>I?~gU9+½R[y$geج|VJ5hq/s2cnO+F'sgPU6ְF﨏>ŒO(o1MN%ɇg$3TڸJ$jvMk46{[;=@o߳o%,DXLԉT(e% G *X7wcte9q_[W8~ҶYO1W_2'%U~O%XWXr`2|"7j5i(xSiWƆ@*9ˠ9>fݵkIIčm4@#pQ{4 dNt^HjAK?6,<*`t"ֆw3f,M+ƖXУz m\,/_fNUxfʢܙrGwEIIB::n3Q$ vN{*xLޛ-pg_Տ?dk:IG2'MӖ6. (#wiF@o\ƨ=FH6~,h& ^q`\Y?Ux$$(#90f+IBҟJĘ_[>NJ=xUJW=D}تm?II8^8ClX/*ɾҧlnCC;oɿl FkP}`,;v(-3 gZhF fF= E$sy,aGY4mmXR-c# ^̙+x32||{hh=jSھ^*~f MIDT:*e66O [lC:,&x?/Z7rI/EX\?.FƷV|ڦ~զu@#49-9HYqB@ Z's"('OUiBڏӊOr*( f.[vW>bGyEg{J)NgwՇc.RѧxJۣ1=6cGr6m=S%וX$JWw;X^zAm&X wJܴ J&Wu^,&rjM¹<}H9:{[=.=D7󸾋Y]c.@I,Zp]I'J>}_O>_Ym$RX %Ć~:х͊־qt5ΞcCﵛ%'oU[!o p$ۙ]黾<1?CKJkc_|`[M$/LϣTcV`J'ػdc$ NJmvuծi#4>M[F"Ҕ,XE}ǟM%+Q>riq'YVaJY3(>|l3>W6Rg9495\3K~~VcsYk,L'G2*.ʝk|=T;Wśu]I,~^ 8%`~T@ Q GSMg>qԶ6@#~ s{@#p,* $_4G%I6X+#|k.$l>(N MSI~PWߓtښ_WYwIVhmicGK['ʹ#w5CGO;U#N}q Ϭ o5)5,ݖ6j|@Oʬ#\4@#p@oӦFx4>4$?Tğ_E=$ΆGRվ$FumXF\ 0|d!0W<>W'Lgkd1f .|WIRc[/_i]uڜJDxVO|w?x̟,|'9Ƣ8ygk<>I1|QwS)Ɇ1.MچV}?*G9ƇGc~TKu7]{|ܪ<|"!sTS-kOrnhZ?Mmx:i<:%\9OpJ.1O(Wq>sM_kSŧ&10G|8hMFxw;=FC H,K`do@} o?-]ea@p0~\j˹f=|Ā+5nAOdHߓz/qsɾuqUMWQ*(C˾y3JUl(* ϧ'B;D7D3'A<6%5Emy=8Z(-%MFh^x9l;oDwUռy *OOYw? .O)wIdhKb$ş AWĎQk3}I7)ն`=|q}Ծ)>J؝\l_ݒ/6b׾Oo,3@q9&cW 96`s=K͑OFh }l)[/6(՛Jx-;47`4'bcuآ g'[#ΒOh*-`CykO)״sd?㮾f7NJ63]US:#<3.6'@~߹!>jH7v8CObo¾{n|c$)MpJ%~y\^6l2V^H]+~iP:/w祏o@o<t}`"#SI'fTɀ'0c'O$`6( 6?%؍'Ė,G5\W!rg~~Wu/􇜸?>Wj,0$JO{@(ۘː|ŏy{74_(sRB| 0&aFhVZǷU{CJŸRI~jM?Ǐ$=,ho%_|`,ڃiI$U]jvO5j,iͺK{koϘV*J<*oO񋌿t#MukY->C? 7xW\F篱@kࡺ=%gN@2Oۈ)=e6qc||6@#k I7qfuIc&@.A eY6౩:Y\ ^V+k䣶?ݳ=$HvB=Z)}V`ol~ң?R"ϱg}O)gi+6&g[θUlo t](r;?}?c&K0ϻd(8:Qkd/|$FҶYߦ@#4@#4d!,G)llhkH20\bm>5xfg}1roϾ_S+>^9vGto5^7"Oz7|(_'LHO69߽a6b9縩|g)eZ48@)-87^s `Lz$~RIXM5mF8!?3hk`Qb>O3T觪 Rh$9$$VG]ċ~{$++Ӄt!v\׆+YW'%N&Ci=sqss3!z*$$?;6Q{h,Dg_H9d`TƔ9O @|q>!?` iM@#gz=;{ῃxS<?wǣo~2?u9-wo|/0I ID9x$le6BW$?bL6g,jUy}Um9ni7z,g۵r#}ϵE9rNզvϭQ1#{; zbꥂ@f },A$K'C*4I,vٴCb!cC4~MFhN@ !0/lnhhe(6,"3yΪKoDaUFRIM"~Hs۳~KpZcaӽ~i{K_}-~3t¯ӕ=mKeI(9;9qD* $4zx'];@IDATN]ys`?.ɶɿlP~1}JAUJkE{Muj|ɾWھΑ s,{&@#eA"" j"N}h:y&FcL!& gUCz9G_ξWvn@#-p'4E.$."8֊f>SQjwI"*G wpħ79ܯ%mg MyjSGV+>P5 sRX$n:ߒ]'] f7\tY>=d+q ]3<fAyanxGN^sFxogLqmAvU}vwI IE*%[%\ "!1O;3x p$$NpN >zW$ A"a1px!qp^wLIVT Ӣ{ێ~g@YOo3-{l{8Z;}.?Jm(ߘT=;r>#zv]Wt%<@tPIUR_?՞; ̀K6O8YVa!GXu@6> fKIm[Vd3y@S1NB/>zTտ}D">J0A:,FU 8%'9 $Rߴ_QӚ~ċo1RgdwRyɸGm]~9uު}6!JLrN?d惚!U)r%¹'+H 76&H?16%lC 9^fE1v<0H q+t8I0.掟UJ7j}oITw:ƒhWSԾ;} O9f@ώ~!hs<)?qN]><|t6' Gp.·lZ¸C0dh5NA3<\U2w0*ɿ7(9<>%%]sMRx-Gr1$d ލ4n g:`_KRbc׾u #|؉g@.tݍ1TV#QIM<1ljH f[k߮Ȝ"?6)]({{0#:f1p<0pЋpJ‚Nޟ]@)%G#{HuphdWwiǶwkx/fثMd6sjKȚp@wxՅWUe~3@_il~W{!cyAlg)lV~}Ga})xl}<-ϒ3k_PJݴ,y&Q_N;ۯ'T[;5PN:"v^Ӕu >pA 2UD|}Jּ1?}`tx8Ҵ䚄u2U3'g3Z?,"$%}ҋ?:#+xg#@QYs;j/p*O#؃<Ͽpiב[|Jߣ6h-rhJ{$sO]Nytf<0Hv/77z2WwT?~Oo>vW*o*){4bNr66ZHz6 p[f>Kw<;lO/ݎ}Km; 'h%Y9q*H"79&^b%9io;ot7ީꯓkIYS͗qRSR8}#ʝ9H86tN.}Mx}=o<=0mo@_wI`l|n>To@5$ +%K 9 w*Rk(ں*WmuxKmG## NByv.yOv*E3C省f\ns^w|XqyͅvK-P׷`>Y{_j_ ` Ud=^SL^ 6 *o۾G;u e騆4 Gڎg<0xr$H$`v~І@jM~;' QW[&GBhDU91"95O ],xJ_IZwxUz^6%!C8o|s.<4 6u6!N#k_9nxrnŏ5(:^?> +Nm`< rOnwoWcRhyj5^fUΙx`<H`Ipxuӯ<p#<Q W8|bɿoW ܶ4VB@aoȄ.u?dܣv}tdݺj$zࡃu|V_XkUw0']KsPzi~g:x*9l r`{NC\I. T8'<CTa gM=$5zW;Ѓ,THe{}iyG:7^f<0xry+|vSgl |'3T(_OaV!^9*m):g%%i3eMvKt$ M1c>ғqyPr$I);I$~ .{ ~%qE{"SnGp!Ⱥ+?8OYFrܠ=mҮB;#c7tb;\}| Х ~`DG" |먟tQ@G>e<dzxGf+X%`J8 O%jS2+NشAeYymUNw| \A8>v^ֱ}vN):͟U(I?O84Kxgբsw;AEB۝s'vjt(=mx`<0x  pg{ ;PU/w"SG4<.ƚ^?`_x} ݪy$=.keM:T"pVv1F}\d~fGcmKN5Gx[WYk@* p\uCVII)QMH/+x$ 㠶6Bx).xo2Nj[FwJÝ/^lƏ$=_x% 9N.(o Zn($3~_cWCDWqB]HgtY,_f5ՙok^[8; <* Ϻ;JjBZW;Еx݁9ޒÎ1wbg׳Hǃ |:r?p'd=*~%183%>ȼQe2ui$W{'&@6-փ-%X }ig!#0^^6U&|_ !^jƷVWz(#2LUyѶ}$hB?U^4I}}NSҾ' K=ǞK7;]Lvpr `e?y'(7mP6C@qt:xxض}ooBKMUn?OxK$jCsȵ }THOq+l`k|ƶuG6+xƥ*{ că #,ڞ4`NH3>Ih'@%'j.4yJP3~A6%x{]cOp`ڱ%PpZn%ĖW6qiCCf9%:6?K'@f|rly@v*]_EwXG]Y',)x%z`6^Qた=iLBJY8]l +'yY _wK8zico>Ԯkr6z%cyJ2u'gC~Oi/zdS8%phNمlJёОdrAY8MKp곒~l2+-.Y1j~eܔ$n~OmksJمmwJ4\fd}"Hfx`<0x g|pƴxy ^,Hp&A'8N<@Q՛$?2W4tw!%\iK{@K[nCڐ߽.}_޶ѬeP轒jp,΅l4 RRrNu1w7(j>M h'$Dg~T<8$Ut><7MaVsܟqU2К*{?Arxfȋo^j & @Ňv?tlk:UYFmmR c0^tM/9kҬlH]x7x`6~gȗ /|2/6Kwu N$;C_j~U.Lsj*IFg&c3}Dܶ4B].m'|]ɕuδY୒H%7J&uIΛ?R~SD5?~7ڍc 6'Ȥ_v{L3C?pJԏf迤;~-['|d.?#'kA cO6Ml[h{O)XzS1+~@806H6 ܜ x.&vWkUQW?.+<~ivxrtnь1U _g<0xqHpNj+xw%(V%P>_,I=w_U;yX3}͂M9iY.gZ6YϮHYU0l@4 Rw؟|mL:g2=P5ɫ<E;YTBJc 9Cj؂. }_)ѽm\tc/1I՘ߑLr\T'T;8 &YN9>xwOT/݌xN;ߡg{ym S ڨ~HAֶ7aAlN̝m +$=Up ieE҃ }혮1S;Vo}]}-;Щq/l@<6H]E;)Fvwl S|UmU8S߫b?pyMV=>N?޼x{kL#%q^G8& "^d_6L06A*rMW[]&G k%Id~]нtoZК.s6cUCۚWҶXs1wZ>*z^qMM0@@mf}WT4`ODpg>&I;㛍$n1ܧZj tKczN|eK։6/Iw6 ~[Se@Woo@|]NW&g^ܽ<~ y毿|PoïJ^Ge-1C >_Uq13@DU+thˈ^/; 0H N%Pkڪߒ=i߲:vߧ-y8W{O QP˅w/Gm 0Uن:%r"s@u%NaѶ;+J9&/s&Q;|̀cl nhu P% .yMwgôlMR9xomxο O|7_~oTW /4fUY6 Nw?_o>~d|6jN+0?F\gq<?(קSlϘ@蘈Ě8'$%ݲ 4m!o\ pAp3rG?_C ;kF m~]ES5 R~iD v:x5Yf^͘lx7~ܯ&|$Э+S-^9##p]旽پ%wĝw6HW}# wH JO+縨-I6j>@P> 6Xi>W,ts( %xE4た)n/ ~=~ĥ$4Vװ~f@{>='a-2"b?KA34zQ@əvdO-^#ꄘc I IG~g6V]`ח՟|JP<σhݭ I :5*%>܂Oz;l3,L<+4oC2Um vzSH -6!x;Z!dӭnbTנ`NB<_͝㓹{7%fxm'SY ?1RG-YŖm.lc݋v=]!i(:ߠsa/klͨJuw| G>mw8u!+[~}l 0=_J6?خA/^?~U&Y23OAteu#8~Λ%GP)G_fO:G$wZ""=cO(2 6T{@1_>$`!S)Oݔ b$i=>bImƈ-PLgmttv'8ӓ0?\<M^{MxsLI,9f$4Fڴ֩$-tU-hu32=ᅎ%~NA%)OJ)~؆¡֠hx$oU6J5^ cQ9V Ec7 B{~&ֿ+ :| ~UFU'˹eHx>'KyH')xgz`6~wGx`r2n?Ad>S~>Ȿ&iCij}<4R;$}.7%*,a*6J gI1QI^XI[Ə @ ?dcZ|"l(c]X 7}[4x e)~i.Mx`֭wzW. c k#k xUw} 3mx z|0 SA?vGT'Me<8>HRGԉ$R |lp!(eiG'V|,.z(?>?,6V s;Bȕ|W+ֈp[ke>2YS^:8Z-gJ7`kR6J? K*O+hJ IQsZοt'U=J?9ˆ'ĝ~FnCHyS;Opb1*I]Wb}$ ~'=7JIcl4_\ONt1CSx˱iƍA$3>wSENTC_e_6uks/挝k< ^m_Ntf= {3Me<0<f<9z?{p`l‘Y|zKAͼ3_hL}\'PG~‘!JA>4>+q/$£/ s=bj]P69XSKud?~h'tT\÷n)Rby}`u2+[x}Iy6>O,;+ZM~pCI_Oν7gLmP3J_p` D^-QUuE?:|ρ[u6觶wlH ݯ xeGW{uXxQ GkqT`zs(3/]uAu; U?ݸE`=NN/DYptϦ;ⓐ)UmOӃOC=5JS*ZG.vd ֭imý  \iis~bINOhlpcXjQ<앱в[ m>=XgItH4 * Ҳ86$d[6EoY'{`rZQ t8Kɿ>dTѓ .iơVYxڃ~r2qz?d@Nꢱ[zKl2Э$N `0<24a7&8ؠ>|Om~2@|`0TSП8]j ]x zj䞕/4;zv .<[nZ_e%L@ |S$ k3~[e lfOx`MgQKYU&{+Q4,|A'q9ru3vbsv:Od[8{_#cv1'6pkH D2*N;4T1BS,<H"ou|SbǺU; Cz![< %׏vKx`6mgPdzyoAhk+/t;wnk8tKWj⎸q:3jxl>XǩkYlJඳЩfˆl/ 6ފ^ogVt;6tx9s>_]g6~[G>Rtf?gW1kW1əij/Pm$̩7 *IFuA)x_kS|8h'mVPjh9rE )6h?w}\ 掿'#0qQjX~$\k5M:&t%~rDSr /zR}Y'c 絃/eg%z=c"7nmej*eipM<4'!ਗ਼1|f_ {6xrǑ!MTҷKy`6δz&P'7 {fd Vd@hҏRxhϕ ~Wb#}4AQ6ew ~ 5X(kٛZNNSKwX:/8 eZm*\g(P+Fgl|b@X^Q$^NO5d G #CXC\<MC鴟*ۓ{A 3~f';x?Hv68yR`9O'SGODBSi0U61!V3y =wF{o\oƐlіc}0=,kIxH/҉xI}!ᬤ @Ӝ.>w3;׬6ب$wJP IcCΟ.Wi -tٍjv70G:29K7ÅjMAR=|ck9c%?=x]HÇx`<@<1{ ,c@/&q]hLw  ]  f :&mЧҥ5@IDAT >4=v$o=}(i: ~8'X@Z`M>[$yӅg <΍lGI)|Ơҷl9 e`WI}U'c,`>c#UwJڀ;0/UQaӞ#C l\}=  |hD6 ނ>G5^Ec*xlMzོc'X:p 箳7?6$X@ NO!,p!)T"yc3<*6ӂX Pʘلɱ8KKowIF+ɿr :t3&I>:d~$ Q5/Dңc?ht0O]8~UPXeS'Ğ2@>;B}mMx7Wg8De<k#@zkdk~$ T撱VHw@wU Vր| 4 ?e\xWX|pyf?m`|U|kpN;ej H}mUoO:IRxؼW?UrXL`w%DmIvҏDT6d쳂|euHlA~~uPz?_]mkvKggY ?xlたu;d-s52#<:L1O037$I<7UScz|`ߵ v.e^X9'XNF8{SG$<ף/熟POH$_T  ȓ;pd׌buE!OyF:%=m; O_7񄅓/T}88]h{F{bz}~^xToA@?v< S6fԇ~w*'~O;ԜlGQ۰?ohx*X8aF7`y+?Wp ӭi: &,KOM$ 7m,8ZAm:cfJNKD?4iǝ;_Y 77Z^ {64.O@{#T:ک̄z J|%!~A`h8uた_s4G΋u|{Z(5|`%;IyB?6lPEsǟ?T纑1+l?]40(g#>vDbTY/.gMu.KnߗN+Fw&=0 O{l>l5֎`$++JPs9.z W8ms䟤UOd4!ySο?Hoz#l>-f<[<PF|Ļds%Ij飾l'&'@Oo{9G_l7S '?M. dd)fsk.=&zM ׾u}~ be=D_sVxylVuߒ~rq)d<=z\k__|όvUMpUp'}G;x:W+?'I}Es>ՁkJ c?`5m$hJ 8Sme3v ' ^r_Js ~)q݇Gcݧs?gx`o.y(ld)sNiN[>@fxH9F}1.@Փ.ٕ{Nֱe<  O.ԥzjVGo6bK 5I7ty4{@I|GۏjDJe.Y۵xyagR#ϕjx>'t8!yĽ` V߿T?Jw>ysFs<}@>!Q搶'^}I̥X~hxg$|vV8ߺ/r鎯B7ΩH㉁\5<{.\J<~o[+=XJ<(׉Cڀ z;Nˢ[t_x~xS/}vhi'aNҼCd,9Ҕu!wsN'`LG@6TyD^?]ZDž5 ;I|l DiuD>~X O:uKwx)xGh^z@i;osB\|d7'Am6ǃGpAU+Nr?ur_[-vt>M'ɇSc W)^Ng|3㍽dh'Ёȸrn9d_y%wKk~@I;%X³Z:w瓰Ǧ$;c@e`OSs]\[?6Qw:c xO|K| *8Ԕ0Xҵ6#hx.?^m3*ZM]0*l<|=z v#/I~p^6}Y5:>J 'P?[ysWtl ~dm"xi@Mgcя1aGCoVmkiX 1F7CtOw0/q D 'rx.Aݽ;'p&}sK JR3J'| %Ak?_FpSt2x!t fi?tdMChU^&@ #J++| `rSg< 0=\tN<_@s="?P>:ny>-]D{K}wʦCW˔xx`6~gx5ߊQA˿T'%̀Ϻ #'MzKhf|*[j%Vj5}wT yy#2xrN>GFb G_`^ )$u7:' g#'(Wc_u=ysOxjdܧWIB^_4.%63>}^ D~v= Q sfot]~©kC E]%m.͸0e<0H.{UW@sm(`& w-q׃gJi) n)cWu]zGٲ @}UVb/ZA'7;p76Vx _g]/l"G0W.L'@~O(O *ܟ=mN $+i_glva~n:- tKv0*Az_E7*vO-V UϚg:u8i3xhxW&u ?O+ ?uh/ؒ7x zlwz o(x$QꉀGC mHyWתٰpM&.A𔅫pt 8NP l9P<0#HM^ָ DǪZIe-?~ށ׹u'W_Hpռ; } wۂyٜkߐ OOgLȨ_ _-,;n^"x|JӸhx$;Jc#;O1Ox$6rb)5jZ}kC勵_gnϞJѯs1 vIs/HϿF@mpi&%Nw_I;`-՟]3f`7~1V\/; G6_.Dxix 'г'auM`υ `yL%?A3Z]3N3dx.׭GsWY|OH́xy'߄ &sT@l ~f~:'p/#ߔܿ[w?oޤ_oިW {W"jR]Ö %ڍ=4>eG # o<0$c=wTf`7%pcE+P&! ('wՆ @Q޽z@8%:L =g~Q&WP}ve y%z%|zp˰頒>ˇH?Hڸ )|rw?vJoe ?QE[dF?k"l(Z]Tޏ|]vQ4 wMǪ^jү/$?y/[%oު)To͕ =K[dGkxl~f>ܦ0:W  GK&eOYq^bt<xftII& lDMhEtp %9'!8TCs/sx@[+2ZW3׍QLo]y TɻE;$R{U_ y;COtu-=H:K?>qok Jwkɾ%~Xx Jߵ'1w_OX.^ݍwxI./Zj6@⟪;k};[Aq$-?pUl?+3'?9J𔎇l$xn8O8aYҁYmK8O[{Np+ 9%}:#›vl~6ƍ-W>pE>w&Ho(\e|t' {<G-]5   F6=Qe6^K^K^D׺GdV՚ yExl䉼Q$(FH\#@rFך?wS(5Y8#_*@>G(@/I?z:>6Iq>|ZZx : <~'x|lj9S]usr[&8{ GD$+ ri?IEWT.V;~<λ6/ObWɝ^:WX^/'G<)meK<)}K0C5C]Fg]׈x)=ӭiڗJu L"Xd>f֚>y~ *ܲ;vg\qmJv߼ݻ*ń$, RS.Gd8|)κ߿ԏ}Il }1SΝH_#ם~mC u"WBF";/_Ȥ<~w|~'$̵0ğD/埸1v޳8 G2zS ~M7M{Etq̝-J~ t%5?66HI@0&@f#y$ gwmJ] ɻ}FKȬq<%U rqc+e|M:I69z(1ףZ})^ZPhOOрh~ġ`iK1u?vQ4fSة$;_ƴ״dj?:P7jj {ğCҟaHOtGrx3$)v$?ϧ1-s7 6ɟ",:znODXO>ߒYoK3ȧ 8k1!e퇶b&`KD}&`&p".te^;.p)%أ_a?4?Ǽз[gs.K3ai-iٵ@qA Zc^%Hy5ul)^{r.z\F@$iMm(Om3G3%DbgFg|-1Kr·'=_8u]7džٷ2u_}P#ۧavO['>@,ȟO*+}*b;>^]zgI~ fO 'H[͍CSF;v {qqlGT1.YeCb^UL qr墘*zHKreֵra#y'5._/Bf_SeɀOI5LC_ רh%gȅ69H$ȍN7hwظxV?]TsA]*㩷п$6ɜ5~lתF]>2k7\PԄ?b h8S[PӍE%jsL[U]~KꟓĦhW{Gc4V]pP_1v_[s7;ޫ}oBW?Ʊ0ՈFϨGSI ?z/ Y|%|?kT(mV+Z5kFkE"y&f` _.Hr O$QЩ|U %_QO#s!_":7 b]sqN D|C>-G %$RC'Grc΅?,7ƝL fB5.c{|IoNW?ɸtu6xNM~6v*w9Mbţ?翻1oN̘ٛ+z_ꘑ.[/k t|sPgčU_ڼ/|ϼG{AHsS' y&|lRfHN>O{N5&m|31(O6*+s>j[ 1b&`&p Hq [lKg;X|{ة?I_Q#x< #$q%NE5qa' jW墜o6 (iPlcI.\0;| .UYAW#vұU9D 6ulQb*>,U2F&!Kqm)Fޖf?DWC|3F\ԧ8P\Ɣ]jFpfJS=&#_ڗ$T6q2韑KgVc^<i9oC}&]}&`&p oBcL\rLHy'.pGs _$4Ȥ?bI@H2g .O\v9x~[m7wθfoN.\Uτ?.S=/ׅnH.h%9W#+AV]~M>-7Sc^Lcu;v͙+KbN6%iYpYSSch9d[u|`k&>߬~A_&WU&aϏCԝx%|6R$>' ]1L3~2h㪞ukG{u,_,2[oML88ML,Q?]|mlGx5* /H{L゘H5eؙ;KKOֶ"slYܸGO?\ГO]}}✋mjIEꜬMIp&G8{.4F2y'9q ʤ5?mu:7錭гWNتlP}O%N3Rc,^#䧾Q;b5xȧ<2ˆ&%H}%G(= ~{KEu}ړ-|ucz;&[]Ԙb&`) uqm#@ʤmJb6D=Džo* k@&@n$YC' .cFQ?nuH&#}ڡy䟏 H4}xI¦D\Ǖ:鱮":FWo^^wrhQ̑#9˺o*}ַۜ5񞐒v_?t}9j'x !>q#Tm087e_0+.b~&ӗ nQIK?&Ȩ$i D.s-,uabUO rמ ⮄?$n662xy?.GɩʅqΤ?xL7yAΚJ=JȪljO. J/k6KGf;8>ɰ[7MkŞ IO{W;o8ucc^ AH៶]4|kݹמ}%N-׾:Fd[~ǖ&%ڙ^x?{Ϟ-KU~,v$vN*^v1fX%5FC$cFen|կ Cвf 3.hC6V 0=_` *L/T#` &E'"9>J8~'!] KQiŚ&Q܈X/̄hc d>cigi_*G|8GPL _vb=őMmߤG5pnNVgt,)Lna7WX@6sl31ECeFYj>X%3J>ƨ8s25T\[>#x@E逪{nl5A{:ۭO!;{$*Fj|oMx&`&p(oJ~7A?\퟽ myH=w~dӝG%Mi=c 1_xSS}?@9N t0曞"y12/R} _zwk+dZ%\|y%J3AK=WV?m/j͵=t=n]#}dc%ח>b@IDATkM~}[}>VLЋ3j۸j 6GbZ۲+62WoS[P_tI- _S2" :>0/$w"]~gIwﱱYKG/ x@>G#Q}$O_+Y9c̀RHIx"gi$q%Y|0m^d,pJXFed}=XՔ܎?yz:W>HڜKmǛMܚK]]6sZS;ȯG,xm@KV[kzm1kz1UH;gF9C sQoPЦhmjoOFk%fmK_k]UbX p() <]\iN?TqG o}zGG21>*$G$ϱQ>g7q $r" [T6Hy;sMrd'(J3~Ke˧GObMn?̣30]kH@5T}Ԇ*uk$1jNeHf_/̿i+缢{~Ӻε>>?)1=`臾sHjN9f!qgɿl-k^xؑ(ޒ󽯭CecKO%-*#%h|55fIb&`kF&`I`tAI~JhllGRy$ }zn x}ng)?S~5Ϗ͋S.qz@OTIj+}G[m&^~n or ]4b'HsHTI8߮O2#p>#<!$وuPIUs dnTD<8u `$\b|u.&`&Fko&tq}>ߑ%;GOQ' qLCVI QY9#Q&̧Κh|xM8ltq6 ]BFCM)!TsJ.)H*_Q{$*_2A&Ύ54&䋜jozثOH]s1Yk"v.ǒ]~\>&>cU긑Wڮz7jcvvjߜV I敎lY)!R%#J-~H[>Kk䒯LL`7L BWj$lx?P(:z.jU#n& >*ƀPү5ɉ*31y?.R#I#~hȆOϻ$ ;ưDAn_c$O7/4FEb]O(gV5^yG;'nc>QkolZ`^ Vw^]{Ӎ]a#}d;w;Eq%-ڒu RX7}s̽i;N$j]ޯ.Z4z./ڧxk|ɺ:ڭ or Ecx@$Ԗ'j`<:ɠ;5Kȴ6H?tly>]hsLHN_z$z?6/ .6A qRTYs&?JTƩT&1IAh|v'ڊ BdNLz*.B6sTվ~ͅԮ}%K^ѷGsUz[mW8Ƕ5w?Nvɥ~'do"5ܺտ&"YuِxŜn]Y 1tr H@O~a~.k%e~?o/$ Wj{7*\n!$lF>Fby@̼k:v%]I?:$y+5}~1-d~`Hm1P_3UWcde8{}SKuOaIovAͱJ"O67!@;\ĥk>]r<(uڮ>U_1)#jy֏I}yktb%>8HŒd5ySmIֱ%vshL]ےߵ`nc\M'#9 \9w%E =rÞ?I~_$2fEUX]]^m5xj#Owm^\S#;//OQw?Qx l7zE/#|諜F|{XUƍ˚iSd\cѯe5;NOs3X& e>5x 1}~26^CwwGw~@<{I]צJmm(LJ~T֤M+g%`@ؿ6b#`)dc߮@[FU:^z^p71mŏk(ǫu {-ٟ|ckU {d ٷSڕJV%Vg.J)yK5fɿ?j+dOvI%4~ls5.>]~\O[>s}#F.HV[ՉG[oW#? \7.EqHFo!֦;x H?>O5'`ERTR>ҫXlK'7@lV7 vW\W&º(Z46H'&Vl5^4yӟcb]E[:qX{SF_!IW"^$Æ//~رeܦGs +>?Q9;5ZF~\^OߒO6'@3"W ݄'D䯓{ \նKjÏ !VhNEy~g@τ'Z?m]x~@d:{֏Qs|:X 0#.@ڊGKE:=E75Wl͛z%? 4ijIoz4f!WRj?Vqc5Vsnoi\ř%ҬڽR>u#ƨ"ϒN*먾=Zm&`&p*oJ㾔3wE;&p1$?O(G"Ϸq?6x;S1G,ݟKM^٪-%i/SI1 IT/W?&y??|_0}1>ra]&aV1Im$9%z^'eO3LZ?Tyj32>*9c[ӉBŔ>ǘ]WȮ)V]@%1hj[_1Fzqc~(֮gZEHc],]onU:o|Mav%Y^mZ>4Ȧ>K2olxm&`K<L? } #[؞iHIk$JΥR^ c}K֘aR\ 'SظセՌR%>l6H%|VjS.s x"Ff9fd`>Ԙ]ȎdKKFXtŕ~k5~|G~_ն`;O>969ޮ!:Z>Ѯ-ML\^:7Ǜ#8g8$:.^?@$a+|)?NbrvLᲗӦڋd<6IzmS84hoG#S6'E4n.9.O3|lmo kapd~6磭U-9#9OW}w(m1S꯱ć2S߯oRmmŒW{wv̡2ȥQ^1}]u_Blx@H&{k}C1 p^}m]^ <nw$ܹI 6^F'|?^55'TL62L"(KTwt+#CQK[r]mgÀ(R%z،'H}0G#%ke][OFN2M俊27KNٚCF>#[wn.[__:WS鯾%wі㻶Zhz-?C9OyS%Ic531%5F*{lo./9y,׹8ֿzg[$ -L*5?G<Ik$#?bӀ&J%Io+%S^ {ir,Q_+?8u|+EEvDKeNj `,q.WI6Y{ij|'Oɿc ͗z$gLǡk9]q}ηG}H~Zէc39;cb3f)5c7u>m4)Κk1s}K2V}5Gkm8KgzQ xQϼL`"???wc7$/;+}om v K'MBI{IcJ\;>J&ڝdQ/>Aamą|~d!gT6ނ?8 ύ cɑD9t^%dnnqD@njWGH:&fMaϹCK]F-u껧p9j|G9C/5Qjؽ)mƌJ])u\,XǠe}զxgd=F̹26đ$k5n&`_E_EqMn@E $_q'w'=*?GLQb;'T;GUi_bW$vN?sӧJ0wII $l  41S$MG7ic|=n>p)闞I}Q_z]Y挾)=g2Hdf*3;wy?n\oӱkWܥq}Z\־Ccb16|J]~8oԏM~]~./{ʨO6IJR|G>\M7zn{^ >L@#N3wG} } a) $I?9Ym/IQ?$:Ӯtlb s +6"@ 7֢K\@M8T-OBp&6 G k|x;SaF{cVRl}1sK!>Ǯy>ި=gNkYܘuU]zQ<89ꓭZHl=n|^y^1oj&pꅧ;|_lpW9)ICKrJ_m)KMܥ^Na-$mq~>ߟ/ hCɏ yg I-LLg;tg6 ӷ䧹M6WKtQ'Y=sMsq27Wؾ!>uC>!cO?R\~=zܵڮ>q4Nk>]?W9ǐ_l6z^oH{' {?>>0Oţt$> s؞96rgb3I) ɆNÔ/%̏JjeǤr^`à LEI?:S1Gl$slʡI'қ1:M\w٬ŭtɝkF|zo+!s>)%Ym޷똾oFǍlXw>ިJe{jG[}')Iϕ]6IIe[>.O@?=L.Fw-N䟏D3#ϱ NRJd?mJM{6ucӼšMal@>>?q@5Ʀ[ě?:|~O}uJ[>%1qI]i\-`-ovD)1']rη>}Jėrn{scb5KTcP%޿.1z>떭ͭ׶9ɺԧ5푏|-o֕?Ǧ l7|v60хȅp_~g-|gx?TxD>$xJLD&Om*ɟJbFqÎ.)q'ZܒM%r\خ׀d\'jQmU~yj_cSjHh 61sWru\Yǡ>Z!r.vHk~ZȦS$sLkԜ-}N`GѸCmkX\xollx-&` ŦLwxNPq$ؔtW]6IƓ̳2HO!h>旽gdz$1HD|ט>$D 2kD QQ wڪ~n19kkS~)mƨcԮ}U_ٰ|&S%JB{ۈ{$jC׸mjtIT]1F6Y 5x= W=V;LNi}E5 qOqӕ 3S/]1&%!5_l"ZS)TO_芡 ],#f71T]'jYmU_믾U?v\{4~on]})vGcQј 4%x*)Ǫ8kCcOȮq5Tj#j;DW+ l7p0ʽBԽ\ 'ܥlk&S: ڡ>+!47.){)Q>U QtL/[ÖC2& IvEcӘSdSuGUPP2w蘥}ߨR[kfϡ_ i}>86QҿeU4zk,&`&ʙ:LOĿL@ѕdtO~Eߥ>BgIRP權 񕃙KF3 +.A٪Bگ7 _7%kΌOήqјjz#[^cv./o?/1GGcϡ9T;p7} k`[*}FCm5hLn&`IIs l@IEerI?I?_gF>UMR ~}AB?ɿQk7q$se_\SXWFmT?L]I:c[,|'f e796]\#q[uŭ_ؽ߮%V1}_>4f?6?=6W#C|FlL@,k.m[Sc/%kkL7c &ؤ_>M6I%)j2W4?%ٌ(qT74Ns?e#I/1]%qZ[q\NЕc9Z5=B]c6[_S>ET[ՙ_elu7,Z?ǝ_v;8Jcg9S^=o%}mGV㫿ƭ2}LL x້{>0h ? #ٗ;O}m~ij4& &5bOE%5Vڪ~.nѵF|еFmThձzK'y\3g|.}OuL5GU:2?O?ƚګ\9j91>얷A'cZc_05n/Tlo@4tݷeI ̔49w^r~T~dC52F(F//m|wIYcU]k9}η'I?e]KFGmn}-!R[=K$GtsscjmQǯ7G}eO! Sy Ȅ?wz6 I\[.Zv ?hyF%xϜd׷GqKZCq߮sz?8%ws1K}zk {MLKxK: ,%h`#cW\%Q'Kxloצ7uD2oIr>٫msM:URzL~ܱ\SVClO>&|%b> p޽ pGe&p GG15aŦȚXaV0ԤZz''S#QM:tRo0)1)g*"k):kR^qs\KqVh);ǿk1LLT8Ǚ J$~FW[UB~(h@OT_aƎX%Yi#o6s5:f1{~ 9QmUg^kloӏo)F훋y}mu~Gׄ7M x`=L@ДE|S P6'lOzK*tI{gb'Ũ2tЯRufeMvIqĶR ?~fW9r4ڪ'=۷|5N_V#ڈѷlKv(Xzxޏg&`g&P$5AN=T>4Y%L6&u@@V_ŭ2\>2>jW) #g21}?GV['azA}[xsT8)cb1 Z&c{ 7\l5xaMpSowAn |m>%J3VkK{| @nM@O~'ɸLZMⱷ>/Q5\/9SmU=U>_v}4ߩ㉩RcfiMa^k|&`&ʙ:L~) %i}~~箾gRK _OO?||+x2Gl 1ɲwh%XGה;Eug/vĿJHm_ DoMiFK Cn$uA&?VuŬ^uLwvyF:#9v000m·Wc&pe /Oo~/g'#1]qgmH'FI?v٪_:@j<ґeڗ#adQru`/>%='?ŕYV&5N\RzRq}19 l7t60 @{-Gl f`%#]}J9`Rtgr&m~m>ɿ~I=TaOҿBT\W}__U׸jZ?9oq}mʚO߿yܒei&`&`&-jLI}z=?=xJ ƑD~J+CTF[6uܱznp<} 10 =Đz÷m^ۻVHm$G6S#[syS>sϜSMLLE:^  g{?`w(@$|Wɿ-;SP%vmQIQl$r\Q#% e86ϭ1է&QKb[S{}=ZcTjlȑ}d[S>n l7B0o"@D}Mx|)k$i+1G}{k (vI|/_d`0=@#b{)sx=eQ.Y_}9SK;^}z}.V 3Lz'$)DGڝq%JGc'gvji1ReՕcm/Ow/ iıOzE>r/ڒ⃝R;˲mmL橶^_jύgJMrO>&`&`&`Eu}+~l7\X2?ޞw;< &{g㕴O}6.$u|(#9I;9llıP &Jim钬Az*l~mmL_H?*b>m}hokǿu[_מG7x8^6\,(wĖ%H~E?o| >oaktW.[#)דWv 1(#IBZu~uw?7Ȉx"o͏q?Bߞ~!c؂Nh|_nqGohHlMeM_řŒ?T{׏sLLLxΩLT쑼оD2K$k>E}G48MlD~%J7.8'NM{vp&Lx̀8^mŇ$x6l~'w%$t%UV]%wֶkm}{n\QoLLLxιL A $o&kH`=~PI1 w> l5:>j/mЧ'رM'?Mslǝ '5go%_J*.KzG[ 9luLՏ㬛 ?o9 tHH)ґT=]$oQ'>O$<.]~|̙=Z}dޭz,8?v`T  'S$O!s lGx z@RO>[QPQo T{$LLL*oTMIU]?/RO[|?Q9@=#(fOϸfnM{=ǵ3͜D2ؔdwo/d &O>ϗw ѝ-5k1&/?ϵ5^>g&`&`&`kF&`wMdn=@5x 'qT# !swD :O4= ]rSFr㇝_a# ????xmK_"x@# d~Uq8ösR vU׸jNe=ɁLLLHWMI֎)ٯkV"O\|8X>Be$$?_;C>sGw֣GGH `s!gdyj2gWZrhM~-c#<<Ɛ||\Z{פwU>vݿ#1wy5umo׿u[_MpIe&y\](Wk> H_".9_(I4͖ؓ!О ` _dI9w[[ %~nz؈O;IN/s矶cI?L&>0*Gj;ޯKV$SeӦ(ήMLLL`U |!MWO$@F2c|x?ɓOz> GM|DGH6X k'.R:c/Z{ 3*w_S6w??L~ʱ*K#goWm%/]rdS_Ul٫u000ol,x &`Nm d%R^| &OGHlc/ d,)IRPO\&ml da"cH@VqH_@ M/U%Ic͇~;j{˶$k_VLLLJ[=3^  y5Hp˽?7̟çm#RaU꯲IQ86eju*[mK0005 |~ [fw#).LIҳ~_Tl.ؼ3sdLm> Pl PsQSxJeI6O5OG?ؓcmn*y8msmbUbW{S --%LK jt0:cKn" ;l `:HD;3?L ; zogc .枾0J@nDb/ doeDg<@ԟ|k̟CVl_`J{ܸڤW)b&`&`&`Dt6},&`'PGb-% }-F> ')O6H#?h;vOy 'IN>Ou*QȤ_Ug"֡<6Hc$Oy\3K}}|qo$ LLL7$ ;7`8$:ݦMjG~rB}L#QwH;2*wU.=Iyר̑y×//|9 z>: ̗6&)'nTT6~rǿU}OOq?صK<OS1FY~6=ozhLIפM6I@bF~G?-}kOE͗*Gﵙ? ^ϏH!#5g8hǗI*9ٵ})}..v摞Fc&`&`'JF81Ux*= -V0(QT_ hȘS*ɿН/*ě?5 7~%|'OK#UICSϏHg5| ğ1Q/q_z~8Ok$.&`&`&`&hhgk&0K@ItǿTRIBhRc?< ^"p <_$HO򯪶 ~0aM&k3 | od9FD < 6&Ӱ8ƕ^ev1000G! G9>N0 qg?4%N%y?y;G'56H_Iy$v[[n 4mM7[şcl27=u-mx}$LL!ߚ'Ga olLx&`'d-PBռ(dg\OEEHI_BNmO%GrA 5ؘLܣk*:6_:$1k tNz?^}XKR-MLLL xϺL($*ID;19|[B@f3 HDMgF@I[U_ C?s魭 /6%ѹQ6[1ivqy0l008SN!&pu)L.E@ ߩk>CMO%qnm}| $T6}gN~F v~KvT=PIʢYc)N_ԝiYR5'IuO6UW8Ƿs+_;k?xvN9f1Vό׵J`j; ^[bךHy el_7IB?/d(tbjL/&,]V=rIDAT&ׁo%eqWGb&`&`&`&7>3L&$}B)LZI#n~~csdZ%<@_ O 0&G|%-&'=YOkZvn}K_s%2sWms1000 LL p%$J$T!Y8l5sן }`%m(?%K4]cPwa}gwMqs1000' }n @ T/٣D7F{.$;B` F5u6QGcHmsƶq~U]*铦mԮ6Q%~عq΁NQ^Nc&`&`&`&M:ls |,Msz~'o PY~HI+2x!w'] ,Zs>jcS%*Yǯt?&`&`&`&`CbL hlKB爋O1_ $<wIIC֤_zt|jhOMut<-Ij%XmKG6U.[377V&`&`&`&`OO..N&BׄE}@ndrgtNW_Lf}~\ָ9 :o3 z"bN~U^[G:G8+ojk>(ĩ֯62_ۮc{]F1.&0GG?47ǖkǿ^[wy l7u>0 䘋 bOԞ;~nפɯ$*G[=OU_o$Jt00Vz l7zf.0M܏^~dtu lK?jN|tlWew <:o<+o&JWR4x-bѧuXZ֯T!귤} Ok-MLL+ wGO5)LG_u$oύ]}YZgߧHV)z?*&J36fi&`&`&`&L|k&`CiP(M:ȶ&?]8"UےVe=%MLLB`wI?5z&  K08K2t;)Q{MG%sq{VےN_kn&`&`&`&Na&`T%SH0$b/Ib> ~Wshl*k}k&`&`&p-b@pF0o![_5)-T~iNGsv"Gc C6Z[+=JWk滷瞟_;7LqxqεLL\"x]9Iõ@O)uڲi{9^MLLL# xL&$5FW:9hke.9)ڿ}XH0000X:  QU*qI{Hklm%$}{CW:m0000 xtvi&HX&dS2{^k8hot$u콤_>5Fv100087&`J@-lߑ94NC]W]\:]UmQ6E>5000o\c <4K&J䱠][WkhlMLLL' YLV ɻO*5ھCW^mӯJL&: \7.b;3kH)Մ^Vѷe_/-\:Gzo-[7j/+㚱}|:k_*oT7Iۛ\eY%?u<Kh5MO_]5]UV94000zzƞL $\m%uC@IKG1շ$븪3Gl>Һg&`&`&`&p>o:V\8e]ĩ1R՗9>0000% &`Nd&jWHرR9_s:F}k~ܚl7000,o\]eHLVLFu6zKW6(l_/?dӗLLLL{x{8{0d|)jWHĨ~Gf&`&`&`&| IO&puoM5ڴ(oM*$szߧ_6K0000u{vx(()cj ~/[G6_}O?%\W܊7z:ΣMxηL`/uUCG>M>Y~0000' gML`t'ؽOO9}[14000ol0000{f08w%5@LLLL`7fѸLG܄{ɀCܹ>&`&`&`&`O3 ,K%ߗ3Pw o)M`y6|5s;&G9O|ߵ; >}GL&`&`&`&`&`&`&`" k&`&`&`&`&`&`&= \7E 77T&`&`&`&`&`&`&p-yk&`&`&`&`&`&`HS \kbkH`wfoi>=]}}9{o}WƷ~~͟`/F؞LLLLLLE"yMLLLLLL xa{*000000o\5000000o$ oLLLLLLLZp-LLLLLL72000000kxĞLxk{|ˎ.{vn}G?snzo}^y/;m>3t!'\HLLLLLLL`7fѸLLLLLL7\HLLLLLLL`7fѸLLLLLL7\HLLLLLLL`7fѸLLLLLL7\HLLLLLLL`l;LLg[s[;s~t{us#~~ΥLLLLLLf x`;LLLLLLL~x~ΥLLLLLLf x`;LLLLLLL~x~ΥLLLLLLf x`;LLLLLLL~x~ΥLLLLLLf > C6=w׸{뿻ԅh_xˆ/skѶ~~Oc30000( N`&pa0P3000000-ϊd&`&`&`&`&`&`& u8000000"olxM&`&`&`&`&` 0ȶz&B+m&`&`&`&`&`&`@p} &`&`&`&`&`_Fw 3oә ׷¸#p9zm^ߙ÷o ƗQQl&`&`&`&`&`&`Iy޼j00000087eg000000MU Qp.; mm7LLLLLL" pLLLLLLnm.۫6xD>~~~;k}^}=m_}O x`F000000/1000000!o h&`&`&`&`&`&`Eu>}4&`&`&`&`&`&`&0$ !MLLLLLLxΧLLLLLL^VMB`wp(Oz3=>e];>ڧ|π,q ?pOgb&`&`&`&`&--$&p$o &`&`&`&`&`&`&ppgk60000V;#۷.ʓp$0 --5LLLLL`SU~vEr&`&`&`&`&`&`&ppGe&`&`&`&`&paC; | oœ ;8gb[G_k>W}yzrx(~NLLLLLLQ xQϼLLLLLLxNLLLLLLQ xQϼLLLLLLxNLLLLLLQ xQϼLLLLLLxNLLLLLLQ X#l1ϵGm=>?3t? &`&`&`&`&`&`&pp'ׇf&`&`&`&`&`&`" 4000000;& ;>>4000000o 1o x@$,MLLLLLL LL]} \;W]wU81\ ,ǽ&pK--LLLLLLN$ y oZMLLLLLLD8 ---LLLLLLN$ y oZMLLLLLLD/'000ߩbj;5[_W4&|^|y ?š -on'ȶMLLLLkO׷362/' /G LLLLLo`=پcm{\hG4ox}L&`&`&`&f}xP{"00000{&X|vؼpb =N @!0]UvvLLLLL ֽ<\W}E^.+.S:Cyp9;{ͯW-ѹ~`ft= \>c c=o.uL[U #]Js>wBwr"7x7mqXN00005dbs}&poބF%#R< ԛVUwnks}cdc?(o<>ͧ{ƥz*0000R6z艸78GRPXc qp6UXEd Mo|0&`&`&`&`7K@UJكo7n<]k_FsRǪ~-MLLLLVz-[~q^*9k؍x躼&M { 뗾׫[_ןmsm[/A&[\_ MO.@@ojdy٦N+&`&`&`&`&\׭_Yu Lf5'0zcGoS0000 5sQh̒L`8/D@ob5loOELT |%SAۘ5W.ձM`7s@7:2k$UXx:00000+T]U6w/չq'Ćo PK?Mu8F00009kF׻U_پcٞxN7nշl7O'Bfi&`&`&`&pt>w8nG9:|}'zm MLLLL`zrFΕ91sl7$ %0zdcLyssn&`&`&`&`_N^JGJo ػl\|G/?nOp{p{+o,UךzmU {Ԯo 5u0000 ]JƺtT[kdOvKX$ Es\wװk]{[mҷkuX$'s@}{j/J8u \Y}eq7ܖ baȾk_87nKo"zÑ$XF/g}[v! 9>!}I>, Sh//| g&`&`&`&`%P1׻lPY#mdg15X#tCG9}gnLLLL`uk50t=='$W/8$ &q SRYo_p\i&`&`&`&`i?ulunA_{ Q$.Hʖ @#7c~|1ַ߿ٕCw ;Ǭ%kRXԦ|PJ\r8>kkd.õ?8kkokm淰w5\{~ϵp^O?su}C9I5h<]v\gF׭!'ޙhm#Ktdw>,Y< dŋsؙ[@کVo]6˻ 8P(Rٯ*-5{{כ,] ks&o9e==M_3ZZyu\}ǵ9?k{ַr𜟉~Ϧ6efSگ=ӲW,ǟ_>XjU?Z"xf3'?)t3uʐnI>94nݶ9'K[=oNd[1?oom-o-WaY]v@~o(~黰971fm⨟Q۟fFsm};͵>7H{/j;/d̪vʟ9n'oeܗSNU믿Ѯ?OW[.r{vIw[RBx8O6H6jj.ci}wiO>Ϳo7ח6m]6پtBFNɞDy K=/Մ s l]#?3| L[.j2q,kqX¿Y={q G%ևwֻm}/65j.rK\v!E⧺L˽u7M~Z4#i/~jmbh}֩i[P4S;oˆ_Vu:k}g?rq`6W`[u"'\ D^.?3;57C+$~()]ߥ_tmq"^t#_lX+7-4v-6@nyˏ4U<8}5Z!|k-Zt Ys9Y_C.:%m ]S?Q=}+@mCop`4PTZ;=pWva] R9iA`B !ϩ6 ɟri#sl鿰f_y?Xsv|j7M︹O_ˏ ۗu[.:8m#0=bͪW߱/)>S>7񧚙lOu~o߿[߷EVo˦_MXoFYT՜捾&YI[کCs.E|@ .6+}0cgTc?,>ޘ/|奝to/[)7t7PK;ҷ4^lg<ٗ͸嫩ⷹF `7|5Ew?mm{jI ^`Zrsqu*^8׵kQ5umjN6u83i+޻|+VS}[igÇ @G%usO+һk징ߋys[}?YRU;jK_5~8.Ԧ.ߺxvi̦yquYs,/oM㥆@ p@}sE=_7ҜZ֍/}QЋۭVskXt prhQ7#߀w>PIx1Gt[ո5n^elgTLs @ pjK-}}z#_Sl-ؼL#MucLѵP6k*B#]~^=-ZPkSz9fc)_W7\SMϟia!@z|U߱l^cگV9V?>={zOsɸ sl-}i5v`88bMqpsl^X@5f>U=?Xq;uSmg @`bN~z/ԥwvO}jZ~_@ ibu֋ke}}Y-tޔ;Vc[CϦ־ޥ{'[3@ ߲bTo?H|fKf9m5Y8[۞ڭcRFpF>m^gvm*cT_ 7_7V77׺Ki/>j5u @>7j5׾8sޔ*g_v:5YWgU PpP0bWǶuΏ:oGc3> 8=-}/_5<^jGz# @$w^Ҭܐ|iVZ}oY5uWK:_c؃ =Ѧ68VSpvꟛҬ˪9\jmUc䞍sg9=- @轮9N;yŹIrlү)]M>vfQ|yl-MupJ^ٷUCojs\ӛ[i8VYץZ>k!@b{˦^}zO2ggghzϜ|Vy5ۻϑ ppPlţTݱ&~Pj/1U47ժΗWRrҦ1zmv덅@J3&Qz5b_ͻlSog{ds^q_H~GۨZiqT6j̍VMzjY}YSt՛VA Tz^Κl#ͻH?21kI_swQ^.s;1o~H- MkF@ݳhE6}zi=m뚌զqi @'wY˼}?㑿ec5k~uKz odWw/"X~mSuZ_okϾCY~zWqW @Gy3˥&t6Uؾh\vXz`!k$gT ~m=#}{5Y5㖾5Y5X@ fjtiwMj\usjjҳ8sEn0<\/zɌjl9{~LZ;gd՜mku, @>~ʼ}[6}H,W7w˺~Σ4֮)f>gy-$nj͋׉^uk>[re;/Zgsi{}3@ pG`Y٪FZc92_[j\L~iiQѦg]㽶_P6t^κj짭~/1"~B <6o-W步s*޺Ͼ=c٪9٥x~mrp[s<:YCY[כ4]>ӜK;kNq:> @)3;/fg-uk5+CQ*1i`;޳~["x^;c{65jݏl?C @G'1{[Z׋.ͻK=zZ\=Cr(C}܏zX-(|ki}RW./8uOڙ_s<]O@ "wڪC|K~3|hq@@7=ZZ >ҿS.|ժگǴ~=za!@^1}YrkZKsK-53_989lBSn+GVM%c[uQ%VZq @9 =ޣ|k=UT9_Oj?6co@<:|k3˥&k.qz~Ws]t?ոv-u @6-\2ow6}׍l׾{W_5YsPoZ0xl9so:i9-z,ّ_'vm @ug+ڿ7FOy5c8|zkevB/\몶eBڌϬY]˫5 @xZz[kk5}2?YZUub#7!AXn{5U>=ZujKM[:٧ᖚs1 @ز]qVoZ>L/o:Ui3 $Vz1{zj=sϚ˱zn!@nxcx[jj#k{cZ[? ppFS k!@^@o3375V<5ZE} @n4דƨZ{z5oDщQM4ϧڰ?8 @E mZ]/E*"  myۀ4Mfz2!@ p}6kDQzn濋q+H !&yMtku{A [7[g}z }6C4$Vp3{7{P{} @K`fzogߨ~>ClDɜ3Mzuu9W|@ 'unmoKM~lXw`,J^`|qf~od @MqoEL݌3:vx!Z׺.C <7~&KxN c  Gmc /ov%p ݫ.G@ '!WN$momHy @ p_'φ `-j!@@pp['Os"p | @o_S`- >E 6/ǚ;<^9w|tn @6ob& -`AKs @/Kwŗ^Ǟ;0 @ ;P2 @ @z pp 3 @ < %A @MEw IENDB`ic11PNG  IHDR szzsRGBDeXIfMM*i  bIDATX WKHW>3v|O&>:4H-`tDk7Ju% EJ7-]UUR0PH fg@XL8ufgϝ{9ι+G!ͅޞAFdQkU .հvl6;k륥orddS+HJ@Mœ{^ax᰷O# nuNǵD|_ } J謕:զ`:wKזevvV2)Uٙ V(ʤA|>#ppaR6bc/P蔱ÂL&&x?wqxJ@MIJǂxk(w|eÇ$s XY9 mLG_Þ؏ QS#'% y1&eWʝ^Y~9Eik%҈Ol{WcƶUUIkG f%zXs|x2~3JDA¹Ѩ,;'8<;(Ԭ+6-8 5 Q+J7x&!+5qttT?/HD*hvZn]Siֱ*U2Pkg4NN:2kwp5[iPS*vs̒+JRiQ[%`DUԴ?u0X3vGNT8v3Y\Xu 2!-1coxMl$ _4IENDB`info>bplist00 X$versionY$archiverT$topX$objects_NSKeyedArchiver Troot U$null WNS.keysZNS.objectsV$classTname_assetcatalog-referenceTicon  !"Z$classnameX$classes\NSDictionary!#XNSObject$)27ILQS[ahp{$atomes_1.3.1/misc/macos/atomes-coordinates.icns0000664000175000017500000132261115212624223021226 0ustar lerouxlerouxicnsic12PNG  IHDR@@iqsRGBDeXIfMM*i@@FQBpIDATx[ylVU?-@ T  / k*(Rt25 @`Aĉ:"AٗvEZi)|\}R&~s==w}V^^.AB5AUق WY.hW͏GDVGCe;'@2D T>K. ׯVXXX,B=#_v*xh*A< \~onn<n`]%//5k,Y9(O]q|r~~~23zd/ҼW_}u4BLߨV]!@WO@$PqΫNI'&恞qC y9!b8UPVi٩ҍxzwt@Fi*1BR ^y Bh}eRǶ[nIjjj|ff/ʆCP~R 6-W.qqqr=֫W/F~e7nĘ< ` MxJclO/*`u20 /hsq^Jymn4hFUɣO/r+h_{#6*&9S?\gϻ''Ś5kC\ZZ #$YW_mC;z=ԅ ॐܩtUP#4B_~y6Vɻv&B@P$6~Fmi`#GEݻwD[('6ǣ*% FƵ._{3/ЈS RwĈ11A!lᘷtUEq(SN'#ʴ46jԨ0 w?'Q1 2)g5$&&JJJj}ꩧTa*mFfee-ڵkʀHV7F Kȁ@o\i)u0פIħ!OI70N>c1'&11:Tn?S*UTT$F]&/^,III&A|m۶m[o=z/@:UL{ F ģrRx_Gos H Fș$ 1yy<WDB \B` 37.4QaYvsSڠA20 #l !T9iuLr*'G;&;_7Q[ /t%H^A '8y)+ i(0J.۷pvAZo! p Řr7z)p iu^/EH[kJZvލvX(\{̆ m N$i14nÞ^/F*?yy.BxapwlCLa)@矗kH>غ$1ί`'w8%4 A1,nCԈnƏ ]:N\i`$,y]Lf?wrܥKR .^ k|u%0B9wFx5ԥ$'?48Ip/@~|>i6-Z;ɋ(u؇5>FHlxqŅC`_%r^qi eq,`{L4Lm>^y[Vi- T\'-Oޜ[X;:~iIQp)+l7Lz)0=Lܭ[Q#+K~wY%bl(^74/밠tQC: CICo/M01CLطO0"*DpgنU dBW^y`2p-W%=o!~ ҡW//瀞=%Ƶv=i @fn  d6q6I¼ظqaO:5Uju(/`xr97E pN&pT[ sBm,sCNܾ]<+&g01ɏtt$7KS[V|hStxZ;'9mJ9 07d;@j;Ԇȏ߆{C&μ[ox1">{zt%ei֨Q zF_q-NbӼ88~4mAB( A?ճ`wޑݻK6m>tyn`NEmg3JLֻ#zP:Swz UnsU[h+.B=pFy9 H)\S dg+Yæ&A܆m4 B?(-'Pƶ@^M6 >\&;v쐕+WVxW/\PDδU aO!CTh"Js;wŗٳGdԩB|f>hPNϗ+8:TfΜ)G|7ee4njPbp3f̐Xx>w1¬YM68,[L%Æ ;8K |k׮5Z`hW2vYqPx/bw{؁箂Of3e̘1榈7gРA;&L`;ʁ gM4.O8(ovrd>FK冈FȐ~ iq(p(1ؼ cVx7VW~o߾lL96 1RI>@lֆhjX?32`nY'3GГ*LFnyF+N  TQtUGCV(!|wr;l|ryॗW廸L Ap6qmft>iaܹl!~7eg*#0 0{zĔ)S!y\{{%,# 4a׭[!mtp(I9sFtRcf(nKD[l1^', U:DžK$F%1 ô!8l8?p>a0=W͛77 XB05ހ~Cp͞NFBsIc/@=pN vVy!'ɓ'GhnfoѢIiʆC@KKHb`'"^\t ,|7Q_j >\o(PV0<s?asRGBDeXIfMM*iHw$IDATx E; IdB@XLqCE>wR\ϭQEA,EQ ܐ\ bXš ;!KryG3})]շgN9ߧ׹3h|U_U0jLUI]Tz~Y#SJ0|+z}+0ekOkpce*b|+~$_ S@`ʵz5v= Q0 /?A~br lt9jWU 0U`/_>iŊWZ5aڵj!TԨs*gT_;nܸ5]v٢zad2m`1 lQ5\gqߖFx1ѯ^: ŋ/8#ZpAy xzQ1&@y:je}ԙ޲ t O'xٳ|m X+YRǿaĉ393t;[>3i U]"svKJ} Tt峹< `mA-Pa;ri *dx"6pC,g}68 *ו<Cd`!X  :A3en}L}X(@V`ٲeA_җNbAmZi~u\K!m9?p8O7믿~`3Nـ"`Z1<^`yl %*X[.H_Lˡ[CZ?` @`\v:SF W>G, 1.-iv=O¤, k+Ju\ȋAV`6N=&0&`Z*Dʥy䮻ʴ(iֶn==$ :ON8(ejX4, mVJO$zX.SY|1`kA!3fuq<7gv0, 6R GKe't9P>@H[wA'=cޫA@WЗo(V^]J/>NJyiW wA 8{$,' U ԵKiu{H4i|.}FOyq]l xfxGX"БLUdV^M vsVSGZhpΜ9/?ꨣަ}K+4x9VAݻ+Z){E%%tKz}MP K|;ŋ$Jy!j+YJi8640+ g,6VA@{nc#2.Da w:;Vz/NJ_=w]tylm}R(ɵGiW Ihopuzq'j}'կ~ʓ` \o3?Dz.6k|38s}ikVϳhԧ& C[񱏅g%q i0-5i q\B{ s< {feuF)Wr7M^w›ku] jk2,myag?;~z[omUuWiO@@K; c2ӻ+/s5+`G\Fd< U0ZtetoQ0_|a@@8曋ٵu#Ć1L:(8R-]@qQLLvՁ pc1W}Ca%}*\EiжZJE1)u4ظto3NfV w 1d"PAXLuHe\Q+܊J9=>*f)<!: X)28zaUaE 8ZUm?Jt*1pkNtX@.\Qa.WJ7S:i4uKXUI>dE~sq/epZU:Ws4,8[8d2'կ/,d3Ytm=g8FOL+onZЬpeq9i!{no?H􈕛q( ӲW?!W /vHGLu!# (Q>ז1T2zNx6!+ mE8B3W)$McQ6]By,!<$/RdQ_R28c{WVXw=0ݣ%2ꨃq?JZadժeeT;k1K_ h-cô8OZojC|ez\6 PieW%^բx-lϝ;Lr|CfشBrX^8G~_:B i J烌E.KM㪺KuBBs1}`=Æ+sS@15}9la˧=-l ,[YwX+r9,;a\5eތ8[]2凪U:;!36XZ+p!w+si9Ys4YF'.u˛k..siVp\I_pS4:U cd$ tR|YA- Nl/HK|o+** ?gC~˸J!@@37Kh-`F,<#1tTA1E@yK l%w :螝Xv'?q޹*s: 3vWK=XSʴՓF!:~*G-hV1+^gܬ@7:xBbo~3&S|m[}|EhߍLx,xN_e|T哔 ^̶zor->S~<2 t ґޭ?Mg)o?Wj9 S^7 7 ģlx\:FM#앷U^i|/׵[*2ڥwGU>؍?Jh%}:s~Gɢ3s 2JCxpZ"c'=)wY#_ {v~c7Mʐhs2VM{ :-x?G+"ozqV󀇖F=Gs~i2Z3z|N*B:ɣțs/*<hU<4ij]褒\Tfey7K8~hOxIXp_um(+@NH+[<^2wGxs4s ޲)+Avu%Rw[Fp+t-oyPzhfiyvekP'cnơOT{j _>O/l=w=yo8w3UO뽾eO7,eQe<zG>pE})U$g6fyp7a2?ӣ;mwO Jŗ?*V1@;j°(_zub9~0|_;~_W_g>~ӟs_`;ks3ό]  A'?pꩧF\Wq3(]zo[8XY8+kdvꠌgW[P&|7tZ_ꪨ0}^u@Ux}W'b7[iTƖze kp}:*Tya#8#Ktv;ϧ{t땲?ꏪvҿwq0.x_<46H+-N >Ϳ9eM~wJL:c L? 9 (lo"ձrd1pm9s 2+h f(-L0Ϭb=Ӿj}co" gpľ} iO`973 ;b8 %U˘^eߌF\iډOy; ьֆ9Jd3x |Szҿ{`!mo 9Fo7Q(3>:Wҩ @ҀB|L?SN X@2y[|-Li} w)|I;GoTF1(!hׇYhQvmE:m@% Jt 08ꨣcyȇ1]\9Zb M ss4-WeO,Fnݹe2:!_Ů(SYVt;_V> |Lr?0vB2'/:hEz.mxSqWƛh#t5_ePZ>G0;-VT'iGoQk@W*6.XC?OjaȧvUvE~9Zț3| b˻/讞SQV ەLeK_WXZ \~>ӊ?s;v^kG/>SIˮ'a} \pA/dg.MZ̚;:'xb,qÜ{Tv^>n͚>B5?=/.4ZN!^zi\0b>dbŐefx|e\`')e"2k袋TCKȊ}~‹^K9ҭPX^ʳZ-ۮW5c!(P64ŗxRHCۿ_lC۴1N;t_z~Æv;CׂO iBOCŠU-ܘ?~C=jqr͞=Ooh# 4 [U> YƼyQ9x yU'Sp<˗ss~l#]߻YF˳ϴ2vo|c]9/|!.- ~{sN8!Z3`1XnVpVi,Aw@놏>/}i8xrq^lG{ߋQNJr6Jנ1l!]˺AB6P4˺ ĂNP$׬0ʺdsXBFJb9@`i`7)UO-GEGТ?(GbP04T:<^J*ZiYϧ?Fl JyVbEb{c 6xT;pjx ^"/Ec/1OXȨxo *``bcc |_.K+ xmҺԱ#_|;ô .8CA8貘) !& >0$@&ҷ|'fˀ`+R]]@, GЯvZ}/]l,`B8+L>qѯ7] P6^ujɗb1 \|dBMHPң,Uc 2 2|D}-.1 gPK鳅1O(k< \X;0}>0Z蘭*0N{L0i1 ɶ;ѽ"W.L48*18bQȇS@tX) s5*PP*X]w]>,tʈ`: r؈r!8F!NをG"ȋgyxZ9`Cb, Q8VplNGw=W>X&o;pkR@E;?fyi|,#Zʏri%sn4冥 pNәvg8l'm;J@R0'N)YMI_'˗yW X5j4][*v-,r$B6=UB:̣`@TPXXZJ]U@X̒?i6SnX4&.'`z7T8'Z~l FUzf'+@J'b'\5@ڻbc{ Џ6(-ފw<WVC* ^$zB x_*QiyP<ѺRvI{+MkoIENDB`ic13_PNG  IHDR\rfsRGBDeXIfMM*igI@IDATxdUl^eɒVrmccsـ1>8d8dl2`!l6$[jqv'_m;^LOWu+W߭[m[YY)jԵ[[\[umg꿹U]HDP~qojmUd058I8nѽ J~Tw~df|h;*ܹK}3n#62 ?-sX|sx k@z=;lUΰU%l_4 An#[0?7p`Un9B_h癱F츹.9,gDhZG.dݑ w Fx-]v]ΰ]#vu \n})Ȑ*\PS}sg?c%n3ml! بf+'B0+ 紭/?q9r~џ:s̜Xl9G6 )@SSS B??C \e ?EF+Ldu7F ?K~|JO80ւ`Zد.oӚi=Aiuw"h9N*fB@dX'CB%(mbrrr7x㋥ D-_!ЏC%G- ܍Ba:U+@l4,RWKӗ]vYIyw}eB7jW+  %1B/]'M@7tӋw@mZ t`0VMЄ :OR|-Zo;n4GXt9Nh- @Xѩcu]Q`[gFDn ௚_u66C@M~?B@S#ؘZAMS w3Qn|^5(sa/3:Nwٍ}nZ` CZ H&;s} ij& wEfdλh=)J y[q҄Uo7 @Ί?@S ?ޔ|;Zد&U%@ z7!=#9\XZ ?[&8aߔ8ͽLwkT#q& Ȫ<֍8΅ݦ@ .д{ ^t}6 F=Z z6Qm tck6)0vM*T1]/ZƸN~gv-z,s|]8.i1xǽ+U&Yn!s\+Х MpE8s!`mg`7Z0I ҏ6v=M>B={HFDL3oY~I > 5Jrtb8ykwGy0MO3lY-\hxkڀC4Ls| :6|4տ  &s`!p͖wsGB7~SC"s< <*AFav B6јpˠ< ` nBccZ?+_Rӵ;?-M '-+j#xct؉8Q9wvFpoL8E. ̑aIh}w`E ^`K Z ƭ>"m4~@R>~&/HZ믿~Ek 1[NliYg44r X0uF5m&M@Q/cE=e}1 ^y) miЩ#6an'Yi~&h=4\0lM`@NӸOm deL3N ^<$XxL'ϳ}J<%X e: gښB/A9̮.֮E%4BY2c!:uͫkU;k Xx*]׍_B~YyֳuF+?c?xlcXkMl0sWSaT%V ;02V$&?U, ^( uk5k3pcut-%͞Fp͍:󸛜<[ 781iM$Xֱǻh.!jyX ƭݩv;b8\S.n_q3hvtw]+@&p&%]WB\np >8n+={l8Cz330N|?qBgz\h}w@khOTd k>Л7٘q|4@\eIpԩ8?\O vG ás~Ϋ7gJ/ yEcǎEQ.A7Ԙs @ln *0:ON!@h߶|D ~ KXeX p*|,?Ąv;0 yExv.Š`L⛔!i/K߁(H0 ΦR9 3rּ]Y^n3elpt /@r]؎]ב0[ˮ5WT>;hO8#bP*\2> p1b0 υ@"j+?ǠvdagZ VhK ?EyI5K,Ŧm`ӹ 4pV*{dk?'O?E?Dz\^BRo:" Ն?:3/yK*P~Vܦ--xyy_4Ν+Ν>]̟X(=W^Դtˮ ;D0@zʵU6s7Ҹ ~ě_SK,`^ۂ-o+ LF0VfҌmiP9=D-gS8)b,aBnqNSB/ٳ'䗗g&QvSO s]4ϟȝ3!WZ;>cva;i#N~-I_ҼB_t{5ޝ&Rh@łqc)0x.qs7ӏ΀uz?u:W;Kث}r5OlG*j'p^N?B#?Y%+&\+09χ68 XL7`?'>]S%e6}.m~K:I=/ 宲'^UAMVq nSj)63[6[`m? ԋ:sRzg7߳\GA@_fWD7!ΧP +ψf}Ti@%^V"vb{Z[*?~Vja//jF|I`׊ӞVL]}u1}edK<1A!¦z*iZ, 't'?gu R9Yč7S7Psi Vv̛nu350 =?ˊo`:f|v~g4`8=ZͿm=={QU;p@S`-@9iI:t(3pG?y ev./擇ܲ;c-F T=^#FGw$@~\QF9[ֈSKtk}\RL)|RlaY?]9,ژ70c%Pâ߬| 'p Rh?9>#aHG7/z(gϲ].yA9;4ח4 }Wئpm%̖zo7{gҔ1eנyo),?lX seRO#Fw@?l?mVh?+_`n*zB`NA+rF/@!pm6y"3j'D6^7;ra]a@~J{unK8#r7Ť&pJ#;}?8H/a0%ـIiEJB[r҉7bo4ݠz{_ґFxD9*Vw:Gd}PjC|x ͪ~nh0^ZyE~ᄎdR]=V1lng 3㳝I ikuE'XkH_?tRtgU6GSRԇ_|ryNK?xVG% 0# ~S. i~ ќP'%tX0\sass3.k@&unv[Q1-0O K=iO.€Kl݃45u]gqni38r2;Du 2}tuTq\jZտUj$f0 bYh4LX'4͢O.'d~:;;_7v_yy۫\_3zQ 0SB|4M-Kt;88ǎ)Nvݳ RQvDiж%űwLR[{5?tK#U__LW%BaN#Ceڥ4tTxo-N]qsk#"i{4{_$%E~Rņ?(>i. '%a\k@]ر]o{⭥SY}Tg/rP G=\٫WKP@G/;ٷXbFb[TCjj_y3 j=s{a؇X?Z ;-R&&Rz6vz*@>uN}4`($ GA'oXSx"N_,ߣ9AXV;0ХHBWi%_ L.)Us_Pjk`uέzocj9X0:R1BYG~٣TX޸\yD t3 C8̿EqoWrESBk+~HDD+ŸvKxnyE u]W^~6bsXti%sVh >|]ʌ:.`Qpگ4 w'c^)m+_?qI(Oۤ:oW|ipR/GIޣ|Yܣ( 6,_/}*c-6yҌYvBz@Ks+흢A@@jAjXh鼾h{@~t$ @L@iv*H|)ʸL-? uױc%}ρʩ9ȟ5مtF|08pt8Zy'аμ{J&!+m9ѲM#( $Z!!-{$8ӈ~K>pheng`*о /<˖_1ҟOuanUtJt"wg:g:LWkeVusPY@-,#a_T jϼ@\o>\ IU~E6"VbQiP}WƠU 8xZpOw#okal& (=e̊u)v vҾUAO;߲Fž%i-P-v9]=uc*<4'2`;[`4BTZǟ@%M+]Q?2HI:c#S DHTg L+ 0y~yxctN:(Ӎ[+P7%0_t6c'ց%,k_hUc)fA@ [e*uj}{Fv$4#W~mmC5z~~YCnKs ?_ t]w\U+FGؒ|YN[ y\õ59 yM +ROkg/j(-~/BpTy/AIu2pa-@_0%0Rފ,OI,"HTn)޷Z-53N k~ƁZ~2 t?fX%!pO՚_5.awi:pJB6˸-' ?FS H P~ɥ]rzog@0d%aPJ( 鎫޳J "+g]4j>Y~#n}@S Gh(uA]Ԉj p`J;+Z8*P0g> 1-K~>uB1)ZI 6KZRyv@v2-4P>j nݔO(/49Y&I U%q؀ ^094X--:O mc *$G.a2 i:|0PbYWxt;Sy#A(*Cފ;EiR|{k>١$a>5kX k&cN O ?#&{nk MBr > @n@U%?,k@X ޮ|}J)Ox(`q v9* @#?vdme!:JN/Znsm)Ψ3rw#{ CMP8|IKn[*TSn J 6S~ź-YӻN H"<+lK 7zޢYt254Rsr9ߚ`kZig4O9BfS{Nis9lC|qؼI 1;}^N.LWew@Uw pcla3b xN2>.0bBI`}&@dm z 蓀PQ9h~RV({=wpGO(%bvLIޱK=(GGjHC\ uC=ͻZ A=,<_y8Xt| Z d- 9&iz wR |V&Ё}|:A@LA\V\:uc;:'vpBQ\c,#lf@[N0ZQrY34#OuQs+Ɋ; S T#jz5V;;{ϡhBr3l$8 FlRWr8NmAC |ħ"ӘYS%]"{\!#]W?mYBiCCKB(me Eaߧ#A0:+Bi'iKIN>k_kwj 0_,j:\\V ~  5q]h1<;̧ml ψ)/@ $G)6 & %Dz >$aO1k}_Nc*c-x:Q~חO ar/|mӚC:`MwP, Ǧx%'C[8(wgJpqʢh g%`X7}? 韇>];J 1E_6^tXEߧZ cw!7[e1蕖)C\Y Vzg"<ӂ#&4(6LGdndPzu:ώ;V VǼX s18QsP~> rʋɓ-EXTy[6~tʏ|Z\gO`\:a9+Z| ?*Qգlc!2,W,]| ,q>G$^SJ#BٗzeP2JF^},&0ኳBףM *vH`Hkݪ^w˷lˏ1n,(72ݙߝĢnHU03kPϽLbLOW# Dχ?Pg? z{eLrYbEZפcvt=N]:vݩh#O[&jNU'#kOGҡiWiQ@bMOqS3e~E`hlqN L["Q p~Έ_#;' 6" _Zt T87&):V'ۧZ6[^5Jެ'$ :@/!H8a[ŕv??z\.^>' *8K>,dy,k>(<6~@.\ uYVyom@d_H '?Q4rr8)_mhd_5P ?B 2G:? _"^!{PM]g!aěN),o卓 [٨?p J-P>DskwE`[K_r/U=(}|̓NfzJ*ӮʠyX3p++/~: 3 zQ#ͫ9)d[ak 2ʪ~b=_,_,F4N>[͓Nu sûw w:[Bĺ0 ¦tTXSt.?%-l ~@FVDZ3nYݿL ? n E(,Hީ=õ5V<c)(wQ6*_b*M[,Jpo> șlIOe(]R}˲eG"-uG@l@8,mbrJ߭^eU%n,@USbďe%n!%m=h*pR k<n>q xZa\]; + Ew^$g]r3@]t]g$'Dۉ֡9J E:?4<3;#NH Fk=(p\=+_@pӳ4\^uߣ-p6yxNaNݲtN3(uz+Plc!X}DB:q]u++˴]ȗIIH_#(E% 8̳_QӮl7y7ɟ/HPշ`Pf~zd<2 {4R_'4bJ#Ue"<(aŝ;̊nʃ|z@s}\O] zT?:,GZv` ] ռkftc;砶 qcg>7NJ{l:«<(ܸmԷO>Ӷ`vtR·Ju[O]j'hl:z^Pl;`~ >XؚzbRn&!qNB gYcu(9Ol]LXnv9PЯ3 U*!?B{N5O{_7$A`–キXȹzQ?Cx[o?ͥ}bKX2(Әn4vA黕7n QS4 AյӖ|5kwH.<)v\+8K\*zNӄyi rE;]FwG^Wm:mS)H:?3K/ N>տ,s`V-U qooaۭl~囮X *2|u|"uI}=GU:c,/bXʷѼ, |%E?d4Yѝ7ͭ@7vIHd|&^me霦,}YA5]SGM}miܚq^X)s9p I7vK`Lik.[wgW6<7zO/n!8ok]|s(vODh,ۖ2ϮWse쎅4HPws=Q,_ye1łvuO;g{Noci2vZ *6N|<9E!a0~NSE@\Сb4iDž?kggSoN4nu0`:|A7t)C:+! 8pvW5h8 * ;A|vhϮ Z@Mv|sk%a115GAS ᭭=~ ~osrv-+/[ΗhSt ~ǽhXRh=7)D\*vGMI-@V -\-@lPϳOx7qGK<7f<90`ЎVz[Vyy. B ֕8[ 1K8Xvd)ʷS1l1Mc-ͨ;Kb::mqXv՝z1c)}âv9u/aZ:r^ƍi{їse [UKPuoF)]tﰜ4no?7e5bJ aя*_j<3nL,}Y:S,ݠ~Ԣ-8" gcCʣʾt~emt˪y:׷[6]Y:W,ݠ~Fj&*`6C̰8agkyuT¦& ˁZj ӗ܃җ}ʷ_*w־nCkUddSu@-5T`f1|aXn|(kQM q`P/͈K `1,/~+#?#9/,,юts/68,}Y:A}tI_+zы^Tol; ,}Y:gP<]a*c)??,wss|Sҵ]oJzzW~W).HRY]ECȸiiJl7bk"Tٌâ=p@?nhF/@Fh]ى.~Ytir[҆p*w|җsewnV_Ublg af>"0nb޽H+L}sm}K^R:Z!DU~l@?39'u;禩#wJaZwܑ{ᇓo,I+8zh+^?t ~~,}&꫿ ;u0}k^S\oַy<;Go>merwJv=gS[__Z/.8]6NH}ٗߙr{jϚ;d8 Nj.] HHooB oxC[+a}:ZK7MI(-뻾8|p뀠WUN?1-~"'4X.'(8n}^@%`P.T*:| (؏PTh n{__(%$f0(#_Oooj'u:GD>?``2 <-R\ _EWWm;,/w+ca?>?8vXbMKKR_nZ@U ?TOD{2B5#*/b4i4ѿK g~g&3_\i)뮻Jsl)/}KW ˿TD||LqEgxk?SO%:T\ob~G~$ I d>S?=yֳU|'rZg`qTU~7Bv̯j^E9X?@ 0:u*! >>,F'&H ~3"2#4XdO/ˋrO_k,"ߏ9~fV`I!^;r})ROHА7f%3a ~io4 s[F7T[|}yw+amH]G]hwd4 k|LN~W\Qpd6ork,akh#P.'mk#h~73xFИh"lJTzTXt{__Q0& u]P"CGSt@B9Xş;ɡ jw!'}'!v2]ǫ*%|81TD0rmy3%ߊ˿F=hR _V5-{Zǿș-NST!XQ]VڑHȞ=Yx,/`GѐE ;~L / [ڑvIk׊*ܯY J<|a;m~'tBm4KxM9ҏ9thN[5wiU{M}%k4kumH#z7z 5]9۠eðW|վ~k3 `3ݔ5S#PԵu?̬`X)ܢHS^JqCGi~צבݖHJ+;Cj'`nY!Џ+w~'}?hƿ^zNw{6}|w3.G?"v41?GO6  ħ~g6a!U6Il9YǞ ?015`_Ĵÿ }8c ğcl&Ƹb߆hXl)S%5{w#@_tC  7UlNn!?dE;ͩՅsRU3d,@µ]\esS C zp9Mq(ܻGzk&n:)ByoT.@!\yp_=͍@|?ۗb磟zN̵}/_-6[k F|nK3d:!_52nUbmۆxܞD{x\ ܺ?rq98:@ߑ{N <:`b nBNRFITesL=7_̅&ϗoqpaț#|f42]ͣNZ)HG"ooI#\nУ#XCէ\70|o|c*Qp?eGzؐ/-Kb>EF`C t^|w|G}~o2uD6sq muQoC{{Wػ{\ykotlӁ|-W2z2:%Wmq #9Nt `|> t8:(90tDcp7|7$@~ԉz?m\1luF'G7X=#n>US~XHu{IC}?FpSFhX0vuv)mpe_EXjv!4a^WG߮Y:0ܻg.Nt,:t(P&`ȇ8o]B6oy[A8ih A@{@` A0r @^a#|߳L#nms @d}> tėB͂t4./|$1OO'm " /ɟ(/ vܒz}2QA,5Few"XB]Fͻ!H ԾQ@ɋ[>ĩeoQ @Fô _4h"p+0*>i,Ԡ/!Qݝ5o3zoad_(U_U>pBGw@U|YsVFgTcCg5a lxN#g<:s,ө\00q/6z0S>eۀ8 >^|㗂8O|YxcVi"T6RV|Z}݉P3@ t2C;NoG1`ZGqDe$ aF^l!1t8 Iɋ*|aCˬ#ґcm%K?IZ," tł`q/ا/}f϶+`L;; ,a6܁?'=튆zԹez@g$!|af D(2hO߸ bſ%\h8Ry# U<-aXt>>e-8tHy$)!N2qݾ:"Yy{ď}x54 Jۚ]7@ 3!YQ>X?3dhN|5=._*6_W'm !/&ooO91i69}`c yl;Y{^:1q68ta8K_6Lv_u F)qteߣᲪ< $6Th0uku{?\DZd~OOHab9C.0#=[iNHN0-PF텹?mt\zIm@Aa`.h.bHcTBpwf$9mFge_g C8BtzQPNE3uGF*B(OGB?.1_L& ݾ*hUx M {;A3( p9F䍦W˧_fӯh&5@l QEnt~er7JWn/~W͌o4vSVÁq*BT#UZh7\[rw͟7uy%*h{!Mul& 5LHQJT~1]ZsF|swܱ?*i0)74$ܟ84q!h4ުiBdZ#̕G’]ɜO?M,]ׂJFlV9SsrlG_% Y]-ޘU@ꫡ>]WQB.ITk#:HJv4VnWCW*'j*kf`#6K4A1 c ʘQk)oE,SG5|FU*7o۷QwnVy}> wëC Mc|/ZD!P6Z0 ~fXb.<[x%ԗ'uV &lD٣ ~~ژ䑗z.\)3߫G!>L@TkO]>+? \ѣ5#b, f]k _wKo;%N;I XJlˀt#G?vK!DSg$6e>RKXLQ4cᳺ2].%J5$Zp* IѶ|;C# _ o+ocl XUe R,aY(X ,RL#l"cl #:4o܆U O<w D$36観i=@ozh-07z9`⺏Z0 m-: [u!ՌfG%8u3ɠ8@øzD@ L7sa10zc=i스1 Q؀vd` 𳅄8uWjTZt; 03ڠk?Σql$ /7 |tm3@*1RyV;1}o8?zsڍӚhi4 . Øaf,tkp,p4CF;r 31Y γngE~p`#8k?pׁJkD|g\z9x|w8'F*S*#)AN.ai80lԹKpS~*S)*Y$Q_{),D7ކC*pJa?sP9W2L (?7hQp` Tis@J_)t#m Uz7VKSWגM{r}LMKSKKIENDB`ic08_PNG  IHDR\rfsRGBDeXIfMM*igI@IDATxdUl^eɒVrmccsـ1>8d8dl2`!l6$[jqv'_m;^LOWu+W߭[m[YY)jԵ[[\[umg꿹U]HDP~qojmUd058I8nѽ J~Tw~df|h;*ܹK}3n#62 ?-sX|sx k@z=;lUΰU%l_4 An#[0?7p`Un9B_h癱F츹.9,gDhZG.dݑ w Fx-]v]ΰ]#vu \n})Ȑ*\PS}sg?c%n3ml! بf+'B0+ 紭/?q9r~џ:s̜Xl9G6 )@SSS B??C \e ?EF+Ldu7F ?K~|JO80ւ`Zد.oӚi=Aiuw"h9N*fB@dX'CB%(mbrrr7x㋥ D-_!ЏC%G- ܍Ba:U+@l4,RWKӗ]vYIyw}eB7jW+  %1B/]'M@7tӋw@mZ t`0VMЄ :OR|-Zo;n4GXt9Nh- @Xѩcu]Q`[gFDn ௚_u66C@M~?B@S#ؘZAMS w3Qn|^5(sa/3:Nwٍ}nZ` CZ H&;s} ij& wEfdλh=)J y[q҄Uo7 @Ί?@S ?ޔ|;Zد&U%@ z7!=#9\XZ ?[&8aߔ8ͽLwkT#q& Ȫ<֍8΅ݦ@ .д{ ^t}6 F=Z z6Qm tck6)0vM*T1]/ZƸN~gv-z,s|]8.i1xǽ+U&Yn!s\+Х MpE8s!`mg`7Z0I ҏ6v=M>B={HFDL3oY~I > 5Jrtb8ykwGy0MO3lY-\hxkڀC4Ls| :6|4տ  &s`!p͖wsGB7~SC"s< <*AFav B6јpˠ< ` nBccZ?+_Rӵ;?-M '-+j#xct؉8Q9wvFpoL8E. ̑aIh}w`E ^`K Z ƭ>"m4~@R>~&/HZ믿~Ek 1[NliYg44r X0uF5m&M@Q/cE=e}1 ^y) miЩ#6an'Yi~&h=4\0lM`@NӸOm deL3N ^<$XxL'ϳ}J<%X e: gښB/A9̮.֮E%4BY2c!:uͫkU;k Xx*]׍_B~YyֳuF+?c?xlcXkMl0sWSaT%V ;02V$&?U, ^( uk5k3pcut-%͞Fp͍:󸛜<[ 781iM$Xֱǻh.!jyX ƭݩv;b8\S.n_q3hvtw]+@&p&%]WB\np >8n+={l8Cz330N|?qBgz\h}w@khOTd k>Л7٘q|4@\eIpԩ8?\O vG ás~Ϋ7gJ/ yEcǎEQ.A7Ԙs @ln *0:ON!@h߶|D ~ KXeX p*|,?Ąv;0 yExv.Š`L⛔!i/K߁(H0 ΦR9 3rּ]Y^n3elpt /@r]؎]ב0[ˮ5WT>;hO8#bP*\2> p1b0 υ@"j+?ǠvdagZ VhK ?EyI5K,Ŧm`ӹ 4pV*{dk?'O?E?Dz\^BRo:" Ն?:3/yK*P~Vܦ--xyy_4Ν+Ν>]̟X(=W^Դtˮ ;D0@zʵU6s7Ҹ ~ě_SK,`^ۂ-o+ LF0VfҌmiP9=D-gS8)b,aBnqNSB/ٳ'䗗g&QvSO s]4ϟȝ3!WZ;>cva;i#N~-I_ҼB_t{5ޝ&Rh@łqc)0x.qs7ӏ΀uz?u:W;Kث}r5OlG*j'p^N?B#?Y%+&\+09χ68 XL7`?'>]S%e6}.m~K:I=/ 宲'^UAMVq nSj)63[6[`m? ԋ:sRzg7߳\GA@_fWD7!ΧP +ψf}Ti@%^V"vb{Z[*?~Vja//jF|I`׊ӞVL]}u1}edK<1A!¦z*iZ, 't'?gu R9Yč7S7Psi Vv̛nu350 =?ˊo`:f|v~g4`8=ZͿm=={QU;p@S`-@9iI:t(3pG?y ev./擇ܲ;c-F T=^#FGw$@~\QF9[ֈSKtk}\RL)|RlaY?]9,ژ70c%Pâ߬| 'p Rh?9>#aHG7/z(gϲ].yA9;4ח4 }Wئpm%̖zo7{gҔ1eנyo),?lX seRO#Fw@?l?mVh?+_`n*zB`NA+rF/@!pm6y"3j'D6^7;ra]a@~J{unK8#r7Ť&pJ#;}?8H/a0%ـIiEJB[r҉7bo4ݠz{_ґFxD9*Vw:Gd}PjC|x ͪ~nh0^ZyE~ᄎdR]=V1lng 3㳝I ikuE'XkH_?tRtgU6GSRԇ_|ryNK?xVG% 0# ~S. i~ ќP'%tX0\sass3.k@&unv[Q1-0O K=iO.€Kl݃45u]gqni38r2;Du 2}tuTq\jZտUj$f0 bYh4LX'4͢O.'d~:;;_7v_yy۫\_3zQ 0SB|4M-Kt;88ǎ)Nvݳ RQvDiж%űwLR[{5?tK#U__LW%BaN#Ceڥ4tTxo-N]qsk#"i{4{_$%E~Rņ?(>i. '%a\k@]ر]o{⭥SY}Tg/rP G=\٫WKP@G/;ٷXbFb[TCjj_y3 j=s{a؇X?Z ;-R&&Rz6vz*@>uN}4`($ GA'oXSx"N_,ߣ9AXV;0ХHBWi%_ L.)Us_Pjk`uέzocj9X0:R1BYG~٣TX޸\yD t3 C8̿EqoWrESBk+~HDD+ŸvKxnyE u]W^~6bsXti%sVh >|]ʌ:.`Qpگ4 w'c^)m+_?qI(Oۤ:oW|ipR/GIޣ|Yܣ( 6,_/}*c-6yҌYvBz@Ks+흢A@@jAjXh鼾h{@~t$ @L@iv*H|)ʸL-? uױc%}ρʩ9ȟ5مtF|08pt8Zy'аμ{J&!+m9ѲM#( $Z!!-{$8ӈ~K>pheng`*о /<˖_1ҟOuanUtJt"wg:g:LWkeVusPY@-,#a_T jϼ@\o>\ IU~E6"VbQiP}WƠU 8xZpOw#okal& (=e̊u)v vҾUAO;߲Fž%i-P-v9]=uc*<4'2`;[`4BTZǟ@%M+]Q?2HI:c#S DHTg L+ 0y~yxctN:(Ӎ[+P7%0_t6c'ց%,k_hUc)fA@ [e*uj}{Fv$4#W~mmC5z~~YCnKs ?_ t]w\U+FGؒ|YN[ y\õ59 yM +ROkg/j(-~/BpTy/AIu2pa-@_0%0Rފ,OI,"HTn)޷Z-53N k~ƁZ~2 t?fX%!pO՚_5.awi:pJB6˸-' ?FS H P~ɥ]rzog@0d%aPJ( 鎫޳J "+g]4j>Y~#n}@S Gh(uA]Ԉj p`J;+Z8*P0g> 1-K~>uB1)ZI 6KZRyv@v2-4P>j nݔO(/49Y&I U%q؀ ^094X--:O mc *$G.a2 i:|0PbYWxt;Sy#A(*Cފ;EiR|{k>١$a>5kX k&cN O ?#&{nk MBr > @n@U%?,k@X ޮ|}J)Ox(`q v9* @#?vdme!:JN/Znsm)Ψ3rw#{ CMP8|IKn[*TSn J 6S~ź-YӻN H"<+lK 7zޢYt254Rsr9ߚ`kZig4O9BfS{Nis9lC|qؼI 1;}^N.LWew@Uw pcla3b xN2>.0bBI`}&@dm z 蓀PQ9h~RV({=wpGO(%bvLIޱK=(GGjHC\ uC=ͻZ A=,<_y8Xt| Z d- 9&iz wR |V&Ё}|:A@LA\V\:uc;:'vpBQ\c,#lf@[N0ZQrY34#OuQs+Ɋ; S T#jz5V;;{ϡhBr3l$8 FlRWr8NmAC |ħ"ӘYS%]"{\!#]W?mYBiCCKB(me Eaߧ#A0:+Bi'iKIN>k_kwj 0_,j:\\V ~  5q]h1<;̧ml ψ)/@ $G)6 & %Dz >$aO1k}_Nc*c-x:Q~חO ar/|mӚC:`MwP, Ǧx%'C[8(wgJpqʢh g%`X7}? 韇>];J 1E_6^tXEߧZ cw!7[e1蕖)C\Y Vzg"<ӂ#&4(6LGdndPzu:ώ;V VǼX s18QsP~> rʋɓ-EXTy[6~tʏ|Z\gO`\:a9+Z| ?*Qգlc!2,W,]| ,q>G$^SJ#BٗzeP2JF^},&0ኳBףM *vH`Hkݪ^w˷lˏ1n,(72ݙߝĢnHU03kPϽLbLOW# Dχ?Pg? z{eLrYbEZפcvt=N]:vݩh#O[&jNU'#kOGҡiWiQ@bMOqS3e~E`hlqN L["Q p~Έ_#;' 6" _Zt T87&):V'ۧZ6[^5Jެ'$ :@/!H8a[ŕv??z\.^>' *8K>,dy,k>(<6~@.\ uYVyom@d_H '?Q4rr8)_mhd_5P ?B 2G:? _"^!{PM]g!aěN),o卓 [٨?p J-P>DskwE`[K_r/U=(}|̓NfzJ*ӮʠyX3p++/~: 3 zQ#ͫ9)d[ak 2ʪ~b=_,_,F4N>[͓Nu sûw w:[Bĺ0 ¦tTXSt.?%-l ~@FVDZ3nYݿL ? n E(,Hީ=õ5V<c)(wQ6*_b*M[,Jpo> șlIOe(]R}˲eG"-uG@l@8,mbrJ߭^eU%n,@USbďe%n!%m=h*pR k<n>q xZa\]; + Ew^$g]r3@]t]g$'Dۉ֡9J E:?4<3;#NH Fk=(p\=+_@pӳ4\^uߣ-p6yxNaNݲtN3(uz+Plc!X}DB:q]u++˴]ȗIIH_#(E% 8̳_QӮl7y7ɟ/HPշ`Pf~zd<2 {4R_'4bJ#Ue"<(aŝ;̊nʃ|z@s}\O] zT?:,GZv` ] ռkftc;砶 qcg>7NJ{l:«<(ܸmԷO>Ӷ`vtR·Ju[O]j'hl:z^Pl;`~ >XؚzbRn&!qNB gYcu(9Ol]LXnv9PЯ3 U*!?B{N5O{_7$A`–キXȹzQ?Cx[o?ͥ}bKX2(Әn4vA黕7n QS4 AյӖ|5kwH.<)v\+8K\*zNӄyi rE;]FwG^Wm:mS)H:?3K/ N>տ,s`V-U qooaۭl~囮X *2|u|"uI}=GU:c,/bXʷѼ, |%E?d4Yѝ7ͭ@7vIHd|&^me霦,}YA5]SGM}miܚq^X)s9p I7vK`Lik.[wgW6<7zO/n!8ok]|s(vODh,ۖ2ϮWse쎅4HPws=Q,_ye1łvuO;g{Noci2vZ *6N|<9E!a0~NSE@\Сb4iDž?kggSoN4nu0`:|A7t)C:+! 8pvW5h8 * ;A|vhϮ Z@Mv|sk%a115GAS ᭭=~ ~osrv-+/[ΗhSt ~ǽhXRh=7)D\*vGMI-@V -\-@lPϳOx7qGK<7f<90`ЎVz[Vyy. B ֕8[ 1K8Xvd)ʷS1l1Mc-ͨ;Kb::mqXv՝z1c)}âv9u/aZ:r^ƍi{їse [UKPuoF)]tﰜ4no?7e5bJ aя*_j<3nL,}Y:S,ݠ~Ԣ-8" gcCʣʾt~emt˪y:׷[6]Y:W,ݠ~Fj&*`6C̰8agkyuT¦& ˁZj ӗ܃җ}ʷ_*w־nCkUddSu@-5T`f1|aXn|(kQM q`P/͈K `1,/~+#?#9/,,юts/68,}Y:A}tI_+zы^Tol; ,}Y:gP<]a*c)??,wss|Sҵ]oJzzW~W).HRY]ECȸiiJl7bk"Tٌâ=p@?nhF/@Fh]ى.~Ytir[҆p*w|җsewnV_Ublg af>"0nb޽H+L}sm}K^R:Z!DU~l@?39'u;禩#wJaZwܑ{ᇓo,I+8zh+^?t ~~,}&꫿ ;u0}k^S\oַy<;Go>merwJv=gS[__Z/.8]6NH}ٗߙr{jϚ;d8 Nj.] HHooB oxC[+a}:ZK7MI(-뻾8|p뀠WUN?1-~"'4X.'(8n}^@%`P.T*:| (؏PTh n{__(%$f0(#_Oooj'u:GD>?``2 <-R\ _EWWm;,/w+ca?>?8vXbMKKR_nZ@U ?TOD{2B5#*/b4i4ѿK g~g&3_\i)뮻Jsl)/}KW ˿TD||LqEgxk?SO%:T\ob~G~$ I d>S?=yֳU|'rZg`qTU~7Bv̯j^E9X?@ 0:u*! >>,F'&H ~3"2#4XdO/ˋrO_k,"ߏ9~fV`I!^;r})ROHА7f%3a ~io4 s[F7T[|}yw+amH]G]hwd4 k|LN~W\Qpd6ork,akh#P.'mk#h~73xFИh"lJTzTXt{__Q0& u]P"CGSt@B9Xş;ɡ jw!'}'!v2]ǫ*%|81TD0rmy3%ߊ˿F=hR _V5-{Zǿș-NST!XQ]VڑHȞ=Yx,/`GѐE ;~L / [ڑvIk׊*ܯY J<|a;m~'tBm4KxM9ҏ9thN[5wiU{M}%k4kumH#z7z 5]9۠eðW|վ~k3 `3ݔ5S#PԵu?̬`X)ܢHS^JqCGi~צבݖHJ+;Cj'`nY!Џ+w~'}?hƿ^zNw{6}|w3.G?"v41?GO6  ħ~g6a!U6Il9YǞ ?015`_Ĵÿ }8c ğcl&Ƹb߆hXl)S%5{w#@_tC  7UlNn!?dE;ͩՅsRU3d,@µ]\esS C zp9Mq(ܻGzk&n:)ByoT.@!\yp_=͍@|?ۗb磟zN̵}/_-6[k F|nK3d:!_52nUbmۆxܞD{x\ ܺ?rq98:@ߑ{N <:`b nBNRFITesL=7_̅&ϗoqpaț#|f42]ͣNZ)HG"ooI#\nУ#XCէ\70|o|c*Qp?eGzؐ/-Kb>EF`C t^|w|G}~o2uD6sq muQoC{{Wػ{\ykotlӁ|-W2z2:%Wmq #9Nt `|> t8:(90tDcp7|7$@~ԉz?m\1luF'G7X=#n>US~XHu{IC}?FpSFhX0vuv)mpe_EXjv!4a^WG߮Y:0ܻg.Nt,:t(P&`ȇ8o]B6oy[A8ih A@{@` A0r @^a#|߳L#nms @d}> tėB͂t4./|$1OO'm " /ɟ(/ vܒz}2QA,5Few"XB]Fͻ!H ԾQ@ɋ[>ĩeoQ @Fô _4h"p+0*>i,Ԡ/!Qݝ5o3zoad_(U_U>pBGw@U|YsVFgTcCg5a lxN#g<:s,ө\00q/6z0S>eۀ8 >^|㗂8O|YxcVi"T6RV|Z}݉P3@ t2C;NoG1`ZGqDe$ aF^l!1t8 Iɋ*|aCˬ#ґcm%K?IZ," tł`q/ا/}f϶+`L;; ,a6܁?'=튆zԹez@g$!|af D(2hO߸ bſ%\h8Ry# U<-aXt>>e-8tHy$)!N2qݾ:"Yy{ď}x54 Jۚ]7@ 3!YQ>X?3dhN|5=._*6_W'm !/&ooO91i69}`c yl;Y{^:1q68ta8K_6Lv_u F)qteߣᲪ< $6Th0uku{?\DZd~OOHab9C.0#=[iNHN0-PF텹?mt\zIm@Aa`.h.bHcTBpwf$9mFge_g C8BtzQPNE3uGF*B(OGB?.1_L& ݾ*hUx M {;A3( p9F䍦W˧_fӯh&5@l QEnt~er7JWn/~W͌o4vSVÁq*BT#UZh7\[rw͟7uy%*h{!Mul& 5LHQJT~1]ZsF|swܱ?*i0)74$ܟ84q!h4ުiBdZ#̕G’]ɜO?M,]ׂJFlV9SsrlG_% Y]-ޘU@ꫡ>]WQB.ITk#:HJv4VnWCW*'j*kf`#6K4A1 c ʘQk)oE,SG5|FU*7o۷QwnVy}> wëC Mc|/ZD!P6Z0 ~fXb.<[x%ԗ'uV &lD٣ ~~ژ䑗z.\)3߫G!>L@TkO]>+? \ѣ5#b, f]k _wKo;%N;I XJlˀt#G?vK!DSg$6e>RKXLQ4cᳺ2].%J5$Zp* IѶ|;C# _ o+ocl XUe R,aY(X ,RL#l"cl #:4o܆U O<w D$36観i=@ozh-07z9`⺏Z0 m-: [u!ՌfG%8u3ɠ8@øzD@ L7sa10zc=i스1 Q؀vd` 𳅄8uWjTZt; 03ڠk?Σql$ /7 |tm3@*1RyV;1}o8?zsڍӚhi4 . Øaf,tkp,p4CF;r 31Y γngE~p`#8k?pׁJkD|g\z9x|w8'F*S*#)AN.ai80lԹKpS~*S)*Y$Q_{),D7ކC*pJa?sP9W2L (?7hQp` Tis@J_)t#m Uz7VKSWגM{r}LMKSKKIENDB`ic04ARGB$UGwxxzxQxwxwxwxwxwxwxwxwxwwv.ԂÍւʷ؁ͮǼĚr5 ݼ/ܫ ݅ $\ޮh߰ف 㫮ⲁ |ztv㲁 px 嶏ԂÍւʷ؁ͮĚԦu€ ݊zܫ ݮhޮo߰ف 㫮ⲁ |ztv㲁 px 嶏ԂÍւʷ؁ͮĚԦu€ ݊zܫ ݮhޮo߰ف 㫮ⲁ |ztv㲁 px 嶏ic14ΉPNG  IHDRxsRGBDeXIfMM*i @IDATx #{ԒeܱcrIz}̗De*b0@ L@" wo oZ, < U7q*(v5]( e=Y{0|䣲@鬃' pdž{ң=u`wdzv3K/&Tknv zYJkz]uW@\^SSLY.,p%y ѻ8j,p/̾MJ7u%, 2 0([kw7(1H"!~۝ʗ-6myКdrf+>e}>- . y9& C0e31XfxE7XC䴩yC뒽>,_c `sL4ݲ-~ +c@Qt.5xK,Wrr9m^ѲXy̓w|ML@k? ?]!̾4<ؖ^[f>PE-8 ?e9 7\E&8qX{`@L> Nf9sm' qi-p;oy_mN@R{)II)*,@:`rt3; :qT,ayh I"eĞԟ #B9DU@9g0263|֓'Oϡ.d% E'enM扚OBY`, ~*ݕ]夡 QK!d db|Ҹ)|4>|?_|w;O>V:;;$P96o# 8We~_>}:=888g21;m>; @}@>o,^3Fy Ԉo%j&`o[aSN?;9M_ x.+Zx,}p̃Cyo/w܉fNvwwOL3}(לm (|%#^ȩ8oY`u,ܞdo 8={.{{{;Ϟ={˧jfS7, l;y4H:S.shY1Y-3ЛA8|ʙ8_l8Q?6Nv 4EQa,P̉kyhqL_[z׿~Z g=N7ptrxC3}}eVY Z f e;٨@NW_}N qR7oޜPٱx' X }3 sޠ?DqjV+ZZoY߼;zB@ZAkX0!F*\6 Ȫ?8`bJ<$ h C@0׍'^MBY1[ ?)r$'l x.zgmhoZ YO6@ff9pZZk72uAt3~ r3M- Z oA9 Gϴ&[˂M_kAGI)^@΀LC/wYѲY`M˔t) {dj.7S@Y:0~B4T=S=V囚Є3Ě9Gz}X(D:)熠>LpwisV󟺏f:'*[( \-N:)صzCTf-1x5A8-@;vMΝ@>\v[`li1 xJR-[O]gG | GO'=ЦAlkX6 3O@ΩuzeX?k㒞q(Ie0vo t2.~H1+- ݟK-|><` 'X-4g>B9C)]Y󟘴Nt %{n4U;eFNTΈG#^#=xJY H%?~C Pn=@;Rw?: Wr*o)rU;@97,MZQ%e< s|甃81^i6o5#FIP@h7:Ep>IrY*}([d Ȳ@7= ~"~iR˰ ]Q1۬cqCsT Bys@??~B~g.q5#0Cޓ6|Keɣljo+- ,uC;Dssݱ/kV_WU $_`?ȷ<`'Ӆ!'WjaUN,Pl3ϝNOQ3ffҲ@Y6-[" * k4BQ}U~jkKJ*_XoI;HN~Yg]6_cI [@"iBL.2wuP qF6@NK‡x&A-@;4Pkl,v 3n#5t~iP`s fP`-ZyȚ=Bh9o98 [wbr<w;w7VIY[{'p=2[ш5^L9O>(8YPklբ<3T+ ]MepO˴:C:hi-YxbG ݻw^ $ZZMPq@Jlrl ai{+,P@ CsDCη@ݑ2FC~`f@i8375PEV' [{>oA> Pv 0śhDY`c'j'HY,^0*eC9F3]}&0o}n @C3?)aJ. D/,orr|Cƪ+[Ϻϱ,Pc{]t_@#39:8*g6xE_GGG `̡C3 lrlP( ܅Xin)r׳^#{~c)3=TmoC}_'~g-ŏ~`ȩzvZ,`péP( N)N"Tee.#T'vj=so 8Ԛ ho {r:N#`ȫO2EZ&jZJ,Pa9S2HS6zXuڲ ?tOW4z'@Jz/?n@Q̞X-Pe, i)JWX  lxO>Y)=N 12( 䞉nk&! Oz=˿Oj& яyfUNVXT%X( ܕ E1B`Ə' Nx~u2 hQoهdf9E~ԧ Z^,Po }`/d2f77겎Gb^N7&oX@<{u w${od A$DF_N@N,P9*S(  {4H4?uD<u9J}\H~OX>#x(0XCtS>mk&mYz-goa1}}~ @s~[6o^Hv \m3c||Y ƚ&oh+@u q?5*LY)sT,PxLgˣܑrC}'rB/UWy$X-(dW >ӷq񚀶9O pr` PBY,`-f%<3iw)!q_<؁Q՚&@q# prpy~::r%<]_uen449mrulC>6O'kR`WT'h`M@Ru)A4m T<9rNTYUcv ޡ};?d:f'ojk5~0PT?h}= =kr[Y|9Fщj`bJl> 9o97lYϲ;9fX&Cϟ={ÿ/ x=kvkx@JFp<'@8j&`l˵-`mO}xYqX@6gr8o}M.:y,>ߪN']0>+}CN~9v] n9kq n >Rژ˜=`}}@~uS`T 9kXP&=ML`땪p KO9sP( ,fڍÙiG1ZV  ʤ}V@'5>퀷=z-`>4*0=$aP>/cq_YvB;e,渨fP}}u_G[*nj^ ˗l#g) t0Ku^9a)`=seYZ@\m2=@va,e;JbQ Țŧuk>*y@ ~]uY9v1;OYIyui)zh>QF[6}з#z4NZ];!+p`Tmƚ}{ >ݚZ-ZZZ^{)VY,pM ֜96o綯_>H_)wկ5ݛ7ok9/-P>ˇn٫|ۣL(OkTYqZ7;>zv2p#?Eir^k 6~~g, Ty ЦA&y- 6 KCNe)BVy^/`l9y!98 %f'/2`}P̼9̦~}bMOä鋈#(Ѷ+ka?~M𺺪^Y7@їU|33h\?6s;]:HĚ#`M.Ӛ6ds(('`lG[:u0e- Ϣdd2(:g)p:NKd;~GJOѠw @^Wk`ɫ˷Aٚɛ'̛r(C}ڲ!>M- khMNZH".'YAZ rY,07z2{tH/!30>~z<k#9|;klG%'iˠ\k& [h sw}rhY,p;h{w'u7HnGiCP18>>>Қ:>~5y B9eV,_nY,p= dО VUt#?+ ljaGx@oݷ.&@S' UGТ@8]3 rVdUWeX@y8ߠoξu&@"8 8Q{gM@'n[0(׍گ5a)`5S,PX{H:m3 @׼։| S<,#H0ǚ'@ⓐAryPkM@ x 'K۳wHnW3Ҭi0*>O-ǚI_/uh kbArGPR57Hy9 rVdUWe@]i;4`7m P``W4?#W^vb >zA;7OyW,a#`X~jK]Y,p><Ya#"j wc 8XyY-3UWv('y[8)C-4U*e{~\n' P_ni+0ė'@k%5OXp;r󜟵(2S:r@҉Ϟ-52jE]PݟnUϭȴf3t& P&g`o{'}D5 ZOΊXW. 2@la}NӾyWK}EWp՝J:[.3:v}݉/^ӷ hUSF2Pf!NR3;[}j,PXVȠjږ}PU-c@!𧎏4!x֢cͽ] 8њY y^Khg96ܧp۳ndյbe_?Eom6ts]Җ8mqϣC&X'#/$C.ǐ#LB>;Z 50kM@n> 6^};`c-^M׷ e6xL*ym򜦍 ^sao&য়~#U-JXJ.4зva?bM ώYЩ(ѷ>U?#2hg5}@Qhg pA\ m[ܒaKmY,p)0 Nzf3CG}΁t#Ț=q;U }K`ӧZx'v>X<0B]N@Xv~ֲ@YXнN~N3S):7N&A_6q`_v uM1c7ʴ j2W@9WҤuM/McTnY]"禕erku~ ՝ţɚ=LD)9ӁykfuǏL9w.\Mg/='W= Lӳ@(Ўiz~3#/\@p?|Wk>WXԴoyu pF&eմ@l0^d]rg?N.: ZoRmiQ` PS_鍝m }5}`{Bcg֡l;LpƮeճ`:^Jy8O]x ȗAM.(&kat'2E>Gz3j%nSmKj+n|E{-o[x錭+=&Be-#ĮYf3:~9W,P( < ^4M6o,J6 HwJJlϗ*̑uZO!J" 5Ϸ^t< m-ӻw>8arr.V9ܪyKyY,L YeC}0XZ @)'htlѠ.'4:rydesz,tKgeYfzî"|8M9HBN0qY9m4xijKQY,P rESZ"}`?;f<,u[=}ʲԱ\Muȷ՚>0@U\( :i9yµIle(D+3O>w|˚f>^~=O_hB~A} vjġr官.+@Y`5,A2ʄh Ԃ;i.m"|Nt[F/,dtsH#K 4ĶO ɳO@d'ҝ 5"х k/YO_$HP:*5Z&Ax5Z0Y(#Bca,WNrZUejYrp 9aḷn7Ӷ 6L6.8>yz)lS A )zVO ޠ_XgG~k!':CC- :3B93SEe@F@~ HNyiY˜^&EWycϲoj5`,r 6?<(k55-'XJ,PX= NL4cЇRy3ƯlnGt1 pmt= ~uzXT2lĚv EΔxxCo|T93p z8y=),n[ڦ3'Gw?32mzRzN_ՁFڡπ?"E8 &@i>.G&@)zm#vV#|9 uT2loLX~Yy@Y`- 9t gGsD>5Jp/=?/W^;o6fPx,̅ bL~ G6(1HeeeureOrћy9O/XB.wz,9gKOmv$lgD wSI>Z } QF""cZԯ0`r slnݎw_E,p~,Oۈg:v]'t(Ml<2H`S-+`]@/J$8A?SSQˡ9MCyV <δ/Ph~[}|?-˻Ǜ!n&LoT?>eɓ'z55xbr,F!s4)'CP@2F%eZ`\tr3h#- 5#kSdIϢQz.YܼLs}4^>!zmc 3HgO=<3%a'k,jfEvȨ?0G2|:x/-P3 p,\~lhF5>1Ho%,`={uY`i7Li,ǝzc \%6HA P39OP-7T+7oEW<^.'=я=)7& D7B ϙ: }gysEcJ Yv\ i. ,=4I;ov @h7wb.ọvO9uP8ZYܼ!Λb;>`wsE2;1 U۷>_"qĈD6/Z{'])e['(Iǯ6]pd=Y2dqhǁ 8E) !|(oEP\Ӯ7Ke΀qx+_*OfNC.8x}, @ɏ=1m<ڇrOZ,0dߨ畇M_|2ON"05{.qP0&"u;o- %Oہ4ڼuej̻N9?Dﲜ6/Ӝne)[rP-ax`(+˚OJ&?[l*! )ǘ)6܆K&(`bJXP& OGNJP5:i;G~sooW/ٳhG?w~=_$3??М6/ r[z-1|Mi ./< >:_(~+ٳg6]&{ O/@0MCۡ~e,`@FdCУGGލNetD\_|U;[ϟvo~toF{r.GgP~!)ks̳L]>ˇ+˲ҋ[Gn)6 爕O>}t(?E^ yf7蛺 Z@9u) Y` :Suoތ~it;:߃)ף'f xWc`K3H:G`r>% ͇i;O }e}^ӷY-eNƼˇr$\ԙX2zv r> Į|EDF~o2v ɠ2<|#C֯Q,PX3ЍQ` @]}'5# \o3'n8Y{I<@&O#h^K}ܙO/dY|_Y<H-weY&7mwezxE=f -rx{L\ v i m). Z3?7[P}m%|ǍXpt`Is^ DH!pzZjy-7C2mLљ#0K6iDS R?].x7߼8x8S cUt eu~>왁`md _##Ywg;`_ 5;ͅxW`FZ'O͈_^hѮF}z+M7c{,m9YmMЖyx6jηm9L]wrS^ɸym8- x* +G;(tMuቱus,h5 ЄFr.#VAw@IDATM75rЎK̝{*H? l<A-o$Ե}oj~itؠYOS]tV2׿*=\ͷr˙ ]/>sGop]hp9N~I.G@#0C=0hA13Mψ~5, [ln,#wjK?K8 `Mt@Pޥr 2оw|Yus?Z}Y,[D:u^M"'ˆ\Z yt,:(Yen?2: -m yDܑ([ K'm rmeaSm..jo|l}myo+oͷzsI+-*Dؿ·}KHNZ;pYr|>%5f\F&[ڡ @X__ n]:G?܁uk?s?g$uH6ie~߱ -:U̪̬7)k@CjKvK|47Z|%mw&u^ܷ\/ \-9)w;1mĦR:21 G|_ b7)GWNrtܧxɼP?Ŀj~܎tb?ӀhU}ݵ|_@g]̷\, \}7s@qF-|[-t:p[@S Li?in,K;):gQN[߼6畣30 )s\߉ g@P/%E.%7YW@{ʛ O#EBԓ`iħQ1@")/?7Ms_4+˼mW>[8njE6{K9$/3~G]fW!gy3uڦ5:ӢS}Fd8yjb OcZtӆdhbϴy9MyydrhsY-\T: Ab~2;m:J.`vkYܰD%` v;ҧ}ٰ]5bJzz8v5>Q:q&Υo 6sC/4KEd@ϲ%v 0/S@/rISh9(`j1Y?M]_՝g?#RYgʟ GT ((v5@+|3jNM{;HE~3`CS;G@-9;G |E߃ye4'OPϚs&EqHgp^k~8 AMcDq ljK-lF K9 myUv㤚Jg_t9k}W{Cy1"x3"g;@]GYCqOҵ8lKmc@cft$j f4x `[pM#o[:,UaY 9t,;9=r˔eUػ.=X}{=kEU~:'r>#]5UY0/b[wcVN5?GzǛzdۊ[ ,𷜏g>i+<| Dۥ]:Ĝ~zX:+}Z5U,\4`ψ>Sݳ~FЉ >#X/=PeyX#v^*nɁWOkHF 8eBTg2M>Acmڛ\_`Kz9=DJEn.˔4#p,e}I3TyG8 ~{1gO8 k~^̍OΑhX8RC'[K[ʯtmsx(`0. < 2S/#ψ@3idJ^e{AT?1haOT7@=@vvU-=v#{)~= e N xs@Z£@97<ЀT(rMӫ@yme<:4in{oojӞx߁?G9O-бvIX^`BA-:#`w?#9lĆ@2cr?p.6D]o=e|ۿkmT(MnsNXq)xho|94Ѻ~L3gJ[Eځ>͎zF3? Xُpn=RSd6 Ӂ_/ai^M* @9K╧NgݐlGΠwh.hwgЇcx/):x'o9O+-ا!ʬNҼJ 01ruCZ=6{߱,S'Y)}Q?hOy:zMy' X) F8,:l``2%- e-Pmګ^<zmy~o xf>?{.?X(Џ(yZyc +`] 8?i9@>; xMo q]Y,PXXIKaY`-#i4N?ȝ' C=.?~dUӛ_ 5Gn<Pxdx Vvy+bm~E4/Sa9`1]r(-\gܐ&;  3~C rl}ūZZ2p,r@-̫ߖy{?9QG}D_i8md?2^zP>'`Ҧ@>F3uHks :`cU޶eϢiweU@9|ײ@{󿖒Zm7m{|^g01Ш곋٧F.Ly?QBʄ>y>?YѾF,|rQ8y!~__WX .g3,6Lj~Ϣ7F?w"O?#v?Sj+; u'#y _F4pQP=Qܶt;9=N˙mYy;yyOF1k9~W:$ѣ<36;w8CGMf t}͘> xNJ=szM㲜vyѲZ= uM]ikx[]~P0;P>(A{G#WbaBY(wǭA!03G>8e G8J6EON;y~1tNsY62*V}k-?_\nUk,M%J bࡓ5癿@>^}/Ei6Թr79:TK%c,K]ap89#^NPf"lk#CӹI,S^?k}@m>]5m]wl~c~@_S8O#j//~xvc O6IYt)p1g$jyici5YYuQuGu:` yCNCc?y:Z"g;^7JISޮ~/3iRݎqz4^6Q[8:7pdj[:[zo(eg7#O4(>4s~V4?N@|G2oYwN3wzNyhaF蜭c k[$>m(m؛>'ҙ'u3BCʲoU} p6nC7iwY[S>#}ث0W t1yiܓ vErܚmxC[ gaK|8<]  Hmy& DPi/ڥ&.]*@9>Fì|[z5g|?̧>C=DTg^yf_?;r.=Sޤ/70 (SeB.VLM3BU(BN?y}(I"C8ŖUFH6y\[8@<Q>CsI!`XE+E޶ʯl9} MJߨx#U`!0u 鶉Ayu+Od {F~ix_}wW$I:tX @@4pt\< `v46g灟p^@)!oUeGernttMjȡ1/=i}xㅀzcS`OPydi8pŘyyW(#3~ ]=@vgB#zʱ<%C *-MB8]j@m|`Dv}_@w_/>_meu@9K<܌|q,)3=R}|_}eU@9wt|ùVߤ:N97y@z,>znt@|vt'@q@lv m9w8Ј;r b+ d>wC_+CN?YJkמ`t3jAhԓmX38 ұ_r7qK]Ŭ b%mpZr_|yE`r,1ryWlgh--mrn¥F͛QׯG?0:wt?3:,PMK73ͫmg_}5:lo|u8rF{{}go&'G}Dod1b cVEǍ}]FE'vjlA>N'ڌYm["`@W( Xb7gFrpGG\yv߮(;@c3~  \Qx? C0-M?i<] 0}+ma1 %,UOV@}8My Z*_ Q1db= @NDucM\@}_?KL?1:3RP"yMmNщO43p&'L#}( Km\0oZ('i )L_l@y@`>auMXȶ˱3ڋ8޾A;"w`/İMܡ|I,Lᱨс6:GJVNG(3 r*cyH Q´? rڼJo?uRb/{p㈅ۛ~jZI3-vx[ |mˡ<3g'Q S⹿7oF8|a<& ñ`QE|֌G.8*?s j.7C'H_ež~vN@3N %Q ~!V( }rZ i2s94rpϑ[,( |P|/g-3 pPÊ9}o' cc$d un!D_Yy+`0c4<«PX' gM&/ҷ| -Fxן~1l@R.hGN@L%d[ߑf*[ Pa gH7IGvqL~'guT2$;yғv:IwY~W;r{1 +^nNBo*e]fvrz&?v[/_Cufo[_{U>޶_\nU,0x Ǝ~l>0* "&|@6 "J =ž(BeФ@eP,tZ來=8vvͧ^|Q<'`([ ey#4 c67xq;ۂS.X~Z_VXsG !{8;tt c Xۀ!PL"[ad eo{3c%`J^!DǛT^(S9K|ю?+w79:ѯ$G+bDtހpY :?tX(u3:('U9oja pP%?M  jﲘ=N`6p3;W ߶oksE@|C#J hȭQ1_:~=^cC6 xg." \ih/:imw!>i9(N@_U@} g#D n(Km*@Fyx`r "}@Ӫ7h?#{cNSi揹~,d=cY ɚm(yՇw`±ڮć'8ƾ]x @A5d'`%,pԃ;{P9`jraZ2np!ԴV 0R8 zpxit"wrޫC9Rx0k39@1Fg|@< FNk'teN;djJț:M^m;G@v pr/+pP@mbk'yu0_- ˵@9˵gi[ .~Evd~@"8T3ﺸ/fѦC{ r.DLG-*\}uLNÏHV:qJ8hpm PǜOF`3ރ?U8w-Gm.s-;߄0gڂ{}8s{۳DsǛTXBb&`TFOfO3>|0=;wTxLHHSJ;~*(p& IO:y@)M_b^ F?i %@u;ULF3oN|O6wsC1!q=ڞx6X#!6b?_qZܶʯXyjhm~ͭ:Fw'rfHc L~)Ѡpݟ~Ȕ'H}*&6v, nyTs@^@*}KS6)GC6hG<Gq[P1K6+$3arFȂ@cg@7p xa"LFLyej7&J%vdT#xg$'}Ok4/+2 o_28Fo~;2?D%O0Ԟ3JeJG8ştF@w P3(]׋cΉvBinF̧<Q >͉ EP?eGbrɉ\7dK&LuokԾǔFw;/ 4 7x/@H#(1 'x*O5g P;HȻ)F1#td%?+d,Ky3Eg.y/G=rxPb^ϲz/}с(_!{ >'IJ7!>5dٞjU:rVl=&2t@fvp4QT9g@@\@du ]Y:+UnOOx2KW:<%AH @Qـ@dτ@@ ᄐIbqL2C7e~5awan;^Sm[!<J],͜cE`6 ηk7R 3s}M>c+౜;1\; #{n"h裴K!g= #I1}िbDA1ʥ}gF@pt NjBu9u]}r}yH;wN%\5p':!>,D~"G}rV=o۴Gy -<|v)9w$ʱUN$@&9xq;OGsubrLqrny9r'5QO>+xOx4L볝@=xAΑD~)'wזۜP uNIMP_۱50Ч\^T7qċt۠kQ'iuPx98FRw]Ii}rق;S"@m(Z,YӿEdBYx'h{a sIkC5p vxybv,g';I%e./zKKsB@tVo?vж:`>6Zq3/Qlgo(S :4y&[nl7c<ek`x;Az0-yP8oe룭ܐ}V_+sݴ?Uz(zvZlnI8D.PN;sNaڧzM0SGP@'0vC&~L7w0c!H&TBi@L/!B B c:{z?60]V ?ON p0LIgHvAjPPPP< {P5i?#.e%q!r28̓,\y|PaC@òJ`rji–hg/R~*N R ! LN ~9!`!8{΅s%7(0`Jǎ K7SrtZzFA>-3){Ǭ{gYr" w X+{F<$Awƞ{Gw{K(w;=BV@3x3dۄ&c-mCu;B>+B@Ƥ'N MAnh@7t M L͒f m3+tEkP1hM 3+d48yDU8!d.bjxq{$}vBٻD:ΥJGa)F ,4Dr/cq 癿MvSd0M@PQ +-?ls!s403=[aZ>z0oBXB=o))3npWz}a&[軇PV2g ʳm趂8 \Ҏ5{j@wC ~a}Jy4 x fA_޵BX/u(A2zIB+K9K˅c0 ɇy`&`oI5{΄jvjDm#H| kVY< q3^< =xM4¾&Ccw Gn5gbgh€ige@[2 z")_\%Wɶ)|#[l;.neʻM}6]oǀ1y 0ǟ="Ct2[K4.L`E'&xtx ˰f?WB<+N2^iLœ0@>eڡC,8 МWR :`zMZ8%8)@3@Xzl \y>QC> Cn\{j|QrkD(@3_DB L!t<0N/I^ O>^GGy<{z@ %qaHzMXu^ y|nX1;}40M`/x{&+GJa|x 8*yv2IS@BXk{GYs@>$Ըkf߼ٶY-* wKC kjy*u"?m^𮤂?>e!,գ(`q~"q|yq6A ,?`hūE0 L Lک  \W$:OseM @X }T/Lb@a*X[t,BcP!@__I28swR'LSk/u_!SD WoQld;Ə&ȶhAq}#-\P`Z(F!Hj,n) 07nTQ)P"<#(w1vK ZaA x 6v\{ã /m#.^7 <;zzȠ+s azu`F`&=O>L^&B4 &A;ʀ%DWKH{o] 﫤Ϯ~?5p}"EҿSw:K9RrC-젉YMDi}<-oV+.Lu0V ̭/xg?}fccSf/iD,m el ukA@X80|5P@!NUWo&^iGi+[}1$d[f%[oƿEfQ/ɏqbTа'l0ܹukZBsCK|{,$ǭlAŤ@-S-p ('`_&`BU0{ Ã!slMT2d: ax2^0a)ϩ?^!K]Kmy)#ZW6T L_l0 KyS a8g[HZ0g_˛acA=r;DC'1!d|Z& wrUf>y; :2Ec޾o~2dyV{xGga6{v7qMXDZt96Sg i[VmW+qǞ:~Vwߨ5ro4f-L^ޗPWKB)/Õ^MRG$iQ@^f/e|T/e z%-D%?dlwʑ@ w12}_ p= } F'{p:(!\P`IPI'hl"< p]<%eG a|03Y]ʫ[Ҕ٥;x6FOY8׌Kk}Jfr@~l loL>`-+ Fh XIs0Xa^IS"@ǹ' ,<>R'!ЧJ8X%Jh$@%N pC5NZ l8́_{hP`(H3t)'R}&yX`0` e}N0*޷+@IDAT(C邓22ڑgIɖ:hL*a*9MfAჿx*?6\P`( I [hسML2 a^0 `"03eŸQ.1Fe.0 >+i|Ykŀ2~YCiG״sn)B^}cB9gi sUA@B:ۊ)8~k g+% "H Rޘ?`2}@7 [0} v̑-= 4P ip4:\2iƗ6SmwTL K/$r +ZVf!oH#5 ފ1Y`PO}q)-g-~Ӟj #ZE2e"!04F@,vX(96{G3ư|9Զw Tƅ1UBpĈl",(c!` OyNlƿ|\f0/`+#AmթUb؇+2i?1B+|[R > ]a0{~ H\l+/1cП1# ! M3hL$78Ne8w4NZ !zm\k Nƕgu5 LjߋPR.CR'k"(" X؅s<@W= l0|e2hc#Tolq^YBi6\P`*(T C 1I 0۵ <+CZVjs<u r+>{Ǔ j'h 5$Ҿ j0H?g/j8aB#PF'Nh2^)-\i)Vt DFP`("I]Om|sl2'x2nL0 du s)a\6`{/tRa.`_ ~eu|?s |U^:6C ω5J(L@c)<pLY ݌h+N3hgޓ4.Ѯ-iEBhi)'0yx`6oQ?'Y\ @#@g2xGYo<]Jz]ptSK, *avy٫|pΘ?a*V L_?_) ' grZ\>-0%cK6LmoްнK?u`H]Tћ)m?*xij pVO-+rSn |W.8U?̒}l,$$ "gz]7}~G."[V땁 ލ _. ,OЧ׌/H|Bv{8 F.Kқ)~S.``ԅ~W/ la(@ʢWPXz.JYOCBȶ O&濡Ih yVBG}Džv 0~ĺa@hDsJWcA'\(Mk>a,Q YuQ(`L߇9D4`-{6V`|9=ㅹn{ >>|0zmoU?@R g>9siaP`'?z_BҔ>lFH߄Ќ4Aza{!8kBMXc^<}='A`^=g{E5&mc4XT(0:X{ZG`=XzDKHkBmzVq\}%%ҹ&4i"I'ڌMn֨=[Hz:<4pж 3GlZ@kɟx/ ywۈKGկ*N'(=![7uVχIC_i;Vnܬ,iT,\CX&Lj~"glc-Y:!Lar0`>l \R 8;WBN " .pp+= cZLB |s/ь fԨR{& ]Yi,ϖ&y|KC$͇?A)@S4S&u05 Uɳ4,!01s&l| epbf9n53acL_!xxOY ٧iykK9 bS hf)$Ž@@`}cRY  {`cIHQܤMh ^mzw*G=g7KDX'BPh9Si B}.m[Z(!tE Mj ᷅ߴ0G_ꐞK 0GNl@50oQDWCH3KǗx% ˏM=6 ~9mB=cE@=Z[Yl^Q\Ҭo+k!lm ?lqp)@sZEɠ@LhKaD`\PC=hphT m%!g8K#ccV]pGHMeGn4?B'|_y@hyq N]Hii>?gi!,%G&T$FVh`ch8·lKdR)o@y~B L(}@zIi~oτ9?L7ot}Hܜci!Lh.3E&xA>M3&@149{ⷋm~`s g ,t}F7/a : }aa:_Ve?% : 7 +sIP?[܇sO LB)DaJøi|pqWͲGCV;xE]KKps ?>Ő1 l`osO-%W/mrFo~2T(оH;^7K'>Qֻҳ{ؖF}=H77Xm)kHJ (DBP`4 0i̞s)iabh6E4$"A|a  x _BcGk 2|YJP$vho*},p >mⴝ%nZhqFOkO\;V&e @G_*q(8ԋ˞DXo#{!>!`, .̒ˁ85SSF  8]v89w7IET2}yG҈ʿi Cټ==a gP~Z>)=CѸ!K)P,CJ(09$VX?_92yFX-yxl2Tv$oM@Q5R-gUK4jF}7ZtFܞ-iJ}|SM [h!Lt=i7/rI Cs8&n6Ds@ 擶:RuzI ~ $$M{0w |w<X*rRpB!(0Lp6dC,~$q[47lwFv Wuo,6K;E0w z&@i0qXܗ UQ"uơp] I3/h,̸.#fYDi4%G1~:矍aazs}3_6wJ_%Ljl=+^Ҧ  AtCejF΍5t&YT G?&3av`g (q* YݯBUcQU4_!ya]?=j`†<.pY|_ `egO_L0foL>}{fd-8r` o lrGMjy:~k@Ҵa}'TOH1*i+yȶϯ6Ky BzwW? Vg*Za%8 ܞgŸ~c`Gc>MN|L:kޏqM5)Sø`5AGtR  K&@)lq7!>LQy*L۷J~RRϗU&a=tպ .֊ZWौwK. wrP`t s^f`o*~=/e=uQp޹~yN;MUyAoqM66q XAq)P?&ZٌI81T.m(=`DX{Ϋv*+ROn `lvK:ho1#nmV`iL0MtRRΜ[Z)l F)}}/i@2ǒ-n2MA?>Ƈ!; ΞR"`Xs+}ݒF  9ӏa*4fDWfL?`!x4a[.B ~ ^Qd @ 0!b3!B/R3-nuL0aFF7~sΩVs2dӹBh=X~R|q D]`h .]#h$" ]ŋ'a )G A6 1z a>n0nB\jbce|y_[:iS ٧tk{~ۄ_l|m%;i&{:kG~>4%2ȷȾzF EP i '4oB}4xK} :`x><F\u [m!GˀhL&H *Q_$ #>1Яa &pacK`W6 K9a[]4ni>T!:uu#/(O#BV0⫞_,[+xI׋~z! D lVW!@=E*;[{oL? So >[_pVf~S]^|)|zSP`bZ5nL0F`ki= @?ƅ;Ů`0NG "LV4⩷zr%7j^ ^)|zSF'& =i7ůIUYjF50q*#sc`\^\b(s_Rn϶4x-nYGAnP4 }LՕ%/?k紿iq‹f0 aQ*(X aOVwQL14͞~[!4 w$BmrP`$ ̛`=@t=3uBۄ7 ,; ~fa[P7x/B/pW1&ޘzsy}ʆ !,.9kg +#f}|Wχ|?5:<{{ j1ïf!yu._ruym)"}ymo^?O)s5M|0m\mgj\ڳ쳫´wq\O7 '? w w 'ܳukO 57V뤭5{uOc>N^/MlDa(@{ HA)[hg0d_!.i0seAna[V=*%N<*7&o!BcT>K|H{A%GܐFfPeՎUˆU8j0J~|p7  Gn J==0~jVxE1yBK5e-o  Z[އփ(`(!?G yqFS<[{X-=R}%F/j^:?MД[-o 0@4N1Q.᧤$ӈ+'9 3zs+yWf/*GZX/aPÿ |K].--A@[*&@lVJigC/[+:I[/V;`] $}'\- #b0? ЄO=KiG\Oۥ:˘;&O'NlqBak\7Gwc!wƒW" J\,d[1 i%4,,KҡcBlg5^M>{V0m4%+{0bu, azz/g`zK9A@'D)m&&+%f-}3&.V= /^܄`Pg,c'|)T+NqP~N.nnogfweBL}g{9&(7x.=kĽr` =LS'\P (01C.Qм3zOh̚~sz=ȹ '0xp&Iòv Bhb"숰,g.Y `Ըt )N姡^ ~JZ9?2YNڥmI \ƴ ~~gb}r<[9=y=O]aO=[LS8.ˤG_nZÖZ[zAR Z J&|`ٳ!4k`x au,msm+Lq0: ?7*R[Wߴ(7!̧G<L1سSd-t g4su,ʕ-= 0ིvzQv8 0tP` #f[<Z|K|R)\-j&Nc `؄ qKO/G^@P`(I'Y?+&:5!B^OK۱2V\~.ʷ mxiۆ6Mi]Os]z@g`ҨD0e:uyu|^ăA@=>]P``9!*1vVlm`y<"}jv)@ hA)'E=Og-Lgʑ´\]좭3)_YMW޼[ZZ^.zcG ۆ6_mo^y:):*(0B.?F<(m `/_Hi,iaGZPw(}*KLfA)0*F%OxfgC0%cmx)چ6iw*W]ʦ=#v{mKn~7ϳIA@P`j(е35]b` htgyR4{LzRmRnCǀJ D6 &JL7ŴXw[H߹ ,4`&d4 AZ PK3OÀ S iA@P (0 Qך~{n]o{f q?k |]wXÖ]EEɀ A@V|C@P (!ErTU.9A@P (<`4oŮIfa%G<Ǭ{3SBAP ( LRa[BȄ3  B~$CBP ( a0uCGkix_j=/OLI}\}A )a|fFNn~c'pB8/|s[=+| k֎i{? NQ g;wgU?~y{V6l()e^eWey8>0^xHcZA%L.׮moew]uy,T~wCPV7֮][] Wi<#q*(f  EtGۀ`uWb`˔ 7K.˫P͌ı)_:묳p:D6/glf tG_YEչۧc)rgVsN?)|*WOa[߁Fۆ6i/^JWgZy!cU?UZR 5Bqo~Fe}! ~~`&ԯF( ^To#8Q((@hMXصkWg?{_C[V:V'0;͊(p[RiXjWZ^{[A1 Aiv=colXݲpk]b%|\g$,4)~ׯ`8}ӟ :mܸ.W&7|;W7oN7OSO~R i&=!.ax|WpO8p91 tя~Ta\=}7qC(;s_3s `xuQէ>`'MozӁ0{igTyc o}kw/:'< ^* ~]OԼWU?A2<=祈;|fu^h|zӛT};)<:cc9f×QAm߿Tu^x`7]q}[mٲeP p+M)CɹFRY c1Ӟ4{uC< [3|+v cΕQ{'> ^f͚㗋[aOk TKFMON!tK߀X={o;'$7(`PwW2x</}KW0:DfJmzcN։-ݽēdՌXRm"@:g=Օ[y0pG1 cYE+k g.ˀ`"ƨ8PVGo~gm۶U_җܞ? =jT9ӟt͇2:ٺuy'?Q5-nW#9և>jǎ @gN6\Is?t k^SNI◺ԥ7'00h?Yqw|k)9 @AA@5M Z|ߞ-yk^qFcb98ϙr+ҰH>Ӹ= 3Kw(+P9`XOyS-mBQnZC>`F0p jfh`0+ɇ*ok;{9V0 r0>U?яnxܑ3)ڍ}c}wrҡvo+FW<[!`PY\u{U+V_S$J BRyCa( h綆xBs l-@jt|CSЌn] k @K|Evʈ1; P NJ z>>r^xp(ql1'(QJj= TzhrPf'a  rf~׻U+ϥM\4h!p R G4v!9NJɝ]ka07uSd/Vi<9餓rYis :m+Ա]u 6Ђ=6Υ{Vʭ/YC)M9!8!d5aT}وf!h-s\magV%Fs0L` ի1]Ρ{f+gilW 9uODQ:@S.xWקYMxEmaA'eB88Yxv6]ZrƏ5ߒc/ Viʞ9+לZu9y[hn %ۈ&w,z~*:ᧄ;!9`OTO™T'EǥNh/qelΊ֒ߠJЦp>9]0aK=>̘YV)D ~>vt"*|sQH , Lz/~.`>지=: A5b(~QK 2ttÃJ6Mi'hmн 9rFǺ (.()[qg0?b/ jht[RdQ:DʴsIJ_7L5_(Z\K0X$6rEN FJ#=(\(iԼ]I*k/nt+>}qv0]b\zᔳ̷< 50+i$zի.PǗ!"|`Ms~K0`EZ s.m]u4c)޾i^)ߴ^zMu )Q] ]z*42_zyJuuLĸRSB Þ9_Xѧڄ1Qk# ǥ̭F3mlhF!sQT.\3cOj1"c[P7]Y `Х A7 8/(!Bgvu6`m/~kC]ض jJeBhL^IC^r@32] ;;`,}o 㱜@>F h=| 3z~O)< >qRi> /mkK´|+?_=A*eO>~a\rCx)_0=aؗ-Kx a.z'.azӞV4xL'( +Ai@L,C`{=gOrKS YTͷJϕ?̩!7]α2'Ujy1^%æ0<̪tD$  po\1H%/]< O68ލp(0rNו)4R>9;3Efwle`:= E9O<ꨣR/}iGJj~xCR﮼#G}nl?pZ]~EiJC>= 9+:F@|c9F/2:CSEp!Tr9Ї>T?$;WE&dUUbĨ: B]\_׼5#<k&MXXd!L,7uza_]-sä  am[?x=7,mnsQz/wMB]+%!1`!׏=@Mm",^ L!L }_ T==.VI,YN`0gd9ޖ[J~{ޣYDGV|彇'ԏ7"fAɞtj&\GL"xGd|Rm"})P lt^uL|>sfGnwb^$(])]`0jWgϾ2lRXJu 'TЇYngՏ15P73WRó#N?W `:gCPj;ޠ &L~yЍ { /8"̍rim)A[ZG@wk_ZέHnV&[b~8 IDAT _05VǨ"Gݏ8\x0tJW*o;7B0YyO'W`zǖ>ꗿO8I&ʉ n\=11w pɆO|sVͅur"l?ׁq 1 aqlj'aEE XnL=B D8~<΅דv衇^w52I_C&De xc7dp4x6q1%!CR1 Xꥡ. bg?7]qgim[>'B)S>xi9{npjPʫg9Ա{NkOS?*'؟&] {eBlzz;d9}j6b[{_s}Mƨ0Iܻ0.=`xJ^ӾD4S yt kct=[uvbYo;Pt;B`J]oγx}.%^E8`@ݮ]oijx}.%^E`TP]oԳx}Yo}o"w 8kni5~PbO39D}VJQJm7S 4ܠ@P ( ,I $5: Az PO A@,aNA@L؄`:! AD)DA@P`:(tC` AR l&JK.-kmGu֬[IYol\G-5}?jp pA@P (1R-GǃAR &i-A@P`(6S7$PP (X^HWm0-/j6mhj=2 A(Y̿DH$~ӟVm޼:Cx DXDE}z=s_ .mVmذk|Ֆ-[Y| 97auy!Bũ޶&-x۷o>OUg/}Ko~Zx׿~u׻޵nW[N.3UC /8i)q =[d:g]]ή|+WWJRz I5=?k7]`cb؜~??38qLThrJ G=/N~U ^JWwy7̟'կ~Sk_ڂ._*WG.H)reNrʴY9]tQWzӛT]xcΫwW}{:zP]rnh7V^]]jWS!.-PPr{>餓}{ }ܧ:3}gA^$ G)DB(Qf {k׮=yO?Um.@_ W.qK\\Ju(@Nk/_?޽;S 4kZ#*M)5`άLPwUwF%f?JݱcG|'[>[vm6$~[ߪzSUZiV<!iN8zы^40;VYŠ"gWU~r ,(47M@S(1LVN}Š;e{|~Vzaj~.gbLQs~2*~ ›_*8Q-8g_ⴇWU@+z1~7Mf11XBmZVw׼fcۏ%'Kd^/btN~'Unzӛ?WnPLO2w:399>jԉ#:H΃~pJp8wT\:)]\cZcO}N/^WRdeRbc=v׾ v!I=JEsi-T"H6uЈo}j89Q{e E:s???(G?Ql !m/Kg=G>fu^WC™ VL/| w]+O|J}3}ˀ^T:kϊ u{T\/s(kg(N4eiZI` s̟Jd5yb _4Rn6#Ta 9!h3do{۪*`Tui/(h_zc9XU# rhXCKyG/y 4R 3|oF^UiVw׽uu?.7’X=A b5-lL8ZRm{nեܩ@ߙr6V~ 8 nN=G| ?C{)48A6[׽t5b2ll=w( #d}﫚=yŭA_._mo{y[Euu"o(Lߘ"L#Pwֽ{Tēp|~J希|Tar}DǗAӀZ7)>LVn̟6`%&Q.`[C[: wm 4=Mw6/Bnwa`yskJp,[azNBh%TRӗꍚW3  8~k'0Vs$,LI,Ԭ.q4|Jw.A@CpƇ kVRޛV ;:D>M^ aޱ2Z7lڛþWG[a y[Jr3Lv v0#[hG~G-0Fca9 $ /~=4_dK 7wKw &y,i($Q\[ !q$87 S 1C?XKBKsORgX8bt=Ƃe΁-bOPuk? ʌհl0fп_ܓU>ѧigh$d?p:*&%2 |qB O}jQHO-'G]Bㄅ9fp'<,/١@3V1erH+簪fI reHÀ.]I\W/pcbLVvX=hjOC8/ v|=XV8  ;QsG|2?Nh# +9I8>7sLH~U sL\4 äaJ8bc0`ӉPQLg<>H % Usα vrM'(1ffȵ1JGΩ/1V.*r0-Iʷ[pN4$iYQ[>̟-Ys*^DSs ^A7`ǯ= CD[ʏga@›8GN@m7tPzcqSWb۲Zdu>qz~6 t*Ujn/TRofIh!˜ƅ: hu:q4x//\b"0x[0w4&c`܄Ӵg>q=+#ka/{2Hu>B1p ΡMq(Xq kF 0W%.&&Ԧ$Po.`Ј&}_ӆc0\S:nЖ{0 Csu|I{[bNܾ/_g{u( w5דN:)}ʕ' %bt("!Ȅ[>`JǺ)4댥M'a[;u!J&Lcί}3 4 r)*NKs*W_Q r`f1>=Z +&Ĩ0x8x&5n?u'M:|ES sno4ֹ:9|@`^R?eyxK \84 h\9YS+Q <%5*a9敇, .e\e[bî.JZ4XmbI᛫Sj(?IUC|Z]!&'?LSWbu8"."*qD^u!nj[V@IHlJ\FXcp@NC 4Uiqx_=?x=`i m >!j*Chqz95Zc9#`E89ggɣ$ɜ\d۴%Ȋ=R[Z Zҩ:FUaI(աR5~ ,i3W@\N!|wCFM?0@4Սpq(š{z8yuViQsMba =jupKmf:li) a[:֤8b!NX>TS'hV++deS![,n(@7t8Ժ B.wLxs.bE36Tj&R9- JڬyȹaV.kɶĨp*A6:KHhNt0eh^hGٸD."DpD`o~[!% k9en/808-/0xFC0a#0f!jJR?k3.8i8g] X%mB, öI[%2L0KWO+]L[u3éGJL43̧dtzĄYr4Bw>O_syh;`RW)>twNce{(,x>͑IC'v/ 0Ƅh#Q:@u-/Ο:ϊڏ?|aX4|*gq%&uLW2ƻn7oO6Q h ڻdu /-f[^BJd߶А[bho`~Η%suQچ\il-J{hrZ% Р; !_,xWa"q)}A?p>)h8 _pcŀa  Cil'<^2K2˄e4 VMk}qg L|x堄Ir=Xۄ%-K--+Uk*YSgLs$hʖE–otT{gu}qn̹:adhc0K_* nY程acz*c #L'l\5^}#>`zfhJMG=QOj 7灹WԶ g`9( &lr,Xt;*`,r}`8^(1lя~S_0iO޵)kԅ+ 1ݠK ̞SeHᔘ0̊U1co +w N7:چ0"+GlQb8m;{qGH48% /TQg$Xק9W44{,Q6g8w؇mޥϖGK'Q "|U aV%*oVSԳI${쯢OUę4לCҗvՀd:\Bcփ/-řx` ڑoLܞQZ2cmBa_ x}N.)gǘ"'hCTR×"0Ju Nˑ]|}Ҋra۫^*$?/Òq}ї%^r||[ŸO34Wnz衺gȘ6:;jjp|[/>>G:WTR lrXFCI>E0&"Yu&>&2Yid%%>`·Ig*07YȎ8__\qܦǞ?s=Xms1qtRT6 08(!+,>#gGsG>Rq9@J lBDŽ]d%u=(G.Ӎ1HUd/$>OVG&yWnܾ;u͡AQS&^V#7M^C_CIڨfv8s>z/[^Ѓ c>ϪP€VWm$7| sD;LBO+H`BJ+?fħ!Lny{]ct1iX&)VLԶB/D%&_3z!׼5Y/t£= #',Qr\ lmY2CfIagj^x}&{^ ZK?lq(SAb2KwC}ܩI,)l'=IzS8rm&,,@-o X#+qVXS{αe= ϕͥz~s]ΒcΧaQ☬vrk<餓F%=GЏr] @̙U+/z}p:L;ԅ)sd"<WVԅ3,18/!`8h8 ,|i 0/uYqx≪Mz@'0KZb*PQ INhi m+ѐ6JLГO>YZ c'Tl&7Qka {^^ @6AsO|)Ƕ _ {7/60_g7xߡ;'|0DpA`BӥKSa9^-/ڊ@z6"yF׊_BI}K2),kȟ6q/zG{OWc4*Y&]&&Y?&h`LîXgd?#{'12بxi}ToFu;Hm1MVK`}Pڥea+aMœPcd F=cܦ 9zL?+]V>` C9 ON鄉/㼳 @Kc˻e6. =<4[uIHxc! 68%#*m&x`4$wsi[2NGЈ!}@Р@* xDڽGKN*FƧi2sWOG=t̫Rt!\,,iƙd 8;yXM0`&L3&Y[0bV&njǪ&pM&9&ЦLڳl!4 BƆ xf|4pgu[O9>uF4g( \4-ͻia;<+B{ڦkҦguhϸ@)#Ed. Llϸ/|~ ؆7`lÌ%ox4 9A;&4LlBa[gN0vVH>+V1ԍӿa'ǴLʬ_=k  ?YàeaTKkVvSi9߅cs[B9zuC. 0]d"m?i?no:ۦw][@{ HA@P ( 03CA@P= -RP ( fa03CUhW_zM iko=a;n{)ƅ7A E$(IP9 A) L#(>Ȩڣ@ī0Xi {:bw :@P ( B dA@P (Bh%( 3Etfrg=i7.}߸[g\zLkL^A@P (!tH Ai@:2WP ( :@tHxH |ӎ_SNM=vgK?c RWP ( j(@ q"+( K!,Ց~A@PaPC EtO-k iN>M.[j)3ǣ@hƣaP ( tBo$kcW}O0vPAwmHn-]IHmқdwI#C!u4n:@k@p@y0F/ @OT3=G1 _k/w쳳|S]`\c40#j: KR#`6TbmL.~ u$WTtݺ5F#+9k1ǸWKQ[d+k\#'r|rmM֝οt_Ċ=!'K1ϳomo?WsXa(P"NKk;cizG ܮoSN8K̍ )cH,Uo9N9?Vm1F!yyYbm,_Ic9x7A u8]Pf0F`{Wa)3ݩF+i.NAiAR)Pe#`*,CVP&R-h|V㋢ g5Ǡc?VϟE8.^@VAGWSzӦkTO6(K&z *vs8>l޶6([ޮ6v]׳)=ʶoSg :ar1>_GxCESג?cgQ>['StL8!ŷo~zÇݻwpdp"ܾ@8d4W3&QT&{in(PvaoO&=5Mkn?@|=x1|ҏRh˿c0:cؿ?#&,-Y7>g?g+Ǐo.noo߾}2޸o@ x)Bq_qᏕdy1oYח{>mg;7g=|W&w\Ł wb$l$|+4~SA_>}E ŖP͙ۡ.0aٶTxOZw:K?}nA߿suu6d$7:~='=ࣣA}4#pD8SGa X[4({' "??Տx  be/ k_0^rBa$K^]n8)*>x<'֯:=v1ȴS7)ϤgQG#pl4g$ ?v:Pv|T;u:(g؃gQ>%Ӑp5 SSp6[$~EgLZynF9"1gmO&lZɝsAkvu!ԁ.-Л`r( NDŽui@RgW[j܌0sE@81T9x&LuL+2 AXIV#;d8)C1QS:`u(OExʴiLq3FRR>BRGL̝zydc=" ms 832Aٙv^eq3FiL]+s3F HI|.tkh,C`HpMqt^阠vp/˜gj8}Tf\Dy$uLMc7ulhLGeg2k{8x7#`g^)xġ:-5j<ϱFƢ 5oX)4HIdJ1(-˔nFSA@c(y3#nRGFcuKJd7A!,0p4$vP&lu6)K݌0'hj$_Kԁ*?c [Bo@ LЪ\s8!:yCzaǼ\8pM7#`)#ZmҷI{,S8 DLgP]q[}H9_#0o4^xH!SG4ϡ^)Q.^b;Lu-BG}.S:ʵ85F0F` 7<έ2Zu:C9pX2 Ik띧S9ܹ^ikp.eКN#`@8gQծsU_B5[<')F|IUGc48(t:n#0wj7 Sy\_21>x߽p@r"3sB ⹃g[s)#`NMθg0cw'Bu8Q &n-d2FSG`bTnf*cq^{fŻXǤh*E@DMq:^uy#`)"0HqS2Q'qA?hN8z@:c[ Ԗy#`"PK5Wy*&NUX@@QLM̕eՙ7F3 W=u2. /x0\8-M <#p&K]?\7` Z?5F3G`4O]BqiZ-؃[ˌ0sA`<r?xeO팀0]HBo {K#`拀q ]0F;PSf5IENDB`ic09ΉPNG  IHDRxsRGBDeXIfMM*i @IDATx #{ԒeܱcrIz}̗De*b0@ L@" wo oZ, < U7q*(v5]( e=Y{0|䣲@鬃' pdž{ң=u`wdzv3K/&Tknv zYJkz]uW@\^SSLY.,p%y ѻ8j,p/̾MJ7u%, 2 0([kw7(1H"!~۝ʗ-6myКdrf+>e}>- . y9& C0e31XfxE7XC䴩yC뒽>,_c `sL4ݲ-~ +c@Qt.5xK,Wrr9m^ѲXy̓w|ML@k? ?]!̾4<ؖ^[f>PE-8 ?e9 7\E&8qX{`@L> Nf9sm' qi-p;oy_mN@R{)II)*,@:`rt3; :qT,ayh I"eĞԟ #B9DU@9g0263|֓'Oϡ.d% E'enM扚OBY`, ~*ݕ]夡 QK!d db|Ҹ)|4>|?_|w;O>V:;;$P96o# 8We~_>}:=888g21;m>; @}@>o,^3Fy Ԉo%j&`o[aSN?;9M_ x.+Zx,}p̃Cyo/w܉fNvwwOL3}(לm (|%#^ȩ8oY`u,ܞdo 8={.{{{;Ϟ={˧jfS7, l;y4H:S.shY1Y-3ЛA8|ʙ8_l8Q?6Nv 4EQa,P̉kyhqL_[z׿~Z g=N7ptrxC3}}eVY Z f e;٨@NW_}N qR7oޜPٱx' X }3 sޠ?DqjV+ZZoY߼;zB@ZAkX0!F*\6 Ȫ?8`bJ<$ h C@0׍'^MBY1[ ?)r$'l x.zgmhoZ YO6@ff9pZZk72uAt3~ r3M- Z oA9 Gϴ&[˂M_kAGI)^@΀LC/wYѲY`M˔t) {dj.7S@Y:0~B4T=S=V囚Є3Ě9Gz}X(D:)熠>LpwisV󟺏f:'*[( \-N:)صzCTf-1x5A8-@;vMΝ@>\v[`li1 xJR-[O]gG | GO'=ЦAlkX6 3O@ΩuzeX?k㒞q(Ie0vo t2.~H1+- ݟK-|><` 'X-4g>B9C)]Y󟘴Nt %{n4U;eFNTΈG#^#=xJY H%?~C Pn=@;Rw?: Wr*o)rU;@97,MZQ%e< s|甃81^i6o5#FIP@h7:Ep>IrY*}([d Ȳ@7= ~"~iR˰ ]Q1۬cqCsT Bys@??~B~g.q5#0Cޓ6|Keɣljo+- ,uC;Dssݱ/kV_WU $_`?ȷ<`'Ӆ!'WjaUN,Pl3ϝNOQ3ffҲ@Y6-[" * k4BQ}U~jkKJ*_XoI;HN~Yg]6_cI [@"iBL.2wuP qF6@NK‡x&A-@;4Pkl,v 3n#5t~iP`s fP`-ZyȚ=Bh9o98 [wbr<w;w7VIY[{'p=2[ш5^L9O>(8YPklբ<3T+ ]MepO˴:C:hi-YxbG ݻw^ $ZZMPq@Jlrl ai{+,P@ CsDCη@ݑ2FC~`f@i8375PEV' [{>oA> Pv 0śhDY`c'j'HY,^0*eC9F3]}&0o}n @C3?)aJ. D/,orr|Cƪ+[Ϻϱ,Pc{]t_@#39:8*g6xE_GGG `̡C3 lrlP( ܅Xin)r׳^#{~c)3=TmoC}_'~g-ŏ~`ȩzvZ,`péP( N)N"Tee.#T'vj=so 8Ԛ ho {r:N#`ȫO2EZ&jZJ,Pa9S2HS6zXuڲ ?tOW4z'@Jz/?n@Q̞X-Pe, i)JWX  lxO>Y)=N 12( 䞉nk&! Oz=˿Oj& яyfUNVXT%X( ܕ E1B`Ə' Nx~u2 hQoهdf9E~ԧ Z^,Po }`/d2f77겎Gb^N7&oX@<{u w${od A$DF_N@N,P9*S(  {4H4?uD<u9J}\H~OX>#x(0XCtS>mk&mYz-goa1}}~ @s~[6o^Hv \m3c||Y ƚ&oh+@u q?5*LY)sT,PxLgˣܑrC}'rB/UWy$X-(dW >ӷq񚀶9O pr` PBY,`-f%<3iw)!q_<؁Q՚&@q# prpy~::r%<]_uen449mrulC>6O'kR`WT'h`M@Ru)A4m T<9rNTYUcv ޡ};?d:f'ojk5~0PT?h}= =kr[Y|9Fщj`bJl> 9o97lYϲ;9fX&Cϟ={ÿ/ x=kvkx@JFp<'@8j&`l˵-`mO}xYqX@6gr8o}M.:y,>ߪN']0>+}CN~9v] n9kq n >Rژ˜=`}}@~uS`T 9kXP&=ML`땪p KO9sP( ,fڍÙiG1ZV  ʤ}V@'5>퀷=z-`>4*0=$aP>/cq_YvB;e,渨fP}}u_G[*nj^ ˗l#g) t0Ku^9a)`=seYZ@\m2=@va,e;JbQ Țŧuk>*y@ ~]uY9v1;OYIyui)zh>QF[6}з#z4NZ];!+p`Tmƚ}{ >ݚZ-ZZZ^{)VY,pM ֜96o綯_>H_)wկ5ݛ7ok9/-P>ˇn٫|ۣL(OkTYqZ7;>zv2p#?Eir^k 6~~g, Ty ЦA&y- 6 KCNe)BVy^/`l9y!98 %f'/2`}P̼9̦~}bMOä鋈#(Ѷ+ka?~M𺺪^Y7@їU|33h\?6s;]:HĚ#`M.Ӛ6ds(('`lG[:u0e- Ϣdd2(:g)p:NKd;~GJOѠw @^Wk`ɫ˷Aٚɛ'̛r(C}ڲ!>M- khMNZH".'YAZ rY,07z2{tH/!30>~z<k#9|;klG%'iˠ\k& [h sw}rhY,p;h{w'u7HnGiCP18>>>Қ:>~5y B9eV,_nY,p= dО VUt#?+ ljaGx@oݷ.&@S' UGТ@8]3 rVdUWeX@y8ߠoξu&@"8 8Q{gM@'n[0(׍گ5a)`5S,PX{H:m3 @׼։| S<,#H0ǚ'@ⓐAryPkM@ x 'K۳wHnW3Ҭi0*>O-ǚI_/uh kbArGPR57Hy9 rVdUWe@]i;4`7m P``W4?#W^vb >zA;7OyW,a#`X~jK]Y,p><Ya#"j wc 8XyY-3UWv('y[8)C-4U*e{~\n' P_ni+0ė'@k%5OXp;r󜟵(2S:r@҉Ϟ-52jE]PݟnUϭȴf3t& P&g`o{'}D5 ZOΊXW. 2@la}NӾyWK}EWp՝J:[.3:v}݉/^ӷ hUSF2Pf!NR3;[}j,PXVȠjږ}PU-c@!𧎏4!x֢cͽ] 8њY y^Khg96ܧp۳ndյbe_?Eom6ts]Җ8mqϣC&X'#/$C.ǐ#LB>;Z 50kM@n> 6^};`c-^M׷ e6xL*ym򜦍 ^sao&য়~#U-JXJ.4зva?bM ώYЩ(ѷ>U?#2hg5}@Qhg pA\ m[ܒaKmY,p)0 Nzf3CG}΁t#Ț=q;U }K`ӧZx'v>X<0B]N@Xv~ֲ@YXнN~N3S):7N&A_6q`_v uM1c7ʴ j2W@9WҤuM/McTnY]"禕erku~ ՝ţɚ=LD)9ӁykfuǏL9w.\Mg/='W= Lӳ@(Ўiz~3#/\@p?|Wk>WXԴoyu pF&eմ@l0^d]rg?N.: ZoRmiQ` PS_鍝m }5}`{Bcg֡l;LpƮeճ`:^Jy8O]x ȗAM.(&kat'2E>Gz3j%nSmKj+n|E{-o[x錭+=&Be-#ĮYf3:~9W,P( < ^4M6o,J6 HwJJlϗ*̑uZO!J" 5Ϸ^t< m-ӻw>8arr.V9ܪyKyY,L YeC}0XZ @)'htlѠ.'4:rydesz,tKgeYfzî"|8M9HBN0qY9m4xijKQY,P rESZ"}`?;f<,u[=}ʲԱ\Muȷ՚>0@U\( :i9yµIle(D+3O>w|˚f>^~=O_hB~A} vjġr官.+@Y`5,A2ʄh Ԃ;i.m"|Nt[F/,dtsH#K 4ĶO ɳO@d'ҝ 5"х k/YO_$HP:*5Z&Ax5Z0Y(#Bca,WNrZUejYrp 9aḷn7Ӷ 6L6.8>yz)lS A )zVO ޠ_XgG~k!':CC- :3B93SEe@F@~ HNyiY˜^&EWycϲoj5`,r 6?<(k55-'XJ,PX= NL4cЇRy3ƯlnGt1 pmt= ~uzXT2lĚv EΔxxCo|T93p z8y=),n[ڦ3'Gw?32mzRzN_ՁFڡπ?"E8 &@i>.G&@)zm#vV#|9 uT2loLX~Yy@Y`- 9t gGsD>5Jp/=?/W^;o6fPx,̅ bL~ G6(1HeeeureOrћy9O/XB.wz,9gKOmv$lgD wSI>Z } QF""cZԯ0`r slnݎw_E,p~,Oۈg:v]'t(Ml<2H`S-+`]@/J$8A?SSQˡ9MCyV <δ/Ph~[}|?-˻Ǜ!n&LoT?>eɓ'z55xbr,F!s4)'CP@2F%eZ`\tr3h#- 5#kSdIϢQz.YܼLs}4^>!zmc 3HgO=<3%a'k,jfEvȨ?0G2|:x/-P3 p,\~lhF5>1Ho%,`={uY`i7Li,ǝzc \%6HA P39OP-7T+7oEW<^.'=я=)7& D7B ϙ: }gysEcJ Yv\ i. ,=4I;ov @h7wb.ọvO9uP8ZYܼ!Λb;>`wsE2;1 U۷>_"qĈD6/Z{'])e['(Iǯ6]pd=Y2dqhǁ 8E) !|(oEP\Ӯ7Ke΀qx+_*OfNC.8x}, @ɏ=1m<ڇrOZ,0dߨ畇M_|2ON"05{.qP0&"u;o- %Oہ4ڼuej̻N9?Dﲜ6/Ӝne)[rP-ax`(+˚OJ&?[l*! )ǘ)6܆K&(`bJXP& OGNJP5:i;G~sooW/ٳhG?w~=_$3??М6/ r[z-1|Mi ./< >:_(~+ٳg6]&{ O/@0MCۡ~e,`@FdCУGGލNetD\_|U;[ϟvo~toF{r.GgP~!)ks̳L]>ˇ+˲ҋ[Gn)6 爕O>}t(?E^ yf7蛺 Z@9u) Y` :Suoތ~it;:߃)ף'f xWc`K3H:G`r>% ͇i;O }e}^ӷY-eNƼˇr$\ԙX2zv r> Į|EDF~o2v ɠ2<|#C֯Q,PX3ЍQ` @]}'5# \o3'n8Y{I<@&O#h^K}ܙO/dY|_Y<H-weY&7mwezxE=f -rx{L\ v i m). Z3?7[P}m%|ǍXpt`Is^ DH!pzZjy-7C2mLљ#0K6iDS R?].x7߼8x8S cUt eu~>왁`md _##Ywg;`_ 5;ͅxW`FZ'O͈_^hѮF}z+M7c{,m9YmMЖyx6jηm9L]wrS^ɸym8- x* +G;(tMuቱus,h5 ЄFr.#VAw@IDATM75rЎK̝{*H? l<A-o$Ե}oj~itؠYOS]tV2׿*=\ͷr˙ ]/>sGop]hp9N~I.G@#0C=0hA13Mψ~5, [ln,#wjK?K8 `Mt@Pޥr 2оw|Yus?Z}Y,[D:u^M"'ˆ\Z yt,:(Yen?2: -m yDܑ([ K'm rmeaSm..jo|l}myo+oͷzsI+-*Dؿ·}KHNZ;pYr|>%5f\F&[ڡ @X__ n]:G?܁uk?s?g$uH6ie~߱ -:U̪̬7)k@CjKvK|47Z|%mw&u^ܷ\/ \-9)w;1mĦR:21 G|_ b7)GWNrtܧxɼP?Ŀj~܎tb?ӀhU}ݵ|_@g]̷\, \}7s@qF-|[-t:p[@S Li?in,K;):gQN[߼6畣30 )s\߉ g@P/%E.%7YW@{ʛ O#EBԓ`iħQ1@")/?7Ms_4+˼mW>[8njE6{K9$/3~G]fW!gy3uڦ5:ӢS}Fd8yjb OcZtӆdhbϴy9MyydrhsY-\T: Ab~2;m:J.`vkYܰD%` v;ҧ}ٰ]5bJzz8v5>Q:q&Υo 6sC/4KEd@ϲ%v 0/S@/rISh9(`j1Y?M]_՝g?#RYgʟ GT ((v5@+|3jNM{;HE~3`CS;G@-9;G |E߃ye4'OPϚs&EqHgp^k~8 AMcDq ljK-lF K9 myUv㤚Jg_t9k}W{Cy1"x3"g;@]GYCqOҵ8lKmc@cft$j f4x `[pM#o[:,UaY 9t,;9=r˔eUػ.=X}{=kEU~:'r>#]5UY0/b[wcVN5?GzǛzdۊ[ ,𷜏g>i+<| Dۥ]:Ĝ~zX:+}Z5U,\4`ψ>Sݳ~FЉ >#X/=PeyX#v^*nɁWOkHF 8eBTg2M>Acmڛ\_`Kz9=DJEn.˔4#p,e}I3TyG8 ~{1gO8 k~^̍OΑhX8RC'[K[ʯtmsx(`0. < 2S/#ψ@3idJ^e{AT?1haOT7@=@vvU-=v#{)~= e N xs@Z£@97<ЀT(rMӫ@yme<:4in{oojӞx߁?G9O-бvIX^`BA-:#`w?#9lĆ@2cr?p.6D]o=e|ۿkmT(MnsNXq)xho|94Ѻ~L3gJ[Eځ>͎zF3? Xُpn=RSd6 Ӂ_/ai^M* @9K╧NgݐlGΠwh.hwgЇcx/):x'o9O+-ا!ʬNҼJ 01ruCZ=6{߱,S'Y)}Q?hOy:zMy' X) F8,:l``2%- e-Pmګ^<zmy~o xf>?{.?X(Џ(yZyc +`] 8?i9@>; xMo q]Y,PXXIKaY`-#i4N?ȝ' C=.?~dUӛ_ 5Gn<Pxdx Vvy+bm~E4/Sa9`1]r(-\gܐ&;  3~C rl}ūZZ2p,r@-̫ߖy{?9QG}D_i8md?2^zP>'`Ҧ@>F3uHks :`cU޶eϢiweU@9|ײ@{󿖒Zm7m{|^g01Ш곋٧F.Ly?QBʄ>y>?YѾF,|rQ8y!~__WX .g3,6Lj~Ϣ7F?w"O?#v?Sj+; u'#y _F4pQP=Qܶt;9=N˙mYy;yyOF1k9~W:$ѣ<36;w8CGMf t}͘> xNJ=szM㲜vyѲZ= uM]ikx[]~P0;P>(A{G#WbaBY(wǭA!03G>8e G8J6EON;y~1tNsY62*V}k-?_\nUk,M%J bࡓ5癿@>^}/Ei6Թr79:TK%c,K]ap89#^NPf"lk#CӹI,S^?k}@m>]5m]wl~c~@_S8O#j//~xvc O6IYt)p1g$jyici5YYuQuGu:` yCNCc?y:Z"g;^7JISޮ~/3iRݎqz4^6Q[8:7pdj[:[zo(eg7#O4(>4s~V4?N@|G2oYwN3wzNyhaF蜭c k[$>m(m؛>'ҙ'u3BCʲoU} p6nC7iwY[S>#}ث0W t1yiܓ vErܚmxC[ gaK|8<]  Hmy& DPi/ڥ&.]*@9>Fì|[z5g|?̧>C=DTg^yf_?;r.=Sޤ/70 (SeB.VLM3BU(BN?y}(I"C8ŖUFH6y\[8@<Q>CsI!`XE+E޶ʯl9} MJߨx#U`!0u 鶉Ayu+Od {F~ix_}wW$I:tX @@4pt\< `v46g灟p^@)!oUeGernttMjȡ1/=i}xㅀzcS`OPydi8pŘyyW(#3~ ]=@vgB#zʱ<%C *-MB8]j@m|`Dv}_@w_/>_meu@9K<܌|q,)3=R}|_}eU@9wt|ùVߤ:N97y@z,>znt@|vt'@q@lv m9w8Ј;r b+ d>wC_+CN?YJkמ`t3jAhԓmX38 ұ_r7qK]Ŭ b%mpZr_|yE`r,1ryWlgh--mrn¥F͛QׯG?0:wt?3:,PMK73ͫmg_}5:lo|u8rF{{}go&'G}Dod1b cVEǍ}]FE'vjlA>N'ڌYm["`@W( Xb7gFrpGG\yv߮(;@c3~  \Qx? C0-M?i<] 0}+ma1 %,UOV@}8My Z*_ Q1db= @NDucM\@}_?KL?1:3RP"yMmNщO43p&'L#}( Km\0oZ('i )L_l@y@`>auMXȶ˱3ڋ8޾A;"w`/İMܡ|I,Lᱨс6:GJVNG(3 r*cyH Q´? rڼJo?uRb/{p㈅ۛ~jZI3-vx[ |mˡ<3g'Q S⹿7oF8|a<& ñ`QE|֌G.8*?s j.7C'H_ež~vN@3N %Q ~!V( }rZ i2s94rpϑ[,( |P|/g-3 pPÊ9}o' cc$d un!D_Yy+`0c4<«PX' gM&/ҷ| -Fxן~1l@R.hGN@L%d[ߑf*[ Pa gH7IGvqL~'guT2$;yғv:IwY~W;r{1 +^nNBo*e]fvrz&?v[/_Cufo[_{U>޶_\nU,0x Ǝ~l>0* "&|@6 "J =ž(BeФ@eP,tZ來=8vvͧ^|Q<'`([ ey#4 c67xq;ۂS.X~Z_VXsG !{8;tt c Xۀ!PL"[ad eo{3c%`J^!DǛT^(S9K|ю?+w79:ѯ$G+bDtހpY :?tX(u3:('U9oja pP%?M  jﲘ=N`6p3;W ߶oksE@|C#J hȭQ1_:~=^cC6 xg." \ih/:imw!>i9(N@_U@} g#D n(Km*@Fyx`r "}@Ӫ7h?#{cNSi揹~,d=cY ɚm(yՇw`±ڮć'8ƾ]x @A5d'`%,pԃ;{P9`jraZ2np!ԴV 0R8 zpxit"wrޫC9Rx0k39@1Fg|@< FNk'teN;djJț:M^m;G@v pr/+pP@mbk'yu0_- ˵@9˵gi[ .~Evd~@"8T3ﺸ/fѦC{ r.DLG-*\}uLNÏHV:qJ8hpm PǜOF`3ރ?U8w-Gm.s-;߄0gڂ{}8s{۳DsǛTXBb&`TFOfO3>|0=;wTxLHHSJ;~*(p& IO:y@)M_b^ F?i %@u;ULF3oN|O6wsC1!q=ڞx6X#!6b?_qZܶʯXyjhm~ͭ:Fw'rfHc L~)Ѡpݟ~Ȕ'H}*&6v, nyTs@^@*}KS6)GC6hG<Gq[P1K6+$3arFȂ@cg@7p xa"LFLyej7&J%vdT#xg$'}Ok4/+2 o_28Fo~;2?D%O0Ԟ3JeJG8ştF@w P3(]׋cΉvBinF̧<Q >͉ EP?eGbrɉ\7dK&LuokԾǔFw;/ 4 7x/@H#(1 'x*O5g P;HȻ)F1#td%?+d,Ky3Eg.y/G=rxPb^ϲz/}с(_!{ >'IJ7!>5dٞjU:rVl=&2t@fvp4QT9g@@\@du ]Y:+UnOOx2KW:<%AH @Qـ@dτ@@ ᄐIbqL2C7e~5awan;^Sm[!<J],͜cE`6 ηk7R 3s}M>c+౜;1\; #{n"h裴K!g= #I1}िbDA1ʥ}gF@pt NjBu9u]}r}yH;wN%\5p':!>,D~"G}rV=o۴Gy -<|v)9w$ʱUN$@&9xq;OGsubrLqrny9r'5QO>+xOx4L볝@=xAΑD~)'wזۜP uNIMP_۱50Ч\^T7qċt۠kQ'iuPx98FRw]Ii}rق;S"@m(Z,YӿEdBYx'h{a sIkC5p vxybv,g';I%e./zKKsB@tVo?vж:`>6Zq3/Qlgo(S :4y&[nl7c<ek`x;Az0-yP8oe룭ܐ}V_+sݴ?Uz(zvZlnI8D.PN;sNaڧzM0SGP@'0vC&~L7w0c!H&TBi@L/!B B c:{z?60]V ?ON p0LIgHvAjPPPP< {P5i?#.e%q!r28̓,\y|PaC@òJ`rji–hg/R~*N R ! LN ~9!`!8{΅s%7(0`Jǎ K7SrtZzFA>-3){Ǭ{gYr" w X+{F<$Awƞ{Gw{K(w;=BV@3x3dۄ&c-mCu;B>+B@Ƥ'N MAnh@7t M L͒f m3+tEkP1hM 3+d48yDU8!d.bjxq{$}vBٻD:ΥJGa)F ,4Dr/cq 癿MvSd0M@PQ +-?ls!s403=[aZ>z0oBXB=o))3npWz}a&[軇PV2g ʳm趂8 \Ҏ5{j@wC ~a}Jy4 x fA_޵BX/u(A2zIB+K9K˅c0 ɇy`&`oI5{΄jvjDm#H| kVY< q3^< =xM4¾&Ccw Gn5gbgh€ige@[2 z")_\%Wɶ)|#[l;.neʻM}6]oǀ1y 0ǟ="Ct2[K4.L`E'&xtx ˰f?WB<+N2^iLœ0@>eڡC,8 МWR :`zMZ8%8)@3@Xzl \y>QC> Cn\{j|QrkD(@3_DB L!t<0N/I^ O>^GGy<{z@ %qaHzMXu^ y|nX1;}40M`/x{&+GJa|x 8*yv2IS@BXk{GYs@>$Ըkf߼ٶY-* wKC kjy*u"?m^𮤂?>e!,գ(`q~"q|yq6A ,?`hūE0 L Lک  \W$:OseM @X }T/Lb@a*X[t,BcP!@__I28swR'LSk/u_!SD WoQld;Ə&ȶhAq}#-\P`Z(F!Hj,n) 07nTQ)P"<#(w1vK ZaA x 6v\{ã /m#.^7 <;zzȠ+s azu`F`&=O>L^&B4 &A;ʀ%DWKH{o] 﫤Ϯ~?5p}"EҿSw:K9RrC-젉YMDi}<-oV+.Lu0V ̭/xg?}fccSf/iD,m el ukA@X80|5P@!NUWo&^iGi+[}1$d[f%[oƿEfQ/ɏqbTа'l0ܹukZBsCK|{,$ǭlAŤ@-S-p ('`_&`BU0{ Ã!slMT2d: ax2^0a)ϩ?^!K]Kmy)#ZW6T L_l0 KyS a8g[HZ0g_˛acA=r;DC'1!d|Z& wrUf>y; :2Ec޾o~2dyV{xGga6{v7qMXDZt96Sg i[VmW+qǞ:~Vwߨ5ro4f-L^ޗPWKB)/Õ^MRG$iQ@^f/e|T/e z%-D%?dlwʑ@ w12}_ p= } F'{p:(!\P`IPI'hl"< p]<%eG a|03Y]ʫ[Ҕ٥;x6FOY8׌Kk}Jfr@~l loL>`-+ Fh XIs0Xa^IS"@ǹ' ,<>R'!ЧJ8X%Jh$@%N pC5NZ l8́_{hP`(H3t)'R}&yX`0` e}N0*޷+@IDAT(C邓22ڑgIɖ:hL*a*9MfAჿx*?6\P`( I [hسML2 a^0 `"03eŸQ.1Fe.0 >+i|Ykŀ2~YCiG״sn)B^}cB9gi sUA@B:ۊ)8~k g+% "H Rޘ?`2}@7 [0} v̑-= 4P ip4:\2iƗ6SmwTL K/$r +ZVf!oH#5 ފ1Y`PO}q)-g-~Ӟj #ZE2e"!04F@,vX(96{G3ư|9Զw Tƅ1UBpĈl",(c!` OyNlƿ|\f0/`+#AmթUb؇+2i?1B+|[R > ]a0{~ H\l+/1cП1# ! M3hL$78Ne8w4NZ !zm\k Nƕgu5 LjߋPR.CR'k"(" X؅s<@W= l0|e2hc#Tolq^YBi6\P`*(T C 1I 0۵ <+CZVjs<u r+>{Ǔ j'h 5$Ҿ j0H?g/j8aB#PF'Nh2^)-\i)Vt DFP`("I]Om|sl2'x2nL0 du s)a\6`{/tRa.`_ ~eu|?s |U^:6C ω5J(L@c)<pLY ݌h+N3hgޓ4.Ѯ-iEBhi)'0yx`6oQ?'Y\ @#@g2xGYo<]Jz]ptSK, *avy٫|pΘ?a*V L_?_) ' grZ\>-0%cK6LmoްнK?u`H]Tћ)m?*xij pVO-+rSn |W.8U?̒}l,$$ "gz]7}~G."[V땁 ލ _. ,OЧ׌/H|Bv{8 F.Kқ)~S.``ԅ~W/ la(@ʢWPXz.JYOCBȶ O&濡Ih yVBG}Džv 0~ĺa@hDsJWcA'\(Mk>a,Q YuQ(`L߇9D4`-{6V`|9=ㅹn{ >>|0zmoU?@R g>9siaP`'?z_BҔ>lFH߄Ќ4Aza{!8kBMXc^<}='A`^=g{E5&mc4XT(0:X{ZG`=XzDKHkBmzVq\}%%ҹ&4i"I'ڌMn֨=[Hz:<4pж 3GlZ@kɟx/ ywۈKGկ*N'(=![7uVχIC_i;Vnܬ,iT,\CX&Lj~"glc-Y:!Lar0`>l \R 8;WBN " .pp+= cZLB |s/ь fԨR{& ]Yi,ϖ&y|KC$͇?A)@S4S&u05 Uɳ4,!01s&l| epbf9n53acL_!xxOY ٧iykK9 bS hf)$Ž@@`}cRY  {`cIHQܤMh ^mzw*G=g7KDX'BPh9Si B}.m[Z(!tE Mj ᷅ߴ0G_ꐞK 0GNl@50oQDWCH3KǗx% ˏM=6 ~9mB=cE@=Z[Yl^Q\Ҭo+k!lm ?lqp)@sZEɠ@LhKaD`\PC=hphT m%!g8K#ccV]pGHMeGn4?B'|_y@hyq N]Hii>?gi!,%G&T$FVh`ch8·lKdR)o@y~B L(}@zIi~oτ9?L7ot}Hܜci!Lh.3E&xA>M3&@149{ⷋm~`s g ,t}F7/a : }aa:_Ve?% : 7 +sIP?[܇sO LB)DaJøi|pqWͲGCV;xE]KKps ?>Ő1 l`osO-%W/mrFo~2T(оH;^7K'>Qֻҳ{ؖF}=H77Xm)kHJ (DBP`4 0i̞s)iabh6E4$"A|a  x _BcGk 2|YJP$vho*},p >mⴝ%nZhqFOkO\;V&e @G_*q(8ԋ˞DXo#{!>!`, .̒ˁ85SSF  8]v89w7IET2}yG҈ʿi Cټ==a gP~Z>)=CѸ!K)P,CJ(09$VX?_92yFX-yxl2Tv$oM@Q5R-gUK4jF}7ZtFܞ-iJ}|SM [h!Lt=i7/rI Cs8&n6Ds@ 擶:RuzI ~ $$M{0w |w<X*rRpB!(0Lp6dC,~$q[47lwFv Wuo,6K;E0w z&@i0qXܗ UQ"uơp] I3/h,̸.#fYDi4%G1~:矍aazs}3_6wJ_%Ljl=+^Ҧ  AtCejF΍5t&YT G?&3av`g (q* YݯBUcQU4_!ya]?=j`†<.pY|_ `egO_L0foL>}{fd-8r` o lrGMjy:~k@Ҵa}'TOH1*i+yȶϯ6Ky BzwW? Vg*Za%8 ܞgŸ~c`Gc>MN|L:kޏqM5)Sø`5AGtR  K&@)lq7!>LQy*L۷J~RRϗU&a=tպ .֊ZWौwK. wrP`t s^f`o*~=/e=uQp޹~yN;MUyAoqM66q XAq)P?&ZٌI81T.m(=`DX{Ϋv*+ROn `lvK:ho1#nmV`iL0MtRRΜ[Z)l F)}}/i@2ǒ-n2MA?>Ƈ!; ΞR"`Xs+}ݒF  9ӏa*4fDWfL?`!x4a[.B ~ ^Qd @ 0!b3!B/R3-nuL0aFF7~sΩVs2dӹBh=X~R|q D]`h .]#h$" ]ŋ'a )G A6 1z a>n0nB\jbce|y_[:iS ٧tk{~ۄ_l|m%;i&{:kG~>4%2ȷȾzF EP i '4oB}4xK} :`x><F\u [m!GˀhL&H *Q_$ #>1Яa &pacK`W6 K9a[]4ni>T!:uu#/(O#BV0⫞_,[+xI׋~z! D lVW!@=E*;[{oL? So >[_pVf~S]^|)|zSP`bZ5nL0F`ki= @?ƅ;Ů`0NG "LV4⩷zr%7j^ ^)|zSF'& =i7ůIUYjF50q*#sc`\^\b(s_Rn϶4x-nYGAnP4 }LՕ%/?k紿iq‹f0 aQ*(X aOVwQL14͞~[!4 w$BmrP`$ ̛`=@t=3uBۄ7 ,; ~fa[P7x/B/pW1&ޘzsy}ʆ !,.9kg +#f}|Wχ|?5:<{{ j1ïf!yu._ruym)"}ymo^?O)s5M|0m\mgj\ڳ쳫´wq\O7 '? w w 'ܳukO 57V뤭5{uOc>N^/MlDa(@{ HA)[hg0d_!.i0seAna[V=*%N<*7&o!BcT>K|H{A%GܐFfPeՎUˆU8j0J~|p7  Gn J==0~jVxE1yBK5e-o  Z[އփ(`(!?G yqFS<[{X-=R}%F/j^:?MД[-o 0@4N1Q.᧤$ӈ+'9 3zs+yWf/*GZX/aPÿ |K].--A@[*&@lVJigC/[+:I[/V;`] $}'\- #b0? ЄO=KiG\Oۥ:˘;&O'NlqBak\7Gwc!wƒW" J\,d[1 i%4,,KҡcBlg5^M>{V0m4%+{0bu, azz/g`zK9A@'D)m&&+%f-}3&.V= /^܄`Pg,c'|)T+NqP~N.nnogfweBL}g{9&(7x.=kĽr` =LS'\P (01C.Qм3zOh̚~sz=ȹ '0xp&Iòv Bhb"숰,g.Y `Ըt )N姡^ ~JZ9?2YNڥmI \ƴ ~~gb}r<[9=y=O]aO=[LS8.ˤG_nZÖZ[zAR Z J&|`ٳ!4k`x au,msm+Lq0: ?7*R[Wߴ(7!̧G<L1سSd-t g4su,ʕ-= 0ིvzQv8 0tP` #f[<Z|K|R)\-j&Nc `؄ qKO/G^@P`(I'Y?+&:5!B^OK۱2V\~.ʷ mxiۆ6Mi]Os]z@g`ҨD0e:uyu|^ăA@=>]P``9!*1vVlm`y<"}jv)@ hA)'E=Og-Lgʑ´\]좭3)_YMW޼[ZZ^.zcG ۆ6_mo^y:):*(0B.?F<(m `/_Hi,iaGZPw(}*KLfA)0*F%OxfgC0%cmx)چ6iw*W]ʦ=#v{mKn~7ϳIA@P`j(е35]b` htgyR4{LzRmRnCǀJ D6 &JL7ŴXw[H߹ ,4`&d4 AZ PK3OÀ S iA@P (0 Qך~{n]o{f q?k |]wXÖ]EEɀ A@V|C@P (!ErTU.9A@P (<`4oŮIfa%G<Ǭ{3SBAP ( LRa[BȄ3  B~$CBP ( a0uCGkix_j=/OLI}\}A )a|fFNn~c'pB8/|s[=+| k֎i{? NQ g;wgU?~y{V6l()e^eWey8>0^xHcZA%L.׮moew]uy,T~wCPV7֮][] Wi<#q*(f  EtGۀ`uWb`˔ 7K.˫P͌ı)_:묳p:D6/glf tG_YEչۧc)rgVsN?)|*WOa[߁Fۆ6i/^JWgZy!cU?UZR 5Bqo~Fe}! ~~`&ԯF( ^To#8Q((@hMXصkWg?{_C[V:V'0;͊(p[RiXjWZ^{[A1 Aiv=colXݲpk]b%|\g$,4)~ׯ`8}ӟ :mܸ.W&7|;W7oN7OSO~R i&=!.ax|WpO8p91 tя~Ta\=}7qC(;s_3s `xuQէ>`'MozӁ0{igTyc o}kw/:'< ^* ~]OԼWU?A2<=祈;|fu^h|zӛT};)<:cc9f×QAm߿Tu^x`7]q}[mٲeP p+M)CɹFRY c1Ӟ4{uC< [3|+v cΕQ{'> ^f͚㗋[aOk TKFMON!tK߀X={o;'$7(`PwW2x</}KW0:DfJmzcN։-ݽēdՌXRm"@:g=Օ[y0pG1 cYE+k g.ˀ`"ƨ8PVGo~gm۶U_җܞ? =jT9ӟt͇2:ٺuy'?Q5-nW#9և>jǎ @gN6\Is?t k^SNI◺ԥ7'00h?Yqw|k)9 @AA@5M Z|ߞ-yk^qFcb98ϙr+ҰH>Ӹ= 3Kw(+P9`XOyS-mBQnZC>`F0p jfh`0+ɇ*ok;{9V0 r0>U?яnxܑ3)ڍ}c}wrҡvo+FW<[!`PY\u{U+V_S$J BRyCa( h綆xBs l-@jt|CSЌn] k @K|Evʈ1; P NJ z>>r^xp(ql1'(QJj= TzhrPf'a  rf~׻U+ϥM\4h!p R G4v!9NJɝ]ka07uSd/Vi<9餓rYis :m+Ա]u 6Ђ=6Υ{Vʭ/YC)M9!8!d5aT}وf!h-s\magV%Fs0L` ի1]Ρ{f+gilW 9uODQ:@S.xWקYMxEmaA'eB88Yxv6]ZrƏ5ߒc/ Viʞ9+לZu9y[hn %ۈ&w,z~*:ᧄ;!9`OTO™T'EǥNh/qelΊ֒ߠJЦp>9]0aK=>̘YV)D ~>vt"*|sQH , Lz/~.`>지=: A5b(~QK 2ttÃJ6Mi'hmн 9rFǺ (.()[qg0?b/ jht[RdQ:DʴsIJ_7L5_(Z\K0X$6rEN FJ#=(\(iԼ]I*k/nt+>}qv0]b\zᔳ̷< 50+i$zի.PǗ!"|`Ms~K0`EZ s.m]u4c)޾i^)ߴ^zMu )Q] ]z*42_zyJuuLĸRSB Þ9_Xѧڄ1Qk# ǥ̭F3mlhF!sQT.\3cOj1"c[P7]Y `Х A7 8/(!Bgvu6`m/~kC]ض jJeBhL^IC^r@32] ;;`,}o 㱜@>F h=| 3z~O)< >qRi> /mkK´|+?_=A*eO>~a\rCx)_0=aؗ-Kx a.z'.azӞV4xL'( +Ai@L,C`{=gOrKS YTͷJϕ?̩!7]α2'Ujy1^%æ0<̪tD$  po\1H%/]< O68ލp(0rNו)4R>9;3Efwle`:= E9O<ꨣR/}iGJj~xCR﮼#G}nl?pZ]~EiJC>= 9+:F@|c9F/2:CSEp!Tr9Ї>T?$;WE&dUUbĨ: B]\_׼5#<k&MXXd!L,7uza_]-sä  am[?x=7,mnsQz/wMB]+%!1`!׏=@Mm",^ L!L }_ T==.VI,YN`0gd9ޖ[J~{ޣYDGV|彇'ԏ7"fAɞtj&\GL"xGd|Rm"})P lt^uL|>sfGnwb^$(])]`0jWgϾ2lRXJu 'TЇYngՏ15P73WRó#N?W `:gCPj;ޠ &L~yЍ { /8"̍rim)A[ZG@wk_ZέHnV&[b~8 IDAT _05VǨ"Gݏ8\x0tJW*o;7B0YyO'W`zǖ>ꗿO8I&ʉ n\=11w pɆO|sVͅur"l?ׁq 1 aqlj'aEE XnL=B D8~<΅דv衇^w52I_C&De xc7dp4x6q1%!CR1 Xꥡ. bg?7]qgim[>'B)S>xi9{npjPʫg9Ա{NkOS?*'؟&] {eBlzz;d9}j6b[{_s}Mƨ0Iܻ0.=`xJ^ӾD4S yt kct=[uvbYo;Pt;B`J]oγx}.%^E8`@ݮ]oijx}.%^E`TP]oԳx}Yo}o"w 8kni5~PbO39D}VJQJm7S 4ܠ@P ( ,I $5: Az PO A@,aNA@L؄`:! AD)DA@P`:(tC` AR l&JK.-kmGu֬[IYol\G-5}?jp pA@P (1R-GǃAR &i-A@P`(6S7$PP (X^HWm0-/j6mhj=2 A(Y̿DH$~ӟVm޼:Cx DXDE}z=s_ .mVmذk|Ֆ-[Y| 97auy!Bũ޶&-x۷o>OUg/}Ko~Zx׿~u׻޵nW[N.3UC /8i)q =[d:g]]ή|+WWJRz I5=?k7]`cb؜~??38qLThrJ G=/N~U ^JWwy7̟'կ~Sk_ڂ._*WG.H)reNrʴY9]tQWzӛT]xcΫwW}{:zP]rnh7V^]]jWS!.-PPr{>餓}{ }ܧ:3}gA^$ G)DB(Qf {k׮=yO?Um.@_ W.qK\\Ju(@Nk/_?޽;S 4kZ#*M)5`άLPwUwF%f?JݱcG|'[>[vm6$~[ߪzSUZiV<!iN8zы^40;VYŠ"gWU~r ,(47M@S(1LVN}Š;e{|~Vzaj~.gbLQs~2*~ ›_*8Q-8g_ⴇWU@+z1~7Mf11XBmZVw׼fcۏ%'Kd^/btN~'Unzӛ?WnPLO2w:399>jԉ#:H΃~pJp8wT\:)]\cZcO}N/^WRdeRbc=v׾ v!I=JEsi-T"H6uЈo}j89Q{e E:s???(G?Ql !m/Kg=G>fu^WC™ VL/| w]+O|J}3}ˀ^T:kϊ u{T\/s(kg(N4eiZI` s̟Jd5yb _4Rn6#Ta 9!h3do{۪*`Tui/(h_zc9XU# rhXCKyG/y 4R 3|oF^UiVw׽uu?.7’X=A b5-lL8ZRm{nեܩ@ߙr6V~ 8 nN=G| ?C{)48A6[׽t5b2ll=w( #d}﫚=yŭA_._mo{y[Euu"o(Lߘ"L#Pwֽ{Tēp|~J希|Tar}DǗAӀZ7)>LVn̟6`%&Q.`[C[: wm 4=Mw6/Bnwa`yskJp,[azNBh%TRӗꍚW3  8~k'0Vs$,LI,Ԭ.q4|Jw.A@CpƇ kVRޛV ;:D>M^ aޱ2Z7lڛþWG[a y[Jr3Lv v0#[hG~G-0Fca9 $ /~=4_dK 7wKw &y,i($Q\[ !q$87 S 1C?XKBKsORgX8bt=Ƃe΁-bOPuk? ʌհl0fп_ܓU>ѧigh$d?p:*&%2 |qB O}jQHO-'G]Bㄅ9fp'<,/١@3V1erH+簪fI reHÀ.]I\W/pcbLVvX=hjOC8/ v|=XV8  ;QsG|2?Nh# +9I8>7sLH~U sL\4 äaJ8bc0`ӉPQLg<>H % Usα vrM'(1ffȵ1JGΩ/1V.*r0-Iʷ[pN4$iYQ[>̟-Ys*^DSs ^A7`ǯ= CD[ʏga@›8GN@m7tPzcqSWb۲Zdu>qz~6 t*Ujn/TRofIh!˜ƅ: hu:q4x//\b"0x[0w4&c`܄Ӵg>q=+#ka/{2Hu>B1p ΡMq(Xq kF 0W%.&&Ԧ$Po.`Ј&}_ӆc0\S:nЖ{0 Csu|I{[bNܾ/_g{u( w5דN:)}ʕ' %bt("!Ȅ[>`JǺ)4댥M'a[;u!J&Lcί}3 4 r)*NKs*W_Q r`f1>=Z +&Ĩ0x8x&5n?u'M:|ES sno4ֹ:9|@`^R?eyxK \84 h\9YS+Q <%5*a9敇, .e\e[bî.JZ4XmbI᛫Sj(?IUC|Z]!&'?LSWbu8"."*qD^u!nj[V@IHlJ\FXcp@NC 4Uiqx_=?x=`i m >!j*Chqz95Zc9#`E89ggɣ$ɜ\d۴%Ȋ=R[Z Zҩ:FUaI(աR5~ ,i3W@\N!|wCFM?0@4Սpq(š{z8yuViQsMba =jupKmf:li) a[:֤8b!NX>TS'hV++deS![,n(@7t8Ժ B.wLxs.bE36Tj&R9- JڬyȹaV.kɶĨp*A6:KHhNt0eh^hGٸD."DpD`o~[!% k9en/808-/0xFC0a#0f!jJR?k3.8i8g] X%mB, öI[%2L0KWO+]L[u3éGJL43̧dtzĄYr4Bw>O_syh;`RW)>twNce{(,x>͑IC'v/ 0Ƅh#Q:@u-/Ο:ϊڏ?|aX4|*gq%&uLW2ƻn7oO6Q h ڻdu /-f[^BJd߶А[bho`~Η%suQچ\il-J{hrZ% Р; !_,xWa"q)}A?p>)h8 _pcŀa  Cil'<^2K2˄e4 VMk}qg L|x堄Ir=Xۄ%-K--+Uk*YSgLs$hʖE–otT{gu}qn̹:adhc0K_* nY程acz*c #L'l\5^}#>`zfhJMG=QOj 7灹WԶ g`9( &lr,Xt;*`,r}`8^(1lя~S_0iO޵)kԅ+ 1ݠK ̞SeHᔘ0̊U1co +w N7:چ0"+GlQb8m;{qGH48% /TQg$Xק9W44{,Q6g8w؇mޥϖGK'Q "|U aV%*oVSԳI${쯢OUę4לCҗvՀd:\Bcփ/-řx` ڑoLܞQZ2cmBa_ x}N.)gǘ"'hCTR×"0Ju Nˑ]|}Ҋra۫^*$?/Òq}ї%^r||[ŸO34Wnz衺gȘ6:;jjp|[/>>G:WTR lrXFCI>E0&"Yu&>&2Yid%%>`·Ig*07YȎ8__\qܦǞ?s=Xms1qtRT6 08(!+,>#gGsG>Rq9@J lBDŽ]d%u=(G.Ӎ1HUd/$>OVG&yWnܾ;u͡AQS&^V#7M^C_CIڨfv8s>z/[^Ѓ c>ϪP€VWm$7| sD;LBO+H`BJ+?fħ!Lny{]ct1iX&)VLԶB/D%&_3z!׼5Y/t£= #',Qr\ lmY2CfIagj^x}&{^ ZK?lq(SAb2KwC}ܩI,)l'=IzS8rm&,,@-o X#+qVXS{αe= ϕͥz~s]ΒcΧaQ☬vrk<餓F%=GЏr] @̙U+/z}p:L;ԅ)sd"<WVԅ3,18/!`8h8 ,|i 0/uYqx≪Mz@'0KZb*PQ INhi m+ѐ6JLГO>YZ c'Tl&7Qka {^^ @6AsO|)Ƕ _ {7/60_g7xߡ;'|0DpA`BӥKSa9^-/ڊ@z6"yF׊_BI}K2),kȟ6q/zG{OWc4*Y&]&&Y?&h`LîXgd?#{'12بxi}ToFu;Hm1MVK`}Pڥea+aMœPcd F=cܦ 9zL?+]V>` C9 ON鄉/㼳 @Kc˻e6. =<4[uIHxc! 68%#*m&x`4$wsi[2NGЈ!}@Р@* xDڽGKN*FƧi2sWOG=t̫Rt!\,,iƙd 8;yXM0`&L3&Y[0bV&njǪ&pM&9&ЦLڳl!4 BƆ xf|4pgu[O9>uF4g( \4-ͻia;<+B{ڦkҦguhϸ@)#Ed. Llϸ/|~ ؆7`lÌ%ox4 9A;&4LlBa[gN0vVH>+V1ԍӿa'ǴLʬ_=k  ?YàeaTKkVvSi9߅cs[B9zuC. 0]d"m?i?no:ۦw][@{ HA@P ( 03CA@P= -RP ( fa03CUhW_zM iko=a;n{)ƅ7A E$(IP9 A) L#(>Ȩڣ@ī0Xi {:bw :@P ( B dA@P (Bh%( 3Etfrg=i7.}߸[g\zLkL^A@P (!tH Ai@:2WP ( :@tHxH |ӎ_SNM=vgK?c RWP ( j(@ q"+( K!,Ց~A@PaPC EtO-k iN>M.[j)3ǣ@hƣaP ( tBo$kcW}O0vPAwmHn-]IHmқdwI#C!u4n:@k@p@y0F/ @OT3=G1 _k/w쳳|S]`\c40#j: KR#`6TbmL.~ u$WTtݺ5F#+9k1ǸWKQ[d+k\#'r|rmM֝οt_Ċ=!'K1ϳomo?WsXa(P"NKk;cizG ܮoSN8K̍ )cH,Uo9N9?Vm1F!yyYbm,_Ic9x7A u8]Pf0F`{Wa)3ݩF+i.NAiAR)Pe#`*,CVP&R-h|V㋢ g5Ǡc?VϟE8.^@VAGWSzӦkTO6(K&z *vs8>l޶6([ޮ6v]׳)=ʶoSg :ar1>_GxCESג?cgQ>['StL8!ŷo~zÇݻwpdp"ܾ@8d4W3&QT&{in(PvaoO&=5Mkn?@|=x1|ҏRh˿c0:cؿ?#&,-Y7>g?g+Ǐo.noo߾}2޸o@ x)Bq_qᏕdy1oYח{>mg;7g=|W&w\Ł wb$l$|+4~SA_>}E ŖP͙ۡ.0aٶTxOZw:K?}nA߿suu6d$7:~='=ࣣA}4#pD8SGa X[4({' "??Տx  be/ k_0^rBa$K^]n8)*>x<'֯:=v1ȴS7)ϤgQG#pl4g$ ?v:Pv|T;u:(g؃gQ>%Ӑp5 SSp6[$~EgLZynF9"1gmO&lZɝsAkvu!ԁ.-Л`r( NDŽui@RgW[j܌0sE@81T9x&LuL+2 AXIV#;d8)C1QS:`u(OExʴiLq3FRR>BRGL̝zydc=" ms 832Aٙv^eq3FiL]+s3F HI|.tkh,C`HpMqt^阠vp/˜gj8}Tf\Dy$uLMc7ulhLGeg2k{8x7#`g^)xġ:-5j<ϱFƢ 5oX)4HIdJ1(-˔nFSA@c(y3#nRGFcuKJd7A!,0p4$vP&lu6)K݌0'hj$_Kԁ*?c [Bo@ LЪ\s8!:yCzaǼ\8pM7#`)#ZmҷI{,S8 DLgP]q[}H9_#0o4^xH!SG4ϡ^)Q.^b;Lu-BG}.S:ʵ85F0F` 7<έ2Zu:C9pX2 Ik띧S9ܹ^ikp.eКN#`@8gQծsU_B5[<')F|IUGc48(t:n#0wj7 Sy\_21>x߽p@r"3sB ⹃g[s)#`NMθg0cw'Bu8Q &n-d2FSG`bTnf*cq^{fŻXǤh*E@DMq:^uy#`)"0HqS2Q'qA?hN8z@:c[ Ԗy#`"PK5Wy*&NUX@@QLM̕eՙ7F3 W=u2. /x0\8-M <#p&K]?\7` Z?5F3G`4O]BqiZ-؃[ˌ0sA`<r?xeO팀0]HBo {K#`拀q ]0F;PSf5IENDB`ic05UARGB  |mъԋԌ}ԍyԎs ԏl Ԑ\ԑԑԑԑԑԑԑԑԑԑԑԑԑԑԑԑԑԑԑԑё 6QTQ5  ԅе{ՄԵvւսp׀؁صi׃ق¤հf؉Îcن ̨w‡ ӡ‡Å٠8SׂÁ ٫@5ׂ˧` >V΂ÇŁ թ62@ہćł ٩(t܀ćƃ y8@FـŇF!?nŇȄ߳߂ƇȅȤ߄LJLJɐLJʁ >zɇz}ـŇ؏jŇȄߣ ߂ƇȅI߄LJLJɐLJʁ >zɇz}ـŇ؏jŇȄߣ ߂ƇȅI߄LJLJɐLJʁ >zɇz , A #𤏘cÑI @xvrC>Iȓ$ R,) @x/oAo{ @E˻3Bo\lc6@{Rv M}v͛' @m|[UQ}bِ)l# ww?39r>-[|4f|A  6={ܑL@x߁$,'ڽ=ʙwXXу@A l#٣ȷ Qی9mS $  )u,|=Hr~6; ۈT6m69XSXC% HϷ;m_l?g15'ض;2 6b=ޞCϝܸfS_A ׏@ 7z+Bh}~NjW{Tn?W\_D ~#0Ks>Xθ5V铹)/ vHV/G SĹWz5SZ<у@A 0"uG}նnYGG_}Uw6@x&~_#q3C|Xk_Fr׼Q@Am!0IW1ckuK[-qk{[ǬMO$q ^5)e(>#ݾ^`ӜWmֱStK:9JA 5xףxv֧d͟Y-mcwNwߵL` E G W=ٶ%;9e}~o_WmqrwɩcFA }lv̒?Tz?klJwL` E F W<F$UL[ָ}ۤr}p*8o}.>s @xTR<ڛxUqmݲɑ񑍯DdA"m}eOH+9n~Zɑ8VǨ:qcX:nrO|.A  0O(^}>n{$G>օ1Hȿͷ׾|`D D /zA O*q!Pt(V}Ug=S(G1o؀#FAU!9^n13)[Q#Y}##_ͷn#s1D  0$eoݒdWeb4-؜(A  jH/G$}(ЫZ˝F"2 z8~=KJ^=1eyTzjkl|t]{m= &&SטHr9N!U5MFSh\`H`MA C uL@[5 魷5f?ǜ\Kb-EIhA <;)<;ozBn#ݾ*>}g }XuNmb2עJcTc ~!PvgZwǯ:W/..Fztr9.9i-2$#sp8@/@ /HJf Cϟ?7óC"] "3Sc}@ !B+"-%b7(\b?kk:V ǹS>63E)hA <)<֯n&;.j*WSk dP'@GONN5Q1kBoo\RH WA ! wX[^]]Jލ7*+€ĶmqlqHc}t>}Y7# :% 7?sX۞ոѯzWAHM7X$>۽ieV*A  LXz]dAP}EocFwwnnt_sGs4({*:9e1i>G$@xZRxZ|_|bq;߶%ZJv_'=GHw7B!dGgd;6hci-|5^6 @`,.6_ǯYRvK_XV1@wȾU!`uWs6e}n[xm1=E Db : z}H۷sn :9V!X'@Gp6])S p IXG9߶dkuE A  Ğpo)}mKs_5nW7:]o +_-Xzވ=ɮS"8 5 mH^R':\?΁(pct)uI+:'Kf_խz6ҍ֫ל>?ȋ+ ^w%a_]~DNn[:6¯`+r+A>.'NLy}։OQ6JJ,;J7o8c !A:^8z"[m޸̿TSGt~E5їb#]#lX @x;O@M_cXk1D} A:a >%=''S̝㩤:}oZA <1)<1oxxمۮ>j7LIN@x?cml_~=Ku񿵏:9ĈI>b~XW_]K#fA  ̡9!)jl++5/ T׼,XH$K['otgh}̫sr#~7) R@$FAiHip}>>>gk}x//|?1yd1mm><^z[Nw<2 ^'Q3.Qw{Kl'&?Jr]@ta@dإ%ERq n~U@XE}O5smOYfj)l # }@o/X/7:6Op;>oE_}mj~Wg}ۿu9Ƽysc$@σϐ~In ylxsI6~)^6EQ/)p믿.t\\pO8(rGk]kRZu!L9&>c0&:6yح @x$Rx$ lv(&] h/틊:g!tb뼩ٝ}?;BwȺe[e_у@A#Ã!u 徫>'ٞqP>x @)}?-Gqb}Wiz$sg\KCW:~וO:'ܠEg]ujwgg?;D ^=&BVwS侎# Z}(@ٸF!Bo'|fP=p\SPw@ i_%1(8R6T#y,ɳ>ĝn% ~~w5@#{L)d#]K} '"tE'5BNluRVRuƱ*4"vsRxͿN"0ECK4ʯc;nI_γ-),(owuTc(Ε#RJn!Xxl@\dmiq?cluˑ1dӾl2+ @){g~Kұ)&q6l#]8Չ̙VWmkI :ɼ[h՟U꺣s9eW@B@ow'io8tq|@[ȹSl"%_wE:6^*B@ ڈ Jy։{L-?jGy-k}N8 # # #C`nYw_wn}?3?]'7_9Xͱŧв|xO 'H +C璽];s^c{NUq7RSBw6/t8p"A;.*`f@/ՒJlW%q7ynY!6r ;G w vߤh]e+y+VǏ$?iul< =Kb@xZz>yUsy#m|ZRq;[1yQ+=w;ܫ?RC>H;@>'!li?m.`;!:ØUu$\G_7"(A #ñǞ>`Ibs8>?y)d5@iA  Jyb}.6ğf)c^;.j#Br~<O|PU7ER^pgv|^XMqZk>}شme_a""1@G cO=|ev%cZI~ NfThAֱӂ@A ,S~|sWgPs)tTWQ\XiBcp+@nyl@cHpt u}dT{9j^39x;Xa&lR0A  @{g]|f{n5F.0hZA B@O[>^Rhko>J٪ }<SD7+= pGU-7W1y"kv*wdV>jW1x@;!N0zg68nl҅9qm @YLGLŦ1|1m bϻ4e+VZ^~NW8ve* `H$mtoA1tG#pA wPSA!msloŞ @ǚpQ|[NG\ʿI<#9eg*|LyՕ~ޥs@R SD7 NF_ h~B֑>]&vTH:Ծp8@0O)?>Eo'@05S@AAp,s6|&k4>oF%-H́ȿ\ V3ik }G.!"'*p;S O~ڻˁğ|ք;%i_@;  _PqIN|2W8ɉA  ǒ9->7Ը9q`k/u ƹ?nұJ[ȿo_.xv` _ 6FFdig򿭏1َUI fS;2) ;E wkw=PP]}ն~.prm}l:> dz}G"cTt纉@{$s{__3?.jJ/vv9(ζn|VmHk~u6 @"w-ZUmKU~W7t_<% @EwD<'GVw |P=@5STBz{3X~)bO.(S ƑGc%] `{z WƸ+\@Kr;AqbW917Oi{NB')uA  ^ :N{):t׎+#($3s߾};W_Պ ;^#Xc7?/?$yύj7?+,)2 H} uʭ~U{cU6үZ=  @xTY]]#q}!@EvryȰOT8[ŀouF&dF0\wЯ'}@ɝk='o"1@~wس>VmdJ|tҮr0ziA  ^ :N.e.Nn dCcZjޙv ї~&"E^@# 诛n(>_L w<.TtIܛ|.WGi +Q@X+ #q-G>ǐsHNܹ֒ ɈavQу@A <5kVym#֯ySmr ߟ *C7N9PlI'y*WzpS>(G<휬$~_=6>z_?X; @^8u]S9o}NL[o/A  ^;=獜lw/xFpU<fF)ݿaWIcR"(A dCY11"7M׉NKO$V]у@A <;ڶ5~95^9@+>ƚ_wZwp /ӻno_Bsm)oyf~} A +f~ >:z2FA )(x{ Eu[9?n!??;u2ov\-4.%p@ b@Rvm|۵1;UIȦ7)l #@ ~ 36;q-g @o[xɡs ?_p3}|uY_\ }1yf{r"8ku$y @FR #3dMEuqsۘ. zA nVv'i$GOtO_jk_~壮G.!(F.??䞜1F_ص@~Nh)l#w@ G]`sƬ ;OZV@*- :6RΓSnYnk1~^ YR~*?RFˣ?&Dۥznu}GY{_1&H8Մ?҂@@ o?,YuM;tn@y'@A!k-V>ȮH g&\L|#w+tz,?_믿[`j;P!0/D{:icJxr'}?=69#]e^) ){Y^|#>w^wIo)nֹ\N A  VGqK,c(qo[1lsGl81+\sb6N/eR,TP}]׷)Г|?}ޏlOCd A`H`yWsGz'N0LyAA  ğvzͱձ:/rQR~3?q}*P@Un??g!Oa^cR}M)A% }}gtۖm"v= +@`DG>Z#]\xY B䵈<1!"s PޱbGʿ5G1DsþmBsz*=rWE%WewGp8@WR_y]fiXoWcUr]Ủ&/<;ՄՎegfK:UtxzL|v^?ҭ7"ݐ#[uO.e~?j>ແCzqoGbKZޮxcQ@@ > 7ٶ\'D @xrݖ&i]\Ւ>UMc-wS@&#p"/*|_Ⱦ__kWE&LJ}%D];kwI-u!)Ed g}n{/vm>pm^sdA ĝV]} in 5v# ~8"uq@E5&wr0J9(ѷϵJwXG$E5Q@GR_?2cW+k]N>A  ^J{.Uu<Yu/6q,I#+I@=Iqs0}("SU Qժa*+w>cǺ}HѴ_)l #}B }5~_IC=sd[:Ys#ӂ@A &De|޶x #?jkW/걀"3ѣWC`!7 $GE]z~{GzY vD A  ) hjjW=E C@qc*sdF>E ^L_;C~\>ܟ*G}Fy7 W ,xyRh_ L[6'bI}`,amSh܄'@xXQ>$_kն?2 K!`ύ` is|Yb2tŐU<*ϋ!|pMuJ%LLWïcWY ?:ri9v!؝6گaNrA 7@ oGz%r%gg/%! @q51: v}v>ogUkʮ:CR@> p\W4A(JsbBGYWW<Az.'];>)"`o ү축sIz{]m4wI1@^ǁsn.k|x[M@Aõsws@3 WWƷ]$katm7¥@x#F~=[f=[OH8@A c,O]u&vCsڷεF cmI ӭ= }%@r9U8Mo]7?x>^쒰3N%Ugs̈́t :};@'-7@ og{Es08-[|b@A'0e~88jӧ(vͧο\uKf+P6WD?ȼ|ꎀ3]?m̟ʁQ1J ,dRjwHGJ+X`rHs;CkSX%@ oڏlYtԚ9;72 }(Ǘa7hWt: 1ڮc;7q7ikp?|>GY k?O* hl_Ń\&,ݤK@l cX+_"Q@IVZ ;ArcuұE A  @i8{N)(?穱ڷ֏E̾)öOXix$Dx>RϟN\qm#юrA?`F}ѧ 1w A &RxMY#i N>F @τ]wUsiosSy:yέ1<*.Ѳ5f#׫JEkWs=M8l~^ِgLDow" } Qxm ;uB"ůz??Sʽ>WzqUcBw0:;B>Zo/˿&&}@ c$2 H5 w O=lhE'+ A  #k2^k^e^w?l"uAb?NV`<^?_CKR/^ TX\%?ês ; ceHcsEԶ37_a"(A VRx۳QA !` #_m]ssz"k.0VxlǰRVR ӊ+˩x+? @?ӛأcS )xLI8nIpK A JRx?-jgyPe'_K38',տwe@A`?l{w5d;KyU_6ױMO{L`F>"X"'=; (Mڱ.!.kL-aO^:C@'-W@ g٫E8}gѓ@A X;dSV"n`OٽoO@HۖAMA!cm|%nʖy|J@_t@ȿҸ R?aVP4!wZWq9^cˑ`V Q@^J_]W>ʷoJcA   }+⯹#ۜ}kcCݰiA;* qX 83T&QFTQn M8-m'$HI XA D D73;`A  q =5uCfoĽ1'Ǭ:>%EU ~on;w/Oȿ+pɓs>:wN tWϺ\K|cH)5e@;Ɩ]7 yW^;> >tl>+{|@A ,߶G$ݯݗO:ߒq{mUq_F~b'+_+M'&]F) @m&ȣt⭰.sQ1C Ho5̉3 \\H< 'BiA  @x4j.Ȯ:政LO7puNU\@6/:>U`(a"8@xJRxJt33|w? XA Bn0ek:֭Jto*k$Uz׆-ߜ%vlU<<?TFe Xh;R˨@WkP~f_wWq sm9E5Q@xRx3GA  @x2;G@8gJ>m{zٮҹ ,iFɕTRXy'g*\_Q ]k_9/ 6]Nu'M[E?لI$c#c#^5 0?sa[B/oum^%[GNm"ι~$Mr}e H $B|_sz\W. d j|jm$mN'f_uIAn4pSȍ@R7 @x7e8Z9M291ݿlRu#Gss$ѷ%jk[Bs@,Rݫ8_K??(S0`+(?$l&"@ wDԷzl{ Q@O@ Oj|||#g @#g8xxwJVHnݼ.1Ǫ6"=}ݬѡmq{MGcpS tuR9n?Edy3>o%HU¼'?2q~K"1=~Mk&y`A <6)<6/ @k wo?ګ"}R_mCqGB V `}&* (MODqE(pW^n˝XkŤIQrˡ<6I'軿m熟c2zUoj<*VPd';oOaH8c* xo߮D*3ۏZzLƱ?seͿȿiA GF G4 @;b4m"Q~6R9Z?1JƽG+#~eQ@ɿvb%ȞHWtE/޲ 2sI:ύp֎(A G@ G1C<>:n1@A 4|>خ˾ X gm|e6O;lvsl@PZAH0A  D@$mT} y%?Ľ*sՍH:W烇;>Z4UKu%WqGIs#cɾ&b' - b@IDATiidjO!:M}ٳ>w?Fh#w p+!pKW'i=ϿCلFy~ߧZ?26ySktl$wۨ:Wvi2>Hk12'GcU.:w\k #  O>]/_^L^QPJ^`sͅ@}7>HQQ &Ixȉ@vA)9A  F1AǴ=%\24\^qo$^%:Ʃ}lIm`0'q#B 5_U~;c چ_v(V>1 ᎍm}OWxF#JE "~A  Bk\;>7'1o]OO{vϼݪ>?Ǖ&6rT;EU|yBZs{wzIn_j?6γ$h=F,FA`R @Am G)w|d{}?cYcW 3䖯  |[MU8RAO~饁뎀wDm&빕]}CҾ$y!0s6b1@H`B @A`ך?(u׹{~t)m3n%{ιy+K<@) ȟ؟i=ЪOdTnTKQإl1%M]p>qǦ!Nsz5szdA`@ k( @AϚ:N?jXoĸKuЭ׊-%[&+.TD6ǰ>'ɫE; V܉@B )dA  x꒓O|Ho4kmF뮾pߩW~QV}ߦM%3/02 v$ߩ?i;sQAZw,T ]qjmO%|6wX&c?F[}Ma݉@HG$vA  ^qua꣥8}%[zU?1Zx˿^t޾7b#q?Uܟ)cilggg*|WHmy&+s:ύ~R}ws(F8iA $ `8J A <WRǮ1#nǿϔ+m4k y+b̪+_?7oWqj=%=z @D?^/ (8@^ xzMՁ6/Sc|tڨ(߄UI6ć Ld|) %)˟=;@A <&_z91KO3yޜt^9='yuX^J\GkEJkRC8 2/ $v9ׯ2*@ps|&KGUO|Wϣs I>h`&A :@b @A`m\k3|uLrim;>-#~ƶmׯ';DZt9W_ '<Wt'gW9t'H 8?k[,7JM6=w|O ~Gs_l֎(A :@b @A!@X{U}#Vǩ9i?MɚUKs~/{~N}O]ە@b؊;DD !o 0pӧS}OpGgMIOx0&1+'V9 A";ѳA  # Aqs,GA|]$cW>y^2I%>m[#S|7}v+7}N2SmH \НWʹԸ<PdA?0gYDZ^%? 3o  @da`[et{IVchSҹ#Um=ڈ5/xl)_3Կr{y biL`#˥pWGx<zG͗/_믅r.__`/W㶎wwsHC}UxM 6A  @x Viߦs~$>7]}Ω%16ey֑϶s^[/,7Wc>W{#C?!q3+.r9n_ 5'jϼ}&{?ӏ1kx  >H} @Ak4/獤\u t}qKre] g?qb>c._WC>"|*T8o2+;.|y6iXsY <^3pK`>">٧ @A]![v!}=W ü^6@ڌa>-oRq |D}>/T*?З\鎀K]P\Q=* 0LmHy-~S:-wǶ8Uh`#,o##C MGOO8zA  0F6^8yuHsD:s=vVTqͶ@ڧu\9贕$0 =ys.ϧRŗ/_.~ſU$k~h3qNt;?}]%J~k ‚iA 9) A  ^'\C:W\nuN}>FWI.먾^NCŹx<? D@ONy.uB/\J`sIgI7ۣ&6~4һ+lS@$FOR5{@A # ޞb+.bHwk`m6mI^ zi#O5/(v7qCOqT<`Ҿ >nMz} i1dĹ՗"1!v8w Dv<  >v-yow[Ync>7xO]ur3'6 ٕpQ/FN^x"Nrot'K< CL⫎%9fOzq6po5ov@x*,, @o{lL!&.8֯ky{^Ƴ>%G5i"zy^e1@+7n_QPoW(N7p;x\@xI}hrmԻ oITcJ{:]uǛl;1@xy6A  ^3ʫ;º^tQ7e}&any_VsH=TN~7zOG׍e`z(`.'E=$ѧT>N)poe/A7P @x@>!ڶ\0b|6mlj6Rm h?|v 6͆3Fo{| A  p\HsYܸ} Pu:ՉݷOH|RB~Iޖ<Q}?}ǿׯ'z,@X\*K߿?ya`]zbbmk!d6~e=n>dW_w8S]?yZAKP]?0_8;NEut7;':bgc;Ч0] =}#~HVAo nWcMww Dv<  ĵ|5>z~kglD6_WoLkYzcUDZdl?خ1FI@N$dCWot' "CZAARfO*cm4EY ^o @oCwlHzCj_ "-49KBۋ.Gn݊_kڭ\ͧOGTF6^j5gI?:c8׺@#Fҳ}O`Am *u\yA AcI}ۣ~9Z+:sֽz,4y9u5oۇdN1}l#{ݶs-Y;ۨg*6ʷSmxئ;N(K*qnw (T&\=.x4;dfto KMw0&M6H`Au#} +-׉[s.9sg?F:ѧ~,X9{*csI>Fʧ!֤}sެ6LN{@_.?c@ A=)p"P);Z عk~ğ"(=C =A;A   `9}.|rh&OIxz?t|dOuSkqߩ"fW2_s;>%[꿈T^ *GWOe >___zAS}`!}w\j[=)8]_xߊ8k k3w~oIl/#,A ()(< @'ācrW,|Q;wMGljsGq|yqb#3w?sjOHEZW-G>_/PX8o%ȿھ IӧO'"\?W{[>w!I~&ĭ:3<VǷ9}k?4X&U=N/:P$/ TDw*G>(?#Ntg*P8h?ߨp-RsWGdz].&O=>o۶sx#n_S?]]֧ƆЪ{k= l И|SO`]ם+}-@. ]$L-7fx[IVg6b1@x9Rx93sA  m)ۮU3No{쟑۶Y:i}oʟ MudBoߜ1Fŏ!ԝʿ|2 ?4Ҭ|bp~$܍ߍnR}k/m$z?aF\=$b)lB+8)O @8К!&V}&ڵ5`W>α8u^;-qSc ΍ڔmHKGS>Ъicȿ&d5k.Oh ǏV^0c&Uªc-?v~4#<ɿ%ݧ;CkSJAHA1̄A ׀Sd5Cp} L'b_uF1rwHNun r_V~ᗏ"M[1uȾһ.2ׯ_T w6 ?HJ3ﳈկz-O˗IX賀>x} }?~%!fC{\|ǯs[GN H BBg @A u FqKr1׹3ywj;1K-!yD@B/g%m|%M_ WQ#r/'x*nݒh4]Z+RX% ) 5 @FiL޾uAanuV<)uN}E;,ɷN*GV;"|1H \ȿ?_/sL׎R?ŀ] Uɿ}='iAHA  @؆sD{x%Ug5X[:o\/[|{TvG+ h@g"n/$nGts_JcS_u39_;@M-W>Wg=m V` I@A  pēĺTmt)]egwJ:Jg_={>6';WF㱩k+?aC?p_\ p;xIFS@0ᷔkg1uuӾF#Jx>Rx>3SA  vF@hMw&SCߖC_V~XK~?Τjt&kWoÕd#Ro_}h_c|<=pGx\z6?nPBޓG?ʏB2Jݧy'<&;<)<7 @D@hTo8ͽA^YunEzU6GzQyǪ=rMuyPc\y@]Ӂ8Z_ T`9Nqޓ|}ri*Rw8kEϒ.S:F FO@ Ok ct A  m;8z3CBU1ǫmO?{ʵ,t}sCA`5'.q *\~o< YmUv>m-c5r|2c}$65ϫ>t܃lb9g$qF9mix/b <\˻N+=p[D%ydAWp"€;."${vaݶF}/hu$}4a"T@ iF A  Bu((mJM[)ZS9yUϫ6CjkW%eD5K%[sىM_8ne}*wp%s1$ܺ>67EDC 6# @AwZ5Xa~ &Hs}^booKs&Km<t(f$]ٷOk+m\>]۱[ .]KCKa#~='n7E5Q#c@A  dل2U^usm]`xMU˷cmiJFw@'_CڧUP਑nru(g?k7z)InIZ&kG   @A D.&NvnJ߶G}|*'U7MI Fۘ7l&y@k׏h,WbI[>;(]5 Gwh+}#Isvoc#F 0 @A#`5%fք>lZrB;m'N]3;xSح I>@1>xL>@EuW%䟘S@$m\Qy<6yg9\NbA W@A  &HĞ[17Bg>z/>?K^菾[wܲo—dhkn*";RDT+/`Bsp>l_^[wlcZM}~iGx8)<Ctý.,Dbox&Q#lZ#IM4TmzbU.p]d/[{{a4b,}uſxůt?}t˗+'0_\IjWߧ@tp!B+ٟkm8c Rxl@A  # ֻbp8Kakzs<~jJ\[|\6n+"<H@nՋxd@*-[ }2R <Ћ?#?$9\`=K1\2l{&KC ^τŴ @A!1q$}|{HσU7gΪ;v} c|hL, @w_ q!,ˆ6wbEncz5%$ @A lC@l2zI'n֑5=՜7}~MݧΫ>XԾ?Ph$jnU y_#{Lx wIJ*)WNZ6;nTVR^ȒI opzI9c웓yM",B iR& @A {" }%ϜN1zjW쳴oo|!nu1@+|mkO~]_i%qq_4q&I3箺MpsF,F0M"iA  D@\$AUG3ݜ?dT#1-5dM:pcUZ# h;V3<*# b~ ٛ}U\#'cޛh7\jvOyJ=CP@J*MBd*9ZB~^U;5{z`E3_{~@#4@# ?P)O;6Yg=4|lUv>_֛_l\@)`o(UO\[-k])Slo ̧ / XO\#Zo;9CyhCz8o|#z'#Пu;@u~I.M{|ݰqlU~\T9ǹGc~j~2Z~TmslXqutq_{'1^-lo**ym`.P?EWmWyU`ޜ5/A--oY "cM""-4cz`KkFhF8 6з<9eFSe㸅˜=?'{g=ԱYs̈ϱf| -*矡Ł[-DmS=yׯ_YAT믿.xe|}mY8eE{0g`fB# p4@#4D Es1[Z+Msl֙2%ϚO𴑌ܲ?:˕RKw=GB>s˟Zxی~7?/d8b$hu(~þnmߪb66^xloV#4@#4ρ<̜u:5}2oXgNF_}컅2ڲ.elg$[gm*sje? 3l5SS ol,D _I>,8S\ibx `䛡R?h 깍b82γDjJMHGB>ҧ4@#4@*W1Wo:PQGGſ2eT[Wy䃦EDZG7G AGFh^׾zƶ>eז<~Nyض2w|vzΎ=FvO*6Iu3q$vg\ @P-~"~JX?%|7ǼЙǶ[@awaFOi## moFh_}aʀU$b\ۿ?7v2s6ѹ<O=Qq_oj8u]үE;ϼJ6p-ʅbo`?>KbxuUt=(la勘 |جg1bm!Lsou桱M0 ^Ȁ4a7@#4s!Z2)1[n񡨥ѵ̽9گgۺJ;gLg:Vyd7CŇ|.˾#{3Wqb)$Fy0`0:R)ϸ_KSyx ±W@FnTn.Mq#]'7# z`4{#? ?@#4/or_'syo4kuy|jlGpT'zu_kLy>Hw@ 5x75믿4ax=EnDcMƼ@| 853tAms=xO{4{[FhFA@5Ό+)34ou=SKr HSkb?ͺ̏1wĈg(M7\s_B],T_A8!Aw3su/hhs@.q>$<:hۇS3;@؛4@#4o4<:[)[9s.؎m9os1yd]#?S;?T_yh`&0 ='?US Q\k r-`R*-E|n9\OG,cp`hx;{FhF0]̾}ϘjCo]$6= -Iguk,gqYݺ[gH|x{z3@nR]t-j1⟇RF.l~WXi9_lN&Y)˙vm9F" oy7@#4@#N̵2ͺl6+%6:ۡ*y^xf_Vs̠q  \_WGyU5/?y%-\^\I\%/xleC㙯[7f%pr{+@/O4@#4+CsN1r5'[FkA ahY;\F\oVXھx "-?h"z>7;E>vnpbg\@W~Ce.YnyJznyE=ͼez-z=FhFLuًo ȗcp~2_bOy{SmszK[s۾Fg'4>P#|eq[8@O5*7TO% (lw"|l0Z EӜg 2RͿIzM~l=FhFh umhv;Ȑ7oi.uLsuPcrU>˟Y^m_xܿ O6.b3-m.UPk/$RIZ//-/L=?lta(;;7%z-}Z=FhFh&^Q? Ƭ۝u+^y~չ\==w9jJɣ-`@ {V|S>xj1(9]lQM؟#q1?G m x6o ^xKVϵhFhjζLmN핯@r=Us|Kmk\ig H@KO R W@n YWr St䫅t%~ebG=a,v낲ı׌@/O4@#4/UYnu|s66?| U1;KmRNs"Y–bR7ߨEX7]~LľO.M1Kuk}ѻ7Ŗۜ>y<74bz8=FhFhH؃x-:l>ج7)~سr-Ն汑KmP櫳+ i٠G GPF_iT@R9#L|(yhIe}lx+pzjOOw@ܟ~}|dvvLOZXݺLr-/+,(?*Lf;ayZh^ Z>G#4@#48fuY~ U#dE͛{k4y8jO՝ >O8 @2  +.u_6nƉ$<*Ǹدg‡$}wl.(W@/'G#4@#X[m/{>6 M=G˕b:d|(ݺ9lqszttK[8up/>8@L%g4 ar#>'V~=>_{mOZ4 C +@^ShFhF-""̝Ժ+FuK#oɺ#b g~4$@❳T<F^*1 R+3[]9p-ەcE!IGti`yr 9ޱn]PrB#B 6@#4@#P}7}-boeF͌ߖ6FpÖz)Nß_}p~NM/ǯ6|(yMr\MWp%@m$OX;مbuR󺐯[^l<F# hFhjGB o Ďl{3d圕>#y5Gu }qĺ=)5s@ ^DZ(i ú[hyG4~sAxQB#+8ʁ{F`j(&v~v=F` ^;~g|0)s9SRo']wwCTE׃ߞ Su윜(9V!uXoψۈn+՘r=+bHSIwoz=k݁^A9E&dvg.M&/(q`mŻGkFhwR.xfV[;)(c>@XWEww1,s(fټ)#~IgO˼ǞؼS󦹈w1DGkSv[~S@P}v)֌]{tԕxmb9U9sz"@VpH /@/=n#4@#;((Ni=e4>۔}8znQ?l[U~2)%y}ďtk9c f9Ҝ4x ,9s%|iN/薀K}~iz` o /蝾CÝ[~,3ylngHlxx!zaFhF}"@Q4:Ư,g5vQԻXD j{YUKwm7alRjҸscs,ly2ϐy啀|Qj<>xfh.kZA O 믿XP"%1u!m*x/JF ! fFhFx {TR\YW5|t9o \~˫e#Q.ub"3u瀯ygƶ6 ^UH8@#4@#91=kb~WѶ[Cf:Nӟ.39b\}nɷd#ykv|Εտ>O}%՗Bk4ŚTE}P? UN=|?90&_d)Qs^+1WPfޡ3! lmFhFk13od:GW>2_mvl[8ʓ,;eAc9S3VMz Z_AaŭtSs\o2n\+Wnϴ83v_0.]z5~ApH ύ@/<7xCrOh_Q˳΃ruu['? Hh ]jDZfޱmγD6njܶc~ ^g)o?`ʼu{s@o|;uD \UkvYnu ͟-wjq;24:[LR𒲰y/ Fh9l ~lx&z@#4@#j(N%ܐG5oZ96-lUc3-S>Yms2:1y9>>GT0εaL2vGμ+e3-ӘqxnE/9Д{(&.U޿bǏ_g7x>`=l^@ _mnȅ=ηFG1924-g3ң%~q^\g>tOA~*Tty筺,V_vwt CAIgYP]\r%G|S#zs.u,p>,q8ы[ljFhFh^)T'.*ۖǎ켕nRG؎?okɷ&C[v9~G~A3?}(kǞu`LfN\Cϗ5#';TKoq*`Dyy׋J.\Ylч#8m؀@/l]FhFx y|\V9~9+9Zc_G9[5vmg,7v(6\g>c\u6xtt|dƨtQXV QXe6-7*y ?hXw:??Q9~lgt\컳q-5'〥em#ۗ1*N·U~(6Bs2ݍ~?>.9cCEX$\W$sY?OntqW^OW x/PQ R{ yt̹ 1嘬m8d`V6 K#4@#4o9C_;u:SZGckrο''۲5n_u/)ͯQo1 q [vs>✳PZRE'9ic4a1˗/VKVܝ~#ݍ4f ş<|@0;4d}l/ЊF`viFhF c(<ܐun햡#DzuU43}Mv5JܼMY?_q/)Ѻ]Ɗb<ǡa[uN1M(U=~?Q9:ӯTuL-V㡂{+pb͹]̛yQ[.0BuG@#4@#4 .8B,[ؐyL1YBTe,|<[*{^#\k3ֶC+L4\g~#͢uKuAm³x?g75$-bQ@ 7W^q O@dF|?V}=Tl钍ϣ2ZoB6N@#4@#nT ,i:UUf]яt&GPeX{G>yܵcV_)o~,F4;.Sli_8' b3voz,[a!!d)ݷoxM`,)pŁs]%p_ٵR.MB7UvLɅԖF(z(ڹhFhG@E;hb6[z/xAql)s%\\=FhFh*p .dYo[vlK ;E[nY'6'On[g-\|?Fαs!3‡1{FhF!@!4Ce+hR1,_w5X3o;Ev5y1ǴQ|՝*9g[޼i˼ktng»#Zy|Xew*}LSZg< ^ Kvچ~;i#p2p2tM@-{yAnsoLg4oJ xzG2ߝ(هL3oǷ 9miZΑl³}/Y?GQ*]Ŷȗsf(Ts:ߔ% X t=W_f(dQ(B}![] p/`^ qxS|xlM>u`k@EFhFxS^  YgJx*}ǎvљg|xSj;E9y>GŏU$gޓ[]>k4fkyD߼'4w:E?}oy g_EYpQv])4dznu5 }|Zs)\ԽmO/dEfiC#4@#v\ܽy>t/+8虷RC> t"єxۇ|YqG:>SZ/}J9{g9dy _c5~kzMsuf(q;y9/QRśxy Ÿ[o {}[.~ypwzM|<Ǩۖ慀%"[܋DYBi[#4@#ZrAj'yt/r*OՎL ҟteymݲ6nj9:CYy_<9Mkv?Coy˞]U>OE,R:},ΊCq6W@-wUj}KnW*ǭrve0C'` w/Cz`K+"ص~S97@#Gm4o{)Kܶ7su#F1F--#V힯cL1>3?:߼]?2٩_Ox$hua .ÝK=?߿ǀ"sP7vkhût|`>@@ҊS97@#ޏx_XLP^ `wxܪٞu%ysys>Kcq\͛fu}Ά=g}>ֱ-gy Kuj/,=.@eP^gWpٿ Ѣn](Y$ iuP ڡ^xdžV4@#"gV>|-CS3<|q2Hӡ<-x[1w ?7ci%LHgmcxWs`ߩ*&XC Qy<|Q%q,P-DQ-kou%n ?nrOe/j^lsCiěE3k686@ 4گFh#юc6g ZlEh3יܣθT|0c%c[NϾ[x~ӴڲlԘoޔ3OlُxԤ 8/*u4*:#'>.Yo߾] DNb̄Ÿ:|>"[?II/,">wr4/}4:p~N?5Q}༯gRgιyй>9|r#B1$8&޾lG|$gykt9mC#6}GQ"i"OoW]^rN?㤿J Pk7M[7^2^ -S<};'jk8@hhFh~5:>jY)Z8ʞ ӣ*,u ~'G<aJшmMξ[oKL~k|r{M˾[aZGz렙ϱ[Ͼ#﷊rDKUsg&l\&hK>wՀb@2Z$\two9By۠4|;b?hڎ -{FhE­WƔSGSyjƙۖm3cPиEf.[G 9l~"sLg_tk|rsqY|r;/49wG>56vN>4\ϯ(9??JHC~#&kF~-`|l&vZA=>'wyN汭G9Қk-[߱21#]9FξMKWd_Qt4Tߍsէ5,?t9 bSwkɯ[J`}ĭ2}>ˏ}#َfwDMGPi! 3-nFh^-ǟs>֛! +Ƿ>Qn &h9eq[|3\Gjb'L=F[&>b϶mdw_ UU_xU&bFGYfCiy~O"sLcgf~P茶J`8| p^k׿>+u˗/7quANl|; b<#6U|<_ō@#4@#KܠKv*%ub"QcQTykdIL%{i7ojS8ȹg<4uPy܉3s[տikګrޖcbqeyBg=ڰqDEmbbFwq+ZE:@<@x( p.?\#3a)5춙7-[d|}`zukF[`tX"yfYG(B|۔k/ONQ)Db߈D];H6ry ;ceޅ?zPНg$CϺpH>[e-Q60[kk>~5&ϩږlG״d}e~K4&~> ۝W2;Ώ"\_ipER)z%J1N20n\vBA$h%7ٝ}=I;}O5,! K购hFh8{fW!ϙh {yS=lL=ob1^Gw+(t4aP a7y"g#'fy.]yr;DZXZ4r-co>`U{ylW,k93#]k}?u!<Gew \/s]!O[*m@[s[<^-GW0]7̲?W96g_FhFx6r)61Q[tAxQS+NEGȌA˗ u 2A PW絎o[G:϶cqs~\qmZ9H?1HU77_mQ6T=y5wg} T\g-nřp }JkW?m 5[Sx '-yXsdCԪl@/TDZnFhG!0*Ѕ^T̃Ⓝpu|F~yv_gtzB#`x.㏳O٥?i, =쓨uT D騟 ?sF3c]ùEg<+B;2 }߾}Pࣸ;ɺK5:0Ҽ1K6@/hFhW[)>bq,PgPolnR~|Ӵx@/<!P1Lz䏈@:Sdr]q_O:Rk (\:: HG桼A@GSaϓu)壛xwg荃ySO>H:#s>fq-Ck%Jsw>oGUqbs~{OͳQ.oϒڪLǚ/3Gb'9_Pܳ"]s Y[ٍw[?SҤxĽ,(8,6렴Nd[o#^T5@#4iP? *{Fδ(tMt&7ѰyS{q%Y'@ogB rf] ]WW#:}GqSyzN׺g]Ӫ}Xܶٷrܜf[?^<ߚȾE7a9}:Ӝ+뜧,x}o}0wk|?W*=K sT.?~öQgk{Dچl?һF4@#,>Ƅr?.WOWȏA1gWF>5e3| .Y4 +T9M.:+n@])U^*e[|l|˚۲C=J#42ܰv4r5{18uS5ks]*{[n kCy??T\WHYZ MZ4}Q+$~9'Wbwg6o@>ܛ4@#4m!z|n=r?gk/ et;w(z9EXXqVzL3zY բ3z@UT: 8(3:ZCq⟧y2yΙG:(14Wۧ><7cU^ȾU#߹9|nwll3U"a/Xn q_~Zdp7+ ,81cJ̒߁]8{m/7]@IDAThFx1/Cx_ſb(tL>(WAWz_3mӶ^uK<1y,Cs˟u#ckvb|r;ZWc)vdoN?79o[7,q znh,|OW?g@WD+!$;~.Mc2*:Rg3-|Lzc~Ս@#4/E"K} :GE])ڣxy.o("Y`E5Q  x~q[rMqt"6UQD?9xf݈}>шҎ=9lu.&ͱszۗZ욝v?E{lklGVk~KSmXwl9ϲD~b~x";JW ^k W߿7%G:`Aݚele~dF>ߛ4@#2Td-ky?7O.WOGl#E,B:]3;}X |cB T}wjmba l[(v4mLkLEODz`Jfo_#ډ;e:şb1Y6y۲}>sq[ѥ܏x󦚋"^$'Wp_oR5nQ@,Pt?M恀Hg*Aeڜllplȳu^xkos!}so08Μ<4 okvcC<͵fg9pquKsr5b:&^k~<'awNR{p_(sw[yxs;lw,*ۆF C{Fh'A; *^ɞQߩ{nwN/g5S|\Z>55}i Ι}a.]AcNة7Vۜʣ#7Şۜ>l[E//^ۧB .35_}kʑzn[?gSQ"@<(h^"5GU quÆ1K4/.ך}..d[gs:lɳ3tss<Ɨύ{J-c|.یLq5<=ht PX٠[. Jv72}lշw@/7hFx (jЉ(g9ſxOُmm#n,s4KGǙ=ҟ4LqHgmPslsqU_ϜZ_?6h-9{7yl1s՝2j[UHя,PӦxpHwa|+?ؔV}dz#@#4#{?hk~S@\\#_7-<<ſ])zPZow{FhG+@VWp *)~-A"2>L},}T1r̗"?} ~H Zqϲygy?kKH7c{js%ǩjcs[9f~z-1[|T+ƨs[sd3'23Q]a1  (s58~X}t5{Fh"P$d8#>q|:cgsgoA*]?G.>HxԱN}pe4.[E}BӶsFmSQ:ůlJs[s.1^޾%5>Tu:NOgKڎS<rȦԻNvv){?q N- TnCv]:drn?{FhDB= \*<p-tM*xqjM:Sdx92{B?? ^vPlnh̶gc9o_U,{NY{k?u}c?v̵5hNoA]K ؍;¥" L[dgoݚtk:zv4PÝ_kƺlo C~Sbr!0:0x(Ds$?= \DsO=]-t@#36~mh^@*ZؿsE9VQ12fOmsm_q:d5s8ukS}qkz]C~QV[dەe=U9a.5|h[|vBq6&|?V6@#k+QHSLcGݚ>5w i3#pv?}q۰O<ۘ#sfZ<7e~b-Rc{tfٻLw;[jz` z6ammmFX;Ȯ*{>Y Y|ˎ9XG9? O+ _$sZʻd})>6jr6ˉyw4a[<s"5>Qu?"6Ѭk-'cWҷ5" S9ڎ4;G`֛>OVRT'tC>z>66EOWl?W/d@GF}=5:1ҍ,;Q[+4Q+y#m`c9,on)?/Q'MK3޻L-5rlvUKH[/oƱ;揎Wo#4[|~/إHOXl i3 ̕>"?GWȿ$r^Oؐ3׺*[]e?fQHSrP']؞cZfSOW5?Wk}o" Ω<ԭVu[ebFQ;5yrcrbMs>od;w6֙b7?E;vv*~gc2u}2^o o#T;돍bo}#|b#Q{qs~KԱ'0u~ xdD>o^3e|=g9v| sl7?=bv}ktznG#;'@#<}e hm{y^} r˙2:?QdeɚZg_v{UsTCa [w+ͱ?>ٺFoaDcT85e#:SF ;Zwl@6.@#4{FQ24(h Tߪٝ_^:ŀK׹cEA>,S;o5?%baO:Dk~gM=xs@b&˙ߘw~oy)dٛX[g~;WF`^ @#4G`z*3*)oUHЧEXPXBaC3_(]k~Qzvςv ghmFC |fId:3vW޾<cHg[w@/7hFXB`.˙jAQ_]3^]q5xhmh=m#E>93+bA`ߝZ8gq`Z/0B\ge;B65Q?ҽ Q 2oa..a䜨}{Fh>..:+#}e|.r@t\"[n) }x.U>7ײ~S^wlt~:^PZ#1_m{#Qo׊!(zFb6ЙfIl`'>?ުFhF`葾겜y?*uq OzV5:g?)71t~Gߔ^ȲJgUiNs.? ڞ.m,g~ުF(o57/v wХfn|!wkEx4@#/9pYG/WT!}@Wt+b=rEiQq>:E+Tܳz"6: n@#,y!@jȹ)eZWeaϻ7˦ٷ[|jL^xjoR#4@#0B ^mKr#rVn`^P!*gf 4aqd떏Cg"@\9@s ..Re956mr%[~yyWzd[#p@/B#4@#6Aϱ<!쉷P=o龫P*T_s%z y˶?+?-tCy PXL cA._g/ hy9wF-!Tߊ[;hޥU9KE>ߛ4@#~Ÿ#ZKMb})T_g?~8wtd7h n.?:GGg}8O*#W@,)8;S~;PROtT\/x@R*{^%ۚ؜F#:G׶]vEYDmslbˋ|#@/B@#4E 4o?(Eȧ~ I*RO<+-pu&U7Mg@~>OK4/p bBzoCȗE3gZgs\ @+EhG{e>ggs׀{JMQAc]{i#pp\4@#]F~ЩVb?h9'Y+- [-F_>g)g)bžѯG,*0wS1OUG?]G-'^.NiU^Ӎbwk|y[[x͍ݔ;SnkM2|Fu`#4@#l9z䃮MCl?> t.7O X_Iw\W=ObVcQ{Ws:9ꗊ\0]@app>џad霯i#ໟOU~xlιx@'9ZSgjkx4h;A#4@#;{n{.WU.Yȝ3U߉`Fg?ӥ"g2 s` E mLE4O(UsNς 4-p?g(9?cnh.>FVf-7=xwoy<<]IlԨz`V7@#4o j2ۋ.x%t?.?TC_S#ߨ7qxU*`N.Ѻ@ ݢ9b]kt?E~,pw }'9WiW>x*?f?un{T[W)bh-G1kVUڡx:)Y?S>xi|uX|jH"Y< ^Y:9g'>d\Cr3ndǕ\u9gޛB b C-2eg d?yf'g!C] ( M& چ S:~}36}xG#waI+:>I[?Cr==l #tU#4@#}OW{걙(|O$@gw[/o sعUo>CEiG} i]_[uͯ 8@:yVw' !Q~!E~% )ǖ2Z>]rʵݩտˍ@#C@ xg-ϊBۤ!?F1u۷@15@#\&W1?t)DYuy?osC,=׍G  ,UL0\笶}_ B"?DDJ/~o]𑿳 / Ҽj:M{H.O՞rIWo5?h6[D5{kw]`Cj{;]L<+3zo;?ُԔf-cz꫌Nj~!h#W \uZ򬗩;F3]6@#4m'A(CIECyG&'.w N:w_f @KwCVn< "ѕo +ҿK~d뗼U&P_g ,;DbN5ϊ1P_m|Ln+c;g5qε~suDVFhAB~*Y(ӣ{E-S1O4Y~KrW w{wK{c\,_Oz-"<hN!;"M/cO䷑M/[; }*W2?2E*cjzϑk|N4o){nC~O.>(c-~[Ե|t^z#4#!?[?/ɳ fCy?)ҝ2#8g,P9:G.O?U? ɯkZIj^Hy޺Mȳ=CWe~/o7';xwwsLO=}KڿhB`K2کx(x(rݮhF'hw-lpH4ܱ'} /!~H{>w6"e:n}+,to@_ t?|[I|x1`~ sHHCCk[ֺ5ޖ N@#pyVb_~')>(x<\Xy΋瑏B1j)#zb هC}7l7K=C'O@uʑoT@N=p/ 8@ ̃%ṣѫ/ݯm9u]8K)̮}]_X8W:|OuǣknFxRzWq!͚eH}Ӷs?o,ՎlF0 _~<L%̃-X7AH8goN *CP|]|~9̅ƀ#gV_՞ rM8bgHEmR>>m4msl6lc#:ԺM#4@#0"瀳ծV>?7C~os"S@~ZIʖYb ;hʐz/lCWr)Y6\̰0[5wi 2sp cboeUH*jd)lk[b#\]zoۋkFxN*I8[b]A;;")Cs}ۯr7cOw11f>![>$^d}͝o"Է"Y@݊6iQhN@TyAyM`Ԟr#ى:V$P''ڥF۸hF \>ֶ[I8Ex7 y?})L` ݗ&<.r)ԇ ֒2(o7<:'mO枻y?x ? #E1י4vؑ|z-6ZƾeFxo#{ò!W"^\' pN}>]gb9d.[m5~%'F@Mv]=› SΫV; =z8ikW]?u A?pq>9+0~֭T]t3zlL5j~OGj<8|qy*!4KiV|4~χm|ytIsh'A $}cu@ZoB/Ҋ geN?*0sHeD@gQ]nJpu<rj 8ޏ HNP!"ozB޳H$?wHX{~X[o{,ݾhF8P_1D#IN{έdRy$"lllyO{ & e+Z6{zIUO~Gvv"cyD޹OH0?OXҁ -]G5@#4/@^#릍@#p[~mY4aοEX!&"K[ɟ; OYmy?9UL1 H50D>R|l7yO7sAZ8M|.CY>lO\wO hw4@#`:'#sK[mFxƖlhU6~t=$w%!sI[ Je2/Oƺs:#XL[E>$CpsD϶> Sw/y:^FhsHE#O}xzrE"PIjSm&FonYOAE !yQ>ĿJW.h$gV>wWcKNҏN%uJrgyW?yt ߻?; }?!f2z=E9#MhF77d%8Bs4@%쏝o} R mȫd{k?ğѕ#`G[|=?@ 1?B6~p@'|Q۴p*AN5k.5@# x{B/^x&{?ڄTL!Kz~ʯ H_7K uqZ/}2i[d8dɝ XE=Pq1|V .7@#4ύ@hFUI?6-Iw!zJ|gR(rXI3cg˿'-Q@ROҿI~XS&DZsCTïNļV ^m. &ԍ\1O }͟J ~x7_82}I8q,2-߭5 |o{Fx<xiv#CQIӟ!ȱ O| ΣgfF7F @l9;I:!_;tHCdxqK=媧e#4@#tFh^3gȉܙRbo/_Qwn2ACAG[5Higg.i^!d!\%U.{ xl/i¯>slNPC n-kN@ ,v-޲h@_nFxeVt6ۉȑi;ΰ:n}d~ll~rd|C~A9E1gi}\ _k%n?$4IqV6|_0&wVf/5a qAiFh@^mFx5 MM[m:}L7KnCb!a'PW2e$DNe)C|y?ICp Z6C%Cz II+A7 ɟ+t,Uۆd@Ֆ>ӯ "s8`n\dk9@#p:pe#4+ 1zL:~915wobWl&ސt~䟭ʼSK'ه6I5n{\ʚsg^!m5DY9>;{) > ~ӟ da O `oF@qsl=s-FhFA7@#<5>Zʾ+/""A~Od&;DpzuAvtR䪻?4o$:߁-?m %wïvܐ͟;T 㣎U P=rX  ^^d#tF$syڟϚMEB+wU7]}.d`@ ~!. yIsI4aLݶx!÷Ts4s!ݖ6J|eGY}!!UN ;̝0cG9Wsʌyhˡ9hFc#4@# O!oc㎯2g~_Cm?/ DbkN!N䰣wrs+34_GwUQ|5#])p0r #QƎIխOשhFzy#4g!1tjvLֆ.r$RoGv"g C]cr_sx5R n?wCG,GH菼8] }k xlyՉ^N/ d$4ں(&ɄГSp#K];&s,|ȑ]&H!w 7OiC—tN|qOvu#4;DF} Rq=5SY); bAyy_3B!HϣحWsG6ZdyH?ٷ,Qo?}ź⟻C1BݸVCveX 1zd?&>k?էFh@qU7GpOճDmO-yD Cg[|#CM7eG2w=2ck9)_K2:ޝ}ǮSH*G}+7٧N}&c!}~dPwr79~9M B-WNSϷkFx:28(@#\_s:5C 7'~[__Xg''̸?IRcVvvT)<8|;%2o]P9#1r G:2_zNJN}-o~PauhF}"y{Ս@#Fө?~%@[s_?2@C@9̵Y.)bxuk5EwAmG" Cܕq4W!x;0"}3wyQ>mֺCcm@#4oc+@r!Щq!}=5Sy|Oͭ[0 jEM!%yg p@x5980 G V>PIC#|M|y1'Cz$uZ|ֲMݐؒhWZzڞ+O;X{/}~{?u.SF%Kc5@#L;UL:yu"+J9 Kdy>tЯ @l5꿌-?HɟǑ|]Zsqk{g3me{^b_ݽ` 05R#tkP&œ|^VhQb#?-[wnr#{mc\#mF`AEȩ+!vsy_'F:wO /\Bfv|,@طߪb/Z^U}n˿m@#4׏@ F#8Nkue IYUB6~z!͟@딕 |.2@He9M9h?t\<:9P}{j36T&@#z,eyyJB .]Ol|j9Y@IDATȆ>i>m۷hFzy#s ҩcmnk^qwzߤ_=[sCj]L@cST]Jߐdꪞ2Xw@{h7DJZ ;A8FNۜ [CI=R}_e#4EoF #ph{nּc×컯"?DCGswsU~E\1f!5,̞3A|uR'>v ͚̀| z!=p_Vූ}F!&`eK]F%[#4!˩5[s]m)Dͭy}eE)߿]9WS(T>eŔwR\%z2(ԺZFw&* _ o"[2p7SsU퐴Y׆=|>S|bod[c}t]#4CoF #8Nku2㯶־G6Y~yCgظo9"连'Gu&k]*2Q5Y/y2w)wPhr\ҭ#vQϚ"o% O}/u]:vm 3Oe.婶?v!&(vё9zϳ5C)B!}_Dwt@@:wws:z{@B5tA][6#s;b@q0 ?ց> >|!{-F ^ߧ[c=UOO)P<ǥ{xռB{5;:gB#4@.3Sm. @N"?B:UG]rA$w"yyf-#|>qqy>z/a.֫{٩ =}]͟ 'e 5˶@eL|lW$CDGִ݌o۲Fy໺~wx<xiꔇ=?~:&hQCGLL^;Fk%+@K Qޡå^ϑgYGvU#4@#@B#4/I[[S9W6H9we}H~ѧm}w @?=I09u\1A7"yDv @BlN)&{ e.9Mm&*Q}aʬ5pKp ߲5Fx9#Ym7@.FM#^Z!C9/VBvBeل GVs޵slOϴ}H? kzck̡>s\ Jtk9~0Y ]ğ>hqn%8d$:eu( @s>E l9 =xP&aKZbo4@#<<n4٪۲m}VB҆q!GD???w!9sH{Hy~l-kml߯XX޳A!߅̱Uf˾@:zC:2cSOx27B  h}_|\;0Ț7![4@#4{t`.4@#p!,ݷΫk+edRW6'JOQ^vgW c3K-xKy>&ا1N9vy^e߇l'zȺRyᗾɴw&YfL|8ynYd&*I͟)AlϹJ-P^Sľe#4@#p CFxb.?_~ =ED&:[ѤI@EAgd}# @6go s\"!E Ti*/;'s @Rb.ϑ2GwA=s/2>\c%m/zlv\_ -FbX3H#p&8v<r6SrTZW_H~GDʜtSd{h9Ug!ؾEߤ?rd8`@ll8&:?8r`+u:I$ӡ 㴕i3 q_K.fߧL'3_6~ׄ7"ɼ $PQFGxcovUs,e|=wj>SFx::tXvOό@VgoE.dI0mQ 0,S.:b^1kDP%}DKa.ʝI&dCTe:wʝ $ϨޫD7i]dSګA/X$Z'ïs107e%cO9zR#fKOZoӮe#4Bx_jsN}r#pA^ l?Ef"-D۬&庭-ot}l{_ʴ/NO-݅xrUQ9c1񢎐@Lm! R}V]}Xg>50wiIHˠ[,}z5CJ]`Cʴ4@#:W\]Bzo\ׅb_d ed! _SDLD8 ^!C7d%rͤv)Ae&EDY~{ߤsHg bi$;=:||C.c#8$s5 e.Hw9oU#ŗ yNVsM^ չVa~OIK琾վnշhFm#}|rslA:uK P/3m`|5AUmҤ 0 ޖ.RA ʷ"q l2!d ʐ d @g=e|6Sϖ)g??qs=eIa 09KC]sp?,uUw@@,y<~ĜY Ht G*;9Wɪ4r^Z7j;U_۵4@#?bѻXt/"E{\l&"!r$\Ct"UVOgZц~ZLL ;CByߟFq>i7cSy V!  *)GQl ioW$>yFG{i]dڌvn93o2sd.Bo#*,1TmSR>%oF:pǩgy"kW5/@xCy?;Lo"?$ W}HI;P*s`3D_m({ k~HGk3F_ukk]F c-޲h@a4.I&xuoW9??eߥ'i/2Pb"l!G07 @'e@rII.e Y|"R;-/@kfBer9ɤ*QٟY@ 8J&2K͓$MUGNn\ O*i[I|olGe#4Go FzqAK$[|oGJg E?l"IwT"I  @)kg[Qys~K 8"6L@;8 geUZ˂Z}BTDH/~u|/݈.IY&SV/5q~|'TAV:ey`)Gd{ʩCƎNZ;X]kxm\kϯo x+G4/5pl/267e$'Ot*.9@aB)C!Q~~YF0'ȟo9&y$_,w ̝ ZkjU쎬+(S\]3m)| +8怼 &5ɿ!\X89eGlII=)ߛcX>2N14@#;:ؽFx:rף.}/.o"wv$?smS&" (hZ}6" ?GwO@)87=2y~ygw#%ƅkɱ >Qw,~-Ω!ѝ IVWFW |)))g:̜9! h({vx`|\/c[  _h Ze#< < n4\lo-:@}/^@ϒ'yr$K}rR/_'Y/-8@@ڱ"E(@tT$Q}οe3IRm?vecRSyNY^>6+'`$W?wK6^ A~H2VR;5Sz^c#X:X}#r񽵠CnL&~m_*-cuoFhDyz֍@#p&d3l' I~Pv|`??r;)CsOg?߿T ^f6/Yx?' 8 _f!K"{>]8=7Z.c:34uE>6&vrL W2N2X*~9k!we]~']@VBg_t$mHiZ7hF!7v@{9@#p-~?oW~Ov|O&G(dJHR 俳W]N3A !X`SG; _d'@]"F>H u3U[Y}(Φ[6*c_m돟Q9+ۚ8ƹo."!\x2X\dN{`)}wH);x6[w+{g]Fh>xǸW4O@:CPyz?071[ouAFJt)rW}b)1(' !|2_>H IH$qvV*Ƭݺ?v4Z˘W[}!MccJ:Pʹ @9^ՇM u^*y}O};{Dy+i[αm>ZoFx[tm^M#\D@y;s |R/+~;mj4) {%Ueȉ3߼?wkv0@ŏ>RQ̴A$zdK;Se<񉟥#!2_Ui3  Oʎl~HL:K*׺Z9~[oF|:pǨgxf}ρ]=&u`|)z?W{w!J3!Y5ղ *2} };>HuιL'`RWt \#>cjr0ޞM>3`CFIh??͔9RZoKo/ʼ[{.^(omSKڪ"yY\C0@扄0G9|ZAZgCGR,gPX )e.kJ{,ec>T7=&^9 GmklS[i̱L?3e7 ]o HhGÞD]eazgmF=#GF5s#\60 <N @37bA #Tc 'AcDE@b?j ͸Eeb(=F)Es0d$ES!vy_p2 cQHd=LyScOˬužVuA`s)<7V'h A2 y nLz䐋~;UUwmFhF}z@#pi@(2wɚ.u f eRߞe|$mS_}@bخ? H?LOB)ִWVQKsuWv>vNJ]U]g0S.DiH,:`_L-1(_+͢.|Xʅs'R}s̎xUU`ɣ6 ,&-[}D Hg[z)^WFhF"F@#ECpq|c$ }gcU龇c~?0o;xs¦u DDz@pC`{l&ICg;uenh|G<wixa*x 6Ol!x ,/}yNG|Ӈ8Fs[0&s( k9$4=E5@#<xy{Fx0I܏ CM*;;fYsRpG;O@3Bvx9/?tߎO%ujO2Ɍg"7]^=>~~!;Tv Qf;ؐ)=xwy)7h}fJN)WS:#̹Du$K$ۤXC%>eĿ+Yw%FFx*ݬmj}"K=2=Fxurq}@jt?#!! Y[ 9ԧStFD,p_-r8W0So !(NldX׮dHk2JџN$2Ďe\|/)y cε,|5 ޔ> ?tc{?ǚ!{Yղ}eKժ`;;HlqWvNҏN=(9imOq84@#ztFE5c-QJ:blߝ2DU`8BT$L ggeҎl9HK=sWrv@FqqߕvE~_V}l4f'+rW{_-v+x Mgdȷ8F~|[$]2g`󝨄2N[ k?r#^C GtbM}$ƾs2wEoe cx3;!ִK}et$ e82*z'ϴaW_ni횝6׺Z>Gg-Pwv|Cg('ivW̜Yג5MI0ĚZk:H*WRF*{Y}3:K*nstUοe N-xy X0 kYNۖI!=ё̳մ£>(taKH 9 +!^Hee'Eri }k1QY-|F{U`<.c Ӈzq\8> 2!ߺ蒐dȬK;dS\;6t9RegO0|O"yor0ERF'm|>ǯe#!cw0ia#Ǟ2=dE?&p|"_}h0H{6^ko? Y  \F!4;j"]=eI"CSg 58cgH0 $z+cԋN?;k |_`5gݤ:|.:t;$mRNݡնZo8;j~\"iW$ 4u1蛶NCէwJ%m%ϓJ2ͨ\"SGٙu-~ƻOGrշHTؐi\28 kddVBM`V:.9e6skP8&e9W;ka X;(#4!YTn@#4C m" y][\p~B?7v@ngF7Am;>$DҿH]ۢй!= QG(0sB *3o* CMo\D{S|WیzwiHL':r#n6{kS'k+>cui\dM5oAeCƽ9J7da l<6s%{Ux[ki{-F|knFc#4@ ǖr*RwX%rKϫ2怏k;I<^mP#ER 83r洵ԝ#iOI E&cӸ@wBE $`m>t`N鐯ڛLsBF/I#=-#zdlH̌tc?ߪ.5%)A3_e! ֖Gݐi<,9w?8)I&@#p>ߢ=Bu[)ɿdg?$&i%k}N;~[J^D9N{ڀ/s[}d1E2wҞT[ʶ/yo}S3ʪw(msJZ$wO 0 ~̯Gk^/ܥ"/aFkDgfՆ5s8.l5j׵4ϋ@tlw(8/\ߊ0ߊTCyxׯ?x{Gdu~i96Av?ğ?!ʖ?g7#?C3.Yk*WRu/5x|96ɐ~r)|YOQW[aeS?|'S_$w?O,&NאΞuVe{ݻVcM 6a}mG␝N@#4@. J킦ֵ<Nؒ}OćYR q.!,5p I~?/DOr_) ivg@CF,OɚTR6a]Niw*_ZSlu$'e<%>u{mGΏHqb+<:Ƽ~+ߔWUY:džS_I~l7~^p0I˺v~Fk&F&`GnK5Q$ʱ۠Uoڧ||hsoFhGOi j"2$kT. 3/1?o71,#.ܰ?YdgE HgcsQo)=s yw1EV?&胬V|c\ulN|DL}ڸ!Y]ioi/ -=㥍֑yIF79%3|Y2?ʙfdUps!/{ 0AAtFhC/u4@.3ϵ DCr^D KO@P;7}=2EtK:@V<@}ڽv0P_ϼHp/QmÜJ!y?}%~bO&jX첖W'lRIڦ.ط|dǶv4̓޽BLv9:𱍾GZIm Jo<%N)c;9[zڤnT9M/8Gr6ϋ@h G_t"fNyHߊ[q悇qo'ʏg!It!~/͐UHj`?ر@AniN_o*i/ƘkrCv꩙ed7mk{:zVxf6+r `[)rW7oK8R5$֔zw Bw c&=xdkY.Aֿe);eR?F'>1Nwu#43#gow.MQt1o2C*@IDAT Pbz/,w~0D>3 .B$<+yȿ&fQ!\˖D_]!)̯c/?zS|Ǹ!1.~*֒>^u{(V?}~6[uU:̙6#vAמq˚ӧHO$Gs;ّÝu Ib{pkOYMl)Si n\u7Fr-FqtquFx#]`WjEoS ڶ˗]/WΗU2F??1MI[wl?"м0/B6ֳsVbcӞ6!!mO ƴ>hc^X,5w{/}n'8@cz.ۣHVy^TsF9z_}%w^cI~Ty4L}ieH^;$sy g} $P:&k|vGܺhF C5Gov@jH)gWCپȚLe`_8~I?l\>yk]ؙ*!z/kG>zg%Vh}>/2/qg|8Y5wH;$e$6$n}͡r-D_r.=V#V[=Fx.:N38>5κ\K_c?'W)_"i21tve.DN-7U dʚBD $0P2mq\i/ zW\^31Zg&Q78!at$otG;FnuVjO2Cr?29eWŬ̱ȝq$6gɹN{ҏQ=_5u=K" U8L9So!ņjC_S[RֲhFA#墘 .ED P;{AbS>w,k Q^:Q$IK&k/ȴ ,p#e\W c!Q36QoRu_-_UT/w}ejo|R~?lRNIǧl.gNU=]gC }6I ]l! | )kc}lqbmZ:PGߖoD*}=~C'Dtpxt]^t#>8" 迍; yGGb>tg?` R2+M>D7(EJ۟v ȤUf緸L-YmZ{P~: |^l91M|u֕zHNi]~_5ھkd^:%O|=R&-j(ݖlFF:pG4@.&Uw΅u@@E*39AG' zܡJGTJHYl|v_^yb.vw &jygٷىqQHsT뫾_%VyZ^~x0 0ڞtkc}yf"!wL'Yd"m<Q[|ʾ;v7@#FFxp̅k}˴KU.}9ȌZT`5rH7οɿ| +ǣQ컐.C1FKHuƏ>#MC}g3mgOO=N9ws_׈="NV:Uё5Ӧ1nZy˶;4n~/5KwSu{p*35jr#4BoxjF9Sc.}ԜcKrw_δ'g16?"E>r' \qqsJIe ]1>vCeG_d}vH3805HCiJnc]EqOܫ})Lc:u3C$cӏ|r"sh|sP~s8wa3a2|LF$ k^ [r y^r~?om\s۴_#4"ŷ{o+D }=&^W=c2[1 - :z"O;Hw!$xlB<(616{V-;)wl(cSm_N?9ܒ^͙]r@e?fC@;35[SW[@#4o ٫i D` gFЅw?OArD$O _N7mnRJ[C{*8~n-<؛|'KҸ3. IAssbvJ2NH%)ǺcChJ;G;8PY:FhD/v4׃@.3iWDGrQi6yKMd_Cj[%U.A$2gX3>;i^sNUO}DIR.eGӮo+Ú>v2*߲qL՟9J9Þ}^?7A綰$P_7:>w2K ?v%If['HºIYÑv1Uc趍@#4O@8 ^`"Gmr$`KE.z$m>,7ȇj 3ּ~>B?/ P=P}vg.w;ԑS;qX2~c+s6񥼥_*c)}W1=Oݩ;}~ϩK"DjF "bɂضd@b,ꏥϼRMjKdH/ $rLK7j@ڐ^|!,06.v`oYy>q8nbػuaK2]곡3c2L@47Q]k=n3$,v5sR> |p~͛`wB'@9S=Omڶ~j8޹h3Kڹ'Y3߹O}%҂IIDkAh4nEf5Axt)s#٘P.⃌}siG|cۓ'}&V"QoxO}AYu@vHA y39?}guQ ͟#ȼ"a7K{$xfi1ƭ{63 s O7[UV_7m_*K̒s(=d_|uVΪW9SYR6n0#H{ n=&~V9u=N@#4c3h'HSszꑤ)=SWj˸HRCXzNEw#;H/K@\!S!2=rX9&s׺9"8% Rn:H?2UIg)Gؓ72C҂ qNw_:&6WAHu6N ':(Sew0?G w1ou¬t|kVZ6@#}:AϠh.]S.׺_}V^0Wq:Z^L-yҦM0ȊMDyXrI?Fh:뇠'4Ozqur\U&[Vyʇq@ "o%!?/SQ 1`M!eNZZҡ~͒ONˆBj{qkaG'U_u2m6/L,rЯ g>б)[ʞr%Գc`DK>%.1`.Zwh soCF}γ*3o|RS|n}-@Wu[Zz#ptZLϫhK碚bRmWuu9~$ ¤OBG?\c믝_Ȫ<|B+LԟmgOLf-LGT6w]^ҟ{*6v^T狽߅>vHMeu9K3: >I`Y?6WXK'oTAZ>]Q4@#\ѓikE \cͅprt>XmUSmrg\dw)2mlWd#黷KNT?ɴ9`Icc`cwڑe#uR=ii[%~gl5ۖĶڗ8oMNL` @"}Ϊ 't``icd0[17=XH%;2w.0~{9|q?-W=>jV9l{smV:"F[N'ܯCr?.z 2i*Cw.Ыdd"!OcvH~})y!A\Bj->)G?kDNsn t dmا_&"ߋS:)S>XFLKk_ɵs_H8k 0D/_r")ɟ:' i>*dcH#^'}\/3wh~3$;s?Mz;q\/կ%*3VcmU_RF%Wy/.|?羾sF"F@#.0N:WƯD%#u1DĝQx"kۘrq X̹5aONZ/tڭ2~Ty_Eߒcߓ?'H;9nG[Ӑߔj ,9cCҎ~Gv)肋ðm$wf@:wy -G=:|ZRvlI)kbO9{t$)j9xf߁g^3EF:B].s-諬'*39 $ Rw>*MErG-ܹ4P!neecXS8uUzH!w@(A-IS`媧.퐗fߞϞ=>tgPL;T 8s>c )XwHKIꆍ9xS$HfPs;]^~+8{ Sȿ ẽhG*IyW[k]7Rk 9i=@5F^ 3Z޳U{mJ| nRKȤ`ɿ&ZTv/=@;~}u I*xaL=i-Lm#eOI?׶6uնd>mO=ssI &6ɜ!̋%I~v{[# lz/4Q&|O|c 'w2?g{U뒙{t:5Ou~T[5#k>:=Fx!Yh..j6";}WB4LD&?w"se6ٿ$[oIBp=5Eu;2ZƑ;.w){*ױz?VjY媫[A!9)<5׀xQs;!tXmI|%A/#'@}_Gj# +O;#R~Qs|g'vL`ckiIJvi*9$zF:pH4]EpڬؑV=~l냋wŽꙕ yb_~ܩ+-ժ !õIF)Z^:Сnki%Se?L*dRJyҭrPD;آ#!$4Y7tOʼЩ;3tl:[$kWdYSJK;uW.RT2 K;rJҖO:N@#4y{Fh6ȅ3\P+$ݥ*yNu_L0 F菶yˇQg%Ӎ Tdj, INJ=j=dڦ|k=su/hUlӜ$ԅ:G*HB/C%qQv ϱcL7| `N>U@,vH`@]̄)NI_}הj;T_]4@#khFȅpz^˱^pSWѱ׋S1:}.$B'/pCAYDN9;BF_%i)ά/kn3 8F0p=TꓺlIFk9>k}lU>{ؑ'sKgK ^Ys1wVA+I!9'w`:_2dv@3Is.ZK;g~@rdMfFnKIcf5OvкE7`˖*ka캶QN_K9pmm!+:=G?O9_.ROse-}QSS۫[ < :Y$"_ ?d|T;~z̻?w;ѓLN=6H1>jdжU^QnD9!El' -yGO["i$JUB)ѕ񝤟:gV oǞG5ہ+6I8|BgtP`>ڃ}0To^{gy#YJ@yW@!=g$9N3H7iO7{/w*y'՟hzUO}WbOx!tgZ蹋Һ-.).)V Aȁ_&bP/^$'ev|:;}YGR1O=ڢCʰi6 [+@rɏi$ujY:ke1a,Lܜ@ rЈI9l'ĞY[z1֖_֐c*{cN:.;~ٿ$2əG:lrw sHdO?tR-m״]nF \S{5@#["VՖ9eƮ>i_e旋~&YAHCG9䟻< yL;::sJЗЙmZw~i@N `|U=>j߽I>9nؒj=RfdIu}>9I>Ko Μh*{얲N~([!/Iӧ7sJ"7ZN|Mb1CGƯNW.7@#l#m\4" ]:xi_nhe6zq]uڧD楾lz惈wg&u/X{L4jVbFsI+X׸}(@VrHt,ʭqj14ņ^t۪d?B |Kg*j C-Y1Ǧk_H-bb#pu$-^[u[:AhM dE xw}_HA>dHD_u繦m9f$V r R9fTFPF&ӾT=}W[̹цP:syAOB/'C'2zTI|nCҦfU9soeFw iNٺGSLJ`'Ws7ɔɐɟcsc\?޼;w_l?y`$B=[S.mwLE#4 :pjF1bu\,oٷڥnwa]Nj$"ٺ H0:l>9ֻ>09w)d#;Tc_z d`-me:P}⤾ŗCmȑ=p?ǐzDk]f*O=>C%y/|+ҁ߈'W]ek~m>y7?O=v`lԇV4YS_e]1VK]|/}Fx t%F_@u'Z]\PWa[b_/S^x*}.}\s# ŗy*Oz.l>(,LXBtH=8\*!Qʧ:6tlD}G2: ͏3 sJ^ 4Q)kQŇiت c.n%ְ]+ǖ<چLSLl*M$2AH" (Z`o'Pg5f= ]p^w6 y޺|nhMΕn˷ֵ4@#pƤ-OzS;ĴO}2fѱ |li!`?w4I//^Ȯj0D-C~"LW;IX̄-E~m7:Q)P_,W%= bl cm/Y9LJ z$>O IϺ^3ڍh|<+ϵQFIvJσc5aE7rYu5an퍈[7#| +24.9,/|ף<@΀W+}م`A͛ 2o&O5Kt$)zG|ʱ#WZz#418ƣKO\H<;# ὆ԧm.SFk9)I(`o x"c^}GDOE?H'Kg~^Fdkz LJq/@}X?+W#|!WyM>zdl<$kZ}._73ӵ|ݳ5O ꇼc>z$Yc[U{@#4/,ZRrnRײxp^s{i߃V_lۓ̉\0?sY Yo3 pPrFpj2SXjO&< h_M:3N":ZN:2dΪ;S=r &z0a=sˢ#[NMn椶CL98e1&nuiRĸ&{w)w.Bʯ"*$ۨȇ_uh;w0HV1HV=S}Z>mrdk9@#p?:p?u#4^ԋL.\XITEO @L@/H^ϒ&,i*.1S/, YGP_SVqDOG{'>j9Ǚc΀'qTObeե-=:R?Xmk4@#FZYNKG p򻋍&ݞ^w~3Dra$B#m5H AX rkeؒGx UKs1Oꃙ qbWw5W$>?ɱM]̵y 眳(S7߬/Li:. jY gIQsA*X|28q5O;nW?A;g%E¡c&qIGqߒWDT|<r-Fc-F#@p&{.mcCVcK-u2oY~_F3-]mّ~}x}ӝ7"o:wXϚRA=Hts1)r-&92{F=:{uFh1R.N_/c2a ;qq!cD+#"I&@8);6_ZW?F;5[٪Ösk@# ¢Fh:"hmo˖qjݖ[d۹;ŐC 0pב7I{V܅$MB2ؐ!0P88iu`)wGޕ7aW/Ŀڤw@vϜ>OpkV/W-c}Nm L5@r9%:8Vd. VUNSNLC 5*TsEh߱!W8y+aJ$~}`y}C5F_c2J;ԟ4@#twv@#<E0۫߳z~˞6UW/gD/q09  s>?ƄXD)iYl 'dZCʜG eF yq9Y87C9l2]B`zl51ΕI@] ]yK7QOeݘRT\ۨ>bR}ךLSIR{v׀W$$$")@</TP.+[s0m3 36tb.%>hFρFh\ eּs񜺵|6HG\d;DLuQd@|_{oE XCyBb]崕S]KtdM:UdTxNi/2!13P:@D̐i//s4M`Q{sR _-Oe|l#1O#9k.$G"3oN_=U3H' a'6`f_PG;To,,fYהnlF+かuчKFh{"; `7oFx \lƮO]d"~&[L2tг_ /tl$sI`⵱F@-uCz9JkTb5l P6iT[.@*:Wmu|l;ؒhel>ǿznd}{xCp⟺y[֍ <@ svn_ K?r~#R9fcXG=u~L/`+?z XW0V_I> {R(W}>@#4wCwëFz \Uwʖ:$)鑵U C:L2$S,^G]C4|ץF~v`\)=JwCG?[l39zdΙHue?P$6<#Y??:DAE޺$xyLl]eI0/3c/۞gu ߒͱ)c2^5 yg`AY3Oz왇1.J=ҤFh;";@#<7>u!/{ҦJX)/[S%/+! xRarOsJ5Ϛ[Nj1 d0`,;K'qQ42Ɍ>Pc=lIO";l&ìֽ#x縔7Q'}A4GFWJ׀]&1Y!+ cSo X0ܼG7k|>lLBr=Sj4ohF7oMFv`4s]s᝾W[YǁD@V\ ;@x_S'{HsNZ)(>L/rM%;0>pFn=1hQwfjwVu4~Yru<(‘2*unz{pF[?ȣ\$@_&u廾/z+֮yLϥ9pKlFh_t5z!sw/o??w|9~xm!֋wC$>N#'G#/IP(Hf)KP=$~me$}`/q`&k yXGỉy( g?ez3~[߅M}{6[t` 5@#L"ԅP.|j-}aI2@v~ O}.,E:;Mxŀ a#<?ܭk[;#d#Cƨ?҉W_$+>_YΩve^rxݤ_u*.9':y}]v1ূ_lT=w=usʬ2T'F+cD?ZW-k/89I r߂<ׄߖ}r#4!í[5@#pbzM޺ OR>sQ̺\d?+;/+|W7}x I]O.`^ɔ @\S?8JeHq@IDATU>UN~iAsTJnj~E~H?c0g,xcLX+Ce2?H`@;ER@eÞ'i gA9u[~Vj[˵}@#t:π^#XruP|Mirm=P ld!wWE /dۖ[s6ژ ? _.{${)O q0*yc'k]^߰Ex,EO>&!3ߓECȽ_?vwiyF2GkִڐS?ׄm [γjv|Y3bA{@S#4Eh?۹^rU2ޑm!''+/|D ]i!2ąw_%&"dRLV !۪@sDmB*>;t;EgnՇuJ|mGl)EݳߥmF9#|t{m@#\npCN]p@;Tf 03sk}$U3sx4(5lܙI~;H2OssZgM-Fcz}_Նα˱_( @a'YQ:_Cd &E~?~ A\ *mwO:""O7>~y`МStD?kG }=F`E+"]nF#p=WBK}:yDnLpI]od鐫_ǯҵAnLF?OB\|Yd LUFB!w˘OƇ~hi-y) 9NHd2;ng|lUc]%Gx%]s3??80@px`}6o77fC7yͤj.Gc՞@#rQ.x^mU_R&aa$?Hɿ$^/4i$Abn璌d,%!N~^b,#>"<@K: H9ι.\S@Ǖ@s飞5pT֜xGC}s v(({ 6S;*Y9\rjZCA;h5!-{EߓHJN{"@%>DADh }ͷ)D+f6 O2D݄?l2CwlQ=:/(xT3P{:?] $Α̹_UH>لmx@y&Y<.I%I1\toc7@#p]lOj:)MTGB6!*y w"C5t}Q)6c].FϊCȐ}5q{#qC=)9"%@ , "b[·Iwshl?0vsן z}@s;<\tNe# g^ F/F-{lI~JZOO.'w'!;<g%'=> 5^E \e|uu28I3z0H r~б9g;y?l's_#y`ȑY_˚s<"lМG甫~ կ[o ս @vz>{t`7@#L.zruATۜd]\A%R1Ӹʝ[wCG;ɿH /Vs  ܡkK z6w eRGh.\&@()r]yEzɚBB&ؼsBk`q[}[k}"EV60'ql9чO_t=<#/$ y!f@m |Cr_7"ɚk͑G@}ǼV5R{Ms\mZW#4WI^FrMlDnHWtrDi5 Jٺג mr_$iyw(I2ٗ`H-AH/Wvd挡N-}bn#UW @<; [u`xN@ނyp`8>WkWnu?֎!g%r hFC4@#"/VS*6>9E:/p@I@v|AJ]i„_qy^g]һ;Αw-t\}.vw@#4@h\\oڑOPP/$wYG=$}Y9Fɤ$3z:-u=HM UU?{[`̸r@ 9ts c?"@鄰:gcs7|_ɐ s~9ƁϬ߷*_kqv0-εֲhFa=5@#Bp_mU 0[q%"a⮿3_eu 9yW &mA&k#x8p">ן ι[;ώ\(%:?A![Y_sT<ׯMI=Й7}wu[(|>WZoF=ԩhF\p^ڣ23!Ň 0y&!Wk2RHkk%kG/;&YRbg@^X{l/@#qp`Bn=6ɐ}gtȿiH>d~H>fyQwfG: {?k^>j.J7[269Qǧe#4"ų{΅KG%(㤯UwOF$C;"+d'_FOXI;L]S:O9ֵSi32>Ɛj;Hl3iH(;ӟ=13~_J hOs9X#I>ul؝bğ`e1 r@ $/ !~}3g;b[%۲a rkhFtu+@/ ;"6~Z_;> <^Gۙ!*H[$ayڿ`LGWB#Եy6 cT6^\M5+rV<3%=QIGr U'Y,3H @أ;s"O2Xz%О~H¿fvoF;3Kgk_:zRw]QZC#OGdUO#pUUp Z|w"/Dd>@MԀ7[Mȿ^f(hء[d`~e}9bK%Q7[~i:1>#ɚjfi)C9NH HϝEG[?:}&sn{a^yG漷ιsY?r_p=RX2_>LKoې.C}sD?~{ܷIU-T]|"6-Fxt9'6.,?GdZ6 !;YYl~M#o"=äE=x9H.> !9?ƅث=~?2]ܳ*k}ի9]$ CcuL}-?Dy\zV@ кI#ZzۖϞtay'{O܉e[5//ʗj"m O_t0ybwkx.i1@@8ozp`9Ir@8:O|Ɏ-:R,Ǧcu8kUXS?39L}|p`uoþe!EV^h@^=|ws'<ϋ~(N@ uC̿Hȿw_}oS"ib,>@ڭpI$k$#sݿJd|y%W~UrzlIզc#MyˢǖRmq@s.: u3ש65U;:ifxpyg^\#y<rx#tύ@#p seƊOy+KHMeg!1y?|YZ%}$TRR9OTҎӷWSճ>?sd} ѯ/;>*siS8>φ ].Gc'YI=d߄Xǽ2d|dZks$e?y{ݱ>/>Uڨԧ|JT?]4sC>'~BKj,|WOI}$ ^) o ; &ddfDyQ;fЬ 硏AN u֓;)gN0s 2z؟dt.?GeG І]#Y:]2uRzw-1+{,sb49s_CCuj}[9%k-_6BB(|yk7MlVq:ᎿI|}_I~_G:98mLgwnKVC:/*W=S~L?!pտs7xty^E#4Wi.Z>SOdž!b(Sݻ_@7A_(jtXV\̎lp]\S!&Z˿nO>yֿ.HSWT}VI5Zw_=}/1o/[r+޲hF6I[Fh@.+QQ_j [ID'm/ .PU3kL/dhYl!>4NNwk)ªig" $HbWl{M#/;>Zo}d#y?9IU`k7dIm:>#i=z}u$be:'ٷ.Hpʎ*OL5N-#i#~duثDWOYVʫm{[mz#4/34D vՅZ6U1S$-x@ȝHkeHbɜʼ}Q~{OyM[dY8EyYa5P^X9?R0VvM)xr%㯉'NZSȿs~Ȗ9$KdLoS.zdsʏ8[zIZNK$>I'e䖭ַ4@#@qik#4#!{QFKv<pߴƯ@?[@_eE<`9tƣ|7:Ow <渮j-'tTR]s/SM?EGr"CұJYIwwhCIGL ' 9t+2V9*V[ԭ_ۥ}dm[ְ<+hF@-3f_O CYXA|~CPuVWۣDy9.m{0 1j_Bgrݚ~tr%ѹб.??v29/y̬l_#e"{KyKn٘.?nFh^*xG4@L7-&z"!$"EWɯ"ܙg!_ɗXօһ)zEmڨ/==E ]}ʹoc'INԇݶAyDsd3?{]o{ʖ-ko-{I9YnjӶFh^x G4 Ey9S:W^}J֥2 Wh??RB79U Rcӱ {Tآŧi= ~&vDw!@ҏvy,Ƕ! 7Nj%=fbk-=K%7c*u[Ϲz#4/#nFJ fE2KI;քgR'E;Ɛ7jGF[L|߽`83`s~Ć̱~?'}?ɐ| wdyDiQOI2m}Ojk}ʑF?'oHrUm۲67@#BhhF z%k)>2m2}2$Ol/nOzw$y7w><8}GYgmVS'|ʼnA_u.>*d*s@?Z~JRwߔĹ~mK?eu/]h@^7@#pp_LڢT, }Iؔ!ݟ?ʐTsN<xڙ gOȓ~Й6^3! Bw%~aCx@gغAm+ Q>'K!в&!ι)cn[$}V=cl|ӦʽէFhc:pGFh\Wr3\+>)8w&"g g呀_!U!;|BeʗHL{6ƘuI5$CMUcA@~ƹ@?ۋ1@!8W[-oXkSFh1]jS y$^'N~B |AKV9$V\%mH1OD>o:ep@:ʽ$#ʪG>2A;,׶c2Ďu i]smvpwcpk9%Hh/>ټ__7W9rȿ9vH=2>HYw~%:VmQ>WV߱;5nsc?qzFR:p)R4@#pyBl-=6dMԛ80@A6) ol'_Rw?uy_~EoTOv`[deTsk2< d7[AӘOo%H!嗠{dTα sԭw$3K.}E}%z|J1YmWKNYr#poc}6@hF` \]\ʱG։`[6H(2;~(y M* /jYmGl!RFDοlH ɼzT]_h`@C7/_I:E΍l|Q_e.PRN ev^s+_'2K'u~.ijuN{Ӯe#4i:pmFKB+@]|J[mKVD[!Q˖Y 4ğcnOY6t ;}҃lcܯl~7s~sOR%51cf#W?}8F?A#?ֆuHtwI__ʧd[uʿSVZf[un{>{}Fh>6]4@#pA_p^v=dѿIГNԉC?//zA~OR/ǓcLO'KYCb$ɡYuMC!$'$mߺg?o鏝%3>ctPy~گsSXe;G5@##}lhFRwJZ J B:BsW<λL!I̕!hq!?Z*ِ \8|;kZ230v}͗>h~\\_'9SGy86Ԡ<>#R-ҷ{=՞)YV}uNke߲퍹ekF<{gXwC"DjF3wZ2m5XDPk??ȼ0p*˝yyp|*QP3~ɴUOy}q1c5QTn .Z_(wP'N^k<5Qs%']~0]3u>^k9~|_]=omjC']]}I{>{scz#4p4@#U_ﮜr$mW>ױ!U" __e~*ׯ@298E?DJ=H+pȩ C̚$C=5a9 }_699+Ӧvwՙ6O-oH~?'k|Zs{^7 ǟihv_~AS‹~=23\LBg>Ac/QʟGʯ Iv޶/w),?AgK~j$+kv)^qڪT)3zl9@ywBP9d?2As$mΕYÞ%ugSFJ}2\Wsdq~wn]O}w>]:Fh^,\mСd&K9/|m|y滈:/_y' ]~47~cVym{?OIR6dsb 8W?1fn4@#W8uUGfI $  `w_x%CO0K-"o<~r!!&3Rl< ;D쵩]N9wԲb!vҙk^R%&Q{j=s~JֺUL؇e沞.^mW?@ !C}4@#\5\Bm-gmqd?$B7C\~ȿI|!n|?W 3l;Oe*3/;k> }g$MևM4נuz 4/UWQv@,mOͩFh6.mmFx@.r"5!"Ѿs/GL@*d27~Q}oE!sO?]өV:pG4@#p|\Z;sI.k k|eϯ.;H>/TR  @GX䟗z@P t0C> <ȹ;*'F$+ wCXɿr\J5#gkZ[)[dV]cϼ95@#S;b=Fh[@*. /#O2ٿ4r?;xKB?DJwsk]sE5Ÿ Xuʧנ1cCC\,U G2Z$c^e|U\}E'U[-o鱝[uՆNsV~߹ݷ\{ڣl\=8OQ^8UTKIy9n5V? Q?u'I;}_o>({ ޒ L['srF7iƇyYv +_2^?Pg?d߁Ia]Nҿഒ}z~%Kd?~,eZ=Ҙmjzc#+~}jC{=DAo@#p92ݕN#{cߒY' N2ov2C??y$/BˁKS~+D | /?)xCf qNO Ov%P;326{fb. 韲BwstCW9Rv"/i)o{$FDVlsׯWuh>@g4 9=Fh pT~ɞoL_Iul3B{jH8/s? *2Կ ?yK7"dx&U^JC5k\ ]U3pTv)o;"MQw?*3u?z%TiƉm~N空cϿSTzԇB}~F8FhFI!wqeo-zR.s>x?ZLH;?6\"bd-_/)W}KV[7g~'!Fh{ȍ@#4D've-葱!{wME@K`?vx[?kW W?.{>~3$AuLtgl?lZя:<0$}_}Ay! WOGgN!)6ϿQS46껶Yc#ǖWK|b{y?D_G#|7O~8 b>>og?/Mߔ_,M# 0 ?sQ53Q# Fp@BBuonvx@ ^;DP!)1]~ *.vI[zM[skCFh@qz0/bDFX^TMl_w;?!{ףv' b]$g 02dXt]cO</|Ue}G{'ybm@IDAT1~K%>y/k e>?{g[5})@^}k޿s&KY1qa}V4#_ywOM@qW{" " ! u%Nb=Hyޚ"T.;}vW9@!S2lԵջ)|\_q᱀^wD k"i<ażAc!QX&p'o?WOZڅmt/Ff $Rሿe?8+#_D`6 ~HZ~faˏx`S30pwJ:texõey > ~Ria&<# L _^{ t+t|xo*>ypvYq'+-+yV|h mPU" " 'M pZXK3?Lpblߋ),PKx GB)NwoemN_x7 txtS`]~8rQlOa\V|p}F8/=6>]oVw:D;ק'B@<))" "Mc2Lac0`Ng=R3X~@W7TO|3 \`~ڿ)Q,t,dKct|v|?40hpu,3nk >+lq8{//C?7Lp^x+g~^>d䋀  S,[-'E]L_2 [0/0Su 3v+>,Lf0e?\}lN]V+@w#LwcX5Ow|0t~AqeaqOcyøp^*yow;Ga+m}}zdSQX,sTO" M AwoY>χm kS&N`I_b{|S|߶˗f3r8F_FepߕEޛ|ʿħYyq]N,|궰iv_շ:Y*y,d4䋀E`>wk55|;7Znʿwp=ܺ{&|l.6cW~̚^|7u54Fte6'\Bҗ NQ_?Pf,t}bB+y.3GeO_Vkr4˛N˻-q0CQ\YG-_V2W>N2O*'Զt ]{"GD@D|@JHQ)(0PQuS]FGy~{zpo3d)~zޕ }gPkT!v~:/f|bD`|._w20uo,މ:t72øtY]a\L|YzL[+" " ed(#t "tT0;EQuF%.sy9cʣŸe 0e>0oS՗)7F>w=\L{Å}0*@aY.Lҗ)ܧ6øga\:̽9dU)_%(2 &{%…2l.}oSY_ (?fxeU:*! '7TQܛ3<0g87V-p|'oYia0) xg-O]V\:O}U4% @,1MN!@a.`?8PG8G-{ F7L.op(Q-L1 3;AQM_ЛN|^+c4fqEf~|p_OV**E@D@ [Y^f#Ss3P4{/oJ=~Z>LOQC5˩l_G2?8 ?`Ў(K__%.o{ O W<'w*2)E@D@fJƁ,Ct[`<.(sr(~Vŷ&/3X>FQYA+,3LKܽ%N^Wַ]S͇Q 2ařOy 'gƗ*+c飔:䋀(dʊX,iw- `o6 vtG P䛲oK\_@<8;/A e ~'ť:WgͺnReʫr" " "& @EE|<(V媧]P! ;2~<_b eyh p錰{tTzN.u ?Tye•|v3Y &2 s}rf]vԝ,?+ :ՍZGYF:Y&Uh;c(;ZGmϿ!9ID@D` }ΌJˢk ۰}woa݋`ڞ#" "0N)^Υya#-?lsSq>>}}"_F0ҫ NSʭ՛Ņ񄳜8"˔UVq"52tH+U P0~ׯaP2e*JO#=⢥&Vg屺WP" " "0% eɕ8e\ }>lx!W}QaY SrIqvLؼh#V0 e w]˗4a_޿>+nv 0^=!2c;ez +$ wd+&;wL4|xc00es~A[ /uw<.'| 0c gg9 <¸ôtgmĔQ^DFN@?!'" " [F,;yS9ezJ+%`S.;z\O|oFɗʿo;0pd''ǐ` . #00 Be|?g԰ezT^D@D@B@<))" "0Q ?),3yg;.)K Ni6#@,:GS)Y|op/wapfc@isP bmiiwc=|xΗfy|k,E@DOa45-NL ~j_D@D`b>&3ޔ``ϙxqdd=xS8zP=,R}.SPCp0O3-U`pbߕ=0xkw=%l.OɻE~FQ)kG" " "52tH@iv#@gbd (`* al NNop ]~p36dj~Eߔ~SA]eę2v_ůSJ#" " } @dh M I7t?8;'(;#^vwhZ@f Fś1 vF'r1@>fffYgp}/ [*>ypꖫӖʈ@ ŧ"D@D@JЌ /<8Kx#{ {#Fh_l#yMǘakƷGx!e[0c"SWG-ow]~w]we+]D`|dk$" "c(( y7 `)(N^%+,Yedw' ̀lȏ2$K,\>L|A }[X?P9r9CS~'߷oaWQ8L'řo'[^" " " YMD@D`MXghuWmN @ waą67c1߆kwx a,K]@Xʌ3|?+)-tq8] =}߲8-KY/Y./>+D@ww 0G D@D@@ =:{300č/pJBFb @wiK} ~E67Xk?,I?a ~&@ѧ/gHY,%̷O\䋀' @}v*)" "0P>@ dQC:E FÑvgjRg@O`1\~ k0_{7ȿ]/E3' /3?F9K *ND`z [07xzX 0VjLD@DPO'F2u3.?)KXd۽W1c0PEs'LOҏ}.?g wy b ͛r ECY}e~@dhj1q8D8cok[ww첏½N;;H0J/f-,iY\3^MwJx'ߏcp2 ~ pE,[W,y| &gG@تf)#T,w(x>lv_L#NG1ߍcXSޗ8E|^nO7)L{W?JRw%n? ~?gd`9JO/ϔ*~Va\ȃ_Y%o7pV!" O@FP"P#2]&b^IGv |;]8e~_ Lgy?)m# `{f(~LNa=}jU7\TɓUNq" " "0Md9c}܌=puW FHRQMӳb=Pa\ lf2>w/3%l@GGwFSs.?TC埰cE? ]CE|T~+|yU6LSXDmG$ yVTD@DU>4벾G<ʇeu/" " "pc @M6qaذq0*Yw=|6w9b.}PC? S+){⹼` G,^wqY):#+ ˓7+(~tK- E_dYOC@,ߍ04i?gU\2;#B8܇y {aw~(x@3Pҏ?L? Z |G_g|k8|A<"X8W͋ێʉtor$D"o2I}U@잶<R(',a?y 0 ҙ@aK˄@fʅe YGa~3h݊D v>$E￉%H3'%z|9p)Yġܛ?H77 |=>9'^޹Řo·Y<楗ŏZ~L@7r" PrM@~V܄S" 3J!S~47>R}`v_"{\ػN+4+XRg Hx^r|][u|2soqκ,L-)bԭ" " "0dŧ>"Bj|Oa`ʿ?qy^\2oəfyZ\[za.})," " "ZE@D@*~'o@[6(^^( ˅+*ȅ ,OYaK/opI/[@! TWn\}\#u-+tk=-xeaMз4z,˅ tʓ/k8KK}bO/gNMYyc*ۊķ"ηmۮcS1$:X$@H,RôřvV'2Yqakxv,OVZV/" " ".E@D@:J% )VƧ(_EI:ö7Y,gEᰌ՛[ڰ/J )," " "O@xf*!" "0%P6MRVzY\na|\&o:- Ya,>/cy88K/" " ".E@D@:N%Ք,QM ˅t,.J6,O) [~N/ Ӹ7/K*," " "O@xf*!" "0ePݽtSXlѽYU ?pMK a} S>/NY\藥yG@zTJjoJ\@!mbU|{v^toy,l\봴t|xoa0LYO ]X6SVUL~{&%|jeoUf_l|~#D Id[ " "  YNϻh,\$MI}O=L[m[;E@D`\]+`\rC@:TFD@D`f B0L0,< l;#[8/j6>헥^D@D@D |*" " L924FY?}L!a]/g[0-+͗f݋ r*0= SyѽM\}C&y´pY:'" " "PN@rF!" " oLteeY#(0-+7,=_" "6~wʊ4"e2tH606cX|UL})Ng:e-/+S^TD@D@D@ PH9D@D@D @̚O%۽I[cYY9 ӹ]:-}Oެp^,I7~'ѾI#@?`%Noه[' Ӳ>-a\2i淴t\?jՓO*yB||eϰw]-,ϧJ ! E@D@D`|Dx.'_UOZYiYqV(ҋҪS.kE@D`ݲ`k30BF@=#" "0>XV|Lða>KøUˇrm0@dhja(Y q^ۙFgq" " " " " 5,QFEDn(]ξķOh4|GWVZ|.++wmveG"'Ч%Y=yaX 3QLNwF⦛z'" " " " " dg" EBլT`*wB?cPD@D@D@D@D]2W7@@U`_n?qO҉t"ID` `1/]t/NX|ŷ@"zie|kh7G|~^\ësND@D@D@D@D@f@Aa' @ 0:C " " " " " " ' @ 0:C " " " " "0gMiխ)# =PuGD@D@D@D@D@D@,* ~ɽ[p4qUVIM%p$c"ߨ l5*Zūg@ǾKvZ|=_ze&j7l&N4Olfk]^D@&G`3w&Sg2Iv!h>>yԣ:#S 'o)|ӟNk2,]!?(뮻nr=$|kW!k=YaYMD@Z!p']wuSǿ뉭2W@-V yQ 0Э +ܶ_D!o ƂY@}w^N?!JTF?-\T#,-`Yg]kFk;[~M5\g-4P[Uۯ*g^uZ|(wz`AzUۘXcw]Gwth},Ng>\}ՍĴd 0VZq)Co髲q}kUWMy_ظ# =sXD.+_J+sŋ'gqFT?[o? 2wk뽏FSH@F)|RgЙG!AD@D>p@J0~řJe'f8]#Pw=I#" I@{LsUD@zL?qr'6Cy(Ci$q4/@?hߋ=P#" SF@K쁪;" &}.?j'iG<"1ДsnhN<\_$L$}=4`Z%";L>[{\{UW]U2@psH"DP=<$ |͋9.nHn 1E卝O] 9 lpȆdN6x㩜ɀQ碋.׍7Zwsq&l0-w&^z̘馛і ,wj%[lEk%T{|WmGr +x… 8\y5W@D@@Er 'D=/eXdW^oओNJ%J]b7ܟr)wK)Jvm<H~Fd yÄ) /Ҏ7MU (/y+odI$|+6lT1 yGq8& (E%}cakFY1t |(ID`[>N3Z[3v*^W%gu֨|0 ׿u$e կz+Ho /}i׼&YuUVYFg=YS˴V[%s0;y!ucGyva}{W"cH}/9kc,(ϵ6$lҷƈQ9/mﭜ7q(PD[n?c= cN&f7}Ę[&{_%_D@D]2W@);̏,f 2>Q kf x/(~֍6O]CM>: ˰LC񆅷m Fp\rI p'ds'-1t17+_W3A挻;ӒE?XԤcfB71;"M#8"XQNtXu$;c7a5ٖh@;_ʨD@D`j 0:/|!`r8Sb*iz.9vRя~\ve:b׾?ENp"J= N%x`cʿ{ҍ˜u,dѤomoNXФ*2df7Mɮ|o\O ,|hvocAYm:0%t(wH> 6?OO}SU |8S/دbM0qO>/ `KfOFrL=F9u4MmQ] (U)[gφ~{Qg](&{wy21 ˸?O1blw q:f?m5VFq(;sj#"@нg"D@ffB!`0ؕ]9+V@b]3ptGq@zF1yyFw/{vM4z'e{rY!c9>_G?xo80tAik9I(knqh -U$K5^V%M°(OqsS?ZJ#(f; ;s%,c}#eRVK;{vLFH8dtL23ٰ3.]tQO~26I>_e|c ,Qp_d26ve=6Րgm4#+lDh.-Ӗ+O:[rU7-O}v&?K@ ǧ&E@zMફ`pFqnWXΛuеoF5?ot5T}C#Ug*ȍ6cºeQl‡!`;=J[R/N8 ;묳O0cU /˓?um'lٺ0j7dͣ='K|Xg)[=n\BAĨ3j%8<Iؑ}aak3MW\qńR=5LG>S~adiTp?S'< ˽;U\ q Nx_豁u/8 u{$@]*'" =YD@}Wg<>+JSkӮ ؙ.}S©(R,qqĔʻ{-P!Ƒf;`T-jnoh_*z~eh2{6{MP\yw89ZYyXc5d6FK(>f~l XeYI;6SO=32d= ,2Ӏ 1{5`);#S@E4ޛi1DJיS" "0>^p /H-Z<1m@i\ve93lp%lML¼i\~e'/8bСqq~vv%GqW2UsQG%({U6 UDò0vm*Ywu g$8[i}}q'>=c>IZTeY̊5`]ͳڬ2O࣏>^25{g2񾣀bPo̐8J7Ϥ<6b, G@تf`4CW 0 ̴dag9ǎr0 H9Nuj@J+رXP:cb|׾sNXnRF ~6aAC}quk:@IDAT_5N;a:}bF Ϝ $o~srL0}8Ć00r,^+yQĎ"bs22l]-*ϱ}{ak,yW[m5?!m2{榛n9{_2;ӄޡ!P@%@@ " P>яF2{H/R&S:FKJZ&lpCqL'Gn&-R{W}fZp8M^@2roQ^xSObRɬg7v$:vfqZ3(/!? 6b2CKK^9[(lANY{.#[}ғ21[߶@нg"Z$Pbz 0-X;x(hV]10jz7QP ´pHh^=Y1,XLoy[F 7ܰPjԧ>+`vXV8Qf04j^:u}~_<ǚSg@]e]Fa{3"[M@ ]>q2,|M>Z(//'@1dCYe(TW>OI2f(,H3/z:2׮壛Q2xY; QQn֖oDwɦcAQ|(կ򌮲Vg$=3yS24p0՛&(x{Č F6 oFUFe0b d@"#K 0dq4埶#{1`dϏj1G!D@DSd0" F%ckQ`gc45QBeکV9~^GeiΡBZݬ<s{;ШjO ٳvq: 4K?^җۄ;ԏN+=6XOc\kށXR'?ɾF-fDMdԋN QeY{Jh pT-" "Fo?O-_]eF9;)vbB _N&8㲒 ؽypLnB}5AUДl6nCf|mqT]f&9}:Nuq72a4b& 'L^E@D@! @;\U$ǣ7Cz _">cxl 1G\e^ģ$: 3(P9=H4 icLu[4iO{ڜu_q1}^Fe`=}ٲW,?fb@7 "Jv(N%ME"hwYmh_Tli%\pAh52V JSmݼ87(DlHWuv&g:pzA[gu:c!̂{{FcÿH60pXTჱl:'Q0(}ۘ.]gC4#*Ϧ /udF1G]z҉+2* 310;s-;`FwerUWEK,}}>,4DtK1전oI"Df똾Zw'\UGꎝM*G}tmir+M%1*U30 1(udj bvirc)1ry晭zQg`c+D@D@D dQQ\o P&I>n)'>]GjmYuUv&q(x4\66;b mŪ-D50,XGu]gU=/8"fČu u5z!+N:餬>S~? 7Xffnf_\u4EBgvs|[g}H,ӡloLQ꫓MlĕQJSo,F~ٌ-Wgʖu_@3M"֙Mk@1c5zQ?,/L#>B@VD@`z~=PX7i2Lf2 `S(쵀m54k LXp#7krx,SVbJsSF1cT~fft)kO۩ wvc`ED@D`h=LuED`rE+bvnˣb? nٺ̹qe]!#9M*M%? PF1<ug8fĻPPg qrľkr)abCi0abC':UXD@D`z0=R=Ϗ~j}fGQh\Mo[;^pm0|Υ袋q:{PW1gj~>T=}bcfs`H{\(]D@Dd3" 'p!$(}u(l:v=DwQh {;iIEWo[*8*UgĻH{L6l"=3blvrEqmnbQ=" " ' 䟁$1#<=H_h~lŌuWeY.ߐICrFo欤8-ە>V(,-h5wƗ:Q#l.jth5Qq˪^&z\bFi?v-/.>[[8Ve2#ftM:`Who9lWMMOXpmE10ůh$4A؍(T6ž,a;35.1PDcG-›׾UnrH<Wuux`c)Ncl:_D@D`z O4VzJ Ig?xZ\@"+S@2ֶ_*zo 6+eb^}/7Q[o=~1yWdNU^wqǜUnY{\E$@G!FMU@1=eAXh{QGەd6eʎurvG.*4k9 "1wB\^fpgbS/ 5d_XM2s|>N563p2 (1kcG~ـ2E'1qvaS#Ym_r%'T-ҧxVg}vn=Y D;$Sf8d!/.B=62#Gv<?cm֎|eYߠYqH}`O%&p''tRtM7t8]Fc9&j4((U_uUM64(@0t`426V,ߡ16v[ir@7#FnT)Mb@9p *ﻡ/uYyX6J_n2}ncHס{! <^4ʚJ`-JK_#ݢ+.(s;2* #c0ݐ%13*>ď=*Yvm=XElɩr䮻/(1C83(z,˥T9DZY=p9A!"PJoNJ1)CЃ$C _}uN,n-K ?LPMsu q^ӎjQ}{_P7h#?MQ";`Lvi7}D̓8cϫ3 aS/o?|c\sMUyW*3t]W.J-2VoE@j˓/}Kѥtmv1yLtU ~WHb z^;asiU?ÓXŘz19s:wߣUS絛h{ͺI .އ!Ͱ=f9s׾S45fZ~MR>詹^{yŋitC,b DbUK~XwYg%7|sl( d%bxʌD:bϋw"%c:m qn7}_Gx`Y]_}Ԡh??҈=ΐj,+w}̶`#G )z D=:=YD`JLboLq7%}so8QYkϨ.W=)S"}_\{SN#ykg?^a1KEK0h2Y"tU6H3mbtubSޭt[EU0 1_:c=x6H~Q/>dgˆ]è?ƍ&g|Em*'6P"P@궠r" "C ђ\0uǙckNt:>l?EFW?-.2\Z.FwvxGw}M ֐Meg>Or4q4;>XФs`(kʁ}#ΡE90@Eurnk|k?Fd5_GiC(=#a4ʼn*^xau޲Q7ʁAU]l;ys5xEA騣GUDV3I8pcP?Jv@=AQ 0qcy)mý;?w]YeBbvmԉь?vo #׼[[hiuFӊwirg 1u`f ɪby`8mU@LAfN!vio]{,e%M6ez&yS7,)9jdID@G?qΦn]t($guVh13J+7I<̑g)(\({~Tg\f)Pԧ&'tRr''7|slU1215zWA9*<6fMd<3da;/+)7fC3+sJvbfdՓ &QivK~'~z%M8lR*]i%,XDTdXbD@f?鄋cXGFM+L}⋓s=7o=*?Kαv(FI/fY 1u[^LȄ O~e F;8C(oj8?,4w߱`zz""0>r&磺ˎi;SE Ai ?:d5jSl[OyF( \M ̘y:ks8PY_ ڦC)CPvfDI[d6Pcou 3f–֖]bw{[ *goj0$''" "0d^D@D63L2 iv{(F!{< /(6,j.32vYgyqva,Badͥ~,B%6 YW鿟,Yx/;ÜٻLw\0L/E@D@ \+$}.9좩VKtF*3T" "04jCD@D@D@D@D@D@D2U@;>wy*ͱbMz>v [vv&2LT_f@]ķOh4|GWVZ|.++g}(]F@=#?ʾ_M4NX|ŷ]ϲTU4K@fy6Gwk6$5oJ|ŷ]֮]]N@?A?|']Bɧ;[Fht_YeC"%2tiHAY]lEwޘoW|%nzEd듓"}?x o'KcB62"X62>̙)% @GX}>qqo{z_m@mjX7%IIJގ+7=QwTŷϨ;*[,e[t荨0%R"2QL A" " " " " " "PD@":J)! 7o^K.-LWL@r(ZD@D@D@D@D@D@ 4! @E4`"" " " " " " 9dh&2LT_D@D@D@D@D@D@D œxET(;vҝ.]I?ŷP|}~+h}ݧE`4`՚@ 4z5>d. zD@D@D@D@D@D@D`0Y]@5KЛ$D@D@D@D@D@D@D 24AQuL-YSYul ,ީs" " " " " "P@@}%MG:;ҏ VD ?.]ZTLi" "0䕯|ex}r-w+@ 'E@D@D8s_Q4f," $qV[B@YySϬSt;L.#[o=! ɒ%VZ)Yy啓>ɚkZll>n,a{<$lɂ *[}̃LF1EWD@<"@dhj0.u]~/odYꫯl O{Ӽa`JI/!)ob,|cF2>kpw?k+)ȏo6K(q)$LlLIq/_|G{"e|G]E@$ @4UW_|M~%w^# 5\H[o]v%c=2ί{x~zTG< +<\ΊVD@D``2 2mOz#t=OF*`N8!9ꨣO<1~.K/k7N^%O*S %SC+HEQzϲCլs-\09 A3s7xGYg"+" "C@0i$z;.9CK/]CH:%/yI׼&Y{;!OG@UWfx{」_2,mhUgYvwNַvF鰱v_+,"O<F櫎;RAz_jg8+)u-آғYa~@ bh)1ѓ .=`9‘G 3SnP&M VbJ弪R~&7tStWmA^э@oľSSN97}G wVDfvH&hŋ?܏z 8*8bk_6Dg=-JjSc*n&P"2Y$,ʘwu7" ",,O& f`ox?Og!뮻~T"0;Gqu6d$L3bt= V11yYeL+ԔK4KOC@7&B V1G)_klX]{ wƺ__Ц8f`XqSLF]?QK" 5 YaGyc;_wygr'rKqE- YDV"0u4Ί O1# [#!*wUE@D@ PG" _ג}CɊͺM74ycb?p_W`::~'XgO(:m+1WD@'ַ j%Oӓ<) #iL10uQD{'a$dMg?~>;9餓1Nm6+#Y%; 'TgzcCUܙ{2lV=ʻfQE@ @TU~~?+&[m՜(?a녫Lg4ouÔySp8{p422e1JF:Scvm 'MX[4,T0!jVF%p饗&o{ۢ YzVg<Ïƨ ?ܛ boXBF7`o`BF3x@YVLUG$+B5QivjW&] NT#@;dhjV 0׾6/'"v s fg,.袋 ./W`:3뀑5\3a3 7jHs+_LEyQ̮ ΰ }d]y=g BT񴛔i9k[A-k/K#6\d7(~>d>φÕ=߶G!" H?/~)uݶn%/Ju0Ue{\@#ChؾmvZ_*o~:{3΍Δ*C|w'M>:o'KD2.a+ƱT%v9&0a,7iñ]?3Έlr-ƚ751jPP8c)BvwuWxWsJ(j#ao5seA{8W"n Ckm;VZ?%vmE/I|&.o+[)y~*y-qV/${yQa~aB3b`R1U0fǨW3jvJ^yEH>+S/QdYc(bcM<Gu7ajmfɛdv'>O>{7mѤ|]v*uȟUߨLŹ&?Ksk9#ʵnuns+Ljoqەc Mمl2E"4~{|g:(_r"Y(YqP(U6˪O|b>$FCP7i{7<裇l"f2ݗ:+9F#<+ܯ~wiqtC9e)"7pAi3F7l6ﰝHwc[h VO G`6f1w/֨`ScC~cCmzk SI|+ӱmgg o܃·~?Lnj?ԥTTR=KJwE\ƥ1"H#uk]2k\"jj ZF\ۯ<|g׳sg{zukQ MX/3Ϭ}s}ݗ1.S"f%̼_Ї%DDFW^E#KcX2%M,񏯏'pD!ᮏIOz㏯Wܘ4V:P8,`B{oͮjY[57:\YgUR&&#v+0+?cwm ߗL_i{;15!#8E??Hx D#(=((?[ɗ-d u|k^V,YZ(θ_aJ0zgGKcR3^xqgԊ1(Pn0&HZ^6 6џEŸY).?2l4+lofE?aVݧFַu}FI+Qb&Gyl3H_7XŚU;Eƹdv;2ڧ?|%f ycZrdA]mD?;@*`ܫAD۹λGCA@1E;I(B84S!ޙ'>Ԉ; (!vv=iOEp2 /2<ʅu̮-~('GH!#^9 bՓ.z;..L]2K"p5>*3z5O!pB^=y!ܓQ !ɠ,Ss}-qhc T ;NP &'lua/ZOp%Jc0@n0N84[̫ou)Y я[*E6& W}]8ьbV·t ey\ȶD?PY83E$eC- MG@ Moaon}sg{/>e; _|x2YLĖ{؇Ȼ+ &2-6*ۢlFH3҉bksm]=[v{|)/ލ9uJGVK[|"a3v% 泞p _*n}dc4S%SnmfhcF oC1l4 !BsxQ8S6N? fh]#?Z-\̪?+bRJ &Ceя~uVsj)]ڴE/z-4L'C;ؙ`+3c$!"S,}R9 !P7I2@IDATrZ?׫]j]z׷4LL*%o|JI"_ iE'Rwۢ,?+j{f_S߸Ԏ]!׸5jzʇ WUxu. |\G8d`}vȁO[!Qx%l(nQr4O?M(';1"2B.]\Z׺Vݷ"'l)"uR\! v# n<B<&/f-oY5]&1VF}b} cXl87qyF}#";W~hMx%<5&;uo~Zh@0O ]ld%u**j{zBpFAA@F*(qW+i0PRB(L;u/w c.~PCymG跌5~g q!D!d?ǥ/xak:u;Ό>>KnƋ>^Gyd}i0}^(8 q{QSOǾ>V! ! @?K}VU^׮.3zaB"73@&HmѬjmns;*8W/|G):vbTJ=SJ $KmD=3ELfQ|_q#vij>sSyab$聆LRMpg_h ̧PD I'4WY|3׼5UYUGP02U4@ D(%J,D/b',uQp~smJawF>G%# *!0 |k&s BL$b^^UB6#V=#aM\3dǙ(1Gb2_BLGgvmv;ae~@`ѐ A_cUI..V~s9Vҗ4<M@9xd}(,pKͳ":@ͤb++LtIMpD?9 N>GX=!WA Ezs+<#0rtQCݦj.=jt:Zl+Е#Ң=ϬWraxf N}w:thC &FL9{ݲN"PUPR׃6X9y!` dAF(8]FEC?;BPQn0U{mn٦~th=|>O=4xE u"v;gq! 2#pGk,gS'xb=PhxVRV.N(61]fQX 'dIZ(yx ao_o#!i~l/B`H\(B@E /LMg9?Sa>O~+lÎNޘ!H# >яCIVV>P0 #[ț&m@Ֆ~V"NFBl; ,;X%wBc;/CVd"oڣėrSj[Q+V63*#QEC߶ 9M{7Ag @p岶1CAߡ X1`ݑޕvhDߥyԨ%29b̊c;".<(GX@Q^vPlh)Eߟtbo:XekS$Ȅ5jQ(!4q+M( ,Bw]gLT-Bl1(A/|a/aŽ7Zx[b  '0{;fzQ˧ 0NLnM!P:4a-}F{.+/$?Jm/Etwͧf*HufM3AEf !'a<+ېfD1g;(B(XE\~Ocvѯ8^U.PP }<6;9ږE&쌿ԓcsH! WBsv.*}8r>P?gC@c1'_ ;MP>7x`yacMly4B)X|z.JLN8_DgO;pu! ![!H;JŶ Ԗ0CLd"ebc_t0qXU6n-LNO?t*s"EQ* Ed/-eG?!;vjvOC@ a@4$dhzdKd(aUOVc9GK"3! .>g˅JXiΥ. P+ʎ.b7z#\hS.N&Cl.=qZAåZCns3`QaG?@2ECTx >?}+#d䃠ϝ0<B5>Qe}M&2Y(cOhW&xG( [UNBksSO%$B`vִ]ةB`Ot[,a5 Zs~oW=;ԠiYԴ6E8N=iN7XG٪ߙNu]|'|%&Ĺzc_?KbVa -Fea `U4XDG?s(U;sYŁ]JankH=U'?8?(9V4cpN>p%GK5lB``K2H81y#eNjYq¦eⓏv>L4!-|_q˃ifF tK߬ 9Ϯ.=U\}yQ裔w!'44fmQ܋ɧ()"egЇcA[9})rk{>D>C(2h>('%^/qB[l(etFB`H^WiRk5W3}IZ[9vO|,nsqRGx-ɰd{{,[?tSOړVrgPV**BDʕ7#fO}*~&_ B?8yh>$ 촉(V( vA #|bjDal-ڇ|>(њ(Rє(|/6%cn[=-:JV]+%?! nn Xdێ?2IR<頒0dUX+Ct4lSJ|3MiޯD-ͨO]QF;G46?73ۆ&Ss:B&FC6Ih()gTHD03ƥGhJk @f*= lgwG>geڶs,*3^E{nXPyަa Gwwtϟ65 u9g_3hs'fU6 "p͊9ue-ŬP>7Wۊ3(Jr |9۔!q*ŷѺ"z!Fo6eǐBZ>|.B(2e0*"Wmhƺ%UӨ>L?{S:iHۂ%ɧ+}Z­?}Xǎ^W_= O}gguV͛ ;WS> mG@ mJ%x&hG)JGIcT0pQEcNI53M#L|[jy7"Īu{l] _6*,' a&E B"س(:[_/iCW3$1€9})E*&?cz*_ȹ|;Po,sQzԌcz׻>0VY`7r #|9 V^LJ֯뙘,d""dm>g>%D#yn%}2%24ԢJG0V7i =vb.G*ʂP)[M;&C|֩Ŗe袋fzЃfrJ-]-Zv\iQ;lU̵tR`>EcO %7=Ut/+50։EnڍزAs(A![Y[ nRƤyDݼ f)cJ#G7mGF۞[xҍ֙8{\@?g}4ת6Uyv9Dۖve6\x[_2<9%8nw[)˒ #j%] F(lÄm]I_2kk$V䦴}Vs칼 s4-.cUz):GF< ].k!'z k $B \pA}w|H?*tȠ1eQBPzCާ_rO'PI>9G C2eՐueg!yȌ/zꩳ> sIs>*ؖV=Kňsw^. DW)HB]) 8qmPEpqX)}+_ +oQR|Jꍠryg=Y'\DÎ~ut\<G}0*S([O—PtWO(}N~p3ΘL_@ec)GWQ/)6)6%UA 7+܅^6KSL~U9ϧ"' 1ԧ&]>yYsmU(!(2P_>!1[ ċ Ujy4ꀐH;G HG>]"J}+)Fgީߕ7 .U3"G>xA>GC*(K: }T'pB8R +(Zg'|O mIgeVB` U)@ 2p[{tbO8\k|Y^fB)ƞ"TLӈF2qL2B1ࣻ1쾃ڂ]_WCե DH G7v=mr:rH))L˽=Zg_>X`97VOK]6(}x/L`_rRdrC,*\A>*[֣-(`A[.G]c{G;8ϝ3<޳[b'`E+[!Є xMM|Ӕ֪OQ^&%cSF7N8w% z,AêQa%*C \}V ]6 agItn[#29uS4D$*t#"dZ- }K׾6| yp¿/)J' %b!ַeև"m$l_3Z~Pg9ֻ\|KH[X2MoZc>˻.#~Ϊ7 3EaI #@菝b QKԢGh>z(+IcoGω#$鄽O{1]i'&mguV8 SM-}& DɎax Fs&mm vm4zGg?-oyKZ" npܴ+"Qoq +.-ӧ}_.M~mg\eL_E-cѲ𼣷mf(ֿ_}??0&ۿ[?J! E&Z2m%@?臛b `qO>,#N |;h11\vJQ˨9S mssBJN>BXO^"4@~u'!VRh>iJtT(JVh.*GJ (N>g-})r%:W+? ^ϏSG2ؘHZ+0H0 JE M2 ϚS](StbNlms!wݥU;#k?,}cד &g!΅QAw"zV[r~}1ka;w/*!PQ͇<;"J>moBC݄_?Zg*)ˇ?l~ ܘNg C@㲿!(98sA1?nW0cg3'C]Y~>J'vr^ IV(-5&^J[l"RlbNk=g/|avoתє@AWb*__)b XַuEqb$YqF#(K$*Dډ}LXc%.B&UB܎h}[3F%J/}KZy1<تœKa9!C3чȎ61nv`Qx;Ļn)))U Y\dx֗jlB  i6{K_Kq;1SdU`A>c[ _ׅf7tk_;{~q9D%/yIG.B`@Hs`q!J#!"Dҷ}ҀP)C᭏v)E$Z'C1D ]8WVg.W#qQڐ1ʼx}ږzGvfWE\MD7U.,-?x!\4g>38g[| !8--^6 V[_g#9gxf/| w GXd"]6nʇ[QSN9%0lh]>/ѕZPtmN˞OiNo: <.1Vi}]S> k¨΄ iR4E^ؔeXի4c7HuX^PEqO-G޶ceG虥KיO{0q77 2kB`YlJEl-w]f7ӫԧffw|C=9iI 7MverQbR? 볟mo{[8c=^gcӪxzr-p7A>LΥPULբ46i7R"G?QؾK_C@͕'#h>CsL'wI\ѣ7pmd0W0&0Eɶ]$~ -;hƍh?_QB=_0e27-On7:餓wMo'8_fUFq) #Xd !0RR !$ܞ%gnvu(E. D}|kVZl?eg%Hek9-nqw/͞'3E릉0v9pwCgɛ4'7CGB;NuV/wF/Hq\]|lFϽ>s/xA}x% M 4B"qk{n7m{ңN9Ee4ڔVs!⎒0WVK;5e_G?4Z6%ڇ~}3_\׽n$xcUz׻fȗp&+?s_#[Q:Nrim}ZK/`.C^1iB:7"΃z\,Ū2 a')Ve/xلľQ);#.$EΫ2Ä6e~}>UTG[W&O}Sg\ %.o\GeMy]߀g%ɰmIb~τx쨣6ɒp!z'm!] BiI}JDҦyFP1iuC?՗qjHoۮEGٛ+b>-Q-g&Bk^GK')ځU0៰O1Wh:GE®(?u)*?v)FEAzB\u׻޵eild"D}3HL잼'=i)E/N@\\H]9bEBLcL}+}iލ%GӴ젳Wb.s_zIy_.;_8SQ⡤BRr`/zыZ|4K(%McTZ~BRB6!0)XPd~[smҐ 9|{^c9f%t+,39H?O/&+(Nk%/.]=y[URy{^*WNv ɖ|T" yt)|N%0@RJ<#L˓ѥNçn30nwqK_MQqY[Txsq PŤ%0|e4OGxc;cw+_yvil??{݄g4)׹u6a !0 vQ&BN>ƋJAb5cή'3Ϭr#0>=؇POʱ- wygUm9!̙U ϜIQBdʮO<<% Eow͢g-hLbge瑳/r>Klk[֥wtڱ "ѷo>/z,bW;6a9xg /֡mia鮁4?s|s>vW@Y%v/R雝{"PqܢKcefNP*934Q^uY'?.#s>3ΨVnzdBX2B?Vy83<1I|7En+y0abeD"!̳sPOVM8E"SXI۽s*2GTOXI'Pao|D= :}h-Rh0arhgm?M>44qt|+5)ځvE0߱ݙml-FYdB+픰\G_*#oWC{֥͝ QwZ.r"@`ck(_9CC6iySw+ X`M۳, z9bDJ'? P?n'ƤT8%wU%tc/10e(?m"_$ .}h#8j;IնB`1X ?0?)T~p}]no8hi,L86aoCp2&nL2QlP60F^(IOZ>QY=A@AH<2a3JEӇ=a[VE[9!jmE$n%q *ۇ&[DM?J"[bٹtst LPGI t3`l]b4L#&&$Fڄ>V*mUE;0j/8:wL_Pr./Ot))cP;|~ 7FwtϘ8j4D?+6";6mU B]@6S%V(1xK^y:P) M"$kҴ׮>R$ 猩lV \]mB(I8+^J|Hׄ>R[. g݈w Oo8쯶Cm˫^x[x ~1^YUu9^ȂrVUF+)k+˯x+6$'m@iܬ#,D&ɓ=餓D5t'?mP]mf%-e}/g YˬZqF9B&G!MI)cWhYoT'>'L>>ûzijFG.qOѯցolk_0j0JqC`=F p;av)̷֭ d* 'PĮKȊ0ox["(BQVk0(1Q"Ea K c/i7KַYdTa6/;V*Hj &EvpYP|H?*tb(Rz􈖅:#Y']}Rh%^;`"Iƞ\RRLbя~tP>(B)1R!0p/Ź}]/|a}ޝIucS}/y}_SeПg]'O7${oQr7c9hUv|ė!jl^h9Yec%-vWIQA4MH\(mOI\mD!°ō䷪oc/8_Z^ޓ>]-+˨σIFTqP|aD-ŕ~R[L)**hA?ף>zv'OZ gm2:A]R/t7tlUږG\:pK(Ϧڍ`uj3_^OMhvR4ҵ(JӧU3ֹF9:>0á{ŶyV=9ir>"lSvvW-!'~g yɪCt*U! WB`08cg? $ )}ں-NTEEhz vd|ψi.(v߶m/pog>QTOPJnܥC_c52y7UiP>+(TO{Q):z<"ڛw %u1q]m;5:}jXЍB&ǔ|+_׮.O9h_E@/2 u~|‹c ՝_ML"/Bw6̣"l jE+o|Cܙwqu_yV[M>] )";.º}Jm.~1vKӧ}?s JW+#\3-̪0,ʉ~cP)/0rtz|EI|'|gIx`>=#"Ew_ $bP|O6ŐeQZB@ aщ0*e!Pe6?ܘ]U0(0n?kV'Yi¯U]üV'z՟J;:lgPq{^z'5JĮ[m%&?яfLE;V虬VYÏpNMF-dR?&?L_zE#2bb$]LE~]ujK3jr>B5Vp3n-KA&lIw10f:0`UgVrͼ -0(ؾo],ǤJ+;Bsj!RM9p_g9wwYxΘ|OGw7 4&ڍw'B~OXYc_]@hc/,JH qA(~٥NE'wy8OxPq\ 1 l"$lB@'hR̾| J)'\r/~c~w at #_ҮJ|V&2/`{5c|)'O(}9{W*cvw/?jj=RΜ_)芝 v3͎۞weP6e1b~m&~ l_"! 6& (?Ί_(0Bdτm„0yX&1QaDaJ:&JI4:0)c,] _HV3s$?y] .TSWOcZ^)Cid iz97m!\R?FX V4B̈́!TyAз̉OHԥm,h*C4hz'(寪({  >c]ނ9q[46ܩ3c eDJqJ_1~7(/cD! 1ɼF eڈl+B$!)+u/S~?mbL=]aa\j՟p"n6?[]kH=aoseğ>B N&2L"@$!&cH^}R7VwTԗ$1qbFxG×lo(VϨ@p(%ڋvd!'`WFQ^,||sn'ld:L`MKVCKӲt&ΛEP0EOˎB L]ھ+^W?LXeAPc@_Aj{ `!SF¦01^AY4nQ)La|^d h+/+2)=]TZtGgةC$}w~/),٬K\ٍ0*ȑ d&Q<|!l0a&&3ý=IԇkLި/zQ`9n-<;0a9?H+Ȅ;kY2!6 '`p_"MeC=;B]/KA(tw{VyiH[L{oK'ܲ6Ү xڮ*Ud~?z!+WY~f1k~f;D_Ƴ2,جTm@1,{~q D &5aI; 5EkPH (%eY olkM)(v"lZZ_l2l ! B@! vlxzB` &޺l{NB؅3޿7iDM8! B@! lxzB@! B@! @@ ! B@! [[ȪB@! B@)B@! B@lRlA#B@! B@! PB@! B@!ۂ:B`mTD] S?S/ߢ#xjU +IDATo[u >WlI! B@!RI^J!" @0B@! B@!H2 ! B@!Tr+9R ̄@))B@! B@uD@ ul5Y! B@I wxU"Qk BB@rr! B@! LvUB@! ?pJN,}KE! 6o@#.PUQ@W@Wo{ vOe. تVeB@! B`[`[[^B@! B@B@ jnUV! B@! )Uo! B@! *تVeB@! B`[`[[^B@! B@B@ jnUV! B@! }Zq[t}xo q!ֽ{fںgߑWֻMKYC  0$d ! B@! `UՄB@! B@R2B@! B@l0RlpjB@! B@!  ) B@! B@! 6)6qU5! B@! L! B@!  &(Q2oP'dW8p`zV NYu iGB`uj-U! B@! @O ! B@! X'XRYB@! B@D@ )B@! B@uB@ uj-U! B@! @O ! B@! X'XRYB@! B@D`_x&B`Rt}zRfLwI36‹Y ?Bp لB@! B@l,RllNb{?Ǜ|T@! B@!013m /!0:R2B@! B`6zU jM,mN#ZS&6$B@FqըKC@ AB@! dɭu`3qj1׆j܄TB@! *K\ ! B@!hQk[x=o=Rm rݫW,ּ_WW[~mO6آ˶w.F(b~7{άym/⪹B@! &"`\3%"qKW A@ i V#7xE"y ! B@L~_Vn!R,FG B9^k2ғB@! ~۫ڜ]MOn!0@$)|, =v?xbnB@! B`$W?ߥl0]q_HP@n b#4vS ! B@sWc} /2ͅF2X?X6[eV n?P}B ! B@ `sV3r<(ïoqL3L!Њȳ?XϳL涸p!S! B@L79Vvscd~o c2@R@ۉf7(mL͎2[! B@ xPy0m|Ɠ)BHK+ҁ'u{R?X8sYgK /S! B@Ln>k\LOm|sixم@+Z})`3/gJ\*~ഴdn0]H7X Eߏo)toQ;tگj675/xnR]"ȳ?4 P)ܭ&gKB@! +G欘Cv[U6yKB) ڂ`m 8L`-[76xfnA;B@! k^YUqQk kvo6-f5`u*A$,;g7f&cP%!B@! F 77svܻI{ȘA ! B@) #El]e~Zm|[[Wfo3)= 9pB@! /ʀ.J"ϑ)#n^{Gt! @Beg~KLt>6PJ.B@!0U5︻Tm>gS3@FJ 6H a陛Y)t^JR! B@#`4j깸z.aZUWVTK:ӯx^F$nRlQcT"s sjL7K.1d)6Dpb\vƼ)02I;,3kL5 ^17+j9.?c(1wU X_TX_21z5+*ޥj *l-cz<ܦ v UxƆ8LA co)λc-U-!e(EpzP)c)ߥaWǹk>&_˽WLj@.@弬pqJjw)lLR0uw{Ox~ޔF.xҐ]`Njd6?L{H2wY+ВVeUêmT(eeswVP)LʁG@9^1B;ʁ˔` 9&DF-HoG^A"g <%&;~;<wU?w^VXpJpi51¿S>Xu=N8ovL cm\گe_sּ *~j2aLvsccp{w^ ;v+a_%_jW>.}UU,_~]Hk#0LO =U}g++x53'3eB@! #KXmv̹}'NZOUk!x;|kR^ WT_WG*V+B*-vsnL~fʹϻC1U=dn( [P-^RA5 knч "+(4$y.S`doS<nWAaAy'y ! B@LS[ir*R.Y²LXF>{wlr÷, nzI']fs~j x'S! B`/Rdar:Ng~2B@! dR{!}vRA$ >5;& &̢n4;Cޞf&v8R]! Bo!ٽ7?/SR$li &H& b2 ]E>i?vkF5=d4Lxr ! B@`^)綹!n;9"6?6~j|-KUvuLSk3m9Rly F6(EjMxDE,L?g6Cٍ S~ػr ! B`[`Fw2{6?Lɤ."!0R F'@j,|Xiag+f^"^to2Oky?cBK|8مB@!0kϻmH\Pn&~f,[8-O7&Mg )@`WsBb |™@g~ii{72Ixܘ/vKެ<ܞ,=O-B@!p9˞7svxfjOݤonycB6{X81柺/sK`Kzj2`4 ~0!SM `~ā,o{;y?6^Szi؍|8ỹCMC!dx&UA6a4L77@ii&qw50Pzô*L+L7g7&D:Fn<3,L! B@8mL3Mo0=};vB=niG6 ՜e`p r4b%mYDŽLxtu4e ! B@yfS,ov3cvoz>m~pv_Ԏ"I1ؘ" $^Mdj<t,ӂYxµ=MSš,mvDŽkmy]nKXy!еm&3N|! B@l;%FQ޻svyԞ˹5=;77{Ǯ=lC j*ˀbln{-v9qsm9Wero.{x¤&q V=JA@ ="S i=?jJߧGmNB@! 4htM)?u?K>Lʕ| А#9TۃJf*t{ǻ-=˅›f[\Nv! B@"(?T ? ޖNiymC!K R#t(m *O[L! B@"(,ͿdB1+]pт-k/JvsR;u:\ݹtpdB@! sUEi.sraWD`RPW#"%J`*0v B@!T.+lW /4%wB R$YJQ&~_"miI/xB@! CKOk/Ҽn YX@@ ݌Kx4Ni\ ! B@wi8_89ϧh<: y#0 y4U*/)B@!0.Qa:Jo4GR -xWΗUv! B@#P*`+QIz%aI"f)`)h3KP4gsB@!  u흮R )Б_*|UU`! B@-/BJ_}E#  YE*Q_! BH_Aŏ"ph"0n)B@!  tN89 *B@;֫6 qM ! B`Hz |! h*RDRX! B@HlRlV{6;L@B@! XcEOEoD@ Fh H :! B`yH_iH|̕ "`+K! B@רT+SuB@:*B@"rVnC@ a%섀B@!h"AB@! B@L)6*B@! B@`0(B@! B@"jJE<zIENDB`ic11ʉPNG  IHDR szzsRGBDeXIfMM*i  b,IDATX W[HG>=u/&bh^ Z  JQ RҐ/BAꫂE$jb`|GgW9s.ߜ9sY1ƍ:!͋F(Z k>Y~koouU ..._Ef#6|xxHuvv&tww:Wa6G#Jоƀ[AAA'GKVdYfľCBB [ii---Xk~AAhv;! ȅ {YY7MMM͗ @7v6666l8#q! aTu4o}}4"qT4Fe}KBCC)99Ng`uu&6+$!L)###\[7;Byuu{a|ccct{#V*MNRJE0ID,;fW`$dW\]'&菷o)SP@/)Ϡg啈FspL/>aqh=7##c>߽]uO(@tLȅt('w`c:G9׹/yu2q †=dG]9{^OMAwitn7}q&0rQ:fgizps@E 99EE4Fϟ?`>|΁lrݽK: #Y Dpp0=b=yBQ%%If&EEEogCT7&k鹹Qz:g 2G)cnbuRİ(c7L&9ā]qe.J"NƱ1`"FPUUhu@8#QJKK]뇇֖JfAN44rU/..Rmm^9==M)))gĎg cYYYTYYXYYQ>˴[Z;!tdG{xxXŇWB|_ , %&&RRR򗳭'zK-w\b1ysG"&$$bplist00 X$versionY$archiverT$topX$objects_NSKeyedArchiver Troot U$null WNS.keysZNS.objectsV$classTname_assetcatalog-referenceTicon  !"Z$classnameX$classes\NSDictionary!#XNSObject$)27ILQS[ahp{$atomes_1.3.1/misc/macos/atomes.icns0000664000175000017500000211316315212624223016717 0ustar lerouxlerouxicnssic12dPNG  IHDR@@iqsRGBDeXIfMM*i@@FQBIDATx՛YTyǿfgaðd9$@,N$ˮ$C*TT0mҴyߥ$V[(,d28j]޻|`I˼K'8^VFeWD>Ky2 ,R![ ͸D!ǔ%.%+jW_uܹ/|h,5 ZB#4U^R.,ĚdQٱcG%KyC]HXlhC TS]]k_I$jp){Hw `mܾ}鞞okD4gtڎmnv5bŐmlO?KaϞ=O>okj^@~dJw׎ l*̎`7 ]{u羸@ٯOv@e٬Z[5Xrf[̔lYoǞ=^~ jRU Xn]m{ZZ?yhQ~(dD45[Fˣ,ݿ ]2F"?j{V ؽ{wxdzMV#~CT۾l $xزYZus\LӢ]deW>˭Ih`!iDe O1& 4`Q iWHdT.ǭ=wDt>/IWG ܿO*Zlh(!8e<$'A +ඈ|a7_W>)QeD xj(DQ#U;$ hq21?58C<~4{.!繫˧E씂b9im]sKkcHo)A4$* | EZ=s`]~R Paȹp{E|^$'&], p9bF5v$8qzViiY3XhtU#6,oE"}9tP` .A_mT^~7{׬٠;p$ |-6,K/\\L^+CDw'ha'ǽ/Qɝ?O~^Mׅ)J@LE4;1%8S,o,]]]wg9+/ZC~]p;R0|jy۟ \b;y=cTvkrRMXzͿzl;dQGG@,-a43`]=ulN%'4#zbAd׾9=*(B.b:3u@W +s9I@<>' rD]jzkC|YwVQ[͍E9 d&v_yb@h{<#0/^g!6޽Qog mɞ>}Z-Rhw_,moСh֫,IDTWJ ~G ~A XDـXL2qj~GsI S@wi18*Y#!ˋ tD+Nޏ]6mBm+VxӭuK UkU:hjPH&nrhq#7̋JHO\$$t§qpV[ b~Ъv@+|lFk鱔[XID@v"mJ:"ITB@ɓgf1:r] 26}s'9P6yD\ֻZIPJxl .`aL1iɧY:)Mzz-K9 i\'<I~T6W(^qjڵjz"Nj^PjyBH%!$=vǚ]2}=هLYf VP<2[UBR}**7DzY@^g"ʣZՔ3g~u#GNOT0ŝsoV /lP4u0I y kO{LCżNФ?uͬfeM@^0!'{@.j;liMbWty&-DȣpȜK4uhz@mǏ%-a_o2 b\~%90?u\𫯞Ut:)$]ww@:ƣj-AQOT Єo!{,@ ...M//Z_J'w~~G2"S##7~؉}٩dZI ԁ]:@(ia! ^HMf?_tG~~lKZ;t1ի t;'xBjlllNHgGF& /&2H!wq(:$ aԁuiG?m2UdQޠ$aYS^;W~;`q׋`Qt}G!MII PæWR>?#Ϛ^y'NxW߱*(J1TH/À@C\(x.{Dz10""?nYmQJ&^h"0g~n>25@D$0 }C,0GKVY)sePX 80#)+@LYIENDB`ic07.vPNG  IHDR>asRGBDeXIfMM*iHw-IDATxw]}{ B$!Q ɘHd[25Ƕx޾f~{=)p]J@Nڂ%HCW`,$5Բ`k_SD*w/yLAp+`xMt\Q!,Vdwdu{de.7So16[ /HJ|.;sZ!u6;&^|DVNQ|]%x+E[iU(X=rMl4 #9VN&)>xbOS <'iUU(uڴ #<7緪dV/쓾(%̾Pc)Bz @4jh z,93@ aGtD~-/zt\.ZQ#U٨ ~7ҵ%H/5.~ϱnS^mWQ/׌ tSluk##d`3m R 1)E[쪐kBk ޵s\s6l\.o(;0>&aF?#_뇰[M!|oo4OpɞMJy|} v{/"PW_^Nn0YA |-w2?;DpV v%7;wYKfG= }6,ӼpP I w)ѝ! H; CsƳ l׺zuM+Dpp˫Njů{ݚco\ CT[CԄ7,ؽ;49v/XcI8&3nY8(LA6&xQUUK 6\pNpc;O 5¡ +\cc|{W|]KK_ׇ&Si7ov˪Umgla`bUGnm>CVy Wslr̼8qxǖ-XC{xݭil|.*Cd9#_td&`Z(%-70 YܒWunտ xǒH}Ôz>G>UQ,6Ǿso14ꝟ ~>P2$@9%Қ*--ܲg N^S%;fZIKQnJõb[ڄ(* ,ZԴhƌ6ޛ)ui\/_6sMccS]ggÌt) üY0.U'4jdݺuӕoi~nƌW \R~lxsBeϼ{]*`JD *j,@{76sᶅ %_^+NSX:\]MsspOORD`󤪓+nr^< [֬Y8YWXK@'sQ@JE_yWDÜ9-M(][+j3`*53KNo+QUr&Kj ҦDa9 ҢdT| vMox>A9\_07LUie)K%իG Gy,DJ]oWb;HXֽBIS5eBn}?Oz',Q,7v |8 QK(G~`P3 (V<F=@CqפR="-dO=[QKolJ e-b1H+8n4 A;xoqr)Q9'zzB3aHZ:3޲GQ 2hT&c:O,ADR 6.9uu_Tq>D!"E}Kgq]ʄXFyotK,h֔"sWD0 1^u]Gګ1a%Jl C >]892sK:C kD15P02uf@PHop>xH缩tܴ>ޠJœ̴rYXM~\,@rU&a~Xۙ|P_ωЩ,X5yӋRF~\iټ'6T'4 nCwr BxZ<2*= ~BHۯF'o9s5MD0CTuN# Xl,iyϦ;,)!gm}gs U |[n0x+06f&cK`t ;" ;_D$ǥe3AyK;.pSZxa .O ?UBJF>a\eR@9Nm-H=bWwܠ! 3(8s? `ucRl~#^ꑥIJRSqT#DȒT.gJ& V N v9#`=vKqW_Wg5|EcTέ\R"~nغuta_fe 2+u4CWizw 55 >z=M?] )`x͟=WqϺi^ॠٯk[YTpYAҥs2n\yV, ̆iZ0GGXNY"(e2`H>| 2NTHSk5Ԕj7Ea7_~G$XH0-r4[A>,Y`Y@(e2pﴂ˯xKR\.V@;Vߖ M%pȯ ĔE*~μ;yy&GH#ýa:{ "DMl\Ho4+P.#KwOOUu9ZC [~q'i4C;msrDmi^EܧŘ1⩉>3שw zg?89ο,H2 aT{E e0K9'g6w:aƋN2K/&{G?ooex*0VT"@`СCwJ;->60>cxϺNtNtPj /-X{=k)O̙:M=]-T0;iϋ0,m]VQF^GHgF~:pR!8ᷤO]Vz\!L׃+K>=cNcl~(#m02Mf V nAC2. \AgO;߀\4:׀ۥ~ӚqjеHq, 8G@`^=ՈE(2fy:w% ?B|V^_`0zee樾r>"CV|Z+}'Uhߢzk,%$B|PQԧu-TK@p뛤x>(8FtnG_#,}^P<<h"kpP K%Y~(w~; |o<:ph9i< ʈoҬ[DKSNxt&ic"fWdȐ}1l `izex687{]7 مD6asbHl!0zL(S"@T*߬xZOX$ jhKUaGfhЦ|!4.`_8+<>Wz|ʿ/ j7j` 6K;R"4D s)`x|Z)/QW>!:@mJ\L:֬j^ଶ}1@:w2"P߾qc<# E&\,GHa4_2jD \QFMFJ/5_뮑?ujՙ ֊|H#CirW;E*p"b~7? @&ɃgGyB-_w oWuRIK\s |SP_ڎ0<^ʛBMVA;#_DaU4˖~ m2"igkoM$.LwDMg&8D/RxԖm.ZX!'M5pԙͷ&a}0O]FMlF0 "o m".@vV>eZhu1S8?ʋ(s~U>mOXf-]"#߼-ATLxF9lY "I/d%ď)PZ41[l/aO4㼯x|DhVU=4iZjEޅVٲ ݜ2c {H= P",BjtCerS~u\Q[jD3cu0^_PQWT`gXx:6(c}q?r/x%5kdJn :~b)p#ב~y ]dD@'δBPnpKZ]MI Nvr|yc:mJ>0%$,Y4 ;~LT XTJb6o%Ktu\~Ex&me ?gfatg˖7c_W 2n)Mo94k  C08ң O>+lT@s쏵?.]2sIul8q#/xJ;DpaqSudq.oR-X:->@.Q+MJ{90 jP@ׄ9bR5L8"Ԩ-J8'zk{, sOjh ӧnԧQ=`ݱiс? ffQK< `QP`GyMKNL i'!! ǐ&I@[ѯ1#1S|Ἥ wJHcAy,D@r$苖3[? ;vЩS7nH ]?Q\<.n*o@!p]jɏPlx3 -/x~ԿG޶P[H/p'~B]j?~ ɟcO?߷͛m Bxw]M&>c?nw>ǧ.iQ(t]2€k%LbRQ.lPs*O˖E!,%P 2iͿ @ʹʭ7eZ=ThIG'Y7ٺp:?dfIw4ş*}{8t x]X>#AS6n_s>u֧4e܄h%.{pHDH{7ÇO6zgwۧpH,EMPlOf;ͯu^~*= |lB5?KC[h @~ō F#~%&-̮XJzV(\|q7!|ۇP'.iZO9.iQU{`R-]x"/uvksA”#0:(fJIE4B6%ܹH:=uMOݬpn$t۫XGnSdQr]ZOn@ǒг|f2yaVKYols:qOણ{]*Be@rfZdw2]JM @,-;.|8WT\.AzDU)bK!@e(ɞ%sY@irMWUU/ kFuISD0 'o?J Q5WđfR5ԑY$r {!DIwbygJ7 ٔm#4La:!+r'4^__ >4 JF)Md%d4klH\5ǚu%}tWgO$(T@Y(x~k d1Y.a8گ[=evOsۧ:Gy(8Lk >=#@G=q <& >3={p}MH#N=4T aV*(s!}@4A 1"Xrĉ.SD~Y8s#M&X+ ֐=Mz ѼUE df /~iKz`*`s ΐHEl _c|G65aVqhJFJVBBd.쁩0B BYx`M\a |PЏO:(8/e*E+JHmVY]tb}]Kʣ CYvlR=9e g F~9qq 7 e+{ɲJUL.ki)bpۑHq]C 2u . TQ σJw,FՕ1=g8p(wVDf9@bp&裫HWYnE`k$]EaUb A}yJ?.f QGi@k+;@h0#eeo2ml*j/$ݢ-Iz3gt>8ǮxN=BsBcrϡ,  0gBGO)YCR]p<-:00wbr1T]? 읫YA(*30%AƝ;݁))=OY0g3 ddiyZ;P )Rm8M~}Zz]`Sj xw5!8yLdP]p;H11MO1{Lm bܲ0 @/ipLicϝʲ+ezJT<슭SM"nZ";]3y_S=6H#/󑆑zl)Oq$ f9[HkZ'ZrZ}|pcȏ@ |;<ϒMA\d5WT0za];5;@ |hpQ  ܨ4-qǛpF]A孪^_veT"#C\SM$u @:p95?*}Q; ǏbDzY6PqR]7`4?3ǕGhGhc%̓+]jS]Цb6eo H/ ?#ck:t\hSh\rw)dv@]a`FN\t4RN5<!Q*C ꦫ*Kթz-/I("W "vCQ.5.]m`D6E"殞<\\KmHusѧ=|@Aj9h2`36НFEw5q.5@4L{D mPWq3gp`8y?R+ ʶM; 0!zM ?c  ~p:y`&*ˌq4*K$5eR9q݋ !_& B8~Y]zN] p\"x='ޗKe28@5> hq ,:#Ft)tFY#5s~8A rͰ_65yKtp`'^7gSxPwInQqTdN<.@AI1N 9FQd:2sE5Og#7\_SMMxGl/r^Η.#ڔK_񪀶ym. d4èG>#iف\eDb G4e&u  zsPUݾ%:ee&4@i~<#>"=NFmShfTlF|  Sp qu*//--2L2=pF4TT$/oiϯWByI]zrt|ok~WPR7x2{եdʀol*| nvxaH?T_> 4%ۖfH%5;}h,@22qÕ|RhXBG> CN ~8;Fsv?h!Oe+e`&E`*.%5;]S'xn:sub>8?|MLdx"[|9ȭ/.6l  ' "lmA(y>ȏnKYD=lr1/@DSOaUHVK479-gkYLV"Ifx4%SyxVW54V7$_ȕ4-%8K-$5-s?%~թg}YOLNܐ2?PF~ Ư^͎]}>FxFm066^()g@Y S~yZ_|=Ydv/R3 t @3G9aXVNVAOoo:8XQZM#?_ҳћ7o?+ $2b3a9j~ٓs> i {YCŭ)Ϛ~@i3D෪']l:.kG٧_|񑫇W?8:~jkk- =ֵ Wc5>ӆ#GҚĕ+aS;efۛ=H6{TZ2(4<<>06{]]V4ঞ ?Q I]( , Ve}6ogjdýGj0ӟ^Y[Y5h b {{bbTjח^q)6eך>K=GӨoc.Z#4t%:F|رllPF'/Sllmpp;9~Vr/Y폜GYqG]F]:Yf&===L; |Q6ܮ<$f׋(cigiv!>lVOU3v|%5hs0N?o \ݘ?Zxd]# PEKVK3̹6//KcH#dj))j6<Ο&E*^ ߥvvbJ>Mm#GhOo㽁8 Hkmॵ9#g^ׇNɥ~8 aB Q]JkVyo~92;ol-y;FXkrt;&~bm2Nۑ '2#2;ԠMS0wr.-$5-nRcįz{I-0K=JvWY>&8v#j­Z h1wMwۿnԃPA]{uo/}i`Q[Tmwq.J;&1˪ZQC1ߎXHmߥHkv U >G4Zޑj666gcNE6+z/,!$P>#з;7<qp7ݜf9pB眺L;5H) /yË!gWW?_Z5G 4r4g:ܓJ*O [=:BCׯf1 .i:~<͛+etj,3=՛:>Ǖ-pN6vNF฻὇=t;cq?} zTwS1.*_z Sst'̠:8&CŲ^ [b?vmכz?WxWW*cW%LWb_Ң8dqVʲg4$Oü8~͋M}xxGy5 ֵ,/IXFXj/ -^ߍ;ܗ2`*'v/qǼ477 ~4"'o+\+\UĄ0z19jr?*߂bz{C`FQFRi>888ۚ=UWm[3kk5Ob?;N~`uBm;L v9A;]!T-2G6xbrY653Ote#gUMUxP) 4aC?u`GCeB%qGVPuppb_|Zzn]6? vsS>@IߖI}f<;`%hV,fS91 =e^)0hzzyxv[##xE^n;rqf;woB^5 GG|މY%Hgp4 BI ;]3iGa *~7)>G8 w2.}Z'u*IƴpN?qbﳟLexd}}c{A#cTf=|KF~4fzn(I!?z,xX&,*]t `ڑR^#6Hg˛V68wH#v9ŝ!- {OU&&Vnuh諊#Gܬ$MNF%6ʜf?IvĴG-MMJVsMsc $eYGcCnWvfqzExd'>{{[}ONC=  Lm%ߕr|K<ϧџ,qEpWS6јS2M%JccU.X`Y+:of+ȍfsy(ާzN>~ԩ,?16/våyE"EN.jϨkwX]"a]8al;$ƏWߥ֟e[1!acS% +sy·nVC6Q%IC!k$uk~O_0(yKiƝxμSm]ԧKR5F(jp]dzA*|FGa݋N!r^+_f(# q9$K-gNdΟ$2p@q KNZ*pT9QȃY%}4%@GZ8Iu&f b,%ؾpx6{8\F'^ xJYhJ4kʾzGȷP>rz>KzMy:tx<V)xToU4,K`̿:I5s2hcr:~szҐy!~w|!gv 02~;O^k'C)n`иxgrr.\(jC=Ppb'(%</"ailsHf4_ /^T@^f~i&xL}T Ǵ2Vg6䑏`LYF8 WN9]mfFc}Qם]E4\2wUjAy$Q<#?3O#33e:ɓMlK{6< > A2Vz忟FK;7 kOO3}vRǦFֽ̣!$b\a&1+@qLQD0"?O*e!aVt 0͏}BɹlLgїؠz~IhX+ʼD{$39ow*S/&ƨo)",+k 0?Ű 9>pTjr)T%$"IQn^'ѓQ,Ap ;knvݬs5mJ#1`G 5bv´&\$F{Jm+pvsRl탊rO0vYvѿ72z=cc~׮f~s?O~3 J*S+P(^AdŤY¹J7O>`KzMMi?ǻpFf 1 8YoҝĴ٥u=&ry9.Gߊ\Z @z032GW]Ͳnl 9MR:}`HwU4#-R4vH@9^Q'Rwkz#r3%K>: ~lVF"ppk' Tfj5IF~fu"Aߘ(Y "gt }?MZ/}V&n׃UIgUjQe9kY} @ 6qv.OqU'>]ֻ5OzqgqZ s=)OaF@E 6"z|-R!Geӫ#? X] rz=+7('YH urInIVT7K8nW7j1*HGVWˀƢ*cGخ)@vΫ$}*6E8K/' <'KSS2J-mYvwHӨvMBJj \ISɻJ}Sd\'Gěp=ƨQ5bV~qN]23:" WN%}fHo >/f^{퍫g9Ad<&/[Q恠g Fx)5UY:&$"=)8U_2W?6PTzL}Q ڴ hOcF*u Z0zqՑ1L4Zq.%ťlY`MHO:8xX_ x_Vs;8nsè5q20^Uyց(H2"8BڤO4?}oI8TWAǛ;kCzF[I'Ά#`N#7yy<:I\-Ȣڌrz=$K~o@:FM"l^ŏa׵1F'4_v861[PN={B_y~ } fBT }}ٌ%I'w~yP-\~ĭHW8ICN$n!v=:x(M\+^O"39͸ r;S9ټ2}N4@nB~Ž: &C8; $m^tT9I4I=BTGgIJnj-GYPweȏ;rsƷx(.Wg&a(ȧ>%#(mSV[L?4zlyR1cӊ/PՒr=}+Ǟzpm߹P/f~Elje.gǒ7vFӈ%cؤ8Æǁy8cSTWSNmKW4k˧&"' ݤ~@ԌS76~d\vGP <u=LW| t@$3=˨7Cp28*4fGU heZ[hgi%sLxLJKtLDEL+O yww7t 2GqaGP_*K9\p1ieg uf~8斁G-5 A~!ӂNf<VtHuD`Z:FutZܴ H2ILFWKT8?,z?}2},R$+$͆R ~NQv):#i/ t)[H.;3iW^@tOhwLD): ER7sx w:i{o~Qn}}sʓa&8۝d _`64t:45 /:ю%M/1NO8ɝZXx{lffb}t!jǙ)9JGd}QUC+~s'jLNcmy\YiÌ̐XtFTéX'a%<IJLaqHr G(;aPpRI*'~P":ĄΆ 4X9r˪\+d('f~N(&&G`!1olwY]1.Ǵf~|,/r"ǣefYwĪ #w~s{?pD% g?" or_FUUD`OF@fTq'EAU+ qc;4]Vɏݖzc|a⨟?#?CS;&>w\+^UI1$/!vU{:~7i~D$=ؘxdGË~1Xh nh4p'` !Y0p0/:Em!tfܒiczzz04}Vd"}Oaĩ-k\9q;xX 5Fu؊8%Q;걠0pO׷~˺xt ~?eӐ`SEnF9RMq G~*OZt5q*3R.^8c~S3?鴫2Pb8qz+* /y"PـN{,(W'{''kB:6]$.:akt- CppS;.rPf1~RR~'Azj ΌU#W,Nso &xt1O9b.ol1Lyn*N7'(y" UVXǽ o ~mt1e۸ږ4Et#i^~o_t.r+R,>|4=e~Q<vN/*urgGcoc~ao7[˹NǛ:ŴOp؁{ޱɩ_~l駧{T7͉au0aE|<& "U1A BC[w5` b#֤鉀0 a!Akh;3owNȢXfat8h@}Om}G~/oO>yeuiFO }Omz*&; ́_7,QQiC8$d3INp(gֆiey\3{ߎuSmb"u _ Vf\yw߬~ãs#nkr ˋ`0ݾ.է~/?Gzw-?8j9~ ,8dQ!dJfq'O#kkjnx]\uoUu(7A~Sk\,*SNyxӜ[A9ie]%<-TY[\位9[[X;퇯lffU*-!آ|; cڏ_qYꏎ8cjSl澞9N&qҜ;H@ 3s~>~}byeXȴ菍I|Y^ X?y;y4N#=#9~<~SY"o'_N|/:527|U^s}2?q#Tͣ+":[!4F ps %-G~}]G}G,g.;ifnِi{wj3'~{WY}>؁V#>icK'щ]|&`:'`=b:c,x<܍/mIB%)*m`tFvzߘ.ź郎A,{>S{oLL}1KPFl7$~C>-@ވD`ޑ@{ͿxEcC2XwYx^]=wW 0mU;V =g tѮ:6] 3es @YUb>L1cve:#_[cGGmb>N&oH&"qNAsm|Ò v}` :| (PAts'<%Ƒw_k4 /#09=~^7fgאUc9)K+|.ۊAf𴾩'w~?̏_7͝9aohf@> 01nX/NgKOA6, +<.x& UܮfUӾbӣcczg~ŏ>*{`]3ǡ`-q^ H3i!ξ%/M/(/+4nr8 (؜SS>y/my1_mG9| ~ Wii*neC0 29|C8= }qDJH۩]cZ&r]m+..wZN1v|s?qv1];o^ǟ"+yIcGC S\vﭓ@IDAT`sp̃?0DonYY;O"?v~Gđ~{+?k@G8t5V[{ihL})WV$.eO8^<CecSN[zc=ĕgձ@pj̙?"pK8]f ~sn,ׂ8`Mm~ |t@qCAv߿~X?aW,G1I^ǫ,E pC՞lt1hFcdghc" #8ovHKkGS0c G;Un9eN=w+^+& _6 4FIE=g?<9AG$v @ȶ^ ǹ w~vԭc8Wǐ7:*22 /У>ہ+yÓ/~Rl~e{~}q+) aơji4wRU;MefnM36N3' @;l2ׯ%FGli w;]T+< U%;'du#w+ D?SAtio6; ˸h6Я2~`R,A(a7G@BH5oxʲjr{;,vf‘ƈq1.<;w˗c.rع}9xq$×χaP>>('coN9Gχ=窵 c=݆K8u @:)s#" J+ &a҈]>v̨X K}Ű"wyt۳eT 4"C9 > YuŒ62rl̙OO.. bvġB@{w$%UJ+r?ɚ֑)O;qgQܴ""2ey]eac|/^/}el8r=^" T{{q}|ƈe 8?iૣ7phҁׯ3<ɓ:4+!㽦ӧO˷>K oc`C`GN^@Ӗ@-g~;Ef .;#\D34ei⹮1 (Sb"/;\c,uq}i8 l,qr m7%*ԕ3_ Qd MIـC35'i0,^`^$Y׍]TnK$.u@E46[͉d8cV.rG\wX\L.0 14]W =qMK6k/`˥aXɽWyugPt1MX?M8LO㝿/wbYq8x4S{l™ `"'8r2*>H\+%1#`IraF| i/`q!88r>`G#fXǣ@yS}}387Q@o~_IvvbZ&o.uE?Ύ43(ͼ]ۅ]?'0Ŷ#F((GzuKokS|< 3O/-T9GBYwi~dfZKIpvkF 5"43q~B>0J4S½}5yg­_p#񋽏<ɧ8BU҇>]tn?4RT^ZױN}nI]c׬WxGexaj]kr$r_- t\!s|']CέtzK~ճ+3~~)7JdF2GWfffWgg?ƻy`"#XHs9u6 lVnB72x&4xz]y".6agA`m|x8eE9 Dhw{8RTfn5ȉmt<3ͨmޯK38%MՁѳg_[7_qNm4xMG4S6l6b,$]]LEZ@0i#9ߊKuļﲑ7K/;\Ɖǝy?x1<}+\3+crpzO%-SpCȈxx<\ kD4yen.[3:io3Iܑ%'CH^|->T6p0~BMFy}:IHE=Q|`(;mQ6P8)LKZSY@2 4h:#W~|R9}1P.RH'9Uۗ.5`@O8b6m dtŪ#\qdVYPǞQ'`O;S `ѱbh{/햫^xM#Y~86!H휷j)Q% :˱i<3Gt9mRdN ~2D f[P.ϽN*jqF0|PSNі 6Tc+<37{νݛ*RF@iP\Q^߀EϕQyb?/ᢟppǨ/i=meWb Q^GS6 9G``Դ(: ?*G_]9qksr%4^dDER?)jЂ#>#?Nld)/kqGtȳ+DCa IN׺9?HpwIJ1/e[Q1o 9~''QYqۥiV,p75^fS_#?+A͵/p62sr(7'7B`VPP j/q?+6QWtԋ^:IHʴYdE휦g+m(]eMS5%LS f  sh\;Obp;՝/|ߎ-S]X3`VsƟ 2$ LY3O4Ff2"+ZR2fʺ\uu.``ˠmWKr]Bg'/\N( RYTVk3O5t^"ڹ"" pk8 i}G*VñOeisI'0G4d75 Ue}d74h @8kl 2ggA oj&쵏#E*ձD`FaP3[)r40yېqk{]Q(pY  8!u,K@UuJ ߔ_7M~δ Gh&{8Nt{AwVX#+MG@|O1_X:#͠^Wx{YgI0 #@^\/qq1crZ&<QVOݞn2 4S]FAT:eߖA$ޖCT(N7PRt&I2.ޣB /@e)n]stgY@faM-hd(z龼aÇӌ>, :ϋ"$gQ,x3:vj⫯fSz0qB UQ4HQ~=`(ďk  k\=N2j&; 7HGVp_ i)Ӡ4Sgg@XpPQYq ץ-3f^ xvfFFuנ-3qh ôw:@'.i?$&>ߓLE ~nA_3)xS$G޴{``qK.=E}SˮM6N1XVyOY٦De"6vFYudž4r3S8H1Oġh~F8e+'}6)E&e]9y4!if+ m)FHBq1_IFn|@ѻɍ$#8!J]$y^ﵺRAl fJ)}S{ ӣLIJ79O3( ȹg ֬\B[7`,f]䯚 k9pQK6j:(ȗpNU8ȼ*$@GluЍ `>HE ]׊ 6k uGs]ҘM =(_(v-(8\Q Je:xS,gTQ_48.:]>rnIJxǼ}֋G?y1XC5;:Lv[y gYg{Bq\ѿDQntjV `&2xܽXnOǓB&>L|l`ZFܩS!  nr_4Nw~c]ڡݠ`4( bZ|E.un=BS;RCi<2'7~5-=zxu })HSzщ *dkKhO8!ŧ'1 h3Kx@6,>\vC g|ڨ(m}@5ʣ!(QTьM, H$r'To߾%pLhC9y;$X{O7\eOOsj&FU"uXހ @^8#.i/fQ.-Ԅ5-5[Gfہ{aV=\2ZHÁ@wJ'h8}~L&Ǜ\e<7 ڪF討tKCwRJ It ƍ7~:55[z,QW7*^s$/c-ίH8W"Xe׿G( Z`@ `V‘#Yf :ܩ )o wt c?vr0dЯ %KIަ }OFהci\7|lvCOμfvT F fD"u1>8ƀCmq7nw<\>z:J-q\X~*.Q':E}L =ciOGrcgiXgԟLh]< =ZǽDMݷ9}q#&Ff )RPa0pF+9q7ϓ@ܸ;mShrt8*b8QY5N$Wy,?|iqDnz~%@ XOh?Ƿy} <=)ơ#{׉%űu~Eo"ǛK -h} 8oyB0mj>w8T`>陿.5Nvc! Lkwg[A3Ooszh?FC1TX_0NH.FDj[W@iT<_6 Kx\-%#;>9 *(mX[P._mjj*SZC8sHš'."'7asЍ_oL{RYtW 8%oP'˕[>zww6ўOg8RIspɨM#"QYwa4Pd%>z:_`]T}QFm<~>ށOdZ*$qng%J AKz|65jO>ŋ,͡MtIMO:LRI>7"2~r{s=F"N~*!^MyY*F6zW wӑ_Ut5gU[JG?dݣ{K+o4kF^a:x3yH(RA& @Dh4C8?Q<^mq3B[r+5bg5E`6YO58-DLn7WQwG~Kg︀&RV܍ k}0;W[XvYa$-, lCsŤ12z<5XգC"J'T[V4452[jdqxr:d4n 9ZoK<~ko婟c%^8KxEaRX?(<+lW9wQ'Ve}B3)~6 p"&O1{r\V;ޑ!f䦐6˻%# @(/^K/}Oi[r7ݜ^Dhn*1ʺmI@69C̍?7ϰv(n'apEγr[:X M78=oC9Ć^c ~85-?p(f&iK{Ђ dq pvt$8 i.=fbK7Z:?ȺtXyFgf82O`}>$`%v'a牜<G`.fhи X' lN^85?#F+{{zefNI&ؔIwDu$coho uLtX/tiw$|K'?ꫜ,rvz|w}GNZ)]i?$E Wnsmwџ?'_~+~AW.j^G:97[~9 9axίM?~5ȯaJjHopШ%Ik|^rjE^y{#o! ?k寗*E#%8xyd'L66\q8Y;e94 a+WΣbt }Ӵ=O>}58>$gRC$5/[yG2;G++k#Vژ?!fc]1\d>T#<8 @0 SFXK\;_'Pd䬾}t/W2ĨMLc =0Jw^rEXiE\ɻWnݚAQ_+8feoNcU%q!rY{ 7'4 8ɻL=qa_d7Sm}uϻP:!jKF9(I 7 m>.?[ل*͡fwXoZb=^[oGcb2+ss? YQQŵ"w]p8x$[Կ@zEs˲ ӧ<,}!3kQQY+`#hDI+se&񛨓 xk4zT_o[:/TӇI|eLa3禤?T6N-,sK `{/_2#CkwBu)nM4fz룥kDzhtq]^ o*3UnEn jWP˗{+S*}L UbeVhOo  LhUR̜ℋp;'l㔴AiIfTU M G}7;0NE@EBj\7>H=qW^~'E7A)ե^E4 ;l;țEVd=[{kWu}0 jCЪ}I+SJCH}h*%($ 6m|wg콏4s1ks.tߙJ~!碐Q`یgwL>8&}S?+t )dž@y3\z)r68ߵ s~3w]3\3I ~x@ae;c iOl_ǝrM~R۳gN<=n\WyK~Is Ztd&mmkz,Ҫ|W9< j=s$o`%p-;Zw_DYy^ ϊ`l$$۷P]3{)|_:yڣWȷOK:O/ nmmcFcΖ F`NNMO?>kM!Gַ&[Y ؑߛf{ ҥӧ|tx]ʼnC8rݞe=TyOZVZztr6qg}*e]ϣřoEɪ`3!`lāM>w%5W5+?l> /ܟ[.ɉ~N<˗_VЭ>xy95Oο{ټ;y ?`w@Z*6̲NNkQ_mi)l(1tjf9 9` ̊I-u}o*+ҪԬ޴nftfA`k 2>W$^YKn>=o*K+*u 3쪭cmأ#  ~fsxf3?zP`O]@ q_5NbsWVlܝ{_n Eg›vP2+6Re8>cS eoiOO&Ys tOGɂV8zXzCYp| ;p80>U2gnERS⭸y%ȹ_rxǀ%lW:Q-ɬ+mmک a[-ɪ^gg6ВV sedƶ8|3!3[ZeLk)Ǯte)r$s\a%@hЃx4vw-W;tdrS啵zP :$i{fKPYo}RKxlo*,|gcx'r>6;;Cգg%C%_Js~|2y+?;Q!'O,m\~6Ҿ~ki G[xR+-O{Cmk6zLG~k[@?4/1D0ꃖXYOƇx:~/6Lx22ɶe[cg>O=_'yO7V3|7 cm3V۵ƐlmuoN_=*mۨE<m@[yT@ ѯ<я1!Ʋ\af ;f{C7}G/VR ?+ [5(:ģVخױ?Ѷ< sgGOUe)ryڞ"Hgؘ4&;lSQe}:7l ;m5+_d H9cK A]~,m6_{SC IU6Ley~e)kݶpJ++^pةʵor"]kmͭl3sޒ아1`>Dkݭ{Q =k9  g2TJ |30ݥN1nx!A^y@tzփoQ·ڎ!^r2m{.Ⱥs1\*g+O4OUtt 3ʤ4 0zMʥ3]`Luk[2Բ).⣞pfvI+j_[](uV65*@73`y*(-OS9uuHvS6]Eϛ&^d3zJV*PVߎ~ cp#2LFm_ؓյRMnW~7jk;.1=EFf^苙@ zAѶiP9OrWHQ3ɇFZD6Վv۶@]DљiU ^="<Ցo@i@* , f^6cૼփKdEROS[۷-g8vL7U:(~n?**@TV` d7joYj*VZ#vSRR$/UnL}@k'ZݲY3qJDyNK[PuvlO`KkRtGD9|*0ȻxrAw2Q: 6*~ƕ@.a[%LVϗ ,-w  &`*]xhۡ oc]w|w4zy`Ѡ+8g1Hz) [Q&@3?>ѡSy?r)}TBr"{"dv~q˜nV ɗ3eKПH@p "g3SͶ@@T)Եn(7 ;lLkU\p{4`̇9?y" `IPx)7R_^oz}v&'& V]+V_ۭ3?q cZVĵxhx>R.~tWr(L `? >AQT˒'"3'7[U+xdܲi+?zx``* .m|G1CVy\ e@{ @"Mj#+Y|~6*~K]0u;>imiZf3(o;{+܂SSA=Rmц<2AO ؍i7 w%i_>cО@Z_`ᗺu׎䁵 8nv9e%;;WJ@!h[-st׿ͥca/z`N,+o+[Ђ2'Im2G#c==2L@`4.` 5 ~([?Fm]q[60@\ :_ qzp,yKp 5P6PtUfeTA/;jX52FeP`+`*@0}]@A_>wi ɲIENDB`ic08oPNG  IHDR\rfsRGBDeXIfMM*igI@IDATxdu2w &A@$%kd-#iGcGLd#X 4 %Hbhޗ}s}Nz]Օ]'ֹ=wyg]J+S^w%Е銡+@E:j+M~F.H]G}P ௩(}EQ)^-fV[_TN / CrrB{ު[Y2}.?)݀/rRzwV I!ug{(܃R~Z=o>PЏO:(8/e*E+JHmVY]tb}]Kʣ CYvlR=9e g F~9qq 7 e+{ɲJUL.ki)bpۑHq]C 2u . TQ σJw,FՕ1=g8p(wVDf9@bp&裫HWYnE`k$]EaUb A}yJ?.f QGi@k+;@h0#eeo2ml*j/$ݢ-Iz3gt>8ǮxN=BsBcrϡ,  0gBGO)YCR]p<-:00wbr1T]? 읫YA(*30%AƝ;݁))=OY0g3 ddiyZ;P )Rm8M~}Zz]`Sj xw5!8yLdP]p;H11MO1{Lm bܲ0 @/ipLicϝʲ+ezJT<슭SM"nZ";]3y_S=6H#/󑆑zl)Oq$ f9[HkZ'ZrZ}|pcȏ@ |;<ϒMA\d5WT0za];5;@ |hpQ  ܨ4-qǛpF]A孪^_veT"#C\SM$u @:p95?*}Q; ǏbDzY6PqR]7`4?3ǕGhGhc%̓+]jS]Цb6eo H/ ?#ck:t\hSh\rw)dv@]a`FN\t4RN5<!Q*C ꦫ*Kթz-/I("W "vCQ.5.]m`D6E"殞<\\KmHusѧ=|@Aj9h2`36НFEw5q.5@4L{D mPWq3gp`8y?R+ ʶM; 0!zM ?c  ~p:y`&*ˌq4*K$5eR9q݋ !_& B8~Y]zN] p\"x='ޗKe28@5> hq ,:#Ft)tFY#5s~8A rͰ_65yKtp`'^7gSxPwInQqTdN<.@AI1N 9FQd:2sE5Og#7\_SMMxGl/r^Η.#ڔK_񪀶ym. d4èG>#iف\eDb G4e&u  zsPUݾ%:ee&4@i~<#>"=NFmShfTlF|  Sp qu*//--2L2=pF4TT$/oiϯWByI]zrt|ok~WPR7x2{եdʀol*| nvxaH?T_> 4%ۖfH%5;}h,@22qÕ|RhXBG> CN ~8;Fsv?h!Oe+e`&E`*.%5;]S'xn:sub>8?|MLdx"[|9ȭ/.6l  ' "lmA(y>ȏnKYD=lr1/@DSOaUHVK479-gkYLV"Ifx4%SyxVW54V7$_ȕ4-%8K-$5-s?%~թg}YOLNܐ2?PF~ Ư^͎]}>FxFm066^()g@Y S~yZ_|=Ydv/R3 t @3G9aXVNVAOoo:8XQZM#?_ҳћ7o?+ $2b3a9j~ٓs> i {YCŭ)Ϛ~@i3D෪']l:.kG٧_|񑫇W?8:~jkk- =ֵ Wc5>ӆ#GҚĕ+aS;efۛ=H6{TZ2(4<<>06{]]V4ঞ ?Q I]( , Ve}6ogjdýGj0ӟ^Y[Y5h b {{bbTjח^q)6eך>K=GӨoc.Z#4t%:F|رllPF'/Sllmpp;9~Vr/Y폜GYqG]F]:Yf&===L; |Q6ܮ<$f׋(cigiv!>lVOU3v|%5hs0N?o \ݘ?Zxd]# PEKVK3̹6//KcH#dj))j6<Ο&E*^ ߥvvbJ>Mm#GhOo㽁8 Hkmॵ9#g^ׇNɥ~8 aB Q]JkVyo~92;ol-y;FXkrt;&~bm2Nۑ '2#2;ԠMS0wr.-$5-nRcįz{I-0K=JvWY>&8v#j­Z h1wMwۿnԃPA]{uo/}i`Q[Tmwq.J;&1˪ZQC1ߎXHmߥHkv U >G4Zޑj666gcNE6+z/,!$P>#з;7<qp7ݜf9pB眺L;5H) /yË!gWW?_Z5G 4r4g:ܓJ*O [=:BCׯf1 .i:~<͛+etj,3=՛:>Ǖ-pN6vNF฻὇=t;cq?} zTwS1.*_z Sst'̠:8&CŲ^ [b?vmכz?WxWW*cW%LWb_Ң8dqVʲg4$Oü8~͋M}xxGy5 ֵ,/IXFXj/ -^ߍ;ܗ2`*'v/qǼ477 ~4"'o+\+\UĄ0z19jr?*߂bz{C`FQFRi>888ۚ=UWm[3kk5Ob?;N~`uBm;L v9A;]!T-2G6xbrY653Ote#gUMUxP) 4aC?u`GCeB%qGVPuppb_|Zzn]6? vsS>@IߖI}f<;`%hV,fS91 =e^)0hzzyxv[##xE^n;rqf;woB^5 GG|މY%Hgp4 BI ;]3iGa *~7)>G8 w2.}Z'u*IƴpN?qbﳟLexd}}c{A#cTf=|KF~4fzn(I!?z,xX&,*]t `ڑR^#6Hg˛V68wH#v9ŝ!- {OU&&Vnuh諊#Gܬ$MNF%6ʜf?IvĴG-MMJVsMsc $eYGcCnWvfqzExd'>{{[}ONC=  Lm%ߕr|K<ϧџ,qEpWS6јS2M%JccU.X`Y+:of+ȍfsy(ާzN>~ԩ,?16/våyE"EN.jϨkwX]"a]8al;$ƏWߥ֟e[1!acS% +sy·nVC6Q%IC!k$uk~O_0(yKiƝxμSm]ԧKR5F(jp]dzA*|FGa݋N!r^+_f(# q9$K-gNdΟ$2p@q KNZ*pT9QȃY%}4%@GZ8Iu&f b,%ؾpx6{8\F'^ xJYhJ4kʾzGȷP>rz>KzMy:tx<V)xToU4,K`̿:I5s2hcr:~szҐy!~w|!gv 02~;O^k'C)n`иxgrr.\(jC=Ppb'(%</"ailsHf4_ /^T@^f~i&xL}T Ǵ2Vg6䑏`LYF8 WN9]mfFc}Qם]E4\2wUjAy$Q<#?3O#33e:ɓMlK{6< > A2Vz忟FK;7 kOO3}vRǦFֽ̣!$b\a&1+@qLQD0"?O*e!aVt 0͏}BɹlLgїؠz~IhX+ʼD{$39ow*S/&ƨo)",+k 0?Ű 9>pTjr)T%$"IQn^'ѓQ,Ap ;knvݬs5mJ#1`G 5bv´&\$F{Jm+pvsRl탊rO0vYvѿ72z=cc~׮f~s?O~3 J*S+P(^AdŤY¹J7O>`KzMMi?ǻpFf 1 8YoҝĴ٥u=&ry9.Gߊ\Z @z032GW]Ͳnl 9MR:}`HwU4#-R4vH@9^Q'Rwkz#r3%K>: ~lVF"ppk' Tfj5IF~fu"Aߘ(Y "gt }?MZ/}V&n׃UIgUjQe9kY} @ 6qv.OqU'>]ֻ5OzqgqZ s=)OaF@E 6"z|-R!Geӫ#? X] rz=+7('YH urInIVT7K8nW7j1*HGVWˀƢ*cGخ)@vΫ$}*6E8K/' <'KSS2J-mYvwHӨvMBJj \ISɻJ}Sd\'Gěp=ƨQ5bV~qN]23:" WN%}fHo >/f^{퍫g9Ad<&/[Q恠g Fx)5UY:&$"=)8U_2W?6PTzL}Q ڴ hOcF*u Z0zqՑ1L4Zq.%ťlY`MHO:8xX_ x_Vs;8nsè5q20^Uyց(H2"8BڤO4?}oI8TWAǛ;kCzF[I'Ά#`N#7yy<:I\-Ȣڌrz=$K~o@:FM"l^ŏa׵1F'4_v861[PN={B_y~ } fBT }}ٌ%I'w~yP-\~ĭHW8ICN$n!v=:x(M\+^O"39͸ r;S9ټ2}N4@nB~Ž: &C8; $m^tT9I4I=BTGgIJnj-GYPweȏ;rsƷx(.Wg&a(ȧ>%#(mSV[L?4zlyR1cӊ/PՒr=}+Ǟzpm߹P/f~Elje.gǒ7vFӈ%cؤ8Æǁy8cSTWSNmKW4k˧&"' ݤ~@ԌS76~d\vGP <u=LW| t@$3=˨7Cp28*4fGU heZ[hgi%sLxLJKtLDEL+O yww7t 2GqaGP_*K9\p1ieg uf~8斁G-5 A~!ӂNf<VtHuD`Z:FutZܴ H2ILFWKT8?,z?}2},R$+$͆R ~NQv):#i/ t)[H.;3iW^@tOhwLD): ER7sx w:i{o~Qn}}sʓa&8۝d _`64t:45 /:ю%M/1NO8ɝZXx{lffb}t!jǙ)9JGd}QUC+~s'jLNcmy\YiÌ̐XtFTéX'a%<IJLaqHr G(;aPpRI*'~P":ĄΆ 4X9r˪\+d('f~N(&&G`!1olwY]1.Ǵf~|,/r"ǣefYwĪ #w~s{?pD% g?" or_FUUD`OF@fTq'EAU+ qc;4]Vɏݖzc|a⨟?#?CS;&>w\+^UI1$/!vU{:~7i~D$=ؘxdGË~1Xh nh4p'` !Y0p0/:Em!tfܒiczzz04}Vd"}Oaĩ-k\9q;xX 5Fu؊8%Q;걠0pO׷~˺xt ~?eӐ`SEnF9RMq G~*OZt5q*3R.^8c~S3?鴫2Pb8qz+* /y"PـN{,(W'{''kB:6]$.:akt- CppS;.rPf1~RR~'Azj ΌU#W,Nso &xt1O9b.ol1Lyn*N7'(y" UVXǽ o ~mt1e۸ږ4Et#i^~o_t.r+R,>|4=e~Q<vN/*urgGcoc~ao7[˹NǛ:ŴOp؁{ޱɩ_~l駧{T7͉au0aE|<& "U1A BC[w5` b#֤鉀0 a!Akh;3owNȢXfat8h@}Om}G~/oO>yeuiFO }Omz*&; ́_7,QQiC8$d3INp(gֆiey\3{ߎuSmb"u _ Vf\yw߬~ãs#nkr ˋ`0ݾ.է~/?Gzw-?8j9~ ,8dQ!dJfq'O#kkjnx]\uoUu(7A~Sk\,*SNyxӜ[A9ie]%<-TY[\位9[[X;퇯lffU*-!آ|; cڏ_qYꏎ8cjSl澞9N&qҜ;H@ 3s~>~}byeXȴ菍I|Y^ X?y;y4N#=#9~<~SY"o'_N|/:527|U^s}2?q#Tͣ+":[!4F ps %-G~}]G}G,g.;ifnِi{wj3'~{WY}>؁V#>icK'щ]|&`:'`=b:c,x<܍/mIB%)*m`tFvzߘ.ź郎A,{>S{oLL}1KPFl7$~C>-@ވD`ޑ@{ͿxEcC2XwYx^]=wW 0mU;V =g tѮ:6] 3es @YUb>L1cve:#_[cGGmb>N&oH&"qNAsm|Ò v}` :| (PAts'<%Ƒw_k4 /#09=~^7fgאUc9)K+|.ۊAf𴾩'w~?̏_7͝9aohf@> 01nX/NgKOA6, +<.x& UܮfUӾbӣcczg~ŏ>*{`]3ǡ`-q^ H3i!ξ%/M/(/+4nr8 (؜SS>y/my1_mG9| ~ Wii*neC0 29|C8= }qDJH۩]cZ&r]m+..wZN1v|s?qv1];o^ǟ"+yIcGC S\vﭓ@IDAT`sp̃?0DonYY;O"?v~Gđ~{+?k@G8t5V[{ihL})WV$.eO8^<CecSN[zc=ĕgձ@pj̙?"pK8]f ~sn,ׂ8`Mm~ |t@qCAv߿~X?aW,G1I^ǫ,E pC՞lt1hFcdghc" #8ovHKkGS0c G;Un9eN=w+^+& _6 4FIE=g?<9AG$v @ȶ^ ǹ w~vԭc8Wǐ7:*22 /У>ہ+yÓ/~Rl~e{~}q+) aơji4wRU;MefnM36N3' @;l2ׯ%FGli w;]T+< U%;'du#w+ D?SAtio6; ˸h6Я2~`R,A(a7G@BH5oxʲjr{;,vf‘ƈq1.<;w˗c.rع}9xq$×χaP>>('coN9Gχ=窵 c=݆K8u @:)s#" J+ &a҈]>v̨X K}Ű"wyt۳eT 4"C9 > YuŒ62rl̙OO.. bvġB@{w$%UJ+r?ɚ֑)O;qgQܴ""2ey]eac|/^/}el8r=^" T{{q}|ƈe 8?iૣ7phҁׯ3<ɓ:4+!㽦ӧO˷>K oc`C`GN^@Ӗ@-g~;Ef .;#\D34ei⹮1 (Sb"/;\c,uq}i8 l,qr m7%*ԕ3_ Qd MIـC35'i0,^`^$Y׍]TnK$.u@E46[͉d8cV.rG\wX\L.0 14]W =qMK6k/`˥aXɽWyugPt1MX?M8LO㝿/wbYq8x4S{l™ `"'8r2*>H\+%1#`IraF| i/`q!88r>`G#fXǣ@yS}}387Q@o~_IvvbZ&o.uE?Ύ43(ͼ]ۅ]?'0Ŷ#F((GzuKokS|< 3O/-T9GBYwi~dfZKIpvkF 5"43q~B>0J4S½}5yg­_p#񋽏<ɧ8BU҇>]tn?4RT^ZױN}nI]c׬WxGexaj]kr$r_- t\!s|']CέtzK~ճ+3~~)7JdF2GWfffWgg?ƻy`"#XHs9u6 lVnB72x&4xz]y".6agA`m|x8eE9 Dhw{8RTfn5ȉmt<3ͨmޯK38%MՁѳg_[7_qNm4xMG4S6l6b,$]]LEZ@0i#9ߊKuļﲑ7K/;\Ɖǝy?x1<}+\3+crpzO%-SpCȈxx<\ kD4yen.[3:io3Iܑ%'CH^|->T6p0~BMFy}:IHE=Q|`(;mQ6P8)LKZSY@2 4h:#W~|R9}1P.RH'9Uۗ.5`@O8b6m dtŪ#\qdVYPǞQ'`O;S `ѱbh{/햫^xM#Y~86!H휷j)Q% :˱i<3Gt9mRdN ~2D f[P.ϽN*jqF0|PSNі 6Tc+<37{νݛ*RF@iP\Q^߀EϕQyb?/ᢟppǨ/i=meWb Q^GS6 9G``Դ(: ?*G_]9qksr%4^dDER?)jЂ#>#?Nld)/kqGtȳ+DCa IN׺9?HpwIJ1/e[Q1o 9~''QYqۥiV,p75^fS_#?+A͵/p62sr(7'7B`VPP j/q?+6QWtԋ^:IHʴYdE휦g+m(]eMS5%LS f  sh\;Obp;՝/|ߎ-S]X3`VsƟ 2$ LY3O4Ff2"+ZR2fʺ\uu.``ˠmWKr]Bg'/\N( RYTVk3O5t^"ڹ"" pk8 i}G*VñOeisI'0G4d75 Ue}d74h @8kl 2ggA oj&쵏#E*ձD`FaP3[)r40yېqk{]Q(pY  8!u,K@UuJ ߔ_7M~δ Gh&{8Nt{AwVX#+MG@|O1_X:#͠^Wx{YgI0 #@^\/qq1crZ&<QVOݞn2 4S]FAT:eߖA$ޖCT(N7PRt&I2.ޣB /@e)n]stgY@faM-hd(z龼aÇӌ>, :ϋ"$gQ,x3:vj⫯fSz0qB UQ4HQ~=`(ďk  k\=N2j&; 7HGVp_ i)Ӡ4Sgg@XpPQYq ץ-3f^ xvfFFuנ-3qh ôw:@'.i?$&>ߓLE ~nA_3)xS$G޴{``qK.=E}SˮM6N1XVyOY٦De"6vFYudž4r3S8H1Oġh~F8e+'}6)E&e]9y4!if+ m)FHBq1_IFn|@ѻɍ$#8!J]$y^ﵺRAl fJ)}S{ ӣLIJ79O3( ȹg ֬\B[7`,f]䯚 k9pQK6j:(ȗpNU8ȼ*$@GluЍ `>HE ]׊ 6k uGs]ҘM =(_(v-(8\Q Je:xS,gTQ_48.:]>rnIJxǼ}֋G?y1XC5;:Lv[y gYg{Bq\ѿDQntjV `&2xܽXnOǓB&>L|l`ZFܩS!  nr_4Nw~c]ڡݠ`4( bZ|E.un=BS;RCi<2'7~5-=zxu })HSzщ *dkKhO8!ŧ'1 h3Kx@6,>\vC g|ڨ(m}@5ʣ!(QTьM, H$r'To߾%pLhC9y;$X{O7\eOOsj&FU"uXހ @^8#.i/fQ.-Ԅ5-5[Gfہ{aV=\2ZHÁ@wJ'h8}~L&Ǜ\e<7 ڪF討tKCwRJ It ƍ7~:55[z,QW7*^s$/c-ίH8W"Xe׿G( Z`@ `V‘#Yf :ܩ )o wt c?vr0dЯ %KIަ }OFהci\7|lvCOμfvT F fD"u1>8ƀCmq7nw<\>z:J-q\X~*.Q':E}L =ciOGrcgiXgԟLh]< =ZǽDMݷ9}q#&Ff )RPa0pF+9q7ϓ@ܸ;mShrt8*b8QY5N$Wy,?|iqDnz~%@ XOh?Ƿy} <=)ơ#{׉%űu~Eo"ǛK -h} 8oyB0mj>w8T`>陿.5Nvc! Lkwg[A3Ooszh?FC1TX_0NH.FDj[W@iT<_6 Kx\-%#;>9 *(mX[P._mjj*SZC8sHš'."'7asЍ_oL{RYtW 8%oP'˕[>zww6ўOg8RIspɨM#"QYwa4Pd%>z:_`]T}QFm<~>ށOdZ*$qng%J AKz|65jO>ŋ,͡MtIMO:LRI>7"2~r{s=F"N~*!^MyY*F6zW wӑ_Ut5gU[JG?dݣ{K+o4kF^a:x3yH(RA& @Dh4C8?Q<^mq3B[r+5bg5E`6YO58-DLn7WQwG~Kg︀&RV܍ k}0;W[XvYa$-, lCsŤ12z<5XգC"J'T[V4452[jdqxr:d4n 9ZoK<~ko婟c%^8KxEaRX?(<+lW9wQ'Ve}B3)~6 p"&O1{r\V;ޑ!f䦐6˻%# @(/^K/}Oi[r7ݜ^Dhn*1ʺmI@69C̍?7ϰv(n'apEγr[:X M78=oC9Ć^c ~85-?p(f&iK{Ђ dq pvt$8 i.=fbK7Z:?ȺtXyFgf82O`}>$`%v'a牜<G`.fhи X' lN^85?#F+{{zefNI&ؔIwDu$coho uLtX/tiw$|K'?ꫜ,rvz|w}GNZ)]i?$E Wnsmwџ?'_~+~AW.j^G:97[~9 9axίM?~5ȯaJjHopШ%Ik|^rjE^y{#o! ?k寗*E#%8xyd'L66\q8Y;e94 a+WΣbt }Ӵ=O>}58>$gRC$5/[yG2;G++k#Vژ?!fc]1\d>T#<8 @0 SFXK\;_'Pd䬾}t/W2ĨMLc =0Jw^rEXiE\ɻWnݚAQ_+8feoNcU%q!rY{ 7'4 8ɻL=qa_d7Sm}uϻP:!jKF9(I 7 m>.?[ل*͡fwXoZb=^[oGcb2+ss? YQQŵ"w]p8x$[Կ@zEs˲ ӧ<,}!3kQQY+`#hDI+se&񛨓 xk4zT_o[:/TӇI|eLa3禤?T6N-,sK `{/_2#CkwBu)nM4fz룥kDzhtq]^ o*3UnEn jWP˗{+S*}L UbeVhOo  LhUR̜ℋp;'l㔴AiIfTU M G}7;0NE@EBj\7>H=qW^~'E7A)ե^E4 ;l;țEVd=[{kWu}0 jCЪ}I+SJCH}h*%($ 6m|wg콏4s1ks.tߙJ~!碐Q`یgwL>8&}S?+t )dž@y3\z)r68ߵ s~3w]3\3I ~x@ae;c iOl_ǝrM~R۳gN<=n\WyK~Is Ztd&mmkz,Ҫ|W9< j=s$o`%p-;Zw_DYy^ ϊ`l$$۷P]3{)|_:yڣWȷOK:O/ nmmcFcΖ F`NNMO?>kM!Gַ&[Y ؑߛf{ ҥӧ|tx]ʼnC8rݞe=TyOZVZztr6qg}*e]ϣřoEɪ`3!`lāM>w%5W5+?l> /ܟ[.ɉ~N<˗_VЭ>xy95Oο{ټ;y ?`w@Z*6̲NNkQ_mi)l(1tjf9 9` ̊I-u}o*+ҪԬ޴nftfA`k 2>W$^YKn>=o*K+*u 3쪭cmأ#  ~fsxf3?zP`O]@ q_5NbsWVlܝ{_n Eg›vP2+6Re8>cS eoiOO&Ys tOGɂV8zXzCYp| ;p80>U2gnERS⭸y%ȹ_rxǀ%lW:Q-ɬ+mmک a[-ɪ^gg6ВV sedƶ8|3!3[ZeLk)Ǯte)r$s\a%@hЃx4vw-W;tdrS啵zP :$i{fKPYo}RKxlo*,|gcx'r>6;;Cգg%C%_Js~|2y+?;Q!'O,m\~6Ҿ~ki G[xR+-O{Cmk6zLG~k[@?4/1D0ꃖXYOƇx:~/6Lx22ɶe[cg>O=_'yO7V3|7 cm3V۵ƐlmuoN_=*mۨE<m@[yT@ ѯ<я1!Ʋ\af ;f{C7}G/VR ?+ [5(:ģVخױ?Ѷ< sgGOUe)ryڞ"Hgؘ4&;lSQe}:7l ;m5+_d H9cK A]~,m6_{SC IU6Ley~e)kݶpJ++^pةʵor"]kmͭl3sޒ아1`>Dkݭ{Q =k9  g2TJ |30ݥN1nx!A^y@tzփoQ·ڎ!^r2m{.Ⱥs1\*g+O4OUtt 3ʤ4 0zMʥ3]`Luk[2Բ).⣞pfvI+j_[](uV65*@73`y*(-OS9uuHvS6]Eϛ&^d3zJV*PVߎ~ cp#2LFm_ؓյRMnW~7jk;.1=EFf^苙@ zAѶiP9OrWHQ3ɇFZD6Վv۶@]DљiU ^="<Ցo@i@* , f^6cૼփKdEROS[۷-g8vL7U:(~n?**@TV` d7joYj*VZ#vSRR$/UnL}@k'ZݲY3qJDyNK[PuvlO`KkRtGD9|*0ȻxrAw2Q: 6*~ƕ@.a[%LVϗ ,-w  &`*]xhۡ oc]w|w4zy`Ѡ+8g1Hz) [Q&@3?>ѡSy?r)}TBr"{"dv~q˜nV ɗ3eKПH@p "g3SͶ@@T)Եn(7 ;lLkU\p{4`̇9?y" `IPx)7R_^oz}v&'& V]+V_ۭ3?q cZVĵxhx>R.~tWr(L `? >AQT˒'"3'7[U+xdܲi+?zx``* .m|G1CVy\ e@{ @"Mj#+Y|~6*~K]0u;>imiZf3(o;{+܂SSA=Rmц<2AO ؍i7 w%i_>cО@Z_`ᗺu׎䁵 8nv9e%;;WJ@!h[-st׿ͥca/z`N,+o+[Ђ2'Im2G#c==2L@`4.` 5 ~([?Fm]q[60@\ :_ qzp,yKp 5P6PtUfeTA/;jX52FeP`+`*@0}]@A_>wi ɲIENDB`ic04ARGB-^WF=ǀF+iu/)Æ| =% dƆ$^l,ᾕgJ7DE-bE0  R,`D# dA  1q= &3# 1 )30DH33 ,3- 23 *( #)32)!`T /3.&lT^`/2-& <["+vj XZ ?T\^]}Y^ou B[^`h X[ioe .^^ix [^fR Z^c V^l|<S]w {Y6 XZ ?T\^]}Y^ou B[^`h X[ioe .^^ix [^fR Z^c V^l|<S]w {Y6ic14yPNG  IHDRxsRGBDeXIfMM*i @IDATxs#I ʌʬ̪햞ّ}~z_fe*8HFA3C(=$H i*4 wͫ)[ [ [,Pڂj#8e2ycfE2 peafpfdTJ]z-ǦZQ}`1{*LHi4/_oGGӌ)B>55)Hlt-и/[ [b,V, 5.  +P2ݨfCWq,$H HP$7mN2tx1w2] dZ .cf- > I!: +OR1cÍƊWStʿpI)-#'81;[#l 5n B)vT *+ͤX;1(:r#| pU[%mgBaSa7ETKv(6Eh skRGiyDu@l-/V*R+>8j+ʷBçүT>78Ub&+܈  xM `GkZ8A 7ow9 QCTm L]Cwz}v0[\X?ėB/zca6NPHo pHI0$!3HUН9,/ TzM*MwiptEJG  >:͔---pB&#ޗBǿRf?"FٮrQyҳ8ʡ/F[54 Do(}U 8G񚜒z; Lt Ґ@X ;X"b|.TgZ@#OM. P5rᖝ<t%&")!$kzu$Kk@mj6YQԄrrl=e87%*3e \i pdgͤ ,WT*z^YVhH ` T+Y'δAз`n7W2Eg6NzYpO3_Ӻ2d R-&l9:?A7LG&=~1rΟy@vϑ;-i, l 8 3!3+Pa~2<1JAcI@~hhpO~Yg,'`Ws 9EY)=݋q uX-ӕ@vO;-py5]"|/+sYˍ<])!aF]Rh: FZAu(b{jY ijؿ+geFAt048y%=:l+f\$w'[2-5Kk'?7 8Dz$2ʚEpڄ>'="X܂_oRSUOrh7 ӳ--5)[ [Y?W!n,|,ptZ $ _s\NDZ@L i vhuX㘓|T+4۱G[?+H B,6ǥo_'b\_"#[r-1ED DS%(scG8p/ʊz#i&-񄖣#/u"SG dXzӓ@G*ؓdue\3QWqF:q`3e~,u)[ [YW URaE97 @ 4Gd:MҌ84P@RX>Dp] ySY.))[JX ;Wgȝ\ ƻB# zP* r䊦8:)"*ZSQFG n:Χ2Jg@ ;O!QO nt-q71)[X ;W< &DԿh?)F9~ F?▍x+i" F$ -2u5W^^̯SgFuuYvxN7.PܠO.UD(͏0_OiL77bN?7yh@=bjApPd9r(u.o20ҷ5p @ =5I^!<\ rܲGnqM@*`Lmg |" 9q$7蛃r!5*r0C`=T(ou]RE6rpHU=PqMi.TcMG$:_bl˵@v.޹l+afv8 /wYˎ PQ.%Ar'N1!tQNʒ.TXQoCf~PũU9y9g3Hz&whYZ ;jX^5j+[ }-nkBgG&bbz88:q8dn9`J3FN/ƝN 3dž,gT0_;D7K}&+:Rtnc[uY pg}SyTƮ?Ǎ@G. eA1n2HHu? ;6Oa\sBy>?0y8Gt\!rnu !#;E2#8NNr]Ad\,! w?L.#&>ȭ.a%F1xQ_`[ ƆqAJs!萝8 (4@S"}]VJ$uN3~!^.R,K1sn$[ZϻhÅO Hs#qd;_[&H1ndO"/O~Q>pM(Cl AHŮ M".kzH/.S-4W-p,*F" QHe]^ԕm"_Qg{DՈK>~Gc9< Xlɪ*@[J.De8A1n=9ׇEy-ftE[8ן-pE,`e a$\ 1R]1EAH7!C 8yP;_1'u>ni)(,(l&ʐ'v,!#^ErS?9L 07BTqURI].C.vLfiO @8[ [b-t2-ptprY|T~ismK=nϲy7ݧ RU}Y\gFer*Ҝ8}v ю< [縒G8qix7B5Ϊ Hd9b7ޣz鴙d~. d\˅ͻ´' [ 4='90,'Gee8TwDs0sq *:zuUGy^iJMSɺiTk]䔥MZl @v.ĬlOkk# [TjA> DC<.g. @7<`$ʸ4p}N_%]q.]$^zlY ;33e([X@@HBB<>ЎwO$DBorYoӐуb8Y3.#}vXHigC8P$eiC,;!N_gd"@> EGw@]fnܤlOo!FWP[ӻخtc=5:IX_5q؏[ڍoܞu?ȏr9=(;_BZ1!I&tceB3GNS'?e0 ro(kOXA2T:Q(ƑE4+H S]rK3Gy8.S,c92eב' f!)MUD:O8D.'1SY ;g\s'P&$9m'@0S;-EUOӶ|< &G7PNs];-)[B,O i W--p,m!;\Vډ} 8Ket(+unc\O g82e d \ ,lvt*&OY8"Ŷi,q\<2(<9<i+H {Ӌ:`6 2N$=s@Ң\Lb,uD*%-Gey>F1`@0?I?B'?VrG ",^$h9@ ;9zO~N@ 1Q_wz+<#xhC iT-Sq>a?[` BH!M3zF <6e!MGNC[6i:|wIr@k8Ey#ӉCey#m'@`?.qi#r~3<[M f \9 P/tWpo;ʴ#CG-M*n  bi)7c(]ޞ0 Eb(QcDF@vk\>[jY"^-( >te@ie|л,z:xWԝVX'`f8' ]tĎx';-r{%/Δ-03 d`fe |R H\,iy9":9: &'iB,o?&ppDwrWy92jwPm?g@vd\([JZ4b<>A׀xp5-Cby䲸:q<?@ #0e~#I<0v?i)ȦX2b(]U"4dxQ*Fd]g@vd\([X` AA*w2p(AGu~8DI1G,,-2qx NQ>fߕ#'"[mIOǦ9)OL/b9-l3Y ;g2[.--0~:8bHi?h `+$ATb*8!(˥G#n:qmL%]@-kg98B"jcx;82ig@vd\([X Dۉ[IH=q,dtyG9ˡ# @!;Xycc$cg`KR{'N l*/݇̇u\ZM4mb8pj `q I3 `І @8+4\S"˒ู37Yh7gs9y:E5[`6lk ,Dl{OxɈgZ\`Y8.K^t%%sD0LQGq$rq;)plA | N)Jɪlg\$([` 8lstaC]=E_GXҷ%T`G@DHYG~6嬓 $7GNGvؐqp\Nb쪢SLps7du`v0ݏ+}+ _?S9JM99o#yi&XwQT&Ne\9sYYnWOU}^oh[?] oُt\BG#= j io (qw2q\1m8ah|o_M-YhSyh@!7; [g>)˸e/r,ls[ ;6a [`(%wfnQ d5/2)l*z5r(@Cy,7 ЯqpK[sW76*KZ(gw!h@t8 sv,B6!Q-"2m3gok?_ l̤C[NʑroXxԹy,Sg8p.3?5 |z_oz_^y߿' _P=پ^;S59mt5H8?EU)v1i`|0c2W*q;pSpSM Sঢi֓r.o47<9 a,0#CjNk_ͺ; y%󌾪BFM?{ꇇ8t~p/lnV^, + 7ChPT@87س#KD' r @69!hߞ_GSyZ>~Wa($ wcڸHpys:ӣ].lX ;31c$[`z k}]CSź{V߯k﷪g=-浪_*d ӷ!'{?J&hPrp9E`&':8dntCgԋ@m՗HJOXu4N\.~|$Ooټ\*9yHb-0א-0 `ڝ;w֤ņ>kگ(lWo4ſ@=m3~gA @SAAq$O>@kN9Gv\HF8xDj;#>ЈWm?2 %'t;"CeE]C:d]Qoc2ir3e s%[` www絉}M3^ylVz `|x=.i00B/s"h87 ={gFȐ]:;ȐmrykT7ߎl(;nŦf^'ꐡb1-;h|ՑӲ@v5ON{zM9/'jAri~3E9aV=wˀ{dPw^e `Z%ź!2!S`''}?UPZLz<|ߏTaMYgӐ(;_䱾Iyb(/]g-pn d&d @?T766jgϪZeu6h__is~}Qq68͝7Q?IKq/3Lp~9H< !(>~OooZ}Z}g?)#-h"`:NSE^L+Ƌcqґj_u%6[ /+¥/qz^S/ _=zƟ^ 2~K8 8z)X_-+|No}%s3aCo:#/Mv%Fҫ @Sԩ6KVk}M[{{zՎUlt(dw^Vi͔-0s d`&D /RUZʢ?.FkqnC_ӫ|e?,@k > 7+ЖªXk h~@"ig/.V+{ j}TG:rKm;dM.T czg_V1uCNߌL3@vfn\ @jtdt"):zWnV[;;Mps~En};)si`.fԋб8 ``CwTar:?(e'Q NHNO38/ 8BmJ7`&#`*ʓҭ?MuEel*!e-0S d`̕ @íV]Zˍ_whֆ;-_>vv)&3SX,}[y07 pc^2jv85cT9=rw۫[*;<.-7yf9r2,g IsZS+'|wu=_3a Hϸ?p:.x'~(\ieRY5=PDEs#sfS#WZWN jrr42=ӌɲ9zwü/]>zOO:'N23,;_3>?ѹ""0X[¿--hhh_;%K֕|֕:' nsVǼY03J.7jE-[}NOtU-lpGN{i2Lu/Jу6phOO>f Tʷ'X|׫t@S[n1?P]=rLxӐf ZRwѣvossv+Z0hewu.c2[o>|({f@vfo\glP_kh1_y @{wi#jM״״z <.~5 Abc>? $H{./ 鋂z+.'7 f@:䝖;K~n7_rc8x~ v!n"6gcXeҋ$H.yLr-4WZ ݺum>\ѱ}jU k~k**9vUm0>0uri4{8[9`&i4_ר{D4l/rç%rH3nw*֡f%`i'q/+7)-ꧩfnܤ%U5o[JRqk OJ,z!!?[`,,,:Zٙ[XX}k*}&Ws^qpݼb+M`AJ1{ha&]w7|Mї*k_OHz[靷c̳.:?4L7tᏦj ohWwW{~#98^:w4՟͓,K/ӝO9o-s0Wp^ +R=Ji&௅fWU@k|Z7'qXO9>(S U`E=qq92.Z:qy4y]&lK@v.̹YX ?s٪t4yAs0xs_kZg?b9خ8< ٿl5킿BkGIwp[Ç#YLM;LB- lMN{}}jMHpg'6I:G&:<M0NpִXG.pc^єVK|{{OoGvC`2Ox/ ͐@Cm/Ae* Np.cKkAYAåכz%p67Yhqpi8M}9o-3.h paw =Θ3 Z//BrN ~ WhfP ~K[j\Y|ssdssGIӴ;<>Xf-s<[J[ ;W繹+?P74Ki_F?hoW㯱"?|^ yF3R| n>- 9zpAnYVـy#?އ,;hteJh+9-0# d`F՜ y=Q ꕝZeoVq"|hy33# "Qnd4[8ܺȑ{5fA<h,GSQju9tww՗ѺTMd9*eoRX߄ci e![`,8KW+wZV[(mM5} U}ouҙ$8\CiŸq8ySrCI]sbb|lOSά8pf?NFl4\|{jCƺ>'G@KHGy/;ǿYf>F8Jg>nT1\Bxx 9NON÷y"GΔ-p87PfJP LT0tjk../&N6yԥ Q(w8Esi<.i\..ϔ-pf7V Ϟ 1JWk/(]} 3XXc$~' :1ϑD' `Qu>tD)k4WY~}(2Q.l @v.Լr,0w}wbׇٙ{vjv{MѳIwlՏ-Q([j{ 0r>\c7'W؉L8Y> m HEnE}xY~;$}Lf9[B, 1kmoo/,//?I UUe ̧̻Ĝ ĬO+}-xzOX_mOI6yuNsnȤaH˔-p7}odj\xG2j~W yX xӨE*9 ~OM.Oۦ)ʱ`FÔmu9rz8̳ltILi@X[;A |GHaMHC}@ܴO)"Q[ǐ= ?KL(r4m]6]uTG,|ż9-p!U NK5Buݮ}:m Zc_Ѿ/m}?Jv#3^2O/Y_E|okk~矷߽-t)sLv료qsc/zȳ.EY ;eRnܸ*_iGpM5ݫϾ=Fc]=s^?8h3{4-|b?E$I?[)-i7/f/]ʋ@IDAT$qv[j޺uw^oVV_z@фjGt-q7:8X)[B- 5<ݼk; #UkpO=tJ l *~|`ZMMp%tKKZЫ=oDSZ-NXgNZQe,O*.0^GL%o4uShY_aU?`3h`HyoK ?1"Ϛʀݺ2nݬq.IwX[nޢe.nn~<8`x?#(TD7^O\[ҕ(kzsȝ~k"r䲸e,[Wf)e.[`&Lx=+ _}Aһ_fk7+',9ᷠY?KU&?MFSҋiOeu;/i863qɔ-03 d`f&I 0dxtj1ͯ.ҏ6G3L7[K=OV aZ3ohvFsZv˳e>Y-0 d`&f>{w67wv[[I&oNw0[ d cMv[7= ^<3%=㯰l˷P;ob4r#S-3z oT5> ֕\7oͶ;?8n%1c=ӿ}ͣЕcN>'z9 Ôn|v'pv3ލ?Xy}j+ $5(ҝHߌs0H{^ɁJi?$f _S7~3"[p~&|+mt9bK`Ma,8p}EȟrSfRmj VA4OyNg>FSzL#(#wf丝c 0n*,)BLn@R>,R{R \sH>nPm=s}wlo4_miOvY^\鳼yL+SR⎓Z #' GA ?HS8i(dq?c@Zn-νxrw^wZ'1[> c:ua^ffkGVM2re; %V{RZWLZZ ՞wYW*pWZ"Xɺ"w>/#'uHD_L.Pnw/Bۍ_~_Ǟ `F$ٶr>61陲fbk"Fe>mYks֎A8 ٲ}g_J\wVj!TxpW!;g=+.ܑXLJp\\lnj2Ѝ߁j'jk{ntԗȕ:յ8;~7.ċa6> -#$n`S>7*G#`ݺbX$*?SN{/QLc \)F+-Kx pg,.@?p۝JGRٓ:R*:-:Z:pv ^կ~5a~NlVtz/7|o)4_ڻ@:pvs+bjDاW}[b:mrhW\dӗ[_ H'8׏'穇~)[R]9"uu|)\GsWHb8J|+_09P:EMKw?>Y9uɓt t,ppSigO<%ZoU-iN@5ఢ7ș>/ s|x'͙?Oh'֔TtUhP_лk sXe8,zf>hRSYJ9Eu]I/JGWUc "n=" 68*o@4RIz"p&r.'t<.uM94+~Lp<VwGz^ѕ lot/ 鳳2Nq~o뼳#m~_GN:!g- YeYuͯ.VmFL'[RҊs*aRY>S vk=<]OZ ū<\ = 8AJ{_ޢ# V6~՟Po6D4m*ѻ Qt'$th~~~Ezƻ77WB?l,ocswם~4/tM,+]<\v'5Ⱦv#GN\E;\S݀$y-puN33Z7:85GD+O J +DD>l M_當"A>@}ދ]l}7Terz0w#\;vM|xeNV'K`O}|xxpPr]+Yg /;b3bh|\vN/KFOTsϓFGg|g0Yww6ZRGH^nJt%4:ۗp8:b@7tf[T {z} 1w}֗IR<6q2fo IK9L~uvYA krxŏ<PfO'O{G@Gm}NNt9[7\&?m[WVT,LrF8K XC8$~&cxT眮ߡWZ^ֻE~~鋁 5tyOߺOB"SFNg:j>Dgj3 o=|G!9~s(GṄf9?:ڤ.#E5(U~U?QSEMQFyԹ̐//w++sz=䷠E~>gH'ӛ:\Gd5}hA- չ9f{r}{KK{&[JMY^G]IbbȮ>@)?[ 3#mMWe|3z׿b]d 9u5gl'@& _)WQ|HWwYf-J\J߳?wZ 4*rDVV:[ 9>{ic/u3ᭈx̔&[@~Kyt!0>d䜔$= j =B>T疎œG6g]nK3p W|3[)a0r? qn%,m:zhx"=S2r+>S }F+gvdn:nG]O7=]O63N 5Ө酞%~>oC| cj1S@%YJU>IcI:F|Vf$3ᱦ g0;"?mX:N=ϔ-0ju`ՙy_ ,\R<-+>7n l%|G+:|>xn$Wu@`(?z;ںj~m;'y5RZxue=suM/kxbڟ,!hAvS6uQ-OKiSۡ~#[ 7davVr;kw77w޼+;%aF~(nFV][&tW4 ~[ _lB5[6sjEC&d-S6ʮ n[f"MrZ(Y ^[҇{n oԥԴGW4p[7,hvU>Sh:_oT 8 rsȣF_ѧ$~>*@̋rJIni߾}/kƾ?]`s9MG涰.Cܞ3e Le3;xpSkߊmT1,3GY쳻ȕ}7(_uE^V':2<*7x-DE}ZijZ+Zͼ^Z(YLG,j5ϫ@Nw _4{zCM8mB?:4ey9o٠yZsK3J}qq^xkt3x/t<8IyͧG~nS)?(L4gvRgK;N*-]@~Tdx1lGoY8Dz UG 䤛 5G@zڜ$·zVJ zԙ8'rg $ p)0M-1=074L@ҟd$73 ZRY\լ zW6qk=Fqb>l1oKS$? H&Y`jI[ yMm^hmk|Tgw[~uQ etӆar8(]y,c1 ֻ՝Fcn\y}FӽmpӶi[<[H+`GL\l-nB%?]Ϣ(yrpFy:ig쀜MJ?V?̉Qx%'`([?ⱈδoTkqp;93'9 ƆѥVPβy~ E~h#_y%z꾟~ZZ]hmUӴ:醜)[T`oҠ8x e ix$<[Z얮??Y:on.-)|2x^_NS#ԺN.-~[S5tv}/ƶ.LJ}qpjosNÚ>㲀?Dx->Գw[լ^jdA7*|tLJ |8/? (rd~rs=7^=-saܢLbbY q˔-0S;|Wf=O |HzLE9O8?WRJ(;ntvIHnv{~ՃVi}pc \ʙ)[?:kʜxNj Ozn^ɜϚm~_kQ+{uIL>/y5VWvv޿om ۝oS6$G3u7ɩLA_r.lp4ԧPkJK4u#V}ic7ޫWowοk_ѷ1[upu1/q4[e2e #@ 8iN>{'NWq^t&qI1~ )rQW^ Rx)sZX{)p)[O` `K:a@>UWj>h[Y?^ӞkGCu{++?/,4~`/ْ9'ߚLC4HHw]l$PleHspTYX >;}\Yy-* /vig< ͩLbYf|kL?[ t4y$N]})? 52% |̆tNN3 {6(8uZvjg7e+ xq 9iݜc1!fΔ--9'vҹù22m>7NzC̓,ptOnvUv9PSj:OLi@?pQ3ځ3y3|Pee]H7RՃT=ruG@Yڳ#@:udNeuÄz=<#fzX@@z?΋I&-a&6]_3goƖԫfcnݺukp@K+=})p0a_M6J^.uㅛR3X L=p_&!UE̢1ġ89W9An'2yiãҬ8vC̝|NlbM@xՏv,C6_"#<?,䕿8"s־Fھmeիz#`s7w&o)ܢ$ttnmiR2 <ɂ/8|뗈/e)EE?Бb NǫFO>en7{[Gml򹼏D\/2&;e3>C֟?M~ӎj>$ +3\*VUy>:4 @UBOS3W775?u\ێ!-\8S#x|`H "W@P<̻=lF#p%$T>Xɶ8g 8ԗMqˬvhދ{q(б].;u]#Mݙ:vv.Cb-%ן?ۧkG5IO[~.bdQ'.vP|n~wOhMXD*v%~aNg [GWp4oh.<0oƺE>3pkw"a g׵Flt#V"cIَ#g$Pڴ|R~v|vK<ɿ"'}{r@⇪`#]qxf`+V#A-X[יg;|( H>ϐh'|c*C|pQj R5 pz)v:Cɼq,s>m9=0F`oM7upC#% (L~֫W _۷g!l+!HꗄM$~L"cq5Ɵۊ>7aE @:׷hi ?'ڥd0ou+I\?hd#,q%o5O=7-tACӔ1Ex0x@x4b|Pm;a9#@+ڐ$MeRg(F'>iEǷ|v1غ@Hqa@G.E<(j;s@} R:Wn0 a.u5? ?O,Cd+AJ-С gQ3xF.:˸Or=,aO|4d -[ۦ 0/&DS&ۀ' ͛[;Ѕ:ui3xz`H3n#ďm':WϽx_+ԓƓ3KHta FoYik^&WXׇ];(p7S@ $% =Z26(xWbl$u9sI6(~OW1- C:&U/$'#' t #x]mκ=rI6A.XPH`He\?nV}" ۺ>wXTbCr5mN'D^(sم[Nm<vN$y'|0gh'=FVwmWWm]EBzwKm ,ad#O#< ^נhC,(x^ m 4#u&'sV^? Ch 0nZ_hyYǼ~咪}M|wgJ!3aa"JbIfNh%>y7߇>BW+KU۱D[q_!6@ l00l3e]{ʴ_p,Oh0]d,}4~y4>d:ۛ]؂Qvƺ϶}DvT!h)9 ~f#+6 6gqGEtЀcgH/,($\-U*'tk-廱>+xs>l돁v~7/=oM?z}"錡n馃vU]ǻmesX,#D ڊFS}p{V  ; kmzƖgl!isWW'Fx"PR]W xQEɶcQQgδ&A(įm,+}>Yz=|>h~+s+$H9~W4ʎ1n|'}cc0%_I3O ڥwqco (n ?3O/6(o^098x~u~vvz㏟䀗L{.}6oyЙ t co0I;pkIIb#s {l1.>kPl}p7pd&ei/ce:~ccG sϟ?o&Orv[XaDH,AW~k̅˃я滄a\տJ~6[t}vtmrilg>iJ|Bخ<4?';܏C _IỈ繾Xr&zC1U8g(v|PaCbP O$'dO3-e>Eh}qG`|ޯgTPiEBuΣ<>rAz`ػ. h~molg*[IA OOxz{ O涐zKMa%$P2pa)b[yJl;vJ]M:5Lt$'}c/\xObnK$~DWNϗ#BIsg> Ⱥ·y/>3J0TvGkJ1IcK]lc4h Acy9Z]0=e=64q^I݋k?W,@ Rys]kw^7e lE.5.-]}vCgp]J-g` yY䣦*kBC hi✯ 9$}нǓj~aft4*܄Z|g;lGxX*yey|XxavNft傍Gף{yq@ɞ藗/אm@n'q?F16dCWd{k}':Dݾ>4g7؏ӓ\'Q7/V+, N?? D5:/vFEh&vK:@)75' %J5EѤۖ=-v%wIȣ @V#8AteZl]6eL 8lܯ# ϺE2n,dmӧ&v1F9{`hսjjLsZJ~j3wgŅ[v>׵M]M]-uδ9޸J /yQ-~Y p(v[[{/_|\~zt鯿0KkV_k#mXG`@臭)jW#f&##*R:$j7 4~ yBㇶԏTe}>?g$\WSׂmف_h;y!@ 53!/m,p `YRynM3oqng?L#RC-"k1À[*<bٯ gonlm [_??yO??ߧp΅]muvy赴=jsPBjļ-gT1M$]%I9G;zdg /'>D9~@y .!oWIu_|TN` &rlk},qA)\OM^?6] H􅸟16 @ -7<]t`}wfu_Q_/fDz8aЙ/l"}hXj箁~#46eAbbq;$p,—ll|ːJ5?He/θS'̓?^0~|Il{c|/jc^Ct>d] %|Tv3@m 78.r:Jw C-jsYthC4"8kv+/Y t$}':= 6crE@L<7\@} h7 Є>B+iad_g4mSv2,hMF)A";@>h]l_kLLcg8e/|Y5a_* sn}6=&m,ARHL! TyڌEHE 0Je%}:%RO?]S\ձ̸'/\ݞ1v]u'`AnHFNx J{,53G@Q&2]>DJU`ǯGG?Fxo028&ƒqQ* xt[Q=%zP  1,?W `GrkϺ9`xxo p[`Ky¸" O bx,Gge0u)Աҵ7Z?`}.GI%^<ک6;G"H]Ik_seB(hR>C :^nKdط =:ۃCNo ER7&>`*DH- ]ѴזO./i 7峯]'S4×eMסٺ]"@IDATg_ڬ+x1&x0"`΅+jRm2]"c#0d @wSCMujļS3ɷ1f,2f$Q 7/)^W,l5pؾѹۙ/Y^j.˺ۉO\tW:'3mܦ\Ý֟7qՇݘs[&O?0I1'Ʋo^GvK!> q! 흴F ݽ7o?诂O鋀rrQsn,k4~+=#79hEk X^gگu|ĻdDf4xЌH<:%]ə~e`e- wn; y@Ka\ &}÷0IKW Yu(#.1j_}8@m|nLQf}>\Ojyٞycmn  <(J XO[wDP&z-֛7yzO~џ_ʔF S&ľ癀XW\. 1.eq W  W##nluTc>=92``p.ygf,GgT>.! Aim6 x;-t[Mʘ+ۆ6$sԨJA=7d2:-`zQp-j6id }NKd >?%+3I N,$N"hj&m ?tQb*#[7֗gwoqio+փȶ5-һ޼~tfg{} _  +Nt,nq+uM'] x*%p;"EaSJh` f@ԁhQp]x{z,j]ݓJ/_ ^0\*U82CH,&Ѭu,h+# q;@7uҏJ\?IR%]=| OYWB0x{>PlƮ#/ml,Ə=t~m/{Y{b7\[C)s=%Sc{i+|#̿*.< ǸUh#G&%혘wI x}Γm7A#0d@`ܰ-/,ddEeGÞ3u7J -jѝ@GX/OvNY|-s[7뿶C m5^{o/C9.=Nֲ=tɟ pFn48a|21P̶qE1ʶj}"`QF[f1ީ<_x8P,Z\f? D ";NiЋc~ Gܻٙv=d1t?೘*tol*n),y% [ڝ ˍћg ^`v06v,>5_7q韄uCx]͉F=g! I QAu$~껭3yƶx. G'S&ɡs{Pmc˲,і$Xlkgqq,j40 2i)Pfyel^ҿm]_wS(<E4`L> 37-~Z|U8xUQ\D;dy^ +6o Cd>[æFۏ/I_8m3~P<7L&,C [uh׵G^z 3] m9֖/6웮ikslص2X e'@q@WH " 3޵>;cz ӡ!VGUgi[lFx`3}d u5G)5ߩs]KŕcF,c)u5Nd\ʲlew[Ak3aGc}oN`??`&t`;`z}Me?,uJzP=ޗemwH|rL_ m,6봘c/ө\5cRmмQ<=`_?鯂?oH)[߇kv/ɸc?r! =,BZ4rjmk$Uwmٖ|W(:>'u(F"^0RYMx W;yאi7w5uC >>`}(?-Ijbp=lS,-}&|t]"_C)^Xz%~fOEJEv5ڲ]L7g:K*@\F|`a3B&֋?hkϔv׿|Kk o_1P:h-8ۘSrg`8-"fuh3vZ̸=ձAg!Ň#-•g^om+g[si'2Zg싢jrel+3m,U*-6,{]]e^ŀ3x 始GLC:;3h[\i'd06]bםkҍ[ھk/>ccYYp}ڦ-7..u?ľǣCih.glfKH.b3Ġjclo9.߾BpFdN>8eˀvi72C}a14M ;>,\xcXhyF2fneyI㢔E]*U0`2 |ɳW['LT$=i_,c_W 3t&7xPby`mgINM`" s5򌡁집,u>EZ=u|L2b_,c Ч^g[t[;\ 1_ mȍ0<MgjSm,7]b0~? ^Mʉ߃!|\leЖk vN!!F+r>:=uzvs:}flk@"w` V|^Iꨝ<'#47g,k-3Q,֗-ϸfSQrE~;sO҂Fnnx-?ľfeqGm+u2XDy[[h$#9ea#Ԕ+uhPNnS#<,@=<<m459Bd̗zW;M&M4Λk-^!{+Mdt>6I0xaGcb]u>Z92Cnh(mL̍Ps84xYr K޲v݌mkuM'Հls}YwL=-!WϫN.-}>}ו @>v߲}B mktM6/c;*O B5GV<[gӉ7o|@#9ulk{9)е"qUmsbg eCe'_~UMų|n}R5mNnlp&wFdhuowE~Lz7:l+n n46CnwMu]ק;ؗ~gV㐺*mobwij=%'dӄ?۔4Ȳ 65 o 3\(@ -*}Y6빣3ɳgg_&S9tM91It']$": v QC_rv?U}i&nf}4>BXn\e隽uظ #S @þ"9(K|z]Lm$!L@?c;b }Oy;y?<ӏRL)žw kYgk.<:vm 8zBܗ|$aD`;TǴ6՘;, 2on7T)L,<1(7:i ‡0:9 vy1 m[d=6.s{a[5vCbKwϗԿ6l9}\]OA.U/1phsgg/7vww߿?wcwӏ.%A<ZoYöL/10 sO#m`;;  :a!}%UaOѩK9-Ec.;^$FJmU0h~sqA7~ы7˺emI^Ə۾om>o]6cc=:J΁\1eD@1Xzypp+/O^>'|Z@{<,˳,ӥN.=lhkl&;`d4+҇>`gwrO-Ab$[dy~;Fltyz@cR'3,>oJeȮkvʖ~e!tR;,an- -x uCCl"~N^ 6h?"}i_|յq鷕3nctjY0`(z#̋ Ң⹷fgq͆>dy3jy}u 7Z@e|hmv"3o:[]0>oy L$ į )Xope +Fѵmtɥcg?m馅ײE}ͲyۘgHW{QۋfH?"Cm\ 3F9@n#p5{.%޲e1Np#p.I;dIghA7.~XHΆ12bO2"<`l:Km飬S}1uJOKE1+/~>۠<>:yP4mn܊B)T5 ԫ[_˗ӯ_OV٧OAL!){n`EGr/F7.="j<g[ ؑ;YzزFsiS]|&Կ_fz6=ۓ@MW\T2 ؋M=;\?y~j2c@(?ߧk)>S<z:>\]KړmV`E@wL#jK<*:23JD1-O쇂xb ד0V^t5 }.Vg,϶Ws{}(ᲯةU}{mS&@ŷʪ#nmL^xٖnnOΦI53aP_^|<9W`e 60evƃtAo_2#\3׀d"$WdÄgU-ju-mV[rcĦpünMqgEu7m'NlK>-fw dQg}2ߟU}-t'_1x2ۿ\q @ 1z2H`-Ȇ߼35FuDwdL Tl&XC%\n hÓ=⅀;y֗x}/PxE>:ur피m- ZUo S7ƑiX}9{쭮ApK(rRV6Ӷ`k>#tțI}(0h1/qicU>B;hc6`UBw⏉ uנM zč'{/r-_P(K?5P@~w@p ~kD@o(rd\'b킌Rel?u`vѸ VHȀ1kx%xAdy鳱h|c7 fusb35w;IeA3ASq '_}0OGE>})^}>Bi_ɲLic==ekgJY,L1D 5pcCa̼Şwo%p'X@;Z'd'<<@0Юd,mi~R~y=A׮q̃)tĻrΏ\ܾ~PK?}R/y|d|UWX@Sb|VGќ'OaVf] ޸fSʰumSh/_D2H1]Wc^ 0>2|s}CS sHrP=S=23|;棓ĂMKvqƲğm$c_XMZb=R?c,GןgMN5c]'F8BnM1JKJoGumkM^K:>˴m0Fg$~0+mOv}kkoٳ׼wN~ozB:@C:޲>,+6ԳOhОϡGGVӹŃ$4'xclL 蜊t^cp俭n3Δy-ݧ~߻~D\20s\@;Aw2󙶾^GF{~j2-á ϼ;^ٶ'1cm{;e(ܫmL&kot%}#`9O5غDmY#ɐׇ ;).,In}lwA.r ŀQ]cqm裭_Ͱs-&>:rS-t{]"c'je8](2]ҏXnl\ցe~Ocg:c}~,')4@n֔YT6~MoIa8B)7e},k?y>l!:glۇ8+R8jhh-o8q{.+EoڸttŮF- 3` ÛXf:A]\7g2O#T"07@g\EzY>v.~Ee}~ɭ+}X M2tB,i +}>z>q۶Y֟pi28aU0L={w7M_ErZϼ@8)ޭk|@A\ Xqp2PT# @]r_ynC"d:%o9xn>M /j6 +aלܑ÷_ R?9A"[mt?҃# ޙ￾=/˗-NseNؖ1_ޤ'\ 7~|[^,@9XLEzuirv#D |Z\˰E瞿k}Y$CoM^؜Smgm@n#ӫjgk ^UOԏxwmoϟ34_qϞͳ+,[e%'gfߋ!a :xaW2lr@le ےR;R# 7\6ua/|ϙ6ozUM0ov%&]`aE"`kcggg'g?~nhϛ.m:7 <0Xd% :#L| @s׉CE?P~^)wNs]c 3Hn۪ߴ?7ݞo\=`,q L.A1S>CD-`]2o1@LIpC @THHPyOl- ?MM/3:͗vx (m,ĐFW aPA`Af#<\%'NGFө}%ϗ{~S"*(| bR,HFVM`|Px@/(x=nse-3|jPL7's؏ " ąE ΃>r0)N$|/2F`hyIy>C1~IFx0 2s+Ār@̓,mBج,@IbX`gm}cؙv[V)m]U]Cחw^?}󣣣O?1W2=wBgol=F!.-d309>^>:Zh!qz2N(T#<<3/X-$4|2mK}kE^T-*7I;4'8_/Z 'eiZ5ۚ,{#^5mG- @'4~잝]]liҗUNg3ĸP$0@؏$~OK,w:`Cקw,9W[_[/^L~:R.o~}Uw<̷SM}rc@ɸ wn@L<'_` <ږžDqp?UB1<DHy:%'Z¶l7/Zv5<+L{7L;пnKӕAuL\_N?+N̛^зEqv"xm\ *{[[yB2f7>ڶ0u  xīcIv   4Oó۳7=FPFImQjkeyB7}~hdwn˸=ZhiUlþs-#f)vd  n`eR[T ٟ>> PJe@PO:n˄/"^Z+Xۮ/=z8k޿q=loJ@s̗fk`5uTu\=:mE1,(_>bYvH+˟W-vvoo+Џ/8UuiEU^ÖVImlKCYN!^){mis&bXE w9nFOs#l`;"b" |R٘ysc;(dEm#|%,'ľخO|Mn{^Gn#uuYm3\w(m٧/"2]sf bV#9YݝzO)gO6Vwm-[񢶰ƙ8 Oڇ--5}|A5N=}"+e/.^:'qvxxpvy&V\}X$biT҄uL^LezD{|˴mwIg_Yg92ڶ 羯o$}ݖU#^x\+VnlGrRvdХk6ʼ#øhr+b`PI>ͼWg[T|22e>Ap^-kA&< f<4K>jmE|"Ys"}>"se@d`@2㭧gӗ/M:Zk3A[6Y Jq[(EpD")T]D?^ WA|N.0>IǗr/ͥ|/mg}uJv%dCe+r-ܻ1XRtN΢Leݳy̕GmwKMû|,f [ʁ(ߛE, @(b$D9Q*օmkGA@`Sp7Ul}|:/GRkcղ9CۺNo6VE8l9P7ZsQH [ø=0­G /9 >2Cuwm=?rx4 "2^ar P5&~G3a3c\&r/^ yS;:~Xb]d_k>ɖ=_Nc\)esl9"c[ >ֽf ~ۋ~tBЅzD@}!`]\6Oigd3r,_~3 VǺptv$83AbRpEj69/__j>1e_](d}ڙcZ@OEO'dxF].xl}o><8=* ySHƵK>`"GXUx,ƗlΨK{!f#ˍ.miWAcCױ@i>ev,sI\/7oL@쑑Ch_X2je]e9z7Гg'||pRN$-3:,7㫹ax q>X 2k텚&y:dL$| k.4۸ C*}a0sޞs*@W{ᑇ=.VU_;]>t)\ Ln}g9) Dm2m먩-^ A"̆3}5WFID=bs^vJ|rL`mgchJeEi+;6w.d-myY T߈yؘoml:7WP.?*ݐ52Ӟk]yh<?)FXqAȀ`zb8.%E;ir9+HO#EP\=KӗOs]vmk<χm2}e:YنԿNvncu&Nsm&ӻ`T @<+,8QK:w=̢'K'"Xnp+@8= diVicMPc[pts p ?C6Ń r%Za2j42]0 Xh~*Dɟ[3U6I?ǁ#/ϗmc?oɣ[{ŎۗLJPδ gA#LI9:`]ƍf_|{C?GLZomާ:b:ޟoG%, [;VG?0,6@w諒0%Kv3]˺|o nǺ $$0Mt[ۚH6I 0B3`2Ou2mx1va"7]ڏj#~3dڲE81 x:  6݋x>q#0-|긽⹢De@'qvaWlM=>:f=$Zx 6 . /'kETMMm) Lș| O}{'| 5}϶YE>-kj2ԕ|Y]vİ,y q)U<] s5O*`Οb7r.@IDAT^{?ӧóϟN߿NpG.X9Q04rA?Uls3 cd>7n@'sE 6l7}6}<ǹ"}Y/~`ӥ_ؿ/M|18d\fo*! oijC~f /SǺu|[Ϟ|䧟OkZ)F̛'r1`b'0@# v@lE@=#_*8&fn0B3ƐɞO֓, $`k}^G_s2a,җuKE|_}3Ʈ{k%Ag6萷` xF+{\ 6-@kxaIx6Y_An>Jed8~e`ןW3m&x 60 yH?qt 7<)Ezw!qH_)K7.3o?F[X%kþuE 0dc{{_v6&F4Vp[(q8c?{.vCgOAq d x8GeSGW2o[F?S3v%s[OOKJ;]bdC, 'O6\~`Pg\gEtY2bbx ӧje{{']3t#Hqf"C;iD퉺cCq0}hFYUB)+~(e޿CP׼F2.i'Nx#;o_QSxG~(ϣ,[^rՋV( s:SYŋןxX˗;&xpTGlyl1Yָm'N-ɷ/A~ph;;/~2.}f].۬dy6ieF[VbBxy߭}gِIEW,کUB x&雯%v/v3eeLL=(w_Í#Tyt5@fC4 Rc|w= ٶփ`rX-tYrY?58yKy)",s?yah=6mH] #8 +(r VږEDO.o L ,ϴ}X۸>g6a<%ܲ@; {9O儜ؠWj ̾jvm\{7=wlI\g^)iױmc,MvL b 7DzCx3? ;gQG<36C@}pg{/ϏOONNOξ|!t. j8agw\񃿸-xk͖v&#̍SYx`L;8yq(FAk!f)e@7ܰߡur?y:}vWK}ӏR>/MyB ?~s̴}aWʬ_o<>o[^}O4ÇO?۩D"֦pf" k0,y* c2cG mz+7('rEO$k~A3Fgz?=f3ԙq "R_U2GWΖg2}[gdMg;Ӵg=]089Y* {/)=0ى\- "Yi}wۺp|:=]?kR<7>ڶ0lgji,+x ǫy8`r4}8LO<24¼mm/koLֽNܞ!؉϶ԗyC:`bžePön:}Qv%oKmҧUƙ%=?YЌ ̨K>H@[i}6iҮ&]_|Ƴg\6)'w%VAo V0'OeQY:#^&`$7# &? ONrij] L߽7i1XǢ:5})|Cx;?ׅw]ds=JỴkrblÓqgJ[<$gFa W|@"ha. 8b OG\Gd,D9yMA^+yg>zٹaQ_b_ڔaq`xU0!}>]TPh588F]h?S8@o2SA!.Do}"ox* 1rtb"<:#~$lG#G :@DAnF)-qτu©E]Ŗ}(u_>jtMF ,c*$(X,pQrk5+[>'| 3|?1]n ]/<;>^_a+<?C}}sZ;]؛xfZ?w>M:ptaF[fz`d!|gD,ʽ1 7-]?:<Շ@uNu¤ +"ǜvs &b@lYR.Cg]@]Wmʾ>9k~l/*32O` 9Nfw?m}g>ĥ-M#_kt,}O9lXG$ {{{.'?] C-lO(Nleao ˶Mf c3BSZx0oO;ZsgnxZr%`߳KvHRCyboX{2';@D^ \L/ۚ1c&Mdց~-}"Wbeko@> Ld4u]V c<: o'./ R ]g `:v #:,rY0_ud7m|"@ׯ;;y`6^luƶ1[1|`uS\1`6 vtrF$.&ijz s4ŋƝdJ])st5{mB|5gicljeYVq`}.?dаc؊{J,dp="+2kiUkC4 0O Ѓ RI]k,ܗ 2sw!A?ݳ1sss;~s궖]/8 ?9OąORh iu`Gv뤝td ]Lkм//96,6[b93> LW;f`o7㕕Y&Ӎ 0?QH04'Jj.ܫ2KJO׻yZ\&2f^y.L3MZuuRb&|cR獅I9I@xK?iL2}K'eǽKX ,mkeLyb v<&rYJ{0 $iMPA`oT\稦;ߛ @qjQGQ?;>>D@o_y|4byky)|  E7 ,m2 p0x;<;|::YYe^ :KZv ܟA\ R^c0JZ$lwcmoȴϵ/1h]`!ڽӳzױRo[pITm̝,;9kN.8si/& lZDV:[cߚA<.Xy{6mYv!1Kf.)@L&5Q4YoG.m]T'6D:'q^tp}xh{tkh*8$R锥6ot=(/O= c NKu=BU&' F$ ~k~-3κity-" 9u-u7}RoF&kOWu>IAh{NbFAd\xc(oJ u#?"y 8R]KOz}>|H񍅢,|jO4K6W?~75}`kʏ?nONjp/1MZhY<a⃉}Qֽp_'tN<Xwi @ @J y@lPi=yvyہ);뜧gyYyJ4>Lg Ͳp:^M_|_'зG E>Iy'1Q)M &_[c x|o𠣼u])luIuHu{h>$Dюv抾 ա=jM;PH%K<%pP8_{p#]׃|-:ka,yJygYmWȜTGFT&k ^ hԠw^Ip0Ooo Pf,pD R#K\Nh{y3oQv > |W|@vgհ .XxI@|FXƯ}ş iۤ,y}pS/76?<׊H+{k>*C6ce `K۟7>N|9$z6peE_SY>/J̛ 0,ׄ&c.vrϏ b@>%o=wЮeKæ70Qgm2m߶TQ' h9o<йb| 5Sj@M օW/TTU5M62cl+2>tƲŗf.9:ȧ͝8Jz2ϽH1Hsku=PBK|chie<}v/mMK}3oS0uN|(,&L2:Ca|};&֝_1Y(ucl~,Yǃv!/vA# (@)jpb\ͬ~lp/upr~y,56NnNb'xlrN' 6%=g906_2#\R_%ϲ>rY_qr?W;~?2n"-&SqYhV#K+-͇W]z&9e# |~H* ~V gKrbcF!!ڸ3kڜչz%P*3]Q\];p#Ekx˰qb5y\&:|ϢA|b%}%&sL7+'& < 0& ̀q-̉J_/߄/˨(m,,V븸 's~'^ʍ:or)|9K_,+@=+'Ǹ!vɦ䗯W?ty wG`O\ fn &%A9J99S ؙanjenzm ȁȧ>ˤ>g{_'<@SI@_L6Gwg`f@Zٛm,u͕z>ƔQẓ0ϼSVFb%9 y02́2&oky? A#yDZ WfSQz2m$ 9Ѿ|d(pm9#"o}hza :m:c\EQ-&>9"D8h7Ci[_}"p_':>Ӱm<&4@D3(h"IljfQ*ݐidN%З'̢K}/1,Ic"#;x0w]8c*LUycoV(` '⑁ PXAɈ8E,IE7 Rj5)vqQcv:K=" &9iR4@4rփI/һ6ŗE}fڇ9L 4/ڟS}N)l?;ysPq7 mpaM6aP0}]Mn weپ:7bg+}f"1qy;~vѾ[\y~Mu D[Eo@Gހ8" X 5+g (?G>|"as[>lVc`#7pvr7MxĆMp> 3BJ/J-R n1]b"&jG8w߻ 4 ld䁁[hߩ-+ĝ+4}NxѺZ%uC;ak69YC<5})˼F% ,oj Gc#v%B6rz@ԁ/H:J^;g`D 0 8}t plDO>twLbb 5dАյekWYyʵPîƬp &-׮2DdA8)6\$+/|pOcaƏ#>_*^)j͕˲>7<t@S3{7hύOOyS+X<@baPj}=W0dHmځ+gm М#W + '_btuMzrrqzzS!v-~6mmma~lq) ϱNğ6"կ% PȜ'48 t>i4delO,* bg\J n"ǎ i'  asoR2uk{+iૺ1_K@4Kכ4Γ4dzN=Oi7FnDK.ö&::.fW8ungѻ l^mH[:Sl[#)NO]5|do틵KY]K1Uh~$v(B fn$O$VW$ߴƅV.77<{-.=\_|6]<+Νpl<6XCWӊF/zQRԣLI@DueҲ#M$~Ȋi2qhnҎk02Ia aIV.&c@qOZPȸAAQ}O Kz,m׶_yc5<4n|͔t ޔp#̻\ sb Rq>8_ǓY;Y`Y|+gI,?ϏOGM%O;thV4Pm6.y@bE~@jl.蜯WvݰuϺ} xuE[j!Kd* ڍ@L]w<_ ˅&9B;# 0 +篪AV]<Uv7:Y*?: @>e[R6pP.h<yu`ۚuO{#EkԻM`qlƘy[V#Lw‚heM 5u ,Ȣyu б,K‘WvLL?<`=mb!sڞ3bі)?E5;/9͙iil&I>_Ȕ5*v1dp$E]&?I _ ?VFW*U&|etX1Fd*Ӌ ߬ |B9 '.Tw 5jJ@L8a נ $΃l\E l^=A?uƣ$+*gx.?;l,c:ZX'A6Qnk}m@-89??3; vo]h 8: |eNJSnԄV̺Q^Ju!;D-o\\Og:,7>$, 8lf9a12yxN'!pG7@/8+d!ali0` mп }xWS@HxLIտ kb5X I .!d|-h^Â2ᩐܰ36| :@ A5v=tl0QLGyhCaY,[kY{[>A:ݢծ'WdG;_IMsS|>W>wOW272c0_ZY>G$(?'y(m};?:z(J鏪>=  5 \T)e#70&nGx9O4''B'dW. 1?hΧ*|"iRG= NQ4zg6_L 71&yᨇ0Ke\Lʎk/v6Wh< 3)VWb´xuArC.ڰmSho&YeA<&f$j:ƠVA‘䇻+ڣga1tJQc@2 ehEn2 ]$}vaRj2VF>Jܾu.3<+![~> 3;ls{F[˵ι<%y:ILr/D^/y0x)r9W$ c]WJMnkً = P>@&b+@w4` W zKǮO4;-@ 5}َrx]u_!2*[.Ln9?Dѻ2hPNӣ%/ es,xrAxEFF$[Sb_&>>מLgR<4b3zFj4{,Sz\5vnX7uS 35EW"c]uJF{8кgwXsT?wS5ʀG#KQ:X!5wkz9뀇XA_tL-uM1Acڑ-vN; ck[_.e`]͛]F #5Mc5ۧv=̃WfU /4 m<hƅ4kJe٧DU}P&WX+}9|txذO@Ή Ϥ<Ɛ@D擢h(zw~:0-@Y6DTv{3eLi`[l2 K[l@H|H~ʄ}e;|zPVY.Ky at/ opZ8ԣjU{a<ؚ*΃Π@_mw#=}[}00yBJ^ڲp2&|X..%rL61#lhΉ'{H|U1o d5d_`2yw y.mnx2+$ (;gm]S2\/sUAoPo^B\ g27ɠzM6c2mkav?cϼe>GYxOuBLbF+:Qm07 @VҶ~X?ӰyK&MҐ[Qses٣շv`>w 6܀Y6=*G7!a1Qx+Tb d5ݷh6 2 d@wÒy7GNcZ.Sio_Y^کs֗@IDATC3y\'= e8:m|I7#@zHs£3E7/rGMj  Cvqq@w"@q낎}gL4nxl 0`w`nӟ1z!r s̳' .Ƅ2ӿPǗT7G۫NWA61IO{VG`I@{Mb%tM>y7+k'*oɓ/ۺ?iض9t`<C8lc_92Ak6H`=emkI/0ғVwB5pE:3vW|T~tUam=Oip a%Ϧ].1\@K6p{W E'qSkETW> h[5=x1Lc.˭CT֯mg>vYo)sƾ< `zк97UÁiy0eva4gЂ]t4c'.U.<.V]8}V>'E /"t:tݭDSH5Onxt]`ǕQw1% 052=+ȑy YN1HV^FAuQՠ*9+. *&SFj1Le 0ɃhWk|~P6u-Iw .ޭ(в0.P.=X2 #/ՅW5H?ZKhp[]`iDw+A&' $X֘s x@gloi07o:4Ozut52s`U@Fq=*`eq.&nUyK$рWr4vr :U0~}l6ΉD<7v% Mr9eYN,>f-eAwEbk)7&ՊIˠGѾOm<{Ζ5}^*HO84&>9FP|"4ʝxRԕ §C`-{~Y w׭J=ҽV Q 22W'v`g,5vK"ʑXNEI{"x__ L>Ooߞִ /8$G~?Mb"J3D$ `|kqkˌ `h{\\-b*=CB-Z<6s;=@._` U~d|I/o*Uwȳ,+yaNdz"Kjvu5iEf^ &4e8qNDɨ rie {_Cz@dMur߭`7\wZCL-ԅz0.gEhgh/|X1vV'ySii\-D0} >˅0ҵ}#`WmlS5un[ Ǘ m缬@SNb;lejD<J$NT&I#%(>l0,vy'_.6uL_ K"d{QWiܣ݈V9LX$ FZJp"wz>`̵Xтk [@l~"> 4WI+ !x=3kz|pϝ< w\ =Ƅ gYcת腪;ȿ{TՄ&{n\R΋o f[d0LjpcDfͳyӡ r߸n|l'idxj0g!_kA0@'0\3\+\́|K; h@qT@`H:ى6+ :CCIfex= ʁ&3x%DβK cEۯETR=xb_<1BgHr;Aw &Q`(gYS%m,1-^`Oj?Xflr26&TVa{Z^EuC |-2~.upg` c D,,ęz#@ϟ/1 k%ik=wkDM +ʃ]a%_0i%H`[x2O .49N 5!ᑰ,TjgYI6F?`912e#Ӡ b@5^`}]1 @@0fu` AQǼr&|gMiL@ju`(c#M4q8U?ݚ>ΝC}V|oHMR)IԻLȝ~qȾAt[*sDU!Q M#KR]!ҏL4`NXQ-EPE_u5Amnq\pF4fF833i< C -0μGk' 7@AJ39?ъVƇ' 37 ti?ѻ.("|O7E1 : C -p7-+XtW)0:]+| O$z0O ?mY- `_3j6f>T#瘟^ok I c@ e7;q_e4zaԛcq׋;i_wq@x /nL|f?hG4Zmns ww盇܍o-A\wu5lZM%qG=֑Ӂ;/cG"g [&Yuk'T/'W32Mypi|2_5MXJYc1]Q!a6G~,k+z*B#l? (@ gYКij~N.?/q5-0-pyv6ԟ+š p<7߽k~ʿ8 u\Ƹ 7Iq',2H1`5~^??+J?mBI7-w7}oxtv||p7D <׏W M(ma\d8 %9VtdhMS,3Sb|1~m{e2'GH'6gr80L*MCv%\X7VLOkyu'z'r(|a>qiɚ>,@R 07k7gy6m<~f|rC9;(tSJW62CΏ>Gv:49-幾zzeaUeGǗ_F39cĴ yhdRG'1 ox̡L< 94ˊ#[gN/2t.Jɰe;ś+t̲Ok?a2.$zDj_7^c%@ ;Hy<Klc%Iu`h489yߜ80yA_l{dd )&\ qFBFr3;Ir*p>lcWw@,MKE3X1) %'5rk>`,֪>?t[j"h zL nQvF/igCĝ-W \ZRƻcǟ%k2rqeK=F4\[P$)_  ;yAgZdЮ1o{c*mUk2s&Թq<H\l':YӛaԵv|~~VJq^eG$E2d΁^S^<@q]Ϊ;ƥ k4g;v0{-|;|)pMNdtkkOwGg(ݕr󥾏<3cڢ!نb`dNC36G ?=s4Dw^>%2xc/{g_k dKyT[@A`|ppwɻy&ŝ>3Ү۷CVKە4Y|tPk"'ƴf4lAa0~O^$`n뗿U=h_&%ΰES+]b2.|-eeCq2{ h^ovXaK*Kf WI]8i] 3P;T{mG*_iCn6{Hs% agFWB> 22vGfژGqzH~hiG-Uew<blχtahR]|WXtX.cM[%MQGw.Y;yϫvW<+uV:x֯%X5@=W=ȇx-vc=} Ă Y6A+owN޼׫w 9鏅r}g wN0wu˻4`]K؅uCL mS>'N.>?w+i'qJ;4\$[N-3.zXo|U_y,/'hc2vBWЏ?Oe~;gzft?O;YٵL_9=;{<>3 ;9|/s2/v9<|^t=_(J‰fH;_h_f'2Y`I$q"ihpr+]_K[WռËCMnZQ }qOK[ξYe05]&~6%϶5l36ЋVlUT B3Ѽ)G'0opNJ,n?A w4)]RT]tMM g} w'A  ImpC{._z&|ҁ& /{G ?*0w[3JdJ޷?$xr2mz>ۚϜMp=/U1li?]DFGG 48#;#  L2wU03Z$`_x_ 0jŕUʹ l2Lg[癊 ^`ӟYx+my 0Re +ETQz{3{̟GsN~Ow}'tZA[cy@op,7_YWlG;OOY7  t`MTsOֿ-wp{r= pw7ZetwXs6Joku NYv2L[3y|.zL׌7)Dz޿࿮GGKO)=W:տ=y&;*W>y_}e5!I?|߭7Z h;vsm\=B]inpuI+*YWq^z`& +2]1cŹeeUblyo iOKGLA(|oc;ta w4px:G+ܿ'=SiwYo,lVq5;JlR>\ 0_ /r X~>*ȒS=\o3pb׮bz&+{ xh-p~~;6k,Np]N9wkYYzM+w~94>Éyc/+npohlBrx~ci2*@t _xc?QI<{:oQ$cjwi2,+[(,"~hX#ypOk|#p~ӵ2iԙv>[ϫ/ϲE07rh|L4)qm +ǎ7 ?hƹ->,glmeic9O.`Om06˕PteTR ,{?/C]LtO} uV^h@QV3f_x6_}A6AZqes,-Gt?g͎g`WO-JEO#3m'3=˶̾3\Nik;lk"ۛF FS m| _sVFV<1r= 1z_|mC xS#nS'Dt,#ϐ# MCˀw"k˅ޏ?>+1uY#_)%7|h#^lO 'e{?vᵿ'?& Ǘ•L^[= }ۧ`ic;޺2+fח2OɻY>65eЋ@@L˺otNCr,|;-ٚtl"|*o<-~x$/$Ktv5(+?Rϩ̓ta04 կ?X&)~/xB3v?C6_ =S$ _L @.l zgSN[@)c@9@ -p+w|9tk; ʏ LʘЅ^o?ɃOi98WYvGiuyjJl3yK2E sczB@|svtyU׊&A?heouZI\nWhEd<شg]I72",1 )mC>۶KL_Q |ß&\B0#?KτΟg^p7M?DΟIA\Z]ʢgq ^I\(cϧh~ r?/.ҨuɠxgZ \iX/mߕ߲V^mcỹˍ, bL6=,Vۗ.c"- #cXZR^!0A='EM':;с'%yI"Դt4G۶+k@>o8TZXDjqt܂&`xy]w]HP >qy?=Smc?g\ "5# _z`[K>Y$Iױp @E  8q5[?dmpoie%gA,{ky|lc3 : 3.iH~#x6w!imC> |E)NA J[iU4ۍ"ȸ0ysDz&zӄ`Z\uɧ刎@+Z%r&z [Z`ɞ ooi-4LN "3!!f`ҙ{D Os{D|)u5OMAO߼y͟h=ˮtSÕdDcz^leY~v,+wR_nn]g;3m8`|a[nLLgp:uSu]%#6HEt6W]Oo?TOcj5/ᗄtٿ2LFsrV/0L* Z`yM^o(Nj\{ྦM%3֘nY$M ؕcgZQxՄ\/Xz<<_ C<[@wcm;` _w3{77K2|'_)>jᾔgYLv)9oOtNt'6e.}di-: 2ʤ7߇=Z9,3ִqzvh#&Z5`bdQ_GdTZlV}ATl3zdvY]KomYhhpFס< 8IkI}/ԙ" Ь :.'x'[7]$ݻt7@ 9wl[횟똘 i@LhgGk' rhA=,z^I4nZg-Yc];1/wg?耜7Lz}bbjMfO} "۩F]IL4lJAG ЌWJVFJd{D 4- ]gJl_ܼNLnrVuNkLGKDЭFlhaK\LdМ]yad;? #V+~7X8r=<8fEvL?g߆`jNA>Jv`QPr(gS-%_-K|ږyK~ymø7wy7mXLXVb.{i?M3lQmM#/e03ppL#3q#e!,ϲ2԰m6d D+_js޲6h2IV{ %>j Z,Y`>ۜYh>OLsm?Sc|Xv˪yÒ>eeyqi'/J>+u%mMOͺ4:>a8C,󐇌:6%mQ)ˠt5p0ZPXȲ,\+g>] &UV(=w}59p *ǟ 0禮'z,:kx"uFM#{=j5\Q49t7?gYC]OgYrxܘ`eyc5 & k`[=?nFi8˔Ǧ5osx @N;U1_)1?k'A'Y<]l^Q^ _gY;X`v1P-LJUG`R]+#BeȲF2~ >^_=ߧr9-Tsȷ=ʾ||[̾hӗevx/])Tm׺>%]W5eew _7] x bqky gtvt/^#!ℙ+//?ZWp^\A˿VN-Β:G~0ޚSʬ]%>_`"&L>n(6_gra G_5@TOs֝=_+xo|s{^  ?2m} tɗt}~K쿏WiW55"j-xnpcL^`'0NJX3]浮e: %mCbI2r>mk\&B=%FgeLQE}-w'C2H_83'sYNxAz(׾}ӊ_-\цSf!2^S.#}@w1m]ʹmJgSo&zyB6G7o|lD }~J}M85C*L|MrJ[Zw͝1@|ʹz+Sk y/5zNމTT cs'z@lgBW zfo4vyǗ "0Lp @hk~x|&Oy5|\m?Gx쳆,Ӕ٬<ߒw_i;KW§}e|ͮ&#_kY̓3m,<\,h#)M^YeY #|LCe/ix2oaɶ缥 &m+!# z.tqx$z?G U3zmޔIg2tȢ ϻ@4ST?[ &nWˀh&~ų{&HԅOWɴL)3_]RM[/}e>[9_+iYgڸS+1v}Y^ه~jÖe6ozq`YO&]59~(.F3oil3_ҙ϶їtw~3okSR|7 B%Vz? CW3-ZK;iglvLɷD;'R&y{1g٢/m2ctKw.G]+ilc<ϱdYt7?6htCF[Ci?泬+2o:cYP>!zLz3geI|wPƅxzGj*wj?¿~Lt'N4 6erE׀ ys̃AD]g0>ѓ,s П\Tgy^'rbyiLǧrI_o%g)Jl]gz9tgRW5.eyK?%۾<eJɬ>t7W5MSic1j(g>%g5x>|ԍ=^uYlw&u/k.v^:>iO}HM5P( Ugpu(-ህQ!6r(=: (ǗyoA}~}ӟ^_qk?>V _|ëMҳ&ZY/? e.AbgΧ][b络9ٻmclL|J>hɛ1Ō]=3ϩ1#CI9uH#Dq]wLf}|FvJOBA]"HViWLY^ve9lz|_] @UT[m oUW!~S`3`i6Qy*Zd"r#~| CgbȐ~|wjʝ?qm~ROX}~{}}z}q tOP߷~x织wa=J J\}`>|t.5c6seҙTX~ /9i"ILuy#%ԟ~ SW!SK9y|F|#zڥ:>W] >y5O}ܻ#s&##YDGG&z )"yrsdd^ dI8i%/˿r'5|X6~_|Oԇn_|Mê OyGKo/ݹ_?urH#N1xc[-Zen?&g\L6ci;ٷb,2"|#yJJħܜ ~nl>Ε鷓>Z7#DwlS=%#~U:CnPGçu^ws?=?6? :8a9J\dpxաQCNl.v5mN5W ʃ_G65>A?WHwgrO_>M;|H}rѽ{ըG!}>ٜ\g:1m[|w9st[W^]NnKY?1m]mN<Ƽ)8=ו> mg5>s8y<17FSuJ__[ClO!)Ï~zuTƚ?]* ?*}^~6~>0N=bᓺ>=zO(}+ܼyjWKmuV~ݲ[_û;u~nYWTeܹ૯+Ӆ,|Gsl᩶-?M3f3u Wk9`|tk0uɓ :Ȯ_G}4?2NzGrx#+uzՋ2Q,^>[d0+RZɃM9mrMw=ֱ h!q'?z$Pβi^I_:Νeu_fzʋA!tG/GϕVPzw[̀:a~)~f7nܪ{,ɘ5Ҟ5>b1K5" $Q1?<럈2ލB{os;fɤvK{)(=_߿W_zxşg)>}_<=O;'o'cϡ|*ϟs&uGq1oI t,Sk3gby(qɫ9OF~PUUG?A_GM DyR'8ƃ(q!݀!tGyш[\s7W>|R_{Z)zw_]j"+'<6Nylk[^8Z>.+@(my.yw.lү{wO m~c@bNQd`W@O t*xaYgo!6HnХmԨ] ͍fG9z<CN?e/(|kOkA_zd@e1'< wo߾{k^svbW-?[O yq]2rʋ#GK{S19wߴn-_G@Qwǥ*'pϥkiz@֐Suti y ;&wǐ5^?GE;E~|%_[^eby#]~N{u)_^d=Eyd̨WoݺG}w%nHϖ՚߿/ǧ+|wA5[׏|Ou˳-}|r۲߈W'2>OŭD ߇q}69ߵ+~ sڢ~RT$? 9#OY_3&Kܻxl\ W±;ǎ4(xwdg-yd³.5U27xלM o߽w_|aγM%A;|f{!-o#ۖu9cӖ<>[rڒq[-߭8mb.+ߚo?|Ck$:WSyyſTa!6S~gyr=s䱃QOy:|nk q`à =<~>Җȧ^B=#h1R<ĥWֽ/^:y<[R*ݶ%oXoړ.qʛy-M~ͦL^SXy|8\)x&׻|f+.[|FS]? i::q|j_tX.yI=%ѹh}Ӂ >xyTv.!;v:+)'S'&[koĬM[?y9/nH[Α#3<){y5O% 43~3__N[=eSF9>OcmwV7\QbH9y2.cp#ঀ5 \β߮Kydwy`SiS}֐G>]rْl=T_Ğ闶ˋ~^#T7ShtǑ~lT-Ppi[㭅qS~*批lٺһ]I9yro[ol|IEzܫ=\+h8Aɜ>}" u;>5_ #Lptt]u]oh6T74=dGՃG:}3+}i>87zcX&`Nmxbȍ.7/>nٻ-ɻ%oz얯>/#Y1\[q%&/ua^yr3ְ4sqB]@5gz<"D_.wv|"|*jGݾ.6 8 ؅Go})C55&eqvYwye?~9}'woO]1f\I[<>oG<>5}}6].ǟϿv `A fʣWۚ}Mociy+~69^HSL:AytY1]ْӖ|q6q +?SĘԠBn/LBmzy={m̃"ex{]97;ѝ|.vu샰:y}RMLF:֓1-GSt#/?.ԋwncy\䵯~ :Ѧ Je;i[Wc674m\HӅw^Wg(h+W7m?7Hs|$}l`~n?|g&c;/(_<wdCF|#M~4wk_[1(.u#~cwY[Ǿny{2}mD}ld\+|| ^ @{g(|=e"C"?g0h9YrJc";3raoåGH;O;eXs;]NSl@[1א5H.:׳LP]lsu߳K>u-4OVbEӜ}lDYg $#DǜA6wZtp˴JS34yS^mٝ3}ԝ}u}׭ɩI15 {}{i|QLȧY7VXXg.g7x>u:f;hƂ\>6gvn@;{;bR^`>mSw]$&/b\W(y%Z<=ۈu{JLfVVn r6ᮝ,g+A'Gi4vnL g`s˒7qF|̉M Q-6Ksϩ둻mK~1k@:w~ O #^s]/|x+pQ7^{3\?᳥n7ex"s`S C\gɯN^yg=QPڗwS-)8I)<נ2ẖ%jK?'u^ ).y5N#cՁ"LxO+p7.}ybg8GF< '.?vsytl\u,жwwW+0u[];?9Х^]ʧV&/]\Jn$`Q\IY?f> zP33&|y֔'gAu9IK^7h6b"_{q̷Os]z}زQQ{G.ealWjL)w4gׯeMťiMym0_Gw̬Eb-=j˕68?2ϢNJs Ϫ*kGdܩs\ :ؔOdhukh\̑#ؠ鲶ˋG1t\gSsSIu4zMު(_hjo,yUB3]&c_`}Ƀ4}o?+qfc~kHyQzuΗ_:_֞WN#]cEm[r9og_0f.o.W>{;`ɸHyē J[eͫ,Ӯaĝ0a> \ \ o|iz\?Γ32x]r;3gڝ] X Frn#F2Gϫ%K^̵X=7ydm]5rΡ<y' d9Kg/8sge<Gְ&ldMrOɻ,#̥u5Y= -9m#t^q4(n.}v/Y˰6w_[|-_Nٕ8;]Ȇ,f'&8=Tv^躺.m6}a#P_vʼtGR֍ үk6#Gckn|y\IbV`VU2lv\~Xo/KhIn&@Dȉ%.ΠnkduV?HwRy\ǵ3zRaĿ$&;(wԞO%j[q>Q'jS!O3B,ub9fsffV.Lmit:M )Ůy8$hQq:#̆<ϛ{U;fUO', <MgïG_]bGr-C`ۏə#B'/8e8+0+*p6\r)ҔiVC/3dc76ǴLwF#;^rK䇕":y@.LmS1`;y+ՙu92^G>!bJLx,OO@`gR/M[n76gٍ@G79^uBA?itG};u:`^__YJ^ޡx*p7ru'V#_xwP?A5E}pWFΎ/$$#yuslz|ŏϭQClHmJ]̘ԍڷ0GrP:9wP>Ɲyg> \ \ /'oy.qUo5FU7y5ş8'$1@B4zD%.r"|9 hWt>/w7z^qǦ&v{.ZÝu> \ \ @ @)y z4Kjos:?<1 6X9oyA;V6l4x~j_'T9S 9EN^L[Gx_oajA}]֨n^LyV`V"Tnxm<|A SWovʧ0YN[]a5tCp@&Ct7 6S9ٵew#PM}I_wm[ ?Փ)weExs979Rr/ >#:䙍MNR\K5f6Oag|3 .Y46ztŞ;X\ z;2<4F~{j7S%vymΘ;NnBŔ͟M?7蠎;hzʧ;z;?._ܘtS1lnCNTiw×*uΫ]AE+I?uVsPſ67KC뫁sIhtinm26ü`v4愎&Ɔ[a?{_ap'^n)rz}A;>ݖ1ݯ+믜 ^~ZtB[y`M^yC Sʕ/?^_ym A, ύ6wX$b JA=}W69u)L/>u./MY>1c-Gn4+0+0+0+0EpHl݆fB.oT3rIghW_.1JϿd3'y!tR_ YMʟ51<_|UWԝoN6М&w}k >}]\BKcLM5iV`V`V`V`nUբz4Ȧ.C5·8oV#%r ojuk5>U_g2l"9Y>C.ev;tk}[oyuN!s:#.wǁQ}ݧ—_E?iV`V`V`V`Hy>u\a_WVSVZ}. ~+W"xZWJ!y;eR-,dx;͟nm~F]/XWh%Yk/-BWt[7Zyl\m7^I*p!7>wP'Ũ_W#|_ rFWqm>3p369q.Ă a2j e/}G%|62>OQHg.K(%px4+0+0+0+pb. Mٓ=+'5h0׫`:]mUOj\w%>lV>nūE,q ~&F wjyͿ )~"åOL(/v1e쾼K yO& v A#A'Ft dl_ bVEYWMp,Q x\2mħJw-G7/CG:DS=sSSW ͟"Lx \ ozs@^#|oޮ&E5[~/_VNl jE;:$qu~וv[ ܚ`ԚS1*ݗFd>/:ksn6ϲț~Ҭ TBoapM3{A;4#l>I~^1͟3.t7yNm0{| @@ގZq+]3BӞO?&/y1wu/\{ 'xi*\'{ʝ_rT>+> _Qj*0^J|7 *ȄWi$\o3|ÏRCCNzz%׎,/2UՁb|)Ȉm*YYYe8D QHME|ir=)zw>OU_21ˏɣˇW|]~ɷ pĝ4~dMF /~R@gI+W65{3БqWU& \ D.y#1Q"'¯ .%Ow+/t//դYYYYW] P  fB6lV6guI·\wlk2kH$׊N#MQ%M~-WG~67O Nx}͕)ך?5̙|\Q[kԟ~5FY1^?b=W+~7Iq@)i.6,͘fF\n9Km:YM\y%$!_CSw2sF6ߵs+eP>oblG]b]P'Q m#LO~lsn^ PYYYY\Kʲ`s4W ^2v7$LeDb%dD5"/v^G͗Ӿ"fff@.`_SdSiӰhvQ;##yu ^Y>Dx甲:pkب-[6}^~LxKKC@/FF=~k6~xtF,>#DW2'm)˿(،W_YYYY7UKJ3~Fkni\4nH%7z=<\e:A5"?4Btkmī_CeO8^|' \ ,=DiC dCBdGk`c'ѹ-L<Є6Gvl9 @x-' \ 孍v7 JAӼ;ڜGsR_D~h _Em)ˋt7'n6iV`V`V`V Woii4,zQ-cNl[h<>{v($$nڳitݞ< W:qV`V`V`V W`nDQ6,2~4{]6lc?eO̯kWFKaGN?2fffbo3ڿ@lK_flR&Wʣ At^<9$mF[6_?gMffffB  ͊Mm,?Bw#!| q's[m٤aCv&@ Ox;qݳIhj6v5#_ȣ,&a?FnQ%n5e[ z}iX47}6x[`ij6Ju%r}k\-t3~^畛s0(0Wy9 &n/2r"|qgݒ|"HV Z o7lUIRKzk[σI6m OݩH#^F3wHVv^yІVLxG+07{al6<рGrڒC\NX#יv;X~{o=5sMx+07'(|mx6t7~H^u#D׉N.#nvuMyV`V`V`VbMMgm4CxH>|"<4j;/y#痈H6'2sNx+pu_UHЦlO[ uɏdc#Cii{#VY966~lrҬSy_+@#!B<l65$.JNz;+'' 'xMFOl@% B؜kQ!DʏF~/?e4+0+0+~U` ^dy6#ɻ2d)yuǐ5xO|TbҬ{Xx /~C`i'zM#+U*Ѵ!w6sxeQ?𠫫|Is^M=ц/MCNz3 R;`-+x+0?_O3i6|H6^Spɟ2x*0}6l6zkhS!9՛yo5& \ ~AcS3F9ȘK3l<yzcs j{_6)錝x+& \ Y |ɽIENDB`ic09yPNG  IHDRxsRGBDeXIfMM*i @IDATxs#I ʌʬ̪햞ّ}~z_fe*8HFA3C(=$H i*4 wͫ)[ [ [,Pڂj#8e2ycfE2 peafpfdTJ]z-ǦZQ}`1{*LHi4/_oGGӌ)B>55)Hlt-и/[ [b,V, 5.  +P2ݨfCWq,$H HP$7mN2tx1w2] dZ .cf- > I!: +OR1cÍƊWStʿpI)-#'81;[#l 5n B)vT *+ͤX;1(:r#| pU[%mgBaSa7ETKv(6Eh skRGiyDu@l-/V*R+>8j+ʷBçүT>78Ub&+܈  xM `GkZ8A 7ow9 QCTm L]Cwz}v0[\X?ėB/zca6NPHo pHI0$!3HUН9,/ TzM*MwiptEJG  >:͔---pB&#ޗBǿRf?"FٮrQyҳ8ʡ/F[54 Do(}U 8G񚜒z; Lt Ґ@X ;X"b|.TgZ@#OM. P5rᖝ<t%&")!$kzu$Kk@mj6YQԄrrl=e87%*3e \i pdgͤ ,WT*z^YVhH ` T+Y'δAз`n7W2Eg6NzYpO3_Ӻ2d R-&l9:?A7LG&=~1rΟy@vϑ;-i, l 8 3!3+Pa~2<1JAcI@~hhpO~Yg,'`Ws 9EY)=݋q uX-ӕ@vO;-py5]"|/+sYˍ<])!aF]Rh: FZAu(b{jY ijؿ+geFAt048y%=:l+f\$w'[2-5Kk'?7 8Dz$2ʚEpڄ>'="X܂_oRSUOrh7 ӳ--5)[ [Y?W!n,|,ptZ $ _s\NDZ@L i vhuX㘓|T+4۱G[?+H B,6ǥo_'b\_"#[r-1ED DS%(scG8p/ʊz#i&-񄖣#/u"SG dXzӓ@G*ؓdue\3QWqF:q`3e~,u)[ [YW URaE97 @ 4Gd:MҌ84P@RX>Dp] ySY.))[JX ;Wgȝ\ ƻB# zP* r䊦8:)"*ZSQFG n:Χ2Jg@ ;O!QO nt-q71)[X ;W< &DԿh?)F9~ F?▍x+i" F$ -2u5W^^̯SgFuuYvxN7.PܠO.UD(͏0_OiL77bN?7yh@=bjApPd9r(u.o20ҷ5p @ =5I^!<\ rܲGnqM@*`Lmg |" 9q$7蛃r!5*r0C`=T(ou]RE6rpHU=PqMi.TcMG$:_bl˵@v.޹l+afv8 /wYˎ PQ.%Ar'N1!tQNʒ.TXQoCf~PũU9y9g3Hz&whYZ ;jX^5j+[ }-nkBgG&bbz88:q8dn9`J3FN/ƝN 3dž,gT0_;D7K}&+:Rtnc[uY pg}SyTƮ?Ǎ@G. eA1n2HHu? ;6Oa\sBy>?0y8Gt\!rnu !#;E2#8NNr]Ad\,! w?L.#&>ȭ.a%F1xQ_`[ ƆqAJs!萝8 (4@S"}]VJ$uN3~!^.R,K1sn$[ZϻhÅO Hs#qd;_[&H1ndO"/O~Q>pM(Cl AHŮ M".kzH/.S-4W-p,*F" QHe]^ԕm"_Qg{DՈK>~Gc9< Xlɪ*@[J.De8A1n=9ׇEy-ftE[8ן-pE,`e a$\ 1R]1EAH7!C 8yP;_1'u>ni)(,(l&ʐ'v,!#^ErS?9L 07BTqURI].C.vLfiO @8[ [b-t2-ptprY|T~ismK=nϲy7ݧ RU}Y\gFer*Ҝ8}v ю< [縒G8qix7B5Ϊ Hd9b7ޣz鴙d~. d\˅ͻ´' [ 4='90,'Gee8TwDs0sq *:zuUGy^iJMSɺiTk]䔥MZl @v.ĬlOkk# [TjA> DC<.g. @7<`$ʸ4p}N_%]q.]$^zlY ;33e([X@@HBB<>ЎwO$DBorYoӐуb8Y3.#}vXHigC8P$eiC,;!N_gd"@> EGw@]fnܤlOo!FWP[ӻخtc=5:IX_5q؏[ڍoܞu?ȏr9=(;_BZ1!I&tceB3GNS'?e0 ro(kOXA2T:Q(ƑE4+H S]rK3Gy8.S,c92eב' f!)MUD:O8D.'1SY ;g\s'P&$9m'@0S;-EUOӶ|< &G7PNs];-)[B,O i W--p,m!;\Vډ} 8Ket(+unc\O g82e d \ ,lvt*&OY8"Ŷi,q\<2(<9<i+H {Ӌ:`6 2N$=s@Ң\Lb,uD*%-Gey>F1`@0?I?B'?VrG ",^$h9@ ;9zO~N@ 1Q_wz+<#xhC iT-Sq>a?[` BH!M3zF <6e!MGNC[6i:|wIr@k8Ey#ӉCey#m'@`?.qi#r~3<[M f \9 P/tWpo;ʴ#CG-M*n  bi)7c(]ޞ0 Eb(QcDF@vk\>[jY"^-( >te@ie|л,z:xWԝVX'`f8' ]tĎx';-r{%/Δ-03 d`fe |R H\,iy9":9: &'iB,o?&ppDwrWy92jwPm?g@vd\([JZ4b<>A׀xp5-Cby䲸:q<?@ #0e~#I<0v?i)ȦX2b(]U"4dxQ*Fd]g@vd\([X` AA*w2p(AGu~8DI1G,,-2qx NQ>fߕ#'"[mIOǦ9)OL/b9-l3Y ;g2[.--0~:8bHi?h `+$ATb*8!(˥G#n:qmL%]@-kg98B"jcx;82ig@vd\([X Dۉ[IH=q,dtyG9ˡ# @!;Xycc$cg`KR{'N l*/݇̇u\ZM4mb8pj `q I3 `І @8+4\S"˒ู37Yh7gs9y:E5[`6lk ,Dl{OxɈgZ\`Y8.K^t%%sD0LQGq$rq;)plA | N)Jɪlg\$([` 8lstaC]=E_GXҷ%T`G@DHYG~6嬓 $7GNGvؐqp\Nb쪢SLps7du`v0ݏ+}+ _?S9JM99o#yi&XwQT&Ne\9sYYnWOU}^oh[?] oُt\BG#= j io (qw2q\1m8ah|o_M-YhSyh@!7; [g>)˸e/r,ls[ ;6a [`(%wfnQ d5/2)l*z5r(@Cy,7 ЯqpK[sW76*KZ(gw!h@t8 sv,B6!Q-"2m3gok?_ l̤C[NʑroXxԹy,Sg8p.3?5 |z_oz_^y߿' _P=پ^;S59mt5H8?EU)v1i`|0c2W*q;pSpSM Sঢi֓r.o47<9 a,0#CjNk_ͺ; y%󌾪BFM?{ꇇ8t~p/lnV^, + 7ChPT@87س#KD' r @69!hߞ_GSyZ>~Wa($ wcڸHpys:ӣ].lX ;31c$[`z k}]CSź{V߯k﷪g=-浪_*d ӷ!'{?J&hPrp9E`&':8dntCgԋ@m՗HJOXu4N\.~|$Ooټ\*9yHb-0א-0 `ڝ;w֤ņ>kگ(lWo4ſ@=m3~gA @SAAq$O>@kN9Gv\HF8xDj;#>ЈWm?2 %'t;"CeE]C:d]Qoc2ir3e s%[` www絉}M3^ylVz `|x=.i00B/s"h87 ={gFȐ]:;ȐmrykT7ߎl(;nŦf^'ꐡb1-;h|ՑӲ@v5ON{zM9/'jAri~3E9aV=wˀ{dPw^e `Z%ź!2!S`''}?UPZLz<|ߏTaMYgӐ(;_䱾Iyb(/]g-pn d&d @?T766jgϪZeu6h__is~}Qq68͝7Q?IKq/3Lp~9H< !(>~OooZ}Z}g?)#-h"`:NSE^L+Ƌcqґj_u%6[ /+¥/qz^S/ _=zƟ^ 2~K8 8z)X_-+|No}%s3aCo:#/Mv%Fҫ @Sԩ6KVk}M[{{zՎUlt(dw^Vi͔-0s d`&D /RUZʢ?.FkqnC_ӫ|e?,@k > 7+ЖªXk h~@"ig/.V+{ j}TG:rKm;dM.T czg_V1uCNߌL3@vfn\ @jtdt"):zWnV[;;Mps~En};)si`.fԋб8 ``CwTar:?(e'Q NHNO38/ 8BmJ7`&#`*ʓҭ?MuEel*!e-0S d`̕ @íV]Zˍ_whֆ;-_>vv)&3SX,}[y07 pc^2jv85cT9=rw۫[*;<.-7yf9r2,g IsZS+'|wu=_3a Hϸ?p:.x'~(\ieRY5=PDEs#sfS#WZWN jrr42=ӌɲ9zwü/]>zOO:'N23,;_3>?ѹ""0X[¿--hhh_;%K֕|֕:' nsVǼY03J.7jE-[}NOtU-lpGN{i2Lu/Jу6phOO>f Tʷ'X|׫t@S[n1?P]=rLxӐf ZRwѣvossv+Z0hewu.c2[o>|({f@vfo\glP_kh1_y @{wi#jM״״z <.~5 Abc>? $H{./ 鋂z+.'7 f@:䝖;K~n7_rc8x~ v!n"6gcXeҋ$H.yLr-4WZ ݺum>\ѱ}jU k~k**9vUm0>0uri4{8[9`&i4_ר{D4l/rç%rH3nw*֡f%`i'q/+7)-ꧩfnܤ%U5o[JRqk OJ,z!!?[`,,,:Zٙ[XX}k*}&Ws^qpݼb+M`AJ1{ha&]w7|Mї*k_OHz[靷c̳.:?4L7tᏦj ohWwW{~#98^:w4՟͓,K/ӝO9o-s0Wp^ +R=Ji&௅fWU@k|Z7'qXO9>(S U`E=qq92.Z:qy4y]&lK@v.̹YX ?s٪t4yAs0xs_kZg?b9خ8< ٿl5킿BkGIwp[Ç#YLM;LB- lMN{}}jMHpg'6I:G&:<M0NpִXG.pc^єVK|{{OoGvC`2Ox/ ͐@Cm/Ae* Np.cKkAYAåכz%p67Yhqpi8M}9o-3.h paw =Θ3 Z//BrN ~ WhfP ~K[j\Y|ssdssGIӴ;<>Xf-s<[J[ ;W繹+?P74Ki_F?hoW㯱"?|^ yF3R| n>- 9zpAnYVـy#?އ,;hteJh+9-0# d`F՜ y=Q ꕝZeoVq"|hy33# "Qnd4[8ܺȑ{5fA<h,GSQju9tww՗ѺTMd9*eoRX߄ci e![`,8KW+wZV[(mM5} U}ouҙ$8\CiŸq8ySrCI]sbb|lOSά8pf?NFl4\|{jCƺ>'G@KHGy/;ǿYf>F8Jg>nT1\Bxx 9NON÷y"GΔ-p87PfJP LT0tjk../&N6yԥ Q(w8Esi<.i\..ϔ-pf7V Ϟ 1JWk/(]} 3XXc$~' :1ϑD' `Qu>tD)k4WY~}(2Q.l @v.Լr,0w}wbׇٙ{vjv{MѳIwlՏ-Q([j{ 0r>\c7'W؉L8Y> m HEnE}xY~;$}Lf9[B, 1kmoo/,//?I UUe ̧̻Ĝ ĬO+}-xzOX_mOI6yuNsnȤaH˔-p7}odj\xG2j~W yX xӨE*9 ~OM.Oۦ)ʱ`FÔmu9rz8̳ltILi@X[;A |GHaMHC}@ܴO)"Q[ǐ= ?KL(r4m]6]uTG,|ż9-p!U NK5Buݮ}:m Zc_Ѿ/m}?Jv#3^2O/Y_E|okk~矷߽-t)sLv료qsc/zȳ.EY ;eRnܸ*_iGpM5ݫϾ=Fc]=s^?8h3{4-|b?E$I?[)-i7/f/]ʋ@IDAT$qv[j޺uw^oVV_z@фjGt-q7:8X)[B- 5<ݼk; #UkpO=tJ l *~|`ZMMp%tKKZЫ=oDSZ-NXgNZQe,O*.0^GL%o4uShY_aU?`3h`HyoK ?1"Ϛʀݺ2nݬq.IwX[nޢe.nn~<8`x?#(TD7^O\[ҕ(kzsȝ~k"r䲸e,[Wf)e.[`&Lx=+ _}Aһ_fk7+',9ᷠY?KU&?MFSҋiOeu;/i863qɔ-03 d`f&I 0dxtj1ͯ.ҏ6G3L7[K=OV aZ3ohvFsZv˳e>Y-0 d`&f>{w67wv[[I&oNw0[ d cMv[7= ^<3%=㯰l˷P;ob4r#S-3z oT5> ֕\7oͶ;?8n%1c=ӿ}ͣЕcN>'z9 Ôn|v'pv3ލ?Xy}j+ $5(ҝHߌs0H{^ɁJi?$f _S7~3"[p~&|+mt9bK`Ma,8p}EȟrSfRmj VA4OyNg>FSzL#(#wf丝c 0n*,)BLn@R>,R{R \sH>nPm=s}wlo4_miOvY^\鳼yL+SR⎓Z #' GA ?HS8i(dq?c@Zn-νxrw^wZ'1[> c:ua^ffkGVM2re; %V{RZWLZZ ՞wYW*pWZ"Xɺ"w>/#'uHD_L.Pnw/Bۍ_~_Ǟ `F$ٶr>61陲fbk"Fe>mYks֎A8 ٲ}g_J\wVj!TxpW!;g=+.ܑXLJp\\lnj2Ѝ߁j'jk{ntԗȕ:յ8;~7.ċa6> -#$n`S>7*G#`ݺbX$*?SN{/QLc \)F+-Kx pg,.@?p۝JGRٓ:R*:-:Z:pv ^կ~5a~NlVtz/7|o)4_ڻ@:pvs+bjDاW}[b:mrhW\dӗ[_ H'8׏'穇~)[R]9"uu|)\GsWHb8J|+_09P:EMKw?>Y9uɓt t,ppSigO<%ZoU-iN@5ఢ7ș>/ s|x'͙?Oh'֔TtUhP_лk sXe8,zf>hRSYJ9Eu]I/JGWUc "n=" 68*o@4RIz"p&r.'t<.uM94+~Lp<VwGz^ѕ lot/ 鳳2Nq~o뼳#m~_GN:!g- YeYuͯ.VmFL'[RҊs*aRY>S vk=<]OZ ū<\ = 8AJ{_ޢ# V6~՟Po6D4m*ѻ Qt'$th~~~Ezƻ77WB?l,ocswם~4/tM,+]<\v'5Ⱦv#GN\E;\S݀$y-puN33Z7:85GD+O J +DD>l M_當"A>@}ދ]l}7Terz0w#\;vM|xeNV'K`O}|xxpPr]+Yg /;b3bh|\vN/KFOTsϓFGg|g0Yww6ZRGH^nJt%4:ۗp8:b@7tf[T {z} 1w}֗IR<6q2fo IK9L~uvYA krxŏ<PfO'O{G@Gm}NNt9[7\&?m[WVT,LrF8K XC8$~&cxT眮ߡWZ^ֻE~~鋁 5tyOߺOB"SFNg:j>Dgj3 o=|G!9~s(GṄf9?:ڤ.#E5(U~U?QSEMQFyԹ̐//w++sz=䷠E~>gH'ӛ:\Gd5}hA- չ9f{r}{KK{&[JMY^G]IbbȮ>@)?[ 3#mMWe|3z׿b]d 9u5gl'@& _)WQ|HWwYf-J\J߳?wZ 4*rDVV:[ 9>{ic/u3ᭈx̔&[@~Kyt!0>d䜔$= j =B>T疎œG6g]nK3p W|3[)a0r? qn%,m:zhx"=S2r+>S }F+gvdn:nG]O7=]O63N 5Ө酞%~>oC| cj1S@%YJU>IcI:F|Vf$3ᱦ g0;"?mX:N=ϔ-0ju`ՙy_ ,\R<-+>7n l%|G+:|>xn$Wu@`(?z;ںj~m;'y5RZxue=suM/kxbڟ,!hAvS6uQ-OKiSۡ~#[ 7davVr;kw77w޼+;%aF~(nFV][&tW4 ~[ _lB5[6sjEC&d-S6ʮ n[f"MrZ(Y ^[҇{n oԥԴGW4p[7,hvU>Sh:_oT 8 rsȣF_ѧ$~>*@̋rJIni߾}/kƾ?]`s9MG涰.Cܞ3e Le3;xpSkߊmT1,3GY쳻ȕ}7(_uE^V':2<*7x-DE}ZijZ+Zͼ^Z(YLG,j5ϫ@Nw _4{zCM8mB?:4ey9o٠yZsK3J}qq^xkt3x/t<8IyͧG~nS)?(L4gvRgK;N*-]@~Tdx1lGoY8Dz UG 䤛 5G@zڜ$·zVJ zԙ8'rg $ p)0M-1=074L@ҟd$73 ZRY\լ zW6qk=Fqb>l1oKS$? H&Y`jI[ yMm^hmk|Tgw[~uQ etӆar8(]y,c1 ֻ՝Fcn\y}FӽmpӶi[<[H+`GL\l-nB%?]Ϣ(yrpFy:ig쀜MJ?V?̉Qx%'`([?ⱈδoTkqp;93'9 ƆѥVPβy~ E~h#_y%z꾟~ZZ]hmUӴ:醜)[T`oҠ8x e ix$<[Z얮??Y:on.-)|2x^_NS#ԺN.-~[S5tv}/ƶ.LJ}qpjosNÚ>㲀?Dx->Գw[լ^jdA7*|tLJ |8/? (rd~rs=7^=-saܢLbbY q˔-0S;|Wf=O |HzLE9O8?WRJ(;ntvIHnv{~ՃVi}pc \ʙ)[?:kʜxNj Ozn^ɜϚm~_kQ+{uIL>/y5VWvv޿om ۝oS6$G3u7ɩLA_r.lp4ԧPkJK4u#V}ic7ޫWowοk_ѷ1[upu1/q4[e2e #@ 8iN>{'NWq^t&qI1~ )rQW^ Rx)sZX{)p)[O` `K:a@>UWj>h[Y?^ӞkGCu{++?/,4~`/ْ9'ߚLC4HHw]l$PleHspTYX >;}\Yy-* /vig< ͩLbYf|kL?[ t4y$N]})? 52% |̆tNN3 {6(8uZvjg7e+ xq 9iݜc1!fΔ--9'vҹù22m>7NzC̓,ptOnvUv9PSj:OLi@?pQ3ځ3y3|Pee]H7RՃT=ruG@Yڳ#@:udNeuÄz=<#fzX@@z?΋I&-a&6]_3goƖԫfcnݺukp@K+=})p0a_M6J^.uㅛR3X L=p_&!UE̢1ġ89W9An'2yiãҬ8vC̝|NlbM@xՏv,C6_"#<?,䕿8"s־Fھmeիz#`s7w&o)ܢ$ttnmiR2 <ɂ/8|뗈/e)EE?Бb NǫFO>en7{[Gml򹼏D\/2&;e3>C֟?M~ӎj>$ +3\*VUy>:4 @UBOS3W775?u\ێ!-\8S#x|`H "W@P<̻=lF#p%$T>Xɶ8g 8ԗMqˬvhދ{q(б].;u]#Mݙ:vv.Cb-%ן?ۧkG5IO[~.bdQ'.vP|n~wOhMXD*v%~aNg [GWp4oh.<0oƺE>3pkw"a g׵Flt#V"cIَ#g$Pڴ|R~v|vK<ɿ"'}{r@⇪`#]qxf`+V#A-X[יg;|( H>ϐh'|c*C|pQj R5 pz)v:Cɼq,s>m9=0F`oM7upC#% (L~֫W _۷g!l+!HꗄM$~L"cq5Ɵۊ>7aE @:׷hi ?'ڥd0ou+I\?hd#,q%o5O=7-tACӔ1Ex0x@x4b|Pm;a9#@+ڐ$MeRg(F'>iEǷ|v1غ@Hqa@G.E<(j;s@} R:Wn0 a.u5? ?O,Cd+AJ-С gQ3xF.:˸Or=,aO|4d -[ۦ 0/&DS&ۀ' ͛[;Ѕ:ui3xz`H3n#ďm':WϽx_+ԓƓ3KHta FoYik^&WXׇ];(p7S@ $% =Z26(xWbl$u9sI6(~OW1- C:&U/$'#' t #x]mκ=rI6A.XPH`He\?nV}" ۺ>wXTbCr5mN'D^(sم[Nm<vN$y'|0gh'=FVwmWWm]EBzwKm ,ad#O#< ^נhC,(x^ m 4#u&'sV^? Ch 0nZ_hyYǼ~咪}M|wgJ!3aa"JbIfNh%>y7߇>BW+KU۱D[q_!6@ l00l3e]{ʴ_p,Oh0]d,}4~y4>d:ۛ]؂Qvƺ϶}DvT!h)9 ~f#+6 6gqGEtЀcgH/,($\-U*'tk-廱>+xs>l돁v~7/=oM?z}"錡n馃vU]ǻmesX,#D ڊFS}p{V  ; kmzƖgl!isWW'Fx"PR]W xQEɶcQQgδ&A(įm,+}>Yz=|>h~+s+$H9~W4ʎ1n|'}cc0%_I3O ڥwqco (n ?3O/6(o^098x~u~vvz㏟䀗L{.}6oyЙ t co0I;pkIIb#s {l1.>kPl}p7pd&ei/ce:~ccG sϟ?o&Orv[XaDH,AW~k̅˃я滄a\տJ~6[t}vtmrilg>iJ|Bخ<4?';܏C _IỈ繾Xr&zC1U8g(v|PaCbP O$'dO3-e>Eh}qG`|ޯgTPiEBuΣ<>rAz`ػ. h~molg*[IA OOxz{ O涐zKMa%$P2pa)b[yJl;vJ]M:5Lt$'}c/\xObnK$~DWNϗ#BIsg> Ⱥ·y/>3J0TvGkJ1IcK]lc4h Acy9Z]0=e=64q^I݋k?W,@ Rys]kw^7e lE.5.-]}vCgp]J-g` yY䣦*kBC hi✯ 9$}нǓj~aft4*܄Z|g;lGxX*yey|XxavNft傍Gף{yq@ɞ藗/אm@n'q?F16dCWd{k}':Dݾ>4g7؏ӓ\'Q7/V+, N?? D5:/vFEh&vK:@)75' %J5EѤۖ=-v%wIȣ @V#8AteZl]6eL 8lܯ# ϺE2n,dmӧ&v1F9{`hսjjLsZJ~j3wgŅ[v>׵M]M]-uδ9޸J /yQ-~Y p(v[[{/_|\~zt鯿0KkV_k#mXG`@臭)jW#f&##*R:$j7 4~ yBㇶԏTe}>?g$\WSׂmف_h;y!@ 53!/m,p `YRynM3oqng?L#RC-"k1À[*<bٯ gonlm [_??yO??ߧp΅]muvy赴=jsPBjļ-gT1M$]%I9G;zdg /'>D9~@y .!oWIu_|TN` &rlk},qA)\OM^?6] H􅸟16 @ -7<]t`}wfu_Q_/fDz8aЙ/l"}hXj箁~#46eAbbq;$p,—ll|ːJ5?He/θS'̓?^0~|Il{c|/jc^Ct>d] %|Tv3@m 78.r:Jw C-jsYthC4"8kv+/Y t$}':= 6crE@L<7\@} h7 Є>B+iad_g4mSv2,hMF)A";@>h]l_kLLcg8e/|Y5a_* sn}6=&m,ARHL! TyڌEHE 0Je%}:%RO?]S\ձ̸'/\ݞ1v]u'`AnHFNx J{,53G@Q&2]>DJU`ǯGG?Fxo028&ƒqQ* xt[Q=%zP  1,?W `GrkϺ9`xxo p[`Ky¸" O bx,Gge0u)Աҵ7Z?`}.GI%^<ک6;G"H]Ik_seB(hR>C :^nKdط =:ۃCNo ER7&>`*DH- ]ѴזO./i 7峯]'S4×eMסٺ]"@IDATg_ڬ+x1&x0"`΅+jRm2]"c#0d @wSCMujļS3ɷ1f,2f$Q 7/)^W,l5pؾѹۙ/Y^j.˺ۉO\tW:'3mܦ\Ý֟7qՇݘs[&O?0I1'Ʋo^GvK!> q! 흴F ݽ7o?诂O鋀rrQsn,k4~+=#79hEk X^gگu|ĻdDf4xЌH<:%]ə~e`e- wn; y@Ka\ &}÷0IKW Yu(#.1j_}8@m|nLQf}>\Ojyٞycmn  <(J XO[wDP&z-֛7yzO~џ_ʔF S&ľ癀XW\. 1.eq W  W##nluTc>=92``p.ygf,GgT>.! Aim6 x;-t[Mʘ+ۆ6$sԨJA=7d2:-`zQp-j6id }NKd >?%+3I N,$N"hj&m ?tQb*#[7֗gwoqio+փȶ5-һ޼~tfg{} _  +Nt,nq+uM'] x*%p;"EaSJh` f@ԁhQp]x{z,j]ݓJ/_ ^0\*U82CH,&Ѭu,h+# q;@7uҏJ\?IR%]=| OYWB0x{>PlƮ#/ml,Ə=t~m/{Y{b7\[C)s=%Sc{i+|#̿*.< ǸUh#G&%혘wI x}Γm7A#0d@`ܰ-/,ddEeGÞ3u7J -jѝ@GX/OvNY|-s[7뿶C m5^{o/C9.=Nֲ=tɟ pFn48a|21P̶qE1ʶj}"`QF[f1ީ<_x8P,Z\f? D ";NiЋc~ Gܻٙv=d1t?೘*tol*n),y% [ڝ ˍћg ^`v06v,>5_7q韄uCx]͉F=g! I QAu$~껭3yƶx. G'S&ɡs{Pmc˲,і$Xlkgqq,j40 2i)Pfyel^ҿm]_wS(<E4`L> 37-~Z|U8xUQ\D;dy^ +6o Cd>[æFۏ/I_8m3~P<7L&,C [uh׵G^z 3] m9֖/6웮ikslص2X e'@q@WH " 3޵>;cz ӡ!VGUgi[lFx`3}d u5G)5ߩs]KŕcF,c)u5Nd\ʲlew[Ak3aGc}oN`??`&t`;`z}Me?,uJzP=ޗemwH|rL_ m,6봘c/ө\5cRmмQ<=`_?鯂?oH)[߇kv/ɸc?r! =,BZ4rjmk$Uwmٖ|W(:>'u(F"^0RYMx W;yאi7w5uC >>`}(?-Ijbp=lS,-}&|t]"_C)^Xz%~fOEJEv5ڲ]L7g:K*@\F|`a3B&֋?hkϔv׿|Kk o_1P:h-8ۘSrg`8-"fuh3vZ̸=ձAg!Ň#-•g^om+g[si'2Zg싢jrel+3m,U*-6,{]]e^ŀ3x 始GLC:;3h[\i'd06]bםkҍ[ھk/>ccYYp}ڦ-7..u?ľǣCih.glfKH.b3Ġjclo9.߾BpFdN>8eˀvi72C}a14M ;>,\xcXhyF2fneyI㢔E]*U0`2 |ɳW['LT$=i_,c_W 3t&7xPby`mgINM`" s5򌡁집,u>EZ=u|L2b_,c Ч^g[t[;\ 1_ mȍ0<MgjSm,7]b0~? ^Mʉ߃!|\leЖk vN!!F+r>:=uzvs:}flk@"w` V|^Iꨝ<'#47g,k-3Q,֗-ϸfSQrE~;sO҂Fnnx-?ľfeqGm+u2XDy[[h$#9ea#Ԕ+uhPNnS#<,@=<<m459Bd̗zW;M&M4Λk-^!{+Mdt>6I0xaGcb]u>Z92Cnh(mL̍Ps84xYr K޲v݌mkuM'Հls}YwL=-!WϫN.-}>}ו @>v߲}B mktM6/c;*O B5GV<[gӉ7o|@#9ulk{9)е"qUmsbg eCe'_~UMų|n}R5mNnlp&wFdhuowE~Lz7:l+n n46CnwMu]ק;ؗ~gV㐺*mobwij=%'dӄ?۔4Ȳ 65 o 3\(@ -*}Y6빣3ɳgg_&S9tM91It']$": v QC_rv?U}i&nf}4>BXn\e隽uظ #S @þ"9(K|z]Lm$!L@?c;b }Oy;y?<ӏRL)žw kYgk.<:vm 8zBܗ|$aD`;TǴ6՘;, 2on7T)L,<1(7:i ‡0:9 vy1 m[d=6.s{a[5vCbKwϗԿ6l9}\]OA.U/1phsgg/7vww߿?wcwӏ.%A<ZoYöL/10 sO#m`;;  :a!}%UaOѩK9-Ec.;^$FJmU0h~sqA7~ы7˺emI^Ə۾om>o]6cc=:J΁\1eD@1Xzypp+/O^>'|Z@{<,˳,ӥN.=lhkl&;`d4+҇>`gwrO-Ab$[dy~;Fltyz@cR'3,>oJeȮkvʖ~e!tR;,an- -x uCCl"~N^ 6h?"}i_|յq鷕3nctjY0`(z#̋ Ң⹷fgq͆>dy3jy}u 7Z@e|hmv"3o:[]0>oy L$ į )Xope +Fѵmtɥcg?m馅ײE}ͲyۘgHW{QۋfH?"Cm\ 3F9@n#p5{.%޲e1Np#p.I;dIghA7.~XHΆ12bO2"<`l:Km飬S}1uJOKE1+/~>۠<>:yP4mn܊B)T5 ԫ[_˗ӯ_OV٧OAL!){n`EGr/F7.="j<g[ ؑ;YzزFsiS]|&Կ_fz6=ۓ@MW\T2 ؋M=;\?y~j2c@(?ߧk)>S<z:>\]KړmV`E@wL#jK<*:23JD1-O쇂xb ד0V^t5 }.Vg,϶Ws{}(ᲯةU}{mS&@ŷʪ#nmL^xٖnnOΦI53aP_^|<9W`e 60evƃtAo_2#\3׀d"$WdÄgU-ju-mV[rcĦpünMqgEu7m'NlK>-fw dQg}2ߟU}-t'_1x2ۿ\q @ 1z2H`-Ȇ߼35FuDwdL Tl&XC%\n hÓ=⅀;y֗x}/PxE>:ur피m- ZUo S7ƑiX}9{쭮ApK(rRV6Ӷ`k>#tțI}(0h1/qicU>B;hc6`UBw⏉ uנM zč'{/r-_P(K?5P@~w@p ~kD@o(rd\'b킌Rel?u`vѸ VHȀ1kx%xAdy鳱h|c7 fusb35w;IeA3ASq '_}0OGE>})^}>Bi_ɲLic==ekgJY,L1D 5pcCa̼Şwo%p'X@;Z'd'<<@0Юd,mi~R~y=A׮q̃)tĻrΏ\ܾ~PK?}R/y|d|UWX@Sb|VGќ'OaVf] ޸fSʰumSh/_D2H1]Wc^ 0>2|s}CS sHrP=S=23|;棓ĂMKvqƲğm$c_XMZb=R?c,GןgMN5c]'F8BnM1JKJoGumkM^K:>˴m0Fg$~0+mOv}kkoٳ׼wN~ozB:@C:޲>,+6ԳOhОϡGGVӹŃ$4'xclL 蜊t^cp俭n3Δy-ݧ~߻~D\20s\@;Aw2󙶾^GF{~j2-á ϼ;^ٶ'1cm{;e(ܫmL&kot%}#`9O5غDmY#ɐׇ ;).,In}lwA.r ŀQ]cqm裭_Ͱs-&>:rS-t{]"c'je8](2]ҏXnl\ցe~Ocg:c}~,')4@n֔YT6~MoIa8B)7e},k?y>l!:glۇ8+R8jhh-o8q{.+EoڸttŮF- 3` ÛXf:A]\7g2O#T"07@g\EzY>v.~Ee}~ɭ+}X M2tB,i +}>z>q۶Y֟pi28aU0L={w7M_ErZϼ@8)ޭk|@A\ Xqp2PT# @]r_ynC"d:%o9xn>M /j6 +aלܑ÷_ R?9A"[mt?҃# ޙ￾=/˗-NseNؖ1_ޤ'\ 7~|[^,@9XLEzuirv#D |Z\˰E瞿k}Y$CoM^؜Smgm@n#ӫjgk ^UOԏxwmoϟ34_qϞͳ+,[e%'gfߋ!a :xaW2lr@le ےR;R# 7\6ua/|ϙ6ozUM0ov%&]`aE"`kcggg'g?~nhϛ.m:7 <0Xd% :#L| @s׉CE?P~^)wNs]c 3Hn۪ߴ?7ݞo\=`,q L.A1S>CD-`]2o1@LIpC @THHPyOl- ?MM/3:͗vx (m,ĐFW aPA`Af#<\%'NGFө}%ϗ{~S"*(| bR,HFVM`|Px@/(x=nse-3|jPL7's؏ " ąE ΃>r0)N$|/2F`hyIy>C1~IFx0 2s+Ār@̓,mBج,@IbX`gm}cؙv[V)m]U]Cחw^?}󣣣O?1W2=wBgol=F!.-d309>^>:Zh!qz2N(T#<<3/X-$4|2mK}kE^T-*7I;4'8_/Z 'eiZ5ۚ,{#^5mG- @'4~잝]]liҗUNg3ĸP$0@؏$~OK,w:`Cקw,9W[_[/^L~:R.o~}Uw<̷SM}rc@ɸ wn@L<'_` <ږžDqp?UB1<DHy:%'Z¶l7/Zv5<+L{7L;пnKӕAuL\_N?+N̛^зEqv"xm\ *{[[yB2f7>ڶ0u  xīcIv   4Oó۳7=FPFImQjkeyB7}~hdwn˸=ZhiUlþs-#f)vd  n`eR[T ٟ>> PJe@PO:n˄/"^Z+Xۮ/=z8k޿q=loJ@s̗fk`5uTu\=:mE1,(_>bYvH+˟W-vvoo+Џ/8UuiEU^ÖVImlKCYN!^){mis&bXE w9nFOs#l`;"b" |R٘ysc;(dEm#|%,'ľخO|Mn{^Gn#uuYm3\w(m٧/"2]sf bV#9YݝzO)gO6Vwm-[񢶰ƙ8 Oڇ--5}|A5N=}"+e/.^:'qvxxpvy&V\}X$biT҄uL^LezD{|˴mwIg_Yg92ڶ 羯o$}ݖU#^x\+VnlGrRvdХk6ʼ#øhr+b`PI>ͼWg[T|22e>Ap^-kA&< f<4K>jmE|"Ys"}>"se@d`@2㭧gӗ/M:Zk3A[6Y Jq[(EpD")T]D?^ WA|N.0>IǗr/ͥ|/mg}uJv%dCe+r-ܻ1XRtN΢Leݳy̕GmwKMû|,f [ʁ(ߛE, @(b$D9Q*օmkGA@`Sp7Ul}|:/GRkcղ9CۺNo6VE8l9P7ZsQH [ø=0­G /9 >2Cuwm=?rx4 "2^ar P5&~G3a3c\&r/^ yS;:~Xb]d_k>ɖ=_Nc\)esl9"c[ >ֽf ~ۋ~tBЅzD@}!`]\6Oigd3r,_~3 VǺptv$83AbRpEj69/__j>1e_](d}ڙcZ@OEO'dxF].xl}o><8=* ySHƵK>`"GXUx,ƗlΨK{!f#ˍ.miWAcCױ@i>ev,sI\/7oL@쑑Ch_X2je]e9z7Гg'||pRN$-3:,7㫹ax q>X 2k텚&y:dL$| k.4۸ C*}a0sޞs*@W{ᑇ=.VU_;]>t)\ Ln}g9) Dm2m먩-^ A"̆3}5WFID=bs^vJ|rL`mgchJeEi+;6w.d-myY T߈yؘoml:7WP.?*ݐ52Ӟk]yh<?)FXqAȀ`zb8.%E;ir9+HO#EP\=KӗOs]vmk<χm2}e:YنԿNvncu&Nsm&ӻ`T @<+,8QK:w=̢'K'"Xnp+@8= diVicMPc[pts p ?C6Ń r%Za2j42]0 Xh~*Dɟ[3U6I?ǁ#/ϗmc?oɣ[{ŎۗLJPδ gA#LI9:`]ƍf_|{C?GLZomާ:b:ޟoG%, [;VG?0,6@w諒0%Kv3]˺|o nǺ $$0Mt[ۚH6I 0B3`2Ou2mx1va"7]ڏj#~3dڲE81 x:  6݋x>q#0-|긽⹢De@'qvaWlM=>:f=$Zx 6 . /'kETMMm) Lș| O}{'| 5}϶YE>-kj2ԕ|Y]vİ,y q)U<] s5O*`Οb7r.@IDAT^{?ӧóϟN߿NpG.X9Q04rA?Uls3 cd>7n@'sE 6l7}6}<ǹ"}Y/~`ӥ_ؿ/M|18d\fo*! oijC~f /SǺu|[Ϟ|䧟OkZ)F̛'r1`b'0@# v@lE@=#_*8&fn0B3ƐɞO֓, $`k}^G_s2a,җuKE|_}3Ʈ{k%Ag6萷` xF+{\ 6-@kxaIx6Y_An>Jed8~e`ןW3m&x 60 yH?qt 7<)Ezw!qH_)K7.3o?F[X%kþuE 0dc{{_v6&F4Vp[(q8c?{.vCgOAq d x8GeSGW2o[F?S3v%s[OOKJ;]bdC, 'O6\~`Pg\gEtY2bbx ӧje{{']3t#Hqf"C;iD퉺cCq0}hFYUB)+~(e޿CP׼F2.i'Nx#;o_QSxG~(ϣ,[^rՋV( s:SYŋןxX˗;&xpTGlyl1Yָm'N-ɷ/A~ph;;/~2.}f].۬dy6ieF[VbBxy߭}gِIEW,کUB x&雯%v/v3eeLL=(w_Í#Tyt5@fC4 Rc|w= ٶփ`rX-tYrY?58yKy)",s?yah=6mH] #8 +(r VږEDO.o L ,ϴ}X۸>g6a<%ܲ@; {9O儜ؠWj ̾jvm\{7=wlI\g^)iױmc,MvL b 7DzCx3? ;gQG<36C@}pg{/ϏOONNOξ|!t. j8agw\񃿸-xk͖v&#̍SYx`L;8yq(FAk!f)e@7ܰߡur?y:}vWK}ӏR>/MyB ?~s̴}aWʬ_o<>o[^}O4ÇO?۩D"֦pf" k0,y* c2cG mz+7('rEO$k~A3Fgz?=f3ԙq "R_U2GWΖg2}[gdMg;Ӵg=]089Y* {/)=0ى\- "Yi}wۺp|:=]?kR<7>ڶ0lgji,+x ǫy8`r4}8LO<24¼mm/koLֽNܞ!؉϶ԗyC:`bžePön:}Qv%oKmҧUƙ%=?YЌ ̨K>H@[i}6iҮ&]_|Ƴg\6)'w%VAo V0'OeQY:#^&`$7# &? ONrij] L߽7i1XǢ:5})|Cx;?ׅw]ds=JỴkrblÓqgJ[<$gFa W|@"ha. 8b OG\Gd,D9yMA^+yg>zٹaQ_b_ڔaq`xU0!}>]TPh588F]h?S8@o2SA!.Do}"ox* 1rtb"<:#~$lG#G :@DAnF)-qτu©E]Ŗ}(u_>jtMF ,c*$(X,pQrk5+[>'| 3|?1]n ]/<;>^_a+<?C}}sZ;]؛xfZ?w>M:ptaF[fz`d!|gD,ʽ1 7-]?:<Շ@uNu¤ +"ǜvs &b@lYR.Cg]@]Wmʾ>9k~l/*32O` 9Nfw?m}g>ĥ-M#_kt,}O9lXG$ {{{.'?] C-lO(Nleao ˶Mf c3BSZx0oO;ZsgnxZr%`߳KvHRCyboX{2';@D^ \L/ۚ1c&Mdց~-}"Wbeko@> Ld4u]V c<: o'./ R ]g `:v #:,rY0_ud7m|"@ׯ;;y`6^luƶ1[1|`uS\1`6 vtrF$.&ijz s4ŋƝdJ])st5{mB|5gicljeYVq`}.?dаc؊{J,dp="+2kiUkC4 0O Ѓ RI]k,ܗ 2sw!A?ݳ1sss;~s궖]/8 ?9OąORh iu`Gv뤝td ]Lkм//96,6[b93> LW;f`o7㕕Y&Ӎ 0?QH04'Jj.ܫ2KJO׻yZ\&2f^y.L3MZuuRb&|cR獅I9I@xK?iL2}K'eǽKX ,mkeLyb v<&rYJ{0 $iMPA`oT\稦;ߛ @qjQGQ?;>>D@o_y|4byky)|  E7 ,m2 p0x;<;|::YYe^ :KZv ܟA\ R^c0JZ$lwcmoȴϵ/1h]`!ڽӳzױRo[pITm̝,;9kN.8si/& lZDV:[cߚA<.Xy{6mYv!1Kf.)@L&5Q4YoG.m]T'6D:'q^tp}xh{tkh*8$R锥6ot=(/O= c NKu=BU&' F$ ~k~-3κity-" 9u-u7}RoF&kOWu>IAh{NbFAd\xc(oJ u#?"y 8R]KOz}>|H񍅢,|jO4K6W?~75}`kʏ?nONjp/1MZhY<a⃉}Qֽp_'tN<Xwi @ @J y@lPi=yvyہ);뜧gyYyJ4>Lg Ͳp:^M_|_'зG E>Iy'1Q)M &_[c x|o𠣼u])luIuHu{h>$Dюv抾 ա=jM;PH%K<%pP8_{p#]׃|-:ka,yJygYmWȜTGFT&k ^ hԠw^Ip0Ooo Pf,pD R#K\Nh{y3oQv > |W|@vgհ .XxI@|FXƯ}ş iۤ,y}pS/76?<׊H+{k>*C6ce `K۟7>N|9$z6peE_SY>/J̛ 0,ׄ&c.vrϏ b@>%o=wЮeKæ70Qgm2m߶TQ' h9o<йb| 5Sj@M օW/TTU5M62cl+2>tƲŗf.9:ȧ͝8Jz2ϽH1Hsku=PBK|chie<}v/mMK}3oS0uN|(,&L2:Ca|};&֝_1Y(ucl~,Yǃv!/vA# (@)jpb\ͬ~lp/upr~y,56NnNb'xlrN' 6%=g906_2#\R_%ϲ>rY_qr?W;~?2n"-&SqYhV#K+-͇W]z&9e# |~H* ~V gKrbcF!!ڸ3kڜչz%P*3]Q\];p#Ekx˰qb5y\&:|ϢA|b%}%&sL7+'& < 0& ̀q-̉J_/߄/˨(m,,V븸 's~'^ʍ:or)|9K_,+@=+'Ǹ!vɦ䗯W?ty wG`O\ fn &%A9J99S ؙanjenzm ȁȧ>ˤ>g{_'<@SI@_L6Gwg`f@Zٛm,u͕z>ƔQẓ0ϼSVFb%9 y02́2&oky? A#yDZ WfSQz2m$ 9Ѿ|d(pm9#"o}hza :m:c\EQ-&>9"D8h7Ci[_}"p_':>Ӱm<&4@D3(h"IljfQ*ݐidN%З'̢K}/1,Ic"#;x0w]8c*LUycoV(` '⑁ PXAɈ8E,IE7 Rj5)vqQcv:K=" &9iR4@4rփI/һ6ŗE}fڇ9L 4/ڟS}N)l?;ysPq7 mpaM6aP0}]Mn weپ:7bg+}f"1qy;~vѾ[\y~Mu D[Eo@Gހ8" X 5+g (?G>|"as[>lVc`#7pvr7MxĆMp> 3BJ/J-R n1]b"&jG8w߻ 4 ld䁁[hߩ-+ĝ+4}NxѺZ%uC;ak69YC<5})˼F% ,oj Gc#v%B6rz@ԁ/H:J^;g`D 0 8}t plDO>twLbb 5dАյekWYyʵPîƬp &-׮2DdA8)6\$+/|pOcaƏ#>_*^)j͕˲>7<t@S3{7hύOOyS+X<@baPj}=W0dHmځ+gm М#W + '_btuMzrrqzzS!v-~6mmma~lq) ϱNğ6"կ% PȜ'48 t>i4delO,* bg\J n"ǎ i'  asoR2uk{+iૺ1_K@4Kכ4Γ4dzN=Oi7FnDK.ö&::.fW8ungѻ l^mH[:Sl[#)NO]5|do틵KY]K1Uh~$v(B fn$O$VW$ߴƅV.77<{-.=\_|6]<+Νpl<6XCWӊF/zQRԣLI@DueҲ#M$~Ȋi2qhnҎk02Ia aIV.&c@qOZPȸAAQ}O Kz,m׶_yc5<4n|͔t ޔp#̻\ sb Rq>8_ǓY;Y`Y|+gI,?ϏOGM%O;thV4Pm6.y@bE~@jl.蜯WvݰuϺ} xuE[j!Kd* ڍ@L]w<_ ˅&9B;# 0 +篪AV]<Uv7:Y*?: @>e[R6pP.h<yu`ۚuO{#EkԻM`qlƘy[V#Lw‚heM 5u ,Ȣyu б,K‘WvLL?<`=mb!sڞ3bі)?E5;/9͙iil&I>_Ȕ5*v1dp$E]&?I _ ?VFW*U&|etX1Fd*Ӌ ߬ |B9 '.Tw 5jJ@L8a נ $΃l\E l^=A?uƣ$+*gx.?;l,c:ZX'A6Qnk}m@-89??3; vo]h 8: |eNJSnԄV̺Q^Ju!;D-o\\Og:,7>$, 8lf9a12yxN'!pG7@/8+d!ali0` mп }xWS@HxLIտ kb5X I .!d|-h^Â2ᩐܰ36| :@ A5v=tl0QLGyhCaY,[kY{[>A:ݢծ'WdG;_IMsS|>W>wOW272c0_ZY>G$(?'y(m};?:z(J鏪>=  5 \T)e#70&nGx9O4''B'dW. 1?hΧ*|"iRG= NQ4zg6_L 71&yᨇ0Ke\Lʎk/v6Wh< 3)VWb´xuArC.ڰmSho&YeA<&f$j:ƠVA‘䇻+ڣga1tJQc@2 ehEn2 ]$}vaRj2VF>Jܾu.3<+![~> 3;ls{F[˵ι<%y:ILr/D^/y0x)r9W$ c]WJMnkً = P>@&b+@w4` W zKǮO4;-@ 5}َrx]u_!2*[.Ln9?Dѻ2hPNӣ%/ es,xrAxEFF$[Sb_&>>מLgR<4b3zFj4{,Sz\5vnX7uS 35EW"c]uJF{8кgwXsT?wS5ʀG#KQ:X!5wkz9뀇XA_tL-uM1Acڑ-vN; ck[_.e`]͛]F #5Mc5ۧv=̃WfU /4 m<hƅ4kJe٧DU}P&WX+}9|txذO@Ή Ϥ<Ɛ@D擢h(zw~:0-@Y6DTv{3eLi`[l2 K[l@H|H~ʄ}e;|zPVY.Ky at/ opZ8ԣjU{a<ؚ*΃Π@_mw#=}[}00yBJ^ڲp2&|X..%rL61#lhΉ'{H|U1o d5d_`2yw y.mnx2+$ (;gm]S2\/sUAoPo^B\ g27ɠzM6c2mkav?cϼe>GYxOuBLbF+:Qm07 @VҶ~X?ӰyK&MҐ[Qses٣շv`>w 6܀Y6=*G7!a1Qx+Tb d5ݷh6 2 d@wÒy7GNcZ.Sio_Y^کs֗@IDATC3y\'= e8:m|I7#@zHs£3E7/rGMj  Cvqq@w"@q낎}gL4nxl 0`w`nӟ1z!r s̳' .Ƅ2ӿPǗT7G۫NWA61IO{VG`I@{Mb%tM>y7+k'*oɓ/ۺ?iض9t`<C8lc_92Ak6H`=emkI/0ғVwB5pE:3vW|T~tUam=Oip a%Ϧ].1\@K6p{W E'qSkETW> h[5=x1Lc.˭CT֯mg>vYo)sƾ< `zк97UÁiy0eva4gЂ]t4c'.U.<.V]8}V>'E /"t:tݭDSH5Onxt]`ǕQw1% 052=+ȑy YN1HV^FAuQՠ*9+. *&SFj1Le 0ɃhWk|~P6u-Iw .ޭ(в0.P.=X2 #/ՅW5H?ZKhp[]`iDw+A&' $X֘s x@gloi07o:4Ozut52s`U@Fq=*`eq.&nUyK$рWr4vr :U0~}l6ΉD<7v% Mr9eYN,>f-eAwEbk)7&ՊIˠGѾOm<{Ζ5}^*HO84&>9FP|"4ʝxRԕ §C`-{~Y w׭J=ҽV Q 22W'v`g,5vK"ʑXNEI{"x__ L>Ooߞִ /8$G~?Mb"J3D$ `|kqkˌ `h{\\-b*=CB-Z<6s;=@._` U~d|I/o*Uwȳ,+yaNdz"Kjvu5iEf^ &4e8qNDɨ rie {_Cz@dMur߭`7\wZCL-ԅz0.gEhgh/|X1vV'ySii\-D0} >˅0ҵ}#`WmlS5un[ Ǘ m缬@SNb;lejD<J$NT&I#%(>l0,vy'_.6uL_ K"d{QWiܣ݈V9LX$ FZJp"wz>`̵Xтk [@l~"> 4WI+ !x=3kz|pϝ< w\ =Ƅ gYcת腪;ȿ{TՄ&{n\R΋o f[d0LjpcDfͳyӡ r߸n|l'idxj0g!_kA0@'0\3\+\́|K; h@qT@`H:ى6+ :CCIfex= ʁ&3x%DβK cEۯETR=xb_<1BgHr;Aw &Q`(gYS%m,1-^`Oj?Xflr26&TVa{Z^EuC |-2~.upg` c D,,ęz#@ϟ/1 k%ik=wkDM +ʃ]a%_0i%H`[x2O .49N 5!ᑰ,TjgYI6F?`912e#Ӡ b@5^`}]1 @@0fu` AQǼr&|gMiL@ju`(c#M4q8U?ݚ>ΝC}V|oHMR)IԻLȝ~qȾAt[*sDU!Q M#KR]!ҏL4`NXQ-EPE_u5Amnq\pF4fF833i< C -0μGk' 7@AJ39?ъVƇ' 37 ti?ѻ.("|O7E1 : C -p7-+XtW)0:]+| O$z0O ?mY- `_3j6f>T#瘟^ok I c@ e7;q_e4zaԛcq׋;i_wq@x /nL|f?hG4Zmns ww盇܍o-A\wu5lZM%qG=֑Ӂ;/cG"g [&Yuk'T/'W32Mypi|2_5MXJYc1]Q!a6G~,k+z*B#l? (@ gYКij~N.?/q5-0-pyv6ԟ+š p<7߽k~ʿ8 u\Ƹ 7Iq',2H1`5~^??+J?mBI7-w7}oxtv||p7D <׏W M(ma\d8 %9VtdhMS,3Sb|1~m{e2'GH'6gr80L*MCv%\X7VLOkyu'z'r(|a>qiɚ>,@R 07k7gy6m<~f|rC9;(tSJW62CΏ>Gv:49-幾zzeaUeGǗ_F39cĴ yhdRG'1 ox̡L< 94ˊ#[gN/2t.Jɰe;ś+t̲Ok?a2.$zDj_7^c%@ ;Hy<Klc%Iu`h489yߜ80yA_l{dd )&\ qFBFr3;Ir*p>lcWw@,MKE3X1) %'5rk>`,֪>?t[j"h zL nQvF/igCĝ-W \ZRƻcǟ%k2rqeK=F4\[P$)_  ;yAgZdЮ1o{c*mUk2s&Թq<H\l':YӛaԵv|~~VJq^eG$E2d΁^S^<@q]Ϊ;ƥ k4g;v0{-|;|)pMNdtkkOwGg(ݕr󥾏<3cڢ!نb`dNC36G ?=s4Dw^>%2xc/{g_k dKyT[@A`|ppwɻy&ŝ>3Ү۷CVKە4Y|tPk"'ƴf4lAa0~O^$`n뗿U=h_&%ΰES+]b2.|-eeCq2{ h^ovXaK*Kf WI]8i] 3P;T{mG*_iCn6{Hs% agFWB> 22vGfژGqzH~hiG-Uew<blχtahR]|WXtX.cM[%MQGw.Y;yϫvW<+uV:x֯%X5@=W=ȇx-vc=} Ă Y6A+owN޼׫w 9鏅r}g wN0wu˻4`]K؅uCL mS>'N.>?w+i'qJ;4\$[N-3.zXo|U_y,/'hc2vBWЏ?Oe~;gzft?O;YٵL_9=;{<>3 ;9|/s2/v9<|^t=_(J‰fH;_h_f'2Y`I$q"ihpr+]_K[WռËCMnZQ }qOK[ξYe05]&~6%϶5l36ЋVlUT B3Ѽ)G'0opNJ,n?A w4)]RT]tMM g} w'A  ImpC{._z&|ҁ& /{G ?*0w[3JdJ޷?$xr2mz>ۚϜMp=/U1li?]DFGG 48#;#  L2wU03Z$`_x_ 0jŕUʹ l2Lg[癊 ^`ӟYx+my 0Re +ETQz{3{̟GsN~Ow}'tZA[cy@op,7_YWlG;OOY7  t`MTsOֿ-wp{r= pw7ZetwXs6Joku NYv2L[3y|.zL׌7)Dz޿࿮GGKO)=W:տ=y&;*W>y_}e5!I?|߭7Z h;vsm\=B]inpuI+*YWq^z`& +2]1cŹeeUblyo iOKGLA(|oc;ta w4px:G+ܿ'=SiwYo,lVq5;JlR>\ 0_ /r X~>*ȒS=\o3pb׮bz&+{ xh-p~~;6k,Np]N9wkYYzM+w~94>Éyc/+npohlBrx~ci2*@t _xc?QI<{:oQ$cjwi2,+[(,"~hX#ypOk|#p~ӵ2iԙv>[ϫ/ϲE07rh|L4)qm +ǎ7 ?hƹ->,glmeic9O.`Om06˕PteTR ,{?/C]LtO} uV^h@QV3f_x6_}A6AZqes,-Gt?g͎g`WO-JEO#3m'3=˶̾3\Nik;lk"ۛF FS m| _sVFV<1r= 1z_|mC xS#nS'Dt,#ϐ# MCˀw"k˅ޏ?>+1uY#_)%7|h#^lO 'e{?vᵿ'?& Ǘ•L^[= }ۧ`ic;޺2+fח2OɻY>65eЋ@@L˺otNCr,|;-ٚtl"|*o<-~x$/$Ktv5(+?Rϩ̓ta04 կ?X&)~/xB3v?C6_ =S$ _L @.l zgSN[@)c@9@ -p+w|9tk; ʏ LʘЅ^o?ɃOi98WYvGiuyjJl3yK2E sczB@|svtyU׊&A?heouZI\nWhEd<شg]I72",1 )mC>۶KL_Q |ß&\B0#?KτΟg^p7M?DΟIA\Z]ʢgq ^I\(cϧh~ r?/.ҨuɠxgZ \iX/mߕ߲V^mcỹˍ, bL6=,Vۗ.c"- #cXZR^!0A='EM':;с'%yI"Դt4G۶+k@>o8TZXDjqt܂&`xy]w]HP >qy?=Smc?g\ "5# _z`[K>Y$Iױp @E  8q5[?dmpoie%gA,{ky|lc3 : 3.iH~#x6w!imC> |E)NA J[iU4ۍ"ȸ0ysDz&zӄ`Z\uɧ刎@+Z%r&z [Z`ɞ ooi-4LN "3!!f`ҙ{D Os{D|)u5OMAO߼y͟h=ˮtSÕdDcz^leY~v,+wR_nn]g;3m8`|a[nLLgp:uSu]%#6HEt6W]Oo?TOcj5/ᗄtٿ2LFsrV/0L* Z`yM^o(Nj\{ྦM%3֘nY$M ؕcgZQxՄ\/Xz<<_ C<[@wcm;` _w3{77K2|'_)>jᾔgYLv)9oOtNt'6e.}di-: 2ʤ7߇=Z9,3ִqzvh#&Z5`bdQ_GdTZlV}ATl3zdvY]KomYhhpFס< 8IkI}/ԙ" Ь :.'x'[7]$ݻt7@ 9wl[횟똘 i@LhgGk' rhA=,z^I4nZg-Yc];1/wg?耜7Lz}bbjMfO} "۩F]IL4lJAG ЌWJVFJd{D 4- ]gJl_ܼNLnrVuNkLGKDЭFlhaK\LdМ]yad;? #V+~7X8r=<8fEvL?g߆`jNA>Jv`QPr(gS-%_-K|ږyK~ymø7wy7mXLXVb.{i?M3lQmM#/e03ppL#3q#e!,ϲ2԰m6d D+_js޲6h2IV{ %>j Z,Y`>ۜYh>OLsm?Sc|Xv˪yÒ>eeyqi'/J>+u%mMOͺ4:>a8C,󐇌:6%mQ)ˠt5p0ZPXȲ,\+g>] &UV(=w}59p *ǟ 0禮'z,:kx"uFM#{=j5\Q49t7?gYC]OgYrxܘ`eyc5 & k`[=?nFi8˔Ǧ5osx @N;U1_)1?k'A'Y<]l^Q^ _gY;X`v1P-LJUG`R]+#BeȲF2~ >^_=ߧr9-Tsȷ=ʾ||[̾hӗevx/])Tm׺>%]W5eew _7] x bqky gtvt/^#!ℙ+//?ZWp^\A˿VN-Β:G~0ޚSʬ]%>_`"&L>n(6_gra G_5@TOs֝=_+xo|s{^  ?2m} tɗt}~K쿏WiW55"j-xnpcL^`'0NJX3]浮e: %mCbI2r>mk\&B=%FgeLQE}-w'C2H_83'sYNxAz(׾}ӊ_-\цSf!2^S.#}@w1m]ʹmJgSo&zyB6G7o|lD }~J}M85C*L|MrJ[Zw͝1@|ʹz+Sk y/5zNމTT cs'z@lgBW zfo4vyǗ "0Lp @hk~x|&Oy5|\m?Gx쳆,Ӕ٬<ߒw_i;KW§}e|ͮ&#_kY̓3m,<\,h#)M^YeY #|LCe/ix2oaɶ缥 &m+!# z.tqx$z?G U3zmޔIg2tȢ ϻ@4ST?[ &nWˀh&~ų{&HԅOWɴL)3_]RM[/}e>[9_+iYgڸS+1v}Y^ه~jÖe6ozq`YO&]59~(.F3oil3_ҙ϶їtw~3okSR|7 B%Vz? CW3-ZK;iglvLɷD;'R&y{1g٢/m2ctKw.G]+ilc<ϱdYt7?6htCF[Ci?泬+2o:cYP>!zLz3geI|wPƅxzGj*wj?¿~Lt'N4 6erE׀ ys̃AD]g0>ѓ,s П\Tgy^'rbyiLǧrI_o%g)Jl]gz9tgRW5.eyK?%۾<eJɬ>t7W5MSic1j(g>%g5x>|ԍ=^uYlw&u/k.v^:>iO}HM5P( Ugpu(-ህQ!6r(=: (ǗyoA}~}ӟ^_qk?>V _|ëMҳ&ZY/? e.AbgΧ][b络9ٻmclL|J>hɛ1Ō]=3ϩ1#CI9uH#Dq]wLf}|FvJOBA]"HViWLY^ve9lz|_] @UT[m oUW!~S`3`i6Qy*Zd"r#~| CgbȐ~|wjʝ?qm~ROX}~{}}z}q tOP߷~x织wa=J J\}`>|t.5c6seҙTX~ /9i"ILuy#%ԟ~ SW!SK9y|F|#zڥ:>W] >y5O}ܻ#s&##YDGG&z )"yrsdd^ dI8i%/˿r'5|X6~_|Oԇn_|Mê OyGKo/ݹ_?urH#N1xc[-Zen?&g\L6ci;ٷb,2"|#yJJħܜ ~nl>Ε鷓>Z7#DwlS=%#~U:CnPGçu^ws?=?6? :8a9J\dpxաQCNl.v5mN5W ʃ_G65>A?WHwgrO_>M;|H}rѽ{ըG!}>ٜ\g:1m[|w9st[W^]NnKY?1m]mN<Ƽ)8=ו> mg5>s8y<17FSuJ__[ClO!)Ï~zuTƚ?]* ?*}^~6~>0N=bᓺ>=zO(}+ܼyjWKmuV~ݲ[_û;u~nYWTeܹ૯+Ӆ,|Gsl᩶-?M3f3u Wk9`|tk0uɓ :Ȯ_G}4?2NzGrx#+uzՋ2Q,^>[d0+RZɃM9mrMw=ֱ h!q'?z$Pβi^I_:Νeu_fzʋA!tG/GϕVPzw[̀:a~)~f7nܪ{,ɘ5Ҟ5>b1K5" $Q1?<럈2ލB{os;fɤvK{)(=_߿W_zxşg)>}_<=O;'o'cϡ|*ϟs&uGq1oI t,Sk3gby(qɫ9OF~PUUG?A_GM DyR'8ƃ(q!݀!tGyш[\s7W>|R_{Z)zw_]j"+'<6Nylk[^8Z>.+@(my.yw.lү{wO m~c@bNQd`W@O t*xaYgo!6HnХmԨ] ͍fG9z<CN?e/(|kOkA_zd@e1'< wo߾{k^svbW-?[O yq]2rʋ#GK{S19wߴn-_G@Qwǥ*'pϥkiz@֐Suti y ;&wǐ5^?GE;E~|%_[^eby#]~N{u)_^d=Eyd̨WoݺG}w%nHϖ՚߿/ǧ+|wA5[׏|Ou˳-}|r۲߈W'2>OŭD ߇q}69ߵ+~ sڢ~RT$? 9#OY_3&Kܻxl\ W±;ǎ4(xwdg-yd³.5U27xלM o߽w_|aγM%A;|f{!-o#ۖu9cӖ<>[rڒq[-߭8mb.+ߚo?|Ck$:WSyyſTa!6S~gyr=s䱃QOy:|nk q`à =<~>Җȧ^B=#h1R<ĥWֽ/^:y<[R*ݶ%oXoړ.qʛy-M~ͦL^SXy|8\)x&׻|f+.[|FS]? i::q|j_tX.yI=%ѹh}Ӂ >xyTv.!;v:+)'S'&[koĬM[?y9/nH[Α#3<){y5O% 43~3__N[=eSF9>OcmwV7\QbH9y2.cp#ঀ5 \β߮Kydwy`SiS}֐G>]rْl=T_Ğ闶ˋ~^#T7ShtǑ~lT-Ppi[㭅qS~*批lٺһ]I9yro[ol|IEzܫ=\+h8Aɜ>}" u;>5_ #Lptt]u]oh6T74=dGՃG:}3+}i>87zcX&`Nmxbȍ.7/>nٻ-ɻ%oz얯>/#Y1\[q%&/ua^yr3ְ4sqB]@5gz<"D_.wv|"|*jGݾ.6 8 ؅Go})C55&eqvYwye?~9}'woO]1f\I[<>oG<>5}}6].ǟϿv `A fʣWۚ}Mociy+~69^HSL:AytY1]ْӖ|q6q +?SĘԠBn/LBmzy={m̃"ex{]97;ѝ|.vu샰:y}RMLF:֓1-GSt#/?.ԋwncy\䵯~ :Ѧ Je;i[Wc674m\HӅw^Wg(h+W7m?7Hs|$}l`~n?|g&c;/(_<wdCF|#M~4wk_[1(.u#~cwY[Ǿny{2}mD}ld\+|| ^ @{g(|=e"C"?g0h9YrJc";3raoåGH;O;eXs;]NSl@[1א5H.:׳LP]lsu߳K>u-4OVbEӜ}lDYg $#DǜA6wZtp˴JS34yS^mٝ3}ԝ}u}׭ɩI15 {}{i|QLȧY7VXXg.g7x>u:f;hƂ\>6gvn@;{;bR^`>mSw]$&/b\W(y%Z<=ۈu{JLfVVn r6ᮝ,g+A'Gi4vnL g`s˒7qF|̉M Q-6Ksϩ둻mK~1k@:w~ O #^s]/|x+pQ7^{3\?᳥n7ex"s`S C\gɯN^yg=QPڗwS-)8I)<נ2ẖ%jK?'u^ ).y5N#cՁ"LxO+p7.}ybg8GF< '.?vsytl\u,жwwW+0u[];?9Х^]ʧV&/]\Jn$`Q\IY?f> zP33&|y֔'gAu9IK^7h6b"_{q̷Os]z}زQQ{G.ealWjL)w4gׯeMťiMym0_Gw̬Eb-=j˕68?2ϢNJs Ϫ*kGdܩs\ :ؔOdhukh\̑#ؠ鲶ˋG1t\gSsSIu4zMު(_hjo,yUB3]&c_`}Ƀ4}o?+qfc~kHyQzuΗ_:_֞WN#]cEm[r9og_0f.o.W>{;`ɸHyē J[eͫ,Ӯaĝ0a> \ \ o|iz\?Γ32x]r;3gڝ] X Frn#F2Gϫ%K^̵X=7ydm]5rΡ<y' d9Kg/8sge<Gְ&ldMrOɻ,#̥u5Y= -9m#t^q4(n.}v/Y˰6w_[|-_Nٕ8;]Ȇ,f'&8=Tv^躺.m6}a#P_vʼtGR֍ үk6#Gckn|y\IbV`VU2lv\~Xo/KhIn&@Dȉ%.ΠnkduV?HwRy\ǵ3zRaĿ$&;(wԞO%j[q>Q'jS!O3B,ub9fsffV.Lmit:M )Ůy8$hQq:#̆<ϛ{U;fUO', <MgïG_]bGr-C`ۏə#B'/8e8+0+*p6\r)ҔiVC/3dc76ǴLwF#;^rK䇕":y@.LmS1`;y+ՙu92^G>!bJLx,OO@`gR/M[n76gٍ@G79^uBA?itG};u:`^__YJ^ޡx*p7ru'V#_xwP?A5E}pWFΎ/$$#yuslz|ŏϭQClHmJ]̘ԍڷ0GrP:9wP>Ɲyg> \ \ /'oy.qUo5FU7y5ş8'$1@B4zD%.r"|9 hWt>/w7z^qǦ&v{.ZÝu> \ \ @ @)y z4Kjos:?<1 6X9oyA;V6l4x~j_'T9S 9EN^L[Gx_oajA}]֨n^LyV`V"Tnxm<|A SWovʧ0YN[]a5tCp@&Ct7 6S9ٵew#PM}I_wm[ ?Փ)weExs979Rr/ >#:䙍MNR\K5f6Oag|3 .Y46ztŞ;X\ z;2<4F~{j7S%vymΘ;NnBŔ͟M?7蠎;hzʧ;z;?._ܘtS1lnCNTiw×*uΫ]AE+I?uVsPſ67KC뫁sIhtinm26ü`v4愎&Ɔ[a?{_ap'^n)rz}A;>ݖ1ݯ+믜 ^~ZtB[y`M^yC Sʕ/?^_ym A, ύ6wX$b JA=}W69u)L/>u./MY>1c-Gn4+0+0+0+0EpHl݆fB.oT3rIghW_.1JϿd3'y!tR_ YMʟ51<_|UWԝoN6М&w}k >}]\BKcLM5iV`V`V`V`nUբz4Ȧ.C5·8oV#%r ojuk5>U_g2l"9Y>C.ev;tk}[oyuN!s:#.wǁQ}ݧ—_E?iV`V`V`V`Hy>u\a_WVSVZ}. ~+W"xZWJ!y;eR-,dx;͟nm~F]/XWh%Yk/-BWt[7Zyl\m7^I*p!7>wP'Ũ_W#|_ rFWqm>3p369q.Ă a2j e/}G%|62>OQHg.K(%px4+0+0+0+pb. Mٓ=+'5h0׫`:]mUOj\w%>lV>nūE,q ~&F wjyͿ )~"åOL(/v1e쾼K yO& v A#A'Ft dl_ bVEYWMp,Q x\2mħJw-G7/CG:DS=sSSW ͟"Lx \ ozs@^#|oޮ&E5[~/_VNl jE;:$qu~וv[ ܚ`ԚS1*ݗFd>/:ksn6ϲț~Ҭ TBoapM3{A;4#l>I~^1͟3.t7yNm0{| @@ގZq+]3BӞO?&/y1wu/\{ 'xi*\'{ʝ_rT>+> _Qj*0^J|7 *ȄWi$\o3|ÏRCCNzz%׎,/2UՁb|)Ȉm*YYYe8D QHME|ir=)zw>OU_21ˏɣˇW|]~ɷ pĝ4~dMF /~R@gI+W65{3БqWU& \ D.y#1Q"'¯ .%Ow+/t//դYYYYW] P  fB6lV6guI·\wlk2kH$׊N#MQ%M~-WG~67O Nx}͕)ך?5̙|\Q[kԟ~5FY1^?b=W+~7Iq@)i.6,͘fF\n9Km:YM\y%$!_CSw2sF6ߵs+eP>oblG]b]P'Q m#LO~lsn^ PYYYY\Kʲ`s4W ^2v7$LeDb%dD5"/v^G͗Ӿ"fff@.`_SdSiӰhvQ;##yu ^Y>Dx甲:pkب-[6}^~LxKKC@/FF=~k6~xtF,>#DW2'm)˿(،W_YYYY7UKJ3~Fkni\4nH%7z=<\e:A5"?4Btkmī_CeO8^|' \ ,=DiC dCBdGk`c'ѹ-L<Є6Gvl9 @x-' \ 孍v7 JAӼ;ڜGsR_D~h _Em)ˋt7'n6iV`V`V`V Woii4,zQ-cNl[h<>{v($$nڳitݞ< W:qV`V`V`V W`nDQ6,2~4{]6lc?eO̯kWFKaGN?2fffbo3ڿ@lK_flR&Wʣ At^<9$mF[6_?gMffffB  ͊Mm,?Bw#!| q's[m٤aCv&@ Ox;qݳIhj6v5#_ȣ,&a?FnQ%n5e[ z}iX47}6x[`ij6Ju%r}k\-t3~^畛s0(0Wy9 &n/2r"|qgݒ|"HV Z o7lUIRKzk[σI6m OݩH#^F3wHVv^yІVLxG+07{al6<рGrڒC\NX#יv;X~{o=5sMx+07'(|mx6t7~H^u#D׉N.#nvuMyV`V`V`VbMMgm4CxH>|"<4j;/y#痈H6'2sNx+pu_UHЦlO[ uɏdc#Cii{#VY966~lrҬSy_+@#!B<l65$.JNz;+'' 'xMFOl@% B؜kQ!DʏF~/?e4+0+0+~U` ^dy6#ɻ2d)yuǐ5xO|TbҬ{Xx /~C`i'zM#+U*Ѵ!w6sxeQ?𠫫|Is^M=ц/MCNz3 R;`-+x+0?_O3i6|H6^Spɟ2x*0}6l6zkhS!9՛yo5& \ ~AcS3F9ȘK3l<yzcs j{_6)錝x+& \ Y |ɽIENDB`ic05ARGB?NL"0 @ xA c7p^0TԆ~4 %8CZIf+<W&8K" (b3  0Fӏv/A|b+O>0ﻥ<  :k(ڷj2oЭnbYVT-;̓Ȥ}i_TI>4,*2JVN9zg]RG<2(  (&, xcRE9/& ]>(ZcA 4JO@%#&@ei<n2<ƠU,J Sj. AuL  ,,.  33@L  %33,[e  .332~s  3(x 31 b|'+3$A- 231  "3 30 32 !23,  *233     !+3' ,33%"  W`3  3*Zx  13*.ſ) +30*!( )#3.(Hwt8 RjtlM2331/&  DxA,$W͢Jw1>kqH@T.T[^8MP RZ^^Zfg OZ^Zt~GD]]^fvT\^bvv0S^yUX]^`eiHTTUb_dlpv&\YU`qhmrv*^^]_iiqua\^ _msxW^ _msGR^ jsP^c{'A^_v0[^ qv~\^^[qvFU^]av~nN^Yrvn4JJTvc/ H~YWuL@T.T[^8MP RZ^^Zfg OZ^Zt~GD]]^fvT\^bvv0S^yUX]^`eiHTTUb_dlpv&\YU`qhmrv*^^]_iiqua\^ _msxW^ _msGR^ jsP^c{'A^_v0[^ qv~\^^[qvFU^]av~nN^Yrvn4JJTvc/ H~YWuLic10FPNG  IHDR+sRGBDeXIfMM*i@IDATxIs\I@lܪ@&oved4ԯLdUlj}N?$Ѭmحg姉V$ @;/jSVcH_[clr7:{]Ǯu죫 {ntA <y4@A  @A d`8I @A  @x,d|9 @A  @+1$@A )g]I?ick뫋z#ӯN\ߕp^ϥ̹4Ek|^d\AuRŷmM쾮^yE@l<5g@A! nm/r{ -ҽ'V|) .sL3A}ǧ4g%7Zlj__LgZ;i9-RL)^U/zʦvRY0 MA {@6ǒE @x|lpkPLXZ[Hg{(ܸvHk;ͽv+A#ueܤluWR֥w6'm|u'm~|]kRjSTj9A{9*[ckh A ?3 @AQ _ͯ?׉7%D fZMz_53׻MZ$~;.k: 𩥆~zx  qMm-whiפզ&k}򽴜v1wA p?>" GWqeG"ł_~-g']1k=a3ۙlaqIi{b?eO{4>)z#N#K>}jMg# ': p, @]}1cbuo,6ɰchC~uc!@\0ikΎ/]{:aY.T}\^7X Zs7@U G ?3 @A < +{"b ?b%ی,Źym Kwi8)Mk ^ums=`OmdNJ2jMO7p<żkr7@4vA" @A gq =/N&h3E}\})6R5OkEܙQ]ͣo5Z|?WF:ύ|beߚDI&=S@w@6̴ A  -ޛ<'bKs]os/X$yOξvʧq~sro_!ԧ\N?Ůwl*nO}os)Ԍ|b'FϫK!5jv`X OD ?: CBa9}a)r{B/koٶփ=\7{j98?`&\7TjFX[mM 6c+u_i|g_/>K˕?s=>qsw?SЉxٷj;6\^, G ?1 CE`Wo;\>=Kl\[ ; gKXg5D7fA @A %166is// ~,{sM=/]U6ۋYs|ViXnG%" ^f/ ⽮T?hLs(Q {ѯ۷mc;[<Ђ @G@A! m: @xl슌rD+K/^`5o'}W\eh"j8^[|Nߏɿ:x"JjW Zwי&_}zZrǜ*5FyWY<ձ OtA k @xT@]qɂFD09O.,@j-^w7/a.cw̥ǜC#W)W{Wƿ `i\`w#M6vozS ^SCc-^'9j;¨]c A |]`M @ 3;z|G<ێ Ի>V Z?U6 h{۱Ud&bFJU\q徽ڞcS9lj a->j!F} |;ƅB:T\x1z~o~&@k7(@A 0{s?%}ǿ/q nGŪ; đ]sp556eF^1x^toSӯu֚jӄM3+=T٩6N埽8qp[2{}~|t^ 6=t}Ai{(o|K@!?@F#A  Gz7eH1Z_5 *kմʵBMƇ=mHlI#{_~:%4Ykۃ]kMj5s\4mHD> ^xܕ0E?2)QW?NFRi&>G9\cxգcqZv՞[cZ&A lA  o""{Gq{?/k^-X߾F@oayj;^7Tj0~ͭauLG5ZSGZtZnrM+ߖ/}()NL_6[{M8Y%n2ghM: 6D  @=?#үuo?n?WD?^vBҪF5Z PWþ6^;F[s&5Wblhm gϕc?d9uGZ+q%O}YqN>uwMtA l@66*eA  3z[rOP+xدҼ6$@:䴽& DACs=V [̩5 Dm}עa# ]<'X"@6`4;X/U{.瓊>hC`[wl[b#8`6P 1,c?: n@6nVJ@A zPǀCHoyшA l@66*A  -o|Cy?w5\] obn\YtnV=$y@Nm[knGKk6BuRv ՇF5]l&{(ݥh>Ka|O* PwhxYt~_DZk/5s4,ͽ A [# [CA  =]5_ov]>6sm?^m獡A=a5#*[ek:]kڄpuޮ>f#C۞kx.^+sA}?Iws\*ߺ\ p\/c7ϯʈ;c؈!wy A Gλc5US~ ~ܶ\"g }m.3@@֙6 Ky'R{H`k` vl~䑀%1@d`$@A <gEX _/8e~˗8/lҐ%m(BУAטm^%nk򎹶j`SRkl'ͨcScSofKB86? gwz)/s|/I;>1^ 80?OkhpGA`@6$@Aq!m}c{!&\슫/ĶHu| 1L64x}y06>SZ8RGX_sěy#:O=ܻڎYs殌}}~|#l>ؾ>w"{jv)#0اCt^{UI~oS-qg@6 KtA:G @׽{E_qi#ԞjOT{ jP9H#?5Ej~oZ86G1H8s؈٥mUv4ǀZGX̳9 p&qLv1.t'_~BK&yjko/s_5W-w)9D @# & @x?/bؾO [Uki=%О)cD80º`s \>6BĺG>1K瘙s#qƔ~ֵ=\Uc~!H!|#@!W\x9#!ռ571uU9Qɾ9 ; 0G MA  mbM} ]o r" 1E.0!hck$wUCkF#Azu-)}wcGG##qtضE[\6C]h6xL!}x/[mڲ~%%[Up8TiW bsňG@O= @Oό?;jwuS/!4b3İ!ۢ<4+12_mدz{q_[yp Gjޱyf9 Q-WB}/Zb} >O-xZ6޵ГXCBge6.@ @A#gGynxqoqưd/$>ĘG̺VZF61~){'6b'GXǯ\&6%w&6KhD`TGi>mq3~/JX/}C_a=u,NDŽd3NJ @A A  +,jt0(ibۮZ⮫zSÿ+\F,sU.m Ǥe-!;x3"|%๾;㥀 8V8Rv]UelWBa8{`;DtOlC}M;VսW\EsN9] Ktߛڬs ]cTb# wTHb SsA  d0E |0 XU̩>{*]:f]s#Be&_s401 PQB O SF@ݡ#OUSZc[e>?[f͚6kǭ}{ N0V}cWѣQjsOPJE>P=l\8< ~Sa)՟ࠦ-zR| t$ sA  T`V"~6Co:`^ v|֔6ĵk ydbף9jaFKw-({ρgei2{m+ߍ G ~X˶SrkU~a[|Мbɶ5=j>HAI '1$@A /Š`?&Y-`лV]_slt'6%{2ybFKm5zk9nC5oG}qm~RjyI 8P?密[޵f9&hb:k1K1A @6' A 'x?EĎ?z&&4% U?5MΣ1筝F}+kNøq3fq[\~1+f z,N&W/TI 4w !w),s]Zz>ubHG1A '@6ǜ A ǎ1EXCWvw|vlk?Dj`?&*ڗͦ@cZjM:>>T]횫kj RC]37;!Εɺ9ֱ ״?>փ>uhFhZrBCó|_Q㶭Y6|ϋA!C O#  #Ew .׿?bJCobIoĆ^h>Ɛ`IA~4\;95^:{wsosfzimjǷg{ ?ú8gz6f @+jC٤f8q"uv3BT!Pu VA <>bA <~/W"z;'bCD/Ul/ XSТ:|y5>F8F/} y?Fyib|6G# mo =rFSLf?}ؾzڬ&}C7#30"A :[)[eoۚ]cCOkϴ縵,kgBߣrp? yp:J]Ԯ6aC/Kk=mhП/:@xd~9 @xJ툹&/w{l;LaG '=&o{kWٮ}}kzߵchǭR N̟!PhYCN5%׷B[18&BldddΈ`{ xtiN( "b3x&hpt ȳ-0=aQlz7Ջu,xmW]m״B}W̡&Lq0"yvW;EPs{dcӒ30׊%__"AA ؖQ:od3&ϚM4D޿>E$h6Z/T&iP_kow㵧mt$ HsBA  Tu1@=FȵΩs:Uj{ǘG4n>5&Z:ƍ&ϻ=Lm_YT#;"EOu3wTCSΤS瀬Y5ZEk2@CcB ̹ GoS俷WQ5ؔ=^[ڶ텹I$~/e뿕R>*\uګ9m{86\tͯ@l<0'@A`XWM#zn}>Vk>Rkg*6q1wd;v3NrGcS=(gn0w ;"4OnO,@Xlߏ^7Ql3k=kcM.l\%Nl<.A  #۶'8 ~i\}l뱚=7ʹΚ \|6tU󽦷cYjld3|[`QG_Cg J_ _l |r C6WT/q{kGve,/\B#@6 @UbÌhsn9^cMj]Ü^sĪ/mpd;6ܨct]Oo񪚞՟ oWӖw\ە|#5~:W:p#n۾m4b]m xcN" :Fb`,"hKiCm8fuHyŗ;Rަf**]s6&qjuHK9xG~ZX_#?/=ؼ Ȧmen$^O R{~_s\O YhPGl<.A  # 2뫏m M̛V_2?зQOqGkjiW A zuG~=|AmjV u>m4>ѣq{ٷvo<vWS6tdy?<-40-6Ő}9Lqh.s4MtAA 1eA  FfzFxzh'ЈuVkT_sOise6fnSFw}q:|l߮e !BYӯs A +p>,& fL%1{1fS+r=~ojzkm[ffq~UkGn49؈ͽOǵq?}ס{1tOMq =[Kj~]]6xϣBdu/@x@d}XYjA <]߄ߋqbfE׮ dlKCoRϭsjjưk/{͑ClrucA+~3@s&z4lja>u*F}jI\o荥ʪɮsmIX^"A @6Ǖ F`o[[{{OlOdb({mk[[mmzs4_nT`6f7]w*i}_fO ,b >Cil^*9Mk{xMy>Ĩ3b՞<ߴQG_kvۓ8@xd!|JYcA >8sǬCΝwQ>c@l<* A Gqz}SE,0>[lI}խ&,]}Lv: &&S7SW[o㻯&pN~k=QW{_|qK䴶 `4|(ǭ➏]kϱ\׹!fLjA <0@A ofWC{[>7ҿIr8&Hbzgwn{"['}M3_ɺu:<Q7ӳ7}?=FsfOW9صo=Koo ߧQ󮳦f7޽~}]}>h;V}un A B@A)# ʿz{+iC]VlG,`6y_sbnW?g׹þ[ChW7 >N`U#Ħd4Zڃ<:㹍S.G{9_7CjQl^u~kv/qC{mZbSA kp?,. ]v"/<|D|Hc$ְyOQ9kjl'_kGugMHԬȾC>`zaMW_#9ڶ}t?^R¡zJ8eTIGR\o5"A @6ǖE C߿Nb #2blwq5[#X:}\MKcU Ns3Uj?>NYe\^s5oZ@l|ws @wIky}j|n[v_3uOž-W7lWrCCWbϼU1qZX_t*߶u1F^u@?l A  9b_Bꠋ%r^ԜvJ|ӫ¨e>>׸(^c>=X}L~_]Jkr{z&@d^~,YTA ٓ]|ڳjjZH=hG][s^#^H|#oqk𱫦1|K$W@lO( A 'C02wLl{uk\kcMOOnk߿)Su]>V}k655sH^j A  ! V&H /D>z=~ON?n #W4uܩ\2;^cuU{?_cĐ^߷úkT_]o\jYhm民>v_3[j1þkڶk]ME ‚@A)"0 wj|xX?|&Xc_ƶCHo;cK"l]Ǭ%oLY0GpX3B= sA[%?[ S ʜjFrӸ{۞vM!sn8ibWԺe9yG5n*<&xw~$ poh @K)&X H6C5E|@a4JȭOj4N]RBC2xhǦ]~MʖîRs۸{X>[ٯE 3!㯳1W{;X1ൌ4#ڝ~o5o0\A 7p>' ,EHϵYp/ve_BƱrfF^ҏ UܫF<KvIO=k-l*p~j~텽ikk}ݷUk7=#GI{s'?eS[sGs:zMby^=/: pH @K$۟E>*[/;=\|wOua)UM]sbu@R-dq y9qOKq 1Opv }}ǭ>zsgJ_uqLDžfx1QSsoi{T|̾ƫ:bumG  7E@A&M ;vmAg.eÜqYY vr~;N'lc} 5^m=LN=S Z`"k.̩~1| %\ojؔx} co ֨mz0{!HGW/HkuEjO >ԹVOI_?q1cΡibG[NC'?eS.skj<}m@?lPs @c&B1ӥs|W / =ĵg0r5#Mmq8{14s. H?d<لZK?uQmѧS6uj<C׹ޯ^fF>cI8z\q׺j;@dDY`A ݷ"A {@6G @h\T&m  M,s^SSk=j#}]gD@IDATlc}XTx}qt?EmUWkWq(Vkk}> kvhGkSbcj1|Ϸk·u8fj9N}},b WG@A`@%1v6Ja$ulFڽSROSXo|'y}V۽?eԺ玴׹}|o"Omt W2Xk9=Cydss=:f_ñv{}[&C}B Z@A 0&j{J/\Llm4=6 V5uy>6[cqcJ{yǵm8ܳjɵw}1qx%M/4폲GήcQk97ojr A |&29 #`B&U;wM(&~r5y#z }p?sj $^_:ٮڮ){TKl$p~Fc֕ǺZ 'VŮ1lly\KζCjyzj-vߧ֍l3}C{A |]`M @Bոm,kL6%Ja.[c#ͽ?=oEfTxZ_Gk:jMo96eFUS5ڿ3&/jǦ5GcۚMڷ\յg&5#7IbS@h@A;#`RQ mk/a},oц!snxzMH⹎y뜷*]k$몦o۶~oϺǚxW>ֺ׹/.;m6s$߇q ~߶uk-5Ha#c3㟞lؔfMMK< C9 A  6pfgb"-"j346cr9ҧ׎jrU||55Zk#IXU{ܛGy\sE C@A&Ul&GM] s$a% 5պO텚^\ȯOMy{;_m|ϵ/u}>ڮ$F}zMޱ=5*^E_!jo19C6BR~]اǔιUY{}ǩ9kѱ7b1 ~ )A   ׅ-<&rنsMHR~EHwϔCWq'dNUcͳ_t3#߱\sǪMr| R~ KDBWd)͆kCNpW:o[s~ù^z* -M@ğSt0W:nؙ7'$6Mmp^!Nfv/4W~M9ƙ\G`/ս$}J[G,Xz}WV{ֵe~AdƐeBA oC15F̥YEf 7(V F'WkcUcWi [gqUv葉xtzljF=uϲ[hn?|F3;ĕ~4 SzKB}MXuv|.: sA  ?$A{#%= FE֮ ::B$Sqs-P~O{9ҲL}M\k%}*]slrS5L6lpU~W m@ͭm`_3ZR?>v{j~KMǺuWOl<_~A 8&ŪA};qZ|\#BhH+G֓ȡQsJ~!V)sGGV s[;d;ng;m fTCnѣ\mbk:us<7: (XsRA  p Uco:Z/nI2@ }~~@$&jMisX8F{?7;u{r#շJ\o1j ^s}CN/??i#@qn'>U V#awMW)=u̺; $x{N: ێNCl+4A_'557rOcV!Vs\>Ssk/s|ǫcշ=MmלkMjG=ZSy@r<^O ?W}KpB_MlSs5m? sA  p h-PbΡ ƫ;DΖEDm5U;-u5oZTo@; NGl;nClUrMך}m8ZEA! u@O$}֌Yx?^!p!/ƶghŶK]m0=l4Mka#ͽQ:S?#^ؔHwLS󜯚 UbwPB|Yl?l2,1 6?DĂ}U"[?s+K"xGRz$4D8zOXC"\ݵZqzXW*]s#h:14ۆw GbSR!=qzj?z9^A! u@A!dkuzvRLen"sې>L;?NGcB8 ^Xs}QlӞ}ѼGZjמO99{@m+B;[ VGg +9 5xoN. ~&+%@:kޱnu }[/;]?!x_? gڤɾc'X(6̱vU;^&5_QαM_mi+g|,WIo{M35kF"@xdQ~9 @tbQG]^}jkv\g@@O1?JnWE !;jvdmH2&8FUNL79F]ttszXc{FuR=U{Tx7}7YCj@?l A dž@GӃAk5KF>'3K̷ͪܺUMݪNsv ]jUr8W9HAQ! Gqd@A#0]5Koxw_jEe~lug_煀/yopyp/װyW{qG*7$k7M48ڎG6~%&蚧ׄ`o}ñ @cpǀ]A PuǶ_uo|bp~Eگ~^?cs/{?GⷻT!Znwޟy< A |@6$ @ߌ*k񜝝ݽCы˽[gzgѴH m8x1<8Aϸ.)8)RdzۛJW[Ȯ2^e\=\gߚσaBs?WOE?3'_@Tc~pzܻsUzj>JA {@6 BEk}3``""T6tgg϶5vvwg{F^j6qG1w =?5  bvx։a[Wwym}/ po( @xDTμΞ"_tW/;-{{/t/z/xҢW3۽=;Dwwvv&Ī|9cu[7 s^M|zG>:zou|H}{;;y<MqbjQG5X?>=Gߛ#A @6~9PA fjsl~USg߶Lmȷ;!*_5 U~^XON5@w@6̴ A ;W jͱk_znMWVmMs&Mjfz.Pwlnk#@k{YӦFC>G3oJ`{IM={41jGǫm|ǧlU6-}%KIw"6>o `5_|ž}c1@F`[w @Okpb|4WwONNv.//wtU^/?Ekl_yJ3h=\x.\|n/1BS^(tml]li`Klk.-K`kkz!|6W0q"@ȏl߹W5zzjM8vm*Ϲm]mpI~ r(l-kp< 6 ;>j#@{9LQY;gxSx;ev.mQĂ@w?Hi@A P.&ߗ<{l_ٗ |gg[hyӲu;;>U*L1Vll.-uqpA!U4tw֕694}V ;0Ngvj1l`^8H뤯Ys~d9T ibƥ>W[\<< RF1'\n^yr9_Yw&.{mr  l||@O W9E[z@w4ccʿgNu3^QiLor/ xJx.܏6v6a S{.؈= 9mIpigk'!q&LSW }]O =[廮AB_(cj׼sSzDkqƹH=?Oٺ~aA0)^*l[}QXOun?ݵϚ l|3i@OB#6gm\Yx/mn?>>>k#.COB]?nɟAw3nWMmoo3owip'.~@uϴ`63@1ՂJ}R~<ĞebS9W_ncUG^ϣy^WOWΏ:O'5&"S"^'|``b)ۧ|쾶9kX^Uc>Vӫɼ C ? ( ^~l7+/q"U"URWy_{&_Z-|]owM>QsvngkQX`)<@_/6x/)Q㪎7/L1yNrz~OS>=-F61Gc4Πfd&@؋ ngg .511N6Txv۴ul:/uA {@6G Aڮ'c֚‡ڟ̯9w|M~j^e;J"3bx`_W!V?ϕϚo[;)_7z@GZ+>e8yϱVٵǔ]{(lj#T/;miS@I/.E-w v um[|t/] a~u-ҿe!F@| 4:..%|d^SMٚwmaBݦb̭۟ҜsScA?߾*_+|oVN KZ)UjnvWŜ[GMWJ. SHA '@G+WlիC=t~~~M#m6u~\"3̶gzߞ]]^>?z{z~+K^wu7ose^y|\up|nYh.d^6 ` X=쨁qm =zq>nvr5^ǶkmGCqC!{b"&꫒kK{M꒰Uc~}mM̩X_G|0g4o[+ OE ?< 懽; NDF_wӭ]m\?{mDiൾ# o,synH%b\Cuui\㊿7/_6 )7SWv!wwƿx̷ù1fmH>y*޴lm?@XMB[{<߶svS<8VA {@6ǒE B`"{"퇐]9Z+ }uĿmkf+@oבPX86o#"{~WG%Lhe./E6f]X~dt0Ya=un[l VoA?,fqv{?ܾo}V;g9SzƱW9^TM_뱯w ~A  Mf-nm5^i[mF\PWUz3^Jo?}{&[ 9wr(F#q_3#"6t=y?&|e!f&W ݂JhҬvQH?9ǍL}} ?AWN@:Ò/k}H*yt_s}>Bڷo[0) A |?M @4>6Ik6hKȿb]mx.OG7Ơn?#Wl ismRb#:ѭ}?pX(b{8A*Y֌lUV!ɱ{q[7©]5XA"imʹ?-=Юkm_7%qbU]Vskvmb3cfh5WMz& C; A {kV.*&?p; "ȿ4-;"bzQծn7GW.0w+_ K5oingERoﳾꈯ#*ZLWoz3_m(9AICQH$@r$@В |D*M6$rKIe9u1R64m &6-nǝ*|i%-Dğ?a[d|hGB$0H^:[Re/~J%eOI2fS[S帍L6ww#8G2 Gp^ ♴g ?)|y@_Kn`=]C Jk_R_B˲NK.eZ)ԧ?JȘ%ScM&S٩3 S;t_=l5M/r}~Muqq=V}KWV.N)[eGp%8#$ oVѨ߱YID^,"Ϧش>9g[_A1m <a ?"75;'$xɓnQ&95es^$XmYTS,JD~<&0nS\V]xI-yKg>$Y`L_AC@, 4C˲dW}[VWIRgu ڞR}Lٞr|b]U-k?gK_"(]Y[Z}YS~ 96Yz4 aGb,}I-Xf?LI}і[؇ډd2u씍})i|*elۤՔe-OBP 06Mr p 4X-q:rJM2>&˪{>}X$zo8#8#ZD?_ړA(ؘ/s}\ǟ] ?1O@0QUg61!0"ݒ""\K籤S2vCvȎo,վ&á.%*7%ِvҬVNXitW(/ dc 9B+c-3ؔ).:/{-QR:%=K%k{>vIWu)\:#px/pGPRmlƥ 9/(As}$ܵ:\6D@xe`A xdܵ?`0@_z/'l7uKYYm86JL]ɮ2-:YJ=p^mSn!NQmt2I:˙~szac_ @kI?gIC+ݦlvq;mWy_|LM:۴q]?ٶmO|bitpAGs)| #8πx^#>R=b2M$*-7S~]Ih3Ac,@|yA8@I)۲f֟,U䟺Xk 3ށQ'1fb[ -$ژ$7e٤2òVX vII>?Ie'.  uCJ1)LƺmҎ͇]eJ%帍*m Gx1<bzǎ#8@ xV\ܮ?H̃)DF <0ϥC C~} wV8x+_!e2T$1]َ~$UVI$|Mu:v\aF~B'd}B 9ع S'lCW,6cwn5ڤ(]ectjo}RnsG_#83! ~G/j?K?A~E'~ -BO,uf5?P/Q.P.A(3Oi2:ijd'd|y+J/.ׄxkHp8A0oɖ+㣝6٥KIe|OvX@_fphJ(|M _˦ioheyXO׾>lcuGڤ(ckC׵5.۶펀#9xKpGxF)eRf /`\GytmLlmTI>s3֓U(N}j|*SƤb:i-K385>K.߿*?Y]Rr v H?G~b8nimϡXu*ӧMRelb_?ɖjIwO.Gx3<fGpA;󛛛y%pO K/_WCvپkg H9c,i]~ I=5NW8Cb2$ʴ[U 3:^ģ!RQh1B{'(3B6!E![HU|Tz+@x/0XFfKEОAv $Q}XA|W%\WzUae,Ħc!kP-cKlO.Vl'_uLm6#Q[5˲7:O#-8KsG/A{Lؐ?eC}o?AM^6,v|/.ٷ^U}W.:p@~\⿄?5;+$GA&ߧ^2ƆvG'qɱ_Rht PH9/6 1Hbntd}k+岼6"lg@A$|R*EI|AzXӪ\fj>:s!7i)G퓶|eeenUKmq:؟ n䫲KGp%:#-{@1܆ Ѿ @:H?|0 Xb<;_"+A$aл$ T ֝Z縥S*3(IT],q%'AB_e=/C[\f\ȿPgj3_[ccmzszuYC +fl[6y^fyܼ n%-vQ,@+8ĮbޟʏW}m>=K}R~Ա>]}-˱MuV/]틿z/8#p xpG 3LHޓ#Q"$جw@BuY1|՗xM& `#v'mf5x&!VRer: $Nee,3eĐdf 1=@f `{ k\@FѮD[jX,E)ʸ:!s``5vѨSA.#s+B` jnVU ?[V779 X>7aTxmlYb{X/۬.]uj2Lɍ{$4c&8q > Gp>< ^I?&X_9BShǝQALe?>A , nW$ЍDN"^A`f 6#mL+0y ytک3m\ L}@aY/Y6,[iρ$ >XM& y}&꾬T9ʔ =uZ BK&v$)![6챔lu+m_MɔcOrTb[O鲥d?9#p }`#8Oq[bs. /x"gD4LoKI @ V $$K}Z٧djʘeڎBPJbˡM>ެw=e&g@d3OeMl&ċ ,{dNI `w 7 b_h`&*ClCzOogŶڤH>KS*¾egy7I clAg;0{,Sp¸1b{&pO]vfOOm2ngHյ.IOɔMcTo_\6JzG89<pr8G@(_+X?+@?~Hr`$JNz}iFm.6v2dMA'Odd)`.]YP 'H4^m5 ^qPq(X@[JIfk_ N6 :m%|6@˻VFXv\,AT؛b.6 pxlTIG9^vJ&M?v1fqY>$e.~C>#8pGc"RDGsvwwtûs KK_hH9{wIIg|jeɪwH3'u=Sasys=dΔ[bpd?>B$$Ca׈ 2s LYޕ9F%ýQ6YblKa?`V3sjX s|\ze,,IJn^nC E6JA#ʒK~b}Wm}ܟR2ezk=ՇlH㩍VWKGpN :#pԄߞD+;q윟Xϧ/_\SZ]` y D^JN2)Bi9|i#k ޿/>D? tT}[#ߒHX`}afv`$ǵr!q/@8lhGyXhtZ#쪓WNSڤIke~]vZiY.ݶu%wu#8tGtH{oyx~>=f&B^I ~ԗt[1%eho3,DU|nе`8cVq=ʩTa@kZ^Ya :PhseV*Nn:Տ|eIW?T}^~){[]쫲1iW]u9:#&xM`:#A?w./{Uuuv=KLM_ԟa ?~6Ic`P2@gx@IDAT%ɞN^H;s?T1cpfK9 xGiŧqmۦ?;.=;L&Olw8I!\>XGpנY?;#; wϯX}fc濇 @=HLBkI;h2>, ^)qmiW][ko0Fg+T'ilgz}8;&uå#8'NG8jo fY\.C |:{":ß`F:@k7w޿ýQ`=6D%V#-Vvt{` XF&Ry32Ϊ'm{Dҟwh4X-b_7j\V9&C,9t.ed l:'n)6R/}iSNi8I"l>hGp^ /_ʋf_w>3jYy} K3~/[B ++\? ^;47u\6@K Pfg9mQ#2ubvRP*?Y7WY)~eU^^3/iPE5.ֳٲ[,woobc}О.=Q6ɔMu#t؟ClXz6;cKGpNeA;#:D_P͖p8w`At{M1w1aiFnw2p";=ΐYߣ8?lهRv_"o.f ܁ B1rFblVdtIճlSso Ƃ~&p YWfnZ-BZ!d!QuMgK.o,w}mliKՎr_[KuGpN%;#:艛Ja3} M}: '7$y@9|.sl'>27ͩ>ז[w@0~AG$asx'mZ`6:/ @gYIwC_1l:HHaH}pA(ᰇY]Ѷ7J 9?gۤkou-Ӈ;u<[;#xU9#pG#Uѧ) s>I'<w3aesh=׃w 1IFϑEU2o f~}+P|KeOկ *@Pl2",/){LOO'u_6\cM 1́g@{ * * ha5>4H>MR}Ztϸ6)lwHՇ9#p2xd.pAқ2?%>>1&r3|s>9 ~WI6mӷ:S2̲|b0@rObfk)su@?22nwJ@ta=H1풬SNM;gJ 6 6 9$y%6\nnfu@`0iSN6.k3~Ԟئ:F~|m>RunsGd\*#8/'#(>x E=O l?@ !~ YcF3%5]>]ȱn_}xMiA)]Z2/>t1Fk?m%"]XX<珟B>w?~;+s?9V8P+ztZ=ڒ.6ۤ7S˱-;>Q)ipC'w|#  $1'd99`ǗJ WpߐEDCA&Al|Z 8̞Mc6.c?[W׌2}G5>gSBNJ/(ORFHlE}Z-b*f3  6дQ vtj#[!u/UV?,+Ѧ,cd[[kdu\:#px$.pGYS~x?>6A>VV'levww}UU_zx3Ÿ` }9V\ҍY_@ {@I<=@Dmˀ@ҷ)4cۮr\gUl"}Y l;Vnh >7VY 6ǝ9r4ꬆ#z?ds9ƕ83qElqgica`Lxx,}>ퟪdj,>֦S{6?Fڷ}̱p7Go~ |#xtAɤ}b|s3>v&_a28[}_;U%,'98_&!;w$u tIk`4e26|}L}9ٿL:3k2 + 6{ iMS1|%ٷX)kKK}Tg.=ypD'y|Ў#<19߹ A#J,}o[yx3~ekl\vw/ /Ж,aw+{: ]uʦWK.kkҒLL)[fum. r/0O :Ё_:93հ +o&O㞵pXZHm!6XڎMKg{e٬TXQdeGpNeA:#t"/^\K>:_`6rL*ې)?P^.. &n> zaOꣶL[sU_c&;m>xm}?SoVTt `Ftus3\ d$!gNfN)=ZԾ?%ecm)T=q]74:r#8ǎ Gx>ۂľbafG ;gȗ85Wx9:fqg0odQLG Nl6k%v32ex`=wP*޼ ?TӵMgӾ,[t.a AÌ?߁B2et@V{`@`^B-EPέM^6IR&~zUwg^6}}z#8GGyH^ :6g_Aܿ07w0߸[?X FXv='o 8$\m&[,7:ե?bXY^+@$ 7̜Gi?6{.7@ثCnmT}NVm}Oy!v =]:#px/pgCE &çsb3?'k*Î&Y3%h_Z4q+bC 7=UO@n2?\SgV˾E6F2 ]\i *7+ ,ܟK% , +xχ*׿cNl}v&OPOR>[]UG][G8<p W8!@^g](}F 6kB~Gox]oP }PS_2=T9 nÕ3e)[rOe10ɸخr9?.VE@)`ezymҭ->$UK/>b_{_ڷR9#pTx.p&7~ί%9~,80uUe7)oAf77gӪ\6;G>y`.53{x<3,F):\>$۲zױc(s|m2*Lnm"_,|"dg)K3f싙{pK  ;e?1i7œ?əlP^^{?~nՊ e3mMW}t[O[6Oi>ʀ<'#8 tG"@~ᅢ-P{߾}O|Yw Mc|@H|.z6 u{o rsj͟AɷWu8}lʩf>E)Sِ}ph-~1b+9Sҏ*B_!,-&݁]~x@V="m[R|O U7 }Yt\l\"wPA9NK}HZ8duꩶI޶o*SeBr/$\:)#Sz>vGP(Fx #, ܰ>w͗Q @ lZ.@α{<V5mWB`f1YVl}N3̵n= Hn=}q}6ap1@]RmH E).ۺ7+>$u~+Y N n-!; ^rƮSuVW[K)ؗ]9u<9#n~"#  JL1?A97A.A^>I;YYdA?W:ޓiV?_]W,!YVa6~@isl}Kmn϶#R`U)x,6.'`e?ڨ|L2^ѽuYO)9n ?noK剠رZUVM俄 Nf]~S>_eS[H_/]:@2I8{FdNW}19&_ٜi:/s}g?6Ip7C ,iН魦!Tb=t}᭦N"{e{֟Sqg*lch?cq!>HPgw."0W:\=[z%U/YQ{jU=[d>.o,g_.+~?@ #pxԯp>[ ?7Я!O}AG[`  CЍ3%p+0H2$aAL"t fn3XC=-su S-DfuW|億)R_̗eV=8k r HEOnv /O@z2k`Xv$Bdu$mSv)?N>)_R6kWY6pwep@C7|)Fz އoeYcC  ZnpE@d9 o%:b?+ =%om= 4$u@Smtx33}V#3 ͖Þ`0 $uJX,\ lb{uW*Ȋc?7Ib)_)[Қ$^d֫KO}>-[]O+r8I#|>xG>%27 kW\BHS `Xn5M"1Sl._^C3G+SZBU$$u 5KHIApFm>9YK)ڲ}*9I'7 ;E`[cGD$*|`MgXP‡]]f*S6^Y].I6}1l>:t+駲ڸtG]!wu9dGQGw:f777]|+'2/u>r@_ggA NU׻_\ @$>! eg} d]tq$% ?ǺgKaI_:>q{Q6v{l3}=(KU5cOfK_ wɢ =1>/կ!Lj}X6x;#px/pN<~ Y>W^b%oyv87'x 9ː{QU˪4 A7 R7;?U|!#6<b$1D=5MTG}~Sm}X~8AR:[#r/ơ _=L3~\?.C>gr,{\^Q'/slwWUu(<@z96ZZϲ5.~C@ހLSWf;LIjC:yo[mu#8'NGT9H|y?g3|g;#g̓$Wg,+O}%@K2~B;7Wq#w~*+SXrtF]7$L!tv>.=OvP}G8i<pҗ8@D],n ,~{ ?{+bA79Hź,ϰ  ?Vp@+p6FLᆪ}ַnVO_VR3'Y>dO|:CԾ#8'NGH;;;;ç }I C` L$n ~.fGXN0*v 7Kk'ON9ٙJIkn3PyAC~8ħm~Hm>mq8DI9" N$60_b$Aagoh,A~=N>}AK7+ئaAtW0.b[\~Kv..qS=e[e:e{*)cG2>n=UfϮcx#8'NGDj$^~}9'.g yi>ER/i}_V5dCʔuVqYv}{N,Շl9nw<#Bl%i'ɟ/n/~Tnkz#;<.#  a>g~=fؽoq3< gx 6Ói={q%@aX! r:OR{!N-.[~ -+;˸~_}4B9yj ҇ !$BVUuk]9#~v#9syY⡻e(bQ{ϛK(jX1s?=D r/ @d~/ooF+o6EurMuZIZȸjshb\o%yR%KQSg4 |Y_3X6k3xh=׋ŲCWPF(3|nd5Wl\f To#A|%d1%vGQxQp#8TҦ26D UAu<e\~Ag|jUUg `$l?Iw%qUcOM@x\t:|+ȪjM:YDL'0dE?ldꡚa )@M7b:JptNd z!|s of 3(3,oӻt:e `q{;tk}YuS Q `l&mikvGpgBw8`&b;eČ:/0UwKW$dY ~/,Dn>wB$xz$"VZݱ,t:?=H>X̓N%[N2Ai }.5#a\Pg\r@n;e-^Tj v?{l! C|v?NcoTKnsGh\ # O+~M&>a54K8R1I$wk<o$mpOGcC%1R7{lӛ> &amy=tcoku;cH?ޓ$8WK=@bAc8nЇWx by{ @B'[}mvV磌7>U۟<&S65#8|OpGzdXW,G،ʯx@`:>~it< [!/C`>dg!:@]w_)6nMlFeq%)5*x~aF$dAl$ʬBnMOǯ:wq?<5V`%6] }Ɔ gN@f !>,Ǣ:il.Gxu<G:ڔiNYa Vp+/_f x%@@@=sOjOK|Pڧzp[Y6oH:3K1Te궬 xߟ9d@XP}8o /\ "x"}R3eŊAm|"DxM4;G+)d].Gp~$p? |(ݗcsx_W/j= ^(GF@H<{ iӴVm9|f^/<$v VW;Ϻ>Xb4:ۆ{U.Gp <ލ#EwḴRV>]a*$j4 3/QuظXx#'జ?1 >.3AOo~qY}l;jx q֖*}xy ^~ V% ꭿ|%mTY]m~F*u?s\o8Q",>(Gxi1?F~E!Ύľ!avM\%6s?8Wp@юAC߿5Ct }3ޟ} ݔ8]z\üw1}=_~w7ڬC|S>fuPI㱯?wG]2#,OIzֹvM@1s8s3@3f%7=mv/g/Rm,êDػBVgSnZ6m}}Eٲ1s,,6;}u`2O.8=Cڥ|RKoPĺ-e\~؛[G8Q<p·8OC At/sn/ў ks6KզI澽y>D`?A~ tF7 -6e۴zڿi2OSnr^&T'){J|~fm[ ˱mW_^8!d>`Gx* >1o_]un}n\D+w $Brg.O\/,Wؾ779d+.gt9N2,R i#NHW챴%ol1zӧ:#px$.p!7~=rlWu(r?ϳeYv,Cggw/ 51\q $ !S HL.9ρS O;hfeLAXZTl&cSsKl6ypD'y|Ў# P4_5_C:Da6$enV0dY}^_ q>pi#<.k˩#Mf{V2J,-'d8oyp>8'Iyɉx jmV'=}kK֦vFI.[lg9Nm}>؆eGpN;X_c#@ϡA?O.hYHDZa?쟀20اF5hn斃^y1q+g~dZMmYΛ &2gg|`uu"@H{J->bۦKmTx3Mq=:[|m6O# <..#ЃZx߿~xbF +0e DY3hg@yvxr,A><K!_,Wu.B2d}]3Ųm~pCqn$!%$CZ[ />xK5pVd.եlldǔm6WYS;Υ#8'NG`0@nm>Or@"؜cPIH,6 3kbW7O/nfui|7ǖ@ uϘ˖os\xn]eX}r8g<]Z=U.C~OSY>:[wHaJVmx @tSF||쎀#4Fϱ_Qp x~ƌ1't/p'Ӄ ؔ} U ̓\Kү rHsM߆{R]:ǾT=rOǫ;Az$kA(}hKA唏m/]tJ~L*oJqqV/Kiu#8'|hF[((ss +PG%~tade ӊ=9/G&J*S*m}2 /g>JV'dUlS$_KIs}qጟ\CߧtQYgv):tIVݎ=Gۮ33InJqa!M#pBx.(L%V:Č!? ~EH(}"T. `31tjCqx+PD13~욱+Xϳk)FȋnYy_Q/??yUVUKBfiww{n~/WR򣴶6]~?Sl_˦=KG8I<p_l>>Ňɤħh/f\eQds3,ϮX ;ywy1Uu^_bCIZ $W-K2W G=B@BgvlX/@DҮ6molC!I&eU=?|=o8;zRWrX,Wb5.YWbAhy{XZ㺸L_R:m֗uLe&˛ <8uF}}|tATvI!6!v!3&K^/}. WQE5rY^w2a|D_ 3{wZ}O7 5Hj+.#7_4ʲ|8\1MMZUl6yuw7no˛y榳DKh- ˎ#px.xʜ[бq +/z!6 `!<283t:{a?x`kHft:?!+Mt?ijRIc˲[i}n}\ߍä|?+ s]y@;^53SVlMNx$iK)uqY~c嶾}WuL?雚clSZ].G89<pr +Psh쟳$gJ<^',<+TOA0?cFZŸA޿f}QOEc`#>]?롬Pg vϿdKIg]>m#=8Kt=z {Q8L;- rO%s>bSO>}XÍQ}=~o]޳ :D둶luY>!VЮ:zۺ؞:Go&=0`\r yU%Wp ELp[]^IQ>m7ƺ)}U7Let=9#p2xd.`߾Q%G ρgߠ"$gH}ؖa߿5w,_'5o ]j')[D$QܝRC]e+wY1]|8cD)MQ+,@jx-x%@ O&XdkO9f%\:#p2xd.8-㏬3nf\.>جjY3<^_Cr_^$P<;-|ޣ.뇒 Uod#Yfuq?? v~|t;lA)i1aU?X`])]6INI6I?=Ug;c'ڬ?s8^vGCt7iF~^?, Lx,*[:f)˰t͏r?P,c]d-.[jCqOrLWTqDѳM]wG8q^#pr'!b> tEwt>Ru^/ÌTkZ]#_5Jv*89| 6oZ ~l Au:VL)wh}N?MeIe}dsDDa.SlV,nSL領Wu>|:G8Z<p"-fo߾1)2coc_{TT$n`ǩy>|AwR?!pſ4+o+Ҳ _R~|JfL z] t9NkM6\.tI:lOX>,S*۱$ۦcI;6;#p2xd.8>"χx<.@_@&~ Ɏk'*АJ:KuU] fp@>^`kO"~ ؤSƺ42HL5 Jx(յ?P?fqDpK$V)kmmmO܎TK1lJ<֮s}cZ뎀#=8Ktv32Ԑ;9sO?Oxjt ||̠;le3nHV 9?\NOǎ~('u%5~I,W ?K73mzi{oy;-%H8'\/CPI$edb{keu֖ic؟&fk=9#pRx.8J t:- `1l XE*> v6@0`ST-jZ/`ǩSd&a?W(o~? =̦C筒ePvɗ>Cګ{mBIhUn%;wT'֎v%2Rʪ8S9#8'N2 BDDB$6I C~gC]ъWCJJ !ۇiћa8jN83ɾ?7-t22M6Ikm_d܏. .Vv&$R:mLŒ~Ͷg=|6r쯲|mCT֮~RatpGG|# _xnV@/| U.gacz d2q2S9>'Ӑz !q?,H*5)m: [jY&Աd6loV唯lWұXwdt)rLqGUsN(f;NQ` u9?Ƕ篿O/sc7  vo/l"ײ!8)T9LjDjlb:k~mHZ֟|G'NJenW"ڼIYU2+~> Q9͇خjove\-KJ~D$ ~K2n}tJlKԆG8 <p>|2)g;? 5~ @l\.|Vg ;UE]r?}O{F;~,k>Ԥ>rf( o3ϳu{=aY[|N˻ ͢ssF`NM5[![JK&zlS?hߕt<[s80{rG4i\'#jD_A<>6~#16)h)b5lט9d UYUU3stfmj'r͏J?-^߲k)xi fC$a?u}hکW>"EXUſUx qn_VٴNgifn?,*6#/3)]о>&ͭȦ>_%,3QڬcJpSBt| #BreC`3x,(.QwK$]"pvv|Xw/|D@?$!.N[l˻ګdlcېȇe;/ę۳;懯۝oq[j6Z1Gī]M V t EyR]6Q2uGe{\2mmձ(^6C\:#pxh/x]cd0+AMHa.WIVf0 +nCd< yXOE@?*؏c[\1[>ľ*K6czVdsC!`VG $[]z@+ W,ooOW Wwwe_eݺ>/.t]b[f= k:}l:ۖCe?tLi$p؂ #px/x-bbkUQLsx0gB~џ`s( bu%ܭkA|%_0ЏORe)sbYq_nul#HCf7Kk0-zOvJA_G~@@ZvrXͱgIR/IdSqcq-oZݷSJem??Ap9ZZcpg}|OxtOf%$x g9Ona?ZK%[fG ~X]._wB?{f@?ɿ6CʞkN ٭+#0Gp`Qo0.{;\!+Px{RƒY6T}lg})ӇIݔmR=A0u/GxC<F+V[[%f8C%;4P~`QHt郶!xr>Q(z\;n}~V@谭M7+ z#oCr"@9 ~ ,|}/,kDq9slx^ovd;^kSmkkkK;S نIeQ?$ٶ`oK/ I,0?GF B "*]*Re#YAJ柆8|ڨeѥW.<k2ֱ.H-}S2`?>,i# ׃Gh\ #<ά|Tz||]`0eLԙ_s?0WQ@ A $|D,fYR -}8s;{X<kzA`%= g=/.[^'emS2ijgm֩ Neճ.KGp 8?!zbҳW~c33| >?=qg{>/%HO<h{rD!ÏJ['z6!$ !7,).rCM,i>/@n[tVc>ՏLuZm:ćLmlpB؏r`# zX>Qq}]D؏h&-+6 C=x:=ݍ G!`}XSMv#j^?@I~`uq@W7žbڭ~eP Tʺt<0mLYI.q_mlkGvJ&{xͿwG~V׹2S><9#"xE`NCfN2NcB 胙^I}*g~6aҿq^]:[ @2|gLiI>u.FHb6i:[׏ƼLcA|d?%ޛ,G+k9ĘyN޺իzZH/9Z7wEK=738;`;AA !#0u3YHrثSײch;[ضiW@NO H<`ĸ"#m7LYS/ **P~tT߫F@FCϢr_ۋ'Ll'"lgG)/sl?y[5$vWLS@g @ ӘՒ^-!=x:)/ec.tz =xQ7^ Z**QBO UF)(7 ]> ;X+# MM>u@p%7wk '}_&R}}d+?Q7xxNgO'jA|cAkٳno.kC͋47Sz =x 7d=@-hZnnnzet'z#\KK_>oqvv>.D+ T>')g~{Xk`DGy Fh]ӎ=,זW@ЋatP}1t_Ok\&wX_kBj2j|>,_ooW:_7lt_ѭ@ʬȠqxCvЉ$:4]/|˚u]50=Hroon_؂ q~ˑbtY ~A5OitDٌO} O]e> $3)=xS6$sIQy=l?1vK'"G^\d:]-g󛑢;t|wss\_77JjIZ)~9}(x]Sd}-bs@(Alx@z = Y澗1(5&>G1RI[1RNuAh5 Tm֚Sf6{`h壞L$~*a @z^}HG^}ײ1tD]1N~L^rέb=~fN3[ŭ>E֗ךY}z=V}ftm4P4ħ+?1!C冔" :u"kCPoj&HruTO]ߜ"*Νxɀxl ʸ!-ʧ˅;M+~.˝ ~NKɝV?O?+$ßFg*1TѾdGzε \T9t :~^י=Ln@k=2=W|z9Z.||V&W 5 F3&Q]Ƈ`~oh]L@zx 'O!o.@ Qql|kc#_^o& %;~2݂㙒gtď]? 4 `#1TR?m>M|/N?μOLS= M Fѯhc,=խV*$<߁M] Vuәo=鳲M6Kbq3MGKU!<}Zgh;NnG=} k^puy37ၜx?n#J˂7K3"e^ R17:mj/>{GG xg~|nG>n8|豂8/4?(ȁՊ&diBN[ b2_CՔ 9i t}Ɛ}29Toʟ4tOQyT߮uCF|_VF|>фOE ?k4tn,k}k4mC2֏4PW@@z = o0.]Mƛ0ut 폴nkxs&$?_m Gcuzn*>O9 'dJ|/ L:g wF"^Kx@ Ou`EF{loL[ƽf/z:=dUZ=ŧd y =[א2 d5nhlsc0@z =R #=K}cj(kxicu}# ƣ x}"ƑG[uYunЂOo]sAؿO@/ I=~i\E9O@m_uݕʥa[W4r5 ųSS Sl tmHΧ@dYOe9&zu|z|{{5:=]L6 3nakɇa)$vdG\L@zmx '~F]>Nzr]VY[=j]4uE)rFוs+[έKK&:SwnVO?oԻƷo'?^I7)y%Z;k~#>77nVh?ߦG=9ܤB8Yie-ԙ-e遖 Lɺv˾nӪy)AJ`Tքd6nD_z=Ԁ >?w RIJ4:Te~cպ\>Ït䗲1s@t_@N6bKKAb{b+2+Im"#9|)7p BIիuy#x-ٍk72x-{%~T8GIpPp͋tĭ?d,91ֿu7$_(/X R\_>Z]BkJj>xR7׿Wߵʾ}=``D =ꔥ/.m;5O+nHi-:.r#8<@[̗MOD"NC=\wyiоgq ɺzYrVY|D]i# 9 PW@E_7]%Ogk_(꽁izs=o;=?|'*Iv쾆ܺȰOR`_&.[_5qU|2~r({C#S1LMs2ύۗMǙnK f E,L gS>xroIzt3 bN=N(' :=@'`+%%Ww@i]âW[ qGzlGw&x;G-xs:g3 [.: w@N tLKO5L'|r-R={zⱌ@ʖS ?Uo/T'Wt4/wIu5FZ6(Ɓ{%r};b)- ?-A'џ?i$+LuA> +2 gM%@YA;RO٫e@e"ϔHP;ɺ>~^79}Jx8)'׫OE _.>}/)<xFiʐb{ZtQzls>f[0=H||5eT7?{SޜT1Ahq"[ǸeDŠLMP+(CHL|@0C!olH7lwv]/ 1S^p-\{ +tK]NgxԤR ka b!er(S{/:Sz =2.W2 [u|oJqyZ,z?/O+O^LlDÉ-nW<]nOX&̧˛F8p.JO=xF]`@N X#'K-jj*SA<?wN曶4x?oh(7Xɿ~Կ  ^>pZ5=3ut=׭dwy %&P2xLh?լTS.erކYH<3kXaK%nmjxW4mqLdO(//NJ/?,!OWCN}4:Ɓ'C9uǀ}p: #ၜ>GL`]6ob{۞<&Fy r֫iy矧| P_,OCpMb͔œa[7fѳB{Vh^O !/j<y~Ko ă_fJ^+1NVV~}Բyy e__Winh[80Mc=wC[t2O/ v@J'Z_Y<5噋z݉Un5INN_XV;`&DlTRAަxW0$AXS^_EU#okKⓅN-̀e@Ϸ}X@3mq> $"n%ˑt2 [e%~r{nӉ*Ƭ3_&f5>Wf#mI+K(M};|Ba5f%xpqM[/az =`RT&uVҾ#SǶ܀!@geyʀL?<5y,3!QN|#7 :LX2\ejY@zE=NBkR ds AǗ& _hM,4OC*^)n쥇wOo_H-hvZ8<"#.ǡe.W$Q ){KN]RGf 响oc7L*Ei)rT3Zo<'s:??_psȹm>[,Fڨ]kʉMȏ߈~Z}]}ެ'O??q zEWſlAqYB@z=PO.ZFN-B4~?$CJ^KN~SѾ&<Н?<~rCx-^ 9КM 2YCd!CX[Cu$?=H<~ k{"3 yJ~.Y+ ť7ST/~(/j6Hv\C]L$l:>s7,ZU^ Iw>A?d  v2?rr_F>aSK/URWMneb)?ղ3SMjLf:U 5RVi.MȗT+OyO^$׍ K<=pOj6nh~7OM觔9nYNwN[y5 r-zYec!} I~z =xI;Ky~͓yZzzD&"d2La|f%NW[ L2@z\uA8ȽJ"+ dE+ O`&m%aG--LjGgIJ^P=]_jf^((k\'<'{@_N|oe;iC*"שūu^Jd.9g x@7 xkGA5mGUXzj#z>&IH^?;+X]WSuy_v{9‰䠥윉`S .p(KTrtGHOD~$?<]fv}/'jcpF7f+z]DsJT=%q﫳3ַ$+Y/D&ѿ)OJ`]?ߺ*ߴ֤@ *_5|Z*Pi4&``A I_x@zmxtZ%eێ lAT!~g.-δցyeN࿻?7-O_!N]>3^մmh1 [ue]W rkj{j4uF1tw%׃e 2恟v@d`gzR/hO#2D @y?{奼q ɴA#BqɿewWӞ] m[x ȕD a=_Jb|pQD56e<>^;ku"tٺbLt+X?GBGʪɀ؏_D HLF+QD~G^Gwɬ?H  >uy胓(g4<=C/a9ڎMm'K1LCOnz ===55kb#|c 9(edGŋ nk=?T%Wԙo\*6rNO'vmi{!Kq@3̧} U&E[gzR' ni/eB&Q\L@zE=&' uġ,wLgyȲ+S_v_Tr}߉)ŀ߸{.*#-۞Ë R -X cdC"M8'eAA6E$AH-7VW LL`NTAs!P'Nf,S?Ng67?t4{O7f /#>Av/LSW@kTu}sywvv~Zoӧ+ѷjs}}=\ipO墣x q>^FnDx )s αdJor@GQ {‰락_Q 5a:xpSL(`'zl ͓h+kHSkzNB]Vm/#59̻\Qy5bl_iJ|\IJ\[%y5}t by2-$cyǒTS=O}֊Z~zww.-DcJE<_0~9?v:)w>O_Wwd=^Q_0'BH+ !7wV"qW>ă_gI{@;3=_JF~&'.7+7b*+ULhxZ2b/ځ&u]w<WeJ/恷:@Gȃ 2"K"vdu2*z-D z(K :[P<j3dždn}A7i0剾x0l- VpVEJ0 zy_*W1^.s `ܹŏ ?Q4 pl Y࿼{kvr֗%<ЏK}0ˣDeytX1:l<1}L;c9ڝ6:׷GmRN\v͙6gg_חzlX\2INܬ//G'WWGG 1<_֏e]޺S{]GR'r""Sz =xiǰkp^Ρ,k]Ҿe m^gJFt;|>v"{NKLAL _ ?B94sÞlXNEvU׼pH!CrZp' i=4 ^AfX_0 *e2@+J*@z@ctugktY/=1o|C^2鈻yllOՉs3+Yɒ3VѭPk2`z;DŽ;u{ONw:ó FܧYm:@RGyQ7o{Al[\μ~@z<'h<}~OrUWToˎn|dpO t?ȑo{LljqEVo>#瘉lr)ON>'ch2_X`|Z[ ȾV#)6#5dáx:Rx:%I7 p>jrT+NTdOtib G^?x@s""`:V k zr9O&c!|?7䠍t0ny a< d(8-t,!u)=x^ uOO~%agʽ==/Owe`4b'?ՓC3遟}ޙ}~]F80G8+2㻝úm~ ZO%g+zycH$@4Z7|rrsuݭ1n>~ԩ˵dX'4ɼo{6^+mPP}gJ7;})9B7 !c'vw+Xu7tJ}&L\˷d ) 96JquoVK@IDATIO\*+U+Y\iRVmU,|OTL=b-o!xw~g Ny)Xlr_(7VULf3j@'b~t񟊻Ѯe8%OH}N7Re}mg7e@zx `7tI=\"y^YւU|k<9oڐ:Sxrm:UU6\7T VWJopOkvcDscy\\,4Чz쯧r2ʼ M7J?J|6r.))=HtTK[ܑEיge  xH|C?v@ݼ~ہ/CNcqrru(ۇXEË7R.SN79yν{[~&+a:<[yEdYp'2WEޢǦq ɰ]&Ji@~ٴQ X??_}~*z~ QUZS>;-gT;DgGM@k:גD ~@4ɔHSؠeBUv4kYM(2N06'A${&xoXY ' >)4^NH[O9􏕷bylS@|cM@z =79_D=.!A{#sH"S΁42Rԉ<ˊRW,1ڶ7сg7X[w^]60 =5cWCnUdΫlosߚ*Iu-.ğ_Oߍwx7Rր󝖟@ j۰Y:,g4;/=H&j'oX (Yby~}`ɺ#W&zq&26N})KplRU>u}ic!smq'vV2Ib7X@r֐hI~gxdCi5Oj;N5/E[֫>1?}822ɸaǽ?Fe3\VVE&[ou n?A8`G#)<߰pN{B-ܗ:x>9zі˙o: ^LE^ 6叵$Hw5]oׅG`Pk15kyMӞȃ&Qi{}7e5Gd"'ʓ +HʓՀ(9#o Y'YίALP ' /`.;eNI҅*w˧$==@0q `-ᖏ(m,{ XwO#ڨr<:ve}lWV0At |Jc̏@N#Ӈ|oZ6F8Z@zl~^=&'8{J`xPAyI"<ӆi=>toH֋tFQ')MdMt֒,?XpJtt$TvR._;B1>mN(]T 8O1&)2]AWP "UQౣ8pP_? ~6uK|+x pT!y-#ָ}}+3mXT=O20^t~vhٿϐYcݫazHˢEs؈틼e=>nd5HVz =82=Q?UK6*"s g{,)gI6cK8rA4^Qfx(KeG'$l kÿZoGϲSmZ< 6iۺEFr{"@9CN*ipGQ;"^gAѴZ6 C5a$i-3>/_/y|Ǿdy+F.Di#M >NL->̨ +zړg lFmZͪk})xZm on8˗ |pCd%F mB;iyQu"tCh#N<=H< .W;Tv`G,^AD! yrE%6pzQpxR0mCVOQ6<|towA7ftm[*'@NR?Sk=e3O֢#РǧoeVh0~P K2遃;{ OLHL /e\wCS2^2릊 SlAi]_XMu秓ӛ;3> r}fuyys|7'u' e )%a( ^#q[te mۖEX]u8"m'HW]%3~g;W/H&?pd)p]Ϣ?$2fGGVggG^ ӂ[feie>'\eQob倴>I_; }&:8.VTkpMwaz?il߯`aľm=AvttxgF=&Py Riv2ӆ/ִcy@b MkrU[ׄnlbr}}5J&Z hswU:Z߼9 qqȋ1rl#"r:6<:^@zIx s SQuMnL,4*d'h%lAzLd-PV$a)] aϺx?exiȳ b=Ȭ',8hH;ʇWcLs 3M\A© L,{; 6i}aBYidJGxs]p ]{1O#@'(e}^[/rPV_(ܟ )'kO6S<=ѩ2_8ȧz9΀MJHx w KFNPЁ'c=e&m$NpZ]' =A-?RS<@e+Zrbkbz3M,Ƌb}yɫ~MHYS` Wz@+zX@ qjKV:Ǟ~ WR~ L@zWP/V>!+ޫe,™ `S˘UFQcMPJO A-< ;N7XMx&XRn_&7DLlm莤@'Ӊ|`?+>(y4(``h^`5@Ko2O窇WECM#q@z@ {A8xYL)reQ2|q 7IAhV=wtxCqh<<~=׹xF>hZ,TKg₹$j W7|%0R0C?z D$߇^pʝ[0=a=*x~2Sv+O?G'4 Ό2 Jʝa(ӻ"ơeluu %d:ioEˇADuoz_Yd x,${*W&t/c@O XQ I'84X2gYO?՝M&tsp~4W/4Sz =v-Dܽ{LP% ǘ_gاsnMC#e?W{L7fֺR{p_kNj+jo'.!NjQ^Y$E{Iwsy@?&MuP}JNlHz ="z~59S@ O  C#u&ѡL!tJ=5TmYѢk=봠rGh%Ek(7 I:]_QV^r ?OxS~6$ʟ(_7 /Lwap?f@֜9l~?8 tJ2r^x1f? ;0~ꋏ"#@?/緇1:un(T9/GL<@S^˭g!d$tIQx)t?ۏ6c٦j@zx j#z^;Lx'p?ϒxLy)Ɂm;-2-NQ[|ȝ_z:g?Ded?JOof4Z^j6R|~{wz^߯fwzvE{m,埭4AAڐ?NȔH<S6d3!8 7Г$&82R-iʚz2:.D8sF!/΀rМ1s[ߑ B@ rH-ܼFZmkw\h{.|gd7 $m?u--$#<"Wz[wUd_((ITV|V0^3A`e e--oA|gqC{Z:NN|@z8 HMٴ|[Mjٟ[^O .gbY˵' k{Rּ?qeePY)Te@z =xľËyXXo#/+XDzT} hE 5oKPu.)=pBdiܰUֲKOt/vlx эvل@zQx `^>Oٍ\Ø3z.'M|QI}e`Bɰd;tG9l7ľ5EN,3 ĿG>&yNe@h`|vX.wVl_ Lǥr TAr?Tz%O*z遦tn2+Ƈ :c,M.k}H?m nIH`ٿ.O'ZAGM|Ə$g+<א^Ph}ˣn-b[qCѢk=41\9}o *M~f7f>_i`sXoOO|Xm_I;M\h{.{Kxe ,*Ց)=H<T`=j@Q 0:5 Kf/c^$( ~oQb&('gvm&Lλ8G^gY iYs.zM ⹽Ȍ遃x W/'xN`?}${_gr}Y5ZŶIu>eғGrtZ2xzG5D0 W0 pML5L6z v>iB@Le&ccJ?~2vz2g1$_+wxOuq>N b4A!)=p'I{OUAbDUCPơcFf)=H</2TAB;W@SߔW/lO3| Tr&+x *C#r[( .[ۇp$;E|ϲ!A|L8w *{&lr;-ֳ٩|TBBŹ 2B?]Ry6fjzJP[pQv/TP]ީGԴl/Zꌁ6 !S۝~EWpzSGex ko(JM$EA[| nIHP7Y*牮Oʿ+kk Lok?^ Vo9LZV淠LnmpZ09SU۷NGiCf7u!+ ^+5d2ѻsMd(w/ݟY `2&tߗ}P-y,m ' źE]}z聪/8iZZx-4>x!;OoV_/2 o7_Y@'7M.8}K[< ceEF}0lKB)unw_ѤNy@ _VDA]7%+,94PXtֲɠ2Sz =xvз8۸iC)SM#ۣwn:–,# ` c݉_8\(,!uGBqx5y$mʶ6NHz'=>^Ivp,ұsv."xÑ9iCyw[Wӱq>wO`ߐG-ג]֋ #WpSexKz#n=S;6z"Xۀa)so}hȯy}cJ'Do/_1gQ}@ x`TFx: b\\,?ϛf>?kz6A\[D^ .)!a1lr _/2`+R)yk?{w|_9ʐNQV1]MG?tͫ5zb[yS j۞3OYx%`3lmwr'\tb%Ldkit!w9#+qouӆL̊U>Sg ԢnB@@?Sz&|9>==V'JvODonnnW׫-y|yy>Y4qy>j1fm:Yȫ]:wY.7/t\x@z =/6eP ^=[Czފdz =x9?r`OE&'Ç2Ur:6FhwK/LuL~Vlw++b؍ΓFV.FWW!t9$^ ,74  )LCk/z eg7>.ϔH t.,&PCUh1kAxR?Jg10x}leX}Ѷ@:V\iI5 q+*[&4x.K= >7mJ<=HRȜx^7uy/?_pVFߎ ˾>:5q>caԭqhmuTɃ}!5F=۵nW?+._؏=@(uyߟ  nJcgK #2‹ S0Gqb ?/O'&o& fJ(j'JJh2\hl6w7Z0NiR?r*C8i-2?BA7lP/H=1_xd/6@%$z{ғIhgFf~3VϼS-&olQGeu7[l״! t^P:=KLQG 5c"$uH AL䟬OcMH,-/[nN9LՓIX$/=<@=tR+6+JrNkM+WT_cDp$t3Vߖ:-KHx 6d8=_)L2"{_Ӯŏvj}'ˠmot"5^cůy r5ylt+QD'x J`أ[Jkv5SkÀ4Sz =hy>H}H<ò_ $H gm_ ( gk_=JoMVח|fs6䜇|]5n^Ա&rmݚDCM3W˺q/AI)ײ SG:u;88 kI^qᑸ\ D[%E5iD]N|lz'Mhd Zd cYۈ(mèg` ;>(n<|L,n1Xq[mIZ?-mu@'yR'ΔqbyG P` 5'ͦv<@>G\=er̾!\k®m|z =z&cL7o:iEq=L[cc_]_a6>$ke~טѡ8Rm&<7ȠY"z3c=~iğ˷vc>[9մ^AzMc3n /?5a 4-:Cr˰g|M]hRI[sw״g s@¤<v1LX~ ^gߢea)ؗuۇ[Ѝo{(p6$aXn-h ^I$=8^cxo<GY0\MҁeDǥtm:Q6ċ|V('AHr/GZ<붠y.a;Sz(oٞfݖGM5P1x cn! .=8ڀt|ep2^@z~â~E'GcZbhϿcD>ţQVԐ,x<,08o@YllGq )8_j} }Fq e?!;8<~heNXF{|?K<=Hp,zևVGg~M0sne_pOֲ3y ly>0fCdkXˠc(߇[t;\_Gu X<[Z-_g/2eMd{0èk)̯n3.xM6Zt,gv"£=2$FľCY6c>P3WD9d%m=R( %/=H1/)ws>Ƶ2C$p#,az<C5Zĥ ]}2w\ nDH5t'Ɛ u(QӱH)=="+uF-NZb4мHGөe-^Fyx׆nAH[8S޹֕h=aGmC嬷CX+ۗ0=xy8CE|)M2|gˇZdQi}OȈ /RR+1x̲~x2Lft9Y,..n_܎6$'f^nn \__ޮ!RZ5 ߂<0چ&<ӝ>QqۂmKHh#/{`CnօݖŋoيrpzC[<gdƁ NB"qږaeuYuS?cM:!3?7nmy|fJG{>?BqGsއtJpi oSGo&8&ngtqXj:!IywssFAׯ_uݜ #§>18~mgW>8 C(?Sz =x5 ɽc =[]Uy^.ע-so  C0M݂wrn^ Nj:Qv%e?8Fh:x98N''LWKWZ/WZs ׯ#MM\ rԸ!U~ky֏6Q>(K<==oin]m* .dFԉuj4A~ 댎yu@ 48-ulsA'v0tc]èk}ed$qTBGeohNE^l 'L[Cil[^sul{ vI<ʻXFr4C땀&wWW_Wlru5U/^ XYzi0F8IIе}2ˁ$D͝4e@Nn5*!E-6_5]۰~ 2G~1:-r[[ܓ7?͏.C9L(@#s. Dnu~"d9[D~@znSd<֏*5*ڼj"}kjA%W[=}/yCBp~i*ǻ; P&X0˿:`jHor}}+f c8EJDyHgpHn>p2geʶ3<E GINfFh|GcmD!|:1# =6A6m;fަVo򮃠 Ovڞ!Bb[h+) <@.t$cN*DAL/ej&Ou6竅F'Nl%= ى<k%n:Vbq;ͦ:'b`=z}zpk Pĸ!l0]_,r@'qEX;/IuwH 6c;ѷFMMў̃w|5J{HDvp'-Zߎ۹ȋ8⚶ C`j5CK:r= ae3 רνt6|&l:Є5_]21էqqd$ #18::O=| F8ۇNyz =yxœ{$*2nX˔k%2ۉ<qj^ͷ]n;13c S9q -7=umi9,坩Á=z8G:k],| 'q mMM$3=<@P|@#>9ʹ>Z(|OríD6dXMB0q9@*^-z'~Ѕ?BƦۗ){ξ:ɾ}o\wl9az-q[0}MAx$s鰨o ̌5_H tN*-e?$lP}9(>]˸cK~].921aNG& g}T@rL5$Nyemx?%dcCS^?'yny&3={`̇%=N` [e[%'k+oqoM[$/]u?~Y m'zR2ކ8}Bw ntO_C'{zyƟj$0L"n[?3@_rF/#HKy@O]aOSt֋xͳp_cuLcZzsKXI<=yEVJn=mv>r9C;:< =&ڴ=xNY@@?H&(2z6+2TfE7Tt΍̸ha^k 7EG~`!{m4k-6ofЖVcؠhӕ MI?>|tY =` f}-52ĄeߊSܖȫuY2ӖAgRNnɉ\)=yE&xv`A~=#rz1z<{<`u0Xx#{ eJeI4 T `BiVs1\ /6F5_up2#6Nc|#.icf_ȐV}oXs`KgR?ĵqclYPF>^9}:! go-(&ۼUwR|b~5w_u%5s!> 7?x36ոl WzlC̡mQQ Zd!.Ew(ϱYf&ϋd_{an>8~|@"-_\g٦ LbYn9yImv+7RϘjs\?yZ?eAhg`:,czbf`?s inh:/їҧc| 7ը-CfTv lm`bQwQO3 H[8Dn~ٯǟ>v'>VhQ @\p<3싞}Y+߀g[e&goÆ_.6L;RO?pq; ~/E"|sC{}EΖ թO_ (!+o-uTCV}f+1g>}v0+[O9R惖*A9] _UZC0¿r7ǜyH*s;3Ua8*Ϙ!DŽL_sGǥ}QQ ?10T0Kr.gcdc37N :.1rRΣ 1gqϷ\@ j؛@IDAT`S= 0~p]ťκ}O>5>9B߰ a"-C>ɖ!#̟ox1s"+w;gX:ޞ=l|ynZ5G~w E Y#R9g>8Ԭs ly c4*0*T\]ڥEI:q٪po?c\V=rsM΢Mٖc-qqG7]o9ewqaIƷ灀Uou㳮,V=ñɋtm! 8 lh,Ǭ -O^}9>c g;r^h#E>2W?4!%kզON,<z:x̛Ǒesk)\.$?` \"h8F^]49'w^O9IiTܓi@XV22<~Vs3ƼWl\_f⸙Oۨa1q lO^8=sWf=|S&vmkO/vY=g_p)dϮ/AagӹUy\v%raӮu6l q[?-duy3 &g=jZ6e #S RV2.˶*͛m^}#׏^[#8Aax J3'gތӳ~;ZIb/sp rgؼs㧱@W2OmȐ1[+8[F-/\φ_;gM@D Io}6}|M)f 6AϨ|ΥU[:vpa,OY|Vr1Y\k.&:vӂp/͍yC7M6'ɇaT7T`ZT90D!ǃܳam5Ft?6,|E;9deOCNLcrSuنLswO-XӠU'E 7ᗲgW[Oknjl{rs..Epr~]myP4`Q+9/46,m.];~9xp/>X+gFNK~ȹa-\g8<^P[M,gز,fQ*Yɳ-AӬ}gޙkyωYϸysq_MpyLKܱW*%[Gcƍ s\,+sz+{br!3v?rA9ҷe8}d2yssL, x 'VX|Ϣ5',|!Z=M;c؝IY&lMDZq\ptjx*SÂ\Y&X.Τ[iǦr~=/Xy_[\ ;2A϶PFW]NyK>?p} sƙ+}6|s/O-ss*Wc,o@SiM "+6ǴdþFǖmkoT`Tkl8<)Sv=o&g%.Rsq͍ f2/cɢ;lw/i3<6ܿ6>uiIoSshvz1h.o7ס|鸌_br:ɓs ysiqF;;;;8;⯿.}l8C?|l^ekS:>ўM.r,٦.vc3'2Pm-˯98lW>N;c'! | ٔtw43<8blgYGؙŖxYƙ?dձk7td9y^kIvٯMlsϭ.'xlҒ\m̳[|ՆNlW^Wvvr{/C;}Jq2ǵO)9GV|-%ߒ=͸גSm r1{wcQ\nhY4*+s!G:r NOϿ}xss|~=q@ay3+2=[/W"CB{6KT7WU6jNSpBi׿~31-88%rLb{lnbͣ7n˾Ͼ*tl/!Y=>ܚ˶5q|g\L{1 y 8ZhΉAw>N{$s4.|,ʾ{ɾy{Kbk>rz<'5:K=s,d7v%PGEbzէ/gWWxrzzgqGϟq?nרӁ0U|)˧nK t|yl/sf^u'`l,yG>~^k`oL$9vQ0SbՙK=ǴdCʘl;FfJy_a?,˶,W?:$f-:eD?׾8?*n Gc˲>9q1֡ħ}'pЯw}(oS\!slQjaЉ7NTp(=VԏrbY!{1G÷+sp^m`n}Ш{@[蟞 Yq7/O=|~qyyywtS)'kS{>l*ǒ {r{?қ>r|s֠Q?o@ncbqAϳ 23;Fʙo#/18mƚ+s˵86࡞mykk/yd3K'G?,WG2fkI\D`/)OSl'0^sOߢro\ن|Lc9>kɞ1kֺsGg|ɋ旓к4* +_ @tyuzq!:o/cU$n3)ړAr29㫾ǂ.iW|زuK coMJ2hTϫkl8t3ȓzq, 9:m52wƙly\㳯'k[gC=/^}xs,U7jk߼Z6ܜG<\h a+{ .s#sa+;)(o'ɀ5C0b5:6/~3{3= h3#ſ|R[c4hT]U ӠNOyg?/.//O4NY<p)|rxlPo-*}X2'נQQ?$1ôgU,4;1tgaXmƢf\=nssL`W\3c_Kϸz 9>gXv . wϋ~rfǫ= RVZ{sӱA9uͷ/Ϟت>H7tUyY:>8|D9*+Z;q~_ṟEq}|w s4`>S󚬿Cba۷jCG9Ֆ1qEHC*ZO&|g+xYP}Uv:SeOqbؠ}ڶ蟹T{֕9L.|-o 3&eqK~br\O6xY6흋oo1,\Cm>8sY蒲\;ڪ=Q]dq`{ʗj'_b^擥|⺾s,YՇ6?! ĩ]_FC?{ăox6qrsf^_<^"3x!s#kCokJZsܵbT`TCU6vhkGcAguAVā8ςP 1[mo9Yze/'Wzme⫞1Hxz/姛ËɌs2855=rCᵇFWƕ/䏨RJqj+УԚkyӱI9&OOܹ{sLοd79mMǧc9?0wyR4*+;QדrWξ%[#J_cӞ ǐC*&ԅE? yЅ}֙m /&~<%f}kjK%9?ٯ6/۔3GVuyO֑C;66X798}WWGl99f;kk9^Z|\O` HqCC̭._!P6b1?\\Ҧswؙ'2-K|^*MxzK@'GSvOf6:gDZ͛qU?d{lr.*܈,mPZrsfF<,fn&.XF= ||B:wgs-`Wc:&-Sⵡ2vk)\CuuB6@6CʹW\)}z{&'<۪ӗlkv|rٞC0 cz2q4ܦ[Ϻ.37WJy_]Eg?/Cq?l 6N6ޭrϜ,QgW`wOtVC=;ScvշdpǞmU&.7ç^>*0*+&࿢E㱬ӥ< .FK-\Otg/}Jbflr#/=dY 2cZh,o~n#pc~82ctٿ$׋ Ɏf 涀AW;|96l,sebspU לDY娽r㓞{\yU/ٞc'GůX+W6u9,Osس/!wsڢ?oD-Xcm#Z)Z7 p{x!xp@KنlN}DDž혼9ǐGF>@d'|l~g7{>K!Ǖg Tq~œgGF  {əxgCdܙz~}Έrl2:2V{g[mfSkwy,Ylgo?8spev6$}cFmL?YOŹΡw6>Ǒkb8s}G6]y|&͟}gkUl5'ϱ5Cʼnosn&Fn>cT|/l/lˋӀ ŸLO2i&Un+`Zvk6}r]Y /c-b*]=3QQR7j Y]8k-O>qY/':XI{e__<۫,ҾsLOk5'%SelOjw⟧?\(rAؚrpW||[g~(o[jOI6N<0_=7BǛ-=ğ_?ɳ\51k/cƙs->ȶov+o8>)s{]cCm?wk3`fx6ɾ,b9O0ldcѾm` g}ԚyN]&@~C*ikг=ی/_\=[ҶՖ_"[|T`TWM6bEM,cV_'װ|]8 dxOi4ssC2f'Z4ȇ'U{U%lQf, M7?wW[͗\sf>ta;f?}:9tc/L^lq1ckɜWz Yr>gJ|^Y'׈ӎLu\ !x x&{ 7u3y4.r1qW |[cm0[kH%{š/az]FLvn͏|~\> UIxi͋A}O=f7mIK~Oq$C|n[.5{t7[%X2OaZ`'v^{Is,?-棙#b.j61r[竾%OǕh=oS@XP,y1gwS^C*@eTT NٓӋ/g_{p}}xsswww2|J3zmO|U9qG X:*0*+&q@$2˵CؾEЧE+w33<0mlD2lC7!r;싘,C| ȌW}q~ߟ7I\@'2Aߞ<>Q~O|K6b{eUz"8 v[/ɤ?&y^Cm&u9Fƣ&K%fxNj%{Ŭa|KyY/%4,9~Z?K~?+GgݻZvŷX?70i2#֙89Y˓u=x&@˧_\csss۷OkVa 4̲ʩ՚M?'6jg=_Ʊ[U[O>q/=_|;ȷ Ͷ#=snZ)WnѴ/+ffC&^Wss rn.wM^1}]泾6s#x9Mx @'~rZyogU39d˧+NOgqGEy}X<x..P9})Xd3B:.Kdrb뢿:>*0**&Mq'u,c '1pWG Hhf}- m֊6{YB^t c:}D䄲z8vMǎ@Gv@my6YKG%5`<c]կg2O(.YiyС-.' ;ts]ڡNGiodkuĐtFkQmkvqύ;$}!-a?}|m,ɗ?[Ϯ팎Z!q_0-=[v e#2**Q<;..8/cN]<_=\]]^__c9 /9}Tαk1p?&[ĬQ>p8g2奎G @,)7?;>Gb!fvG@ -Lx 6F<;K i}o!3Brоq6otw 7?jУy|O>O @{n6t}r/F6e|d,` F@G{+tf>̍f\g/[P|2_ȱϟύiXHfſxGzկ9W[=^3p^U@ >6ƿ-E{ 1{}ШWQc9qGC3<~rGǧL!:Da9bUXqr/c-ʷ4F%|TcV{moiw1\~KɆs_kfq+ș rlXp7,ogy/0P[-j18nuPisʹ ~HM]y`tZ{O|֥M><`ě ZJ22?/ zOu>N\5Xk>c4>fsy9 D} TqE} Bvc.&9xrn|F~Uڢ;ŷp?c+s?7_~|q!`g;CCrV6pjC7^Y>"Q7jsWn*Ѷr!H~O`6O1;|ٚc c )>^E~ްx_<^^z攆k³KGn(UXJ̯߅?^7P70lm}lo& X#X#V?M .`'2V{W|N_lw *t6RKqi=?,wP?w^Zշ`jެ#0k_qu}Ě{5PNY^,5_wh8pRz9,vT|95vxLܒ=| caql4pm$`sqqg8kbwPgY욬#Wm`q@G>Hj`XB-V\000f[죱p0yLl+!]>)˷֟v6ps_:vZ5ڂ[Gtϭ柇oOX3:6l{C`s[ϚS;}|r>̗EC;\~M6BJw8wc{;:1T'z3*}_cY׎Ɓy Z&:xȐ|=?!8V^!\SN>|=1!~>-X<9˼mAqjOH8rR>l=yV}9Ub|yؑmUT06(РQV߲}"'/ pSXgo~o?fذ)Hb?{p~ Wg==;X0?cql]c?Qe{صǸC?>e̷-\lO͋z)n82VBțXL}O=ۦMpŶɮ{ߒv ]bZϒ}}=%;vU]HL]d5c*-m_SЋ=Q_VN˝S3tNomrmr$/,GC\=cԌ;6eHjf.X|ؘ]aB1 ,?gEe}282LrC /O"*v6xWc>Vƒi)F>̭ẕۋۗ3Ulx-8ǂq^:|P?_S6xkݓ[-4?uA'nT[‰Ϙ挗fŊr{kM7XIZ^#ǜc{n_ύ7_wa8U{O6Ơ#kblK dlb <#>xZ,WFF^$miW,[}á}Kk3CɜOvuvx>l;oIl@B>i%/Нq,pe3΋lzrg .~yul zKž6ZoؠZ׭Ͽ\cfǸ^9_{s&Ep:'9t96.'+A_ʋ|:YZϜ6KršCl_bO?p,X#gޓ]3I8_㟫1Ky/ᶪ,}srDmNxj]\/ jh2**]q;CGWgRl 1k>0!X5_QQR߲@m9Xf@A>lldeNN(ۈ/89yO,g?yˉ [`D,n'Ŗcc\;}~pbk~l cǼt|K~udB>xӧ r3ns^.7'}:=Ә+Ǥ_}ǽ&W_O|[[ѵ)(5[|,k-S=G7M@r0}^ @_btF~W崄 o=B1٦\y/2| ocۘ.Ƴra<*+[6 ?gPu'aɞqh#r yښӾ9wNc$E8fx_pQ`Y~}&>e89@Gq萸慯gGF~A~C!f 6ln`cBGf< YE0D 3Lufzɶ,;`?;ӿ~mG>UFo;.Ƹ6:b8}?/v1N1k[c|ڭo |h9=)c"g{Bw| ̱:Ǎo/  tpc<r `XMs5G C֫iަ>s#O?Ƕ sl1!{>F̨To+4<Օ*k;K2A9Ӧ~ 71UGF>H^kNN2p@1xKDv;;aL.-z1V:"ng3o\YƟ*7"x ooi#,8xOGO_}U'WE˹l?v}C[!slŬ1s-Mmi]sB\췼~] 4#\OTf.t1/q_=j7FpӦsqY#b'>ld_y9h{L6ynD34f9yU3qZ6:T^\}̵f^n=p:}xy鋽0=c*Ȁͤ=ɓ[')ܾ Q^k7<&'% _' WC>8y̶l 5dڲE>̙i8U>L<̽BɅ;k$X3iזP/>ǟULϯ l my[ m> ZߒG(yʭX,/iAslU;:[nre3Gy##oD'&[m?B3ɿbFxC *sx. ,dgwrh?p_Onɯ dr6r5r;זqUVCJ~d='gy@nߡg$.7|(_ rȱ;i̐lU|8'PϤ,ǡ,϶9#dZLT/O>W^14|X?5_޳ոޱla71raƂ_⳽+vsOنLtdQW@u_>_wuvuuǛ=o߿qWD<ٕ3:lC8Շeֲ?[60ڐm g϶ O:E\>۰av_X~ ]m[<'lFpCąd8ԳeOm,Fǖ9ԑ/6LjOfg.9˸?YحS>V|[[r=>fM/P9Å:9+6#6N1NB>b_x'w¡Cv,ϲqkQ=Xy/F!>G^;|9Ė1={}-P'0pHӯ79r̟YF>xOM'@?xYm|Tu*'[2nM<]Ӹ+G|ק?6qC&F bmeN5[qDȳ >u!p42&.K j3hTCT56Ibb{w76q>Ox@8lſg/>/c3C{|`+'۱ű47q͓奱ӣޱsO[!Ks >VcЗ0bT'bP|SW/(s܎'?gt/v<sO>"l5nnicyi.W?$jO_k>_-@蟖'\#Q9s}G<*1<tz @jɠWĂ 7y&߱_!s7=1q 3m P]g|Nٜ)CjZ߷g@,\sI ڂ?.]gifݜuHXq|wƜ;"~-ڗӱ髍Ld\%Ǯ}ZlrW!:^%Kbr:fr/51r!_Q}|&ٶF_sN @x-S_X >* 09zͩ*NOO3t E5 ;T㮀s?3S'lҍyG`kl֑YTqQ=t0z xx a:wDO5lg6Ϡwй a[Ӄ ? ql9b, <q^m]vlok86Z aTV61V'XCc1h1=<;b%p71;H^NhPv.F888YF%eP"gO#:szcl7e{ηKD>PsQl+ {hضW^PbPo~@Y x_ϋLGsr[|0Ex5`|={k6}٧\./#Pk_Z/?=4Ϻyw0W>q!:7>Dp46w$}ꃏ <q"q6q">=h,s6w_8Y^%?!pߑoL\|rmӳ P/[mc9um|ntN>*0*^*V!M>/g4>:DvHs-wu심Չ#fmG`mMs=l~h?_bp-44FQ+o܌OAضc?{xyqY$ ~6)21ϑs\Ͼ*=xRv 7`﵊xRax'x &~[^>q~9>q{_8Ǵ8r.S.qco혃溦^W[a ;ӳ˼D|N=爋 &)˱+˳-0kU~ƼxUF7feqqzlQ1V̉Qsje|_m[up+/y?sGcemE˛u̟f2mШT.톓Sړ'cf/{l^8dq\Ս5'/O9&gcAlfڭ"ޟq~[~D̗lI=Kv'L/6}|ھͶ%cL6l8`2U=3>enï cI Uֺl10f/>`j~tWF7f^X"w*qG9Ė1mnHq|(cJ1'bLKN<ې5_f[7۪lr昌٫į,onj@sѝ+˳? |kݾ6efbL4,WlU;}VK~b#F\r #Cg>{ł?E}?K;'+O|dc]`Wf{e}<_\Wn <$Lۍ }Ia1Kyk7|\;uesb?sq9;f>'[ל+Vu;9g9p6q0wg @(`~*iШV av9l)%vNC,r :mm)/.kO֋7hT`TT6}1t) eWObw\,poXS\>n_i߆ yl 4e#6٧y%Ƙc[ǿD8g#xhةdl3NڱAj8ϋ.YO-Dѧ:{rq!{f}<{{: kE#2%y޾ao)Fk`K{_is\p,~8ߢYzI|ִ7FlΫ ޳W[{p΂;U>4>ȃFް8eS4NarjCyjӓ 2ViW_5Nv,{|7;klw0z>1K70c}x Os\0>w6 \^ &6B\Dowpz\3Z<@팳g.Wq"1lG6&`hwv :T&4gCmKɼ3߫"6/`&@` X^00oŢ|rt׾#sbjZc;;sYAt3cwg[W>= Ms'OoR@İx[Odl`a r~~ۿMsy rj#+Yʓ㫬wLVk>ƛ|6/o6%oτ 7Ѯ-EW$M?%xW!i,/b#*.4>;?[[J\єd_3'c r-F嘵Я2,/H׼k>|U/k6s^ﲹoq۾GOq!ߎ+qƪmwgZZ<~$Xil\ GÅٟ WgߒK H/biU\Z#+AӑdcVydl^Ucz2wd nhsa--jvs._X,Dr֮-Gb~ ]<OONM& x@~l G  (OZQ¶[}a"ǟp 29=}:9Ęnr~Ϭ~|<6l෷\yb93gt/XpKC2~k۪OñՖ>okljɤ<=,>1.~G#Mh_O b`qy68Il!r˄?gLEiէ_e >ن,Y8FYo|hp=_/v03d{#C\YmK2v Sk1K%{}|/$Wn.+O9>/~jql-똲ޓ{6~aFp` }scLHÍQר@{c,O_|xxOooooooonm<~mOQO&:i\3Ƒ#С5Ȑ~NxGFQ^c`p04&"ڑ3+Nl M4]cnw\S6r8(,]js#u|u೅81 \tMąTsp=Zvbp/5+9[[gc2d;89ѧŪrxONEǖ ]lPBϋ=x, elfζ}-z-}b ^Zmތr6+blVp@>~b_-{9=7sRvx0Cw cy~-U~x7fluKՖ}2B,}sO8?b&t0hT*LsէMq@$Ǐ۷;Ӹ9 6!|IIɮ,gY8ecǁ 6I>hT`TU6I O*NNeRϘ ~pG v1goB$ߢ3M$⟟nA, w `Kr>0Yu`/!/p"bsLrǑ\McE5uE}Gɟ}׳ %>98Ԋ }sOi}S}U;!צoN?۲1Y^|=[`Ʋ{ d+K}j'WcΩwL/k_b{zՖ,x9M,m tA 4*N.s-oL]NN/i<o?qY9!q*˳MYN|ɦn%ے>ֈ4Ǣqrl3QQ]0~ `2iӮ.F;9a xkw߄О +ac8 ~`DLw@j |$ere:nwn㑻8B.)÷9F}2og[cQN r~I=> ?cj1:cs9c۱Q ߄_2{ۧ OZRsdsdHmrgsS1|k{|hCqK}W_֑s dH|[뼚=Kٗ%؞g>={e]yG6oG Ø闿 4`?<6/74hTV/Eler׳cvHC05ogɁk,i_[:G?/c_ٳ^cج+gG5dmG.6;K 7Έ?qΝ ?8nC9; ( ~mNprO|r?8yK|zl4&ʕ-9Md{s.d֞y4*0**|/1=Lc| q?b-}Oc3?ǽYWX/>o, oClsFAb%[c8rWbkjek' bt֘[;*ck_Ucz2sf߳x-.'y 51Տn,G撃Z|U߇>rʙ#GV?doϵOc_˙ʵYWqO[>|Ϛ,)NQש?.ˆC?LUl>;"64==Z.ә\mPqd.mr־980FFY^$bFO~PTs_!6>EcZu:1q_cw|п灀-d;D G`ڑY UAꚋ5ٛ0b'(p|>ǓӇO ĂM^MeɌk'nzv쓞;(<&Ve0qAW"[G͘ìاFŅ/BwKx qF_wϟmK~{~ķ$Wstb2徲=ˇ`2wDZeTxX5ؗWMFտg<ƥEΫw0fMpo`?'6;u$&ӯ/9[f8hKlT|q9l_?x)~0KCnA}Y9˧9~hmھm9}WYۢQ>Dmx3Q8(n'ِs'Sя^lhǯ>}WUq[ܑZLnI:\ϗq=>t=p'3NnxO7M\}`(1K9T>$kaڷ2<OΌ9诞C/׋}>~1@ֳ9Yf'wG?|c{Lia4*/fRƸ+é\emrA^r6c[Aoa29Ԧ/s'l#nzxϺ2k{_ O+u6 OV& Lq7j*![i:ߐ7 [26Nb`~2< o<\0i;m%޾Y"kHϋ06Bĭ۱a#/uPl^5|M F1.|22z!^1sݸCR{LN}~^:^c___{V?ϸuYy[;f@orwШ@\PP8}5 >,sm-?mpflӗ-5[n\! ¾:׉Ek2~wqA#BniE0 pV;k|4, qB m;~bsgMcu6];kU]K_r S|"D.t#>W ^5):;DW6S[?Mynʮss2|\ZAyV=j/\y4+\5 u*M6ŵgSw"`wmf]9t:uؕ$ģpAx$q:p'hy˷;'LŒF,rr̉/fe0ǒ콞roXYd?&{PI6n-Xe;xL-i3a/]9{|[ݍmq,37c3۹mgRSMx eqXjJ|,^}'|b6|WlV*:P8$+-^I>krc %FKjX;enħ5x$yM5nLu=~1_eע_P||^JF_s1#5y\/^?d6J2F]%uЮe5FGEz)$(^x z=O{ȏ2h% ~$d1C0 RŒGER:hex8+ ?Ahlkxi_\d<gpi,Y[%鲈7Q=N }Ա.(YF.uDg,ldm`,d=hv-,Q@?#1#1 3:*7< 6Nhd| L<ꅎT5U?тqjm=L\j*Ӈ?]DMUxҟdcO\Z /8%uǹZ(c%-5~G\jotŋ+I{}^W<|o;xC>>[F}}f^ϮW+ C-o7u!-':g;5_ˏn6hnX<ˣF6b^.߶˾aEta#-Zi7#iRW-]Zqh@$(:q̊O2D{z.x_ur׳ ѱh!]/Ok:-Cj<ɮRM^7b8t]R^ ҕpRJ_:PKK:dz;%k'xtGí D.}.#tx;{18Q[ʈ~d+uR@dr#PU.z-'B6x k|^6^^ݭm|ycޙ:Ų̈́I@n6lKOqi|p\\_ᒋFWd@2b$\P:M1ނ4cDhm۬;68@R?cઓ8qB|rlC8zc GGCm:.Q1Z91X)G~{OFyQ& -OWQ݁˯ z| x~&]R]G^}{=ZF@۵]fo7;*fp)#p` V Y%-9-˄ qC/}wLjsd.0xcYjTSʛ;W=X^nxpp~`E0_oejο4O6{(/ jM{m?SK~ozxν"Xw Lbi|kS[骴AY~ WU*6rXXCuMs#$%˝~Y/7}:SFp<զ뙌9Gi!!8<Tu/6,OP/8ۃ'gd2EoNnWU>; =G#NJS]0U]}ξ_Lennۅ񽍞_pc$&qdx=`m3ȡu'ŕAU}9mGW6u8ׅ*ƪUůA١x9Soǩ>Ӟv7K;?3S&CGȩC, 2ٗfrۻ1D2G֍)˾KWZ oA#k<|)I/=tU'xC)#p.`\[p~>1 I bA'kK8dL՗] du'3evu1wݨRlyM'v=NГM @ bN*C Rzє:7`#S[xrDQoSsP}cq}ާp|6~jce8^kʸ*Se^ĥrɔ\0pu'ܽA7 Aȋ z 홢?C5xlVq3=d219ObZV@y VL׈x{'ؗ'O.ԉ$^G ;- %p=^j`KmjttTޥ8z8n?|KXa :j-E:=) r-ſګt.↿L#`=gn~vwk/K83|>y{zzY)e￷?vOOuDh[NKW-LvQXR]CN6͇=s;VV3##TMB ‹Ý?4hHgL_zB;Sm)fF5ޱv$:Ȥp PXpdk(7!P6 (k| BT C+z:!4$-Tڷ⟻<ֲ@۪_/C<|cǘ@˺w-Z?ta#>k42e-g|qXkdaO7}zz"y^fq͟"{[(绵I5~7|}_*Kt4$풝3e2gE78q݉?6@2#f%kMfp 4jsΧ7T>m\k]'_+4'}LWNOz2y/J;:5 _Ǒ.1(yN,P!K/Y|y>8I:+_Kʣ1 S@W>NVDZ*@ ɮ?Я&J&ߢ{#d=b=hY6ɪ};9${җSc UFc[daE^ 2/Y}ւȗһTLp,tլ.-R'M.tۥnk&, -wlo<ۉ[ӿ>B\I5\dJ-!\6 %8k.@m?k̕ТoPA%|,ip?vQ ~pOOs4\I"~בl WGyM }%N>SFсקR/xe'clSPzN-/EQ?x5_Syr/Y } HKWuKxor)Q>d@KC~g 5lf]ؠɺCzQd&DKo&b4lo[~X,ʆ_uc~+XiS˲@SᬗiLE$[J+gi[_4olg~vc<^X -G/yȇx^0"@IDATN~EUp6uWjP 33FC7B95D\w,ZŮ8X|>&48Q!,ꌎW=j<ɦc#Eq 5^)ِ.:Q>F9a,/V/!ǻ<*6>Nz&%u=uW:%[N}-y:Mb hC#`wgցD Otu٭oW| qvq 3-n $/G&[^H D)ESwU l E$3gl0r2[="qۿok\WoaQ/0 eT:1{=t"woʅcc.ex=-@|QCrlѫI&e7!ݚloOё~3#li=-K8WIbwa2Z;ZmI | \[OF0:ڸ]| '͆'C|+ xr; b9F\Ԑ} ħ,SF #p|@NnA —Le*O*WLߧnva',,vJb#Aꄲgy,F}Yl`Cjѝ&rF_ ~}DeѱNQ|&oJy*7~'9}Xce*?X*@;&Zマ%[[tѳOF%sm QGN eЗ$hKmz#&`Mqx"~!d3st?>>?TM4&Z::lc XTX.W Ytd(eh^'џd /\P<_'WKQ)1cSʖG"옵 >6YX珤iǔ}c厕1& =nrT2w9>eߏE|̔Pz>y'^ r _8$5KF{%U/.fdNgnD/G@6ei|pMկ$5dimdy$Dt01-Lx}bʢi @O'qc_ ?M`[ J\>I&W=>l<OrDoJҾhec eE>[>~s+{!l\~)x_~w / Wآx|MOh֗ #0?jv/OtxgH!Ck~~Lcܱ2c%h*qxCXh;6sZ cG2e v]St_s[z-je+*%&O:صtd0#8s>{\Nx Z> |h/&6PWYttM8KS'u(x?CPRRP_ߚlVzx{Э2|}xKeOu*ui$Ƕ>+%okt#o~.Gr Gl-my O=f;SF`r^7dBU^$'I^NRy⁓ :፥CmŒ@F D6l:\#9'4Cti I|(Gΐ%<\2-_7Ll My"PdQ4,Jo<f ?$?l\єu) Й*޷)P+cL>>Z2Z5)x r|x`[ E^Ƿ^8Ewσhl,y9lڂ-?e`kɇLYF #"iԃy`?!:L6}zdHu6R>ϟ+C);wp7MNI;sOTyZLX'>nc4vQGd5|yǑn{R/y FCiFX֩FQ()㗪WK,9qLcܱ2ckzܕqU @8;wfRE6Gl"4{~"]#w|{p!v6g2GDS7]l PHZv{Cv01/Q'kjQ'PTԛ&c&TGOTwM\k8}LJeBhb|Ѯ}^RXْSD5Cio;q|J=>zP)Y~,CSPSG6T)ʖ|swCkergʾqz_눀&R3&$S 3N)>Tl|('/ҩ!F0J9a9}ץnʨKrOFc{(mģmCp%[]T@y"eW'dG]mXuZomGzZvOOj<=ntHm {POipL|tj𕼮xτv bˇ)#81W@*1wW~I^Gт4u԰~?5 Ab}e,E^J??~*`.ڥ[D[mjŠZ\"^ʔh]Kz"]{thXØ~:yNht-5}pC[;P.]VWml EukKyR@c`pdF`06.nkl5T;[?o_6//y=>nsbfk<@weL EEzQVdQ/mE!d%n+ ̕4@h6&x~P G9B+>i{ +Ĥ뺉 m<ު'1Zz@GOǣmcL?n;q#d{:dQ7ұ%crn%YV>>^0}-._^#XG `5qimRcT-y=.Gח܋Fߗ_2ylZ|M*璾[eNSZn-nmLc"@)| )/>צOO$lGlz{ؙ2#0s{n\;3{)ؿϞm^ X/VFi_!yxR!{ʩђ2ZIku^Oz6mMTZŒ@F`4Wj `amw(bzاVT`99J2ɼG^d O|I?1-YoASc~o|$jmV6ɀڄ54SF`z8<``6/.}>>.mHM?/& %M&k႞q$N+>|Y j^,=>gUn׸r] @5Xx.p$oNg:Pz ^CS" )y'ɤgOVg;`W䞧qU^qh'Eרkd-&ώqh8ޏLJ||8~ſx6IE9zz,SF؜vOfs7_.Wz\>lxBݭ׫tJw4bm b)x oHѶ8r?G*KPrh}q% 8:WZO|h?X00J$Vj%Sl)qߡ2ƿҵ5Z-'?2GL,t6&G$vuw͢v?IOБ gL FylEr~~qv844kk~E;y>8&OoW5vIPl$X)Jv {d>]$XgMҞh=@1}~w/]"dž%ʯx-fM-Ldޟnf|r`D2Gj7lP=4O@AE>׉v;ѯ'%wN  ]e"h*-Hb5z\:ʇxw2+|)G5:DZ:ZƘ~jcCe*+V'[b,$?wEh%?#ެW^W [Ϸgdw[c6 (DsA Ge-|Fv@UQËBGe*C>/Zp7C"pFhЉ@@a|ivޯ;\}@{HG@ dItkK'AF&E~/miⱌc|u?t~F}kUԥ8VƘzm[iG5Y(V^Z&:>6Igl~M$ ҋH, |(59xe_M#aF`z#]Rmhi+*AWшNz'%>]=;UT0+qAJ#;WFUaZ:SAh2,Xomz'r{͉ռ:sbs\{Yrs%1&NSt.Q!:5Vl1/8TeN߻]wo.^=cY垳g2=~:x [.+cLNSt[ X&}lHFe/~<(#O@[Ax:_#|8Oy4OSSʸ7x-P}^&ڟ_(e19ux窿 ;gY;;|eN=ь#ŗLjE=%F?5x҅ ߭ʖ,?0#/v? Ap ^Pbϒ5дx5׍ڿ@FXMEa&iؽ)7`2e\ o>Y OSN: Sλ=Z1&Ǧ%[\ˆd̔`]5<'):^ s'<*Oݡ,;AKtŒ@F`$_v. ~ o y<~ fȢݡ6w0nτ Lr@/'k(VWufq#(l%MM(CM9$;)tSu*K&%r ѧgCcȶ.ev Fl42i3ӲZ2e6obq?x￶<ΦtfZ{|}~^oVTԕk{d$ 4I~;T'k?Ջ^/LH]YjhA2?p=5?7ep>y蟳 ^W+q3+!JwV濎e3WV&?Qwk-|Q_z^;$t?W* ? S3TU }ѱ H2fv,fuǢlV~~>>///?Vfm컴˒L4J=~k4_6ى7ϽZ^2/Ԕ[71:UG'0!TݖOxOљ^fz=n}\Oe飕`t7yƞ(wo,앀?nvƛu >HSlLJOj3R݄AٝC~L2)zCL_X׏t} +wyѴuN#fvŞx.Won];\.N滼=O .y4I:ub.?`HA = $pSq^G*~`E[bS[_StbP'oJ:I1}tȶwL8Gs\펷$ ,%-;\>*;ޘ;d)sTf$߂WkcOPu+OF6캼7LzZ؇'l՝k8<ҐnG˯d@S:I*1(qʟ@5j"AC<נ#( -C;Wd\O| d x H+o :O:㻤itNh# ћ# x);VcS_[~lXb#}|FXsuaQ@N?^ooHFtwn,yKWg#T׶!޽<8` .ׂI£t=.}9J}M,暞]uj`#m7ܑ 2(!LW n:|yHolc6o1l`HdKFԃ=atOߡ>j5ޔL^̺D&(=uzh!6c߰X+*OMZ2kyސ;htZ~$8vFzJ]K立c+\/SNF0Jۘ YlcwcOw|2_{ˡ˴p?&*K8A_Bu< /^ʞn9L~F'E[opsď Gƀ*; ,Cl4쉯ҋ]q,ߛeh= `}.n!]W4O UOMLhhz>xFo8op?P4f}rl/m#ϋ {h^6ߖ[c6'[lV}"Q'r Qւȿ\ŶjSx ?z=m%O5#0p\u1gKp5۝Ip tbpA/)~ψh >5LJi6ϔX@(AԴր!o?XbMTU[xO7#6^779/f^\Zt6{ |"Oi5~䡗iZ7&4f[}ɤ7u|b?o}9"+##xӫʧy\uPv 3?>?b2Pmh0_|S:/SJaǾgxyyb\.[7lSj[Ybʊn:/YC_"?&xC]egmxv1Ë6exZMl#NMŃ#5dW^ h]6_HG3kPZS႑)r+-I/ me?"Zfd\~ګ׽I@Cq/끟#AglfZ=Fm,w뇇GE,*}C{SBun2?ZZ ^PQ_>=?h/qҋ8z^&;xS6s#P;^gr7ʆp_N3^xF##̀l4O0ʠIA^$ێhp!k2x=rԑ-ۜ8 @QJ#6f3m+¿61z ,ž0a Ό><=mB`a?[썀wk*-5v)~G;>k.xL6e#k^gK1 G6^/Ȕx&чclq)Ces#2/{)B{[Ⴞc8 |E[/7jɯycvrylݎi@d{^)sL D[/O|;?vg9|tholuwt{)81Ǟ4xO6J^gZg w5y(1A =Xmxp4I;Qi ɤ0#pX 0/~l-ͷZVo;W}ſ4f}d"J Xg-/u(::§B%}CPLpk"JStA6ֆ15ajjm <}Vr2롶0_Gg/η|>-6(x\!&nn{ٌ\}7&׉#+y9<5=1y=dK|t>~2e~l~@3X qT)Z95쑑4uT+{@{3Vasܗ;~6ղ;j[-5-{\=}JsZ7u[|swhá1h.-63爀-tl؆m ̀ƞ Xm`W_Ak<1.y$Eh? IJsh5_en3G/=޻2 A6yKƯ3EC:[S[|һfwhy@c?gS0Awm+6M`v Sy@jһDlx pA#ku65W_s|[X~ $3KW}nm/667P}/gݛE?]Sx^_|p8Ulz,`@F@nT@DLbC |n,FUPxM:#p\h):c>﯊e.b'8ީzC~bxױe7qoʷ*PS}ZCdB[ERTp\(sn_Wl.&6jb<x-WZR I$C&p_xL\yȗ|&f#w (iԓdQye ϧhL:eZ zOg.-q)Vه|&>m"k/yNIcz^c9u‰=k ;|qoWѭٟ7V޵V!^wl5buY3qsgߍ}{`ټػ?-O`eL[xKOFtGx_IrV<$D&X?{çq!SFD 7; < *5' LiJOhpҐnҕNMW2&~1k(G>\y z\j<ɾ3vFf~V쾕kpġc^8K!#OTxJ^.ސdT@n`\?-xrN -3^ER<ႸLP2AykWB7&ғ,J&zdo> @x2O`l}f?DV: ﴇe_}џaJ3_',bsz"=ݲ`k^_+ZZgm3 P6x";] b']iσOR=;_IoH{F"|`f$XX0Fw7 $_T(n3`Ue2_/eS~D(KU%#C ):>ߥb~F/xd)82x-u<;\|)E?Myf~B G9  Sr|k|)=igWZOm~|݂U3`.W ~F=Jg7}sF.^[A]2G'\x^qd(I?򊼿'݄o|CM0Pŵ   o4 y_uoFr+k/mdbx\[KQTby]u =d,]|uYmr)#U# u9b7WD%nM^M^G2/\[TO<#-#GV5I<c'jP4$N z5y2,>/j<~ζ˯/:)2(;}L@|ZR+#0"^ =y)MŽO<IK,ɨo@np??2e .~cGeҏ:3G|M,#`?8%/#OeX;_l"ń Fݚ}I:#"') 5F@k@OΧD< F$W@\4Fzl#bud23jYJgHu=9+-\@$^G==x̲'Zo8e`A ,@mZ|p%|]'\e]8iԠH0#dS6"c!]yk6QM ?>Ep=ej<&|{ ox4j_ Hz@>1i(,?v=&7#h2O< 3@FgDu0s@pA \o z?{@$8v>!_._^-ەvl oߧjmy>=Ԃ2WnۄvB>w7 Q P6 2Te2g z8Ipl%_Zyιa+]w׊9e+#pMv'vQE}<)X=ϟnas?l>^/DY4/&|tDY\O{Zr@+6GŒ@n|tOPh#aI8v=uSMm m7z&_dR*h*)#`V~%UfF$`KOzҟ ;%IOe3&o%|t]QI@3n=` (S {"`{̀a`g=~兏vIOhp!\>"Dh%|n􏬖S%M"t QnPT 4l"d X5: wm ?Dz>ML'GrjE3͘A}ƒ[?v̷ pӂl%{D>{˟ †]乳ovvڮ@w+Oz'oeTA>VD{x e3eer6lV 2hy|%;~,{ `aoxm  FHF # $k@y#Tf 6.O6(]+@32z}/Lbq6ʨY/OyFs"e͖vڸVUg{roο}e?tf2-4£\z\@_kr}Vy-Kh% O*K 3_.p=4l?fy0 O|`a 4Y yN^F@`"?A{~,hGp/Uߩzxb91H7cl},۱|$+@3["#oȽ#_I2^W<&@n|ap4/m&=`m}-Ʊ&#;l,.4x̂Z5ޙN@8';>)–v>]K8iyNۈwiG+}M2_'\=]lG?j8<DG9Op꤄Kz‘g|u8@Vp~`\ұz\.آ p{L|ew1/{s{[[v,$@0dӬǵH{N ,BҁZ ][!'QwH<-XzNtlſVtu:[ߋTp|W>[xKOpxh&6Sʮ#kգ@n\aӀkO{}ޗ+xoQ|e__lῶM=&>F)#0|D`hL?:0ϩ7%^^G8DwC. % y!k}v!j+^= EGA]1XG7σ(}QV=ہRlt+cO2eer+jl ͳ/s^ `&9nֻſr)L"GC:D#N>NʒYV?yX;O.^ C൶C2|qWhy)#"&7:Z]u<⺷,Hɼ.8e(Nt^7ʒ(ImS5߅ο}9vf߶'Ƣ}:^ 8j`"rݐK*/ʴO_S m"O>^KwlokǢ&Ls֎eۻђ`=K./\>x‰Pg!˄ϝO*-]/`lW<q1Kv=_M(uw  ͕%?$oipI_~%Ou!c:&@n|ᲁipҠpOSc"^`!k|՟^bg,gw!],?Y^oZDg=кݶk1nMv Pv; Rv:!{l|L:1.VY rﷅuk>j:CS|K6VƩrs-зqQܧOBYƺ0x}o6lOPtfÜnqA&hIG]UBN!\2<\(ze|8Ě!?u~Ѝe%8:+7t.S<c3u Y_ֲdw_!z‘{Z>~~;F=x|yſ}bi_rk_-^-;fmύn5f iAڧS( M6%$lcs\ur8 4i?ϡ~F~^^!\zMFkx=+[4=^khSӁiZjfy9F4/9 .*3ovq;v~^7أۧ'{||Yϟۛv;iLK˄u(Cg_U`-ÞS /pT[ȓ,aF#a'5oCtYF\o7EAq9-%.$ |#xlU.#Y{k4gf|ds{-`}zg olnUxh;tj2OJGp׈@n\q Tl |HkB>dަ|O3#\&JWq uR [etsvQJſ m{g|&=`O}|,<%pj־+k㨾A:m7GxQ?ʽ.8fL댮v8m-f}=UMKI@ EōhKݖؠe3fm|6.2\|zwĸ'OOmKb&p)§n˱jO\2ڒݾr|k>1n8w_c.yMo# | X?_fҞ%W[_,WzdA },wwcgM c&]uȀhSl=G~KڣB_(-!mc80yɼnl$Y;plܶ$SpG:ddWe E ~ad @5/=̏1Cu3nf3\U^j</C;_ן[Yi;}㿰-mom ˻6Mk[ۿ<ٷYx1lF+Fg:??U#+XJ&F| rEd р'*2-ɤ8Ǝ]>FOd@jD,vDsߣ Ib&r9vc9A'бɦ_֏鰝xgԹZ>kc/|km[~3T=~s{~0QcUOI&?d|_Qltҋ6?Kg9S];hrAFt \YVPd>2PhM#-Sdl:z ?D[kh}xԭcP;"žHb)gSz)o헁R,հkXG^{ <_~1踆]7薁ϒ{ :W7fC2sjluv=?ԧ:EG;|o % >K;S)#g4HE*c~hT _& %٘~>'@ k/MNNgS =p1*N9׮iΝsS7H1\<߂)uoװ:w^Zfz_%4HĨCV%vY.|E}Ayd;ޠedm|S&b714Y.8\arn?DXt2`I.&Yq<M’ ϝXt\~S>Nj eb2]cUsV񍀰 `/J?T^~exo>ece'^/c#F;\N.ˤFE5S^uR[B&UڜZ.plVJhkG8L5OM-o2 VV=}g_G]M˺}z%{-Ki}Es3S9b-3zW_gƟ=f~X[ {Wj5esd킿k\[Xvd/,?p'5vb ͅQcROem\,Wdhh+G9i>`&;%]I&16Szy/<>rKi:Znx,O<m!$rf\7finq`kvcU{Qog>WZ>E^o%cG";8,:5t1f楋@uO@Xg;yu-'m㜋h8.6ſ¯vje]\eZ=疟9K\CD>tP_gvlz<]7atȆ@iO[Y<Xh-_ v [)t9J"e!YeKtEι@[J)>uebhKi@a0-LPhو9 9ͦe`76wYrލEHZ:e]8-Q.F[=6X(],U_H;]p[‡Ѫk8]EZ+_&ƀ2ecHe11}iwOyNWr䱔88wW̆[ʀ:`- / <؇ĶLG_Xv=-6c01t1?U)hWc,ߧ8SkcօXo‚>4{˞I +ɸ % kMby\Ǐ_ݭ?|B>?o ohj%[gq gŐ^8˧x (CSȗj#CQ[.p4 ,q7bWchof2@'&Lɀyam{xJſsR?N8熩:O{LxQ.z.6bk yXohk[c]l8m v86A?Hv6h`K^/m\o_~z|_b\<>>oOOO_6?rpKC)$c<}lx0> ];Mlhh <3\&cCX[3Ԅvݻ%rMnw؄wgsc3?Ggz?VlEW,9q%#f{nX)ڟېSuH\דmx x @M_ܛ?{^rI \4SXVnq{tW/u}{>l~zx^)?Stm.9 x+ɲ} v}(Akz3 MY=Dy^qkGO62p XǴo/ G_l}c? ߿B_z^ƯlC^l ݢ#FAdQE?vT#sƷ | yZN֨slg١0֖Cc6gxnX)۟ے\ט~LG& <ˬl_x0f|1x㛂Y\?f7 \"ַYw/4!`? +{.`mxyxx\/E s85b/ʧ'Z_\M2I3eem|2Ҝ_"u5kрo?y-uE ̿73mみc Ⱥj2S-`otgƂ'Vכ͍-fl/dC`a6&z ]6L5L h"ݶ&Hd <ڸC#:K&,xp{zU>c&ik36>Yy& |o54hj2p pGT'$96j΅M ;<["(sT{|c퉺H[V{x&%^) X`ῴh_׿X۩)m39uvQOeҿ ~[[|WtP gq0[avȧ謗?jKA ^2A07njieem|S2AcI;ʾыF` ll("<<( %YiPt>y~WtĘ&T;dg~Ǹ3S}l"z:}lu)c?f{lȏmÔ~N[b[?S6Smɮ$>1=#!c0`ӉfB__>arT pu 1bܾv;c#^`/ |\<<T'S v [Yem iv8bF S;%~n   g2ͼ~u|xz&> ' Tͤ {q9tHuHYs31PͼsplCtEAẀ[[%?bFQ:!:J5AS̰\x |TpsW+0YqoӠ+ةΆ[N2=Ĕ\f6c%8'jg!GɡݗyBG8 ې;<8Ś$+meaLv7^< 1Y1VGOǠ~ө"G9eyOU Z|Z,o|GL6c|E:!#-]kF#MhXc[  P7>^lgYdKԀ6Cfao4e`#%«PS양-O2xQ@IiT9;mkm(k { @Ckt Xx'`Ϣ_ dž 2h=3W LZD NBvѬ$2_/ Z>cvƠ/bDZtF._^t|A 7FcׂYs?o}x6 *P7L \&Ox״JЀh0d^ѕ Ɵ]!N^ z6`#'L@D$*{G ĻZG L’ ]I~:آUg%oe+dnd)S>²z猆m6l1D ~64 M. `_GWׅK[1NF6H_e9|BxwQAWP t59R\dYW5),Vd~/{{;]]Vy'5v>Z=NoS7:j ZNBƍr;YyL? @2(>l eⳌSc=nHE||%s"i@@ڣ</mB56> τۈ'6@쀵CTt}ߟ|΢090fus6#5Ҳڐc`3S-TS[V2q<7~>Z_oJ-Č}[uHf|/d>242p Ɲ7P \<;2-Il({##_u$LXcf6d<6ygm(ҕb*αn cX9uOQҗdcukc<ړSFe+l2d*ll;uXZ|_MwrtW7UfCy#q6bJ]re? ]X_/o/OO?W/?>n7fkxycOk.6%1cY&񀒬ӼT7*U[-mRXŅMҀ"ʺo,e` pT'C0qS`hDe)>}$ch?26 ;XzN;8,vuʠȶ^.1|0m2p < TGø>jД-{fɤ֞v Kdc '''瘜bd] _?i3E4ԜvtX#sꞪcJ?ClrѪ'%Cu /55&hacz   26= -wݞvC[LxѮ Zr,|`]>nVͯ_߿\]4ϟ?ݙ.nC&Z8sl/в(C^ Vld7hx wKqW6 cs$WMbL_@U3"8Ѯ4,F@^33߇>6;ؒcX9uO1KY#kmE-Z1H\wL>_9Wr/"=D;,F0%.&@ɇfs ]ԕSS~NXϩP} zrcJ2tUbE[ъm{ t%ҞKyJ ~?W}bVgA@)`n^ؿU͏o,=~ uMn~d6%;l H&u^0~ObW2[.ptҠ"XOrM2pt?b&,7t>q5Svo"}q*lW.ts>u}E[w ?:6beYk.Ҳ/ɸ<^1zA$rc7E{/2}[,_V&跟 W ݨ{JKBߠe gibXg)O6//OG{"Dj ꮱd |.>>Ԏ(+Ѫ HcLq>ׇ}gm\r쨏t+>k6cl#>_K^S#^hK#/ZOA-}ijvx}g'loĞUwNzYٚyk`mveO ( [:곝t[xdةq?5GРe26+WR kPzS+m>_>YiA~aA61-K{pa/4;t:uHu@xɅd(),Gى?.,M"]#X5ccLST;ĨOq 8S6YCgiŋ2ѱ_FxȼW\(>SDc:5=r|l`*xÛ;$̈́_'v6_Oh: 0^3LXݔ$E:-:@vВAQIHmt%:ʿᖁ!NI  t"t67x\m c`{<c =Rxc?-2P.cR*3i>ڝW[U0r\d?vkv-d ^_%)=>S6SRHmsG׬0uuj2U=Q}汫bE mU)vc-^aw?0=`_f#.V\ľ3ze]8|hx%Z~:(ml#(v 2\+j2p AZEkb g?mBpkʵ?ط?lbcs}þ3~- N(hЁ{Jto0A>'IWyh(KT.uShL)KvS=¥8Fu} cu%_ɰա%}+dcD[%S[{9=G&^c_"g&x+ h/A6VF]R]K4@eG?Gu\Nj==Ⅳl ~l;6HC em\(%U+Óm1ɟ<Ƞ=#Ȉu Ё\%ݠӄ@X6"} >&; \~҉ùcM2071;e3Wn/eDMC6Vuv7K9hi_;־I/PX|:oâlѬMǝ7,^:)oh#@[tytC’ }tG_h ƈ+Cve/^8E%]31+>kY{ S0a17=d;~[dG{˃=#طх Zg;a=<-O,) XyK:Y牫 g9|E:a2Oha^w>r\ZvtϦ`fJg)>K+vfo]CufY'l$Lv/ѹ~}? s_|XC܋h0h[fu ?2_CTӂl 5.ә N2$G : vؤ/Ψ} +m\} "* .Xr >[Gn?<>|h?ۀd pmal d@ ha`Q8*K?'MJ: ݃xpg Nٌtc*bHG[ɅN+lQj!3G]cOf }SCmÂ_ 0r_웝}=90xq=y53!ю8ce/DYFNxx@{/D]uG>-Zv 5mh8A4 \{V^W۫W؆bqk7elOņ'3]o|6Id'1-yʣMO> r%Z~|h>/1;e3g}O|$8k5c$>TX;SK>bŷzݏvG=we  =1kpp2c:Le"Fɶ,(9NeT_u31 8Nt7eh'O@δx5R6 ^wm>O~ai#3ư~Zhlwx09e(RpePs OdCۄ؋t˷ H.\kxN5_ScԱollslf_})%Yiٖdҁcg#/ےL$Δx5CbFtUL@a"mk%f'_{O!^ ڂM~+J2+!a|^ $,}hŧTJ~)隬eh'M 36YImw٦-ηۑ9Q LR{0y퇍jG&;x좍hM^,EǢ`Q7yP_ecJl9Kudȋ ׎;_[Z^bq}Q&1QIc6%>2_;tc66I`)/ 1'q/]@uJf͡xs.?UJd-36fCjxHy_q[ep@IDATQe;! xsg g 訫DK%=2@_X:قRNgEh_9gc7e3|>icm$S/OCm(ٕ/+i21c3𸟵 ed9,Mƿ Fh#@wr! : a1 )YٕV48,?iO}^uDn8iIA>bc`A(4e Щv:GMEGLm葉&Q\.%+a ^0.h ;I9*ƋPߩeaJߔ͘+j퓼#pld+f>^clWv٦$#62k#3I^ X/7 ?_@O&Y`C]Yf;]0.LcݑІ}@LJt,=5Սaׄ=iG3fm1Z|鰋n88t80:H Qtwޝ}Mmăs=Qz&FdžTOs)P)1}IWEےd \q&둗dGgE7NXȓ,bx惽}Aao.t2io}3`-kp .UN0zS29^هα#(u EZq2 A36ΞU E F +ɣheain8Uѝe/&U%GYM.p,ZGWx襓pV:ᚯ  ԎvJߔ͘+C&^Fk\SurN>F]I.v58W%fFC,v2P61`,}o4 צ`e2 GdhE3P_Ǔ=t@d$J%}MVö$GunHect<>=(Sck@MϧVZENv0 Z@ɡCmhrvdhKbƢ (V>NٮSƪ4?pk)=S6c$SO<Ct5(tm,ɣ%iG>D}"_Uտ3^c`ѣ01gSgfg̀ z’ G,CW/y zlO G,z*vӷ pT>5,g@xpGy[NM (Zt|A3."jt/˨'!u޻1֮q_9c7e3uK2E]òm뺓M%hXm:uKy'tG5;,[~6m#O[aQuon1KInrusiT{D#k_P̈ -g@8{/^A*ǮdAh"kոog7!`Wn V'0!{ Q}7lzJعsjK-6)1_.Q:8>))=훲W_/ɔ.EOad/^z]dHg]351t'ɦo;n$'X =ϣAl oS:[7 sa׫z\-onV?\m~\ٲn7,7c謗0ᎥAuFEUb5}I36N,:Хf-Ge :ua\z܊$~W?EE{S1s+JvT\;7[ǔ㛲ӗtsem6*VĺѱQ\%}vk6?gY%,{tg m'^'`mAuG >L|XlVOOϷ;ͿCy}xx?_==i@֭c+ђe\?Dz:Q^bI& }ܮo2p C}H ׷ٷ fU~C$">bׯg?yzRԪ;h#_8pll6'v.vpau6OpL8--3]-]QA$c}5HtCS6e,cyň6 x.Q>=cs|S6c$de5:[6@ץdy@p]cy)YvʕlJ}dċx+^?8g柧6OÛ??;l4) 9>>Hpy=z^/n-ksS *%zLu ־rj;>2詢̀4|l|gX㠒['Q[.::`4I#;hĒ,22قEc+^XETt?eCCbL\6cs|S6c$S-=F:f9g8cM#/rK.Loߌ-/- 9`beVdV dž?DXyZنb9&m ˧jlܾd -n|L:196^E)Ⱦ#*ةsA YiFc X+ P uDzhD~Px;! ߛ (՚¥阨Rc|Թ㫵c9ͱu 1?l%]I6#Ҳe'Ѹ؏L+` W>&Y'lnJmQ](/'f5XnGSx°Nz=,طsoo|r p'x9XMyc?x h8]`>9S6U74]#]z{^SEl׋,^{ٌ[ !ߊ`0Den8k#;m3ɦamDyulN!T=jk-7ҟ_R;plSSzofL_ҕdc죬F΍l#רh@K_?c8LǨѕ|L]s>2<ž~+on.mll`O"M%thd8.&Ɨl_<X5{kP5J݌*ua&]?0%S~6)t˶̀wk@SsB'1($ݧ% ' > j{(ol-336f&1(&Auԝ=ɜaLGl6A(#^,,?lK+WƥҦKӏb~jvsF|'Y 8h^6xڔ巏O-{i㘝lQcdDLEsu图}oc}|e^D> ӏ{j LQ%˘8Jv(FE94Pr7muf@w.W36NP,I.́hT4yI28ltP_3q&=cs˰_^i"GJs.yjϹuӗt%Y-?5(4qװ^CIm;ɕbt.ylsl%]IFjRV-} LplqKrlTgI?GZbFۏJXjmmg.:v}|ng!Ϸ^qmoɞ %1h .~;~;%7`N{ڐYmQ<1N'ab>i?:m @S:h{gm읲Oa-G&08F \0$1׸95cBg?qe&׾/@Ɲ첦&vߍW'?y\ۆ9S6S}I&$>#uGyD,ZmO]W}%c~{B&[=(z>9Vവɟ`ouxnhB1TǹϱAq  i&Ƙ=h;FX˲(T?4 G۸;7mMJ`F$}b n@$Q6Iv =tBu1IwR&N:&Z%/᥋_9z)&QtװyM m?ed_/g(+ђ ׌lKh/颬})1u>F{Lrpq\rL;`G9vZ-Sl~7bԨKhɄih(;Xm,?S? yc 쟁>>^ds`n{wvoX2;}+M@)+ӝo6ɝMF0B ixيXonJ_WF..%y:N*ƾ}I>ReYE ' .hſzd+b#uF>5cD/DOQ-hSVWzz"-1bF#G/ ' lm17ȡŚf{ 6` -K+z}?nד{7v\6WV6OeP]F90I>&+^Ե/*9EٰuD)t 36iR<d~`^lZn/w 5_6B`A4h8 a#PEC`=jb{aw_ܥ@X6`M~̷o_Y웱11]<1."ieFs=fk[ׄ80:7֭XĐeO"߱g Xjt t~e>bF?>m&}Wr.`Vak}绋,wluZŏ^li'[?n^~zztONYoND1NY >eStUWAW:z,6dm|~q `p|X$9mn @/}ژΎ=&Mpxb&:1L&0<ܰC͈zV/#b~w2l1;fWkvYd ^~/_kceuKrͳk_Baƺ# Hyѝg}?M61oEПoGlKtNS6 ~9Kri{+V`\.,nn}%j?XMͯ_Y<6lVS.ZF:u6  #'2P@(K K2 %sdx)7tpnÍױo2pl茱'E^|"F~9׽i) TG!ЁDL܁n{1ے$Jd;.rr)&{Z5ڢk}w:d1v ;{;f ZKvaKs<Ɨt 1m)87!^wx;WffoP>`DŽ'n= wvN}hlSvk_L۞\UOwYDe?A6/7DERmR~^%H&;A.Z 36i8 ݜA6_^w7L`um^ـ-M6|sSQ21=DAuDeI>B&%Xcn}rm_IW$/J.'&b}6tsB#oW=飪'Q /Ӯ,|YcE]Mm>)sk_0/ح86tn#8ǂ, ȋm SkYO/:K};}BXW-OU yYWmooom#`m6|y,noJ9 Zu!^X2p^z2OAٷdmE:alݝ A@=ma`AkNJxYO[.4 n;WVArS5ds2pDo:s/ u B \ܾ$2~wd(ɲMsz?eY#cί4;`nYZ6uk[xDv r;?&6Y^oL'O=3vl`_C[O8v|4@ٍP2l$2'e,0:T08o+|q ǂ}J^^xҲxcy\ZYollzΕ@`|w&S)Pft8G[bG1Y/_b5n26T|9#ЙנyRǰ v>ZNرEґ\l#Sa/gE&IqͺSyrc!%6^w*S9m7Fɾ$ScMG-g,Z ]KUV]0ɴH}>F}-c_?`tq$d;;^rEf'jX<9)'/[?x6iS{bS^u&FŃtQ3!]zx +X6Q薁j@55O ࡃ('1=Yyoۗem ȕ&؃V‚Pw|dK72P̀:': q7v:.E Sۀlrާγ.[ڲҤSz`Wk/5~::y1c3y|K2,l_^OXr-RE]^ת:{1߁FY Ȩ1to6|hEr4q%#e1hSsl1Yb^>BK>G/{lk49bE|Kh[^- A MQk8Qv u- vM[)/lDž:qDBђgd@8;?BFh{d`*n / :<΃~/O,>`avm?/K{cAֶ@Ym km2r ZN:L(EESKXƥ]~.NpYȶvt%y iY0Mcv%]Ev5k4v칎sNr~t5_q " 󒁣O2hbeP %}@|\uF눅,"NWlbѱ6e7i7v]m>~-p1Pw}pm%Vm^tTHlģ~Ȣ-@#vȣtQ}ѩȿ8]{Ȉ)X:`36~ÑBg^m Mc,y '[lԹ ] 2E2@VgfR/{=g\^1bWgYc=Y,][Ǹ1sr;.5Gm"ibn"`oz<6{9ׯN[ȭndqS0rY]z:Hh>//](?dc.yGZ~5aX۱AZM=ihĒX'x #?a|Ǜ t[E&4EOI1B|,_?W_O fAϐVSLևc];6^h/xu#_eG6l<===ڂ+&.mRmaY$1_ ZN::k^ϊ/m5|ӯ{";]Ss%L.t|lm'>jϘϘN5(ә+Nj6 0%F@ @}At,bz8&vW9DڍY莲 z)=qK>ϴk?G\80(z'QE;H4[y|/jÎuHywPӵ55$4KWLvQfYkt:KXZG}WzQ:Vh_tss0(h;|ssso_[7v3{~>}= hxf$U~kRᖁfNN$`gEaϣcK&cZZ9ͱ=ԦvOɩgNmǶD;>~slk6%yIFFOq:b47 `_۵6,{z4Mș0 3||yi'}l2r`Q@$X_7ɠ3,x&zG-}N'f/!vaydc7<`sڱK!@lbߌu;C]> _ibx*# x@ѦF}ϒ6V61h 9=>?\'b $9:\k δ]wZ| }]ei@l<?"tb[D-l>q]cOY2'( ?'|cQOAGgalblŋ23i36Y]`Pp^0[+37^ p{ ۏ_i@}dɕaL/uq'ⅽ"]*Tht e Fu%clV^=))ꝲ|Xg' aAĂ]Jw7Q߳? ̒YbkLO.;E}OQFۚ}9#Te# Y>{ØuK['$#s΂ݝ?/2ݺ}xE]:=\Ih\DGyE]Lj @;Xg'>˦-.RhsR:jyp Ǎm`he_7'4-0z*mSf &Y- Ǣ0iTQ}+))&9FX_NSy9$T)=uNٌtcIJȢ(&o ]o.Y °XπoN `4V0#B&NtD+N)2%}Ɗ}͙x7J;S]JN\ 6yGcp7cgYSws@\aSLCH/#P*~U-qU0q;"mSi@'w4k #a6 `lwkm7[i7luo GAǒtPirfaOah Hq/ZX5^1cd[M8\^vh[xډO c!\L8>njhaFc*0gc2,MVyTz !M72vVx\۞^@|1cHĆ;}?umdZcY aI/ߒ>ꤗX >_CҰP߾$[aL6Άy7gXVerZ~X/km?|xx572/;4FaZa% ȣlVe5 ]wp[N,X;Nr1]m|E30ܽy4ӋM'sp3Iw.c;7fsߞM8؎NǼ瘑/Qa/Q-3ח}SH}&xC;ymy[MZP@:`rb6.W~EȼdC Ćw"I6s)W-b"l(Q=~&lr8鑗ZC+.1EŻ|? _ ړnٗ0>c+@w|{z]xϿ6Oݢjk?Kʕ=s:tJ2&C1QEZVcq ҉{FvQ2GhM/N /~GO NF<8꣼-@?hх5:>&%yh3/՞C뜊q.}yQ=?ofǷ|/?/a">6ali0=`)6ۂo`BUwQ/r{/ی/4`1j|}tc8߯`1#v/|fEg4x}]$gbwgyGػk_P7C׋ FDڙB|FziYmoo\fm륽q=yj'H/FKV*kQ^2)P}5R}Gtq3fl%+ |v g6@.xk^6'Mr `_[Ԉ76)Br&I*A>h姢&Yy1&N{I^46cu*ƹ9/]"ĎËwv1ao2ngxyRpʵx!hr~/ v*Qfte>&driE;e {=EGxUp97XzψU =nO38-1 e-؎1Z>ht9?ptL7Ԗ>? \G.\?xϷ {2 W~ peo~^Fۗ{O4dӠJO>$eD=Q(}d+L@'k'ls۰oh:b/eYEGiWf\Ƿ@ o0r- _{hm676̬l^5~ .l -0AKz׾c{&k9h}D[rd O<m"=f߷X }pZbRb&jznȦƫ^?X7ϓ|Nb [JP>֯ 1ٵ'"֖?|K|C~pk? Y4qۗ7 Kx Hd~j >Qiفs,ds E{$^Pb^ \p>5sgm|7\@3.ʣ:g{&?U,1TۤHecuGY#7ދݟkNE,:ڎs>ΥgZ,KYV%Gϕcs=8~~æ@+Y:oR}[Yd0ox}/7 `ocC/x$Ic eAuf}폠ɡ/zLl_JI6|y}^Y< &γԅk?"`G [/,GKFmsgiq{YWA";yݝ,ȆN0I*\#|vX0jxp_re>yu%?a[_ u27mv.l 0٨ҁAG ~N>[.&0)Єh Ȧx g{ύܗeSô1"e{ Ḻ:sh9j9^9,h0 =-EjG]zɺsڟW|Xraq,j;gշm=;o(;0/}\^WLlC\?f[>t\pKǎ~f\1n^;k )dž^auv?+f@r}‹Xړvɾ<W/'׷7 qm,WE M<mjt#>d%;nLmᱧ~-FrZ,Eݎac>M9U'i(o(F*oA)+Mv 0!'EÓ6o=|o2~XMFzG{{oIoF3P{꜓sb/s[z ` mC{cNblq|v_ sሌ>m=\3Dz0cL9 6c3~=kz{DCn` &_fWx$1gwۍHV2{3_2Vms?s\w'R A{K0hהWo(v|gq32.oiկ_?] plJpz8:YMɼ%hx|,$[_‡? G}q[d7u9L^|8"`FMNφ6Ww Myrb.-&ğ5(  Ћq>ᨄQO<<tQJF/]ðo;cCک=ڽ]j6@ zAjz:<e>^qu[{]ߗk&FSCKx=:=[WU?JDq/U })Z }V?c@IDATcicvMmъ o V\}1t _̏͟in1@O H'~Ŗ𠣶y=ͯ Or?5e<O#o~ '֋GioɟcD#lcg;Q}dnT(vǜ܍ q>:6֔!vECW~'QYv(쵹cMEI? b?\^ޜ6˭7qF`uy^qSʯ4} ݳ8؍Ǡ-8 623>{%*mV%%1vWᖼoV[?-%Lg;!A]hC~7? |ͽ1P[ɱbx'LD>:$ߝ=X$1ANu 1%ӺMw^òq?I+Mz;Jr Wmnhxمۃgl>7b[qؿ]WIyҲļ}[ׂ!dV+۴>( xG/|`?lkEmd}8Tml/ɗ'Lg|7Pt$нw+SQrLRxXD$HQNl#kW>09_?d1 ҋ8<D/1 NdܟAmh.pi^қ^{^ѧ]*9ռF'^Žؙ^Ár&W 7mCq*OO=v`Gɾ'kut-٧ WW=#XL 9HVD`ϵxΞ䛕v+,-p5"~P< qnzm`?>kQg<ߒ[%`~z}WX>ж_9ϘMƷd;fGeHr?';C<}S?YSr? {WB,H CHd |Ҿ׶YVu 5EܻЪh:7d_97=F3Om_uTue[Xo_?϶;d;`~5Vuqù3mVx\WXDhtFFTqxֳ<Fd{[M:u˧5F+~#Z6WtLN.k=`7\CѓލyKͿ0d#kZڴټY'χP)f^š)%16j)_Uvl#P:CǚNOoU%<;Ht GNRt`mç}-VS$Tt^r]\1$i纚V,_ ~t}8pp߈$Gw}]4:krh?ߢC=NZo='v3nB5piuNWkqg}-c^Kl[5*}1dF| %ӽk~j`ҍrLt5/Ii-n^o#&$eڸ?8`f(χMN.β}\7ߐg>c'6i{-*?dg<4D>}T"J2B׌kt(NR b}i}{WAN@@I/~ _NQe(Tq.]2OxN#ه>!A~=&B|Ž*џ{|I6+%Uye:(3Oq+1t-><5nk_-hiw!] 4bؐ[Wu2NQz&k%k&V k n˴:l}=8q887oC]Zy lDĴw'$$T6?{eo- ѻw!c4:n>\}}H{[>#6rf\dċDp3'>}|k(4WMwWElSe|RʒHD{7s]'`ͧ}v\t(8:+,Dh)-zpyٖ_CkFUNww,Ϝ'\pz^r(+dT|tCSM^!JmgIo_+m;bej>:>2Ut}'x"0^./rͻԯlu68(1FG?vHD`Z[m>Wۓ{}BKbӵ߭vw߲+9V=Y'HF& OI#o4A'`Lۿ?c>ck69k*,WoH)mz9P`w=i6H[x^,˼;y9mwjχ \%ݟ}?g<,_û=yFO¯'/חmnYl-m'|[k!E%Ը4 2Ky->3TJ[}odLfžt#h6-` EP/PgoF/NYdK5g#tmN$m<'^}h/[f՞MRYcs%gT0>mlٯɫg^]졣3#%՜.]'3O^ 1еp, %6ŞWZ \ƫ Z5"M s!49C %?lj_Oc=q=İVJk+px-!u !w:`>R>cm_^kv>ϡ n>U#fR2l+B;3 XZ?<7u v!yvd<{_;7z㛻1=ƒ,F &R{ 09ѯ8^uKOTe&z߼-Cdܼ ۞}z=ˎ>ߧ_[>WJOl/ocr]bt_?|W>ܺiSo@B 5˼twȱNI9gICG7`/ 0]\tK6N9 ``֑^o ۷>!븖[z٦8e~NG]Wy9ŵiOgJڡ'8~,?#!n錻ʫtMAc'=A'<a^x,U7GM۪?x6qg}g"0)G܌oևx(#T E>Oېg~϶=d.7[z[7ۂ6S/T6*ԗDj$-6 [ $< I١Þmio}=+1P\dɳN#I=+=:to6Uܷ- IkRk'};H{GOU h}j5"z43|, = OcZk|d=a=kqO[qM1/m`*i5ɿq0G{uԟOO e ^ơ?nKTY~)<r+{3>+?'"ϕ1eڸ z̍I={Njkof5c6Ϊ&?'yH5';_@WuUzeӽ/"3d\wpdl|ï}kD?%QA+`~3Ə:s&ي ;P<`Wn:Q6uvO"Ns/|tM8aFVaV1ܒ/q,u,_dX'˾ܸ7 >בd__q 춳 :l ~lXcۄɣC@Etz(qL>f|syѠ[\k73?TA<~X:$7'3=Q1lʖJO-ٛM3jFW͌k+䟤_cn\0{9~k3mw׾z[zāN&~KFIxf}3yQ? T|w?p'߉Pb~{eKm]}xz}@oK^~w/C'ˍu]bP3͏mܮa)ц挖"3G8x@7Upz3W *A[G8gSɥzl\Oy+t[!cZ؋fܟ:=[[fu$kơ[Oχ+'\m n/'qD!~5c7N8#Y$w!q ?b|թO1СƜ0Nx;?:Ӡ}/b:!n̳>r{ɇu^oA %YՅk-^]SiM?݃N! mpWxߦw :TMpӆ43 K:=;K?UC*+'$_{ͪG'ۗWۡغWk,MVOfC7\=q#:\،Q~[^eДl;q ѾUҌ;d'FǬ}}tWLwHSɝs7rvy }4 qȔq'֭MN;oCȸeܯ_k^h';?z-@ܞyn?˴u {6nKxxkwGgCv[Vk zE *e;?p_տq@oppR6%LW F)Z;g(bm 5<1YGyo0u18lV_f D4sm(70L^UDv,tF՘f7g)[[rz:T^MoA=WOƃ7%m%%g|)[kd1}og706ޒxA;?F3z̒Oy p]!~j$}HTC \*-|YrtMU}{*Oͫtecy Ɲ5k`K􁗅z8jW3;ӢÇ>~t~:Ls\75Ս'q1yH;GOVg熍r{T {|j  |̉MkgGs?>WT]m"fYg!ޜKV4>x@;. yk8\cܟCn.{OP2MWp7æ]]~$|G7/ܿoR#@I)h. ]@)Lܧ&4lm%ľwI)qh1ڲܲ5:zRY[rq[!G4_}^Uݹ'?^|ryݼ>9_gjZ_nNWQ_h:[JWnHPv*ALUɹ|ЮBCA6ŜG{EqLR_U  {>FQs,>(c %3KL( SNuwNi7o t&goBtwޱ^|OϦBL?CHv 7'o;x/1?4W9>A=6z?ӇJ )JϺvM/<]󷯞}dW6cV+V T6[tGyp@_??J sGm[qunm9V^E{/أ- b=5yOTT~!>϶ξl],3ރ svq4|'̵84Xs.\%}h^tkg|Оn>~!_^*?7=}S8a> D?d?~*KeҟT98U.;sPgTw9 4oEHdoƓCg~d|E-#ͲC1 Gt4骇UNCQ-_ё1Ӑ[gy < mcªgӫOk6Kt™QЉ67ɡ#YHC&=ep !'ֿf:_S]3cf H+AAm߄3Mᘠ6恻ɳol<5!3vkt_+8߹N59`k|mz%>~7uJKAtI2weO3;9=x}zzyr~~sIq?N]\Con>+} v(JGHы^hhC (헿_xW~!-껢q l%@ʯ4!Uu*e<뙗ikgۄxG`f SЍNl\BN%NLm 76͜GaMUhƓN~!zGuWt08N],ȼefK>&w%i!8s/| E$ʎyJ>5"O K,>)c;HM/SqxHúϧAxr S LӞ7o 6`CYә4͇Q~ppP|N_ o61Ѣ?7&~lbf_H8ɡ#dqh^(:xNT6]_k@xә!э?}hSE+z"% 2ãʲk}Jo5Z/yO[Kt_c9fKu pox'x;'t̻{H+Mטb:Ҽ귾{ \cٰCѣ 'ع򃀟B4 h?;: ?؇1O@/O!wIۢy*3 +me]-Х϶c|m.v1ȑ߄ōÍXic/ 0 *K[4;Kp:#y2oỎ>@Y)t.βc'2 5ndO1zXV=>NnϞ-5yOy+t_?zإEU;D`M]if;h"urc}{/DDRH vpO<&R0%lqt) n=pJշn՛o}-{>m{L{_ےCWJg;Gdvu獠혓179h_imޟ둁kS%6y^4AT=A55zhbͰG+Տ8WKNO\ Մ+c4K/ :8g48q_ >O?E-D;]\ݧ`4n?2UW}پʗUoЊ8е̅7L< OP)jsx$ qZГ߁Nەa$zށ47ܧYtZfnp?ĥgs=}u6,~4pC '9`5 6x/7nsD״[4b8;h'9 .{=lv5:xp >Pݑv$Lmg[$hܟ8kK-۷yէ}d3ܲ4z.~Ev-1/ikV_+巣x”T5qoNӺ ;T[Tm ?R$Ɍqx*7aõg1^ZpF s+{RC?ĉܵ3nc_cHCX^lZS%N;ܑ MF@ fip,É}]scG3>Vɢ7etͦkt7* 4C(<:iN꼦+UnHyV| 7۵8δ|]*I?_lؐ!o5 >kuM"99Žy{>%UPa__;IVׂ0. UUo>v[~:C|T]|Vn%YW݊gP2MsLɾ~=~9^i;҇Nkwt@OWe\-!|pW3^y(]2n^'</qxO_G~/?GvI_ /_JBɥ~RAdu=[e }fysew|caD7ѝi÷b!I׃kzkg~aMD-Cɍg8= Ӭgo|Kkoo;8Lm6&~7}ds횯$v3mmG2Nq')q?ǡş9 '/t ߭-Y@넯-6 mtRVuH[=[ɱ,Տ=ܼ {ƼLm|>d94Cd^(=|Zzơs٥Suɸyi <%Z46BP=fBUCEOx?TΓz*]]Sݓgu @A@y4mG_UD-XGFNLLI#pB8[z7!j6)۸&qcS5^T,×t^<ڶMjcvu>vc@e:d3 VK- Px贃tn,?;b7fn?Ou/W'ÆAW1]ঁLfi+2@؁_]'J6, ?@~S*~ S|Wh^,nvr]/Yn0n=usG'<_,pf04 oɲ3Z0c*+vOtL~7e;dkPcܼ$Ӽ}5ZwUpFL˱xvg<~=^dwZ8悭J{|J6'Mtӱ9me};8:^rڵg̑7y璇n;DxK2߳tx`m mIGs^W܆uk*طڮo>䙏~Y_ Oظ";<syS\ RC.8H ߹OGÊCS)KeWcKL@W 87nJyP_P_WWdp¿IT~ \f36iVzl].1h/ͳub8Qӫo3:*W)!^H0oUD~aվ6qopZ;BD^ l?d}8'H06,* xiɶp_`3Now}7M9?#\`9lk+9&|ϓdw<'a-Ql։(w[Ŧd.R/R>zKO}_6*MiV<ѧiH?WUЉ_s:-<ed\}{s_ 3etMWmM$[tDAOH;P4ɿ'j//.L{쫷GViwe[%{LZޘ| ÉC~ qu3ya@z=XY^pc|~G C_l}OuR;>8v ؏߃KMM|lރkh#G+R)._ɉ|Ȥkçq]:p9l羀'ufB%M#D:>H53oD[53T <\|<@/jsCtxN.,8zK>Kdz׳‰{7]a%2} ϐ~ 2NS%G; _CZ#O~(1&wg/nDLgu _u<~2~K?>"+팳Ame{Дķ}؈o8)׊ʣ!Y,YclY!bD${^IlxD!#O.zS,ˢGĩ1 q)4z߿ܟuwn.1a&Hs3Wi<}I蝄<[/;R|7 J𙯂DĬ=V^AmL3ڥc~g <}cRm-3Ҵax3:ȍ#@Ø;-$bn4EuXD[%\h7g;d{kg`mmz@oJenBt(Ok +ޣ xP[ Њb\)No?HFVs(6\r 4Ko,e}#dnAchJ/oJ ֦$,d7PN@I0(2q=-ŏ~Gx*,|%4Z'BG?yX\n1-5cĠ)[qD+%~q=3  pm\/պ[Aد@;{Fw v!Q*t*yǽuynVC*a>lci Cٮ=U)}c}>{myn?z>g݊[nhrϕHo6-˸y@̲PL cp7aŭâȌ3.vJ(vOO??#'+/S&tybJ+{K+5w_hq7k뛊{(о api4:zxAM8M.&5+q#=z{%P^&!20>0WY40ר31#$';qf{56>}pi"d݉s̕9+RKP*sP +ޣJq j='2 , ;3џoD JI?{ɴ\&]5Kru_躯]hMq/i347Mˋ_~;;;߉d)KwgUF?Ӱ9}^F$u[GgKx Γ Eza>Kd T61Abc<f+6?Iiq2רrHyWX+HI#\+<%:O:.8:3Lv3PdM|Z8J#g_@lg(<7햯QcV]؉ᐍ"95R5;|֖ms_iٝ@XC׌q)z/%xq/?d? mj9cʱeY^}e6hօ5#VY'j/2kYҦ.to;!~P0%dׂtE6t]SWξI.W=) \`,,sM?6?C%LS#h9|!`$_toC7dO\]]}oSR7)/}xMÍ;a2Q`DC61hjL_F2Ȳ\xb^lf&pnٛ>1߱3xIѱ\|껓xܼјؠ_; -󱝮od5xǎ;qm?pӜ0?<;0@R# 1Cώ`G`9m<)-5'ɏَoc+gmWa=<5?.{zm֘잓Ϙڮۓ[͒z.yg&薰w yd~)'N}w= p-ER=I &EMV`6NӐLـbd3SiM%њNt|kǿA~ղų03_0m9ZMh\== [?h V{XԕU\"?x#ܧ| ]M^_>>8@B^>zAۏJtK$w_8k=rLZ'˪%mu#_*C]}Qtھ \]*,<|AZydm@hBdTݕ*!.Δ~Y?U|F(x-/=C_gB :t!{[ܦ3Fҷ@IDATf٤16>|0}`> ϟ?YK8Qs}Ag?t]IprzQ m.$(o0ܩl$UYcEFP4?xAf p"W=W:QeG~*/_~?mMG?U^ EI}@+$YAm]7^DB#f,>Œ1Ѥ9WB~ނj<9fآjl>pb21 =i6(񍹹P89s7t- x@C+0ey'c-ge]A'uXn_iTyؠyG<7M V6<+J˖?k듦qݻqp6@Duw.l^y\YS6<} VgC(DG?~;/xvЃ謕,7q`̃]o\ ϵ>[5W|ꏎ}!؊@Ik{SNcMZo`Cj{x+_r+u`+yWu)=IsFܪc2qV^p+?~= >?֟ 1I0^_%z=/

3D!uwwyed dWL-F!cl8kNHUa4mF*eՏ :GRɿWG8K.`!3zKRO&LxvFx.jb:rXM:%eYU?.<6OzCx|CY#zД/Wpʒ$]~ŮZ~\ $|b'@s3<3~Y7ރǧ_};x Ls&fPGc+˸Gt=WqZ\sʞc[3l9"_JcuW O%Y{68 5~g< CaI=r~j ĸPx6d@7W")U .iVJw{^Ǘhc_@lg- e>5}@lS"YlLg@78HN߀[ߔ;ޡW&0'yHu ]@/8:^ѭ~;T/5$8":zzGy Vg AkPx^ kjޑx!xNsφҟHy廬O}i}3nČw) xCǿzcnn'g^#OZwܧv.RXEUN}nN::Zbܼ<{>wLf"S?I|lIl5/o$'ÊT' AhwxئN>H>*T OEGL2"0"0"hwEKjJh@=;6OԱjn|ĺFWd]! |/$_@UEs0p.KO7o{_«}4maOe:ҋmuu]oCߜk}73ov^Sa`@ vO-С?Ht]XC 9>';>7 W^?w!?!??wΦZm͏:ATbW;Zxbhuu2v$CX6BmD[uxN.=Yn%y,H;@{/?;j[^-[=7a?j̸t7/5ʠ]u*^u05t)']LGclxcMo5 e# 8ESQ~CP؍i'kW Os?Xc>N,ژ"D7h@^>;i+fxx]Һ6KWHwuw\F1([tO^/W(W}09:{*%8WFWbAA[7r.Bɷ 7D1Lqƿtӈ]8QFFF^}ںk/O:yꖵZgt@-kp5h1bޱig:㨛udȷRzr'[1&]kb$ ptM Pyԯ2 Q 0qXi7m 0#ڎM&ZOj8x5Y:Fo~1Dm) xN_6osrLJOߑe: +n}ǡOu\!痬㌯bE1l^rʼn]ث]CF/###?>:o<OʌvجF'Uzߒ!_*X|]/_bwb/3n9bE׼ǀ!-q{pgƱEf>tN o>KOZ;=|짲JHnpGP&q_.)gY9Tbk+X+ZSZx9>8Cĝ'1tl"YǘWqR.s].FeCq'GEfQ5~(PCwϬ N$7M97?U*SL2"0"0""kqޠ^ k$8#~ ע)żCptG% H.xַ௕:5,-<Ⱥ}fn Z:i 0ؚxe>Kա_g!\+ZEn@~V%~[7oo@{]5,v yt ^8|Ʌ8n0]fR7ƾCX"P/NDY|.xk&n ]^s4[c*wX<xSKwlMpdϻII|1l6s\xQ2"0"0""Q͚ky3n݉؛k f5Z7w^{M7nlupcyx(U6q>ݕ}߲pM囮j3֭Fn80/YVqhۛc1>2ϸ`̯,:1AVG"8l>/-ֿEPONިUa\n*eZ'C168Cqee0]Aw'?m<~w*I-IhYF- 9nx+jkbcC9i>_1qa<*<%Tɾ|C!;jmt7xa-l# 5Qv(;2 ^RYcm<!sحറ$,˚|XVaO={n|h:k6D׸2]40di źa{:\8;=3Xd=VWׂ>v/IW?Q4.|VAw OWIqC7-4ߓW^v=j !6.4xWq^ybXyp؄H~59%j&{r+ݳy,^Yn3am !W s_5Co|Ұ乏FxS`#Pa])+.l]y̟5:t9č굸!Aq 9eFVuxN.=Yn5wKoK}d[c}Tzf\dR7k]] ;gW2[e=_X<1ivN'lO? _s!9 ٗOA*_(G'~ nܫ%)= =>tmSeВSϳp%/Dׯp|~P~k9Cܖa(qp(:tc&syW[z16K k"gas`0`{0͓$߽ ڕOK ċ%'˙l+ jyCQFFFF6#3k'?$xzv6}|Eg Q5?cmGV]*m{>Ӷb}xO~3!:9Neݗ*3-3 X!d*Y^ߓe^Ʊt3+rO!'e<SIdcq_>a.ۧm0!g3QG:Q&05Po0<MQ\ϟCɿ 82eD`D`D`D`+m$j9@H?j k;klwC5; ˳',jlS܇w >tƳ~c;M3nU/{x :vGaByճc_7Cpj ;cQ".Kõ5yOgЀlEvU6:r&V?.GʽsdWJWrpUR?P7Q/'{ƣcc͇~ y& ~~?~x??Ն'OMm2"0"0"0" 6UÀ-@&@=z V4^ҶR]ۧu+̇kGɳ5 ]3c=@SlkXygpd{˖xYNLgY>@gܙ-48~ 2 /;&ܼН/\#vk:ërpuM5$MĿ8Ho8$kC^"6a ',eɂ#d^u2? О$1rhPƚoD{JɆ8oZ:u_ G[|c谽SϺ˚2tx*f:[)f4e_ulQzL/YO.VQv00ɸ[vkpM 'bKxe5.㵏pF8}?l؇'2j]Wd?$+  >O٧/WhZfBzrSXK|Ɣe f#OEd3Iu0JIjyd"Cql_䉻w7ZLṘ+>y_?q'|OR"v ࣌F PY~F8;͎5$?fB/6eQ~==cLs2K>=V{lo<Ìs{Y ¶ۓq;aL*6@SOr$9mbyxՎ!3TO_EZ:xAGp^AzǫCG "Wă͔W9ùT)M@`6#[s{ȪϏD ~'^V?8࣌XG5-ރb.|k/=z*_ワ^Hn_'[^%3sFghJ?ò 6z{PfXq1aC|gg @<) ݠ*0xweMcϐqz088Kr47oAO F"6?lE~ ީ(YքD:7Ou޿?o2#0~Ӟcә}W(sZf:eD`D`D`D`3Zc֦z!o{?`ƚ.}漾uSKt3:mT%_-W/pd_9^Ʒ`ϟm,@I&v3Yy[AFu 6o]U+=o҇\̇Wes;6Z==#Wҍ#7Cߙ0//o8-?U}ѡoz}$Go]t4Ba<~:Nj}Ⱥ.]'Hsׯ7I+pA$1ğCz ^nb]eDzκZMվTI}WkXg`N6lG#>lmw|4w3@J~$ۧO'gڷpa7KPj/C?ny hWx_N^s>ͫ` y moqCt/U3-<~ а ܫ\hv}dWПZ^`3U~?O|#(2/Ox0ALQ k;e8:фr#MzZɆ^*[ber%u)!/`$qCxHW'a{_V >>ȟ|?! UHusLi>@xp~f qN.n)VHIUT+>tXdv{3S6s=LsB븯Z X 1q-9zc}lpo[x&OXW˦`YZlm}0u]~2n;slc(1pDڠ-m]y YeYN=?Z( pcƞ;GN њ&jHD&b6NEFec^M($*Hu6P1F!rd.'} ]{ >-GGGGm#Yv@NH o9R:qùuP}3yx|:q6/~8 ѷېGۺvc\ߑ>>&eJn/\r]Y%噇\omZ66F"vٗi /Q??/Xf}1Ov)ѻBwevYW=[~! p@惛Ai6C}M#_UDę&#wȊzN>qDģCגlM;,~X>;4H CPKjH.ltq1Eb_bdדv>Rz_zzz~y9_y,QAq}C} %̝`{lLӖY=/Xf{x|6!ӱ~*g?i\~}Cq_۹=x\2ͣeپ7_9FycmS#'.u TD~0tS!j Ѳy5Y_x~z4ydGfù&Sm9D'5U@HFF ]U>.H,F/̀5"B8lI|:8{<@eL?Ubg97%K&i)c vq@@@@i6iܼOVaϯkv wy+v;"/c?moo"uZ;ԧ#]q/ԝxϋmq_t2ߺH-3 8 -u-_YޥãMY c~ 2/ q{5o1z}CS݉~+Qd3ɵ7Fr .ʐBl؍ib_gG`m t%bz'Q21@;^XM|P +{pAÈ ξBʷsjd̄Gg'zt(a*,.=h$"S3sh~Bx#spx;Z}p }5nv5 b?@ƙuS<:}oᱱ]1~Mo,mj~=|o|O|j/uw^;;.ZVǿm^ @c)tc:IhK~mn+ newJOi/i9_l&pš- :Y5c*@= gh~ui?:- \ÑIC~_lc:>ת4l-ݐ#Rg3eneO[;7F }R;<"SE\Ȁ]YZ*<7m_JL3>ײ, amʼilgkLgyL^ pNGOtm`]`_L[&/IFtXV">s)h}=&k/q$&!Bq: \ŃH]9vU.8{]8.x,y(y?j`n klcL"i']˱"NX}====/G!u-5? @\'y۶Msy޲>v,6o&Zg]>ӹ>mک]٦\ZF]1u 6 uZ8KÕQEr\EhoQ0 UWBŚF ϗS4YDGe}0j? 9+$TǼrcfM _UZ* ,t8DG$٩$CS[RFide>lMb xAn~?ߐ.&^Ƹ####D ˢp|y S$<>Vi!yzs4纵 >ܟQEc508]մDLkR7ka*.: CQ.r5/chT9]iGٵ^8ߔt"9Z H#@rNQc A?.f6 Io oj|ؿ9Zp eh;lȶS>#>enUq_x9Hj<|篗Z!":5-.ZXߝܳ2;l1Λ|.ɴ|,V):77إ:s0l.>BV}'s87.]T˰eM{zzz>k8s'g0!#y4~NßdQO\zL7lZ<2W`x꺾gkݘZec|&{4}0TW:9lj.gXG<Κ6+ˠ]ϸey]7b?\ 1E<[vys~um?l<9Az~`/8;Fɑq!z^,+(KcOV*W}qwvv%ZkǺ5UwS.:gtsHM2TQl gfŒӷ zsJ?Z-GA5X6 qal8K%'\Qw "s>s0|N<5T`@>.srZ>$ _3ϼuяbͅXlԷd@n3׳_dys8-hӳS\J~_==orRpKB>|3a@^ e2lM}?0mt sWʐG?'FtY@@@/ 1~'c>&y]q]@#oĺN8(Nv̻횯,Ӵ3#d7=4v{v?wrEر>B(&_rp-m]:,Sc>vۅ:6?GW_ K#1\r)^n5L8. gl]>EZӸ`It$N73J̚ND0!Zf]xV; `* 4]OtGGGG`+?12*ޚ;^*y=Du {}E¯d˗o6 7.p >4^/oڦξP|N#>;_n)dm FЀ 7"yc>~[>¥vw% dzBn ڼiڵ,W] /I.>xXa?z]>E"]8> ROr]8]` ۭc;*>COrO_.2YlaO\+غt /0wd1W> KP0}[\l!Y? $qAu]磋\v6oڶ]8\⤝8SH]۾%UϜۖ!<ZStnK}V?OT}{{-|€bhK-^rBe`t%2#n=6@r聱\ڀLCtAK]Ƶ1yˮu9`ď$ڻQP&\PMZ.8NId&vT`v,U1 %6d#/ w'9@,y=K0= (h5v;m#ీ1/j _V_m{CB6S@IDAT@kec;w~`덩_ -m {x; aNݔMAgmc@}HW/:"6~؝ʀ ,Cg9tW_Cm۶qmb=D|mk1zƖ.#8I?<,Hn/`wHv]N؋Mi#Bp8pL~i@$8HK{Hv####KG[ yx =Ccg;Ję$>pn "BL}=_0VYi<ON)}/\aŦŀ&!_0d_8wHXsip]xlbWǝ-\zH70 |'|Z;^s1&1A F`7~N9%sڬ˖Gc1@i+:Jȥp.9n>1,m´ע/ D8O1G6ydx3'zN1ZHu150:Dy~/2덛FEȅQ@H).xǨ]|Ա*Mt#####0sd񠹆Ty5mppV80}fr| gG]_px >.|1`\Q_l psVlQ |]yU,p=z|/c!wjF=====;E`XeH֝ 4I?zb].mgGgA gw @oGGGGG3+7j́dNR _cl$Y XB -G[Q3->yO[K3ە?&/:wFd2Z}ũ̓{e{ۨ+=_3Cq~g1L٭)k!|)hv7ԲodɐodmkǾ$$]G8P9h]-܁>^v|LgmNj9R%]?'>`vm6((w5. AoGGGGGI " ;-4Ν=E# ą?bc@w;B@@@@@#yYNϻxa ļ@2s*;xwD rw<3guS -]A3zzF)'4:p+&o-3b0uM]l|f{|NY(I˿ИI(}'L<4aYmc>?dS)6 O0qt-s hDI[eV%( c~4)&}35 ʖ âoudcY 0 ?.?% Ju2q=^ E,W& H ̼H!i7ﵸG|_jw|*96+ok^)Yшqsߠ]lcfwqJe`_0 smX#,,Un?bq_JV<6@d@Zߒ65@܎-[gYƺ1|c K6":@7%QN3L:و&M?d0hMB2$;;ɖMM_bm>bR>่)2C&{ӕ=====oX|s[Hйv2rC!@Y̏ BwHH #뛛 ??8Nv  W[K^<&xƞ.;3>u[}1is^'Đ*㮿W}CQHcxvP?#nMfxlnAut+cڌU_ PW7# Lg&tOqiI5iA'y-|^)2> DGVp<`l_x#8w숕/=Mog]4y G)2ib^cފGݘTbۿd1I+_du(bp:_ -0 F4}ߺ)~zy01prOqSx v..ԥyz|'`OIM2 al. `HZrx0'X4rCm3k>/>]}eks #.u|PJx1.1U/4"!T7ol t]"Q(tDq؇_*9J,;ӡGGGGGE*B(*, 'c|P([󑑨lk:xMģ~g [2am0l1\ԧJԥ ۖzcҵdcAGx?v/\j<"#Zv{h'4z-Z6e߲Aג l{/$à}@]|6AyӁjR&aArp4|A:Y1}ȘbջQXu b8xd$,NXޥn#####v`>4Z] ]+9?&%SBϼq;a[Wl %$|;7Z2E$$PCgmro}qn'Mmm8y ]+dScdy2-ZUz>/Yf:.bۖAp0VNAz~-䄟 |6 #787&H^외 v\4`73fSF3oLg /qq yĪ&ƾCߡGGGGG"07{>c~c۩3-Ck wO0;`́B]z%*gR JG>^o|d[C6e΅@Nbuأǟ1ur+6m3Xn٘/)=z 5cÐ]}d[ ӵ.ﺮ嵝Z?Kn7}:*o=X @5 >B6~M,xwQco .)>+So<=====*X8uHؕ@w'Fc`룯*OF]v/31v"heh#h6YO!;ĝg_7 2 -=:[#Ӯc]+{bƖqe@o޶Ym֍Ov=1Y7gZ_ t_8H*;hXq>``D .%d^ԋ>-:pt)+@j-lu#####y"߉?G~/%Jc;191/7p"~dz5(r5[<lS"XnwsŸiX)Y1 ήmh|~躽1c1U2X y[ d~6<4u@[=ⱴlP_؁|L7֛}'RR:/8l_;}g~~ <{;ؖ?4H.{1:;q@@@@g@=w5ߝZL 3%g~ U.T'b-1@̥̽Ss}6u1<ӵ^pl=><6rg:۹n]Ɯ1My\cre;N]ڮŏɐ eyAp0NV6@gvXzQh"d~zIpc %x>vHW}D<.~cc;տh:rkaې3NlHal(d,6x0:7 ζYng;ƶsmZ\)%.籫Zn݄nQ!s)ֵxpi?![ɳApptgT7HrZA׼+~,x'e"o$R>s)mxr<,`n%le`8H= &2a#####"ํMux 9H|~ؼPCv1 E%j`.fN5Ff<=VTxe}v;vKϨ :БH:Xn*Q` 3m;Z7]8wYײ2' 6σeеu<׫ucu|Іo|O!ƶ{^%Se}vdĕLB[b1@;x}stEK- ^c>IUrP@c=====/sS! ]+\H;"g_,('υ<;b@,ėanf>R\ umKmnm{δc*N[:h~p^-7|tYi܄ pLPlj;Ob}COG~l$Gi7}MK5yc]uvKD&೉q- b &p'1v9 l3#Bfiy "Č]vO溘4~C:vv\hv\y1* -;U(@H3qRliW.k̛6ƦzOC6s=h쁌7}؟.U2p]Z>mcy0P0[ ~$!msݖYm: ugߖ#ƶ98 /@y7mX+Va&N±&`,ZÈ[6xr`dm&~ٶ+Ynt9^|عB.t2SOe{]#####ph^qMA*^Ew6fc:>^.O\T厝`@[\ z$fȡk,; } jٯm,4θi|pql:߉?(Glx#####`gI? r%xX,i͞ǯ; y/-|Y-Dkat #?*4#]3eJ6՞m?)v+1m}6[[XZ8Q- :?1큳.rیճ @ –a Ap_8H['}ށg`LՉz̮ $5 K~!Xؠ DQB`x#ͲLd[TCƮc?Jgտ`'u|9|(~ۻ Kuݴ]@grE!Np 'yIc2_d,mgo>XVcl,ӵm[\~.|" a4&S<:rLۦ%C9eC[JB4 ;Cɓp`?mQB h;Xy&eHc7~%`!FnRgqȟl?bnbls8nT!t̗$qź #C@@@@[F@z\r{ϟWJƯyέv־ _bZmiq5 `k1.[ǧ1rll&_w؏1d, v]ym;R3v|U s lpR}i6yhğp(>8}AK:_hC/ .-D@BIK}OHY-y-Iͻ#nYxޟ.&Q.z@[W"~j矗\͏uv';ݔ9r}[qL;.Զ:P]Tqo X62Ӿ6Yf؛mdY`eM]5|ضscz/cWh?Azj_e/ǰ2dY^ӵ|\U*a5چ?B>1 L}2Ggz?$+ +۪D$q Iՠ2up1K\wۏf8^Zc,ɽ{ El 73G'|@wx_[s_W$7 V[fsz㯺^[C_Ӷ/j.NWϱSƭϴe`fFւzfvYgyV[Ao%.cmY[eS:|B׼۪q5mXfl?0\C W13.n!lgl>xnKגn й`czΘ}`0uU*^ȋI%J5lqE,V`2A>CXn<$|)3NbO|?xz6nL| h| ShdzC(h_b@1_&$B:Hr^hVo nf,k=ZlN/ݦ|Uc+;=߭+xԅrAss%wGl+9dܰvtg}gÙmgbG/[ ~gwǧJy7pܙx<=)˻˻k=XV-Y.6QG $QxM]\{pC΁I45Ahm#QȌN1hdY[>>|,E[6Υ2۾{[똈LY%޶=^sss+Fu%kmlW̓ /HGv;t62/de8tHP>bzmz_wWz?>˗L7vhNiN Zs`^%|ՊE<%dYMQq2GG1m#rH.S9`Էβ16|]lj5o[S8]Qǿ?8/ 9u/~qh800ӊȃzHPbe[i -Y5w˘?RbX=====D@D ]Z?,KO;|1d~7[1 1l16`'[g; ntS}0a~_##g"0<_BSv\.ؙ7 (Im$,E, 01dMZg =x$FsȌ{zzz~#PBwo~Z?:CՒMB;pMwv/'?szlb) ]|MKN6F refG%Cגdc\﹐6ƧF_89HP\h5|_߷J|ޛ MeYv{%lj^P|ΈrqbML}9hT%iSR1og }OH8xHN6@9>Ud@@@;D@fiN. }?G;KgRw?HƓ?5LlkYgS:Ï/{];0{%8 2Lk 20gڝ"60pyc6_-ڲ1_tuvo~2<]HX w2ǎ Z!ͲLj;UwνQ_xZr0d<|lr};JBggg$*ݩ KgtՇK'0 ̟r0j>etІ zo÷ڬu7i|A7m\;|lY3{Z ar^~77X?RKm_Sݭ\yH-]-g_$y\B^7pkSa3S.Ne%K|}"ˑA3dYM_9N zle7 Y"ccIU.%!|rR?X1;Ld-Z8ge;%{I) |hn$5@98ײV p&ZRB'/Qb~>ƍ?^C=+rYvY2o8E<-Y.(=J~3jkzePwWWk-= >;H>;xWY˶Ue,X=mUI>ZZl!LB/݉Es6}sŖ<;bJl 2O_䇄#hZYoab噇n>)E~y86tLJKkѷ*K <'^_W oqb @S8H$:;_p6NT8I7=@d"OJ-MƖ>mS?-)-{zzz5JSz}Xq;9԰בF/[e|+=5 ՚׶5Oݖ>lScnCcdnd ;1_XM0w3_J8N"? 2o{!1ihZ }1]cbe5oZgY -:$KO1N+,Pn8nne0Δ-6C:`kB E[¸xr]4[.7QVw0;Fб[@ !В6uO>T}ި;e9c|^x&owJ|KzJ 7ZaW2ZUAo <}89]k_u>*Θ~í` t!KG!L׸UjY{zzz1PSb}D{^4m:ط࡮>OyykYjwl L66 S5DZVf wLD !Y΅%qt:4Iy:*MY)aXv=,ٕPHfmY #kZ@N> O-/-1Qk~uSfXa w]vs=ήy.aeOV hd?&z -\N?N3ɿN:<_7-|%́3κLu][v]j9:x<Ж>]xþ>w믫\Z2MG&mU wzߝ;-iNɏߪӒ~~^p.x@̙s0 w ` uC#c$\HcMm1Ƨu~Vdt g.48(Ե;;x!$ЅCþ>?t___x e BgRץnǧ^P8gP:d65d [`ym|`gt####A"%z >OjOzOCU͓Od{,G K?ӳr~|.4ޤh<"w- i!//^ԣ*SS]-BI=6SbB lݜ p3`~p|XԱNDtrYeȁ,F)-ڲ)L,71<|]$g_qHa{}?ѼX1}-]mSuv[dֵ0;\8EI' Zi\]H3] |O8yo>>wZ:X,öeɖ3p<HR!l~q&X`q/ č8'y!vN`ƙ d)m[3mof3m9KUHMYY7P =?:49m}ѷZZ:lJnߖc2'o:/CCOjR{~ &'`ipP 2'%J5ހތ~oѓ2;2Z箿^#UKxGGG෈|d<gu-?;35Ǜyvp>jyڛ9e3&P;vsD$? #wIpMB>_"9cv?ٱdG$[x,)Ee -:3vdζ\"nZζuS|]mkxC|Ʋڟ噷`pPvGU"4L '+; ;!g!hipī,Q cwAoGGGD@Ry_h` y/{h]@c>֜XAF}^wRYy ޴D u]d&ӸlT?>zCݖsz=qx/D..%ϒ%=.o*˕ɩ 0(vj;V K4b>HAO[e5Vԯ9m2_5m?P #1,;ObϮOIko_gZj2sva<:߲vM[~_$ / _܈|nDfE#l>ߜ?zA $%鏻$i! 74Y1t,1`|$Ǿ6C6Daxt߳ݍGhw|z؍'v+hB/[XM\8gYuSmd1/-ۗocslw0ZI_|&PI$\cJo5meKƣ1:t͗60lε_@IDATQHp-7FG[@3oq{h׷ۂ,o,oі0cFqMSǨ02~Os$zwoV Y17%/M] S|֍5Wn\7kzrp]j:MA#|݇.5'@,P(yY%@ mĝ(gN=?lg Ǥw?;t^[~gUu˼g4e7ɎG쯔ߩz;-FD|ղ}lZ1Y[:cL| Z~lk/S~X`HsSY"?K<`C4>'D9x:|Im5deg}Ffyl 3~t״% Orϝ+ץgagˎGnZnmMY 6sc>[cmH^^5]\ā?m?$΃BȜ |i +oU9F=Szct֘ )pvq;vc1xw/uyy\gj G|A k=n.[.z< 'jBgo,q.>g_^,l_d ESEt;.%䎻 ;DBk{'Y:n˶Ɩgk̛θ[ ǏտuycxӳjvK ‚+)G_~^纙nϲflzo9ֶ密Iu^ K}a@4|U}ѿPz md c> 2x~ly ug-ϲmY 3f4|.UOj3WWzϣutSM 4Up|:tA .g.>tyaˢ@Ģr6I/x,>̃^Am/szߍߔ2Xh!`q/|mX,7]@oJdզV\vtK_< Ǹ7W<nX *K_\k19:od?X ! 2`4S/3o]06m؅vL0rx -$s0  7`l/AY$hzzz>Dí z^{umv 5:t9^JO%zZ|`ųtn:wޚwƭ٦.ӵ{ifk|C[*o$cn?k$?~`(_TXE(v-ȁF7;kіkgJKl/8d|VXPa'O^ƶeN B Wۇq?8@NM sLk {MgkMm)ȕzcj5o[wْYC@IIcI0Ƕw===0:g?~O/Oݭ)Mҵl"4S'V3Wϋ k?w[k' Բ̏ulW|ɐ0|IL )ĖrUb%YuP\A= >EBy!4r]ˬ1voA_3'Gy詢kOǂh̏K;9R$Hܼ.e]cdFke->Mono /3Ƴu}١?ƟcFc@KhL)q]5+& Jd nʛ[glcڸ-N ɿ~ϴ bzzz>Pt{;~=d|/ B@ݩSD?Fnj Aomfzpl~^7g]zSv~W쀺0['n/+ь;J"yfسDZɿ21dG*ԍ| $nh^;Dt]y䴑歳k2g<\fӶ $~14yx/dw@RZf{cyt׺l\zߺ]r_clSB6HIdkN)_0IOS`U meL?gz{=3mxM`d8':ΛGVz_ [u:4(ܦ#uy>m)_*K\@/3ӹeˍэѵs}t-|w\8ؒiPH"p?####@o_r]_k;^w-Z7ݶ`i@VKC{o%>ȣ+TWKzٮײl/=kJ7N]iSOɩئ% ;$!M*qrDT/M[?׋tUk!7dց2oeycRӖ0 Jّ]}tS./h@Wr@/0$w d~XnlZzNϺcuVغd:-iɬ;(  gwKG$%GJV wIcP;ZHe.|kSguƹw/+z6 ƾ/0vGGF w6[݅^՝>÷zTSy}oOq>@ucCL3gsuGkHݺ&˃WRJyoɓn*+2K?3R;q ?KKn1ue]560:6>CĿA@%>C:c@D)w F7M?j7gԣck>3mۃppvgM`L_x$5+x$ )xTNԪo8, H/.t_xwGG`>Z<׿~.qs[i _"GX== |Xo#<Ԛn1omj?٦|:3CKK.OG+Doγur%z 8ئrʼ0 |"3x "lZ@Gv)8? vje0\ictY 箾nU]k_?D.'3AA["2]y5d1,}}XN]m~-팭m[>  cw2yq)ƒ)p?1Rxp'} J`5}KVy ?w13n"pwߏСGGGyOqWIL4ȴOMmf>;o_h+Bo߿,nu^ӷ5U|cg͏wwi!{)䱴.9 O"rLF |\IW/F=ZzLJԋR(?buX0da`4BK6t 4mg0?eYM+@JC]n@e@p![]8rM+[?%е]ˏe-hxnLw0y>X(+eŧjB([,B@djO:yg1u̘3GGG`l q;nZoΞg[_]__E|׼O/\y;^'>@ߛK֍sw=c)~JW׵~J^2l z-%ۥ^ %u{J ǖtk&_F /ˠtcge-ecEcwu%U&oRJ%:7{?z&p=zƹ~-;$l ]g=UgWݘe[Iϔ?0;X8c@#濻l.'kؙ%YvߦX,7{Hv$K]fV.t[?Ӽ͟?R=UY`w2|p?JXCG@w S v8a:ϳ$JلO_pW:)xd@\*?>>fS8clȧɈ{D=-VlJJ_Ww7=%{1Ծӆ/M[#7[}m)bۏ?u{)nǺ%rڶG3HFUYsNM ॒zV({|$'GE3Ȯ4 GK[+a2tGGlƢ頽*? ?cw*]*?{GKlVNzj9O]v񶳿mZg5MLa`yuk|>5Xϛ& WJU=*U%m;V.t?@l}Ö}v3u|˦rF`#f~݅?e9ğ\i'~%;M;hn믕J/Y K@^| ,Ny;NR~4־o}c~1;/U3֓{:)1mIY#'J?(gZy+|[<:PT7ͧlu=DV-Y:6c6gT {Ɍ;:l#^yו;[o9ӆkIo+ۯS[%iԷICr`y%ycIi|hx~acF0TY׿<>5QO-_m{srD@ZypOi4uKxӮʩ[OŚҍڹ(|m[{1='q(ww6RW1dDIܵT2Ji$gJJ d6uյGm=3\уt+e9)fȮ)8<הJwIySRUWmdYsTVj=&4jwUݯ,U_e&2KƠƺčޱmFql?ݓ !ϑ_ՠ`ٿJSIyxd*dGRfN,OQt1K8C#pogxJ/?|>p,pם߰ V m;xժR \㻍vH*cN~h%s6s~~݀x.kټQ2(OPV:) 5;*qx!kl Yv{<Q'o Ʋи2w:]s+xqmin>)Jʔ :JTٺf0Vik{N٥.}L[;L,::7N]bSe&m#yΟL?M 3k Z=7Njl@-j_[{b#S0xΜcվԭ[r;#" ~M1I5>^q^9Jm^Nzޓ[&؈n>}j[l\]֪Yź~װVω>ݸ夷tm3gʞ)~I3Up1 ց=aНm]t?Uҿk>ZnZNܿgglfS}KKf?i7ǧ~*fե߈c.ƶƫXտ'lT l)]}OH{EYAWB->x`M&˸v ;mՁܺHiya-Qkډ6ѿ5dϒUOT&1 =[{۱nbOv6ngoU>eۛ+փ a 0\Ϗ6xU^c[}-:֜],OKdqLĸm]%q|Q2NOa.M'm|JF]Tʏ~/u@OL"mA͕ƦQ۰oG/JZ\&'D  4ycl[m8:IyR+|01(Ƀe }O;]2Ňn<==۬z˕ھjg9AX?HC_0GcUN{n?'$YF8I(ɱ U:NLֶ=/v[?WvgAAkmq(}0O%D= vMgoQcj'o|>q~=yjxGNKmM\_\ox.}l=B޿?$E۔OOeguO9O7\OXx<ݦyߌ7#mv ^tOli&cSڌ|rcb'>m{zcѹNuDtH_8򶀖B3E+[7L(=qV189pz.\hl;OgpWlɇ-==+'ljMGnmM zPJ+7Ǖ5Nk V6yxmʷx}Ql?g@gJےmbFI5s*`)Bʝ~&R+Hy[6.&y⤜|U9m?%1ş2%n->mUaʮ]2؜lǤه1*K]H`ui+$dK9jWͶ9 qK9pH0t]Ul0&䫽k%ˊRm r3>5&,x("BxD>+XV &>W4ߣnҞmbO >HgܶдYʧl#㸍 /#.8ωUٸ(:]mV$a|6V* HNLPۢ0Di5 5&Z|_)]3^DB{_r ,gog8ٮ |~W:Ɩ#ҁF0uXe$${U{J6*ym7:><>kB}cxzznjJ9yK|OU]G1GxOy{\F}k⭱8loXM6x,۩cҍ%dY*Of}>6.ƍU{0SmT69G%JdXVD+PW ԖW^6ħbCx]~"GA7{ 윉2<(0}e 'IyfXq w VhOfTV5>m*{=𖧨&_t3'<.\yc}4zxvO$yМ]Ѳ"p36 Kqu=Ovg?xZmI_X9Tѫ>`tI{ +An9I7g33\{}ڳLm"C؎IPa#E~m@_j}<>?3΀4IbU]PhBc ׺'v^s_E˷NY#yCk`bO91g _㦼6k+9}oM5²i76!;uzrXȂ;=ӕRJ,VDۊQa8־aH{ yoUGXM3וce\h:s?_-`{TPx bwݣo}euҋ0Zgju51gѱ/qn=F]m-gwW;wJ=Tߊ%oC?KO3yS)Uޠ-{z~=l]#xƄ8ib#k1% J7ȧϪHzxON<6#̺F2B|Jkq6ݖ}v^x׺z#M/Ez:6- wwY.<6;Eq -J@7tO9cX~ JY k}lk>4W޲'g;'sH-XjiR9w WxJuFvtSNtGz 0U`x$m?M5W7o(t#M|2Q['m"-ػD ߨ*h{V&dvyٶ|tw_3 mmF`pc+v%d5sDfi}| %1-ӵkli>Uδ9l?zUW呝}ڦ/=1ۦ<ŧ㙦μ)6Gq+I7 [@'0[3tu%>A;|ۼO,?V}EiĶcY+~hq,Iy~J;)G}>i7W-s4mo|'<"sxC5CK3]@>kwII2EY@m:Ւv|{wF sM^$[ UQoJo2M(5Mb~aܔVCRvU}JAǤ@7>8p3 <ڰ[6^VO8F0+G{_-f|5!kˉ2?0jG^Dj"/|}{^ĘSuk5{ۚ2~ O%v6f==];m3<%Kק1Z*tNo9/Fzc)/ŶR50|\k 9Qꪪ-gKe\qג{d 'mm4Pclw"#b[ݧ߾#9qOZydWX^J7YlK䭯'3z|v婒P&ol8ݘ'_?QfȓS=0bYU\_sUθ#6$ܺigSeG49PN}d/'v/>lgr&HӊyS&b>iwGo=`%@ӞyhI&"G3 +l9aG@wyǽK=oO}./x*I'w,dÅ6;J zF-wO3VۙS<êe8:JR~_c?$֜>/wO7ҭƖ(SeLEWqz>_K1"/{F~Wޥ>S~726)|۱Grp~@ȷB`xvEّg k2'$TmS޶= g=>evSLmk9uPJ=B 쩓>LxtrZ(y@NrbMj>J~3 @r6$iT[^L/m^ @^W #?&Պ#t#-ܭN''G߫dwup}F0^GY2ex>ODF0͆W7ח8t7D;6=p7ϟ5[rtrkڽ>W$oh'Tb&1O9[+g,rXik_zqzب57xG{xb*%mA+^eێpC3flOXLav78Q,sNmOu вt+'L[ ?[y!ת{SJ`kKIټ)͏mлVʶK %skg:(zJR7oO^O>t}mzt ND{0UM&kv$7k;= cUP|]kz%%’| C?ߙc1OyDo^:M.6n{ΟIšn`Wvz8h6+qLwc)cD>)rP z.*Mc-+'( x3@7ؒJLl'FY,%J!31mM|OAiXdSxйV(g?^KY~=cHj&I=+m4yܳ[IVH70 u@Kϵ ?\?_,a*|]>O򶬧tY~3I>A"ԭSv,%m?ύϸi33m#ہ8ib#~m1%%WʶNn-Om~zSm41xJ6':S>OW[Z%L@8Gi6M14~Vt7HN|IKdl\C(\^1:0Щ=FOYO9_[y1%{kU^Z:}>ߒx>Ӿ"&ou_pt+wY~ZK_Ai ߂,KѩV:vߚ߲Ā7s]k~YT}dG^0 o;ףĹҐZI2g&*+h2E*L.ʀOciK[mok|{ O8ЁF7_?͏QistTtTKO෪?]{+F'ir-Zm?FFxSz=m3V#l{xHۑ 8%mG|k~S.B6<ȂΗ n~Χ#}ӕys0*[)?Cڑx7֣/m׳M}<^06Em;67Xt{JI[Q⍩|4K5eB ˫<)GW tRdoɭnK+q5?ω~$@cXkCMrOҮx%][2dj/5Ar?uOSǵ+m- MOzovt]eu'Z'7Ͼ_o߾|͇u?$V\e⦅lmpd3Oݜ\mg:gVߋ\5oZ}a_m{W}=|Uvszѩ˧8}zhO,h2oZcs);xcKKIyG|Oo,)Ǒ>%Ҿg'nz=j' 'o< =SBwh%+Qd//U]X@ VīySBI9k=%$6@IDATK(Β>lzX1OG J?ϸϔ.}ZXѓlSw_}ePAgbL&o[Sxc零Un6'Ƿ:ԙ_B'){1>n?|x:2< Z^7JdWIOP2՗IjKg NOm2>kQ=ip=z-{1huH tXwZǶ 5nh+4Vش6'WJILJm6oDhk֥}V޲y ŗb4/@#@[yBsyP=fxm5@L23]`Hkğx_΅]^]j/cswlOOkiG[f9~N_cWyϾmk<9T)]Ɲ:dMᎵ~#6&6ǧ13o:F?(~_Yxc= HvNvs|lڦdrC9-{.>O?H6}E2_~dV0@D8I>I 3`rubw<t#m>/ <%㓏e UyXڌjy_ۖVGGQWLG>7o[FSz1zۑ 8eM܍mXmIO _Na{Ħj;ڷò M31ݼib=ۥnGqm$6[?Eѥ~l;S>Xi#cK[l0نmЭee7SG`t5}O;I'+>rJ菍ګtǟ$-F SVoeV7ߓSR0<pRۻ W"~r}|A;\_^r _b8gۆ[)INO/xݟ&.5@_`%d=>1:P劥~W\Qx[^VR^bo_Wm]|LsH?;[@|pmϗ@aAS?mY7GGmڏٺ1M9qlg1s%m;ESyg| c_㛶5N8;Fc&zĿtwP*wo?giߒ8sƅRmMl+}`mL0Tʈh?}ވs\S㾪:+6%π$ğ# ӛnW]7l;@;.s|_|3. ~1cG_i5m'G2]S79mFqҋF#1F~*[[DYbkӥ~K2O!SkۏO;~^FU -|'f5}0F5m+80L{6MA fY#֔8C1>G}sv#MqӪOͧBeؿF9|/gٰ;$~sKm'  EV""f︦i~"b<3)3pG"|8z[^«2>|/QL  gpVvwJ>iR#-Mx_ߟ]?$8؈CsTh#OQbJѸ5f:A)=ywa3#I\L\v{J+gjPƿ7/ -.oY{t4UsU&#7eÿXT {'5ouqx8PYNd{O )=_tN#9+}$F#^ISř]zZpr?}:> K7%}N%<1Ӯ'W,͛.6SOm;6ۻo&Vڏ2]o"܎Qcd3"W_=ݒ>vq)*f4mA+_elgclNBeI,lt={cr쳖g/q%nϔҭZZWJL_+/OѰٰ(߯߉-<5'<<yʤ(nOQwǃbhޔx$P T+yl3{&k0n}X:a'Gi_z%!Ԑ QyFFW]?~lϺ+t7\S+佞?V=S~\ @0)/i}vRw[gm#jUNj9y1zm)%Av?*zƶs4۱mbފU|饲㸏~ wݡG@G#I>ުgo|('}y%w[=߯LV]NzeK'Unot#m>{~.Ƀ!3ߓ%AېPP calk|TumSep)w[BOR; cv&0kZI?] =6仸8r9Y߶?v?Պ6_"hRN|?3{x6Fxog:'ԶZ昖V9yԇ9? ϵx>OɒXiwJ3uU>m̏hEVgo-XT]=X}JSN8؈%ie/;Z}aFWz7ע9FO:Ey lǍ+_8'v/?q(oʙ~Y,Wm$8g0&3tk!{Ĕv(&m߇`m2Oߒ'Wm`@[.ȁ9FG݁\wϮNyN>OoVk38Rxzz^WLRN5rڎv/ۙGO66c/c,״3]Nڌ<Klk=6)_cۂwO5m?7_9ttO}bs|3uK_'cȕx<߷|z4%<εsxmSmhXRtUd}6K>#0wF@wkId]_}~PI;Qgٴ '#*&Jb AuboSX/>C7}n W[O¯{Lacڲ:&6+xߩs'ݻ{YMlqRjB.4 pqurrq+>Mګx#6R}ۭgϾ~ɽ=ƱH[¯vԭ9xr/F~UNR6h1(mU^f$wM/nb#75ޣ1Mcz|Ű{8-hЦK7}x|үklGG\F{[Jk\/&?픓z] }Q>wlO*5Y-Z+[]JeKf+-ŸibV9 q\/t$[/g:*Z`gl|>9&+T]1֣9ٮhwI{??2p(G%Z#Nǿ<>~}_3o_>cWjJo֞WZǛHy_&P{dkqcSPeʇvw$/cv;c9ȇ6&J/tk?k;w ~倫=xmDh?-&2V3r̛.ņ>UN݈(Va6ӶT9m9}~,F O;9T)ݚi[c~ 2}2ߴx޻ H<}otS)r~b̸yS)Fm־b(,=٘W̺J9ƶ';i56{67OY+G~iOVc<|dɾOޗ`Ô\ۥ϶DzRAi׺ͶmX)O`#ݾ0%5g;O˦RydxbU?ȣd8^ %~&Ŀ|Rk_R]o%=oxZgߨD )+g4VהCkb]kF[;[B [ݔ-'bG;9*EWk&qJ`1T&Pxܺ]nЏ,k?};>+E?h_w3jtlUS{}3Y#QÖԮF[oߗ`䘰dSN|O}ƀ1FOaٗUl\zc݌ޗ.OKNt~kl'ohū2[ߣ==]bƲiƩ~U7_bߤ#q07~%ΚnOt׫^iyՎf{MhCʬ3+޹&.y&?wj*U,%mtIF=HO~6X/MgF{,Q{Sn$>eMծ&:JŪĦӂwOSqQɗ0{-(}6U<'ox֯=:=b+۬}ճNi%|O]6=>j_崝G#>Ġş/1YlG}l(lZmzxk'8#|oUD,#Z-܆RAXK{\WX=~ .i1sê~ܳ۟L8fR/&?uɄZѿR˿V?)4oYM-tߣpƲԶoaz(,)I3}@)LJ1؏GI=ƕbwġ7<?>]Uw/.i_wZ,Z!03@?LwϮLx ^+/JMiOե_aĠʩ7&>lۨ}ak;7³jS崝G7ۇ]ߓ(SiQ}|_TgE<}D,]zXߋkնXiz` mz>+yӴ7ls=9]Ooq,1S.;Dz*O''wdV?A? m?~'*mN:͛sFBzU-s*>,/Ϳc'r%^:CF%GT?5{+rϻxYJ+>*#WkV܍g}w#cZ#?5NUW5ov͚xkl6(DzrĪ=26m_+g꛺_}z2%clgū<8=%:<\)'>ǧ>cSXKMׯmc)ی:H9n.;U}XOFW,U_X=}hLU7'q`;go}bl,WU]AR󄯪>| s%N@QIESg,@ }IM ߂XthbKKlG<+ 3Jʽ1H>PΛN=;m v]VnR)o;3'w'?i{#2g}}ՄJog{퀹%vs6#}xS*bcf{OQ7cSgq'c5kQ1=jgӳaS1RkC\|m6J±=ۧ.1q'K):S_B{6WmtivKu6;kL -}?kU⃪C+ ]' /ʲNⷉ.ɶRRS4uk wIzbϳ8c2g᳀Q)1.ġK#X#lg[iXrHwr.Gmqx#}klo }vOLt%m-g:QOktmMsPޗGSeeu}R>=ao|:v|sSA?ᖡ1f_˕VW]skh6W>:3zc2m|0uS~NoJԹφT}-~Rp̏3oTf;Yge oş_uQmx)sFqaL|&Gr:. zb0]%J/EJϔ+T Wh?`uXYv׳J/_3 Z˯ʴyo@3z6J mwLۻFnbk5>N%CGk̔G>=2s6kbז~P?9(n?3[sġOOas>sq{~=l.NO?¦ptY/W~iϔol.եZ#ǧ3<4e󦶓ٮpUWg[i0cZTg?;U^k& T IJ*g*)vԾh?8*nh]@vB+f[(m}Tp %Jm<_?+vZ 'L>FiJՅ^iwET/Eg%թcJiv?f3z!C|vlQ{x7]j.&s~m%k\b;jsoϦ= |)xKXjqnij-Om9v_"ld\:JٮqS:Uڶ|y<#[X2|f٤~8U,xզSN~-{~Kcmr|Wz̿>I>wIEyL@7+dnT\M+o2o>=̺MK Rů-گǣ쒅1Jo6^+'_h?=Z%L<{y{7J¯]3=sO2y_ 9۫F u0Tyk˓sO9PZeb)=&WHZ~mQ%qF=<%&}9}ƭ|k<-d*[g:'6)Ke>1Z:&M~d_%rfx륎۪~؁!'~m p3Wjrl!t7uKx"ך~O, W[_nYOWl_[QA?~'Jx%L(U'֑d@d0JڤlG|O_vbus<2EW0`?3 sݹPBM.Tm?a/E_h &h}^gw'}MyJ3IfjBo|:-$t^=09>M{=ldotoaKF6Ɩ6(k|¶ʟTt#>%7qIX嫜vUL6q>}idJ+擺O`s q_ڢd_ll>mWmӦSu)W5rښ_ClKBNrNMOĦ8v? 5~&ƿڊ>+}{ot@gU1ײy+%L_Q'`x1or`дip =j/;UXKq8dxM:PwusOh?_ig&$l!KChX+.ǥ6J#GۯIk=n4'!lw'Rݔmƨvk5b8W]ּۑ}c<ߨz,UHm36bd[5Sȵ_7vl}x|(o<'T/oL5Vo)1[۷mVlNζͲf<ӯAWb'X`y 30 Z#6}o@g"SsTN$WL9_'P*QsЊwβLv6`4mcZn+=<+g :NsP qHy z s8 6LhdQ/I´B} u?zBٟ_UoUz_ݖoH'ꪽj~ct4m_}ʣ#mXyFSq<ӑ>5OIGx'Pb-C)mc=%?D7uIw{` ˝*kgǺJя0t6*oOeSY/qȶ} m$q#0p'U~'+ ?0 ZL9Keu 譾,QO¨qS= `ٔ3i`-w=B l}Pbs>m$匍}-OyML m:ws{Wxʝ%Gwi87a7-͟kPNldz&,?Fv;ufw_~SSU#}ŧ䵱loZc6OU؎bS!1jKڞSR~ʶ|ln:Rl{dc]R!OTq[/)ƗRij?vV9}PbgY#֔8b&V+;c~9Q9LFµ{V̀(_~Y}&M'Mb9z(.ɃUvlggJѻJ7rz} AK= B^*o'Օ`ğG~I->"^x^_mZZ9@zYR6_}!01Oا';&vFzاc:}e>i/Vb=I>4yۏ(M7g}P}L w%yw9E7ES~W!n[) fq2ņFPbB ggZ=&ۍ^< xgn+WRU|^^^g˥Cy~ʕ?S+;IV__\;s3[lv=,mFRi7;7~-?ژk9~Nm?mOYnگ[c:5ѯc2g%\̥1⠧_t\U&uG~?|B)x}2Euh:,%0BSb%&(5ٶcЌ ߓf/.aCg=1dI ֣`v oG,>3nNA]ג;ɿ&^je_*Me&tuW=C˚#w = .Om'NT $KWԾMɩvڦ~_/m7S1)6͵1X/K{xʜߜ>cMWyw N69i# X+f_>n۲u[9}*W\Զ}ycAGmnЇŵ4[ê7|-G_#m7Or )Ï~l9L|O# |LBɗI)x3͊>uӦmRhŢ>8g*oc+Bw&X]~P&~O2)p$w @gk;-$+=gOoX -ο&$_|ʏMa O3FmkJ^ҏMG_7Tydx$>鿴xJCʉs*Qkk3^zۘ~M_sD.|1y/_zm= /mL)Nb5X?3q4>F˞O≟*oRK6Sؘ7_ M7G3_$- RO@Պ1x=j}WLƦh)v8PFF}@л`NMxN}FC n Kn?wvws_J5`z֟&|JOO.?h7SmȐJū?]_-o1p~~ K?j@ ~L{͛V}nVqMGƞ׾-_$fϦesM~6SF=blGScFKPyM%mFmu0oY_)鶜o^,cIX_j}(ƥǒ +yScI56_K}o쓷1ӑM~; gq\ǜKG:,_bLGv[- o/ Rn,I'ZB(3+|R!7aU*76ESB[0kg< `x2g1vM忭خxWIyޟʝkZ"Zwig\wO.߽pd?Dr >>XbWiZFTךq3yӞM)6K)f%klm;sۦ#}_-}w81MlҍbMTݔiR䂥z}?ۿ+c[)'-G5Q>g4# J'cx*nk%rڌx.1_?T?tϚX٧5~]|gM%|Y+ ӵa_coU%WrOԍ䴁.#Z[!9&=NK!6`C~ C׻;}r!u?G=}bKxb]OcRcKv8F:.1@kr?l"c:Yu('X(43$?:z?%U_腾4YDVp]`zd&oFTQҍ'lG9#bs=}˸]M:km\ @GGGz`c?L?I?alm6SY y?ngO=_>/μ="U9uMV%rÖaCI)O݇^{=lԷ}UkcN?~զi;Zy71m}1oJ[Yio|_"o)8| ~;5cL 0v\֘&o&]qIBloO=?c6?ݖ=|)%}'a+$z?&RWJ^z|t{}E??LkUݜ-a*k[μ)ۦ'1x#%%oZOͧǰq('*bR|։ N,j_wwuÇ,gz&_"$QL'F56?Vϯ8iSusrszڢ]SgsN=bG6x#_/%mSNƓ&o_cMb~GIn1#)I9,Gk>b 7;)n[S2g[o~#WN6xpD%Uf];pA^ۮGsMsXQ|ոẋ֋ؚOߏߔgȜ- O|Zkµx^w%^KJYsHJ?\3WLldQ5ҶSya@IDAT=Ɵ{1zXcӑ>fʧ|s~O9~Nq+_Ě%UN݈>k}]vڌ6>GEF|&6[/ygm:v-MIl;NLL?tDslIw $BT$dn*dxwfw2ԑ(\JͿ!Ft:[-y 56܂eҗm ƟQ> 4s_?C=:1Ŀ B&.+>Ck\ҳ{/ {pS%׬taH&Y<::=As$O1 \t$އ8q <7;R:>#?/ ~/*KwZ::g{CKko ws3ܿG ܼlk3{Wu-=Xl Hk{Ȝ ['\WCxeO$|t37TqWb{ɖujum CzU(d 1+L|3 |ĺ^gxc/FnkkK_>==,pCf]ϡ:7 2Hj`<'> 9Oш_7vosx_58 O$_?W(N-ݷw X !]rإ-yőYpɜ+l;˱߳.k3 q2j qٮb|l UcĬkw}-?#lEVac>/=Kkv%k)ߍ.n[ϣpŧ!L_+N>—. vzƞpfXۚ s`ܕ?r(Fߓxfǻ%v g %^I{8a`5őu/K⫦?eͿf{$?}ǧw ׫w5}]_|ޘ >#77?|zί`/kK-ke9}e۹ksטl}wW!y-kY1;g.j}rIwU֚-{Ks+'f9y.y{# 魏p. :1ѷ_]R%kXrOx.ѫSF3| dRc.9|ϥ\@C-CHqw4_Hc|U>—9˻dgI.|Gdt]1`L;rS?~a+{=?Wzq`>ܮ/ ?`pq§)Oq?B):Pc]K9/-9oemd[>ə==qݳƥ\G_9m 9l各=+=*[q.}j4:Q~\N,6ӛ~r皓/nc+X8V n\.>6lS+ 5ܙ_cu:cƭ /tCᾎe{m?k~1mI…l'_LϾkؗ Ƈ|fk',3OK?0990^v BkR|+ )1tc| kvuxk1.I>oQś r#*'w_"i4I2)Q15ɶ|lqry{q4#\AqaOy\7wLx]_gIiO_w>}_|T ?޿ ys>7'J^K:z6k{{ڏ5?]zhn޷?9R}-n]{l'yvߚ>ٞ9Ns{ᄑ-9+N5d#쓝רpaYۣ+pizV9c`j-l)'\qf~ǥ}>'%zI00~Ý uT/9#0lʜ'з w)|H&Us\%.c ï|Y:EOiw|?xË"-a8M/_ǧ7?{~T߀׭%Lda߳\ێkCǦ%u|/̶s5?˶K|<L'}{l.ypsur+V~H',ӟt-.mCtn[lÕO:8JWk).KzMXc\s$/ 9;*F>=*'-,0.妑_[w:z[[dALoIǷuR~qapwtx+ pxԚeۧ^`)hܼ{Ͽ?O~j;G]Z7um οyK;&LV1.ɳ~u|-K>|,-Ξ:{.z3};=.}پ$,ix spΕ&|϶xHם'FC1ؕX_,+N-kO6'.!:֓:%.cɖ/K)ҳT&_)\R1ҏƭ [%Dx| `HGjd] s`tdc,`?HXS1_re)k q ӧqO4OOo5aM|0P3Op71Wƕ'(N%+L\sZ*\6sk|uqEKYlWlrp_3s5}9qKKx[cXGLϼ5[y*Kkq ]C*Gs'RˮNJ^3ɯF$>u. .ݥQΙ$N>$t%&=KqH8=6TOl(cl KSĩ<qc*]LG%]e__a'ṅ<7흣'.gٛX&&o؋aLeqC|x?n_ܛ &sHI;-1Ky1LÝ{rw-i  sk~_ot,،-\q$eޚ3}_#N#Ϙۮq_5};Õoናt^g+ l< @*^kUZp1":d?*[҉>$[ˋJ,>\o˓%4r :O'/&y#+c*=NJS¶Hd{iP??²!xHp$q>]/{&,rr'i{Jx6w&nwgG|rq?sF'!${.~|s!fIƌٗ(R\[q<5f}}=cy ܥ=|}g~gq%okX|/ + PL&gq08jd[G7lIq-:О{]5Z &\Ul/C$'fJII6q|+r6Fu 9v~/Ǻ?ǧ4qZ@\7$r)F[w͹\cܙ=Kq_\߻[s~ޒKIٿfK*,Ob)cogkʦ Mez$n_ U\WͿꯔ0Iʶ}Kr"%Ya79|dۣ [Kpr/apزk`>v]gh/~/>>W|xO_<{Rٙs=?skH;CK%I.Wk9{cOܷcFg9/8t G}3ܿG=pF^.=8O{][me{6+)lA2K/]ofgG6o sui~19Oe&ytIetoq +1g_C 6:Iw<ƺ_T$|HsL5LHԮRC:1H~T~s^5+9sCȌ{Mw~ȇgJkj \w5ݳ=u /c>_^g5~9-ٲfũ0_/g>ǥD&tc[NTwU5Ǜ [&7|-q…9?tIp+[| 6Z*]ؙE[^}5ijIҗКK~RJzJWbKrґ1=Jj(`絗~d+qyd.tq%U7WMס..R^k8*,qʱ*\?Ntێk~q`x|ݷEklڞk]ح>U:pZS~lە.,{7䔤T-R!m9uaZkoŹ.[$|g|QIŵ {*C}K4m +4t=Gk)N%\>P,ǯO:R,/ ?uD[䀯n3]y[|H8&1C 0gjtu{HPky]fɗs]c\rYcu:c]ǒwI5r9Əeǜ{sJGyl+ p(N+ . A%{-ҿх+ƥ%)~&!%z>K*G{@>dj9y +W; 5&_lp7~C5KR;~&׸+'6>61 H.R\A>1{GSI媤ǨV9.lL'l.\aw=:3ŕt^RV5?đt}kVkkVR={wMgx3]~qt=+^Ӊ[&+]eG̒W~uu,d˺l'U]σ[Or@})%įxegLy~;+beKR5HM5Ha3aBGjήO>F܇!\$9.3mb|ӚgsHK>\*{KCrJVު\Ϲ*~ו۱9=q%#c%3+lܙ[c9*–{U]J` q$+-ϒ1k7_ ڏU^$7]r X_cKzauhta3-q]b I<d Ҽe6fJ:^36_/=^|$9N4O;p ERS& 7|u0<4yZ%d)$~Viv脋wr)OZ,Gjmq \*/\?&t<~}oK>~혥|w {-ұnU]w:cɿ;D/ǯ忶T~a d7eۇ8~{sh+8@oN Qqz7Ӊt*Xĭzrr^YqW<ّ0‘²>xP-|v]~ZGO֤>>MݔCu U'IF6._kU<.8OG]K lO'}k.]'^ӞEnuk{rsl(|~:5[sKI5DfeokƂOF+]V`cZ=<>vp[$<=n{ث'{*}>){N?ՠY_j ‘˶϶xY36F{t^~)ވAw1\?xsW]M qmcN÷!]j/aw)s C.K.%_7.nɗsgbf~klٻ̹y]_-:k%6u\Sk fҗ|،m*ң+T:y'7BtI7$=LA{}?A[M):bKT[1-R{(4մ{#^Wb69.OC`|H%I']1G?kWc_W}*wU!L'~Ɲޞ1v}wlbey_޲^Ζ8T9^l7s&dk3InY7ޣ<~+IZAu}\n* 7/ 8O_STRzC67Ý^*,)cO^q׵I:]C';+)Q Kayi\\>>u(YBוt땿j |(Nޢ-Uɹ}5:#@xdOv??p'ǂ\=dé|`>k东K$M:w]xCm+>j(W[/]|?ФgY9w;<3p#|פYzKWqϘK^%Ɩ=lm5ͤu}9mt['=˜C~Džet ]϶|șN Cuxtl^.EZ t '8@6O]3Gx˭]!ǿ "U9 Sљm1ŝD^+Jq5{+x3/5/)K2ʟ%91䓼KXp;ynW0I$+9o_7rUrz^ů0$o s}>gkθ3~Ƴ}|f8?ۗxN׉-ߚ$8 [ڛf=k9C wuUX_r `Pӝ vxS>]UO|{Ozǡd9[K1+1"8aHi}It+?cHE-^UlVUS>d56>[mIIg>pcƛኟWTjo?ŝIg+V=-\oѷGrK^8,Xi]Ikw3ãsgLv%3F5,_c眲gKneWǮ%MjUvGW>螒ޟ _8FHMNsu UXY\Ɨl\k7=']zWI‘t@|='p|#[hme7f>pms58%_/L#l3]135y9fb?skf={s5󯭿ׯJV`Λa⸜9]9f[~}$ t {Yޗj̩_iwUˍޙh(1WXū=9ۥrVLZhR:1Ǟt|O>'>'+G]=TCQ}{շ!F{K]KY쥹ctͻf{w^=\k>r;+o8fc6}B[_3yn;oYvo o&=q8=u8Xǖt|5u>:c-'].c}IIVgXWyKw&[qX7:cW+ |'ɻ#r-rVduxŹ\µ&5n9u8Kd=۾=|ٿd+6sϾ5c+} o&}m.Nɗsgz,q8%{Kg-Z,㗬yIY$QCr\_񕝱c[ t]wU>]=wF ]H@gm9lf i"钞KX[eqg>%jTˮ@W+n*'ݧR+Ұ!R|Y৅R\O9S)ΕdIԉNgp,$f+ɒЫUaڇ$r~HTszlߟtI6{`lsV>f5ޚ3.\ϙ}{m<–';!:< tRy\/>p<ᷰJӲ+ t o̽=8@r w8Ss3>Gg8j8l钊U$VvēOrCx%36z3S=|wMn|5 I_sgl13]\IUsK:]cƟĹ]sUDZ'Y-X10` qֹ>+0Ɋߟ:-]@W໬@V.sUvꝍd@cK>QSa9FԂu.cF'lsIFܞ|ved<=>߇SawM_ ̝*”]y:/n| 烹-]rKLQ,˾*_ũxX>Ip҅e鱕nœ‡OFW+ |~ʻ'w=٦ ^8kZ`4x|='cs_KFf;.z^goМ*=KwlIϾ-GӼqnW^Lkʥ\s]5]z,<sL8w-|ZUaSNKzv*ܱ%_ʽϼaw_@W++'4F hX2x=HG%5, _ݛuNM|j%Zyʍz@g5^d\qy}9\[br̰=8eX[[IϿw\׵O\__ʽKǢ3OI.\ίbo]O{@. 8a:6ùd+ tQ> Fo*?<'s-PCw_u7kꉛr[bp7I5j}=PN~pc*OGgHcƲ=Yg^e׬l% .)L62ʓc}8>YJߋGޕ3]%gb\θ%g1s߶E5Aj/gHbvOF+]@W+ {* liX!2輻&~%%.Ids s]59"&?>gzU5l-~uuu a[tq% Q~ t]CVO\W=CgT q#:=kr-xtպW=UeW+ t} ~Żq5J&6#ʅ0xjѕϱ55|b}ll[ .fY%G.t-:9DZA ˲ '痭κKS<@ x 0ˣpҙy3X8v kRKO9f[_K|[Ǹ.N-Uw^茯;~x=Ϙۮ_g>pfz- _U`gX7*Kˮ@W+ | W~,O4ngȻ/"gLҲt> 2&knKǏƕOe3WpWt:q!+}RœC]W^I|s Вp9w X9^Rs\x#KKޅ9G_aKq1tr/[\{|yϲ%rn^}]콹ޕwKx9JӍUƺ]@W+u*'Nﲪ4kFM /Cg_ 39c(:aHs²[{rlhK9s*\~d&)>cY%lQ8)]~e._γW5:Wq#]d#uṳs%r/qo}:`lW:l*W'L*&K/}C>ӣ+ t?HD?}ֱ'pC I8ql `tɌakMI<2s W҅t=lcqY/\62c~rH:R3N(>J9m)>i.z^g%L8uq*L>ɊX*Z^`]kb:%Y&'#wR?]@W+*'ͧwoBҰSjC~"w 5}f</)cdGʍ-eO$Ҩt03I.)|7[[Z~O2p ^Z7sݮ%L,}q[aI:gkʮ0ϱEߓ#s=os<¤K浲qؒ?U臮@W+ xsn!7BO^Ͳޅ/HE[µv SNs[9s.g҅-c-aZ[SpCRb-w_Vc-k#_򯲶 t]W>=ӿo1Ǚ3_ '5 Ot#s(^$|Yuta3qv,ٗgR%I -!Hp,|ʑm}d˾%}.,K\ < sIϾھfεsx3-8w ǣkSsnG|7*cˮ@W+ N1`|_gih?O-w[m}3z)N=;!lNօ)c29#gC]*y~x G Or,Ũ?J9!ْmږ0䈛H2G82Ӯ֫0!l$!]\㈇d0VRq Ϛ; 8.W|08Vx#ר0|׍Ӳ+ t?v77` y|-@_ vi{ ql$q =+H<%]~IK:>ŭێKrW|x a(L1[syloH*aGGqc5lx-]㓞/s+1וw s]߶#k1̺ltqgr-K9UC1zW+ tTO|O"5h?_ zwLv;3V <W-R9u13q.]g laZSXƝ}+ -R'$_x<7Neq<.[89|,Zg+5]~I֒.Ya銿/mS{v?C֤Ǹ8Dze߰/`W+ t} d Q54<4,PW䁤eDgtIa:cCC*$|W9-u{Ms[;ubFgdL|>bGMiC\[/l*}/&שƚ'8Un]Fua>=1Mz7*}ˮ@W+ t}+|w?ECq> |eb> ' 2ޱSWv`jW|ǚgM8+_83 O>tFcާk:~q\Jguq\jWky>ݖ BzDQ؟1J!iTcLtf;D3jNM4r4 h p ׅܸg{-o+]KvګO~<ntXhsȧpd>#ƀ -0l8g;]WI\+}/&~%0N=55lK^NΛmWGq wO)I@W+ tFרuפG HOO=Ѵ3CT{#y{l0p!,ڐG@0 ؕ.L˱ɿԲ+ t]R>U~E `{4ȉ?B=&?F+$b&ty١?ztI\fx-1?Ťy5H舘4Ȓj$ZAC2ijʝ'L9ѳ4bWG5]~Kh Gf__E‹8B'?jN1.)!ʐbs{55?yp2/OqȸrV seG\_k+ t]Y>5 =;=WocUY^ZQ ϘЙ8EKu[cg^`Ą%:>:ǘq9.]r O\+c3R,8/>gs񜷲dKbe#+l2 t]c@x @oFߦ^w|63. Sds#_ȍ :%o}wp.X1\?x4vZC>__KXZG2ݢټ`fWp" ǧ}7.'8mk`wX5f<ʿɇdp -5y=vb-]. =[nog@IDAT@W+ tY#{B.؎NU!1i5@nh~;qgwiސ4:zFpƖ&~ ufҟy)10. W̗1(@4.L7e5rg/|ʿch-YzyKk*Tl-gnU–]@W+ NFӏYQˣͻcC>!5CG(ޒT\ē Cr[$H~.Yqd_s4Ʌ?6'*/c-NcO\溽W&sۮin^ʺ۞w!EeW+ t?jӽ鉦IFgY8 ɐO: z.)}--|nK"eR/K:4S<xnBU|ht [rٓ7s^+ rαw86 tq,>KXUeW+ t?tE^q/iiiԥ:6z:>8HX@' k }#XH-}tIf> |1&/ 7Q|)ۯrٶۏ3 W_8<ג{r:utIWXdl _3c v} ⻔{@|$K_ t]@WG@^UΑ}m.~`8? t8?ܧp%gͿfK̵8or-}IV>IHs9}/ >ω>ӕ MN̒csK^縞%+,A2Ņ? 0%8Yz1c,FW+ t]}xŻF[jt`L55j%#9P0loyޣҗd[/+L|&_:)!+ԟ+a?I<[bps>b3^%[>I ]r gŃWxHFKؒr-6rnW @W+ t~ %to4H5ͼ|4t{23Y'/\5|| ;um\I=-O:RS,G9ĸ ONs%ty U%ؒ⌷lfߒ-$kK\A &?>&ϡt!4t^egL$]n˲4 t]@W Knw4j'W|WnIx&^~|{N0K9:]HAl0>|%d 52ɀj 13[f~[y#ngَWL$Cz/cK9SKQ~ t]@W+*'ӱdpc^.oB %ϡhO$':(H ,6S XK69.%q ⢯ ŋ%龬cϦ:%Fޥ'fvm7gx4z~~ %_ƥ|qxS4/H ->Ń~I \鬑9&]xYd˷$uY,Cj©t~pks?W?6oy|_˧ioas )0˭/ 5%>Kl/˜+%s}<3=sH P>Hfzy|]@W+ t}<l7H9 |fxx?E!7!_=&7 1>A@y[C 6 s|KƓ<:?i"߇W~ !Ť)< %D2i⅝HE|Lyb͡cWAef;rT#nKc蚬!>MᲳ,4\:_]?Cq|ߟ+Cx~9Y0d,[ vt8y')lIpIV۹. ɠ&z$ItqG7KĮ@W+ t}Q= \>S|}e"Y?q#||mS$8-Jb$<{ӏܖ$_v%ÏmH5d#t\'n >FmsĆlI.s)cߺ11:]/G'Γ.={t]@W+ xz䥑FgE{$cMo=g 1,Np񻂜0`APO]i3&\F%3Iw[z%]IllF?&K2WqxƧ/೥\GV9b[֩rm[Ku*JKlU[n)S@W+ t?^덼z;>}}\&:Wa92<@n򓂜 85s>6~& wurdk.lT.qe/I|%5ulͨI;ں\ '='7?J%[&=X5+8 gzݗy]׾x dLcMX t]@W+CVO|O{߻HFh?7{ ;? K$ >4k\ I"E̋|u9/":1ԩ ~mX6~-3h'^1ȥ0<2-KO䬋ï"խSO%9'?^ŧ7!#7{,g9ָ[p4| ~z݂/=q؁ݏ]@W+ t?Ttf67ѩ9o<|&}|&DNf11o#xLGL_әxwLJ6$>6:lέt0H?`aH 'K.e,j=br>>F|ϥ 3!CWwLR mIr+&VY%6=;urX9nfދ{~z`+Q=4x_R t]@W+UO|9 OG&ǧoJ g=&+hF 4C=D'͠8 C`+LJґK.5qKR]:hǯ9s>~ϧ'?30N [ˇ"_œښy ˜yq/ʇ OWYZv]@W+1+']o%gG?!p%|<'E#Gů5[?eMxZ)?_?sd|*]S^̑]IзL?ul5Y'&xnqhː u>!olā!lM¯8^a9TX&/#fmKA5}{kt$ t]@W+*'<P {縛{7 %|||8s'' 񝁼96@jYzӏOq{u > ձ }g]]uxУY/Of~\@_'>KL#>o'2n3 r8viXgkd|u2W/q-c]z t]@W+pݺ~vc5 3p5+ hiIFH?w_ޅZĚ}x/ G:!u0r0sADze%ݝ:J$ ԟo+>yc?dzz [-(Vr+Cq[1cZ7fd+ >e t]@W+}j}.o(1`HcɏafSL>|w??2c{4pl&[IG&_!4r<bO[3,('Wulu}v^g&h?$'|9n8:I[ ˸|[WSa;gs}Kb2ܱlo9'IS]@W+ t+'v0Ucq&[4\>.Ѭ =>l~ 9N[f'\:!yn?pla%_uvL:0~/lnǍ^q?d{׶fRG%8YnQ=\U b25UeW+ t] %j4 ޫ1D/|+߉&}M3'qtaӜ_"hh zCM鐄EX1MA`:vldesŷȨ&>s&zu@d;[a'yt:\%񳽰֒om/[eʵۚyW.7{/"5BGOq#C)擘y?=x'.:l3$]A^xPdpݹztu ''\2!ѹ~ `{ڶ: hbZc:@6Ah=IǏr ƒ$Ks<~ftseC>e|Ɖ y].ه})ؒޥُz C^1¥ԡ]@W+ tSz@NqF#r[yO7?ħ4.MM:П$_2alV? O'ٜN `IɁp:#㬩Q`kNQS !ğ+~+0_ 8هxxG3E|t=?GWWhjwI~~Y| 7!D@pO>juiCC2P'KΧne̿^ -dd {9u=z[*XF6?puK%ctӯJ t]@W+ =MWƆfr5#pjwڹ5&Հ|"@Jar/ | f\:JO!cO>=~<NcAIH!1:bF!9Gn3O%wϿkNFxaze{,mt]@W+ S='h04ld)s} U-,h~o;? <_Qz}^-&' ~ '' I钾i#iD1Y?\):ݟlkO?+l_x6N2Rlپ{yXʛ}Ժ^aߣ+ t]@W+*'Z/_xr b>:FN^{towڟ|F@4Mgy(i9QԆr#O'ͧo5Ö+FL~qt3 ƍ1OWDˈ ǐ.eֳƜakh߲]ʗq[X?e臮@W+ t]@x"jh*|&fos^i?E3wo.קͽOI2OqЉed옳iΚ~r2M7 ML.q?)dɇt]܌l)68CLXy[sә*؟ ]@W+ tP>E~%tT5}eW}x3X+NX4 yO]t7ѬdN ;pn HC!:,H򧦟ߧІ2F.NQ8Wp,B$8=X&|g>8<|UmL.got05*]˭za8f| ?D|y8¾,y2m2i.eW+ t]@W+'@n:d54}]WzE/4?}M'@(C'K'A~x>2{z|>k4' GihcL\6sO>7 ?CP0~=<'~@`~ R3\f} 羦WǨ|ã0k~q.|m0ƙOEǮ@W+ t]@xzjjPF҈!Yaz߀c `__I;9N|O3Gҳs'^Ɖ?eA%-^,cf;u.l:޵[yǤ')%>yd !\+ t]@W+X*'3q}|ٔR͉sguC9;\x‘|.W=?sca49k~|Z6{ 280:7WCO AdF>\;` l1w~g%V+zW+ t]@xOU7AA\*ovI 0`G /44U<5 ~]dX o_/Mg)my[[^d:.4[Pm? Ζ.]WlU9~{{yj}lJ}]!!!!OE Oq<0P4tAQ|yk|>] y`r5l//gys\~#O.9zmůܿo1ZmG6gGgm=lQ yZl':9_o8׳]?R.wSKq1!!!!E y>?zm4 LP>ʩ1I,[__0 w~1KM}co9 zeUʯE_#Xy KpQ߾}sQ:]>.]WϚqbHwV.ղ=OYL9kuy}Ѫ97!!!!!rʃT:*=[֞<԰oHOMs{ڣ>M|oqMrژzvMUߋlrR[ٮ})psv'9sdTzb]~ߪOA!!!!lrl0RJ'k̮rg}i%u~[[lYuL͞MItN:[Rly:tI׉ZWy֩5yDod@@@@<\'qߓ\ɚﱪי|upZϙKՓRA~josN'*Wl5ʽׯ}j߻&%B B B B BG@4:h7k{dNW/._y5}kL(;==ljgRcwrϧ8܋Gso}_}nw#?$OB B B B @.9~/dG`LÇ#W{8>`d7rnO{xޮfGGVrg8R.Nlu'Y_]|Fv'tuS--vաڵ[~;h!!!!M :"/k)֠r+axb=ԇ屪+fvͯ֡ڵVvV@@@@(Qjaηe2zqۋ]y395t1v ?R9{>ay~jOuy,ڻ_ŵ\y C ?糺tR +@lvIcb<}vbOGG{&-Hv:b{~G:^6F>yHeg@@@@& >{3xu6b'?r<:H8R~k&vEjO_HG.>==޳~?=7dV@@@@H] ݥt@MZKj#mIQc$-:J}Turϧ8_U1>N>d/Y!!!!?@.~'w 1T1d`^mUOt-bտ[pޏtw x]_|-#U~Dv9C={Ψ5;SKY!!!!!c ~twA& = &Or4=uyG7r8=Z뱑~Ez+vW3u6J>{#}G\o+@@@@`ţ3x=XZ`[cS-}Heߣu^8:R5ҵ,ߢ_W+#t|)9WQ]{;lO{!!!!?@.~'x 4 CtrIv>~y9ה]5<ɫR9\wk_;[đt|3'}fQ.Oz\]W~=F_ҳB B B B BW8ny|Uv?Gn|gj?g~&k>H1[}guT }$z^LqY]3ko\2W9 r+?֏oJ$!Iҏ]'.ygtޯj:wէz?-Ŵ7+5{:Q}Wc^ɟԼQ wOWur>SoHC3 `ᗘ|ZY^ՓvjIAW}8^OzKtH-~GWmصu>w|Y!!!!!RrRf5( F/ۋu֪9#ߚ|ԑNgKq-m{$quGLu>z)ǗĖ'.!!!!@.~ȩaLJR*5Hq% HU{l=rgJgT۝>)FzOq>$].!!!!@.~ڿ&2pihҰ?!)=?nt ~Vָ3w=}lbHաwr>q腬Hj8כ#2B B B B B7oT'K<401e5^wDWol/Y(ё$kOhU^q>k>1ItGY,潕7z|E1+B B B Bee>"`4/]KUw_͑L9R{|JuKu,rܧ=עtbҵULv=Ǐ輇[mGG7z;+B B B B ^@.^co`(e0_:Zu[>lyoו՝!}+G6xW#_q{O'.{˺ ݐ.xc%=$]u-KFkJn9UWNEѻܙO1.]]}} U*ȣZܬ@@@@  ~G2=* T~T+;u%fQ={F%.9}O=u'{\Wr]0eמl{Ǿ*7;;#K;*u'a+=+!/!!!!!W.Cp.-v i ~ZY_|-e:?z[R9WY1WG>H"OW==B B B B ^@.^5X1K2pIj8ϐư.E^ZT\E|ljk#gVw;:>].~#ו?Dd@@@@o4OC5`I=wZ!L*;g^#\a==ryoĐ5dy?N.>9]_|J!/!!!!!N xgmB{f5aj nՁ_q@3,ޗ⺟>ptinUg.K9O'K|s2G!!!! #X%${v}gx:S﫽Tj|zTVvwߞ~4NwaGuzXȟ!!!!!`r`0OWbwIꐪ\Cl7e+3Yutrmt=uWa#B B B B B@.PD9C]6|s?ÿ:nkc&kmztYO86tW:{cB B B B B 1Nɚ@vF4-I]ɿb,ZC힤IQGj=6Ua45{zu{ poʩqz,rpX[Vt7I=XuEK]*Wu-<<>՞^{q=(.?ݠO?~$!!!!!P0ݠ&=Fø-UW^ =gP{_G?w:龪W[DS/q)=+B B B B B\\]@+/&$O?8{z>L{CL=kGzCrp\>;-bͻ}@1rG!Iϯ:;GSg^{^5G>9F?NZ7!!!!! 4K2Q&ݥnK*̢ߙ{sy]s{t.g'ҵ+_B B B B B:\\gvuc{*KCu0]{u.O9%?S"C B B B B 9^>ImJIݣ< a/_svg].>s]9nkl/:c#ݏ?x0\<hX}+@;e~ MIDAT:7Z^F97˹gБ/[h_$g3";+B B B B Br`iO@]P![kF@ 3^ʡj]]^~l3^LqE=C?2B B B B B  iG þ@5hcTHWٗӉI.G>z@ q%B B B B B @.vz'0ww]W-=Y}Tg͸З*>]\=G졮"Yy 22iGmR@Z(Ru<1hwR>j9+O.qosDv9O{v~g:? rf@@@@@| '`hWueϧ{N|ZKW}VYe\ZT=œzz ‡f<#U8#:.~V/v~4SWwWkYrE+A9{"!$xbʧ3͖5}:r?,|?b@@@@@| |[0gG] 0VWϤbZng??+Uex^~69YO@éi}滗\yՃ #-ƏJu'gO^}vdg@@@@@<1\<񇓣 h@a+ZTnɧ>Kvft޳w!!!!!p@ Ep)3Б$.#_-qt\)/_xns>9ݘCy.[1}Wrf>K">?W=Q,Fordtr#C B B B B @NoP9ӟJΟ)2B B B B @.&}j=dXRgj{<!!!!!rQxB[?{F{ a3#|3X C ?A@sF𢡊wް~o9M~@@@@<yYN v.FS[0#45a!!!!!; w' =B B B B B B ~)\6o+B B B B B B  \yIENDB`ic11,PNG  IHDR szzsRGBDeXIfMM*i  bIDATX WKlTeL2LH t"6F0p$ĵ 74..ԅ Xb$j@[ڒN`wnΥ3t:-'=ws,..iCQ[,0pO{9ݐaPLOo^ٍP=47fyopSו!9 ONM/@sGGDW'@vBݐؽ{{b۶ӹ Ms75!lch.\Ѵ?gφ陥F(,VH{?p|[,ub\uTy<* x>SU>AXq#]Ǐ_Kz< Uz۴ vVU5Դ7qYE l?;BU;;z{{--q U^wQQܘzx0ʶzET uz΄ ТPB-hsYUU|j۳݈*!$=VTnRK}iɽ{.WIcO66b!(:Q4^} j]S!L͖͂ʕG +>v#_[ .ף KwP 0f|23qnJH` 26y΍.00#MEZ ==pMb x;/DjEN%ҌχӉ<ajMY|RY +ZZ67,u|ubZę P MrȦ>S&Ip/7<6kA) ۦ(7wҩԀ-ɡ&š`C$" b[.TUY0fH&"fc %oU0Dž pԂy,=IjNKS8 Hrm!@Zw ,t0^KиI- *%wR)ܘE*+׷VlL35TB Dז{8܋Jg%6 'p&Ѩ0{{Ԃ JB٤.,żӟYρ2R t&},z]#c KeW$FFnR]_״ %!XvagU/ V!(@ &biHm`_GC4Nz1烺7fn5F"%*psyl-1xll5:#8O;g> _(DRJJfM( d#pQ{__6;*,_*t:,!"M]&FFׯYn=-v!gFgssh[[TJSe1Y({Ƹ|?XȗkP]bcw'N'ӂgd2`xx$w396FwrXSZ6@&=!;LN0Щ(D06YSbplist00 X$versionY$archiverT$topX$objects_NSKeyedArchiver Troot U$null WNS.keysZNS.objectsV$classTname_assetcatalog-referenceTicon  !"Z$classnameX$classes\NSDictionary!#XNSObject$)27ILQS[ahp{$atomes_1.3.1/misc/win/0000775000175000017500000000000015212624223014235 5ustar lerouxlerouxatomes_1.3.1/misc/win/Windows_prep_deps.sh0000775000175000017500000000121115212624223020262 0ustar lerouxleroux#!/bin/bash function prepare_deps { mkdir $1 cp atomes.exe $1/ cp atomes_startup_testing.exe $1/ cp /mingw64/bin/gspawn-win64*exe $1/ liste_deps=`cat $2|wc -l` let ldeps=$liste_deps for ((num = 1 ; num <= ldeps ; num ++)) do dep=`tac $2|tail --lines=$num|tac|tail --lines=1|awk '{printf $3}'` cp $dep $1/ done } # Win10 ldd ./atomes | grep -v "Win" > no-win-deps.dat ldd ./atomes | grep "Win" > win-deps.dat # Win11 # ldd ./atomes | grep -v "WIN" > no-win-deps.dat # ldd ./atomes | grep "WIN" > win-deps.dat ldd ./atomes > deps.dat rm -rf bin bin-no-win prepare_deps bin deps.dat prepare_deps bin-no-win no-win-deps.dat atomes_1.3.1/misc/win/atomes.ico0000664000175000017500000017017615212624223016235 0ustar lerouxlerouxx| h(x      !$'))*)(%"  %).134441.+&" "(.37;>?@><94/)$ ")07=BFIKKJGC>82+% !)18@FLQTVVURNIB;4,%&/8@IPV[_aa`]XSLD;3+# #+5>H=@2ikkjgb\ULD;2)"&0:Rfpturj[6spke]ULB8/'   )@gx|nSwsle\SI@6.& "EmtYysldZPG=5,&   &jsOyrjaXOE<4-'"  \|jwph_VMD=5/*%"  nxR}vng^VMF?94/+(%"  Nxb{tmf^VPIC>:52.+)&$" Y}iztmg`YSNIEA=:741.+)&%"  ]kzuojd^YUPMIFB?<:741/,*(%#! Z}i|wrmhd`\YUROLIFC@=:852/-+(&#! Pxb~zvrnkgda^[XUROLIFDA>;8530.+(&$"   3oxT3333~{xuroligda^[XVSPMJGDA>;9631.+)&%"    _}k133333333}{yvtqnljgdb_\YVSQNKHEB?<:741/,*(%#!  "%'(((&$" :ltTvv333333333333}zyvtqomjheb`]ZWTQNKHFC@=:852/-+(&#!   %(,/12220.*&" Mov]qvv333333333333333}{ywtspnkhfc`^[XUROLIFDA>;8530.+(&$"!%).26:<=>=;84/)# Kjy}pYvv33333333333333333333}|zwvsqnkifda^[XVSPMJGDA>;9631.+)'%#" "#&*.38=ADGIIIFB=81+$ .Yirvwtm`Fvvvv33333333333333333333333~|zxvsqnljgdb_\YVSQNKHEB?<:742/-+*)))+-048=CGLPSUUSQMGA:2+#(@KMFTT vv vvvv333333333333333333333333333|zxvtqomjheb`]ZWTQNKHFC@=;87544458;>CIMSX[^``^[WQJB:1)  &333^^ ^^ S{TTvv vv vv vvvvvvvv333333333333333333333333333333}{ywtspnkhfc`^[XUROLIGDCA@@@ACFJOSY'4%ijjheaZRJA7.%%^^ ^^ ^^ ^^ fTTTTvv vv vv vvvvvvvv3333333333333333333333333333333333}|zwvsqnkifda^[XVSQOMLLLMORU<\iprpj]<qmhbYPF=2)  %^^ ^^ ^^ ^^ TT sTTTTvv vv vv vvvvvvvv33333333333333333333333333333333333333~|zxvsqnljgdb_][YXXXY[]Wo|~qYtnh_VLA6,# %^^ ^^ ^^ ^^ ^^ TTTTTTvvvv vv vv vvvvvvvv33333333333333333333333333333333333333333|zxvtqpmkigeddddf]vy`tmdZOD9.% &^^ ^^ ^^ ^^ ^^ ^^ TTTTTTvvvv vv vv vvvvvvvv33333333333333333333333333333333333333333333}{ywusqponnoVvyYpg\RF;0&333^^ ^^ ^^ ^^ ^^ ^^ TT TTTTvvvv vv vv vvvvvvvv3333333333333333333333333333333333333333333333333~}{zyxx:nq:g]RG;1&333^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTTTvvvv vv vv vvvvvvvv3333333333333333333333333333333333333333333333333333Y{~\g\RF;0&!^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTvvvvvv vv vv vvvvvvvv 3333333333333333333333333333333333333333333333333333333fjdZOD9.% "^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ VV TTXXvvvv vv vv vvvvvvss(33333333333333333333333333333333333333333333333333333vvvvvvp_VKA6," $^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ UUSSiivvvv vv vv vvvvvv||3333333333333333333333333333333333333333333333333333vv vvvvr,PF<2) &^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ZZ SSUUuuvv vv vv vv vvvvuu5333333333333333333333333333333333333333333333333vvvvvvvvpSJ@7.%333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __ WWTTllvvvv vv vv vvvvvvuu'3333333333333333333333333333333333333333333333vvvvvvvvvvvv iJB:1(   ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ]] TTXXxxvvvv vv vv vvvv63333333333333333333333333333333333333333333vvvvvvvvvvvv vv!|ZA:2*#"^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ZZ RRjjvvvv vv vv vv xx33333333333333333333333333333333333333333vvvvvvvvvvvv vv!vv"vv"o581+$ #^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ VVYYvvvvvv uu!yy-33333333333333333333333333333333333333vvvvvvvvvvvv vv!vv"vv"vv#vv#vV5/)# %^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ]] RRnnvvvv333333333333333333333333333333333331vvvvvvvvvvvv vv!vv"vv"vv#vv#vv#vv"vv"vv!vvvvvvvvv\1,&" 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __gg35333333333333333334,uuvvvvvvvv vv!vv"vv"vv#vv#vv#vv"vv"vv!vvvvvvvvvvvvy{mU,(# 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ dd*433333333333334,ttvvvvvvvv vv!vv"vv"vv#vv#vv#vv"vv!vv!vvvvvvvvvvvv3vv WelomfX3(#  ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ oo 333333333333-vvvvvv vv!vv"vv"vv#vv#vv#vv"vv!vv!vvvvvvvvvvvv333j`VL:2+%   "^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^"53333335% uu"vv"vv"vv#vv#vv#vv"vv!vv!vvvvvvvvvv333333dYOE;2+$ $^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ jj43334' {{vv#vv#vv"vv"vv!vv!vvvvvvvvvv33333333^SI>4+$ &^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^43-vv#vv"vv!vv vvvvvvvvvv333333333dYMC8.& 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ff ww!vv vvvvvvvvvv33333333333^SG=2)   ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ]]cchhvvvvvvvv333333333333dYMB7-$"^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aaggjjttvvvv33333333333333_TH=2( #^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^eeiillll~~ 333333333333333eZOC8-$ %^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^cchhkkmmooyy6333333333333333aUI>3) 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ffjjllnnppqq 433333333333333333[PD8.%333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ bbhhkkmmooqqrryy!1433333333333333333bVJ?4* !^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^eeiimmnnpprrrrtt633333333333333333333\QF:/% #^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __ffjjmmooqqrrsstt 4333333333333333333333cXL@5+" &^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aahhkknnooqqssssuutt 43333333333333333333333^RG;1&(^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ bbhhllnnppqqssttuuvv3333333333333333333333dYMA7," #333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ cciilloopprrssttuuvvvv3333333333333333333333_TH=2(&^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ cciilloopprrssttuuvvvv333333333333333333333eZOC7-# #+^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ cciilloopprrssttuuvvwwvv333333333333333333333aUI>3)  (1^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ cciilloopprrssttuuvvvvww333333333333333333333[PD8.% '.7^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ bbhhllnnppqqssttuuvvvvwwww33333333333333333333bVJ?4*  '.6333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aahhkknnooqqssssuuuuvvwwww33333333333333333333\QF:/%!(/6>^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ccbbffjjmmooqqrrssttuuvvvvwwyy3333333333333333333cXL@5+" ")/7?G^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __ddhhkkeeeeiimmnnpprrrrttuuuuvvwwvv3333333333333333333^RG;1&")08@HP^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ]] YY ZZ iikkmmnnooaahhkkmmooqqrrssttuuvvvvwwvv3333333333333333333dYMA7,"  (08@IQY^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ WW TTSSeemmoooopprreeffjjllnnppqqrrttttuuvvvvvv4333333333333333333_TH=2(&.7@IRZb^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ]] WW TTTTTTSSllppppqqqqqqmmcchhkkmmooqqqqssttttuuuuvvvv*333333333333333333eZOC7-# "+4>GQZb333^^ ^^ ^^ ^^ ^^ ^^ ^^ WW SSTTTTTTTTSSiiqqqqqqqqqqqqbbeeiillnnooqqqqssttttuuuuuu 4333333333333333333aUI>3) &/: LX\YTTTT^^ ^^ ^^ ^^ TTTTTTTTTTTTTTTTTT``qqqqqqqqppoonnbbggjjllnnooqqqqrrssttttuuxx33333333333333333333[PD8.% )3Ylv|}|TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUqqqqppoonnllkkcccchhjjmmnnooqqqqrrrrssssss"3333333333333333333bVJ?4*  "9fyTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTYYnnnnlljjggbb^^^^ddhhjjllnnooppqqrrrrssssss53333333333333333333\QF:/% +h~TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUeeffaa^^ ^^ ^^ ^^ ^^ddhhjjllmmnnooppqqqqqqrr43333333333333333333cXL@5+" _{|TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTXX \\ ^^ ^^ ^^ ^^ ^^ ^^ ^^ccggiikkllmmnnooooppppss433333333333333333333^RG;1& ArTTTTTTTTTTTTTTTTTTTTTTTTXX ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ]]aaffhhjjkkmmmmnnnnoonn"533333333333333333333dYMA7," [}TTTTTTTTTTTTTTTTTTYY ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ccffhhiijjkklllllloo4333333333333333333333_TH=2( fTTTTTTTTTTTTUUZZ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^^bbeeffhhhhiiiihh233333333333333333333eZOC7-# jTTTTTTTTVVZZ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^__aabbccccccbb'33333333333333333333aUI>3) jTTTTTTTT]] ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ 43333333333333333333[PD9.%eTTTTTTTT^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ cc3333333333333333333bVJ?4* Y|TTTTTT^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ 3333333333333333333\QF:/%:pTT^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ hh33333333333333333cXL@5+" \z}c@333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ccvv!vv!vv vvvvvv33333333333333333^SG;1&e|~j<421^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ kkvvvvvv vv!vv vvvvvv3333333333333333dYMB7,# bwygA+)(&%$^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ggvvvvvv vv!vv!vvvvvvvv333333333333333_TI=2(Rhsy{ztkX"! 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTvvvvvv!vv!vv vvvvvv33333333333333f[OC8.$ @PURE 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTvvvvvv vv!vv vvvvvv33333333333333aVJ>4)   333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTvvvv vv!vv!vvvvvvvv3333333333333]QF:/% ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TT TTvvvvvv vv!vv vvvvvv333333333333dXLA5+"  ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTvvvv vv!vv vvvvvv333333333333_SH<1'333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTvvvv vv!vv!vv vvvvvv3333333333g[PD8.# 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TT TTTTvvvv vv!vv vvvvvv3333333333cXL@5*!333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTvvvv vv!vv vvvvvv333333333kaUI=2( ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTTTvv vv!vv!vv vvvvvv33333333j^RF;/% ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TT TTTTvvvv vv!vv vvvvvv33333333h]QE9.$ 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTTTvv vv!vv vvvvvvvv333333qg\PD8.$ 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTTTvv vv!vv!vv vvvvvv333333rh\QE9.% 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TT TTTTTTvv vv!vv vv33333{si^RF;/& 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTTTvv vv!vv xvv 3333|tk`UI=2( ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTTTTT vv!vv333~vmbXL@5+! 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTvvv m333ype[OC8-# 333^^ ^^ ^^ ^^ ^^ ^^ ^^ hT^b`YH{si^SG;0& 333^^ ^^ ^^ ^^ ^^ R^ox~{sfL}ukaVJ>3( 333^^ ^^ ^^ ^^ Gi{qX~wncXL@5+! ^^ ^^ AktWxoeZNB7,"  "+d}pDoeZOC7,# Nt~andYNC7," a~o2bXLA5+" jwL^TI>3) -ozTYOD:0&.o{TRI?5,# kxMJB90'bp4B:2*" Pvc@92+#frG50*# EnwZ1,(" Lm~u\*'# >cs}xjQ#!CZcge^N  ????????????atomes_1.3.1/misc/win/atomes-latest-win.iss0000664000175000017500000003507715212624223020346 0ustar lerouxleroux; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! [Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) AppId=4DA2F2FC-AD2D-414A-8197-0DD52F1593D2 AppName=atomes AppVerName=atomes 1.3.1 AppPublisher=CNRS AppPublisherURL=https://atomes.ipcms.fr/ AppSupportURL=https://atomes.ipcms.fr/ AppUpdatesURL=https://atomes.ipcms.fr/ DefaultDirName={autopf}\atomes DisableDirPage=yes DefaultGroupName=atomes LicenseFile=COPYING OutputDir=Setup OutputBaseFilename=atomes-latest-setup SetupIconFile=setup.ico UninstallDisplayIcon=setup.ico Compression=lzma2 SolidCompression=yes ChangesAssociations=yes ; "ArchitecturesAllowed=x64" specifies that Setup cannot run on ; anything but x64. ArchitecturesAllowed=x64 ; "ArchitecturesInstallIn64BitMode=x64" requests that the install be ; done in "64-bit mode" on x64, meaning it should use the native ; 64-bit Program Files directory and the 64-bit view of the registry. ArchitecturesInstallIn64BitMode=x64 WizardStyle=modern [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" [Code] var maj : Integer; min : Integer; patch : Integer; version : String; key : String; function InitializeSetup(): Boolean; begin Result := TRUE; maj := 1; min := 1; patch := 0; while (maj <= 1) do begin while (min <= 3) do begin while (patch <= 18) do begin version := IntToStr(maj) + '.' + IntToStr(min) + '.' + IntToStr(patch); key := 'Software\IPCMS\ATOMES\' + version; if RegValueExists(HKEY_LOCAL_MACHINE, key, 'Version') then begin MsgBox(Format('An older version of atomes has been detected on your computer: %s'#13#13'Please uninstall this previous version before installing any other', [version]), mbConfirmation, MB_OK); Result := FALSE; end; patch := patch + 1; end; min := min + 1; end; maj := maj + 1; end; end; [Registry] Root: HKLM; Subkey: "Software\IPCMS\ATOMES"; Flags: uninsdeletekeyifempty Root: HKLM; Subkey: "Software\IPCMS\ATOMES\1.3.1"; Flags: uninsdeletekey Root: HKLM; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Path"; ValueData: "{app}"; Flags: uninsdeletekey Root: HKLM; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Version"; ValueData: "1.3.1"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES"; Flags: uninsdeletekeyifempty Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Path"; ValueData: "{app}"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Version"; ValueData: "1.3.1"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Name"; ValueData: "atomes"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Company"; ValueData: "Institut de Physique et Chimie des Matériaux de Strasbourg"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.awf\OpenWithProgids"; ValueType: string; ValueName: "atomesWorkspaceFile.awf"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesWorkspaceFile.awf"; ValueType: string; ValueName: ""; ValueData: "atomes Workspace File"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesWorkspaceFile.awf\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-workspace.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesWorkspaceFile.awf\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".awf"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.apf\OpenWithProgids"; ValueType: string; ValueName: "atomesProjectFile.apf"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesProjectFile.awf"; ValueType: string; ValueName: ""; ValueData: "atomes Project File"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesProjectFile.apf\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-project.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesProjectFile.apf\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".apf"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.xyz\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-XYZ"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-XYZ"; ValueType: string; ValueName: ""; ValueData: "XYZ Atomic Coordinates"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-XYZ\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-XYZ\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".xyz"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.pdb\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-PDB"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-PDB"; ValueType: string; ValueName: ""; ValueData: "PDB Atomic Coordinates"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-PDB\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-PDB\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".pdb"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.ent\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-ENT"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-ENT"; ValueType: string; ValueName: ""; ValueData: "ENT Atomic Coordinates"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-ENT\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-ENT\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".ent"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.cif\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-CIF"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-CIF"; ValueType: string; ValueName: ""; ValueData: "CIF crystallographic information"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-CIF\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-CIF\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".cif"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.trj\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-TRJ"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-TRJ"; ValueType: string; ValueName: ""; ValueData: "CPMD trajectory"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-TRJ\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-TRJ\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".trj"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.xdatcar\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-VAS"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-VAS"; ValueType: string; ValueName: ""; ValueData: "VASP trajectory"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-VAS\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-VAS\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".xdatcar"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.c3d\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-C3D"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-C3D"; ValueType: string; ValueName: ""; ValueData: "Chem3D Atomic Coordinates"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-C3D\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-C3D\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".c3d"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.hist\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-HIST"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-HIST"; ValueType: string; ValueName: ""; ValueData: "DL-POLY History File"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-HIST\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-HIST\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".hist"; ValueData: ""; Flags: uninsdeletekey Root: HKLM; SubKey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment\"; ValueType: string; ValueName: "Path"; ValueData: "{reg:HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\,Path};{app}" [Code] procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); var Path, AppDir: string; Index: Integer; begin if CurUninstallStep = usUninstall then begin if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment\', 'Path', Path) then begin AppDir := ExpandConstant('{app}'); Index := Pos(AppDir, Path); Delete(Path, Index-1, Length(AppDir)+1); RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment\', 'Path', Path); end; end; end; [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Components: main; Flags: unchecked ; Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Components: main; Flags: unchecked [Files] Source: "atomes\pixmaps\*"; DestDir: "{app}\pixmaps\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\library\*"; DestDir: "{app}\library"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\bin\*"; DestDir: "{app}\bin\"; Components: main; Flags: ignoreversion Source: "atomes\etc\*"; DestDir: "{app}\etc\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\lib\*"; DestDir: "{app}\lib\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\share\*"; DestDir: "{app}\share\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\var\*"; DestDir: "{app}\var\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\locale\*"; DestDir: "{app}\locale\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "setup.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "atomes-workspace.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "atomes-project.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "atomes-coordinates.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "COPYING"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "ChangeLog"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "gtk-sources\*"; DestDir: "{app}\gtk-sources\"; Components: main; Flags: ignoreversion ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] Name: "{group}\atomes"; Filename: "{app}\bin\atomes.exe"; WorkingDir: "{app}"; IconFilename: "{app}\atomes.ico"; Components: main Name: "{group}\{cm:ProgramOnTheWeb,atomes}"; Filename: "https://atomes.ipcms.fr/"; Components: main; Name: "{group}\{cm:UninstallProgram,atomes}"; Filename: "{uninstallexe}"; IconFilename: "{app}\atomes.ico"; Components: main; Name: "{commondesktop}\atomes"; Filename: "{app}\bin\atomes.exe"; Tasks: desktopicon; WorkingDir: "{app}"; IconFilename: "{app}\atomes.ico"; Components: main ; Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Atomes"; Filename: "{app}\bin\atomes.exe"; WorkingDir: "{app}"; Tasks: quicklaunchicon; IconFilename: "{app}\atomes.ico"; Components: main [Components] Name: "main"; Description: "atomes"; Types: full compact custom [Run] Filename: "{app}\bin\atomes.exe"; Description: "{cm:LaunchProgram,Atomes}"; Flags: nowait postinstall skipifsilent atomes_1.3.1/misc/win/atomes.rc.in0000664000175000017500000000266515212624223016471 0ustar lerouxleroux/* This file is part of Atomes. Atomes is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Atomes 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 Affero General Public License along with Atomes. If not, see */ #include ATOMES_ICON ICON "../misc/win/atomes.ico" VS_VERSION_INFO VERSIONINFO FILEVERSION @ATOMES_MAJOR_VERSION@,@ATOMES_MINOR_VERSION@,@ATOMES_PATCH_VERSION@ PRODUCTVERSION @ATOMES_MAJOR_VERSION@,@ATOMES_MINOR_VERSION@,@ATOMES_PATCH_VERSION@ FILEOS VOS_NT FILETYPE VFT_APP BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "@PACKAGE@" VALUE "CompanyName", "CNRS - IPCMS - DMO" VALUE "FileDescription", "@PACKAGE_STRING@" VALUE "FileVersion", "@PACKAGE_VERSION@" VALUE "LegalCopyright", "\251 2026 S\351bastien Le Roux" VALUE "OriginalFileName", "@PACKAGE@.exe" VALUE "ProductName", "@PACKAGE_STRING@" VALUE "ProductVersion", "@PACKAGE_VERSION@" :x END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x0409, 1200 END END atomes_1.3.1/misc/win/atomes-workspace.ico0000664000175000017500000020407615212624223020226 0ustar lerouxleroux ((     #&())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(&"  '19?BCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCB>91' )8GSZ_abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba_YRF8) $6J]mw}}vk]J6$  ,BA+ 2KK26QP6 8TT7  :VU9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :Wtt|}00mV9  :W00s""wV9  :W||--fV9  :W22t""yV9  :W55y""|V9  :W>>p!!o{V9  :W~BBP23=CV9  :W{{|y-33333=CV9  :Wmmdp++f== xx(233333333:=gV9  :W[[22[==dmm(tt-vv 333333333333:=g11ecc~V9  :Wrr|}//l^^ ZZJJ=ffvv vvww,3333333333333333=C((wbbV9  :W//s""w{{j^^ ^^ YYVVttvv vvzz23333333333333333333=C~%%vdd~V9  :Wzz,,e\\0^^ ^^ ^^ WWggvv vv vv 23333333333333333333333:=ezzq %%xV9  :W22s""ybb%^^ ^^ ^^ \\ WWrrvv vvvv*3333333333333333333333333,uu(<<V9  :W44x""{``^^ ^^ ^^ ^^ YYddvvvv vv}}03333333333333333333333, wwUUv((V9  :W==p ovV^^ ^^ ^^ ^^ ^^ ]] XXrrvv vv33333333333333333333, wwvvtt155oV9  :W~BBP0"^^ ^^ ^^ ^^ ^^ ^^ \\ ffww)22222233333333332, wwvvvv!vv"uu,WW}UU{SSt ++{V9  :Wyy|y+VV#^^ ^^ ^^ ^^ ^^ ^^ ^^ dd %03333332, wwvvvv!vv"vv#vv"vv vvzz.,,t~++~88oV9  :Wlldp++f== qq%aa^^ ^^ ^^ ^^ ^^ ^^ ^^ __ zz'3332({{vv!vv"vv#vv"vv ww"&2zV9  :W[[22[==dmm(rr,mm`` ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ dd2* ww"vv!vv ww"-338V9  :Wqq|}..l^^ ZZJJ=ffssaa ]] ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ``yy {{ww"-3333[V9  :W..r!!w{{i^^ ^^ YYVVppgg^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^eeoo-333334V9  :Wxx++e\\/^^ ^^ ^^ WWbb[[^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ bbjjoo&33333336V9  :W11s!!ybb%^^ ^^ ^^ [[ RRWW^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ffmmppvv(233333333}}RV9  :W33x!!{``^^ ^^ ^^ \\ TT ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __iinnrrtt2333333333:44fV9  :W<]]//XyzYYwO3 :W!!i]]xI.  :WxA)  :Wtt7! :Wyy___i+  :Wzfff}2   :W99vqqhhh7$  :W99tttppp<'  :W}}}}}}}}}}}}~~~nnn@+ :W~~~{{{yyywwwwwwvvvwwwxxxzzz|||~~~oooC- :WrrrF. :WwwwG/ :WzzzI0 :WJ1 :WL3 :WM4  :WN5   :WO5!  :WP6!  :WQ6!  :WQ6"  :WQ8#  :WR8$  :WR7$  :WS8#  :WS9#  :WR9$  :VU9$  8TT9$ 6QT9% 2K U9%  ,BU9%  $6R7% )$$$M2#  gggC^^^LVVVSPPPYNNN[NNN\MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]NNN\NNN[MMMYPPPV7*  #&())))))))))))))))))))))))))))))))))))))))))))))))('#    ????atomes_1.3.1/misc/win/atomes-coordinates.ico0000664000175000017500000020407615212624223020542 0ustar lerouxleroux ((     #&())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(&"  '19?BCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCB>91' )8GSZ_abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba_YRF8) $6J]mw}}vk]J6$  ,BA+ 2KK26QP6 8TT7  :VU9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WVVV+++III JJJ ***###***  {{{777OOO,,, QQQ tttNNN===V9  :Wkkk)))VVV;;;JJJ XXX!!!{{{&&&===888GGG///###DDD666444OOO hhh nnn???000iii ___V9  :W222lll///@@@sssccc ***$$$LLL 000GGG RRRLLL""""""^^^ XXXQQQ ???V9  :W&&&fff 777FFFggg333333555{{{666HHH '''sss KKK111 &&&V9  :W---333zzz444===)))mmm{{{"""!!!TTT<<<---&&&ZZZJJJ///CCC)))@@@777V9  :WTTTlllWWW==={{{%%%"""vvvEEEjjj$$$000gggwww"""ddd^^^ AAAqqq'''(((bbb~~~,,, $$$ooouuu )))uuuDDDooo 333lll555V9  :WXXX |||""" BBB???%%% 000111+++UUU... |||333 SSSGGG### @@@{{{ V9  :Wvvv###|||hhhuuu QQQVVVV9  :W|||!!!444,,,V9  :WhhhgggNNNV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WPPP%%%+++>>>222'''bbbbbb###111 $$$lll444EEEKKK222---!!!???V9  :W 999 :::!!!<<mm*55~ V9  :W~~1zzzzzzzzzzzzzz{{=?@@@@@?@@V9  :WGzzzzzzzzzzlljj)[['zz1@]V9  :W}})zzzzzzssjj&cc(PPW@|V9  :W||zzyyLLmPPm""IU8  :WzzQQZ~ xllS6 :W½00ckkO3 :W77}I.  :WTTA)  :W]]}}7! :Wxx|y___i+  :Wfff}2   :Whhh7$  :Wppp<'  :W}}}}}}}}}}}}~~~nnn@+ :W~~~{{{yyywwwwwwvvvwwwxxxzzz|||~~~oooC- :WrrrF. :WwwwG/ :WzzzI0 :WJ1 :WL3 :WM4  :WN5   :WO5!  :WP6!  :WQ6!  :WQ6"  :WQ8#  :WR8$  :WR7$  :WS8#  :WS9#  :WR9$  :VU9$  8TT9$ 6QT9% 2K U9%  ,BU9%  $6R7% )$$$M2#  gggC^^^LVVVSPPPYNNN[NNN\MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]NNN\NNN[MMMYPPPV7*  #&())))))))))))))))))))))))))))))))))))))))))))))))('#    ????atomes_1.3.1/misc/win/atomes-latest-no-win.iss0000664000175000017500000003513215212624223020750 0ustar lerouxleroux; Script generated by the Inno Setup Script Wizard. ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! [Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) AppId=4DA2F2FC-AD2D-414A-8197-0DD52F1593D2 AppName=atomes AppVerName=atomes 1.3.1 AppPublisher=CNRS AppPublisherURL=https://atomes.ipcms.fr/ AppSupportURL=https://atomes.ipcms.fr/ AppUpdatesURL=https://atomes.ipcms.fr/ DefaultDirName={autopf}\atomes DisableDirPage=yes DefaultGroupName=atomes LicenseFile=COPYING OutputDir=Setup OutputBaseFilename=atomes-latest-setup-no-win SetupIconFile=setup.ico UninstallDisplayIcon=setup.ico Compression=lzma2 SolidCompression=yes ChangesAssociations=yes ; "ArchitecturesAllowed=x64" specifies that Setup cannot run on ; anything but x64. ArchitecturesAllowed=x64 ; "ArchitecturesInstallIn64BitMode=x64" requests that the install be ; done in "64-bit mode" on x64, meaning it should use the native ; 64-bit Program Files directory and the 64-bit view of the registry. ArchitecturesInstallIn64BitMode=x64 WizardStyle=modern [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" [Code] var maj : Integer; min : Integer; patch : Integer; version : String; key : String; function InitializeSetup(): Boolean; begin Result := TRUE; maj := 1; min := 1; patch := 0; while (maj <= 1) do begin while (min <= 3) do begin while (patch <= 18) do begin version := IntToStr(maj) + '.' + IntToStr(min) + '.' + IntToStr(patch); key := 'Software\IPCMS\ATOMES\' + version; if RegValueExists(HKEY_LOCAL_MACHINE, key, 'Version') then begin MsgBox(Format('An older version of atomes has been detected on your computer: %s'#13#13'Please uninstall this previous version before installing any other', [version]), mbConfirmation, MB_OK); Result := FALSE; end; patch := patch + 1; end; min := min + 1; end; maj := maj + 1; end; end; [Registry] Root: HKLM; Subkey: "Software\IPCMS\ATOMES"; Flags: uninsdeletekeyifempty Root: HKLM; Subkey: "Software\IPCMS\ATOMES\1.3.1"; Flags: uninsdeletekey Root: HKLM; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Path"; ValueData: "{app}\bin"; Flags: uninsdeletekey Root: HKLM; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Version"; ValueData: "1.3.1"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES"; Flags: uninsdeletekeyifempty Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Path"; ValueData: "{app}\bin"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Version"; ValueData: "1.3.1"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Name"; ValueData: "atomes"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\IPCMS\ATOMES\1.3.1"; ValueType: string; ValueName: "Company"; ValueData: "Institut de Physique et Chimie des Matériaux de Strasbourg"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.awf\OpenWithProgids"; ValueType: string; ValueName: "atomesWorkspaceFile.awf"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesWorkspaceFile.awf"; ValueType: string; ValueName: ""; ValueData: "atomes Workspace File"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesWorkspaceFile.awf\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-workspace.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesWorkspaceFile.awf\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".awf"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.apf\OpenWithProgids"; ValueType: string; ValueName: "atomesProjectFile.apf"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesProjectFile.awf"; ValueType: string; ValueName: ""; ValueData: "atomes Project File"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesProjectFile.apf\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-project.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesProjectFile.apf\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".apf"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.xyz\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-XYZ"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-XYZ"; ValueType: string; ValueName: ""; ValueData: "XYZ Atomic Coordinates"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-XYZ\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-XYZ\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".xyz"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.pdb\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-PDB"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-PDB"; ValueType: string; ValueName: ""; ValueData: "PDB Atomic Coordinates"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-PDB\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-PDB\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".pdb"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.ent\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-ENT"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-ENT"; ValueType: string; ValueName: ""; ValueData: "ENT Atomic Coordinates"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-ENT\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-ENT\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".ent"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.cif\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-CIF"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-CIF"; ValueType: string; ValueName: ""; ValueData: "CIF crystallographic information"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-CIF\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-CIF\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".cif"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.trj\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-TRJ"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-TRJ"; ValueType: string; ValueName: ""; ValueData: "CPMD trajectory"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-TRJ\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-TRJ\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".trj"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.xdatcar\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-VAS"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-VAS"; ValueType: string; ValueName: ""; ValueData: "VASP trajectory"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-VAS\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-VAS\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".xdatcar"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.c3d\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-C3D"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-C3D"; ValueType: string; ValueName: ""; ValueData: "Chem3D Atomic Coordinates"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-C3D\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-C3D\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".c3d"; ValueData: ""; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\.hist\OpenWithProgids"; ValueType: string; ValueName: "atomesAtomicCoord-HIST"; ValueData: ""; Flags: uninsdeletevalue Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-HIST"; ValueType: string; ValueName: ""; ValueData: "DL-POLY History File"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-HIST\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "atomes-coordinates.ico"; Flags: uninsdeletekey Root: HKA; Subkey: "Software\Classes\atomesAtomicCoord-HIST\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\atomes.exe"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\atomes.exe\SupportedTypes"; ValueType: string; ValueName: ".hist"; ValueData: ""; Flags: uninsdeletekey Root: HKLM; SubKey: "SYSTEM\CurrentControlSet\Control\Session Manager\Environment\"; ValueType: string; ValueName: "Path"; ValueData: "{reg:HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\,Path};{app}\bin" [Code] procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); var Path, AppDir: string; Index: Integer; begin if CurUninstallStep = usUninstall then begin if RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment\', 'Path', Path) then begin AppDir := ExpandConstant('{app}'); Index := Pos(AppDir, Path); Delete(Path, Index-1, Length(AppDir)+1); RegWriteStringValue(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment\', 'Path', Path); end; end; end; [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Components: main; Flags: unchecked ; Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Components: main; Flags: unchecked [Files] Source: "atomes\pixmaps\*"; DestDir: "{app}\pixmaps\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\library\*"; DestDir: "{app}\library"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\bin-no-win\*"; DestDir: "{app}\bin\"; Components: main; Flags: ignoreversion Source: "atomes\etc\*"; DestDir: "{app}\etc\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\lib\*"; DestDir: "{app}\lib\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\share\*"; DestDir: "{app}\share\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\var\*"; DestDir: "{app}\var\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes\locale\*"; DestDir: "{app}\locale\"; Components: main; Flags: ignoreversion recursesubdirs createallsubdirs Source: "atomes.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "setup.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "atomes-workspace.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "atomes-project.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "atomes-coordinates.ico"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "COPYING"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "ChangeLog"; DestDir: "{app}"; Components: main; Flags: ignoreversion Source: "gtk-sources\*"; DestDir: "{app}\gtk-sources\"; Components: main; Flags: ignoreversion ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] Name: "{group}\atomes"; Filename: "{app}\bin\atomes.exe"; WorkingDir: "{app}"; IconFilename: "{app}\atomes.ico"; Components: main Name: "{group}\{cm:ProgramOnTheWeb,atomes}"; Filename: "https://atomes.ipcms.fr/"; Components: main; Name: "{group}\{cm:UninstallProgram,atomes}"; Filename: "{uninstallexe}"; IconFilename: "{app}\atomes.ico"; Components: main; Name: "{commondesktop}\atomes"; Filename: "{app}\bin\atomes.exe"; Tasks: desktopicon; WorkingDir: "{app}"; IconFilename: "{app}\atomes.ico"; Components: main ; Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\atomes"; Filename: "{app}\bin\atomes.exe"; WorkingDir: "{app}"; Tasks: quicklaunchicon; IconFilename: "{app}\atomes.ico"; Components: main [Components] Name: "main"; Description: "atomes"; Types: full compact custom [Run] Filename: "{app}\bin\atomes.exe"; Description: "{cm:LaunchProgram,atomes}"; Flags: nowait postinstall skipifsilent atomes_1.3.1/misc/win/startup.rc.in0000664000175000017500000000301215212624223016666 0ustar lerouxleroux/* This file is part of Atomes. Atomes is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Atomes 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 Affero General Public License along with Atomes. If not, see */ #include ATOMES_ICON ICON "../misc/win/atomes.ico" VS_VERSION_INFO VERSIONINFO FILEVERSION @ATOMES_MAJOR_VERSION@,@ATOMES_MINOR_VERSION@,@ATOMES_PATCH_VERSION@ PRODUCTVERSION @ATOMES_MAJOR_VERSION@,@ATOMES_MINOR_VERSION@,@ATOMES_PATCH_VERSION@ FILEOS VOS_NT FILETYPE VFT_APP BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "Comments", "@PACKAGE@_startup_testing" VALUE "CompanyName", "CNRS - IPCMS - DMO" VALUE "FileDescription", "@PACKAGE@_startup_testing @PACKAGE_VERSION@" VALUE "FileVersion", "@PACKAGE_VERSION@" VALUE "LegalCopyright", "\251 2026 S\351bastien Le Roux" VALUE "OriginalFileName", "@PACKAGE@_startup_testing.exe" VALUE "ProductName", "@PACKAGE@_startup_testing @PACKAGE_VERSION@" VALUE "ProductVersion", "@PACKAGE_VERSION@" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x0409, 1200 END END atomes_1.3.1/misc/win/atomes-inno.sh0000775000175000017500000000132315212624223017024 0ustar lerouxleroux#!/bin/bash INNO="/c/Program\ Files\ \(x86\)/Inno\ Setup\ 6/ISCC.exe" PACKAGE_VERSIONS="win no-win" GTK_VERSIONS="gtk3 gtk4" ATOMES_VERSIONS="debug standard" for GTK in $GTK_VERSIONS do for ATOMES in $ATOMES_VERSIONS do for PACKAGE in $PACKAGE_VERSIONS do mkdir -p Setup/$ATOMES/$GTK/ done done done for GTK in $GTK_VERSIONS do mv gtk-sources-$GTK gtk-sources for ATOMES in $ATOMES_VERSIONS do mv atomes-$GTK-$ATOMES atomes for PACKAGE in $PACKAGE_VERSIONS do /c/Program\ Files\ \(x86\)/Inno\ Setup\ 6/ISCC.exe ./atomes-latest-$PACKAGE.iss mv Setup/*.exe Setup/$ATOMES/$GTK/ done mv atomes atomes-$GTK-$ATOMES done mv gtk-sources gtk-sources-$GTK done atomes_1.3.1/misc/win/atomes-project.ico0000664000175000017500000020407615212624223017676 0ustar lerouxleroux ((     #&())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(&"  '19?BCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCB>91' )8GSZ_abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba_YRF8) $6J]mw}}vk]J6$  ,BA+ 2KK26QP6 8TT7  :VU9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :Wrr|}//lV9  :W//s""wV9  :Wzz,,eV9  :W11s""yV9  :W44x""{V9  :W==p oz~V9  :W~BBP23=C~V9  :W|y-33333=CV9  :Wrrdp++f== xx(233333333:=fV9  :W[[22[==dmm(tt-vv 333333333333:=f11ecc~V9  :W^^ ZZJJ=ffvv vvww,3333333333333333=C~((wbbV9  :Wy^^ ^^ YYVVttvv vvzz23333333333333333333=C~%%vdd~V9  :W``7^^ ^^ ^^ WWggvv vv vv 23333333333333333333333:=ezzq %%xV9  :Wgg1^^ ^^ ^^ \\ WWrrvv vvvv*3333333333333333333333333,uu(<<V9  :Wbb&^^ ^^ ^^ ^^ YYddvvvv vv}}03333333333333333333333, wwUUv((V9  :W^^ ^^ ^^ ^^ ^^ ]] XXrrvv vv33333333333333333333, wwvvtt155oV9  :W^^ ^^ ^^ ^^ ^^ ^^ \\ ffww)22222233333333332, wwvvvv!vv"uu,WW}UU{SSt ++{V9  :W__D^^ ^^ ^^ ^^ ^^ ^^ ^^ dd %03333332, wwvvvv!vv"vv#vv"vv vvzz.//t~++~88oV9  :Wff1^^ ^^ ^^ ^^ ^^ ^^ ^^ __ zz'3332({{vv!vv"vv#vv"vv ww"&2V9  :Wgg1^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ dd2* ww"vv!vv ww"-33:V9  :W]] ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ``yy {{ww"-3333lV9  :W^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^eeoo-33333:V9  :Wx^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ bbjjoo&3333333FV9  :W``6^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ffmmppvv(233333333V9  :Wgg0^^ ^^ ^^ ^^ ^^ ^^ ^^ __iinnrrtt2333333333DV9  :Waa!^^ ^^ ^^ ^^ ^^ ^^ ^^ aajjoorrttzz#3333333333V9  :W^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aajjoorruuvv#333333333?V9  :W^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aajjoorrttvv}}#333333333mV9  :Wcc<^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aaiinnrrttvvww%33333333:V9  :Wdd*^^ ^^ ^^ ^^ ^^ \\ aaiikkffmmppssuuvv}}.33333333kV9  :Wcc'^^ ^^ ^^ \\ XXUUkkppqqggjjnnqqttuuvv333333339V9  :Woop[[ ^^ [[ WWTTTTUUjjqqqqllfflloorrsstt{{,33333333EV9  :Wpp|;;aTTTTTTTTTTTTTT^^nnmmhhaaggllooqqrrtt!333333333V9  :W77n))HHISS"TTTTTTTTTTTT[[aa^^ ^^ ``ggkknnooppyy233333333DV9  :W--}SS$TTTTTTVVZZ ^^ ^^ ^^ ^^ ^^ __ddiikkmmnn 3333333333V9  :WRR'TTVV[[ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __bbeeffnn333333333?V9  :W::mTTYY^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __  233333333lV9  :W))OO)]] ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ oo+33333339V9  :W{{|jj9^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aa xx ww&3333333kV9  :W{{ ~--xww|bb%^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ccuuvv!vvzz2333339V9  :W|bb%^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ZZnnvv vv ww,33333EV9  :Wz]] ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ [[ __uuvv vv'33333V9  :WeeA]] ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ VVnnvv!vvzz2333CV9  :Wll=^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ YY__uu vv ww-333V9  :Wbb%^^ ^^ ^^ ^^ ^^ ^^ [[ UUnnvv vv239V9  :W}bb%^^ ^^ ^^ ^^ ^^ UU__uu!ggTiiM23dV9  :Wy]] ^^ ^^ ^^ YYSS'll/??19V9  :WeeA]] ^^ ZZz;; |ZZZaV9  :Wdd?]]//XyzZZxV9  :W""i]]yV9  :WxV9  :WuuV9  :WzzV9  :WzV9  :W::vrrV9  :W::tvvV9  :WU8  :WS6 :WO3 :WI.  :WA)  :W7! :W___i+  :Wfff}2   :Whhh7$  :Wppp<'  :W}}}}}}}}}}}}~~~nnn@+ :W~~~{{{yyywwwwwwvvvwwwxxxzzz|||~~~oooC- :WrrrF. :WwwwG/ :WzzzI0 :WJ1 :WL3 :WM4  :WN5   :WO5!  :WP6!  :WQ6!  :WQ6"  :WQ8#  :WR8$  :WR7$  :WS8#  :WS9#  :WR9$  :VU9$  8TT9$ 6QT9% 2K U9%  ,BU9%  $6R7% )$$$M2#  gggC^^^LVVVSPPPYNNN[NNN\MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]NNN\NNN[MMMYPPPV7*  #&())))))))))))))))))))))))))))))))))))))))))))))))('#    ????atomes_1.3.1/AUTHORS.md0000664000175000017500000000114315212624223014153 0ustar lerouxleroux**atomes** program Author ========================================================= For any support request please use: [atomes@ipcms.unistra.fr](mailto:atomes@ipcms.unistra.fr) --------------------------------------------------------- Dr. Sébastien Le Roux Institut de Chimie et Physique des Matériaux de Strasbourg \ Département des Matériaux Organiques \ 23 rue du Loess, \ BP 43 F-67034 Strasbourg Cedex 2 \ France Email: [sebastien.leroux@ipcms.unistra.fr](mailto:sebastien.leroux@ipcms.unistra.fr) \ Web page: [https://www.ipcms.fr/sebastien-le-roux/](https://www.ipcms.fr/sebastien-le-roux/) atomes_1.3.1/codemeta.json0000664000175000017500000000776415212624223015177 0ustar lerouxleroux{ "@context": "https://doi.org/10.5063/schema/codemeta-2.0", "type": "SoftwareSourceCode", "applicationCategory": "Chemistry", "author": [ { "id": "https://orcid.org/0000-0002-1912-6960", "type": "Person", "affiliation": { "type": "Organization", "name": "Institut de Physique et Chimie des Matériaux de Strasbourg" }, "email": "sebastien.leroux@ipcms.unistra.fr", "familyName": "Le Roux", "givenName": "Sébastien" } ], "codeRepository": "https://github.com/Slookeur/atomes-GNU.git", "contributor": [ { "id": "https://orcid.org/0000-0001-5318-3910", "type": "Person", "affiliation": { "type": "Organization", "name": "Institut de Recherche de Chimie Paris" }, "email": "fx.coudert@chimieparistech.psl.eu", "familyName": "Coudert", "givenName": "François-Xavier" }, { "id": "https://orcid.org/0000-0001-6913-7388", "type": "Person", "email": "alex.ploumistos@gmail.com", "familyName": "Ploumistos", "givenName": "Alexander" }, { "id": "https://orcid.org/0000-0002-5184-7557", "type": "Person", "affiliation": { "type": "Organization", "name": "EDF" }, "email": "pgt@debian.org", "familyName": "Gruet", "givenName": "Pierre" }, { "id": "_:contributor_4", "type": "Person", "affiliation": { "type": "Organization", "name": "Red Hat" }, "email": "yselkowi@redhat.com", "familyName": "Selkowitz", "givenName": "Yaakov" } ], "dateCreated": "2012-01-01", "dateModified": "2026-06-11", "datePublished": "2022-09-01", "description": "atomes: a toolbox to analyze, to visualize \nand to create/edit three-dimensional atomic scale models.\nThe software interface offers a workspace that allows to have many projects opened simultaneously.\nThe different projects in the workspace can exchange data: \nanalysis results, atomic coordinates...\natomes also provides an advanced input preparation system \nfor further calculations using well known molecular dynamics codes:\n\n Classical MD: DLPOLY and LAMMPS\n ab-initio MD: CPMD and CP2K\n QM-MM MD: CPMD and CP2K\n\nTo prepare the input files for these calculations is likely to be the key, \nand most complicated step towards MD simulations.\natomes offers a user-friendly assistant to help and guide the scientist\nstep by step to achieve this crucial step.", "downloadUrl": "https://atomes.ipcms.fr", "funder": { "type": "Organization", "name": "CNRS" }, "keywords": [ "Chemistry", "Physics", "Molecule", "Crystal", "Molecular Dynamics", "Surface" ], "license": "https://spdx.org/licenses/AGPL-3.0-or-later", "name": "atomes", "operatingSystem": [ "Linux", "macOS", "Windows" ], "programmingLanguage": [ "C", "GLSL", "Fortran" ], "relatedLink": "https://atomes.ipcms.fr/", "schema:releaseNotes": "Release of version 1.3.1\n\n - Bug corrections" "softwareRequirements": [ "libgtk+3.0 or ligtk4 : https://www.gtk.org/", "libepoxy : https://github.com/anholt/libepoxy/", "libglu (Linux only) : https://gitlab.freedesktop.org/mesa/glu/", "libpangoft2 : https://docs.gtk.org/PangoFT2/", "libxml-2 : https://github.com/GNOME/libxml2/", "libavutil, libavformat, libavcodec, libswscale : https://www.ffmpeg.org/" ], "version": "1.3.1", "developmentStatus": "active", "issueTracker": "https://github.com/Slookeur/atomes-GNU/issues" } atomes_1.3.1/config.h.in0000664000175000017500000000242215212624223014530 0ustar lerouxleroux/* config.h.in. Generated from configure.ac by autoheader. */ /* atomes major version */ #undef ATOMES_MAJOR_VERSION /* atomes minor version */ #undef ATOMES_MINOR_VERSION /* atomes patch version */ #undef ATOMES_PATCH_VERSION /* Define to dummy 'main' function (if any) required to link to the Fortran libraries. */ #undef FC_DUMMY_MAIN /* Define if F77 and FC dummy 'main' functions are identical. */ #undef FC_DUMMY_MAIN_EQ_F77 /* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ #undef FC_FUNC /* As FC_FUNC, but for C identifiers containing underscores. */ #undef FC_FUNC_ /* GETTEXT package name */ #undef GETTEXT_PACKAGE /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Version number of package */ #undef VERSION atomes_1.3.1/config.guess0000775000175000017500000014120515212624223015030 0ustar lerouxleroux#!/usr/bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-05-25' # This file 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. # # This program 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 this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:SerenityOS:*:*) GUESS=$UNAME_MACHINE-pc-serenity ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build CPU=$UNAME_MACHINE LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then ABI=64 sed 's/^ //' << EOF > "$dummy.c" #ifdef __i386__ ABI=x86 #else #ifdef __ILP32__ ABI=x32 #endif #endif EOF cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` eval "$cc_set_abi" case $ABI in x86) CPU=i686 ;; x32) LIBCABI=${LIBC}x32 ;; esac fi GUESS=$CPU-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; ppc:Haiku:*:*) # Haiku running on Apple PowerPC GUESS=powerpc-apple-haiku ;; *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat) GUESS=$UNAME_MACHINE-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; i*86:Fiwix:*:*) GUESS=$UNAME_MACHINE-pc-fiwix ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: atomes_1.3.1/atomes-completion.sh0000664000175000017500000000124015212624223016475 0ustar lerouxleroux# atomes(1) completion -*- shell-script -*- _atomes() { local cur prev words cword split _init_completion -s || return COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} case $prev in -h | --help | -v | --version) return ;; esac $split && return if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) [[ ${COMPREPLY-} == *= ]] && compopt -o nospace return fi _filedir '@([aA][wW][fF]|[aA][pP][fF]|[xX][yY][zZ]|[pP][dD][bB]|[eE][nN][tT]|[cC][iI][fF]|[iI][pP][fF]|[tT][rR][jJ]|[xX][dD][aA][tT][cC][aA][rR]|[cC]3[dD]|[hH][iI][sS][tT])' } && complete -F _atomes atomes atomes_1.3.1/compile0000775000175000017500000001635015212624223014070 0ustar lerouxleroux#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program 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 2, or (at your option) # any later version. # # This program 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 this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN* | MSYS*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: atomes_1.3.1/Makefile.am0000664000175000017500000000554415212624223014551 0ustar lerouxleroux## Process this file with automake to produce Makefile.in SUBDIRS = data man locale src atomes_datadir = $(DESTDIR)$(datadir) atomes_pkgdatadir = $(DESTDIR)$(pkgdatadir) atomes_iconsdir = $(atomes_datadir)/pixmaps atomes_desktopdir = $(atomes_datadir)/applications atomes_mimedir = $(atomes_datadir)/mime/packages/ atomes_metadir = $(atomes_datadir)/metainfo atomes_bashdir = $(atomes_datadir)/bash-completion/completions atomes_docdir = $(docdir) atomes_doc_DATA = \ README.md \ AUTHORS.md \ ChangeLog install-data-local: # Bash completion if [ ! -d $(atomes_bashdir) ]; then \ $(mkinstalldirs) $(atomes_bashdir); \ fi $(INSTALL_DATA) $(srcdir)/atomes-completion.sh $(atomes_bashdir)/atomes # Program's icons if [ ! -d $(atomes_iconsdir) ]; then \ $(mkinstalldirs) $(atomes_iconsdir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes.svg $(atomes_iconsdir) $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes-workspace.svg $(atomes_iconsdir) $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes-project.svg $(atomes_iconsdir) $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes-coordinates.svg $(atomes_iconsdir) # Custom MIME types if [ ! -d $(atomes_mimedir) ]; then \ $(mkinstalldirs) $(atomes_mimedir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/atomes-mime.xml $(atomes_mimedir) # Meta info if [ ! -d $(atomes_metadir) ]; then \ $(mkinstalldirs) $(atomes_metadir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/fr.ipcms.atomes.appdata.xml $(atomes_metadir) appstream-util validate-relax --nonet $(atomes_metadir)/fr.ipcms.atomes.appdata.xml # Desktop file if [ ! -d $(atomes_desktopdir) ]; then \ $(mkinstalldirs) $(atomes_desktopdir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/atomes.desktop $(atomes_desktopdir)/atomes.desktop # Finalize touch -c $(atomes_iconsdir) if [ -u `which gtk-update-icon-cache` ]; then \ gtk-update-icon-cache -q $(atomes_iconsdir); \ fi desktop-file-install --vendor="" \ --dir=$(atomes_desktopdir) -m 644 \ $(atomes_desktopdir)/atomes.desktop if [ -z "$(DESTDIR)" ]; then \ update-desktop-database $(atomes_desktopdir) &> /dev/null || :; \ update-mime-database $(atomes_datadir)/mime &> /dev/null || :; \ fi # Remove doc directordy on uninstall uninstall-local: -rm -f $(atomes_iconsdir)/atomes.svg -rm -f $(atomes_iconsdir)/atomes-workspace.svg -rm -f $(atomes_iconsdir)/atomes-project.svg -rm -f $(atomes_iconsdir)/atomes-coordinates.svg -rm -f $(atomes_desktopdir)/atomes.desktop -rm -f $(atomes_metadir)/fr.ipcms.atomes.appdata.xml -rm -f $(atomes_mimedir)/atomes-mime.xml -rm -f $(atomes_bashdir)/atomes -rmdir $(atomes_docdir) touch -c $(atomes_iconsdir) if [ -u `which gtk-update-icon-cache` ]; then \ gtk-update-icon-cache -q $(atomes_iconsdir); \ fi if [ -z "$(DESTDIR)" ]; then \ update-desktop-database $(atomes_desktopdir) &> /dev/null || :; \ update-mime-database $(atomes_datadir)/mime &> /dev/null || :; \ fi atomes_1.3.1/stamp-h10000664000175000017500000000002715212624223014061 0ustar lerouxlerouxtimestamp for config.h atomes_1.3.1/install-sh0000775000175000017500000003577615212624223014533 0ustar lerouxleroux#!/bin/sh # install - install a program, script, or datafile scriptversion=2020-11-14.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 # Create dirs (including intermediate dirs) using mode 755. # This is like GNU 'install' as of coreutils 8.32 (2020). mkdir_umask=22 backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -p pass -p to $cpprog. -s $stripprog installed files. -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG By default, rm is invoked with -f; when overridden with RMPROG, it's up to you to specify -f if you want it. If -S is not specified, no backups are attempted. Email bug reports to bug-automake@gnu.org. Automake home page: https://www.gnu.org/software/automake/ " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -p) cpprog="$cpprog -p";; -s) stripcmd=$stripprog;; -S) backupsuffix="$2" shift;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? # Don't chown directories that already exist. if test $dstdir_status = 0; then chowncmd="" fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false # The $RANDOM variable is not portable (e.g., dash). Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap ' ret=$? rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null exit $ret ' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p'. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # If $backupsuffix is set, and the file being installed # already exists, attempt a backup. Don't worry if it fails, # e.g., if mv doesn't support -f. if test -n "$backupsuffix" && test -f "$dst"; then $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null fi # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: atomes_1.3.1/depcomp0000775000175000017500000005602015212624223014065 0ustar lerouxleroux#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # This program 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 2, or (at your option) # any later version. # This program 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 this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: atomes_1.3.1/AUTHORS0000777000175000017500000000000015212624223015217 2AUTHORS.mdustar lerouxlerouxatomes_1.3.1/INSTALL0000664000175000017500000003662615212624223013553 0ustar lerouxlerouxInstallation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2017, 2020-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell command './configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the 'README' file for instructions specific to this package. Some packages provide this 'INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a 'Makefile' in each directory of the package. It may also create one or more '.h' files containing system-dependent definitions. Finally, it creates a shell script 'config.status' that you can run in the future to recreate the current configuration, and a file 'config.log' containing compiler output (useful mainly for debugging 'configure'). It can also use an optional file (typically called 'config.cache' and enabled with '--cache-file=config.cache' or simply '-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how 'configure' could check whether to do them, and mail diffs or instructions to the address given in the 'README' so they can be considered for the next release. If you are using the cache, and at some point 'config.cache' contains results you don't want to keep, you may remove or edit it. The file 'configure.ac' (or 'configure.in') is used to create 'configure' by a program called 'autoconf'. You need 'configure.ac' if you want to change it or regenerate 'configure' using a newer version of 'autoconf'. The simplest way to compile this package is: 1. 'cd' to the directory containing the package's source code and type './configure' to configure the package for your system. Running 'configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type 'make' to compile the package. 3. Optionally, type 'make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type 'make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the 'make install' phase executed with root privileges. 5. Optionally, type 'make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior 'make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing 'make clean'. To also remove the files that 'configure' created (so you can compile the package for a different kind of computer), type 'make distclean'. There is also a 'make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type 'make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide 'make distcheck', which can by used by developers to test that all other targets like 'make install' and 'make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the 'configure' script does not know about. Run './configure --help' for details on some of the pertinent environment variables. You can give 'configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU 'make'. 'cd' to the directory where you want the object files and executables to go and run the 'configure' script. 'configure' automatically checks for the source code in the directory that 'configure' is in and in '..'. This is known as a "VPATH" build. With a non-GNU 'make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use 'make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple '-arch' options to the compiler but only a single '-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the 'lipo' tool if you have problems. Installation Names ================== By default, 'make install' installs the package's commands under '/usr/local/bin', include files under '/usr/local/include', etc. You can specify an installation prefix other than '/usr/local' by giving 'configure' the option '--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option '--exec-prefix=PREFIX' to 'configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like '--bindir=DIR' to specify different values for particular kinds of files. Run 'configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of '${prefix}', so that specifying just '--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to 'configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the 'make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, 'make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of '${prefix}'. Any directories that were specified during 'configure', but not in terms of '${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the 'DESTDIR' variable. For example, 'make install DESTDIR=/alternate/directory' will prepend '/alternate/directory' before all installation names. The approach of 'DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of '${prefix}' at 'configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving 'configure' the option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. Some packages pay attention to '--enable-FEATURE' options to 'configure', where FEATURE indicates an optional part of the package. They may also pay attention to '--with-PACKAGE' options, where PACKAGE is something like 'gnu-as' or 'x' (for the X Window System). The 'README' should mention any '--enable-' and '--with-' options that the package recognizes. For packages that use the X Window System, 'configure' can usually find the X include and library files automatically, but if it doesn't, you can use the 'configure' options '--x-includes=DIR' and '--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of 'make' will be. For these packages, running './configure --enable-silent-rules' sets the default to minimal output, which can be overridden with 'make V=1'; while running './configure --disable-silent-rules' sets the default to verbose, which can be overridden with 'make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX 'make' updates targets which have the same timestamps as their prerequisites, which makes it generally unusable when shipped generated files such as 'configure' are involved. Use GNU 'make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its '' header file. The option '-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put '/usr/ucb' early in your 'PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in '/usr/bin'. So, if you need '/usr/ucb' in your 'PATH', put it _after_ '/usr/bin'. On Haiku, software installed for all users goes in '/boot/common', not '/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features 'configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, 'configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the '--build=TYPE' option. TYPE can either be a short name for the system type, such as 'sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file 'config.sub' for the possible values of each field. If 'config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option '--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with '--host=TYPE'. Sharing Defaults ================ If you want to set default values for 'configure' scripts to share, you can create a site shell script called 'config.site' that gives default values for variables like 'CC', 'cache_file', and 'prefix'. 'configure' looks for 'PREFIX/share/config.site' if it exists, then 'PREFIX/etc/config.site' if it exists. Or, you can set the 'CONFIG_SITE' environment variable to the location of the site script. A warning: not all 'configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to 'configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the 'configure' command line, using 'VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified 'gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash 'configure' Invocation ====================== 'configure' recognizes the following options to control how it operates. '--help' '-h' Print a summary of all of the options to 'configure', and exit. '--help=short' '--help=recursive' Print a summary of the options unique to this package's 'configure', and exit. The 'short' variant lists options used only in the top level, while the 'recursive' variant lists options also present in any nested packages. '--version' '-V' Print the version of Autoconf used to generate the 'configure' script, and exit. '--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally 'config.cache'. FILE defaults to '/dev/null' to disable caching. '--config-cache' '-C' Alias for '--cache-file=config.cache'. '--quiet' '--silent' '-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to '/dev/null' (any error messages will still be shown). '--srcdir=DIR' Look for the package's source code in directory DIR. Usually 'configure' can determine that directory automatically. '--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. '--no-create' '-n' Run the configure checks, but stop before creating any output files. 'configure' also accepts some other, not widely useful, options. Run 'configure --help' for more details. atomes_1.3.1/autom4te.cache/0000775000175000017500000000000015212624223015311 5ustar lerouxlerouxatomes_1.3.1/autom4te.cache/output.10000664000175000017500000113426615212624223016750 0ustar lerouxleroux@%:@! /bin/sh @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.72 for atomes 1.3.1. @%:@ @%:@ Report bugs to . @%:@ @%:@ @%:@ Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, @%:@ Inc. @%:@ @%:@ @%:@ This configure script is free software; the Free Software Foundation @%:@ gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in @%:@( e) case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case e in @%:@( e) case \`(set -o) 2>/dev/null\` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else case e in @%:@( e) exitcode=1; echo positional parameters were not saved. ;; esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else case e in @%:@( e) as_have_required=no ;; esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else case e in @%:@( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in @%:@( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else case e in @%:@( e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi ;; esac fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: atomes@ipcms.unistra.fr about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi ;; esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in @%:@( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in @%:@( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' t clear :clear s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIB@&t@OBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='atomes' PACKAGE_TARNAME='atomes' PACKAGE_VERSION='1.3.1' PACKAGE_STRING='atomes 1.3.1' PACKAGE_BUGREPORT='atomes@ipcms.unistra.fr' PACKAGE_URL='https://atomes.ipcms.fr' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIB@&t@OBJS OPENMP_FALSE OPENMP_TRUE OPENMP_CFLAGS FCFLAGS_F90 FCFLAGS_f90 FCLIBS ac_ct_FC FCFLAGS FC EPOXY_LIBS EPOXY_CFLAGS GLU_LIBS GLU_CFLAGS FFMPEG_LIBS FFMPEG_CFLAGS PANGOFT2_LIBS PANGOFT2_CFLAGS LIBXML2_LIBS LIBXML2_CFLAGS INTEGRATION_LIBS INTEGRATION_CFLAGS LGTK_LIBS LGTK_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH GTK3_FALSE GTK3_TRUE UP_APPSTREAM UP_DESKTOP UP_MIME PKG_CONFIG WINDRES OSX_FALSE OSX_TRUE WINDOWS_FALSE WINDOWS_TRUE LINUX_FALSE LINUX_TRUE host_os host_vendor host_cpu host build_os build_vendor build_cpu build am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC ATOMES_PATCH_VERSION ATOMES_MINOR_VERSION ATOMES_MAJOR_VERSION am__xargs_n am__rm_f_notfound AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking with_gtk enable___disable_openmp enable_openmp ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR LGTK_CFLAGS LGTK_LIBS INTEGRATION_CFLAGS INTEGRATION_LIBS LIBXML2_CFLAGS LIBXML2_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS FFMPEG_CFLAGS FFMPEG_LIBS GLU_CFLAGS GLU_LIBS EPOXY_CFLAGS EPOXY_LIBS FC FCFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: '$ac_option' Try '$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF 'configure' configures atomes 1.3.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @<:@@S|@ac_default_prefix@:>@ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX @<:@PREFIX@:>@ By default, 'make install' will install all the files in '$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify an installation prefix other than '$ac_default_prefix' using '--prefix', for instance '--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root @<:@DATAROOTDIR/doc/atomes@:>@ --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of atomes 1.3.1:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-openmp disable OpenMP thread parallelisation (default: no) --disable-openmp do not use OpenMP Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gtk=3|4 the GTK version to use (default: 3) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path LGTK_CFLAGS C compiler flags for LGTK, overriding pkg-config LGTK_LIBS linker flags for LGTK, overriding pkg-config INTEGRATION_CFLAGS C compiler flags for INTEGRATION, overriding pkg-config INTEGRATION_LIBS linker flags for INTEGRATION, overriding pkg-config LIBXML2_CFLAGS C compiler flags for LIBXML2, overriding pkg-config LIBXML2_LIBS linker flags for LIBXML2, overriding pkg-config PANGOFT2_CFLAGS C compiler flags for PANGOFT2, overriding pkg-config PANGOFT2_LIBS linker flags for PANGOFT2, overriding pkg-config FFMPEG_CFLAGS C compiler flags for FFMPEG, overriding pkg-config FFMPEG_LIBS linker flags for FFMPEG, overriding pkg-config GLU_CFLAGS C compiler flags for GLU, overriding pkg-config GLU_LIBS linker flags for GLU, overriding pkg-config EPOXY_CFLAGS C compiler flags for EPOXY, overriding pkg-config EPOXY_LIBS linker flags for EPOXY, overriding pkg-config FC Fortran compiler command FCFLAGS Fortran compiler flags Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . atomes home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF atomes configure 1.3.1 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## @%:@ ac_fn_c_try_compile LINENO @%:@ -------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_compile @%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES @%:@ ------------------------------------------------------- @%:@ Tests whether HEADER exists and can be compiled using the include files in @%:@ INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @%:@include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else case e in @%:@( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } @%:@ ac_fn_c_check_header_compile @%:@ ac_fn_fc_try_compile LINENO @%:@ --------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_fc_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_fc_try_compile @%:@ ac_fn_c_try_link LINENO @%:@ ----------------------- @%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_link ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?@<:@ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by atomes $as_me 1.3.1, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "@%:@define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in @%:@( */*) : ;; @%:@( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See 'config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (char **p, int i) { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* C89 style stringification. */ #define noexpand_stringify(a) #a const char *stringified = noexpand_stringify(arbitrary+token=sequence); /* C89 style token pasting. Exercises some of the corner cases that e.g. old MSVC gets wrong, but not very hard. */ #define noexpand_concat(a,b) a##b #define expand_concat(a,b) noexpand_concat(a,b) extern int vA; extern int vbee; #define aye A #define bee B int *pvA = &expand_concat(v,aye); int *pvbee = &noexpand_concat(v,bee); /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' /* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif // See if C++-style comments work. #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Work around memory leak warnings. free (ia); // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' /* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" # Auxiliary files required by this configure script. ac_aux_files="config.guess config.sub compile missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else case e in @%:@( e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; esac fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_@&t@config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_@&t@config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_@&t@configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.18' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in @%:@(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir ;; esac fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sleep supports fractional seconds" >&5 printf %s "checking whether sleep supports fractional seconds... " >&6; } if test ${am_cv_sleep_fractional_seconds+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if sleep 0.001 2>/dev/null then : am_cv_sleep_fractional_seconds=yes else case e in @%:@( e) am_cv_sleep_fractional_seconds=no ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_sleep_fractional_seconds" >&5 printf "%s\n" "$am_cv_sleep_fractional_seconds" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking filesystem timestamp resolution" >&5 printf %s "checking filesystem timestamp resolution... " >&6; } if test ${am_cv_filesystem_timestamp_resolution+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) # Default to the worst case. am_cv_filesystem_timestamp_resolution=2 # Only try to go finer than 1 sec if sleep can do it. # Don't try 1 sec, because if 0.01 sec and 0.1 sec don't work, # - 1 sec is not much of a win compared to 2 sec, and # - it takes 2 seconds to perform the test whether 1 sec works. # # Instead, just use the default 2s on platforms that have 1s resolution, # accept the extra 1s delay when using $sleep in the Automake tests, in # exchange for not incurring the 2s delay for running the test for all # packages. # am_try_resolutions= if test "$am_cv_sleep_fractional_seconds" = yes; then # Even a millisecond often causes a bunch of false positives, # so just try a hundredth of a second. The time saved between .001 and # .01 is not terribly consequential. am_try_resolutions="0.01 0.1 $am_try_resolutions" fi # In order to catch current-generation FAT out, we must *modify* files # that already exist; the *creation* timestamp is finer. Use names # that make ls -t sort them differently when they have equal # timestamps than when they have distinct timestamps, keeping # in mind that ls -t prints the *newest* file first. rm -f conftest.ts? : > conftest.ts1 : > conftest.ts2 : > conftest.ts3 # Make sure ls -t actually works. Do 'set' in a subshell so we don't # clobber the current shell's arguments. (Outer-level square brackets # are removed by m4; they're present so that m4 does not expand # ; be careful, easy to get confused.) if ( set X `ls -t conftest.ts[12]` && { test "$*" != "X conftest.ts1 conftest.ts2" || test "$*" != "X conftest.ts2 conftest.ts1"; } ); then :; else # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". printf "%s\n" ""Bad output from ls -t: \"`ls -t conftest.ts[12]`\""" >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "ls -t produces unexpected output. Make sure there is not a broken ls alias in your environment. See 'config.log' for more details" "$LINENO" 5; } fi for am_try_res in $am_try_resolutions; do # Any one fine-grained sleep might happen to cross the boundary # between two values of a coarser actual resolution, but if we do # two fine-grained sleeps in a row, at least one of them will fall # entirely within a coarse interval. echo alpha > conftest.ts1 sleep $am_try_res echo beta > conftest.ts2 sleep $am_try_res echo gamma > conftest.ts3 # We assume that 'ls -t' will make use of high-resolution # timestamps if the operating system supports them at all. if (set X `ls -t conftest.ts?` && test "$2" = conftest.ts3 && test "$3" = conftest.ts2 && test "$4" = conftest.ts1); then # # Ok, ls -t worked. If we're at a resolution of 1 second, we're done, # because we don't need to test make. make_ok=true if test $am_try_res != 1; then # But if we've succeeded so far with a subsecond resolution, we # have one more thing to check: make. It can happen that # everything else supports the subsecond mtimes, but make doesn't; # notably on macOS, which ships make 3.81 from 2006 (the last one # released under GPLv2). https://bugs.gnu.org/68808 # # We test $MAKE if it is defined in the environment, else "make". # It might get overridden later, but our hope is that in practice # it does not matter: it is the system "make" which is (by far) # the most likely to be broken, whereas if the user overrides it, # probably they did so with a better, or at least not worse, make. # https://lists.gnu.org/archive/html/automake/2024-06/msg00051.html # # Create a Makefile (real tab character here): rm -f conftest.mk echo 'conftest.ts1: conftest.ts2' >conftest.mk echo ' touch conftest.ts2' >>conftest.mk # # Now, running # touch conftest.ts1; touch conftest.ts2; make # should touch ts1 because ts2 is newer. This could happen by luck, # but most often, it will fail if make's support is insufficient. So # test for several consecutive successes. # # (We reuse conftest.ts[12] because we still want to modify existing # files, not create new ones, per above.) n=0 make=${MAKE-make} until test $n -eq 3; do echo one > conftest.ts1 sleep $am_try_res echo two > conftest.ts2 # ts2 should now be newer than ts1 if $make -f conftest.mk | grep 'up to date' >/dev/null; then make_ok=false break # out of $n loop fi n=`expr $n + 1` done fi # if $make_ok; then # Everything we know to check worked out, so call this resolution good. am_cv_filesystem_timestamp_resolution=$am_try_res break # out of $am_try_res loop fi # Otherwise, we'll go on to check the next resolution. fi done rm -f conftest.ts? # (end _am_filesystem_timestamp_resolution) ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_filesystem_timestamp_resolution" >&5 printf "%s\n" "$am_cv_filesystem_timestamp_resolution" >&6; } # This check should not be cached, as it may vary across builds of # different projects. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). am_build_env_is_sane=no am_has_slept=no rm -f conftest.file for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi test "$2" = conftest.file ); then am_build_env_is_sane=yes break fi # Just in case. sleep "$am_cv_filesystem_timestamp_resolution" am_has_slept=yes done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_build_env_is_sane" >&5 printf "%s\n" "$am_build_env_is_sane" >&6; } if test "$am_build_env_is_sane" = no; then as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if test -e conftest.file || grep 'slept: no' conftest.file >/dev/null 2>&1 then : else case e in @%:@( e) ( sleep "$am_cv_filesystem_timestamp_resolution" ) & am_sleep_pid=$! ;; esac fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was 's,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ *'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS ;; esac fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use plain mkdir -p, # in the hope it doesn't have the bugs of ancient mkdir. MKDIR_P='mkdir -p' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make ;; esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AM_DEFAULT_VERBOSITY=1 @%:@ Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } AM_BACKSLASH='\' am__rm_f_notfound= if (rm -f && rm -fr && rm -rf) 2>/dev/null then : else case e in @%:@( e) am__rm_f_notfound='""' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking xargs -n works" >&5 printf %s "checking xargs -n works... " >&6; } if test ${am_cv_xargs_n_works+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "`echo 1 2 3 | xargs -n2 echo`" = "1 2 3" then : am_cv_xargs_n_works=yes else case e in @%:@( e) am_cv_xargs_n_works=no ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_xargs_n_works" >&5 printf "%s\n" "$am_cv_xargs_n_works" >&6; } if test "$am_cv_xargs_n_works" = yes then : am__xargs_n='xargs -n' else case e in @%:@( e) am__xargs_n='am__xargs_n () { shift; sed "s/ /\\n/g" | while read am__xargs_n_arg; do "" "$am__xargs_n_arg"; done; }' ;; esac fi if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='atomes' VERSION='1.3.1' printf "%s\n" "@%:@define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "@%:@define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar plaintar pax cpio none' # The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 printf %s "checking whether UID '$am_uid' is supported by ustar format... " >&6; } if test x$am_uid = xunknown; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&5 printf "%s\n" "$as_me: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&2;} elif test $am_uid -le $am_max_uid; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } _am_tools=none fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 printf %s "checking whether GID '$am_gid' is supported by ustar format... " >&6; } if test x$gm_gid = xunknown; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&5 printf "%s\n" "$as_me: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&2;} elif test $am_gid -le $am_max_gid; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } _am_tools=none fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 printf %s "checking how to create a ustar tar archive... " >&6; } # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_ustar-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do { echo "$as_me:$LINENO: $_am_tar --version" >&5 ($_am_tar --version) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && break done am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x ustar -w "$$tardir"' am__tar_='pax -L -x ustar -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H ustar -L' am__tar_='find "$tardir" -print | cpio -o -H ustar -L' am__untar='cpio -i -H ustar -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_ustar}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -rf conftest.dir if test -s conftest.tar; then { echo "$as_me:$LINENO: $am__untar &5 ($am__untar &5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 (cat conftest.dir/file) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir if test ${am_cv_prog_tar_ustar+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) am_cv_prog_tar_ustar=$_am_tool ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 printf "%s\n" "$am_cv_prog_tar_ustar" >&6; } # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi printf "%s\n" "@%:@define ATOMES_MAJOR_VERSION 1" >>confdefs.h ATOMES_MAJOR_VERSION=1 printf "%s\n" "@%:@define ATOMES_MINOR_VERSION 3" >>confdefs.h ATOMES_MINOR_VERSION=3 printf "%s\n" "@%:@define ATOMES_PATCH_VERSION 1" >>confdefs.h ATOMES_PATCH_VERSION=1 ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. # So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else case e in @%:@( e) ac_file='' ;; esac fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See 'config.log' for more details" "$LINENO" 5; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) # catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will # work properly (i.e., refer to 'conftest.exe'), while it won't with # 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else case e in @%:@( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include int main (void) { FILE *f = fopen ("conftest.out", "w"); if (!f) return 1; return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use '--host'. See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext \ conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in @%:@( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in @%:@( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in @%:@( '0:this is the am__doit target') : case $s in @%:@( BSD) : am__include='.include' am__quote='"' ;; @%:@( *) : am__include='include' am__quote='' ;; esac ;; @%:@( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } @%:@ Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "@%:@define STDC_HEADERS 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes then : printf "%s\n" "@%:@define HAVE_LIBINTL_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes then : printf "%s\n" "@%:@define HAVE_LOCALE_H 1" >>confdefs.h fi # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac build_linux=no build_windows=no build_mac=no # Detect the target system case "${host_os}" in linux*) build_linux=yes echo "Building Linux application" ;; cygwin*|mingw*) build_windows=yes echo "Building Windows application" ;; darwin*) build_mac=yes echo "Building macOS application" ;; *) as_fn_error $? "\"OS $host_os is not supported\"" "$LINENO" 5 ;; esac # Pass the conditionals to automake if test "$build_linux" = "yes"; then LINUX_TRUE= LINUX_FALSE='#' else LINUX_TRUE='#' LINUX_FALSE= fi if test "$build_windows" = "yes"; then WINDOWS_TRUE= WINDOWS_FALSE='#' else WINDOWS_TRUE='#' WINDOWS_FALSE= fi if test "$build_mac" = "yes"; then OSX_TRUE= OSX_FALSE='#' else OSX_TRUE='#' OSX_FALSE= fi if test "$build_windows" = "yes"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_WINDRES+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 printf "%s\n" "$WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_WINDRES+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 printf "%s\n" "$ac_ct_WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="no" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi if test "$WINDRES" = no; then as_fn_error $? "*** Could not find an implementation of windres in your PATH." "$LINENO" 5 fi fi # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PKG_CONFIG" && ac_cv_prog_PKG_CONFIG="no" fi ;; esac fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-mime-database", so it can be a program name with args. set dummy update-mime-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_MIME+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$UP_MIME"; then ac_cv_prog_UP_MIME="$UP_MIME" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_MIME="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_MIME" && ac_cv_prog_UP_MIME="no" fi ;; esac fi UP_MIME=$ac_cv_prog_UP_MIME if test -n "$UP_MIME"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_MIME" >&5 printf "%s\n" "$UP_MIME" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-desktop-database", so it can be a program name with args. set dummy update-desktop-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_DESKTOP+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$UP_DESKTOP"; then ac_cv_prog_UP_DESKTOP="$UP_DESKTOP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_DESKTOP="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_DESKTOP" && ac_cv_prog_UP_DESKTOP="no" fi ;; esac fi UP_DESKTOP=$ac_cv_prog_UP_DESKTOP if test -n "$UP_DESKTOP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_DESKTOP" >&5 printf "%s\n" "$UP_DESKTOP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "appstream-util", so it can be a program name with args. set dummy appstream-util; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_APPSTREAM+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$UP_APPSTREAM"; then ac_cv_prog_UP_APPSTREAM="$UP_APPSTREAM" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_APPSTREAM="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_APPSTREAM" && ac_cv_prog_UP_APPSTREAM="no" fi ;; esac fi UP_APPSTREAM=$ac_cv_prog_UP_APPSTREAM if test -n "$UP_APPSTREAM"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_APPSTREAM" >&5 printf "%s\n" "$UP_APPSTREAM" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # determine the GTK version to use { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the GTK version to use" >&5 printf %s "checking the GTK version to use... " >&6; } @%:@ Check whether --with-gtk was given. if test ${with_gtk+y} then : withval=$with_gtk; case "$with_gtk" in 3|4) ;; *) as_fn_error $? "invalid GTK version specified" "$LINENO" 5 ;; esac else case e in @%:@( e) with_gtk=3 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_gtk" >&5 printf "%s\n" "$with_gtk" >&6; } if test "$with_gtk" == "3"; then GTK3_TRUE= GTK3_FALSE='#' else GTK3_TRUE='#' GTK3_FALSE= fi case "$with_gtk" in 3) gtk_version="gtk+-3.0" gtk_version_number="3.16" ;; 4) gtk_version="gtk4" gtk_version_number="4.6" ;; esac if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi if test -z "$PKG_CONFIG"; then as_fn_error $? "pkg-config not found" "$LINENO" 5 fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $gtk_version >= $gtk_version_number" >&5 printf %s "checking for $gtk_version >= $gtk_version_number... " >&6; } if test -n "$LGTK_CFLAGS"; then pkg_cv_LGTK_CFLAGS="$LGTK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_version >= \$gtk_version_number\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_version >= $gtk_version_number") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LGTK_CFLAGS=`$PKG_CONFIG --cflags "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LGTK_LIBS"; then pkg_cv_LGTK_LIBS="$LGTK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_version >= \$gtk_version_number\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_version >= $gtk_version_number") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LGTK_LIBS=`$PKG_CONFIG --libs "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LGTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$gtk_version >= $gtk_version_number" 2>&1` else LGTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$gtk_version >= $gtk_version_number" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LGTK_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ($gtk_version >= $gtk_version_number) were not met: $LGTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LGTK_CFLAGS and LGTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LGTK_CFLAGS and LGTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else LGTK_CFLAGS=$pkg_cv_LGTK_CFLAGS LGTK_LIBS=$pkg_cv_LGTK_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi if test "$with_gtk" = "3"; then if test "$build_mac" = "yes"; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gtk-mac-integration" >&5 printf %s "checking for gtk-mac-integration... " >&6; } if test -n "$INTEGRATION_CFLAGS"; then pkg_cv_INTEGRATION_CFLAGS="$INTEGRATION_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-mac-integration\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-mac-integration") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_INTEGRATION_CFLAGS=`$PKG_CONFIG --cflags "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$INTEGRATION_LIBS"; then pkg_cv_INTEGRATION_LIBS="$INTEGRATION_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-mac-integration\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-mac-integration") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_INTEGRATION_LIBS=`$PKG_CONFIG --libs "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then INTEGRATION_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk-mac-integration" 2>&1` else INTEGRATION_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk-mac-integration" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$INTEGRATION_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtk-mac-integration) were not met: $INTEGRATION_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables INTEGRATION_CFLAGS and INTEGRATION_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables INTEGRATION_CFLAGS and INTEGRATION_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else INTEGRATION_CFLAGS=$pkg_cv_INTEGRATION_CFLAGS INTEGRATION_LIBS=$pkg_cv_INTEGRATION_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libxml-2.0 >= 2.4.0" >&5 printf %s "checking for libxml-2.0 >= 2.4.0... " >&6; } if test -n "$LIBXML2_CFLAGS"; then pkg_cv_LIBXML2_CFLAGS="$LIBXML2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBXML2_LIBS"; then pkg_cv_LIBXML2_LIBS="$LIBXML2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_LIBS=`$PKG_CONFIG --libs "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBXML2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` else LIBXML2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBXML2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libxml-2.0 >= 2.4.0) were not met: $LIBXML2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else LIBXML2_CFLAGS=$pkg_cv_LIBXML2_CFLAGS LIBXML2_LIBS=$pkg_cv_LIBXML2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pangoft2" >&5 printf %s "checking for pangoft2... " >&6; } if test -n "$PANGOFT2_CFLAGS"; then pkg_cv_PANGOFT2_CFLAGS="$PANGOFT2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_CFLAGS=`$PKG_CONFIG --cflags "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$PANGOFT2_LIBS"; then pkg_cv_PANGOFT2_LIBS="$PANGOFT2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_LIBS=`$PKG_CONFIG --libs "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "pangoft2" 2>&1` else PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "pangoft2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PANGOFT2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (pangoft2) were not met: $PANGOFT2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else PANGOFT2_CFLAGS=$pkg_cv_PANGOFT2_CFLAGS PANGOFT2_LIBS=$pkg_cv_PANGOFT2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libavcodec libavformat libavutil libswscale" >&5 printf %s "checking for libavcodec libavformat libavutil libswscale... " >&6; } if test -n "$FFMPEG_CFLAGS"; then pkg_cv_FFMPEG_CFLAGS="$FFMPEG_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_CFLAGS=`$PKG_CONFIG --cflags "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FFMPEG_LIBS"; then pkg_cv_FFMPEG_LIBS="$FFMPEG_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FFMPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` else FFMPEG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FFMPEG_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libavcodec libavformat libavutil libswscale) were not met: $FFMPEG_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else FFMPEG_CFLAGS=$pkg_cv_FFMPEG_CFLAGS FFMPEG_LIBS=$pkg_cv_FFMPEG_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi if test "$build_windows" = "no"; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glu" >&5 printf %s "checking for glu... " >&6; } if test -n "$GLU_CFLAGS"; then pkg_cv_GLU_CFLAGS="$GLU_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_CFLAGS=`$PKG_CONFIG --cflags "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLU_LIBS"; then pkg_cv_GLU_LIBS="$GLU_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_LIBS=`$PKG_CONFIG --libs "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLU_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glu" 2>&1` else GLU_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glu" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLU_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glu) were not met: $GLU_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else GLU_CFLAGS=$pkg_cv_GLU_CFLAGS GLU_LIBS=$pkg_cv_GLU_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for epoxy" >&5 printf %s "checking for epoxy... " >&6; } if test -n "$EPOXY_CFLAGS"; then pkg_cv_EPOXY_CFLAGS="$EPOXY_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_CFLAGS=`$PKG_CONFIG --cflags "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$EPOXY_LIBS"; then pkg_cv_EPOXY_LIBS="$EPOXY_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_LIBS=`$PKG_CONFIG --libs "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then EPOXY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "epoxy" 2>&1` else EPOXY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "epoxy" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$EPOXY_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (epoxy) were not met: $EPOXY_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else EPOXY_CFLAGS=$pkg_cv_EPOXY_CFLAGS EPOXY_LIBS=$pkg_cv_EPOXY_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi # Checking for compilers # C ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in @%:@( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in @%:@( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags__$CFLAGS" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 printf %s "checking whether C compiler accepts $CFLAGS... " >&6; } if eval test \${$as_CACHEVAR+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$as_CACHEVAR=yes" else case e in @%:@( e) eval "$as_CACHEVAR=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ax_check_save_flags ;; esac fi eval ac_res=\$$as_CACHEVAR { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes" then : : else case e in @%:@( e) : ;; esac fi # Fortran 90 ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use '.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else case e in @%:@( e) ac_cv_prog_fc_g=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $@%:@ != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* | mingw* | windows*) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" ;; esac fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5 printf %s "checking for dummy main to link with Fortran libraries... " >&6; } if test ${ac_cv_fc_dummy_main+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_fc_dm_save_LIBS=$LIBS LIBS="$LIBS $FCLIBS" ac_fortran_dm_var=FC_DUMMY_MAIN ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # First, try linking without a dummy main: cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=none else case e in @%:@( e) ac_cv_fortran_dummy_main=unknown ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@define $ac_fortran_dm_var $ac_func #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=$ac_func; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_fc_dm_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_dummy_main" >&5 printf "%s\n" "$ac_cv_fc_dummy_main" >&6; } FC_DUMMY_MAIN=$ac_cv_fc_dummy_main if test "$FC_DUMMY_MAIN" != unknown then : if test $FC_DUMMY_MAIN != none; then printf "%s\n" "@%:@define FC_DUMMY_MAIN $FC_DUMMY_MAIN" >>confdefs.h if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then printf "%s\n" "@%:@define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h fi fi else case e in @%:@( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "linking to Fortran libraries from C fails See 'config.log' for more details" "$LINENO" 5; } ;; esac fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5 printf %s "checking for Fortran name-mangling scheme... " >&6; } if test ${ac_cv_fc_mangling+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FCLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char $ac_func (void); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success=yes; break 2 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char $ac_func (void); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success_extra=yes; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_fc_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore" fi else ac_cv_fc_mangling="unknown" fi else ac_cv_fc_mangling="unknown" fi LIBS=$ac_save_LIBS rm -rf conftest* rm -f cfortran_test* else case e in @%:@( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compile a simple Fortran program See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_mangling" >&5 printf "%s\n" "$ac_cv_fc_mangling" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu case $ac_cv_fc_mangling in "lower case, no underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name" >>confdefs.h ;; "lower case, no underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## __" >>confdefs.h ;; "upper case, no underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME" >>confdefs.h ;; "upper case, no underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## __" >>confdefs.h ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 printf "%s\n" "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu fcflags_save="$FCFLAGS" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use '.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else case e in @%:@( e) ac_cv_prog_fc_g=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu FCFLAGS="$fcflags_save" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f90 files" >&5 printf %s "checking for Fortran flag to compile .f90 files... " >&6; } if test ${ac_cv_fc_srcext_f90+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_ext=f90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_f90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=f90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_f90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.f90 ac_fcflags_srcext=$ac_fcflags_srcext_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f90" >&5 printf "%s\n" "$ac_cv_fc_srcext_f90" >&6; } if test "x$ac_cv_fc_srcext_f90" = xunknown; then as_fn_error $? "Cannot compile .f90 files" "$LINENO" 5 else ac_fc_srcext=f90 if test "x$ac_cv_fc_srcext_f90" = xnone; then ac_fcflags_srcext="" FCFLAGS_f90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_f90 FCFLAGS_f90=$ac_cv_fc_srcext_f90 fi FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .F90 files" >&5 printf %s "checking for Fortran flag to compile .F90 files... " >&6; } if test ${ac_cv_fc_srcext_F90+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_ext=F90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_F90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=F90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_F90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.F90 ac_fcflags_srcext=$ac_fcflags_srcext_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_F90" >&5 printf "%s\n" "$ac_cv_fc_srcext_F90" >&6; } if test "x$ac_cv_fc_srcext_F90" = xunknown; then as_fn_error $? "Cannot compile .F90 files" "$LINENO" 5 else ac_fc_srcext=F90 if test "x$ac_cv_fc_srcext_F90" = xnone; then ac_fcflags_srcext="" FCFLAGS_F90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_F90 FCFLAGS_F90=$ac_cv_fc_srcext_F90 fi FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu as_CACHEVAR=`printf "%s\n" "ax_cv_check_fcflags__$FCFLAGS" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Fortran compiler accepts $FCFLAGS" >&5 printf %s "checking whether Fortran compiler accepts $FCFLAGS... " >&6; } if eval test \${$as_CACHEVAR+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ax_check_save_flags=$FCFLAGS FCFLAGS="$FCFLAGS $FCFLAGS" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : eval "$as_CACHEVAR=yes" else case e in @%:@( e) eval "$as_CACHEVAR=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext FCFLAGS=$ax_check_save_flags ;; esac fi eval ac_res=\$$as_CACHEVAR { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes" then : : else case e in @%:@( e) : ;; esac fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $@%:@ != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* | mingw* | windows*) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" ;; esac fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag needed to accept free-form source" >&5 printf %s "checking for Fortran flag needed to accept free-form source... " >&6; } if test ${ac_cv_fc_freeform+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_fc_freeform=unknown ac_fc_freeform_FCFLAGS_save=$FCFLAGS for ac_flag in none -ffree-form -FR -free -qfree -Mfree -Mfreeform \ -freeform "-f free" -8 +source=free -nfix --nfix -Free do test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_freeform_FCFLAGS_save $ac_flag" cat > conftest.$ac_ext <<_ACEOF program freeform ! FIXME: how to best confuse non-freeform compilers? print *, 'Hello ', & @&t@ 'world.' end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_freeform=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.err conftest.$ac_objext conftest.$ac_ext FCFLAGS=$ac_fc_freeform_FCFLAGS_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_freeform" >&5 printf "%s\n" "$ac_cv_fc_freeform" >&6; } if test "x$ac_cv_fc_freeform" = xunknown; then as_fn_error 77 "Fortran does not accept free-form source" "$LINENO" 5 else if test "x$ac_cv_fc_freeform" != xnone; then FCFLAGS="$FCFLAGS $ac_cv_fc_freeform" fi fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat lic > src/version.h echo "#define FC \""$FC"\"" >> src/version.h echo "#define FCFLAGS \""$FCFLAGS"\"" >> src/version.h echo "#define CC \""$CC"\"" >> src/version.h echo "#define CFLAGS \""$CFLAGS"\"" >> src/version.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the OpenMP specification and flags" >&5 printf %s "checking the OpenMP specification and flags... " >&6; } @%:@ Check whether --enable---disable-openmp was given. if test ${enable___disable_openmp+y} then : enableval=$enable___disable_openmp; with_opemp="no" else case e in @%:@( e) with_openmp="yes" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_openmp" >&5 printf "%s\n" "$with_openmp" >&6; } if test "$with_openmp" = "yes"; then if test -e penmp || test -e mp; then as_fn_error $? "AC@&t@_OPENMP clobbers files named 'mp' and 'penmp'. Aborting configure because one of these files already exists." "$LINENO" 5 fi @%:@ Check whether --enable-openmp was given. if test ${enable_openmp+y} then : enableval=$enable_openmp; fi OPENMP_CFLAGS= if test "$enable_openmp" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to support OpenMP" >&5 printf %s "checking for $CC option to support OpenMP... " >&6; } if test ${ac_cv_prog_c_openmp+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_c_openmp='not found' for ac_option in '' -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp -homp \ -Popenmp --openmp; do ac_save_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $ac_option" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef _OPENMP #error "OpenMP not supported" #endif #include int main (void) { return omp_get_num_threads (); } _ACEOF if ac_fn_c_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef _OPENMP #error "OpenMP not supported" #endif #include int main (void) { return omp_get_num_threads (); } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_prog_c_openmp=$ac_option else case e in @%:@( e) ac_cv_prog_c_openmp='unsupported' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ac_save_CFLAGS if test "$ac_cv_prog_c_openmp" != 'not found'; then break fi done if test "$ac_cv_prog_c_openmp" = 'not found'; then ac_cv_prog_c_openmp='unsupported' elif test "$ac_cv_prog_c_openmp" = ''; then ac_cv_prog_c_openmp='none needed' fi rm -f penmp mp ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_c_openmp" >&5 printf "%s\n" "$ac_cv_prog_c_openmp" >&6; } if test "$ac_cv_prog_c_openmp" != 'unsupported' && \ test "$ac_cv_prog_c_openmp" != 'none needed'; then OPENMP_CFLAGS="$ac_cv_prog_c_openmp" fi fi if test "${OPENMP_CFLAGS}" != ""; then OPENMP_TRUE= OPENMP_FALSE='#' else OPENMP_TRUE='#' OPENMP_FALSE= fi fi ac_config_files="$ac_config_files Makefile data/Makefile man/Makefile locale/Makefile src/Makefile src/startup-testing/Makefile" ac_config_headers="$ac_config_headers config.h" if test "$build_windows" = "yes"; then ac_config_files="$ac_config_files misc/win/atomes.rc:misc/win/atomes.rc.in misc/win/startup.rc:misc/win/startup.rc.in" fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # 'ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIB@&t@OBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; esac if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LINUX_TRUE}" && test -z "${LINUX_FALSE}"; then as_fn_error $? "conditional \"LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WINDOWS_TRUE}" && test -z "${WINDOWS_FALSE}"; then as_fn_error $? "conditional \"WINDOWS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OSX_TRUE}" && test -z "${OSX_FALSE}"; then as_fn_error $? "conditional \"OSX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK3_TRUE}" && test -z "${GTK3_FALSE}"; then as_fn_error $? "conditional \"GTK3\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OPENMP_TRUE}" && test -z "${OPENMP_FALSE}"; then as_fn_error $? "conditional \"OPENMP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in @%:@( e) case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in @%:@( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in @%:@( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by atomes $as_me 1.3.1, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ '$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . atomes home page: ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ atomes config.status 1.3.1 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: '$1' Try '$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: '$1' Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX @%:@@%:@ Running $as_me. @%:@@%:@ _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "locale/Makefile") CONFIG_FILES="$CONFIG_FILES locale/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/startup-testing/Makefile") CONFIG_FILES="$CONFIG_FILES src/startup-testing/Makefile" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "misc/win/atomes.rc") CONFIG_FILES="$CONFIG_FILES misc/win/atomes.rc:misc/win/atomes.rc.in" ;; "misc/win/startup.rc") CONFIG_FILES="$CONFIG_FILES misc/win/startup.rc:misc/win/startup.rc.in" ;; *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with './config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script 'defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in @%:@( *\'*) : eval set x "$CONFIG_FILES" ;; @%:@( *) : set x $CONFIG_FILES ;; @%:@( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See 'config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi atomes_1.3.1/autom4te.cache/output.20000664000175000017500000113426315212624223016746 0ustar lerouxleroux@%:@! /bin/sh @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.72 for atomes 1.3.1. @%:@ @%:@ Report bugs to . @%:@ @%:@ @%:@ Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, @%:@ Inc. @%:@ @%:@ @%:@ This configure script is free software; the Free Software Foundation @%:@ gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in @%:@( e) case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case e in @%:@( e) case \`(set -o) 2>/dev/null\` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else case e in @%:@( e) exitcode=1; echo positional parameters were not saved. ;; esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else case e in @%:@( e) as_have_required=no ;; esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else case e in @%:@( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in @%:@( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else case e in @%:@( e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi ;; esac fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: atomes@ipcms.unistra.fr about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi ;; esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in @%:@( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in @%:@( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' t clear :clear s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIB@&t@OBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='atomes' PACKAGE_TARNAME='atomes' PACKAGE_VERSION='1.3.1' PACKAGE_STRING='atomes 1.3.1' PACKAGE_BUGREPORT='atomes@ipcms.unistra.fr' PACKAGE_URL='https://atomes.ipcms.fr' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIB@&t@OBJS OPENMP_FALSE OPENMP_TRUE OPENMP_CFLAGS FCFLAGS_F90 FCFLAGS_f90 FCLIBS ac_ct_FC FCFLAGS FC EPOXY_LIBS EPOXY_CFLAGS GLU_LIBS GLU_CFLAGS FFMPEG_LIBS FFMPEG_CFLAGS PANGOFT2_LIBS PANGOFT2_CFLAGS LIBXML2_LIBS LIBXML2_CFLAGS INTEGRATION_LIBS INTEGRATION_CFLAGS LGTK_LIBS LGTK_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH GTK3_FALSE GTK3_TRUE UP_APPSTREAM UP_DESKTOP UP_MIME PKG_CONFIG WINDRES OSX_FALSE OSX_TRUE WINDOWS_FALSE WINDOWS_TRUE LINUX_FALSE LINUX_TRUE host_os host_vendor host_cpu host build_os build_vendor build_cpu build am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC ATOMES_PATCH_VERSION ATOMES_MINOR_VERSION ATOMES_MAJOR_VERSION am__xargs_n am__rm_f_notfound AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking with_gtk enable___disable_openmp enable_openmp ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR LGTK_CFLAGS LGTK_LIBS INTEGRATION_CFLAGS INTEGRATION_LIBS LIBXML2_CFLAGS LIBXML2_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS FFMPEG_CFLAGS FFMPEG_LIBS GLU_CFLAGS GLU_LIBS EPOXY_CFLAGS EPOXY_LIBS FC FCFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: '$ac_option' Try '$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF 'configure' configures atomes 1.3.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @<:@@S|@ac_default_prefix@:>@ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX @<:@PREFIX@:>@ By default, 'make install' will install all the files in '$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify an installation prefix other than '$ac_default_prefix' using '--prefix', for instance '--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root @<:@DATAROOTDIR/doc/atomes@:>@ --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of atomes 1.3.1:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-openmp disable OpenMP thread parallelisation (default: no) --disable-openmp do not use OpenMP Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gtk=3|4 the GTK version to use (default: 3) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path LGTK_CFLAGS C compiler flags for LGTK, overriding pkg-config LGTK_LIBS linker flags for LGTK, overriding pkg-config INTEGRATION_CFLAGS C compiler flags for INTEGRATION, overriding pkg-config INTEGRATION_LIBS linker flags for INTEGRATION, overriding pkg-config LIBXML2_CFLAGS C compiler flags for LIBXML2, overriding pkg-config LIBXML2_LIBS linker flags for LIBXML2, overriding pkg-config PANGOFT2_CFLAGS C compiler flags for PANGOFT2, overriding pkg-config PANGOFT2_LIBS linker flags for PANGOFT2, overriding pkg-config FFMPEG_CFLAGS C compiler flags for FFMPEG, overriding pkg-config FFMPEG_LIBS linker flags for FFMPEG, overriding pkg-config GLU_CFLAGS C compiler flags for GLU, overriding pkg-config GLU_LIBS linker flags for GLU, overriding pkg-config EPOXY_CFLAGS C compiler flags for EPOXY, overriding pkg-config EPOXY_LIBS linker flags for EPOXY, overriding pkg-config FC Fortran compiler command FCFLAGS Fortran compiler flags Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . atomes home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF atomes configure 1.3.1 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## @%:@ ac_fn_c_try_compile LINENO @%:@ -------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_compile @%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES @%:@ ------------------------------------------------------- @%:@ Tests whether HEADER exists and can be compiled using the include files in @%:@ INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @%:@include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else case e in @%:@( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } @%:@ ac_fn_c_check_header_compile @%:@ ac_fn_fc_try_compile LINENO @%:@ --------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_fc_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_fc_try_compile @%:@ ac_fn_c_try_link LINENO @%:@ ----------------------- @%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_link ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?@<:@ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by atomes $as_me 1.3.1, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "@%:@define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in @%:@( */*) : ;; @%:@( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See 'config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (char **p, int i) { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* C89 style stringification. */ #define noexpand_stringify(a) #a const char *stringified = noexpand_stringify(arbitrary+token=sequence); /* C89 style token pasting. Exercises some of the corner cases that e.g. old MSVC gets wrong, but not very hard. */ #define noexpand_concat(a,b) a##b #define expand_concat(a,b) noexpand_concat(a,b) extern int vA; extern int vbee; #define aye A #define bee B int *pvA = &expand_concat(v,aye); int *pvbee = &noexpand_concat(v,bee); /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' /* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif // See if C++-style comments work. #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Work around memory leak warnings. free (ia); // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' /* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" # Auxiliary files required by this configure script. ac_aux_files="config.guess config.sub compile missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else case e in @%:@( e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; esac fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_@&t@config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_@&t@config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_@&t@configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.18' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in @%:@(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir ;; esac fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sleep supports fractional seconds" >&5 printf %s "checking whether sleep supports fractional seconds... " >&6; } if test ${am_cv_sleep_fractional_seconds+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if sleep 0.001 2>/dev/null then : am_cv_sleep_fractional_seconds=yes else case e in @%:@( e) am_cv_sleep_fractional_seconds=no ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_sleep_fractional_seconds" >&5 printf "%s\n" "$am_cv_sleep_fractional_seconds" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking filesystem timestamp resolution" >&5 printf %s "checking filesystem timestamp resolution... " >&6; } if test ${am_cv_filesystem_timestamp_resolution+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) # Default to the worst case. am_cv_filesystem_timestamp_resolution=2 # Only try to go finer than 1 sec if sleep can do it. # Don't try 1 sec, because if 0.01 sec and 0.1 sec don't work, # - 1 sec is not much of a win compared to 2 sec, and # - it takes 2 seconds to perform the test whether 1 sec works. # # Instead, just use the default 2s on platforms that have 1s resolution, # accept the extra 1s delay when using $sleep in the Automake tests, in # exchange for not incurring the 2s delay for running the test for all # packages. # am_try_resolutions= if test "$am_cv_sleep_fractional_seconds" = yes; then # Even a millisecond often causes a bunch of false positives, # so just try a hundredth of a second. The time saved between .001 and # .01 is not terribly consequential. am_try_resolutions="0.01 0.1 $am_try_resolutions" fi # In order to catch current-generation FAT out, we must *modify* files # that already exist; the *creation* timestamp is finer. Use names # that make ls -t sort them differently when they have equal # timestamps than when they have distinct timestamps, keeping # in mind that ls -t prints the *newest* file first. rm -f conftest.ts? : > conftest.ts1 : > conftest.ts2 : > conftest.ts3 # Make sure ls -t actually works. Do 'set' in a subshell so we don't # clobber the current shell's arguments. (Outer-level square brackets # are removed by m4; they're present so that m4 does not expand # ; be careful, easy to get confused.) if ( set X `ls -t conftest.ts[12]` && { test "$*" != "X conftest.ts1 conftest.ts2" || test "$*" != "X conftest.ts2 conftest.ts1"; } ); then :; else # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". printf "%s\n" ""Bad output from ls -t: \"`ls -t conftest.ts[12]`\""" >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "ls -t produces unexpected output. Make sure there is not a broken ls alias in your environment. See 'config.log' for more details" "$LINENO" 5; } fi for am_try_res in $am_try_resolutions; do # Any one fine-grained sleep might happen to cross the boundary # between two values of a coarser actual resolution, but if we do # two fine-grained sleeps in a row, at least one of them will fall # entirely within a coarse interval. echo alpha > conftest.ts1 sleep $am_try_res echo beta > conftest.ts2 sleep $am_try_res echo gamma > conftest.ts3 # We assume that 'ls -t' will make use of high-resolution # timestamps if the operating system supports them at all. if (set X `ls -t conftest.ts?` && test "$2" = conftest.ts3 && test "$3" = conftest.ts2 && test "$4" = conftest.ts1); then # # Ok, ls -t worked. If we're at a resolution of 1 second, we're done, # because we don't need to test make. make_ok=true if test $am_try_res != 1; then # But if we've succeeded so far with a subsecond resolution, we # have one more thing to check: make. It can happen that # everything else supports the subsecond mtimes, but make doesn't; # notably on macOS, which ships make 3.81 from 2006 (the last one # released under GPLv2). https://bugs.gnu.org/68808 # # We test $MAKE if it is defined in the environment, else "make". # It might get overridden later, but our hope is that in practice # it does not matter: it is the system "make" which is (by far) # the most likely to be broken, whereas if the user overrides it, # probably they did so with a better, or at least not worse, make. # https://lists.gnu.org/archive/html/automake/2024-06/msg00051.html # # Create a Makefile (real tab character here): rm -f conftest.mk echo 'conftest.ts1: conftest.ts2' >conftest.mk echo ' touch conftest.ts2' >>conftest.mk # # Now, running # touch conftest.ts1; touch conftest.ts2; make # should touch ts1 because ts2 is newer. This could happen by luck, # but most often, it will fail if make's support is insufficient. So # test for several consecutive successes. # # (We reuse conftest.ts[12] because we still want to modify existing # files, not create new ones, per above.) n=0 make=${MAKE-make} until test $n -eq 3; do echo one > conftest.ts1 sleep $am_try_res echo two > conftest.ts2 # ts2 should now be newer than ts1 if $make -f conftest.mk | grep 'up to date' >/dev/null; then make_ok=false break # out of $n loop fi n=`expr $n + 1` done fi # if $make_ok; then # Everything we know to check worked out, so call this resolution good. am_cv_filesystem_timestamp_resolution=$am_try_res break # out of $am_try_res loop fi # Otherwise, we'll go on to check the next resolution. fi done rm -f conftest.ts? # (end _am_filesystem_timestamp_resolution) ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_filesystem_timestamp_resolution" >&5 printf "%s\n" "$am_cv_filesystem_timestamp_resolution" >&6; } # This check should not be cached, as it may vary across builds of # different projects. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). am_build_env_is_sane=no am_has_slept=no rm -f conftest.file for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi test "$2" = conftest.file ); then am_build_env_is_sane=yes break fi # Just in case. sleep "$am_cv_filesystem_timestamp_resolution" am_has_slept=yes done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_build_env_is_sane" >&5 printf "%s\n" "$am_build_env_is_sane" >&6; } if test "$am_build_env_is_sane" = no; then as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if test -e conftest.file || grep 'slept: no' conftest.file >/dev/null 2>&1 then : else case e in @%:@( e) ( sleep "$am_cv_filesystem_timestamp_resolution" ) & am_sleep_pid=$! ;; esac fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was 's,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ *'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS ;; esac fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use plain mkdir -p, # in the hope it doesn't have the bugs of ancient mkdir. MKDIR_P='mkdir -p' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make ;; esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AM_DEFAULT_VERBOSITY=1 @%:@ Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } AM_BACKSLASH='\' am__rm_f_notfound= if (rm -f && rm -fr && rm -rf) 2>/dev/null then : else case e in @%:@( e) am__rm_f_notfound='""' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking xargs -n works" >&5 printf %s "checking xargs -n works... " >&6; } if test ${am_cv_xargs_n_works+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "`echo 1 2 3 | xargs -n2 echo`" = "1 2 3" then : am_cv_xargs_n_works=yes else case e in @%:@( e) am_cv_xargs_n_works=no ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_xargs_n_works" >&5 printf "%s\n" "$am_cv_xargs_n_works" >&6; } if test "$am_cv_xargs_n_works" = yes then : am__xargs_n='xargs -n' else case e in @%:@( e) am__xargs_n='am__xargs_n () { shift; sed "s/ /\\n/g" | while read am__xargs_n_arg; do "" "$am__xargs_n_arg"; done; }' ;; esac fi if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='atomes' VERSION='1.3.1' printf "%s\n" "@%:@define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "@%:@define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar plaintar pax cpio none' # The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 printf %s "checking whether UID '$am_uid' is supported by ustar format... " >&6; } if test x$am_uid = xunknown; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&5 printf "%s\n" "$as_me: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&2;} elif test $am_uid -le $am_max_uid; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } _am_tools=none fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 printf %s "checking whether GID '$am_gid' is supported by ustar format... " >&6; } if test x$gm_gid = xunknown; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&5 printf "%s\n" "$as_me: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&2;} elif test $am_gid -le $am_max_gid; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } _am_tools=none fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 printf %s "checking how to create a ustar tar archive... " >&6; } # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_ustar-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do { echo "$as_me:$LINENO: $_am_tar --version" >&5 ($_am_tar --version) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && break done am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x ustar -w "$$tardir"' am__tar_='pax -L -x ustar -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H ustar -L' am__tar_='find "$tardir" -print | cpio -o -H ustar -L' am__untar='cpio -i -H ustar -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_ustar}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -rf conftest.dir if test -s conftest.tar; then { echo "$as_me:$LINENO: $am__untar &5 ($am__untar &5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 (cat conftest.dir/file) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir if test ${am_cv_prog_tar_ustar+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) am_cv_prog_tar_ustar=$_am_tool ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 printf "%s\n" "$am_cv_prog_tar_ustar" >&6; } # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi printf "%s\n" "@%:@define ATOMES_MAJOR_VERSION 1" >>confdefs.h ATOMES_MAJOR_VERSION=1 printf "%s\n" "@%:@define ATOMES_MINOR_VERSION 3" >>confdefs.h ATOMES_MINOR_VERSION=3 printf "%s\n" "@%:@define ATOMES_PATCH_VERSION 1" >>confdefs.h ATOMES_PATCH_VERSION=1 ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. # So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else case e in @%:@( e) ac_file='' ;; esac fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See 'config.log' for more details" "$LINENO" 5; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) # catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will # work properly (i.e., refer to 'conftest.exe'), while it won't with # 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else case e in @%:@( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include int main (void) { FILE *f = fopen ("conftest.out", "w"); if (!f) return 1; return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use '--host'. See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext \ conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in @%:@( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in @%:@( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in @%:@( '0:this is the am__doit target') : case $s in @%:@( BSD) : am__include='.include' am__quote='"' ;; @%:@( *) : am__include='include' am__quote='' ;; esac ;; @%:@( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } @%:@ Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "@%:@define STDC_HEADERS 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes then : printf "%s\n" "@%:@define HAVE_LIBINTL_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes then : printf "%s\n" "@%:@define HAVE_LOCALE_H 1" >>confdefs.h fi # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac build_linux=no build_windows=no build_mac=no # Detect the target system case "${host_os}" in linux*) build_linux=yes echo "Building Linux application" ;; cygwin*|mingw*) build_windows=yes echo "Building Windows application" ;; darwin*) build_mac=yes echo "Building macOS application" ;; *) as_fn_error $? "\"OS $host_os is not supported\"" "$LINENO" 5 ;; esac # Pass the conditionals to automake if test "$build_linux" = "yes"; then LINUX_TRUE= LINUX_FALSE='#' else LINUX_TRUE='#' LINUX_FALSE= fi if test "$build_windows" = "yes"; then WINDOWS_TRUE= WINDOWS_FALSE='#' else WINDOWS_TRUE='#' WINDOWS_FALSE= fi if test "$build_mac" = "yes"; then OSX_TRUE= OSX_FALSE='#' else OSX_TRUE='#' OSX_FALSE= fi if test "$build_windows" = "yes"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_WINDRES+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 printf "%s\n" "$WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_WINDRES+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 printf "%s\n" "$ac_ct_WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="no" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi if test "$WINDRES" = no; then as_fn_error $? "*** Could not find an implementation of windres in your PATH." "$LINENO" 5 fi fi # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PKG_CONFIG" && ac_cv_prog_PKG_CONFIG="no" fi ;; esac fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-mime-database", so it can be a program name with args. set dummy update-mime-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_MIME+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$UP_MIME"; then ac_cv_prog_UP_MIME="$UP_MIME" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_MIME="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_MIME" && ac_cv_prog_UP_MIME="no" fi ;; esac fi UP_MIME=$ac_cv_prog_UP_MIME if test -n "$UP_MIME"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_MIME" >&5 printf "%s\n" "$UP_MIME" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-desktop-database", so it can be a program name with args. set dummy update-desktop-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_DESKTOP+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$UP_DESKTOP"; then ac_cv_prog_UP_DESKTOP="$UP_DESKTOP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_DESKTOP="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_DESKTOP" && ac_cv_prog_UP_DESKTOP="no" fi ;; esac fi UP_DESKTOP=$ac_cv_prog_UP_DESKTOP if test -n "$UP_DESKTOP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_DESKTOP" >&5 printf "%s\n" "$UP_DESKTOP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "appstream-util", so it can be a program name with args. set dummy appstream-util; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_APPSTREAM+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$UP_APPSTREAM"; then ac_cv_prog_UP_APPSTREAM="$UP_APPSTREAM" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_APPSTREAM="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_APPSTREAM" && ac_cv_prog_UP_APPSTREAM="no" fi ;; esac fi UP_APPSTREAM=$ac_cv_prog_UP_APPSTREAM if test -n "$UP_APPSTREAM"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_APPSTREAM" >&5 printf "%s\n" "$UP_APPSTREAM" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # determine the GTK version to use { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the GTK version to use" >&5 printf %s "checking the GTK version to use... " >&6; } @%:@ Check whether --with-gtk was given. if test ${with_gtk+y} then : withval=$with_gtk; case "$with_gtk" in 3|4) ;; *) as_fn_error $? "invalid GTK version specified" "$LINENO" 5 ;; esac else case e in @%:@( e) with_gtk=3 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_gtk" >&5 printf "%s\n" "$with_gtk" >&6; } if test "$with_gtk" == "3"; then GTK3_TRUE= GTK3_FALSE='#' else GTK3_TRUE='#' GTK3_FALSE= fi case "$with_gtk" in 3) gtk_version="gtk+-3.0" gtk_version_number="3.16" ;; 4) gtk_version="gtk4" gtk_version_number="4.6" ;; esac if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi if test -z "$PKG_CONFIG"; then as_fn_error $? "pkg-config not found" "$LINENO" 5 fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $gtk_version >= $gtk_version_number" >&5 printf %s "checking for $gtk_version >= $gtk_version_number... " >&6; } if test -n "$LGTK_CFLAGS"; then pkg_cv_LGTK_CFLAGS="$LGTK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_version >= \$gtk_version_number\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_version >= $gtk_version_number") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LGTK_CFLAGS=`$PKG_CONFIG --cflags "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LGTK_LIBS"; then pkg_cv_LGTK_LIBS="$LGTK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_version >= \$gtk_version_number\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_version >= $gtk_version_number") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LGTK_LIBS=`$PKG_CONFIG --libs "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LGTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$gtk_version >= $gtk_version_number" 2>&1` else LGTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$gtk_version >= $gtk_version_number" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LGTK_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ($gtk_version >= $gtk_version_number) were not met: $LGTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LGTK_CFLAGS and LGTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LGTK_CFLAGS and LGTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else LGTK_CFLAGS=$pkg_cv_LGTK_CFLAGS LGTK_LIBS=$pkg_cv_LGTK_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi if test "$with_gtk" = "3"; then if test "$build_mac" = "yes"; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gtk-mac-integration" >&5 printf %s "checking for gtk-mac-integration... " >&6; } if test -n "$INTEGRATION_CFLAGS"; then pkg_cv_INTEGRATION_CFLAGS="$INTEGRATION_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-mac-integration\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-mac-integration") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_INTEGRATION_CFLAGS=`$PKG_CONFIG --cflags "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$INTEGRATION_LIBS"; then pkg_cv_INTEGRATION_LIBS="$INTEGRATION_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-mac-integration\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-mac-integration") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_INTEGRATION_LIBS=`$PKG_CONFIG --libs "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then INTEGRATION_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk-mac-integration" 2>&1` else INTEGRATION_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk-mac-integration" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$INTEGRATION_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtk-mac-integration) were not met: $INTEGRATION_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables INTEGRATION_CFLAGS and INTEGRATION_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables INTEGRATION_CFLAGS and INTEGRATION_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else INTEGRATION_CFLAGS=$pkg_cv_INTEGRATION_CFLAGS INTEGRATION_LIBS=$pkg_cv_INTEGRATION_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libxml-2.0 >= 2.4.0" >&5 printf %s "checking for libxml-2.0 >= 2.4.0... " >&6; } if test -n "$LIBXML2_CFLAGS"; then pkg_cv_LIBXML2_CFLAGS="$LIBXML2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBXML2_LIBS"; then pkg_cv_LIBXML2_LIBS="$LIBXML2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_LIBS=`$PKG_CONFIG --libs "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBXML2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` else LIBXML2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBXML2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libxml-2.0 >= 2.4.0) were not met: $LIBXML2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else LIBXML2_CFLAGS=$pkg_cv_LIBXML2_CFLAGS LIBXML2_LIBS=$pkg_cv_LIBXML2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pangoft2" >&5 printf %s "checking for pangoft2... " >&6; } if test -n "$PANGOFT2_CFLAGS"; then pkg_cv_PANGOFT2_CFLAGS="$PANGOFT2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_CFLAGS=`$PKG_CONFIG --cflags "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$PANGOFT2_LIBS"; then pkg_cv_PANGOFT2_LIBS="$PANGOFT2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_LIBS=`$PKG_CONFIG --libs "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "pangoft2" 2>&1` else PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "pangoft2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PANGOFT2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (pangoft2) were not met: $PANGOFT2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else PANGOFT2_CFLAGS=$pkg_cv_PANGOFT2_CFLAGS PANGOFT2_LIBS=$pkg_cv_PANGOFT2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libavcodec libavformat libavutil libswscale" >&5 printf %s "checking for libavcodec libavformat libavutil libswscale... " >&6; } if test -n "$FFMPEG_CFLAGS"; then pkg_cv_FFMPEG_CFLAGS="$FFMPEG_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_CFLAGS=`$PKG_CONFIG --cflags "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FFMPEG_LIBS"; then pkg_cv_FFMPEG_LIBS="$FFMPEG_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FFMPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` else FFMPEG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FFMPEG_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libavcodec libavformat libavutil libswscale) were not met: $FFMPEG_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else FFMPEG_CFLAGS=$pkg_cv_FFMPEG_CFLAGS FFMPEG_LIBS=$pkg_cv_FFMPEG_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi if test "$build_windows" = "no"; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glu" >&5 printf %s "checking for glu... " >&6; } if test -n "$GLU_CFLAGS"; then pkg_cv_GLU_CFLAGS="$GLU_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_CFLAGS=`$PKG_CONFIG --cflags "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLU_LIBS"; then pkg_cv_GLU_LIBS="$GLU_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_LIBS=`$PKG_CONFIG --libs "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLU_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glu" 2>&1` else GLU_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glu" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLU_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glu) were not met: $GLU_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else GLU_CFLAGS=$pkg_cv_GLU_CFLAGS GLU_LIBS=$pkg_cv_GLU_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for epoxy" >&5 printf %s "checking for epoxy... " >&6; } if test -n "$EPOXY_CFLAGS"; then pkg_cv_EPOXY_CFLAGS="$EPOXY_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_CFLAGS=`$PKG_CONFIG --cflags "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$EPOXY_LIBS"; then pkg_cv_EPOXY_LIBS="$EPOXY_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_LIBS=`$PKG_CONFIG --libs "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then EPOXY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "epoxy" 2>&1` else EPOXY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "epoxy" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$EPOXY_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (epoxy) were not met: $EPOXY_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else EPOXY_CFLAGS=$pkg_cv_EPOXY_CFLAGS EPOXY_LIBS=$pkg_cv_EPOXY_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi # Checking for compilers # C ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in @%:@( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in @%:@( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags__$CFLAGS" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 printf %s "checking whether C compiler accepts $CFLAGS... " >&6; } if eval test \${$as_CACHEVAR+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$as_CACHEVAR=yes" else case e in @%:@( e) eval "$as_CACHEVAR=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ax_check_save_flags ;; esac fi eval ac_res=\$$as_CACHEVAR { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes" then : : else case e in @%:@( e) : ;; esac fi # Fortran 90 ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use '.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else case e in @%:@( e) ac_cv_prog_fc_g=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $@%:@ != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* | mingw* | windows*) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" ;; esac fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5 printf %s "checking for dummy main to link with Fortran libraries... " >&6; } if test ${ac_cv_fc_dummy_main+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_fc_dm_save_LIBS=$LIBS LIBS="$LIBS $FCLIBS" ac_fortran_dm_var=FC_DUMMY_MAIN ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # First, try linking without a dummy main: cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=none else case e in @%:@( e) ac_cv_fortran_dummy_main=unknown ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@define $ac_fortran_dm_var $ac_func #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=$ac_func; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_fc_dm_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_dummy_main" >&5 printf "%s\n" "$ac_cv_fc_dummy_main" >&6; } FC_DUMMY_MAIN=$ac_cv_fc_dummy_main if test "$FC_DUMMY_MAIN" != unknown then : if test $FC_DUMMY_MAIN != none; then printf "%s\n" "@%:@define FC_DUMMY_MAIN $FC_DUMMY_MAIN" >>confdefs.h if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then printf "%s\n" "@%:@define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h fi fi else case e in @%:@( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "linking to Fortran libraries from C fails See 'config.log' for more details" "$LINENO" 5; } ;; esac fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5 printf %s "checking for Fortran name-mangling scheme... " >&6; } if test ${ac_cv_fc_mangling+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FCLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char $ac_func (void); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success=yes; break 2 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char $ac_func (void); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success_extra=yes; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_fc_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore" fi else ac_cv_fc_mangling="unknown" fi else ac_cv_fc_mangling="unknown" fi LIBS=$ac_save_LIBS rm -rf conftest* rm -f cfortran_test* else case e in @%:@( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compile a simple Fortran program See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_mangling" >&5 printf "%s\n" "$ac_cv_fc_mangling" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu case $ac_cv_fc_mangling in "lower case, no underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name" >>confdefs.h ;; "lower case, no underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## __" >>confdefs.h ;; "upper case, no underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME" >>confdefs.h ;; "upper case, no underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## __" >>confdefs.h ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 printf "%s\n" "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu fcflags_save="$FCFLAGS" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use '.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else case e in @%:@( e) ac_cv_prog_fc_g=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu FCFLAGS="$fcflags_save" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f90 files" >&5 printf %s "checking for Fortran flag to compile .f90 files... " >&6; } if test ${ac_cv_fc_srcext_f90+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_ext=f90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_f90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=f90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_f90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.f90 ac_fcflags_srcext=$ac_fcflags_srcext_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f90" >&5 printf "%s\n" "$ac_cv_fc_srcext_f90" >&6; } if test "x$ac_cv_fc_srcext_f90" = xunknown; then as_fn_error $? "Cannot compile .f90 files" "$LINENO" 5 else ac_fc_srcext=f90 if test "x$ac_cv_fc_srcext_f90" = xnone; then ac_fcflags_srcext="" FCFLAGS_f90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_f90 FCFLAGS_f90=$ac_cv_fc_srcext_f90 fi FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .F90 files" >&5 printf %s "checking for Fortran flag to compile .F90 files... " >&6; } if test ${ac_cv_fc_srcext_F90+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_ext=F90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_F90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=F90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_F90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.F90 ac_fcflags_srcext=$ac_fcflags_srcext_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_F90" >&5 printf "%s\n" "$ac_cv_fc_srcext_F90" >&6; } if test "x$ac_cv_fc_srcext_F90" = xunknown; then as_fn_error $? "Cannot compile .F90 files" "$LINENO" 5 else ac_fc_srcext=F90 if test "x$ac_cv_fc_srcext_F90" = xnone; then ac_fcflags_srcext="" FCFLAGS_F90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_F90 FCFLAGS_F90=$ac_cv_fc_srcext_F90 fi FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu as_CACHEVAR=`printf "%s\n" "ax_cv_check_fcflags__$FCFLAGS" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Fortran compiler accepts $FCFLAGS" >&5 printf %s "checking whether Fortran compiler accepts $FCFLAGS... " >&6; } if eval test \${$as_CACHEVAR+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ax_check_save_flags=$FCFLAGS FCFLAGS="$FCFLAGS $FCFLAGS" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : eval "$as_CACHEVAR=yes" else case e in @%:@( e) eval "$as_CACHEVAR=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext FCFLAGS=$ax_check_save_flags ;; esac fi eval ac_res=\$$as_CACHEVAR { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes" then : : else case e in @%:@( e) : ;; esac fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $@%:@ != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* | mingw* | windows*) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" ;; esac fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag needed to accept free-form source" >&5 printf %s "checking for Fortran flag needed to accept free-form source... " >&6; } if test ${ac_cv_fc_freeform+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_fc_freeform=unknown ac_fc_freeform_FCFLAGS_save=$FCFLAGS for ac_flag in none -ffree-form -FR -free -qfree -Mfree -Mfreeform \ -freeform "-f free" -8 +source=free -nfix --nfix -Free do test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_freeform_FCFLAGS_save $ac_flag" cat > conftest.$ac_ext <<_ACEOF program freeform ! FIXME: how to best confuse non-freeform compilers? print *, 'Hello ', & @&t@ 'world.' end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_freeform=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.err conftest.$ac_objext conftest.$ac_ext FCFLAGS=$ac_fc_freeform_FCFLAGS_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_freeform" >&5 printf "%s\n" "$ac_cv_fc_freeform" >&6; } if test "x$ac_cv_fc_freeform" = xunknown; then as_fn_error 77 "Fortran does not accept free-form source" "$LINENO" 5 else if test "x$ac_cv_fc_freeform" != xnone; then FCFLAGS="$FCFLAGS $ac_cv_fc_freeform" fi fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat lic > src/version.h echo "#define FC \""$FC"\"" >> src/version.h echo "#define FCFLAGS \""$FCFLAGS"\"" >> src/version.h echo "#define CC \""$CC"\"" >> src/version.h echo "#define CFLAGS \""$CFLAGS"\"" >> src/version.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the OpenMP specification and flags" >&5 printf %s "checking the OpenMP specification and flags... " >&6; } @%:@ Check whether --enable---disable-openmp was given. if test ${enable___disable_openmp+y} then : enableval=$enable___disable_openmp; with_opemp="no" else case e in @%:@( e) with_openmp="yes" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_openmp" >&5 printf "%s\n" "$with_openmp" >&6; } if test "$with_openmp" = "yes"; then if test -e penmp || test -e mp; then as_fn_error $? "AC@&t@_OPENMP clobbers files named 'mp' and 'penmp'. Aborting configure because one of these files already exists." "$LINENO" 5 fi @%:@ Check whether --enable-openmp was given. if test ${enable_openmp+y} then : enableval=$enable_openmp; fi OPENMP_CFLAGS= if test "$enable_openmp" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to support OpenMP" >&5 printf %s "checking for $CC option to support OpenMP... " >&6; } if test ${ac_cv_prog_c_openmp+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_c_openmp='not found' for ac_option in '' -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp -homp \ -Popenmp --openmp; do ac_save_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $ac_option" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef _OPENMP #error "OpenMP not supported" #endif #include int main (void) { return omp_get_num_threads (); } _ACEOF if ac_fn_c_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef _OPENMP #error "OpenMP not supported" #endif #include int main (void) { return omp_get_num_threads (); } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_prog_c_openmp=$ac_option else case e in @%:@( e) ac_cv_prog_c_openmp='unsupported' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ac_save_CFLAGS if test "$ac_cv_prog_c_openmp" != 'not found'; then break fi done if test "$ac_cv_prog_c_openmp" = 'not found'; then ac_cv_prog_c_openmp='unsupported' elif test "$ac_cv_prog_c_openmp" = ''; then ac_cv_prog_c_openmp='none needed' fi rm -f penmp mp ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_c_openmp" >&5 printf "%s\n" "$ac_cv_prog_c_openmp" >&6; } if test "$ac_cv_prog_c_openmp" != 'unsupported' && \ test "$ac_cv_prog_c_openmp" != 'none needed'; then OPENMP_CFLAGS="$ac_cv_prog_c_openmp" fi fi if test "${OPENMP_CFLAGS}" != ""; then OPENMP_TRUE= OPENMP_FALSE='#' else OPENMP_TRUE='#' OPENMP_FALSE= fi fi ac_config_files="$ac_config_files Makefile data/Makefile man/Makefile locale/Makefile src/Makefile src/startup-testing/Makefile" ac_config_headers="$ac_config_headers config.h" if test "$build_windows" = "yes"; then ac_config_files="$ac_config_files misc/win/atomes.rc:misc/win/atomes.rc.in misc/win/startup.rc:misc/win/startup.rc.in" fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # 'ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIB@&t@OBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; esac if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LINUX_TRUE}" && test -z "${LINUX_FALSE}"; then as_fn_error $? "conditional \"LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WINDOWS_TRUE}" && test -z "${WINDOWS_FALSE}"; then as_fn_error $? "conditional \"WINDOWS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OSX_TRUE}" && test -z "${OSX_FALSE}"; then as_fn_error $? "conditional \"OSX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK3_TRUE}" && test -z "${GTK3_FALSE}"; then as_fn_error $? "conditional \"GTK3\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OPENMP_TRUE}" && test -z "${OPENMP_FALSE}"; then as_fn_error $? "conditional \"OPENMP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in @%:@( e) case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in @%:@( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in @%:@( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by atomes $as_me 1.3.1, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ '$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . atomes home page: ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ atomes config.status 1.3.1 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: '$1' Try '$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: '$1' Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX @%:@@%:@ Running $as_me. @%:@@%:@ _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "locale/Makefile") CONFIG_FILES="$CONFIG_FILES locale/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/startup-testing/Makefile") CONFIG_FILES="$CONFIG_FILES src/startup-testing/Makefile" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "misc/win/atomes.rc") CONFIG_FILES="$CONFIG_FILES misc/win/atomes.rc:misc/win/atomes.rc.in" ;; "misc/win/startup.rc") CONFIG_FILES="$CONFIG_FILES misc/win/startup.rc:misc/win/startup.rc.in" ;; *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with './config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script 'defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in @%:@( *\'*) : eval set x "$CONFIG_FILES" ;; @%:@( *) : set x $CONFIG_FILES ;; @%:@( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See 'config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi atomes_1.3.1/autom4te.cache/traces.10000664000175000017500000012704115212624223016661 0ustar lerouxlerouxm4trace:aclocal.m4:1013: -1- AC_SUBST([am__quote]) m4trace:aclocal.m4:1013: -1- AC_SUBST_TRACE([am__quote]) m4trace:aclocal.m4:1013: -1- m4_pattern_allow([^am__quote$]) m4trace:configure.ac:13: -1- AC_INIT([atomes], [atomes_version], [atomes@ipcms.unistra.fr], [atomes_tar], [atomes_url]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?A[CHUM]_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([_AC_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section 'AC_LIBOBJ vs LIBOBJS']) m4trace:configure.ac:13: -1- m4_pattern_allow([^AS_FLAGS$]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?m4_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^dnl$]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?AS_]) m4trace:configure.ac:13: -1- AC_SUBST([SHELL]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([SHELL]) m4trace:configure.ac:13: -1- m4_pattern_allow([^SHELL$]) m4trace:configure.ac:13: -1- AC_SUBST([PATH_SEPARATOR]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PATH_SEPARATOR]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PATH_SEPARATOR$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_NAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_TARNAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_VERSION]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_STRING]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_URL]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:13: -1- AC_SUBST([exec_prefix], [NONE]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([exec_prefix]) m4trace:configure.ac:13: -1- m4_pattern_allow([^exec_prefix$]) m4trace:configure.ac:13: -1- AC_SUBST([prefix], [NONE]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([prefix]) m4trace:configure.ac:13: -1- m4_pattern_allow([^prefix$]) m4trace:configure.ac:13: -1- AC_SUBST([program_transform_name], [s,x,x,]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([program_transform_name]) m4trace:configure.ac:13: -1- m4_pattern_allow([^program_transform_name$]) m4trace:configure.ac:13: -1- AC_SUBST([bindir], ['${exec_prefix}/bin']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([bindir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^bindir$]) m4trace:configure.ac:13: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([sbindir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sbindir$]) m4trace:configure.ac:13: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([libexecdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^libexecdir$]) m4trace:configure.ac:13: -1- AC_SUBST([datarootdir], ['${prefix}/share']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([datarootdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^datarootdir$]) m4trace:configure.ac:13: -1- AC_SUBST([datadir], ['${datarootdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([datadir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^datadir$]) m4trace:configure.ac:13: -1- AC_SUBST([sysconfdir], ['${prefix}/etc']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([sysconfdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sysconfdir$]) m4trace:configure.ac:13: -1- AC_SUBST([sharedstatedir], ['${prefix}/com']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([sharedstatedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sharedstatedir$]) m4trace:configure.ac:13: -1- AC_SUBST([localstatedir], ['${prefix}/var']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([localstatedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^localstatedir$]) m4trace:configure.ac:13: -1- AC_SUBST([runstatedir], ['${localstatedir}/run']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([runstatedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^runstatedir$]) m4trace:configure.ac:13: -1- AC_SUBST([includedir], ['${prefix}/include']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([includedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^includedir$]) m4trace:configure.ac:13: -1- AC_SUBST([oldincludedir], ['/usr/include']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([oldincludedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^oldincludedir$]) m4trace:configure.ac:13: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], ['${datarootdir}/doc/${PACKAGE_TARNAME}'], ['${datarootdir}/doc/${PACKAGE}'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([docdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^docdir$]) m4trace:configure.ac:13: -1- AC_SUBST([infodir], ['${datarootdir}/info']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([infodir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^infodir$]) m4trace:configure.ac:13: -1- AC_SUBST([htmldir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([htmldir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^htmldir$]) m4trace:configure.ac:13: -1- AC_SUBST([dvidir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([dvidir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^dvidir$]) m4trace:configure.ac:13: -1- AC_SUBST([pdfdir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([pdfdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^pdfdir$]) m4trace:configure.ac:13: -1- AC_SUBST([psdir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([psdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^psdir$]) m4trace:configure.ac:13: -1- AC_SUBST([libdir], ['${exec_prefix}/lib']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([libdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^libdir$]) m4trace:configure.ac:13: -1- AC_SUBST([localedir], ['${datarootdir}/locale']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([localedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^localedir$]) m4trace:configure.ac:13: -1- AC_SUBST([mandir], ['${datarootdir}/man']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([mandir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^mandir$]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */ @%:@undef PACKAGE_NAME]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */ @%:@undef PACKAGE_TARNAME]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */ @%:@undef PACKAGE_VERSION]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */ @%:@undef PACKAGE_STRING]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */ @%:@undef PACKAGE_BUGREPORT]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */ @%:@undef PACKAGE_URL]) m4trace:configure.ac:13: -1- AC_SUBST([DEFS]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([DEFS]) m4trace:configure.ac:13: -1- m4_pattern_allow([^DEFS$]) m4trace:configure.ac:13: -1- AC_SUBST([ECHO_C]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ECHO_C]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_C$]) m4trace:configure.ac:13: -1- AC_SUBST([ECHO_N]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ECHO_N]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_N$]) m4trace:configure.ac:13: -1- AC_SUBST([ECHO_T]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ECHO_T]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_T$]) m4trace:configure.ac:13: -1- AC_SUBST([LIBS]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:13: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:13: -1- AC_SUBST([build_alias]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([build_alias]) m4trace:configure.ac:13: -1- m4_pattern_allow([^build_alias$]) m4trace:configure.ac:13: -1- AC_SUBST([host_alias]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([host_alias]) m4trace:configure.ac:13: -1- m4_pattern_allow([^host_alias$]) m4trace:configure.ac:13: -1- AC_SUBST([target_alias]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([target_alias]) m4trace:configure.ac:13: -1- m4_pattern_allow([^target_alias$]) m4trace:configure.ac:15: -1- AM_INIT_AUTOMAKE m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) m4trace:configure.ac:15: -1- AM_AUTOMAKE_VERSION([1.18.1]) m4trace:configure.ac:15: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_PROGRAM]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_PROGRAM]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_SCRIPT]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_SCRIPT]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_DATA]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_DATA]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_DATA$]) m4trace:configure.ac:15: -1- AC_SUBST([am__isrc], [' -I$(srcdir)']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__isrc]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__isrc$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([am__isrc]) m4trace:configure.ac:15: -1- AC_SUBST([CYGPATH_W]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([CYGPATH_W]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CYGPATH_W$]) m4trace:configure.ac:15: -1- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PACKAGE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:15: -1- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([VERSION]) m4trace:configure.ac:15: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:15: -1- AH_OUTPUT([PACKAGE], [/* Name of package */ @%:@undef PACKAGE]) m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([VERSION]) m4trace:configure.ac:15: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:15: -1- AH_OUTPUT([VERSION], [/* Version number of package */ @%:@undef VERSION]) m4trace:configure.ac:15: -1- AC_REQUIRE_AUX_FILE([missing]) m4trace:configure.ac:15: -1- AC_SUBST([ACLOCAL]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([ACLOCAL]) m4trace:configure.ac:15: -1- m4_pattern_allow([^ACLOCAL$]) m4trace:configure.ac:15: -1- AC_SUBST([AUTOCONF]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AUTOCONF]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOCONF$]) m4trace:configure.ac:15: -1- AC_SUBST([AUTOMAKE]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AUTOMAKE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOMAKE$]) m4trace:configure.ac:15: -1- AC_SUBST([AUTOHEADER]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AUTOHEADER]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOHEADER$]) m4trace:configure.ac:15: -1- AC_SUBST([MAKEINFO]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([MAKEINFO]) m4trace:configure.ac:15: -1- m4_pattern_allow([^MAKEINFO$]) m4trace:configure.ac:15: -1- AC_SUBST([install_sh]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([install_sh]) m4trace:configure.ac:15: -1- m4_pattern_allow([^install_sh$]) m4trace:configure.ac:15: -1- AC_SUBST([STRIP]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([STRIP]) m4trace:configure.ac:15: -1- m4_pattern_allow([^STRIP$]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_STRIP_PROGRAM]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) m4trace:configure.ac:15: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.ac:15: -1- AC_SUBST([MKDIR_P]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([MKDIR_P]) m4trace:configure.ac:15: -1- m4_pattern_allow([^MKDIR_P$]) m4trace:configure.ac:15: -1- AC_SUBST([mkdir_p], ['$(MKDIR_P)']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([mkdir_p]) m4trace:configure.ac:15: -1- m4_pattern_allow([^mkdir_p$]) m4trace:configure.ac:15: -1- AC_SUBST([AWK]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AWK]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AWK$]) m4trace:configure.ac:15: -1- AC_SUBST([SET_MAKE]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([SET_MAKE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^SET_MAKE$]) m4trace:configure.ac:15: -1- AC_SUBST([am__leading_dot]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__leading_dot]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__leading_dot$]) m4trace:configure.ac:15: -1- AC_SUBST([AMTAR], ['$${TAR-tar}']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AMTAR]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AMTAR$]) m4trace:configure.ac:15: -1- AC_SUBST([am__tar]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__tar]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__tar$]) m4trace:configure.ac:15: -1- AC_SUBST([am__untar]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__untar]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__untar$]) m4trace:configure.ac:15: -1- AC_SUBST([CTAGS]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([CTAGS]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CTAGS$]) m4trace:configure.ac:15: -1- AC_SUBST([ETAGS]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([ETAGS]) m4trace:configure.ac:15: -1- m4_pattern_allow([^ETAGS$]) m4trace:configure.ac:15: -1- AC_SUBST([CSCOPE]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([CSCOPE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CSCOPE$]) m4trace:configure.ac:15: -1- AC_SUBST([AM_V]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_V]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_V$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_V]) m4trace:configure.ac:15: -1- AC_SUBST([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_DEFAULT_V$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- AC_SUBST([AM_DEFAULT_VERBOSITY]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_DEFAULT_VERBOSITY]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_DEFAULT_VERBOSITY$]) m4trace:configure.ac:15: -1- AC_SUBST([AM_BACKSLASH]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_BACKSLASH]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_BACKSLASH$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_BACKSLASH]) m4trace:configure.ac:15: -1- AC_SUBST([am__rm_f_notfound]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__rm_f_notfound]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__rm_f_notfound$]) m4trace:configure.ac:15: -1- AC_SUBST([am__xargs_n]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__xargs_n]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__xargs_n$]) m4trace:configure.ac:17: -1- AC_DEFINE_TRACE_LITERAL([ATOMES_MAJOR_VERSION]) m4trace:configure.ac:17: -1- m4_pattern_allow([^ATOMES_MAJOR_VERSION$]) m4trace:configure.ac:17: -1- AH_OUTPUT([ATOMES_MAJOR_VERSION], [/* atomes major version */ @%:@undef ATOMES_MAJOR_VERSION]) m4trace:configure.ac:18: -1- AC_SUBST([ATOMES_MAJOR_VERSION], [1]) m4trace:configure.ac:18: -1- AC_SUBST_TRACE([ATOMES_MAJOR_VERSION]) m4trace:configure.ac:18: -1- m4_pattern_allow([^ATOMES_MAJOR_VERSION$]) m4trace:configure.ac:19: -1- AC_DEFINE_TRACE_LITERAL([ATOMES_MINOR_VERSION]) m4trace:configure.ac:19: -1- m4_pattern_allow([^ATOMES_MINOR_VERSION$]) m4trace:configure.ac:19: -1- AH_OUTPUT([ATOMES_MINOR_VERSION], [/* atomes minor version */ @%:@undef ATOMES_MINOR_VERSION]) m4trace:configure.ac:20: -1- AC_SUBST([ATOMES_MINOR_VERSION], [3]) m4trace:configure.ac:20: -1- AC_SUBST_TRACE([ATOMES_MINOR_VERSION]) m4trace:configure.ac:20: -1- m4_pattern_allow([^ATOMES_MINOR_VERSION$]) m4trace:configure.ac:21: -1- AC_DEFINE_TRACE_LITERAL([ATOMES_PATCH_VERSION]) m4trace:configure.ac:21: -1- m4_pattern_allow([^ATOMES_PATCH_VERSION$]) m4trace:configure.ac:21: -1- AH_OUTPUT([ATOMES_PATCH_VERSION], [/* atomes patch version */ @%:@undef ATOMES_PATCH_VERSION]) m4trace:configure.ac:22: -1- AC_SUBST([ATOMES_PATCH_VERSION], [1]) m4trace:configure.ac:22: -1- AC_SUBST_TRACE([ATOMES_PATCH_VERSION]) m4trace:configure.ac:22: -1- m4_pattern_allow([^ATOMES_PATCH_VERSION$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CFLAGS]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CFLAGS]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.ac:31: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:31: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:31: -1- AC_SUBST([LIBS]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:31: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:31: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([ac_ct_CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([ac_ct_CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([EXEEXT]) m4trace:configure.ac:31: -1- m4_pattern_allow([^EXEEXT$]) m4trace:configure.ac:31: -1- AC_SUBST([OBJEXT], [$ac_cv_objext]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([OBJEXT]) m4trace:configure.ac:31: -1- m4_pattern_allow([^OBJEXT$]) m4trace:configure.ac:31: -1- AC_REQUIRE_AUX_FILE([compile]) m4trace:configure.ac:31: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([DEPDIR]) m4trace:configure.ac:31: -1- m4_pattern_allow([^DEPDIR$]) m4trace:configure.ac:31: -1- AC_SUBST([am__include]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([am__include]) m4trace:configure.ac:31: -1- m4_pattern_allow([^am__include$]) m4trace:configure.ac:31: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) m4trace:configure.ac:31: -1- AC_SUBST([AMDEP_TRUE]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([AMDEP_TRUE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^AMDEP_TRUE$]) m4trace:configure.ac:31: -1- AC_SUBST([AMDEP_FALSE]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([AMDEP_FALSE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^AMDEP_FALSE$]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) m4trace:configure.ac:31: -1- AC_SUBST([AMDEPBACKSLASH]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([AMDEPBACKSLASH]) m4trace:configure.ac:31: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) m4trace:configure.ac:31: -1- AC_SUBST([am__nodep]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([am__nodep]) m4trace:configure.ac:31: -1- m4_pattern_allow([^am__nodep$]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([am__nodep]) m4trace:configure.ac:31: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CCDEPMODE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.ac:31: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.ac:31: -1- AC_SUBST([am__fastdepCC_TRUE]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.ac:31: -1- AC_SUBST([am__fastdepCC_FALSE]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_LIBINTL_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_LIBINTL_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STDIO_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDIO_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDLIB_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRING_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_INTTYPES_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDINT_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRINGS_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_STAT_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_TYPES_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_UNISTD_H]) m4trace:configure.ac:32: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) m4trace:configure.ac:32: -1- m4_pattern_allow([^STDC_HEADERS$]) m4trace:configure.ac:32: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if all of the C89 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ @%:@undef STDC_HEADERS]) m4trace:configure.ac:32: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBINTL_H]) m4trace:configure.ac:32: -1- m4_pattern_allow([^HAVE_LIBINTL_H$]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_LOCALE_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_LOCALE_H]) m4trace:configure.ac:32: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LOCALE_H]) m4trace:configure.ac:32: -1- m4_pattern_allow([^HAVE_LOCALE_H$]) m4trace:configure.ac:38: -1- AC_CANONICAL_HOST m4trace:configure.ac:38: -1- AC_CANONICAL_BUILD m4trace:configure.ac:38: -1- AC_REQUIRE_AUX_FILE([config.sub]) m4trace:configure.ac:38: -1- AC_REQUIRE_AUX_FILE([config.guess]) m4trace:configure.ac:38: -1- AC_SUBST([build], [$ac_cv_build]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([build]) m4trace:configure.ac:38: -1- m4_pattern_allow([^build$]) m4trace:configure.ac:38: -1- AC_SUBST([build_cpu], [$[1]]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([build_cpu]) m4trace:configure.ac:38: -1- m4_pattern_allow([^build_cpu$]) m4trace:configure.ac:38: -1- AC_SUBST([build_vendor], [$[2]]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([build_vendor]) m4trace:configure.ac:38: -1- m4_pattern_allow([^build_vendor$]) m4trace:configure.ac:38: -1- AC_SUBST([build_os]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([build_os]) m4trace:configure.ac:38: -1- m4_pattern_allow([^build_os$]) m4trace:configure.ac:38: -1- AC_SUBST([host], [$ac_cv_host]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([host]) m4trace:configure.ac:38: -1- m4_pattern_allow([^host$]) m4trace:configure.ac:38: -1- AC_SUBST([host_cpu], [$[1]]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([host_cpu]) m4trace:configure.ac:38: -1- m4_pattern_allow([^host_cpu$]) m4trace:configure.ac:38: -1- AC_SUBST([host_vendor], [$[2]]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([host_vendor]) m4trace:configure.ac:38: -1- m4_pattern_allow([^host_vendor$]) m4trace:configure.ac:38: -1- AC_SUBST([host_os]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([host_os]) m4trace:configure.ac:38: -1- m4_pattern_allow([^host_os$]) m4trace:configure.ac:64: -1- AM_CONDITIONAL([LINUX], [test "$build_linux" = "yes"]) m4trace:configure.ac:64: -1- AC_SUBST([LINUX_TRUE]) m4trace:configure.ac:64: -1- AC_SUBST_TRACE([LINUX_TRUE]) m4trace:configure.ac:64: -1- m4_pattern_allow([^LINUX_TRUE$]) m4trace:configure.ac:64: -1- AC_SUBST([LINUX_FALSE]) m4trace:configure.ac:64: -1- AC_SUBST_TRACE([LINUX_FALSE]) m4trace:configure.ac:64: -1- m4_pattern_allow([^LINUX_FALSE$]) m4trace:configure.ac:64: -1- _AM_SUBST_NOTMAKE([LINUX_TRUE]) m4trace:configure.ac:64: -1- _AM_SUBST_NOTMAKE([LINUX_FALSE]) m4trace:configure.ac:65: -1- AM_CONDITIONAL([WINDOWS], [test "$build_windows" = "yes"]) m4trace:configure.ac:65: -1- AC_SUBST([WINDOWS_TRUE]) m4trace:configure.ac:65: -1- AC_SUBST_TRACE([WINDOWS_TRUE]) m4trace:configure.ac:65: -1- m4_pattern_allow([^WINDOWS_TRUE$]) m4trace:configure.ac:65: -1- AC_SUBST([WINDOWS_FALSE]) m4trace:configure.ac:65: -1- AC_SUBST_TRACE([WINDOWS_FALSE]) m4trace:configure.ac:65: -1- m4_pattern_allow([^WINDOWS_FALSE$]) m4trace:configure.ac:65: -1- _AM_SUBST_NOTMAKE([WINDOWS_TRUE]) m4trace:configure.ac:65: -1- _AM_SUBST_NOTMAKE([WINDOWS_FALSE]) m4trace:configure.ac:66: -1- AM_CONDITIONAL([OSX], [test "$build_mac" = "yes"]) m4trace:configure.ac:66: -1- AC_SUBST([OSX_TRUE]) m4trace:configure.ac:66: -1- AC_SUBST_TRACE([OSX_TRUE]) m4trace:configure.ac:66: -1- m4_pattern_allow([^OSX_TRUE$]) m4trace:configure.ac:66: -1- AC_SUBST([OSX_FALSE]) m4trace:configure.ac:66: -1- AC_SUBST_TRACE([OSX_FALSE]) m4trace:configure.ac:66: -1- m4_pattern_allow([^OSX_FALSE$]) m4trace:configure.ac:66: -1- _AM_SUBST_NOTMAKE([OSX_TRUE]) m4trace:configure.ac:66: -1- _AM_SUBST_NOTMAKE([OSX_FALSE]) m4trace:configure.ac:69: -1- AC_SUBST([WINDRES]) m4trace:configure.ac:69: -1- AC_SUBST_TRACE([WINDRES]) m4trace:configure.ac:69: -1- m4_pattern_allow([^WINDRES$]) m4trace:configure.ac:78: -1- AC_SUBST([PKG_CONFIG]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:79: -1- AC_SUBST([UP_MIME]) m4trace:configure.ac:79: -1- AC_SUBST_TRACE([UP_MIME]) m4trace:configure.ac:79: -1- m4_pattern_allow([^UP_MIME$]) m4trace:configure.ac:80: -1- AC_SUBST([UP_DESKTOP]) m4trace:configure.ac:80: -1- AC_SUBST_TRACE([UP_DESKTOP]) m4trace:configure.ac:80: -1- m4_pattern_allow([^UP_DESKTOP$]) m4trace:configure.ac:81: -1- AC_SUBST([UP_APPSTREAM]) m4trace:configure.ac:81: -1- AC_SUBST_TRACE([UP_APPSTREAM]) m4trace:configure.ac:81: -1- m4_pattern_allow([^UP_APPSTREAM$]) m4trace:configure.ac:98: -1- AM_CONDITIONAL([GTK3], [test "$with_gtk" == "3"]) m4trace:configure.ac:98: -1- AC_SUBST([GTK3_TRUE]) m4trace:configure.ac:98: -1- AC_SUBST_TRACE([GTK3_TRUE]) m4trace:configure.ac:98: -1- m4_pattern_allow([^GTK3_TRUE$]) m4trace:configure.ac:98: -1- AC_SUBST([GTK3_FALSE]) m4trace:configure.ac:98: -1- AC_SUBST_TRACE([GTK3_FALSE]) m4trace:configure.ac:98: -1- m4_pattern_allow([^GTK3_FALSE$]) m4trace:configure.ac:98: -1- _AM_SUBST_NOTMAKE([GTK3_TRUE]) m4trace:configure.ac:98: -1- _AM_SUBST_NOTMAKE([GTK3_FALSE]) m4trace:configure.ac:107: -1- m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) m4trace:configure.ac:107: -1- AC_SUBST([PKG_CONFIG]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:107: -1- AC_SUBST([PKG_CONFIG_PATH]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([PKG_CONFIG_PATH]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG_PATH$]) m4trace:configure.ac:107: -1- AC_SUBST([PKG_CONFIG_LIBDIR]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([PKG_CONFIG_LIBDIR]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG_LIBDIR$]) m4trace:configure.ac:107: -1- AC_SUBST([PKG_CONFIG]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:107: -1- AC_SUBST([LGTK_CFLAGS]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([LGTK_CFLAGS]) m4trace:configure.ac:107: -1- m4_pattern_allow([^LGTK_CFLAGS$]) m4trace:configure.ac:107: -1- AC_SUBST([LGTK_LIBS]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([LGTK_LIBS]) m4trace:configure.ac:107: -1- m4_pattern_allow([^LGTK_LIBS$]) m4trace:configure.ac:110: -1- AC_SUBST([INTEGRATION_CFLAGS]) m4trace:configure.ac:110: -1- AC_SUBST_TRACE([INTEGRATION_CFLAGS]) m4trace:configure.ac:110: -1- m4_pattern_allow([^INTEGRATION_CFLAGS$]) m4trace:configure.ac:110: -1- AC_SUBST([INTEGRATION_LIBS]) m4trace:configure.ac:110: -1- AC_SUBST_TRACE([INTEGRATION_LIBS]) m4trace:configure.ac:110: -1- m4_pattern_allow([^INTEGRATION_LIBS$]) m4trace:configure.ac:113: -1- AC_SUBST([LIBXML2_CFLAGS]) m4trace:configure.ac:113: -1- AC_SUBST_TRACE([LIBXML2_CFLAGS]) m4trace:configure.ac:113: -1- m4_pattern_allow([^LIBXML2_CFLAGS$]) m4trace:configure.ac:113: -1- AC_SUBST([LIBXML2_LIBS]) m4trace:configure.ac:113: -1- AC_SUBST_TRACE([LIBXML2_LIBS]) m4trace:configure.ac:113: -1- m4_pattern_allow([^LIBXML2_LIBS$]) m4trace:configure.ac:114: -1- AC_SUBST([PANGOFT2_CFLAGS]) m4trace:configure.ac:114: -1- AC_SUBST_TRACE([PANGOFT2_CFLAGS]) m4trace:configure.ac:114: -1- m4_pattern_allow([^PANGOFT2_CFLAGS$]) m4trace:configure.ac:114: -1- AC_SUBST([PANGOFT2_LIBS]) m4trace:configure.ac:114: -1- AC_SUBST_TRACE([PANGOFT2_LIBS]) m4trace:configure.ac:114: -1- m4_pattern_allow([^PANGOFT2_LIBS$]) m4trace:configure.ac:115: -1- AC_SUBST([FFMPEG_CFLAGS]) m4trace:configure.ac:115: -1- AC_SUBST_TRACE([FFMPEG_CFLAGS]) m4trace:configure.ac:115: -1- m4_pattern_allow([^FFMPEG_CFLAGS$]) m4trace:configure.ac:115: -1- AC_SUBST([FFMPEG_LIBS]) m4trace:configure.ac:115: -1- AC_SUBST_TRACE([FFMPEG_LIBS]) m4trace:configure.ac:115: -1- m4_pattern_allow([^FFMPEG_LIBS$]) m4trace:configure.ac:117: -1- AC_SUBST([GLU_CFLAGS]) m4trace:configure.ac:117: -1- AC_SUBST_TRACE([GLU_CFLAGS]) m4trace:configure.ac:117: -1- m4_pattern_allow([^GLU_CFLAGS$]) m4trace:configure.ac:117: -1- AC_SUBST([GLU_LIBS]) m4trace:configure.ac:117: -1- AC_SUBST_TRACE([GLU_LIBS]) m4trace:configure.ac:117: -1- m4_pattern_allow([^GLU_LIBS$]) m4trace:configure.ac:119: -1- AC_SUBST([EPOXY_CFLAGS]) m4trace:configure.ac:119: -1- AC_SUBST_TRACE([EPOXY_CFLAGS]) m4trace:configure.ac:119: -1- m4_pattern_allow([^EPOXY_CFLAGS$]) m4trace:configure.ac:119: -1- AC_SUBST([EPOXY_LIBS]) m4trace:configure.ac:119: -1- AC_SUBST_TRACE([EPOXY_LIBS]) m4trace:configure.ac:119: -1- m4_pattern_allow([^EPOXY_LIBS$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CFLAGS]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CFLAGS]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.ac:140: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:140: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:140: -1- AC_SUBST([LIBS]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:140: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:140: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([ac_ct_CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([ac_ct_CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_REQUIRE_AUX_FILE([compile]) m4trace:configure.ac:140: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CCDEPMODE]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.ac:140: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.ac:140: -1- AC_SUBST([am__fastdepCC_TRUE]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) m4trace:configure.ac:140: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.ac:140: -1- AC_SUBST([am__fastdepCC_FALSE]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) m4trace:configure.ac:140: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.ac:140: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.ac:140: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.ac:146: -1- AC_SUBST([FC]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:146: -1- AC_SUBST([FCFLAGS]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([FCFLAGS]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FCFLAGS$]) m4trace:configure.ac:146: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:146: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:146: -1- AC_SUBST([LIBS]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:146: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:146: -1- AC_SUBST([FC]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:146: -1- AC_SUBST([ac_ct_FC]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([ac_ct_FC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^ac_ct_FC$]) m4trace:configure.ac:146: -1- AC_SUBST([FCLIBS]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([FCLIBS]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FCLIBS$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_DUMMY_MAIN]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_DUMMY_MAIN$]) m4trace:configure.ac:146: -1- AH_OUTPUT([FC_DUMMY_MAIN], [/* Define to dummy \'main\' function (if any) required to link to the Fortran libraries. */ @%:@undef FC_DUMMY_MAIN]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_DUMMY_MAIN_EQ_F77]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_DUMMY_MAIN_EQ_F77$]) m4trace:configure.ac:146: -1- AH_OUTPUT([FC_DUMMY_MAIN_EQ_F77], [/* Define if F77 and FC dummy \'main\' functions are identical. */ @%:@undef FC_DUMMY_MAIN_EQ_F77]) m4trace:configure.ac:146: -1- AH_OUTPUT([FC_FUNC], [/* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ @%:@undef FC_FUNC]) m4trace:configure.ac:146: -1- AH_OUTPUT([FC_FUNC_], [/* As FC_FUNC, but for C identifiers containing underscores. */ @%:@undef FC_FUNC_]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:150: -1- AC_SUBST([FC]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:150: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:150: -1- AC_SUBST([FCFLAGS]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([FCFLAGS]) m4trace:configure.ac:150: -1- m4_pattern_allow([^FCFLAGS$]) m4trace:configure.ac:150: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:150: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:150: -1- AC_SUBST([LIBS]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:150: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:150: -1- AC_SUBST([FC]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:150: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:150: -1- AC_SUBST([ac_ct_FC]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([ac_ct_FC]) m4trace:configure.ac:150: -1- m4_pattern_allow([^ac_ct_FC$]) m4trace:configure.ac:153: -1- AC_FC_SRCEXT([f90], [FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS"], [as_fn_error $? "Cannot compile .f90 files" "$LINENO" 5]) m4trace:configure.ac:153: -1- AC_SUBST([FCFLAGS_f90]) m4trace:configure.ac:153: -1- AC_SUBST_TRACE([FCFLAGS_f90]) m4trace:configure.ac:153: -1- m4_pattern_allow([^FCFLAGS_f90$]) m4trace:configure.ac:154: -1- AC_FC_SRCEXT([F90], [FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS"], [as_fn_error $? "Cannot compile .F90 files" "$LINENO" 5]) m4trace:configure.ac:154: -1- AC_SUBST([FCFLAGS_F90]) m4trace:configure.ac:154: -1- AC_SUBST_TRACE([FCFLAGS_F90]) m4trace:configure.ac:154: -1- m4_pattern_allow([^FCFLAGS_F90$]) m4trace:configure.ac:158: -1- AC_SUBST([FCLIBS]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([FCLIBS]) m4trace:configure.ac:158: -1- m4_pattern_allow([^FCLIBS$]) m4trace:configure.ac:159: -1- AC_FC_FREEFORM m4trace:configure.ac:172: -1- AC_SUBST([OPENMP_CFLAGS]) m4trace:configure.ac:172: -1- AC_SUBST_TRACE([OPENMP_CFLAGS]) m4trace:configure.ac:172: -1- m4_pattern_allow([^OPENMP_CFLAGS$]) m4trace:configure.ac:173: -1- AC_SUBST([OPENMP_CFLAGS]) m4trace:configure.ac:173: -1- AC_SUBST_TRACE([OPENMP_CFLAGS]) m4trace:configure.ac:173: -1- m4_pattern_allow([^OPENMP_CFLAGS$]) m4trace:configure.ac:174: -1- AM_CONDITIONAL([OPENMP], [test "${OPENMP_CFLAGS}" != ""]) m4trace:configure.ac:174: -1- AC_SUBST([OPENMP_TRUE]) m4trace:configure.ac:174: -1- AC_SUBST_TRACE([OPENMP_TRUE]) m4trace:configure.ac:174: -1- m4_pattern_allow([^OPENMP_TRUE$]) m4trace:configure.ac:174: -1- AC_SUBST([OPENMP_FALSE]) m4trace:configure.ac:174: -1- AC_SUBST_TRACE([OPENMP_FALSE]) m4trace:configure.ac:174: -1- m4_pattern_allow([^OPENMP_FALSE$]) m4trace:configure.ac:174: -1- _AM_SUBST_NOTMAKE([OPENMP_TRUE]) m4trace:configure.ac:174: -1- _AM_SUBST_NOTMAKE([OPENMP_FALSE]) m4trace:configure.ac:177: -1- AC_CONFIG_FILES([ Makefile data/Makefile man/Makefile locale/Makefile src/Makefile src/startup-testing/Makefile ]) m4trace:configure.ac:186: -1- AC_CONFIG_HEADERS([config.h]) m4trace:configure.ac:188: -1- AC_CONFIG_FILES([misc/win/atomes.rc:misc/win/atomes.rc.in misc/win/startup.rc:misc/win/startup.rc.in]) m4trace:configure.ac:190: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) m4trace:configure.ac:190: -1- m4_pattern_allow([^LIB@&t@OBJS$]) m4trace:configure.ac:190: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([LTLIBOBJS]) m4trace:configure.ac:190: -1- m4_pattern_allow([^LTLIBOBJS$]) m4trace:configure.ac:190: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) m4trace:configure.ac:190: -1- AC_SUBST([am__EXEEXT_TRUE]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE]) m4trace:configure.ac:190: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) m4trace:configure.ac:190: -1- AC_SUBST([am__EXEEXT_FALSE]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE]) m4trace:configure.ac:190: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) m4trace:configure.ac:190: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) m4trace:configure.ac:190: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([top_builddir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([top_build_prefix]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([srcdir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([abs_srcdir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([top_srcdir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([abs_top_srcdir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([builddir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([abs_builddir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([abs_top_builddir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([INSTALL]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([MKDIR_P]) atomes_1.3.1/autom4te.cache/requests0000664000175000017500000002717015212624223017116 0ustar lerouxleroux# This file was generated by Autom4te 2.72. # It contains the lists of macros which have been traced. # It can be safely removed. @request = ( bless( [ '0', 1, [ '/usr/share/autoconf' ], [ '/usr/share/autoconf/autoconf/autoconf.m4f', '/usr/share/aclocal-1.18/internal/ac-config-macro-dirs.m4', '/usr/share/aclocal/pkg.m4', '/usr/share/aclocal-1.18/amversion.m4', '/usr/share/aclocal-1.18/auxdir.m4', '/usr/share/aclocal-1.18/cond.m4', '/usr/share/aclocal-1.18/depend.m4', '/usr/share/aclocal-1.18/depout.m4', '/usr/share/aclocal-1.18/init.m4', '/usr/share/aclocal-1.18/install-sh.m4', '/usr/share/aclocal-1.18/lead-dot.m4', '/usr/share/aclocal-1.18/make.m4', '/usr/share/aclocal-1.18/missing.m4', '/usr/share/aclocal-1.18/options.m4', '/usr/share/aclocal-1.18/prog-cc-c-o.m4', '/usr/share/aclocal-1.18/rmf.m4', '/usr/share/aclocal-1.18/runlog.m4', '/usr/share/aclocal-1.18/sanity.m4', '/usr/share/aclocal-1.18/silent.m4', '/usr/share/aclocal-1.18/strip.m4', '/usr/share/aclocal-1.18/substnot.m4', '/usr/share/aclocal-1.18/tar.m4', '/usr/share/aclocal-1.18/xargsn.m4', 'configure.ac' ], { 'AC_CONFIG_MACRO_DIR' => 1, 'AC_CONFIG_MACRO_DIR_TRACE' => 1, 'AC_DEFUN' => 1, 'AC_DEFUN_ONCE' => 1, 'AM_AUTOMAKE_VERSION' => 1, 'AM_AUX_DIR_EXPAND' => 1, 'AM_CONDITIONAL' => 1, 'AM_DEP_TRACK' => 1, 'AM_INIT_AUTOMAKE' => 1, 'AM_MAKE_INCLUDE' => 1, 'AM_MISSING_HAS_RUN' => 1, 'AM_MISSING_PROG' => 1, 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, 'AM_PROG_CC_C_O' => 1, 'AM_PROG_INSTALL_SH' => 1, 'AM_PROG_INSTALL_STRIP' => 1, 'AM_RUN_LOG' => 1, 'AM_SANITY_CHECK' => 1, 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, 'AM_SET_DEPDIR' => 1, 'AM_SET_LEADING_DOT' => 1, 'AM_SILENT_RULES' => 1, 'AM_SUBST_NOTMAKE' => 1, 'AU_DEFUN' => 1, 'AX_CHECK_COMPILER_FLAG' => 1, 'PKG_CHECK_EXISTS' => 1, 'PKG_CHECK_MODULES' => 1, 'PKG_CHECK_MODULES_STATIC' => 1, 'PKG_CHECK_VAR' => 1, 'PKG_HAVE_DEFINE_WITH_MODULES' => 1, 'PKG_HAVE_WITH_MODULES' => 1, 'PKG_INSTALLDIR' => 1, 'PKG_NOARCH_INSTALLDIR' => 1, 'PKG_PROG_PKG_CONFIG' => 1, 'PKG_WITH_MODULES' => 1, '_AC_AM_CONFIG_HEADER_HOOK' => 1, '_AM_AUTOCONF_VERSION' => 1, '_AM_CONFIG_MACRO_DIRS' => 1, '_AM_DEPENDENCIES' => 1, '_AM_FILESYSTEM_TIMESTAMP_RESOLUTION' => 1, '_AM_IF_OPTION' => 1, '_AM_MANGLE_OPTION' => 1, '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, '_AM_PROG_CC_C_O' => 1, '_AM_PROG_RM_F' => 1, '_AM_PROG_TAR' => 1, '_AM_PROG_XARGS_N' => 1, '_AM_SET_OPTION' => 1, '_AM_SET_OPTIONS' => 1, '_AM_SILENT_RULES' => 1, '_AM_SLEEP_FRACTIONAL_SECONDS' => 1, '_AM_SUBST_NOTMAKE' => 1, '_PKG_SHORT_ERRORS_SUPPORTED' => 1, '_m4_warn' => 1, 'include' => 1, 'm4_include' => 1, 'm4_pattern_allow' => 1, 'm4_pattern_forbid' => 1 } ], 'Autom4te::Request' ), bless( [ '1', 1, [ '/usr/share/autoconf' ], [ '/usr/share/autoconf/autoconf/autoconf.m4f', 'aclocal.m4', '/usr/share/autoconf/autoconf/trailer.m4', 'configure.ac' ], { 'AC_CANONICAL_BUILD' => 1, 'AC_CANONICAL_HOST' => 1, 'AC_CANONICAL_SYSTEM' => 1, 'AC_CANONICAL_TARGET' => 1, 'AC_CONFIG_AUX_DIR' => 1, 'AC_CONFIG_FILES' => 1, 'AC_CONFIG_HEADERS' => 1, 'AC_CONFIG_LIBOBJ_DIR' => 1, 'AC_CONFIG_LINKS' => 1, 'AC_CONFIG_MACRO_DIR_TRACE' => 1, 'AC_CONFIG_SUBDIRS' => 1, 'AC_DEFINE_TRACE_LITERAL' => 1, 'AC_FC_FREEFORM' => 1, 'AC_FC_PP_DEFINE' => 1, 'AC_FC_PP_SRCEXT' => 1, 'AC_FC_SRCEXT' => 1, 'AC_INIT' => 1, 'AC_LIBSOURCE' => 1, 'AC_PROG_LIBTOOL' => 1, 'AC_REQUIRE_AUX_FILE' => 1, 'AC_SUBST' => 1, 'AC_SUBST_TRACE' => 1, 'AH_OUTPUT' => 1, 'AM_AUTOMAKE_VERSION' => 1, 'AM_CONDITIONAL' => 1, 'AM_ENABLE_MULTILIB' => 1, 'AM_EXTRA_RECURSIVE_TARGETS' => 1, 'AM_GNU_GETTEXT' => 1, 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, 'AM_INIT_AUTOMAKE' => 1, 'AM_MAINTAINER_MODE' => 1, 'AM_MAKEFILE_INCLUDE' => 1, 'AM_NLS' => 1, 'AM_PATH_GUILE' => 1, 'AM_POT_TOOLS' => 1, 'AM_PROG_AR' => 1, 'AM_PROG_CC_C_O' => 1, 'AM_PROG_CXX_C_O' => 1, 'AM_PROG_F77_C_O' => 1, 'AM_PROG_FC_C_O' => 1, 'AM_PROG_LIBTOOL' => 1, 'AM_PROG_MKDIR_P' => 1, 'AM_PROG_MOC' => 1, 'AM_SILENT_RULES' => 1, 'AM_XGETTEXT_OPTION' => 1, 'GTK_DOC_CHECK' => 1, 'IT_PROG_INTLTOOL' => 1, 'LT_CONFIG_LTDL_DIR' => 1, 'LT_INIT' => 1, 'LT_SUPPORTED_TAG' => 1, '_AM_COND_ELSE' => 1, '_AM_COND_ENDIF' => 1, '_AM_COND_IF' => 1, '_AM_MAKEFILE_INCLUDE' => 1, '_AM_SUBST_NOTMAKE' => 1, '_LT_AC_TAGCONFIG' => 1, '_m4_warn' => 1, 'include' => 1, 'm4_include' => 1, 'm4_pattern_allow' => 1, 'm4_pattern_forbid' => 1, 'm4_sinclude' => 1, 'sinclude' => 1 } ], 'Autom4te::Request' ), bless( [ '2', 1, [ '/usr/share/autoconf' ], [ '/usr/share/autoconf/autoconf/autoconf.m4f', 'aclocal.m4', 'configure.ac' ], { 'AC_CANONICAL_BUILD' => 1, 'AC_CANONICAL_HOST' => 1, 'AC_CANONICAL_SYSTEM' => 1, 'AC_CANONICAL_TARGET' => 1, 'AC_CONFIG_AUX_DIR' => 1, 'AC_CONFIG_FILES' => 1, 'AC_CONFIG_HEADERS' => 1, 'AC_CONFIG_LIBOBJ_DIR' => 1, 'AC_CONFIG_LINKS' => 1, 'AC_CONFIG_MACRO_DIR_TRACE' => 1, 'AC_CONFIG_SUBDIRS' => 1, 'AC_DEFINE_TRACE_LITERAL' => 1, 'AC_FC_FREEFORM' => 1, 'AC_FC_PP_DEFINE' => 1, 'AC_FC_PP_SRCEXT' => 1, 'AC_FC_SRCEXT' => 1, 'AC_INIT' => 1, 'AC_LIBSOURCE' => 1, 'AC_PROG_LIBTOOL' => 1, 'AC_REQUIRE_AUX_FILE' => 1, 'AC_SUBST' => 1, 'AC_SUBST_TRACE' => 1, 'AH_OUTPUT' => 1, 'AM_AUTOMAKE_VERSION' => 1, 'AM_CONDITIONAL' => 1, 'AM_ENABLE_MULTILIB' => 1, 'AM_EXTRA_RECURSIVE_TARGETS' => 1, 'AM_GNU_GETTEXT' => 1, 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, 'AM_INIT_AUTOMAKE' => 1, 'AM_MAINTAINER_MODE' => 1, 'AM_MAKEFILE_INCLUDE' => 1, 'AM_NLS' => 1, 'AM_PATH_GUILE' => 1, 'AM_POT_TOOLS' => 1, 'AM_PROG_AR' => 1, 'AM_PROG_CC_C_O' => 1, 'AM_PROG_CXX_C_O' => 1, 'AM_PROG_F77_C_O' => 1, 'AM_PROG_FC_C_O' => 1, 'AM_PROG_LIBTOOL' => 1, 'AM_PROG_MKDIR_P' => 1, 'AM_PROG_MOC' => 1, 'AM_SILENT_RULES' => 1, 'AM_XGETTEXT_OPTION' => 1, 'GTK_DOC_CHECK' => 1, 'IT_PROG_INTLTOOL' => 1, 'LT_CONFIG_LTDL_DIR' => 1, 'LT_INIT' => 1, 'LT_SUPPORTED_TAG' => 1, '_AM_COND_ELSE' => 1, '_AM_COND_ENDIF' => 1, '_AM_COND_IF' => 1, '_AM_MAKEFILE_INCLUDE' => 1, '_AM_SUBST_NOTMAKE' => 1, '_LT_AC_TAGCONFIG' => 1, '_m4_warn' => 1, 'include' => 1, 'm4_include' => 1, 'm4_pattern_allow' => 1, 'm4_pattern_forbid' => 1, 'm4_sinclude' => 1, 'sinclude' => 1 } ], 'Autom4te::Request' ) ); atomes_1.3.1/autom4te.cache/traces.20000664000175000017500000012704115212624223016662 0ustar lerouxlerouxm4trace:aclocal.m4:1013: -1- AC_SUBST([am__quote]) m4trace:aclocal.m4:1013: -1- AC_SUBST_TRACE([am__quote]) m4trace:aclocal.m4:1013: -1- m4_pattern_allow([^am__quote$]) m4trace:configure.ac:13: -1- AC_INIT([atomes], [atomes_version], [atomes@ipcms.unistra.fr], [atomes_tar], [atomes_url]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?A[CHUM]_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([_AC_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section 'AC_LIBOBJ vs LIBOBJS']) m4trace:configure.ac:13: -1- m4_pattern_allow([^AS_FLAGS$]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?m4_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^dnl$]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?AS_]) m4trace:configure.ac:13: -1- AC_SUBST([SHELL]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([SHELL]) m4trace:configure.ac:13: -1- m4_pattern_allow([^SHELL$]) m4trace:configure.ac:13: -1- AC_SUBST([PATH_SEPARATOR]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PATH_SEPARATOR]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PATH_SEPARATOR$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_NAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_TARNAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_VERSION]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_STRING]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_URL]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:13: -1- AC_SUBST([exec_prefix], [NONE]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([exec_prefix]) m4trace:configure.ac:13: -1- m4_pattern_allow([^exec_prefix$]) m4trace:configure.ac:13: -1- AC_SUBST([prefix], [NONE]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([prefix]) m4trace:configure.ac:13: -1- m4_pattern_allow([^prefix$]) m4trace:configure.ac:13: -1- AC_SUBST([program_transform_name], [s,x,x,]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([program_transform_name]) m4trace:configure.ac:13: -1- m4_pattern_allow([^program_transform_name$]) m4trace:configure.ac:13: -1- AC_SUBST([bindir], ['${exec_prefix}/bin']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([bindir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^bindir$]) m4trace:configure.ac:13: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([sbindir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sbindir$]) m4trace:configure.ac:13: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([libexecdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^libexecdir$]) m4trace:configure.ac:13: -1- AC_SUBST([datarootdir], ['${prefix}/share']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([datarootdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^datarootdir$]) m4trace:configure.ac:13: -1- AC_SUBST([datadir], ['${datarootdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([datadir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^datadir$]) m4trace:configure.ac:13: -1- AC_SUBST([sysconfdir], ['${prefix}/etc']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([sysconfdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sysconfdir$]) m4trace:configure.ac:13: -1- AC_SUBST([sharedstatedir], ['${prefix}/com']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([sharedstatedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sharedstatedir$]) m4trace:configure.ac:13: -1- AC_SUBST([localstatedir], ['${prefix}/var']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([localstatedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^localstatedir$]) m4trace:configure.ac:13: -1- AC_SUBST([runstatedir], ['${localstatedir}/run']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([runstatedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^runstatedir$]) m4trace:configure.ac:13: -1- AC_SUBST([includedir], ['${prefix}/include']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([includedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^includedir$]) m4trace:configure.ac:13: -1- AC_SUBST([oldincludedir], ['/usr/include']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([oldincludedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^oldincludedir$]) m4trace:configure.ac:13: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], ['${datarootdir}/doc/${PACKAGE_TARNAME}'], ['${datarootdir}/doc/${PACKAGE}'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([docdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^docdir$]) m4trace:configure.ac:13: -1- AC_SUBST([infodir], ['${datarootdir}/info']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([infodir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^infodir$]) m4trace:configure.ac:13: -1- AC_SUBST([htmldir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([htmldir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^htmldir$]) m4trace:configure.ac:13: -1- AC_SUBST([dvidir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([dvidir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^dvidir$]) m4trace:configure.ac:13: -1- AC_SUBST([pdfdir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([pdfdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^pdfdir$]) m4trace:configure.ac:13: -1- AC_SUBST([psdir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([psdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^psdir$]) m4trace:configure.ac:13: -1- AC_SUBST([libdir], ['${exec_prefix}/lib']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([libdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^libdir$]) m4trace:configure.ac:13: -1- AC_SUBST([localedir], ['${datarootdir}/locale']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([localedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^localedir$]) m4trace:configure.ac:13: -1- AC_SUBST([mandir], ['${datarootdir}/man']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([mandir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^mandir$]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */ @%:@undef PACKAGE_NAME]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */ @%:@undef PACKAGE_TARNAME]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */ @%:@undef PACKAGE_VERSION]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */ @%:@undef PACKAGE_STRING]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */ @%:@undef PACKAGE_BUGREPORT]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */ @%:@undef PACKAGE_URL]) m4trace:configure.ac:13: -1- AC_SUBST([DEFS]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([DEFS]) m4trace:configure.ac:13: -1- m4_pattern_allow([^DEFS$]) m4trace:configure.ac:13: -1- AC_SUBST([ECHO_C]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ECHO_C]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_C$]) m4trace:configure.ac:13: -1- AC_SUBST([ECHO_N]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ECHO_N]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_N$]) m4trace:configure.ac:13: -1- AC_SUBST([ECHO_T]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ECHO_T]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_T$]) m4trace:configure.ac:13: -1- AC_SUBST([LIBS]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:13: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:13: -1- AC_SUBST([build_alias]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([build_alias]) m4trace:configure.ac:13: -1- m4_pattern_allow([^build_alias$]) m4trace:configure.ac:13: -1- AC_SUBST([host_alias]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([host_alias]) m4trace:configure.ac:13: -1- m4_pattern_allow([^host_alias$]) m4trace:configure.ac:13: -1- AC_SUBST([target_alias]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([target_alias]) m4trace:configure.ac:13: -1- m4_pattern_allow([^target_alias$]) m4trace:configure.ac:15: -1- AM_INIT_AUTOMAKE m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) m4trace:configure.ac:15: -1- AM_AUTOMAKE_VERSION([1.18.1]) m4trace:configure.ac:15: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_PROGRAM]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_PROGRAM]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_SCRIPT]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_SCRIPT]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_DATA]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_DATA]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_DATA$]) m4trace:configure.ac:15: -1- AC_SUBST([am__isrc], [' -I$(srcdir)']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__isrc]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__isrc$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([am__isrc]) m4trace:configure.ac:15: -1- AC_SUBST([CYGPATH_W]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([CYGPATH_W]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CYGPATH_W$]) m4trace:configure.ac:15: -1- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PACKAGE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:15: -1- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([VERSION]) m4trace:configure.ac:15: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:15: -1- AH_OUTPUT([PACKAGE], [/* Name of package */ @%:@undef PACKAGE]) m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([VERSION]) m4trace:configure.ac:15: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:15: -1- AH_OUTPUT([VERSION], [/* Version number of package */ @%:@undef VERSION]) m4trace:configure.ac:15: -1- AC_REQUIRE_AUX_FILE([missing]) m4trace:configure.ac:15: -1- AC_SUBST([ACLOCAL]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([ACLOCAL]) m4trace:configure.ac:15: -1- m4_pattern_allow([^ACLOCAL$]) m4trace:configure.ac:15: -1- AC_SUBST([AUTOCONF]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AUTOCONF]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOCONF$]) m4trace:configure.ac:15: -1- AC_SUBST([AUTOMAKE]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AUTOMAKE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOMAKE$]) m4trace:configure.ac:15: -1- AC_SUBST([AUTOHEADER]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AUTOHEADER]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOHEADER$]) m4trace:configure.ac:15: -1- AC_SUBST([MAKEINFO]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([MAKEINFO]) m4trace:configure.ac:15: -1- m4_pattern_allow([^MAKEINFO$]) m4trace:configure.ac:15: -1- AC_SUBST([install_sh]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([install_sh]) m4trace:configure.ac:15: -1- m4_pattern_allow([^install_sh$]) m4trace:configure.ac:15: -1- AC_SUBST([STRIP]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([STRIP]) m4trace:configure.ac:15: -1- m4_pattern_allow([^STRIP$]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_STRIP_PROGRAM]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) m4trace:configure.ac:15: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.ac:15: -1- AC_SUBST([MKDIR_P]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([MKDIR_P]) m4trace:configure.ac:15: -1- m4_pattern_allow([^MKDIR_P$]) m4trace:configure.ac:15: -1- AC_SUBST([mkdir_p], ['$(MKDIR_P)']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([mkdir_p]) m4trace:configure.ac:15: -1- m4_pattern_allow([^mkdir_p$]) m4trace:configure.ac:15: -1- AC_SUBST([AWK]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AWK]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AWK$]) m4trace:configure.ac:15: -1- AC_SUBST([SET_MAKE]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([SET_MAKE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^SET_MAKE$]) m4trace:configure.ac:15: -1- AC_SUBST([am__leading_dot]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__leading_dot]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__leading_dot$]) m4trace:configure.ac:15: -1- AC_SUBST([AMTAR], ['$${TAR-tar}']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AMTAR]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AMTAR$]) m4trace:configure.ac:15: -1- AC_SUBST([am__tar]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__tar]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__tar$]) m4trace:configure.ac:15: -1- AC_SUBST([am__untar]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__untar]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__untar$]) m4trace:configure.ac:15: -1- AC_SUBST([CTAGS]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([CTAGS]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CTAGS$]) m4trace:configure.ac:15: -1- AC_SUBST([ETAGS]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([ETAGS]) m4trace:configure.ac:15: -1- m4_pattern_allow([^ETAGS$]) m4trace:configure.ac:15: -1- AC_SUBST([CSCOPE]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([CSCOPE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CSCOPE$]) m4trace:configure.ac:15: -1- AC_SUBST([AM_V]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_V]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_V$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_V]) m4trace:configure.ac:15: -1- AC_SUBST([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_DEFAULT_V$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- AC_SUBST([AM_DEFAULT_VERBOSITY]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_DEFAULT_VERBOSITY]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_DEFAULT_VERBOSITY$]) m4trace:configure.ac:15: -1- AC_SUBST([AM_BACKSLASH]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_BACKSLASH]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_BACKSLASH$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_BACKSLASH]) m4trace:configure.ac:15: -1- AC_SUBST([am__rm_f_notfound]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__rm_f_notfound]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__rm_f_notfound$]) m4trace:configure.ac:15: -1- AC_SUBST([am__xargs_n]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__xargs_n]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__xargs_n$]) m4trace:configure.ac:17: -1- AC_DEFINE_TRACE_LITERAL([ATOMES_MAJOR_VERSION]) m4trace:configure.ac:17: -1- m4_pattern_allow([^ATOMES_MAJOR_VERSION$]) m4trace:configure.ac:17: -1- AH_OUTPUT([ATOMES_MAJOR_VERSION], [/* atomes major version */ @%:@undef ATOMES_MAJOR_VERSION]) m4trace:configure.ac:18: -1- AC_SUBST([ATOMES_MAJOR_VERSION], [1]) m4trace:configure.ac:18: -1- AC_SUBST_TRACE([ATOMES_MAJOR_VERSION]) m4trace:configure.ac:18: -1- m4_pattern_allow([^ATOMES_MAJOR_VERSION$]) m4trace:configure.ac:19: -1- AC_DEFINE_TRACE_LITERAL([ATOMES_MINOR_VERSION]) m4trace:configure.ac:19: -1- m4_pattern_allow([^ATOMES_MINOR_VERSION$]) m4trace:configure.ac:19: -1- AH_OUTPUT([ATOMES_MINOR_VERSION], [/* atomes minor version */ @%:@undef ATOMES_MINOR_VERSION]) m4trace:configure.ac:20: -1- AC_SUBST([ATOMES_MINOR_VERSION], [3]) m4trace:configure.ac:20: -1- AC_SUBST_TRACE([ATOMES_MINOR_VERSION]) m4trace:configure.ac:20: -1- m4_pattern_allow([^ATOMES_MINOR_VERSION$]) m4trace:configure.ac:21: -1- AC_DEFINE_TRACE_LITERAL([ATOMES_PATCH_VERSION]) m4trace:configure.ac:21: -1- m4_pattern_allow([^ATOMES_PATCH_VERSION$]) m4trace:configure.ac:21: -1- AH_OUTPUT([ATOMES_PATCH_VERSION], [/* atomes patch version */ @%:@undef ATOMES_PATCH_VERSION]) m4trace:configure.ac:22: -1- AC_SUBST([ATOMES_PATCH_VERSION], [1]) m4trace:configure.ac:22: -1- AC_SUBST_TRACE([ATOMES_PATCH_VERSION]) m4trace:configure.ac:22: -1- m4_pattern_allow([^ATOMES_PATCH_VERSION$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CFLAGS]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CFLAGS]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.ac:31: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:31: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:31: -1- AC_SUBST([LIBS]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:31: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:31: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([ac_ct_CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([ac_ct_CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.ac:31: -1- AC_SUBST([CC]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:31: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([EXEEXT]) m4trace:configure.ac:31: -1- m4_pattern_allow([^EXEEXT$]) m4trace:configure.ac:31: -1- AC_SUBST([OBJEXT], [$ac_cv_objext]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([OBJEXT]) m4trace:configure.ac:31: -1- m4_pattern_allow([^OBJEXT$]) m4trace:configure.ac:31: -1- AC_REQUIRE_AUX_FILE([compile]) m4trace:configure.ac:31: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([DEPDIR]) m4trace:configure.ac:31: -1- m4_pattern_allow([^DEPDIR$]) m4trace:configure.ac:31: -1- AC_SUBST([am__include]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([am__include]) m4trace:configure.ac:31: -1- m4_pattern_allow([^am__include$]) m4trace:configure.ac:31: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) m4trace:configure.ac:31: -1- AC_SUBST([AMDEP_TRUE]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([AMDEP_TRUE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^AMDEP_TRUE$]) m4trace:configure.ac:31: -1- AC_SUBST([AMDEP_FALSE]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([AMDEP_FALSE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^AMDEP_FALSE$]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) m4trace:configure.ac:31: -1- AC_SUBST([AMDEPBACKSLASH]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([AMDEPBACKSLASH]) m4trace:configure.ac:31: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) m4trace:configure.ac:31: -1- AC_SUBST([am__nodep]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([am__nodep]) m4trace:configure.ac:31: -1- m4_pattern_allow([^am__nodep$]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([am__nodep]) m4trace:configure.ac:31: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([CCDEPMODE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.ac:31: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.ac:31: -1- AC_SUBST([am__fastdepCC_TRUE]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.ac:31: -1- AC_SUBST([am__fastdepCC_FALSE]) m4trace:configure.ac:31: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) m4trace:configure.ac:31: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.ac:31: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_LIBINTL_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_LIBINTL_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STDIO_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDIO_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDLIB_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRING_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_INTTYPES_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STDINT_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_STRINGS_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_STAT_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_SYS_TYPES_H]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_UNISTD_H]) m4trace:configure.ac:32: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) m4trace:configure.ac:32: -1- m4_pattern_allow([^STDC_HEADERS$]) m4trace:configure.ac:32: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if all of the C89 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ @%:@undef STDC_HEADERS]) m4trace:configure.ac:32: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBINTL_H]) m4trace:configure.ac:32: -1- m4_pattern_allow([^HAVE_LIBINTL_H$]) m4trace:configure.ac:32: -1- AH_OUTPUT([HAVE_LOCALE_H], [/* Define to 1 if you have the header file. */ @%:@undef HAVE_LOCALE_H]) m4trace:configure.ac:32: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LOCALE_H]) m4trace:configure.ac:32: -1- m4_pattern_allow([^HAVE_LOCALE_H$]) m4trace:configure.ac:38: -1- AC_CANONICAL_HOST m4trace:configure.ac:38: -1- AC_CANONICAL_BUILD m4trace:configure.ac:38: -1- AC_REQUIRE_AUX_FILE([config.sub]) m4trace:configure.ac:38: -1- AC_REQUIRE_AUX_FILE([config.guess]) m4trace:configure.ac:38: -1- AC_SUBST([build], [$ac_cv_build]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([build]) m4trace:configure.ac:38: -1- m4_pattern_allow([^build$]) m4trace:configure.ac:38: -1- AC_SUBST([build_cpu], [$[1]]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([build_cpu]) m4trace:configure.ac:38: -1- m4_pattern_allow([^build_cpu$]) m4trace:configure.ac:38: -1- AC_SUBST([build_vendor], [$[2]]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([build_vendor]) m4trace:configure.ac:38: -1- m4_pattern_allow([^build_vendor$]) m4trace:configure.ac:38: -1- AC_SUBST([build_os]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([build_os]) m4trace:configure.ac:38: -1- m4_pattern_allow([^build_os$]) m4trace:configure.ac:38: -1- AC_SUBST([host], [$ac_cv_host]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([host]) m4trace:configure.ac:38: -1- m4_pattern_allow([^host$]) m4trace:configure.ac:38: -1- AC_SUBST([host_cpu], [$[1]]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([host_cpu]) m4trace:configure.ac:38: -1- m4_pattern_allow([^host_cpu$]) m4trace:configure.ac:38: -1- AC_SUBST([host_vendor], [$[2]]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([host_vendor]) m4trace:configure.ac:38: -1- m4_pattern_allow([^host_vendor$]) m4trace:configure.ac:38: -1- AC_SUBST([host_os]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([host_os]) m4trace:configure.ac:38: -1- m4_pattern_allow([^host_os$]) m4trace:configure.ac:64: -1- AM_CONDITIONAL([LINUX], [test "$build_linux" = "yes"]) m4trace:configure.ac:64: -1- AC_SUBST([LINUX_TRUE]) m4trace:configure.ac:64: -1- AC_SUBST_TRACE([LINUX_TRUE]) m4trace:configure.ac:64: -1- m4_pattern_allow([^LINUX_TRUE$]) m4trace:configure.ac:64: -1- AC_SUBST([LINUX_FALSE]) m4trace:configure.ac:64: -1- AC_SUBST_TRACE([LINUX_FALSE]) m4trace:configure.ac:64: -1- m4_pattern_allow([^LINUX_FALSE$]) m4trace:configure.ac:64: -1- _AM_SUBST_NOTMAKE([LINUX_TRUE]) m4trace:configure.ac:64: -1- _AM_SUBST_NOTMAKE([LINUX_FALSE]) m4trace:configure.ac:65: -1- AM_CONDITIONAL([WINDOWS], [test "$build_windows" = "yes"]) m4trace:configure.ac:65: -1- AC_SUBST([WINDOWS_TRUE]) m4trace:configure.ac:65: -1- AC_SUBST_TRACE([WINDOWS_TRUE]) m4trace:configure.ac:65: -1- m4_pattern_allow([^WINDOWS_TRUE$]) m4trace:configure.ac:65: -1- AC_SUBST([WINDOWS_FALSE]) m4trace:configure.ac:65: -1- AC_SUBST_TRACE([WINDOWS_FALSE]) m4trace:configure.ac:65: -1- m4_pattern_allow([^WINDOWS_FALSE$]) m4trace:configure.ac:65: -1- _AM_SUBST_NOTMAKE([WINDOWS_TRUE]) m4trace:configure.ac:65: -1- _AM_SUBST_NOTMAKE([WINDOWS_FALSE]) m4trace:configure.ac:66: -1- AM_CONDITIONAL([OSX], [test "$build_mac" = "yes"]) m4trace:configure.ac:66: -1- AC_SUBST([OSX_TRUE]) m4trace:configure.ac:66: -1- AC_SUBST_TRACE([OSX_TRUE]) m4trace:configure.ac:66: -1- m4_pattern_allow([^OSX_TRUE$]) m4trace:configure.ac:66: -1- AC_SUBST([OSX_FALSE]) m4trace:configure.ac:66: -1- AC_SUBST_TRACE([OSX_FALSE]) m4trace:configure.ac:66: -1- m4_pattern_allow([^OSX_FALSE$]) m4trace:configure.ac:66: -1- _AM_SUBST_NOTMAKE([OSX_TRUE]) m4trace:configure.ac:66: -1- _AM_SUBST_NOTMAKE([OSX_FALSE]) m4trace:configure.ac:69: -1- AC_SUBST([WINDRES]) m4trace:configure.ac:69: -1- AC_SUBST_TRACE([WINDRES]) m4trace:configure.ac:69: -1- m4_pattern_allow([^WINDRES$]) m4trace:configure.ac:78: -1- AC_SUBST([PKG_CONFIG]) m4trace:configure.ac:78: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:configure.ac:78: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:79: -1- AC_SUBST([UP_MIME]) m4trace:configure.ac:79: -1- AC_SUBST_TRACE([UP_MIME]) m4trace:configure.ac:79: -1- m4_pattern_allow([^UP_MIME$]) m4trace:configure.ac:80: -1- AC_SUBST([UP_DESKTOP]) m4trace:configure.ac:80: -1- AC_SUBST_TRACE([UP_DESKTOP]) m4trace:configure.ac:80: -1- m4_pattern_allow([^UP_DESKTOP$]) m4trace:configure.ac:81: -1- AC_SUBST([UP_APPSTREAM]) m4trace:configure.ac:81: -1- AC_SUBST_TRACE([UP_APPSTREAM]) m4trace:configure.ac:81: -1- m4_pattern_allow([^UP_APPSTREAM$]) m4trace:configure.ac:98: -1- AM_CONDITIONAL([GTK3], [test "$with_gtk" == "3"]) m4trace:configure.ac:98: -1- AC_SUBST([GTK3_TRUE]) m4trace:configure.ac:98: -1- AC_SUBST_TRACE([GTK3_TRUE]) m4trace:configure.ac:98: -1- m4_pattern_allow([^GTK3_TRUE$]) m4trace:configure.ac:98: -1- AC_SUBST([GTK3_FALSE]) m4trace:configure.ac:98: -1- AC_SUBST_TRACE([GTK3_FALSE]) m4trace:configure.ac:98: -1- m4_pattern_allow([^GTK3_FALSE$]) m4trace:configure.ac:98: -1- _AM_SUBST_NOTMAKE([GTK3_TRUE]) m4trace:configure.ac:98: -1- _AM_SUBST_NOTMAKE([GTK3_FALSE]) m4trace:configure.ac:107: -1- m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) m4trace:configure.ac:107: -1- AC_SUBST([PKG_CONFIG]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:107: -1- AC_SUBST([PKG_CONFIG_PATH]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([PKG_CONFIG_PATH]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG_PATH$]) m4trace:configure.ac:107: -1- AC_SUBST([PKG_CONFIG_LIBDIR]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([PKG_CONFIG_LIBDIR]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG_LIBDIR$]) m4trace:configure.ac:107: -1- AC_SUBST([PKG_CONFIG]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:107: -1- AC_SUBST([LGTK_CFLAGS]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([LGTK_CFLAGS]) m4trace:configure.ac:107: -1- m4_pattern_allow([^LGTK_CFLAGS$]) m4trace:configure.ac:107: -1- AC_SUBST([LGTK_LIBS]) m4trace:configure.ac:107: -1- AC_SUBST_TRACE([LGTK_LIBS]) m4trace:configure.ac:107: -1- m4_pattern_allow([^LGTK_LIBS$]) m4trace:configure.ac:110: -1- AC_SUBST([INTEGRATION_CFLAGS]) m4trace:configure.ac:110: -1- AC_SUBST_TRACE([INTEGRATION_CFLAGS]) m4trace:configure.ac:110: -1- m4_pattern_allow([^INTEGRATION_CFLAGS$]) m4trace:configure.ac:110: -1- AC_SUBST([INTEGRATION_LIBS]) m4trace:configure.ac:110: -1- AC_SUBST_TRACE([INTEGRATION_LIBS]) m4trace:configure.ac:110: -1- m4_pattern_allow([^INTEGRATION_LIBS$]) m4trace:configure.ac:113: -1- AC_SUBST([LIBXML2_CFLAGS]) m4trace:configure.ac:113: -1- AC_SUBST_TRACE([LIBXML2_CFLAGS]) m4trace:configure.ac:113: -1- m4_pattern_allow([^LIBXML2_CFLAGS$]) m4trace:configure.ac:113: -1- AC_SUBST([LIBXML2_LIBS]) m4trace:configure.ac:113: -1- AC_SUBST_TRACE([LIBXML2_LIBS]) m4trace:configure.ac:113: -1- m4_pattern_allow([^LIBXML2_LIBS$]) m4trace:configure.ac:114: -1- AC_SUBST([PANGOFT2_CFLAGS]) m4trace:configure.ac:114: -1- AC_SUBST_TRACE([PANGOFT2_CFLAGS]) m4trace:configure.ac:114: -1- m4_pattern_allow([^PANGOFT2_CFLAGS$]) m4trace:configure.ac:114: -1- AC_SUBST([PANGOFT2_LIBS]) m4trace:configure.ac:114: -1- AC_SUBST_TRACE([PANGOFT2_LIBS]) m4trace:configure.ac:114: -1- m4_pattern_allow([^PANGOFT2_LIBS$]) m4trace:configure.ac:115: -1- AC_SUBST([FFMPEG_CFLAGS]) m4trace:configure.ac:115: -1- AC_SUBST_TRACE([FFMPEG_CFLAGS]) m4trace:configure.ac:115: -1- m4_pattern_allow([^FFMPEG_CFLAGS$]) m4trace:configure.ac:115: -1- AC_SUBST([FFMPEG_LIBS]) m4trace:configure.ac:115: -1- AC_SUBST_TRACE([FFMPEG_LIBS]) m4trace:configure.ac:115: -1- m4_pattern_allow([^FFMPEG_LIBS$]) m4trace:configure.ac:117: -1- AC_SUBST([GLU_CFLAGS]) m4trace:configure.ac:117: -1- AC_SUBST_TRACE([GLU_CFLAGS]) m4trace:configure.ac:117: -1- m4_pattern_allow([^GLU_CFLAGS$]) m4trace:configure.ac:117: -1- AC_SUBST([GLU_LIBS]) m4trace:configure.ac:117: -1- AC_SUBST_TRACE([GLU_LIBS]) m4trace:configure.ac:117: -1- m4_pattern_allow([^GLU_LIBS$]) m4trace:configure.ac:119: -1- AC_SUBST([EPOXY_CFLAGS]) m4trace:configure.ac:119: -1- AC_SUBST_TRACE([EPOXY_CFLAGS]) m4trace:configure.ac:119: -1- m4_pattern_allow([^EPOXY_CFLAGS$]) m4trace:configure.ac:119: -1- AC_SUBST([EPOXY_LIBS]) m4trace:configure.ac:119: -1- AC_SUBST_TRACE([EPOXY_LIBS]) m4trace:configure.ac:119: -1- m4_pattern_allow([^EPOXY_LIBS$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CFLAGS]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CFLAGS]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.ac:140: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:140: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:140: -1- AC_SUBST([LIBS]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:140: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:140: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_SUBST([ac_ct_CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([ac_ct_CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.ac:140: -1- AC_SUBST([CC]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- AC_REQUIRE_AUX_FILE([compile]) m4trace:configure.ac:140: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([CCDEPMODE]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.ac:140: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.ac:140: -1- AC_SUBST([am__fastdepCC_TRUE]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) m4trace:configure.ac:140: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.ac:140: -1- AC_SUBST([am__fastdepCC_FALSE]) m4trace:configure.ac:140: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) m4trace:configure.ac:140: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.ac:140: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.ac:140: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.ac:146: -1- AC_SUBST([FC]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:146: -1- AC_SUBST([FCFLAGS]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([FCFLAGS]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FCFLAGS$]) m4trace:configure.ac:146: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:146: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:146: -1- AC_SUBST([LIBS]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:146: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:146: -1- AC_SUBST([FC]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:146: -1- AC_SUBST([ac_ct_FC]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([ac_ct_FC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^ac_ct_FC$]) m4trace:configure.ac:146: -1- AC_SUBST([FCLIBS]) m4trace:configure.ac:146: -1- AC_SUBST_TRACE([FCLIBS]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FCLIBS$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_DUMMY_MAIN]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_DUMMY_MAIN$]) m4trace:configure.ac:146: -1- AH_OUTPUT([FC_DUMMY_MAIN], [/* Define to dummy \'main\' function (if any) required to link to the Fortran libraries. */ @%:@undef FC_DUMMY_MAIN]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_DUMMY_MAIN_EQ_F77]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_DUMMY_MAIN_EQ_F77$]) m4trace:configure.ac:146: -1- AH_OUTPUT([FC_DUMMY_MAIN_EQ_F77], [/* Define if F77 and FC dummy \'main\' functions are identical. */ @%:@undef FC_DUMMY_MAIN_EQ_F77]) m4trace:configure.ac:146: -1- AH_OUTPUT([FC_FUNC], [/* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ @%:@undef FC_FUNC]) m4trace:configure.ac:146: -1- AH_OUTPUT([FC_FUNC_], [/* As FC_FUNC, but for C identifiers containing underscores. */ @%:@undef FC_FUNC_]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:150: -1- AC_SUBST([FC]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:150: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:150: -1- AC_SUBST([FCFLAGS]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([FCFLAGS]) m4trace:configure.ac:150: -1- m4_pattern_allow([^FCFLAGS$]) m4trace:configure.ac:150: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:150: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:150: -1- AC_SUBST([LIBS]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:150: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:150: -1- AC_SUBST([FC]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:150: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:150: -1- AC_SUBST([ac_ct_FC]) m4trace:configure.ac:150: -1- AC_SUBST_TRACE([ac_ct_FC]) m4trace:configure.ac:150: -1- m4_pattern_allow([^ac_ct_FC$]) m4trace:configure.ac:153: -1- AC_FC_SRCEXT([f90], [FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS"], [as_fn_error $? "Cannot compile .f90 files" "$LINENO" 5]) m4trace:configure.ac:153: -1- AC_SUBST([FCFLAGS_f90]) m4trace:configure.ac:153: -1- AC_SUBST_TRACE([FCFLAGS_f90]) m4trace:configure.ac:153: -1- m4_pattern_allow([^FCFLAGS_f90$]) m4trace:configure.ac:154: -1- AC_FC_SRCEXT([F90], [FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS"], [as_fn_error $? "Cannot compile .F90 files" "$LINENO" 5]) m4trace:configure.ac:154: -1- AC_SUBST([FCFLAGS_F90]) m4trace:configure.ac:154: -1- AC_SUBST_TRACE([FCFLAGS_F90]) m4trace:configure.ac:154: -1- m4_pattern_allow([^FCFLAGS_F90$]) m4trace:configure.ac:158: -1- AC_SUBST([FCLIBS]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([FCLIBS]) m4trace:configure.ac:158: -1- m4_pattern_allow([^FCLIBS$]) m4trace:configure.ac:159: -1- AC_FC_FREEFORM m4trace:configure.ac:172: -1- AC_SUBST([OPENMP_CFLAGS]) m4trace:configure.ac:172: -1- AC_SUBST_TRACE([OPENMP_CFLAGS]) m4trace:configure.ac:172: -1- m4_pattern_allow([^OPENMP_CFLAGS$]) m4trace:configure.ac:173: -1- AC_SUBST([OPENMP_CFLAGS]) m4trace:configure.ac:173: -1- AC_SUBST_TRACE([OPENMP_CFLAGS]) m4trace:configure.ac:173: -1- m4_pattern_allow([^OPENMP_CFLAGS$]) m4trace:configure.ac:174: -1- AM_CONDITIONAL([OPENMP], [test "${OPENMP_CFLAGS}" != ""]) m4trace:configure.ac:174: -1- AC_SUBST([OPENMP_TRUE]) m4trace:configure.ac:174: -1- AC_SUBST_TRACE([OPENMP_TRUE]) m4trace:configure.ac:174: -1- m4_pattern_allow([^OPENMP_TRUE$]) m4trace:configure.ac:174: -1- AC_SUBST([OPENMP_FALSE]) m4trace:configure.ac:174: -1- AC_SUBST_TRACE([OPENMP_FALSE]) m4trace:configure.ac:174: -1- m4_pattern_allow([^OPENMP_FALSE$]) m4trace:configure.ac:174: -1- _AM_SUBST_NOTMAKE([OPENMP_TRUE]) m4trace:configure.ac:174: -1- _AM_SUBST_NOTMAKE([OPENMP_FALSE]) m4trace:configure.ac:177: -1- AC_CONFIG_FILES([ Makefile data/Makefile man/Makefile locale/Makefile src/Makefile src/startup-testing/Makefile ]) m4trace:configure.ac:186: -1- AC_CONFIG_HEADERS([config.h]) m4trace:configure.ac:188: -1- AC_CONFIG_FILES([misc/win/atomes.rc:misc/win/atomes.rc.in misc/win/startup.rc:misc/win/startup.rc.in]) m4trace:configure.ac:190: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) m4trace:configure.ac:190: -1- m4_pattern_allow([^LIB@&t@OBJS$]) m4trace:configure.ac:190: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([LTLIBOBJS]) m4trace:configure.ac:190: -1- m4_pattern_allow([^LTLIBOBJS$]) m4trace:configure.ac:190: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) m4trace:configure.ac:190: -1- AC_SUBST([am__EXEEXT_TRUE]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE]) m4trace:configure.ac:190: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) m4trace:configure.ac:190: -1- AC_SUBST([am__EXEEXT_FALSE]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE]) m4trace:configure.ac:190: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) m4trace:configure.ac:190: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) m4trace:configure.ac:190: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([top_builddir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([top_build_prefix]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([srcdir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([abs_srcdir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([top_srcdir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([abs_top_srcdir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([builddir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([abs_builddir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([abs_top_builddir]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([INSTALL]) m4trace:configure.ac:190: -1- AC_SUBST_TRACE([MKDIR_P]) atomes_1.3.1/autom4te.cache/output.00000664000175000017500000113426315212624223016744 0ustar lerouxleroux@%:@! /bin/sh @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.72 for atomes 1.3.1. @%:@ @%:@ Report bugs to . @%:@ @%:@ @%:@ Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, @%:@ Inc. @%:@ @%:@ @%:@ This configure script is free software; the Free Software Foundation @%:@ gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in @%:@( e) case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case e in @%:@( e) case \`(set -o) 2>/dev/null\` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else case e in @%:@( e) exitcode=1; echo positional parameters were not saved. ;; esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else case e in @%:@( e) as_have_required=no ;; esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else case e in @%:@( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in @%:@( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else case e in @%:@( e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi ;; esac fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: atomes@ipcms.unistra.fr about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi ;; esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in @%:@( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in @%:@( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' t clear :clear s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIB@&t@OBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='atomes' PACKAGE_TARNAME='atomes' PACKAGE_VERSION='1.3.1' PACKAGE_STRING='atomes 1.3.1' PACKAGE_BUGREPORT='atomes@ipcms.unistra.fr' PACKAGE_URL='https://atomes.ipcms.fr' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIB@&t@OBJS OPENMP_FALSE OPENMP_TRUE OPENMP_CFLAGS FCFLAGS_F90 FCFLAGS_f90 FCLIBS ac_ct_FC FCFLAGS FC EPOXY_LIBS EPOXY_CFLAGS GLU_LIBS GLU_CFLAGS FFMPEG_LIBS FFMPEG_CFLAGS PANGOFT2_LIBS PANGOFT2_CFLAGS LIBXML2_LIBS LIBXML2_CFLAGS INTEGRATION_LIBS INTEGRATION_CFLAGS LGTK_LIBS LGTK_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH GTK3_FALSE GTK3_TRUE UP_APPSTREAM UP_DESKTOP UP_MIME PKG_CONFIG WINDRES OSX_FALSE OSX_TRUE WINDOWS_FALSE WINDOWS_TRUE LINUX_FALSE LINUX_TRUE host_os host_vendor host_cpu host build_os build_vendor build_cpu build am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC ATOMES_PATCH_VERSION ATOMES_MINOR_VERSION ATOMES_MAJOR_VERSION am__xargs_n am__rm_f_notfound AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking with_gtk enable___disable_openmp enable_openmp ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR LGTK_CFLAGS LGTK_LIBS INTEGRATION_CFLAGS INTEGRATION_LIBS LIBXML2_CFLAGS LIBXML2_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS FFMPEG_CFLAGS FFMPEG_LIBS GLU_CFLAGS GLU_LIBS EPOXY_CFLAGS EPOXY_LIBS FC FCFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: '$ac_option' Try '$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF 'configure' configures atomes 1.3.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @<:@@S|@ac_default_prefix@:>@ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX @<:@PREFIX@:>@ By default, 'make install' will install all the files in '$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify an installation prefix other than '$ac_default_prefix' using '--prefix', for instance '--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root @<:@DATAROOTDIR/doc/atomes@:>@ --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of atomes 1.3.1:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-openmp disable OpenMP thread parallelisation (default: no) --disable-openmp do not use OpenMP Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gtk=3|4 the GTK version to use (default: 3) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path LGTK_CFLAGS C compiler flags for LGTK, overriding pkg-config LGTK_LIBS linker flags for LGTK, overriding pkg-config INTEGRATION_CFLAGS C compiler flags for INTEGRATION, overriding pkg-config INTEGRATION_LIBS linker flags for INTEGRATION, overriding pkg-config LIBXML2_CFLAGS C compiler flags for LIBXML2, overriding pkg-config LIBXML2_LIBS linker flags for LIBXML2, overriding pkg-config PANGOFT2_CFLAGS C compiler flags for PANGOFT2, overriding pkg-config PANGOFT2_LIBS linker flags for PANGOFT2, overriding pkg-config FFMPEG_CFLAGS C compiler flags for FFMPEG, overriding pkg-config FFMPEG_LIBS linker flags for FFMPEG, overriding pkg-config GLU_CFLAGS C compiler flags for GLU, overriding pkg-config GLU_LIBS linker flags for GLU, overriding pkg-config EPOXY_CFLAGS C compiler flags for EPOXY, overriding pkg-config EPOXY_LIBS linker flags for EPOXY, overriding pkg-config FC Fortran compiler command FCFLAGS Fortran compiler flags Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . atomes home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF atomes configure 1.3.1 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## @%:@ ac_fn_c_try_compile LINENO @%:@ -------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_compile @%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES @%:@ ------------------------------------------------------- @%:@ Tests whether HEADER exists and can be compiled using the include files in @%:@ INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 @%:@include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else case e in @%:@( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } @%:@ ac_fn_c_check_header_compile @%:@ ac_fn_fc_try_compile LINENO @%:@ --------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_fc_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_fc_try_compile @%:@ ac_fn_c_try_link LINENO @%:@ ----------------------- @%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_link ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?@<:@ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by atomes $as_me 1.3.1, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "@%:@define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in @%:@( */*) : ;; @%:@( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See 'config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (char **p, int i) { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* C89 style stringification. */ #define noexpand_stringify(a) #a const char *stringified = noexpand_stringify(arbitrary+token=sequence); /* C89 style token pasting. Exercises some of the corner cases that e.g. old MSVC gets wrong, but not very hard. */ #define noexpand_concat(a,b) a##b #define expand_concat(a,b) noexpand_concat(a,b) extern int vA; extern int vbee; #define aye A #define bee B int *pvA = &expand_concat(v,aye); int *pvbee = &noexpand_concat(v,bee); /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' /* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif // See if C++-style comments work. #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Work around memory leak warnings. free (ia); // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' /* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" # Auxiliary files required by this configure script. ac_aux_files="config.guess config.sub compile missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else case e in @%:@( e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; esac fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_@&t@config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_@&t@config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_@&t@configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.18' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in @%:@(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir ;; esac fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sleep supports fractional seconds" >&5 printf %s "checking whether sleep supports fractional seconds... " >&6; } if test ${am_cv_sleep_fractional_seconds+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if sleep 0.001 2>/dev/null then : am_cv_sleep_fractional_seconds=yes else case e in @%:@( e) am_cv_sleep_fractional_seconds=no ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_sleep_fractional_seconds" >&5 printf "%s\n" "$am_cv_sleep_fractional_seconds" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking filesystem timestamp resolution" >&5 printf %s "checking filesystem timestamp resolution... " >&6; } if test ${am_cv_filesystem_timestamp_resolution+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) # Default to the worst case. am_cv_filesystem_timestamp_resolution=2 # Only try to go finer than 1 sec if sleep can do it. # Don't try 1 sec, because if 0.01 sec and 0.1 sec don't work, # - 1 sec is not much of a win compared to 2 sec, and # - it takes 2 seconds to perform the test whether 1 sec works. # # Instead, just use the default 2s on platforms that have 1s resolution, # accept the extra 1s delay when using $sleep in the Automake tests, in # exchange for not incurring the 2s delay for running the test for all # packages. # am_try_resolutions= if test "$am_cv_sleep_fractional_seconds" = yes; then # Even a millisecond often causes a bunch of false positives, # so just try a hundredth of a second. The time saved between .001 and # .01 is not terribly consequential. am_try_resolutions="0.01 0.1 $am_try_resolutions" fi # In order to catch current-generation FAT out, we must *modify* files # that already exist; the *creation* timestamp is finer. Use names # that make ls -t sort them differently when they have equal # timestamps than when they have distinct timestamps, keeping # in mind that ls -t prints the *newest* file first. rm -f conftest.ts? : > conftest.ts1 : > conftest.ts2 : > conftest.ts3 # Make sure ls -t actually works. Do 'set' in a subshell so we don't # clobber the current shell's arguments. (Outer-level square brackets # are removed by m4; they're present so that m4 does not expand # ; be careful, easy to get confused.) if ( set X `ls -t conftest.ts[12]` && { test "$*" != "X conftest.ts1 conftest.ts2" || test "$*" != "X conftest.ts2 conftest.ts1"; } ); then :; else # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". printf "%s\n" ""Bad output from ls -t: \"`ls -t conftest.ts[12]`\""" >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "ls -t produces unexpected output. Make sure there is not a broken ls alias in your environment. See 'config.log' for more details" "$LINENO" 5; } fi for am_try_res in $am_try_resolutions; do # Any one fine-grained sleep might happen to cross the boundary # between two values of a coarser actual resolution, but if we do # two fine-grained sleeps in a row, at least one of them will fall # entirely within a coarse interval. echo alpha > conftest.ts1 sleep $am_try_res echo beta > conftest.ts2 sleep $am_try_res echo gamma > conftest.ts3 # We assume that 'ls -t' will make use of high-resolution # timestamps if the operating system supports them at all. if (set X `ls -t conftest.ts?` && test "$2" = conftest.ts3 && test "$3" = conftest.ts2 && test "$4" = conftest.ts1); then # # Ok, ls -t worked. If we're at a resolution of 1 second, we're done, # because we don't need to test make. make_ok=true if test $am_try_res != 1; then # But if we've succeeded so far with a subsecond resolution, we # have one more thing to check: make. It can happen that # everything else supports the subsecond mtimes, but make doesn't; # notably on macOS, which ships make 3.81 from 2006 (the last one # released under GPLv2). https://bugs.gnu.org/68808 # # We test $MAKE if it is defined in the environment, else "make". # It might get overridden later, but our hope is that in practice # it does not matter: it is the system "make" which is (by far) # the most likely to be broken, whereas if the user overrides it, # probably they did so with a better, or at least not worse, make. # https://lists.gnu.org/archive/html/automake/2024-06/msg00051.html # # Create a Makefile (real tab character here): rm -f conftest.mk echo 'conftest.ts1: conftest.ts2' >conftest.mk echo ' touch conftest.ts2' >>conftest.mk # # Now, running # touch conftest.ts1; touch conftest.ts2; make # should touch ts1 because ts2 is newer. This could happen by luck, # but most often, it will fail if make's support is insufficient. So # test for several consecutive successes. # # (We reuse conftest.ts[12] because we still want to modify existing # files, not create new ones, per above.) n=0 make=${MAKE-make} until test $n -eq 3; do echo one > conftest.ts1 sleep $am_try_res echo two > conftest.ts2 # ts2 should now be newer than ts1 if $make -f conftest.mk | grep 'up to date' >/dev/null; then make_ok=false break # out of $n loop fi n=`expr $n + 1` done fi # if $make_ok; then # Everything we know to check worked out, so call this resolution good. am_cv_filesystem_timestamp_resolution=$am_try_res break # out of $am_try_res loop fi # Otherwise, we'll go on to check the next resolution. fi done rm -f conftest.ts? # (end _am_filesystem_timestamp_resolution) ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_filesystem_timestamp_resolution" >&5 printf "%s\n" "$am_cv_filesystem_timestamp_resolution" >&6; } # This check should not be cached, as it may vary across builds of # different projects. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). am_build_env_is_sane=no am_has_slept=no rm -f conftest.file for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi test "$2" = conftest.file ); then am_build_env_is_sane=yes break fi # Just in case. sleep "$am_cv_filesystem_timestamp_resolution" am_has_slept=yes done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_build_env_is_sane" >&5 printf "%s\n" "$am_build_env_is_sane" >&6; } if test "$am_build_env_is_sane" = no; then as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if test -e conftest.file || grep 'slept: no' conftest.file >/dev/null 2>&1 then : else case e in @%:@( e) ( sleep "$am_cv_filesystem_timestamp_resolution" ) & am_sleep_pid=$! ;; esac fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was 's,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ *'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS ;; esac fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use plain mkdir -p, # in the hope it doesn't have the bugs of ancient mkdir. MKDIR_P='mkdir -p' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make ;; esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AM_DEFAULT_VERBOSITY=1 @%:@ Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } AM_BACKSLASH='\' am__rm_f_notfound= if (rm -f && rm -fr && rm -rf) 2>/dev/null then : else case e in @%:@( e) am__rm_f_notfound='""' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking xargs -n works" >&5 printf %s "checking xargs -n works... " >&6; } if test ${am_cv_xargs_n_works+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "`echo 1 2 3 | xargs -n2 echo`" = "1 2 3" then : am_cv_xargs_n_works=yes else case e in @%:@( e) am_cv_xargs_n_works=no ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_xargs_n_works" >&5 printf "%s\n" "$am_cv_xargs_n_works" >&6; } if test "$am_cv_xargs_n_works" = yes then : am__xargs_n='xargs -n' else case e in @%:@( e) am__xargs_n='am__xargs_n () { shift; sed "s/ /\\n/g" | while read am__xargs_n_arg; do "" "$am__xargs_n_arg"; done; }' ;; esac fi if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='atomes' VERSION='1.3.1' printf "%s\n" "@%:@define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "@%:@define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar plaintar pax cpio none' # The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 printf %s "checking whether UID '$am_uid' is supported by ustar format... " >&6; } if test x$am_uid = xunknown; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&5 printf "%s\n" "$as_me: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&2;} elif test $am_uid -le $am_max_uid; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } _am_tools=none fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 printf %s "checking whether GID '$am_gid' is supported by ustar format... " >&6; } if test x$gm_gid = xunknown; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&5 printf "%s\n" "$as_me: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&2;} elif test $am_gid -le $am_max_gid; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } _am_tools=none fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 printf %s "checking how to create a ustar tar archive... " >&6; } # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_ustar-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do { echo "$as_me:$LINENO: $_am_tar --version" >&5 ($_am_tar --version) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && break done am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x ustar -w "$$tardir"' am__tar_='pax -L -x ustar -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H ustar -L' am__tar_='find "$tardir" -print | cpio -o -H ustar -L' am__untar='cpio -i -H ustar -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_ustar}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -rf conftest.dir if test -s conftest.tar; then { echo "$as_me:$LINENO: $am__untar &5 ($am__untar &5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 (cat conftest.dir/file) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir if test ${am_cv_prog_tar_ustar+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) am_cv_prog_tar_ustar=$_am_tool ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 printf "%s\n" "$am_cv_prog_tar_ustar" >&6; } # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi printf "%s\n" "@%:@define ATOMES_MAJOR_VERSION 1" >>confdefs.h ATOMES_MAJOR_VERSION=1 printf "%s\n" "@%:@define ATOMES_MINOR_VERSION 3" >>confdefs.h ATOMES_MINOR_VERSION=3 printf "%s\n" "@%:@define ATOMES_PATCH_VERSION 1" >>confdefs.h ATOMES_PATCH_VERSION=1 ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. # So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else case e in @%:@( e) ac_file='' ;; esac fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See 'config.log' for more details" "$LINENO" 5; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) # catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will # work properly (i.e., refer to 'conftest.exe'), while it won't with # 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else case e in @%:@( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include int main (void) { FILE *f = fopen ("conftest.out", "w"); if (!f) return 1; return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use '--host'. See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext \ conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else case e in @%:@( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in @%:@( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in @%:@( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in @%:@( '0:this is the am__doit target') : case $s in @%:@( BSD) : am__include='.include' am__quote='"' ;; @%:@( *) : am__include='include' am__quote='' ;; esac ;; @%:@( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } @%:@ Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "@%:@define STDC_HEADERS 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes then : printf "%s\n" "@%:@define HAVE_LIBINTL_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes then : printf "%s\n" "@%:@define HAVE_LOCALE_H 1" >>confdefs.h fi # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac build_linux=no build_windows=no build_mac=no # Detect the target system case "${host_os}" in linux*) build_linux=yes echo "Building Linux application" ;; cygwin*|mingw*) build_windows=yes echo "Building Windows application" ;; darwin*) build_mac=yes echo "Building macOS application" ;; *) as_fn_error $? "\"OS $host_os is not supported\"" "$LINENO" 5 ;; esac # Pass the conditionals to automake if test "$build_linux" = "yes"; then LINUX_TRUE= LINUX_FALSE='#' else LINUX_TRUE='#' LINUX_FALSE= fi if test "$build_windows" = "yes"; then WINDOWS_TRUE= WINDOWS_FALSE='#' else WINDOWS_TRUE='#' WINDOWS_FALSE= fi if test "$build_mac" = "yes"; then OSX_TRUE= OSX_FALSE='#' else OSX_TRUE='#' OSX_FALSE= fi if test "$build_windows" = "yes"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_WINDRES+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 printf "%s\n" "$WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_WINDRES+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 printf "%s\n" "$ac_ct_WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="no" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi if test "$WINDRES" = no; then as_fn_error $? "*** Could not find an implementation of windres in your PATH." "$LINENO" 5 fi fi # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PKG_CONFIG" && ac_cv_prog_PKG_CONFIG="no" fi ;; esac fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-mime-database", so it can be a program name with args. set dummy update-mime-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_MIME+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$UP_MIME"; then ac_cv_prog_UP_MIME="$UP_MIME" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_MIME="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_MIME" && ac_cv_prog_UP_MIME="no" fi ;; esac fi UP_MIME=$ac_cv_prog_UP_MIME if test -n "$UP_MIME"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_MIME" >&5 printf "%s\n" "$UP_MIME" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-desktop-database", so it can be a program name with args. set dummy update-desktop-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_DESKTOP+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$UP_DESKTOP"; then ac_cv_prog_UP_DESKTOP="$UP_DESKTOP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_DESKTOP="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_DESKTOP" && ac_cv_prog_UP_DESKTOP="no" fi ;; esac fi UP_DESKTOP=$ac_cv_prog_UP_DESKTOP if test -n "$UP_DESKTOP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_DESKTOP" >&5 printf "%s\n" "$UP_DESKTOP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "appstream-util", so it can be a program name with args. set dummy appstream-util; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_APPSTREAM+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$UP_APPSTREAM"; then ac_cv_prog_UP_APPSTREAM="$UP_APPSTREAM" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_APPSTREAM="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_APPSTREAM" && ac_cv_prog_UP_APPSTREAM="no" fi ;; esac fi UP_APPSTREAM=$ac_cv_prog_UP_APPSTREAM if test -n "$UP_APPSTREAM"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_APPSTREAM" >&5 printf "%s\n" "$UP_APPSTREAM" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # determine the GTK version to use { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the GTK version to use" >&5 printf %s "checking the GTK version to use... " >&6; } @%:@ Check whether --with-gtk was given. if test ${with_gtk+y} then : withval=$with_gtk; case "$with_gtk" in 3|4) ;; *) as_fn_error $? "invalid GTK version specified" "$LINENO" 5 ;; esac else case e in @%:@( e) with_gtk=3 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_gtk" >&5 printf "%s\n" "$with_gtk" >&6; } if test "$with_gtk" == "3"; then GTK3_TRUE= GTK3_FALSE='#' else GTK3_TRUE='#' GTK3_FALSE= fi case "$with_gtk" in 3) gtk_version="gtk+-3.0" gtk_version_number="3.16" ;; 4) gtk_version="gtk4" gtk_version_number="4.6" ;; esac if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi if test -z "$PKG_CONFIG"; then as_fn_error $? "pkg-config not found" "$LINENO" 5 fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $gtk_version >= $gtk_version_number" >&5 printf %s "checking for $gtk_version >= $gtk_version_number... " >&6; } if test -n "$LGTK_CFLAGS"; then pkg_cv_LGTK_CFLAGS="$LGTK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_version >= \$gtk_version_number\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_version >= $gtk_version_number") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LGTK_CFLAGS=`$PKG_CONFIG --cflags "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LGTK_LIBS"; then pkg_cv_LGTK_LIBS="$LGTK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_version >= \$gtk_version_number\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_version >= $gtk_version_number") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LGTK_LIBS=`$PKG_CONFIG --libs "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LGTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$gtk_version >= $gtk_version_number" 2>&1` else LGTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$gtk_version >= $gtk_version_number" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LGTK_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ($gtk_version >= $gtk_version_number) were not met: $LGTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LGTK_CFLAGS and LGTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LGTK_CFLAGS and LGTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else LGTK_CFLAGS=$pkg_cv_LGTK_CFLAGS LGTK_LIBS=$pkg_cv_LGTK_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi if test "$with_gtk" = "3"; then if test "$build_mac" = "yes"; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gtk-mac-integration" >&5 printf %s "checking for gtk-mac-integration... " >&6; } if test -n "$INTEGRATION_CFLAGS"; then pkg_cv_INTEGRATION_CFLAGS="$INTEGRATION_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-mac-integration\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-mac-integration") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_INTEGRATION_CFLAGS=`$PKG_CONFIG --cflags "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$INTEGRATION_LIBS"; then pkg_cv_INTEGRATION_LIBS="$INTEGRATION_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-mac-integration\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-mac-integration") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_INTEGRATION_LIBS=`$PKG_CONFIG --libs "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then INTEGRATION_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk-mac-integration" 2>&1` else INTEGRATION_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk-mac-integration" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$INTEGRATION_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtk-mac-integration) were not met: $INTEGRATION_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables INTEGRATION_CFLAGS and INTEGRATION_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables INTEGRATION_CFLAGS and INTEGRATION_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else INTEGRATION_CFLAGS=$pkg_cv_INTEGRATION_CFLAGS INTEGRATION_LIBS=$pkg_cv_INTEGRATION_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libxml-2.0 >= 2.4.0" >&5 printf %s "checking for libxml-2.0 >= 2.4.0... " >&6; } if test -n "$LIBXML2_CFLAGS"; then pkg_cv_LIBXML2_CFLAGS="$LIBXML2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBXML2_LIBS"; then pkg_cv_LIBXML2_LIBS="$LIBXML2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_LIBS=`$PKG_CONFIG --libs "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBXML2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` else LIBXML2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBXML2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libxml-2.0 >= 2.4.0) were not met: $LIBXML2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else LIBXML2_CFLAGS=$pkg_cv_LIBXML2_CFLAGS LIBXML2_LIBS=$pkg_cv_LIBXML2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pangoft2" >&5 printf %s "checking for pangoft2... " >&6; } if test -n "$PANGOFT2_CFLAGS"; then pkg_cv_PANGOFT2_CFLAGS="$PANGOFT2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_CFLAGS=`$PKG_CONFIG --cflags "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$PANGOFT2_LIBS"; then pkg_cv_PANGOFT2_LIBS="$PANGOFT2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_LIBS=`$PKG_CONFIG --libs "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "pangoft2" 2>&1` else PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "pangoft2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PANGOFT2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (pangoft2) were not met: $PANGOFT2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else PANGOFT2_CFLAGS=$pkg_cv_PANGOFT2_CFLAGS PANGOFT2_LIBS=$pkg_cv_PANGOFT2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libavcodec libavformat libavutil libswscale" >&5 printf %s "checking for libavcodec libavformat libavutil libswscale... " >&6; } if test -n "$FFMPEG_CFLAGS"; then pkg_cv_FFMPEG_CFLAGS="$FFMPEG_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_CFLAGS=`$PKG_CONFIG --cflags "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FFMPEG_LIBS"; then pkg_cv_FFMPEG_LIBS="$FFMPEG_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FFMPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` else FFMPEG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FFMPEG_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libavcodec libavformat libavutil libswscale) were not met: $FFMPEG_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else FFMPEG_CFLAGS=$pkg_cv_FFMPEG_CFLAGS FFMPEG_LIBS=$pkg_cv_FFMPEG_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi if test "$build_windows" = "no"; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glu" >&5 printf %s "checking for glu... " >&6; } if test -n "$GLU_CFLAGS"; then pkg_cv_GLU_CFLAGS="$GLU_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_CFLAGS=`$PKG_CONFIG --cflags "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLU_LIBS"; then pkg_cv_GLU_LIBS="$GLU_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_LIBS=`$PKG_CONFIG --libs "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLU_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glu" 2>&1` else GLU_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glu" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLU_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glu) were not met: $GLU_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else GLU_CFLAGS=$pkg_cv_GLU_CFLAGS GLU_LIBS=$pkg_cv_GLU_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for epoxy" >&5 printf %s "checking for epoxy... " >&6; } if test -n "$EPOXY_CFLAGS"; then pkg_cv_EPOXY_CFLAGS="$EPOXY_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_CFLAGS=`$PKG_CONFIG --cflags "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$EPOXY_LIBS"; then pkg_cv_EPOXY_LIBS="$EPOXY_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_LIBS=`$PKG_CONFIG --libs "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then EPOXY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "epoxy" 2>&1` else EPOXY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "epoxy" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$EPOXY_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (epoxy) were not met: $EPOXY_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else EPOXY_CFLAGS=$pkg_cv_EPOXY_CFLAGS EPOXY_LIBS=$pkg_cv_EPOXY_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi # Checking for compilers # C ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in @%:@( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in @%:@( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in @%:@( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags__$CFLAGS" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 printf %s "checking whether C compiler accepts $CFLAGS... " >&6; } if eval test \${$as_CACHEVAR+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$as_CACHEVAR=yes" else case e in @%:@( e) eval "$as_CACHEVAR=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ax_check_save_flags ;; esac fi eval ac_res=\$$as_CACHEVAR { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes" then : : else case e in @%:@( e) : ;; esac fi # Fortran 90 ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use '.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else case e in @%:@( e) ac_cv_prog_fc_g=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $@%:@ != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* | mingw* | windows*) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" ;; esac fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5 printf %s "checking for dummy main to link with Fortran libraries... " >&6; } if test ${ac_cv_fc_dummy_main+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_fc_dm_save_LIBS=$LIBS LIBS="$LIBS $FCLIBS" ac_fortran_dm_var=FC_DUMMY_MAIN ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # First, try linking without a dummy main: cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=none else case e in @%:@( e) ac_cv_fortran_dummy_main=unknown ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@define $ac_fortran_dm_var $ac_func #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=$ac_func; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_fc_dm_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_dummy_main" >&5 printf "%s\n" "$ac_cv_fc_dummy_main" >&6; } FC_DUMMY_MAIN=$ac_cv_fc_dummy_main if test "$FC_DUMMY_MAIN" != unknown then : if test $FC_DUMMY_MAIN != none; then printf "%s\n" "@%:@define FC_DUMMY_MAIN $FC_DUMMY_MAIN" >>confdefs.h if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then printf "%s\n" "@%:@define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h fi fi else case e in @%:@( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "linking to Fortran libraries from C fails See 'config.log' for more details" "$LINENO" 5; } ;; esac fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5 printf %s "checking for Fortran name-mangling scheme... " >&6; } if test ${ac_cv_fc_mangling+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FCLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char $ac_func (void); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success=yes; break 2 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char $ac_func (void); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success_extra=yes; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_fc_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore" fi else ac_cv_fc_mangling="unknown" fi else ac_cv_fc_mangling="unknown" fi LIBS=$ac_save_LIBS rm -rf conftest* rm -f cfortran_test* else case e in @%:@( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compile a simple Fortran program See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_mangling" >&5 printf "%s\n" "$ac_cv_fc_mangling" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu case $ac_cv_fc_mangling in "lower case, no underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name" >>confdefs.h ;; "lower case, no underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## __" >>confdefs.h ;; "upper case, no underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME" >>confdefs.h ;; "upper case, no underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## __" >>confdefs.h ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 printf "%s\n" "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu fcflags_save="$FCFLAGS" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use '.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in @%:@( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else case e in @%:@( e) ac_cv_prog_fc_g=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu FCFLAGS="$fcflags_save" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f90 files" >&5 printf %s "checking for Fortran flag to compile .f90 files... " >&6; } if test ${ac_cv_fc_srcext_f90+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_ext=f90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_f90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=f90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_f90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.f90 ac_fcflags_srcext=$ac_fcflags_srcext_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f90" >&5 printf "%s\n" "$ac_cv_fc_srcext_f90" >&6; } if test "x$ac_cv_fc_srcext_f90" = xunknown; then as_fn_error $? "Cannot compile .f90 files" "$LINENO" 5 else ac_fc_srcext=f90 if test "x$ac_cv_fc_srcext_f90" = xnone; then ac_fcflags_srcext="" FCFLAGS_f90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_f90 FCFLAGS_f90=$ac_cv_fc_srcext_f90 fi FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .F90 files" >&5 printf %s "checking for Fortran flag to compile .F90 files... " >&6; } if test ${ac_cv_fc_srcext_F90+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_ext=F90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_F90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=F90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_F90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.F90 ac_fcflags_srcext=$ac_fcflags_srcext_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_F90" >&5 printf "%s\n" "$ac_cv_fc_srcext_F90" >&6; } if test "x$ac_cv_fc_srcext_F90" = xunknown; then as_fn_error $? "Cannot compile .F90 files" "$LINENO" 5 else ac_fc_srcext=F90 if test "x$ac_cv_fc_srcext_F90" = xnone; then ac_fcflags_srcext="" FCFLAGS_F90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_F90 FCFLAGS_F90=$ac_cv_fc_srcext_F90 fi FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu as_CACHEVAR=`printf "%s\n" "ax_cv_check_fcflags__$FCFLAGS" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Fortran compiler accepts $FCFLAGS" >&5 printf %s "checking whether Fortran compiler accepts $FCFLAGS... " >&6; } if eval test \${$as_CACHEVAR+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ax_check_save_flags=$FCFLAGS FCFLAGS="$FCFLAGS $FCFLAGS" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : eval "$as_CACHEVAR=yes" else case e in @%:@( e) eval "$as_CACHEVAR=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext FCFLAGS=$ax_check_save_flags ;; esac fi eval ac_res=\$$as_CACHEVAR { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes" then : : else case e in @%:@( e) : ;; esac fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else case e in @%:@( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $@%:@ != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* | mingw* | windows*) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" ;; esac fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in @%:@( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag needed to accept free-form source" >&5 printf %s "checking for Fortran flag needed to accept free-form source... " >&6; } if test ${ac_cv_fc_freeform+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_fc_freeform=unknown ac_fc_freeform_FCFLAGS_save=$FCFLAGS for ac_flag in none -ffree-form -FR -free -qfree -Mfree -Mfreeform \ -freeform "-f free" -8 +source=free -nfix --nfix -Free do test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_freeform_FCFLAGS_save $ac_flag" cat > conftest.$ac_ext <<_ACEOF program freeform ! FIXME: how to best confuse non-freeform compilers? print *, 'Hello ', & @&t@ 'world.' end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_freeform=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.err conftest.$ac_objext conftest.$ac_ext FCFLAGS=$ac_fc_freeform_FCFLAGS_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_freeform" >&5 printf "%s\n" "$ac_cv_fc_freeform" >&6; } if test "x$ac_cv_fc_freeform" = xunknown; then as_fn_error 77 "Fortran does not accept free-form source" "$LINENO" 5 else if test "x$ac_cv_fc_freeform" != xnone; then FCFLAGS="$FCFLAGS $ac_cv_fc_freeform" fi fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat lic > src/version.h echo "#define FC \""$FC"\"" >> src/version.h echo "#define FCFLAGS \""$FCFLAGS"\"" >> src/version.h echo "#define CC \""$CC"\"" >> src/version.h echo "#define CFLAGS \""$CFLAGS"\"" >> src/version.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the OpenMP specification and flags" >&5 printf %s "checking the OpenMP specification and flags... " >&6; } @%:@ Check whether --enable---disable-openmp was given. if test ${enable___disable_openmp+y} then : enableval=$enable___disable_openmp; with_opemp="no" else case e in @%:@( e) with_openmp="yes" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_openmp" >&5 printf "%s\n" "$with_openmp" >&6; } if test "$with_openmp" = "yes"; then if test -e penmp || test -e mp; then as_fn_error $? "AC@&t@_OPENMP clobbers files named 'mp' and 'penmp'. Aborting configure because one of these files already exists." "$LINENO" 5 fi @%:@ Check whether --enable-openmp was given. if test ${enable_openmp+y} then : enableval=$enable_openmp; fi OPENMP_CFLAGS= if test "$enable_openmp" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to support OpenMP" >&5 printf %s "checking for $CC option to support OpenMP... " >&6; } if test ${ac_cv_prog_c_openmp+y} then : printf %s "(cached) " >&6 else case e in @%:@( e) ac_cv_prog_c_openmp='not found' for ac_option in '' -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp -homp \ -Popenmp --openmp; do ac_save_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $ac_option" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef _OPENMP #error "OpenMP not supported" #endif #include int main (void) { return omp_get_num_threads (); } _ACEOF if ac_fn_c_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef _OPENMP #error "OpenMP not supported" #endif #include int main (void) { return omp_get_num_threads (); } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_prog_c_openmp=$ac_option else case e in @%:@( e) ac_cv_prog_c_openmp='unsupported' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ac_save_CFLAGS if test "$ac_cv_prog_c_openmp" != 'not found'; then break fi done if test "$ac_cv_prog_c_openmp" = 'not found'; then ac_cv_prog_c_openmp='unsupported' elif test "$ac_cv_prog_c_openmp" = ''; then ac_cv_prog_c_openmp='none needed' fi rm -f penmp mp ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_c_openmp" >&5 printf "%s\n" "$ac_cv_prog_c_openmp" >&6; } if test "$ac_cv_prog_c_openmp" != 'unsupported' && \ test "$ac_cv_prog_c_openmp" != 'none needed'; then OPENMP_CFLAGS="$ac_cv_prog_c_openmp" fi fi if test "${OPENMP_CFLAGS}" != ""; then OPENMP_TRUE= OPENMP_FALSE='#' else OPENMP_TRUE='#' OPENMP_FALSE= fi fi ac_config_files="$ac_config_files Makefile data/Makefile man/Makefile locale/Makefile src/Makefile src/startup-testing/Makefile" ac_config_headers="$ac_config_headers config.h" if test "$build_windows" = "yes"; then ac_config_files="$ac_config_files misc/win/atomes.rc:misc/win/atomes.rc.in misc/win/startup.rc:misc/win/startup.rc.in" fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # 'ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIB@&t@OBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; esac if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LINUX_TRUE}" && test -z "${LINUX_FALSE}"; then as_fn_error $? "conditional \"LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WINDOWS_TRUE}" && test -z "${WINDOWS_FALSE}"; then as_fn_error $? "conditional \"WINDOWS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OSX_TRUE}" && test -z "${OSX_FALSE}"; then as_fn_error $? "conditional \"OSX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK3_TRUE}" && test -z "${GTK3_FALSE}"; then as_fn_error $? "conditional \"GTK3\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OPENMP_TRUE}" && test -z "${OPENMP_FALSE}"; then as_fn_error $? "conditional \"OPENMP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in @%:@( e) case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in @%:@((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in @%:@( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in @%:@( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by atomes $as_me 1.3.1, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ '$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . atomes home page: ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ atomes config.status 1.3.1 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: '$1' Try '$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: '$1' Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX @%:@@%:@ Running $as_me. @%:@@%:@ _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "locale/Makefile") CONFIG_FILES="$CONFIG_FILES locale/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/startup-testing/Makefile") CONFIG_FILES="$CONFIG_FILES src/startup-testing/Makefile" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "misc/win/atomes.rc") CONFIG_FILES="$CONFIG_FILES misc/win/atomes.rc:misc/win/atomes.rc.in" ;; "misc/win/startup.rc") CONFIG_FILES="$CONFIG_FILES misc/win/startup.rc:misc/win/startup.rc.in" ;; *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with './config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script 'defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in @%:@( *\'*) : eval set x "$CONFIG_FILES" ;; @%:@( *) : set x $CONFIG_FILES ;; @%:@( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See 'config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi atomes_1.3.1/autom4te.cache/traces.00000664000175000017500000020574115212624223016664 0ustar lerouxlerouxm4trace:/usr/share/aclocal/pkg.m4:62: -1- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi if test -z "$PKG_CONFIG"; then m4_default([$2], [AC_MSG_ERROR([pkg-config not found])]) fi[]dnl ]) m4trace:/usr/share/aclocal/pkg.m4:99: -1- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) m4trace:/usr/share/aclocal/pkg.m4:128: -1- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ]) m4trace:/usr/share/aclocal/pkg.m4:146: -1- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $2]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ]) m4trace:/usr/share/aclocal/pkg.m4:215: -1- AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ]) m4trace:/usr/share/aclocal/pkg.m4:233: -1- AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) m4trace:/usr/share/aclocal/pkg.m4:255: -1- AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) m4trace:/usr/share/aclocal/pkg.m4:274: -1- AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ]) m4trace:/usr/share/aclocal/pkg.m4:292: -1- AC_DEFUN([PKG_WITH_MODULES], [ m4_pushdef([with_arg], m4_tolower([$1])) m4_pushdef([description], [m4_default([$5], [build with ]with_arg[ support])]) m4_pushdef([def_arg], [m4_default([$6], [auto])]) m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) m4_case(def_arg, [yes],[m4_pushdef([with_without], [--without-]with_arg)], [m4_pushdef([with_without],[--with-]with_arg)]) AC_ARG_WITH(with_arg, AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, [AS_TR_SH([with_]with_arg)=def_arg]) AS_CASE([$AS_TR_SH([with_]with_arg)], [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], [auto],[PKG_CHECK_MODULES([$1],[$2], [m4_n([def_action_if_found]) $3], [m4_n([def_action_if_not_found]) $4])]) m4_popdef([with_arg]) m4_popdef([description]) m4_popdef([def_arg]) ]) m4trace:/usr/share/aclocal/pkg.m4:329: -1- AC_DEFUN([PKG_HAVE_WITH_MODULES], [ PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) AM_CONDITIONAL([HAVE_][$1], [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) ]) m4trace:/usr/share/aclocal/pkg.m4:344: -1- AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], [ PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) ]) m4trace:/usr/share/aclocal-1.18/amversion.m4:14: -1- AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.18' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.18.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) m4trace:/usr/share/aclocal-1.18/amversion.m4:33: -1- AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.18.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) m4trace:/usr/share/aclocal-1.18/auxdir.m4:47: -1- AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) m4trace:/usr/share/aclocal-1.18/cond.m4:12: -1- AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) m4trace:/usr/share/aclocal-1.18/depend.m4:26: -1- AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) m4trace:/usr/share/aclocal-1.18/depend.m4:163: -1- AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) m4trace:/usr/share/aclocal-1.18/depend.m4:171: -1- AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) m4trace:/usr/share/aclocal-1.18/depout.m4:11: -1- AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ]) m4trace:/usr/share/aclocal-1.18/depout.m4:64: -1- AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) m4trace:/usr/share/aclocal-1.18/init.m4:29: -1- AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl m4_ifdef([_$0_ALREADY_INIT], [m4_fatal([$0 expanded multiple times ]m4_defn([_$0_ALREADY_INIT]))], [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_IF_OPTION([tar-v7], [_AM_PROG_TAR([v7])], [_AM_PROG_TAR([ustar])])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi AC_SUBST([CTAGS]) if test -z "$ETAGS"; then ETAGS=etags fi AC_SUBST([ETAGS]) if test -z "$CSCOPE"; then CSCOPE=cscope fi AC_SUBST([CSCOPE]) AC_REQUIRE([_AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl AC_REQUIRE([_AM_PROG_RM_F]) AC_REQUIRE([_AM_PROG_XARGS_N]) dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) m4trace:/usr/share/aclocal-1.18/init.m4:167: -1- AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) m4trace:/usr/share/aclocal-1.18/install-sh.m4:11: -1- AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) m4trace:/usr/share/aclocal-1.18/lead-dot.m4:10: -1- AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) m4trace:/usr/share/aclocal-1.18/make.m4:13: -1- AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) m4trace:/usr/share/aclocal-1.18/make.m4:42: -1- m4_pattern_allow([^am__quote$]) m4trace:/usr/share/aclocal-1.18/missing.m4:11: -1- AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) m4trace:/usr/share/aclocal-1.18/missing.m4:20: -1- AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) m4trace:/usr/share/aclocal-1.18/options.m4:11: -1- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) m4trace:/usr/share/aclocal-1.18/options.m4:17: -1- AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) m4trace:/usr/share/aclocal-1.18/options.m4:23: -1- AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) m4trace:/usr/share/aclocal-1.18/options.m4:29: -1- AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) m4trace:/usr/share/aclocal-1.18/prog-cc-c-o.m4:12: -1- AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) m4trace:/usr/share/aclocal-1.18/prog-cc-c-o.m4:50: -1- AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) m4trace:/usr/share/aclocal-1.18/rmf.m4:12: -1- AC_DEFUN([_AM_PROG_RM_F], [am__rm_f_notfound= AS_IF([(rm -f && rm -fr && rm -rf) 2>/dev/null], [], [am__rm_f_notfound='""']) AC_SUBST(am__rm_f_notfound) ]) m4trace:/usr/share/aclocal-1.18/runlog.m4:12: -1- AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) m4trace:/usr/share/aclocal-1.18/sanity.m4:11: -1- AC_DEFUN([_AM_SLEEP_FRACTIONAL_SECONDS], [dnl AC_CACHE_CHECK([whether sleep supports fractional seconds], am_cv_sleep_fractional_seconds, [dnl AS_IF([sleep 0.001 2>/dev/null], [am_cv_sleep_fractional_seconds=yes], [am_cv_sleep_fractional_seconds=no]) ])]) m4trace:/usr/share/aclocal-1.18/sanity.m4:28: -1- AC_DEFUN([_AM_FILESYSTEM_TIMESTAMP_RESOLUTION], [dnl AC_REQUIRE([_AM_SLEEP_FRACTIONAL_SECONDS]) AC_CACHE_CHECK([filesystem timestamp resolution], am_cv_filesystem_timestamp_resolution, [dnl # Default to the worst case. am_cv_filesystem_timestamp_resolution=2 # Only try to go finer than 1 sec if sleep can do it. # Don't try 1 sec, because if 0.01 sec and 0.1 sec don't work, # - 1 sec is not much of a win compared to 2 sec, and # - it takes 2 seconds to perform the test whether 1 sec works. # # Instead, just use the default 2s on platforms that have 1s resolution, # accept the extra 1s delay when using $sleep in the Automake tests, in # exchange for not incurring the 2s delay for running the test for all # packages. # am_try_resolutions= if test "$am_cv_sleep_fractional_seconds" = yes; then # Even a millisecond often causes a bunch of false positives, # so just try a hundredth of a second. The time saved between .001 and # .01 is not terribly consequential. am_try_resolutions="0.01 0.1 $am_try_resolutions" fi # In order to catch current-generation FAT out, we must *modify* files # that already exist; the *creation* timestamp is finer. Use names # that make ls -t sort them differently when they have equal # timestamps than when they have distinct timestamps, keeping # in mind that ls -t prints the *newest* file first. rm -f conftest.ts? : > conftest.ts1 : > conftest.ts2 : > conftest.ts3 # Make sure ls -t actually works. Do 'set' in a subshell so we don't # clobber the current shell's arguments. (Outer-level square brackets # are removed by m4; they're present so that m4 does not expand # ; be careful, easy to get confused.) if ( set X `[ls -t conftest.ts[12]]` && { test "$[]*" != "X conftest.ts1 conftest.ts2" || test "$[]*" != "X conftest.ts2 conftest.ts1"; } ); then :; else # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". _AS_ECHO_UNQUOTED( ["Bad output from ls -t: \"`[ls -t conftest.ts[12]]`\""], [AS_MESSAGE_LOG_FD]) AC_MSG_FAILURE([ls -t produces unexpected output. Make sure there is not a broken ls alias in your environment.]) fi for am_try_res in $am_try_resolutions; do # Any one fine-grained sleep might happen to cross the boundary # between two values of a coarser actual resolution, but if we do # two fine-grained sleeps in a row, at least one of them will fall # entirely within a coarse interval. echo alpha > conftest.ts1 sleep $am_try_res echo beta > conftest.ts2 sleep $am_try_res echo gamma > conftest.ts3 # We assume that 'ls -t' will make use of high-resolution # timestamps if the operating system supports them at all. if (set X `ls -t conftest.ts?` && test "$[]2" = conftest.ts3 && test "$[]3" = conftest.ts2 && test "$[]4" = conftest.ts1); then # # Ok, ls -t worked. If we're at a resolution of 1 second, we're done, # because we don't need to test make. make_ok=true if test $am_try_res != 1; then # But if we've succeeded so far with a subsecond resolution, we # have one more thing to check: make. It can happen that # everything else supports the subsecond mtimes, but make doesn't; # notably on macOS, which ships make 3.81 from 2006 (the last one # released under GPLv2). https://bugs.gnu.org/68808 # # We test $MAKE if it is defined in the environment, else "make". # It might get overridden later, but our hope is that in practice # it does not matter: it is the system "make" which is (by far) # the most likely to be broken, whereas if the user overrides it, # probably they did so with a better, or at least not worse, make. # https://lists.gnu.org/archive/html/automake/2024-06/msg00051.html # # Create a Makefile (real tab character here): rm -f conftest.mk echo 'conftest.ts1: conftest.ts2' >conftest.mk echo ' touch conftest.ts2' >>conftest.mk # # Now, running # touch conftest.ts1; touch conftest.ts2; make # should touch ts1 because ts2 is newer. This could happen by luck, # but most often, it will fail if make's support is insufficient. So # test for several consecutive successes. # # (We reuse conftest.ts[12] because we still want to modify existing # files, not create new ones, per above.) n=0 make=${MAKE-make} until test $n -eq 3; do echo one > conftest.ts1 sleep $am_try_res echo two > conftest.ts2 # ts2 should now be newer than ts1 if $make -f conftest.mk | grep 'up to date' >/dev/null; then make_ok=false break # out of $n loop fi n=`expr $n + 1` done fi # if $make_ok; then # Everything we know to check worked out, so call this resolution good. am_cv_filesystem_timestamp_resolution=$am_try_res break # out of $am_try_res loop fi # Otherwise, we'll go on to check the next resolution. fi done rm -f conftest.ts? # (end _am_filesystem_timestamp_resolution) ])]) m4trace:/usr/share/aclocal-1.18/sanity.m4:161: -1- AC_DEFUN([AM_SANITY_CHECK], [AC_REQUIRE([_AM_FILESYSTEM_TIMESTAMP_RESOLUTION]) # This check should not be cached, as it may vary across builds of # different projects. AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_RESULT([no]) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_RESULT([no]) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). am_build_env_is_sane=no am_has_slept=no rm -f conftest.file for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[]*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi test "$[]2" = conftest.file ); then am_build_env_is_sane=yes break fi # Just in case. sleep "$am_cv_filesystem_timestamp_resolution" am_has_slept=yes done AC_MSG_RESULT([$am_build_env_is_sane]) if test "$am_build_env_is_sane" = no; then AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= AS_IF([test -e conftest.file || grep 'slept: no' conftest.file >/dev/null 2>&1],, [dnl ( sleep "$am_cv_filesystem_timestamp_resolution" ) & am_sleep_pid=$! ]) AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) m4trace:/usr/share/aclocal-1.18/silent.m4:11: -1- AC_DEFUN([_AM_SILENT_RULES], [AM_DEFAULT_VERBOSITY=1 AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl dnl Delay evaluation of AM_DEFAULT_VERBOSITY to the end to allow multiple calls dnl to AM_SILENT_RULES to change the default value. AC_CONFIG_COMMANDS_PRE([dnl case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; esac if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi ])dnl ]) m4trace:/usr/share/aclocal-1.18/silent.m4:69: -1- AC_DEFUN([AM_SILENT_RULES], [AC_REQUIRE([_AM_SILENT_RULES]) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1])m4_newline dnl We intentionally force a newline after the assignment, since a) nothing dnl good can come of more text following, and b) that was the behavior dnl before 1.17. See https://bugs.gnu.org/72267. ]) m4trace:/usr/share/aclocal-1.18/strip.m4:17: -1- AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) m4trace:/usr/share/aclocal-1.18/substnot.m4:12: -1- AC_DEFUN([_AM_SUBST_NOTMAKE]) m4trace:/usr/share/aclocal-1.18/substnot.m4:17: -1- AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) m4trace:/usr/share/aclocal-1.18/tar.m4:23: -1- AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test x$am_uid = xunknown; then AC_MSG_WARN([ancient id detected; assuming current UID is ok, but dist-ustar might not work]) elif test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test x$gm_gid = xunknown; then AC_MSG_WARN([ancient id detected; assuming current GID is ok, but dist-ustar might not work]) elif test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) m4trace:/usr/share/aclocal-1.18/xargsn.m4:12: -1- AC_DEFUN([_AM_PROG_XARGS_N], [AC_CACHE_CHECK([xargs -n works], am_cv_xargs_n_works, [dnl AS_IF([test "`echo 1 2 3 | xargs -n2 echo`" = "1 2 3"], [am_cv_xargs_n_works=yes], [am_cv_xargs_n_works=no])]) AS_IF([test "$am_cv_xargs_n_works" = yes], [am__xargs_n='xargs -n'], [dnl am__xargs_n='am__xargs_n () { shift; sed "s/ /\\n/g" | while read am__xargs_n_arg; do "$@" "$am__xargs_n_arg"; done; }' ])dnl AC_SUBST(am__xargs_n) ]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?A[CHUM]_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([_AC_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section 'AC_LIBOBJ vs LIBOBJS']) m4trace:configure.ac:13: -1- m4_pattern_allow([^AS_FLAGS$]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?m4_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^dnl$]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?AS_]) m4trace:configure.ac:13: -1- m4_pattern_allow([^SHELL$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PATH_SEPARATOR$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^exec_prefix$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^prefix$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^program_transform_name$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^bindir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sbindir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^libexecdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^datarootdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^datadir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sysconfdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sharedstatedir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^localstatedir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^runstatedir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^includedir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^oldincludedir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^docdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^infodir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^htmldir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^dvidir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^pdfdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^psdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^libdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^localedir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^mandir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^DEFS$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_C$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_N$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_T$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^build_alias$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^host_alias$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^target_alias$]) m4trace:configure.ac:15: -1- AM_INIT_AUTOMAKE m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) m4trace:configure.ac:15: -1- AM_SET_CURRENT_AUTOMAKE_VERSION m4trace:configure.ac:15: -1- AM_AUTOMAKE_VERSION([1.18.1]) m4trace:configure.ac:15: -1- _AM_AUTOCONF_VERSION([2.72]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_DATA$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__isrc$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([am__isrc]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CYGPATH_W$]) m4trace:configure.ac:15: -1- _AM_SET_OPTIONS([]) m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:15: -1- _AM_IF_OPTION([no-define], [], [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])]) m4trace:configure.ac:15: -2- _AM_MANGLE_OPTION([no-define]) m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:15: -1- AM_SANITY_CHECK m4trace:configure.ac:15: -1- _AM_FILESYSTEM_TIMESTAMP_RESOLUTION m4trace:configure.ac:15: -1- _AM_SLEEP_FRACTIONAL_SECONDS m4trace:configure.ac:15: -1- AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) m4trace:configure.ac:15: -1- AM_MISSING_HAS_RUN m4trace:configure.ac:15: -1- AM_AUX_DIR_EXPAND m4trace:configure.ac:15: -1- m4_pattern_allow([^ACLOCAL$]) m4trace:configure.ac:15: -1- AM_MISSING_PROG([AUTOCONF], [autoconf]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOCONF$]) m4trace:configure.ac:15: -1- AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOMAKE$]) m4trace:configure.ac:15: -1- AM_MISSING_PROG([AUTOHEADER], [autoheader]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOHEADER$]) m4trace:configure.ac:15: -1- AM_MISSING_PROG([MAKEINFO], [makeinfo]) m4trace:configure.ac:15: -1- m4_pattern_allow([^MAKEINFO$]) m4trace:configure.ac:15: -1- AM_PROG_INSTALL_SH m4trace:configure.ac:15: -1- m4_pattern_allow([^install_sh$]) m4trace:configure.ac:15: -1- AM_PROG_INSTALL_STRIP m4trace:configure.ac:15: -1- m4_pattern_allow([^STRIP$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^MKDIR_P$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^mkdir_p$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AWK$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^SET_MAKE$]) m4trace:configure.ac:15: -1- AM_SET_LEADING_DOT m4trace:configure.ac:15: -1- m4_pattern_allow([^am__leading_dot$]) m4trace:configure.ac:15: -1- _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_IF_OPTION([tar-v7], [_AM_PROG_TAR([v7])], [_AM_PROG_TAR([ustar])])])]) m4trace:configure.ac:15: -2- _AM_MANGLE_OPTION([tar-ustar]) m4trace:configure.ac:15: -1- _AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_IF_OPTION([tar-v7], [_AM_PROG_TAR([v7])], [_AM_PROG_TAR([ustar])])]) m4trace:configure.ac:15: -2- _AM_MANGLE_OPTION([tar-pax]) m4trace:configure.ac:15: -1- _AM_IF_OPTION([tar-v7], [_AM_PROG_TAR([v7])], [_AM_PROG_TAR([ustar])]) m4trace:configure.ac:15: -2- _AM_MANGLE_OPTION([tar-v7]) m4trace:configure.ac:15: -1- _AM_PROG_TAR([ustar]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AMTAR$]) m4trace:configure.ac:15: -1- AM_RUN_LOG([$_am_tar --version]) m4trace:configure.ac:15: -1- AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) m4trace:configure.ac:15: -1- AM_RUN_LOG([$am__untar = $gtk_version_number]) m4trace:configure.ac:107: -1- PKG_PROG_PKG_CONFIG m4trace:configure.ac:107: -1- m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG_PATH$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG_LIBDIR$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^LGTK_CFLAGS$]) m4trace:configure.ac:107: -1- m4_pattern_allow([^LGTK_LIBS$]) m4trace:configure.ac:107: -1- PKG_CHECK_EXISTS([$gtk_version >= $gtk_version_number], [pkg_cv_[]LGTK_CFLAGS=`$PKG_CONFIG --[]cflags "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:107: -1- PKG_CHECK_EXISTS([$gtk_version >= $gtk_version_number], [pkg_cv_[]LGTK_LIBS=`$PKG_CONFIG --[]libs "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:107: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:110: -1- PKG_CHECK_MODULES([INTEGRATION], [gtk-mac-integration]) m4trace:configure.ac:110: -1- m4_pattern_allow([^INTEGRATION_CFLAGS$]) m4trace:configure.ac:110: -1- m4_pattern_allow([^INTEGRATION_LIBS$]) m4trace:configure.ac:110: -1- PKG_CHECK_EXISTS([gtk-mac-integration], [pkg_cv_[]INTEGRATION_CFLAGS=`$PKG_CONFIG --[]cflags "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:110: -1- PKG_CHECK_EXISTS([gtk-mac-integration], [pkg_cv_[]INTEGRATION_LIBS=`$PKG_CONFIG --[]libs "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:110: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:113: -1- PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.4.0]) m4trace:configure.ac:113: -1- m4_pattern_allow([^LIBXML2_CFLAGS$]) m4trace:configure.ac:113: -1- m4_pattern_allow([^LIBXML2_LIBS$]) m4trace:configure.ac:113: -1- PKG_CHECK_EXISTS([libxml-2.0 >= 2.4.0], [pkg_cv_[]LIBXML2_CFLAGS=`$PKG_CONFIG --[]cflags "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:113: -1- PKG_CHECK_EXISTS([libxml-2.0 >= 2.4.0], [pkg_cv_[]LIBXML2_LIBS=`$PKG_CONFIG --[]libs "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:113: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:114: -1- PKG_CHECK_MODULES([PANGOFT2], [pangoft2]) m4trace:configure.ac:114: -1- m4_pattern_allow([^PANGOFT2_CFLAGS$]) m4trace:configure.ac:114: -1- m4_pattern_allow([^PANGOFT2_LIBS$]) m4trace:configure.ac:114: -1- PKG_CHECK_EXISTS([pangoft2], [pkg_cv_[]PANGOFT2_CFLAGS=`$PKG_CONFIG --[]cflags "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:114: -1- PKG_CHECK_EXISTS([pangoft2], [pkg_cv_[]PANGOFT2_LIBS=`$PKG_CONFIG --[]libs "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:114: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:115: -1- PKG_CHECK_MODULES([FFMPEG], [libavcodec libavformat libavutil libswscale]) m4trace:configure.ac:115: -1- m4_pattern_allow([^FFMPEG_CFLAGS$]) m4trace:configure.ac:115: -1- m4_pattern_allow([^FFMPEG_LIBS$]) m4trace:configure.ac:115: -1- PKG_CHECK_EXISTS([libavcodec libavformat libavutil libswscale], [pkg_cv_[]FFMPEG_CFLAGS=`$PKG_CONFIG --[]cflags "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:115: -1- PKG_CHECK_EXISTS([libavcodec libavformat libavutil libswscale], [pkg_cv_[]FFMPEG_LIBS=`$PKG_CONFIG --[]libs "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:115: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:117: -1- PKG_CHECK_MODULES([GLU], [glu]) m4trace:configure.ac:117: -1- m4_pattern_allow([^GLU_CFLAGS$]) m4trace:configure.ac:117: -1- m4_pattern_allow([^GLU_LIBS$]) m4trace:configure.ac:117: -1- PKG_CHECK_EXISTS([glu], [pkg_cv_[]GLU_CFLAGS=`$PKG_CONFIG --[]cflags "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:117: -1- PKG_CHECK_EXISTS([glu], [pkg_cv_[]GLU_LIBS=`$PKG_CONFIG --[]libs "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:117: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:119: -1- PKG_CHECK_MODULES([EPOXY], [epoxy]) m4trace:configure.ac:119: -1- m4_pattern_allow([^EPOXY_CFLAGS$]) m4trace:configure.ac:119: -1- m4_pattern_allow([^EPOXY_LIBS$]) m4trace:configure.ac:119: -1- PKG_CHECK_EXISTS([epoxy], [pkg_cv_[]EPOXY_CFLAGS=`$PKG_CONFIG --[]cflags "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:119: -1- PKG_CHECK_EXISTS([epoxy], [pkg_cv_[]EPOXY_LIBS=`$PKG_CONFIG --[]libs "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:119: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:123: -1- AC_DEFUN([AX_CHECK_COMPILER_FLAG], [AC_PREREQ(2.64) dnl for _AC_LANG_PREFIX and AS_VAR_IF AS_VAR_PUSHDEF([CACHEVAR], [ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1]) AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], [AS_VAR_SET(CACHEVAR,[yes])], [AS_VAR_SET(CACHEVAR,[no])]) _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) AS_VAR_IF(CACHEVAR,yes, [m4_default([$2], :)], [m4_default([$3], :)]) AS_VAR_POPDEF([CACHEVAR]) ]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:140: -1- _AM_PROG_CC_C_O m4trace:configure.ac:140: -1- AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) m4trace:configure.ac:140: -1- _AM_DEPENDENCIES([CC]) m4trace:configure.ac:140: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.ac:140: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.ac:140: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.ac:140: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.ac:140: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.ac:140: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.ac:142: -1- AX_CHECK_COMPILER_FLAG([$CFLAGS]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FCFLAGS$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^ac_ct_FC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FCLIBS$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_DUMMY_MAIN$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_DUMMY_MAIN_EQ_F77$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:146: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:150: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:150: -1- m4_pattern_allow([^FCFLAGS$]) m4trace:configure.ac:150: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:150: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:150: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:150: -1- m4_pattern_allow([^ac_ct_FC$]) m4trace:configure.ac:153: -1- m4_pattern_allow([^FCFLAGS_f90$]) m4trace:configure.ac:154: -1- m4_pattern_allow([^FCFLAGS_F90$]) m4trace:configure.ac:156: -1- AX_CHECK_COMPILER_FLAG([$FCFLAGS]) m4trace:configure.ac:158: -1- m4_pattern_allow([^FCLIBS$]) m4trace:configure.ac:172: -1- m4_pattern_allow([^OPENMP_CFLAGS$]) m4trace:configure.ac:173: -1- m4_pattern_allow([^OPENMP_CFLAGS$]) m4trace:configure.ac:174: -1- AM_CONDITIONAL([OPENMP], [test "${OPENMP_CFLAGS}" != ""]) m4trace:configure.ac:174: -1- m4_pattern_allow([^OPENMP_TRUE$]) m4trace:configure.ac:174: -1- m4_pattern_allow([^OPENMP_FALSE$]) m4trace:configure.ac:174: -1- _AM_SUBST_NOTMAKE([OPENMP_TRUE]) m4trace:configure.ac:174: -1- _AM_SUBST_NOTMAKE([OPENMP_FALSE]) m4trace:configure.ac:190: -1- m4_pattern_allow([^LIB@&t@OBJS$]) m4trace:configure.ac:190: -1- m4_pattern_allow([^LTLIBOBJS$]) m4trace:configure.ac:190: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) m4trace:configure.ac:190: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) m4trace:configure.ac:190: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) m4trace:configure.ac:190: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) m4trace:configure.ac:190: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) m4trace:configure.ac:190: -1- _AC_AM_CONFIG_HEADER_HOOK(["$ac_file"]) m4trace:configure.ac:190: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS m4trace:configure.ac:190: -1- AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) atomes_1.3.1/README0000777000175000017500000000000015212624223014637 2README.mdustar lerouxlerouxatomes_1.3.1/aclocal.m40000664000175000017500000017161115212624223014354 0ustar lerouxleroux# generated automatically by aclocal 1.18.1 -*- Autoconf -*- # Copyright (C) 1996-2025 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.72],, [m4_warning([this file was generated for autoconf 2.72. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # pkg.m4 - Macros to locate and use pkg-config. -*- Autoconf -*- # serial 13 (pkgconf) dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, see . dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29.2]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION], [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. dnl dnl If pkg-config is not found or older than specified, it will result dnl in an empty PKG_CONFIG variable. To avoid widespread issues with dnl scripts not checking it, ACTION-IF-NOT-FOUND defaults to aborting. dnl You can specify [PKG_CONFIG=false] as an action instead, which would dnl result in pkg-config tests failing, but no bogus error messages. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi if test -z "$PKG_CONFIG"; then m4_default([$2], [AC_MSG_ERROR([pkg-config not found])]) fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurrence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $2]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND], dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------ dnl dnl Prepare a "--with-" configure option using the lowercase dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and dnl PKG_CHECK_MODULES in a single macro. AC_DEFUN([PKG_WITH_MODULES], [ m4_pushdef([with_arg], m4_tolower([$1])) m4_pushdef([description], [m4_default([$5], [build with ]with_arg[ support])]) m4_pushdef([def_arg], [m4_default([$6], [auto])]) m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) m4_case(def_arg, [yes],[m4_pushdef([with_without], [--without-]with_arg)], [m4_pushdef([with_without],[--with-]with_arg)]) AC_ARG_WITH(with_arg, AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, [AS_TR_SH([with_]with_arg)=def_arg]) AS_CASE([$AS_TR_SH([with_]with_arg)], [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], [auto],[PKG_CHECK_MODULES([$1],[$2], [m4_n([def_action_if_found]) $3], [m4_n([def_action_if_not_found]) $4])]) m4_popdef([with_arg]) m4_popdef([description]) m4_popdef([def_arg]) ])dnl PKG_WITH_MODULES dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ----------------------------------------------- dnl dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES dnl check._[VARIABLE-PREFIX] is exported as make variable. AC_DEFUN([PKG_HAVE_WITH_MODULES], [ PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) AM_CONDITIONAL([HAVE_][$1], [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) ])dnl PKG_HAVE_WITH_MODULES dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------------------ dnl dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make dnl and preprocessor variable. AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], [ PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) ])dnl PKG_HAVE_DEFINE_WITH_MODULES # Copyright (C) 2002-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.18' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.18.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.18.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl m4_ifdef([_$0_ALREADY_INIT], [m4_fatal([$0 expanded multiple times ]m4_defn([_$0_ALREADY_INIT]))], [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_IF_OPTION([tar-v7], [_AM_PROG_TAR([v7])], [_AM_PROG_TAR([ustar])])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi AC_SUBST([CTAGS]) if test -z "$ETAGS"; then ETAGS=etags fi AC_SUBST([ETAGS]) if test -z "$CSCOPE"; then CSCOPE=cscope fi AC_SUBST([CSCOPE]) AC_REQUIRE([_AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl AC_REQUIRE([_AM_PROG_RM_F]) AC_REQUIRE([_AM_PROG_XARGS_N]) dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2022-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_RM_F # --------------- # Check whether 'rm -f' without any arguments works. # https://bugs.gnu.org/10828 AC_DEFUN([_AM_PROG_RM_F], [am__rm_f_notfound= AS_IF([(rm -f && rm -fr && rm -rf) 2>/dev/null], [], [am__rm_f_notfound='""']) AC_SUBST(am__rm_f_notfound) ]) # Copyright (C) 2001-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SLEEP_FRACTIONAL_SECONDS # ---------------------------- AC_DEFUN([_AM_SLEEP_FRACTIONAL_SECONDS], [dnl AC_CACHE_CHECK([whether sleep supports fractional seconds], am_cv_sleep_fractional_seconds, [dnl AS_IF([sleep 0.001 2>/dev/null], [am_cv_sleep_fractional_seconds=yes], [am_cv_sleep_fractional_seconds=no]) ])]) # _AM_FILESYSTEM_TIMESTAMP_RESOLUTION # ----------------------------------- # Determine the filesystem's resolution for file modification # timestamps. The coarsest we know of is FAT, with a resolution # of only two seconds, even with the most recent "exFAT" extensions. # The finest (e.g. ext4 with large inodes, XFS, ZFS) is one # nanosecond, matching clock_gettime. However, it is probably not # possible to delay execution of a shell script for less than one # millisecond, due to process creation overhead and scheduling # granularity, so we don't check for anything finer than that. (See below.) AC_DEFUN([_AM_FILESYSTEM_TIMESTAMP_RESOLUTION], [dnl AC_REQUIRE([_AM_SLEEP_FRACTIONAL_SECONDS]) AC_CACHE_CHECK([filesystem timestamp resolution], am_cv_filesystem_timestamp_resolution, [dnl # Default to the worst case. am_cv_filesystem_timestamp_resolution=2 # Only try to go finer than 1 sec if sleep can do it. # Don't try 1 sec, because if 0.01 sec and 0.1 sec don't work, # - 1 sec is not much of a win compared to 2 sec, and # - it takes 2 seconds to perform the test whether 1 sec works. # # Instead, just use the default 2s on platforms that have 1s resolution, # accept the extra 1s delay when using $sleep in the Automake tests, in # exchange for not incurring the 2s delay for running the test for all # packages. # am_try_resolutions= if test "$am_cv_sleep_fractional_seconds" = yes; then # Even a millisecond often causes a bunch of false positives, # so just try a hundredth of a second. The time saved between .001 and # .01 is not terribly consequential. am_try_resolutions="0.01 0.1 $am_try_resolutions" fi # In order to catch current-generation FAT out, we must *modify* files # that already exist; the *creation* timestamp is finer. Use names # that make ls -t sort them differently when they have equal # timestamps than when they have distinct timestamps, keeping # in mind that ls -t prints the *newest* file first. rm -f conftest.ts? : > conftest.ts1 : > conftest.ts2 : > conftest.ts3 # Make sure ls -t actually works. Do 'set' in a subshell so we don't # clobber the current shell's arguments. (Outer-level square brackets # are removed by m4; they're present so that m4 does not expand # ; be careful, easy to get confused.) if ( set X `[ls -t conftest.ts[12]]` && { test "$[]*" != "X conftest.ts1 conftest.ts2" || test "$[]*" != "X conftest.ts2 conftest.ts1"; } ); then :; else # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". _AS_ECHO_UNQUOTED( ["Bad output from ls -t: \"`[ls -t conftest.ts[12]]`\""], [AS_MESSAGE_LOG_FD]) AC_MSG_FAILURE([ls -t produces unexpected output. Make sure there is not a broken ls alias in your environment.]) fi for am_try_res in $am_try_resolutions; do # Any one fine-grained sleep might happen to cross the boundary # between two values of a coarser actual resolution, but if we do # two fine-grained sleeps in a row, at least one of them will fall # entirely within a coarse interval. echo alpha > conftest.ts1 sleep $am_try_res echo beta > conftest.ts2 sleep $am_try_res echo gamma > conftest.ts3 # We assume that 'ls -t' will make use of high-resolution # timestamps if the operating system supports them at all. if (set X `ls -t conftest.ts?` && test "$[]2" = conftest.ts3 && test "$[]3" = conftest.ts2 && test "$[]4" = conftest.ts1); then # # Ok, ls -t worked. If we're at a resolution of 1 second, we're done, # because we don't need to test make. make_ok=true if test $am_try_res != 1; then # But if we've succeeded so far with a subsecond resolution, we # have one more thing to check: make. It can happen that # everything else supports the subsecond mtimes, but make doesn't; # notably on macOS, which ships make 3.81 from 2006 (the last one # released under GPLv2). https://bugs.gnu.org/68808 # # We test $MAKE if it is defined in the environment, else "make". # It might get overridden later, but our hope is that in practice # it does not matter: it is the system "make" which is (by far) # the most likely to be broken, whereas if the user overrides it, # probably they did so with a better, or at least not worse, make. # https://lists.gnu.org/archive/html/automake/2024-06/msg00051.html # # Create a Makefile (real tab character here): rm -f conftest.mk echo 'conftest.ts1: conftest.ts2' >conftest.mk echo ' touch conftest.ts2' >>conftest.mk # # Now, running # touch conftest.ts1; touch conftest.ts2; make # should touch ts1 because ts2 is newer. This could happen by luck, # but most often, it will fail if make's support is insufficient. So # test for several consecutive successes. # # (We reuse conftest.ts[12] because we still want to modify existing # files, not create new ones, per above.) n=0 make=${MAKE-make} until test $n -eq 3; do echo one > conftest.ts1 sleep $am_try_res echo two > conftest.ts2 # ts2 should now be newer than ts1 if $make -f conftest.mk | grep 'up to date' >/dev/null; then make_ok=false break # out of $n loop fi n=`expr $n + 1` done fi # if $make_ok; then # Everything we know to check worked out, so call this resolution good. am_cv_filesystem_timestamp_resolution=$am_try_res break # out of $am_try_res loop fi # Otherwise, we'll go on to check the next resolution. fi done rm -f conftest.ts? # (end _am_filesystem_timestamp_resolution) ])]) # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_REQUIRE([_AM_FILESYSTEM_TIMESTAMP_RESOLUTION]) # This check should not be cached, as it may vary across builds of # different projects. AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_RESULT([no]) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_RESULT([no]) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). am_build_env_is_sane=no am_has_slept=no rm -f conftest.file for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[]*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi test "$[]2" = conftest.file ); then am_build_env_is_sane=yes break fi # Just in case. sleep "$am_cv_filesystem_timestamp_resolution" am_has_slept=yes done AC_MSG_RESULT([$am_build_env_is_sane]) if test "$am_build_env_is_sane" = no; then AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= AS_IF([test -e conftest.file || grep 'slept: no' conftest.file >/dev/null 2>&1],, [dnl ( sleep "$am_cv_filesystem_timestamp_resolution" ) & am_sleep_pid=$! ]) AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SILENT_RULES # ---------------- # Enable less verbose build rules support. AC_DEFUN([_AM_SILENT_RULES], [AM_DEFAULT_VERBOSITY=1 AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl dnl Delay evaluation of AM_DEFAULT_VERBOSITY to the end to allow multiple calls dnl to AM_SILENT_RULES to change the default value. AC_CONFIG_COMMANDS_PRE([dnl case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; esac if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi ])dnl ]) # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Set the default verbosity level to DEFAULT ("yes" being less verbose, "no" or # empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_REQUIRE([_AM_SILENT_RULES]) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1])m4_newline dnl We intentionally force a newline after the assignment, since a) nothing dnl good can come of more text following, and b) that was the behavior dnl before 1.17. See https://bugs.gnu.org/72267. ]) # Copyright (C) 2001-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test x$am_uid = xunknown; then AC_MSG_WARN([ancient id detected; assuming current UID is ok, but dist-ustar might not work]) elif test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test x$gm_gid = xunknown; then AC_MSG_WARN([ancient id detected; assuming current GID is ok, but dist-ustar might not work]) elif test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR # Copyright (C) 2022-2025 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_XARGS_N # ---------------- # Check whether 'xargs -n' works. It should work everywhere, so the fallback # is not optimized at all as we never expect to use it. AC_DEFUN([_AM_PROG_XARGS_N], [AC_CACHE_CHECK([xargs -n works], am_cv_xargs_n_works, [dnl AS_IF([test "`echo 1 2 3 | xargs -n2 echo`" = "1 2 3"], [am_cv_xargs_n_works=yes], [am_cv_xargs_n_works=no])]) AS_IF([test "$am_cv_xargs_n_works" = yes], [am__xargs_n='xargs -n'], [dnl am__xargs_n='am__xargs_n () { shift; sed "s/ /\\n/g" | while read am__xargs_n_arg; do "$@" "$am__xargs_n_arg"; done; }' ])dnl AC_SUBST(am__xargs_n) ]) atomes_1.3.1/Makefile.in0000664000175000017500000007624015212624223014563 0ustar lerouxleroux# Makefile.in generated by automake 1.18.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2025 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) am__rm_f = rm -f $(am__rm_f_notfound) am__rm_rf = rm -rf $(am__rm_f_notfound) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = misc/win/atomes.rc misc/win/startup.rc CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \ } am__installdirs = "$(DESTDIR)$(atomes_docdir)" DATA = $(atomes_doc_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/misc/win/atomes.rc.in \ $(top_srcdir)/misc/win/startup.rc.in AUTHORS COPYING ChangeLog \ INSTALL NEWS README compile config.guess config.sub depcomp \ install-sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -700 -exec chmod u+rwx {} ';' \ ; rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = -9 DIST_TARGETS = dist-gzip # Exists only to be overridden by the user if desired. AM_DISTCHECK_DVI_TARGET = dvi distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = \ find . \( -type f -a \! \ \( -name .nfs* -o -name .smb* -o -name .__afs* \) \) -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ATOMES_MAJOR_VERSION = @ATOMES_MAJOR_VERSION@ ATOMES_MINOR_VERSION = @ATOMES_MINOR_VERSION@ ATOMES_PATCH_VERSION = @ATOMES_PATCH_VERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EPOXY_CFLAGS = @EPOXY_CFLAGS@ EPOXY_LIBS = @EPOXY_LIBS@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCFLAGS_F90 = @FCFLAGS_F90@ FCFLAGS_f90 = @FCFLAGS_f90@ FCLIBS = @FCLIBS@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTEGRATION_CFLAGS = @INTEGRATION_CFLAGS@ INTEGRATION_LIBS = @INTEGRATION_LIBS@ LDFLAGS = @LDFLAGS@ LGTK_CFLAGS = @LGTK_CFLAGS@ LGTK_LIBS = @LGTK_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIBS = @LIBXML2_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENMP_CFLAGS = @OPENMP_CFLAGS@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UP_APPSTREAM = @UP_APPSTREAM@ UP_DESKTOP = @UP_DESKTOP@ UP_MIME = @UP_MIME@ VERSION = @VERSION@ WINDRES = @WINDRES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__rm_f_notfound = @am__rm_f_notfound@ am__tar = @am__tar@ am__untar = @am__untar@ am__xargs_n = @am__xargs_n@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = data man locale src atomes_datadir = $(DESTDIR)$(datadir) atomes_pkgdatadir = $(DESTDIR)$(pkgdatadir) atomes_iconsdir = $(atomes_datadir)/pixmaps atomes_desktopdir = $(atomes_datadir)/applications atomes_mimedir = $(atomes_datadir)/mime/packages/ atomes_metadir = $(atomes_datadir)/metainfo atomes_bashdir = $(atomes_datadir)/bash-completion/completions atomes_docdir = $(docdir) atomes_doc_DATA = \ README.md \ AUTHORS.md \ ChangeLog all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status $(AM_V_at)rm -f stamp-h1 $(AM_V_GEN)cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) $(AM_V_GEN)($(am__cd) $(top_srcdir) && $(AUTOHEADER)) $(AM_V_at)rm -f stamp-h1 $(AM_V_at)touch $@ distclean-hdr: -rm -f config.h stamp-h1 misc/win/atomes.rc: $(top_builddir)/config.status $(top_srcdir)/misc/win/atomes.rc.in cd $(top_builddir) && $(SHELL) ./config.status $@ misc/win/startup.rc: $(top_builddir)/config.status $(top_srcdir)/misc/win/startup.rc.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-atomes_docDATA: $(atomes_doc_DATA) @$(NORMAL_INSTALL) @list='$(atomes_doc_DATA)'; test -n "$(atomes_docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(atomes_docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(atomes_docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(atomes_docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(atomes_docdir)" || exit $$?; \ done uninstall-atomes_docDATA: @$(NORMAL_UNINSTALL) @list='$(atomes_doc_DATA)'; test -n "$(atomes_docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(atomes_docdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) $(AM_V_at)$(MKDIR_P) "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-bzip3: distdir tardir=$(distdir) && $(am__tar) | bzip3 -c >$(distdir).tar.bz3 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-zstd: distdir tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.bz3*) \ bzip3 -dc $(distdir).tar.bz3 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ *.tar.zst*) \ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(atomes_docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -$(am__rm_f) $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || $(am__rm_f) $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-atomes_docDATA install-data-local install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-atomes_docDATA uninstall-local .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-bzip3 dist-gzip dist-lzip dist-shar dist-tarZ dist-xz \ dist-zip dist-zstd distcheck distclean distclean-generic \ distclean-hdr distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-atomes_docDATA install-data \ install-data-am install-data-local install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-atomes_docDATA uninstall-local .PRECIOUS: Makefile install-data-local: # Bash completion if [ ! -d $(atomes_bashdir) ]; then \ $(mkinstalldirs) $(atomes_bashdir); \ fi $(INSTALL_DATA) $(srcdir)/atomes-completion.sh $(atomes_bashdir)/atomes # Program's icons if [ ! -d $(atomes_iconsdir) ]; then \ $(mkinstalldirs) $(atomes_iconsdir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes.svg $(atomes_iconsdir) $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes-workspace.svg $(atomes_iconsdir) $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes-project.svg $(atomes_iconsdir) $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes-coordinates.svg $(atomes_iconsdir) # Custom MIME types if [ ! -d $(atomes_mimedir) ]; then \ $(mkinstalldirs) $(atomes_mimedir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/atomes-mime.xml $(atomes_mimedir) # Meta info if [ ! -d $(atomes_metadir) ]; then \ $(mkinstalldirs) $(atomes_metadir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/fr.ipcms.atomes.appdata.xml $(atomes_metadir) appstream-util validate-relax --nonet $(atomes_metadir)/fr.ipcms.atomes.appdata.xml # Desktop file if [ ! -d $(atomes_desktopdir) ]; then \ $(mkinstalldirs) $(atomes_desktopdir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/atomes.desktop $(atomes_desktopdir)/atomes.desktop # Finalize touch -c $(atomes_iconsdir) if [ -u `which gtk-update-icon-cache` ]; then \ gtk-update-icon-cache -q $(atomes_iconsdir); \ fi desktop-file-install --vendor="" \ --dir=$(atomes_desktopdir) -m 644 \ $(atomes_desktopdir)/atomes.desktop if [ -z "$(DESTDIR)" ]; then \ update-desktop-database $(atomes_desktopdir) &> /dev/null || :; \ update-mime-database $(atomes_datadir)/mime &> /dev/null || :; \ fi # Remove doc directordy on uninstall uninstall-local: -rm -f $(atomes_iconsdir)/atomes.svg -rm -f $(atomes_iconsdir)/atomes-workspace.svg -rm -f $(atomes_iconsdir)/atomes-project.svg -rm -f $(atomes_iconsdir)/atomes-coordinates.svg -rm -f $(atomes_desktopdir)/atomes.desktop -rm -f $(atomes_metadir)/fr.ipcms.atomes.appdata.xml -rm -f $(atomes_mimedir)/atomes-mime.xml -rm -f $(atomes_bashdir)/atomes -rmdir $(atomes_docdir) touch -c $(atomes_iconsdir) if [ -u `which gtk-update-icon-cache` ]; then \ gtk-update-icon-cache -q $(atomes_iconsdir); \ fi if [ -z "$(DESTDIR)" ]; then \ update-desktop-database $(atomes_desktopdir) &> /dev/null || :; \ update-mime-database $(atomes_datadir)/mime &> /dev/null || :; \ fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Tell GNU make to disable its built-in pattern rules. %:: %,v %:: RCS/%,v %:: RCS/% %:: s.% %:: SCCS/s.% atomes_1.3.1/atomes.spec0000664000175000017500000001370715212624223014661 0ustar lerouxlerouxName: atomes %global upname atomes-GNU Version: 1.3.1 Release: 1%{?dist} Summary: An atomistic toolbox License: AGPL-3.0-or-later Source0: https://github.com/Slookeur/%{upname}/archive/refs/tags/v%{version}.tar.gz # Source1: ./v%%{version}.tar.gz.asc # Source2: %%{name}.gpg URL: https://%{name}.ipcms.fr/ BuildRequires: gnupg2 BuildRequires: make BuildRequires: automake BuildRequires: autoconf BuildRequires: pkgconf-pkg-config BuildRequires: gcc BuildRequires: gcc-gfortran BuildRequires: libgfortran BuildRequires: desktop-file-utils BuildRequires: libappstream-glib BuildRequires: gettext # pkg-config BuildRequires: pkgconfig(gtk+-3.0) BuildRequires: pkgconfig(libxml-2.0) BuildRequires: pkgconfig(pangoft2) BuildRequires: pkgconfig(glu) BuildRequires: pkgconfig(epoxy) BuildRequires: pkgconfig(libavutil) BuildRequires: pkgconfig(libavcodec) BuildRequires: pkgconfig(libavformat) BuildRequires: pkgconfig(libswscale) # Runtime requirements Requires: gtk3 Requires: mesa-libGLU Provides: %{name} = %{version}-%{release} %description atomes: a toolbox to analyze, to visualize and to create/edit 3D atomic scale models. The software interface offers a workspace that allows to open many projects simultaneously. The different projects in the workspace can exchange data: analysis results, atomic coordinates... atomes also provides an advanced input preparation system for further calculations using well known molecular dynamics codes: Classical MD: DLPOLY and LAMMPS ab-initio MD: CPMD and CP2K QM-MM MD: CPMD and CP2K To prepare the input files for these calculations is likely to be the key, and most complicated step towards MD simulations. atomes offers a user-friendly assistant to help and guide the scientist step by step to achieve this crucial step. %prep # %%{gpgverify} --keyring='%%{SOURCE2}' --signature='%%{SOURCE1}' --data='%%{SOURCE0}' %autosetup -n %{upname}-%{version} %build %configure #make %%{?_smp_mflags} %make_build %install %make_install %find_lang %{name} --with-man %check desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/fr.ipcms.%{name}.appdata.xml %files -f %{name}.lang %license COPYING %{_bindir}/%{name} %{_libexecdir}/%{name}_startup_testing %{_datadir}/doc/%{name}/ %{_mandir}/man1/%{name}.1* %{_datadir}/%{name}/ %{_datadir}/bash-completion/completions/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/mime/packages/%{name}-mime.xml %{_datadir}/pixmaps/%{name}.svg %{_datadir}/pixmaps/%{name}-workspace.svg %{_datadir}/pixmaps/%{name}-project.svg %{_datadir}/pixmaps/%{name}-coordinates.svg %{_metainfodir}/fr.ipcms.%{name}.appdata.xml %changelog * Thu Jun 11 2026 Sébastien Le Roux - 1.3.1-1 - Bug corrections (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.3.1) * Thu Jun 11 2026 Sébastien Le Roux - 1.3.0-1 - New features (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.3.0) * Fri Jan 16 2026 Fedora Release Engineering - 1.2.1-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild * Fri Jan 16 2026 Fedora Release Engineering - 1.2.1-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild * Wed Oct 01 2025 Dominik Mierzejewski - 1.2.1-2 - Rebuilt for FFmpeg 8 * Tue Sep 30 2025 Sébastien Le Roux - 1.2.1-1 - New features (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.2.1) * Fri Sep 05 2025 Sébastien Le Roux - 1.2.0-1 - New features (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.2.0) * Thu May 15 2025 Sébastien Le Roux - 1.1.18-1 - Bug corrections (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.18) * Thu Feb 20 2025 Sébastien Le Roux - 1.1.17-1 - Bug corrections and improvements (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.17) * Wed Dec 18 2024 Sébastien Le Roux - 1.1.16-1 - Bug corrections * Mon Oct 14 2024 Sébastien Le Roux - 1.1.15-3 - Bug correction * Thu Oct 10 2024 Sébastien Le Roux - 1.1.15-2 - Package correction * Fri Oct 04 2024 Sébastien Le Roux - 1.1.15-1 - Bug corrections and improvements (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.15) * Mon Sep 23 2024 Fabio Valentini - 1.1.14-4 - Rebuild for ffmpeg 7 * Wed Jul 17 2024 Fedora Release Engineering - 1.1.14-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild * Wed Mar 20 2024 Sébastien Le Roux - 1.1.14-2 - Bug corrections and improvements (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.14) * Wed Mar 20 2024 Sébastien Le Roux - 1.1.14-1 - Bug corrections and improvements (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.14) * Wed Feb 28 2024 Sébastien Le Roux - 1.1.13-1 - Bug corrections and improvements (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.13) * Mon Sep 18 2023 Sébastien Le Roux - 1.1.12-2 - Package metadata update * Mon Sep 11 2023 Sébastien Le Roux - 1.1.12-1 - Several bug corrections and improvements (see: https://github.com/Slookeur/atomes-GNU/releases/tag/v1.1.12) * Wed Jul 19 2023 Fedora Release Engineering - 1.1.11-9 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild * Fri Apr 14 2023 Sébastien Le Roux - 1.1.11-8 - Initial Fedora commit atomes_1.3.1/configure0000775000175000017500000113127715212624223014430 0ustar lerouxleroux#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.72 for atomes 1.3.1. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case e in #( e) case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else case e in #( e) exitcode=1; echo positional parameters were not saved. ;; esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else case e in #( e) as_have_required=no ;; esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else case e in #( e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi ;; esac fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed 'exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: atomes@ipcms.unistra.fr about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi ;; esac fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' t clear :clear s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='atomes' PACKAGE_TARNAME='atomes' PACKAGE_VERSION='1.3.1' PACKAGE_STRING='atomes 1.3.1' PACKAGE_BUGREPORT='atomes@ipcms.unistra.fr' PACKAGE_URL='https://atomes.ipcms.fr' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_STDIO_H # include #endif #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_STRING_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_c_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS OPENMP_FALSE OPENMP_TRUE OPENMP_CFLAGS FCFLAGS_F90 FCFLAGS_f90 FCLIBS ac_ct_FC FCFLAGS FC EPOXY_LIBS EPOXY_CFLAGS GLU_LIBS GLU_CFLAGS FFMPEG_LIBS FFMPEG_CFLAGS PANGOFT2_LIBS PANGOFT2_CFLAGS LIBXML2_LIBS LIBXML2_CFLAGS INTEGRATION_LIBS INTEGRATION_CFLAGS LGTK_LIBS LGTK_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH GTK3_FALSE GTK3_TRUE UP_APPSTREAM UP_DESKTOP UP_MIME PKG_CONFIG WINDRES OSX_FALSE OSX_TRUE WINDOWS_FALSE WINDOWS_TRUE LINUX_FALSE LINUX_TRUE host_os host_vendor host_cpu host build_os build_vendor build_cpu build am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC ATOMES_PATCH_VERSION ATOMES_MINOR_VERSION ATOMES_MAJOR_VERSION am__xargs_n am__rm_f_notfound AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking with_gtk enable___disable_openmp enable_openmp ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR LGTK_CFLAGS LGTK_LIBS INTEGRATION_CFLAGS INTEGRATION_LIBS LIBXML2_CFLAGS LIBXML2_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS FFMPEG_CFLAGS FFMPEG_LIBS GLU_CFLAGS GLU_LIBS EPOXY_CFLAGS EPOXY_LIBS FC FCFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: '$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: '$ac_option' Try '$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: '$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: '$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but 'cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF 'configure' configures atomes 1.3.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print 'checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for '--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or '..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, 'make install' will install all the files in '$ac_default_prefix/bin', '$ac_default_prefix/lib' etc. You can specify an installation prefix other than '$ac_default_prefix' using '--prefix', for instance '--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/atomes] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of atomes 1.3.1:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-openmp disable OpenMP thread parallelisation (default: no) --disable-openmp do not use OpenMP Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gtk=3|4 the GTK version to use (default: 3) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path LGTK_CFLAGS C compiler flags for LGTK, overriding pkg-config LGTK_LIBS linker flags for LGTK, overriding pkg-config INTEGRATION_CFLAGS C compiler flags for INTEGRATION, overriding pkg-config INTEGRATION_LIBS linker flags for INTEGRATION, overriding pkg-config LIBXML2_CFLAGS C compiler flags for LIBXML2, overriding pkg-config LIBXML2_LIBS linker flags for LIBXML2, overriding pkg-config PANGOFT2_CFLAGS C compiler flags for PANGOFT2, overriding pkg-config PANGOFT2_LIBS linker flags for PANGOFT2, overriding pkg-config FFMPEG_CFLAGS C compiler flags for FFMPEG, overriding pkg-config FFMPEG_LIBS linker flags for FFMPEG, overriding pkg-config GLU_CFLAGS C compiler flags for GLU, overriding pkg-config GLU_LIBS linker flags for GLU, overriding pkg-config EPOXY_CFLAGS C compiler flags for EPOXY, overriding pkg-config EPOXY_LIBS linker flags for EPOXY, overriding pkg-config FC Fortran compiler command FCFLAGS Fortran compiler flags Use these variables to override the choices made by 'configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . atomes home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF atomes configure 1.3.1 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 printf %s "checking for $2... " >&6; } if eval test \${$3+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$3=yes" else case e in #( e) eval "$3=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi eval ac_res=\$$3 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_fc_try_compile LINENO # --------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_fc_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_fc_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by atomes $as_me 1.3.1, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See 'config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (char **p, int i) { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* C89 style stringification. */ #define noexpand_stringify(a) #a const char *stringified = noexpand_stringify(arbitrary+token=sequence); /* C89 style token pasting. Exercises some of the corner cases that e.g. old MSVC gets wrong, but not very hard. */ #define noexpand_concat(a,b) a##b #define expand_concat(a,b) noexpand_concat(a,b) extern int vA; extern int vbee; #define aye A #define bee B int *pvA = &expand_concat(v,aye); int *pvbee = &noexpand_concat(v,bee); /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' /* Does the compiler advertise C99 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif // See if C++-style comments work. #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); extern void free (void *); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Work around memory leak warnings. free (ia); // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' /* Does the compiler advertise C11 conformance? */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" # Auxiliary files required by this configure script. ac_aux_files="config.guess config.sub compile missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else case e in #( e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; esac fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: '$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run '${MAKE-make} distclean' and/or 'rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.18' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in #(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir ;; esac fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sleep supports fractional seconds" >&5 printf %s "checking whether sleep supports fractional seconds... " >&6; } if test ${am_cv_sleep_fractional_seconds+y} then : printf %s "(cached) " >&6 else case e in #( e) if sleep 0.001 2>/dev/null then : am_cv_sleep_fractional_seconds=yes else case e in #( e) am_cv_sleep_fractional_seconds=no ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_sleep_fractional_seconds" >&5 printf "%s\n" "$am_cv_sleep_fractional_seconds" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking filesystem timestamp resolution" >&5 printf %s "checking filesystem timestamp resolution... " >&6; } if test ${am_cv_filesystem_timestamp_resolution+y} then : printf %s "(cached) " >&6 else case e in #( e) # Default to the worst case. am_cv_filesystem_timestamp_resolution=2 # Only try to go finer than 1 sec if sleep can do it. # Don't try 1 sec, because if 0.01 sec and 0.1 sec don't work, # - 1 sec is not much of a win compared to 2 sec, and # - it takes 2 seconds to perform the test whether 1 sec works. # # Instead, just use the default 2s on platforms that have 1s resolution, # accept the extra 1s delay when using $sleep in the Automake tests, in # exchange for not incurring the 2s delay for running the test for all # packages. # am_try_resolutions= if test "$am_cv_sleep_fractional_seconds" = yes; then # Even a millisecond often causes a bunch of false positives, # so just try a hundredth of a second. The time saved between .001 and # .01 is not terribly consequential. am_try_resolutions="0.01 0.1 $am_try_resolutions" fi # In order to catch current-generation FAT out, we must *modify* files # that already exist; the *creation* timestamp is finer. Use names # that make ls -t sort them differently when they have equal # timestamps than when they have distinct timestamps, keeping # in mind that ls -t prints the *newest* file first. rm -f conftest.ts? : > conftest.ts1 : > conftest.ts2 : > conftest.ts3 # Make sure ls -t actually works. Do 'set' in a subshell so we don't # clobber the current shell's arguments. (Outer-level square brackets # are removed by m4; they're present so that m4 does not expand # ; be careful, easy to get confused.) if ( set X `ls -t conftest.ts[12]` && { test "$*" != "X conftest.ts1 conftest.ts2" || test "$*" != "X conftest.ts2 conftest.ts1"; } ); then :; else # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". printf "%s\n" ""Bad output from ls -t: \"`ls -t conftest.ts[12]`\""" >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "ls -t produces unexpected output. Make sure there is not a broken ls alias in your environment. See 'config.log' for more details" "$LINENO" 5; } fi for am_try_res in $am_try_resolutions; do # Any one fine-grained sleep might happen to cross the boundary # between two values of a coarser actual resolution, but if we do # two fine-grained sleeps in a row, at least one of them will fall # entirely within a coarse interval. echo alpha > conftest.ts1 sleep $am_try_res echo beta > conftest.ts2 sleep $am_try_res echo gamma > conftest.ts3 # We assume that 'ls -t' will make use of high-resolution # timestamps if the operating system supports them at all. if (set X `ls -t conftest.ts?` && test "$2" = conftest.ts3 && test "$3" = conftest.ts2 && test "$4" = conftest.ts1); then # # Ok, ls -t worked. If we're at a resolution of 1 second, we're done, # because we don't need to test make. make_ok=true if test $am_try_res != 1; then # But if we've succeeded so far with a subsecond resolution, we # have one more thing to check: make. It can happen that # everything else supports the subsecond mtimes, but make doesn't; # notably on macOS, which ships make 3.81 from 2006 (the last one # released under GPLv2). https://bugs.gnu.org/68808 # # We test $MAKE if it is defined in the environment, else "make". # It might get overridden later, but our hope is that in practice # it does not matter: it is the system "make" which is (by far) # the most likely to be broken, whereas if the user overrides it, # probably they did so with a better, or at least not worse, make. # https://lists.gnu.org/archive/html/automake/2024-06/msg00051.html # # Create a Makefile (real tab character here): rm -f conftest.mk echo 'conftest.ts1: conftest.ts2' >conftest.mk echo ' touch conftest.ts2' >>conftest.mk # # Now, running # touch conftest.ts1; touch conftest.ts2; make # should touch ts1 because ts2 is newer. This could happen by luck, # but most often, it will fail if make's support is insufficient. So # test for several consecutive successes. # # (We reuse conftest.ts[12] because we still want to modify existing # files, not create new ones, per above.) n=0 make=${MAKE-make} until test $n -eq 3; do echo one > conftest.ts1 sleep $am_try_res echo two > conftest.ts2 # ts2 should now be newer than ts1 if $make -f conftest.mk | grep 'up to date' >/dev/null; then make_ok=false break # out of $n loop fi n=`expr $n + 1` done fi # if $make_ok; then # Everything we know to check worked out, so call this resolution good. am_cv_filesystem_timestamp_resolution=$am_try_res break # out of $am_try_res loop fi # Otherwise, we'll go on to check the next resolution. fi done rm -f conftest.ts? # (end _am_filesystem_timestamp_resolution) ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_filesystem_timestamp_resolution" >&5 printf "%s\n" "$am_cv_filesystem_timestamp_resolution" >&6; } # This check should not be cached, as it may vary across builds of # different projects. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). am_build_env_is_sane=no am_has_slept=no rm -f conftest.file for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi test "$2" = conftest.file ); then am_build_env_is_sane=yes break fi # Just in case. sleep "$am_cv_filesystem_timestamp_resolution" am_has_slept=yes done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_build_env_is_sane" >&5 printf "%s\n" "$am_build_env_is_sane" >&6; } if test "$am_build_env_is_sane" = no; then as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if test -e conftest.file || grep 'slept: no' conftest.file >/dev/null 2>&1 then : else case e in #( e) ( sleep "$am_cv_filesystem_timestamp_resolution" ) & am_sleep_pid=$! ;; esac fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was 's,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else case e in #( e) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ *'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS ;; esac fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use plain mkdir -p, # in the hope it doesn't have the bugs of ancient mkdir. MKDIR_P='mkdir -p' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else case e in #( e) cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make ;; esac fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AM_DEFAULT_VERBOSITY=1 # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else case e in #( e) if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } AM_BACKSLASH='\' am__rm_f_notfound= if (rm -f && rm -fr && rm -rf) 2>/dev/null then : else case e in #( e) am__rm_f_notfound='""' ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking xargs -n works" >&5 printf %s "checking xargs -n works... " >&6; } if test ${am_cv_xargs_n_works+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "`echo 1 2 3 | xargs -n2 echo`" = "1 2 3" then : am_cv_xargs_n_works=yes else case e in #( e) am_cv_xargs_n_works=no ;; esac fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_xargs_n_works" >&5 printf "%s\n" "$am_cv_xargs_n_works" >&6; } if test "$am_cv_xargs_n_works" = yes then : am__xargs_n='xargs -n' else case e in #( e) am__xargs_n='am__xargs_n () { shift; sed "s/ /\\n/g" | while read am__xargs_n_arg; do "" "$am__xargs_n_arg"; done; }' ;; esac fi if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='atomes' VERSION='1.3.1' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar plaintar pax cpio none' # The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5 printf %s "checking whether UID '$am_uid' is supported by ustar format... " >&6; } if test x$am_uid = xunknown; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&5 printf "%s\n" "$as_me: WARNING: ancient id detected; assuming current UID is ok, but dist-ustar might not work" >&2;} elif test $am_uid -le $am_max_uid; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } _am_tools=none fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5 printf %s "checking whether GID '$am_gid' is supported by ustar format... " >&6; } if test x$gm_gid = xunknown; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&5 printf "%s\n" "$as_me: WARNING: ancient id detected; assuming current GID is ok, but dist-ustar might not work" >&2;} elif test $am_gid -le $am_max_gid; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } _am_tools=none fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5 printf %s "checking how to create a ustar tar archive... " >&6; } # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_ustar-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do { echo "$as_me:$LINENO: $_am_tar --version" >&5 ($_am_tar --version) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } && break done am__tar="$_am_tar --format=ustar -chf - "'"$$tardir"' am__tar_="$_am_tar --format=ustar -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x ustar -w "$$tardir"' am__tar_='pax -L -x ustar -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H ustar -L' am__tar_='find "$tardir" -print | cpio -o -H ustar -L' am__untar='cpio -i -H ustar -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_ustar}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file { echo "$as_me:$LINENO: tardir=conftest.dir && eval $am__tar_ >conftest.tar" >&5 (tardir=conftest.dir && eval $am__tar_ >conftest.tar) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } rm -rf conftest.dir if test -s conftest.tar; then { echo "$as_me:$LINENO: $am__untar &5 ($am__untar &5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } { echo "$as_me:$LINENO: cat conftest.dir/file" >&5 (cat conftest.dir/file) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir if test ${am_cv_prog_tar_ustar+y} then : printf %s "(cached) " >&6 else case e in #( e) am_cv_prog_tar_ustar=$_am_tool ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5 printf "%s\n" "$am_cv_prog_tar_ustar" >&6; } # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi printf "%s\n" "#define ATOMES_MAJOR_VERSION 1" >>confdefs.h ATOMES_MAJOR_VERSION=1 printf "%s\n" "#define ATOMES_MINOR_VERSION 3" >>confdefs.h ATOMES_MINOR_VERSION=3 printf "%s\n" "#define ATOMES_PATCH_VERSION 1" >>confdefs.h ATOMES_PATCH_VERSION=1 ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to 'no'. # So ignore a value of 'no', otherwise this would lead to 'EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an '-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else case e in #( e) ac_file='' ;; esac fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See 'config.log' for more details" "$LINENO" 5; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both 'conftest.exe' and 'conftest' are 'present' (well, observable) # catch 'conftest.exe'. For instance with Cygwin, 'ls conftest' will # work properly (i.e., refer to 'conftest.exe'), while it won't with # 'rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else case e in #( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); if (!f) return 1; return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use '--host'. See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext \ conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in #( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_header= ac_cache= for ac_item in $ac_header_c_list do if test $ac_cache; then ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then printf "%s\n" "#define $ac_item 1" >> confdefs.h fi ac_header= ac_cache= elif test $ac_header; then ac_cache=$ac_item else ac_header=$ac_item fi done if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes then : printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes then : printf "%s\n" "#define HAVE_LIBINTL_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes then : printf "%s\n" "#define HAVE_LOCALE_H 1" >>confdefs.h fi # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac build_linux=no build_windows=no build_mac=no # Detect the target system case "${host_os}" in linux*) build_linux=yes echo "Building Linux application" ;; cygwin*|mingw*) build_windows=yes echo "Building Windows application" ;; darwin*) build_mac=yes echo "Building macOS application" ;; *) as_fn_error $? "\"OS $host_os is not supported\"" "$LINENO" 5 ;; esac # Pass the conditionals to automake if test "$build_linux" = "yes"; then LINUX_TRUE= LINUX_FALSE='#' else LINUX_TRUE='#' LINUX_FALSE= fi if test "$build_windows" = "yes"; then WINDOWS_TRUE= WINDOWS_FALSE='#' else WINDOWS_TRUE='#' WINDOWS_FALSE= fi if test "$build_mac" = "yes"; then OSX_TRUE= OSX_FALSE='#' else OSX_TRUE='#' OSX_FALSE= fi if test "$build_windows" = "yes"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_WINDRES+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 printf "%s\n" "$WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_WINDRES+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 printf "%s\n" "$ac_ct_WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="no" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi if test "$WINDRES" = no; then as_fn_error $? "*** Could not find an implementation of windres in your PATH." "$LINENO" 5 fi fi # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PKG_CONFIG" && ac_cv_prog_PKG_CONFIG="no" fi ;; esac fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-mime-database", so it can be a program name with args. set dummy update-mime-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_MIME+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$UP_MIME"; then ac_cv_prog_UP_MIME="$UP_MIME" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_MIME="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_MIME" && ac_cv_prog_UP_MIME="no" fi ;; esac fi UP_MIME=$ac_cv_prog_UP_MIME if test -n "$UP_MIME"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_MIME" >&5 printf "%s\n" "$UP_MIME" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-desktop-database", so it can be a program name with args. set dummy update-desktop-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_DESKTOP+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$UP_DESKTOP"; then ac_cv_prog_UP_DESKTOP="$UP_DESKTOP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_DESKTOP="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_DESKTOP" && ac_cv_prog_UP_DESKTOP="no" fi ;; esac fi UP_DESKTOP=$ac_cv_prog_UP_DESKTOP if test -n "$UP_DESKTOP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_DESKTOP" >&5 printf "%s\n" "$UP_DESKTOP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "appstream-util", so it can be a program name with args. set dummy appstream-util; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_APPSTREAM+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$UP_APPSTREAM"; then ac_cv_prog_UP_APPSTREAM="$UP_APPSTREAM" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_APPSTREAM="yes" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_APPSTREAM" && ac_cv_prog_UP_APPSTREAM="no" fi ;; esac fi UP_APPSTREAM=$ac_cv_prog_UP_APPSTREAM if test -n "$UP_APPSTREAM"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_APPSTREAM" >&5 printf "%s\n" "$UP_APPSTREAM" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # determine the GTK version to use { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the GTK version to use" >&5 printf %s "checking the GTK version to use... " >&6; } # Check whether --with-gtk was given. if test ${with_gtk+y} then : withval=$with_gtk; case "$with_gtk" in 3|4) ;; *) as_fn_error $? "invalid GTK version specified" "$LINENO" 5 ;; esac else case e in #( e) with_gtk=3 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_gtk" >&5 printf "%s\n" "$with_gtk" >&6; } if test "$with_gtk" == "3"; then GTK3_TRUE= GTK3_FALSE='#' else GTK3_TRUE='#' GTK3_FALSE= fi case "$with_gtk" in 3) gtk_version="gtk+-3.0" gtk_version_number="3.16" ;; 4) gtk_version="gtk4" gtk_version_number="4.6" ;; esac if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in #( e) case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else case e in #( e) case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi if test -z "$PKG_CONFIG"; then as_fn_error $? "pkg-config not found" "$LINENO" 5 fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $gtk_version >= $gtk_version_number" >&5 printf %s "checking for $gtk_version >= $gtk_version_number... " >&6; } if test -n "$LGTK_CFLAGS"; then pkg_cv_LGTK_CFLAGS="$LGTK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_version >= \$gtk_version_number\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_version >= $gtk_version_number") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LGTK_CFLAGS=`$PKG_CONFIG --cflags "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LGTK_LIBS"; then pkg_cv_LGTK_LIBS="$LGTK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$gtk_version >= \$gtk_version_number\""; } >&5 ($PKG_CONFIG --exists --print-errors "$gtk_version >= $gtk_version_number") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LGTK_LIBS=`$PKG_CONFIG --libs "$gtk_version >= $gtk_version_number" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LGTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$gtk_version >= $gtk_version_number" 2>&1` else LGTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$gtk_version >= $gtk_version_number" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LGTK_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ($gtk_version >= $gtk_version_number) were not met: $LGTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LGTK_CFLAGS and LGTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LGTK_CFLAGS and LGTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else LGTK_CFLAGS=$pkg_cv_LGTK_CFLAGS LGTK_LIBS=$pkg_cv_LGTK_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi if test "$with_gtk" = "3"; then if test "$build_mac" = "yes"; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gtk-mac-integration" >&5 printf %s "checking for gtk-mac-integration... " >&6; } if test -n "$INTEGRATION_CFLAGS"; then pkg_cv_INTEGRATION_CFLAGS="$INTEGRATION_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-mac-integration\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-mac-integration") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_INTEGRATION_CFLAGS=`$PKG_CONFIG --cflags "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$INTEGRATION_LIBS"; then pkg_cv_INTEGRATION_LIBS="$INTEGRATION_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk-mac-integration\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-mac-integration") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_INTEGRATION_LIBS=`$PKG_CONFIG --libs "gtk-mac-integration" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then INTEGRATION_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk-mac-integration" 2>&1` else INTEGRATION_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk-mac-integration" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$INTEGRATION_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtk-mac-integration) were not met: $INTEGRATION_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables INTEGRATION_CFLAGS and INTEGRATION_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables INTEGRATION_CFLAGS and INTEGRATION_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else INTEGRATION_CFLAGS=$pkg_cv_INTEGRATION_CFLAGS INTEGRATION_LIBS=$pkg_cv_INTEGRATION_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libxml-2.0 >= 2.4.0" >&5 printf %s "checking for libxml-2.0 >= 2.4.0... " >&6; } if test -n "$LIBXML2_CFLAGS"; then pkg_cv_LIBXML2_CFLAGS="$LIBXML2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBXML2_LIBS"; then pkg_cv_LIBXML2_LIBS="$LIBXML2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_LIBS=`$PKG_CONFIG --libs "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBXML2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` else LIBXML2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBXML2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libxml-2.0 >= 2.4.0) were not met: $LIBXML2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else LIBXML2_CFLAGS=$pkg_cv_LIBXML2_CFLAGS LIBXML2_LIBS=$pkg_cv_LIBXML2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pangoft2" >&5 printf %s "checking for pangoft2... " >&6; } if test -n "$PANGOFT2_CFLAGS"; then pkg_cv_PANGOFT2_CFLAGS="$PANGOFT2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_CFLAGS=`$PKG_CONFIG --cflags "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$PANGOFT2_LIBS"; then pkg_cv_PANGOFT2_LIBS="$PANGOFT2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_LIBS=`$PKG_CONFIG --libs "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "pangoft2" 2>&1` else PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "pangoft2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PANGOFT2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (pangoft2) were not met: $PANGOFT2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else PANGOFT2_CFLAGS=$pkg_cv_PANGOFT2_CFLAGS PANGOFT2_LIBS=$pkg_cv_PANGOFT2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libavcodec libavformat libavutil libswscale" >&5 printf %s "checking for libavcodec libavformat libavutil libswscale... " >&6; } if test -n "$FFMPEG_CFLAGS"; then pkg_cv_FFMPEG_CFLAGS="$FFMPEG_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_CFLAGS=`$PKG_CONFIG --cflags "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FFMPEG_LIBS"; then pkg_cv_FFMPEG_LIBS="$FFMPEG_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FFMPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` else FFMPEG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FFMPEG_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libavcodec libavformat libavutil libswscale) were not met: $FFMPEG_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else FFMPEG_CFLAGS=$pkg_cv_FFMPEG_CFLAGS FFMPEG_LIBS=$pkg_cv_FFMPEG_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi if test "$build_windows" = "no"; then pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for glu" >&5 printf %s "checking for glu... " >&6; } if test -n "$GLU_CFLAGS"; then pkg_cv_GLU_CFLAGS="$GLU_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_CFLAGS=`$PKG_CONFIG --cflags "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLU_LIBS"; then pkg_cv_GLU_LIBS="$GLU_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_LIBS=`$PKG_CONFIG --libs "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLU_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glu" 2>&1` else GLU_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glu" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLU_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glu) were not met: $GLU_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else GLU_CFLAGS=$pkg_cv_GLU_CFLAGS GLU_LIBS=$pkg_cv_GLU_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for epoxy" >&5 printf %s "checking for epoxy... " >&6; } if test -n "$EPOXY_CFLAGS"; then pkg_cv_EPOXY_CFLAGS="$EPOXY_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_CFLAGS=`$PKG_CONFIG --cflags "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$EPOXY_LIBS"; then pkg_cv_EPOXY_LIBS="$EPOXY_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_LIBS=`$PKG_CONFIG --libs "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then EPOXY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "epoxy" 2>&1` else EPOXY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "epoxy" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$EPOXY_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (epoxy) were not met: $EPOXY_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See 'config.log' for more details" "$LINENO" 5; } else EPOXY_CFLAGS=$pkg_cv_EPOXY_CFLAGS EPOXY_LIBS=$pkg_cv_EPOXY_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi # Checking for compilers # C ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See 'config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else case e in #( e) CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else case e in #( e) ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 ;; esac fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC ;; esac fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" ;; esac fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done # aligned with autoconf, so not including core; see bug#72225. rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.$ac_objext \ conftest.dSYM conftest1.$ac_ext conftest1.$ac_objext conftest1.dSYM \ conftest2.$ac_ext conftest2.$ac_objext conftest2.dSYM unset am_i ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thus: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags__$CFLAGS" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 printf %s "checking whether C compiler accepts $CFLAGS... " >&6; } if eval test \${$as_CACHEVAR+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_check_save_flags=$CFLAGS CFLAGS="$CFLAGS $CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval "$as_CACHEVAR=yes" else case e in #( e) eval "$as_CACHEVAR=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ax_check_save_flags ;; esac fi eval ac_res=\$$as_CACHEVAR { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes" then : : else case e in #( e) : ;; esac fi # Fortran 90 ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use '.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else case e in #( e) FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else case e in #( e) ac_cv_prog_fc_g=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else case e in #( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $# != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* | mingw* | windows*) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" ;; esac fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5 printf %s "checking for dummy main to link with Fortran libraries... " >&6; } if test ${ac_cv_fc_dummy_main+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_fc_dm_save_LIBS=$LIBS LIBS="$LIBS $FCLIBS" ac_fortran_dm_var=FC_DUMMY_MAIN ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # First, try linking without a dummy main: cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=none else case e in #( e) ac_cv_fortran_dummy_main=unknown ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define $ac_fortran_dm_var $ac_func #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=$ac_func; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_fc_dm_save_LIBS ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_dummy_main" >&5 printf "%s\n" "$ac_cv_fc_dummy_main" >&6; } FC_DUMMY_MAIN=$ac_cv_fc_dummy_main if test "$FC_DUMMY_MAIN" != unknown then : if test $FC_DUMMY_MAIN != none; then printf "%s\n" "#define FC_DUMMY_MAIN $FC_DUMMY_MAIN" >>confdefs.h if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then printf "%s\n" "#define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h fi fi else case e in #( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "linking to Fortran libraries from C fails See 'config.log' for more details" "$LINENO" 5; } ;; esac fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5 printf %s "checking for Fortran name-mangling scheme... " >&6; } if test ${ac_cv_fc_mangling+y} then : printf %s "(cached) " >&6 else case e in #( e) cat > conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FCLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char $ac_func (void); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success=yes; break 2 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. The 'extern "C"' is for builds by C++ compilers; although this is not generally supported in C code supporting it here has little cost and some practical benefit (sr 110532). */ #ifdef __cplusplus extern "C" #endif char $ac_func (void); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success_extra=yes; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_fc_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore" fi else ac_cv_fc_mangling="unknown" fi else ac_cv_fc_mangling="unknown" fi LIBS=$ac_save_LIBS rm -rf conftest* rm -f cfortran_test* else case e in #( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "cannot compile a simple Fortran program See 'config.log' for more details" "$LINENO" 5; } ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_mangling" >&5 printf "%s\n" "$ac_cv_fc_mangling" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu case $ac_cv_fc_mangling in "lower case, no underscore, no extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) name" >>confdefs.h ;; "lower case, no underscore, extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, no extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) name ## __" >>confdefs.h ;; "upper case, no underscore, no extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) NAME" >>confdefs.h ;; "upper case, no underscore, extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, no extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) NAME ## __" >>confdefs.h ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 printf "%s\n" "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu fcflags_save="$FCFLAGS" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use '.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else case e in #( e) FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else case e in #( e) ac_cv_prog_fc_g=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu FCFLAGS="$fcflags_save" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f90 files" >&5 printf %s "checking for Fortran flag to compile .f90 files... " >&6; } if test ${ac_cv_fc_srcext_f90+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_ext=f90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_f90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=f90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_f90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.f90 ac_fcflags_srcext=$ac_fcflags_srcext_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f90" >&5 printf "%s\n" "$ac_cv_fc_srcext_f90" >&6; } if test "x$ac_cv_fc_srcext_f90" = xunknown; then as_fn_error $? "Cannot compile .f90 files" "$LINENO" 5 else ac_fc_srcext=f90 if test "x$ac_cv_fc_srcext_f90" = xnone; then ac_fcflags_srcext="" FCFLAGS_f90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_f90 FCFLAGS_f90=$ac_cv_fc_srcext_f90 fi FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .F90 files" >&5 printf %s "checking for Fortran flag to compile .F90 files... " >&6; } if test ${ac_cv_fc_srcext_F90+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_ext=F90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_F90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=F90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_F90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.F90 ac_fcflags_srcext=$ac_fcflags_srcext_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_F90" >&5 printf "%s\n" "$ac_cv_fc_srcext_F90" >&6; } if test "x$ac_cv_fc_srcext_F90" = xunknown; then as_fn_error $? "Cannot compile .F90 files" "$LINENO" 5 else ac_fc_srcext=F90 if test "x$ac_cv_fc_srcext_F90" = xnone; then ac_fcflags_srcext="" FCFLAGS_F90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_F90 FCFLAGS_F90=$ac_cv_fc_srcext_F90 fi FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu as_CACHEVAR=`printf "%s\n" "ax_cv_check_fcflags__$FCFLAGS" | sed "$as_sed_sh"` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Fortran compiler accepts $FCFLAGS" >&5 printf %s "checking whether Fortran compiler accepts $FCFLAGS... " >&6; } if eval test \${$as_CACHEVAR+y} then : printf %s "(cached) " >&6 else case e in #( e) ax_check_save_flags=$FCFLAGS FCFLAGS="$FCFLAGS $FCFLAGS" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : eval "$as_CACHEVAR=yes" else case e in #( e) eval "$as_CACHEVAR=no" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext FCFLAGS=$ax_check_save_flags ;; esac fi eval ac_res=\$$as_CACHEVAR { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if eval test \"x\$"$as_CACHEVAR"\" = x"yes" then : : else case e in #( e) : ;; esac fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else case e in #( e) cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $# != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* | mingw* | windows*) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" ;; esac fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else case e in #( e) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag needed to accept free-form source" >&5 printf %s "checking for Fortran flag needed to accept free-form source... " >&6; } if test ${ac_cv_fc_freeform+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_fc_freeform=unknown ac_fc_freeform_FCFLAGS_save=$FCFLAGS for ac_flag in none -ffree-form -FR -free -qfree -Mfree -Mfreeform \ -freeform "-f free" -8 +source=free -nfix --nfix -Free do test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_freeform_FCFLAGS_save $ac_flag" cat > conftest.$ac_ext <<_ACEOF program freeform ! FIXME: how to best confuse non-freeform compilers? print *, 'Hello ', & 'world.' end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_freeform=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.err conftest.$ac_objext conftest.$ac_ext FCFLAGS=$ac_fc_freeform_FCFLAGS_save ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_freeform" >&5 printf "%s\n" "$ac_cv_fc_freeform" >&6; } if test "x$ac_cv_fc_freeform" = xunknown; then as_fn_error 77 "Fortran does not accept free-form source" "$LINENO" 5 else if test "x$ac_cv_fc_freeform" != xnone; then FCFLAGS="$FCFLAGS $ac_cv_fc_freeform" fi fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat lic > src/version.h echo "#define FC \""$FC"\"" >> src/version.h echo "#define FCFLAGS \""$FCFLAGS"\"" >> src/version.h echo "#define CC \""$CC"\"" >> src/version.h echo "#define CFLAGS \""$CFLAGS"\"" >> src/version.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the OpenMP specification and flags" >&5 printf %s "checking the OpenMP specification and flags... " >&6; } # Check whether --enable---disable-openmp was given. if test ${enable___disable_openmp+y} then : enableval=$enable___disable_openmp; with_opemp="no" else case e in #( e) with_openmp="yes" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_openmp" >&5 printf "%s\n" "$with_openmp" >&6; } if test "$with_openmp" = "yes"; then if test -e penmp || test -e mp; then as_fn_error $? "AC_OPENMP clobbers files named 'mp' and 'penmp'. Aborting configure because one of these files already exists." "$LINENO" 5 fi # Check whether --enable-openmp was given. if test ${enable_openmp+y} then : enableval=$enable_openmp; fi OPENMP_CFLAGS= if test "$enable_openmp" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to support OpenMP" >&5 printf %s "checking for $CC option to support OpenMP... " >&6; } if test ${ac_cv_prog_c_openmp+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_c_openmp='not found' for ac_option in '' -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp -homp \ -Popenmp --openmp; do ac_save_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $ac_option" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef _OPENMP #error "OpenMP not supported" #endif #include int main (void) { return omp_get_num_threads (); } _ACEOF if ac_fn_c_try_compile "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef _OPENMP #error "OpenMP not supported" #endif #include int main (void) { return omp_get_num_threads (); } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_prog_c_openmp=$ac_option else case e in #( e) ac_cv_prog_c_openmp='unsupported' ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ac_save_CFLAGS if test "$ac_cv_prog_c_openmp" != 'not found'; then break fi done if test "$ac_cv_prog_c_openmp" = 'not found'; then ac_cv_prog_c_openmp='unsupported' elif test "$ac_cv_prog_c_openmp" = ''; then ac_cv_prog_c_openmp='none needed' fi rm -f penmp mp ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_c_openmp" >&5 printf "%s\n" "$ac_cv_prog_c_openmp" >&6; } if test "$ac_cv_prog_c_openmp" != 'unsupported' && \ test "$ac_cv_prog_c_openmp" != 'none needed'; then OPENMP_CFLAGS="$ac_cv_prog_c_openmp" fi fi if test "${OPENMP_CFLAGS}" != ""; then OPENMP_TRUE= OPENMP_FALSE='#' else OPENMP_TRUE='#' OPENMP_FALSE= fi fi ac_config_files="$ac_config_files Makefile data/Makefile man/Makefile locale/Makefile src/Makefile src/startup-testing/Makefile" ac_config_headers="$ac_config_headers config.h" if test "$build_windows" = "yes"; then ac_config_files="$ac_config_files misc/win/atomes.rc:misc/win/atomes.rc.in misc/win/startup.rc:misc/win/startup.rc.in" fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # 'ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* 'ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # 'set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # 'set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; esac if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${LINUX_TRUE}" && test -z "${LINUX_FALSE}"; then as_fn_error $? "conditional \"LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WINDOWS_TRUE}" && test -z "${WINDOWS_FALSE}"; then as_fn_error $? "conditional \"WINDOWS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OSX_TRUE}" && test -z "${OSX_FALSE}"; then as_fn_error $? "conditional \"OSX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GTK3_TRUE}" && test -z "${GTK3_FALSE}"; then as_fn_error $? "conditional \"GTK3\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${OPENMP_TRUE}" && test -z "${OPENMP_FALSE}"; then as_fn_error $? "conditional \"OPENMP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as 'sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both 'ln -s file dir' and 'ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; 'ln -s' creates a wrapper executable. # In both cases, we have to default to 'cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by atomes $as_me 1.3.1, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ '$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . atomes home page: ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ atomes config.status 1.3.1 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" Copyright (C) 2023 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: '$1' Try '$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: '$1' Try '$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "locale/Makefile") CONFIG_FILES="$CONFIG_FILES locale/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/startup-testing/Makefile") CONFIG_FILES="$CONFIG_FILES src/startup-testing/Makefile" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "misc/win/atomes.rc") CONFIG_FILES="$CONFIG_FILES misc/win/atomes.rc:misc/win/atomes.rc.in" ;; "misc/win/startup.rc") CONFIG_FILES="$CONFIG_FILES misc/win/startup.rc:misc/win/startup.rc.in" ;; *) as_fn_error $? "invalid argument: '$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to '$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with './config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with './config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script 'defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag '$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain ':'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: '$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is 'configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when '$srcdir' = '.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable 'datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See 'config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi atomes_1.3.1/lic0000664000175000017500000000120315212624223013173 0ustar lerouxleroux/* This file is part of atomes. atomes is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. atomes 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 Affero General Public License along with atomes. If not, see */ atomes_1.3.1/config.sub0000775000175000017500000010512115212624223014470 0ustar lerouxleroux#!/usr/bin/sh # Configuration validation subroutine script. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-01-03' # This file 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. # # This program 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 this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read kernel os <&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ | linux-musl* | linux-relibc* | linux-uclibc* ) ;; uclinux-uclibc* ) ;; -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: